From 01f2de512ac271473169d3f02efc877bbe356f49 Mon Sep 17 00:00:00 2001 From: David Neto Date: Mon, 27 Jul 2020 15:33:56 -0400 Subject: [PATCH 001/365] Avoid spurious warning about uninit var --- glslang/MachineIndependent/reflection.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp index 03d6fe1457..50b9373706 100644 --- a/glslang/MachineIndependent/reflection.cpp +++ b/glslang/MachineIndependent/reflection.cpp @@ -639,7 +639,7 @@ class TReflectionTraverser : public TIntermTraverser { int addBlockName(const TString& name, const TType& type, int size) { - int blockIndex; + int blockIndex = 0; if (type.isArray()) { TType derefType(type, 0); for (int e = 0; e < type.getOuterArraySize(); ++e) { From 2a44064885a84e1e031880c56f00084796f6ae10 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Fri, 31 Jul 2020 07:09:17 +0100 Subject: [PATCH 002/365] Revert changes that migrate to `thread_local`. iOS 8 does not support `thread_local`, which is still in use. Another approach will have to be found. This change is a revert of the following changes: a3845240 - "Simplify PoolAlloc with use of thread_local." abf92c80 - "Deprecate InitializeDll functions" 33585c87 - "Limit visibility of symbols for internal libraries" Issue: #2346 --- CMakeLists.txt | 16 +-- OGLCompilersDLL/CMakeLists.txt | 1 - OGLCompilersDLL/InitializeDll.cpp | 128 +++++++++++++++++++++++ OGLCompilersDLL/InitializeDll.h | 8 +- SPIRV/CMakeLists.txt | 9 +- glslang/CMakeLists.txt | 4 +- glslang/Include/InitializeGlobals.h | 2 +- glslang/MachineIndependent/PoolAlloc.cpp | 28 +++-- 8 files changed, 161 insertions(+), 35 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f4a6fb13b7..fd9335ee7d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -279,23 +279,17 @@ function(glslang_add_build_info_dependency target) add_dependencies(${target} glslang-build-info) endfunction() -# glslang_default_to_hidden_visibility() makes the symbol visibility hidden by -# default for . -function(glslang_default_to_hidden_visibility target) - if(NOT WIN32) - target_compile_options(${target} PRIVATE "-fvisibility=hidden") - endif() -endfunction() - # glslang_only_export_explicit_symbols() makes the symbol visibility hidden by -# default for , and sets the GLSLANG_IS_SHARED_LIBRARY define, and -# GLSLANG_EXPORTING to 1 when specifically building . +# default for when building shared libraries, and sets the +# GLSLANG_IS_SHARED_LIBRARY define, and GLSLANG_EXPORTING to 1 when specifically +# building . function(glslang_only_export_explicit_symbols target) - glslang_default_to_hidden_visibility(${target}) if(BUILD_SHARED_LIBS) target_compile_definitions(${target} PUBLIC "GLSLANG_IS_SHARED_LIBRARY=1") if(WIN32) target_compile_definitions(${target} PRIVATE "GLSLANG_EXPORTING=1") + else() + target_compile_options(${target} PRIVATE "-fvisibility=hidden") endif() endif() endfunction() diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt index 246b4e7767..0b007d45c6 100644 --- a/OGLCompilersDLL/CMakeLists.txt +++ b/OGLCompilersDLL/CMakeLists.txt @@ -36,7 +36,6 @@ set(SOURCES InitializeDll.cpp InitializeDll.h) add_library(OGLCompiler STATIC ${SOURCES}) set_property(TARGET OGLCompiler PROPERTY FOLDER glslang) set_property(TARGET OGLCompiler PROPERTY POSITION_INDEPENDENT_CODE ON) -glslang_default_to_hidden_visibility(OGLCompiler) if(WIN32) source_group("Source" FILES ${SOURCES}) diff --git a/OGLCompilersDLL/InitializeDll.cpp b/OGLCompilersDLL/InitializeDll.cpp index ab3762e011..abea9108b1 100644 --- a/OGLCompilersDLL/InitializeDll.cpp +++ b/OGLCompilersDLL/InitializeDll.cpp @@ -32,6 +32,134 @@ // POSSIBILITY OF SUCH DAMAGE. // +#define SH_EXPORTING + +#include + +#include "InitializeDll.h" +#include "../glslang/Include/InitializeGlobals.h" +#include "../glslang/Public/ShaderLang.h" +#include "../glslang/Include/PoolAlloc.h" + namespace glslang { +OS_TLSIndex ThreadInitializeIndex = OS_INVALID_TLS_INDEX; + +// Per-process initialization. +// Needs to be called at least once before parsing, etc. is done. +// Will also do thread initialization for the calling thread; other +// threads will need to do that explicitly. +bool InitProcess() +{ + glslang::GetGlobalLock(); + + if (ThreadInitializeIndex != OS_INVALID_TLS_INDEX) { + // + // Function is re-entrant. + // + + glslang::ReleaseGlobalLock(); + return true; + } + + ThreadInitializeIndex = OS_AllocTLSIndex(); + + if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) { + assert(0 && "InitProcess(): Failed to allocate TLS area for init flag"); + + glslang::ReleaseGlobalLock(); + return false; + } + + if (! InitializePoolIndex()) { + assert(0 && "InitProcess(): Failed to initialize global pool"); + + glslang::ReleaseGlobalLock(); + return false; + } + + if (! InitThread()) { + assert(0 && "InitProcess(): Failed to initialize thread"); + + glslang::ReleaseGlobalLock(); + return false; + } + + glslang::ReleaseGlobalLock(); + return true; +} + +// Per-thread scoped initialization. +// Must be called at least once by each new thread sharing the +// symbol tables, etc., needed to parse. +bool InitThread() +{ + // + // This function is re-entrant + // + if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) { + assert(0 && "InitThread(): Process hasn't been initalised."); + return false; + } + + if (OS_GetTLSValue(ThreadInitializeIndex) != 0) + return true; + + if (! OS_SetTLSValue(ThreadInitializeIndex, (void *)1)) { + assert(0 && "InitThread(): Unable to set init flag."); + return false; + } + + glslang::SetThreadPoolAllocator(nullptr); + + return true; +} + +// Not necessary to call this: InitThread() is reentrant, and the need +// to do per thread tear down has been removed. +// +// This is kept, with memory management removed, to satisfy any exiting +// calls to it that rely on it. +bool DetachThread() +{ + bool success = true; + + if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) + return true; + + // + // Function is re-entrant and this thread may not have been initialized. + // + if (OS_GetTLSValue(ThreadInitializeIndex) != 0) { + if (!OS_SetTLSValue(ThreadInitializeIndex, (void *)0)) { + assert(0 && "DetachThread(): Unable to clear init flag."); + success = false; + } + } + + return success; +} + +// Not necessary to call this: InitProcess() is reentrant. +// +// This is kept, with memory management removed, to satisfy any exiting +// calls to it that rely on it. +// +// Users of glslang should call shFinalize() or glslang::FinalizeProcess() for +// process-scoped memory tear down. +bool DetachProcess() +{ + bool success = true; + + if (ThreadInitializeIndex == OS_INVALID_TLS_INDEX) + return true; + + success = DetachThread(); + + OS_FreeTLSIndex(ThreadInitializeIndex); + ThreadInitializeIndex = OS_INVALID_TLS_INDEX; + + return success; +} + } // end namespace glslang diff --git a/OGLCompilersDLL/InitializeDll.h b/OGLCompilersDLL/InitializeDll.h index b18e2ab3c5..661cee4d24 100644 --- a/OGLCompilersDLL/InitializeDll.h +++ b/OGLCompilersDLL/InitializeDll.h @@ -38,10 +38,10 @@ namespace glslang { -inline bool InitProcess() { return true; } // DEPRECATED -inline bool InitThread() { return true; } // DEPRECATED -inline bool DetachThread() { return true; } // DEPRECATED -inline bool DetachProcess() { return true; } // DEPRECATED +bool InitProcess(); +bool InitThread(); +bool DetachThread(); // not called from standalone, perhaps other tools rely on parts of it +bool DetachProcess(); // not called from standalone, perhaps other tools rely on parts of it } // end namespace glslang diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt index 53ada4f9a1..d699daddb6 100644 --- a/SPIRV/CMakeLists.txt +++ b/SPIRV/CMakeLists.txt @@ -43,7 +43,8 @@ set(SOURCES CInterface/spirv_c_interface.cpp) set(SPVREMAP_SOURCES - SPVRemapper.cpp) + SPVRemapper.cpp + doc.cpp) set(HEADERS bitutils.h @@ -68,7 +69,6 @@ set(SPVREMAP_HEADERS doc.h) add_library(SPIRV ${LIB_TYPE} ${SOURCES} ${HEADERS}) -target_link_libraries(SPIRV PRIVATE MachineIndependent) set_property(TARGET SPIRV PROPERTY FOLDER glslang) set_property(TARGET SPIRV PROPERTY POSITION_INDEPENDENT_CODE ON) target_include_directories(SPIRV PUBLIC @@ -79,7 +79,6 @@ glslang_add_build_info_dependency(SPIRV) if (ENABLE_SPVREMAPPER) add_library(SPVRemapper ${LIB_TYPE} ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS}) - target_link_libraries(SPVRemapper PRIVATE SPIRV) set_property(TARGET SPVRemapper PROPERTY FOLDER glslang) set_property(TARGET SPVRemapper PROPERTY POSITION_INDEPENDENT_CODE ON) endif() @@ -96,10 +95,12 @@ if(ENABLE_OPT) PRIVATE ${spirv-tools_SOURCE_DIR}/include PRIVATE ${spirv-tools_SOURCE_DIR}/source ) - target_link_libraries(SPIRV PRIVATE SPIRV-Tools-opt) + target_link_libraries(SPIRV PRIVATE MachineIndependent SPIRV-Tools-opt) target_include_directories(SPIRV PUBLIC $ $) +else() + target_link_libraries(SPIRV PRIVATE MachineIndependent) endif(ENABLE_OPT) if(WIN32) diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt index 14249bfa63..1c7d22a2a0 100644 --- a/glslang/CMakeLists.txt +++ b/glslang/CMakeLists.txt @@ -52,7 +52,6 @@ add_library(GenericCodeGen STATIC GenericCodeGen/Link.cpp) set_property(TARGET GenericCodeGen PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET GenericCodeGen PROPERTY FOLDER glslang) -glslang_default_to_hidden_visibility(GenericCodeGen) ################################################################################ # MachineIndependent @@ -134,7 +133,6 @@ endif(ENABLE_HLSL) add_library(MachineIndependent STATIC ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS}) set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE ON) set_property(TARGET MachineIndependent PROPERTY FOLDER glslang) -glslang_only_export_explicit_symbols(MachineIndependent) glslang_add_build_info_dependency(MachineIndependent) @@ -170,7 +168,7 @@ set_target_properties(glslang PROPERTIES POSITION_INDEPENDENT_CODE ON VERSION "${GLSLANG_VERSION}" SOVERSION "${GLSLANG_VERSION_MAJOR}") -target_link_libraries(glslang PRIVATE OGLCompiler MachineIndependent) +target_link_libraries(glslang PRIVATE OGLCompiler OSDependent MachineIndependent) target_include_directories(glslang PUBLIC $ $) diff --git a/glslang/Include/InitializeGlobals.h b/glslang/Include/InitializeGlobals.h index b7fdd7aabc..95d0a40e99 100644 --- a/glslang/Include/InitializeGlobals.h +++ b/glslang/Include/InitializeGlobals.h @@ -37,7 +37,7 @@ namespace glslang { -inline bool InitializePoolIndex() { return true; } // DEPRECATED: No need to call +bool InitializePoolIndex(); } // end namespace glslang diff --git a/glslang/MachineIndependent/PoolAlloc.cpp b/glslang/MachineIndependent/PoolAlloc.cpp index c269d7d83c..84c40f4e79 100644 --- a/glslang/MachineIndependent/PoolAlloc.cpp +++ b/glslang/MachineIndependent/PoolAlloc.cpp @@ -35,28 +35,34 @@ #include "../Include/Common.h" #include "../Include/PoolAlloc.h" -namespace glslang { +#include "../Include/InitializeGlobals.h" +#include "../OSDependent/osinclude.h" -namespace { -thread_local TPoolAllocator* threadPoolAllocator = nullptr; +namespace glslang { -TPoolAllocator* GetDefaultThreadPoolAllocator() -{ - thread_local TPoolAllocator defaultAllocator; - return &defaultAllocator; -} -} // anonymous namespace +// Process-wide TLS index +OS_TLSIndex PoolIndex; // Return the thread-specific current pool. TPoolAllocator& GetThreadPoolAllocator() { - return *(threadPoolAllocator ? threadPoolAllocator : GetDefaultThreadPoolAllocator()); + return *static_cast(OS_GetTLSValue(PoolIndex)); } // Set the thread-specific current pool. void SetThreadPoolAllocator(TPoolAllocator* poolAllocator) { - threadPoolAllocator = poolAllocator; + OS_SetTLSValue(PoolIndex, poolAllocator); +} + +// Process-wide set up of the TLS pool storage. +bool InitializePoolIndex() +{ + // Allocate a TLS index. + if ((PoolIndex = OS_AllocTLSIndex()) == OS_INVALID_TLS_INDEX) + return false; + + return true; } // From 1ef2e250fc36d862573cc5e92f04b1d0e2d89867 Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Fri, 3 Jul 2020 15:42:53 -0400 Subject: [PATCH 003/365] Use GLSLANG_ANGLE to strip features to what ANGLE requires This change strips a few features similar to GLSLANG_WEB but doesn't remove every detail like the latter. It also hardcodes profile/version to core/450. In particular, TBuiltIns::initialize is specialized to remove most of what is not supported or won't be supported by ANGLE. The result of this function is parsed with TParseContext::parseShaderStrings which is a performance bottleneck. This change shaves about 300KB off of ANGLE's binary size and reduces the cost of SetupBuiltinSymbolTable to nearly a sixth. Signed-off-by: Shahbaz Youssefi --- BUILD.gn | 7 +- SPIRV/GlslangToSpv.cpp | 4 +- glslang/MachineIndependent/Initialize.cpp | 170 ++++++++++++------ glslang/MachineIndependent/ShaderLang.cpp | 43 +++-- glslang/MachineIndependent/SymbolTable.cpp | 2 +- glslang/MachineIndependent/SymbolTable.h | 12 +- glslang/MachineIndependent/intermOut.cpp | 4 +- glslang/MachineIndependent/iomapper.cpp | 4 +- glslang/MachineIndependent/iomapper.h | 6 +- glslang/MachineIndependent/linkValidate.cpp | 6 +- .../MachineIndependent/localintermediate.h | 25 ++- glslang/MachineIndependent/parseVersions.h | 7 +- glslang/MachineIndependent/reflection.cpp | 4 +- glslang/MachineIndependent/reflection.h | 4 +- glslang/Public/ShaderLang.h | 10 +- gtests/Link.FromFile.Vk.cpp | 2 +- gtests/TestFixture.h | 6 +- 17 files changed, 214 insertions(+), 102 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 7242b6f373..9525b5d203 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -109,7 +109,6 @@ template("glslang_sources_common") { "SPIRV/SpvBuilder.cpp", "SPIRV/SpvBuilder.h", "SPIRV/SpvPostProcess.cpp", - "SPIRV/SpvTools.cpp", "SPIRV/SpvTools.h", "SPIRV/bitutils.h", "SPIRV/disassemble.cpp", @@ -208,8 +207,12 @@ template("glslang_sources_common") { defines = [] if (invoker.enable_opt) { + sources += [ "SPIRV/SpvTools.cpp" ] defines += [ "ENABLE_OPT=1" ] } + if (invoker.is_angle) { + defines += [ "GLSLANG_ANGLE" ] + } if (is_win) { sources += [ "glslang/OSDependent/Windows/ossource.cpp" ] @@ -257,11 +260,13 @@ template("glslang_sources_common") { glslang_sources_common("glslang_lib_sources") { enable_opt = !glslang_angle enable_hlsl = !glslang_angle + is_angle = glslang_angle } glslang_sources_common("glslang_sources") { enable_opt = true enable_hlsl = true + is_angle = false } source_set("glslang_default_resource_limits_sources") { diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index b14a3b2dc5..1aaf47a3f9 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -283,6 +283,8 @@ spv::SourceLanguage TranslateSourceLanguage(glslang::EShSource source, EProfile { #ifdef GLSLANG_WEB return spv::SourceLanguageESSL; +#elif defined(GLSLANG_ANGLE) + return spv::SourceLanguageGLSL; #endif switch (source) { @@ -8694,7 +8696,7 @@ void OutputSpvBin(const std::vector& spirv, const char* baseName) // Write SPIR-V out to a text file with 32-bit hexadecimal words void OutputSpvHex(const std::vector& spirv, const char* baseName, const char* varName) { -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) std::ofstream out; out.open(baseName, std::ios::binary | std::ios::out); if (out.fail()) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 2a121b2af6..d773a0afc6 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -147,6 +147,10 @@ EProfile EDesktopProfile = static_cast(ENoProfile | ECoreProfile | ECo #ifdef GLSLANG_WEB const Versioning* Es300Desktop130 = nullptr; const Versioning* Es310Desktop420 = nullptr; +#elif defined(GLSLANG_ANGLE) + const Versioning* Es300Desktop130 = nullptr; + const Versioning* Es310Desktop420 = nullptr; + const Versioning* Es310Desktop450 = nullptr; #else const Versioning Es300Desktop130Version[] = { { EEsProfile, 0, 300, 0, nullptr }, { EDesktopProfile, 0, 130, 0, nullptr }, @@ -415,7 +419,7 @@ void AddTabledBuiltin(TString& decls, const BuiltInFunction& function) // See if the tabled versioning information allows the current version. bool ValidVersion(const BuiltInFunction& function, int version, EProfile profile, const SpvVersion& /* spVersion */) { -#ifdef GLSLANG_WEB +#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE) // all entries in table are valid return true; #endif @@ -499,7 +503,7 @@ TBuiltIns::TBuiltIns() prefixes[EbtFloat] = ""; prefixes[EbtInt] = "i"; prefixes[EbtUint] = "u"; -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) prefixes[EbtFloat16] = "f16"; prefixes[EbtInt8] = "i8"; prefixes[EbtUint8] = "u8"; @@ -516,7 +520,9 @@ TBuiltIns::TBuiltIns() dimMap[Esd3D] = 3; dimMap[EsdCube] = 3; #ifndef GLSLANG_WEB +#ifndef GLSLANG_ANGLE dimMap[Esd1D] = 1; +#endif dimMap[EsdRect] = 2; dimMap[EsdBuffer] = 1; dimMap[EsdSubpass] = 2; // potentially unused for now @@ -541,6 +547,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV #ifdef GLSLANG_WEB version = 310; profile = EEsProfile; +#elif defined(GLSLANG_ANGLE) + version = 450; + profile = ECoreProfile; #endif addTabledBuiltins(version, profile, spvVersion); @@ -586,6 +595,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "vec4 fwidthCoarse(vec4 p);" ); +#ifndef GLSLANG_ANGLE TString derivativesAndControl16bits ( "float16_t dFdx(float16_t);" "f16vec2 dFdx(f16vec2);" @@ -1173,6 +1183,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n" ); } +#endif // !GLSLANG_ANGLE if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 430)) { @@ -1210,6 +1221,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } +#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 440) { commonBuiltins.append( "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t);" @@ -1271,7 +1283,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void atomicStore(coherent volatile out double, double, int, int, int);" "\n"); } -#endif +#endif // !GLSLANG_ANGLE +#endif // !GLSLANG_WEB if ((profile == EEsProfile && version >= 300) || (profile != EEsProfile && version >= 150)) { // GL_ARB_shader_bit_encoding @@ -1311,6 +1324,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } +#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64 commonBuiltins.append( "double fma(double, double, double);" @@ -1319,6 +1333,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "dvec4 fma(dvec4, dvec4, dvec4 );" "\n"); } +#endif if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 400)) { @@ -1336,6 +1351,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } +#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 150) { // ARB_gpu_shader_fp64 commonBuiltins.append( "double frexp(double, out int);" @@ -1353,6 +1369,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } +#endif #endif if ((profile == EEsProfile && version >= 300) || @@ -1462,6 +1479,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } #ifndef GLSLANG_WEB +#ifndef GLSLANG_ANGLE // // Original-style texture functions existing in all stages. // (Per-stage functions below.) @@ -1610,6 +1628,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } } +#endif // !GLSLANG_ANGLE // Bitfield if ((profile == EEsProfile && version >= 310) || @@ -1752,6 +1771,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } +#ifndef GLSLANG_ANGLE // GL_ARB_shader_ballot if (profile != EEsProfile && version >= 450) { commonBuiltins.append( @@ -3072,6 +3092,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "bool textureFootprintGradClampNV(sampler2D, vec2, vec2, vec2, float, int, bool, out gl_TextureFootprint2DNV);" "\n"); } +#endif // !GLSLANG_ANGLE if ((profile == EEsProfile && version >= 300 && version < 310) || (profile != EEsProfile && version >= 150 && version < 450)) { // GL_EXT_shader_integer_mix @@ -3091,6 +3112,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } +#ifndef GLSLANG_ANGLE // GL_AMD_gpu_shader_half_float/Explicit types if (profile != EEsProfile && version >= 450) { commonBuiltins.append( @@ -3941,28 +3963,30 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "f64vec3 log2(f64vec3);" "f64vec4 log2(f64vec4);" "\n"); - } - if (profile != EEsProfile && version >= 450) { - stageBuiltins[EShLangFragment].append(derivativesAndControl64bits); - stageBuiltins[EShLangFragment].append( - "float64_t interpolateAtCentroid(float64_t);" - "f64vec2 interpolateAtCentroid(f64vec2);" - "f64vec3 interpolateAtCentroid(f64vec3);" - "f64vec4 interpolateAtCentroid(f64vec4);" + } + + if (profile != EEsProfile && version >= 450) { + stageBuiltins[EShLangFragment].append(derivativesAndControl64bits); + stageBuiltins[EShLangFragment].append( + "float64_t interpolateAtCentroid(float64_t);" + "f64vec2 interpolateAtCentroid(f64vec2);" + "f64vec3 interpolateAtCentroid(f64vec3);" + "f64vec4 interpolateAtCentroid(f64vec4);" - "float64_t interpolateAtSample(float64_t, int);" - "f64vec2 interpolateAtSample(f64vec2, int);" - "f64vec3 interpolateAtSample(f64vec3, int);" - "f64vec4 interpolateAtSample(f64vec4, int);" + "float64_t interpolateAtSample(float64_t, int);" + "f64vec2 interpolateAtSample(f64vec2, int);" + "f64vec3 interpolateAtSample(f64vec3, int);" + "f64vec4 interpolateAtSample(f64vec4, int);" - "float64_t interpolateAtOffset(float64_t, f64vec2);" - "f64vec2 interpolateAtOffset(f64vec2, f64vec2);" - "f64vec3 interpolateAtOffset(f64vec3, f64vec2);" - "f64vec4 interpolateAtOffset(f64vec4, f64vec2);" + "float64_t interpolateAtOffset(float64_t, f64vec2);" + "f64vec2 interpolateAtOffset(f64vec2, f64vec2);" + "f64vec3 interpolateAtOffset(f64vec3, f64vec2);" + "f64vec4 interpolateAtOffset(f64vec4, f64vec2);" - "\n"); + "\n"); } +#endif // !GLSLANG_ANGLE //============================================================================ // @@ -3978,6 +4002,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV if (spvVersion.vulkan == 0 && IncludeLegacy(version, profile, spvVersion)) stageBuiltins[EShLangVertex].append("vec4 ftransform();"); +#ifndef GLSLANG_ANGLE // // Original-style texture Functions with lod. // @@ -4037,6 +4062,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } } +#endif // !GLSLANG_ANGLE if ((profile != EEsProfile && version >= 150) || (profile == EEsProfile && version >= 310)) { @@ -4057,7 +4083,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void EndPrimitive();" "\n"); } -#endif +#endif // !GLSLANG_WEB //============================================================================ // @@ -4117,6 +4143,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV commonBuiltins.append("void debugPrintfEXT();\n"); +#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 450) { // coopMatStoreNV perhaps ought to have "out" on the buf parameter, but // adding it introduces undesirable tempArgs on the stack. What we want @@ -4240,6 +4267,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } +#endif // !GLSLANG_ANGLE // GL_ARB_derivative_control if (profile != EEsProfile && version >= 400) { @@ -4277,6 +4305,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "bool helperInvocationEXT();" "\n"); +#ifndef GLSLANG_ANGLE // GL_AMD_shader_explicit_vertex_parameter if (profile != EEsProfile && version >= 450) { stageBuiltins[EShLangFragment].append( @@ -4411,12 +4440,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void executeCallableEXT(uint, int);" "\n"); } +#endif // !GLSLANG_ANGLE //E_SPV_NV_compute_shader_derivatives if ((profile == EEsProfile && version >= 320) || (profile != EEsProfile && version >= 450)) { stageBuiltins[EShLangCompute].append(derivativeControls); stageBuiltins[EShLangCompute].append("\n"); } +#ifndef GLSLANG_ANGLE if (profile != EEsProfile && version >= 450) { stageBuiltins[EShLangCompute].append(derivativesAndControl16bits); stageBuiltins[EShLangCompute].append(derivativesAndControl64bits); @@ -4429,7 +4460,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "void writePackedPrimitiveIndices4x8NV(uint, uint);" "\n"); } -#endif +#endif // !GLSLANG_ANGLE +#endif // !GLSLANG_WEB //============================================================================ // @@ -4466,7 +4498,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (spvVersion.spv == 0 && IncludeLegacy(version, profile, spvVersion)) { // // Matrix state. p. 31, 32, 37, 39, 40. @@ -4584,7 +4616,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } -#endif +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE //============================================================================ // @@ -4615,6 +4647,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } #ifndef GLSLANG_WEB +#ifndef GLSLANG_ANGLE //============================================================================ // // Define the interface to the mesh/task shader. @@ -4702,6 +4735,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } } +#endif // !GLSLANG_ANGLE //============================================================================ // @@ -5372,6 +5406,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV #ifndef GLSLANG_WEB + if ((profile != EEsProfile && version >= 140) || + (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangFragment].append( + "flat in highp int gl_DeviceIndex;" // GL_EXT_device_group + "flat in highp int gl_ViewIndex;" // GL_EXT_multiview + "\n"); + } + +#ifndef GLSLANG_ANGLE // GL_ARB_shader_ballot if (profile != EEsProfile && version >= 450) { const char* ballotDecls = @@ -5402,14 +5445,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangTaskNV] .append(ballotDecls); } - if ((profile != EEsProfile && version >= 140) || - (profile == EEsProfile && version >= 310)) { - stageBuiltins[EShLangFragment].append( - "flat in highp int gl_DeviceIndex;" // GL_EXT_device_group - "flat in highp int gl_ViewIndex;" // GL_EXT_multiview - "\n"); - } - // GL_KHR_shader_subgroup if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 140)) { @@ -5613,6 +5648,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangCallable].append(callableDecls); } + if ((profile != EEsProfile && version >= 140)) { const char *deviceIndex = "in highp int gl_DeviceIndex;" // GL_EXT_device_group @@ -5625,12 +5661,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangMiss].append(deviceIndex); } - if (version >= 300 /* both ES and non-ES */) { - stageBuiltins[EShLangFragment].append( - "flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2 - "\n"); - } - if ((profile != EEsProfile && version >= 420) || (profile == EEsProfile && version >= 310)) { commonBuiltins.append("const int gl_ScopeDevice = 1;\n"); @@ -5654,7 +5684,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV commonBuiltins.append("const int gl_StorageSemanticsImage = 0x800;\n"); commonBuiltins.append("const int gl_StorageSemanticsOutput = 0x1000;\n"); } -#endif + +#endif // !GLSLANG_ANGLE + + if (version >= 300 /* both ES and non-ES */) { + stageBuiltins[EShLangFragment].append( + "flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2 + "\n"); + } +#endif // !GLSLANG_WEB // printf("%s\n", commonBuiltins.c_str()); // printf("%s\n", stageBuiltins[EShLangFragment].c_str()); @@ -5672,13 +5710,16 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c // // enumerate all the types + const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint, +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) + EbtFloat16 +#endif + }; #ifdef GLSLANG_WEB - const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint }; bool skipBuffer = true; bool skipCubeArrayed = true; const int image = 0; #else - const TBasicType bTypes[] = { EbtFloat, EbtInt, EbtUint, EbtFloat16 }; bool skipBuffer = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 140); bool skipCubeArrayed = (profile == EEsProfile && version < 310) || (profile != EEsProfile && version < 130); for (int image = 0; image <= 1; ++image) // loop over "bool" image vs sampler @@ -5703,8 +5744,13 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not #ifdef GLSLANG_WEB for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube +#else +#if defined(GLSLANG_ANGLE) + // TODO: what is subpass? + for (int dim = Esd2D; dim < EsdSubpass; ++dim) { // 2D, ..., buffer #else for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass +#endif if (dim == EsdSubpass && spvVersion.vulkan == 0) continue; if (dim == EsdSubpass && (image || shadow || arrayed)) @@ -6125,6 +6171,9 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, #ifdef GLSLANG_WEB profile = EEsProfile; version = 310; +#elif defined(GLSLANG_ANGLE) + profile = ECoreProfile; + version = 450; #endif // @@ -6201,7 +6250,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, continue; // loop over 16-bit floating-point texel addressing -#ifdef GLSLANG_WEB +#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE) const int f16TexAddr = 0; #else for (int f16TexAddr = 0; f16TexAddr <= 1; ++f16TexAddr) @@ -6214,7 +6263,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, totalDims--; } // loop over "bool" lod clamp -#ifdef GLSLANG_WEB +#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE) const int lodClamp = 0; #else for (int lodClamp = 0; lodClamp <= 1 ;++lodClamp) @@ -6226,7 +6275,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, continue; // loop over "bool" sparse or not -#ifdef GLSLANG_WEB +#if defined(GLSLANG_WEB) || defined(GLSLANG_ANGLE) const int sparse = 0; #else for (int sparse = 0; sparse <= 1; ++sparse) @@ -6281,7 +6330,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, s.append("Offset"); if (lodClamp) s.append("Clamp"); - if (lodClamp || sparse) + if (lodClamp != 0 || sparse) s.append("ARB"); s.append("("); @@ -6381,7 +6430,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, s.append(");\n"); // Add to the per-language set of built-ins - if (bias || lodClamp) { + if (bias || lodClamp != 0) { stageBuiltins[EShLangFragment].append(s); stageBuiltins[EShLangCompute].append(s); } else @@ -6410,6 +6459,9 @@ void TBuiltIns::addGatherFunctions(TSampler sampler, const TString& typeName, in #ifdef GLSLANG_WEB profile = EEsProfile; version = 310; +#elif defined(GLSLANG_ANGLE) + profile = ECoreProfile; + version = 450; #endif switch (sampler.dim) { @@ -6653,6 +6705,9 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf #ifdef GLSLANG_WEB version = 310; profile = EEsProfile; +#elif defined(GLSLANG_ANGLE) + version = 450; + profile = ECoreProfile; #endif // @@ -7081,6 +7136,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append("\n"); } +#ifndef GLSLANG_ANGLE // atomic counters (some in compute below) if ((profile == EEsProfile && version >= 310) || (profile != EEsProfile && version >= 420)) { @@ -7117,6 +7173,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append("\n"); } +#endif // !GLSLANG_ANGLE // GL_ARB_cull_distance if (profile != EEsProfile && version >= 450) { @@ -7133,6 +7190,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append(builtInConstant); } +#ifndef GLSLANG_ANGLE // SPV_NV_mesh_shader if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 320)) { snprintf(builtInConstant, maxSize, "const int gl_MaxMeshOutputVerticesNV = %d;", resources.maxMeshOutputVerticesNV); @@ -7155,6 +7213,7 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf s.append("\n"); } +#endif #endif s.append("\n"); @@ -7239,6 +7298,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion #ifdef GLSLANG_WEB version = 310; profile = EEsProfile; +#elif defined(GLSLANG_ANGLE) + version = 450; + profile = ECoreProfile; #endif // @@ -7428,7 +7490,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion case EShLangTessEvaluation: case EShLangGeometry: -#endif +#endif // !GLSLANG_WEB SpecialQualifier("gl_Position", EvqPosition, EbvPosition, symbolTable); SpecialQualifier("gl_PointSize", EvqPointSize, EbvPointSize, symbolTable); @@ -7589,7 +7651,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } -#endif +#endif // !GLSLANG_WEB break; case EShLangFragment: @@ -8095,7 +8157,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } symbolTable.setFunctionExtensions("helperInvocationEXT", 1, &E_GL_EXT_demote_to_helper_invocation); -#endif +#endif // !GLSLANG_WEB break; case EShLangCompute: @@ -8227,10 +8289,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives); symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives); } -#endif +#endif // !GLSLANG_WEB break; -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) case EShLangRayGen: case EShLangIntersect: case EShLangAnyHit: @@ -9133,7 +9195,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion default: assert(false && "Language not supported"); } -#endif +#endif // !GLSLANG_WEB } // @@ -9148,6 +9210,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion& spvVersion, EShLanguage language, TSymbolTable& symbolTable, const TBuiltInResource &resources) { #ifndef GLSLANG_WEB +#if defined(GLSLANG_ANGLE) + profile = ECoreProfile; + version = 450; +#endif if (profile != EEsProfile && version >= 430 && version < 440) { symbolTable.setVariableExtensions("gl_MaxTransformFeedbackBuffers", 1, &E_GL_ARB_enhanced_layouts); symbolTable.setVariableExtensions("gl_MaxTransformFeedbackInterleavedComponents", 1, &E_GL_ARB_enhanced_layouts); diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 9c8610c929..9d7f37b098 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -294,6 +294,9 @@ void InitializeStageSymbolTable(TBuiltInParseables& builtInParseables, int versi #ifdef GLSLANG_WEB profile = EEsProfile; version = 310; +#elif defined(GLSLANG_ANGLE) + profile = ECoreProfile; + version = 450; #endif (*symbolTables[language]).adoptLevels(*commonTable[CommonIndex(profile, language)]); @@ -315,6 +318,9 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS #ifdef GLSLANG_WEB profile = EEsProfile; version = 310; +#elif defined(GLSLANG_ANGLE) + profile = ECoreProfile; + version = 450; #endif std::unique_ptr builtInParseables(CreateBuiltInParseables(infoSink, source)); @@ -354,7 +360,6 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS (profile == EEsProfile && version >= 310)) InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangGeometry, source, infoSink, commonTable, symbolTables); -#endif // check for compute if ((profile != EEsProfile && version >= 420) || @@ -362,6 +367,7 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangCompute, source, infoSink, commonTable, symbolTables); +#ifndef GLSLANG_ANGLE // check for ray tracing stages if (profile != EEsProfile && version >= 450) { InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangRayGen, source, @@ -389,6 +395,8 @@ bool InitializeSymbolTables(TInfoSink& infoSink, TSymbolTable** commonTable, TS (profile == EEsProfile && version >= 320)) InitializeStageSymbolTable(*builtInParseables, version, profile, spvVersion, EShLangTaskNV, source, infoSink, commonTable, symbolTables); +#endif // !GLSLANG_ANGLE +#endif // !GLSLANG_WEB return true; } @@ -490,7 +498,7 @@ void SetupBuiltinSymbolTable(int version, EProfile profile, const SpvVersion& sp // Function to Print all builtins void DumpBuiltinSymbolTable(TInfoSink& infoSink, const TSymbolTable& symbolTable) { -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) infoSink.debug << "BuiltinSymbolTable {\n"; symbolTable.dump(infoSink, true); @@ -594,7 +602,7 @@ bool DeduceVersionProfile(TInfoSink& infoSink, EShLanguage stage, bool versionNo break; } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // Correct for stage type... switch (stage) { case EShLangGeometry: @@ -870,7 +878,7 @@ bool ProcessDeferred( : userInput.scanVersion(version, profile, versionNotFirstToken); bool versionNotFound = version == 0; if (forceDefaultVersionAndProfile && source == EShSourceGlsl) { -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (! (messages & EShMsgSuppressWarnings) && ! versionNotFound && (version != defaultVersion || profile != defaultProfile)) { compiler->infoSink.info << "Warning, (version, profile) forced to be (" @@ -893,10 +901,13 @@ bool ProcessDeferred( #ifdef GLSLANG_WEB profile = EEsProfile; version = 310; +#elif defined(GLSLANG_ANGLE) + profile = ECoreProfile; + version = 450; #endif bool versionWillBeError = (versionNotFound || (profile == EEsProfile && version >= 300 && versionNotFirst)); -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) bool warnVersionNotFirst = false; if (! versionWillBeError && versionNotFirstToken) { if (messages & EShMsgRelaxedErrors) @@ -966,7 +977,7 @@ bool ProcessDeferred( parseContext->setLimits(*resources); if (! goodVersion) parseContext->addError(); -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (warnVersionNotFirst) { TSourceLoc loc; loc.init(); @@ -1003,7 +1014,7 @@ bool ProcessDeferred( return success; } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // Responsible for keeping track of the most recent source string and line in // the preprocessor and outputting newlines appropriately if the source string @@ -1226,14 +1237,16 @@ struct DoFullParse{ parseContext.infoSink.info << parseContext.getNumErrors() << " compilation errors. No code generated.\n\n"; } +#ifndef GLSLANG_ANGLE if (messages & EShMsgAST) intermediate.output(parseContext.infoSink, true); +#endif return success; } }; -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // Take a single compilation unit, and run the preprocessor on it. // Return: True if there were no issues found in preprocessing, // False if during preprocessing any unknown version, pragmas or @@ -1873,7 +1886,7 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion &environment); } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // Fill in a string with the result of preprocessing ShaderStrings // Returns true if all extensions, pragmas and version strings were valid. // @@ -1911,7 +1924,7 @@ const char* TShader::getInfoDebugLog() } TProgram::TProgram() : -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) reflection(0), #endif linked(false) @@ -1927,7 +1940,7 @@ TProgram::TProgram() : TProgram::~TProgram() { delete infoSink; -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) delete reflection; #endif @@ -1974,7 +1987,7 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) if (stages[stage].size() == 0) return true; -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) int numEsShaders = 0, numNonEsShaders = 0; for (auto it = stages[stage].begin(); it != stages[stage].end(); ++it) { if ((*it)->intermediate->getProfile() == EEsProfile) { @@ -2028,8 +2041,10 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) #endif intermediate[stage]->finalCheck(*infoSink, (messages & EShMsgKeepUncalled) != 0); +#ifndef GLSLANG_ANGLE if (messages & EShMsgAST) intermediate[stage]->output(*infoSink, true); +#endif return intermediate[stage]->getNumErrors() == 0; } @@ -2044,7 +2059,7 @@ const char* TProgram::getInfoDebugLog() return infoSink->debug.c_str(); } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // // Reflection implementation. @@ -2126,6 +2141,6 @@ bool TProgram::mapIO(TIoMapResolver* pResolver, TIoMapper* pIoMapper) return ioMapper->doMap(pResolver, *infoSink); } -#endif // GLSLANG_WEB +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE } // end namespace glslang diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index 06b5a813dc..007f22c1b4 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -178,7 +178,7 @@ void TType::buildMangledName(TString& mangledName) const } } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // // Dump functions. diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 40ca3da532..ec4bc3c599 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -117,7 +117,7 @@ class TSymbol { virtual int getNumExtensions() const { return extensions == nullptr ? 0 : (int)extensions->size(); } virtual const char** getExtensions() const { return extensions->data(); } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const = 0; void dumpExtensions(TInfoSink& infoSink) const; #endif @@ -196,7 +196,7 @@ class TVariable : public TSymbol { } virtual const char** getMemberExtensions(int member) const { return (*memberExtensions)[member].data(); } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const; #endif @@ -319,7 +319,7 @@ class TFunction : public TSymbol { virtual TParameter& operator[](int i) { assert(writable); return parameters[i]; } virtual const TParameter& operator[](int i) const { return parameters[i]; } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const override; #endif @@ -381,7 +381,7 @@ class TAnonMember : public TSymbol { virtual const char** getExtensions() const override { return anonContainer.getMemberExtensions(memberNumber); } virtual int getAnonId() const { return anonId; } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const override; #endif @@ -551,7 +551,7 @@ class TSymbolTableLevel { void relateToOperator(const char* name, TOperator op); void setFunctionExtensions(const char* name, int num, const char* const extensions[]); -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) void dump(TInfoSink& infoSink, bool complete = false) const; #endif TSymbolTableLevel* clone() const; @@ -854,7 +854,7 @@ class TSymbolTable { } int getMaxSymbolId() { return uniqueId; } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) void dump(TInfoSink& infoSink, bool complete = false) const; #endif void copyTable(const TSymbolTable& copyOf); diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index 86edcfe4d0..1b409df7b4 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -36,7 +36,7 @@ // POSSIBILITY OF SUCH DAMAGE. // -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) #include "localintermediate.h" #include "../Include/InfoSink.h" @@ -1562,4 +1562,4 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) } // end namespace glslang -#endif // not GLSLANG_WEB +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 9859f0838f..905cf65d6b 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -33,7 +33,7 @@ // POSSIBILITY OF SUCH DAMAGE. // -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) #include "../Include/Common.h" #include "../Include/InfoSink.h" @@ -1288,4 +1288,4 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { } // end namespace glslang -#endif // GLSLANG_WEB +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 7ca18b8a59..674132786e 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -33,7 +33,7 @@ // POSSIBILITY OF SUCH DAMAGE. // -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) #ifndef _IOMAPPER_INCLUDED #define _IOMAPPER_INCLUDED @@ -186,7 +186,7 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { } }; -// Defaulf I/O resolver for OpenGL +// Default I/O resolver for OpenGL struct TDefaultGlslIoResolver : public TDefaultIoResolverBase { public: typedef std::map TVarSlotMap; // @@ -299,4 +299,4 @@ class TGlslIoMapper : public TIoMapper { #endif // _IOMAPPER_INCLUDED -#endif // GLSLANG_WEB +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index f0bede53a3..a8e031bc6f 100755 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -82,7 +82,7 @@ void TIntermediate::warn(TInfoSink& infoSink, const char* message) // void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) { -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) mergeCallGraphs(infoSink, unit); mergeModes(infoSink, unit); mergeTrees(infoSink, unit); @@ -104,7 +104,7 @@ void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit) callGraph.insert(callGraph.end(), unit.callGraph.begin(), unit.callGraph.end()); } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) #define MERGE_MAX(member) member = std::max(member, unit.member) #define MERGE_TRUE(member) if (unit.member) member = unit.member; @@ -533,7 +533,7 @@ void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType) // void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage) { -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) bool writeTypeComparison = false; // Types have to match diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index a3ff88683b..53be3f5f88 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -241,7 +241,10 @@ class TIntermediate { public: explicit TIntermediate(EShLanguage l, int v = 0, EProfile p = ENoProfile) : language(l), - profile(p), version(v), treeRoot(0), +#ifndef GLSLANG_ANGLE + profile(p), version(v), +#endif + treeRoot(0), numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false), invertY(false), useStorageBuffer(false), @@ -295,9 +298,20 @@ class TIntermediate { #endif } - void setVersion(int v) { version = v; } + void setVersion(int v) + { +#ifndef GLSLANG_ANGLE + version = v; +#endif + } + void setProfile(EProfile p) + { +#ifndef GLSLANG_ANGLE + profile = p; +#endif + } + int getVersion() const { return version; } - void setProfile(EProfile p) { profile = p; } EProfile getProfile() const { return profile; } void setSpv(const SpvVersion& s) { @@ -929,8 +943,13 @@ class TIntermediate { typedef std::list TGraph; TGraph callGraph; +#ifdef GLSLANG_ANGLE + const EProfile profile = ECoreProfile; + const int version = 450; +#else EProfile profile; // source profile int version; // source version +#endif SpvVersion spvVersion; TIntermNode* treeRoot; std::map requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h index 0d006a716e..957aaefd1a 100644 --- a/glslang/MachineIndependent/parseVersions.h +++ b/glslang/MachineIndependent/parseVersions.h @@ -58,7 +58,7 @@ class TParseVersions { const SpvVersion& spvVersion, EShLanguage language, TInfoSink& infoSink, bool forwardCompatible, EShMessages messages) : -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) forwardCompatible(forwardCompatible), profile(profile), #endif @@ -116,9 +116,14 @@ class TParseVersions { bool relaxedErrors() const { return false; } bool suppressWarnings() const { return true; } bool isForwardCompatible() const { return false; } +#else +#ifdef GLSLANG_ANGLE + const bool forwardCompatible = true; + const EProfile profile = ECoreProfile; #else bool forwardCompatible; // true if errors are to be given for use of deprecated features EProfile profile; // the declared profile in the shader (core by default) +#endif bool isEsProfile() const { return profile == EEsProfile; } void requireProfile(const TSourceLoc& loc, int profileMask, const char* featureDesc); void profileRequires(const TSourceLoc& loc, int profileMask, int minVersion, int numExtensions, diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp index 50b9373706..0aabf37fba 100644 --- a/glslang/MachineIndependent/reflection.cpp +++ b/glslang/MachineIndependent/reflection.cpp @@ -33,7 +33,7 @@ // POSSIBILITY OF SUCH DAMAGE. // -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) #include "../Include/Common.h" #include "reflection.h" @@ -1266,4 +1266,4 @@ void TReflection::dump() } // end namespace glslang -#endif // GLSLANG_WEB +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/MachineIndependent/reflection.h b/glslang/MachineIndependent/reflection.h index 0c33de459d..5af4467c1f 100644 --- a/glslang/MachineIndependent/reflection.h +++ b/glslang/MachineIndependent/reflection.h @@ -33,7 +33,7 @@ // POSSIBILITY OF SUCH DAMAGE. // -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) #ifndef _REFLECTION_INCLUDED #define _REFLECTION_INCLUDED @@ -220,4 +220,4 @@ class TReflection { #endif // _REFLECTION_INCLUDED -#endif // GLSLANG_WEB +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index e3909f6374..273f1569a0 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -690,7 +690,7 @@ class TShader { TShader& operator=(TShader&); }; -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // // A reflection database and its interface, consistent with the OpenGL API reflection queries. @@ -808,7 +808,7 @@ class TIoMapResolver virtual void addStage(EShLanguage stage) = 0; }; -#endif // GLSLANG_WEB +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE // Make one TProgram per set of shaders that will get linked together. Add all // the shaders that are to be linked together. After calling shader.parse() @@ -829,7 +829,7 @@ class TProgram { TIntermediate* getIntermediate(EShLanguage stage) const { return intermediate[stage]; } -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) // Reflection Interface @@ -923,7 +923,7 @@ class TProgram { // If resolver is not provided it uses the previous approach // and respects auto assignment and offsets. GLSLANG_EXPORT bool mapIO(TIoMapResolver* pResolver = nullptr, TIoMapper* pIoMapper = nullptr); -#endif +#endif // !GLSLANG_WEB && !GLSLANG_ANGLE protected: GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages); @@ -933,7 +933,7 @@ class TProgram { TIntermediate* intermediate[EShLangCount]; bool newedIntermediate[EShLangCount]; // track which intermediate were "new" versus reusing a singleton unit in a stage TInfoSink* infoSink; -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) TReflection* reflection; #endif bool linked; diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp index ee868c2abb..dc0988e058 100755 --- a/gtests/Link.FromFile.Vk.cpp +++ b/gtests/Link.FromFile.Vk.cpp @@ -75,7 +75,7 @@ TEST_P(LinkTestVulkan, FromFile) result.linkingOutput = program.getInfoLog(); result.linkingError = program.getInfoDebugLog(); -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (success) program.mapIO(); #endif diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h index c8e72d324a..2b057dcb0e 100755 --- a/gtests/TestFixture.h +++ b/gtests/TestFixture.h @@ -253,7 +253,7 @@ class GlslangTest : public GT { glslang::TProgram program; program.addShader(&shader); success &= program.link(controls); -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (success) program.mapIO(); #endif @@ -315,7 +315,7 @@ class GlslangTest : public GT { program.addShader(&shader); success &= program.link(controls); -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (success) program.mapIO(); #endif @@ -360,7 +360,7 @@ class GlslangTest : public GT { glslang::TProgram program; program.addShader(&shader); success &= program.link(controls); -#ifndef GLSLANG_WEB +#if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) if (success) program.mapIO(); #endif From f881f08358b098b8bd1e3b402ab35b5177aa76b9 Mon Sep 17 00:00:00 2001 From: johnkslang Date: Tue, 4 Aug 2020 02:13:50 -0600 Subject: [PATCH 004/365] SPV: Fix #2363: include trailing newline named text SPV output. --- SPIRV/GlslangToSpv.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 1aaf47a3f9..5a39c1e315 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -8723,6 +8723,7 @@ void OutputSpvHex(const std::vector& spirv, const char* baseName, } if (varName != nullptr) { out << "};"; + out << std::endl; } out.close(); #endif From a1a497ffe79218d8239a913d29ee26e74d201220 Mon Sep 17 00:00:00 2001 From: johnkslang Date: Tue, 4 Aug 2020 03:00:32 -0600 Subject: [PATCH 005/365] SPV: Use more correct SPV-Tools environment, partially addressing #2290 --- SPIRV/SpvTools.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 6d4d9ef2d3..112ac33c5c 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -165,7 +165,7 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector< void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger* logger, const SpvOptions* options) { - spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2; + spv_target_env target_env = MapToSpirvToolsEnv(intermediate.getSpv(), logger); spvtools::Optimizer optimizer(target_env); optimizer.SetMessageConsumer(OptimizerMesssageConsumer); @@ -223,7 +223,7 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector void SpirvToolsStripDebugInfo(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger* logger) { - spv_target_env target_env = SPV_ENV_UNIVERSAL_1_2; + spv_target_env target_env = MapToSpirvToolsEnv(intermediate.getSpv(), logger); spvtools::Optimizer optimizer(target_env); optimizer.SetMessageConsumer(OptimizerMesssageConsumer); From 2de6d657dde37a421ff8afb1bd820d522df5821d Mon Sep 17 00:00:00 2001 From: johnkslang Date: Tue, 4 Aug 2020 07:17:39 -0600 Subject: [PATCH 006/365] SPV: Standalone; sanity check the client GLSL input semantics option value. --- StandAlone/StandAlone.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 8836812742..1f294b0744 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -696,6 +696,8 @@ void ProcessArguments(std::vector>& workItem setOpenGlSpv(); if (argv[0][2] != 0) ClientInputSemanticsVersion = getAttachedNumber("-G client input semantics"); + if (ClientInputSemanticsVersion != 100) + Error("unknown client version for -G, should be 100"); break; case 'H': Options |= EOptionHumanReadableSpv; @@ -732,6 +734,8 @@ void ProcessArguments(std::vector>& workItem setVulkanSpv(); if (argv[0][2] != 0) ClientInputSemanticsVersion = getAttachedNumber("-V client input semantics"); + if (ClientInputSemanticsVersion != 100) + Error("unknown client version for -V, should be 100"); break; case 'c': Options |= EOptionDumpConfig; From 23f3bdfea18c72723d3be5498d8f11b4a7d5ad36 Mon Sep 17 00:00:00 2001 From: johnkslang Date: Wed, 5 Aug 2020 05:23:04 -0600 Subject: [PATCH 007/365] Build/Test: Dropping 2013 allows using the latest googletests. These have a new spelling: INSTANTIATE_TEST_CASE_P -> INSTANTIATE_TEST_SUITE_P --- .appveyor.yml | 3 --- README.md | 11 +---------- WORKSPACE | 6 +++--- gtests/AST.FromFile.cpp | 4 ++-- gtests/Config.FromFile.cpp | 2 +- gtests/HexFloat.cpp | 38 ++++++++++++++++++------------------- gtests/Hlsl.FromFile.cpp | 14 +++++++------- gtests/Link.FromFile.Vk.cpp | 2 +- gtests/Link.FromFile.cpp | 2 +- gtests/Pp.FromFile.cpp | 2 +- gtests/Remap.FromFile.cpp | 2 +- gtests/Spv.FromFile.cpp | 28 +++++++++++++-------------- 12 files changed, 51 insertions(+), 63 deletions(-) diff --git a/.appveyor.yml b/.appveyor.yml index 4c5b0da480..500d4bd3ef 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -48,9 +48,6 @@ install: - C:/Python27/python.exe update_glslang_sources.py - set PATH=C:\ninja;C:\Python36;%PATH% - git clone https://github.com/google/googletest.git External/googletest - - cd External/googletest - - git checkout 440527a61e1c91188195f7de212c63c77e8f0a45 - - cd ../.. build: parallel: true # enable MSBuild parallel builds diff --git a/README.md b/README.md index 330ec825c4..30e85f8bb9 100755 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ branch. ### Dependencies * A C++11 compiler. - (For MSVS: 2015 is recommended, 2013 is fully supported/tested, and 2010 support is attempted, but not tested.) + (For MSVS: use 2015 or later.) * [CMake][cmake]: for generating compilation targets. * make: _Linux_, ninja is an alternative, if configured. * [Python 3.x][python]: for executing SPIRV-Tools scripts. (Optional if not using SPIRV-Tools and the 'External' subdirectory does not exist.) @@ -125,15 +125,6 @@ cd git clone https://github.com/google/googletest.git External/googletest ``` -If you want to use googletest with Visual Studio 2013, you also need to check out an older version: - -```bash -# to use googletest with Visual Studio 2013 -cd External/googletest -git checkout 440527a61e1c91188195f7de212c63c77e8f0a45 -cd ../.. -``` - If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan, wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the integrated test suite, install spirv-tools with this: diff --git a/WORKSPACE b/WORKSPACE index 3c38e61d08..488546c7cd 100644 --- a/WORKSPACE +++ b/WORKSPACE @@ -6,9 +6,9 @@ load( http_archive( name = "com_google_googletest", - sha256 = "ef9e2e12e7bf115ee48b427ae171fc869eeaf1b532c0fcfd982f6a353d2471b4", - strip_prefix = "googletest-37ae1fc5e6be26f367d76c078beabd7024fed53a", - urls = ["https://github.com/google/googletest/archive/37ae1fc5e6be26f367d76c078beabd7024fed53a.zip"], # 2018-07-16 + sha256 = "94c634d499558a76fa649edb13721dce6e98fb1e7018dfaeba3cd7a083945e91", + strip_prefix = "googletest-release-1.10.0", + urls = ["https://github.com/google/googletest/archive/release-1.10.0.zip"], # 3-Oct-2019 ) http_archive( diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 762713782c..a8e4da4230 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -59,7 +59,7 @@ TEST_P(CompileToAstTestNV, FromFile) } // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileToAstTest, ::testing::ValuesIn(std::vector({ "sample.frag", @@ -282,7 +282,7 @@ INSTANTIATE_TEST_CASE_P( FileNameAsCustomTestSuffix ); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileToAstTestNV, ::testing::ValuesIn(std::vector({ "nvShaderNoperspectiveInterpolation.frag", diff --git a/gtests/Config.FromFile.cpp b/gtests/Config.FromFile.cpp index d6fbf20565..dd18c13a93 100644 --- a/gtests/Config.FromFile.cpp +++ b/gtests/Config.FromFile.cpp @@ -95,7 +95,7 @@ TEST_P(ConfigTest, FromFile) } // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, ConfigTest, ::testing::ValuesIn(std::vector({ {"specExamples.vert", "baseResults/test.conf", "specExamplesConf.vert.out", (EShMessages)(EShMsgAST | EShMsgCascadingErrors)}, diff --git a/gtests/HexFloat.cpp b/gtests/HexFloat.cpp index ead4fd39c9..0a11d96149 100644 --- a/gtests/HexFloat.cpp +++ b/gtests/HexFloat.cpp @@ -77,7 +77,7 @@ TEST_P(HexDoubleTest, DecodeCorrectly) { EXPECT_THAT(Decode(GetParam().second), Eq(GetParam().first)); } -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float32Tests, HexFloatTest, ::testing::ValuesIn(std::vector, std::string>>({ {0.f, "0x0p+0"}, @@ -129,7 +129,7 @@ INSTANTIATE_TEST_CASE_P( }))); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float32NanTests, HexFloatTest, ::testing::ValuesIn(std::vector, std::string>>({ // Various NAN and INF cases @@ -147,7 +147,7 @@ INSTANTIATE_TEST_CASE_P( {uint32_t(0x7FFFFFFF), "0x1.fffffep+128"}, // +nan }))); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float64Tests, HexDoubleTest, ::testing::ValuesIn( std::vector, std::string>>({ @@ -220,7 +220,7 @@ INSTANTIATE_TEST_CASE_P( }))); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float64NanTests, HexDoubleTest, ::testing::ValuesIn(std::vector< std::pair, std::string>>({ @@ -262,7 +262,7 @@ TEST_P(DecodeHexDoubleTest, DecodeCorrectly) { EXPECT_THAT(Decode(GetParam().first), Eq(GetParam().second)); } -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float32DecodeTests, DecodeHexFloatTest, ::testing::ValuesIn(std::vector>>({ {"0x0p+000", 0.f}, @@ -284,7 +284,7 @@ INSTANTIATE_TEST_CASE_P( {"0x0.4p+0", 0.25f}, }))); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float32DecodeInfTests, DecodeHexFloatTest, ::testing::ValuesIn(std::vector>>({ // inf cases @@ -294,7 +294,7 @@ INSTANTIATE_TEST_CASE_P( {"-0x32p+127", uint32_t(0xFF800000)}, // -inf }))); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float64DecodeTests, DecodeHexDoubleTest, ::testing::ValuesIn( std::vector>>({ @@ -317,7 +317,7 @@ INSTANTIATE_TEST_CASE_P( {"0x0.4p+0", 0.25}, }))); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float64DecodeInfTests, DecodeHexDoubleTest, ::testing::ValuesIn( std::vector>>({ @@ -465,7 +465,7 @@ TEST_P(FloatProxyDoubleTest, EncodeCorrectly) { Eq(GetParam().second)); } -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float32Tests, FloatProxyFloatTest, ::testing::ValuesIn(std::vector, std::string>>({ // Zero @@ -497,7 +497,7 @@ INSTANTIATE_TEST_CASE_P( {-std::numeric_limits::infinity(), "-0x1p+128"}, }))); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float64Tests, FloatProxyDoubleTest, ::testing::ValuesIn( std::vector, std::string>>({ @@ -747,7 +747,7 @@ TEST_P(HexFloatRoundTest, RoundDownToFP16) { } // clang-format off -INSTANTIATE_TEST_CASE_P(F32ToF16, HexFloatRoundTest, +INSTANTIATE_TEST_SUITE_P(F32ToF16, HexFloatRoundTest, ::testing::ValuesIn(std::vector( { {float_fractions({0}), std::make_pair(half_bits_set({}), false), spvutils::kRoundToZero}, @@ -828,7 +828,7 @@ TEST_P(HexFloatRoundUpSignificandTest, Widening) { } } -INSTANTIATE_TEST_CASE_P(F16toF32, HexFloatRoundUpSignificandTest, +INSTANTIATE_TEST_SUITE_P(F16toF32, HexFloatRoundUpSignificandTest, // 0xFC00 of the source 16-bit hex value cover the sign and the exponent. // They are ignored for this test. ::testing::ValuesIn(std::vector( @@ -879,7 +879,7 @@ TEST_P(HexFloatFP32To16Tests, NarrowingCasts) { const uint16_t positive_infinity = 0x7C00; const uint16_t negative_infinity = 0xFC00; -INSTANTIATE_TEST_CASE_P(F32ToF16, HexFloatFP32To16Tests, +INSTANTIATE_TEST_SUITE_P(F32ToF16, HexFloatFP32To16Tests, ::testing::ValuesIn(std::vector( { // Exactly representable as half. @@ -944,7 +944,7 @@ TEST_P(HexFloatFP16To32Tests, WideningCasts) { } } -INSTANTIATE_TEST_CASE_P(F16ToF32, HexFloatFP16To32Tests, +INSTANTIATE_TEST_SUITE_P(F16ToF32, HexFloatFP16To32Tests, ::testing::ValuesIn(std::vector( { {0x0000, 0.f}, @@ -1039,7 +1039,7 @@ FloatParseCase GoodFloatParseCase(std::string literal, bool negate_value, return FloatParseCase{literal, negate_value, true, proxy_expected_value}; } -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( FloatParse, ParseNormalFloatTest, ::testing::ValuesIn(std::vector>{ // Failing cases due to trivially incorrect syntax. @@ -1090,7 +1090,7 @@ TEST_P(ParseNormalFloat16Test, Samples) { } } -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float16Parse, ParseNormalFloat16Test, ::testing::ValuesIn(std::vector>{ // Failing cases due to trivially incorrect syntax. @@ -1137,7 +1137,7 @@ TEST_P(FloatProxyParseOverflowFloatTest, Sample) { } } -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( FloatOverflow, FloatProxyParseOverflowFloatTest, ::testing::ValuesIn(std::vector>({ {"0", true, 0.0f}, @@ -1164,7 +1164,7 @@ TEST_P(FloatProxyParseOverflowDoubleTest, Sample) { } } -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( DoubleOverflow, FloatProxyParseOverflowDoubleTest, ::testing::ValuesIn(std::vector>({ {"0", true, 0.0}, @@ -1193,7 +1193,7 @@ TEST_P(FloatProxyParseOverflowFloat16Test, Sample) { } } -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Float16Overflow, FloatProxyParseOverflowFloat16Test, ::testing::ValuesIn(std::vector>({ {"0", true, uint16_t{0}}, diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index f3ca0b5ac5..224ea59d28 100755 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -129,7 +129,7 @@ TEST_P(HlslLegalDebugTest, FromFile) } // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslCompileTest, ::testing::ValuesIn(std::vector{ {"hlsl.amend.frag", "f1"}, @@ -430,7 +430,7 @@ INSTANTIATE_TEST_CASE_P( // clang-format on // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslVulkan1_1CompileTest, ::testing::ValuesIn(std::vector{ {"hlsl.wavebroadcast.comp", "CSMain"}, @@ -448,7 +448,7 @@ INSTANTIATE_TEST_CASE_P( // clang-format on // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslCompileAndFlattenTest, ::testing::ValuesIn(std::vector{ {"hlsl.array.flatten.frag", "main"}, @@ -460,7 +460,7 @@ INSTANTIATE_TEST_CASE_P( #if ENABLE_OPT // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslLegalizeTest, ::testing::ValuesIn(std::vector{ {"hlsl.aliasOpaque.frag", "main"}, @@ -478,7 +478,7 @@ INSTANTIATE_TEST_CASE_P( #endif // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslDebugTest, ::testing::ValuesIn(std::vector{ {"hlsl.pp.line2.frag", "MainPs"} @@ -486,7 +486,7 @@ INSTANTIATE_TEST_CASE_P( FileNameAsCustomTestSuffix ); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslDX9CompatibleTest, ::testing::ValuesIn(std::vector{ {"hlsl.sample.dx9.frag", "main"}, @@ -496,7 +496,7 @@ INSTANTIATE_TEST_CASE_P( ); // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslLegalDebugTest, ::testing::ValuesIn(std::vector{ {"hlsl.pp.line4.frag", "MainPs"} diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp index dc0988e058..2909a9c135 100755 --- a/gtests/Link.FromFile.Vk.cpp +++ b/gtests/Link.FromFile.Vk.cpp @@ -109,7 +109,7 @@ TEST_P(LinkTestVulkan, FromFile) } // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, LinkTestVulkan, ::testing::ValuesIn(std::vector>({ {"link1.vk.frag", "link2.vk.frag"}, diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp index 3e1620719e..29590c02a0 100755 --- a/gtests/Link.FromFile.cpp +++ b/gtests/Link.FromFile.cpp @@ -86,7 +86,7 @@ TEST_P(LinkTest, FromFile) } // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, LinkTest, ::testing::ValuesIn(std::vector>({ {"mains1.frag", "mains2.frag", "noMain1.geom", "noMain2.geom"}, diff --git a/gtests/Pp.FromFile.cpp b/gtests/Pp.FromFile.cpp index 1bea8775dc..92b4d24922 100644 --- a/gtests/Pp.FromFile.cpp +++ b/gtests/Pp.FromFile.cpp @@ -47,7 +47,7 @@ TEST_P(PreprocessingTest, FromFile) } // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, PreprocessingTest, ::testing::ValuesIn(std::vector({ "preprocessor.bad_arg.vert", diff --git a/gtests/Remap.FromFile.cpp b/gtests/Remap.FromFile.cpp index 50bce8e357..f01425362e 100644 --- a/gtests/Remap.FromFile.cpp +++ b/gtests/Remap.FromFile.cpp @@ -80,7 +80,7 @@ TEST_P(RemapTest, FromFile) } // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( ToSpirv, RemapTest, ::testing::ValuesIn(std::vector{ // GLSL remapper tests diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index af1409b193..0efa77c3ea 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -213,7 +213,7 @@ TEST_P(CompileUpgradeTextureToSampledTextureAndDropSamplersTest, FromFile) } // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileVulkanToSpirvTest, ::testing::ValuesIn(std::vector({ // Test looping constructs. @@ -450,7 +450,7 @@ INSTANTIATE_TEST_CASE_P( // Cases with deliberately unreachable code. // By default the compiler will aggressively eliminate // unreachable merges and continues. -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( GlslWithDeadCode, CompileVulkanToSpirvDeadCodeElimTest, ::testing::ValuesIn(std::vector({ "spv.dead-after-continue.vert", @@ -465,7 +465,7 @@ INSTANTIATE_TEST_CASE_P( ); // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileVulkanToDebugSpirvTest, ::testing::ValuesIn(std::vector({ "spv.pp.line.frag", @@ -474,7 +474,7 @@ INSTANTIATE_TEST_CASE_P( ); // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileVulkan1_1ToSpirvTest, ::testing::ValuesIn(std::vector({ "spv.1.3.8bitstorage-ubo.vert", @@ -530,7 +530,7 @@ INSTANTIATE_TEST_CASE_P( ); // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileToSpirv14Test, ::testing::ValuesIn(std::vector({ "spv.1.4.LoopControl.frag", @@ -566,7 +566,7 @@ INSTANTIATE_TEST_CASE_P( ); // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Hlsl, HlslIoMap, ::testing::ValuesIn(std::vector{ { "spv.register.autoassign.frag", "main_ep", 5, 10, 0, 20, 30, true, false }, @@ -586,7 +586,7 @@ INSTANTIATE_TEST_CASE_P( ); // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Hlsl, GlslIoMap, ::testing::ValuesIn(std::vector{ { "spv.glsl.register.autoassign.frag", "main", 5, 10, 0, 20, 30, true, false }, @@ -596,7 +596,7 @@ INSTANTIATE_TEST_CASE_P( ); // clang-format off -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileOpenGLToSpirvTest, ::testing::ValuesIn(std::vector({ "spv.460.frag", @@ -621,7 +621,7 @@ INSTANTIATE_TEST_CASE_P( FileNameAsCustomTestSuffix ); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, VulkanSemantics, ::testing::ValuesIn(std::vector({ "vulkan.frag", @@ -633,7 +633,7 @@ INSTANTIATE_TEST_CASE_P( FileNameAsCustomTestSuffix ); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, OpenGLSemantics, ::testing::ValuesIn(std::vector({ "glspv.esversion.vert", @@ -645,7 +645,7 @@ INSTANTIATE_TEST_CASE_P( FileNameAsCustomTestSuffix ); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, VulkanAstSemantics, ::testing::ValuesIn(std::vector({ "vulkan.ast.vert", @@ -653,7 +653,7 @@ INSTANTIATE_TEST_CASE_P( FileNameAsCustomTestSuffix ); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileVulkanToSpirvTestAMD, ::testing::ValuesIn(std::vector({ "spv.16bitxfb.vert", @@ -669,7 +669,7 @@ INSTANTIATE_TEST_CASE_P( FileNameAsCustomTestSuffix ); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileVulkanToSpirvTestNV, ::testing::ValuesIn(std::vector({ "spv.sampleMaskOverrideCoverage.frag", @@ -717,7 +717,7 @@ INSTANTIATE_TEST_CASE_P( FileNameAsCustomTestSuffix ); -INSTANTIATE_TEST_CASE_P( +INSTANTIATE_TEST_SUITE_P( Glsl, CompileUpgradeTextureToSampledTextureAndDropSamplersTest, ::testing::ValuesIn(std::vector({ "spv.texture.sampler.transform.frag", From b60e067b43744ce88adea33ab347ac9997b923d8 Mon Sep 17 00:00:00 2001 From: johnkslang Date: Thu, 6 Aug 2020 01:34:14 -0600 Subject: [PATCH 008/365] SPV: Fix #1829: don't emit OpModuleProcessed use-storage-buffer --- Test/baseResults/spv.debugInfo.1.1.frag.out | 1 - glslang/MachineIndependent/localintermediate.h | 6 +----- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out index eec50a3f66..384c76b0db 100644 --- a/Test/baseResults/spv.debugInfo.1.1.frag.out +++ b/Test/baseResults/spv.debugInfo.1.1.frag.out @@ -90,7 +90,6 @@ void main() ModuleProcessed "suppress-warnings" ModuleProcessed "hlsl-offsets" ModuleProcessed "entry-point main" - ModuleProcessed "use-storage-buffer" Decorate 24(inv) Location 0 Decorate 52(outv) Location 0 MemberDecorate 53(S) 0 Offset 0 diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 53be3f5f88..0c9a354998 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -494,11 +494,7 @@ class TIntermediate { void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&); void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&); - void setUseStorageBuffer() - { - useStorageBuffer = true; - processes.addProcess("use-storage-buffer"); - } + void setUseStorageBuffer() { useStorageBuffer = true; } bool usingStorageBuffer() const { return useStorageBuffer; } void setDepthReplacing() { depthReplacing = true; } bool isDepthReplacing() const { return depthReplacing; } From 6c37bbbb0383cc36865fb7fb683855106b80d68c Mon Sep 17 00:00:00 2001 From: johnkslang Date: Thu, 6 Aug 2020 05:24:24 -0600 Subject: [PATCH 009/365] Non-functional: consistently use 'const TSourceLoc&' to pass location. --- glslang/MachineIndependent/Intermediate.cpp | 39 ++++++++++--------- .../MachineIndependent/localintermediate.h | 19 ++++----- 2 files changed, 30 insertions(+), 28 deletions(-) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index bb03aa0a15..dac8300ac6 100755 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -113,7 +113,7 @@ TIntermSymbol* TIntermediate::addSymbol(const TType& type, const TSourceLoc& loc // // Returns nullptr if the working conversions and promotions could not be found. // -TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc) +TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIntermTyped* right, const TSourceLoc& loc) { // No operations work on blocks if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock) @@ -226,13 +226,12 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn // // Low level: add binary node (no promotions or other argument modifications) // -TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc) const +TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, + const TSourceLoc& loc) const { // build the node TIntermBinary* node = new TIntermBinary(op); - if (loc.line == 0) - loc = left->getLoc(); - node->setLoc(loc); + node->setLoc(loc.line != 0 ? loc : left->getLoc()); node->setLeft(left); node->setRight(right); @@ -242,7 +241,8 @@ TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TI // // like non-type form, but sets node's type. // -TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc, const TType& type) const +TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, + const TSourceLoc& loc, const TType& type) const { TIntermBinary* node = addBinaryNode(op, left, right, loc); node->setType(type); @@ -252,12 +252,10 @@ TIntermBinary* TIntermediate::addBinaryNode(TOperator op, TIntermTyped* left, TI // // Low level: add unary node (no promotions or other argument modifications) // -TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc loc) const +TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, const TSourceLoc& loc) const { TIntermUnary* node = new TIntermUnary(op); - if (loc.line == 0) - loc = child->getLoc(); - node->setLoc(loc); + node->setLoc(loc.line != 0 ? loc : child->getLoc()); node->setOperand(child); return node; @@ -266,7 +264,8 @@ TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSo // // like non-type form, but sets node's type. // -TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc loc, const TType& type) const +TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, const TSourceLoc& loc, const TType& type) + const { TIntermUnary* node = addUnaryNode(op, child, loc); node->setType(type); @@ -281,7 +280,8 @@ TIntermUnary* TIntermediate::addUnaryNode(TOperator op, TIntermTyped* child, TSo // Returns nullptr if the 'right' type could not be converted to match the 'left' type, // or the resulting operation cannot be properly promoted. // -TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc loc) +TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, + const TSourceLoc& loc) { // No block assignment if (left->getType().getBasicType() == EbtBlock || right->getType().getBasicType() == EbtBlock) @@ -338,7 +338,8 @@ TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TInterm // Returns the added node. // The caller should set the type of the returned node. // -TIntermTyped* TIntermediate::addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, TSourceLoc loc) +TIntermTyped* TIntermediate::addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, + const TSourceLoc& loc) { // caller should set the type return addBinaryNode(op, base, index, loc); @@ -349,7 +350,8 @@ TIntermTyped* TIntermediate::addIndex(TOperator op, TIntermTyped* base, TIntermT // // Returns the added node. // -TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, TSourceLoc loc) +TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, + const TSourceLoc& loc) { if (child == 0) return nullptr; @@ -495,7 +497,8 @@ TIntermTyped* TIntermediate::addBuiltInFunctionCall(const TSourceLoc& loc, TOper // Returns an aggregate node, which could be the one passed in if // it was already an aggregate. // -TIntermTyped* TIntermediate::setAggregateOperator(TIntermNode* node, TOperator op, const TType& type, TSourceLoc loc) +TIntermTyped* TIntermediate::setAggregateOperator(TIntermNode* node, TOperator op, const TType& type, + const TSourceLoc& loc) { TIntermAggregate* aggNode; @@ -510,8 +513,6 @@ TIntermTyped* TIntermediate::setAggregateOperator(TIntermNode* node, TOperator o // aggNode = new TIntermAggregate(); aggNode->getSequence().push_back(node); - if (loc.line == 0) - loc = node->getLoc(); } } else aggNode = new TIntermAggregate(); @@ -520,8 +521,8 @@ TIntermTyped* TIntermediate::setAggregateOperator(TIntermNode* node, TOperator o // Set the operator. // aggNode->setOperator(op); - if (loc.line != 0) - aggNode->setLoc(loc); + if (loc.line != 0 || node != nullptr) + aggNode->setLoc(loc.line != 0 ? loc : node->getLoc()); aggNode->setType(type); diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 0c9a354998..90f1891608 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -430,10 +430,10 @@ class TIntermediate { TIntermTyped* addConversion(TBasicType convertTo, TIntermTyped* node) const; void addBiShapeConversion(TOperator, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode); TIntermTyped* addShapeConversion(const TType&, TIntermTyped*); - TIntermTyped* addBinaryMath(TOperator, TIntermTyped* left, TIntermTyped* right, TSourceLoc); - TIntermTyped* addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc); - TIntermTyped* addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, TSourceLoc); - TIntermTyped* addUnaryMath(TOperator, TIntermTyped* child, TSourceLoc); + TIntermTyped* addBinaryMath(TOperator, TIntermTyped* left, TIntermTyped* right, const TSourceLoc&); + TIntermTyped* addAssign(TOperator op, TIntermTyped* left, TIntermTyped* right, const TSourceLoc&); + TIntermTyped* addIndex(TOperator op, TIntermTyped* base, TIntermTyped* index, const TSourceLoc&); + TIntermTyped* addUnaryMath(TOperator, TIntermTyped* child, const TSourceLoc&); TIntermTyped* addBuiltInFunctionCall(const TSourceLoc& line, TOperator, bool unary, TIntermNode*, const TType& returnType); bool canImplicitlyPromote(TBasicType from, TBasicType to, TOperator op = EOpNull) const; bool isIntegralPromotion(TBasicType from, TBasicType to) const; @@ -447,7 +447,7 @@ class TIntermediate { TIntermAggregate* makeAggregate(TIntermNode* node); TIntermAggregate* makeAggregate(TIntermNode* node, const TSourceLoc&); TIntermAggregate* makeAggregate(const TSourceLoc&); - TIntermTyped* setAggregateOperator(TIntermNode*, TOperator, const TType& type, TSourceLoc); + TIntermTyped* setAggregateOperator(TIntermNode*, TOperator, const TType& type, const TSourceLoc&); bool areAllChildConst(TIntermAggregate* aggrNode); TIntermSelection* addSelection(TIntermTyped* cond, TIntermNodePair code, const TSourceLoc&); TIntermTyped* addSelection(TIntermTyped* cond, TIntermTyped* trueBlock, TIntermTyped* falseBlock, const TSourceLoc&); @@ -476,10 +476,11 @@ class TIntermediate { // Low level functions to add nodes (no conversions or other higher level transformations) // If a type is provided, the node's type will be set to it. - TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc) const; - TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, TSourceLoc, const TType&) const; - TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc) const; - TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, TSourceLoc, const TType&) const; + TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, const TSourceLoc&) const; + TIntermBinary* addBinaryNode(TOperator op, TIntermTyped* left, TIntermTyped* right, const TSourceLoc&, + const TType&) const; + TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, const TSourceLoc&) const; + TIntermUnary* addUnaryNode(TOperator op, TIntermTyped* child, const TSourceLoc&, const TType&) const; // Constant folding (in Constant.cpp) TIntermTyped* fold(TIntermAggregate* aggrNode); From d8daeb4323dd88f1b5afb60126e829cbbda66363 Mon Sep 17 00:00:00 2001 From: johnkslang Date: Fri, 7 Aug 2020 02:26:04 -0600 Subject: [PATCH 010/365] Non-functional: correctly do GL_EXT_buffer_reference2 semantic checking See #2366 for detail. --- .../spv.bufferhandle17_Errors.frag.out | 6 +- glslang/MachineIndependent/Intermediate.cpp | 57 +- glslang/MachineIndependent/ParseHelper.cpp | 13 +- glslang/MachineIndependent/ParseHelper.h | 1 + glslang/MachineIndependent/glslang.m4 | 2 +- glslang/MachineIndependent/glslang.y | 3 +- glslang/MachineIndependent/glslang_tab.cpp | 2385 ++++++++--------- glslang/MachineIndependent/glslang_tab.cpp.h | 10 +- 8 files changed, 1245 insertions(+), 1232 deletions(-) diff --git a/Test/baseResults/spv.bufferhandle17_Errors.frag.out b/Test/baseResults/spv.bufferhandle17_Errors.frag.out index cdcfb9c8f9..9c7ddf93a7 100644 --- a/Test/baseResults/spv.bufferhandle17_Errors.frag.out +++ b/Test/baseResults/spv.bufferhandle17_Errors.frag.out @@ -2,8 +2,12 @@ spv.bufferhandle17_Errors.frag ERROR: 0:11: 'qualifier' : variables with reference type can't have qualifier 'const' ERROR: 0:16: 'qualifier' : variables with reference type can't have qualifier 'const' ERROR: 0:18: '==' : can't use with reference types +ERROR: 0:18: 'buffer reference math' : required extension not requested: GL_EXT_buffer_reference2 +ERROR: 0:18: '==' : wrong operand types: no operation '==' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' temp reference' (or there is no acceptable conversion) ERROR: 0:19: '!=' : can't use with reference types -ERROR: 4 compilation errors. No code generated. +ERROR: 0:19: 'buffer reference math' : required extension not requested: GL_EXT_buffer_reference2 +ERROR: 0:19: '!=' : wrong operand types: no operation '!=' exists that takes a left-hand operand of type ' temp reference' and a right operand of type ' temp reference' (or there is no acceptable conversion) +ERROR: 8 compilation errors. No code generated. SPIR-V is not generated for failed compile or link diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index dac8300ac6..35b7a127f5 100755 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -120,7 +120,7 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn return nullptr; // Convert "reference +/- int" and "reference - reference" to integer math - if ((op == EOpAdd || op == EOpSub) && extensionRequested(E_GL_EXT_buffer_reference2)) { + if (op == EOpAdd || op == EOpSub) { // No addressing math on struct with unsized array. if ((left->isReference() && left->getType().getReferentType()->containsUnsizedArray()) || @@ -140,41 +140,42 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType); return node; } + } - if (op == EOpAdd && right->isReference() && isTypeInt(left->getBasicType())) { - const TType& referenceType = right->getType(); - TIntermConstantUnion* size = addConstantUnion((unsigned long long)computeBufferReferenceTypeSize(right->getType()), loc, true); - right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64)); - - left = createConversion(EbtInt64, left); - left = addBinaryMath(EOpMul, left, size, loc); + if (op == EOpAdd && right->isReference() && isTypeInt(left->getBasicType())) { + const TType& referenceType = right->getType(); + TIntermConstantUnion* size = + addConstantUnion((unsigned long long)computeBufferReferenceTypeSize(right->getType()), loc, true); + right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64)); - TIntermTyped *node = addBinaryMath(op, left, right, loc); - node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType); - return node; - } + left = createConversion(EbtInt64, left); + left = addBinaryMath(EOpMul, left, size, loc); - if (op == EOpSub && left->isReference() && right->isReference()) { - TIntermConstantUnion* size = addConstantUnion((long long)computeBufferReferenceTypeSize(left->getType()), loc, true); + TIntermTyped *node = addBinaryMath(op, left, right, loc); + node = addBuiltInFunctionCall(loc, EOpConvUint64ToPtr, true, node, referenceType); + return node; + } - left = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64)); - right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64)); + if (op == EOpSub && left->isReference() && right->isReference()) { + TIntermConstantUnion* size = + addConstantUnion((long long)computeBufferReferenceTypeSize(left->getType()), loc, true); - left = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, left, TType(EbtInt64)); - right = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, right, TType(EbtInt64)); + left = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, left, TType(EbtUint64)); + right = addBuiltInFunctionCall(loc, EOpConvPtrToUint64, true, right, TType(EbtUint64)); - left = addBinaryMath(EOpSub, left, right, loc); + left = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, left, TType(EbtInt64)); + right = addBuiltInFunctionCall(loc, EOpConvUint64ToInt64, true, right, TType(EbtInt64)); - TIntermTyped *node = addBinaryMath(EOpDiv, left, size, loc); - return node; - } + left = addBinaryMath(EOpSub, left, right, loc); - // No other math operators supported on references - if (left->isReference() || right->isReference()) { - return nullptr; - } + TIntermTyped *node = addBinaryMath(EOpDiv, left, size, loc); + return node; } + // No other math operators supported on references + if (left->isReference() || right->isReference()) + return nullptr; + // Try converting the children's base types to compatible types. auto children = addConversion(op, left, right); left = std::get<0>(children); @@ -290,9 +291,7 @@ TIntermTyped* TIntermediate::addAssign(TOperator op, TIntermTyped* left, TInterm // Convert "reference += int" to "reference = reference + int". We need this because the // "reference + int" calculation involves a cast back to the original type, which makes it // not an lvalue. - if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference() && - extensionRequested(E_GL_EXT_buffer_reference2)) { - + if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference()) { if (!(right->getType().isScalar() && right->getType().isIntegerDomain())) return nullptr; diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index c2e702174d..2c4b0869e0 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -751,8 +751,11 @@ TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char* } TIntermTyped* result = nullptr; - if (allowed) + if (allowed) { + if ((left->isReference() || right->isReference())) + requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "buffer reference math"); result = intermediate.addBinaryMath(op, left, right, loc); + } if (result == nullptr) binaryOpError(loc, str, left->getCompleteString(), right->getCompleteString()); @@ -1680,6 +1683,14 @@ TIntermTyped* TParseContext::addOutputArgumentConversions(const TFunction& funct #endif } +TIntermTyped* TParseContext::addAssign(const TSourceLoc& loc, TOperator op, TIntermTyped* left, TIntermTyped* right) +{ + if ((op == EOpAddAssign || op == EOpSubAssign) && left->isReference()) + requireExtensions(loc, 1, &E_GL_EXT_buffer_reference2, "+= and -= on a buffer reference"); + + return intermediate.addAssign(op, left, right, loc); +} + void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& fnCandidate, const TIntermOperator& callNode) { const TIntermSequence* argp = &callNode.getAsAggregate()->getSequence(); diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 8b262c9463..09f51c7984 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -328,6 +328,7 @@ class TParseContext : public TParseContextBase { TIntermTyped* handleLengthMethod(const TSourceLoc&, TFunction*, TIntermNode*); void addInputArgumentConversions(const TFunction&, TIntermNode*&) const; TIntermTyped* addOutputArgumentConversions(const TFunction&, TIntermAggregate&) const; + TIntermTyped* addAssign(const TSourceLoc&, TOperator op, TIntermTyped* left, TIntermTyped* right); void builtInOpCheck(const TSourceLoc&, const TFunction&, TIntermOperator&); void nonOpBuiltInCheck(const TSourceLoc&, const TFunction&, TIntermAggregate&); void userFunctionCallCheck(const TSourceLoc&, TIntermAggregate&); diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 1432bf6e80..d1701cf140 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -778,7 +778,7 @@ assignment_expression parseContext.specializationCheck($2.loc, $1->getType(), "="); parseContext.lValueErrorCheck($2.loc, "assign", $1); parseContext.rValueErrorCheck($2.loc, "assign", $3); - $$ = parseContext.intermediate.addAssign($2.op, $1, $3, $2.loc); + $$ = parseContext.addAssign($2.loc, $2.op, $1, $3); if ($$ == 0) { parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString()); $$ = $1; diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index e33d7d1ca3..fe0215773d 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -778,7 +778,7 @@ assignment_expression parseContext.specializationCheck($2.loc, $1->getType(), "="); parseContext.lValueErrorCheck($2.loc, "assign", $1); parseContext.rValueErrorCheck($2.loc, "assign", $3); - $$ = parseContext.intermediate.addAssign($2.op, $1, $3, $2.loc); + $$ = parseContext.addAssign($2.loc, $2.op, $1, $3); if ($$ == 0) { parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString()); $$ = $1; @@ -3885,4 +3885,3 @@ single_attribute %% - diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 69f7f8e0b6..16810e36a1 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -62,7 +62,7 @@ /* Copy the first part of user declarations. */ -#line 69 "glslang.y" /* yacc.c:339 */ +#line 69 "MachineIndependent/glslang.y" /* yacc.c:339 */ /* Based on: @@ -88,7 +88,7 @@ Jutta Degener, 1995 using namespace glslang; -#line 92 "glslang_tab.cpp" /* yacc.c:339 */ +#line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339 */ # ifndef YY_NULLPTR # if defined __cplusplus && 201103L <= __cplusplus @@ -108,8 +108,8 @@ using namespace glslang; /* In a future release of Bison, this section will be replaced by #include "glslang_tab.cpp.h". */ -#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED -# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED +#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED +# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 1 @@ -548,7 +548,7 @@ extern int yydebug; union YYSTYPE { -#line 97 "glslang.y" /* yacc.c:355 */ +#line 97 "MachineIndependent/glslang.y" /* yacc.c:355 */ struct { glslang::TSourceLoc loc; @@ -584,7 +584,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 588 "glslang_tab.cpp" /* yacc.c:355 */ +#line 588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -596,10 +596,10 @@ typedef union YYSTYPE YYSTYPE; int yyparse (glslang::TParseContext* pParseContext); -#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED */ +#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ /* Copy the second part of user declarations. */ -#line 133 "glslang.y" /* yacc.c:358 */ +#line 133 "MachineIndependent/glslang.y" /* yacc.c:358 */ /* windows only pragma */ @@ -615,7 +615,7 @@ int yyparse (glslang::TParseContext* pParseContext); extern int yylex(YYSTYPE*, TParseContext&); -#line 619 "glslang_tab.cpp" /* yacc.c:358 */ +#line 619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */ #ifdef short # undef short @@ -4221,260 +4221,260 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); switch (yyn) { case 2: -#line 357 "glslang.y" /* yacc.c:1646 */ +#line 357 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 4229 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 3: -#line 363 "glslang.y" /* yacc.c:1646 */ +#line 363 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4237 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 4: -#line 366 "glslang.y" /* yacc.c:1646 */ +#line 366 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4247 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 5: -#line 371 "glslang.y" /* yacc.c:1646 */ +#line 371 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4255 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 6: -#line 374 "glslang.y" /* yacc.c:1646 */ +#line 374 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4263 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 7: -#line 377 "glslang.y" /* yacc.c:1646 */ +#line 377 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4272 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 8: -#line 381 "glslang.y" /* yacc.c:1646 */ +#line 381 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4280 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 9: -#line 385 "glslang.y" /* yacc.c:1646 */ +#line 385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 4288 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 10: -#line 388 "glslang.y" /* yacc.c:1646 */ +#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4297 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 11: -#line 392 "glslang.y" /* yacc.c:1646 */ +#line 392 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4306 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 12: -#line 396 "glslang.y" /* yacc.c:1646 */ +#line 396 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4315 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 13: -#line 400 "glslang.y" /* yacc.c:1646 */ +#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4324 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 14: -#line 404 "glslang.y" /* yacc.c:1646 */ +#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4333 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 15: -#line 408 "glslang.y" /* yacc.c:1646 */ +#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4342 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 16: -#line 412 "glslang.y" /* yacc.c:1646 */ +#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal"); if (! parseContext.symbolTable.atBuiltInLevel()) 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 4353 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 17: -#line 418 "glslang.y" /* yacc.c:1646 */ +#line 418 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4362 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 18: -#line 426 "glslang.y" /* yacc.c:1646 */ +#line 426 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4370 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 19: -#line 429 "glslang.y" /* yacc.c:1646 */ +#line 429 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4378 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 20: -#line 432 "glslang.y" /* yacc.c:1646 */ +#line 432 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4386 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 21: -#line 435 "glslang.y" /* yacc.c:1646 */ +#line 435 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4394 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 22: -#line 438 "glslang.y" /* yacc.c:1646 */ +#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4404 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 23: -#line 443 "glslang.y" /* yacc.c:1646 */ +#line 443 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4414 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 24: -#line 451 "glslang.y" /* yacc.c:1646 */ +#line 451 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4423 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 25: -#line 458 "glslang.y" /* yacc.c:1646 */ +#line 458 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 4432 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 26: -#line 465 "glslang.y" /* yacc.c:1646 */ +#line 465 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); } -#line 4440 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 27: -#line 471 "glslang.y" /* yacc.c:1646 */ +#line 471 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4449 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 28: -#line 475 "glslang.y" /* yacc.c:1646 */ +#line 475 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4458 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 29: -#line 482 "glslang.y" /* yacc.c:1646 */ +#line 482 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-1].interm); } -#line 4466 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 30: -#line 485 "glslang.y" /* yacc.c:1646 */ +#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); } -#line 4474 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 31: -#line 491 "glslang.y" /* yacc.c:1646 */ +#line 491 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); @@ -4482,11 +4482,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 4486 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 32: -#line 498 "glslang.y" /* yacc.c:1646 */ +#line 498 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); @@ -4494,29 +4494,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 4498 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 33: -#line 508 "glslang.y" /* yacc.c:1646 */ +#line 508 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-1].interm); } -#line 4506 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 34: -#line 516 "glslang.y" /* yacc.c:1646 */ +#line 516 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4516 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 35: -#line 521 "glslang.y" /* yacc.c:1646 */ +#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. @@ -4544,50 +4544,50 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 4548 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 36: -#line 549 "glslang.y" /* yacc.c:1646 */ +#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4558 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 37: -#line 558 "glslang.y" /* yacc.c:1646 */ +#line 558 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.variableCheck((yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 4569 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 38: -#line 564 "glslang.y" /* yacc.c:1646 */ +#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4578 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 39: -#line 568 "glslang.y" /* yacc.c:1646 */ +#line 568 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4587 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 40: -#line 572 "glslang.y" /* yacc.c:1646 */ +#line 572 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; @@ -4604,179 +4604,179 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 4608 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 41: -#line 592 "glslang.y" /* yacc.c:1646 */ +#line 592 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 4614 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 42: -#line 593 "glslang.y" /* yacc.c:1646 */ +#line 593 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 4620 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 43: -#line 594 "glslang.y" /* yacc.c:1646 */ +#line 594 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 4626 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 44: -#line 595 "glslang.y" /* yacc.c:1646 */ +#line 595 "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 4633 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 45: -#line 601 "glslang.y" /* yacc.c:1646 */ +#line 601 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4639 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 46: -#line 602 "glslang.y" /* yacc.c:1646 */ +#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4649 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 47: -#line 607 "glslang.y" /* yacc.c:1646 */ +#line 607 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4659 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 48: -#line 612 "glslang.y" /* yacc.c:1646 */ +#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4670 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 49: -#line 621 "glslang.y" /* yacc.c:1646 */ +#line 621 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4676 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 50: -#line 622 "glslang.y" /* yacc.c:1646 */ +#line 622 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4686 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 51: -#line 627 "glslang.y" /* yacc.c:1646 */ +#line 627 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4696 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 52: -#line 635 "glslang.y" /* yacc.c:1646 */ +#line 635 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4702 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 53: -#line 636 "glslang.y" /* yacc.c:1646 */ +#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4713 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 54: -#line 642 "glslang.y" /* yacc.c:1646 */ +#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4724 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 55: -#line 651 "glslang.y" /* yacc.c:1646 */ +#line 651 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4730 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 56: -#line 652 "glslang.y" /* yacc.c:1646 */ +#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4740 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 57: -#line 657 "glslang.y" /* yacc.c:1646 */ +#line 657 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4750 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 58: -#line 662 "glslang.y" /* yacc.c:1646 */ +#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4760 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 59: -#line 667 "glslang.y" /* yacc.c:1646 */ +#line 667 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4770 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 60: -#line 675 "glslang.y" /* yacc.c:1646 */ +#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4776 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 61: -#line 676 "glslang.y" /* yacc.c:1646 */ +#line 676 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=="); @@ -4786,11 +4786,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4790 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 62: -#line 685 "glslang.y" /* yacc.c:1646 */ +#line 685 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!="); @@ -4800,124 +4800,124 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4804 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 63: -#line 697 "glslang.y" /* yacc.c:1646 */ +#line 697 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4810 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 64: -#line 698 "glslang.y" /* yacc.c:1646 */ +#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4821 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 65: -#line 707 "glslang.y" /* yacc.c:1646 */ +#line 707 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4827 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 66: -#line 708 "glslang.y" /* yacc.c:1646 */ +#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4838 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 67: -#line 717 "glslang.y" /* yacc.c:1646 */ +#line 717 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4844 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 68: -#line 718 "glslang.y" /* yacc.c:1646 */ +#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4855 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 69: -#line 727 "glslang.y" /* yacc.c:1646 */ +#line 727 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4861 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4861 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 70: -#line 728 "glslang.y" /* yacc.c:1646 */ +#line 728 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4871 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 71: -#line 736 "glslang.y" /* yacc.c:1646 */ +#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4877 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 72: -#line 737 "glslang.y" /* yacc.c:1646 */ +#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4887 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 73: -#line 745 "glslang.y" /* yacc.c:1646 */ +#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4893 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 74: -#line 746 "glslang.y" /* yacc.c:1646 */ +#line 746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4903 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 75: -#line 754 "glslang.y" /* yacc.c:1646 */ +#line 754 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4909 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 76: -#line 755 "glslang.y" /* yacc.c:1646 */ +#line 755 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.controlFlowNestingLevel; } -#line 4917 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 77: -#line 758 "glslang.y" /* yacc.c:1646 */ +#line 758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); @@ -4930,17 +4930,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 4934 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 78: -#line 773 "glslang.y" /* yacc.c:1646 */ +#line 773 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4940 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 79: -#line 774 "glslang.y" /* yacc.c:1646 */ +#line 774 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment"); parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); @@ -4948,125 +4948,125 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.specializationCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); parseContext.lValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)); parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode)); - (yyval.interm.intermTypedNode) = parseContext.intermediate.addAssign((yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].interm).loc); + (yyval.interm.intermTypedNode) = parseContext.addAssign((yyvsp[-1].interm).loc, (yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) { parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString()); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 4958 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 80: -#line 790 "glslang.y" /* yacc.c:1646 */ +#line 790 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 4967 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 81: -#line 794 "glslang.y" /* yacc.c:1646 */ +#line 794 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 4976 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 82: -#line 798 "glslang.y" /* yacc.c:1646 */ +#line 798 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 4985 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 83: -#line 802 "glslang.y" /* yacc.c:1646 */ +#line 802 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%="); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 4995 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 4995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 84: -#line 807 "glslang.y" /* yacc.c:1646 */ +#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5004 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 85: -#line 811 "glslang.y" /* yacc.c:1646 */ +#line 811 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5013 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 86: -#line 815 "glslang.y" /* yacc.c:1646 */ +#line 815 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5022 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 87: -#line 819 "glslang.y" /* yacc.c:1646 */ +#line 819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5031 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 88: -#line 823 "glslang.y" /* yacc.c:1646 */ +#line 823 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5040 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 89: -#line 827 "glslang.y" /* yacc.c:1646 */ +#line 827 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 5049 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 90: -#line 831 "glslang.y" /* yacc.c:1646 */ +#line 831 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 5058 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 91: -#line 838 "glslang.y" /* yacc.c:1646 */ +#line 838 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5066 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 92: -#line 841 "glslang.y" /* yacc.c:1646 */ +#line 841 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); @@ -5075,40 +5075,40 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5079 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 93: -#line 852 "glslang.y" /* yacc.c:1646 */ +#line 852 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5088 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 94: -#line 859 "glslang.y" /* yacc.c:1646 */ +#line 859 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 5098 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 95: -#line 864 "glslang.y" /* yacc.c:1646 */ +#line 864 "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 5108 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 96: -#line 869 "glslang.y" /* yacc.c:1646 */ +#line 869 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement"); // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope @@ -5116,75 +5116,75 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 5120 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 97: -#line 876 "glslang.y" /* yacc.c:1646 */ +#line 876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 5129 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 98: -#line 880 "glslang.y" /* yacc.c:1646 */ +#line 880 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5138 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 99: -#line 884 "glslang.y" /* yacc.c:1646 */ +#line 884 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 5147 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 100: -#line 888 "glslang.y" /* yacc.c:1646 */ +#line 888 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 5157 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 101: -#line 893 "glslang.y" /* yacc.c:1646 */ +#line 893 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5167 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 102: -#line 898 "glslang.y" /* yacc.c:1646 */ +#line 898 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers); (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 5178 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 103: -#line 907 "glslang.y" /* yacc.c:1646 */ +#line 907 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 5184 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 104: -#line 907 "glslang.y" /* yacc.c:1646 */ +#line 907 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { --parseContext.structNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; @@ -5194,54 +5194,54 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 5198 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 105: -#line 918 "glslang.y" /* yacc.c:1646 */ +#line 918 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5207 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 106: -#line 922 "glslang.y" /* yacc.c:1646 */ +#line 922 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5216 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 107: -#line 929 "glslang.y" /* yacc.c:1646 */ +#line 929 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5225 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 108: -#line 936 "glslang.y" /* yacc.c:1646 */ +#line 936 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5233 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 109: -#line 939 "glslang.y" /* yacc.c:1646 */ +#line 939 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5241 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 110: -#line 946 "glslang.y" /* yacc.c:1646 */ +#line 946 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); @@ -5250,11 +5250,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 5254 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 111: -#line 954 "glslang.y" /* yacc.c:1646 */ +#line 954 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // // Only first parameter of one-parameter functions can be void @@ -5272,11 +5272,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5276 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 112: -#line 974 "glslang.y" /* yacc.c:1646 */ +#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) { parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return", @@ -5296,11 +5296,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5300 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 113: -#line 997 "glslang.y" /* yacc.c:1646 */ +#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-1].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5316,11 +5316,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5320 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 114: -#line 1012 "glslang.y" /* yacc.c:1646 */ +#line 1012 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5340,11 +5340,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5344 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 115: -#line 1037 "glslang.y" /* yacc.c:1646 */ +#line 1037 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5356,11 +5356,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5360 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 116: -#line 1048 "glslang.y" /* yacc.c:1646 */ +#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); @@ -5368,11 +5368,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5372 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 117: -#line 1058 "glslang.y" /* yacc.c:1646 */ +#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5383,11 +5383,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5387 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 118: -#line 1068 "glslang.y" /* yacc.c:1646 */ +#line 1068 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); @@ -5395,68 +5395,68 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5399 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 119: -#line 1078 "glslang.y" /* yacc.c:1646 */ +#line 1078 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TParameter param = { 0, new TType((yyvsp[0].interm.type)) }; (yyval.interm).param = param; if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5410 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 120: -#line 1087 "glslang.y" /* yacc.c:1646 */ +#line 1087 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); } -#line 5418 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 121: -#line 1090 "glslang.y" /* yacc.c:1646 */ +#line 1090 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 5427 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 122: -#line 1094 "glslang.y" /* yacc.c:1646 */ +#line 1094 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 5436 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 123: -#line 1098 "glslang.y" /* yacc.c:1646 */ +#line 1098 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-5].interm).type; 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 5446 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 124: -#line 1103 "glslang.y" /* yacc.c:1646 */ +#line 1103 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-4].interm).type; 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 5456 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 125: -#line 1111 "glslang.y" /* yacc.c:1646 */ +#line 1111 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; @@ -5464,51 +5464,51 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 5468 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 126: -#line 1118 "glslang.y" /* yacc.c:1646 */ +#line 1118 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-1].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 5478 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 127: -#line 1123 "glslang.y" /* yacc.c:1646 */ +#line 1123 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-2].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 5488 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 128: -#line 1128 "glslang.y" /* yacc.c:1646 */ +#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-4].interm.type); 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 5498 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 129: -#line 1133 "glslang.y" /* yacc.c:1646 */ +#line 1133 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-3].interm.type); 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 5508 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 130: -#line 1142 "glslang.y" /* yacc.c:1646 */ +#line 1142 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -5519,11 +5519,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 5523 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 131: -#line 1152 "glslang.y" /* yacc.c:1646 */ +#line 1152 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type)); @@ -5548,22 +5548,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 5552 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 132: -#line 1179 "glslang.y" /* yacc.c:1646 */ +#line 1179 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "invariant"); parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 5563 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 133: -#line 1188 "glslang.y" /* yacc.c:1646 */ +#line 1188 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); @@ -5571,11 +5571,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 5575 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 134: -#line 1195 "glslang.y" /* yacc.c:1646 */ +#line 1195 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); @@ -5583,11 +5583,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 5587 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 135: -#line 1203 "glslang.y" /* yacc.c:1646 */ +#line 1203 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); @@ -5595,11 +5595,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 5599 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 136: -#line 1210 "glslang.y" /* yacc.c:1646 */ +#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); @@ -5607,11 +5607,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 5611 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 137: -#line 1217 "glslang.y" /* yacc.c:1646 */ +#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); @@ -5620,11 +5620,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 5624 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 138: -#line 1225 "glslang.y" /* yacc.c:1646 */ +#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); @@ -5635,11 +5635,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 5639 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 139: -#line 1235 "glslang.y" /* yacc.c:1646 */ +#line 1235 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); @@ -5647,11 +5647,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 5651 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 140: -#line 1242 "glslang.y" /* yacc.c:1646 */ +#line 1242 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); @@ -5659,84 +5659,84 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 5663 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 141: -#line 1253 "glslang.y" /* yacc.c:1646 */ +#line 1253 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 5671 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 142: -#line 1259 "glslang.y" /* yacc.c:1646 */ +#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5679 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 143: -#line 1262 "glslang.y" /* yacc.c:1646 */ +#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 5689 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 144: -#line 1269 "glslang.y" /* yacc.c:1646 */ +#line 1269 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 5698 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 145: -#line 1273 "glslang.y" /* yacc.c:1646 */ +#line 1273 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[-2].lex).loc); parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode)); } -#line 5707 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 146: -#line 1277 "glslang.y" /* yacc.c:1646 */ +#line 1277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 5717 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 147: -#line 1286 "glslang.y" /* yacc.c:1646 */ +#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 5728 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 148: -#line 1296 "glslang.y" /* yacc.c:1646 */ +#line 1296 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5736 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 149: -#line 1299 "glslang.y" /* yacc.c:1646 */ +#line 1299 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -5745,112 +5745,112 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 5749 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 150: -#line 1310 "glslang.y" /* yacc.c:1646 */ +#line 1310 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5757 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 151: -#line 1313 "glslang.y" /* yacc.c:1646 */ +#line 1313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5765 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 152: -#line 1316 "glslang.y" /* yacc.c:1646 */ +#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5774 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 153: -#line 1320 "glslang.y" /* yacc.c:1646 */ +#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5783 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 154: -#line 1324 "glslang.y" /* yacc.c:1646 */ +#line 1324 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5792 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 155: -#line 1329 "glslang.y" /* yacc.c:1646 */ +#line 1329 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5801 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 156: -#line 1333 "glslang.y" /* yacc.c:1646 */ +#line 1333 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5809 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 157: -#line 1340 "glslang.y" /* yacc.c:1646 */ +#line 1340 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant } -#line 5818 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 158: -#line 1344 "glslang.y" /* yacc.c:1646 */ +#line 1344 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 5828 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 159: -#line 1349 "glslang.y" /* yacc.c:1646 */ +#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 5839 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 160: -#line 1355 "glslang.y" /* yacc.c:1646 */ +#line 1355 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 5850 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 161: -#line 1361 "glslang.y" /* yacc.c:1646 */ +#line 1361 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -5858,21 +5858,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 5862 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 162: -#line 1368 "glslang.y" /* yacc.c:1646 */ +#line 1368 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 5872 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 163: -#line 1373 "glslang.y" /* yacc.c:1646 */ +#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); @@ -5881,21 +5881,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 5885 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 164: -#line 1381 "glslang.y" /* yacc.c:1646 */ +#line 1381 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 5895 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 165: -#line 1387 "glslang.y" /* yacc.c:1646 */ +#line 1387 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -5908,11 +5908,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 5912 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 166: -#line 1399 "glslang.y" /* yacc.c:1646 */ +#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -5927,32 +5927,32 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 5931 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 167: -#line 1413 "glslang.y" /* yacc.c:1646 */ +#line 1413 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 5942 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 168: -#line 1419 "glslang.y" /* yacc.c:1646 */ +#line 1419 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 5952 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 169: -#line 1424 "glslang.y" /* yacc.c:1646 */ +#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -5961,11 +5961,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 5965 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 170: -#line 1432 "glslang.y" /* yacc.c:1646 */ +#line 1432 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -5974,11 +5974,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 5978 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 171: -#line 1440 "glslang.y" /* yacc.c:1646 */ +#line 1440 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -5987,11 +5987,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 5991 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 5991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 172: -#line 1448 "glslang.y" /* yacc.c:1646 */ +#line 1448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -6000,11 +6000,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6004 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 173: -#line 1456 "glslang.y" /* yacc.c:1646 */ +#line 1456 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6013,11 +6013,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6017 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 174: -#line 1464 "glslang.y" /* yacc.c:1646 */ +#line 1464 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6026,11 +6026,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6030 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 175: -#line 1472 "glslang.y" /* yacc.c:1646 */ +#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6039,11 +6039,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6043 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 176: -#line 1480 "glslang.y" /* yacc.c:1646 */ +#line 1480 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6052,11 +6052,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6056 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 177: -#line 1488 "glslang.y" /* yacc.c:1646 */ +#line 1488 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -6064,11 +6064,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6068 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 178: -#line 1495 "glslang.y" /* yacc.c:1646 */ +#line 1495 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -6076,175 +6076,175 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6080 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 179: -#line 1502 "glslang.y" /* yacc.c:1646 */ +#line 1502 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 6089 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 180: -#line 1506 "glslang.y" /* yacc.c:1646 */ +#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 6099 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 181: -#line 1511 "glslang.y" /* yacc.c:1646 */ +#line 1511 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 6109 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 182: -#line 1516 "glslang.y" /* yacc.c:1646 */ +#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 6119 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 183: -#line 1521 "glslang.y" /* yacc.c:1646 */ +#line 1521 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 6129 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 184: -#line 1526 "glslang.y" /* yacc.c:1646 */ +#line 1526 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 6139 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 185: -#line 1531 "glslang.y" /* yacc.c:1646 */ +#line 1531 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 6149 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 186: -#line 1536 "glslang.y" /* yacc.c:1646 */ +#line 1536 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 6158 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 187: -#line 1540 "glslang.y" /* yacc.c:1646 */ +#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 6167 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 188: -#line 1544 "glslang.y" /* yacc.c:1646 */ +#line 1544 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 6176 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 189: -#line 1548 "glslang.y" /* yacc.c:1646 */ +#line 1548 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 6185 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 190: -#line 1552 "glslang.y" /* yacc.c:1646 */ +#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 6196 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 191: -#line 1558 "glslang.y" /* yacc.c:1646 */ +#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 6207 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 192: -#line 1569 "glslang.y" /* yacc.c:1646 */ +#line 1569 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 6216 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 193: -#line 1576 "glslang.y" /* yacc.c:1646 */ +#line 1576 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // TODO } -#line 6224 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 194: -#line 1579 "glslang.y" /* yacc.c:1646 */ +#line 1579 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 6234 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 195: -#line 1588 "glslang.y" /* yacc.c:1646 */ +#line 1588 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 6244 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 196: -#line 1593 "glslang.y" /* yacc.c:1646 */ +#line 1593 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); @@ -6252,21 +6252,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 6256 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 197: -#line 1603 "glslang.y" /* yacc.c:1646 */ +#line 1603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 6266 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 198: -#line 1608 "glslang.y" /* yacc.c:1646 */ +#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -6275,20 +6275,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6279 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 199: -#line 1616 "glslang.y" /* yacc.c:1646 */ +#line 1616 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 6288 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 200: -#line 1620 "glslang.y" /* yacc.c:1646 */ +#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-3].interm); @@ -6296,35 +6296,35 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6300 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 201: -#line 1630 "glslang.y" /* yacc.c:1646 */ +#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 6308 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 202: -#line 1633 "glslang.y" /* yacc.c:1646 */ +#line 1633 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = 0; } -#line 6316 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 203: -#line 1639 "glslang.y" /* yacc.c:1646 */ +#line 1639 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 6324 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 204: -#line 1645 "glslang.y" /* yacc.c:1646 */ +#line 1645 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = new TArraySizes; @@ -6332,11 +6332,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6336 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 205: -#line 1652 "glslang.y" /* yacc.c:1646 */ +#line 1652 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -6344,300 +6344,300 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6348 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 206: -#line 1662 "glslang.y" /* yacc.c:1646 */ +#line 1662 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 6357 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 207: -#line 1666 "glslang.y" /* yacc.c:1646 */ +#line 1666 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6366 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 208: -#line 1670 "glslang.y" /* yacc.c:1646 */ +#line 1670 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6375 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 209: -#line 1674 "glslang.y" /* yacc.c:1646 */ +#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6385 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 210: -#line 1679 "glslang.y" /* yacc.c:1646 */ +#line 1679 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 6394 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 211: -#line 1683 "glslang.y" /* yacc.c:1646 */ +#line 1683 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6404 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 212: -#line 1688 "glslang.y" /* yacc.c:1646 */ +#line 1688 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6414 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 213: -#line 1693 "glslang.y" /* yacc.c:1646 */ +#line 1693 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6424 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 214: -#line 1698 "glslang.y" /* yacc.c:1646 */ +#line 1698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 6434 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 215: -#line 1703 "glslang.y" /* yacc.c:1646 */ +#line 1703 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 6444 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 216: -#line 1708 "glslang.y" /* yacc.c:1646 */ +#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 6454 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 217: -#line 1713 "glslang.y" /* yacc.c:1646 */ +#line 1713 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6464 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 218: -#line 1718 "glslang.y" /* yacc.c:1646 */ +#line 1718 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6474 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 219: -#line 1723 "glslang.y" /* yacc.c:1646 */ +#line 1723 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6484 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 220: -#line 1728 "glslang.y" /* yacc.c:1646 */ +#line 1728 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6495 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 221: -#line 1734 "glslang.y" /* yacc.c:1646 */ +#line 1734 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6506 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 222: -#line 1740 "glslang.y" /* yacc.c:1646 */ +#line 1740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6517 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 223: -#line 1746 "glslang.y" /* yacc.c:1646 */ +#line 1746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6527 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 224: -#line 1751 "glslang.y" /* yacc.c:1646 */ +#line 1751 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6537 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 225: -#line 1756 "glslang.y" /* yacc.c:1646 */ +#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6547 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 226: -#line 1761 "glslang.y" /* yacc.c:1646 */ +#line 1761 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6557 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 227: -#line 1766 "glslang.y" /* yacc.c:1646 */ +#line 1766 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 6567 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 228: -#line 1771 "glslang.y" /* yacc.c:1646 */ +#line 1771 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 6577 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 229: -#line 1776 "glslang.y" /* yacc.c:1646 */ +#line 1776 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 6587 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 230: -#line 1781 "glslang.y" /* yacc.c:1646 */ +#line 1781 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6597 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 231: -#line 1786 "glslang.y" /* yacc.c:1646 */ +#line 1786 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 6607 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 232: -#line 1791 "glslang.y" /* yacc.c:1646 */ +#line 1791 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 6617 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 233: -#line 1796 "glslang.y" /* yacc.c:1646 */ +#line 1796 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 6627 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 234: -#line 1801 "glslang.y" /* yacc.c:1646 */ +#line 1801 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6637 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 235: -#line 1807 "glslang.y" /* yacc.c:1646 */ +#line 1807 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6645,121 +6645,121 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6649 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 236: -#line 1814 "glslang.y" /* yacc.c:1646 */ +#line 1814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 6659 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 237: -#line 1819 "glslang.y" /* yacc.c:1646 */ +#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6669 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 238: -#line 1824 "glslang.y" /* yacc.c:1646 */ +#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6679 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 239: -#line 1829 "glslang.y" /* yacc.c:1646 */ +#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 6689 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 240: -#line 1834 "glslang.y" /* yacc.c:1646 */ +#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 6699 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 241: -#line 1839 "glslang.y" /* yacc.c:1646 */ +#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 6709 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 242: -#line 1844 "glslang.y" /* yacc.c:1646 */ +#line 1844 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 6719 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 243: -#line 1849 "glslang.y" /* yacc.c:1646 */ +#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6729 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 244: -#line 1854 "glslang.y" /* yacc.c:1646 */ +#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6739 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 245: -#line 1859 "glslang.y" /* yacc.c:1646 */ +#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 6749 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 246: -#line 1864 "glslang.y" /* yacc.c:1646 */ +#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 6759 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 247: -#line 1869 "glslang.y" /* yacc.c:1646 */ +#line 1869 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6768,11 +6768,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 6772 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 248: -#line 1877 "glslang.y" /* yacc.c:1646 */ +#line 1877 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6781,11 +6781,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 6785 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 249: -#line 1885 "glslang.y" /* yacc.c:1646 */ +#line 1885 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6794,374 +6794,374 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6798 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 250: -#line 1893 "glslang.y" /* yacc.c:1646 */ +#line 1893 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 6809 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 251: -#line 1899 "glslang.y" /* yacc.c:1646 */ +#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 6820 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 252: -#line 1905 "glslang.y" /* yacc.c:1646 */ +#line 1905 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 6831 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 253: -#line 1911 "glslang.y" /* yacc.c:1646 */ +#line 1911 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6842 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 254: -#line 1917 "glslang.y" /* yacc.c:1646 */ +#line 1917 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6853 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 255: -#line 1923 "glslang.y" /* yacc.c:1646 */ +#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6864 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 256: -#line 1929 "glslang.y" /* yacc.c:1646 */ +#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 6875 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 257: -#line 1935 "glslang.y" /* yacc.c:1646 */ +#line 1935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 6886 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 258: -#line 1941 "glslang.y" /* yacc.c:1646 */ +#line 1941 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6897 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 259: -#line 1947 "glslang.y" /* yacc.c:1646 */ +#line 1947 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 6908 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 260: -#line 1953 "glslang.y" /* yacc.c:1646 */ +#line 1953 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 6919 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 261: -#line 1959 "glslang.y" /* yacc.c:1646 */ +#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 6930 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 262: -#line 1965 "glslang.y" /* yacc.c:1646 */ +#line 1965 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 6941 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 263: -#line 1971 "glslang.y" /* yacc.c:1646 */ +#line 1971 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 6952 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 264: -#line 1977 "glslang.y" /* yacc.c:1646 */ +#line 1977 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 6963 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 265: -#line 1983 "glslang.y" /* yacc.c:1646 */ +#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6974 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 266: -#line 1989 "glslang.y" /* yacc.c:1646 */ +#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6985 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 267: -#line 1995 "glslang.y" /* yacc.c:1646 */ +#line 1995 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6996 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 6996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 268: -#line 2001 "glslang.y" /* yacc.c:1646 */ +#line 2001 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 7007 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 269: -#line 2007 "glslang.y" /* yacc.c:1646 */ +#line 2007 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 7018 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 270: -#line 2013 "glslang.y" /* yacc.c:1646 */ +#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 7029 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 271: -#line 2019 "glslang.y" /* yacc.c:1646 */ +#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 7040 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 272: -#line 2025 "glslang.y" /* yacc.c:1646 */ +#line 2025 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 7051 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 273: -#line 2031 "glslang.y" /* yacc.c:1646 */ +#line 2031 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 7062 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 274: -#line 2037 "glslang.y" /* yacc.c:1646 */ +#line 2037 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 7073 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 275: -#line 2043 "glslang.y" /* yacc.c:1646 */ +#line 2043 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 7084 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 276: -#line 2049 "glslang.y" /* yacc.c:1646 */ +#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 7095 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 277: -#line 2055 "glslang.y" /* yacc.c:1646 */ +#line 2055 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7106 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 278: -#line 2061 "glslang.y" /* yacc.c:1646 */ +#line 2061 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7117 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 279: -#line 2067 "glslang.y" /* yacc.c:1646 */ +#line 2067 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7128 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 280: -#line 2073 "glslang.y" /* yacc.c:1646 */ +#line 2073 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 7139 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 281: -#line 2079 "glslang.y" /* yacc.c:1646 */ +#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 7150 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 282: -#line 2085 "glslang.y" /* yacc.c:1646 */ +#line 2085 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 7161 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 283: -#line 2091 "glslang.y" /* yacc.c:1646 */ +#line 2091 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7170,11 +7170,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7174 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 284: -#line 2099 "glslang.y" /* yacc.c:1646 */ +#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7183,11 +7183,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7187 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 285: -#line 2107 "glslang.y" /* yacc.c:1646 */ +#line 2107 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7196,11 +7196,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7200 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 286: -#line 2115 "glslang.y" /* yacc.c:1646 */ +#line 2115 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7209,11 +7209,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7213 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 287: -#line 2123 "glslang.y" /* yacc.c:1646 */ +#line 2123 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7222,11 +7222,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7226 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 288: -#line 2131 "glslang.y" /* yacc.c:1646 */ +#line 2131 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7235,11 +7235,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7239 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 289: -#line 2139 "glslang.y" /* yacc.c:1646 */ +#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7248,11 +7248,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7252 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 290: -#line 2147 "glslang.y" /* yacc.c:1646 */ +#line 2147 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7261,11 +7261,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7265 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 291: -#line 2155 "glslang.y" /* yacc.c:1646 */ +#line 2155 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7274,11 +7274,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7278 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7278 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 292: -#line 2163 "glslang.y" /* yacc.c:1646 */ +#line 2163 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7287,11 +7287,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7291 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 293: -#line 2171 "glslang.y" /* yacc.c:1646 */ +#line 2171 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7300,11 +7300,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7304 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 294: -#line 2179 "glslang.y" /* yacc.c:1646 */ +#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7313,2008 +7313,2008 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7317 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 295: -#line 2187 "glslang.y" /* yacc.c:1646 */ +#line 2187 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7328 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 296: -#line 2193 "glslang.y" /* yacc.c:1646 */ +#line 2193 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7339 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 297: -#line 2199 "glslang.y" /* yacc.c:1646 */ +#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7350 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 298: -#line 2205 "glslang.y" /* yacc.c:1646 */ +#line 2205 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7361 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 299: -#line 2211 "glslang.y" /* yacc.c:1646 */ +#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 7372 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 300: -#line 2217 "glslang.y" /* yacc.c:1646 */ +#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 7383 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 301: -#line 2223 "glslang.y" /* yacc.c:1646 */ +#line 2223 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 7394 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 302: -#line 2229 "glslang.y" /* yacc.c:1646 */ +#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7405 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 303: -#line 2235 "glslang.y" /* yacc.c:1646 */ +#line 2235 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 7416 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 304: -#line 2241 "glslang.y" /* yacc.c:1646 */ +#line 2241 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 7427 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 305: -#line 2247 "glslang.y" /* yacc.c:1646 */ +#line 2247 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 7438 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 306: -#line 2253 "glslang.y" /* yacc.c:1646 */ +#line 2253 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7449 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 307: -#line 2259 "glslang.y" /* yacc.c:1646 */ +#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7460 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 308: -#line 2265 "glslang.y" /* yacc.c:1646 */ +#line 2265 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7471 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 309: -#line 2271 "glslang.y" /* yacc.c:1646 */ +#line 2271 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7482 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 310: -#line 2277 "glslang.y" /* yacc.c:1646 */ +#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7493 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 311: -#line 2283 "glslang.y" /* yacc.c:1646 */ +#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7504 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 312: -#line 2289 "glslang.y" /* yacc.c:1646 */ +#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7515 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 313: -#line 2295 "glslang.y" /* yacc.c:1646 */ +#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7526 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 314: -#line 2301 "glslang.y" /* yacc.c:1646 */ +#line 2301 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7537 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 315: -#line 2307 "glslang.y" /* yacc.c:1646 */ +#line 2307 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7548 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 316: -#line 2313 "glslang.y" /* yacc.c:1646 */ +#line 2313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7559 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 317: -#line 2319 "glslang.y" /* yacc.c:1646 */ +#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7570 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 318: -#line 2325 "glslang.y" /* yacc.c:1646 */ +#line 2325 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7581 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 319: -#line 2331 "glslang.y" /* yacc.c:1646 */ +#line 2331 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7592 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 320: -#line 2337 "glslang.y" /* yacc.c:1646 */ +#line 2337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7603 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 321: -#line 2343 "glslang.y" /* yacc.c:1646 */ +#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7614 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 322: -#line 2349 "glslang.y" /* yacc.c:1646 */ +#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7625 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 323: -#line 2355 "glslang.y" /* yacc.c:1646 */ +#line 2355 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7636 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 324: -#line 2361 "glslang.y" /* yacc.c:1646 */ +#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7647 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 325: -#line 2367 "glslang.y" /* yacc.c:1646 */ +#line 2367 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7658 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 326: -#line 2373 "glslang.y" /* yacc.c:1646 */ +#line 2373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7669 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 327: -#line 2379 "glslang.y" /* yacc.c:1646 */ +#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7680 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 328: -#line 2385 "glslang.y" /* yacc.c:1646 */ +#line 2385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7691 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 329: -#line 2391 "glslang.y" /* yacc.c:1646 */ +#line 2391 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7702 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 330: -#line 2397 "glslang.y" /* yacc.c:1646 */ +#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7713 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 331: -#line 2403 "glslang.y" /* yacc.c:1646 */ +#line 2403 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 7722 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 332: -#line 2407 "glslang.y" /* yacc.c:1646 */ +#line 2407 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 7731 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 333: -#line 2411 "glslang.y" /* yacc.c:1646 */ +#line 2411 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 7740 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 334: -#line 2415 "glslang.y" /* yacc.c:1646 */ +#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 7750 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 335: -#line 2420 "glslang.y" /* yacc.c:1646 */ +#line 2420 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 7760 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 336: -#line 2426 "glslang.y" /* yacc.c:1646 */ +#line 2426 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 7770 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 337: -#line 2431 "glslang.y" /* yacc.c:1646 */ +#line 2431 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 7780 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 338: -#line 2436 "glslang.y" /* yacc.c:1646 */ +#line 2436 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 7790 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 339: -#line 2441 "glslang.y" /* yacc.c:1646 */ +#line 2441 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 7800 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 340: -#line 2446 "glslang.y" /* yacc.c:1646 */ +#line 2446 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 7810 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 341: -#line 2451 "glslang.y" /* yacc.c:1646 */ +#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 7820 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 342: -#line 2456 "glslang.y" /* yacc.c:1646 */ +#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 7830 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 343: -#line 2462 "glslang.y" /* yacc.c:1646 */ +#line 2462 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 7840 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 344: -#line 2467 "glslang.y" /* yacc.c:1646 */ +#line 2467 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 7850 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 345: -#line 2472 "glslang.y" /* yacc.c:1646 */ +#line 2472 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 7860 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 346: -#line 2477 "glslang.y" /* yacc.c:1646 */ +#line 2477 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 7870 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 347: -#line 2482 "glslang.y" /* yacc.c:1646 */ +#line 2482 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 7880 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 348: -#line 2487 "glslang.y" /* yacc.c:1646 */ +#line 2487 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 7891 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 349: -#line 2493 "glslang.y" /* yacc.c:1646 */ +#line 2493 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 7902 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 350: -#line 2499 "glslang.y" /* yacc.c:1646 */ +#line 2499 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 7913 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 351: -#line 2505 "glslang.y" /* yacc.c:1646 */ +#line 2505 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 7924 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 352: -#line 2511 "glslang.y" /* yacc.c:1646 */ +#line 2511 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 7935 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 353: -#line 2517 "glslang.y" /* yacc.c:1646 */ +#line 2517 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 7946 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 354: -#line 2523 "glslang.y" /* yacc.c:1646 */ +#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 7957 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 355: -#line 2529 "glslang.y" /* yacc.c:1646 */ +#line 2529 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 7968 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 356: -#line 2535 "glslang.y" /* yacc.c:1646 */ +#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 7979 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 357: -#line 2541 "glslang.y" /* yacc.c:1646 */ +#line 2541 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 7990 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 7990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 358: -#line 2547 "glslang.y" /* yacc.c:1646 */ +#line 2547 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 8001 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 359: -#line 2553 "glslang.y" /* yacc.c:1646 */ +#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 8012 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 360: -#line 2559 "glslang.y" /* yacc.c:1646 */ +#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 8023 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 361: -#line 2565 "glslang.y" /* yacc.c:1646 */ +#line 2565 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 8033 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 362: -#line 2571 "glslang.y" /* yacc.c:1646 */ +#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 8043 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 363: -#line 2576 "glslang.y" /* yacc.c:1646 */ +#line 2576 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 8053 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 364: -#line 2581 "glslang.y" /* yacc.c:1646 */ +#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 8063 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 365: -#line 2586 "glslang.y" /* yacc.c:1646 */ +#line 2586 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 8073 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 366: -#line 2591 "glslang.y" /* yacc.c:1646 */ +#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 8083 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 367: -#line 2596 "glslang.y" /* yacc.c:1646 */ +#line 2596 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 8093 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 368: -#line 2601 "glslang.y" /* yacc.c:1646 */ +#line 2601 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 8103 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 369: -#line 2607 "glslang.y" /* yacc.c:1646 */ +#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 8113 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8113 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 370: -#line 2612 "glslang.y" /* yacc.c:1646 */ +#line 2612 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 8123 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 371: -#line 2617 "glslang.y" /* yacc.c:1646 */ +#line 2617 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 8133 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 372: -#line 2622 "glslang.y" /* yacc.c:1646 */ +#line 2622 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 8143 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8143 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 373: -#line 2627 "glslang.y" /* yacc.c:1646 */ +#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 8153 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 374: -#line 2632 "glslang.y" /* yacc.c:1646 */ +#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 8163 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 375: -#line 2637 "glslang.y" /* yacc.c:1646 */ +#line 2637 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8173 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 376: -#line 2642 "glslang.y" /* yacc.c:1646 */ +#line 2642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8183 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 377: -#line 2648 "glslang.y" /* yacc.c:1646 */ +#line 2648 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 8193 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 378: -#line 2653 "glslang.y" /* yacc.c:1646 */ +#line 2653 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 8203 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 379: -#line 2658 "glslang.y" /* yacc.c:1646 */ +#line 2658 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 8213 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 380: -#line 2663 "glslang.y" /* yacc.c:1646 */ +#line 2663 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 8223 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 381: -#line 2668 "glslang.y" /* yacc.c:1646 */ +#line 2668 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 8233 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 382: -#line 2673 "glslang.y" /* yacc.c:1646 */ +#line 2673 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 8243 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 383: -#line 2678 "glslang.y" /* yacc.c:1646 */ +#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 8253 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 384: -#line 2683 "glslang.y" /* yacc.c:1646 */ +#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 8263 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 385: -#line 2688 "glslang.y" /* yacc.c:1646 */ +#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 8273 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 386: -#line 2693 "glslang.y" /* yacc.c:1646 */ +#line 2693 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8283 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 387: -#line 2698 "glslang.y" /* yacc.c:1646 */ +#line 2698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8293 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 388: -#line 2703 "glslang.y" /* yacc.c:1646 */ +#line 2703 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8303 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 389: -#line 2708 "glslang.y" /* yacc.c:1646 */ +#line 2708 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8313 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 390: -#line 2713 "glslang.y" /* yacc.c:1646 */ +#line 2713 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 8323 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 391: -#line 2718 "glslang.y" /* yacc.c:1646 */ +#line 2718 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 8333 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 392: -#line 2724 "glslang.y" /* yacc.c:1646 */ +#line 2724 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 8343 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 393: -#line 2729 "glslang.y" /* yacc.c:1646 */ +#line 2729 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 8353 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 394: -#line 2734 "glslang.y" /* yacc.c:1646 */ +#line 2734 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 8364 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 395: -#line 2740 "glslang.y" /* yacc.c:1646 */ +#line 2740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 8375 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 396: -#line 2746 "glslang.y" /* yacc.c:1646 */ +#line 2746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 8385 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 397: -#line 2751 "glslang.y" /* yacc.c:1646 */ +#line 2751 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 8395 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 398: -#line 2756 "glslang.y" /* yacc.c:1646 */ +#line 2756 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 8405 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 399: -#line 2761 "glslang.y" /* yacc.c:1646 */ +#line 2761 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 8416 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 400: -#line 2767 "glslang.y" /* yacc.c:1646 */ +#line 2767 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 8426 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 401: -#line 2772 "glslang.y" /* yacc.c:1646 */ +#line 2772 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 8436 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 402: -#line 2777 "glslang.y" /* yacc.c:1646 */ +#line 2777 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 8446 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 403: -#line 2782 "glslang.y" /* yacc.c:1646 */ +#line 2782 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 8457 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 404: -#line 2788 "glslang.y" /* yacc.c:1646 */ +#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 8467 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 405: -#line 2793 "glslang.y" /* yacc.c:1646 */ +#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 8477 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 406: -#line 2798 "glslang.y" /* yacc.c:1646 */ +#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 8487 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 407: -#line 2803 "glslang.y" /* yacc.c:1646 */ +#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 8498 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 408: -#line 2809 "glslang.y" /* yacc.c:1646 */ +#line 2809 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 8508 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 409: -#line 2814 "glslang.y" /* yacc.c:1646 */ +#line 2814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 8518 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 410: -#line 2819 "glslang.y" /* yacc.c:1646 */ +#line 2819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 8528 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 411: -#line 2824 "glslang.y" /* yacc.c:1646 */ +#line 2824 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 8539 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 412: -#line 2830 "glslang.y" /* yacc.c:1646 */ +#line 2830 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 8550 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 413: -#line 2836 "glslang.y" /* yacc.c:1646 */ +#line 2836 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 8561 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 414: -#line 2842 "glslang.y" /* yacc.c:1646 */ +#line 2842 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 8572 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 415: -#line 2848 "glslang.y" /* yacc.c:1646 */ +#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 8582 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 416: -#line 2853 "glslang.y" /* yacc.c:1646 */ +#line 2853 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 8593 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 417: -#line 2859 "glslang.y" /* yacc.c:1646 */ +#line 2859 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 8604 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 418: -#line 2865 "glslang.y" /* yacc.c:1646 */ +#line 2865 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 8615 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 419: -#line 2871 "glslang.y" /* yacc.c:1646 */ +#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 8625 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 420: -#line 2876 "glslang.y" /* yacc.c:1646 */ +#line 2876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 8635 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8635 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 421: -#line 2881 "glslang.y" /* yacc.c:1646 */ +#line 2881 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 8645 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 422: -#line 2886 "glslang.y" /* yacc.c:1646 */ +#line 2886 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 8655 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 423: -#line 2891 "glslang.y" /* yacc.c:1646 */ +#line 2891 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 8665 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 424: -#line 2896 "glslang.y" /* yacc.c:1646 */ +#line 2896 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 8676 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 425: -#line 2902 "glslang.y" /* yacc.c:1646 */ +#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 8686 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 426: -#line 2907 "glslang.y" /* yacc.c:1646 */ +#line 2907 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 8696 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 427: -#line 2912 "glslang.y" /* yacc.c:1646 */ +#line 2912 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 8706 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 428: -#line 2917 "glslang.y" /* yacc.c:1646 */ +#line 2917 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 8717 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 429: -#line 2923 "glslang.y" /* yacc.c:1646 */ +#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 8727 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 430: -#line 2928 "glslang.y" /* yacc.c:1646 */ +#line 2928 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 8737 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 431: -#line 2933 "glslang.y" /* yacc.c:1646 */ +#line 2933 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 8747 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 432: -#line 2938 "glslang.y" /* yacc.c:1646 */ +#line 2938 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 8758 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 433: -#line 2944 "glslang.y" /* yacc.c:1646 */ +#line 2944 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 8768 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 434: -#line 2949 "glslang.y" /* yacc.c:1646 */ +#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 8778 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 435: -#line 2954 "glslang.y" /* yacc.c:1646 */ +#line 2954 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 8788 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 436: -#line 2959 "glslang.y" /* yacc.c:1646 */ +#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 8799 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 437: -#line 2965 "glslang.y" /* yacc.c:1646 */ +#line 2965 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 8809 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 438: -#line 2970 "glslang.y" /* yacc.c:1646 */ +#line 2970 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 8819 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 439: -#line 2975 "glslang.y" /* yacc.c:1646 */ +#line 2975 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 8829 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 440: -#line 2980 "glslang.y" /* yacc.c:1646 */ +#line 2980 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 8840 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 441: -#line 2986 "glslang.y" /* yacc.c:1646 */ +#line 2986 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 8850 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 442: -#line 2991 "glslang.y" /* yacc.c:1646 */ +#line 2991 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 8860 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 443: -#line 2996 "glslang.y" /* yacc.c:1646 */ +#line 2996 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 8870 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 444: -#line 3001 "glslang.y" /* yacc.c:1646 */ +#line 3001 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 8881 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 445: -#line 3007 "glslang.y" /* yacc.c:1646 */ +#line 3007 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 8891 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 446: -#line 3012 "glslang.y" /* yacc.c:1646 */ +#line 3012 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 8901 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 447: -#line 3017 "glslang.y" /* yacc.c:1646 */ +#line 3017 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 8911 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 448: -#line 3022 "glslang.y" /* yacc.c:1646 */ +#line 3022 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 8922 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 449: -#line 3028 "glslang.y" /* yacc.c:1646 */ +#line 3028 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 8932 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 450: -#line 3033 "glslang.y" /* yacc.c:1646 */ +#line 3033 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 8942 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 451: -#line 3038 "glslang.y" /* yacc.c:1646 */ +#line 3038 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 8952 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 452: -#line 3043 "glslang.y" /* yacc.c:1646 */ +#line 3043 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 8963 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 453: -#line 3049 "glslang.y" /* yacc.c:1646 */ +#line 3049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 8973 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 454: -#line 3054 "glslang.y" /* yacc.c:1646 */ +#line 3054 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 8983 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 455: -#line 3059 "glslang.y" /* yacc.c:1646 */ +#line 3059 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 8993 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 8993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 456: -#line 3064 "glslang.y" /* yacc.c:1646 */ +#line 3064 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 9004 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 457: -#line 3070 "glslang.y" /* yacc.c:1646 */ +#line 3070 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 9014 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 458: -#line 3075 "glslang.y" /* yacc.c:1646 */ +#line 3075 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 9024 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 459: -#line 3080 "glslang.y" /* yacc.c:1646 */ +#line 3080 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 9034 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 460: -#line 3085 "glslang.y" /* yacc.c:1646 */ +#line 3085 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 9045 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 461: -#line 3091 "glslang.y" /* yacc.c:1646 */ +#line 3091 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 9055 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 462: -#line 3096 "glslang.y" /* yacc.c:1646 */ +#line 3096 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 9065 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 463: -#line 3101 "glslang.y" /* yacc.c:1646 */ +#line 3101 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 9075 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 464: -#line 3106 "glslang.y" /* yacc.c:1646 */ +#line 3106 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 9086 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 465: -#line 3112 "glslang.y" /* yacc.c:1646 */ +#line 3112 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 9096 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 466: -#line 3117 "glslang.y" /* yacc.c:1646 */ +#line 3117 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 9106 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 467: -#line 3122 "glslang.y" /* yacc.c:1646 */ +#line 3122 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 9116 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 468: -#line 3127 "glslang.y" /* yacc.c:1646 */ +#line 3127 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 9127 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 469: -#line 3133 "glslang.y" /* yacc.c:1646 */ +#line 3133 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 9137 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 470: -#line 3138 "glslang.y" /* yacc.c:1646 */ +#line 3138 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 9147 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 471: -#line 3143 "glslang.y" /* yacc.c:1646 */ +#line 3143 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 9157 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 472: -#line 3148 "glslang.y" /* yacc.c:1646 */ +#line 3148 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 9168 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 473: -#line 3154 "glslang.y" /* yacc.c:1646 */ +#line 3154 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 9178 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 474: -#line 3159 "glslang.y" /* yacc.c:1646 */ +#line 3159 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 9188 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 475: -#line 3164 "glslang.y" /* yacc.c:1646 */ +#line 3164 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 9198 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 476: -#line 3169 "glslang.y" /* yacc.c:1646 */ +#line 3169 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 9209 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 477: -#line 3175 "glslang.y" /* yacc.c:1646 */ +#line 3175 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 9219 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 478: -#line 3180 "glslang.y" /* yacc.c:1646 */ +#line 3180 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 9229 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 479: -#line 3185 "glslang.y" /* yacc.c:1646 */ +#line 3185 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 9239 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 480: -#line 3190 "glslang.y" /* yacc.c:1646 */ +#line 3190 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 9250 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 481: -#line 3196 "glslang.y" /* yacc.c:1646 */ +#line 3196 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 9260 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 482: -#line 3201 "glslang.y" /* yacc.c:1646 */ +#line 3201 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 9270 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 483: -#line 3206 "glslang.y" /* yacc.c:1646 */ +#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 9281 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 484: -#line 3212 "glslang.y" /* yacc.c:1646 */ +#line 3212 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // GL_EXT_YUV_target (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 9292 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 485: -#line 3218 "glslang.y" /* yacc.c:1646 */ +#line 3218 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 9303 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 486: -#line 3224 "glslang.y" /* yacc.c:1646 */ +#line 3224 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 9314 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 487: -#line 3230 "glslang.y" /* yacc.c:1646 */ +#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -9322,11 +9322,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 9326 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 488: -#line 3237 "glslang.y" /* yacc.c:1646 */ +#line 3237 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -9334,98 +9334,98 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 9338 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 489: -#line 3244 "glslang.y" /* yacc.c:1646 */ +#line 3244 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 9349 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 490: -#line 3250 "glslang.y" /* yacc.c:1646 */ +#line 3250 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 9360 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 491: -#line 3256 "glslang.y" /* yacc.c:1646 */ +#line 3256 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 9371 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 492: -#line 3262 "glslang.y" /* yacc.c:1646 */ +#line 3262 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 9382 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 493: -#line 3268 "glslang.y" /* yacc.c:1646 */ +#line 3268 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 9393 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 494: -#line 3274 "glslang.y" /* yacc.c:1646 */ +#line 3274 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).coopmat = true; } -#line 9404 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 495: -#line 3280 "glslang.y" /* yacc.c:1646 */ +#line 3280 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).coopmat = true; } -#line 9415 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 496: -#line 3287 "glslang.y" /* yacc.c:1646 */ +#line 3287 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 9425 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 497: -#line 3292 "glslang.y" /* yacc.c:1646 */ +#line 3292 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // // This is for user defined type names. The lexical phase looked up the @@ -9439,47 +9439,47 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 9443 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 498: -#line 3308 "glslang.y" /* yacc.c:1646 */ +#line 3308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 9453 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 499: -#line 3313 "glslang.y" /* yacc.c:1646 */ +#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 9463 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 500: -#line 3318 "glslang.y" /* yacc.c:1646 */ +#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 9473 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 501: -#line 3326 "glslang.y" /* yacc.c:1646 */ +#line 3326 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 9479 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 502: -#line 3326 "glslang.y" /* yacc.c:1646 */ +#line 3326 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); @@ -9491,17 +9491,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 9495 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 503: -#line 3337 "glslang.y" /* yacc.c:1646 */ +#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 9501 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 504: -#line 3337 "glslang.y" /* yacc.c:1646 */ +#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -9509,19 +9509,19 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 9513 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 505: -#line 3347 "glslang.y" /* yacc.c:1646 */ +#line 3347 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 9521 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 506: -#line 3350 "glslang.y" /* yacc.c:1646 */ +#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -9532,11 +9532,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 9536 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 507: -#line 3363 "glslang.y" /* yacc.c:1646 */ +#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -9559,11 +9559,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 9563 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 508: -#line 3385 "glslang.y" /* yacc.c:1646 */ +#line 3385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -9588,38 +9588,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 9592 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 509: -#line 3412 "glslang.y" /* yacc.c:1646 */ +#line 3412 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9601 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 510: -#line 3416 "glslang.y" /* yacc.c:1646 */ +#line 3416 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9609 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 511: -#line 3422 "glslang.y" /* yacc.c:1646 */ +#line 3422 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 9619 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 512: -#line 3427 "glslang.y" /* yacc.c:1646 */ +#line 3427 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -9628,235 +9628,235 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 9632 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 513: -#line 3438 "glslang.y" /* yacc.c:1646 */ +#line 3438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 9640 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 514: -#line 3442 "glslang.y" /* yacc.c:1646 */ +#line 3442 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 9651 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 515: -#line 3448 "glslang.y" /* yacc.c:1646 */ +#line 3448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 9662 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 516: -#line 3459 "glslang.y" /* yacc.c:1646 */ +#line 3459 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 9670 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 517: -#line 3462 "glslang.y" /* yacc.c:1646 */ +#line 3462 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 9678 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 518: -#line 3469 "glslang.y" /* yacc.c:1646 */ +#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9684 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 519: -#line 3473 "glslang.y" /* yacc.c:1646 */ +#line 3473 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9690 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 520: -#line 3474 "glslang.y" /* yacc.c:1646 */ +#line 3474 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9696 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 521: -#line 3480 "glslang.y" /* yacc.c:1646 */ +#line 3480 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9702 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 522: -#line 3481 "glslang.y" /* yacc.c:1646 */ +#line 3481 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9708 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 523: -#line 3482 "glslang.y" /* yacc.c:1646 */ +#line 3482 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9714 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 524: -#line 3483 "glslang.y" /* yacc.c:1646 */ +#line 3483 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9720 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 525: -#line 3484 "glslang.y" /* yacc.c:1646 */ +#line 3484 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9726 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 526: -#line 3485 "glslang.y" /* yacc.c:1646 */ +#line 3485 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9732 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 527: -#line 3486 "glslang.y" /* yacc.c:1646 */ +#line 3486 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9738 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 528: -#line 3488 "glslang.y" /* yacc.c:1646 */ +#line 3488 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9744 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 529: -#line 3494 "glslang.y" /* yacc.c:1646 */ +#line 3494 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 9754 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 530: -#line 3503 "glslang.y" /* yacc.c:1646 */ +#line 3503 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9760 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 531: -#line 3504 "glslang.y" /* yacc.c:1646 */ +#line 3504 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 9769 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 532: -#line 3508 "glslang.y" /* yacc.c:1646 */ +#line 3508 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 9778 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 533: -#line 3512 "glslang.y" /* yacc.c:1646 */ +#line 3512 "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 9788 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 534: -#line 3520 "glslang.y" /* yacc.c:1646 */ +#line 3520 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9794 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 535: -#line 3521 "glslang.y" /* yacc.c:1646 */ +#line 3521 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9800 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 536: -#line 3525 "glslang.y" /* yacc.c:1646 */ +#line 3525 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.controlFlowNestingLevel; } -#line 9808 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 537: -#line 3528 "glslang.y" /* yacc.c:1646 */ +#line 3528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9817 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 538: -#line 3532 "glslang.y" /* yacc.c:1646 */ +#line 3532 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9827 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 539: -#line 3537 "glslang.y" /* yacc.c:1646 */ +#line 3537 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9838 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 540: -#line 3546 "glslang.y" /* yacc.c:1646 */ +#line 3546 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9846 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 541: -#line 3549 "glslang.y" /* yacc.c:1646 */ +#line 3549 "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 9856 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 542: -#line 3557 "glslang.y" /* yacc.c:1646 */ +#line 3557 "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 || @@ -9865,11 +9865,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 9869 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 543: -#line 3565 "glslang.y" /* yacc.c:1646 */ +#line 3565 "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)) { @@ -9878,76 +9878,76 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 9882 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 544: -#line 3576 "glslang.y" /* yacc.c:1646 */ +#line 3576 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9888 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 545: -#line 3577 "glslang.y" /* yacc.c:1646 */ +#line 3577 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 9894 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9894 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 546: -#line 3581 "glslang.y" /* yacc.c:1646 */ +#line 3581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9902 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 547: -#line 3585 "glslang.y" /* yacc.c:1646 */ +#line 3585 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9911 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 548: -#line 3592 "glslang.y" /* yacc.c:1646 */ +#line 3592 "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 9920 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 549: -#line 3599 "glslang.y" /* yacc.c:1646 */ +#line 3599 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 9929 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 550: -#line 3603 "glslang.y" /* yacc.c:1646 */ +#line 3603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 9938 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 551: -#line 3611 "glslang.y" /* yacc.c:1646 */ +#line 3611 "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 9947 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 552: -#line 3615 "glslang.y" /* yacc.c:1646 */ +#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -9958,28 +9958,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 9962 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 553: -#line 3628 "glslang.y" /* yacc.c:1646 */ +#line 3628 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9970 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 554: -#line 3632 "glslang.y" /* yacc.c:1646 */ +#line 3632 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9979 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 555: -#line 3639 "glslang.y" /* yacc.c:1646 */ +#line 3639 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -9988,11 +9988,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 9992 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 9992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 556: -#line 3647 "glslang.y" /* yacc.c:1646 */ +#line 3647 "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(); @@ -10002,27 +10002,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10006 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 557: -#line 3659 "glslang.y" /* yacc.c:1646 */ +#line 3659 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 10014 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 558: -#line 3662 "glslang.y" /* yacc.c:1646 */ +#line 3662 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10022 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 559: -#line 3668 "glslang.y" /* yacc.c:1646 */ +#line 3668 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10035,11 +10035,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 10039 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 560: -#line 3680 "glslang.y" /* yacc.c:1646 */ +#line 3680 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10049,28 +10049,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 10053 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 561: -#line 3692 "glslang.y" /* yacc.c:1646 */ +#line 3692 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10061 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 562: -#line 3696 "glslang.y" /* yacc.c:1646 */ +#line 3696 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10070 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 563: -#line 3703 "glslang.y" /* yacc.c:1646 */ +#line 3703 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -10079,11 +10079,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10083 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 564: -#line 3711 "glslang.y" /* yacc.c:1646 */ +#line 3711 "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); @@ -10091,21 +10091,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10095 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 565: -#line 3718 "glslang.y" /* yacc.c:1646 */ +#line 3718 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10105 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 566: -#line 3723 "glslang.y" /* yacc.c:1646 */ +#line 3723 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -10117,22 +10117,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10121 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 567: -#line 3734 "glslang.y" /* yacc.c:1646 */ +#line 3734 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10132 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 568: -#line 3740 "glslang.y" /* yacc.c:1646 */ +#line 3740 "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); @@ -10145,81 +10145,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10149 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 569: -#line 3755 "glslang.y" /* yacc.c:1646 */ +#line 3755 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10157 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 570: -#line 3758 "glslang.y" /* yacc.c:1646 */ +#line 3758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10165 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 571: -#line 3764 "glslang.y" /* yacc.c:1646 */ +#line 3764 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10173 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 572: -#line 3767 "glslang.y" /* yacc.c:1646 */ +#line 3767 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = 0; } -#line 10181 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 573: -#line 3773 "glslang.y" /* yacc.c:1646 */ +#line 3773 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 10190 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 574: -#line 3777 "glslang.y" /* yacc.c:1646 */ +#line 3777 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 10199 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 575: -#line 3784 "glslang.y" /* yacc.c:1646 */ +#line 3784 "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 10209 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 576: -#line 3789 "glslang.y" /* yacc.c:1646 */ +#line 3789 "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 10219 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 577: -#line 3794 "glslang.y" /* yacc.c:1646 */ +#line 3794 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -10227,83 +10227,83 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 10231 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 578: -#line 3801 "glslang.y" /* yacc.c:1646 */ +#line 3801 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 10239 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 579: -#line 3804 "glslang.y" /* yacc.c:1646 */ +#line 3804 "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 10248 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 580: -#line 3813 "glslang.y" /* yacc.c:1646 */ +#line 3813 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 10257 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 581: -#line 3817 "glslang.y" /* yacc.c:1646 */ +#line 3817 "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 10268 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 582: -#line 3826 "glslang.y" /* yacc.c:1646 */ +#line 3826 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10276 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 583: -#line 3829 "glslang.y" /* yacc.c:1646 */ +#line 3829 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10284 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 584: -#line 3833 "glslang.y" /* yacc.c:1646 */ +#line 3833 "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 10294 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 585: -#line 3842 "glslang.y" /* yacc.c:1646 */ +#line 3842 "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 10303 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 586: -#line 3846 "glslang.y" /* yacc.c:1646 */ +#line 3846 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -10319,52 +10319,52 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug); (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable); } -#line 10323 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 587: -#line 3865 "glslang.y" /* yacc.c:1646 */ +#line 3865 "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 10332 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 588: -#line 3871 "glslang.y" /* yacc.c:1646 */ +#line 3871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 10340 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 589: -#line 3874 "glslang.y" /* yacc.c:1646 */ +#line 3874 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 10348 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 590: -#line 3879 "glslang.y" /* yacc.c:1646 */ +#line 3879 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 10356 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 591: -#line 3882 "glslang.y" /* yacc.c:1646 */ +#line 3882 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 10364 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; -#line 10368 "glslang_tab.cpp" /* yacc.c:1646 */ +#line 10368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -10592,6 +10592,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); #endif return yyresult; } -#line 3887 "glslang.y" /* yacc.c:1906 */ - +#line 3887 "MachineIndependent/glslang.y" /* yacc.c:1906 */ diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index 31c8f90245..78b72a246b 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -30,8 +30,8 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -#ifndef YY_YY_GLSLANG_TAB_CPP_H_INCLUDED -# define YY_YY_GLSLANG_TAB_CPP_H_INCLUDED +#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED +# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 1 @@ -470,7 +470,7 @@ extern int yydebug; union YYSTYPE { -#line 97 "glslang.y" /* yacc.c:1909 */ +#line 97 "MachineIndependent/glslang.y" /* yacc.c:1909 */ struct { glslang::TSourceLoc loc; @@ -506,7 +506,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 510 "glslang_tab.cpp.h" /* yacc.c:1909 */ +#line 510 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; @@ -518,4 +518,4 @@ typedef union YYSTYPE YYSTYPE; int yyparse (glslang::TParseContext* pParseContext); -#endif /* !YY_YY_GLSLANG_TAB_CPP_H_INCLUDED */ +#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ From 1fde85ab96a55fd03d3dd36149cba1c3d8d2e7fd Mon Sep 17 00:00:00 2001 From: Ez Diy Date: Mon, 10 Aug 2020 22:26:41 +0200 Subject: [PATCH 011/365] GLSLANG_EXPORT for C APIs. Fixes FFI breakage introduced in #2283 --- SPIRV/CInterface/spirv_c_interface.cpp | 10 ++-- glslang/CInterface/glslang_c_interface.cpp | 30 +++++------ glslang/Include/glslang_c_interface.h | 60 ++++++++++++++-------- 3 files changed, 58 insertions(+), 42 deletions(-) diff --git a/SPIRV/CInterface/spirv_c_interface.cpp b/SPIRV/CInterface/spirv_c_interface.cpp index c88b808580..a0790f48f1 100644 --- a/SPIRV/CInterface/spirv_c_interface.cpp +++ b/SPIRV/CInterface/spirv_c_interface.cpp @@ -79,7 +79,7 @@ static EShLanguage c_shader_stage(glslang_stage_t stage) return EShLangCount; } -void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage) +GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage) { spv::SpvBuildLogger logger; glslang::SpvOptions spvOptions; @@ -92,19 +92,19 @@ void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t program->loggerMessages = logger.getAllMessages(); } -size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); } +GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program) { return program->spirv.size(); } -void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out) +GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int* out) { memcpy(out, program->spirv.data(), program->spirv.size() * sizeof(unsigned int)); } -unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program) +GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program) { return program->spirv.data(); } -const char* glslang_program_SPIRV_get_messages(glslang_program_t* program) +GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* program) { return program->loggerMessages.empty() ? nullptr : program->loggerMessages.c_str(); } diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 54283e6f28..2e04f53ace 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -160,9 +160,9 @@ class CallbackIncluder : public glslang::TShader::Includer { void* context; }; -int glslang_initialize_process() { return static_cast(glslang::InitializeProcess()); } +GLSLANG_EXPORT int glslang_initialize_process() { return static_cast(glslang::InitializeProcess()); } -void glslang_finalize_process() { glslang::FinalizeProcess(); } +GLSLANG_EXPORT void glslang_finalize_process() { glslang::FinalizeProcess(); } static EShLanguage c_shader_stage(glslang_stage_t stage) { @@ -320,7 +320,7 @@ static EProfile c_shader_profile(glslang_profile_t profile) return EProfile(); } -glslang_shader_t* glslang_shader_create(const glslang_input_t* input) +GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input) { if (!input || !input->code) { printf("Error creating shader: null input(%p)/input->code\n", input); @@ -344,12 +344,12 @@ glslang_shader_t* glslang_shader_create(const glslang_input_t* input) return shader; } -const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) +GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) { return shader->preprocessedGLSL.c_str(); } -int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input) +GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input) { DirStackFileIncluder Includer; /* TODO: use custom callbacks if they are available in 'i->callbacks' */ @@ -365,7 +365,7 @@ int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* i ); } -int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input) +GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input) { const char* preprocessedCStr = shader->preprocessedGLSL.c_str(); shader->shader->setStrings(&preprocessedCStr, 1); @@ -378,11 +378,11 @@ int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input) ); } -const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); } +GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader) { return shader->shader->getInfoLog(); } -const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); } +GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader) { return shader->shader->getInfoDebugLog(); } -void glslang_shader_delete(glslang_shader_t* shader) +GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader) { if (!shader) return; @@ -391,14 +391,14 @@ void glslang_shader_delete(glslang_shader_t* shader) delete (shader); } -glslang_program_t* glslang_program_create() +GLSLANG_EXPORT glslang_program_t* glslang_program_create() { glslang_program_t* p = new glslang_program_t(); p->program = new glslang::TProgram(); return p; } -void glslang_program_delete(glslang_program_t* program) +GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program) { if (!program) return; @@ -407,22 +407,22 @@ void glslang_program_delete(glslang_program_t* program) delete (program); } -void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader) +GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader) { program->program->addShader(shader->shader); } -int glslang_program_link(glslang_program_t* program, int messages) +GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages) { return (int)program->program->link((EShMessages)messages); } -const char* glslang_program_get_info_log(glslang_program_t* program) +GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program) { return program->program->getInfoLog(); } -const char* glslang_program_get_info_debug_log(glslang_program_t* program) +GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program) { return program->program->getInfoDebugLog(); } diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index 50e95b7e81..4b32e2b85f 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -203,28 +203,44 @@ typedef struct glsl_include_callbacks_s { extern "C" { #endif -int glslang_initialize_process(); -void glslang_finalize_process(); - -glslang_shader_t* glslang_shader_create(const glslang_input_t* input); -void glslang_shader_delete(glslang_shader_t* shader); -int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input); -int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input); -const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader); -const char* glslang_shader_get_info_log(glslang_shader_t* shader); -const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader); - -glslang_program_t* glslang_program_create(); -void glslang_program_delete(glslang_program_t* program); -void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader); -int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t -void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage); -size_t glslang_program_SPIRV_get_size(glslang_program_t* program); -void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*); -unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program); -const char* glslang_program_SPIRV_get_messages(glslang_program_t* program); -const char* glslang_program_get_info_log(glslang_program_t* program); -const char* glslang_program_get_info_debug_log(glslang_program_t* program); +#ifdef GLSLANG_IS_SHARED_LIBRARY + #ifdef _WIN32 + #ifdef GLSLANG_EXPORTING + #define GLSLANG_EXPORT __declspec(dllexport) + #else + #define GLSLANG_EXPORT __declspec(dllimport) + #endif + #elif __GNUC__ >= 4 + #define GLSLANG_EXPORT __attribute__((visibility("default"))) + #endif +#endif // GLSLANG_IS_SHARED_LIBRARY + +#ifndef GLSLANG_EXPORT +#define GLSLANG_EXPORT +#endif + +GLSLANG_EXPORT int glslang_initialize_process(); +GLSLANG_EXPORT void glslang_finalize_process(); + +GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input); +GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader); +GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input); +GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input); +GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader); +GLSLANG_EXPORT const char* glslang_shader_get_info_log(glslang_shader_t* shader); +GLSLANG_EXPORT const char* glslang_shader_get_info_debug_log(glslang_shader_t* shader); + +GLSLANG_EXPORT glslang_program_t* glslang_program_create(); +GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program); +GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader); +GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t +GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage); +GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program); +GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*); +GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program); +GLSLANG_EXPORT const char* glslang_program_SPIRV_get_messages(glslang_program_t* program); +GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program); +GLSLANG_EXPORT const char* glslang_program_get_info_debug_log(glslang_program_t* program); #ifdef __cplusplus } From fe1168750ede8d68caf473f1f96e74211ec15952 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Wed, 12 Aug 2020 09:04:24 -0400 Subject: [PATCH 012/365] Update SPIRV-Tools and SPIRV-Headers known good --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index eca209a91f..f945e0ac32 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "895927bd3f2d653f40cebab55aa6c7eabde30a86" + "commit" : "13a65b1aee425a97b9ca73d81212d99fd2bf9227" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "979924c8bc839e4cb1b69d03d48398551f369ce7" + "commit" : "3fdabd0da2932c276b25b9b4a988ba134eba1aa6" } ] } From 157fe5f8fb9bd09a428fdca0a051fc912f963253 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Wed, 12 Aug 2020 09:04:56 -0400 Subject: [PATCH 013/365] Update test expectations --- Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out | 1 - 1 file changed, 1 deletion(-) diff --git a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out index 26e8624017..e9eaed3fcf 100644 --- a/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out +++ b/Test/baseResults/spv.meshShaderPerViewUserDefined.mesh.out @@ -1,5 +1,4 @@ spv.meshShaderPerViewUserDefined.mesh -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 108 From b58f308ba471f661bf4dddb524fa86b0a850e09f Mon Sep 17 00:00:00 2001 From: johnkslang Date: Tue, 11 Aug 2020 02:27:44 -0600 Subject: [PATCH 014/365] Non-functional: spellings of "destinaton" and "addPairConversion" --- glslang/MachineIndependent/Intermediate.cpp | 10 +++++----- glslang/MachineIndependent/localintermediate.h | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 35b7a127f5..16d9bc413a 100755 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -177,7 +177,7 @@ TIntermTyped* TIntermediate::addBinaryMath(TOperator op, TIntermTyped* left, TIn return nullptr; // Try converting the children's base types to compatible types. - auto children = addConversion(op, left, right); + auto children = addPairConversion(op, left, right); left = std::get<0>(children); right = std::get<1>(children); @@ -887,7 +887,7 @@ TIntermTyped* TIntermediate::addConversion(TBasicType convertTo, TIntermTyped* n // Returns the converted pair of nodes. // Returns when there is no conversion. std::tuple -TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) +TIntermediate::addPairConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1) { if (!isConversionAllowed(op, node0) || !isConversionAllowed(op, node1)) return std::make_tuple(nullptr, nullptr); @@ -940,7 +940,7 @@ TIntermediate::addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* no if (node0->getBasicType() == node1->getBasicType()) return std::make_tuple(node0, node1); - promoteTo = getConversionDestinatonType(node0->getBasicType(), node1->getBasicType(), op); + promoteTo = getConversionDestinationType(node0->getBasicType(), node1->getBasicType(), op); if (std::get<0>(promoteTo) == EbtNumTypes || std::get<1>(promoteTo) == EbtNumTypes) return std::make_tuple(nullptr, nullptr); @@ -1951,7 +1951,7 @@ static TBasicType getCorrespondingUnsignedType(TBasicType type) // integer type corresponding to the type of the operand with signed // integer type. -std::tuple TIntermediate::getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const +std::tuple TIntermediate::getConversionDestinationType(TBasicType type0, TBasicType type1, TOperator op) const { TBasicType res0 = EbtNumTypes; TBasicType res1 = EbtNumTypes; @@ -2490,7 +2490,7 @@ TIntermTyped* TIntermediate::addSelection(TIntermTyped* cond, TIntermTyped* true // // Get compatible types. // - auto children = addConversion(EOpSequence, trueBlock, falseBlock); + auto children = addPairConversion(EOpSequence, trueBlock, falseBlock); trueBlock = std::get<0>(children); falseBlock = std::get<1>(children); diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 90f1891608..4345a092bd 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -425,7 +425,7 @@ class TIntermediate { TIntermSymbol* addSymbol(const TType&, const TSourceLoc&); TIntermSymbol* addSymbol(const TIntermSymbol&); TIntermTyped* addConversion(TOperator, const TType&, TIntermTyped*); - std::tuple addConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1); + std::tuple addPairConversion(TOperator op, TIntermTyped* node0, TIntermTyped* node1); TIntermTyped* addUniShapeConversion(TOperator, const TType&, TIntermTyped*); TIntermTyped* addConversion(TBasicType convertTo, TIntermTyped* node) const; void addBiShapeConversion(TOperator, TIntermTyped*& lhsNode, TIntermTyped*& rhsNode); @@ -914,7 +914,7 @@ class TIntermediate { bool specConstantPropagates(const TIntermTyped&, const TIntermTyped&); void performTextureUpgradeAndSamplerRemovalTransformation(TIntermNode* root); bool isConversionAllowed(TOperator op, TIntermTyped* node) const; - std::tuple getConversionDestinatonType(TBasicType type0, TBasicType type1, TOperator op) const; + std::tuple getConversionDestinationType(TBasicType type0, TBasicType type1, TOperator op) const; // JohnK: I think this function should go away. // This data structure is just a log to pass on to back ends. From bdf9e647f527c134464f405d9b95995482d46e8e Mon Sep 17 00:00:00 2001 From: johnkslang Date: Fri, 14 Aug 2020 00:36:19 -0600 Subject: [PATCH 015/365] Non-functional: Remove reinventing the scalar type, note code issues The scalar type was already the basic type passed in. Also factored out of this the checking of extensions for 8/16-bit stuff. This code seems wrong in several ways, but for now just documenting it. --- glslang/MachineIndependent/Intermediate.cpp | 83 +++++++++------------ 1 file changed, 37 insertions(+), 46 deletions(-) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 16d9bc413a..789d06aab0 100755 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -1040,64 +1040,30 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt // Note: callers are responsible for other aspects of shape, // like vector and matrix sizes. - TBasicType promoteTo; - // GL_EXT_shader_16bit_storage can't do OpConstantComposite with - // 16-bit types, so disable promotion for those types. - bool canPromoteConstant = true; - switch (op) { // // Explicit conversions (unary operations) // case EOpConstructBool: - promoteTo = EbtBool; - break; case EOpConstructFloat: - promoteTo = EbtFloat; - break; case EOpConstructInt: - promoteTo = EbtInt; - break; case EOpConstructUint: - promoteTo = EbtUint; - break; #ifndef GLSLANG_WEB case EOpConstructDouble: - promoteTo = EbtDouble; - break; case EOpConstructFloat16: - promoteTo = EbtFloat16; - canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16); - break; case EOpConstructInt8: - promoteTo = EbtInt8; - canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8); - break; case EOpConstructUint8: - promoteTo = EbtUint8; - canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8); - break; case EOpConstructInt16: - promoteTo = EbtInt16; - canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16); - break; case EOpConstructUint16: - promoteTo = EbtUint16; - canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16); - break; case EOpConstructInt64: - promoteTo = EbtInt64; - break; case EOpConstructUint64: - promoteTo = EbtUint64; break; + #endif + // + // Implicit conversions + // case EOpLogicalNot: case EOpFunctionCall: @@ -1152,9 +1118,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt if (type.getBasicType() == node->getType().getBasicType()) return node; - if (canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op)) - promoteTo = type.getBasicType(); - else + if (! canImplicitlyPromote(node->getBasicType(), type.getBasicType(), op)) return nullptr; break; @@ -1164,9 +1128,7 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt case EOpLeftShiftAssign: case EOpRightShiftAssign: { - if (getSource() == EShSourceHlsl && node->getType().getBasicType() == EbtBool) - promoteTo = type.getBasicType(); - else { + if (!(getSource() == EShSourceHlsl && node->getType().getBasicType() == EbtBool)) { if (isTypeInt(type.getBasicType()) && isTypeInt(node->getBasicType())) return node; else @@ -1184,13 +1146,42 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt return nullptr; } + bool canPromoteConstant = true; +#ifndef GLSLANG_WEB + // GL_EXT_shader_16bit_storage can't do OpConstantComposite with + // 16-bit types, so disable promotion for those types. + // Many issues with this, from JohnK: + // - this isn't really right to discuss SPIR-V here + // - this could easily be entirely about scalars, so is overstepping + // - we should be looking at what the shader asked for, and saying whether or + // not it can be done, in the parser, by calling requireExtensions(), not + // changing language sementics on the fly by asking what extensions are in use + // - at the time of this writing (14-Aug-2020), no test results are changed by this. + switch (op) { + case EOpConstructFloat16: + canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16); + break; + case EOpConstructInt8: + case EOpConstructUint8: + canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8); + break; + case EOpConstructInt16: + case EOpConstructUint16: + canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16); + break; + } +#endif + if (canPromoteConstant && node->getAsConstantUnion()) - return promoteConstantUnion(promoteTo, node->getAsConstantUnion()); + return promoteConstantUnion(type.getBasicType(), node->getAsConstantUnion()); // // Add a new newNode for the conversion. // - TIntermTyped* newNode = createConversion(promoteTo, node); + TIntermTyped* newNode = createConversion(type.getBasicType(), node); return newNode; } From 7d66a5d4be87d08a9c96daf15d8afd996a484c1d Mon Sep 17 00:00:00 2001 From: johnkslang Date: Fri, 14 Aug 2020 02:16:19 -0600 Subject: [PATCH 016/365] Non-functional (almost): Refactor when 'extensionRequested' is called. This detangles incorrect conflation of HLSL with GLSL extensions, defers asking expensive questions until it's time to ask, and removes some dead code. --- glslang/MachineIndependent/Intermediate.cpp | 97 ++++++++------------- 1 file changed, 35 insertions(+), 62 deletions(-) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 789d06aab0..0504ac8707 100755 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -819,22 +819,25 @@ TIntermTyped* TIntermediate::createConversion(TBasicType convertTo, TIntermTyped node->getBasicType() == EbtFloat || node->getBasicType() == EbtDouble); - if (! getArithemeticInt8Enabled()) { - if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) || - ((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes)) + if (((convertTo == EbtInt8 || convertTo == EbtUint8) && ! convertFromIntTypes) || + ((node->getBasicType() == EbtInt8 || node->getBasicType() == EbtUint8) && ! convertToIntTypes)) { + if (! getArithemeticInt8Enabled()) { return nullptr; + } } - if (! getArithemeticInt16Enabled()) { - if (((convertTo == EbtInt16 || convertTo == EbtUint16) && ! convertFromIntTypes) || - ((node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16) && ! convertToIntTypes)) + if (((convertTo == EbtInt16 || convertTo == EbtUint16) && ! convertFromIntTypes) || + ((node->getBasicType() == EbtInt16 || node->getBasicType() == EbtUint16) && ! convertToIntTypes)) { + if (! getArithemeticInt16Enabled()) { return nullptr; + } } - if (! getArithemeticFloat16Enabled()) { - if ((convertTo == EbtFloat16 && ! convertFromFloatTypes) || - (node->getBasicType() == EbtFloat16 && ! convertToFloatTypes)) + if ((convertTo == EbtFloat16 && ! convertFromFloatTypes) || + (node->getBasicType() == EbtFloat16 && ! convertToFloatTypes)) { + if (! getArithemeticFloat16Enabled()) { return nullptr; + } } #endif @@ -1650,55 +1653,38 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat } } - bool explicitTypesEnabled = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int32) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int64) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float32) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float64); - - if (explicitTypesEnabled) { - // integral promotions - if (isIntegralPromotion(from, to)) { - return true; - } - - // floating-point promotions - if (isFPPromotion(from, to)) { - return true; - } - - // integral conversions - if (isIntegralConversion(from, to)) { + if (getSource() == EShSourceHlsl) { + // HLSL + if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat)) return true; - } - - // floating-point conversions - if (isFPConversion(from, to)) { - return true; - } - - // floating-integral conversions - if (isFPIntegralConversion(from, to)) { - return true; - } - - // hlsl supported conversions - if (getSource() == EShSourceHlsl) { - if (from == EbtBool && (to == EbtInt || to == EbtUint || to == EbtFloat)) + } else { + // GLSL + if (isIntegralPromotion(from, to) || + isFPPromotion(from, to) || + isIntegralConversion(from, to) || + isFPConversion(from, to) || + isFPIntegralConversion(from, to)) { + + if (extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int32) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int64) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float32) || + extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float64)) { return true; + } } - } else if (isEsProfile()) { + } + + if (isEsProfile()) { switch (to) { case EbtFloat: switch (from) { case EbtInt: case EbtUint: return extensionRequested(E_GL_EXT_shader_implicit_conversions); - case EbtFloat: - return true; default: return false; } @@ -1706,8 +1692,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat switch (from) { case EbtInt: return extensionRequested(E_GL_EXT_shader_implicit_conversions); - case EbtUint: - return true; default: return false; } @@ -1723,7 +1707,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtInt64: case EbtUint64: case EbtFloat: - case EbtDouble: return version >= 400 || extensionRequested(E_GL_ARB_gpu_shader_fp64); case EbtInt16: case EbtUint16: @@ -1739,7 +1722,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat switch (from) { case EbtInt: case EbtUint: - case EbtFloat: return true; case EbtBool: return getSource() == EShSourceHlsl; @@ -1756,8 +1738,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat switch (from) { case EbtInt: return version >= 400 || getSource() == EShSourceHlsl; - case EbtUint: - return true; case EbtBool: return getSource() == EShSourceHlsl; case EbtInt16: @@ -1768,8 +1748,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat } case EbtInt: switch (from) { - case EbtInt: - return true; case EbtBool: return getSource() == EShSourceHlsl; case EbtInt16: @@ -1782,7 +1760,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtInt: case EbtUint: case EbtInt64: - case EbtUint64: return true; case EbtInt16: case EbtUint16: @@ -1793,7 +1770,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtInt64: switch (from) { case EbtInt: - case EbtInt64: return true; case EbtInt16: return extensionRequested(E_GL_AMD_gpu_shader_int16); @@ -1805,8 +1781,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtInt16: case EbtUint16: return extensionRequested(E_GL_AMD_gpu_shader_int16); - case EbtFloat16: - return extensionRequested(E_GL_AMD_gpu_shader_half_float); default: break; } @@ -1814,7 +1788,6 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtUint16: switch (from) { case EbtInt16: - case EbtUint16: return extensionRequested(E_GL_AMD_gpu_shader_int16); default: break; From 01384725c245a003e08233de00f259ee91a1b82f Mon Sep 17 00:00:00 2001 From: johnkslang Date: Fri, 14 Aug 2020 08:40:06 -0600 Subject: [PATCH 017/365] Fix #2366, fix #2358, correctly separate out numerical feature checking We need separate concepts for - total set of extensions ever enabled, for the back end - current state of extensions, for parsing - the set of features currently enabled for building the AST --- SPIRV/GlslangToSpv.cpp | 2 +- Test/baseResults/versionsErrors.frag.out | 2 - glslang/MachineIndependent/Intermediate.cpp | 62 ++++++++-------- glslang/MachineIndependent/ParseHelper.cpp | 2 + glslang/MachineIndependent/Versions.cpp | 37 +++++++++- glslang/MachineIndependent/intermOut.cpp | 2 +- .../MachineIndependent/localintermediate.h | 74 ++++++++++--------- glslang/MachineIndependent/parseVersions.h | 2 +- 8 files changed, 109 insertions(+), 74 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 5a39c1e315..c85541603f 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1444,7 +1444,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, // Add the source extensions const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions(); for (auto it = sourceExtensions.begin(); it != sourceExtensions.end(); ++it) - builder.addSourceExtension(it->first.c_str()); + builder.addSourceExtension(it->c_str()); // Add the top-level modes for this shader. diff --git a/Test/baseResults/versionsErrors.frag.out b/Test/baseResults/versionsErrors.frag.out index b07266954f..dbeb941ab7 100644 --- a/Test/baseResults/versionsErrors.frag.out +++ b/Test/baseResults/versionsErrors.frag.out @@ -7,7 +7,6 @@ ERROR: 4 compilation errors. No code generated. Shader version: 110 -Requested GL_ARB_texture_rectangle ERROR: node is still EOpNull! 0:42 Function Definition: main( ( global void) 0:42 Function Parameters: @@ -28,7 +27,6 @@ Linked fragment stage: Shader version: 110 -Requested GL_ARB_texture_rectangle ERROR: node is still EOpNull! 0:42 Function Definition: main( ( global void) 0:42 Function Parameters: diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 0504ac8707..17e3fbc2b5 100755 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -1162,18 +1162,18 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt // - at the time of this writing (14-Aug-2020), no test results are changed by this. switch (op) { case EOpConstructFloat16: - canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16); + canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16); break; case EOpConstructInt8: case EOpConstructUint8: - canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8); + canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8); break; case EOpConstructInt16: case EOpConstructUint16: - canPromoteConstant = extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16); + canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16); break; } #endif @@ -1665,14 +1665,14 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat isFPConversion(from, to) || isFPIntegralConversion(from, to)) { - if (extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int32) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int64) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float32) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float64)) { + if (numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int32) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int64) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float32) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float64)) { return true; } } @@ -1684,14 +1684,14 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat switch (from) { case EbtInt: case EbtUint: - return extensionRequested(E_GL_EXT_shader_implicit_conversions); + return numericFeatures.contains(TNumericFeatures::shader_implicit_conversions); default: return false; } case EbtUint: switch (from) { case EbtInt: - return extensionRequested(E_GL_EXT_shader_implicit_conversions); + return numericFeatures.contains(TNumericFeatures::shader_implicit_conversions); default: return false; } @@ -1707,14 +1707,14 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtInt64: case EbtUint64: case EbtFloat: - return version >= 400 || extensionRequested(E_GL_ARB_gpu_shader_fp64); + return version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64); case EbtInt16: case EbtUint16: - return (version >= 400 || extensionRequested(E_GL_ARB_gpu_shader_fp64)) && - extensionRequested(E_GL_AMD_gpu_shader_int16); + return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) && + numericFeatures.contains(TNumericFeatures::gpu_shader_int16); case EbtFloat16: - return (version >= 400 || extensionRequested(E_GL_ARB_gpu_shader_fp64)) && - extensionRequested(E_GL_AMD_gpu_shader_half_float); + return (version >= 400 || numericFeatures.contains(TNumericFeatures::gpu_shader_fp64)) && + numericFeatures.contains(TNumericFeatures::gpu_shader_half_float); default: return false; } @@ -1727,10 +1727,10 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat return getSource() == EShSourceHlsl; case EbtInt16: case EbtUint16: - return extensionRequested(E_GL_AMD_gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); case EbtFloat16: - return - extensionRequested(E_GL_AMD_gpu_shader_half_float) || getSource() == EShSourceHlsl; + return numericFeatures.contains(TNumericFeatures::gpu_shader_half_float) || + getSource() == EShSourceHlsl; default: return false; } @@ -1742,7 +1742,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat return getSource() == EShSourceHlsl; case EbtInt16: case EbtUint16: - return extensionRequested(E_GL_AMD_gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); default: return false; } @@ -1751,7 +1751,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtBool: return getSource() == EShSourceHlsl; case EbtInt16: - return extensionRequested(E_GL_AMD_gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); default: return false; } @@ -1763,7 +1763,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat return true; case EbtInt16: case EbtUint16: - return extensionRequested(E_GL_AMD_gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); default: return false; } @@ -1772,7 +1772,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtInt: return true; case EbtInt16: - return extensionRequested(E_GL_AMD_gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); default: return false; } @@ -1780,7 +1780,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat switch (from) { case EbtInt16: case EbtUint16: - return extensionRequested(E_GL_AMD_gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); default: break; } @@ -1788,7 +1788,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtUint16: switch (from) { case EbtInt16: - return extensionRequested(E_GL_AMD_gpu_shader_int16); + return numericFeatures.contains(TNumericFeatures::gpu_shader_int16); default: break; } @@ -1921,7 +1921,7 @@ std::tuple TIntermediate::getConversionDestinationType(T TBasicType res1 = EbtNumTypes; if ((isEsProfile() && - (version < 310 || !extensionRequested(E_GL_EXT_shader_implicit_conversions))) || + (version < 310 || !numericFeatures.contains(TNumericFeatures::shader_implicit_conversions))) || version == 110) return std::make_tuple(res0, res1); diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 2c4b0869e0..045c8f3ee9 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -7316,6 +7316,8 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T if (!node->getType().isCoopMat()) { if (type.getBasicType() != node->getType().getBasicType()) { node = intermediate.addConversion(type.getBasicType(), node); + if (node == nullptr) + return nullptr; } node = intermediate.setAggregateOperator(node, EOpConstructCooperativeMatrix, type, node->getLoc()); } else { diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index b31102413e..7469ef1581 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -762,7 +762,8 @@ bool TParseVersions::checkExtensionsRequested(const TSourceLoc& loc, int numExte // Use when there are no profile/version to check, it's just an error if one of the // extensions is not present. // -void TParseVersions::requireExtensions(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc) +void TParseVersions::requireExtensions(const TSourceLoc& loc, int numExtensions, const char* const extensions[], + const char* featureDesc) { if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc)) return; @@ -781,7 +782,8 @@ void TParseVersions::requireExtensions(const TSourceLoc& loc, int numExtensions, // Use by preprocessor when there are no profile/version to check, it's just an error if one of the // extensions is not present. // -void TParseVersions::ppRequireExtensions(const TSourceLoc& loc, int numExtensions, const char* const extensions[], const char* featureDesc) +void TParseVersions::ppRequireExtensions(const TSourceLoc& loc, int numExtensions, const char* const extensions[], + const char* featureDesc) { if (checkExtensionsRequested(loc, numExtensions, extensions, featureDesc)) return; @@ -847,6 +849,7 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co error(getCurrentLoc(), "behavior not supported:", "#extension", behaviorString); return; } + bool on = behavior != EBhDisable; // check if extension is used with correct shader stage checkExtensionStage(getCurrentLoc(), extension); @@ -916,6 +919,32 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_int64", behaviorString); else if (strcmp(extension, "GL_EXT_shader_subgroup_extended_types_float16") == 0) updateExtensionBehavior(line, "GL_EXT_shader_explicit_arithmetic_types_float16", behaviorString); + + // see if we need to update the numeric features + else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types, on); + else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int8") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int8, on); + else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int16") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int16, on); + else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int32") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int32, on); + else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_int64") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_int64, on); + else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float16") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float16, on); + else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float32") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float32, on); + else if (strcmp(extension, "GL_EXT_shader_explicit_arithmetic_types_float64") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_explicit_arithmetic_types_float64, on); + else if (strcmp(extension, "GL_EXT_shader_implicit_conversions") == 0) + intermediate.updateNumericFeature(TNumericFeatures::shader_implicit_conversions, on); + else if (strcmp(extension, "GL_ARB_gpu_shader_fp64") == 0) + intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_fp64, on); + else if (strcmp(extension, "GL_AMD_gpu_shader_int16") == 0) + intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_int16, on); + else if (strcmp(extension, "GL_AMD_gpu_shader_half_float") == 0) + intermediate.updateNumericFeature(TNumericFeatures::gpu_shader_half_float, on); } void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBehavior behavior) @@ -951,8 +980,8 @@ void TParseVersions::updateExtensionBehavior(const char* extension, TExtensionBe } else { if (iter->second == EBhDisablePartial) warn(getCurrentLoc(), "extension is only partially supported:", "#extension", extension); - if (behavior == EBhEnable || behavior == EBhRequire || behavior == EBhDisable) - intermediate.updateRequestedExtension(extension, behavior); + if (behavior != EBhDisable) + intermediate.addRequestedExtension(extension); iter->second = behavior; } } diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index 1b409df7b4..f23a7058ab 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -1466,7 +1466,7 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) infoSink.debug << "Shader version: " << version << "\n"; if (requestedExtensions.size() > 0) { for (auto extIt = requestedExtensions.begin(); extIt != requestedExtensions.end(); ++extIt) - infoSink.debug << "Requested " << extIt->first << "\n"; + infoSink.debug << "Requested " << *extIt << "\n"; } if (xfbMode) diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 4345a092bd..3cdc1f10cf 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -233,6 +233,31 @@ class TIdMaps { TMap maps[EsiCount]; }; +class TNumericFeatures { +public: + TNumericFeatures() : features(0) { } + TNumericFeatures(const TNumericFeatures&) = delete; + TNumericFeatures& operator=(const TNumericFeatures&) = delete; + typedef enum : unsigned int { + shader_explicit_arithmetic_types = 1 << 0, + shader_explicit_arithmetic_types_int8 = 1 << 1, + shader_explicit_arithmetic_types_int16 = 1 << 2, + shader_explicit_arithmetic_types_int32 = 1 << 3, + shader_explicit_arithmetic_types_int64 = 1 << 4, + shader_explicit_arithmetic_types_float16 = 1 << 5, + shader_explicit_arithmetic_types_float32 = 1 << 6, + shader_explicit_arithmetic_types_float64 = 1 << 7, + shader_implicit_conversions = 1 << 8, + gpu_shader_fp64 = 1 << 9, + gpu_shader_int16 = 1 << 10, + gpu_shader_half_float = 1 << 11, + } feature; + void insert(feature f) { features |= f; } + void erase(feature f) { features &= ~f; } + bool contains(feature f) const { return (features & f) != 0; } +private: + unsigned int features; +}; // // Set of helper functions to help parse and build the tree. @@ -371,15 +396,8 @@ class TIntermediate { } const SpvVersion& getSpv() const { return spvVersion; } EShLanguage getStage() const { return language; } - void updateRequestedExtension(const char* extension, TExtensionBehavior behavior) { - if(requestedExtensions.find(extension) != requestedExtensions.end()) { - requestedExtensions[extension] = behavior; - } else { - requestedExtensions.insert(std::make_pair(extension, behavior)); - } - } - - const std::map& getRequestedExtensions() const { return requestedExtensions; } + void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); } + const std::set& getRequestedExtensions() const { return requestedExtensions; } void setTreeRoot(TIntermNode* r) { treeRoot = r; } TIntermNode* getTreeRoot() const { return treeRoot; } @@ -867,22 +885,25 @@ class TIntermediate { bool getArithemeticInt8Enabled() const { return false; } bool getArithemeticInt16Enabled() const { return false; } bool getArithemeticFloat16Enabled() const { return false; } + void updateNumericFeature(TNumericFeatures::feature f, bool on) { } #else bool getArithemeticInt8Enabled() const { - return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int8); + return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int8); } bool getArithemeticInt16Enabled() const { - return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_AMD_gpu_shader_int16) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_int16); + return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || + numericFeatures.contains(TNumericFeatures::gpu_shader_int16) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16); } bool getArithemeticFloat16Enabled() const { - return extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types) || - extensionRequested(E_GL_AMD_gpu_shader_half_float) || - extensionRequested(E_GL_EXT_shader_explicit_arithmetic_types_float16); + return numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || + numericFeatures.contains(TNumericFeatures::gpu_shader_half_float) || + numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_float16); } + void updateNumericFeature(TNumericFeatures::feature f, bool on) + { on ? numericFeatures.insert(f) : numericFeatures.erase(f); } #endif protected: @@ -916,22 +937,6 @@ class TIntermediate { bool isConversionAllowed(TOperator op, TIntermTyped* node) const; std::tuple getConversionDestinationType(TBasicType type0, TBasicType type1, TOperator op) const; - // JohnK: I think this function should go away. - // This data structure is just a log to pass on to back ends. - // Versioning and extensions are handled in Version.cpp, with a rich - // set of functions for querying stages, versions, extension enable/disabled, etc. -#ifdef GLSLANG_WEB - bool extensionRequested(const char *extension) const { return false; } -#else - bool extensionRequested(const char *extension) const { - auto it = requestedExtensions.find(extension); - if (it != requestedExtensions.end()) { - return (it->second == EBhDisable) ? false : true; - } - return false; - } -#endif - static const char* getResourceName(TResourceType); const EShLanguage language; // stage, known at construction time @@ -949,7 +954,7 @@ class TIntermediate { #endif SpvVersion spvVersion; TIntermNode* treeRoot; - std::map requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them + std::set requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them TBuiltInResource resources; int numEntryPoints; int numErrors; @@ -1020,6 +1025,7 @@ class TIntermediate { std::unordered_map uniformLocationOverrides; int uniformLocationBase; + TNumericFeatures numericFeatures; #endif std::unordered_set usedConstantId; // specialization constant ids used diff --git a/glslang/MachineIndependent/parseVersions.h b/glslang/MachineIndependent/parseVersions.h index 957aaefd1a..7248354e4b 100644 --- a/glslang/MachineIndependent/parseVersions.h +++ b/glslang/MachineIndependent/parseVersions.h @@ -229,7 +229,7 @@ class TParseVersions { TIntermediate& intermediate; // helper for making and hooking up pieces of the parse tree protected: - TMap extensionBehavior; // for each extension string, what its current behavior is set to + TMap extensionBehavior; // for each extension string, what its current behavior is TMap extensionMinSpv; // for each extension string, store minimum spirv required EShMessages messages; // errors/warnings/rule-sets int numErrors; // number of compile-time errors encountered From 89cd45cc6ee1a5e0cc51bd2577f1e9e730020735 Mon Sep 17 00:00:00 2001 From: Rafael Marinheiro Date: Fri, 14 Aug 2020 22:00:58 +0100 Subject: [PATCH 018/365] Use --test-root to pass files to Bazel tests. The current implementation makes tests fail when it is imported from a different Bazel workspace. We fix that by using the --test-root flag to pass the rootpath to the tests. --- BUILD.bazel | 47 ++++++++++++++++++----------------------------- 1 file changed, 18 insertions(+), 29 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index bfb77974a6..82c4f66223 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -51,7 +51,10 @@ py_binary( genrule( name = "gen_build_info_h", - srcs = ["CHANGES.md", "build_info.h.tmpl"], + srcs = [ + "CHANGES.md", + "build_info.h.tmpl", + ], outs = ["glslang/build_info.h"], cmd = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)", tools = [":build_info"], @@ -92,10 +95,8 @@ cc_library( ) + [ "OGLCompilersDLL/InitializeDll.cpp", ] + select({ - "@bazel_tools//src/conditions:windows": - ["glslang/OSDependent/Windows/ossource.cpp"], - "//conditions:default": - ["glslang/OSDependent/Unix/ossource.cpp"], + "@bazel_tools//src/conditions:windows": ["glslang/OSDependent/Windows/ossource.cpp"], + "//conditions:default": ["glslang/OSDependent/Unix/ossource.cpp"], }), hdrs = glob([ "glslang/HLSL/*.h", @@ -118,7 +119,10 @@ cc_library( ], linkopts = select({ "@bazel_tools//src/conditions:windows": [""], - "//conditions:default": ["-lm", "-lpthread"], + "//conditions:default": [ + "-lm", + "-lpthread", + ], }), linkstatic = 1, ) @@ -224,18 +228,6 @@ cc_binary( ], ) -filegroup( - name = "test_files", - srcs = glob( - ["Test/**"], - exclude = [ - "Test/bump", - "Test/glslangValidator", - "Test/runtests", - ], - ), -) - cc_library( name = "glslang_test_lib", testonly = 1, @@ -249,16 +241,9 @@ cc_library( "gtests/main.cpp", ], copts = COMMON_COPTS, - data = [":test_files"], - defines = select({ - # Unfortunately we can't use $(location) in cc_library at the moment. - # See https://github.com/bazelbuild/bazel/issues/1023 - # So we'll specify the path manually. - "@bazel_tools//src/conditions:windows": - ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"], - "//conditions:default": - ["GLSLANG_TEST_DIRECTORY='\"Test\"'"], - }), + defines = [ + "GLSLANG_TEST_DIRECTORY='\"USE_FLAG_INSTEAD\"'", + ], linkstatic = 1, deps = [ ":SPIRV", @@ -281,9 +266,13 @@ GLSLANG_TESTS = glob( [cc_test( name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test", srcs = [test_file], + args = [ + "--test-root", + "$(rootpath Test)", + ], copts = COMMON_COPTS, data = [ - ":test_files", + "Test", ], deps = [ ":SPIRV", From 758b30727efce459aea368ac21b73ad10ebe9565 Mon Sep 17 00:00:00 2001 From: johnkslang Date: Fri, 14 Aug 2020 19:39:28 -0600 Subject: [PATCH 019/365] Build: fix a build warning --- glslang/MachineIndependent/Intermediate.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 17e3fbc2b5..b8c220d781 100755 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -1175,6 +1175,8 @@ TIntermTyped* TIntermediate::addConversion(TOperator op, const TType& type, TInt canPromoteConstant = numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types) || numericFeatures.contains(TNumericFeatures::shader_explicit_arithmetic_types_int16); break; + default: + break; } #endif From b357badc02d09978be8b2d708084da6a6eff6c5b Mon Sep 17 00:00:00 2001 From: Julius Ikkala Date: Fri, 21 Aug 2020 18:44:06 +0300 Subject: [PATCH 020/365] Obey ENABLE_PCH CMake option --- CMakeLists.txt | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index fd9335ee7d..18f11f78ef 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -297,14 +297,16 @@ endfunction() # glslang_pch() adds precompiled header rules to for the pre-compiled # header file . As target_precompile_headers() was added in CMake 3.16, # this is a no-op if called on earlier versions of CMake. -if(NOT CMAKE_VERSION VERSION_LESS "3.16") +if(NOT CMAKE_VERSION VERSION_LESS "3.16" AND ENABLE_PCH) function(glslang_pch target pch) target_precompile_headers(${target} PRIVATE ${pch}) endfunction() else() function(glslang_pch target pch) endfunction() - message("Your CMake version is ${CMAKE_VERSION}. Update to at least 3.16 to enable precompiled headers to speed up incremental builds") + if(ENABLE_PCH) + message("Your CMake version is ${CMAKE_VERSION}. Update to at least 3.16 to enable precompiled headers to speed up incremental builds") + endif() endif() if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External) From 983698bb34ecfbf8a172a59ee4edc2ab7bdfa3b8 Mon Sep 17 00:00:00 2001 From: johnkslang Date: Sun, 23 Aug 2020 01:31:49 -0600 Subject: [PATCH 021/365] Revert "Merge pull request #2371 from RafaelMarinheiro/master" This reverts commit f257e0ea6b9aeab2dc7af3207ac6d29d2bbc01d0, reversing changes made to 8f0c6bd7732331186b66118d4613cd0dc7076de4. --- BUILD.bazel | 47 +++++++++++++++++++++++++++++------------------ 1 file changed, 29 insertions(+), 18 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index 82c4f66223..bfb77974a6 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -51,10 +51,7 @@ py_binary( genrule( name = "gen_build_info_h", - srcs = [ - "CHANGES.md", - "build_info.h.tmpl", - ], + srcs = ["CHANGES.md", "build_info.h.tmpl"], outs = ["glslang/build_info.h"], cmd = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)", tools = [":build_info"], @@ -95,8 +92,10 @@ cc_library( ) + [ "OGLCompilersDLL/InitializeDll.cpp", ] + select({ - "@bazel_tools//src/conditions:windows": ["glslang/OSDependent/Windows/ossource.cpp"], - "//conditions:default": ["glslang/OSDependent/Unix/ossource.cpp"], + "@bazel_tools//src/conditions:windows": + ["glslang/OSDependent/Windows/ossource.cpp"], + "//conditions:default": + ["glslang/OSDependent/Unix/ossource.cpp"], }), hdrs = glob([ "glslang/HLSL/*.h", @@ -119,10 +118,7 @@ cc_library( ], linkopts = select({ "@bazel_tools//src/conditions:windows": [""], - "//conditions:default": [ - "-lm", - "-lpthread", - ], + "//conditions:default": ["-lm", "-lpthread"], }), linkstatic = 1, ) @@ -228,6 +224,18 @@ cc_binary( ], ) +filegroup( + name = "test_files", + srcs = glob( + ["Test/**"], + exclude = [ + "Test/bump", + "Test/glslangValidator", + "Test/runtests", + ], + ), +) + cc_library( name = "glslang_test_lib", testonly = 1, @@ -241,9 +249,16 @@ cc_library( "gtests/main.cpp", ], copts = COMMON_COPTS, - defines = [ - "GLSLANG_TEST_DIRECTORY='\"USE_FLAG_INSTEAD\"'", - ], + data = [":test_files"], + defines = select({ + # Unfortunately we can't use $(location) in cc_library at the moment. + # See https://github.com/bazelbuild/bazel/issues/1023 + # So we'll specify the path manually. + "@bazel_tools//src/conditions:windows": + ["GLSLANG_TEST_DIRECTORY='\"../../../../../Test\"'"], + "//conditions:default": + ["GLSLANG_TEST_DIRECTORY='\"Test\"'"], + }), linkstatic = 1, deps = [ ":SPIRV", @@ -266,13 +281,9 @@ GLSLANG_TESTS = glob( [cc_test( name = test_file.replace("gtests/", "").replace(".FromFile.cpp", "") + "_test", srcs = [test_file], - args = [ - "--test-root", - "$(rootpath Test)", - ], copts = COMMON_COPTS, data = [ - "Test", + ":test_files", ], deps = [ ":SPIRV", From bb52b5e452887d4b1bd93d411ca26ab01ae7eb37 Mon Sep 17 00:00:00 2001 From: Jamie Madill Date: Wed, 26 Aug 2020 00:54:50 -0400 Subject: [PATCH 022/365] Suppress two override suggestion warnings. We're turning these on in ANGLE and want to keep the build clean. --- BUILD.gn | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 9525b5d203..9a6c1bc283 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -59,13 +59,13 @@ action("glslang_build_info") { script, template_file, ] - outputs = [ - out_file - ] + outputs = [ out_file ] args = [ rebase_path(src_dir, root_build_dir), - "-i", rebase_path(template_file, root_build_dir), - "-o", rebase_path(out_file, root_build_dir), + "-i", + rebase_path(template_file, root_build_dir), + "-o", + rebase_path(out_file, root_build_dir), ] } @@ -228,10 +228,12 @@ template("glslang_sources_common") { "-Wno-ignored-qualifiers", "-Wno-implicit-fallthrough", "-Wno-inconsistent-missing-override", - "-Wno-sign-compare", - "-Wno-unused-variable", "-Wno-missing-field-initializers", "-Wno-newline-eof", + "-Wno-sign-compare", + "-Wno-suggest-destructor-override", + "-Wno-suggest-override", + "-Wno-unused-variable", ] } if (is_win && !is_clang) { @@ -291,9 +293,9 @@ executable("glslang_validator") { } defines = [ "ENABLE_OPT=1" ] deps = [ + ":glslang_build_info", ":glslang_default_resource_limits_sources", ":glslang_sources", - ":glslang_build_info", ] public_configs = [ ":glslang_hlsl" ] From 864cd8c63ee47e49fbd031baa00a12f3209b1e9d Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Wed, 2 Sep 2020 23:03:03 +0800 Subject: [PATCH 023/365] Parser: Fix wrong names of extension macros The names of some extension macros are wrong because of coding typos. --- glslang/MachineIndependent/Versions.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 7469ef1581..896fd5ae20 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -474,11 +474,11 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_KHR_shader_subgroup_clustered 1\n" "#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" - "#define E_GL_EXT_ray_tracing 1\n" - "#define E_GL_EXT_ray_query 1\n" - "#define E_GL_EXT_ray_flags_primitive_culling 1\n" + "#define GL_EXT_shader_atomic_int64 1\n" + "#define GL_EXT_shader_realtime_clock 1\n" + "#define GL_EXT_ray_tracing 1\n" + "#define GL_EXT_ray_query 1\n" + "#define GL_EXT_ray_flags_primitive_culling 1\n" "#define GL_AMD_shader_ballot 1\n" "#define GL_AMD_shader_trinary_minmax 1\n" From ed7a097d194bfdedf5fbf65ba2a42263c3f71e0b Mon Sep 17 00:00:00 2001 From: Tobias Hector Date: Thu, 3 Sep 2020 15:14:14 +0100 Subject: [PATCH 024/365] Error when initializing rayQuery with assignment --- Test/baseResults/rayQuery-initialization.Error.comp.out | 6 ++++++ Test/rayQuery-initialization.Error.comp | 8 ++++++++ glslang/MachineIndependent/ParseHelper.cpp | 6 ++++++ gtests/Spv.FromFile.cpp | 1 + 4 files changed, 21 insertions(+) create mode 100644 Test/baseResults/rayQuery-initialization.Error.comp.out create mode 100644 Test/rayQuery-initialization.Error.comp diff --git a/Test/baseResults/rayQuery-initialization.Error.comp.out b/Test/baseResults/rayQuery-initialization.Error.comp.out new file mode 100644 index 0000000000..6ce7fac713 --- /dev/null +++ b/Test/baseResults/rayQuery-initialization.Error.comp.out @@ -0,0 +1,6 @@ +rayQuery-initialization.Error.comp +ERROR: 0:7: '=' : ray queries can only be initialized by using the rayQueryInitializeEXT intrinsic: bar +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/rayQuery-initialization.Error.comp b/Test/rayQuery-initialization.Error.comp new file mode 100644 index 0000000000..1c7757cfc9 --- /dev/null +++ b/Test/rayQuery-initialization.Error.comp @@ -0,0 +1,8 @@ +#version 460 + +#extension GL_EXT_ray_query : enable + +void main () { + rayQueryEXT foo; + rayQueryEXT bar = foo; +} \ No newline at end of file diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 045c8f3ee9..4d2022603e 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -6561,6 +6561,12 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden type.copyArrayInnerSizes(publicType.arraySizes); arrayOfArrayVersionCheck(loc, type.getArraySizes()); + if (initializer) { + if (type.getBasicType() == EbtRayQuery) { + error(loc, "ray queries can only be initialized by using the rayQueryInitializeEXT intrinsic:", "=", identifier.c_str()); + } + } + if (type.isCoopMat()) { intermediate.setUseVulkanMemoryModel(); intermediate.setUseStorageBuffer(); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 0efa77c3ea..b42312233c 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -238,6 +238,7 @@ INSTANTIATE_TEST_SUITE_P( "rayQuery-committed.Error.rgen", "rayQuery-allOps.comp", "rayQuery-allOps.frag", + "rayQuery-initialization.Error.comp", "spv.set.vert", "spv.double.comp", "spv.100ops.frag", From 2d66614c0abc6e15a25bddff5061ddbabe8e1667 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Mon, 7 Sep 2020 11:09:21 +0800 Subject: [PATCH 025/365] SPIRV: Fix some disassembly issues - OpExecutionModeId is not supported in disassembly. - Some execution modes are missing in disassembled strings. --- SPIRV/doc.cpp | 29 +++++++++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 4829bb4e8a..e2b17dbe91 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -134,7 +134,7 @@ const char* MemoryString(int mem) } } -const int ExecutionModeCeiling = 33; +const int ExecutionModeCeiling = 40; const char* ExecutionModeString(int mode) { @@ -173,7 +173,21 @@ const char* ExecutionModeString(int mode) case 31: return "ContractionOff"; case 32: return "Bad"; - case 4446: return "PostDepthCoverage"; + case ExecutionModeInitializer: return "Initializer"; + case ExecutionModeFinalizer: return "Finalizer"; + case ExecutionModeSubgroupSize: return "SubgroupSize"; + case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; + case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; + case ExecutionModeLocalSizeId: return "LocalSizeId"; + case ExecutionModeLocalSizeHintId: return "LocalSizeHintId"; + + case ExecutionModePostDepthCoverage: return "PostDepthCoverage"; + case ExecutionModeDenormPreserve: return "DenormPreserve"; + case ExecutionModeDenormFlushToZero: return "DenormFlushToZero"; + case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case ExecutionModeRoundingModeRTE: return "RoundingModeRTE"; + case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; + case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; case ExecutionModeOutputLinesNV: return "OutputLinesNV"; case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV"; @@ -188,6 +202,11 @@ const char* ExecutionModeString(int mode) case ExecutionModeShadingRateInterlockOrderedEXT: return "ShadingRateInterlockOrderedEXT"; case ExecutionModeShadingRateInterlockUnorderedEXT: return "ShadingRateInterlockUnorderedEXT"; + case ExecutionModeMaxWorkgroupSizeINTEL: return "MaxWorkgroupSizeINTEL"; + case ExecutionModeMaxWorkDimINTEL: return "MaxWorkDimINTEL"; + case ExecutionModeNoGlobalOffsetINTEL: return "NoGlobalOffsetINTEL"; + case ExecutionModeNumSIMDWorkitemsINTEL: return "NumSIMDWorkitemsINTEL"; + case ExecutionModeCeiling: default: return "Bad"; } @@ -1272,6 +1291,7 @@ const char* OpcodeString(int op) case 320: return "OpImageSparseRead"; case OpModuleProcessed: return "OpModuleProcessed"; + case OpExecutionModeId: return "OpExecutionModeId"; case OpDecorateId: return "OpDecorateId"; case 333: return "OpGroupNonUniformElect"; @@ -1423,6 +1443,7 @@ void Parameterize() InstructionDesc[OpMemoryModel].setResultAndType(false, false); InstructionDesc[OpEntryPoint].setResultAndType(false, false); InstructionDesc[OpExecutionMode].setResultAndType(false, false); + InstructionDesc[OpExecutionModeId].setResultAndType(false, false); InstructionDesc[OpTypeVoid].setResultAndType(true, false); InstructionDesc[OpTypeBool].setResultAndType(true, false); InstructionDesc[OpTypeInt].setResultAndType(true, false); @@ -1609,6 +1630,10 @@ void Parameterize() InstructionDesc[OpExecutionMode].operands.push(OperandExecutionMode, "'Mode'"); InstructionDesc[OpExecutionMode].operands.push(OperandOptionalLiteral, "See <>"); + InstructionDesc[OpExecutionModeId].operands.push(OperandId, "'Entry Point'"); + InstructionDesc[OpExecutionModeId].operands.push(OperandExecutionMode, "'Mode'"); + InstructionDesc[OpExecutionModeId].operands.push(OperandVariableIds, "See <>"); + InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Width'"); InstructionDesc[OpTypeInt].operands.push(OperandLiteralNumber, "'Signedness'"); From 395bce6c859e80e8587fd0ba2eb4a4a991f28b51 Mon Sep 17 00:00:00 2001 From: Tobias Hector Date: Tue, 8 Sep 2020 11:10:27 +0100 Subject: [PATCH 026/365] Added missing copyright amendment --- gtests/Spv.FromFile.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index b42312233c..309fe756ee 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -1,6 +1,7 @@ // // Copyright (C) 2016 Google, Inc. // Copyright (C) 2019 ARM Limited. +// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. // From de949a2afca24813bf1807ec58c6751860b5e7f0 Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Mon, 24 Aug 2020 23:27:26 +0200 Subject: [PATCH 027/365] SPV: Add NonUniform decorations for stores. The direct pointer argument to stores has to use the NonUniform decoration but we were not using qualifiers at all to decorate the NonUniform pointer. (Test fixes by Greg Fischer ) --- SPIRV/GlslangToSpv.cpp | 11 +++++++---- SPIRV/SpvBuilder.cpp | 4 +++- SPIRV/SpvBuilder.h | 3 ++- Test/baseResults/spv.nonuniform.frag.out | 4 ++++ 4 files changed, 16 insertions(+), 6 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index c85541603f..9bf950ca4e 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2292,7 +2292,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI // The result of operation is always stored, but conditionally the // consumed result. The consumed result is always an r-value. - builder.accessChainStore(result); + builder.accessChainStore(result, + TranslateNonUniformDecoration(node->getOperand()->getType().getQualifier())); builder.clearAccessChain(); if (node->getOp() == glslang::EOpPreIncrement || node->getOp() == glslang::EOpPreDecrement) @@ -2368,6 +2369,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt spv::Id invertedType = spv::NoType; // to use to override the natural type of the node std::vector complexLvalues; // for holding swizzling l-values too complex for // SPIR-V, for an out parameter + std::vector complexLValueQualifiers; std::vector temporaryLvalues; // temporaries to pass, as proxies for complexLValues auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? @@ -2985,6 +2987,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt // receive the result, and must later swizzle that into the original // l-value. complexLvalues.push_back(builder.getAccessChain()); + complexLValueQualifiers.push_back(glslangOperands[arg]->getAsTyped()->getType().getQualifier()); temporaryLvalues.push_back(builder.createVariable( spv::NoPrecision, spv::StorageClassFunction, builder.accessChainGetInferredType(), "swizzleTemp")); @@ -3089,7 +3092,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt for (unsigned int i = 0; i < temporaryLvalues.size(); ++i) { builder.setAccessChain(complexLvalues[i]); - builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision)); + builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision), TranslateNonUniformDecoration(complexLValueQualifiers[i])); } } @@ -4154,7 +4157,7 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I unsigned int alignment = builder.getAccessChain().alignment; alignment |= type.getBufferReferenceAlignment(); - builder.accessChainStore(rvalue, + builder.accessChainStore(rvalue, TranslateNonUniformDecoration(type.getQualifier()), spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerVisibleKHRMask), TranslateMemoryScope(coherentFlags), alignment); @@ -5239,7 +5242,7 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO builder.accessChainPush(builder.makeIntConstant(i), flags, 0); builder.accessChainStore(builder.createCompositeExtract(res, builder.getContainedTypeId(resType, i+1), - i+1)); + i+1), TranslateNonUniformDecoration(imageType.getQualifier())); } return builder.createCompositeExtract(res, resultType(), 0); } diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 582b6cb764..4142cd95e3 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -2666,12 +2666,14 @@ void Builder::accessChainPushSwizzle(std::vector& swizzle, Id preSwizz } // Comments in header -void Builder::accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment) +void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment) { assert(accessChain.isRValue == false); transferAccessChainSwizzle(true); Id base = collapseAccessChain(); + addDecoration(base, nonUniform); + Id source = rvalue; // dynamic component should be gone diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 83a7116aea..fee0565aaf 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -714,7 +714,8 @@ class Builder { } // use accessChain and swizzle to store value - void accessChainStore(Id rvalue, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, + void accessChainStore(Id rvalue, Decoration nonUniform, + spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0); // use accessChain and swizzle to load an r-value diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out index 8d61619cc5..b06a92d1dc 100644 --- a/Test/baseResults/spv.nonuniform.frag.out +++ b/Test/baseResults/spv.nonuniform.frag.out @@ -64,9 +64,12 @@ spv.nonuniform.frag Decorate 17(nu_li) DecorationNonUniformEXT Decorate 17(nu_li) DecorationNonUniformEXT Decorate 19 DecorationNonUniformEXT + Decorate 18(param) DecorationNonUniformEXT + Decorate 17(nu_li) DecorationNonUniformEXT Decorate 24 DecorationNonUniformEXT Decorate 28 DecorationNonUniformEXT Decorate 29 DecorationNonUniformEXT + Decorate 17(nu_li) DecorationNonUniformEXT Decorate 35(nu_inv4) Location 0 Decorate 35(nu_inv4) DecorationNonUniformEXT Decorate 39 DecorationNonUniformEXT @@ -126,6 +129,7 @@ spv.nonuniform.frag Decorate 150 DecorationNonUniformEXT Decorate 151 DecorationNonUniformEXT Decorate 152 DecorationNonUniformEXT + Decorate 153 DecorationNonUniformEXT Decorate 160(storageTexelBuffer) DescriptorSet 0 Decorate 160(storageTexelBuffer) Binding 9 Decorate 92(nu_ii) DecorationNonUniformEXT From 58064311be3428afd1eaac36842099c3a69bcfbf Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Thu, 3 Sep 2020 03:04:13 +0200 Subject: [PATCH 028/365] SPV: Add NonUniform decoration for OpImages created during lowering. By directly creating the OpImage instructions we were not propagating the appropriate decorations. Since this had a lot of cases I centralized the OpImage creation a bit too. --- SPIRV/GlslangToSpv.cpp | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 9bf950ca4e..dd19e77dfe 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -4753,12 +4753,15 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO const bool isUnsignedResult = node->getType().getBasicType() == glslang::EbtUint; + if (builder.isSampledImage(params.sampler) && + ((cracked.query && node->getOp() != glslang::EOpTextureQueryLod) || cracked.fragMask || cracked.fetch)) { + params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler); + if (imageType.getQualifier().isNonUniform()) { + builder.addDecoration(params.sampler, spv::DecorationNonUniformEXT); + } + } // Check for queries if (cracked.query) { - // OpImageQueryLod works on a sampled image, for other queries the image has to be extracted first - if (node->getOp() != glslang::EOpTextureQueryLod && builder.isSampledImage(params.sampler)) - params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler); - switch (node->getOp()) { case glslang::EOpImageQuerySize: case glslang::EOpTextureQuerySize: @@ -5012,10 +5015,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO auto opIt = arguments.begin(); std::vector operands; - // Extract the image if necessary - if (builder.isSampledImage(params.sampler)) - params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler); - operands.push_back(params.sampler); ++opIt; @@ -5076,13 +5075,6 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO bias = true; } - // See if the sampler param should really be just the SPV image part - if (cracked.fetch) { - // a fetch needs to have the image extracted first - if (builder.isSampledImage(params.sampler)) - params.sampler = builder.createUnaryOp(spv::OpImage, builder.getImageType(params.sampler), params.sampler); - } - #ifndef GLSLANG_WEB if (cracked.gather) { const auto& sourceExtensions = glslangIntermediate->getRequestedExtensions(); From c9ffeec6e313dee62ad76ee1993d35a0f7625c1b Mon Sep 17 00:00:00 2001 From: Bas Nieuwenhuizen Date: Thu, 3 Sep 2020 03:09:39 +0200 Subject: [PATCH 029/365] SPV: Add NonUniform decoration for constructors. This is missing in particular for OpSampledImage, which can be a direct argument for texture operations. --- SPIRV/GlslangToSpv.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index dd19e77dfe..9670c72d43 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2613,6 +2613,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt else constructed = builder.createConstructor(precision, arguments, resultType()); + if (node->getType().getQualifier().isNonUniform()) { + builder.addDecoration(constructed, spv::DecorationNonUniformEXT); + } + builder.clearAccessChain(); builder.setAccessChainRValue(constructed); From 889ac20408cad9c384da1532f941fc93a82e7f5b Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 8 Sep 2020 20:01:55 -0600 Subject: [PATCH 030/365] Add buffer store to nonuniform tests --- Test/baseResults/spv.nonuniform.frag.out | 9 ++++++++- Test/spv.nonuniform.frag | 2 ++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out index b06a92d1dc..9abcf357aa 100644 --- a/Test/baseResults/spv.nonuniform.frag.out +++ b/Test/baseResults/spv.nonuniform.frag.out @@ -1,7 +1,7 @@ spv.nonuniform.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 212 +// Id's are bound by 215 Capability Shader Capability InputAttachment @@ -159,6 +159,9 @@ spv.nonuniform.frag Decorate 207 DecorationNonUniformEXT Decorate 208 DecorationNonUniformEXT Decorate 209 DecorationNonUniformEXT + Decorate 92(nu_ii) DecorationNonUniformEXT + Decorate 212 DecorationNonUniformEXT + Decorate 214 DecorationNonUniformEXT 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -382,6 +385,10 @@ spv.nonuniform.frag 210: 30(float) Load 32(b) 211: 30(float) FAdd 210 209 Store 32(b) 211 + 212: 6(int) Load 92(nu_ii) + 213: 30(float) Load 32(b) + 214: 94(ptr) AccessChain 102(storageBuffer) 212 53 + Store 214 213 Return FunctionEnd 11(foo(i1;i1;): 6(int) Function None 8 diff --git a/Test/spv.nonuniform.frag b/Test/spv.nonuniform.frag index d3b05a5ac9..2946403682 100644 --- a/Test/spv.nonuniform.frag +++ b/Test/spv.nonuniform.frag @@ -52,4 +52,6 @@ void main() b += uniformBuffer[uv[nu_ii]].a; b += uniformBuffer[int(m[2].z)].a; b += uniformBuffer[s.a].a; + + storageBuffer[nu_ii].b = b; } From 8eb0bdce926708250d7bfd6e8da2b8ac51d724d2 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 9 Sep 2020 15:44:52 -0600 Subject: [PATCH 031/365] Add texture sample to nonuniform test This verifies that the nonuniform decoration does NOT propagate to the OpSampledImage. --- Test/baseResults/spv.nonuniform.frag.out | 189 +++++++++++++---------- Test/spv.nonuniform.frag | 4 + 2 files changed, 115 insertions(+), 78 deletions(-) diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out index 9abcf357aa..66f53d5fe7 100644 --- a/Test/baseResults/spv.nonuniform.frag.out +++ b/Test/baseResults/spv.nonuniform.frag.out @@ -1,7 +1,7 @@ spv.nonuniform.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 215 +// Id's are bound by 235 Capability Shader Capability InputAttachment @@ -22,7 +22,7 @@ spv.nonuniform.frag Extension "SPV_EXT_descriptor_indexing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 35 92 + EntryPoint Fragment 4 "main" 35 92 182 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_EXT_nonuniform_qualifier" @@ -53,12 +53,15 @@ spv.nonuniform.frag Name 139 "inputAttachment" Name 149 "uniformTexelBuffer" Name 160 "storageTexelBuffer" - Name 170 "v" - Name 185 "uv" - Name 195 "m" - Name 203 "S" - MemberName 203(S) 0 "a" - Name 205 "s" + Name 171 "uniformTexArr" + Name 178 "uniformSampler" + Name 182 "inTexcoord" + Name 190 "v" + Name 205 "uv" + Name 215 "m" + Name 223 "S" + MemberName 223(S) 0 "a" + Name 225 "s" Decorate 9(nupi) DecorationNonUniformEXT Decorate 13 DecorationNonUniformEXT Decorate 17(nu_li) DecorationNonUniformEXT @@ -136,32 +139,41 @@ spv.nonuniform.frag Decorate 161 DecorationNonUniformEXT Decorate 162 DecorationNonUniformEXT Decorate 163 DecorationNonUniformEXT - Decorate 170(v) DecorationNonUniformEXT + Decorate 171(uniformTexArr) DescriptorSet 0 + Decorate 171(uniformTexArr) Binding 10 + Decorate 92(nu_ii) DecorationNonUniformEXT Decorate 172 DecorationNonUniformEXT - Decorate 173 DecorationNonUniformEXT Decorate 174 DecorationNonUniformEXT Decorate 175 DecorationNonUniformEXT - Decorate 179 DecorationNonUniformEXT - Decorate 180 DecorationNonUniformEXT - Decorate 181 DecorationNonUniformEXT - Decorate 182 DecorationNonUniformEXT + Decorate 178(uniformSampler) DescriptorSet 0 + Decorate 178(uniformSampler) Binding 11 + Decorate 182(inTexcoord) Location 2 + Decorate 190(v) DecorationNonUniformEXT + Decorate 192 DecorationNonUniformEXT + Decorate 193 DecorationNonUniformEXT + Decorate 194 DecorationNonUniformEXT + Decorate 195 DecorationNonUniformEXT + Decorate 199 DecorationNonUniformEXT + Decorate 200 DecorationNonUniformEXT + Decorate 201 DecorationNonUniformEXT + Decorate 202 DecorationNonUniformEXT Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 186 DecorationNonUniformEXT - Decorate 187 DecorationNonUniformEXT - Decorate 188 DecorationNonUniformEXT - Decorate 189 DecorationNonUniformEXT - Decorate 190 DecorationNonUniformEXT - Decorate 195(m) DecorationNonUniformEXT - Decorate 196 DecorationNonUniformEXT - Decorate 197 DecorationNonUniformEXT - Decorate 205(s) DecorationNonUniformEXT Decorate 206 DecorationNonUniformEXT Decorate 207 DecorationNonUniformEXT Decorate 208 DecorationNonUniformEXT Decorate 209 DecorationNonUniformEXT + Decorate 210 DecorationNonUniformEXT + Decorate 215(m) DecorationNonUniformEXT + Decorate 216 DecorationNonUniformEXT + Decorate 217 DecorationNonUniformEXT + Decorate 225(s) DecorationNonUniformEXT + Decorate 226 DecorationNonUniformEXT + Decorate 227 DecorationNonUniformEXT + Decorate 228 DecorationNonUniformEXT + Decorate 229 DecorationNonUniformEXT Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 212 DecorationNonUniformEXT - Decorate 214 DecorationNonUniformEXT + Decorate 232 DecorationNonUniformEXT + Decorate 234 DecorationNonUniformEXT 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -231,14 +243,24 @@ spv.nonuniform.frag 158: TypeRuntimeArray 75 159: TypePointer UniformConstant 158 160(storageTexelBuffer): 159(ptr) Variable UniformConstant - 168: TypeVector 6(int) 4 - 169: TypePointer Function 168(ivec4) - 171: 36(int) Constant 1 - 178: 36(int) Constant 2 - 193: TypeMatrix 33(fvec4) 4 - 194: TypePointer Function 193 - 203(S): TypeStruct 6(int) - 204: TypePointer Function 203(S) + 168: 36(int) Constant 8 + 169: TypeArray 108 168 + 170: TypePointer UniformConstant 169 +171(uniformTexArr): 170(ptr) Variable UniformConstant + 173: TypePointer UniformConstant 108 + 176: TypeSampler + 177: TypePointer UniformConstant 176 +178(uniformSampler): 177(ptr) Variable UniformConstant + 181: TypePointer Input 117(fvec2) + 182(inTexcoord): 181(ptr) Variable Input + 188: TypeVector 6(int) 4 + 189: TypePointer Function 188(ivec4) + 191: 36(int) Constant 1 + 198: 36(int) Constant 2 + 213: TypeMatrix 33(fvec4) 4 + 214: TypePointer Function 213 + 223(S): TypeStruct 6(int) + 224: TypePointer Function 223(S) 4(main): 2 Function None 3 5: Label 16(a): 7(ptr) Variable Function @@ -248,10 +270,10 @@ spv.nonuniform.frag 32(b): 31(ptr) Variable Function 41(nu_gf): 31(ptr) Variable Function 48(dyn_i): 7(ptr) Variable Function - 170(v): 169(ptr) Variable Function - 185(uv): 169(ptr) Variable Function - 195(m): 194(ptr) Variable Function - 205(s): 204(ptr) Variable Function + 190(v): 189(ptr) Variable Function + 205(uv): 189(ptr) Variable Function + 215(m): 214(ptr) Variable Function + 225(s): 224(ptr) Variable Function 19: 6(int) Load 17(nu_li) Store 18(param) 19 21: 6(int) FunctionCall 11(foo(i1;i1;) 18(param) 20(param) @@ -348,47 +370,58 @@ spv.nonuniform.frag 166: 30(float) Load 32(b) 167: 30(float) FAdd 166 165 Store 32(b) 167 - 172: 7(ptr) AccessChain 170(v) 171 - 173: 6(int) Load 172 - 174: 94(ptr) AccessChain 90(uniformBuffer) 173 53 - 175: 30(float) Load 174 - 176: 30(float) Load 32(b) - 177: 30(float) FAdd 176 175 - Store 32(b) 177 - 179: 7(ptr) AccessChain 170(v) 178 - 180: 6(int) Load 179 - 181: 94(ptr) AccessChain 90(uniformBuffer) 180 53 - 182: 30(float) Load 181 - 183: 30(float) Load 32(b) - 184: 30(float) FAdd 183 182 - Store 32(b) 184 - 186: 6(int) Load 92(nu_ii) - 187: 7(ptr) AccessChain 185(uv) 186 - 188: 6(int) Load 187 - 189: 94(ptr) AccessChain 90(uniformBuffer) 188 53 - 190: 30(float) Load 189 - 191: 30(float) Load 32(b) - 192: 30(float) FAdd 191 190 - Store 32(b) 192 - 196: 31(ptr) AccessChain 195(m) 26 178 - 197: 30(float) Load 196 - 198: 6(int) ConvertFToS 197 - 199: 94(ptr) AccessChain 90(uniformBuffer) 198 53 - 200: 30(float) Load 199 - 201: 30(float) Load 32(b) - 202: 30(float) FAdd 201 200 - Store 32(b) 202 - 206: 7(ptr) AccessChain 205(s) 53 - 207: 6(int) Load 206 - 208: 94(ptr) AccessChain 90(uniformBuffer) 207 53 - 209: 30(float) Load 208 - 210: 30(float) Load 32(b) - 211: 30(float) FAdd 210 209 - Store 32(b) 211 - 212: 6(int) Load 92(nu_ii) - 213: 30(float) Load 32(b) - 214: 94(ptr) AccessChain 102(storageBuffer) 212 53 - Store 214 213 + 172: 6(int) Load 92(nu_ii) + 174: 173(ptr) AccessChain 171(uniformTexArr) 172 + 175: 108 Load 174 + 179: 176 Load 178(uniformSampler) + 180: 109 SampledImage 175 179 + 183: 117(fvec2) Load 182(inTexcoord) + 184: 33(fvec4) ImageSampleImplicitLod 180 183 + 185: 30(float) CompositeExtract 184 0 + 186: 30(float) Load 32(b) + 187: 30(float) FAdd 186 185 + Store 32(b) 187 + 192: 7(ptr) AccessChain 190(v) 191 + 193: 6(int) Load 192 + 194: 94(ptr) AccessChain 90(uniformBuffer) 193 53 + 195: 30(float) Load 194 + 196: 30(float) Load 32(b) + 197: 30(float) FAdd 196 195 + Store 32(b) 197 + 199: 7(ptr) AccessChain 190(v) 198 + 200: 6(int) Load 199 + 201: 94(ptr) AccessChain 90(uniformBuffer) 200 53 + 202: 30(float) Load 201 + 203: 30(float) Load 32(b) + 204: 30(float) FAdd 203 202 + Store 32(b) 204 + 206: 6(int) Load 92(nu_ii) + 207: 7(ptr) AccessChain 205(uv) 206 + 208: 6(int) Load 207 + 209: 94(ptr) AccessChain 90(uniformBuffer) 208 53 + 210: 30(float) Load 209 + 211: 30(float) Load 32(b) + 212: 30(float) FAdd 211 210 + Store 32(b) 212 + 216: 31(ptr) AccessChain 215(m) 26 198 + 217: 30(float) Load 216 + 218: 6(int) ConvertFToS 217 + 219: 94(ptr) AccessChain 90(uniformBuffer) 218 53 + 220: 30(float) Load 219 + 221: 30(float) Load 32(b) + 222: 30(float) FAdd 221 220 + Store 32(b) 222 + 226: 7(ptr) AccessChain 225(s) 53 + 227: 6(int) Load 226 + 228: 94(ptr) AccessChain 90(uniformBuffer) 227 53 + 229: 30(float) Load 228 + 230: 30(float) Load 32(b) + 231: 30(float) FAdd 230 229 + Store 32(b) 231 + 232: 6(int) Load 92(nu_ii) + 233: 30(float) Load 32(b) + 234: 94(ptr) AccessChain 102(storageBuffer) 232 53 + Store 234 233 Return FunctionEnd 11(foo(i1;i1;): 6(int) Function None 8 diff --git a/Test/spv.nonuniform.frag b/Test/spv.nonuniform.frag index 2946403682..c136d256f8 100644 --- a/Test/spv.nonuniform.frag +++ b/Test/spv.nonuniform.frag @@ -5,6 +5,7 @@ layout(location=0) nonuniformEXT in vec4 nu_inv4; nonuniformEXT float nu_gf; layout(location=1) in nonuniformEXT flat int nu_ii; +layout(location = 2) in vec2 inTexcoord; layout(binding=0, input_attachment_index = 0) uniform subpassInput inputAttachmentDyn[]; layout(binding=1) uniform samplerBuffer uniformTexelBufferDyn[]; @@ -16,6 +17,8 @@ layout(binding=6, r32f) uniform image2D storag layout(binding=7, input_attachment_index = 1) uniform subpassInput inputAttachment[]; layout(binding=8) uniform samplerBuffer uniformTexelBuffer[]; layout(binding=9, r32f) uniform imageBuffer storageTexelBuffer[]; +layout(binding = 10) uniform texture2D uniformTexArr[8]; +layout(binding = 11) uniform sampler uniformSampler; nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f) { @@ -42,6 +45,7 @@ void main() b += subpassLoad(inputAttachment[nu_ii]).x; b += texelFetch(uniformTexelBuffer[nu_ii], 1).x; b += imageLoad(storageTexelBuffer[nu_ii], 1).x; + b += texture(sampler2D(uniformTexArr[nu_ii], uniformSampler), inTexcoord.xy).x; nonuniformEXT ivec4 v; nonuniformEXT mat4 m; From a9e16bd73a957b7849055923f9ee2a1f0c0fafe4 Mon Sep 17 00:00:00 2001 From: nihui Date: Sat, 12 Sep 2020 10:04:36 +0800 Subject: [PATCH 032/365] Fix build android ndk r16b --- glslang/MachineIndependent/ParseHelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 4d2022603e..36e3715755 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5417,7 +5417,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi if (! IsPow2(value)) error(loc, "must be a power of 2", "buffer_reference_align", ""); else - publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)std::log2(value); + publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)log2(value); if (nonLiteral) error(loc, "needs a literal integer", "buffer_reference_align", ""); return; From 91ac2245e992c2a370edec3d69b94020a6405ff9 Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Fri, 11 Sep 2020 22:30:49 -0400 Subject: [PATCH 033/365] Allow subpassLoad for ANGLE Signed-off-by: Shahbaz Youssefi --- glslang/MachineIndependent/Initialize.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index d773a0afc6..8d5d04fb43 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5746,8 +5746,7 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c for (int dim = Esd2D; dim <= EsdCube; ++dim) { // 2D, 3D, and Cube #else #if defined(GLSLANG_ANGLE) - // TODO: what is subpass? - for (int dim = Esd2D; dim < EsdSubpass; ++dim) { // 2D, ..., buffer + for (int dim = Esd2D; dim < EsdNumDims; ++dim) { // 2D, ..., buffer, subpass #else for (int dim = Esd1D; dim < EsdNumDims; ++dim) { // 1D, ..., buffer, subpass #endif From 967fa92d14acea305267574faf63ebe753de98c4 Mon Sep 17 00:00:00 2001 From: nihui Date: Sat, 12 Sep 2020 11:18:02 +0800 Subject: [PATCH 034/365] Try to find python interpreter from host first --- CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 18f11f78ef..ada2b8fb9c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -228,9 +228,15 @@ function(glslang_set_link_args TARGET) endif() endfunction(glslang_set_link_args) +if(NOT COMMAND find_host_package) + macro(find_host_package) + find_package(${ARGN}) + endmacro() +endif() + # CMake needs to find the right version of python, right from the beginning, # otherwise, it will find the wrong version and fail later -find_package(PythonInterp 3 REQUIRED) +find_host_package(PythonInterp 3 REQUIRED) # Root directory for build-time generated include files set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include") From f8a5602c55606f8e97f5576c85cbc2a58026a999 Mon Sep 17 00:00:00 2001 From: johnkslang Date: Mon, 14 Sep 2020 02:49:38 -0600 Subject: [PATCH 035/365] Fix #2385: guard against constant_id on non-const. --- glslang/HLSL/hlslParseHelper.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index ca0d2071a3..3150eacfb6 100755 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -1953,6 +1953,10 @@ void HlslParseContext::transferTypeAttributes(const TSourceLoc& loc, const TAttr break; case EatConstantId: // specialization constant + if (type.getQualifier().storage != EvqConst) { + error(loc, "needs a const type", "constant_id", ""); + break; + } if (it->getInt(value)) { TSourceLoc loc; loc.init(); From 3933d7d414516698a46ebdd9a0bcbd0e0a9a1cf0 Mon Sep 17 00:00:00 2001 From: Chow Date: Mon, 14 Sep 2020 22:00:48 +0800 Subject: [PATCH 036/365] Fix scope definition in ES 100. (#2379) * Remove image2DShadow and other 3 tokens. Refine codes. Remove image2DShadow and other 3 tokens. Refine codes. * 110scope.vert has redefinition part of what's removed from 100scope.vert --- Test/100scope.vert | 2 +- Test/baseResults/100scope.vert.out | 23 ++++++---- glslang/MachineIndependent/ParseHelper.h | 1 + glslang/MachineIndependent/glslang.m4 | 19 ++++++++ glslang/MachineIndependent/glslang.y | 19 ++++++++ glslang/MachineIndependent/glslang_tab.cpp | 53 +++++++++++++++------- 6 files changed, 91 insertions(+), 26 deletions(-) diff --git a/Test/100scope.vert b/Test/100scope.vert index b0a72d1f19..6643730c91 100644 --- a/Test/100scope.vert +++ b/Test/100scope.vert @@ -2,7 +2,7 @@ int f(int a, int b, int c) { - int a = b; // ERROR, redefinition + int a = b; { float a = float(a) + 1.0; diff --git a/Test/baseResults/100scope.vert.out b/Test/baseResults/100scope.vert.out index c59c8fd7d3..1696a2e1e2 100644 --- a/Test/baseResults/100scope.vert.out +++ b/Test/baseResults/100scope.vert.out @@ -1,5 +1,4 @@ 100scope.vert -ERROR: 0:5: 'a' : redefinition ERROR: 0:17: 'b' : function name is redeclaration of existing name ERROR: 0:20: 'c' : redefinition ERROR: 0:22: 'f' : redefinition @@ -13,7 +12,7 @@ ERROR: 0:57: 'z' : undeclared identifier ERROR: 0:57: 'z' : redefinition ERROR: 0:73: 'degrees' : can't use function syntax on variable ERROR: 0:76: 'vertex-shader struct output' : not supported for this version or the enabled extensions -ERROR: 14 compilation errors. No code generated. +ERROR: 13 compilation errors. No code generated. Shader version: 100 @@ -23,18 +22,22 @@ ERROR: node is still EOpNull! 0:3 'a' ( in highp int) 0:3 'b' ( in highp int) 0:3 'c' ( in highp int) -0:? Sequence +0:5 Sequence +0:5 Sequence +0:5 move second child to first child ( temp highp int) +0:5 'a' ( temp highp int) +0:5 'b' ( in highp int) 0:8 Sequence 0:8 Sequence 0:8 move second child to first child ( temp highp float) 0:8 'a' ( temp highp float) 0:8 add ( temp highp float) 0:8 Convert int to float ( temp highp float) -0:8 'a' ( in highp int) +0:8 'a' ( temp highp int) 0:8 Constant: 0:8 1.000000 0:11 Branch: Return with expression -0:11 'a' ( in highp int) +0:11 'a' ( temp highp int) 0:25 Function Definition: cos(f1; ( global highp float) 0:25 Function Parameters: 0:25 'x' ( in highp float) @@ -138,18 +141,22 @@ ERROR: node is still EOpNull! 0:3 'a' ( in highp int) 0:3 'b' ( in highp int) 0:3 'c' ( in highp int) -0:? Sequence +0:5 Sequence +0:5 Sequence +0:5 move second child to first child ( temp highp int) +0:5 'a' ( temp highp int) +0:5 'b' ( in highp int) 0:8 Sequence 0:8 Sequence 0:8 move second child to first child ( temp highp float) 0:8 'a' ( temp highp float) 0:8 add ( temp highp float) 0:8 Convert int to float ( temp highp float) -0:8 'a' ( in highp int) +0:8 'a' ( temp highp int) 0:8 Constant: 0:8 1.000000 0:11 Branch: Return with expression -0:11 'a' ( in highp int) +0:11 'a' ( temp highp int) 0:36 Function Definition: main( ( global void) 0:36 Function Parameters: 0:? Sequence diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 09f51c7984..0f09adaffc 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -84,6 +84,7 @@ class TParseContextBase : public TParseVersions { scopeMangler("::"), symbolTable(symbolTable), statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), + currentFunctionType(nullptr), postEntryPointReturn(false), contextPragma(true, false), beginInvocationInterlockCount(0), endInvocationInterlockCount(0), diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index d1701cf140..0b4b53fb97 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -3842,6 +3842,14 @@ function_definition : function_prototype { $1.function = parseContext.handleFunctionDeclarator($1.loc, *$1.function, false /* not prototype */); $1.intermNode = parseContext.handleFunctionDefinition($1.loc, *$1.function); + + // For ES 100 only, according to ES shading language 100 spec: A function + // body has a scope nested inside the function's definition. + if (parseContext.profile == EEsProfile && parseContext.version == 100) + { + parseContext.symbolTable.push(); + ++parseContext.statementNestingLevel; + } } compound_statement_no_new_scope { // May be best done as post process phase on intermediate code @@ -3857,6 +3865,17 @@ function_definition $$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize); $$->getAsAggregate()->setDebug(parseContext.contextPragma.debug); $$->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable); + + // Set currentFunctionType to empty pointer when goes outside of the function + parseContext.currentFunctionType = nullptr; + + // For ES 100 only, according to ES shading language 100 spec: A function + // body has a scope nested inside the function's definition. + if (parseContext.profile == EEsProfile && parseContext.version == 100) + { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + } } ; diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index fe0215773d..23adcb057e 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -3842,6 +3842,14 @@ function_definition : function_prototype { $1.function = parseContext.handleFunctionDeclarator($1.loc, *$1.function, false /* not prototype */); $1.intermNode = parseContext.handleFunctionDefinition($1.loc, *$1.function); + + // For ES 100 only, according to ES shading language 100 spec: A function + // body has a scope nested inside the function's definition. + if (parseContext.profile == EEsProfile && parseContext.version == 100) + { + parseContext.symbolTable.push(); + ++parseContext.statementNestingLevel; + } } compound_statement_no_new_scope { // May be best done as post process phase on intermediate code @@ -3857,6 +3865,17 @@ function_definition $$->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize); $$->getAsAggregate()->setDebug(parseContext.contextPragma.debug); $$->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable); + + // Set currentFunctionType to empty pointer when goes outside of the function + parseContext.currentFunctionType = nullptr; + + // For ES 100 only, according to ES shading language 100 spec: A function + // body has a scope nested inside the function's definition. + if (parseContext.profile == EEsProfile && parseContext.version == 100) + { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + } } ; diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 16810e36a1..ac35797797 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1012,8 +1012,8 @@ static const yytype_uint16 yyrline[] = 3603, 3611, 3615, 3628, 3632, 3639, 3639, 3659, 3662, 3668, 3680, 3692, 3696, 3703, 3703, 3718, 3718, 3734, 3734, 3755, 3758, 3764, 3767, 3773, 3777, 3784, 3789, 3794, 3801, 3804, - 3813, 3817, 3826, 3829, 3833, 3842, 3842, 3865, 3871, 3874, - 3879, 3882 + 3813, 3817, 3826, 3829, 3833, 3842, 3842, 3884, 3890, 3893, + 3898, 3901 }; #endif @@ -10298,12 +10298,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (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); + + // For ES 100 only, according to ES shading language 100 spec: A function + // body has a scope nested inside the function's definition. + if (parseContext.profile == EEsProfile && parseContext.version == 100) + { + parseContext.symbolTable.push(); + ++parseContext.statementNestingLevel; + } } -#line 10303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 586: -#line 3846 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3854 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -10318,53 +10326,64 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode)->getAsAggregate()->setOptimize(parseContext.contextPragma.optimize); (yyval.interm.intermNode)->getAsAggregate()->setDebug(parseContext.contextPragma.debug); (yyval.interm.intermNode)->getAsAggregate()->setPragmaTable(parseContext.contextPragma.pragmaTable); + + // Set currentFunctionType to empty pointer when goes outside of the function + parseContext.currentFunctionType = nullptr; + + // For ES 100 only, according to ES shading language 100 spec: A function + // body has a scope nested inside the function's definition. + if (parseContext.profile == EEsProfile && parseContext.version == 100) + { + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); + --parseContext.statementNestingLevel; + } } -#line 10323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 587: -#line 3865 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3884 "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 10332 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 588: -#line 3871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3890 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 10340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 589: -#line 3874 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3893 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 10348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 590: -#line 3879 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3898 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 10356 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 591: -#line 3882 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3901 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 10364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; -#line 10368 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -10592,5 +10611,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); #endif return yyresult; } -#line 3887 "MachineIndependent/glslang.y" /* yacc.c:1906 */ +#line 3906 "MachineIndependent/glslang.y" /* yacc.c:1906 */ From ac2f01f4bd89762c084003003a15c2be0939877d Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Mon, 14 Sep 2020 11:57:09 -0400 Subject: [PATCH 037/365] SPIRV: Add disassembly support for multiple literal strings (#2397) According to the extension SPV_GOOGLE_decorate_string, OpDecorateString (or OpMemberDecorateString) ought to be capable of supporting multiple literal strings. Each literal strings are padded with null terminator to make word alignment. The layout is: Inst | Target | Decoration | Literal String, Literal String, ... --- SPIRV/SPVRemapper.cpp | 3 +++ SPIRV/disassemble.cpp | 4 ++++ SPIRV/doc.cpp | 4 ++-- SPIRV/doc.h | 1 + 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index fd0bb8950c..1adc6a3042 100644 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -625,6 +625,9 @@ namespace spv { break; } + case spv::OperandVariableLiteralStrings: + return nextInst; + // Execution mode might have extra literal operands. Skip them. case spv::OperandExecutionMode: return nextInst; diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp index 4faa89ea3e..a95ded49d2 100644 --- a/SPIRV/disassemble.cpp +++ b/SPIRV/disassemble.cpp @@ -519,6 +519,10 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, case OperandLiteralString: numOperands -= disassembleString(); break; + case OperandVariableLiteralStrings: + while (numOperands > 0) + numOperands -= disassembleString(); + return; case OperandMemoryAccess: outputMask(OperandMemoryAccess, stream[word++]); --numOperands; diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index e2b17dbe91..1d052f8c29 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -1727,7 +1727,7 @@ void Parameterize() InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandId, "'Target'"); InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandDecoration, ""); - InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'"); + InstructionDesc[OpDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); InstructionDesc[OpMemberDecorate].operands.push(OperandId, "'Structure Type'"); InstructionDesc[OpMemberDecorate].operands.push(OperandLiteralNumber, "'Member'"); @@ -1737,7 +1737,7 @@ void Parameterize() InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandId, "'Structure Type'"); InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralNumber, "'Member'"); InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandDecoration, ""); - InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandLiteralString, "'Literal String'"); + InstructionDesc[OpMemberDecorateStringGOOGLE].operands.push(OperandVariableLiteralStrings, "'Literal Strings'"); InstructionDesc[OpGroupDecorate].operands.push(OperandId, "'Decoration Group'"); InstructionDesc[OpGroupDecorate].operands.push(OperandVariableIds, "'Targets'"); diff --git a/SPIRV/doc.h b/SPIRV/doc.h index 293256a2c6..2a0b28c6b3 100644 --- a/SPIRV/doc.h +++ b/SPIRV/doc.h @@ -125,6 +125,7 @@ enum OperandClass { OperandVariableLiteralId, OperandLiteralNumber, OperandLiteralString, + OperandVariableLiteralStrings, OperandSource, OperandExecutionModel, OperandAddressing, From 9eaa69c21c45c173b6ab9aacef271ab0e7c083bf Mon Sep 17 00:00:00 2001 From: Chow Date: Tue, 15 Sep 2020 11:46:24 +0800 Subject: [PATCH 038/365] Preprocessor related issue fix (#2378) * Preprocessor related fix 1). Accoding to ESSL spec : All macro names containing two consecutive underscores ( __ ) are reserved for future use as predefined macro names, so just report a warning instead of error when the shader defines the macro names begining with '__'; 2. According to spec: If an implementation does not recognize the tokens following #pragma, then it will ignore that pragma, so report a compile-time warning intead of error for the following statement: #pragma debug(1.23) 3. The 'defined' macro should be allowed to expand and '__LINE__' should be allowed to be replaced with its original line number (otherwise, other expanding macros may change this value). 4. Add a flag 'indentifierSeen' in PPContext to indicate whether the any non-preprocessor tokens is existed before the extension directives, because the built-in symbols and functions are parsed before paring the user shader, so add a 'shaderSource' flag to check this error only for the user shader source; 5. Add missing type int16 and uint16. * Add test results, remove restriction of #extension. 1. Remove extension restriction in first line , as this is contraversy now. 2. The following shader is compiled failed as glslang consider the keyword 'defined' can not be undefined(in the 9th line: "#define defined BBB") The shader is as following: According to ES3.0 spec: It is an error to undefine or to redefine a built-in (pre-defined) macro name. This rule is aimed to the __LINE__, __FILE__, __VERSION__ and GL_ES, the keyword "defined" should not be restricted by this rule, so change the compile error to warning and make the following shader compile successfully. * 1. Using relaxedError to control error/warning report level. 2. remove #extension restriction. 3. Fix version related issue. 1. Using relaxedError to control error/warning report level. 2. remove #extension restriction. 3. Fix version related issue. * Add test results * Turn conditional warnings about pragma to unconditional ones. --- glslang/MachineIndependent/ParseHelper.cpp | 15 +++++++++++---- glslang/MachineIndependent/gl_types.h | 8 ++++++++ glslang/MachineIndependent/preprocessor/Pp.cpp | 13 ++++++++++--- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 4d2022603e..86a5a37866 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -246,7 +246,9 @@ void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& else if (tokens[2].compare("off") == 0) contextPragma.optimize = false; else { - error(loc, "\"on\" or \"off\" expected after '(' for 'optimize' pragma", "#pragma", ""); + if(relaxedErrors()) + // If an implementation does not recognize the tokens following #pragma, then it will ignore that pragma. + warn(loc, "\"on\" or \"off\" expected after '(' for 'optimize' pragma", "#pragma", ""); return; } @@ -270,7 +272,9 @@ void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& else if (tokens[2].compare("off") == 0) contextPragma.debug = false; else { - error(loc, "\"on\" or \"off\" expected after '(' for 'debug' pragma", "#pragma", ""); + if(relaxedErrors()) + // If an implementation does not recognize the tokens following #pragma, then it will ignore that pragma. + warn(loc, "\"on\" or \"off\" expected after '(' for 'debug' pragma", "#pragma", ""); return; } @@ -2798,7 +2802,10 @@ void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* iden if (strncmp(identifier, "GL_", 3) == 0) ppError(loc, "names beginning with \"GL_\" can't be (un)defined:", op, identifier); else if (strncmp(identifier, "defined", 8) == 0) - ppError(loc, "\"defined\" can't be (un)defined:", op, identifier); + if (relaxedErrors()) + ppWarn(loc, "\"defined\" is (un)defined:", op, identifier); + else + ppError(loc, "\"defined\" can't be (un)defined:", op, identifier); else if (strstr(identifier, "__") != 0) { if (isEsProfile() && version >= 300 && (strcmp(identifier, "__LINE__") == 0 || @@ -2806,7 +2813,7 @@ void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* iden strcmp(identifier, "__VERSION__") == 0)) ppError(loc, "predefined names can't be (un)defined:", op, identifier); else { - if (isEsProfile() && version < 300) + if (isEsProfile() && version < 300 && !relaxedErrors()) ppError(loc, "names containing consecutive underscores are reserved, and an error if version < 300:", op, identifier); else ppWarn(loc, "names containing consecutive underscores are reserved:", op, identifier); diff --git a/glslang/MachineIndependent/gl_types.h b/glslang/MachineIndependent/gl_types.h index b6f613bced..b9372d4bbb 100644 --- a/glslang/MachineIndependent/gl_types.h +++ b/glslang/MachineIndependent/gl_types.h @@ -52,6 +52,14 @@ #define GL_UNSIGNED_INT64_VEC2_ARB 0x8FE5 #define GL_UNSIGNED_INT64_VEC3_ARB 0x8FE6 #define GL_UNSIGNED_INT64_VEC4_ARB 0x8FE7 +#define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 +#define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 +#define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 + +#define GL_INT16_NV 0x8FE4 +#define GL_INT16_VEC2_NV 0x8FE5 +#define GL_INT16_VEC3_NV 0x8FE6 +#define GL_INT16_VEC4_NV 0x8FE7 #define GL_BOOL 0x8B56 #define GL_BOOL_VEC2 0x8B57 diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp index ec39356141..a0a626f9b7 100644 --- a/glslang/MachineIndependent/preprocessor/Pp.cpp +++ b/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -422,10 +422,10 @@ int TPpContext::eval(int token, int precedence, bool shortCircuit, int& res, boo if (! parseContext.isReadingHLSL() && isMacroInput()) { if (parseContext.relaxedErrors()) parseContext.ppWarn(ppToken->loc, "nonportable when expanded from macros for preprocessor expression", - "defined", ""); + "defined", ""); else parseContext.ppError(ppToken->loc, "cannot use in preprocessor expression when expanded from macros", - "defined", ""); + "defined", ""); } bool needclose = 0; token = scanToken(ppToken); @@ -1184,7 +1184,9 @@ MacroExpandResult TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, b int macroAtom = atomStrings.getAtom(ppToken->name); switch (macroAtom) { case PpAtomLineMacro: - ppToken->ival = parseContext.getCurrentLoc().line; + // Arguments which are macro have been replaced in the first stage. + if (ppToken->ival == 0) + ppToken->ival = parseContext.getCurrentLoc().line; snprintf(ppToken->name, sizeof(ppToken->name), "%d", ppToken->ival); UngetToken(PpAtomConstInt, ppToken); return MacroExpandStarted; @@ -1285,6 +1287,11 @@ MacroExpandResult TPpContext::MacroExpand(TPpToken* ppToken, bool expandUndef, b nestStack.push_back('}'); else if (nestStack.size() > 0 && token == nestStack.back()) nestStack.pop_back(); + + //Macro replacement list is expanded in the last stage. + if (atomStrings.getAtom(ppToken->name) == PpAtomLineMacro) + ppToken->ival = parseContext.getCurrentLoc().line; + in->args[arg]->putToken(token, ppToken); tokenRecorded = true; } From 4dcc12d1a441b29d5901bc708bb1343d29d6459f Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Fri, 18 Sep 2020 21:18:35 +0800 Subject: [PATCH 039/365] SPIRV: Add more utility functions to build some opcodes (#2398) Add more builder functions to OpExecutionMode, OpExecutionModeId, OpDecorateString, OpMemberDecorateString. According to SPIR-V, OpExecutionMode and OpExecutionModeId could take variable extra operands. Current implementation doesn't support this and assumes at most 3 operands are extra operands. It is not true. Similarly, OpDecorateString and OpMemberDecorateString could support multiple strings either as literal strings or as string operands. Further, OpDecorate and OpDecorateId have the same problem, taking variable extra operands. --- SPIRV/SpvBuilder.cpp | 97 +++++++++++++++++++++++++++++++++++++++++++- SPIRV/SpvBuilder.h | 7 ++++ 2 files changed, 103 insertions(+), 1 deletion(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 582b6cb764..9680331469 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -1183,6 +1183,28 @@ void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, int val executionModes.push_back(std::unique_ptr(instr)); } +void Builder::addExecutionMode(Function* entryPoint, ExecutionMode mode, const std::vector& literals) +{ + Instruction* instr = new Instruction(OpExecutionMode); + instr->addIdOperand(entryPoint->getId()); + instr->addImmediateOperand(mode); + for (auto literal : literals) + instr->addImmediateOperand(literal); + + executionModes.push_back(std::unique_ptr(instr)); +} + +void Builder::addExecutionModeId(Function* entryPoint, ExecutionMode mode, const std::vector& operandIds) +{ + Instruction* instr = new Instruction(OpExecutionModeId); + instr->addIdOperand(entryPoint->getId()); + instr->addImmediateOperand(mode); + for (auto operandId : operandIds) + instr->addIdOperand(operandId); + + executionModes.push_back(std::unique_ptr(instr)); +} + void Builder::addName(Id id, const char* string) { Instruction* name = new Instruction(OpName); @@ -1221,7 +1243,7 @@ void Builder::addDecoration(Id id, Decoration decoration, const char* s) if (decoration == spv::DecorationMax) return; - Instruction* dec = new Instruction(OpDecorateStringGOOGLE); + Instruction* dec = new Instruction(OpDecorateString); dec->addIdOperand(id); dec->addImmediateOperand(decoration); dec->addStringOperand(s); @@ -1229,6 +1251,34 @@ void Builder::addDecoration(Id id, Decoration decoration, const char* s) decorations.push_back(std::unique_ptr(dec)); } +void Builder::addDecoration(Id id, Decoration decoration, const std::vector& literals) +{ + if (decoration == spv::DecorationMax) + return; + + Instruction* dec = new Instruction(OpDecorate); + dec->addIdOperand(id); + dec->addImmediateOperand(decoration); + for (auto literal : literals) + dec->addImmediateOperand(literal); + + decorations.push_back(std::unique_ptr(dec)); +} + +void Builder::addDecoration(Id id, Decoration decoration, const std::vector& strings) +{ + if (decoration == spv::DecorationMax) + return; + + Instruction* dec = new Instruction(OpDecorateString); + dec->addIdOperand(id); + dec->addImmediateOperand(decoration); + for (auto string : strings) + dec->addStringOperand(string); + + decorations.push_back(std::unique_ptr(dec)); +} + void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration) { if (decoration == spv::DecorationMax) @@ -1242,6 +1292,21 @@ void Builder::addDecorationId(Id id, Decoration decoration, Id idDecoration) decorations.push_back(std::unique_ptr(dec)); } +void Builder::addDecorationId(Id id, Decoration decoration, const std::vector& operandIds) +{ + if(decoration == spv::DecorationMax) + return; + + Instruction* dec = new Instruction(OpDecorateId); + dec->addIdOperand(id); + dec->addImmediateOperand(decoration); + + for (auto operandId : operandIds) + dec->addIdOperand(operandId); + + decorations.push_back(std::unique_ptr(dec)); +} + void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, int num) { if (decoration == spv::DecorationMax) @@ -1271,6 +1336,36 @@ void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decorat decorations.push_back(std::unique_ptr(dec)); } +void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector& literals) +{ + if (decoration == spv::DecorationMax) + return; + + Instruction* dec = new Instruction(OpMemberDecorate); + dec->addIdOperand(id); + dec->addImmediateOperand(member); + dec->addImmediateOperand(decoration); + for (auto literal : literals) + dec->addImmediateOperand(literal); + + decorations.push_back(std::unique_ptr(dec)); +} + +void Builder::addMemberDecoration(Id id, unsigned int member, Decoration decoration, const std::vector& strings) +{ + if (decoration == spv::DecorationMax) + return; + + Instruction* dec = new Instruction(OpMemberDecorateString); + dec->addIdOperand(id); + dec->addImmediateOperand(member); + dec->addImmediateOperand(decoration); + for (auto string : strings) + dec->addStringOperand(string); + + decorations.push_back(std::unique_ptr(dec)); +} + // Comments in header Function* Builder::makeEntryPoint(const char* entryPoint) { diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 83a7116aea..077945e77b 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -321,13 +321,20 @@ class Builder { // Methods for adding information outside the CFG. Instruction* addEntryPoint(ExecutionModel, Function*, const char* name); void addExecutionMode(Function*, ExecutionMode mode, int value1 = -1, int value2 = -1, int value3 = -1); + void addExecutionMode(Function*, ExecutionMode mode, const std::vector& literals); + void addExecutionModeId(Function*, ExecutionMode mode, const std::vector& operandIds); void addName(Id, const char* name); void addMemberName(Id, int member, const char* name); void addDecoration(Id, Decoration, int num = -1); void addDecoration(Id, Decoration, const char*); + void addDecoration(Id, Decoration, const std::vector& literals); + void addDecoration(Id, Decoration, const std::vector& strings); void addDecorationId(Id id, Decoration, Id idDecoration); + void addDecorationId(Id id, Decoration, const std::vector& operandIds); void addMemberDecoration(Id, unsigned int member, Decoration, int num = -1); void addMemberDecoration(Id, unsigned int member, Decoration, const char*); + void addMemberDecoration(Id, unsigned int member, Decoration, const std::vector& literals); + void addMemberDecoration(Id, unsigned int member, Decoration, const std::vector& strings); // At the end of what block do the next create*() instructions go? void setBuildPoint(Block* bp) { buildPoint = bp; } From bacaef3237c515e40d1a24722be48c0a0b30f75f Mon Sep 17 00:00:00 2001 From: greg-lunarg Date: Thu, 24 Sep 2020 20:07:15 -0600 Subject: [PATCH 040/365] Update spirv-tools and spirv-headers known goods (#2401) --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index f945e0ac32..289b384bf5 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "13a65b1aee425a97b9ca73d81212d99fd2bf9227" + "commit" : "0a1fb588cd365f7737cb121fdd64553923e0cef6" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "3fdabd0da2932c276b25b9b4a988ba134eba1aa6" + "commit" : "060627f0b0d2fa8581b5acb939f46e3b9e500593" } ] } From 1815d86a224b75abc1dd084789c20f7da3c9fed0 Mon Sep 17 00:00:00 2001 From: craig stout Date: Sat, 26 Sep 2020 13:02:33 -0400 Subject: [PATCH 041/365] [Wconversion] Suppress glslang issue (#2404) The glslang public includes dir contains headers with implicit conversion issues. Add -Wno-conversion to glslang's public config. Bug: 60140 Bug: 58162 Change-Id: Iec27cb4242e9fdceddd6a3e02044a0bccfa0ce36 Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/glslang/+/429054 Reviewed-by: Petr Hosek Co-authored-by: Shai Barack --- BUILD.gn | 1 + 1 file changed, 1 insertion(+) diff --git a/BUILD.gn b/BUILD.gn index 9a6c1bc283..f877078bdc 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -76,6 +76,7 @@ if (!defined(glslang_angle)) { config("glslang_public") { include_dirs = [ "." ] + cflags = [ "-Wno-conversion" ] } config("glslang_hlsl") { From d0e7ed37fc4ee17948a8a6597ce95a4fdab2b769 Mon Sep 17 00:00:00 2001 From: craig stout Date: Sat, 26 Sep 2020 20:43:30 -0400 Subject: [PATCH 042/365] [spirv-remap] Fix undefined behavior in hashing (#2403) There's a statement that intends to generate a 32-bit hashcode, but due to integer promotion, the intermediate values can trigger signed integer overflow, which is undefined behavior. To avoid this, cast at least one operand to unsigned int before multiplying, which will cause the result to be promoted to unsigned int instead of signed int. With this patch, I'm able to build core for qemu-x64 with host_asan-ubsan. Fixed: 60128 Change-Id: Idd644e534116bf29dca8013936ac39901bbe68fc Reviewed-on: https://fuchsia-review.googlesource.com/c/third_party/glslang/+/428254 Reviewed-by: John Bauman Co-authored-by: Drew Fisher --- SPIRV/SPVRemapper.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index 1adc6a3042..56d7f431a7 100644 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -830,7 +830,15 @@ namespace spv { [&](spv::Id& id) { if (thisOpCode != spv::OpNop) { ++idCounter; - const std::uint32_t hashval = opCounter[thisOpCode] * thisOpCode * 50047 + idCounter + fnId * 117; + const std::uint32_t hashval = + // Explicitly cast operands to unsigned int to avoid integer + // promotion to signed int followed by integer overflow, + // which would result in undefined behavior. + static_cast(opCounter[thisOpCode]) + * thisOpCode + * 50047 + + idCounter + + static_cast(fnId) * 117; if (isOldIdUnmapped(id)) localId(id, nextUnusedId(hashval % softTypeIdLimit + firstMappedID)); From 2eed8236d07d50f35c466d723651d86284c60161 Mon Sep 17 00:00:00 2001 From: pheonix Date: Sun, 27 Sep 2020 16:53:18 -0700 Subject: [PATCH 043/365] Add more flexible SpirvToolsDisassemble interface to allow specifying spv_target_env for disassembly output. (#2406) Improve documentation on existing SpirvToolsDisassemble interface. Fix cmake build scripts to account for `spirv-tools` external when -DENABLE_OPT=ON --- SPIRV/SpvTools.cpp | 12 +++++++++--- SPIRV/SpvTools.h | 7 ++++++- StandAlone/CMakeLists.txt | 6 ++++++ gtests/CMakeLists.txt | 6 ++++++ 4 files changed, 27 insertions(+), 4 deletions(-) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 112ac33c5c..fce1fb9bfa 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -44,7 +44,6 @@ #include "SpvTools.h" #include "spirv-tools/optimizer.hpp" -#include "spirv-tools/libspirv.h" namespace glslang { @@ -114,11 +113,18 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source, out << std::endl; } -// Use the SPIRV-Tools disassembler to print SPIR-V. +// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv) +{ + SpirvToolsDisassemble(out, spirv, SPV_ENV_UNIVERSAL_1_3); +} + +// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. +void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, + spv_target_env requested_context) { // disassemble - spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3); + spv_context context = spvContextCreate(requested_context); spv_text text; spv_diagnostic diagnostic = nullptr; spvBinaryToText(context, spirv.data(), spirv.size(), diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h index 7779dfa779..691c9ef496 100644 --- a/SPIRV/SpvTools.h +++ b/SPIRV/SpvTools.h @@ -44,6 +44,7 @@ #ifdef ENABLE_OPT #include #include +#include "spirv-tools/libspirv.h" #endif #include "glslang/MachineIndependent/localintermediate.h" @@ -64,9 +65,13 @@ struct SpvOptions { #ifdef ENABLE_OPT -// Use the SPIRV-Tools disassembler to print SPIR-V. +// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv); +// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. +void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, + spv_target_env requested_context); + // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger*, bool prelegalization); diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 8038c04356..decfac5bc8 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -70,6 +70,12 @@ target_include_directories(glslangValidator PUBLIC $ $) +if(ENABLE_OPT) +target_include_directories(glslangValidator PUBLIC + $ + $) +endif() + if(ENABLE_SPVREMAPPER) set(REMAPPER_SOURCES spirv-remap.cpp) add_executable(spirv-remap ${REMAPPER_SOURCES}) diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 6c48d9c263..f489c9de59 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -83,6 +83,12 @@ if(BUILD_TESTING) ${gmock_SOURCE_DIR}/include ${gtest_SOURCE_DIR}/include) + if(ENABLE_OPT) + target_include_directories(glslangtests PUBLIC + $ + $) + endif() + set(LIBRARIES glslang OSDependent OGLCompiler glslang SPIRV glslang-default-resource-limits) From f05c076e26b04cbcc9bf2df815bbdc9c620d89ad Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Sun, 27 Sep 2020 18:15:41 -0600 Subject: [PATCH 044/365] Revert "Add more flexible SpirvToolsDisassemble interface to allow specifying spv_target_env for disassembly output. (#2406)" This reverts commit 2eed8236d07d50f35c466d723651d86284c60161. --- SPIRV/SpvTools.cpp | 12 +++--------- SPIRV/SpvTools.h | 7 +------ StandAlone/CMakeLists.txt | 6 ------ gtests/CMakeLists.txt | 6 ------ 4 files changed, 4 insertions(+), 27 deletions(-) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index fce1fb9bfa..112ac33c5c 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -44,6 +44,7 @@ #include "SpvTools.h" #include "spirv-tools/optimizer.hpp" +#include "spirv-tools/libspirv.h" namespace glslang { @@ -113,18 +114,11 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source, out << std::endl; } -// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. +// Use the SPIRV-Tools disassembler to print SPIR-V. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv) -{ - SpirvToolsDisassemble(out, spirv, SPV_ENV_UNIVERSAL_1_3); -} - -// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. -void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, - spv_target_env requested_context) { // disassemble - spv_context context = spvContextCreate(requested_context); + spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3); spv_text text; spv_diagnostic diagnostic = nullptr; spvBinaryToText(context, spirv.data(), spirv.size(), diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h index 691c9ef496..7779dfa779 100644 --- a/SPIRV/SpvTools.h +++ b/SPIRV/SpvTools.h @@ -44,7 +44,6 @@ #ifdef ENABLE_OPT #include #include -#include "spirv-tools/libspirv.h" #endif #include "glslang/MachineIndependent/localintermediate.h" @@ -65,13 +64,9 @@ struct SpvOptions { #ifdef ENABLE_OPT -// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. +// Use the SPIRV-Tools disassembler to print SPIR-V. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv); -// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. -void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, - spv_target_env requested_context); - // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger*, bool prelegalization); diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index decfac5bc8..8038c04356 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -70,12 +70,6 @@ target_include_directories(glslangValidator PUBLIC $ $) -if(ENABLE_OPT) -target_include_directories(glslangValidator PUBLIC - $ - $) -endif() - if(ENABLE_SPVREMAPPER) set(REMAPPER_SOURCES spirv-remap.cpp) add_executable(spirv-remap ${REMAPPER_SOURCES}) diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index f489c9de59..6c48d9c263 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -83,12 +83,6 @@ if(BUILD_TESTING) ${gmock_SOURCE_DIR}/include ${gtest_SOURCE_DIR}/include) - if(ENABLE_OPT) - target_include_directories(glslangtests PUBLIC - $ - $) - endif() - set(LIBRARIES glslang OSDependent OGLCompiler glslang SPIRV glslang-default-resource-limits) From d1929f359a1035cb169ec54630c24ae6ce0bcc21 Mon Sep 17 00:00:00 2001 From: pheonix Date: Mon, 5 Oct 2020 08:59:27 -0700 Subject: [PATCH 045/365] Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2408) * Add more flexible SpirvToolsDisassemble interface to allow specifying spv_target_env for disassembly output. Improve documentation on existing SpirvToolsDisassemble interface. * Update pre-processor check - following existing ENABLE_OPT checks. * Fix not-found header paths for glslangValidator and glslangtests. --- SPIRV/SpvTools.cpp | 12 +++++++++--- SPIRV/SpvTools.h | 11 ++++++++--- StandAlone/CMakeLists.txt | 7 ++++++- gtests/CMakeLists.txt | 6 ++++++ 4 files changed, 29 insertions(+), 7 deletions(-) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 112ac33c5c..bcbaeddec4 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -44,7 +44,6 @@ #include "SpvTools.h" #include "spirv-tools/optimizer.hpp" -#include "spirv-tools/libspirv.h" namespace glslang { @@ -114,11 +113,18 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source, out << std::endl; } -// Use the SPIRV-Tools disassembler to print SPIR-V. +// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv) +{ + SpirvToolsDisassemble(out, spirv, spv_target_env::SPV_ENV_UNIVERSAL_1_3); +} + +// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. +void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, + spv_target_env requested_context) { // disassemble - spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3); + spv_context context = spvContextCreate(requested_context); spv_text text; spv_diagnostic diagnostic = nullptr; spvBinaryToText(context, spirv.data(), spirv.size(), diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h index 7779dfa779..3fb3cbacd3 100644 --- a/SPIRV/SpvTools.h +++ b/SPIRV/SpvTools.h @@ -41,9 +41,10 @@ #ifndef GLSLANG_SPV_TOOLS_H #define GLSLANG_SPV_TOOLS_H -#ifdef ENABLE_OPT +#if ENABLE_OPT #include #include +#include "spirv-tools/libspirv.h" #endif #include "glslang/MachineIndependent/localintermediate.h" @@ -62,11 +63,15 @@ struct SpvOptions { bool validate; }; -#ifdef ENABLE_OPT +#if ENABLE_OPT -// Use the SPIRV-Tools disassembler to print SPIR-V. +// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv); +// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. +void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, + spv_target_env requested_context); + // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger*, bool prelegalization); diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 8038c04356..bff9ab617a 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -41,7 +41,6 @@ target_include_directories(glslang-default-resource-limits PUBLIC $ PUBLIC $) - set(SOURCES StandAlone.cpp DirStackFileIncluder.h) add_executable(glslangValidator ${SOURCES}) @@ -70,6 +69,12 @@ target_include_directories(glslangValidator PUBLIC $ $) +if(ENABLE_OPT) + target_include_directories(glslangValidator + PRIVATE ${spirv-tools_SOURCE_DIR}/include + ) +endif(ENABLE_OPT) + if(ENABLE_SPVREMAPPER) set(REMAPPER_SOURCES spirv-remap.cpp) add_executable(spirv-remap ${REMAPPER_SOURCES}) diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 6c48d9c263..0617ff850e 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -83,6 +83,12 @@ if(BUILD_TESTING) ${gmock_SOURCE_DIR}/include ${gtest_SOURCE_DIR}/include) + if(ENABLE_OPT) + target_include_directories(glslangtests + PRIVATE ${spirv-tools_SOURCE_DIR}/include + ) + endif(ENABLE_OPT) + set(LIBRARIES glslang OSDependent OGLCompiler glslang SPIRV glslang-default-resource-limits) From 2b77059502c925180c3c827eab73db6a5bc9aa8e Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Mon, 5 Oct 2020 16:58:31 -0600 Subject: [PATCH 046/365] Revert "Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2408)" See issue #2413. This reverts commit d1929f359a1035cb169ec54630c24ae6ce0bcc21. --- SPIRV/SpvTools.cpp | 12 +++--------- SPIRV/SpvTools.h | 11 +++-------- StandAlone/CMakeLists.txt | 7 +------ gtests/CMakeLists.txt | 6 ------ 4 files changed, 7 insertions(+), 29 deletions(-) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index bcbaeddec4..112ac33c5c 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -44,6 +44,7 @@ #include "SpvTools.h" #include "spirv-tools/optimizer.hpp" +#include "spirv-tools/libspirv.h" namespace glslang { @@ -113,18 +114,11 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source, out << std::endl; } -// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. +// Use the SPIRV-Tools disassembler to print SPIR-V. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv) -{ - SpirvToolsDisassemble(out, spirv, spv_target_env::SPV_ENV_UNIVERSAL_1_3); -} - -// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. -void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, - spv_target_env requested_context) { // disassemble - spv_context context = spvContextCreate(requested_context); + spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3); spv_text text; spv_diagnostic diagnostic = nullptr; spvBinaryToText(context, spirv.data(), spirv.size(), diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h index 3fb3cbacd3..7779dfa779 100644 --- a/SPIRV/SpvTools.h +++ b/SPIRV/SpvTools.h @@ -41,10 +41,9 @@ #ifndef GLSLANG_SPV_TOOLS_H #define GLSLANG_SPV_TOOLS_H -#if ENABLE_OPT +#ifdef ENABLE_OPT #include #include -#include "spirv-tools/libspirv.h" #endif #include "glslang/MachineIndependent/localintermediate.h" @@ -63,15 +62,11 @@ struct SpvOptions { bool validate; }; -#if ENABLE_OPT +#ifdef ENABLE_OPT -// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. +// Use the SPIRV-Tools disassembler to print SPIR-V. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv); -// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. -void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, - spv_target_env requested_context); - // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger*, bool prelegalization); diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index bff9ab617a..8038c04356 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -41,6 +41,7 @@ target_include_directories(glslang-default-resource-limits PUBLIC $ PUBLIC $) + set(SOURCES StandAlone.cpp DirStackFileIncluder.h) add_executable(glslangValidator ${SOURCES}) @@ -69,12 +70,6 @@ target_include_directories(glslangValidator PUBLIC $ $) -if(ENABLE_OPT) - target_include_directories(glslangValidator - PRIVATE ${spirv-tools_SOURCE_DIR}/include - ) -endif(ENABLE_OPT) - if(ENABLE_SPVREMAPPER) set(REMAPPER_SOURCES spirv-remap.cpp) add_executable(spirv-remap ${REMAPPER_SOURCES}) diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 0617ff850e..6c48d9c263 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -83,12 +83,6 @@ if(BUILD_TESTING) ${gmock_SOURCE_DIR}/include ${gtest_SOURCE_DIR}/include) - if(ENABLE_OPT) - target_include_directories(glslangtests - PRIVATE ${spirv-tools_SOURCE_DIR}/include - ) - endif(ENABLE_OPT) - set(LIBRARIES glslang OSDependent OGLCompiler glslang SPIRV glslang-default-resource-limits) From 3ce148638bdc3807316e358dee4a5c9583189ae7 Mon Sep 17 00:00:00 2001 From: jonahryandavis <8729214+jonahryandavis@users.noreply.github.com> Date: Wed, 7 Oct 2020 13:32:49 -0400 Subject: [PATCH 047/365] Disable -Wno-conversion on MSVC compiler (#2410) --- BUILD.gn | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/BUILD.gn b/BUILD.gn index f877078bdc..29256c438b 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -76,7 +76,9 @@ if (!defined(glslang_angle)) { config("glslang_public") { include_dirs = [ "." ] - cflags = [ "-Wno-conversion" ] + if (!is_win || is_clang) { + cflags = [ "-Wno-conversion" ] + } } config("glslang_hlsl") { From 2067d1a93e6edc17f2a6b7e3e5138a9bbcd35ef9 Mon Sep 17 00:00:00 2001 From: David Neto Date: Wed, 7 Oct 2020 18:10:27 -0400 Subject: [PATCH 048/365] Add test case for read-only storage texture passed to helper function (#2414) This is based on spv.paramMemory.frag.out which exercises the writeonly storage image case. This appears to need desktop GLSL. The generated SPIR-V fails validation because the image_write function takes a parameter which is pointer to an OpTypeImage with Unknown format. But the parameters passed in are pointer to OpTypeImage with formats Rgba32f and Rgba16f. The validator rejects this, saying the parameter types must match. --- Test/baseResults/spv.paramMemory.420.frag.out | 139 ++++++++++++++++++ Test/spv.paramMemory.420.frag | 33 +++++ gtests/Spv.FromFile.cpp | 1 + 3 files changed, 173 insertions(+) create mode 100644 Test/baseResults/spv.paramMemory.420.frag.out create mode 100644 Test/spv.paramMemory.420.frag diff --git a/Test/baseResults/spv.paramMemory.420.frag.out b/Test/baseResults/spv.paramMemory.420.frag.out new file mode 100644 index 0000000000..4cdc35f73e --- /dev/null +++ b/Test/baseResults/spv.paramMemory.420.frag.out @@ -0,0 +1,139 @@ +spv.paramMemory.420.frag +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 69 + + Capability Shader + Capability StorageImageReadWithoutFormat + Capability StorageImageWriteWithoutFormat + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 27 66 + ExecutionMode 4 OriginUpperLeft + Source GLSL 420 + SourceExtension "GL_EXT_shader_image_load_formatted" + Name 4 "main" + Name 16 "image_load(I21;vi2;" + Name 14 "image" + Name 15 "coords" + Name 23 "image_store(I21;vi2;vf4;" + Name 20 "image" + Name 21 "coords" + Name 22 "data" + Name 27 "in_coords" + Name 35 "read1" + Name 36 "image1" + Name 37 "param" + Name 40 "read2" + Name 41 "image2" + Name 42 "param" + Name 47 "image3" + Name 51 "param" + Name 53 "param" + Name 57 "image4" + Name 61 "param" + Name 63 "param" + Name 66 "out_color" + Decorate 14(image) Coherent + Decorate 14(image) NonWritable + Decorate 20(image) Coherent + Decorate 20(image) NonReadable + Decorate 27(in_coords) Flat + Decorate 27(in_coords) Location 0 + Decorate 36(image1) DescriptorSet 0 + Decorate 36(image1) Binding 0 + Decorate 36(image1) Coherent + Decorate 36(image1) NonWritable + Decorate 41(image2) DescriptorSet 0 + Decorate 41(image2) Binding 2 + Decorate 41(image2) NonWritable + Decorate 47(image3) DescriptorSet 0 + Decorate 47(image3) Binding 1 + Decorate 47(image3) Coherent + Decorate 47(image3) NonReadable + Decorate 57(image4) DescriptorSet 0 + Decorate 57(image4) Binding 3 + Decorate 57(image4) NonReadable + Decorate 66(out_color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeImage 6(float) 2D nonsampled format:Unknown + 8: TypePointer UniformConstant 7 + 9: TypeInt 32 1 + 10: TypeVector 9(int) 2 + 11: TypePointer Function 10(ivec2) + 12: TypeVector 6(float) 4 + 13: TypeFunction 12(fvec4) 8(ptr) 11(ptr) + 18: TypePointer Function 12(fvec4) + 19: TypeFunction 2 8(ptr) 11(ptr) 18(ptr) + 26: TypePointer Input 10(ivec2) + 27(in_coords): 26(ptr) Variable Input + 36(image1): 8(ptr) Variable UniformConstant + 41(image2): 8(ptr) Variable UniformConstant + 45: TypeImage 6(float) 2D nonsampled format:Rgba32f + 46: TypePointer UniformConstant 45 + 47(image3): 46(ptr) Variable UniformConstant + 49: 6(float) Constant 1056964608 + 55: TypeImage 6(float) 2D nonsampled format:Rgba16f + 56: TypePointer UniformConstant 55 + 57(image4): 56(ptr) Variable UniformConstant + 59: 6(float) Constant 1073741824 + 65: TypePointer Output 12(fvec4) + 66(out_color): 65(ptr) Variable Output + 67: 6(float) Constant 0 + 68: 12(fvec4) ConstantComposite 67 67 67 67 + 4(main): 2 Function None 3 + 5: Label + 35(read1): 18(ptr) Variable Function + 37(param): 11(ptr) Variable Function + 40(read2): 18(ptr) Variable Function + 42(param): 11(ptr) Variable Function + 51(param): 11(ptr) Variable Function + 53(param): 18(ptr) Variable Function + 61(param): 11(ptr) Variable Function + 63(param): 18(ptr) Variable Function + 38: 10(ivec2) Load 27(in_coords) + Store 37(param) 38 + 39: 12(fvec4) FunctionCall 16(image_load(I21;vi2;) 36(image1) 37(param) + Store 35(read1) 39 + 43: 10(ivec2) Load 27(in_coords) + Store 42(param) 43 + 44: 12(fvec4) FunctionCall 16(image_load(I21;vi2;) 41(image2) 42(param) + Store 40(read2) 44 + 48: 12(fvec4) Load 35(read1) + 50: 12(fvec4) VectorTimesScalar 48 49 + 52: 10(ivec2) Load 27(in_coords) + Store 51(param) 52 + Store 53(param) 50 + 54: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 47(image3) 51(param) 53(param) + 58: 12(fvec4) Load 40(read2) + 60: 12(fvec4) VectorTimesScalar 58 59 + 62: 10(ivec2) Load 27(in_coords) + Store 61(param) 62 + Store 63(param) 60 + 64: 2 FunctionCall 23(image_store(I21;vi2;vf4;) 57(image4) 61(param) 63(param) + Store 66(out_color) 68 + Return + FunctionEnd +16(image_load(I21;vi2;): 12(fvec4) Function None 13 + 14(image): 8(ptr) FunctionParameter + 15(coords): 11(ptr) FunctionParameter + 17: Label + 25: 7 Load 14(image) + 28: 10(ivec2) Load 27(in_coords) + 29: 12(fvec4) ImageRead 25 28 + ReturnValue 29 + FunctionEnd +23(image_store(I21;vi2;vf4;): 2 Function None 19 + 20(image): 8(ptr) FunctionParameter + 21(coords): 11(ptr) FunctionParameter + 22(data): 18(ptr) FunctionParameter + 24: Label + 32: 7 Load 20(image) + 33: 10(ivec2) Load 27(in_coords) + 34: 12(fvec4) Load 22(data) + ImageWrite 32 33 34 + Return + FunctionEnd diff --git a/Test/spv.paramMemory.420.frag b/Test/spv.paramMemory.420.frag new file mode 100644 index 0000000000..15f175a273 --- /dev/null +++ b/Test/spv.paramMemory.420.frag @@ -0,0 +1,33 @@ +#version 420 + +// Need this extension to permit passing a formatless readonly image to a helper function. +#extension GL_EXT_shader_image_load_formatted : require + +readonly coherent uniform layout(set = 0, binding = 0) image2D image1; +readonly uniform layout(set = 0, binding = 2) image2D image2; +writeonly coherent uniform layout(set = 0, binding = 1, rgba32f) image2D image3; +writeonly uniform layout(set = 0, binding = 3, rgba16f) image2D image4; + +flat in layout(location = 0) ivec2 in_coords; +out layout(location = 0) vec4 out_color; + +vec4 image_load(readonly coherent image2D image, ivec2 coords) +{ + return imageLoad(image, in_coords); +} + +void image_store(writeonly coherent image2D image, ivec2 coords, vec4 data) +{ + imageStore(image, in_coords, data); +} + +void main() +{ + vec4 read1 = image_load(image1, in_coords); + vec4 read2 = image_load(image2, in_coords); + + image_store(image3, in_coords, read1*0.5); + image_store(image4, in_coords, read2*2.0); + + out_color = vec4(0.0); +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 309fe756ee..df68f5214b 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -376,6 +376,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.offsets.frag", "spv.Operations.frag", "spv.paramMemory.frag", + "spv.paramMemory.420.frag", "spv.precision.frag", "spv.precisionArgs.frag", "spv.precisionNonESSamp.frag", From 69d0c1acc28a9e634ed45ff5fb66b8e6a3fbef81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Mon, 12 Oct 2020 18:08:47 +0200 Subject: [PATCH 049/365] Remove executable bits from code/data files (#2420) --- .gitattributes | 0 README.md | 0 SPIRV/GlslangToSpv.h | 0 SPIRV/spvIR.h | 0 Test/310.frag | 0 Test/baseResults/contradict_0.geom.out | 0 Test/baseResults/cppBad3.vert.out | 0 Test/baseResults/cppBad4.vert.out | 0 Test/baseResults/cppBad5.vert.out | 0 Test/baseResults/cppMerge.frag.out | 0 Test/baseResults/hlsl.earlydepthstencil.frag.out | 0 Test/baseResults/hlsl.singleArgIntPromo.vert.out | 0 Test/baseResults/hlsl.specConstant.frag.out | 0 Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out | 0 Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out | 0 Test/baseResults/link.multiBlocksInvalid.0.0.vert.out | 0 Test/baseResults/link.multiBlocksValid.1.0.vert.out | 0 Test/baseResults/link.vk.differentPC.0.0.frag.out | 0 Test/baseResults/link.vk.differentPC.1.0.frag.out | 0 Test/baseResults/link.vk.matchingPC.0.0.frag.out | 0 Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out | 0 Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out | 0 Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out | 0 Test/baseResults/link.vk.pcNamingValid.0.0.vert.out | 0 Test/baseResults/spv.1.4.NonWritable.frag.out | 0 Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out | 0 Test/baseResults/spv.1.4.OpSelect.frag.out | 0 Test/baseResults/spv.1.4.image.frag.out | 0 Test/baseResults/spv.1.4.sparseTexture.frag.out | 0 Test/baseResults/spv.1.4.texture.frag.out | 0 Test/baseResults/spv.RayGenShader11.rgen.out | 0 Test/baseResults/spv.atomicFloat.comp.out | 0 Test/baseResults/spv.atomicFloat_Error.comp.out | 0 Test/baseResults/spv.bufferhandleUvec2.frag.out | 0 Test/baseResults/spv.ext.World3x4.rahit.out | 0 Test/baseResults/spv.precisionArgs.frag.out | 0 Test/baseResults/spv.precisionTexture.frag.out | 0 Test/baseResults/spv.specConstArrayCheck.vert.out | 0 Test/baseResults/spv.specTexture.frag.out | 0 Test/contradict_0.geom | 0 Test/contradict_1.geom | 0 Test/cppBad4.vert | 0 Test/cppBad5.vert | 0 Test/cppMerge.frag | 0 Test/hlsl.intrinsics.frag | 0 Test/hlsl.singleArgIntPromo.vert | 0 Test/hlsl.specConstant.frag | 0 Test/link.multiAnonBlocksInvalid.0.0.vert | 0 Test/link.multiAnonBlocksInvalid.0.1.vert | 0 Test/link.multiAnonBlocksValid.0.0.vert | 0 Test/link.multiAnonBlocksValid.0.1.vert | 0 Test/link.multiBlocksInvalid.0.0.vert | 0 Test/link.multiBlocksInvalid.0.1.vert | 0 Test/link.multiBlocksValid.1.0.vert | 0 Test/link.multiBlocksValid.1.1.vert | 0 Test/link.vk.differentPC.0.0.frag | 0 Test/link.vk.differentPC.0.1.frag | 0 Test/link.vk.differentPC.0.2.frag | 0 Test/link.vk.differentPC.1.0.frag | 0 Test/link.vk.differentPC.1.1.frag | 0 Test/link.vk.differentPC.1.2.frag | 0 Test/link.vk.matchingPC.0.0.frag | 0 Test/link.vk.matchingPC.0.1.frag | 0 Test/link.vk.matchingPC.0.2.frag | 0 Test/link.vk.multiBlocksValid.0.0.vert | 0 Test/link.vk.multiBlocksValid.0.1.vert | 0 Test/link.vk.multiBlocksValid.1.0.geom | 0 Test/link.vk.multiBlocksValid.1.1.geom | 0 Test/link.vk.pcNamingInvalid.0.0.vert | 0 Test/link.vk.pcNamingInvalid.0.1.vert | 0 Test/link.vk.pcNamingValid.0.0.vert | 0 Test/link.vk.pcNamingValid.0.1.vert | 0 Test/spv.1.4.NonWritable.frag | 0 Test/spv.1.4.OpSelect.frag | 0 Test/spv.atomicFloat.comp | 0 Test/spv.atomicFloat_Error.comp | 0 Test/spv.specConstArrayCheck.vert | 0 glslang/HLSL/hlslParseHelper.cpp | 0 glslang/MachineIndependent/Intermediate.cpp | 0 glslang/MachineIndependent/linkValidate.cpp | 0 glslang/MachineIndependent/preprocessor/PpTokens.cpp | 0 gtests/Hlsl.FromFile.cpp | 0 gtests/Link.FromFile.Vk.cpp | 0 gtests/Link.FromFile.cpp | 0 gtests/TestFixture.h | 0 85 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 .gitattributes mode change 100755 => 100644 README.md mode change 100755 => 100644 SPIRV/GlslangToSpv.h mode change 100755 => 100644 SPIRV/spvIR.h mode change 100755 => 100644 Test/310.frag mode change 100755 => 100644 Test/baseResults/contradict_0.geom.out mode change 100755 => 100644 Test/baseResults/cppBad3.vert.out mode change 100755 => 100644 Test/baseResults/cppBad4.vert.out mode change 100755 => 100644 Test/baseResults/cppBad5.vert.out mode change 100755 => 100644 Test/baseResults/cppMerge.frag.out mode change 100755 => 100644 Test/baseResults/hlsl.earlydepthstencil.frag.out mode change 100755 => 100644 Test/baseResults/hlsl.singleArgIntPromo.vert.out mode change 100755 => 100644 Test/baseResults/hlsl.specConstant.frag.out mode change 100755 => 100644 Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out mode change 100755 => 100644 Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out mode change 100755 => 100644 Test/baseResults/link.multiBlocksInvalid.0.0.vert.out mode change 100755 => 100644 Test/baseResults/link.multiBlocksValid.1.0.vert.out mode change 100755 => 100644 Test/baseResults/link.vk.differentPC.0.0.frag.out mode change 100755 => 100644 Test/baseResults/link.vk.differentPC.1.0.frag.out mode change 100755 => 100644 Test/baseResults/link.vk.matchingPC.0.0.frag.out mode change 100755 => 100644 Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out mode change 100755 => 100644 Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out mode change 100755 => 100644 Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out mode change 100755 => 100644 Test/baseResults/link.vk.pcNamingValid.0.0.vert.out mode change 100755 => 100644 Test/baseResults/spv.1.4.NonWritable.frag.out mode change 100755 => 100644 Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out mode change 100755 => 100644 Test/baseResults/spv.1.4.OpSelect.frag.out mode change 100755 => 100644 Test/baseResults/spv.1.4.image.frag.out mode change 100755 => 100644 Test/baseResults/spv.1.4.sparseTexture.frag.out mode change 100755 => 100644 Test/baseResults/spv.1.4.texture.frag.out mode change 100755 => 100644 Test/baseResults/spv.RayGenShader11.rgen.out mode change 100755 => 100644 Test/baseResults/spv.atomicFloat.comp.out mode change 100755 => 100644 Test/baseResults/spv.atomicFloat_Error.comp.out mode change 100755 => 100644 Test/baseResults/spv.bufferhandleUvec2.frag.out mode change 100755 => 100644 Test/baseResults/spv.ext.World3x4.rahit.out mode change 100755 => 100644 Test/baseResults/spv.precisionArgs.frag.out mode change 100755 => 100644 Test/baseResults/spv.precisionTexture.frag.out mode change 100755 => 100644 Test/baseResults/spv.specConstArrayCheck.vert.out mode change 100755 => 100644 Test/baseResults/spv.specTexture.frag.out mode change 100755 => 100644 Test/contradict_0.geom mode change 100755 => 100644 Test/contradict_1.geom mode change 100755 => 100644 Test/cppBad4.vert mode change 100755 => 100644 Test/cppBad5.vert mode change 100755 => 100644 Test/cppMerge.frag mode change 100755 => 100644 Test/hlsl.intrinsics.frag mode change 100755 => 100644 Test/hlsl.singleArgIntPromo.vert mode change 100755 => 100644 Test/hlsl.specConstant.frag mode change 100755 => 100644 Test/link.multiAnonBlocksInvalid.0.0.vert mode change 100755 => 100644 Test/link.multiAnonBlocksInvalid.0.1.vert mode change 100755 => 100644 Test/link.multiAnonBlocksValid.0.0.vert mode change 100755 => 100644 Test/link.multiAnonBlocksValid.0.1.vert mode change 100755 => 100644 Test/link.multiBlocksInvalid.0.0.vert mode change 100755 => 100644 Test/link.multiBlocksInvalid.0.1.vert mode change 100755 => 100644 Test/link.multiBlocksValid.1.0.vert mode change 100755 => 100644 Test/link.multiBlocksValid.1.1.vert mode change 100755 => 100644 Test/link.vk.differentPC.0.0.frag mode change 100755 => 100644 Test/link.vk.differentPC.0.1.frag mode change 100755 => 100644 Test/link.vk.differentPC.0.2.frag mode change 100755 => 100644 Test/link.vk.differentPC.1.0.frag mode change 100755 => 100644 Test/link.vk.differentPC.1.1.frag mode change 100755 => 100644 Test/link.vk.differentPC.1.2.frag mode change 100755 => 100644 Test/link.vk.matchingPC.0.0.frag mode change 100755 => 100644 Test/link.vk.matchingPC.0.1.frag mode change 100755 => 100644 Test/link.vk.matchingPC.0.2.frag mode change 100755 => 100644 Test/link.vk.multiBlocksValid.0.0.vert mode change 100755 => 100644 Test/link.vk.multiBlocksValid.0.1.vert mode change 100755 => 100644 Test/link.vk.multiBlocksValid.1.0.geom mode change 100755 => 100644 Test/link.vk.multiBlocksValid.1.1.geom mode change 100755 => 100644 Test/link.vk.pcNamingInvalid.0.0.vert mode change 100755 => 100644 Test/link.vk.pcNamingInvalid.0.1.vert mode change 100755 => 100644 Test/link.vk.pcNamingValid.0.0.vert mode change 100755 => 100644 Test/link.vk.pcNamingValid.0.1.vert mode change 100755 => 100644 Test/spv.1.4.NonWritable.frag mode change 100755 => 100644 Test/spv.1.4.OpSelect.frag mode change 100755 => 100644 Test/spv.atomicFloat.comp mode change 100755 => 100644 Test/spv.atomicFloat_Error.comp mode change 100755 => 100644 Test/spv.specConstArrayCheck.vert mode change 100755 => 100644 glslang/HLSL/hlslParseHelper.cpp mode change 100755 => 100644 glslang/MachineIndependent/Intermediate.cpp mode change 100755 => 100644 glslang/MachineIndependent/linkValidate.cpp mode change 100755 => 100644 glslang/MachineIndependent/preprocessor/PpTokens.cpp mode change 100755 => 100644 gtests/Hlsl.FromFile.cpp mode change 100755 => 100644 gtests/Link.FromFile.Vk.cpp mode change 100755 => 100644 gtests/Link.FromFile.cpp mode change 100755 => 100644 gtests/TestFixture.h diff --git a/.gitattributes b/.gitattributes old mode 100755 new mode 100644 diff --git a/README.md b/README.md old mode 100755 new mode 100644 diff --git a/SPIRV/GlslangToSpv.h b/SPIRV/GlslangToSpv.h old mode 100755 new mode 100644 diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h old mode 100755 new mode 100644 diff --git a/Test/310.frag b/Test/310.frag old mode 100755 new mode 100644 diff --git a/Test/baseResults/contradict_0.geom.out b/Test/baseResults/contradict_0.geom.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/cppBad3.vert.out b/Test/baseResults/cppBad3.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/cppBad4.vert.out b/Test/baseResults/cppBad4.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/cppBad5.vert.out b/Test/baseResults/cppBad5.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/cppMerge.frag.out b/Test/baseResults/cppMerge.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/hlsl.singleArgIntPromo.vert.out b/Test/baseResults/hlsl.singleArgIntPromo.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/hlsl.specConstant.frag.out b/Test/baseResults/hlsl.specConstant.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.multiBlocksValid.1.0.vert.out b/Test/baseResults/link.multiBlocksValid.1.0.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.vk.differentPC.0.0.frag.out b/Test/baseResults/link.vk.differentPC.0.0.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.vk.differentPC.1.0.frag.out b/Test/baseResults/link.vk.differentPC.1.0.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.vk.matchingPC.0.0.frag.out b/Test/baseResults/link.vk.matchingPC.0.0.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingInvalid.0.0.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.1.4.NonWritable.frag.out b/Test/baseResults/spv.1.4.NonWritable.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out b/Test/baseResults/spv.1.4.OpEntryPoint.opaqueParams.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.1.4.OpSelect.frag.out b/Test/baseResults/spv.1.4.OpSelect.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.1.4.image.frag.out b/Test/baseResults/spv.1.4.image.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.1.4.sparseTexture.frag.out b/Test/baseResults/spv.1.4.sparseTexture.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.1.4.texture.frag.out b/Test/baseResults/spv.1.4.texture.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.atomicFloat.comp.out b/Test/baseResults/spv.atomicFloat.comp.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.atomicFloat_Error.comp.out b/Test/baseResults/spv.atomicFloat_Error.comp.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.precisionArgs.frag.out b/Test/baseResults/spv.precisionArgs.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.precisionTexture.frag.out b/Test/baseResults/spv.precisionTexture.frag.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.specConstArrayCheck.vert.out b/Test/baseResults/spv.specConstArrayCheck.vert.out old mode 100755 new mode 100644 diff --git a/Test/baseResults/spv.specTexture.frag.out b/Test/baseResults/spv.specTexture.frag.out old mode 100755 new mode 100644 diff --git a/Test/contradict_0.geom b/Test/contradict_0.geom old mode 100755 new mode 100644 diff --git a/Test/contradict_1.geom b/Test/contradict_1.geom old mode 100755 new mode 100644 diff --git a/Test/cppBad4.vert b/Test/cppBad4.vert old mode 100755 new mode 100644 diff --git a/Test/cppBad5.vert b/Test/cppBad5.vert old mode 100755 new mode 100644 diff --git a/Test/cppMerge.frag b/Test/cppMerge.frag old mode 100755 new mode 100644 diff --git a/Test/hlsl.intrinsics.frag b/Test/hlsl.intrinsics.frag old mode 100755 new mode 100644 diff --git a/Test/hlsl.singleArgIntPromo.vert b/Test/hlsl.singleArgIntPromo.vert old mode 100755 new mode 100644 diff --git a/Test/hlsl.specConstant.frag b/Test/hlsl.specConstant.frag old mode 100755 new mode 100644 diff --git a/Test/link.multiAnonBlocksInvalid.0.0.vert b/Test/link.multiAnonBlocksInvalid.0.0.vert old mode 100755 new mode 100644 diff --git a/Test/link.multiAnonBlocksInvalid.0.1.vert b/Test/link.multiAnonBlocksInvalid.0.1.vert old mode 100755 new mode 100644 diff --git a/Test/link.multiAnonBlocksValid.0.0.vert b/Test/link.multiAnonBlocksValid.0.0.vert old mode 100755 new mode 100644 diff --git a/Test/link.multiAnonBlocksValid.0.1.vert b/Test/link.multiAnonBlocksValid.0.1.vert old mode 100755 new mode 100644 diff --git a/Test/link.multiBlocksInvalid.0.0.vert b/Test/link.multiBlocksInvalid.0.0.vert old mode 100755 new mode 100644 diff --git a/Test/link.multiBlocksInvalid.0.1.vert b/Test/link.multiBlocksInvalid.0.1.vert old mode 100755 new mode 100644 diff --git a/Test/link.multiBlocksValid.1.0.vert b/Test/link.multiBlocksValid.1.0.vert old mode 100755 new mode 100644 diff --git a/Test/link.multiBlocksValid.1.1.vert b/Test/link.multiBlocksValid.1.1.vert old mode 100755 new mode 100644 diff --git a/Test/link.vk.differentPC.0.0.frag b/Test/link.vk.differentPC.0.0.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.differentPC.0.1.frag b/Test/link.vk.differentPC.0.1.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.differentPC.0.2.frag b/Test/link.vk.differentPC.0.2.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.differentPC.1.0.frag b/Test/link.vk.differentPC.1.0.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.differentPC.1.1.frag b/Test/link.vk.differentPC.1.1.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.differentPC.1.2.frag b/Test/link.vk.differentPC.1.2.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.matchingPC.0.0.frag b/Test/link.vk.matchingPC.0.0.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.matchingPC.0.1.frag b/Test/link.vk.matchingPC.0.1.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.matchingPC.0.2.frag b/Test/link.vk.matchingPC.0.2.frag old mode 100755 new mode 100644 diff --git a/Test/link.vk.multiBlocksValid.0.0.vert b/Test/link.vk.multiBlocksValid.0.0.vert old mode 100755 new mode 100644 diff --git a/Test/link.vk.multiBlocksValid.0.1.vert b/Test/link.vk.multiBlocksValid.0.1.vert old mode 100755 new mode 100644 diff --git a/Test/link.vk.multiBlocksValid.1.0.geom b/Test/link.vk.multiBlocksValid.1.0.geom old mode 100755 new mode 100644 diff --git a/Test/link.vk.multiBlocksValid.1.1.geom b/Test/link.vk.multiBlocksValid.1.1.geom old mode 100755 new mode 100644 diff --git a/Test/link.vk.pcNamingInvalid.0.0.vert b/Test/link.vk.pcNamingInvalid.0.0.vert old mode 100755 new mode 100644 diff --git a/Test/link.vk.pcNamingInvalid.0.1.vert b/Test/link.vk.pcNamingInvalid.0.1.vert old mode 100755 new mode 100644 diff --git a/Test/link.vk.pcNamingValid.0.0.vert b/Test/link.vk.pcNamingValid.0.0.vert old mode 100755 new mode 100644 diff --git a/Test/link.vk.pcNamingValid.0.1.vert b/Test/link.vk.pcNamingValid.0.1.vert old mode 100755 new mode 100644 diff --git a/Test/spv.1.4.NonWritable.frag b/Test/spv.1.4.NonWritable.frag old mode 100755 new mode 100644 diff --git a/Test/spv.1.4.OpSelect.frag b/Test/spv.1.4.OpSelect.frag old mode 100755 new mode 100644 diff --git a/Test/spv.atomicFloat.comp b/Test/spv.atomicFloat.comp old mode 100755 new mode 100644 diff --git a/Test/spv.atomicFloat_Error.comp b/Test/spv.atomicFloat_Error.comp old mode 100755 new mode 100644 diff --git a/Test/spv.specConstArrayCheck.vert b/Test/spv.specConstArrayCheck.vert old mode 100755 new mode 100644 diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp old mode 100755 new mode 100644 diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp old mode 100755 new mode 100644 diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp old mode 100755 new mode 100644 diff --git a/glslang/MachineIndependent/preprocessor/PpTokens.cpp b/glslang/MachineIndependent/preprocessor/PpTokens.cpp old mode 100755 new mode 100644 diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp old mode 100755 new mode 100644 diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp old mode 100755 new mode 100644 diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp old mode 100755 new mode 100644 diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h old mode 100755 new mode 100644 From f4f1d8a352ca1908943aea2ad8c54b39b4879080 Mon Sep 17 00:00:00 2001 From: Triang3l Date: Mon, 12 Oct 2020 19:33:01 +0300 Subject: [PATCH 050/365] SPIR-V: Remove SpvTools.h include from disassemble.cpp (#2417) disassemble.cpp appears not to be using anything from SpvTools.h, but the inclusion of it prevents standalone building of the SPIR-V portion (for instance, when needed purely for generation and disassembly) without SPIRV-Tools dependency. --- SPIRV/disassemble.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp index a95ded49d2..73c988c5b3 100644 --- a/SPIRV/disassemble.cpp +++ b/SPIRV/disassemble.cpp @@ -46,7 +46,6 @@ #include "disassemble.h" #include "doc.h" -#include "SpvTools.h" namespace spv { extern "C" { From dac38b8fceeee7baa25c3a7d863bfe6dfe46de59 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Fri, 16 Oct 2020 12:47:38 +0100 Subject: [PATCH 051/365] Add basic GN configurations This allows glslang to be build standalone using the gn build system. To build with gn: ``` gclient sync --gclientfile=standalone.gclient gn gen out/default cd out/default ninja ``` --- .gitignore | 2 + .gn | 39 +++++++++++++++++ DEPS | 77 +++++++++++++++++++++++++++++++++ build_overrides/build.gni | 39 +++++++++++++++++ build_overrides/glslang.gni | 2 +- build_overrides/spirv_tools.gni | 38 ++++++++++++++++ standalone.gclient | 42 ++++++++++++++++++ 7 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 .gn create mode 100644 DEPS create mode 100644 build_overrides/build.gni create mode 100644 build_overrides/spirv_tools.gni create mode 100644 standalone.gclient diff --git a/.gitignore b/.gitignore index 790b880b6d..d6e197dfe0 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,7 @@ *.a *.so *.exe +*.gclient_entries .vscode/ tags TAGS @@ -11,3 +12,4 @@ Test/localResults/ External/googletest External/spirv-tools out/ +third_party/llvm-build diff --git a/.gn b/.gn new file mode 100644 index 0000000000..5befb80190 --- /dev/null +++ b/.gn @@ -0,0 +1,39 @@ +# Copyright (C) 2020 The Khronos Group Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of The Khronos Group Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +buildconfig = "//build/config/BUILDCONFIG.gn" + +default_args = { + clang_use_chrome_plugins = false + use_custom_libcxx = false +} diff --git a/DEPS b/DEPS new file mode 100644 index 0000000000..9c0e045a2f --- /dev/null +++ b/DEPS @@ -0,0 +1,77 @@ +# Copyright (C) 2020 The Khronos Group Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of The Khronos Group Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +use_relative_paths = True + +gclient_gn_args_file = 'build/config/gclient_args.gni' + +vars = { + 'chromium_git': 'https://chromium.googlesource.com', + 'build_with_chromium': False, +} + +deps = { + + './build': { + 'url': '{chromium_git}/chromium/src/build.git@85ee3b7692e5284f08bd3c9459fb5685eed7b838', + 'condition': 'not build_with_chromium', + }, + + './buildtools': { + 'url': '{chromium_git}/chromium/src/buildtools.git@4be464e050b3d05060471788f926b34c641db9fd', + 'condition': 'not build_with_chromium', + }, + + './tools/clang': { + 'url': '{chromium_git}/chromium/src/tools/clang.git@3a982adabb720aa8f3e3885d40bf3fe506990157', + 'condition': 'not build_with_chromium', + }, + +} + +hooks = [ + { + 'name': 'sysroot_x64', + 'pattern': '.', + 'condition': 'checkout_linux and (checkout_x64 and not build_with_chromium)', + 'action': ['python', './build/linux/sysroot_scripts/install-sysroot.py', + '--arch=x64'], + }, + { + # Note: On Win, this should run after win_toolchain, as it may use it. + 'name': 'clang', + 'pattern': '.', + 'action': ['python', './tools/clang/scripts/update.py'], + 'condition': 'not build_with_chromium', + }, +] diff --git a/build_overrides/build.gni b/build_overrides/build.gni new file mode 100644 index 0000000000..3101a86ce8 --- /dev/null +++ b/build_overrides/build.gni @@ -0,0 +1,39 @@ +# Copyright (C) 2020 The Khronos Group Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of The Khronos Group Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +declare_args() { + build_with_chromium = false + linux_use_bundled_binutils_override = true + ignore_elf32_limitations = true + use_system_xcode = true +} diff --git a/build_overrides/glslang.gni b/build_overrides/glslang.gni index 500578ccd7..003c78f044 100644 --- a/build_overrides/glslang.gni +++ b/build_overrides/glslang.gni @@ -34,4 +34,4 @@ # These are variables that are overridable by projects that include glslang. # The path to glslang dependencies. -glslang_spirv_tools_dir = "//Externals/spirv-tools" +glslang_spirv_tools_dir = "//External/spirv-tools" diff --git a/build_overrides/spirv_tools.gni b/build_overrides/spirv_tools.gni new file mode 100644 index 0000000000..7cf7005d06 --- /dev/null +++ b/build_overrides/spirv_tools.gni @@ -0,0 +1,38 @@ +# Copyright (C) 2020 The Khronos Group Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of The Khronos Group Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# We are building inside glslang +spirv_tools_standalone = false + +# Paths to SPIRV-Tools dependencies +spirv_tools_spirv_headers_dir = "//External/spirv-tools/external/spirv-headers" diff --git a/standalone.gclient b/standalone.gclient new file mode 100644 index 0000000000..de067dbcdf --- /dev/null +++ b/standalone.gclient @@ -0,0 +1,42 @@ +# Copyright (C) 2020 The Khronos Group Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of The Khronos Group Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +solutions = [ + { "name" : ".", + "url" : "https://github.com/KhronosGroup/glslang", + "deps_file" : "DEPS", + "managed" : False, + "custom_deps" : { + }, + }, +] From f915cc2b2b4f8bbd9d039c66475c76f297043465 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Fri, 16 Oct 2020 14:26:05 +0100 Subject: [PATCH 052/365] Add GN build instructions to README.md --- README.md | 31 ++++++++++++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 30e85f8bb9..fa1fe60189 100644 --- a/README.md +++ b/README.md @@ -88,7 +88,7 @@ The applied stage-specific rules are based on the file extension: There is also a non-shader extension * `.conf` for a configuration file of limits, see usage statement for example -## Building +## Building (CMake) Instead of building manually, you can also download the binaries for your platform directly from the [master-tot release][master-tot-release] on GitHub. @@ -184,6 +184,35 @@ cmake --build . --config Release --target install If using MSVC, after running CMake to configure, use the Configuration Manager to check the `INSTALL` project. +### Building (GN) + +glslang can also be built with the [GN build system](https://gn.googlesource.com/gn/). + +#### 1) Install `depot_tools` + +Download [depot_tools.zip](https://storage.googleapis.com/chrome-infra/depot_tools.zip), +extract to a directory, and add this directory to your `PATH`. + +#### 2) Synchronize dependencies and generate build files + +This only needs to be done once after updating `glslang`. + +With the current directory set to your `glslang` checkout, type: + +```bash +gclient sync --gclientfile=standalone.gclient +gn gen out/Default +``` + +#### 3) Build + +With the current directory set to your `glslang` checkout, type: + +```bash +cd out/Default +ninja +``` + ### If you need to change the GLSL grammar The grammar in `glslang/MachineIndependent/glslang.y` has to be recompiled with From 5b99b448b3dbc77f60a482b36f4e8fa9d0ff4a52 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Mon, 19 Oct 2020 22:21:12 +0100 Subject: [PATCH 053/365] Fix uninitialized use of TIntermediate::resource (#2424) TIntermediate was constructed without initializing any of the `resources` fields, and `TProgram::linkStage()` was not calling `TIntermediate::setLimits()` after constructing new `TIntermediate`s for non-first stages. Fields of `resources` were then read in `TIntermediate::finalCheck()` triggering undefined behavior. This CL makes three changes: (1) `TIntermediate::setLimits()` is now called for non-first stages by copying the `firstIntermediate`'s limits. This ensures that the `resources` fields is initialized, fixing the bug. (2) `TIntermediate::resources` is now wrapped in a `MustBeAssigned<>` helper struct, asserting in non-release builds that this field is always initialized before reading. (3) `TIntermediate::resources` is now zero-initialized, so that if the `TIntermediate::resources` field is not set in a release build (and so the `assert()` will be disabled) behavior is still deterministic. Fixes #2423 --- glslang/MachineIndependent/ShaderLang.cpp | 2 +- glslang/MachineIndependent/linkValidate.cpp | 4 ++-- .../MachineIndependent/localintermediate.h | 21 ++++++++++++++++++- 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 9d7f37b098..c6030bd7c2 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -2016,7 +2016,7 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) intermediate[stage] = new TIntermediate(stage, firstIntermediate->getVersion(), firstIntermediate->getProfile()); - + intermediate[stage]->setLimits(firstIntermediate->getLimits()); // The new TIntermediate must use the same origin as the original TIntermediates. // Otherwise linking will fail due to different coordinate systems. diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index a8e031bc6f..1796fedaa0 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -736,10 +736,10 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) // "The resulting stride (implicit or explicit), when divided by 4, must be less than or equal to the // implementation-dependent constant gl_MaxTransformFeedbackInterleavedComponents." - if (xfbBuffers[b].stride > (unsigned int)(4 * resources.maxTransformFeedbackInterleavedComponents)) { + if (xfbBuffers[b].stride > (unsigned int)(4 * resources->maxTransformFeedbackInterleavedComponents)) { error(infoSink, "xfb_stride is too large:"); infoSink.info.prefix(EPrefixError); - infoSink.info << " xfb_buffer " << (unsigned int)b << ", components (1/4 stride) needed are " << xfbBuffers[b].stride/4 << ", gl_MaxTransformFeedbackInterleavedComponents is " << resources.maxTransformFeedbackInterleavedComponents << "\n"; + infoSink.info << " xfb_buffer " << (unsigned int)b << ", components (1/4 stride) needed are " << xfbBuffers[b].stride/4 << ", gl_MaxTransformFeedbackInterleavedComponents is " << resources->maxTransformFeedbackInterleavedComponents << "\n"; } } diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 3cdc1f10cf..f8747015ec 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -259,6 +259,23 @@ class TNumericFeatures { unsigned int features; }; +// MustBeAssigned wraps a T, asserting that it has been assigned with +// operator =() before attempting to read with operator T() or operator ->(). +// Used to catch cases where fields are read before they have been assigned. +template +class MustBeAssigned +{ +public: + MustBeAssigned() = default; + MustBeAssigned(const T& v) : value(v) {} + operator const T&() const { assert(isSet); return value; } + const T* operator ->() const { assert(isSet); return &value; } + MustBeAssigned& operator = (const T& v) { value = v; isSet = true; return *this; } +private: + T value; + bool isSet = false; +}; + // // Set of helper functions to help parse and build the tree. // @@ -270,6 +287,7 @@ class TIntermediate { profile(p), version(v), #endif treeRoot(0), + resources(TBuiltInResource{}), numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false), invertY(false), useStorageBuffer(false), @@ -406,6 +424,7 @@ class TIntermediate { int getNumErrors() const { return numErrors; } void addPushConstantCount() { ++numPushConstants; } void setLimits(const TBuiltInResource& r) { resources = r; } + const TBuiltInResource& getLimits() const { return resources; } bool postProcess(TIntermNode*, EShLanguage); void removeTree(); @@ -955,7 +974,7 @@ class TIntermediate { SpvVersion spvVersion; TIntermNode* treeRoot; std::set requestedExtensions; // cumulation of all enabled or required extensions; not connected to what subset of the shader used them - TBuiltInResource resources; + MustBeAssigned resources; int numEntryPoints; int numErrors; int numPushConstants; From b2b1e2da46b6193726e9a23e70fd0e1777e53f1f Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Tue, 20 Oct 2020 11:12:26 +0100 Subject: [PATCH 054/365] Kokoro: Add configurations for GN presubmit Issue: #2421 --- kokoro/linux-clang-gn/build-docker.sh | 52 +++++++++++++++++++++++++++ kokoro/linux-clang-gn/build.sh | 48 +++++++++++++++++++++++++ 2 files changed, 100 insertions(+) create mode 100755 kokoro/linux-clang-gn/build-docker.sh create mode 100755 kokoro/linux-clang-gn/build.sh diff --git a/kokoro/linux-clang-gn/build-docker.sh b/kokoro/linux-clang-gn/build-docker.sh new file mode 100755 index 0000000000..d2ee0e9e16 --- /dev/null +++ b/kokoro/linux-clang-gn/build-docker.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +# Copyright (C) 2020 Google, Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +set -e # Fail on any error. +set -x # Display commands being run. + +echo "Fetching depot_tools..." +mkdir -p /tmp/depot_tools +curl https://storage.googleapis.com/chrome-infra/depot_tools.zip -o /tmp/depot_tools.zip +unzip /tmp/depot_tools.zip -d /tmp/depot_tools +rm /tmp/depot_tools.zip +export PATH="/tmp/depot_tools:$PATH" + +echo "Syncing client..." +gclient sync --gclientfile=standalone.gclient +gn gen out/Default + +echo "Building..." +cd out/Default +ninja diff --git a/kokoro/linux-clang-gn/build.sh b/kokoro/linux-clang-gn/build.sh new file mode 100755 index 0000000000..2f459d2de8 --- /dev/null +++ b/kokoro/linux-clang-gn/build.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# Copyright (C) 2020 Google, Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +set -e # Fail on any error. + +SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd )" +ROOT_DIR="$( cd "${SCRIPT_DIR}/../.." >/dev/null 2>&1 && pwd )" + +docker run --rm -i \ + --volume "${ROOT_DIR}:${ROOT_DIR}" \ + --workdir "${ROOT_DIR}" \ + --env ROOT_DIR="${ROOT_DIR}" \ + --env SCRIPT_DIR="${SCRIPT_DIR}" \ + --env BUILD_SHARED_LIBS="${BUILD_SHARED_LIBS:-0}" \ + --entrypoint "${SCRIPT_DIR}/build-docker.sh" \ + "gcr.io/shaderc-build/radial-build:latest" From a315b5633bb59a7105d98bbebd6dad4ec75a5ab4 Mon Sep 17 00:00:00 2001 From: Chow Date: Thu, 2 Jul 2020 15:50:36 +0800 Subject: [PATCH 055/365] Add GL_EXT_fragment_shading_rate --- SPIRV/GLSL.ext.KHR.h | 1 + SPIRV/GlslangToSpv.cpp | 10 +++ SPIRV/doc.cpp | 4 + SPIRV/spirv.hpp | 22 +++++ ...v.builtin.PrimitiveShadingRateEXT.vert.out | 53 +++++++++++ .../spv.builtin.ShadingRateEXT.frag.out | 36 ++++++++ Test/spv.builtin.PrimitiveShadingRateEXT.vert | 28 ++++++ Test/spv.builtin.ShadingRateEXT.frag | 8 ++ glslang/Include/BaseTypes.h | 6 ++ glslang/MachineIndependent/Initialize.cpp | 87 +++++++++++++++++++ glslang/MachineIndependent/ParseHelper.cpp | 2 + glslang/MachineIndependent/Versions.cpp | 3 + glslang/MachineIndependent/Versions.h | 1 + gtests/Spv.FromFile.cpp | 2 + known_good.json | 4 +- 15 files changed, 265 insertions(+), 2 deletions(-) create mode 100644 Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out create mode 100644 Test/baseResults/spv.builtin.ShadingRateEXT.frag.out create mode 100644 Test/spv.builtin.PrimitiveShadingRateEXT.vert create mode 100644 Test/spv.builtin.ShadingRateEXT.frag diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index d783a8f299..2be968e10a 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -48,4 +48,5 @@ static const char* const E_SPV_KHR_shader_clock = "SPV_KHR_shade static const char* const E_SPV_KHR_non_semantic_info = "SPV_KHR_non_semantic_info"; static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_tracing"; static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query"; +static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate"; #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index c85541603f..d32c6464be 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -769,6 +769,16 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addCapability(spv::CapabilityStencilExportEXT); return spv::BuiltInFragStencilRefEXT; + case glslang::EbvShadingRateKHR: + builder.addExtension(spv::E_SPV_KHR_fragment_shading_rate); + builder.addCapability(spv::CapabilityFragmentShadingRateKHR); + return spv::BuiltInShadingRateKHR; + + case glslang::EbvPrimitiveShadingRateKHR: + builder.addExtension(spv::E_SPV_KHR_fragment_shading_rate); + builder.addCapability(spv::CapabilityFragmentShadingRateKHR); + return spv::BuiltInPrimitiveShadingRateKHR; + case glslang::EbvInvocationId: return spv::BuiltInInvocationId; case glslang::EbvTessLevelInner: return spv::BuiltInTessLevelInner; case glslang::EbvTessLevelOuter: return spv::BuiltInTessLevelOuter; diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 1d052f8c29..b1d7eb70f7 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -372,6 +372,8 @@ const char* BuiltInString(int builtIn) case 4424: return "BaseVertex"; case 4425: return "BaseInstance"; case 4426: return "DrawIndex"; + case 4432: return "PrimitiveShadingRateKHR"; + case 4444: return "ShadingRateKHR"; case 5014: return "FragStencilRefEXT"; case 4992: return "BaryCoordNoPerspAMD"; @@ -952,6 +954,8 @@ const char* CapabilityString(int info) case CapabilityFragmentShaderPixelInterlockEXT: return "CapabilityFragmentShaderPixelInterlockEXT"; case CapabilityFragmentShaderShadingRateInterlockEXT: return "CapabilityFragmentShaderShadingRateInterlockEXT"; + case CapabilityFragmentShadingRateKHR: return "FragmentShadingRateKHR"; + case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; case CapabilityShaderClockKHR: return "ShaderClockKHR"; diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 35482ea5e2..0cccd21cff 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -558,8 +558,10 @@ enum BuiltIn { BuiltInBaseVertex = 4424, BuiltInBaseInstance = 4425, BuiltInDrawIndex = 4426, + BuiltInPrimitiveShadingRateKHR = 4432, BuiltInDeviceIndex = 4438, BuiltInViewIndex = 4440, + BuiltInShadingRateKHR = 4444, BuiltInBaryCoordNoPerspAMD = 4992, BuiltInBaryCoordNoPerspCentroidAMD = 4993, BuiltInBaryCoordNoPerspSampleAMD = 4994, @@ -870,6 +872,7 @@ enum Capability { CapabilityGroupNonUniformQuad = 68, CapabilityShaderLayer = 69, CapabilityShaderViewportIndex = 70, + CapabilityFragmentShadingRateKHR = 4422, CapabilitySubgroupBallotKHR = 4423, CapabilityDrawParameters = 4427, CapabilitySubgroupVoteKHR = 4431, @@ -1024,6 +1027,22 @@ enum RayQueryCandidateIntersectionType { RayQueryCandidateIntersectionTypeMax = 0x7fffffff, }; +enum FragmentShadingRateShift { + FragmentShadingRateVertical2PixelsShift = 0, + FragmentShadingRateVertical4PixelsShift = 1, + FragmentShadingRateHorizontal2PixelsShift = 2, + FragmentShadingRateHorizontal4PixelsShift = 3, + FragmentShadingRateMax = 0x7fffffff, +}; + +enum FragmentShadingRateMask { + FragmentShadingRateMaskNone = 0, + FragmentShadingRateVertical2PixelsMask = 0x00000001, + FragmentShadingRateVertical4PixelsMask = 0x00000002, + FragmentShadingRateHorizontal2PixelsMask = 0x00000004, + FragmentShadingRateHorizontal4PixelsMask = 0x00000008, +}; + enum Op { OpNop = 0, OpUndef = 1, @@ -1369,6 +1388,7 @@ enum Op { OpPtrEqual = 401, OpPtrNotEqual = 402, OpPtrDiff = 403, + OpTerminateInvocation = 4416, OpSubgroupBallotKHR = 4421, OpSubgroupFirstInvocationKHR = 4422, OpSubgroupAllKHR = 4428, @@ -1939,6 +1959,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpPtrEqual: *hasResult = true; *hasResultType = true; break; case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; case OpPtrDiff: *hasResult = true; *hasResultType = true; break; + case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; @@ -2164,6 +2185,7 @@ inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } +inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } } // end namespace spv diff --git a/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out b/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out new file mode 100644 index 0000000000..8daa79ee04 --- /dev/null +++ b/Test/baseResults/spv.builtin.PrimitiveShadingRateEXT.vert.out @@ -0,0 +1,53 @@ +spv.builtin.PrimitiveShadingRateEXT.vert +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 26 + + Capability Shader + Capability FragmentShadingRateKHR + Extension "SPV_KHR_fragment_shading_rate" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 8 16 + Source GLSL 450 + SourceExtension "GL_EXT_fragment_shading_rate" + Name 4 "main" + Name 8 "id" + Name 16 "gl_PrimitiveShadingRateEXT" + Decorate 8(id) Location 0 + Decorate 16(gl_PrimitiveShadingRateEXT) BuiltIn PrimitiveShadingRateKHR + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Input 6(int) + 8(id): 7(ptr) Variable Input + 15: TypePointer Output 6(int) +16(gl_PrimitiveShadingRateEXT): 15(ptr) Variable Output + 17: 6(int) Constant 5 + 19: 6(int) Constant 9 + 21: 6(int) Constant 6 + 23: 6(int) Constant 10 + 4(main): 2 Function None 3 + 5: Label + 9: 6(int) Load 8(id) + SelectionMerge 14 None + Switch 9 14 + case 0: 10 + case 1: 11 + case 2: 12 + case 3: 13 + 10: Label + Store 16(gl_PrimitiveShadingRateEXT) 17 + Branch 14 + 11: Label + Store 16(gl_PrimitiveShadingRateEXT) 19 + Branch 14 + 12: Label + Store 16(gl_PrimitiveShadingRateEXT) 21 + Branch 14 + 13: Label + Store 16(gl_PrimitiveShadingRateEXT) 23 + Branch 14 + 14: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out new file mode 100644 index 0000000000..95b94d2534 --- /dev/null +++ b/Test/baseResults/spv.builtin.ShadingRateEXT.frag.out @@ -0,0 +1,36 @@ +spv.builtin.ShadingRateEXT.frag +WARNING: 0:5: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: + "precision mediump int; precision highp float;" + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 12 + + Capability Shader + Capability FragmentShadingRateKHR + Extension "SPV_KHR_fragment_shading_rate" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 10 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_fragment_shading_rate" + Name 4 "main" + Name 8 "val" + Name 10 "gl_ShadingRateEXT" + Decorate 8(val) Location 0 + Decorate 10(gl_ShadingRateEXT) Flat + Decorate 10(gl_ShadingRateEXT) BuiltIn ShadingRateKHR + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Output 6(int) + 8(val): 7(ptr) Variable Output + 9: TypePointer Input 6(int) +10(gl_ShadingRateEXT): 9(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 11: 6(int) Load 10(gl_ShadingRateEXT) + Store 8(val) 11 + Return + FunctionEnd diff --git a/Test/spv.builtin.PrimitiveShadingRateEXT.vert b/Test/spv.builtin.PrimitiveShadingRateEXT.vert new file mode 100644 index 0000000000..6fd98c3e5f --- /dev/null +++ b/Test/spv.builtin.PrimitiveShadingRateEXT.vert @@ -0,0 +1,28 @@ +#version 450 + +#extension GL_EXT_fragment_shading_rate : enable + +layout(location = 0) in int id; + +void main() +{ + switch (id) + { + case 0: + // V2 | H2 => 5 + gl_PrimitiveShadingRateEXT = gl_ShadingRateFlag2VerticalPixelsEXT | gl_ShadingRateFlag2HorizontalPixelsEXT; + break; + case 1: + // V2 | H4 => 9 + gl_PrimitiveShadingRateEXT = gl_ShadingRateFlag2VerticalPixelsEXT | gl_ShadingRateFlag4HorizontalPixelsEXT; + break; + case 2: + // V4 | H2 => 6 + gl_PrimitiveShadingRateEXT = gl_ShadingRateFlag4VerticalPixelsEXT | gl_ShadingRateFlag2HorizontalPixelsEXT; + break; + case 3: + // V4 | H4 => 10 + gl_PrimitiveShadingRateEXT = gl_ShadingRateFlag4VerticalPixelsEXT | gl_ShadingRateFlag4HorizontalPixelsEXT; + break; + } +} \ No newline at end of file diff --git a/Test/spv.builtin.ShadingRateEXT.frag b/Test/spv.builtin.ShadingRateEXT.frag new file mode 100644 index 0000000000..616baec81d --- /dev/null +++ b/Test/spv.builtin.ShadingRateEXT.frag @@ -0,0 +1,8 @@ +#version 450 + +#extension GL_EXT_fragment_shading_rate : enable + +out highp int val; +void main () { + val = gl_ShadingRateEXT; +} diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index b69eaebf2d..55bdd25da5 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -228,6 +228,9 @@ enum TBuiltInVariable { EbvViewIndex, EbvDeviceIndex, + EbvShadingRateKHR, + EbvPrimitiveShadingRateKHR, + EbvFragSizeEXT, EbvFragInvocationCountEXT, @@ -480,6 +483,9 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvWarpID: return "WarpIDNV"; case EbvSMID: return "SMIDNV"; + case EbvShadingRateKHR: return "ShadingRateKHR"; + case EbvPrimitiveShadingRateKHR: return "PrimitiveShadingRateKHR"; + default: return "unknown built-in variable"; } } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 8d5d04fb43..0ce2583b3d 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -4928,6 +4928,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangVertex].append( + "out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate + "\n"); + } //============================================================================ // @@ -5041,6 +5046,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) { + stageBuiltins[EShLangGeometry].append( + "out highp int gl_PrimitiveShadingRateEXT;" // GL_EXT_fragment_shading_rate + "\n"); + } + //============================================================================ // // Define the interface to the tessellation control shader. @@ -5338,6 +5349,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in vec3 gl_BaryCoordNoPerspNV;" ); + if (version >= 450) + stageBuiltins[EShLangFragment].append( + "flat in int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate + ); + } else { // ES profile @@ -5396,6 +5412,10 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in vec3 gl_BaryCoordNV;" "in vec3 gl_BaryCoordNoPerspNV;" ); + if (version >= 310) + stageBuiltins[EShLangFragment].append( + "flat in highp int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate + ); } #endif @@ -5692,6 +5712,18 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2 "\n"); } + + // Adding these to common built-ins triggers an assert due to a memory corruption in related code when testing + // So instead add to each stage individually, avoiding the GLSLang bug + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) { + for (int stage=EShLangVertex; stage(stage)].append("const highp int gl_ShadingRateFlag2VerticalPixelsEXT = 1;\n"); + stageBuiltins[static_cast(stage)].append("const highp int gl_ShadingRateFlag4VerticalPixelsEXT = 2;\n"); + stageBuiltins[static_cast(stage)].append("const highp int gl_ShadingRateFlag2HorizontalPixelsEXT = 4;\n"); + stageBuiltins[static_cast(stage)].append("const highp int gl_ShadingRateFlag4HorizontalPixelsEXT = 8;\n"); + } + } #endif // !GLSLANG_WEB // printf("%s\n", commonBuiltins.c_str()); @@ -7650,6 +7682,20 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } + + if (language == EShLangGeometry || language == EShLangVertex) { + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 450)) { + symbolTable.setVariableExtensions("gl_PrimitiveShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate); + BuiltInVariable("gl_PrimitiveShadingRateEXT", EbvPrimitiveShadingRateKHR, symbolTable); + + symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + } + } + #endif // !GLSLANG_WEB break; @@ -8156,6 +8202,17 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } symbolTable.setFunctionExtensions("helperInvocationEXT", 1, &E_GL_EXT_demote_to_helper_invocation); + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 450)) { + symbolTable.setVariableExtensions("gl_ShadingRateEXT", 1, &E_GL_EXT_fragment_shading_rate); + BuiltInVariable("gl_ShadingRateEXT", EbvShadingRateKHR, symbolTable); + + symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + } #endif // !GLSLANG_WEB break; @@ -8288,6 +8345,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("dFdyCoarse", 1, &E_GL_NV_compute_shader_derivatives); symbolTable.setFunctionExtensions("fwidthCoarse", 1, &E_GL_NV_compute_shader_derivatives); } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 450)) { + symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + } #endif // !GLSLANG_WEB break; @@ -8437,6 +8502,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 450)) { + symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + } break; case EShLangMeshNV: @@ -8581,6 +8653,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } + + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 450)) { + symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + } break; case EShLangTaskNV: @@ -8681,6 +8761,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_WarpIDNV", EbvWarpID, symbolTable); BuiltInVariable("gl_SMIDNV", EbvSMID, symbolTable); } + if ((profile == EEsProfile && version >= 310) || + (profile != EEsProfile && version >= 450)) { + symbolTable.setVariableExtensions("gl_ShadingRateFlag2VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4VerticalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag2HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + symbolTable.setVariableExtensions("gl_ShadingRateFlag4HorizontalPixelsEXT", 1, &E_GL_EXT_fragment_shading_rate); + } break; #endif diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 86a5a37866..b9b37fb9ae 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -4226,6 +4226,8 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS (identifier == "gl_FragCoord" && ((nonEsRedecls && version >= 150) || esRedecls)) || identifier == "gl_ClipDistance" || identifier == "gl_CullDistance" || + identifier == "gl_ShadingRateEXT" || + identifier == "gl_PrimitiveShadingRateEXT" || identifier == "gl_FrontColor" || identifier == "gl_BackColor" || identifier == "gl_FrontSecondaryColor" || diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 896fd5ae20..92d8d8052f 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -327,6 +327,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable; extensionBehavior[E_GL_EXT_blend_func_extended] = EBhDisable; extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable; + extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -371,6 +372,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_YUV_target 1\n" "#define GL_EXT_shader_texture_lod 1\n" "#define GL_EXT_shadow_samplers 1\n" + "#define GL_EXT_fragment_shading_rate 1\n" // AEP "#define GL_ANDROID_extension_pack_es31a 1\n" @@ -463,6 +465,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_buffer_reference_uvec2 1\n" "#define GL_EXT_demote_to_helper_invocation 1\n" "#define GL_EXT_debug_printf 1\n" + "#define GL_EXT_fragment_shading_rate 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 f52f605ea8..7c38de3912 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -199,6 +199,7 @@ const char* const E_GL_EXT_ray_query = "GL_EXT_ray_query" const char* const E_GL_EXT_ray_flags_primitive_culling = "GL_EXT_ray_flags_primitive_culling"; const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended"; const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions"; +const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index df68f5214b..c0781567ab 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -446,6 +446,8 @@ INSTANTIATE_TEST_SUITE_P( "spv.samplerlessTextureFunctions.frag", "spv.smBuiltins.vert", "spv.smBuiltins.frag", + "spv.builtin.PrimitiveShadingRateEXT.vert", + "spv.builtin.ShadingRateEXT.frag", })), FileNameAsCustomTestSuffix ); diff --git a/known_good.json b/known_good.json index 289b384bf5..1ee683d608 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "0a1fb588cd365f7737cb121fdd64553923e0cef6" + "commit" : "a1d38174b1f7d2651c718ae661886d606cb50a32" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "060627f0b0d2fa8581b5acb939f46e3b9e500593" + "commit" : "05836bdba63e7debce9fa9feaed42f20cd43af9d" } ] } From 490eba591db48872db3d430426f6dd163ac44d74 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Tue, 20 Oct 2020 14:46:15 -0600 Subject: [PATCH 056/365] SPV: Update to the latest SPIR-V header, includes variable-rate shading --- SPIRV/spirv.hpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 35482ea5e2..26b35bb489 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -274,6 +274,8 @@ enum ImageFormat { ImageFormatRg8ui = 37, ImageFormatR16ui = 38, ImageFormatR8ui = 39, + ImageFormatR64ui = 40, + ImageFormatR64i = 41, ImageFormatMax = 0x7fffffff, }; @@ -558,8 +560,10 @@ enum BuiltIn { BuiltInBaseVertex = 4424, BuiltInBaseInstance = 4425, BuiltInDrawIndex = 4426, + BuiltInPrimitiveShadingRateKHR = 4432, BuiltInDeviceIndex = 4438, BuiltInViewIndex = 4440, + BuiltInShadingRateKHR = 4444, BuiltInBaryCoordNoPerspAMD = 4992, BuiltInBaryCoordNoPerspCentroidAMD = 4993, BuiltInBaryCoordNoPerspSampleAMD = 4994, @@ -870,6 +874,7 @@ enum Capability { CapabilityGroupNonUniformQuad = 68, CapabilityShaderLayer = 69, CapabilityShaderViewportIndex = 70, + CapabilityFragmentShadingRateKHR = 4422, CapabilitySubgroupBallotKHR = 4423, CapabilityDrawParameters = 4427, CapabilitySubgroupVoteKHR = 4431, @@ -900,6 +905,7 @@ enum Capability { CapabilityFragmentMaskAMD = 5010, CapabilityStencilExportEXT = 5013, CapabilityImageReadWriteLodAMD = 5015, + CapabilityInt64ImageEXT = 5016, CapabilityShaderClockKHR = 5055, CapabilitySampleMaskOverrideCoverageNV = 5249, CapabilityGeometryShaderPassthroughNV = 5251, @@ -1024,6 +1030,22 @@ enum RayQueryCandidateIntersectionType { RayQueryCandidateIntersectionTypeMax = 0x7fffffff, }; +enum FragmentShadingRateShift { + FragmentShadingRateVertical2PixelsShift = 0, + FragmentShadingRateVertical4PixelsShift = 1, + FragmentShadingRateHorizontal2PixelsShift = 2, + FragmentShadingRateHorizontal4PixelsShift = 3, + FragmentShadingRateMax = 0x7fffffff, +}; + +enum FragmentShadingRateMask { + FragmentShadingRateMaskNone = 0, + FragmentShadingRateVertical2PixelsMask = 0x00000001, + FragmentShadingRateVertical4PixelsMask = 0x00000002, + FragmentShadingRateHorizontal2PixelsMask = 0x00000004, + FragmentShadingRateHorizontal4PixelsMask = 0x00000008, +}; + enum Op { OpNop = 0, OpUndef = 1, @@ -1369,6 +1391,7 @@ enum Op { OpPtrEqual = 401, OpPtrNotEqual = 402, OpPtrDiff = 403, + OpTerminateInvocation = 4416, OpSubgroupBallotKHR = 4421, OpSubgroupFirstInvocationKHR = 4422, OpSubgroupAllKHR = 4428, @@ -1939,6 +1962,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpPtrEqual: *hasResult = true; *hasResultType = true; break; case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; case OpPtrDiff: *hasResult = true; *hasResultType = true; break; + case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; @@ -2164,6 +2188,7 @@ inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } +inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } } // end namespace spv From 0f52e7ef1216a5c6b3d198bea4097f371c063d95 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Wed, 21 Oct 2020 13:36:50 +0100 Subject: [PATCH 057/365] Fix GN build and presubmits Add missing `.cfg` files for GN presubmit. Add missing `recursedeps` in the `DEPS` file. Call `./update_glslang_sources.py` before attempting to build. Add more GN spew to the `.gitignore` file. --- .gitignore | 9 +++++-- DEPS | 5 ++++ README.md | 1 + kokoro/linux-clang-gn/build-docker.sh | 3 +++ kokoro/linux-clang-gn/build.sh | 3 ++- kokoro/linux-clang-gn/continuous.cfg | 35 +++++++++++++++++++++++++++ kokoro/linux-clang-gn/presubmit.cfg | 35 +++++++++++++++++++++++++++ 7 files changed, 88 insertions(+), 3 deletions(-) create mode 100644 kokoro/linux-clang-gn/continuous.cfg create mode 100644 kokoro/linux-clang-gn/presubmit.cfg diff --git a/.gitignore b/.gitignore index d6e197dfe0..ab25cec2de 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ *.a *.so *.exe -*.gclient_entries .vscode/ tags TAGS @@ -12,4 +11,10 @@ Test/localResults/ External/googletest External/spirv-tools out/ -third_party/llvm-build + +# GN generated files +.cipd/ +*.gclient_entries +third_party/ +buildtools/ +tools/ diff --git a/DEPS b/DEPS index 9c0e045a2f..2f5fa8ef89 100644 --- a/DEPS +++ b/DEPS @@ -75,3 +75,8 @@ hooks = [ 'condition': 'not build_with_chromium', }, ] + +recursedeps = [ + # buildtools provides clang_format, libc++, and libc++abi + 'buildtools', +] diff --git a/README.md b/README.md index fa1fe60189..7ad4ace96e 100644 --- a/README.md +++ b/README.md @@ -200,6 +200,7 @@ This only needs to be done once after updating `glslang`. With the current directory set to your `glslang` checkout, type: ```bash +./update_glslang_sources.py gclient sync --gclientfile=standalone.gclient gn gen out/Default ``` diff --git a/kokoro/linux-clang-gn/build-docker.sh b/kokoro/linux-clang-gn/build-docker.sh index d2ee0e9e16..1035ab88ce 100755 --- a/kokoro/linux-clang-gn/build-docker.sh +++ b/kokoro/linux-clang-gn/build-docker.sh @@ -36,6 +36,9 @@ set -e # Fail on any error. set -x # Display commands being run. +echo "Fetching external projects..." +./update_glslang_sources.py + echo "Fetching depot_tools..." mkdir -p /tmp/depot_tools curl https://storage.googleapis.com/chrome-infra/depot_tools.zip -o /tmp/depot_tools.zip diff --git a/kokoro/linux-clang-gn/build.sh b/kokoro/linux-clang-gn/build.sh index 2f459d2de8..563432a1ad 100755 --- a/kokoro/linux-clang-gn/build.sh +++ b/kokoro/linux-clang-gn/build.sh @@ -43,6 +43,7 @@ docker run --rm -i \ --workdir "${ROOT_DIR}" \ --env ROOT_DIR="${ROOT_DIR}" \ --env SCRIPT_DIR="${SCRIPT_DIR}" \ - --env BUILD_SHARED_LIBS="${BUILD_SHARED_LIBS:-0}" \ --entrypoint "${SCRIPT_DIR}/build-docker.sh" \ "gcr.io/shaderc-build/radial-build:latest" + +sudo chown -R "$(id -u):$(id -g)" "${ROOT_DIR}" diff --git a/kokoro/linux-clang-gn/continuous.cfg b/kokoro/linux-clang-gn/continuous.cfg new file mode 100644 index 0000000000..1b19146787 --- /dev/null +++ b/kokoro/linux-clang-gn/continuous.cfg @@ -0,0 +1,35 @@ +# Copyright (C) 2020 Google, Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# Continuous build configuration. +build_file: "glslang/kokoro/linux-clang-gn/build.sh" diff --git a/kokoro/linux-clang-gn/presubmit.cfg b/kokoro/linux-clang-gn/presubmit.cfg new file mode 100644 index 0000000000..a72b9a887e --- /dev/null +++ b/kokoro/linux-clang-gn/presubmit.cfg @@ -0,0 +1,35 @@ +# Copyright (C) 2020 Google, Inc. +# +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following +# disclaimer in the documentation and/or other materials provided +# with the distribution. +# +# Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived +# from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +# COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +# POSSIBILITY OF SUCH DAMAGE. + +# Presubmit build configuration. +build_file: "glslang/kokoro/linux-clang-gn/build.sh" From f6e0fe8600f3ec44d6a91c8adcdd087e037c364f Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Fri, 23 Oct 2020 22:54:35 +0800 Subject: [PATCH 058/365] HLSL: Add support for printf(). Translate printf() to what GL_EXT_debug_printf has done. HLSL could define non-constant string variable and we don't have such features in SPIR-V, so just support constant string variable. --- SPIRV/GlslangToSpv.cpp | 6 + Test/baseResults/hlsl.printf.comp.out | 178 +++++++++++++++++++++++ Test/hlsl.printf.comp | 11 ++ glslang/HLSL/hlslGrammar.cpp | 5 +- glslang/HLSL/hlslParseHelper.cpp | 12 +- glslang/HLSL/hlslParseables.cpp | 4 +- glslang/Include/Types.h | 1 + glslang/MachineIndependent/intermOut.cpp | 3 + gtests/Hlsl.FromFile.cpp | 1 + 9 files changed, 216 insertions(+), 5 deletions(-) create mode 100644 Test/baseResults/hlsl.printf.comp.out create mode 100644 Test/hlsl.printf.comp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index d32c6464be..5b7f89a56b 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1720,6 +1720,12 @@ void TGlslangToSpvTraverser::visitSymbol(glslang::TIntermSymbol* symbol) if (symbol->getType().getQualifier().isSpecConstant()) spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); +#ifdef ENABLE_HLSL + // Skip symbol handling if it is string-typed + if (symbol->getBasicType() == glslang::EbtString) + return; +#endif + // getSymbolId() will set up all the IO decorations on the first call. // Formal function parameters were mapped during makeFunctions(). spv::Id id = getSymbolId(symbol); diff --git a/Test/baseResults/hlsl.printf.comp.out b/Test/baseResults/hlsl.printf.comp.out new file mode 100644 index 0000000000..ea31c3533d --- /dev/null +++ b/Test/baseResults/hlsl.printf.comp.out @@ -0,0 +1,178 @@ +hlsl.printf.comp +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:4 Function Definition: @main( ( temp void) +0:4 Function Parameters: +0:? Sequence +0:5 Debug printf ( temp void) +0:5 Constant: +0:5 "first string" +0:6 Debug printf ( temp void) +0:6 Constant: +0:6 "please print this message." +0:7 Debug printf ( temp void) +0:7 Constant: +0:7 "Variables are: %d %d %.2f" +0:7 Constant: +0:7 1 (const uint) +0:7 Constant: +0:7 2 (const uint) +0:7 Constant: +0:7 1.500000 +0:8 Debug printf ( temp void) +0:8 Constant: +0:8 "Integers are: %d %d %d" +0:8 Constant: +0:8 1 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 3 (const int) +0:9 Debug printf ( temp void) +0:9 Constant: +0:9 "More: %d %d %d %d %d %d %d %d %d %d" +0:9 Constant: +0:9 1 (const int) +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 3 (const int) +0:9 Constant: +0:9 4 (const int) +0:9 Constant: +0:9 5 (const int) +0:9 Constant: +0:9 6 (const int) +0:9 Constant: +0:9 7 (const int) +0:9 Constant: +0:9 8 (const int) +0:9 Constant: +0:9 9 (const int) +0:9 Constant: +0:9 10 (const int) +0:4 Function Definition: main( ( temp void) +0:4 Function Parameters: +0:? Sequence +0:4 Function Call: @main( ( temp void) +0:? Linker Objects +0:? 'first' ( const string) +0:? "first string" + + +Linked compute stage: + + +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:4 Function Definition: @main( ( temp void) +0:4 Function Parameters: +0:? Sequence +0:5 Debug printf ( temp void) +0:5 Constant: +0:5 "first string" +0:6 Debug printf ( temp void) +0:6 Constant: +0:6 "please print this message." +0:7 Debug printf ( temp void) +0:7 Constant: +0:7 "Variables are: %d %d %.2f" +0:7 Constant: +0:7 1 (const uint) +0:7 Constant: +0:7 2 (const uint) +0:7 Constant: +0:7 1.500000 +0:8 Debug printf ( temp void) +0:8 Constant: +0:8 "Integers are: %d %d %d" +0:8 Constant: +0:8 1 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 3 (const int) +0:9 Debug printf ( temp void) +0:9 Constant: +0:9 "More: %d %d %d %d %d %d %d %d %d %d" +0:9 Constant: +0:9 1 (const int) +0:9 Constant: +0:9 2 (const int) +0:9 Constant: +0:9 3 (const int) +0:9 Constant: +0:9 4 (const int) +0:9 Constant: +0:9 5 (const int) +0:9 Constant: +0:9 6 (const int) +0:9 Constant: +0:9 7 (const int) +0:9 Constant: +0:9 8 (const int) +0:9 Constant: +0:9 9 (const int) +0:9 Constant: +0:9 10 (const int) +0:4 Function Definition: main( ( temp void) +0:4 Function Parameters: +0:? Sequence +0:4 Function Call: @main( ( temp void) +0:? Linker Objects +0:? 'first' ( const string) +0:? "first string" + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 36 + + Capability Shader + Extension "SPV_KHR_non_semantic_info" + 1: ExtInstImport "GLSL.std.450" + 9: ExtInstImport "NonSemantic.DebugPrintf" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + 8: String "first string" + 11: String "please print this message." + 13: String "Variables are: %d %d %.2f" + 20: String "Integers are: %d %d %d" + 26: String "More: %d %d %d %d %d %d %d %d %d %d" + Source HLSL 500 + Name 4 "main" + Name 6 "@main(" + 2: TypeVoid + 3: TypeFunction 2 + 14: TypeInt 32 0 + 15: 14(int) Constant 1 + 16: 14(int) Constant 2 + 17: TypeFloat 32 + 18: 17(float) Constant 1069547520 + 21: TypeInt 32 1 + 22: 21(int) Constant 1 + 23: 21(int) Constant 2 + 24: 21(int) Constant 3 + 27: 21(int) Constant 4 + 28: 21(int) Constant 5 + 29: 21(int) Constant 6 + 30: 21(int) Constant 7 + 31: 21(int) Constant 8 + 32: 21(int) Constant 9 + 33: 21(int) Constant 10 + 4(main): 2 Function None 3 + 5: Label + 35: 2 FunctionCall 6(@main() + Return + FunctionEnd + 6(@main(): 2 Function None 3 + 7: Label + 10: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 8 + 12: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 11 + 19: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 13 15 16 18 + 25: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 20 22 23 24 + 34: 2 ExtInst 9(NonSemantic.DebugPrintf) 1(DebugPrintf) 26 22 23 24 27 28 29 30 31 32 33 + Return + FunctionEnd diff --git a/Test/hlsl.printf.comp b/Test/hlsl.printf.comp new file mode 100644 index 0000000000..d117299a94 --- /dev/null +++ b/Test/hlsl.printf.comp @@ -0,0 +1,11 @@ +const string first = "first string"; + +[numthreads(1,1,1)] +void main() { + printf(first); + printf("please print this message."); + printf("Variables are: %d %d %.2f", 1u, 2u, 1.5f); + printf("Integers are: %d %d %d", 1, 2, 3); + printf("More: %d %d %d %d %d %d %d %d %d %d", 1, 2, 3, 4, 5, 6, 7, 8, 9, 10); +} + diff --git a/glslang/HLSL/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp index 5bfc53fe5c..f30c64097c 100644 --- a/glslang/HLSL/hlslGrammar.cpp +++ b/glslang/HLSL/hlslGrammar.cpp @@ -480,8 +480,9 @@ bool HlslGrammar::acceptDeclaration(TIntermNode*& nodeList) } // TODO: things scoped within an annotation need their own name space; - // TODO: strings are not yet handled. - if (variableType.getBasicType() != EbtString && parseContext.getAnnotationNestingLevel() == 0) { + // TODO: non-constant strings are not yet handled. + if (!(variableType.getBasicType() == EbtString && !variableType.getQualifier().isConstant()) && + parseContext.getAnnotationNestingLevel() == 0) { if (typedefDecl) parseContext.declareTypedef(idToken.loc, *fullName, variableType); else if (variableType.getBasicType() == EbtBlock) { diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index 3150eacfb6..ea31837e86 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -7628,7 +7628,17 @@ const TFunction* HlslParseContext::findFunction(const TSourceLoc& loc, TFunction bool tie = false; // send to the generic selector - const TFunction* bestMatch = selectFunction(candidateList, call, convertible, better, tie); + const TFunction* bestMatch = nullptr; + + // printf has var args and is in the symbol table as "printf()", + // mangled to "printf(" + if (call.getName() == "printf") { + TSymbol* symbol = symbolTable.find("printf(", &builtIn); + if (symbol) + return symbol->getAsFunction(); + } + + bestMatch = selectFunction(candidateList, call, convertible, better, tie); if (bestMatch == nullptr) { // If there is nothing selected by allowing only up-conversions (to a larger linearize() value), diff --git a/glslang/HLSL/hlslParseables.cpp b/glslang/HLSL/hlslParseables.cpp index 61c820bc94..025cb5e11f 100644 --- a/glslang/HLSL/hlslParseables.cpp +++ b/glslang/HLSL/hlslParseables.cpp @@ -605,7 +605,7 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c { "noise", "S", "F", "V", "F", EShLangPS, false }, { "normalize", nullptr, nullptr, "V", "F", EShLangAll, false }, { "pow", nullptr, nullptr, "SVM,", "F,", EShLangAll, false }, - // { "printf", "-", "-", "", "", EShLangAll, false }, TODO: varargs + { "printf", nullptr, nullptr, "-", "-", EShLangAll, false }, { "Process2DQuadTessFactorsAvg", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangHS, false }, { "Process2DQuadTessFactorsMax", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangHS, false }, { "Process2DQuadTessFactorsMin", "-", "-", "V4,V2,>V4,>V2,", "F,,,,", EShLangHS, false }, @@ -1107,7 +1107,7 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil // symbolTable.relateToOperator("noise", EOpNoise); // TODO: check return type symbolTable.relateToOperator("normalize", EOpNormalize); symbolTable.relateToOperator("pow", EOpPow); - // symbolTable.relateToOperator("printf", EOpPrintf); + symbolTable.relateToOperator("printf", EOpDebugPrintf); // symbolTable.relateToOperator("Process2DQuadTessFactorsAvg"); // symbolTable.relateToOperator("Process2DQuadTessFactorsMax"); // symbolTable.relateToOperator("Process2DQuadTessFactorsMin"); diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 235ea3f1d5..514fa10c8d 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -1986,6 +1986,7 @@ class TType { case EbtAccStruct: return "accelerationStructureNV"; case EbtRayQuery: return "rayQueryEXT"; case EbtReference: return "reference"; + case EbtString: return "string"; #endif default: return "unknown type"; } diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index f23a7058ab..0239e99c55 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -1321,6 +1321,9 @@ static void OutputConstantUnion(TInfoSink& out, const TIntermTyped* node, const out.debug << buf << "\n"; } break; + case EbtString: + out.debug << "\"" << constUnion[i].getSConst()->c_str() << "\"\n"; + break; default: out.info.message(EPrefixInternalError, "Unknown constant", node->getLoc()); break; diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 224ea59d28..4d1cb50b24 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -308,6 +308,7 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.pp.vert", "main"}, {"hlsl.pp.line.frag", "main"}, {"hlsl.precise.frag", "main"}, + {"hlsl.printf.comp", "main"}, {"hlsl.promote.atomic.frag", "main"}, {"hlsl.promote.binary.frag", "main"}, {"hlsl.promote.vec1.frag", "main"}, From ed8bd0453f73095f1e56bbd7b999c5c35f104dac Mon Sep 17 00:00:00 2001 From: Jaebaek Seo Date: Mon, 2 Nov 2020 12:49:31 -0500 Subject: [PATCH 059/365] Do not use PropagateLineInfoPass and RedundantLineInfoElimPass (#2440) * Do not use PropagateLineInfoPass and RedundantLineInfoElimPass Since spirv-opt will remove PropagateLineInfoPass and RedundantLineInfoElimPass, glslang should not use it. spirv-opt will propagate the line instructions and eliminate the redundant lines by default in IR loading/emission. * Update known_good.json for spirv-tool --- SPIRV/SpvTools.cpp | 8 +------- known_good.json | 2 +- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 112ac33c5c..8ba9799246 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -174,10 +174,7 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector // line information into all SPIR-V instructions. This avoids loss of // information when instructions are deleted or moved. Later, remove // redundant information to minimize final SPRIR-V size. - if (options->generateDebugInfo) { - optimizer.RegisterPass(spvtools::CreatePropagateLineInfoPass()); - } - else if (options->stripDebugInfo) { + if (options->stripDebugInfo) { optimizer.RegisterPass(spvtools::CreateStripDebugInfoPass()); } optimizer.RegisterPass(spvtools::CreateWrapOpKillPass()); @@ -207,9 +204,6 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector } optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); optimizer.RegisterPass(spvtools::CreateCFGCleanupPass()); - if (options->generateDebugInfo) { - optimizer.RegisterPass(spvtools::CreateRedundantLineInfoElimPass()); - } spvtools::OptimizerOptions spvOptOptions; optimizer.SetTargetEnv(MapToSpirvToolsEnv(intermediate.getSpv(), logger)); diff --git a/known_good.json b/known_good.json index 1ee683d608..5c498dccff 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "a1d38174b1f7d2651c718ae661886d606cb50a32" + "commit" : "56d0f50357a192602216bfc4873e714905323e35" }, { "name" : "spirv-tools/external/spirv-headers", From 56350cadfe88ca847e920a1ac377b700b84190c7 Mon Sep 17 00:00:00 2001 From: Sidney Just Date: Mon, 2 Nov 2020 11:27:40 -0800 Subject: [PATCH 060/365] Support for CapabilityShaderViewportIndex and CapabilityShaderLayer (#2432) * When targeting SPIR-V 1.5, using gl_ViewportIndex will emit OpCapability ShaderViewportIndex and using gl_Layer will emit OpCapability CapabilityShaderLayer. OpCapability ShaderViewportIndexLayerEXT will only get emitted if the target < SPIR-V 1.5 * When using one of the viewport/layer arrays extensions, fallback to OpCapability ShaderViewportIndexLayerEXT, even when targeting SPIR-V 1.5 * Revert "When using one of the viewport/layer arrays extensions, fallback to OpCapability ShaderViewportIndexLayerEXT, even when targeting SPIR-V 1.5" This reverts commit dccca82f4076ea6e2bc01dd6d1e5d290c59fab20. * Using gl_Layer and gl_ViewportIndex outside of the geometry shader stage still requires one of the viewport extensions even when targeting SPIR-V 1.5 (Fixes a problem introduced by 670536b663f396815645b2f907f0ee92117b44f0) --- SPIRV/GlslangToSpv.cpp | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 1d153c0dee..0b6c62b7f1 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -714,8 +714,12 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI glslangIntermediate->getStage() == EShLangTessControl || glslangIntermediate->getStage() == EShLangTessEvaluation) { - builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5); - builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT); + if (builder.getSpvVersion() < spv::Spv_1_5) { + builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5); + builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT); + } + else + builder.addCapability(spv::CapabilityShaderViewportIndex); } return spv::BuiltInViewportIndex; @@ -739,8 +743,11 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI glslangIntermediate->getStage() == EShLangTessControl || glslangIntermediate->getStage() == EShLangTessEvaluation) { - builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5); - builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT); + if (builder.getSpvVersion() < spv::Spv_1_5) { + builder.addIncorporatedExtension(spv::E_SPV_EXT_shader_viewport_index_layer, spv::Spv_1_5); + builder.addCapability(spv::CapabilityShaderViewportIndexLayerEXT); + } else + builder.addCapability(spv::CapabilityShaderLayer); } return spv::BuiltInLayer; From c897c3bc239a957f1a62557b1ddeee781250fa78 Mon Sep 17 00:00:00 2001 From: pheonix Date: Mon, 2 Nov 2020 13:40:50 -0800 Subject: [PATCH 061/365] Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2442) * Add new SpirvToolsDisassemble API interface + Improve Doc on existing API interface (#2408) * Add more flexible SpirvToolsDisassemble interface to allow specifying spv_target_env for disassembly output. Improve documentation on existing SpirvToolsDisassemble interface. * Update pre-processor check - following existing ENABLE_OPT checks. * Fix not-found header paths for glslangValidator and glslangtests. * Add spirv_tools/include path where there is an ENABLE_OPT=1 in the BUILD.gn configuration. --- BUILD.gn | 12 +++++++++--- SPIRV/SpvTools.cpp | 12 +++++++++--- SPIRV/SpvTools.h | 11 ++++++++--- StandAlone/CMakeLists.txt | 7 ++++++- gtests/CMakeLists.txt | 6 ++++++ 5 files changed, 38 insertions(+), 10 deletions(-) diff --git a/BUILD.gn b/BUILD.gn index 29256c438b..a23ff967d1 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -246,6 +246,8 @@ template("glslang_sources_common") { ] } + include_dirs = [ "${target_gen_dir}/include" ] + deps = [ ":glslang_build_info" ] if (invoker.enable_opt) { @@ -253,10 +255,9 @@ template("glslang_sources_common") { "${spirv_tools_dir}:spvtools_opt", "${spirv_tools_dir}:spvtools_val", ] + include_dirs += [ "${spirv_tools_dir}/include" ] } - include_dirs = [ "${target_gen_dir}/include" ] - configs -= _configs_to_remove configs += _configs_to_add } @@ -302,7 +303,10 @@ executable("glslang_validator") { ] public_configs = [ ":glslang_hlsl" ] - include_dirs = [ "${target_gen_dir}/include" ] + include_dirs = [ + "${target_gen_dir}/include", + "${spirv_tools_dir}/include", + ] configs -= _configs_to_remove configs += _configs_to_add @@ -313,6 +317,8 @@ executable("spirv-remap") { defines = [ "ENABLE_OPT=1" ] deps = [ ":glslang_sources" ] + include_dirs += [ "${spirv_tools_dir}/include" ] + configs -= _configs_to_remove configs += _configs_to_add } diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 8ba9799246..16d051a9b2 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -44,7 +44,6 @@ #include "SpvTools.h" #include "spirv-tools/optimizer.hpp" -#include "spirv-tools/libspirv.h" namespace glslang { @@ -114,11 +113,18 @@ void OptimizerMesssageConsumer(spv_message_level_t level, const char *source, out << std::endl; } -// Use the SPIRV-Tools disassembler to print SPIR-V. +// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv) +{ + SpirvToolsDisassemble(out, spirv, spv_target_env::SPV_ENV_UNIVERSAL_1_3); +} + +// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. +void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, + spv_target_env requested_context) { // disassemble - spv_context context = spvContextCreate(SPV_ENV_UNIVERSAL_1_3); + spv_context context = spvContextCreate(requested_context); spv_text text; spv_diagnostic diagnostic = nullptr; spvBinaryToText(context, spirv.data(), spirv.size(), diff --git a/SPIRV/SpvTools.h b/SPIRV/SpvTools.h index 7779dfa779..3fb3cbacd3 100644 --- a/SPIRV/SpvTools.h +++ b/SPIRV/SpvTools.h @@ -41,9 +41,10 @@ #ifndef GLSLANG_SPV_TOOLS_H #define GLSLANG_SPV_TOOLS_H -#ifdef ENABLE_OPT +#if ENABLE_OPT #include #include +#include "spirv-tools/libspirv.h" #endif #include "glslang/MachineIndependent/localintermediate.h" @@ -62,11 +63,15 @@ struct SpvOptions { bool validate; }; -#ifdef ENABLE_OPT +#if ENABLE_OPT -// Use the SPIRV-Tools disassembler to print SPIR-V. +// Use the SPIRV-Tools disassembler to print SPIR-V using a SPV_ENV_UNIVERSAL_1_3 environment. void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv); +// Use the SPIRV-Tools disassembler to print SPIR-V with a provided SPIR-V environment. +void SpirvToolsDisassemble(std::ostream& out, const std::vector& spirv, + spv_target_env requested_context); + // Apply the SPIRV-Tools validator to generated SPIR-V. void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector& spirv, spv::SpvBuildLogger*, bool prelegalization); diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 8038c04356..bff9ab617a 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -41,7 +41,6 @@ target_include_directories(glslang-default-resource-limits PUBLIC $ PUBLIC $) - set(SOURCES StandAlone.cpp DirStackFileIncluder.h) add_executable(glslangValidator ${SOURCES}) @@ -70,6 +69,12 @@ target_include_directories(glslangValidator PUBLIC $ $) +if(ENABLE_OPT) + target_include_directories(glslangValidator + PRIVATE ${spirv-tools_SOURCE_DIR}/include + ) +endif(ENABLE_OPT) + if(ENABLE_SPVREMAPPER) set(REMAPPER_SOURCES spirv-remap.cpp) add_executable(spirv-remap ${REMAPPER_SOURCES}) diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 6c48d9c263..0617ff850e 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -83,6 +83,12 @@ if(BUILD_TESTING) ${gmock_SOURCE_DIR}/include ${gtest_SOURCE_DIR}/include) + if(ENABLE_OPT) + target_include_directories(glslangtests + PRIVATE ${spirv-tools_SOURCE_DIR}/include + ) + endif(ENABLE_OPT) + set(LIBRARIES glslang OSDependent OGLCompiler glslang SPIRV glslang-default-resource-limits) From d550bebee919179c9e332a0ab28a67f8fe3ca239 Mon Sep 17 00:00:00 2001 From: Courtney Goeltzenleuchter Date: Mon, 2 Nov 2020 21:22:55 -0700 Subject: [PATCH 062/365] Fix build error with Chromium & ANGLE (#2446) Getting error about undefined symbol (include_dir) at line 320. Was trying to append to a non-existant variable. Bug #2445 --- BUILD.gn | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BUILD.gn b/BUILD.gn index a23ff967d1..973ca98b55 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -317,7 +317,7 @@ executable("spirv-remap") { defines = [ "ENABLE_OPT=1" ] deps = [ ":glslang_sources" ] - include_dirs += [ "${spirv_tools_dir}/include" ] + include_dirs = [ "${spirv_tools_dir}/include" ] configs -= _configs_to_remove configs += _configs_to_add From 478b23295244c9f33eb90a47a99fb3b5cc6e0370 Mon Sep 17 00:00:00 2001 From: Chow Date: Wed, 4 Nov 2020 04:34:19 +0800 Subject: [PATCH 063/365] 8. io mapping refine & qualifier member check & resolver expand (#2396) * Code refine and adding missing features 1. Add new level for built in symbols. 2. Fix issues for structure members' qualifiers. 3. Global qualifier fix. 4. IO Mapper refine. Add support for checking with mangle names. * Additional missing features * Invariant member. (Only check non-interface). * Split block nesting level and struct nesting level. To fix issues of checking 'invariant' qualifier. Current grammar would check block/struct member without its parent class's information. So we split nesting level, and 'invariant' would only be checked within a struct. * Format anonymous block names. Refine codes for symbols from all kinds of resouces. * Fix writeonly check. * Use LValueBase to find operator. * Fix random null ptr issue. * invariant check, stage in io mapping, reference parameter should be used and remove wrong codes introduced with ordering vector. * Remained: to be fixed with double check link.vk.multiblocksValid * Fix version error. invariant * Revert loc modification. --- SPIRV/GlslangToSpv.cpp | 4 +- Test/baseResults/300layout.vert.out | 3 +- Test/baseResults/310.frag.out | 6 +- Test/baseResults/310.vert.out | 3 +- Test/baseResults/320.vert.out | 3 +- Test/baseResults/410.geom.out | 3 +- .../hlsl.structbuffer.append.fn.frag.out | 8 +- .../baseResults/hlsl.structbuffer.fn.frag.out | 4 +- .../link.vk.multiBlocksValid.0.0.vert.out | 4 +- .../link.vk.multiBlocksValid.1.0.geom.out | 8 +- Test/baseResults/spv.specConstant.vert.out | 6 +- glslang/Include/intermediate.h | 2 + glslang/MachineIndependent/IntermTraverse.cpp | 7 + .../MachineIndependent/ParseContextBase.cpp | 90 ++-- glslang/MachineIndependent/ParseHelper.cpp | 64 ++- glslang/MachineIndependent/ParseHelper.h | 7 +- glslang/MachineIndependent/Scan.cpp | 2 +- glslang/MachineIndependent/SymbolTable.cpp | 2 + glslang/MachineIndependent/SymbolTable.h | 24 +- glslang/MachineIndependent/glslang.m4 | 2 +- glslang/MachineIndependent/glslang.y | 2 +- glslang/MachineIndependent/glslang_tab.cpp | 2 +- glslang/MachineIndependent/iomapper.cpp | 432 +++++++++++++++--- glslang/MachineIndependent/iomapper.h | 13 +- glslang/MachineIndependent/reflection.cpp | 13 +- 25 files changed, 565 insertions(+), 149 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 0b6c62b7f1..7fc5c1ea30 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3959,6 +3959,8 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, // Name and decorate the non-hidden members int offset = -1; int locationOffset = 0; // for use within the members of this struct + bool memberLocationInvalid = type.isArrayOfArrays() || + (type.isArray() && (type.getQualifier().isArrayedIo(glslangIntermediate->getStage()) == false)); for (int i = 0; i < (int)glslangMembers->size(); i++) { glslang::TType& glslangMember = *(*glslangMembers)[i].type; int member = i; @@ -4011,7 +4013,7 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, // just track whether a member needs to be decorated. // Ignore member locations if the container is an array, as that's // ill-specified and decisions have been made to not allow this. - if (! type.isArray() && memberQualifier.hasLocation()) + if (!memberLocationInvalid && memberQualifier.hasLocation()) builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation); if (qualifier.hasLocation()) // track for upcoming inheritance diff --git a/Test/baseResults/300layout.vert.out b/Test/baseResults/300layout.vert.out index e245cbcf97..527425b37d 100644 --- a/Test/baseResults/300layout.vert.out +++ b/Test/baseResults/300layout.vert.out @@ -1,6 +1,7 @@ 300layout.vert ERROR: 0:7: 'vertex input arrays' : not supported with this profile: es ERROR: 0:8: 'in' : cannot be a structure or array +ERROR: 0:8: 's' : A structure containing an array is not allowed as input in ES ERROR: 0:8: 'vertex input arrays' : not supported with this profile: es ERROR: 0:8: 'location' : overlapping use of location 10 ERROR: 0:12: 'layout' : cannot specify matrix layout on a variable declaration @@ -18,7 +19,7 @@ ERROR: 0:50: 'shared' : not supported for this version or the enabled extensions ERROR: 0:50: 'shared' : not supported in this stage: vertex ERROR: 0:54: 'layout' : cannot specify packing on a variable declaration ERROR: 0:57: 'location' : overlapping use of location 40 -ERROR: 19 compilation errors. No code generated. +ERROR: 20 compilation errors. No code generated. Shader version: 300 diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out index 9fe93e9594..9f73c6751c 100644 --- a/Test/baseResults/310.frag.out +++ b/Test/baseResults/310.frag.out @@ -40,10 +40,14 @@ ERROR: 0:112: 'out' : cannot be a matrix ERROR: 0:114: 'in' : cannot be bool ERROR: 0:115: 'sampler2D' : sampler/image types can only be used in uniform variables or function parameters: ino ERROR: 0:117: 'fragment-shader array-of-array input' : not supported with this profile: es +ERROR: 0:120: 'S' : A structure containing an array is not allowed as input in ES ERROR: 0:120: 'fragment-shader array-of-struct input' : not supported with this profile: es +ERROR: 0:121: 'S' : A structure containing an array is not allowed as input in ES ERROR: 0:121: 'fragment-shader array-of-struct input' : not supported with this profile: es ERROR: 0:123: 'fragment-shader struct input containing an array' : not supported with this profile: es +ERROR: 0:123: 'SA' : A structure containing an array is not allowed as input in ES ERROR: 0:125: 'fragment-shader struct input containing structure' : not supported with this profile: es +ERROR: 0:125: 'SS' : A structure containing an struct is not allowed as input in ES ERROR: 0:133: 'output block' : not supported in this stage: fragment ERROR: 0:138: '' : cannot nest a structure definition inside a structure or block ERROR: 0:146: 'location' : overlapping use of location 13 @@ -139,7 +143,7 @@ ERROR: 0:461: 'func' : function already has a body ERROR: 0:463: 'return' : void function cannot return a value ERROR: 0:472: '=' : cannot convert from ' temp mediump uint' to ' temp mediump int' ERROR: 0:485: '=' : cannot convert from ' global mediump int' to ' temp mediump uint' -ERROR: 132 compilation errors. No code generated. +ERROR: 136 compilation errors. No code generated. Shader version: 310 diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out index a910e3451e..1d2152dd14 100644 --- a/Test/baseResults/310.vert.out +++ b/Test/baseResults/310.vert.out @@ -21,6 +21,7 @@ ERROR: 0:105: 'location' : overlapping use of location 12 ERROR: 0:107: 'input block' : not supported in this stage: vertex ERROR: 0:109: 'gl_PerVertex' : block redeclaration has extra members ERROR: 0:119: 'gl_PointSize' : member of nameless block was not redeclared +ERROR: 0:119: 'assign' : l-value required "gl_PerVertex" (can't modify void) ERROR: 0:119: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize' ERROR: 0:122: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use ERROR: 0:127: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block @@ -96,7 +97,7 @@ ERROR: 0:389: 'sample' : Reserved word. ERROR: 0:400: 'interpolateAtCentroid' : no matching overloaded function found ERROR: 0:401: 'interpolateAtSample' : no matching overloaded function found ERROR: 0:402: 'interpolateAtOffset' : no matching overloaded function found -ERROR: 93 compilation errors. No code generated. +ERROR: 94 compilation errors. No code generated. Shader version: 310 diff --git a/Test/baseResults/320.vert.out b/Test/baseResults/320.vert.out index bf127d423d..0313b619e5 100644 --- a/Test/baseResults/320.vert.out +++ b/Test/baseResults/320.vert.out @@ -4,6 +4,7 @@ ERROR: 0:14: 'location' : overlapping use of location 12 ERROR: 0:16: 'input block' : not supported in this stage: vertex ERROR: 0:18: 'gl_PerVertex' : block redeclaration has extra members ERROR: 0:28: 'gl_PointSize' : member of nameless block was not redeclared +ERROR: 0:28: 'assign' : l-value required "gl_PerVertex" (can't modify void) ERROR: 0:28: 'assign' : cannot convert from ' const float' to ' gl_PointSize highp void PointSize' ERROR: 0:31: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use ERROR: 0:36: 'flat/smooth/noperspective' : cannot use interpolation qualifiers on an interface block @@ -33,7 +34,7 @@ ERROR: 0:211: '=' : cannot convert from ' const float' to ' temp highp 3-compon ERROR: 0:252: 'interpolateAtCentroid' : no matching overloaded function found ERROR: 0:253: 'interpolateAtSample' : no matching overloaded function found ERROR: 0:254: 'interpolateAtOffset' : no matching overloaded function found -ERROR: 34 compilation errors. No code generated. +ERROR: 35 compilation errors. No code generated. Shader version: 320 diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out index c38ba483c9..498da5acb2 100644 --- a/Test/baseResults/410.geom.out +++ b/Test/baseResults/410.geom.out @@ -5,9 +5,10 @@ ERROR: 0:20: 'gl_PerVertex' : can only redeclare a built-in block once, and befo ERROR: 0:32: 'gl_Position' : no such field in structure ERROR: 0:32: '=' : cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float' ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared +ERROR: 0:33: 'assign' : l-value required "gl_PerVertex" (can't modify void) ERROR: 0:33: 'assign' : cannot convert from ' const 4-component vector of float' to 'layout( stream=0) gl_Position void Position' WARNING: 0:38: 'return' : type conversion on return values was not explicitly allowed until version 420 -ERROR: 7 compilation errors. No code generated. +ERROR: 8 compilation errors. No code generated. Shader version: 410 diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out index 6a239da45c..2ac904eb74 100644 --- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out +++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out @@ -190,13 +190,13 @@ Validation failed Decorate 9 BufferBlock Decorate 12 BufferBlock Decorate 49(sbuf_a) DescriptorSet 0 - Decorate 49(sbuf_a) Binding 4 + Decorate 49(sbuf_a) Binding 0 Decorate 50(sbuf_a@count) DescriptorSet 0 - Decorate 50(sbuf_a@count) Binding 6 + Decorate 50(sbuf_a@count) Binding 0 Decorate 51(sbuf_c) DescriptorSet 0 - Decorate 51(sbuf_c) Binding 5 + Decorate 51(sbuf_c) Binding 1 Decorate 52(sbuf_c@count) DescriptorSet 0 - Decorate 52(sbuf_c@count) Binding 7 + Decorate 52(sbuf_c@count) Binding 0 Decorate 58(pos) Flat Decorate 58(pos) Location 0 Decorate 61(@entryPointOutput) Location 0 diff --git a/Test/baseResults/hlsl.structbuffer.fn.frag.out b/Test/baseResults/hlsl.structbuffer.fn.frag.out index c5afd356de..bd2a4e6769 100644 --- a/Test/baseResults/hlsl.structbuffer.fn.frag.out +++ b/Test/baseResults/hlsl.structbuffer.fn.frag.out @@ -191,9 +191,9 @@ Validation failed Decorate 18 BufferBlock Decorate 20 BufferBlock Decorate 47(sbuf2) DescriptorSet 0 - Decorate 47(sbuf2) Binding 2 + Decorate 47(sbuf2) Binding 0 Decorate 48(sbuf2@count) DescriptorSet 0 - Decorate 48(sbuf2@count) Binding 3 + Decorate 48(sbuf2@count) Binding 0 Decorate 50(sbuf) DescriptorSet 0 Decorate 50(sbuf) Binding 10 Decorate 63(pos) Flat diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out index ddb856d8e4..bdabab18a5 100644 --- a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out +++ b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out @@ -211,7 +211,7 @@ Shader version: 430 Name 70 "BufferBlock" MemberName 70(BufferBlock) 0 "p" Name 72 "uBuf" - Decorate 14(oColor) Location 4 + Decorate 14(oColor) Location 2 MemberDecorate 16(ColorBlock) 0 Offset 0 MemberDecorate 16(ColorBlock) 1 Offset 16 MemberDecorate 16(ColorBlock) 2 Offset 32 @@ -224,7 +224,7 @@ Shader version: 430 Decorate 28(uColorBuf) DescriptorSet 0 Decorate 28(uColorBuf) Binding 0 Decorate 32(Vertex) Block - Decorate 34(oV) Location 2 + Decorate 34(oV) Location 0 MemberDecorate 40(gl_PerVertex) 0 BuiltIn Position MemberDecorate 40(gl_PerVertex) 1 BuiltIn PointSize MemberDecorate 40(gl_PerVertex) 2 BuiltIn ClipDistance diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out index 63be728b09..c0b33b705c 100644 --- a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out +++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out @@ -304,7 +304,7 @@ output primitive = triangle_strip MemberName 95(BufferBlock) 0 "p" Name 97 "uBuf" Name 100 "P" - Decorate 18(oColor) Location 2 + Decorate 18(oColor) Location 1 MemberDecorate 20(ColorBlock) 0 Offset 0 MemberDecorate 20(ColorBlock) 1 Offset 16 MemberDecorate 20(ColorBlock) 2 Offset 32 @@ -326,16 +326,16 @@ output primitive = triangle_strip Decorate 50(uM) DescriptorSet 0 Decorate 50(uM) Binding 0 Decorate 59(Vertex) Block - Decorate 61(oV) Location 1 + Decorate 61(oV) Location 0 Decorate 64(Vertex) Block - Decorate 68(iV) Location 0 + Decorate 68(iV) Location 1 MemberDecorate 95(BufferBlock) 0 ColMajor MemberDecorate 95(BufferBlock) 0 Offset 0 MemberDecorate 95(BufferBlock) 0 MatrixStride 16 Decorate 95(BufferBlock) BufferBlock Decorate 97(uBuf) DescriptorSet 0 Decorate 97(uBuf) Binding 1 - Decorate 100(P) Location 4 + Decorate 100(P) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out index 921cc68141..76f3de6192 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[s4546];" + Name 14 "foo(vf4[s805310914];" Name 13 "p" Name 17 "builtin_spec_constant(" Name 20 "color" @@ -106,10 +106,10 @@ spv.specConstant.vert Store 20(color) 46 48: 10 Load 22(ucol) Store 47(param) 48 - 49: 2 FunctionCall 14(foo(vf4[s4546];) 47(param) + 49: 2 FunctionCall 14(foo(vf4[s805310914];) 47(param) Return FunctionEnd -14(foo(vf4[s4546];): 2 Function None 12 +14(foo(vf4[s805310914];): 2 Function None 12 13(p): 11(ptr) FunctionParameter 15: Label 54: 24(ptr) AccessChain 53(dupUcol) 23 diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 30cb6fb171..9e41a997d0 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1282,6 +1282,8 @@ class TIntermSymbol : public TIntermTyped { TIntermTyped* getConstSubtree() const { return constSubtree; } #ifndef GLSLANG_WEB void setFlattenSubset(int subset) { flattenSubset = subset; } + virtual const TString& getAccessName() const; + int getFlattenSubset() const { return flattenSubset; } // -1 means full object #endif diff --git a/glslang/MachineIndependent/IntermTraverse.cpp b/glslang/MachineIndependent/IntermTraverse.cpp index f46010b712..553b1b5ff8 100644 --- a/glslang/MachineIndependent/IntermTraverse.cpp +++ b/glslang/MachineIndependent/IntermTraverse.cpp @@ -71,6 +71,13 @@ void TIntermConstantUnion::traverse(TIntermTraverser *it) it->visitConstantUnion(this); } +const TString& TIntermSymbol::getAccessName() const { + if (getBasicType() == EbtBlock) + return getType().getTypeName(); + else + return getName(); +} + // // Traverse a binary node. // diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index b46400914c..3efa27aca3 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -127,22 +127,6 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, { TIntermBinary* binaryNode = node->getAsBinaryNode(); - if (binaryNode) { - switch(binaryNode->getOp()) { - case EOpIndexDirect: - case EOpIndexIndirect: // fall through - case EOpIndexDirectStruct: // fall through - case EOpVectorSwizzle: - case EOpMatrixSwizzle: - return lValueErrorCheck(loc, op, binaryNode->getLeft()); - default: - break; - } - error(loc, " l-value required", op, "", ""); - - return true; - } - const char* symbol = nullptr; TIntermSymbol* symNode = node->getAsSymbolNode(); if (symNode != nullptr) @@ -203,15 +187,40 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, // Everything else is okay, no error. // if (message == nullptr) + { + if (binaryNode) { + switch (binaryNode->getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: // fall through + case EOpIndexDirectStruct: // fall through + case EOpVectorSwizzle: + case EOpMatrixSwizzle: + return lValueErrorCheck(loc, op, binaryNode->getLeft()); + default: + break; + } + error(loc, " l-value required", op, "", ""); + + return true; + } return false; + } // // If we get here, we have an error and a message. // + const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true); + if (symNode) error(loc, " l-value required", op, "\"%s\" (%s)", symbol, message); else - error(loc, " l-value required", op, "(%s)", message); + if (binaryNode && binaryNode->getAsOperator()->getOp() == EOpIndexDirectStruct) + if(IsAnonymous(leftMostTypeNode->getAsSymbolNode()->getName())) + error(loc, " l-value required", op, "\"%s\" (%s)", leftMostTypeNode->getAsSymbolNode()->getAccessName().c_str(), message); + else + error(loc, " l-value required", op, "\"%s\" (%s)", leftMostTypeNode->getAsSymbolNode()->getName().c_str(), message); + else + error(loc, " l-value required", op, "(%s)", message); return true; } @@ -219,28 +228,41 @@ bool TParseContextBase::lValueErrorCheck(const TSourceLoc& loc, const char* op, // Test for and give an error if the node can't be read from. void TParseContextBase::rValueErrorCheck(const TSourceLoc& loc, const char* op, TIntermTyped* node) { + TIntermBinary* binaryNode = node->getAsBinaryNode(); + const TIntermSymbol* symNode = node->getAsSymbolNode(); + if (! node) return; - TIntermBinary* binaryNode = node->getAsBinaryNode(); - if (binaryNode) { - switch(binaryNode->getOp()) { - case EOpIndexDirect: - case EOpIndexIndirect: - case EOpIndexDirectStruct: - case EOpVectorSwizzle: - case EOpMatrixSwizzle: - rValueErrorCheck(loc, op, binaryNode->getLeft()); - default: - break; - } + if (node->getQualifier().isWriteOnly()) { + const TIntermTyped* leftMostTypeNode = TIntermediate::findLValueBase(node, true); + + if (symNode != nullptr) + error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str()); + else if (binaryNode && + (binaryNode->getAsOperator()->getOp() == EOpIndexDirectStruct || + binaryNode->getAsOperator()->getOp() == EOpIndexDirect)) + if(IsAnonymous(leftMostTypeNode->getAsSymbolNode()->getName())) + error(loc, "can't read from writeonly object: ", op, leftMostTypeNode->getAsSymbolNode()->getAccessName().c_str()); + else + error(loc, "can't read from writeonly object: ", op, leftMostTypeNode->getAsSymbolNode()->getName().c_str()); + else + error(loc, "can't read from writeonly object: ", op, ""); - return; + } else { + if (binaryNode) { + switch (binaryNode->getOp()) { + case EOpIndexDirect: + case EOpIndexIndirect: + case EOpIndexDirectStruct: + case EOpVectorSwizzle: + case EOpMatrixSwizzle: + rValueErrorCheck(loc, op, binaryNode->getLeft()); + default: + break; + } + } } - - TIntermSymbol* symNode = node->getAsSymbolNode(); - if (symNode && symNode->getQualifier().isWriteOnly()) - error(loc, "can't read from writeonly object: ", op, symNode->getName().c_str()); } // Add 'symbol' to the list of deferred linkage symbols, which diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index b9b37fb9ae..032774f900 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -3368,7 +3368,7 @@ void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& t // void TParseContext::memberQualifierCheck(glslang::TPublicType& publicType) { - globalQualifierFixCheck(publicType.loc, publicType.qualifier); + globalQualifierFixCheck(publicType.loc, publicType.qualifier, true); checkNoShaderLayouts(publicType.loc, publicType.shaderQualifiers); if (publicType.qualifier.isNonUniform()) { error(publicType.loc, "not allowed on block or structure members", "nonuniformEXT", ""); @@ -3379,7 +3379,7 @@ void TParseContext::memberQualifierCheck(glslang::TPublicType& publicType) // // Check/fix just a full qualifier (no variables or types yet, but qualifier is complete) at global level. // -void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier) +void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& qualifier, bool isMemberCheck) { bool nonuniformOkay = false; @@ -3404,6 +3404,16 @@ void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& q case EvqTemporary: nonuniformOkay = true; break; + case EvqUniform: + // According to GLSL spec: The std430 qualifier is supported only for shader storage blocks; a shader using + // the std430 qualifier on a uniform block will fail to compile. + // Only check the global declaration: layout(std430) uniform; + if (blockName == nullptr && + qualifier.layoutPacking == ElpStd430) + { + error(loc, "it is invalid to declare std430 qualifier on uniform", "", ""); + } + break; default: break; } @@ -3411,7 +3421,9 @@ void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& q if (!nonuniformOkay && qualifier.isNonUniform()) error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", ""); - invariantCheck(loc, qualifier); + // Storage qualifier isn't ready for memberQualifierCheck, we should skip invariantCheck for it. + if (!isMemberCheck || structNestingLevel > 0) + invariantCheck(loc, qualifier); } // @@ -4083,6 +4095,9 @@ void TParseContext::checkRuntimeSizable(const TSourceLoc& loc, const TIntermType if (isRuntimeLength(base)) return; + if (base.getType().getQualifier().builtIn == EbvSampleMask) + return; + // Check for last member of a bufferreference type, which is runtime sizeable // but doesn't support runtime length if (base.getType().getQualifier().storage == EvqBuffer) { @@ -4634,14 +4649,14 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali void TParseContext::nestedBlockCheck(const TSourceLoc& loc) { - if (structNestingLevel > 0) + if (structNestingLevel > 0 || blockNestingLevel > 0) error(loc, "cannot nest a block definition inside a structure or block", "", ""); - ++structNestingLevel; + ++blockNestingLevel; } void TParseContext::nestedStructCheck(const TSourceLoc& loc) { - if (structNestingLevel > 0) + if (structNestingLevel > 0 || blockNestingLevel > 0) error(loc, "cannot nest a structure definition inside a structure or block", "", ""); ++structNestingLevel; } @@ -6537,13 +6552,15 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType error(loc, "atomic_uint binding is too large", "binding", ""); return; } - - if(publicType.qualifier.hasOffset()) { + if (publicType.qualifier.hasOffset()) atomicUintOffsets[publicType.qualifier.layoutBinding] = publicType.qualifier.layoutOffset; - } return; } + if (publicType.arraySizes) { + error(loc, "expect an array name", "", ""); + } + if (publicType.qualifier.hasLayout() && !publicType.qualifier.hasBufferReference()) warn(loc, "useless application of layout qualifier", "layout", ""); #endif @@ -6634,6 +6651,22 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden if (type.getQualifier().storage == EvqShared && type.containsCoopMat()) error(loc, "qualifier", "Cooperative matrix types must not be used in shared memory", ""); + if (profile == EEsProfile) { + if (type.getQualifier().isPipeInput() && type.getBasicType() == EbtStruct) { + if (type.getQualifier().isArrayedIo(language)) { + TType perVertexType(type, 0); + if (perVertexType.containsArray() && perVertexType.containsBuiltIn() == false) { + error(loc, "A per vertex structure containing an array is not allowed as input in ES", type.getTypeName().c_str(), ""); + } + } + else if (type.containsArray() && type.containsBuiltIn() == false) { + error(loc, "A structure containing an array is not allowed as input in ES", type.getTypeName().c_str(), ""); + } + if (type.containsStructure()) + error(loc, "A structure containing an struct is not allowed as input in ES", type.getTypeName().c_str(), ""); + } + } + if (identifier != "gl_FragCoord" && (publicType.shaderQualifiers.originUpperLeft || publicType.shaderQualifiers.pixelCenterInteger)) error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", ""); if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != EldNone) @@ -6956,6 +6989,15 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str()); return nullptr; } + TBasicType destType = type.getBasicType(); + for (int i = 0; i < type.getVectorSize(); ++i) { + TBasicType initType = initList->getSequence()[i]->getAsTyped()->getBasicType(); + if (destType != initType && !intermediate.canImplicitlyPromote(initType, destType)) { + error(loc, "type mismatch in initializer list", "initializer list", type.getCompleteString().c_str()); + return nullptr; + } + + } } else { error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str()); return nullptr; @@ -7492,10 +7534,10 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con TType& memberType = *typeList[member].type; TQualifier& memberQualifier = memberType.getQualifier(); const TSourceLoc& memberLoc = typeList[member].loc; - globalQualifierFixCheck(memberLoc, memberQualifier); if (memberQualifier.storage != EvqTemporary && memberQualifier.storage != EvqGlobal && memberQualifier.storage != currentBlockQualifier.storage) error(memberLoc, "member storage qualifier cannot contradict block storage qualifier", memberType.getFieldName().c_str(), ""); memberQualifier.storage = currentBlockQualifier.storage; + globalQualifierFixCheck(memberLoc, memberQualifier); #ifndef GLSLANG_WEB inheritMemoryQualifiers(currentBlockQualifier, memberQualifier); if (currentBlockQualifier.perPrimitiveNV) @@ -8193,7 +8235,7 @@ void TParseContext::invariantCheck(const TSourceLoc& loc, const TQualifier& qual bool pipeOut = qualifier.isPipeOutput(); bool pipeIn = qualifier.isPipeInput(); - if (version >= 300 || (!isEsProfile() && version >= 420)) { + if ((version >= 300 && isEsProfile()) || (!isEsProfile() && version >= 420)) { if (! pipeOut) error(loc, "can only apply to an output", "invariant", ""); } else { diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 0f09adaffc..fe2b6fbbe1 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -83,7 +83,7 @@ class TParseContextBase : public TParseVersions { : TParseVersions(interm, version, profile, spvVersion, language, infoSink, forwardCompatible, messages), scopeMangler("::"), symbolTable(symbolTable), - statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), controlFlowNestingLevel(0), + statementNestingLevel(0), loopNestingLevel(0), structNestingLevel(0), blockNestingLevel(0), controlFlowNestingLevel(0), currentFunctionType(nullptr), postEntryPointReturn(false), contextPragma(true, false), @@ -178,7 +178,8 @@ class TParseContextBase : public TParseVersions { TSymbolTable& symbolTable; // symbol table that goes with the current language, version, and profile int statementNestingLevel; // 0 if outside all flow control or compound statements int loopNestingLevel; // 0 if outside all loops - int structNestingLevel; // 0 if outside blocks and structures + int structNestingLevel; // 0 if outside structures + int blockNestingLevel; // 0 if outside blocks int controlFlowNestingLevel; // 0 if outside all flow control const TType* currentFunctionType; // the return type of the function that's currently being parsed bool functionReturnsValue; // true if a non-void function has a return @@ -365,7 +366,7 @@ class TParseContext : public TParseContextBase { void accStructCheck(const TSourceLoc & loc, const TType & type, const TString & identifier); void transparentOpaqueCheck(const TSourceLoc&, const TType&, const TString& identifier); void memberQualifierCheck(glslang::TPublicType&); - void globalQualifierFixCheck(const TSourceLoc&, TQualifier&); + void globalQualifierFixCheck(const TSourceLoc&, TQualifier&, bool isMemberCheck = false); void globalQualifierTypeCheck(const TSourceLoc&, const TQualifier&, const TPublicType&); bool structQualifierErrorCheck(const TSourceLoc&, const TPublicType& pType); void mergeQualifiers(const TSourceLoc&, TQualifier& dst, const TQualifier& src, bool force); diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index bd3181a74f..3a5f090f27 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -982,7 +982,7 @@ int TScanContext::tokenizeIdentifier() return keyword; case PACKED: if ((parseContext.isEsProfile() && parseContext.version < 300) || - (!parseContext.isEsProfile() && parseContext.version < 330)) + (!parseContext.isEsProfile() && parseContext.version < 140)) return reservedWord(); return identifierOrType(); diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index 007f22c1b4..e245814503 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -146,6 +146,8 @@ void TType::buildMangledName(TString& mangledName) const if (typeName) mangledName += *typeName; for (unsigned int i = 0; i < structure->size(); ++i) { + if ((*structure)[i].type->getBasicType() == EbtVoid) + continue; mangledName += '-'; (*structure)[i].type->buildMangledName(mangledName); } diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index ec4bc3c599..db16c19bca 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -613,20 +613,24 @@ class TSymbolTable { // protected: static const int globalLevel = 3; - bool isSharedLevel(int level) { return level <= 1; } // exclude all per-compile levels - bool isBuiltInLevel(int level) { return level <= 2; } // exclude user globals - bool isGlobalLevel(int level) { return level <= globalLevel; } // include user globals + static bool isSharedLevel(int level) { return level <= 1; } // exclude all per-compile levels + static bool isBuiltInLevel(int level) { return level <= 2; } // exclude user globals + static bool isGlobalLevel(int level) { return level <= globalLevel; } // include user globals public: bool isEmpty() { return table.size() == 0; } bool atBuiltInLevel() { return isBuiltInLevel(currentLevel()); } bool atGlobalLevel() { return isGlobalLevel(currentLevel()); } - + static bool isBuiltInSymbol(int uniqueId) { + int level = uniqueId >> LevelFlagBitOffset; + return isBuiltInLevel(level); + } void setNoBuiltInRedeclarations() { noBuiltInRedeclarations = true; } void setSeparateNameSpaces() { separateNameSpaces = true; } void push() { table.push_back(new TSymbolTableLevel); + updateUniqueIdLevelFlag(); } // Make a new symbol-table level to represent the scope introduced by a structure @@ -639,6 +643,7 @@ class TSymbolTable { { assert(thisSymbol.getName().size() == 0); table.push_back(new TSymbolTableLevel); + updateUniqueIdLevelFlag(); table.back()->setThisLevel(); insert(thisSymbol); } @@ -648,6 +653,7 @@ class TSymbolTable { table[currentLevel()]->getPreviousDefaultPrecisions(p); delete table.back(); table.pop_back(); + updateUniqueIdLevelFlag(); } // @@ -867,12 +873,20 @@ class TSymbolTable { table[level]->readOnly(); } + // Add current level in the high-bits of unique id + void updateUniqueIdLevelFlag() { + // clamp level to avoid overflow + uint32_t level = currentLevel() > 7 ? 7 : currentLevel(); + uniqueId &= ((1 << LevelFlagBitOffset) - 1); + uniqueId |= (level << LevelFlagBitOffset); + } + protected: TSymbolTable(TSymbolTable&); TSymbolTable& operator=(TSymbolTableLevel&); int currentLevel() const { return static_cast(table.size()) - 1; } - + static const uint32_t LevelFlagBitOffset = 28; std::vector table; int uniqueId; // for unique identification in code generation bool noBuiltInRedeclarations; diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 0b4b53fb97..6bd3759abc 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -905,7 +905,7 @@ declaration block_structure : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE { - --parseContext.structNestingLevel; + --parseContext.blockNestingLevel; parseContext.blockName = $2.string; parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 23adcb057e..f5070026ce 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -905,7 +905,7 @@ declaration block_structure : type_qualifier IDENTIFIER LEFT_BRACE { parseContext.nestedBlockCheck($1.loc); } struct_declaration_list RIGHT_BRACE { - --parseContext.structNestingLevel; + --parseContext.blockNestingLevel; parseContext.blockName = $2.string; parseContext.globalQualifierFixCheck($1.loc, $1.qualifier); parseContext.checkNoShaderLayouts($1.loc, $1.shaderQualifiers); diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index ac35797797..0204660edc 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -5186,7 +5186,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); case 104: #line 907 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { - --parseContext.structNestingLevel; + --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier); parseContext.checkNoShaderLayouts((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).shaderQualifiers); diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 905cf65d6b..0e9e717abc 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -37,9 +37,11 @@ #include "../Include/Common.h" #include "../Include/InfoSink.h" +#include "../Include/Types.h" #include "gl_types.h" #include "iomapper.h" +#include "SymbolTable.h" // // Map IO bindings. @@ -82,17 +84,17 @@ class TVarGatherTraverser : public TLiveTraverser { // If a global is being visited, then we should also traverse it incase it's evaluation // ends up visiting inputs we want to tag as live else if (base->getQualifier().storage == EvqGlobal) - addGlobalReference(base->getName()); + addGlobalReference(base->getAccessName()); if (target) { TVarEntryInfo ent = {base->getId(), base, ! traverseAll}; ent.stage = intermediate.getStage(); TVarLiveMap::iterator at = target->find( - ent.symbol->getName()); // std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById()); + ent.symbol->getAccessName()); // std::lower_bound(target->begin(), target->end(), ent, TVarEntryInfo::TOrderById()); if (at != target->end() && at->second.id == ent.id) at->second.live = at->second.live || ! traverseAll; // update live state else - (*target)[ent.symbol->getName()] = ent; + (*target)[ent.symbol->getAccessName()] = ent; } } @@ -125,7 +127,8 @@ class TVarSetTraverser : public TLiveTraverser return; TVarEntryInfo ent = { base->getId() }; - TVarLiveMap::const_iterator at = source->find(base->getName()); + // Fix a defect, when block has no instance name, we need to find its block name + TVarLiveMap::const_iterator at = source->find(base->getAccessName()); if (at == source->end()) return; @@ -181,7 +184,7 @@ struct TNotifyInOutAdaptor inline void operator()(std::pair& entKey) { - resolver.notifyInOut(stage, entKey.second); + resolver.notifyInOut(entKey.second.stage, entKey.second); } private: @@ -189,12 +192,13 @@ struct TNotifyInOutAdaptor }; struct TResolverUniformAdaptor { - TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TInfoSink& i, bool& e) + TResolverUniformAdaptor(EShLanguage s, TIoMapResolver& r, TVarLiveMap* uniform[EShLangCount], TInfoSink& i, bool& e) : stage(s) , resolver(r) , infoSink(i) , error(e) { + memcpy(uniformVarMap, uniform, EShLangCount * (sizeof(TVarLiveMap*))); } inline void operator()(std::pair& entKey) { @@ -206,9 +210,9 @@ struct TResolverUniformAdaptor { ent.newIndex = -1; const bool isValid = resolver.validateBinding(stage, ent); if (isValid) { - resolver.resolveBinding(stage, ent); - resolver.resolveSet(stage, ent); - resolver.resolveUniformLocation(stage, ent); + resolver.resolveBinding(ent.stage, ent); + resolver.resolveSet(ent.stage, ent); + resolver.resolveUniformLocation(ent.stage, ent); if (ent.newBinding != -1) { if (ent.newBinding >= int(TQualifier::layoutBindingEnd)) { @@ -217,6 +221,17 @@ struct TResolverUniformAdaptor { infoSink.info.message(EPrefixInternalError, err.c_str()); error = true; } + + if (ent.symbol->getQualifier().hasBinding()) { + for (uint32_t idx = EShLangVertex; idx < EShLangCount; ++idx) { + if (idx == ent.stage || uniformVarMap[idx] == nullptr) + continue; + auto entKey2 = uniformVarMap[idx]->find(entKey.first); + if (entKey2 != uniformVarMap[idx]->end()) { + entKey2->second.newBinding = ent.newBinding; + } + } + } } if (ent.newSet != -1) { if (ent.newSet >= int(TQualifier::layoutSetEnd)) { @@ -225,6 +240,16 @@ struct TResolverUniformAdaptor { infoSink.info.message(EPrefixInternalError, err.c_str()); error = true; } + if (ent.symbol->getQualifier().hasSet()) { + for (uint32_t idx = EShLangVertex; idx < EShLangCount; ++idx) { + if ((idx == stage) || (uniformVarMap[idx] == nullptr)) + continue; + auto entKey2 = uniformVarMap[idx]->find(entKey.first); + if (entKey2 != uniformVarMap[idx]->end()) { + entKey2->second.newSet = ent.newSet; + } + } + } } } else { TString errorMsg = "Invalid binding: " + entKey.first; @@ -239,7 +264,7 @@ struct TResolverUniformAdaptor { TIoMapResolver& resolver; TInfoSink& infoSink; bool& error; - + TVarLiveMap* uniformVarMap[EShLangCount]; private: TResolverUniformAdaptor& operator=(TResolverUniformAdaptor&) = delete; }; @@ -261,7 +286,7 @@ struct TResolverInOutAdaptor { ent.newBinding = -1; ent.newSet = -1; ent.newIndex = -1; - const bool isValid = resolver.validateInOut(stage, ent); + const bool isValid = resolver.validateInOut(ent.stage, ent); if (isValid) { resolver.resolveInOutLocation(stage, ent); resolver.resolveInOutComponent(stage, ent); @@ -296,17 +321,116 @@ struct TResolverInOutAdaptor { struct TSymbolValidater { TSymbolValidater(TIoMapResolver& r, TInfoSink& i, TVarLiveMap* in[EShLangCount], TVarLiveMap* out[EShLangCount], - TVarLiveMap* uniform[EShLangCount], bool& hadError) + TVarLiveMap* uniform[EShLangCount], bool& hadError, EProfile profile, int version) : preStage(EShLangCount) , currentStage(EShLangCount) , nextStage(EShLangCount) , resolver(r) , infoSink(i) , hadError(hadError) + , profile(profile) + , version(version) { memcpy(inVarMaps, in, EShLangCount * (sizeof(TVarLiveMap*))); memcpy(outVarMaps, out, EShLangCount * (sizeof(TVarLiveMap*))); memcpy(uniformVarMap, uniform, EShLangCount * (sizeof(TVarLiveMap*))); + + std::map anonymousMemberMap; + std::vector usedUniformLocation; + std::vector usedUniformName; + usedUniformLocation.clear(); + usedUniformName.clear(); + for (int i = 0; i < EShLangCount; i++) { + if (uniformVarMap[i]) { + for (auto uniformVar : *uniformVarMap[i]) + { + TIntermSymbol* pSymbol = uniformVar.second.symbol; + TQualifier qualifier = uniformVar.second.symbol->getQualifier(); + TString symbolName = pSymbol->getAccessName(); + + // All the uniform needs multi-stage location check (block/default) + int uniformLocation = qualifier.layoutLocation; + + if (uniformLocation != TQualifier::layoutLocationEnd) { + // Total size of current uniform, could be block, struct or other types. + int size = TIntermediate::computeTypeUniformLocationSize(pSymbol->getType()); + + TRange locationRange(uniformLocation, uniformLocation + size - 1); + + // Combine location and component ranges + int overlapLocation = -1; + bool diffLocation = false; + + // Check for collisions, except for vertex inputs on desktop targeting OpenGL + overlapLocation = checkLocationOverlap(locationRange, usedUniformLocation, symbolName, usedUniformName, diffLocation); + + // Overlap locations of uniforms, regardless of components (multi stages) + if (overlapLocation == -1) { + usedUniformLocation.push_back(locationRange); + usedUniformName.push_back(symbolName); + } + else if (overlapLocation >= 0) { + if (diffLocation == true) { + TString err = "Uniform location should be equal for same uniforms: " + overlapLocation; + infoSink.info.message(EPrefixInternalError, err.c_str()); + hadError = true; + break; + } + else { + TString err = "Uniform location overlaps across stages: " + overlapLocation; + infoSink.info.message(EPrefixInternalError, err.c_str()); + hadError = true; + break; + } + } + } + + if ((uniformVar.second.symbol->getBasicType() == EbtBlock) && + IsAnonymous(uniformVar.second.symbol->getName())) + { + auto blockType = uniformVar.second.symbol->getType().getStruct(); + for (size_t memberIdx = 0; memberIdx < blockType->size(); ++memberIdx) { + auto memberName = (*blockType)[memberIdx].type->getFieldName(); + if (anonymousMemberMap.find(memberName) != anonymousMemberMap.end()) + { + if (anonymousMemberMap[memberName] != uniformVar.second.symbol->getType().getTypeName()) + { + TString err = "Invalid block member name: " + memberName; + infoSink.info.message(EPrefixInternalError, err.c_str()); + hadError = true; + break; + } + } + else + { + anonymousMemberMap[memberName] = uniformVar.second.symbol->getType().getTypeName(); + } + } + } + if (hadError) + break; + } + } + } + } + + // In case we need to new an intermediate, which costs too much + int checkLocationOverlap(const TRange& locationRange, std::vector& usedUniformLocation, const TString symbolName, std::vector& usedUniformName, bool& diffLocation) + { + for (size_t r = 0; r < usedUniformLocation.size(); ++r) { + if (usedUniformName[r] == symbolName) { + diffLocation = true; + return (usedUniformLocation[r].start == locationRange.start && + usedUniformLocation[r].last == locationRange.last) + ? -2 : std::max(locationRange.start, usedUniformLocation[r].start); + } + if (locationRange.overlap(usedUniformLocation[r])) { + // there is a collision; pick one + return std::max(locationRange.start, usedUniformLocation[r].start); + } + } + + return -1; // no collision } inline void operator()(std::pair& entKey) { @@ -339,11 +463,24 @@ struct TSymbolValidater // validate stage in; if (preStage == EShLangCount) return; - if (name == "gl_PerVertex") + if (TSymbolTable::isBuiltInSymbol(base->getId())) return; if (outVarMaps[preStage] != nullptr) { auto ent2 = outVarMaps[preStage]->find(name); + uint32_t location = base->getType().getQualifier().layoutLocation; + if (ent2 == outVarMaps[preStage]->end() && + location != glslang::TQualifier::layoutLocationEnd) { + for (auto var = outVarMaps[preStage]->begin(); var != ent2; var++) { + if (var->second.symbol->getType().getQualifier().layoutLocation == location) { + ent2 = var; + break; + } + } + } if (ent2 != outVarMaps[preStage]->end()) { + auto& type1 = base->getType(); + auto& type2 = ent2->second.symbol->getType(); + hadError = hadError || typeCheck(&type1, &type2, name.c_str(), false); if (ent2->second.symbol->getType().getQualifier().isArrayedIo(preStage)) { TType subType(ent2->second.symbol->getType(), 0); subType.appendMangledName(mangleName2); @@ -351,23 +488,49 @@ struct TSymbolValidater else { ent2->second.symbol->getType().appendMangledName(mangleName2); } - if (mangleName1 == mangleName2) + + if (mangleName1 == mangleName2) { + // For ES 3.0 only, other versions have no such restrictions + // According to ES 3.0 spec: The type and presence of the interpolation qualifiers and + // storage qualifiers of variables with the same name declared in all linked shaders must + // match, otherwise the link command will fail. + if (profile == EEsProfile && version == 300) { + // Don't need to check smooth qualifier, as it uses the default interpolation mode + if (ent1.stage == EShLangFragment && type1.isBuiltIn() == false) { + if (type1.getQualifier().flat != type2.getQualifier().flat || + type1.getQualifier().nopersp != type2.getQualifier().nopersp) { + TString err = "Interpolation qualifier mismatch : " + entKey.first; + infoSink.info.message(EPrefixInternalError, err.c_str()); + hadError = true; + } + } + } return; + } else { TString err = "Invalid In/Out variable type : " + entKey.first; infoSink.info.message(EPrefixInternalError, err.c_str()); hadError = true; } } + else if (!base->getType().isBuiltIn()) { + // According to spec: A link error is generated if any statically referenced input variable + // or block does not have a matching output + if (profile == EEsProfile && ent1.live) { + hadError = true; + TString errorStr = name + ": not been declare as a output variable in pre shader stage."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + } + } return; } } else if (base->getQualifier().storage == EvqVaryingOut) { // validate stage out; if (nextStage == EShLangCount) return; - if (name == "gl_PerVertex") + if (TSymbolTable::isBuiltInSymbol(base->getId())) return; - if (outVarMaps[nextStage] != nullptr) { + if (inVarMaps[nextStage] != nullptr) { auto ent2 = inVarMaps[nextStage]->find(name); if (ent2 != inVarMaps[nextStage]->end()) { if (ent2->second.symbol->getType().getQualifier().isArrayedIo(nextStage)) { @@ -400,11 +563,50 @@ struct TSymbolValidater hadError = true; } mangleName2.clear(); + + // validate instance name of blocks + if (hadError == false && + base->getType().getBasicType() == EbtBlock && + IsAnonymous(base->getName()) != IsAnonymous(ent2->second.symbol->getName())) { + TString err = "Matched uniform block names must also either all be lacking " + "an instance name or all having an instance name: " + entKey.first; + infoSink.info.message(EPrefixInternalError, err.c_str()); + hadError = true; + } + + // validate uniform block member qualifier and member names + auto& type1 = base->getType(); + auto& type2 = ent2->second.symbol->getType(); + if (hadError == false && base->getType().getBasicType() == EbtBlock) { + hadError = hadError || typeCheck(&type1, &type2, name.c_str(), true); + } + else { + hadError = hadError || typeCheck(&type1, &type2, name.c_str(), false); + } + } + else if (base->getBasicType() == EbtBlock) + { + if (IsAnonymous(base->getName())) + { + // The name of anonymous block member can't same with default uniform variable. + auto blockType1 = base->getType().getStruct(); + for (size_t memberIdx = 0; memberIdx < blockType1->size(); ++memberIdx) { + auto memberName = (*blockType1)[memberIdx].type->getFieldName(); + if (uniformVarMap[i]->find(memberName) != uniformVarMap[i]->end()) + { + TString err = "Invalid Uniform variable name : " + memberName; + infoSink.info.message(EPrefixInternalError, err.c_str()); + hadError = true; + break; + } + } + } } } } } } + TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], *uniformVarMap[EShLangCount]; // Use for mark pre stage, to get more interface symbol information. EShLanguage preStage, currentStage, nextStage; @@ -412,9 +614,118 @@ struct TSymbolValidater TIoMapResolver& resolver; TInfoSink& infoSink; bool& hadError; + EProfile profile; + int version; private: TSymbolValidater& operator=(TSymbolValidater&) = delete; + + bool qualifierCheck(const TType* const type1, const TType* const type2, const std::string& name, bool isBlock) + { + bool hasError = false; + const TQualifier& qualifier1 = type1->getQualifier(); + const TQualifier& qualifier2 = type2->getQualifier(); + + if (isBlock == false && + (type1->getQualifier().storage == EvqUniform && type2->getQualifier().storage == EvqUniform) || + (type1->getQualifier().storage == EvqGlobal && type2->getQualifier().storage == EvqGlobal)) { + if (qualifier1.precision != qualifier2.precision) { + hasError = true; + std::string errorStr = name + ": have precision conflict cross stage."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + } + if (qualifier1.hasFormat() && qualifier2.hasFormat()) { + if (qualifier1.layoutFormat != qualifier2.layoutFormat) { + hasError = true; + std::string errorStr = name + ": have layout format conflict cross stage."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + } + + } + } + + if (isBlock == true) { + if (qualifier1.layoutPacking != qualifier2.layoutPacking) { + hasError = true; + std::string errorStr = name + ": have layoutPacking conflict cross stage."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + } + if (qualifier1.layoutMatrix != qualifier2.layoutMatrix) { + hasError = true; + std::string errorStr = name + ": have layoutMatrix conflict cross stage."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + } + if (qualifier1.layoutOffset != qualifier2.layoutOffset) { + hasError = true; + std::string errorStr = name + ": have layoutOffset conflict cross stage."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + } + if (qualifier1.layoutAlign != qualifier2.layoutAlign) { + hasError = true; + std::string errorStr = name + ": have layoutAlign conflict cross stage."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + } + } + + return hasError; + } + + bool typeCheck(const TType* const type1, const TType* const type2, const std::string& name, bool isBlock) + { + bool hasError = false; + if (!(type1->isStruct() && type2->isStruct())) { + hasError = hasError || qualifierCheck(type1, type2, name, isBlock); + } + else { + if (type1->getBasicType() == EbtBlock && type2->getBasicType() == EbtBlock) + isBlock = true; + const TTypeList* typeList1 = type1->getStruct(); + const TTypeList* typeList2 = type2->getStruct(); + + std::string newName = name; + size_t memberCount = typeList1->size(); + size_t index2 = 0; + for (size_t index = 0; index < memberCount; index++, index2++) { + // Skip inactive member + if (typeList1->at(index).type->getBasicType() == EbtVoid) + continue; + while (index2 < typeList2->size() && typeList2->at(index2).type->getBasicType() == EbtVoid) { + ++index2; + } + + // TypeList1 has more members in list + if (index2 == typeList2->size()) { + std::string errorStr = name + ": struct mismatch."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + hasError = true; + break; + } + + if (typeList1->at(index).type->getFieldName() != typeList2->at(index2).type->getFieldName()) { + std::string errorStr = name + ": member name mismatch."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + hasError = true; + } + else { + newName = typeList1->at(index).type->getFieldName().c_str(); + } + hasError = hasError || typeCheck(typeList1->at(index).type, typeList2->at(index2).type, newName, isBlock); + } + + while (index2 < typeList2->size()) + { + // TypeList2 has more members + if (typeList2->at(index2).type->getBasicType() != EbtVoid) { + std::string errorStr = name + ": struct mismatch."; + infoSink.info.message(EPrefixError, errorStr.c_str()); + hasError = true; + break; + } + ++index2; + } + } + return hasError; + } }; struct TSlotCollector { @@ -500,7 +811,7 @@ int TDefaultIoResolverBase::resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); - const char* name = ent.symbol->getName().c_str(); + const char* name = ent.symbol->getAccessName().c_str(); // kick out of not doing this if (! doAutoLocationMapping()) { return ent.newLocation = -1; @@ -609,7 +920,7 @@ TDefaultGlslIoResolver::TDefaultGlslIoResolver(const TIntermediate& intermediate int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); - const TString& name = getAccessName(ent.symbol); + const TString& name = ent.symbol->getAccessName(); if (currentStage != stage) { preStage = currentStage; currentStage = stage; @@ -693,7 +1004,7 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); - const TString& name = getAccessName(ent.symbol); + const TString& name = ent.symbol->getAccessName(); // kick out of not doing this if (! doAutoLocationMapping()) { return ent.newLocation = -1; @@ -764,7 +1075,7 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); - const TString& name = getAccessName(ent.symbol); + const TString& name = ent.symbol->getAccessName(); // On OpenGL arrays of opaque types take a separate binding for each element int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; TResourceType resource = getResourceType(type); @@ -839,7 +1150,7 @@ void TDefaultGlslIoResolver::endCollect(EShLanguage /*stage*/) { void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { const TType& type = ent.symbol->getType(); - const TString& name = getAccessName(ent.symbol); + const TString& name = ent.symbol->getAccessName(); TStorageQualifier storage = type.getQualifier().storage; EShLanguage stage(EShLangCount); switch (storage) { @@ -899,7 +1210,7 @@ void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { const TType& type = ent.symbol->getType(); - const TString& name = getAccessName(ent.symbol); + const TString& name = ent.symbol->getAccessName(); int resource = getResourceType(type); if (type.getQualifier().hasBinding()) { TVarSlotMap& varSlotMap = resourceSlotMap[resource]; @@ -922,13 +1233,6 @@ void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& } } -const TString& TDefaultGlslIoResolver::getAccessName(const TIntermSymbol* symbol) -{ - return symbol->getBasicType() == EbtBlock ? - symbol->getType().getTypeName() : - symbol->getName(); -} - //TDefaultGlslIoResolver end /* @@ -1117,25 +1421,23 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi } // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info. - std::for_each(inVarMap.begin(), inVarMap.end(), - [&inVector](TVarLivePair p) { inVector.push_back(p); }); + for (auto& var : inVarMap) { inVector.push_back(var); } std::sort(inVector.begin(), inVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); }); - std::for_each(outVarMap.begin(), outVarMap.end(), - [&outVector](TVarLivePair p) { outVector.push_back(p); }); + for (auto& var : outVarMap) { outVector.push_back(var); } std::sort(outVector.begin(), outVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); }); - std::for_each(uniformVarMap.begin(), uniformVarMap.end(), - [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); }); + for (auto& var : uniformVarMap) { uniformVector.push_back(var); } std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); }); bool hadError = false; + TVarLiveMap* dummyUniformVarMap[EShLangCount] = {}; TNotifyInOutAdaptor inOutNotify(stage, *resolver); TNotifyUniformAdaptor uniformNotify(stage, *resolver); - TResolverUniformAdaptor uniformResolve(stage, *resolver, infoSink, hadError); + TResolverUniformAdaptor uniformResolve(stage, *resolver, dummyUniformVarMap, infoSink, hadError); TResolverInOutAdaptor inOutResolve(stage, *resolver, infoSink, hadError); resolver->beginNotifications(stage); std::for_each(inVector.begin(), inVector.end(), inOutNotify); @@ -1143,22 +1445,22 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi std::for_each(uniformVector.begin(), uniformVector.end(), uniformNotify); resolver->endNotifications(stage); resolver->beginResolve(stage); - std::for_each(inVector.begin(), inVector.end(), inOutResolve); + for (auto& var : inVector) { inOutResolve(var); } std::for_each(inVector.begin(), inVector.end(), [&inVarMap](TVarLivePair p) { - auto at = inVarMap.find(p.second.symbol->getName()); - if (at != inVarMap.end()) + auto at = inVarMap.find(p.second.symbol->getAccessName()); + if (at != inVarMap.end() && p.second.id == at->second.id) at->second = p.second; }); - std::for_each(outVector.begin(), outVector.end(), inOutResolve); + for (auto& var : outVector) { inOutResolve(var); } std::for_each(outVector.begin(), outVector.end(), [&outVarMap](TVarLivePair p) { - auto at = outVarMap.find(p.second.symbol->getName()); - if (at != outVarMap.end()) + auto at = outVarMap.find(p.second.symbol->getAccessName()); + if (at != outVarMap.end() && p.second.id == at->second.id) at->second = p.second; }); std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve); std::for_each(uniformVector.begin(), uniformVector.end(), [&uniformVarMap](TVarLivePair p) { - auto at = uniformVarMap.find(p.second.symbol->getName()); - if (at != uniformVarMap.end()) + auto at = uniformVarMap.find(p.second.symbol->getAccessName()); + if (at != uniformVarMap.end() && p.second.id == at->second.id) at->second = p.second; }); resolver->endResolve(stage); @@ -1174,9 +1476,14 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi // // Returns false if the input is too malformed to do this. bool TGlslIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSink& infoSink, TIoMapResolver* resolver) { + bool somethingToDo = !intermediate.getResourceSetBinding().empty() || + intermediate.getAutoMapBindings() || + intermediate.getAutoMapLocations(); + + // Profile and version are use for symbol validate. + profile = intermediate.getProfile(); + version = intermediate.getVersion(); - bool somethingToDo = ! intermediate.getResourceSetBinding().empty() || intermediate.getAutoMapBindings() || - intermediate.getAutoMapLocations(); // Restrict the stricter condition to further check 'somethingToDo' only if 'somethingToDo' has not been set, reduce // unnecessary or insignificant for-loop operation after 'somethingToDo' have been true. for (int res = 0; (res < EResCount && !somethingToDo); ++res) { @@ -1236,31 +1543,30 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { resolver->endResolve(EShLangCount); if (!hadError) { //Resolve uniform location, ubo/ssbo/opaque bindings across stages - TResolverUniformAdaptor uniformResolve(EShLangCount, *resolver, infoSink, hadError); + TResolverUniformAdaptor uniformResolve(EShLangCount, *resolver, uniformVarMap, infoSink, hadError); TResolverInOutAdaptor inOutResolve(EShLangCount, *resolver, infoSink, hadError); - TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, outVarMaps, uniformVarMap, hadError); + TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, + outVarMaps, uniformVarMap, hadError, profile, version); TVarLiveVector uniformVector; resolver->beginResolve(EShLangCount); for (int stage = EShLangVertex; stage < EShLangCount; stage++) { if (inVarMaps[stage] != nullptr) { inOutResolve.setStage(EShLanguage(stage)); - std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), symbolValidater); - std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), inOutResolve); - std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), symbolValidater); - std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), inOutResolve); + for (auto& var : *(inVarMaps[stage])) { symbolValidater(var); } + for (auto& var : *(inVarMaps[stage])) { inOutResolve(var); } + for (auto& var : *(outVarMaps[stage])) { symbolValidater(var); } + for (auto& var : *(outVarMaps[stage])) { inOutResolve(var); } } if (uniformVarMap[stage] != nullptr) { uniformResolve.setStage(EShLanguage(stage)); - // sort entries by priority. see TVarEntryInfo::TOrderByPriority for info. - std::for_each(uniformVarMap[stage]->begin(), uniformVarMap[stage]->end(), - [&uniformVector](TVarLivePair p) { uniformVector.push_back(p); }); + for (auto& var : *(uniformVarMap[stage])) { uniformVector.push_back(var); } } } std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); }); - std::for_each(uniformVector.begin(), uniformVector.end(), symbolValidater); - std::for_each(uniformVector.begin(), uniformVector.end(), uniformResolve); + for (auto& var : uniformVector) { symbolValidater(var); } + for (auto& var : uniformVector) { uniformResolve(var); } std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); }); @@ -1269,14 +1575,18 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { if (intermediates[stage] != nullptr) { // traverse each stage, set new location to each input/output and unifom symbol, set new binding to // ubo, ssbo and opaque symbols - TVarLiveMap** pUniformVarMap = uniformVarMap; + TVarLiveMap** pUniformVarMap = uniformResolve.uniformVarMap; std::for_each(uniformVector.begin(), uniformVector.end(), [pUniformVarMap, stage](TVarLivePair p) { - auto at = pUniformVarMap[stage]->find(p.second.symbol->getName()); - if (at != pUniformVarMap[stage]->end()) + auto at = pUniformVarMap[stage]->find(p.second.symbol->getAccessName()); + if (at != pUniformVarMap[stage]->end() && at->second.id == p.second.id){ + int resolvedBinding = at->second.newBinding; at->second = p.second; + if (resolvedBinding > 0) + at->second.newBinding = resolvedBinding; + } }); TVarSetTraverser iter_iomap(*intermediates[stage], *inVarMaps[stage], *outVarMaps[stage], - *uniformVarMap[stage]); + *uniformResolve.uniformVarMap[stage]); intermediates[stage]->getTreeRoot()->traverse(&iter_iomap); } } diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 674132786e..7934c4a9d1 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -203,7 +203,6 @@ struct TDefaultGlslIoResolver : public TDefaultIoResolverBase { void endCollect(EShLanguage) override; void reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override; void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) override; - const TString& getAccessName(const TIntermSymbol*); // in/out symbol and uniform symbol are stored in the same resourceSlotMap, the storage key is used to identify each type of symbol. // We use stage and storage qualifier to construct a storage key. it can help us identify the same storage resource used in different stage. // if a resource is a program resource and we don't need know it usage stage, we can use same stage to build storage key. @@ -263,10 +262,12 @@ class TIoMapper { class TGlslIoMapper : public TIoMapper { public: TGlslIoMapper() { - memset(inVarMaps, 0, sizeof(TVarLiveMap*) * EShLangCount); - memset(outVarMaps, 0, sizeof(TVarLiveMap*) * EShLangCount); - memset(uniformVarMap, 0, sizeof(TVarLiveMap*) * EShLangCount); - memset(intermediates, 0, sizeof(TIntermediate*) * EShLangCount); + memset(inVarMaps, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1)); + memset(outVarMaps, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1)); + memset(uniformVarMap, 0, sizeof(TVarLiveMap*) * (EShLangCount + 1)); + memset(intermediates, 0, sizeof(TIntermediate*) * (EShLangCount + 1)); + profile = ENoProfile; + version = 0; } virtual ~TGlslIoMapper() { for (size_t stage = 0; stage < EShLangCount; stage++) { @@ -293,6 +294,8 @@ class TGlslIoMapper : public TIoMapper { *uniformVarMap[EShLangCount]; TIntermediate* intermediates[EShLangCount]; bool hadError = false; + EProfile profile; + int version; }; } // end namespace glslang diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp index 0aabf37fba..729500295e 100644 --- a/glslang/MachineIndependent/reflection.cpp +++ b/glslang/MachineIndependent/reflection.cpp @@ -658,14 +658,17 @@ class TReflectionTraverser : public TIntermTraverser { blocks.back().numMembers = countAggregateMembers(type); - EShLanguageMask& stages = blocks.back().stages; - stages = static_cast(stages | 1 << intermediate.getStage()); + if (updateStageMasks) { + EShLanguageMask& stages = blocks.back().stages; + stages = static_cast(stages | 1 << intermediate.getStage()); + } } else { blockIndex = it->second; - - EShLanguageMask& stages = blocks[blockIndex].stages; - stages = static_cast(stages | 1 << intermediate.getStage()); + if (updateStageMasks) { + EShLanguageMask& stages = blocks[blockIndex].stages; + stages = static_cast(stages | 1 << intermediate.getStage()); + } } } From 8c1a3a06b86039cb41fa9b090ece846d31e6edc5 Mon Sep 17 00:00:00 2001 From: Tobski Date: Wed, 4 Nov 2020 16:24:23 +0000 Subject: [PATCH 064/365] Add GL_EXT_shader_image_int64 support (#2409) --- SPIRV/GLSL.ext.EXT.h | 1 + SPIRV/GlslangToSpv.cpp | 12 + SPIRV/doc.cpp | 3 + Test/baseResults/spv.imageAtomic64.frag.out | 634 ++ .../spv.imageLoadStoreLod.frag.out | 111 +- Test/spv.imageAtomic64.frag | 92 + Test/spv.imageLoadStoreLod.frag | 26 + glslang/Include/Types.h | 4 + glslang/MachineIndependent/Initialize.cpp | 54 +- glslang/MachineIndependent/ParseHelper.cpp | 10 +- glslang/MachineIndependent/Scan.cpp | 84 + glslang/MachineIndependent/SymbolTable.cpp | 2 + glslang/MachineIndependent/Versions.cpp | 2 + glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/glslang.m4 | 122 + glslang/MachineIndependent/glslang.y | 122 + glslang/MachineIndependent/glslang_tab.cpp | 6639 +++++++++-------- glslang/MachineIndependent/glslang_tab.cpp.h | 354 +- gtests/Spv.FromFile.cpp | 1 + 19 files changed, 4963 insertions(+), 3311 deletions(-) create mode 100644 Test/baseResults/spv.imageAtomic64.frag.out create mode 100644 Test/spv.imageAtomic64.frag diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h index 6eb0eeeada..20b9e54014 100644 --- a/SPIRV/GLSL.ext.EXT.h +++ b/SPIRV/GLSL.ext.EXT.h @@ -36,5 +36,6 @@ static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fu 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"; static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add"; +static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64"; #endif // #ifndef GLSLextEXT_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 7fc5c1ea30..ddc637837d 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1088,6 +1088,10 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy builder.addCapability(spv::CapabilityStorageImageExtendedFormats); break; + case glslang::ElfR64ui: + case glslang::ElfR64i: + builder.addExtension(spv::E_SPV_EXT_shader_image_int64); + builder.addCapability(spv::CapabilityInt64ImageEXT); default: break; } @@ -1134,6 +1138,8 @@ spv::ImageFormat TGlslangToSpvTraverser::TranslateImageFormat(const glslang::TTy case glslang::ElfRg8ui: return spv::ImageFormatRg8ui; case glslang::ElfR16ui: return spv::ImageFormatR16ui; case glslang::ElfR8ui: return spv::ImageFormatR8ui; + case glslang::ElfR64ui: return spv::ImageFormatR64ui; + case glslang::ElfR64i: return spv::ImageFormatR64i; default: return spv::ImageFormatMax; } } @@ -3594,6 +3600,12 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler) builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch); builder.addCapability(spv::CapabilityFloat16ImageAMD); return builder.makeFloatType(16); + case glslang::EbtInt64: return builder.makeIntType(64); + builder.addExtension(spv::E_SPV_EXT_shader_image_int64); + builder.addCapability(spv::CapabilityFloat16ImageAMD); + case glslang::EbtUint64: return builder.makeUintType(64); + builder.addExtension(spv::E_SPV_EXT_shader_image_int64); + builder.addCapability(spv::CapabilityFloat16ImageAMD); #endif default: assert(0); diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index b1d7eb70f7..09e035ae37 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -523,6 +523,8 @@ const char* ImageFormatString(int format) case 37: return "Rg8ui"; case 38: return "R16ui"; case 39: return "R8ui"; + case 40: return "R64ui"; + case 41: return "R64i"; default: return "Bad"; @@ -958,6 +960,7 @@ const char* CapabilityString(int info) case CapabilityDemoteToHelperInvocationEXT: return "DemoteToHelperInvocationEXT"; case CapabilityShaderClockKHR: return "ShaderClockKHR"; + case CapabilityInt64ImageEXT: return "Int64ImageEXT"; case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; diff --git a/Test/baseResults/spv.imageAtomic64.frag.out b/Test/baseResults/spv.imageAtomic64.frag.out new file mode 100644 index 0000000000..30836978d6 --- /dev/null +++ b/Test/baseResults/spv.imageAtomic64.frag.out @@ -0,0 +1,634 @@ +spv.imageAtomic64.frag +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 503 + + Capability Shader + Capability Int64 + Capability Int64Atomics + Capability StorageImageMultisample + Capability ImageCubeArray + Capability ImageRect + Capability SparseResidency + Capability Image1D + Capability ImageBuffer + Capability ImageMSArray + Capability Int64ImageEXT + Extension "SPV_EXT_shader_image_int64" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_ARB_sparse_texture2" + SourceExtension "GL_EXT_shader_image_int64" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 12 "Buf" + MemberName 12(Buf) 0 "i64" + MemberName 12(Buf) 1 "u64" + MemberName 12(Buf) 2 "i64v4" + MemberName 12(Buf) 3 "u64v4" + MemberName 12(Buf) 4 "i32v4" + Name 14 "" + Name 18 "i1D" + Name 35 "i3D" + Name 48 "iBuf" + Name 58 "i2DArray" + Name 69 "i2DRect" + Name 81 "i2DMSArray" + Name 194 "u2D" + Name 207 "uCube" + Name 218 "u1DArray" + Name 229 "uCubeArray" + Name 240 "u2DMS" + Name 458 "ResType" + Name 483 "ResType" + MemberDecorate 12(Buf) 0 Offset 0 + MemberDecorate 12(Buf) 1 Offset 8 + MemberDecorate 12(Buf) 2 Offset 32 + MemberDecorate 12(Buf) 3 Offset 64 + MemberDecorate 12(Buf) 4 Offset 96 + Decorate 12(Buf) BufferBlock + Decorate 14 DescriptorSet 0 + Decorate 14 Binding 11 + Decorate 18(i1D) DescriptorSet 0 + Decorate 18(i1D) Binding 0 + Decorate 35(i3D) DescriptorSet 0 + Decorate 35(i3D) Binding 2 + Decorate 48(iBuf) DescriptorSet 0 + Decorate 48(iBuf) Binding 4 + Decorate 58(i2DArray) DescriptorSet 0 + Decorate 58(i2DArray) Binding 6 + Decorate 69(i2DRect) DescriptorSet 0 + Decorate 69(i2DRect) Binding 8 + Decorate 81(i2DMSArray) DescriptorSet 0 + Decorate 81(i2DMSArray) Binding 10 + Decorate 194(u2D) DescriptorSet 0 + Decorate 194(u2D) Binding 1 + Decorate 207(uCube) DescriptorSet 0 + Decorate 207(uCube) Binding 3 + Decorate 218(u1DArray) DescriptorSet 0 + Decorate 218(u1DArray) Binding 5 + Decorate 229(uCubeArray) DescriptorSet 0 + Decorate 229(uCubeArray) Binding 7 + Decorate 240(u2DMS) DescriptorSet 0 + Decorate 240(u2DMS) Binding 9 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 64 1 + 7: TypeInt 64 0 + 8: TypeVector 6(int64_t) 4 + 9: TypeVector 7(int64_t) 4 + 10: TypeInt 32 1 + 11: TypeVector 10(int) 4 + 12(Buf): TypeStruct 6(int64_t) 7(int64_t) 8(i64vec4) 9(i64vec4) 11(ivec4) + 13: TypePointer Uniform 12(Buf) + 14: 13(ptr) Variable Uniform + 15: 10(int) Constant 0 + 16: TypeImage 6(int64_t) 1D nonsampled format:R64i + 17: TypePointer UniformConstant 16 + 18(i1D): 17(ptr) Variable UniformConstant + 19: 10(int) Constant 4 + 20: TypeInt 32 0 + 21: 20(int) Constant 0 + 22: TypePointer Uniform 10(int) + 25: TypePointer Uniform 6(int64_t) + 28: TypePointer Image 6(int64_t) + 30: 20(int) Constant 1 + 33: TypeImage 6(int64_t) 3D nonsampled format:R64i + 34: TypePointer UniformConstant 33 + 35(i3D): 34(ptr) Variable UniformConstant + 36: TypeVector 10(int) 3 + 37: TypePointer Uniform 11(ivec4) + 46: TypeImage 6(int64_t) Buffer nonsampled format:R64i + 47: TypePointer UniformConstant 46 + 48(iBuf): 47(ptr) Variable UniformConstant + 56: TypeImage 6(int64_t) 2D array nonsampled format:R64i + 57: TypePointer UniformConstant 56 + 58(i2DArray): 57(ptr) Variable UniformConstant + 67: TypeImage 6(int64_t) Rect nonsampled format:R64i + 68: TypePointer UniformConstant 67 + 69(i2DRect): 68(ptr) Variable UniformConstant + 70: TypeVector 10(int) 2 + 79: TypeImage 6(int64_t) 2D array multi-sampled nonsampled format:R64i + 80: TypePointer UniformConstant 79 + 81(i2DMSArray): 80(ptr) Variable UniformConstant + 85: 20(int) Constant 3 + 107: 6(int64_t) Constant 1 0 + 116: 10(int) Constant 1 + 117: 10(int) Constant 2048 + 119: 20(int) Constant 2048 + 192: TypeImage 7(int64_t) 2D nonsampled format:R64ui + 193: TypePointer UniformConstant 192 + 194(u2D): 193(ptr) Variable UniformConstant + 198: TypePointer Uniform 7(int64_t) + 201: TypePointer Image 7(int64_t) + 205: TypeImage 7(int64_t) Cube nonsampled format:R64ui + 206: TypePointer UniformConstant 205 + 207(uCube): 206(ptr) Variable UniformConstant + 216: TypeImage 7(int64_t) 1D array nonsampled format:R64ui + 217: TypePointer UniformConstant 216 + 218(u1DArray): 217(ptr) Variable UniformConstant + 227: TypeImage 7(int64_t) Cube array nonsampled format:R64ui + 228: TypePointer UniformConstant 227 + 229(uCubeArray): 228(ptr) Variable UniformConstant + 238: TypeImage 7(int64_t) 2D multi-sampled nonsampled format:R64ui + 239: TypePointer UniformConstant 238 + 240(u2DMS): 239(ptr) Variable UniformConstant + 244: 20(int) Constant 2 + 275: 7(int64_t) Constant 1 0 + 363: 10(int) Constant 2 + 368: TypePointer Uniform 8(i64vec4) + 423: 10(int) Constant 3 + 424: TypePointer Uniform 9(i64vec4) + 458(ResType): TypeStruct 10(int) 8(i64vec4) + 483(ResType): TypeStruct 10(int) 9(i64vec4) + 4(main): 2 Function None 3 + 5: Label + 23: 22(ptr) AccessChain 14 19 21 + 24: 10(int) Load 23 + 26: 25(ptr) AccessChain 14 15 + 27: 6(int64_t) Load 26 + 29: 28(ptr) ImageTexelPointer 18(i1D) 24 21 + 31: 6(int64_t) AtomicIAdd 29 30 21 27 + 32: 25(ptr) AccessChain 14 15 + Store 32 31 + 38: 37(ptr) AccessChain 14 19 + 39: 11(ivec4) Load 38 + 40: 36(ivec3) VectorShuffle 39 39 0 1 2 + 41: 25(ptr) AccessChain 14 15 + 42: 6(int64_t) Load 41 + 43: 28(ptr) ImageTexelPointer 35(i3D) 40 21 + 44: 6(int64_t) AtomicSMin 43 30 21 42 + 45: 25(ptr) AccessChain 14 15 + Store 45 44 + 49: 22(ptr) AccessChain 14 19 21 + 50: 10(int) Load 49 + 51: 25(ptr) AccessChain 14 15 + 52: 6(int64_t) Load 51 + 53: 28(ptr) ImageTexelPointer 48(iBuf) 50 21 + 54: 6(int64_t) AtomicSMax 53 30 21 52 + 55: 25(ptr) AccessChain 14 15 + Store 55 54 + 59: 37(ptr) AccessChain 14 19 + 60: 11(ivec4) Load 59 + 61: 36(ivec3) VectorShuffle 60 60 0 1 2 + 62: 25(ptr) AccessChain 14 15 + 63: 6(int64_t) Load 62 + 64: 28(ptr) ImageTexelPointer 58(i2DArray) 61 21 + 65: 6(int64_t) AtomicAnd 64 30 21 63 + 66: 25(ptr) AccessChain 14 15 + Store 66 65 + 71: 37(ptr) AccessChain 14 19 + 72: 11(ivec4) Load 71 + 73: 70(ivec2) VectorShuffle 72 72 0 1 + 74: 25(ptr) AccessChain 14 15 + 75: 6(int64_t) Load 74 + 76: 28(ptr) ImageTexelPointer 69(i2DRect) 73 21 + 77: 6(int64_t) AtomicOr 76 30 21 75 + 78: 25(ptr) AccessChain 14 15 + Store 78 77 + 82: 37(ptr) AccessChain 14 19 + 83: 11(ivec4) Load 82 + 84: 36(ivec3) VectorShuffle 83 83 0 1 2 + 86: 22(ptr) AccessChain 14 19 85 + 87: 10(int) Load 86 + 88: 25(ptr) AccessChain 14 15 + 89: 6(int64_t) Load 88 + 90: 28(ptr) ImageTexelPointer 81(i2DMSArray) 84 87 + 91: 6(int64_t) AtomicXor 90 30 21 89 + 92: 25(ptr) AccessChain 14 15 + Store 92 91 + 93: 22(ptr) AccessChain 14 19 21 + 94: 10(int) Load 93 + 95: 25(ptr) AccessChain 14 15 + 96: 6(int64_t) Load 95 + 97: 28(ptr) ImageTexelPointer 18(i1D) 94 21 + 98: 6(int64_t) AtomicExchange 97 30 21 96 + 99: 25(ptr) AccessChain 14 15 + Store 99 98 + 100: 37(ptr) AccessChain 14 19 + 101: 11(ivec4) Load 100 + 102: 36(ivec3) VectorShuffle 101 101 0 1 2 + 103: 25(ptr) AccessChain 14 15 + 104: 6(int64_t) Load 103 + 105: 25(ptr) AccessChain 14 15 + 106: 6(int64_t) Load 105 + 108: 6(int64_t) IAdd 106 107 + 109: 28(ptr) ImageTexelPointer 35(i3D) 102 21 + 110: 6(int64_t) AtomicCompareExchange 109 30 21 21 108 104 + 111: 25(ptr) AccessChain 14 15 + Store 111 110 + 112: 22(ptr) AccessChain 14 19 21 + 113: 10(int) Load 112 + 114: 25(ptr) AccessChain 14 15 + 115: 6(int64_t) Load 114 + 118: 28(ptr) ImageTexelPointer 18(i1D) 113 21 + 120: 6(int64_t) AtomicIAdd 118 116 119 115 + 121: 25(ptr) AccessChain 14 15 + Store 121 120 + 122: 37(ptr) AccessChain 14 19 + 123: 11(ivec4) Load 122 + 124: 36(ivec3) VectorShuffle 123 123 0 1 2 + 125: 25(ptr) AccessChain 14 15 + 126: 6(int64_t) Load 125 + 127: 28(ptr) ImageTexelPointer 35(i3D) 124 21 + 128: 6(int64_t) AtomicSMin 127 116 119 126 + 129: 25(ptr) AccessChain 14 15 + Store 129 128 + 130: 22(ptr) AccessChain 14 19 21 + 131: 10(int) Load 130 + 132: 25(ptr) AccessChain 14 15 + 133: 6(int64_t) Load 132 + 134: 28(ptr) ImageTexelPointer 48(iBuf) 131 21 + 135: 6(int64_t) AtomicSMax 134 116 119 133 + 136: 25(ptr) AccessChain 14 15 + Store 136 135 + 137: 37(ptr) AccessChain 14 19 + 138: 11(ivec4) Load 137 + 139: 36(ivec3) VectorShuffle 138 138 0 1 2 + 140: 25(ptr) AccessChain 14 15 + 141: 6(int64_t) Load 140 + 142: 28(ptr) ImageTexelPointer 58(i2DArray) 139 21 + 143: 6(int64_t) AtomicAnd 142 116 119 141 + 144: 25(ptr) AccessChain 14 15 + Store 144 143 + 145: 37(ptr) AccessChain 14 19 + 146: 11(ivec4) Load 145 + 147: 70(ivec2) VectorShuffle 146 146 0 1 + 148: 25(ptr) AccessChain 14 15 + 149: 6(int64_t) Load 148 + 150: 28(ptr) ImageTexelPointer 69(i2DRect) 147 21 + 151: 6(int64_t) AtomicOr 150 116 119 149 + 152: 25(ptr) AccessChain 14 15 + Store 152 151 + 153: 37(ptr) AccessChain 14 19 + 154: 11(ivec4) Load 153 + 155: 36(ivec3) VectorShuffle 154 154 0 1 2 + 156: 22(ptr) AccessChain 14 19 85 + 157: 10(int) Load 156 + 158: 25(ptr) AccessChain 14 15 + 159: 6(int64_t) Load 158 + 160: 28(ptr) ImageTexelPointer 81(i2DMSArray) 155 157 + 161: 6(int64_t) AtomicXor 160 116 119 159 + 162: 25(ptr) AccessChain 14 15 + Store 162 161 + 163: 22(ptr) AccessChain 14 19 21 + 164: 10(int) Load 163 + 165: 25(ptr) AccessChain 14 15 + 166: 6(int64_t) Load 165 + 167: 28(ptr) ImageTexelPointer 18(i1D) 164 21 + 168: 6(int64_t) AtomicExchange 167 116 119 166 + 169: 25(ptr) AccessChain 14 15 + Store 169 168 + 170: 37(ptr) AccessChain 14 19 + 171: 11(ivec4) Load 170 + 172: 36(ivec3) VectorShuffle 171 171 0 1 2 + 173: 25(ptr) AccessChain 14 15 + 174: 6(int64_t) Load 173 + 175: 25(ptr) AccessChain 14 15 + 176: 6(int64_t) Load 175 + 177: 6(int64_t) IAdd 176 107 + 178: 28(ptr) ImageTexelPointer 35(i3D) 172 21 + 179: 6(int64_t) AtomicCompareExchange 178 116 119 119 177 174 + 180: 25(ptr) AccessChain 14 15 + Store 180 179 + 181: 22(ptr) AccessChain 14 19 21 + 182: 10(int) Load 181 + 183: 28(ptr) ImageTexelPointer 48(iBuf) 182 21 + 184: 6(int64_t) AtomicLoad 183 116 119 + 185: 25(ptr) AccessChain 14 15 + Store 185 184 + 186: 37(ptr) AccessChain 14 19 + 187: 11(ivec4) Load 186 + 188: 36(ivec3) VectorShuffle 187 187 0 1 2 + 189: 25(ptr) AccessChain 14 15 + 190: 6(int64_t) Load 189 + 191: 28(ptr) ImageTexelPointer 58(i2DArray) 188 21 + AtomicStore 191 116 119 190 + 195: 37(ptr) AccessChain 14 19 + 196: 11(ivec4) Load 195 + 197: 70(ivec2) VectorShuffle 196 196 0 1 + 199: 198(ptr) AccessChain 14 116 + 200: 7(int64_t) Load 199 + 202: 201(ptr) ImageTexelPointer 194(u2D) 197 21 + 203: 7(int64_t) AtomicIAdd 202 30 21 200 + 204: 198(ptr) AccessChain 14 116 + Store 204 203 + 208: 37(ptr) AccessChain 14 19 + 209: 11(ivec4) Load 208 + 210: 36(ivec3) VectorShuffle 209 209 0 1 2 + 211: 198(ptr) AccessChain 14 116 + 212: 7(int64_t) Load 211 + 213: 201(ptr) ImageTexelPointer 207(uCube) 210 21 + 214: 7(int64_t) AtomicUMin 213 30 21 212 + 215: 198(ptr) AccessChain 14 116 + Store 215 214 + 219: 37(ptr) AccessChain 14 19 + 220: 11(ivec4) Load 219 + 221: 70(ivec2) VectorShuffle 220 220 0 1 + 222: 198(ptr) AccessChain 14 116 + 223: 7(int64_t) Load 222 + 224: 201(ptr) ImageTexelPointer 218(u1DArray) 221 21 + 225: 7(int64_t) AtomicUMax 224 30 21 223 + 226: 198(ptr) AccessChain 14 116 + Store 226 225 + 230: 37(ptr) AccessChain 14 19 + 231: 11(ivec4) Load 230 + 232: 36(ivec3) VectorShuffle 231 231 0 1 2 + 233: 198(ptr) AccessChain 14 116 + 234: 7(int64_t) Load 233 + 235: 201(ptr) ImageTexelPointer 229(uCubeArray) 232 21 + 236: 7(int64_t) AtomicAnd 235 30 21 234 + 237: 198(ptr) AccessChain 14 116 + Store 237 236 + 241: 37(ptr) AccessChain 14 19 + 242: 11(ivec4) Load 241 + 243: 70(ivec2) VectorShuffle 242 242 0 1 + 245: 22(ptr) AccessChain 14 19 244 + 246: 10(int) Load 245 + 247: 198(ptr) AccessChain 14 116 + 248: 7(int64_t) Load 247 + 249: 201(ptr) ImageTexelPointer 240(u2DMS) 243 246 + 250: 7(int64_t) AtomicOr 249 30 21 248 + 251: 198(ptr) AccessChain 14 116 + Store 251 250 + 252: 37(ptr) AccessChain 14 19 + 253: 11(ivec4) Load 252 + 254: 70(ivec2) VectorShuffle 253 253 0 1 + 255: 198(ptr) AccessChain 14 116 + 256: 7(int64_t) Load 255 + 257: 201(ptr) ImageTexelPointer 194(u2D) 254 21 + 258: 7(int64_t) AtomicXor 257 30 21 256 + 259: 198(ptr) AccessChain 14 116 + Store 259 258 + 260: 37(ptr) AccessChain 14 19 + 261: 11(ivec4) Load 260 + 262: 36(ivec3) VectorShuffle 261 261 0 1 2 + 263: 198(ptr) AccessChain 14 116 + 264: 7(int64_t) Load 263 + 265: 201(ptr) ImageTexelPointer 207(uCube) 262 21 + 266: 7(int64_t) AtomicExchange 265 30 21 264 + 267: 198(ptr) AccessChain 14 116 + Store 267 266 + 268: 37(ptr) AccessChain 14 19 + 269: 11(ivec4) Load 268 + 270: 70(ivec2) VectorShuffle 269 269 0 1 + 271: 198(ptr) AccessChain 14 116 + 272: 7(int64_t) Load 271 + 273: 198(ptr) AccessChain 14 116 + 274: 7(int64_t) Load 273 + 276: 7(int64_t) IAdd 274 275 + 277: 201(ptr) ImageTexelPointer 218(u1DArray) 270 21 + 278: 7(int64_t) AtomicCompareExchange 277 30 21 21 276 272 + 279: 198(ptr) AccessChain 14 116 + Store 279 278 + 280: 37(ptr) AccessChain 14 19 + 281: 11(ivec4) Load 280 + 282: 70(ivec2) VectorShuffle 281 281 0 1 + 283: 198(ptr) AccessChain 14 116 + 284: 7(int64_t) Load 283 + 285: 201(ptr) ImageTexelPointer 194(u2D) 282 21 + 286: 7(int64_t) AtomicIAdd 285 116 119 284 + 287: 198(ptr) AccessChain 14 116 + Store 287 286 + 288: 37(ptr) AccessChain 14 19 + 289: 11(ivec4) Load 288 + 290: 36(ivec3) VectorShuffle 289 289 0 1 2 + 291: 198(ptr) AccessChain 14 116 + 292: 7(int64_t) Load 291 + 293: 201(ptr) ImageTexelPointer 207(uCube) 290 21 + 294: 7(int64_t) AtomicUMin 293 116 119 292 + 295: 198(ptr) AccessChain 14 116 + Store 295 294 + 296: 37(ptr) AccessChain 14 19 + 297: 11(ivec4) Load 296 + 298: 70(ivec2) VectorShuffle 297 297 0 1 + 299: 198(ptr) AccessChain 14 116 + 300: 7(int64_t) Load 299 + 301: 201(ptr) ImageTexelPointer 218(u1DArray) 298 21 + 302: 7(int64_t) AtomicUMax 301 116 119 300 + 303: 198(ptr) AccessChain 14 116 + Store 303 302 + 304: 37(ptr) AccessChain 14 19 + 305: 11(ivec4) Load 304 + 306: 36(ivec3) VectorShuffle 305 305 0 1 2 + 307: 198(ptr) AccessChain 14 116 + 308: 7(int64_t) Load 307 + 309: 201(ptr) ImageTexelPointer 229(uCubeArray) 306 21 + 310: 7(int64_t) AtomicAnd 309 116 119 308 + 311: 198(ptr) AccessChain 14 116 + Store 311 310 + 312: 37(ptr) AccessChain 14 19 + 313: 11(ivec4) Load 312 + 314: 70(ivec2) VectorShuffle 313 313 0 1 + 315: 22(ptr) AccessChain 14 19 244 + 316: 10(int) Load 315 + 317: 198(ptr) AccessChain 14 116 + 318: 7(int64_t) Load 317 + 319: 201(ptr) ImageTexelPointer 240(u2DMS) 314 316 + 320: 7(int64_t) AtomicOr 319 116 119 318 + 321: 198(ptr) AccessChain 14 116 + Store 321 320 + 322: 37(ptr) AccessChain 14 19 + 323: 11(ivec4) Load 322 + 324: 70(ivec2) VectorShuffle 323 323 0 1 + 325: 198(ptr) AccessChain 14 116 + 326: 7(int64_t) Load 325 + 327: 201(ptr) ImageTexelPointer 194(u2D) 324 21 + 328: 7(int64_t) AtomicXor 327 116 119 326 + 329: 198(ptr) AccessChain 14 116 + Store 329 328 + 330: 37(ptr) AccessChain 14 19 + 331: 11(ivec4) Load 330 + 332: 36(ivec3) VectorShuffle 331 331 0 1 2 + 333: 198(ptr) AccessChain 14 116 + 334: 7(int64_t) Load 333 + 335: 201(ptr) ImageTexelPointer 207(uCube) 332 21 + 336: 7(int64_t) AtomicExchange 335 116 119 334 + 337: 198(ptr) AccessChain 14 116 + Store 337 336 + 338: 37(ptr) AccessChain 14 19 + 339: 11(ivec4) Load 338 + 340: 70(ivec2) VectorShuffle 339 339 0 1 + 341: 198(ptr) AccessChain 14 116 + 342: 7(int64_t) Load 341 + 343: 198(ptr) AccessChain 14 116 + 344: 7(int64_t) Load 343 + 345: 7(int64_t) IAdd 344 275 + 346: 201(ptr) ImageTexelPointer 218(u1DArray) 340 21 + 347: 7(int64_t) AtomicCompareExchange 346 116 119 119 345 342 + 348: 198(ptr) AccessChain 14 116 + Store 348 347 + 349: 37(ptr) AccessChain 14 19 + 350: 11(ivec4) Load 349 + 351: 36(ivec3) VectorShuffle 350 350 0 1 2 + 352: 201(ptr) ImageTexelPointer 229(uCubeArray) 351 21 + 353: 7(int64_t) AtomicLoad 352 116 119 + 354: 198(ptr) AccessChain 14 116 + Store 354 353 + 355: 37(ptr) AccessChain 14 19 + 356: 11(ivec4) Load 355 + 357: 70(ivec2) VectorShuffle 356 356 0 1 + 358: 22(ptr) AccessChain 14 19 244 + 359: 10(int) Load 358 + 360: 198(ptr) AccessChain 14 116 + 361: 7(int64_t) Load 360 + 362: 201(ptr) ImageTexelPointer 240(u2DMS) 357 359 + AtomicStore 362 116 119 361 + 364: 16 Load 18(i1D) + 365: 22(ptr) AccessChain 14 19 21 + 366: 10(int) Load 365 + 367: 8(i64vec4) ImageRead 364 366 + 369: 368(ptr) AccessChain 14 363 + 370: 8(i64vec4) Load 369 + 371: 8(i64vec4) IAdd 370 367 + 372: 368(ptr) AccessChain 14 363 + Store 372 371 + 373: 33 Load 35(i3D) + 374: 37(ptr) AccessChain 14 19 + 375: 11(ivec4) Load 374 + 376: 36(ivec3) VectorShuffle 375 375 0 1 2 + 377: 8(i64vec4) ImageRead 373 376 + 378: 368(ptr) AccessChain 14 363 + 379: 8(i64vec4) Load 378 + 380: 8(i64vec4) IAdd 379 377 + 381: 368(ptr) AccessChain 14 363 + Store 381 380 + 382: 46 Load 48(iBuf) + 383: 22(ptr) AccessChain 14 19 21 + 384: 10(int) Load 383 + 385: 8(i64vec4) ImageRead 382 384 + 386: 368(ptr) AccessChain 14 363 + 387: 8(i64vec4) Load 386 + 388: 8(i64vec4) IAdd 387 385 + 389: 368(ptr) AccessChain 14 363 + Store 389 388 + 390: 56 Load 58(i2DArray) + 391: 37(ptr) AccessChain 14 19 + 392: 11(ivec4) Load 391 + 393: 36(ivec3) VectorShuffle 392 392 0 1 2 + 394: 8(i64vec4) ImageRead 390 393 + 395: 368(ptr) AccessChain 14 363 + 396: 8(i64vec4) Load 395 + 397: 8(i64vec4) IAdd 396 394 + 398: 368(ptr) AccessChain 14 363 + Store 398 397 + 399: 67 Load 69(i2DRect) + 400: 37(ptr) AccessChain 14 19 + 401: 11(ivec4) Load 400 + 402: 70(ivec2) VectorShuffle 401 401 0 1 + 403: 8(i64vec4) ImageRead 399 402 + 404: 368(ptr) AccessChain 14 363 + 405: 8(i64vec4) Load 404 + 406: 8(i64vec4) IAdd 405 403 + 407: 368(ptr) AccessChain 14 363 + Store 407 406 + 408: 79 Load 81(i2DMSArray) + 409: 37(ptr) AccessChain 14 19 + 410: 11(ivec4) Load 409 + 411: 36(ivec3) VectorShuffle 410 410 0 1 2 + 412: 22(ptr) AccessChain 14 19 85 + 413: 10(int) Load 412 + 414: 8(i64vec4) ImageRead 408 411 Sample 413 + 415: 368(ptr) AccessChain 14 363 + 416: 8(i64vec4) Load 415 + 417: 8(i64vec4) IAdd 416 414 + 418: 368(ptr) AccessChain 14 363 + Store 418 417 + 419: 192 Load 194(u2D) + 420: 37(ptr) AccessChain 14 19 + 421: 11(ivec4) Load 420 + 422: 70(ivec2) VectorShuffle 421 421 0 1 + 425: 424(ptr) AccessChain 14 423 + 426: 9(i64vec4) Load 425 + ImageWrite 419 422 426 + 427: 205 Load 207(uCube) + 428: 37(ptr) AccessChain 14 19 + 429: 11(ivec4) Load 428 + 430: 36(ivec3) VectorShuffle 429 429 0 1 2 + 431: 424(ptr) AccessChain 14 423 + 432: 9(i64vec4) Load 431 + ImageWrite 427 430 432 + 433: 216 Load 218(u1DArray) + 434: 37(ptr) AccessChain 14 19 + 435: 11(ivec4) Load 434 + 436: 70(ivec2) VectorShuffle 435 435 0 1 + 437: 424(ptr) AccessChain 14 423 + 438: 9(i64vec4) Load 437 + ImageWrite 433 436 438 + 439: 227 Load 229(uCubeArray) + 440: 37(ptr) AccessChain 14 19 + 441: 11(ivec4) Load 440 + 442: 36(ivec3) VectorShuffle 441 441 0 1 2 + 443: 424(ptr) AccessChain 14 423 + 444: 9(i64vec4) Load 443 + ImageWrite 439 442 444 + 445: 238 Load 240(u2DMS) + 446: 37(ptr) AccessChain 14 19 + 447: 11(ivec4) Load 446 + 448: 70(ivec2) VectorShuffle 447 447 0 1 + 449: 22(ptr) AccessChain 14 19 244 + 450: 10(int) Load 449 + 451: 424(ptr) AccessChain 14 423 + 452: 9(i64vec4) Load 451 + ImageWrite 445 448 452 Sample 450 + 453: 33 Load 35(i3D) + 454: 37(ptr) AccessChain 14 19 + 455: 11(ivec4) Load 454 + 456: 36(ivec3) VectorShuffle 455 455 0 1 2 + 457: 368(ptr) AccessChain 14 363 + 459:458(ResType) ImageSparseRead 453 456 + 460: 8(i64vec4) CompositeExtract 459 1 + Store 457 460 + 461: 10(int) CompositeExtract 459 0 + 462: 56 Load 58(i2DArray) + 463: 37(ptr) AccessChain 14 19 + 464: 11(ivec4) Load 463 + 465: 36(ivec3) VectorShuffle 464 464 0 1 2 + 466: 368(ptr) AccessChain 14 363 + 467:458(ResType) ImageSparseRead 462 465 + 468: 8(i64vec4) CompositeExtract 467 1 + Store 466 468 + 469: 10(int) CompositeExtract 467 0 + 470: 67 Load 69(i2DRect) + 471: 37(ptr) AccessChain 14 19 + 472: 11(ivec4) Load 471 + 473: 70(ivec2) VectorShuffle 472 472 0 1 + 474: 368(ptr) AccessChain 14 363 + 475:458(ResType) ImageSparseRead 470 473 + 476: 8(i64vec4) CompositeExtract 475 1 + Store 474 476 + 477: 10(int) CompositeExtract 475 0 + 478: 192 Load 194(u2D) + 479: 37(ptr) AccessChain 14 19 + 480: 11(ivec4) Load 479 + 481: 70(ivec2) VectorShuffle 480 480 0 1 + 482: 424(ptr) AccessChain 14 423 + 484:483(ResType) ImageSparseRead 478 481 + 485: 9(i64vec4) CompositeExtract 484 1 + Store 482 485 + 486: 10(int) CompositeExtract 484 0 + 487: 205 Load 207(uCube) + 488: 37(ptr) AccessChain 14 19 + 489: 11(ivec4) Load 488 + 490: 36(ivec3) VectorShuffle 489 489 0 1 2 + 491: 424(ptr) AccessChain 14 423 + 492:483(ResType) ImageSparseRead 487 490 + 493: 9(i64vec4) CompositeExtract 492 1 + Store 491 493 + 494: 10(int) CompositeExtract 492 0 + 495: 227 Load 229(uCubeArray) + 496: 37(ptr) AccessChain 14 19 + 497: 11(ivec4) Load 496 + 498: 36(ivec3) VectorShuffle 497 497 0 1 2 + 499: 424(ptr) AccessChain 14 423 + 500:483(ResType) ImageSparseRead 495 498 + 501: 9(i64vec4) CompositeExtract 500 1 + Store 499 501 + 502: 10(int) CompositeExtract 500 0 + Return + FunctionEnd diff --git a/Test/baseResults/spv.imageLoadStoreLod.frag.out b/Test/baseResults/spv.imageLoadStoreLod.frag.out index 2f83604f93..b809474276 100644 --- a/Test/baseResults/spv.imageLoadStoreLod.frag.out +++ b/Test/baseResults/spv.imageLoadStoreLod.frag.out @@ -1,20 +1,25 @@ spv.imageLoadStoreLod.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 82 +// Id's are bound by 148 Capability Shader + Capability Int64 Capability ImageCubeArray Capability SparseResidency Capability Image1D Capability ImageReadWriteLodAMD + Capability Int64ImageEXT Extension "SPV_AMD_shader_image_load_store_lod" + Extension "SPV_EXT_shader_image_int64" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 77 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_AMD_shader_image_load_store_lod" + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_EXT_shader_image_int64" Name 4 "main" Name 9 "f4" Name 14 "i1D" @@ -27,6 +32,18 @@ spv.imageLoadStoreLod.frag Name 65 "ResType" Name 71 "uiCubeArray" Name 77 "fragColor" + Name 86 "Buf" + MemberName 86(Buf) 0 "i64v4" + MemberName 86(Buf) 1 "u64v4" + Name 88 "" + Name 92 "i64i1D" + Name 102 "i64i2D" + Name 111 "i64i3D" + Name 120 "u64iCube" + Name 127 "u64i1DArray" + Name 133 "u64i2DArray" + Name 136 "ResType" + Name 142 "u64iCubeArray" Decorate 14(i1D) DescriptorSet 0 Decorate 14(i1D) Binding 0 Decorate 24(i2D) DescriptorSet 0 @@ -42,6 +59,25 @@ spv.imageLoadStoreLod.frag Decorate 71(uiCubeArray) DescriptorSet 0 Decorate 71(uiCubeArray) Binding 6 Decorate 77(fragColor) Location 0 + MemberDecorate 86(Buf) 0 Offset 0 + MemberDecorate 86(Buf) 1 Offset 32 + Decorate 86(Buf) BufferBlock + Decorate 88 DescriptorSet 0 + Decorate 88 Binding 14 + Decorate 92(i64i1D) DescriptorSet 0 + Decorate 92(i64i1D) Binding 7 + Decorate 102(i64i2D) DescriptorSet 0 + Decorate 102(i64i2D) Binding 8 + Decorate 111(i64i3D) DescriptorSet 0 + Decorate 111(i64i3D) Binding 9 + Decorate 120(u64iCube) DescriptorSet 0 + Decorate 120(u64iCube) Binding 10 + Decorate 127(u64i1DArray) DescriptorSet 0 + Decorate 127(u64i1DArray) Binding 11 + Decorate 133(u64i2DArray) DescriptorSet 0 + Decorate 133(u64i2DArray) Binding 12 + Decorate 142(u64iCubeArray) DescriptorSet 0 + Decorate 142(u64iCubeArray) Binding 13 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -88,6 +124,38 @@ spv.imageLoadStoreLod.frag 71(uiCubeArray): 70(ptr) Variable UniformConstant 76: TypePointer Output 7(fvec4) 77(fragColor): 76(ptr) Variable Output + 82: TypeInt 64 1 + 83: TypeVector 82(int64_t) 4 + 84: TypeInt 64 0 + 85: TypeVector 84(int64_t) 4 + 86(Buf): TypeStruct 83(i64vec4) 85(i64vec4) + 87: TypePointer Uniform 86(Buf) + 88: 87(ptr) Variable Uniform + 89: 16(int) Constant 0 + 90: TypeImage 82(int64_t) 1D nonsampled format:R64i + 91: TypePointer UniformConstant 90 + 92(i64i1D): 91(ptr) Variable UniformConstant + 95: TypePointer Uniform 83(i64vec4) + 100: TypeImage 82(int64_t) 2D nonsampled format:R64i + 101: TypePointer UniformConstant 100 + 102(i64i2D): 101(ptr) Variable UniformConstant + 109: TypeImage 82(int64_t) 3D nonsampled format:R64i + 110: TypePointer UniformConstant 109 + 111(i64i3D): 110(ptr) Variable UniformConstant + 118: TypeImage 84(int64_t) Cube nonsampled format:R64ui + 119: TypePointer UniformConstant 118 + 120(u64iCube): 119(ptr) Variable UniformConstant + 122: TypePointer Uniform 85(i64vec4) + 125: TypeImage 84(int64_t) 1D array nonsampled format:R64ui + 126: TypePointer UniformConstant 125 +127(u64i1DArray): 126(ptr) Variable UniformConstant + 131: TypeImage 84(int64_t) 2D array nonsampled format:R64ui + 132: TypePointer UniformConstant 131 +133(u64i2DArray): 132(ptr) Variable UniformConstant + 136(ResType): TypeStruct 16(int) 85(i64vec4) + 140: TypeImage 84(int64_t) Cube array nonsampled format:R64ui + 141: TypePointer UniformConstant 140 +142(u64iCubeArray): 141(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 9(f4): 8(ptr) Variable Function @@ -131,5 +199,46 @@ spv.imageLoadStoreLod.frag 80: 7(fvec4) ConvertUToF 79 81: 7(fvec4) FAdd 78 80 Store 77(fragColor) 81 + 93: 90 Load 92(i64i1D) + 94: 83(i64vec4) ImageRead 93 17 Lod 18 + 96: 95(ptr) AccessChain 88 89 + 97: 83(i64vec4) Load 96 + 98: 83(i64vec4) IAdd 97 94 + 99: 95(ptr) AccessChain 88 89 + Store 99 98 + 103: 100 Load 102(i64i2D) + 104: 83(i64vec4) ImageRead 103 28 Lod 18 + 105: 95(ptr) AccessChain 88 89 + 106: 83(i64vec4) Load 105 + 107: 83(i64vec4) IAdd 106 104 + 108: 95(ptr) AccessChain 88 89 + Store 108 107 + 112: 109 Load 111(i64i3D) + 113: 83(i64vec4) ImageRead 112 40 Lod 18 + 114: 95(ptr) AccessChain 88 89 + 115: 83(i64vec4) Load 114 + 116: 83(i64vec4) IAdd 115 113 + 117: 95(ptr) AccessChain 88 89 + Store 117 116 + 121: 118 Load 120(u64iCube) + 123: 122(ptr) AccessChain 88 17 + 124: 85(i64vec4) Load 123 + ImageWrite 121 40 124 Lod 18 + 128: 125 Load 127(u64i1DArray) + 129: 122(ptr) AccessChain 88 17 + 130: 85(i64vec4) Load 129 + ImageWrite 128 28 130 Lod 18 + 134: 131 Load 133(u64i2DArray) + 135: 122(ptr) AccessChain 88 17 + 137:136(ResType) ImageSparseRead 134 40 Lod 18 + 138: 85(i64vec4) CompositeExtract 137 1 + Store 135 138 + 139: 16(int) CompositeExtract 137 0 + 143: 140 Load 142(u64iCubeArray) + 144: 122(ptr) AccessChain 88 17 + 145:136(ResType) ImageSparseRead 143 40 Lod 18 + 146: 85(i64vec4) CompositeExtract 145 1 + Store 144 146 + 147: 16(int) CompositeExtract 145 0 Return FunctionEnd diff --git a/Test/spv.imageAtomic64.frag b/Test/spv.imageAtomic64.frag new file mode 100644 index 0000000000..bd671d9856 --- /dev/null +++ b/Test/spv.imageAtomic64.frag @@ -0,0 +1,92 @@ +#version 450 core + +#extension GL_ARB_gpu_shader_int64: enable +#extension GL_EXT_shader_image_int64: enable +#extension GL_KHR_memory_scope_semantics: enable +#extension GL_ARB_sparse_texture2: enable + +layout(binding = 0, r64i) uniform i64image1D i1D; +layout(binding = 1, r64ui) uniform u64image2D u2D; +layout(binding = 2, r64i) uniform i64image3D i3D; +layout(binding = 3, r64ui) uniform u64imageCube uCube; +layout(binding = 4, r64i) uniform i64imageBuffer iBuf; +layout(binding = 5, r64ui) uniform u64image1DArray u1DArray; +layout(binding = 6, r64i) uniform i64image2DArray i2DArray; +layout(binding = 7, r64ui) uniform u64imageCubeArray uCubeArray; +layout(binding = 8, r64i) uniform i64image2DRect i2DRect; +layout(binding = 9, r64ui) uniform u64image2DMS u2DMS; +layout(binding = 10, r64i) uniform i64image2DMSArray i2DMSArray; + +layout(binding = 11) buffer Buf +{ + int64_t i64; + uint64_t u64; + i64vec4 i64v4; + u64vec4 u64v4; + ivec4 i32v4; +}; + +void main() +{ + i64 = imageAtomicAdd(i1D, i32v4.x, i64); + i64 = imageAtomicMin(i3D, i32v4.xyz, i64); + i64 = imageAtomicMax(iBuf, i32v4.x, i64); + i64 = imageAtomicAnd(i2DArray, i32v4.xyz, i64); + i64 = imageAtomicOr(i2DRect, i32v4.xy, i64); + i64 = imageAtomicXor(i2DMSArray, i32v4.xyz, i32v4.w, i64); + i64 = imageAtomicExchange(i1D, i32v4.x, i64); + i64 = imageAtomicCompSwap(i3D, i32v4.xyz, i64, i64 + 1); + + i64 = imageAtomicAdd(i1D, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + i64 = imageAtomicMin(i3D, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + i64 = imageAtomicMax(iBuf, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + i64 = imageAtomicAnd(i2DArray, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + i64 = imageAtomicOr(i2DRect, i32v4.xy, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + i64 = imageAtomicXor(i2DMSArray, i32v4.xyz, i32v4.w, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + i64 = imageAtomicExchange(i1D, i32v4.x, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + i64 = imageAtomicCompSwap(i3D, i32v4.xyz, i64, i64 + 1, gl_ScopeDevice, + gl_StorageSemanticsImage, gl_SemanticsRelaxed, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + i64 = imageAtomicLoad(iBuf, i32v4.x, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + imageAtomicStore(i2DArray, i32v4.xyz, i64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + + u64 = imageAtomicAdd(u2D, i32v4.xy, u64); + u64 = imageAtomicMin(uCube, i32v4.xyz, u64); + u64 = imageAtomicMax(u1DArray, i32v4.xy, u64); + u64 = imageAtomicAnd(uCubeArray, i32v4.xyz, u64); + u64 = imageAtomicOr(u2DMS, i32v4.xy, i32v4.z, u64); + u64 = imageAtomicXor(u2D, i32v4.xy, u64); + u64 = imageAtomicExchange(uCube, i32v4.xyz, u64); + u64 = imageAtomicCompSwap(u1DArray, i32v4.xy, u64, u64 + 1); + + u64 = imageAtomicAdd(u2D, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + u64 = imageAtomicMin(uCube, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + u64 = imageAtomicMax(u1DArray, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + u64 = imageAtomicAnd(uCubeArray, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + u64 = imageAtomicOr(u2DMS, i32v4.xy, i32v4.z, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + u64 = imageAtomicXor(u2D, i32v4.xy, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + u64 = imageAtomicExchange(uCube, i32v4.xyz, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + u64 = imageAtomicCompSwap(u1DArray, i32v4.xy, u64, u64 + 1, gl_ScopeDevice, + gl_StorageSemanticsImage, gl_SemanticsRelaxed, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + u64 = imageAtomicLoad(uCubeArray, i32v4.xyz, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + imageAtomicStore(u2DMS, i32v4.xy, i32v4.z, u64, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); + + i64v4 += imageLoad(i1D, i32v4.x); + i64v4 += imageLoad(i3D, i32v4.xyz); + i64v4 += imageLoad(iBuf, i32v4.x); + i64v4 += imageLoad(i2DArray, i32v4.xyz); + i64v4 += imageLoad(i2DRect, i32v4.xy); + i64v4 += imageLoad(i2DMSArray, i32v4.xyz, i32v4.w); + + imageStore(u2D, i32v4.xy, u64v4); + imageStore(uCube, i32v4.xyz, u64v4); + imageStore(u1DArray, i32v4.xy, u64v4); + imageStore(uCubeArray, i32v4.xyz, u64v4); + imageStore(u2DMS, i32v4.xy, i32v4.z, u64v4); + + sparseImageLoadARB(i3D, i32v4.xyz, i64v4); + sparseImageLoadARB(i2DArray, i32v4.xyz, i64v4); + sparseImageLoadARB(i2DRect, i32v4.xy, i64v4); + sparseImageLoadARB(u2D, i32v4.xy, u64v4); + sparseImageLoadARB(uCube, i32v4.xyz, u64v4); + sparseImageLoadARB(uCubeArray, i32v4.xyz, u64v4); +} \ No newline at end of file diff --git a/Test/spv.imageLoadStoreLod.frag b/Test/spv.imageLoadStoreLod.frag index 0da1da125d..ed3cad2242 100644 --- a/Test/spv.imageLoadStoreLod.frag +++ b/Test/spv.imageLoadStoreLod.frag @@ -1,6 +1,8 @@ #version 450 core #extension GL_AMD_shader_image_load_store_lod: enable +#extension GL_ARB_gpu_shader_int64: enable +#extension GL_EXT_shader_image_int64: enable layout(rgba32f, binding = 0) uniform image1D i1D; layout(rgba32f, binding = 1) uniform image2D i2D; @@ -12,6 +14,20 @@ layout(rgba32ui, binding = 6) uniform uimageCubeArray uiCubeArray; layout(location = 0) out vec4 fragColor; +layout(r64i, binding = 7) uniform i64image1D i64i1D; +layout(r64i, binding = 8) uniform i64image2D i64i2D; +layout(r64i, binding = 9) uniform i64image3D i64i3D; +layout(r64ui, binding = 10) uniform u64imageCube u64iCube; +layout(r64ui, binding = 11) uniform u64image1DArray u64i1DArray; +layout(r64ui, binding = 12) uniform u64image2DArray u64i2DArray; +layout(r64ui, binding = 13) uniform u64imageCubeArray u64iCubeArray; + +layout(binding = 14) buffer Buf +{ + i64vec4 i64v4; + u64vec4 u64v4; +}; + void main() { const int c1 = 1; @@ -33,4 +49,14 @@ void main() sparseImageLoadLodAMD(uiCubeArray, c3, lod, u4); fragColor = f4 + vec4(u4); + + i64v4 += imageLoadLodAMD(i64i1D, c1, lod); + i64v4 += imageLoadLodAMD(i64i2D, c2, lod); + i64v4 += imageLoadLodAMD(i64i3D, c3, lod); + + imageStoreLodAMD(u64iCube, c3, lod, u64v4); + imageStoreLodAMD(u64i1DArray, c2, lod, u64v4); + + sparseImageLoadLodAMD(u64i2DArray, c3, lod, u64v4); + sparseImageLoadLodAMD(u64iCubeArray, c3, lod, u64v4); } \ No newline at end of file diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 514fa10c8d..a3043f8ab0 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -406,6 +406,7 @@ enum TLayoutFormat { ElfRg8i, ElfR16i, ElfR8i, + ElfR64i, ElfIntGuard, // to help with comparisons @@ -423,6 +424,7 @@ enum TLayoutFormat { ElfRg8ui, ElfR16ui, ElfR8ui, + ElfR64ui, ElfCount }; @@ -1117,6 +1119,8 @@ class TQualifier { case ElfR32ui: return "r32ui"; case ElfR16ui: return "r16ui"; case ElfR8ui: return "r8ui"; + case ElfR64ui: return "r64ui"; + case ElfR64i: return "r64i"; default: return "none"; } } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 0ce2583b3d..c765199bd2 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -509,6 +509,8 @@ TBuiltIns::TBuiltIns() prefixes[EbtUint8] = "u8"; prefixes[EbtInt16] = "i16"; prefixes[EbtUint16] = "u16"; + prefixes[EbtInt64] = "i64"; + prefixes[EbtUint64] = "u64"; #endif postfixes[2] = "2"; @@ -5724,6 +5726,45 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[static_cast(stage)].append("const highp int gl_ShadingRateFlag4HorizontalPixelsEXT = 8;\n"); } } + + // GL_EXT_shader_image_int64 + if ((profile != EEsProfile && version >= 420) || + (profile == EEsProfile && version >= 310)) { + + const TBasicType bTypes[] = { EbtInt64, EbtUint64 }; + for (int ms = 0; ms <= 1; ++ms) { // loop over "bool" multisample or not + for (int arrayed = 0; arrayed <= 1; ++arrayed) { // loop over "bool" arrayed or not + for (int dim = Esd1D; dim < EsdSubpass; ++dim) { // 1D, ..., buffer + if ((dim == Esd1D || dim == EsdRect) && profile == EEsProfile) + continue; + + if ((dim == Esd3D || dim == EsdRect || dim == EsdBuffer) && arrayed) + continue; + + if (dim != Esd2D && ms) + continue; + + // Loop over the bTypes + for (size_t bType = 0; bType < sizeof(bTypes)/sizeof(TBasicType); ++bType) { + // + // Now, make all the function prototypes for the type we just built... + // + TSampler sampler; + + sampler.setImage(bTypes[bType], (TSamplerDim)dim, arrayed ? true : false, + false, + ms ? true : false); + + TString typeName = sampler.getString(); + + addQueryFunctions(sampler, typeName, version, profile); + addImageFunctions(sampler, typeName, version, profile); + } + } + } + } + } + #endif // !GLSLANG_WEB // printf("%s\n", commonBuiltins.c_str()); @@ -5820,7 +5861,6 @@ void TBuiltIns::add2ndGenerationSamplingImaging(int version, EProfile profile, c #endif if (shadow && (bTypes[bType] == EbtInt || bTypes[bType] == EbtUint)) continue; - // // Now, make all the function prototypes for the type we just built... // @@ -6045,8 +6085,16 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int if ( profile != EEsProfile || (profile == EEsProfile && version >= 310)) { - if (sampler.type == EbtInt || sampler.type == EbtUint) { - const char* dataType = sampler.type == EbtInt ? "highp int" : "highp uint"; + if (sampler.type == EbtInt || sampler.type == EbtUint || sampler.type == EbtInt64 || sampler.type == EbtUint64 ) { + + const char* dataType; + switch (sampler.type) { + case(EbtInt): dataType = "highp int"; break; + case(EbtUint): dataType = "highp uint"; break; + case(EbtInt64): dataType = "highp int64_t"; break; + case(EbtUint64): dataType = "highp uint64_t"; break; + default: dataType = ""; + } const int numBuiltins = 7; diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 032774f900..63fb957c0b 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2121,9 +2121,15 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan { // Make sure the image types have the correct layout() format and correct argument types const TType& imageType = arg0->getType(); - if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint) { - if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui) + if (imageType.getSampler().type == EbtInt || imageType.getSampler().type == EbtUint || + imageType.getSampler().type == EbtInt64 || imageType.getSampler().type == EbtUint64) { + if (imageType.getQualifier().getFormat() != ElfR32i && imageType.getQualifier().getFormat() != ElfR32ui && + imageType.getQualifier().getFormat() != ElfR64i && imageType.getQualifier().getFormat() != ElfR64ui) error(loc, "only supported on image with format r32i or r32ui", fnCandidate.getName().c_str(), ""); + if (callNode.getType().getBasicType() == EbtInt64 && imageType.getQualifier().getFormat() != ElfR64i) + error(loc, "only supported on image with format r64i", fnCandidate.getName().c_str(), ""); + else if (callNode.getType().getBasicType() == EbtUint64 && imageType.getQualifier().getFormat() != ElfR64ui) + error(loc, "only supported on image with format r64ui", fnCandidate.getName().c_str(), ""); } else { bool isImageAtomicOnFloatAllowed = ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) || (fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) || diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index 3a5f090f27..1124b943c3 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -471,6 +471,28 @@ void TScanContext::fillInKeywordMap() (*KeywordMap)["image2DMSArray"] = IMAGE2DMSARRAY; (*KeywordMap)["iimage2DMSArray"] = IIMAGE2DMSARRAY; (*KeywordMap)["uimage2DMSArray"] = UIMAGE2DMSARRAY; + (*KeywordMap)["i64image1D"] = I64IMAGE1D; + (*KeywordMap)["u64image1D"] = U64IMAGE1D; + (*KeywordMap)["i64image2D"] = I64IMAGE2D; + (*KeywordMap)["u64image2D"] = U64IMAGE2D; + (*KeywordMap)["i64image3D"] = I64IMAGE3D; + (*KeywordMap)["u64image3D"] = U64IMAGE3D; + (*KeywordMap)["i64image2DRect"] = I64IMAGE2DRECT; + (*KeywordMap)["u64image2DRect"] = U64IMAGE2DRECT; + (*KeywordMap)["i64imageCube"] = I64IMAGECUBE; + (*KeywordMap)["u64imageCube"] = U64IMAGECUBE; + (*KeywordMap)["i64imageBuffer"] = I64IMAGEBUFFER; + (*KeywordMap)["u64imageBuffer"] = U64IMAGEBUFFER; + (*KeywordMap)["i64image1DArray"] = I64IMAGE1DARRAY; + (*KeywordMap)["u64image1DArray"] = U64IMAGE1DARRAY; + (*KeywordMap)["i64image2DArray"] = I64IMAGE2DARRAY; + (*KeywordMap)["u64image2DArray"] = U64IMAGE2DARRAY; + (*KeywordMap)["i64imageCubeArray"] = I64IMAGECUBEARRAY; + (*KeywordMap)["u64imageCubeArray"] = U64IMAGECUBEARRAY; + (*KeywordMap)["i64image2DMS"] = I64IMAGE2DMS; + (*KeywordMap)["u64image2DMS"] = U64IMAGE2DMS; + (*KeywordMap)["i64image2DMSArray"] = I64IMAGE2DMSARRAY; + (*KeywordMap)["u64image2DMSArray"] = U64IMAGE2DMSARRAY; (*KeywordMap)["double"] = DOUBLE; (*KeywordMap)["dvec2"] = DVEC2; (*KeywordMap)["dvec3"] = DVEC3; @@ -1147,6 +1169,19 @@ int TScanContext::tokenizeIdentifier() afterType = true; return firstGenerationImage(false); + case I64IMAGE1D: + case U64IMAGE1D: + case I64IMAGE1DARRAY: + case U64IMAGE1DARRAY: + case I64IMAGE2DRECT: + case U64IMAGE2DRECT: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) { + return firstGenerationImage(false); + } + return identifierOrType(); + case IMAGEBUFFER: case IIMAGEBUFFER: case UIMAGEBUFFER: @@ -1155,6 +1190,18 @@ int TScanContext::tokenizeIdentifier() parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer)) return keyword; return firstGenerationImage(false); + + case I64IMAGEBUFFER: + case U64IMAGEBUFFER: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) { + if ((parseContext.isEsProfile() && parseContext.version >= 320) || + parseContext.extensionsTurnedOn(Num_AEP_texture_buffer, AEP_texture_buffer)) + return keyword; + return firstGenerationImage(false); + } + return identifierOrType(); case IMAGE2D: case IIMAGE2D: @@ -1171,6 +1218,20 @@ int TScanContext::tokenizeIdentifier() afterType = true; return firstGenerationImage(true); + case I64IMAGE2D: + case U64IMAGE2D: + case I64IMAGE3D: + case U64IMAGE3D: + case I64IMAGECUBE: + case U64IMAGECUBE: + case I64IMAGE2DARRAY: + case U64IMAGE2DARRAY: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) + return firstGenerationImage(true); + return identifierOrType(); + case IMAGECUBEARRAY: case IIMAGECUBEARRAY: case UIMAGECUBEARRAY: @@ -1179,6 +1240,18 @@ int TScanContext::tokenizeIdentifier() parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array)) return keyword; return secondGenerationImage(); + + case I64IMAGECUBEARRAY: + case U64IMAGECUBEARRAY: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) { + if ((parseContext.isEsProfile() && parseContext.version >= 320) || + parseContext.extensionsTurnedOn(Num_AEP_texture_cube_map_array, AEP_texture_cube_map_array)) + return keyword; + return secondGenerationImage(); + } + return identifierOrType(); case IMAGE2DMS: case IIMAGE2DMS: @@ -1188,6 +1261,17 @@ int TScanContext::tokenizeIdentifier() case UIMAGE2DMSARRAY: afterType = true; return secondGenerationImage(); + + case I64IMAGE2DMS: + case U64IMAGE2DMS: + case I64IMAGE2DMSARRAY: + case U64IMAGE2DMSARRAY: + afterType = true; + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_shader_image_int64)) { + return secondGenerationImage(); + } + return identifierOrType(); case DOUBLE: case DVEC2: diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index e245814503..f6291c397d 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -85,6 +85,8 @@ void TType::buildMangledName(TString& mangledName) const #endif case EbtInt: mangledName += "i"; break; case EbtUint: mangledName += "u"; break; + case EbtInt64: mangledName += "i64"; break; + case EbtUint64: mangledName += "u64"; break; default: break; // some compilers want this } if (sampler.isImageClass()) diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 92d8d8052f..48d93cfc61 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -328,6 +328,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_blend_func_extended] = EBhDisable; extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable; extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -477,6 +478,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_KHR_shader_subgroup_clustered 1\n" "#define GL_KHR_shader_subgroup_quad 1\n" + "#define GL_EXT_shader_image_int64 1\n" "#define GL_EXT_shader_atomic_int64 1\n" "#define GL_EXT_shader_realtime_clock 1\n" "#define GL_EXT_ray_tracing 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 7c38de3912..e484f556ab 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -200,6 +200,7 @@ const char* const E_GL_EXT_ray_flags_primitive_culling = "GL_EXT_ray_flags_ const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended"; const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions"; const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate"; +const char* const E_GL_EXT_shader_image_int64 = "GL_EXT_shader_image_int64"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 6bd3759abc..f71d4b9c9f 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -242,6 +242,18 @@ GLSLANG_WEB_EXCLUDE_ON %token F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY %token F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY +%token I64IMAGE1D U64IMAGE1D +%token I64IMAGE2D U64IMAGE2D +%token I64IMAGE3D U64IMAGE3D +%token I64IMAGE2DRECT U64IMAGE2DRECT +%token I64IMAGECUBE U64IMAGECUBE +%token I64IMAGEBUFFER U64IMAGEBUFFER +%token I64IMAGE1DARRAY U64IMAGE1DARRAY +%token I64IMAGE2DARRAY U64IMAGE2DARRAY +%token I64IMAGECUBEARRAY U64IMAGECUBEARRAY +%token I64IMAGE2DMS U64IMAGE2DMS +%token I64IMAGE2DMSARRAY U64IMAGE2DMSARRAY + // texture without sampler %token TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY %token TEXTURE1D ITEXTURE1D UTEXTURE1D @@ -3203,6 +3215,116 @@ GLSLANG_WEB_EXCLUDE_ON $$.basicType = EbtSampler; $$.sampler.setImage(EbtUint, Esd2D, true, false, true); } + | I64IMAGE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd1D); + } + | U64IMAGE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd1D); + } + | I64IMAGE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd2D); + } + | U64IMAGE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd2D); + } + | I64IMAGE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd3D); + } + | U64IMAGE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd3D); + } + | I64IMAGE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, EsdRect); + } + | U64IMAGE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, EsdRect); + } + | I64IMAGECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, EsdCube); + } + | U64IMAGECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, EsdCube); + } + | I64IMAGEBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, EsdBuffer); + } + | U64IMAGEBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, EsdBuffer); + } + | I64IMAGE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd1D, true); + } + | U64IMAGE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd1D, true); + } + | I64IMAGE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd2D, true); + } + | U64IMAGE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd2D, true); + } + | I64IMAGECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, EsdCube, true); + } + | U64IMAGECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, EsdCube, true); + } + | I64IMAGE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd2D, false, false, true); + } + | U64IMAGE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd2D, false, false, true); + } + | I64IMAGE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd2D, true, false, true); + } + | U64IMAGE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd2D, true, false, true); + } | SAMPLEREXTERNALOES { // GL_OES_EGL_image_external $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtSampler; diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index f5070026ce..d7eb358764 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -242,6 +242,18 @@ extern int yylex(YYSTYPE*, TParseContext&); %token F16IMAGECUBE F16IMAGE1DARRAY F16IMAGE2DARRAY F16IMAGECUBEARRAY %token F16IMAGEBUFFER F16IMAGE2DMS F16IMAGE2DMSARRAY +%token I64IMAGE1D U64IMAGE1D +%token I64IMAGE2D U64IMAGE2D +%token I64IMAGE3D U64IMAGE3D +%token I64IMAGE2DRECT U64IMAGE2DRECT +%token I64IMAGECUBE U64IMAGECUBE +%token I64IMAGEBUFFER U64IMAGEBUFFER +%token I64IMAGE1DARRAY U64IMAGE1DARRAY +%token I64IMAGE2DARRAY U64IMAGE2DARRAY +%token I64IMAGECUBEARRAY U64IMAGECUBEARRAY +%token I64IMAGE2DMS U64IMAGE2DMS +%token I64IMAGE2DMSARRAY U64IMAGE2DMSARRAY + // texture without sampler %token TEXTURECUBEARRAY ITEXTURECUBEARRAY UTEXTURECUBEARRAY %token TEXTURE1D ITEXTURE1D UTEXTURE1D @@ -3203,6 +3215,116 @@ type_specifier_nonarray $$.basicType = EbtSampler; $$.sampler.setImage(EbtUint, Esd2D, true, false, true); } + | I64IMAGE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd1D); + } + | U64IMAGE1D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd1D); + } + | I64IMAGE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd2D); + } + | U64IMAGE2D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd2D); + } + | I64IMAGE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd3D); + } + | U64IMAGE3D { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd3D); + } + | I64IMAGE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, EsdRect); + } + | U64IMAGE2DRECT { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, EsdRect); + } + | I64IMAGECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, EsdCube); + } + | U64IMAGECUBE { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, EsdCube); + } + | I64IMAGEBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, EsdBuffer); + } + | U64IMAGEBUFFER { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, EsdBuffer); + } + | I64IMAGE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd1D, true); + } + | U64IMAGE1DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd1D, true); + } + | I64IMAGE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd2D, true); + } + | U64IMAGE2DARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd2D, true); + } + | I64IMAGECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, EsdCube, true); + } + | U64IMAGECUBEARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, EsdCube, true); + } + | I64IMAGE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd2D, false, false, true); + } + | U64IMAGE2DMS { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd2D, false, false, true); + } + | I64IMAGE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtInt64, Esd2D, true, false, true); + } + | U64IMAGE2DMSARRAY { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.basicType = EbtSampler; + $$.sampler.setImage(EbtUint64, Esd2D, true, false, true); + } | SAMPLEREXTERNALOES { // GL_OES_EGL_image_external $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); $$.basicType = EbtSampler; diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 0204660edc..22af333c05 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -375,171 +375,193 @@ extern int yydebug; F16IMAGEBUFFER = 507, F16IMAGE2DMS = 508, F16IMAGE2DMSARRAY = 509, - TEXTURECUBEARRAY = 510, - ITEXTURECUBEARRAY = 511, - UTEXTURECUBEARRAY = 512, - TEXTURE1D = 513, - ITEXTURE1D = 514, - UTEXTURE1D = 515, - TEXTURE1DARRAY = 516, - ITEXTURE1DARRAY = 517, - UTEXTURE1DARRAY = 518, - TEXTURE2DRECT = 519, - ITEXTURE2DRECT = 520, - UTEXTURE2DRECT = 521, - TEXTUREBUFFER = 522, - ITEXTUREBUFFER = 523, - UTEXTUREBUFFER = 524, - TEXTURE2DMS = 525, - ITEXTURE2DMS = 526, - UTEXTURE2DMS = 527, - TEXTURE2DMSARRAY = 528, - ITEXTURE2DMSARRAY = 529, - UTEXTURE2DMSARRAY = 530, - F16TEXTURE1D = 531, - F16TEXTURE2D = 532, - F16TEXTURE3D = 533, - F16TEXTURE2DRECT = 534, - F16TEXTURECUBE = 535, - F16TEXTURE1DARRAY = 536, - F16TEXTURE2DARRAY = 537, - F16TEXTURECUBEARRAY = 538, - F16TEXTUREBUFFER = 539, - F16TEXTURE2DMS = 540, - F16TEXTURE2DMSARRAY = 541, - SUBPASSINPUT = 542, - SUBPASSINPUTMS = 543, - ISUBPASSINPUT = 544, - ISUBPASSINPUTMS = 545, - USUBPASSINPUT = 546, - USUBPASSINPUTMS = 547, - F16SUBPASSINPUT = 548, - F16SUBPASSINPUTMS = 549, - LEFT_OP = 550, - RIGHT_OP = 551, - INC_OP = 552, - DEC_OP = 553, - LE_OP = 554, - GE_OP = 555, - EQ_OP = 556, - NE_OP = 557, - AND_OP = 558, - OR_OP = 559, - XOR_OP = 560, - MUL_ASSIGN = 561, - DIV_ASSIGN = 562, - ADD_ASSIGN = 563, - MOD_ASSIGN = 564, - LEFT_ASSIGN = 565, - RIGHT_ASSIGN = 566, - AND_ASSIGN = 567, - XOR_ASSIGN = 568, - OR_ASSIGN = 569, - SUB_ASSIGN = 570, - STRING_LITERAL = 571, - LEFT_PAREN = 572, - RIGHT_PAREN = 573, - LEFT_BRACKET = 574, - RIGHT_BRACKET = 575, - LEFT_BRACE = 576, - RIGHT_BRACE = 577, - DOT = 578, - COMMA = 579, - COLON = 580, - EQUAL = 581, - SEMICOLON = 582, - BANG = 583, - DASH = 584, - TILDE = 585, - PLUS = 586, - STAR = 587, - SLASH = 588, - PERCENT = 589, - LEFT_ANGLE = 590, - RIGHT_ANGLE = 591, - VERTICAL_BAR = 592, - CARET = 593, - AMPERSAND = 594, - QUESTION = 595, - INVARIANT = 596, - HIGH_PRECISION = 597, - MEDIUM_PRECISION = 598, - LOW_PRECISION = 599, - PRECISION = 600, - PACKED = 601, - RESOURCE = 602, - SUPERP = 603, - FLOATCONSTANT = 604, - INTCONSTANT = 605, - UINTCONSTANT = 606, - BOOLCONSTANT = 607, - IDENTIFIER = 608, - TYPE_NAME = 609, - CENTROID = 610, - IN = 611, - OUT = 612, - INOUT = 613, - STRUCT = 614, - VOID = 615, - WHILE = 616, - BREAK = 617, - CONTINUE = 618, - DO = 619, - ELSE = 620, - FOR = 621, - IF = 622, - DISCARD = 623, - RETURN = 624, - SWITCH = 625, - CASE = 626, - DEFAULT = 627, - UNIFORM = 628, - SHARED = 629, - BUFFER = 630, - FLAT = 631, - SMOOTH = 632, - LAYOUT = 633, - DOUBLECONSTANT = 634, - INT16CONSTANT = 635, - UINT16CONSTANT = 636, - FLOAT16CONSTANT = 637, - INT32CONSTANT = 638, - UINT32CONSTANT = 639, - INT64CONSTANT = 640, - UINT64CONSTANT = 641, - SUBROUTINE = 642, - DEMOTE = 643, - PAYLOADNV = 644, - PAYLOADINNV = 645, - HITATTRNV = 646, - CALLDATANV = 647, - CALLDATAINNV = 648, - PAYLOADEXT = 649, - PAYLOADINEXT = 650, - HITATTREXT = 651, - CALLDATAEXT = 652, - CALLDATAINEXT = 653, - PATCH = 654, - SAMPLE = 655, - NONUNIFORM = 656, - COHERENT = 657, - VOLATILE = 658, - RESTRICT = 659, - READONLY = 660, - WRITEONLY = 661, - DEVICECOHERENT = 662, - QUEUEFAMILYCOHERENT = 663, - WORKGROUPCOHERENT = 664, - SUBGROUPCOHERENT = 665, - NONPRIVATE = 666, - SHADERCALLCOHERENT = 667, - NOPERSPECTIVE = 668, - EXPLICITINTERPAMD = 669, - PERVERTEXNV = 670, - PERPRIMITIVENV = 671, - PERVIEWNV = 672, - PERTASKNV = 673, - PRECISE = 674 + I64IMAGE1D = 510, + U64IMAGE1D = 511, + I64IMAGE2D = 512, + U64IMAGE2D = 513, + I64IMAGE3D = 514, + U64IMAGE3D = 515, + I64IMAGE2DRECT = 516, + U64IMAGE2DRECT = 517, + I64IMAGECUBE = 518, + U64IMAGECUBE = 519, + I64IMAGEBUFFER = 520, + U64IMAGEBUFFER = 521, + I64IMAGE1DARRAY = 522, + U64IMAGE1DARRAY = 523, + I64IMAGE2DARRAY = 524, + U64IMAGE2DARRAY = 525, + I64IMAGECUBEARRAY = 526, + U64IMAGECUBEARRAY = 527, + I64IMAGE2DMS = 528, + U64IMAGE2DMS = 529, + I64IMAGE2DMSARRAY = 530, + U64IMAGE2DMSARRAY = 531, + TEXTURECUBEARRAY = 532, + ITEXTURECUBEARRAY = 533, + UTEXTURECUBEARRAY = 534, + TEXTURE1D = 535, + ITEXTURE1D = 536, + UTEXTURE1D = 537, + TEXTURE1DARRAY = 538, + ITEXTURE1DARRAY = 539, + UTEXTURE1DARRAY = 540, + TEXTURE2DRECT = 541, + ITEXTURE2DRECT = 542, + UTEXTURE2DRECT = 543, + TEXTUREBUFFER = 544, + ITEXTUREBUFFER = 545, + UTEXTUREBUFFER = 546, + TEXTURE2DMS = 547, + ITEXTURE2DMS = 548, + UTEXTURE2DMS = 549, + TEXTURE2DMSARRAY = 550, + ITEXTURE2DMSARRAY = 551, + UTEXTURE2DMSARRAY = 552, + F16TEXTURE1D = 553, + F16TEXTURE2D = 554, + F16TEXTURE3D = 555, + F16TEXTURE2DRECT = 556, + F16TEXTURECUBE = 557, + F16TEXTURE1DARRAY = 558, + F16TEXTURE2DARRAY = 559, + F16TEXTURECUBEARRAY = 560, + F16TEXTUREBUFFER = 561, + F16TEXTURE2DMS = 562, + F16TEXTURE2DMSARRAY = 563, + SUBPASSINPUT = 564, + SUBPASSINPUTMS = 565, + ISUBPASSINPUT = 566, + ISUBPASSINPUTMS = 567, + USUBPASSINPUT = 568, + USUBPASSINPUTMS = 569, + F16SUBPASSINPUT = 570, + F16SUBPASSINPUTMS = 571, + LEFT_OP = 572, + RIGHT_OP = 573, + INC_OP = 574, + DEC_OP = 575, + LE_OP = 576, + GE_OP = 577, + EQ_OP = 578, + NE_OP = 579, + AND_OP = 580, + OR_OP = 581, + XOR_OP = 582, + MUL_ASSIGN = 583, + DIV_ASSIGN = 584, + ADD_ASSIGN = 585, + MOD_ASSIGN = 586, + LEFT_ASSIGN = 587, + RIGHT_ASSIGN = 588, + AND_ASSIGN = 589, + XOR_ASSIGN = 590, + OR_ASSIGN = 591, + SUB_ASSIGN = 592, + STRING_LITERAL = 593, + LEFT_PAREN = 594, + RIGHT_PAREN = 595, + LEFT_BRACKET = 596, + RIGHT_BRACKET = 597, + LEFT_BRACE = 598, + RIGHT_BRACE = 599, + DOT = 600, + COMMA = 601, + COLON = 602, + EQUAL = 603, + SEMICOLON = 604, + BANG = 605, + DASH = 606, + TILDE = 607, + PLUS = 608, + STAR = 609, + SLASH = 610, + PERCENT = 611, + LEFT_ANGLE = 612, + RIGHT_ANGLE = 613, + VERTICAL_BAR = 614, + CARET = 615, + AMPERSAND = 616, + QUESTION = 617, + INVARIANT = 618, + HIGH_PRECISION = 619, + MEDIUM_PRECISION = 620, + LOW_PRECISION = 621, + PRECISION = 622, + PACKED = 623, + RESOURCE = 624, + SUPERP = 625, + FLOATCONSTANT = 626, + INTCONSTANT = 627, + UINTCONSTANT = 628, + BOOLCONSTANT = 629, + IDENTIFIER = 630, + TYPE_NAME = 631, + CENTROID = 632, + IN = 633, + OUT = 634, + INOUT = 635, + STRUCT = 636, + VOID = 637, + WHILE = 638, + BREAK = 639, + CONTINUE = 640, + DO = 641, + ELSE = 642, + FOR = 643, + IF = 644, + DISCARD = 645, + RETURN = 646, + SWITCH = 647, + CASE = 648, + DEFAULT = 649, + UNIFORM = 650, + SHARED = 651, + BUFFER = 652, + FLAT = 653, + SMOOTH = 654, + LAYOUT = 655, + DOUBLECONSTANT = 656, + INT16CONSTANT = 657, + UINT16CONSTANT = 658, + FLOAT16CONSTANT = 659, + INT32CONSTANT = 660, + UINT32CONSTANT = 661, + INT64CONSTANT = 662, + UINT64CONSTANT = 663, + SUBROUTINE = 664, + DEMOTE = 665, + PAYLOADNV = 666, + PAYLOADINNV = 667, + HITATTRNV = 668, + CALLDATANV = 669, + CALLDATAINNV = 670, + PAYLOADEXT = 671, + PAYLOADINEXT = 672, + HITATTREXT = 673, + CALLDATAEXT = 674, + CALLDATAINEXT = 675, + PATCH = 676, + SAMPLE = 677, + NONUNIFORM = 678, + COHERENT = 679, + VOLATILE = 680, + RESTRICT = 681, + READONLY = 682, + WRITEONLY = 683, + DEVICECOHERENT = 684, + QUEUEFAMILYCOHERENT = 685, + WORKGROUPCOHERENT = 686, + SUBGROUPCOHERENT = 687, + NONPRIVATE = 688, + SHADERCALLCOHERENT = 689, + NOPERSPECTIVE = 690, + EXPLICITINTERPAMD = 691, + PERVERTEXNV = 692, + PERPRIMITIVENV = 693, + PERVIEWNV = 694, + PERTASKNV = 695, + PRECISE = 696 }; #endif @@ -584,7 +606,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 588 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */ +#line 610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */ }; typedef union YYSTYPE YYSTYPE; @@ -615,7 +637,7 @@ int yyparse (glslang::TParseContext* pParseContext); extern int yylex(YYSTYPE*, TParseContext&); -#line 619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */ +#line 641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */ #ifdef short # undef short @@ -855,23 +877,23 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 394 +#define YYFINAL 416 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 9550 +#define YYLAST 10034 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 420 +#define YYNTOKENS 442 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 111 /* YYNRULES -- Number of rules. */ -#define YYNRULES 591 +#define YYNRULES 613 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 736 +#define YYNSTATES 758 /* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned by yylex, with out-of-bounds checking. */ #define YYUNDEFTOK 2 -#define YYMAXUTOK 674 +#define YYMAXUTOK 696 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) @@ -947,73 +969,77 @@ static const yytype_uint16 yytranslate[] = 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419 + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_uint16 yyrline[] = { - 0, 357, 357, 363, 366, 371, 374, 377, 381, 385, - 388, 392, 396, 400, 404, 408, 412, 418, 426, 429, - 432, 435, 438, 443, 451, 458, 465, 471, 475, 482, - 485, 491, 498, 508, 516, 521, 549, 558, 564, 568, - 572, 592, 593, 594, 595, 601, 602, 607, 612, 621, - 622, 627, 635, 636, 642, 651, 652, 657, 662, 667, - 675, 676, 685, 697, 698, 707, 708, 717, 718, 727, - 728, 736, 737, 745, 746, 754, 755, 755, 773, 774, - 790, 794, 798, 802, 807, 811, 815, 819, 823, 827, - 831, 838, 841, 852, 859, 864, 869, 876, 880, 884, - 888, 893, 898, 907, 907, 918, 922, 929, 936, 939, - 946, 954, 974, 997, 1012, 1037, 1048, 1058, 1068, 1078, - 1087, 1090, 1094, 1098, 1103, 1111, 1118, 1123, 1128, 1133, - 1142, 1152, 1179, 1188, 1195, 1203, 1210, 1217, 1225, 1235, - 1242, 1253, 1259, 1262, 1269, 1273, 1277, 1286, 1296, 1299, - 1310, 1313, 1316, 1320, 1324, 1329, 1333, 1340, 1344, 1349, - 1355, 1361, 1368, 1373, 1381, 1387, 1399, 1413, 1419, 1424, - 1432, 1440, 1448, 1456, 1464, 1472, 1480, 1488, 1495, 1502, - 1506, 1511, 1516, 1521, 1526, 1531, 1536, 1540, 1544, 1548, - 1552, 1558, 1569, 1576, 1579, 1588, 1593, 1603, 1608, 1616, - 1620, 1630, 1633, 1639, 1645, 1652, 1662, 1666, 1670, 1674, - 1679, 1683, 1688, 1693, 1698, 1703, 1708, 1713, 1718, 1723, - 1728, 1734, 1740, 1746, 1751, 1756, 1761, 1766, 1771, 1776, - 1781, 1786, 1791, 1796, 1801, 1807, 1814, 1819, 1824, 1829, - 1834, 1839, 1844, 1849, 1854, 1859, 1864, 1869, 1877, 1885, - 1893, 1899, 1905, 1911, 1917, 1923, 1929, 1935, 1941, 1947, - 1953, 1959, 1965, 1971, 1977, 1983, 1989, 1995, 2001, 2007, - 2013, 2019, 2025, 2031, 2037, 2043, 2049, 2055, 2061, 2067, - 2073, 2079, 2085, 2091, 2099, 2107, 2115, 2123, 2131, 2139, - 2147, 2155, 2163, 2171, 2179, 2187, 2193, 2199, 2205, 2211, - 2217, 2223, 2229, 2235, 2241, 2247, 2253, 2259, 2265, 2271, - 2277, 2283, 2289, 2295, 2301, 2307, 2313, 2319, 2325, 2331, - 2337, 2343, 2349, 2355, 2361, 2367, 2373, 2379, 2385, 2391, - 2397, 2403, 2407, 2411, 2415, 2420, 2426, 2431, 2436, 2441, - 2446, 2451, 2456, 2462, 2467, 2472, 2477, 2482, 2487, 2493, - 2499, 2505, 2511, 2517, 2523, 2529, 2535, 2541, 2547, 2553, - 2559, 2565, 2571, 2576, 2581, 2586, 2591, 2596, 2601, 2607, - 2612, 2617, 2622, 2627, 2632, 2637, 2642, 2648, 2653, 2658, - 2663, 2668, 2673, 2678, 2683, 2688, 2693, 2698, 2703, 2708, - 2713, 2718, 2724, 2729, 2734, 2740, 2746, 2751, 2756, 2761, - 2767, 2772, 2777, 2782, 2788, 2793, 2798, 2803, 2809, 2814, - 2819, 2824, 2830, 2836, 2842, 2848, 2853, 2859, 2865, 2871, - 2876, 2881, 2886, 2891, 2896, 2902, 2907, 2912, 2917, 2923, - 2928, 2933, 2938, 2944, 2949, 2954, 2959, 2965, 2970, 2975, - 2980, 2986, 2991, 2996, 3001, 3007, 3012, 3017, 3022, 3028, - 3033, 3038, 3043, 3049, 3054, 3059, 3064, 3070, 3075, 3080, - 3085, 3091, 3096, 3101, 3106, 3112, 3117, 3122, 3127, 3133, - 3138, 3143, 3148, 3154, 3159, 3164, 3169, 3175, 3180, 3185, - 3190, 3196, 3201, 3206, 3212, 3218, 3224, 3230, 3237, 3244, - 3250, 3256, 3262, 3268, 3274, 3280, 3287, 3292, 3308, 3313, - 3318, 3326, 3326, 3337, 3337, 3347, 3350, 3363, 3385, 3412, - 3416, 3422, 3427, 3438, 3442, 3448, 3459, 3462, 3469, 3473, - 3474, 3480, 3481, 3482, 3483, 3484, 3485, 3486, 3488, 3494, - 3503, 3504, 3508, 3504, 3520, 3521, 3525, 3525, 3532, 3532, - 3546, 3549, 3557, 3565, 3576, 3577, 3581, 3585, 3592, 3599, - 3603, 3611, 3615, 3628, 3632, 3639, 3639, 3659, 3662, 3668, - 3680, 3692, 3696, 3703, 3703, 3718, 3718, 3734, 3734, 3755, - 3758, 3764, 3767, 3773, 3777, 3784, 3789, 3794, 3801, 3804, - 3813, 3817, 3826, 3829, 3833, 3842, 3842, 3884, 3890, 3893, - 3898, 3901 + 0, 369, 369, 375, 378, 383, 386, 389, 393, 397, + 400, 404, 408, 412, 416, 420, 424, 430, 438, 441, + 444, 447, 450, 455, 463, 470, 477, 483, 487, 494, + 497, 503, 510, 520, 528, 533, 561, 570, 576, 580, + 584, 604, 605, 606, 607, 613, 614, 619, 624, 633, + 634, 639, 647, 648, 654, 663, 664, 669, 674, 679, + 687, 688, 697, 709, 710, 719, 720, 729, 730, 739, + 740, 748, 749, 757, 758, 766, 767, 767, 785, 786, + 802, 806, 810, 814, 819, 823, 827, 831, 835, 839, + 843, 850, 853, 864, 871, 876, 881, 888, 892, 896, + 900, 905, 910, 919, 919, 930, 934, 941, 948, 951, + 958, 966, 986, 1009, 1024, 1049, 1060, 1070, 1080, 1090, + 1099, 1102, 1106, 1110, 1115, 1123, 1130, 1135, 1140, 1145, + 1154, 1164, 1191, 1200, 1207, 1215, 1222, 1229, 1237, 1247, + 1254, 1265, 1271, 1274, 1281, 1285, 1289, 1298, 1308, 1311, + 1322, 1325, 1328, 1332, 1336, 1341, 1345, 1352, 1356, 1361, + 1367, 1373, 1380, 1385, 1393, 1399, 1411, 1425, 1431, 1436, + 1444, 1452, 1460, 1468, 1476, 1484, 1492, 1500, 1507, 1514, + 1518, 1523, 1528, 1533, 1538, 1543, 1548, 1552, 1556, 1560, + 1564, 1570, 1581, 1588, 1591, 1600, 1605, 1615, 1620, 1628, + 1632, 1642, 1645, 1651, 1657, 1664, 1674, 1678, 1682, 1686, + 1691, 1695, 1700, 1705, 1710, 1715, 1720, 1725, 1730, 1735, + 1740, 1746, 1752, 1758, 1763, 1768, 1773, 1778, 1783, 1788, + 1793, 1798, 1803, 1808, 1813, 1819, 1826, 1831, 1836, 1841, + 1846, 1851, 1856, 1861, 1866, 1871, 1876, 1881, 1889, 1897, + 1905, 1911, 1917, 1923, 1929, 1935, 1941, 1947, 1953, 1959, + 1965, 1971, 1977, 1983, 1989, 1995, 2001, 2007, 2013, 2019, + 2025, 2031, 2037, 2043, 2049, 2055, 2061, 2067, 2073, 2079, + 2085, 2091, 2097, 2103, 2111, 2119, 2127, 2135, 2143, 2151, + 2159, 2167, 2175, 2183, 2191, 2199, 2205, 2211, 2217, 2223, + 2229, 2235, 2241, 2247, 2253, 2259, 2265, 2271, 2277, 2283, + 2289, 2295, 2301, 2307, 2313, 2319, 2325, 2331, 2337, 2343, + 2349, 2355, 2361, 2367, 2373, 2379, 2385, 2391, 2397, 2403, + 2409, 2415, 2419, 2423, 2427, 2432, 2438, 2443, 2448, 2453, + 2458, 2463, 2468, 2474, 2479, 2484, 2489, 2494, 2499, 2505, + 2511, 2517, 2523, 2529, 2535, 2541, 2547, 2553, 2559, 2565, + 2571, 2577, 2583, 2588, 2593, 2598, 2603, 2608, 2613, 2619, + 2624, 2629, 2634, 2639, 2644, 2649, 2654, 2660, 2665, 2670, + 2675, 2680, 2685, 2690, 2695, 2700, 2705, 2710, 2715, 2720, + 2725, 2730, 2736, 2741, 2746, 2752, 2758, 2763, 2768, 2773, + 2779, 2784, 2789, 2794, 2800, 2805, 2810, 2815, 2821, 2826, + 2831, 2836, 2842, 2848, 2854, 2860, 2865, 2871, 2877, 2883, + 2888, 2893, 2898, 2903, 2908, 2914, 2919, 2924, 2929, 2935, + 2940, 2945, 2950, 2956, 2961, 2966, 2971, 2977, 2982, 2987, + 2992, 2998, 3003, 3008, 3013, 3019, 3024, 3029, 3034, 3040, + 3045, 3050, 3055, 3061, 3066, 3071, 3076, 3082, 3087, 3092, + 3097, 3103, 3108, 3113, 3118, 3124, 3129, 3134, 3139, 3145, + 3150, 3155, 3160, 3166, 3171, 3176, 3181, 3187, 3192, 3197, + 3202, 3208, 3213, 3218, 3223, 3228, 3233, 3238, 3243, 3248, + 3253, 3258, 3263, 3268, 3273, 3278, 3283, 3288, 3293, 3298, + 3303, 3308, 3313, 3318, 3323, 3328, 3334, 3340, 3346, 3352, + 3359, 3366, 3372, 3378, 3384, 3390, 3396, 3402, 3409, 3414, + 3430, 3435, 3440, 3448, 3448, 3459, 3459, 3469, 3472, 3485, + 3507, 3534, 3538, 3544, 3549, 3560, 3564, 3570, 3581, 3584, + 3591, 3595, 3596, 3602, 3603, 3604, 3605, 3606, 3607, 3608, + 3610, 3616, 3625, 3626, 3630, 3626, 3642, 3643, 3647, 3647, + 3654, 3654, 3668, 3671, 3679, 3687, 3698, 3699, 3703, 3707, + 3714, 3721, 3725, 3733, 3737, 3750, 3754, 3761, 3761, 3781, + 3784, 3790, 3802, 3814, 3818, 3825, 3825, 3840, 3840, 3856, + 3856, 3877, 3880, 3886, 3889, 3895, 3899, 3906, 3911, 3916, + 3923, 3926, 3935, 3939, 3948, 3951, 3955, 3964, 3964, 4006, + 4012, 4015, 4020, 4023 }; #endif @@ -1076,7 +1102,13 @@ static const char *const yytname[] = "F16IMAGE1D", "F16IMAGE2D", "F16IMAGE3D", "F16IMAGE2DRECT", "F16IMAGECUBE", "F16IMAGE1DARRAY", "F16IMAGE2DARRAY", "F16IMAGECUBEARRAY", "F16IMAGEBUFFER", "F16IMAGE2DMS", - "F16IMAGE2DMSARRAY", "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY", + "F16IMAGE2DMSARRAY", "I64IMAGE1D", "U64IMAGE1D", "I64IMAGE2D", + "U64IMAGE2D", "I64IMAGE3D", "U64IMAGE3D", "I64IMAGE2DRECT", + "U64IMAGE2DRECT", "I64IMAGECUBE", "U64IMAGECUBE", "I64IMAGEBUFFER", + "U64IMAGEBUFFER", "I64IMAGE1DARRAY", "U64IMAGE1DARRAY", + "I64IMAGE2DARRAY", "U64IMAGE2DARRAY", "I64IMAGECUBEARRAY", + "U64IMAGECUBEARRAY", "I64IMAGE2DMS", "U64IMAGE2DMS", "I64IMAGE2DMSARRAY", + "U64IMAGE2DMSARRAY", "TEXTURECUBEARRAY", "ITEXTURECUBEARRAY", "UTEXTURECUBEARRAY", "TEXTURE1D", "ITEXTURE1D", "UTEXTURE1D", "TEXTURE1DARRAY", "ITEXTURE1DARRAY", "UTEXTURE1DARRAY", "TEXTURE2DRECT", "ITEXTURE2DRECT", "UTEXTURE2DRECT", "TEXTUREBUFFER", "ITEXTUREBUFFER", @@ -1199,16 +1231,19 @@ static const yytype_uint16 yytoknum[] = 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, 663, 664, - 665, 666, 667, 668, 669, 670, 671, 672, 673, 674 + 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, + 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, + 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, + 695, 696 }; # endif -#define YYPACT_NINF -457 +#define YYPACT_NINF -479 #define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-457))) + (!!((Yystate) == (-479))) -#define YYTABLE_NINF -537 +#define YYTABLE_NINF -559 #define yytable_value_is_error(Yytable_value) \ 0 @@ -1217,80 +1252,82 @@ static const yytype_uint16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 4075, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, 132, -457, - -457, -457, -457, -457, -1, -457, -457, -457, -457, -457, - -457, -301, -298, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, 11, -249, 17, 30, 6160, - 20, -457, 28, -457, -457, -457, -457, 4492, -457, -457, - -457, -457, 50, -457, -457, 739, -457, -457, 16, -457, - 81, -29, 69, -457, -313, -457, 111, -457, 6160, -457, - -457, -457, 6160, 103, 106, -457, -314, -457, 72, -457, - -457, 8566, 142, -457, -457, -457, 136, 6160, -457, 144, - -457, 53, -457, -457, 76, 6974, -457, -312, 1156, -457, - -457, -457, -457, 142, -309, -457, 7372, -308, -457, 119, - -457, 65, 8566, 8566, -457, 8566, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, -457, 36, -457, -457, -457, 171, - 85, 8964, 173, -457, 8566, -457, -457, -323, 174, -457, - 6160, 139, 4909, -457, 6160, 8566, -457, -29, -457, 141, - -457, -457, 145, 99, 35, 26, 71, 156, 159, 161, - 196, 195, 23, 181, 7770, -457, 183, 182, -457, -457, - 186, 179, 180, -457, 191, 192, 187, 8168, 193, 8566, - 188, 189, 127, -457, -457, 96, -457, -249, 200, 201, - -457, -457, -457, -457, -457, 1573, -457, -457, -457, -457, - -457, -457, -457, -457, -457, -24, 174, 7372, 13, 7372, - -457, -457, 7372, 6160, -457, 166, -457, -457, -457, 86, - -457, -457, 8566, 168, -457, -457, 8566, 205, -457, -457, - -457, 8566, -457, 139, 142, 124, -457, -457, -457, 5326, - -457, -457, -457, -457, 8566, 8566, 8566, 8566, 8566, 8566, - 8566, 8566, 8566, 8566, 8566, 8566, 8566, 8566, 8566, 8566, - 8566, 8566, 8566, -457, -457, -457, 206, 172, -457, 1990, - -457, -457, -457, 1990, -457, 8566, -457, -457, 130, 8566, - 125, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, -457, -457, 8566, 8566, -457, -457, -457, -457, - -457, -457, -457, 7372, -457, 94, -457, 5743, -457, -457, - 207, 204, -457, -457, -457, 131, 174, 139, -457, -457, - -457, -457, -457, 145, 145, 99, 99, 35, 35, 35, - 35, 26, 26, 71, 156, 159, 161, 196, 195, 8566, - -457, 212, 60, -457, 1990, 3658, 169, 3241, 87, -457, - 89, -457, -457, -457, -457, -457, 6576, -457, -457, -457, - -457, 143, 8566, 211, 172, 210, 204, 184, 6160, 217, - 219, -457, -457, 3658, 218, -457, -457, -457, 8566, 220, - -457, -457, -457, 214, 2407, 8566, -457, 216, 223, 185, - 224, 2824, -457, 225, -457, -457, 7372, -457, -457, -457, - 97, 8566, 2407, 218, -457, -457, 1990, -457, 222, 204, - -457, -457, 1990, 229, -457, -457 + 4273, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + 132, -479, -479, -479, -479, -479, -1, -479, -479, -479, + -479, -479, -479, -323, -320, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, 11, -271, 17, + 30, 6468, 20, -479, 28, -479, -479, -479, -479, 4712, + -479, -479, -479, -479, 50, -479, -479, 761, -479, -479, + 16, -479, 81, -29, 69, -479, -335, -479, 111, -479, + 6468, -479, -479, -479, 6468, 103, 106, -479, -336, -479, + 72, -479, -479, 9006, 142, -479, -479, -479, 136, 6468, + -479, 144, -479, 53, -479, -479, 76, 7326, -479, -334, + 1200, -479, -479, -479, -479, 142, -331, -479, 7746, -330, + -479, 119, -479, 65, 9006, 9006, -479, 9006, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, -479, 36, -479, -479, + -479, 171, 85, 9426, 173, -479, 9006, -479, -479, -345, + 174, -479, 6468, 139, 5151, -479, 6468, 9006, -479, -29, + -479, 141, -479, -479, 145, 99, 35, 26, 71, 156, + 159, 161, 196, 195, 23, 181, 8166, -479, 183, 182, + -479, -479, 186, 179, 180, -479, 191, 192, 187, 8586, + 193, 9006, 188, 189, 127, -479, -479, 96, -479, -271, + 200, 201, -479, -479, -479, -479, -479, 1639, -479, -479, + -479, -479, -479, -479, -479, -479, -479, -24, 174, 7746, + 13, 7746, -479, -479, 7746, 6468, -479, 166, -479, -479, + -479, 86, -479, -479, 9006, 168, -479, -479, 9006, 205, + -479, -479, -479, 9006, -479, 139, 142, 124, -479, -479, + -479, 5590, -479, -479, -479, -479, 9006, 9006, 9006, 9006, + 9006, 9006, 9006, 9006, 9006, 9006, 9006, 9006, 9006, 9006, + 9006, 9006, 9006, 9006, 9006, -479, -479, -479, 206, 172, + -479, 2078, -479, -479, -479, 2078, -479, 9006, -479, -479, + 130, 9006, 125, -479, -479, -479, -479, -479, -479, -479, + -479, -479, -479, -479, -479, -479, 9006, 9006, -479, -479, + -479, -479, -479, -479, -479, 7746, -479, 94, -479, 6029, + -479, -479, 207, 204, -479, -479, -479, 131, 174, 139, + -479, -479, -479, -479, -479, 145, 145, 99, 99, 35, + 35, 35, 35, 26, 26, 71, 156, 159, 161, 196, + 195, 9006, -479, 212, 60, -479, 2078, 3834, 169, 3395, + 87, -479, 89, -479, -479, -479, -479, -479, 6906, -479, + -479, -479, -479, 143, 9006, 211, 172, 210, 204, 184, + 6468, 217, 219, -479, -479, 3834, 218, -479, -479, -479, + 9006, 220, -479, -479, -479, 214, 2517, 9006, -479, 216, + 223, 185, 224, 2956, -479, 225, -479, -479, 7746, -479, + -479, -479, 97, 9006, 2517, 218, -479, -479, 2078, -479, + 222, 204, -479, -479, 2078, 229, -479, -479 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1314,98 +1351,100 @@ static const yytype_uint16 yydefact[] = 298, 299, 300, 301, 302, 303, 304, 305, 306, 310, 311, 312, 313, 314, 315, 316, 317, 318, 322, 323, 324, 325, 326, 327, 328, 329, 330, 334, 331, 332, - 333, 493, 494, 495, 346, 347, 370, 373, 335, 344, + 333, 515, 516, 517, 346, 347, 370, 373, 335, 344, 345, 361, 343, 392, 393, 396, 397, 398, 400, 401, - 402, 404, 405, 406, 408, 409, 483, 484, 369, 371, + 402, 404, 405, 406, 408, 409, 505, 506, 369, 371, 372, 348, 349, 350, 394, 351, 355, 356, 359, 399, 403, 407, 352, 353, 357, 358, 395, 354, 360, 439, 441, 442, 443, 445, 446, 447, 449, 450, 451, 453, 454, 455, 457, 458, 459, 461, 462, 463, 465, 466, 467, 469, 470, 471, 473, 474, 475, 477, 478, 479, 481, 482, 440, 444, 448, 452, 456, 464, 468, 472, - 460, 476, 480, 374, 375, 376, 410, 419, 421, 415, - 420, 422, 423, 425, 426, 427, 429, 430, 431, 433, - 434, 435, 437, 438, 411, 412, 413, 424, 414, 416, - 417, 418, 428, 432, 436, 485, 486, 489, 490, 491, - 492, 487, 488, 584, 132, 498, 499, 500, 0, 497, - 161, 159, 160, 158, 0, 206, 162, 163, 164, 134, - 133, 0, 190, 171, 173, 169, 175, 177, 172, 174, - 170, 176, 178, 167, 168, 192, 179, 186, 187, 188, - 189, 180, 181, 182, 183, 184, 185, 135, 136, 137, - 138, 139, 140, 147, 583, 0, 585, 0, 109, 108, - 0, 120, 125, 154, 153, 151, 155, 0, 148, 150, - 156, 130, 202, 152, 496, 0, 580, 582, 0, 503, - 0, 0, 0, 97, 0, 94, 0, 107, 0, 116, - 110, 118, 0, 119, 0, 95, 126, 100, 0, 149, - 131, 0, 195, 201, 1, 581, 0, 0, 501, 144, - 146, 0, 142, 193, 0, 0, 98, 0, 0, 586, - 111, 115, 117, 113, 121, 112, 0, 127, 103, 0, - 101, 0, 0, 0, 9, 0, 43, 42, 44, 41, - 5, 6, 7, 8, 2, 16, 14, 15, 17, 10, - 11, 12, 13, 3, 18, 37, 20, 25, 26, 0, - 0, 30, 0, 204, 0, 36, 34, 0, 196, 96, - 0, 0, 0, 505, 0, 0, 141, 0, 191, 0, - 197, 45, 49, 52, 55, 60, 63, 65, 67, 69, - 71, 73, 75, 0, 0, 99, 0, 531, 540, 544, - 0, 0, 0, 565, 0, 0, 0, 0, 0, 0, - 0, 0, 45, 78, 91, 0, 518, 0, 156, 130, - 521, 542, 520, 528, 519, 0, 522, 523, 546, 524, - 553, 525, 526, 561, 527, 0, 114, 0, 122, 0, - 513, 129, 0, 0, 105, 0, 102, 38, 39, 0, - 22, 23, 0, 0, 28, 27, 0, 206, 31, 33, - 40, 0, 203, 0, 511, 0, 509, 504, 506, 0, - 93, 145, 143, 194, 0, 0, 0, 0, 0, 0, + 460, 476, 480, 483, 484, 485, 486, 487, 488, 489, + 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 374, 375, 376, 410, 419, + 421, 415, 420, 422, 423, 425, 426, 427, 429, 430, + 431, 433, 434, 435, 437, 438, 411, 412, 413, 424, + 414, 416, 417, 418, 428, 432, 436, 507, 508, 511, + 512, 513, 514, 509, 510, 606, 132, 520, 521, 522, + 0, 519, 161, 159, 160, 158, 0, 206, 162, 163, + 164, 134, 133, 0, 190, 171, 173, 169, 175, 177, + 172, 174, 170, 176, 178, 167, 168, 192, 179, 186, + 187, 188, 189, 180, 181, 182, 183, 184, 185, 135, + 136, 137, 138, 139, 140, 147, 605, 0, 607, 0, + 109, 108, 0, 120, 125, 154, 153, 151, 155, 0, + 148, 150, 156, 130, 202, 152, 518, 0, 602, 604, + 0, 525, 0, 0, 0, 97, 0, 94, 0, 107, + 0, 116, 110, 118, 0, 119, 0, 95, 126, 100, + 0, 149, 131, 0, 195, 201, 1, 603, 0, 0, + 523, 144, 146, 0, 142, 193, 0, 0, 98, 0, + 0, 608, 111, 115, 117, 113, 121, 112, 0, 127, + 103, 0, 101, 0, 0, 0, 9, 0, 43, 42, + 44, 41, 5, 6, 7, 8, 2, 16, 14, 15, + 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, + 26, 0, 0, 30, 0, 204, 0, 36, 34, 0, + 196, 96, 0, 0, 0, 527, 0, 0, 141, 0, + 191, 0, 197, 45, 49, 52, 55, 60, 63, 65, + 67, 69, 71, 73, 75, 0, 0, 99, 0, 553, + 562, 566, 0, 0, 0, 587, 0, 0, 0, 0, + 0, 0, 0, 0, 45, 78, 91, 0, 540, 0, + 156, 130, 543, 564, 542, 550, 541, 0, 544, 545, + 568, 546, 575, 547, 548, 583, 549, 0, 114, 0, + 122, 0, 535, 129, 0, 0, 105, 0, 102, 38, + 39, 0, 22, 23, 0, 0, 28, 27, 0, 206, + 31, 33, 40, 0, 203, 0, 533, 0, 531, 526, + 528, 0, 93, 145, 143, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 198, 199, 0, 0, 530, 0, - 563, 576, 575, 0, 567, 0, 579, 577, 0, 0, - 0, 560, 529, 81, 82, 84, 83, 86, 87, 88, - 89, 90, 85, 80, 0, 0, 545, 541, 543, 547, - 554, 562, 124, 0, 516, 0, 128, 0, 106, 4, - 0, 24, 21, 32, 205, 0, 512, 0, 507, 502, - 46, 47, 48, 51, 50, 53, 54, 58, 59, 56, - 57, 61, 62, 64, 66, 68, 70, 72, 74, 0, - 200, 590, 0, 588, 532, 0, 0, 0, 0, 578, - 0, 559, 79, 92, 123, 514, 0, 104, 19, 508, - 510, 0, 0, 0, 0, 0, 551, 0, 0, 0, - 0, 570, 569, 572, 538, 555, 515, 517, 0, 0, - 587, 589, 533, 0, 0, 0, 571, 0, 0, 550, - 0, 0, 548, 0, 77, 591, 0, 535, 564, 534, - 0, 573, 0, 538, 537, 539, 557, 552, 0, 574, - 568, 549, 558, 0, 566, 556 + 0, 0, 0, 0, 0, 76, 198, 199, 0, 0, + 552, 0, 585, 598, 597, 0, 589, 0, 601, 599, + 0, 0, 0, 582, 551, 81, 82, 84, 83, 86, + 87, 88, 89, 90, 85, 80, 0, 0, 567, 563, + 565, 569, 576, 584, 124, 0, 538, 0, 128, 0, + 106, 4, 0, 24, 21, 32, 205, 0, 534, 0, + 529, 524, 46, 47, 48, 51, 50, 53, 54, 58, + 59, 56, 57, 61, 62, 64, 66, 68, 70, 72, + 74, 0, 200, 612, 0, 610, 554, 0, 0, 0, + 0, 600, 0, 581, 79, 92, 123, 536, 0, 104, + 19, 530, 532, 0, 0, 0, 0, 0, 573, 0, + 0, 0, 0, 592, 591, 594, 560, 577, 537, 539, + 0, 0, 609, 611, 555, 0, 0, 0, 593, 0, + 0, 572, 0, 0, 570, 0, 77, 613, 0, 557, + 586, 556, 0, 595, 0, 560, 559, 561, 579, 574, + 0, 596, 590, 571, 580, 0, 588, 578 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -457, -457, -457, -457, -457, -457, -457, -457, -457, -457, - -457, -457, 8868, -457, -87, -84, -127, -93, -33, -31, - -27, -25, -28, -26, -457, -86, -457, -103, -457, -111, - -125, 2, -457, -457, -457, 4, -457, -457, -457, 176, - 194, 178, -457, -457, -337, -457, -457, -457, -457, 95, - -457, -37, -46, -457, 9, -457, 0, -63, -457, -457, - -457, -457, 263, -457, -457, -457, -456, -140, 10, -73, - -211, -457, -102, -198, -321, -457, -144, -457, -457, -155, - -154, -457, -457, 198, -274, -97, -457, 46, -457, -118, - -457, 51, -457, -457, -457, -457, 52, -457, -457, -457, - -457, -457, -457, -457, -457, 213, -457, -457, -457, -457, + -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, + -479, -479, 9330, -479, -87, -84, -127, -93, -33, -31, + -27, -25, -28, -26, -479, -86, -479, -103, -479, -111, + -125, 2, -479, -479, -479, 4, -479, -479, -479, 176, + 194, 178, -479, -479, -337, -479, -479, -479, -479, 95, + -479, -37, -46, -479, 9, -479, 0, -63, -479, -479, + -479, -479, 263, -479, -479, -479, -478, -140, 10, -73, + -211, -479, -102, -198, -321, -479, -144, -479, -479, -155, + -154, -479, -479, 198, -274, -97, -479, 46, -479, -118, + -479, 51, -479, -479, -479, -479, 52, -479, -479, -479, + -479, -479, -479, -479, -479, 213, -479, -479, -479, -479, -105 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 443, 444, 445, 630, 446, 447, 448, 449, 450, - 451, 452, 502, 454, 472, 473, 474, 475, 476, 477, - 478, 479, 480, 481, 482, 503, 659, 504, 614, 505, - 561, 506, 345, 533, 421, 507, 347, 348, 349, 379, - 380, 381, 350, 351, 352, 353, 354, 355, 401, 402, - 356, 357, 358, 359, 455, 404, 456, 407, 392, 393, - 457, 362, 363, 364, 464, 397, 462, 463, 555, 556, - 531, 625, 510, 511, 512, 513, 514, 589, 685, 718, - 709, 710, 711, 719, 515, 516, 517, 518, 712, 689, - 519, 520, 713, 733, 521, 522, 523, 665, 593, 667, - 693, 707, 708, 524, 365, 366, 367, 376, 525, 662, - 663 + -1, 465, 466, 467, 652, 468, 469, 470, 471, 472, + 473, 474, 524, 476, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 525, 681, 526, 636, 527, + 583, 528, 367, 555, 443, 529, 369, 370, 371, 401, + 402, 403, 372, 373, 374, 375, 376, 377, 423, 424, + 378, 379, 380, 381, 477, 426, 478, 429, 414, 415, + 479, 384, 385, 386, 486, 419, 484, 485, 577, 578, + 553, 647, 532, 533, 534, 535, 536, 611, 707, 740, + 731, 732, 733, 741, 537, 538, 539, 540, 734, 711, + 541, 542, 735, 755, 543, 544, 545, 687, 615, 689, + 715, 729, 730, 546, 387, 388, 389, 398, 547, 684, + 685 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1413,14 +1452,14 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 361, 551, 344, 415, 346, 405, 405, 484, 559, 360, - 405, 484, 416, 552, 406, 485, 371, 527, 532, 372, + 383, 573, 366, 437, 368, 427, 427, 506, 581, 382, + 427, 506, 438, 574, 428, 507, 393, 549, 554, 394, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 627, 375, 61, + 52, 53, 54, 55, 56, 57, 58, 649, 397, 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, @@ -1444,175 +1483,96 @@ static const yytype_int16 yytable[] = 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, 389, 382, 530, 539, 664, 622, 618, 624, 483, - 369, 626, 558, 417, 399, 571, 572, 582, 687, 458, - 569, 570, 484, 540, 541, 377, 389, 490, 373, 623, - 493, 382, 494, 495, 384, 400, 498, 385, 548, 383, - 526, 528, 370, -35, 378, 542, 687, 390, 360, 543, - 460, 573, 574, 583, 374, 361, 360, 344, 396, 346, - 299, 466, 575, 576, 360, 304, 305, 467, 383, 560, - 683, 386, 383, 717, 684, 391, 598, 360, 600, 535, - 725, 360, 536, 418, 468, 666, 419, 461, 586, 420, - 469, 717, 398, 545, 629, 694, 360, 695, 509, 546, - 615, 615, 674, 615, 389, 728, 675, 508, 676, 558, - 615, 615, 403, 616, 530, 460, 530, 460, 567, 530, - 568, 631, 408, 603, 604, 605, 606, 607, 608, 609, - 610, 611, 612, 633, 647, 648, 649, 650, 637, 615, - 671, 638, 732, 613, 615, 637, 413, 669, 679, 414, - 553, 405, 461, 459, 461, 697, 618, 615, 698, 360, - 465, 360, 534, 360, 295, 296, 297, 564, 565, 566, - 643, 644, 651, 652, 668, 645, 646, 558, 670, 544, - 549, 636, 554, 484, 563, 577, 460, 578, 579, 580, - 581, 584, 587, 590, 588, 727, 591, 592, 594, 595, - 599, 672, 673, 601, 596, 509, 602, -36, -34, 628, - 530, 632, 460, -29, 508, 661, 660, 678, 615, 682, - 690, 700, 702, 461, 618, 704, 705, 703, 715, -536, - 716, 722, 360, 721, 653, 487, 726, 654, 681, 734, - 723, 735, 655, 657, 686, 656, 658, 699, 411, 461, - 412, 368, 562, 635, 680, 691, 724, 730, 360, 731, - 692, 619, 410, 530, 409, 706, 620, 621, 395, 701, - 0, 0, 686, 0, 0, 0, 0, 0, 0, 509, - 460, 0, 0, 509, 720, 714, 560, 0, 508, 0, - 0, 0, 508, 0, 0, 0, 0, 0, 0, 0, - 729, 0, 0, 530, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 461, 688, 0, - 0, 0, 0, 0, 0, 0, 360, 0, 0, 0, - 0, 0, 389, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 688, 0, 0, 0, - 0, 0, 0, 0, 509, 509, 0, 509, 0, 0, - 0, 0, 0, 508, 508, 0, 508, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 390, 0, - 0, 0, 0, 509, 0, 0, 0, 360, 0, 0, - 0, 0, 508, 0, 509, 0, 0, 0, 0, 0, - 0, 509, 0, 508, 0, 0, 0, 0, 0, 0, - 508, 0, 509, 0, 0, 0, 509, 0, 0, 0, - 0, 508, 509, 0, 0, 508, 0, 0, 0, 394, - 0, 508, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 0, 0, 0, 0, 0, 0, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 411, 404, 552, 561, 686, 644, 640, + 646, 505, 391, 648, 580, 439, 421, 593, 594, 604, + 709, 480, 591, 592, 506, 562, 563, 399, 411, 512, + 395, 645, 515, 404, 516, 517, 406, 422, 520, 407, + 570, 405, 548, 550, 392, -35, 400, 564, 709, 412, + 382, 565, 482, 595, 596, 605, 396, 383, 382, 366, + 418, 368, 321, 488, 597, 598, 382, 326, 327, 489, + 405, 582, 705, 408, 405, 739, 706, 413, 620, 382, + 622, 557, 747, 382, 558, 440, 490, 688, 441, 483, + 608, 442, 491, 739, 420, 567, 651, 716, 382, 717, + 531, 568, 637, 637, 696, 637, 411, 750, 697, 530, + 698, 580, 637, 637, 425, 638, 552, 482, 552, 482, + 589, 552, 590, 653, 430, 625, 626, 627, 628, 629, + 630, 631, 632, 633, 634, 655, 669, 670, 671, 672, + 659, 637, 693, 660, 754, 635, 637, 659, 435, 691, + 701, 436, 575, 427, 483, 481, 483, 719, 640, 637, + 720, 382, 487, 382, 556, 382, 317, 318, 319, 586, + 587, 588, 665, 666, 673, 674, 690, 667, 668, 580, + 692, 566, 571, 658, 576, 506, 585, 599, 482, 600, + 601, 602, 603, 606, 609, 612, 610, 749, 613, 614, + 616, 617, 621, 694, 695, 623, 618, 531, 624, -36, + -34, 650, 552, 654, 482, -29, 530, 683, 682, 700, + 637, 704, 712, 722, 724, 483, 640, 726, 727, 725, + 737, -558, 738, 744, 382, 743, 675, 509, 748, 676, + 703, 756, 745, 757, 677, 679, 708, 678, 680, 721, + 433, 483, 434, 390, 584, 657, 702, 713, 746, 752, + 382, 753, 714, 641, 432, 552, 431, 728, 642, 643, + 417, 723, 0, 0, 708, 0, 0, 0, 0, 0, + 0, 531, 482, 0, 0, 531, 742, 736, 582, 0, + 530, 0, 0, 0, 530, 0, 0, 0, 0, 0, + 0, 0, 751, 0, 0, 552, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, + 710, 0, 0, 0, 0, 0, 0, 0, 382, 0, + 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, + 0, 0, 0, 0, 0, 0, 531, 531, 0, 531, + 0, 0, 0, 0, 0, 530, 530, 0, 530, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 412, 0, 0, 0, 0, 531, 0, 0, 0, 382, + 0, 0, 0, 0, 530, 0, 531, 0, 0, 0, + 0, 0, 0, 531, 0, 530, 0, 0, 0, 0, + 0, 0, 530, 0, 531, 0, 0, 0, 531, 0, + 0, 0, 0, 530, 531, 0, 0, 530, 0, 0, + 0, 416, 0, 530, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 293, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 295, 296, 297, 298, 0, 0, 0, 0, 0, - 0, 0, 0, 299, 300, 301, 302, 303, 304, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 306, 307, 308, 309, 310, 311, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 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, 1, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 422, 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 424, 425, 0, 486, 0, 487, 488, 0, - 0, 0, 0, 489, 426, 427, 428, 429, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 295, 296, - 297, 298, 0, 0, 0, 430, 431, 432, 433, 434, - 299, 300, 301, 302, 303, 304, 305, 490, 491, 492, - 493, 0, 494, 495, 496, 497, 498, 499, 500, 306, - 307, 308, 309, 310, 311, 435, 436, 437, 438, 439, - 440, 441, 442, 312, 501, 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, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, 0, 0, - 422, 423, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 424, - 425, 0, 486, 0, 487, 617, 0, 0, 0, 0, - 489, 426, 427, 428, 429, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 295, 296, 297, 298, 0, - 0, 0, 430, 431, 432, 433, 434, 299, 300, 301, - 302, 303, 304, 305, 490, 491, 492, 493, 0, 494, - 495, 496, 497, 498, 499, 500, 306, 307, 308, 309, - 310, 311, 435, 436, 437, 438, 439, 440, 441, 442, - 312, 501, 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, 1, 2, 3, 4, 5, 6, 7, + 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 316, 317, 318, 319, 320, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 322, 323, + 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, + 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, + 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -1641,19 +1601,109 @@ static const yytype_int16 yytable[] = 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, 0, 0, 422, 423, 0, + 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, 0, 0, 444, + 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, + 0, 508, 0, 509, 510, 0, 0, 0, 0, 511, + 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 316, 317, 318, 319, 320, 0, 0, + 0, 452, 453, 454, 455, 456, 321, 322, 323, 324, + 325, 326, 327, 512, 513, 514, 515, 0, 516, 517, + 518, 519, 520, 521, 522, 328, 329, 330, 331, 332, + 333, 457, 458, 459, 460, 461, 462, 463, 464, 334, + 523, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 0, 0, 444, 445, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, + 508, 0, 509, 639, 0, 0, 0, 0, 511, 448, + 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 316, 317, 318, 319, 320, 0, 0, 0, + 452, 453, 454, 455, 456, 321, 322, 323, 324, 325, + 326, 327, 512, 513, 514, 515, 0, 516, 517, 518, + 519, 520, 521, 522, 328, 329, 330, 331, 332, 333, + 457, 458, 459, 460, 461, 462, 463, 464, 334, 523, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 424, 425, 0, 486, - 0, 487, 0, 0, 0, 0, 0, 489, 426, 427, - 428, 429, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 294, 295, 296, 297, 298, 0, 0, 0, 430, - 431, 432, 433, 434, 299, 300, 301, 302, 303, 304, - 305, 490, 491, 492, 493, 0, 494, 495, 496, 497, - 498, 499, 500, 306, 307, 308, 309, 310, 311, 435, - 436, 437, 438, 439, 440, 441, 442, 312, 501, 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, + 0, 0, 0, 0, 0, 0, 446, 447, 0, 508, + 0, 509, 0, 0, 0, 0, 0, 511, 448, 449, + 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 316, 317, 318, 319, 320, 0, 0, 0, 452, + 453, 454, 455, 456, 321, 322, 323, 324, 325, 326, + 327, 512, 513, 514, 515, 0, 516, 517, 518, 519, + 520, 521, 522, 328, 329, 330, 331, 332, 333, 457, + 458, 459, 460, 461, 462, 463, 464, 334, 523, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, @@ -1683,19 +1733,109 @@ static const yytype_int16 yytable[] = 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, 0, 0, 422, 423, 0, 0, 0, 0, + 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 0, 0, 444, 445, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 446, 447, 0, 508, 0, + 430, 0, 0, 0, 0, 0, 511, 448, 449, 450, + 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 316, 317, 318, 319, 320, 0, 0, 0, 452, 453, + 454, 455, 456, 321, 322, 323, 324, 325, 326, 327, + 512, 513, 514, 515, 0, 516, 517, 518, 519, 520, + 521, 522, 328, 329, 330, 331, 332, 333, 457, 458, + 459, 460, 461, 462, 463, 464, 334, 523, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 508, 0, 0, + 0, 0, 0, 0, 0, 511, 448, 449, 450, 451, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, + 317, 318, 319, 320, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 322, 323, 324, 325, 326, 327, 512, + 513, 514, 515, 0, 516, 517, 518, 519, 520, 521, + 522, 328, 329, 330, 331, 332, 333, 457, 458, 459, + 460, 461, 462, 463, 464, 334, 523, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 424, 425, 0, 486, 0, 408, 0, - 0, 0, 0, 0, 489, 426, 427, 428, 429, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 294, 295, - 296, 297, 298, 0, 0, 0, 430, 431, 432, 433, - 434, 299, 300, 301, 302, 303, 304, 305, 490, 491, - 492, 493, 0, 494, 495, 496, 497, 498, 499, 500, - 306, 307, 308, 309, 310, 311, 435, 436, 437, 438, - 439, 440, 441, 442, 312, 501, 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, 1, 2, 3, + 0, 0, 0, 446, 447, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 511, 448, 449, 450, 451, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, + 318, 319, 320, 0, 0, 0, 452, 453, 454, 455, + 456, 321, 322, 323, 324, 325, 326, 327, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, + 461, 462, 463, 464, 334, 0, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -1724,145 +1864,66 @@ static const yytype_int16 yytable[] = 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, 0, - 0, 422, 423, 0, 0, 0, 0, 0, 0, 0, + 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 424, 425, 0, 486, 0, 0, 0, 0, 0, 0, - 0, 489, 426, 427, 428, 429, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 294, 295, 296, 297, 298, - 0, 0, 0, 430, 431, 432, 433, 434, 299, 300, - 301, 302, 303, 304, 305, 490, 491, 492, 493, 0, - 494, 495, 496, 497, 498, 499, 500, 306, 307, 308, - 309, 310, 311, 435, 436, 437, 438, 439, 440, 441, - 442, 312, 501, 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, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, 422, 423, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 424, 425, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 489, 426, - 427, 428, 429, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 294, 295, 296, 297, 298, 0, 0, 0, - 430, 431, 432, 433, 434, 299, 300, 301, 302, 303, - 304, 305, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 306, 307, 308, 309, 310, 311, - 435, 436, 437, 438, 439, 440, 441, 442, 312, 0, - 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, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, 0, 422, 423, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 424, 425, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 426, 427, 428, 429, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 294, - 295, 296, 297, 0, 0, 0, 0, 430, 431, 432, - 433, 434, 299, 300, 301, 302, 303, 304, 305, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 306, 307, 308, 309, 310, 311, 435, 436, 437, - 438, 439, 440, 441, 442, 312, 0, 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, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, + 0, 0, 446, 447, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, + 319, 0, 0, 0, 0, 452, 453, 454, 455, 456, + 321, 322, 323, 324, 325, 326, 327, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, + 462, 463, 464, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 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, 293, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 294, 295, 296, 297, - 298, 0, 0, 0, 0, 0, 0, 0, 0, 299, - 300, 301, 302, 303, 304, 305, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 306, 307, - 308, 309, 310, 311, 0, 0, 0, 0, 0, 0, - 0, 0, 312, 0, 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, 1, 2, 3, 4, 5, + 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, + 330, 331, 332, 333, 0, 0, 0, 0, 0, 0, + 0, 0, 334, 0, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -1891,20 +1952,110 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, + 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, 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, 409, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 316, 317, 318, 319, 0, + 0, 0, 0, 0, 0, 0, 0, 410, 321, 322, + 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, + 331, 332, 333, 0, 0, 0, 0, 0, 0, 0, + 0, 334, 0, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 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, 579, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 316, 317, 318, 319, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 322, 323, + 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, + 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, + 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 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, 387, + 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 294, 295, 296, 297, 0, 0, 0, - 0, 0, 0, 0, 0, 388, 299, 300, 301, 302, - 303, 304, 305, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 306, 307, 308, 309, 310, - 311, 0, 0, 0, 0, 0, 0, 0, 0, 312, - 0, 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, 1, 2, 3, 4, 5, 6, 7, 8, + 0, 0, 0, 316, 317, 318, 319, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 322, 323, 324, + 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, + 333, 0, 0, 0, 0, 0, 0, 0, 0, 334, + 0, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -1933,25 +2084,71 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, 0, + 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, 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, 699, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 316, 317, 318, 319, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 322, 323, 324, 325, + 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 328, 329, 330, 331, 332, 333, + 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 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, 557, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 294, 295, 296, 297, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 299, 300, 301, 302, 303, 304, 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 306, 307, 308, 309, 310, 311, 0, 0, - 0, 0, 0, 0, 0, 0, 312, 0, 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, 1, + 0, 316, 317, 318, 319, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 322, 323, 324, 325, 326, + 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 328, 329, 330, 331, 332, 333, 0, + 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 52, 53, 54, 55, 56, 57, 58, 0, 0, 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, @@ -1975,102 +2172,19 @@ static const yytype_int16 yytable[] = 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, 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, 639, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 294, 295, 296, - 297, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 299, 300, 301, 302, 303, 304, 305, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 306, - 307, 308, 309, 310, 311, 0, 0, 0, 0, 0, - 0, 0, 0, 312, 0, 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, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, 0, 0, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 0, 0, 551, + 718, 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 677, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 294, 295, 296, 297, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 299, 300, 301, - 302, 303, 304, 305, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 306, 307, 308, 309, - 310, 311, 0, 0, 0, 0, 0, 0, 0, 0, - 312, 0, 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, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 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, 294, 295, 296, 297, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 299, 300, 301, 302, 303, 304, - 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 306, 307, 308, 309, 310, 311, 0, - 0, 0, 0, 0, 0, 0, 0, 312, 0, 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, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -2100,176 +2214,19 @@ static const yytype_int16 yytable[] = 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, 0, 0, 422, 423, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 424, 425, 0, 0, 0, 529, 696, 0, - 0, 0, 0, 0, 426, 427, 428, 429, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, - 299, 0, 0, 0, 0, 304, 305, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 435, 436, 437, 438, 439, - 440, 441, 442, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 325, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, - 0, 422, 423, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 424, 425, 0, 0, 470, 0, 0, 0, 0, 0, - 0, 0, 426, 427, 428, 429, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 430, 431, 432, 433, 434, 299, 0, - 0, 0, 0, 304, 305, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 435, 436, 437, 438, 439, 440, 441, - 442, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 325, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 422, - 423, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 424, 425, - 0, 0, 0, 529, 0, 0, 0, 0, 0, 0, - 426, 427, 428, 429, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 430, 431, 432, 433, 434, 299, 0, 0, 0, - 0, 304, 305, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 435, 436, 437, 438, 439, 440, 441, 442, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 325, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 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, 0, 0, 422, 423, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 424, 425, 0, 0, - 585, 0, 0, 0, 0, 0, 0, 0, 426, 427, - 428, 429, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 430, - 431, 432, 433, 434, 299, 0, 0, 0, 0, 304, - 305, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 435, - 436, 437, 438, 439, 440, 441, 442, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 325, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, - 0, 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, 0, 0, 422, 423, 0, 0, 0, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 424, 425, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 597, 426, 427, 428, 429, + 0, 0, 0, 0, 446, 447, 0, 0, 492, 0, + 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 430, 431, 432, - 433, 434, 299, 0, 0, 0, 0, 304, 305, 0, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 435, 436, 437, - 438, 439, 440, 441, 442, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -2299,452 +2256,151 @@ static const yytype_int16 yytable[] = 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, 0, 0, 422, 423, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 424, 425, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 426, 427, 428, 429, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 430, 431, 432, 433, 434, - 299, 0, 0, 0, 0, 304, 305, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 435, 436, 437, 438, 439, - 440, 441, 442, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 325, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 453, - 0, 422, 423, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, - 424, 425, 0, 0, 0, 0, 0, 0, 0, 0, - 537, 538, 426, 427, 428, 429, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 430, 431, 432, 433, 434, 299, 0, - 0, 0, 550, 304, 547, 0, 0, 0, 0, 0, - 0, 0, 0, 471, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 435, 436, 437, 438, 439, 440, 441, - 442, 0, 471, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, + 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, + 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, + 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 0, 0, 551, + 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 634, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 640, 641, 642, 471, 471, 471, 471, 471, - 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, - 471, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 0, 607, 0, + 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 619, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 471 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 324, 0, 317, 0, 319, 319, 319, 464, 0, - 319, 319, 326, 336, 327, 327, 317, 326, 326, 317, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 533, 327, 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, 357, 349, 416, 425, 589, 527, 515, 529, 405, - 321, 532, 462, 386, 353, 299, 300, 304, 665, 392, - 295, 296, 319, 297, 298, 318, 382, 361, 327, 326, - 364, 378, 366, 367, 324, 374, 370, 327, 451, 349, - 413, 414, 353, 317, 324, 319, 693, 357, 349, 323, - 397, 335, 336, 340, 353, 365, 357, 365, 368, 365, - 354, 318, 301, 302, 365, 359, 360, 324, 378, 465, - 320, 353, 382, 704, 324, 335, 497, 378, 499, 324, - 711, 382, 327, 321, 318, 593, 324, 397, 484, 327, - 324, 722, 321, 318, 318, 318, 397, 318, 408, 324, - 324, 324, 623, 324, 460, 318, 322, 408, 324, 559, - 324, 324, 353, 327, 527, 462, 529, 464, 329, 532, - 331, 542, 321, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 546, 571, 572, 573, 574, 324, 324, - 325, 327, 726, 326, 324, 324, 353, 327, 327, 353, - 460, 319, 462, 327, 464, 676, 664, 324, 325, 460, - 326, 462, 353, 464, 342, 343, 344, 332, 333, 334, - 567, 568, 575, 576, 595, 569, 570, 627, 599, 318, - 317, 554, 353, 319, 353, 339, 533, 338, 337, 303, - 305, 320, 319, 317, 322, 716, 327, 327, 317, 317, - 317, 614, 615, 325, 327, 515, 327, 317, 317, 353, - 623, 353, 559, 318, 515, 353, 320, 320, 324, 317, - 361, 320, 322, 533, 732, 318, 317, 353, 318, 321, - 326, 318, 533, 327, 577, 321, 321, 578, 659, 327, - 365, 322, 579, 581, 665, 580, 582, 682, 382, 559, - 382, 298, 467, 553, 637, 667, 710, 722, 559, 723, - 667, 525, 378, 676, 376, 693, 525, 525, 365, 684, - -1, -1, 693, -1, -1, -1, -1, -1, -1, 589, - 627, -1, -1, 593, 705, 698, 682, -1, 589, -1, - -1, -1, 593, -1, -1, -1, -1, -1, -1, -1, - 721, -1, -1, 716, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 627, 665, -1, - -1, -1, -1, -1, -1, -1, 627, -1, -1, -1, - -1, -1, 688, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 693, -1, -1, -1, - -1, -1, -1, -1, 664, 665, -1, 667, -1, -1, - -1, -1, -1, 664, 665, -1, 667, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 688, -1, - -1, -1, -1, 693, -1, -1, -1, 688, -1, -1, - -1, -1, 693, -1, 704, -1, -1, -1, -1, -1, - -1, 711, -1, 704, -1, -1, -1, -1, -1, -1, - 711, -1, 722, -1, -1, -1, 726, -1, -1, -1, - -1, 722, 732, -1, -1, 726, -1, -1, -1, 0, - -1, 732, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 327, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 341, 342, 343, 344, 345, -1, -1, -1, -1, -1, - -1, -1, -1, 354, 355, 356, 357, 358, 359, 360, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 373, 374, 375, 376, 377, 378, -1, -1, - -1, -1, -1, -1, -1, -1, 387, -1, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, 297, 298, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, 317, -1, 319, -1, 321, 322, -1, - -1, -1, -1, 327, 328, 329, 330, 331, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 341, 342, 343, - 344, 345, -1, -1, -1, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, -1, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 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, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, -1, -1, - 297, 298, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 316, - 317, -1, 319, -1, 321, 322, -1, -1, -1, -1, - 327, 328, 329, 330, 331, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 341, 342, 343, 344, 345, -1, - -1, -1, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, -1, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 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, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, -1, -1, 297, 298, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, 317, -1, 319, - -1, 321, -1, -1, -1, -1, -1, 327, 328, 329, - 330, 331, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 341, 342, 343, 344, 345, -1, -1, -1, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, -1, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 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, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 297, 298, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 316, 317, -1, 319, -1, 321, -1, - -1, -1, -1, -1, 327, 328, 329, 330, 331, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 341, 342, - 343, 344, 345, -1, -1, -1, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, -1, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 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, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, -1, - -1, 297, 298, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 316, 317, -1, 319, -1, -1, -1, -1, -1, -1, - -1, 327, 328, 329, 330, 331, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 341, 342, 343, 344, 345, - -1, -1, -1, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, -1, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 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, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, -1, -1, 297, 298, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 316, 317, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 327, 328, - 329, 330, 331, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 341, 342, 343, 344, 345, -1, -1, -1, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, 387, -1, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 52, 53, 54, 55, 56, 57, 58, 0, 0, 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, @@ -2760,158 +2416,58 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 297, 298, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 316, 317, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 328, 329, 330, 331, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 341, - 342, 343, 344, -1, -1, -1, -1, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, 387, -1, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 327, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 341, 342, 343, 344, - 345, -1, -1, -1, -1, -1, -1, -1, -1, 354, - 355, 356, 357, 358, 359, 360, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, - 375, 376, 377, 378, -1, -1, -1, -1, -1, -1, - -1, -1, 387, -1, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 327, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 341, 342, 343, 344, -1, -1, -1, - -1, -1, -1, -1, -1, 353, 354, 355, 356, 357, - 358, 359, 360, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 373, 374, 375, 376, 377, - 378, -1, -1, -1, -1, -1, -1, -1, -1, 387, - -1, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 322, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 341, 342, 343, 344, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 354, 355, 356, 357, 358, 359, 360, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 373, 374, 375, 376, 377, 378, -1, -1, - -1, -1, -1, -1, -1, -1, 387, -1, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 3, + 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, 475, 0, 444, 445, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, + 0, 0, 0, 0, 559, 560, 448, 449, 450, 451, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 572, 326, 569, 0, + 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 493, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, + 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, 0, 0, + 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 662, 663, 664, 493, + 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, + 493, 493, 493, 493, 493, 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, 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, 0, 0, 0, 493 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 346, 0, 339, 0, 341, 341, 341, 486, 0, + 341, 341, 348, 358, 349, 349, 339, 348, 348, 339, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 54, 55, 56, 57, 58, 59, 60, 555, 349, 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, @@ -2935,61 +2491,96 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, 379, 371, 438, 447, 611, 549, 537, + 551, 427, 343, 554, 484, 408, 375, 321, 322, 326, + 687, 414, 317, 318, 341, 319, 320, 340, 404, 383, + 349, 348, 386, 400, 388, 389, 346, 396, 392, 349, + 473, 371, 435, 436, 375, 339, 346, 341, 715, 379, + 371, 345, 419, 357, 358, 362, 375, 387, 379, 387, + 390, 387, 376, 340, 323, 324, 387, 381, 382, 346, + 400, 487, 342, 375, 404, 726, 346, 357, 519, 400, + 521, 346, 733, 404, 349, 343, 340, 615, 346, 419, + 506, 349, 346, 744, 343, 340, 340, 340, 419, 340, + 430, 346, 346, 346, 645, 346, 482, 340, 344, 430, + 346, 581, 346, 346, 375, 349, 549, 484, 551, 486, + 351, 554, 353, 564, 343, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 568, 593, 594, 595, 596, + 346, 346, 347, 349, 748, 348, 346, 346, 375, 349, + 349, 375, 482, 341, 484, 349, 486, 698, 686, 346, + 347, 482, 348, 484, 375, 486, 364, 365, 366, 354, + 355, 356, 589, 590, 597, 598, 617, 591, 592, 649, + 621, 340, 339, 576, 375, 341, 375, 361, 555, 360, + 359, 325, 327, 342, 341, 339, 344, 738, 349, 349, + 339, 339, 339, 636, 637, 347, 349, 537, 349, 339, + 339, 375, 645, 375, 581, 340, 537, 375, 342, 342, + 346, 339, 383, 342, 344, 555, 754, 340, 339, 375, + 340, 343, 348, 340, 555, 349, 599, 343, 343, 600, + 681, 349, 387, 344, 601, 603, 687, 602, 604, 704, + 404, 581, 404, 320, 489, 575, 659, 689, 732, 744, + 581, 745, 689, 547, 400, 698, 398, 715, 547, 547, + 387, 706, -1, -1, 715, -1, -1, -1, -1, -1, + -1, 611, 649, -1, -1, 615, 727, 720, 704, -1, + 611, -1, -1, -1, 615, -1, -1, -1, -1, -1, + -1, -1, 743, -1, -1, 738, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 649, + 687, -1, -1, -1, -1, -1, -1, -1, 649, -1, + -1, -1, -1, -1, 710, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 715, -1, + -1, -1, -1, -1, -1, -1, 686, 687, -1, 689, + -1, -1, -1, -1, -1, 686, 687, -1, 689, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 322, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 341, 342, 343, - 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 354, 355, 356, 357, 358, 359, 360, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, - 374, 375, 376, 377, 378, -1, -1, -1, -1, -1, - -1, -1, -1, 387, -1, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, -1, -1, + 710, -1, -1, -1, -1, 715, -1, -1, -1, 710, + -1, -1, -1, -1, 715, -1, 726, -1, -1, -1, + -1, -1, -1, 733, -1, 726, -1, -1, -1, -1, + -1, -1, 733, -1, 744, -1, -1, -1, 748, -1, + -1, -1, -1, 744, 754, -1, -1, 748, -1, -1, + -1, 0, -1, 754, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 322, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 341, 342, 343, 344, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 354, 355, 356, - 357, 358, 359, 360, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, - 377, 378, -1, -1, -1, -1, -1, -1, -1, -1, - 387, -1, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 3, 4, 5, 6, 7, 8, 9, + 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 363, 364, 365, 366, 367, -1, + -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, + 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 395, 396, 397, 398, + 399, 400, -1, -1, -1, -1, -1, -1, -1, -1, + 409, -1, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -3018,25 +2609,159 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 341, 342, 343, 344, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 354, 355, 356, 357, 358, 359, - 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 373, 374, 375, 376, 377, 378, -1, - -1, -1, -1, -1, -1, -1, -1, 387, -1, 389, + 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, -1, -1, 319, + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, + -1, 341, -1, 343, 344, -1, -1, -1, -1, 349, + 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 363, 364, 365, 366, 367, -1, -1, + -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, + 341, -1, 343, 344, -1, -1, -1, -1, 349, 350, + 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 338, 339, -1, 341, + -1, 343, -1, -1, -1, -1, -1, 349, 350, 351, + 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 363, 364, 365, 366, 367, -1, -1, -1, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, -1, 341, -1, + 343, -1, -1, -1, -1, -1, 349, 350, 351, 352, + 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 364, 365, 366, 367, -1, -1, -1, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 63, + 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, @@ -3060,23 +2785,71 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 297, 298, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, 317, -1, -1, -1, 321, 322, -1, - -1, -1, -1, -1, 328, 329, 330, 331, -1, -1, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, 341, -1, -1, -1, -1, -1, -1, -1, 349, 350, 351, 352, 353, - 354, -1, -1, -1, -1, 359, 360, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, + 364, 365, 366, 367, -1, -1, -1, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 349, 350, 351, 352, 353, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, + 365, 366, 367, -1, -1, -1, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 379, 380, 381, 382, 383, - 384, 385, 386, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 4, 5, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, -1, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 63, 64, 65, + 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, @@ -3099,24 +2872,72 @@ static const yytype_int16 yycheck[] = 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, -1, - -1, 297, 298, -1, -1, -1, -1, -1, -1, -1, + 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 338, 339, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, + 366, -1, -1, -1, -1, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, -1, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 316, 317, -1, -1, 320, -1, -1, -1, -1, -1, - -1, -1, 328, 329, 330, 331, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 349, 350, 351, 352, 353, 354, -1, - -1, -1, -1, 359, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 379, 380, 381, 382, 383, 384, 385, - 386, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 401, 4, 5, 6, 7, + -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 395, 396, + 397, 398, 399, 400, -1, -1, -1, -1, -1, -1, + -1, -1, 409, -1, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 63, 64, 65, 66, 67, + 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, @@ -3139,24 +2960,72 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 297, - 298, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 316, 317, - -1, -1, -1, 321, -1, -1, -1, -1, -1, -1, - 328, 329, 330, 331, -1, -1, -1, -1, -1, -1, + 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, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 349, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 363, 364, 365, 366, -1, + -1, -1, -1, -1, -1, -1, -1, 375, 376, 377, + 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 395, 396, 397, + 398, 399, 400, -1, -1, -1, -1, -1, -1, -1, + -1, 409, -1, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 349, 350, 351, 352, 353, 354, -1, -1, -1, - -1, 359, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 379, 380, 381, 382, 383, 384, 385, 386, -1, + -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 401, 4, 5, 6, 7, 8, 9, + -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, + 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 395, 396, 397, 398, + 399, 400, -1, -1, -1, -1, -1, -1, -1, -1, + 409, -1, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 63, 64, 65, 66, 67, 68, 69, + 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, @@ -3179,24 +3048,72 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 297, 298, -1, + 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, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 363, 364, 365, 366, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 376, 377, 378, 379, + 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 395, 396, 397, 398, 399, + 400, -1, -1, -1, -1, -1, -1, -1, -1, 409, + -1, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 316, 317, -1, -1, - 320, -1, -1, -1, -1, -1, -1, -1, 328, 329, - 330, 331, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 349, - 350, 351, 352, 353, 354, -1, -1, -1, -1, 359, - 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 379, - 380, 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 401, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, + 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 395, 396, 397, 398, 399, 400, + -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, - -1, 63, 64, 65, 66, 67, 68, 69, 70, 71, + 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, @@ -3219,17 +3136,147 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 297, 298, -1, -1, -1, + 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, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 363, 364, 365, 366, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, + 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 395, 396, 397, 398, 399, 400, -1, + -1, -1, -1, -1, -1, -1, -1, 409, -1, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, -1, -1, 343, + 344, -1, -1, -1, -1, -1, 350, 351, 352, 353, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, + 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, -1, 342, -1, + -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, + 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 316, 317, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 327, 328, 329, 330, 331, + -1, -1, -1, -1, 338, 339, -1, -1, -1, 343, + -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 349, 350, 351, - 352, 353, 354, -1, -1, -1, -1, 359, 360, -1, + -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, + 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 379, 380, 381, - 382, 383, 384, 385, 386, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 401, + -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -3259,66 +3306,154 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 297, 298, -1, -1, -1, -1, -1, + 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, + 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, -1, 342, -1, + -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, + 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 316, 317, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 328, 329, 330, 331, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, 349, 350, 351, 352, 353, - 354, -1, -1, -1, -1, 359, 360, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 379, 380, 381, 382, 383, - 384, 385, 386, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, -1, -1, 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, 391, - -1, 297, 298, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 405, -1, -1, -1, -1, -1, -1, - 316, 317, -1, -1, -1, -1, -1, -1, -1, -1, - 422, 423, 328, 329, 330, 331, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, + 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, + 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 349, 350, 351, 352, 353, 354, -1, - -1, -1, 454, 359, 360, -1, -1, -1, -1, -1, - -1, -1, -1, 465, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 484, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 401, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, + 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, 413, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 427, -1, -1, + -1, -1, -1, -1, 338, 339, -1, -1, -1, -1, + -1, -1, -1, -1, 444, 445, 350, 351, 352, 353, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, + 374, 375, 376, -1, -1, -1, 476, 381, 382, -1, + -1, -1, -1, -1, -1, -1, -1, 487, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, + 404, 405, 406, 407, 408, -1, 506, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 551, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 564, 565, 566, 567, 568, 569, 570, 571, - 572, 573, 574, 575, 576, 577, 578, 579, 580, 581, - 582, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 573, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 586, 587, 588, 589, + 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, + 600, 601, 602, 603, 604, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3328,7 +3463,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 682 + -1, -1, -1, -1, 704 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -3364,116 +3499,120 @@ static const yytype_uint16 yystos[] = 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, 327, 341, 342, 343, 344, 345, 354, - 355, 356, 357, 358, 359, 360, 373, 374, 375, 376, - 377, 378, 387, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 451, 452, 455, 456, 457, 458, - 462, 463, 464, 465, 466, 467, 470, 471, 472, 473, - 474, 476, 481, 482, 483, 524, 525, 526, 482, 321, - 353, 317, 317, 327, 353, 327, 527, 318, 324, 459, - 460, 461, 471, 476, 324, 327, 353, 327, 353, 472, - 476, 335, 478, 479, 0, 525, 476, 485, 321, 353, - 374, 468, 469, 353, 475, 319, 327, 477, 321, 503, - 460, 459, 461, 353, 353, 317, 326, 477, 321, 324, - 327, 454, 297, 298, 316, 317, 328, 329, 330, 331, - 349, 350, 351, 352, 353, 379, 380, 381, 382, 383, - 384, 385, 386, 421, 422, 423, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 474, 476, 480, 477, 327, - 471, 476, 486, 487, 484, 326, 318, 324, 318, 324, - 320, 432, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 319, 327, 319, 321, 322, 327, - 361, 362, 363, 364, 366, 367, 368, 369, 370, 371, - 372, 388, 432, 445, 447, 449, 451, 455, 474, 476, - 492, 493, 494, 495, 496, 504, 505, 506, 507, 510, - 511, 514, 515, 516, 523, 528, 477, 326, 477, 321, - 447, 490, 326, 453, 353, 324, 327, 432, 432, 449, - 297, 298, 319, 323, 318, 318, 324, 360, 447, 317, - 432, 324, 336, 476, 353, 488, 489, 322, 487, 486, - 445, 450, 469, 353, 332, 333, 334, 329, 331, 295, - 296, 299, 300, 335, 336, 301, 302, 339, 338, 337, - 303, 305, 304, 340, 320, 320, 445, 319, 322, 497, - 317, 327, 327, 518, 317, 317, 327, 327, 449, 317, - 449, 325, 327, 306, 307, 308, 309, 310, 311, 312, - 313, 314, 315, 326, 448, 324, 327, 322, 493, 507, - 511, 516, 490, 326, 490, 491, 490, 486, 353, 318, - 424, 449, 353, 447, 432, 488, 477, 324, 327, 322, - 432, 432, 432, 434, 434, 435, 435, 436, 436, 436, - 436, 437, 437, 438, 439, 440, 441, 442, 443, 446, - 320, 353, 529, 530, 504, 517, 493, 519, 449, 327, - 449, 325, 447, 447, 490, 322, 324, 322, 320, 327, - 489, 449, 317, 320, 324, 498, 449, 464, 471, 509, - 361, 492, 505, 520, 318, 318, 322, 490, 325, 450, - 320, 530, 322, 353, 318, 317, 509, 521, 522, 500, - 501, 502, 508, 512, 447, 318, 326, 494, 499, 503, - 449, 327, 318, 365, 496, 494, 321, 490, 318, 449, - 499, 500, 504, 513, 327, 322 + 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, 349, 363, 364, 365, 366, + 367, 376, 377, 378, 379, 380, 381, 382, 395, 396, + 397, 398, 399, 400, 409, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 473, 474, 477, 478, + 479, 480, 484, 485, 486, 487, 488, 489, 492, 493, + 494, 495, 496, 498, 503, 504, 505, 546, 547, 548, + 504, 343, 375, 339, 339, 349, 375, 349, 549, 340, + 346, 481, 482, 483, 493, 498, 346, 349, 375, 349, + 375, 494, 498, 357, 500, 501, 0, 547, 498, 507, + 343, 375, 396, 490, 491, 375, 497, 341, 349, 499, + 343, 525, 482, 481, 483, 375, 375, 339, 348, 499, + 343, 346, 349, 476, 319, 320, 338, 339, 350, 351, + 352, 353, 371, 372, 373, 374, 375, 401, 402, 403, + 404, 405, 406, 407, 408, 443, 444, 445, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 496, 498, 502, + 499, 349, 493, 498, 508, 509, 506, 348, 340, 346, + 340, 346, 342, 454, 456, 457, 458, 459, 460, 461, + 462, 463, 464, 465, 466, 467, 341, 349, 341, 343, + 344, 349, 383, 384, 385, 386, 388, 389, 390, 391, + 392, 393, 394, 410, 454, 467, 469, 471, 473, 477, + 496, 498, 514, 515, 516, 517, 518, 526, 527, 528, + 529, 532, 533, 536, 537, 538, 545, 550, 499, 348, + 499, 343, 469, 512, 348, 475, 375, 346, 349, 454, + 454, 471, 319, 320, 341, 345, 340, 340, 346, 382, + 469, 339, 454, 346, 358, 498, 375, 510, 511, 344, + 509, 508, 467, 472, 491, 375, 354, 355, 356, 351, + 353, 317, 318, 321, 322, 357, 358, 323, 324, 361, + 360, 359, 325, 327, 326, 362, 342, 342, 467, 341, + 344, 519, 339, 349, 349, 540, 339, 339, 349, 349, + 471, 339, 471, 347, 349, 328, 329, 330, 331, 332, + 333, 334, 335, 336, 337, 348, 470, 346, 349, 344, + 515, 529, 533, 538, 512, 348, 512, 513, 512, 508, + 375, 340, 446, 471, 375, 469, 454, 510, 499, 346, + 349, 344, 454, 454, 454, 456, 456, 457, 457, 458, + 458, 458, 458, 459, 459, 460, 461, 462, 463, 464, + 465, 468, 342, 375, 551, 552, 526, 539, 515, 541, + 471, 349, 471, 347, 469, 469, 512, 344, 346, 344, + 342, 349, 511, 471, 339, 342, 346, 520, 471, 486, + 493, 531, 383, 514, 527, 542, 340, 340, 344, 512, + 347, 472, 342, 552, 344, 375, 340, 339, 531, 543, + 544, 522, 523, 524, 530, 534, 469, 340, 348, 516, + 521, 525, 471, 349, 340, 387, 518, 516, 343, 512, + 340, 471, 521, 522, 526, 535, 349, 344 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint16 yyr1[] = { - 0, 420, 421, 422, 422, 422, 422, 422, 422, 422, - 422, 422, 422, 422, 422, 422, 422, 422, 423, 423, - 423, 423, 423, 423, 424, 425, 426, 427, 427, 428, - 428, 429, 429, 430, 431, 431, 431, 432, 432, 432, - 432, 433, 433, 433, 433, 434, 434, 434, 434, 435, - 435, 435, 436, 436, 436, 437, 437, 437, 437, 437, - 438, 438, 438, 439, 439, 440, 440, 441, 441, 442, - 442, 443, 443, 444, 444, 445, 446, 445, 447, 447, - 448, 448, 448, 448, 448, 448, 448, 448, 448, 448, - 448, 449, 449, 450, 451, 451, 451, 451, 451, 451, - 451, 451, 451, 453, 452, 454, 454, 455, 456, 456, - 457, 457, 458, 459, 459, 460, 460, 460, 460, 461, - 462, 462, 462, 462, 462, 463, 463, 463, 463, 463, - 464, 464, 465, 466, 466, 466, 466, 466, 466, 466, - 466, 467, 468, 468, 469, 469, 469, 470, 471, 471, - 472, 472, 472, 472, 472, 472, 472, 473, 473, 473, - 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, - 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, - 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, - 473, 473, 474, 475, 475, 476, 476, 477, 477, 477, - 477, 478, 478, 479, 480, 480, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 481, 481, - 481, 481, 481, 481, 481, 481, 481, 481, 482, 482, - 482, 484, 483, 485, 483, 486, 486, 487, 487, 488, - 488, 489, 489, 490, 490, 490, 491, 491, 492, 493, - 493, 494, 494, 494, 494, 494, 494, 494, 494, 495, - 496, 497, 498, 496, 499, 499, 501, 500, 502, 500, - 503, 503, 504, 504, 505, 505, 506, 506, 507, 508, - 508, 509, 509, 510, 510, 512, 511, 513, 513, 514, - 514, 515, 515, 517, 516, 518, 516, 519, 516, 520, - 520, 521, 521, 522, 522, 523, 523, 523, 523, 523, - 524, 524, 525, 525, 525, 527, 526, 528, 529, 529, - 530, 530 + 0, 442, 443, 444, 444, 444, 444, 444, 444, 444, + 444, 444, 444, 444, 444, 444, 444, 444, 445, 445, + 445, 445, 445, 445, 446, 447, 448, 449, 449, 450, + 450, 451, 451, 452, 453, 453, 453, 454, 454, 454, + 454, 455, 455, 455, 455, 456, 456, 456, 456, 457, + 457, 457, 458, 458, 458, 459, 459, 459, 459, 459, + 460, 460, 460, 461, 461, 462, 462, 463, 463, 464, + 464, 465, 465, 466, 466, 467, 468, 467, 469, 469, + 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, + 470, 471, 471, 472, 473, 473, 473, 473, 473, 473, + 473, 473, 473, 475, 474, 476, 476, 477, 478, 478, + 479, 479, 480, 481, 481, 482, 482, 482, 482, 483, + 484, 484, 484, 484, 484, 485, 485, 485, 485, 485, + 486, 486, 487, 488, 488, 488, 488, 488, 488, 488, + 488, 489, 490, 490, 491, 491, 491, 492, 493, 493, + 494, 494, 494, 494, 494, 494, 494, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, + 495, 495, 496, 497, 497, 498, 498, 499, 499, 499, + 499, 500, 500, 501, 502, 502, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, + 504, 504, 504, 506, 505, 507, 505, 508, 508, 509, + 509, 510, 510, 511, 511, 512, 512, 512, 513, 513, + 514, 515, 515, 516, 516, 516, 516, 516, 516, 516, + 516, 517, 518, 519, 520, 518, 521, 521, 523, 522, + 524, 522, 525, 525, 526, 526, 527, 527, 528, 528, + 529, 530, 530, 531, 531, 532, 532, 534, 533, 535, + 535, 536, 536, 537, 537, 539, 538, 540, 538, 541, + 538, 542, 542, 543, 543, 544, 544, 545, 545, 545, + 545, 545, 546, 546, 547, 547, 547, 549, 548, 550, + 551, 551, 552, 552 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -3529,16 +3668,18 @@ static const yytype_uint8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 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 + 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 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, + 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 }; @@ -4221,260 +4362,260 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); switch (yyn) { case 2: -#line 357 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 369 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 4229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 3: -#line 363 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 375 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 4: -#line 366 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 378 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 5: -#line 371 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 383 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 6: -#line 374 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 386 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 7: -#line 377 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 389 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 8: -#line 381 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 393 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 9: -#line 385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 397 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 4288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 10: -#line 388 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4297 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 11: -#line 392 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4306 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 12: -#line 396 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 13: -#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 14: -#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 416 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 15: -#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 420 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 16: -#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 424 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal"); if (! parseContext.symbolTable.atBuiltInLevel()) 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 4353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 17: -#line 418 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 430 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4362 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 18: -#line 426 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 19: -#line 429 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 441 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 20: -#line 432 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 444 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4386 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 21: -#line 435 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 447 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 22: -#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 450 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 23: -#line 443 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 455 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 24: -#line 451 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 463 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4423 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 25: -#line 458 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 470 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 4432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 26: -#line 465 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 477 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); } -#line 4440 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 27: -#line 471 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 483 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 28: -#line 475 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 487 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 29: -#line 482 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 494 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-1].interm); } -#line 4466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 30: -#line 485 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 497 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); } -#line 4474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 31: -#line 491 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 503 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); @@ -4482,11 +4623,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 4486 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 32: -#line 498 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 510 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); @@ -4494,29 +4635,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 4498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 33: -#line 508 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-1].interm); } -#line 4506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 34: -#line 516 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 35: -#line 521 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 533 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. @@ -4544,50 +4685,50 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 4548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 36: -#line 549 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 561 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4558 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 37: -#line 558 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 570 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.variableCheck((yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 4569 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 38: -#line 564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 576 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4578 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 39: -#line 568 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 580 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 4587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 40: -#line 572 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 584 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; @@ -4604,179 +4745,179 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 4608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 41: -#line 592 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 604 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 4614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 42: -#line 593 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 605 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 4620 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 43: -#line 594 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 606 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 4626 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 44: -#line 595 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 607 "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 4633 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 45: -#line 601 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 613 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 46: -#line 602 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 614 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 47: -#line 607 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 619 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 48: -#line 612 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 49: -#line 621 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 50: -#line 622 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 634 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 51: -#line 627 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 639 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 52: -#line 635 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 647 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 53: -#line 636 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 648 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 54: -#line 642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 654 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4724 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 55: -#line 651 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 663 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4730 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 56: -#line 652 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 664 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 57: -#line 657 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 669 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 58: -#line 662 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 674 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 59: -#line 667 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 60: -#line 675 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 687 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 61: -#line 676 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 688 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=="); @@ -4786,11 +4927,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 62: -#line 685 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 697 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!="); @@ -4800,124 +4941,124 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 63: -#line 697 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 709 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 64: -#line 698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 710 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 65: -#line 707 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 719 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 66: -#line 708 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 67: -#line 717 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4844 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 68: -#line 718 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 730 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4855 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 69: -#line 727 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 739 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4861 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5002 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 70: -#line 728 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 71: -#line 736 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 748 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 72: -#line 737 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 749 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4887 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 73: -#line 745 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 757 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4893 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 74: -#line 746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4903 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 75: -#line 754 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 766 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 76: -#line 755 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 767 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.controlFlowNestingLevel; } -#line 4917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 77: -#line 758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 770 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); @@ -4930,17 +5071,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 4934 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 78: -#line 773 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 79: -#line 774 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 786 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment"); parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); @@ -4954,119 +5095,119 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 4958 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 80: -#line 790 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 802 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 4967 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 81: -#line 794 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 806 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 4976 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 82: -#line 798 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 810 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 4985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 83: -#line 802 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%="); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 4995 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 84: -#line 807 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 85: -#line 811 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 823 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 86: -#line 815 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 827 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 87: -#line 819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 831 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 88: -#line 823 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 835 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 89: -#line 827 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 839 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 5049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 90: -#line 831 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 843 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 5058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 91: -#line 838 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 850 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5066 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 92: -#line 841 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 853 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); @@ -5075,40 +5216,40 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5079 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 93: -#line 852 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 864 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5088 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 94: -#line 859 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 5098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 95: -#line 864 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 876 "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 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 96: -#line 869 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 881 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement"); // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope @@ -5116,75 +5257,75 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 5120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 97: -#line 876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 888 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 5129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 98: -#line 880 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 892 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5138 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 99: -#line 884 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 896 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 5147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 100: -#line 888 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 900 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 5157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 101: -#line 893 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 905 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 102: -#line 898 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 910 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers); (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 5178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 103: -#line 907 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 919 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 5184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 104: -#line 907 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 919 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; @@ -5194,54 +5335,54 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 5198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 105: -#line 918 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 930 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 106: -#line 922 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 934 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 107: -#line 929 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 941 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 108: -#line 936 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 948 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 109: -#line 939 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 951 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5241 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 110: -#line 946 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 958 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); @@ -5250,11 +5391,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 5254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 111: -#line 954 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 966 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // // Only first parameter of one-parameter functions can be void @@ -5272,11 +5413,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 112: -#line 974 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 986 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) { parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return", @@ -5296,11 +5437,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 113: -#line 997 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1009 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-1].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5316,11 +5457,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5320 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 114: -#line 1012 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1024 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5340,11 +5481,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 115: -#line 1037 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5356,11 +5497,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 116: -#line 1048 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1060 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); @@ -5368,11 +5509,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 117: -#line 1058 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1070 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5383,11 +5524,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 118: -#line 1068 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1080 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); @@ -5395,68 +5536,68 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5399 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 119: -#line 1078 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1090 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TParameter param = { 0, new TType((yyvsp[0].interm.type)) }; (yyval.interm).param = param; if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5410 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 120: -#line 1087 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1099 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[0].interm); } -#line 5418 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 121: -#line 1090 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1102 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 5427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 122: -#line 1094 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1106 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 5436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 123: -#line 1098 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1110 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-5].interm).type; 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 5446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 124: -#line 1103 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1115 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-4].interm).type; 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 5456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 125: -#line 1111 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1123 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; @@ -5464,51 +5605,51 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 5468 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 126: -#line 1118 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1130 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-1].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 5478 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 127: -#line 1123 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1135 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-2].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 5488 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 128: -#line 1128 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1140 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-4].interm.type); 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 5498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 129: -#line 1133 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1145 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).type = (yyvsp[-3].interm.type); 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 5508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 130: -#line 1142 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1154 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -5519,11 +5660,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 5523 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 131: -#line 1152 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1164 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type)); @@ -5548,22 +5689,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 5552 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 132: -#line 1179 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "invariant"); parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 5563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 133: -#line 1188 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); @@ -5571,11 +5712,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 5575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 134: -#line 1195 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); @@ -5583,11 +5724,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 5587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 135: -#line 1203 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); @@ -5595,11 +5736,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 5599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 136: -#line 1210 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1222 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); @@ -5607,11 +5748,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 5611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 137: -#line 1217 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1229 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); @@ -5620,11 +5761,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 5624 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 138: -#line 1225 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1237 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); @@ -5635,11 +5776,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 5639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 139: -#line 1235 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1247 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); @@ -5647,11 +5788,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 5651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 140: -#line 1242 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1254 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); @@ -5659,84 +5800,84 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 5663 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 141: -#line 1253 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1265 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 5671 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 142: -#line 1259 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 143: -#line 1262 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1274 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 5689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 144: -#line 1269 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1281 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 5698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 145: -#line 1273 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1285 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[-2].lex).loc); parseContext.setLayoutQualifier((yyvsp[-2].lex).loc, (yyval.interm.type), *(yyvsp[-2].lex).string, (yyvsp[0].interm.intermTypedNode)); } -#line 5707 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 146: -#line 1277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1289 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 5717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 147: -#line 1286 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1298 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 5728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 148: -#line 1296 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 149: -#line 1299 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1311 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -5745,112 +5886,112 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 5749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 150: -#line 1310 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1322 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5757 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 151: -#line 1313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1325 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 152: -#line 1316 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1328 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 153: -#line 1320 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1332 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5783 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 154: -#line 1324 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1336 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 155: -#line 1329 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1341 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5801 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 156: -#line 1333 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 157: -#line 1340 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1352 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqConst; // will later turn into EvqConstReadOnly, if the initializer is not constant } -#line 5818 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 158: -#line 1344 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1356 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 5828 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 159: -#line 1349 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1361 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 160: -#line 1355 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1367 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 5850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 161: -#line 1361 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -5858,21 +5999,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 5862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 162: -#line 1368 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1380 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 5872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 163: -#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); @@ -5881,21 +6022,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 5885 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 164: -#line 1381 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1393 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 5895 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 165: -#line 1387 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -5908,11 +6049,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 5912 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 166: -#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1411 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -5927,32 +6068,32 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 5931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 167: -#line 1413 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1425 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 5942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 168: -#line 1419 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1431 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 5952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 169: -#line 1424 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1436 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -5961,11 +6102,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 5965 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 170: -#line 1432 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1444 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -5974,11 +6115,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 5978 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 171: -#line 1440 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1452 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -5987,11 +6128,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 5991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 172: -#line 1448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1460 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -6000,11 +6141,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 173: -#line 1456 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1468 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6013,11 +6154,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6017 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 174: -#line 1464 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6026,11 +6167,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6030 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 175: -#line 1472 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1484 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6039,11 +6180,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 176: -#line 1480 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1492 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6052,11 +6193,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6056 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 177: -#line 1488 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1500 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -6064,11 +6205,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6068 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 178: -#line 1495 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -6076,175 +6217,175 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6080 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 179: -#line 1502 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1514 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 6089 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 180: -#line 1506 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1518 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 6099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 181: -#line 1511 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1523 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 6109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 182: -#line 1516 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 6119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 183: -#line 1521 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1533 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 6129 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 184: -#line 1526 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1538 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 6139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 185: -#line 1531 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1543 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 6149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 186: -#line 1536 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1548 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 6158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 187: -#line 1540 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 6167 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 188: -#line 1544 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1556 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 6176 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 189: -#line 1548 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1560 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 6185 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 190: -#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 6196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 191: -#line 1558 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 6207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 192: -#line 1569 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 6216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 193: -#line 1576 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1588 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // TODO } -#line 6224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 194: -#line 1579 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 6234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 195: -#line 1588 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1600 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 6244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 196: -#line 1593 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1605 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); @@ -6252,21 +6393,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 6256 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 197: -#line 1603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1615 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 6266 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 198: -#line 1608 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -6275,20 +6416,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 199: -#line 1616 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1628 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 6288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 200: -#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1632 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm) = (yyvsp[-3].interm); @@ -6296,35 +6437,35 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6300 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 201: -#line 1630 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 6308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 202: -#line 1633 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1645 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = 0; } -#line 6316 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 203: -#line 1639 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1651 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 6324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 204: -#line 1645 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1657 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = new TArraySizes; @@ -6332,11 +6473,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6336 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 205: -#line 1652 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1664 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -6344,300 +6485,300 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 206: -#line 1662 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 6357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 207: -#line 1666 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 208: -#line 1670 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1682 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 209: -#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1686 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 210: -#line 1679 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1691 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 6394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 211: -#line 1683 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1695 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 212: -#line 1688 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1700 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 213: -#line 1693 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1705 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 214: -#line 1698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1710 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 6434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 215: -#line 1703 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1715 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 6444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 216: -#line 1708 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1720 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 6454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 217: -#line 1713 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1725 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 218: -#line 1718 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1730 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 219: -#line 1723 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1735 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 220: -#line 1728 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 221: -#line 1734 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6506 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 222: -#line 1740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1752 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6517 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 223: -#line 1746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 224: -#line 1751 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 225: -#line 1756 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6547 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 226: -#line 1761 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 227: -#line 1766 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 6567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 228: -#line 1771 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1783 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 6577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 229: -#line 1776 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 6587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 230: -#line 1781 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 231: -#line 1786 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 6607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 232: -#line 1791 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 6617 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 233: -#line 1796 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 6627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 234: -#line 1801 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1813 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 235: -#line 1807 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6645,121 +6786,121 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 236: -#line 1814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1826 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 6659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 237: -#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1831 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 238: -#line 1824 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1836 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6679 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 239: -#line 1829 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1841 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 6689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 240: -#line 1834 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1846 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 6699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 241: -#line 1839 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1851 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 6709 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 242: -#line 1844 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1856 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 6719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 243: -#line 1849 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1861 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6729 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 244: -#line 1854 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1866 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6739 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 245: -#line 1859 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 6749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 246: -#line 1864 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 6759 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 247: -#line 1869 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1881 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6768,11 +6909,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 6772 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 248: -#line 1877 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6781,11 +6922,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 6785 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 249: -#line 1885 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1897 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6794,374 +6935,374 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6798 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 250: -#line 1893 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1905 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 6809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 251: -#line 1899 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1911 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 252: -#line 1905 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1917 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 6831 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 253: -#line 1911 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6842 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 254: -#line 1917 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6853 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 255: -#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6864 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 256: -#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1941 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 6875 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 257: -#line 1935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1947 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 6886 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 258: -#line 1941 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1953 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 259: -#line 1947 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 6908 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 260: -#line 1953 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1965 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 6919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 261: -#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1971 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 6930 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 262: -#line 1965 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1977 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 6941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 263: -#line 1971 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 6952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 264: -#line 1977 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 6963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 265: -#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 1995 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6974 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 266: -#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2001 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 267: -#line 1995 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2007 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 268: -#line 2001 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 7007 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 269: -#line 2007 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 7018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 270: -#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2025 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 7029 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 271: -#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2031 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 7040 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 272: -#line 2025 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2037 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 7051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 273: -#line 2031 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2043 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 7062 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 274: -#line 2037 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 7073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 275: -#line 2043 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2055 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 7084 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 276: -#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2061 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 7095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 277: -#line 2055 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2067 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 278: -#line 2061 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2073 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 279: -#line 2067 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7128 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 280: -#line 2073 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2085 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 7139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 281: -#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2091 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 7150 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 282: -#line 2085 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2097 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 7161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 283: -#line 2091 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2103 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7170,11 +7311,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 284: -#line 2099 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2111 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7183,11 +7324,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7187 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 285: -#line 2107 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7196,11 +7337,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7200 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 286: -#line 2115 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2127 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7209,11 +7350,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 287: -#line 2123 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2135 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7222,11 +7363,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7226 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 288: -#line 2131 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2143 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7235,11 +7376,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 289: -#line 2139 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2151 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7248,11 +7389,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7252 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 290: -#line 2147 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7261,11 +7402,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7265 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 291: -#line 2155 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2167 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7274,11 +7415,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7278 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 292: -#line 2163 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2175 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7287,11 +7428,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 293: -#line 2171 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2183 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7300,11 +7441,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 294: -#line 2179 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2191 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7313,2008 +7454,2228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 295: -#line 2187 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 296: -#line 2193 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2205 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 297: -#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 298: -#line 2205 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7361 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 299: -#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2223 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 7372 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 300: -#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 7383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7524 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 301: -#line 2223 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2235 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 7394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 302: -#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2241 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 303: -#line 2235 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2247 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 7416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 304: -#line 2241 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2253 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 7427 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 305: -#line 2247 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 7438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 306: -#line 2253 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2265 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 307: -#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2271 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7460 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 308: -#line 2265 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 309: -#line 2271 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 310: -#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 311: -#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7504 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 312: -#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2301 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7515 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 313: -#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2307 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 314: -#line 2301 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7537 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 315: -#line 2307 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7548 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 316: -#line 2313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2325 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 317: -#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2331 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 318: -#line 2325 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 319: -#line 2331 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 320: -#line 2337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7603 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 321: -#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2355 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7614 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 322: -#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 323: -#line 2355 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2367 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 324: -#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 325: -#line 2367 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 326: -#line 2373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 327: -#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2391 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 328: -#line 2385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 329: -#line 2391 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2403 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 330: -#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2409 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 331: -#line 2403 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 7722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 332: -#line 2407 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2419 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 7731 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 333: -#line 2411 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2423 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 7740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 334: -#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2427 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 7750 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 335: -#line 2420 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 7760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 336: -#line 2426 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 7770 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 337: -#line 2431 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 7780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7921 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 338: -#line 2436 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 7790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 339: -#line 2441 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2453 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 7800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 340: -#line 2446 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2458 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 341: -#line 2451 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2463 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 7820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 342: -#line 2456 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2468 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 7830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7971 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 343: -#line 2462 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2474 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 7840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 344: -#line 2467 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 7850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 345: -#line 2472 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2484 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 7860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 346: -#line 2477 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2489 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 7870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 347: -#line 2482 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2494 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 7880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 348: -#line 2487 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2499 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 7891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 349: -#line 2493 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2505 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 7902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 350: -#line 2499 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2511 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 7913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 351: -#line 2505 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2517 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 7924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 352: -#line 2511 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 7935 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 353: -#line 2517 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2529 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 7946 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 354: -#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 7957 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 355: -#line 2529 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2541 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 7968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 356: -#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2547 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 7979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 357: -#line 2541 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 7990 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 358: -#line 2547 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 8001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 359: -#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2565 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 8012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 360: -#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 8023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 361: -#line 2565 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 8033 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 362: -#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2583 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 8043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 363: -#line 2576 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 8053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 364: -#line 2581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2593 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 8063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 365: -#line 2586 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 8073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 366: -#line 2591 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 8083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 367: -#line 2596 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2608 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 8093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 368: -#line 2601 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2613 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 8103 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 369: -#line 2607 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2619 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 8113 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 370: -#line 2612 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2624 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 8123 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 371: -#line 2617 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2629 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 8133 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 372: -#line 2622 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2634 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 8143 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 373: -#line 2627 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2639 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 8153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 374: -#line 2632 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2644 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 8163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 375: -#line 2637 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2649 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 376: -#line 2642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2654 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8183 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 377: -#line 2648 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 8193 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 378: -#line 2653 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2665 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 8203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 379: -#line 2658 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2670 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 8213 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 380: -#line 2663 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2675 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 8223 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 381: -#line 2668 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2680 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 8233 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 382: -#line 2673 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2685 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 8243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 383: -#line 2678 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2690 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 8253 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 384: -#line 2683 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2695 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 8263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 385: -#line 2688 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2700 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 8273 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 386: -#line 2693 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2705 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8283 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 387: -#line 2698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2710 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8293 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 388: -#line 2703 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2715 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 389: -#line 2708 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2720 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8313 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 390: -#line 2713 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2725 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 8323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 391: -#line 2718 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2730 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 8333 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 392: -#line 2724 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2736 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 8343 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 393: -#line 2729 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2741 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 8353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 394: -#line 2734 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 8364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 395: -#line 2740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2752 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 8375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 396: -#line 2746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 8385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 397: -#line 2751 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2763 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 8395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 398: -#line 2756 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2768 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 8405 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 399: -#line 2761 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 8416 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 400: -#line 2767 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2779 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 8426 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 401: -#line 2772 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2784 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 8436 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 402: -#line 2777 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2789 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 8446 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 403: -#line 2782 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2794 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 8457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 404: -#line 2788 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2800 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 8467 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 405: -#line 2793 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2805 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 8477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 406: -#line 2798 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2810 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 8487 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 407: -#line 2803 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2815 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 8498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 408: -#line 2809 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 8508 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 409: -#line 2814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 8518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 410: -#line 2819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2831 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 8528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 411: -#line 2824 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2836 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 8539 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 412: -#line 2830 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2842 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 8550 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 413: -#line 2836 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 8561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 414: -#line 2842 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2854 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 8572 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 415: -#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2860 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 8582 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 416: -#line 2853 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2865 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 8593 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 417: -#line 2859 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 8604 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 418: -#line 2865 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2877 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 8615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 419: -#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2883 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 8625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 420: -#line 2876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2888 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 8635 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 421: -#line 2881 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2893 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 8645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 422: -#line 2886 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2898 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 8655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 423: -#line 2891 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 8665 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 424: -#line 2896 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2908 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 8676 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 425: -#line 2902 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2914 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 8686 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 426: -#line 2907 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2919 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 8696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 427: -#line 2912 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2924 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 8706 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 428: -#line 2917 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2929 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 8717 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 429: -#line 2923 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 8727 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8868 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 430: -#line 2928 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2940 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 8737 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 431: -#line 2933 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2945 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 8747 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 432: -#line 2938 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2950 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 8758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8899 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 433: -#line 2944 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2956 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 8768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 434: -#line 2949 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2961 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 8778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 435: -#line 2954 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2966 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 8788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 436: -#line 2959 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2971 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 8799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 437: -#line 2965 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2977 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 8809 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 438: -#line 2970 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2982 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 8819 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 439: -#line 2975 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2987 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 8829 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 440: -#line 2980 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2992 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 8840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 441: -#line 2986 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 2998 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 8850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 442: -#line 2991 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3003 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 8860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 443: -#line 2996 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3008 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 8870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 444: -#line 3001 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3013 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 8881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 445: -#line 3007 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3019 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 8891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 446: -#line 3012 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3024 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 8901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 447: -#line 3017 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3029 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 8911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 448: -#line 3022 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3034 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 8922 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 449: -#line 3028 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3040 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 8932 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 450: -#line 3033 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3045 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 8942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 451: -#line 3038 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3050 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 8952 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 452: -#line 3043 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3055 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 8963 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 453: -#line 3049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3061 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 8973 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 454: -#line 3054 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3066 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 8983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9124 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 455: -#line 3059 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3071 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 8993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 456: -#line 3064 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3076 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 9004 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 457: -#line 3070 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3082 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 9014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 458: -#line 3075 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3087 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 9024 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 459: -#line 3080 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3092 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 9034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 460: -#line 3085 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3097 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 9045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 461: -#line 3091 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3103 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 9055 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 462: -#line 3096 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3108 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 9065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 463: -#line 3101 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3113 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 9075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 464: -#line 3106 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3118 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 9086 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 465: -#line 3112 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3124 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 9096 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 466: -#line 3117 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3129 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 9106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 467: -#line 3122 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3134 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 9116 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 468: -#line 3127 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3139 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 9127 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 469: -#line 3133 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3145 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 9137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9278 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 470: -#line 3138 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3150 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 9147 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 471: -#line 3143 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3155 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 9157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 472: -#line 3148 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3160 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 9168 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 473: -#line 3154 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3166 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 9178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 474: -#line 3159 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3171 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 9188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 475: -#line 3164 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3176 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 9198 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 476: -#line 3169 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 9209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 477: -#line 3175 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3187 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 9219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 478: -#line 3180 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 9229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 479: -#line 3185 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3197 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 9239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 480: -#line 3190 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3202 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 9250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 481: -#line 3196 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3208 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 9260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 482: -#line 3201 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3213 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 9270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; case 483: -#line 3206 "MachineIndependent/glslang.y" /* yacc.c:1646 */ +#line 3218 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D); + } +#line 9421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 484: +#line 3223 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D); + } +#line 9431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 485: +#line 3228 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D); + } +#line 9441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 486: +#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D); + } +#line 9451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 487: +#line 3238 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D); + } +#line 9461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 488: +#line 3243 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D); + } +#line 9471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 489: +#line 3248 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect); + } +#line 9481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 490: +#line 3253 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect); + } +#line 9491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 491: +#line 3258 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube); + } +#line 9501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 492: +#line 3263 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube); + } +#line 9511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 493: +#line 3268 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer); + } +#line 9521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 494: +#line 3273 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer); + } +#line 9531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 495: +#line 3278 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true); + } +#line 9541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 496: +#line 3283 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true); + } +#line 9551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 497: +#line 3288 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true); + } +#line 9561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 498: +#line 3293 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true); + } +#line 9571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 499: +#line 3298 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true); + } +#line 9581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 500: +#line 3303 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true); + } +#line 9591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 501: +#line 3308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true); + } +#line 9601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 502: +#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true); + } +#line 9611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 503: +#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true); + } +#line 9621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 504: +#line 3323 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + { + (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).basicType = EbtSampler; + (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true); + } +#line 9631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + break; + + case 505: +#line 3328 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 9281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 484: -#line 3212 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 506: +#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // GL_EXT_YUV_target (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 9292 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - - case 485: -#line 3218 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + + case 507: +#line 3340 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 9303 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 486: -#line 3224 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 508: +#line 3346 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 9314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 487: -#line 3230 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 509: +#line 3352 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -9322,11 +9683,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 9326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 488: -#line 3237 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 510: +#line 3359 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -9334,98 +9695,98 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 9338 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 489: -#line 3244 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 511: +#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 9349 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 490: -#line 3250 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 512: +#line 3372 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 9360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 491: -#line 3256 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 513: +#line 3378 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 9371 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 492: -#line 3262 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 514: +#line 3384 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 9382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 493: -#line 3268 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 515: +#line 3390 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 9393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 494: -#line 3274 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 516: +#line 3396 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).coopmat = true; } -#line 9404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 495: -#line 3280 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 517: +#line 3402 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).coopmat = true; } -#line 9415 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 496: -#line 3287 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 518: +#line 3409 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 9425 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 497: -#line 3292 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 519: +#line 3414 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // // This is for user defined type names. The lexical phase looked up the @@ -9439,47 +9800,47 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 9443 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 498: -#line 3308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 520: +#line 3430 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 9453 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 499: -#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 521: +#line 3435 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 9463 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 500: -#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 522: +#line 3440 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 9473 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 501: -#line 3326 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 523: +#line 3448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 9479 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 502: -#line 3326 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 524: +#line 3448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); @@ -9491,17 +9852,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 9495 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 503: -#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 525: +#line 3459 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 9501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 504: -#line 3337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 526: +#line 3459 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -9509,19 +9870,19 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 9513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 505: -#line 3347 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 527: +#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 9521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 506: -#line 3350 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 528: +#line 3472 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -9532,11 +9893,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 9536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 507: -#line 3363 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 529: +#line 3485 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -9559,11 +9920,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 9563 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 508: -#line 3385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 530: +#line 3507 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -9588,38 +9949,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 9592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 509: -#line 3412 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 531: +#line 3534 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 510: -#line 3416 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 532: +#line 3538 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 511: -#line 3422 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 533: +#line 3544 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 9619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 512: -#line 3427 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 534: +#line 3549 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -9628,235 +9989,235 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 9632 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 513: -#line 3438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 535: +#line 3560 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 9640 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 514: -#line 3442 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 536: +#line 3564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 9651 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 515: -#line 3448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 537: +#line 3570 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 9662 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 516: -#line 3459 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 538: +#line 3581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 9670 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 517: -#line 3462 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 539: +#line 3584 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 9678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 518: -#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 540: +#line 3591 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9684 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 519: -#line 3473 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 541: +#line 3595 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9690 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 520: -#line 3474 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 542: +#line 3596 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9696 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 521: -#line 3480 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 543: +#line 3602 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 522: -#line 3481 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 544: +#line 3603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 523: -#line 3482 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 545: +#line 3604 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9714 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 524: -#line 3483 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 546: +#line 3605 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 525: -#line 3484 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 547: +#line 3606 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9726 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 526: -#line 3485 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 548: +#line 3607 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 527: -#line 3486 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 549: +#line 3608 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 528: -#line 3488 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 550: +#line 3610 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 529: -#line 3494 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 551: +#line 3616 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { 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 9754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 530: -#line 3503 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 552: +#line 3625 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9760 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 531: -#line 3504 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 553: +#line 3626 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 9769 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 532: -#line 3508 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 554: +#line 3630 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 9778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 533: -#line 3512 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 555: +#line 3634 "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 9788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 534: -#line 3520 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 556: +#line 3642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9794 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 535: -#line 3521 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 557: +#line 3643 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 536: -#line 3525 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 558: +#line 3647 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.controlFlowNestingLevel; } -#line 9808 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 537: -#line 3528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 559: +#line 3650 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 538: -#line 3532 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 560: +#line 3654 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 9827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 539: -#line 3537 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 561: +#line 3659 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9838 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 540: -#line 3546 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 562: +#line 3668 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9846 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 541: -#line 3549 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 563: +#line 3671 "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 9856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 542: -#line 3557 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 564: +#line 3679 "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 || @@ -9865,11 +10226,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 9869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 543: -#line 3565 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 565: +#line 3687 "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)) { @@ -9878,76 +10239,76 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 9882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 544: -#line 3576 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 566: +#line 3698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 9888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 545: -#line 3577 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 567: +#line 3699 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 9894 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 546: -#line 3581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 568: +#line 3703 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9902 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 547: -#line 3585 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 569: +#line 3707 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 548: -#line 3592 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 570: +#line 3714 "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 9920 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 549: -#line 3599 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 571: +#line 3721 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 9929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 550: -#line 3603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 572: +#line 3725 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 9938 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 551: -#line 3611 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 573: +#line 3733 "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 9947 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 552: -#line 3615 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 574: +#line 3737 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -9958,28 +10319,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 9962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 553: -#line 3628 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 575: +#line 3750 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 554: -#line 3632 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 576: +#line 3754 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 9979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 555: -#line 3639 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 577: +#line 3761 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -9988,11 +10349,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 9992 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 556: -#line 3647 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 578: +#line 3769 "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(); @@ -10002,27 +10363,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10006 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 557: -#line 3659 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 579: +#line 3781 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; } -#line 10014 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 558: -#line 3662 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 580: +#line 3784 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 559: -#line 3668 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 581: +#line 3790 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10035,11 +10396,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 10039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 560: -#line 3680 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 582: +#line 3802 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10049,28 +10410,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 10053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 561: -#line 3692 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 583: +#line 3814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10061 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10422 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 562: -#line 3696 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 584: +#line 3818 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10070 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 563: -#line 3703 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 585: +#line 3825 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -10079,11 +10440,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 564: -#line 3711 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 586: +#line 3833 "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); @@ -10091,21 +10452,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10095 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 565: -#line 3718 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 587: +#line 3840 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 566: -#line 3723 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 588: +#line 3845 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -10117,22 +10478,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 567: -#line 3734 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 589: +#line 3856 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 568: -#line 3740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 590: +#line 3862 "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); @@ -10145,81 +10506,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 569: -#line 3755 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 591: +#line 3877 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10157 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 570: -#line 3758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 592: +#line 3880 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 571: -#line 3764 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 593: +#line 3886 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10173 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 572: -#line 3767 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 594: +#line 3889 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermTypedNode) = 0; } -#line 10181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 573: -#line 3773 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 595: +#line 3895 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 10190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 574: -#line 3777 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 596: +#line 3899 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 10199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 575: -#line 3784 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 597: +#line 3906 "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 10209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 576: -#line 3789 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 598: +#line 3911 "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 10219 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 577: -#line 3794 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 599: +#line 3916 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -10227,74 +10588,74 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 10231 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 578: -#line 3801 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 600: +#line 3923 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 10239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 579: -#line 3804 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 601: +#line 3926 "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 10248 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 580: -#line 3813 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 602: +#line 3935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 10257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 581: -#line 3817 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 603: +#line 3939 "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 10268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 582: -#line 3826 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 604: +#line 3948 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10276 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 583: -#line 3829 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 605: +#line 3951 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 584: -#line 3833 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 606: +#line 3955 "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 10294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 585: -#line 3842 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 607: +#line 3964 "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); @@ -10307,11 +10668,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 10311 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 586: -#line 3854 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 608: +#line 3976 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -10338,52 +10699,52 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 10342 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 587: -#line 3884 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 609: +#line 4006 "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 10351 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 588: -#line 3890 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 610: +#line 4012 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 10359 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 589: -#line 3893 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 611: +#line 4015 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 10367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 590: -#line 3898 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 612: +#line 4020 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 10375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; - case 591: -#line 3901 "MachineIndependent/glslang.y" /* yacc.c:1646 */ + case 613: +#line 4023 "MachineIndependent/glslang.y" /* yacc.c:1646 */ { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 10383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ break; -#line 10387 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -10611,5 +10972,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); #endif return yyresult; } -#line 3906 "MachineIndependent/glslang.y" /* yacc.c:1906 */ +#line 4028 "MachineIndependent/glslang.y" /* yacc.c:1906 */ diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index 78b72a246b..58fc9fbec1 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -297,171 +297,193 @@ extern int yydebug; F16IMAGEBUFFER = 507, F16IMAGE2DMS = 508, F16IMAGE2DMSARRAY = 509, - TEXTURECUBEARRAY = 510, - ITEXTURECUBEARRAY = 511, - UTEXTURECUBEARRAY = 512, - TEXTURE1D = 513, - ITEXTURE1D = 514, - UTEXTURE1D = 515, - TEXTURE1DARRAY = 516, - ITEXTURE1DARRAY = 517, - UTEXTURE1DARRAY = 518, - TEXTURE2DRECT = 519, - ITEXTURE2DRECT = 520, - UTEXTURE2DRECT = 521, - TEXTUREBUFFER = 522, - ITEXTUREBUFFER = 523, - UTEXTUREBUFFER = 524, - TEXTURE2DMS = 525, - ITEXTURE2DMS = 526, - UTEXTURE2DMS = 527, - TEXTURE2DMSARRAY = 528, - ITEXTURE2DMSARRAY = 529, - UTEXTURE2DMSARRAY = 530, - F16TEXTURE1D = 531, - F16TEXTURE2D = 532, - F16TEXTURE3D = 533, - F16TEXTURE2DRECT = 534, - F16TEXTURECUBE = 535, - F16TEXTURE1DARRAY = 536, - F16TEXTURE2DARRAY = 537, - F16TEXTURECUBEARRAY = 538, - F16TEXTUREBUFFER = 539, - F16TEXTURE2DMS = 540, - F16TEXTURE2DMSARRAY = 541, - SUBPASSINPUT = 542, - SUBPASSINPUTMS = 543, - ISUBPASSINPUT = 544, - ISUBPASSINPUTMS = 545, - USUBPASSINPUT = 546, - USUBPASSINPUTMS = 547, - F16SUBPASSINPUT = 548, - F16SUBPASSINPUTMS = 549, - LEFT_OP = 550, - RIGHT_OP = 551, - INC_OP = 552, - DEC_OP = 553, - LE_OP = 554, - GE_OP = 555, - EQ_OP = 556, - NE_OP = 557, - AND_OP = 558, - OR_OP = 559, - XOR_OP = 560, - MUL_ASSIGN = 561, - DIV_ASSIGN = 562, - ADD_ASSIGN = 563, - MOD_ASSIGN = 564, - LEFT_ASSIGN = 565, - RIGHT_ASSIGN = 566, - AND_ASSIGN = 567, - XOR_ASSIGN = 568, - OR_ASSIGN = 569, - SUB_ASSIGN = 570, - STRING_LITERAL = 571, - LEFT_PAREN = 572, - RIGHT_PAREN = 573, - LEFT_BRACKET = 574, - RIGHT_BRACKET = 575, - LEFT_BRACE = 576, - RIGHT_BRACE = 577, - DOT = 578, - COMMA = 579, - COLON = 580, - EQUAL = 581, - SEMICOLON = 582, - BANG = 583, - DASH = 584, - TILDE = 585, - PLUS = 586, - STAR = 587, - SLASH = 588, - PERCENT = 589, - LEFT_ANGLE = 590, - RIGHT_ANGLE = 591, - VERTICAL_BAR = 592, - CARET = 593, - AMPERSAND = 594, - QUESTION = 595, - INVARIANT = 596, - HIGH_PRECISION = 597, - MEDIUM_PRECISION = 598, - LOW_PRECISION = 599, - PRECISION = 600, - PACKED = 601, - RESOURCE = 602, - SUPERP = 603, - FLOATCONSTANT = 604, - INTCONSTANT = 605, - UINTCONSTANT = 606, - BOOLCONSTANT = 607, - IDENTIFIER = 608, - TYPE_NAME = 609, - CENTROID = 610, - IN = 611, - OUT = 612, - INOUT = 613, - STRUCT = 614, - VOID = 615, - WHILE = 616, - BREAK = 617, - CONTINUE = 618, - DO = 619, - ELSE = 620, - FOR = 621, - IF = 622, - DISCARD = 623, - RETURN = 624, - SWITCH = 625, - CASE = 626, - DEFAULT = 627, - UNIFORM = 628, - SHARED = 629, - BUFFER = 630, - FLAT = 631, - SMOOTH = 632, - LAYOUT = 633, - DOUBLECONSTANT = 634, - INT16CONSTANT = 635, - UINT16CONSTANT = 636, - FLOAT16CONSTANT = 637, - INT32CONSTANT = 638, - UINT32CONSTANT = 639, - INT64CONSTANT = 640, - UINT64CONSTANT = 641, - SUBROUTINE = 642, - DEMOTE = 643, - PAYLOADNV = 644, - PAYLOADINNV = 645, - HITATTRNV = 646, - CALLDATANV = 647, - CALLDATAINNV = 648, - PAYLOADEXT = 649, - PAYLOADINEXT = 650, - HITATTREXT = 651, - CALLDATAEXT = 652, - CALLDATAINEXT = 653, - PATCH = 654, - SAMPLE = 655, - NONUNIFORM = 656, - COHERENT = 657, - VOLATILE = 658, - RESTRICT = 659, - READONLY = 660, - WRITEONLY = 661, - DEVICECOHERENT = 662, - QUEUEFAMILYCOHERENT = 663, - WORKGROUPCOHERENT = 664, - SUBGROUPCOHERENT = 665, - NONPRIVATE = 666, - SHADERCALLCOHERENT = 667, - NOPERSPECTIVE = 668, - EXPLICITINTERPAMD = 669, - PERVERTEXNV = 670, - PERPRIMITIVENV = 671, - PERVIEWNV = 672, - PERTASKNV = 673, - PRECISE = 674 + I64IMAGE1D = 510, + U64IMAGE1D = 511, + I64IMAGE2D = 512, + U64IMAGE2D = 513, + I64IMAGE3D = 514, + U64IMAGE3D = 515, + I64IMAGE2DRECT = 516, + U64IMAGE2DRECT = 517, + I64IMAGECUBE = 518, + U64IMAGECUBE = 519, + I64IMAGEBUFFER = 520, + U64IMAGEBUFFER = 521, + I64IMAGE1DARRAY = 522, + U64IMAGE1DARRAY = 523, + I64IMAGE2DARRAY = 524, + U64IMAGE2DARRAY = 525, + I64IMAGECUBEARRAY = 526, + U64IMAGECUBEARRAY = 527, + I64IMAGE2DMS = 528, + U64IMAGE2DMS = 529, + I64IMAGE2DMSARRAY = 530, + U64IMAGE2DMSARRAY = 531, + TEXTURECUBEARRAY = 532, + ITEXTURECUBEARRAY = 533, + UTEXTURECUBEARRAY = 534, + TEXTURE1D = 535, + ITEXTURE1D = 536, + UTEXTURE1D = 537, + TEXTURE1DARRAY = 538, + ITEXTURE1DARRAY = 539, + UTEXTURE1DARRAY = 540, + TEXTURE2DRECT = 541, + ITEXTURE2DRECT = 542, + UTEXTURE2DRECT = 543, + TEXTUREBUFFER = 544, + ITEXTUREBUFFER = 545, + UTEXTUREBUFFER = 546, + TEXTURE2DMS = 547, + ITEXTURE2DMS = 548, + UTEXTURE2DMS = 549, + TEXTURE2DMSARRAY = 550, + ITEXTURE2DMSARRAY = 551, + UTEXTURE2DMSARRAY = 552, + F16TEXTURE1D = 553, + F16TEXTURE2D = 554, + F16TEXTURE3D = 555, + F16TEXTURE2DRECT = 556, + F16TEXTURECUBE = 557, + F16TEXTURE1DARRAY = 558, + F16TEXTURE2DARRAY = 559, + F16TEXTURECUBEARRAY = 560, + F16TEXTUREBUFFER = 561, + F16TEXTURE2DMS = 562, + F16TEXTURE2DMSARRAY = 563, + SUBPASSINPUT = 564, + SUBPASSINPUTMS = 565, + ISUBPASSINPUT = 566, + ISUBPASSINPUTMS = 567, + USUBPASSINPUT = 568, + USUBPASSINPUTMS = 569, + F16SUBPASSINPUT = 570, + F16SUBPASSINPUTMS = 571, + LEFT_OP = 572, + RIGHT_OP = 573, + INC_OP = 574, + DEC_OP = 575, + LE_OP = 576, + GE_OP = 577, + EQ_OP = 578, + NE_OP = 579, + AND_OP = 580, + OR_OP = 581, + XOR_OP = 582, + MUL_ASSIGN = 583, + DIV_ASSIGN = 584, + ADD_ASSIGN = 585, + MOD_ASSIGN = 586, + LEFT_ASSIGN = 587, + RIGHT_ASSIGN = 588, + AND_ASSIGN = 589, + XOR_ASSIGN = 590, + OR_ASSIGN = 591, + SUB_ASSIGN = 592, + STRING_LITERAL = 593, + LEFT_PAREN = 594, + RIGHT_PAREN = 595, + LEFT_BRACKET = 596, + RIGHT_BRACKET = 597, + LEFT_BRACE = 598, + RIGHT_BRACE = 599, + DOT = 600, + COMMA = 601, + COLON = 602, + EQUAL = 603, + SEMICOLON = 604, + BANG = 605, + DASH = 606, + TILDE = 607, + PLUS = 608, + STAR = 609, + SLASH = 610, + PERCENT = 611, + LEFT_ANGLE = 612, + RIGHT_ANGLE = 613, + VERTICAL_BAR = 614, + CARET = 615, + AMPERSAND = 616, + QUESTION = 617, + INVARIANT = 618, + HIGH_PRECISION = 619, + MEDIUM_PRECISION = 620, + LOW_PRECISION = 621, + PRECISION = 622, + PACKED = 623, + RESOURCE = 624, + SUPERP = 625, + FLOATCONSTANT = 626, + INTCONSTANT = 627, + UINTCONSTANT = 628, + BOOLCONSTANT = 629, + IDENTIFIER = 630, + TYPE_NAME = 631, + CENTROID = 632, + IN = 633, + OUT = 634, + INOUT = 635, + STRUCT = 636, + VOID = 637, + WHILE = 638, + BREAK = 639, + CONTINUE = 640, + DO = 641, + ELSE = 642, + FOR = 643, + IF = 644, + DISCARD = 645, + RETURN = 646, + SWITCH = 647, + CASE = 648, + DEFAULT = 649, + UNIFORM = 650, + SHARED = 651, + BUFFER = 652, + FLAT = 653, + SMOOTH = 654, + LAYOUT = 655, + DOUBLECONSTANT = 656, + INT16CONSTANT = 657, + UINT16CONSTANT = 658, + FLOAT16CONSTANT = 659, + INT32CONSTANT = 660, + UINT32CONSTANT = 661, + INT64CONSTANT = 662, + UINT64CONSTANT = 663, + SUBROUTINE = 664, + DEMOTE = 665, + PAYLOADNV = 666, + PAYLOADINNV = 667, + HITATTRNV = 668, + CALLDATANV = 669, + CALLDATAINNV = 670, + PAYLOADEXT = 671, + PAYLOADINEXT = 672, + HITATTREXT = 673, + CALLDATAEXT = 674, + CALLDATAINEXT = 675, + PATCH = 676, + SAMPLE = 677, + NONUNIFORM = 678, + COHERENT = 679, + VOLATILE = 680, + RESTRICT = 681, + READONLY = 682, + WRITEONLY = 683, + DEVICECOHERENT = 684, + QUEUEFAMILYCOHERENT = 685, + WORKGROUPCOHERENT = 686, + SUBGROUPCOHERENT = 687, + NONPRIVATE = 688, + SHADERCALLCOHERENT = 689, + NOPERSPECTIVE = 690, + EXPLICITINTERPAMD = 691, + PERVERTEXNV = 692, + PERPRIMITIVENV = 693, + PERVIEWNV = 694, + PERTASKNV = 695, + PRECISE = 696 }; #endif @@ -506,7 +528,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 510 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ +#line 532 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ }; typedef union YYSTYPE YYSTYPE; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index c0781567ab..fb3e28c6a2 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -411,6 +411,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.texture.vert", "spv.textureBuffer.vert", "spv.image.frag", + "spv.imageAtomic64.frag", "spv.types.frag", "spv.uint.frag", "spv.uniformArray.frag", From 3d7984dd1e602da17910db8b5dbe171abf510d7a Mon Sep 17 00:00:00 2001 From: Chow Date: Fri, 6 Nov 2020 01:33:45 +0800 Subject: [PATCH 065/365] Fix warning in iomapper. (#2449) ATT. --- glslang/MachineIndependent/iomapper.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 0e9e717abc..c42e74fa5f 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -371,13 +371,13 @@ struct TSymbolValidater } else if (overlapLocation >= 0) { if (diffLocation == true) { - TString err = "Uniform location should be equal for same uniforms: " + overlapLocation; + TString err = ("Uniform location should be equal for same uniforms: " +std::to_string(overlapLocation)).c_str(); infoSink.info.message(EPrefixInternalError, err.c_str()); hadError = true; break; } else { - TString err = "Uniform location overlaps across stages: " + overlapLocation; + TString err = ("Uniform location overlaps across stages: " + std::to_string(overlapLocation)).c_str(); infoSink.info.message(EPrefixInternalError, err.c_str()); hadError = true; break; @@ -626,8 +626,8 @@ struct TSymbolValidater const TQualifier& qualifier1 = type1->getQualifier(); const TQualifier& qualifier2 = type2->getQualifier(); - if (isBlock == false && - (type1->getQualifier().storage == EvqUniform && type2->getQualifier().storage == EvqUniform) || + if (((isBlock == false) && + (type1->getQualifier().storage == EvqUniform && type2->getQualifier().storage == EvqUniform)) || (type1->getQualifier().storage == EvqGlobal && type2->getQualifier().storage == EvqGlobal)) { if (qualifier1.precision != qualifier2.precision) { hasError = true; From 383eaf3293fa898622ad210ce49d11924e0d6aa1 Mon Sep 17 00:00:00 2001 From: rdb Date: Fri, 6 Nov 2020 18:51:07 +0100 Subject: [PATCH 066/365] Fix token-pasting macros not working in preprocessor directives. (#2453) Fixes #2443 --- Test/baseResults/tokenPaste.vert.out | 92 ++++++++++--------- Test/tokenPaste.vert | 12 +++ .../MachineIndependent/preprocessor/Pp.cpp | 1 + 3 files changed, 61 insertions(+), 44 deletions(-) diff --git a/Test/baseResults/tokenPaste.vert.out b/Test/baseResults/tokenPaste.vert.out index b5ba9a5f87..5ae1f75184 100644 --- a/Test/baseResults/tokenPaste.vert.out +++ b/Test/baseResults/tokenPaste.vert.out @@ -3,11 +3,11 @@ ERROR: 0:38: '##' : unexpected location ERROR: 0:40: '##' : unexpected location; end of replacement list ERROR: 0:49: '##' : combined tokens are too long ERROR: 0:52: '##' : not supported for these tokens -ERROR: 0:69: '##' : combined token is invalid -ERROR: 0:82: 'macro expansion' : Too few args in Macro rec -ERROR: 0:82: '##' : unexpected location -ERROR: 0:82: '##' : unexpected location -ERROR: 0:86: '##' : unexpected location; end of argument +ERROR: 0:81: '##' : combined token is invalid +ERROR: 0:94: 'macro expansion' : Too few args in Macro rec +ERROR: 0:94: '##' : unexpected location +ERROR: 0:94: '##' : unexpected location +ERROR: 0:98: '##' : unexpected location; end of argument ERROR: 9 compilation errors. No code generated. @@ -18,35 +18,35 @@ ERROR: node is still EOpNull! 0:52 'a' ( global int) 0:52 Constant: 0:52 11 (const int) -0:58 Sequence -0:58 move second child to first child ( temp int) -0:58 'cop' ( global int) -0:58 Constant: -0:58 160 (const int) -0:59 Sequence -0:59 move second child to first child ( temp bool) -0:59 'dop' ( global bool) -0:59 Constant: -0:59 true (const bool) -0:63 Function Definition: ShouldntExpandToThis( ( global void) -0:63 Function Parameters: -0:65 Sequence -0:65 Sequence -0:65 move second child to first child ( temp int) -0:65 'e' ( temp int) -0:65 Constant: -0:65 16 (const int) -0:66 right shift second child into first child ( temp int) -0:66 'e' ( temp int) -0:66 Constant: -0:66 2 (const int) -0:69 Sequence -0:69 move second child to first child ( temp bool) -0:69 'f' ( temp bool) -0:69 Compare Greater Than ( temp bool) -0:69 'e' ( temp int) -0:69 Constant: -0:69 5 (const int) +0:70 Sequence +0:70 move second child to first child ( temp int) +0:70 'cop' ( global int) +0:70 Constant: +0:70 160 (const int) +0:71 Sequence +0:71 move second child to first child ( temp bool) +0:71 'dop' ( global bool) +0:71 Constant: +0:71 true (const bool) +0:75 Function Definition: ShouldntExpandToThis( ( global void) +0:75 Function Parameters: +0:77 Sequence +0:77 Sequence +0:77 move second child to first child ( temp int) +0:77 'e' ( temp int) +0:77 Constant: +0:77 16 (const int) +0:78 right shift second child into first child ( temp int) +0:78 'e' ( temp int) +0:78 Constant: +0:78 2 (const int) +0:81 Sequence +0:81 move second child to first child ( temp bool) +0:81 'f' ( temp bool) +0:81 Compare Greater Than ( temp bool) +0:81 'e' ( temp int) +0:81 Constant: +0:81 5 (const int) 0:? Linker Objects 0:? 'SecondExpansion' ( global int) 0:? 'PostPasteExpansion' ( global int) @@ -60,6 +60,8 @@ ERROR: node is still EOpNull! 0:? 'foo875' ( uniform float) 0:? 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345' ( global float) 0:? 'a' ( global int) +0:? 'seahorse_var' ( uniform float) +0:? 'sealion_var' ( uniform float) 0:? 'aop' ( const int) 0:? 10 (const int) 0:? 'bop' ( const int) @@ -83,16 +85,16 @@ ERROR: node is still EOpNull! 0:52 'a' ( global int) 0:52 Constant: 0:52 11 (const int) -0:58 Sequence -0:58 move second child to first child ( temp int) -0:58 'cop' ( global int) -0:58 Constant: -0:58 160 (const int) -0:59 Sequence -0:59 move second child to first child ( temp bool) -0:59 'dop' ( global bool) -0:59 Constant: -0:59 true (const bool) +0:70 Sequence +0:70 move second child to first child ( temp int) +0:70 'cop' ( global int) +0:70 Constant: +0:70 160 (const int) +0:71 Sequence +0:71 move second child to first child ( temp bool) +0:71 'dop' ( global bool) +0:71 Constant: +0:71 true (const bool) 0:? Linker Objects 0:? 'SecondExpansion' ( global int) 0:? 'PostPasteExpansion' ( global int) @@ -106,6 +108,8 @@ ERROR: node is still EOpNull! 0:? 'foo875' ( uniform float) 0:? 'ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF012345' ( global float) 0:? 'a' ( global int) +0:? 'seahorse_var' ( uniform float) +0:? 'sealion_var' ( uniform float) 0:? 'aop' ( const int) 0:? 10 (const int) 0:? 'bop' ( const int) diff --git a/Test/tokenPaste.vert b/Test/tokenPaste.vert index 40de6f9219..c4515d46f3 100644 --- a/Test/tokenPaste.vert +++ b/Test/tokenPaste.vert @@ -51,6 +51,18 @@ float simplePaste(ABCDEF0123456789ABCDEF0123456789ABCDEF0123456789ABCDEF01234567 // non-identifiers int a = simplePaste(11,12); +// should work in #if as well +#define seahorse 1 +#define sealion 0 +#define marine_animal(suffix) (sea ## suffix) + +#if marine_animal(horse) // should pass +uniform float seahorse_var; +#endif +#if !marine_animal(lion) // should pass +uniform float sealion_var; +#endif + // operators #define MAKE_OP(L, R) L ## R const int aop = 10; diff --git a/glslang/MachineIndependent/preprocessor/Pp.cpp b/glslang/MachineIndependent/preprocessor/Pp.cpp index a0a626f9b7..aa1e0d7451 100644 --- a/glslang/MachineIndependent/preprocessor/Pp.cpp +++ b/glslang/MachineIndependent/preprocessor/Pp.cpp @@ -455,6 +455,7 @@ int TPpContext::eval(int token, int precedence, bool shortCircuit, int& res, boo token = scanToken(ppToken); } } else { + token = tokenPaste(token, *ppToken); token = evalToToken(token, shortCircuit, res, err, ppToken); return eval(token, precedence, shortCircuit, res, err, ppToken); } From 74e8f05b9fc7229a7c42015889aba12c7f9554b1 Mon Sep 17 00:00:00 2001 From: Jesse Hall Date: Mon, 9 Nov 2020 08:30:01 -0800 Subject: [PATCH 067/365] Implement GL_EXT_terminate_invocation (#2454) * Implement GL_EXT_terminate_invocation. * terminateInvocation: declare the SPV extension * Update test results for spirv-tools and bison version bumps Co-authored-by: John Kessenich --- SPIRV/GLSL.ext.KHR.h | 2 + SPIRV/GlslangToSpv.cpp | 4 + SPIRV/SpvBuilder.cpp | 7 + SPIRV/SpvBuilder.h | 3 +- SPIRV/doc.cpp | 3 + SPIRV/spirv.hpp | 1 + SPIRV/spvIR.h | 1 + Test/baseResults/cppDeepNest.frag.out | 2 +- Test/baseResults/numeral.frag.out | 2 +- Test/baseResults/spv.terminate.frag.out | 20 + Test/baseResults/terminate.frag.out | 24 + Test/baseResults/terminate.vert.out | 36 + Test/spv.terminate.frag | 8 + Test/terminate.frag | 10 + Test/terminate.vert | 10 + glslang/Include/intermediate.h | 5 +- glslang/MachineIndependent/Scan.cpp | 6 + glslang/MachineIndependent/Versions.cpp | 8 +- glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/glslang.m4 | 5 + glslang/MachineIndependent/glslang.y | 5 + glslang/MachineIndependent/glslang_tab.cpp | 10884 +++++++++-------- glslang/MachineIndependent/glslang_tab.cpp.h | 908 +- glslang/MachineIndependent/intermOut.cpp | 17 +- gtests/AST.FromFile.cpp | 2 + gtests/Spv.FromFile.cpp | 1 + 26 files changed, 6176 insertions(+), 5799 deletions(-) create mode 100755 Test/baseResults/spv.terminate.frag.out create mode 100755 Test/baseResults/terminate.frag.out create mode 100755 Test/baseResults/terminate.vert.out create mode 100644 Test/spv.terminate.frag create mode 100644 Test/terminate.frag create mode 100644 Test/terminate.vert diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index 2be968e10a..9610c6eeee 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -49,4 +49,6 @@ static const char* const E_SPV_KHR_non_semantic_info = "SPV_KHR_non_s static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_tracing"; static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query"; static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate"; +static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_terminate_invocation"; + #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index ddc637837d..e9c14df380 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3458,6 +3458,10 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T case glslang::EOpKill: builder.makeDiscard(); break; + case glslang::EOpTerminateInvocation: + builder.addExtension(spv::E_SPV_KHR_terminate_invocation); + builder.makeTerminateInvocation(); + break; case glslang::EOpBreak: if (breakForLoop.top()) builder.createLoopExit(); diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 42896ceea4..85ffe90af7 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -1453,6 +1453,13 @@ void Builder::makeDiscard() createAndSetNoPredecessorBlock("post-discard"); } +// Comments in header +void Builder::makeTerminateInvocation() +{ + buildPoint->addInstruction(std::unique_ptr(new Instruction(OpTerminateInvocation))); + createAndSetNoPredecessorBlock("post-terminate-invocation"); +} + // Comments in header Id Builder::createVariable(Decoration precision, StorageClass storageClass, Id type, const char* name, Id initializer) { diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index f93e1823e2..873c0cd76a 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -357,8 +357,9 @@ class Builder { // Generate all the code needed to finish up a function. void leaveFunction(); - // Create a discard. + // Create a discard or terminate-invocation. void makeDiscard(); + void makeTerminateInvocation(); // Create a global or function local or IO variable. Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr, diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 09e035ae37..3d08204f4b 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -1336,6 +1336,8 @@ const char* OpcodeString(int op) case 365: return "OpGroupNonUniformQuadBroadcast"; case 366: return "OpGroupNonUniformQuadSwap"; + case OpTerminateInvocation: return "OpTerminateInvocation"; + case 4421: return "OpSubgroupBallotKHR"; case 4422: return "OpSubgroupFirstInvocationKHR"; case 4428: return "OpSubgroupAllKHR"; @@ -1504,6 +1506,7 @@ void Parameterize() InstructionDesc[OpBranchConditional].setResultAndType(false, false); InstructionDesc[OpSwitch].setResultAndType(false, false); InstructionDesc[OpKill].setResultAndType(false, false); + InstructionDesc[OpTerminateInvocation].setResultAndType(false, false); InstructionDesc[OpReturn].setResultAndType(false, false); InstructionDesc[OpReturnValue].setResultAndType(false, false); InstructionDesc[OpUnreachable].setResultAndType(false, false); diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 26b35bb489..ef5670e3b6 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -1849,6 +1849,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpBranchConditional: *hasResult = false; *hasResultType = false; break; case OpSwitch: *hasResult = false; *hasResultType = false; break; case OpKill: *hasResult = false; *hasResultType = false; break; + case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; case OpReturn: *hasResult = false; *hasResultType = false; break; case OpReturnValue: *hasResult = false; *hasResultType = false; break; case OpUnreachable: *hasResult = false; *hasResultType = false; break; diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index 868b9bf82d..486e80d000 100644 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -263,6 +263,7 @@ class Block { case OpBranchConditional: case OpSwitch: case OpKill: + case OpTerminateInvocation: case OpReturn: case OpReturnValue: case OpUnreachable: diff --git a/Test/baseResults/cppDeepNest.frag.out b/Test/baseResults/cppDeepNest.frag.out index 969a256dd5..49b9aa3c09 100644 --- a/Test/baseResults/cppDeepNest.frag.out +++ b/Test/baseResults/cppDeepNest.frag.out @@ -1,7 +1,7 @@ cppDeepNest.frag ERROR: 0:66: '#if/#ifdef/#ifndef' : maximum nesting depth exceeded ERROR: 0:66: '' : missing #endif -ERROR: 0:66: '' : syntax error, unexpected $end +ERROR: 0:66: '' : syntax error, unexpected end of file ERROR: 3 compilation errors. No code generated. diff --git a/Test/baseResults/numeral.frag.out b/Test/baseResults/numeral.frag.out index b7c0a78b72..e2a7c64ce3 100644 --- a/Test/baseResults/numeral.frag.out +++ b/Test/baseResults/numeral.frag.out @@ -12,7 +12,7 @@ ERROR: 0:88: '' : float literal needs a decimal point or exponent ERROR: 0:98: '' : numeric literal too big ERROR: 0:101: '' : numeric literal too big ERROR: 0:104: '#' : preprocessor directive cannot be preceded by another token -ERROR: 0:104: '' : syntax error, unexpected $end, expecting COMMA or SEMICOLON +ERROR: 0:104: '' : syntax error, unexpected end of file, expecting COMMA or SEMICOLON ERROR: 14 compilation errors. No code generated. diff --git a/Test/baseResults/spv.terminate.frag.out b/Test/baseResults/spv.terminate.frag.out new file mode 100755 index 0000000000..39cb151f0b --- /dev/null +++ b/Test/baseResults/spv.terminate.frag.out @@ -0,0 +1,20 @@ +spv.terminate.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 7 + + Capability Shader + Extension "SPV_KHR_terminate_invocation" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + SourceExtension "GL_EXT_terminate_invocation" + Name 4 "main" + 2: TypeVoid + 3: TypeFunction 2 + 4(main): 2 Function None 3 + 5: Label + TerminateInvocation + FunctionEnd diff --git a/Test/baseResults/terminate.frag.out b/Test/baseResults/terminate.frag.out new file mode 100755 index 0000000000..4f72c9b32d --- /dev/null +++ b/Test/baseResults/terminate.frag.out @@ -0,0 +1,24 @@ +terminate.frag +ERROR: 0:3: 'terminateInvocation' : undeclared identifier +ERROR: 0:9: '' : syntax error, unexpected TERMINATE_INVOCATION, expecting COMMA or SEMICOLON +ERROR: 2 compilation errors. No code generated. + + +Shader version: 400 +Requested GL_EXT_terminate_invocation +ERROR: node is still EOpNull! +0:3 Function Definition: foo( ( global void) +0:3 Function Parameters: +0:3 Sequence +0:3 'terminateInvocation' ( temp float) +0:? Linker Objects + + +Linked fragment stage: + + +Shader version: 400 +Requested GL_EXT_terminate_invocation +ERROR: node is still EOpNull! +0:? Linker Objects + diff --git a/Test/baseResults/terminate.vert.out b/Test/baseResults/terminate.vert.out new file mode 100755 index 0000000000..cd984afb51 --- /dev/null +++ b/Test/baseResults/terminate.vert.out @@ -0,0 +1,36 @@ +terminate.vert +ERROR: 0:3: 'terminateInvocation' : undeclared identifier +ERROR: 0:9: 'terminateInvocation' : not supported in this stage: vertex +ERROR: 2 compilation errors. No code generated. + + +Shader version: 400 +Requested GL_EXT_terminate_invocation +ERROR: node is still EOpNull! +0:3 Function Definition: foo( ( global void) +0:3 Function Parameters: +0:3 Sequence +0:3 'terminateInvocation' ( temp float) +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Branch: TerminateInvocation +0:? Linker Objects +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 400 +Requested GL_EXT_terminate_invocation +ERROR: node is still EOpNull! +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Branch: TerminateInvocation +0:? Linker Objects +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/Test/spv.terminate.frag b/Test/spv.terminate.frag new file mode 100644 index 0000000000..2555877b58 --- /dev/null +++ b/Test/spv.terminate.frag @@ -0,0 +1,8 @@ +#version 400 + +#extension GL_EXT_terminate_invocation : enable + +void main() +{ + terminateInvocation; +} diff --git a/Test/terminate.frag b/Test/terminate.frag new file mode 100644 index 0000000000..32f1495fd9 --- /dev/null +++ b/Test/terminate.frag @@ -0,0 +1,10 @@ +#version 400 + +void foo() { terminateInvocation; } // ERROR: identifier undeclared + +#extension GL_EXT_terminate_invocation : enable + +void main() +{ + int terminateInvocation; // syntax ERROR +} diff --git a/Test/terminate.vert b/Test/terminate.vert new file mode 100644 index 0000000000..1d4eea9ca2 --- /dev/null +++ b/Test/terminate.vert @@ -0,0 +1,10 @@ +#version 400 + +void foo() { terminateInvocation; } // ERROR: identifier undeclared + +#extension GL_EXT_terminate_invocation : enable + +void main() +{ + terminateInvocation; // ERROR: wrong stage +} diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 9e41a997d0..f0411ebb1e 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -628,13 +628,14 @@ enum TOperator { // Branch // - EOpKill, // Fragment only + EOpKill, // Fragment only + EOpTerminateInvocation, // Fragment only + EOpDemote, // Fragment only EOpReturn, EOpBreak, EOpContinue, EOpCase, EOpDefault, - EOpDemote, // Fragment only // // Constructors diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index 1124b943c3..bcf4047e75 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -365,6 +365,7 @@ void TScanContext::fillInKeywordMap() (*KeywordMap)["if"] = IF; (*KeywordMap)["else"] = ELSE; (*KeywordMap)["discard"] = DISCARD; + (*KeywordMap)["terminateInvocation"] = TERMINATE_INVOCATION; (*KeywordMap)["return"] = RETURN; (*KeywordMap)["void"] = VOID; (*KeywordMap)["bool"] = BOOL; @@ -936,6 +937,11 @@ int TScanContext::tokenizeIdentifier() case CASE: return keyword; + case TERMINATE_INVOCATION: + if (!parseContext.extensionTurnedOn(E_GL_EXT_terminate_invocation)) + return identifierOrType(); + return keyword; + case BUFFER: afterBuffer = true; if ((parseContext.isEsProfile() && parseContext.version < 310) || diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 48d93cfc61..69b8863ce6 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -329,6 +329,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable; extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable; + extensionBehavior[E_GL_EXT_terminate_invocation] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -411,7 +412,7 @@ void TParseVersions::getPreamble(std::string& preamble) preamble += "#define GL_NV_shader_noperspective_interpolation 1\n"; } - } else { + } else { // !isEsProfile() preamble = "#define GL_FRAGMENT_PRECISION_HIGH 1\n" "#define GL_ARB_texture_rectangle 1\n" @@ -563,6 +564,11 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_GOOGLE_include_directive 1\n" "#define GL_KHR_blend_equation_advanced 1\n" ; + + // other general extensions + preamble += + "#define GL_EXT_terminate_invocation 1\n" + ; #endif // #define VULKAN XXXX diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index e484f556ab..eb17c52e05 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -299,6 +299,7 @@ const char* const E_GL_EXT_shader_subgroup_extended_types_int8 = "GL_EXT_shad const char* const E_GL_EXT_shader_subgroup_extended_types_int16 = "GL_EXT_shader_subgroup_extended_types_int16"; const char* const E_GL_EXT_shader_subgroup_extended_types_int64 = "GL_EXT_shader_subgroup_extended_types_int64"; const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16"; +const char* const E_GL_EXT_terminate_invocation = "GL_EXT_terminate_invocation"; const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float"; diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index f71d4b9c9f..5b0adb0fbb 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -293,6 +293,7 @@ GLSLANG_WEB_EXCLUDE_OFF %token CENTROID IN OUT INOUT %token STRUCT VOID WHILE %token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT +%token TERMINATE_INVOCATION %token UNIFORM SHARED BUFFER %token FLAT SMOOTH LAYOUT @@ -3927,6 +3928,10 @@ jump_statement parseContext.requireStage($1.loc, EShLangFragment, "discard"); $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc); } + | TERMINATE_INVOCATION SEMICOLON { + parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation"); + $$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc); + } ; // Grammar Note: No 'goto'. Gotos are not supported. diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index d7eb358764..4093b7d894 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -293,6 +293,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token CENTROID IN OUT INOUT %token STRUCT VOID WHILE %token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT +%token TERMINATE_INVOCATION %token UNIFORM SHARED BUFFER %token FLAT SMOOTH LAYOUT @@ -3927,6 +3928,10 @@ jump_statement parseContext.requireStage($1.loc, EShLangFragment, "discard"); $$ = parseContext.intermediate.addBranch(EOpKill, $1.loc); } + | TERMINATE_INVOCATION SEMICOLON { + parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation"); + $$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc); + } ; // Grammar Note: No 'goto'. Gotos are not supported. diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 22af333c05..ad7deb3096 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.7.2. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,6 +34,10 @@ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. @@ -44,7 +49,7 @@ #define YYBISON 1 /* Bison version. */ -#define YYBISON_VERSION "3.0.4" +#define YYBISON_VERSION "3.7.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -61,8 +66,8 @@ -/* Copy the first part of user declarations. */ -#line 69 "MachineIndependent/glslang.y" /* yacc.c:339 */ +/* First part of user prologue. */ +#line 69 "glslang/MachineIndependent/glslang.y" /* Based on: @@ -88,540 +93,594 @@ Jutta Degener, 1995 using namespace glslang; -#line 92 "MachineIndependent/glslang_tab.cpp" /* yacc.c:339 */ +#line 97 "glslang/MachineIndependent/glslang_tab.cpp" +# ifndef YY_CAST +# ifdef __cplusplus +# define YY_CAST(Type, Val) static_cast (Val) +# define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast (Val) +# else +# define YY_CAST(Type, Val) ((Type) (Val)) +# define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) +# endif +# endif # ifndef YY_NULLPTR -# if defined __cplusplus && 201103L <= __cplusplus -# define YY_NULLPTR nullptr +# if defined __cplusplus +# if 201103L <= __cplusplus +# define YY_NULLPTR nullptr +# else +# define YY_NULLPTR 0 +# endif # else -# define YY_NULLPTR 0 +# define YY_NULLPTR ((void*)0) # endif # endif -/* Enabling verbose error messages. */ -#ifdef YYERROR_VERBOSE -# undef YYERROR_VERBOSE -# define YYERROR_VERBOSE 1 -#else -# define YYERROR_VERBOSE 1 -#endif - -/* In a future release of Bison, this section will be replaced - by #include "glslang_tab.cpp.h". */ -#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED -# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED -/* Debug traces. */ -#ifndef YYDEBUG -# define YYDEBUG 1 -#endif -#if YYDEBUG -extern int yydebug; -#endif - -/* Token type. */ -#ifndef YYTOKENTYPE -# define YYTOKENTYPE - enum yytokentype - { - CONST = 258, - BOOL = 259, - INT = 260, - UINT = 261, - FLOAT = 262, - BVEC2 = 263, - BVEC3 = 264, - BVEC4 = 265, - IVEC2 = 266, - IVEC3 = 267, - IVEC4 = 268, - UVEC2 = 269, - UVEC3 = 270, - UVEC4 = 271, - VEC2 = 272, - VEC3 = 273, - VEC4 = 274, - MAT2 = 275, - MAT3 = 276, - MAT4 = 277, - MAT2X2 = 278, - MAT2X3 = 279, - MAT2X4 = 280, - MAT3X2 = 281, - MAT3X3 = 282, - MAT3X4 = 283, - MAT4X2 = 284, - MAT4X3 = 285, - MAT4X4 = 286, - SAMPLER2D = 287, - SAMPLER3D = 288, - SAMPLERCUBE = 289, - SAMPLER2DSHADOW = 290, - SAMPLERCUBESHADOW = 291, - SAMPLER2DARRAY = 292, - SAMPLER2DARRAYSHADOW = 293, - ISAMPLER2D = 294, - ISAMPLER3D = 295, - ISAMPLERCUBE = 296, - ISAMPLER2DARRAY = 297, - USAMPLER2D = 298, - USAMPLER3D = 299, - USAMPLERCUBE = 300, - USAMPLER2DARRAY = 301, - SAMPLER = 302, - SAMPLERSHADOW = 303, - TEXTURE2D = 304, - TEXTURE3D = 305, - TEXTURECUBE = 306, - TEXTURE2DARRAY = 307, - ITEXTURE2D = 308, - ITEXTURE3D = 309, - ITEXTURECUBE = 310, - ITEXTURE2DARRAY = 311, - UTEXTURE2D = 312, - UTEXTURE3D = 313, - UTEXTURECUBE = 314, - UTEXTURE2DARRAY = 315, - ATTRIBUTE = 316, - VARYING = 317, - FLOAT16_T = 318, - FLOAT32_T = 319, - DOUBLE = 320, - FLOAT64_T = 321, - INT64_T = 322, - UINT64_T = 323, - INT32_T = 324, - UINT32_T = 325, - INT16_T = 326, - UINT16_T = 327, - INT8_T = 328, - UINT8_T = 329, - I64VEC2 = 330, - I64VEC3 = 331, - I64VEC4 = 332, - U64VEC2 = 333, - U64VEC3 = 334, - U64VEC4 = 335, - I32VEC2 = 336, - I32VEC3 = 337, - I32VEC4 = 338, - U32VEC2 = 339, - U32VEC3 = 340, - U32VEC4 = 341, - I16VEC2 = 342, - I16VEC3 = 343, - I16VEC4 = 344, - U16VEC2 = 345, - U16VEC3 = 346, - U16VEC4 = 347, - I8VEC2 = 348, - I8VEC3 = 349, - I8VEC4 = 350, - U8VEC2 = 351, - U8VEC3 = 352, - U8VEC4 = 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, - DMAT2X2 = 378, - DMAT2X3 = 379, - DMAT2X4 = 380, - DMAT3X2 = 381, - DMAT3X3 = 382, - DMAT3X4 = 383, - DMAT4X2 = 384, - DMAT4X3 = 385, - DMAT4X4 = 386, - F16MAT2X2 = 387, - F16MAT2X3 = 388, - F16MAT2X4 = 389, - F16MAT3X2 = 390, - F16MAT3X3 = 391, - F16MAT3X4 = 392, - F16MAT4X2 = 393, - F16MAT4X3 = 394, - F16MAT4X4 = 395, - F32MAT2X2 = 396, - F32MAT2X3 = 397, - F32MAT2X4 = 398, - F32MAT3X2 = 399, - F32MAT3X3 = 400, - F32MAT3X4 = 401, - F32MAT4X2 = 402, - F32MAT4X3 = 403, - F32MAT4X4 = 404, - F64MAT2X2 = 405, - F64MAT2X3 = 406, - F64MAT2X4 = 407, - F64MAT3X2 = 408, - F64MAT3X3 = 409, - F64MAT3X4 = 410, - F64MAT4X2 = 411, - F64MAT4X3 = 412, - F64MAT4X4 = 413, - ATOMIC_UINT = 414, - ACCSTRUCTNV = 415, - ACCSTRUCTEXT = 416, - RAYQUERYEXT = 417, - FCOOPMATNV = 418, - ICOOPMATNV = 419, - UCOOPMATNV = 420, - SAMPLERCUBEARRAY = 421, - SAMPLERCUBEARRAYSHADOW = 422, - ISAMPLERCUBEARRAY = 423, - USAMPLERCUBEARRAY = 424, - SAMPLER1D = 425, - SAMPLER1DARRAY = 426, - SAMPLER1DARRAYSHADOW = 427, - ISAMPLER1D = 428, - SAMPLER1DSHADOW = 429, - SAMPLER2DRECT = 430, - SAMPLER2DRECTSHADOW = 431, - ISAMPLER2DRECT = 432, - USAMPLER2DRECT = 433, - SAMPLERBUFFER = 434, - ISAMPLERBUFFER = 435, - USAMPLERBUFFER = 436, - SAMPLER2DMS = 437, - ISAMPLER2DMS = 438, - USAMPLER2DMS = 439, - SAMPLER2DMSARRAY = 440, - ISAMPLER2DMSARRAY = 441, - USAMPLER2DMSARRAY = 442, - SAMPLEREXTERNALOES = 443, - SAMPLEREXTERNAL2DY2YEXT = 444, - ISAMPLER1DARRAY = 445, - USAMPLER1D = 446, - USAMPLER1DARRAY = 447, - F16SAMPLER1D = 448, - F16SAMPLER2D = 449, - F16SAMPLER3D = 450, - F16SAMPLER2DRECT = 451, - F16SAMPLERCUBE = 452, - F16SAMPLER1DARRAY = 453, - F16SAMPLER2DARRAY = 454, - F16SAMPLERCUBEARRAY = 455, - F16SAMPLERBUFFER = 456, - F16SAMPLER2DMS = 457, - F16SAMPLER2DMSARRAY = 458, - F16SAMPLER1DSHADOW = 459, - F16SAMPLER2DSHADOW = 460, - F16SAMPLER1DARRAYSHADOW = 461, - F16SAMPLER2DARRAYSHADOW = 462, - F16SAMPLER2DRECTSHADOW = 463, - F16SAMPLERCUBESHADOW = 464, - F16SAMPLERCUBEARRAYSHADOW = 465, - IMAGE1D = 466, - IIMAGE1D = 467, - UIMAGE1D = 468, - IMAGE2D = 469, - IIMAGE2D = 470, - UIMAGE2D = 471, - IMAGE3D = 472, - IIMAGE3D = 473, - UIMAGE3D = 474, - IMAGE2DRECT = 475, - IIMAGE2DRECT = 476, - UIMAGE2DRECT = 477, - IMAGECUBE = 478, - IIMAGECUBE = 479, - UIMAGECUBE = 480, - IMAGEBUFFER = 481, - IIMAGEBUFFER = 482, - UIMAGEBUFFER = 483, - IMAGE1DARRAY = 484, - IIMAGE1DARRAY = 485, - UIMAGE1DARRAY = 486, - IMAGE2DARRAY = 487, - IIMAGE2DARRAY = 488, - UIMAGE2DARRAY = 489, - IMAGECUBEARRAY = 490, - IIMAGECUBEARRAY = 491, - UIMAGECUBEARRAY = 492, - IMAGE2DMS = 493, - IIMAGE2DMS = 494, - UIMAGE2DMS = 495, - IMAGE2DMSARRAY = 496, - IIMAGE2DMSARRAY = 497, - UIMAGE2DMSARRAY = 498, - F16IMAGE1D = 499, - F16IMAGE2D = 500, - F16IMAGE3D = 501, - F16IMAGE2DRECT = 502, - F16IMAGECUBE = 503, - F16IMAGE1DARRAY = 504, - F16IMAGE2DARRAY = 505, - F16IMAGECUBEARRAY = 506, - F16IMAGEBUFFER = 507, - F16IMAGE2DMS = 508, - F16IMAGE2DMSARRAY = 509, - I64IMAGE1D = 510, - U64IMAGE1D = 511, - I64IMAGE2D = 512, - U64IMAGE2D = 513, - I64IMAGE3D = 514, - U64IMAGE3D = 515, - I64IMAGE2DRECT = 516, - U64IMAGE2DRECT = 517, - I64IMAGECUBE = 518, - U64IMAGECUBE = 519, - I64IMAGEBUFFER = 520, - U64IMAGEBUFFER = 521, - I64IMAGE1DARRAY = 522, - U64IMAGE1DARRAY = 523, - I64IMAGE2DARRAY = 524, - U64IMAGE2DARRAY = 525, - I64IMAGECUBEARRAY = 526, - U64IMAGECUBEARRAY = 527, - I64IMAGE2DMS = 528, - U64IMAGE2DMS = 529, - I64IMAGE2DMSARRAY = 530, - U64IMAGE2DMSARRAY = 531, - TEXTURECUBEARRAY = 532, - ITEXTURECUBEARRAY = 533, - UTEXTURECUBEARRAY = 534, - TEXTURE1D = 535, - ITEXTURE1D = 536, - UTEXTURE1D = 537, - TEXTURE1DARRAY = 538, - ITEXTURE1DARRAY = 539, - UTEXTURE1DARRAY = 540, - TEXTURE2DRECT = 541, - ITEXTURE2DRECT = 542, - UTEXTURE2DRECT = 543, - TEXTUREBUFFER = 544, - ITEXTUREBUFFER = 545, - UTEXTUREBUFFER = 546, - TEXTURE2DMS = 547, - ITEXTURE2DMS = 548, - UTEXTURE2DMS = 549, - TEXTURE2DMSARRAY = 550, - ITEXTURE2DMSARRAY = 551, - UTEXTURE2DMSARRAY = 552, - F16TEXTURE1D = 553, - F16TEXTURE2D = 554, - F16TEXTURE3D = 555, - F16TEXTURE2DRECT = 556, - F16TEXTURECUBE = 557, - F16TEXTURE1DARRAY = 558, - F16TEXTURE2DARRAY = 559, - F16TEXTURECUBEARRAY = 560, - F16TEXTUREBUFFER = 561, - F16TEXTURE2DMS = 562, - F16TEXTURE2DMSARRAY = 563, - SUBPASSINPUT = 564, - SUBPASSINPUTMS = 565, - ISUBPASSINPUT = 566, - ISUBPASSINPUTMS = 567, - USUBPASSINPUT = 568, - USUBPASSINPUTMS = 569, - F16SUBPASSINPUT = 570, - F16SUBPASSINPUTMS = 571, - LEFT_OP = 572, - RIGHT_OP = 573, - INC_OP = 574, - DEC_OP = 575, - LE_OP = 576, - GE_OP = 577, - EQ_OP = 578, - NE_OP = 579, - AND_OP = 580, - OR_OP = 581, - XOR_OP = 582, - MUL_ASSIGN = 583, - DIV_ASSIGN = 584, - ADD_ASSIGN = 585, - MOD_ASSIGN = 586, - LEFT_ASSIGN = 587, - RIGHT_ASSIGN = 588, - AND_ASSIGN = 589, - XOR_ASSIGN = 590, - OR_ASSIGN = 591, - SUB_ASSIGN = 592, - STRING_LITERAL = 593, - LEFT_PAREN = 594, - RIGHT_PAREN = 595, - LEFT_BRACKET = 596, - RIGHT_BRACKET = 597, - LEFT_BRACE = 598, - RIGHT_BRACE = 599, - DOT = 600, - COMMA = 601, - COLON = 602, - EQUAL = 603, - SEMICOLON = 604, - BANG = 605, - DASH = 606, - TILDE = 607, - PLUS = 608, - STAR = 609, - SLASH = 610, - PERCENT = 611, - LEFT_ANGLE = 612, - RIGHT_ANGLE = 613, - VERTICAL_BAR = 614, - CARET = 615, - AMPERSAND = 616, - QUESTION = 617, - INVARIANT = 618, - HIGH_PRECISION = 619, - MEDIUM_PRECISION = 620, - LOW_PRECISION = 621, - PRECISION = 622, - PACKED = 623, - RESOURCE = 624, - SUPERP = 625, - FLOATCONSTANT = 626, - INTCONSTANT = 627, - UINTCONSTANT = 628, - BOOLCONSTANT = 629, - IDENTIFIER = 630, - TYPE_NAME = 631, - CENTROID = 632, - IN = 633, - OUT = 634, - INOUT = 635, - STRUCT = 636, - VOID = 637, - WHILE = 638, - BREAK = 639, - CONTINUE = 640, - DO = 641, - ELSE = 642, - FOR = 643, - IF = 644, - DISCARD = 645, - RETURN = 646, - SWITCH = 647, - CASE = 648, - DEFAULT = 649, - UNIFORM = 650, - SHARED = 651, - BUFFER = 652, - FLAT = 653, - SMOOTH = 654, - LAYOUT = 655, - DOUBLECONSTANT = 656, - INT16CONSTANT = 657, - UINT16CONSTANT = 658, - FLOAT16CONSTANT = 659, - INT32CONSTANT = 660, - UINT32CONSTANT = 661, - INT64CONSTANT = 662, - UINT64CONSTANT = 663, - SUBROUTINE = 664, - DEMOTE = 665, - PAYLOADNV = 666, - PAYLOADINNV = 667, - HITATTRNV = 668, - CALLDATANV = 669, - CALLDATAINNV = 670, - PAYLOADEXT = 671, - PAYLOADINEXT = 672, - HITATTREXT = 673, - CALLDATAEXT = 674, - CALLDATAINEXT = 675, - PATCH = 676, - SAMPLE = 677, - NONUNIFORM = 678, - COHERENT = 679, - VOLATILE = 680, - RESTRICT = 681, - READONLY = 682, - WRITEONLY = 683, - DEVICECOHERENT = 684, - QUEUEFAMILYCOHERENT = 685, - WORKGROUPCOHERENT = 686, - SUBGROUPCOHERENT = 687, - NONPRIVATE = 688, - SHADERCALLCOHERENT = 689, - NOPERSPECTIVE = 690, - EXPLICITINTERPAMD = 691, - PERVERTEXNV = 692, - PERPRIMITIVENV = 693, - PERVIEWNV = 694, - PERTASKNV = 695, - PRECISE = 696 - }; -#endif - -/* Value type. */ -#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - -union YYSTYPE +#include "glslang_tab.cpp.h" +/* Symbol kind. */ +enum yysymbol_kind_t { -#line 97 "MachineIndependent/glslang.y" /* yacc.c:355 */ - - struct { - glslang::TSourceLoc loc; - union { - glslang::TString *string; - int i; - unsigned int u; - long long i64; - unsigned long long u64; - bool b; - double d; - }; - glslang::TSymbol* symbol; - } lex; - struct { - glslang::TSourceLoc loc; - glslang::TOperator op; - union { - TIntermNode* intermNode; - glslang::TIntermNodePair nodePair; - glslang::TIntermTyped* intermTypedNode; - glslang::TAttributes* attributes; - }; - union { - glslang::TPublicType type; - glslang::TFunction* function; - glslang::TParameter param; - glslang::TTypeLoc typeLine; - glslang::TTypeList* typeList; - glslang::TArraySizes* arraySizes; - glslang::TIdentifierList* identifierList; - }; - glslang::TArraySizes* typeParameters; - } interm; - -#line 610 "MachineIndependent/glslang_tab.cpp" /* yacc.c:355 */ + YYSYMBOL_YYEMPTY = -2, + YYSYMBOL_YYEOF = 0, /* "end of file" */ + YYSYMBOL_YYerror = 1, /* error */ + YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ + YYSYMBOL_CONST = 3, /* CONST */ + YYSYMBOL_BOOL = 4, /* BOOL */ + YYSYMBOL_INT = 5, /* INT */ + YYSYMBOL_UINT = 6, /* UINT */ + YYSYMBOL_FLOAT = 7, /* FLOAT */ + YYSYMBOL_BVEC2 = 8, /* BVEC2 */ + YYSYMBOL_BVEC3 = 9, /* BVEC3 */ + YYSYMBOL_BVEC4 = 10, /* BVEC4 */ + YYSYMBOL_IVEC2 = 11, /* IVEC2 */ + YYSYMBOL_IVEC3 = 12, /* IVEC3 */ + YYSYMBOL_IVEC4 = 13, /* IVEC4 */ + YYSYMBOL_UVEC2 = 14, /* UVEC2 */ + YYSYMBOL_UVEC3 = 15, /* UVEC3 */ + YYSYMBOL_UVEC4 = 16, /* UVEC4 */ + YYSYMBOL_VEC2 = 17, /* VEC2 */ + YYSYMBOL_VEC3 = 18, /* VEC3 */ + YYSYMBOL_VEC4 = 19, /* VEC4 */ + YYSYMBOL_MAT2 = 20, /* MAT2 */ + YYSYMBOL_MAT3 = 21, /* MAT3 */ + YYSYMBOL_MAT4 = 22, /* MAT4 */ + YYSYMBOL_MAT2X2 = 23, /* MAT2X2 */ + YYSYMBOL_MAT2X3 = 24, /* MAT2X3 */ + YYSYMBOL_MAT2X4 = 25, /* MAT2X4 */ + YYSYMBOL_MAT3X2 = 26, /* MAT3X2 */ + YYSYMBOL_MAT3X3 = 27, /* MAT3X3 */ + YYSYMBOL_MAT3X4 = 28, /* MAT3X4 */ + YYSYMBOL_MAT4X2 = 29, /* MAT4X2 */ + YYSYMBOL_MAT4X3 = 30, /* MAT4X3 */ + YYSYMBOL_MAT4X4 = 31, /* MAT4X4 */ + YYSYMBOL_SAMPLER2D = 32, /* SAMPLER2D */ + YYSYMBOL_SAMPLER3D = 33, /* SAMPLER3D */ + YYSYMBOL_SAMPLERCUBE = 34, /* SAMPLERCUBE */ + YYSYMBOL_SAMPLER2DSHADOW = 35, /* SAMPLER2DSHADOW */ + YYSYMBOL_SAMPLERCUBESHADOW = 36, /* SAMPLERCUBESHADOW */ + YYSYMBOL_SAMPLER2DARRAY = 37, /* SAMPLER2DARRAY */ + YYSYMBOL_SAMPLER2DARRAYSHADOW = 38, /* SAMPLER2DARRAYSHADOW */ + YYSYMBOL_ISAMPLER2D = 39, /* ISAMPLER2D */ + YYSYMBOL_ISAMPLER3D = 40, /* ISAMPLER3D */ + YYSYMBOL_ISAMPLERCUBE = 41, /* ISAMPLERCUBE */ + YYSYMBOL_ISAMPLER2DARRAY = 42, /* ISAMPLER2DARRAY */ + YYSYMBOL_USAMPLER2D = 43, /* USAMPLER2D */ + YYSYMBOL_USAMPLER3D = 44, /* USAMPLER3D */ + YYSYMBOL_USAMPLERCUBE = 45, /* USAMPLERCUBE */ + YYSYMBOL_USAMPLER2DARRAY = 46, /* USAMPLER2DARRAY */ + YYSYMBOL_SAMPLER = 47, /* SAMPLER */ + YYSYMBOL_SAMPLERSHADOW = 48, /* SAMPLERSHADOW */ + YYSYMBOL_TEXTURE2D = 49, /* TEXTURE2D */ + YYSYMBOL_TEXTURE3D = 50, /* TEXTURE3D */ + YYSYMBOL_TEXTURECUBE = 51, /* TEXTURECUBE */ + YYSYMBOL_TEXTURE2DARRAY = 52, /* TEXTURE2DARRAY */ + YYSYMBOL_ITEXTURE2D = 53, /* ITEXTURE2D */ + YYSYMBOL_ITEXTURE3D = 54, /* ITEXTURE3D */ + YYSYMBOL_ITEXTURECUBE = 55, /* ITEXTURECUBE */ + YYSYMBOL_ITEXTURE2DARRAY = 56, /* ITEXTURE2DARRAY */ + YYSYMBOL_UTEXTURE2D = 57, /* UTEXTURE2D */ + YYSYMBOL_UTEXTURE3D = 58, /* UTEXTURE3D */ + YYSYMBOL_UTEXTURECUBE = 59, /* UTEXTURECUBE */ + YYSYMBOL_UTEXTURE2DARRAY = 60, /* UTEXTURE2DARRAY */ + YYSYMBOL_ATTRIBUTE = 61, /* ATTRIBUTE */ + YYSYMBOL_VARYING = 62, /* VARYING */ + YYSYMBOL_FLOAT16_T = 63, /* FLOAT16_T */ + YYSYMBOL_FLOAT32_T = 64, /* FLOAT32_T */ + YYSYMBOL_DOUBLE = 65, /* DOUBLE */ + YYSYMBOL_FLOAT64_T = 66, /* FLOAT64_T */ + YYSYMBOL_INT64_T = 67, /* INT64_T */ + YYSYMBOL_UINT64_T = 68, /* UINT64_T */ + YYSYMBOL_INT32_T = 69, /* INT32_T */ + YYSYMBOL_UINT32_T = 70, /* UINT32_T */ + YYSYMBOL_INT16_T = 71, /* INT16_T */ + YYSYMBOL_UINT16_T = 72, /* UINT16_T */ + YYSYMBOL_INT8_T = 73, /* INT8_T */ + YYSYMBOL_UINT8_T = 74, /* UINT8_T */ + YYSYMBOL_I64VEC2 = 75, /* I64VEC2 */ + YYSYMBOL_I64VEC3 = 76, /* I64VEC3 */ + YYSYMBOL_I64VEC4 = 77, /* I64VEC4 */ + YYSYMBOL_U64VEC2 = 78, /* U64VEC2 */ + YYSYMBOL_U64VEC3 = 79, /* U64VEC3 */ + YYSYMBOL_U64VEC4 = 80, /* U64VEC4 */ + YYSYMBOL_I32VEC2 = 81, /* I32VEC2 */ + YYSYMBOL_I32VEC3 = 82, /* I32VEC3 */ + YYSYMBOL_I32VEC4 = 83, /* I32VEC4 */ + YYSYMBOL_U32VEC2 = 84, /* U32VEC2 */ + YYSYMBOL_U32VEC3 = 85, /* U32VEC3 */ + YYSYMBOL_U32VEC4 = 86, /* U32VEC4 */ + YYSYMBOL_I16VEC2 = 87, /* I16VEC2 */ + YYSYMBOL_I16VEC3 = 88, /* I16VEC3 */ + YYSYMBOL_I16VEC4 = 89, /* I16VEC4 */ + YYSYMBOL_U16VEC2 = 90, /* U16VEC2 */ + YYSYMBOL_U16VEC3 = 91, /* U16VEC3 */ + YYSYMBOL_U16VEC4 = 92, /* U16VEC4 */ + YYSYMBOL_I8VEC2 = 93, /* I8VEC2 */ + YYSYMBOL_I8VEC3 = 94, /* I8VEC3 */ + YYSYMBOL_I8VEC4 = 95, /* I8VEC4 */ + YYSYMBOL_U8VEC2 = 96, /* U8VEC2 */ + YYSYMBOL_U8VEC3 = 97, /* U8VEC3 */ + YYSYMBOL_U8VEC4 = 98, /* U8VEC4 */ + YYSYMBOL_DVEC2 = 99, /* DVEC2 */ + YYSYMBOL_DVEC3 = 100, /* DVEC3 */ + YYSYMBOL_DVEC4 = 101, /* DVEC4 */ + YYSYMBOL_DMAT2 = 102, /* DMAT2 */ + YYSYMBOL_DMAT3 = 103, /* DMAT3 */ + YYSYMBOL_DMAT4 = 104, /* DMAT4 */ + YYSYMBOL_F16VEC2 = 105, /* F16VEC2 */ + YYSYMBOL_F16VEC3 = 106, /* F16VEC3 */ + YYSYMBOL_F16VEC4 = 107, /* F16VEC4 */ + YYSYMBOL_F16MAT2 = 108, /* F16MAT2 */ + YYSYMBOL_F16MAT3 = 109, /* F16MAT3 */ + YYSYMBOL_F16MAT4 = 110, /* F16MAT4 */ + YYSYMBOL_F32VEC2 = 111, /* F32VEC2 */ + YYSYMBOL_F32VEC3 = 112, /* F32VEC3 */ + YYSYMBOL_F32VEC4 = 113, /* F32VEC4 */ + YYSYMBOL_F32MAT2 = 114, /* F32MAT2 */ + YYSYMBOL_F32MAT3 = 115, /* F32MAT3 */ + YYSYMBOL_F32MAT4 = 116, /* F32MAT4 */ + YYSYMBOL_F64VEC2 = 117, /* F64VEC2 */ + YYSYMBOL_F64VEC3 = 118, /* F64VEC3 */ + YYSYMBOL_F64VEC4 = 119, /* F64VEC4 */ + YYSYMBOL_F64MAT2 = 120, /* F64MAT2 */ + YYSYMBOL_F64MAT3 = 121, /* F64MAT3 */ + YYSYMBOL_F64MAT4 = 122, /* F64MAT4 */ + YYSYMBOL_DMAT2X2 = 123, /* DMAT2X2 */ + YYSYMBOL_DMAT2X3 = 124, /* DMAT2X3 */ + YYSYMBOL_DMAT2X4 = 125, /* DMAT2X4 */ + YYSYMBOL_DMAT3X2 = 126, /* DMAT3X2 */ + YYSYMBOL_DMAT3X3 = 127, /* DMAT3X3 */ + YYSYMBOL_DMAT3X4 = 128, /* DMAT3X4 */ + YYSYMBOL_DMAT4X2 = 129, /* DMAT4X2 */ + YYSYMBOL_DMAT4X3 = 130, /* DMAT4X3 */ + YYSYMBOL_DMAT4X4 = 131, /* DMAT4X4 */ + YYSYMBOL_F16MAT2X2 = 132, /* F16MAT2X2 */ + YYSYMBOL_F16MAT2X3 = 133, /* F16MAT2X3 */ + YYSYMBOL_F16MAT2X4 = 134, /* F16MAT2X4 */ + YYSYMBOL_F16MAT3X2 = 135, /* F16MAT3X2 */ + YYSYMBOL_F16MAT3X3 = 136, /* F16MAT3X3 */ + YYSYMBOL_F16MAT3X4 = 137, /* F16MAT3X4 */ + YYSYMBOL_F16MAT4X2 = 138, /* F16MAT4X2 */ + YYSYMBOL_F16MAT4X3 = 139, /* F16MAT4X3 */ + YYSYMBOL_F16MAT4X4 = 140, /* F16MAT4X4 */ + YYSYMBOL_F32MAT2X2 = 141, /* F32MAT2X2 */ + YYSYMBOL_F32MAT2X3 = 142, /* F32MAT2X3 */ + YYSYMBOL_F32MAT2X4 = 143, /* F32MAT2X4 */ + YYSYMBOL_F32MAT3X2 = 144, /* F32MAT3X2 */ + YYSYMBOL_F32MAT3X3 = 145, /* F32MAT3X3 */ + YYSYMBOL_F32MAT3X4 = 146, /* F32MAT3X4 */ + YYSYMBOL_F32MAT4X2 = 147, /* F32MAT4X2 */ + YYSYMBOL_F32MAT4X3 = 148, /* F32MAT4X3 */ + YYSYMBOL_F32MAT4X4 = 149, /* F32MAT4X4 */ + YYSYMBOL_F64MAT2X2 = 150, /* F64MAT2X2 */ + YYSYMBOL_F64MAT2X3 = 151, /* F64MAT2X3 */ + YYSYMBOL_F64MAT2X4 = 152, /* F64MAT2X4 */ + YYSYMBOL_F64MAT3X2 = 153, /* F64MAT3X2 */ + YYSYMBOL_F64MAT3X3 = 154, /* F64MAT3X3 */ + YYSYMBOL_F64MAT3X4 = 155, /* F64MAT3X4 */ + YYSYMBOL_F64MAT4X2 = 156, /* F64MAT4X2 */ + YYSYMBOL_F64MAT4X3 = 157, /* F64MAT4X3 */ + YYSYMBOL_F64MAT4X4 = 158, /* F64MAT4X4 */ + YYSYMBOL_ATOMIC_UINT = 159, /* ATOMIC_UINT */ + YYSYMBOL_ACCSTRUCTNV = 160, /* ACCSTRUCTNV */ + YYSYMBOL_ACCSTRUCTEXT = 161, /* ACCSTRUCTEXT */ + YYSYMBOL_RAYQUERYEXT = 162, /* RAYQUERYEXT */ + YYSYMBOL_FCOOPMATNV = 163, /* FCOOPMATNV */ + YYSYMBOL_ICOOPMATNV = 164, /* ICOOPMATNV */ + YYSYMBOL_UCOOPMATNV = 165, /* UCOOPMATNV */ + YYSYMBOL_SAMPLERCUBEARRAY = 166, /* SAMPLERCUBEARRAY */ + YYSYMBOL_SAMPLERCUBEARRAYSHADOW = 167, /* SAMPLERCUBEARRAYSHADOW */ + YYSYMBOL_ISAMPLERCUBEARRAY = 168, /* ISAMPLERCUBEARRAY */ + YYSYMBOL_USAMPLERCUBEARRAY = 169, /* USAMPLERCUBEARRAY */ + YYSYMBOL_SAMPLER1D = 170, /* SAMPLER1D */ + YYSYMBOL_SAMPLER1DARRAY = 171, /* SAMPLER1DARRAY */ + YYSYMBOL_SAMPLER1DARRAYSHADOW = 172, /* SAMPLER1DARRAYSHADOW */ + YYSYMBOL_ISAMPLER1D = 173, /* ISAMPLER1D */ + YYSYMBOL_SAMPLER1DSHADOW = 174, /* SAMPLER1DSHADOW */ + YYSYMBOL_SAMPLER2DRECT = 175, /* SAMPLER2DRECT */ + YYSYMBOL_SAMPLER2DRECTSHADOW = 176, /* SAMPLER2DRECTSHADOW */ + YYSYMBOL_ISAMPLER2DRECT = 177, /* ISAMPLER2DRECT */ + YYSYMBOL_USAMPLER2DRECT = 178, /* USAMPLER2DRECT */ + YYSYMBOL_SAMPLERBUFFER = 179, /* SAMPLERBUFFER */ + YYSYMBOL_ISAMPLERBUFFER = 180, /* ISAMPLERBUFFER */ + YYSYMBOL_USAMPLERBUFFER = 181, /* USAMPLERBUFFER */ + YYSYMBOL_SAMPLER2DMS = 182, /* SAMPLER2DMS */ + YYSYMBOL_ISAMPLER2DMS = 183, /* ISAMPLER2DMS */ + YYSYMBOL_USAMPLER2DMS = 184, /* USAMPLER2DMS */ + YYSYMBOL_SAMPLER2DMSARRAY = 185, /* SAMPLER2DMSARRAY */ + YYSYMBOL_ISAMPLER2DMSARRAY = 186, /* ISAMPLER2DMSARRAY */ + YYSYMBOL_USAMPLER2DMSARRAY = 187, /* USAMPLER2DMSARRAY */ + YYSYMBOL_SAMPLEREXTERNALOES = 188, /* SAMPLEREXTERNALOES */ + YYSYMBOL_SAMPLEREXTERNAL2DY2YEXT = 189, /* SAMPLEREXTERNAL2DY2YEXT */ + YYSYMBOL_ISAMPLER1DARRAY = 190, /* ISAMPLER1DARRAY */ + YYSYMBOL_USAMPLER1D = 191, /* USAMPLER1D */ + YYSYMBOL_USAMPLER1DARRAY = 192, /* USAMPLER1DARRAY */ + YYSYMBOL_F16SAMPLER1D = 193, /* F16SAMPLER1D */ + YYSYMBOL_F16SAMPLER2D = 194, /* F16SAMPLER2D */ + YYSYMBOL_F16SAMPLER3D = 195, /* F16SAMPLER3D */ + YYSYMBOL_F16SAMPLER2DRECT = 196, /* F16SAMPLER2DRECT */ + YYSYMBOL_F16SAMPLERCUBE = 197, /* F16SAMPLERCUBE */ + YYSYMBOL_F16SAMPLER1DARRAY = 198, /* F16SAMPLER1DARRAY */ + YYSYMBOL_F16SAMPLER2DARRAY = 199, /* F16SAMPLER2DARRAY */ + YYSYMBOL_F16SAMPLERCUBEARRAY = 200, /* F16SAMPLERCUBEARRAY */ + YYSYMBOL_F16SAMPLERBUFFER = 201, /* F16SAMPLERBUFFER */ + YYSYMBOL_F16SAMPLER2DMS = 202, /* F16SAMPLER2DMS */ + YYSYMBOL_F16SAMPLER2DMSARRAY = 203, /* F16SAMPLER2DMSARRAY */ + YYSYMBOL_F16SAMPLER1DSHADOW = 204, /* F16SAMPLER1DSHADOW */ + YYSYMBOL_F16SAMPLER2DSHADOW = 205, /* F16SAMPLER2DSHADOW */ + YYSYMBOL_F16SAMPLER1DARRAYSHADOW = 206, /* F16SAMPLER1DARRAYSHADOW */ + YYSYMBOL_F16SAMPLER2DARRAYSHADOW = 207, /* F16SAMPLER2DARRAYSHADOW */ + YYSYMBOL_F16SAMPLER2DRECTSHADOW = 208, /* F16SAMPLER2DRECTSHADOW */ + YYSYMBOL_F16SAMPLERCUBESHADOW = 209, /* F16SAMPLERCUBESHADOW */ + YYSYMBOL_F16SAMPLERCUBEARRAYSHADOW = 210, /* F16SAMPLERCUBEARRAYSHADOW */ + YYSYMBOL_IMAGE1D = 211, /* IMAGE1D */ + YYSYMBOL_IIMAGE1D = 212, /* IIMAGE1D */ + YYSYMBOL_UIMAGE1D = 213, /* UIMAGE1D */ + YYSYMBOL_IMAGE2D = 214, /* IMAGE2D */ + YYSYMBOL_IIMAGE2D = 215, /* IIMAGE2D */ + YYSYMBOL_UIMAGE2D = 216, /* UIMAGE2D */ + YYSYMBOL_IMAGE3D = 217, /* IMAGE3D */ + YYSYMBOL_IIMAGE3D = 218, /* IIMAGE3D */ + YYSYMBOL_UIMAGE3D = 219, /* UIMAGE3D */ + YYSYMBOL_IMAGE2DRECT = 220, /* IMAGE2DRECT */ + YYSYMBOL_IIMAGE2DRECT = 221, /* IIMAGE2DRECT */ + YYSYMBOL_UIMAGE2DRECT = 222, /* UIMAGE2DRECT */ + YYSYMBOL_IMAGECUBE = 223, /* IMAGECUBE */ + YYSYMBOL_IIMAGECUBE = 224, /* IIMAGECUBE */ + YYSYMBOL_UIMAGECUBE = 225, /* UIMAGECUBE */ + YYSYMBOL_IMAGEBUFFER = 226, /* IMAGEBUFFER */ + YYSYMBOL_IIMAGEBUFFER = 227, /* IIMAGEBUFFER */ + YYSYMBOL_UIMAGEBUFFER = 228, /* UIMAGEBUFFER */ + YYSYMBOL_IMAGE1DARRAY = 229, /* IMAGE1DARRAY */ + YYSYMBOL_IIMAGE1DARRAY = 230, /* IIMAGE1DARRAY */ + YYSYMBOL_UIMAGE1DARRAY = 231, /* UIMAGE1DARRAY */ + YYSYMBOL_IMAGE2DARRAY = 232, /* IMAGE2DARRAY */ + YYSYMBOL_IIMAGE2DARRAY = 233, /* IIMAGE2DARRAY */ + YYSYMBOL_UIMAGE2DARRAY = 234, /* UIMAGE2DARRAY */ + YYSYMBOL_IMAGECUBEARRAY = 235, /* IMAGECUBEARRAY */ + YYSYMBOL_IIMAGECUBEARRAY = 236, /* IIMAGECUBEARRAY */ + YYSYMBOL_UIMAGECUBEARRAY = 237, /* UIMAGECUBEARRAY */ + YYSYMBOL_IMAGE2DMS = 238, /* IMAGE2DMS */ + YYSYMBOL_IIMAGE2DMS = 239, /* IIMAGE2DMS */ + YYSYMBOL_UIMAGE2DMS = 240, /* UIMAGE2DMS */ + YYSYMBOL_IMAGE2DMSARRAY = 241, /* IMAGE2DMSARRAY */ + YYSYMBOL_IIMAGE2DMSARRAY = 242, /* IIMAGE2DMSARRAY */ + YYSYMBOL_UIMAGE2DMSARRAY = 243, /* UIMAGE2DMSARRAY */ + YYSYMBOL_F16IMAGE1D = 244, /* F16IMAGE1D */ + YYSYMBOL_F16IMAGE2D = 245, /* F16IMAGE2D */ + YYSYMBOL_F16IMAGE3D = 246, /* F16IMAGE3D */ + YYSYMBOL_F16IMAGE2DRECT = 247, /* F16IMAGE2DRECT */ + YYSYMBOL_F16IMAGECUBE = 248, /* F16IMAGECUBE */ + YYSYMBOL_F16IMAGE1DARRAY = 249, /* F16IMAGE1DARRAY */ + YYSYMBOL_F16IMAGE2DARRAY = 250, /* F16IMAGE2DARRAY */ + YYSYMBOL_F16IMAGECUBEARRAY = 251, /* F16IMAGECUBEARRAY */ + YYSYMBOL_F16IMAGEBUFFER = 252, /* F16IMAGEBUFFER */ + YYSYMBOL_F16IMAGE2DMS = 253, /* F16IMAGE2DMS */ + YYSYMBOL_F16IMAGE2DMSARRAY = 254, /* F16IMAGE2DMSARRAY */ + YYSYMBOL_I64IMAGE1D = 255, /* I64IMAGE1D */ + YYSYMBOL_U64IMAGE1D = 256, /* U64IMAGE1D */ + YYSYMBOL_I64IMAGE2D = 257, /* I64IMAGE2D */ + YYSYMBOL_U64IMAGE2D = 258, /* U64IMAGE2D */ + YYSYMBOL_I64IMAGE3D = 259, /* I64IMAGE3D */ + YYSYMBOL_U64IMAGE3D = 260, /* U64IMAGE3D */ + YYSYMBOL_I64IMAGE2DRECT = 261, /* I64IMAGE2DRECT */ + YYSYMBOL_U64IMAGE2DRECT = 262, /* U64IMAGE2DRECT */ + YYSYMBOL_I64IMAGECUBE = 263, /* I64IMAGECUBE */ + YYSYMBOL_U64IMAGECUBE = 264, /* U64IMAGECUBE */ + YYSYMBOL_I64IMAGEBUFFER = 265, /* I64IMAGEBUFFER */ + YYSYMBOL_U64IMAGEBUFFER = 266, /* U64IMAGEBUFFER */ + YYSYMBOL_I64IMAGE1DARRAY = 267, /* I64IMAGE1DARRAY */ + YYSYMBOL_U64IMAGE1DARRAY = 268, /* U64IMAGE1DARRAY */ + YYSYMBOL_I64IMAGE2DARRAY = 269, /* I64IMAGE2DARRAY */ + YYSYMBOL_U64IMAGE2DARRAY = 270, /* U64IMAGE2DARRAY */ + YYSYMBOL_I64IMAGECUBEARRAY = 271, /* I64IMAGECUBEARRAY */ + YYSYMBOL_U64IMAGECUBEARRAY = 272, /* U64IMAGECUBEARRAY */ + YYSYMBOL_I64IMAGE2DMS = 273, /* I64IMAGE2DMS */ + YYSYMBOL_U64IMAGE2DMS = 274, /* U64IMAGE2DMS */ + YYSYMBOL_I64IMAGE2DMSARRAY = 275, /* I64IMAGE2DMSARRAY */ + YYSYMBOL_U64IMAGE2DMSARRAY = 276, /* U64IMAGE2DMSARRAY */ + YYSYMBOL_TEXTURECUBEARRAY = 277, /* TEXTURECUBEARRAY */ + YYSYMBOL_ITEXTURECUBEARRAY = 278, /* ITEXTURECUBEARRAY */ + YYSYMBOL_UTEXTURECUBEARRAY = 279, /* UTEXTURECUBEARRAY */ + YYSYMBOL_TEXTURE1D = 280, /* TEXTURE1D */ + YYSYMBOL_ITEXTURE1D = 281, /* ITEXTURE1D */ + YYSYMBOL_UTEXTURE1D = 282, /* UTEXTURE1D */ + YYSYMBOL_TEXTURE1DARRAY = 283, /* TEXTURE1DARRAY */ + YYSYMBOL_ITEXTURE1DARRAY = 284, /* ITEXTURE1DARRAY */ + YYSYMBOL_UTEXTURE1DARRAY = 285, /* UTEXTURE1DARRAY */ + YYSYMBOL_TEXTURE2DRECT = 286, /* TEXTURE2DRECT */ + YYSYMBOL_ITEXTURE2DRECT = 287, /* ITEXTURE2DRECT */ + YYSYMBOL_UTEXTURE2DRECT = 288, /* UTEXTURE2DRECT */ + YYSYMBOL_TEXTUREBUFFER = 289, /* TEXTUREBUFFER */ + YYSYMBOL_ITEXTUREBUFFER = 290, /* ITEXTUREBUFFER */ + YYSYMBOL_UTEXTUREBUFFER = 291, /* UTEXTUREBUFFER */ + YYSYMBOL_TEXTURE2DMS = 292, /* TEXTURE2DMS */ + YYSYMBOL_ITEXTURE2DMS = 293, /* ITEXTURE2DMS */ + YYSYMBOL_UTEXTURE2DMS = 294, /* UTEXTURE2DMS */ + YYSYMBOL_TEXTURE2DMSARRAY = 295, /* TEXTURE2DMSARRAY */ + YYSYMBOL_ITEXTURE2DMSARRAY = 296, /* ITEXTURE2DMSARRAY */ + YYSYMBOL_UTEXTURE2DMSARRAY = 297, /* UTEXTURE2DMSARRAY */ + YYSYMBOL_F16TEXTURE1D = 298, /* F16TEXTURE1D */ + YYSYMBOL_F16TEXTURE2D = 299, /* F16TEXTURE2D */ + YYSYMBOL_F16TEXTURE3D = 300, /* F16TEXTURE3D */ + YYSYMBOL_F16TEXTURE2DRECT = 301, /* F16TEXTURE2DRECT */ + YYSYMBOL_F16TEXTURECUBE = 302, /* F16TEXTURECUBE */ + YYSYMBOL_F16TEXTURE1DARRAY = 303, /* F16TEXTURE1DARRAY */ + YYSYMBOL_F16TEXTURE2DARRAY = 304, /* F16TEXTURE2DARRAY */ + YYSYMBOL_F16TEXTURECUBEARRAY = 305, /* F16TEXTURECUBEARRAY */ + YYSYMBOL_F16TEXTUREBUFFER = 306, /* F16TEXTUREBUFFER */ + YYSYMBOL_F16TEXTURE2DMS = 307, /* F16TEXTURE2DMS */ + YYSYMBOL_F16TEXTURE2DMSARRAY = 308, /* F16TEXTURE2DMSARRAY */ + YYSYMBOL_SUBPASSINPUT = 309, /* SUBPASSINPUT */ + YYSYMBOL_SUBPASSINPUTMS = 310, /* SUBPASSINPUTMS */ + YYSYMBOL_ISUBPASSINPUT = 311, /* ISUBPASSINPUT */ + YYSYMBOL_ISUBPASSINPUTMS = 312, /* ISUBPASSINPUTMS */ + YYSYMBOL_USUBPASSINPUT = 313, /* USUBPASSINPUT */ + YYSYMBOL_USUBPASSINPUTMS = 314, /* USUBPASSINPUTMS */ + YYSYMBOL_F16SUBPASSINPUT = 315, /* F16SUBPASSINPUT */ + YYSYMBOL_F16SUBPASSINPUTMS = 316, /* F16SUBPASSINPUTMS */ + YYSYMBOL_LEFT_OP = 317, /* LEFT_OP */ + YYSYMBOL_RIGHT_OP = 318, /* RIGHT_OP */ + YYSYMBOL_INC_OP = 319, /* INC_OP */ + YYSYMBOL_DEC_OP = 320, /* DEC_OP */ + YYSYMBOL_LE_OP = 321, /* LE_OP */ + YYSYMBOL_GE_OP = 322, /* GE_OP */ + YYSYMBOL_EQ_OP = 323, /* EQ_OP */ + YYSYMBOL_NE_OP = 324, /* NE_OP */ + YYSYMBOL_AND_OP = 325, /* AND_OP */ + YYSYMBOL_OR_OP = 326, /* OR_OP */ + YYSYMBOL_XOR_OP = 327, /* XOR_OP */ + YYSYMBOL_MUL_ASSIGN = 328, /* MUL_ASSIGN */ + YYSYMBOL_DIV_ASSIGN = 329, /* DIV_ASSIGN */ + YYSYMBOL_ADD_ASSIGN = 330, /* ADD_ASSIGN */ + YYSYMBOL_MOD_ASSIGN = 331, /* MOD_ASSIGN */ + YYSYMBOL_LEFT_ASSIGN = 332, /* LEFT_ASSIGN */ + YYSYMBOL_RIGHT_ASSIGN = 333, /* RIGHT_ASSIGN */ + YYSYMBOL_AND_ASSIGN = 334, /* AND_ASSIGN */ + YYSYMBOL_XOR_ASSIGN = 335, /* XOR_ASSIGN */ + YYSYMBOL_OR_ASSIGN = 336, /* OR_ASSIGN */ + YYSYMBOL_SUB_ASSIGN = 337, /* SUB_ASSIGN */ + YYSYMBOL_STRING_LITERAL = 338, /* STRING_LITERAL */ + YYSYMBOL_LEFT_PAREN = 339, /* LEFT_PAREN */ + YYSYMBOL_RIGHT_PAREN = 340, /* RIGHT_PAREN */ + YYSYMBOL_LEFT_BRACKET = 341, /* LEFT_BRACKET */ + YYSYMBOL_RIGHT_BRACKET = 342, /* RIGHT_BRACKET */ + YYSYMBOL_LEFT_BRACE = 343, /* LEFT_BRACE */ + YYSYMBOL_RIGHT_BRACE = 344, /* RIGHT_BRACE */ + YYSYMBOL_DOT = 345, /* DOT */ + YYSYMBOL_COMMA = 346, /* COMMA */ + YYSYMBOL_COLON = 347, /* COLON */ + YYSYMBOL_EQUAL = 348, /* EQUAL */ + YYSYMBOL_SEMICOLON = 349, /* SEMICOLON */ + YYSYMBOL_BANG = 350, /* BANG */ + YYSYMBOL_DASH = 351, /* DASH */ + YYSYMBOL_TILDE = 352, /* TILDE */ + YYSYMBOL_PLUS = 353, /* PLUS */ + YYSYMBOL_STAR = 354, /* STAR */ + YYSYMBOL_SLASH = 355, /* SLASH */ + YYSYMBOL_PERCENT = 356, /* PERCENT */ + YYSYMBOL_LEFT_ANGLE = 357, /* LEFT_ANGLE */ + YYSYMBOL_RIGHT_ANGLE = 358, /* RIGHT_ANGLE */ + YYSYMBOL_VERTICAL_BAR = 359, /* VERTICAL_BAR */ + YYSYMBOL_CARET = 360, /* CARET */ + YYSYMBOL_AMPERSAND = 361, /* AMPERSAND */ + YYSYMBOL_QUESTION = 362, /* QUESTION */ + YYSYMBOL_INVARIANT = 363, /* INVARIANT */ + YYSYMBOL_HIGH_PRECISION = 364, /* HIGH_PRECISION */ + YYSYMBOL_MEDIUM_PRECISION = 365, /* MEDIUM_PRECISION */ + YYSYMBOL_LOW_PRECISION = 366, /* LOW_PRECISION */ + YYSYMBOL_PRECISION = 367, /* PRECISION */ + YYSYMBOL_PACKED = 368, /* PACKED */ + YYSYMBOL_RESOURCE = 369, /* RESOURCE */ + YYSYMBOL_SUPERP = 370, /* SUPERP */ + YYSYMBOL_FLOATCONSTANT = 371, /* FLOATCONSTANT */ + YYSYMBOL_INTCONSTANT = 372, /* INTCONSTANT */ + YYSYMBOL_UINTCONSTANT = 373, /* UINTCONSTANT */ + YYSYMBOL_BOOLCONSTANT = 374, /* BOOLCONSTANT */ + YYSYMBOL_IDENTIFIER = 375, /* IDENTIFIER */ + YYSYMBOL_TYPE_NAME = 376, /* TYPE_NAME */ + YYSYMBOL_CENTROID = 377, /* CENTROID */ + YYSYMBOL_IN = 378, /* IN */ + YYSYMBOL_OUT = 379, /* OUT */ + YYSYMBOL_INOUT = 380, /* INOUT */ + YYSYMBOL_STRUCT = 381, /* STRUCT */ + YYSYMBOL_VOID = 382, /* VOID */ + YYSYMBOL_WHILE = 383, /* WHILE */ + YYSYMBOL_BREAK = 384, /* BREAK */ + YYSYMBOL_CONTINUE = 385, /* CONTINUE */ + YYSYMBOL_DO = 386, /* DO */ + YYSYMBOL_ELSE = 387, /* ELSE */ + YYSYMBOL_FOR = 388, /* FOR */ + YYSYMBOL_IF = 389, /* IF */ + YYSYMBOL_DISCARD = 390, /* DISCARD */ + YYSYMBOL_RETURN = 391, /* RETURN */ + YYSYMBOL_SWITCH = 392, /* SWITCH */ + YYSYMBOL_CASE = 393, /* CASE */ + YYSYMBOL_DEFAULT = 394, /* DEFAULT */ + YYSYMBOL_TERMINATE_INVOCATION = 395, /* TERMINATE_INVOCATION */ + YYSYMBOL_UNIFORM = 396, /* UNIFORM */ + YYSYMBOL_SHARED = 397, /* SHARED */ + YYSYMBOL_BUFFER = 398, /* BUFFER */ + YYSYMBOL_FLAT = 399, /* FLAT */ + YYSYMBOL_SMOOTH = 400, /* SMOOTH */ + YYSYMBOL_LAYOUT = 401, /* LAYOUT */ + YYSYMBOL_DOUBLECONSTANT = 402, /* DOUBLECONSTANT */ + YYSYMBOL_INT16CONSTANT = 403, /* INT16CONSTANT */ + YYSYMBOL_UINT16CONSTANT = 404, /* UINT16CONSTANT */ + YYSYMBOL_FLOAT16CONSTANT = 405, /* FLOAT16CONSTANT */ + YYSYMBOL_INT32CONSTANT = 406, /* INT32CONSTANT */ + YYSYMBOL_UINT32CONSTANT = 407, /* UINT32CONSTANT */ + YYSYMBOL_INT64CONSTANT = 408, /* INT64CONSTANT */ + YYSYMBOL_UINT64CONSTANT = 409, /* UINT64CONSTANT */ + YYSYMBOL_SUBROUTINE = 410, /* SUBROUTINE */ + YYSYMBOL_DEMOTE = 411, /* DEMOTE */ + YYSYMBOL_PAYLOADNV = 412, /* PAYLOADNV */ + YYSYMBOL_PAYLOADINNV = 413, /* PAYLOADINNV */ + YYSYMBOL_HITATTRNV = 414, /* HITATTRNV */ + YYSYMBOL_CALLDATANV = 415, /* CALLDATANV */ + YYSYMBOL_CALLDATAINNV = 416, /* CALLDATAINNV */ + YYSYMBOL_PAYLOADEXT = 417, /* PAYLOADEXT */ + YYSYMBOL_PAYLOADINEXT = 418, /* PAYLOADINEXT */ + YYSYMBOL_HITATTREXT = 419, /* HITATTREXT */ + YYSYMBOL_CALLDATAEXT = 420, /* CALLDATAEXT */ + YYSYMBOL_CALLDATAINEXT = 421, /* CALLDATAINEXT */ + YYSYMBOL_PATCH = 422, /* PATCH */ + YYSYMBOL_SAMPLE = 423, /* SAMPLE */ + YYSYMBOL_NONUNIFORM = 424, /* NONUNIFORM */ + YYSYMBOL_COHERENT = 425, /* COHERENT */ + YYSYMBOL_VOLATILE = 426, /* VOLATILE */ + YYSYMBOL_RESTRICT = 427, /* RESTRICT */ + YYSYMBOL_READONLY = 428, /* READONLY */ + YYSYMBOL_WRITEONLY = 429, /* WRITEONLY */ + YYSYMBOL_DEVICECOHERENT = 430, /* DEVICECOHERENT */ + YYSYMBOL_QUEUEFAMILYCOHERENT = 431, /* QUEUEFAMILYCOHERENT */ + YYSYMBOL_WORKGROUPCOHERENT = 432, /* WORKGROUPCOHERENT */ + YYSYMBOL_SUBGROUPCOHERENT = 433, /* SUBGROUPCOHERENT */ + YYSYMBOL_NONPRIVATE = 434, /* NONPRIVATE */ + YYSYMBOL_SHADERCALLCOHERENT = 435, /* SHADERCALLCOHERENT */ + YYSYMBOL_NOPERSPECTIVE = 436, /* NOPERSPECTIVE */ + YYSYMBOL_EXPLICITINTERPAMD = 437, /* EXPLICITINTERPAMD */ + YYSYMBOL_PERVERTEXNV = 438, /* PERVERTEXNV */ + YYSYMBOL_PERPRIMITIVENV = 439, /* PERPRIMITIVENV */ + YYSYMBOL_PERVIEWNV = 440, /* PERVIEWNV */ + YYSYMBOL_PERTASKNV = 441, /* PERTASKNV */ + YYSYMBOL_PRECISE = 442, /* PRECISE */ + YYSYMBOL_YYACCEPT = 443, /* $accept */ + YYSYMBOL_variable_identifier = 444, /* variable_identifier */ + YYSYMBOL_primary_expression = 445, /* primary_expression */ + YYSYMBOL_postfix_expression = 446, /* postfix_expression */ + YYSYMBOL_integer_expression = 447, /* integer_expression */ + YYSYMBOL_function_call = 448, /* function_call */ + YYSYMBOL_function_call_or_method = 449, /* function_call_or_method */ + YYSYMBOL_function_call_generic = 450, /* function_call_generic */ + YYSYMBOL_function_call_header_no_parameters = 451, /* function_call_header_no_parameters */ + YYSYMBOL_function_call_header_with_parameters = 452, /* function_call_header_with_parameters */ + YYSYMBOL_function_call_header = 453, /* function_call_header */ + YYSYMBOL_function_identifier = 454, /* function_identifier */ + YYSYMBOL_unary_expression = 455, /* unary_expression */ + YYSYMBOL_unary_operator = 456, /* unary_operator */ + YYSYMBOL_multiplicative_expression = 457, /* multiplicative_expression */ + YYSYMBOL_additive_expression = 458, /* additive_expression */ + YYSYMBOL_shift_expression = 459, /* shift_expression */ + YYSYMBOL_relational_expression = 460, /* relational_expression */ + YYSYMBOL_equality_expression = 461, /* equality_expression */ + YYSYMBOL_and_expression = 462, /* and_expression */ + YYSYMBOL_exclusive_or_expression = 463, /* exclusive_or_expression */ + YYSYMBOL_inclusive_or_expression = 464, /* inclusive_or_expression */ + YYSYMBOL_logical_and_expression = 465, /* logical_and_expression */ + YYSYMBOL_logical_xor_expression = 466, /* logical_xor_expression */ + YYSYMBOL_logical_or_expression = 467, /* logical_or_expression */ + YYSYMBOL_conditional_expression = 468, /* conditional_expression */ + YYSYMBOL_469_1 = 469, /* $@1 */ + YYSYMBOL_assignment_expression = 470, /* assignment_expression */ + YYSYMBOL_assignment_operator = 471, /* assignment_operator */ + YYSYMBOL_expression = 472, /* expression */ + YYSYMBOL_constant_expression = 473, /* constant_expression */ + YYSYMBOL_declaration = 474, /* declaration */ + YYSYMBOL_block_structure = 475, /* block_structure */ + YYSYMBOL_476_2 = 476, /* $@2 */ + YYSYMBOL_identifier_list = 477, /* identifier_list */ + YYSYMBOL_function_prototype = 478, /* function_prototype */ + YYSYMBOL_function_declarator = 479, /* function_declarator */ + YYSYMBOL_function_header_with_parameters = 480, /* function_header_with_parameters */ + YYSYMBOL_function_header = 481, /* function_header */ + YYSYMBOL_parameter_declarator = 482, /* parameter_declarator */ + YYSYMBOL_parameter_declaration = 483, /* parameter_declaration */ + YYSYMBOL_parameter_type_specifier = 484, /* parameter_type_specifier */ + YYSYMBOL_init_declarator_list = 485, /* init_declarator_list */ + YYSYMBOL_single_declaration = 486, /* single_declaration */ + YYSYMBOL_fully_specified_type = 487, /* fully_specified_type */ + YYSYMBOL_invariant_qualifier = 488, /* invariant_qualifier */ + YYSYMBOL_interpolation_qualifier = 489, /* interpolation_qualifier */ + YYSYMBOL_layout_qualifier = 490, /* layout_qualifier */ + YYSYMBOL_layout_qualifier_id_list = 491, /* layout_qualifier_id_list */ + YYSYMBOL_layout_qualifier_id = 492, /* layout_qualifier_id */ + YYSYMBOL_precise_qualifier = 493, /* precise_qualifier */ + YYSYMBOL_type_qualifier = 494, /* type_qualifier */ + YYSYMBOL_single_type_qualifier = 495, /* single_type_qualifier */ + YYSYMBOL_storage_qualifier = 496, /* storage_qualifier */ + YYSYMBOL_non_uniform_qualifier = 497, /* non_uniform_qualifier */ + YYSYMBOL_type_name_list = 498, /* type_name_list */ + YYSYMBOL_type_specifier = 499, /* type_specifier */ + YYSYMBOL_array_specifier = 500, /* array_specifier */ + YYSYMBOL_type_parameter_specifier_opt = 501, /* type_parameter_specifier_opt */ + YYSYMBOL_type_parameter_specifier = 502, /* type_parameter_specifier */ + YYSYMBOL_type_parameter_specifier_list = 503, /* type_parameter_specifier_list */ + YYSYMBOL_type_specifier_nonarray = 504, /* type_specifier_nonarray */ + YYSYMBOL_precision_qualifier = 505, /* precision_qualifier */ + YYSYMBOL_struct_specifier = 506, /* struct_specifier */ + YYSYMBOL_507_3 = 507, /* $@3 */ + YYSYMBOL_508_4 = 508, /* $@4 */ + YYSYMBOL_struct_declaration_list = 509, /* struct_declaration_list */ + YYSYMBOL_struct_declaration = 510, /* struct_declaration */ + YYSYMBOL_struct_declarator_list = 511, /* struct_declarator_list */ + YYSYMBOL_struct_declarator = 512, /* struct_declarator */ + YYSYMBOL_initializer = 513, /* initializer */ + YYSYMBOL_initializer_list = 514, /* initializer_list */ + YYSYMBOL_declaration_statement = 515, /* declaration_statement */ + YYSYMBOL_statement = 516, /* statement */ + YYSYMBOL_simple_statement = 517, /* simple_statement */ + YYSYMBOL_demote_statement = 518, /* demote_statement */ + YYSYMBOL_compound_statement = 519, /* compound_statement */ + YYSYMBOL_520_5 = 520, /* $@5 */ + YYSYMBOL_521_6 = 521, /* $@6 */ + YYSYMBOL_statement_no_new_scope = 522, /* statement_no_new_scope */ + YYSYMBOL_statement_scoped = 523, /* statement_scoped */ + YYSYMBOL_524_7 = 524, /* $@7 */ + YYSYMBOL_525_8 = 525, /* $@8 */ + YYSYMBOL_compound_statement_no_new_scope = 526, /* compound_statement_no_new_scope */ + YYSYMBOL_statement_list = 527, /* statement_list */ + YYSYMBOL_expression_statement = 528, /* expression_statement */ + YYSYMBOL_selection_statement = 529, /* selection_statement */ + YYSYMBOL_selection_statement_nonattributed = 530, /* selection_statement_nonattributed */ + YYSYMBOL_selection_rest_statement = 531, /* selection_rest_statement */ + YYSYMBOL_condition = 532, /* condition */ + YYSYMBOL_switch_statement = 533, /* switch_statement */ + YYSYMBOL_switch_statement_nonattributed = 534, /* switch_statement_nonattributed */ + YYSYMBOL_535_9 = 535, /* $@9 */ + YYSYMBOL_switch_statement_list = 536, /* switch_statement_list */ + YYSYMBOL_case_label = 537, /* case_label */ + YYSYMBOL_iteration_statement = 538, /* iteration_statement */ + YYSYMBOL_iteration_statement_nonattributed = 539, /* iteration_statement_nonattributed */ + YYSYMBOL_540_10 = 540, /* $@10 */ + YYSYMBOL_541_11 = 541, /* $@11 */ + YYSYMBOL_542_12 = 542, /* $@12 */ + YYSYMBOL_for_init_statement = 543, /* for_init_statement */ + YYSYMBOL_conditionopt = 544, /* conditionopt */ + YYSYMBOL_for_rest_statement = 545, /* for_rest_statement */ + YYSYMBOL_jump_statement = 546, /* jump_statement */ + YYSYMBOL_translation_unit = 547, /* translation_unit */ + YYSYMBOL_external_declaration = 548, /* external_declaration */ + YYSYMBOL_function_definition = 549, /* function_definition */ + YYSYMBOL_550_13 = 550, /* $@13 */ + YYSYMBOL_attribute = 551, /* attribute */ + YYSYMBOL_attribute_list = 552, /* attribute_list */ + YYSYMBOL_single_attribute = 553 /* single_attribute */ }; - -typedef union YYSTYPE YYSTYPE; -# define YYSTYPE_IS_TRIVIAL 1 -# define YYSTYPE_IS_DECLARED 1 -#endif - +typedef enum yysymbol_kind_t yysymbol_kind_t; -int yyparse (glslang::TParseContext* pParseContext); - -#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ - -/* Copy the second part of user declarations. */ -#line 133 "MachineIndependent/glslang.y" /* yacc.c:358 */ +/* Second part of user prologue. */ +#line 133 "glslang/MachineIndependent/glslang.y" /* windows only pragma */ @@ -637,34 +696,82 @@ int yyparse (glslang::TParseContext* pParseContext); extern int yylex(YYSTYPE*, TParseContext&); -#line 641 "MachineIndependent/glslang_tab.cpp" /* yacc.c:358 */ +#line 700 "glslang/MachineIndependent/glslang_tab.cpp" + #ifdef short # undef short #endif -#ifdef YYTYPE_UINT8 -typedef YYTYPE_UINT8 yytype_uint8; -#else -typedef unsigned char yytype_uint8; +/* On compilers that do not define __PTRDIFF_MAX__ etc., make sure + and (if available) are included + so that the code can choose integer types of a good width. */ + +#ifndef __PTRDIFF_MAX__ +# include /* INFRINGES ON USER NAME SPACE */ +# if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ +# include /* INFRINGES ON USER NAME SPACE */ +# define YY_STDINT_H +# endif #endif -#ifdef YYTYPE_INT8 -typedef YYTYPE_INT8 yytype_int8; +/* Narrow types that promote to a signed type and that can represent a + signed or unsigned integer of at least N bits. In tables they can + save space and decrease cache pressure. Promoting to a signed type + helps avoid bugs in integer arithmetic. */ + +#ifdef __INT_LEAST8_MAX__ +typedef __INT_LEAST8_TYPE__ yytype_int8; +#elif defined YY_STDINT_H +typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif -#ifdef YYTYPE_UINT16 -typedef YYTYPE_UINT16 yytype_uint16; +#ifdef __INT_LEAST16_MAX__ +typedef __INT_LEAST16_TYPE__ yytype_int16; +#elif defined YY_STDINT_H +typedef int_least16_t yytype_int16; +#else +typedef short yytype_int16; +#endif + +#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST8_TYPE__ yytype_uint8; +#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST8_MAX <= INT_MAX) +typedef uint_least8_t yytype_uint8; +#elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX +typedef unsigned char yytype_uint8; #else -typedef unsigned short int yytype_uint16; +typedef short yytype_uint8; #endif -#ifdef YYTYPE_INT16 -typedef YYTYPE_INT16 yytype_int16; +#if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ +typedef __UINT_LEAST16_TYPE__ yytype_uint16; +#elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ + && UINT_LEAST16_MAX <= INT_MAX) +typedef uint_least16_t yytype_uint16; +#elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX +typedef unsigned short yytype_uint16; #else -typedef short int yytype_int16; +typedef int yytype_uint16; +#endif + +#ifndef YYPTRDIFF_T +# if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ +# define YYPTRDIFF_T __PTRDIFF_TYPE__ +# define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ +# elif defined PTRDIFF_MAX +# ifndef ptrdiff_t +# include /* INFRINGES ON USER NAME SPACE */ +# endif +# define YYPTRDIFF_T ptrdiff_t +# define YYPTRDIFF_MAXIMUM PTRDIFF_MAX +# else +# define YYPTRDIFF_T long +# define YYPTRDIFF_MAXIMUM LONG_MAX +# endif #endif #ifndef YYSIZE_T @@ -672,15 +779,28 @@ typedef short int yytype_int16; # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t -# elif ! defined YYSIZE_T +# elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else -# define YYSIZE_T unsigned int +# define YYSIZE_T unsigned # endif #endif -#define YYSIZE_MAXIMUM ((YYSIZE_T) -1) +#define YYSIZE_MAXIMUM \ + YY_CAST (YYPTRDIFF_T, \ + (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ + ? YYPTRDIFF_MAXIMUM \ + : YY_CAST (YYSIZE_T, -1))) + +#define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) + + +/* Stored state numbers (used for stacks). */ +typedef yytype_int16 yy_state_t; + +/* State numbers in computations. */ +typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS @@ -694,30 +814,20 @@ typedef short int yytype_int16; # endif #endif -#ifndef YY_ATTRIBUTE -# if (defined __GNUC__ \ - && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \ - || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C -# define YY_ATTRIBUTE(Spec) __attribute__(Spec) -# else -# define YY_ATTRIBUTE(Spec) /* empty */ -# endif -#endif #ifndef YY_ATTRIBUTE_PURE -# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__)) +# if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) +# else +# define YY_ATTRIBUTE_PURE +# endif #endif #ifndef YY_ATTRIBUTE_UNUSED -# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__)) -#endif - -#if !defined _Noreturn \ - && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112) -# if defined _MSC_VER && 1200 <= _MSC_VER -# define _Noreturn __declspec (noreturn) +# if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) +# define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else -# define _Noreturn YY_ATTRIBUTE ((__noreturn__)) +# define YY_ATTRIBUTE_UNUSED # endif #endif @@ -728,13 +838,13 @@ typedef short int yytype_int16; # define YYUSE(E) /* empty */ #endif -#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ +#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ -# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ - _Pragma ("GCC diagnostic push") \ - _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ +# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") -# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ +# define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value @@ -747,8 +857,22 @@ typedef short int yytype_int16; # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif +#if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ +# define YY_IGNORE_USELESS_CAST_BEGIN \ + _Pragma ("GCC diagnostic push") \ + _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") +# define YY_IGNORE_USELESS_CAST_END \ + _Pragma ("GCC diagnostic pop") +#endif +#ifndef YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_BEGIN +# define YY_IGNORE_USELESS_CAST_END +#endif + -#if ! defined yyoverflow || YYERROR_VERBOSE +#define YY_ASSERT(E) ((void) (0 && (E))) + +#if 1 /* The parser invokes alloca or malloc; define the necessary symbols. */ @@ -813,8 +937,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif -#endif /* ! defined yyoverflow || YYERROR_VERBOSE */ - +#endif /* 1 */ #if (! defined yyoverflow \ && (! defined __cplusplus \ @@ -823,17 +946,17 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */ /* A type that is properly aligned for any stack member. */ union yyalloc { - yytype_int16 yyss_alloc; + yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ -# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) +# define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ - ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 @@ -846,11 +969,11 @@ union yyalloc # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ - YYSIZE_T yynewbytes; \ + YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ - yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ - yyptr += yynewbytes / sizeof (*yyptr); \ + yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ + yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) @@ -862,12 +985,12 @@ union yyalloc # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ - __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) + __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ - YYSIZE_T yyi; \ + YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ @@ -879,28 +1002,31 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 416 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 10034 +#define YYLAST 10058 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 442 +#define YYNTOKENS 443 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 111 /* YYNRULES -- Number of rules. */ -#define YYNRULES 613 +#define YYNRULES 614 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 758 +#define YYNSTATES 760 -/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned - by yylex, with out-of-bounds checking. */ -#define YYUNDEFTOK 2 -#define YYMAXUTOK 696 +/* YYMAXUTOK -- Last valid token kind. */ +#define YYMAXUTOK 697 -#define YYTRANSLATE(YYX) \ - ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) + +/* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM + as returned by yylex, with out-of-bounds checking. */ +#define YYTRANSLATE(YYX) \ + (0 <= (YYX) && (YYX) <= YYMAXUTOK \ + ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ + : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM - as returned by yylex, without out-of-bounds checking. */ -static const yytype_uint16 yytranslate[] = + as returned by yylex. */ +static const yytype_int16 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -971,122 +1097,129 @@ static const yytype_uint16 yytranslate[] = 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441 + 435, 436, 437, 438, 439, 440, 441, 442 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ -static const yytype_uint16 yyrline[] = +static const yytype_int16 yyrline[] = { - 0, 369, 369, 375, 378, 383, 386, 389, 393, 397, - 400, 404, 408, 412, 416, 420, 424, 430, 438, 441, - 444, 447, 450, 455, 463, 470, 477, 483, 487, 494, - 497, 503, 510, 520, 528, 533, 561, 570, 576, 580, - 584, 604, 605, 606, 607, 613, 614, 619, 624, 633, - 634, 639, 647, 648, 654, 663, 664, 669, 674, 679, - 687, 688, 697, 709, 710, 719, 720, 729, 730, 739, - 740, 748, 749, 757, 758, 766, 767, 767, 785, 786, - 802, 806, 810, 814, 819, 823, 827, 831, 835, 839, - 843, 850, 853, 864, 871, 876, 881, 888, 892, 896, - 900, 905, 910, 919, 919, 930, 934, 941, 948, 951, - 958, 966, 986, 1009, 1024, 1049, 1060, 1070, 1080, 1090, - 1099, 1102, 1106, 1110, 1115, 1123, 1130, 1135, 1140, 1145, - 1154, 1164, 1191, 1200, 1207, 1215, 1222, 1229, 1237, 1247, - 1254, 1265, 1271, 1274, 1281, 1285, 1289, 1298, 1308, 1311, - 1322, 1325, 1328, 1332, 1336, 1341, 1345, 1352, 1356, 1361, - 1367, 1373, 1380, 1385, 1393, 1399, 1411, 1425, 1431, 1436, - 1444, 1452, 1460, 1468, 1476, 1484, 1492, 1500, 1507, 1514, - 1518, 1523, 1528, 1533, 1538, 1543, 1548, 1552, 1556, 1560, - 1564, 1570, 1581, 1588, 1591, 1600, 1605, 1615, 1620, 1628, - 1632, 1642, 1645, 1651, 1657, 1664, 1674, 1678, 1682, 1686, - 1691, 1695, 1700, 1705, 1710, 1715, 1720, 1725, 1730, 1735, - 1740, 1746, 1752, 1758, 1763, 1768, 1773, 1778, 1783, 1788, - 1793, 1798, 1803, 1808, 1813, 1819, 1826, 1831, 1836, 1841, - 1846, 1851, 1856, 1861, 1866, 1871, 1876, 1881, 1889, 1897, - 1905, 1911, 1917, 1923, 1929, 1935, 1941, 1947, 1953, 1959, - 1965, 1971, 1977, 1983, 1989, 1995, 2001, 2007, 2013, 2019, - 2025, 2031, 2037, 2043, 2049, 2055, 2061, 2067, 2073, 2079, - 2085, 2091, 2097, 2103, 2111, 2119, 2127, 2135, 2143, 2151, - 2159, 2167, 2175, 2183, 2191, 2199, 2205, 2211, 2217, 2223, - 2229, 2235, 2241, 2247, 2253, 2259, 2265, 2271, 2277, 2283, - 2289, 2295, 2301, 2307, 2313, 2319, 2325, 2331, 2337, 2343, - 2349, 2355, 2361, 2367, 2373, 2379, 2385, 2391, 2397, 2403, - 2409, 2415, 2419, 2423, 2427, 2432, 2438, 2443, 2448, 2453, - 2458, 2463, 2468, 2474, 2479, 2484, 2489, 2494, 2499, 2505, - 2511, 2517, 2523, 2529, 2535, 2541, 2547, 2553, 2559, 2565, - 2571, 2577, 2583, 2588, 2593, 2598, 2603, 2608, 2613, 2619, - 2624, 2629, 2634, 2639, 2644, 2649, 2654, 2660, 2665, 2670, - 2675, 2680, 2685, 2690, 2695, 2700, 2705, 2710, 2715, 2720, - 2725, 2730, 2736, 2741, 2746, 2752, 2758, 2763, 2768, 2773, - 2779, 2784, 2789, 2794, 2800, 2805, 2810, 2815, 2821, 2826, - 2831, 2836, 2842, 2848, 2854, 2860, 2865, 2871, 2877, 2883, - 2888, 2893, 2898, 2903, 2908, 2914, 2919, 2924, 2929, 2935, - 2940, 2945, 2950, 2956, 2961, 2966, 2971, 2977, 2982, 2987, - 2992, 2998, 3003, 3008, 3013, 3019, 3024, 3029, 3034, 3040, - 3045, 3050, 3055, 3061, 3066, 3071, 3076, 3082, 3087, 3092, - 3097, 3103, 3108, 3113, 3118, 3124, 3129, 3134, 3139, 3145, - 3150, 3155, 3160, 3166, 3171, 3176, 3181, 3187, 3192, 3197, - 3202, 3208, 3213, 3218, 3223, 3228, 3233, 3238, 3243, 3248, - 3253, 3258, 3263, 3268, 3273, 3278, 3283, 3288, 3293, 3298, - 3303, 3308, 3313, 3318, 3323, 3328, 3334, 3340, 3346, 3352, - 3359, 3366, 3372, 3378, 3384, 3390, 3396, 3402, 3409, 3414, - 3430, 3435, 3440, 3448, 3448, 3459, 3459, 3469, 3472, 3485, - 3507, 3534, 3538, 3544, 3549, 3560, 3564, 3570, 3581, 3584, - 3591, 3595, 3596, 3602, 3603, 3604, 3605, 3606, 3607, 3608, - 3610, 3616, 3625, 3626, 3630, 3626, 3642, 3643, 3647, 3647, - 3654, 3654, 3668, 3671, 3679, 3687, 3698, 3699, 3703, 3707, - 3714, 3721, 3725, 3733, 3737, 3750, 3754, 3761, 3761, 3781, - 3784, 3790, 3802, 3814, 3818, 3825, 3825, 3840, 3840, 3856, - 3856, 3877, 3880, 3886, 3889, 3895, 3899, 3906, 3911, 3916, - 3923, 3926, 3935, 3939, 3948, 3951, 3955, 3964, 3964, 4006, - 4012, 4015, 4020, 4023 + 0, 370, 370, 376, 379, 384, 387, 390, 394, 398, + 401, 405, 409, 413, 417, 421, 425, 431, 439, 442, + 445, 448, 451, 456, 464, 471, 478, 484, 488, 495, + 498, 504, 511, 521, 529, 534, 562, 571, 577, 581, + 585, 605, 606, 607, 608, 614, 615, 620, 625, 634, + 635, 640, 648, 649, 655, 664, 665, 670, 675, 680, + 688, 689, 698, 710, 711, 720, 721, 730, 731, 740, + 741, 749, 750, 758, 759, 767, 768, 768, 786, 787, + 803, 807, 811, 815, 820, 824, 828, 832, 836, 840, + 844, 851, 854, 865, 872, 877, 882, 889, 893, 897, + 901, 906, 911, 920, 920, 931, 935, 942, 949, 952, + 959, 967, 987, 1010, 1025, 1050, 1061, 1071, 1081, 1091, + 1100, 1103, 1107, 1111, 1116, 1124, 1131, 1136, 1141, 1146, + 1155, 1165, 1192, 1201, 1208, 1216, 1223, 1230, 1238, 1248, + 1255, 1266, 1272, 1275, 1282, 1286, 1290, 1299, 1309, 1312, + 1323, 1326, 1329, 1333, 1337, 1342, 1346, 1353, 1357, 1362, + 1368, 1374, 1381, 1386, 1394, 1400, 1412, 1426, 1432, 1437, + 1445, 1453, 1461, 1469, 1477, 1485, 1493, 1501, 1508, 1515, + 1519, 1524, 1529, 1534, 1539, 1544, 1549, 1553, 1557, 1561, + 1565, 1571, 1582, 1589, 1592, 1601, 1606, 1616, 1621, 1629, + 1633, 1643, 1646, 1652, 1658, 1665, 1675, 1679, 1683, 1687, + 1692, 1696, 1701, 1706, 1711, 1716, 1721, 1726, 1731, 1736, + 1741, 1747, 1753, 1759, 1764, 1769, 1774, 1779, 1784, 1789, + 1794, 1799, 1804, 1809, 1814, 1820, 1827, 1832, 1837, 1842, + 1847, 1852, 1857, 1862, 1867, 1872, 1877, 1882, 1890, 1898, + 1906, 1912, 1918, 1924, 1930, 1936, 1942, 1948, 1954, 1960, + 1966, 1972, 1978, 1984, 1990, 1996, 2002, 2008, 2014, 2020, + 2026, 2032, 2038, 2044, 2050, 2056, 2062, 2068, 2074, 2080, + 2086, 2092, 2098, 2104, 2112, 2120, 2128, 2136, 2144, 2152, + 2160, 2168, 2176, 2184, 2192, 2200, 2206, 2212, 2218, 2224, + 2230, 2236, 2242, 2248, 2254, 2260, 2266, 2272, 2278, 2284, + 2290, 2296, 2302, 2308, 2314, 2320, 2326, 2332, 2338, 2344, + 2350, 2356, 2362, 2368, 2374, 2380, 2386, 2392, 2398, 2404, + 2410, 2416, 2420, 2424, 2428, 2433, 2439, 2444, 2449, 2454, + 2459, 2464, 2469, 2475, 2480, 2485, 2490, 2495, 2500, 2506, + 2512, 2518, 2524, 2530, 2536, 2542, 2548, 2554, 2560, 2566, + 2572, 2578, 2584, 2589, 2594, 2599, 2604, 2609, 2614, 2620, + 2625, 2630, 2635, 2640, 2645, 2650, 2655, 2661, 2666, 2671, + 2676, 2681, 2686, 2691, 2696, 2701, 2706, 2711, 2716, 2721, + 2726, 2731, 2737, 2742, 2747, 2753, 2759, 2764, 2769, 2774, + 2780, 2785, 2790, 2795, 2801, 2806, 2811, 2816, 2822, 2827, + 2832, 2837, 2843, 2849, 2855, 2861, 2866, 2872, 2878, 2884, + 2889, 2894, 2899, 2904, 2909, 2915, 2920, 2925, 2930, 2936, + 2941, 2946, 2951, 2957, 2962, 2967, 2972, 2978, 2983, 2988, + 2993, 2999, 3004, 3009, 3014, 3020, 3025, 3030, 3035, 3041, + 3046, 3051, 3056, 3062, 3067, 3072, 3077, 3083, 3088, 3093, + 3098, 3104, 3109, 3114, 3119, 3125, 3130, 3135, 3140, 3146, + 3151, 3156, 3161, 3167, 3172, 3177, 3182, 3188, 3193, 3198, + 3203, 3209, 3214, 3219, 3224, 3229, 3234, 3239, 3244, 3249, + 3254, 3259, 3264, 3269, 3274, 3279, 3284, 3289, 3294, 3299, + 3304, 3309, 3314, 3319, 3324, 3329, 3335, 3341, 3347, 3353, + 3360, 3367, 3373, 3379, 3385, 3391, 3397, 3403, 3410, 3415, + 3431, 3436, 3441, 3449, 3449, 3460, 3460, 3470, 3473, 3486, + 3508, 3535, 3539, 3545, 3550, 3561, 3565, 3571, 3582, 3585, + 3592, 3596, 3597, 3603, 3604, 3605, 3606, 3607, 3608, 3609, + 3611, 3617, 3626, 3627, 3631, 3627, 3643, 3644, 3648, 3648, + 3655, 3655, 3669, 3672, 3680, 3688, 3699, 3700, 3704, 3708, + 3715, 3722, 3726, 3734, 3738, 3751, 3755, 3762, 3762, 3782, + 3785, 3791, 3803, 3815, 3819, 3826, 3826, 3841, 3841, 3857, + 3857, 3878, 3881, 3887, 3890, 3896, 3900, 3907, 3912, 3917, + 3924, 3927, 3931, 3940, 3944, 3953, 3956, 3960, 3969, 3969, + 4011, 4017, 4020, 4025, 4028 }; #endif -#if YYDEBUG || YYERROR_VERBOSE || 1 +/** Accessing symbol of state STATE. */ +#define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) + +#if 1 +/* The user-facing name of the symbol whose (internal) number is + YYSYMBOL. No bounds checking. */ +static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; + /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { - "$end", "error", "$undefined", "CONST", "BOOL", "INT", "UINT", "FLOAT", - "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", "UVEC2", "UVEC3", - "UVEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", "MAT4", "MAT2X2", - "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", "MAT4X2", "MAT4X3", - "MAT4X4", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", "SAMPLER2DSHADOW", - "SAMPLERCUBESHADOW", "SAMPLER2DARRAY", "SAMPLER2DARRAYSHADOW", - "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE", "ISAMPLER2DARRAY", - "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", "USAMPLER2DARRAY", "SAMPLER", - "SAMPLERSHADOW", "TEXTURE2D", "TEXTURE3D", "TEXTURECUBE", - "TEXTURE2DARRAY", "ITEXTURE2D", "ITEXTURE3D", "ITEXTURECUBE", - "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D", "UTEXTURECUBE", - "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T", "FLOAT32_T", - "DOUBLE", "FLOAT64_T", "INT64_T", "UINT64_T", "INT32_T", "UINT32_T", - "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "I64VEC2", "I64VEC3", - "I64VEC4", "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2", "I32VEC3", - "I32VEC4", "U32VEC2", "U32VEC3", "U32VEC4", "I16VEC2", "I16VEC3", - "I16VEC4", "U16VEC2", "U16VEC3", "U16VEC4", "I8VEC2", "I8VEC3", "I8VEC4", - "U8VEC2", "U8VEC3", "U8VEC4", "DVEC2", "DVEC3", "DVEC4", "DMAT2", - "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4", "F16MAT2", "F16MAT3", - "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4", "F32MAT2", "F32MAT3", - "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4", "F64MAT2", "F64MAT3", - "F64MAT4", "DMAT2X2", "DMAT2X3", "DMAT2X4", "DMAT3X2", "DMAT3X3", - "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", "F16MAT2X2", "F16MAT2X3", - "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", "F16MAT3X4", "F16MAT4X2", - "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", "F32MAT2X3", "F32MAT2X4", - "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", "F32MAT4X2", "F32MAT4X3", - "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", "F64MAT2X4", "F64MAT3X2", - "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", "F64MAT4X3", "F64MAT4X4", - "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", "RAYQUERYEXT", - "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", "SAMPLERCUBEARRAY", - "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", "USAMPLERCUBEARRAY", - "SAMPLER1D", "SAMPLER1DARRAY", "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", - "SAMPLER1DSHADOW", "SAMPLER2DRECT", "SAMPLER2DRECTSHADOW", - "ISAMPLER2DRECT", "USAMPLER2DRECT", "SAMPLERBUFFER", "ISAMPLERBUFFER", - "USAMPLERBUFFER", "SAMPLER2DMS", "ISAMPLER2DMS", "USAMPLER2DMS", - "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", "USAMPLER2DMSARRAY", - "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", "ISAMPLER1DARRAY", - "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", "F16SAMPLER2D", - "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE", + "\"end of file\"", "error", "\"invalid token\"", "CONST", "BOOL", "INT", + "UINT", "FLOAT", "BVEC2", "BVEC3", "BVEC4", "IVEC2", "IVEC3", "IVEC4", + "UVEC2", "UVEC3", "UVEC4", "VEC2", "VEC3", "VEC4", "MAT2", "MAT3", + "MAT4", "MAT2X2", "MAT2X3", "MAT2X4", "MAT3X2", "MAT3X3", "MAT3X4", + "MAT4X2", "MAT4X3", "MAT4X4", "SAMPLER2D", "SAMPLER3D", "SAMPLERCUBE", + "SAMPLER2DSHADOW", "SAMPLERCUBESHADOW", "SAMPLER2DARRAY", + "SAMPLER2DARRAYSHADOW", "ISAMPLER2D", "ISAMPLER3D", "ISAMPLERCUBE", + "ISAMPLER2DARRAY", "USAMPLER2D", "USAMPLER3D", "USAMPLERCUBE", + "USAMPLER2DARRAY", "SAMPLER", "SAMPLERSHADOW", "TEXTURE2D", "TEXTURE3D", + "TEXTURECUBE", "TEXTURE2DARRAY", "ITEXTURE2D", "ITEXTURE3D", + "ITEXTURECUBE", "ITEXTURE2DARRAY", "UTEXTURE2D", "UTEXTURE3D", + "UTEXTURECUBE", "UTEXTURE2DARRAY", "ATTRIBUTE", "VARYING", "FLOAT16_T", + "FLOAT32_T", "DOUBLE", "FLOAT64_T", "INT64_T", "UINT64_T", "INT32_T", + "UINT32_T", "INT16_T", "UINT16_T", "INT8_T", "UINT8_T", "I64VEC2", + "I64VEC3", "I64VEC4", "U64VEC2", "U64VEC3", "U64VEC4", "I32VEC2", + "I32VEC3", "I32VEC4", "U32VEC2", "U32VEC3", "U32VEC4", "I16VEC2", + "I16VEC3", "I16VEC4", "U16VEC2", "U16VEC3", "U16VEC4", "I8VEC2", + "I8VEC3", "I8VEC4", "U8VEC2", "U8VEC3", "U8VEC4", "DVEC2", "DVEC3", + "DVEC4", "DMAT2", "DMAT3", "DMAT4", "F16VEC2", "F16VEC3", "F16VEC4", + "F16MAT2", "F16MAT3", "F16MAT4", "F32VEC2", "F32VEC3", "F32VEC4", + "F32MAT2", "F32MAT3", "F32MAT4", "F64VEC2", "F64VEC3", "F64VEC4", + "F64MAT2", "F64MAT3", "F64MAT4", "DMAT2X2", "DMAT2X3", "DMAT2X4", + "DMAT3X2", "DMAT3X3", "DMAT3X4", "DMAT4X2", "DMAT4X3", "DMAT4X4", + "F16MAT2X2", "F16MAT2X3", "F16MAT2X4", "F16MAT3X2", "F16MAT3X3", + "F16MAT3X4", "F16MAT4X2", "F16MAT4X3", "F16MAT4X4", "F32MAT2X2", + "F32MAT2X3", "F32MAT2X4", "F32MAT3X2", "F32MAT3X3", "F32MAT3X4", + "F32MAT4X2", "F32MAT4X3", "F32MAT4X4", "F64MAT2X2", "F64MAT2X3", + "F64MAT2X4", "F64MAT3X2", "F64MAT3X3", "F64MAT3X4", "F64MAT4X2", + "F64MAT4X3", "F64MAT4X4", "ATOMIC_UINT", "ACCSTRUCTNV", "ACCSTRUCTEXT", + "RAYQUERYEXT", "FCOOPMATNV", "ICOOPMATNV", "UCOOPMATNV", + "SAMPLERCUBEARRAY", "SAMPLERCUBEARRAYSHADOW", "ISAMPLERCUBEARRAY", + "USAMPLERCUBEARRAY", "SAMPLER1D", "SAMPLER1DARRAY", + "SAMPLER1DARRAYSHADOW", "ISAMPLER1D", "SAMPLER1DSHADOW", "SAMPLER2DRECT", + "SAMPLER2DRECTSHADOW", "ISAMPLER2DRECT", "USAMPLER2DRECT", + "SAMPLERBUFFER", "ISAMPLERBUFFER", "USAMPLERBUFFER", "SAMPLER2DMS", + "ISAMPLER2DMS", "USAMPLER2DMS", "SAMPLER2DMSARRAY", "ISAMPLER2DMSARRAY", + "USAMPLER2DMSARRAY", "SAMPLEREXTERNALOES", "SAMPLEREXTERNAL2DY2YEXT", + "ISAMPLER1DARRAY", "USAMPLER1D", "USAMPLER1DARRAY", "F16SAMPLER1D", + "F16SAMPLER2D", "F16SAMPLER3D", "F16SAMPLER2DRECT", "F16SAMPLERCUBE", "F16SAMPLER1DARRAY", "F16SAMPLER2DARRAY", "F16SAMPLERCUBEARRAY", "F16SAMPLERBUFFER", "F16SAMPLER2DMS", "F16SAMPLER2DMSARRAY", "F16SAMPLER1DSHADOW", "F16SAMPLER2DSHADOW", "F16SAMPLER1DARRAYSHADOW", @@ -1132,20 +1265,20 @@ static const char *const yytname[] = "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT", "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", - "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "UNIFORM", "SHARED", - "BUFFER", "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT", - "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT", - "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV", - "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", - "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH", - "SAMPLE", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY", - "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", - "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", - "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD", - "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "PRECISE", - "$accept", "variable_identifier", "primary_expression", - "postfix_expression", "integer_expression", "function_call", - "function_call_or_method", "function_call_generic", + "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "TERMINATE_INVOCATION", + "UNIFORM", "SHARED", "BUFFER", "FLAT", "SMOOTH", "LAYOUT", + "DOUBLECONSTANT", "INT16CONSTANT", "UINT16CONSTANT", "FLOAT16CONSTANT", + "INT32CONSTANT", "UINT32CONSTANT", "INT64CONSTANT", "UINT64CONSTANT", + "SUBROUTINE", "DEMOTE", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", + "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", "PAYLOADINEXT", "HITATTREXT", + "CALLDATAEXT", "CALLDATAINEXT", "PATCH", "SAMPLE", "NONUNIFORM", + "COHERENT", "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", + "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", + "SUBGROUPCOHERENT", "NONPRIVATE", "SHADERCALLCOHERENT", "NOPERSPECTIVE", + "EXPLICITINTERPAMD", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", + "PERTASKNV", "PRECISE", "$accept", "variable_identifier", + "primary_expression", "postfix_expression", "integer_expression", + "function_call", "function_call_or_method", "function_call_generic", "function_call_header_no_parameters", "function_call_header_with_parameters", "function_call_header", "function_identifier", "unary_expression", "unary_operator", @@ -1183,12 +1316,18 @@ static const char *const yytname[] = "function_definition", "$@13", "attribute", "attribute_list", "single_attribute", YY_NULLPTR }; + +static const char * +yysymbol_name (yysymbol_kind_t yysymbol) +{ + return yytname[yysymbol]; +} #endif -# ifdef YYPRINT +#ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ -static const yytype_uint16 yytoknum[] = +static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, @@ -1234,106 +1373,106 @@ static const yytype_uint16 yytoknum[] = 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696 + 695, 696, 697 }; -# endif +#endif -#define YYPACT_NINF -479 +#define YYPACT_NINF (-728) -#define yypact_value_is_default(Yystate) \ - (!!((Yystate) == (-479))) +#define yypact_value_is_default(Yyn) \ + ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF -559 +#define YYTABLE_NINF (-559) -#define yytable_value_is_error(Yytable_value) \ +#define yytable_value_is_error(Yyn) \ 0 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { - 4273, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - 132, -479, -479, -479, -479, -479, -1, -479, -479, -479, - -479, -479, -479, -323, -320, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, 11, -271, 17, - 30, 6468, 20, -479, 28, -479, -479, -479, -479, 4712, - -479, -479, -479, -479, 50, -479, -479, 761, -479, -479, - 16, -479, 81, -29, 69, -479, -335, -479, 111, -479, - 6468, -479, -479, -479, 6468, 103, 106, -479, -336, -479, - 72, -479, -479, 9006, 142, -479, -479, -479, 136, 6468, - -479, 144, -479, 53, -479, -479, 76, 7326, -479, -334, - 1200, -479, -479, -479, -479, 142, -331, -479, 7746, -330, - -479, 119, -479, 65, 9006, 9006, -479, 9006, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, -479, 36, -479, -479, - -479, 171, 85, 9426, 173, -479, 9006, -479, -479, -345, - 174, -479, 6468, 139, 5151, -479, 6468, 9006, -479, -29, - -479, 141, -479, -479, 145, 99, 35, 26, 71, 156, - 159, 161, 196, 195, 23, 181, 8166, -479, 183, 182, - -479, -479, 186, 179, 180, -479, 191, 192, 187, 8586, - 193, 9006, 188, 189, 127, -479, -479, 96, -479, -271, - 200, 201, -479, -479, -479, -479, -479, 1639, -479, -479, - -479, -479, -479, -479, -479, -479, -479, -24, 174, 7746, - 13, 7746, -479, -479, 7746, 6468, -479, 166, -479, -479, - -479, 86, -479, -479, 9006, 168, -479, -479, 9006, 205, - -479, -479, -479, 9006, -479, 139, 142, 124, -479, -479, - -479, 5590, -479, -479, -479, -479, 9006, 9006, 9006, 9006, - 9006, 9006, 9006, 9006, 9006, 9006, 9006, 9006, 9006, 9006, - 9006, 9006, 9006, 9006, 9006, -479, -479, -479, 206, 172, - -479, 2078, -479, -479, -479, 2078, -479, 9006, -479, -479, - 130, 9006, 125, -479, -479, -479, -479, -479, -479, -479, - -479, -479, -479, -479, -479, -479, 9006, 9006, -479, -479, - -479, -479, -479, -479, -479, 7746, -479, 94, -479, 6029, - -479, -479, 207, 204, -479, -479, -479, 131, 174, 139, - -479, -479, -479, -479, -479, 145, 145, 99, 99, 35, - 35, 35, 35, 26, 26, 71, 156, 159, 161, 196, - 195, 9006, -479, 212, 60, -479, 2078, 3834, 169, 3395, - 87, -479, 89, -479, -479, -479, -479, -479, 6906, -479, - -479, -479, -479, 143, 9006, 211, 172, 210, 204, 184, - 6468, 217, 219, -479, -479, 3834, 218, -479, -479, -479, - 9006, 220, -479, -479, -479, 214, 2517, 9006, -479, 216, - 223, 185, 224, 2956, -479, 225, -479, -479, 7746, -479, - -479, -479, 97, 9006, 2517, 218, -479, -479, 2078, -479, - 222, 204, -479, -479, 2078, 229, -479, -479 + 4283, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + 109, -728, -728, -728, -728, -728, 1, -728, -728, -728, + -728, -728, -728, -327, -323, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, 11, -271, 12, + 19, 6483, 8, -728, 57, -728, -728, -728, -728, 4723, + -728, -728, -728, -728, 37, -728, -728, 763, -728, -728, + 16, -728, 107, -29, 92, -728, -336, -728, 136, -728, + 6483, -728, -728, -728, 6483, 110, 117, -728, 54, -728, + 68, -728, -728, 9027, 140, -728, -728, -728, 134, 6483, + -728, 146, -728, 13, -728, -728, 59, 7343, -728, -335, + 1203, -728, -728, -728, -728, 140, -331, -728, 7764, -330, + -728, 126, -728, 85, 9027, 9027, -728, 9027, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, 36, -728, -728, + -728, 170, 66, 9448, 173, -728, 9027, -728, -728, -343, + 172, -728, 6483, 141, 5163, -728, 6483, 9027, -728, -29, + -728, 145, -728, -728, 142, 93, 108, 26, 114, 154, + 157, 159, 196, 195, 23, 181, 8185, -728, 183, 182, + -728, -728, 186, 178, 180, -728, 191, 192, 184, 8606, + 193, 9027, 187, 188, 194, 129, -728, -728, 99, -728, + -271, 197, 202, -728, -728, -728, -728, -728, 1643, -728, + -728, -728, -728, -728, -728, -728, -728, -728, -22, 172, + 7764, 21, 7764, -728, -728, 7764, 6483, -728, 160, -728, + -728, -728, 76, -728, -728, 9027, 167, -728, -728, 9027, + 204, -728, -728, -728, 9027, -728, 141, 140, 106, -728, + -728, -728, 5603, -728, -728, -728, -728, 9027, 9027, 9027, + 9027, 9027, 9027, 9027, 9027, 9027, 9027, 9027, 9027, 9027, + 9027, 9027, 9027, 9027, 9027, 9027, -728, -728, -728, 207, + 171, -728, 2083, -728, -728, -728, 2083, -728, 9027, -728, + -728, 122, 9027, 143, -728, -728, -728, -728, -728, -728, + -728, -728, -728, -728, -728, -728, -728, -728, 9027, 9027, + -728, -728, -728, -728, -728, -728, -728, 7764, -728, 132, + -728, 6043, -728, -728, 208, 205, -728, -728, -728, 123, + 172, 141, -728, -728, -728, -728, -728, 142, 142, 93, + 93, 108, 108, 108, 108, 26, 26, 114, 154, 157, + 159, 196, 195, 9027, -728, 213, 61, -728, 2083, 3843, + 174, 3403, 78, -728, 81, -728, -728, -728, -728, -728, + 6922, -728, -728, -728, -728, 153, 9027, 211, 171, 210, + 205, 185, 6483, 218, 220, -728, -728, 3843, 219, -728, + -728, -728, 9027, 221, -728, -728, -728, 215, 2523, 9027, + -728, 217, 224, 189, 225, 2963, -728, 226, -728, -728, + 7764, -728, -728, -728, 83, 9027, 2523, 219, -728, -728, + 2083, -728, 222, 205, -728, -728, 2083, 223, -728, -728 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ -static const yytype_uint16 yydefact[] = +static const yytype_int16 yydefact[] = { 0, 157, 210, 208, 209, 207, 214, 215, 216, 217, 218, 219, 220, 221, 222, 211, 212, 213, 223, 224, @@ -1366,19 +1505,19 @@ static const yytype_uint16 yydefact[] = 421, 415, 420, 422, 423, 425, 426, 427, 429, 430, 431, 433, 434, 435, 437, 438, 411, 412, 413, 424, 414, 416, 417, 418, 428, 432, 436, 507, 508, 511, - 512, 513, 514, 509, 510, 606, 132, 520, 521, 522, + 512, 513, 514, 509, 510, 607, 132, 520, 521, 522, 0, 519, 161, 159, 160, 158, 0, 206, 162, 163, 164, 134, 133, 0, 190, 171, 173, 169, 175, 177, 172, 174, 170, 176, 178, 167, 168, 192, 179, 186, 187, 188, 189, 180, 181, 182, 183, 184, 185, 135, - 136, 137, 138, 139, 140, 147, 605, 0, 607, 0, + 136, 137, 138, 139, 140, 147, 606, 0, 608, 0, 109, 108, 0, 120, 125, 154, 153, 151, 155, 0, - 148, 150, 156, 130, 202, 152, 518, 0, 602, 604, + 148, 150, 156, 130, 202, 152, 518, 0, 603, 605, 0, 525, 0, 0, 0, 97, 0, 94, 0, 107, 0, 116, 110, 118, 0, 119, 0, 95, 126, 100, - 0, 149, 131, 0, 195, 201, 1, 603, 0, 0, + 0, 149, 131, 0, 195, 201, 1, 604, 0, 0, 523, 144, 146, 0, 142, 193, 0, 0, 98, 0, - 0, 608, 111, 115, 117, 113, 121, 112, 0, 127, + 0, 609, 111, 115, 117, 113, 121, 112, 0, 127, 103, 0, 101, 0, 0, 0, 9, 0, 43, 42, 44, 41, 5, 6, 7, 8, 2, 16, 14, 15, 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, @@ -1387,64 +1526,64 @@ static const yytype_uint16 yydefact[] = 191, 0, 197, 45, 49, 52, 55, 60, 63, 65, 67, 69, 71, 73, 75, 0, 0, 99, 0, 553, 562, 566, 0, 0, 0, 587, 0, 0, 0, 0, - 0, 0, 0, 0, 45, 78, 91, 0, 540, 0, - 156, 130, 543, 564, 542, 550, 541, 0, 544, 545, - 568, 546, 575, 547, 548, 583, 549, 0, 114, 0, - 122, 0, 535, 129, 0, 0, 105, 0, 102, 38, - 39, 0, 22, 23, 0, 0, 28, 27, 0, 206, - 31, 33, 40, 0, 203, 0, 533, 0, 531, 526, - 528, 0, 93, 145, 143, 194, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 45, 78, 91, 0, 540, + 0, 156, 130, 543, 564, 542, 550, 541, 0, 544, + 545, 568, 546, 575, 547, 548, 583, 549, 0, 114, + 0, 122, 0, 535, 129, 0, 0, 105, 0, 102, + 38, 39, 0, 22, 23, 0, 0, 28, 27, 0, + 206, 31, 33, 40, 0, 203, 0, 533, 0, 531, + 526, 528, 0, 93, 145, 143, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 76, 198, 199, 0, 0, - 552, 0, 585, 598, 597, 0, 589, 0, 601, 599, - 0, 0, 0, 582, 551, 81, 82, 84, 83, 86, - 87, 88, 89, 90, 85, 80, 0, 0, 567, 563, - 565, 569, 576, 584, 124, 0, 538, 0, 128, 0, - 106, 4, 0, 24, 21, 32, 205, 0, 534, 0, - 529, 524, 46, 47, 48, 51, 50, 53, 54, 58, - 59, 56, 57, 61, 62, 64, 66, 68, 70, 72, - 74, 0, 200, 612, 0, 610, 554, 0, 0, 0, - 0, 600, 0, 581, 79, 92, 123, 536, 0, 104, - 19, 530, 532, 0, 0, 0, 0, 0, 573, 0, - 0, 0, 0, 592, 591, 594, 560, 577, 537, 539, - 0, 0, 609, 611, 555, 0, 0, 0, 593, 0, - 0, 572, 0, 0, 570, 0, 77, 613, 0, 557, - 586, 556, 0, 595, 0, 560, 559, 561, 579, 574, - 0, 596, 590, 571, 580, 0, 588, 578 + 0, 0, 0, 0, 0, 0, 76, 198, 199, 0, + 0, 552, 0, 585, 598, 597, 0, 589, 0, 601, + 599, 0, 0, 0, 582, 602, 551, 81, 82, 84, + 83, 86, 87, 88, 89, 90, 85, 80, 0, 0, + 567, 563, 565, 569, 576, 584, 124, 0, 538, 0, + 128, 0, 106, 4, 0, 24, 21, 32, 205, 0, + 534, 0, 529, 524, 46, 47, 48, 51, 50, 53, + 54, 58, 59, 56, 57, 61, 62, 64, 66, 68, + 70, 72, 74, 0, 200, 613, 0, 611, 554, 0, + 0, 0, 0, 600, 0, 581, 79, 92, 123, 536, + 0, 104, 19, 530, 532, 0, 0, 0, 0, 0, + 573, 0, 0, 0, 0, 592, 591, 594, 560, 577, + 537, 539, 0, 0, 610, 612, 555, 0, 0, 0, + 593, 0, 0, 572, 0, 0, 570, 0, 77, 614, + 0, 557, 586, 556, 0, 595, 0, 560, 559, 561, + 579, 574, 0, 596, 590, 571, 580, 0, 588, 578 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -479, -479, -479, -479, -479, -479, -479, -479, -479, -479, - -479, -479, 9330, -479, -87, -84, -127, -93, -33, -31, - -27, -25, -28, -26, -479, -86, -479, -103, -479, -111, - -125, 2, -479, -479, -479, 4, -479, -479, -479, 176, - 194, 178, -479, -479, -337, -479, -479, -479, -479, 95, - -479, -37, -46, -479, 9, -479, 0, -63, -479, -479, - -479, -479, 263, -479, -479, -479, -478, -140, 10, -73, - -211, -479, -102, -198, -321, -479, -144, -479, -479, -155, - -154, -479, -479, 198, -274, -97, -479, 46, -479, -118, - -479, 51, -479, -479, -479, -479, 52, -479, -479, -479, - -479, -479, -479, -479, -479, 213, -479, -479, -479, -479, - -105 + -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, + -728, -728, 9352, -728, -87, -84, -154, -93, -30, -28, + -27, -26, -25, -31, -728, -86, -728, -99, -728, -111, + -126, 2, -728, -728, -728, 4, -728, -728, -728, 177, + 190, 179, -728, -728, -339, -728, -728, -728, -728, 95, + -728, -37, -46, -728, 9, -728, 0, -63, -728, -728, + -728, -728, 265, -728, -728, -728, -479, -149, 10, -74, + -212, -728, -103, -201, -727, -728, -145, -728, -728, -153, + -155, -728, -728, 198, -270, -97, -728, 47, -728, -120, + -728, 50, -728, -728, -728, -728, 51, -728, -728, -728, + -728, -728, -728, -728, -728, 216, -728, -728, -728, -728, + -108 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 465, 466, 467, 652, 468, 469, 470, 471, 472, - 473, 474, 524, 476, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 525, 681, 526, 636, 527, - 583, 528, 367, 555, 443, 529, 369, 370, 371, 401, + -1, 465, 466, 467, 654, 468, 469, 470, 471, 472, + 473, 474, 525, 476, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 526, 683, 527, 638, 528, + 584, 529, 367, 556, 443, 530, 369, 370, 371, 401, 402, 403, 372, 373, 374, 375, 376, 377, 423, 424, 378, 379, 380, 381, 477, 426, 478, 429, 414, 415, - 479, 384, 385, 386, 486, 419, 484, 485, 577, 578, - 553, 647, 532, 533, 534, 535, 536, 611, 707, 740, - 731, 732, 733, 741, 537, 538, 539, 540, 734, 711, - 541, 542, 735, 755, 543, 544, 545, 687, 615, 689, - 715, 729, 730, 546, 387, 388, 389, 398, 547, 684, - 685 + 479, 384, 385, 386, 486, 419, 484, 485, 578, 579, + 554, 649, 533, 534, 535, 536, 537, 612, 709, 742, + 733, 734, 735, 743, 538, 539, 540, 541, 736, 713, + 542, 543, 737, 757, 544, 545, 546, 689, 616, 691, + 717, 731, 732, 547, 387, 388, 389, 398, 548, 686, + 687 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1452,14 +1591,14 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 383, 573, 366, 437, 368, 427, 427, 506, 581, 382, - 427, 506, 438, 574, 428, 507, 393, 549, 554, 394, + 383, 741, 366, 574, 368, 427, 506, 582, 749, 382, + 427, 506, 393, 428, 507, 575, 394, 550, 555, 741, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 649, 397, 61, + 52, 53, 54, 55, 56, 57, 58, 651, 397, 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, @@ -1485,398 +1624,223 @@ static const yytype_int16 yytable[] = 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, 411, 404, 552, 561, 686, 644, 640, - 646, 505, 391, 648, 580, 439, 421, 593, 594, 604, - 709, 480, 591, 592, 506, 562, 563, 399, 411, 512, - 395, 645, 515, 404, 516, 517, 406, 422, 520, 407, - 570, 405, 548, 550, 392, -35, 400, 564, 709, 412, - 382, 565, 482, 595, 596, 605, 396, 383, 382, 366, - 418, 368, 321, 488, 597, 598, 382, 326, 327, 489, - 405, 582, 705, 408, 405, 739, 706, 413, 620, 382, - 622, 557, 747, 382, 558, 440, 490, 688, 441, 483, - 608, 442, 491, 739, 420, 567, 651, 716, 382, 717, - 531, 568, 637, 637, 696, 637, 411, 750, 697, 530, - 698, 580, 637, 637, 425, 638, 552, 482, 552, 482, - 589, 552, 590, 653, 430, 625, 626, 627, 628, 629, - 630, 631, 632, 633, 634, 655, 669, 670, 671, 672, - 659, 637, 693, 660, 754, 635, 637, 659, 435, 691, - 701, 436, 575, 427, 483, 481, 483, 719, 640, 637, - 720, 382, 487, 382, 556, 382, 317, 318, 319, 586, - 587, 588, 665, 666, 673, 674, 690, 667, 668, 580, - 692, 566, 571, 658, 576, 506, 585, 599, 482, 600, - 601, 602, 603, 606, 609, 612, 610, 749, 613, 614, - 616, 617, 621, 694, 695, 623, 618, 531, 624, -36, - -34, 650, 552, 654, 482, -29, 530, 683, 682, 700, - 637, 704, 712, 722, 724, 483, 640, 726, 727, 725, - 737, -558, 738, 744, 382, 743, 675, 509, 748, 676, - 703, 756, 745, 757, 677, 679, 708, 678, 680, 721, - 433, 483, 434, 390, 584, 657, 702, 713, 746, 752, - 382, 753, 714, 641, 432, 552, 431, 728, 642, 643, - 417, 723, 0, 0, 708, 0, 0, 0, 0, 0, - 0, 531, 482, 0, 0, 531, 742, 736, 582, 0, - 530, 0, 0, 0, 530, 0, 0, 0, 0, 0, - 0, 0, 751, 0, 0, 552, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 483, - 710, 0, 0, 0, 0, 0, 0, 0, 382, 0, - 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 710, 0, - 0, 0, 0, 0, 0, 0, 531, 531, 0, 531, - 0, 0, 0, 0, 0, 530, 530, 0, 530, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 412, 0, 0, 0, 0, 531, 0, 0, 0, 382, - 0, 0, 0, 0, 530, 0, 531, 0, 0, 0, - 0, 0, 0, 531, 0, 530, 0, 0, 0, 0, - 0, 0, 530, 0, 531, 0, 0, 0, 531, 0, - 0, 0, 0, 530, 531, 0, 0, 530, 0, 0, - 0, 416, 0, 530, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 312, 313, 314, 411, 404, 581, 562, 642, 646, 553, + 648, 505, 688, 650, 391, 439, 421, 594, 595, 605, + 711, 480, 399, 488, 406, 563, 564, 407, 411, 489, + 395, 512, 506, 404, 515, 400, 516, 517, 422, 647, + 520, 405, 549, 551, 571, -35, 392, 565, 711, 412, + 382, 566, 482, 596, 597, 606, 396, 383, 382, 366, + 418, 368, 321, 437, 413, 427, 382, 326, 327, 490, + 405, 583, 438, 707, 405, 491, 568, 708, 621, 382, + 623, 440, 569, 382, 441, 690, 653, 442, 718, 483, + 609, 719, 639, 752, 639, 592, 593, 639, 382, 639, + 532, 558, 408, 581, 559, 698, 411, 598, 599, 531, + 671, 672, 673, 674, 590, 639, 591, 482, 640, 482, + 420, 553, 661, 553, 655, 662, 553, 627, 628, 629, + 630, 631, 632, 633, 634, 635, 636, 425, 639, 661, + 657, 693, 703, 317, 318, 319, 699, 637, 700, 430, + 756, 427, 576, 481, 483, 435, 483, 642, 721, 639, + 695, 382, 436, 382, 487, 382, 587, 588, 589, 639, + 722, 557, 581, 667, 668, 675, 676, 692, 669, 670, + 567, 694, 572, 506, 660, 600, 577, 601, 602, 482, + 586, 603, 604, 607, 610, 613, 611, 614, 751, 615, + 617, 618, 622, 619, 624, 652, -36, 625, 532, 696, + 697, -34, 656, 626, -29, 482, 685, 531, 553, 684, + 702, 639, 706, 724, 726, 642, 483, 714, 728, 729, + 727, 739, -558, 740, 746, 382, 745, 759, 509, 750, + 677, 758, 705, 678, 682, 679, 747, 680, 710, 681, + 723, 433, 483, 434, 585, 390, 659, 704, 715, 748, + 432, 382, 755, 754, 716, 643, 431, 730, 644, 645, + 725, 553, 0, 417, 0, 0, 710, 0, 0, 0, + 0, 0, 532, 0, 482, 0, 532, 0, 744, 0, + 583, 531, 0, 738, 0, 531, 0, 0, 0, 0, + 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, + 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 483, 712, 0, 0, 0, 0, 0, 0, 0, + 382, 0, 0, 0, 0, 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 712, 0, 0, 0, 0, 0, 0, 0, 532, 532, + 0, 532, 0, 0, 0, 0, 0, 531, 531, 0, + 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 412, 0, 0, 0, 0, 532, 0, 0, + 0, 382, 0, 0, 0, 0, 531, 0, 532, 0, + 0, 0, 0, 0, 0, 532, 0, 531, 0, 0, + 0, 0, 0, 0, 531, 0, 532, 0, 0, 0, + 532, 0, 0, 0, 0, 531, 532, 0, 0, 531, + 0, 0, 0, 416, 0, 531, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 316, 317, 318, 319, 320, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 322, 323, - 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, - 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, - 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 444, - 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, - 0, 508, 0, 509, 510, 0, 0, 0, 0, 511, - 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 316, 317, 318, 319, 320, 0, 0, - 0, 452, 453, 454, 455, 456, 321, 322, 323, 324, - 325, 326, 327, 512, 513, 514, 515, 0, 516, 517, - 518, 519, 520, 521, 522, 328, 329, 330, 331, 332, - 333, 457, 458, 459, 460, 461, 462, 463, 464, 334, - 523, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, - 508, 0, 509, 639, 0, 0, 0, 0, 511, 448, - 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 316, 317, 318, 319, 320, 0, 0, 0, - 452, 453, 454, 455, 456, 321, 322, 323, 324, 325, - 326, 327, 512, 513, 514, 515, 0, 516, 517, 518, - 519, 520, 521, 522, 328, 329, 330, 331, 332, 333, - 457, 458, 459, 460, 461, 462, 463, 464, 334, 523, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 446, 447, 0, 508, - 0, 509, 0, 0, 0, 0, 0, 511, 448, 449, - 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 316, 317, 318, 319, 320, 0, 0, 0, 452, - 453, 454, 455, 456, 321, 322, 323, 324, 325, 326, - 327, 512, 513, 514, 515, 0, 516, 517, 518, 519, - 520, 521, 522, 328, 329, 330, 331, 332, 333, 457, - 458, 459, 460, 461, 462, 463, 464, 334, 523, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, + 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 446, 447, 0, 508, 0, - 430, 0, 0, 0, 0, 0, 511, 448, 449, 450, - 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 316, 317, 318, 319, 320, 0, 0, 0, 452, 453, - 454, 455, 456, 321, 322, 323, 324, 325, 326, 327, - 512, 513, 514, 515, 0, 516, 517, 518, 519, 520, - 521, 522, 328, 329, 330, 331, 332, 333, 457, 458, - 459, 460, 461, 462, 463, 464, 334, 523, 335, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 508, 0, 0, - 0, 0, 0, 0, 0, 511, 448, 449, 450, 451, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, - 317, 318, 319, 320, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 322, 323, 324, 325, 326, 327, 512, - 513, 514, 515, 0, 516, 517, 518, 519, 520, 521, - 522, 328, 329, 330, 331, 332, 333, 457, 458, 459, - 460, 461, 462, 463, 464, 334, 523, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 446, 447, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 511, 448, 449, 450, 451, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, - 318, 319, 320, 0, 0, 0, 452, 453, 454, 455, - 456, 321, 322, 323, 324, 325, 326, 327, 0, 0, + 0, 446, 447, 0, 508, 0, 509, 510, 0, 0, + 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, + 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, + 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, + 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, + 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, - 461, 462, 463, 464, 334, 0, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, + 0, 446, 447, 0, 508, 0, 509, 641, 0, 0, + 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, + 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, + 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, + 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, + 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 447, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, - 319, 0, 0, 0, 0, 452, 453, 454, 455, 456, - 321, 322, 323, 324, 325, 326, 327, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 0, 446, 447, 0, 508, 0, 509, 0, 0, 0, + 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, + 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, + 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 0, 335, 336, 337, 338, 339, + 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, @@ -1911,486 +1875,579 @@ static const yytype_int16 yytable[] = 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 446, 447, 0, 508, 0, 430, 0, 0, 0, + 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, + 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, + 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, + 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, + 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 446, 447, 0, 508, 0, 0, 0, 0, 0, + 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, + 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, + 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, + 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, + 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, + 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, - 330, 331, 332, 333, 0, 0, 0, 0, 0, 0, - 0, 0, 334, 0, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 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, 328, + 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, + 462, 463, 464, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 409, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 316, 317, 318, 319, 0, - 0, 0, 0, 0, 0, 0, 0, 410, 321, 322, - 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, - 331, 332, 333, 0, 0, 0, 0, 0, 0, 0, - 0, 334, 0, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, + 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 0, 0, 0, 0, 452, 453, 454, 455, 456, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, + 462, 463, 464, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 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, 579, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 316, 317, 318, 319, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 322, 323, - 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, - 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, - 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 0, + 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 661, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 316, 317, 318, 319, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 322, 323, 324, - 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, - 333, 0, 0, 0, 0, 0, 0, 0, 0, 334, - 0, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 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, 699, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 316, 317, 318, 319, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 322, 323, 324, 325, - 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 328, 329, 330, 331, 332, 333, - 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, 0, 0, 0, 0, + 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 0, 0, 0, 0, 0, 0, 0, 0, 410, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 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, 580, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 316, 317, 318, 319, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 322, 323, 324, 325, 326, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 329, 330, 331, 332, 333, 0, - 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 0, 0, 551, - 718, 0, 0, 0, 0, 0, 448, 449, 450, 451, + 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, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 0, 492, 0, - 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, + 0, 0, 0, 0, 0, 0, 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 0, 0, 551, - 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, 0, 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, 0, + 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 0, 607, 0, - 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, + 446, 447, 0, 0, 0, 552, 720, 0, 0, 0, + 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, + 0, 0, 0, 452, 453, 454, 455, 456, 321, 0, + 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, + 0, 0, 0, 0, 457, 458, 459, 460, 461, 462, + 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 347, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 0, 0, 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 619, 448, 449, 450, 451, + 0, 446, 447, 0, 0, 492, 0, 0, 0, 0, + 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, + 0, 0, 0, 0, 452, 453, 454, 455, 456, 321, + 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, + 0, 0, 0, 0, 0, 457, 458, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 347, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, + 0, 0, 446, 447, 0, 0, 0, 552, 0, 0, + 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, + 0, 0, 0, 0, 0, 452, 453, 454, 455, 456, + 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 457, 458, 459, 460, + 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 347, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 446, 447, 0, 0, 608, 0, 0, + 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 452, 453, 454, 455, + 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, @@ -2426,167 +2483,66 @@ static const yytype_int16 yytable[] = 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, 475, 0, 444, 445, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, + 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, - 0, 0, 0, 0, 559, 560, 448, 449, 450, 451, + 0, 0, 0, 0, 0, 620, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 572, 326, 569, 0, - 0, 0, 0, 0, 0, 0, 0, 493, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 493, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 457, 458, + 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, + 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 446, 447, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 448, 449, 450, + 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, + 454, 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 656, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 662, 663, 664, 493, - 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - 493, 493, 493, 493, 493, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, + 458, 459, 460, 461, 462, 463, 464, 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, 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, 0, 493 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 346, 0, 339, 0, 341, 341, 341, 486, 0, - 341, 341, 348, 358, 349, 349, 339, 348, 348, 339, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 555, 349, 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, 379, 371, 438, 447, 611, 549, 537, - 551, 427, 343, 554, 484, 408, 375, 321, 322, 326, - 687, 414, 317, 318, 341, 319, 320, 340, 404, 383, - 349, 348, 386, 400, 388, 389, 346, 396, 392, 349, - 473, 371, 435, 436, 375, 339, 346, 341, 715, 379, - 371, 345, 419, 357, 358, 362, 375, 387, 379, 387, - 390, 387, 376, 340, 323, 324, 387, 381, 382, 346, - 400, 487, 342, 375, 404, 726, 346, 357, 519, 400, - 521, 346, 733, 404, 349, 343, 340, 615, 346, 419, - 506, 349, 346, 744, 343, 340, 340, 340, 419, 340, - 430, 346, 346, 346, 645, 346, 482, 340, 344, 430, - 346, 581, 346, 346, 375, 349, 549, 484, 551, 486, - 351, 554, 353, 564, 343, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 568, 593, 594, 595, 596, - 346, 346, 347, 349, 748, 348, 346, 346, 375, 349, - 349, 375, 482, 341, 484, 349, 486, 698, 686, 346, - 347, 482, 348, 484, 375, 486, 364, 365, 366, 354, - 355, 356, 589, 590, 597, 598, 617, 591, 592, 649, - 621, 340, 339, 576, 375, 341, 375, 361, 555, 360, - 359, 325, 327, 342, 341, 339, 344, 738, 349, 349, - 339, 339, 339, 636, 637, 347, 349, 537, 349, 339, - 339, 375, 645, 375, 581, 340, 537, 375, 342, 342, - 346, 339, 383, 342, 344, 555, 754, 340, 339, 375, - 340, 343, 348, 340, 555, 349, 599, 343, 343, 600, - 681, 349, 387, 344, 601, 603, 687, 602, 604, 704, - 404, 581, 404, 320, 489, 575, 659, 689, 732, 744, - 581, 745, 689, 547, 400, 698, 398, 715, 547, 547, - 387, 706, -1, -1, 715, -1, -1, -1, -1, -1, - -1, 611, 649, -1, -1, 615, 727, 720, 704, -1, - 611, -1, -1, -1, 615, -1, -1, -1, -1, -1, - -1, -1, 743, -1, -1, 738, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 649, - 687, -1, -1, -1, -1, -1, -1, -1, 649, -1, - -1, -1, -1, -1, 710, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 715, -1, - -1, -1, -1, -1, -1, -1, 686, 687, -1, 689, - -1, -1, -1, -1, -1, 686, 687, -1, 689, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 710, -1, -1, -1, -1, 715, -1, -1, -1, 710, - -1, -1, -1, -1, 715, -1, 726, -1, -1, -1, - -1, -1, -1, 733, -1, 726, -1, -1, -1, -1, - -1, -1, 733, -1, 744, -1, -1, -1, 748, -1, - -1, -1, -1, 744, 754, -1, -1, 748, -1, -1, - -1, 0, -1, 754, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, 364, 365, 366, 367, -1, - -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, - 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 395, 396, 397, 398, - 399, 400, -1, -1, -1, -1, -1, -1, -1, -1, - 409, -1, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 3, 4, 5, 6, 7, 8, 9, + 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, + 0, 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, @@ -2611,157 +2567,48 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, - 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, - -1, 341, -1, 343, 344, -1, -1, -1, -1, 349, - 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 363, 364, 365, 366, 367, -1, -1, - -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, - 341, -1, 343, 344, -1, -1, -1, -1, 349, 350, - 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 338, 339, -1, 341, - -1, 343, -1, -1, -1, -1, -1, 349, 350, 351, - 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 363, 364, 365, 366, 367, -1, -1, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 338, 339, -1, 341, -1, - 343, -1, -1, -1, -1, -1, 349, 350, 351, 352, - 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 363, 364, 365, 366, 367, -1, -1, -1, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 3, + 310, 311, 312, 313, 314, 475, 0, 444, 445, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, + 0, 0, 0, 0, 0, 0, 446, 447, 0, 0, + 0, 0, 0, 0, 0, 0, 560, 561, 448, 449, + 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, + 453, 454, 455, 456, 321, 0, 0, 0, 573, 326, + 570, 0, 0, 0, 0, 0, 0, 0, 0, 493, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 457, 458, 459, 460, 461, 462, 463, 464, 493, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 347, 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, 0, 0, 0, 0, 0, 658, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, + 665, 666, 493, 493, 493, 493, 493, 493, 493, 493, + 493, 493, 493, 493, 493, 493, 493, 493, 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, 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, 0, 0, 0, 0, 493 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 728, 0, 346, 0, 341, 341, 486, 735, 0, + 341, 341, 339, 349, 349, 358, 339, 348, 348, 746, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 54, 55, 56, 57, 58, 59, 60, 556, 349, 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, @@ -2787,107 +2634,402 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, -1, + 314, 315, 316, 379, 371, 484, 447, 538, 550, 438, + 552, 427, 612, 555, 343, 408, 375, 321, 322, 326, + 689, 414, 340, 340, 346, 319, 320, 349, 404, 346, + 349, 383, 341, 400, 386, 346, 388, 389, 397, 348, + 392, 371, 435, 436, 473, 339, 375, 341, 717, 379, + 371, 345, 419, 357, 358, 362, 375, 387, 379, 387, + 390, 387, 376, 339, 357, 341, 387, 381, 382, 340, + 400, 487, 348, 342, 404, 346, 340, 346, 519, 400, + 521, 343, 346, 404, 346, 616, 340, 349, 340, 419, + 506, 340, 346, 340, 346, 317, 318, 346, 419, 346, + 430, 346, 375, 582, 349, 647, 482, 323, 324, 430, + 594, 595, 596, 597, 351, 346, 353, 484, 349, 486, + 343, 550, 346, 552, 565, 349, 555, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 375, 346, 346, + 569, 349, 349, 364, 365, 366, 344, 348, 346, 343, + 750, 341, 482, 349, 484, 375, 486, 688, 700, 346, + 347, 482, 375, 484, 348, 486, 354, 355, 356, 346, + 347, 375, 651, 590, 591, 598, 599, 618, 592, 593, + 340, 622, 339, 341, 577, 361, 375, 360, 359, 556, + 375, 325, 327, 342, 341, 339, 344, 349, 740, 349, + 339, 339, 339, 349, 347, 375, 339, 349, 538, 638, + 639, 339, 375, 349, 340, 582, 375, 538, 647, 342, + 342, 346, 339, 342, 344, 756, 556, 383, 340, 339, + 375, 340, 343, 348, 340, 556, 349, 344, 343, 343, + 600, 349, 683, 601, 605, 602, 387, 603, 689, 604, + 706, 404, 582, 404, 489, 320, 576, 661, 691, 734, + 400, 582, 747, 746, 691, 548, 398, 717, 548, 548, + 708, 700, -1, 387, -1, -1, 717, -1, -1, -1, + -1, -1, 612, -1, 651, -1, 616, -1, 729, -1, + 706, 612, -1, 722, -1, 616, -1, -1, -1, -1, + -1, -1, -1, -1, 745, -1, -1, -1, -1, -1, + -1, 740, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 651, 689, -1, -1, -1, -1, -1, -1, -1, + 651, -1, -1, -1, -1, -1, 712, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, 341, -1, -1, - -1, -1, -1, -1, -1, 349, 350, 351, 352, 353, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, - 364, 365, 366, 367, -1, -1, -1, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, + 717, -1, -1, -1, -1, -1, -1, -1, 688, 689, + -1, 691, -1, -1, -1, -1, -1, 688, 689, -1, + 691, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 712, -1, -1, -1, -1, 717, -1, -1, + -1, 712, -1, -1, -1, -1, 717, -1, 728, -1, + -1, -1, -1, -1, -1, 735, -1, 728, -1, -1, + -1, -1, -1, -1, 735, -1, 746, -1, -1, -1, + 750, -1, -1, -1, -1, 746, 756, -1, -1, 750, + -1, -1, -1, 0, -1, 756, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 338, 339, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 349, 350, 351, 352, 353, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, - 365, 366, 367, -1, -1, -1, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, -1, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 338, 339, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, - 366, -1, -1, -1, -1, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, -1, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 3, 4, 5, 6, + -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, 341, -1, 343, 344, -1, -1, + -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, 341, -1, 343, 344, -1, -1, + -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, 341, -1, 343, -1, -1, -1, + -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, 341, -1, 343, -1, -1, -1, + -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, 341, -1, -1, -1, -1, -1, + -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, -1, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, -1, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -2926,399 +3068,400 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 395, 396, - 397, 398, 399, 400, -1, -1, -1, -1, -1, -1, - -1, -1, 409, -1, 411, 412, 413, 414, 415, 416, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 349, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 363, 364, 365, 366, -1, - -1, -1, -1, -1, -1, -1, -1, 375, 376, 377, - 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 395, 396, 397, - 398, 399, 400, -1, -1, -1, -1, -1, -1, -1, - -1, 409, -1, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, -1, -1, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, - 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 395, 396, 397, 398, - 399, 400, -1, -1, -1, -1, -1, -1, -1, -1, - 409, -1, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, -1, -1, -1, + -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + -1, -1, -1, -1, -1, -1, -1, -1, 375, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 363, 364, 365, 366, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 376, 377, 378, 379, - 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 395, 396, 397, 398, 399, - 400, -1, -1, -1, -1, -1, -1, -1, -1, 409, - -1, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, - 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 395, 396, 397, 398, 399, 400, - -1, -1, -1, -1, -1, -1, -1, -1, 409, -1, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 363, 364, 365, 366, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, - 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 395, 396, 397, 398, 399, 400, -1, - -1, -1, -1, -1, -1, -1, -1, 409, -1, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, -1, -1, 343, - 344, -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, - 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, - 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, + 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, + -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, -1, -1, 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, -1, + -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, -1, 342, -1, - -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + 338, 339, -1, -1, -1, 343, 344, -1, -1, -1, + -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, - 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, + -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, + -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, - 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, 402, 403, 404, 405, 406, 407, + 408, 409, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 424, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, -1, -1, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, -1, -1, 343, - -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + -1, 338, 339, -1, -1, 342, -1, -1, -1, -1, + -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, - 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, + -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, + -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, - 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, 402, 403, 404, 405, 406, + 407, 408, 409, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 424, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, -1, 342, -1, - -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + -1, -1, 338, 339, -1, -1, -1, 343, -1, -1, + -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, - 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, + -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, + 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 402, 403, 404, 405, + 406, 407, 408, 409, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 424, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, - 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, + -1, -1, -1, 338, 339, -1, -1, 342, -1, -1, + -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, + 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 402, 403, 404, + 405, 406, 407, 408, 409, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 424, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -3358,103 +3501,102 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, - 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 402, 403, + 404, 405, 406, 407, 408, 409, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + 424, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, + 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, - 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, + -1, -1, -1, -1, -1, 338, 339, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 350, 351, 352, + 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, + 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, - 404, 405, 406, 407, 408, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, 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, 413, -1, 319, 320, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 427, -1, -1, - -1, -1, -1, -1, 338, 339, -1, -1, -1, -1, - -1, -1, -1, -1, 444, 445, 350, 351, 352, 353, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 402, + 403, 404, 405, 406, 407, 408, 409, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, - 374, 375, 376, -1, -1, -1, 476, 381, 382, -1, - -1, -1, -1, -1, -1, -1, -1, 487, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 401, 402, 403, - 404, 405, 406, 407, 408, -1, 506, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 423, + -1, 424, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, + -1, 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, 413, -1, 319, 320, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 427, + -1, -1, -1, -1, -1, -1, 338, 339, -1, -1, + -1, -1, -1, -1, -1, -1, 444, 445, 350, 351, + 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, + 372, 373, 374, 375, 376, -1, -1, -1, 476, 381, + 382, -1, -1, -1, -1, -1, -1, -1, -1, 487, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 402, 403, 404, 405, 406, 407, 408, 409, 506, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 424, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 573, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 586, 587, 588, 589, - 590, 591, 592, 593, 594, 595, 596, 597, 598, 599, - 600, 601, 602, 603, 604, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 574, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 587, + 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3463,12 +3605,13 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 704 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 706 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ -static const yytype_uint16 yystos[] = +static const yytype_int16 yystos[] = { 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, @@ -3502,121 +3645,121 @@ static const yytype_uint16 yystos[] = 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, 349, 363, 364, 365, 366, - 367, 376, 377, 378, 379, 380, 381, 382, 395, 396, - 397, 398, 399, 400, 409, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 473, 474, 477, 478, - 479, 480, 484, 485, 486, 487, 488, 489, 492, 493, - 494, 495, 496, 498, 503, 504, 505, 546, 547, 548, - 504, 343, 375, 339, 339, 349, 375, 349, 549, 340, - 346, 481, 482, 483, 493, 498, 346, 349, 375, 349, - 375, 494, 498, 357, 500, 501, 0, 547, 498, 507, - 343, 375, 396, 490, 491, 375, 497, 341, 349, 499, - 343, 525, 482, 481, 483, 375, 375, 339, 348, 499, - 343, 346, 349, 476, 319, 320, 338, 339, 350, 351, - 352, 353, 371, 372, 373, 374, 375, 401, 402, 403, - 404, 405, 406, 407, 408, 443, 444, 445, 447, 448, - 449, 450, 451, 452, 453, 454, 455, 496, 498, 502, - 499, 349, 493, 498, 508, 509, 506, 348, 340, 346, - 340, 346, 342, 454, 456, 457, 458, 459, 460, 461, - 462, 463, 464, 465, 466, 467, 341, 349, 341, 343, + 367, 376, 377, 378, 379, 380, 381, 382, 396, 397, + 398, 399, 400, 401, 410, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 474, 475, 478, 479, + 480, 481, 485, 486, 487, 488, 489, 490, 493, 494, + 495, 496, 497, 499, 504, 505, 506, 547, 548, 549, + 505, 343, 375, 339, 339, 349, 375, 349, 550, 340, + 346, 482, 483, 484, 494, 499, 346, 349, 375, 349, + 375, 495, 499, 357, 501, 502, 0, 548, 499, 508, + 343, 375, 397, 491, 492, 375, 498, 341, 349, 500, + 343, 526, 483, 482, 484, 375, 375, 339, 348, 500, + 343, 346, 349, 477, 319, 320, 338, 339, 350, 351, + 352, 353, 371, 372, 373, 374, 375, 402, 403, 404, + 405, 406, 407, 408, 409, 444, 445, 446, 448, 449, + 450, 451, 452, 453, 454, 455, 456, 497, 499, 503, + 500, 349, 494, 499, 509, 510, 507, 348, 340, 346, + 340, 346, 342, 455, 457, 458, 459, 460, 461, 462, + 463, 464, 465, 466, 467, 468, 341, 349, 341, 343, 344, 349, 383, 384, 385, 386, 388, 389, 390, 391, - 392, 393, 394, 410, 454, 467, 469, 471, 473, 477, - 496, 498, 514, 515, 516, 517, 518, 526, 527, 528, - 529, 532, 533, 536, 537, 538, 545, 550, 499, 348, - 499, 343, 469, 512, 348, 475, 375, 346, 349, 454, - 454, 471, 319, 320, 341, 345, 340, 340, 346, 382, - 469, 339, 454, 346, 358, 498, 375, 510, 511, 344, - 509, 508, 467, 472, 491, 375, 354, 355, 356, 351, - 353, 317, 318, 321, 322, 357, 358, 323, 324, 361, - 360, 359, 325, 327, 326, 362, 342, 342, 467, 341, - 344, 519, 339, 349, 349, 540, 339, 339, 349, 349, - 471, 339, 471, 347, 349, 328, 329, 330, 331, 332, - 333, 334, 335, 336, 337, 348, 470, 346, 349, 344, - 515, 529, 533, 538, 512, 348, 512, 513, 512, 508, - 375, 340, 446, 471, 375, 469, 454, 510, 499, 346, - 349, 344, 454, 454, 454, 456, 456, 457, 457, 458, - 458, 458, 458, 459, 459, 460, 461, 462, 463, 464, - 465, 468, 342, 375, 551, 552, 526, 539, 515, 541, - 471, 349, 471, 347, 469, 469, 512, 344, 346, 344, - 342, 349, 511, 471, 339, 342, 346, 520, 471, 486, - 493, 531, 383, 514, 527, 542, 340, 340, 344, 512, - 347, 472, 342, 552, 344, 375, 340, 339, 531, 543, - 544, 522, 523, 524, 530, 534, 469, 340, 348, 516, - 521, 525, 471, 349, 340, 387, 518, 516, 343, 512, - 340, 471, 521, 522, 526, 535, 349, 344 + 392, 393, 394, 395, 411, 455, 468, 470, 472, 474, + 478, 497, 499, 515, 516, 517, 518, 519, 527, 528, + 529, 530, 533, 534, 537, 538, 539, 546, 551, 500, + 348, 500, 343, 470, 513, 348, 476, 375, 346, 349, + 455, 455, 472, 319, 320, 341, 345, 340, 340, 346, + 382, 470, 339, 455, 346, 358, 499, 375, 511, 512, + 344, 510, 509, 468, 473, 492, 375, 354, 355, 356, + 351, 353, 317, 318, 321, 322, 357, 358, 323, 324, + 361, 360, 359, 325, 327, 326, 362, 342, 342, 468, + 341, 344, 520, 339, 349, 349, 541, 339, 339, 349, + 349, 472, 339, 472, 347, 349, 349, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 348, 471, 346, + 349, 344, 516, 530, 534, 539, 513, 348, 513, 514, + 513, 509, 375, 340, 447, 472, 375, 470, 455, 511, + 500, 346, 349, 344, 455, 455, 455, 457, 457, 458, + 458, 459, 459, 459, 459, 460, 460, 461, 462, 463, + 464, 465, 466, 469, 342, 375, 552, 553, 527, 540, + 516, 542, 472, 349, 472, 347, 470, 470, 513, 344, + 346, 344, 342, 349, 512, 472, 339, 342, 346, 521, + 472, 487, 494, 532, 383, 515, 528, 543, 340, 340, + 344, 513, 347, 473, 342, 553, 344, 375, 340, 339, + 532, 544, 545, 523, 524, 525, 531, 535, 470, 340, + 348, 517, 522, 526, 472, 349, 340, 387, 519, 517, + 343, 513, 340, 472, 522, 523, 527, 536, 349, 344 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ -static const yytype_uint16 yyr1[] = +static const yytype_int16 yyr1[] = { - 0, 442, 443, 444, 444, 444, 444, 444, 444, 444, - 444, 444, 444, 444, 444, 444, 444, 444, 445, 445, - 445, 445, 445, 445, 446, 447, 448, 449, 449, 450, - 450, 451, 451, 452, 453, 453, 453, 454, 454, 454, - 454, 455, 455, 455, 455, 456, 456, 456, 456, 457, - 457, 457, 458, 458, 458, 459, 459, 459, 459, 459, - 460, 460, 460, 461, 461, 462, 462, 463, 463, 464, - 464, 465, 465, 466, 466, 467, 468, 467, 469, 469, - 470, 470, 470, 470, 470, 470, 470, 470, 470, 470, - 470, 471, 471, 472, 473, 473, 473, 473, 473, 473, - 473, 473, 473, 475, 474, 476, 476, 477, 478, 478, - 479, 479, 480, 481, 481, 482, 482, 482, 482, 483, - 484, 484, 484, 484, 484, 485, 485, 485, 485, 485, - 486, 486, 487, 488, 488, 488, 488, 488, 488, 488, - 488, 489, 490, 490, 491, 491, 491, 492, 493, 493, - 494, 494, 494, 494, 494, 494, 494, 495, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, - 495, 495, 495, 495, 495, 495, 495, 495, 495, 495, - 495, 495, 496, 497, 497, 498, 498, 499, 499, 499, - 499, 500, 500, 501, 502, 502, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 503, 503, 503, 503, 503, 503, 503, 503, 503, 503, - 504, 504, 504, 506, 505, 507, 505, 508, 508, 509, - 509, 510, 510, 511, 511, 512, 512, 512, 513, 513, - 514, 515, 515, 516, 516, 516, 516, 516, 516, 516, - 516, 517, 518, 519, 520, 518, 521, 521, 523, 522, - 524, 522, 525, 525, 526, 526, 527, 527, 528, 528, - 529, 530, 530, 531, 531, 532, 532, 534, 533, 535, - 535, 536, 536, 537, 537, 539, 538, 540, 538, 541, - 538, 542, 542, 543, 543, 544, 544, 545, 545, 545, - 545, 545, 546, 546, 547, 547, 547, 549, 548, 550, - 551, 551, 552, 552 + 0, 443, 444, 445, 445, 445, 445, 445, 445, 445, + 445, 445, 445, 445, 445, 445, 445, 445, 446, 446, + 446, 446, 446, 446, 447, 448, 449, 450, 450, 451, + 451, 452, 452, 453, 454, 454, 454, 455, 455, 455, + 455, 456, 456, 456, 456, 457, 457, 457, 457, 458, + 458, 458, 459, 459, 459, 460, 460, 460, 460, 460, + 461, 461, 461, 462, 462, 463, 463, 464, 464, 465, + 465, 466, 466, 467, 467, 468, 469, 468, 470, 470, + 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, + 471, 472, 472, 473, 474, 474, 474, 474, 474, 474, + 474, 474, 474, 476, 475, 477, 477, 478, 479, 479, + 480, 480, 481, 482, 482, 483, 483, 483, 483, 484, + 485, 485, 485, 485, 485, 486, 486, 486, 486, 486, + 487, 487, 488, 489, 489, 489, 489, 489, 489, 489, + 489, 490, 491, 491, 492, 492, 492, 493, 494, 494, + 495, 495, 495, 495, 495, 495, 495, 496, 496, 496, + 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, + 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, + 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, + 496, 496, 497, 498, 498, 499, 499, 500, 500, 500, + 500, 501, 501, 502, 503, 503, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, + 505, 505, 505, 507, 506, 508, 506, 509, 509, 510, + 510, 511, 511, 512, 512, 513, 513, 513, 514, 514, + 515, 516, 516, 517, 517, 517, 517, 517, 517, 517, + 517, 518, 519, 520, 521, 519, 522, 522, 524, 523, + 525, 523, 526, 526, 527, 527, 528, 528, 529, 529, + 530, 531, 531, 532, 532, 533, 533, 535, 534, 536, + 536, 537, 537, 538, 538, 540, 539, 541, 539, 542, + 539, 543, 543, 544, 544, 545, 545, 546, 546, 546, + 546, 546, 546, 547, 547, 548, 548, 548, 550, 549, + 551, 552, 552, 553, 553 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ -static const yytype_uint8 yyr2[] = +static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4, @@ -3678,15 +3821,15 @@ static const yytype_uint8 yyr2[] = 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 + 3, 2, 2, 1, 2, 1, 1, 1, 0, 3, + 5, 1, 3, 1, 4 }; +enum { YYENOMEM = -2 }; + #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) -#define YYEMPTY (-2) -#define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab @@ -3695,27 +3838,26 @@ static const yytype_uint8 yyr2[] = #define YYRECOVERING() (!!yyerrstatus) -#define YYBACKUP(Token, Value) \ -do \ - if (yychar == YYEMPTY) \ - { \ - yychar = (Token); \ - yylval = (Value); \ - YYPOPSTACK (yylen); \ - yystate = *yyssp; \ - goto yybackup; \ - } \ - else \ - { \ - yyerror (pParseContext, YY_("syntax error: cannot back up")); \ - YYERROR; \ - } \ -while (0) - -/* Error token number */ -#define YYTERROR 1 -#define YYERRCODE 256 - +#define YYBACKUP(Token, Value) \ + do \ + if (yychar == YYEMPTY) \ + { \ + yychar = (Token); \ + yylval = (Value); \ + YYPOPSTACK (yylen); \ + yystate = *yyssp; \ + goto yybackup; \ + } \ + else \ + { \ + yyerror (pParseContext, YY_("syntax error: cannot back up")); \ + YYERROR; \ + } \ + while (0) + +/* Backward compatibility with an undocumented macro. + Use YYerror or YYUNDEF. */ +#define YYERRCODE YYUNDEF /* Enable debugging if requested. */ @@ -3733,55 +3875,59 @@ do { \ } while (0) /* This macro is provided for backward compatibility. */ -#ifndef YY_LOCATION_PRINT -# define YY_LOCATION_PRINT(File, Loc) ((void) 0) -#endif +# ifndef YY_LOCATION_PRINT +# define YY_LOCATION_PRINT(File, Loc) ((void) 0) +# endif -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ - Type, Value, pParseContext); \ + Kind, Value, pParseContext); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) -/*----------------------------------------. -| Print this symbol's value on YYOUTPUT. | -`----------------------------------------*/ +/*-----------------------------------. +| Print this symbol's value on YYO. | +`-----------------------------------*/ static void -yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext) +yy_symbol_value_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext) { - FILE *yyo = yyoutput; - YYUSE (yyo); + FILE *yyoutput = yyo; + YYUSE (yyoutput); YYUSE (pParseContext); if (!yyvaluep) return; # ifdef YYPRINT - if (yytype < YYNTOKENS) - YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); + if (yykind < YYNTOKENS) + YYPRINT (yyo, yytoknum[yykind], *yyvaluep); # endif - YYUSE (yytype); + YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN + YYUSE (yykind); + YY_IGNORE_MAYBE_UNINITIALIZED_END } -/*--------------------------------. -| Print this symbol on YYOUTPUT. | -`--------------------------------*/ +/*---------------------------. +| Print this symbol on YYO. | +`---------------------------*/ static void -yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext) +yy_symbol_print (FILE *yyo, + yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext) { - YYFPRINTF (yyoutput, "%s %s (", - yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]); + YYFPRINTF (yyo, "%s %s (", + yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); - yy_symbol_value_print (yyoutput, yytype, yyvaluep, pParseContext); - YYFPRINTF (yyoutput, ")"); + yy_symbol_value_print (yyo, yykind, yyvaluep, pParseContext); + YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. @@ -3790,7 +3936,7 @@ yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, gls `------------------------------------------------------------------*/ static void -yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) +yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) @@ -3813,21 +3959,21 @@ do { \ `------------------------------------------------*/ static void -yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule, glslang::TParseContext* pParseContext) +yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, + int yyrule, glslang::TParseContext* pParseContext) { - unsigned long int yylno = yyrline[yyrule]; + int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; - YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", + YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, - yystos[yyssp[yyi + 1 - yynrhs]], - &(yyvsp[(yyi + 1) - (yynrhs)]) - , pParseContext); + YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), + &yyvsp[(yyi + 1) - (yynrhs)], pParseContext); YYFPRINTF (stderr, "\n"); } } @@ -3842,8 +3988,8 @@ do { \ multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ -# define YYDPRINTF(Args) -# define YY_SYMBOL_PRINT(Title, Type, Value, Location) +# define YYDPRINTF(Args) ((void) 0) +# define YY_SYMBOL_PRINT(Title, Kind, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ @@ -3866,28 +4012,76 @@ int yydebug; #endif -#if YYERROR_VERBOSE +/* Context of a parse error. */ +typedef struct +{ + yy_state_t *yyssp; + yysymbol_kind_t yytoken; +} yypcontext_t; + +/* Put in YYARG at most YYARGN of the expected tokens given the + current YYCTX, and return the number of tokens stored in YYARG. If + YYARG is null, return the number of expected tokens (guaranteed to + be less than YYNTOKENS). Return YYENOMEM on memory exhaustion. + Return 0 if there are more than YYARGN expected tokens, yet fill + YYARG up to YYARGN. */ +static int +yypcontext_expected_tokens (const yypcontext_t *yyctx, + yysymbol_kind_t yyarg[], int yyargn) +{ + /* Actual size of YYARG. */ + int yycount = 0; + int yyn = yypact[+*yyctx->yyssp]; + if (!yypact_value_is_default (yyn)) + { + /* Start YYX at -YYN if negative to avoid negative indexes in + YYCHECK. In other words, skip the first -YYN actions for + this state because they are default actions. */ + int yyxbegin = yyn < 0 ? -yyn : 0; + /* Stay within bounds of both yycheck and yytname. */ + int yychecklim = YYLAST - yyn + 1; + int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; + int yyx; + for (yyx = yyxbegin; yyx < yyxend; ++yyx) + if (yycheck[yyx + yyn] == yyx && yyx != YYSYMBOL_YYerror + && !yytable_value_is_error (yytable[yyx + yyn])) + { + if (!yyarg) + ++yycount; + else if (yycount == yyargn) + return 0; + else + yyarg[yycount++] = YY_CAST (yysymbol_kind_t, yyx); + } + } + if (yyarg && yycount == 0 && 0 < yyargn) + yyarg[0] = YYSYMBOL_YYEMPTY; + return yycount; +} + + -# ifndef yystrlen -# if defined __GLIBC__ && defined _STRING_H -# define yystrlen strlen -# else + +#ifndef yystrlen +# if defined __GLIBC__ && defined _STRING_H +# define yystrlen(S) (YY_CAST (YYPTRDIFF_T, strlen (S))) +# else /* Return the length of YYSTR. */ -static YYSIZE_T +static YYPTRDIFF_T yystrlen (const char *yystr) { - YYSIZE_T yylen; + YYPTRDIFF_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } -# endif # endif +#endif -# ifndef yystpcpy -# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE -# define yystpcpy stpcpy -# else +#ifndef yystpcpy +# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE +# define yystpcpy stpcpy +# else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ static char * @@ -3901,10 +4095,10 @@ yystpcpy (char *yydest, const char *yysrc) return yyd - 1; } -# endif # endif +#endif -# ifndef yytnamerr +#ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string @@ -3912,14 +4106,13 @@ yystpcpy (char *yydest, const char *yysrc) backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ -static YYSIZE_T +static YYPTRDIFF_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { - YYSIZE_T yyn = 0; + YYPTRDIFF_T yyn = 0; char const *yyp = yystr; - for (;;) switch (*++yyp) { @@ -3930,7 +4123,10 @@ yytnamerr (char *yyres, const char *yystr) case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; - /* Fall through. */ + else + goto append; + + append: default: if (yyres) yyres[yyn] = *yyp; @@ -3945,36 +4141,20 @@ yytnamerr (char *yyres, const char *yystr) do_not_strip_quotes: ; } - if (! yyres) + if (yyres) + return yystpcpy (yyres, yystr) - yyres; + else return yystrlen (yystr); - - return yystpcpy (yyres, yystr) - yyres; } -# endif +#endif -/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message - about the unexpected token YYTOKEN for the state stack whose top is - YYSSP. - Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is - not large enough to hold the message. In that case, also set - *YYMSG_ALLOC to the required number of bytes. Return 2 if the - required number of bytes is too large to store. */ static int -yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, - yytype_int16 *yyssp, int yytoken) +yy_syntax_error_arguments (const yypcontext_t *yyctx, + yysymbol_kind_t yyarg[], int yyargn) { - YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]); - YYSIZE_T yysize = yysize0; - enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; - /* Internationalized format string. */ - const char *yyformat = YY_NULLPTR; - /* Arguments of yyformat. */ - char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; - /* Number of reported tokens (one for the "unexpected", one per - "expected"). */ + /* Actual size of YYARG. */ int yycount = 0; - /* There are many possibilities here to consider: - If this state is a consistent state with a default action, then the only way this function was invoked is if the default action @@ -3998,63 +4178,78 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, one exception: it will still contain any token that will not be accepted due to an error action in a later state. */ - if (yytoken != YYEMPTY) - { - int yyn = yypact[*yyssp]; - yyarg[yycount++] = yytname[yytoken]; - if (!yypact_value_is_default (yyn)) - { - /* Start YYX at -YYN if negative to avoid negative indexes in - YYCHECK. In other words, skip the first -YYN actions for - this state because they are default actions. */ - int yyxbegin = yyn < 0 ? -yyn : 0; - /* Stay within bounds of both yycheck and yytname. */ - int yychecklim = YYLAST - yyn + 1; - int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; - int yyx; - - for (yyx = yyxbegin; yyx < yyxend; ++yyx) - if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR - && !yytable_value_is_error (yytable[yyx + yyn])) - { - if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) - { - yycount = 1; - yysize = yysize0; - break; - } - yyarg[yycount++] = yytname[yyx]; - { - YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]); - if (! (yysize <= yysize1 - && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; - } - } - } + if (yyctx->yytoken != YYSYMBOL_YYEMPTY) + { + int yyn; + if (yyarg) + yyarg[yycount] = yyctx->yytoken; + ++yycount; + yyn = yypcontext_expected_tokens (yyctx, + yyarg ? yyarg + 1 : yyarg, yyargn - 1); + if (yyn == YYENOMEM) + return YYENOMEM; + else + yycount += yyn; } + return yycount; +} + +/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message + about the unexpected token YYTOKEN for the state stack whose top is + YYSSP. + + Return 0 if *YYMSG was successfully written. Return -1 if *YYMSG is + not large enough to hold the message. In that case, also set + *YYMSG_ALLOC to the required number of bytes. Return YYENOMEM if the + required number of bytes is too large to store. */ +static int +yysyntax_error (YYPTRDIFF_T *yymsg_alloc, char **yymsg, + const yypcontext_t *yyctx) +{ + enum { YYARGS_MAX = 5 }; + /* Internationalized format string. */ + const char *yyformat = YY_NULLPTR; + /* Arguments of yyformat: reported tokens (one for the "unexpected", + one per "expected"). */ + yysymbol_kind_t yyarg[YYARGS_MAX]; + /* Cumulated lengths of YYARG. */ + YYPTRDIFF_T yysize = 0; + + /* Actual size of YYARG. */ + int yycount = yy_syntax_error_arguments (yyctx, yyarg, YYARGS_MAX); + if (yycount == YYENOMEM) + return YYENOMEM; switch (yycount) { -# define YYCASE_(N, S) \ +#define YYCASE_(N, S) \ case N: \ yyformat = S; \ - break + break + default: /* Avoid compiler warnings. */ YYCASE_(0, YY_("syntax error")); YYCASE_(1, YY_("syntax error, unexpected %s")); YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); -# undef YYCASE_ +#undef YYCASE_ } + /* Compute error message size. Don't count the "%s"s, but reserve + room for the terminator. */ + yysize = yystrlen (yyformat) - 2 * yycount + 1; { - YYSIZE_T yysize1 = yysize + yystrlen (yyformat); - if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) - return 2; - yysize = yysize1; + int yyi; + for (yyi = 0; yyi < yycount; ++yyi) + { + YYPTRDIFF_T yysize1 + = yysize + yytnamerr (YY_NULLPTR, yytname[yyarg[yyi]]); + if (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM) + yysize = yysize1; + else + return YYENOMEM; + } } if (*yymsg_alloc < yysize) @@ -4063,7 +4258,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, if (! (yysize <= *yymsg_alloc && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; - return 1; + return -1; } /* Avoid sprintf, as that infringes on the user's name space. @@ -4075,40 +4270,43 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, while ((*yyp = *yyformat) != '\0') if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) { - yyp += yytnamerr (yyp, yyarg[yyi++]); + yyp += yytnamerr (yyp, yytname[yyarg[yyi++]]); yyformat += 2; } else { - yyp++; - yyformat++; + ++yyp; + ++yyformat; } } return 0; } -#endif /* YYERROR_VERBOSE */ + /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void -yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext) +yydestruct (const char *yymsg, + yysymbol_kind_t yykind, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext) { YYUSE (yyvaluep); YYUSE (pParseContext); if (!yymsg) yymsg = "Deleting"; - YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); + YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yytype); + YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } + + /*----------. | yyparse. | `----------*/ @@ -4116,7 +4314,7 @@ yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, glslang::TParseCon int yyparse (glslang::TParseContext* pParseContext) { -/* The lookahead symbol. */ +/* Lookahead token kind. */ int yychar; @@ -4127,45 +4325,41 @@ YY_INITIAL_VALUE (static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Number of syntax errors so far. */ - int yynerrs; + int yynerrs = 0; - int yystate; + yy_state_fast_t yystate = 0; /* Number of tokens to shift before error messages enabled. */ - int yyerrstatus; + int yyerrstatus = 0; - /* The stacks and their tools: - 'yyss': related to states. - 'yyvs': related to semantic values. - - Refer to the stacks through separate pointers, to allow yyoverflow + /* Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ - /* The state stack. */ - yytype_int16 yyssa[YYINITDEPTH]; - yytype_int16 *yyss; - yytype_int16 *yyssp; + /* Their size. */ + YYPTRDIFF_T yystacksize = YYINITDEPTH; - /* The semantic value stack. */ - YYSTYPE yyvsa[YYINITDEPTH]; - YYSTYPE *yyvs; - YYSTYPE *yyvsp; + /* The state stack: array, bottom, top. */ + yy_state_t yyssa[YYINITDEPTH]; + yy_state_t *yyss = yyssa; + yy_state_t *yyssp = yyss; - YYSIZE_T yystacksize; + /* The semantic value stack: array, bottom, top. */ + YYSTYPE yyvsa[YYINITDEPTH]; + YYSTYPE *yyvs = yyvsa; + YYSTYPE *yyvsp = yyvs; int yyn; + /* The return value of yyparse. */ int yyresult; - /* Lookahead token as an internal (translated) token number. */ - int yytoken = 0; + /* Lookahead symbol kind. */ + yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; -#if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; - YYSIZE_T yymsg_alloc = sizeof yymsgbuf; -#endif + YYPTRDIFF_T yymsg_alloc = sizeof yymsgbuf; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) @@ -4173,58 +4367,60 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); Keep to zero when no symbol should be popped. */ int yylen = 0; - yyssp = yyss = yyssa; - yyvsp = yyvs = yyvsa; - yystacksize = YYINITDEPTH; - YYDPRINTF ((stderr, "Starting parse\n")); - yystate = 0; - yyerrstatus = 0; - yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; + /*------------------------------------------------------------. -| yynewstate -- Push a new state, which is found in yystate. | +| yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ - yynewstate: +yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; - yysetstate: - *yyssp = yystate; + +/*--------------------------------------------------------------------. +| yysetstate -- set current state (the top of the stack) to yystate. | +`--------------------------------------------------------------------*/ +yysetstate: + YYDPRINTF ((stderr, "Entering state %d\n", yystate)); + YY_ASSERT (0 <= yystate && yystate < YYNSTATES); + YY_IGNORE_USELESS_CAST_BEGIN + *yyssp = YY_CAST (yy_state_t, yystate); + YY_IGNORE_USELESS_CAST_END + YY_STACK_PRINT (yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) +#if !defined yyoverflow && !defined YYSTACK_RELOCATE + goto yyexhaustedlab; +#else { /* Get the current used size of the three stacks, in elements. */ - YYSIZE_T yysize = yyssp - yyss + 1; + YYPTRDIFF_T yysize = yyssp - yyss + 1; -#ifdef yyoverflow +# if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ + yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; - yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), - &yyss1, yysize * sizeof (*yyssp), - &yyvs1, yysize * sizeof (*yyvsp), + &yyss1, yysize * YYSIZEOF (*yyssp), + &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); - yyss = yyss1; yyvs = yyvs1; } -#else /* no yyoverflow */ -# ifndef YYSTACK_RELOCATE - goto yyexhaustedlab; -# else +# else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; @@ -4233,9 +4429,10 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yystacksize = YYMAXDEPTH; { - yytype_int16 *yyss1 = yyss; + yy_state_t *yyss1 = yyss; union yyalloc *yyptr = - (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); + YY_CAST (union yyalloc *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); @@ -4245,30 +4442,30 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); YYSTACK_FREE (yyss1); } # endif -#endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; - YYDPRINTF ((stderr, "Stack size increased to %lu\n", - (unsigned long int) yystacksize)); + YY_IGNORE_USELESS_CAST_BEGIN + YYDPRINTF ((stderr, "Stack size increased to %ld\n", + YY_CAST (long, yystacksize))); + YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } - - YYDPRINTF ((stderr, "Entering state %d\n", yystate)); +#endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; + /*-----------. | yybackup. | `-----------*/ yybackup: - /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ @@ -4279,18 +4476,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Not known => get a lookahead token if don't already have one. */ - /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ + /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { - YYDPRINTF ((stderr, "Reading a token: ")); + YYDPRINTF ((stderr, "Reading a token\n")); yychar = yylex (&yylval, parseContext); } if (yychar <= YYEOF) { - yychar = yytoken = YYEOF; + yychar = YYEOF; + yytoken = YYSYMBOL_YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } + else if (yychar == YYerror) + { + /* The scanner already issued an error message, process directly + to error recovery. But do not keep the error token as + lookahead, it is too special and may lead us to an endless + loop in error recovery. */ + yychar = YYUNDEF; + yytoken = YYSYMBOL_YYerror; + goto yyerrlab1; + } else { yytoken = YYTRANSLATE (yychar); @@ -4318,15 +4526,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); - - /* Discard the shifted token. */ - yychar = YYEMPTY; - yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END + /* Discard the shifted token. */ + yychar = YYEMPTY; goto yynewstate; @@ -4341,7 +4547,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /*-----------------------------. -| yyreduce -- Do a reduction. | +| yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ @@ -4361,304 +4567,304 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); YY_REDUCE_PRINT (yyn); switch (yyn) { - case 2: -#line 369 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 2: /* variable_identifier: IDENTIFIER */ +#line 370 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 4370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4576 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 3: -#line 375 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 3: /* primary_expression: variable_identifier */ +#line 376 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4378 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4584 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 4: -#line 378 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ +#line 379 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4388 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4594 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 5: -#line 383 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 5: /* primary_expression: FLOATCONSTANT */ +#line 384 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4396 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4602 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 6: -#line 386 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 6: /* primary_expression: INTCONSTANT */ +#line 387 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4610 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 7: -#line 389 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 7: /* primary_expression: UINTCONSTANT */ +#line 390 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4413 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4619 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 8: -#line 393 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 8: /* primary_expression: BOOLCONSTANT */ +#line 394 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4627 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 9: -#line 397 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 9: /* primary_expression: STRING_LITERAL */ +#line 398 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 4429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4635 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 10: -#line 400 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 10: /* primary_expression: INT32CONSTANT */ +#line 401 "glslang/MachineIndependent/glslang.y" + { 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 4438 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4644 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 11: -#line 404 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 11: /* primary_expression: UINT32CONSTANT */ +#line 405 "glslang/MachineIndependent/glslang.y" + { 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 4447 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4653 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 12: -#line 408 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 12: /* primary_expression: INT64CONSTANT */ +#line 409 "glslang/MachineIndependent/glslang.y" + { 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 4456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4662 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 13: -#line 412 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 13: /* primary_expression: UINT64CONSTANT */ +#line 413 "glslang/MachineIndependent/glslang.y" + { 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 4465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4671 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 14: -#line 416 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 14: /* primary_expression: INT16CONSTANT */ +#line 417 "glslang/MachineIndependent/glslang.y" + { 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 4474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4680 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 15: -#line 420 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 15: /* primary_expression: UINT16CONSTANT */ +#line 421 "glslang/MachineIndependent/glslang.y" + { 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 4483 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4689 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 16: -#line 424 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 16: /* primary_expression: DOUBLECONSTANT */ +#line 425 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal"); if (! parseContext.symbolTable.atBuiltInLevel()) 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 4494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4700 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 17: -#line 430 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 17: /* primary_expression: FLOAT16CONSTANT */ +#line 431 "glslang/MachineIndependent/glslang.y" + { 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 4503 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4709 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 18: -#line 438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 18: /* postfix_expression: primary_expression */ +#line 439 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4717 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 19: -#line 441 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ +#line 442 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4519 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4725 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 20: -#line 444 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 20: /* postfix_expression: function_call */ +#line 445 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4527 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4733 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 21: -#line 447 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ +#line 448 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4741 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 22: -#line 450 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 22: /* postfix_expression: postfix_expression INC_OP */ +#line 451 "glslang/MachineIndependent/glslang.y" + { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4751 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 23: -#line 455 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 23: /* postfix_expression: postfix_expression DEC_OP */ +#line 456 "glslang/MachineIndependent/glslang.y" + { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4761 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 24: -#line 463 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 24: /* integer_expression: expression */ +#line 464 "glslang/MachineIndependent/glslang.y" + { parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4564 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4770 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 25: -#line 470 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 25: /* function_call: function_call_or_method */ +#line 471 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 4573 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4779 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 26: -#line 477 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 26: /* function_call_or_method: function_call_generic */ +#line 478 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[0].interm); } -#line 4581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4787 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 27: -#line 483 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ +#line 484 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4796 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 28: -#line 487 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ +#line 488 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4599 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4805 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 29: -#line 494 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 29: /* function_call_header_no_parameters: function_call_header VOID */ +#line 495 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[-1].interm); } -#line 4607 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4813 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 30: -#line 497 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 30: /* function_call_header_no_parameters: function_call_header */ +#line 498 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[0].interm); } -#line 4615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4821 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 31: -#line 503 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ +#line 504 "glslang/MachineIndependent/glslang.y" + { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); (yyvsp[-1].interm).function->addParameter(param); (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 4627 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4833 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 32: -#line 510 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ +#line 511 "glslang/MachineIndependent/glslang.y" + { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); (yyvsp[-2].interm).function->addParameter(param); (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 4639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4845 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 33: -#line 520 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 33: /* function_call_header: function_identifier LEFT_PAREN */ +#line 521 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[-1].interm); } -#line 4647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4853 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 34: -#line 528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 34: /* function_identifier: type_specifier */ +#line 529 "glslang/MachineIndependent/glslang.y" + { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4657 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4863 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 35: -#line 533 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 35: /* function_identifier: postfix_expression */ +#line 534 "glslang/MachineIndependent/glslang.y" + { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. // @@ -4685,51 +4891,51 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 4689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4895 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 36: -#line 561 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 36: /* function_identifier: non_uniform_qualifier */ +#line 562 "glslang/MachineIndependent/glslang.y" + { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4905 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 37: -#line 570 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 37: /* unary_expression: postfix_expression */ +#line 571 "glslang/MachineIndependent/glslang.y" + { parseContext.variableCheck((yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 4710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4916 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 38: -#line 576 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 38: /* unary_expression: INC_OP unary_expression */ +#line 577 "glslang/MachineIndependent/glslang.y" + { 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 4719 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4925 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 39: -#line 580 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 39: /* unary_expression: DEC_OP unary_expression */ +#line 581 "glslang/MachineIndependent/glslang.y" + { 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 4728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4934 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 40: -#line 584 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 40: /* unary_expression: unary_operator unary_expression */ +#line 585 "glslang/MachineIndependent/glslang.y" + { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; switch((yyvsp[-1].interm).op) { @@ -4745,180 +4951,180 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 4749 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4955 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 41: -#line 604 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 4755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 41: /* unary_operator: PLUS */ +#line 605 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } +#line 4961 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 42: -#line 605 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 4761 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 42: /* unary_operator: DASH */ +#line 606 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } +#line 4967 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 43: -#line 606 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 4767 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 43: /* unary_operator: BANG */ +#line 607 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } +#line 4973 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 44: -#line 607 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; + case 44: /* unary_operator: TILDE */ +#line 608 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 4774 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4980 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 45: -#line 613 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 45: /* multiplicative_expression: unary_expression */ +#line 614 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 4986 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 46: -#line 614 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ +#line 615 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 4996 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 47: -#line 619 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ +#line 620 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5006 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 48: -#line 624 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ +#line 625 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4811 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5017 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 49: -#line 633 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 49: /* additive_expression: multiplicative_expression */ +#line 634 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5023 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 50: -#line 634 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ +#line 635 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5033 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 51: -#line 639 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ +#line 640 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5043 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 52: -#line 647 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 52: /* shift_expression: additive_expression */ +#line 648 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5049 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 53: -#line 648 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ +#line 649 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5060 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 54: -#line 654 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ +#line 655 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4865 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5071 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 55: -#line 663 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4871 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 55: /* relational_expression: shift_expression */ +#line 664 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5077 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 56: -#line 664 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ +#line 665 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5087 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 57: -#line 669 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ +#line 670 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5097 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 58: -#line 674 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 58: /* relational_expression: relational_expression LE_OP shift_expression */ +#line 675 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5107 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 59: -#line 679 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 59: /* relational_expression: relational_expression GE_OP shift_expression */ +#line 680 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5117 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 60: -#line 687 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4917 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 60: /* equality_expression: relational_expression */ +#line 688 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5123 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 61: -#line 688 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ +#line 689 "glslang/MachineIndependent/glslang.y" + { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=="); parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=="); @@ -4927,12 +5133,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5137 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 62: -#line 697 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 62: /* equality_expression: equality_expression NE_OP relational_expression */ +#line 698 "glslang/MachineIndependent/glslang.y" + { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!="); parseContext.specializationCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!="); @@ -4941,125 +5147,125 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 4945 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5151 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 63: -#line 709 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 63: /* and_expression: equality_expression */ +#line 710 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5157 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 64: -#line 710 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 64: /* and_expression: and_expression AMPERSAND equality_expression */ +#line 711 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5168 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 65: -#line 719 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4968 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 65: /* exclusive_or_expression: and_expression */ +#line 720 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5174 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 66: -#line 720 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ +#line 721 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4979 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5185 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 67: -#line 729 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4985 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 67: /* inclusive_or_expression: exclusive_or_expression */ +#line 730 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5191 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 68: -#line 730 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ +#line 731 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4996 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5202 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 69: -#line 739 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5002 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 69: /* logical_and_expression: inclusive_or_expression */ +#line 740 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5208 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 70: -#line 740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ +#line 741 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5218 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 71: -#line 748 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5018 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 71: /* logical_xor_expression: logical_and_expression */ +#line 749 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5224 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 72: -#line 749 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ +#line 750 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5028 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5234 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 73: -#line 757 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5034 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 73: /* logical_or_expression: logical_xor_expression */ +#line 758 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5240 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 74: -#line 758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ +#line 759 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5044 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5250 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 75: -#line 766 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5050 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 75: /* conditional_expression: logical_or_expression */ +#line 767 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5256 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 76: -#line 767 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 76: /* $@1: %empty */ +#line 768 "glslang/MachineIndependent/glslang.y" + { ++parseContext.controlFlowNestingLevel; } -#line 5058 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5264 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 77: -#line 770 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ +#line 771 "glslang/MachineIndependent/glslang.y" + { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); parseContext.rValueErrorCheck((yyvsp[-4].lex).loc, "?", (yyvsp[-5].interm.intermTypedNode)); @@ -5071,18 +5277,18 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5281 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 78: -#line 785 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 78: /* assignment_expression: conditional_expression */ +#line 786 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } +#line 5287 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 79: -#line 786 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ +#line 787 "glslang/MachineIndependent/glslang.y" + { parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment"); parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); parseContext.storage16BitAssignmentCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); @@ -5095,120 +5301,120 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 5099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5305 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 80: -#line 802 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 80: /* assignment_operator: EQUAL */ +#line 803 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 5108 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5314 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 81: -#line 806 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 81: /* assignment_operator: MUL_ASSIGN */ +#line 807 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 5117 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5323 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 82: -#line 810 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 82: /* assignment_operator: DIV_ASSIGN */ +#line 811 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 5126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5332 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 83: -#line 814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 83: /* assignment_operator: MOD_ASSIGN */ +#line 815 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%="); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 5136 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5342 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 84: -#line 819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 84: /* assignment_operator: ADD_ASSIGN */ +#line 820 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5351 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 85: -#line 823 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 85: /* assignment_operator: SUB_ASSIGN */ +#line 824 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5154 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5360 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 86: -#line 827 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 86: /* assignment_operator: LEFT_ASSIGN */ +#line 828 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5163 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5369 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 87: -#line 831 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 87: /* assignment_operator: RIGHT_ASSIGN */ +#line 832 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5172 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5378 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 88: -#line 835 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 88: /* assignment_operator: AND_ASSIGN */ +#line 836 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5387 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 89: -#line 839 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 89: /* assignment_operator: XOR_ASSIGN */ +#line 840 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 5190 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5396 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 90: -#line 843 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 90: /* assignment_operator: OR_ASSIGN */ +#line 844 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 5199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5405 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 91: -#line 850 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 91: /* expression: assignment_expression */ +#line 851 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5413 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 92: -#line 853 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 92: /* expression: expression COMMA assignment_expression */ +#line 854 "glslang/MachineIndependent/glslang.y" + { parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); if ((yyval.interm.intermTypedNode) == 0) { @@ -5216,117 +5422,117 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5220 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5426 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 93: -#line 864 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 93: /* constant_expression: conditional_expression */ +#line 865 "glslang/MachineIndependent/glslang.y" + { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5229 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5435 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 94: -#line 871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 94: /* declaration: function_prototype SEMICOLON */ +#line 872 "glslang/MachineIndependent/glslang.y" + { parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 5239 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5445 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 95: -#line 876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 95: /* declaration: init_declarator_list SEMICOLON */ +#line 877 "glslang/MachineIndependent/glslang.y" + { 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 5249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5455 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 96: -#line 881 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 96: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ +#line 882 "glslang/MachineIndependent/glslang.y" + { parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement"); // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope parseContext.symbolTable.setPreviousDefaultPrecisions(&parseContext.defaultPrecision[0]); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 5261 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5467 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 97: -#line 888 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 97: /* declaration: block_structure SEMICOLON */ +#line 889 "glslang/MachineIndependent/glslang.y" + { parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 5270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5476 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 98: -#line 892 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 98: /* declaration: block_structure IDENTIFIER SEMICOLON */ +#line 893 "glslang/MachineIndependent/glslang.y" + { parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5279 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5485 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 99: -#line 896 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 99: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ +#line 897 "glslang/MachineIndependent/glslang.y" + { parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 5288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5494 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 100: -#line 900 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 100: /* declaration: type_qualifier SEMICOLON */ +#line 901 "glslang/MachineIndependent/glslang.y" + { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 5298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5504 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 101: -#line 905 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 101: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ +#line 906 "glslang/MachineIndependent/glslang.y" + { parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5514 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 102: -#line 910 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 102: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ +#line 911 "glslang/MachineIndependent/glslang.y" + { parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers); (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 5319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5525 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 103: -#line 919 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 5325 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 103: /* $@2: %empty */ +#line 920 "glslang/MachineIndependent/glslang.y" + { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } +#line 5531 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 104: -#line 919 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 104: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ +#line 920 "glslang/MachineIndependent/glslang.y" + { --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; parseContext.globalQualifierFixCheck((yyvsp[-5].interm.type).loc, (yyvsp[-5].interm.type).qualifier); @@ -5335,55 +5541,55 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 5339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5545 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 105: -#line 930 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 105: /* identifier_list: COMMA IDENTIFIER */ +#line 931 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5554 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 106: -#line 934 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 106: /* identifier_list: identifier_list COMMA IDENTIFIER */ +#line 935 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5563 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 107: -#line 941 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 107: /* function_prototype: function_declarator RIGHT_PAREN */ +#line 942 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5366 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5572 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 108: -#line 948 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 108: /* function_declarator: function_header */ +#line 949 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5580 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 109: -#line 951 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 109: /* function_declarator: function_header_with_parameters */ +#line 952 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5382 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5588 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 110: -#line 958 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 110: /* function_header_with_parameters: function_header parameter_declaration */ +#line 959 "glslang/MachineIndependent/glslang.y" + { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); if ((yyvsp[0].interm).param.type->getBasicType() != EbtVoid) @@ -5391,12 +5597,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 5395 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5601 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 111: -#line 966 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 111: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ +#line 967 "glslang/MachineIndependent/glslang.y" + { // // Only first parameter of one-parameter functions can be void // The check for named parameters not being void is done in parameter_declarator @@ -5413,12 +5619,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5417 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5623 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 112: -#line 986 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 112: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ +#line 987 "glslang/MachineIndependent/glslang.y" + { if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) { parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return", GetStorageQualifierString((yyvsp[-2].interm.type).qualifier.storage), ""); @@ -5437,12 +5643,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5647 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 113: -#line 1009 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 113: /* parameter_declarator: type_specifier IDENTIFIER */ +#line 1010 "glslang/MachineIndependent/glslang.y" + { if ((yyvsp[-1].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); parseContext.profileRequires((yyvsp[-1].interm.type).loc, EEsProfile, 300, 0, "arrayed type"); @@ -5457,12 +5663,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5667 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 114: -#line 1024 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 114: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ +#line 1025 "glslang/MachineIndependent/glslang.y" + { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type"); @@ -5481,12 +5687,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5485 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5691 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 115: -#line 1049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 115: /* parameter_declaration: type_qualifier parameter_declarator */ +#line 1050 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision; @@ -5497,24 +5703,24 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5707 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 116: -#line 1060 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 116: /* parameter_declaration: parameter_declarator */ +#line 1061 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[0].interm); parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type); 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 5513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5719 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 117: -#line 1070 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 117: /* parameter_declaration: type_qualifier parameter_type_specifier */ +#line 1071 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) (yyval.interm).param.type->getQualifier().precision = (yyvsp[-1].interm.type).qualifier.precision; @@ -5524,133 +5730,133 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5528 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5734 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 118: -#line 1080 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 118: /* parameter_declaration: parameter_type_specifier */ +#line 1081 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[0].interm); parseContext.parameterTypeCheck((yyvsp[0].interm).loc, EvqIn, *(yyvsp[0].interm).param.type); 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 5540 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5746 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 119: -#line 1090 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 119: /* parameter_type_specifier: type_specifier */ +#line 1091 "glslang/MachineIndependent/glslang.y" + { TParameter param = { 0, new TType((yyvsp[0].interm.type)) }; (yyval.interm).param = param; if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5757 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 120: -#line 1099 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 120: /* init_declarator_list: single_declaration */ +#line 1100 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[0].interm); } -#line 5559 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5765 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 121: -#line 1102 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 121: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ +#line 1103 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 5568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5774 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 122: -#line 1106 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 122: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ +#line 1107 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 5577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5783 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 123: -#line 1110 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 123: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ +#line 1111 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).type = (yyvsp[-5].interm).type; 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 5587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5793 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 124: -#line 1115 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 124: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ +#line 1116 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).type = (yyvsp[-4].interm).type; 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 5597 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5803 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 125: -#line 1123 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 125: /* single_declaration: fully_specified_type */ +#line 1124 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 5609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5815 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 126: -#line 1130 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 126: /* single_declaration: fully_specified_type IDENTIFIER */ +#line 1131 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).type = (yyvsp[-1].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 5619 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5825 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 127: -#line 1135 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 127: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ +#line 1136 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).type = (yyvsp[-2].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 5629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5835 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 128: -#line 1140 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 128: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ +#line 1141 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).type = (yyvsp[-4].interm.type); 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 5639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5845 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 129: -#line 1145 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 129: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 1146 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).type = (yyvsp[-3].interm.type); 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 5649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5855 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 130: -#line 1154 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 130: /* fully_specified_type: type_specifier */ +#line 1155 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[0].interm.type); parseContext.globalQualifierTypeCheck((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier, (yyval.interm.type)); @@ -5660,12 +5866,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 5664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5870 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 131: -#line 1164 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 131: /* fully_specified_type: type_qualifier type_specifier */ +#line 1165 "glslang/MachineIndependent/glslang.y" + { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type)); @@ -5689,71 +5895,71 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 5693 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5899 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 132: -#line 1191 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 132: /* invariant_qualifier: INVARIANT */ +#line 1192 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "invariant"); parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 5704 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5910 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 133: -#line 1200 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 133: /* interpolation_qualifier: SMOOTH */ +#line 1201 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "smooth"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 5716 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5922 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 134: -#line 1207 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 134: /* interpolation_qualifier: FLAT */ +#line 1208 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "flat"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 5728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5934 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 135: -#line 1215 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 135: /* interpolation_qualifier: NOPERSPECTIVE */ +#line 1216 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "noperspective"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 5740 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5946 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 136: -#line 1222 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 136: /* interpolation_qualifier: EXPLICITINTERPAMD */ +#line 1223 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 5752 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5958 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 137: -#line 1229 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 137: /* interpolation_qualifier: PERVERTEXNV */ +#line 1230 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); @@ -5761,12 +5967,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 5765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5971 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 138: -#line 1237 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 138: /* interpolation_qualifier: PERPRIMITIVENV */ +#line 1238 "glslang/MachineIndependent/glslang.y" + { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangFragmentMask | EShLangMeshNVMask), "perprimitiveNV"); @@ -5776,109 +5982,109 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 5780 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5986 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 139: -#line 1247 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 139: /* interpolation_qualifier: PERVIEWNV */ +#line 1248 "glslang/MachineIndependent/glslang.y" + { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); parseContext.requireStage((yyvsp[0].lex).loc, EShLangMeshNV, "perviewNV"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 5792 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 5998 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 140: -#line 1254 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 140: /* interpolation_qualifier: PERTASKNV */ +#line 1255 "glslang/MachineIndependent/glslang.y" + { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTaskNVMask | EShLangMeshNVMask), "taskNV"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 5804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6010 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 141: -#line 1265 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 141: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ +#line 1266 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 5812 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6018 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 142: -#line 1271 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 142: /* layout_qualifier_id_list: layout_qualifier_id */ +#line 1272 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6026 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 143: -#line 1274 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 143: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ +#line 1275 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 5830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6036 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 144: -#line 1281 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 144: /* layout_qualifier_id: IDENTIFIER */ +#line 1282 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 5839 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6045 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 145: -#line 1285 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 145: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ +#line 1286 "glslang/MachineIndependent/glslang.y" + { (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 5848 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6054 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 146: -#line 1289 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { // because "shared" is both an identifier and a keyword + case 146: /* layout_qualifier_id: SHARED */ +#line 1290 "glslang/MachineIndependent/glslang.y" + { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 5858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6064 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 147: -#line 1298 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 147: /* precise_qualifier: PRECISE */ +#line 1299 "glslang/MachineIndependent/glslang.y" + { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 5869 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6075 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 148: -#line 1308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 148: /* type_qualifier: single_type_qualifier */ +#line 1309 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5877 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6083 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 149: -#line 1311 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 149: /* type_qualifier: type_qualifier single_type_qualifier */ +#line 1312 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) (yyval.interm.type).basicType = (yyvsp[0].interm.type).basicType; @@ -5886,135 +6092,135 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 5890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6096 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 150: -#line 1322 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 150: /* single_type_qualifier: storage_qualifier */ +#line 1323 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5898 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6104 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 151: -#line 1325 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 151: /* single_type_qualifier: layout_qualifier */ +#line 1326 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5906 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6112 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 152: -#line 1328 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 152: /* single_type_qualifier: precision_qualifier */ +#line 1329 "glslang/MachineIndependent/glslang.y" + { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5915 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6121 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 153: -#line 1332 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 153: /* single_type_qualifier: interpolation_qualifier */ +#line 1333 "glslang/MachineIndependent/glslang.y" + { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6130 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 154: -#line 1336 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 154: /* single_type_qualifier: invariant_qualifier */ +#line 1337 "glslang/MachineIndependent/glslang.y" + { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5933 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6139 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 155: -#line 1341 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 155: /* single_type_qualifier: precise_qualifier */ +#line 1342 "glslang/MachineIndependent/glslang.y" + { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5942 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6148 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 156: -#line 1345 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 156: /* single_type_qualifier: non_uniform_qualifier */ +#line 1346 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 5950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6156 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 157: -#line 1352 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 157: /* storage_qualifier: CONST */ +#line 1353 "glslang/MachineIndependent/glslang.y" + { (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 5959 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6165 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 158: -#line 1356 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 158: /* storage_qualifier: INOUT */ +#line 1357 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 5969 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6175 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 159: -#line 1361 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 159: /* storage_qualifier: IN */ +#line 1362 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 5980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6186 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 160: -#line 1367 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 160: /* storage_qualifier: OUT */ +#line 1368 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 5991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6197 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 161: -#line 1373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 161: /* storage_qualifier: CENTROID */ +#line 1374 "glslang/MachineIndependent/glslang.y" + { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); parseContext.globalCheck((yyvsp[0].lex).loc, "centroid"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 6003 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6209 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 162: -#line 1380 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 162: /* storage_qualifier: UNIFORM */ +#line 1381 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 6013 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6219 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 163: -#line 1385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 163: /* storage_qualifier: SHARED */ +#line 1386 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 310, 0, "shared"); @@ -6022,22 +6228,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 6026 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6232 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 164: -#line 1393 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 164: /* storage_qualifier: BUFFER */ +#line 1394 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 6036 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6242 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 165: -#line 1399 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 165: /* storage_qualifier: ATTRIBUTE */ +#line 1400 "glslang/MachineIndependent/glslang.y" + { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "attribute"); @@ -6049,12 +6255,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6053 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6259 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 166: -#line 1411 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 166: /* storage_qualifier: VARYING */ +#line 1412 "glslang/MachineIndependent/glslang.y" + { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); parseContext.requireNotRemoved((yyvsp[0].lex).loc, ECoreProfile, 420, "varying"); @@ -6068,33 +6274,33 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6072 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6278 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 167: -#line 1425 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 167: /* storage_qualifier: PATCH */ +#line 1426 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 6083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6289 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 168: -#line 1431 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 168: /* storage_qualifier: SAMPLE */ +#line 1432 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 6093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6299 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 169: -#line 1436 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 169: /* storage_qualifier: HITATTRNV */ +#line 1437 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask | EShLangAnyHitMask), "hitAttributeNV"); @@ -6102,12 +6308,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6106 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6312 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 170: -#line 1444 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 170: /* storage_qualifier: HITATTREXT */ +#line 1445 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask | EShLangAnyHitMask), "hitAttributeEXT"); @@ -6115,12 +6321,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6119 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6325 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 171: -#line 1452 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 171: /* storage_qualifier: PAYLOADNV */ +#line 1453 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangAnyHitMask | EShLangMissMask), "rayPayloadNV"); @@ -6128,12 +6334,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6132 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6338 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 172: -#line 1460 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 172: /* storage_qualifier: PAYLOADEXT */ +#line 1461 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangAnyHitMask | EShLangMissMask), "rayPayloadEXT"); @@ -6141,12 +6347,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6351 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 173: -#line 1468 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 173: /* storage_qualifier: PAYLOADINNV */ +#line 1469 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | EShLangAnyHitMask | EShLangMissMask), "rayPayloadInNV"); @@ -6154,12 +6360,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6158 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6364 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 174: -#line 1476 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 174: /* storage_qualifier: PAYLOADINEXT */ +#line 1477 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | EShLangAnyHitMask | EShLangMissMask), "rayPayloadInEXT"); @@ -6167,12 +6373,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6171 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6377 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 175: -#line 1484 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 175: /* storage_qualifier: CALLDATANV */ +#line 1485 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataNV"); @@ -6180,12 +6386,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6390 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 176: -#line 1492 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 176: /* storage_qualifier: CALLDATAEXT */ +#line 1493 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | EShLangMissMask | EShLangCallableMask), "callableDataEXT"); @@ -6193,222 +6399,222 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6197 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6403 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 177: -#line 1500 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 177: /* storage_qualifier: CALLDATAINNV */ +#line 1501 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_NV_ray_tracing, "callableDataInNV"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6209 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6415 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 178: -#line 1507 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 178: /* storage_qualifier: CALLDATAINEXT */ +#line 1508 "glslang/MachineIndependent/glslang.y" + { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 460, E_GL_EXT_ray_tracing, "callableDataInEXT"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6221 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6427 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 179: -#line 1514 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 179: /* storage_qualifier: COHERENT */ +#line 1515 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 6230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6436 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 180: -#line 1518 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 180: /* storage_qualifier: DEVICECOHERENT */ +#line 1519 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 6240 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6446 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 181: -#line 1523 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 181: /* storage_qualifier: QUEUEFAMILYCOHERENT */ +#line 1524 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 6250 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6456 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 182: -#line 1528 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 182: /* storage_qualifier: WORKGROUPCOHERENT */ +#line 1529 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 6260 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6466 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 183: -#line 1533 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 183: /* storage_qualifier: SUBGROUPCOHERENT */ +#line 1534 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 6270 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6476 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 184: -#line 1538 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 184: /* storage_qualifier: NONPRIVATE */ +#line 1539 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 6280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6486 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 185: -#line 1543 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 185: /* storage_qualifier: SHADERCALLCOHERENT */ +#line 1544 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 6290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6496 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 186: -#line 1548 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 186: /* storage_qualifier: VOLATILE */ +#line 1549 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 6299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6505 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 187: -#line 1552 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 187: /* storage_qualifier: RESTRICT */ +#line 1553 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 6308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6514 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 188: -#line 1556 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 188: /* storage_qualifier: READONLY */ +#line 1557 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 6317 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6523 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 189: -#line 1560 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 189: /* storage_qualifier: WRITEONLY */ +#line 1561 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 6326 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6532 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 190: -#line 1564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 190: /* storage_qualifier: SUBROUTINE */ +#line 1565 "glslang/MachineIndependent/glslang.y" + { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 6337 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6543 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 191: -#line 1570 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 191: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ +#line 1571 "glslang/MachineIndependent/glslang.y" + { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 6348 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6554 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 192: -#line 1581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 192: /* non_uniform_qualifier: NONUNIFORM */ +#line 1582 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 6357 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6563 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 193: -#line 1588 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 193: /* type_name_list: IDENTIFIER */ +#line 1589 "glslang/MachineIndependent/glslang.y" + { // TODO } -#line 6365 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6571 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 194: -#line 1591 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 194: /* type_name_list: type_name_list COMMA IDENTIFIER */ +#line 1592 "glslang/MachineIndependent/glslang.y" + { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 6375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6581 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 195: -#line 1600 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 195: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ +#line 1601 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 6385 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6591 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 196: -#line 1605 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 196: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ +#line 1606 "glslang/MachineIndependent/glslang.y" + { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 6397 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6603 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 197: -#line 1615 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 197: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ +#line 1616 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 6407 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6613 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 198: -#line 1620 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 198: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1621 "glslang/MachineIndependent/glslang.y" + { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -6416,492 +6622,492 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6420 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6626 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 199: -#line 1628 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 199: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ +#line 1629 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 6429 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6635 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 200: -#line 1632 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 200: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1633 "glslang/MachineIndependent/glslang.y" + { (yyval.interm) = (yyvsp[-3].interm); TArraySize size; parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6647 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 201: -#line 1642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 201: /* type_parameter_specifier_opt: type_parameter_specifier */ +#line 1643 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 6449 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6655 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 202: -#line 1645 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 202: /* type_parameter_specifier_opt: %empty */ +#line 1646 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeParameters) = 0; } -#line 6457 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6663 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 203: -#line 1651 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 203: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ +#line 1652 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 6465 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6671 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 204: -#line 1657 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 204: /* type_parameter_specifier_list: unary_expression */ +#line 1658 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeParameters) = new TArraySizes; TArraySize size; parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6477 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6683 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 205: -#line 1664 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 205: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ +#line 1665 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); TArraySize size; parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6489 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6695 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 206: -#line 1674 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 206: /* type_specifier_nonarray: VOID */ +#line 1675 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 6498 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6704 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 207: -#line 1678 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 207: /* type_specifier_nonarray: FLOAT */ +#line 1679 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6507 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6713 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 208: -#line 1682 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 208: /* type_specifier_nonarray: INT */ +#line 1683 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6722 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 209: -#line 1686 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 209: /* type_specifier_nonarray: UINT */ +#line 1687 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6732 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 210: -#line 1691 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 210: /* type_specifier_nonarray: BOOL */ +#line 1692 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 6535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6741 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 211: -#line 1695 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 211: /* type_specifier_nonarray: VEC2 */ +#line 1696 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6545 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6751 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 212: -#line 1700 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 212: /* type_specifier_nonarray: VEC3 */ +#line 1701 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6555 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6761 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 213: -#line 1705 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 213: /* type_specifier_nonarray: VEC4 */ +#line 1706 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6565 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6771 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 214: -#line 1710 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 214: /* type_specifier_nonarray: BVEC2 */ +#line 1711 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 6575 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6781 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 215: -#line 1715 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 215: /* type_specifier_nonarray: BVEC3 */ +#line 1716 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 6585 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6791 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 216: -#line 1720 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 216: /* type_specifier_nonarray: BVEC4 */ +#line 1721 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 6595 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6801 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 217: -#line 1725 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 217: /* type_specifier_nonarray: IVEC2 */ +#line 1726 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6605 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6811 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 218: -#line 1730 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 218: /* type_specifier_nonarray: IVEC3 */ +#line 1731 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6615 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6821 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 219: -#line 1735 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 219: /* type_specifier_nonarray: IVEC4 */ +#line 1736 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6625 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6831 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 220: -#line 1740 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 220: /* type_specifier_nonarray: UVEC2 */ +#line 1741 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6636 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6842 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 221: -#line 1746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 221: /* type_specifier_nonarray: UVEC3 */ +#line 1747 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6647 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6853 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 222: -#line 1752 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 222: /* type_specifier_nonarray: UVEC4 */ +#line 1753 "glslang/MachineIndependent/glslang.y" + { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6658 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6864 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 223: -#line 1758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 223: /* type_specifier_nonarray: MAT2 */ +#line 1759 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6668 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6874 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 224: -#line 1763 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 224: /* type_specifier_nonarray: MAT3 */ +#line 1764 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6884 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 225: -#line 1768 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 225: /* type_specifier_nonarray: MAT4 */ +#line 1769 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6688 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6894 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 226: -#line 1773 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 226: /* type_specifier_nonarray: MAT2X2 */ +#line 1774 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6698 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6904 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 227: -#line 1778 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 227: /* type_specifier_nonarray: MAT2X3 */ +#line 1779 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 6708 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6914 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 228: -#line 1783 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 228: /* type_specifier_nonarray: MAT2X4 */ +#line 1784 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 6718 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6924 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 229: -#line 1788 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 229: /* type_specifier_nonarray: MAT3X2 */ +#line 1789 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 6728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6934 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 230: -#line 1793 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 230: /* type_specifier_nonarray: MAT3X3 */ +#line 1794 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6738 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6944 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 231: -#line 1798 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 231: /* type_specifier_nonarray: MAT3X4 */ +#line 1799 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 6748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6954 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 232: -#line 1803 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 232: /* type_specifier_nonarray: MAT4X2 */ +#line 1804 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 6758 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6964 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 233: -#line 1808 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 233: /* type_specifier_nonarray: MAT4X3 */ +#line 1809 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 6768 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6974 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 234: -#line 1813 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 234: /* type_specifier_nonarray: MAT4X4 */ +#line 1814 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6778 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6984 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 235: -#line 1819 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 235: /* type_specifier_nonarray: DOUBLE */ +#line 1820 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6790 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 6996 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 236: -#line 1826 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 236: /* type_specifier_nonarray: FLOAT16_T */ +#line 1827 "glslang/MachineIndependent/glslang.y" + { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 6800 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7006 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 237: -#line 1831 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 237: /* type_specifier_nonarray: FLOAT32_T */ +#line 1832 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7016 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 238: -#line 1836 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 238: /* type_specifier_nonarray: FLOAT64_T */ +#line 1837 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6820 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7026 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 239: -#line 1841 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 239: /* type_specifier_nonarray: INT8_T */ +#line 1842 "glslang/MachineIndependent/glslang.y" + { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 6830 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7036 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 240: -#line 1846 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 240: /* type_specifier_nonarray: UINT8_T */ +#line 1847 "glslang/MachineIndependent/glslang.y" + { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 6840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7046 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 241: -#line 1851 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 241: /* type_specifier_nonarray: INT16_T */ +#line 1852 "glslang/MachineIndependent/glslang.y" + { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 6850 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7056 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 242: -#line 1856 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 242: /* type_specifier_nonarray: UINT16_T */ +#line 1857 "glslang/MachineIndependent/glslang.y" + { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 6860 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7066 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 243: -#line 1861 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 243: /* type_specifier_nonarray: INT32_T */ +#line 1862 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6870 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7076 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 244: -#line 1866 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 244: /* type_specifier_nonarray: UINT32_T */ +#line 1867 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6880 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7086 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 245: -#line 1871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 245: /* type_specifier_nonarray: INT64_T */ +#line 1872 "glslang/MachineIndependent/glslang.y" + { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 6890 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7096 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 246: -#line 1876 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 246: /* type_specifier_nonarray: UINT64_T */ +#line 1877 "glslang/MachineIndependent/glslang.y" + { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 6900 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7106 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 247: -#line 1881 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 247: /* type_specifier_nonarray: DVEC2 */ +#line 1882 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); @@ -6909,12 +7115,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 6913 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7119 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 248: -#line 1889 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 248: /* type_specifier_nonarray: DVEC3 */ +#line 1890 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); @@ -6922,12 +7128,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 6926 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7132 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 249: -#line 1897 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 249: /* type_specifier_nonarray: DVEC4 */ +#line 1898 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double vector"); @@ -6935,375 +7141,375 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 6939 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7145 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 250: -#line 1905 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 250: /* type_specifier_nonarray: F16VEC2 */ +#line 1906 "glslang/MachineIndependent/glslang.y" + { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 6950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7156 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 251: -#line 1911 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 251: /* type_specifier_nonarray: F16VEC3 */ +#line 1912 "glslang/MachineIndependent/glslang.y" + { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 6961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7167 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 252: -#line 1917 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 252: /* type_specifier_nonarray: F16VEC4 */ +#line 1918 "glslang/MachineIndependent/glslang.y" + { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 6972 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7178 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 253: -#line 1923 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 253: /* type_specifier_nonarray: F32VEC2 */ +#line 1924 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6983 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7189 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 254: -#line 1929 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 254: /* type_specifier_nonarray: F32VEC3 */ +#line 1930 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6994 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7200 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 255: -#line 1935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 255: /* type_specifier_nonarray: F32VEC4 */ +#line 1936 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7005 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7211 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 256: -#line 1941 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 256: /* type_specifier_nonarray: F64VEC2 */ +#line 1942 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7016 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7222 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 257: -#line 1947 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 257: /* type_specifier_nonarray: F64VEC3 */ +#line 1948 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7027 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7233 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 258: -#line 1953 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 258: /* type_specifier_nonarray: F64VEC4 */ +#line 1954 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7038 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7244 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 259: -#line 1959 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 259: /* type_specifier_nonarray: I8VEC2 */ +#line 1960 "glslang/MachineIndependent/glslang.y" + { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 7049 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7255 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 260: -#line 1965 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 260: /* type_specifier_nonarray: I8VEC3 */ +#line 1966 "glslang/MachineIndependent/glslang.y" + { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 7060 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7266 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 261: -#line 1971 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 261: /* type_specifier_nonarray: I8VEC4 */ +#line 1972 "glslang/MachineIndependent/glslang.y" + { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 7071 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7277 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 262: -#line 1977 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 262: /* type_specifier_nonarray: I16VEC2 */ +#line 1978 "glslang/MachineIndependent/glslang.y" + { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 7082 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7288 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 263: -#line 1983 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 263: /* type_specifier_nonarray: I16VEC3 */ +#line 1984 "glslang/MachineIndependent/glslang.y" + { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 7093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7299 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 264: -#line 1989 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 264: /* type_specifier_nonarray: I16VEC4 */ +#line 1990 "glslang/MachineIndependent/glslang.y" + { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 7104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7310 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 265: -#line 1995 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 265: /* type_specifier_nonarray: I32VEC2 */ +#line 1996 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 7115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7321 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 266: -#line 2001 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 266: /* type_specifier_nonarray: I32VEC3 */ +#line 2002 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 7126 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7332 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 267: -#line 2007 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 267: /* type_specifier_nonarray: I32VEC4 */ +#line 2008 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 7137 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7343 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 268: -#line 2013 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 268: /* type_specifier_nonarray: I64VEC2 */ +#line 2014 "glslang/MachineIndependent/glslang.y" + { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 7148 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7354 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 269: -#line 2019 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 269: /* type_specifier_nonarray: I64VEC3 */ +#line 2020 "glslang/MachineIndependent/glslang.y" + { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 7159 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7365 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 270: -#line 2025 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 270: /* type_specifier_nonarray: I64VEC4 */ +#line 2026 "glslang/MachineIndependent/glslang.y" + { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 7170 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7376 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 271: -#line 2031 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 271: /* type_specifier_nonarray: U8VEC2 */ +#line 2032 "glslang/MachineIndependent/glslang.y" + { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 7181 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7387 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 272: -#line 2037 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 272: /* type_specifier_nonarray: U8VEC3 */ +#line 2038 "glslang/MachineIndependent/glslang.y" + { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 7192 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7398 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 273: -#line 2043 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 273: /* type_specifier_nonarray: U8VEC4 */ +#line 2044 "glslang/MachineIndependent/glslang.y" + { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 7203 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7409 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 274: -#line 2049 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 274: /* type_specifier_nonarray: U16VEC2 */ +#line 2050 "glslang/MachineIndependent/glslang.y" + { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 7214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7420 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 275: -#line 2055 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 275: /* type_specifier_nonarray: U16VEC3 */ +#line 2056 "glslang/MachineIndependent/glslang.y" + { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 7225 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7431 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 276: -#line 2061 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 276: /* type_specifier_nonarray: U16VEC4 */ +#line 2062 "glslang/MachineIndependent/glslang.y" + { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 7236 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7442 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 277: -#line 2067 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 277: /* type_specifier_nonarray: U32VEC2 */ +#line 2068 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7453 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 278: -#line 2073 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 278: /* type_specifier_nonarray: U32VEC3 */ +#line 2074 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7258 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7464 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 279: -#line 2079 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 279: /* type_specifier_nonarray: U32VEC4 */ +#line 2080 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7269 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7475 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 280: -#line 2085 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 280: /* type_specifier_nonarray: U64VEC2 */ +#line 2086 "glslang/MachineIndependent/glslang.y" + { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 7280 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7486 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 281: -#line 2091 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 281: /* type_specifier_nonarray: U64VEC3 */ +#line 2092 "glslang/MachineIndependent/glslang.y" + { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 7291 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7497 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 282: -#line 2097 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 282: /* type_specifier_nonarray: U64VEC4 */ +#line 2098 "glslang/MachineIndependent/glslang.y" + { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 7302 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7508 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 283: -#line 2103 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 283: /* type_specifier_nonarray: DMAT2 */ +#line 2104 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7311,12 +7517,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7315 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7521 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 284: -#line 2111 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 284: /* type_specifier_nonarray: DMAT3 */ +#line 2112 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7324,12 +7530,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7328 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7534 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 285: -#line 2119 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 285: /* type_specifier_nonarray: DMAT4 */ +#line 2120 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7337,12 +7543,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7341 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7547 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 286: -#line 2127 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 286: /* type_specifier_nonarray: DMAT2X2 */ +#line 2128 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7350,12 +7556,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7560 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 287: -#line 2135 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 287: /* type_specifier_nonarray: DMAT2X3 */ +#line 2136 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7363,12 +7569,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7573 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 288: -#line 2143 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 288: /* type_specifier_nonarray: DMAT2X4 */ +#line 2144 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7376,12 +7582,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7586 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 289: -#line 2151 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 289: /* type_specifier_nonarray: DMAT3X2 */ +#line 2152 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7389,12 +7595,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7393 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7599 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 290: -#line 2159 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 290: /* type_specifier_nonarray: DMAT3X3 */ +#line 2160 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7402,12 +7608,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7406 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7612 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 291: -#line 2167 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 291: /* type_specifier_nonarray: DMAT3X4 */ +#line 2168 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7415,12 +7621,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7419 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7625 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 292: -#line 2175 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 292: /* type_specifier_nonarray: DMAT4X2 */ +#line 2176 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7428,12 +7634,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7432 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7638 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 293: -#line 2183 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 293: /* type_specifier_nonarray: DMAT4X3 */ +#line 2184 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7441,12 +7647,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7445 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7651 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 294: -#line 2191 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 294: /* type_specifier_nonarray: DMAT4X4 */ +#line 2192 "glslang/MachineIndependent/glslang.y" + { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) parseContext.doubleCheck((yyvsp[0].lex).loc, "double matrix"); @@ -7454,2340 +7660,2340 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7458 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7664 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 295: -#line 2199 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 295: /* type_specifier_nonarray: F16MAT2 */ +#line 2200 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7469 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7675 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 296: -#line 2205 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 296: /* type_specifier_nonarray: F16MAT3 */ +#line 2206 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7480 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7686 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 297: -#line 2211 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 297: /* type_specifier_nonarray: F16MAT4 */ +#line 2212 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7697 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 298: -#line 2217 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 298: /* type_specifier_nonarray: F16MAT2X2 */ +#line 2218 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7502 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7708 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 299: -#line 2223 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 299: /* type_specifier_nonarray: F16MAT2X3 */ +#line 2224 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 7513 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7719 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 300: -#line 2229 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 300: /* type_specifier_nonarray: F16MAT2X4 */ +#line 2230 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 7524 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7730 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 301: -#line 2235 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 301: /* type_specifier_nonarray: F16MAT3X2 */ +#line 2236 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 7535 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7741 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 302: -#line 2241 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 302: /* type_specifier_nonarray: F16MAT3X3 */ +#line 2242 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7752 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 303: -#line 2247 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 303: /* type_specifier_nonarray: F16MAT3X4 */ +#line 2248 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 7557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7763 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 304: -#line 2253 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 304: /* type_specifier_nonarray: F16MAT4X2 */ +#line 2254 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 7568 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7774 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 305: -#line 2259 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 305: /* type_specifier_nonarray: F16MAT4X3 */ +#line 2260 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 7579 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7785 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 306: -#line 2265 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 306: /* type_specifier_nonarray: F16MAT4X4 */ +#line 2266 "glslang/MachineIndependent/glslang.y" + { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7590 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7796 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 307: -#line 2271 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 307: /* type_specifier_nonarray: F32MAT2 */ +#line 2272 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7807 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 308: -#line 2277 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 308: /* type_specifier_nonarray: F32MAT3 */ +#line 2278 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7612 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7818 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 309: -#line 2283 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 309: /* type_specifier_nonarray: F32MAT4 */ +#line 2284 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7623 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7829 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 310: -#line 2289 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 310: /* type_specifier_nonarray: F32MAT2X2 */ +#line 2290 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7634 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7840 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 311: -#line 2295 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 311: /* type_specifier_nonarray: F32MAT2X3 */ +#line 2296 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7851 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 312: -#line 2301 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 312: /* type_specifier_nonarray: F32MAT2X4 */ +#line 2302 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7656 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7862 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 313: -#line 2307 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 313: /* type_specifier_nonarray: F32MAT3X2 */ +#line 2308 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7667 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7873 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 314: -#line 2313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 314: /* type_specifier_nonarray: F32MAT3X3 */ +#line 2314 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7678 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7884 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 315: -#line 2319 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 315: /* type_specifier_nonarray: F32MAT3X4 */ +#line 2320 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7689 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7895 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 316: -#line 2325 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 316: /* type_specifier_nonarray: F32MAT4X2 */ +#line 2326 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7700 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7906 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 317: -#line 2331 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 317: /* type_specifier_nonarray: F32MAT4X3 */ +#line 2332 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7711 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7917 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 318: -#line 2337 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 318: /* type_specifier_nonarray: F32MAT4X4 */ +#line 2338 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7722 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7928 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 319: -#line 2343 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 319: /* type_specifier_nonarray: F64MAT2 */ +#line 2344 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7733 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7939 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 320: -#line 2349 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 320: /* type_specifier_nonarray: F64MAT3 */ +#line 2350 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7950 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 321: -#line 2355 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 321: /* type_specifier_nonarray: F64MAT4 */ +#line 2356 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7755 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7961 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 322: -#line 2361 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 322: /* type_specifier_nonarray: F64MAT2X2 */ +#line 2362 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7972 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 323: -#line 2367 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 323: /* type_specifier_nonarray: F64MAT2X3 */ +#line 2368 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7777 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7983 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 324: -#line 2373 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 324: /* type_specifier_nonarray: F64MAT2X4 */ +#line 2374 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7788 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 7994 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 325: -#line 2379 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 325: /* type_specifier_nonarray: F64MAT3X2 */ +#line 2380 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7799 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8005 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 326: -#line 2385 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 326: /* type_specifier_nonarray: F64MAT3X3 */ +#line 2386 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7810 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8016 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 327: -#line 2391 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 327: /* type_specifier_nonarray: F64MAT3X4 */ +#line 2392 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7821 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8027 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 328: -#line 2397 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 328: /* type_specifier_nonarray: F64MAT4X2 */ +#line 2398 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7832 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8038 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 329: -#line 2403 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 329: /* type_specifier_nonarray: F64MAT4X3 */ +#line 2404 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7843 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8049 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 330: -#line 2409 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 330: /* type_specifier_nonarray: F64MAT4X4 */ +#line 2410 "glslang/MachineIndependent/glslang.y" + { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7854 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8060 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 331: -#line 2415 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 331: /* type_specifier_nonarray: ACCSTRUCTNV */ +#line 2416 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 7863 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8069 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 332: -#line 2419 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 332: /* type_specifier_nonarray: ACCSTRUCTEXT */ +#line 2420 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 7872 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8078 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 333: -#line 2423 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 333: /* type_specifier_nonarray: RAYQUERYEXT */ +#line 2424 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 7881 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8087 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 334: -#line 2427 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 334: /* type_specifier_nonarray: ATOMIC_UINT */ +#line 2428 "glslang/MachineIndependent/glslang.y" + { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 7891 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8097 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 335: -#line 2432 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 335: /* type_specifier_nonarray: SAMPLER1D */ +#line 2433 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 7901 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8107 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 336: -#line 2438 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 336: /* type_specifier_nonarray: SAMPLER2D */ +#line 2439 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 7911 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8117 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 337: -#line 2443 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 337: /* type_specifier_nonarray: SAMPLER3D */ +#line 2444 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 7921 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8127 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 338: -#line 2448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 338: /* type_specifier_nonarray: SAMPLERCUBE */ +#line 2449 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 7931 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8137 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 339: -#line 2453 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 339: /* type_specifier_nonarray: SAMPLER2DSHADOW */ +#line 2454 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 7941 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8147 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 340: -#line 2458 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 340: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ +#line 2459 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 7951 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8157 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 341: -#line 2463 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 341: /* type_specifier_nonarray: SAMPLER2DARRAY */ +#line 2464 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 7961 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8167 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 342: -#line 2468 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 342: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ +#line 2469 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 7971 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8177 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 343: -#line 2474 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 343: /* type_specifier_nonarray: SAMPLER1DSHADOW */ +#line 2475 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 7981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8187 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 344: -#line 2479 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 344: /* type_specifier_nonarray: SAMPLER1DARRAY */ +#line 2480 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 7991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8197 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 345: -#line 2484 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 345: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ +#line 2485 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 8001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8207 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 346: -#line 2489 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 346: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ +#line 2490 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 8011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8217 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 347: -#line 2494 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 347: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ +#line 2495 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 8021 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8227 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 348: -#line 2499 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 348: /* type_specifier_nonarray: F16SAMPLER1D */ +#line 2500 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 8032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8238 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 349: -#line 2505 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 349: /* type_specifier_nonarray: F16SAMPLER2D */ +#line 2506 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 8043 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8249 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 350: -#line 2511 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 350: /* type_specifier_nonarray: F16SAMPLER3D */ +#line 2512 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 8054 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8260 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 351: -#line 2517 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 351: /* type_specifier_nonarray: F16SAMPLERCUBE */ +#line 2518 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 8065 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8271 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 352: -#line 2523 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 352: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ +#line 2524 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 8076 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8282 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 353: -#line 2529 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 353: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ +#line 2530 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 8087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8293 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 354: -#line 2535 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 354: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ +#line 2536 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 8098 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8304 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 355: -#line 2541 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 355: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ +#line 2542 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 8109 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8315 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 356: -#line 2547 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 356: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ +#line 2548 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 8120 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8326 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 357: -#line 2553 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 357: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ +#line 2554 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 8131 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8337 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 358: -#line 2559 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 358: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ +#line 2560 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 8142 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8348 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 359: -#line 2565 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 359: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ +#line 2566 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 8153 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8359 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 360: -#line 2571 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 360: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ +#line 2572 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 8164 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8370 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 361: -#line 2577 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 361: /* type_specifier_nonarray: ISAMPLER1D */ +#line 2578 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 8174 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8380 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 362: -#line 2583 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 362: /* type_specifier_nonarray: ISAMPLER2D */ +#line 2584 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 8184 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8390 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 363: -#line 2588 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 363: /* type_specifier_nonarray: ISAMPLER3D */ +#line 2589 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 8194 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8400 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 364: -#line 2593 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 364: /* type_specifier_nonarray: ISAMPLERCUBE */ +#line 2594 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 8204 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8410 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 365: -#line 2598 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 365: /* type_specifier_nonarray: ISAMPLER2DARRAY */ +#line 2599 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 8214 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8420 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 366: -#line 2603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 366: /* type_specifier_nonarray: USAMPLER2D */ +#line 2604 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 8224 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8430 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 367: -#line 2608 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 367: /* type_specifier_nonarray: USAMPLER3D */ +#line 2609 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 8234 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8440 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 368: -#line 2613 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 368: /* type_specifier_nonarray: USAMPLERCUBE */ +#line 2614 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 8244 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8450 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 369: -#line 2619 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 369: /* type_specifier_nonarray: ISAMPLER1DARRAY */ +#line 2620 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 8254 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8460 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 370: -#line 2624 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 370: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ +#line 2625 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 8264 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8470 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 371: -#line 2629 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 371: /* type_specifier_nonarray: USAMPLER1D */ +#line 2630 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 8274 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8480 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 372: -#line 2634 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 372: /* type_specifier_nonarray: USAMPLER1DARRAY */ +#line 2635 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 8284 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8490 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 373: -#line 2639 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 373: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ +#line 2640 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 8294 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8500 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 374: -#line 2644 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 374: /* type_specifier_nonarray: TEXTURECUBEARRAY */ +#line 2645 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 8304 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8510 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 375: -#line 2649 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 375: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ +#line 2650 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8314 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8520 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 376: -#line 2654 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 376: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ +#line 2655 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8324 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8530 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 377: -#line 2660 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 377: /* type_specifier_nonarray: USAMPLER2DARRAY */ +#line 2661 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 8334 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8540 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 378: -#line 2665 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 378: /* type_specifier_nonarray: TEXTURE2D */ +#line 2666 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 8344 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8550 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 379: -#line 2670 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 379: /* type_specifier_nonarray: TEXTURE3D */ +#line 2671 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 8354 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8560 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 380: -#line 2675 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 380: /* type_specifier_nonarray: TEXTURE2DARRAY */ +#line 2676 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 8364 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8570 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 381: -#line 2680 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 381: /* type_specifier_nonarray: TEXTURECUBE */ +#line 2681 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 8374 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8580 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 382: -#line 2685 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 382: /* type_specifier_nonarray: ITEXTURE2D */ +#line 2686 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 8384 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8590 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 383: -#line 2690 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 383: /* type_specifier_nonarray: ITEXTURE3D */ +#line 2691 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 8394 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8600 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 384: -#line 2695 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 384: /* type_specifier_nonarray: ITEXTURECUBE */ +#line 2696 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 8404 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8610 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 385: -#line 2700 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 385: /* type_specifier_nonarray: ITEXTURE2DARRAY */ +#line 2701 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 8414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8620 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 386: -#line 2705 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 386: /* type_specifier_nonarray: UTEXTURE2D */ +#line 2706 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8424 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8630 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 387: -#line 2710 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 387: /* type_specifier_nonarray: UTEXTURE3D */ +#line 2711 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8434 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8640 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 388: -#line 2715 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 388: /* type_specifier_nonarray: UTEXTURECUBE */ +#line 2716 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8650 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 389: -#line 2720 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 389: /* type_specifier_nonarray: UTEXTURE2DARRAY */ +#line 2721 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8454 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8660 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 390: -#line 2725 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 390: /* type_specifier_nonarray: SAMPLER */ +#line 2726 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 8464 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8670 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 391: -#line 2730 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 391: /* type_specifier_nonarray: SAMPLERSHADOW */ +#line 2731 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 8474 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8680 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 392: -#line 2736 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 392: /* type_specifier_nonarray: SAMPLER2DRECT */ +#line 2737 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 8484 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8690 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 393: -#line 2741 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 393: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ +#line 2742 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 8494 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8700 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 394: -#line 2746 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 394: /* type_specifier_nonarray: F16SAMPLER2DRECT */ +#line 2747 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 8505 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8711 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 395: -#line 2752 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 395: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ +#line 2753 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 8516 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8722 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 396: -#line 2758 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 396: /* type_specifier_nonarray: ISAMPLER2DRECT */ +#line 2759 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 8526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8732 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 397: -#line 2763 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 397: /* type_specifier_nonarray: USAMPLER2DRECT */ +#line 2764 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 8536 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8742 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 398: -#line 2768 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 398: /* type_specifier_nonarray: SAMPLERBUFFER */ +#line 2769 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 8546 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8752 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 399: -#line 2773 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 399: /* type_specifier_nonarray: F16SAMPLERBUFFER */ +#line 2774 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 8557 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8763 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 400: -#line 2779 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 400: /* type_specifier_nonarray: ISAMPLERBUFFER */ +#line 2780 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 8567 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8773 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 401: -#line 2784 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 401: /* type_specifier_nonarray: USAMPLERBUFFER */ +#line 2785 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 8577 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8783 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 402: -#line 2789 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 402: /* type_specifier_nonarray: SAMPLER2DMS */ +#line 2790 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 8587 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8793 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 403: -#line 2794 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 403: /* type_specifier_nonarray: F16SAMPLER2DMS */ +#line 2795 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 8598 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8804 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 404: -#line 2800 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 404: /* type_specifier_nonarray: ISAMPLER2DMS */ +#line 2801 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 8608 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8814 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 405: -#line 2805 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 405: /* type_specifier_nonarray: USAMPLER2DMS */ +#line 2806 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 8618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8824 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 406: -#line 2810 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 406: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ +#line 2811 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 8628 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8834 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 407: -#line 2815 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 407: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ +#line 2816 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 8639 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8845 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 408: -#line 2821 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 408: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ +#line 2822 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 8649 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8855 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 409: -#line 2826 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 409: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ +#line 2827 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 8659 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8865 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 410: -#line 2831 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 410: /* type_specifier_nonarray: TEXTURE1D */ +#line 2832 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 8669 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8875 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 411: -#line 2836 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 411: /* type_specifier_nonarray: F16TEXTURE1D */ +#line 2837 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 8680 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8886 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 412: -#line 2842 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 412: /* type_specifier_nonarray: F16TEXTURE2D */ +#line 2843 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 8691 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8897 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 413: -#line 2848 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 413: /* type_specifier_nonarray: F16TEXTURE3D */ +#line 2849 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 8702 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8908 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 414: -#line 2854 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 414: /* type_specifier_nonarray: F16TEXTURECUBE */ +#line 2855 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 8713 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8919 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 415: -#line 2860 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 415: /* type_specifier_nonarray: TEXTURE1DARRAY */ +#line 2861 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 8723 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8929 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 416: -#line 2865 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 416: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ +#line 2866 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 8734 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8940 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 417: -#line 2871 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 417: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ +#line 2872 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 8745 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8951 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 418: -#line 2877 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 418: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ +#line 2878 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 8756 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8962 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 419: -#line 2883 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 419: /* type_specifier_nonarray: ITEXTURE1D */ +#line 2884 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 8766 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8972 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 420: -#line 2888 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 420: /* type_specifier_nonarray: ITEXTURE1DARRAY */ +#line 2889 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 8776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8982 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 421: -#line 2893 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 421: /* type_specifier_nonarray: UTEXTURE1D */ +#line 2894 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 8786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 8992 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 422: -#line 2898 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 422: /* type_specifier_nonarray: UTEXTURE1DARRAY */ +#line 2899 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 8796 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9002 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 423: -#line 2903 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 423: /* type_specifier_nonarray: TEXTURE2DRECT */ +#line 2904 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 8806 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9012 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 424: -#line 2908 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 424: /* type_specifier_nonarray: F16TEXTURE2DRECT */ +#line 2909 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 8817 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9023 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 425: -#line 2914 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 425: /* type_specifier_nonarray: ITEXTURE2DRECT */ +#line 2915 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 8827 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9033 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 426: -#line 2919 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 426: /* type_specifier_nonarray: UTEXTURE2DRECT */ +#line 2920 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 8837 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9043 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 427: -#line 2924 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 427: /* type_specifier_nonarray: TEXTUREBUFFER */ +#line 2925 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 8847 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9053 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 428: -#line 2929 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 428: /* type_specifier_nonarray: F16TEXTUREBUFFER */ +#line 2930 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 8858 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9064 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 429: -#line 2935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 429: /* type_specifier_nonarray: ITEXTUREBUFFER */ +#line 2936 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 8868 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9074 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 430: -#line 2940 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 430: /* type_specifier_nonarray: UTEXTUREBUFFER */ +#line 2941 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 8878 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9084 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 431: -#line 2945 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 431: /* type_specifier_nonarray: TEXTURE2DMS */ +#line 2946 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 8888 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9094 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 432: -#line 2950 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 432: /* type_specifier_nonarray: F16TEXTURE2DMS */ +#line 2951 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 8899 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9105 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 433: -#line 2956 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 433: /* type_specifier_nonarray: ITEXTURE2DMS */ +#line 2957 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 8909 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9115 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 434: -#line 2961 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 434: /* type_specifier_nonarray: UTEXTURE2DMS */ +#line 2962 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 8919 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9125 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 435: -#line 2966 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 435: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ +#line 2967 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 8929 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9135 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 436: -#line 2971 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 436: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ +#line 2972 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 8940 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9146 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 437: -#line 2977 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 437: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ +#line 2978 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 8950 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9156 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 438: -#line 2982 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 438: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ +#line 2983 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 8960 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9166 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 439: -#line 2987 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 439: /* type_specifier_nonarray: IMAGE1D */ +#line 2988 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 8970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9176 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 440: -#line 2992 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 440: /* type_specifier_nonarray: F16IMAGE1D */ +#line 2993 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 8981 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9187 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 441: -#line 2998 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 441: /* type_specifier_nonarray: IIMAGE1D */ +#line 2999 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 8991 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9197 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 442: -#line 3003 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 442: /* type_specifier_nonarray: UIMAGE1D */ +#line 3004 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 9001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9207 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 443: -#line 3008 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 443: /* type_specifier_nonarray: IMAGE2D */ +#line 3009 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 9011 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9217 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 444: -#line 3013 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 444: /* type_specifier_nonarray: F16IMAGE2D */ +#line 3014 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 9022 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9228 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 445: -#line 3019 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 445: /* type_specifier_nonarray: IIMAGE2D */ +#line 3020 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 9032 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9238 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 446: -#line 3024 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 446: /* type_specifier_nonarray: UIMAGE2D */ +#line 3025 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 9042 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9248 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 447: -#line 3029 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 447: /* type_specifier_nonarray: IMAGE3D */ +#line 3030 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 9052 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9258 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 448: -#line 3034 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 448: /* type_specifier_nonarray: F16IMAGE3D */ +#line 3035 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 9063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9269 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 449: -#line 3040 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 449: /* type_specifier_nonarray: IIMAGE3D */ +#line 3041 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 9073 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9279 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 450: -#line 3045 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 450: /* type_specifier_nonarray: UIMAGE3D */ +#line 3046 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 9083 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9289 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 451: -#line 3050 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 451: /* type_specifier_nonarray: IMAGE2DRECT */ +#line 3051 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 9093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9299 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 452: -#line 3055 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 452: /* type_specifier_nonarray: F16IMAGE2DRECT */ +#line 3056 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 9104 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9310 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 453: -#line 3061 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 453: /* type_specifier_nonarray: IIMAGE2DRECT */ +#line 3062 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 9114 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9320 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 454: -#line 3066 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 454: /* type_specifier_nonarray: UIMAGE2DRECT */ +#line 3067 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 9124 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9330 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 455: -#line 3071 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 455: /* type_specifier_nonarray: IMAGECUBE */ +#line 3072 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 9134 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9340 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 456: -#line 3076 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 456: /* type_specifier_nonarray: F16IMAGECUBE */ +#line 3077 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 9145 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9351 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 457: -#line 3082 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 457: /* type_specifier_nonarray: IIMAGECUBE */ +#line 3083 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 9155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9361 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 458: -#line 3087 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 458: /* type_specifier_nonarray: UIMAGECUBE */ +#line 3088 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 9165 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9371 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 459: -#line 3092 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 459: /* type_specifier_nonarray: IMAGEBUFFER */ +#line 3093 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 9175 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9381 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 460: -#line 3097 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 460: /* type_specifier_nonarray: F16IMAGEBUFFER */ +#line 3098 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 9186 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9392 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 461: -#line 3103 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 461: /* type_specifier_nonarray: IIMAGEBUFFER */ +#line 3104 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 9196 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9402 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 462: -#line 3108 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 462: /* type_specifier_nonarray: UIMAGEBUFFER */ +#line 3109 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 9206 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9412 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 463: -#line 3113 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 463: /* type_specifier_nonarray: IMAGE1DARRAY */ +#line 3114 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 9216 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9422 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 464: -#line 3118 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 464: /* type_specifier_nonarray: F16IMAGE1DARRAY */ +#line 3119 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 9227 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9433 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 465: -#line 3124 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 465: /* type_specifier_nonarray: IIMAGE1DARRAY */ +#line 3125 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 9237 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9443 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 466: -#line 3129 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 466: /* type_specifier_nonarray: UIMAGE1DARRAY */ +#line 3130 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 9247 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9453 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 467: -#line 3134 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 467: /* type_specifier_nonarray: IMAGE2DARRAY */ +#line 3135 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 9257 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9463 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 468: -#line 3139 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 468: /* type_specifier_nonarray: F16IMAGE2DARRAY */ +#line 3140 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 9268 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9474 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 469: -#line 3145 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 469: /* type_specifier_nonarray: IIMAGE2DARRAY */ +#line 3146 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 9278 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9484 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 470: -#line 3150 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 470: /* type_specifier_nonarray: UIMAGE2DARRAY */ +#line 3151 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 9288 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9494 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 471: -#line 3155 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 471: /* type_specifier_nonarray: IMAGECUBEARRAY */ +#line 3156 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 9298 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9504 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 472: -#line 3160 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 472: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ +#line 3161 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 9309 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9515 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 473: -#line 3166 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 473: /* type_specifier_nonarray: IIMAGECUBEARRAY */ +#line 3167 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 9319 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9525 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 474: -#line 3171 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 474: /* type_specifier_nonarray: UIMAGECUBEARRAY */ +#line 3172 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 9329 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9535 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 475: -#line 3176 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 475: /* type_specifier_nonarray: IMAGE2DMS */ +#line 3177 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 9339 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9545 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 476: -#line 3181 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 476: /* type_specifier_nonarray: F16IMAGE2DMS */ +#line 3182 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 9350 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9556 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 477: -#line 3187 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 477: /* type_specifier_nonarray: IIMAGE2DMS */ +#line 3188 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 9360 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9566 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 478: -#line 3192 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 478: /* type_specifier_nonarray: UIMAGE2DMS */ +#line 3193 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 9370 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9576 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 479: -#line 3197 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 479: /* type_specifier_nonarray: IMAGE2DMSARRAY */ +#line 3198 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 9380 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9586 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 480: -#line 3202 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 480: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ +#line 3203 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 9391 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9597 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 481: -#line 3208 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 481: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ +#line 3209 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 9401 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9607 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 482: -#line 3213 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 482: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ +#line 3214 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 9411 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9617 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 483: -#line 3218 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 483: /* type_specifier_nonarray: I64IMAGE1D */ +#line 3219 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D); } -#line 9421 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9627 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 484: -#line 3223 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 484: /* type_specifier_nonarray: U64IMAGE1D */ +#line 3224 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D); } -#line 9431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9637 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 485: -#line 3228 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 485: /* type_specifier_nonarray: I64IMAGE2D */ +#line 3229 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D); } -#line 9441 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9647 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 486: -#line 3233 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 486: /* type_specifier_nonarray: U64IMAGE2D */ +#line 3234 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D); } -#line 9451 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9657 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 487: -#line 3238 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 487: /* type_specifier_nonarray: I64IMAGE3D */ +#line 3239 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D); } -#line 9461 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9667 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 488: -#line 3243 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 488: /* type_specifier_nonarray: U64IMAGE3D */ +#line 3244 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D); } -#line 9471 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9677 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 489: -#line 3248 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 489: /* type_specifier_nonarray: I64IMAGE2DRECT */ +#line 3249 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect); } -#line 9481 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9687 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 490: -#line 3253 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 490: /* type_specifier_nonarray: U64IMAGE2DRECT */ +#line 3254 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect); } -#line 9491 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9697 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 491: -#line 3258 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 491: /* type_specifier_nonarray: I64IMAGECUBE */ +#line 3259 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube); } -#line 9501 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9707 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 492: -#line 3263 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 492: /* type_specifier_nonarray: U64IMAGECUBE */ +#line 3264 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube); } -#line 9511 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9717 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 493: -#line 3268 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 493: /* type_specifier_nonarray: I64IMAGEBUFFER */ +#line 3269 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer); } -#line 9521 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9727 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 494: -#line 3273 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 494: /* type_specifier_nonarray: U64IMAGEBUFFER */ +#line 3274 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer); } -#line 9531 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9737 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 495: -#line 3278 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 495: /* type_specifier_nonarray: I64IMAGE1DARRAY */ +#line 3279 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true); } -#line 9541 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9747 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 496: -#line 3283 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 496: /* type_specifier_nonarray: U64IMAGE1DARRAY */ +#line 3284 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true); } -#line 9551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9757 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 497: -#line 3288 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 497: /* type_specifier_nonarray: I64IMAGE2DARRAY */ +#line 3289 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true); } -#line 9561 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9767 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 498: -#line 3293 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 498: /* type_specifier_nonarray: U64IMAGE2DARRAY */ +#line 3294 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true); } -#line 9571 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9777 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 499: -#line 3298 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 499: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ +#line 3299 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true); } -#line 9581 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9787 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 500: -#line 3303 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 500: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ +#line 3304 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true); } -#line 9591 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9797 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 501: -#line 3308 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 501: /* type_specifier_nonarray: I64IMAGE2DMS */ +#line 3309 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true); } -#line 9601 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9807 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 502: -#line 3313 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 502: /* type_specifier_nonarray: U64IMAGE2DMS */ +#line 3314 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true); } -#line 9611 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9817 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 503: -#line 3318 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 503: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ +#line 3319 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true); } -#line 9621 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9827 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 504: -#line 3323 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 504: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ +#line 3324 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true); } -#line 9631 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9837 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 505: -#line 3328 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { // GL_OES_EGL_image_external + case 505: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ +#line 3329 "glslang/MachineIndependent/glslang.y" + { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 9642 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9848 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 506: -#line 3334 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { // GL_EXT_YUV_target + case 506: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ +#line 3335 "glslang/MachineIndependent/glslang.y" + { // GL_EXT_YUV_target (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 9653 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9859 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 507: -#line 3340 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 507: /* type_specifier_nonarray: SUBPASSINPUT */ +#line 3341 "glslang/MachineIndependent/glslang.y" + { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 9664 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9870 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 508: -#line 3346 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 508: /* type_specifier_nonarray: SUBPASSINPUTMS */ +#line 3347 "glslang/MachineIndependent/glslang.y" + { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 9675 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9881 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 509: -#line 3352 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 509: /* type_specifier_nonarray: F16SUBPASSINPUT */ +#line 3353 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 9687 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9893 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 510: -#line 3359 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 510: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ +#line 3360 "glslang/MachineIndependent/glslang.y" + { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 9699 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9905 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 511: -#line 3366 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 511: /* type_specifier_nonarray: ISUBPASSINPUT */ +#line 3367 "glslang/MachineIndependent/glslang.y" + { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 9710 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9916 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 512: -#line 3372 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 512: /* type_specifier_nonarray: ISUBPASSINPUTMS */ +#line 3373 "glslang/MachineIndependent/glslang.y" + { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 9721 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9927 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 513: -#line 3378 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 513: /* type_specifier_nonarray: USUBPASSINPUT */ +#line 3379 "glslang/MachineIndependent/glslang.y" + { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 9732 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9938 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 514: -#line 3384 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 514: /* type_specifier_nonarray: USUBPASSINPUTMS */ +#line 3385 "glslang/MachineIndependent/glslang.y" + { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 9743 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9949 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 515: -#line 3390 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 515: /* type_specifier_nonarray: FCOOPMATNV */ +#line 3391 "glslang/MachineIndependent/glslang.y" + { parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 9754 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9960 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 516: -#line 3396 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 516: /* type_specifier_nonarray: ICOOPMATNV */ +#line 3397 "glslang/MachineIndependent/glslang.y" + { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).coopmat = true; } -#line 9765 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9971 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 517: -#line 3402 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 517: /* type_specifier_nonarray: UCOOPMATNV */ +#line 3403 "glslang/MachineIndependent/glslang.y" + { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).coopmat = true; } -#line 9776 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9982 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 518: -#line 3409 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 518: /* type_specifier_nonarray: struct_specifier */ +#line 3410 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 9786 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 9992 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 519: -#line 3414 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 519: /* type_specifier_nonarray: TYPE_NAME */ +#line 3415 "glslang/MachineIndependent/glslang.y" + { // // This is for user defined type names. The lexical phase looked up the // type. @@ -9800,48 +10006,48 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 9804 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10010 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 520: -#line 3430 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 520: /* precision_qualifier: HIGH_PRECISION */ +#line 3431 "glslang/MachineIndependent/glslang.y" + { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 9814 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10020 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 521: -#line 3435 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 521: /* precision_qualifier: MEDIUM_PRECISION */ +#line 3436 "glslang/MachineIndependent/glslang.y" + { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 9824 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10030 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 522: -#line 3440 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 522: /* precision_qualifier: LOW_PRECISION */ +#line 3441 "glslang/MachineIndependent/glslang.y" + { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 9834 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10040 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 523: -#line 3448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 9840 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 523: /* $@3: %empty */ +#line 3449 "glslang/MachineIndependent/glslang.y" + { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } +#line 10046 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 524: -#line 3448 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 524: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ +#line 3449 "glslang/MachineIndependent/glslang.y" + { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); TVariable* userTypeDef = new TVariable((yyvsp[-4].lex).string, *structure, true); @@ -9852,38 +10058,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 9856 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10062 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 525: -#line 3459 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 9862 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 525: /* $@4: %empty */ +#line 3460 "glslang/MachineIndependent/glslang.y" + { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } +#line 10068 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 526: -#line 3459 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 526: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ +#line 3460 "glslang/MachineIndependent/glslang.y" + { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); (yyval.interm.type).basicType = EbtStruct; (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 9874 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10080 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 527: -#line 3469 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 527: /* struct_declaration_list: struct_declaration */ +#line 3470 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 9882 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10088 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 528: -#line 3472 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 528: /* struct_declaration_list: struct_declaration_list struct_declaration */ +#line 3473 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { for (unsigned int j = 0; j < (yyval.interm.typeList)->size(); ++j) { @@ -9893,12 +10099,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 9897 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10103 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 529: -#line 3485 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 529: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ +#line 3486 "glslang/MachineIndependent/glslang.y" + { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type"); @@ -9920,12 +10126,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 9924 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10130 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 530: -#line 3507 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 530: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ +#line 3508 "glslang/MachineIndependent/glslang.y" + { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); parseContext.profileRequires((yyvsp[-2].interm.type).loc, EEsProfile, 300, 0, "arrayed type"); @@ -9949,39 +10155,39 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 9953 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10159 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 531: -#line 3534 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 531: /* struct_declarator_list: struct_declarator */ +#line 3535 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9962 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10168 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 532: -#line 3538 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 532: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ +#line 3539 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 9970 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10176 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 533: -#line 3544 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 533: /* struct_declarator: IDENTIFIER */ +#line 3545 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 9980 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10186 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 534: -#line 3549 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 534: /* struct_declarator: IDENTIFIER array_specifier */ +#line 3550 "glslang/MachineIndependent/glslang.y" + { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.typeLine).type = new TType(EbtVoid); @@ -9989,236 +10195,236 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 9993 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10199 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 535: -#line 3560 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 535: /* initializer: assignment_expression */ +#line 3561 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10001 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10207 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 536: -#line 3564 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 536: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ +#line 3565 "glslang/MachineIndependent/glslang.y" + { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 10012 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10218 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 537: -#line 3570 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 537: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ +#line 3571 "glslang/MachineIndependent/glslang.y" + { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 10023 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10229 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 538: -#line 3581 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 538: /* initializer_list: initializer */ +#line 3582 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 10031 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10237 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 539: -#line 3584 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 539: /* initializer_list: initializer_list COMMA initializer */ +#line 3585 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 10039 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10245 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 540: -#line 3591 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10045 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 540: /* declaration_statement: declaration */ +#line 3592 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10251 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 541: -#line 3595 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10051 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 541: /* statement: compound_statement */ +#line 3596 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10257 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 542: -#line 3596 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10057 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 542: /* statement: simple_statement */ +#line 3597 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10263 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 543: -#line 3602 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10063 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 543: /* simple_statement: declaration_statement */ +#line 3603 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10269 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 544: -#line 3603 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10069 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 544: /* simple_statement: expression_statement */ +#line 3604 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10275 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 545: -#line 3604 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10075 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 545: /* simple_statement: selection_statement */ +#line 3605 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10281 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 546: -#line 3605 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10081 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 546: /* simple_statement: switch_statement */ +#line 3606 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10287 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 547: -#line 3606 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10087 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 547: /* simple_statement: case_label */ +#line 3607 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10293 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 548: -#line 3607 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10093 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 548: /* simple_statement: iteration_statement */ +#line 3608 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10299 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 549: -#line 3608 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10099 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 549: /* simple_statement: jump_statement */ +#line 3609 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10305 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 550: -#line 3610 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10105 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 550: /* simple_statement: demote_statement */ +#line 3611 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10311 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 551: -#line 3616 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 551: /* demote_statement: DEMOTE SEMICOLON */ +#line 3617 "glslang/MachineIndependent/glslang.y" + { 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 10115 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10321 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 552: -#line 3625 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = 0; } -#line 10121 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 552: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 3626 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = 0; } +#line 10327 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 553: -#line 3626 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 553: /* $@5: %empty */ +#line 3627 "glslang/MachineIndependent/glslang.y" + { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 10130 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10336 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 554: -#line 3630 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 554: /* $@6: %empty */ +#line 3631 "glslang/MachineIndependent/glslang.y" + { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 10139 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10345 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 555: -#line 3634 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 555: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ +#line 3635 "glslang/MachineIndependent/glslang.y" + { 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 10149 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10355 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 556: -#line 3642 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10155 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 556: /* statement_no_new_scope: compound_statement_no_new_scope */ +#line 3643 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10361 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 557: -#line 3643 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10161 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 557: /* statement_no_new_scope: simple_statement */ +#line 3644 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } +#line 10367 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 558: -#line 3647 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 558: /* $@7: %empty */ +#line 3648 "glslang/MachineIndependent/glslang.y" + { ++parseContext.controlFlowNestingLevel; } -#line 10169 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10375 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 559: -#line 3650 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 559: /* statement_scoped: $@7 compound_statement */ +#line 3651 "glslang/MachineIndependent/glslang.y" + { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10178 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10384 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 560: -#line 3654 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 560: /* $@8: %empty */ +#line 3655 "glslang/MachineIndependent/glslang.y" + { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10188 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10394 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 561: -#line 3659 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 561: /* statement_scoped: $@8 simple_statement */ +#line 3660 "glslang/MachineIndependent/glslang.y" + { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10199 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10405 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 562: -#line 3668 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 562: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 3669 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = 0; } -#line 10207 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10413 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 563: -#line 3671 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 563: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ +#line 3672 "glslang/MachineIndependent/glslang.y" + { 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 10217 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10423 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 564: -#line 3679 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 564: /* statement_list: statement */ +#line 3680 "glslang/MachineIndependent/glslang.y" + { (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 || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { @@ -10226,12 +10432,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 10230 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10436 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 565: -#line 3687 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 565: /* statement_list: statement_list statement */ +#line 3688 "glslang/MachineIndependent/glslang.y" + { if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { parseContext.wrapupSwitchSubsequence((yyvsp[-1].interm.intermNode) ? (yyvsp[-1].interm.intermNode)->getAsAggregate() : 0, (yyvsp[0].interm.intermNode)); @@ -10239,77 +10445,77 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 10243 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10449 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 566: -#line 3698 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = 0; } -#line 10249 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 566: /* expression_statement: SEMICOLON */ +#line 3699 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = 0; } +#line 10455 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 567: -#line 3699 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 10255 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ + case 567: /* expression_statement: expression SEMICOLON */ +#line 3700 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } +#line 10461 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 568: -#line 3703 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 568: /* selection_statement: selection_statement_nonattributed */ +#line 3704 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10263 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10469 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 569: -#line 3707 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 569: /* selection_statement: attribute selection_statement_nonattributed */ +#line 3708 "glslang/MachineIndependent/glslang.y" + { parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10272 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10478 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 570: -#line 3714 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 570: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ +#line 3715 "glslang/MachineIndependent/glslang.y" + { 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 10281 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10487 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 571: -#line 3721 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 571: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ +#line 3722 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 10290 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10496 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 572: -#line 3725 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 572: /* selection_rest_statement: statement_scoped */ +#line 3726 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 10299 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10505 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 573: -#line 3733 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 573: /* condition: expression */ +#line 3734 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 10308 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10514 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 574: -#line 3737 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 574: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 3738 "glslang/MachineIndependent/glslang.y" + { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); TType type((yyvsp[-3].interm.type)); @@ -10319,29 +10525,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 10323 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10529 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 575: -#line 3750 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 575: /* switch_statement: switch_statement_nonattributed */ +#line 3751 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10331 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10537 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 576: -#line 3754 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 576: /* switch_statement: attribute switch_statement_nonattributed */ +#line 3755 "glslang/MachineIndependent/glslang.y" + { parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10340 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10546 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 577: -#line 3761 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 577: /* $@9: %empty */ +#line 3762 "glslang/MachineIndependent/glslang.y" + { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; ++parseContext.statementNestingLevel; @@ -10349,12 +10555,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 10353 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10559 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 578: -#line 3769 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 578: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ +#line 3770 "glslang/MachineIndependent/glslang.y" + { (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(); parseContext.switchSequenceStack.pop_back(); @@ -10363,28 +10569,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10367 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10573 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 579: -#line 3781 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 579: /* switch_statement_list: %empty */ +#line 3782 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = 0; } -#line 10375 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10581 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 580: -#line 3784 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 580: /* switch_statement_list: statement_list */ +#line 3785 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10383 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10589 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 581: -#line 3790 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 581: /* case_label: CASE expression COLON */ +#line 3791 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) parseContext.error((yyvsp[-2].lex).loc, "cannot appear outside switch statement", "case", ""); @@ -10396,12 +10602,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 10400 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10606 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 582: -#line 3802 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 582: /* case_label: DEFAULT COLON */ +#line 3803 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) parseContext.error((yyvsp[-1].lex).loc, "cannot appear outside switch statement", "default", ""); @@ -10410,29 +10616,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 10414 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10620 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 583: -#line 3814 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 583: /* iteration_statement: iteration_statement_nonattributed */ +#line 3815 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10422 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10628 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 584: -#line 3818 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 584: /* iteration_statement: attribute iteration_statement_nonattributed */ +#line 3819 "glslang/MachineIndependent/glslang.y" + { parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10431 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10637 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 585: -#line 3825 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 585: /* $@10: %empty */ +#line 3826 "glslang/MachineIndependent/glslang.y" + { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); parseContext.symbolTable.push(); @@ -10440,34 +10646,34 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10444 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10650 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 586: -#line 3833 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 586: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ +#line 3834 "glslang/MachineIndependent/glslang.y" + { 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); --parseContext.loopNestingLevel; --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10456 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10662 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 587: -#line 3840 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 587: /* $@11: %empty */ +#line 3841 "glslang/MachineIndependent/glslang.y" + { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10466 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10672 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 588: -#line 3845 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 588: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ +#line 3846 "glslang/MachineIndependent/glslang.y" + { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -10478,23 +10684,23 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10482 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10688 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 589: -#line 3856 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 589: /* $@12: %empty */ +#line 3857 "glslang/MachineIndependent/glslang.y" + { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10493 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10699 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 590: -#line 3862 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 590: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ +#line 3863 "glslang/MachineIndependent/glslang.y" + { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); TIntermLoop* forLoop = parseContext.intermediate.addLoop((yyvsp[0].interm.intermNode), reinterpret_cast((yyvsp[-2].interm.nodePair).node1), reinterpret_cast((yyvsp[-2].interm.nodePair).node2), true, (yyvsp[-6].lex).loc); @@ -10506,157 +10712,166 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10510 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10716 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 591: -#line 3877 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 591: /* for_init_statement: expression_statement */ +#line 3878 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10518 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10724 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 592: -#line 3880 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 592: /* for_init_statement: declaration_statement */ +#line 3881 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10526 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10732 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 593: -#line 3886 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 593: /* conditionopt: condition */ +#line 3887 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10534 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10740 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 594: -#line 3889 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 594: /* conditionopt: %empty */ +#line 3890 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermTypedNode) = 0; } -#line 10542 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10748 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 595: -#line 3895 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 595: /* for_rest_statement: conditionopt SEMICOLON */ +#line 3896 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 10551 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10757 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 596: -#line 3899 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 596: /* for_rest_statement: conditionopt SEMICOLON expression */ +#line 3900 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 10560 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10766 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 597: -#line 3906 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 597: /* jump_statement: CONTINUE SEMICOLON */ +#line 3907 "glslang/MachineIndependent/glslang.y" + { 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 10570 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10776 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 598: -#line 3911 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 598: /* jump_statement: BREAK SEMICOLON */ +#line 3912 "glslang/MachineIndependent/glslang.y" + { 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 10580 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10786 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 599: -#line 3916 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 599: /* jump_statement: RETURN SEMICOLON */ +#line 3917 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) parseContext.error((yyvsp[-1].lex).loc, "non-void function must return a value", "return", ""); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 10592 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10798 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 600: -#line 3923 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 600: /* jump_statement: RETURN expression SEMICOLON */ +#line 3924 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 10600 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10806 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 601: -#line 3926 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 601: /* jump_statement: DISCARD SEMICOLON */ +#line 3927 "glslang/MachineIndependent/glslang.y" + { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 10609 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10815 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 602: -#line 3935 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 602: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ +#line 3931 "glslang/MachineIndependent/glslang.y" + { + parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); + (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); + } +#line 10824 "glslang/MachineIndependent/glslang_tab.cpp" + break; + + case 603: /* translation_unit: external_declaration */ +#line 3940 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 10618 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10833 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 603: -#line 3939 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 604: /* translation_unit: translation_unit external_declaration */ +#line 3944 "glslang/MachineIndependent/glslang.y" + { 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 10629 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10844 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 604: -#line 3948 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 605: /* external_declaration: function_definition */ +#line 3953 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10637 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10852 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 605: -#line 3951 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 606: /* external_declaration: declaration */ +#line 3956 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10645 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10860 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 606: -#line 3955 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 607: /* external_declaration: SEMICOLON */ +#line 3960 "glslang/MachineIndependent/glslang.y" + { 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 10655 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10870 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 607: -#line 3964 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 608: /* $@13: %empty */ +#line 3969 "glslang/MachineIndependent/glslang.y" + { (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); @@ -10668,12 +10883,12 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 10672 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10887 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 608: -#line 3976 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 609: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ +#line 3981 "glslang/MachineIndependent/glslang.y" + { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) parseContext.error((yyvsp[-2].interm).loc, "function does not return a value:", "", (yyvsp[-2].interm).function->getName().c_str()); @@ -10699,52 +10914,53 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 10703 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10918 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 609: -#line 4006 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 610: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4011 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); } -#line 10712 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10927 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 610: -#line 4012 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 611: /* attribute_list: single_attribute */ +#line 4017 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 10720 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10935 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 611: -#line 4015 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 612: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4020 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 10728 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10943 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 612: -#line 4020 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 613: /* single_attribute: IDENTIFIER */ +#line 4025 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 10736 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10951 "glslang/MachineIndependent/glslang_tab.cpp" break; - case 613: -#line 4023 "MachineIndependent/glslang.y" /* yacc.c:1646 */ - { + case 614: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4028 "glslang/MachineIndependent/glslang.y" + { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 10744 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10959 "glslang/MachineIndependent/glslang_tab.cpp" break; -#line 10748 "MachineIndependent/glslang_tab.cpp" /* yacc.c:1646 */ +#line 10963 "glslang/MachineIndependent/glslang_tab.cpp" + default: break; } /* User semantic actions sometimes alter yychar, and that requires @@ -10758,25 +10974,23 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ - YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); + YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; - YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ - - yyn = yyr1[yyn]; - - yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; - if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) - yystate = yytable[yystate]; - else - yystate = yydefgoto[yyn - YYNTOKENS]; + { + const int yylhs = yyr1[yyn] - YYNTOKENS; + const int yyi = yypgoto[yylhs] + *yyssp; + yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp + ? yytable[yyi] + : yydefgoto[yylhs]); + } goto yynewstate; @@ -10787,50 +11001,44 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ - yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); - + yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; -#if ! YYERROR_VERBOSE - yyerror (pParseContext, YY_("syntax error")); -#else -# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ - yyssp, yytoken) { + yypcontext_t yyctx + = {yyssp, yytoken}; char const *yymsgp = YY_("syntax error"); int yysyntax_error_status; - yysyntax_error_status = YYSYNTAX_ERROR; + yysyntax_error_status = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); if (yysyntax_error_status == 0) yymsgp = yymsg; - else if (yysyntax_error_status == 1) + else if (yysyntax_error_status == -1) { if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); - yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); - if (!yymsg) + yymsg = YY_CAST (char *, + YYSTACK_ALLOC (YY_CAST (YYSIZE_T, yymsg_alloc))); + if (yymsg) { - yymsg = yymsgbuf; - yymsg_alloc = sizeof yymsgbuf; - yysyntax_error_status = 2; + yysyntax_error_status + = yysyntax_error (&yymsg_alloc, &yymsg, &yyctx); + yymsgp = yymsg; } else { - yysyntax_error_status = YYSYNTAX_ERROR; - yymsgp = yymsg; + yymsg = yymsgbuf; + yymsg_alloc = sizeof yymsgbuf; + yysyntax_error_status = YYENOMEM; } } yyerror (pParseContext, yymsgp); - if (yysyntax_error_status == 2) + if (yysyntax_error_status == YYENOMEM) goto yyexhaustedlab; } -# undef YYSYNTAX_ERROR -#endif } - - if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an @@ -10859,12 +11067,10 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: - - /* Pacify compilers like GCC when the user code never invokes - YYERROR and the label yyerrorlab therefore never appears in user - code. */ - if (/*CONSTCOND*/ 0) - goto yyerrorlab; + /* Pacify compilers when the user code never invokes YYERROR and the + label yyerrorlab therefore never appears in user code. */ + if (0) + YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ @@ -10881,13 +11087,14 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ + /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { - yyn += YYTERROR; - if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) + yyn += YYSYMBOL_YYerror; + if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) { yyn = yytable[yyn]; if (0 < yyn) @@ -10901,7 +11108,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yydestruct ("Error: popping", - yystos[yystate], yyvsp, pParseContext); + YY_ACCESSING_SYMBOL (yystate), yyvsp, pParseContext); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); @@ -10913,7 +11120,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Shift the error token. */ - YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); + YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; @@ -10926,6 +11133,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yyresult = 0; goto yyreturn; + /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ @@ -10933,16 +11141,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); yyresult = 1; goto yyreturn; -#if !defined yyoverflow || YYERROR_VERBOSE + +#if 1 /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (pParseContext, YY_("memory exhausted")); yyresult = 2; - /* Fall through. */ + goto yyreturn; #endif + +/*-------------------------------------------------------. +| yyreturn -- parsing is finished, clean up and return. | +`-------------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { @@ -10959,18 +11172,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); while (yyssp != yyss) { yydestruct ("Cleanup: popping", - yystos[*yyssp], yyvsp, pParseContext); + YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, pParseContext); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif -#if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); -#endif return yyresult; } -#line 4028 "MachineIndependent/glslang.y" /* yacc.c:1906 */ + +#line 4033 "glslang/MachineIndependent/glslang.y" diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index 58fc9fbec1..66983a0809 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -1,8 +1,9 @@ -/* A Bison parser, made by GNU Bison 3.0.4. */ +/* A Bison parser, made by GNU Bison 3.7.2. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -30,8 +31,12 @@ This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ -#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED -# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED +/* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, + especially those whose name start with YY_ or yy_. They are + private implementation details that can be changed or removed. */ + +#ifndef YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED +# define YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 1 @@ -40,459 +45,464 @@ extern int yydebug; #endif -/* Token type. */ +/* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { - CONST = 258, - BOOL = 259, - INT = 260, - UINT = 261, - FLOAT = 262, - BVEC2 = 263, - BVEC3 = 264, - BVEC4 = 265, - IVEC2 = 266, - IVEC3 = 267, - IVEC4 = 268, - UVEC2 = 269, - UVEC3 = 270, - UVEC4 = 271, - VEC2 = 272, - VEC3 = 273, - VEC4 = 274, - MAT2 = 275, - MAT3 = 276, - MAT4 = 277, - MAT2X2 = 278, - MAT2X3 = 279, - MAT2X4 = 280, - MAT3X2 = 281, - MAT3X3 = 282, - MAT3X4 = 283, - MAT4X2 = 284, - MAT4X3 = 285, - MAT4X4 = 286, - SAMPLER2D = 287, - SAMPLER3D = 288, - SAMPLERCUBE = 289, - SAMPLER2DSHADOW = 290, - SAMPLERCUBESHADOW = 291, - SAMPLER2DARRAY = 292, - SAMPLER2DARRAYSHADOW = 293, - ISAMPLER2D = 294, - ISAMPLER3D = 295, - ISAMPLERCUBE = 296, - ISAMPLER2DARRAY = 297, - USAMPLER2D = 298, - USAMPLER3D = 299, - USAMPLERCUBE = 300, - USAMPLER2DARRAY = 301, - SAMPLER = 302, - SAMPLERSHADOW = 303, - TEXTURE2D = 304, - TEXTURE3D = 305, - TEXTURECUBE = 306, - TEXTURE2DARRAY = 307, - ITEXTURE2D = 308, - ITEXTURE3D = 309, - ITEXTURECUBE = 310, - ITEXTURE2DARRAY = 311, - UTEXTURE2D = 312, - UTEXTURE3D = 313, - UTEXTURECUBE = 314, - UTEXTURE2DARRAY = 315, - ATTRIBUTE = 316, - VARYING = 317, - FLOAT16_T = 318, - FLOAT32_T = 319, - DOUBLE = 320, - FLOAT64_T = 321, - INT64_T = 322, - UINT64_T = 323, - INT32_T = 324, - UINT32_T = 325, - INT16_T = 326, - UINT16_T = 327, - INT8_T = 328, - UINT8_T = 329, - I64VEC2 = 330, - I64VEC3 = 331, - I64VEC4 = 332, - U64VEC2 = 333, - U64VEC3 = 334, - U64VEC4 = 335, - I32VEC2 = 336, - I32VEC3 = 337, - I32VEC4 = 338, - U32VEC2 = 339, - U32VEC3 = 340, - U32VEC4 = 341, - I16VEC2 = 342, - I16VEC3 = 343, - I16VEC4 = 344, - U16VEC2 = 345, - U16VEC3 = 346, - U16VEC4 = 347, - I8VEC2 = 348, - I8VEC3 = 349, - I8VEC4 = 350, - U8VEC2 = 351, - U8VEC3 = 352, - U8VEC4 = 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, - DMAT2X2 = 378, - DMAT2X3 = 379, - DMAT2X4 = 380, - DMAT3X2 = 381, - DMAT3X3 = 382, - DMAT3X4 = 383, - DMAT4X2 = 384, - DMAT4X3 = 385, - DMAT4X4 = 386, - F16MAT2X2 = 387, - F16MAT2X3 = 388, - F16MAT2X4 = 389, - F16MAT3X2 = 390, - F16MAT3X3 = 391, - F16MAT3X4 = 392, - F16MAT4X2 = 393, - F16MAT4X3 = 394, - F16MAT4X4 = 395, - F32MAT2X2 = 396, - F32MAT2X3 = 397, - F32MAT2X4 = 398, - F32MAT3X2 = 399, - F32MAT3X3 = 400, - F32MAT3X4 = 401, - F32MAT4X2 = 402, - F32MAT4X3 = 403, - F32MAT4X4 = 404, - F64MAT2X2 = 405, - F64MAT2X3 = 406, - F64MAT2X4 = 407, - F64MAT3X2 = 408, - F64MAT3X3 = 409, - F64MAT3X4 = 410, - F64MAT4X2 = 411, - F64MAT4X3 = 412, - F64MAT4X4 = 413, - ATOMIC_UINT = 414, - ACCSTRUCTNV = 415, - ACCSTRUCTEXT = 416, - RAYQUERYEXT = 417, - FCOOPMATNV = 418, - ICOOPMATNV = 419, - UCOOPMATNV = 420, - SAMPLERCUBEARRAY = 421, - SAMPLERCUBEARRAYSHADOW = 422, - ISAMPLERCUBEARRAY = 423, - USAMPLERCUBEARRAY = 424, - SAMPLER1D = 425, - SAMPLER1DARRAY = 426, - SAMPLER1DARRAYSHADOW = 427, - ISAMPLER1D = 428, - SAMPLER1DSHADOW = 429, - SAMPLER2DRECT = 430, - SAMPLER2DRECTSHADOW = 431, - ISAMPLER2DRECT = 432, - USAMPLER2DRECT = 433, - SAMPLERBUFFER = 434, - ISAMPLERBUFFER = 435, - USAMPLERBUFFER = 436, - SAMPLER2DMS = 437, - ISAMPLER2DMS = 438, - USAMPLER2DMS = 439, - SAMPLER2DMSARRAY = 440, - ISAMPLER2DMSARRAY = 441, - USAMPLER2DMSARRAY = 442, - SAMPLEREXTERNALOES = 443, - SAMPLEREXTERNAL2DY2YEXT = 444, - ISAMPLER1DARRAY = 445, - USAMPLER1D = 446, - USAMPLER1DARRAY = 447, - F16SAMPLER1D = 448, - F16SAMPLER2D = 449, - F16SAMPLER3D = 450, - F16SAMPLER2DRECT = 451, - F16SAMPLERCUBE = 452, - F16SAMPLER1DARRAY = 453, - F16SAMPLER2DARRAY = 454, - F16SAMPLERCUBEARRAY = 455, - F16SAMPLERBUFFER = 456, - F16SAMPLER2DMS = 457, - F16SAMPLER2DMSARRAY = 458, - F16SAMPLER1DSHADOW = 459, - F16SAMPLER2DSHADOW = 460, - F16SAMPLER1DARRAYSHADOW = 461, - F16SAMPLER2DARRAYSHADOW = 462, - F16SAMPLER2DRECTSHADOW = 463, - F16SAMPLERCUBESHADOW = 464, - F16SAMPLERCUBEARRAYSHADOW = 465, - IMAGE1D = 466, - IIMAGE1D = 467, - UIMAGE1D = 468, - IMAGE2D = 469, - IIMAGE2D = 470, - UIMAGE2D = 471, - IMAGE3D = 472, - IIMAGE3D = 473, - UIMAGE3D = 474, - IMAGE2DRECT = 475, - IIMAGE2DRECT = 476, - UIMAGE2DRECT = 477, - IMAGECUBE = 478, - IIMAGECUBE = 479, - UIMAGECUBE = 480, - IMAGEBUFFER = 481, - IIMAGEBUFFER = 482, - UIMAGEBUFFER = 483, - IMAGE1DARRAY = 484, - IIMAGE1DARRAY = 485, - UIMAGE1DARRAY = 486, - IMAGE2DARRAY = 487, - IIMAGE2DARRAY = 488, - UIMAGE2DARRAY = 489, - IMAGECUBEARRAY = 490, - IIMAGECUBEARRAY = 491, - UIMAGECUBEARRAY = 492, - IMAGE2DMS = 493, - IIMAGE2DMS = 494, - UIMAGE2DMS = 495, - IMAGE2DMSARRAY = 496, - IIMAGE2DMSARRAY = 497, - UIMAGE2DMSARRAY = 498, - F16IMAGE1D = 499, - F16IMAGE2D = 500, - F16IMAGE3D = 501, - F16IMAGE2DRECT = 502, - F16IMAGECUBE = 503, - F16IMAGE1DARRAY = 504, - F16IMAGE2DARRAY = 505, - F16IMAGECUBEARRAY = 506, - F16IMAGEBUFFER = 507, - F16IMAGE2DMS = 508, - F16IMAGE2DMSARRAY = 509, - I64IMAGE1D = 510, - U64IMAGE1D = 511, - I64IMAGE2D = 512, - U64IMAGE2D = 513, - I64IMAGE3D = 514, - U64IMAGE3D = 515, - I64IMAGE2DRECT = 516, - U64IMAGE2DRECT = 517, - I64IMAGECUBE = 518, - U64IMAGECUBE = 519, - I64IMAGEBUFFER = 520, - U64IMAGEBUFFER = 521, - I64IMAGE1DARRAY = 522, - U64IMAGE1DARRAY = 523, - I64IMAGE2DARRAY = 524, - U64IMAGE2DARRAY = 525, - I64IMAGECUBEARRAY = 526, - U64IMAGECUBEARRAY = 527, - I64IMAGE2DMS = 528, - U64IMAGE2DMS = 529, - I64IMAGE2DMSARRAY = 530, - U64IMAGE2DMSARRAY = 531, - TEXTURECUBEARRAY = 532, - ITEXTURECUBEARRAY = 533, - UTEXTURECUBEARRAY = 534, - TEXTURE1D = 535, - ITEXTURE1D = 536, - UTEXTURE1D = 537, - TEXTURE1DARRAY = 538, - ITEXTURE1DARRAY = 539, - UTEXTURE1DARRAY = 540, - TEXTURE2DRECT = 541, - ITEXTURE2DRECT = 542, - UTEXTURE2DRECT = 543, - TEXTUREBUFFER = 544, - ITEXTUREBUFFER = 545, - UTEXTUREBUFFER = 546, - TEXTURE2DMS = 547, - ITEXTURE2DMS = 548, - UTEXTURE2DMS = 549, - TEXTURE2DMSARRAY = 550, - ITEXTURE2DMSARRAY = 551, - UTEXTURE2DMSARRAY = 552, - F16TEXTURE1D = 553, - F16TEXTURE2D = 554, - F16TEXTURE3D = 555, - F16TEXTURE2DRECT = 556, - F16TEXTURECUBE = 557, - F16TEXTURE1DARRAY = 558, - F16TEXTURE2DARRAY = 559, - F16TEXTURECUBEARRAY = 560, - F16TEXTUREBUFFER = 561, - F16TEXTURE2DMS = 562, - F16TEXTURE2DMSARRAY = 563, - SUBPASSINPUT = 564, - SUBPASSINPUTMS = 565, - ISUBPASSINPUT = 566, - ISUBPASSINPUTMS = 567, - USUBPASSINPUT = 568, - USUBPASSINPUTMS = 569, - F16SUBPASSINPUT = 570, - F16SUBPASSINPUTMS = 571, - LEFT_OP = 572, - RIGHT_OP = 573, - INC_OP = 574, - DEC_OP = 575, - LE_OP = 576, - GE_OP = 577, - EQ_OP = 578, - NE_OP = 579, - AND_OP = 580, - OR_OP = 581, - XOR_OP = 582, - MUL_ASSIGN = 583, - DIV_ASSIGN = 584, - ADD_ASSIGN = 585, - MOD_ASSIGN = 586, - LEFT_ASSIGN = 587, - RIGHT_ASSIGN = 588, - AND_ASSIGN = 589, - XOR_ASSIGN = 590, - OR_ASSIGN = 591, - SUB_ASSIGN = 592, - STRING_LITERAL = 593, - LEFT_PAREN = 594, - RIGHT_PAREN = 595, - LEFT_BRACKET = 596, - RIGHT_BRACKET = 597, - LEFT_BRACE = 598, - RIGHT_BRACE = 599, - DOT = 600, - COMMA = 601, - COLON = 602, - EQUAL = 603, - SEMICOLON = 604, - BANG = 605, - DASH = 606, - TILDE = 607, - PLUS = 608, - STAR = 609, - SLASH = 610, - PERCENT = 611, - LEFT_ANGLE = 612, - RIGHT_ANGLE = 613, - VERTICAL_BAR = 614, - CARET = 615, - AMPERSAND = 616, - QUESTION = 617, - INVARIANT = 618, - HIGH_PRECISION = 619, - MEDIUM_PRECISION = 620, - LOW_PRECISION = 621, - PRECISION = 622, - PACKED = 623, - RESOURCE = 624, - SUPERP = 625, - FLOATCONSTANT = 626, - INTCONSTANT = 627, - UINTCONSTANT = 628, - BOOLCONSTANT = 629, - IDENTIFIER = 630, - TYPE_NAME = 631, - CENTROID = 632, - IN = 633, - OUT = 634, - INOUT = 635, - STRUCT = 636, - VOID = 637, - WHILE = 638, - BREAK = 639, - CONTINUE = 640, - DO = 641, - ELSE = 642, - FOR = 643, - IF = 644, - DISCARD = 645, - RETURN = 646, - SWITCH = 647, - CASE = 648, - DEFAULT = 649, - UNIFORM = 650, - SHARED = 651, - BUFFER = 652, - FLAT = 653, - SMOOTH = 654, - LAYOUT = 655, - DOUBLECONSTANT = 656, - INT16CONSTANT = 657, - UINT16CONSTANT = 658, - FLOAT16CONSTANT = 659, - INT32CONSTANT = 660, - UINT32CONSTANT = 661, - INT64CONSTANT = 662, - UINT64CONSTANT = 663, - SUBROUTINE = 664, - DEMOTE = 665, - PAYLOADNV = 666, - PAYLOADINNV = 667, - HITATTRNV = 668, - CALLDATANV = 669, - CALLDATAINNV = 670, - PAYLOADEXT = 671, - PAYLOADINEXT = 672, - HITATTREXT = 673, - CALLDATAEXT = 674, - CALLDATAINEXT = 675, - PATCH = 676, - SAMPLE = 677, - NONUNIFORM = 678, - COHERENT = 679, - VOLATILE = 680, - RESTRICT = 681, - READONLY = 682, - WRITEONLY = 683, - DEVICECOHERENT = 684, - QUEUEFAMILYCOHERENT = 685, - WORKGROUPCOHERENT = 686, - SUBGROUPCOHERENT = 687, - NONPRIVATE = 688, - SHADERCALLCOHERENT = 689, - NOPERSPECTIVE = 690, - EXPLICITINTERPAMD = 691, - PERVERTEXNV = 692, - PERPRIMITIVENV = 693, - PERVIEWNV = 694, - PERTASKNV = 695, - PRECISE = 696 + YYEMPTY = -2, + YYEOF = 0, /* "end of file" */ + YYerror = 256, /* error */ + YYUNDEF = 257, /* "invalid token" */ + CONST = 258, /* CONST */ + BOOL = 259, /* BOOL */ + INT = 260, /* INT */ + UINT = 261, /* UINT */ + FLOAT = 262, /* FLOAT */ + BVEC2 = 263, /* BVEC2 */ + BVEC3 = 264, /* BVEC3 */ + BVEC4 = 265, /* BVEC4 */ + IVEC2 = 266, /* IVEC2 */ + IVEC3 = 267, /* IVEC3 */ + IVEC4 = 268, /* IVEC4 */ + UVEC2 = 269, /* UVEC2 */ + UVEC3 = 270, /* UVEC3 */ + UVEC4 = 271, /* UVEC4 */ + VEC2 = 272, /* VEC2 */ + VEC3 = 273, /* VEC3 */ + VEC4 = 274, /* VEC4 */ + MAT2 = 275, /* MAT2 */ + MAT3 = 276, /* MAT3 */ + MAT4 = 277, /* MAT4 */ + MAT2X2 = 278, /* MAT2X2 */ + MAT2X3 = 279, /* MAT2X3 */ + MAT2X4 = 280, /* MAT2X4 */ + MAT3X2 = 281, /* MAT3X2 */ + MAT3X3 = 282, /* MAT3X3 */ + MAT3X4 = 283, /* MAT3X4 */ + MAT4X2 = 284, /* MAT4X2 */ + MAT4X3 = 285, /* MAT4X3 */ + MAT4X4 = 286, /* MAT4X4 */ + SAMPLER2D = 287, /* SAMPLER2D */ + SAMPLER3D = 288, /* SAMPLER3D */ + SAMPLERCUBE = 289, /* SAMPLERCUBE */ + SAMPLER2DSHADOW = 290, /* SAMPLER2DSHADOW */ + SAMPLERCUBESHADOW = 291, /* SAMPLERCUBESHADOW */ + SAMPLER2DARRAY = 292, /* SAMPLER2DARRAY */ + SAMPLER2DARRAYSHADOW = 293, /* SAMPLER2DARRAYSHADOW */ + ISAMPLER2D = 294, /* ISAMPLER2D */ + ISAMPLER3D = 295, /* ISAMPLER3D */ + ISAMPLERCUBE = 296, /* ISAMPLERCUBE */ + ISAMPLER2DARRAY = 297, /* ISAMPLER2DARRAY */ + USAMPLER2D = 298, /* USAMPLER2D */ + USAMPLER3D = 299, /* USAMPLER3D */ + USAMPLERCUBE = 300, /* USAMPLERCUBE */ + USAMPLER2DARRAY = 301, /* USAMPLER2DARRAY */ + SAMPLER = 302, /* SAMPLER */ + SAMPLERSHADOW = 303, /* SAMPLERSHADOW */ + TEXTURE2D = 304, /* TEXTURE2D */ + TEXTURE3D = 305, /* TEXTURE3D */ + TEXTURECUBE = 306, /* TEXTURECUBE */ + TEXTURE2DARRAY = 307, /* TEXTURE2DARRAY */ + ITEXTURE2D = 308, /* ITEXTURE2D */ + ITEXTURE3D = 309, /* ITEXTURE3D */ + ITEXTURECUBE = 310, /* ITEXTURECUBE */ + ITEXTURE2DARRAY = 311, /* ITEXTURE2DARRAY */ + UTEXTURE2D = 312, /* UTEXTURE2D */ + UTEXTURE3D = 313, /* UTEXTURE3D */ + UTEXTURECUBE = 314, /* UTEXTURECUBE */ + UTEXTURE2DARRAY = 315, /* UTEXTURE2DARRAY */ + ATTRIBUTE = 316, /* ATTRIBUTE */ + VARYING = 317, /* VARYING */ + FLOAT16_T = 318, /* FLOAT16_T */ + FLOAT32_T = 319, /* FLOAT32_T */ + DOUBLE = 320, /* DOUBLE */ + FLOAT64_T = 321, /* FLOAT64_T */ + INT64_T = 322, /* INT64_T */ + UINT64_T = 323, /* UINT64_T */ + INT32_T = 324, /* INT32_T */ + UINT32_T = 325, /* UINT32_T */ + INT16_T = 326, /* INT16_T */ + UINT16_T = 327, /* UINT16_T */ + INT8_T = 328, /* INT8_T */ + UINT8_T = 329, /* UINT8_T */ + I64VEC2 = 330, /* I64VEC2 */ + I64VEC3 = 331, /* I64VEC3 */ + I64VEC4 = 332, /* I64VEC4 */ + U64VEC2 = 333, /* U64VEC2 */ + U64VEC3 = 334, /* U64VEC3 */ + U64VEC4 = 335, /* U64VEC4 */ + I32VEC2 = 336, /* I32VEC2 */ + I32VEC3 = 337, /* I32VEC3 */ + I32VEC4 = 338, /* I32VEC4 */ + U32VEC2 = 339, /* U32VEC2 */ + U32VEC3 = 340, /* U32VEC3 */ + U32VEC4 = 341, /* U32VEC4 */ + I16VEC2 = 342, /* I16VEC2 */ + I16VEC3 = 343, /* I16VEC3 */ + I16VEC4 = 344, /* I16VEC4 */ + U16VEC2 = 345, /* U16VEC2 */ + U16VEC3 = 346, /* U16VEC3 */ + U16VEC4 = 347, /* U16VEC4 */ + I8VEC2 = 348, /* I8VEC2 */ + I8VEC3 = 349, /* I8VEC3 */ + I8VEC4 = 350, /* I8VEC4 */ + U8VEC2 = 351, /* U8VEC2 */ + U8VEC3 = 352, /* U8VEC3 */ + U8VEC4 = 353, /* U8VEC4 */ + DVEC2 = 354, /* DVEC2 */ + DVEC3 = 355, /* DVEC3 */ + DVEC4 = 356, /* DVEC4 */ + DMAT2 = 357, /* DMAT2 */ + DMAT3 = 358, /* DMAT3 */ + DMAT4 = 359, /* DMAT4 */ + F16VEC2 = 360, /* F16VEC2 */ + F16VEC3 = 361, /* F16VEC3 */ + F16VEC4 = 362, /* F16VEC4 */ + F16MAT2 = 363, /* F16MAT2 */ + F16MAT3 = 364, /* F16MAT3 */ + F16MAT4 = 365, /* F16MAT4 */ + F32VEC2 = 366, /* F32VEC2 */ + F32VEC3 = 367, /* F32VEC3 */ + F32VEC4 = 368, /* F32VEC4 */ + F32MAT2 = 369, /* F32MAT2 */ + F32MAT3 = 370, /* F32MAT3 */ + F32MAT4 = 371, /* F32MAT4 */ + F64VEC2 = 372, /* F64VEC2 */ + F64VEC3 = 373, /* F64VEC3 */ + F64VEC4 = 374, /* F64VEC4 */ + F64MAT2 = 375, /* F64MAT2 */ + F64MAT3 = 376, /* F64MAT3 */ + F64MAT4 = 377, /* F64MAT4 */ + DMAT2X2 = 378, /* DMAT2X2 */ + DMAT2X3 = 379, /* DMAT2X3 */ + DMAT2X4 = 380, /* DMAT2X4 */ + DMAT3X2 = 381, /* DMAT3X2 */ + DMAT3X3 = 382, /* DMAT3X3 */ + DMAT3X4 = 383, /* DMAT3X4 */ + DMAT4X2 = 384, /* DMAT4X2 */ + DMAT4X3 = 385, /* DMAT4X3 */ + DMAT4X4 = 386, /* DMAT4X4 */ + F16MAT2X2 = 387, /* F16MAT2X2 */ + F16MAT2X3 = 388, /* F16MAT2X3 */ + F16MAT2X4 = 389, /* F16MAT2X4 */ + F16MAT3X2 = 390, /* F16MAT3X2 */ + F16MAT3X3 = 391, /* F16MAT3X3 */ + F16MAT3X4 = 392, /* F16MAT3X4 */ + F16MAT4X2 = 393, /* F16MAT4X2 */ + F16MAT4X3 = 394, /* F16MAT4X3 */ + F16MAT4X4 = 395, /* F16MAT4X4 */ + F32MAT2X2 = 396, /* F32MAT2X2 */ + F32MAT2X3 = 397, /* F32MAT2X3 */ + F32MAT2X4 = 398, /* F32MAT2X4 */ + F32MAT3X2 = 399, /* F32MAT3X2 */ + F32MAT3X3 = 400, /* F32MAT3X3 */ + F32MAT3X4 = 401, /* F32MAT3X4 */ + F32MAT4X2 = 402, /* F32MAT4X2 */ + F32MAT4X3 = 403, /* F32MAT4X3 */ + F32MAT4X4 = 404, /* F32MAT4X4 */ + F64MAT2X2 = 405, /* F64MAT2X2 */ + F64MAT2X3 = 406, /* F64MAT2X3 */ + F64MAT2X4 = 407, /* F64MAT2X4 */ + F64MAT3X2 = 408, /* F64MAT3X2 */ + F64MAT3X3 = 409, /* F64MAT3X3 */ + F64MAT3X4 = 410, /* F64MAT3X4 */ + F64MAT4X2 = 411, /* F64MAT4X2 */ + F64MAT4X3 = 412, /* F64MAT4X3 */ + F64MAT4X4 = 413, /* F64MAT4X4 */ + ATOMIC_UINT = 414, /* ATOMIC_UINT */ + ACCSTRUCTNV = 415, /* ACCSTRUCTNV */ + ACCSTRUCTEXT = 416, /* ACCSTRUCTEXT */ + RAYQUERYEXT = 417, /* RAYQUERYEXT */ + FCOOPMATNV = 418, /* FCOOPMATNV */ + ICOOPMATNV = 419, /* ICOOPMATNV */ + UCOOPMATNV = 420, /* UCOOPMATNV */ + SAMPLERCUBEARRAY = 421, /* SAMPLERCUBEARRAY */ + SAMPLERCUBEARRAYSHADOW = 422, /* SAMPLERCUBEARRAYSHADOW */ + ISAMPLERCUBEARRAY = 423, /* ISAMPLERCUBEARRAY */ + USAMPLERCUBEARRAY = 424, /* USAMPLERCUBEARRAY */ + SAMPLER1D = 425, /* SAMPLER1D */ + SAMPLER1DARRAY = 426, /* SAMPLER1DARRAY */ + SAMPLER1DARRAYSHADOW = 427, /* SAMPLER1DARRAYSHADOW */ + ISAMPLER1D = 428, /* ISAMPLER1D */ + SAMPLER1DSHADOW = 429, /* SAMPLER1DSHADOW */ + SAMPLER2DRECT = 430, /* SAMPLER2DRECT */ + SAMPLER2DRECTSHADOW = 431, /* SAMPLER2DRECTSHADOW */ + ISAMPLER2DRECT = 432, /* ISAMPLER2DRECT */ + USAMPLER2DRECT = 433, /* USAMPLER2DRECT */ + SAMPLERBUFFER = 434, /* SAMPLERBUFFER */ + ISAMPLERBUFFER = 435, /* ISAMPLERBUFFER */ + USAMPLERBUFFER = 436, /* USAMPLERBUFFER */ + SAMPLER2DMS = 437, /* SAMPLER2DMS */ + ISAMPLER2DMS = 438, /* ISAMPLER2DMS */ + USAMPLER2DMS = 439, /* USAMPLER2DMS */ + SAMPLER2DMSARRAY = 440, /* SAMPLER2DMSARRAY */ + ISAMPLER2DMSARRAY = 441, /* ISAMPLER2DMSARRAY */ + USAMPLER2DMSARRAY = 442, /* USAMPLER2DMSARRAY */ + SAMPLEREXTERNALOES = 443, /* SAMPLEREXTERNALOES */ + SAMPLEREXTERNAL2DY2YEXT = 444, /* SAMPLEREXTERNAL2DY2YEXT */ + ISAMPLER1DARRAY = 445, /* ISAMPLER1DARRAY */ + USAMPLER1D = 446, /* USAMPLER1D */ + USAMPLER1DARRAY = 447, /* USAMPLER1DARRAY */ + F16SAMPLER1D = 448, /* F16SAMPLER1D */ + F16SAMPLER2D = 449, /* F16SAMPLER2D */ + F16SAMPLER3D = 450, /* F16SAMPLER3D */ + F16SAMPLER2DRECT = 451, /* F16SAMPLER2DRECT */ + F16SAMPLERCUBE = 452, /* F16SAMPLERCUBE */ + F16SAMPLER1DARRAY = 453, /* F16SAMPLER1DARRAY */ + F16SAMPLER2DARRAY = 454, /* F16SAMPLER2DARRAY */ + F16SAMPLERCUBEARRAY = 455, /* F16SAMPLERCUBEARRAY */ + F16SAMPLERBUFFER = 456, /* F16SAMPLERBUFFER */ + F16SAMPLER2DMS = 457, /* F16SAMPLER2DMS */ + F16SAMPLER2DMSARRAY = 458, /* F16SAMPLER2DMSARRAY */ + F16SAMPLER1DSHADOW = 459, /* F16SAMPLER1DSHADOW */ + F16SAMPLER2DSHADOW = 460, /* F16SAMPLER2DSHADOW */ + F16SAMPLER1DARRAYSHADOW = 461, /* F16SAMPLER1DARRAYSHADOW */ + F16SAMPLER2DARRAYSHADOW = 462, /* F16SAMPLER2DARRAYSHADOW */ + F16SAMPLER2DRECTSHADOW = 463, /* F16SAMPLER2DRECTSHADOW */ + F16SAMPLERCUBESHADOW = 464, /* F16SAMPLERCUBESHADOW */ + F16SAMPLERCUBEARRAYSHADOW = 465, /* F16SAMPLERCUBEARRAYSHADOW */ + IMAGE1D = 466, /* IMAGE1D */ + IIMAGE1D = 467, /* IIMAGE1D */ + UIMAGE1D = 468, /* UIMAGE1D */ + IMAGE2D = 469, /* IMAGE2D */ + IIMAGE2D = 470, /* IIMAGE2D */ + UIMAGE2D = 471, /* UIMAGE2D */ + IMAGE3D = 472, /* IMAGE3D */ + IIMAGE3D = 473, /* IIMAGE3D */ + UIMAGE3D = 474, /* UIMAGE3D */ + IMAGE2DRECT = 475, /* IMAGE2DRECT */ + IIMAGE2DRECT = 476, /* IIMAGE2DRECT */ + UIMAGE2DRECT = 477, /* UIMAGE2DRECT */ + IMAGECUBE = 478, /* IMAGECUBE */ + IIMAGECUBE = 479, /* IIMAGECUBE */ + UIMAGECUBE = 480, /* UIMAGECUBE */ + IMAGEBUFFER = 481, /* IMAGEBUFFER */ + IIMAGEBUFFER = 482, /* IIMAGEBUFFER */ + UIMAGEBUFFER = 483, /* UIMAGEBUFFER */ + IMAGE1DARRAY = 484, /* IMAGE1DARRAY */ + IIMAGE1DARRAY = 485, /* IIMAGE1DARRAY */ + UIMAGE1DARRAY = 486, /* UIMAGE1DARRAY */ + IMAGE2DARRAY = 487, /* IMAGE2DARRAY */ + IIMAGE2DARRAY = 488, /* IIMAGE2DARRAY */ + UIMAGE2DARRAY = 489, /* UIMAGE2DARRAY */ + IMAGECUBEARRAY = 490, /* IMAGECUBEARRAY */ + IIMAGECUBEARRAY = 491, /* IIMAGECUBEARRAY */ + UIMAGECUBEARRAY = 492, /* UIMAGECUBEARRAY */ + IMAGE2DMS = 493, /* IMAGE2DMS */ + IIMAGE2DMS = 494, /* IIMAGE2DMS */ + UIMAGE2DMS = 495, /* UIMAGE2DMS */ + IMAGE2DMSARRAY = 496, /* IMAGE2DMSARRAY */ + IIMAGE2DMSARRAY = 497, /* IIMAGE2DMSARRAY */ + UIMAGE2DMSARRAY = 498, /* UIMAGE2DMSARRAY */ + F16IMAGE1D = 499, /* F16IMAGE1D */ + F16IMAGE2D = 500, /* F16IMAGE2D */ + F16IMAGE3D = 501, /* F16IMAGE3D */ + F16IMAGE2DRECT = 502, /* F16IMAGE2DRECT */ + F16IMAGECUBE = 503, /* F16IMAGECUBE */ + F16IMAGE1DARRAY = 504, /* F16IMAGE1DARRAY */ + F16IMAGE2DARRAY = 505, /* F16IMAGE2DARRAY */ + F16IMAGECUBEARRAY = 506, /* F16IMAGECUBEARRAY */ + F16IMAGEBUFFER = 507, /* F16IMAGEBUFFER */ + F16IMAGE2DMS = 508, /* F16IMAGE2DMS */ + F16IMAGE2DMSARRAY = 509, /* F16IMAGE2DMSARRAY */ + I64IMAGE1D = 510, /* I64IMAGE1D */ + U64IMAGE1D = 511, /* U64IMAGE1D */ + I64IMAGE2D = 512, /* I64IMAGE2D */ + U64IMAGE2D = 513, /* U64IMAGE2D */ + I64IMAGE3D = 514, /* I64IMAGE3D */ + U64IMAGE3D = 515, /* U64IMAGE3D */ + I64IMAGE2DRECT = 516, /* I64IMAGE2DRECT */ + U64IMAGE2DRECT = 517, /* U64IMAGE2DRECT */ + I64IMAGECUBE = 518, /* I64IMAGECUBE */ + U64IMAGECUBE = 519, /* U64IMAGECUBE */ + I64IMAGEBUFFER = 520, /* I64IMAGEBUFFER */ + U64IMAGEBUFFER = 521, /* U64IMAGEBUFFER */ + I64IMAGE1DARRAY = 522, /* I64IMAGE1DARRAY */ + U64IMAGE1DARRAY = 523, /* U64IMAGE1DARRAY */ + I64IMAGE2DARRAY = 524, /* I64IMAGE2DARRAY */ + U64IMAGE2DARRAY = 525, /* U64IMAGE2DARRAY */ + I64IMAGECUBEARRAY = 526, /* I64IMAGECUBEARRAY */ + U64IMAGECUBEARRAY = 527, /* U64IMAGECUBEARRAY */ + I64IMAGE2DMS = 528, /* I64IMAGE2DMS */ + U64IMAGE2DMS = 529, /* U64IMAGE2DMS */ + I64IMAGE2DMSARRAY = 530, /* I64IMAGE2DMSARRAY */ + U64IMAGE2DMSARRAY = 531, /* U64IMAGE2DMSARRAY */ + TEXTURECUBEARRAY = 532, /* TEXTURECUBEARRAY */ + ITEXTURECUBEARRAY = 533, /* ITEXTURECUBEARRAY */ + UTEXTURECUBEARRAY = 534, /* UTEXTURECUBEARRAY */ + TEXTURE1D = 535, /* TEXTURE1D */ + ITEXTURE1D = 536, /* ITEXTURE1D */ + UTEXTURE1D = 537, /* UTEXTURE1D */ + TEXTURE1DARRAY = 538, /* TEXTURE1DARRAY */ + ITEXTURE1DARRAY = 539, /* ITEXTURE1DARRAY */ + UTEXTURE1DARRAY = 540, /* UTEXTURE1DARRAY */ + TEXTURE2DRECT = 541, /* TEXTURE2DRECT */ + ITEXTURE2DRECT = 542, /* ITEXTURE2DRECT */ + UTEXTURE2DRECT = 543, /* UTEXTURE2DRECT */ + TEXTUREBUFFER = 544, /* TEXTUREBUFFER */ + ITEXTUREBUFFER = 545, /* ITEXTUREBUFFER */ + UTEXTUREBUFFER = 546, /* UTEXTUREBUFFER */ + TEXTURE2DMS = 547, /* TEXTURE2DMS */ + ITEXTURE2DMS = 548, /* ITEXTURE2DMS */ + UTEXTURE2DMS = 549, /* UTEXTURE2DMS */ + TEXTURE2DMSARRAY = 550, /* TEXTURE2DMSARRAY */ + ITEXTURE2DMSARRAY = 551, /* ITEXTURE2DMSARRAY */ + UTEXTURE2DMSARRAY = 552, /* UTEXTURE2DMSARRAY */ + F16TEXTURE1D = 553, /* F16TEXTURE1D */ + F16TEXTURE2D = 554, /* F16TEXTURE2D */ + F16TEXTURE3D = 555, /* F16TEXTURE3D */ + F16TEXTURE2DRECT = 556, /* F16TEXTURE2DRECT */ + F16TEXTURECUBE = 557, /* F16TEXTURECUBE */ + F16TEXTURE1DARRAY = 558, /* F16TEXTURE1DARRAY */ + F16TEXTURE2DARRAY = 559, /* F16TEXTURE2DARRAY */ + F16TEXTURECUBEARRAY = 560, /* F16TEXTURECUBEARRAY */ + F16TEXTUREBUFFER = 561, /* F16TEXTUREBUFFER */ + F16TEXTURE2DMS = 562, /* F16TEXTURE2DMS */ + F16TEXTURE2DMSARRAY = 563, /* F16TEXTURE2DMSARRAY */ + SUBPASSINPUT = 564, /* SUBPASSINPUT */ + SUBPASSINPUTMS = 565, /* SUBPASSINPUTMS */ + ISUBPASSINPUT = 566, /* ISUBPASSINPUT */ + ISUBPASSINPUTMS = 567, /* ISUBPASSINPUTMS */ + USUBPASSINPUT = 568, /* USUBPASSINPUT */ + USUBPASSINPUTMS = 569, /* USUBPASSINPUTMS */ + F16SUBPASSINPUT = 570, /* F16SUBPASSINPUT */ + F16SUBPASSINPUTMS = 571, /* F16SUBPASSINPUTMS */ + LEFT_OP = 572, /* LEFT_OP */ + RIGHT_OP = 573, /* RIGHT_OP */ + INC_OP = 574, /* INC_OP */ + DEC_OP = 575, /* DEC_OP */ + LE_OP = 576, /* LE_OP */ + GE_OP = 577, /* GE_OP */ + EQ_OP = 578, /* EQ_OP */ + NE_OP = 579, /* NE_OP */ + AND_OP = 580, /* AND_OP */ + OR_OP = 581, /* OR_OP */ + XOR_OP = 582, /* XOR_OP */ + MUL_ASSIGN = 583, /* MUL_ASSIGN */ + DIV_ASSIGN = 584, /* DIV_ASSIGN */ + ADD_ASSIGN = 585, /* ADD_ASSIGN */ + MOD_ASSIGN = 586, /* MOD_ASSIGN */ + LEFT_ASSIGN = 587, /* LEFT_ASSIGN */ + RIGHT_ASSIGN = 588, /* RIGHT_ASSIGN */ + AND_ASSIGN = 589, /* AND_ASSIGN */ + XOR_ASSIGN = 590, /* XOR_ASSIGN */ + OR_ASSIGN = 591, /* OR_ASSIGN */ + SUB_ASSIGN = 592, /* SUB_ASSIGN */ + STRING_LITERAL = 593, /* STRING_LITERAL */ + LEFT_PAREN = 594, /* LEFT_PAREN */ + RIGHT_PAREN = 595, /* RIGHT_PAREN */ + LEFT_BRACKET = 596, /* LEFT_BRACKET */ + RIGHT_BRACKET = 597, /* RIGHT_BRACKET */ + LEFT_BRACE = 598, /* LEFT_BRACE */ + RIGHT_BRACE = 599, /* RIGHT_BRACE */ + DOT = 600, /* DOT */ + COMMA = 601, /* COMMA */ + COLON = 602, /* COLON */ + EQUAL = 603, /* EQUAL */ + SEMICOLON = 604, /* SEMICOLON */ + BANG = 605, /* BANG */ + DASH = 606, /* DASH */ + TILDE = 607, /* TILDE */ + PLUS = 608, /* PLUS */ + STAR = 609, /* STAR */ + SLASH = 610, /* SLASH */ + PERCENT = 611, /* PERCENT */ + LEFT_ANGLE = 612, /* LEFT_ANGLE */ + RIGHT_ANGLE = 613, /* RIGHT_ANGLE */ + VERTICAL_BAR = 614, /* VERTICAL_BAR */ + CARET = 615, /* CARET */ + AMPERSAND = 616, /* AMPERSAND */ + QUESTION = 617, /* QUESTION */ + INVARIANT = 618, /* INVARIANT */ + HIGH_PRECISION = 619, /* HIGH_PRECISION */ + MEDIUM_PRECISION = 620, /* MEDIUM_PRECISION */ + LOW_PRECISION = 621, /* LOW_PRECISION */ + PRECISION = 622, /* PRECISION */ + PACKED = 623, /* PACKED */ + RESOURCE = 624, /* RESOURCE */ + SUPERP = 625, /* SUPERP */ + FLOATCONSTANT = 626, /* FLOATCONSTANT */ + INTCONSTANT = 627, /* INTCONSTANT */ + UINTCONSTANT = 628, /* UINTCONSTANT */ + BOOLCONSTANT = 629, /* BOOLCONSTANT */ + IDENTIFIER = 630, /* IDENTIFIER */ + TYPE_NAME = 631, /* TYPE_NAME */ + CENTROID = 632, /* CENTROID */ + IN = 633, /* IN */ + OUT = 634, /* OUT */ + INOUT = 635, /* INOUT */ + STRUCT = 636, /* STRUCT */ + VOID = 637, /* VOID */ + WHILE = 638, /* WHILE */ + BREAK = 639, /* BREAK */ + CONTINUE = 640, /* CONTINUE */ + DO = 641, /* DO */ + ELSE = 642, /* ELSE */ + FOR = 643, /* FOR */ + IF = 644, /* IF */ + DISCARD = 645, /* DISCARD */ + RETURN = 646, /* RETURN */ + SWITCH = 647, /* SWITCH */ + CASE = 648, /* CASE */ + DEFAULT = 649, /* DEFAULT */ + TERMINATE_INVOCATION = 650, /* TERMINATE_INVOCATION */ + UNIFORM = 651, /* UNIFORM */ + SHARED = 652, /* SHARED */ + BUFFER = 653, /* BUFFER */ + FLAT = 654, /* FLAT */ + SMOOTH = 655, /* SMOOTH */ + LAYOUT = 656, /* LAYOUT */ + DOUBLECONSTANT = 657, /* DOUBLECONSTANT */ + INT16CONSTANT = 658, /* INT16CONSTANT */ + UINT16CONSTANT = 659, /* UINT16CONSTANT */ + FLOAT16CONSTANT = 660, /* FLOAT16CONSTANT */ + INT32CONSTANT = 661, /* INT32CONSTANT */ + UINT32CONSTANT = 662, /* UINT32CONSTANT */ + INT64CONSTANT = 663, /* INT64CONSTANT */ + UINT64CONSTANT = 664, /* UINT64CONSTANT */ + SUBROUTINE = 665, /* SUBROUTINE */ + DEMOTE = 666, /* DEMOTE */ + PAYLOADNV = 667, /* PAYLOADNV */ + PAYLOADINNV = 668, /* PAYLOADINNV */ + HITATTRNV = 669, /* HITATTRNV */ + CALLDATANV = 670, /* CALLDATANV */ + CALLDATAINNV = 671, /* CALLDATAINNV */ + PAYLOADEXT = 672, /* PAYLOADEXT */ + PAYLOADINEXT = 673, /* PAYLOADINEXT */ + HITATTREXT = 674, /* HITATTREXT */ + CALLDATAEXT = 675, /* CALLDATAEXT */ + CALLDATAINEXT = 676, /* CALLDATAINEXT */ + PATCH = 677, /* PATCH */ + SAMPLE = 678, /* SAMPLE */ + NONUNIFORM = 679, /* NONUNIFORM */ + COHERENT = 680, /* COHERENT */ + VOLATILE = 681, /* VOLATILE */ + RESTRICT = 682, /* RESTRICT */ + READONLY = 683, /* READONLY */ + WRITEONLY = 684, /* WRITEONLY */ + DEVICECOHERENT = 685, /* DEVICECOHERENT */ + QUEUEFAMILYCOHERENT = 686, /* QUEUEFAMILYCOHERENT */ + WORKGROUPCOHERENT = 687, /* WORKGROUPCOHERENT */ + SUBGROUPCOHERENT = 688, /* SUBGROUPCOHERENT */ + NONPRIVATE = 689, /* NONPRIVATE */ + SHADERCALLCOHERENT = 690, /* SHADERCALLCOHERENT */ + NOPERSPECTIVE = 691, /* NOPERSPECTIVE */ + EXPLICITINTERPAMD = 692, /* EXPLICITINTERPAMD */ + PERVERTEXNV = 693, /* PERVERTEXNV */ + PERPRIMITIVENV = 694, /* PERPRIMITIVENV */ + PERVIEWNV = 695, /* PERVIEWNV */ + PERTASKNV = 696, /* PERTASKNV */ + PRECISE = 697 /* PRECISE */ }; + typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED - union YYSTYPE { -#line 97 "MachineIndependent/glslang.y" /* yacc.c:1909 */ +#line 97 "glslang/MachineIndependent/glslang.y" struct { glslang::TSourceLoc loc; @@ -528,9 +538,9 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 532 "MachineIndependent/glslang_tab.cpp.h" /* yacc.c:1909 */ -}; +#line 542 "glslang/MachineIndependent/glslang_tab.cpp.h" +}; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 @@ -540,4 +550,4 @@ typedef union YYSTYPE YYSTYPE; int yyparse (glslang::TParseContext* pParseContext); -#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ +#endif /* !YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index 0239e99c55..ac862e6391 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -1409,14 +1409,15 @@ bool TOutputTraverser::visitBranch(TVisit /* visit*/, TIntermBranch* node) OutputTreeText(out, node, depth); switch (node->getFlowOp()) { - case EOpKill: out.debug << "Branch: Kill"; break; - case EOpBreak: out.debug << "Branch: Break"; break; - 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; + case EOpKill: out.debug << "Branch: Kill"; break; + case EOpTerminateInvocation: out.debug << "Branch: TerminateInvocation"; break; + case EOpBreak: out.debug << "Branch: Break"; break; + 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; } if (node->getExpression()) { diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index a8e4da4230..dc7fea38da 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -278,6 +278,8 @@ INSTANTIATE_TEST_SUITE_P( "glsl.es320.subgroupShuffleRelative.comp", "glsl.es320.subgroupQuad.comp", "glsl.es320.subgroupVote.comp", + "terminate.frag", + "terminate.vert", })), FileNameAsCustomTestSuffix ); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index fb3e28c6a2..9cb3dbab6e 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -436,6 +436,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.specConstant.int16.comp", "spv.specConstant.int8.comp", "spv.storageBuffer.vert", + "spv.terminate.frag", "spv.precise.tese", "spv.precise.tesc", "spv.volatileAtomic.comp", From 639f5461e37e386a62edb7381563b3986741b0c2 Mon Sep 17 00:00:00 2001 From: greg-lunarg Date: Thu, 12 Nov 2020 11:10:07 -0700 Subject: [PATCH 068/365] New nonuniform analysis (#2457) This implements a new nonunifom analysis suggested by @jbolz. This change generates nonUniform decorations that were previously missing and avoids generation of incorrect decorations. Most notably, it now generates decorations for nonuniform functions and out params. It avoids generating decorations for lvalues which themselves are not nonuniform. --- SPIRV/GlslangToSpv.cpp | 70 +- SPIRV/SpvBuilder.cpp | 11 +- SPIRV/SpvBuilder.h | 6 +- Test/baseResults/spv.nonuniform.frag.out | 770 ++++++++++++---------- Test/baseResults/spv.nonuniform4.frag.out | 1 + Test/spv.nonuniform.frag | 11 + 6 files changed, 496 insertions(+), 373 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index e9c14df380..a24b522394 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -149,6 +149,7 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { spv::Decoration TranslateInterpolationDecoration(const glslang::TQualifier& qualifier); spv::Decoration TranslateAuxiliaryStorageDecoration(const glslang::TQualifier& qualifier); spv::Decoration TranslateNonUniformDecoration(const glslang::TQualifier& qualifier); + spv::Decoration TranslateNonUniformDecoration(const spv::Builder::AccessChain::CoherentFlags& coherentFlags); spv::Builder::AccessChain::CoherentFlags TranslateCoherent(const glslang::TType& type); spv::MemoryAccessMask TranslateMemoryAccess(const spv::Builder::AccessChain::CoherentFlags &coherentFlags); spv::ImageOperandsMask TranslateImageOperands(const spv::Builder::AccessChain::CoherentFlags &coherentFlags); @@ -539,6 +540,20 @@ spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration(const glsl return spv::DecorationMax; } +// If lvalue flags contains nonUniform, return SPIR-V NonUniform decoration. +spv::Decoration TGlslangToSpvTraverser::TranslateNonUniformDecoration( + const spv::Builder::AccessChain::CoherentFlags& coherentFlags) +{ +#ifndef GLSLANG_WEB + if (coherentFlags.isNonUniform()) { + builder.addIncorporatedExtension("SPV_EXT_descriptor_indexing", spv::Spv_1_5); + builder.addCapability(spv::CapabilityShaderNonUniformEXT); + return spv::DecorationNonUniformEXT; + } else +#endif + return spv::DecorationMax; +} + spv::MemoryAccessMask TGlslangToSpvTraverser::TranslateMemoryAccess( const spv::Builder::AccessChain::CoherentFlags &coherentFlags) { @@ -614,6 +629,7 @@ spv::Builder::AccessChain::CoherentFlags TGlslangToSpvTraverser::TranslateCohere flags.volatil; flags.isImage = type.getBasicType() == glslang::EbtSampler; #endif + flags.nonUniform = type.getQualifier().nonUniform; return flags; } @@ -1376,6 +1392,8 @@ void InheritQualifiers(glslang::TQualifier& child, const glslang::TQualifier& pa if (parent.writeonly) child.writeonly = true; #endif + if (parent.nonUniform) + child.nonUniform = true; } bool HasNonLayoutQualifiers(const glslang::TType& type, const glslang::TQualifier& qualifier) @@ -1881,9 +1899,11 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T spv::Id leftRValue = accessChainLoad(node->getLeft()->getType()); // do the operation + spv::Builder::AccessChain::CoherentFlags coherentFlags = TranslateCoherent(node->getLeft()->getType()); + coherentFlags |= TranslateCoherent(node->getRight()->getType()); OpDecorations decorations = { TranslatePrecisionDecoration(node->getOperationPrecision()), TranslateNoContractionDecoration(node->getType().getQualifier()), - TranslateNonUniformDecoration(node->getType().getQualifier()) }; + TranslateNonUniformDecoration(coherentFlags) }; rValue = createBinaryOperation(node->getOp(), decorations, convertGlslangToSpvType(node->getType()), leftRValue, rValue, node->getType().getBasicType()); @@ -1914,13 +1934,16 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector() && node->getOp() == glslang::EOpIndexDirect) { + // Swizzle is uniform so propagate uniform into access chain + spv::Builder::AccessChain::CoherentFlags coherentFlags = TranslateCoherent(node->getLeft()->getType()); + coherentFlags.nonUniform = 0; // This is essentially a hard-coded vector swizzle of size 1, // so short circuit the access-chain stuff with a swizzle. std::vector swizzle; swizzle.push_back(glslangIndex); int dummySize; builder.accessChainPushSwizzle(swizzle, convertGlslangToSpvType(node->getLeft()->getType()), - TranslateCoherent(node->getLeft()->getType()), + coherentFlags, glslangIntermediate->getBaseAlignmentScalar( node->getLeft()->getType(), dummySize)); } else { @@ -1951,9 +1974,14 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T } } + // Struct reference propagates uniform lvalue + spv::Builder::AccessChain::CoherentFlags coherentFlags = + TranslateCoherent(node->getLeft()->getType()); + coherentFlags.nonUniform = 0; + // normal case for indexing array or structure or block builder.accessChainPush(builder.makeIntConstant(spvIndex), - TranslateCoherent(node->getLeft()->getType()), + coherentFlags, node->getLeft()->getType().getBufferReferenceAlignment()); // Add capabilities here for accessing PointSize and clip/cull distance. @@ -1987,15 +2015,20 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T // restore the saved access chain builder.setAccessChain(partial); + // Only if index is nonUniform should we propagate nonUniform into access chain + spv::Builder::AccessChain::CoherentFlags index_flags = TranslateCoherent(node->getRight()->getType()); + spv::Builder::AccessChain::CoherentFlags coherent_flags = TranslateCoherent(node->getLeft()->getType()); + coherent_flags.nonUniform = index_flags.nonUniform; + if (! node->getLeft()->getType().isArray() && node->getLeft()->getType().isVector()) { int dummySize; - builder.accessChainPushComponent(index, convertGlslangToSpvType(node->getLeft()->getType()), - TranslateCoherent(node->getLeft()->getType()), + builder.accessChainPushComponent( + index, convertGlslangToSpvType(node->getLeft()->getType()), coherent_flags, glslangIntermediate->getBaseAlignmentScalar(node->getLeft()->getType(), dummySize)); } else - builder.accessChainPush(index, TranslateCoherent(node->getLeft()->getType()), - node->getLeft()->getType().getBufferReferenceAlignment()); + builder.accessChainPush(index, coherent_flags, + node->getLeft()->getType().getBufferReferenceAlignment()); } return false; case glslang::EOpVectorSwizzle: @@ -2119,7 +2152,7 @@ spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object) // handle 32-bit v.xy* -> 64-bit builder.clearAccessChain(); builder.setAccessChainLValue(object); - object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId); + object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, 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)); @@ -2135,7 +2168,7 @@ spv::Id TGlslangToSpvTraverser::translateForcedType(spv::Id object) // and we insert a transpose after loading the original non-transposed builtins builder.clearAccessChain(); builder.setAccessChainLValue(object); - object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, objectTypeId); + object = builder.accessChainLoad(spv::NoPrecision, spv::DecorationMax, spv::DecorationMax, objectTypeId); return builder.createUnaryOp(spv::OpTranspose, desiredTypeId, object); } else { @@ -2322,7 +2355,7 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI // The result of operation is always stored, but conditionally the // consumed result. The consumed result is always an r-value. builder.accessChainStore(result, - TranslateNonUniformDecoration(node->getOperand()->getType().getQualifier())); + TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags)); builder.clearAccessChain(); if (node->getOp() == glslang::EOpPreIncrement || node->getOp() == glslang::EOpPreDecrement) @@ -2398,7 +2431,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt spv::Id invertedType = spv::NoType; // to use to override the natural type of the node std::vector complexLvalues; // for holding swizzling l-values too complex for // SPIR-V, for an out parameter - std::vector complexLValueQualifiers; std::vector temporaryLvalues; // temporaries to pass, as proxies for complexLValues auto resultType = [&invertedType, &node, this](){ return invertedType != spv::NoType ? @@ -3020,7 +3052,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt // receive the result, and must later swizzle that into the original // l-value. complexLvalues.push_back(builder.getAccessChain()); - complexLValueQualifiers.push_back(glslangOperands[arg]->getAsTyped()->getType().getQualifier()); temporaryLvalues.push_back(builder.createVariable( spv::NoPrecision, spv::StorageClassFunction, builder.accessChainGetInferredType(), "swizzleTemp")); @@ -3125,7 +3156,8 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt for (unsigned int i = 0; i < temporaryLvalues.size(); ++i) { builder.setAccessChain(complexLvalues[i]); - builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision), TranslateNonUniformDecoration(complexLValueQualifiers[i])); + builder.accessChainStore(builder.createLoad(temporaryLvalues[i], spv::NoPrecision), + TranslateNonUniformDecoration(complexLvalues[i].coherentFlags)); } } @@ -4135,6 +4167,7 @@ spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type) alignment |= type.getBufferReferenceAlignment(); spv::Id loadedId = builder.accessChainLoad(TranslatePrecisionDecoration(type), + TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags), TranslateNonUniformDecoration(type.getQualifier()), nominalTypeId, spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerAvailableKHRMask), @@ -4202,7 +4235,7 @@ void TGlslangToSpvTraverser::accessChainStore(const glslang::TType& type, spv::I unsigned int alignment = builder.getAccessChain().alignment; alignment |= type.getBufferReferenceAlignment(); - builder.accessChainStore(rvalue, TranslateNonUniformDecoration(type.getQualifier()), + builder.accessChainStore(rvalue, TranslateNonUniformDecoration(builder.getAccessChain().coherentFlags), spv::MemoryAccessMask(TranslateMemoryAccess(coherentFlags) & ~spv::MemoryAccessMakePointerVisibleKHRMask), TranslateMemoryScope(coherentFlags), alignment); @@ -4734,8 +4767,10 @@ void TGlslangToSpvTraverser::translateArguments(const glslang::TIntermAggregate& } if (lvalue) { - arguments.push_back(builder.accessChainGetLValue()); + spv::Id lvalue_id = builder.accessChainGetLValue(); + arguments.push_back(lvalue_id); lvalueCoherentFlags = builder.getAccessChain().coherentFlags; + builder.addDecoration(lvalue_id, TranslateNonUniformDecoration(lvalueCoherentFlags)); lvalueCoherentFlags |= TranslateCoherent(glslangArguments[i]->getAsTyped()->getType()); } else #endif @@ -5415,6 +5450,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg // 3. Make the call. spv::Id result = builder.createFunctionCall(function, spvArgs); builder.setPrecision(result, TranslatePrecisionDecoration(node->getType())); + builder.addDecoration(result, TranslateNonUniformDecoration(node->getType().getQualifier())); // 4. Copy back out an "out" arguments. lValueCount = 0; @@ -5424,6 +5460,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg else if (writableParam(qualifiers[a])) { if (qualifiers[a] == glslang::EvqOut || qualifiers[a] == glslang::EvqInOut) { spv::Id copy = builder.createLoad(spvArgs[a], spv::NoPrecision); + builder.addDecoration(copy, TranslateNonUniformDecoration(argTypes[a]->getQualifier())); builder.setAccessChain(lValues[lValueCount]); multiTypeStore(*argTypes[a], copy); } @@ -8228,9 +8265,6 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, memory[i]); } - // nonuniform - builder.addDecoration(id, TranslateNonUniformDecoration(symbol->getType().getQualifier())); - if (builtIn == spv::BuiltInSampleMask) { spv::Decoration decoration; // GL_NV_sample_mask_override_coverage extension diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 85ffe90af7..390b18add1 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -2798,8 +2798,9 @@ void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAcce } // Comments in header -Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resultType, - spv::MemoryAccessMask memoryAccess, spv::Scope scope, unsigned int alignment) +Id Builder::accessChainLoad(Decoration precision, Decoration l_nonUniform, + Decoration r_nonUniform, Id resultType, spv::MemoryAccessMask memoryAccess, + spv::Scope scope, unsigned int alignment) { Id id; @@ -2863,9 +2864,9 @@ Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resu // Buffer accesses need the access chain decorated, and this is where // loaded image types get decorated. TODO: This should maybe move to // createImageTextureFunctionCall. - addDecoration(id, nonUniform); + addDecoration(id, l_nonUniform); id = createLoad(id, precision, memoryAccess, scope, alignment); - addDecoration(id, nonUniform); + addDecoration(id, r_nonUniform); } // Done, unless there are swizzles to do @@ -2886,7 +2887,7 @@ Id Builder::accessChainLoad(Decoration precision, Decoration nonUniform, Id resu if (accessChain.component != NoResult) id = setPrecision(createVectorExtractDynamic(id, resultType, accessChain.component), precision); - addDecoration(id, nonUniform); + addDecoration(id, r_nonUniform); return id; } diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 873c0cd76a..63dddcb830 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -625,6 +625,7 @@ class Builder { CoherentFlags operator |=(const CoherentFlags &other) { return *this; } #else bool isVolatile() const { return volatil; } + bool isNonUniform() const { return nonUniform; } bool anyCoherent() const { return coherent || devicecoherent || queuefamilycoherent || workgroupcoherent || subgroupcoherent || shadercallcoherent; @@ -639,6 +640,7 @@ class Builder { unsigned nonprivate : 1; unsigned volatil : 1; unsigned isImage : 1; + unsigned nonUniform : 1; void clear() { coherent = 0; @@ -650,6 +652,7 @@ class Builder { nonprivate = 0; volatil = 0; isImage = 0; + nonUniform = 0; } CoherentFlags operator |=(const CoherentFlags &other) { @@ -662,6 +665,7 @@ class Builder { nonprivate |= other.nonprivate; volatil |= other.volatil; isImage |= other.isImage; + nonUniform |= other.nonUniform; return *this; } #endif @@ -727,7 +731,7 @@ class Builder { spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0); // use accessChain and swizzle to load an r-value - Id accessChainLoad(Decoration precision, Decoration nonUniform, Id ResultType, + Id accessChainLoad(Decoration precision, Decoration l_nonUniform, Decoration r_nonUniform, Id ResultType, spv::MemoryAccessMask memoryAccess = spv::MemoryAccessMaskNone, spv::Scope scope = spv::ScopeMax, unsigned int alignment = 0); diff --git a/Test/baseResults/spv.nonuniform.frag.out b/Test/baseResults/spv.nonuniform.frag.out index 66f53d5fe7..f6febc9b94 100644 --- a/Test/baseResults/spv.nonuniform.frag.out +++ b/Test/baseResults/spv.nonuniform.frag.out @@ -1,7 +1,7 @@ spv.nonuniform.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 235 +// Id's are bound by 289 Capability Shader Capability InputAttachment @@ -22,7 +22,7 @@ spv.nonuniform.frag Extension "SPV_EXT_descriptor_indexing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 35 92 182 + EntryPoint Fragment 4 "main" 41 98 188 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_EXT_nonuniform_qualifier" @@ -34,246 +34,268 @@ spv.nonuniform.frag Name 17 "nu_li" Name 18 "param" Name 20 "param" - Name 32 "b" - Name 35 "nu_inv4" - Name 41 "nu_gf" - Name 47 "inputAttachmentDyn" - Name 48 "dyn_i" - Name 64 "uniformTexelBufferDyn" - Name 78 "storageTexelBufferDyn" - Name 87 "uname" - MemberName 87(uname) 0 "a" - Name 90 "uniformBuffer" - Name 92 "nu_ii" - Name 99 "bname" - MemberName 99(bname) 0 "b" - Name 102 "storageBuffer" - Name 112 "sampledImage" - Name 127 "storageImage" - Name 139 "inputAttachment" - Name 149 "uniformTexelBuffer" - Name 160 "storageTexelBuffer" - Name 171 "uniformTexArr" - Name 178 "uniformSampler" - Name 182 "inTexcoord" - Name 190 "v" - Name 205 "uv" - Name 215 "m" - Name 223 "S" - MemberName 223(S) 0 "a" - Name 225 "s" - Decorate 9(nupi) DecorationNonUniformEXT + Name 30 "nu_li2" + Name 38 "b" + Name 41 "nu_inv4" + Name 47 "nu_gf" + Name 53 "inputAttachmentDyn" + Name 54 "dyn_i" + Name 70 "uniformTexelBufferDyn" + Name 84 "storageTexelBufferDyn" + Name 93 "uname" + MemberName 93(uname) 0 "a" + Name 96 "uniformBuffer" + Name 98 "nu_ii" + Name 105 "bname" + MemberName 105(bname) 0 "b" + Name 108 "storageBuffer" + Name 118 "sampledImage" + Name 133 "storageImage" + Name 145 "inputAttachment" + Name 155 "uniformTexelBuffer" + Name 166 "storageTexelBuffer" + Name 177 "uniformTexArr" + Name 184 "uniformSampler" + Name 188 "inTexcoord" + Name 207 "v" + Name 222 "uv" + Name 232 "m" + Name 240 "S" + MemberName 240(S) 0 "a" + Name 242 "s" + Name 252 "arr" + Name 259 "um" + Name 268 "US" + MemberName 268(US) 0 "a" + Name 270 "us" + Name 278 "uarr" Decorate 13 DecorationNonUniformEXT - Decorate 17(nu_li) DecorationNonUniformEXT - Decorate 17(nu_li) DecorationNonUniformEXT Decorate 19 DecorationNonUniformEXT - Decorate 18(param) DecorationNonUniformEXT - Decorate 17(nu_li) DecorationNonUniformEXT + Decorate 21 DecorationNonUniformEXT + Decorate 22 DecorationNonUniformEXT Decorate 24 DecorationNonUniformEXT Decorate 28 DecorationNonUniformEXT Decorate 29 DecorationNonUniformEXT - Decorate 17(nu_li) DecorationNonUniformEXT - Decorate 35(nu_inv4) Location 0 - Decorate 35(nu_inv4) DecorationNonUniformEXT - Decorate 39 DecorationNonUniformEXT - Decorate 40 DecorationNonUniformEXT - Decorate 41(nu_gf) DecorationNonUniformEXT - Decorate 41(nu_gf) DecorationNonUniformEXT - Decorate 42 DecorationNonUniformEXT - Decorate 43 DecorationNonUniformEXT - Decorate 47(inputAttachmentDyn) DescriptorSet 0 - Decorate 47(inputAttachmentDyn) Binding 0 - Decorate 47(inputAttachmentDyn) InputAttachmentIndex 0 - Decorate 64(uniformTexelBufferDyn) DescriptorSet 0 - Decorate 64(uniformTexelBufferDyn) Binding 1 - Decorate 78(storageTexelBufferDyn) DescriptorSet 0 - Decorate 78(storageTexelBufferDyn) Binding 2 - MemberDecorate 87(uname) 0 Offset 0 - Decorate 87(uname) Block - Decorate 90(uniformBuffer) DescriptorSet 0 - Decorate 90(uniformBuffer) Binding 3 - Decorate 92(nu_ii) Flat - Decorate 92(nu_ii) Location 1 - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 93 DecorationNonUniformEXT - Decorate 95 DecorationNonUniformEXT - Decorate 96 DecorationNonUniformEXT - MemberDecorate 99(bname) 0 Offset 0 - Decorate 99(bname) BufferBlock - Decorate 102(storageBuffer) DescriptorSet 0 - Decorate 102(storageBuffer) Binding 4 - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 103 DecorationNonUniformEXT + Decorate 34 DecorationNonUniformEXT + Decorate 35 DecorationNonUniformEXT + Decorate 41(nu_inv4) Location 0 + Decorate 46 DecorationNonUniformEXT + Decorate 48 DecorationNonUniformEXT + Decorate 49 DecorationNonUniformEXT + Decorate 53(inputAttachmentDyn) DescriptorSet 0 + Decorate 53(inputAttachmentDyn) Binding 0 + Decorate 53(inputAttachmentDyn) InputAttachmentIndex 0 + Decorate 70(uniformTexelBufferDyn) DescriptorSet 0 + Decorate 70(uniformTexelBufferDyn) Binding 1 + Decorate 84(storageTexelBufferDyn) DescriptorSet 0 + Decorate 84(storageTexelBufferDyn) Binding 2 + MemberDecorate 93(uname) 0 Offset 0 + Decorate 93(uname) Block + Decorate 96(uniformBuffer) DescriptorSet 0 + Decorate 96(uniformBuffer) Binding 3 + Decorate 98(nu_ii) Flat + Decorate 98(nu_ii) Location 1 + Decorate 99 DecorationNonUniformEXT + Decorate 101 DecorationNonUniformEXT + Decorate 102 DecorationNonUniformEXT Decorate 104 DecorationNonUniformEXT - Decorate 105 DecorationNonUniformEXT - Decorate 112(sampledImage) DescriptorSet 0 - Decorate 112(sampledImage) Binding 5 - Decorate 92(nu_ii) DecorationNonUniformEXT + MemberDecorate 105(bname) 0 Offset 0 + Decorate 105(bname) BufferBlock + Decorate 108(storageBuffer) DescriptorSet 0 + Decorate 108(storageBuffer) Binding 4 + Decorate 109 DecorationNonUniformEXT + Decorate 110 DecorationNonUniformEXT + Decorate 111 DecorationNonUniformEXT Decorate 113 DecorationNonUniformEXT - Decorate 115 DecorationNonUniformEXT - Decorate 116 DecorationNonUniformEXT - Decorate 127(storageImage) DescriptorSet 0 - Decorate 127(storageImage) Binding 6 - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 128 DecorationNonUniformEXT - Decorate 130 DecorationNonUniformEXT - Decorate 131 DecorationNonUniformEXT - Decorate 139(inputAttachment) DescriptorSet 0 - Decorate 139(inputAttachment) Binding 7 - Decorate 139(inputAttachment) InputAttachmentIndex 1 - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 140 DecorationNonUniformEXT - Decorate 141 DecorationNonUniformEXT - Decorate 142 DecorationNonUniformEXT - Decorate 149(uniformTexelBuffer) DescriptorSet 0 - Decorate 149(uniformTexelBuffer) Binding 8 - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 150 DecorationNonUniformEXT - Decorate 151 DecorationNonUniformEXT - Decorate 152 DecorationNonUniformEXT - Decorate 153 DecorationNonUniformEXT - Decorate 160(storageTexelBuffer) DescriptorSet 0 - Decorate 160(storageTexelBuffer) Binding 9 - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 161 DecorationNonUniformEXT - Decorate 162 DecorationNonUniformEXT - Decorate 163 DecorationNonUniformEXT - Decorate 171(uniformTexArr) DescriptorSet 0 - Decorate 171(uniformTexArr) Binding 10 - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 172 DecorationNonUniformEXT - Decorate 174 DecorationNonUniformEXT - Decorate 175 DecorationNonUniformEXT - Decorate 178(uniformSampler) DescriptorSet 0 - Decorate 178(uniformSampler) Binding 11 - Decorate 182(inTexcoord) Location 2 - Decorate 190(v) DecorationNonUniformEXT - Decorate 192 DecorationNonUniformEXT - Decorate 193 DecorationNonUniformEXT + Decorate 118(sampledImage) DescriptorSet 0 + Decorate 118(sampledImage) Binding 5 + Decorate 119 DecorationNonUniformEXT + Decorate 121 DecorationNonUniformEXT + Decorate 122 DecorationNonUniformEXT + Decorate 133(storageImage) DescriptorSet 0 + Decorate 133(storageImage) Binding 6 + Decorate 134 DecorationNonUniformEXT + Decorate 136 DecorationNonUniformEXT + Decorate 137 DecorationNonUniformEXT + Decorate 145(inputAttachment) DescriptorSet 0 + Decorate 145(inputAttachment) Binding 7 + Decorate 145(inputAttachment) InputAttachmentIndex 1 + Decorate 146 DecorationNonUniformEXT + Decorate 147 DecorationNonUniformEXT + Decorate 148 DecorationNonUniformEXT + Decorate 155(uniformTexelBuffer) DescriptorSet 0 + Decorate 155(uniformTexelBuffer) Binding 8 + Decorate 156 DecorationNonUniformEXT + Decorate 157 DecorationNonUniformEXT + Decorate 158 DecorationNonUniformEXT + Decorate 159 DecorationNonUniformEXT + Decorate 166(storageTexelBuffer) DescriptorSet 0 + Decorate 166(storageTexelBuffer) Binding 9 + Decorate 167 DecorationNonUniformEXT + Decorate 168 DecorationNonUniformEXT + Decorate 169 DecorationNonUniformEXT + Decorate 177(uniformTexArr) DescriptorSet 0 + Decorate 177(uniformTexArr) Binding 10 + Decorate 178 DecorationNonUniformEXT + Decorate 180 DecorationNonUniformEXT + Decorate 181 DecorationNonUniformEXT + Decorate 184(uniformSampler) DescriptorSet 0 + Decorate 184(uniformSampler) Binding 11 + Decorate 188(inTexcoord) Location 2 Decorate 194 DecorationNonUniformEXT Decorate 195 DecorationNonUniformEXT + Decorate 196 DecorationNonUniformEXT Decorate 199 DecorationNonUniformEXT - Decorate 200 DecorationNonUniformEXT - Decorate 201 DecorationNonUniformEXT - Decorate 202 DecorationNonUniformEXT - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 206 DecorationNonUniformEXT - Decorate 207 DecorationNonUniformEXT - Decorate 208 DecorationNonUniformEXT - Decorate 209 DecorationNonUniformEXT Decorate 210 DecorationNonUniformEXT - Decorate 215(m) DecorationNonUniformEXT - Decorate 216 DecorationNonUniformEXT + Decorate 211 DecorationNonUniformEXT + Decorate 212 DecorationNonUniformEXT + Decorate 214 DecorationNonUniformEXT Decorate 217 DecorationNonUniformEXT - Decorate 225(s) DecorationNonUniformEXT + Decorate 218 DecorationNonUniformEXT + Decorate 219 DecorationNonUniformEXT + Decorate 221 DecorationNonUniformEXT + Decorate 223 DecorationNonUniformEXT + Decorate 224 DecorationNonUniformEXT + Decorate 225 DecorationNonUniformEXT Decorate 226 DecorationNonUniformEXT Decorate 227 DecorationNonUniformEXT - Decorate 228 DecorationNonUniformEXT Decorate 229 DecorationNonUniformEXT - Decorate 92(nu_ii) DecorationNonUniformEXT - Decorate 232 DecorationNonUniformEXT Decorate 234 DecorationNonUniformEXT + Decorate 244 DecorationNonUniformEXT + Decorate 245 DecorationNonUniformEXT + Decorate 246 DecorationNonUniformEXT + Decorate 248 DecorationNonUniformEXT + Decorate 254 DecorationNonUniformEXT + Decorate 255 DecorationNonUniformEXT + Decorate 256 DecorationNonUniformEXT + Decorate 258 DecorationNonUniformEXT + Decorate 260 DecorationNonUniformEXT + Decorate 261 DecorationNonUniformEXT + Decorate 262 DecorationNonUniformEXT + Decorate 271 DecorationNonUniformEXT + Decorate 272 DecorationNonUniformEXT + Decorate 273 DecorationNonUniformEXT + Decorate 274 DecorationNonUniformEXT + Decorate 275 DecorationNonUniformEXT + Decorate 277 DecorationNonUniformEXT + Decorate 279 DecorationNonUniformEXT + Decorate 280 DecorationNonUniformEXT + Decorate 281 DecorationNonUniformEXT + Decorate 282 DecorationNonUniformEXT + Decorate 283 DecorationNonUniformEXT + Decorate 285 DecorationNonUniformEXT + Decorate 286 DecorationNonUniformEXT + Decorate 288 DecorationNonUniformEXT 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 7: TypePointer Function 6(int) 8: TypeFunction 6(int) 7(ptr) 7(ptr) 26: 6(int) Constant 2 - 30: TypeFloat 32 - 31: TypePointer Function 30(float) - 33: TypeVector 30(float) 4 - 34: TypePointer Input 33(fvec4) - 35(nu_inv4): 34(ptr) Variable Input - 36: TypeInt 32 0 - 37: 36(int) Constant 0 - 38: TypePointer Input 30(float) - 44: TypeImage 30(float) SubpassData nonsampled format:Unknown - 45: TypeRuntimeArray 44 - 46: TypePointer UniformConstant 45 -47(inputAttachmentDyn): 46(ptr) Variable UniformConstant - 50: TypePointer UniformConstant 44 - 53: 6(int) Constant 0 - 54: TypeVector 6(int) 2 - 55: 54(ivec2) ConstantComposite 53 53 - 60: TypeImage 30(float) Buffer sampled format:Unknown - 61: TypeSampledImage 60 - 62: TypeRuntimeArray 61 - 63: TypePointer UniformConstant 62 -64(uniformTexelBufferDyn): 63(ptr) Variable UniformConstant - 66: TypePointer UniformConstant 61 - 69: 6(int) Constant 1 - 75: TypeImage 30(float) Buffer nonsampled format:R32f - 76: TypeRuntimeArray 75 - 77: TypePointer UniformConstant 76 -78(storageTexelBufferDyn): 77(ptr) Variable UniformConstant - 80: TypePointer UniformConstant 75 - 87(uname): TypeStruct 30(float) - 88: TypeRuntimeArray 87(uname) - 89: TypePointer Uniform 88 -90(uniformBuffer): 89(ptr) Variable Uniform - 91: TypePointer Input 6(int) - 92(nu_ii): 91(ptr) Variable Input - 94: TypePointer Uniform 30(float) - 99(bname): TypeStruct 30(float) - 100: TypeRuntimeArray 99(bname) - 101: TypePointer Uniform 100 -102(storageBuffer): 101(ptr) Variable Uniform - 108: TypeImage 30(float) 2D sampled format:Unknown - 109: TypeSampledImage 108 - 110: TypeRuntimeArray 109 - 111: TypePointer UniformConstant 110 -112(sampledImage): 111(ptr) Variable UniformConstant - 114: TypePointer UniformConstant 109 - 117: TypeVector 30(float) 2 - 118: 30(float) Constant 1056964608 - 119: 117(fvec2) ConstantComposite 118 118 - 124: TypeImage 30(float) 2D nonsampled format:R32f - 125: TypeRuntimeArray 124 - 126: TypePointer UniformConstant 125 -127(storageImage): 126(ptr) Variable UniformConstant - 129: TypePointer UniformConstant 124 - 132: 54(ivec2) ConstantComposite 69 69 - 137: TypeRuntimeArray 44 - 138: TypePointer UniformConstant 137 -139(inputAttachment): 138(ptr) Variable UniformConstant - 147: TypeRuntimeArray 61 - 148: TypePointer UniformConstant 147 -149(uniformTexelBuffer): 148(ptr) Variable UniformConstant - 158: TypeRuntimeArray 75 - 159: TypePointer UniformConstant 158 -160(storageTexelBuffer): 159(ptr) Variable UniformConstant - 168: 36(int) Constant 8 - 169: TypeArray 108 168 - 170: TypePointer UniformConstant 169 -171(uniformTexArr): 170(ptr) Variable UniformConstant - 173: TypePointer UniformConstant 108 - 176: TypeSampler - 177: TypePointer UniformConstant 176 -178(uniformSampler): 177(ptr) Variable UniformConstant - 181: TypePointer Input 117(fvec2) - 182(inTexcoord): 181(ptr) Variable Input - 188: TypeVector 6(int) 4 - 189: TypePointer Function 188(ivec4) - 191: 36(int) Constant 1 - 198: 36(int) Constant 2 - 213: TypeMatrix 33(fvec4) 4 - 214: TypePointer Function 213 - 223(S): TypeStruct 6(int) - 224: TypePointer Function 223(S) + 36: TypeFloat 32 + 37: TypePointer Function 36(float) + 39: TypeVector 36(float) 4 + 40: TypePointer Input 39(fvec4) + 41(nu_inv4): 40(ptr) Variable Input + 42: TypeInt 32 0 + 43: 42(int) Constant 0 + 44: TypePointer Input 36(float) + 50: TypeImage 36(float) SubpassData nonsampled format:Unknown + 51: TypeRuntimeArray 50 + 52: TypePointer UniformConstant 51 +53(inputAttachmentDyn): 52(ptr) Variable UniformConstant + 56: TypePointer UniformConstant 50 + 59: 6(int) Constant 0 + 60: TypeVector 6(int) 2 + 61: 60(ivec2) ConstantComposite 59 59 + 66: TypeImage 36(float) Buffer sampled format:Unknown + 67: TypeSampledImage 66 + 68: TypeRuntimeArray 67 + 69: TypePointer UniformConstant 68 +70(uniformTexelBufferDyn): 69(ptr) Variable UniformConstant + 72: TypePointer UniformConstant 67 + 75: 6(int) Constant 1 + 81: TypeImage 36(float) Buffer nonsampled format:R32f + 82: TypeRuntimeArray 81 + 83: TypePointer UniformConstant 82 +84(storageTexelBufferDyn): 83(ptr) Variable UniformConstant + 86: TypePointer UniformConstant 81 + 93(uname): TypeStruct 36(float) + 94: TypeRuntimeArray 93(uname) + 95: TypePointer Uniform 94 +96(uniformBuffer): 95(ptr) Variable Uniform + 97: TypePointer Input 6(int) + 98(nu_ii): 97(ptr) Variable Input + 100: TypePointer Uniform 36(float) + 105(bname): TypeStruct 36(float) + 106: TypeRuntimeArray 105(bname) + 107: TypePointer Uniform 106 +108(storageBuffer): 107(ptr) Variable Uniform + 114: TypeImage 36(float) 2D sampled format:Unknown + 115: TypeSampledImage 114 + 116: TypeRuntimeArray 115 + 117: TypePointer UniformConstant 116 +118(sampledImage): 117(ptr) Variable UniformConstant + 120: TypePointer UniformConstant 115 + 123: TypeVector 36(float) 2 + 124: 36(float) Constant 1056964608 + 125: 123(fvec2) ConstantComposite 124 124 + 130: TypeImage 36(float) 2D nonsampled format:R32f + 131: TypeRuntimeArray 130 + 132: TypePointer UniformConstant 131 +133(storageImage): 132(ptr) Variable UniformConstant + 135: TypePointer UniformConstant 130 + 138: 60(ivec2) ConstantComposite 75 75 + 143: TypeRuntimeArray 50 + 144: TypePointer UniformConstant 143 +145(inputAttachment): 144(ptr) Variable UniformConstant + 153: TypeRuntimeArray 67 + 154: TypePointer UniformConstant 153 +155(uniformTexelBuffer): 154(ptr) Variable UniformConstant + 164: TypeRuntimeArray 81 + 165: TypePointer UniformConstant 164 +166(storageTexelBuffer): 165(ptr) Variable UniformConstant + 174: 42(int) Constant 8 + 175: TypeArray 114 174 + 176: TypePointer UniformConstant 175 +177(uniformTexArr): 176(ptr) Variable UniformConstant + 179: TypePointer UniformConstant 114 + 182: TypeSampler + 183: TypePointer UniformConstant 182 +184(uniformSampler): 183(ptr) Variable UniformConstant + 187: TypePointer Input 123(fvec2) + 188(inTexcoord): 187(ptr) Variable Input + 205: TypeVector 6(int) 4 + 206: TypePointer Function 205(ivec4) + 208: 42(int) Constant 1 + 215: 42(int) Constant 2 + 230: TypeMatrix 39(fvec4) 4 + 231: TypePointer Function 230 + 240(S): TypeStruct 6(int) + 241: TypePointer Function 240(S) + 249: 42(int) Constant 10 + 250: TypeArray 6(int) 249 + 251: TypePointer Function 250 + 268(US): TypeStruct 250 + 269: TypePointer Function 268(US) 4(main): 2 Function None 3 5: Label 16(a): 7(ptr) Variable Function 17(nu_li): 7(ptr) Variable Function 18(param): 7(ptr) Variable Function 20(param): 7(ptr) Variable Function - 32(b): 31(ptr) Variable Function - 41(nu_gf): 31(ptr) Variable Function - 48(dyn_i): 7(ptr) Variable Function - 190(v): 189(ptr) Variable Function - 205(uv): 189(ptr) Variable Function - 215(m): 214(ptr) Variable Function - 225(s): 224(ptr) Variable Function + 30(nu_li2): 7(ptr) Variable Function + 38(b): 37(ptr) Variable Function + 47(nu_gf): 37(ptr) Variable Function + 54(dyn_i): 7(ptr) Variable Function + 207(v): 206(ptr) Variable Function + 222(uv): 206(ptr) Variable Function + 232(m): 231(ptr) Variable Function + 242(s): 241(ptr) Variable Function + 252(arr): 251(ptr) Variable Function + 259(um): 231(ptr) Variable Function + 270(us): 269(ptr) Variable Function + 278(uarr): 251(ptr) Variable Function 19: 6(int) Load 17(nu_li) Store 18(param) 19 21: 6(int) FunctionCall 11(foo(i1;i1;) 18(param) 20(param) @@ -287,141 +309,191 @@ spv.nonuniform.frag 28: 6(int) CopyObject 27 29: 6(int) IAdd 24 28 Store 17(nu_li) 29 - 39: 38(ptr) AccessChain 35(nu_inv4) 37 - 40: 30(float) Load 39 - 42: 30(float) Load 41(nu_gf) - 43: 30(float) FMul 40 42 - Store 32(b) 43 - 49: 6(int) Load 48(dyn_i) - 51: 50(ptr) AccessChain 47(inputAttachmentDyn) 49 - 52: 44 Load 51 - 56: 33(fvec4) ImageRead 52 55 - 57: 30(float) CompositeExtract 56 0 - 58: 30(float) Load 32(b) - 59: 30(float) FAdd 58 57 - Store 32(b) 59 - 65: 6(int) Load 48(dyn_i) - 67: 66(ptr) AccessChain 64(uniformTexelBufferDyn) 65 - 68: 61 Load 67 - 70: 60 Image 68 - 71: 33(fvec4) ImageFetch 70 69 - 72: 30(float) CompositeExtract 71 0 - 73: 30(float) Load 32(b) - 74: 30(float) FAdd 73 72 - Store 32(b) 74 - 79: 6(int) Load 48(dyn_i) - 81: 80(ptr) AccessChain 78(storageTexelBufferDyn) 79 - 82: 75 Load 81 - 83: 33(fvec4) ImageRead 82 69 - 84: 30(float) CompositeExtract 83 0 - 85: 30(float) Load 32(b) - 86: 30(float) FAdd 85 84 - Store 32(b) 86 - 93: 6(int) Load 92(nu_ii) - 95: 94(ptr) AccessChain 90(uniformBuffer) 93 53 - 96: 30(float) Load 95 - 97: 30(float) Load 32(b) - 98: 30(float) FAdd 97 96 - Store 32(b) 98 - 103: 6(int) Load 92(nu_ii) - 104: 94(ptr) AccessChain 102(storageBuffer) 103 53 - 105: 30(float) Load 104 - 106: 30(float) Load 32(b) - 107: 30(float) FAdd 106 105 - Store 32(b) 107 - 113: 6(int) Load 92(nu_ii) - 115: 114(ptr) AccessChain 112(sampledImage) 113 - 116: 109 Load 115 - 120: 33(fvec4) ImageSampleImplicitLod 116 119 - 121: 30(float) CompositeExtract 120 0 - 122: 30(float) Load 32(b) - 123: 30(float) FAdd 122 121 - Store 32(b) 123 - 128: 6(int) Load 92(nu_ii) - 130: 129(ptr) AccessChain 127(storageImage) 128 - 131: 124 Load 130 - 133: 33(fvec4) ImageRead 131 132 - 134: 30(float) CompositeExtract 133 0 - 135: 30(float) Load 32(b) - 136: 30(float) FAdd 135 134 - Store 32(b) 136 - 140: 6(int) Load 92(nu_ii) - 141: 50(ptr) AccessChain 139(inputAttachment) 140 - 142: 44 Load 141 - 143: 33(fvec4) ImageRead 142 55 - 144: 30(float) CompositeExtract 143 0 - 145: 30(float) Load 32(b) - 146: 30(float) FAdd 145 144 - Store 32(b) 146 - 150: 6(int) Load 92(nu_ii) - 151: 66(ptr) AccessChain 149(uniformTexelBuffer) 150 - 152: 61 Load 151 - 153: 60 Image 152 - 154: 33(fvec4) ImageFetch 153 69 - 155: 30(float) CompositeExtract 154 0 - 156: 30(float) Load 32(b) - 157: 30(float) FAdd 156 155 - Store 32(b) 157 - 161: 6(int) Load 92(nu_ii) - 162: 80(ptr) AccessChain 160(storageTexelBuffer) 161 - 163: 75 Load 162 - 164: 33(fvec4) ImageRead 163 69 - 165: 30(float) CompositeExtract 164 0 - 166: 30(float) Load 32(b) - 167: 30(float) FAdd 166 165 - Store 32(b) 167 - 172: 6(int) Load 92(nu_ii) - 174: 173(ptr) AccessChain 171(uniformTexArr) 172 - 175: 108 Load 174 - 179: 176 Load 178(uniformSampler) - 180: 109 SampledImage 175 179 - 183: 117(fvec2) Load 182(inTexcoord) - 184: 33(fvec4) ImageSampleImplicitLod 180 183 - 185: 30(float) CompositeExtract 184 0 - 186: 30(float) Load 32(b) - 187: 30(float) FAdd 186 185 - Store 32(b) 187 - 192: 7(ptr) AccessChain 190(v) 191 - 193: 6(int) Load 192 - 194: 94(ptr) AccessChain 90(uniformBuffer) 193 53 - 195: 30(float) Load 194 - 196: 30(float) Load 32(b) - 197: 30(float) FAdd 196 195 - Store 32(b) 197 - 199: 7(ptr) AccessChain 190(v) 198 - 200: 6(int) Load 199 - 201: 94(ptr) AccessChain 90(uniformBuffer) 200 53 - 202: 30(float) Load 201 - 203: 30(float) Load 32(b) - 204: 30(float) FAdd 203 202 - Store 32(b) 204 - 206: 6(int) Load 92(nu_ii) - 207: 7(ptr) AccessChain 205(uv) 206 - 208: 6(int) Load 207 - 209: 94(ptr) AccessChain 90(uniformBuffer) 208 53 - 210: 30(float) Load 209 - 211: 30(float) Load 32(b) - 212: 30(float) FAdd 211 210 - Store 32(b) 212 - 216: 31(ptr) AccessChain 215(m) 26 198 - 217: 30(float) Load 216 - 218: 6(int) ConvertFToS 217 - 219: 94(ptr) AccessChain 90(uniformBuffer) 218 53 - 220: 30(float) Load 219 - 221: 30(float) Load 32(b) - 222: 30(float) FAdd 221 220 - Store 32(b) 222 - 226: 7(ptr) AccessChain 225(s) 53 - 227: 6(int) Load 226 - 228: 94(ptr) AccessChain 90(uniformBuffer) 227 53 - 229: 30(float) Load 228 - 230: 30(float) Load 32(b) - 231: 30(float) FAdd 230 229 - Store 32(b) 231 - 232: 6(int) Load 92(nu_ii) - 233: 30(float) Load 32(b) - 234: 94(ptr) AccessChain 102(storageBuffer) 232 53 - Store 234 233 + 31: 6(int) Load 16(a) + 32: 6(int) Load 16(a) + 33: 6(int) IMul 32 26 + 34: 6(int) CopyObject 33 + 35: 6(int) IAdd 31 34 + Store 30(nu_li2) 35 + 45: 44(ptr) AccessChain 41(nu_inv4) 43 + 46: 36(float) Load 45 + 48: 36(float) Load 47(nu_gf) + 49: 36(float) FMul 46 48 + Store 38(b) 49 + 55: 6(int) Load 54(dyn_i) + 57: 56(ptr) AccessChain 53(inputAttachmentDyn) 55 + 58: 50 Load 57 + 62: 39(fvec4) ImageRead 58 61 + 63: 36(float) CompositeExtract 62 0 + 64: 36(float) Load 38(b) + 65: 36(float) FAdd 64 63 + Store 38(b) 65 + 71: 6(int) Load 54(dyn_i) + 73: 72(ptr) AccessChain 70(uniformTexelBufferDyn) 71 + 74: 67 Load 73 + 76: 66 Image 74 + 77: 39(fvec4) ImageFetch 76 75 + 78: 36(float) CompositeExtract 77 0 + 79: 36(float) Load 38(b) + 80: 36(float) FAdd 79 78 + Store 38(b) 80 + 85: 6(int) Load 54(dyn_i) + 87: 86(ptr) AccessChain 84(storageTexelBufferDyn) 85 + 88: 81 Load 87 + 89: 39(fvec4) ImageRead 88 75 + 90: 36(float) CompositeExtract 89 0 + 91: 36(float) Load 38(b) + 92: 36(float) FAdd 91 90 + Store 38(b) 92 + 99: 6(int) Load 98(nu_ii) + 101: 100(ptr) AccessChain 96(uniformBuffer) 99 59 + 102: 36(float) Load 101 + 103: 36(float) Load 38(b) + 104: 36(float) FAdd 103 102 + Store 38(b) 104 + 109: 6(int) Load 98(nu_ii) + 110: 100(ptr) AccessChain 108(storageBuffer) 109 59 + 111: 36(float) Load 110 + 112: 36(float) Load 38(b) + 113: 36(float) FAdd 112 111 + Store 38(b) 113 + 119: 6(int) Load 98(nu_ii) + 121: 120(ptr) AccessChain 118(sampledImage) 119 + 122: 115 Load 121 + 126: 39(fvec4) ImageSampleImplicitLod 122 125 + 127: 36(float) CompositeExtract 126 0 + 128: 36(float) Load 38(b) + 129: 36(float) FAdd 128 127 + Store 38(b) 129 + 134: 6(int) Load 98(nu_ii) + 136: 135(ptr) AccessChain 133(storageImage) 134 + 137: 130 Load 136 + 139: 39(fvec4) ImageRead 137 138 + 140: 36(float) CompositeExtract 139 0 + 141: 36(float) Load 38(b) + 142: 36(float) FAdd 141 140 + Store 38(b) 142 + 146: 6(int) Load 98(nu_ii) + 147: 56(ptr) AccessChain 145(inputAttachment) 146 + 148: 50 Load 147 + 149: 39(fvec4) ImageRead 148 61 + 150: 36(float) CompositeExtract 149 0 + 151: 36(float) Load 38(b) + 152: 36(float) FAdd 151 150 + Store 38(b) 152 + 156: 6(int) Load 98(nu_ii) + 157: 72(ptr) AccessChain 155(uniformTexelBuffer) 156 + 158: 67 Load 157 + 159: 66 Image 158 + 160: 39(fvec4) ImageFetch 159 75 + 161: 36(float) CompositeExtract 160 0 + 162: 36(float) Load 38(b) + 163: 36(float) FAdd 162 161 + Store 38(b) 163 + 167: 6(int) Load 98(nu_ii) + 168: 86(ptr) AccessChain 166(storageTexelBuffer) 167 + 169: 81 Load 168 + 170: 39(fvec4) ImageRead 169 75 + 171: 36(float) CompositeExtract 170 0 + 172: 36(float) Load 38(b) + 173: 36(float) FAdd 172 171 + Store 38(b) 173 + 178: 6(int) Load 98(nu_ii) + 180: 179(ptr) AccessChain 177(uniformTexArr) 178 + 181: 114 Load 180 + 185: 182 Load 184(uniformSampler) + 186: 115 SampledImage 181 185 + 189: 123(fvec2) Load 188(inTexcoord) + 190: 39(fvec4) ImageSampleImplicitLod 186 189 + 191: 36(float) CompositeExtract 190 0 + 192: 36(float) Load 38(b) + 193: 36(float) FAdd 192 191 + Store 38(b) 193 + 194: 6(int) Load 98(nu_ii) + 195: 179(ptr) AccessChain 177(uniformTexArr) 194 + 196: 114 Load 195 + 197: 182 Load 184(uniformSampler) + 198: 115 SampledImage 196 197 + 199: 115 CopyObject 198 + 200: 123(fvec2) Load 188(inTexcoord) + 201: 39(fvec4) ImageSampleImplicitLod 199 200 + 202: 36(float) CompositeExtract 201 0 + 203: 36(float) Load 38(b) + 204: 36(float) FAdd 203 202 + Store 38(b) 204 + 209: 7(ptr) AccessChain 207(v) 208 + 210: 6(int) Load 209 + 211: 100(ptr) AccessChain 96(uniformBuffer) 210 59 + 212: 36(float) Load 211 + 213: 36(float) Load 38(b) + 214: 36(float) FAdd 213 212 + Store 38(b) 214 + 216: 7(ptr) AccessChain 207(v) 215 + 217: 6(int) Load 216 + 218: 100(ptr) AccessChain 96(uniformBuffer) 217 59 + 219: 36(float) Load 218 + 220: 36(float) Load 38(b) + 221: 36(float) FAdd 220 219 + Store 38(b) 221 + 223: 6(int) Load 98(nu_ii) + 224: 7(ptr) AccessChain 222(uv) 223 + 225: 6(int) Load 224 + 226: 100(ptr) AccessChain 96(uniformBuffer) 225 59 + 227: 36(float) Load 226 + 228: 36(float) Load 38(b) + 229: 36(float) FAdd 228 227 + Store 38(b) 229 + 233: 37(ptr) AccessChain 232(m) 26 215 + 234: 36(float) Load 233 + 235: 6(int) ConvertFToS 234 + 236: 100(ptr) AccessChain 96(uniformBuffer) 235 59 + 237: 36(float) Load 236 + 238: 36(float) Load 38(b) + 239: 36(float) FAdd 238 237 + Store 38(b) 239 + 243: 7(ptr) AccessChain 242(s) 59 + 244: 6(int) Load 243 + 245: 100(ptr) AccessChain 96(uniformBuffer) 244 59 + 246: 36(float) Load 245 + 247: 36(float) Load 38(b) + 248: 36(float) FAdd 247 246 + Store 38(b) 248 + 253: 7(ptr) AccessChain 252(arr) 26 + 254: 6(int) Load 253 + 255: 100(ptr) AccessChain 96(uniformBuffer) 254 59 + 256: 36(float) Load 255 + 257: 36(float) Load 38(b) + 258: 36(float) FAdd 257 256 + Store 38(b) 258 + 260: 6(int) Load 98(nu_ii) + 261: 37(ptr) AccessChain 259(um) 260 215 + 262: 36(float) Load 261 + 263: 6(int) ConvertFToS 262 + 264: 100(ptr) AccessChain 96(uniformBuffer) 263 59 + 265: 36(float) Load 264 + 266: 36(float) Load 38(b) + 267: 36(float) FAdd 266 265 + Store 38(b) 267 + 271: 6(int) Load 98(nu_ii) + 272: 7(ptr) AccessChain 270(us) 59 271 + 273: 6(int) Load 272 + 274: 100(ptr) AccessChain 96(uniformBuffer) 273 59 + 275: 36(float) Load 274 + 276: 36(float) Load 38(b) + 277: 36(float) FAdd 276 275 + Store 38(b) 277 + 279: 6(int) Load 98(nu_ii) + 280: 7(ptr) AccessChain 278(uarr) 279 + 281: 6(int) Load 280 + 282: 100(ptr) AccessChain 96(uniformBuffer) 281 59 + 283: 36(float) Load 282 + 284: 36(float) Load 38(b) + 285: 36(float) FAdd 284 283 + Store 38(b) 285 + 286: 6(int) Load 98(nu_ii) + 287: 36(float) Load 38(b) + 288: 100(ptr) AccessChain 108(storageBuffer) 286 59 + Store 288 287 Return FunctionEnd 11(foo(i1;i1;): 6(int) Function None 8 diff --git a/Test/baseResults/spv.nonuniform4.frag.out b/Test/baseResults/spv.nonuniform4.frag.out index 92cbd363ce..6bfc957532 100644 --- a/Test/baseResults/spv.nonuniform4.frag.out +++ b/Test/baseResults/spv.nonuniform4.frag.out @@ -23,6 +23,7 @@ spv.nonuniform4.frag Decorate 13(rIndex) Flat Decorate 13(rIndex) Location 3 Decorate 15 DecorationNonUniformEXT + Decorate 17 DecorationNonUniformEXT Decorate 21 DecorationNonUniformEXT 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/spv.nonuniform.frag b/Test/spv.nonuniform.frag index c136d256f8..cf7ebedc1b 100644 --- a/Test/spv.nonuniform.frag +++ b/Test/spv.nonuniform.frag @@ -28,10 +28,12 @@ nonuniformEXT int foo(nonuniformEXT int nupi, nonuniformEXT out int f) void main() { nonuniformEXT int nu_li; + nonuniformEXT int nu_li2; int dyn_i; int a = foo(nu_li, nu_li); nu_li = nonuniformEXT(a) + nonuniformEXT(a * 2); + nu_li2 = a + nonuniformEXT(a * 2); float b; b = nu_inv4.x * nu_gf; @@ -46,16 +48,25 @@ void main() b += texelFetch(uniformTexelBuffer[nu_ii], 1).x; b += imageLoad(storageTexelBuffer[nu_ii], 1).x; b += texture(sampler2D(uniformTexArr[nu_ii], uniformSampler), inTexcoord.xy).x; + b += texture(nonuniformEXT(sampler2D(uniformTexArr[nu_ii], uniformSampler)), inTexcoord.xy).x; nonuniformEXT ivec4 v; nonuniformEXT mat4 m; nonuniformEXT struct S { int a; } s; + nonuniformEXT int arr[10]; ivec4 uv; + mat4 um; + struct US { int a[10]; } us; + int uarr[10]; b += uniformBuffer[v.y].a; b += uniformBuffer[v[2]].a; b += uniformBuffer[uv[nu_ii]].a; b += uniformBuffer[int(m[2].z)].a; b += uniformBuffer[s.a].a; + b += uniformBuffer[arr[2]].a; + b += uniformBuffer[int(um[nu_ii].z)].a; + b += uniformBuffer[us.a[nu_ii]].a; + b += uniformBuffer[uarr[nu_ii]].a; storageBuffer[nu_ii].b = b; } From fb53f83503659b4977742fac832dc2defd3bacb4 Mon Sep 17 00:00:00 2001 From: David Neto Date: Thu, 12 Nov 2020 15:00:16 -0500 Subject: [PATCH 069/365] Avoid spuriously adding Geometry capability for vert, tesc, tese (#2462) Use of gl_Layer and gl_ViewportIndex in tessellation and vertex shaders should not trigger the addition of the Geometry capability. Fixes #2461 Added tests for use of gl_Layer and gl_ViewportIndex in a tessellation evaluation shader. Several tests for NVIDIA features for tessellation, vertex, or mesh shaders now lose the Geometry or MultiViewport capabilities. This is ok because the functionality is already covered by the ShaderViewportIndexLayerNV capability. The spv.meshShaderPerViewBuiltins.mesh test now fails validation because the validator does not know that PrimitiveId (and possibly other) builtins are enabled by the MeshShadingNV capability. I filed https://github.com/KhronosGroup/SPIRV-Headers/issues/179 to fix the grammar upstream. --- SPIRV/GlslangToSpv.cpp | 10 +++++-- Test/baseResults/spv.layer.tese.out | 30 +++++++++++++++++++ .../spv.meshShaderBuiltins.mesh.out | 1 - .../spv.meshShaderPerViewBuiltins.mesh.out | 2 +- .../spv.meshShaderRedeclBuiltins.mesh.out | 1 - .../spv.stereoViewRendering.tesc.out | 1 - .../spv.stereoViewRendering.vert.out | 1 - Test/baseResults/spv.viewportArray2.tesc.out | 2 -- Test/baseResults/spv.viewportArray2.vert.out | 2 -- Test/baseResults/spv.viewportindex.tese.out | 30 +++++++++++++++++++ Test/spv.layer.tese | 8 +++++ Test/spv.viewportindex.tese | 8 +++++ gtests/Spv.FromFile.cpp | 2 ++ 13 files changed, 87 insertions(+), 11 deletions(-) create mode 100644 Test/baseResults/spv.layer.tese.out create mode 100644 Test/baseResults/spv.viewportindex.tese.out create mode 100644 Test/spv.layer.tese create mode 100644 Test/spv.viewportindex.tese diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index a24b522394..e0b5a19fed 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -725,7 +725,10 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI return spv::BuiltInCullDistance; case glslang::EbvViewportIndex: - builder.addCapability(spv::CapabilityMultiViewport); + if (glslangIntermediate->getStage() == EShLangGeometry || + glslangIntermediate->getStage() == EShLangFragment) { + builder.addCapability(spv::CapabilityMultiViewport); + } if (glslangIntermediate->getStage() == EShLangVertex || glslangIntermediate->getStage() == EShLangTessControl || glslangIntermediate->getStage() == EShLangTessEvaluation) { @@ -754,7 +757,10 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI if (glslangIntermediate->getStage() == EShLangMeshNV) { return spv::BuiltInLayer; } - builder.addCapability(spv::CapabilityGeometry); + if (glslangIntermediate->getStage() == EShLangGeometry || + glslangIntermediate->getStage() == EShLangFragment) { + builder.addCapability(spv::CapabilityGeometry); + } if (glslangIntermediate->getStage() == EShLangVertex || glslangIntermediate->getStage() == EShLangTessControl || glslangIntermediate->getStage() == EShLangTessEvaluation) { diff --git a/Test/baseResults/spv.layer.tese.out b/Test/baseResults/spv.layer.tese.out new file mode 100644 index 0000000000..906340fe8c --- /dev/null +++ b/Test/baseResults/spv.layer.tese.out @@ -0,0 +1,30 @@ +spv.layer.tese +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 10 + + Capability Tessellation + Capability ShaderViewportIndexLayerNV + Extension "SPV_EXT_shader_viewport_index_layer" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationEvaluation 4 "main" 8 + ExecutionMode 4 Triangles + ExecutionMode 4 SpacingEqual + ExecutionMode 4 VertexOrderCcw + Source GLSL 450 + SourceExtension "GL_ARB_shader_viewport_layer_array" + Name 4 "main" + Name 8 "gl_Layer" + Decorate 8(gl_Layer) BuiltIn Layer + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Output 6(int) + 8(gl_Layer): 7(ptr) Variable Output + 9: 6(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + Store 8(gl_Layer) 9 + Return + FunctionEnd diff --git a/Test/baseResults/spv.meshShaderBuiltins.mesh.out b/Test/baseResults/spv.meshShaderBuiltins.mesh.out index f0c252a968..b26122ef79 100644 --- a/Test/baseResults/spv.meshShaderBuiltins.mesh.out +++ b/Test/baseResults/spv.meshShaderBuiltins.mesh.out @@ -5,7 +5,6 @@ spv.meshShaderBuiltins.mesh Capability ClipDistance Capability CullDistance - Capability MultiViewport Capability DrawParameters Capability ShaderViewportMaskNV Capability MeshShadingNV diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out index 907ae287af..38a426cd94 100644 --- a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out +++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out @@ -1,9 +1,9 @@ spv.meshShaderPerViewBuiltins.mesh +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 126 - Capability MultiViewport Capability PerViewAttributesNV Capability MeshShadingNV Extension "SPV_NVX_multiview_per_view_attributes" diff --git a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out index 66c3a0d05b..bfd2d85b9c 100644 --- a/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out +++ b/Test/baseResults/spv.meshShaderRedeclBuiltins.mesh.out @@ -5,7 +5,6 @@ spv.meshShaderRedeclBuiltins.mesh Capability ClipDistance Capability CullDistance - Capability MultiViewport Capability ShaderViewportMaskNV Capability MeshShadingNV Extension "SPV_NV_mesh_shader" diff --git a/Test/baseResults/spv.stereoViewRendering.tesc.out b/Test/baseResults/spv.stereoViewRendering.tesc.out index a357346dc8..f01e53bf8a 100644 --- a/Test/baseResults/spv.stereoViewRendering.tesc.out +++ b/Test/baseResults/spv.stereoViewRendering.tesc.out @@ -3,7 +3,6 @@ spv.stereoViewRendering.tesc // Generated by (magic number): 8000a // Id's are bound by 42 - Capability Geometry Capability Tessellation Capability ShaderViewportIndexLayerNV Capability ShaderViewportMaskNV diff --git a/Test/baseResults/spv.stereoViewRendering.vert.out b/Test/baseResults/spv.stereoViewRendering.vert.out index 0667cb8cad..e74921af9e 100644 --- a/Test/baseResults/spv.stereoViewRendering.vert.out +++ b/Test/baseResults/spv.stereoViewRendering.vert.out @@ -4,7 +4,6 @@ spv.stereoViewRendering.vert // Id's are bound by 27 Capability Shader - Capability Geometry Capability ShaderViewportIndexLayerNV Capability ShaderViewportMaskNV Capability ShaderStereoViewNV diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out index 6a9dccccf7..74235a5717 100644 --- a/Test/baseResults/spv.viewportArray2.tesc.out +++ b/Test/baseResults/spv.viewportArray2.tesc.out @@ -4,9 +4,7 @@ Validation failed // Generated by (magic number): 8000a // Id's are bound by 25 - Capability Geometry Capability Tessellation - Capability MultiViewport Capability ShaderViewportIndexLayerNV Capability ShaderViewportMaskNV Extension "SPV_EXT_shader_viewport_index_layer" diff --git a/Test/baseResults/spv.viewportArray2.vert.out b/Test/baseResults/spv.viewportArray2.vert.out index 96e5b07823..cf29cd79df 100644 --- a/Test/baseResults/spv.viewportArray2.vert.out +++ b/Test/baseResults/spv.viewportArray2.vert.out @@ -4,8 +4,6 @@ spv.viewportArray2.vert // Id's are bound by 19 Capability Shader - Capability Geometry - Capability MultiViewport Capability ShaderViewportIndexLayerNV Capability ShaderViewportMaskNV Extension "SPV_EXT_shader_viewport_index_layer" diff --git a/Test/baseResults/spv.viewportindex.tese.out b/Test/baseResults/spv.viewportindex.tese.out new file mode 100644 index 0000000000..12a30cf4c3 --- /dev/null +++ b/Test/baseResults/spv.viewportindex.tese.out @@ -0,0 +1,30 @@ +spv.viewportindex.tese +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 10 + + Capability Tessellation + Capability ShaderViewportIndexLayerNV + Extension "SPV_EXT_shader_viewport_index_layer" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint TessellationEvaluation 4 "main" 8 + ExecutionMode 4 Triangles + ExecutionMode 4 SpacingEqual + ExecutionMode 4 VertexOrderCcw + Source GLSL 450 + SourceExtension "GL_ARB_shader_viewport_layer_array" + Name 4 "main" + Name 8 "gl_ViewportIndex" + Decorate 8(gl_ViewportIndex) BuiltIn ViewportIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Output 6(int) +8(gl_ViewportIndex): 7(ptr) Variable Output + 9: 6(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + Store 8(gl_ViewportIndex) 9 + Return + FunctionEnd diff --git a/Test/spv.layer.tese b/Test/spv.layer.tese new file mode 100644 index 0000000000..b0ce079dac --- /dev/null +++ b/Test/spv.layer.tese @@ -0,0 +1,8 @@ +#version 450 + +#extension GL_ARB_shader_viewport_layer_array : require + +layout(triangles) in; +void main() { + gl_Layer = 1; +} diff --git a/Test/spv.viewportindex.tese b/Test/spv.viewportindex.tese new file mode 100644 index 0000000000..0da4cc862a --- /dev/null +++ b/Test/spv.viewportindex.tese @@ -0,0 +1,8 @@ +#version 450 + +#extension GL_ARB_shader_viewport_layer_array : require + +layout(triangles) in; +void main() { + gl_ViewportIndex = 1; +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 9cb3dbab6e..0f6e9f81b0 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -352,6 +352,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.int64.frag", "spv.intcoopmat.comp", "spv.intOps.vert", + "spv.layer.tese", "spv.layoutNested.vert", "spv.length.frag", "spv.localAggregates.frag", @@ -439,6 +440,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.terminate.frag", "spv.precise.tese", "spv.precise.tesc", + "spv.viewportindex.tese", "spv.volatileAtomic.comp", "spv.vulkan100.subgroupArithmetic.comp", "spv.vulkan100.subgroupPartitioned.comp", From beec2e4a7c4d846eeb4097faebd74d020602faa3 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Thu, 12 Nov 2020 15:55:50 -0500 Subject: [PATCH 070/365] tweak local_size comparison a bit (#2456) no longer causes an incorrect error if the current unit has local_size set, but the incoming unit does not --- glslang/MachineIndependent/linkValidate.cpp | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 1796fedaa0..63fb20a226 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -196,12 +196,14 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_TRUE(pointMode); for (int i = 0; i < 3; ++i) { - if (!localSizeNotDefault[i] && unit.localSizeNotDefault[i]) { - localSize[i] = unit.localSize[i]; - localSizeNotDefault[i] = true; + if (unit.localSizeNotDefault[i]) { + if (!localSizeNotDefault[i]) { + localSize[i] = unit.localSize[i]; + localSizeNotDefault[i] = true; + } + else if (localSize[i] != unit.localSize[i]) + error(infoSink, "Contradictory local size"); } - else if (localSize[i] != unit.localSize[i]) - error(infoSink, "Contradictory local size"); if (localSizeSpecId[i] == TQualifier::layoutNotSet) localSizeSpecId[i] = unit.localSizeSpecId[i]; From 7f6559d2802d0653541060f0909e33d137b9c8ba Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Mon, 16 Nov 2020 12:22:34 -0500 Subject: [PATCH 071/365] Compile out code for GL_EXT_shader_image_int64 for ANGLE (#2463) Fixes a crash in ANGLE. Closes: #2452 --- glslang/MachineIndependent/Initialize.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index c765199bd2..d073f606d5 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5436,6 +5436,12 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + if (version >= 300 /* both ES and non-ES */) { + stageBuiltins[EShLangFragment].append( + "flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2 + "\n"); + } + #ifndef GLSLANG_ANGLE // GL_ARB_shader_ballot if (profile != EEsProfile && version >= 450) { @@ -5707,14 +5713,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV commonBuiltins.append("const int gl_StorageSemanticsOutput = 0x1000;\n"); } -#endif // !GLSLANG_ANGLE - - if (version >= 300 /* both ES and non-ES */) { - stageBuiltins[EShLangFragment].append( - "flat in highp uint gl_ViewID_OVR;" // GL_OVR_multiview, GL_OVR_multiview2 - "\n"); - } - // Adding these to common built-ins triggers an assert due to a memory corruption in related code when testing // So instead add to each stage individually, avoiding the GLSLang bug if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) { @@ -5764,6 +5762,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } } } +#endif // !GLSLANG_ANGLE #endif // !GLSLANG_WEB From ffccefddfd9a02ec0c0b6dd04ef5e1042279c97f Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Mon, 23 Nov 2020 15:41:27 -0500 Subject: [PATCH 072/365] Updates for final Vulkan ray tracing extensions (#2466) * Fix traceRay/executeCallable to have id instead of constant. Update to final (non-provisional) SPIR-V capabilities (includes review feedback) - Change visibilty of findLinkerObjects. See merge request GLSL/glslang!78 * Add support for OpConvertUToAccelerationStructureKHR. GLSL : https://gitlab.khronos.org/GLSL/GLSL/-/merge_requests/60 SPV : https://gitlab.khronos.org/spirv/spirv-extensions/-/merge_requests/182 See merge request GLSL/glslang!77 * Add volatile qualifier to certain builtins for ray tracing. See merge request GLSL/glslang!81 * make gl_RayTmaxEXT volatile in intersection shader Vulkan Issue #2268 * Add testing for layouts on SBT vulkan/vulkan#2230 - no layout specified should be same as std430 - explicitly test std140, std430, scalar layouts See merge request GLSL/glslang!86 * Support for new opcodes OpIgnoreIntersectionKHR and OpTerminateRayKHR vulkan/vulkan#2374 Add support for ignoreIntersectionEXT and terminateRayEXT as block terminator statements. See merge request GLSL/glslang!87 * Fix code-generation issues with global ray query variables See merge request GLSL/glslang!88 * update dependencies for spirv-headers and tools And update mesh shader results * Fix indeterminate argument ordering Authored-by: David Neto Co-authored-by: Ashwin Lele (NVIDIA Corporation) Co-authored-by: Neslisah --- SPIRV/GlslangToSpv.cpp | 116 +- SPIRV/SpvBuilder.cpp | 21 +- SPIRV/SpvBuilder.h | 6 +- SPIRV/doc.cpp | 56 +- SPIRV/spirv.hpp | 27 +- Test/baseResults/glsl.460.subgroup.rcall.out | 36 +- Test/baseResults/glsl.460.subgroup.rchit.out | 36 +- Test/baseResults/glsl.460.subgroup.rgen.out | 36 +- Test/baseResults/glsl.460.subgroup.rint.out | 36 +- Test/baseResults/glsl.460.subgroup.rmiss.out | 36 +- Test/baseResults/rayQuery-allOps.comp.out | 8 +- Test/baseResults/rayQuery-allOps.frag.out | 6 +- Test/baseResults/rayQuery-allOps.rgen.out | 6 +- Test/baseResults/rayQuery-global.rgen.out | 76 + Test/baseResults/rayQuery-initialize.rgen.out | 6 +- Test/baseResults/rayQuery-no-cse.rgen.out | 8 +- Test/baseResults/rayQuery.rgen.out | 6 +- Test/baseResults/spv.AnyHitShader.rahit.out | 4 +- .../spv.ClosestHitShader.rchit.out | 2 +- Test/baseResults/spv.MissShader.rmiss.out | 2 +- Test/baseResults/spv.RayCallable.rcall.out | 2 +- Test/baseResults/spv.RayConstants.rgen.out | 2 +- Test/baseResults/spv.RayGenShader.rgen.out | 2 +- Test/baseResults/spv.RayGenShader11.rgen.out | 2 +- .../spv.RayGenShaderArray.rgen.out | 6 +- .../spv.ext.AnyHitShader.rahit.out | 30 +- .../spv.ext.ClosestHitShader.rchit.out | 20 +- .../spv.ext.ClosestHitShader_Errors.rchit.out | 14 +- ...pv.ext.ClosestHitShader_Subgroup.rchit.out | 114 + .../spv.ext.IntersectShader.rint.out | 4 +- Test/baseResults/spv.ext.MissShader.rmiss.out | 64 +- .../spv.ext.MissShader_Errors.rmiss.out | 4 +- .../baseResults/spv.ext.RayCallable.rcall.out | 4 +- .../spv.ext.RayCallable_Errors.rcall.out | 46 +- .../baseResults/spv.ext.RayConstants.rgen.out | 6 +- .../spv.ext.RayGenSBTlayout.rgen.out | 134 + .../spv.ext.RayGenSBTlayout140.rgen.out | 134 + .../spv.ext.RayGenSBTlayout430.rgen.out | 134 + .../spv.ext.RayGenSBTlayoutscalar.rgen.out | 135 + .../baseResults/spv.ext.RayGenShader.rgen.out | 38 +- .../spv.ext.RayGenShader11.rgen.out | 6 +- .../spv.ext.RayGenShaderArray.rgen.out | 196 +- .../spv.ext.RayGenShader_Errors.rgen.out | 15 +- Test/baseResults/spv.ext.World3x4.rahit.out | 2 +- .../spv.meshShaderPerViewBuiltins.mesh.out | 1 - Test/rayQuery-global.rgen | 31 + Test/spv.ext.AnyHitShader.rahit | 11 +- Test/spv.ext.ClosestHitShader_Errors.rchit | 8 +- Test/spv.ext.ClosestHitShader_Subgroup.rchit | 16 + Test/spv.ext.MissShader.rmiss | 5 + Test/spv.ext.MissShader_Errors.rmiss | 4 +- Test/spv.ext.RayCallable_Errors.rcall | 8 +- Test/spv.ext.RayConstants.rgen | 2 +- Test/spv.ext.RayGenSBTlayout.rgen | 28 + Test/spv.ext.RayGenSBTlayout140.rgen | 27 + Test/spv.ext.RayGenSBTlayout430.rgen | 27 + Test/spv.ext.RayGenSBTlayoutscalar.rgen | 28 + Test/spv.ext.RayGenShader.rgen | 2 +- Test/spv.ext.RayGenShader11.rgen | 2 +- Test/spv.ext.RayGenShaderArray.rgen | 7 +- Test/spv.ext.RayGenShader_Errors.rgen | 8 +- glslang/Include/Types.h | 6 + glslang/Include/intermediate.h | 19 +- glslang/MachineIndependent/Initialize.cpp | 66 +- glslang/MachineIndependent/Intermediate.cpp | 4 + glslang/MachineIndependent/ParseHelper.cpp | 39 +- glslang/MachineIndependent/Scan.cpp | 8 + glslang/MachineIndependent/glslang.m4 | 11 + glslang/MachineIndependent/glslang.y | 11 + glslang/MachineIndependent/glslang_tab.cpp | 6552 +++++++++-------- glslang/MachineIndependent/glslang_tab.cpp.h | 108 +- glslang/MachineIndependent/intermOut.cpp | 36 +- glslang/MachineIndependent/linkValidate.cpp | 34 +- .../MachineIndependent/localintermediate.h | 8 +- gtests/Spv.FromFile.cpp | 7 + known_good.json | 4 +- 76 files changed, 5030 insertions(+), 3742 deletions(-) create mode 100644 Test/baseResults/rayQuery-global.rgen.out create mode 100644 Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out create mode 100644 Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out create mode 100644 Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out create mode 100644 Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out create mode 100644 Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out create mode 100644 Test/rayQuery-global.rgen create mode 100644 Test/spv.ext.ClosestHitShader_Subgroup.rchit create mode 100644 Test/spv.ext.RayGenSBTlayout.rgen create mode 100644 Test/spv.ext.RayGenSBTlayout140.rgen create mode 100644 Test/spv.ext.RayGenSBTlayout430.rgen create mode 100644 Test/spv.ext.RayGenSBTlayoutscalar.rgen diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index e0b5a19fed..18ef64f415 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -190,6 +190,7 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { bool originalParam(glslang::TStorageQualifier, const glslang::TType&, bool implicitThisParam); void makeFunctions(const glslang::TIntermSequence&); void makeGlobalInitializers(const glslang::TIntermSequence&); + void collectRayTracingLinkerObjects(); void visitFunctions(const glslang::TIntermSequence&); void handleFunctionEntry(const glslang::TIntermAggregate* node); void translateArguments(const glslang::TIntermAggregate& node, std::vector& arguments, @@ -273,6 +274,9 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { // requiring local translation to and from SPIR-V type on every access. // Maps AST-required-type-id> std::unordered_map forceType; + + // Used later for generating OpTraceKHR/OpExecuteCallableKHR + std::unordered_map locationToSymbol[2]; }; // @@ -1232,7 +1236,7 @@ spv::LoopControlMask TGlslangToSpvTraverser::TranslateLoopControl(const glslang: spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::TType& type) { if (type.getBasicType() == glslang::EbtRayQuery) - return spv::StorageClassFunction; + return spv::StorageClassPrivate; if (type.getQualifier().isPipeInput()) return spv::StorageClassInput; if (type.getQualifier().isPipeOutput()) @@ -1501,7 +1505,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, } if (glslangIntermediate->getLayoutPrimitiveCulling()) { - builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingProvisionalKHR); + builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingKHR); } unsigned int mode; @@ -1668,7 +1672,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, { auto& extensions = glslangIntermediate->getRequestedExtensions(); if (extensions.find("GL_NV_ray_tracing") == extensions.end()) { - builder.addCapability(spv::CapabilityRayTracingProvisionalKHR); + builder.addCapability(spv::CapabilityRayTracingKHR); builder.addExtension("SPV_KHR_ray_tracing"); } else { @@ -2118,8 +2122,9 @@ std::pair TGlslangToSpvTraverser::getForcedType(glslang::TBuil // 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)); + spv::Id ivec4_type = builder.makeVectorType(builder.makeUintType(32), 4); + spv::Id uint64_type = builder.makeUintType(64); + std::pair ret(ivec4_type, uint64_type); return ret; } // There are no SPIR-V builtins defined for these and map onto original non-transposed @@ -2490,6 +2495,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt // anything else gets there, so visit out of order, doing them all now. makeGlobalInitializers(node->getAsAggregate()->getSequence()); + //Pre process linker objects for ray tracing stages + if (glslangIntermediate->isRayTracingStage()) + collectRayTracingLinkerObjects(); + // Initializers are done, don't want to visit again, but functions and link objects need to be processed, // so do them manually. visitFunctions(node->getAsAggregate()->getSequence()); @@ -2799,10 +2808,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt binOp = node->getOp(); break; - case glslang::EOpIgnoreIntersection: - case glslang::EOpTerminateRay: - case glslang::EOpTrace: - case glslang::EOpExecuteCallable: + case glslang::EOpIgnoreIntersectionNV: + case glslang::EOpTerminateRayNV: + case glslang::EOpTraceNV: + case glslang::EOpTraceKHR: + case glslang::EOpExecuteCallableNV: + case glslang::EOpExecuteCallableKHR: case glslang::EOpWritePackedPrimitiveIndices4x8NV: noReturnValue = true; break; @@ -2811,7 +2822,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpRayQueryGenerateIntersection: case glslang::EOpRayQueryConfirmIntersection: builder.addExtension("SPV_KHR_ray_query"); - builder.addCapability(spv::CapabilityRayQueryProvisionalKHR); + builder.addCapability(spv::CapabilityRayQueryKHR); noReturnValue = true; break; case glslang::EOpRayQueryProceed: @@ -2834,7 +2845,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpRayQueryGetIntersectionObjectToWorld: case glslang::EOpRayQueryGetIntersectionWorldToObject: builder.addExtension("SPV_KHR_ray_query"); - builder.addCapability(spv::CapabilityRayQueryProvisionalKHR); + builder.addCapability(spv::CapabilityRayQueryKHR); break; case glslang::EOpCooperativeMatrixLoad: case glslang::EOpCooperativeMatrixStore: @@ -3087,11 +3098,18 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt )) { bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst(); operands.push_back(builder.makeIntConstant(cond ? 1 : 0)); - } - else { + } else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) || + (arg == 1 && glslangOp == glslang::EOpExecuteCallableKHR)) { + const int opdNum = glslangOp == glslang::EOpTraceKHR ? 10 : 1; + const int set = glslangOp == glslang::EOpTraceKHR ? 0 : 1; + const int location = glslangOperands[opdNum]->getAsConstantUnion()->getConstArray()[0].getUConst(); + auto itNode = locationToSymbol[set].find(location); + visitSymbol(itNode->second); + spv::Id symId = getSymbolId(itNode->second); + operands.push_back(symId); + } else { operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType())); - } - + } } } @@ -3494,11 +3512,11 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T switch (node->getFlowOp()) { case glslang::EOpKill: - builder.makeDiscard(); + builder.makeStatementTerminator(spv::OpKill, "post-discard"); break; case glslang::EOpTerminateInvocation: builder.addExtension(spv::E_SPV_KHR_terminate_invocation); - builder.makeTerminateInvocation(); + builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation"); break; case glslang::EOpBreak: if (breakForLoop.top()) @@ -3535,6 +3553,12 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T builder.addExtension(spv::E_SPV_EXT_demote_to_helper_invocation); builder.addCapability(spv::CapabilityDemoteToHelperInvocationEXT); break; + case glslang::EOpTerminateRayKHR: + builder.makeStatementTerminator(spv::OpTerminateRayKHR, "post-terminateRayKHR"); + break; + case glslang::EOpIgnoreIntersectionKHR: + builder.makeStatementTerminator(spv::OpIgnoreIntersectionKHR, "post-ignoreIntersectionKHR"); + break; #endif default: @@ -4629,7 +4653,39 @@ void TGlslangToSpvTraverser::makeGlobalInitializers(const glslang::TIntermSequen } } } +// Walk over all linker objects to create a map for payload and callable data linker objects +// and their location to be used during codegen for OpTraceKHR and OpExecuteCallableKHR +// This is done here since it is possible that these linker objects are not be referenced in the AST +void TGlslangToSpvTraverser::collectRayTracingLinkerObjects() +{ + glslang::TIntermAggregate* linkerObjects = glslangIntermediate->findLinkerObjects(); + for (auto& objSeq : linkerObjects->getSequence()) { + auto objNode = objSeq->getAsSymbolNode(); + if (objNode != nullptr) { + if (objNode->getQualifier().hasLocation()) { + unsigned int location = objNode->getQualifier().layoutLocation; + auto st = objNode->getQualifier().storage; + int set; + switch (st) + { + case glslang::EvqPayload: + case glslang::EvqPayloadIn: + set = 0; + break; + case glslang::EvqCallableData: + case glslang::EvqCallableDataIn: + set = 1; + break; + default: + set = -1; + } + if (set != -1) + locationToSymbol[set].insert(std::make_pair(location, objNode)); + } + } + } +} // Process all the functions, while skipping initializers. void TGlslangToSpvTraverser::visitFunctions(const glslang::TIntermSequence& glslFunctions) { @@ -6254,6 +6310,11 @@ spv::Id TGlslangToSpvTraverser::createUnaryOperation(glslang::TOperator op, OpDe case glslang::EOpConstructReference: unaryOp = spv::OpBitcast; break; + + case glslang::EOpConvUint64ToAccStruct: + case glslang::EOpConvUvec2ToAccStruct: + unaryOp = spv::OpConvertUToAccelerationStructureKHR; + break; #endif case glslang::EOpCopyObject: @@ -7840,10 +7901,16 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: typeId = builder.makeBoolType(); opCode = spv::OpReportIntersectionKHR; break; - case glslang::EOpTrace: + case glslang::EOpTraceNV: + builder.createNoResultOp(spv::OpTraceNV, operands); + return 0; + case glslang::EOpTraceKHR: builder.createNoResultOp(spv::OpTraceRayKHR, operands); return 0; - case glslang::EOpExecuteCallable: + case glslang::EOpExecuteCallableNV: + builder.createNoResultOp(spv::OpExecuteCallableNV, operands); + return 0; + case glslang::EOpExecuteCallableKHR: builder.createNoResultOp(spv::OpExecuteCallableKHR, operands); return 0; @@ -8131,11 +8198,11 @@ spv::Id TGlslangToSpvTraverser::createNoArgOperation(glslang::TOperator op, spv: spv::Id id = builder.createBuiltinCall(typeId, getExtBuiltins(spv::E_SPV_AMD_gcn_shader), spv::TimeAMD, args); return builder.setPrecision(id, precision); } - case glslang::EOpIgnoreIntersection: - builder.createNoResultOp(spv::OpIgnoreIntersectionKHR); + case glslang::EOpIgnoreIntersectionNV: + builder.createNoResultOp(spv::OpIgnoreIntersectionNV); return 0; - case glslang::EOpTerminateRay: - builder.createNoResultOp(spv::OpTerminateRayKHR); + case glslang::EOpTerminateRayNV: + builder.createNoResultOp(spv::OpTerminateRayNV); return 0; case glslang::EOpRayQueryInitialize: builder.createNoResultOp(spv::OpRayQueryInitializeKHR); @@ -8263,7 +8330,8 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol } #ifndef GLSLANG_WEB - if (symbol->getType().isImage()) { + // Subgroup builtins which have input storage class are volatile for ray tracing stages. + if (symbol->getType().isImage() || symbol->getQualifier().isPipeInput()) { std::vector memory; TranslateMemoryDecoration(symbol->getType().getQualifier(), memory, glslangIntermediate->usingVulkanMemoryModel()); diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 390b18add1..c8fbcc450e 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -621,13 +621,13 @@ Id Builder::makeAccelerationStructureType() Id Builder::makeRayQueryType() { Instruction *type; - if (groupedTypes[OpTypeRayQueryProvisionalKHR].size() == 0) { - type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryProvisionalKHR); - groupedTypes[OpTypeRayQueryProvisionalKHR].push_back(type); + if (groupedTypes[OpTypeRayQueryKHR].size() == 0) { + type = new Instruction(getUniqueId(), NoType, OpTypeRayQueryKHR); + groupedTypes[OpTypeRayQueryKHR].push_back(type); constantsTypesGlobals.push_back(std::unique_ptr(type)); module.mapInstruction(type); } else { - type = groupedTypes[OpTypeRayQueryProvisionalKHR].back(); + type = groupedTypes[OpTypeRayQueryKHR].back(); } return type->getResultId(); @@ -1447,17 +1447,10 @@ void Builder::leaveFunction() } // Comments in header -void Builder::makeDiscard() +void Builder::makeStatementTerminator(spv::Op opcode, const char *name) { - buildPoint->addInstruction(std::unique_ptr(new Instruction(OpKill))); - createAndSetNoPredecessorBlock("post-discard"); -} - -// Comments in header -void Builder::makeTerminateInvocation() -{ - buildPoint->addInstruction(std::unique_ptr(new Instruction(OpTerminateInvocation))); - createAndSetNoPredecessorBlock("post-terminate-invocation"); + buildPoint->addInstruction(std::unique_ptr(new Instruction(opcode))); + createAndSetNoPredecessorBlock(name); } // Comments in header diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 63dddcb830..911ea58b12 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -357,9 +357,9 @@ class Builder { // Generate all the code needed to finish up a function. void leaveFunction(); - // Create a discard or terminate-invocation. - void makeDiscard(); - void makeTerminateInvocation(); + // Create block terminator instruction for certain statements like + // discard, terminate-invocation, terminateRayEXT, or ignoreIntersectionEXT + void makeStatementTerminator(spv::Op opcode, const char *name); // Create a global or function local or IO variable. Id createVariable(Decoration precision, StorageClass, Id type, const char* name = nullptr, diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 3d08204f4b..e6ad4c1a5a 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -915,9 +915,9 @@ const char* CapabilityString(int info) case CapabilityPerViewAttributesNV: return "PerViewAttributesNV"; case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; case CapabilityRayTracingNV: return "RayTracingNV"; - case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; - case CapabilityRayQueryProvisionalKHR: return "RayQueryProvisionalKHR"; - case CapabilityRayTraversalPrimitiveCullingProvisionalKHR: return "RayTraversalPrimitiveCullingProvisionalKHR"; + case CapabilityRayTracingKHR: return "RayTracingKHR"; + case CapabilityRayQueryKHR: return "RayQueryKHR"; + case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV"; case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV"; case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV"; @@ -1364,17 +1364,23 @@ const char* OpcodeString(int op) case OpDecorateStringGOOGLE: return "OpDecorateStringGOOGLE"; case OpMemberDecorateStringGOOGLE: return "OpMemberDecorateStringGOOGLE"; + case OpReportIntersectionKHR: return "OpReportIntersectionKHR"; + case OpIgnoreIntersectionNV: return "OpIgnoreIntersectionNV"; + case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR"; + case OpTerminateRayNV: return "OpTerminateRayNV"; + case OpTerminateRayKHR: return "OpTerminateRayKHR"; + case OpTraceNV: return "OpTraceNV"; + case OpTraceRayKHR: return "OpTraceRayKHR"; + case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; + case OpExecuteCallableNV: return "OpExecuteCallableNV"; + case OpExecuteCallableKHR: return "OpExecuteCallableKHR"; + case OpConvertUToAccelerationStructureKHR: return "OpConvertUToAccelerationStructureKHR"; + case OpGroupNonUniformPartitionNV: return "OpGroupNonUniformPartitionNV"; - case OpReportIntersectionKHR: return "OpReportIntersectionKHR"; - case OpIgnoreIntersectionKHR: return "OpIgnoreIntersectionKHR"; - case OpTerminateRayKHR: return "OpTerminateRayKHR"; - case OpTraceRayKHR: return "OpTraceRayKHR"; - case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; - case OpExecuteCallableKHR: return "OpExecuteCallableKHR"; case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; - case OpTypeRayQueryProvisionalKHR: return "OpTypeRayQueryProvisionalKHR"; + case OpTypeRayQueryKHR: return "OpTypeRayQueryProvisionalKHR"; case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR"; case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR"; @@ -2771,7 +2777,20 @@ void Parameterize() InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); - InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'NV Acceleration Structure'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Flags'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Cull Mask'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Origin'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Ray Direction'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpTraceNV].setResultAndType(false, false); + + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'"); InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'"); InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'"); InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'SBT Record Offset'"); @@ -2787,17 +2806,28 @@ void Parameterize() InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Parameter'"); InstructionDesc[OpReportIntersectionKHR].operands.push(OperandId, "'Hit Kind'"); + InstructionDesc[OpIgnoreIntersectionNV].setResultAndType(false, false); + InstructionDesc[OpIgnoreIntersectionKHR].setResultAndType(false, false); + InstructionDesc[OpTerminateRayNV].setResultAndType(false, false); + InstructionDesc[OpTerminateRayKHR].setResultAndType(false, false); + InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "SBT Record Index"); + InstructionDesc[OpExecuteCallableNV].operands.push(OperandId, "CallableData ID"); + InstructionDesc[OpExecuteCallableNV].setResultAndType(false, false); + InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "SBT Record Index"); - InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData ID"); + InstructionDesc[OpExecuteCallableKHR].operands.push(OperandId, "CallableData"); InstructionDesc[OpExecuteCallableKHR].setResultAndType(false, false); + InstructionDesc[OpConvertUToAccelerationStructureKHR].operands.push(OperandId, "Value"); + InstructionDesc[OpConvertUToAccelerationStructureKHR].setResultAndType(true, true); + // Ray Query InstructionDesc[OpTypeAccelerationStructureKHR].setResultAndType(true, false); - InstructionDesc[OpTypeRayQueryProvisionalKHR].setResultAndType(true, false); + InstructionDesc[OpTypeRayQueryKHR].setResultAndType(true, false); InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'RayQuery'"); InstructionDesc[OpRayQueryInitializeKHR].operands.push(OperandId, "'AccelerationS'"); diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index ef5670e3b6..a5383de555 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -50,11 +50,11 @@ namespace spv { typedef unsigned int Id; #define SPV_VERSION 0x10500 -#define SPV_REVISION 3 +#define SPV_REVISION 4 static const unsigned int MagicNumber = 0x07230203; static const unsigned int Version = 0x00010500; -static const unsigned int Revision = 3; +static const unsigned int Revision = 4; static const unsigned int OpCodeMask = 0xffff; static const unsigned int WordCountShift = 16; @@ -899,7 +899,9 @@ enum Capability { CapabilityRoundingModeRTE = 4467, CapabilityRoundingModeRTZ = 4468, CapabilityRayQueryProvisionalKHR = 4471, - CapabilityRayTraversalPrimitiveCullingProvisionalKHR = 4478, + CapabilityRayQueryKHR = 4472, + CapabilityRayTraversalPrimitiveCullingKHR = 4478, + CapabilityRayTracingKHR = 4479, CapabilityFloat16ImageAMD = 5008, CapabilityImageGatherBiasLodAMD = 5009, CapabilityFragmentMaskAMD = 5010, @@ -1398,7 +1400,12 @@ enum Op { OpSubgroupAnyKHR = 4429, OpSubgroupAllEqualKHR = 4430, OpSubgroupReadInvocationKHR = 4432, - OpTypeRayQueryProvisionalKHR = 4472, + OpTraceRayKHR = 4445, + OpExecuteCallableKHR = 4446, + OpConvertUToAccelerationStructureKHR = 4447, + OpIgnoreIntersectionKHR = 4448, + OpTerminateRayKHR = 4449, + OpTypeRayQueryKHR = 4472, OpRayQueryInitializeKHR = 4473, OpRayQueryTerminateKHR = 4474, OpRayQueryGenerateIntersectionKHR = 4475, @@ -1421,15 +1428,11 @@ enum Op { OpWritePackedPrimitiveIndices4x8NV = 5299, OpReportIntersectionKHR = 5334, OpReportIntersectionNV = 5334, - OpIgnoreIntersectionKHR = 5335, OpIgnoreIntersectionNV = 5335, - OpTerminateRayKHR = 5336, OpTerminateRayNV = 5336, OpTraceNV = 5337, - OpTraceRayKHR = 5337, OpTypeAccelerationStructureKHR = 5341, OpTypeAccelerationStructureNV = 5341, - OpExecuteCallableKHR = 5344, OpExecuteCallableNV = 5344, OpTypeCooperativeMatrixNV = 5358, OpCooperativeMatrixLoadNV = 5359, @@ -1849,7 +1852,6 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpBranchConditional: *hasResult = false; *hasResultType = false; break; case OpSwitch: *hasResult = false; *hasResultType = false; break; case OpKill: *hasResult = false; *hasResultType = false; break; - case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; case OpReturn: *hasResult = false; *hasResultType = false; break; case OpReturnValue: *hasResult = false; *hasResultType = false; break; case OpUnreachable: *hasResult = false; *hasResultType = false; break; @@ -1970,7 +1972,12 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpTypeRayQueryProvisionalKHR: *hasResult = true; *hasResultType = false; break; + case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; + case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; + case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; + case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; + case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; + case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; diff --git a/Test/baseResults/glsl.460.subgroup.rcall.out b/Test/baseResults/glsl.460.subgroup.rcall.out index 6bffdc9c29..2b2d89b16d 100644 --- a/Test/baseResults/glsl.460.subgroup.rcall.out +++ b/Test/baseResults/glsl.460.subgroup.rcall.out @@ -109,8 +109,8 @@ ERROR: node is still EOpNull! 0:4 Function Parameters: 0:4 'f4' ( in 4-component vector of float) 0:? Sequence -0:7 'gl_SubgroupSize' ( in uint SubgroupSize) -0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:9 subgroupBarrier ( global void) 0:10 subgroupMemoryBarrier ( global void) 0:11 subgroupMemoryBarrierBuffer ( global void) @@ -128,11 +128,11 @@ ERROR: node is still EOpNull! 0:19 false (const bool) 0:20 subgroupAllEqual ( global bool) 0:20 'f4' ( in 4-component vector of float) -0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:27 subgroupBroadcast ( global 4-component vector of float) 0:27 'f4' ( in 4-component vector of float) 0:27 Constant: @@ -359,8 +359,8 @@ ERROR: node is still EOpNull! 0:119 Function Definition: basic_works( ( global void) 0:119 Function Parameters: 0:121 Sequence -0:121 'gl_SubgroupSize' ( in uint SubgroupSize) -0:122 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:121 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:122 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:123 subgroupBarrier ( global void) 0:124 subgroupMemoryBarrier ( global void) 0:125 subgroupMemoryBarrierBuffer ( global void) @@ -370,11 +370,11 @@ ERROR: node is still EOpNull! 0:131 Function Parameters: 0:131 'f4' ( in 4-component vector of float) 0:132 Sequence -0:132 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:133 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:134 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:135 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:136 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:132 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:133 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:134 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:135 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:136 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:137 subgroupBroadcast ( global 4-component vector of float) 0:137 'f4' ( in 4-component vector of float) 0:137 Constant: @@ -624,15 +624,15 @@ ERROR: node is still EOpNull! 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:249 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:250 'gl_SMIDNV' ( volatile 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:261 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:262 'gl_SMIDNV' ( volatile 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}) diff --git a/Test/baseResults/glsl.460.subgroup.rchit.out b/Test/baseResults/glsl.460.subgroup.rchit.out index 1ea9e69d88..f5083e0460 100644 --- a/Test/baseResults/glsl.460.subgroup.rchit.out +++ b/Test/baseResults/glsl.460.subgroup.rchit.out @@ -109,8 +109,8 @@ ERROR: node is still EOpNull! 0:4 Function Parameters: 0:4 'f4' ( in 4-component vector of float) 0:? Sequence -0:7 'gl_SubgroupSize' ( in uint SubgroupSize) -0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:9 subgroupBarrier ( global void) 0:10 subgroupMemoryBarrier ( global void) 0:11 subgroupMemoryBarrierBuffer ( global void) @@ -128,11 +128,11 @@ ERROR: node is still EOpNull! 0:19 false (const bool) 0:20 subgroupAllEqual ( global bool) 0:20 'f4' ( in 4-component vector of float) -0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:27 subgroupBroadcast ( global 4-component vector of float) 0:27 'f4' ( in 4-component vector of float) 0:27 Constant: @@ -425,8 +425,8 @@ ERROR: node is still EOpNull! 0:129 Function Definition: basic_works( ( global void) 0:129 Function Parameters: 0:131 Sequence -0:131 'gl_SubgroupSize' ( in uint SubgroupSize) -0:132 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:131 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:132 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:133 subgroupBarrier ( global void) 0:134 subgroupMemoryBarrier ( global void) 0:135 subgroupMemoryBarrierBuffer ( global void) @@ -436,11 +436,11 @@ ERROR: node is still EOpNull! 0:141 Function Parameters: 0:141 'f4' ( in 4-component vector of float) 0:142 Sequence -0:142 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:143 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:144 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:145 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:146 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:142 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:143 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:144 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:145 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:146 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:147 subgroupBroadcast ( global 4-component vector of float) 0:147 'f4' ( in 4-component vector of float) 0:147 Constant: @@ -690,15 +690,15 @@ ERROR: node is still EOpNull! 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:259 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:260 'gl_SMIDNV' ( volatile 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:271 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:272 'gl_SMIDNV' ( volatile 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) diff --git a/Test/baseResults/glsl.460.subgroup.rgen.out b/Test/baseResults/glsl.460.subgroup.rgen.out index dfe1e2bb14..56283bbd02 100644 --- a/Test/baseResults/glsl.460.subgroup.rgen.out +++ b/Test/baseResults/glsl.460.subgroup.rgen.out @@ -109,8 +109,8 @@ ERROR: node is still EOpNull! 0:4 Function Parameters: 0:4 'f4' ( in 4-component vector of float) 0:? Sequence -0:7 'gl_SubgroupSize' ( in uint SubgroupSize) -0:8 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:7 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:8 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:9 subgroupBarrier ( global void) 0:10 subgroupMemoryBarrier ( global void) 0:11 subgroupMemoryBarrierBuffer ( global void) @@ -128,11 +128,11 @@ ERROR: node is still EOpNull! 0:19 false (const bool) 0:20 subgroupAllEqual ( global bool) 0:20 'f4' ( in 4-component vector of float) -0:22 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:23 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:24 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:25 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:26 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:22 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:23 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:24 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:25 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:26 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:27 subgroupBroadcast ( global 4-component vector of float) 0:27 'f4' ( in 4-component vector of float) 0:27 Constant: @@ -389,8 +389,8 @@ ERROR: node is still EOpNull! 0:123 Function Definition: basic_works( ( global void) 0:123 Function Parameters: 0:125 Sequence -0:125 'gl_SubgroupSize' ( in uint SubgroupSize) -0:126 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:125 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:126 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:127 subgroupBarrier ( global void) 0:128 subgroupMemoryBarrier ( global void) 0:129 subgroupMemoryBarrierBuffer ( global void) @@ -400,11 +400,11 @@ ERROR: node is still EOpNull! 0:135 Function Parameters: 0:135 'f4' ( in 4-component vector of float) 0:136 Sequence -0:136 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:137 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:138 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:139 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:140 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:136 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:137 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:138 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:139 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:140 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:141 subgroupBroadcast ( global 4-component vector of float) 0:141 'f4' ( in 4-component vector of float) 0:141 Constant: @@ -654,15 +654,15 @@ ERROR: node is still EOpNull! 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:253 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:254 'gl_SMIDNV' ( volatile 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:265 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:266 'gl_SMIDNV' ( volatile in uint SMIDNV) 0:? Linker Objects 0:? 'accNV0' (layout( set=0 binding=0) uniform accelerationStructureNV) 0:? 'accNV1' (layout( set=0 binding=1) uniform accelerationStructureNV) diff --git a/Test/baseResults/glsl.460.subgroup.rint.out b/Test/baseResults/glsl.460.subgroup.rint.out index 9915ecf7cc..a7de7d358e 100644 --- a/Test/baseResults/glsl.460.subgroup.rint.out +++ b/Test/baseResults/glsl.460.subgroup.rint.out @@ -109,8 +109,8 @@ ERROR: node is still EOpNull! 0:5 Function Parameters: 0:5 'f4' ( in 4-component vector of float) 0:? Sequence -0:8 'gl_SubgroupSize' ( in uint SubgroupSize) -0:9 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:8 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:9 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:10 subgroupBarrier ( global void) 0:11 subgroupMemoryBarrier ( global void) 0:12 subgroupMemoryBarrierBuffer ( global void) @@ -128,11 +128,11 @@ ERROR: node is still EOpNull! 0:20 false (const bool) 0:21 subgroupAllEqual ( global bool) 0:21 'f4' ( in 4-component vector of float) -0:23 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:24 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:25 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:26 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:27 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:23 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:24 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:25 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:26 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:27 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:28 subgroupBroadcast ( global 4-component vector of float) 0:28 'f4' ( in 4-component vector of float) 0:28 Constant: @@ -403,8 +403,8 @@ ERROR: node is still EOpNull! 0:129 Function Definition: basic_works( ( global void) 0:129 Function Parameters: 0:131 Sequence -0:131 'gl_SubgroupSize' ( in uint SubgroupSize) -0:132 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:131 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:132 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:133 subgroupBarrier ( global void) 0:134 subgroupMemoryBarrier ( global void) 0:135 subgroupMemoryBarrierBuffer ( global void) @@ -414,11 +414,11 @@ ERROR: node is still EOpNull! 0:141 Function Parameters: 0:141 'f4' ( in 4-component vector of float) 0:142 Sequence -0:142 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:143 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:144 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:145 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:146 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:142 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:143 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:144 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:145 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:146 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:147 subgroupBroadcast ( global 4-component vector of float) 0:147 'f4' ( in 4-component vector of float) 0:147 Constant: @@ -668,15 +668,15 @@ ERROR: node is still EOpNull! 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:259 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:260 'gl_SMIDNV' ( volatile 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:271 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:272 'gl_SMIDNV' ( volatile in uint SMIDNV) 0:? Linker Objects 0:? 'iAttr' ( hitAttributeNV 4-component vector of float) diff --git a/Test/baseResults/glsl.460.subgroup.rmiss.out b/Test/baseResults/glsl.460.subgroup.rmiss.out index ddf7d1b33c..865d88c56b 100644 --- a/Test/baseResults/glsl.460.subgroup.rmiss.out +++ b/Test/baseResults/glsl.460.subgroup.rmiss.out @@ -109,8 +109,8 @@ ERROR: node is still EOpNull! 0:5 Function Parameters: 0:5 'f4' ( in 4-component vector of float) 0:? Sequence -0:8 'gl_SubgroupSize' ( in uint SubgroupSize) -0:9 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:8 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:9 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:10 subgroupBarrier ( global void) 0:11 subgroupMemoryBarrier ( global void) 0:12 subgroupMemoryBarrierBuffer ( global void) @@ -128,11 +128,11 @@ ERROR: node is still EOpNull! 0:20 false (const bool) 0:21 subgroupAllEqual ( global bool) 0:21 'f4' ( in 4-component vector of float) -0:23 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:24 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:25 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:26 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:27 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:23 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:24 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:25 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:26 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:27 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:28 subgroupBroadcast ( global 4-component vector of float) 0:28 'f4' ( in 4-component vector of float) 0:28 Constant: @@ -397,8 +397,8 @@ ERROR: node is still EOpNull! 0:123 Function Definition: basic_works( ( global void) 0:123 Function Parameters: 0:125 Sequence -0:125 'gl_SubgroupSize' ( in uint SubgroupSize) -0:126 'gl_SubgroupInvocationID' ( in uint SubgroupInvocationID) +0:125 'gl_SubgroupSize' ( volatile in uint SubgroupSize) +0:126 'gl_SubgroupInvocationID' ( volatile in uint SubgroupInvocationID) 0:127 subgroupBarrier ( global void) 0:128 subgroupMemoryBarrier ( global void) 0:129 subgroupMemoryBarrierBuffer ( global void) @@ -408,11 +408,11 @@ ERROR: node is still EOpNull! 0:135 Function Parameters: 0:135 'f4' ( in 4-component vector of float) 0:136 Sequence -0:136 'gl_SubgroupEqMask' ( in 4-component vector of uint SubgroupEqMask) -0:137 'gl_SubgroupGeMask' ( in 4-component vector of uint SubgroupGeMask) -0:138 'gl_SubgroupGtMask' ( in 4-component vector of uint SubgroupGtMask) -0:139 'gl_SubgroupLeMask' ( in 4-component vector of uint SubgroupLeMask) -0:140 'gl_SubgroupLtMask' ( in 4-component vector of uint SubgroupLtMask) +0:136 'gl_SubgroupEqMask' ( volatile in 4-component vector of uint SubgroupEqMask) +0:137 'gl_SubgroupGeMask' ( volatile in 4-component vector of uint SubgroupGeMask) +0:138 'gl_SubgroupGtMask' ( volatile in 4-component vector of uint SubgroupGtMask) +0:139 'gl_SubgroupLeMask' ( volatile in 4-component vector of uint SubgroupLeMask) +0:140 'gl_SubgroupLtMask' ( volatile in 4-component vector of uint SubgroupLtMask) 0:141 subgroupBroadcast ( global 4-component vector of float) 0:141 'f4' ( in 4-component vector of float) 0:141 Constant: @@ -662,15 +662,15 @@ ERROR: node is still EOpNull! 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:253 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:254 'gl_SMIDNV' ( volatile 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:265 'gl_WarpIDNV' ( volatile in uint WarpIDNV) +0:266 'gl_SMIDNV' ( volatile 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) diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out index c0cc8aa764..9c49e2e3c9 100644 --- a/Test/baseResults/rayQuery-allOps.comp.out +++ b/Test/baseResults/rayQuery-allOps.comp.out @@ -4,8 +4,8 @@ rayQuery-allOps.comp // Id's are bound by 258 Capability Shader - Capability RayQueryProvisionalKHR - Capability RayTraversalPrimitiveCullingProvisionalKHR + Capability RayQueryKHR + Capability RayTraversalPrimitiveCullingKHR Extension "SPV_KHR_ray_query" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -87,7 +87,8 @@ rayQuery-allOps.comp 37: 18(int) Constant 3 38: 8(float) Constant 1176255488 45: TypeRayQueryProvisionalKHR - 46: TypePointer Function 45 + 46: TypePointer Private 45 + 47(rayQuery): 46(ptr) Variable Private 48: TypeAccelerationStructureKHR 49: TypePointer UniformConstant 48 50(rtas): 49(ptr) Variable UniformConstant @@ -114,7 +115,6 @@ rayQuery-allOps.comp 4(main): 2 Function None 3 5: Label 43(ray): 25(ptr) Variable Function - 47(rayQuery): 46(ptr) Variable Function 69(candidateType): 68(ptr) Variable Function 78(_mat4x3): 77(ptr) Variable Function 83(_mat3x4): 82(ptr) Variable Function diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out index 8182da3cb6..cff8fb0efd 100644 --- a/Test/baseResults/rayQuery-allOps.frag.out +++ b/Test/baseResults/rayQuery-allOps.frag.out @@ -4,7 +4,7 @@ rayQuery-allOps.frag // Id's are bound by 257 Capability Shader - Capability RayQueryProvisionalKHR + Capability RayQueryKHR Extension "SPV_KHR_ray_query" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -86,7 +86,8 @@ rayQuery-allOps.frag 37: 18(int) Constant 3 38: 8(float) Constant 1176255488 45: TypeRayQueryProvisionalKHR - 46: TypePointer Function 45 + 46: TypePointer Private 45 + 47(rayQuery): 46(ptr) Variable Private 48: TypeAccelerationStructureKHR 49: TypePointer UniformConstant 48 50(rtas): 49(ptr) Variable UniformConstant @@ -112,7 +113,6 @@ rayQuery-allOps.frag 4(main): 2 Function None 3 5: Label 43(ray): 25(ptr) Variable Function - 47(rayQuery): 46(ptr) Variable Function 69(candidateType): 68(ptr) Variable Function 78(_mat4x3): 77(ptr) Variable Function 83(_mat3x4): 82(ptr) Variable Function diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out index 01b8f1d174..418dad1800 100644 --- a/Test/baseResults/rayQuery-allOps.rgen.out +++ b/Test/baseResults/rayQuery-allOps.rgen.out @@ -3,7 +3,7 @@ rayQuery-allOps.rgen // Generated by (magic number): 8000a // Id's are bound by 257 - Capability RayQueryProvisionalKHR + Capability RayQueryKHR Capability RayTracingNV Extension "SPV_KHR_ray_query" Extension "SPV_NV_ray_tracing" @@ -86,7 +86,8 @@ rayQuery-allOps.rgen 37: 18(int) Constant 3 38: 8(float) Constant 1176255488 45: TypeRayQueryProvisionalKHR - 46: TypePointer Function 45 + 46: TypePointer Private 45 + 47(rayQuery): 46(ptr) Variable Private 48: TypeAccelerationStructureKHR 49: TypePointer UniformConstant 48 50(rtas): 49(ptr) Variable UniformConstant @@ -112,7 +113,6 @@ rayQuery-allOps.rgen 4(main): 2 Function None 3 5: Label 43(ray): 25(ptr) Variable Function - 47(rayQuery): 46(ptr) Variable Function 69(candidateType): 68(ptr) Variable Function 78(_mat4x3): 77(ptr) Variable Function 83(_mat3x4): 82(ptr) Variable Function diff --git a/Test/baseResults/rayQuery-global.rgen.out b/Test/baseResults/rayQuery-global.rgen.out new file mode 100644 index 0000000000..637b7528ba --- /dev/null +++ b/Test/baseResults/rayQuery-global.rgen.out @@ -0,0 +1,76 @@ +rayQuery-global.rgen +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 44 + + Capability RayQueryKHR + Capability RayTracingKHR + Extension "SPV_KHR_ray_query" + Extension "SPV_KHR_ray_tracing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" + Source GLSL 460 + SourceExtension "GL_EXT_ray_flags_primitive_culling" + SourceExtension "GL_EXT_ray_query" + Name 4 "main" + Name 10 "otherWrapper(rq1;" + Name 9 "rq" + Name 13 "wrapper(rq1;" + Name 12 "rq" + Name 17 "rqGlobal" + Name 22 "rq2" + Name 27 "rtas" + Name 40 "rq2" + Decorate 27(rtas) DescriptorSet 0 + Decorate 27(rtas) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeRayQueryProvisionalKHR + 7: TypePointer Private 6 + 8: TypeFunction 2 7(ptr) + 15: TypeBool + 17(rqGlobal): 7(ptr) Variable Private + 22(rq2): 7(ptr) Variable Private + 25: TypeAccelerationStructureKHR + 26: TypePointer UniformConstant 25 + 27(rtas): 26(ptr) Variable UniformConstant + 29: TypeInt 32 0 + 30: 29(int) Constant 0 + 31: 29(int) Constant 255 + 32: TypeFloat 32 + 33: TypeVector 32(float) 3 + 34: 32(float) Constant 0 + 35: 33(fvec3) ConstantComposite 34 34 34 + 36: 32(float) Constant 1065353216 + 37: 33(fvec3) ConstantComposite 36 34 34 + 40(rq2): 7(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + 28: 25 Load 27(rtas) + RayQueryInitializeKHR 17(rqGlobal) 28 30 31 35 34 37 36 + 38: 2 FunctionCall 13(wrapper(rq1;) 17(rqGlobal) + 39: 2 FunctionCall 10(otherWrapper(rq1;) 17(rqGlobal) + 41: 25 Load 27(rtas) + RayQueryInitializeKHR 40(rq2) 41 30 31 35 34 37 36 + 42: 2 FunctionCall 13(wrapper(rq1;) 40(rq2) + 43: 2 FunctionCall 10(otherWrapper(rq1;) 40(rq2) + Return + FunctionEnd +10(otherWrapper(rq1;): 2 Function None 8 + 9(rq): 7(ptr) FunctionParameter + 11: Label + 16: 15(bool) RayQueryProceedKHR 9(rq) + 18: 15(bool) RayQueryProceedKHR 17(rqGlobal) + Return + FunctionEnd +13(wrapper(rq1;): 2 Function None 8 + 12(rq): 7(ptr) FunctionParameter + 14: Label + 19: 15(bool) RayQueryProceedKHR 12(rq) + 20: 15(bool) RayQueryProceedKHR 17(rqGlobal) + 21: 2 FunctionCall 10(otherWrapper(rq1;) 12(rq) + 23: 2 FunctionCall 10(otherWrapper(rq1;) 22(rq2) + 24: 2 FunctionCall 10(otherWrapper(rq1;) 17(rqGlobal) + Return + FunctionEnd diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out index f97287f180..3b833332f8 100644 --- a/Test/baseResults/rayQuery-initialize.rgen.out +++ b/Test/baseResults/rayQuery-initialize.rgen.out @@ -3,7 +3,7 @@ rayQuery-initialize.rgen // Generated by (magic number): 8000a // Id's are bound by 103 - Capability RayQueryProvisionalKHR + Capability RayQueryKHR Capability RayTracingNV Extension "SPV_KHR_ray_query" Extension "SPV_NV_ray_tracing" @@ -56,7 +56,7 @@ rayQuery-initialize.rgen 6: TypeInt 32 0 7: TypeFunction 6(int) 10: TypeRayQueryProvisionalKHR - 11: TypePointer Function 10 + 11: TypePointer Private 10 12: TypeFloat 32 13: TypeVector 12(float) 3 14(Ray): TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float) @@ -88,12 +88,12 @@ rayQuery-initialize.rgen 75: TypePointer Uniform 74(Rays) 76: 75(ptr) Variable Uniform 78: TypePointer Uniform 72(Ray) + 89(rayQuery): 11(ptr) Variable Private 94: 6(int) Constant 32 4(main): 2 Function None 3 5: Label 69(index): 68(ptr) Variable Function 71(ray): 15(ptr) Variable Function - 89(rayQuery): 11(ptr) Variable Function 90(param): 15(ptr) Variable Function 70: 6(int) FunctionCall 8(launchIndex() Store 69(index) 70 diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out index 23c8b51c79..2f46f07820 100644 --- a/Test/baseResults/rayQuery-no-cse.rgen.out +++ b/Test/baseResults/rayQuery-no-cse.rgen.out @@ -3,7 +3,7 @@ rayQuery-no-cse.rgen // Generated by (magic number): 8000a // Id's are bound by 107 - Capability RayQueryProvisionalKHR + Capability RayQueryKHR Capability RayTracingNV Extension "SPV_KHR_ray_query" Extension "SPV_NV_ray_tracing" @@ -58,7 +58,7 @@ rayQuery-no-cse.rgen 6: TypeInt 32 0 7: TypeFunction 6(int) 10: TypeRayQueryProvisionalKHR - 11: TypePointer Function 10 + 11: TypePointer Private 10 12: TypeFloat 32 13: TypeVector 12(float) 3 14(Ray): TypeStruct 13(fvec3) 12(float) 13(fvec3) 12(float) @@ -90,14 +90,14 @@ rayQuery-no-cse.rgen 75: TypePointer Uniform 74(Rays) 76: 75(ptr) Variable Uniform 78: TypePointer Uniform 72(Ray) + 89(rayQuery1): 11(ptr) Variable Private 94: 6(int) Constant 32 + 103(rayQuery2): 11(ptr) Variable Private 4(main): 2 Function None 3 5: Label 69(index): 68(ptr) Variable Function 71(ray): 15(ptr) Variable Function - 89(rayQuery1): 11(ptr) Variable Function 90(param): 15(ptr) Variable Function - 103(rayQuery2): 11(ptr) Variable Function 104(param): 15(ptr) Variable Function 70: 6(int) FunctionCall 8(launchIndex() Store 69(index) 70 diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out index bf142a335d..368097334e 100644 --- a/Test/baseResults/rayQuery.rgen.out +++ b/Test/baseResults/rayQuery.rgen.out @@ -3,7 +3,7 @@ rayQuery.rgen // Generated by (magic number): 8000a // Id's are bound by 44 - Capability RayQueryProvisionalKHR + Capability RayQueryKHR Capability RayTracingNV Extension "SPV_KHR_ray_query" Extension "SPV_NV_ray_tracing" @@ -40,7 +40,8 @@ rayQuery.rgen 13: 10(float) Constant 0 15: 10(float) Constant 1148846080 16: TypeRayQueryProvisionalKHR - 17: TypePointer Function 16 + 17: TypePointer Private 16 +18(localRayQuery): 17(ptr) Variable Private 19: TypeAccelerationStructureKHR 20: TypePointer UniformConstant 19 21(acc0): 20(ptr) Variable UniformConstant @@ -59,7 +60,6 @@ rayQuery.rgen 8(rayFlags): 7(ptr) Variable Function 12(tMin): 11(ptr) Variable Function 14(tMax): 11(ptr) Variable Function -18(localRayQuery): 17(ptr) Variable Function Store 8(rayFlags) 9 Store 12(tMin) 13 Store 14(tMax) 15 diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out index 755d60e869..f33a1bdce4 100644 --- a/Test/baseResults/spv.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.AnyHitShader.rahit.out @@ -153,10 +153,10 @@ spv.AnyHitShader.rahit SelectionMerge 79 None BranchConditional 77 78 80 78: Label - IgnoreIntersectionKHR + IgnoreIntersectionNV Branch 79 80: Label - TerminateRayKHR + TerminateRayNV Branch 79 79: Label Return diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out index 63039ddff6..4a8e65d249 100644 --- a/Test/baseResults/spv.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ClosestHitShader.rchit.out @@ -164,6 +164,6 @@ spv.ClosestHitShader.rchit 68: 60 Load 67(gl_WorldToObjectNV) Store 66(v14) 68 72: 69 Load 71(accNV) - TraceRayKHR 72 73 74 75 76 73 78 77 80 81 82 + TraceNV 72 73 74 75 76 73 78 77 80 81 82 Return FunctionEnd diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out index d0eeb0157e..563e53ff9d 100644 --- a/Test/baseResults/spv.MissShader.rmiss.out +++ b/Test/baseResults/spv.MissShader.rmiss.out @@ -108,6 +108,6 @@ spv.MissShader.rmiss 39: 16(float) Load 38(gl_RayTmaxNV) Store 37(v7) 39 43: 40 Load 42(accNV) - TraceRayKHR 43 44 45 46 47 44 49 48 51 52 54 + TraceNV 43 44 45 46 47 44 49 48 51 52 54 Return FunctionEnd diff --git a/Test/baseResults/spv.RayCallable.rcall.out b/Test/baseResults/spv.RayCallable.rcall.out index f59d36fc01..75698fcb65 100644 --- a/Test/baseResults/spv.RayCallable.rcall.out +++ b/Test/baseResults/spv.RayCallable.rcall.out @@ -55,6 +55,6 @@ spv.RayCallable.rcall Store 13(size) 15 23: 22(ptr) AccessChain 18 20 Store 23 21 - ExecuteCallableKHR 24 25 + ExecuteCallableNV 24 25 Return FunctionEnd diff --git a/Test/baseResults/spv.RayConstants.rgen.out b/Test/baseResults/spv.RayConstants.rgen.out index c4085fe3a2..962aeb7d24 100644 --- a/Test/baseResults/spv.RayConstants.rgen.out +++ b/Test/baseResults/spv.RayConstants.rgen.out @@ -41,6 +41,6 @@ spv.RayConstants.rgen 4(main): 2 Function None 3 5: Label 9: 6 Load 8(accNV) - TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23 + TraceNV 9 11 12 13 13 12 17 18 20 21 23 Return FunctionEnd diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out index 363b3dd0f6..f8f3fd65d8 100644 --- a/Test/baseResults/spv.RayGenShader.rgen.out +++ b/Test/baseResults/spv.RayGenShader.rgen.out @@ -92,6 +92,6 @@ spv.RayGenShader.rgen 44: 36(fvec3) Load 43 47: 42(ptr) AccessChain 39 46 48: 36(fvec3) Load 47 - TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41 + TraceNV 30 31 32 33 34 12 44 45 48 49 41 Return FunctionEnd diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out index 195071ff4b..f6b79c57ec 100644 --- a/Test/baseResults/spv.RayGenShader11.rgen.out +++ b/Test/baseResults/spv.RayGenShader11.rgen.out @@ -88,6 +88,6 @@ spv.RayGenShader11.rgen 44: 36(fvec3) Load 43 47: 42(ptr) AccessChain 39 46 48: 36(fvec3) Load 47 - TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41 + TraceNV 30 31 32 33 34 12 44 45 48 49 41 Return FunctionEnd diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out index fef54aa75b..63a04b3e1a 100644 --- a/Test/baseResults/spv.RayGenShaderArray.rgen.out +++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out @@ -111,7 +111,7 @@ spv.RayGenShaderArray.rgen 51: 32(fvec3) Load 50 54: 49(ptr) AccessChain 36 53 55: 32(fvec3) Load 54 - TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48 + TraceNV 43 44 45 46 47 12 51 52 55 56 48 61: 38(ptr) AccessChain 36 37 62: 33(int) Load 61 63: 41(ptr) AccessChain 60(accNV1) 62 @@ -124,7 +124,7 @@ spv.RayGenShaderArray.rgen 70: 32(fvec3) Load 69 71: 49(ptr) AccessChain 36 53 72: 32(fvec3) Load 71 - TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48 + TraceNV 64 65 66 67 68 12 70 52 72 56 48 73: 38(ptr) AccessChain 36 37 74: 33(int) Load 73 75: 33(int) CopyObject 74 @@ -138,6 +138,6 @@ spv.RayGenShaderArray.rgen 83: 32(fvec3) Load 82 84: 49(ptr) AccessChain 36 53 85: 32(fvec3) Load 84 - TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48 + TraceNV 77 78 79 80 81 12 83 52 85 56 48 Return FunctionEnd diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index 39e43a7b31..133fd63964 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -1,15 +1,17 @@ spv.ext.AnyHitShader.rahit // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 94 +// Id's are bound by 107 - Capability RayTracingProvisionalKHR + Capability GroupNonUniform + Capability RayTracingKHR Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 + EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 98 Source GLSL 460 SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_KHR_shader_subgroup_basic" Name 4 "main" Name 9 "v0" Name 11 "gl_LaunchIDEXT" @@ -48,6 +50,7 @@ spv.ext.AnyHitShader.rahit Name 79 "v17" Name 80 "gl_WorldToObject3x4EXT" Name 84 "incomingPayload" + Name 98 "gl_SubgroupSize" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -67,6 +70,9 @@ spv.ext.AnyHitShader.rahit Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR Decorate 84(incomingPayload) Location 1 + Decorate 98(gl_SubgroupSize) RelaxedPrecision + Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize + Decorate 99 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -114,6 +120,9 @@ spv.ext.AnyHitShader.rahit 86: 72(fvec4) ConstantComposite 85 85 85 85 88: 16(int) Constant 1 89: TypeBool + 94: 6(int) Constant 0 +98(gl_SubgroupSize): 57(ptr) Variable Input + 101: TypePointer IncomingRayPayloadKHR 28(float) 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -176,13 +185,16 @@ spv.ext.AnyHitShader.rahit 87: 16(int) Load 18(v2) 90: 89(bool) IEqual 87 88 SelectionMerge 92 None - BranchConditional 90 91 93 + BranchConditional 90 91 92 91: Label IgnoreIntersectionKHR - Branch 92 - 93: Label - TerminateRayKHR - Branch 92 92: Label - Return + 99: 6(int) Load 98(gl_SubgroupSize) + 100: 28(float) ConvertUToF 99 + 102: 101(ptr) AccessChain 84(incomingPayload) 94 + 103: 28(float) Load 102 + 104: 28(float) FAdd 103 100 + 105: 101(ptr) AccessChain 84(incomingPayload) 94 + Store 105 104 + TerminateRayKHR FunctionEnd diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out index 7077ea4a11..559ba002f0 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out @@ -3,7 +3,7 @@ spv.ext.ClosestHitShader.rchit // Generated by (magic number): 8000a // Id's are bound by 101 - Capability RayTracingProvisionalKHR + Capability RayTracingKHR Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -48,8 +48,8 @@ spv.ext.ClosestHitShader.rchit Name 79 "v17" Name 80 "gl_WorldToObject3x4EXT" Name 85 "accEXT" - Name 98 "localPayload" - Name 100 "incomingPayload" + Name 98 "incomingPayload" + Name 100 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -70,8 +70,8 @@ spv.ext.ClosestHitShader.rchit Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR Decorate 85(accEXT) DescriptorSet 0 Decorate 85(accEXT) Binding 0 - Decorate 98(localPayload) Location 0 - Decorate 100(incomingPayload) Location 1 + Decorate 98(incomingPayload) Location 1 + Decorate 100(localPayload) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -126,10 +126,10 @@ spv.ext.ClosestHitShader.rchit 94: 29(fvec3) ConstantComposite 93 93 93 95: 28(float) Constant 1061158912 96: 16(int) Constant 1 - 97: TypePointer RayPayloadKHR 72(fvec4) -98(localPayload): 97(ptr) Variable RayPayloadKHR - 99: TypePointer IncomingRayPayloadKHR 72(fvec4) -100(incomingPayload): 99(ptr) Variable IncomingRayPayloadKHR + 97: TypePointer IncomingRayPayloadKHR 72(fvec4) +98(incomingPayload): 97(ptr) Variable IncomingRayPayloadKHR + 99: TypePointer RayPayloadKHR 72(fvec4) +100(localPayload): 99(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -189,6 +189,6 @@ spv.ext.ClosestHitShader.rchit 82: 73 Transpose 81 Store 79(v17) 82 86: 83 Load 85(accEXT) - TraceRayKHR 86 87 88 89 90 87 92 91 94 95 96 + TraceRayKHR 86 87 88 89 90 87 92 91 94 95 98(incomingPayload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out index 6c87d1cadc..9f945a2da7 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader_Errors.rchit.out @@ -1,10 +1,12 @@ spv.ext.ClosestHitShader_Errors.rchit -ERROR: 0:8: 'assign' : l-value required "payload" (cannot modify hitAttributeNV in this stage) -ERROR: 0:9: 'reportIntersectionEXT' : no matching overloaded function found -ERROR: 0:10: 'terminateRayEXT' : no matching overloaded function found -ERROR: 0:11: 'ignoreIntersectionEXT' : no matching overloaded function found -ERROR: 0:12: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling -ERROR: 5 compilation errors. No code generated. +ERROR: 0:6: 'location' : overlapping use of location 2 +ERROR: 0:9: 'assign' : l-value required "payload" (cannot modify hitAttributeNV in this stage) +ERROR: 0:10: 'reportIntersectionEXT' : no matching overloaded function found +ERROR: 0:11: 'terminateRayEXT' : not supported in this stage: closest-hit +ERROR: 0:12: 'ignoreIntersectionEXT' : not supported in this stage: closest-hit +ERROR: 0:13: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling +ERROR: 0:14: 'no rayPayloadEXT/rayPayloadInEXT declared' : with layout(location = 0) +ERROR: 7 compilation errors. No code generated. SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out new file mode 100644 index 0000000000..14ec09b8a9 --- /dev/null +++ b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out @@ -0,0 +1,114 @@ +spv.ext.ClosestHitShader_Subgroup.rchit +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 67 + + Capability Int64 + Capability GroupNonUniform + Capability GroupNonUniformBallot + Capability SubgroupBallotKHR + Capability RayTracingKHR + Capability VulkanMemoryModelKHR + Capability ShaderSMBuiltinsNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_KHR_shader_ballot" + Extension "SPV_KHR_vulkan_memory_model" + Extension "SPV_NV_shader_sm_builtins" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical VulkanKHR + EntryPoint ClosestHitKHR 4 "main" 8 26 28 34 43 48 53 61 + Source GLSL 460 + SourceExtension "GL_ARB_shader_ballot" + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_KHR_shader_subgroup_ballot" + SourceExtension "GL_KHR_shader_subgroup_basic" + SourceExtension "GL_NV_shader_sm_builtins" + Name 4 "main" + Name 8 "accEXT" + Name 26 "incomingPayload" + Name 28 "gl_SubgroupInvocationID" + Name 34 "gl_SubGroupGeMaskARB" + Name 43 "gl_SubgroupGtMask" + Name 48 "gl_SubgroupLeMask" + Name 53 "gl_SubGroupLtMaskARB" + Name 61 "gl_SMIDNV" + Decorate 8(accEXT) DescriptorSet 0 + Decorate 8(accEXT) Binding 0 + Decorate 26(incomingPayload) Location 1 + Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision + Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId + Decorate 29 RelaxedPrecision + Decorate 34(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR + Decorate 43(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR + Decorate 48(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR + Decorate 53(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR + Decorate 61(gl_SMIDNV) BuiltIn SMIDNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeAccelerationStructureKHR + 7: TypePointer UniformConstant 6 + 8(accEXT): 7(ptr) Variable UniformConstant + 10: TypeInt 32 0 + 11: 10(int) Constant 0 + 12: 10(int) Constant 1 + 13: 10(int) Constant 2 + 14: 10(int) Constant 3 + 15: TypeFloat 32 + 16: TypeVector 15(float) 3 + 17: 15(float) Constant 1056964608 + 18: 16(fvec3) ConstantComposite 17 17 17 + 19: 15(float) Constant 1065353216 + 20: 16(fvec3) ConstantComposite 19 19 19 + 21: 15(float) Constant 1061158912 + 22: TypeInt 32 1 + 23: 22(int) Constant 1 + 24: TypeVector 15(float) 4 + 25: TypePointer IncomingRayPayloadKHR 24(fvec4) +26(incomingPayload): 25(ptr) Variable IncomingRayPayloadKHR + 27: TypePointer Input 10(int) +28(gl_SubgroupInvocationID): 27(ptr) Variable Input + 31: TypeVector 10(int) 4 + 32: TypeInt 64 0 + 33: TypePointer Input 31(ivec4) +34(gl_SubGroupGeMaskARB): 33(ptr) Variable Input + 38: TypeVector 10(int) 2 +43(gl_SubgroupGtMask): 33(ptr) Variable Input +48(gl_SubgroupLeMask): 33(ptr) Variable Input +53(gl_SubGroupLtMaskARB): 33(ptr) Variable Input + 61(gl_SMIDNV): 27(ptr) Variable Input + 65: TypePointer IncomingRayPayloadKHR 15(float) + 4(main): 2 Function None 3 + 5: Label + 9: 6 Load 8(accEXT) + TraceRayKHR 9 11 12 13 14 11 18 17 20 21 26(incomingPayload) + 29: 10(int) Load 28(gl_SubgroupInvocationID) Volatile + 30: 15(float) ConvertUToF 29 + 35: 31(ivec4) Load 34(gl_SubGroupGeMaskARB) + 36: 10(int) CompositeExtract 35 0 + 37: 10(int) CompositeExtract 35 1 + 39: 38(ivec2) CompositeConstruct 36 37 + 40: 32(int64_t) Bitcast 39 + 41: 15(float) ConvertUToF 40 + 42: 15(float) FAdd 30 41 + 44: 31(ivec4) Load 43(gl_SubgroupGtMask) Volatile + 45: 24(fvec4) ConvertUToF 44 + 46: 15(float) CompositeExtract 45 0 + 47: 15(float) FAdd 42 46 + 49: 31(ivec4) Load 48(gl_SubgroupLeMask) Volatile + 50: 24(fvec4) ConvertUToF 49 + 51: 15(float) CompositeExtract 50 0 + 52: 15(float) FAdd 47 51 + 54: 31(ivec4) Load 53(gl_SubGroupLtMaskARB) + 55: 10(int) CompositeExtract 54 0 + 56: 10(int) CompositeExtract 54 1 + 57: 38(ivec2) CompositeConstruct 55 56 + 58: 32(int64_t) Bitcast 57 + 59: 15(float) ConvertUToF 58 + 60: 15(float) FAdd 52 59 + 62: 10(int) Load 61(gl_SMIDNV) Volatile + 63: 15(float) ConvertUToF 62 + 64: 15(float) FAdd 60 63 + 66: 65(ptr) AccessChain 26(incomingPayload) 11 + Store 66 64 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out index 4a4a34a5a2..2d389a0c50 100644 --- a/Test/baseResults/spv.ext.IntersectShader.rint.out +++ b/Test/baseResults/spv.ext.IntersectShader.rint.out @@ -3,7 +3,7 @@ spv.ext.IntersectShader.rint // Generated by (magic number): 8000a // Id's are bound by 81 - Capability RayTracingProvisionalKHR + Capability RayTracingKHR Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -53,6 +53,8 @@ spv.ext.IntersectShader.rint Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR + Decorate 50(gl_RayTmaxEXT) Volatile + Decorate 50(gl_RayTmaxEXT) Coherent Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out index 544901bcf7..bc29cccacb 100644 --- a/Test/baseResults/spv.ext.MissShader.rmiss.out +++ b/Test/baseResults/spv.ext.MissShader.rmiss.out @@ -1,15 +1,25 @@ spv.ext.MissShader.rmiss // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 54 +// Id's are bound by 71 - Capability RayTracingProvisionalKHR + Capability GroupNonUniform + Capability GroupNonUniformBallot + Capability SubgroupBallotKHR + Capability RayTracingKHR + Capability ShaderSMBuiltinsNV Extension "SPV_KHR_ray_tracing" + Extension "SPV_KHR_shader_ballot" + Extension "SPV_NV_shader_sm_builtins" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 + EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 58 63 70 Source GLSL 460 + SourceExtension "GL_ARB_shader_ballot" SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_KHR_shader_subgroup_ballot" + SourceExtension "GL_KHR_shader_subgroup_basic" + SourceExtension "GL_NV_shader_sm_builtins" Name 4 "main" Name 9 "v0" Name 11 "gl_LaunchIDEXT" @@ -24,8 +34,11 @@ spv.ext.MissShader.rmiss Name 31 "v5" Name 32 "gl_RayTmaxEXT" Name 36 "accEXT" - Name 51 "localPayload" - Name 53 "incomingPayload" + Name 51 "incomingPayload" + Name 53 "gl_SubGroupSizeARB" + Name 58 "gl_SubgroupEqMask" + Name 63 "gl_WarpIDNV" + Name 70 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR @@ -34,8 +47,17 @@ spv.ext.MissShader.rmiss Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR Decorate 36(accEXT) DescriptorSet 0 Decorate 36(accEXT) Binding 0 - Decorate 51(localPayload) Location 0 - Decorate 53(incomingPayload) Location 1 + Decorate 51(incomingPayload) Location 1 + Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize + Decorate 53(gl_SubGroupSizeARB) Volatile + Decorate 53(gl_SubGroupSizeARB) Coherent + Decorate 58(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR + Decorate 58(gl_SubgroupEqMask) Volatile + Decorate 58(gl_SubgroupEqMask) Coherent + Decorate 63(gl_WarpIDNV) BuiltIn WarpIDNV + Decorate 63(gl_WarpIDNV) Volatile + Decorate 63(gl_WarpIDNV) Coherent + Decorate 70(localPayload) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -69,10 +91,17 @@ spv.ext.MissShader.rmiss 47: TypeInt 32 1 48: 47(int) Constant 1 49: TypeVector 16(float) 4 - 50: TypePointer RayPayloadKHR 49(fvec4) -51(localPayload): 50(ptr) Variable RayPayloadKHR - 52: TypePointer IncomingRayPayloadKHR 49(fvec4) -53(incomingPayload): 52(ptr) Variable IncomingRayPayloadKHR + 50: TypePointer IncomingRayPayloadKHR 49(fvec4) +51(incomingPayload): 50(ptr) Variable IncomingRayPayloadKHR + 52: TypePointer Input 6(int) +53(gl_SubGroupSizeARB): 52(ptr) Variable Input + 56: TypeVector 6(int) 4 + 57: TypePointer Input 56(ivec4) +58(gl_SubgroupEqMask): 57(ptr) Variable Input + 63(gl_WarpIDNV): 52(ptr) Variable Input + 67: TypePointer IncomingRayPayloadKHR 16(float) + 69: TypePointer RayPayloadKHR 49(fvec4) +70(localPayload): 69(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -94,6 +123,17 @@ spv.ext.MissShader.rmiss 33: 16(float) Load 32(gl_RayTmaxEXT) Store 31(v5) 33 37: 34 Load 36(accEXT) - TraceRayKHR 37 38 39 40 41 38 43 42 45 46 48 + TraceRayKHR 37 38 39 40 41 38 43 42 45 46 51(incomingPayload) + 54: 6(int) Load 53(gl_SubGroupSizeARB) + 55: 16(float) ConvertUToF 54 + 59: 56(ivec4) Load 58(gl_SubgroupEqMask) + 60: 49(fvec4) ConvertUToF 59 + 61: 16(float) CompositeExtract 60 0 + 62: 16(float) FAdd 55 61 + 64: 6(int) Load 63(gl_WarpIDNV) + 65: 16(float) ConvertUToF 64 + 66: 16(float) FAdd 62 65 + 68: 67(ptr) AccessChain 51(incomingPayload) 38 + Store 68 66 Return FunctionEnd diff --git a/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out b/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out index 929a2a7ea1..50d3c83e46 100644 --- a/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out +++ b/Test/baseResults/spv.ext.MissShader_Errors.rmiss.out @@ -13,8 +13,8 @@ ERROR: 0:10: '=' : cannot convert from ' temp float' to ' temp highp 4X3 matrix ERROR: 0:11: 'gl_HitTEXT' : undeclared identifier ERROR: 0:12: 'gl_HitKindEXT' : undeclared identifier ERROR: 0:13: 'reportIntersectionEXT' : no matching overloaded function found -ERROR: 0:14: 'ignoreIntersectionEXT' : no matching overloaded function found -ERROR: 0:15: 'terminateRayEXT' : no matching overloaded function found +ERROR: 0:14: 'ignoreIntersectionEXT' : not supported in this stage: miss +ERROR: 0:15: 'terminateRayEXT' : not supported in this stage: miss ERROR: 16 compilation errors. No code generated. diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out index e87b5fafe2..d429116cc0 100644 --- a/Test/baseResults/spv.ext.RayCallable.rcall.out +++ b/Test/baseResults/spv.ext.RayCallable.rcall.out @@ -3,7 +3,7 @@ spv.ext.RayCallable.rcall // Generated by (magic number): 8000a // Id's are bound by 30 - Capability RayTracingProvisionalKHR + Capability RayTracingKHR Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -55,6 +55,6 @@ spv.ext.RayCallable.rcall Store 13(size) 15 23: 22(ptr) AccessChain 18 20 Store 23 21 - ExecuteCallableKHR 24 25 + ExecuteCallableKHR 24 18 Return FunctionEnd diff --git a/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out b/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out index 4699342630..e62387444f 100644 --- a/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out +++ b/Test/baseResults/spv.ext.RayCallable_Errors.rcall.out @@ -2,34 +2,36 @@ spv.ext.RayCallable_Errors.rcall ERROR: 0:3: 'hitAttributeEXT' : not supported in this stage: callable ERROR: 0:4: 'rayPayloadEXT' : not supported in this stage: callable ERROR: 0:5: 'rayPayloadInEXT' : not supported in this stage: callable -ERROR: 0:9: 'gl_PrimitiveID' : undeclared identifier -ERROR: 0:9: '=' : cannot convert from ' temp float' to ' temp highp int' -ERROR: 0:10: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?) +ERROR: 0:7: 'location' : overlapping use of location 0 +ERROR: 0:10: 'gl_PrimitiveID' : undeclared identifier ERROR: 0:10: '=' : cannot convert from ' temp float' to ' temp highp int' -ERROR: 0:11: 'gl_InstanceCustomIndexEXT' : undeclared identifier +ERROR: 0:11: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?) ERROR: 0:11: '=' : cannot convert from ' temp float' to ' temp highp int' -ERROR: 0:12: 'gl_WorldRayOriginEXT' : undeclared identifier -ERROR: 0:12: '=' : cannot convert from ' temp float' to ' temp highp 3-component vector of float' -ERROR: 0:13: 'gl_WorldRayDirectionEXT' : undeclared identifier +ERROR: 0:12: 'gl_InstanceCustomIndexEXT' : undeclared identifier +ERROR: 0:12: '=' : cannot convert from ' temp float' to ' temp highp int' +ERROR: 0:13: 'gl_WorldRayOriginEXT' : undeclared identifier ERROR: 0:13: '=' : cannot convert from ' temp float' to ' temp highp 3-component vector of float' -ERROR: 0:14: 'gl_ObjectRayOriginEXT' : undeclared identifier +ERROR: 0:14: 'gl_WorldRayDirectionEXT' : undeclared identifier ERROR: 0:14: '=' : cannot convert from ' temp float' to ' temp highp 3-component vector of float' -ERROR: 0:15: 'gl_ObjectRayDirectionEXT' : undeclared identifier +ERROR: 0:15: 'gl_ObjectRayOriginEXT' : undeclared identifier ERROR: 0:15: '=' : cannot convert from ' temp float' to ' temp highp 3-component vector of float' -ERROR: 0:16: 'gl_RayTminEXT' : undeclared identifier -ERROR: 0:17: 'gl_RayTmaxEXT' : undeclared identifier -ERROR: 0:18: 'gl_ObjectToWorldEXT' : undeclared identifier -ERROR: 0:18: '=' : cannot convert from ' temp float' to ' temp highp 4X3 matrix of float' -ERROR: 0:19: 'gl_WorldToObjectEXT' : undeclared identifier +ERROR: 0:16: 'gl_ObjectRayDirectionEXT' : undeclared identifier +ERROR: 0:16: '=' : cannot convert from ' temp float' to ' temp highp 3-component vector of float' +ERROR: 0:17: 'gl_RayTminEXT' : undeclared identifier +ERROR: 0:18: 'gl_RayTmaxEXT' : undeclared identifier +ERROR: 0:19: 'gl_ObjectToWorldEXT' : undeclared identifier ERROR: 0:19: '=' : cannot convert from ' temp float' to ' temp highp 4X3 matrix of float' -ERROR: 0:20: 'gl_HitTEXT' : undeclared identifier -ERROR: 0:21: 'gl_HitKindEXT' : undeclared identifier -ERROR: 0:22: 'gl_IncomingRayFlagsEXT' : undeclared identifier -ERROR: 0:22: '=' : cannot convert from ' temp float' to ' temp highp uint' -ERROR: 0:23: 'reportIntersectionEXT' : no matching overloaded function found -ERROR: 0:24: 'ignoreIntersectionEXT' : no matching overloaded function found -ERROR: 0:25: 'terminateRayEXT' : no matching overloaded function found -ERROR: 30 compilation errors. No code generated. +ERROR: 0:20: 'gl_WorldToObjectEXT' : undeclared identifier +ERROR: 0:20: '=' : cannot convert from ' temp float' to ' temp highp 4X3 matrix of float' +ERROR: 0:21: 'gl_HitTEXT' : undeclared identifier +ERROR: 0:22: 'gl_HitKindEXT' : undeclared identifier +ERROR: 0:23: 'gl_IncomingRayFlagsEXT' : undeclared identifier +ERROR: 0:23: '=' : cannot convert from ' temp float' to ' temp highp uint' +ERROR: 0:24: 'reportIntersectionEXT' : no matching overloaded function found +ERROR: 0:25: 'ignoreIntersectionEXT' : not supported in this stage: callable +ERROR: 0:26: 'terminateRayEXT' : not supported in this stage: callable +ERROR: 0:27: 'no callableDataEXT/callableDataInEXT declared' : with layout(location = 1) +ERROR: 32 compilation errors. No code generated. SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out index 5d7079a616..afd5083381 100644 --- a/Test/baseResults/spv.ext.RayConstants.rgen.out +++ b/Test/baseResults/spv.ext.RayConstants.rgen.out @@ -3,7 +3,7 @@ spv.ext.RayConstants.rgen // Generated by (magic number): 8000a // Id's are bound by 27 - Capability RayTracingProvisionalKHR + Capability RayTracingKHR Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -15,7 +15,7 @@ spv.ext.RayConstants.rgen Name 26 "payload" Decorate 8(accEXT) DescriptorSet 0 Decorate 8(accEXT) Binding 0 - Decorate 26(payload) Location 0 + Decorate 26(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeAccelerationStructureKHR @@ -41,6 +41,6 @@ spv.ext.RayConstants.rgen 4(main): 2 Function None 3 5: Label 9: 6 Load 8(accEXT) - TraceRayKHR 9 11 12 13 13 12 17 18 20 21 23 + TraceRayKHR 9 11 12 13 13 12 17 18 20 21 26(payload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out new file mode 100644 index 0000000000..60b5e9377b --- /dev/null +++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out @@ -0,0 +1,134 @@ +spv.ext.RayGenSBTlayout.rgen +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 74 + + Capability Int64 + Capability RayTracingKHR + Extension "SPV_KHR_ray_tracing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" 11 21 38 60 + Source GLSL 460 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_EXT_ray_tracing" + Name 4 "main" + Name 8 "lx" + Name 11 "gl_LaunchIDEXT" + Name 16 "ly" + Name 20 "sx" + Name 21 "gl_LaunchSizeEXT" + Name 24 "sy" + Name 36 "block" + MemberName 36(block) 0 "dir" + MemberName 36(block) 1 "origin" + MemberName 36(block) 2 "i" + MemberName 36(block) 3 "aHandle32" + MemberName 36(block) 4 "aHandle64" + MemberName 36(block) 5 "arr2" + MemberName 36(block) 6 "a" + MemberName 36(block) 7 "arr3" + MemberName 36(block) 8 "packme" + MemberName 36(block) 9 "b" + MemberName 36(block) 10 "c" + Name 38 "" + Name 60 "payload" + Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR + Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR + Decorate 34 ArrayStride 8 + Decorate 35 ArrayStride 16 + MemberDecorate 36(block) 0 Offset 0 + MemberDecorate 36(block) 1 Offset 16 + MemberDecorate 36(block) 2 Offset 28 + MemberDecorate 36(block) 3 Offset 32 + MemberDecorate 36(block) 4 Offset 40 + MemberDecorate 36(block) 5 Offset 48 + MemberDecorate 36(block) 6 Offset 64 + MemberDecorate 36(block) 7 Offset 80 + MemberDecorate 36(block) 8 Offset 112 + MemberDecorate 36(block) 9 Offset 120 + MemberDecorate 36(block) 10 Offset 128 + Decorate 36(block) Block + Decorate 38 DescriptorSet 0 + Decorate 38 Binding 0 + Decorate 60(payload) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LaunchIDEXT): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) + 17: 6(int) Constant 1 +21(gl_LaunchSizeEXT): 10(ptr) Variable Input + 27: TypeFloat 32 + 28: TypeVector 27(float) 3 + 29: TypeInt 32 1 + 30: TypeVector 6(int) 2 + 31: TypeInt 64 0 + 32: TypeVector 27(float) 2 + 33: 6(int) Constant 2 + 34: TypeArray 32(fvec2) 33 + 35: TypeArray 28(fvec3) 33 + 36(block): TypeStruct 28(fvec3) 28(fvec3) 29(int) 30(ivec2) 31(int64_t) 34 27(float) 35 27(float) 32(fvec2) 27(float) + 37: TypePointer ShaderRecordBufferKHR 36(block) + 38: 37(ptr) Variable ShaderRecordBufferKHR + 39: 29(int) Constant 3 + 40: TypePointer ShaderRecordBufferKHR 30(ivec2) + 43: TypeAccelerationStructureKHR + 49: 29(int) Constant 1 + 50: TypePointer ShaderRecordBufferKHR 28(fvec3) + 53: 27(float) Constant 1056964608 + 54: 29(int) Constant 0 + 57: 27(float) Constant 1061158912 + 58: TypeVector 27(float) 4 + 59: TypePointer RayPayloadKHR 58(fvec4) + 60(payload): 59(ptr) Variable RayPayloadKHR + 61: 29(int) Constant 4 + 62: TypePointer ShaderRecordBufferKHR 31(int64_t) + 4(main): 2 Function None 3 + 5: Label + 8(lx): 7(ptr) Variable Function + 16(ly): 7(ptr) Variable Function + 20(sx): 7(ptr) Variable Function + 24(sy): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 12 + 15: 6(int) Load 14 + Store 8(lx) 15 + 18: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 17 + 19: 6(int) Load 18 + Store 16(ly) 19 + 22: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12 + 23: 6(int) Load 22 + Store 20(sx) 23 + 25: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17 + 26: 6(int) Load 25 + Store 24(sy) 26 + 41: 40(ptr) AccessChain 38 39 + 42: 30(ivec2) Load 41 + 44: 43 ConvertUToAccelerationStructureKHR 42 + 45: 6(int) Load 8(lx) + 46: 6(int) Load 16(ly) + 47: 6(int) Load 20(sx) + 48: 6(int) Load 24(sy) + 51: 50(ptr) AccessChain 38 49 + 52: 28(fvec3) Load 51 + 55: 50(ptr) AccessChain 38 54 + 56: 28(fvec3) Load 55 + TraceRayKHR 44 45 46 47 48 12 52 53 56 57 60(payload) + 63: 62(ptr) AccessChain 38 61 + 64: 31(int64_t) Load 63 + 65: 43 ConvertUToAccelerationStructureKHR 64 + 66: 6(int) Load 8(lx) + 67: 6(int) Load 16(ly) + 68: 6(int) Load 20(sx) + 69: 6(int) Load 24(sy) + 70: 50(ptr) AccessChain 38 49 + 71: 28(fvec3) Load 70 + 72: 50(ptr) AccessChain 38 54 + 73: 28(fvec3) Load 72 + TraceRayKHR 65 66 67 68 69 12 71 53 73 57 60(payload) + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out new file mode 100644 index 0000000000..cc175f719a --- /dev/null +++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out @@ -0,0 +1,134 @@ +spv.ext.RayGenSBTlayout140.rgen +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 74 + + Capability Int64 + Capability RayTracingKHR + Extension "SPV_KHR_ray_tracing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" 11 21 38 60 + Source GLSL 460 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_EXT_ray_tracing" + Name 4 "main" + Name 8 "lx" + Name 11 "gl_LaunchIDEXT" + Name 16 "ly" + Name 20 "sx" + Name 21 "gl_LaunchSizeEXT" + Name 24 "sy" + Name 36 "block" + MemberName 36(block) 0 "dir" + MemberName 36(block) 1 "origin" + MemberName 36(block) 2 "i" + MemberName 36(block) 3 "aHandle32" + MemberName 36(block) 4 "aHandle64" + MemberName 36(block) 5 "arr" + MemberName 36(block) 6 "a" + MemberName 36(block) 7 "arr3" + MemberName 36(block) 8 "packme" + MemberName 36(block) 9 "b" + MemberName 36(block) 10 "c" + Name 38 "" + Name 60 "payload" + Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR + Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR + Decorate 34 ArrayStride 16 + Decorate 35 ArrayStride 16 + MemberDecorate 36(block) 0 Offset 0 + MemberDecorate 36(block) 1 Offset 16 + MemberDecorate 36(block) 2 Offset 28 + MemberDecorate 36(block) 3 Offset 32 + MemberDecorate 36(block) 4 Offset 40 + MemberDecorate 36(block) 5 Offset 48 + MemberDecorate 36(block) 6 Offset 80 + MemberDecorate 36(block) 7 Offset 96 + MemberDecorate 36(block) 8 Offset 128 + MemberDecorate 36(block) 9 Offset 136 + MemberDecorate 36(block) 10 Offset 144 + Decorate 36(block) Block + Decorate 38 DescriptorSet 0 + Decorate 38 Binding 0 + Decorate 60(payload) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LaunchIDEXT): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) + 17: 6(int) Constant 1 +21(gl_LaunchSizeEXT): 10(ptr) Variable Input + 27: TypeFloat 32 + 28: TypeVector 27(float) 3 + 29: TypeInt 32 1 + 30: TypeVector 6(int) 2 + 31: TypeInt 64 0 + 32: TypeVector 27(float) 2 + 33: 6(int) Constant 2 + 34: TypeArray 32(fvec2) 33 + 35: TypeArray 28(fvec3) 33 + 36(block): TypeStruct 28(fvec3) 28(fvec3) 29(int) 30(ivec2) 31(int64_t) 34 27(float) 35 27(float) 32(fvec2) 27(float) + 37: TypePointer ShaderRecordBufferKHR 36(block) + 38: 37(ptr) Variable ShaderRecordBufferKHR + 39: 29(int) Constant 3 + 40: TypePointer ShaderRecordBufferKHR 30(ivec2) + 43: TypeAccelerationStructureKHR + 49: 29(int) Constant 1 + 50: TypePointer ShaderRecordBufferKHR 28(fvec3) + 53: 27(float) Constant 1056964608 + 54: 29(int) Constant 0 + 57: 27(float) Constant 1061158912 + 58: TypeVector 27(float) 4 + 59: TypePointer RayPayloadKHR 58(fvec4) + 60(payload): 59(ptr) Variable RayPayloadKHR + 61: 29(int) Constant 4 + 62: TypePointer ShaderRecordBufferKHR 31(int64_t) + 4(main): 2 Function None 3 + 5: Label + 8(lx): 7(ptr) Variable Function + 16(ly): 7(ptr) Variable Function + 20(sx): 7(ptr) Variable Function + 24(sy): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 12 + 15: 6(int) Load 14 + Store 8(lx) 15 + 18: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 17 + 19: 6(int) Load 18 + Store 16(ly) 19 + 22: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12 + 23: 6(int) Load 22 + Store 20(sx) 23 + 25: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17 + 26: 6(int) Load 25 + Store 24(sy) 26 + 41: 40(ptr) AccessChain 38 39 + 42: 30(ivec2) Load 41 + 44: 43 ConvertUToAccelerationStructureKHR 42 + 45: 6(int) Load 8(lx) + 46: 6(int) Load 16(ly) + 47: 6(int) Load 20(sx) + 48: 6(int) Load 24(sy) + 51: 50(ptr) AccessChain 38 49 + 52: 28(fvec3) Load 51 + 55: 50(ptr) AccessChain 38 54 + 56: 28(fvec3) Load 55 + TraceRayKHR 44 45 46 47 48 12 52 53 56 57 60(payload) + 63: 62(ptr) AccessChain 38 61 + 64: 31(int64_t) Load 63 + 65: 43 ConvertUToAccelerationStructureKHR 64 + 66: 6(int) Load 8(lx) + 67: 6(int) Load 16(ly) + 68: 6(int) Load 20(sx) + 69: 6(int) Load 24(sy) + 70: 50(ptr) AccessChain 38 49 + 71: 28(fvec3) Load 70 + 72: 50(ptr) AccessChain 38 54 + 73: 28(fvec3) Load 72 + TraceRayKHR 65 66 67 68 69 12 71 53 73 57 60(payload) + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out new file mode 100644 index 0000000000..afcfa9cd54 --- /dev/null +++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out @@ -0,0 +1,134 @@ +spv.ext.RayGenSBTlayout430.rgen +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 74 + + Capability Int64 + Capability RayTracingKHR + Extension "SPV_KHR_ray_tracing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" 11 21 38 60 + Source GLSL 460 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_EXT_ray_tracing" + Name 4 "main" + Name 8 "lx" + Name 11 "gl_LaunchIDEXT" + Name 16 "ly" + Name 20 "sx" + Name 21 "gl_LaunchSizeEXT" + Name 24 "sy" + Name 36 "block" + MemberName 36(block) 0 "dir" + MemberName 36(block) 1 "origin" + MemberName 36(block) 2 "i" + MemberName 36(block) 3 "aHandle32" + MemberName 36(block) 4 "aHandle64" + MemberName 36(block) 5 "arr" + MemberName 36(block) 6 "a" + MemberName 36(block) 7 "arr3" + MemberName 36(block) 8 "packme" + MemberName 36(block) 9 "b" + MemberName 36(block) 10 "c" + Name 38 "" + Name 60 "payload" + Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR + Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR + Decorate 34 ArrayStride 8 + Decorate 35 ArrayStride 16 + MemberDecorate 36(block) 0 Offset 0 + MemberDecorate 36(block) 1 Offset 16 + MemberDecorate 36(block) 2 Offset 28 + MemberDecorate 36(block) 3 Offset 32 + MemberDecorate 36(block) 4 Offset 40 + MemberDecorate 36(block) 5 Offset 48 + MemberDecorate 36(block) 6 Offset 64 + MemberDecorate 36(block) 7 Offset 80 + MemberDecorate 36(block) 8 Offset 112 + MemberDecorate 36(block) 9 Offset 120 + MemberDecorate 36(block) 10 Offset 128 + Decorate 36(block) Block + Decorate 38 DescriptorSet 0 + Decorate 38 Binding 0 + Decorate 60(payload) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LaunchIDEXT): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) + 17: 6(int) Constant 1 +21(gl_LaunchSizeEXT): 10(ptr) Variable Input + 27: TypeFloat 32 + 28: TypeVector 27(float) 3 + 29: TypeInt 32 1 + 30: TypeVector 6(int) 2 + 31: TypeInt 64 0 + 32: TypeVector 27(float) 2 + 33: 6(int) Constant 2 + 34: TypeArray 32(fvec2) 33 + 35: TypeArray 28(fvec3) 33 + 36(block): TypeStruct 28(fvec3) 28(fvec3) 29(int) 30(ivec2) 31(int64_t) 34 27(float) 35 27(float) 32(fvec2) 27(float) + 37: TypePointer ShaderRecordBufferKHR 36(block) + 38: 37(ptr) Variable ShaderRecordBufferKHR + 39: 29(int) Constant 3 + 40: TypePointer ShaderRecordBufferKHR 30(ivec2) + 43: TypeAccelerationStructureKHR + 49: 29(int) Constant 1 + 50: TypePointer ShaderRecordBufferKHR 28(fvec3) + 53: 27(float) Constant 1056964608 + 54: 29(int) Constant 0 + 57: 27(float) Constant 1061158912 + 58: TypeVector 27(float) 4 + 59: TypePointer RayPayloadKHR 58(fvec4) + 60(payload): 59(ptr) Variable RayPayloadKHR + 61: 29(int) Constant 4 + 62: TypePointer ShaderRecordBufferKHR 31(int64_t) + 4(main): 2 Function None 3 + 5: Label + 8(lx): 7(ptr) Variable Function + 16(ly): 7(ptr) Variable Function + 20(sx): 7(ptr) Variable Function + 24(sy): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 12 + 15: 6(int) Load 14 + Store 8(lx) 15 + 18: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 17 + 19: 6(int) Load 18 + Store 16(ly) 19 + 22: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12 + 23: 6(int) Load 22 + Store 20(sx) 23 + 25: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17 + 26: 6(int) Load 25 + Store 24(sy) 26 + 41: 40(ptr) AccessChain 38 39 + 42: 30(ivec2) Load 41 + 44: 43 ConvertUToAccelerationStructureKHR 42 + 45: 6(int) Load 8(lx) + 46: 6(int) Load 16(ly) + 47: 6(int) Load 20(sx) + 48: 6(int) Load 24(sy) + 51: 50(ptr) AccessChain 38 49 + 52: 28(fvec3) Load 51 + 55: 50(ptr) AccessChain 38 54 + 56: 28(fvec3) Load 55 + TraceRayKHR 44 45 46 47 48 12 52 53 56 57 60(payload) + 63: 62(ptr) AccessChain 38 61 + 64: 31(int64_t) Load 63 + 65: 43 ConvertUToAccelerationStructureKHR 64 + 66: 6(int) Load 8(lx) + 67: 6(int) Load 16(ly) + 68: 6(int) Load 20(sx) + 69: 6(int) Load 24(sy) + 70: 50(ptr) AccessChain 38 49 + 71: 28(fvec3) Load 70 + 72: 50(ptr) AccessChain 38 54 + 73: 28(fvec3) Load 72 + TraceRayKHR 65 66 67 68 69 12 71 53 73 57 60(payload) + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out new file mode 100644 index 0000000000..eac481ac20 --- /dev/null +++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out @@ -0,0 +1,135 @@ +spv.ext.RayGenSBTlayoutscalar.rgen +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 74 + + Capability Int64 + Capability RayTracingKHR + Extension "SPV_KHR_ray_tracing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" 11 21 38 60 + Source GLSL 460 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_EXT_scalar_block_layout" + Name 4 "main" + Name 8 "lx" + Name 11 "gl_LaunchIDEXT" + Name 16 "ly" + Name 20 "sx" + Name 21 "gl_LaunchSizeEXT" + Name 24 "sy" + Name 36 "block" + MemberName 36(block) 0 "dir" + MemberName 36(block) 1 "origin" + MemberName 36(block) 2 "i" + MemberName 36(block) 3 "aHandle32" + MemberName 36(block) 4 "aHandle64" + MemberName 36(block) 5 "arr" + MemberName 36(block) 6 "a" + MemberName 36(block) 7 "arr3" + MemberName 36(block) 8 "packme" + MemberName 36(block) 9 "b" + MemberName 36(block) 10 "c" + Name 38 "" + Name 60 "payload" + Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR + Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR + Decorate 34 ArrayStride 8 + Decorate 35 ArrayStride 12 + MemberDecorate 36(block) 0 Offset 0 + MemberDecorate 36(block) 1 Offset 12 + MemberDecorate 36(block) 2 Offset 24 + MemberDecorate 36(block) 3 Offset 28 + MemberDecorate 36(block) 4 Offset 40 + MemberDecorate 36(block) 5 Offset 48 + MemberDecorate 36(block) 6 Offset 64 + MemberDecorate 36(block) 7 Offset 68 + MemberDecorate 36(block) 8 Offset 92 + MemberDecorate 36(block) 9 Offset 96 + MemberDecorate 36(block) 10 Offset 104 + Decorate 36(block) Block + Decorate 38 DescriptorSet 0 + Decorate 38 Binding 0 + Decorate 60(payload) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LaunchIDEXT): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) + 17: 6(int) Constant 1 +21(gl_LaunchSizeEXT): 10(ptr) Variable Input + 27: TypeFloat 32 + 28: TypeVector 27(float) 3 + 29: TypeInt 32 1 + 30: TypeVector 6(int) 2 + 31: TypeInt 64 0 + 32: TypeVector 27(float) 2 + 33: 6(int) Constant 2 + 34: TypeArray 32(fvec2) 33 + 35: TypeArray 28(fvec3) 33 + 36(block): TypeStruct 28(fvec3) 28(fvec3) 29(int) 30(ivec2) 31(int64_t) 34 27(float) 35 27(float) 32(fvec2) 27(float) + 37: TypePointer ShaderRecordBufferKHR 36(block) + 38: 37(ptr) Variable ShaderRecordBufferKHR + 39: 29(int) Constant 3 + 40: TypePointer ShaderRecordBufferKHR 30(ivec2) + 43: TypeAccelerationStructureKHR + 49: 29(int) Constant 1 + 50: TypePointer ShaderRecordBufferKHR 28(fvec3) + 53: 27(float) Constant 1056964608 + 54: 29(int) Constant 0 + 57: 27(float) Constant 1061158912 + 58: TypeVector 27(float) 4 + 59: TypePointer RayPayloadKHR 58(fvec4) + 60(payload): 59(ptr) Variable RayPayloadKHR + 61: 29(int) Constant 4 + 62: TypePointer ShaderRecordBufferKHR 31(int64_t) + 4(main): 2 Function None 3 + 5: Label + 8(lx): 7(ptr) Variable Function + 16(ly): 7(ptr) Variable Function + 20(sx): 7(ptr) Variable Function + 24(sy): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 12 + 15: 6(int) Load 14 + Store 8(lx) 15 + 18: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 17 + 19: 6(int) Load 18 + Store 16(ly) 19 + 22: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12 + 23: 6(int) Load 22 + Store 20(sx) 23 + 25: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17 + 26: 6(int) Load 25 + Store 24(sy) 26 + 41: 40(ptr) AccessChain 38 39 + 42: 30(ivec2) Load 41 + 44: 43 ConvertUToAccelerationStructureKHR 42 + 45: 6(int) Load 8(lx) + 46: 6(int) Load 16(ly) + 47: 6(int) Load 20(sx) + 48: 6(int) Load 24(sy) + 51: 50(ptr) AccessChain 38 49 + 52: 28(fvec3) Load 51 + 55: 50(ptr) AccessChain 38 54 + 56: 28(fvec3) Load 55 + TraceRayKHR 44 45 46 47 48 12 52 53 56 57 60(payload) + 63: 62(ptr) AccessChain 38 61 + 64: 31(int64_t) Load 63 + 65: 43 ConvertUToAccelerationStructureKHR 64 + 66: 6(int) Load 8(lx) + 67: 6(int) Load 16(ly) + 68: 6(int) Load 20(sx) + 69: 6(int) Load 24(sy) + 70: 50(ptr) AccessChain 38 49 + 71: 28(fvec3) Load 70 + 72: 50(ptr) AccessChain 38 54 + 73: 28(fvec3) Load 72 + TraceRayKHR 65 66 67 68 69 12 71 53 73 57 60(payload) + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out index b1904aca45..da516f38ac 100644 --- a/Test/baseResults/spv.ext.RayGenShader.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out @@ -3,12 +3,12 @@ spv.ext.RayGenShader.rgen // Generated by (magic number): 8000a // Id's are bound by 58 - Capability RayTraversalPrimitiveCullingProvisionalKHR - Capability RayTracingProvisionalKHR + Capability RayTraversalPrimitiveCullingKHR + Capability RayTracingKHR Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint RayGenerationKHR 4 "main" 11 21 29 40 51 54 57 + EntryPoint RayGenerationKHR 4 "main" 11 21 29 40 53 54 57 Source GLSL 460 SourceExtension "GL_EXT_ray_flags_primitive_culling" SourceExtension "GL_EXT_ray_tracing" @@ -24,9 +24,9 @@ spv.ext.RayGenShader.rgen MemberName 38(block) 0 "dir" MemberName 38(block) 1 "origin" Name 40 "" - Name 51 "accEXT1" - Name 54 "imageu" - Name 57 "payload" + Name 53 "payload" + Name 54 "accEXT1" + Name 57 "imageu" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 29(accEXT0) DescriptorSet 0 @@ -36,11 +36,11 @@ spv.ext.RayGenShader.rgen Decorate 38(block) Block Decorate 40 DescriptorSet 0 Decorate 40 Binding 3 - Decorate 51(accEXT1) DescriptorSet 0 - Decorate 51(accEXT1) Binding 1 - Decorate 54(imageu) DescriptorSet 0 - Decorate 54(imageu) Binding 2 - Decorate 57(payload) Location 0 + Decorate 53(payload) Location 1 + Decorate 54(accEXT1) DescriptorSet 0 + Decorate 54(accEXT1) Binding 1 + Decorate 57(imageu) DescriptorSet 0 + Decorate 57(imageu) Binding 2 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -67,13 +67,13 @@ spv.ext.RayGenShader.rgen 46: 36(float) Constant 1056964608 47: 41(int) Constant 0 50: 36(float) Constant 1061158912 - 51(accEXT1): 28(ptr) Variable UniformConstant - 52: TypeImage 6(int) 2D nonsampled format:R32ui - 53: TypePointer UniformConstant 52 - 54(imageu): 53(ptr) Variable UniformConstant - 55: TypeVector 36(float) 4 - 56: TypePointer RayPayloadKHR 55(fvec4) - 57(payload): 56(ptr) Variable RayPayloadKHR + 51: TypeVector 36(float) 4 + 52: TypePointer RayPayloadKHR 51(fvec4) + 53(payload): 52(ptr) Variable RayPayloadKHR + 54(accEXT1): 28(ptr) Variable UniformConstant + 55: TypeImage 6(int) 2D nonsampled format:R32ui + 56: TypePointer UniformConstant 55 + 57(imageu): 56(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 8(lx): 7(ptr) Variable Function @@ -101,6 +101,6 @@ spv.ext.RayGenShader.rgen 45: 37(fvec3) Load 44 48: 43(ptr) AccessChain 40 47 49: 37(fvec3) Load 48 - TraceRayKHR 30 31 32 33 34 35 45 46 49 50 42 + TraceRayKHR 30 31 32 33 34 35 45 46 49 50 53(payload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out index cfaf5293e0..00262ac2c0 100644 --- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out @@ -3,7 +3,7 @@ spv.ext.RayGenShader11.rgen // Generated by (magic number): 8000a // Id's are bound by 53 - Capability RayTracingProvisionalKHR + Capability RayTracingKHR Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -32,7 +32,7 @@ spv.ext.RayGenShader11.rgen Decorate 37(block) Block Decorate 39 DescriptorSet 0 Decorate 39 Binding 1 - Decorate 52(payload) Location 0 + Decorate 52(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -88,6 +88,6 @@ spv.ext.RayGenShader11.rgen 44: 36(fvec3) Load 43 47: 42(ptr) AccessChain 39 46 48: 36(fvec3) Load 47 - TraceRayKHR 30 31 32 33 34 12 44 45 48 49 41 + TraceRayKHR 30 31 32 33 34 12 44 45 48 49 52(payload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out index 25d46a6822..473937df52 100644 --- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out @@ -1,17 +1,19 @@ spv.ext.RayGenShaderArray.rgen // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 89 +// Id's are bound by 117 + Capability Int64 + Capability RayTracingKHR Capability ShaderNonUniformEXT Capability RuntimeDescriptorArrayEXT - Capability RayTracingProvisionalKHR Extension "SPV_EXT_descriptor_indexing" Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint RayGenerationKHR 4 "main" 11 21 30 36 60 88 + EntryPoint RayGenerationKHR 4 "main" 11 21 30 38 61 65 Source GLSL 460 + SourceExtension "GL_ARB_gpu_shader_int64" SourceExtension "GL_EXT_nonuniform_qualifier" SourceExtension "GL_EXT_ray_tracing" Name 4 "main" @@ -22,29 +24,33 @@ spv.ext.RayGenShaderArray.rgen Name 21 "gl_LaunchSizeEXT" Name 24 "sy" Name 30 "accEXT0" - Name 34 "block" - MemberName 34(block) 0 "dir" - MemberName 34(block) 1 "origin" - MemberName 34(block) 2 "i" - Name 36 "" - Name 60 "accEXT1" - Name 88 "payload" + Name 36 "block" + MemberName 36(block) 0 "dir" + MemberName 36(block) 1 "origin" + MemberName 36(block) 2 "i" + MemberName 36(block) 3 "aHandle32" + MemberName 36(block) 4 "aHandle64" + Name 38 "" + Name 61 "payload" + Name 65 "accEXT1" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 30(accEXT0) DescriptorSet 0 Decorate 30(accEXT0) Binding 0 - MemberDecorate 34(block) 0 Offset 0 - MemberDecorate 34(block) 1 Offset 16 - MemberDecorate 34(block) 2 Offset 28 - Decorate 34(block) Block - Decorate 36 DescriptorSet 0 - Decorate 36 Binding 2 - Decorate 60(accEXT1) DescriptorSet 0 - Decorate 60(accEXT1) Binding 1 - Decorate 75 DecorationNonUniformEXT - Decorate 76 DecorationNonUniformEXT - Decorate 77 DecorationNonUniformEXT - Decorate 88(payload) Location 0 + MemberDecorate 36(block) 0 Offset 0 + MemberDecorate 36(block) 1 Offset 16 + MemberDecorate 36(block) 2 Offset 28 + MemberDecorate 36(block) 3 Offset 32 + MemberDecorate 36(block) 4 Offset 40 + Decorate 36(block) Block + Decorate 38 DescriptorSet 0 + Decorate 38 Binding 2 + Decorate 61(payload) Location 1 + Decorate 65(accEXT1) DescriptorSet 0 + Decorate 65(accEXT1) Binding 1 + Decorate 80 DecorationNonUniformEXT + Decorate 81 DecorationNonUniformEXT + Decorate 82 DecorationNonUniformEXT 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -63,24 +69,30 @@ spv.ext.RayGenShaderArray.rgen 31: TypeFloat 32 32: TypeVector 31(float) 3 33: TypeInt 32 1 - 34(block): TypeStruct 32(fvec3) 32(fvec3) 33(int) - 35: TypePointer ShaderRecordBufferKHR 34(block) - 36: 35(ptr) Variable ShaderRecordBufferKHR - 37: 33(int) Constant 2 - 38: TypePointer ShaderRecordBufferKHR 33(int) - 41: TypePointer UniformConstant 27 - 48: 33(int) Constant 1 - 49: TypePointer ShaderRecordBufferKHR 32(fvec3) - 52: 31(float) Constant 1056964608 - 53: 33(int) Constant 0 - 56: 31(float) Constant 1061158912 - 57: 6(int) Constant 2 - 58: TypeArray 27 57 - 59: TypePointer UniformConstant 58 - 60(accEXT1): 59(ptr) Variable UniformConstant - 86: TypeVector 31(float) 4 - 87: TypePointer RayPayloadKHR 86(fvec4) - 88(payload): 87(ptr) Variable RayPayloadKHR + 34: TypeVector 6(int) 2 + 35: TypeInt 64 0 + 36(block): TypeStruct 32(fvec3) 32(fvec3) 33(int) 34(ivec2) 35(int64_t) + 37: TypePointer ShaderRecordBufferKHR 36(block) + 38: 37(ptr) Variable ShaderRecordBufferKHR + 39: 33(int) Constant 2 + 40: TypePointer ShaderRecordBufferKHR 33(int) + 43: TypePointer UniformConstant 27 + 50: 33(int) Constant 1 + 51: TypePointer ShaderRecordBufferKHR 32(fvec3) + 54: 31(float) Constant 1056964608 + 55: 33(int) Constant 0 + 58: 31(float) Constant 1061158912 + 59: TypeVector 31(float) 4 + 60: TypePointer RayPayloadKHR 59(fvec4) + 61(payload): 60(ptr) Variable RayPayloadKHR + 62: 6(int) Constant 2 + 63: TypeArray 27 62 + 64: TypePointer UniformConstant 63 + 65(accEXT1): 64(ptr) Variable UniformConstant + 91: 33(int) Constant 3 + 92: TypePointer ShaderRecordBufferKHR 34(ivec2) + 104: 33(int) Constant 4 + 105: TypePointer ShaderRecordBufferKHR 35(int64_t) 4(main): 2 Function None 3 5: Label 8(lx): 7(ptr) Variable Function @@ -99,45 +111,69 @@ spv.ext.RayGenShaderArray.rgen 25: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17 26: 6(int) Load 25 Store 24(sy) 26 - 39: 38(ptr) AccessChain 36 37 - 40: 33(int) Load 39 - 42: 41(ptr) AccessChain 30(accEXT0) 40 - 43: 27 Load 42 - 44: 6(int) Load 8(lx) - 45: 6(int) Load 16(ly) - 46: 6(int) Load 20(sx) - 47: 6(int) Load 24(sy) - 50: 49(ptr) AccessChain 36 48 - 51: 32(fvec3) Load 50 - 54: 49(ptr) AccessChain 36 53 - 55: 32(fvec3) Load 54 - TraceRayKHR 43 44 45 46 47 12 51 52 55 56 48 - 61: 38(ptr) AccessChain 36 37 - 62: 33(int) Load 61 - 63: 41(ptr) AccessChain 60(accEXT1) 62 - 64: 27 Load 63 - 65: 6(int) Load 8(lx) - 66: 6(int) Load 16(ly) - 67: 6(int) Load 20(sx) - 68: 6(int) Load 24(sy) - 69: 49(ptr) AccessChain 36 48 - 70: 32(fvec3) Load 69 - 71: 49(ptr) AccessChain 36 53 - 72: 32(fvec3) Load 71 - TraceRayKHR 64 65 66 67 68 12 70 52 72 56 48 - 73: 38(ptr) AccessChain 36 37 - 74: 33(int) Load 73 - 75: 33(int) CopyObject 74 - 76: 41(ptr) AccessChain 30(accEXT0) 75 - 77: 27 Load 76 - 78: 6(int) Load 8(lx) - 79: 6(int) Load 16(ly) - 80: 6(int) Load 20(sx) - 81: 6(int) Load 24(sy) - 82: 49(ptr) AccessChain 36 48 - 83: 32(fvec3) Load 82 - 84: 49(ptr) AccessChain 36 53 - 85: 32(fvec3) Load 84 - TraceRayKHR 77 78 79 80 81 12 83 52 85 56 48 + 41: 40(ptr) AccessChain 38 39 + 42: 33(int) Load 41 + 44: 43(ptr) AccessChain 30(accEXT0) 42 + 45: 27 Load 44 + 46: 6(int) Load 8(lx) + 47: 6(int) Load 16(ly) + 48: 6(int) Load 20(sx) + 49: 6(int) Load 24(sy) + 52: 51(ptr) AccessChain 38 50 + 53: 32(fvec3) Load 52 + 56: 51(ptr) AccessChain 38 55 + 57: 32(fvec3) Load 56 + TraceRayKHR 45 46 47 48 49 12 53 54 57 58 61(payload) + 66: 40(ptr) AccessChain 38 39 + 67: 33(int) Load 66 + 68: 43(ptr) AccessChain 65(accEXT1) 67 + 69: 27 Load 68 + 70: 6(int) Load 8(lx) + 71: 6(int) Load 16(ly) + 72: 6(int) Load 20(sx) + 73: 6(int) Load 24(sy) + 74: 51(ptr) AccessChain 38 50 + 75: 32(fvec3) Load 74 + 76: 51(ptr) AccessChain 38 55 + 77: 32(fvec3) Load 76 + TraceRayKHR 69 70 71 72 73 12 75 54 77 58 61(payload) + 78: 40(ptr) AccessChain 38 39 + 79: 33(int) Load 78 + 80: 33(int) CopyObject 79 + 81: 43(ptr) AccessChain 30(accEXT0) 80 + 82: 27 Load 81 + 83: 6(int) Load 8(lx) + 84: 6(int) Load 16(ly) + 85: 6(int) Load 20(sx) + 86: 6(int) Load 24(sy) + 87: 51(ptr) AccessChain 38 50 + 88: 32(fvec3) Load 87 + 89: 51(ptr) AccessChain 38 55 + 90: 32(fvec3) Load 89 + TraceRayKHR 82 83 84 85 86 12 88 54 90 58 61(payload) + 93: 92(ptr) AccessChain 38 91 + 94: 34(ivec2) Load 93 + 95: 27 ConvertUToAccelerationStructureKHR 94 + 96: 6(int) Load 8(lx) + 97: 6(int) Load 16(ly) + 98: 6(int) Load 20(sx) + 99: 6(int) Load 24(sy) + 100: 51(ptr) AccessChain 38 50 + 101: 32(fvec3) Load 100 + 102: 51(ptr) AccessChain 38 55 + 103: 32(fvec3) Load 102 + TraceRayKHR 95 96 97 98 99 12 101 54 103 58 61(payload) + 106: 105(ptr) AccessChain 38 104 + 107: 35(int64_t) Load 106 + 108: 27 ConvertUToAccelerationStructureKHR 107 + 109: 6(int) Load 8(lx) + 110: 6(int) Load 16(ly) + 111: 6(int) Load 20(sx) + 112: 6(int) Load 24(sy) + 113: 51(ptr) AccessChain 38 50 + 114: 32(fvec3) Load 113 + 115: 51(ptr) AccessChain 38 55 + 116: 32(fvec3) Load 115 + TraceRayKHR 108 109 110 111 112 12 114 54 116 58 61(payload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out b/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out index 6dc7480b51..3f336bb7ff 100644 --- a/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader_Errors.rgen.out @@ -4,8 +4,9 @@ ERROR: 0:4: 'rayPayloadInEXT' : not supported in this stage: ray-generation ERROR: 0:5: 'shaderRecordNV' : can only be used with a buffer ERROR: 0:9: 'binding' : cannot be used with shaderRecordNV ERROR: 0:12: 'set' : cannot be used with shaderRecordNV +ERROR: 0:23: ' temp accelerationStructureNV' : cannot construct with these arguments ERROR: 0:23: 'accelerationStructureNV' : accelerationStructureNV can only be used in uniform variables or function parameters: a -ERROR: 0:23: '=' : cannot convert from ' const int' to ' temp accelerationStructureNV' +ERROR: 0:23: '=' : cannot convert from ' const float' to ' temp accelerationStructureNV' ERROR: 0:24: 'gl_PrimitiveID' : undeclared identifier ERROR: 0:24: '=' : cannot convert from ' temp float' to ' temp highp int' ERROR: 0:25: 'gl_InstanceID' : undeclared identifier (Did you mean gl_InstanceIndex?) @@ -28,11 +29,13 @@ ERROR: 0:34: 'gl_WorldToObjectEXT' : undeclared identifier ERROR: 0:34: '=' : cannot convert from ' temp float' to ' temp highp 4X3 matrix of float' ERROR: 0:35: 'gl_HitTEXT' : undeclared identifier ERROR: 0:36: 'gl_HitKindEXT' : undeclared identifier -ERROR: 0:37: 'reportIntersectionEXT' : no matching overloaded function found -ERROR: 0:38: 'ignoreIntersectionEXT' : no matching overloaded function found -ERROR: 0:39: 'terminateRayEXT' : no matching overloaded function found -ERROR: 0:40: 'assign' : l-value required "anon@3" (can't modify a shaderrecordnv qualified buffer) -ERROR: 33 compilation errors. No code generated. +ERROR: 0:37: 'gl_RayFlagsSkipAABBEXT' : required extension not requested: GL_EXT_ray_flags_primitive_culling +ERROR: 0:37: '=' : cannot convert from ' const uint' to ' temp highp int' +ERROR: 0:38: 'reportIntersectionEXT' : no matching overloaded function found +ERROR: 0:39: 'ignoreIntersectionEXT' : not supported in this stage: ray-generation +ERROR: 0:40: 'terminateRayEXT' : not supported in this stage: ray-generation +ERROR: 0:41: 'assign' : l-value required "anon@3" (can't modify a shaderrecordnv qualified buffer) +ERROR: 36 compilation errors. No code generated. ERROR: Linking ray-generation stage: Only one shaderRecordNV buffer block is allowed per stage diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out index ad877bd0da..40d73d1b9d 100644 --- a/Test/baseResults/spv.ext.World3x4.rahit.out +++ b/Test/baseResults/spv.ext.World3x4.rahit.out @@ -3,7 +3,7 @@ spv.ext.World3x4.rahit // Generated by (magic number): 8000a // Id's are bound by 90 - Capability RayTracingProvisionalKHR + Capability RayTracingKHR Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 diff --git a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out index 38a426cd94..86a4fd2e24 100644 --- a/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out +++ b/Test/baseResults/spv.meshShaderPerViewBuiltins.mesh.out @@ -1,5 +1,4 @@ spv.meshShaderPerViewBuiltins.mesh -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 126 diff --git a/Test/rayQuery-global.rgen b/Test/rayQuery-global.rgen new file mode 100644 index 0000000000..3a57e74358 --- /dev/null +++ b/Test/rayQuery-global.rgen @@ -0,0 +1,31 @@ +#version 460 +#extension GL_EXT_ray_query : enable +#extension GL_EXT_ray_flags_primitive_culling : enable + +layout(binding = 1, set = 0) uniform accelerationStructureEXT rtas; + +rayQueryEXT rqGlobal; + +void otherWrapper(rayQueryEXT rq) { + rayQueryProceedEXT(rq); + rayQueryProceedEXT(rqGlobal); +} + +void wrapper(rayQueryEXT rq) { + rayQueryEXT rq2; + rayQueryProceedEXT(rq); + rayQueryProceedEXT(rqGlobal); + otherWrapper(rq); + otherWrapper(rq2); + otherWrapper(rqGlobal); +} + +void main() { + rayQueryInitializeEXT(rqGlobal, rtas, gl_RayFlagsNoneEXT, 0xFF, vec3(0,0,0), 0.0, vec3(1,0,0), 1.0); + wrapper(rqGlobal); + otherWrapper(rqGlobal); + rayQueryEXT rq2; + rayQueryInitializeEXT(rq2, rtas, gl_RayFlagsNoneEXT, 0xFF, vec3(0,0,0), 0.0, vec3(1,0,0), 1.0); + wrapper(rq2); + otherWrapper(rq2); +} diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit index ee7d9c7a42..871f8fea80 100644 --- a/Test/spv.ext.AnyHitShader.rahit +++ b/Test/spv.ext.AnyHitShader.rahit @@ -1,5 +1,6 @@ #version 460 #extension GL_EXT_ray_tracing : enable +#extension GL_KHR_shader_subgroup_basic : enable layout(location = 1) rayPayloadInEXT vec4 incomingPayload; void main() { @@ -22,8 +23,10 @@ void main() mat3x4 v16 = gl_ObjectToWorld3x4EXT; mat3x4 v17 = gl_WorldToObject3x4EXT; incomingPayload = vec4(0.5f); - if (v2 == 1) - ignoreIntersectionEXT(); - else - terminateRayEXT(); + if (v2 == 1) { + ignoreIntersectionEXT; + v0.x++; + } + incomingPayload.x += float(gl_SubgroupSize); + terminateRayEXT; } diff --git a/Test/spv.ext.ClosestHitShader_Errors.rchit b/Test/spv.ext.ClosestHitShader_Errors.rchit index 05e05fe956..6416f1ffb1 100644 --- a/Test/spv.ext.ClosestHitShader_Errors.rchit +++ b/Test/spv.ext.ClosestHitShader_Errors.rchit @@ -2,12 +2,14 @@ #extension GL_EXT_ray_tracing : enable hitAttributeEXT vec4 payload; layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; - +layout(location = 2) rayPayloadEXT vec4 payload0; +layout(location = 2) rayPayloadInEXT block { vec4 data; }; // ERROR : location already used void main() { payload.x = 1.0f; // ERROR, cannot write to hitattributeEXT in stage reportIntersectionEXT(1.0, 1U); // ERROR, unsupported builtin in stage - terminateRayEXT(); - ignoreIntersectionEXT(); + terminateRayEXT; + ignoreIntersectionEXT; bool e1 = gl_IncomingRayFlagsEXT == gl_RayFlagsSkipAABBEXT; + traceRayEXT(accEXT, 0, 0, 0, 0, 0, vec3(0.0), 0.0, vec3(1.0), 1.0, 0); //ERROR no payload variable with location = 0 } diff --git a/Test/spv.ext.ClosestHitShader_Subgroup.rchit b/Test/spv.ext.ClosestHitShader_Subgroup.rchit new file mode 100644 index 0000000000..ce2091a0b3 --- /dev/null +++ b/Test/spv.ext.ClosestHitShader_Subgroup.rchit @@ -0,0 +1,16 @@ +#version 460 +#pragma use_vulkan_memory_model +#extension GL_EXT_ray_tracing : enable +#extension GL_NV_shader_sm_builtins : enable +#extension GL_KHR_shader_subgroup_ballot : enable +#extension GL_ARB_shader_ballot : enable +#extension GL_NV_shader_sm_builtins : enable +layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; +layout(location = 1) rayPayloadInEXT vec4 incomingPayload; +void main() +{ + traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); + incomingPayload.x = float(gl_SubgroupInvocationID) + float(gl_SubGroupGeMaskARB) + + float(gl_SubgroupGtMask) + float(gl_SubgroupLeMask) + + float(gl_SubGroupLtMaskARB) + float(gl_SMIDNV); +} diff --git a/Test/spv.ext.MissShader.rmiss b/Test/spv.ext.MissShader.rmiss index e77433480a..982bd84078 100644 --- a/Test/spv.ext.MissShader.rmiss +++ b/Test/spv.ext.MissShader.rmiss @@ -1,5 +1,9 @@ #version 460 #extension GL_EXT_ray_tracing : enable +#extension GL_NV_shader_sm_builtins : enable +#extension GL_KHR_shader_subgroup_ballot : enable +#extension GL_ARB_shader_ballot : enable +#extension GL_NV_shader_sm_builtins : enable layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; layout(location = 0) rayPayloadEXT vec4 localPayload; layout(location = 1) rayPayloadInEXT vec4 incomingPayload; @@ -12,4 +16,5 @@ void main() float v4 = gl_RayTminEXT; float v5 = gl_RayTmaxEXT; traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); + incomingPayload.x = float(gl_SubGroupSizeARB) + float(gl_SubgroupEqMask) + float(gl_WarpIDNV); } diff --git a/Test/spv.ext.MissShader_Errors.rmiss b/Test/spv.ext.MissShader_Errors.rmiss index 2391211a55..c921f2318e 100644 --- a/Test/spv.ext.MissShader_Errors.rmiss +++ b/Test/spv.ext.MissShader_Errors.rmiss @@ -11,6 +11,6 @@ void main() float e12 = gl_HitTEXT; // ERROR, unsupported builtin in stage float e13 = gl_HitKindEXT; // ERROR, unsupported builtin in stage reportIntersectionEXT(1.0, 1U); // ERROR, unsupported builtin in stage - ignoreIntersectionEXT(); // ERROR, unsupported builtin in stage - terminateRayEXT(); // ERROR, unsupported builtin in stage + ignoreIntersectionEXT; // ERROR, unsupported in stage + terminateRayEXT; // ERROR, unsupported in stage } diff --git a/Test/spv.ext.RayCallable_Errors.rcall b/Test/spv.ext.RayCallable_Errors.rcall index d35672e926..660ea751c0 100644 --- a/Test/spv.ext.RayCallable_Errors.rcall +++ b/Test/spv.ext.RayCallable_Errors.rcall @@ -3,7 +3,8 @@ hitAttributeEXT vec4 hitattr; // ERROR, hitattributeEXT unsupported in this stage rayPayloadEXT vec4 payload; // ERROR, rayPayloadEXT unsupported in this stage rayPayloadInEXT vec4 payloadIn; // ERROR, rayPayloadInEXT unsupported in this stage - +layout(location = 0) callableDataEXT vec4 cd0; +layout(location = 0) callableDataEXT float cd1; // ERROR, location already used void main() { int e0 = gl_PrimitiveID; // ERROR, unsupported builtin in stage @@ -21,6 +22,7 @@ void main() float e13 = gl_HitKindEXT; // ERROR, unsupported builtin in stage uint curFlags = gl_IncomingRayFlagsEXT; // ERROR, unsupported builtin in stage reportIntersectionEXT(1.0, 1U); // ERROR, unsupported builtin in stage - ignoreIntersectionEXT(); // ERROR, unsupported builtin in stage - terminateRayEXT(); // ERROR, unsupported builtin in stage + ignoreIntersectionEXT; // ERROR, unsupported in stage + terminateRayEXT; // ERROR, unsupported in stage + executeCallableEXT(1,1); // ERROR, no callable data with location 1 } diff --git a/Test/spv.ext.RayConstants.rgen b/Test/spv.ext.RayConstants.rgen index 73cb0c183a..8e681bac8e 100644 --- a/Test/spv.ext.RayConstants.rgen +++ b/Test/spv.ext.RayConstants.rgen @@ -1,7 +1,7 @@ #version 460 #extension GL_EXT_ray_tracing : enable layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; -layout(location = 0) rayPayloadEXT vec4 payload; +layout(location = 1) rayPayloadEXT vec4 payload; void main() { const uint rayFlags = gl_RayFlagsNoneEXT | gl_RayFlagsOpaqueEXT | diff --git a/Test/spv.ext.RayGenSBTlayout.rgen b/Test/spv.ext.RayGenSBTlayout.rgen new file mode 100644 index 0000000000..a5fa2b63fe --- /dev/null +++ b/Test/spv.ext.RayGenSBTlayout.rgen @@ -0,0 +1,28 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_ARB_gpu_shader_int64 : enable +layout(location = 1) rayPayloadEXT vec4 payload; +// should get std430 layout +layout(shaderRecordEXT) buffer block +{ + vec3 dir; + vec3 origin; + int i; + uvec2 aHandle32; + uint64_t aHandle64; + vec2 arr2[2]; + float a; + vec3 arr3[2]; + float packme; + vec2 b; + float c; +}; +void main() +{ + uint lx = gl_LaunchIDEXT.x; + uint ly = gl_LaunchIDEXT.y; + uint sx = gl_LaunchSizeEXT.x; + uint sy = gl_LaunchSizeEXT.y; + traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); + traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); +} diff --git a/Test/spv.ext.RayGenSBTlayout140.rgen b/Test/spv.ext.RayGenSBTlayout140.rgen new file mode 100644 index 0000000000..7d673a82c5 --- /dev/null +++ b/Test/spv.ext.RayGenSBTlayout140.rgen @@ -0,0 +1,27 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_ARB_gpu_shader_int64 : enable +layout(location = 1) rayPayloadEXT vec4 payload; +layout(shaderRecordEXT, std140) buffer block +{ + vec3 dir; + vec3 origin; + int i; + uvec2 aHandle32; + uint64_t aHandle64; + vec2 arr[2]; + float a; + vec3 arr3[2]; + float packme; + vec2 b; + float c; +}; +void main() +{ + uint lx = gl_LaunchIDEXT.x; + uint ly = gl_LaunchIDEXT.y; + uint sx = gl_LaunchSizeEXT.x; + uint sy = gl_LaunchSizeEXT.y; + traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); + traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); +} diff --git a/Test/spv.ext.RayGenSBTlayout430.rgen b/Test/spv.ext.RayGenSBTlayout430.rgen new file mode 100644 index 0000000000..bd308b453c --- /dev/null +++ b/Test/spv.ext.RayGenSBTlayout430.rgen @@ -0,0 +1,27 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_ARB_gpu_shader_int64 : enable +layout(location = 1) rayPayloadEXT vec4 payload; +layout(shaderRecordEXT, std430) buffer block +{ + vec3 dir; + vec3 origin; + int i; + uvec2 aHandle32; + uint64_t aHandle64; + vec2 arr[2]; + float a; + vec3 arr3[2]; + float packme; + vec2 b; + float c; +}; +void main() +{ + uint lx = gl_LaunchIDEXT.x; + uint ly = gl_LaunchIDEXT.y; + uint sx = gl_LaunchSizeEXT.x; + uint sy = gl_LaunchSizeEXT.y; + traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); + traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); +} diff --git a/Test/spv.ext.RayGenSBTlayoutscalar.rgen b/Test/spv.ext.RayGenSBTlayoutscalar.rgen new file mode 100644 index 0000000000..16bcb13e58 --- /dev/null +++ b/Test/spv.ext.RayGenSBTlayoutscalar.rgen @@ -0,0 +1,28 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_ARB_gpu_shader_int64 : enable +#extension GL_EXT_scalar_block_layout : enable +layout(location = 1) rayPayloadEXT vec4 payload; +layout(shaderRecordEXT, scalar) buffer block +{ + vec3 dir; + vec3 origin; + int i; + uvec2 aHandle32; + uint64_t aHandle64; + vec2 arr[2]; + float a; + vec3 arr3[2]; + float packme; + vec2 b; + float c; +}; +void main() +{ + uint lx = gl_LaunchIDEXT.x; + uint ly = gl_LaunchIDEXT.y; + uint sx = gl_LaunchSizeEXT.x; + uint sy = gl_LaunchSizeEXT.y; + traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); + traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); +} diff --git a/Test/spv.ext.RayGenShader.rgen b/Test/spv.ext.RayGenShader.rgen index 9fedf3a54b..e9eb2cbb90 100644 --- a/Test/spv.ext.RayGenShader.rgen +++ b/Test/spv.ext.RayGenShader.rgen @@ -4,7 +4,7 @@ layout(binding = 0) uniform accelerationStructureEXT accEXT0; layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1; // Unused layout(binding = 2, r32ui) shadercallcoherent uniform uimage2D imageu; -layout(location = 0) rayPayloadEXT vec4 payload; +layout(location = 1) rayPayloadEXT vec4 payload; layout(shaderRecordEXT) buffer block { vec3 dir; diff --git a/Test/spv.ext.RayGenShader11.rgen b/Test/spv.ext.RayGenShader11.rgen index 48170264dd..50853d49e5 100644 --- a/Test/spv.ext.RayGenShader11.rgen +++ b/Test/spv.ext.RayGenShader11.rgen @@ -1,7 +1,7 @@ #version 460 #extension GL_EXT_ray_tracing : enable layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; -layout(location = 0) rayPayloadEXT vec4 payload; +layout(location = 1) rayPayloadEXT vec4 payload; layout(shaderRecordEXT) buffer block { vec3 dir; diff --git a/Test/spv.ext.RayGenShaderArray.rgen b/Test/spv.ext.RayGenShaderArray.rgen index d3f99de22b..66286d9287 100644 --- a/Test/spv.ext.RayGenShaderArray.rgen +++ b/Test/spv.ext.RayGenShaderArray.rgen @@ -1,14 +1,17 @@ #version 460 #extension GL_EXT_ray_tracing : enable #extension GL_EXT_nonuniform_qualifier : enable +#extension GL_ARB_gpu_shader_int64 : enable layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT0[]; layout(binding = 1, set = 0) uniform accelerationStructureEXT accEXT1[2]; -layout(location = 0) rayPayloadEXT vec4 payload; +layout(location = 1) rayPayloadEXT vec4 payload; layout(shaderRecordEXT) buffer block { vec3 dir; vec3 origin; int i; + uvec2 aHandle32; + uint64_t aHandle64; }; void main() { @@ -19,4 +22,6 @@ void main() traceRayEXT(accEXT0[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); traceRayEXT(accEXT1[i], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); traceRayEXT(accEXT0[nonuniformEXT(i)], lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); + traceRayEXT(accelerationStructureEXT(aHandle32), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); + traceRayEXT(accelerationStructureEXT(aHandle64), lx, ly, sx, sy, 0u, origin, 0.5f, dir, 0.75f, 1); } diff --git a/Test/spv.ext.RayGenShader_Errors.rgen b/Test/spv.ext.RayGenShader_Errors.rgen index 349834242e..107df0f428 100644 --- a/Test/spv.ext.RayGenShader_Errors.rgen +++ b/Test/spv.ext.RayGenShader_Errors.rgen @@ -20,7 +20,7 @@ layout(shaderRecordEXT) buffer bblock4 { // ERROR, cannot ha }; void main() { - accelerationStructureEXT a = 0; + accelerationStructureEXT a = accelerationStructureEXT(c); int e0 = gl_PrimitiveID; // ERROR, unsupported builtin in stage int e1 = gl_InstanceID; // ERROR, unsupported builtin in stage int e3 = gl_InstanceCustomIndexEXT; // ERROR, unsupported builtin in stage @@ -36,7 +36,7 @@ void main() float e13 = gl_HitKindEXT; // ERROR, unsupported builtin in stage int e14 = gl_RayFlagsSkipAABBEXT; // ERROR, unsupported builtin in stage reportIntersectionEXT(1.0, 1U); // ERROR, unsupported builtin in stage - ignoreIntersectionEXT(); // ERROR, unsupported builtin in stage - terminateRayEXT(); // ERROR, unsupported builtin in stage - d = 1.0f; // ERROR, can't modify shaderRecordEXT block + ignoreIntersectionEXT; // ERROR, unsupported builtin in stage + terminateRayEXT; // ERROR, unsupported builtin in stage + d = 1.0f; // ERROR, can't modify shaderRecordEXT block } diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index a3043f8ab0..696daf6dfa 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -757,6 +757,12 @@ class TQualifier { bool isPerPrimitive() const { return perPrimitiveNV; } bool isPerView() const { return perViewNV; } bool isTaskMemory() const { return perTaskNV; } + bool isAnyPayload() const { + return storage == EvqPayload || storage == EvqPayloadIn; + } + bool isAnyCallable() const { + return storage == EvqCallableData || storage == EvqCallableDataIn; + } // True if this type of IO is supposed to be arrayed with extra level for per-vertex data bool isArrayedIo(EShLanguage language) const diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index f0411ebb1e..19cd32e9a8 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -280,6 +280,12 @@ enum TOperator { EOpConvUvec2ToPtr, EOpConvPtrToUvec2, + // uint64_t -> accelerationStructureEXT + EOpConvUint64ToAccStruct, + + // uvec2 -> accelerationStructureEXT + EOpConvUvec2ToAccStruct, + // // binary operations // @@ -631,6 +637,8 @@ enum TOperator { EOpKill, // Fragment only EOpTerminateInvocation, // Fragment only EOpDemote, // Fragment only + EOpTerminateRayKHR, // Any-hit only + EOpIgnoreIntersectionKHR, // Any-hit only EOpReturn, EOpBreak, EOpContinue, @@ -752,6 +760,7 @@ enum TOperator { EOpConstructNonuniform, // expected to be transformed away, not present in final AST EOpConstructReference, EOpConstructCooperativeMatrix, + EOpConstructAccStruct, EOpConstructGuardEnd, // @@ -912,11 +921,13 @@ enum TOperator { EOpAverageRounded, EOpMul32x16, - EOpTrace, + EOpTraceNV, + EOpTraceKHR, EOpReportIntersection, - EOpIgnoreIntersection, - EOpTerminateRay, - EOpExecuteCallable, + EOpIgnoreIntersectionNV, + EOpTerminateRayNV, + EOpExecuteCallableNV, + EOpExecuteCallableKHR, EOpWritePackedPrimitiveIndices4x8NV, // diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index d073f606d5..a5ef6ccaf6 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -4421,9 +4421,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); stageBuiltins[EShLangAnyHit].append( "void ignoreIntersectionNV();" - "void ignoreIntersectionEXT();" "void terminateRayNV();" - "void terminateRayEXT();" "\n"); stageBuiltins[EShLangClosestHit].append( "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" @@ -5454,6 +5452,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint64_t gl_SubGroupLeMaskARB;" "in uint64_t gl_SubGroupLtMaskARB;" "\n"; + const char* rtBallotDecls = + "uniform volatile uint gl_SubGroupSizeARB;" + "in volatile uint gl_SubGroupInvocationARB;" + "in volatile uint64_t gl_SubGroupEqMaskARB;" + "in volatile uint64_t gl_SubGroupGeMaskARB;" + "in volatile uint64_t gl_SubGroupGtMaskARB;" + "in volatile uint64_t gl_SubGroupLeMaskARB;" + "in volatile uint64_t gl_SubGroupLtMaskARB;" + "\n"; const char* fragmentBallotDecls = "uniform uint gl_SubGroupSizeARB;" "flat in uint gl_SubGroupInvocationARB;" @@ -5471,6 +5478,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangFragment] .append(fragmentBallotDecls); stageBuiltins[EShLangMeshNV] .append(ballotDecls); stageBuiltins[EShLangTaskNV] .append(ballotDecls); + stageBuiltins[EShLangRayGen] .append(rtBallotDecls); + stageBuiltins[EShLangIntersect] .append(rtBallotDecls); + // No volatile qualifier on these builtins in any-hit + stageBuiltins[EShLangAnyHit] .append(ballotDecls); + stageBuiltins[EShLangClosestHit] .append(rtBallotDecls); + stageBuiltins[EShLangMiss] .append(rtBallotDecls); + stageBuiltins[EShLangCallable] .append(rtBallotDecls); } // GL_KHR_shader_subgroup @@ -5508,6 +5522,21 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in highp uint gl_NumSubgroups;" "in highp uint gl_SubgroupID;" "\n"; + // These builtins are volatile for RT stages + const char* rtSubgroupDecls = + "in mediump volatile uint gl_SubgroupSize;" + "in mediump volatile uint gl_SubgroupInvocationID;" + "in highp volatile uvec4 gl_SubgroupEqMask;" + "in highp volatile uvec4 gl_SubgroupGeMask;" + "in highp volatile uvec4 gl_SubgroupGtMask;" + "in highp volatile uvec4 gl_SubgroupLeMask;" + "in highp volatile uvec4 gl_SubgroupLtMask;" + // GL_NV_shader_sm_builtins + "in highp uint gl_WarpsPerSMNV;" + "in highp uint gl_SMCountNV;" + "in highp volatile uint gl_WarpIDNV;" + "in highp volatile uint gl_SMIDNV;" + "\n"; stageBuiltins[EShLangVertex] .append(subgroupDecls); stageBuiltins[EShLangTessControl] .append(subgroupDecls); @@ -5520,12 +5549,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangMeshNV] .append(computeSubgroupDecls); stageBuiltins[EShLangTaskNV] .append(subgroupDecls); stageBuiltins[EShLangTaskNV] .append(computeSubgroupDecls); - stageBuiltins[EShLangRayGen] .append(subgroupDecls); - stageBuiltins[EShLangIntersect] .append(subgroupDecls); + stageBuiltins[EShLangRayGen] .append(rtSubgroupDecls); + stageBuiltins[EShLangIntersect] .append(rtSubgroupDecls); + // No volatile qualifier on these builtins in any-hit stageBuiltins[EShLangAnyHit] .append(subgroupDecls); - stageBuiltins[EShLangClosestHit] .append(subgroupDecls); - stageBuiltins[EShLangMiss] .append(subgroupDecls); - stageBuiltins[EShLangCallable] .append(subgroupDecls); + stageBuiltins[EShLangClosestHit] .append(rtSubgroupDecls); + stageBuiltins[EShLangMiss] .append(rtSubgroupDecls); + stageBuiltins[EShLangCallable] .append(rtSubgroupDecls); } // GL_NV_ray_tracing/GL_EXT_ray_tracing @@ -5593,7 +5623,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in float gl_RayTminNV;" "in float gl_RayTminEXT;" "in float gl_RayTmaxNV;" - "in float gl_RayTmaxEXT;" + "in volatile float gl_RayTmaxEXT;" "in mat4x3 gl_ObjectToWorldNV;" "in mat4x3 gl_ObjectToWorldEXT;" "in mat3x4 gl_ObjectToWorld3x4EXT;" @@ -8454,9 +8484,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("reportIntersectionNV", 1, &E_GL_NV_ray_tracing); symbolTable.setFunctionExtensions("reportIntersectionEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setFunctionExtensions("ignoreIntersectionNV", 1, &E_GL_NV_ray_tracing); - symbolTable.setFunctionExtensions("ignoreIntersectionEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setFunctionExtensions("terminateRayNV", 1, &E_GL_NV_ray_tracing); - symbolTable.setFunctionExtensions("terminateRayEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setFunctionExtensions("executeCallableNV", 1, &E_GL_NV_ray_tracing); symbolTable.setFunctionExtensions("executeCallableEXT", 1, &E_GL_EXT_ray_tracing); @@ -9286,10 +9314,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion case EShLangClosestHit: case EShLangMiss: if (profile != EEsProfile && version >= 460) { - symbolTable.relateToOperator("traceNV", EOpTrace); - symbolTable.relateToOperator("traceRayEXT", EOpTrace); - symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable); - symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable); + symbolTable.relateToOperator("traceNV", EOpTraceNV); + symbolTable.relateToOperator("traceRayEXT", EOpTraceKHR); + symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV); + symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR); } break; case EShLangIntersect: @@ -9300,16 +9328,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion break; case EShLangAnyHit: if (profile != EEsProfile && version >= 460) { - symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersection); - symbolTable.relateToOperator("ignoreIntersectionEXT", EOpIgnoreIntersection); - symbolTable.relateToOperator("terminateRayNV", EOpTerminateRay); - symbolTable.relateToOperator("terminateRayEXT", EOpTerminateRay); + symbolTable.relateToOperator("ignoreIntersectionNV", EOpIgnoreIntersectionNV); + symbolTable.relateToOperator("terminateRayNV", EOpTerminateRayNV); } break; case EShLangCallable: if (profile != EEsProfile && version >= 460) { - symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallable); - symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallable); + symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV); + symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR); } break; case EShLangMeshNV: diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index b8c220d781..f6172a2bf7 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -2298,6 +2298,10 @@ TOperator TIntermediate::mapTypeToConstructorOp(const TType& type) const case EbtReference: op = EOpConstructReference; break; + + case EbtAccStruct: + op = EOpConstructAccStruct; + break; #endif default: break; diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 63fb957c0b..9c42a204f7 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2076,14 +2076,32 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } #ifndef GLSLANG_WEB - case EOpTrace: + case EOpTraceNV: if (!(*argp)[10]->getAsConstantUnion()) - error(loc, "argument must be compile-time constant", "payload number", ""); + error(loc, "argument must be compile-time constant", "payload number", "a"); break; - case EOpExecuteCallable: + case EOpTraceKHR: + if (!(*argp)[10]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "payload number", "a"); + else { + unsigned int location = (*argp)[10]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (intermediate.checkLocationRT(0, location) < 0) + error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location); + } + break; + case EOpExecuteCallableNV: if (!(*argp)[1]->getAsConstantUnion()) error(loc, "argument must be compile-time constant", "callable data number", ""); break; + case EOpExecuteCallableKHR: + if (!(*argp)[1]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "callable data number", ""); + else { + unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); + if (intermediate.checkLocationRT(1, location) < 0) + error(loc, "with layout(location =", "no callableDataEXT/callableDataInEXT declared", "%d)", location); + } + break; case EOpRayQueryGetIntersectionType: case EOpRayQueryGetIntersectionT: @@ -3440,7 +3458,7 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali if (! symbolTable.atGlobalLevel()) return; - if (!(publicType.userDef && publicType.userDef->isReference())) { + if (!(publicType.userDef && publicType.userDef->isReference()) && !parsingBuiltins) { if (qualifier.isMemoryQualifierImageAndSSBOOnly() && ! publicType.isImage() && publicType.qualifier.storage != EvqBuffer) { error(loc, "memory qualifiers cannot be used on this type", "", ""); } else if (qualifier.isMemory() && (publicType.basicType != EbtSampler) && !publicType.qualifier.isUniformOrBuffer()) { @@ -7460,6 +7478,19 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T return node; + case EOpConstructAccStruct: + if ((node->getType().isScalar() && node->getType().getBasicType() == EbtUint64)) { + // construct acceleration structure from uint64 + requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uint64_t conversion to acclerationStructureEXT"); + return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToAccStruct, true, node, + type); + } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint && node->getVectorSize() == 2) { + // construct acceleration structure from uint64 + requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uvec2 conversion to accelerationStructureEXT"); + return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToAccStruct, true, node, + type); + } else + return nullptr; #endif // GLSLANG_WEB default: diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index bcf4047e75..78c8a365d7 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -366,6 +366,8 @@ void TScanContext::fillInKeywordMap() (*KeywordMap)["else"] = ELSE; (*KeywordMap)["discard"] = DISCARD; (*KeywordMap)["terminateInvocation"] = TERMINATE_INVOCATION; + (*KeywordMap)["terminateRayEXT"] = TERMINATE_RAY; + (*KeywordMap)["ignoreIntersectionEXT"] = IGNORE_INTERSECTION; (*KeywordMap)["return"] = RETURN; (*KeywordMap)["void"] = VOID; (*KeywordMap)["bool"] = BOOL; @@ -942,6 +944,12 @@ int TScanContext::tokenizeIdentifier() return identifierOrType(); return keyword; + case TERMINATE_RAY: + case IGNORE_INTERSECTION: + if (!parseContext.extensionTurnedOn(E_GL_EXT_ray_tracing)) + return identifierOrType(); + return keyword; + case BUFFER: afterBuffer = true; if ((parseContext.isEsProfile() && parseContext.version < 310) || diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 5b0adb0fbb..8884b2681b 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -294,6 +294,7 @@ GLSLANG_WEB_EXCLUDE_OFF %token STRUCT VOID WHILE %token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT %token TERMINATE_INVOCATION +%token TERMINATE_RAY IGNORE_INTERSECTION %token UNIFORM SHARED BUFFER %token FLAT SMOOTH LAYOUT @@ -3932,6 +3933,16 @@ jump_statement parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation"); $$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc); } +GLSLANG_WEB_EXCLUDE_ON + | TERMINATE_RAY SEMICOLON { + parseContext.requireStage($1.loc, EShLangAnyHit, "terminateRayEXT"); + $$ = parseContext.intermediate.addBranch(EOpTerminateRayKHR, $1.loc); + } + | IGNORE_INTERSECTION SEMICOLON { + parseContext.requireStage($1.loc, EShLangAnyHit, "ignoreIntersectionEXT"); + $$ = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, $1.loc); + } +GLSLANG_WEB_EXCLUDE_OFF ; // Grammar Note: No 'goto'. Gotos are not supported. diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 4093b7d894..2681d48f79 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -294,6 +294,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token STRUCT VOID WHILE %token BREAK CONTINUE DO ELSE FOR IF DISCARD RETURN SWITCH CASE DEFAULT %token TERMINATE_INVOCATION +%token TERMINATE_RAY IGNORE_INTERSECTION %token UNIFORM SHARED BUFFER %token FLAT SMOOTH LAYOUT @@ -3932,6 +3933,16 @@ jump_statement parseContext.requireStage($1.loc, EShLangFragment, "terminateInvocation"); $$ = parseContext.intermediate.addBranch(EOpTerminateInvocation, $1.loc); } + + | TERMINATE_RAY SEMICOLON { + parseContext.requireStage($1.loc, EShLangAnyHit, "terminateRayEXT"); + $$ = parseContext.intermediate.addBranch(EOpTerminateRayKHR, $1.loc); + } + | IGNORE_INTERSECTION SEMICOLON { + parseContext.requireStage($1.loc, EShLangAnyHit, "ignoreIntersectionEXT"); + $$ = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, $1.loc); + } + ; // Grammar Note: No 'goto'. Gotos are not supported. diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index ad7deb3096..feecc98200 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.7.2. */ +/* A Bison parser, made by GNU Bison 3.7.4. */ /* Bison implementation for Yacc-like parsers in C @@ -45,11 +45,11 @@ define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ -/* Identify Bison output. */ -#define YYBISON 1 +/* Identify Bison output, and Bison version. */ +#define YYBISON 30704 -/* Bison version. */ -#define YYBISON_VERSION "3.7.2" +/* Bison version string. */ +#define YYBISON_VERSION "3.7.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -67,7 +67,7 @@ /* First part of user prologue. */ -#line 69 "glslang/MachineIndependent/glslang.y" +#line 69 "MachineIndependent/glslang.y" /* Based on: @@ -93,7 +93,7 @@ Jutta Degener, 1995 using namespace glslang; -#line 97 "glslang/MachineIndependent/glslang_tab.cpp" +#line 97 "MachineIndependent/glslang_tab.cpp" # ifndef YY_CAST # ifdef __cplusplus @@ -517,170 +517,172 @@ enum yysymbol_kind_t YYSYMBOL_CASE = 393, /* CASE */ YYSYMBOL_DEFAULT = 394, /* DEFAULT */ YYSYMBOL_TERMINATE_INVOCATION = 395, /* TERMINATE_INVOCATION */ - YYSYMBOL_UNIFORM = 396, /* UNIFORM */ - YYSYMBOL_SHARED = 397, /* SHARED */ - YYSYMBOL_BUFFER = 398, /* BUFFER */ - YYSYMBOL_FLAT = 399, /* FLAT */ - YYSYMBOL_SMOOTH = 400, /* SMOOTH */ - YYSYMBOL_LAYOUT = 401, /* LAYOUT */ - YYSYMBOL_DOUBLECONSTANT = 402, /* DOUBLECONSTANT */ - YYSYMBOL_INT16CONSTANT = 403, /* INT16CONSTANT */ - YYSYMBOL_UINT16CONSTANT = 404, /* UINT16CONSTANT */ - YYSYMBOL_FLOAT16CONSTANT = 405, /* FLOAT16CONSTANT */ - YYSYMBOL_INT32CONSTANT = 406, /* INT32CONSTANT */ - YYSYMBOL_UINT32CONSTANT = 407, /* UINT32CONSTANT */ - YYSYMBOL_INT64CONSTANT = 408, /* INT64CONSTANT */ - YYSYMBOL_UINT64CONSTANT = 409, /* UINT64CONSTANT */ - YYSYMBOL_SUBROUTINE = 410, /* SUBROUTINE */ - YYSYMBOL_DEMOTE = 411, /* DEMOTE */ - YYSYMBOL_PAYLOADNV = 412, /* PAYLOADNV */ - YYSYMBOL_PAYLOADINNV = 413, /* PAYLOADINNV */ - YYSYMBOL_HITATTRNV = 414, /* HITATTRNV */ - YYSYMBOL_CALLDATANV = 415, /* CALLDATANV */ - YYSYMBOL_CALLDATAINNV = 416, /* CALLDATAINNV */ - YYSYMBOL_PAYLOADEXT = 417, /* PAYLOADEXT */ - YYSYMBOL_PAYLOADINEXT = 418, /* PAYLOADINEXT */ - YYSYMBOL_HITATTREXT = 419, /* HITATTREXT */ - YYSYMBOL_CALLDATAEXT = 420, /* CALLDATAEXT */ - YYSYMBOL_CALLDATAINEXT = 421, /* CALLDATAINEXT */ - YYSYMBOL_PATCH = 422, /* PATCH */ - YYSYMBOL_SAMPLE = 423, /* SAMPLE */ - YYSYMBOL_NONUNIFORM = 424, /* NONUNIFORM */ - YYSYMBOL_COHERENT = 425, /* COHERENT */ - YYSYMBOL_VOLATILE = 426, /* VOLATILE */ - YYSYMBOL_RESTRICT = 427, /* RESTRICT */ - YYSYMBOL_READONLY = 428, /* READONLY */ - YYSYMBOL_WRITEONLY = 429, /* WRITEONLY */ - YYSYMBOL_DEVICECOHERENT = 430, /* DEVICECOHERENT */ - YYSYMBOL_QUEUEFAMILYCOHERENT = 431, /* QUEUEFAMILYCOHERENT */ - YYSYMBOL_WORKGROUPCOHERENT = 432, /* WORKGROUPCOHERENT */ - YYSYMBOL_SUBGROUPCOHERENT = 433, /* SUBGROUPCOHERENT */ - YYSYMBOL_NONPRIVATE = 434, /* NONPRIVATE */ - YYSYMBOL_SHADERCALLCOHERENT = 435, /* SHADERCALLCOHERENT */ - YYSYMBOL_NOPERSPECTIVE = 436, /* NOPERSPECTIVE */ - YYSYMBOL_EXPLICITINTERPAMD = 437, /* EXPLICITINTERPAMD */ - YYSYMBOL_PERVERTEXNV = 438, /* PERVERTEXNV */ - YYSYMBOL_PERPRIMITIVENV = 439, /* PERPRIMITIVENV */ - YYSYMBOL_PERVIEWNV = 440, /* PERVIEWNV */ - YYSYMBOL_PERTASKNV = 441, /* PERTASKNV */ - YYSYMBOL_PRECISE = 442, /* PRECISE */ - YYSYMBOL_YYACCEPT = 443, /* $accept */ - YYSYMBOL_variable_identifier = 444, /* variable_identifier */ - YYSYMBOL_primary_expression = 445, /* primary_expression */ - YYSYMBOL_postfix_expression = 446, /* postfix_expression */ - YYSYMBOL_integer_expression = 447, /* integer_expression */ - YYSYMBOL_function_call = 448, /* function_call */ - YYSYMBOL_function_call_or_method = 449, /* function_call_or_method */ - YYSYMBOL_function_call_generic = 450, /* function_call_generic */ - YYSYMBOL_function_call_header_no_parameters = 451, /* function_call_header_no_parameters */ - YYSYMBOL_function_call_header_with_parameters = 452, /* function_call_header_with_parameters */ - YYSYMBOL_function_call_header = 453, /* function_call_header */ - YYSYMBOL_function_identifier = 454, /* function_identifier */ - YYSYMBOL_unary_expression = 455, /* unary_expression */ - YYSYMBOL_unary_operator = 456, /* unary_operator */ - YYSYMBOL_multiplicative_expression = 457, /* multiplicative_expression */ - YYSYMBOL_additive_expression = 458, /* additive_expression */ - YYSYMBOL_shift_expression = 459, /* shift_expression */ - YYSYMBOL_relational_expression = 460, /* relational_expression */ - YYSYMBOL_equality_expression = 461, /* equality_expression */ - YYSYMBOL_and_expression = 462, /* and_expression */ - YYSYMBOL_exclusive_or_expression = 463, /* exclusive_or_expression */ - YYSYMBOL_inclusive_or_expression = 464, /* inclusive_or_expression */ - YYSYMBOL_logical_and_expression = 465, /* logical_and_expression */ - YYSYMBOL_logical_xor_expression = 466, /* logical_xor_expression */ - YYSYMBOL_logical_or_expression = 467, /* logical_or_expression */ - YYSYMBOL_conditional_expression = 468, /* conditional_expression */ - YYSYMBOL_469_1 = 469, /* $@1 */ - YYSYMBOL_assignment_expression = 470, /* assignment_expression */ - YYSYMBOL_assignment_operator = 471, /* assignment_operator */ - YYSYMBOL_expression = 472, /* expression */ - YYSYMBOL_constant_expression = 473, /* constant_expression */ - YYSYMBOL_declaration = 474, /* declaration */ - YYSYMBOL_block_structure = 475, /* block_structure */ - YYSYMBOL_476_2 = 476, /* $@2 */ - YYSYMBOL_identifier_list = 477, /* identifier_list */ - YYSYMBOL_function_prototype = 478, /* function_prototype */ - YYSYMBOL_function_declarator = 479, /* function_declarator */ - YYSYMBOL_function_header_with_parameters = 480, /* function_header_with_parameters */ - YYSYMBOL_function_header = 481, /* function_header */ - YYSYMBOL_parameter_declarator = 482, /* parameter_declarator */ - YYSYMBOL_parameter_declaration = 483, /* parameter_declaration */ - YYSYMBOL_parameter_type_specifier = 484, /* parameter_type_specifier */ - YYSYMBOL_init_declarator_list = 485, /* init_declarator_list */ - YYSYMBOL_single_declaration = 486, /* single_declaration */ - YYSYMBOL_fully_specified_type = 487, /* fully_specified_type */ - YYSYMBOL_invariant_qualifier = 488, /* invariant_qualifier */ - YYSYMBOL_interpolation_qualifier = 489, /* interpolation_qualifier */ - YYSYMBOL_layout_qualifier = 490, /* layout_qualifier */ - YYSYMBOL_layout_qualifier_id_list = 491, /* layout_qualifier_id_list */ - YYSYMBOL_layout_qualifier_id = 492, /* layout_qualifier_id */ - YYSYMBOL_precise_qualifier = 493, /* precise_qualifier */ - YYSYMBOL_type_qualifier = 494, /* type_qualifier */ - YYSYMBOL_single_type_qualifier = 495, /* single_type_qualifier */ - YYSYMBOL_storage_qualifier = 496, /* storage_qualifier */ - YYSYMBOL_non_uniform_qualifier = 497, /* non_uniform_qualifier */ - YYSYMBOL_type_name_list = 498, /* type_name_list */ - YYSYMBOL_type_specifier = 499, /* type_specifier */ - YYSYMBOL_array_specifier = 500, /* array_specifier */ - YYSYMBOL_type_parameter_specifier_opt = 501, /* type_parameter_specifier_opt */ - YYSYMBOL_type_parameter_specifier = 502, /* type_parameter_specifier */ - YYSYMBOL_type_parameter_specifier_list = 503, /* type_parameter_specifier_list */ - YYSYMBOL_type_specifier_nonarray = 504, /* type_specifier_nonarray */ - YYSYMBOL_precision_qualifier = 505, /* precision_qualifier */ - YYSYMBOL_struct_specifier = 506, /* struct_specifier */ - YYSYMBOL_507_3 = 507, /* $@3 */ - YYSYMBOL_508_4 = 508, /* $@4 */ - YYSYMBOL_struct_declaration_list = 509, /* struct_declaration_list */ - YYSYMBOL_struct_declaration = 510, /* struct_declaration */ - YYSYMBOL_struct_declarator_list = 511, /* struct_declarator_list */ - YYSYMBOL_struct_declarator = 512, /* struct_declarator */ - YYSYMBOL_initializer = 513, /* initializer */ - YYSYMBOL_initializer_list = 514, /* initializer_list */ - YYSYMBOL_declaration_statement = 515, /* declaration_statement */ - YYSYMBOL_statement = 516, /* statement */ - YYSYMBOL_simple_statement = 517, /* simple_statement */ - YYSYMBOL_demote_statement = 518, /* demote_statement */ - YYSYMBOL_compound_statement = 519, /* compound_statement */ - YYSYMBOL_520_5 = 520, /* $@5 */ - YYSYMBOL_521_6 = 521, /* $@6 */ - YYSYMBOL_statement_no_new_scope = 522, /* statement_no_new_scope */ - YYSYMBOL_statement_scoped = 523, /* statement_scoped */ - YYSYMBOL_524_7 = 524, /* $@7 */ - YYSYMBOL_525_8 = 525, /* $@8 */ - YYSYMBOL_compound_statement_no_new_scope = 526, /* compound_statement_no_new_scope */ - YYSYMBOL_statement_list = 527, /* statement_list */ - YYSYMBOL_expression_statement = 528, /* expression_statement */ - YYSYMBOL_selection_statement = 529, /* selection_statement */ - YYSYMBOL_selection_statement_nonattributed = 530, /* selection_statement_nonattributed */ - YYSYMBOL_selection_rest_statement = 531, /* selection_rest_statement */ - YYSYMBOL_condition = 532, /* condition */ - YYSYMBOL_switch_statement = 533, /* switch_statement */ - YYSYMBOL_switch_statement_nonattributed = 534, /* switch_statement_nonattributed */ - YYSYMBOL_535_9 = 535, /* $@9 */ - YYSYMBOL_switch_statement_list = 536, /* switch_statement_list */ - YYSYMBOL_case_label = 537, /* case_label */ - YYSYMBOL_iteration_statement = 538, /* iteration_statement */ - YYSYMBOL_iteration_statement_nonattributed = 539, /* iteration_statement_nonattributed */ - YYSYMBOL_540_10 = 540, /* $@10 */ - YYSYMBOL_541_11 = 541, /* $@11 */ - YYSYMBOL_542_12 = 542, /* $@12 */ - YYSYMBOL_for_init_statement = 543, /* for_init_statement */ - YYSYMBOL_conditionopt = 544, /* conditionopt */ - YYSYMBOL_for_rest_statement = 545, /* for_rest_statement */ - YYSYMBOL_jump_statement = 546, /* jump_statement */ - YYSYMBOL_translation_unit = 547, /* translation_unit */ - YYSYMBOL_external_declaration = 548, /* external_declaration */ - YYSYMBOL_function_definition = 549, /* function_definition */ - YYSYMBOL_550_13 = 550, /* $@13 */ - YYSYMBOL_attribute = 551, /* attribute */ - YYSYMBOL_attribute_list = 552, /* attribute_list */ - YYSYMBOL_single_attribute = 553 /* single_attribute */ + YYSYMBOL_TERMINATE_RAY = 396, /* TERMINATE_RAY */ + YYSYMBOL_IGNORE_INTERSECTION = 397, /* IGNORE_INTERSECTION */ + YYSYMBOL_UNIFORM = 398, /* UNIFORM */ + YYSYMBOL_SHARED = 399, /* SHARED */ + YYSYMBOL_BUFFER = 400, /* BUFFER */ + YYSYMBOL_FLAT = 401, /* FLAT */ + YYSYMBOL_SMOOTH = 402, /* SMOOTH */ + YYSYMBOL_LAYOUT = 403, /* LAYOUT */ + YYSYMBOL_DOUBLECONSTANT = 404, /* DOUBLECONSTANT */ + YYSYMBOL_INT16CONSTANT = 405, /* INT16CONSTANT */ + YYSYMBOL_UINT16CONSTANT = 406, /* UINT16CONSTANT */ + YYSYMBOL_FLOAT16CONSTANT = 407, /* FLOAT16CONSTANT */ + YYSYMBOL_INT32CONSTANT = 408, /* INT32CONSTANT */ + YYSYMBOL_UINT32CONSTANT = 409, /* UINT32CONSTANT */ + YYSYMBOL_INT64CONSTANT = 410, /* INT64CONSTANT */ + YYSYMBOL_UINT64CONSTANT = 411, /* UINT64CONSTANT */ + YYSYMBOL_SUBROUTINE = 412, /* SUBROUTINE */ + YYSYMBOL_DEMOTE = 413, /* DEMOTE */ + YYSYMBOL_PAYLOADNV = 414, /* PAYLOADNV */ + YYSYMBOL_PAYLOADINNV = 415, /* PAYLOADINNV */ + YYSYMBOL_HITATTRNV = 416, /* HITATTRNV */ + YYSYMBOL_CALLDATANV = 417, /* CALLDATANV */ + YYSYMBOL_CALLDATAINNV = 418, /* CALLDATAINNV */ + YYSYMBOL_PAYLOADEXT = 419, /* PAYLOADEXT */ + YYSYMBOL_PAYLOADINEXT = 420, /* PAYLOADINEXT */ + YYSYMBOL_HITATTREXT = 421, /* HITATTREXT */ + YYSYMBOL_CALLDATAEXT = 422, /* CALLDATAEXT */ + YYSYMBOL_CALLDATAINEXT = 423, /* CALLDATAINEXT */ + YYSYMBOL_PATCH = 424, /* PATCH */ + YYSYMBOL_SAMPLE = 425, /* SAMPLE */ + YYSYMBOL_NONUNIFORM = 426, /* NONUNIFORM */ + YYSYMBOL_COHERENT = 427, /* COHERENT */ + YYSYMBOL_VOLATILE = 428, /* VOLATILE */ + YYSYMBOL_RESTRICT = 429, /* RESTRICT */ + YYSYMBOL_READONLY = 430, /* READONLY */ + YYSYMBOL_WRITEONLY = 431, /* WRITEONLY */ + YYSYMBOL_DEVICECOHERENT = 432, /* DEVICECOHERENT */ + YYSYMBOL_QUEUEFAMILYCOHERENT = 433, /* QUEUEFAMILYCOHERENT */ + YYSYMBOL_WORKGROUPCOHERENT = 434, /* WORKGROUPCOHERENT */ + YYSYMBOL_SUBGROUPCOHERENT = 435, /* SUBGROUPCOHERENT */ + YYSYMBOL_NONPRIVATE = 436, /* NONPRIVATE */ + YYSYMBOL_SHADERCALLCOHERENT = 437, /* SHADERCALLCOHERENT */ + YYSYMBOL_NOPERSPECTIVE = 438, /* NOPERSPECTIVE */ + YYSYMBOL_EXPLICITINTERPAMD = 439, /* EXPLICITINTERPAMD */ + YYSYMBOL_PERVERTEXNV = 440, /* PERVERTEXNV */ + YYSYMBOL_PERPRIMITIVENV = 441, /* PERPRIMITIVENV */ + YYSYMBOL_PERVIEWNV = 442, /* PERVIEWNV */ + YYSYMBOL_PERTASKNV = 443, /* PERTASKNV */ + YYSYMBOL_PRECISE = 444, /* PRECISE */ + YYSYMBOL_YYACCEPT = 445, /* $accept */ + YYSYMBOL_variable_identifier = 446, /* variable_identifier */ + YYSYMBOL_primary_expression = 447, /* primary_expression */ + YYSYMBOL_postfix_expression = 448, /* postfix_expression */ + YYSYMBOL_integer_expression = 449, /* integer_expression */ + YYSYMBOL_function_call = 450, /* function_call */ + YYSYMBOL_function_call_or_method = 451, /* function_call_or_method */ + YYSYMBOL_function_call_generic = 452, /* function_call_generic */ + YYSYMBOL_function_call_header_no_parameters = 453, /* function_call_header_no_parameters */ + YYSYMBOL_function_call_header_with_parameters = 454, /* function_call_header_with_parameters */ + YYSYMBOL_function_call_header = 455, /* function_call_header */ + YYSYMBOL_function_identifier = 456, /* function_identifier */ + YYSYMBOL_unary_expression = 457, /* unary_expression */ + YYSYMBOL_unary_operator = 458, /* unary_operator */ + YYSYMBOL_multiplicative_expression = 459, /* multiplicative_expression */ + YYSYMBOL_additive_expression = 460, /* additive_expression */ + YYSYMBOL_shift_expression = 461, /* shift_expression */ + YYSYMBOL_relational_expression = 462, /* relational_expression */ + YYSYMBOL_equality_expression = 463, /* equality_expression */ + YYSYMBOL_and_expression = 464, /* and_expression */ + YYSYMBOL_exclusive_or_expression = 465, /* exclusive_or_expression */ + YYSYMBOL_inclusive_or_expression = 466, /* inclusive_or_expression */ + YYSYMBOL_logical_and_expression = 467, /* logical_and_expression */ + YYSYMBOL_logical_xor_expression = 468, /* logical_xor_expression */ + YYSYMBOL_logical_or_expression = 469, /* logical_or_expression */ + YYSYMBOL_conditional_expression = 470, /* conditional_expression */ + YYSYMBOL_471_1 = 471, /* $@1 */ + YYSYMBOL_assignment_expression = 472, /* assignment_expression */ + YYSYMBOL_assignment_operator = 473, /* assignment_operator */ + YYSYMBOL_expression = 474, /* expression */ + YYSYMBOL_constant_expression = 475, /* constant_expression */ + YYSYMBOL_declaration = 476, /* declaration */ + YYSYMBOL_block_structure = 477, /* block_structure */ + YYSYMBOL_478_2 = 478, /* $@2 */ + YYSYMBOL_identifier_list = 479, /* identifier_list */ + YYSYMBOL_function_prototype = 480, /* function_prototype */ + YYSYMBOL_function_declarator = 481, /* function_declarator */ + YYSYMBOL_function_header_with_parameters = 482, /* function_header_with_parameters */ + YYSYMBOL_function_header = 483, /* function_header */ + YYSYMBOL_parameter_declarator = 484, /* parameter_declarator */ + YYSYMBOL_parameter_declaration = 485, /* parameter_declaration */ + YYSYMBOL_parameter_type_specifier = 486, /* parameter_type_specifier */ + YYSYMBOL_init_declarator_list = 487, /* init_declarator_list */ + YYSYMBOL_single_declaration = 488, /* single_declaration */ + YYSYMBOL_fully_specified_type = 489, /* fully_specified_type */ + YYSYMBOL_invariant_qualifier = 490, /* invariant_qualifier */ + YYSYMBOL_interpolation_qualifier = 491, /* interpolation_qualifier */ + YYSYMBOL_layout_qualifier = 492, /* layout_qualifier */ + YYSYMBOL_layout_qualifier_id_list = 493, /* layout_qualifier_id_list */ + YYSYMBOL_layout_qualifier_id = 494, /* layout_qualifier_id */ + YYSYMBOL_precise_qualifier = 495, /* precise_qualifier */ + YYSYMBOL_type_qualifier = 496, /* type_qualifier */ + YYSYMBOL_single_type_qualifier = 497, /* single_type_qualifier */ + YYSYMBOL_storage_qualifier = 498, /* storage_qualifier */ + YYSYMBOL_non_uniform_qualifier = 499, /* non_uniform_qualifier */ + YYSYMBOL_type_name_list = 500, /* type_name_list */ + YYSYMBOL_type_specifier = 501, /* type_specifier */ + YYSYMBOL_array_specifier = 502, /* array_specifier */ + YYSYMBOL_type_parameter_specifier_opt = 503, /* type_parameter_specifier_opt */ + YYSYMBOL_type_parameter_specifier = 504, /* type_parameter_specifier */ + YYSYMBOL_type_parameter_specifier_list = 505, /* type_parameter_specifier_list */ + YYSYMBOL_type_specifier_nonarray = 506, /* type_specifier_nonarray */ + YYSYMBOL_precision_qualifier = 507, /* precision_qualifier */ + YYSYMBOL_struct_specifier = 508, /* struct_specifier */ + YYSYMBOL_509_3 = 509, /* $@3 */ + YYSYMBOL_510_4 = 510, /* $@4 */ + YYSYMBOL_struct_declaration_list = 511, /* struct_declaration_list */ + YYSYMBOL_struct_declaration = 512, /* struct_declaration */ + YYSYMBOL_struct_declarator_list = 513, /* struct_declarator_list */ + YYSYMBOL_struct_declarator = 514, /* struct_declarator */ + YYSYMBOL_initializer = 515, /* initializer */ + YYSYMBOL_initializer_list = 516, /* initializer_list */ + YYSYMBOL_declaration_statement = 517, /* declaration_statement */ + YYSYMBOL_statement = 518, /* statement */ + YYSYMBOL_simple_statement = 519, /* simple_statement */ + YYSYMBOL_demote_statement = 520, /* demote_statement */ + YYSYMBOL_compound_statement = 521, /* compound_statement */ + YYSYMBOL_522_5 = 522, /* $@5 */ + YYSYMBOL_523_6 = 523, /* $@6 */ + YYSYMBOL_statement_no_new_scope = 524, /* statement_no_new_scope */ + YYSYMBOL_statement_scoped = 525, /* statement_scoped */ + YYSYMBOL_526_7 = 526, /* $@7 */ + YYSYMBOL_527_8 = 527, /* $@8 */ + YYSYMBOL_compound_statement_no_new_scope = 528, /* compound_statement_no_new_scope */ + YYSYMBOL_statement_list = 529, /* statement_list */ + YYSYMBOL_expression_statement = 530, /* expression_statement */ + YYSYMBOL_selection_statement = 531, /* selection_statement */ + YYSYMBOL_selection_statement_nonattributed = 532, /* selection_statement_nonattributed */ + YYSYMBOL_selection_rest_statement = 533, /* selection_rest_statement */ + YYSYMBOL_condition = 534, /* condition */ + YYSYMBOL_switch_statement = 535, /* switch_statement */ + YYSYMBOL_switch_statement_nonattributed = 536, /* switch_statement_nonattributed */ + YYSYMBOL_537_9 = 537, /* $@9 */ + YYSYMBOL_switch_statement_list = 538, /* switch_statement_list */ + YYSYMBOL_case_label = 539, /* case_label */ + YYSYMBOL_iteration_statement = 540, /* iteration_statement */ + YYSYMBOL_iteration_statement_nonattributed = 541, /* iteration_statement_nonattributed */ + YYSYMBOL_542_10 = 542, /* $@10 */ + YYSYMBOL_543_11 = 543, /* $@11 */ + YYSYMBOL_544_12 = 544, /* $@12 */ + YYSYMBOL_for_init_statement = 545, /* for_init_statement */ + YYSYMBOL_conditionopt = 546, /* conditionopt */ + YYSYMBOL_for_rest_statement = 547, /* for_rest_statement */ + YYSYMBOL_jump_statement = 548, /* jump_statement */ + YYSYMBOL_translation_unit = 549, /* translation_unit */ + YYSYMBOL_external_declaration = 550, /* external_declaration */ + YYSYMBOL_function_definition = 551, /* function_definition */ + YYSYMBOL_552_13 = 552, /* $@13 */ + YYSYMBOL_attribute = 553, /* attribute */ + YYSYMBOL_attribute_list = 554, /* attribute_list */ + YYSYMBOL_single_attribute = 555 /* single_attribute */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; /* Second part of user prologue. */ -#line 133 "glslang/MachineIndependent/glslang.y" +#line 133 "MachineIndependent/glslang.y" /* windows only pragma */ @@ -696,7 +698,7 @@ typedef enum yysymbol_kind_t yysymbol_kind_t; extern int yylex(YYSTYPE*, TParseContext&); -#line 700 "glslang/MachineIndependent/glslang_tab.cpp" +#line 702 "MachineIndependent/glslang_tab.cpp" #ifdef short @@ -1002,19 +1004,19 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 416 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 10058 +#define YYLAST 10112 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 443 +#define YYNTOKENS 445 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 111 /* YYNRULES -- Number of rules. */ -#define YYNRULES 614 +#define YYNRULES 616 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 760 +#define YYNSTATES 764 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 697 +#define YYMAXUTOK 699 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1097,75 +1099,75 @@ static const yytype_int16 yytranslate[] = 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442 + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 370, 370, 376, 379, 384, 387, 390, 394, 398, - 401, 405, 409, 413, 417, 421, 425, 431, 439, 442, - 445, 448, 451, 456, 464, 471, 478, 484, 488, 495, - 498, 504, 511, 521, 529, 534, 562, 571, 577, 581, - 585, 605, 606, 607, 608, 614, 615, 620, 625, 634, - 635, 640, 648, 649, 655, 664, 665, 670, 675, 680, - 688, 689, 698, 710, 711, 720, 721, 730, 731, 740, - 741, 749, 750, 758, 759, 767, 768, 768, 786, 787, - 803, 807, 811, 815, 820, 824, 828, 832, 836, 840, - 844, 851, 854, 865, 872, 877, 882, 889, 893, 897, - 901, 906, 911, 920, 920, 931, 935, 942, 949, 952, - 959, 967, 987, 1010, 1025, 1050, 1061, 1071, 1081, 1091, - 1100, 1103, 1107, 1111, 1116, 1124, 1131, 1136, 1141, 1146, - 1155, 1165, 1192, 1201, 1208, 1216, 1223, 1230, 1238, 1248, - 1255, 1266, 1272, 1275, 1282, 1286, 1290, 1299, 1309, 1312, - 1323, 1326, 1329, 1333, 1337, 1342, 1346, 1353, 1357, 1362, - 1368, 1374, 1381, 1386, 1394, 1400, 1412, 1426, 1432, 1437, - 1445, 1453, 1461, 1469, 1477, 1485, 1493, 1501, 1508, 1515, - 1519, 1524, 1529, 1534, 1539, 1544, 1549, 1553, 1557, 1561, - 1565, 1571, 1582, 1589, 1592, 1601, 1606, 1616, 1621, 1629, - 1633, 1643, 1646, 1652, 1658, 1665, 1675, 1679, 1683, 1687, - 1692, 1696, 1701, 1706, 1711, 1716, 1721, 1726, 1731, 1736, - 1741, 1747, 1753, 1759, 1764, 1769, 1774, 1779, 1784, 1789, - 1794, 1799, 1804, 1809, 1814, 1820, 1827, 1832, 1837, 1842, - 1847, 1852, 1857, 1862, 1867, 1872, 1877, 1882, 1890, 1898, - 1906, 1912, 1918, 1924, 1930, 1936, 1942, 1948, 1954, 1960, - 1966, 1972, 1978, 1984, 1990, 1996, 2002, 2008, 2014, 2020, - 2026, 2032, 2038, 2044, 2050, 2056, 2062, 2068, 2074, 2080, - 2086, 2092, 2098, 2104, 2112, 2120, 2128, 2136, 2144, 2152, - 2160, 2168, 2176, 2184, 2192, 2200, 2206, 2212, 2218, 2224, - 2230, 2236, 2242, 2248, 2254, 2260, 2266, 2272, 2278, 2284, - 2290, 2296, 2302, 2308, 2314, 2320, 2326, 2332, 2338, 2344, - 2350, 2356, 2362, 2368, 2374, 2380, 2386, 2392, 2398, 2404, - 2410, 2416, 2420, 2424, 2428, 2433, 2439, 2444, 2449, 2454, - 2459, 2464, 2469, 2475, 2480, 2485, 2490, 2495, 2500, 2506, - 2512, 2518, 2524, 2530, 2536, 2542, 2548, 2554, 2560, 2566, - 2572, 2578, 2584, 2589, 2594, 2599, 2604, 2609, 2614, 2620, - 2625, 2630, 2635, 2640, 2645, 2650, 2655, 2661, 2666, 2671, - 2676, 2681, 2686, 2691, 2696, 2701, 2706, 2711, 2716, 2721, - 2726, 2731, 2737, 2742, 2747, 2753, 2759, 2764, 2769, 2774, - 2780, 2785, 2790, 2795, 2801, 2806, 2811, 2816, 2822, 2827, - 2832, 2837, 2843, 2849, 2855, 2861, 2866, 2872, 2878, 2884, - 2889, 2894, 2899, 2904, 2909, 2915, 2920, 2925, 2930, 2936, - 2941, 2946, 2951, 2957, 2962, 2967, 2972, 2978, 2983, 2988, - 2993, 2999, 3004, 3009, 3014, 3020, 3025, 3030, 3035, 3041, - 3046, 3051, 3056, 3062, 3067, 3072, 3077, 3083, 3088, 3093, - 3098, 3104, 3109, 3114, 3119, 3125, 3130, 3135, 3140, 3146, - 3151, 3156, 3161, 3167, 3172, 3177, 3182, 3188, 3193, 3198, - 3203, 3209, 3214, 3219, 3224, 3229, 3234, 3239, 3244, 3249, - 3254, 3259, 3264, 3269, 3274, 3279, 3284, 3289, 3294, 3299, - 3304, 3309, 3314, 3319, 3324, 3329, 3335, 3341, 3347, 3353, - 3360, 3367, 3373, 3379, 3385, 3391, 3397, 3403, 3410, 3415, - 3431, 3436, 3441, 3449, 3449, 3460, 3460, 3470, 3473, 3486, - 3508, 3535, 3539, 3545, 3550, 3561, 3565, 3571, 3582, 3585, - 3592, 3596, 3597, 3603, 3604, 3605, 3606, 3607, 3608, 3609, - 3611, 3617, 3626, 3627, 3631, 3627, 3643, 3644, 3648, 3648, - 3655, 3655, 3669, 3672, 3680, 3688, 3699, 3700, 3704, 3708, - 3715, 3722, 3726, 3734, 3738, 3751, 3755, 3762, 3762, 3782, - 3785, 3791, 3803, 3815, 3819, 3826, 3826, 3841, 3841, 3857, - 3857, 3878, 3881, 3887, 3890, 3896, 3900, 3907, 3912, 3917, - 3924, 3927, 3931, 3940, 3944, 3953, 3956, 3960, 3969, 3969, - 4011, 4017, 4020, 4025, 4028 + 0, 371, 371, 377, 380, 385, 388, 391, 395, 399, + 402, 406, 410, 414, 418, 422, 426, 432, 440, 443, + 446, 449, 452, 457, 465, 472, 479, 485, 489, 496, + 499, 505, 512, 522, 530, 535, 563, 572, 578, 582, + 586, 606, 607, 608, 609, 615, 616, 621, 626, 635, + 636, 641, 649, 650, 656, 665, 666, 671, 676, 681, + 689, 690, 699, 711, 712, 721, 722, 731, 732, 741, + 742, 750, 751, 759, 760, 768, 769, 769, 787, 788, + 804, 808, 812, 816, 821, 825, 829, 833, 837, 841, + 845, 852, 855, 866, 873, 878, 883, 890, 894, 898, + 902, 907, 912, 921, 921, 932, 936, 943, 950, 953, + 960, 968, 988, 1011, 1026, 1051, 1062, 1072, 1082, 1092, + 1101, 1104, 1108, 1112, 1117, 1125, 1132, 1137, 1142, 1147, + 1156, 1166, 1193, 1202, 1209, 1217, 1224, 1231, 1239, 1249, + 1256, 1267, 1273, 1276, 1283, 1287, 1291, 1300, 1310, 1313, + 1324, 1327, 1330, 1334, 1338, 1343, 1347, 1354, 1358, 1363, + 1369, 1375, 1382, 1387, 1395, 1401, 1413, 1427, 1433, 1438, + 1446, 1454, 1462, 1470, 1478, 1486, 1494, 1502, 1509, 1516, + 1520, 1525, 1530, 1535, 1540, 1545, 1550, 1554, 1558, 1562, + 1566, 1572, 1583, 1590, 1593, 1602, 1607, 1617, 1622, 1630, + 1634, 1644, 1647, 1653, 1659, 1666, 1676, 1680, 1684, 1688, + 1693, 1697, 1702, 1707, 1712, 1717, 1722, 1727, 1732, 1737, + 1742, 1748, 1754, 1760, 1765, 1770, 1775, 1780, 1785, 1790, + 1795, 1800, 1805, 1810, 1815, 1821, 1828, 1833, 1838, 1843, + 1848, 1853, 1858, 1863, 1868, 1873, 1878, 1883, 1891, 1899, + 1907, 1913, 1919, 1925, 1931, 1937, 1943, 1949, 1955, 1961, + 1967, 1973, 1979, 1985, 1991, 1997, 2003, 2009, 2015, 2021, + 2027, 2033, 2039, 2045, 2051, 2057, 2063, 2069, 2075, 2081, + 2087, 2093, 2099, 2105, 2113, 2121, 2129, 2137, 2145, 2153, + 2161, 2169, 2177, 2185, 2193, 2201, 2207, 2213, 2219, 2225, + 2231, 2237, 2243, 2249, 2255, 2261, 2267, 2273, 2279, 2285, + 2291, 2297, 2303, 2309, 2315, 2321, 2327, 2333, 2339, 2345, + 2351, 2357, 2363, 2369, 2375, 2381, 2387, 2393, 2399, 2405, + 2411, 2417, 2421, 2425, 2429, 2434, 2440, 2445, 2450, 2455, + 2460, 2465, 2470, 2476, 2481, 2486, 2491, 2496, 2501, 2507, + 2513, 2519, 2525, 2531, 2537, 2543, 2549, 2555, 2561, 2567, + 2573, 2579, 2585, 2590, 2595, 2600, 2605, 2610, 2615, 2621, + 2626, 2631, 2636, 2641, 2646, 2651, 2656, 2662, 2667, 2672, + 2677, 2682, 2687, 2692, 2697, 2702, 2707, 2712, 2717, 2722, + 2727, 2732, 2738, 2743, 2748, 2754, 2760, 2765, 2770, 2775, + 2781, 2786, 2791, 2796, 2802, 2807, 2812, 2817, 2823, 2828, + 2833, 2838, 2844, 2850, 2856, 2862, 2867, 2873, 2879, 2885, + 2890, 2895, 2900, 2905, 2910, 2916, 2921, 2926, 2931, 2937, + 2942, 2947, 2952, 2958, 2963, 2968, 2973, 2979, 2984, 2989, + 2994, 3000, 3005, 3010, 3015, 3021, 3026, 3031, 3036, 3042, + 3047, 3052, 3057, 3063, 3068, 3073, 3078, 3084, 3089, 3094, + 3099, 3105, 3110, 3115, 3120, 3126, 3131, 3136, 3141, 3147, + 3152, 3157, 3162, 3168, 3173, 3178, 3183, 3189, 3194, 3199, + 3204, 3210, 3215, 3220, 3225, 3230, 3235, 3240, 3245, 3250, + 3255, 3260, 3265, 3270, 3275, 3280, 3285, 3290, 3295, 3300, + 3305, 3310, 3315, 3320, 3325, 3330, 3336, 3342, 3348, 3354, + 3361, 3368, 3374, 3380, 3386, 3392, 3398, 3404, 3411, 3416, + 3432, 3437, 3442, 3450, 3450, 3461, 3461, 3471, 3474, 3487, + 3509, 3536, 3540, 3546, 3551, 3562, 3566, 3572, 3583, 3586, + 3593, 3597, 3598, 3604, 3605, 3606, 3607, 3608, 3609, 3610, + 3612, 3618, 3627, 3628, 3632, 3628, 3644, 3645, 3649, 3649, + 3656, 3656, 3670, 3673, 3681, 3689, 3700, 3701, 3705, 3709, + 3716, 3723, 3727, 3735, 3739, 3752, 3756, 3763, 3763, 3783, + 3786, 3792, 3804, 3816, 3820, 3827, 3827, 3842, 3842, 3858, + 3858, 3879, 3882, 3888, 3891, 3897, 3901, 3908, 3913, 3918, + 3925, 3928, 3932, 3937, 3941, 3951, 3955, 3964, 3967, 3971, + 3980, 3980, 4022, 4028, 4031, 4036, 4039 }; #endif @@ -1266,19 +1268,20 @@ static const char *const yytname[] = "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT", "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "TERMINATE_INVOCATION", - "UNIFORM", "SHARED", "BUFFER", "FLAT", "SMOOTH", "LAYOUT", - "DOUBLECONSTANT", "INT16CONSTANT", "UINT16CONSTANT", "FLOAT16CONSTANT", - "INT32CONSTANT", "UINT32CONSTANT", "INT64CONSTANT", "UINT64CONSTANT", - "SUBROUTINE", "DEMOTE", "PAYLOADNV", "PAYLOADINNV", "HITATTRNV", - "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", "PAYLOADINEXT", "HITATTREXT", - "CALLDATAEXT", "CALLDATAINEXT", "PATCH", "SAMPLE", "NONUNIFORM", - "COHERENT", "VOLATILE", "RESTRICT", "READONLY", "WRITEONLY", - "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", - "SUBGROUPCOHERENT", "NONPRIVATE", "SHADERCALLCOHERENT", "NOPERSPECTIVE", - "EXPLICITINTERPAMD", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", - "PERTASKNV", "PRECISE", "$accept", "variable_identifier", - "primary_expression", "postfix_expression", "integer_expression", - "function_call", "function_call_or_method", "function_call_generic", + "TERMINATE_RAY", "IGNORE_INTERSECTION", "UNIFORM", "SHARED", "BUFFER", + "FLAT", "SMOOTH", "LAYOUT", "DOUBLECONSTANT", "INT16CONSTANT", + "UINT16CONSTANT", "FLOAT16CONSTANT", "INT32CONSTANT", "UINT32CONSTANT", + "INT64CONSTANT", "UINT64CONSTANT", "SUBROUTINE", "DEMOTE", "PAYLOADNV", + "PAYLOADINNV", "HITATTRNV", "CALLDATANV", "CALLDATAINNV", "PAYLOADEXT", + "PAYLOADINEXT", "HITATTREXT", "CALLDATAEXT", "CALLDATAINEXT", "PATCH", + "SAMPLE", "NONUNIFORM", "COHERENT", "VOLATILE", "RESTRICT", "READONLY", + "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", + "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", + "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD", + "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "PRECISE", + "$accept", "variable_identifier", "primary_expression", + "postfix_expression", "integer_expression", "function_call", + "function_call_or_method", "function_call_generic", "function_call_header_no_parameters", "function_call_header_with_parameters", "function_call_header", "function_identifier", "unary_expression", "unary_operator", @@ -1373,11 +1376,11 @@ static const yytype_int16 yytoknum[] = 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697 + 695, 696, 697, 698, 699 }; #endif -#define YYPACT_NINF (-728) +#define YYPACT_NINF (-732) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -1391,82 +1394,83 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 4283, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - 109, -728, -728, -728, -728, -728, 1, -728, -728, -728, - -728, -728, -728, -327, -323, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, 11, -271, 12, - 19, 6483, 8, -728, 57, -728, -728, -728, -728, 4723, - -728, -728, -728, -728, 37, -728, -728, 763, -728, -728, - 16, -728, 107, -29, 92, -728, -336, -728, 136, -728, - 6483, -728, -728, -728, 6483, 110, 117, -728, 54, -728, - 68, -728, -728, 9027, 140, -728, -728, -728, 134, 6483, - -728, 146, -728, 13, -728, -728, 59, 7343, -728, -335, - 1203, -728, -728, -728, -728, 140, -331, -728, 7764, -330, - -728, 126, -728, 85, 9027, 9027, -728, 9027, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, 36, -728, -728, - -728, 170, 66, 9448, 173, -728, 9027, -728, -728, -343, - 172, -728, 6483, 141, 5163, -728, 6483, 9027, -728, -29, - -728, 145, -728, -728, 142, 93, 108, 26, 114, 154, - 157, 159, 196, 195, 23, 181, 8185, -728, 183, 182, - -728, -728, 186, 178, 180, -728, 191, 192, 184, 8606, - 193, 9027, 187, 188, 194, 129, -728, -728, 99, -728, - -271, 197, 202, -728, -728, -728, -728, -728, 1643, -728, - -728, -728, -728, -728, -728, -728, -728, -728, -22, 172, - 7764, 21, 7764, -728, -728, 7764, 6483, -728, 160, -728, - -728, -728, 76, -728, -728, 9027, 167, -728, -728, 9027, - 204, -728, -728, -728, 9027, -728, 141, 140, 106, -728, - -728, -728, 5603, -728, -728, -728, -728, 9027, 9027, 9027, - 9027, 9027, 9027, 9027, 9027, 9027, 9027, 9027, 9027, 9027, - 9027, 9027, 9027, 9027, 9027, 9027, -728, -728, -728, 207, - 171, -728, 2083, -728, -728, -728, 2083, -728, 9027, -728, - -728, 122, 9027, 143, -728, -728, -728, -728, -728, -728, - -728, -728, -728, -728, -728, -728, -728, -728, 9027, 9027, - -728, -728, -728, -728, -728, -728, -728, 7764, -728, 132, - -728, 6043, -728, -728, 208, 205, -728, -728, -728, 123, - 172, 141, -728, -728, -728, -728, -728, 142, 142, 93, - 93, 108, 108, 108, 108, 26, 26, 114, 154, 157, - 159, 196, 195, 9027, -728, 213, 61, -728, 2083, 3843, - 174, 3403, 78, -728, 81, -728, -728, -728, -728, -728, - 6922, -728, -728, -728, -728, 153, 9027, 211, 171, 210, - 205, 185, 6483, 218, 220, -728, -728, 3843, 219, -728, - -728, -728, 9027, 221, -728, -728, -728, 215, 2523, 9027, - -728, 217, 224, 189, 225, 2963, -728, 226, -728, -728, - 7764, -728, -728, -728, 83, 9027, 2523, 219, -728, -728, - 2083, -728, 222, 205, -728, -728, 2083, 223, -728, -728 + 4303, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + 109, -732, -732, -732, -732, -732, 1, -732, -732, -732, + -732, -732, -732, -324, -261, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, 11, 44, 22, + 7, 6513, -332, -732, -10, -732, -732, -732, -732, 4745, + -732, -732, -732, -732, 46, -732, -732, 767, -732, -732, + 16, -732, 69, -5, 47, -732, -338, -732, 91, -732, + 6513, -732, -732, -732, 6513, 72, 80, -732, 13, -732, + 74, -732, -732, 9069, 126, -732, -732, -732, 127, 6513, + -732, 144, -732, 17, -732, -732, 61, 7377, -732, 10, + 1209, -732, -732, -732, -732, 126, 25, -732, 7800, 26, + -732, 119, -732, 78, 9069, 9069, -732, 9069, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, 36, -732, -732, + -732, 164, 65, 9492, 171, -732, 9069, -732, -732, -340, + 173, -732, 6513, 140, 5187, -732, 6513, 9069, -732, -5, + -732, 141, -732, -732, 124, 130, 179, 27, 117, 156, + 158, 160, 195, 194, 20, 181, 8223, -732, 183, 182, + -732, -732, 186, 178, 180, -732, 189, 192, 184, 8646, + 193, 9069, 187, 188, 190, 196, 197, 129, -732, -732, + 89, -732, 44, 199, 204, -732, -732, -732, -732, -732, + 1651, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -376, 173, 7800, 54, 7800, -732, -732, 7800, 6513, -732, + 161, -732, -732, -732, 70, -732, -732, 9069, 169, -732, + -732, 9069, 207, -732, -732, -732, 9069, -732, 140, 126, + 103, -732, -732, -732, 5629, -732, -732, -732, -732, 9069, + 9069, 9069, 9069, 9069, 9069, 9069, 9069, 9069, 9069, 9069, + 9069, 9069, 9069, 9069, 9069, 9069, 9069, 9069, -732, -732, + -732, 209, 177, -732, 2093, -732, -732, -732, 2093, -732, + 9069, -732, -732, 122, 9069, 152, -732, -732, -732, -732, + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, 9069, 9069, -732, -732, -732, -732, -732, -732, + -732, 7800, -732, 143, -732, 6071, -732, -732, 211, 208, + -732, -732, -732, 123, 173, 140, -732, -732, -732, -732, + -732, 124, 124, 130, 130, 179, 179, 179, 179, 27, + 27, 117, 156, 158, 160, 195, 194, 9069, -732, 216, + 87, -732, 2093, 3861, 174, 3419, 75, -732, 85, -732, + -732, -732, -732, -732, 6954, -732, -732, -732, -732, 154, + 9069, 217, 177, 191, 208, 185, 6513, 221, 223, -732, + -732, 3861, 220, -732, -732, -732, 9069, 224, -732, -732, + -732, 218, 2535, 9069, -732, 219, 225, 198, 226, 2977, + -732, 227, -732, -732, 7800, -732, -732, -732, 86, 9069, + 2535, 220, -732, -732, 2093, -732, 222, 208, -732, -732, + 2093, 228, -732, -732 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1505,19 +1509,19 @@ static const yytype_int16 yydefact[] = 421, 415, 420, 422, 423, 425, 426, 427, 429, 430, 431, 433, 434, 435, 437, 438, 411, 412, 413, 424, 414, 416, 417, 418, 428, 432, 436, 507, 508, 511, - 512, 513, 514, 509, 510, 607, 132, 520, 521, 522, + 512, 513, 514, 509, 510, 609, 132, 520, 521, 522, 0, 519, 161, 159, 160, 158, 0, 206, 162, 163, 164, 134, 133, 0, 190, 171, 173, 169, 175, 177, 172, 174, 170, 176, 178, 167, 168, 192, 179, 186, 187, 188, 189, 180, 181, 182, 183, 184, 185, 135, - 136, 137, 138, 139, 140, 147, 606, 0, 608, 0, + 136, 137, 138, 139, 140, 147, 608, 0, 610, 0, 109, 108, 0, 120, 125, 154, 153, 151, 155, 0, - 148, 150, 156, 130, 202, 152, 518, 0, 603, 605, + 148, 150, 156, 130, 202, 152, 518, 0, 605, 607, 0, 525, 0, 0, 0, 97, 0, 94, 0, 107, 0, 116, 110, 118, 0, 119, 0, 95, 126, 100, - 0, 149, 131, 0, 195, 201, 1, 604, 0, 0, + 0, 149, 131, 0, 195, 201, 1, 606, 0, 0, 523, 144, 146, 0, 142, 193, 0, 0, 98, 0, - 0, 609, 111, 115, 117, 113, 121, 112, 0, 127, + 0, 611, 111, 115, 117, 113, 121, 112, 0, 127, 103, 0, 101, 0, 0, 0, 9, 0, 43, 42, 44, 41, 5, 6, 7, 8, 2, 16, 14, 15, 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, @@ -1526,64 +1530,65 @@ static const yytype_int16 yydefact[] = 191, 0, 197, 45, 49, 52, 55, 60, 63, 65, 67, 69, 71, 73, 75, 0, 0, 99, 0, 553, 562, 566, 0, 0, 0, 587, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 45, 78, 91, 0, 540, - 0, 156, 130, 543, 564, 542, 550, 541, 0, 544, - 545, 568, 546, 575, 547, 548, 583, 549, 0, 114, - 0, 122, 0, 535, 129, 0, 0, 105, 0, 102, - 38, 39, 0, 22, 23, 0, 0, 28, 27, 0, - 206, 31, 33, 40, 0, 203, 0, 533, 0, 531, - 526, 528, 0, 93, 145, 143, 194, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 45, 78, 91, + 0, 540, 0, 156, 130, 543, 564, 542, 550, 541, + 0, 544, 545, 568, 546, 575, 547, 548, 583, 549, + 0, 114, 0, 122, 0, 535, 129, 0, 0, 105, + 0, 102, 38, 39, 0, 22, 23, 0, 0, 28, + 27, 0, 206, 31, 33, 40, 0, 203, 0, 533, + 0, 531, 526, 528, 0, 93, 145, 143, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 198, 199, 0, - 0, 552, 0, 585, 598, 597, 0, 589, 0, 601, - 599, 0, 0, 0, 582, 602, 551, 81, 82, 84, - 83, 86, 87, 88, 89, 90, 85, 80, 0, 0, - 567, 563, 565, 569, 576, 584, 124, 0, 538, 0, - 128, 0, 106, 4, 0, 24, 21, 32, 205, 0, - 534, 0, 529, 524, 46, 47, 48, 51, 50, 53, - 54, 58, 59, 56, 57, 61, 62, 64, 66, 68, - 70, 72, 74, 0, 200, 613, 0, 611, 554, 0, - 0, 0, 0, 600, 0, 581, 79, 92, 123, 536, - 0, 104, 19, 530, 532, 0, 0, 0, 0, 0, - 573, 0, 0, 0, 0, 592, 591, 594, 560, 577, - 537, 539, 0, 0, 610, 612, 555, 0, 0, 0, - 593, 0, 0, 572, 0, 0, 570, 0, 77, 614, - 0, 557, 586, 556, 0, 595, 0, 560, 559, 561, - 579, 574, 0, 596, 590, 571, 580, 0, 588, 578 + 0, 0, 0, 0, 0, 0, 0, 0, 76, 198, + 199, 0, 0, 552, 0, 585, 598, 597, 0, 589, + 0, 601, 599, 0, 0, 0, 582, 602, 603, 604, + 551, 81, 82, 84, 83, 86, 87, 88, 89, 90, + 85, 80, 0, 0, 567, 563, 565, 569, 576, 584, + 124, 0, 538, 0, 128, 0, 106, 4, 0, 24, + 21, 32, 205, 0, 534, 0, 529, 524, 46, 47, + 48, 51, 50, 53, 54, 58, 59, 56, 57, 61, + 62, 64, 66, 68, 70, 72, 74, 0, 200, 615, + 0, 613, 554, 0, 0, 0, 0, 600, 0, 581, + 79, 92, 123, 536, 0, 104, 19, 530, 532, 0, + 0, 0, 0, 0, 573, 0, 0, 0, 0, 592, + 591, 594, 560, 577, 537, 539, 0, 0, 612, 614, + 555, 0, 0, 0, 593, 0, 0, 572, 0, 0, + 570, 0, 77, 616, 0, 557, 586, 556, 0, 595, + 0, 560, 559, 561, 579, 574, 0, 596, 590, 571, + 580, 0, 588, 578 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -728, -728, -728, -728, -728, -728, -728, -728, -728, -728, - -728, -728, 9352, -728, -87, -84, -154, -93, -30, -28, - -27, -26, -25, -31, -728, -86, -728, -99, -728, -111, - -126, 2, -728, -728, -728, 4, -728, -728, -728, 177, - 190, 179, -728, -728, -339, -728, -728, -728, -728, 95, - -728, -37, -46, -728, 9, -728, 0, -63, -728, -728, - -728, -728, 265, -728, -728, -728, -479, -149, 10, -74, - -212, -728, -103, -201, -727, -728, -145, -728, -728, -153, - -155, -728, -728, 198, -270, -97, -728, 47, -728, -120, - -728, 50, -728, -728, -728, -728, 51, -728, -728, -728, - -728, -728, -728, -728, -728, 216, -728, -728, -728, -728, - -108 + -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, + -732, -732, 9402, -732, -90, -89, -153, -92, -29, -28, + -27, -26, -30, -25, -732, -88, -732, -101, -732, -113, + -132, 2, -732, -732, -732, 4, -732, -732, -732, 200, + 201, 202, -732, -732, -343, -732, -732, -732, -732, 92, + -732, -36, -46, -732, 9, -732, 0, -67, -732, -732, + -732, -732, 263, -732, -732, -732, -481, -142, 8, -78, + -214, -732, -107, -204, -731, -732, -149, -732, -732, -160, + -159, -732, -732, 212, -269, -104, -732, 45, -732, -127, + -732, 48, -732, -732, -732, -732, 49, -732, -732, -732, + -732, -732, -732, -732, -732, 210, -732, -732, -732, -732, + -116 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 465, 466, 467, 654, 468, 469, 470, 471, 472, - 473, 474, 525, 476, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 526, 683, 527, 638, 528, - 584, 529, 367, 556, 443, 530, 369, 370, 371, 401, + -1, 465, 466, 467, 658, 468, 469, 470, 471, 472, + 473, 474, 527, 476, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 528, 687, 529, 642, 530, + 586, 531, 367, 558, 443, 532, 369, 370, 371, 401, 402, 403, 372, 373, 374, 375, 376, 377, 423, 424, 378, 379, 380, 381, 477, 426, 478, 429, 414, 415, - 479, 384, 385, 386, 486, 419, 484, 485, 578, 579, - 554, 649, 533, 534, 535, 536, 537, 612, 709, 742, - 733, 734, 735, 743, 538, 539, 540, 541, 736, 713, - 542, 543, 737, 757, 544, 545, 546, 689, 616, 691, - 717, 731, 732, 547, 387, 388, 389, 398, 548, 686, - 687 + 479, 384, 385, 386, 486, 419, 484, 485, 580, 581, + 556, 653, 535, 536, 537, 538, 539, 614, 713, 746, + 737, 738, 739, 747, 540, 541, 542, 543, 740, 717, + 544, 545, 741, 761, 546, 547, 548, 693, 618, 695, + 721, 735, 736, 549, 387, 388, 389, 398, 550, 690, + 691 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1591,14 +1596,14 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 383, 741, 366, 574, 368, 427, 506, 582, 749, 382, - 427, 506, 393, 428, 507, 575, 394, 550, 555, 741, + 383, 745, 366, 427, 368, 584, 576, 512, 753, 382, + 515, 428, 516, 517, 406, 393, 520, 407, 577, 745, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 651, 397, 61, + 52, 53, 54, 55, 56, 57, 58, 655, 394, 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, @@ -1624,135 +1629,180 @@ static const yytype_int16 yytable[] = 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, 411, 404, 581, 562, 642, 646, 553, - 648, 505, 688, 650, 391, 439, 421, 594, 595, 605, - 711, 480, 399, 488, 406, 563, 564, 407, 411, 489, - 395, 512, 506, 404, 515, 400, 516, 517, 422, 647, - 520, 405, 549, 551, 571, -35, 392, 565, 711, 412, - 382, 566, 482, 596, 597, 606, 396, 383, 382, 366, - 418, 368, 321, 437, 413, 427, 382, 326, 327, 490, - 405, 583, 438, 707, 405, 491, 568, 708, 621, 382, - 623, 440, 569, 382, 441, 690, 653, 442, 718, 483, - 609, 719, 639, 752, 639, 592, 593, 639, 382, 639, - 532, 558, 408, 581, 559, 698, 411, 598, 599, 531, - 671, 672, 673, 674, 590, 639, 591, 482, 640, 482, - 420, 553, 661, 553, 655, 662, 553, 627, 628, 629, - 630, 631, 632, 633, 634, 635, 636, 425, 639, 661, - 657, 693, 703, 317, 318, 319, 699, 637, 700, 430, - 756, 427, 576, 481, 483, 435, 483, 642, 721, 639, - 695, 382, 436, 382, 487, 382, 587, 588, 589, 639, - 722, 557, 581, 667, 668, 675, 676, 692, 669, 670, - 567, 694, 572, 506, 660, 600, 577, 601, 602, 482, - 586, 603, 604, 607, 610, 613, 611, 614, 751, 615, - 617, 618, 622, 619, 624, 652, -36, 625, 532, 696, - 697, -34, 656, 626, -29, 482, 685, 531, 553, 684, - 702, 639, 706, 724, 726, 642, 483, 714, 728, 729, - 727, 739, -558, 740, 746, 382, 745, 759, 509, 750, - 677, 758, 705, 678, 682, 679, 747, 680, 710, 681, - 723, 433, 483, 434, 585, 390, 659, 704, 715, 748, - 432, 382, 755, 754, 716, 643, 431, 730, 644, 645, - 725, 553, 0, 417, 0, 0, 710, 0, 0, 0, - 0, 0, 532, 0, 482, 0, 532, 0, 744, 0, - 583, 531, 0, 738, 0, 531, 0, 0, 0, 0, - 0, 0, 0, 0, 753, 0, 0, 0, 0, 0, - 0, 553, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 483, 712, 0, 0, 0, 0, 0, 0, 0, - 382, 0, 0, 0, 0, 0, 411, 0, 0, 0, + 312, 313, 314, 411, 564, 404, 646, 555, 650, 505, + 652, 439, 583, 654, 391, 692, 607, 480, 596, 597, + 715, 506, 437, 400, 427, 565, 566, 488, 411, 507, + 395, 438, 399, 489, 404, 408, 427, 506, 551, 553, + 421, 405, 573, 552, 557, -35, 392, 567, 715, 412, + 382, 568, 608, 482, 598, 599, 396, 383, 382, 366, + 418, 368, 321, 397, 422, 506, 382, 326, 327, 585, + 405, 490, 651, 413, 405, 570, 623, 491, 625, 382, + 657, 571, 420, 382, 694, 722, 643, 440, 611, 483, + 441, 643, 425, 442, 560, 723, 756, 561, 382, 711, + 534, 643, 643, 712, 430, 643, 411, 702, 644, 533, + 600, 601, 583, 675, 676, 677, 678, 435, 482, 665, + 482, 555, 666, 555, 659, 436, 555, 631, 632, 633, + 634, 635, 636, 637, 638, 639, 640, 427, 643, 665, + 661, 697, 707, 317, 318, 319, 481, 641, 589, 590, + 591, 592, 578, 593, 483, 760, 483, 703, 646, 704, + 725, 382, 487, 382, 559, 382, 594, 595, 643, 699, + 643, 726, 671, 672, 569, 673, 674, 696, 679, 680, + 574, 698, 664, 583, 506, 579, 588, 602, 603, 604, + 605, 606, 482, 609, 612, 615, 613, 616, 619, 617, + 755, 620, 624, 621, 626, 730, 656, 627, -36, 628, + 534, 700, 701, -34, 660, 629, 630, -29, 482, 533, + 555, 688, 689, 706, 643, 710, 646, 718, 483, 728, + 731, 732, 733, -558, 743, 750, 744, 382, 749, 509, + 754, 762, 763, 681, 709, 682, 685, 683, 727, 684, + 714, 587, 686, 390, 483, 751, 663, 708, 719, 752, + 758, 720, 759, 382, 734, 647, 729, 417, 648, 649, + 0, 432, 0, 555, 433, 0, 434, 0, 714, 0, + 431, 0, 0, 0, 534, 0, 0, 0, 534, 482, + 748, 0, 585, 533, 0, 742, 0, 533, 0, 0, + 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, + 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 483, 0, 716, 0, 0, + 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, + 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, + 0, 0, 534, 534, 0, 534, 0, 0, 0, 0, + 0, 533, 533, 0, 533, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, + 0, 534, 0, 0, 0, 382, 0, 0, 0, 0, + 533, 0, 534, 0, 0, 0, 0, 0, 0, 534, + 0, 533, 0, 0, 0, 0, 0, 0, 533, 0, + 534, 0, 0, 0, 534, 0, 0, 0, 0, 533, + 534, 0, 0, 533, 0, 0, 0, 416, 0, 533, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 712, 0, 0, 0, 0, 0, 0, 0, 532, 532, - 0, 532, 0, 0, 0, 0, 0, 531, 531, 0, - 531, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 412, 0, 0, 0, 0, 532, 0, 0, - 0, 382, 0, 0, 0, 0, 531, 0, 532, 0, - 0, 0, 0, 0, 0, 532, 0, 531, 0, 0, - 0, 0, 0, 0, 531, 0, 532, 0, 0, 0, - 532, 0, 0, 0, 0, 531, 532, 0, 0, 531, - 0, 0, 0, 416, 0, 531, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 316, 317, 318, 319, 320, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, + 333, 0, 0, 0, 0, 0, 0, 0, 0, 334, + 0, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 508, 0, 509, 510, 0, 0, - 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, - 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, + 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, + 508, 0, 509, 510, 0, 0, 0, 0, 511, 448, + 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 316, 317, 318, 319, 320, 0, 0, 0, + 452, 453, 454, 455, 456, 321, 322, 323, 324, 325, + 326, 327, 512, 513, 514, 515, 0, 516, 517, 518, + 519, 520, 521, 522, 523, 524, 525, 328, 329, 330, + 331, 332, 333, 457, 458, 459, 460, 461, 462, 463, + 464, 334, 526, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 0, 0, + 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, + 447, 0, 508, 0, 509, 645, 0, 0, 0, 0, + 511, 448, 449, 450, 451, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 316, 317, 318, 319, 320, 0, + 0, 0, 452, 453, 454, 455, 456, 321, 322, 323, + 324, 325, 326, 327, 512, 513, 514, 515, 0, 516, + 517, 518, 519, 520, 521, 522, 523, 524, 525, 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, + 462, 463, 464, 334, 526, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, @@ -1789,14 +1839,191 @@ static const yytype_int16 yytable[] = 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 508, 0, 509, 641, 0, 0, + 0, 446, 447, 0, 508, 0, 509, 0, 0, 0, 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, - 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, + 0, 516, 517, 518, 519, 520, 521, 522, 523, 524, + 525, 328, 329, 330, 331, 332, 333, 457, 458, 459, + 460, 461, 462, 463, 464, 334, 526, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 446, 447, 0, 508, 0, 430, 0, + 0, 0, 0, 0, 511, 448, 449, 450, 451, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, + 318, 319, 320, 0, 0, 0, 452, 453, 454, 455, + 456, 321, 322, 323, 324, 325, 326, 327, 512, 513, + 514, 515, 0, 516, 517, 518, 519, 520, 521, 522, + 523, 524, 525, 328, 329, 330, 331, 332, 333, 457, + 458, 459, 460, 461, 462, 463, 464, 334, 526, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 446, 447, 0, 508, 0, + 0, 0, 0, 0, 0, 0, 511, 448, 449, 450, + 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 316, 317, 318, 319, 320, 0, 0, 0, 452, 453, + 454, 455, 456, 321, 322, 323, 324, 325, 326, 327, + 512, 513, 514, 515, 0, 516, 517, 518, 519, 520, + 521, 522, 523, 524, 525, 328, 329, 330, 331, 332, + 333, 457, 458, 459, 460, 461, 462, 463, 464, 334, + 526, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 0, 0, 444, 445, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 511, 448, + 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 316, 317, 318, 319, 320, 0, 0, 0, + 452, 453, 454, 455, 456, 321, 322, 323, 324, 325, + 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, + 331, 332, 333, 457, 458, 459, 460, 461, 462, 463, + 464, 334, 0, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 0, 0, + 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, + 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 316, 317, 318, 319, 0, 0, + 0, 0, 452, 453, 454, 455, 456, 321, 322, 323, + 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, + 462, 463, 464, 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, @@ -1831,29 +2058,206 @@ static const yytype_int16 yytable[] = 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 508, 0, 509, 0, 0, 0, - 0, 0, 511, 448, 449, 450, 451, 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, 315, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, - 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, - 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, + 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 328, 329, 330, 331, 332, 333, 0, 0, 0, + 0, 0, 0, 0, 0, 334, 0, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 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, 409, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, + 318, 319, 0, 0, 0, 0, 0, 0, 0, 0, + 410, 321, 322, 323, 324, 325, 326, 327, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 328, 329, 330, 331, 332, 333, 0, + 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, + 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 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, 582, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 316, 317, 318, 319, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 322, 323, 324, 325, 326, 327, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, + 333, 0, 0, 0, 0, 0, 0, 0, 0, 334, + 0, 335, 336, 337, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 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, 667, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 316, 317, 318, 319, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 322, 323, 324, 325, + 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, + 331, 332, 333, 0, 0, 0, 0, 0, 0, 0, + 0, 334, 0, 335, 336, 337, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 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, 705, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 316, 317, 318, 319, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 321, 322, 323, + 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, + 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, + 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, + 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, @@ -1875,25 +2279,152 @@ static const yytype_int16 yytable[] = 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 508, 0, 430, 0, 0, 0, - 0, 0, 511, 448, 449, 450, 451, 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, 316, 317, 318, 319, - 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, - 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, - 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, + 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 328, 329, 330, 331, 332, 333, 0, 0, 0, + 0, 0, 0, 0, 0, 334, 0, 335, 336, 337, + 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 446, 447, 0, 0, 0, 554, 724, 0, + 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 452, 453, 454, 455, 456, + 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 457, 458, + 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, + 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, 0, 0, 444, 445, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 446, 447, 0, 0, 492, + 0, 0, 0, 0, 0, 0, 0, 448, 449, 450, + 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, + 454, 455, 456, 321, 0, 0, 0, 0, 326, 327, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 457, 458, 459, 460, 461, 462, 463, 464, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 0, 0, 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, 0, 0, 444, + 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, + 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, + 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 452, 453, 454, 455, 456, 321, 0, 0, 0, + 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 457, 458, 459, 460, 461, 462, + 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 55, 56, 57, 58, 0, 0, 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, @@ -1921,369 +2452,100 @@ static const yytype_int16 yytable[] = 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 508, 0, 0, 0, 0, 0, - 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, - 0, 516, 517, 518, 519, 520, 521, 522, 523, 328, - 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 524, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, + 0, 446, 447, 0, 0, 610, 0, 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, + 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 622, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 457, 458, 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 409, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 410, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, + 0, 0, 347, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, + 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, + 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 580, 0, 0, + 452, 453, 454, 455, 456, 321, 0, 0, 0, 0, + 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 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, 316, 317, 318, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 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, 701, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 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, 316, 317, 318, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 2, 3, 4, 5, + 0, 0, 0, 457, 458, 459, 460, 461, 462, 463, + 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -2315,65 +2577,49 @@ static const yytype_int16 yytable[] = 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, 0, - 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 446, 447, 0, 0, 0, 552, 720, 0, 0, 0, - 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, + 0, 444, 445, 0, 0, 475, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, + 446, 447, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 448, 449, 450, 451, 562, 563, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, 455, 456, 321, 0, - 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, + 0, 0, 0, 326, 572, 0, 0, 0, 575, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, + 0, 0, 0, 0, 0, 0, 457, 458, 459, 460, + 461, 462, 463, 464, 0, 0, 0, 0, 493, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 457, 458, 459, 460, 461, 462, - 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, 0, 0, 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 0, 492, 0, 0, 0, 0, - 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 457, 458, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 347, 2, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 668, 669, 670, 493, 493, 493, 493, 493, 493, + 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, + 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, 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, 0, 0, 0, 0, + 0, 0, 493 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 732, 0, 341, 0, 486, 346, 383, 739, 0, + 386, 349, 388, 389, 346, 339, 392, 349, 358, 750, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, 62, 63, + 54, 55, 56, 57, 58, 59, 60, 558, 339, 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, @@ -2399,681 +2645,183 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 447, 0, 0, 0, 552, 0, 0, - 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 452, 453, 454, 455, 456, - 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 457, 458, 459, 460, - 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 347, 2, + 314, 315, 316, 379, 447, 371, 540, 438, 552, 427, + 554, 408, 484, 557, 343, 614, 326, 414, 321, 322, + 693, 341, 339, 346, 341, 319, 320, 340, 404, 349, + 349, 348, 340, 346, 400, 375, 341, 341, 435, 436, + 375, 371, 473, 348, 348, 339, 375, 341, 721, 379, + 371, 345, 362, 419, 357, 358, 375, 387, 379, 387, + 390, 387, 376, 349, 399, 341, 387, 381, 382, 487, + 400, 340, 348, 357, 404, 340, 519, 346, 521, 400, + 340, 346, 343, 404, 618, 340, 346, 343, 506, 419, + 346, 346, 375, 349, 346, 340, 340, 349, 419, 342, + 430, 346, 346, 346, 343, 346, 482, 651, 349, 430, + 323, 324, 584, 596, 597, 598, 599, 375, 484, 346, + 486, 552, 349, 554, 567, 375, 557, 328, 329, 330, + 331, 332, 333, 334, 335, 336, 337, 341, 346, 346, + 571, 349, 349, 364, 365, 366, 349, 348, 354, 355, + 356, 351, 482, 353, 484, 754, 486, 344, 692, 346, + 704, 482, 348, 484, 375, 486, 317, 318, 346, 347, + 346, 347, 592, 593, 340, 594, 595, 620, 600, 601, + 339, 624, 579, 655, 341, 375, 375, 361, 360, 359, + 325, 327, 558, 342, 341, 339, 344, 349, 339, 349, + 744, 339, 339, 349, 347, 344, 375, 349, 339, 349, + 540, 642, 643, 339, 375, 349, 349, 340, 584, 540, + 651, 342, 375, 342, 346, 339, 760, 383, 558, 342, + 375, 340, 339, 343, 340, 340, 348, 558, 349, 343, + 343, 349, 344, 602, 687, 603, 606, 604, 710, 605, + 693, 489, 607, 320, 584, 387, 578, 665, 695, 738, + 750, 695, 751, 584, 721, 550, 712, 387, 550, 550, + -1, 400, -1, 704, 404, -1, 404, -1, 721, -1, + 398, -1, -1, -1, 614, -1, -1, -1, 618, 655, + 733, -1, 710, 614, -1, 726, -1, 618, -1, -1, + -1, -1, -1, -1, -1, -1, 749, -1, -1, -1, + -1, -1, -1, 744, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 655, -1, 693, -1, -1, + -1, -1, -1, -1, 655, -1, -1, -1, -1, -1, + 716, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 721, -1, -1, -1, -1, + -1, -1, 692, 693, -1, 695, -1, -1, -1, -1, + -1, 692, 693, -1, 695, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 716, -1, -1, -1, + -1, 721, -1, -1, -1, 716, -1, -1, -1, -1, + 721, -1, 732, -1, -1, -1, -1, -1, -1, 739, + -1, 732, -1, -1, -1, -1, -1, -1, 739, -1, + 750, -1, -1, -1, 754, -1, -1, -1, -1, 750, + 760, -1, -1, 754, -1, -1, -1, 0, -1, 760, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, 62, + 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, 0, 0, 444, 445, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 446, 447, 0, 0, 608, 0, 0, - 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 452, 453, 454, 455, - 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 620, 448, 449, 450, 451, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 458, - 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, - 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, 0, 0, 444, 445, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 446, 447, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 448, 449, 450, - 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, - 454, 455, 456, 321, 0, 0, 0, 0, 326, 327, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, - 458, 459, 460, 461, 462, 463, 464, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, - 0, 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, 475, 0, 444, 445, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, - 0, 0, 0, 0, 0, 0, 446, 447, 0, 0, - 0, 0, 0, 0, 0, 0, 560, 561, 448, 449, - 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, - 453, 454, 455, 456, 321, 0, 0, 0, 573, 326, - 570, 0, 0, 0, 0, 0, 0, 0, 0, 493, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 457, 458, 459, 460, 461, 462, 463, 464, 493, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 347, 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, 0, 0, 0, 0, 0, 658, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 664, - 665, 666, 493, 493, 493, 493, 493, 493, 493, 493, - 493, 493, 493, 493, 493, 493, 493, 493, 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, 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, 0, 0, 0, 0, 493 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 728, 0, 346, 0, 341, 341, 486, 735, 0, - 341, 341, 339, 349, 349, 358, 339, 348, 348, 746, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 556, 349, 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, 379, 371, 484, 447, 538, 550, 438, - 552, 427, 612, 555, 343, 408, 375, 321, 322, 326, - 689, 414, 340, 340, 346, 319, 320, 349, 404, 346, - 349, 383, 341, 400, 386, 346, 388, 389, 397, 348, - 392, 371, 435, 436, 473, 339, 375, 341, 717, 379, - 371, 345, 419, 357, 358, 362, 375, 387, 379, 387, - 390, 387, 376, 339, 357, 341, 387, 381, 382, 340, - 400, 487, 348, 342, 404, 346, 340, 346, 519, 400, - 521, 343, 346, 404, 346, 616, 340, 349, 340, 419, - 506, 340, 346, 340, 346, 317, 318, 346, 419, 346, - 430, 346, 375, 582, 349, 647, 482, 323, 324, 430, - 594, 595, 596, 597, 351, 346, 353, 484, 349, 486, - 343, 550, 346, 552, 565, 349, 555, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 375, 346, 346, - 569, 349, 349, 364, 365, 366, 344, 348, 346, 343, - 750, 341, 482, 349, 484, 375, 486, 688, 700, 346, - 347, 482, 375, 484, 348, 486, 354, 355, 356, 346, - 347, 375, 651, 590, 591, 598, 599, 618, 592, 593, - 340, 622, 339, 341, 577, 361, 375, 360, 359, 556, - 375, 325, 327, 342, 341, 339, 344, 349, 740, 349, - 339, 339, 339, 349, 347, 375, 339, 349, 538, 638, - 639, 339, 375, 349, 340, 582, 375, 538, 647, 342, - 342, 346, 339, 342, 344, 756, 556, 383, 340, 339, - 375, 340, 343, 348, 340, 556, 349, 344, 343, 343, - 600, 349, 683, 601, 605, 602, 387, 603, 689, 604, - 706, 404, 582, 404, 489, 320, 576, 661, 691, 734, - 400, 582, 747, 746, 691, 548, 398, 717, 548, 548, - 708, 700, -1, 387, -1, -1, 717, -1, -1, -1, - -1, -1, 612, -1, 651, -1, 616, -1, 729, -1, - 706, 612, -1, 722, -1, 616, -1, -1, -1, -1, - -1, -1, -1, -1, 745, -1, -1, -1, -1, -1, - -1, 740, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 651, 689, -1, -1, -1, -1, -1, -1, -1, - 651, -1, -1, -1, -1, -1, 712, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 717, -1, -1, -1, -1, -1, -1, -1, 688, 689, - -1, 691, -1, -1, -1, -1, -1, 688, 689, -1, - 691, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 712, -1, -1, -1, -1, 717, -1, -1, - -1, 712, -1, -1, -1, -1, 717, -1, 728, -1, - -1, -1, -1, -1, -1, 735, -1, 728, -1, -1, - -1, -1, -1, -1, 735, -1, 746, -1, -1, -1, - 750, -1, -1, -1, -1, 746, 756, -1, -1, 750, - -1, -1, -1, 0, -1, 756, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, 341, -1, 343, 344, -1, -1, - -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, 341, -1, 343, 344, -1, -1, - -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, 341, -1, 343, -1, -1, -1, - -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, 341, -1, 343, -1, -1, -1, - -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, 341, -1, -1, -1, -1, -1, - -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, -1, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, -1, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, + -1, -1, -1, -1, -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 364, 365, 366, 367, -1, -1, -1, -1, -1, + -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 398, 399, 400, 401, 402, + 403, -1, -1, -1, -1, -1, -1, -1, -1, 412, + -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, + 341, -1, 343, 344, -1, -1, -1, -1, 349, 350, + 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, -1, -1, + 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, -1, 341, -1, 343, 344, -1, -1, -1, -1, + 349, 350, 351, 352, 353, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 363, 364, 365, 366, 367, -1, + -1, -1, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3105,63 +2853,196 @@ static const yytype_int16 yycheck[] = 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, 341, -1, 343, -1, -1, -1, + -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - -1, -1, -1, -1, -1, -1, -1, -1, 375, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, + 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, -1, 341, -1, 343, -1, + -1, -1, -1, -1, 349, 350, 351, 352, 353, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, + 365, 366, 367, -1, -1, -1, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 344, -1, -1, + -1, -1, -1, -1, -1, 338, 339, -1, 341, -1, + -1, -1, -1, -1, -1, -1, 349, 350, 351, 352, + 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 364, 365, 366, 367, -1, -1, -1, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 349, 350, + 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, -1, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, -1, -1, + 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, + -1, -1, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, -1, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3195,61 +3076,194 @@ static const yytype_int16 yycheck[] = 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 398, 399, 400, 401, 402, 403, -1, -1, -1, + -1, -1, -1, -1, -1, 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, + 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 344, -1, -1, + -1, -1, -1, -1, 349, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, + 365, 366, -1, -1, -1, -1, -1, -1, -1, -1, + 375, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 3, 4, 5, 6, + -1, -1, -1, 398, 399, 400, 401, 402, 403, -1, + -1, -1, -1, -1, -1, -1, -1, 412, -1, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 364, 365, 366, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 398, 399, 400, 401, 402, + 403, -1, -1, -1, -1, -1, -1, -1, -1, 412, + -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, + 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, + 401, 402, 403, -1, -1, -1, -1, -1, -1, -1, + -1, 412, -1, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, + 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, + 399, 400, 401, 402, 403, -1, -1, -1, -1, -1, + -1, -1, -1, 412, -1, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3288,54 +3302,139 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 396, - 397, 398, 399, 400, 401, -1, -1, -1, -1, -1, - -1, -1, -1, 410, -1, 412, 413, 414, 415, 416, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 398, 399, 400, 401, 402, 403, -1, -1, -1, + -1, -1, -1, -1, -1, 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, -1, -1, 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, -1, - -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, + 437, 438, 439, 440, 441, 442, 443, 444, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 338, 339, -1, -1, -1, 343, 344, -1, + -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, + 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 404, 405, + 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 426, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, + 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, -1, -1, 319, 320, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, -1, -1, 342, + -1, -1, -1, -1, -1, -1, -1, 350, 351, 352, + 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, + 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 338, 339, -1, -1, -1, 343, 344, -1, -1, -1, - -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, - -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, + -1, 404, 405, 406, 407, 408, 409, 410, 411, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 426, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, -1, -1, 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, -1, -1, 319, + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, + -1, -1, -1, 343, -1, -1, -1, -1, -1, -1, + 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, + -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 402, 403, 404, 405, 406, 407, - 408, 409, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 424, 4, 5, 6, + -1, -1, -1, -1, 404, 405, 406, 407, 408, 409, + 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 426, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3375,93 +3474,9 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 402, 403, 404, 405, 406, - 407, 408, 409, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 424, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 338, 339, -1, -1, -1, 343, -1, -1, - -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, - 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 402, 403, 404, 405, - 406, 407, 408, 409, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 424, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 338, 339, -1, -1, 342, -1, -1, - -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, - 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 402, 403, 404, - 405, 406, 407, 408, 409, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 424, + -1, -1, -1, -1, -1, -1, -1, 404, 405, 406, + 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 426, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -3501,102 +3516,104 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 402, 403, - 404, 405, 406, 407, 408, 409, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 424, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, - 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, -1, -1, 319, 320, -1, -1, + 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 338, 339, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 350, 351, 352, - 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, - 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, + -1, -1, 426, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 402, - 403, 404, 405, 406, 407, 408, 409, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 350, + 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 424, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, - -1, 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, 413, -1, 319, 320, -1, + 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, + 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 404, 405, 406, 407, 408, 409, 410, + 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 426, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, -1, -1, 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, -1, + -1, 319, 320, -1, -1, 413, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 427, - -1, -1, -1, -1, -1, -1, 338, 339, -1, -1, - -1, -1, -1, -1, -1, -1, 444, 445, 350, 351, - 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, - 372, 373, 374, 375, 376, -1, -1, -1, 476, 381, - 382, -1, -1, -1, -1, -1, -1, -1, -1, 487, + 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 350, 351, 352, 353, 444, 445, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, + -1, -1, -1, 381, 382, -1, -1, -1, 476, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 487, + -1, -1, -1, -1, -1, -1, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, -1, -1, 506, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 426, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 402, 403, 404, 405, 406, 407, 408, 409, 506, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 424, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, + -1, 589, 590, 591, 592, 593, 594, 595, 596, 597, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 574, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 587, - 588, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3606,7 +3623,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 706 + -1, -1, 710 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -3645,117 +3662,118 @@ static const yytype_int16 yystos[] = 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, 349, 363, 364, 365, 366, - 367, 376, 377, 378, 379, 380, 381, 382, 396, 397, - 398, 399, 400, 401, 410, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 474, 475, 478, 479, - 480, 481, 485, 486, 487, 488, 489, 490, 493, 494, - 495, 496, 497, 499, 504, 505, 506, 547, 548, 549, - 505, 343, 375, 339, 339, 349, 375, 349, 550, 340, - 346, 482, 483, 484, 494, 499, 346, 349, 375, 349, - 375, 495, 499, 357, 501, 502, 0, 548, 499, 508, - 343, 375, 397, 491, 492, 375, 498, 341, 349, 500, - 343, 526, 483, 482, 484, 375, 375, 339, 348, 500, - 343, 346, 349, 477, 319, 320, 338, 339, 350, 351, - 352, 353, 371, 372, 373, 374, 375, 402, 403, 404, - 405, 406, 407, 408, 409, 444, 445, 446, 448, 449, - 450, 451, 452, 453, 454, 455, 456, 497, 499, 503, - 500, 349, 494, 499, 509, 510, 507, 348, 340, 346, - 340, 346, 342, 455, 457, 458, 459, 460, 461, 462, - 463, 464, 465, 466, 467, 468, 341, 349, 341, 343, + 367, 376, 377, 378, 379, 380, 381, 382, 398, 399, + 400, 401, 402, 403, 412, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 476, 477, 480, 481, + 482, 483, 487, 488, 489, 490, 491, 492, 495, 496, + 497, 498, 499, 501, 506, 507, 508, 549, 550, 551, + 507, 343, 375, 339, 339, 349, 375, 349, 552, 340, + 346, 484, 485, 486, 496, 501, 346, 349, 375, 349, + 375, 497, 501, 357, 503, 504, 0, 550, 501, 510, + 343, 375, 399, 493, 494, 375, 500, 341, 349, 502, + 343, 528, 485, 484, 486, 375, 375, 339, 348, 502, + 343, 346, 349, 479, 319, 320, 338, 339, 350, 351, + 352, 353, 371, 372, 373, 374, 375, 404, 405, 406, + 407, 408, 409, 410, 411, 446, 447, 448, 450, 451, + 452, 453, 454, 455, 456, 457, 458, 499, 501, 505, + 502, 349, 496, 501, 511, 512, 509, 348, 340, 346, + 340, 346, 342, 457, 459, 460, 461, 462, 463, 464, + 465, 466, 467, 468, 469, 470, 341, 349, 341, 343, 344, 349, 383, 384, 385, 386, 388, 389, 390, 391, - 392, 393, 394, 395, 411, 455, 468, 470, 472, 474, - 478, 497, 499, 515, 516, 517, 518, 519, 527, 528, - 529, 530, 533, 534, 537, 538, 539, 546, 551, 500, - 348, 500, 343, 470, 513, 348, 476, 375, 346, 349, - 455, 455, 472, 319, 320, 341, 345, 340, 340, 346, - 382, 470, 339, 455, 346, 358, 499, 375, 511, 512, - 344, 510, 509, 468, 473, 492, 375, 354, 355, 356, - 351, 353, 317, 318, 321, 322, 357, 358, 323, 324, - 361, 360, 359, 325, 327, 326, 362, 342, 342, 468, - 341, 344, 520, 339, 349, 349, 541, 339, 339, 349, - 349, 472, 339, 472, 347, 349, 349, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 348, 471, 346, - 349, 344, 516, 530, 534, 539, 513, 348, 513, 514, - 513, 509, 375, 340, 447, 472, 375, 470, 455, 511, - 500, 346, 349, 344, 455, 455, 455, 457, 457, 458, - 458, 459, 459, 459, 459, 460, 460, 461, 462, 463, - 464, 465, 466, 469, 342, 375, 552, 553, 527, 540, - 516, 542, 472, 349, 472, 347, 470, 470, 513, 344, - 346, 344, 342, 349, 512, 472, 339, 342, 346, 521, - 472, 487, 494, 532, 383, 515, 528, 543, 340, 340, - 344, 513, 347, 473, 342, 553, 344, 375, 340, 339, - 532, 544, 545, 523, 524, 525, 531, 535, 470, 340, - 348, 517, 522, 526, 472, 349, 340, 387, 519, 517, - 343, 513, 340, 472, 522, 523, 527, 536, 349, 344 + 392, 393, 394, 395, 396, 397, 413, 457, 470, 472, + 474, 476, 480, 499, 501, 517, 518, 519, 520, 521, + 529, 530, 531, 532, 535, 536, 539, 540, 541, 548, + 553, 502, 348, 502, 343, 472, 515, 348, 478, 375, + 346, 349, 457, 457, 474, 319, 320, 341, 345, 340, + 340, 346, 382, 472, 339, 457, 346, 358, 501, 375, + 513, 514, 344, 512, 511, 470, 475, 494, 375, 354, + 355, 356, 351, 353, 317, 318, 321, 322, 357, 358, + 323, 324, 361, 360, 359, 325, 327, 326, 362, 342, + 342, 470, 341, 344, 522, 339, 349, 349, 543, 339, + 339, 349, 349, 474, 339, 474, 347, 349, 349, 349, + 349, 328, 329, 330, 331, 332, 333, 334, 335, 336, + 337, 348, 473, 346, 349, 344, 518, 532, 536, 541, + 515, 348, 515, 516, 515, 511, 375, 340, 449, 474, + 375, 472, 457, 513, 502, 346, 349, 344, 457, 457, + 457, 459, 459, 460, 460, 461, 461, 461, 461, 462, + 462, 463, 464, 465, 466, 467, 468, 471, 342, 375, + 554, 555, 529, 542, 518, 544, 474, 349, 474, 347, + 472, 472, 515, 344, 346, 344, 342, 349, 514, 474, + 339, 342, 346, 523, 474, 489, 496, 534, 383, 517, + 530, 545, 340, 340, 344, 515, 347, 475, 342, 555, + 344, 375, 340, 339, 534, 546, 547, 525, 526, 527, + 533, 537, 472, 340, 348, 519, 524, 528, 474, 349, + 340, 387, 521, 519, 343, 515, 340, 474, 524, 525, + 529, 538, 349, 344 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int16 yyr1[] = { - 0, 443, 444, 445, 445, 445, 445, 445, 445, 445, - 445, 445, 445, 445, 445, 445, 445, 445, 446, 446, - 446, 446, 446, 446, 447, 448, 449, 450, 450, 451, - 451, 452, 452, 453, 454, 454, 454, 455, 455, 455, - 455, 456, 456, 456, 456, 457, 457, 457, 457, 458, - 458, 458, 459, 459, 459, 460, 460, 460, 460, 460, - 461, 461, 461, 462, 462, 463, 463, 464, 464, 465, - 465, 466, 466, 467, 467, 468, 469, 468, 470, 470, - 471, 471, 471, 471, 471, 471, 471, 471, 471, 471, - 471, 472, 472, 473, 474, 474, 474, 474, 474, 474, - 474, 474, 474, 476, 475, 477, 477, 478, 479, 479, - 480, 480, 481, 482, 482, 483, 483, 483, 483, 484, - 485, 485, 485, 485, 485, 486, 486, 486, 486, 486, - 487, 487, 488, 489, 489, 489, 489, 489, 489, 489, - 489, 490, 491, 491, 492, 492, 492, 493, 494, 494, - 495, 495, 495, 495, 495, 495, 495, 496, 496, 496, - 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, - 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, - 496, 496, 496, 496, 496, 496, 496, 496, 496, 496, - 496, 496, 497, 498, 498, 499, 499, 500, 500, 500, - 500, 501, 501, 502, 503, 503, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 504, 504, 504, 504, 504, 504, 504, 504, 504, 504, - 505, 505, 505, 507, 506, 508, 506, 509, 509, 510, - 510, 511, 511, 512, 512, 513, 513, 513, 514, 514, - 515, 516, 516, 517, 517, 517, 517, 517, 517, 517, - 517, 518, 519, 520, 521, 519, 522, 522, 524, 523, - 525, 523, 526, 526, 527, 527, 528, 528, 529, 529, - 530, 531, 531, 532, 532, 533, 533, 535, 534, 536, - 536, 537, 537, 538, 538, 540, 539, 541, 539, 542, - 539, 543, 543, 544, 544, 545, 545, 546, 546, 546, - 546, 546, 546, 547, 547, 548, 548, 548, 550, 549, - 551, 552, 552, 553, 553 + 0, 445, 446, 447, 447, 447, 447, 447, 447, 447, + 447, 447, 447, 447, 447, 447, 447, 447, 448, 448, + 448, 448, 448, 448, 449, 450, 451, 452, 452, 453, + 453, 454, 454, 455, 456, 456, 456, 457, 457, 457, + 457, 458, 458, 458, 458, 459, 459, 459, 459, 460, + 460, 460, 461, 461, 461, 462, 462, 462, 462, 462, + 463, 463, 463, 464, 464, 465, 465, 466, 466, 467, + 467, 468, 468, 469, 469, 470, 471, 470, 472, 472, + 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, + 473, 474, 474, 475, 476, 476, 476, 476, 476, 476, + 476, 476, 476, 478, 477, 479, 479, 480, 481, 481, + 482, 482, 483, 484, 484, 485, 485, 485, 485, 486, + 487, 487, 487, 487, 487, 488, 488, 488, 488, 488, + 489, 489, 490, 491, 491, 491, 491, 491, 491, 491, + 491, 492, 493, 493, 494, 494, 494, 495, 496, 496, + 497, 497, 497, 497, 497, 497, 497, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, + 498, 498, 499, 500, 500, 501, 501, 502, 502, 502, + 502, 503, 503, 504, 505, 505, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, + 507, 507, 507, 509, 508, 510, 508, 511, 511, 512, + 512, 513, 513, 514, 514, 515, 515, 515, 516, 516, + 517, 518, 518, 519, 519, 519, 519, 519, 519, 519, + 519, 520, 521, 522, 523, 521, 524, 524, 526, 525, + 527, 525, 528, 528, 529, 529, 530, 530, 531, 531, + 532, 533, 533, 534, 534, 535, 535, 537, 536, 538, + 538, 539, 539, 540, 540, 542, 541, 543, 541, 544, + 541, 545, 545, 546, 546, 547, 547, 548, 548, 548, + 548, 548, 548, 548, 548, 549, 549, 550, 550, 550, + 552, 551, 553, 554, 554, 555, 555 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -3821,8 +3839,8 @@ static const yytype_int8 yyr2[] = 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, 2, 1, 2, 1, 1, 1, 0, 3, - 5, 1, 3, 1, 4 + 3, 2, 2, 2, 2, 1, 2, 1, 1, 1, + 0, 3, 5, 1, 3, 1, 4 }; @@ -4568,260 +4586,260 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); switch (yyn) { case 2: /* variable_identifier: IDENTIFIER */ -#line 370 "glslang/MachineIndependent/glslang.y" +#line 371 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 4576 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4594 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ -#line 376 "glslang/MachineIndependent/glslang.y" +#line 377 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4584 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4602 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ -#line 379 "glslang/MachineIndependent/glslang.y" +#line 380 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4594 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4612 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ -#line 384 "glslang/MachineIndependent/glslang.y" +#line 385 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4602 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4620 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ -#line 387 "glslang/MachineIndependent/glslang.y" +#line 388 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4610 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4628 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ -#line 390 "glslang/MachineIndependent/glslang.y" +#line 391 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4619 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4637 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ -#line 394 "glslang/MachineIndependent/glslang.y" +#line 395 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4627 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4645 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ -#line 398 "glslang/MachineIndependent/glslang.y" +#line 399 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 4635 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4653 "MachineIndependent/glslang_tab.cpp" break; case 10: /* primary_expression: INT32CONSTANT */ -#line 401 "glslang/MachineIndependent/glslang.y" +#line 402 "MachineIndependent/glslang.y" { 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 4644 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4662 "MachineIndependent/glslang_tab.cpp" break; case 11: /* primary_expression: UINT32CONSTANT */ -#line 405 "glslang/MachineIndependent/glslang.y" +#line 406 "MachineIndependent/glslang.y" { 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 4653 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4671 "MachineIndependent/glslang_tab.cpp" break; case 12: /* primary_expression: INT64CONSTANT */ -#line 409 "glslang/MachineIndependent/glslang.y" +#line 410 "MachineIndependent/glslang.y" { 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 4662 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4680 "MachineIndependent/glslang_tab.cpp" break; case 13: /* primary_expression: UINT64CONSTANT */ -#line 413 "glslang/MachineIndependent/glslang.y" +#line 414 "MachineIndependent/glslang.y" { 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 4671 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4689 "MachineIndependent/glslang_tab.cpp" break; case 14: /* primary_expression: INT16CONSTANT */ -#line 417 "glslang/MachineIndependent/glslang.y" +#line 418 "MachineIndependent/glslang.y" { 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 4680 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4698 "MachineIndependent/glslang_tab.cpp" break; case 15: /* primary_expression: UINT16CONSTANT */ -#line 421 "glslang/MachineIndependent/glslang.y" +#line 422 "MachineIndependent/glslang.y" { 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 4689 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4707 "MachineIndependent/glslang_tab.cpp" break; case 16: /* primary_expression: DOUBLECONSTANT */ -#line 425 "glslang/MachineIndependent/glslang.y" +#line 426 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal"); if (! parseContext.symbolTable.atBuiltInLevel()) 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 4700 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4718 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ -#line 431 "glslang/MachineIndependent/glslang.y" +#line 432 "MachineIndependent/glslang.y" { 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 4709 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4727 "MachineIndependent/glslang_tab.cpp" break; case 18: /* postfix_expression: primary_expression */ -#line 439 "glslang/MachineIndependent/glslang.y" +#line 440 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4717 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4735 "MachineIndependent/glslang_tab.cpp" break; case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ -#line 442 "glslang/MachineIndependent/glslang.y" +#line 443 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4725 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4743 "MachineIndependent/glslang_tab.cpp" break; case 20: /* postfix_expression: function_call */ -#line 445 "glslang/MachineIndependent/glslang.y" +#line 446 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4733 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4751 "MachineIndependent/glslang_tab.cpp" break; case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ -#line 448 "glslang/MachineIndependent/glslang.y" +#line 449 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4741 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4759 "MachineIndependent/glslang_tab.cpp" break; case 22: /* postfix_expression: postfix_expression INC_OP */ -#line 451 "glslang/MachineIndependent/glslang.y" +#line 452 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4751 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4769 "MachineIndependent/glslang_tab.cpp" break; case 23: /* postfix_expression: postfix_expression DEC_OP */ -#line 456 "glslang/MachineIndependent/glslang.y" +#line 457 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4761 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4779 "MachineIndependent/glslang_tab.cpp" break; case 24: /* integer_expression: expression */ -#line 464 "glslang/MachineIndependent/glslang.y" +#line 465 "MachineIndependent/glslang.y" { parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4770 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4788 "MachineIndependent/glslang_tab.cpp" break; case 25: /* function_call: function_call_or_method */ -#line 471 "glslang/MachineIndependent/glslang.y" +#line 472 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 4779 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4797 "MachineIndependent/glslang_tab.cpp" break; case 26: /* function_call_or_method: function_call_generic */ -#line 478 "glslang/MachineIndependent/glslang.y" +#line 479 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 4787 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4805 "MachineIndependent/glslang_tab.cpp" break; case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ -#line 484 "glslang/MachineIndependent/glslang.y" +#line 485 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4796 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4814 "MachineIndependent/glslang_tab.cpp" break; case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ -#line 488 "glslang/MachineIndependent/glslang.y" +#line 489 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4805 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4823 "MachineIndependent/glslang_tab.cpp" break; case 29: /* function_call_header_no_parameters: function_call_header VOID */ -#line 495 "glslang/MachineIndependent/glslang.y" +#line 496 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 4813 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4831 "MachineIndependent/glslang_tab.cpp" break; case 30: /* function_call_header_no_parameters: function_call_header */ -#line 498 "glslang/MachineIndependent/glslang.y" +#line 499 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 4821 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4839 "MachineIndependent/glslang_tab.cpp" break; case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ -#line 504 "glslang/MachineIndependent/glslang.y" +#line 505 "MachineIndependent/glslang.y" { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); @@ -4829,11 +4847,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 4833 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4851 "MachineIndependent/glslang_tab.cpp" break; case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ -#line 511 "glslang/MachineIndependent/glslang.y" +#line 512 "MachineIndependent/glslang.y" { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); @@ -4841,29 +4859,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 4845 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4863 "MachineIndependent/glslang_tab.cpp" break; case 33: /* function_call_header: function_identifier LEFT_PAREN */ -#line 521 "glslang/MachineIndependent/glslang.y" +#line 522 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 4853 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4871 "MachineIndependent/glslang_tab.cpp" break; case 34: /* function_identifier: type_specifier */ -#line 529 "glslang/MachineIndependent/glslang.y" +#line 530 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4863 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4881 "MachineIndependent/glslang_tab.cpp" break; case 35: /* function_identifier: postfix_expression */ -#line 534 "glslang/MachineIndependent/glslang.y" +#line 535 "MachineIndependent/glslang.y" { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. @@ -4891,50 +4909,50 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 4895 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4913 "MachineIndependent/glslang_tab.cpp" break; case 36: /* function_identifier: non_uniform_qualifier */ -#line 562 "glslang/MachineIndependent/glslang.y" +#line 563 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4905 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4923 "MachineIndependent/glslang_tab.cpp" break; case 37: /* unary_expression: postfix_expression */ -#line 571 "glslang/MachineIndependent/glslang.y" +#line 572 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 4916 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4934 "MachineIndependent/glslang_tab.cpp" break; case 38: /* unary_expression: INC_OP unary_expression */ -#line 577 "glslang/MachineIndependent/glslang.y" +#line 578 "MachineIndependent/glslang.y" { 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 4925 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4943 "MachineIndependent/glslang_tab.cpp" break; case 39: /* unary_expression: DEC_OP unary_expression */ -#line 581 "glslang/MachineIndependent/glslang.y" +#line 582 "MachineIndependent/glslang.y" { 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 4934 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4952 "MachineIndependent/glslang_tab.cpp" break; case 40: /* unary_expression: unary_operator unary_expression */ -#line 585 "glslang/MachineIndependent/glslang.y" +#line 586 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; @@ -4951,179 +4969,179 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 4955 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4973 "MachineIndependent/glslang_tab.cpp" break; case 41: /* unary_operator: PLUS */ -#line 605 "glslang/MachineIndependent/glslang.y" +#line 606 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 4961 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4979 "MachineIndependent/glslang_tab.cpp" break; case 42: /* unary_operator: DASH */ -#line 606 "glslang/MachineIndependent/glslang.y" +#line 607 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 4967 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4985 "MachineIndependent/glslang_tab.cpp" break; case 43: /* unary_operator: BANG */ -#line 607 "glslang/MachineIndependent/glslang.y" +#line 608 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 4973 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4991 "MachineIndependent/glslang_tab.cpp" break; case 44: /* unary_operator: TILDE */ -#line 608 "glslang/MachineIndependent/glslang.y" +#line 609 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 4980 "glslang/MachineIndependent/glslang_tab.cpp" +#line 4998 "MachineIndependent/glslang_tab.cpp" break; case 45: /* multiplicative_expression: unary_expression */ -#line 614 "glslang/MachineIndependent/glslang.y" +#line 615 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4986 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5004 "MachineIndependent/glslang_tab.cpp" break; case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ -#line 615 "glslang/MachineIndependent/glslang.y" +#line 616 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 4996 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5014 "MachineIndependent/glslang_tab.cpp" break; case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ -#line 620 "glslang/MachineIndependent/glslang.y" +#line 621 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5006 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5024 "MachineIndependent/glslang_tab.cpp" break; case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ -#line 625 "glslang/MachineIndependent/glslang.y" +#line 626 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5017 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5035 "MachineIndependent/glslang_tab.cpp" break; case 49: /* additive_expression: multiplicative_expression */ -#line 634 "glslang/MachineIndependent/glslang.y" +#line 635 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5023 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5041 "MachineIndependent/glslang_tab.cpp" break; case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ -#line 635 "glslang/MachineIndependent/glslang.y" +#line 636 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5033 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5051 "MachineIndependent/glslang_tab.cpp" break; case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ -#line 640 "glslang/MachineIndependent/glslang.y" +#line 641 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5043 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5061 "MachineIndependent/glslang_tab.cpp" break; case 52: /* shift_expression: additive_expression */ -#line 648 "glslang/MachineIndependent/glslang.y" +#line 649 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5049 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5067 "MachineIndependent/glslang_tab.cpp" break; case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ -#line 649 "glslang/MachineIndependent/glslang.y" +#line 650 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5060 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5078 "MachineIndependent/glslang_tab.cpp" break; case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ -#line 655 "glslang/MachineIndependent/glslang.y" +#line 656 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5071 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5089 "MachineIndependent/glslang_tab.cpp" break; case 55: /* relational_expression: shift_expression */ -#line 664 "glslang/MachineIndependent/glslang.y" +#line 665 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5077 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5095 "MachineIndependent/glslang_tab.cpp" break; case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ -#line 665 "glslang/MachineIndependent/glslang.y" +#line 666 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5087 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5105 "MachineIndependent/glslang_tab.cpp" break; case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ -#line 670 "glslang/MachineIndependent/glslang.y" +#line 671 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5097 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5115 "MachineIndependent/glslang_tab.cpp" break; case 58: /* relational_expression: relational_expression LE_OP shift_expression */ -#line 675 "glslang/MachineIndependent/glslang.y" +#line 676 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5107 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5125 "MachineIndependent/glslang_tab.cpp" break; case 59: /* relational_expression: relational_expression GE_OP shift_expression */ -#line 680 "glslang/MachineIndependent/glslang.y" +#line 681 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5117 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5135 "MachineIndependent/glslang_tab.cpp" break; case 60: /* equality_expression: relational_expression */ -#line 688 "glslang/MachineIndependent/glslang.y" +#line 689 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5123 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5141 "MachineIndependent/glslang_tab.cpp" break; case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ -#line 689 "glslang/MachineIndependent/glslang.y" +#line 690 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=="); @@ -5133,11 +5151,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5137 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5155 "MachineIndependent/glslang_tab.cpp" break; case 62: /* equality_expression: equality_expression NE_OP relational_expression */ -#line 698 "glslang/MachineIndependent/glslang.y" +#line 699 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!="); @@ -5147,124 +5165,124 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5151 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5169 "MachineIndependent/glslang_tab.cpp" break; case 63: /* and_expression: equality_expression */ -#line 710 "glslang/MachineIndependent/glslang.y" +#line 711 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5157 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5175 "MachineIndependent/glslang_tab.cpp" break; case 64: /* and_expression: and_expression AMPERSAND equality_expression */ -#line 711 "glslang/MachineIndependent/glslang.y" +#line 712 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5168 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5186 "MachineIndependent/glslang_tab.cpp" break; case 65: /* exclusive_or_expression: and_expression */ -#line 720 "glslang/MachineIndependent/glslang.y" +#line 721 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5174 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5192 "MachineIndependent/glslang_tab.cpp" break; case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ -#line 721 "glslang/MachineIndependent/glslang.y" +#line 722 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5185 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5203 "MachineIndependent/glslang_tab.cpp" break; case 67: /* inclusive_or_expression: exclusive_or_expression */ -#line 730 "glslang/MachineIndependent/glslang.y" +#line 731 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5191 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5209 "MachineIndependent/glslang_tab.cpp" break; case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ -#line 731 "glslang/MachineIndependent/glslang.y" +#line 732 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5202 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5220 "MachineIndependent/glslang_tab.cpp" break; case 69: /* logical_and_expression: inclusive_or_expression */ -#line 740 "glslang/MachineIndependent/glslang.y" +#line 741 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5208 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5226 "MachineIndependent/glslang_tab.cpp" break; case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ -#line 741 "glslang/MachineIndependent/glslang.y" +#line 742 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5218 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5236 "MachineIndependent/glslang_tab.cpp" break; case 71: /* logical_xor_expression: logical_and_expression */ -#line 749 "glslang/MachineIndependent/glslang.y" +#line 750 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5224 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5242 "MachineIndependent/glslang_tab.cpp" break; case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ -#line 750 "glslang/MachineIndependent/glslang.y" +#line 751 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5234 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5252 "MachineIndependent/glslang_tab.cpp" break; case 73: /* logical_or_expression: logical_xor_expression */ -#line 758 "glslang/MachineIndependent/glslang.y" +#line 759 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5240 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5258 "MachineIndependent/glslang_tab.cpp" break; case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ -#line 759 "glslang/MachineIndependent/glslang.y" +#line 760 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5250 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5268 "MachineIndependent/glslang_tab.cpp" break; case 75: /* conditional_expression: logical_or_expression */ -#line 767 "glslang/MachineIndependent/glslang.y" +#line 768 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5256 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5274 "MachineIndependent/glslang_tab.cpp" break; case 76: /* $@1: %empty */ -#line 768 "glslang/MachineIndependent/glslang.y" +#line 769 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 5264 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5282 "MachineIndependent/glslang_tab.cpp" break; case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ -#line 771 "glslang/MachineIndependent/glslang.y" +#line 772 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); @@ -5277,17 +5295,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5281 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5299 "MachineIndependent/glslang_tab.cpp" break; case 78: /* assignment_expression: conditional_expression */ -#line 786 "glslang/MachineIndependent/glslang.y" +#line 787 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5287 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5305 "MachineIndependent/glslang_tab.cpp" break; case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ -#line 787 "glslang/MachineIndependent/glslang.y" +#line 788 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment"); parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); @@ -5301,119 +5319,119 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 5305 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5323 "MachineIndependent/glslang_tab.cpp" break; case 80: /* assignment_operator: EQUAL */ -#line 803 "glslang/MachineIndependent/glslang.y" +#line 804 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 5314 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5332 "MachineIndependent/glslang_tab.cpp" break; case 81: /* assignment_operator: MUL_ASSIGN */ -#line 807 "glslang/MachineIndependent/glslang.y" +#line 808 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 5323 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5341 "MachineIndependent/glslang_tab.cpp" break; case 82: /* assignment_operator: DIV_ASSIGN */ -#line 811 "glslang/MachineIndependent/glslang.y" +#line 812 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 5332 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5350 "MachineIndependent/glslang_tab.cpp" break; case 83: /* assignment_operator: MOD_ASSIGN */ -#line 815 "glslang/MachineIndependent/glslang.y" +#line 816 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%="); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 5342 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5360 "MachineIndependent/glslang_tab.cpp" break; case 84: /* assignment_operator: ADD_ASSIGN */ -#line 820 "glslang/MachineIndependent/glslang.y" +#line 821 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5351 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5369 "MachineIndependent/glslang_tab.cpp" break; case 85: /* assignment_operator: SUB_ASSIGN */ -#line 824 "glslang/MachineIndependent/glslang.y" +#line 825 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5360 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5378 "MachineIndependent/glslang_tab.cpp" break; case 86: /* assignment_operator: LEFT_ASSIGN */ -#line 828 "glslang/MachineIndependent/glslang.y" +#line 829 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5369 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5387 "MachineIndependent/glslang_tab.cpp" break; case 87: /* assignment_operator: RIGHT_ASSIGN */ -#line 832 "glslang/MachineIndependent/glslang.y" +#line 833 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5378 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5396 "MachineIndependent/glslang_tab.cpp" break; case 88: /* assignment_operator: AND_ASSIGN */ -#line 836 "glslang/MachineIndependent/glslang.y" +#line 837 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5387 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5405 "MachineIndependent/glslang_tab.cpp" break; case 89: /* assignment_operator: XOR_ASSIGN */ -#line 840 "glslang/MachineIndependent/glslang.y" +#line 841 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 5396 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5414 "MachineIndependent/glslang_tab.cpp" break; case 90: /* assignment_operator: OR_ASSIGN */ -#line 844 "glslang/MachineIndependent/glslang.y" +#line 845 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 5405 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5423 "MachineIndependent/glslang_tab.cpp" break; case 91: /* expression: assignment_expression */ -#line 851 "glslang/MachineIndependent/glslang.y" +#line 852 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5413 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5431 "MachineIndependent/glslang_tab.cpp" break; case 92: /* expression: expression COMMA assignment_expression */ -#line 854 "glslang/MachineIndependent/glslang.y" +#line 855 "MachineIndependent/glslang.y" { parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); @@ -5422,40 +5440,40 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5426 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5444 "MachineIndependent/glslang_tab.cpp" break; case 93: /* constant_expression: conditional_expression */ -#line 865 "glslang/MachineIndependent/glslang.y" +#line 866 "MachineIndependent/glslang.y" { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5435 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5453 "MachineIndependent/glslang_tab.cpp" break; case 94: /* declaration: function_prototype SEMICOLON */ -#line 872 "glslang/MachineIndependent/glslang.y" +#line 873 "MachineIndependent/glslang.y" { parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 5445 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5463 "MachineIndependent/glslang_tab.cpp" break; case 95: /* declaration: init_declarator_list SEMICOLON */ -#line 877 "glslang/MachineIndependent/glslang.y" +#line 878 "MachineIndependent/glslang.y" { 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 5455 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5473 "MachineIndependent/glslang_tab.cpp" break; case 96: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ -#line 882 "glslang/MachineIndependent/glslang.y" +#line 883 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement"); // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope @@ -5463,75 +5481,75 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 5467 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5485 "MachineIndependent/glslang_tab.cpp" break; case 97: /* declaration: block_structure SEMICOLON */ -#line 889 "glslang/MachineIndependent/glslang.y" +#line 890 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 5476 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5494 "MachineIndependent/glslang_tab.cpp" break; case 98: /* declaration: block_structure IDENTIFIER SEMICOLON */ -#line 893 "glslang/MachineIndependent/glslang.y" +#line 894 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5485 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5503 "MachineIndependent/glslang_tab.cpp" break; case 99: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ -#line 897 "glslang/MachineIndependent/glslang.y" +#line 898 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 5494 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5512 "MachineIndependent/glslang_tab.cpp" break; case 100: /* declaration: type_qualifier SEMICOLON */ -#line 901 "glslang/MachineIndependent/glslang.y" +#line 902 "MachineIndependent/glslang.y" { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 5504 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5522 "MachineIndependent/glslang_tab.cpp" break; case 101: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ -#line 906 "glslang/MachineIndependent/glslang.y" +#line 907 "MachineIndependent/glslang.y" { parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5514 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5532 "MachineIndependent/glslang_tab.cpp" break; case 102: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ -#line 911 "glslang/MachineIndependent/glslang.y" +#line 912 "MachineIndependent/glslang.y" { parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers); (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 5525 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5543 "MachineIndependent/glslang_tab.cpp" break; case 103: /* $@2: %empty */ -#line 920 "glslang/MachineIndependent/glslang.y" +#line 921 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 5531 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5549 "MachineIndependent/glslang_tab.cpp" break; case 104: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ -#line 920 "glslang/MachineIndependent/glslang.y" +#line 921 "MachineIndependent/glslang.y" { --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; @@ -5541,54 +5559,54 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 5545 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5563 "MachineIndependent/glslang_tab.cpp" break; case 105: /* identifier_list: COMMA IDENTIFIER */ -#line 931 "glslang/MachineIndependent/glslang.y" +#line 932 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5554 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5572 "MachineIndependent/glslang_tab.cpp" break; case 106: /* identifier_list: identifier_list COMMA IDENTIFIER */ -#line 935 "glslang/MachineIndependent/glslang.y" +#line 936 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5563 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5581 "MachineIndependent/glslang_tab.cpp" break; case 107: /* function_prototype: function_declarator RIGHT_PAREN */ -#line 942 "glslang/MachineIndependent/glslang.y" +#line 943 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5572 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5590 "MachineIndependent/glslang_tab.cpp" break; case 108: /* function_declarator: function_header */ -#line 949 "glslang/MachineIndependent/glslang.y" +#line 950 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5580 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5598 "MachineIndependent/glslang_tab.cpp" break; case 109: /* function_declarator: function_header_with_parameters */ -#line 952 "glslang/MachineIndependent/glslang.y" +#line 953 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5588 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5606 "MachineIndependent/glslang_tab.cpp" break; case 110: /* function_header_with_parameters: function_header parameter_declaration */ -#line 959 "glslang/MachineIndependent/glslang.y" +#line 960 "MachineIndependent/glslang.y" { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); @@ -5597,11 +5615,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 5601 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5619 "MachineIndependent/glslang_tab.cpp" break; case 111: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ -#line 967 "glslang/MachineIndependent/glslang.y" +#line 968 "MachineIndependent/glslang.y" { // // Only first parameter of one-parameter functions can be void @@ -5619,11 +5637,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5623 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5641 "MachineIndependent/glslang_tab.cpp" break; case 112: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ -#line 987 "glslang/MachineIndependent/glslang.y" +#line 988 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) { parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return", @@ -5643,11 +5661,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5647 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5665 "MachineIndependent/glslang_tab.cpp" break; case 113: /* parameter_declarator: type_specifier IDENTIFIER */ -#line 1010 "glslang/MachineIndependent/glslang.y" +#line 1011 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5663,11 +5681,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5667 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5685 "MachineIndependent/glslang_tab.cpp" break; case 114: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ -#line 1025 "glslang/MachineIndependent/glslang.y" +#line 1026 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5687,11 +5705,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5691 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5709 "MachineIndependent/glslang_tab.cpp" break; case 115: /* parameter_declaration: type_qualifier parameter_declarator */ -#line 1050 "glslang/MachineIndependent/glslang.y" +#line 1051 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5703,11 +5721,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5707 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5725 "MachineIndependent/glslang_tab.cpp" break; case 116: /* parameter_declaration: parameter_declarator */ -#line 1061 "glslang/MachineIndependent/glslang.y" +#line 1062 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -5715,11 +5733,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5719 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5737 "MachineIndependent/glslang_tab.cpp" break; case 117: /* parameter_declaration: type_qualifier parameter_type_specifier */ -#line 1071 "glslang/MachineIndependent/glslang.y" +#line 1072 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5730,11 +5748,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5734 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5752 "MachineIndependent/glslang_tab.cpp" break; case 118: /* parameter_declaration: parameter_type_specifier */ -#line 1081 "glslang/MachineIndependent/glslang.y" +#line 1082 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -5742,68 +5760,68 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5746 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5764 "MachineIndependent/glslang_tab.cpp" break; case 119: /* parameter_type_specifier: type_specifier */ -#line 1091 "glslang/MachineIndependent/glslang.y" +#line 1092 "MachineIndependent/glslang.y" { TParameter param = { 0, new TType((yyvsp[0].interm.type)) }; (yyval.interm).param = param; if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5757 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5775 "MachineIndependent/glslang_tab.cpp" break; case 120: /* init_declarator_list: single_declaration */ -#line 1100 "glslang/MachineIndependent/glslang.y" +#line 1101 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5765 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5783 "MachineIndependent/glslang_tab.cpp" break; case 121: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ -#line 1103 "glslang/MachineIndependent/glslang.y" +#line 1104 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 5774 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5792 "MachineIndependent/glslang_tab.cpp" break; case 122: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ -#line 1107 "glslang/MachineIndependent/glslang.y" +#line 1108 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 5783 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5801 "MachineIndependent/glslang_tab.cpp" break; case 123: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ -#line 1111 "glslang/MachineIndependent/glslang.y" +#line 1112 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-5].interm).type; 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 5793 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5811 "MachineIndependent/glslang_tab.cpp" break; case 124: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ -#line 1116 "glslang/MachineIndependent/glslang.y" +#line 1117 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm).type; 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 5803 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5821 "MachineIndependent/glslang_tab.cpp" break; case 125: /* single_declaration: fully_specified_type */ -#line 1124 "glslang/MachineIndependent/glslang.y" +#line 1125 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; @@ -5811,51 +5829,51 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 5815 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5833 "MachineIndependent/glslang_tab.cpp" break; case 126: /* single_declaration: fully_specified_type IDENTIFIER */ -#line 1131 "glslang/MachineIndependent/glslang.y" +#line 1132 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-1].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 5825 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5843 "MachineIndependent/glslang_tab.cpp" break; case 127: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ -#line 1136 "glslang/MachineIndependent/glslang.y" +#line 1137 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-2].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 5835 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5853 "MachineIndependent/glslang_tab.cpp" break; case 128: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ -#line 1141 "glslang/MachineIndependent/glslang.y" +#line 1142 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm.type); 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 5845 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5863 "MachineIndependent/glslang_tab.cpp" break; case 129: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 1146 "glslang/MachineIndependent/glslang.y" +#line 1147 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-3].interm.type); 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 5855 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5873 "MachineIndependent/glslang_tab.cpp" break; case 130: /* fully_specified_type: type_specifier */ -#line 1155 "glslang/MachineIndependent/glslang.y" +#line 1156 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -5866,11 +5884,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 5870 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5888 "MachineIndependent/glslang_tab.cpp" break; case 131: /* fully_specified_type: type_qualifier type_specifier */ -#line 1165 "glslang/MachineIndependent/glslang.y" +#line 1166 "MachineIndependent/glslang.y" { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type)); @@ -5895,22 +5913,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 5899 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5917 "MachineIndependent/glslang_tab.cpp" break; case 132: /* invariant_qualifier: INVARIANT */ -#line 1192 "glslang/MachineIndependent/glslang.y" +#line 1193 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "invariant"); parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 5910 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5928 "MachineIndependent/glslang_tab.cpp" break; case 133: /* interpolation_qualifier: SMOOTH */ -#line 1201 "glslang/MachineIndependent/glslang.y" +#line 1202 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); @@ -5918,11 +5936,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 5922 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5940 "MachineIndependent/glslang_tab.cpp" break; case 134: /* interpolation_qualifier: FLAT */ -#line 1208 "glslang/MachineIndependent/glslang.y" +#line 1209 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); @@ -5930,11 +5948,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 5934 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5952 "MachineIndependent/glslang_tab.cpp" break; case 135: /* interpolation_qualifier: NOPERSPECTIVE */ -#line 1216 "glslang/MachineIndependent/glslang.y" +#line 1217 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); @@ -5942,11 +5960,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 5946 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5964 "MachineIndependent/glslang_tab.cpp" break; case 136: /* interpolation_qualifier: EXPLICITINTERPAMD */ -#line 1223 "glslang/MachineIndependent/glslang.y" +#line 1224 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); @@ -5954,11 +5972,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 5958 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5976 "MachineIndependent/glslang_tab.cpp" break; case 137: /* interpolation_qualifier: PERVERTEXNV */ -#line 1230 "glslang/MachineIndependent/glslang.y" +#line 1231 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); @@ -5967,11 +5985,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 5971 "glslang/MachineIndependent/glslang_tab.cpp" +#line 5989 "MachineIndependent/glslang_tab.cpp" break; case 138: /* interpolation_qualifier: PERPRIMITIVENV */ -#line 1238 "glslang/MachineIndependent/glslang.y" +#line 1239 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); @@ -5982,11 +6000,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 5986 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6004 "MachineIndependent/glslang_tab.cpp" break; case 139: /* interpolation_qualifier: PERVIEWNV */ -#line 1248 "glslang/MachineIndependent/glslang.y" +#line 1249 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); @@ -5994,11 +6012,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 5998 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6016 "MachineIndependent/glslang_tab.cpp" break; case 140: /* interpolation_qualifier: PERTASKNV */ -#line 1255 "glslang/MachineIndependent/glslang.y" +#line 1256 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); @@ -6006,84 +6024,84 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 6010 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6028 "MachineIndependent/glslang_tab.cpp" break; case 141: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ -#line 1266 "glslang/MachineIndependent/glslang.y" +#line 1267 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 6018 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6036 "MachineIndependent/glslang_tab.cpp" break; case 142: /* layout_qualifier_id_list: layout_qualifier_id */ -#line 1272 "glslang/MachineIndependent/glslang.y" +#line 1273 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6026 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6044 "MachineIndependent/glslang_tab.cpp" break; case 143: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ -#line 1275 "glslang/MachineIndependent/glslang.y" +#line 1276 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 6036 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6054 "MachineIndependent/glslang_tab.cpp" break; case 144: /* layout_qualifier_id: IDENTIFIER */ -#line 1282 "glslang/MachineIndependent/glslang.y" +#line 1283 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 6045 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6063 "MachineIndependent/glslang_tab.cpp" break; case 145: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ -#line 1286 "glslang/MachineIndependent/glslang.y" +#line 1287 "MachineIndependent/glslang.y" { (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 6054 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6072 "MachineIndependent/glslang_tab.cpp" break; case 146: /* layout_qualifier_id: SHARED */ -#line 1290 "glslang/MachineIndependent/glslang.y" +#line 1291 "MachineIndependent/glslang.y" { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 6064 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6082 "MachineIndependent/glslang_tab.cpp" break; case 147: /* precise_qualifier: PRECISE */ -#line 1299 "glslang/MachineIndependent/glslang.y" +#line 1300 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 6075 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6093 "MachineIndependent/glslang_tab.cpp" break; case 148: /* type_qualifier: single_type_qualifier */ -#line 1309 "glslang/MachineIndependent/glslang.y" +#line 1310 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6083 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6101 "MachineIndependent/glslang_tab.cpp" break; case 149: /* type_qualifier: type_qualifier single_type_qualifier */ -#line 1312 "glslang/MachineIndependent/glslang.y" +#line 1313 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -6092,112 +6110,112 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 6096 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6114 "MachineIndependent/glslang_tab.cpp" break; case 150: /* single_type_qualifier: storage_qualifier */ -#line 1323 "glslang/MachineIndependent/glslang.y" +#line 1324 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6104 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6122 "MachineIndependent/glslang_tab.cpp" break; case 151: /* single_type_qualifier: layout_qualifier */ -#line 1326 "glslang/MachineIndependent/glslang.y" +#line 1327 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6112 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6130 "MachineIndependent/glslang_tab.cpp" break; case 152: /* single_type_qualifier: precision_qualifier */ -#line 1329 "glslang/MachineIndependent/glslang.y" +#line 1330 "MachineIndependent/glslang.y" { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6121 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6139 "MachineIndependent/glslang_tab.cpp" break; case 153: /* single_type_qualifier: interpolation_qualifier */ -#line 1333 "glslang/MachineIndependent/glslang.y" +#line 1334 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6130 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6148 "MachineIndependent/glslang_tab.cpp" break; case 154: /* single_type_qualifier: invariant_qualifier */ -#line 1337 "glslang/MachineIndependent/glslang.y" +#line 1338 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6139 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6157 "MachineIndependent/glslang_tab.cpp" break; case 155: /* single_type_qualifier: precise_qualifier */ -#line 1342 "glslang/MachineIndependent/glslang.y" +#line 1343 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6148 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6166 "MachineIndependent/glslang_tab.cpp" break; case 156: /* single_type_qualifier: non_uniform_qualifier */ -#line 1346 "glslang/MachineIndependent/glslang.y" +#line 1347 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6156 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6174 "MachineIndependent/glslang_tab.cpp" break; case 157: /* storage_qualifier: CONST */ -#line 1353 "glslang/MachineIndependent/glslang.y" +#line 1354 "MachineIndependent/glslang.y" { (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 6165 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6183 "MachineIndependent/glslang_tab.cpp" break; case 158: /* storage_qualifier: INOUT */ -#line 1357 "glslang/MachineIndependent/glslang.y" +#line 1358 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 6175 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6193 "MachineIndependent/glslang_tab.cpp" break; case 159: /* storage_qualifier: IN */ -#line 1362 "glslang/MachineIndependent/glslang.y" +#line 1363 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 6186 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6204 "MachineIndependent/glslang_tab.cpp" break; case 160: /* storage_qualifier: OUT */ -#line 1368 "glslang/MachineIndependent/glslang.y" +#line 1369 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 6197 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6215 "MachineIndependent/glslang_tab.cpp" break; case 161: /* storage_qualifier: CENTROID */ -#line 1374 "glslang/MachineIndependent/glslang.y" +#line 1375 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -6205,21 +6223,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 6209 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6227 "MachineIndependent/glslang_tab.cpp" break; case 162: /* storage_qualifier: UNIFORM */ -#line 1381 "glslang/MachineIndependent/glslang.y" +#line 1382 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 6219 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6237 "MachineIndependent/glslang_tab.cpp" break; case 163: /* storage_qualifier: SHARED */ -#line 1386 "glslang/MachineIndependent/glslang.y" +#line 1387 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); @@ -6228,21 +6246,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 6232 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6250 "MachineIndependent/glslang_tab.cpp" break; case 164: /* storage_qualifier: BUFFER */ -#line 1394 "glslang/MachineIndependent/glslang.y" +#line 1395 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 6242 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6260 "MachineIndependent/glslang_tab.cpp" break; case 165: /* storage_qualifier: ATTRIBUTE */ -#line 1400 "glslang/MachineIndependent/glslang.y" +#line 1401 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -6255,11 +6273,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6259 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6277 "MachineIndependent/glslang_tab.cpp" break; case 166: /* storage_qualifier: VARYING */ -#line 1412 "glslang/MachineIndependent/glslang.y" +#line 1413 "MachineIndependent/glslang.y" { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -6274,32 +6292,32 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6278 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6296 "MachineIndependent/glslang_tab.cpp" break; case 167: /* storage_qualifier: PATCH */ -#line 1426 "glslang/MachineIndependent/glslang.y" +#line 1427 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 6289 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6307 "MachineIndependent/glslang_tab.cpp" break; case 168: /* storage_qualifier: SAMPLE */ -#line 1432 "glslang/MachineIndependent/glslang.y" +#line 1433 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 6299 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6317 "MachineIndependent/glslang_tab.cpp" break; case 169: /* storage_qualifier: HITATTRNV */ -#line 1437 "glslang/MachineIndependent/glslang.y" +#line 1438 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -6308,11 +6326,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6312 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6330 "MachineIndependent/glslang_tab.cpp" break; case 170: /* storage_qualifier: HITATTREXT */ -#line 1445 "glslang/MachineIndependent/glslang.y" +#line 1446 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -6321,11 +6339,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6325 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6343 "MachineIndependent/glslang_tab.cpp" break; case 171: /* storage_qualifier: PAYLOADNV */ -#line 1453 "glslang/MachineIndependent/glslang.y" +#line 1454 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -6334,11 +6352,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6338 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6356 "MachineIndependent/glslang_tab.cpp" break; case 172: /* storage_qualifier: PAYLOADEXT */ -#line 1461 "glslang/MachineIndependent/glslang.y" +#line 1462 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -6347,11 +6365,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6351 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6369 "MachineIndependent/glslang_tab.cpp" break; case 173: /* storage_qualifier: PAYLOADINNV */ -#line 1469 "glslang/MachineIndependent/glslang.y" +#line 1470 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6360,11 +6378,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6364 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6382 "MachineIndependent/glslang_tab.cpp" break; case 174: /* storage_qualifier: PAYLOADINEXT */ -#line 1477 "glslang/MachineIndependent/glslang.y" +#line 1478 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6373,11 +6391,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6377 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6395 "MachineIndependent/glslang_tab.cpp" break; case 175: /* storage_qualifier: CALLDATANV */ -#line 1485 "glslang/MachineIndependent/glslang.y" +#line 1486 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6386,11 +6404,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6390 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6408 "MachineIndependent/glslang_tab.cpp" break; case 176: /* storage_qualifier: CALLDATAEXT */ -#line 1493 "glslang/MachineIndependent/glslang.y" +#line 1494 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6399,11 +6417,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6403 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6421 "MachineIndependent/glslang_tab.cpp" break; case 177: /* storage_qualifier: CALLDATAINNV */ -#line 1501 "glslang/MachineIndependent/glslang.y" +#line 1502 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -6411,11 +6429,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6415 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6433 "MachineIndependent/glslang_tab.cpp" break; case 178: /* storage_qualifier: CALLDATAINEXT */ -#line 1508 "glslang/MachineIndependent/glslang.y" +#line 1509 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -6423,175 +6441,175 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6427 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6445 "MachineIndependent/glslang_tab.cpp" break; case 179: /* storage_qualifier: COHERENT */ -#line 1515 "glslang/MachineIndependent/glslang.y" +#line 1516 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 6436 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6454 "MachineIndependent/glslang_tab.cpp" break; case 180: /* storage_qualifier: DEVICECOHERENT */ -#line 1519 "glslang/MachineIndependent/glslang.y" +#line 1520 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 6446 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6464 "MachineIndependent/glslang_tab.cpp" break; case 181: /* storage_qualifier: QUEUEFAMILYCOHERENT */ -#line 1524 "glslang/MachineIndependent/glslang.y" +#line 1525 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 6456 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6474 "MachineIndependent/glslang_tab.cpp" break; case 182: /* storage_qualifier: WORKGROUPCOHERENT */ -#line 1529 "glslang/MachineIndependent/glslang.y" +#line 1530 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 6466 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6484 "MachineIndependent/glslang_tab.cpp" break; case 183: /* storage_qualifier: SUBGROUPCOHERENT */ -#line 1534 "glslang/MachineIndependent/glslang.y" +#line 1535 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 6476 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6494 "MachineIndependent/glslang_tab.cpp" break; case 184: /* storage_qualifier: NONPRIVATE */ -#line 1539 "glslang/MachineIndependent/glslang.y" +#line 1540 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 6486 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6504 "MachineIndependent/glslang_tab.cpp" break; case 185: /* storage_qualifier: SHADERCALLCOHERENT */ -#line 1544 "glslang/MachineIndependent/glslang.y" +#line 1545 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 6496 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6514 "MachineIndependent/glslang_tab.cpp" break; case 186: /* storage_qualifier: VOLATILE */ -#line 1549 "glslang/MachineIndependent/glslang.y" +#line 1550 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 6505 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6523 "MachineIndependent/glslang_tab.cpp" break; case 187: /* storage_qualifier: RESTRICT */ -#line 1553 "glslang/MachineIndependent/glslang.y" +#line 1554 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 6514 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6532 "MachineIndependent/glslang_tab.cpp" break; case 188: /* storage_qualifier: READONLY */ -#line 1557 "glslang/MachineIndependent/glslang.y" +#line 1558 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 6523 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6541 "MachineIndependent/glslang_tab.cpp" break; case 189: /* storage_qualifier: WRITEONLY */ -#line 1561 "glslang/MachineIndependent/glslang.y" +#line 1562 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 6532 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6550 "MachineIndependent/glslang_tab.cpp" break; case 190: /* storage_qualifier: SUBROUTINE */ -#line 1565 "glslang/MachineIndependent/glslang.y" +#line 1566 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 6543 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6561 "MachineIndependent/glslang_tab.cpp" break; case 191: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ -#line 1571 "glslang/MachineIndependent/glslang.y" +#line 1572 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 6554 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6572 "MachineIndependent/glslang_tab.cpp" break; case 192: /* non_uniform_qualifier: NONUNIFORM */ -#line 1582 "glslang/MachineIndependent/glslang.y" +#line 1583 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 6563 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6581 "MachineIndependent/glslang_tab.cpp" break; case 193: /* type_name_list: IDENTIFIER */ -#line 1589 "glslang/MachineIndependent/glslang.y" +#line 1590 "MachineIndependent/glslang.y" { // TODO } -#line 6571 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6589 "MachineIndependent/glslang_tab.cpp" break; case 194: /* type_name_list: type_name_list COMMA IDENTIFIER */ -#line 1592 "glslang/MachineIndependent/glslang.y" +#line 1593 "MachineIndependent/glslang.y" { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 6581 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6599 "MachineIndependent/glslang_tab.cpp" break; case 195: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ -#line 1601 "glslang/MachineIndependent/glslang.y" +#line 1602 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 6591 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6609 "MachineIndependent/glslang_tab.cpp" break; case 196: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ -#line 1606 "glslang/MachineIndependent/glslang.y" +#line 1607 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); @@ -6599,21 +6617,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 6603 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6621 "MachineIndependent/glslang_tab.cpp" break; case 197: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ -#line 1616 "glslang/MachineIndependent/glslang.y" +#line 1617 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 6613 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6631 "MachineIndependent/glslang_tab.cpp" break; case 198: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1621 "glslang/MachineIndependent/glslang.y" +#line 1622 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -6622,20 +6640,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6626 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6644 "MachineIndependent/glslang_tab.cpp" break; case 199: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ -#line 1629 "glslang/MachineIndependent/glslang.y" +#line 1630 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 6635 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6653 "MachineIndependent/glslang_tab.cpp" break; case 200: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1633 "glslang/MachineIndependent/glslang.y" +#line 1634 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); @@ -6643,35 +6661,35 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6647 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6665 "MachineIndependent/glslang_tab.cpp" break; case 201: /* type_parameter_specifier_opt: type_parameter_specifier */ -#line 1643 "glslang/MachineIndependent/glslang.y" +#line 1644 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 6655 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6673 "MachineIndependent/glslang_tab.cpp" break; case 202: /* type_parameter_specifier_opt: %empty */ -#line 1646 "glslang/MachineIndependent/glslang.y" +#line 1647 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = 0; } -#line 6663 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6681 "MachineIndependent/glslang_tab.cpp" break; case 203: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ -#line 1652 "glslang/MachineIndependent/glslang.y" +#line 1653 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 6671 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6689 "MachineIndependent/glslang_tab.cpp" break; case 204: /* type_parameter_specifier_list: unary_expression */ -#line 1658 "glslang/MachineIndependent/glslang.y" +#line 1659 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = new TArraySizes; @@ -6679,11 +6697,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6683 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6701 "MachineIndependent/glslang_tab.cpp" break; case 205: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ -#line 1665 "glslang/MachineIndependent/glslang.y" +#line 1666 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -6691,300 +6709,300 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6695 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6713 "MachineIndependent/glslang_tab.cpp" break; case 206: /* type_specifier_nonarray: VOID */ -#line 1675 "glslang/MachineIndependent/glslang.y" +#line 1676 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 6704 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6722 "MachineIndependent/glslang_tab.cpp" break; case 207: /* type_specifier_nonarray: FLOAT */ -#line 1679 "glslang/MachineIndependent/glslang.y" +#line 1680 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6713 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6731 "MachineIndependent/glslang_tab.cpp" break; case 208: /* type_specifier_nonarray: INT */ -#line 1683 "glslang/MachineIndependent/glslang.y" +#line 1684 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6722 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6740 "MachineIndependent/glslang_tab.cpp" break; case 209: /* type_specifier_nonarray: UINT */ -#line 1687 "glslang/MachineIndependent/glslang.y" +#line 1688 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6732 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6750 "MachineIndependent/glslang_tab.cpp" break; case 210: /* type_specifier_nonarray: BOOL */ -#line 1692 "glslang/MachineIndependent/glslang.y" +#line 1693 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 6741 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6759 "MachineIndependent/glslang_tab.cpp" break; case 211: /* type_specifier_nonarray: VEC2 */ -#line 1696 "glslang/MachineIndependent/glslang.y" +#line 1697 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6751 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6769 "MachineIndependent/glslang_tab.cpp" break; case 212: /* type_specifier_nonarray: VEC3 */ -#line 1701 "glslang/MachineIndependent/glslang.y" +#line 1702 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6761 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6779 "MachineIndependent/glslang_tab.cpp" break; case 213: /* type_specifier_nonarray: VEC4 */ -#line 1706 "glslang/MachineIndependent/glslang.y" +#line 1707 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6771 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6789 "MachineIndependent/glslang_tab.cpp" break; case 214: /* type_specifier_nonarray: BVEC2 */ -#line 1711 "glslang/MachineIndependent/glslang.y" +#line 1712 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 6781 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6799 "MachineIndependent/glslang_tab.cpp" break; case 215: /* type_specifier_nonarray: BVEC3 */ -#line 1716 "glslang/MachineIndependent/glslang.y" +#line 1717 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 6791 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6809 "MachineIndependent/glslang_tab.cpp" break; case 216: /* type_specifier_nonarray: BVEC4 */ -#line 1721 "glslang/MachineIndependent/glslang.y" +#line 1722 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 6801 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6819 "MachineIndependent/glslang_tab.cpp" break; case 217: /* type_specifier_nonarray: IVEC2 */ -#line 1726 "glslang/MachineIndependent/glslang.y" +#line 1727 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6811 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6829 "MachineIndependent/glslang_tab.cpp" break; case 218: /* type_specifier_nonarray: IVEC3 */ -#line 1731 "glslang/MachineIndependent/glslang.y" +#line 1732 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6821 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6839 "MachineIndependent/glslang_tab.cpp" break; case 219: /* type_specifier_nonarray: IVEC4 */ -#line 1736 "glslang/MachineIndependent/glslang.y" +#line 1737 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6831 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6849 "MachineIndependent/glslang_tab.cpp" break; case 220: /* type_specifier_nonarray: UVEC2 */ -#line 1741 "glslang/MachineIndependent/glslang.y" +#line 1742 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6842 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6860 "MachineIndependent/glslang_tab.cpp" break; case 221: /* type_specifier_nonarray: UVEC3 */ -#line 1747 "glslang/MachineIndependent/glslang.y" +#line 1748 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6853 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6871 "MachineIndependent/glslang_tab.cpp" break; case 222: /* type_specifier_nonarray: UVEC4 */ -#line 1753 "glslang/MachineIndependent/glslang.y" +#line 1754 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6864 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6882 "MachineIndependent/glslang_tab.cpp" break; case 223: /* type_specifier_nonarray: MAT2 */ -#line 1759 "glslang/MachineIndependent/glslang.y" +#line 1760 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6874 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6892 "MachineIndependent/glslang_tab.cpp" break; case 224: /* type_specifier_nonarray: MAT3 */ -#line 1764 "glslang/MachineIndependent/glslang.y" +#line 1765 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6884 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6902 "MachineIndependent/glslang_tab.cpp" break; case 225: /* type_specifier_nonarray: MAT4 */ -#line 1769 "glslang/MachineIndependent/glslang.y" +#line 1770 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6894 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6912 "MachineIndependent/glslang_tab.cpp" break; case 226: /* type_specifier_nonarray: MAT2X2 */ -#line 1774 "glslang/MachineIndependent/glslang.y" +#line 1775 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6904 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6922 "MachineIndependent/glslang_tab.cpp" break; case 227: /* type_specifier_nonarray: MAT2X3 */ -#line 1779 "glslang/MachineIndependent/glslang.y" +#line 1780 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 6914 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6932 "MachineIndependent/glslang_tab.cpp" break; case 228: /* type_specifier_nonarray: MAT2X4 */ -#line 1784 "glslang/MachineIndependent/glslang.y" +#line 1785 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 6924 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6942 "MachineIndependent/glslang_tab.cpp" break; case 229: /* type_specifier_nonarray: MAT3X2 */ -#line 1789 "glslang/MachineIndependent/glslang.y" +#line 1790 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 6934 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6952 "MachineIndependent/glslang_tab.cpp" break; case 230: /* type_specifier_nonarray: MAT3X3 */ -#line 1794 "glslang/MachineIndependent/glslang.y" +#line 1795 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6944 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6962 "MachineIndependent/glslang_tab.cpp" break; case 231: /* type_specifier_nonarray: MAT3X4 */ -#line 1799 "glslang/MachineIndependent/glslang.y" +#line 1800 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 6954 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6972 "MachineIndependent/glslang_tab.cpp" break; case 232: /* type_specifier_nonarray: MAT4X2 */ -#line 1804 "glslang/MachineIndependent/glslang.y" +#line 1805 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 6964 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6982 "MachineIndependent/glslang_tab.cpp" break; case 233: /* type_specifier_nonarray: MAT4X3 */ -#line 1809 "glslang/MachineIndependent/glslang.y" +#line 1810 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 6974 "glslang/MachineIndependent/glslang_tab.cpp" +#line 6992 "MachineIndependent/glslang_tab.cpp" break; case 234: /* type_specifier_nonarray: MAT4X4 */ -#line 1814 "glslang/MachineIndependent/glslang.y" +#line 1815 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6984 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7002 "MachineIndependent/glslang_tab.cpp" break; case 235: /* type_specifier_nonarray: DOUBLE */ -#line 1820 "glslang/MachineIndependent/glslang.y" +#line 1821 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -6992,121 +7010,121 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 6996 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7014 "MachineIndependent/glslang_tab.cpp" break; case 236: /* type_specifier_nonarray: FLOAT16_T */ -#line 1827 "glslang/MachineIndependent/glslang.y" +#line 1828 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 7006 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7024 "MachineIndependent/glslang_tab.cpp" break; case 237: /* type_specifier_nonarray: FLOAT32_T */ -#line 1832 "glslang/MachineIndependent/glslang.y" +#line 1833 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7016 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7034 "MachineIndependent/glslang_tab.cpp" break; case 238: /* type_specifier_nonarray: FLOAT64_T */ -#line 1837 "glslang/MachineIndependent/glslang.y" +#line 1838 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7026 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7044 "MachineIndependent/glslang_tab.cpp" break; case 239: /* type_specifier_nonarray: INT8_T */ -#line 1842 "glslang/MachineIndependent/glslang.y" +#line 1843 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 7036 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7054 "MachineIndependent/glslang_tab.cpp" break; case 240: /* type_specifier_nonarray: UINT8_T */ -#line 1847 "glslang/MachineIndependent/glslang.y" +#line 1848 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 7046 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7064 "MachineIndependent/glslang_tab.cpp" break; case 241: /* type_specifier_nonarray: INT16_T */ -#line 1852 "glslang/MachineIndependent/glslang.y" +#line 1853 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 7056 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7074 "MachineIndependent/glslang_tab.cpp" break; case 242: /* type_specifier_nonarray: UINT16_T */ -#line 1857 "glslang/MachineIndependent/glslang.y" +#line 1858 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 7066 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7084 "MachineIndependent/glslang_tab.cpp" break; case 243: /* type_specifier_nonarray: INT32_T */ -#line 1862 "glslang/MachineIndependent/glslang.y" +#line 1863 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7076 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7094 "MachineIndependent/glslang_tab.cpp" break; case 244: /* type_specifier_nonarray: UINT32_T */ -#line 1867 "glslang/MachineIndependent/glslang.y" +#line 1868 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 7086 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7104 "MachineIndependent/glslang_tab.cpp" break; case 245: /* type_specifier_nonarray: INT64_T */ -#line 1872 "glslang/MachineIndependent/glslang.y" +#line 1873 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 7096 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7114 "MachineIndependent/glslang_tab.cpp" break; case 246: /* type_specifier_nonarray: UINT64_T */ -#line 1877 "glslang/MachineIndependent/glslang.y" +#line 1878 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 7106 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7124 "MachineIndependent/glslang_tab.cpp" break; case 247: /* type_specifier_nonarray: DVEC2 */ -#line 1882 "glslang/MachineIndependent/glslang.y" +#line 1883 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7115,11 +7133,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7119 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7137 "MachineIndependent/glslang_tab.cpp" break; case 248: /* type_specifier_nonarray: DVEC3 */ -#line 1890 "glslang/MachineIndependent/glslang.y" +#line 1891 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7128,11 +7146,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7132 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7150 "MachineIndependent/glslang_tab.cpp" break; case 249: /* type_specifier_nonarray: DVEC4 */ -#line 1898 "glslang/MachineIndependent/glslang.y" +#line 1899 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7141,374 +7159,374 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7145 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7163 "MachineIndependent/glslang_tab.cpp" break; case 250: /* type_specifier_nonarray: F16VEC2 */ -#line 1906 "glslang/MachineIndependent/glslang.y" +#line 1907 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 7156 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7174 "MachineIndependent/glslang_tab.cpp" break; case 251: /* type_specifier_nonarray: F16VEC3 */ -#line 1912 "glslang/MachineIndependent/glslang.y" +#line 1913 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 7167 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7185 "MachineIndependent/glslang_tab.cpp" break; case 252: /* type_specifier_nonarray: F16VEC4 */ -#line 1918 "glslang/MachineIndependent/glslang.y" +#line 1919 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 7178 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7196 "MachineIndependent/glslang_tab.cpp" break; case 253: /* type_specifier_nonarray: F32VEC2 */ -#line 1924 "glslang/MachineIndependent/glslang.y" +#line 1925 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 7189 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7207 "MachineIndependent/glslang_tab.cpp" break; case 254: /* type_specifier_nonarray: F32VEC3 */ -#line 1930 "glslang/MachineIndependent/glslang.y" +#line 1931 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 7200 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7218 "MachineIndependent/glslang_tab.cpp" break; case 255: /* type_specifier_nonarray: F32VEC4 */ -#line 1936 "glslang/MachineIndependent/glslang.y" +#line 1937 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7211 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7229 "MachineIndependent/glslang_tab.cpp" break; case 256: /* type_specifier_nonarray: F64VEC2 */ -#line 1942 "glslang/MachineIndependent/glslang.y" +#line 1943 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7222 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7240 "MachineIndependent/glslang_tab.cpp" break; case 257: /* type_specifier_nonarray: F64VEC3 */ -#line 1948 "glslang/MachineIndependent/glslang.y" +#line 1949 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7233 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7251 "MachineIndependent/glslang_tab.cpp" break; case 258: /* type_specifier_nonarray: F64VEC4 */ -#line 1954 "glslang/MachineIndependent/glslang.y" +#line 1955 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7244 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7262 "MachineIndependent/glslang_tab.cpp" break; case 259: /* type_specifier_nonarray: I8VEC2 */ -#line 1960 "glslang/MachineIndependent/glslang.y" +#line 1961 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 7255 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7273 "MachineIndependent/glslang_tab.cpp" break; case 260: /* type_specifier_nonarray: I8VEC3 */ -#line 1966 "glslang/MachineIndependent/glslang.y" +#line 1967 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 7266 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7284 "MachineIndependent/glslang_tab.cpp" break; case 261: /* type_specifier_nonarray: I8VEC4 */ -#line 1972 "glslang/MachineIndependent/glslang.y" +#line 1973 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 7277 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7295 "MachineIndependent/glslang_tab.cpp" break; case 262: /* type_specifier_nonarray: I16VEC2 */ -#line 1978 "glslang/MachineIndependent/glslang.y" +#line 1979 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 7288 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7306 "MachineIndependent/glslang_tab.cpp" break; case 263: /* type_specifier_nonarray: I16VEC3 */ -#line 1984 "glslang/MachineIndependent/glslang.y" +#line 1985 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 7299 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7317 "MachineIndependent/glslang_tab.cpp" break; case 264: /* type_specifier_nonarray: I16VEC4 */ -#line 1990 "glslang/MachineIndependent/glslang.y" +#line 1991 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 7310 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7328 "MachineIndependent/glslang_tab.cpp" break; case 265: /* type_specifier_nonarray: I32VEC2 */ -#line 1996 "glslang/MachineIndependent/glslang.y" +#line 1997 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 7321 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7339 "MachineIndependent/glslang_tab.cpp" break; case 266: /* type_specifier_nonarray: I32VEC3 */ -#line 2002 "glslang/MachineIndependent/glslang.y" +#line 2003 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 7332 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7350 "MachineIndependent/glslang_tab.cpp" break; case 267: /* type_specifier_nonarray: I32VEC4 */ -#line 2008 "glslang/MachineIndependent/glslang.y" +#line 2009 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 7343 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7361 "MachineIndependent/glslang_tab.cpp" break; case 268: /* type_specifier_nonarray: I64VEC2 */ -#line 2014 "glslang/MachineIndependent/glslang.y" +#line 2015 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 7354 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7372 "MachineIndependent/glslang_tab.cpp" break; case 269: /* type_specifier_nonarray: I64VEC3 */ -#line 2020 "glslang/MachineIndependent/glslang.y" +#line 2021 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 7365 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7383 "MachineIndependent/glslang_tab.cpp" break; case 270: /* type_specifier_nonarray: I64VEC4 */ -#line 2026 "glslang/MachineIndependent/glslang.y" +#line 2027 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 7376 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7394 "MachineIndependent/glslang_tab.cpp" break; case 271: /* type_specifier_nonarray: U8VEC2 */ -#line 2032 "glslang/MachineIndependent/glslang.y" +#line 2033 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 7387 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7405 "MachineIndependent/glslang_tab.cpp" break; case 272: /* type_specifier_nonarray: U8VEC3 */ -#line 2038 "glslang/MachineIndependent/glslang.y" +#line 2039 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 7398 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7416 "MachineIndependent/glslang_tab.cpp" break; case 273: /* type_specifier_nonarray: U8VEC4 */ -#line 2044 "glslang/MachineIndependent/glslang.y" +#line 2045 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 7409 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7427 "MachineIndependent/glslang_tab.cpp" break; case 274: /* type_specifier_nonarray: U16VEC2 */ -#line 2050 "glslang/MachineIndependent/glslang.y" +#line 2051 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 7420 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7438 "MachineIndependent/glslang_tab.cpp" break; case 275: /* type_specifier_nonarray: U16VEC3 */ -#line 2056 "glslang/MachineIndependent/glslang.y" +#line 2057 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 7431 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7449 "MachineIndependent/glslang_tab.cpp" break; case 276: /* type_specifier_nonarray: U16VEC4 */ -#line 2062 "glslang/MachineIndependent/glslang.y" +#line 2063 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 7442 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7460 "MachineIndependent/glslang_tab.cpp" break; case 277: /* type_specifier_nonarray: U32VEC2 */ -#line 2068 "glslang/MachineIndependent/glslang.y" +#line 2069 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7453 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7471 "MachineIndependent/glslang_tab.cpp" break; case 278: /* type_specifier_nonarray: U32VEC3 */ -#line 2074 "glslang/MachineIndependent/glslang.y" +#line 2075 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7464 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7482 "MachineIndependent/glslang_tab.cpp" break; case 279: /* type_specifier_nonarray: U32VEC4 */ -#line 2080 "glslang/MachineIndependent/glslang.y" +#line 2081 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7475 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7493 "MachineIndependent/glslang_tab.cpp" break; case 280: /* type_specifier_nonarray: U64VEC2 */ -#line 2086 "glslang/MachineIndependent/glslang.y" +#line 2087 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 7486 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7504 "MachineIndependent/glslang_tab.cpp" break; case 281: /* type_specifier_nonarray: U64VEC3 */ -#line 2092 "glslang/MachineIndependent/glslang.y" +#line 2093 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 7497 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7515 "MachineIndependent/glslang_tab.cpp" break; case 282: /* type_specifier_nonarray: U64VEC4 */ -#line 2098 "glslang/MachineIndependent/glslang.y" +#line 2099 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 7508 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7526 "MachineIndependent/glslang_tab.cpp" break; case 283: /* type_specifier_nonarray: DMAT2 */ -#line 2104 "glslang/MachineIndependent/glslang.y" +#line 2105 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7517,11 +7535,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7521 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7539 "MachineIndependent/glslang_tab.cpp" break; case 284: /* type_specifier_nonarray: DMAT3 */ -#line 2112 "glslang/MachineIndependent/glslang.y" +#line 2113 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7530,11 +7548,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7534 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7552 "MachineIndependent/glslang_tab.cpp" break; case 285: /* type_specifier_nonarray: DMAT4 */ -#line 2120 "glslang/MachineIndependent/glslang.y" +#line 2121 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7543,11 +7561,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7547 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7565 "MachineIndependent/glslang_tab.cpp" break; case 286: /* type_specifier_nonarray: DMAT2X2 */ -#line 2128 "glslang/MachineIndependent/glslang.y" +#line 2129 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7556,11 +7574,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7560 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7578 "MachineIndependent/glslang_tab.cpp" break; case 287: /* type_specifier_nonarray: DMAT2X3 */ -#line 2136 "glslang/MachineIndependent/glslang.y" +#line 2137 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7569,11 +7587,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7573 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7591 "MachineIndependent/glslang_tab.cpp" break; case 288: /* type_specifier_nonarray: DMAT2X4 */ -#line 2144 "glslang/MachineIndependent/glslang.y" +#line 2145 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7582,11 +7600,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7586 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7604 "MachineIndependent/glslang_tab.cpp" break; case 289: /* type_specifier_nonarray: DMAT3X2 */ -#line 2152 "glslang/MachineIndependent/glslang.y" +#line 2153 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7595,11 +7613,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7599 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7617 "MachineIndependent/glslang_tab.cpp" break; case 290: /* type_specifier_nonarray: DMAT3X3 */ -#line 2160 "glslang/MachineIndependent/glslang.y" +#line 2161 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7608,11 +7626,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7612 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7630 "MachineIndependent/glslang_tab.cpp" break; case 291: /* type_specifier_nonarray: DMAT3X4 */ -#line 2168 "glslang/MachineIndependent/glslang.y" +#line 2169 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7621,11 +7639,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7625 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7643 "MachineIndependent/glslang_tab.cpp" break; case 292: /* type_specifier_nonarray: DMAT4X2 */ -#line 2176 "glslang/MachineIndependent/glslang.y" +#line 2177 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7634,11 +7652,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7638 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7656 "MachineIndependent/glslang_tab.cpp" break; case 293: /* type_specifier_nonarray: DMAT4X3 */ -#line 2184 "glslang/MachineIndependent/glslang.y" +#line 2185 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7647,11 +7665,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7651 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7669 "MachineIndependent/glslang_tab.cpp" break; case 294: /* type_specifier_nonarray: DMAT4X4 */ -#line 2192 "glslang/MachineIndependent/glslang.y" +#line 2193 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7660,2228 +7678,2228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7664 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7682 "MachineIndependent/glslang_tab.cpp" break; case 295: /* type_specifier_nonarray: F16MAT2 */ -#line 2200 "glslang/MachineIndependent/glslang.y" +#line 2201 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7675 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7693 "MachineIndependent/glslang_tab.cpp" break; case 296: /* type_specifier_nonarray: F16MAT3 */ -#line 2206 "glslang/MachineIndependent/glslang.y" +#line 2207 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7686 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7704 "MachineIndependent/glslang_tab.cpp" break; case 297: /* type_specifier_nonarray: F16MAT4 */ -#line 2212 "glslang/MachineIndependent/glslang.y" +#line 2213 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7697 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7715 "MachineIndependent/glslang_tab.cpp" break; case 298: /* type_specifier_nonarray: F16MAT2X2 */ -#line 2218 "glslang/MachineIndependent/glslang.y" +#line 2219 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7708 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7726 "MachineIndependent/glslang_tab.cpp" break; case 299: /* type_specifier_nonarray: F16MAT2X3 */ -#line 2224 "glslang/MachineIndependent/glslang.y" +#line 2225 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 7719 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7737 "MachineIndependent/glslang_tab.cpp" break; case 300: /* type_specifier_nonarray: F16MAT2X4 */ -#line 2230 "glslang/MachineIndependent/glslang.y" +#line 2231 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 7730 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7748 "MachineIndependent/glslang_tab.cpp" break; case 301: /* type_specifier_nonarray: F16MAT3X2 */ -#line 2236 "glslang/MachineIndependent/glslang.y" +#line 2237 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 7741 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7759 "MachineIndependent/glslang_tab.cpp" break; case 302: /* type_specifier_nonarray: F16MAT3X3 */ -#line 2242 "glslang/MachineIndependent/glslang.y" +#line 2243 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7752 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7770 "MachineIndependent/glslang_tab.cpp" break; case 303: /* type_specifier_nonarray: F16MAT3X4 */ -#line 2248 "glslang/MachineIndependent/glslang.y" +#line 2249 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 7763 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7781 "MachineIndependent/glslang_tab.cpp" break; case 304: /* type_specifier_nonarray: F16MAT4X2 */ -#line 2254 "glslang/MachineIndependent/glslang.y" +#line 2255 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 7774 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7792 "MachineIndependent/glslang_tab.cpp" break; case 305: /* type_specifier_nonarray: F16MAT4X3 */ -#line 2260 "glslang/MachineIndependent/glslang.y" +#line 2261 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 7785 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7803 "MachineIndependent/glslang_tab.cpp" break; case 306: /* type_specifier_nonarray: F16MAT4X4 */ -#line 2266 "glslang/MachineIndependent/glslang.y" +#line 2267 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7796 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7814 "MachineIndependent/glslang_tab.cpp" break; case 307: /* type_specifier_nonarray: F32MAT2 */ -#line 2272 "glslang/MachineIndependent/glslang.y" +#line 2273 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7807 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7825 "MachineIndependent/glslang_tab.cpp" break; case 308: /* type_specifier_nonarray: F32MAT3 */ -#line 2278 "glslang/MachineIndependent/glslang.y" +#line 2279 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7818 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7836 "MachineIndependent/glslang_tab.cpp" break; case 309: /* type_specifier_nonarray: F32MAT4 */ -#line 2284 "glslang/MachineIndependent/glslang.y" +#line 2285 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7829 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7847 "MachineIndependent/glslang_tab.cpp" break; case 310: /* type_specifier_nonarray: F32MAT2X2 */ -#line 2290 "glslang/MachineIndependent/glslang.y" +#line 2291 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7840 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7858 "MachineIndependent/glslang_tab.cpp" break; case 311: /* type_specifier_nonarray: F32MAT2X3 */ -#line 2296 "glslang/MachineIndependent/glslang.y" +#line 2297 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7851 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7869 "MachineIndependent/glslang_tab.cpp" break; case 312: /* type_specifier_nonarray: F32MAT2X4 */ -#line 2302 "glslang/MachineIndependent/glslang.y" +#line 2303 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7862 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7880 "MachineIndependent/glslang_tab.cpp" break; case 313: /* type_specifier_nonarray: F32MAT3X2 */ -#line 2308 "glslang/MachineIndependent/glslang.y" +#line 2309 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7873 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7891 "MachineIndependent/glslang_tab.cpp" break; case 314: /* type_specifier_nonarray: F32MAT3X3 */ -#line 2314 "glslang/MachineIndependent/glslang.y" +#line 2315 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7884 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7902 "MachineIndependent/glslang_tab.cpp" break; case 315: /* type_specifier_nonarray: F32MAT3X4 */ -#line 2320 "glslang/MachineIndependent/glslang.y" +#line 2321 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7895 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7913 "MachineIndependent/glslang_tab.cpp" break; case 316: /* type_specifier_nonarray: F32MAT4X2 */ -#line 2326 "glslang/MachineIndependent/glslang.y" +#line 2327 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7906 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7924 "MachineIndependent/glslang_tab.cpp" break; case 317: /* type_specifier_nonarray: F32MAT4X3 */ -#line 2332 "glslang/MachineIndependent/glslang.y" +#line 2333 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7917 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7935 "MachineIndependent/glslang_tab.cpp" break; case 318: /* type_specifier_nonarray: F32MAT4X4 */ -#line 2338 "glslang/MachineIndependent/glslang.y" +#line 2339 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7928 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7946 "MachineIndependent/glslang_tab.cpp" break; case 319: /* type_specifier_nonarray: F64MAT2 */ -#line 2344 "glslang/MachineIndependent/glslang.y" +#line 2345 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7939 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7957 "MachineIndependent/glslang_tab.cpp" break; case 320: /* type_specifier_nonarray: F64MAT3 */ -#line 2350 "glslang/MachineIndependent/glslang.y" +#line 2351 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7950 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7968 "MachineIndependent/glslang_tab.cpp" break; case 321: /* type_specifier_nonarray: F64MAT4 */ -#line 2356 "glslang/MachineIndependent/glslang.y" +#line 2357 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7961 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7979 "MachineIndependent/glslang_tab.cpp" break; case 322: /* type_specifier_nonarray: F64MAT2X2 */ -#line 2362 "glslang/MachineIndependent/glslang.y" +#line 2363 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7972 "glslang/MachineIndependent/glslang_tab.cpp" +#line 7990 "MachineIndependent/glslang_tab.cpp" break; case 323: /* type_specifier_nonarray: F64MAT2X3 */ -#line 2368 "glslang/MachineIndependent/glslang.y" +#line 2369 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7983 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8001 "MachineIndependent/glslang_tab.cpp" break; case 324: /* type_specifier_nonarray: F64MAT2X4 */ -#line 2374 "glslang/MachineIndependent/glslang.y" +#line 2375 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7994 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8012 "MachineIndependent/glslang_tab.cpp" break; case 325: /* type_specifier_nonarray: F64MAT3X2 */ -#line 2380 "glslang/MachineIndependent/glslang.y" +#line 2381 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8005 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8023 "MachineIndependent/glslang_tab.cpp" break; case 326: /* type_specifier_nonarray: F64MAT3X3 */ -#line 2386 "glslang/MachineIndependent/glslang.y" +#line 2387 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8016 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8034 "MachineIndependent/glslang_tab.cpp" break; case 327: /* type_specifier_nonarray: F64MAT3X4 */ -#line 2392 "glslang/MachineIndependent/glslang.y" +#line 2393 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8027 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8045 "MachineIndependent/glslang_tab.cpp" break; case 328: /* type_specifier_nonarray: F64MAT4X2 */ -#line 2398 "glslang/MachineIndependent/glslang.y" +#line 2399 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8038 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8056 "MachineIndependent/glslang_tab.cpp" break; case 329: /* type_specifier_nonarray: F64MAT4X3 */ -#line 2404 "glslang/MachineIndependent/glslang.y" +#line 2405 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8049 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8067 "MachineIndependent/glslang_tab.cpp" break; case 330: /* type_specifier_nonarray: F64MAT4X4 */ -#line 2410 "glslang/MachineIndependent/glslang.y" +#line 2411 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8060 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8078 "MachineIndependent/glslang_tab.cpp" break; case 331: /* type_specifier_nonarray: ACCSTRUCTNV */ -#line 2416 "glslang/MachineIndependent/glslang.y" +#line 2417 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8069 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8087 "MachineIndependent/glslang_tab.cpp" break; case 332: /* type_specifier_nonarray: ACCSTRUCTEXT */ -#line 2420 "glslang/MachineIndependent/glslang.y" +#line 2421 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8078 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8096 "MachineIndependent/glslang_tab.cpp" break; case 333: /* type_specifier_nonarray: RAYQUERYEXT */ -#line 2424 "glslang/MachineIndependent/glslang.y" +#line 2425 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 8087 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8105 "MachineIndependent/glslang_tab.cpp" break; case 334: /* type_specifier_nonarray: ATOMIC_UINT */ -#line 2428 "glslang/MachineIndependent/glslang.y" +#line 2429 "MachineIndependent/glslang.y" { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 8097 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8115 "MachineIndependent/glslang_tab.cpp" break; case 335: /* type_specifier_nonarray: SAMPLER1D */ -#line 2433 "glslang/MachineIndependent/glslang.y" +#line 2434 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 8107 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8125 "MachineIndependent/glslang_tab.cpp" break; case 336: /* type_specifier_nonarray: SAMPLER2D */ -#line 2439 "glslang/MachineIndependent/glslang.y" +#line 2440 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 8117 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8135 "MachineIndependent/glslang_tab.cpp" break; case 337: /* type_specifier_nonarray: SAMPLER3D */ -#line 2444 "glslang/MachineIndependent/glslang.y" +#line 2445 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 8127 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8145 "MachineIndependent/glslang_tab.cpp" break; case 338: /* type_specifier_nonarray: SAMPLERCUBE */ -#line 2449 "glslang/MachineIndependent/glslang.y" +#line 2450 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 8137 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8155 "MachineIndependent/glslang_tab.cpp" break; case 339: /* type_specifier_nonarray: SAMPLER2DSHADOW */ -#line 2454 "glslang/MachineIndependent/glslang.y" +#line 2455 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 8147 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8165 "MachineIndependent/glslang_tab.cpp" break; case 340: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ -#line 2459 "glslang/MachineIndependent/glslang.y" +#line 2460 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 8157 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8175 "MachineIndependent/glslang_tab.cpp" break; case 341: /* type_specifier_nonarray: SAMPLER2DARRAY */ -#line 2464 "glslang/MachineIndependent/glslang.y" +#line 2465 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 8167 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8185 "MachineIndependent/glslang_tab.cpp" break; case 342: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ -#line 2469 "glslang/MachineIndependent/glslang.y" +#line 2470 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 8177 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8195 "MachineIndependent/glslang_tab.cpp" break; case 343: /* type_specifier_nonarray: SAMPLER1DSHADOW */ -#line 2475 "glslang/MachineIndependent/glslang.y" +#line 2476 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 8187 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8205 "MachineIndependent/glslang_tab.cpp" break; case 344: /* type_specifier_nonarray: SAMPLER1DARRAY */ -#line 2480 "glslang/MachineIndependent/glslang.y" +#line 2481 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 8197 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8215 "MachineIndependent/glslang_tab.cpp" break; case 345: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ -#line 2485 "glslang/MachineIndependent/glslang.y" +#line 2486 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 8207 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8225 "MachineIndependent/glslang_tab.cpp" break; case 346: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ -#line 2490 "glslang/MachineIndependent/glslang.y" +#line 2491 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 8217 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8235 "MachineIndependent/glslang_tab.cpp" break; case 347: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ -#line 2495 "glslang/MachineIndependent/glslang.y" +#line 2496 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 8227 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8245 "MachineIndependent/glslang_tab.cpp" break; case 348: /* type_specifier_nonarray: F16SAMPLER1D */ -#line 2500 "glslang/MachineIndependent/glslang.y" +#line 2501 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 8238 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8256 "MachineIndependent/glslang_tab.cpp" break; case 349: /* type_specifier_nonarray: F16SAMPLER2D */ -#line 2506 "glslang/MachineIndependent/glslang.y" +#line 2507 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 8249 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8267 "MachineIndependent/glslang_tab.cpp" break; case 350: /* type_specifier_nonarray: F16SAMPLER3D */ -#line 2512 "glslang/MachineIndependent/glslang.y" +#line 2513 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 8260 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8278 "MachineIndependent/glslang_tab.cpp" break; case 351: /* type_specifier_nonarray: F16SAMPLERCUBE */ -#line 2518 "glslang/MachineIndependent/glslang.y" +#line 2519 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 8271 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8289 "MachineIndependent/glslang_tab.cpp" break; case 352: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ -#line 2524 "glslang/MachineIndependent/glslang.y" +#line 2525 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 8282 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8300 "MachineIndependent/glslang_tab.cpp" break; case 353: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ -#line 2530 "glslang/MachineIndependent/glslang.y" +#line 2531 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 8293 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8311 "MachineIndependent/glslang_tab.cpp" break; case 354: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ -#line 2536 "glslang/MachineIndependent/glslang.y" +#line 2537 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 8304 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8322 "MachineIndependent/glslang_tab.cpp" break; case 355: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ -#line 2542 "glslang/MachineIndependent/glslang.y" +#line 2543 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 8315 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8333 "MachineIndependent/glslang_tab.cpp" break; case 356: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ -#line 2548 "glslang/MachineIndependent/glslang.y" +#line 2549 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 8326 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8344 "MachineIndependent/glslang_tab.cpp" break; case 357: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ -#line 2554 "glslang/MachineIndependent/glslang.y" +#line 2555 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 8337 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8355 "MachineIndependent/glslang_tab.cpp" break; case 358: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ -#line 2560 "glslang/MachineIndependent/glslang.y" +#line 2561 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 8348 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8366 "MachineIndependent/glslang_tab.cpp" break; case 359: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ -#line 2566 "glslang/MachineIndependent/glslang.y" +#line 2567 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 8359 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8377 "MachineIndependent/glslang_tab.cpp" break; case 360: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ -#line 2572 "glslang/MachineIndependent/glslang.y" +#line 2573 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 8370 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8388 "MachineIndependent/glslang_tab.cpp" break; case 361: /* type_specifier_nonarray: ISAMPLER1D */ -#line 2578 "glslang/MachineIndependent/glslang.y" +#line 2579 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 8380 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8398 "MachineIndependent/glslang_tab.cpp" break; case 362: /* type_specifier_nonarray: ISAMPLER2D */ -#line 2584 "glslang/MachineIndependent/glslang.y" +#line 2585 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 8390 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8408 "MachineIndependent/glslang_tab.cpp" break; case 363: /* type_specifier_nonarray: ISAMPLER3D */ -#line 2589 "glslang/MachineIndependent/glslang.y" +#line 2590 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 8400 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8418 "MachineIndependent/glslang_tab.cpp" break; case 364: /* type_specifier_nonarray: ISAMPLERCUBE */ -#line 2594 "glslang/MachineIndependent/glslang.y" +#line 2595 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 8410 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8428 "MachineIndependent/glslang_tab.cpp" break; case 365: /* type_specifier_nonarray: ISAMPLER2DARRAY */ -#line 2599 "glslang/MachineIndependent/glslang.y" +#line 2600 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 8420 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8438 "MachineIndependent/glslang_tab.cpp" break; case 366: /* type_specifier_nonarray: USAMPLER2D */ -#line 2604 "glslang/MachineIndependent/glslang.y" +#line 2605 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 8430 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8448 "MachineIndependent/glslang_tab.cpp" break; case 367: /* type_specifier_nonarray: USAMPLER3D */ -#line 2609 "glslang/MachineIndependent/glslang.y" +#line 2610 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 8440 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8458 "MachineIndependent/glslang_tab.cpp" break; case 368: /* type_specifier_nonarray: USAMPLERCUBE */ -#line 2614 "glslang/MachineIndependent/glslang.y" +#line 2615 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 8450 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8468 "MachineIndependent/glslang_tab.cpp" break; case 369: /* type_specifier_nonarray: ISAMPLER1DARRAY */ -#line 2620 "glslang/MachineIndependent/glslang.y" +#line 2621 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 8460 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8478 "MachineIndependent/glslang_tab.cpp" break; case 370: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ -#line 2625 "glslang/MachineIndependent/glslang.y" +#line 2626 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 8470 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8488 "MachineIndependent/glslang_tab.cpp" break; case 371: /* type_specifier_nonarray: USAMPLER1D */ -#line 2630 "glslang/MachineIndependent/glslang.y" +#line 2631 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 8480 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8498 "MachineIndependent/glslang_tab.cpp" break; case 372: /* type_specifier_nonarray: USAMPLER1DARRAY */ -#line 2635 "glslang/MachineIndependent/glslang.y" +#line 2636 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 8490 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8508 "MachineIndependent/glslang_tab.cpp" break; case 373: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ -#line 2640 "glslang/MachineIndependent/glslang.y" +#line 2641 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 8500 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8518 "MachineIndependent/glslang_tab.cpp" break; case 374: /* type_specifier_nonarray: TEXTURECUBEARRAY */ -#line 2645 "glslang/MachineIndependent/glslang.y" +#line 2646 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 8510 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8528 "MachineIndependent/glslang_tab.cpp" break; case 375: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ -#line 2650 "glslang/MachineIndependent/glslang.y" +#line 2651 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8520 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8538 "MachineIndependent/glslang_tab.cpp" break; case 376: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ -#line 2655 "glslang/MachineIndependent/glslang.y" +#line 2656 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8530 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8548 "MachineIndependent/glslang_tab.cpp" break; case 377: /* type_specifier_nonarray: USAMPLER2DARRAY */ -#line 2661 "glslang/MachineIndependent/glslang.y" +#line 2662 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 8540 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8558 "MachineIndependent/glslang_tab.cpp" break; case 378: /* type_specifier_nonarray: TEXTURE2D */ -#line 2666 "glslang/MachineIndependent/glslang.y" +#line 2667 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 8550 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8568 "MachineIndependent/glslang_tab.cpp" break; case 379: /* type_specifier_nonarray: TEXTURE3D */ -#line 2671 "glslang/MachineIndependent/glslang.y" +#line 2672 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 8560 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8578 "MachineIndependent/glslang_tab.cpp" break; case 380: /* type_specifier_nonarray: TEXTURE2DARRAY */ -#line 2676 "glslang/MachineIndependent/glslang.y" +#line 2677 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 8570 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8588 "MachineIndependent/glslang_tab.cpp" break; case 381: /* type_specifier_nonarray: TEXTURECUBE */ -#line 2681 "glslang/MachineIndependent/glslang.y" +#line 2682 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 8580 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8598 "MachineIndependent/glslang_tab.cpp" break; case 382: /* type_specifier_nonarray: ITEXTURE2D */ -#line 2686 "glslang/MachineIndependent/glslang.y" +#line 2687 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 8590 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8608 "MachineIndependent/glslang_tab.cpp" break; case 383: /* type_specifier_nonarray: ITEXTURE3D */ -#line 2691 "glslang/MachineIndependent/glslang.y" +#line 2692 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 8600 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8618 "MachineIndependent/glslang_tab.cpp" break; case 384: /* type_specifier_nonarray: ITEXTURECUBE */ -#line 2696 "glslang/MachineIndependent/glslang.y" +#line 2697 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 8610 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8628 "MachineIndependent/glslang_tab.cpp" break; case 385: /* type_specifier_nonarray: ITEXTURE2DARRAY */ -#line 2701 "glslang/MachineIndependent/glslang.y" +#line 2702 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 8620 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8638 "MachineIndependent/glslang_tab.cpp" break; case 386: /* type_specifier_nonarray: UTEXTURE2D */ -#line 2706 "glslang/MachineIndependent/glslang.y" +#line 2707 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8630 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8648 "MachineIndependent/glslang_tab.cpp" break; case 387: /* type_specifier_nonarray: UTEXTURE3D */ -#line 2711 "glslang/MachineIndependent/glslang.y" +#line 2712 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8640 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8658 "MachineIndependent/glslang_tab.cpp" break; case 388: /* type_specifier_nonarray: UTEXTURECUBE */ -#line 2716 "glslang/MachineIndependent/glslang.y" +#line 2717 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8650 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8668 "MachineIndependent/glslang_tab.cpp" break; case 389: /* type_specifier_nonarray: UTEXTURE2DARRAY */ -#line 2721 "glslang/MachineIndependent/glslang.y" +#line 2722 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8660 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8678 "MachineIndependent/glslang_tab.cpp" break; case 390: /* type_specifier_nonarray: SAMPLER */ -#line 2726 "glslang/MachineIndependent/glslang.y" +#line 2727 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 8670 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8688 "MachineIndependent/glslang_tab.cpp" break; case 391: /* type_specifier_nonarray: SAMPLERSHADOW */ -#line 2731 "glslang/MachineIndependent/glslang.y" +#line 2732 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 8680 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8698 "MachineIndependent/glslang_tab.cpp" break; case 392: /* type_specifier_nonarray: SAMPLER2DRECT */ -#line 2737 "glslang/MachineIndependent/glslang.y" +#line 2738 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 8690 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8708 "MachineIndependent/glslang_tab.cpp" break; case 393: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ -#line 2742 "glslang/MachineIndependent/glslang.y" +#line 2743 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 8700 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8718 "MachineIndependent/glslang_tab.cpp" break; case 394: /* type_specifier_nonarray: F16SAMPLER2DRECT */ -#line 2747 "glslang/MachineIndependent/glslang.y" +#line 2748 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 8711 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8729 "MachineIndependent/glslang_tab.cpp" break; case 395: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ -#line 2753 "glslang/MachineIndependent/glslang.y" +#line 2754 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 8722 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8740 "MachineIndependent/glslang_tab.cpp" break; case 396: /* type_specifier_nonarray: ISAMPLER2DRECT */ -#line 2759 "glslang/MachineIndependent/glslang.y" +#line 2760 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 8732 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8750 "MachineIndependent/glslang_tab.cpp" break; case 397: /* type_specifier_nonarray: USAMPLER2DRECT */ -#line 2764 "glslang/MachineIndependent/glslang.y" +#line 2765 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 8742 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8760 "MachineIndependent/glslang_tab.cpp" break; case 398: /* type_specifier_nonarray: SAMPLERBUFFER */ -#line 2769 "glslang/MachineIndependent/glslang.y" +#line 2770 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 8752 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8770 "MachineIndependent/glslang_tab.cpp" break; case 399: /* type_specifier_nonarray: F16SAMPLERBUFFER */ -#line 2774 "glslang/MachineIndependent/glslang.y" +#line 2775 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 8763 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8781 "MachineIndependent/glslang_tab.cpp" break; case 400: /* type_specifier_nonarray: ISAMPLERBUFFER */ -#line 2780 "glslang/MachineIndependent/glslang.y" +#line 2781 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 8773 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8791 "MachineIndependent/glslang_tab.cpp" break; case 401: /* type_specifier_nonarray: USAMPLERBUFFER */ -#line 2785 "glslang/MachineIndependent/glslang.y" +#line 2786 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 8783 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8801 "MachineIndependent/glslang_tab.cpp" break; case 402: /* type_specifier_nonarray: SAMPLER2DMS */ -#line 2790 "glslang/MachineIndependent/glslang.y" +#line 2791 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 8793 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8811 "MachineIndependent/glslang_tab.cpp" break; case 403: /* type_specifier_nonarray: F16SAMPLER2DMS */ -#line 2795 "glslang/MachineIndependent/glslang.y" +#line 2796 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 8804 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8822 "MachineIndependent/glslang_tab.cpp" break; case 404: /* type_specifier_nonarray: ISAMPLER2DMS */ -#line 2801 "glslang/MachineIndependent/glslang.y" +#line 2802 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 8814 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8832 "MachineIndependent/glslang_tab.cpp" break; case 405: /* type_specifier_nonarray: USAMPLER2DMS */ -#line 2806 "glslang/MachineIndependent/glslang.y" +#line 2807 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 8824 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8842 "MachineIndependent/glslang_tab.cpp" break; case 406: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ -#line 2811 "glslang/MachineIndependent/glslang.y" +#line 2812 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 8834 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8852 "MachineIndependent/glslang_tab.cpp" break; case 407: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ -#line 2816 "glslang/MachineIndependent/glslang.y" +#line 2817 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 8845 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8863 "MachineIndependent/glslang_tab.cpp" break; case 408: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ -#line 2822 "glslang/MachineIndependent/glslang.y" +#line 2823 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 8855 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8873 "MachineIndependent/glslang_tab.cpp" break; case 409: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ -#line 2827 "glslang/MachineIndependent/glslang.y" +#line 2828 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 8865 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8883 "MachineIndependent/glslang_tab.cpp" break; case 410: /* type_specifier_nonarray: TEXTURE1D */ -#line 2832 "glslang/MachineIndependent/glslang.y" +#line 2833 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 8875 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8893 "MachineIndependent/glslang_tab.cpp" break; case 411: /* type_specifier_nonarray: F16TEXTURE1D */ -#line 2837 "glslang/MachineIndependent/glslang.y" +#line 2838 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 8886 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8904 "MachineIndependent/glslang_tab.cpp" break; case 412: /* type_specifier_nonarray: F16TEXTURE2D */ -#line 2843 "glslang/MachineIndependent/glslang.y" +#line 2844 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 8897 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8915 "MachineIndependent/glslang_tab.cpp" break; case 413: /* type_specifier_nonarray: F16TEXTURE3D */ -#line 2849 "glslang/MachineIndependent/glslang.y" +#line 2850 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 8908 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8926 "MachineIndependent/glslang_tab.cpp" break; case 414: /* type_specifier_nonarray: F16TEXTURECUBE */ -#line 2855 "glslang/MachineIndependent/glslang.y" +#line 2856 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 8919 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8937 "MachineIndependent/glslang_tab.cpp" break; case 415: /* type_specifier_nonarray: TEXTURE1DARRAY */ -#line 2861 "glslang/MachineIndependent/glslang.y" +#line 2862 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 8929 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8947 "MachineIndependent/glslang_tab.cpp" break; case 416: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ -#line 2866 "glslang/MachineIndependent/glslang.y" +#line 2867 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 8940 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8958 "MachineIndependent/glslang_tab.cpp" break; case 417: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ -#line 2872 "glslang/MachineIndependent/glslang.y" +#line 2873 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 8951 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8969 "MachineIndependent/glslang_tab.cpp" break; case 418: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ -#line 2878 "glslang/MachineIndependent/glslang.y" +#line 2879 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 8962 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8980 "MachineIndependent/glslang_tab.cpp" break; case 419: /* type_specifier_nonarray: ITEXTURE1D */ -#line 2884 "glslang/MachineIndependent/glslang.y" +#line 2885 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 8972 "glslang/MachineIndependent/glslang_tab.cpp" +#line 8990 "MachineIndependent/glslang_tab.cpp" break; case 420: /* type_specifier_nonarray: ITEXTURE1DARRAY */ -#line 2889 "glslang/MachineIndependent/glslang.y" +#line 2890 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 8982 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9000 "MachineIndependent/glslang_tab.cpp" break; case 421: /* type_specifier_nonarray: UTEXTURE1D */ -#line 2894 "glslang/MachineIndependent/glslang.y" +#line 2895 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 8992 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9010 "MachineIndependent/glslang_tab.cpp" break; case 422: /* type_specifier_nonarray: UTEXTURE1DARRAY */ -#line 2899 "glslang/MachineIndependent/glslang.y" +#line 2900 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 9002 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9020 "MachineIndependent/glslang_tab.cpp" break; case 423: /* type_specifier_nonarray: TEXTURE2DRECT */ -#line 2904 "glslang/MachineIndependent/glslang.y" +#line 2905 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 9012 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9030 "MachineIndependent/glslang_tab.cpp" break; case 424: /* type_specifier_nonarray: F16TEXTURE2DRECT */ -#line 2909 "glslang/MachineIndependent/glslang.y" +#line 2910 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 9023 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9041 "MachineIndependent/glslang_tab.cpp" break; case 425: /* type_specifier_nonarray: ITEXTURE2DRECT */ -#line 2915 "glslang/MachineIndependent/glslang.y" +#line 2916 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 9033 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9051 "MachineIndependent/glslang_tab.cpp" break; case 426: /* type_specifier_nonarray: UTEXTURE2DRECT */ -#line 2920 "glslang/MachineIndependent/glslang.y" +#line 2921 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 9043 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9061 "MachineIndependent/glslang_tab.cpp" break; case 427: /* type_specifier_nonarray: TEXTUREBUFFER */ -#line 2925 "glslang/MachineIndependent/glslang.y" +#line 2926 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 9053 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9071 "MachineIndependent/glslang_tab.cpp" break; case 428: /* type_specifier_nonarray: F16TEXTUREBUFFER */ -#line 2930 "glslang/MachineIndependent/glslang.y" +#line 2931 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 9064 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9082 "MachineIndependent/glslang_tab.cpp" break; case 429: /* type_specifier_nonarray: ITEXTUREBUFFER */ -#line 2936 "glslang/MachineIndependent/glslang.y" +#line 2937 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 9074 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9092 "MachineIndependent/glslang_tab.cpp" break; case 430: /* type_specifier_nonarray: UTEXTUREBUFFER */ -#line 2941 "glslang/MachineIndependent/glslang.y" +#line 2942 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 9084 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9102 "MachineIndependent/glslang_tab.cpp" break; case 431: /* type_specifier_nonarray: TEXTURE2DMS */ -#line 2946 "glslang/MachineIndependent/glslang.y" +#line 2947 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 9094 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9112 "MachineIndependent/glslang_tab.cpp" break; case 432: /* type_specifier_nonarray: F16TEXTURE2DMS */ -#line 2951 "glslang/MachineIndependent/glslang.y" +#line 2952 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 9105 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9123 "MachineIndependent/glslang_tab.cpp" break; case 433: /* type_specifier_nonarray: ITEXTURE2DMS */ -#line 2957 "glslang/MachineIndependent/glslang.y" +#line 2958 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 9115 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9133 "MachineIndependent/glslang_tab.cpp" break; case 434: /* type_specifier_nonarray: UTEXTURE2DMS */ -#line 2962 "glslang/MachineIndependent/glslang.y" +#line 2963 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 9125 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9143 "MachineIndependent/glslang_tab.cpp" break; case 435: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ -#line 2967 "glslang/MachineIndependent/glslang.y" +#line 2968 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 9135 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9153 "MachineIndependent/glslang_tab.cpp" break; case 436: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ -#line 2972 "glslang/MachineIndependent/glslang.y" +#line 2973 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 9146 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9164 "MachineIndependent/glslang_tab.cpp" break; case 437: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ -#line 2978 "glslang/MachineIndependent/glslang.y" +#line 2979 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 9156 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9174 "MachineIndependent/glslang_tab.cpp" break; case 438: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ -#line 2983 "glslang/MachineIndependent/glslang.y" +#line 2984 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 9166 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9184 "MachineIndependent/glslang_tab.cpp" break; case 439: /* type_specifier_nonarray: IMAGE1D */ -#line 2988 "glslang/MachineIndependent/glslang.y" +#line 2989 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 9176 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9194 "MachineIndependent/glslang_tab.cpp" break; case 440: /* type_specifier_nonarray: F16IMAGE1D */ -#line 2993 "glslang/MachineIndependent/glslang.y" +#line 2994 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 9187 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9205 "MachineIndependent/glslang_tab.cpp" break; case 441: /* type_specifier_nonarray: IIMAGE1D */ -#line 2999 "glslang/MachineIndependent/glslang.y" +#line 3000 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 9197 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9215 "MachineIndependent/glslang_tab.cpp" break; case 442: /* type_specifier_nonarray: UIMAGE1D */ -#line 3004 "glslang/MachineIndependent/glslang.y" +#line 3005 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 9207 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9225 "MachineIndependent/glslang_tab.cpp" break; case 443: /* type_specifier_nonarray: IMAGE2D */ -#line 3009 "glslang/MachineIndependent/glslang.y" +#line 3010 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 9217 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9235 "MachineIndependent/glslang_tab.cpp" break; case 444: /* type_specifier_nonarray: F16IMAGE2D */ -#line 3014 "glslang/MachineIndependent/glslang.y" +#line 3015 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 9228 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9246 "MachineIndependent/glslang_tab.cpp" break; case 445: /* type_specifier_nonarray: IIMAGE2D */ -#line 3020 "glslang/MachineIndependent/glslang.y" +#line 3021 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 9238 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9256 "MachineIndependent/glslang_tab.cpp" break; case 446: /* type_specifier_nonarray: UIMAGE2D */ -#line 3025 "glslang/MachineIndependent/glslang.y" +#line 3026 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 9248 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9266 "MachineIndependent/glslang_tab.cpp" break; case 447: /* type_specifier_nonarray: IMAGE3D */ -#line 3030 "glslang/MachineIndependent/glslang.y" +#line 3031 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 9258 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9276 "MachineIndependent/glslang_tab.cpp" break; case 448: /* type_specifier_nonarray: F16IMAGE3D */ -#line 3035 "glslang/MachineIndependent/glslang.y" +#line 3036 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 9269 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9287 "MachineIndependent/glslang_tab.cpp" break; case 449: /* type_specifier_nonarray: IIMAGE3D */ -#line 3041 "glslang/MachineIndependent/glslang.y" +#line 3042 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 9279 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9297 "MachineIndependent/glslang_tab.cpp" break; case 450: /* type_specifier_nonarray: UIMAGE3D */ -#line 3046 "glslang/MachineIndependent/glslang.y" +#line 3047 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 9289 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9307 "MachineIndependent/glslang_tab.cpp" break; case 451: /* type_specifier_nonarray: IMAGE2DRECT */ -#line 3051 "glslang/MachineIndependent/glslang.y" +#line 3052 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 9299 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9317 "MachineIndependent/glslang_tab.cpp" break; case 452: /* type_specifier_nonarray: F16IMAGE2DRECT */ -#line 3056 "glslang/MachineIndependent/glslang.y" +#line 3057 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 9310 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9328 "MachineIndependent/glslang_tab.cpp" break; case 453: /* type_specifier_nonarray: IIMAGE2DRECT */ -#line 3062 "glslang/MachineIndependent/glslang.y" +#line 3063 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 9320 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9338 "MachineIndependent/glslang_tab.cpp" break; case 454: /* type_specifier_nonarray: UIMAGE2DRECT */ -#line 3067 "glslang/MachineIndependent/glslang.y" +#line 3068 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 9330 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9348 "MachineIndependent/glslang_tab.cpp" break; case 455: /* type_specifier_nonarray: IMAGECUBE */ -#line 3072 "glslang/MachineIndependent/glslang.y" +#line 3073 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 9340 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9358 "MachineIndependent/glslang_tab.cpp" break; case 456: /* type_specifier_nonarray: F16IMAGECUBE */ -#line 3077 "glslang/MachineIndependent/glslang.y" +#line 3078 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 9351 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9369 "MachineIndependent/glslang_tab.cpp" break; case 457: /* type_specifier_nonarray: IIMAGECUBE */ -#line 3083 "glslang/MachineIndependent/glslang.y" +#line 3084 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 9361 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9379 "MachineIndependent/glslang_tab.cpp" break; case 458: /* type_specifier_nonarray: UIMAGECUBE */ -#line 3088 "glslang/MachineIndependent/glslang.y" +#line 3089 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 9371 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9389 "MachineIndependent/glslang_tab.cpp" break; case 459: /* type_specifier_nonarray: IMAGEBUFFER */ -#line 3093 "glslang/MachineIndependent/glslang.y" +#line 3094 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 9381 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9399 "MachineIndependent/glslang_tab.cpp" break; case 460: /* type_specifier_nonarray: F16IMAGEBUFFER */ -#line 3098 "glslang/MachineIndependent/glslang.y" +#line 3099 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 9392 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9410 "MachineIndependent/glslang_tab.cpp" break; case 461: /* type_specifier_nonarray: IIMAGEBUFFER */ -#line 3104 "glslang/MachineIndependent/glslang.y" +#line 3105 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 9402 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9420 "MachineIndependent/glslang_tab.cpp" break; case 462: /* type_specifier_nonarray: UIMAGEBUFFER */ -#line 3109 "glslang/MachineIndependent/glslang.y" +#line 3110 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 9412 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9430 "MachineIndependent/glslang_tab.cpp" break; case 463: /* type_specifier_nonarray: IMAGE1DARRAY */ -#line 3114 "glslang/MachineIndependent/glslang.y" +#line 3115 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 9422 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9440 "MachineIndependent/glslang_tab.cpp" break; case 464: /* type_specifier_nonarray: F16IMAGE1DARRAY */ -#line 3119 "glslang/MachineIndependent/glslang.y" +#line 3120 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 9433 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9451 "MachineIndependent/glslang_tab.cpp" break; case 465: /* type_specifier_nonarray: IIMAGE1DARRAY */ -#line 3125 "glslang/MachineIndependent/glslang.y" +#line 3126 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 9443 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9461 "MachineIndependent/glslang_tab.cpp" break; case 466: /* type_specifier_nonarray: UIMAGE1DARRAY */ -#line 3130 "glslang/MachineIndependent/glslang.y" +#line 3131 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 9453 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9471 "MachineIndependent/glslang_tab.cpp" break; case 467: /* type_specifier_nonarray: IMAGE2DARRAY */ -#line 3135 "glslang/MachineIndependent/glslang.y" +#line 3136 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 9463 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9481 "MachineIndependent/glslang_tab.cpp" break; case 468: /* type_specifier_nonarray: F16IMAGE2DARRAY */ -#line 3140 "glslang/MachineIndependent/glslang.y" +#line 3141 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 9474 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9492 "MachineIndependent/glslang_tab.cpp" break; case 469: /* type_specifier_nonarray: IIMAGE2DARRAY */ -#line 3146 "glslang/MachineIndependent/glslang.y" +#line 3147 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 9484 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9502 "MachineIndependent/glslang_tab.cpp" break; case 470: /* type_specifier_nonarray: UIMAGE2DARRAY */ -#line 3151 "glslang/MachineIndependent/glslang.y" +#line 3152 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 9494 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9512 "MachineIndependent/glslang_tab.cpp" break; case 471: /* type_specifier_nonarray: IMAGECUBEARRAY */ -#line 3156 "glslang/MachineIndependent/glslang.y" +#line 3157 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 9504 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9522 "MachineIndependent/glslang_tab.cpp" break; case 472: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ -#line 3161 "glslang/MachineIndependent/glslang.y" +#line 3162 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 9515 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9533 "MachineIndependent/glslang_tab.cpp" break; case 473: /* type_specifier_nonarray: IIMAGECUBEARRAY */ -#line 3167 "glslang/MachineIndependent/glslang.y" +#line 3168 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 9525 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9543 "MachineIndependent/glslang_tab.cpp" break; case 474: /* type_specifier_nonarray: UIMAGECUBEARRAY */ -#line 3172 "glslang/MachineIndependent/glslang.y" +#line 3173 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 9535 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9553 "MachineIndependent/glslang_tab.cpp" break; case 475: /* type_specifier_nonarray: IMAGE2DMS */ -#line 3177 "glslang/MachineIndependent/glslang.y" +#line 3178 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 9545 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9563 "MachineIndependent/glslang_tab.cpp" break; case 476: /* type_specifier_nonarray: F16IMAGE2DMS */ -#line 3182 "glslang/MachineIndependent/glslang.y" +#line 3183 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 9556 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9574 "MachineIndependent/glslang_tab.cpp" break; case 477: /* type_specifier_nonarray: IIMAGE2DMS */ -#line 3188 "glslang/MachineIndependent/glslang.y" +#line 3189 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 9566 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9584 "MachineIndependent/glslang_tab.cpp" break; case 478: /* type_specifier_nonarray: UIMAGE2DMS */ -#line 3193 "glslang/MachineIndependent/glslang.y" +#line 3194 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 9576 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9594 "MachineIndependent/glslang_tab.cpp" break; case 479: /* type_specifier_nonarray: IMAGE2DMSARRAY */ -#line 3198 "glslang/MachineIndependent/glslang.y" +#line 3199 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 9586 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9604 "MachineIndependent/glslang_tab.cpp" break; case 480: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ -#line 3203 "glslang/MachineIndependent/glslang.y" +#line 3204 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 9597 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9615 "MachineIndependent/glslang_tab.cpp" break; case 481: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ -#line 3209 "glslang/MachineIndependent/glslang.y" +#line 3210 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 9607 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9625 "MachineIndependent/glslang_tab.cpp" break; case 482: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ -#line 3214 "glslang/MachineIndependent/glslang.y" +#line 3215 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 9617 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9635 "MachineIndependent/glslang_tab.cpp" break; case 483: /* type_specifier_nonarray: I64IMAGE1D */ -#line 3219 "glslang/MachineIndependent/glslang.y" +#line 3220 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D); } -#line 9627 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9645 "MachineIndependent/glslang_tab.cpp" break; case 484: /* type_specifier_nonarray: U64IMAGE1D */ -#line 3224 "glslang/MachineIndependent/glslang.y" +#line 3225 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D); } -#line 9637 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9655 "MachineIndependent/glslang_tab.cpp" break; case 485: /* type_specifier_nonarray: I64IMAGE2D */ -#line 3229 "glslang/MachineIndependent/glslang.y" +#line 3230 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D); } -#line 9647 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9665 "MachineIndependent/glslang_tab.cpp" break; case 486: /* type_specifier_nonarray: U64IMAGE2D */ -#line 3234 "glslang/MachineIndependent/glslang.y" +#line 3235 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D); } -#line 9657 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9675 "MachineIndependent/glslang_tab.cpp" break; case 487: /* type_specifier_nonarray: I64IMAGE3D */ -#line 3239 "glslang/MachineIndependent/glslang.y" +#line 3240 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D); } -#line 9667 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9685 "MachineIndependent/glslang_tab.cpp" break; case 488: /* type_specifier_nonarray: U64IMAGE3D */ -#line 3244 "glslang/MachineIndependent/glslang.y" +#line 3245 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D); } -#line 9677 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9695 "MachineIndependent/glslang_tab.cpp" break; case 489: /* type_specifier_nonarray: I64IMAGE2DRECT */ -#line 3249 "glslang/MachineIndependent/glslang.y" +#line 3250 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect); } -#line 9687 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9705 "MachineIndependent/glslang_tab.cpp" break; case 490: /* type_specifier_nonarray: U64IMAGE2DRECT */ -#line 3254 "glslang/MachineIndependent/glslang.y" +#line 3255 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect); } -#line 9697 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9715 "MachineIndependent/glslang_tab.cpp" break; case 491: /* type_specifier_nonarray: I64IMAGECUBE */ -#line 3259 "glslang/MachineIndependent/glslang.y" +#line 3260 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube); } -#line 9707 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9725 "MachineIndependent/glslang_tab.cpp" break; case 492: /* type_specifier_nonarray: U64IMAGECUBE */ -#line 3264 "glslang/MachineIndependent/glslang.y" +#line 3265 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube); } -#line 9717 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9735 "MachineIndependent/glslang_tab.cpp" break; case 493: /* type_specifier_nonarray: I64IMAGEBUFFER */ -#line 3269 "glslang/MachineIndependent/glslang.y" +#line 3270 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer); } -#line 9727 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9745 "MachineIndependent/glslang_tab.cpp" break; case 494: /* type_specifier_nonarray: U64IMAGEBUFFER */ -#line 3274 "glslang/MachineIndependent/glslang.y" +#line 3275 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer); } -#line 9737 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9755 "MachineIndependent/glslang_tab.cpp" break; case 495: /* type_specifier_nonarray: I64IMAGE1DARRAY */ -#line 3279 "glslang/MachineIndependent/glslang.y" +#line 3280 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true); } -#line 9747 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9765 "MachineIndependent/glslang_tab.cpp" break; case 496: /* type_specifier_nonarray: U64IMAGE1DARRAY */ -#line 3284 "glslang/MachineIndependent/glslang.y" +#line 3285 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true); } -#line 9757 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9775 "MachineIndependent/glslang_tab.cpp" break; case 497: /* type_specifier_nonarray: I64IMAGE2DARRAY */ -#line 3289 "glslang/MachineIndependent/glslang.y" +#line 3290 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true); } -#line 9767 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9785 "MachineIndependent/glslang_tab.cpp" break; case 498: /* type_specifier_nonarray: U64IMAGE2DARRAY */ -#line 3294 "glslang/MachineIndependent/glslang.y" +#line 3295 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true); } -#line 9777 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9795 "MachineIndependent/glslang_tab.cpp" break; case 499: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ -#line 3299 "glslang/MachineIndependent/glslang.y" +#line 3300 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true); } -#line 9787 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9805 "MachineIndependent/glslang_tab.cpp" break; case 500: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ -#line 3304 "glslang/MachineIndependent/glslang.y" +#line 3305 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true); } -#line 9797 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9815 "MachineIndependent/glslang_tab.cpp" break; case 501: /* type_specifier_nonarray: I64IMAGE2DMS */ -#line 3309 "glslang/MachineIndependent/glslang.y" +#line 3310 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true); } -#line 9807 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9825 "MachineIndependent/glslang_tab.cpp" break; case 502: /* type_specifier_nonarray: U64IMAGE2DMS */ -#line 3314 "glslang/MachineIndependent/glslang.y" +#line 3315 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true); } -#line 9817 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9835 "MachineIndependent/glslang_tab.cpp" break; case 503: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ -#line 3319 "glslang/MachineIndependent/glslang.y" +#line 3320 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true); } -#line 9827 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9845 "MachineIndependent/glslang_tab.cpp" break; case 504: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ -#line 3324 "glslang/MachineIndependent/glslang.y" +#line 3325 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true); } -#line 9837 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9855 "MachineIndependent/glslang_tab.cpp" break; case 505: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ -#line 3329 "glslang/MachineIndependent/glslang.y" +#line 3330 "MachineIndependent/glslang.y" { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 9848 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9866 "MachineIndependent/glslang_tab.cpp" break; case 506: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ -#line 3335 "glslang/MachineIndependent/glslang.y" +#line 3336 "MachineIndependent/glslang.y" { // GL_EXT_YUV_target (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 9859 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9877 "MachineIndependent/glslang_tab.cpp" break; case 507: /* type_specifier_nonarray: SUBPASSINPUT */ -#line 3341 "glslang/MachineIndependent/glslang.y" +#line 3342 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 9870 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9888 "MachineIndependent/glslang_tab.cpp" break; case 508: /* type_specifier_nonarray: SUBPASSINPUTMS */ -#line 3347 "glslang/MachineIndependent/glslang.y" +#line 3348 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 9881 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9899 "MachineIndependent/glslang_tab.cpp" break; case 509: /* type_specifier_nonarray: F16SUBPASSINPUT */ -#line 3353 "glslang/MachineIndependent/glslang.y" +#line 3354 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -9889,11 +9907,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 9893 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9911 "MachineIndependent/glslang_tab.cpp" break; case 510: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ -#line 3360 "glslang/MachineIndependent/glslang.y" +#line 3361 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -9901,98 +9919,98 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 9905 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9923 "MachineIndependent/glslang_tab.cpp" break; case 511: /* type_specifier_nonarray: ISUBPASSINPUT */ -#line 3367 "glslang/MachineIndependent/glslang.y" +#line 3368 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 9916 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9934 "MachineIndependent/glslang_tab.cpp" break; case 512: /* type_specifier_nonarray: ISUBPASSINPUTMS */ -#line 3373 "glslang/MachineIndependent/glslang.y" +#line 3374 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 9927 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9945 "MachineIndependent/glslang_tab.cpp" break; case 513: /* type_specifier_nonarray: USUBPASSINPUT */ -#line 3379 "glslang/MachineIndependent/glslang.y" +#line 3380 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 9938 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9956 "MachineIndependent/glslang_tab.cpp" break; case 514: /* type_specifier_nonarray: USUBPASSINPUTMS */ -#line 3385 "glslang/MachineIndependent/glslang.y" +#line 3386 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 9949 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9967 "MachineIndependent/glslang_tab.cpp" break; case 515: /* type_specifier_nonarray: FCOOPMATNV */ -#line 3391 "glslang/MachineIndependent/glslang.y" +#line 3392 "MachineIndependent/glslang.y" { parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 9960 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9978 "MachineIndependent/glslang_tab.cpp" break; case 516: /* type_specifier_nonarray: ICOOPMATNV */ -#line 3397 "glslang/MachineIndependent/glslang.y" +#line 3398 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).coopmat = true; } -#line 9971 "glslang/MachineIndependent/glslang_tab.cpp" +#line 9989 "MachineIndependent/glslang_tab.cpp" break; case 517: /* type_specifier_nonarray: UCOOPMATNV */ -#line 3403 "glslang/MachineIndependent/glslang.y" +#line 3404 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).coopmat = true; } -#line 9982 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10000 "MachineIndependent/glslang_tab.cpp" break; case 518: /* type_specifier_nonarray: struct_specifier */ -#line 3410 "glslang/MachineIndependent/glslang.y" +#line 3411 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 9992 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10010 "MachineIndependent/glslang_tab.cpp" break; case 519: /* type_specifier_nonarray: TYPE_NAME */ -#line 3415 "glslang/MachineIndependent/glslang.y" +#line 3416 "MachineIndependent/glslang.y" { // // This is for user defined type names. The lexical phase looked up the @@ -10006,47 +10024,47 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 10010 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10028 "MachineIndependent/glslang_tab.cpp" break; case 520: /* precision_qualifier: HIGH_PRECISION */ -#line 3431 "glslang/MachineIndependent/glslang.y" +#line 3432 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 10020 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10038 "MachineIndependent/glslang_tab.cpp" break; case 521: /* precision_qualifier: MEDIUM_PRECISION */ -#line 3436 "glslang/MachineIndependent/glslang.y" +#line 3437 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 10030 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10048 "MachineIndependent/glslang_tab.cpp" break; case 522: /* precision_qualifier: LOW_PRECISION */ -#line 3441 "glslang/MachineIndependent/glslang.y" +#line 3442 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 10040 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10058 "MachineIndependent/glslang_tab.cpp" break; case 523: /* $@3: %empty */ -#line 3449 "glslang/MachineIndependent/glslang.y" +#line 3450 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 10046 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10064 "MachineIndependent/glslang_tab.cpp" break; case 524: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ -#line 3449 "glslang/MachineIndependent/glslang.y" +#line 3450 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); @@ -10058,17 +10076,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10062 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10080 "MachineIndependent/glslang_tab.cpp" break; case 525: /* $@4: %empty */ -#line 3460 "glslang/MachineIndependent/glslang.y" +#line 3461 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 10068 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10086 "MachineIndependent/glslang_tab.cpp" break; case 526: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ -#line 3460 "glslang/MachineIndependent/glslang.y" +#line 3461 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -10076,19 +10094,19 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10080 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10098 "MachineIndependent/glslang_tab.cpp" break; case 527: /* struct_declaration_list: struct_declaration */ -#line 3470 "glslang/MachineIndependent/glslang.y" +#line 3471 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 10088 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10106 "MachineIndependent/glslang_tab.cpp" break; case 528: /* struct_declaration_list: struct_declaration_list struct_declaration */ -#line 3473 "glslang/MachineIndependent/glslang.y" +#line 3474 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -10099,11 +10117,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 10103 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10121 "MachineIndependent/glslang_tab.cpp" break; case 529: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ -#line 3486 "glslang/MachineIndependent/glslang.y" +#line 3487 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10126,11 +10144,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10130 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10148 "MachineIndependent/glslang_tab.cpp" break; case 530: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ -#line 3508 "glslang/MachineIndependent/glslang.y" +#line 3509 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10155,38 +10173,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10159 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10177 "MachineIndependent/glslang_tab.cpp" break; case 531: /* struct_declarator_list: struct_declarator */ -#line 3535 "glslang/MachineIndependent/glslang.y" +#line 3536 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10168 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10186 "MachineIndependent/glslang_tab.cpp" break; case 532: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ -#line 3539 "glslang/MachineIndependent/glslang.y" +#line 3540 "MachineIndependent/glslang.y" { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10176 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10194 "MachineIndependent/glslang_tab.cpp" break; case 533: /* struct_declarator: IDENTIFIER */ -#line 3545 "glslang/MachineIndependent/glslang.y" +#line 3546 "MachineIndependent/glslang.y" { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 10186 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10204 "MachineIndependent/glslang_tab.cpp" break; case 534: /* struct_declarator: IDENTIFIER array_specifier */ -#line 3550 "glslang/MachineIndependent/glslang.y" +#line 3551 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -10195,235 +10213,235 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 10199 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10217 "MachineIndependent/glslang_tab.cpp" break; case 535: /* initializer: assignment_expression */ -#line 3561 "glslang/MachineIndependent/glslang.y" +#line 3562 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10207 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10225 "MachineIndependent/glslang_tab.cpp" break; case 536: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ -#line 3565 "glslang/MachineIndependent/glslang.y" +#line 3566 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 10218 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10236 "MachineIndependent/glslang_tab.cpp" break; case 537: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ -#line 3571 "glslang/MachineIndependent/glslang.y" +#line 3572 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 10229 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10247 "MachineIndependent/glslang_tab.cpp" break; case 538: /* initializer_list: initializer */ -#line 3582 "glslang/MachineIndependent/glslang.y" +#line 3583 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 10237 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10255 "MachineIndependent/glslang_tab.cpp" break; case 539: /* initializer_list: initializer_list COMMA initializer */ -#line 3585 "glslang/MachineIndependent/glslang.y" +#line 3586 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 10245 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10263 "MachineIndependent/glslang_tab.cpp" break; case 540: /* declaration_statement: declaration */ -#line 3592 "glslang/MachineIndependent/glslang.y" +#line 3593 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10251 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10269 "MachineIndependent/glslang_tab.cpp" break; case 541: /* statement: compound_statement */ -#line 3596 "glslang/MachineIndependent/glslang.y" +#line 3597 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10257 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10275 "MachineIndependent/glslang_tab.cpp" break; case 542: /* statement: simple_statement */ -#line 3597 "glslang/MachineIndependent/glslang.y" +#line 3598 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10263 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10281 "MachineIndependent/glslang_tab.cpp" break; case 543: /* simple_statement: declaration_statement */ -#line 3603 "glslang/MachineIndependent/glslang.y" +#line 3604 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10269 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10287 "MachineIndependent/glslang_tab.cpp" break; case 544: /* simple_statement: expression_statement */ -#line 3604 "glslang/MachineIndependent/glslang.y" +#line 3605 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10275 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10293 "MachineIndependent/glslang_tab.cpp" break; case 545: /* simple_statement: selection_statement */ -#line 3605 "glslang/MachineIndependent/glslang.y" +#line 3606 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10281 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10299 "MachineIndependent/glslang_tab.cpp" break; case 546: /* simple_statement: switch_statement */ -#line 3606 "glslang/MachineIndependent/glslang.y" +#line 3607 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10287 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10305 "MachineIndependent/glslang_tab.cpp" break; case 547: /* simple_statement: case_label */ -#line 3607 "glslang/MachineIndependent/glslang.y" +#line 3608 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10293 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10311 "MachineIndependent/glslang_tab.cpp" break; case 548: /* simple_statement: iteration_statement */ -#line 3608 "glslang/MachineIndependent/glslang.y" +#line 3609 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10299 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10317 "MachineIndependent/glslang_tab.cpp" break; case 549: /* simple_statement: jump_statement */ -#line 3609 "glslang/MachineIndependent/glslang.y" +#line 3610 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10305 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10323 "MachineIndependent/glslang_tab.cpp" break; case 550: /* simple_statement: demote_statement */ -#line 3611 "glslang/MachineIndependent/glslang.y" +#line 3612 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10311 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10329 "MachineIndependent/glslang_tab.cpp" break; case 551: /* demote_statement: DEMOTE SEMICOLON */ -#line 3617 "glslang/MachineIndependent/glslang.y" +#line 3618 "MachineIndependent/glslang.y" { 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 10321 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10339 "MachineIndependent/glslang_tab.cpp" break; case 552: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3626 "glslang/MachineIndependent/glslang.y" +#line 3627 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10327 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10345 "MachineIndependent/glslang_tab.cpp" break; case 553: /* $@5: %empty */ -#line 3627 "glslang/MachineIndependent/glslang.y" +#line 3628 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 10336 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10354 "MachineIndependent/glslang_tab.cpp" break; case 554: /* $@6: %empty */ -#line 3631 "glslang/MachineIndependent/glslang.y" +#line 3632 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 10345 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10363 "MachineIndependent/glslang_tab.cpp" break; case 555: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ -#line 3635 "glslang/MachineIndependent/glslang.y" +#line 3636 "MachineIndependent/glslang.y" { 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 10355 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10373 "MachineIndependent/glslang_tab.cpp" break; case 556: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3643 "glslang/MachineIndependent/glslang.y" +#line 3644 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10361 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10379 "MachineIndependent/glslang_tab.cpp" break; case 557: /* statement_no_new_scope: simple_statement */ -#line 3644 "glslang/MachineIndependent/glslang.y" +#line 3645 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10367 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10385 "MachineIndependent/glslang_tab.cpp" break; case 558: /* $@7: %empty */ -#line 3648 "glslang/MachineIndependent/glslang.y" +#line 3649 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 10375 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10393 "MachineIndependent/glslang_tab.cpp" break; case 559: /* statement_scoped: $@7 compound_statement */ -#line 3651 "glslang/MachineIndependent/glslang.y" +#line 3652 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10384 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10402 "MachineIndependent/glslang_tab.cpp" break; case 560: /* $@8: %empty */ -#line 3655 "glslang/MachineIndependent/glslang.y" +#line 3656 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10394 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10412 "MachineIndependent/glslang_tab.cpp" break; case 561: /* statement_scoped: $@8 simple_statement */ -#line 3660 "glslang/MachineIndependent/glslang.y" +#line 3661 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10405 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10423 "MachineIndependent/glslang_tab.cpp" break; case 562: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 3669 "glslang/MachineIndependent/glslang.y" +#line 3670 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10413 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10431 "MachineIndependent/glslang_tab.cpp" break; case 563: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 3672 "glslang/MachineIndependent/glslang.y" +#line 3673 "MachineIndependent/glslang.y" { 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 10423 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10441 "MachineIndependent/glslang_tab.cpp" break; case 564: /* statement_list: statement */ -#line 3680 "glslang/MachineIndependent/glslang.y" +#line 3681 "MachineIndependent/glslang.y" { (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 || @@ -10432,11 +10450,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 10436 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10454 "MachineIndependent/glslang_tab.cpp" break; case 565: /* statement_list: statement_list statement */ -#line 3688 "glslang/MachineIndependent/glslang.y" +#line 3689 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { @@ -10445,76 +10463,76 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 10449 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10467 "MachineIndependent/glslang_tab.cpp" break; case 566: /* expression_statement: SEMICOLON */ -#line 3699 "glslang/MachineIndependent/glslang.y" +#line 3700 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10455 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10473 "MachineIndependent/glslang_tab.cpp" break; case 567: /* expression_statement: expression SEMICOLON */ -#line 3700 "glslang/MachineIndependent/glslang.y" +#line 3701 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 10461 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10479 "MachineIndependent/glslang_tab.cpp" break; case 568: /* selection_statement: selection_statement_nonattributed */ -#line 3704 "glslang/MachineIndependent/glslang.y" +#line 3705 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10469 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10487 "MachineIndependent/glslang_tab.cpp" break; case 569: /* selection_statement: attribute selection_statement_nonattributed */ -#line 3708 "glslang/MachineIndependent/glslang.y" +#line 3709 "MachineIndependent/glslang.y" { parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10478 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10496 "MachineIndependent/glslang_tab.cpp" break; case 570: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 3715 "glslang/MachineIndependent/glslang.y" +#line 3716 "MachineIndependent/glslang.y" { 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 10487 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10505 "MachineIndependent/glslang_tab.cpp" break; case 571: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 3722 "glslang/MachineIndependent/glslang.y" +#line 3723 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 10496 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10514 "MachineIndependent/glslang_tab.cpp" break; case 572: /* selection_rest_statement: statement_scoped */ -#line 3726 "glslang/MachineIndependent/glslang.y" +#line 3727 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 10505 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10523 "MachineIndependent/glslang_tab.cpp" break; case 573: /* condition: expression */ -#line 3734 "glslang/MachineIndependent/glslang.y" +#line 3735 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 10514 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10532 "MachineIndependent/glslang_tab.cpp" break; case 574: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 3738 "glslang/MachineIndependent/glslang.y" +#line 3739 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -10525,28 +10543,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 10529 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10547 "MachineIndependent/glslang_tab.cpp" break; case 575: /* switch_statement: switch_statement_nonattributed */ -#line 3751 "glslang/MachineIndependent/glslang.y" +#line 3752 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10537 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10555 "MachineIndependent/glslang_tab.cpp" break; case 576: /* switch_statement: attribute switch_statement_nonattributed */ -#line 3755 "glslang/MachineIndependent/glslang.y" +#line 3756 "MachineIndependent/glslang.y" { parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10546 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10564 "MachineIndependent/glslang_tab.cpp" break; case 577: /* $@9: %empty */ -#line 3762 "glslang/MachineIndependent/glslang.y" +#line 3763 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -10555,11 +10573,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 10559 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10577 "MachineIndependent/glslang_tab.cpp" break; case 578: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 3770 "glslang/MachineIndependent/glslang.y" +#line 3771 "MachineIndependent/glslang.y" { (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(); @@ -10569,27 +10587,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10573 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10591 "MachineIndependent/glslang_tab.cpp" break; case 579: /* switch_statement_list: %empty */ -#line 3782 "glslang/MachineIndependent/glslang.y" +#line 3783 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10581 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10599 "MachineIndependent/glslang_tab.cpp" break; case 580: /* switch_statement_list: statement_list */ -#line 3785 "glslang/MachineIndependent/glslang.y" +#line 3786 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10589 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10607 "MachineIndependent/glslang_tab.cpp" break; case 581: /* case_label: CASE expression COLON */ -#line 3791 "glslang/MachineIndependent/glslang.y" +#line 3792 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10602,11 +10620,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 10606 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10624 "MachineIndependent/glslang_tab.cpp" break; case 582: /* case_label: DEFAULT COLON */ -#line 3803 "glslang/MachineIndependent/glslang.y" +#line 3804 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10616,28 +10634,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 10620 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10638 "MachineIndependent/glslang_tab.cpp" break; case 583: /* iteration_statement: iteration_statement_nonattributed */ -#line 3815 "glslang/MachineIndependent/glslang.y" +#line 3816 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10628 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10646 "MachineIndependent/glslang_tab.cpp" break; case 584: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 3819 "glslang/MachineIndependent/glslang.y" +#line 3820 "MachineIndependent/glslang.y" { parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10637 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10655 "MachineIndependent/glslang_tab.cpp" break; case 585: /* $@10: %empty */ -#line 3826 "glslang/MachineIndependent/glslang.y" +#line 3827 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -10646,11 +10664,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10650 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10668 "MachineIndependent/glslang_tab.cpp" break; case 586: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ -#line 3834 "glslang/MachineIndependent/glslang.y" +#line 3835 "MachineIndependent/glslang.y" { 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); @@ -10658,21 +10676,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10662 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10680 "MachineIndependent/glslang_tab.cpp" break; case 587: /* $@11: %empty */ -#line 3841 "glslang/MachineIndependent/glslang.y" +#line 3842 "MachineIndependent/glslang.y" { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10672 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10690 "MachineIndependent/glslang_tab.cpp" break; case 588: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 3846 "glslang/MachineIndependent/glslang.y" +#line 3847 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -10684,22 +10702,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10688 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10706 "MachineIndependent/glslang_tab.cpp" break; case 589: /* $@12: %empty */ -#line 3857 "glslang/MachineIndependent/glslang.y" +#line 3858 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10699 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10717 "MachineIndependent/glslang_tab.cpp" break; case 590: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 3863 "glslang/MachineIndependent/glslang.y" +#line 3864 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -10712,81 +10730,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10716 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10734 "MachineIndependent/glslang_tab.cpp" break; case 591: /* for_init_statement: expression_statement */ -#line 3878 "glslang/MachineIndependent/glslang.y" +#line 3879 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10724 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10742 "MachineIndependent/glslang_tab.cpp" break; case 592: /* for_init_statement: declaration_statement */ -#line 3881 "glslang/MachineIndependent/glslang.y" +#line 3882 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10732 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10750 "MachineIndependent/glslang_tab.cpp" break; case 593: /* conditionopt: condition */ -#line 3887 "glslang/MachineIndependent/glslang.y" +#line 3888 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10740 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10758 "MachineIndependent/glslang_tab.cpp" break; case 594: /* conditionopt: %empty */ -#line 3890 "glslang/MachineIndependent/glslang.y" +#line 3891 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 10748 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10766 "MachineIndependent/glslang_tab.cpp" break; case 595: /* for_rest_statement: conditionopt SEMICOLON */ -#line 3896 "glslang/MachineIndependent/glslang.y" +#line 3897 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 10757 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10775 "MachineIndependent/glslang_tab.cpp" break; case 596: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 3900 "glslang/MachineIndependent/glslang.y" +#line 3901 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 10766 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10784 "MachineIndependent/glslang_tab.cpp" break; case 597: /* jump_statement: CONTINUE SEMICOLON */ -#line 3907 "glslang/MachineIndependent/glslang.y" +#line 3908 "MachineIndependent/glslang.y" { 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 10776 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10794 "MachineIndependent/glslang_tab.cpp" break; case 598: /* jump_statement: BREAK SEMICOLON */ -#line 3912 "glslang/MachineIndependent/glslang.y" +#line 3913 "MachineIndependent/glslang.y" { 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 10786 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10804 "MachineIndependent/glslang_tab.cpp" break; case 599: /* jump_statement: RETURN SEMICOLON */ -#line 3917 "glslang/MachineIndependent/glslang.y" +#line 3918 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -10794,83 +10812,101 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 10798 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10816 "MachineIndependent/glslang_tab.cpp" break; case 600: /* jump_statement: RETURN expression SEMICOLON */ -#line 3924 "glslang/MachineIndependent/glslang.y" +#line 3925 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 10806 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10824 "MachineIndependent/glslang_tab.cpp" break; case 601: /* jump_statement: DISCARD SEMICOLON */ -#line 3927 "glslang/MachineIndependent/glslang.y" +#line 3928 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 10815 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10833 "MachineIndependent/glslang_tab.cpp" break; case 602: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 3931 "glslang/MachineIndependent/glslang.y" +#line 3932 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 10824 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10842 "MachineIndependent/glslang_tab.cpp" + break; + + case 603: /* jump_statement: TERMINATE_RAY SEMICOLON */ +#line 3937 "MachineIndependent/glslang.y" + { + parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); + (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); + } +#line 10851 "MachineIndependent/glslang_tab.cpp" + break; + + case 604: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ +#line 3941 "MachineIndependent/glslang.y" + { + parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); + (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); + } +#line 10860 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* translation_unit: external_declaration */ -#line 3940 "glslang/MachineIndependent/glslang.y" + case 605: /* translation_unit: external_declaration */ +#line 3951 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 10833 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10869 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* translation_unit: translation_unit external_declaration */ -#line 3944 "glslang/MachineIndependent/glslang.y" + case 606: /* translation_unit: translation_unit external_declaration */ +#line 3955 "MachineIndependent/glslang.y" { 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 10844 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10880 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* external_declaration: function_definition */ -#line 3953 "glslang/MachineIndependent/glslang.y" + case 607: /* external_declaration: function_definition */ +#line 3964 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10852 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10888 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* external_declaration: declaration */ -#line 3956 "glslang/MachineIndependent/glslang.y" + case 608: /* external_declaration: declaration */ +#line 3967 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10860 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10896 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* external_declaration: SEMICOLON */ -#line 3960 "glslang/MachineIndependent/glslang.y" + case 609: /* external_declaration: SEMICOLON */ +#line 3971 "MachineIndependent/glslang.y" { 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 10870 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10906 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* $@13: %empty */ -#line 3969 "glslang/MachineIndependent/glslang.y" + case 610: /* $@13: %empty */ +#line 3980 "MachineIndependent/glslang.y" { (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); @@ -10883,11 +10919,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 10887 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10923 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 3981 "glslang/MachineIndependent/glslang.y" + case 611: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ +#line 3992 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -10914,52 +10950,52 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 10918 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10954 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4011 "glslang/MachineIndependent/glslang.y" + case 612: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4022 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); } -#line 10927 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10963 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* attribute_list: single_attribute */ -#line 4017 "glslang/MachineIndependent/glslang.y" + case 613: /* attribute_list: single_attribute */ +#line 4028 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 10935 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10971 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4020 "glslang/MachineIndependent/glslang.y" + case 614: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4031 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 10943 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10979 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* single_attribute: IDENTIFIER */ -#line 4025 "glslang/MachineIndependent/glslang.y" + case 615: /* single_attribute: IDENTIFIER */ +#line 4036 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 10951 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10987 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4028 "glslang/MachineIndependent/glslang.y" + case 616: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4039 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 10959 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10995 "MachineIndependent/glslang_tab.cpp" break; -#line 10963 "glslang/MachineIndependent/glslang_tab.cpp" +#line 10999 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -11184,5 +11220,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4033 "glslang/MachineIndependent/glslang.y" +#line 4044 "MachineIndependent/glslang.y" diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index 66983a0809..d6bc00d9e8 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -1,4 +1,4 @@ -/* A Bison parser, made by GNU Bison 3.7.2. */ +/* A Bison parser, made by GNU Bison 3.7.4. */ /* Bison interface for Yacc-like parsers in C @@ -35,8 +35,8 @@ especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ -#ifndef YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED -# define YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED +#ifndef YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED +# define YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 1 @@ -447,53 +447,55 @@ extern int yydebug; CASE = 648, /* CASE */ DEFAULT = 649, /* DEFAULT */ TERMINATE_INVOCATION = 650, /* TERMINATE_INVOCATION */ - UNIFORM = 651, /* UNIFORM */ - SHARED = 652, /* SHARED */ - BUFFER = 653, /* BUFFER */ - FLAT = 654, /* FLAT */ - SMOOTH = 655, /* SMOOTH */ - LAYOUT = 656, /* LAYOUT */ - DOUBLECONSTANT = 657, /* DOUBLECONSTANT */ - INT16CONSTANT = 658, /* INT16CONSTANT */ - UINT16CONSTANT = 659, /* UINT16CONSTANT */ - FLOAT16CONSTANT = 660, /* FLOAT16CONSTANT */ - INT32CONSTANT = 661, /* INT32CONSTANT */ - UINT32CONSTANT = 662, /* UINT32CONSTANT */ - INT64CONSTANT = 663, /* INT64CONSTANT */ - UINT64CONSTANT = 664, /* UINT64CONSTANT */ - SUBROUTINE = 665, /* SUBROUTINE */ - DEMOTE = 666, /* DEMOTE */ - PAYLOADNV = 667, /* PAYLOADNV */ - PAYLOADINNV = 668, /* PAYLOADINNV */ - HITATTRNV = 669, /* HITATTRNV */ - CALLDATANV = 670, /* CALLDATANV */ - CALLDATAINNV = 671, /* CALLDATAINNV */ - PAYLOADEXT = 672, /* PAYLOADEXT */ - PAYLOADINEXT = 673, /* PAYLOADINEXT */ - HITATTREXT = 674, /* HITATTREXT */ - CALLDATAEXT = 675, /* CALLDATAEXT */ - CALLDATAINEXT = 676, /* CALLDATAINEXT */ - PATCH = 677, /* PATCH */ - SAMPLE = 678, /* SAMPLE */ - NONUNIFORM = 679, /* NONUNIFORM */ - COHERENT = 680, /* COHERENT */ - VOLATILE = 681, /* VOLATILE */ - RESTRICT = 682, /* RESTRICT */ - READONLY = 683, /* READONLY */ - WRITEONLY = 684, /* WRITEONLY */ - DEVICECOHERENT = 685, /* DEVICECOHERENT */ - QUEUEFAMILYCOHERENT = 686, /* QUEUEFAMILYCOHERENT */ - WORKGROUPCOHERENT = 687, /* WORKGROUPCOHERENT */ - SUBGROUPCOHERENT = 688, /* SUBGROUPCOHERENT */ - NONPRIVATE = 689, /* NONPRIVATE */ - SHADERCALLCOHERENT = 690, /* SHADERCALLCOHERENT */ - NOPERSPECTIVE = 691, /* NOPERSPECTIVE */ - EXPLICITINTERPAMD = 692, /* EXPLICITINTERPAMD */ - PERVERTEXNV = 693, /* PERVERTEXNV */ - PERPRIMITIVENV = 694, /* PERPRIMITIVENV */ - PERVIEWNV = 695, /* PERVIEWNV */ - PERTASKNV = 696, /* PERTASKNV */ - PRECISE = 697 /* PRECISE */ + TERMINATE_RAY = 651, /* TERMINATE_RAY */ + IGNORE_INTERSECTION = 652, /* IGNORE_INTERSECTION */ + UNIFORM = 653, /* UNIFORM */ + SHARED = 654, /* SHARED */ + BUFFER = 655, /* BUFFER */ + FLAT = 656, /* FLAT */ + SMOOTH = 657, /* SMOOTH */ + LAYOUT = 658, /* LAYOUT */ + DOUBLECONSTANT = 659, /* DOUBLECONSTANT */ + INT16CONSTANT = 660, /* INT16CONSTANT */ + UINT16CONSTANT = 661, /* UINT16CONSTANT */ + FLOAT16CONSTANT = 662, /* FLOAT16CONSTANT */ + INT32CONSTANT = 663, /* INT32CONSTANT */ + UINT32CONSTANT = 664, /* UINT32CONSTANT */ + INT64CONSTANT = 665, /* INT64CONSTANT */ + UINT64CONSTANT = 666, /* UINT64CONSTANT */ + SUBROUTINE = 667, /* SUBROUTINE */ + DEMOTE = 668, /* DEMOTE */ + PAYLOADNV = 669, /* PAYLOADNV */ + PAYLOADINNV = 670, /* PAYLOADINNV */ + HITATTRNV = 671, /* HITATTRNV */ + CALLDATANV = 672, /* CALLDATANV */ + CALLDATAINNV = 673, /* CALLDATAINNV */ + PAYLOADEXT = 674, /* PAYLOADEXT */ + PAYLOADINEXT = 675, /* PAYLOADINEXT */ + HITATTREXT = 676, /* HITATTREXT */ + CALLDATAEXT = 677, /* CALLDATAEXT */ + CALLDATAINEXT = 678, /* CALLDATAINEXT */ + PATCH = 679, /* PATCH */ + SAMPLE = 680, /* SAMPLE */ + NONUNIFORM = 681, /* NONUNIFORM */ + COHERENT = 682, /* COHERENT */ + VOLATILE = 683, /* VOLATILE */ + RESTRICT = 684, /* RESTRICT */ + READONLY = 685, /* READONLY */ + WRITEONLY = 686, /* WRITEONLY */ + DEVICECOHERENT = 687, /* DEVICECOHERENT */ + QUEUEFAMILYCOHERENT = 688, /* QUEUEFAMILYCOHERENT */ + WORKGROUPCOHERENT = 689, /* WORKGROUPCOHERENT */ + SUBGROUPCOHERENT = 690, /* SUBGROUPCOHERENT */ + NONPRIVATE = 691, /* NONPRIVATE */ + SHADERCALLCOHERENT = 692, /* SHADERCALLCOHERENT */ + NOPERSPECTIVE = 693, /* NOPERSPECTIVE */ + EXPLICITINTERPAMD = 694, /* EXPLICITINTERPAMD */ + PERVERTEXNV = 695, /* PERVERTEXNV */ + PERPRIMITIVENV = 696, /* PERPRIMITIVENV */ + PERVIEWNV = 697, /* PERVIEWNV */ + PERTASKNV = 698, /* PERTASKNV */ + PRECISE = 699 /* PRECISE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -502,7 +504,7 @@ extern int yydebug; #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { -#line 97 "glslang/MachineIndependent/glslang.y" +#line 97 "MachineIndependent/glslang.y" struct { glslang::TSourceLoc loc; @@ -538,7 +540,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 542 "glslang/MachineIndependent/glslang_tab.cpp.h" +#line 544 "MachineIndependent/glslang_tab.cpp.h" }; typedef union YYSTYPE YYSTYPE; @@ -550,4 +552,4 @@ typedef union YYSTYPE YYSTYPE; int yyparse (glslang::TParseContext* pParseContext); -#endif /* !YY_YY_GLSLANG_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ +#endif /* !YY_YY_MACHINEINDEPENDENT_GLSLANG_TAB_CPP_H_INCLUDED */ diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index ac862e6391..5ce3e47280 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -438,6 +438,9 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) case EOpConvUint64ToPtr: out.debug << "Convert uint64_t to pointer"; break; case EOpConvPtrToUint64: out.debug << "Convert pointer to uint64_t"; break; + case EOpConvUint64ToAccStruct: out.debug << "Convert uint64_t to acceleration structure"; break; + case EOpConvUvec2ToAccStruct: out.debug << "Convert uvec2 to acceleration strucuture "; break; + case EOpRadians: out.debug << "radians"; break; case EOpDegrees: out.debug << "degrees"; break; case EOpSin: out.debug << "sine"; break; @@ -829,6 +832,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpConstructTextureSampler: out.debug << "Construct combined texture-sampler"; break; case EOpConstructReference: out.debug << "Construct reference"; break; case EOpConstructCooperativeMatrix: out.debug << "Construct cooperative matrix"; break; + case EOpConstructAccStruct: out.debug << "Construct acceleration structure"; break; case EOpLessThan: out.debug << "Compare Less Than"; break; case EOpGreaterThan: out.debug << "Compare Greater Than"; break; @@ -1079,11 +1083,15 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpSubpassLoad: out.debug << "subpassLoad"; break; case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break; - case EOpTrace: out.debug << "traceNV"; break; + case EOpTraceNV: out.debug << "traceNV"; break; + case EOpTraceKHR: out.debug << "traceRayKHR"; break; case EOpReportIntersection: out.debug << "reportIntersectionNV"; break; - case EOpIgnoreIntersection: out.debug << "ignoreIntersectionNV"; break; - case EOpTerminateRay: out.debug << "terminateRayNV"; break; - case EOpExecuteCallable: out.debug << "executeCallableNV"; break; + case EOpIgnoreIntersectionNV: out.debug << "ignoreIntersectionNV"; break; + case EOpIgnoreIntersectionKHR: out.debug << "ignoreIntersectionKHR"; break; + case EOpTerminateRayNV: out.debug << "terminateRayNV"; break; + case EOpTerminateRayKHR: out.debug << "terminateRayKHR"; break; + case EOpExecuteCallableNV: out.debug << "executeCallableNV"; break; + case EOpExecuteCallableKHR: out.debug << "executeCallableKHR"; break; case EOpWritePackedPrimitiveIndices4x8NV: out.debug << "writePackedPrimitiveIndices4x8NV"; break; case EOpRayQueryInitialize: out.debug << "rayQueryInitializeEXT"; break; @@ -1409,15 +1417,17 @@ bool TOutputTraverser::visitBranch(TVisit /* visit*/, TIntermBranch* node) OutputTreeText(out, node, depth); switch (node->getFlowOp()) { - case EOpKill: out.debug << "Branch: Kill"; break; - case EOpTerminateInvocation: out.debug << "Branch: TerminateInvocation"; break; - case EOpBreak: out.debug << "Branch: Break"; break; - 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; + case EOpKill: out.debug << "Branch: Kill"; break; + case EOpTerminateInvocation: out.debug << "Branch: TerminateInvocation"; break; + case EOpIgnoreIntersectionKHR: out.debug << "Branch: IgnoreIntersectionKHR"; break; + case EOpTerminateRayKHR: out.debug << "Branch: TerminateRayKHR"; break; + case EOpBreak: out.debug << "Branch: Break"; break; + 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; } if (node->getExpression()) { diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 63fb20a226..4e84adbf0a 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -1057,8 +1057,8 @@ bool TIntermediate::userOutputUsed() const return found; } -// Accumulate locations used for inputs, outputs, and uniforms, and check for collisions -// as the accumulation is done. +// Accumulate locations used for inputs, outputs, and uniforms, payload and callable data +// and check for collisions as the accumulation is done. // // Returns < 0 if no collision, >= 0 if collision and the value returned is a colliding value. // @@ -1070,6 +1070,7 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ typeCollision = false; int set; + int setRT; if (qualifier.isPipeInput()) set = 0; else if (qualifier.isPipeOutput()) @@ -1078,11 +1079,17 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ set = 2; else if (qualifier.storage == EvqBuffer) set = 3; + else if (qualifier.isAnyPayload()) + setRT = 0; + else if (qualifier.isAnyCallable()) + setRT = 1; else return -1; int size; - if (qualifier.isUniformOrBuffer() || qualifier.isTaskMemory()) { + if (qualifier.isAnyPayload() || qualifier.isAnyCallable()) { + size = 1; + } else if (qualifier.isUniformOrBuffer() || qualifier.isTaskMemory()) { if (type.isSizedArray()) size = type.getCumulativeArraySize(); else @@ -1110,10 +1117,17 @@ int TIntermediate::addUsedLocation(const TQualifier& qualifier, const TType& typ // (A vertex shader input will show using only one location, even for a dvec3/4.) // // So, for the case of dvec3, we need two independent ioRanges. - + // + // For raytracing IO (payloads and callabledata) each declaration occupies a single + // slot irrespective of type. int collision = -1; // no collision #ifndef GLSLANG_WEB - if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 && + if (qualifier.isAnyPayload() || qualifier.isAnyCallable()) { + TRange range(qualifier.layoutLocation, qualifier.layoutLocation); + collision = checkLocationRT(setRT, qualifier.layoutLocation); + if (collision < 0) + usedIoRT[setRT].push_back(range); + } else if (size == 2 && type.getBasicType() == EbtDouble && type.getVectorSize() == 3 && (qualifier.isPipeInput() || qualifier.isPipeOutput())) { // Dealing with dvec3 in/out split across two locations. // Need two io-ranges. @@ -1189,6 +1203,16 @@ int TIntermediate::checkLocationRange(int set, const TIoRange& range, const TTyp return -1; // no collision } +int TIntermediate::checkLocationRT(int set, int location) { + TRange range(location, location); + for (size_t r = 0; r < usedIoRT[set].size(); ++r) { + if (range.overlap(usedIoRT[set][r])) { + return range.start; + } + } + return -1; // no collision +} + // Accumulate bindings and offsets, and check for collisions // as the accumulation is done. // diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index f8747015ec..f8d8e80199 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -416,6 +416,9 @@ class TIntermediate { EShLanguage getStage() const { return language; } void addRequestedExtension(const char* extension) { requestedExtensions.insert(extension); } const std::set& getRequestedExtensions() const { return requestedExtensions; } + bool isRayTracingStage() const { + return language >= EShLangRayGen && language <= EShLangCallableNV; + } void setTreeRoot(TIntermNode* r) { treeRoot = r; } TIntermNode* getTreeRoot() const { return treeRoot; } @@ -531,6 +534,7 @@ class TIntermediate { // Linkage related void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&); void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&); + TIntermAggregate* findLinkerObjects() const; void setUseStorageBuffer() { useStorageBuffer = true; } bool usingStorageBuffer() const { return useStorageBuffer; } @@ -866,6 +870,7 @@ class TIntermediate { int addUsedLocation(const TQualifier&, const TType&, bool& typeCollision); int checkLocationRange(int set, const TIoRange& range, const TType&, bool& typeCollision); + int checkLocationRT(int set, int location); int addUsedOffsets(int binding, int offset, int numOffsets); bool addUsedConstantId(int id); static int computeTypeLocationSize(const TType&, EShLanguage); @@ -941,7 +946,6 @@ class TIntermediate { void checkCallGraphCycles(TInfoSink&); void checkCallGraphBodies(TInfoSink&, bool keepUncalled); void inOutLocationCheck(TInfoSink&); - TIntermAggregate* findLinkerObjects() const; bool userOutputUsed() const; bool isSpecializationOperation(const TIntermOperator&) const; bool isNonuniformPropagating(TOperator) const; @@ -1050,6 +1054,8 @@ class TIntermediate { std::unordered_set usedConstantId; // specialization constant ids used std::vector usedAtomics; // sets of bindings used by atomic counters std::vector usedIo[4]; // sets of used locations, one for each of in, out, uniform, and buffers + std::vector usedIoRT[2]; // sets of used location, one for rayPayload/rayPayloadIN and other + // for callableData/callableDataIn // set of names of statically read/written I/O that might need extra checking std::set ioAccessed; // source code of shader, useful as part of debug information diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 0f6e9f81b0..90f053897f 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -240,6 +240,7 @@ INSTANTIATE_TEST_SUITE_P( "rayQuery-allOps.comp", "rayQuery-allOps.frag", "rayQuery-initialization.Error.comp", + "rayQuery-global.rgen", "spv.set.vert", "spv.double.comp", "spv.100ops.frag", @@ -557,6 +558,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.ext.AnyHitShader.rahit", "spv.ext.AnyHitShader_Errors.rahit", "spv.ext.ClosestHitShader.rchit", + "spv.ext.ClosestHitShader_Subgroup.rchit", "spv.ext.ClosestHitShader_Errors.rchit", "spv.ext.IntersectShader.rint", "spv.ext.IntersectShader_Errors.rint", @@ -567,8 +569,13 @@ INSTANTIATE_TEST_SUITE_P( "spv.ext.RayCallable_Errors.rcall", "spv.ext.RayConstants.rgen", "spv.ext.RayGenShader.rgen", + "spv.ext.RayGenShader_Errors.rgen", "spv.ext.RayGenShader11.rgen", "spv.ext.RayGenShaderArray.rgen", + "spv.ext.RayGenSBTlayout.rgen", + "spv.ext.RayGenSBTlayout140.rgen", + "spv.ext.RayGenSBTlayout430.rgen", + "spv.ext.RayGenSBTlayoutscalar.rgen", "spv.ext.World3x4.rahit", })), FileNameAsCustomTestSuffix diff --git a/known_good.json b/known_good.json index 5c498dccff..ae9c279266 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "56d0f50357a192602216bfc4873e714905323e35" + "commit" : "cd590fa3341284cd6d1ee82366155786cfd44c96" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "05836bdba63e7debce9fa9feaed42f20cd43af9d" + "commit" : "104ecc356c1bea4476320faca64440cd1df655a3" } ] } From 4d41da3b810bc11c1c8a954e516638e437360a67 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Tue, 24 Nov 2020 23:06:16 -0500 Subject: [PATCH 073/365] Add ray query capability if acceleration structure or ray query types declared (#2469) * Add ray query capability if acceleration structure used Fixes #2430 in non-ray tracing stages and the extension is enabled * Add ray query capability if ray query declared * Fix printing of TypeRayQueryKHR It's no longer spelled with "Provisional" --- SPIRV/GlslangToSpv.cpp | 28 ++++++++++++- SPIRV/doc.cpp | 2 +- Test/baseResults/rayQuery-allOps.comp.out | 2 +- Test/baseResults/rayQuery-allOps.frag.out | 2 +- Test/baseResults/rayQuery-allOps.rgen.out | 2 +- Test/baseResults/rayQuery-global.rgen.out | 2 +- Test/baseResults/rayQuery-initialize.rgen.out | 2 +- Test/baseResults/rayQuery-no-cse.rgen.out | 2 +- Test/baseResults/rayQuery.rgen.out | 2 +- Test/baseResults/spv.ext.AccelDecl.frag.out | 41 +++++++++++++++++++ .../baseResults/spv.ext.RayQueryDecl.frag.out | 39 ++++++++++++++++++ Test/spv.ext.AccelDecl.frag | 14 +++++++ Test/spv.ext.RayQueryDecl.frag | 14 +++++++ gtests/Spv.FromFile.cpp | 2 + 14 files changed, 145 insertions(+), 9 deletions(-) create mode 100644 Test/baseResults/spv.ext.AccelDecl.frag.out create mode 100644 Test/baseResults/spv.ext.RayQueryDecl.frag.out create mode 100644 Test/spv.ext.AccelDecl.frag create mode 100644 Test/spv.ext.RayQueryDecl.frag diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 18ef64f415..4a489dfe8f 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3778,10 +3778,36 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty spvType = builder.makeUintType(32); break; case glslang::EbtAccStruct: + switch (glslangIntermediate->getStage()) { + case EShLangRayGen: + case EShLangIntersect: + case EShLangAnyHit: + case EShLangClosestHit: + case EShLangMiss: + case EShLangCallable: + // these all should have the RayTracingNV/KHR capability already + break; + default: + { + auto& extensions = glslangIntermediate->getRequestedExtensions(); + if (extensions.find("GL_EXT_ray_query") != extensions.end()) { + builder.addExtension(spv::E_SPV_KHR_ray_query); + builder.addCapability(spv::CapabilityRayQueryKHR); + } + } + break; + } spvType = builder.makeAccelerationStructureType(); break; case glslang::EbtRayQuery: - spvType = builder.makeRayQueryType(); + { + auto& extensions = glslangIntermediate->getRequestedExtensions(); + if (extensions.find("GL_EXT_ray_query") != extensions.end()) { + builder.addExtension(spv::E_SPV_KHR_ray_query); + builder.addCapability(spv::CapabilityRayQueryKHR); + } + spvType = builder.makeRayQueryType(); + } break; case glslang::EbtReference: { diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index e6ad4c1a5a..de681a8232 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -1380,7 +1380,7 @@ const char* OpcodeString(int op) case OpImageSampleFootprintNV: return "OpImageSampleFootprintNV"; case OpWritePackedPrimitiveIndices4x8NV: return "OpWritePackedPrimitiveIndices4x8NV"; - case OpTypeRayQueryKHR: return "OpTypeRayQueryProvisionalKHR"; + case OpTypeRayQueryKHR: return "OpTypeRayQueryKHR"; case OpRayQueryInitializeKHR: return "OpRayQueryInitializeKHR"; case OpRayQueryTerminateKHR: return "OpRayQueryTerminateKHR"; case OpRayQueryGenerateIntersectionKHR: return "OpRayQueryGenerateIntersectionKHR"; diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out index 9c49e2e3c9..fd4a2ff8c9 100644 --- a/Test/baseResults/rayQuery-allOps.comp.out +++ b/Test/baseResults/rayQuery-allOps.comp.out @@ -86,7 +86,7 @@ rayQuery-allOps.comp 35: TypePointer Function 8(float) 37: 18(int) Constant 3 38: 8(float) Constant 1176255488 - 45: TypeRayQueryProvisionalKHR + 45: TypeRayQueryKHR 46: TypePointer Private 45 47(rayQuery): 46(ptr) Variable Private 48: TypeAccelerationStructureKHR diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out index cff8fb0efd..573a640ab3 100644 --- a/Test/baseResults/rayQuery-allOps.frag.out +++ b/Test/baseResults/rayQuery-allOps.frag.out @@ -85,7 +85,7 @@ rayQuery-allOps.frag 35: TypePointer Function 8(float) 37: 18(int) Constant 3 38: 8(float) Constant 1176255488 - 45: TypeRayQueryProvisionalKHR + 45: TypeRayQueryKHR 46: TypePointer Private 45 47(rayQuery): 46(ptr) Variable Private 48: TypeAccelerationStructureKHR diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out index 418dad1800..deb0f7d5ec 100644 --- a/Test/baseResults/rayQuery-allOps.rgen.out +++ b/Test/baseResults/rayQuery-allOps.rgen.out @@ -85,7 +85,7 @@ rayQuery-allOps.rgen 35: TypePointer Function 8(float) 37: 18(int) Constant 3 38: 8(float) Constant 1176255488 - 45: TypeRayQueryProvisionalKHR + 45: TypeRayQueryKHR 46: TypePointer Private 45 47(rayQuery): 46(ptr) Variable Private 48: TypeAccelerationStructureKHR diff --git a/Test/baseResults/rayQuery-global.rgen.out b/Test/baseResults/rayQuery-global.rgen.out index 637b7528ba..7b05173599 100644 --- a/Test/baseResults/rayQuery-global.rgen.out +++ b/Test/baseResults/rayQuery-global.rgen.out @@ -26,7 +26,7 @@ rayQuery-global.rgen Decorate 27(rtas) Binding 1 2: TypeVoid 3: TypeFunction 2 - 6: TypeRayQueryProvisionalKHR + 6: TypeRayQueryKHR 7: TypePointer Private 6 8: TypeFunction 2 7(ptr) 15: TypeBool diff --git a/Test/baseResults/rayQuery-initialize.rgen.out b/Test/baseResults/rayQuery-initialize.rgen.out index 3b833332f8..f16facd5ab 100644 --- a/Test/baseResults/rayQuery-initialize.rgen.out +++ b/Test/baseResults/rayQuery-initialize.rgen.out @@ -55,7 +55,7 @@ rayQuery-initialize.rgen 3: TypeFunction 2 6: TypeInt 32 0 7: TypeFunction 6(int) - 10: TypeRayQueryProvisionalKHR + 10: TypeRayQueryKHR 11: TypePointer Private 10 12: TypeFloat 32 13: TypeVector 12(float) 3 diff --git a/Test/baseResults/rayQuery-no-cse.rgen.out b/Test/baseResults/rayQuery-no-cse.rgen.out index 2f46f07820..a44c41f14c 100644 --- a/Test/baseResults/rayQuery-no-cse.rgen.out +++ b/Test/baseResults/rayQuery-no-cse.rgen.out @@ -57,7 +57,7 @@ rayQuery-no-cse.rgen 3: TypeFunction 2 6: TypeInt 32 0 7: TypeFunction 6(int) - 10: TypeRayQueryProvisionalKHR + 10: TypeRayQueryKHR 11: TypePointer Private 10 12: TypeFloat 32 13: TypeVector 12(float) 3 diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out index 368097334e..80e9916e7b 100644 --- a/Test/baseResults/rayQuery.rgen.out +++ b/Test/baseResults/rayQuery.rgen.out @@ -39,7 +39,7 @@ rayQuery.rgen 11: TypePointer Function 10(float) 13: 10(float) Constant 0 15: 10(float) Constant 1148846080 - 16: TypeRayQueryProvisionalKHR + 16: TypeRayQueryKHR 17: TypePointer Private 16 18(localRayQuery): 17(ptr) Variable Private 19: TypeAccelerationStructureKHR diff --git a/Test/baseResults/spv.ext.AccelDecl.frag.out b/Test/baseResults/spv.ext.AccelDecl.frag.out new file mode 100644 index 0000000000..11d456065f --- /dev/null +++ b/Test/baseResults/spv.ext.AccelDecl.frag.out @@ -0,0 +1,41 @@ +spv.ext.AccelDecl.frag +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 15 + + Capability Shader + Capability RayQueryKHR + Extension "SPV_KHR_ray_query" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 14 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_ARB_separate_shader_objects" + SourceExtension "GL_EXT_nonuniform_qualifier" + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_EXT_scalar_block_layout" + SourceExtension "GL_GOOGLE_cpp_style_line_directive" + SourceExtension "GL_GOOGLE_include_directive" + Name 4 "main" + Name 9 "outColor" + Name 14 "topLevelAS" + Decorate 9(outColor) Location 0 + Decorate 14(topLevelAS) DescriptorSet 0 + Decorate 14(topLevelAS) Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(outColor): 8(ptr) Variable Output + 10: 6(float) Constant 0 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeAccelerationStructureKHR + 13: TypePointer UniformConstant 12 + 14(topLevelAS): 13(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + Store 9(outColor) 11 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ext.RayQueryDecl.frag.out b/Test/baseResults/spv.ext.RayQueryDecl.frag.out new file mode 100644 index 0000000000..97681e9f53 --- /dev/null +++ b/Test/baseResults/spv.ext.RayQueryDecl.frag.out @@ -0,0 +1,39 @@ +spv.ext.RayQueryDecl.frag +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 15 + + Capability Shader + Capability RayQueryKHR + Extension "SPV_KHR_ray_query" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 14 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + SourceExtension "GL_ARB_separate_shader_objects" + SourceExtension "GL_EXT_nonuniform_qualifier" + SourceExtension "GL_EXT_ray_query" + SourceExtension "GL_EXT_scalar_block_layout" + SourceExtension "GL_GOOGLE_cpp_style_line_directive" + SourceExtension "GL_GOOGLE_include_directive" + Name 4 "main" + Name 9 "outColor" + Name 14 "rq" + Decorate 9(outColor) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(outColor): 8(ptr) Variable Output + 10: 6(float) Constant 0 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeRayQueryKHR + 13: TypePointer Private 12 + 14(rq): 13(ptr) Variable Private + 4(main): 2 Function None 3 + 5: Label + Store 9(outColor) 11 + Return + FunctionEnd diff --git a/Test/spv.ext.AccelDecl.frag b/Test/spv.ext.AccelDecl.frag new file mode 100644 index 0000000000..4374bf3978 --- /dev/null +++ b/Test/spv.ext.AccelDecl.frag @@ -0,0 +1,14 @@ +#version 460 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_EXT_nonuniform_qualifier : enable +#extension GL_GOOGLE_include_directive : enable +#extension GL_EXT_scalar_block_layout : enable +#extension GL_EXT_ray_query : enable + +layout(location = 0) out vec4 outColor; + +layout(binding = 1, set = 0) uniform accelerationStructureEXT topLevelAS; + +void main() { + outColor = vec4(0.0); +} diff --git a/Test/spv.ext.RayQueryDecl.frag b/Test/spv.ext.RayQueryDecl.frag new file mode 100644 index 0000000000..8a144d6ba2 --- /dev/null +++ b/Test/spv.ext.RayQueryDecl.frag @@ -0,0 +1,14 @@ +#version 460 +#extension GL_ARB_separate_shader_objects : enable +#extension GL_EXT_nonuniform_qualifier : enable +#extension GL_GOOGLE_include_directive : enable +#extension GL_EXT_scalar_block_layout : enable +#extension GL_EXT_ray_query : enable + +layout(location = 0) out vec4 outColor; + +rayQueryEXT rq; + +void main() { + outColor = vec4(0.0); +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 90f053897f..a393cccc93 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -577,6 +577,8 @@ INSTANTIATE_TEST_SUITE_P( "spv.ext.RayGenSBTlayout430.rgen", "spv.ext.RayGenSBTlayoutscalar.rgen", "spv.ext.World3x4.rahit", + "spv.ext.AccelDecl.frag", + "spv.ext.RayQueryDecl.frag", })), FileNameAsCustomTestSuffix ); From e11a2c8bece3dffc2fa6bfd1669b23c6f913ff07 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Mon, 30 Nov 2020 11:57:34 -0500 Subject: [PATCH 074/365] update spirv-headers and fix handling of gl_HitTEXT (#2471) * update spirv-headers and fix handling of gl_HitTEXT Update spirv-headers known_good to f027d53ded7e230e008d37c8b47ede7cd308e19d and update SPIRV/spirv.hpp to copy from that version as well. In GLSL gl_HitTNV/gl_HitTEXT is defined as an alias of gl_RayTmaxNV/gl_RayTmaxEXT SPV_NV_ray_tracing has a dedicated HitTNV which gl_HitTNV maps to. For SPV_KHR_ray_tracing, gl_HitTEXT gets mapped to a RayTmaxKHR decoraged variable to simplify the SPIRV consumer. This change fixes the mapping for the GL_EXT_ray_tracing extension, and updates the test results to match. * update MissNV shader test to not use ObjectRay builtins They shouldn't existing in the miss stage because there is no object intersected --- SPIRV/GlslangToSpv.cpp | 12 +- SPIRV/doc.cpp | 2 +- SPIRV/spirv.hpp | 1 - Test/baseResults/spv.AnyHitShader.rahit.out | 2 +- .../spv.ClosestHitShader.rchit.out | 2 +- Test/baseResults/spv.MissShader.rmiss.out | 115 +++++++++--------- .../spv.ext.AnyHitShader.rahit.out | 2 +- .../spv.ext.ClosestHitShader.rchit.out | 2 +- Test/spv.MissShader.rmiss | 3 +- known_good.json | 2 +- 10 files changed, 73 insertions(+), 70 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 4a489dfe8f..1adebef878 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1006,7 +1006,17 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI case glslang::EbvInstanceCustomIndex: return spv::BuiltInInstanceCustomIndexKHR; case glslang::EbvHitT: - return spv::BuiltInHitTKHR; + { + // this is a GLSL alias of RayTmax + // in SPV_NV_ray_tracing it has a dedicated builtin + // but in SPV_KHR_ray_tracing it gets mapped to RayTmax + auto& extensions = glslangIntermediate->getRequestedExtensions(); + if (extensions.find("GL_NV_ray_tracing") != extensions.end()) { + return spv::BuiltInHitTNV; + } else { + return spv::BuiltInRayTmaxKHR; + } + } case glslang::EbvHitKind: return spv::BuiltInHitKindKHR; case glslang::EbvObjectToWorld: diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index de681a8232..5327f2212d 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -395,7 +395,7 @@ const char* BuiltInString(int builtIn) case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR"; case BuiltInWorldToObjectKHR: return "WorldToObjectKHR"; - case BuiltInHitTKHR: return "HitTKHR"; + case BuiltInHitTNV: return "HitTNV"; case BuiltInHitKindKHR: return "HitKindKHR"; case BuiltInIncomingRayFlagsKHR: return "IncomingRayFlagsKHR"; case BuiltInViewportMaskNV: return "ViewportMaskNV"; diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index a5383de555..43dd2aaeec 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -614,7 +614,6 @@ enum BuiltIn { BuiltInObjectToWorldNV = 5330, BuiltInWorldToObjectKHR = 5331, BuiltInWorldToObjectNV = 5331, - BuiltInHitTKHR = 5332, BuiltInHitTNV = 5332, BuiltInHitKindKHR = 5333, BuiltInHitKindNV = 5333, diff --git a/Test/baseResults/spv.AnyHitShader.rahit.out b/Test/baseResults/spv.AnyHitShader.rahit.out index f33a1bdce4..c893f88d42 100644 --- a/Test/baseResults/spv.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.AnyHitShader.rahit.out @@ -53,7 +53,7 @@ spv.AnyHitShader.rahit Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR - Decorate 53(gl_HitTNV) BuiltIn HitTKHR + Decorate 53(gl_HitTNV) BuiltIn HitTNV Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR diff --git a/Test/baseResults/spv.ClosestHitShader.rchit.out b/Test/baseResults/spv.ClosestHitShader.rchit.out index 4a8e65d249..b76629c299 100644 --- a/Test/baseResults/spv.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ClosestHitShader.rchit.out @@ -55,7 +55,7 @@ spv.ClosestHitShader.rchit Decorate 42(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminNV) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxNV) BuiltIn RayTmaxKHR - Decorate 53(gl_HitTNV) BuiltIn HitTKHR + Decorate 53(gl_HitTNV) BuiltIn HitTNV Decorate 58(gl_HitKindNV) BuiltIn HitKindKHR Decorate 64(gl_ObjectToWorldNV) BuiltIn ObjectToWorldKHR Decorate 67(gl_WorldToObjectNV) BuiltIn WorldToObjectKHR diff --git a/Test/baseResults/spv.MissShader.rmiss.out b/Test/baseResults/spv.MissShader.rmiss.out index 563e53ff9d..e573bbae9b 100644 --- a/Test/baseResults/spv.MissShader.rmiss.out +++ b/Test/baseResults/spv.MissShader.rmiss.out @@ -1,13 +1,13 @@ spv.MissShader.rmiss // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 60 +// Id's are bound by 59 Capability RayTracingNV Extension "SPV_NV_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MissKHR 4 "main" 11 14 21 24 27 30 35 38 + EntryPoint MissKHR 4 "main" 11 14 21 24 29 34 37 Source GLSL 460 SourceExtension "GL_NV_ray_tracing" Name 4 "main" @@ -19,29 +19,26 @@ spv.MissShader.rmiss Name 21 "gl_WorldRayOriginNV" Name 23 "v3" Name 24 "gl_WorldRayDirectionNV" - Name 26 "v4" - Name 27 "gl_ObjectRayOriginNV" - Name 29 "v5" - Name 30 "gl_ObjectRayDirectionNV" - Name 33 "v6" - Name 35 "gl_RayTminNV" - Name 37 "v7" - Name 38 "gl_RayTmaxNV" - Name 42 "accNV" - Name 57 "localPayload" - Name 59 "incomingPayload" + Name 27 "v4" + Name 29 "gl_IncomingRayFlagsNV" + Name 32 "v6" + Name 34 "gl_RayTminNV" + Name 36 "v7" + Name 37 "gl_RayTmaxNV" + Name 41 "accNV" + Name 56 "localPayload" + Name 58 "incomingPayload" Decorate 11(gl_LaunchIDNV) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeNV) BuiltIn LaunchSizeKHR Decorate 21(gl_WorldRayOriginNV) BuiltIn WorldRayOriginKHR Decorate 24(gl_WorldRayDirectionNV) BuiltIn WorldRayDirectionKHR - Decorate 27(gl_ObjectRayOriginNV) BuiltIn ObjectRayOriginKHR - Decorate 30(gl_ObjectRayDirectionNV) BuiltIn ObjectRayDirectionKHR - Decorate 35(gl_RayTminNV) BuiltIn RayTminKHR - Decorate 38(gl_RayTmaxNV) BuiltIn RayTmaxKHR - Decorate 42(accNV) DescriptorSet 0 - Decorate 42(accNV) Binding 0 - Decorate 57(localPayload) Location 0 - Decorate 59(incomingPayload) Location 1 + Decorate 29(gl_IncomingRayFlagsNV) BuiltIn IncomingRayFlagsKHR + Decorate 34(gl_RayTminNV) BuiltIn RayTminKHR + Decorate 37(gl_RayTmaxNV) BuiltIn RayTmaxKHR + Decorate 41(accNV) DescriptorSet 0 + Decorate 41(accNV) Binding 0 + Decorate 56(localPayload) Location 0 + Decorate 58(incomingPayload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -56,41 +53,41 @@ spv.MissShader.rmiss 20: TypePointer Input 17(fvec3) 21(gl_WorldRayOriginNV): 20(ptr) Variable Input 24(gl_WorldRayDirectionNV): 20(ptr) Variable Input -27(gl_ObjectRayOriginNV): 20(ptr) Variable Input -30(gl_ObjectRayDirectionNV): 20(ptr) Variable Input - 32: TypePointer Function 16(float) - 34: TypePointer Input 16(float) -35(gl_RayTminNV): 34(ptr) Variable Input -38(gl_RayTmaxNV): 34(ptr) Variable Input - 40: TypeAccelerationStructureKHR - 41: TypePointer UniformConstant 40 - 42(accNV): 41(ptr) Variable UniformConstant - 44: 6(int) Constant 0 - 45: 6(int) Constant 1 - 46: 6(int) Constant 2 - 47: 6(int) Constant 3 - 48: 16(float) Constant 1056964608 - 49: 17(fvec3) ConstantComposite 48 48 48 - 50: 16(float) Constant 1065353216 - 51: 17(fvec3) ConstantComposite 50 50 50 - 52: 16(float) Constant 1061158912 - 53: TypeInt 32 1 - 54: 53(int) Constant 1 - 55: TypeVector 16(float) 4 - 56: TypePointer RayPayloadKHR 55(fvec4) -57(localPayload): 56(ptr) Variable RayPayloadKHR - 58: TypePointer IncomingRayPayloadKHR 55(fvec4) -59(incomingPayload): 58(ptr) Variable IncomingRayPayloadKHR + 26: TypePointer Function 6(int) + 28: TypePointer Input 6(int) +29(gl_IncomingRayFlagsNV): 28(ptr) Variable Input + 31: TypePointer Function 16(float) + 33: TypePointer Input 16(float) +34(gl_RayTminNV): 33(ptr) Variable Input +37(gl_RayTmaxNV): 33(ptr) Variable Input + 39: TypeAccelerationStructureKHR + 40: TypePointer UniformConstant 39 + 41(accNV): 40(ptr) Variable UniformConstant + 43: 6(int) Constant 0 + 44: 6(int) Constant 1 + 45: 6(int) Constant 2 + 46: 6(int) Constant 3 + 47: 16(float) Constant 1056964608 + 48: 17(fvec3) ConstantComposite 47 47 47 + 49: 16(float) Constant 1065353216 + 50: 17(fvec3) ConstantComposite 49 49 49 + 51: 16(float) Constant 1061158912 + 52: TypeInt 32 1 + 53: 52(int) Constant 1 + 54: TypeVector 16(float) 4 + 55: TypePointer RayPayloadKHR 54(fvec4) +56(localPayload): 55(ptr) Variable RayPayloadKHR + 57: TypePointer IncomingRayPayloadKHR 54(fvec4) +58(incomingPayload): 57(ptr) Variable IncomingRayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function 13(v1): 8(ptr) Variable Function 19(v2): 18(ptr) Variable Function 23(v3): 18(ptr) Variable Function - 26(v4): 18(ptr) Variable Function - 29(v5): 18(ptr) Variable Function - 33(v6): 32(ptr) Variable Function - 37(v7): 32(ptr) Variable Function + 27(v4): 26(ptr) Variable Function + 32(v6): 31(ptr) Variable Function + 36(v7): 31(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDNV) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeNV) @@ -99,15 +96,13 @@ spv.MissShader.rmiss Store 19(v2) 22 25: 17(fvec3) Load 24(gl_WorldRayDirectionNV) Store 23(v3) 25 - 28: 17(fvec3) Load 27(gl_ObjectRayOriginNV) - Store 26(v4) 28 - 31: 17(fvec3) Load 30(gl_ObjectRayDirectionNV) - Store 29(v5) 31 - 36: 16(float) Load 35(gl_RayTminNV) - Store 33(v6) 36 - 39: 16(float) Load 38(gl_RayTmaxNV) - Store 37(v7) 39 - 43: 40 Load 42(accNV) - TraceNV 43 44 45 46 47 44 49 48 51 52 54 + 30: 6(int) Load 29(gl_IncomingRayFlagsNV) + Store 27(v4) 30 + 35: 16(float) Load 34(gl_RayTminNV) + Store 32(v6) 35 + 38: 16(float) Load 37(gl_RayTmaxNV) + Store 36(v7) 38 + 42: 39 Load 41(accNV) + TraceNV 42 43 44 45 46 43 48 47 50 51 53 Return FunctionEnd diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index 133fd63964..7bcf8120eb 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -62,7 +62,7 @@ spv.ext.AnyHitShader.rahit Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR - Decorate 53(gl_HitTEXT) BuiltIn HitTKHR + Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out index 559ba002f0..40903e60c2 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out @@ -61,7 +61,7 @@ spv.ext.ClosestHitShader.rchit Decorate 42(gl_ObjectRayDirectionEXT) BuiltIn ObjectRayDirectionKHR Decorate 47(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 50(gl_RayTmaxEXT) BuiltIn RayTmaxKHR - Decorate 53(gl_HitTEXT) BuiltIn HitTKHR + Decorate 53(gl_HitTEXT) BuiltIn RayTmaxKHR Decorate 58(gl_HitKindEXT) BuiltIn HitKindKHR Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR diff --git a/Test/spv.MissShader.rmiss b/Test/spv.MissShader.rmiss index 06113debc6..3c6b31c346 100644 --- a/Test/spv.MissShader.rmiss +++ b/Test/spv.MissShader.rmiss @@ -9,8 +9,7 @@ void main() uvec3 v1 = gl_LaunchSizeNV; vec3 v2 = gl_WorldRayOriginNV; vec3 v3 = gl_WorldRayDirectionNV; - vec3 v4 = gl_ObjectRayOriginNV; - vec3 v5 = gl_ObjectRayDirectionNV; + uint v4 = gl_IncomingRayFlagsNV; float v6 = gl_RayTminNV; float v7 = gl_RayTmaxNV; traceNV(accNV, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); diff --git a/known_good.json b/known_good.json index ae9c279266..81301e13e0 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" : "104ecc356c1bea4476320faca64440cd1df655a3" + "commit" : "f027d53ded7e230e008d37c8b47ede7cd308e19d" } ] } From dd69df7f3dac26362e10b0f38efb9e47990f7537 Mon Sep 17 00:00:00 2001 From: greg-lunarg Date: Thu, 3 Dec 2020 13:07:33 -0700 Subject: [PATCH 075/365] Update spirv-tools known-good (#2473) --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index 81301e13e0..8f64075a5a 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "cd590fa3341284cd6d1ee82366155786cfd44c96" + "commit" : "c9c1f54330d13a0bec1aa3f08d436249d8e35596" }, { "name" : "spirv-tools/external/spirv-headers", From c594de23cdd790d64ad5f9c8b059baae0ee2941d Mon Sep 17 00:00:00 2001 From: greg-lunarg Date: Mon, 7 Dec 2020 18:20:27 -0700 Subject: [PATCH 076/365] Update spirv-tools known-good #2 - Pick up ray tracing terminator fix (#2478) --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index 8f64075a5a..65d4376d00 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "c9c1f54330d13a0bec1aa3f08d436249d8e35596" + "commit" : "b27b1afd12d05bf238ac7368bb49de73cd620a8e" }, { "name" : "spirv-tools/external/spirv-headers", From 862ddcb291b6d5e743072d75c3390de232f3fa28 Mon Sep 17 00:00:00 2001 From: greg-lunarg Date: Fri, 11 Dec 2020 10:46:44 -0700 Subject: [PATCH 077/365] Fix Travis to use pre-breakage googletest (#2481) --- .travis.yml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 1fa3fc01cd..87838b8212 100644 --- a/.travis.yml +++ b/.travis.yml @@ -61,7 +61,17 @@ install: fi before_script: - - git clone --depth=1 https://github.com/google/googletest.git External/googletest + # check out pre-breakage version of googletest; can be deleted when + # issue 3128 is fixed + # git clone --depth=1 https://github.com/google/googletest.git External/googletest + - mkdir -p External/googletest + - cd External/googletest + - git init + - git remote add origin https://github.com/google/googletest.git + - git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725 + - git reset --hard FETCH_HEAD + - cd ../.. + # get spirv-tools and spirv-headers - ./update_glslang_sources.py script: From 4f074aed75a0996f288ec60270435012e8cc771e Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 11 Dec 2020 11:27:09 -0700 Subject: [PATCH 078/365] Update README to avoid googletest breakage Additional fix for #2480 --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 7ad4ace96e..9b8cfb3f0f 100644 --- a/README.md +++ b/README.md @@ -125,6 +125,15 @@ cd git clone https://github.com/google/googletest.git External/googletest ``` +TEMPORARY NOTICE: additionally perform the following to avoid a current +breakage in googletest: + +```bash +cd External/googletest +git checkout 0c400f67fcf305869c5fb113dd296eca266c9725 +cd ../.. +``` + If you wish to assure that SPIR-V generated from HLSL is legal for Vulkan, wish to invoke -Os to reduce SPIR-V size from HLSL or GLSL, or wish to run the integrated test suite, install spirv-tools with this: From c0bcfaf3bae917c57bca49897eb7430cdf256c70 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Sat, 12 Dec 2020 12:34:24 -0500 Subject: [PATCH 079/365] Fix SPV return type of rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT (#2484) Issue #2483 According to GLSL spec the prototype is: uint rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQueryEXT q, bool committed); but that was incorrectly getting translated to SPIRV as an `int`, and this was causing SPIR-V validation errors when used. Added explicit testing for the return types of all the builtin functions in GL_EXT_ray_query --- SPIRV/GlslangToSpv.cpp | 2 +- Test/baseResults/rayQuery-allOps.comp.out | 2 +- Test/baseResults/rayQuery-allOps.frag.out | 2 +- Test/baseResults/rayQuery-allOps.rgen.out | 2 +- Test/baseResults/rayQuery-types.comp.out | 152 ++++++++++++++++++++++ Test/rayQuery-types.comp | 45 +++++++ gtests/Spv.FromFile.cpp | 1 + 7 files changed, 202 insertions(+), 4 deletions(-) create mode 100644 Test/baseResults/rayQuery-types.comp.out create mode 100644 Test/rayQuery-types.comp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 1adebef878..eea8852807 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -7991,7 +7991,7 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: opCode = spv::OpRayQueryGetIntersectionInstanceIdKHR; break; case glslang::EOpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffset: - typeId = builder.makeIntType(32); + typeId = builder.makeUintType(32); opCode = spv::OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR; break; case glslang::EOpRayQueryGetIntersectionGeometryIndex: diff --git a/Test/baseResults/rayQuery-allOps.comp.out b/Test/baseResults/rayQuery-allOps.comp.out index fd4a2ff8c9..bf654f7798 100644 --- a/Test/baseResults/rayQuery-allOps.comp.out +++ b/Test/baseResults/rayQuery-allOps.comp.out @@ -223,7 +223,7 @@ rayQuery-allOps.comp 129: 2 FunctionCall 6(doSomething() Branch 128 128: Label - 130: 18(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 + 130: 14(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 131: 66(bool) UGreaterThan 130 20 SelectionMerge 133 None BranchConditional 131 132 133 diff --git a/Test/baseResults/rayQuery-allOps.frag.out b/Test/baseResults/rayQuery-allOps.frag.out index 573a640ab3..90ebc4a285 100644 --- a/Test/baseResults/rayQuery-allOps.frag.out +++ b/Test/baseResults/rayQuery-allOps.frag.out @@ -221,7 +221,7 @@ rayQuery-allOps.frag 129: 2 FunctionCall 6(doSomething() Branch 128 128: Label - 130: 18(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 + 130: 14(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 131: 66(bool) UGreaterThan 130 20 SelectionMerge 133 None BranchConditional 131 132 133 diff --git a/Test/baseResults/rayQuery-allOps.rgen.out b/Test/baseResults/rayQuery-allOps.rgen.out index deb0f7d5ec..b3a93b025c 100644 --- a/Test/baseResults/rayQuery-allOps.rgen.out +++ b/Test/baseResults/rayQuery-allOps.rgen.out @@ -221,7 +221,7 @@ rayQuery-allOps.rgen 129: 2 FunctionCall 6(doSomething() Branch 128 128: Label - 130: 18(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 + 130: 14(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 47(rayQuery) 23 131: 66(bool) UGreaterThan 130 20 SelectionMerge 133 None BranchConditional 131 132 133 diff --git a/Test/baseResults/rayQuery-types.comp.out b/Test/baseResults/rayQuery-types.comp.out new file mode 100644 index 0000000000..87a1d68352 --- /dev/null +++ b/Test/baseResults/rayQuery-types.comp.out @@ -0,0 +1,152 @@ +rayQuery-types.comp +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 86 + + Capability Shader + Capability RayQueryKHR + Extension "SPV_KHR_ray_query" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 16 8 1 + Source GLSL 460 + SourceExtension "GL_EXT_ray_query" + Name 4 "main" + Name 8 "rayQuery" + Name 11 "tlas" + Name 25 "rq_proceed" + Name 35 "intersectionType" + Name 41 "rayTMin" + Name 43 "rayFlags" + Name 46 "worldRayOrigin" + Name 48 "worldDirection" + Name 50 "intersectionT" + Name 53 "customIndex" + Name 55 "instanceId" + Name 57 "sbtOffset" + Name 59 "geometryIndex" + Name 61 "primitiveIndex" + Name 65 "barys" + Name 67 "frontface" + Name 69 "aabbOpaque" + Name 71 "objRayDirection" + Name 73 "objRayOrigin" + Name 77 "objToWorld" + Name 79 "worldToObj" + Decorate 11(tlas) DescriptorSet 0 + Decorate 11(tlas) Binding 0 + Decorate 85 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeRayQueryKHR + 7: TypePointer Private 6 + 8(rayQuery): 7(ptr) Variable Private + 9: TypeAccelerationStructureKHR + 10: TypePointer UniformConstant 9 + 11(tlas): 10(ptr) Variable UniformConstant + 13: TypeInt 32 0 + 14: 13(int) Constant 0 + 15: 13(int) Constant 255 + 16: TypeFloat 32 + 17: TypeVector 16(float) 3 + 18: 16(float) Constant 0 + 19: 17(fvec3) ConstantComposite 18 18 18 + 20: 16(float) Constant 1065353216 + 21: 17(fvec3) ConstantComposite 20 18 18 + 22: 16(float) Constant 1176256512 + 23: TypeBool + 24: TypePointer Function 23(bool) + 34: TypePointer Function 13(int) + 36: 23(bool) ConstantTrue + 37: TypeInt 32 1 + 38: 37(int) Constant 1 + 40: TypePointer Function 16(float) + 45: TypePointer Function 17(fvec3) + 52: TypePointer Function 37(int) + 63: TypeVector 16(float) 2 + 64: TypePointer Function 63(fvec2) + 75: TypeMatrix 17(fvec3) 4 + 76: TypePointer Function 75 + 81: TypeVector 13(int) 3 + 82: 13(int) Constant 16 + 83: 13(int) Constant 8 + 84: 13(int) Constant 1 + 85: 81(ivec3) ConstantComposite 82 83 84 + 4(main): 2 Function None 3 + 5: Label + 25(rq_proceed): 24(ptr) Variable Function +35(intersectionType): 34(ptr) Variable Function + 41(rayTMin): 40(ptr) Variable Function + 43(rayFlags): 34(ptr) Variable Function +46(worldRayOrigin): 45(ptr) Variable Function +48(worldDirection): 45(ptr) Variable Function +50(intersectionT): 40(ptr) Variable Function + 53(customIndex): 52(ptr) Variable Function + 55(instanceId): 52(ptr) Variable Function + 57(sbtOffset): 34(ptr) Variable Function +59(geometryIndex): 52(ptr) Variable Function +61(primitiveIndex): 52(ptr) Variable Function + 65(barys): 64(ptr) Variable Function + 67(frontface): 24(ptr) Variable Function + 69(aabbOpaque): 24(ptr) Variable Function +71(objRayDirection): 45(ptr) Variable Function +73(objRayOrigin): 45(ptr) Variable Function + 77(objToWorld): 76(ptr) Variable Function + 79(worldToObj): 76(ptr) Variable Function + 12: 9 Load 11(tlas) + RayQueryInitializeKHR 8(rayQuery) 12 14 15 19 18 21 22 + 26: 23(bool) RayQueryProceedKHR 8(rayQuery) + Store 25(rq_proceed) 26 + Branch 27 + 27: Label + LoopMerge 29 30 None + Branch 31 + 31: Label + 32: 23(bool) Load 25(rq_proceed) + BranchConditional 32 28 29 + 28: Label + 33: 23(bool) RayQueryProceedKHR 8(rayQuery) + Store 25(rq_proceed) 33 + Branch 30 + 30: Label + Branch 27 + 29: Label + 39: 13(int) RayQueryGetIntersectionTypeKHR 8(rayQuery) 38 + Store 35(intersectionType) 39 + 42: 16(float) RayQueryGetRayTMinKHR 8(rayQuery) + Store 41(rayTMin) 42 + 44: 13(int) RayQueryGetRayFlagsKHR 8(rayQuery) + Store 43(rayFlags) 44 + 47: 17(fvec3) RayQueryGetWorldRayOriginKHR 8(rayQuery) + Store 46(worldRayOrigin) 47 + 49: 17(fvec3) RayQueryGetWorldRayDirectionKHR 8(rayQuery) + Store 48(worldDirection) 49 + 51: 16(float) RayQueryGetIntersectionTKHR 8(rayQuery) 38 + Store 50(intersectionT) 51 + 54: 37(int) RayQueryGetIntersectionInstanceCustomIndexKHR 8(rayQuery) 38 + Store 53(customIndex) 54 + 56: 37(int) RayQueryGetIntersectionInstanceIdKHR 8(rayQuery) 38 + Store 55(instanceId) 56 + 58: 13(int) RayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR 8(rayQuery) 38 + Store 57(sbtOffset) 58 + 60: 37(int) RayQueryGetIntersectionGeometryIndexKHR 8(rayQuery) 38 + Store 59(geometryIndex) 60 + 62: 37(int) RayQueryGetIntersectionPrimitiveIndexKHR 8(rayQuery) 38 + Store 61(primitiveIndex) 62 + 66: 63(fvec2) RayQueryGetIntersectionBarycentricsKHR 8(rayQuery) 38 + Store 65(barys) 66 + 68: 23(bool) RayQueryGetIntersectionFrontFaceKHR 8(rayQuery) 38 + Store 67(frontface) 68 + 70: 23(bool) RayQueryGetIntersectionCandidateAABBOpaqueKHR 8(rayQuery) + Store 69(aabbOpaque) 70 + 72: 17(fvec3) RayQueryGetIntersectionObjectRayDirectionKHR 8(rayQuery) 38 + Store 71(objRayDirection) 72 + 74: 17(fvec3) RayQueryGetIntersectionObjectRayOriginKHR 8(rayQuery) 38 + Store 73(objRayOrigin) 74 + 78: 75 RayQueryGetIntersectionObjectToWorldKHR 8(rayQuery) 38 + Store 77(objToWorld) 78 + 80: 75 RayQueryGetIntersectionWorldToObjectKHR 8(rayQuery) 38 + Store 79(worldToObj) 80 + Return + FunctionEnd diff --git a/Test/rayQuery-types.comp b/Test/rayQuery-types.comp new file mode 100644 index 0000000000..c70a3fc491 --- /dev/null +++ b/Test/rayQuery-types.comp @@ -0,0 +1,45 @@ +#version 460 +#extension GL_EXT_ray_query : require + +layout(local_size_x = 16, local_size_y = 8, local_size_z = 1) in; + +layout(binding = 0, set = 0) uniform accelerationStructureEXT tlas; + +void main() +{ + rayQueryEXT rayQuery; + rayQueryInitializeEXT(rayQuery, // Ray query + tlas, // Top-level acceleration structure + 0, // Ray flags + 0xFF, // 8-bit instance mask + vec3(0), // Ray origin + 0.0, // Minimum t-value + vec3(1, 0, 0), // Ray direction + 10000.0); // Maximum t-value + + // yes this is silly, just want to verify the return types + bool rq_proceed = rayQueryProceedEXT(rayQuery); + while(rq_proceed) + { + rq_proceed = rayQueryProceedEXT(rayQuery); + } + + const uint intersectionType = rayQueryGetIntersectionTypeEXT(rayQuery, true); + const float rayTMin = rayQueryGetRayTMinEXT(rayQuery); + const uint rayFlags = rayQueryGetRayFlagsEXT(rayQuery); + const vec3 worldRayOrigin = rayQueryGetWorldRayOriginEXT(rayQuery); + const vec3 worldDirection = rayQueryGetWorldRayDirectionEXT(rayQuery); + const float intersectionT = rayQueryGetIntersectionTEXT(rayQuery, true); + const int customIndex = rayQueryGetIntersectionInstanceCustomIndexEXT(rayQuery, true); + const int instanceId = rayQueryGetIntersectionInstanceIdEXT(rayQuery, true); + const uint sbtOffset = rayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetEXT(rayQuery, true); + const int geometryIndex = rayQueryGetIntersectionGeometryIndexEXT(rayQuery, true); + const int primitiveIndex = rayQueryGetIntersectionPrimitiveIndexEXT(rayQuery, true); + const vec2 barys = rayQueryGetIntersectionBarycentricsEXT(rayQuery, true); + const bool frontface = rayQueryGetIntersectionFrontFaceEXT(rayQuery, true); + const bool aabbOpaque = rayQueryGetIntersectionCandidateAABBOpaqueEXT(rayQuery); + const vec3 objRayDirection = rayQueryGetIntersectionObjectRayDirectionEXT(rayQuery, true); + const vec3 objRayOrigin = rayQueryGetIntersectionObjectRayOriginEXT(rayQuery, true); + const mat4x3 objToWorld = rayQueryGetIntersectionObjectToWorldEXT(rayQuery, true); + const mat4x3 worldToObj = rayQueryGetIntersectionWorldToObjectEXT(rayQuery, true); +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index a393cccc93..b7f0df58ae 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -241,6 +241,7 @@ INSTANTIATE_TEST_SUITE_P( "rayQuery-allOps.frag", "rayQuery-initialization.Error.comp", "rayQuery-global.rgen", + "rayQuery-types.comp", "spv.set.vert", "spv.double.comp", "spv.100ops.frag", From dc8b1d0264c8c2640b004632c07279c7b76e614f Mon Sep 17 00:00:00 2001 From: Evgeny Proydakov Date: Tue, 15 Dec 2020 18:05:32 +0300 Subject: [PATCH 080/365] Fixed compile warning in reflection.cpp for ENABLE_HLSL = 0 build. [-Wunused-parameter] --- glslang/MachineIndependent/reflection.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp index 729500295e..9870a400be 100644 --- a/glslang/MachineIndependent/reflection.cpp +++ b/glslang/MachineIndependent/reflection.cpp @@ -1138,6 +1138,8 @@ void TReflection::buildCounterIndices(const TIntermediate& intermediate) if (index >= 0) indexToUniformBlock[i].counterIndex = index; } +#else + (void)intermediate; #endif } From 3805671ce842b90b5c8dd25288a46fd15d997d4a Mon Sep 17 00:00:00 2001 From: David Neto Date: Tue, 15 Dec 2020 12:09:50 -0500 Subject: [PATCH 081/365] Update known_good, pick up ImageRead result validation Pick up https://github.com/KhronosGroup/SPIRV-Tools/pull/4072 which validates the result type of OpImageRead. This also requires test expectation updates. See #2486 tracks the needed upate to Glslang code generation. --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index 65d4376d00..a01735ba74 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "b27b1afd12d05bf238ac7368bb49de73cd620a8e" + "commit" : "ad898cb9498c65cac7c5b6f9ebddb610bd0852ad" }, { "name" : "spirv-tools/external/spirv-headers", From 1ef5e20290e55634e6e18dfb3c6207f502771fb8 Mon Sep 17 00:00:00 2001 From: David Neto Date: Tue, 15 Dec 2020 12:19:00 -0500 Subject: [PATCH 082/365] Test updates for ImageRead result type validation See #2486 --- Test/baseResults/hlsl.rw.register.frag.out | 1 + Test/baseResults/hlsl.rw.scalar.bracket.frag.out | 1 + Test/baseResults/hlsl.rw.vec2.bracket.frag.out | 1 + Test/baseResults/spv.rw.autoassign.frag.out | 1 + 4 files changed, 4 insertions(+) diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out index 35b47583af..7bcecc9f74 100644 --- a/Test/baseResults/hlsl.rw.register.frag.out +++ b/Test/baseResults/hlsl.rw.register.frag.out @@ -97,6 +97,7 @@ gl_FragCoord origin is upper left 0:? 'g_tBuf1du1' (layout( binding=3 r32ui) uniform uimageBuffer) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 42 diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out index 2c67075332..061467709a 100644 --- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out @@ -1689,6 +1689,7 @@ gl_FragCoord origin is upper left 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform float uf1, uniform int ui1, uniform uint uu1}) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 571 diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out index 093665c485..68e40de8db 100644 --- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out @@ -1707,6 +1707,7 @@ gl_FragCoord origin is upper left 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform 2-component vector of float uf2, uniform 2-component vector of int ui2, uniform 2-component vector of uint uu2}) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 605 diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out index 43adeddf02..c696c52582 100644 --- a/Test/baseResults/spv.rw.autoassign.frag.out +++ b/Test/baseResults/spv.rw.autoassign.frag.out @@ -1,4 +1,5 @@ spv.rw.autoassign.frag +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 42 From 589aaff11cacf590d766bd3518f6dd037bfe4df9 Mon Sep 17 00:00:00 2001 From: rdb Date: Thu, 5 Nov 2020 17:53:38 +0100 Subject: [PATCH 083/365] Don't use roundEven() to implement round() in DX9 compatibility mode --- Test/baseResults/hlsl.round.dx10.frag.out | 60 +++++++++++++++++++ Test/baseResults/hlsl.round.dx9.frag.out | 70 +++++++++++++++++++++++ Test/hlsl.round.dx10.frag | 4 ++ Test/hlsl.round.dx9.frag | 4 ++ glslang/HLSL/hlslParseHelper.cpp | 4 ++ glslang/HLSL/hlslParseables.cpp | 2 +- gtests/Hlsl.FromFile.cpp | 2 + 7 files changed, 145 insertions(+), 1 deletion(-) create mode 100644 Test/baseResults/hlsl.round.dx10.frag.out create mode 100644 Test/baseResults/hlsl.round.dx9.frag.out create mode 100644 Test/hlsl.round.dx10.frag create mode 100644 Test/hlsl.round.dx9.frag diff --git a/Test/baseResults/hlsl.round.dx10.frag.out b/Test/baseResults/hlsl.round.dx10.frag.out new file mode 100644 index 0000000000..be72dc5972 --- /dev/null +++ b/Test/baseResults/hlsl.round.dx10.frag.out @@ -0,0 +1,60 @@ +hlsl.round.dx10.frag +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:? Sequence +0:3 Branch: Return with expression +0:3 roundEven ( temp 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:? Linker Objects + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:? Sequence +0:3 Branch: Return with expression +0:3 roundEven ( temp 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 17 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 11 "PixelShaderFunction(vf4;" + Name 10 "input" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 7(fvec4) 8(ptr) + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd +11(PixelShaderFunction(vf4;): 7(fvec4) Function None 9 + 10(input): 8(ptr) FunctionParameter + 12: Label + 13: 7(fvec4) Load 10(input) + 14: 7(fvec4) ExtInst 1(GLSL.std.450) 2(RoundEven) 13 + ReturnValue 14 + FunctionEnd diff --git a/Test/baseResults/hlsl.round.dx9.frag.out b/Test/baseResults/hlsl.round.dx9.frag.out new file mode 100644 index 0000000000..9333c7dcff --- /dev/null +++ b/Test/baseResults/hlsl.round.dx9.frag.out @@ -0,0 +1,70 @@ +hlsl.round.dx9.frag +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:? Sequence +0:3 Branch: Return with expression +0:3 round ( temp 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:? Linker Objects + + +Linked fragment stage: + +WARNING: Linking fragment stage: Entry point not found + +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: PixelShaderFunction(vf4; ( temp 4-component vector of float) +0:2 Function Parameters: +0:2 'input' ( in 4-component vector of float) +0:? Sequence +0:3 Branch: Return with expression +0:3 round ( temp 4-component vector of float) +0:3 'input' ( in 4-component vector of float) +0:? Linker Objects + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 18 + + Capability Shader + 2: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 5 "main" + ExecutionMode 5 OriginUpperLeft + 1: String "" + Source HLSL 500 1 "// OpModuleProcessed auto-map-locations +// OpModuleProcessed auto-map-bindings +// OpModuleProcessed entry-point main +// OpModuleProcessed client vulkan100 +// OpModuleProcessed target-env vulkan1.0 +// OpModuleProcessed keep-uncalled +// OpModuleProcessed hlsl-offsets +#line 1 +" + Name 5 "main" + Name 12 "PixelShaderFunction(vf4;" + Name 11 "input" + 3: TypeVoid + 4: TypeFunction 3 + 7: TypeFloat 32 + 8: TypeVector 7(float) 4 + 9: TypePointer Function 8(fvec4) + 10: TypeFunction 8(fvec4) 9(ptr) + 5(main): 3 Function None 4 + 6: Label + Return + FunctionEnd +12(PixelShaderFunction(vf4;): 8(fvec4) Function None 10 + 11(input): 9(ptr) FunctionParameter + 13: Label + Line 1 3 0 + 14: 8(fvec4) Load 11(input) + 15: 8(fvec4) ExtInst 2(GLSL.std.450) 1(Round) 14 + ReturnValue 15 + FunctionEnd diff --git a/Test/hlsl.round.dx10.frag b/Test/hlsl.round.dx10.frag new file mode 100644 index 0000000000..cd88334cc2 --- /dev/null +++ b/Test/hlsl.round.dx10.frag @@ -0,0 +1,4 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + return round(input); +} diff --git a/Test/hlsl.round.dx9.frag b/Test/hlsl.round.dx9.frag new file mode 100644 index 0000000000..cd88334cc2 --- /dev/null +++ b/Test/hlsl.round.dx9.frag @@ -0,0 +1,4 @@ +float4 PixelShaderFunction(float4 input) : COLOR0 +{ + return round(input); +} diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index ea31837e86..abe0f34e6c 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -5492,6 +5492,10 @@ TIntermTyped* HlslParseContext::handleFunctionCall(const TSourceLoc& loc, TFunct op = fnCandidate->getBuiltInOp(); if (builtIn && op != EOpNull) { + // SM 4.0 and above guarantees roundEven semantics for round() + if (!hlslDX9Compatible() && op == EOpRound) + op = EOpRoundEven; + // A function call mapped to a built-in operation. result = intermediate.addBuiltInFunctionCall(loc, op, fnCandidate->getParamCount() == 1, arguments, fnCandidate->getType()); diff --git a/glslang/HLSL/hlslParseables.cpp b/glslang/HLSL/hlslParseables.cpp index 025cb5e11f..4673b46011 100644 --- a/glslang/HLSL/hlslParseables.cpp +++ b/glslang/HLSL/hlslParseables.cpp @@ -1123,7 +1123,7 @@ void TBuiltInParseablesHlsl::identifyBuiltIns(int /*version*/, EProfile /*profil symbolTable.relateToOperator("reflect", EOpReflect); symbolTable.relateToOperator("refract", EOpRefract); symbolTable.relateToOperator("reversebits", EOpBitFieldReverse); - symbolTable.relateToOperator("round", EOpRoundEven); + symbolTable.relateToOperator("round", EOpRound); symbolTable.relateToOperator("rsqrt", EOpInverseSqrt); symbolTable.relateToOperator("saturate", EOpSaturate); symbolTable.relateToOperator("sign", EOpSign); diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 4d1cb50b24..de071b9f37 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -313,6 +313,7 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.promote.binary.frag", "main"}, {"hlsl.promote.vec1.frag", "main"}, {"hlsl.promotions.frag", "main"}, + {"hlsl.round.dx10.frag", "main"}, {"hlsl.rw.atomics.frag", "main"}, {"hlsl.rw.bracket.frag", "main"}, {"hlsl.rw.register.frag", "main"}, @@ -490,6 +491,7 @@ INSTANTIATE_TEST_SUITE_P( INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslDX9CompatibleTest, ::testing::ValuesIn(std::vector{ + {"hlsl.round.dx9.frag", "main"}, {"hlsl.sample.dx9.frag", "main"}, {"hlsl.sample.dx9.vert", "main"}, }), From efe4586fad8eb96b745dc68fc703083614768eb6 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 17 Dec 2020 15:35:41 -0700 Subject: [PATCH 084/365] Fix cut and paste error Fixes #2476 --- glslang/HLSL/hlslParseHelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index abe0f34e6c..fce647a563 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -9869,7 +9869,7 @@ void HlslParseContext::addPatchConstantInvocation() } else { // Use the original declaration type for the linkage paramType->getQualifier().builtIn = biType; - if (biType == EbvTessLevelInner || biType == EbvTessLevelInner) + if (biType == EbvTessLevelInner || biType == EbvTessLevelOuter) paramType->getQualifier().patch = true; if (notInEntryPoint.count(tInterstageIoData(biType, storage)) == 1) From 5c202faffbb826fdec87caa3496b2b6726b3cc07 Mon Sep 17 00:00:00 2001 From: nihui Date: Wed, 23 Dec 2020 21:56:23 +0800 Subject: [PATCH 085/365] Update ParseHelper.cpp --- glslang/MachineIndependent/ParseHelper.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 36e3715755..cc4c4970af 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5417,7 +5417,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi if (! IsPow2(value)) error(loc, "must be a power of 2", "buffer_reference_align", ""); else - publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)log2(value); +#ifdef __ANDROID__ + // Android NDK r15c tageting ABI 15 doesn't have full support for C++11 + // (no std::exp2/log2). ::exp2 is available from C99 but ::log2 isn't + // available up until ABI 18 so we use the mathematical equivalent form + publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)(std::log(value) / std::log(2.0)); +#else + publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)std::log2(value); +#endif if (nonLiteral) error(loc, "needs a literal integer", "buffer_reference_align", ""); return; From 78dbd7514af2111d2a9beaaf1cd4ce7f57e9a172 Mon Sep 17 00:00:00 2001 From: Denis Zalevskiy Date: Tue, 5 Jan 2021 11:25:24 +0200 Subject: [PATCH 086/365] Fix option replacement when flags are empty For the scenario when cmake is executed from MSVC with empty CXX flags. Signed-off-by: Denis Zalevskiy --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ada2b8fb9c..5b176e4510 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -186,7 +186,7 @@ elseif(MSVC) if(NOT ENABLE_RTTI) string(FIND "${CMAKE_CXX_FLAGS}" "/GR" MSVC_HAS_GR) if(MSVC_HAS_GR) - string(REGEX REPLACE /GR /GR- CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) + string(REGEX REPLACE "/GR" "/GR-" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") else() add_compile_options(/GR-) # Disable RTTI endif() From e453088a8a0a96bf91a69bb0988880b16240ae75 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 5 Jan 2021 11:21:20 -0700 Subject: [PATCH 087/365] Fix debugInfo test to target vulkan1.1 as intended Fixes #2494 --- Test/baseResults/spv.debugInfo.1.1.frag.out | 9 +++------ Test/runtests | 2 +- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out index 384c76b0db..78044ff2cf 100644 --- a/Test/baseResults/spv.debugInfo.1.1.frag.out +++ b/Test/baseResults/spv.debugInfo.1.1.frag.out @@ -1,6 +1,4 @@ spv.debugInfo.frag -error: SPIRV-Tools Validation Errors -error: Invalid SPIR-V binary version 1.3 for target environment SPIR-V 1.0 (under OpenGL 4.5 semantics). // Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 124 @@ -9,7 +7,7 @@ error: Invalid SPIR-V binary version 1.3 for target environment SPIR-V 1.0 (unde 2: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 5 "main" 24 52 - ExecutionMode 5 OriginLowerLeft + ExecutionMode 5 OriginUpperLeft 1: String "spv.debugInfo.frag" Source GLSL 450 1 "#version 450 @@ -83,9 +81,9 @@ void main() ModuleProcessed "resource-set-binding 3" ModuleProcessed "auto-map-bindings" ModuleProcessed "auto-map-locations" - ModuleProcessed "client opengl100" + ModuleProcessed "client vulkan100" ModuleProcessed "target-env spirv1.3" - ModuleProcessed "target-env opengl" + ModuleProcessed "target-env vulkan1.1" ModuleProcessed "relaxed-errors" ModuleProcessed "suppress-warnings" ModuleProcessed "hlsl-offsets" @@ -97,7 +95,6 @@ void main() Decorate 54(ubuf) Block Decorate 56 DescriptorSet 3 Decorate 56 Binding 0 - Decorate 67(s2d) Location 0 Decorate 67(s2d) DescriptorSet 3 Decorate 67(s2d) Binding 1 3: TypeVoid diff --git a/Test/runtests b/Test/runtests index df070460d0..51f1a6a6ce 100755 --- a/Test/runtests +++ b/Test/runtests @@ -169,7 +169,7 @@ run -g --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --s -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.frag.out diff -b $BASEDIR/spv.debugInfo.frag.out $TARGETDIR/spv.debugInfo.frag.out || HASERROR=1 run -g -Od --target-env vulkan1.1 --relaxed-errors --suppress-warnings --aml --amb --hlsl-offsets --nsf --spirv-val \ - -G -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out + -V -H spv.debugInfo.frag --rsb frag 3 > $TARGETDIR/spv.debugInfo.1.1.frag.out diff -b $BASEDIR/spv.debugInfo.1.1.frag.out $TARGETDIR/spv.debugInfo.1.1.frag.out || HASERROR=1 run -g -D -Od -e newMain -g --amb --aml --fua --hlsl-iomap --nsf --spirv-val --sib 1 --ssb 2 --sbb 3 --stb 4 --suavb 5 --sub 6 \ --sep origMain -H -Od spv.hlslDebugInfo.vert --rsb vert t0 0 0 > $TARGETDIR/spv.hlslDebugInfo.frag.out From b73afa8631c89589cb5887acbf9f78bccc7a12c5 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Tue, 5 Jan 2021 15:54:41 -0700 Subject: [PATCH 088/365] Prevent HLSL input under OpenGL semantics Fix #2497. --- StandAlone/StandAlone.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 1f294b0744..fdbf027990 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -844,6 +844,10 @@ void ProcessArguments(std::vector>& workItem (Options & EOptionReadHlsl) == 0) Error("uniform array flattening only valid when compiling HLSL source."); + if ((Options & EOptionReadHlsl) && (Client == glslang::EShClientOpenGL)) { + Error("Using HLSL input under OpenGL semantics is not currently supported."); + } + // rationalize client and target language if (TargetLanguage == glslang::EShTargetNone) { switch (ClientVersion) { @@ -1561,7 +1565,8 @@ void usage() " 'ver', when present, is the version of the input semantics,\n" " which will appear in #define GL_SPIRV ver;\n" " '--client opengl100' is the same as -G100;\n" - " a '--target-env' for OpenGL will also imply '-G'\n" + " a '--target-env' for OpenGL will also imply '-G';\n" + " currently only supports GLSL\n" " -H print human readable form of SPIR-V; turns on -V\n" " -I add dir to the include search path; includer's directory\n" " is searched first, followed by left-to-right order of -I\n" From 17a83a9b33aa84addf51b7d2ee6e7ce2aec158ca Mon Sep 17 00:00:00 2001 From: Craig Stout Date: Fri, 15 Jan 2021 10:30:23 -0800 Subject: [PATCH 089/365] Add CMake support for Fuchsia --- glslang/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt index 1c7d22a2a0..fc925eafc5 100644 --- a/glslang/CMakeLists.txt +++ b/glslang/CMakeLists.txt @@ -33,7 +33,7 @@ if(WIN32) add_subdirectory(OSDependent/Windows) -elseif(UNIX) +elseif(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia") add_subdirectory(OSDependent/Unix) else(WIN32) message("unknown platform") From 752028582f9fa77427b76b8b914e7101134a1a0a Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Mon, 18 Jan 2021 12:27:00 +0000 Subject: [PATCH 090/365] license-checker.cfg: Update rules The license classification rules in github.com/google/licensecheck have been updated. --- license-checker.cfg | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/license-checker.cfg b/license-checker.cfg index 886b335316..409f18eff9 100644 --- a/license-checker.cfg +++ b/license-checker.cfg @@ -1,6 +1,7 @@ [ { "licenses": [ + "Apache-2.0", "Apache-2.0-Header", "BSD-2-Clause", "BSD-3-Clause", @@ -29,14 +30,19 @@ "build/**", "out/**", "Test/**", - "External/spirv-tools/**" + "External/spirv-tools/**", + + "SPIRV/GLSL.*.h", + "SPIRV/NonSemanticDebugPrintf.h", + "SPIRV/spirv.hpp" ] } ] }, { "licenses": [ - "GPL-Header" + "GPL-Header", + "GPL-3.0-or-later" ], "paths": [ { "exclude": [ "**" ] }, From a720028cddb1268658c674e2df6ddf8c24c09c21 Mon Sep 17 00:00:00 2001 From: Sergey Kosarevsky Date: Thu, 21 Jan 2021 02:33:16 +0300 Subject: [PATCH 091/365] Fix missing enum values in the C-interface #2507 --- glslang/Include/glslang_c_shader_types.h | 5 +++-- glslang/Public/ShaderLang.h | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h index d01a115f69..f100a9aa82 100644 --- a/glslang/Include/glslang_c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -100,8 +100,9 @@ typedef enum { typedef enum { GLSLANG_TARGET_VULKAN_1_0 = (1 << 22), GLSLANG_TARGET_VULKAN_1_1 = (1 << 22) | (1 << 12), + GLSLANG_TARGET_VULKAN_1_2 = (1 << 22) | (2 << 12), GLSLANG_TARGET_OPENGL_450 = 450, - LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT), + LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 4), } glslang_target_client_version_t; /* SH_TARGET_LanguageVersion counterpart */ @@ -112,7 +113,7 @@ typedef enum { GLSLANG_TARGET_SPV_1_3 = (1 << 16) | (3 << 8), GLSLANG_TARGET_SPV_1_4 = (1 << 16) | (4 << 8), GLSLANG_TARGET_SPV_1_5 = (1 << 16) | (5 << 8), - LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT), + LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT = 6), } glslang_target_language_version_t; /* EShExecutable counterpart */ diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 273f1569a0..3b47403e76 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -167,7 +167,7 @@ typedef enum { EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), // Vulkan 1.1 EShTargetVulkan_1_2 = (1 << 22) | (2 << 12), // Vulkan 1.2 EShTargetOpenGL_450 = 450, // OpenGL - LAST_ELEMENT_MARKER(EShTargetClientVersionCount), + LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 4), } EShTargetClientVersion; typedef EShTargetClientVersion EshTargetClientVersion; @@ -179,7 +179,7 @@ typedef enum { EShTargetSpv_1_3 = (1 << 16) | (3 << 8), // SPIR-V 1.3 EShTargetSpv_1_4 = (1 << 16) | (4 << 8), // SPIR-V 1.4 EShTargetSpv_1_5 = (1 << 16) | (5 << 8), // SPIR-V 1.5 - LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount), + LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 6), } EShTargetLanguageVersion; struct TInputLanguage { From c739e0374861adb9bd9583ff4ab3782a42d8ed86 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Thu, 11 Jun 2020 08:30:03 -0600 Subject: [PATCH 092/365] Implement GL_EXT_null_initializer Adds null initializer syntax (empty braces) Allows null initialization of shared variables --- SPIRV/GlslangToSpv.cpp | 15 +- SPIRV/SpvBuilder.cpp | 24 + SPIRV/SpvBuilder.h | 3 + Test/baseResults/310.comp.out | 12 +- Test/baseResults/430.comp.out | 12 +- Test/baseResults/spv.nullInit.comp.out | 66 + Test/baseResults/vulkan.comp.out | 13 +- Test/spv.nullInit.comp | 32 + Test/vulkan.comp | 21 + glslang/Include/Types.h | 9 + glslang/MachineIndependent/ParseHelper.cpp | 46 +- glslang/MachineIndependent/Versions.cpp | 9 +- glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/glslang.m4 | 6 + glslang/MachineIndependent/glslang.y | 6 + glslang/MachineIndependent/glslang_tab.cpp | 4847 ++++++++++---------- gtests/Spv.FromFile.cpp | 1 + 17 files changed, 2731 insertions(+), 2392 deletions(-) create mode 100755 Test/baseResults/spv.nullInit.comp.out create mode 100644 Test/spv.nullInit.comp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index eea8852807..8e063f8fa5 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3652,13 +3652,14 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* spv::Id initializer = spv::NoResult; - if (node->getType().getQualifier().storage == glslang::EvqUniform && - !node->getConstArray().empty()) { - int nextConst = 0; - initializer = createSpvConstantFromConstUnionArray(node->getType(), - node->getConstArray(), - nextConst, - false /* specConst */); + if (node->getType().getQualifier().storage == glslang::EvqUniform && !node->getConstArray().empty()) { + int nextConst = 0; + initializer = createSpvConstantFromConstUnionArray(node->getType(), + node->getConstArray(), + nextConst, + false /* specConst */); + } else if (node->getType().getQualifier().isNullInit()) { + initializer = builder.makeNullConstant(spvType); } return builder.createVariable(spv::NoPrecision, storageClass, spvType, name, initializer); diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index c8fbcc450e..1401bb0940 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -869,6 +869,30 @@ bool Builder::isSpecConstantOpCode(Op opcode) const } } +Id Builder::makeNullConstant(Id typeId) +{ + Instruction* constant; + + // See if we already made it. + Id existing = NoResult; + for (int i = 0; i < (int)nullConstants.size(); ++i) { + constant = nullConstants[i]; + if (constant->getTypeId() == typeId) + existing = constant->getResultId(); + } + + if (existing != NoResult) + return existing; + + // Make it + Instruction* c = new Instruction(getUniqueId(), typeId, OpConstantNull); + constantsTypesGlobals.push_back(std::unique_ptr(c)); + nullConstants.push_back(c); + module.mapInstruction(c); + + return c->getResultId(); +} + Id Builder::makeBoolConstant(bool b, bool specConstant) { Id typeId = makeBoolType(); diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 911ea58b12..73847e1d1c 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -293,6 +293,7 @@ class Builder { } // For making new constants (will return old constant if the requested one was already made). + Id makeNullConstant(Id typeId); Id makeBoolConstant(bool b, bool specConstant = false); Id makeInt8Constant(int i, bool specConstant = false) { return makeIntConstant(makeIntType(8), (unsigned)i, specConstant); } @@ -838,6 +839,8 @@ class Builder { std::unordered_map> groupedStructConstants; // map type opcodes to type instructions std::unordered_map> groupedTypes; + // list of OpConstantNull instructions + std::vector nullConstants; // stack of switches std::stack switchMerges; diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out index 538b750f33..8874e20b1a 100644 --- a/Test/baseResults/310.comp.out +++ b/Test/baseResults/310.comp.out @@ -9,7 +9,7 @@ ERROR: 0:40: 'in' : global storage input qualifier cannot be used in a compute s ERROR: 0:41: 'out' : global storage output qualifier cannot be used in a compute shader ERROR: 0:44: 'shared' : cannot apply layout qualifiers to a shared variable ERROR: 0:44: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers -ERROR: 0:45: 'shared' : cannot initialize this type of qualifier +ERROR: 0:45: 'shared' : initializer can only be a null initializer ('{}') ERROR: 0:47: 'local_size' : can only apply to 'in' ERROR: 0:47: 'local_size' : can only apply to 'in' ERROR: 0:47: 'local_size' : can only apply to 'in' @@ -115,6 +115,11 @@ ERROR: node is still EOpNull! 0:36 Constant: 0:36 1 (const uint) 0:36 'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex) +0:45 Sequence +0:45 move second child to first child ( temp highp float) +0:45 'fs' ( shared highp float) +0:45 Constant: +0:45 4.200000 0:59 Function Definition: foo( ( global void) 0:59 Function Parameters: 0:61 Sequence @@ -553,6 +558,11 @@ ERROR: node is still EOpNull! 0:36 Constant: 0:36 1 (const uint) 0:36 'gl_LocalInvocationIndex' ( in highp uint LocalInvocationIndex) +0:45 Sequence +0:45 move second child to first child ( temp highp float) +0:45 'fs' ( shared highp float) +0:45 Constant: +0:45 4.200000 0:? Linker Objects 0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) 0:? 2 (const uint) diff --git a/Test/baseResults/430.comp.out b/Test/baseResults/430.comp.out index 55c82388f9..ee126a0f1d 100644 --- a/Test/baseResults/430.comp.out +++ b/Test/baseResults/430.comp.out @@ -7,7 +7,7 @@ ERROR: 0:44: 'in' : global storage input qualifier cannot be used in a compute s ERROR: 0:45: 'out' : global storage output qualifier cannot be used in a compute shader ERROR: 0:48: 'shared' : cannot apply layout qualifiers to a shared variable ERROR: 0:48: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers -ERROR: 0:49: 'shared' : cannot initialize this type of qualifier +ERROR: 0:49: 'shared' : initializer can only be a null initializer ('{}') ERROR: 0:52: 'local_size' : cannot change previously set size ERROR: 0:54: 'local_size' : can only apply to 'in' ERROR: 0:54: 'local_size' : can only apply to 'in' @@ -52,6 +52,11 @@ ERROR: node is still EOpNull! 0:39 10 (const int) 0:39 true case 0:40 Barrier ( global void) +0:49 Sequence +0:49 move second child to first child ( temp float) +0:49 'fs' ( shared float) +0:49 Constant: +0:49 4.200000 0:66 Function Definition: foo( ( global void) 0:66 Function Parameters: 0:68 Sequence @@ -184,6 +189,11 @@ ERROR: node is still EOpNull! 0:39 10 (const int) 0:39 true case 0:40 Barrier ( global void) +0:49 Sequence +0:49 move second child to first child ( temp float) +0:49 'fs' ( shared float) +0:49 Constant: +0:49 4.200000 0:? Linker Objects 0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) 0:? 2 (const uint) diff --git a/Test/baseResults/spv.nullInit.comp.out b/Test/baseResults/spv.nullInit.comp.out new file mode 100755 index 0000000000..a8e231b8e1 --- /dev/null +++ b/Test/baseResults/spv.nullInit.comp.out @@ -0,0 +1,66 @@ +spv.nullInit.comp +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 37 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 460 + SourceExtension "GL_EXT_null_initializer" + Name 4 "main" + Name 12 "S" + MemberName 12(S) 0 "v" + MemberName 12(S) 1 "a" + Name 15 "local" + Name 23 "f" + Name 24 "T" + MemberName 24(T) 0 "b" + MemberName 24(T) 1 "s" + Name 27 "t1" + Name 28 "t2" + Name 30 "s" + Name 31 "g" + Name 34 "i" + Name 36 "global" + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 3 + 8: TypeInt 32 0 + 9: 8(int) Constant 4 + 10: TypeArray 7(fvec3) 9 + 11: TypeInt 32 1 + 12(S): TypeStruct 10 11(int) + 13: 12(S) ConstantNull + 14: TypePointer Function 12(S) + 16: 11(int) Constant 1 + 17: TypePointer Function 11(int) + 21: 6(float) ConstantNull + 22: TypePointer Workgroup 6(float) + 23(f): 22(ptr) Variable Workgroup 21 + 24(T): TypeStruct 11(int) 12(S) + 25: 24(T) ConstantNull + 26: TypePointer Workgroup 24(T) + 27(t1): 26(ptr) Variable Workgroup 25 + 28(t2): 26(ptr) Variable Workgroup 25 + 29: TypePointer Workgroup 12(S) + 30(s): 29(ptr) Variable Workgroup 13 + 31(g): 22(ptr) Variable Workgroup 21 + 32: 11(int) ConstantNull + 33: TypePointer Workgroup 11(int) + 34(i): 33(ptr) Variable Workgroup 32 + 35: TypePointer Private 12(S) + 36(global): 35(ptr) Variable Private 13 + 4(main): 2 Function None 3 + 5: Label + 15(local): 14(ptr) Variable Function 13 + 18: 17(ptr) AccessChain 15(local) 16 + 19: 11(int) Load 18 + 20: 11(int) IAdd 19 16 + Store 18 20 + Return + FunctionEnd diff --git a/Test/baseResults/vulkan.comp.out b/Test/baseResults/vulkan.comp.out index e56dca48e9..3edb619d79 100644 --- a/Test/baseResults/vulkan.comp.out +++ b/Test/baseResults/vulkan.comp.out @@ -1,6 +1,17 @@ vulkan.comp ERROR: 0:5: 'local_size' : cannot change previously set size -ERROR: 1 compilation errors. No code generated. +ERROR: 0:10: 'empty { } initializer' : not supported for this version or the enabled extensions +ERROR: 0:15: 'empty { } initializer' : not supported for this version or the enabled extensions +ERROR: 0:15: 'initialization with shared qualifier' : not supported for this version or the enabled extensions +ERROR: 0:16: 'empty { } initializer' : not supported for this version or the enabled extensions +ERROR: 0:26: '{}' : null initializers can't size unsized arrays +ERROR: 0:31: 'structure' : non-uniform struct contains a sampler or image: sampVar +ERROR: 0:31: '{}' : null initializers can't be used on opaque values +ERROR: 0:33: 'atomic counter types' : not allowed when using GLSL for Vulkan +ERROR: 0:33: 'atomic_uint' : atomic_uints can only be used in uniform variables or function parameters: a +ERROR: 0:33: '{}' : null initializers can't be used on opaque values +ERROR: 0:33: 'atomic_uint' : layout(binding=X) is required +ERROR: 12 compilation errors. No code generated. SPIR-V is not generated for failed compile or link diff --git a/Test/spv.nullInit.comp b/Test/spv.nullInit.comp new file mode 100644 index 0000000000..256fd54aa3 --- /dev/null +++ b/Test/spv.nullInit.comp @@ -0,0 +1,32 @@ +#version 460 + +#extension GL_EXT_null_initializer : enable + +#ifdef GL_EXT_null_initializer + +struct S { + vec3[4] v; + int a; +}; + +struct T { + int b; + S s; +}; + +shared float f = { }; +shared T t1 = { }; +shared T t2 = { }; +shared S s = { }; +shared float g = { }; +shared int i = { }; + +void main() +{ + S local = { }; + ++local.a; +} + +S global = { }; + +#endif diff --git a/Test/vulkan.comp b/Test/vulkan.comp index 6b6f4cf3b4..98d93ed2f3 100644 --- a/Test/vulkan.comp +++ b/Test/vulkan.comp @@ -7,6 +7,27 @@ layout(local_size_z_id = 14) in; // ERROR, can't change this void main() { gl_WorkGroupSize; + int i = { }; // ERROR, need an extension } layout(local_size_y_id = 19) in; // ERROR, already used: TODO not yet reported + +shared float f = { }; // ERROR, need an extension +float g = { }; // ERROR, need an extension + +#extension GL_EXT_null_initializer : enable + +shared float f2 = { }; +float g2 = { }; + +void foo() +{ + int i = { }; + float fa[] = { }; +} + +struct samp { + sampler2D s2D; +} sampVar = { }; + +atomic_uint a = { }; diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 696daf6dfa..603203db9a 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -499,6 +499,7 @@ class TQualifier { declaredBuiltIn = EbvNone; #ifndef GLSLANG_WEB noContraction = false; + nullInit = false; #endif } @@ -512,6 +513,7 @@ class TQualifier { clearMemory(); specConstant = false; nonUniform = false; + nullInit = false; clearLayout(); } @@ -588,6 +590,8 @@ class TQualifier { bool isNoContraction() const { return false; } void setNoContraction() { } bool isPervertexNV() const { return false; } + void setNullInit() { } + bool isNullInit() const { return false; } #else bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects bool nopersp : 1; @@ -609,6 +613,7 @@ class TQualifier { bool subgroupcoherent : 1; bool shadercallcoherent : 1; bool nonprivate : 1; + bool nullInit : 1; bool isWriteOnly() const { return writeonly; } bool isReadOnly() const { return readonly; } bool isRestrict() const { return restrict; } @@ -644,6 +649,8 @@ class TQualifier { bool isNoContraction() const { return noContraction; } void setNoContraction() { noContraction = true; } bool isPervertexNV() const { return pervertexNV; } + void setNullInit() { nullInit = true; } + bool isNullInit() const { return nullInit; } #endif bool isPipeInput() const @@ -2164,6 +2171,8 @@ class TType { appendStr(" specialization-constant"); if (qualifier.nonUniform) appendStr(" nonuniform"); + if (qualifier.isNullInit()) + appendStr(" null-init"); appendStr(" "); appendStr(getStorageQualifierString()); if (isArray()) { diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 8f102514c7..d4b360ceea 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -6815,6 +6815,11 @@ TVariable* TParseContext::declareNonArray(const TSourceLoc& loc, const TString& // TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyped* initializer, TVariable* variable) { + // A null initializer is an aggregate that hasn't had an op assigned yet + // (still EOpNull, no relation to nullInit), and has no children. + bool nullInit = initializer->getAsAggregate() && initializer->getAsAggregate()->getOp() == EOpNull && + initializer->getAsAggregate()->getSequence().size() == 0; + // // Identifier must be of type constant, a global, or a temporary, and // starting at version 120, desktop allows uniforms to have initializers. @@ -6822,9 +6827,36 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp TStorageQualifier qualifier = variable->getType().getQualifier().storage; if (! (qualifier == EvqTemporary || qualifier == EvqGlobal || qualifier == EvqConst || (qualifier == EvqUniform && !isEsProfile() && version >= 120))) { - error(loc, " cannot initialize this type of qualifier ", variable->getType().getStorageQualifierString(), ""); + if (qualifier == EvqShared) { + // GL_EXT_null_initializer allows this for shared, if it's a null initializer + if (nullInit) { + const char* feature = "initialization with shared qualifier"; + profileRequires(loc, EEsProfile, 0, E_GL_EXT_null_initializer, feature); + profileRequires(loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, feature); + } else { + error(loc, "initializer can only be a null initializer ('{}')", "shared", ""); + } + } else { + error(loc, " cannot initialize this type of qualifier ", + variable->getType().getStorageQualifierString(), ""); + return nullptr; + } + } + + if (nullInit) { + // only some types can be null initialized + if (variable->getType().containsUnsizedArray()) { + error(loc, "null initializers can't size unsized arrays", "{}", ""); + return nullptr; + } + if (variable->getType().containsOpaque()) { + error(loc, "null initializers can't be used on opaque values", "{}", ""); + return nullptr; + } + variable->getWritableType().getQualifier().setNullInit(); return nullptr; } + arrayObjectCheck(loc, variable->getType(), "array initializer"); // @@ -6868,13 +6900,15 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp // Uniforms require a compile-time constant initializer if (qualifier == EvqUniform && ! initializer->getType().getQualifier().isFrontEndConstant()) { - error(loc, "uniform initializers must be constant", "=", "'%s'", variable->getType().getCompleteString().c_str()); + error(loc, "uniform initializers must be constant", "=", "'%s'", + variable->getType().getCompleteString().c_str()); variable->getWritableType().getQualifier().makeTemporary(); return nullptr; } // Global consts require a constant initializer (specialization constant is okay) if (qualifier == EvqConst && symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) { - error(loc, "global const initializers must be constant", "=", "'%s'", variable->getType().getCompleteString().c_str()); + error(loc, "global const initializers must be constant", "=", "'%s'", + variable->getType().getCompleteString().c_str()); variable->getWritableType().getQualifier().makeTemporary(); return nullptr; } @@ -6894,7 +6928,8 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp // "In declarations of global variables with no storage qualifier or with a const // qualifier any initializer must be a constant expression." if (symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) { - const char* initFeature = "non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)"; + const char* initFeature = + "non-constant global initializer (needs GL_EXT_shader_non_constant_global_initializers)"; if (isEsProfile()) { if (relaxedErrors() && ! extensionTurnedOn(E_GL_EXT_shader_non_constant_global_initializers)) warn(loc, "not allowed in this version", initFeature, ""); @@ -6908,7 +6943,8 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp // Compile-time tagging of the variable with its constant value... initializer = intermediate.addConversion(EOpAssign, variable->getType(), initializer); - if (! initializer || ! initializer->getType().getQualifier().isConstant() || variable->getType() != initializer->getType()) { + if (! initializer || ! initializer->getType().getQualifier().isConstant() || + variable->getType() != initializer->getType()) { error(loc, "non-matching or non-convertible constant type for const initializer", variable->getType().getStorageQualifierString(), ""); variable->getWritableType().getQualifier().makeTemporary(); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 69b8863ce6..517ff9f829 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -305,6 +305,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_tessellation_point_size] = EBhDisable; extensionBehavior[E_GL_EXT_texture_buffer] = EBhDisable; extensionBehavior[E_GL_EXT_texture_cube_map_array] = EBhDisable; + extensionBehavior[E_GL_EXT_null_initializer] = EBhDisable; // OES matching AEP extensionBehavior[E_GL_OES_geometry_shader] = EBhDisable; @@ -408,9 +409,12 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_shader_non_constant_global_initializers 1\n" ; - if (isEsProfile() && version >= 300) { + if (version >= 300) { preamble += "#define GL_NV_shader_noperspective_interpolation 1\n"; } + if (version >= 310) { + preamble += "#define GL_EXT_null_initializer 1\n"; + } } else { // !isEsProfile() preamble = @@ -538,6 +542,9 @@ void TParseVersions::getPreamble(std::string& preamble) if (profile == ECompatibilityProfile) preamble += "#define GL_compatibility_profile 1\n"; } + if (version >= 140) { + preamble += "#define GL_EXT_null_initializer 1\n"; + } #endif // GLSLANG_WEB } diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index eb17c52e05..6b5efbce0a 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -201,6 +201,7 @@ const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions"; const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate"; const char* const E_GL_EXT_shader_image_int64 = "GL_EXT_shader_image_int64"; +const char* const E_GL_EXT_null_initializer = "GL_EXT_null_initializer"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 8884b2681b..4d37639df1 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -3575,6 +3575,12 @@ GLSLANG_WEB_EXCLUDE_ON parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); $$ = $2; } + | LEFT_BRACE RIGHT_BRACE { + const char* initFeature = "empty { } initializer"; + parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); + parseContext.profileRequires($1.loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); + $$ = parseContext.intermediate.makeAggregate($1.loc); + } GLSLANG_WEB_EXCLUDE_OFF ; diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 2681d48f79..0b711ae25d 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -3575,6 +3575,12 @@ initializer parseContext.profileRequires($1.loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); $$ = $2; } + | LEFT_BRACE RIGHT_BRACE { + const char* initFeature = "empty { } initializer"; + parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); + parseContext.profileRequires($1.loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); + $$ = parseContext.intermediate.makeAggregate($1.loc); + } ; diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index feecc98200..da0658c213 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1004,16 +1004,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 416 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 10112 +#define YYLAST 10537 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 445 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 111 /* YYNRULES -- Number of rules. */ -#define YYNRULES 616 +#define YYNRULES 617 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 764 +#define YYNSTATES 765 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 699 @@ -1159,15 +1159,15 @@ static const yytype_int16 yyrline[] = 3305, 3310, 3315, 3320, 3325, 3330, 3336, 3342, 3348, 3354, 3361, 3368, 3374, 3380, 3386, 3392, 3398, 3404, 3411, 3416, 3432, 3437, 3442, 3450, 3450, 3461, 3461, 3471, 3474, 3487, - 3509, 3536, 3540, 3546, 3551, 3562, 3566, 3572, 3583, 3586, - 3593, 3597, 3598, 3604, 3605, 3606, 3607, 3608, 3609, 3610, - 3612, 3618, 3627, 3628, 3632, 3628, 3644, 3645, 3649, 3649, - 3656, 3656, 3670, 3673, 3681, 3689, 3700, 3701, 3705, 3709, - 3716, 3723, 3727, 3735, 3739, 3752, 3756, 3763, 3763, 3783, - 3786, 3792, 3804, 3816, 3820, 3827, 3827, 3842, 3842, 3858, - 3858, 3879, 3882, 3888, 3891, 3897, 3901, 3908, 3913, 3918, - 3925, 3928, 3932, 3937, 3941, 3951, 3955, 3964, 3967, 3971, - 3980, 3980, 4022, 4028, 4031, 4036, 4039 + 3509, 3536, 3540, 3546, 3551, 3562, 3566, 3572, 3578, 3589, + 3592, 3599, 3603, 3604, 3610, 3611, 3612, 3613, 3614, 3615, + 3616, 3618, 3624, 3633, 3634, 3638, 3634, 3650, 3651, 3655, + 3655, 3662, 3662, 3676, 3679, 3687, 3695, 3706, 3707, 3711, + 3715, 3722, 3729, 3733, 3741, 3745, 3758, 3762, 3769, 3769, + 3789, 3792, 3798, 3810, 3822, 3826, 3833, 3833, 3848, 3848, + 3864, 3864, 3885, 3888, 3894, 3897, 3903, 3907, 3914, 3919, + 3924, 3931, 3934, 3938, 3943, 3947, 3957, 3961, 3970, 3973, + 3977, 3986, 3986, 4028, 4034, 4037, 4042, 4045 }; #endif @@ -1380,12 +1380,12 @@ static const yytype_int16 yytoknum[] = }; #endif -#define YYPACT_NINF (-732) +#define YYPACT_NINF (-733) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-559) +#define YYTABLE_NINF (-560) #define yytable_value_is_error(Yyn) \ 0 @@ -1394,83 +1394,83 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 4303, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - 109, -732, -732, -732, -732, -732, 1, -732, -732, -732, - -732, -732, -732, -324, -261, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, 11, 44, 22, - 7, 6513, -332, -732, -10, -732, -732, -732, -732, 4745, - -732, -732, -732, -732, 46, -732, -732, 767, -732, -732, - 16, -732, 69, -5, 47, -732, -338, -732, 91, -732, - 6513, -732, -732, -732, 6513, 72, 80, -732, 13, -732, - 74, -732, -732, 9069, 126, -732, -732, -732, 127, 6513, - -732, 144, -732, 17, -732, -732, 61, 7377, -732, 10, - 1209, -732, -732, -732, -732, 126, 25, -732, 7800, 26, - -732, 119, -732, 78, 9069, 9069, -732, 9069, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, 36, -732, -732, - -732, 164, 65, 9492, 171, -732, 9069, -732, -732, -340, - 173, -732, 6513, 140, 5187, -732, 6513, 9069, -732, -5, - -732, 141, -732, -732, 124, 130, 179, 27, 117, 156, - 158, 160, 195, 194, 20, 181, 8223, -732, 183, 182, - -732, -732, 186, 178, 180, -732, 189, 192, 184, 8646, - 193, 9069, 187, 188, 190, 196, 197, 129, -732, -732, - 89, -732, 44, 199, 204, -732, -732, -732, -732, -732, - 1651, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -376, 173, 7800, 54, 7800, -732, -732, 7800, 6513, -732, - 161, -732, -732, -732, 70, -732, -732, 9069, 169, -732, - -732, 9069, 207, -732, -732, -732, 9069, -732, 140, 126, - 103, -732, -732, -732, 5629, -732, -732, -732, -732, 9069, - 9069, 9069, 9069, 9069, 9069, 9069, 9069, 9069, 9069, 9069, - 9069, 9069, 9069, 9069, 9069, 9069, 9069, 9069, -732, -732, - -732, 209, 177, -732, 2093, -732, -732, -732, 2093, -732, - 9069, -732, -732, 122, 9069, 152, -732, -732, -732, -732, - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, 9069, 9069, -732, -732, -732, -732, -732, -732, - -732, 7800, -732, 143, -732, 6071, -732, -732, 211, 208, - -732, -732, -732, 123, 173, 140, -732, -732, -732, -732, - -732, 124, 124, 130, 130, 179, 179, 179, 179, 27, - 27, 117, 156, 158, 160, 195, 194, 9069, -732, 216, - 87, -732, 2093, 3861, 174, 3419, 75, -732, 85, -732, - -732, -732, -732, -732, 6954, -732, -732, -732, -732, 154, - 9069, 217, 177, 191, 208, 185, 6513, 221, 223, -732, - -732, 3861, 220, -732, -732, -732, 9069, 224, -732, -732, - -732, 218, 2535, 9069, -732, 219, 225, 198, 226, 2977, - -732, 227, -732, -732, 7800, -732, -732, -732, 86, 9069, - 2535, 220, -732, -732, 2093, -732, 222, 208, -732, -732, - 2093, 228, -732, -732 + 4304, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + 109, -733, -733, -733, -733, -733, 3, -733, -733, -733, + -733, -733, -733, -322, -261, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, 19, 101, 140, + 79, 6514, 57, -733, 96, -733, -733, -733, -733, 4746, + -733, -733, -733, -733, 133, -733, -733, 768, -733, -733, + 16, -733, 151, -32, 125, -733, -335, -733, 158, -733, + 6514, -733, -733, -733, 6514, 127, 128, -733, 13, -733, + 72, -733, -733, 9493, 163, -733, -733, -733, 156, 6514, + -733, 160, -733, 20, -733, -733, 61, 7801, -733, 10, + 1210, -733, -733, -733, -733, 163, -330, -733, 8224, 14, + -733, 134, -733, 88, 9493, 9493, -733, 9493, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, 54, -733, -733, + -733, 166, 62, 9916, 171, -733, 9493, -733, -733, -343, + 173, -733, 6514, 137, 5188, -733, 6514, 9493, -733, -32, + -733, 141, -733, -733, 122, 93, 39, 28, 41, 157, + 159, 161, 192, 195, 21, 181, 8647, -733, 183, 182, + -733, -733, 186, 178, 179, -733, 190, 191, 184, 9070, + 196, 9493, 187, 188, 189, 194, 197, 131, -733, -733, + 99, -733, 101, 200, 205, -733, -733, -733, -733, -733, + 1652, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -376, 173, 8224, 36, 6955, -733, -733, 8224, 6514, -733, + 170, -733, -733, -733, 71, -733, -733, 9493, 176, -733, + -733, 9493, 208, -733, -733, -733, 9493, -733, 137, 163, + 106, -733, -733, -733, 5630, -733, -733, -733, -733, 9493, + 9493, 9493, 9493, 9493, 9493, 9493, 9493, 9493, 9493, 9493, + 9493, 9493, 9493, 9493, 9493, 9493, 9493, 9493, -733, -733, + -733, 210, 180, -733, 2094, -733, -733, -733, 2094, -733, + 9493, -733, -733, 108, 9493, 29, -733, -733, -733, -733, + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, 9493, 9493, -733, -733, -733, -733, -733, -733, + -733, 8224, -733, -733, 139, -733, 6072, -733, -733, 211, + 185, -733, -733, -733, 123, 173, 137, -733, -733, -733, + -733, -733, 122, 122, 93, 93, 39, 39, 39, 39, + 28, 28, 41, 157, 159, 161, 192, 195, 9493, -733, + 215, 85, -733, 2094, 3862, 153, 3420, 76, -733, 80, + -733, -733, -733, -733, -733, 7378, -733, -733, -733, -733, + 86, 9493, 214, 180, 216, 185, 193, 6514, 219, 222, + -733, -733, 3862, 220, -733, -733, -733, 9493, 224, -733, + -733, -733, 217, 2536, 9493, -733, 213, 226, 199, 227, + 2978, -733, 228, -733, -733, 8224, -733, -733, -733, 83, + 9493, 2536, 220, -733, -733, 2094, -733, 223, 185, -733, + -733, 2094, 225, -733, -733 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1509,86 +1509,86 @@ static const yytype_int16 yydefact[] = 421, 415, 420, 422, 423, 425, 426, 427, 429, 430, 431, 433, 434, 435, 437, 438, 411, 412, 413, 424, 414, 416, 417, 418, 428, 432, 436, 507, 508, 511, - 512, 513, 514, 509, 510, 609, 132, 520, 521, 522, + 512, 513, 514, 509, 510, 610, 132, 520, 521, 522, 0, 519, 161, 159, 160, 158, 0, 206, 162, 163, 164, 134, 133, 0, 190, 171, 173, 169, 175, 177, 172, 174, 170, 176, 178, 167, 168, 192, 179, 186, 187, 188, 189, 180, 181, 182, 183, 184, 185, 135, - 136, 137, 138, 139, 140, 147, 608, 0, 610, 0, + 136, 137, 138, 139, 140, 147, 609, 0, 611, 0, 109, 108, 0, 120, 125, 154, 153, 151, 155, 0, - 148, 150, 156, 130, 202, 152, 518, 0, 605, 607, + 148, 150, 156, 130, 202, 152, 518, 0, 606, 608, 0, 525, 0, 0, 0, 97, 0, 94, 0, 107, 0, 116, 110, 118, 0, 119, 0, 95, 126, 100, - 0, 149, 131, 0, 195, 201, 1, 606, 0, 0, + 0, 149, 131, 0, 195, 201, 1, 607, 0, 0, 523, 144, 146, 0, 142, 193, 0, 0, 98, 0, - 0, 611, 111, 115, 117, 113, 121, 112, 0, 127, + 0, 612, 111, 115, 117, 113, 121, 112, 0, 127, 103, 0, 101, 0, 0, 0, 9, 0, 43, 42, 44, 41, 5, 6, 7, 8, 2, 16, 14, 15, 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, 26, 0, 0, 30, 0, 204, 0, 36, 34, 0, 196, 96, 0, 0, 0, 527, 0, 0, 141, 0, 191, 0, 197, 45, 49, 52, 55, 60, 63, 65, - 67, 69, 71, 73, 75, 0, 0, 99, 0, 553, - 562, 566, 0, 0, 0, 587, 0, 0, 0, 0, + 67, 69, 71, 73, 75, 0, 0, 99, 0, 554, + 563, 567, 0, 0, 0, 588, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, 78, 91, - 0, 540, 0, 156, 130, 543, 564, 542, 550, 541, - 0, 544, 545, 568, 546, 575, 547, 548, 583, 549, + 0, 541, 0, 156, 130, 544, 565, 543, 551, 542, + 0, 545, 546, 569, 547, 576, 548, 549, 584, 550, 0, 114, 0, 122, 0, 535, 129, 0, 0, 105, 0, 102, 38, 39, 0, 22, 23, 0, 0, 28, 27, 0, 206, 31, 33, 40, 0, 203, 0, 533, 0, 531, 526, 528, 0, 93, 145, 143, 194, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 76, 198, - 199, 0, 0, 552, 0, 585, 598, 597, 0, 589, - 0, 601, 599, 0, 0, 0, 582, 602, 603, 604, - 551, 81, 82, 84, 83, 86, 87, 88, 89, 90, - 85, 80, 0, 0, 567, 563, 565, 569, 576, 584, - 124, 0, 538, 0, 128, 0, 106, 4, 0, 24, - 21, 32, 205, 0, 534, 0, 529, 524, 46, 47, - 48, 51, 50, 53, 54, 58, 59, 56, 57, 61, - 62, 64, 66, 68, 70, 72, 74, 0, 200, 615, - 0, 613, 554, 0, 0, 0, 0, 600, 0, 581, - 79, 92, 123, 536, 0, 104, 19, 530, 532, 0, - 0, 0, 0, 0, 573, 0, 0, 0, 0, 592, - 591, 594, 560, 577, 537, 539, 0, 0, 612, 614, - 555, 0, 0, 0, 593, 0, 0, 572, 0, 0, - 570, 0, 77, 616, 0, 557, 586, 556, 0, 595, - 0, 560, 559, 561, 579, 574, 0, 596, 590, 571, - 580, 0, 588, 578 + 199, 0, 0, 553, 0, 586, 599, 598, 0, 590, + 0, 602, 600, 0, 0, 0, 583, 603, 604, 605, + 552, 81, 82, 84, 83, 86, 87, 88, 89, 90, + 85, 80, 0, 0, 568, 564, 566, 570, 577, 585, + 124, 0, 538, 539, 0, 128, 0, 106, 4, 0, + 24, 21, 32, 205, 0, 534, 0, 529, 524, 46, + 47, 48, 51, 50, 53, 54, 58, 59, 56, 57, + 61, 62, 64, 66, 68, 70, 72, 74, 0, 200, + 616, 0, 614, 555, 0, 0, 0, 0, 601, 0, + 582, 79, 92, 123, 536, 0, 104, 19, 530, 532, + 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, + 593, 592, 595, 561, 578, 537, 540, 0, 0, 613, + 615, 556, 0, 0, 0, 594, 0, 0, 573, 0, + 0, 571, 0, 77, 617, 0, 558, 587, 557, 0, + 596, 0, 561, 560, 562, 580, 575, 0, 597, 591, + 572, 581, 0, 589, 579 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -732, -732, -732, -732, -732, -732, -732, -732, -732, -732, - -732, -732, 9402, -732, -90, -89, -153, -92, -29, -28, - -27, -26, -30, -25, -732, -88, -732, -101, -732, -113, - -132, 2, -732, -732, -732, 4, -732, -732, -732, 200, - 201, 202, -732, -732, -343, -732, -732, -732, -732, 92, - -732, -36, -46, -732, 9, -732, 0, -67, -732, -732, - -732, -732, 263, -732, -732, -732, -481, -142, 8, -78, - -214, -732, -107, -204, -731, -732, -149, -732, -732, -160, - -159, -732, -732, 212, -269, -104, -732, 45, -732, -127, - -732, 48, -732, -732, -732, -732, 49, -732, -732, -732, - -732, -732, -732, -732, -732, 210, -732, -732, -732, -732, - -116 + -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, + -733, -733, 9826, -733, -105, -98, -156, -102, -29, -28, + -30, -27, -26, -31, -733, -82, -733, -101, -733, -109, + -134, 2, -733, -733, -733, 4, -733, -733, -733, 177, + 198, 201, -733, -733, -341, -733, -733, -733, -733, 94, + -733, -37, -46, -733, 9, -733, 0, -66, -733, -733, + -733, -733, 262, -733, -733, -733, -481, -149, 11, -79, + -213, -733, -108, -204, -732, -733, -148, -733, -733, -161, + -160, -733, -733, 202, -274, -100, -733, 44, -733, -127, + -733, 47, -733, -733, -733, -733, 49, -733, -733, -733, + -733, -733, -733, -733, -733, 221, -733, -733, -733, -733, + -112 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 465, 466, 467, 658, 468, 469, 470, 471, 472, + -1, 465, 466, 467, 659, 468, 469, 470, 471, 472, 473, 474, 527, 476, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 528, 687, 529, 642, 530, + 500, 501, 502, 503, 504, 528, 688, 529, 642, 530, 586, 531, 367, 558, 443, 532, 369, 370, 371, 401, 402, 403, 372, 373, 374, 375, 376, 377, 423, 424, 378, 379, 380, 381, 477, 426, 478, 429, 414, 415, 479, 384, 385, 386, 486, 419, 484, 485, 580, 581, - 556, 653, 535, 536, 537, 538, 539, 614, 713, 746, - 737, 738, 739, 747, 540, 541, 542, 543, 740, 717, - 544, 545, 741, 761, 546, 547, 548, 693, 618, 695, - 721, 735, 736, 549, 387, 388, 389, 398, 550, 690, - 691 + 556, 654, 535, 536, 537, 538, 539, 614, 714, 747, + 738, 739, 740, 748, 540, 541, 542, 543, 741, 718, + 544, 545, 742, 762, 546, 547, 548, 694, 618, 696, + 722, 736, 737, 549, 387, 388, 389, 398, 550, 691, + 692 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1596,14 +1596,14 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 383, 745, 366, 427, 368, 584, 576, 512, 753, 382, - 515, 428, 516, 517, 406, 393, 520, 407, 577, 745, + 383, 746, 366, 576, 368, 584, 427, 512, 754, 382, + 515, 427, 516, 517, 428, 577, 520, 393, 552, 746, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 655, 394, 61, + 52, 53, 54, 55, 56, 57, 58, 656, 394, 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, @@ -1629,233 +1629,675 @@ static const yytype_int16 yytable[] = 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, 411, 564, 404, 646, 555, 650, 505, - 652, 439, 583, 654, 391, 692, 607, 480, 596, 597, - 715, 506, 437, 400, 427, 565, 566, 488, 411, 507, - 395, 438, 399, 489, 404, 408, 427, 506, 551, 553, - 421, 405, 573, 552, 557, -35, 392, 567, 715, 412, - 382, 568, 608, 482, 598, 599, 396, 383, 382, 366, - 418, 368, 321, 397, 422, 506, 382, 326, 327, 585, - 405, 490, 651, 413, 405, 570, 623, 491, 625, 382, - 657, 571, 420, 382, 694, 722, 643, 440, 611, 483, - 441, 643, 425, 442, 560, 723, 756, 561, 382, 711, - 534, 643, 643, 712, 430, 643, 411, 702, 644, 533, - 600, 601, 583, 675, 676, 677, 678, 435, 482, 665, - 482, 555, 666, 555, 659, 436, 555, 631, 632, 633, - 634, 635, 636, 637, 638, 639, 640, 427, 643, 665, - 661, 697, 707, 317, 318, 319, 481, 641, 589, 590, - 591, 592, 578, 593, 483, 760, 483, 703, 646, 704, - 725, 382, 487, 382, 559, 382, 594, 595, 643, 699, - 643, 726, 671, 672, 569, 673, 674, 696, 679, 680, - 574, 698, 664, 583, 506, 579, 588, 602, 603, 604, - 605, 606, 482, 609, 612, 615, 613, 616, 619, 617, - 755, 620, 624, 621, 626, 730, 656, 627, -36, 628, - 534, 700, 701, -34, 660, 629, 630, -29, 482, 533, - 555, 688, 689, 706, 643, 710, 646, 718, 483, 728, - 731, 732, 733, -558, 743, 750, 744, 382, 749, 509, - 754, 762, 763, 681, 709, 682, 685, 683, 727, 684, - 714, 587, 686, 390, 483, 751, 663, 708, 719, 752, - 758, 720, 759, 382, 734, 647, 729, 417, 648, 649, - 0, 432, 0, 555, 433, 0, 434, 0, 714, 0, - 431, 0, 0, 0, 534, 0, 0, 0, 534, 482, - 748, 0, 585, 533, 0, 742, 0, 533, 0, 0, - 0, 0, 0, 0, 0, 0, 757, 0, 0, 0, - 0, 0, 0, 555, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 483, 0, 716, 0, 0, - 0, 0, 0, 0, 382, 0, 0, 0, 0, 0, - 411, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 716, 0, 0, 0, 0, - 0, 0, 534, 534, 0, 534, 0, 0, 0, 0, - 0, 533, 533, 0, 533, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 412, 0, 0, 0, - 0, 534, 0, 0, 0, 382, 0, 0, 0, 0, - 533, 0, 534, 0, 0, 0, 0, 0, 0, 534, - 0, 533, 0, 0, 0, 0, 0, 0, 533, 0, - 534, 0, 0, 0, 534, 0, 0, 0, 0, 533, - 534, 0, 0, 533, 0, 0, 0, 416, 0, 533, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, + 312, 313, 314, 411, 404, 583, 646, 555, 564, 650, + 693, 653, 439, 421, 655, 505, 391, 607, 480, 596, + 597, 506, 437, 716, 427, 506, 594, 595, 411, 507, + 488, 438, 557, 404, 600, 601, 489, 422, 395, 551, + 553, 405, 573, 565, 566, 643, 700, 506, 392, 412, + 382, 716, 482, 608, 651, 598, 599, 383, 382, 366, + 418, 368, 321, -35, 396, 567, 382, 326, 327, 568, + 405, 490, 570, 406, 405, 585, 407, 491, 571, 382, + 623, 658, 625, 382, 695, 440, 723, 643, 441, 483, + 724, 442, 643, 757, 611, 400, 643, 712, 382, 643, + 534, 713, 643, 727, 560, 583, 411, 561, 703, 533, + 676, 677, 678, 679, 592, 643, 593, 482, 644, 482, + 397, 555, 666, 555, 643, 667, 555, 698, 660, 631, + 632, 633, 634, 635, 636, 637, 638, 639, 640, 666, + 662, 408, 708, 317, 318, 319, 589, 590, 591, 641, + 399, 761, 578, 704, 483, 705, 483, 672, 673, 646, + 413, 382, 726, 382, 420, 382, 674, 675, 680, 681, + 425, 430, 435, 436, 427, 481, 569, 583, 487, 559, + 574, 697, 579, 665, 506, 699, 588, 605, 602, 603, + 604, 482, 606, 609, 612, 615, 613, 616, 617, 619, + 620, 643, 756, 621, 626, 624, 719, 627, 628, -36, + 534, 701, 702, 629, -34, 657, 630, 482, -29, 533, + 555, 661, 689, 707, 711, 690, 729, 646, 483, 733, + 731, 734, 750, -559, 744, 745, 751, 382, 732, 764, + 509, 755, 763, 682, 684, 683, 687, 728, 685, 710, + 686, 433, 390, 587, 483, 715, 752, 709, 720, 664, + 759, 753, 760, 382, 647, 735, 721, 648, 432, 649, + 431, 730, 0, 0, 555, 434, 0, 0, 417, 0, + 0, 0, 0, 715, 534, 0, 0, 0, 534, 482, + 0, 0, 0, 533, 0, 749, 743, 533, 0, 585, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 758, 0, 0, 555, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 483, 717, 0, 0, + 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, + 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, + 0, 0, 0, 534, 534, 0, 534, 0, 0, 0, + 0, 0, 533, 533, 0, 533, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, + 0, 0, 534, 0, 0, 0, 382, 0, 0, 0, + 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, + 534, 0, 533, 0, 0, 0, 0, 0, 0, 533, + 0, 534, 0, 0, 0, 534, 0, 0, 0, 0, + 533, 534, 0, 0, 533, 0, 0, 0, 416, 0, + 533, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 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, 315, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 316, 317, 318, 319, 320, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 322, 323, 324, 325, 326, + 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, + 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, + 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 0, 0, 444, + 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, + 0, 508, 0, 509, 510, 0, 0, 0, 0, 511, + 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 316, 317, 318, 319, 320, 0, 0, + 0, 452, 453, 454, 455, 456, 321, 322, 323, 324, + 325, 326, 327, 512, 513, 514, 515, 0, 516, 517, + 518, 519, 520, 521, 522, 523, 524, 525, 328, 329, + 330, 331, 332, 333, 457, 458, 459, 460, 461, 462, + 463, 464, 334, 526, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, + 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 446, 447, 0, 508, 0, 509, 645, 0, 0, 0, + 0, 511, 448, 449, 450, 451, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 316, 317, 318, 319, 320, + 0, 0, 0, 452, 453, 454, 455, 456, 321, 322, + 323, 324, 325, 326, 327, 512, 513, 514, 515, 0, + 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, + 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, + 461, 462, 463, 464, 334, 526, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 446, 447, 0, 508, 0, 509, 0, 0, + 0, 0, 0, 511, 448, 449, 450, 451, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, + 319, 320, 0, 0, 0, 452, 453, 454, 455, 456, + 321, 322, 323, 324, 325, 326, 327, 512, 513, 514, + 515, 0, 516, 517, 518, 519, 520, 521, 522, 523, + 524, 525, 328, 329, 330, 331, 332, 333, 457, 458, + 459, 460, 461, 462, 463, 464, 334, 526, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 446, 447, 0, 508, 0, 430, + 0, 0, 0, 0, 0, 511, 448, 449, 450, 451, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, + 317, 318, 319, 320, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 322, 323, 324, 325, 326, 327, 512, + 513, 514, 515, 0, 516, 517, 518, 519, 520, 521, + 522, 523, 524, 525, 328, 329, 330, 331, 332, 333, + 457, 458, 459, 460, 461, 462, 463, 464, 334, 526, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 0, 0, 444, 445, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 446, 447, 0, 508, + 0, 0, 0, 0, 0, 0, 0, 511, 448, 449, + 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 316, 317, 318, 319, 320, 0, 0, 0, 452, + 453, 454, 455, 456, 321, 322, 323, 324, 325, 326, + 327, 512, 513, 514, 515, 0, 516, 517, 518, 519, + 520, 521, 522, 523, 524, 525, 328, 329, 330, 331, + 332, 333, 457, 458, 459, 460, 461, 462, 463, 464, + 334, 526, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 0, 0, 444, + 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, + 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 316, 317, 318, 319, 320, 0, 0, + 0, 452, 453, 454, 455, 456, 321, 322, 323, 324, + 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, + 330, 331, 332, 333, 457, 458, 459, 460, 461, 462, + 463, 464, 334, 0, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, + 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 446, 447, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 316, 317, 318, 319, 0, + 0, 0, 0, 452, 453, 454, 455, 456, 321, 322, + 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, + 461, 462, 463, 464, 334, 0, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 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, 315, 0, 0, 0, + 0, 0, 0, 315, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, + 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 316, 317, 318, 319, 320, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 322, 323, 324, 325, 326, 327, + 0, 0, 328, 329, 330, 331, 332, 333, 0, 0, + 0, 0, 0, 0, 0, 0, 334, 0, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 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, 409, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, + 317, 318, 319, 0, 0, 0, 0, 0, 0, 0, + 0, 410, 321, 322, 323, 324, 325, 326, 327, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 328, 329, 330, 331, 332, 333, + 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, + 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 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, 582, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 316, 317, 318, 319, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 321, 322, 323, 324, 325, 326, + 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, + 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, + 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 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, 668, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 316, 317, 318, 319, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 322, 323, 324, + 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, + 330, 331, 332, 333, 0, 0, 0, 0, 0, 0, + 0, 0, 334, 0, 335, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 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, 706, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 316, 317, 318, 319, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 321, 322, + 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 328, 329, 330, 331, 332, 333, 0, 0, 0, 0, + 0, 0, 0, 0, 334, 0, 335, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, - 333, 0, 0, 0, 0, 0, 0, 0, 0, 334, - 0, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, - 508, 0, 509, 510, 0, 0, 0, 0, 511, 448, - 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 316, 317, 318, 319, 320, 0, 0, 0, - 452, 453, 454, 455, 456, 321, 322, 323, 324, 325, - 326, 327, 512, 513, 514, 515, 0, 516, 517, 518, - 519, 520, 521, 522, 523, 524, 525, 328, 329, 330, - 331, 332, 333, 457, 458, 459, 460, 461, 462, 463, - 464, 334, 526, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, - 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, - 447, 0, 508, 0, 509, 645, 0, 0, 0, 0, - 511, 448, 449, 450, 451, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 316, 317, 318, 319, 320, 0, - 0, 0, 452, 453, 454, 455, 456, 321, 322, 323, - 324, 325, 326, 327, 512, 513, 514, 515, 0, 516, - 517, 518, 519, 520, 521, 522, 523, 524, 525, 328, - 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 526, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 508, 0, 509, 0, 0, 0, - 0, 0, 511, 448, 449, 450, 451, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 322, 323, 324, 325, 326, 327, 512, 513, 514, 515, - 0, 516, 517, 518, 519, 520, 521, 522, 523, 524, - 525, 328, 329, 330, 331, 332, 333, 457, 458, 459, - 460, 461, 462, 463, 464, 334, 526, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, + 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, + 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 321, 322, 323, 324, 325, 326, 327, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 328, 329, 330, 331, 332, 333, 0, 0, + 0, 0, 0, 0, 0, 0, 334, 0, 335, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 53, 54, 55, 56, 57, 58, 0, 0, 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, @@ -1883,112 +2325,64 @@ static const yytype_int16 yytable[] = 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 446, 447, 0, 508, 0, 430, 0, - 0, 0, 0, 0, 511, 448, 449, 450, 451, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, - 318, 319, 320, 0, 0, 0, 452, 453, 454, 455, - 456, 321, 322, 323, 324, 325, 326, 327, 512, 513, - 514, 515, 0, 516, 517, 518, 519, 520, 521, 522, - 523, 524, 525, 328, 329, 330, 331, 332, 333, 457, - 458, 459, 460, 461, 462, 463, 464, 334, 526, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, + 0, 0, 0, 446, 447, 0, 0, 0, 554, 652, + 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 446, 447, 0, 508, 0, - 0, 0, 0, 0, 0, 0, 511, 448, 449, 450, - 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 316, 317, 318, 319, 320, 0, 0, 0, 452, 453, - 454, 455, 456, 321, 322, 323, 324, 325, 326, 327, - 512, 513, 514, 515, 0, 516, 517, 518, 519, 520, - 521, 522, 523, 524, 525, 328, 329, 330, 331, 332, - 333, 457, 458, 459, 460, 461, 462, 463, 464, 334, - 526, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 0, 0, 444, 445, + 0, 0, 0, 0, 0, 0, 452, 453, 454, 455, + 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, + 458, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 0, + 0, 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, 0, 0, 444, 445, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 446, 447, 0, 0, + 0, 554, 725, 0, 0, 0, 0, 0, 448, 449, + 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, + 453, 454, 455, 456, 321, 0, 0, 0, 0, 326, + 327, 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, 446, 447, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 511, 448, - 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 316, 317, 318, 319, 320, 0, 0, 0, - 452, 453, 454, 455, 456, 321, 322, 323, 324, 325, - 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, - 331, 332, 333, 457, 458, 459, 460, 461, 462, 463, - 464, 334, 0, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, + 0, 0, 457, 458, 459, 460, 461, 462, 463, 464, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 57, 58, 0, 0, 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, @@ -2016,111 +2410,63 @@ static const yytype_int16 yytable[] = 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, - 447, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 447, 0, 0, 492, 0, 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 316, 317, 318, 319, 0, 0, - 0, 0, 452, 453, 454, 455, 456, 321, 322, 323, - 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 457, 458, 459, 460, 461, - 462, 463, 464, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 452, 453, 454, 455, 456, 321, 0, 0, + 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 457, 458, 459, 460, 461, + 462, 463, 464, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 347, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 315, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 316, 317, 318, 319, - 320, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 329, 330, 331, 332, 333, 0, 0, 0, - 0, 0, 0, 0, 0, 334, 0, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 446, 447, 0, 0, 0, 554, 0, 0, + 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 452, 453, 454, 455, 456, + 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 409, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 316, 317, - 318, 319, 0, 0, 0, 0, 0, 0, 0, 0, - 410, 321, 322, 323, 324, 325, 326, 327, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 457, 458, + 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 328, 329, 330, 331, 332, 333, 0, - 0, 0, 0, 0, 0, 0, 0, 334, 0, 335, - 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 51, 52, 53, 54, 55, 56, 57, 58, 0, 0, 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, @@ -2145,115 +2491,67 @@ static const yytype_int16 yytable[] = 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, 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, 582, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 316, 317, 318, 319, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 321, 322, 323, 324, 325, 326, 327, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 328, 329, 330, 331, 332, - 333, 0, 0, 0, 0, 0, 0, 0, 0, 334, - 0, 335, 336, 337, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 0, 0, 0, 0, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, + 311, 312, 313, 314, 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 446, 447, 0, 0, 610, + 0, 0, 0, 0, 0, 0, 0, 448, 449, 450, + 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, + 454, 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 667, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 316, 317, 318, 319, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 321, 322, 323, 324, 325, - 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 328, 329, 330, - 331, 332, 333, 0, 0, 0, 0, 0, 0, 0, - 0, 334, 0, 335, 336, 337, 338, 339, 340, 341, - 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, + 0, 457, 458, 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 0, 0, 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, 0, 0, 444, + 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, + 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 705, 0, 0, 0, 0, + 0, 452, 453, 454, 455, 456, 321, 0, 0, 0, + 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 316, 317, 318, 319, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 321, 322, 323, - 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 328, - 329, 330, 331, 332, 333, 0, 0, 0, 0, 0, - 0, 0, 0, 334, 0, 335, 336, 337, 338, 339, - 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 1, 2, 3, 4, + 0, 0, 0, 0, 457, 458, 459, 460, 461, 462, + 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 55, 56, 57, 58, 0, 0, 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, @@ -2279,25 +2577,343 @@ static const yytype_int16 yytable[] = 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, + 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 452, 453, 454, 455, 456, 321, + 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, + 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 444, 445, 0, 0, 475, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 493, 446, 447, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, + 562, 563, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, + 455, 456, 321, 0, 0, 0, 0, 326, 572, 0, + 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, + 457, 458, 459, 460, 461, 462, 463, 464, 0, 0, + 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 347, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 663, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 669, 670, 671, 493, 493, + 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, + 493, 493, 493, 493, 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, 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, 316, 317, 318, 319, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 321, - 322, 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 328, 329, 330, 331, 332, 333, 0, 0, 0, - 0, 0, 0, 0, 0, 334, 0, 335, 336, 337, - 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 2, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 493 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 733, 0, 346, 0, 486, 341, 383, 740, 0, + 386, 341, 388, 389, 349, 358, 392, 339, 348, 751, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 558, 339, 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, 379, 371, 484, 540, 438, 447, 552, + 614, 554, 408, 375, 557, 427, 343, 326, 414, 321, + 322, 341, 339, 694, 341, 341, 317, 318, 404, 349, + 340, 348, 348, 400, 323, 324, 346, 399, 349, 435, + 436, 371, 473, 319, 320, 346, 347, 341, 375, 379, + 371, 722, 419, 362, 348, 357, 358, 387, 379, 387, + 390, 387, 376, 339, 375, 341, 387, 381, 382, 345, + 400, 340, 340, 346, 404, 487, 349, 346, 346, 400, + 519, 340, 521, 404, 618, 343, 340, 346, 346, 419, + 340, 349, 346, 340, 506, 346, 346, 342, 419, 346, + 430, 346, 346, 347, 346, 584, 482, 349, 651, 430, + 596, 597, 598, 599, 351, 346, 353, 484, 349, 486, + 349, 552, 346, 554, 346, 349, 557, 349, 567, 328, + 329, 330, 331, 332, 333, 334, 335, 336, 337, 346, + 571, 375, 349, 364, 365, 366, 354, 355, 356, 348, + 340, 755, 482, 344, 484, 346, 486, 592, 593, 693, + 357, 482, 705, 484, 343, 486, 594, 595, 600, 601, + 375, 343, 375, 375, 341, 349, 340, 656, 348, 375, + 339, 620, 375, 579, 341, 624, 375, 325, 361, 360, + 359, 558, 327, 342, 341, 339, 344, 349, 349, 339, + 339, 346, 745, 349, 347, 339, 383, 349, 349, 339, + 540, 642, 643, 349, 339, 375, 349, 584, 340, 540, + 651, 375, 342, 342, 339, 375, 342, 761, 558, 340, + 344, 339, 349, 343, 340, 348, 340, 558, 375, 344, + 343, 343, 349, 602, 604, 603, 607, 711, 605, 688, + 606, 404, 320, 489, 584, 694, 387, 666, 696, 578, + 751, 739, 752, 584, 550, 722, 696, 550, 400, 550, + 398, 713, -1, -1, 705, 404, -1, -1, 387, -1, + -1, -1, -1, 722, 614, -1, -1, -1, 618, 656, + -1, -1, -1, 614, -1, 734, 727, 618, -1, 711, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 750, -1, -1, 745, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 656, 694, -1, -1, + -1, -1, -1, -1, -1, 656, -1, -1, -1, -1, + -1, 717, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 722, -1, -1, -1, -1, + -1, -1, -1, 693, 694, -1, 696, -1, -1, -1, + -1, -1, 693, 694, -1, 696, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 717, -1, -1, + -1, -1, 722, -1, -1, -1, 717, -1, -1, -1, + -1, 722, -1, 733, -1, -1, -1, -1, -1, -1, + 740, -1, 733, -1, -1, -1, -1, -1, -1, 740, + -1, 751, -1, -1, -1, 755, -1, -1, -1, -1, + 751, 761, -1, -1, 755, -1, -1, -1, 0, -1, + 761, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 349, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 363, 364, 365, 366, 367, -1, -1, -1, -1, + -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, + 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 398, 399, 400, 401, + 402, 403, -1, -1, -1, -1, -1, -1, -1, -1, + 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, -1, -1, 319, + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, + -1, 341, -1, 343, 344, -1, -1, -1, -1, 349, + 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 363, 364, 365, 366, 367, -1, -1, + -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, + 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, -1, + -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 338, 339, -1, 341, -1, 343, 344, -1, -1, -1, + -1, 349, 350, 351, 352, 353, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 363, 364, 365, 366, 367, + -1, -1, -1, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 338, 339, -1, 341, -1, 343, -1, -1, + -1, -1, -1, 349, 350, 351, 352, 353, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, + 366, 367, -1, -1, -1, 371, 372, 373, 374, 375, + 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, + 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, + 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, 62, 63, + 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, @@ -2323,150 +2939,25 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 447, 0, 0, 0, 554, 724, 0, - 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 452, 453, 454, 455, 456, - 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 458, - 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, - 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, 0, 0, 444, 445, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 446, 447, 0, 0, 492, - 0, 0, 0, 0, 0, 0, 0, 448, 449, 450, - 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, - 454, 455, 456, 321, 0, 0, 0, 0, 326, 327, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 457, 458, 459, 460, 461, 462, 463, 464, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 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, 0, 0, 444, - 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, - 0, 0, 0, 554, 0, 0, 0, 0, 0, 0, - 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 452, 453, 454, 455, 456, 321, 0, 0, 0, - 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 457, 458, 459, 460, 461, 462, - 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, 0, 0, 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 0, 610, 0, 0, 0, 0, - 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, 341, -1, 343, + -1, -1, -1, -1, -1, 349, 350, 351, 352, 353, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, + 364, 365, 366, 367, -1, -1, -1, 371, 372, 373, + 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, + 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, + 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, + 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, @@ -2492,66 +2983,114 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, 445, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 622, 448, 449, 450, 451, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 457, 458, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 347, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, - 0, 0, 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, 0, 0, 444, 445, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 446, 447, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 448, - 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 452, 453, 454, 455, 456, 321, 0, 0, 0, 0, - 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 457, 458, 459, 460, 461, 462, 463, - 464, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 347, 2, 3, 4, 5, + 312, 313, 314, 315, 316, -1, -1, 319, 320, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 338, 339, -1, 341, + -1, -1, -1, -1, -1, -1, -1, 349, 350, 351, + 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 363, 364, 365, 366, 367, -1, -1, -1, 371, + 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, + 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, + 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, -1, -1, 319, + 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 349, + 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 363, 364, 365, 366, 367, -1, -1, + -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, + 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, -1, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, -1, + -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 363, 364, 365, 366, -1, + -1, -1, -1, 371, 372, 373, 374, 375, 376, 377, + 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, -1, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, 62, 63, 64, 65, + 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, @@ -2576,50 +3115,26 @@ static const yytype_int16 yytable[] = 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, 0, - 0, 444, 445, 0, 0, 475, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, - 446, 447, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 448, 449, 450, 451, 562, 563, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 452, 453, 454, 455, 456, 321, 0, - 0, 0, 0, 326, 572, 0, 0, 0, 575, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 493, - 0, 0, 0, 0, 0, 0, 457, 458, 459, 460, - 461, 462, 463, 464, 0, 0, 0, 0, 493, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 347, 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, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 662, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 668, 669, 670, 493, 493, 493, 493, 493, 493, - 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - 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, 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, 0, 0, 0, 0, - 0, 0, 493 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 732, 0, 341, 0, 486, 346, 383, 739, 0, - 386, 349, 388, 389, 346, 339, 392, 349, 358, 750, + 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, + 316, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 349, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, + 366, 367, -1, -1, -1, -1, -1, -1, -1, -1, + 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 398, 399, 400, 401, 402, 403, -1, -1, + -1, -1, -1, -1, -1, -1, 412, -1, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 558, 339, 63, + 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, @@ -2645,454 +3160,202 @@ static const yytype_int16 yycheck[] = 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, 379, 447, 371, 540, 438, 552, 427, - 554, 408, 484, 557, 343, 614, 326, 414, 321, 322, - 693, 341, 339, 346, 341, 319, 320, 340, 404, 349, - 349, 348, 340, 346, 400, 375, 341, 341, 435, 436, - 375, 371, 473, 348, 348, 339, 375, 341, 721, 379, - 371, 345, 362, 419, 357, 358, 375, 387, 379, 387, - 390, 387, 376, 349, 399, 341, 387, 381, 382, 487, - 400, 340, 348, 357, 404, 340, 519, 346, 521, 400, - 340, 346, 343, 404, 618, 340, 346, 343, 506, 419, - 346, 346, 375, 349, 346, 340, 340, 349, 419, 342, - 430, 346, 346, 346, 343, 346, 482, 651, 349, 430, - 323, 324, 584, 596, 597, 598, 599, 375, 484, 346, - 486, 552, 349, 554, 567, 375, 557, 328, 329, 330, - 331, 332, 333, 334, 335, 336, 337, 341, 346, 346, - 571, 349, 349, 364, 365, 366, 349, 348, 354, 355, - 356, 351, 482, 353, 484, 754, 486, 344, 692, 346, - 704, 482, 348, 484, 375, 486, 317, 318, 346, 347, - 346, 347, 592, 593, 340, 594, 595, 620, 600, 601, - 339, 624, 579, 655, 341, 375, 375, 361, 360, 359, - 325, 327, 558, 342, 341, 339, 344, 349, 339, 349, - 744, 339, 339, 349, 347, 344, 375, 349, 339, 349, - 540, 642, 643, 339, 375, 349, 349, 340, 584, 540, - 651, 342, 375, 342, 346, 339, 760, 383, 558, 342, - 375, 340, 339, 343, 340, 340, 348, 558, 349, 343, - 343, 349, 344, 602, 687, 603, 606, 604, 710, 605, - 693, 489, 607, 320, 584, 387, 578, 665, 695, 738, - 750, 695, 751, 584, 721, 550, 712, 387, 550, 550, - -1, 400, -1, 704, 404, -1, 404, -1, 721, -1, - 398, -1, -1, -1, 614, -1, -1, -1, 618, 655, - 733, -1, 710, 614, -1, 726, -1, 618, -1, -1, - -1, -1, -1, -1, -1, -1, 749, -1, -1, -1, - -1, -1, -1, 744, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 655, -1, 693, -1, -1, - -1, -1, -1, -1, 655, -1, -1, -1, -1, -1, - 716, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 721, -1, -1, -1, -1, - -1, -1, 692, 693, -1, 695, -1, -1, -1, -1, - -1, 692, 693, -1, 695, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 716, -1, -1, -1, - -1, 721, -1, -1, -1, 716, -1, -1, -1, -1, - 721, -1, 732, -1, -1, -1, -1, -1, -1, 739, - -1, 732, -1, -1, -1, -1, -1, -1, 739, -1, - 750, -1, -1, -1, 754, -1, -1, -1, -1, 750, - 760, -1, -1, 754, -1, -1, -1, 0, -1, 760, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, + 314, 315, 316, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 349, -1, -1, -1, + -1, -1, -1, -1, -1, 349, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, + 364, 365, 366, -1, -1, -1, -1, -1, -1, -1, + -1, 375, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 363, 364, 365, 366, 367, -1, -1, -1, -1, -1, - -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, + -1, -1, -1, -1, 398, 399, 400, 401, 402, 403, + -1, -1, -1, -1, -1, -1, -1, -1, 412, -1, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 398, 399, 400, 401, 402, - 403, -1, -1, -1, -1, -1, -1, -1, -1, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, - 341, -1, 343, 344, -1, -1, -1, -1, 349, 350, - 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, -1, -1, - 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, - 339, -1, 341, -1, 343, 344, -1, -1, -1, -1, - 349, 350, 351, 352, 353, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, 364, 365, 366, 367, -1, - -1, -1, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 363, 364, 365, 366, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, + 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 398, 399, 400, 401, + 402, 403, -1, -1, -1, -1, -1, -1, -1, -1, + 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 363, 364, 365, 366, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 376, 377, 378, 379, + 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 398, 399, + 400, 401, 402, 403, -1, -1, -1, -1, -1, -1, + -1, -1, 412, -1, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, 341, -1, 343, -1, -1, -1, - -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 338, 339, -1, 341, -1, 343, -1, - -1, -1, -1, -1, 349, 350, 351, 352, 353, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, - 365, 366, 367, -1, -1, -1, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, + -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 338, 339, -1, 341, -1, - -1, -1, -1, -1, -1, -1, 349, 350, 351, 352, - 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 363, 364, 365, 366, 367, -1, -1, -1, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, + -1, -1, -1, -1, -1, 363, 364, 365, 366, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 376, 377, + 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 349, 350, - 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, -1, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, -1, -1, - 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, - 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, - -1, -1, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, -1, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, + 398, 399, 400, 401, 402, 403, -1, -1, -1, -1, + -1, -1, -1, -1, 412, -1, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, + 366, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 398, 399, 400, 401, 402, 403, -1, -1, -1, - -1, -1, -1, -1, -1, 412, -1, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, + -1, -1, 398, 399, 400, 401, 402, 403, -1, -1, + -1, -1, -1, -1, -1, -1, 412, -1, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 55, 56, 57, 58, 59, 60, -1, -1, 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, @@ -3117,115 +3380,67 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 349, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, - 365, 366, -1, -1, -1, -1, -1, -1, -1, -1, - 375, 376, 377, 378, 379, 380, 381, 382, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 398, 399, 400, 401, 402, 403, -1, - -1, -1, -1, -1, -1, -1, -1, 412, -1, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, + 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, + 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, -1, -1, -1, 343, 344, + -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, + 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 363, 364, 365, 366, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 404, + 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 398, 399, 400, 401, 402, - 403, -1, -1, -1, -1, -1, -1, -1, -1, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, + -1, 426, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, + -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 338, 339, -1, -1, + -1, 343, 344, -1, -1, -1, -1, -1, 350, 351, + 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, + 372, 373, 374, 375, 376, -1, -1, -1, -1, 381, + 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, + -1, -1, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, - 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, 403, -1, -1, -1, -1, -1, -1, -1, - -1, 412, -1, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + -1, -1, -1, -1, 426, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 59, 60, -1, -1, 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, @@ -3251,63 +3466,17 @@ static const yytype_int16 yycheck[] = 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, -1, -1, + 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, -1, -1, 342, -1, -1, -1, -1, -1, -1, + -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, + -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, - 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, - 399, 400, 401, 402, 403, -1, -1, -1, -1, -1, - -1, -1, -1, 412, -1, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 398, 399, 400, 401, 402, 403, -1, -1, -1, - -1, -1, -1, -1, -1, 412, -1, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 4, 5, + -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, + 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 426, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -3341,7 +3510,7 @@ static const yytype_int16 yycheck[] = 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 338, 339, -1, -1, -1, 343, 344, -1, + -1, -1, 338, 339, -1, -1, -1, 343, -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, @@ -3426,7 +3595,7 @@ static const yytype_int16 yycheck[] = 310, 311, 312, 313, 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, - -1, -1, -1, 343, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, @@ -3468,7 +3637,7 @@ static const yytype_int16 yycheck[] = 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, -1, 342, -1, -1, -1, -1, + -1, 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, @@ -3508,111 +3677,29 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 349, 350, 351, 352, 353, + 314, 315, 316, -1, -1, 319, 320, -1, -1, 413, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 427, 338, 339, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + 444, 445, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 476, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 487, -1, -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + -1, -1, 506, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 426, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 426, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, - -1, -1, 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, -1, -1, 319, 320, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 350, - 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, - 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 404, 405, 406, 407, 408, 409, 410, - 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 426, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, -1, -1, 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, -1, - -1, 319, 320, -1, -1, 413, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 427, - 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 350, 351, 352, 353, 444, 445, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, - -1, -1, -1, 381, 382, -1, -1, -1, 476, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 487, - -1, -1, -1, -1, -1, -1, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, -1, -1, 506, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 426, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, -1, -1, + -1, -1, -1, -1, -1, 589, 590, 591, 592, 593, + 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, -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, -1, -1, -1, -1, -1, -1, - -1, 589, 590, 591, 592, 593, 594, 595, 596, 597, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, @@ -3620,10 +3707,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 710 + -1, -1, -1, -1, -1, -1, -1, 711 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -3695,18 +3779,18 @@ static const yytype_int16 yystos[] = 339, 349, 349, 474, 339, 474, 347, 349, 349, 349, 349, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 348, 473, 346, 349, 344, 518, 532, 536, 541, - 515, 348, 515, 516, 515, 511, 375, 340, 449, 474, - 375, 472, 457, 513, 502, 346, 349, 344, 457, 457, - 457, 459, 459, 460, 460, 461, 461, 461, 461, 462, - 462, 463, 464, 465, 466, 467, 468, 471, 342, 375, - 554, 555, 529, 542, 518, 544, 474, 349, 474, 347, - 472, 472, 515, 344, 346, 344, 342, 349, 514, 474, - 339, 342, 346, 523, 474, 489, 496, 534, 383, 517, - 530, 545, 340, 340, 344, 515, 347, 475, 342, 555, - 344, 375, 340, 339, 534, 546, 547, 525, 526, 527, - 533, 537, 472, 340, 348, 519, 524, 528, 474, 349, - 340, 387, 521, 519, 343, 515, 340, 474, 524, 525, - 529, 538, 349, 344 + 515, 348, 344, 515, 516, 515, 511, 375, 340, 449, + 474, 375, 472, 457, 513, 502, 346, 349, 344, 457, + 457, 457, 459, 459, 460, 460, 461, 461, 461, 461, + 462, 462, 463, 464, 465, 466, 467, 468, 471, 342, + 375, 554, 555, 529, 542, 518, 544, 474, 349, 474, + 347, 472, 472, 515, 344, 346, 344, 342, 349, 514, + 474, 339, 342, 346, 523, 474, 489, 496, 534, 383, + 517, 530, 545, 340, 340, 344, 515, 347, 475, 342, + 555, 344, 375, 340, 339, 534, 546, 547, 525, 526, + 527, 533, 537, 472, 340, 348, 519, 524, 528, 474, + 349, 340, 387, 521, 519, 343, 515, 340, 474, 524, + 525, 529, 538, 349, 344 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -3765,15 +3849,15 @@ static const yytype_int16 yyr1[] = 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 507, 507, 507, 509, 508, 510, 508, 511, 511, 512, - 512, 513, 513, 514, 514, 515, 515, 515, 516, 516, - 517, 518, 518, 519, 519, 519, 519, 519, 519, 519, - 519, 520, 521, 522, 523, 521, 524, 524, 526, 525, - 527, 525, 528, 528, 529, 529, 530, 530, 531, 531, - 532, 533, 533, 534, 534, 535, 535, 537, 536, 538, - 538, 539, 539, 540, 540, 542, 541, 543, 541, 544, - 541, 545, 545, 546, 546, 547, 547, 548, 548, 548, - 548, 548, 548, 548, 548, 549, 549, 550, 550, 550, - 552, 551, 553, 554, 554, 555, 555 + 512, 513, 513, 514, 514, 515, 515, 515, 515, 516, + 516, 517, 518, 518, 519, 519, 519, 519, 519, 519, + 519, 519, 520, 521, 522, 523, 521, 524, 524, 526, + 525, 527, 525, 528, 528, 529, 529, 530, 530, 531, + 531, 532, 533, 533, 534, 534, 535, 535, 537, 536, + 538, 538, 539, 539, 540, 540, 542, 541, 543, 541, + 544, 541, 545, 545, 546, 546, 547, 547, 548, 548, + 548, 548, 548, 548, 548, 548, 549, 549, 550, 550, + 550, 552, 551, 553, 554, 554, 555, 555 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -3832,15 +3916,15 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, - 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, 2, 2, 2, 1, 2, 1, 1, 1, - 0, 3, 5, 1, 3, 1, 4 + 4, 1, 3, 1, 2, 1, 3, 4, 2, 1, + 3, 1, 1, 1, 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, 2, 2, 2, 1, 2, 1, 1, + 1, 0, 3, 5, 1, 3, 1, 4 }; @@ -4590,7 +4674,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 4594 "MachineIndependent/glslang_tab.cpp" +#line 4678 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ @@ -4598,7 +4682,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4602 "MachineIndependent/glslang_tab.cpp" +#line 4686 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ @@ -4608,7 +4692,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4612 "MachineIndependent/glslang_tab.cpp" +#line 4696 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ @@ -4616,7 +4700,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4620 "MachineIndependent/glslang_tab.cpp" +#line 4704 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ @@ -4624,7 +4708,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4628 "MachineIndependent/glslang_tab.cpp" +#line 4712 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ @@ -4633,7 +4717,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4637 "MachineIndependent/glslang_tab.cpp" +#line 4721 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ @@ -4641,7 +4725,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4645 "MachineIndependent/glslang_tab.cpp" +#line 4729 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ @@ -4649,7 +4733,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 4653 "MachineIndependent/glslang_tab.cpp" +#line 4737 "MachineIndependent/glslang_tab.cpp" break; case 10: /* primary_expression: INT32CONSTANT */ @@ -4658,7 +4742,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4662 "MachineIndependent/glslang_tab.cpp" +#line 4746 "MachineIndependent/glslang_tab.cpp" break; case 11: /* primary_expression: UINT32CONSTANT */ @@ -4667,7 +4751,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4671 "MachineIndependent/glslang_tab.cpp" +#line 4755 "MachineIndependent/glslang_tab.cpp" break; case 12: /* primary_expression: INT64CONSTANT */ @@ -4676,7 +4760,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4680 "MachineIndependent/glslang_tab.cpp" +#line 4764 "MachineIndependent/glslang_tab.cpp" break; case 13: /* primary_expression: UINT64CONSTANT */ @@ -4685,7 +4769,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4689 "MachineIndependent/glslang_tab.cpp" +#line 4773 "MachineIndependent/glslang_tab.cpp" break; case 14: /* primary_expression: INT16CONSTANT */ @@ -4694,7 +4778,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4698 "MachineIndependent/glslang_tab.cpp" +#line 4782 "MachineIndependent/glslang_tab.cpp" break; case 15: /* primary_expression: UINT16CONSTANT */ @@ -4703,7 +4787,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4707 "MachineIndependent/glslang_tab.cpp" +#line 4791 "MachineIndependent/glslang_tab.cpp" break; case 16: /* primary_expression: DOUBLECONSTANT */ @@ -4714,7 +4798,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4718 "MachineIndependent/glslang_tab.cpp" +#line 4802 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ @@ -4723,7 +4807,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4727 "MachineIndependent/glslang_tab.cpp" +#line 4811 "MachineIndependent/glslang_tab.cpp" break; case 18: /* postfix_expression: primary_expression */ @@ -4731,7 +4815,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4735 "MachineIndependent/glslang_tab.cpp" +#line 4819 "MachineIndependent/glslang_tab.cpp" break; case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ @@ -4739,7 +4823,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4743 "MachineIndependent/glslang_tab.cpp" +#line 4827 "MachineIndependent/glslang_tab.cpp" break; case 20: /* postfix_expression: function_call */ @@ -4747,7 +4831,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4751 "MachineIndependent/glslang_tab.cpp" +#line 4835 "MachineIndependent/glslang_tab.cpp" break; case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ @@ -4755,7 +4839,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4759 "MachineIndependent/glslang_tab.cpp" +#line 4843 "MachineIndependent/glslang_tab.cpp" break; case 22: /* postfix_expression: postfix_expression INC_OP */ @@ -4765,7 +4849,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4769 "MachineIndependent/glslang_tab.cpp" +#line 4853 "MachineIndependent/glslang_tab.cpp" break; case 23: /* postfix_expression: postfix_expression DEC_OP */ @@ -4775,7 +4859,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4779 "MachineIndependent/glslang_tab.cpp" +#line 4863 "MachineIndependent/glslang_tab.cpp" break; case 24: /* integer_expression: expression */ @@ -4784,7 +4868,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4788 "MachineIndependent/glslang_tab.cpp" +#line 4872 "MachineIndependent/glslang_tab.cpp" break; case 25: /* function_call: function_call_or_method */ @@ -4793,7 +4877,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 4797 "MachineIndependent/glslang_tab.cpp" +#line 4881 "MachineIndependent/glslang_tab.cpp" break; case 26: /* function_call_or_method: function_call_generic */ @@ -4801,7 +4885,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[0].interm); } -#line 4805 "MachineIndependent/glslang_tab.cpp" +#line 4889 "MachineIndependent/glslang_tab.cpp" break; case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ @@ -4810,7 +4894,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4814 "MachineIndependent/glslang_tab.cpp" +#line 4898 "MachineIndependent/glslang_tab.cpp" break; case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ @@ -4819,7 +4903,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4823 "MachineIndependent/glslang_tab.cpp" +#line 4907 "MachineIndependent/glslang_tab.cpp" break; case 29: /* function_call_header_no_parameters: function_call_header VOID */ @@ -4827,7 +4911,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[-1].interm); } -#line 4831 "MachineIndependent/glslang_tab.cpp" +#line 4915 "MachineIndependent/glslang_tab.cpp" break; case 30: /* function_call_header_no_parameters: function_call_header */ @@ -4835,7 +4919,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[0].interm); } -#line 4839 "MachineIndependent/glslang_tab.cpp" +#line 4923 "MachineIndependent/glslang_tab.cpp" break; case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ @@ -4847,7 +4931,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 4851 "MachineIndependent/glslang_tab.cpp" +#line 4935 "MachineIndependent/glslang_tab.cpp" break; case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ @@ -4859,7 +4943,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 4863 "MachineIndependent/glslang_tab.cpp" +#line 4947 "MachineIndependent/glslang_tab.cpp" break; case 33: /* function_call_header: function_identifier LEFT_PAREN */ @@ -4867,7 +4951,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[-1].interm); } -#line 4871 "MachineIndependent/glslang_tab.cpp" +#line 4955 "MachineIndependent/glslang_tab.cpp" break; case 34: /* function_identifier: type_specifier */ @@ -4877,7 +4961,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4881 "MachineIndependent/glslang_tab.cpp" +#line 4965 "MachineIndependent/glslang_tab.cpp" break; case 35: /* function_identifier: postfix_expression */ @@ -4909,7 +4993,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 4913 "MachineIndependent/glslang_tab.cpp" +#line 4997 "MachineIndependent/glslang_tab.cpp" break; case 36: /* function_identifier: non_uniform_qualifier */ @@ -4919,7 +5003,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4923 "MachineIndependent/glslang_tab.cpp" +#line 5007 "MachineIndependent/glslang_tab.cpp" break; case 37: /* unary_expression: postfix_expression */ @@ -4930,7 +5014,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 4934 "MachineIndependent/glslang_tab.cpp" +#line 5018 "MachineIndependent/glslang_tab.cpp" break; case 38: /* unary_expression: INC_OP unary_expression */ @@ -4939,7 +5023,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4943 "MachineIndependent/glslang_tab.cpp" +#line 5027 "MachineIndependent/glslang_tab.cpp" break; case 39: /* unary_expression: DEC_OP unary_expression */ @@ -4948,7 +5032,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4952 "MachineIndependent/glslang_tab.cpp" +#line 5036 "MachineIndependent/glslang_tab.cpp" break; case 40: /* unary_expression: unary_operator unary_expression */ @@ -4969,38 +5053,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 4973 "MachineIndependent/glslang_tab.cpp" +#line 5057 "MachineIndependent/glslang_tab.cpp" break; case 41: /* unary_operator: PLUS */ #line 606 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 4979 "MachineIndependent/glslang_tab.cpp" +#line 5063 "MachineIndependent/glslang_tab.cpp" break; case 42: /* unary_operator: DASH */ #line 607 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 4985 "MachineIndependent/glslang_tab.cpp" +#line 5069 "MachineIndependent/glslang_tab.cpp" break; case 43: /* unary_operator: BANG */ #line 608 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 4991 "MachineIndependent/glslang_tab.cpp" +#line 5075 "MachineIndependent/glslang_tab.cpp" break; case 44: /* unary_operator: TILDE */ #line 609 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 4998 "MachineIndependent/glslang_tab.cpp" +#line 5082 "MachineIndependent/glslang_tab.cpp" break; case 45: /* multiplicative_expression: unary_expression */ #line 615 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5004 "MachineIndependent/glslang_tab.cpp" +#line 5088 "MachineIndependent/glslang_tab.cpp" break; case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ @@ -5010,7 +5094,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5014 "MachineIndependent/glslang_tab.cpp" +#line 5098 "MachineIndependent/glslang_tab.cpp" break; case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ @@ -5020,7 +5104,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5024 "MachineIndependent/glslang_tab.cpp" +#line 5108 "MachineIndependent/glslang_tab.cpp" break; case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ @@ -5031,13 +5115,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5035 "MachineIndependent/glslang_tab.cpp" +#line 5119 "MachineIndependent/glslang_tab.cpp" break; case 49: /* additive_expression: multiplicative_expression */ #line 635 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5041 "MachineIndependent/glslang_tab.cpp" +#line 5125 "MachineIndependent/glslang_tab.cpp" break; case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ @@ -5047,7 +5131,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5051 "MachineIndependent/glslang_tab.cpp" +#line 5135 "MachineIndependent/glslang_tab.cpp" break; case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ @@ -5057,13 +5141,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5061 "MachineIndependent/glslang_tab.cpp" +#line 5145 "MachineIndependent/glslang_tab.cpp" break; case 52: /* shift_expression: additive_expression */ #line 649 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5067 "MachineIndependent/glslang_tab.cpp" +#line 5151 "MachineIndependent/glslang_tab.cpp" break; case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ @@ -5074,7 +5158,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5078 "MachineIndependent/glslang_tab.cpp" +#line 5162 "MachineIndependent/glslang_tab.cpp" break; case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ @@ -5085,13 +5169,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5089 "MachineIndependent/glslang_tab.cpp" +#line 5173 "MachineIndependent/glslang_tab.cpp" break; case 55: /* relational_expression: shift_expression */ #line 665 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5095 "MachineIndependent/glslang_tab.cpp" +#line 5179 "MachineIndependent/glslang_tab.cpp" break; case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ @@ -5101,7 +5185,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5105 "MachineIndependent/glslang_tab.cpp" +#line 5189 "MachineIndependent/glslang_tab.cpp" break; case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ @@ -5111,7 +5195,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5115 "MachineIndependent/glslang_tab.cpp" +#line 5199 "MachineIndependent/glslang_tab.cpp" break; case 58: /* relational_expression: relational_expression LE_OP shift_expression */ @@ -5121,7 +5205,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5125 "MachineIndependent/glslang_tab.cpp" +#line 5209 "MachineIndependent/glslang_tab.cpp" break; case 59: /* relational_expression: relational_expression GE_OP shift_expression */ @@ -5131,13 +5215,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5135 "MachineIndependent/glslang_tab.cpp" +#line 5219 "MachineIndependent/glslang_tab.cpp" break; case 60: /* equality_expression: relational_expression */ #line 689 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5141 "MachineIndependent/glslang_tab.cpp" +#line 5225 "MachineIndependent/glslang_tab.cpp" break; case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ @@ -5151,7 +5235,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5155 "MachineIndependent/glslang_tab.cpp" +#line 5239 "MachineIndependent/glslang_tab.cpp" break; case 62: /* equality_expression: equality_expression NE_OP relational_expression */ @@ -5165,13 +5249,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5169 "MachineIndependent/glslang_tab.cpp" +#line 5253 "MachineIndependent/glslang_tab.cpp" break; case 63: /* and_expression: equality_expression */ #line 711 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5175 "MachineIndependent/glslang_tab.cpp" +#line 5259 "MachineIndependent/glslang_tab.cpp" break; case 64: /* and_expression: and_expression AMPERSAND equality_expression */ @@ -5182,13 +5266,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5186 "MachineIndependent/glslang_tab.cpp" +#line 5270 "MachineIndependent/glslang_tab.cpp" break; case 65: /* exclusive_or_expression: and_expression */ #line 721 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5192 "MachineIndependent/glslang_tab.cpp" +#line 5276 "MachineIndependent/glslang_tab.cpp" break; case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ @@ -5199,13 +5283,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5203 "MachineIndependent/glslang_tab.cpp" +#line 5287 "MachineIndependent/glslang_tab.cpp" break; case 67: /* inclusive_or_expression: exclusive_or_expression */ #line 731 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5209 "MachineIndependent/glslang_tab.cpp" +#line 5293 "MachineIndependent/glslang_tab.cpp" break; case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ @@ -5216,13 +5300,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5220 "MachineIndependent/glslang_tab.cpp" +#line 5304 "MachineIndependent/glslang_tab.cpp" break; case 69: /* logical_and_expression: inclusive_or_expression */ #line 741 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5226 "MachineIndependent/glslang_tab.cpp" +#line 5310 "MachineIndependent/glslang_tab.cpp" break; case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ @@ -5232,13 +5316,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5236 "MachineIndependent/glslang_tab.cpp" +#line 5320 "MachineIndependent/glslang_tab.cpp" break; case 71: /* logical_xor_expression: logical_and_expression */ #line 750 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5242 "MachineIndependent/glslang_tab.cpp" +#line 5326 "MachineIndependent/glslang_tab.cpp" break; case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ @@ -5248,13 +5332,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5252 "MachineIndependent/glslang_tab.cpp" +#line 5336 "MachineIndependent/glslang_tab.cpp" break; case 73: /* logical_or_expression: logical_xor_expression */ #line 759 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5258 "MachineIndependent/glslang_tab.cpp" +#line 5342 "MachineIndependent/glslang_tab.cpp" break; case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ @@ -5264,13 +5348,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5268 "MachineIndependent/glslang_tab.cpp" +#line 5352 "MachineIndependent/glslang_tab.cpp" break; case 75: /* conditional_expression: logical_or_expression */ #line 768 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5274 "MachineIndependent/glslang_tab.cpp" +#line 5358 "MachineIndependent/glslang_tab.cpp" break; case 76: /* $@1: %empty */ @@ -5278,7 +5362,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { ++parseContext.controlFlowNestingLevel; } -#line 5282 "MachineIndependent/glslang_tab.cpp" +#line 5366 "MachineIndependent/glslang_tab.cpp" break; case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ @@ -5295,13 +5379,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5299 "MachineIndependent/glslang_tab.cpp" +#line 5383 "MachineIndependent/glslang_tab.cpp" break; case 78: /* assignment_expression: conditional_expression */ #line 787 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5305 "MachineIndependent/glslang_tab.cpp" +#line 5389 "MachineIndependent/glslang_tab.cpp" break; case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ @@ -5319,7 +5403,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 5323 "MachineIndependent/glslang_tab.cpp" +#line 5407 "MachineIndependent/glslang_tab.cpp" break; case 80: /* assignment_operator: EQUAL */ @@ -5328,7 +5412,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 5332 "MachineIndependent/glslang_tab.cpp" +#line 5416 "MachineIndependent/glslang_tab.cpp" break; case 81: /* assignment_operator: MUL_ASSIGN */ @@ -5337,7 +5421,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 5341 "MachineIndependent/glslang_tab.cpp" +#line 5425 "MachineIndependent/glslang_tab.cpp" break; case 82: /* assignment_operator: DIV_ASSIGN */ @@ -5346,7 +5430,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 5350 "MachineIndependent/glslang_tab.cpp" +#line 5434 "MachineIndependent/glslang_tab.cpp" break; case 83: /* assignment_operator: MOD_ASSIGN */ @@ -5356,7 +5440,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 5360 "MachineIndependent/glslang_tab.cpp" +#line 5444 "MachineIndependent/glslang_tab.cpp" break; case 84: /* assignment_operator: ADD_ASSIGN */ @@ -5365,7 +5449,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5369 "MachineIndependent/glslang_tab.cpp" +#line 5453 "MachineIndependent/glslang_tab.cpp" break; case 85: /* assignment_operator: SUB_ASSIGN */ @@ -5374,7 +5458,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5378 "MachineIndependent/glslang_tab.cpp" +#line 5462 "MachineIndependent/glslang_tab.cpp" break; case 86: /* assignment_operator: LEFT_ASSIGN */ @@ -5383,7 +5467,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5387 "MachineIndependent/glslang_tab.cpp" +#line 5471 "MachineIndependent/glslang_tab.cpp" break; case 87: /* assignment_operator: RIGHT_ASSIGN */ @@ -5392,7 +5476,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5396 "MachineIndependent/glslang_tab.cpp" +#line 5480 "MachineIndependent/glslang_tab.cpp" break; case 88: /* assignment_operator: AND_ASSIGN */ @@ -5401,7 +5485,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5405 "MachineIndependent/glslang_tab.cpp" +#line 5489 "MachineIndependent/glslang_tab.cpp" break; case 89: /* assignment_operator: XOR_ASSIGN */ @@ -5410,7 +5494,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 5414 "MachineIndependent/glslang_tab.cpp" +#line 5498 "MachineIndependent/glslang_tab.cpp" break; case 90: /* assignment_operator: OR_ASSIGN */ @@ -5419,7 +5503,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 5423 "MachineIndependent/glslang_tab.cpp" +#line 5507 "MachineIndependent/glslang_tab.cpp" break; case 91: /* expression: assignment_expression */ @@ -5427,7 +5511,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5431 "MachineIndependent/glslang_tab.cpp" +#line 5515 "MachineIndependent/glslang_tab.cpp" break; case 92: /* expression: expression COMMA assignment_expression */ @@ -5440,7 +5524,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5444 "MachineIndependent/glslang_tab.cpp" +#line 5528 "MachineIndependent/glslang_tab.cpp" break; case 93: /* constant_expression: conditional_expression */ @@ -5449,7 +5533,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5453 "MachineIndependent/glslang_tab.cpp" +#line 5537 "MachineIndependent/glslang_tab.cpp" break; case 94: /* declaration: function_prototype SEMICOLON */ @@ -5459,7 +5543,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 5463 "MachineIndependent/glslang_tab.cpp" +#line 5547 "MachineIndependent/glslang_tab.cpp" break; case 95: /* declaration: init_declarator_list SEMICOLON */ @@ -5469,7 +5553,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence); (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode; } -#line 5473 "MachineIndependent/glslang_tab.cpp" +#line 5557 "MachineIndependent/glslang_tab.cpp" break; case 96: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ @@ -5481,7 +5565,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 5485 "MachineIndependent/glslang_tab.cpp" +#line 5569 "MachineIndependent/glslang_tab.cpp" break; case 97: /* declaration: block_structure SEMICOLON */ @@ -5490,7 +5574,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 5494 "MachineIndependent/glslang_tab.cpp" +#line 5578 "MachineIndependent/glslang_tab.cpp" break; case 98: /* declaration: block_structure IDENTIFIER SEMICOLON */ @@ -5499,7 +5583,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5503 "MachineIndependent/glslang_tab.cpp" +#line 5587 "MachineIndependent/glslang_tab.cpp" break; case 99: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ @@ -5508,7 +5592,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 5512 "MachineIndependent/glslang_tab.cpp" +#line 5596 "MachineIndependent/glslang_tab.cpp" break; case 100: /* declaration: type_qualifier SEMICOLON */ @@ -5518,7 +5602,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 5522 "MachineIndependent/glslang_tab.cpp" +#line 5606 "MachineIndependent/glslang_tab.cpp" break; case 101: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ @@ -5528,7 +5612,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5532 "MachineIndependent/glslang_tab.cpp" +#line 5616 "MachineIndependent/glslang_tab.cpp" break; case 102: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ @@ -5539,13 +5623,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 5543 "MachineIndependent/glslang_tab.cpp" +#line 5627 "MachineIndependent/glslang_tab.cpp" break; case 103: /* $@2: %empty */ #line 921 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 5549 "MachineIndependent/glslang_tab.cpp" +#line 5633 "MachineIndependent/glslang_tab.cpp" break; case 104: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ @@ -5559,7 +5643,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 5563 "MachineIndependent/glslang_tab.cpp" +#line 5647 "MachineIndependent/glslang_tab.cpp" break; case 105: /* identifier_list: COMMA IDENTIFIER */ @@ -5568,7 +5652,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5572 "MachineIndependent/glslang_tab.cpp" +#line 5656 "MachineIndependent/glslang_tab.cpp" break; case 106: /* identifier_list: identifier_list COMMA IDENTIFIER */ @@ -5577,7 +5661,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5581 "MachineIndependent/glslang_tab.cpp" +#line 5665 "MachineIndependent/glslang_tab.cpp" break; case 107: /* function_prototype: function_declarator RIGHT_PAREN */ @@ -5586,7 +5670,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5590 "MachineIndependent/glslang_tab.cpp" +#line 5674 "MachineIndependent/glslang_tab.cpp" break; case 108: /* function_declarator: function_header */ @@ -5594,7 +5678,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5598 "MachineIndependent/glslang_tab.cpp" +#line 5682 "MachineIndependent/glslang_tab.cpp" break; case 109: /* function_declarator: function_header_with_parameters */ @@ -5602,7 +5686,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5606 "MachineIndependent/glslang_tab.cpp" +#line 5690 "MachineIndependent/glslang_tab.cpp" break; case 110: /* function_header_with_parameters: function_header parameter_declaration */ @@ -5615,7 +5699,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 5619 "MachineIndependent/glslang_tab.cpp" +#line 5703 "MachineIndependent/glslang_tab.cpp" break; case 111: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ @@ -5637,7 +5721,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5641 "MachineIndependent/glslang_tab.cpp" +#line 5725 "MachineIndependent/glslang_tab.cpp" break; case 112: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ @@ -5661,7 +5745,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5665 "MachineIndependent/glslang_tab.cpp" +#line 5749 "MachineIndependent/glslang_tab.cpp" break; case 113: /* parameter_declarator: type_specifier IDENTIFIER */ @@ -5681,7 +5765,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5685 "MachineIndependent/glslang_tab.cpp" +#line 5769 "MachineIndependent/glslang_tab.cpp" break; case 114: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ @@ -5705,7 +5789,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5709 "MachineIndependent/glslang_tab.cpp" +#line 5793 "MachineIndependent/glslang_tab.cpp" break; case 115: /* parameter_declaration: type_qualifier parameter_declarator */ @@ -5721,7 +5805,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5725 "MachineIndependent/glslang_tab.cpp" +#line 5809 "MachineIndependent/glslang_tab.cpp" break; case 116: /* parameter_declaration: parameter_declarator */ @@ -5733,7 +5817,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5737 "MachineIndependent/glslang_tab.cpp" +#line 5821 "MachineIndependent/glslang_tab.cpp" break; case 117: /* parameter_declaration: type_qualifier parameter_type_specifier */ @@ -5748,7 +5832,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5752 "MachineIndependent/glslang_tab.cpp" +#line 5836 "MachineIndependent/glslang_tab.cpp" break; case 118: /* parameter_declaration: parameter_type_specifier */ @@ -5760,7 +5844,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5764 "MachineIndependent/glslang_tab.cpp" +#line 5848 "MachineIndependent/glslang_tab.cpp" break; case 119: /* parameter_type_specifier: type_specifier */ @@ -5771,7 +5855,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5775 "MachineIndependent/glslang_tab.cpp" +#line 5859 "MachineIndependent/glslang_tab.cpp" break; case 120: /* init_declarator_list: single_declaration */ @@ -5779,7 +5863,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[0].interm); } -#line 5783 "MachineIndependent/glslang_tab.cpp" +#line 5867 "MachineIndependent/glslang_tab.cpp" break; case 121: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ @@ -5788,7 +5872,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 5792 "MachineIndependent/glslang_tab.cpp" +#line 5876 "MachineIndependent/glslang_tab.cpp" break; case 122: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ @@ -5797,7 +5881,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 5801 "MachineIndependent/glslang_tab.cpp" +#line 5885 "MachineIndependent/glslang_tab.cpp" break; case 123: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ @@ -5807,7 +5891,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5811 "MachineIndependent/glslang_tab.cpp" +#line 5895 "MachineIndependent/glslang_tab.cpp" break; case 124: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ @@ -5817,7 +5901,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5821 "MachineIndependent/glslang_tab.cpp" +#line 5905 "MachineIndependent/glslang_tab.cpp" break; case 125: /* single_declaration: fully_specified_type */ @@ -5829,7 +5913,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 5833 "MachineIndependent/glslang_tab.cpp" +#line 5917 "MachineIndependent/glslang_tab.cpp" break; case 126: /* single_declaration: fully_specified_type IDENTIFIER */ @@ -5839,7 +5923,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 5843 "MachineIndependent/glslang_tab.cpp" +#line 5927 "MachineIndependent/glslang_tab.cpp" break; case 127: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ @@ -5849,7 +5933,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 5853 "MachineIndependent/glslang_tab.cpp" +#line 5937 "MachineIndependent/glslang_tab.cpp" break; case 128: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ @@ -5859,7 +5943,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5863 "MachineIndependent/glslang_tab.cpp" +#line 5947 "MachineIndependent/glslang_tab.cpp" break; case 129: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ @@ -5869,7 +5953,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5873 "MachineIndependent/glslang_tab.cpp" +#line 5957 "MachineIndependent/glslang_tab.cpp" break; case 130: /* fully_specified_type: type_specifier */ @@ -5884,7 +5968,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 5888 "MachineIndependent/glslang_tab.cpp" +#line 5972 "MachineIndependent/glslang_tab.cpp" break; case 131: /* fully_specified_type: type_qualifier type_specifier */ @@ -5913,7 +5997,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 5917 "MachineIndependent/glslang_tab.cpp" +#line 6001 "MachineIndependent/glslang_tab.cpp" break; case 132: /* invariant_qualifier: INVARIANT */ @@ -5924,7 +6008,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 5928 "MachineIndependent/glslang_tab.cpp" +#line 6012 "MachineIndependent/glslang_tab.cpp" break; case 133: /* interpolation_qualifier: SMOOTH */ @@ -5936,7 +6020,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 5940 "MachineIndependent/glslang_tab.cpp" +#line 6024 "MachineIndependent/glslang_tab.cpp" break; case 134: /* interpolation_qualifier: FLAT */ @@ -5948,7 +6032,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 5952 "MachineIndependent/glslang_tab.cpp" +#line 6036 "MachineIndependent/glslang_tab.cpp" break; case 135: /* interpolation_qualifier: NOPERSPECTIVE */ @@ -5960,7 +6044,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 5964 "MachineIndependent/glslang_tab.cpp" +#line 6048 "MachineIndependent/glslang_tab.cpp" break; case 136: /* interpolation_qualifier: EXPLICITINTERPAMD */ @@ -5972,7 +6056,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 5976 "MachineIndependent/glslang_tab.cpp" +#line 6060 "MachineIndependent/glslang_tab.cpp" break; case 137: /* interpolation_qualifier: PERVERTEXNV */ @@ -5985,7 +6069,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 5989 "MachineIndependent/glslang_tab.cpp" +#line 6073 "MachineIndependent/glslang_tab.cpp" break; case 138: /* interpolation_qualifier: PERPRIMITIVENV */ @@ -6000,7 +6084,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6004 "MachineIndependent/glslang_tab.cpp" +#line 6088 "MachineIndependent/glslang_tab.cpp" break; case 139: /* interpolation_qualifier: PERVIEWNV */ @@ -6012,7 +6096,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 6016 "MachineIndependent/glslang_tab.cpp" +#line 6100 "MachineIndependent/glslang_tab.cpp" break; case 140: /* interpolation_qualifier: PERTASKNV */ @@ -6024,7 +6108,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 6028 "MachineIndependent/glslang_tab.cpp" +#line 6112 "MachineIndependent/glslang_tab.cpp" break; case 141: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ @@ -6032,7 +6116,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 6036 "MachineIndependent/glslang_tab.cpp" +#line 6120 "MachineIndependent/glslang_tab.cpp" break; case 142: /* layout_qualifier_id_list: layout_qualifier_id */ @@ -6040,7 +6124,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6044 "MachineIndependent/glslang_tab.cpp" +#line 6128 "MachineIndependent/glslang_tab.cpp" break; case 143: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ @@ -6050,7 +6134,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 6054 "MachineIndependent/glslang_tab.cpp" +#line 6138 "MachineIndependent/glslang_tab.cpp" break; case 144: /* layout_qualifier_id: IDENTIFIER */ @@ -6059,7 +6143,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 6063 "MachineIndependent/glslang_tab.cpp" +#line 6147 "MachineIndependent/glslang_tab.cpp" break; case 145: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ @@ -6068,7 +6152,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 6072 "MachineIndependent/glslang_tab.cpp" +#line 6156 "MachineIndependent/glslang_tab.cpp" break; case 146: /* layout_qualifier_id: SHARED */ @@ -6078,7 +6162,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 6082 "MachineIndependent/glslang_tab.cpp" +#line 6166 "MachineIndependent/glslang_tab.cpp" break; case 147: /* precise_qualifier: PRECISE */ @@ -6089,7 +6173,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 6093 "MachineIndependent/glslang_tab.cpp" +#line 6177 "MachineIndependent/glslang_tab.cpp" break; case 148: /* type_qualifier: single_type_qualifier */ @@ -6097,7 +6181,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6101 "MachineIndependent/glslang_tab.cpp" +#line 6185 "MachineIndependent/glslang_tab.cpp" break; case 149: /* type_qualifier: type_qualifier single_type_qualifier */ @@ -6110,7 +6194,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 6114 "MachineIndependent/glslang_tab.cpp" +#line 6198 "MachineIndependent/glslang_tab.cpp" break; case 150: /* single_type_qualifier: storage_qualifier */ @@ -6118,7 +6202,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6122 "MachineIndependent/glslang_tab.cpp" +#line 6206 "MachineIndependent/glslang_tab.cpp" break; case 151: /* single_type_qualifier: layout_qualifier */ @@ -6126,7 +6210,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6130 "MachineIndependent/glslang_tab.cpp" +#line 6214 "MachineIndependent/glslang_tab.cpp" break; case 152: /* single_type_qualifier: precision_qualifier */ @@ -6135,7 +6219,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6139 "MachineIndependent/glslang_tab.cpp" +#line 6223 "MachineIndependent/glslang_tab.cpp" break; case 153: /* single_type_qualifier: interpolation_qualifier */ @@ -6144,7 +6228,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6148 "MachineIndependent/glslang_tab.cpp" +#line 6232 "MachineIndependent/glslang_tab.cpp" break; case 154: /* single_type_qualifier: invariant_qualifier */ @@ -6153,7 +6237,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6157 "MachineIndependent/glslang_tab.cpp" +#line 6241 "MachineIndependent/glslang_tab.cpp" break; case 155: /* single_type_qualifier: precise_qualifier */ @@ -6162,7 +6246,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6166 "MachineIndependent/glslang_tab.cpp" +#line 6250 "MachineIndependent/glslang_tab.cpp" break; case 156: /* single_type_qualifier: non_uniform_qualifier */ @@ -6170,7 +6254,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6174 "MachineIndependent/glslang_tab.cpp" +#line 6258 "MachineIndependent/glslang_tab.cpp" break; case 157: /* storage_qualifier: CONST */ @@ -6179,7 +6263,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 6183 "MachineIndependent/glslang_tab.cpp" +#line 6267 "MachineIndependent/glslang_tab.cpp" break; case 158: /* storage_qualifier: INOUT */ @@ -6189,7 +6273,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 6193 "MachineIndependent/glslang_tab.cpp" +#line 6277 "MachineIndependent/glslang_tab.cpp" break; case 159: /* storage_qualifier: IN */ @@ -6200,7 +6284,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 6204 "MachineIndependent/glslang_tab.cpp" +#line 6288 "MachineIndependent/glslang_tab.cpp" break; case 160: /* storage_qualifier: OUT */ @@ -6211,7 +6295,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 6215 "MachineIndependent/glslang_tab.cpp" +#line 6299 "MachineIndependent/glslang_tab.cpp" break; case 161: /* storage_qualifier: CENTROID */ @@ -6223,7 +6307,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 6227 "MachineIndependent/glslang_tab.cpp" +#line 6311 "MachineIndependent/glslang_tab.cpp" break; case 162: /* storage_qualifier: UNIFORM */ @@ -6233,7 +6317,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 6237 "MachineIndependent/glslang_tab.cpp" +#line 6321 "MachineIndependent/glslang_tab.cpp" break; case 163: /* storage_qualifier: SHARED */ @@ -6246,7 +6330,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 6250 "MachineIndependent/glslang_tab.cpp" +#line 6334 "MachineIndependent/glslang_tab.cpp" break; case 164: /* storage_qualifier: BUFFER */ @@ -6256,7 +6340,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 6260 "MachineIndependent/glslang_tab.cpp" +#line 6344 "MachineIndependent/glslang_tab.cpp" break; case 165: /* storage_qualifier: ATTRIBUTE */ @@ -6273,7 +6357,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6277 "MachineIndependent/glslang_tab.cpp" +#line 6361 "MachineIndependent/glslang_tab.cpp" break; case 166: /* storage_qualifier: VARYING */ @@ -6292,7 +6376,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6296 "MachineIndependent/glslang_tab.cpp" +#line 6380 "MachineIndependent/glslang_tab.cpp" break; case 167: /* storage_qualifier: PATCH */ @@ -6303,7 +6387,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 6307 "MachineIndependent/glslang_tab.cpp" +#line 6391 "MachineIndependent/glslang_tab.cpp" break; case 168: /* storage_qualifier: SAMPLE */ @@ -6313,7 +6397,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 6317 "MachineIndependent/glslang_tab.cpp" +#line 6401 "MachineIndependent/glslang_tab.cpp" break; case 169: /* storage_qualifier: HITATTRNV */ @@ -6326,7 +6410,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6330 "MachineIndependent/glslang_tab.cpp" +#line 6414 "MachineIndependent/glslang_tab.cpp" break; case 170: /* storage_qualifier: HITATTREXT */ @@ -6339,7 +6423,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6343 "MachineIndependent/glslang_tab.cpp" +#line 6427 "MachineIndependent/glslang_tab.cpp" break; case 171: /* storage_qualifier: PAYLOADNV */ @@ -6352,7 +6436,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6356 "MachineIndependent/glslang_tab.cpp" +#line 6440 "MachineIndependent/glslang_tab.cpp" break; case 172: /* storage_qualifier: PAYLOADEXT */ @@ -6365,7 +6449,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6369 "MachineIndependent/glslang_tab.cpp" +#line 6453 "MachineIndependent/glslang_tab.cpp" break; case 173: /* storage_qualifier: PAYLOADINNV */ @@ -6378,7 +6462,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6382 "MachineIndependent/glslang_tab.cpp" +#line 6466 "MachineIndependent/glslang_tab.cpp" break; case 174: /* storage_qualifier: PAYLOADINEXT */ @@ -6391,7 +6475,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6395 "MachineIndependent/glslang_tab.cpp" +#line 6479 "MachineIndependent/glslang_tab.cpp" break; case 175: /* storage_qualifier: CALLDATANV */ @@ -6404,7 +6488,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6408 "MachineIndependent/glslang_tab.cpp" +#line 6492 "MachineIndependent/glslang_tab.cpp" break; case 176: /* storage_qualifier: CALLDATAEXT */ @@ -6417,7 +6501,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6421 "MachineIndependent/glslang_tab.cpp" +#line 6505 "MachineIndependent/glslang_tab.cpp" break; case 177: /* storage_qualifier: CALLDATAINNV */ @@ -6429,7 +6513,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6433 "MachineIndependent/glslang_tab.cpp" +#line 6517 "MachineIndependent/glslang_tab.cpp" break; case 178: /* storage_qualifier: CALLDATAINEXT */ @@ -6441,7 +6525,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6445 "MachineIndependent/glslang_tab.cpp" +#line 6529 "MachineIndependent/glslang_tab.cpp" break; case 179: /* storage_qualifier: COHERENT */ @@ -6450,7 +6534,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 6454 "MachineIndependent/glslang_tab.cpp" +#line 6538 "MachineIndependent/glslang_tab.cpp" break; case 180: /* storage_qualifier: DEVICECOHERENT */ @@ -6460,7 +6544,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 6464 "MachineIndependent/glslang_tab.cpp" +#line 6548 "MachineIndependent/glslang_tab.cpp" break; case 181: /* storage_qualifier: QUEUEFAMILYCOHERENT */ @@ -6470,7 +6554,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 6474 "MachineIndependent/glslang_tab.cpp" +#line 6558 "MachineIndependent/glslang_tab.cpp" break; case 182: /* storage_qualifier: WORKGROUPCOHERENT */ @@ -6480,7 +6564,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 6484 "MachineIndependent/glslang_tab.cpp" +#line 6568 "MachineIndependent/glslang_tab.cpp" break; case 183: /* storage_qualifier: SUBGROUPCOHERENT */ @@ -6490,7 +6574,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 6494 "MachineIndependent/glslang_tab.cpp" +#line 6578 "MachineIndependent/glslang_tab.cpp" break; case 184: /* storage_qualifier: NONPRIVATE */ @@ -6500,7 +6584,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 6504 "MachineIndependent/glslang_tab.cpp" +#line 6588 "MachineIndependent/glslang_tab.cpp" break; case 185: /* storage_qualifier: SHADERCALLCOHERENT */ @@ -6510,7 +6594,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 6514 "MachineIndependent/glslang_tab.cpp" +#line 6598 "MachineIndependent/glslang_tab.cpp" break; case 186: /* storage_qualifier: VOLATILE */ @@ -6519,7 +6603,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 6523 "MachineIndependent/glslang_tab.cpp" +#line 6607 "MachineIndependent/glslang_tab.cpp" break; case 187: /* storage_qualifier: RESTRICT */ @@ -6528,7 +6612,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 6532 "MachineIndependent/glslang_tab.cpp" +#line 6616 "MachineIndependent/glslang_tab.cpp" break; case 188: /* storage_qualifier: READONLY */ @@ -6537,7 +6621,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 6541 "MachineIndependent/glslang_tab.cpp" +#line 6625 "MachineIndependent/glslang_tab.cpp" break; case 189: /* storage_qualifier: WRITEONLY */ @@ -6546,7 +6630,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 6550 "MachineIndependent/glslang_tab.cpp" +#line 6634 "MachineIndependent/glslang_tab.cpp" break; case 190: /* storage_qualifier: SUBROUTINE */ @@ -6557,7 +6641,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 6561 "MachineIndependent/glslang_tab.cpp" +#line 6645 "MachineIndependent/glslang_tab.cpp" break; case 191: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ @@ -6568,7 +6652,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 6572 "MachineIndependent/glslang_tab.cpp" +#line 6656 "MachineIndependent/glslang_tab.cpp" break; case 192: /* non_uniform_qualifier: NONUNIFORM */ @@ -6577,7 +6661,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 6581 "MachineIndependent/glslang_tab.cpp" +#line 6665 "MachineIndependent/glslang_tab.cpp" break; case 193: /* type_name_list: IDENTIFIER */ @@ -6585,7 +6669,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { // TODO } -#line 6589 "MachineIndependent/glslang_tab.cpp" +#line 6673 "MachineIndependent/glslang_tab.cpp" break; case 194: /* type_name_list: type_name_list COMMA IDENTIFIER */ @@ -6595,7 +6679,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); // 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 6599 "MachineIndependent/glslang_tab.cpp" +#line 6683 "MachineIndependent/glslang_tab.cpp" break; case 195: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ @@ -6605,7 +6689,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 6609 "MachineIndependent/glslang_tab.cpp" +#line 6693 "MachineIndependent/glslang_tab.cpp" break; case 196: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ @@ -6617,7 +6701,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 6621 "MachineIndependent/glslang_tab.cpp" +#line 6705 "MachineIndependent/glslang_tab.cpp" break; case 197: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ @@ -6627,7 +6711,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 6631 "MachineIndependent/glslang_tab.cpp" +#line 6715 "MachineIndependent/glslang_tab.cpp" break; case 198: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ @@ -6640,7 +6724,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6644 "MachineIndependent/glslang_tab.cpp" +#line 6728 "MachineIndependent/glslang_tab.cpp" break; case 199: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ @@ -6649,7 +6733,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 6653 "MachineIndependent/glslang_tab.cpp" +#line 6737 "MachineIndependent/glslang_tab.cpp" break; case 200: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ @@ -6661,7 +6745,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6665 "MachineIndependent/glslang_tab.cpp" +#line 6749 "MachineIndependent/glslang_tab.cpp" break; case 201: /* type_parameter_specifier_opt: type_parameter_specifier */ @@ -6669,7 +6753,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 6673 "MachineIndependent/glslang_tab.cpp" +#line 6757 "MachineIndependent/glslang_tab.cpp" break; case 202: /* type_parameter_specifier_opt: %empty */ @@ -6677,7 +6761,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.typeParameters) = 0; } -#line 6681 "MachineIndependent/glslang_tab.cpp" +#line 6765 "MachineIndependent/glslang_tab.cpp" break; case 203: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ @@ -6685,7 +6769,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 6689 "MachineIndependent/glslang_tab.cpp" +#line 6773 "MachineIndependent/glslang_tab.cpp" break; case 204: /* type_parameter_specifier_list: unary_expression */ @@ -6697,7 +6781,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6701 "MachineIndependent/glslang_tab.cpp" +#line 6785 "MachineIndependent/glslang_tab.cpp" break; case 205: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ @@ -6709,7 +6793,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6713 "MachineIndependent/glslang_tab.cpp" +#line 6797 "MachineIndependent/glslang_tab.cpp" break; case 206: /* type_specifier_nonarray: VOID */ @@ -6718,7 +6802,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 6722 "MachineIndependent/glslang_tab.cpp" +#line 6806 "MachineIndependent/glslang_tab.cpp" break; case 207: /* type_specifier_nonarray: FLOAT */ @@ -6727,7 +6811,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6731 "MachineIndependent/glslang_tab.cpp" +#line 6815 "MachineIndependent/glslang_tab.cpp" break; case 208: /* type_specifier_nonarray: INT */ @@ -6736,7 +6820,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6740 "MachineIndependent/glslang_tab.cpp" +#line 6824 "MachineIndependent/glslang_tab.cpp" break; case 209: /* type_specifier_nonarray: UINT */ @@ -6746,7 +6830,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6750 "MachineIndependent/glslang_tab.cpp" +#line 6834 "MachineIndependent/glslang_tab.cpp" break; case 210: /* type_specifier_nonarray: BOOL */ @@ -6755,7 +6839,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 6759 "MachineIndependent/glslang_tab.cpp" +#line 6843 "MachineIndependent/glslang_tab.cpp" break; case 211: /* type_specifier_nonarray: VEC2 */ @@ -6765,7 +6849,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6769 "MachineIndependent/glslang_tab.cpp" +#line 6853 "MachineIndependent/glslang_tab.cpp" break; case 212: /* type_specifier_nonarray: VEC3 */ @@ -6775,7 +6859,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6779 "MachineIndependent/glslang_tab.cpp" +#line 6863 "MachineIndependent/glslang_tab.cpp" break; case 213: /* type_specifier_nonarray: VEC4 */ @@ -6785,7 +6869,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6789 "MachineIndependent/glslang_tab.cpp" +#line 6873 "MachineIndependent/glslang_tab.cpp" break; case 214: /* type_specifier_nonarray: BVEC2 */ @@ -6795,7 +6879,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 6799 "MachineIndependent/glslang_tab.cpp" +#line 6883 "MachineIndependent/glslang_tab.cpp" break; case 215: /* type_specifier_nonarray: BVEC3 */ @@ -6805,7 +6889,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 6809 "MachineIndependent/glslang_tab.cpp" +#line 6893 "MachineIndependent/glslang_tab.cpp" break; case 216: /* type_specifier_nonarray: BVEC4 */ @@ -6815,7 +6899,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 6819 "MachineIndependent/glslang_tab.cpp" +#line 6903 "MachineIndependent/glslang_tab.cpp" break; case 217: /* type_specifier_nonarray: IVEC2 */ @@ -6825,7 +6909,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6829 "MachineIndependent/glslang_tab.cpp" +#line 6913 "MachineIndependent/glslang_tab.cpp" break; case 218: /* type_specifier_nonarray: IVEC3 */ @@ -6835,7 +6919,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6839 "MachineIndependent/glslang_tab.cpp" +#line 6923 "MachineIndependent/glslang_tab.cpp" break; case 219: /* type_specifier_nonarray: IVEC4 */ @@ -6845,7 +6929,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6849 "MachineIndependent/glslang_tab.cpp" +#line 6933 "MachineIndependent/glslang_tab.cpp" break; case 220: /* type_specifier_nonarray: UVEC2 */ @@ -6856,7 +6940,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6860 "MachineIndependent/glslang_tab.cpp" +#line 6944 "MachineIndependent/glslang_tab.cpp" break; case 221: /* type_specifier_nonarray: UVEC3 */ @@ -6867,7 +6951,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6871 "MachineIndependent/glslang_tab.cpp" +#line 6955 "MachineIndependent/glslang_tab.cpp" break; case 222: /* type_specifier_nonarray: UVEC4 */ @@ -6878,7 +6962,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6882 "MachineIndependent/glslang_tab.cpp" +#line 6966 "MachineIndependent/glslang_tab.cpp" break; case 223: /* type_specifier_nonarray: MAT2 */ @@ -6888,7 +6972,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6892 "MachineIndependent/glslang_tab.cpp" +#line 6976 "MachineIndependent/glslang_tab.cpp" break; case 224: /* type_specifier_nonarray: MAT3 */ @@ -6898,7 +6982,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6902 "MachineIndependent/glslang_tab.cpp" +#line 6986 "MachineIndependent/glslang_tab.cpp" break; case 225: /* type_specifier_nonarray: MAT4 */ @@ -6908,7 +6992,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6912 "MachineIndependent/glslang_tab.cpp" +#line 6996 "MachineIndependent/glslang_tab.cpp" break; case 226: /* type_specifier_nonarray: MAT2X2 */ @@ -6918,7 +7002,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6922 "MachineIndependent/glslang_tab.cpp" +#line 7006 "MachineIndependent/glslang_tab.cpp" break; case 227: /* type_specifier_nonarray: MAT2X3 */ @@ -6928,7 +7012,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 6932 "MachineIndependent/glslang_tab.cpp" +#line 7016 "MachineIndependent/glslang_tab.cpp" break; case 228: /* type_specifier_nonarray: MAT2X4 */ @@ -6938,7 +7022,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 6942 "MachineIndependent/glslang_tab.cpp" +#line 7026 "MachineIndependent/glslang_tab.cpp" break; case 229: /* type_specifier_nonarray: MAT3X2 */ @@ -6948,7 +7032,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 6952 "MachineIndependent/glslang_tab.cpp" +#line 7036 "MachineIndependent/glslang_tab.cpp" break; case 230: /* type_specifier_nonarray: MAT3X3 */ @@ -6958,7 +7042,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6962 "MachineIndependent/glslang_tab.cpp" +#line 7046 "MachineIndependent/glslang_tab.cpp" break; case 231: /* type_specifier_nonarray: MAT3X4 */ @@ -6968,7 +7052,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 6972 "MachineIndependent/glslang_tab.cpp" +#line 7056 "MachineIndependent/glslang_tab.cpp" break; case 232: /* type_specifier_nonarray: MAT4X2 */ @@ -6978,7 +7062,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 6982 "MachineIndependent/glslang_tab.cpp" +#line 7066 "MachineIndependent/glslang_tab.cpp" break; case 233: /* type_specifier_nonarray: MAT4X3 */ @@ -6988,7 +7072,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 6992 "MachineIndependent/glslang_tab.cpp" +#line 7076 "MachineIndependent/glslang_tab.cpp" break; case 234: /* type_specifier_nonarray: MAT4X4 */ @@ -6998,7 +7082,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7002 "MachineIndependent/glslang_tab.cpp" +#line 7086 "MachineIndependent/glslang_tab.cpp" break; case 235: /* type_specifier_nonarray: DOUBLE */ @@ -7010,7 +7094,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7014 "MachineIndependent/glslang_tab.cpp" +#line 7098 "MachineIndependent/glslang_tab.cpp" break; case 236: /* type_specifier_nonarray: FLOAT16_T */ @@ -7020,7 +7104,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 7024 "MachineIndependent/glslang_tab.cpp" +#line 7108 "MachineIndependent/glslang_tab.cpp" break; case 237: /* type_specifier_nonarray: FLOAT32_T */ @@ -7030,7 +7114,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7034 "MachineIndependent/glslang_tab.cpp" +#line 7118 "MachineIndependent/glslang_tab.cpp" break; case 238: /* type_specifier_nonarray: FLOAT64_T */ @@ -7040,7 +7124,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7044 "MachineIndependent/glslang_tab.cpp" +#line 7128 "MachineIndependent/glslang_tab.cpp" break; case 239: /* type_specifier_nonarray: INT8_T */ @@ -7050,7 +7134,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 7054 "MachineIndependent/glslang_tab.cpp" +#line 7138 "MachineIndependent/glslang_tab.cpp" break; case 240: /* type_specifier_nonarray: UINT8_T */ @@ -7060,7 +7144,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 7064 "MachineIndependent/glslang_tab.cpp" +#line 7148 "MachineIndependent/glslang_tab.cpp" break; case 241: /* type_specifier_nonarray: INT16_T */ @@ -7070,7 +7154,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 7074 "MachineIndependent/glslang_tab.cpp" +#line 7158 "MachineIndependent/glslang_tab.cpp" break; case 242: /* type_specifier_nonarray: UINT16_T */ @@ -7080,7 +7164,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 7084 "MachineIndependent/glslang_tab.cpp" +#line 7168 "MachineIndependent/glslang_tab.cpp" break; case 243: /* type_specifier_nonarray: INT32_T */ @@ -7090,7 +7174,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7094 "MachineIndependent/glslang_tab.cpp" +#line 7178 "MachineIndependent/glslang_tab.cpp" break; case 244: /* type_specifier_nonarray: UINT32_T */ @@ -7100,7 +7184,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 7104 "MachineIndependent/glslang_tab.cpp" +#line 7188 "MachineIndependent/glslang_tab.cpp" break; case 245: /* type_specifier_nonarray: INT64_T */ @@ -7110,7 +7194,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 7114 "MachineIndependent/glslang_tab.cpp" +#line 7198 "MachineIndependent/glslang_tab.cpp" break; case 246: /* type_specifier_nonarray: UINT64_T */ @@ -7120,7 +7204,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 7124 "MachineIndependent/glslang_tab.cpp" +#line 7208 "MachineIndependent/glslang_tab.cpp" break; case 247: /* type_specifier_nonarray: DVEC2 */ @@ -7133,7 +7217,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7137 "MachineIndependent/glslang_tab.cpp" +#line 7221 "MachineIndependent/glslang_tab.cpp" break; case 248: /* type_specifier_nonarray: DVEC3 */ @@ -7146,7 +7230,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7150 "MachineIndependent/glslang_tab.cpp" +#line 7234 "MachineIndependent/glslang_tab.cpp" break; case 249: /* type_specifier_nonarray: DVEC4 */ @@ -7159,7 +7243,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7163 "MachineIndependent/glslang_tab.cpp" +#line 7247 "MachineIndependent/glslang_tab.cpp" break; case 250: /* type_specifier_nonarray: F16VEC2 */ @@ -7170,7 +7254,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 7174 "MachineIndependent/glslang_tab.cpp" +#line 7258 "MachineIndependent/glslang_tab.cpp" break; case 251: /* type_specifier_nonarray: F16VEC3 */ @@ -7181,7 +7265,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 7185 "MachineIndependent/glslang_tab.cpp" +#line 7269 "MachineIndependent/glslang_tab.cpp" break; case 252: /* type_specifier_nonarray: F16VEC4 */ @@ -7192,7 +7276,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 7196 "MachineIndependent/glslang_tab.cpp" +#line 7280 "MachineIndependent/glslang_tab.cpp" break; case 253: /* type_specifier_nonarray: F32VEC2 */ @@ -7203,7 +7287,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 7207 "MachineIndependent/glslang_tab.cpp" +#line 7291 "MachineIndependent/glslang_tab.cpp" break; case 254: /* type_specifier_nonarray: F32VEC3 */ @@ -7214,7 +7298,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 7218 "MachineIndependent/glslang_tab.cpp" +#line 7302 "MachineIndependent/glslang_tab.cpp" break; case 255: /* type_specifier_nonarray: F32VEC4 */ @@ -7225,7 +7309,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7229 "MachineIndependent/glslang_tab.cpp" +#line 7313 "MachineIndependent/glslang_tab.cpp" break; case 256: /* type_specifier_nonarray: F64VEC2 */ @@ -7236,7 +7320,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7240 "MachineIndependent/glslang_tab.cpp" +#line 7324 "MachineIndependent/glslang_tab.cpp" break; case 257: /* type_specifier_nonarray: F64VEC3 */ @@ -7247,7 +7331,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7251 "MachineIndependent/glslang_tab.cpp" +#line 7335 "MachineIndependent/glslang_tab.cpp" break; case 258: /* type_specifier_nonarray: F64VEC4 */ @@ -7258,7 +7342,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7262 "MachineIndependent/glslang_tab.cpp" +#line 7346 "MachineIndependent/glslang_tab.cpp" break; case 259: /* type_specifier_nonarray: I8VEC2 */ @@ -7269,7 +7353,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 7273 "MachineIndependent/glslang_tab.cpp" +#line 7357 "MachineIndependent/glslang_tab.cpp" break; case 260: /* type_specifier_nonarray: I8VEC3 */ @@ -7280,7 +7364,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 7284 "MachineIndependent/glslang_tab.cpp" +#line 7368 "MachineIndependent/glslang_tab.cpp" break; case 261: /* type_specifier_nonarray: I8VEC4 */ @@ -7291,7 +7375,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 7295 "MachineIndependent/glslang_tab.cpp" +#line 7379 "MachineIndependent/glslang_tab.cpp" break; case 262: /* type_specifier_nonarray: I16VEC2 */ @@ -7302,7 +7386,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 7306 "MachineIndependent/glslang_tab.cpp" +#line 7390 "MachineIndependent/glslang_tab.cpp" break; case 263: /* type_specifier_nonarray: I16VEC3 */ @@ -7313,7 +7397,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 7317 "MachineIndependent/glslang_tab.cpp" +#line 7401 "MachineIndependent/glslang_tab.cpp" break; case 264: /* type_specifier_nonarray: I16VEC4 */ @@ -7324,7 +7408,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 7328 "MachineIndependent/glslang_tab.cpp" +#line 7412 "MachineIndependent/glslang_tab.cpp" break; case 265: /* type_specifier_nonarray: I32VEC2 */ @@ -7335,7 +7419,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 7339 "MachineIndependent/glslang_tab.cpp" +#line 7423 "MachineIndependent/glslang_tab.cpp" break; case 266: /* type_specifier_nonarray: I32VEC3 */ @@ -7346,7 +7430,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 7350 "MachineIndependent/glslang_tab.cpp" +#line 7434 "MachineIndependent/glslang_tab.cpp" break; case 267: /* type_specifier_nonarray: I32VEC4 */ @@ -7357,7 +7441,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 7361 "MachineIndependent/glslang_tab.cpp" +#line 7445 "MachineIndependent/glslang_tab.cpp" break; case 268: /* type_specifier_nonarray: I64VEC2 */ @@ -7368,7 +7452,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 7372 "MachineIndependent/glslang_tab.cpp" +#line 7456 "MachineIndependent/glslang_tab.cpp" break; case 269: /* type_specifier_nonarray: I64VEC3 */ @@ -7379,7 +7463,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 7383 "MachineIndependent/glslang_tab.cpp" +#line 7467 "MachineIndependent/glslang_tab.cpp" break; case 270: /* type_specifier_nonarray: I64VEC4 */ @@ -7390,7 +7474,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 7394 "MachineIndependent/glslang_tab.cpp" +#line 7478 "MachineIndependent/glslang_tab.cpp" break; case 271: /* type_specifier_nonarray: U8VEC2 */ @@ -7401,7 +7485,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 7405 "MachineIndependent/glslang_tab.cpp" +#line 7489 "MachineIndependent/glslang_tab.cpp" break; case 272: /* type_specifier_nonarray: U8VEC3 */ @@ -7412,7 +7496,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 7416 "MachineIndependent/glslang_tab.cpp" +#line 7500 "MachineIndependent/glslang_tab.cpp" break; case 273: /* type_specifier_nonarray: U8VEC4 */ @@ -7423,7 +7507,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 7427 "MachineIndependent/glslang_tab.cpp" +#line 7511 "MachineIndependent/glslang_tab.cpp" break; case 274: /* type_specifier_nonarray: U16VEC2 */ @@ -7434,7 +7518,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 7438 "MachineIndependent/glslang_tab.cpp" +#line 7522 "MachineIndependent/glslang_tab.cpp" break; case 275: /* type_specifier_nonarray: U16VEC3 */ @@ -7445,7 +7529,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 7449 "MachineIndependent/glslang_tab.cpp" +#line 7533 "MachineIndependent/glslang_tab.cpp" break; case 276: /* type_specifier_nonarray: U16VEC4 */ @@ -7456,7 +7540,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 7460 "MachineIndependent/glslang_tab.cpp" +#line 7544 "MachineIndependent/glslang_tab.cpp" break; case 277: /* type_specifier_nonarray: U32VEC2 */ @@ -7467,7 +7551,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7471 "MachineIndependent/glslang_tab.cpp" +#line 7555 "MachineIndependent/glslang_tab.cpp" break; case 278: /* type_specifier_nonarray: U32VEC3 */ @@ -7478,7 +7562,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7482 "MachineIndependent/glslang_tab.cpp" +#line 7566 "MachineIndependent/glslang_tab.cpp" break; case 279: /* type_specifier_nonarray: U32VEC4 */ @@ -7489,7 +7573,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7493 "MachineIndependent/glslang_tab.cpp" +#line 7577 "MachineIndependent/glslang_tab.cpp" break; case 280: /* type_specifier_nonarray: U64VEC2 */ @@ -7500,7 +7584,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 7504 "MachineIndependent/glslang_tab.cpp" +#line 7588 "MachineIndependent/glslang_tab.cpp" break; case 281: /* type_specifier_nonarray: U64VEC3 */ @@ -7511,7 +7595,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 7515 "MachineIndependent/glslang_tab.cpp" +#line 7599 "MachineIndependent/glslang_tab.cpp" break; case 282: /* type_specifier_nonarray: U64VEC4 */ @@ -7522,7 +7606,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 7526 "MachineIndependent/glslang_tab.cpp" +#line 7610 "MachineIndependent/glslang_tab.cpp" break; case 283: /* type_specifier_nonarray: DMAT2 */ @@ -7535,7 +7619,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7539 "MachineIndependent/glslang_tab.cpp" +#line 7623 "MachineIndependent/glslang_tab.cpp" break; case 284: /* type_specifier_nonarray: DMAT3 */ @@ -7548,7 +7632,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7552 "MachineIndependent/glslang_tab.cpp" +#line 7636 "MachineIndependent/glslang_tab.cpp" break; case 285: /* type_specifier_nonarray: DMAT4 */ @@ -7561,7 +7645,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7565 "MachineIndependent/glslang_tab.cpp" +#line 7649 "MachineIndependent/glslang_tab.cpp" break; case 286: /* type_specifier_nonarray: DMAT2X2 */ @@ -7574,7 +7658,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7578 "MachineIndependent/glslang_tab.cpp" +#line 7662 "MachineIndependent/glslang_tab.cpp" break; case 287: /* type_specifier_nonarray: DMAT2X3 */ @@ -7587,7 +7671,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7591 "MachineIndependent/glslang_tab.cpp" +#line 7675 "MachineIndependent/glslang_tab.cpp" break; case 288: /* type_specifier_nonarray: DMAT2X4 */ @@ -7600,7 +7684,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7604 "MachineIndependent/glslang_tab.cpp" +#line 7688 "MachineIndependent/glslang_tab.cpp" break; case 289: /* type_specifier_nonarray: DMAT3X2 */ @@ -7613,7 +7697,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7617 "MachineIndependent/glslang_tab.cpp" +#line 7701 "MachineIndependent/glslang_tab.cpp" break; case 290: /* type_specifier_nonarray: DMAT3X3 */ @@ -7626,7 +7710,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7630 "MachineIndependent/glslang_tab.cpp" +#line 7714 "MachineIndependent/glslang_tab.cpp" break; case 291: /* type_specifier_nonarray: DMAT3X4 */ @@ -7639,7 +7723,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7643 "MachineIndependent/glslang_tab.cpp" +#line 7727 "MachineIndependent/glslang_tab.cpp" break; case 292: /* type_specifier_nonarray: DMAT4X2 */ @@ -7652,7 +7736,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7656 "MachineIndependent/glslang_tab.cpp" +#line 7740 "MachineIndependent/glslang_tab.cpp" break; case 293: /* type_specifier_nonarray: DMAT4X3 */ @@ -7665,7 +7749,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7669 "MachineIndependent/glslang_tab.cpp" +#line 7753 "MachineIndependent/glslang_tab.cpp" break; case 294: /* type_specifier_nonarray: DMAT4X4 */ @@ -7678,7 +7762,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7682 "MachineIndependent/glslang_tab.cpp" +#line 7766 "MachineIndependent/glslang_tab.cpp" break; case 295: /* type_specifier_nonarray: F16MAT2 */ @@ -7689,7 +7773,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7693 "MachineIndependent/glslang_tab.cpp" +#line 7777 "MachineIndependent/glslang_tab.cpp" break; case 296: /* type_specifier_nonarray: F16MAT3 */ @@ -7700,7 +7784,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7704 "MachineIndependent/glslang_tab.cpp" +#line 7788 "MachineIndependent/glslang_tab.cpp" break; case 297: /* type_specifier_nonarray: F16MAT4 */ @@ -7711,7 +7795,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7715 "MachineIndependent/glslang_tab.cpp" +#line 7799 "MachineIndependent/glslang_tab.cpp" break; case 298: /* type_specifier_nonarray: F16MAT2X2 */ @@ -7722,7 +7806,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7726 "MachineIndependent/glslang_tab.cpp" +#line 7810 "MachineIndependent/glslang_tab.cpp" break; case 299: /* type_specifier_nonarray: F16MAT2X3 */ @@ -7733,7 +7817,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 7737 "MachineIndependent/glslang_tab.cpp" +#line 7821 "MachineIndependent/glslang_tab.cpp" break; case 300: /* type_specifier_nonarray: F16MAT2X4 */ @@ -7744,7 +7828,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 7748 "MachineIndependent/glslang_tab.cpp" +#line 7832 "MachineIndependent/glslang_tab.cpp" break; case 301: /* type_specifier_nonarray: F16MAT3X2 */ @@ -7755,7 +7839,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 7759 "MachineIndependent/glslang_tab.cpp" +#line 7843 "MachineIndependent/glslang_tab.cpp" break; case 302: /* type_specifier_nonarray: F16MAT3X3 */ @@ -7766,7 +7850,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7770 "MachineIndependent/glslang_tab.cpp" +#line 7854 "MachineIndependent/glslang_tab.cpp" break; case 303: /* type_specifier_nonarray: F16MAT3X4 */ @@ -7777,7 +7861,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 7781 "MachineIndependent/glslang_tab.cpp" +#line 7865 "MachineIndependent/glslang_tab.cpp" break; case 304: /* type_specifier_nonarray: F16MAT4X2 */ @@ -7788,7 +7872,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 7792 "MachineIndependent/glslang_tab.cpp" +#line 7876 "MachineIndependent/glslang_tab.cpp" break; case 305: /* type_specifier_nonarray: F16MAT4X3 */ @@ -7799,7 +7883,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 7803 "MachineIndependent/glslang_tab.cpp" +#line 7887 "MachineIndependent/glslang_tab.cpp" break; case 306: /* type_specifier_nonarray: F16MAT4X4 */ @@ -7810,7 +7894,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7814 "MachineIndependent/glslang_tab.cpp" +#line 7898 "MachineIndependent/glslang_tab.cpp" break; case 307: /* type_specifier_nonarray: F32MAT2 */ @@ -7821,7 +7905,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7825 "MachineIndependent/glslang_tab.cpp" +#line 7909 "MachineIndependent/glslang_tab.cpp" break; case 308: /* type_specifier_nonarray: F32MAT3 */ @@ -7832,7 +7916,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7836 "MachineIndependent/glslang_tab.cpp" +#line 7920 "MachineIndependent/glslang_tab.cpp" break; case 309: /* type_specifier_nonarray: F32MAT4 */ @@ -7843,7 +7927,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7847 "MachineIndependent/glslang_tab.cpp" +#line 7931 "MachineIndependent/glslang_tab.cpp" break; case 310: /* type_specifier_nonarray: F32MAT2X2 */ @@ -7854,7 +7938,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7858 "MachineIndependent/glslang_tab.cpp" +#line 7942 "MachineIndependent/glslang_tab.cpp" break; case 311: /* type_specifier_nonarray: F32MAT2X3 */ @@ -7865,7 +7949,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7869 "MachineIndependent/glslang_tab.cpp" +#line 7953 "MachineIndependent/glslang_tab.cpp" break; case 312: /* type_specifier_nonarray: F32MAT2X4 */ @@ -7876,7 +7960,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7880 "MachineIndependent/glslang_tab.cpp" +#line 7964 "MachineIndependent/glslang_tab.cpp" break; case 313: /* type_specifier_nonarray: F32MAT3X2 */ @@ -7887,7 +7971,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7891 "MachineIndependent/glslang_tab.cpp" +#line 7975 "MachineIndependent/glslang_tab.cpp" break; case 314: /* type_specifier_nonarray: F32MAT3X3 */ @@ -7898,7 +7982,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7902 "MachineIndependent/glslang_tab.cpp" +#line 7986 "MachineIndependent/glslang_tab.cpp" break; case 315: /* type_specifier_nonarray: F32MAT3X4 */ @@ -7909,7 +7993,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7913 "MachineIndependent/glslang_tab.cpp" +#line 7997 "MachineIndependent/glslang_tab.cpp" break; case 316: /* type_specifier_nonarray: F32MAT4X2 */ @@ -7920,7 +8004,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7924 "MachineIndependent/glslang_tab.cpp" +#line 8008 "MachineIndependent/glslang_tab.cpp" break; case 317: /* type_specifier_nonarray: F32MAT4X3 */ @@ -7931,7 +8015,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7935 "MachineIndependent/glslang_tab.cpp" +#line 8019 "MachineIndependent/glslang_tab.cpp" break; case 318: /* type_specifier_nonarray: F32MAT4X4 */ @@ -7942,7 +8026,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7946 "MachineIndependent/glslang_tab.cpp" +#line 8030 "MachineIndependent/glslang_tab.cpp" break; case 319: /* type_specifier_nonarray: F64MAT2 */ @@ -7953,7 +8037,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7957 "MachineIndependent/glslang_tab.cpp" +#line 8041 "MachineIndependent/glslang_tab.cpp" break; case 320: /* type_specifier_nonarray: F64MAT3 */ @@ -7964,7 +8048,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7968 "MachineIndependent/glslang_tab.cpp" +#line 8052 "MachineIndependent/glslang_tab.cpp" break; case 321: /* type_specifier_nonarray: F64MAT4 */ @@ -7975,7 +8059,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7979 "MachineIndependent/glslang_tab.cpp" +#line 8063 "MachineIndependent/glslang_tab.cpp" break; case 322: /* type_specifier_nonarray: F64MAT2X2 */ @@ -7986,7 +8070,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7990 "MachineIndependent/glslang_tab.cpp" +#line 8074 "MachineIndependent/glslang_tab.cpp" break; case 323: /* type_specifier_nonarray: F64MAT2X3 */ @@ -7997,7 +8081,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8001 "MachineIndependent/glslang_tab.cpp" +#line 8085 "MachineIndependent/glslang_tab.cpp" break; case 324: /* type_specifier_nonarray: F64MAT2X4 */ @@ -8008,7 +8092,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8012 "MachineIndependent/glslang_tab.cpp" +#line 8096 "MachineIndependent/glslang_tab.cpp" break; case 325: /* type_specifier_nonarray: F64MAT3X2 */ @@ -8019,7 +8103,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8023 "MachineIndependent/glslang_tab.cpp" +#line 8107 "MachineIndependent/glslang_tab.cpp" break; case 326: /* type_specifier_nonarray: F64MAT3X3 */ @@ -8030,7 +8114,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8034 "MachineIndependent/glslang_tab.cpp" +#line 8118 "MachineIndependent/glslang_tab.cpp" break; case 327: /* type_specifier_nonarray: F64MAT3X4 */ @@ -8041,7 +8125,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8045 "MachineIndependent/glslang_tab.cpp" +#line 8129 "MachineIndependent/glslang_tab.cpp" break; case 328: /* type_specifier_nonarray: F64MAT4X2 */ @@ -8052,7 +8136,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8056 "MachineIndependent/glslang_tab.cpp" +#line 8140 "MachineIndependent/glslang_tab.cpp" break; case 329: /* type_specifier_nonarray: F64MAT4X3 */ @@ -8063,7 +8147,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8067 "MachineIndependent/glslang_tab.cpp" +#line 8151 "MachineIndependent/glslang_tab.cpp" break; case 330: /* type_specifier_nonarray: F64MAT4X4 */ @@ -8074,7 +8158,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8078 "MachineIndependent/glslang_tab.cpp" +#line 8162 "MachineIndependent/glslang_tab.cpp" break; case 331: /* type_specifier_nonarray: ACCSTRUCTNV */ @@ -8083,7 +8167,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8087 "MachineIndependent/glslang_tab.cpp" +#line 8171 "MachineIndependent/glslang_tab.cpp" break; case 332: /* type_specifier_nonarray: ACCSTRUCTEXT */ @@ -8092,7 +8176,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8096 "MachineIndependent/glslang_tab.cpp" +#line 8180 "MachineIndependent/glslang_tab.cpp" break; case 333: /* type_specifier_nonarray: RAYQUERYEXT */ @@ -8101,7 +8185,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 8105 "MachineIndependent/glslang_tab.cpp" +#line 8189 "MachineIndependent/glslang_tab.cpp" break; case 334: /* type_specifier_nonarray: ATOMIC_UINT */ @@ -8111,7 +8195,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 8115 "MachineIndependent/glslang_tab.cpp" +#line 8199 "MachineIndependent/glslang_tab.cpp" break; case 335: /* type_specifier_nonarray: SAMPLER1D */ @@ -8121,7 +8205,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 8125 "MachineIndependent/glslang_tab.cpp" +#line 8209 "MachineIndependent/glslang_tab.cpp" break; case 336: /* type_specifier_nonarray: SAMPLER2D */ @@ -8131,7 +8215,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 8135 "MachineIndependent/glslang_tab.cpp" +#line 8219 "MachineIndependent/glslang_tab.cpp" break; case 337: /* type_specifier_nonarray: SAMPLER3D */ @@ -8141,7 +8225,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 8145 "MachineIndependent/glslang_tab.cpp" +#line 8229 "MachineIndependent/glslang_tab.cpp" break; case 338: /* type_specifier_nonarray: SAMPLERCUBE */ @@ -8151,7 +8235,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 8155 "MachineIndependent/glslang_tab.cpp" +#line 8239 "MachineIndependent/glslang_tab.cpp" break; case 339: /* type_specifier_nonarray: SAMPLER2DSHADOW */ @@ -8161,7 +8245,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 8165 "MachineIndependent/glslang_tab.cpp" +#line 8249 "MachineIndependent/glslang_tab.cpp" break; case 340: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ @@ -8171,7 +8255,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 8175 "MachineIndependent/glslang_tab.cpp" +#line 8259 "MachineIndependent/glslang_tab.cpp" break; case 341: /* type_specifier_nonarray: SAMPLER2DARRAY */ @@ -8181,7 +8265,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 8185 "MachineIndependent/glslang_tab.cpp" +#line 8269 "MachineIndependent/glslang_tab.cpp" break; case 342: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ @@ -8191,7 +8275,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 8195 "MachineIndependent/glslang_tab.cpp" +#line 8279 "MachineIndependent/glslang_tab.cpp" break; case 343: /* type_specifier_nonarray: SAMPLER1DSHADOW */ @@ -8201,7 +8285,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 8205 "MachineIndependent/glslang_tab.cpp" +#line 8289 "MachineIndependent/glslang_tab.cpp" break; case 344: /* type_specifier_nonarray: SAMPLER1DARRAY */ @@ -8211,7 +8295,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 8215 "MachineIndependent/glslang_tab.cpp" +#line 8299 "MachineIndependent/glslang_tab.cpp" break; case 345: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ @@ -8221,7 +8305,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 8225 "MachineIndependent/glslang_tab.cpp" +#line 8309 "MachineIndependent/glslang_tab.cpp" break; case 346: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ @@ -8231,7 +8315,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 8235 "MachineIndependent/glslang_tab.cpp" +#line 8319 "MachineIndependent/glslang_tab.cpp" break; case 347: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ @@ -8241,7 +8325,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 8245 "MachineIndependent/glslang_tab.cpp" +#line 8329 "MachineIndependent/glslang_tab.cpp" break; case 348: /* type_specifier_nonarray: F16SAMPLER1D */ @@ -8252,7 +8336,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 8256 "MachineIndependent/glslang_tab.cpp" +#line 8340 "MachineIndependent/glslang_tab.cpp" break; case 349: /* type_specifier_nonarray: F16SAMPLER2D */ @@ -8263,7 +8347,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 8267 "MachineIndependent/glslang_tab.cpp" +#line 8351 "MachineIndependent/glslang_tab.cpp" break; case 350: /* type_specifier_nonarray: F16SAMPLER3D */ @@ -8274,7 +8358,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 8278 "MachineIndependent/glslang_tab.cpp" +#line 8362 "MachineIndependent/glslang_tab.cpp" break; case 351: /* type_specifier_nonarray: F16SAMPLERCUBE */ @@ -8285,7 +8369,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 8289 "MachineIndependent/glslang_tab.cpp" +#line 8373 "MachineIndependent/glslang_tab.cpp" break; case 352: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ @@ -8296,7 +8380,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 8300 "MachineIndependent/glslang_tab.cpp" +#line 8384 "MachineIndependent/glslang_tab.cpp" break; case 353: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ @@ -8307,7 +8391,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 8311 "MachineIndependent/glslang_tab.cpp" +#line 8395 "MachineIndependent/glslang_tab.cpp" break; case 354: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ @@ -8318,7 +8402,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 8322 "MachineIndependent/glslang_tab.cpp" +#line 8406 "MachineIndependent/glslang_tab.cpp" break; case 355: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ @@ -8329,7 +8413,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 8333 "MachineIndependent/glslang_tab.cpp" +#line 8417 "MachineIndependent/glslang_tab.cpp" break; case 356: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ @@ -8340,7 +8424,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 8344 "MachineIndependent/glslang_tab.cpp" +#line 8428 "MachineIndependent/glslang_tab.cpp" break; case 357: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ @@ -8351,7 +8435,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 8355 "MachineIndependent/glslang_tab.cpp" +#line 8439 "MachineIndependent/glslang_tab.cpp" break; case 358: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ @@ -8362,7 +8446,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 8366 "MachineIndependent/glslang_tab.cpp" +#line 8450 "MachineIndependent/glslang_tab.cpp" break; case 359: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ @@ -8373,7 +8457,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 8377 "MachineIndependent/glslang_tab.cpp" +#line 8461 "MachineIndependent/glslang_tab.cpp" break; case 360: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ @@ -8384,7 +8468,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 8388 "MachineIndependent/glslang_tab.cpp" +#line 8472 "MachineIndependent/glslang_tab.cpp" break; case 361: /* type_specifier_nonarray: ISAMPLER1D */ @@ -8394,7 +8478,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 8398 "MachineIndependent/glslang_tab.cpp" +#line 8482 "MachineIndependent/glslang_tab.cpp" break; case 362: /* type_specifier_nonarray: ISAMPLER2D */ @@ -8404,7 +8488,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 8408 "MachineIndependent/glslang_tab.cpp" +#line 8492 "MachineIndependent/glslang_tab.cpp" break; case 363: /* type_specifier_nonarray: ISAMPLER3D */ @@ -8414,7 +8498,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 8418 "MachineIndependent/glslang_tab.cpp" +#line 8502 "MachineIndependent/glslang_tab.cpp" break; case 364: /* type_specifier_nonarray: ISAMPLERCUBE */ @@ -8424,7 +8508,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 8428 "MachineIndependent/glslang_tab.cpp" +#line 8512 "MachineIndependent/glslang_tab.cpp" break; case 365: /* type_specifier_nonarray: ISAMPLER2DARRAY */ @@ -8434,7 +8518,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 8438 "MachineIndependent/glslang_tab.cpp" +#line 8522 "MachineIndependent/glslang_tab.cpp" break; case 366: /* type_specifier_nonarray: USAMPLER2D */ @@ -8444,7 +8528,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 8448 "MachineIndependent/glslang_tab.cpp" +#line 8532 "MachineIndependent/glslang_tab.cpp" break; case 367: /* type_specifier_nonarray: USAMPLER3D */ @@ -8454,7 +8538,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 8458 "MachineIndependent/glslang_tab.cpp" +#line 8542 "MachineIndependent/glslang_tab.cpp" break; case 368: /* type_specifier_nonarray: USAMPLERCUBE */ @@ -8464,7 +8548,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 8468 "MachineIndependent/glslang_tab.cpp" +#line 8552 "MachineIndependent/glslang_tab.cpp" break; case 369: /* type_specifier_nonarray: ISAMPLER1DARRAY */ @@ -8474,7 +8558,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 8478 "MachineIndependent/glslang_tab.cpp" +#line 8562 "MachineIndependent/glslang_tab.cpp" break; case 370: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ @@ -8484,7 +8568,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 8488 "MachineIndependent/glslang_tab.cpp" +#line 8572 "MachineIndependent/glslang_tab.cpp" break; case 371: /* type_specifier_nonarray: USAMPLER1D */ @@ -8494,7 +8578,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 8498 "MachineIndependent/glslang_tab.cpp" +#line 8582 "MachineIndependent/glslang_tab.cpp" break; case 372: /* type_specifier_nonarray: USAMPLER1DARRAY */ @@ -8504,7 +8588,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 8508 "MachineIndependent/glslang_tab.cpp" +#line 8592 "MachineIndependent/glslang_tab.cpp" break; case 373: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ @@ -8514,7 +8598,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 8518 "MachineIndependent/glslang_tab.cpp" +#line 8602 "MachineIndependent/glslang_tab.cpp" break; case 374: /* type_specifier_nonarray: TEXTURECUBEARRAY */ @@ -8524,7 +8608,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 8528 "MachineIndependent/glslang_tab.cpp" +#line 8612 "MachineIndependent/glslang_tab.cpp" break; case 375: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ @@ -8534,7 +8618,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8538 "MachineIndependent/glslang_tab.cpp" +#line 8622 "MachineIndependent/glslang_tab.cpp" break; case 376: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ @@ -8544,7 +8628,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8548 "MachineIndependent/glslang_tab.cpp" +#line 8632 "MachineIndependent/glslang_tab.cpp" break; case 377: /* type_specifier_nonarray: USAMPLER2DARRAY */ @@ -8554,7 +8638,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 8558 "MachineIndependent/glslang_tab.cpp" +#line 8642 "MachineIndependent/glslang_tab.cpp" break; case 378: /* type_specifier_nonarray: TEXTURE2D */ @@ -8564,7 +8648,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 8568 "MachineIndependent/glslang_tab.cpp" +#line 8652 "MachineIndependent/glslang_tab.cpp" break; case 379: /* type_specifier_nonarray: TEXTURE3D */ @@ -8574,7 +8658,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 8578 "MachineIndependent/glslang_tab.cpp" +#line 8662 "MachineIndependent/glslang_tab.cpp" break; case 380: /* type_specifier_nonarray: TEXTURE2DARRAY */ @@ -8584,7 +8668,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 8588 "MachineIndependent/glslang_tab.cpp" +#line 8672 "MachineIndependent/glslang_tab.cpp" break; case 381: /* type_specifier_nonarray: TEXTURECUBE */ @@ -8594,7 +8678,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 8598 "MachineIndependent/glslang_tab.cpp" +#line 8682 "MachineIndependent/glslang_tab.cpp" break; case 382: /* type_specifier_nonarray: ITEXTURE2D */ @@ -8604,7 +8688,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 8608 "MachineIndependent/glslang_tab.cpp" +#line 8692 "MachineIndependent/glslang_tab.cpp" break; case 383: /* type_specifier_nonarray: ITEXTURE3D */ @@ -8614,7 +8698,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 8618 "MachineIndependent/glslang_tab.cpp" +#line 8702 "MachineIndependent/glslang_tab.cpp" break; case 384: /* type_specifier_nonarray: ITEXTURECUBE */ @@ -8624,7 +8708,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 8628 "MachineIndependent/glslang_tab.cpp" +#line 8712 "MachineIndependent/glslang_tab.cpp" break; case 385: /* type_specifier_nonarray: ITEXTURE2DARRAY */ @@ -8634,7 +8718,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 8638 "MachineIndependent/glslang_tab.cpp" +#line 8722 "MachineIndependent/glslang_tab.cpp" break; case 386: /* type_specifier_nonarray: UTEXTURE2D */ @@ -8644,7 +8728,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8648 "MachineIndependent/glslang_tab.cpp" +#line 8732 "MachineIndependent/glslang_tab.cpp" break; case 387: /* type_specifier_nonarray: UTEXTURE3D */ @@ -8654,7 +8738,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8658 "MachineIndependent/glslang_tab.cpp" +#line 8742 "MachineIndependent/glslang_tab.cpp" break; case 388: /* type_specifier_nonarray: UTEXTURECUBE */ @@ -8664,7 +8748,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8668 "MachineIndependent/glslang_tab.cpp" +#line 8752 "MachineIndependent/glslang_tab.cpp" break; case 389: /* type_specifier_nonarray: UTEXTURE2DARRAY */ @@ -8674,7 +8758,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8678 "MachineIndependent/glslang_tab.cpp" +#line 8762 "MachineIndependent/glslang_tab.cpp" break; case 390: /* type_specifier_nonarray: SAMPLER */ @@ -8684,7 +8768,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 8688 "MachineIndependent/glslang_tab.cpp" +#line 8772 "MachineIndependent/glslang_tab.cpp" break; case 391: /* type_specifier_nonarray: SAMPLERSHADOW */ @@ -8694,7 +8778,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 8698 "MachineIndependent/glslang_tab.cpp" +#line 8782 "MachineIndependent/glslang_tab.cpp" break; case 392: /* type_specifier_nonarray: SAMPLER2DRECT */ @@ -8704,7 +8788,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 8708 "MachineIndependent/glslang_tab.cpp" +#line 8792 "MachineIndependent/glslang_tab.cpp" break; case 393: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ @@ -8714,7 +8798,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 8718 "MachineIndependent/glslang_tab.cpp" +#line 8802 "MachineIndependent/glslang_tab.cpp" break; case 394: /* type_specifier_nonarray: F16SAMPLER2DRECT */ @@ -8725,7 +8809,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 8729 "MachineIndependent/glslang_tab.cpp" +#line 8813 "MachineIndependent/glslang_tab.cpp" break; case 395: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ @@ -8736,7 +8820,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 8740 "MachineIndependent/glslang_tab.cpp" +#line 8824 "MachineIndependent/glslang_tab.cpp" break; case 396: /* type_specifier_nonarray: ISAMPLER2DRECT */ @@ -8746,7 +8830,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 8750 "MachineIndependent/glslang_tab.cpp" +#line 8834 "MachineIndependent/glslang_tab.cpp" break; case 397: /* type_specifier_nonarray: USAMPLER2DRECT */ @@ -8756,7 +8840,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 8760 "MachineIndependent/glslang_tab.cpp" +#line 8844 "MachineIndependent/glslang_tab.cpp" break; case 398: /* type_specifier_nonarray: SAMPLERBUFFER */ @@ -8766,7 +8850,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 8770 "MachineIndependent/glslang_tab.cpp" +#line 8854 "MachineIndependent/glslang_tab.cpp" break; case 399: /* type_specifier_nonarray: F16SAMPLERBUFFER */ @@ -8777,7 +8861,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 8781 "MachineIndependent/glslang_tab.cpp" +#line 8865 "MachineIndependent/glslang_tab.cpp" break; case 400: /* type_specifier_nonarray: ISAMPLERBUFFER */ @@ -8787,7 +8871,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 8791 "MachineIndependent/glslang_tab.cpp" +#line 8875 "MachineIndependent/glslang_tab.cpp" break; case 401: /* type_specifier_nonarray: USAMPLERBUFFER */ @@ -8797,7 +8881,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 8801 "MachineIndependent/glslang_tab.cpp" +#line 8885 "MachineIndependent/glslang_tab.cpp" break; case 402: /* type_specifier_nonarray: SAMPLER2DMS */ @@ -8807,7 +8891,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 8811 "MachineIndependent/glslang_tab.cpp" +#line 8895 "MachineIndependent/glslang_tab.cpp" break; case 403: /* type_specifier_nonarray: F16SAMPLER2DMS */ @@ -8818,7 +8902,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 8822 "MachineIndependent/glslang_tab.cpp" +#line 8906 "MachineIndependent/glslang_tab.cpp" break; case 404: /* type_specifier_nonarray: ISAMPLER2DMS */ @@ -8828,7 +8912,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 8832 "MachineIndependent/glslang_tab.cpp" +#line 8916 "MachineIndependent/glslang_tab.cpp" break; case 405: /* type_specifier_nonarray: USAMPLER2DMS */ @@ -8838,7 +8922,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 8842 "MachineIndependent/glslang_tab.cpp" +#line 8926 "MachineIndependent/glslang_tab.cpp" break; case 406: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ @@ -8848,7 +8932,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 8852 "MachineIndependent/glslang_tab.cpp" +#line 8936 "MachineIndependent/glslang_tab.cpp" break; case 407: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ @@ -8859,7 +8943,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 8863 "MachineIndependent/glslang_tab.cpp" +#line 8947 "MachineIndependent/glslang_tab.cpp" break; case 408: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ @@ -8869,7 +8953,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 8873 "MachineIndependent/glslang_tab.cpp" +#line 8957 "MachineIndependent/glslang_tab.cpp" break; case 409: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ @@ -8879,7 +8963,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 8883 "MachineIndependent/glslang_tab.cpp" +#line 8967 "MachineIndependent/glslang_tab.cpp" break; case 410: /* type_specifier_nonarray: TEXTURE1D */ @@ -8889,7 +8973,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 8893 "MachineIndependent/glslang_tab.cpp" +#line 8977 "MachineIndependent/glslang_tab.cpp" break; case 411: /* type_specifier_nonarray: F16TEXTURE1D */ @@ -8900,7 +8984,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 8904 "MachineIndependent/glslang_tab.cpp" +#line 8988 "MachineIndependent/glslang_tab.cpp" break; case 412: /* type_specifier_nonarray: F16TEXTURE2D */ @@ -8911,7 +8995,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 8915 "MachineIndependent/glslang_tab.cpp" +#line 8999 "MachineIndependent/glslang_tab.cpp" break; case 413: /* type_specifier_nonarray: F16TEXTURE3D */ @@ -8922,7 +9006,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 8926 "MachineIndependent/glslang_tab.cpp" +#line 9010 "MachineIndependent/glslang_tab.cpp" break; case 414: /* type_specifier_nonarray: F16TEXTURECUBE */ @@ -8933,7 +9017,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 8937 "MachineIndependent/glslang_tab.cpp" +#line 9021 "MachineIndependent/glslang_tab.cpp" break; case 415: /* type_specifier_nonarray: TEXTURE1DARRAY */ @@ -8943,7 +9027,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 8947 "MachineIndependent/glslang_tab.cpp" +#line 9031 "MachineIndependent/glslang_tab.cpp" break; case 416: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ @@ -8954,7 +9038,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 8958 "MachineIndependent/glslang_tab.cpp" +#line 9042 "MachineIndependent/glslang_tab.cpp" break; case 417: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ @@ -8965,7 +9049,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 8969 "MachineIndependent/glslang_tab.cpp" +#line 9053 "MachineIndependent/glslang_tab.cpp" break; case 418: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ @@ -8976,7 +9060,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 8980 "MachineIndependent/glslang_tab.cpp" +#line 9064 "MachineIndependent/glslang_tab.cpp" break; case 419: /* type_specifier_nonarray: ITEXTURE1D */ @@ -8986,7 +9070,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 8990 "MachineIndependent/glslang_tab.cpp" +#line 9074 "MachineIndependent/glslang_tab.cpp" break; case 420: /* type_specifier_nonarray: ITEXTURE1DARRAY */ @@ -8996,7 +9080,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 9000 "MachineIndependent/glslang_tab.cpp" +#line 9084 "MachineIndependent/glslang_tab.cpp" break; case 421: /* type_specifier_nonarray: UTEXTURE1D */ @@ -9006,7 +9090,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 9010 "MachineIndependent/glslang_tab.cpp" +#line 9094 "MachineIndependent/glslang_tab.cpp" break; case 422: /* type_specifier_nonarray: UTEXTURE1DARRAY */ @@ -9016,7 +9100,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 9020 "MachineIndependent/glslang_tab.cpp" +#line 9104 "MachineIndependent/glslang_tab.cpp" break; case 423: /* type_specifier_nonarray: TEXTURE2DRECT */ @@ -9026,7 +9110,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 9030 "MachineIndependent/glslang_tab.cpp" +#line 9114 "MachineIndependent/glslang_tab.cpp" break; case 424: /* type_specifier_nonarray: F16TEXTURE2DRECT */ @@ -9037,7 +9121,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 9041 "MachineIndependent/glslang_tab.cpp" +#line 9125 "MachineIndependent/glslang_tab.cpp" break; case 425: /* type_specifier_nonarray: ITEXTURE2DRECT */ @@ -9047,7 +9131,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 9051 "MachineIndependent/glslang_tab.cpp" +#line 9135 "MachineIndependent/glslang_tab.cpp" break; case 426: /* type_specifier_nonarray: UTEXTURE2DRECT */ @@ -9057,7 +9141,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 9061 "MachineIndependent/glslang_tab.cpp" +#line 9145 "MachineIndependent/glslang_tab.cpp" break; case 427: /* type_specifier_nonarray: TEXTUREBUFFER */ @@ -9067,7 +9151,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 9071 "MachineIndependent/glslang_tab.cpp" +#line 9155 "MachineIndependent/glslang_tab.cpp" break; case 428: /* type_specifier_nonarray: F16TEXTUREBUFFER */ @@ -9078,7 +9162,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 9082 "MachineIndependent/glslang_tab.cpp" +#line 9166 "MachineIndependent/glslang_tab.cpp" break; case 429: /* type_specifier_nonarray: ITEXTUREBUFFER */ @@ -9088,7 +9172,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 9092 "MachineIndependent/glslang_tab.cpp" +#line 9176 "MachineIndependent/glslang_tab.cpp" break; case 430: /* type_specifier_nonarray: UTEXTUREBUFFER */ @@ -9098,7 +9182,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 9102 "MachineIndependent/glslang_tab.cpp" +#line 9186 "MachineIndependent/glslang_tab.cpp" break; case 431: /* type_specifier_nonarray: TEXTURE2DMS */ @@ -9108,7 +9192,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 9112 "MachineIndependent/glslang_tab.cpp" +#line 9196 "MachineIndependent/glslang_tab.cpp" break; case 432: /* type_specifier_nonarray: F16TEXTURE2DMS */ @@ -9119,7 +9203,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 9123 "MachineIndependent/glslang_tab.cpp" +#line 9207 "MachineIndependent/glslang_tab.cpp" break; case 433: /* type_specifier_nonarray: ITEXTURE2DMS */ @@ -9129,7 +9213,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 9133 "MachineIndependent/glslang_tab.cpp" +#line 9217 "MachineIndependent/glslang_tab.cpp" break; case 434: /* type_specifier_nonarray: UTEXTURE2DMS */ @@ -9139,7 +9223,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 9143 "MachineIndependent/glslang_tab.cpp" +#line 9227 "MachineIndependent/glslang_tab.cpp" break; case 435: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ @@ -9149,7 +9233,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 9153 "MachineIndependent/glslang_tab.cpp" +#line 9237 "MachineIndependent/glslang_tab.cpp" break; case 436: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ @@ -9160,7 +9244,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 9164 "MachineIndependent/glslang_tab.cpp" +#line 9248 "MachineIndependent/glslang_tab.cpp" break; case 437: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ @@ -9170,7 +9254,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 9174 "MachineIndependent/glslang_tab.cpp" +#line 9258 "MachineIndependent/glslang_tab.cpp" break; case 438: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ @@ -9180,7 +9264,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 9184 "MachineIndependent/glslang_tab.cpp" +#line 9268 "MachineIndependent/glslang_tab.cpp" break; case 439: /* type_specifier_nonarray: IMAGE1D */ @@ -9190,7 +9274,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 9194 "MachineIndependent/glslang_tab.cpp" +#line 9278 "MachineIndependent/glslang_tab.cpp" break; case 440: /* type_specifier_nonarray: F16IMAGE1D */ @@ -9201,7 +9285,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 9205 "MachineIndependent/glslang_tab.cpp" +#line 9289 "MachineIndependent/glslang_tab.cpp" break; case 441: /* type_specifier_nonarray: IIMAGE1D */ @@ -9211,7 +9295,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 9215 "MachineIndependent/glslang_tab.cpp" +#line 9299 "MachineIndependent/glslang_tab.cpp" break; case 442: /* type_specifier_nonarray: UIMAGE1D */ @@ -9221,7 +9305,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 9225 "MachineIndependent/glslang_tab.cpp" +#line 9309 "MachineIndependent/glslang_tab.cpp" break; case 443: /* type_specifier_nonarray: IMAGE2D */ @@ -9231,7 +9315,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 9235 "MachineIndependent/glslang_tab.cpp" +#line 9319 "MachineIndependent/glslang_tab.cpp" break; case 444: /* type_specifier_nonarray: F16IMAGE2D */ @@ -9242,7 +9326,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 9246 "MachineIndependent/glslang_tab.cpp" +#line 9330 "MachineIndependent/glslang_tab.cpp" break; case 445: /* type_specifier_nonarray: IIMAGE2D */ @@ -9252,7 +9336,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 9256 "MachineIndependent/glslang_tab.cpp" +#line 9340 "MachineIndependent/glslang_tab.cpp" break; case 446: /* type_specifier_nonarray: UIMAGE2D */ @@ -9262,7 +9346,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 9266 "MachineIndependent/glslang_tab.cpp" +#line 9350 "MachineIndependent/glslang_tab.cpp" break; case 447: /* type_specifier_nonarray: IMAGE3D */ @@ -9272,7 +9356,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 9276 "MachineIndependent/glslang_tab.cpp" +#line 9360 "MachineIndependent/glslang_tab.cpp" break; case 448: /* type_specifier_nonarray: F16IMAGE3D */ @@ -9283,7 +9367,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 9287 "MachineIndependent/glslang_tab.cpp" +#line 9371 "MachineIndependent/glslang_tab.cpp" break; case 449: /* type_specifier_nonarray: IIMAGE3D */ @@ -9293,7 +9377,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 9297 "MachineIndependent/glslang_tab.cpp" +#line 9381 "MachineIndependent/glslang_tab.cpp" break; case 450: /* type_specifier_nonarray: UIMAGE3D */ @@ -9303,7 +9387,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 9307 "MachineIndependent/glslang_tab.cpp" +#line 9391 "MachineIndependent/glslang_tab.cpp" break; case 451: /* type_specifier_nonarray: IMAGE2DRECT */ @@ -9313,7 +9397,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 9317 "MachineIndependent/glslang_tab.cpp" +#line 9401 "MachineIndependent/glslang_tab.cpp" break; case 452: /* type_specifier_nonarray: F16IMAGE2DRECT */ @@ -9324,7 +9408,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 9328 "MachineIndependent/glslang_tab.cpp" +#line 9412 "MachineIndependent/glslang_tab.cpp" break; case 453: /* type_specifier_nonarray: IIMAGE2DRECT */ @@ -9334,7 +9418,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 9338 "MachineIndependent/glslang_tab.cpp" +#line 9422 "MachineIndependent/glslang_tab.cpp" break; case 454: /* type_specifier_nonarray: UIMAGE2DRECT */ @@ -9344,7 +9428,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 9348 "MachineIndependent/glslang_tab.cpp" +#line 9432 "MachineIndependent/glslang_tab.cpp" break; case 455: /* type_specifier_nonarray: IMAGECUBE */ @@ -9354,7 +9438,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 9358 "MachineIndependent/glslang_tab.cpp" +#line 9442 "MachineIndependent/glslang_tab.cpp" break; case 456: /* type_specifier_nonarray: F16IMAGECUBE */ @@ -9365,7 +9449,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 9369 "MachineIndependent/glslang_tab.cpp" +#line 9453 "MachineIndependent/glslang_tab.cpp" break; case 457: /* type_specifier_nonarray: IIMAGECUBE */ @@ -9375,7 +9459,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 9379 "MachineIndependent/glslang_tab.cpp" +#line 9463 "MachineIndependent/glslang_tab.cpp" break; case 458: /* type_specifier_nonarray: UIMAGECUBE */ @@ -9385,7 +9469,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 9389 "MachineIndependent/glslang_tab.cpp" +#line 9473 "MachineIndependent/glslang_tab.cpp" break; case 459: /* type_specifier_nonarray: IMAGEBUFFER */ @@ -9395,7 +9479,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 9399 "MachineIndependent/glslang_tab.cpp" +#line 9483 "MachineIndependent/glslang_tab.cpp" break; case 460: /* type_specifier_nonarray: F16IMAGEBUFFER */ @@ -9406,7 +9490,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 9410 "MachineIndependent/glslang_tab.cpp" +#line 9494 "MachineIndependent/glslang_tab.cpp" break; case 461: /* type_specifier_nonarray: IIMAGEBUFFER */ @@ -9416,7 +9500,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 9420 "MachineIndependent/glslang_tab.cpp" +#line 9504 "MachineIndependent/glslang_tab.cpp" break; case 462: /* type_specifier_nonarray: UIMAGEBUFFER */ @@ -9426,7 +9510,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 9430 "MachineIndependent/glslang_tab.cpp" +#line 9514 "MachineIndependent/glslang_tab.cpp" break; case 463: /* type_specifier_nonarray: IMAGE1DARRAY */ @@ -9436,7 +9520,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 9440 "MachineIndependent/glslang_tab.cpp" +#line 9524 "MachineIndependent/glslang_tab.cpp" break; case 464: /* type_specifier_nonarray: F16IMAGE1DARRAY */ @@ -9447,7 +9531,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 9451 "MachineIndependent/glslang_tab.cpp" +#line 9535 "MachineIndependent/glslang_tab.cpp" break; case 465: /* type_specifier_nonarray: IIMAGE1DARRAY */ @@ -9457,7 +9541,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 9461 "MachineIndependent/glslang_tab.cpp" +#line 9545 "MachineIndependent/glslang_tab.cpp" break; case 466: /* type_specifier_nonarray: UIMAGE1DARRAY */ @@ -9467,7 +9551,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 9471 "MachineIndependent/glslang_tab.cpp" +#line 9555 "MachineIndependent/glslang_tab.cpp" break; case 467: /* type_specifier_nonarray: IMAGE2DARRAY */ @@ -9477,7 +9561,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 9481 "MachineIndependent/glslang_tab.cpp" +#line 9565 "MachineIndependent/glslang_tab.cpp" break; case 468: /* type_specifier_nonarray: F16IMAGE2DARRAY */ @@ -9488,7 +9572,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 9492 "MachineIndependent/glslang_tab.cpp" +#line 9576 "MachineIndependent/glslang_tab.cpp" break; case 469: /* type_specifier_nonarray: IIMAGE2DARRAY */ @@ -9498,7 +9582,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 9502 "MachineIndependent/glslang_tab.cpp" +#line 9586 "MachineIndependent/glslang_tab.cpp" break; case 470: /* type_specifier_nonarray: UIMAGE2DARRAY */ @@ -9508,7 +9592,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 9512 "MachineIndependent/glslang_tab.cpp" +#line 9596 "MachineIndependent/glslang_tab.cpp" break; case 471: /* type_specifier_nonarray: IMAGECUBEARRAY */ @@ -9518,7 +9602,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 9522 "MachineIndependent/glslang_tab.cpp" +#line 9606 "MachineIndependent/glslang_tab.cpp" break; case 472: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ @@ -9529,7 +9613,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 9533 "MachineIndependent/glslang_tab.cpp" +#line 9617 "MachineIndependent/glslang_tab.cpp" break; case 473: /* type_specifier_nonarray: IIMAGECUBEARRAY */ @@ -9539,7 +9623,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 9543 "MachineIndependent/glslang_tab.cpp" +#line 9627 "MachineIndependent/glslang_tab.cpp" break; case 474: /* type_specifier_nonarray: UIMAGECUBEARRAY */ @@ -9549,7 +9633,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 9553 "MachineIndependent/glslang_tab.cpp" +#line 9637 "MachineIndependent/glslang_tab.cpp" break; case 475: /* type_specifier_nonarray: IMAGE2DMS */ @@ -9559,7 +9643,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 9563 "MachineIndependent/glslang_tab.cpp" +#line 9647 "MachineIndependent/glslang_tab.cpp" break; case 476: /* type_specifier_nonarray: F16IMAGE2DMS */ @@ -9570,7 +9654,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 9574 "MachineIndependent/glslang_tab.cpp" +#line 9658 "MachineIndependent/glslang_tab.cpp" break; case 477: /* type_specifier_nonarray: IIMAGE2DMS */ @@ -9580,7 +9664,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 9584 "MachineIndependent/glslang_tab.cpp" +#line 9668 "MachineIndependent/glslang_tab.cpp" break; case 478: /* type_specifier_nonarray: UIMAGE2DMS */ @@ -9590,7 +9674,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 9594 "MachineIndependent/glslang_tab.cpp" +#line 9678 "MachineIndependent/glslang_tab.cpp" break; case 479: /* type_specifier_nonarray: IMAGE2DMSARRAY */ @@ -9600,7 +9684,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 9604 "MachineIndependent/glslang_tab.cpp" +#line 9688 "MachineIndependent/glslang_tab.cpp" break; case 480: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ @@ -9611,7 +9695,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 9615 "MachineIndependent/glslang_tab.cpp" +#line 9699 "MachineIndependent/glslang_tab.cpp" break; case 481: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ @@ -9621,7 +9705,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 9625 "MachineIndependent/glslang_tab.cpp" +#line 9709 "MachineIndependent/glslang_tab.cpp" break; case 482: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ @@ -9631,7 +9715,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 9635 "MachineIndependent/glslang_tab.cpp" +#line 9719 "MachineIndependent/glslang_tab.cpp" break; case 483: /* type_specifier_nonarray: I64IMAGE1D */ @@ -9641,7 +9725,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D); } -#line 9645 "MachineIndependent/glslang_tab.cpp" +#line 9729 "MachineIndependent/glslang_tab.cpp" break; case 484: /* type_specifier_nonarray: U64IMAGE1D */ @@ -9651,7 +9735,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D); } -#line 9655 "MachineIndependent/glslang_tab.cpp" +#line 9739 "MachineIndependent/glslang_tab.cpp" break; case 485: /* type_specifier_nonarray: I64IMAGE2D */ @@ -9661,7 +9745,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D); } -#line 9665 "MachineIndependent/glslang_tab.cpp" +#line 9749 "MachineIndependent/glslang_tab.cpp" break; case 486: /* type_specifier_nonarray: U64IMAGE2D */ @@ -9671,7 +9755,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D); } -#line 9675 "MachineIndependent/glslang_tab.cpp" +#line 9759 "MachineIndependent/glslang_tab.cpp" break; case 487: /* type_specifier_nonarray: I64IMAGE3D */ @@ -9681,7 +9765,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D); } -#line 9685 "MachineIndependent/glslang_tab.cpp" +#line 9769 "MachineIndependent/glslang_tab.cpp" break; case 488: /* type_specifier_nonarray: U64IMAGE3D */ @@ -9691,7 +9775,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D); } -#line 9695 "MachineIndependent/glslang_tab.cpp" +#line 9779 "MachineIndependent/glslang_tab.cpp" break; case 489: /* type_specifier_nonarray: I64IMAGE2DRECT */ @@ -9701,7 +9785,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect); } -#line 9705 "MachineIndependent/glslang_tab.cpp" +#line 9789 "MachineIndependent/glslang_tab.cpp" break; case 490: /* type_specifier_nonarray: U64IMAGE2DRECT */ @@ -9711,7 +9795,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect); } -#line 9715 "MachineIndependent/glslang_tab.cpp" +#line 9799 "MachineIndependent/glslang_tab.cpp" break; case 491: /* type_specifier_nonarray: I64IMAGECUBE */ @@ -9721,7 +9805,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube); } -#line 9725 "MachineIndependent/glslang_tab.cpp" +#line 9809 "MachineIndependent/glslang_tab.cpp" break; case 492: /* type_specifier_nonarray: U64IMAGECUBE */ @@ -9731,7 +9815,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube); } -#line 9735 "MachineIndependent/glslang_tab.cpp" +#line 9819 "MachineIndependent/glslang_tab.cpp" break; case 493: /* type_specifier_nonarray: I64IMAGEBUFFER */ @@ -9741,7 +9825,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer); } -#line 9745 "MachineIndependent/glslang_tab.cpp" +#line 9829 "MachineIndependent/glslang_tab.cpp" break; case 494: /* type_specifier_nonarray: U64IMAGEBUFFER */ @@ -9751,7 +9835,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer); } -#line 9755 "MachineIndependent/glslang_tab.cpp" +#line 9839 "MachineIndependent/glslang_tab.cpp" break; case 495: /* type_specifier_nonarray: I64IMAGE1DARRAY */ @@ -9761,7 +9845,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true); } -#line 9765 "MachineIndependent/glslang_tab.cpp" +#line 9849 "MachineIndependent/glslang_tab.cpp" break; case 496: /* type_specifier_nonarray: U64IMAGE1DARRAY */ @@ -9771,7 +9855,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true); } -#line 9775 "MachineIndependent/glslang_tab.cpp" +#line 9859 "MachineIndependent/glslang_tab.cpp" break; case 497: /* type_specifier_nonarray: I64IMAGE2DARRAY */ @@ -9781,7 +9865,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true); } -#line 9785 "MachineIndependent/glslang_tab.cpp" +#line 9869 "MachineIndependent/glslang_tab.cpp" break; case 498: /* type_specifier_nonarray: U64IMAGE2DARRAY */ @@ -9791,7 +9875,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true); } -#line 9795 "MachineIndependent/glslang_tab.cpp" +#line 9879 "MachineIndependent/glslang_tab.cpp" break; case 499: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ @@ -9801,7 +9885,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true); } -#line 9805 "MachineIndependent/glslang_tab.cpp" +#line 9889 "MachineIndependent/glslang_tab.cpp" break; case 500: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ @@ -9811,7 +9895,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true); } -#line 9815 "MachineIndependent/glslang_tab.cpp" +#line 9899 "MachineIndependent/glslang_tab.cpp" break; case 501: /* type_specifier_nonarray: I64IMAGE2DMS */ @@ -9821,7 +9905,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true); } -#line 9825 "MachineIndependent/glslang_tab.cpp" +#line 9909 "MachineIndependent/glslang_tab.cpp" break; case 502: /* type_specifier_nonarray: U64IMAGE2DMS */ @@ -9831,7 +9915,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true); } -#line 9835 "MachineIndependent/glslang_tab.cpp" +#line 9919 "MachineIndependent/glslang_tab.cpp" break; case 503: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ @@ -9841,7 +9925,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true); } -#line 9845 "MachineIndependent/glslang_tab.cpp" +#line 9929 "MachineIndependent/glslang_tab.cpp" break; case 504: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ @@ -9851,7 +9935,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true); } -#line 9855 "MachineIndependent/glslang_tab.cpp" +#line 9939 "MachineIndependent/glslang_tab.cpp" break; case 505: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ @@ -9862,7 +9946,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 9866 "MachineIndependent/glslang_tab.cpp" +#line 9950 "MachineIndependent/glslang_tab.cpp" break; case 506: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ @@ -9873,7 +9957,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 9877 "MachineIndependent/glslang_tab.cpp" +#line 9961 "MachineIndependent/glslang_tab.cpp" break; case 507: /* type_specifier_nonarray: SUBPASSINPUT */ @@ -9884,7 +9968,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 9888 "MachineIndependent/glslang_tab.cpp" +#line 9972 "MachineIndependent/glslang_tab.cpp" break; case 508: /* type_specifier_nonarray: SUBPASSINPUTMS */ @@ -9895,7 +9979,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 9899 "MachineIndependent/glslang_tab.cpp" +#line 9983 "MachineIndependent/glslang_tab.cpp" break; case 509: /* type_specifier_nonarray: F16SUBPASSINPUT */ @@ -9907,7 +9991,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 9911 "MachineIndependent/glslang_tab.cpp" +#line 9995 "MachineIndependent/glslang_tab.cpp" break; case 510: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ @@ -9919,7 +10003,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 9923 "MachineIndependent/glslang_tab.cpp" +#line 10007 "MachineIndependent/glslang_tab.cpp" break; case 511: /* type_specifier_nonarray: ISUBPASSINPUT */ @@ -9930,7 +10014,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 9934 "MachineIndependent/glslang_tab.cpp" +#line 10018 "MachineIndependent/glslang_tab.cpp" break; case 512: /* type_specifier_nonarray: ISUBPASSINPUTMS */ @@ -9941,7 +10025,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 9945 "MachineIndependent/glslang_tab.cpp" +#line 10029 "MachineIndependent/glslang_tab.cpp" break; case 513: /* type_specifier_nonarray: USUBPASSINPUT */ @@ -9952,7 +10036,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 9956 "MachineIndependent/glslang_tab.cpp" +#line 10040 "MachineIndependent/glslang_tab.cpp" break; case 514: /* type_specifier_nonarray: USUBPASSINPUTMS */ @@ -9963,7 +10047,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 9967 "MachineIndependent/glslang_tab.cpp" +#line 10051 "MachineIndependent/glslang_tab.cpp" break; case 515: /* type_specifier_nonarray: FCOOPMATNV */ @@ -9974,7 +10058,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 9978 "MachineIndependent/glslang_tab.cpp" +#line 10062 "MachineIndependent/glslang_tab.cpp" break; case 516: /* type_specifier_nonarray: ICOOPMATNV */ @@ -9985,7 +10069,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).coopmat = true; } -#line 9989 "MachineIndependent/glslang_tab.cpp" +#line 10073 "MachineIndependent/glslang_tab.cpp" break; case 517: /* type_specifier_nonarray: UCOOPMATNV */ @@ -9996,7 +10080,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).coopmat = true; } -#line 10000 "MachineIndependent/glslang_tab.cpp" +#line 10084 "MachineIndependent/glslang_tab.cpp" break; case 518: /* type_specifier_nonarray: struct_specifier */ @@ -10006,7 +10090,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 10010 "MachineIndependent/glslang_tab.cpp" +#line 10094 "MachineIndependent/glslang_tab.cpp" break; case 519: /* type_specifier_nonarray: TYPE_NAME */ @@ -10024,7 +10108,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 10028 "MachineIndependent/glslang_tab.cpp" +#line 10112 "MachineIndependent/glslang_tab.cpp" break; case 520: /* precision_qualifier: HIGH_PRECISION */ @@ -10034,7 +10118,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 10038 "MachineIndependent/glslang_tab.cpp" +#line 10122 "MachineIndependent/glslang_tab.cpp" break; case 521: /* precision_qualifier: MEDIUM_PRECISION */ @@ -10044,7 +10128,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 10048 "MachineIndependent/glslang_tab.cpp" +#line 10132 "MachineIndependent/glslang_tab.cpp" break; case 522: /* precision_qualifier: LOW_PRECISION */ @@ -10054,13 +10138,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 10058 "MachineIndependent/glslang_tab.cpp" +#line 10142 "MachineIndependent/glslang_tab.cpp" break; case 523: /* $@3: %empty */ #line 3450 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 10064 "MachineIndependent/glslang_tab.cpp" +#line 10148 "MachineIndependent/glslang_tab.cpp" break; case 524: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ @@ -10076,13 +10160,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10080 "MachineIndependent/glslang_tab.cpp" +#line 10164 "MachineIndependent/glslang_tab.cpp" break; case 525: /* $@4: %empty */ #line 3461 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 10086 "MachineIndependent/glslang_tab.cpp" +#line 10170 "MachineIndependent/glslang_tab.cpp" break; case 526: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ @@ -10094,7 +10178,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10098 "MachineIndependent/glslang_tab.cpp" +#line 10182 "MachineIndependent/glslang_tab.cpp" break; case 527: /* struct_declaration_list: struct_declaration */ @@ -10102,7 +10186,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 10106 "MachineIndependent/glslang_tab.cpp" +#line 10190 "MachineIndependent/glslang_tab.cpp" break; case 528: /* struct_declaration_list: struct_declaration_list struct_declaration */ @@ -10117,7 +10201,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 10121 "MachineIndependent/glslang_tab.cpp" +#line 10205 "MachineIndependent/glslang_tab.cpp" break; case 529: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ @@ -10144,7 +10228,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10148 "MachineIndependent/glslang_tab.cpp" +#line 10232 "MachineIndependent/glslang_tab.cpp" break; case 530: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ @@ -10173,7 +10257,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10177 "MachineIndependent/glslang_tab.cpp" +#line 10261 "MachineIndependent/glslang_tab.cpp" break; case 531: /* struct_declarator_list: struct_declarator */ @@ -10182,7 +10266,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10186 "MachineIndependent/glslang_tab.cpp" +#line 10270 "MachineIndependent/glslang_tab.cpp" break; case 532: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ @@ -10190,7 +10274,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10194 "MachineIndependent/glslang_tab.cpp" +#line 10278 "MachineIndependent/glslang_tab.cpp" break; case 533: /* struct_declarator: IDENTIFIER */ @@ -10200,7 +10284,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 10204 "MachineIndependent/glslang_tab.cpp" +#line 10288 "MachineIndependent/glslang_tab.cpp" break; case 534: /* struct_declarator: IDENTIFIER array_specifier */ @@ -10213,7 +10297,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 10217 "MachineIndependent/glslang_tab.cpp" +#line 10301 "MachineIndependent/glslang_tab.cpp" break; case 535: /* initializer: assignment_expression */ @@ -10221,7 +10305,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10225 "MachineIndependent/glslang_tab.cpp" +#line 10309 "MachineIndependent/glslang_tab.cpp" break; case 536: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ @@ -10232,7 +10316,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 10236 "MachineIndependent/glslang_tab.cpp" +#line 10320 "MachineIndependent/glslang_tab.cpp" break; case 537: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ @@ -10243,205 +10327,216 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 10247 "MachineIndependent/glslang_tab.cpp" +#line 10331 "MachineIndependent/glslang_tab.cpp" + break; + + case 538: /* initializer: LEFT_BRACE RIGHT_BRACE */ +#line 3578 "MachineIndependent/glslang.y" + { + const char* initFeature = "empty { } initializer"; + parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); + parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); + (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc); + } +#line 10342 "MachineIndependent/glslang_tab.cpp" break; - case 538: /* initializer_list: initializer */ -#line 3583 "MachineIndependent/glslang.y" + case 539: /* initializer_list: initializer */ +#line 3589 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 10255 "MachineIndependent/glslang_tab.cpp" +#line 10350 "MachineIndependent/glslang_tab.cpp" break; - case 539: /* initializer_list: initializer_list COMMA initializer */ -#line 3586 "MachineIndependent/glslang.y" + case 540: /* initializer_list: initializer_list COMMA initializer */ +#line 3592 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 10263 "MachineIndependent/glslang_tab.cpp" +#line 10358 "MachineIndependent/glslang_tab.cpp" break; - case 540: /* declaration_statement: declaration */ -#line 3593 "MachineIndependent/glslang.y" + case 541: /* declaration_statement: declaration */ +#line 3599 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10269 "MachineIndependent/glslang_tab.cpp" +#line 10364 "MachineIndependent/glslang_tab.cpp" break; - case 541: /* statement: compound_statement */ -#line 3597 "MachineIndependent/glslang.y" + case 542: /* statement: compound_statement */ +#line 3603 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10275 "MachineIndependent/glslang_tab.cpp" +#line 10370 "MachineIndependent/glslang_tab.cpp" break; - case 542: /* statement: simple_statement */ -#line 3598 "MachineIndependent/glslang.y" + case 543: /* statement: simple_statement */ +#line 3604 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10281 "MachineIndependent/glslang_tab.cpp" +#line 10376 "MachineIndependent/glslang_tab.cpp" break; - case 543: /* simple_statement: declaration_statement */ -#line 3604 "MachineIndependent/glslang.y" + case 544: /* simple_statement: declaration_statement */ +#line 3610 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10287 "MachineIndependent/glslang_tab.cpp" +#line 10382 "MachineIndependent/glslang_tab.cpp" break; - case 544: /* simple_statement: expression_statement */ -#line 3605 "MachineIndependent/glslang.y" + case 545: /* simple_statement: expression_statement */ +#line 3611 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10293 "MachineIndependent/glslang_tab.cpp" +#line 10388 "MachineIndependent/glslang_tab.cpp" break; - case 545: /* simple_statement: selection_statement */ -#line 3606 "MachineIndependent/glslang.y" + case 546: /* simple_statement: selection_statement */ +#line 3612 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10299 "MachineIndependent/glslang_tab.cpp" +#line 10394 "MachineIndependent/glslang_tab.cpp" break; - case 546: /* simple_statement: switch_statement */ -#line 3607 "MachineIndependent/glslang.y" + case 547: /* simple_statement: switch_statement */ +#line 3613 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10305 "MachineIndependent/glslang_tab.cpp" +#line 10400 "MachineIndependent/glslang_tab.cpp" break; - case 547: /* simple_statement: case_label */ -#line 3608 "MachineIndependent/glslang.y" + case 548: /* simple_statement: case_label */ +#line 3614 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10311 "MachineIndependent/glslang_tab.cpp" +#line 10406 "MachineIndependent/glslang_tab.cpp" break; - case 548: /* simple_statement: iteration_statement */ -#line 3609 "MachineIndependent/glslang.y" + case 549: /* simple_statement: iteration_statement */ +#line 3615 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10317 "MachineIndependent/glslang_tab.cpp" +#line 10412 "MachineIndependent/glslang_tab.cpp" break; - case 549: /* simple_statement: jump_statement */ -#line 3610 "MachineIndependent/glslang.y" + case 550: /* simple_statement: jump_statement */ +#line 3616 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10323 "MachineIndependent/glslang_tab.cpp" +#line 10418 "MachineIndependent/glslang_tab.cpp" break; - case 550: /* simple_statement: demote_statement */ -#line 3612 "MachineIndependent/glslang.y" + case 551: /* simple_statement: demote_statement */ +#line 3618 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10329 "MachineIndependent/glslang_tab.cpp" +#line 10424 "MachineIndependent/glslang_tab.cpp" break; - case 551: /* demote_statement: DEMOTE SEMICOLON */ -#line 3618 "MachineIndependent/glslang.y" + case 552: /* demote_statement: DEMOTE SEMICOLON */ +#line 3624 "MachineIndependent/glslang.y" { 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 10339 "MachineIndependent/glslang_tab.cpp" +#line 10434 "MachineIndependent/glslang_tab.cpp" break; - case 552: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3627 "MachineIndependent/glslang.y" + case 553: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 3633 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10345 "MachineIndependent/glslang_tab.cpp" +#line 10440 "MachineIndependent/glslang_tab.cpp" break; - case 553: /* $@5: %empty */ -#line 3628 "MachineIndependent/glslang.y" + case 554: /* $@5: %empty */ +#line 3634 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 10354 "MachineIndependent/glslang_tab.cpp" +#line 10449 "MachineIndependent/glslang_tab.cpp" break; - case 554: /* $@6: %empty */ -#line 3632 "MachineIndependent/glslang.y" + case 555: /* $@6: %empty */ +#line 3638 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 10363 "MachineIndependent/glslang_tab.cpp" +#line 10458 "MachineIndependent/glslang_tab.cpp" break; - case 555: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ -#line 3636 "MachineIndependent/glslang.y" + case 556: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ +#line 3642 "MachineIndependent/glslang.y" { 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 10373 "MachineIndependent/glslang_tab.cpp" +#line 10468 "MachineIndependent/glslang_tab.cpp" break; - case 556: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3644 "MachineIndependent/glslang.y" + case 557: /* statement_no_new_scope: compound_statement_no_new_scope */ +#line 3650 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10379 "MachineIndependent/glslang_tab.cpp" +#line 10474 "MachineIndependent/glslang_tab.cpp" break; - case 557: /* statement_no_new_scope: simple_statement */ -#line 3645 "MachineIndependent/glslang.y" + case 558: /* statement_no_new_scope: simple_statement */ +#line 3651 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10385 "MachineIndependent/glslang_tab.cpp" +#line 10480 "MachineIndependent/glslang_tab.cpp" break; - case 558: /* $@7: %empty */ -#line 3649 "MachineIndependent/glslang.y" + case 559: /* $@7: %empty */ +#line 3655 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 10393 "MachineIndependent/glslang_tab.cpp" +#line 10488 "MachineIndependent/glslang_tab.cpp" break; - case 559: /* statement_scoped: $@7 compound_statement */ -#line 3652 "MachineIndependent/glslang.y" + case 560: /* statement_scoped: $@7 compound_statement */ +#line 3658 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10402 "MachineIndependent/glslang_tab.cpp" +#line 10497 "MachineIndependent/glslang_tab.cpp" break; - case 560: /* $@8: %empty */ -#line 3656 "MachineIndependent/glslang.y" + case 561: /* $@8: %empty */ +#line 3662 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10412 "MachineIndependent/glslang_tab.cpp" +#line 10507 "MachineIndependent/glslang_tab.cpp" break; - case 561: /* statement_scoped: $@8 simple_statement */ -#line 3661 "MachineIndependent/glslang.y" + case 562: /* statement_scoped: $@8 simple_statement */ +#line 3667 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10423 "MachineIndependent/glslang_tab.cpp" +#line 10518 "MachineIndependent/glslang_tab.cpp" break; - case 562: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 3670 "MachineIndependent/glslang.y" + case 563: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 3676 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10431 "MachineIndependent/glslang_tab.cpp" +#line 10526 "MachineIndependent/glslang_tab.cpp" break; - case 563: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 3673 "MachineIndependent/glslang.y" + case 564: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ +#line 3679 "MachineIndependent/glslang.y" { 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 10441 "MachineIndependent/glslang_tab.cpp" +#line 10536 "MachineIndependent/glslang_tab.cpp" break; - case 564: /* statement_list: statement */ -#line 3681 "MachineIndependent/glslang.y" + case 565: /* statement_list: statement */ +#line 3687 "MachineIndependent/glslang.y" { (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 || @@ -10450,11 +10545,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 10454 "MachineIndependent/glslang_tab.cpp" +#line 10549 "MachineIndependent/glslang_tab.cpp" break; - case 565: /* statement_list: statement_list statement */ -#line 3689 "MachineIndependent/glslang.y" + case 566: /* statement_list: statement_list statement */ +#line 3695 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { @@ -10463,76 +10558,76 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 10467 "MachineIndependent/glslang_tab.cpp" +#line 10562 "MachineIndependent/glslang_tab.cpp" break; - case 566: /* expression_statement: SEMICOLON */ -#line 3700 "MachineIndependent/glslang.y" + case 567: /* expression_statement: SEMICOLON */ +#line 3706 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10473 "MachineIndependent/glslang_tab.cpp" +#line 10568 "MachineIndependent/glslang_tab.cpp" break; - case 567: /* expression_statement: expression SEMICOLON */ -#line 3701 "MachineIndependent/glslang.y" + case 568: /* expression_statement: expression SEMICOLON */ +#line 3707 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 10479 "MachineIndependent/glslang_tab.cpp" +#line 10574 "MachineIndependent/glslang_tab.cpp" break; - case 568: /* selection_statement: selection_statement_nonattributed */ -#line 3705 "MachineIndependent/glslang.y" + case 569: /* selection_statement: selection_statement_nonattributed */ +#line 3711 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10487 "MachineIndependent/glslang_tab.cpp" +#line 10582 "MachineIndependent/glslang_tab.cpp" break; - case 569: /* selection_statement: attribute selection_statement_nonattributed */ -#line 3709 "MachineIndependent/glslang.y" + case 570: /* selection_statement: attribute selection_statement_nonattributed */ +#line 3715 "MachineIndependent/glslang.y" { parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10496 "MachineIndependent/glslang_tab.cpp" +#line 10591 "MachineIndependent/glslang_tab.cpp" break; - case 570: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 3716 "MachineIndependent/glslang.y" + case 571: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ +#line 3722 "MachineIndependent/glslang.y" { 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 10505 "MachineIndependent/glslang_tab.cpp" +#line 10600 "MachineIndependent/glslang_tab.cpp" break; - case 571: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 3723 "MachineIndependent/glslang.y" + case 572: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ +#line 3729 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 10514 "MachineIndependent/glslang_tab.cpp" +#line 10609 "MachineIndependent/glslang_tab.cpp" break; - case 572: /* selection_rest_statement: statement_scoped */ -#line 3727 "MachineIndependent/glslang.y" + case 573: /* selection_rest_statement: statement_scoped */ +#line 3733 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 10523 "MachineIndependent/glslang_tab.cpp" +#line 10618 "MachineIndependent/glslang_tab.cpp" break; - case 573: /* condition: expression */ -#line 3735 "MachineIndependent/glslang.y" + case 574: /* condition: expression */ +#line 3741 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 10532 "MachineIndependent/glslang_tab.cpp" +#line 10627 "MachineIndependent/glslang_tab.cpp" break; - case 574: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 3739 "MachineIndependent/glslang.y" + case 575: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 3745 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -10543,28 +10638,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 10547 "MachineIndependent/glslang_tab.cpp" +#line 10642 "MachineIndependent/glslang_tab.cpp" break; - case 575: /* switch_statement: switch_statement_nonattributed */ -#line 3752 "MachineIndependent/glslang.y" + case 576: /* switch_statement: switch_statement_nonattributed */ +#line 3758 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10555 "MachineIndependent/glslang_tab.cpp" +#line 10650 "MachineIndependent/glslang_tab.cpp" break; - case 576: /* switch_statement: attribute switch_statement_nonattributed */ -#line 3756 "MachineIndependent/glslang.y" + case 577: /* switch_statement: attribute switch_statement_nonattributed */ +#line 3762 "MachineIndependent/glslang.y" { parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10564 "MachineIndependent/glslang_tab.cpp" +#line 10659 "MachineIndependent/glslang_tab.cpp" break; - case 577: /* $@9: %empty */ -#line 3763 "MachineIndependent/glslang.y" + case 578: /* $@9: %empty */ +#line 3769 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -10573,11 +10668,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 10577 "MachineIndependent/glslang_tab.cpp" +#line 10672 "MachineIndependent/glslang_tab.cpp" break; - case 578: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 3771 "MachineIndependent/glslang.y" + case 579: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ +#line 3777 "MachineIndependent/glslang.y" { (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(); @@ -10587,27 +10682,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10591 "MachineIndependent/glslang_tab.cpp" +#line 10686 "MachineIndependent/glslang_tab.cpp" break; - case 579: /* switch_statement_list: %empty */ -#line 3783 "MachineIndependent/glslang.y" + case 580: /* switch_statement_list: %empty */ +#line 3789 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10599 "MachineIndependent/glslang_tab.cpp" +#line 10694 "MachineIndependent/glslang_tab.cpp" break; - case 580: /* switch_statement_list: statement_list */ -#line 3786 "MachineIndependent/glslang.y" + case 581: /* switch_statement_list: statement_list */ +#line 3792 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10607 "MachineIndependent/glslang_tab.cpp" +#line 10702 "MachineIndependent/glslang_tab.cpp" break; - case 581: /* case_label: CASE expression COLON */ -#line 3792 "MachineIndependent/glslang.y" + case 582: /* case_label: CASE expression COLON */ +#line 3798 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10620,11 +10715,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 10624 "MachineIndependent/glslang_tab.cpp" +#line 10719 "MachineIndependent/glslang_tab.cpp" break; - case 582: /* case_label: DEFAULT COLON */ -#line 3804 "MachineIndependent/glslang.y" + case 583: /* case_label: DEFAULT COLON */ +#line 3810 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10634,28 +10729,28 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 10638 "MachineIndependent/glslang_tab.cpp" +#line 10733 "MachineIndependent/glslang_tab.cpp" break; - case 583: /* iteration_statement: iteration_statement_nonattributed */ -#line 3816 "MachineIndependent/glslang.y" + case 584: /* iteration_statement: iteration_statement_nonattributed */ +#line 3822 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10646 "MachineIndependent/glslang_tab.cpp" +#line 10741 "MachineIndependent/glslang_tab.cpp" break; - case 584: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 3820 "MachineIndependent/glslang.y" + case 585: /* iteration_statement: attribute iteration_statement_nonattributed */ +#line 3826 "MachineIndependent/glslang.y" { parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10655 "MachineIndependent/glslang_tab.cpp" +#line 10750 "MachineIndependent/glslang_tab.cpp" break; - case 585: /* $@10: %empty */ -#line 3827 "MachineIndependent/glslang.y" + case 586: /* $@10: %empty */ +#line 3833 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -10664,11 +10759,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10668 "MachineIndependent/glslang_tab.cpp" +#line 10763 "MachineIndependent/glslang_tab.cpp" break; - case 586: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ -#line 3835 "MachineIndependent/glslang.y" + case 587: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ +#line 3841 "MachineIndependent/glslang.y" { 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); @@ -10676,21 +10771,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10680 "MachineIndependent/glslang_tab.cpp" +#line 10775 "MachineIndependent/glslang_tab.cpp" break; - case 587: /* $@11: %empty */ -#line 3842 "MachineIndependent/glslang.y" + case 588: /* $@11: %empty */ +#line 3848 "MachineIndependent/glslang.y" { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10690 "MachineIndependent/glslang_tab.cpp" +#line 10785 "MachineIndependent/glslang_tab.cpp" break; - case 588: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 3847 "MachineIndependent/glslang.y" + case 589: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ +#line 3853 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -10702,22 +10797,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10706 "MachineIndependent/glslang_tab.cpp" +#line 10801 "MachineIndependent/glslang_tab.cpp" break; - case 589: /* $@12: %empty */ -#line 3858 "MachineIndependent/glslang.y" + case 590: /* $@12: %empty */ +#line 3864 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10717 "MachineIndependent/glslang_tab.cpp" +#line 10812 "MachineIndependent/glslang_tab.cpp" break; - case 590: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 3864 "MachineIndependent/glslang.y" + case 591: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ +#line 3870 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -10730,81 +10825,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10734 "MachineIndependent/glslang_tab.cpp" +#line 10829 "MachineIndependent/glslang_tab.cpp" break; - case 591: /* for_init_statement: expression_statement */ -#line 3879 "MachineIndependent/glslang.y" + case 592: /* for_init_statement: expression_statement */ +#line 3885 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10742 "MachineIndependent/glslang_tab.cpp" +#line 10837 "MachineIndependent/glslang_tab.cpp" break; - case 592: /* for_init_statement: declaration_statement */ -#line 3882 "MachineIndependent/glslang.y" + case 593: /* for_init_statement: declaration_statement */ +#line 3888 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10750 "MachineIndependent/glslang_tab.cpp" +#line 10845 "MachineIndependent/glslang_tab.cpp" break; - case 593: /* conditionopt: condition */ -#line 3888 "MachineIndependent/glslang.y" + case 594: /* conditionopt: condition */ +#line 3894 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10758 "MachineIndependent/glslang_tab.cpp" +#line 10853 "MachineIndependent/glslang_tab.cpp" break; - case 594: /* conditionopt: %empty */ -#line 3891 "MachineIndependent/glslang.y" + case 595: /* conditionopt: %empty */ +#line 3897 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 10766 "MachineIndependent/glslang_tab.cpp" +#line 10861 "MachineIndependent/glslang_tab.cpp" break; - case 595: /* for_rest_statement: conditionopt SEMICOLON */ -#line 3897 "MachineIndependent/glslang.y" + case 596: /* for_rest_statement: conditionopt SEMICOLON */ +#line 3903 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 10775 "MachineIndependent/glslang_tab.cpp" +#line 10870 "MachineIndependent/glslang_tab.cpp" break; - case 596: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 3901 "MachineIndependent/glslang.y" + case 597: /* for_rest_statement: conditionopt SEMICOLON expression */ +#line 3907 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 10784 "MachineIndependent/glslang_tab.cpp" +#line 10879 "MachineIndependent/glslang_tab.cpp" break; - case 597: /* jump_statement: CONTINUE SEMICOLON */ -#line 3908 "MachineIndependent/glslang.y" + case 598: /* jump_statement: CONTINUE SEMICOLON */ +#line 3914 "MachineIndependent/glslang.y" { 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 10794 "MachineIndependent/glslang_tab.cpp" +#line 10889 "MachineIndependent/glslang_tab.cpp" break; - case 598: /* jump_statement: BREAK SEMICOLON */ -#line 3913 "MachineIndependent/glslang.y" + case 599: /* jump_statement: BREAK SEMICOLON */ +#line 3919 "MachineIndependent/glslang.y" { 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 10804 "MachineIndependent/glslang_tab.cpp" +#line 10899 "MachineIndependent/glslang_tab.cpp" break; - case 599: /* jump_statement: RETURN SEMICOLON */ -#line 3918 "MachineIndependent/glslang.y" + case 600: /* jump_statement: RETURN SEMICOLON */ +#line 3924 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -10812,101 +10907,101 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 10816 "MachineIndependent/glslang_tab.cpp" +#line 10911 "MachineIndependent/glslang_tab.cpp" break; - case 600: /* jump_statement: RETURN expression SEMICOLON */ -#line 3925 "MachineIndependent/glslang.y" + case 601: /* jump_statement: RETURN expression SEMICOLON */ +#line 3931 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 10824 "MachineIndependent/glslang_tab.cpp" +#line 10919 "MachineIndependent/glslang_tab.cpp" break; - case 601: /* jump_statement: DISCARD SEMICOLON */ -#line 3928 "MachineIndependent/glslang.y" + case 602: /* jump_statement: DISCARD SEMICOLON */ +#line 3934 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 10833 "MachineIndependent/glslang_tab.cpp" +#line 10928 "MachineIndependent/glslang_tab.cpp" break; - case 602: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 3932 "MachineIndependent/glslang.y" + case 603: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ +#line 3938 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 10842 "MachineIndependent/glslang_tab.cpp" +#line 10937 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 3937 "MachineIndependent/glslang.y" + case 604: /* jump_statement: TERMINATE_RAY SEMICOLON */ +#line 3943 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); } -#line 10851 "MachineIndependent/glslang_tab.cpp" +#line 10946 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 3941 "MachineIndependent/glslang.y" + case 605: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ +#line 3947 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); } -#line 10860 "MachineIndependent/glslang_tab.cpp" +#line 10955 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* translation_unit: external_declaration */ -#line 3951 "MachineIndependent/glslang.y" + case 606: /* translation_unit: external_declaration */ +#line 3957 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 10869 "MachineIndependent/glslang_tab.cpp" +#line 10964 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* translation_unit: translation_unit external_declaration */ -#line 3955 "MachineIndependent/glslang.y" + case 607: /* translation_unit: translation_unit external_declaration */ +#line 3961 "MachineIndependent/glslang.y" { 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 10880 "MachineIndependent/glslang_tab.cpp" +#line 10975 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* external_declaration: function_definition */ -#line 3964 "MachineIndependent/glslang.y" + case 608: /* external_declaration: function_definition */ +#line 3970 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10888 "MachineIndependent/glslang_tab.cpp" +#line 10983 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* external_declaration: declaration */ -#line 3967 "MachineIndependent/glslang.y" + case 609: /* external_declaration: declaration */ +#line 3973 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10896 "MachineIndependent/glslang_tab.cpp" +#line 10991 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* external_declaration: SEMICOLON */ -#line 3971 "MachineIndependent/glslang.y" + case 610: /* external_declaration: SEMICOLON */ +#line 3977 "MachineIndependent/glslang.y" { 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 10906 "MachineIndependent/glslang_tab.cpp" +#line 11001 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* $@13: %empty */ -#line 3980 "MachineIndependent/glslang.y" + case 611: /* $@13: %empty */ +#line 3986 "MachineIndependent/glslang.y" { (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); @@ -10919,11 +11014,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 10923 "MachineIndependent/glslang_tab.cpp" +#line 11018 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 3992 "MachineIndependent/glslang.y" + case 612: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ +#line 3998 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -10950,52 +11045,52 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 10954 "MachineIndependent/glslang_tab.cpp" +#line 11049 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4022 "MachineIndependent/glslang.y" + case 613: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4028 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); } -#line 10963 "MachineIndependent/glslang_tab.cpp" +#line 11058 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* attribute_list: single_attribute */ -#line 4028 "MachineIndependent/glslang.y" + case 614: /* attribute_list: single_attribute */ +#line 4034 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 10971 "MachineIndependent/glslang_tab.cpp" +#line 11066 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4031 "MachineIndependent/glslang.y" + case 615: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4037 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 10979 "MachineIndependent/glslang_tab.cpp" +#line 11074 "MachineIndependent/glslang_tab.cpp" break; - case 615: /* single_attribute: IDENTIFIER */ -#line 4036 "MachineIndependent/glslang.y" + case 616: /* single_attribute: IDENTIFIER */ +#line 4042 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 10987 "MachineIndependent/glslang_tab.cpp" +#line 11082 "MachineIndependent/glslang_tab.cpp" break; - case 616: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4039 "MachineIndependent/glslang.y" + case 617: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4045 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 10995 "MachineIndependent/glslang_tab.cpp" +#line 11090 "MachineIndependent/glslang_tab.cpp" break; -#line 10999 "MachineIndependent/glslang_tab.cpp" +#line 11094 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -11220,5 +11315,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4044 "MachineIndependent/glslang.y" +#line 4050 "MachineIndependent/glslang.y" diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index b7f0df58ae..81af5af60e 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -376,6 +376,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.nonuniform4.frag", "spv.nonuniform5.frag", "spv.noWorkgroup.comp", + "spv.nullInit.comp", "spv.offsets.frag", "spv.Operations.frag", "spv.paramMemory.frag", From bfd84a39f2271940e04a081383d07c169b33d51f Mon Sep 17 00:00:00 2001 From: Jeff Bolz Date: Wed, 27 Jan 2021 13:14:34 -0600 Subject: [PATCH 093/365] Add missing capability when QueueFamily scope is used Also, if this capability is added and the memory model is not otherwise enabled by pragma, enable it as part of postprocessing. --- SPIRV/GlslangToSpv.cpp | 4 ++ SPIRV/SpvPostProcess.cpp | 7 +++ .../baseResults/spv.queueFamilyScope.comp.out | 43 +++++++++++++++++++ Test/spv.queueFamilyScope.comp | 10 +++++ gtests/Spv.FromFile.cpp | 1 + 5 files changed, 65 insertions(+) create mode 100644 Test/baseResults/spv.queueFamilyScope.comp.out create mode 100644 Test/spv.queueFamilyScope.comp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 8e063f8fa5..49baf978e5 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -6996,6 +6996,10 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); } + if (builder.getConstantScalar(scopeId) == spv::ScopeQueueFamily) { + builder.addCapability(spv::CapabilityVulkanMemoryModelKHR); + } + if (glslangIntermediate->usingVulkanMemoryModel() && builder.getConstantScalar(scopeId) == spv::ScopeDevice) { builder.addCapability(spv::CapabilityVulkanMemoryModelDeviceScopeKHR); } diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp index d40174d172..36d568f073 100644 --- a/SPIRV/SpvPostProcess.cpp +++ b/SPIRV/SpvPostProcess.cpp @@ -436,6 +436,13 @@ void Builder::postProcessFeatures() { } } } + + // If any Vulkan memory model-specific functionality is used, update the + // OpMemoryModel to match. + if (capabilities.find(spv::CapabilityVulkanMemoryModelKHR) != capabilities.end()) { + memoryModel = spv::MemoryModelVulkanKHR; + addIncorporatedExtension(spv::E_SPV_KHR_vulkan_memory_model, spv::Spv_1_5); + } } #endif diff --git a/Test/baseResults/spv.queueFamilyScope.comp.out b/Test/baseResults/spv.queueFamilyScope.comp.out new file mode 100644 index 0000000000..9c239df2d9 --- /dev/null +++ b/Test/baseResults/spv.queueFamilyScope.comp.out @@ -0,0 +1,43 @@ +spv.queueFamilyScope.comp +// Module Version 10300 +// Generated by (magic number): 8000a +// Id's are bound by 21 + + Capability Shader + Capability VulkanMemoryModelKHR + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical VulkanKHR + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 7 "Buffer" + MemberName 7(Buffer) 0 "a" + Name 9 "A" + MemberDecorate 7(Buffer) 0 Offset 0 + Decorate 7(Buffer) Block + Decorate 9(A) DescriptorSet 0 + Decorate 9(A) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7(Buffer): TypeStruct 6(int) + 8: TypePointer StorageBuffer 7(Buffer) + 9(A): 8(ptr) Variable StorageBuffer + 10: TypeInt 32 1 + 11: 10(int) Constant 0 + 12: TypePointer StorageBuffer 6(int) + 14: 10(int) Constant 5 + 15: 10(int) Constant 64 + 16: 10(int) Constant 2 + 17: 6(int) Constant 1 + 18: 6(int) Constant 0 + 19: 6(int) Constant 66 + 4(main): 2 Function None 3 + 5: Label + 13: 12(ptr) AccessChain 9(A) 11 + 20: 6(int) AtomicLoad 13 14 19 + Return + FunctionEnd diff --git a/Test/spv.queueFamilyScope.comp b/Test/spv.queueFamilyScope.comp new file mode 100644 index 0000000000..0d79850853 --- /dev/null +++ b/Test/spv.queueFamilyScope.comp @@ -0,0 +1,10 @@ +#version 450 +#extension GL_KHR_memory_scope_semantics : require + +layout (binding = 0) buffer Buffer { uint a; } A; + +void main() +{ + atomicLoad(A.a, gl_ScopeQueueFamily, gl_StorageSemanticsBuffer, gl_SemanticsAcquire); +} + diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 81af5af60e..83aac82755 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -503,6 +503,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.memoryScopeSemantics.comp", "spv.memoryScopeSemantics_Error.comp", "spv.multiView.frag", + "spv.queueFamilyScope.comp", "spv.RayGenShader11.rgen", "spv.subgroup.frag", "spv.subgroup.geom", From a38df83d3ec985d2fd569a29aac69c074083b4b6 Mon Sep 17 00:00:00 2001 From: Caio Marcelo de Oliveira Filho Date: Wed, 27 Jan 2021 00:30:59 -0800 Subject: [PATCH 094/365] Consider GL_EXT_scalar_block_layout when validating SPIR-V If GL_EXT_scalar_block_layout is requested by the shader, set the option to allow scalar blocks in the SPIR-V validator. Fix the existing tests using scalar layout to not expect "Validation failed". Fixes #2400. --- SPIRV/SpvTools.cpp | 1 + Test/baseResults/spv.scalarlayout.frag.out | 1 - Test/baseResults/spv.scalarlayoutfloat16.frag.out | 1 - glslang/MachineIndependent/localintermediate.h | 8 ++++++++ 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 16d051a9b2..56eb2484a1 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -153,6 +153,7 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector< spv_validator_options options = spvValidatorOptionsCreate(); spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets()); spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization); + spvValidatorOptionsSetScalarBlockLayout(options, intermediate.usingScalarBlockLayout()); spvValidateWithOptions(context, options, &binary, &diagnostic); // report diff --git a/Test/baseResults/spv.scalarlayout.frag.out b/Test/baseResults/spv.scalarlayout.frag.out index 549efaa80d..e08721f8b0 100644 --- a/Test/baseResults/spv.scalarlayout.frag.out +++ b/Test/baseResults/spv.scalarlayout.frag.out @@ -1,5 +1,4 @@ spv.scalarlayout.frag -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 20 diff --git a/Test/baseResults/spv.scalarlayoutfloat16.frag.out b/Test/baseResults/spv.scalarlayoutfloat16.frag.out index fc0dca843f..4f22730e3e 100644 --- a/Test/baseResults/spv.scalarlayoutfloat16.frag.out +++ b/Test/baseResults/spv.scalarlayoutfloat16.frag.out @@ -1,5 +1,4 @@ spv.scalarlayoutfloat16.frag -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 18 diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index f8d8e80199..d581959dc4 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -858,6 +858,14 @@ class TIntermediate { bool usingHlslIoMapping() { return false; } #endif + bool usingScalarBlockLayout() const { + for (auto extIt = requestedExtensions.begin(); extIt != requestedExtensions.end(); ++extIt) { + if (*extIt == E_GL_EXT_scalar_block_layout) + return true; + } + return false; + }; + void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee); void merge(TInfoSink&, TIntermediate&); void finalCheck(TInfoSink&, bool keepUncalled); From 3785ddd59ae7a1e8fc854635c857455376a291f1 Mon Sep 17 00:00:00 2001 From: Caio Marcelo de Oliveira Filho Date: Tue, 12 May 2020 08:29:00 -0700 Subject: [PATCH 095/365] Update known_good.json to pick up SPV_KHR_workgroup_memory_explicit_layout Also update the test expectations regarding validation accordingly and the in-tree spirv.hpp copy. --- SPIRV/spirv.hpp | 94 ++++++++++++++++++- Test/baseResults/hlsl.load.2dms.dx10.frag.out | 1 + .../hlsl.load.offset.dx10.frag.out | 1 + .../hlsl.load.offsetarray.dx10.frag.out | 1 + Test/baseResults/spv.nullInit.comp.out | 1 - known_good.json | 4 +- 6 files changed, 97 insertions(+), 5 deletions(-) diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 43dd2aaeec..af629efac6 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -168,10 +168,16 @@ enum ExecutionMode { ExecutionModeSampleInterlockUnorderedEXT = 5369, ExecutionModeShadingRateInterlockOrderedEXT = 5370, ExecutionModeShadingRateInterlockUnorderedEXT = 5371, + ExecutionModeSharedLocalMemorySizeINTEL = 5618, + ExecutionModeRoundingModeRTPINTEL = 5620, + ExecutionModeRoundingModeRTNINTEL = 5621, + ExecutionModeFloatingPointModeALTINTEL = 5622, + ExecutionModeFloatingPointModeIEEEINTEL = 5623, ExecutionModeMaxWorkgroupSizeINTEL = 5893, ExecutionModeMaxWorkDimINTEL = 5894, ExecutionModeNoGlobalOffsetINTEL = 5895, ExecutionModeNumSIMDWorkitemsINTEL = 5896, + ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, ExecutionModeMax = 0x7fffffff, }; @@ -204,6 +210,8 @@ enum StorageClass { StorageClassPhysicalStorageBuffer = 5349, StorageClassPhysicalStorageBufferEXT = 5349, StorageClassCodeSectionINTEL = 5605, + StorageClassDeviceOnlyINTEL = 5936, + StorageClassHostOnlyINTEL = 5937, StorageClassMax = 0x7fffffff, }; @@ -374,6 +382,8 @@ enum FPFastMathModeShift { FPFastMathModeNSZShift = 2, FPFastMathModeAllowRecipShift = 3, FPFastMathModeFastShift = 4, + FPFastMathModeAllowContractFastINTELShift = 16, + FPFastMathModeAllowReassocINTELShift = 17, FPFastMathModeMax = 0x7fffffff, }; @@ -384,6 +394,8 @@ enum FPFastMathModeMask { FPFastMathModeNSZMask = 0x00000004, FPFastMathModeAllowRecipMask = 0x00000008, FPFastMathModeFastMask = 0x00000010, + FPFastMathModeAllowContractFastINTELMask = 0x00010000, + FPFastMathModeAllowReassocINTELMask = 0x00020000, }; enum FPRoundingMode { @@ -484,12 +496,22 @@ enum Decoration { DecorationRestrictPointerEXT = 5355, DecorationAliasedPointer = 5356, DecorationAliasedPointerEXT = 5356, + DecorationSIMTCallINTEL = 5599, DecorationReferencedIndirectlyINTEL = 5602, + DecorationClobberINTEL = 5607, + DecorationSideEffectsINTEL = 5608, + DecorationVectorComputeVariableINTEL = 5624, + DecorationFuncParamIOKindINTEL = 5625, + DecorationVectorComputeFunctionINTEL = 5626, + DecorationStackCallINTEL = 5627, + DecorationGlobalVariableOffsetINTEL = 5628, DecorationCounterBuffer = 5634, DecorationHlslCounterBufferGOOGLE = 5634, DecorationHlslSemanticGOOGLE = 5635, DecorationUserSemantic = 5635, DecorationUserTypeGOOGLE = 5636, + DecorationFunctionRoundingModeINTEL = 5822, + DecorationFunctionDenormModeINTEL = 5823, DecorationRegisterINTEL = 5825, DecorationMemoryINTEL = 5826, DecorationNumbanksINTEL = 5827, @@ -502,6 +524,17 @@ enum Decoration { DecorationMergeINTEL = 5834, DecorationBankBitsINTEL = 5835, DecorationForcePow2DepthINTEL = 5836, + DecorationBurstCoalesceINTEL = 5899, + DecorationCacheSizeINTEL = 5900, + DecorationDontStaticallyCoalesceINTEL = 5901, + DecorationPrefetchINTEL = 5902, + DecorationStallEnableINTEL = 5905, + DecorationFuseLoopsInFunctionINTEL = 5907, + DecorationBufferLocationINTEL = 5921, + DecorationIOPipeStorageINTEL = 5944, + DecorationFunctionFloatingPointModeINTEL = 6080, + DecorationSingleElementVectorINTEL = 6085, + DecorationVectorComputeCallableFunctionINTEL = 6087, DecorationMax = 0x7fffffff, }; @@ -656,6 +689,7 @@ enum LoopControlShift { LoopControlLoopCoalesceINTELShift = 20, LoopControlMaxInterleavingINTELShift = 21, LoopControlSpeculatedIterationsINTELShift = 22, + LoopControlNoFusionINTELShift = 23, LoopControlMax = 0x7fffffff, }; @@ -677,6 +711,7 @@ enum LoopControlMask { LoopControlLoopCoalesceINTELMask = 0x00100000, LoopControlMaxInterleavingINTELMask = 0x00200000, LoopControlSpeculatedIterationsINTELMask = 0x00400000, + LoopControlNoFusionINTELMask = 0x00800000, }; enum FunctionControlShift { @@ -876,6 +911,9 @@ enum Capability { CapabilityFragmentShadingRateKHR = 4422, CapabilitySubgroupBallotKHR = 4423, CapabilityDrawParameters = 4427, + CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, + CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, + CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, CapabilitySubgroupVoteKHR = 4431, CapabilityStorageBuffer16BitAccess = 4433, CapabilityStorageUniformBufferBlock16 = 4433, @@ -966,21 +1004,37 @@ enum Capability { CapabilitySubgroupBufferBlockIOINTEL = 5569, CapabilitySubgroupImageBlockIOINTEL = 5570, CapabilitySubgroupImageMediaBlockIOINTEL = 5579, + CapabilityRoundToInfinityINTEL = 5582, + CapabilityFloatingPointModeINTEL = 5583, CapabilityIntegerFunctions2INTEL = 5584, CapabilityFunctionPointersINTEL = 5603, CapabilityIndirectReferencesINTEL = 5604, + CapabilityAsmINTEL = 5606, + CapabilityVectorComputeINTEL = 5617, + CapabilityVectorAnyINTEL = 5619, CapabilitySubgroupAvcMotionEstimationINTEL = 5696, CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, + CapabilityVariableLengthArrayINTEL = 5817, + CapabilityFunctionFloatControlINTEL = 5821, CapabilityFPGAMemoryAttributesINTEL = 5824, + CapabilityFPFastMathModeINTEL = 5837, + CapabilityArbitraryPrecisionIntegersINTEL = 5844, CapabilityUnstructuredLoopControlsINTEL = 5886, CapabilityFPGALoopControlsINTEL = 5888, CapabilityKernelAttributesINTEL = 5892, CapabilityFPGAKernelAttributesINTEL = 5897, + CapabilityFPGAMemoryAccessesINTEL = 5898, + CapabilityFPGAClusterAttributesINTEL = 5904, + CapabilityLoopFuseINTEL = 5906, + CapabilityFPGABufferLocationINTEL = 5920, + CapabilityUSMStorageClassesINTEL = 5935, + CapabilityIOPipesINTEL = 5943, CapabilityBlockingPipesINTEL = 5945, CapabilityFPGARegINTEL = 5948, CapabilityAtomicFloat32AddEXT = 6033, CapabilityAtomicFloat64AddEXT = 6034, + CapabilityLongConstantCompositeINTEL = 6089, CapabilityMax = 0x7fffffff, }; @@ -1047,6 +1101,18 @@ enum FragmentShadingRateMask { FragmentShadingRateHorizontal4PixelsMask = 0x00000008, }; +enum FPDenormMode { + FPDenormModePreserve = 0, + FPDenormModeFlushToZero = 1, + FPDenormModeMax = 0x7fffffff, +}; + +enum FPOperationMode { + FPOperationModeIEEE = 0, + FPOperationModeALT = 1, + FPOperationModeMax = 0x7fffffff, +}; + enum Op { OpNop = 0, OpUndef = 1, @@ -1466,8 +1532,11 @@ enum Op { OpUSubSatINTEL = 5596, OpIMul32x16INTEL = 5597, OpUMul32x16INTEL = 5598, - OpFunctionPointerINTEL = 5600, + OpConstFunctionPointerINTEL = 5600, OpFunctionPointerCallINTEL = 5601, + OpAsmTargetINTEL = 5609, + OpAsmINTEL = 5610, + OpAsmCallINTEL = 5611, OpDecorateString = 5632, OpDecorateStringGOOGLE = 5632, OpMemberDecorateString = 5633, @@ -1590,7 +1659,12 @@ enum Op { OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, + OpVariableLengthArrayINTEL = 5818, + OpSaveMemoryINTEL = 5819, + OpRestoreMemoryINTEL = 5820, OpLoopControlINTEL = 5887, + OpPtrCastToCrossWorkgroupINTEL = 5934, + OpCrossWorkgroupCastToPtrINTEL = 5938, OpReadPipeBlockingINTEL = 5946, OpWritePipeBlockingINTEL = 5947, OpFPGARegINTEL = 5949, @@ -1612,6 +1686,10 @@ enum Op { OpRayQueryGetIntersectionObjectToWorldKHR = 6031, OpRayQueryGetIntersectionWorldToObjectKHR = 6032, OpAtomicFAddEXT = 6035, + OpTypeBufferSurfaceINTEL = 6086, + OpTypeStructContinuedINTEL = 6090, + OpConstantCompositeContinuedINTEL = 6091, + OpSpecConstantCompositeContinuedINTEL = 6092, OpMax = 0x7fffffff, }; @@ -2036,8 +2114,11 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; + case OpConstFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; + case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; + case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; + case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; case OpDecorateString: *hasResult = false; *hasResultType = false; break; case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; @@ -2158,7 +2239,12 @@ 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 OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; + case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; + case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; + case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; + case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; @@ -2180,6 +2266,10 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; + case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; + case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; + case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; } } #endif /* SPV_ENABLE_UTILITY_CODE */ diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out index 9986074550..02365b8ff7 100644 --- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out +++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out @@ -357,6 +357,7 @@ using depth_any 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 130 diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out index d0fa5fd4a4..135b4afaa8 100644 --- a/Test/baseResults/hlsl.load.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out @@ -561,6 +561,7 @@ using depth_any 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 201 diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out index a379068a1e..24aa368064 100644 --- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out @@ -435,6 +435,7 @@ using depth_any 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 174 diff --git a/Test/baseResults/spv.nullInit.comp.out b/Test/baseResults/spv.nullInit.comp.out index a8e231b8e1..b7908b57d2 100755 --- a/Test/baseResults/spv.nullInit.comp.out +++ b/Test/baseResults/spv.nullInit.comp.out @@ -1,5 +1,4 @@ spv.nullInit.comp -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 37 diff --git a/known_good.json b/known_good.json index a01735ba74..9010538389 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "ad898cb9498c65cac7c5b6f9ebddb610bd0852ad" + "commit" : "b812fd634ea5ff307c374fb2b6340169f7db8b16" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "f027d53ded7e230e008d37c8b47ede7cd308e19d" + "commit" : "faa570afbc91ac73d594d787486bcf8f2df1ace0" } ] } From 4bfbf62794a037533a6d856184a93d499306508c Mon Sep 17 00:00:00 2001 From: Caio Marcelo de Oliveira Filho Date: Tue, 2 Jun 2020 16:58:51 -0700 Subject: [PATCH 096/365] Add support for GL_EXT_shared_memory_block Uses SPV_KHR_workgroup_memory_explicit_layout. Note that if GL_EXT_scalar_block_layout is enabled, Workgroup blocks can also use scalar layout. --- SPIRV/GLSL.ext.KHR.h | 1 + SPIRV/GlslangToSpv.cpp | 17 ++++ SPIRV/SpvPostProcess.cpp | 25 ++++++ SPIRV/SpvTools.cpp | 1 + SPIRV/doc.cpp | 4 + Test/baseResults/310.comp.out | 2 +- Test/baseResults/400.frag.out | 2 +- Test/baseResults/430.comp.out | 2 +- ...pMemoryExplicitLayout.16BitAccess.comp.out | 54 ++++++++++++ ...upMemoryExplicitLayout.8BitAccess.comp.out | 45 ++++++++++ ...citLayout.MixBlockNonBlock_Errors.comp.out | 4 + ...upMemoryExplicitLayout.MultiBlock.comp.out | 54 ++++++++++++ ...roupMemoryExplicitLayout.NonBlock.comp.out | 35 ++++++++ ...pMemoryExplicitLayout.SingleBlock.comp.out | 41 +++++++++ ...kgroupMemoryExplicitLayout.scalar.comp.out | 84 +++++++++++++++++++ ...kgroupMemoryExplicitLayout.std140.comp.out | 83 ++++++++++++++++++ ...kgroupMemoryExplicitLayout.std430.comp.out | 83 ++++++++++++++++++ ...groupMemoryExplicitLayout.16BitAccess.comp | 18 ++++ ...kgroupMemoryExplicitLayout.8BitAccess.comp | 16 ++++ ...xplicitLayout.MixBlockNonBlock_Errors.comp | 20 +++++ ...kgroupMemoryExplicitLayout.MultiBlock.comp | 21 +++++ ...orkgroupMemoryExplicitLayout.NonBlock.comp | 14 ++++ ...groupMemoryExplicitLayout.SingleBlock.comp | 15 ++++ ....WorkgroupMemoryExplicitLayout.scalar.comp | 39 +++++++++ ....WorkgroupMemoryExplicitLayout.std140.comp | 35 ++++++++ ....WorkgroupMemoryExplicitLayout.std430.comp | 35 ++++++++ glslang/MachineIndependent/ParseHelper.cpp | 43 ++++++++-- glslang/MachineIndependent/ParseHelper.h | 1 + glslang/MachineIndependent/Versions.cpp | 2 + glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/linkValidate.cpp | 21 +++++ .../MachineIndependent/localintermediate.h | 1 + gtests/Spv.FromFile.cpp | 11 +++ 33 files changed, 822 insertions(+), 8 deletions(-) create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp.out create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out create mode 100644 Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.scalar.comp create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.std140.comp create mode 100644 Test/spv.WorkgroupMemoryExplicitLayout.std430.comp diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index 9610c6eeee..175fa8d5c4 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -50,5 +50,6 @@ static const char* const E_SPV_KHR_ray_tracing = "SPV_KHR_ray_t static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_query"; static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate"; static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_terminate_invocation"; +static const char* const E_SPV_KHR_workgroup_memory_explicit_layout = "SPV_KHR_workgroup_memory_explicit_layout"; #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 49baf978e5..5ad2d33315 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -380,6 +380,7 @@ spv::Decoration TranslateBlockDecoration(const glslang::TType& type, bool useSto case glslang::EvqBuffer: return useStorageBuffer ? spv::DecorationBlock : spv::DecorationBufferBlock; case glslang::EvqVaryingIn: return spv::DecorationBlock; case glslang::EvqVaryingOut: return spv::DecorationBlock; + case glslang::EvqShared: return spv::DecorationBlock; #ifndef GLSLANG_WEB case glslang::EvqPayload: return spv::DecorationBlock; case glslang::EvqPayloadIn: return spv::DecorationBlock; @@ -436,6 +437,7 @@ spv::Decoration TranslateLayoutDecoration(const glslang::TType& type, glslang::T break; case glslang::EbtBlock: switch (type.getQualifier().storage) { + case glslang::EvqShared: case glslang::EvqUniform: case glslang::EvqBuffer: switch (type.getQualifier().layoutPacking) { @@ -1278,6 +1280,12 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T return spv::StorageClassUniformConstant; } + if (type.getQualifier().storage == glslang::EvqShared && type.getBasicType() == glslang::EbtBlock) { + builder.addExtension(spv::E_SPV_KHR_workgroup_memory_explicit_layout); + builder.addCapability(spv::CapabilityWorkgroupMemoryExplicitLayoutKHR); + return spv::StorageClassWorkgroup; + } + switch (type.getQualifier().storage) { case glslang::EvqGlobal: return spv::StorageClassPrivate; case glslang::EvqConstReadOnly: return spv::StorageClassFunction; @@ -3623,6 +3631,11 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* break; #endif default: + if (storageClass == spv::StorageClassWorkgroup && + node->getType().getBasicType() == glslang::EbtBlock) { + builder.addCapability(spv::CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR); + break; + } if (node->getType().contains16BitFloat()) builder.addCapability(spv::CapabilityFloat16); if (node->getType().contains16BitInt()) @@ -3641,6 +3654,9 @@ spv::Id TGlslangToSpvTraverser::createSpvVariable(const glslang::TIntermSymbol* } else if (storageClass == spv::StorageClassStorageBuffer) { builder.addIncorporatedExtension(spv::E_SPV_KHR_8bit_storage, spv::Spv_1_5); builder.addCapability(spv::CapabilityStorageBuffer8BitAccess); + } else if (storageClass == spv::StorageClassWorkgroup && + node->getType().getBasicType() == glslang::EbtBlock) { + builder.addCapability(spv::CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR); } else { builder.addCapability(spv::CapabilityInt8); } @@ -4407,6 +4423,7 @@ glslang::TLayoutPacking TGlslangToSpvTraverser::getExplicitLayout(const glslang: // has to be a uniform or buffer block or task in/out blocks if (type.getQualifier().storage != glslang::EvqUniform && type.getQualifier().storage != glslang::EvqBuffer && + type.getQualifier().storage != glslang::EvqShared && !type.getQualifier().isTaskMemory()) return glslang::ElpNone; diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp index 36d568f073..23d7b5a461 100644 --- a/SPIRV/SpvPostProcess.cpp +++ b/SPIRV/SpvPostProcess.cpp @@ -443,6 +443,31 @@ void Builder::postProcessFeatures() { memoryModel = spv::MemoryModelVulkanKHR; addIncorporatedExtension(spv::E_SPV_KHR_vulkan_memory_model, spv::Spv_1_5); } + + // Add Aliased decoration if there's more than one Workgroup Block variable. + if (capabilities.find(spv::CapabilityWorkgroupMemoryExplicitLayoutKHR) != capabilities.end()) { + assert(entryPoints.size() == 1); + auto &ep = entryPoints[0]; + + std::vector workgroup_variables; + for (int i = 0; i < (int)ep->getNumOperands(); i++) { + if (!ep->isIdOperand(i)) + continue; + + const Id id = ep->getIdOperand(i); + const Instruction *instr = module.getInstruction(id); + if (instr->getOpCode() != spv::OpVariable) + continue; + + if (instr->getImmediateOperand(0) == spv::StorageClassWorkgroup) + workgroup_variables.push_back(id); + } + + if (workgroup_variables.size() > 1) { + for (size_t i = 0; i < workgroup_variables.size(); i++) + addDecoration(workgroup_variables[i], spv::DecorationAliased); + } + } } #endif diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 56eb2484a1..5cfc4262d9 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -154,6 +154,7 @@ void SpirvToolsValidate(const glslang::TIntermediate& intermediate, std::vector< spvValidatorOptionsSetRelaxBlockLayout(options, intermediate.usingHlslOffsets()); spvValidatorOptionsSetBeforeHlslLegalization(options, prelegalization); spvValidatorOptionsSetScalarBlockLayout(options, intermediate.usingScalarBlockLayout()); + spvValidatorOptionsSetWorkgroupScalarBlockLayout(options, intermediate.usingScalarBlockLayout()); spvValidateWithOptions(context, options, &binary, &diagnostic); // report diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 5327f2212d..6805c3a6c3 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -967,6 +967,10 @@ const char* CapabilityString(int info) case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; + case CapabilityWorkgroupMemoryExplicitLayoutKHR: return "CapabilityWorkgroupMemoryExplicitLayoutKHR"; + case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR"; + case CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR"; + default: return "Bad"; } } diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out index 8874e20b1a..85b01161ea 100644 --- a/Test/baseResults/310.comp.out +++ b/Test/baseResults/310.comp.out @@ -7,7 +7,7 @@ ERROR: 0:39: 'in' : global storage input qualifier cannot be used in a compute s ERROR: 0:39: 'location qualifier on input' : not supported in this stage: compute ERROR: 0:40: 'in' : global storage input qualifier cannot be used in a compute shader ERROR: 0:41: 'out' : global storage output qualifier cannot be used in a compute shader -ERROR: 0:44: 'shared' : cannot apply layout qualifiers to a shared variable +ERROR: 0:44: 'shared block' : not supported for this version or the enabled extensions ERROR: 0:44: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers ERROR: 0:45: 'shared' : initializer can only be a null initializer ('{}') ERROR: 0:47: 'local_size' : can only apply to 'in' diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out index 90f73dc723..b7e88df9ed 100644 --- a/Test/baseResults/400.frag.out +++ b/Test/baseResults/400.frag.out @@ -34,7 +34,7 @@ ERROR: 0:183: 'assign' : cannot convert from ' const float' to ' temp 2-compone ERROR: 0:184: 'textureQueryLod' : no matching overloaded function found ERROR: 0:184: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' ERROR: 0:197: 'subroutine' : feature not yet implemented -ERROR: 0:197: '' : default qualifier requires 'uniform', 'buffer', 'in', or 'out' storage qualification +ERROR: 0:197: '' : default qualifier requires 'uniform', 'buffer', 'in', 'out' or 'shared' storage qualification ERROR: 0:198: 'subroutine' : feature not yet implemented ERROR: 0:199: 'subroutine' : feature not yet implemented ERROR: 0:201: '' : syntax error, unexpected PRECISE, expecting IDENTIFIER diff --git a/Test/baseResults/430.comp.out b/Test/baseResults/430.comp.out index ee126a0f1d..4d8495bcb3 100644 --- a/Test/baseResults/430.comp.out +++ b/Test/baseResults/430.comp.out @@ -5,7 +5,7 @@ ERROR: 0:43: 'in' : global storage input qualifier cannot be used in a compute s ERROR: 0:43: 'location qualifier on input' : not supported in this stage: compute ERROR: 0:44: 'in' : global storage input qualifier cannot be used in a compute shader ERROR: 0:45: 'out' : global storage output qualifier cannot be used in a compute shader -ERROR: 0:48: 'shared' : cannot apply layout qualifiers to a shared variable +ERROR: 0:48: 'shared block' : not supported for this version or the enabled extensions ERROR: 0:48: 'location' : can only apply to uniform, buffer, in, or out storage qualifiers ERROR: 0:49: 'shared' : initializer can only be a null initializer ('{}') ERROR: 0:52: 'local_size' : cannot change previously set size diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out new file mode 100644 index 0000000000..31dd2dd19b --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp.out @@ -0,0 +1,54 @@ +spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 25 + + Capability Shader + Capability Float16 + Capability Int16 + Capability CapabilityWorkgroupMemoryExplicitLayoutKHR + Capability CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR + Extension "SPV_KHR_workgroup_memory_explicit_layout" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 10 + ExecutionMode 4 LocalSize 2 1 1 + Source GLSL 430 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types" + SourceExtension "GL_EXT_shared_memory_block" + Name 4 "main" + Name 8 "first" + MemberName 8(first) 0 "a" + MemberName 8(first) 1 "f" + Name 10 "" + MemberDecorate 8(first) 0 Offset 0 + MemberDecorate 8(first) 1 Offset 2 + Decorate 8(first) Block + Decorate 24 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 16 1 + 7: TypeFloat 16 + 8(first): TypeStruct 6(int16_t) 7(float16_t) + 9: TypePointer Workgroup 8(first) + 10: 9(ptr) Variable Workgroup + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13: 6(int16_t) Constant 3 + 14: TypePointer Workgroup 6(int16_t) + 16: 11(int) Constant 1 + 17:7(float16_t) Constant 18982 + 18: TypePointer Workgroup 7(float16_t) + 20: TypeInt 32 0 + 21: TypeVector 20(int) 3 + 22: 20(int) Constant 2 + 23: 20(int) Constant 1 + 24: 21(ivec3) ConstantComposite 22 23 23 + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 10 12 + Store 15 13 + 19: 18(ptr) AccessChain 10 16 + Store 19 17 + Return + FunctionEnd diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out new file mode 100644 index 0000000000..3447791f24 --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp.out @@ -0,0 +1,45 @@ +spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 20 + + Capability Shader + Capability Int8 + Capability CapabilityWorkgroupMemoryExplicitLayoutKHR + Capability CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR + Extension "SPV_KHR_workgroup_memory_explicit_layout" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 9 + ExecutionMode 4 LocalSize 2 1 1 + Source GLSL 430 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types" + SourceExtension "GL_EXT_shared_memory_block" + Name 4 "main" + Name 7 "first" + MemberName 7(first) 0 "a" + Name 9 "" + MemberDecorate 7(first) 0 Offset 0 + Decorate 7(first) Block + Decorate 19 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 8 1 + 7(first): TypeStruct 6(int8_t) + 8: TypePointer Workgroup 7(first) + 9: 8(ptr) Variable Workgroup + 10: TypeInt 32 1 + 11: 10(int) Constant 0 + 12: 6(int8_t) Constant 2 + 13: TypePointer Workgroup 6(int8_t) + 15: TypeInt 32 0 + 16: TypeVector 15(int) 3 + 17: 15(int) Constant 2 + 18: 15(int) Constant 1 + 19: 16(ivec3) ConstantComposite 17 18 18 + 4(main): 2 Function None 3 + 5: Label + 14: 13(ptr) AccessChain 9 11 + Store 14 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp.out new file mode 100644 index 0000000000..82495d1142 --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp.out @@ -0,0 +1,4 @@ +spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp +ERROR: Linking compute stage: cannot mix use of shared variables inside and outside blocks + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out new file mode 100644 index 0000000000..b578bd3ad1 --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp.out @@ -0,0 +1,54 @@ +spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 24 + + Capability Shader + Capability CapabilityWorkgroupMemoryExplicitLayoutKHR + Extension "SPV_KHR_workgroup_memory_explicit_layout" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 9 16 + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 430 + SourceExtension "GL_EXT_shared_memory_block" + Name 4 "main" + Name 7 "first" + MemberName 7(first) 0 "a" + Name 9 "" + Name 14 "second" + MemberName 14(second) 0 "b" + Name 16 "" + MemberDecorate 7(first) 0 Offset 0 + Decorate 7(first) Block + MemberDecorate 14(second) 0 Offset 0 + Decorate 14(second) Block + Decorate 23 BuiltIn WorkgroupSize + Decorate 9 Aliased + Decorate 16 Aliased + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7(first): TypeStruct 6(int) + 8: TypePointer Workgroup 7(first) + 9: 8(ptr) Variable Workgroup + 10: 6(int) Constant 0 + 11: 6(int) Constant 2 + 12: TypePointer Workgroup 6(int) + 14(second): TypeStruct 6(int) + 15: TypePointer Workgroup 14(second) + 16: 15(ptr) Variable Workgroup + 17: 6(int) Constant 3 + 19: TypeInt 32 0 + 20: TypeVector 19(int) 3 + 21: 19(int) Constant 8 + 22: 19(int) Constant 1 + 23: 20(ivec3) ConstantComposite 21 22 22 + 4(main): 2 Function None 3 + 5: Label + 13: 12(ptr) AccessChain 9 10 + Store 13 11 + 18: 12(ptr) AccessChain 16 10 + Store 18 17 + Return + FunctionEnd diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out new file mode 100644 index 0000000000..19bcff6bcb --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp.out @@ -0,0 +1,35 @@ +spv.WorkgroupMemoryExplicitLayout.NonBlock.comp +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 17 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 8 10 + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 430 + SourceExtension "GL_EXT_shared_memory_block" + Name 4 "main" + Name 8 "a" + Name 10 "b" + Decorate 16 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Workgroup 6(int) + 8(a): 7(ptr) Variable Workgroup + 9: 6(int) Constant 2 + 10(b): 7(ptr) Variable Workgroup + 11: 6(int) Constant 3 + 12: TypeInt 32 0 + 13: TypeVector 12(int) 3 + 14: 12(int) Constant 8 + 15: 12(int) Constant 1 + 16: 13(ivec3) ConstantComposite 14 15 15 + 4(main): 2 Function None 3 + 5: Label + Store 8(a) 9 + Store 10(b) 11 + Return + FunctionEnd diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out new file mode 100644 index 0000000000..413fd2e84a --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp.out @@ -0,0 +1,41 @@ +spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 19 + + Capability Shader + Capability CapabilityWorkgroupMemoryExplicitLayoutKHR + Extension "SPV_KHR_workgroup_memory_explicit_layout" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 9 + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 430 + SourceExtension "GL_EXT_shared_memory_block" + Name 4 "main" + Name 7 "first" + MemberName 7(first) 0 "a" + Name 9 "" + MemberDecorate 7(first) 0 Offset 0 + Decorate 7(first) Block + Decorate 18 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7(first): TypeStruct 6(int) + 8: TypePointer Workgroup 7(first) + 9: 8(ptr) Variable Workgroup + 10: 6(int) Constant 0 + 11: 6(int) Constant 2 + 12: TypePointer Workgroup 6(int) + 14: TypeInt 32 0 + 15: TypeVector 14(int) 3 + 16: 14(int) Constant 8 + 17: 14(int) Constant 1 + 18: 15(ivec3) ConstantComposite 16 17 17 + 4(main): 2 Function None 3 + 5: Label + 13: 12(ptr) AccessChain 9 10 + Store 13 11 + Return + FunctionEnd diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out new file mode 100644 index 0000000000..6a43e23683 --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.scalar.comp.out @@ -0,0 +1,84 @@ +spv.WorkgroupMemoryExplicitLayout.scalar.comp +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 29 + + Capability Shader + Capability CapabilityWorkgroupMemoryExplicitLayoutKHR + Extension "SPV_KHR_workgroup_memory_explicit_layout" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 28 + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 430 + SourceExtension "GL_EXT_scalar_block_layout" + SourceExtension "GL_EXT_shared_memory_block" + Name 4 "main" + Name 17 "T" + MemberName 17(T) 0 "t" + Name 24 "S" + MemberName 24(S) 0 "f" + MemberName 24(S) 1 "v2" + MemberName 24(S) 2 "v3" + MemberName 24(S) 3 "v4" + MemberName 24(S) 4 "t" + MemberName 24(S) 5 "f_array" + MemberName 24(S) 6 "v2_array" + MemberName 24(S) 7 "v3_array" + MemberName 24(S) 8 "v4_array" + MemberName 24(S) 9 "t_array" + Name 26 "Block" + MemberName 26(Block) 0 "s" + MemberName 26(Block) 1 "s_array" + Name 28 "" + Decorate 10 BuiltIn WorkgroupSize + Decorate 16 ArrayStride 4 + MemberDecorate 17(T) 0 Offset 0 + Decorate 19 ArrayStride 4 + Decorate 20 ArrayStride 8 + Decorate 21 ArrayStride 12 + Decorate 22 ArrayStride 16 + Decorate 23 ArrayStride 12 + MemberDecorate 24(S) 0 Offset 0 + MemberDecorate 24(S) 1 Offset 4 + MemberDecorate 24(S) 2 Offset 12 + MemberDecorate 24(S) 3 Offset 24 + MemberDecorate 24(S) 4 Offset 40 + MemberDecorate 24(S) 5 Offset 52 + MemberDecorate 24(S) 6 Offset 76 + MemberDecorate 24(S) 7 Offset 124 + MemberDecorate 24(S) 8 Offset 196 + MemberDecorate 24(S) 9 Offset 292 + Decorate 25 ArrayStride 364 + MemberDecorate 26(Block) 0 Offset 0 + MemberDecorate 26(Block) 1 Offset 364 + Decorate 26(Block) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 3 + 8: 6(int) Constant 8 + 9: 6(int) Constant 1 + 10: 7(ivec3) ConstantComposite 8 9 9 + 11: TypeFloat 32 + 12: TypeVector 11(float) 2 + 13: TypeVector 11(float) 3 + 14: TypeVector 11(float) 4 + 15: 6(int) Constant 3 + 16: TypeArray 11(float) 15 + 17(T): TypeStruct 16 + 18: 6(int) Constant 6 + 19: TypeArray 11(float) 18 + 20: TypeArray 12(fvec2) 18 + 21: TypeArray 13(fvec3) 18 + 22: TypeArray 14(fvec4) 18 + 23: TypeArray 17(T) 18 + 24(S): TypeStruct 11(float) 12(fvec2) 13(fvec3) 14(fvec4) 17(T) 19 20 21 22 23 + 25: TypeArray 24(S) 18 + 26(Block): TypeStruct 24(S) 25 + 27: TypePointer Workgroup 26(Block) + 28: 27(ptr) Variable Workgroup + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out new file mode 100644 index 0000000000..df4b8aed4e --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std140.comp.out @@ -0,0 +1,83 @@ +spv.WorkgroupMemoryExplicitLayout.std140.comp +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 29 + + Capability Shader + Capability CapabilityWorkgroupMemoryExplicitLayoutKHR + Extension "SPV_KHR_workgroup_memory_explicit_layout" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 28 + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 430 + SourceExtension "GL_EXT_shared_memory_block" + Name 4 "main" + Name 17 "T" + MemberName 17(T) 0 "t" + Name 24 "S" + MemberName 24(S) 0 "f" + MemberName 24(S) 1 "v2" + MemberName 24(S) 2 "v3" + MemberName 24(S) 3 "v4" + MemberName 24(S) 4 "t" + MemberName 24(S) 5 "f_array" + MemberName 24(S) 6 "v2_array" + MemberName 24(S) 7 "v3_array" + MemberName 24(S) 8 "v4_array" + MemberName 24(S) 9 "t_array" + Name 26 "Block" + MemberName 26(Block) 0 "s" + MemberName 26(Block) 1 "s_array" + Name 28 "" + Decorate 10 BuiltIn WorkgroupSize + Decorate 16 ArrayStride 16 + MemberDecorate 17(T) 0 Offset 0 + Decorate 19 ArrayStride 16 + Decorate 20 ArrayStride 16 + Decorate 21 ArrayStride 16 + Decorate 22 ArrayStride 16 + Decorate 23 ArrayStride 48 + MemberDecorate 24(S) 0 Offset 0 + MemberDecorate 24(S) 1 Offset 8 + MemberDecorate 24(S) 2 Offset 16 + MemberDecorate 24(S) 3 Offset 32 + MemberDecorate 24(S) 4 Offset 48 + MemberDecorate 24(S) 5 Offset 96 + MemberDecorate 24(S) 6 Offset 192 + MemberDecorate 24(S) 7 Offset 288 + MemberDecorate 24(S) 8 Offset 384 + MemberDecorate 24(S) 9 Offset 480 + Decorate 25 ArrayStride 768 + MemberDecorate 26(Block) 0 Offset 0 + MemberDecorate 26(Block) 1 Offset 768 + Decorate 26(Block) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 3 + 8: 6(int) Constant 8 + 9: 6(int) Constant 1 + 10: 7(ivec3) ConstantComposite 8 9 9 + 11: TypeFloat 32 + 12: TypeVector 11(float) 2 + 13: TypeVector 11(float) 3 + 14: TypeVector 11(float) 4 + 15: 6(int) Constant 3 + 16: TypeArray 11(float) 15 + 17(T): TypeStruct 16 + 18: 6(int) Constant 6 + 19: TypeArray 11(float) 18 + 20: TypeArray 12(fvec2) 18 + 21: TypeArray 13(fvec3) 18 + 22: TypeArray 14(fvec4) 18 + 23: TypeArray 17(T) 18 + 24(S): TypeStruct 11(float) 12(fvec2) 13(fvec3) 14(fvec4) 17(T) 19 20 21 22 23 + 25: TypeArray 24(S) 18 + 26(Block): TypeStruct 24(S) 25 + 27: TypePointer Workgroup 26(Block) + 28: 27(ptr) Variable Workgroup + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out new file mode 100644 index 0000000000..e782784b68 --- /dev/null +++ b/Test/baseResults/spv.WorkgroupMemoryExplicitLayout.std430.comp.out @@ -0,0 +1,83 @@ +spv.WorkgroupMemoryExplicitLayout.std430.comp +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 29 + + Capability Shader + Capability CapabilityWorkgroupMemoryExplicitLayoutKHR + Extension "SPV_KHR_workgroup_memory_explicit_layout" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 28 + ExecutionMode 4 LocalSize 8 1 1 + Source GLSL 430 + SourceExtension "GL_EXT_shared_memory_block" + Name 4 "main" + Name 17 "T" + MemberName 17(T) 0 "t" + Name 24 "S" + MemberName 24(S) 0 "f" + MemberName 24(S) 1 "v2" + MemberName 24(S) 2 "v3" + MemberName 24(S) 3 "v4" + MemberName 24(S) 4 "t" + MemberName 24(S) 5 "f_array" + MemberName 24(S) 6 "v2_array" + MemberName 24(S) 7 "v3_array" + MemberName 24(S) 8 "v4_array" + MemberName 24(S) 9 "t_array" + Name 26 "Block" + MemberName 26(Block) 0 "s" + MemberName 26(Block) 1 "s_array" + Name 28 "" + Decorate 10 BuiltIn WorkgroupSize + Decorate 16 ArrayStride 4 + MemberDecorate 17(T) 0 Offset 0 + Decorate 19 ArrayStride 4 + Decorate 20 ArrayStride 8 + Decorate 21 ArrayStride 16 + Decorate 22 ArrayStride 16 + Decorate 23 ArrayStride 12 + MemberDecorate 24(S) 0 Offset 0 + MemberDecorate 24(S) 1 Offset 8 + MemberDecorate 24(S) 2 Offset 16 + MemberDecorate 24(S) 3 Offset 32 + MemberDecorate 24(S) 4 Offset 48 + MemberDecorate 24(S) 5 Offset 60 + MemberDecorate 24(S) 6 Offset 88 + MemberDecorate 24(S) 7 Offset 144 + MemberDecorate 24(S) 8 Offset 240 + MemberDecorate 24(S) 9 Offset 336 + Decorate 25 ArrayStride 416 + MemberDecorate 26(Block) 0 Offset 0 + MemberDecorate 26(Block) 1 Offset 416 + Decorate 26(Block) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 3 + 8: 6(int) Constant 8 + 9: 6(int) Constant 1 + 10: 7(ivec3) ConstantComposite 8 9 9 + 11: TypeFloat 32 + 12: TypeVector 11(float) 2 + 13: TypeVector 11(float) 3 + 14: TypeVector 11(float) 4 + 15: 6(int) Constant 3 + 16: TypeArray 11(float) 15 + 17(T): TypeStruct 16 + 18: 6(int) Constant 6 + 19: TypeArray 11(float) 18 + 20: TypeArray 12(fvec2) 18 + 21: TypeArray 13(fvec3) 18 + 22: TypeArray 14(fvec4) 18 + 23: TypeArray 17(T) 18 + 24(S): TypeStruct 11(float) 12(fvec2) 13(fvec3) 14(fvec4) 17(T) 19 20 21 22 23 + 25: TypeArray 24(S) 18 + 26(Block): TypeStruct 24(S) 25 + 27: TypePointer Workgroup 26(Block) + 28: 27(ptr) Variable Workgroup + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp b/Test/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp new file mode 100644 index 0000000000..e06555e4a6 --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp @@ -0,0 +1,18 @@ +#version 430 core + +#extension GL_EXT_shared_memory_block : enable +#extension GL_EXT_shader_explicit_arithmetic_types: enable + +layout(local_size_x = 2) in; + +shared first +{ + int16_t a; + float16_t f; +}; + +void main() +{ + a = int16_t(3); + f = float16_t(12.3); +} diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp b/Test/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp new file mode 100644 index 0000000000..aaa512c2fa --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp @@ -0,0 +1,16 @@ +#version 430 core + +#extension GL_EXT_shared_memory_block : enable +#extension GL_EXT_shader_explicit_arithmetic_types: enable + +layout(local_size_x = 2) in; + +shared first +{ + int8_t a; +}; + +void main() +{ + a = int8_t(2); +} diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp b/Test/spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp new file mode 100644 index 0000000000..573d092298 --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp @@ -0,0 +1,20 @@ +#version 430 core + +#extension GL_EXT_shared_memory_block : enable + +layout(local_size_x = 8) in; + +shared first +{ + int a; +}; + +shared int b; + +// Cannot mix shared block and shared non-block, will fail at linking. + +void main() +{ + a = 2; + b = 3; +} diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp b/Test/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp new file mode 100644 index 0000000000..675a4433dd --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp @@ -0,0 +1,21 @@ +#version 430 core + +#extension GL_EXT_shared_memory_block : enable + +layout(local_size_x = 8) in; + +shared first +{ + int a; +}; + +shared second +{ + int b; +}; + +void main() +{ + a = 2; + b = 3; +} diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp b/Test/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp new file mode 100644 index 0000000000..38316a50d6 --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.NonBlock.comp @@ -0,0 +1,14 @@ +#version 430 core + +#extension GL_EXT_shared_memory_block : enable + +layout(local_size_x = 8) in; + +shared int a; +shared int b; + +void main() +{ + a = 2; + b = 3; +} diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp b/Test/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp new file mode 100644 index 0000000000..2a17c61c45 --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp @@ -0,0 +1,15 @@ +#version 430 core + +#extension GL_EXT_shared_memory_block : enable + +layout(local_size_x = 8) in; + +shared first +{ + int a; +}; + +void main() +{ + a = 2; +} diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.scalar.comp b/Test/spv.WorkgroupMemoryExplicitLayout.scalar.comp new file mode 100644 index 0000000000..38085b4d1b --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.scalar.comp @@ -0,0 +1,39 @@ +#version 430 core + +#extension GL_EXT_scalar_block_layout : enable +#extension GL_EXT_shared_memory_block : enable + +layout(local_size_x = 8) in; + +struct T +{ + float t[3]; +}; + +struct S +{ + float f; + vec2 v2; + vec3 v3; + vec4 v4; + T t; + + float f_array[6]; + vec2 v2_array[6]; + vec3 v3_array[6]; + vec4 v4_array[6]; + T t_array[6]; +}; + +// Use a default qualifier. +layout(scalar) shared; + +shared Block +{ + S s; + S s_array[6]; +}; + +void main() +{ +} diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.std140.comp b/Test/spv.WorkgroupMemoryExplicitLayout.std140.comp new file mode 100644 index 0000000000..f4f2475a2d --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.std140.comp @@ -0,0 +1,35 @@ +#version 430 core + +#extension GL_EXT_shared_memory_block : enable + +layout(local_size_x = 8) in; + +struct T +{ + float t[3]; +}; + +struct S +{ + float f; + vec2 v2; + vec3 v3; + vec4 v4; + T t; + + float f_array[6]; + vec2 v2_array[6]; + vec3 v3_array[6]; + vec4 v4_array[6]; + T t_array[6]; +}; + +layout(std140) shared Block +{ + S s; + S s_array[6]; +}; + +void main() +{ +} diff --git a/Test/spv.WorkgroupMemoryExplicitLayout.std430.comp b/Test/spv.WorkgroupMemoryExplicitLayout.std430.comp new file mode 100644 index 0000000000..717593b662 --- /dev/null +++ b/Test/spv.WorkgroupMemoryExplicitLayout.std430.comp @@ -0,0 +1,35 @@ +#version 430 core + +#extension GL_EXT_shared_memory_block : enable + +layout(local_size_x = 8) in; + +struct T +{ + float t[3]; +}; + +struct S +{ + float f; + vec2 v2; + vec3 v3; + vec4 v4; + T t; + + float f_array[6]; + vec2 v2_array[6]; + vec3 v3_array[6]; + vec4 v4_array[6]; + T t_array[6]; +}; + +layout(std430) shared Block +{ + S s; + S s_array[6]; +}; + +void main() +{ +} diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index d4b360ceea..8927b8239b 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -87,6 +87,10 @@ TParseContext::TParseContext(TSymbolTable& symbolTable, TIntermediate& interm, b globalInputDefaults.clear(); globalOutputDefaults.clear(); + globalSharedDefaults.clear(); + globalSharedDefaults.layoutMatrix = ElmColumnMajor; + globalSharedDefaults.layoutPacking = ElpStd430; + #ifndef GLSLANG_WEB // "Shaders in the transform // feedback capturing mode have an initial global default of @@ -6033,12 +6037,28 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) } } +static bool storageCanHaveLayoutInBlock(const enum TStorageQualifier storage) +{ + switch (storage) { + case EvqUniform: + case EvqBuffer: + case EvqShared: + return true; + default: + return false; + } +} + // Do layout error checking that can be done within a layout qualifier proper, not needing to know // if there are blocks, atomic counters, variables, etc. void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier& qualifier) { - if (qualifier.storage == EvqShared && qualifier.hasLayout()) - error(loc, "cannot apply layout qualifiers to a shared variable", "shared", ""); + if (qualifier.storage == EvqShared && qualifier.hasLayout()) { + if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_4) { + error(loc, "shared block requires at least SPIR-V 1.4", "shared block", ""); + } + profileRequires(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shared_memory_block, "shared block"); + } // "It is a compile-time error to use *component* without also specifying the location qualifier (order does not matter)." if (qualifier.hasComponent() && ! qualifier.hasLocation()) @@ -6121,7 +6141,7 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier error(loc, "can only be used on an output", "xfb layout qualifier", ""); } if (qualifier.hasUniformLayout()) { - if (! qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory()) { + if (!storageCanHaveLayoutInBlock(qualifier.storage) && !qualifier.isTaskMemory()) { if (qualifier.hasMatrix() || qualifier.hasPacking()) error(loc, "matrix or packing qualifiers can only be used on a uniform or buffer", "layout", ""); if (qualifier.hasOffset() || qualifier.hasAlign()) @@ -7667,6 +7687,7 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con case EvqBuffer: defaultQualification = globalBufferDefaults; break; case EvqVaryingIn: defaultQualification = globalInputDefaults; break; case EvqVaryingOut: defaultQualification = globalOutputDefaults; break; + case EvqShared: defaultQualification = globalSharedDefaults; break; default: defaultQualification.clear(); break; } @@ -7930,6 +7951,12 @@ void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& q error(loc, "output blocks cannot be used in a task shader", "out", ""); } break; + case EvqShared: + if (spvVersion.spv > 0 && spvVersion.spv < EShTargetSpv_1_4) { + error(loc, "shared block requires at least SPIR-V 1.4", "shared block", ""); + } + profileRequires(loc, EEsProfile | ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shared_memory_block, "shared block"); + break; #ifndef GLSLANG_WEB case EvqPayload: profileRequires(loc, ~EEsProfile, 460, 2, extsrt, "rayPayloadNV block"); @@ -8088,7 +8115,7 @@ void TParseContext::fixXfbOffsets(TQualifier& qualifier, TTypeList& typeList) // void TParseContext::fixBlockUniformOffsets(TQualifier& qualifier, TTypeList& typeList) { - if (!qualifier.isUniformOrBuffer() && !qualifier.isTaskMemory()) + if (!storageCanHaveLayoutInBlock(qualifier.storage) && !qualifier.isTaskMemory()) return; if (qualifier.layoutPacking != ElpStd140 && qualifier.layoutPacking != ElpStd430 && qualifier.layoutPacking != ElpScalar) return; @@ -8602,8 +8629,14 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con } #endif break; + case EvqShared: + if (qualifier.hasMatrix()) + globalSharedDefaults.layoutMatrix = qualifier.layoutMatrix; + if (qualifier.hasPacking()) + globalSharedDefaults.layoutPacking = qualifier.layoutPacking; + break; default: - error(loc, "default qualifier requires 'uniform', 'buffer', 'in', or 'out' storage qualification", "", ""); + error(loc, "default qualifier requires 'uniform', 'buffer', 'in', 'out' or 'shared' storage qualification", "", ""); return; } diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index fe2b6fbbe1..4093fbfe0f 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -485,6 +485,7 @@ class TParseContext : public TParseContextBase { TQualifier globalUniformDefaults; TQualifier globalInputDefaults; TQualifier globalOutputDefaults; + TQualifier globalSharedDefaults; TString currentCaller; // name of last function body entered (not valid when at global scope) #ifndef GLSLANG_WEB int* atomicUintOffsets; // to become an array of the right size to hold an offset per binding point diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 517ff9f829..488c98c5cc 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -331,6 +331,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable; extensionBehavior[E_GL_EXT_terminate_invocation] = EBhDisable; + extensionBehavior[E_GL_EXT_shared_memory_block] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -472,6 +473,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_demote_to_helper_invocation 1\n" "#define GL_EXT_debug_printf 1\n" "#define GL_EXT_fragment_shading_rate 1\n" + "#define GL_EXT_shared_memory_block 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 6b5efbce0a..f377973a85 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -202,6 +202,7 @@ const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_imp const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate"; const char* const E_GL_EXT_shader_image_int64 = "GL_EXT_shader_image_int64"; const char* const E_GL_EXT_null_initializer = "GL_EXT_null_initializer"; +const char* const E_GL_EXT_shared_memory_block = "GL_EXT_shared_memory_block"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 4e84adbf0a..2d14031c72 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -653,6 +653,25 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy #endif } +void TIntermediate::sharedBlockCheck(TInfoSink& infoSink) +{ + bool has_shared_block = false; + bool has_shared_non_block = false; + TIntermSequence& linkObjects = findLinkerObjects()->getSequence(); + for (size_t i = 0; i < linkObjects.size(); ++i) { + const TType& type = linkObjects[i]->getAsTyped()->getType(); + const TQualifier& qualifier = type.getQualifier(); + if (qualifier.storage == glslang::EvqShared) { + if (type.getBasicType() == glslang::EbtBlock) + has_shared_block = true; + else + has_shared_non_block = true; + } + } + if (has_shared_block && has_shared_non_block) + error(infoSink, "cannot mix use of shared variables inside and outside blocks"); +} + // // Do final link-time error checking of a complete (merged) intermediate representation. // (Much error checking was done during merging). @@ -778,6 +797,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) error(infoSink, "post_depth_coverage requires early_fragment_tests"); break; case EShLangCompute: + sharedBlockCheck(infoSink); break; case EShLangRayGen: case EShLangIntersect: @@ -810,6 +830,7 @@ void TIntermediate::finalCheck(TInfoSink& infoSink, bool keepUncalled) case EShLangTaskNV: if (numTaskNVBlocks > 1) error(infoSink, "Only one taskNV interface block is allowed per shader"); + sharedBlockCheck(infoSink); break; default: error(infoSink, "Unknown Stage."); diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index d581959dc4..84d19d45bd 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -954,6 +954,7 @@ class TIntermediate { void checkCallGraphCycles(TInfoSink&); void checkCallGraphBodies(TInfoSink&, bool keepUncalled); void inOutLocationCheck(TInfoSink&); + void sharedBlockCheck(TInfoSink&); bool userOutputUsed() const; bool isSpecializationOperation(const TIntermOperator&) const; bool isNonuniformPropagating(TOperator) const; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 83aac82755..2ee292e4ee 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -582,6 +582,17 @@ INSTANTIATE_TEST_SUITE_P( "spv.ext.World3x4.rahit", "spv.ext.AccelDecl.frag", "spv.ext.RayQueryDecl.frag", + + // SPV_KHR_workgroup_memory_explicit_layout depends on SPIR-V 1.4. + "spv.WorkgroupMemoryExplicitLayout.SingleBlock.comp", + "spv.WorkgroupMemoryExplicitLayout.MultiBlock.comp", + "spv.WorkgroupMemoryExplicitLayout.8BitAccess.comp", + "spv.WorkgroupMemoryExplicitLayout.16BitAccess.comp", + "spv.WorkgroupMemoryExplicitLayout.NonBlock.comp", + "spv.WorkgroupMemoryExplicitLayout.MixBlockNonBlock_Errors.comp", + "spv.WorkgroupMemoryExplicitLayout.std140.comp", + "spv.WorkgroupMemoryExplicitLayout.std430.comp", + "spv.WorkgroupMemoryExplicitLayout.scalar.comp", })), FileNameAsCustomTestSuffix ); From 546f626c586fbe2ce17ffa4ef9b060f8da4afc00 Mon Sep 17 00:00:00 2001 From: Gleb Mazovetskiy Date: Sat, 30 Jan 2021 15:58:29 +0000 Subject: [PATCH 097/365] callGraph.push_front -> emplace_front to fix UBSAN UBSAN rightly complains on `push_front` here: glslang/MachineIndependent/localintermediate.h:100:8: runtime error: load of value 160, which is not a valid value for type 'bool' #0 in glslang::TCall::TCall(glslang::TCall&&) glslang/MachineIndependent/localintermediate.h:100 #1 in void __gnu_cxx::new_allocator >::construct(glslang::TCall*, glslang::TCall&&) /usr/include/c++/10/ext/new_allocator.h:150 #2 in void std::allocator_traits > >::construct(std::allocator >&, glslang::TCall*, glslang::TCall&&) /usr/include/c++/10/bits/alloc_traits.h:512 #3 in std::_List_node* std::__cxx11::list >::_M_create_node(glslang::TCall&&) (...) #4 in void std::__cxx11::list >::_M_insert(std::_List_iterator, glslang::TCall&&) /usr/include/c++/10/bits/stl_list.h:1911 #5 in std::__cxx11::list >::push_front(glslang::TCall&&) /usr/include/c++/10/bits/stl_list.h:1167 #6 in glslang::TIntermediate::addToCallGraph(TInfoSink&, std::__cxx11::basic_string, glslang::pool_allocator > const&, std::__cxx11::basic_string, glslang::pool_allocator > const&) glslang/MachineIndependent/Intermediate.cpp:2860 What happens here: 1. TCall's bool fields are not initialized on construction. 2. `push_front` move the `TCall` passed into it. 3. The move constructor copies unitialized bool, which may have an out-of-range value. What this fix does: Calls `emplace_back` to ensure no copy/move constructor is called. Fixes #2222 Refs #2112 --- glslang/MachineIndependent/Intermediate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index f6172a2bf7..b7ad87a92f 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -2870,7 +2870,7 @@ void TIntermediate::addToCallGraph(TInfoSink& /*infoSink*/, const TString& calle return; } - callGraph.push_front(TCall(caller, callee)); + callGraph.emplace_front(caller, callee); } // From 57e6a38f2aa52495c3ac1bef7fae252aac3a8e22 Mon Sep 17 00:00:00 2001 From: David Neto Date: Wed, 3 Feb 2021 14:14:11 -0500 Subject: [PATCH 098/365] Remove useless semicolon The extra semicolon causes a build failure if warnings are turned up high, and warnings-as-errors is on. (-Werror=extra-semi) --- glslang/MachineIndependent/localintermediate.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 84d19d45bd..8550ad0257 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -864,7 +864,7 @@ class TIntermediate { return true; } return false; - }; + } void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee); void merge(TInfoSink&, TIntermediate&); From c8db4f437a5e7ae74f0236c47fbe485f4659c653 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Sun, 7 Feb 2021 17:20:14 +0800 Subject: [PATCH 099/365] Cannot specify atomic counter with location. Signed-off-by: ZhiqianXia --- glslang/MachineIndependent/ParseHelper.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 8927b8239b..f8a663c524 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5767,6 +5767,8 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb error(loc, "can only specify on a uniform block", "push_constant", ""); if (qualifier.isShaderRecord()) error(loc, "can only specify on a buffer block", "shaderRecordNV", ""); + if (qualifier.hasLocation() && type.isAtomic()) + error(loc, "cannot specify atomic counter with location","atomic",""); } break; default: From 29b2a08133e7ca753881028a53c5281599ea0db0 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Tue, 9 Feb 2021 09:39:40 +0800 Subject: [PATCH 100/365] Cannot specify atomic counter with location. Signed-off-by: ZhiqianXia --- glslang/MachineIndependent/ParseHelper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index f8a663c524..9ffa298e21 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5767,8 +5767,8 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb error(loc, "can only specify on a uniform block", "push_constant", ""); if (qualifier.isShaderRecord()) error(loc, "can only specify on a buffer block", "shaderRecordNV", ""); - if (qualifier.hasLocation() && type.isAtomic()) - error(loc, "cannot specify atomic counter with location","atomic",""); + if (qualifier.hasLocation() && type.isAtomic()) + error(loc, "cannot specify on atomic counter", "atomic_uint", ""); } break; default: From 5100efdfa9e0ad8ee71eb41238a16746dd3dd76c Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Tue, 9 Feb 2021 09:42:48 +0800 Subject: [PATCH 101/365] Cannot specify atomic counter with location. Signed-off-by: ZhiqianXia --- glslang/MachineIndependent/ParseHelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 9ffa298e21..581ef9f229 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5768,7 +5768,7 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb if (qualifier.isShaderRecord()) error(loc, "can only specify on a buffer block", "shaderRecordNV", ""); if (qualifier.hasLocation() && type.isAtomic()) - error(loc, "cannot specify on atomic counter", "atomic_uint", ""); + error(loc, "cannot specify on atomic counter", "location", ""); } break; default: From 05798c17fb17d339d66e064a407e75ceae4c0316 Mon Sep 17 00:00:00 2001 From: Evgeny Proydakov Date: Sun, 7 Feb 2021 15:37:03 +0300 Subject: [PATCH 102/365] Fixed issues 2496. Used option 4: parse_version.cmake to avoid python3 usage. https://github.com/KhronosGroup/glslang/issues/2496 --- CMakeLists.txt | 48 +++++++++++++-------------------------------- build_info.h.tmpl | 8 ++++---- build_info.py | 14 ++++++------- parse_version.cmake | 41 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 45 deletions(-) create mode 100644 parse_version.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 5b176e4510..d582926f15 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -234,55 +234,33 @@ if(NOT COMMAND find_host_package) endmacro() endif() -# CMake needs to find the right version of python, right from the beginning, -# otherwise, it will find the wrong version and fail later -find_host_package(PythonInterp 3 REQUIRED) - # Root directory for build-time generated include files set(GLSLANG_GENERATED_INCLUDEDIR "${CMAKE_BINARY_DIR}/include") ################################################################################ # Build version information generation ################################################################################ +include(parse_version.cmake) set(GLSLANG_CHANGES_FILE "${CMAKE_CURRENT_SOURCE_DIR}/CHANGES.md") -set(GLSLANG_BUILD_INFO_PY "${CMAKE_CURRENT_SOURCE_DIR}/build_info.py") set(GLSLANG_BUILD_INFO_H_TMPL "${CMAKE_CURRENT_SOURCE_DIR}/build_info.h.tmpl") set(GLSLANG_BUILD_INFO_H "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/build_info.h") -# Command to build the build_info.h file -add_custom_command( - OUTPUT ${GLSLANG_BUILD_INFO_H} - COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_BUILD_INFO_PY}" - ${CMAKE_CURRENT_SOURCE_DIR} - "-i" ${GLSLANG_BUILD_INFO_H_TMPL} - "-o" ${GLSLANG_BUILD_INFO_H} - DEPENDS ${GLSLANG_BUILD_INFO_PY} - ${GLSLANG_CHANGES_FILE} - ${GLSLANG_BUILD_INFO_H_TMPL} - COMMENT "Generating ${GLSLANG_BUILD_INFO_H}") - -# Target to build the build_info.h file -add_custom_target(glslang-build-info DEPENDS ${GLSLANG_BUILD_INFO_H}) - -# Populate the CMake GLSLANG_VERSION* variables with the build version -# information. -execute_process( - COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_BUILD_INFO_PY}" - ${CMAKE_CURRENT_SOURCE_DIR} "..<-flavor>;;;;" - OUTPUT_VARIABLE "GLSLANG_VERSIONS" - OUTPUT_STRIP_TRAILING_WHITESPACE) -list(GET "GLSLANG_VERSIONS" 0 "GLSLANG_VERSION") -list(GET "GLSLANG_VERSIONS" 1 "GLSLANG_VERSION_MAJOR") -list(GET "GLSLANG_VERSIONS" 2 "GLSLANG_VERSION_MINOR") -list(GET "GLSLANG_VERSIONS" 3 "GLSLANG_VERSION_PATCH") -list(GET "GLSLANG_VERSIONS" 4 "GLSLANG_VERSION_FLAVOR") -configure_file(${GLSLANG_CHANGES_FILE} "${CMAKE_CURRENT_BINARY_DIR}/CHANGES.md") # Required to re-run cmake on version change +parse_version(${GLSLANG_CHANGES_FILE} GLSLANG) + +function(configurate_version) + set(major ${GLSLANG_VERSION_MAJOR}) + set(minor ${GLSLANG_VERSION_MINOR}) + set(patch ${GLSLANG_VERSION_PATCH}) + set(flavor ${GLSLANG_VERSION_FLAVOR}) + configure_file(${GLSLANG_BUILD_INFO_H_TMPL} ${GLSLANG_BUILD_INFO_H} @ONLY) +endfunction() + +configurate_version() # glslang_add_build_info_dependency() adds the glslang-build-info dependency and # generated include directories to target. function(glslang_add_build_info_dependency target) target_include_directories(${target} PUBLIC $) - add_dependencies(${target} glslang-build-info) endfunction() # glslang_only_export_explicit_symbols() makes the symbol visibility hidden by @@ -316,6 +294,8 @@ else() endif() if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External) + find_package(PythonInterp 3 REQUIRED) + # We depend on these for later projects, so they should come first. add_subdirectory(External) endif() diff --git a/build_info.h.tmpl b/build_info.h.tmpl index eacecb09a0..5b5e9e62c7 100644 --- a/build_info.h.tmpl +++ b/build_info.h.tmpl @@ -34,10 +34,10 @@ #ifndef GLSLANG_BUILD_INFO #define GLSLANG_BUILD_INFO -#define GLSLANG_VERSION_MAJOR -#define GLSLANG_VERSION_MINOR -#define GLSLANG_VERSION_PATCH -#define GLSLANG_VERSION_FLAVOR "" +#define GLSLANG_VERSION_MAJOR @major@ +#define GLSLANG_VERSION_MINOR @minor@ +#define GLSLANG_VERSION_PATCH @patch@ +#define GLSLANG_VERSION_FLAVOR "@flavor@" #define GLSLANG_VERSION_GREATER_THAN(major, minor, patch) \ (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ diff --git a/build_info.py b/build_info.py index 2ac864b030..7c1998f6e0 100755 --- a/build_info.py +++ b/build_info.py @@ -201,13 +201,13 @@ def main(): software_version = deduce_software_version(directory) commit = describe(directory) output = template \ - .replace("", software_version["major"]) \ - .replace("", software_version["minor"]) \ - .replace("", software_version["patch"]) \ - .replace("", software_version["flavor"]) \ - .replace("<-flavor>", software_version["-flavor"]) \ - .replace("", software_version["date"]) \ - .replace("", commit) + .replace("@major@", software_version["major"]) \ + .replace("@minor@", software_version["minor"]) \ + .replace("@patch@", software_version["patch"]) \ + .replace("@flavor@", software_version["flavor"]) \ + .replace("@-flavor@", software_version["-flavor"]) \ + .replace("@date@", software_version["date"]) \ + .replace("@commit@", commit) if output_file is None: print(output) diff --git a/parse_version.cmake b/parse_version.cmake new file mode 100644 index 0000000000..b826096a33 --- /dev/null +++ b/parse_version.cmake @@ -0,0 +1,41 @@ +# Copyright 2020 The Marl Authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# parse_version() reads and parses the version string from FILE, assigning the +# version string to ${PROJECT}_VERSION and the parsed version to +# ${PROJECT}_VERSION_MAJOR, ${PROJECT}_VERSION_MINOR, ${PROJECT}_VERSION_PATCH, +# and the optional ${PROJECT}_VERSION_FLAVOR. +# +# The version string take one of the forms: +# .. +# ..- +function(parse_version FILE PROJECT) + configure_file(${FILE} "${CMAKE_CURRENT_BINARY_DIR}/CHANGES.md") # Required to re-run cmake on version change + file(READ ${FILE} CHANGES) + if(${CHANGES} MATCHES "#+ *([0-9]+)\\.([0-9]+)\\.([0-9]+)(-[a-zA-Z0-9]+)?") + set(FLAVOR "") + if(NOT "${CMAKE_MATCH_4}" STREQUAL "") + string(SUBSTRING ${CMAKE_MATCH_4} 1 -1 FLAVOR) + endif() + set("${PROJECT}_VERSION_MAJOR" ${CMAKE_MATCH_1} PARENT_SCOPE) + set("${PROJECT}_VERSION_MINOR" ${CMAKE_MATCH_2} PARENT_SCOPE) + set("${PROJECT}_VERSION_PATCH" ${CMAKE_MATCH_3} PARENT_SCOPE) + set("${PROJECT}_VERSION_FLAVOR" ${FLAVOR} PARENT_SCOPE) + set("${PROJECT}_VERSION" + "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}${CMAKE_MATCH_4}" + PARENT_SCOPE) + else() + message(FATAL_ERROR "Unable to parse version from '${FILE}'") + endif() +endfunction() From e3dab6f0d2c466110d43c33d6352b67d20a9be57 Mon Sep 17 00:00:00 2001 From: Evgeny Proydakov Date: Sun, 7 Feb 2021 21:18:31 +0300 Subject: [PATCH 103/365] Code review. Thx ben-clayton for comments. --- parse_version.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/parse_version.cmake b/parse_version.cmake index b826096a33..b9ba413766 100644 --- a/parse_version.cmake +++ b/parse_version.cmake @@ -1,4 +1,4 @@ -# Copyright 2020 The Marl Authors. +# Copyright (C) 2020 Google, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From 6866807d6a718686eadb2b2bcaa1ba5fb352113a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 11 Feb 2021 15:36:28 -0700 Subject: [PATCH 104/365] Update spirv-tools and spirv-header known good. This is being done to allow Vulkan validation layers to pick up the new differentiated error code support in spirv-tools for GPU-AV. --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index 9010538389..4442f892e4 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "b812fd634ea5ff307c374fb2b6340169f7db8b16" + "commit" : "c79edd260c2b503f0eca57310057b4a100999cc5" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "faa570afbc91ac73d594d787486bcf8f2df1ace0" + "commit" : "75b30a659c8a4979104986652c54cc421fc51129" } ] } From 6274ec5c20f219b2a7f5a772137831d2bde2ff8b Mon Sep 17 00:00:00 2001 From: Julius Ikkala Date: Sun, 14 Feb 2021 14:24:17 +0200 Subject: [PATCH 105/365] Pass environment through PreprocessDeferred --- glslang/MachineIndependent/ShaderLang.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index c6030bd7c2..659aa43fd3 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1270,14 +1270,15 @@ bool PreprocessDeferred( EShMessages messages, // warnings/errors/AST; things to print out TShader::Includer& includer, TIntermediate& intermediate, // returned tree, etc. - std::string* outputString) + std::string* outputString, + TEnvironment* environment = nullptr) { DoPreprocessing parser(outputString); return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames, preamble, optLevel, resources, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, forwardCompatible, messages, intermediate, parser, - false, includer); + false, includer, "", environment); } #endif @@ -1909,7 +1910,8 @@ bool TShader::preprocess(const TBuiltInResource* builtInResources, return PreprocessDeferred(compiler, strings, numStrings, lengths, stringNames, preamble, EShOptNone, builtInResources, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, - forwardCompatible, message, includer, *intermediate, output_string); + forwardCompatible, message, includer, *intermediate, output_string, + &environment); } #endif From 93b400f26784ad6ce8714df957a5d1a665232488 Mon Sep 17 00:00:00 2001 From: Chow Date: Thu, 12 Nov 2020 15:54:16 +0800 Subject: [PATCH 106/365] Fix issue for new unique id system. Add level bits to help verifying symbols and split symbol tables. For intermediates rebuilding, now need manually amending level bits for redeclaring built-ins. --- SPIRV/GlslangToSpv.cpp | 10 ++--- .../link.vk.multiBlocksValid.1.0.geom.out | 4 +- Test/baseResults/spv.specConstant.vert.out | 6 +-- glslang/HLSL/hlslParseHelper.cpp | 6 +-- glslang/HLSL/hlslParseHelper.h | 22 +++++------ glslang/Include/intermediate.h | 10 ++--- glslang/MachineIndependent/Intermediate.cpp | 2 +- glslang/MachineIndependent/ParseHelper.cpp | 6 ++- glslang/MachineIndependent/ParseHelper.h | 4 +- glslang/MachineIndependent/ShaderLang.cpp | 9 +++++ glslang/MachineIndependent/SymbolTable.cpp | 2 +- glslang/MachineIndependent/SymbolTable.h | 38 ++++++++++++++----- glslang/MachineIndependent/iomapper.h | 2 +- glslang/MachineIndependent/limits.cpp | 6 +-- glslang/MachineIndependent/linkValidate.cpp | 35 +++++++++-------- .../MachineIndependent/localintermediate.h | 18 +++++---- glslang/Public/ShaderLang.h | 1 + 17 files changed, 110 insertions(+), 71 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index e9c14df380..d061726af2 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -255,15 +255,15 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { spv::Id nonSemanticDebugPrintf; std::unordered_map extBuiltinMap; - std::unordered_map symbolValues; - std::unordered_set rValueParameters; // set of formal function parameters passed as rValues, + std::unordered_map symbolValues; + std::unordered_set rValueParameters; // set of formal function parameters passed as rValues, // rather than a pointer std::unordered_map functionMap; std::unordered_map structMap[glslang::ElpCount][glslang::ElmCount]; // for mapping glslang block indices to spv indices (e.g., due to hidden members): - std::unordered_map> memberRemapper; + std::unordered_map> memberRemapper; // for mapping glslang symbol struct to symbol Id - std::unordered_map glslangTypeToIdMap; + std::unordered_map glslangTypeToIdMap; std::stack breakForLoop; // false means break for switch std::unordered_map counterOriginator; // Map pointee types for EbtReference to their forward pointers @@ -1943,7 +1943,7 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T { // This may be, e.g., an anonymous block-member selection, which generally need // index remapping due to hidden members in anonymous blocks. - int glslangId = glslangTypeToIdMap[node->getLeft()->getType().getStruct()]; + long long glslangId = glslangTypeToIdMap[node->getLeft()->getType().getStruct()]; if (memberRemapper.find(glslangId) != memberRemapper.end()) { std::vector& remapper = memberRemapper[glslangId]; assert(remapper.size() > 0); diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out index c0b33b705c..b0456a0860 100644 --- a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out +++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out @@ -328,14 +328,14 @@ output primitive = triangle_strip Decorate 59(Vertex) Block Decorate 61(oV) Location 0 Decorate 64(Vertex) Block - Decorate 68(iV) Location 1 + Decorate 68(iV) Location 0 MemberDecorate 95(BufferBlock) 0 ColMajor MemberDecorate 95(BufferBlock) 0 Offset 0 MemberDecorate 95(BufferBlock) 0 MatrixStride 16 Decorate 95(BufferBlock) BufferBlock Decorate 97(uBuf) DescriptorSet 0 Decorate 97(uBuf) Binding 1 - Decorate 100(P) Location 0 + Decorate 100(P) Location 2 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.specConstant.vert.out b/Test/baseResults/spv.specConstant.vert.out index 76f3de6192..f7d4381105 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[s805310914];" + Name 14 "foo(vf4[s216172782];" Name 13 "p" Name 17 "builtin_spec_constant(" Name 20 "color" @@ -106,10 +106,10 @@ spv.specConstant.vert Store 20(color) 46 48: 10 Load 22(ucol) Store 47(param) 48 - 49: 2 FunctionCall 14(foo(vf4[s805310914];) 47(param) + 49: 2 FunctionCall 14(foo(vf4[s216172782];) 47(param) Return FunctionEnd -14(foo(vf4[s805310914];): 2 Function None 12 +14(foo(vf4[s216172782];): 2 Function None 12 13(p): 11(ptr) FunctionParameter 15: Label 54: 24(ptr) AccessChain 53(dupUcol) 23 diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index ea31837e86..ff0f35a7f7 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -1376,7 +1376,7 @@ TIntermTyped* HlslParseContext::flattenAccess(TIntermTyped* base, int member) return flattened ? flattened : base; } -TIntermTyped* HlslParseContext::flattenAccess(int uniqueId, int member, TStorageQualifier outerStorage, +TIntermTyped* HlslParseContext::flattenAccess(long long uniqueId, int member, TStorageQualifier outerStorage, const TType& dereferencedType, int subset) { const auto flattenData = flattenMap.find(uniqueId); @@ -1444,7 +1444,7 @@ int HlslParseContext::findSubtreeOffset(const TType& type, int subset, const TVe }; // Find and return the split IO TVariable for id, or nullptr if none. -TVariable* HlslParseContext::getSplitNonIoVar(int id) const +TVariable* HlslParseContext::getSplitNonIoVar(long long id) const { const auto splitNonIoVar = splitNonIoVars.find(id); if (splitNonIoVar == splitNonIoVars.end()) @@ -3256,7 +3256,7 @@ TIntermAggregate* HlslParseContext::handleSamplerTextureCombine(const TSourceLoc // shadow state. This depends on downstream optimization to // DCE one variant in [shadow, nonshadow] if both are present, // or the SPIR-V module would be invalid. - int newId = texSymbol->getId(); + long long newId = texSymbol->getId(); // Check to see if this texture has been given a shadow mode already. // If so, look up the one we already have. diff --git a/glslang/HLSL/hlslParseHelper.h b/glslang/HLSL/hlslParseHelper.h index b92856a4d6..2d7165cfcd 100644 --- a/glslang/HLSL/hlslParseHelper.h +++ b/glslang/HLSL/hlslParseHelper.h @@ -253,12 +253,12 @@ class HlslParseContext : public TParseContextBase { // Array and struct flattening TIntermTyped* flattenAccess(TIntermTyped* base, int member); - TIntermTyped* flattenAccess(int uniqueId, int member, TStorageQualifier outerStorage, const TType&, int subset = -1); + TIntermTyped* flattenAccess(long long uniqueId, int member, TStorageQualifier outerStorage, const TType&, int subset = -1); int findSubtreeOffset(const TIntermNode&) const; int findSubtreeOffset(const TType&, int subset, const TVector& offsets) const; bool shouldFlatten(const TType&, TStorageQualifier, bool topLevel) const; bool wasFlattened(const TIntermTyped* node) const; - bool wasFlattened(int id) const { return flattenMap.find(id) != flattenMap.end(); } + bool wasFlattened(long long id) const { return flattenMap.find(id) != flattenMap.end(); } int addFlattenedMember(const TVariable&, const TType&, TFlattenData&, const TString& name, bool linkage, const TQualifier& outerQualifier, const TArraySizes* builtInArraySizes); @@ -267,8 +267,8 @@ class HlslParseContext : public TParseContextBase { void splitBuiltIn(const TString& baseName, const TType& memberType, const TArraySizes*, const TQualifier&); const TType& split(const TType& type, const TString& name, const TQualifier&); bool wasSplit(const TIntermTyped* node) const; - bool wasSplit(int id) const { return splitNonIoVars.find(id) != splitNonIoVars.end(); } - TVariable* getSplitNonIoVar(int id) const; + bool wasSplit(long long id) const { return splitNonIoVars.find(id) != splitNonIoVars.end(); } + TVariable* getSplitNonIoVar(long long id) const; void addPatchConstantInvocation(); void fixTextureShadowModes(); void finalizeAppendMethods(); @@ -386,7 +386,7 @@ class HlslParseContext : public TParseContextBase { // TVector ioArraySymbolResizeList; - TMap flattenMap; + TMap flattenMap; // IO-type map. Maps a pure symbol-table form of a structure-member list into // each of the (up to) three kinds of IO, as each as different allowed decorations, @@ -399,7 +399,7 @@ class HlslParseContext : public TParseContextBase { TMap ioTypeMap; // Structure splitting data: - TMap splitNonIoVars; // variables with the built-in interstage IO removed, indexed by unique ID. + TMap splitNonIoVars; // variables with the built-in interstage IO removed, indexed by unique ID. // Structuredbuffer shared types. Typically there are only a few. TVector structBufferTypes; @@ -488,18 +488,18 @@ class HlslParseContext : public TParseContextBase { struct tShadowTextureSymbols { tShadowTextureSymbols() { symId.fill(-1); } - void set(bool shadow, int id) { symId[int(shadow)] = id; } - int get(bool shadow) const { return symId[int(shadow)]; } + void set(bool shadow, long long id) { symId[int(shadow)] = id; } + long long get(bool shadow) const { return symId[int(shadow)]; } // True if this texture has been seen with both shadow and non-shadow modes bool overloaded() const { return symId[0] != -1 && symId[1] != -1; } - bool isShadowId(int id) const { return symId[1] == id; } + bool isShadowId(long long id) const { return symId[1] == id; } private: - std::array symId; + std::array symId; }; - TMap textureShadowVariant; + TMap textureShadowVariant; bool parsingEntrypointParameters; }; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index f0411ebb1e..a587434669 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1264,15 +1264,15 @@ class TIntermSymbol : public TIntermTyped { // if symbol is initialized as symbol(sym), the memory comes from the pool allocator of sym. If sym comes from // per process threadPoolAllocator, then it causes increased memory usage per compile // it is essential to use "symbol = sym" to assign to symbol - TIntermSymbol(int i, const TString& n, const TType& t) + TIntermSymbol(long long i, const TString& n, const TType& t) : TIntermTyped(t), id(i), #ifndef GLSLANG_WEB flattenSubset(-1), #endif constSubtree(nullptr) { name = n; } - virtual int getId() const { return id; } - virtual void changeId(int i) { id = i; } + virtual long long getId() const { return id; } + virtual void changeId(long long i) { id = i; } virtual const TString& getName() const { return name; } virtual void traverse(TIntermTraverser*); virtual TIntermSymbol* getAsSymbolNode() { return this; } @@ -1290,10 +1290,10 @@ class TIntermSymbol : public TIntermTyped { // This is meant for cases where a node has already been constructed, and // later on, it becomes necessary to switch to a different symbol. - virtual void switchId(int newId) { id = newId; } + virtual void switchId(long long newId) { id = newId; } protected: - int id; // the unique id of the symbol this node represents + long long id; // the unique id of the symbol this node represents #ifndef GLSLANG_WEB int flattenSubset; // how deeply the flattened object rooted at id has been dereferenced #endif diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index b8c220d781..2face35791 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -65,7 +65,7 @@ namespace glslang { // Returns the added node. // -TIntermSymbol* TIntermediate::addSymbol(int id, const TString& name, const TType& type, const TConstUnionArray& constArray, +TIntermSymbol* TIntermediate::addSymbol(long long id, const TString& name, const TType& type, const TConstUnionArray& constArray, TIntermTyped* constSubtree, const TSourceLoc& loc) { TIntermSymbol* node = new TIntermSymbol(id, name, type); diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 63fb957c0b..e58b86618c 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -4274,8 +4274,10 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS // If it wasn't at a built-in level, then it's already been redeclared; // that is, this is a redeclaration of a redeclaration; reuse that initial // redeclaration. Otherwise, make the new one. - if (builtIn) + if (builtIn) { makeEditable(symbol); + symbolTable.amendSymbolIdLevel(*symbol); + } // Now, modify the type of the copy, as per the type of the current redeclaration. @@ -4804,7 +4806,7 @@ void TParseContext::inductiveLoopCheck(const TSourceLoc& loc, TIntermNode* init, } // get the unique id of the loop index - int loopIndex = binaryInit->getLeft()->getAsSymbolNode()->getId(); + long long loopIndex = binaryInit->getLeft()->getAsSymbolNode()->getId(); inductiveLoopIds.insert(loopIndex); // condition's form must be "loop-index relational-operator constant-expression" diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index fe2b6fbbe1..df53b5eb3d 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -67,7 +67,7 @@ struct TPragma { class TScanContext; class TPpContext; -typedef std::set TIdSetType; +typedef std::set TIdSetType; typedef std::map> TStructRecord; // @@ -392,7 +392,7 @@ class TParseContext : public TParseContextBase { void arrayLimitCheck(const TSourceLoc&, const TString&, int size); void limitCheck(const TSourceLoc&, int value, const char* limit, const char* feature); - void inductiveLoopBodyCheck(TIntermNode*, int loopIndexId, TSymbolTable&); + void inductiveLoopBodyCheck(TIntermNode*, long long loopIndexId, TSymbolTable&); void constantIndexExpressionCheck(TIntermNode*); void setLayoutQualifier(const TSourceLoc&, TPublicType&, TString&); diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index c6030bd7c2..5a26c098b5 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -949,6 +949,9 @@ bool ProcessDeferred( if (cachedTable) symbolTable->adoptLevels(*cachedTable); + if (intermediate.getUniqueId() != 0) + symbolTable->overwriteUniqueId(intermediate.getUniqueId()); + // Add built-in symbols that are potentially context dependent; // they get popped again further down. if (! AddContextSpecificSymbols(resources, compiler->infoSink, *symbolTable, version, profile, spvVersion, @@ -1011,6 +1014,7 @@ bool ProcessDeferred( bool success = processingContext(*parseContext, ppContext, fullInput, versionWillBeError, *symbolTable, intermediate, optLevel, messages); + intermediate.setUniqueId(symbolTable->getMaxSymbolId()); return success; } @@ -1810,6 +1814,11 @@ void TShader::addProcesses(const std::vector& p) intermediate->addProcesses(p); } +void TShader::setUniqueId(unsigned long long id) +{ + intermediate->setUniqueId(id); +} + void TShader::setInvertY(bool invert) { intermediate->setInvertY(invert); } void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); } diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index f6291c397d..0e5ee19527 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -170,7 +170,7 @@ void TType::buildMangledName(TString& mangledName) const for (int i = 0; i < arraySizes->getNumDims(); ++i) { if (arraySizes->getDimNode(i)) { if (arraySizes->getDimNode(i)->getAsSymbolNode()) - snprintf(buf, maxSize, "s%d", arraySizes->getDimNode(i)->getAsSymbolNode()->getId()); + snprintf(buf, maxSize, "s%lld", arraySizes->getDimNode(i)->getAsSymbolNode()->getId()); else snprintf(buf, maxSize, "s%p", arraySizes->getDimNode(i)); } else diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index db16c19bca..54c3ca504a 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -104,8 +104,8 @@ class TSymbol { virtual const TAnonMember* getAsAnonMember() const { return 0; } virtual const TType& getType() const = 0; virtual TType& getWritableType() = 0; - virtual void setUniqueId(int id) { uniqueId = id; } - virtual int getUniqueId() const { return uniqueId; } + virtual void setUniqueId(long long id) { uniqueId = id; } + virtual long long getUniqueId() const { return uniqueId; } virtual void setExtensions(int numExts, const char* const exts[]) { assert(extensions == 0); @@ -130,7 +130,7 @@ class TSymbol { TSymbol& operator=(const TSymbol&); const TString *name; - unsigned int uniqueId; // For cross-scope comparing during code generation + unsigned long long uniqueId; // For cross-scope comparing during code generation // For tracking what extensions must be present // (don't use if correct version/profile is present). @@ -612,6 +612,7 @@ class TSymbolTable { // 3: user-shader globals // protected: + static const uint32_t LevelFlagBitOffset = 56; static const int globalLevel = 3; static bool isSharedLevel(int level) { return level <= 1; } // exclude all per-compile levels static bool isBuiltInLevel(int level) { return level <= 2; } // exclude user globals @@ -620,10 +621,12 @@ class TSymbolTable { bool isEmpty() { return table.size() == 0; } bool atBuiltInLevel() { return isBuiltInLevel(currentLevel()); } bool atGlobalLevel() { return isGlobalLevel(currentLevel()); } - static bool isBuiltInSymbol(int uniqueId) { - int level = uniqueId >> LevelFlagBitOffset; + static bool isBuiltInSymbol(long long uniqueId) { + int level = static_cast(uniqueId >> LevelFlagBitOffset); return isBuiltInLevel(level); } + static constexpr uint64_t uniqueIdMask = (1LL << LevelFlagBitOffset) - 1; + static const uint32_t MaxLevelInUniqueID = 127; void setNoBuiltInRedeclarations() { noBuiltInRedeclarations = true; } void setSeparateNameSpaces() { separateNameSpaces = true; } @@ -691,6 +694,16 @@ class TSymbolTable { return table[currentLevel()]->amend(symbol, firstNewMember); } + // Update the level info in symbol's unique ID to current level + void amendSymbolIdLevel(TSymbol& symbol) + { + // clamp level to avoid overflow + uint64_t level = currentLevel() > MaxLevelInUniqueID ? MaxLevelInUniqueID : currentLevel(); + uint64_t symbolId = symbol.getUniqueId(); + symbolId &= uniqueIdMask; + symbolId |= (level << LevelFlagBitOffset); + symbol.setUniqueId(symbolId); + } // // To allocate an internal temporary, which will need to be uniquely // identified by the consumer of the AST, but never need to @@ -859,7 +872,7 @@ class TSymbolTable { } } - int getMaxSymbolId() { return uniqueId; } + long long getMaxSymbolId() { return uniqueId; } #if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) void dump(TInfoSink& infoSink, bool complete = false) const; #endif @@ -876,19 +889,24 @@ class TSymbolTable { // Add current level in the high-bits of unique id void updateUniqueIdLevelFlag() { // clamp level to avoid overflow - uint32_t level = currentLevel() > 7 ? 7 : currentLevel(); - uniqueId &= ((1 << LevelFlagBitOffset) - 1); + uint64_t level = currentLevel() > MaxLevelInUniqueID ? MaxLevelInUniqueID : currentLevel(); + uniqueId &= uniqueIdMask; uniqueId |= (level << LevelFlagBitOffset); } + void overwriteUniqueId(long long id) + { + uniqueId = id; + updateUniqueIdLevelFlag(); + } + protected: TSymbolTable(TSymbolTable&); TSymbolTable& operator=(TSymbolTableLevel&); int currentLevel() const { return static_cast(table.size()) - 1; } - static const uint32_t LevelFlagBitOffset = 28; std::vector table; - int uniqueId; // for unique identification in code generation + long long uniqueId; // for unique identification in code generation bool noBuiltInRedeclarations; bool separateNameSpaces; unsigned int adoptedLevels; diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 7934c4a9d1..1dce8ff54b 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -52,7 +52,7 @@ namespace glslang { class TIntermediate; struct TVarEntryInfo { - int id; + long long id; TIntermSymbol* symbol; bool live; int newBinding; diff --git a/glslang/MachineIndependent/limits.cpp b/glslang/MachineIndependent/limits.cpp index 51d9300341..391570579d 100644 --- a/glslang/MachineIndependent/limits.cpp +++ b/glslang/MachineIndependent/limits.cpp @@ -63,14 +63,14 @@ namespace glslang { class TInductiveTraverser : public TIntermTraverser { public: - TInductiveTraverser(int id, TSymbolTable& st) + TInductiveTraverser(long long id, TSymbolTable& st) : loopId(id), symbolTable(st), bad(false) { } virtual bool visitBinary(TVisit, TIntermBinary* node); virtual bool visitUnary(TVisit, TIntermUnary* node); virtual bool visitAggregate(TVisit, TIntermAggregate* node); - int loopId; // unique ID of the symbol that's the loop inductive variable + long long loopId; // unique ID of the symbol that's the loop inductive variable TSymbolTable& symbolTable; bool bad; TSourceLoc badLoc; @@ -129,7 +129,7 @@ bool TInductiveTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* n // // External function to call for loop check. // -void TParseContext::inductiveLoopBodyCheck(TIntermNode* body, int loopId, TSymbolTable& symbolTable) +void TParseContext::inductiveLoopBodyCheck(TIntermNode* body, long long loopId, TSymbolTable& symbolTable) { TInductiveTraverser it(loopId, symbolTable); diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 1796fedaa0..2b6738c6d4 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -48,6 +48,7 @@ #include "localintermediate.h" #include "../Include/InfoSink.h" +#include "SymbolTable.h" namespace glslang { @@ -304,9 +305,9 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit) // Map by global name to unique ID to rationalize the same object having // differing IDs in different trees. TIdMaps idMaps; - int maxId; - seedIdMap(idMaps, maxId); - remapIds(idMaps, maxId + 1, unit); + long long idShift; + seedIdMap(idMaps, idShift); + remapIds(idMaps, idShift + 1, unit); mergeBodies(infoSink, globals, unitGlobals); mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects); @@ -327,14 +328,14 @@ static const TString& getNameForIdMap(TIntermSymbol* symbol) // Traverser that seeds an ID map with all built-ins, and tracks the -// maximum ID used. +// maximum ID used, currently using (maximum ID + 1) as new symbol id shift seed. +// Level id will keep same after shifting. // (It would be nice to put this in a function, but that causes warnings // on having no bodies for the copy-constructor/operator=.) class TBuiltInIdTraverser : public TIntermTraverser { public: - TBuiltInIdTraverser(TIdMaps& idMaps) : idMaps(idMaps), maxId(0) { } + TBuiltInIdTraverser(TIdMaps& idMaps) : idMaps(idMaps), idShift(0) { } // If it's a built in, add it to the map. - // Track the max ID. virtual void visitSymbol(TIntermSymbol* symbol) { const TQualifier& qualifier = symbol->getType().getQualifier(); @@ -342,14 +343,16 @@ class TBuiltInIdTraverser : public TIntermTraverser { TShaderInterface si = symbol->getType().getShaderInterface(); idMaps[si][getNameForIdMap(symbol)] = symbol->getId(); } - maxId = std::max(maxId, symbol->getId()); + idShift = (symbol->getId() & ~TSymbolTable::uniqueIdMask) | + std::max(idShift & TSymbolTable::uniqueIdMask, + symbol->getId() & TSymbolTable::uniqueIdMask); } - int getMaxId() const { return maxId; } + long long getIdShift() const { return idShift; } protected: TBuiltInIdTraverser(TBuiltInIdTraverser&); TBuiltInIdTraverser& operator=(TBuiltInIdTraverser&); TIdMaps& idMaps; - int maxId; + long long idShift; }; // Traverser that seeds an ID map with non-builtins. @@ -375,12 +378,12 @@ class TUserIdTraverser : public TIntermTraverser { }; // Initialize the the ID map with what we know of 'this' AST. -void TIntermediate::seedIdMap(TIdMaps& idMaps, int& maxId) +void TIntermediate::seedIdMap(TIdMaps& idMaps, long long& idShift) { // all built-ins everywhere need to align on IDs and contribute to the max ID TBuiltInIdTraverser builtInIdTraverser(idMaps); treeRoot->traverse(&builtInIdTraverser); - maxId = builtInIdTraverser.getMaxId(); + idShift = builtInIdTraverser.getIdShift() & TSymbolTable::uniqueIdMask; // user variables in the linker object list need to align on ids TUserIdTraverser userIdTraverser(idMaps); @@ -392,7 +395,7 @@ void TIntermediate::seedIdMap(TIdMaps& idMaps, int& maxId) // on having no bodies for the copy-constructor/operator=.) class TRemapIdTraverser : public TIntermTraverser { public: - TRemapIdTraverser(const TIdMaps& idMaps, int idShift) : idMaps(idMaps), idShift(idShift) { } + TRemapIdTraverser(const TIdMaps& idMaps, long long idShift) : idMaps(idMaps), idShift(idShift) { } // Do the mapping: // - if the same symbol, adopt the 'this' ID // - otherwise, ensure a unique ID by shifting to a new space @@ -404,7 +407,9 @@ class TRemapIdTraverser : public TIntermTraverser { TShaderInterface si = symbol->getType().getShaderInterface(); auto it = idMaps[si].find(getNameForIdMap(symbol)); if (it != idMaps[si].end()) { - symbol->changeId(it->second); + uint64_t id = (symbol->getId() & ~TSymbolTable::uniqueIdMask) | + (it->second & TSymbolTable::uniqueIdMask); + symbol->changeId(id); remapped = true; } } @@ -415,10 +420,10 @@ class TRemapIdTraverser : public TIntermTraverser { TRemapIdTraverser(TRemapIdTraverser&); TRemapIdTraverser& operator=(TRemapIdTraverser&); const TIdMaps& idMaps; - int idShift; + long long idShift; }; -void TIntermediate::remapIds(const TIdMaps& idMaps, int idShift, TIntermediate& unit) +void TIntermediate::remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate& unit) { // Remap all IDs to either share or be unique, as dictated by the idMap and idShift. TRemapIdTraverser idTraverser(idMaps, idShift); diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index f8747015ec..c7f8efb98d 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -227,10 +227,10 @@ enum ComputeDerivativeMode { class TIdMaps { public: - TMap& operator[](int i) { return maps[i]; } - const TMap& operator[](int i) const { return maps[i]; } + TMap& operator[](long long i) { return maps[i]; } + const TMap& operator[](long long i) const { return maps[i]; } private: - TMap maps[EsiCount]; + TMap maps[EsiCount]; }; class TNumericFeatures { @@ -292,7 +292,8 @@ class TIntermediate { invertY(false), useStorageBuffer(false), nanMinMaxClamp(false), - depthReplacing(false) + depthReplacing(false), + uniqueId(0) #ifndef GLSLANG_WEB , implicitThisName("@this"), implicitCounterName("@count"), @@ -898,6 +899,8 @@ class TIntermediate { void addProcess(const std::string& process) { processes.addProcess(process); } void addProcessArgument(const std::string& arg) { processes.addArgument(arg); } const std::vector& getProcesses() const { return processes.getProcesses(); } + unsigned long long getUniqueId() const { return uniqueId; } + void setUniqueId(unsigned long long id) { uniqueId = id; } // Certain explicit conversions are allowed conditionally #ifdef GLSLANG_WEB @@ -926,14 +929,14 @@ class TIntermediate { #endif protected: - TIntermSymbol* addSymbol(int Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); + TIntermSymbol* addSymbol(long long Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); void error(TInfoSink& infoSink, const char*); void warn(TInfoSink& infoSink, const char*); void mergeCallGraphs(TInfoSink&, TIntermediate&); void mergeModes(TInfoSink&, TIntermediate&); void mergeTrees(TInfoSink&, TIntermediate&); - void seedIdMap(TIdMaps& idMaps, int& maxId); - void remapIds(const TIdMaps& idMaps, int idShift, TIntermediate&); + void seedIdMap(TIdMaps& idMaps, long long& IdShift); + void remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate&); void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals); void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects); void mergeImplicitArraySizes(TType&, const TType&); @@ -986,6 +989,7 @@ class TIntermediate { int localSize[3]; bool localSizeNotDefault[3]; int localSizeSpecId[3]; + unsigned long long uniqueId; #ifndef GLSLANG_WEB public: const char* const implicitThisName; diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 273f1569a0..59705756d2 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -458,6 +458,7 @@ class TShader { GLSLANG_EXPORT void setEntryPoint(const char* entryPoint); GLSLANG_EXPORT void setSourceEntryPoint(const char* sourceEntryPointName); GLSLANG_EXPORT void addProcesses(const std::vector&); + GLSLANG_EXPORT void setUniqueId(unsigned long long id); // IO resolver binding data: see comments in ShaderLang.cpp GLSLANG_EXPORT void setShiftBinding(TResourceType res, unsigned int base); From ecd9bb202ffb0b48868ec23d1c3288670ba98abe Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 18 Feb 2021 12:04:17 -0700 Subject: [PATCH 107/365] Update CHANGES for 11.1.0 --- CHANGES.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 6328041013..0698e76a8a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.1.0 2021-02-18 + +### Other changes +* Removed Python requirement when not building with spirv-tools +* Add support for GL_EXT_shared_memory_block +* Implement GL_EXT_null_initializer +* Add CMake support for Fuschia + ## 11.0.0 2020-07-20 ### Breaking changes From 31d234c1dae4fde5aea0bb1351b641d505f85b4b Mon Sep 17 00:00:00 2001 From: Evgeny Proydakov Date: Fri, 19 Feb 2021 02:18:17 +0300 Subject: [PATCH 108/365] Fixed cmake generation warning for regeneration project build files. [BEFORE]: % cmake .. CMake Warning (dev) at CMakeLists.txt:35 (project): Policy CMP0048 is not set: project() command manages VERSION variables. Run "cmake --help-policy CMP0048" for policy details. Use the cmake_policy command to set the policy and suppress this warning. The following variable(s) would be set to empty: CMAKE_PROJECT_VERSION CMAKE_PROJECT_VERSION_MAJOR CMAKE_PROJECT_VERSION_MINOR CMAKE_PROJECT_VERSION_PATCH This warning is for project developers. Use -Wno-dev to suppress it. -- No build type selected, default to Debug -- Found PythonInterp: /usr/local/bin/python3 (found version "3.9") -- Found PythonInterp: /usr/local/bin/python3 (found suitable version "3.9", minimum required is "3") -- optimizer enabled -- Google Mock found - building tests -- Configuring done [AFTER]: % cmake .. -- No build type selected, default to Debug -- Google Mock was not found - tests based on that will not build -- Configuring done -- Generating done --- CMakeLists.txt | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d582926f15..bcc329d247 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,15 +31,15 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -project(glslang - LANGUAGES CXX) - +cmake_minimum_required(VERSION 2.8.12) # increase to 3.1 once all major distributions # include a version of CMake >= 3.1 -cmake_minimum_required(VERSION 2.8.12) if (POLICY CMP0048) cmake_policy(SET CMP0048 NEW) endif() + +project(glslang LANGUAGES CXX) + set_property(GLOBAL PROPERTY USE_FOLDERS ON) # Enable compile commands database From d9b931e2e8152cb3b97c97ac0cda6cdd04bab699 Mon Sep 17 00:00:00 2001 From: Daniel Koch Date: Fri, 19 Feb 2021 16:48:50 -0500 Subject: [PATCH 109/365] Fix warning in build glslang/MachineIndependent/SymbolTable.h:892:41: error: comparison of integers of different signs: 'int' and 'const uint32_t' (aka 'const unsigned int') [-Werror,-Wsign-compare] uint64_t level = currentLevel() > MaxLevelInUniqueID ? MaxLevelInUniqueID : currentLevel(); ~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~ 1 error generated. --- glslang/MachineIndependent/SymbolTable.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 54c3ca504a..152dc474cb 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -698,7 +698,7 @@ class TSymbolTable { void amendSymbolIdLevel(TSymbol& symbol) { // clamp level to avoid overflow - uint64_t level = currentLevel() > MaxLevelInUniqueID ? MaxLevelInUniqueID : currentLevel(); + uint64_t level = (uint32_t)currentLevel() > MaxLevelInUniqueID ? MaxLevelInUniqueID : currentLevel(); uint64_t symbolId = symbol.getUniqueId(); symbolId &= uniqueIdMask; symbolId |= (level << LevelFlagBitOffset); @@ -889,7 +889,7 @@ class TSymbolTable { // Add current level in the high-bits of unique id void updateUniqueIdLevelFlag() { // clamp level to avoid overflow - uint64_t level = currentLevel() > MaxLevelInUniqueID ? MaxLevelInUniqueID : currentLevel(); + uint64_t level = (uint32_t)currentLevel() > MaxLevelInUniqueID ? MaxLevelInUniqueID : currentLevel(); uniqueId &= uniqueIdMask; uniqueId |= (level << LevelFlagBitOffset); } From 82a37a35313e33fde3825f2742db4647bfea113e Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 22 Feb 2021 12:11:47 -0700 Subject: [PATCH 110/365] Update CHANGES.md to 11.2.0 to sync with current tagging. --- CHANGES.md | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGES.md b/CHANGES.md index 0698e76a8a..3fd3636c40 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,7 +3,7 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). -## 11.1.0 2021-02-18 +## 11.2.0 2021-02-18 ### Other changes * Removed Python requirement when not building with spirv-tools @@ -11,6 +11,11 @@ This project adheres to [Semantic Versioning](https://semver.org/). * Implement GL_EXT_null_initializer * Add CMake support for Fuschia +## 11.1.0 2020-12-07 + +### Other changes +* Added ray-tracing extension support + ## 11.0.0 2020-07-20 ### Breaking changes From 53e0e6a56e00ed6e5b0a52f0ba2a9355842bddb7 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Tue, 23 Feb 2021 10:00:25 +0800 Subject: [PATCH 111/365] Replace the old version math func with C++11 to prevent some presicion issue. reference link: https://www.cplusplus.com/reference/cmath/ Signed-off-by: ZhiqianXia --- glslang/MachineIndependent/Constant.cpp | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index e21cf427f0..cbf500d0ba 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -599,17 +599,11 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) newConstArray[i].setDConst(log(unionArray[i].getDConst())); break; case EOpExp2: - { - const double inv_log2_e = 0.69314718055994530941723212145818; - newConstArray[i].setDConst(exp(unionArray[i].getDConst() * inv_log2_e)); - break; - } + newConstArray[i].setDConst(exp2(unionArray[i].getDConst()); + break; case EOpLog2: - { - const double log2_e = 1.4426950408889634073599246810019; - newConstArray[i].setDConst(log2_e * log(unionArray[i].getDConst())); - break; - } + newConstArray[i].setDConst(log2(unionArray[i].getDConst())); + break; case EOpSqrt: newConstArray[i].setDConst(sqrt(unionArray[i].getDConst())); break; From 6332f80b2d0f6b13f0ef4f41066620cf1da62fde Mon Sep 17 00:00:00 2001 From: Evgeny Proydakov Date: Tue, 23 Feb 2021 17:14:12 +0300 Subject: [PATCH 112/365] Code review. Thx `greg-lunarg` for comments. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index bcc329d247..af7b5ae77c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -31,9 +31,9 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. -cmake_minimum_required(VERSION 2.8.12) # increase to 3.1 once all major distributions # include a version of CMake >= 3.1 +cmake_minimum_required(VERSION 2.8.12) if (POLICY CMP0048) cmake_policy(SET CMP0048 NEW) endif() From 5f7228e785bc27955b251ad4a4a74a86df05a56e Mon Sep 17 00:00:00 2001 From: Evgeny Proydakov Date: Wed, 24 Jun 2020 20:01:18 +0300 Subject: [PATCH 113/365] Fixed msvc 2019 nmake noexcept build. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit By default cmake generates cxx_flags with /EHsc parameter. I updated CMAKE_CXX_FLAGS string and removed /EHsc, also I added compile defenitions _HAS_EXCEPTIONS=0, it is mandatory for noexcept build with MSVC STL implementation. Output files became smaller. How to reproduce: Visual Studio 2019 x64 command port mkdir build-msvc2019 cd build-msvc2019 cmake -G"NMake Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_LIBDIR=install .. nmake CXX FLAGS BEFORE: -- CMAKE_C_FLAGS: /DWIN32 /D_WINDOWS /W3 -- CMAKE_CXX_FLAGS: /DWIN32 /D_WINDOWS /W3 /GR- /EHsc -- CMAKE_CXX_FLAGS_DEBUG: /MDd /Zi /Ob0 /Od /RTC1 -- CMAKE_CXX_FLAGS_RELEASE: /MD /O2 /Ob2 /DNDEBUG -- ENABLE_RTTI: OFF -- ENABLE_EXCEPTIONS: OFF OUTPUT SIZE BEFORE: Build folder size: 61,8 MB (64 808 580 bytes) GLSLANG SIZE BEFORE: glslang.lib 22,7 MB (23 887 150 bytes) CXX FLAGS AFTER: -- CMAKE_C_FLAGS: /DWIN32 /D_WINDOWS /W3 -- CMAKE_CXX_FLAGS: /DWIN32 /D_WINDOWS /W3 /GR- -- CMAKE_CXX_FLAGS_DEBUG: /MDd /Zi /Ob0 /Od /RTC1 -- CMAKE_CXX_FLAGS_RELEASE: /MD /O2 /Ob2 /DNDEBUG -- ENABLE_RTTI: OFF -- ENABLE_EXCEPTIONS: OFF OUTPUT SIZE AFTER: Build folder size: 58,4 MB (61 331 179 bytes) GLSLANG SIZE AFTER: glslang.lib 21,6 MB (22 655 252 bytes) --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index af7b5ae77c..c76454d1e3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -193,6 +193,9 @@ elseif(MSVC) endif() if(ENABLE_EXCEPTIONS) add_compile_options(/EHsc) # Enable Exceptions + else() + string(REGEX REPLACE /EHsc "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Try to remove default /EHsc cxx_flag + add_compile_definitions(_HAS_EXCEPTIONS=0) endif() endif() From 1c6280646873d3267727fdecfd8e5a65b266e70b Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Mon, 22 Feb 2021 18:21:25 -0700 Subject: [PATCH 114/365] Require fixed workgroup size declaration Fix 2479. --- .../negativeWorkGroupSize.comp.out | 69 +++++++++++++++++++ Test/negativeWorkGroupSize.comp | 12 ++++ glslang/MachineIndependent/ParseHelper.cpp | 5 ++ .../MachineIndependent/localintermediate.h | 12 ++++ gtests/AST.FromFile.cpp | 1 + 5 files changed, 99 insertions(+) create mode 100644 Test/baseResults/negativeWorkGroupSize.comp.out create mode 100644 Test/negativeWorkGroupSize.comp diff --git a/Test/baseResults/negativeWorkGroupSize.comp.out b/Test/baseResults/negativeWorkGroupSize.comp.out new file mode 100644 index 0000000000..7ae37985fe --- /dev/null +++ b/Test/baseResults/negativeWorkGroupSize.comp.out @@ -0,0 +1,69 @@ +negativeWorkGroupSize.comp +ERROR: 0:4: 'initializer' : can't read from gl_WorkGroupSize before a fixed workgroup size has been declared +ERROR: 1 compilation errors. No code generated. + + +Shader version: 460 +local_size = (64, 1, 1) +ERROR: node is still EOpNull! +0:3 Function Definition: fn( ( global void) +0:3 Function Parameters: +0:4 Sequence +0:4 Sequence +0:4 move second child to first child ( temp 3-component vector of uint) +0:4 'wgs' ( temp 3-component vector of uint) +0:4 Constant: +0:4 1 (const uint) +0:4 1 (const uint) +0:4 1 (const uint) +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:10 Sequence +0:10 Function Call: fn( ( global void) +0:11 Sequence +0:11 move second child to first child ( temp 3-component vector of uint) +0:11 'wgs' ( temp 3-component vector of uint) +0:11 Constant: +0:11 64 (const uint) +0:11 1 (const uint) +0:11 1 (const uint) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 64 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) + + +Linked compute stage: + + +Shader version: 460 +local_size = (64, 1, 1) +ERROR: node is still EOpNull! +0:3 Function Definition: fn( ( global void) +0:3 Function Parameters: +0:4 Sequence +0:4 Sequence +0:4 move second child to first child ( temp 3-component vector of uint) +0:4 'wgs' ( temp 3-component vector of uint) +0:4 Constant: +0:4 1 (const uint) +0:4 1 (const uint) +0:4 1 (const uint) +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:10 Sequence +0:10 Function Call: fn( ( global void) +0:11 Sequence +0:11 move second child to first child ( temp 3-component vector of uint) +0:11 'wgs' ( temp 3-component vector of uint) +0:11 Constant: +0:11 64 (const uint) +0:11 1 (const uint) +0:11 1 (const uint) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const 3-component vector of uint WorkGroupSize) +0:? 64 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) + diff --git a/Test/negativeWorkGroupSize.comp b/Test/negativeWorkGroupSize.comp new file mode 100644 index 0000000000..1f007d0c19 --- /dev/null +++ b/Test/negativeWorkGroupSize.comp @@ -0,0 +1,12 @@ +#version 460 + +void fn(){ + uvec3 wgs = gl_WorkGroupSize; // error: fixed workgroup size has not been declared +} + +layout(local_size_x = 64) in; // declare workgroup size + +void main(){ + fn(); + uvec3 wgs = gl_WorkGroupSize; // valid +} diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 88c278afc1..ea530cef40 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2756,6 +2756,11 @@ void TParseContext::rValueErrorCheck(const TSourceLoc& loc, const char* op, TInt if (!(symNode && symNode->getQualifier().isWriteOnly())) // base class checks if (symNode && symNode->getQualifier().isExplicitInterpolation()) error(loc, "can't read from explicitly-interpolated object: ", op, symNode->getName().c_str()); + + // local_size_{xyz} must be assigned or specialized before gl_WorkGroupSize can be assigned. + if(node->getQualifier().builtIn == EbvWorkGroupSize && + !(intermediate.isLocalSizeSet() || intermediate.isLocalSizeSpecialized())) + error(loc, "can't read from gl_WorkGroupSize before a fixed workgroup size has been declared", op, ""); } // diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 1db3d1c34c..9fe684a333 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -550,6 +550,11 @@ class TIntermediate { return true; } unsigned int getLocalSize(int dim) const { return localSize[dim]; } + bool isLocalSizeSet() const + { + // Return true if any component has been set (i.e. any component is not default). + return localSizeNotDefault[0] || localSizeNotDefault[1] || localSizeNotDefault[2]; + } bool setLocalSizeSpecId(int dim, int id) { if (localSizeSpecId[dim] != TQualifier::layoutNotSet) @@ -558,6 +563,13 @@ class TIntermediate { return true; } int getLocalSizeSpecId(int dim) const { return localSizeSpecId[dim]; } + bool isLocalSizeSpecialized() const + { + // Return true if any component has been specialized. + return localSizeSpecId[0] != TQualifier::layoutNotSet || + localSizeSpecId[1] != TQualifier::layoutNotSet || + localSizeSpecId[2] != TQualifier::layoutNotSet; + } #ifdef GLSLANG_WEB void output(TInfoSink&, bool tree) { } diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index dc7fea38da..8885b291f6 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -280,6 +280,7 @@ INSTANTIATE_TEST_SUITE_P( "glsl.es320.subgroupVote.comp", "terminate.frag", "terminate.vert", + "negativeWorkGroupSize.comp", })), FileNameAsCustomTestSuffix ); From 47a21828bd7538b1b4221e5747677910343b97c3 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Thu, 25 Feb 2021 15:37:40 +0800 Subject: [PATCH 115/365] fix a typo --- glslang/MachineIndependent/Constant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index cbf500d0ba..8dc04a42ce 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -599,7 +599,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) newConstArray[i].setDConst(log(unionArray[i].getDConst())); break; case EOpExp2: - newConstArray[i].setDConst(exp2(unionArray[i].getDConst()); + newConstArray[i].setDConst(exp2(unionArray[i].getDConst())); break; case EOpLog2: newConstArray[i].setDConst(log2(unionArray[i].getDConst())); From 77fe62f477cd5bb5fb5d21d44c55e1f7a0e385e2 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Fri, 26 Feb 2021 17:25:45 +0800 Subject: [PATCH 116/365] SPV: Change the key of extBuiltinMap to std::string Using const char* is not a good choice. We assume strings are always from spv::E_SPV_XXX definitions. However, it is not the case. We can store the name strings of extended intruction set in local variables. --- SPIRV/GlslangToSpv.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 8528955e31..f0bf3a6edb 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -255,7 +255,7 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { bool nanMinMaxClamp; // true if use NMin/NMax/NClamp instead of FMin/FMax/FClamp spv::Id stdBuiltins; spv::Id nonSemanticDebugPrintf; - std::unordered_map extBuiltinMap; + std::unordered_map extBuiltinMap; std::unordered_map symbolValues; std::unordered_set rValueParameters; // set of formal function parameters passed as rValues, From a990b97d07a644a1706d1d90d258d2a6c891c54f Mon Sep 17 00:00:00 2001 From: Evgeny Proydakov Date: Fri, 26 Feb 2021 14:31:27 +0300 Subject: [PATCH 117/365] Returned using find_host_package for PythonInterp 3 instead of find_package. I changed this logic here: https://github.com/KhronosGroup/glslang/pull/2526/commits/05798c17fb17d339d66e064a407e75ceae4c0316 It was originally fixed here: https://github.com/KhronosGroup/glslang/commit/967fa92d14acea305267574faf63ebe753de98c4 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c76454d1e3..9ed5265040 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -297,7 +297,7 @@ else() endif() if(BUILD_EXTERNAL AND IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/External) - find_package(PythonInterp 3 REQUIRED) + find_host_package(PythonInterp 3 REQUIRED) # We depend on these for later projects, so they should come first. add_subdirectory(External) From c176085909ab943bef46e835dcebe15e5f07fd4a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 26 Feb 2021 11:34:51 -0700 Subject: [PATCH 118/365] Fix precision propagation around shifts Fixes #2541 --- Test/baseResults/spv.precision.frag.out | 41 ++++++++++++++++++++- Test/spv.precision.frag | 2 + glslang/MachineIndependent/Intermediate.cpp | 15 +++++--- 3 files changed, 51 insertions(+), 7 deletions(-) diff --git a/Test/baseResults/spv.precision.frag.out b/Test/baseResults/spv.precision.frag.out index 973147d20f..1d31230fa5 100644 --- a/Test/baseResults/spv.precision.frag.out +++ b/Test/baseResults/spv.precision.frag.out @@ -1,14 +1,15 @@ spv.precision.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 146 +// Id's are bound by 165 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 23 62 64 76 119 + EntryPoint Fragment 4 "main" 23 62 64 76 119 149 ExecutionMode 4 OriginUpperLeft Source ESSL 310 + SourceExtension "GL_OES_sample_variables" Name 4 "main" Name 12 "foo(vf3;" Name 11 "mv3" @@ -33,6 +34,7 @@ spv.precision.frag MemberName 117(S) 0 "a" MemberName 117(S) 1 "b" Name 119 "s" + Name 149 "gl_SampleMaskIn" Decorate 12(foo(vf3;) RelaxedPrecision Decorate 11(mv3) RelaxedPrecision Decorate 23(highfin) Location 2 @@ -97,6 +99,15 @@ spv.precision.frag Decorate 143 RelaxedPrecision Decorate 144 RelaxedPrecision Decorate 145 RelaxedPrecision + Decorate 149(gl_SampleMaskIn) Flat + Decorate 149(gl_SampleMaskIn) BuiltIn SampleMask + Decorate 153 RelaxedPrecision + Decorate 156 RelaxedPrecision + Decorate 159 RelaxedPrecision + Decorate 160 RelaxedPrecision + Decorate 162 RelaxedPrecision + Decorate 163 RelaxedPrecision + Decorate 164 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -147,6 +158,11 @@ spv.precision.frag 133: 6(float) Constant 1082549862 138: 6(float) Constant 1073741824 142: 6(float) Constant 1077936128 + 146: 95(int) Constant 1 + 147: TypeArray 39(int) 146 + 148: TypePointer Input 147 +149(gl_SampleMaskIn): 148(ptr) Variable Input + 150: TypePointer Input 39(int) 4(main): 2 Function None 3 5: Label 41(sum): 40(ptr) Variable Function @@ -156,6 +172,7 @@ spv.precision.frag 72(local_highp): 71(ptr) Variable Function 108(param): 16(ptr) Variable Function 135: 71(ptr) Variable Function + 156: 71(ptr) Variable Function 44: 39(int) Load 43(uniform_medium) 46: 39(int) Load 45(uniform_high) 47: 39(int) IAdd 44 46 @@ -249,6 +266,26 @@ spv.precision.frag 137: Label 145: 21(fvec4) Load 135 Store 76(mediumfout) 145 + 151: 150(ptr) AccessChain 149(gl_SampleMaskIn) 120 + 152: 39(int) Load 151 + 153: 39(int) Load 43(uniform_medium) + 154: 39(int) ShiftRightArithmetic 152 153 + 155: 14(bool) SGreaterThan 154 120 + SelectionMerge 158 None + BranchConditional 155 157 161 + 157: Label + 159: 21(fvec4) Load 76(mediumfout) + 160: 21(fvec4) VectorTimesScalar 159 138 + Store 156 160 + Branch 158 + 161: Label + 162: 21(fvec4) Load 76(mediumfout) + 163: 21(fvec4) VectorTimesScalar 162 142 + Store 156 163 + Branch 158 + 158: Label + 164: 21(fvec4) Load 156 + Store 76(mediumfout) 164 Return FunctionEnd 12(foo(vf3;): 9(fvec2) Function None 10 diff --git a/Test/spv.precision.frag b/Test/spv.precision.frag index 463afdf808..d887ce94a5 100644 --- a/Test/spv.precision.frag +++ b/Test/spv.precision.frag @@ -1,4 +1,5 @@ #version 310 es +#extension GL_OES_sample_variables : enable precision mediump float; in lowp float lowfin; in mediump float mediumfin; @@ -59,4 +60,5 @@ void main() mediumfout *= s.b; mediumfout = ((mediumfin * mediumfin > 4.2) ? 2.0 * mediumfout : 3.0 * mediumfout); + mediumfout = ((gl_SampleMaskIn[0] >> uniform_medium > 0) ? 2.0 * mediumfout : 3.0 * mediumfout); } diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index cadf6f34e5..d1123d4a91 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -3776,11 +3776,16 @@ void TIntermBinary::updatePrecision() { if (getBasicType() == EbtInt || getBasicType() == EbtUint || getBasicType() == EbtFloat || getBasicType() == EbtFloat16) { - getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision); - if (getQualifier().precision != EpqNone) { - left->propagatePrecision(getQualifier().precision); - right->propagatePrecision(getQualifier().precision); - } + if (op == EOpRightShift || op == EOpLeftShift) { + // For shifts get precision from left side only and thus no need to propagate + getQualifier().precision = left->getQualifier().precision; + } else { + getQualifier().precision = std::max(right->getQualifier().precision, left->getQualifier().precision); + if (getQualifier().precision != EpqNone) { + left->propagatePrecision(getQualifier().precision); + right->propagatePrecision(getQualifier().precision); + } + } } } From 051fbbb69c790105213de320d2fe9fc769907e0b Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 26 Feb 2021 16:59:51 -0700 Subject: [PATCH 119/365] Fix off-by-1 bug in gl_MaxCombinedTextureImageUnits check The problem was only with arrays of samplers. Fixed #2552 --- Test/420.vert | 1 + Test/baseResults/420.vert.out | 2 ++ glslang/MachineIndependent/ParseHelper.cpp | 10 +++------- 3 files changed, 6 insertions(+), 7 deletions(-) diff --git a/Test/420.vert b/Test/420.vert index c7ffa9027f..cfae71f40b 100644 --- a/Test/420.vert +++ b/Test/420.vert @@ -159,3 +159,4 @@ void qlod() } layout(binding=0) writeonly uniform image1D badArray[]; +layout(binding = 74) uniform sampler2D u_sampler0[6]; diff --git a/Test/baseResults/420.vert.out b/Test/baseResults/420.vert.out index 1a57b34105..b3d9e702c5 100644 --- a/Test/baseResults/420.vert.out +++ b/Test/baseResults/420.vert.out @@ -306,6 +306,7 @@ ERROR: node is still EOpNull! 0:? 'samp1D' ( uniform sampler1D) 0:? 'samp1Ds' ( uniform sampler1DShadow) 0:? 'badArray' (layout( binding=0) writeonly uniform unsized 1-element array of image1D) +0:? 'u_sampler0' (layout( binding=74) uniform 6-element array of sampler2D) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) @@ -388,6 +389,7 @@ ERROR: node is still EOpNull! 0:? 'samp1D' ( uniform sampler1D) 0:? 'samp1Ds' ( uniform sampler1DShadow) 0:? 'badArray' (layout( binding=0) writeonly uniform 1-element array of image1D) +0:? 'u_sampler0' (layout( binding=74) uniform 6-element array of sampler2D) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index ea530cef40..12d68a3e6c 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5913,16 +5913,12 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) if (type.getBasicType() == EbtSampler) { int lastBinding = qualifier.layoutBinding; if (type.isArray()) { - if (spvVersion.vulkan > 0) - lastBinding += 1; - else { + if (spvVersion.vulkan == 0) { if (type.isSizedArray()) - lastBinding += type.getCumulativeArraySize(); + lastBinding += (type.getCumulativeArraySize() - 1); else { - lastBinding += 1; #ifndef GLSLANG_WEB - if (spvVersion.vulkan == 0) - warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", ""); + warn(loc, "assuming binding count of one for compile-time checking of binding numbers for unsized array", "[]", ""); #endif } } From 740def238e33c0fb436f83943bec74b9f96070b7 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 1 Mar 2021 12:33:08 -0700 Subject: [PATCH 120/365] Allow grad texture ops in all shaders Fixes #2551 --- Test/baseResults/spv.ext.MissShader.rmiss.out | 42 ++++++++++++++++--- Test/spv.ext.MissShader.rmiss | 8 ++++ glslang/MachineIndependent/Initialize.cpp | 2 +- 3 files changed, 45 insertions(+), 7 deletions(-) diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out index bc29cccacb..d2dfc176ea 100644 --- a/Test/baseResults/spv.ext.MissShader.rmiss.out +++ b/Test/baseResults/spv.ext.MissShader.rmiss.out @@ -1,8 +1,9 @@ spv.ext.MissShader.rmiss // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 71 +// Id's are bound by 90 + Capability MinLod Capability GroupNonUniform Capability GroupNonUniformBallot Capability SubgroupBallotKHR @@ -13,9 +14,10 @@ spv.ext.MissShader.rmiss Extension "SPV_NV_shader_sm_builtins" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 58 63 70 + EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 58 63 74 78 85 89 Source GLSL 460 SourceExtension "GL_ARB_shader_ballot" + SourceExtension "GL_ARB_sparse_texture_clamp" SourceExtension "GL_EXT_ray_tracing" SourceExtension "GL_KHR_shader_subgroup_ballot" SourceExtension "GL_KHR_shader_subgroup_basic" @@ -38,7 +40,11 @@ spv.ext.MissShader.rmiss Name 53 "gl_SubGroupSizeARB" Name 58 "gl_SubgroupEqMask" Name 63 "gl_WarpIDNV" - Name 70 "localPayload" + Name 70 "texel" + Name 74 "s2D" + Name 78 "c2" + Name 85 "lodClamp" + Name 89 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR @@ -57,7 +63,11 @@ spv.ext.MissShader.rmiss Decorate 63(gl_WarpIDNV) BuiltIn WarpIDNV Decorate 63(gl_WarpIDNV) Volatile Decorate 63(gl_WarpIDNV) Coherent - Decorate 70(localPayload) Location 0 + Decorate 74(s2D) DescriptorSet 0 + Decorate 74(s2D) Binding 1 + Decorate 78(c2) Location 2 + Decorate 85(lodClamp) Location 3 + Decorate 89(localPayload) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -100,8 +110,20 @@ spv.ext.MissShader.rmiss 58(gl_SubgroupEqMask): 57(ptr) Variable Input 63(gl_WarpIDNV): 52(ptr) Variable Input 67: TypePointer IncomingRayPayloadKHR 16(float) - 69: TypePointer RayPayloadKHR 49(fvec4) -70(localPayload): 69(ptr) Variable RayPayloadKHR + 69: TypePointer Function 49(fvec4) + 71: TypeImage 16(float) 2D sampled format:Unknown + 72: TypeSampledImage 71 + 73: TypePointer UniformConstant 72 + 74(s2D): 73(ptr) Variable UniformConstant + 76: TypeVector 16(float) 2 + 77: TypePointer Input 76(fvec2) + 78(c2): 77(ptr) Variable Input + 82: TypeVector 47(int) 2 + 83: 47(int) Constant 5 + 84: 82(ivec2) ConstantComposite 83 83 + 85(lodClamp): 28(ptr) Variable Input + 88: TypePointer RayPayloadKHR 49(fvec4) +89(localPayload): 88(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -110,6 +132,7 @@ spv.ext.MissShader.rmiss 23(v3): 18(ptr) Variable Function 27(v4): 26(ptr) Variable Function 31(v5): 26(ptr) Variable Function + 70(texel): 69(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -135,5 +158,12 @@ spv.ext.MissShader.rmiss 66: 16(float) FAdd 62 65 68: 67(ptr) AccessChain 51(incomingPayload) 38 Store 68 66 + 75: 72 Load 74(s2D) + 79: 76(fvec2) Load 78(c2) + 80: 76(fvec2) Load 78(c2) + 81: 76(fvec2) Load 78(c2) + 86: 16(float) Load 85(lodClamp) + 87: 49(fvec4) ImageSampleExplicitLod 75 79 Grad ConstOffset MinLod 80 81 84 86 + Store 70(texel) 87 Return FunctionEnd diff --git a/Test/spv.ext.MissShader.rmiss b/Test/spv.ext.MissShader.rmiss index 982bd84078..05311c9eef 100644 --- a/Test/spv.ext.MissShader.rmiss +++ b/Test/spv.ext.MissShader.rmiss @@ -4,9 +4,16 @@ #extension GL_KHR_shader_subgroup_ballot : enable #extension GL_ARB_shader_ballot : enable #extension GL_NV_shader_sm_builtins : enable +#extension GL_ARB_sparse_texture_clamp: enable + layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; layout(location = 0) rayPayloadEXT vec4 localPayload; layout(location = 1) rayPayloadInEXT vec4 incomingPayload; + +layout(binding = 1, set = 0) uniform sampler2D s2D; +layout(location = 2) in vec2 c2; +layout(location = 3) in float lodClamp; + void main() { uvec3 v0 = gl_LaunchIDEXT; @@ -17,4 +24,5 @@ void main() float v5 = gl_RayTmaxEXT; traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); incomingPayload.x = float(gl_SubGroupSizeARB) + float(gl_SubgroupEqMask) + float(gl_WarpIDNV); + vec4 texel = textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp); } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index a5ef6ccaf6..c94a8a4b54 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -6538,7 +6538,7 @@ void TBuiltIns::addSamplingFunctions(TSampler sampler, const TString& typeName, s.append(");\n"); // Add to the per-language set of built-ins - if (bias || lodClamp != 0) { + if (!grad && (bias || lodClamp != 0)) { stageBuiltins[EShLangFragment].append(s); stageBuiltins[EShLangCompute].append(s); } else From b479ce0bfa6dca1eaeb789d433a9adee73fb93da Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 1 Mar 2021 17:45:03 -0700 Subject: [PATCH 121/365] Allow DepthUnchanged and DepthReplaced Modes in same SPIR-V module. Fixes #2555 --- SPIRV/GlslangToSpv.cpp | 9 ++-- Test/baseResults/spv.depthUnchanged.frag.out | 44 ++++++++++++++++++++ Test/spv.depthUnchanged.frag | 8 ++++ gtests/Spv.FromFile.cpp | 1 + 4 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 Test/baseResults/spv.depthUnchanged.frag.out create mode 100644 Test/spv.depthUnchanged.frag diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index f0bf3a6edb..8a1b30d777 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1551,15 +1551,16 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addExtension(spv::E_SPV_KHR_post_depth_coverage); } - if (glslangIntermediate->getDepth() != glslang::EldUnchanged && glslangIntermediate->isDepthReplacing()) + if (glslangIntermediate->isDepthReplacing()) builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing); #ifndef GLSLANG_WEB switch(glslangIntermediate->getDepth()) { - case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break; - case glslang::EldLess: mode = spv::ExecutionModeDepthLess; break; - default: mode = spv::ExecutionModeMax; break; + case glslang::EldGreater: mode = spv::ExecutionModeDepthGreater; break; + case glslang::EldLess: mode = spv::ExecutionModeDepthLess; break; + case glslang::EldUnchanged: mode = spv::ExecutionModeDepthUnchanged; break; + default: mode = spv::ExecutionModeMax; break; } if (mode != spv::ExecutionModeMax) builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); diff --git a/Test/baseResults/spv.depthUnchanged.frag.out b/Test/baseResults/spv.depthUnchanged.frag.out new file mode 100644 index 0000000000..0074007836 --- /dev/null +++ b/Test/baseResults/spv.depthUnchanged.frag.out @@ -0,0 +1,44 @@ +spv.depthUnchanged.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 14 16 + ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 DepthReplacing + ExecutionMode 4 DepthUnchanged + Source GLSL 430 + Name 4 "main" + Name 9 "outColor" + Name 14 "gl_FragDepth" + Name 16 "gl_FragCoord" + Decorate 9(outColor) Location 0 + Decorate 14(gl_FragDepth) BuiltIn FragDepth + Decorate 16(gl_FragCoord) BuiltIn FragCoord + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(outColor): 8(ptr) Variable Output + 10: 6(float) Constant 1065353216 + 11: 6(float) Constant 0 + 12: 7(fvec4) ConstantComposite 10 11 11 10 + 13: TypePointer Output 6(float) +14(gl_FragDepth): 13(ptr) Variable Output + 15: TypePointer Input 7(fvec4) +16(gl_FragCoord): 15(ptr) Variable Input + 17: TypeInt 32 0 + 18: 17(int) Constant 1 + 19: TypePointer Input 6(float) + 4(main): 2 Function None 3 + 5: Label + Store 9(outColor) 12 + 20: 19(ptr) AccessChain 16(gl_FragCoord) 18 + 21: 6(float) Load 20 + Store 14(gl_FragDepth) 21 + Return + FunctionEnd diff --git a/Test/spv.depthUnchanged.frag b/Test/spv.depthUnchanged.frag new file mode 100644 index 0000000000..bbc5139d03 --- /dev/null +++ b/Test/spv.depthUnchanged.frag @@ -0,0 +1,8 @@ +#version 430 +layout(location = 0) out vec4 outColor; +layout(depth_unchanged) out float gl_FragDepth; +void main() { + outColor = vec4(1.0, 0.0, 0.0, 1.0); + gl_FragDepth = gl_FragCoord.y; +} + diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 2ee292e4ee..e2a837db0a 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -328,6 +328,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.demoteDisabled.frag", "spv.deepRvalue.frag", "spv.depthOut.frag", + "spv.depthUnchanged.frag", "spv.discard-dce.frag", "spv.doWhileLoop.frag", "spv.earlyReturnDiscard.frag", From 1034727263db4776b0fbd21d86e35b1b8984997a Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Thu, 4 Mar 2021 17:00:49 +0800 Subject: [PATCH 122/365] SPV: The capability string for RayTracingProvisionalKHR is missing Add it to GLSLang disassembler. --- SPIRV/doc.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 6805c3a6c3..05bc5a2dec 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -917,6 +917,7 @@ const char* CapabilityString(int info) case CapabilityRayTracingNV: return "RayTracingNV"; case CapabilityRayTracingKHR: return "RayTracingKHR"; case CapabilityRayQueryKHR: return "RayQueryKHR"; + case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV"; case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV"; From ecc9b9149f8f6367e4dc109e1f9ce3635a851968 Mon Sep 17 00:00:00 2001 From: will brown Date: Tue, 9 Jun 2020 20:43:48 -0400 Subject: [PATCH 123/365] Implement GL_EXT_vulkan_glsl_relaxed option --- SPIRV/GlslangToSpv.cpp | 3 + StandAlone/StandAlone.cpp | 174 ++++ Test/baseResults/iomap.crossStage.2.vert.out | 787 +++++++++++++++++ Test/baseResults/iomap.crossStage.vert.out | 515 +++++++++++ Test/baseResults/iomap.crossStage.vk.vert.out | 720 +++++++++++++++ .../vk.relaxed.errorcheck.vert.out | 124 +++ Test/baseResults/vk.relaxed.frag.out | 826 ++++++++++++++++++ Test/baseResults/vk.relaxed.link1.frag.out | 515 +++++++++++ .../baseResults/vk.relaxed.stagelink.vert.out | 717 +++++++++++++++ Test/iomap.crossStage.2.frag | 42 + Test/iomap.crossStage.2.geom | 39 + Test/iomap.crossStage.2.vert | 38 + Test/iomap.crossStage.frag | 41 + Test/iomap.crossStage.vert | 38 + Test/iomap.crossStage.vk.frag | 50 ++ Test/iomap.crossStage.vk.geom | 35 + Test/iomap.crossStage.vk.vert | 32 + Test/vk.relaxed.errorcheck.frag | 16 + Test/vk.relaxed.errorcheck.vert | 15 + Test/vk.relaxed.frag | 74 ++ Test/vk.relaxed.link1.frag | 28 + Test/vk.relaxed.link2.frag | 19 + Test/vk.relaxed.stagelink.frag | 28 + Test/vk.relaxed.stagelink.vert | 31 + glslang/Include/Types.h | 44 + glslang/Include/intermediate.h | 3 + glslang/MachineIndependent/Initialize.cpp | 86 +- .../MachineIndependent/ParseContextBase.cpp | 63 +- glslang/MachineIndependent/ParseHelper.cpp | 300 ++++++- glslang/MachineIndependent/ParseHelper.h | 43 +- glslang/MachineIndependent/ShaderLang.cpp | 83 +- glslang/MachineIndependent/Versions.cpp | 2 +- glslang/MachineIndependent/Versions.h | 3 +- glslang/MachineIndependent/intermOut.cpp | 1 + glslang/MachineIndependent/iomapper.cpp | 184 ++-- glslang/MachineIndependent/iomapper.h | 41 +- glslang/MachineIndependent/linkValidate.cpp | 364 +++++++- .../MachineIndependent/localintermediate.h | 53 +- glslang/Public/ShaderLang.h | 23 +- gtests/CMakeLists.txt | 4 +- gtests/GlslMapIO.FromFile.cpp | 306 +++++++ gtests/Link.FromFile.Vk.cpp | 12 +- gtests/VkRelaxed.FromFile.cpp | 296 +++++++ 43 files changed, 6707 insertions(+), 111 deletions(-) create mode 100644 Test/baseResults/iomap.crossStage.2.vert.out create mode 100644 Test/baseResults/iomap.crossStage.vert.out create mode 100644 Test/baseResults/iomap.crossStage.vk.vert.out create mode 100644 Test/baseResults/vk.relaxed.errorcheck.vert.out create mode 100644 Test/baseResults/vk.relaxed.frag.out create mode 100644 Test/baseResults/vk.relaxed.link1.frag.out create mode 100644 Test/baseResults/vk.relaxed.stagelink.vert.out create mode 100644 Test/iomap.crossStage.2.frag create mode 100644 Test/iomap.crossStage.2.geom create mode 100644 Test/iomap.crossStage.2.vert create mode 100644 Test/iomap.crossStage.frag create mode 100644 Test/iomap.crossStage.vert create mode 100644 Test/iomap.crossStage.vk.frag create mode 100644 Test/iomap.crossStage.vk.geom create mode 100644 Test/iomap.crossStage.vk.vert create mode 100644 Test/vk.relaxed.errorcheck.frag create mode 100644 Test/vk.relaxed.errorcheck.vert create mode 100644 Test/vk.relaxed.frag create mode 100644 Test/vk.relaxed.link1.frag create mode 100644 Test/vk.relaxed.link2.frag create mode 100644 Test/vk.relaxed.stagelink.frag create mode 100644 Test/vk.relaxed.stagelink.vert create mode 100644 gtests/GlslMapIO.FromFile.cpp create mode 100644 gtests/VkRelaxed.FromFile.cpp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 8a1b30d777..28a1ffed54 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2784,6 +2784,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt break; case glslang::EOpAtomicAdd: + case glslang::EOpAtomicSubtract: case glslang::EOpAtomicMin: case glslang::EOpAtomicMax: case glslang::EOpAtomicAnd: @@ -2955,6 +2956,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt break; case glslang::EOpAtomicAdd: + case glslang::EOpAtomicSubtract: case glslang::EOpAtomicMin: case glslang::EOpAtomicMax: case glslang::EOpAtomicAnd: @@ -6892,6 +6894,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv builder.addCapability(spv::CapabilityAtomicFloat64AddEXT); } break; + case glslang::EOpAtomicSubtract: case glslang::EOpAtomicCounterSubtract: opCode = spv::OpAtomicISub; break; diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index fdbf027990..923ded3052 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -110,6 +110,7 @@ bool SpvToolsValidate = false; bool NaNClamp = false; bool stripDebugInfo = false; bool beQuiet = false; +bool VulkanRulesRelaxed = false; // // Return codes from main/exit(). @@ -195,6 +196,17 @@ std::array, glslang::EResCount> baseBindi std::array, glslang::EResCount> baseBindingForSet; std::array, EShLangCount> baseResourceSetBinding; +std::vector> blockStorageOverrides; + +bool setGlobalUniformBlock = false; +std::string globalUniformName; +unsigned int globalUniformBinding; +unsigned int globalUniformSet; + +bool setGlobalBufferBlock = false; +std::string atomicCounterBlockName; +unsigned int atomicCounterBlockSet; + // Add things like "#define ..." to a preamble to use in the beginning of the shader. class TPreamble { public: @@ -396,6 +408,115 @@ void ProcessResourceSetBindingBase(int& argc, char**& argv, std::array>& storage) +{ + if (argc < 3) + usage(); + + glslang::TBlockStorageClass blockStorage = glslang::EbsNone; + + std::string strBacking(argv[2]); + if (strBacking == "uniform") + blockStorage = glslang::EbsUniform; + else if (strBacking == "buffer") + blockStorage = glslang::EbsStorageBuffer; + else if (strBacking == "push_constant") + blockStorage = glslang::EbsPushConstant; + else { + printf("%s: invalid block storage\n", strBacking.c_str()); + usage(); + } + + storage.push_back(std::make_pair(std::string(argv[1]), blockStorage)); + + argc -= 2; + argv += 2; +} + +inline bool isNonDigit(char c) { + // a non-digit character valid in a glsl identifier + return (c == '_') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); +} + +// whether string isa valid identifier to be used in glsl +bool isValidIdentifier(const char* str) { + std::string idn(str); + + if (idn.length() == 0) { + return false; + } + + if (idn.length() >= 3 && idn.substr(0, 3) == "gl_") { + // identifiers startin with "gl_" are reserved + return false; + } + + if (!isNonDigit(idn[0])) { + return false; + } + + for (unsigned int i = 1; i < idn.length(); ++i) { + if (!(isdigit(idn[i]) || isNonDigit(idn[i]))) { + return false; + } + } + + return true; +} + +// Process settings for either the global buffer block or global unfirom block +// of the form: +// --argname name set binding +void ProcessGlobalBlockSettings(int& argc, char**& argv, std::string* name, unsigned int* set, unsigned int* binding) +{ + if (argc < 4) + usage(); + + unsigned int curArg = 1; + + assert(name || set || binding); + + if (name) { + if (!isValidIdentifier(argv[curArg])) { + printf("%s: invalid identifier\n", argv[curArg]); + usage(); + } + *name = argv[curArg]; + + curArg++; + } + + if (set) { + errno = 0; + int setVal = ::strtol(argv[curArg], NULL, 10); + if (errno || setVal < 0) { + printf("%s: invalid set\n", argv[curArg]); + usage(); + } + *set = setVal; + + curArg++; + } + + if (binding) { + errno = 0; + int bindingVal = ::strtol(argv[curArg], NULL, 10); + if (errno || bindingVal < 0) { + printf("%s: invalid binding\n", argv[curArg]); + usage(); + } + *binding = bindingVal; + + curArg++; + } + + argc -= (curArg - 1); + argv += (curArg - 1); +} + // // Do all command-line argument parsing. This includes building up the work-items // to be processed later, and saving all the command-line options. @@ -569,6 +690,17 @@ void ProcessArguments(std::vector>& workItem lowerword == "resource-set-binding" || lowerword == "rsb") { ProcessResourceSetBindingBase(argc, argv, baseResourceSetBinding); + } else if (lowerword == "set-block-storage" || + lowerword == "sbs") { + ProcessBlockStorage(argc, argv, blockStorageOverrides); + } else if (lowerword == "set-atomic-counter-block" || + lowerword == "sacb") { + ProcessGlobalBlockSettings(argc, argv, &atomicCounterBlockName, &atomicCounterBlockSet, nullptr); + setGlobalBufferBlock = true; + } else if (lowerword == "set-default-uniform-block" || + lowerword == "sdub") { + ProcessGlobalBlockSettings(argc, argv, &globalUniformName, &globalUniformSet, &globalUniformBinding); + setGlobalUniformBlock = true; } else if (lowerword == "shift-image-bindings" || // synonyms lowerword == "shift-image-binding" || lowerword == "sib") { @@ -721,6 +853,9 @@ void ProcessArguments(std::vector>& workItem else Error("unknown -O option"); break; + case 'R': + VulkanRulesRelaxed = true; + break; case 'S': if (argc <= 1) Error("no specified for -S"); @@ -1068,6 +1203,24 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setUniformLocationBase(uniformBase); #endif + if (VulkanRulesRelaxed) { + for (auto& storageOverride : blockStorageOverrides) { + shader->addBlockStorageOverride(storageOverride.first.c_str(), + storageOverride.second); + } + + if (setGlobalBufferBlock) { + shader->setAtomicCounterBlockName(atomicCounterBlockName.c_str()); + shader->setAtomicCounterBlockSet(atomicCounterBlockSet); + } + + if (setGlobalUniformBlock) { + shader->setGlobalUniformBlockName(globalUniformName.c_str()); + shader->setGlobalUniformSet(globalUniformSet); + shader->setGlobalUniformBinding(globalUniformBinding); + } + } + shader->setNanMinMaxClamp(NaNClamp); #ifdef ENABLE_HLSL @@ -1091,6 +1244,8 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (targetHlslFunctionality1) shader->setEnvTargetHlslFunctionality1(); #endif + if (VulkanRulesRelaxed) + shader->setEnvInputVulkanRulesRelaxed(); } shaders.push_back(shader); @@ -1572,6 +1727,9 @@ void usage() " is searched first, followed by left-to-right order of -I\n" " -Od disables optimization; may cause illegal SPIR-V for HLSL\n" " -Os optimizes SPIR-V to minimize size\n" + " -R use relaxed verification rules for generating Vulkan SPIR-V,\n" + " allowing the use of default uniforms, atomic_uints, and\n" + " gl_VertexID and gl_InstanceID keywords.\n" " -S uses specified stage rather than parsing the file extension\n" " choices for are vert, tesc, tese, geom, frag, or comp\n" " -U | --undef-macro | --U \n" @@ -1649,6 +1807,22 @@ void usage() " --resource-set-binding [stage] set\n" " set descriptor set for all resources\n" " --rsb synonym for --resource-set-binding\n" + " --set-block-backing name {uniform|buffer|push_constant}\n" + " changes the backing type of a uniform, buffer,\n" + " or push_constant block declared in\n" + " in the program, when using -R option.\n" + " This can be used to change the backing\n" + " for existing blocks as well as implicit ones\n" + " such as 'gl_DefaultUniformBlock'.\n" + " --sbs synonym for set-block-storage\n" + " --set-atomic-counter-block name set\n" + " set name, and descriptor set for\n" + " atomic counter blocks, with -R opt\n" + " --sacb synonym for set-atomic-counter-block\n" + " --set-default-uniform-block name set binding\n" + " set name, descriptor set, and binding for\n" + " global default-uniform-block, with -R opt\n" + " --sdub synonym for set-default-uniform-block\n" " --shift-image-binding [stage] num\n" " base binding number for images (uav)\n" " --shift-image-binding [stage] [num set]...\n" diff --git a/Test/baseResults/iomap.crossStage.2.vert.out b/Test/baseResults/iomap.crossStage.2.vert.out new file mode 100644 index 0000000000..325c1b465a --- /dev/null +++ b/Test/baseResults/iomap.crossStage.2.vert.out @@ -0,0 +1,787 @@ +iomap.crossStage.2.vert +Shader version: 460 +0:? Sequence +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'vgo1' ( smooth out 4-component vector of float) +0:34 Constant: +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'vgo2' ( smooth out 2-component vector of float) +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:36 move second child to first child ( temp 4-component vector of float) +0:36 o3: direct index for structure ( out 4-component vector of float) +0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:36 Constant: +0:36 0 (const uint) +0:36 Constant: +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:? Linker Objects +0:? 'vgo1' ( smooth out 4-component vector of float) +0:? 'vgo2' ( smooth out 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +iomap.crossStage.2.geom +Shader version: 460 +invocations = -1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:29 Function Definition: main( ( global void) +0:29 Function Parameters: +0:31 Sequence +0:31 Sequence +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'i' ( temp int) +0:31 Constant: +0:31 0 (const int) +0:31 Loop with condition tested first +0:31 Loop Condition +0:31 Compare Less Than ( temp bool) +0:31 'i' ( temp int) +0:31 Constant: +0:31 3 (const int) +0:31 Loop Body +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'gfo1' (layout( stream=0) out 4-component vector of float) +0:32 Constant: +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:33 move second child to first child ( temp 2-component vector of float) +0:33 'gfo2' (layout( stream=0) out 2-component vector of float) +0:33 Constant: +0:33 0.000000 +0:33 0.000000 +0:34 move second child to first child ( temp 4-component vector of float) +0:34 o3: direct index for structure (layout( stream=0) out 4-component vector of float) +0:34 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) +0:34 Constant: +0:34 0 (const int) +0:34 o3: direct index for structure ( in 4-component vector of float) +0:34 indirect index (layout( location=5) temp block{ in 4-component vector of float o3}) +0:34 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) +0:34 'i' ( temp int) +0:34 Constant: +0:34 0 (const int) +0:35 EmitVertex ( global void) +0:31 Loop Terminal Expression +0:31 Post-Increment ( temp int) +0:31 'i' ( temp int) +0:37 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of 4-component vector of float) +0:? 'vgo2' ( in 1-element array of 2-component vector of float) +0:? 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) +0:? 'gfo1' (layout( stream=0) out 4-component vector of float) +0:? 'gfo2' (layout( stream=0) out 2-component vector of float) +0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + +iomap.crossStage.2.frag +Shader version: 460 +0:? Sequence +0:37 Function Definition: main( ( global void) +0:37 Function Parameters: +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 'gfo1' ( smooth in 4-component vector of float) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u1' ( uniform 2-component vector of float) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u2' ( uniform 3-component vector of float) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 2 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u3' ( uniform 4-component vector of float) +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 2 (const int) +0:39 Constant: +0:39 3 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'outColor' ( out 4-component vector of float) +0:40 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) +0:? 'gfo1' ( smooth in 4-component vector of float) +0:? 'gfo2' ( smooth in 2-component vector of float) +0:? 'outColor' ( out 4-component vector of float) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Linked fragment stage: + +WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. + blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" + +Shader version: 460 +0:? Sequence +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'vgo1' ( smooth out 4-component vector of float) +0:34 Constant: +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'vgo2' ( smooth out 2-component vector of float) +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:36 move second child to first child ( temp 4-component vector of float) +0:36 o3: direct index for structure ( out 4-component vector of float) +0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:36 Constant: +0:36 0 (const uint) +0:36 Constant: +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:? Linker Objects +0:? 'vgo1' ( smooth out 4-component vector of float) +0:? 'vgo2' ( smooth out 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 460 +invocations = 1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:29 Function Definition: main( ( global void) +0:29 Function Parameters: +0:31 Sequence +0:31 Sequence +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'i' ( temp int) +0:31 Constant: +0:31 0 (const int) +0:31 Loop with condition tested first +0:31 Loop Condition +0:31 Compare Less Than ( temp bool) +0:31 'i' ( temp int) +0:31 Constant: +0:31 3 (const int) +0:31 Loop Body +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'gfo1' (layout( stream=0) out 4-component vector of float) +0:32 Constant: +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:33 move second child to first child ( temp 2-component vector of float) +0:33 'gfo2' (layout( stream=0) out 2-component vector of float) +0:33 Constant: +0:33 0.000000 +0:33 0.000000 +0:34 move second child to first child ( temp 4-component vector of float) +0:34 o3: direct index for structure (layout( stream=0) out 4-component vector of float) +0:34 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) +0:34 Constant: +0:34 0 (const int) +0:34 o3: direct index for structure ( in 4-component vector of float) +0:34 indirect index (layout( location=5) temp block{ in 4-component vector of float o3}) +0:34 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) +0:34 'i' ( temp int) +0:34 Constant: +0:34 0 (const int) +0:35 EmitVertex ( global void) +0:31 Loop Terminal Expression +0:31 Post-Increment ( temp int) +0:31 'i' ( temp int) +0:37 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of 4-component vector of float) +0:? 'vgo2' ( in 1-element array of 2-component vector of float) +0:? 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) +0:? 'gfo1' (layout( stream=0) out 4-component vector of float) +0:? 'gfo2' (layout( stream=0) out 2-component vector of float) +0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +Shader version: 460 +0:? Sequence +0:37 Function Definition: main( ( global void) +0:37 Function Parameters: +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 'gfo1' ( smooth in 4-component vector of float) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u1' ( uniform 2-component vector of float) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u2' ( uniform 3-component vector of float) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 2 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u3' ( uniform 4-component vector of float) +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 2 (const int) +0:39 Constant: +0:39 3 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'outColor' ( out 4-component vector of float) +0:40 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) +0:? 'gfo1' ( smooth in 4-component vector of float) +0:? 'gfo2' ( smooth in 2-component vector of float) +0:? 'outColor' ( out 4-component vector of float) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 56 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 14 18 54 55 + Source GLSL 460 + Name 4 "main" + Name 9 "vgo1" + Name 14 "vgo2" + Name 16 "outBlock" + MemberName 16(outBlock) 0 "o3" + Name 18 "" + Name 23 "u1" + Name 27 "u2" + Name 29 "u3" + Name 36 "um2" + Name 40 "glass" + Name 41 "crossStageBlock1" + MemberName 41(crossStageBlock1) 0 "a" + MemberName 41(crossStageBlock1) 1 "b" + Name 43 "" + Name 44 "vertOnlyBlock" + MemberName 44(vertOnlyBlock) 0 "vb1" + Name 46 "" + Name 47 "crossStageBlock2" + MemberName 47(crossStageBlock2) 0 "a" + MemberName 47(crossStageBlock2) 1 "b" + Name 52 "blockName1" + Name 54 "gl_VertexID" + Name 55 "gl_InstanceID" + Decorate 9(vgo1) Location 0 + Decorate 14(vgo2) Location 1 + Decorate 16(outBlock) Block + Decorate 18 Location 5 + Decorate 23(u1) Location 1 + Decorate 23(u1) DescriptorSet 0 + Decorate 27(u2) Location 2 + Decorate 27(u2) DescriptorSet 0 + Decorate 29(u3) Location 3 + Decorate 29(u3) DescriptorSet 0 + Decorate 36(um2) Location 4 + Decorate 36(um2) DescriptorSet 0 + Decorate 40(glass) Location 0 + Decorate 40(glass) DescriptorSet 0 + Decorate 40(glass) Binding 0 + MemberDecorate 41(crossStageBlock1) 0 Offset 0 + MemberDecorate 41(crossStageBlock1) 1 Offset 16 + Decorate 41(crossStageBlock1) Block + Decorate 43 DescriptorSet 0 + Decorate 43 Binding 0 + MemberDecorate 44(vertOnlyBlock) 0 Offset 0 + Decorate 44(vertOnlyBlock) BufferBlock + Decorate 46 DescriptorSet 0 + Decorate 46 Binding 0 + MemberDecorate 47(crossStageBlock2) 0 Offset 0 + MemberDecorate 47(crossStageBlock2) 1 Offset 16 + Decorate 47(crossStageBlock2) Block + Decorate 52(blockName1) DescriptorSet 0 + Decorate 52(blockName1) Binding 0 + Decorate 54(gl_VertexID) BuiltIn VertexId + Decorate 55(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(vgo1): 8(ptr) Variable Output + 10: 6(float) Constant 0 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(vgo2): 13(ptr) Variable Output + 15: 12(fvec2) ConstantComposite 10 10 + 16(outBlock): TypeStruct 7(fvec4) + 17: TypePointer Output 16(outBlock) + 18: 17(ptr) Variable Output + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 22: TypePointer UniformConstant 12(fvec2) + 23(u1): 22(ptr) Variable UniformConstant + 24: TypeVector 6(float) 3 + 25: 24(fvec3) ConstantComposite 10 10 10 + 26: TypePointer UniformConstant 24(fvec3) + 27(u2): 26(ptr) Variable UniformConstant 25 + 28: TypePointer UniformConstant 7(fvec4) + 29(u3): 28(ptr) Variable UniformConstant 11 + 30: TypeMatrix 12(fvec2) 2 + 31: 6(float) Constant 1082130432 + 32: 12(fvec2) ConstantComposite 31 10 + 33: 12(fvec2) ConstantComposite 10 31 + 34: 30 ConstantComposite 32 33 + 35: TypePointer UniformConstant 30 + 36(um2): 35(ptr) Variable UniformConstant 34 + 37: TypeImage 6(float) 2D sampled format:Unknown + 38: TypeSampledImage 37 + 39: TypePointer UniformConstant 38 + 40(glass): 39(ptr) Variable UniformConstant +41(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 42: TypePointer Uniform 41(crossStageBlock1) + 43: 42(ptr) Variable Uniform +44(vertOnlyBlock): TypeStruct 12(fvec2) + 45: TypePointer Uniform 44(vertOnlyBlock) + 46: 45(ptr) Variable Uniform +47(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) + 48: TypeInt 32 0 + 49: 48(int) Constant 2 + 50: TypeArray 47(crossStageBlock2) 49 + 51: TypePointer Uniform 50 + 52(blockName1): 51(ptr) Variable Uniform + 53: TypePointer Input 19(int) + 54(gl_VertexID): 53(ptr) Variable Input +55(gl_InstanceID): 53(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Store 9(vgo1) 11 + Store 14(vgo2) 15 + 21: 8(ptr) AccessChain 18 20 + Store 21 11 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 65 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 22 27 31 37 48 51 + ExecutionMode 4 InputPoints + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source GLSL 460 + Name 4 "main" + Name 8 "i" + Name 22 "gfo1" + Name 27 "gfo2" + Name 29 "outBlock" + MemberName 29(outBlock) 0 "o3" + Name 31 "gf_out" + Name 32 "outBlock" + MemberName 32(outBlock) 0 "o3" + Name 37 "inBlock" + Name 48 "vgo1" + Name 51 "vgo2" + Name 53 "u1" + Name 57 "u2" + Name 59 "u3" + Name 60 "crossStageBlock2" + MemberName 60(crossStageBlock2) 0 "a" + MemberName 60(crossStageBlock2) 1 "b" + Name 64 "blockName1" + Decorate 22(gfo1) Location 0 + Decorate 27(gfo2) Location 1 + Decorate 29(outBlock) Block + Decorate 31(gf_out) Location 5 + Decorate 32(outBlock) Block + Decorate 37(inBlock) Location 5 + Decorate 48(vgo1) Location 0 + Decorate 51(vgo2) Location 1 + Decorate 53(u1) Location 1 + Decorate 53(u1) DescriptorSet 0 + Decorate 57(u2) Location 2 + Decorate 57(u2) DescriptorSet 0 + Decorate 59(u3) Location 3 + Decorate 59(u3) DescriptorSet 0 + MemberDecorate 60(crossStageBlock2) 0 Offset 0 + MemberDecorate 60(crossStageBlock2) 1 Offset 16 + Decorate 60(crossStageBlock2) Block + Decorate 64(blockName1) DescriptorSet 0 + Decorate 64(blockName1) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 3 + 17: TypeBool + 19: TypeFloat 32 + 20: TypeVector 19(float) 4 + 21: TypePointer Output 20(fvec4) + 22(gfo1): 21(ptr) Variable Output + 23: 19(float) Constant 0 + 24: 20(fvec4) ConstantComposite 23 23 23 23 + 25: TypeVector 19(float) 2 + 26: TypePointer Output 25(fvec2) + 27(gfo2): 26(ptr) Variable Output + 28: 25(fvec2) ConstantComposite 23 23 + 29(outBlock): TypeStruct 20(fvec4) + 30: TypePointer Output 29(outBlock) + 31(gf_out): 30(ptr) Variable Output + 32(outBlock): TypeStruct 20(fvec4) + 33: TypeInt 32 0 + 34: 33(int) Constant 1 + 35: TypeArray 32(outBlock) 34 + 36: TypePointer Input 35 + 37(inBlock): 36(ptr) Variable Input + 39: TypePointer Input 20(fvec4) + 44: 6(int) Constant 1 + 46: TypeArray 20(fvec4) 34 + 47: TypePointer Input 46 + 48(vgo1): 47(ptr) Variable Input + 49: TypeArray 25(fvec2) 34 + 50: TypePointer Input 49 + 51(vgo2): 50(ptr) Variable Input + 52: TypePointer UniformConstant 25(fvec2) + 53(u1): 52(ptr) Variable UniformConstant + 54: TypeVector 19(float) 3 + 55: 54(fvec3) ConstantComposite 23 23 23 + 56: TypePointer UniformConstant 54(fvec3) + 57(u2): 56(ptr) Variable UniformConstant 55 + 58: TypePointer UniformConstant 20(fvec4) + 59(u3): 58(ptr) Variable UniformConstant 24 +60(crossStageBlock2): TypeStruct 20(fvec4) 25(fvec2) + 61: 33(int) Constant 2 + 62: TypeArray 60(crossStageBlock2) 61 + 63: TypePointer Uniform 62 + 64(blockName1): 63(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + Store 22(gfo1) 24 + Store 27(gfo2) 28 + 38: 6(int) Load 8(i) + 40: 39(ptr) AccessChain 37(inBlock) 38 9 + 41: 20(fvec4) Load 40 + 42: 21(ptr) AccessChain 31(gf_out) 9 + Store 42 41 + EmitVertex + Branch 13 + 13: Label + 43: 6(int) Load 8(i) + 45: 6(int) IAdd 43 44 + Store 8(i) 45 + Branch 10 + 12: Label + EndPrimitive + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 62 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 32 36 38 + ExecutionMode 4 OriginLowerLeft + Source GLSL 460 + Name 4 "main" + Name 9 "color" + Name 11 "gfo1" + Name 15 "u1" + Name 21 "u2" + Name 28 "u3" + Name 32 "outColor" + Name 34 "outBlock" + MemberName 34(outBlock) 0 "o3" + Name 36 "" + Name 38 "gfo2" + Name 45 "um2" + Name 49 "glass" + Name 50 "crossStageBlock1" + MemberName 50(crossStageBlock1) 0 "a" + MemberName 50(crossStageBlock1) 1 "b" + Name 52 "" + Name 53 "fragOnlyBlock" + MemberName 53(fragOnlyBlock) 0 "fb1" + Name 55 "" + Name 56 "crossStageBlock2" + MemberName 56(crossStageBlock2) 0 "a" + MemberName 56(crossStageBlock2) 1 "b" + Name 61 "blockName2" + Decorate 11(gfo1) Location 0 + Decorate 15(u1) Location 1 + Decorate 15(u1) DescriptorSet 0 + Decorate 21(u2) Location 2 + Decorate 21(u2) DescriptorSet 0 + Decorate 28(u3) Location 3 + Decorate 28(u3) DescriptorSet 0 + Decorate 32(outColor) Location 0 + Decorate 34(outBlock) Block + Decorate 36 Location 5 + Decorate 38(gfo2) Location 1 + Decorate 45(um2) Location 4 + Decorate 45(um2) DescriptorSet 0 + Decorate 49(glass) Location 0 + Decorate 49(glass) DescriptorSet 0 + Decorate 49(glass) Binding 0 + MemberDecorate 50(crossStageBlock1) 0 Offset 0 + MemberDecorate 50(crossStageBlock1) 1 Offset 16 + Decorate 50(crossStageBlock1) Block + Decorate 52 DescriptorSet 0 + Decorate 52 Binding 0 + MemberDecorate 53(fragOnlyBlock) 0 Offset 0 + Decorate 53(fragOnlyBlock) BufferBlock + Decorate 55 DescriptorSet 0 + Decorate 55 Binding 0 + MemberDecorate 56(crossStageBlock2) 0 Offset 0 + MemberDecorate 56(crossStageBlock2) 1 Offset 16 + Decorate 56(crossStageBlock2) Block + Decorate 61(blockName2) DescriptorSet 0 + Decorate 61(blockName2) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(gfo1): 10(ptr) Variable Input + 13: TypeVector 6(float) 2 + 14: TypePointer UniformConstant 13(fvec2) + 15(u1): 14(ptr) Variable UniformConstant + 19: TypeVector 6(float) 3 + 20: TypePointer UniformConstant 19(fvec3) + 21(u2): 20(ptr) Variable UniformConstant + 25: 6(float) Constant 0 + 26: 7(fvec4) ConstantComposite 25 25 25 25 + 27: TypePointer UniformConstant 7(fvec4) + 28(u3): 27(ptr) Variable UniformConstant 26 + 31: TypePointer Output 7(fvec4) + 32(outColor): 31(ptr) Variable Output + 34(outBlock): TypeStruct 7(fvec4) + 35: TypePointer Input 34(outBlock) + 36: 35(ptr) Variable Input + 37: TypePointer Input 13(fvec2) + 38(gfo2): 37(ptr) Variable Input + 39: TypeMatrix 13(fvec2) 2 + 40: 6(float) Constant 1082130432 + 41: 13(fvec2) ConstantComposite 40 25 + 42: 13(fvec2) ConstantComposite 25 40 + 43: 39 ConstantComposite 41 42 + 44: TypePointer UniformConstant 39 + 45(um2): 44(ptr) Variable UniformConstant 43 + 46: TypeImage 6(float) 2D sampled format:Unknown + 47: TypeSampledImage 46 + 48: TypePointer UniformConstant 47 + 49(glass): 48(ptr) Variable UniformConstant +50(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 51: TypePointer Uniform 50(crossStageBlock1) + 52: 51(ptr) Variable Uniform +53(fragOnlyBlock): TypeStruct 13(fvec2) + 54: TypePointer Uniform 53(fragOnlyBlock) + 55: 54(ptr) Variable Uniform +56(crossStageBlock2): TypeStruct 7(fvec4) 13(fvec2) + 57: TypeInt 32 0 + 58: 57(int) Constant 2 + 59: TypeArray 56(crossStageBlock2) 58 + 60: TypePointer Uniform 59 + 61(blockName2): 60(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(gfo1) + 16: 13(fvec2) Load 15(u1) + 17: 7(fvec4) VectorShuffle 16 16 0 1 0 1 + 18: 7(fvec4) FMul 12 17 + 22: 19(fvec3) Load 21(u2) + 23: 7(fvec4) VectorShuffle 22 22 0 1 2 0 + 24: 7(fvec4) FMul 18 23 + 29: 7(fvec4) Load 28(u3) + 30: 7(fvec4) FMul 24 29 + Store 9(color) 30 + 33: 7(fvec4) Load 9(color) + Store 32(outColor) 33 + Return + FunctionEnd diff --git a/Test/baseResults/iomap.crossStage.vert.out b/Test/baseResults/iomap.crossStage.vert.out new file mode 100644 index 0000000000..5338b80750 --- /dev/null +++ b/Test/baseResults/iomap.crossStage.vert.out @@ -0,0 +1,515 @@ +iomap.crossStage.vert +Shader version: 460 +0:? Sequence +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'o1' ( smooth out 4-component vector of float) +0:34 Constant: +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'o2' ( smooth out 2-component vector of float) +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:36 move second child to first child ( temp 4-component vector of float) +0:36 o3: direct index for structure ( out 4-component vector of float) +0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:36 Constant: +0:36 0 (const uint) +0:36 Constant: +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:? Linker Objects +0:? 'o1' ( smooth out 4-component vector of float) +0:? 'o2' ( smooth out 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +iomap.crossStage.frag +Shader version: 460 +0:? Sequence +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:38 Sequence +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'color' ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 'o1' ( smooth in 4-component vector of float) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u1' ( uniform 2-component vector of float) +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u2' ( uniform 3-component vector of float) +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u3' ( uniform 4-component vector of float) +0:38 0.000000 +0:38 0.000000 +0:38 0.000000 +0:38 0.000000 +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 3 (const int) +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'outColor' ( out 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) +0:? 'o2' ( smooth in 2-component vector of float) +0:? 'o1' ( smooth in 4-component vector of float) +0:? 'outColor' ( out 4-component vector of float) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + + +Linked vertex stage: + + +Linked fragment stage: + +WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. + blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" + +Shader version: 460 +0:? Sequence +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'o1' ( smooth out 4-component vector of float) +0:34 Constant: +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'o2' ( smooth out 2-component vector of float) +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:36 move second child to first child ( temp 4-component vector of float) +0:36 o3: direct index for structure ( out 4-component vector of float) +0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:36 Constant: +0:36 0 (const uint) +0:36 Constant: +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:? Linker Objects +0:? 'o1' ( smooth out 4-component vector of float) +0:? 'o2' ( smooth out 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 460 +0:? Sequence +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:38 Sequence +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'color' ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 'o1' ( smooth in 4-component vector of float) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u1' ( uniform 2-component vector of float) +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u2' ( uniform 3-component vector of float) +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u3' ( uniform 4-component vector of float) +0:38 0.000000 +0:38 0.000000 +0:38 0.000000 +0:38 0.000000 +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 3 (const int) +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'outColor' ( out 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) +0:? 'o2' ( smooth in 2-component vector of float) +0:? 'o1' ( smooth in 4-component vector of float) +0:? 'outColor' ( out 4-component vector of float) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 56 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 14 18 54 55 + Source GLSL 460 + Name 4 "main" + Name 9 "o1" + Name 14 "o2" + Name 16 "outBlock" + MemberName 16(outBlock) 0 "o3" + Name 18 "" + Name 23 "u1" + Name 27 "u2" + Name 29 "u3" + Name 36 "um2" + Name 40 "glass" + Name 41 "crossStageBlock1" + MemberName 41(crossStageBlock1) 0 "a" + MemberName 41(crossStageBlock1) 1 "b" + Name 43 "" + Name 44 "vertOnlyBlock" + MemberName 44(vertOnlyBlock) 0 "vb1" + Name 46 "" + Name 47 "crossStageBlock2" + MemberName 47(crossStageBlock2) 0 "a" + MemberName 47(crossStageBlock2) 1 "b" + Name 52 "blockName1" + Name 54 "gl_VertexID" + Name 55 "gl_InstanceID" + Decorate 9(o1) Location 0 + Decorate 14(o2) Location 1 + Decorate 16(outBlock) Block + Decorate 18 Location 5 + Decorate 23(u1) Location 1 + Decorate 23(u1) DescriptorSet 0 + Decorate 27(u2) Location 2 + Decorate 27(u2) DescriptorSet 0 + Decorate 29(u3) Location 3 + Decorate 29(u3) DescriptorSet 0 + Decorate 36(um2) Location 4 + Decorate 36(um2) DescriptorSet 0 + Decorate 40(glass) Location 0 + Decorate 40(glass) DescriptorSet 0 + Decorate 40(glass) Binding 0 + MemberDecorate 41(crossStageBlock1) 0 Offset 0 + MemberDecorate 41(crossStageBlock1) 1 Offset 16 + Decorate 41(crossStageBlock1) Block + Decorate 43 DescriptorSet 0 + Decorate 43 Binding 0 + MemberDecorate 44(vertOnlyBlock) 0 Offset 0 + Decorate 44(vertOnlyBlock) BufferBlock + Decorate 46 DescriptorSet 0 + Decorate 46 Binding 0 + MemberDecorate 47(crossStageBlock2) 0 Offset 0 + MemberDecorate 47(crossStageBlock2) 1 Offset 16 + Decorate 47(crossStageBlock2) Block + Decorate 52(blockName1) DescriptorSet 0 + Decorate 52(blockName1) Binding 0 + Decorate 54(gl_VertexID) BuiltIn VertexId + Decorate 55(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(o1): 8(ptr) Variable Output + 10: 6(float) Constant 0 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(o2): 13(ptr) Variable Output + 15: 12(fvec2) ConstantComposite 10 10 + 16(outBlock): TypeStruct 7(fvec4) + 17: TypePointer Output 16(outBlock) + 18: 17(ptr) Variable Output + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 22: TypePointer UniformConstant 12(fvec2) + 23(u1): 22(ptr) Variable UniformConstant + 24: TypeVector 6(float) 3 + 25: 24(fvec3) ConstantComposite 10 10 10 + 26: TypePointer UniformConstant 24(fvec3) + 27(u2): 26(ptr) Variable UniformConstant 25 + 28: TypePointer UniformConstant 7(fvec4) + 29(u3): 28(ptr) Variable UniformConstant 11 + 30: TypeMatrix 12(fvec2) 2 + 31: 6(float) Constant 1082130432 + 32: 12(fvec2) ConstantComposite 31 10 + 33: 12(fvec2) ConstantComposite 10 31 + 34: 30 ConstantComposite 32 33 + 35: TypePointer UniformConstant 30 + 36(um2): 35(ptr) Variable UniformConstant 34 + 37: TypeImage 6(float) 2D sampled format:Unknown + 38: TypeSampledImage 37 + 39: TypePointer UniformConstant 38 + 40(glass): 39(ptr) Variable UniformConstant +41(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 42: TypePointer Uniform 41(crossStageBlock1) + 43: 42(ptr) Variable Uniform +44(vertOnlyBlock): TypeStruct 12(fvec2) + 45: TypePointer Uniform 44(vertOnlyBlock) + 46: 45(ptr) Variable Uniform +47(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) + 48: TypeInt 32 0 + 49: 48(int) Constant 2 + 50: TypeArray 47(crossStageBlock2) 49 + 51: TypePointer Uniform 50 + 52(blockName1): 51(ptr) Variable Uniform + 53: TypePointer Input 19(int) + 54(gl_VertexID): 53(ptr) Variable Input +55(gl_InstanceID): 53(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Store 9(o1) 11 + Store 14(o2) 15 + 21: 8(ptr) AccessChain 18 20 + Store 21 11 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 62 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 32 36 38 + ExecutionMode 4 OriginLowerLeft + Source GLSL 460 + Name 4 "main" + Name 9 "color" + Name 11 "o1" + Name 15 "u1" + Name 21 "u2" + Name 28 "u3" + Name 32 "outColor" + Name 34 "outBlock" + MemberName 34(outBlock) 0 "o3" + Name 36 "" + Name 38 "o2" + Name 45 "um2" + Name 49 "glass" + Name 50 "crossStageBlock1" + MemberName 50(crossStageBlock1) 0 "a" + MemberName 50(crossStageBlock1) 1 "b" + Name 52 "" + Name 53 "fragOnlyBlock" + MemberName 53(fragOnlyBlock) 0 "fb1" + Name 55 "" + Name 56 "crossStageBlock2" + MemberName 56(crossStageBlock2) 0 "a" + MemberName 56(crossStageBlock2) 1 "b" + Name 61 "blockName2" + Decorate 11(o1) Location 0 + Decorate 15(u1) Location 1 + Decorate 15(u1) DescriptorSet 0 + Decorate 21(u2) Location 2 + Decorate 21(u2) DescriptorSet 0 + Decorate 28(u3) Location 3 + Decorate 28(u3) DescriptorSet 0 + Decorate 32(outColor) Location 0 + Decorate 34(outBlock) Block + Decorate 36 Location 5 + Decorate 38(o2) Location 1 + Decorate 45(um2) Location 4 + Decorate 45(um2) DescriptorSet 0 + Decorate 49(glass) Location 0 + Decorate 49(glass) DescriptorSet 0 + Decorate 49(glass) Binding 0 + MemberDecorate 50(crossStageBlock1) 0 Offset 0 + MemberDecorate 50(crossStageBlock1) 1 Offset 16 + Decorate 50(crossStageBlock1) Block + Decorate 52 DescriptorSet 0 + Decorate 52 Binding 0 + MemberDecorate 53(fragOnlyBlock) 0 Offset 0 + Decorate 53(fragOnlyBlock) BufferBlock + Decorate 55 DescriptorSet 0 + Decorate 55 Binding 0 + MemberDecorate 56(crossStageBlock2) 0 Offset 0 + MemberDecorate 56(crossStageBlock2) 1 Offset 16 + Decorate 56(crossStageBlock2) Block + Decorate 61(blockName2) DescriptorSet 0 + Decorate 61(blockName2) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(o1): 10(ptr) Variable Input + 13: TypeVector 6(float) 2 + 14: TypePointer UniformConstant 13(fvec2) + 15(u1): 14(ptr) Variable UniformConstant + 19: TypeVector 6(float) 3 + 20: TypePointer UniformConstant 19(fvec3) + 21(u2): 20(ptr) Variable UniformConstant + 25: 6(float) Constant 0 + 26: 7(fvec4) ConstantComposite 25 25 25 25 + 27: TypePointer UniformConstant 7(fvec4) + 28(u3): 27(ptr) Variable UniformConstant 26 + 31: TypePointer Output 7(fvec4) + 32(outColor): 31(ptr) Variable Output + 34(outBlock): TypeStruct 7(fvec4) + 35: TypePointer Input 34(outBlock) + 36: 35(ptr) Variable Input + 37: TypePointer Input 13(fvec2) + 38(o2): 37(ptr) Variable Input + 39: TypeMatrix 13(fvec2) 2 + 40: 6(float) Constant 1082130432 + 41: 13(fvec2) ConstantComposite 40 25 + 42: 13(fvec2) ConstantComposite 25 40 + 43: 39 ConstantComposite 41 42 + 44: TypePointer UniformConstant 39 + 45(um2): 44(ptr) Variable UniformConstant 43 + 46: TypeImage 6(float) 2D sampled format:Unknown + 47: TypeSampledImage 46 + 48: TypePointer UniformConstant 47 + 49(glass): 48(ptr) Variable UniformConstant +50(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 51: TypePointer Uniform 50(crossStageBlock1) + 52: 51(ptr) Variable Uniform +53(fragOnlyBlock): TypeStruct 13(fvec2) + 54: TypePointer Uniform 53(fragOnlyBlock) + 55: 54(ptr) Variable Uniform +56(crossStageBlock2): TypeStruct 7(fvec4) 13(fvec2) + 57: TypeInt 32 0 + 58: 57(int) Constant 2 + 59: TypeArray 56(crossStageBlock2) 58 + 60: TypePointer Uniform 59 + 61(blockName2): 60(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(o1) + 16: 13(fvec2) Load 15(u1) + 17: 7(fvec4) VectorShuffle 16 16 0 1 0 1 + 18: 7(fvec4) FMul 12 17 + 22: 19(fvec3) Load 21(u2) + 23: 7(fvec4) VectorShuffle 22 22 0 1 2 0 + 24: 7(fvec4) FMul 18 23 + 29: 7(fvec4) Load 28(u3) + 30: 7(fvec4) FMul 24 29 + Store 9(color) 30 + 33: 7(fvec4) Load 9(color) + Store 32(outColor) 33 + Return + FunctionEnd diff --git a/Test/baseResults/iomap.crossStage.vk.vert.out b/Test/baseResults/iomap.crossStage.vk.vert.out new file mode 100644 index 0000000000..e137bdfc40 --- /dev/null +++ b/Test/baseResults/iomap.crossStage.vk.vert.out @@ -0,0 +1,720 @@ +iomap.crossStage.vk.vert +Shader version: 460 +0:? Sequence +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'vgo1' ( smooth out highp 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 move second child to first child ( temp highp 2-component vector of float) +0:29 'vgo2' ( smooth out highp 2-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 o3: direct index for structure ( out highp 4-component vector of float) +0:30 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) +0:30 Constant: +0:30 0 (const uint) +0:30 Constant: +0:30 0.000000 +0:30 0.000000 +0:30 0.000000 +0:30 0.000000 +0:? Linker Objects +0:? 'vgo1' ( smooth out highp 4-component vector of float) +0:? 'vgo2' ( smooth out highp 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) +0:? 'glass' (layout( binding=0) uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) + +iomap.crossStage.vk.geom +Shader version: 460 +invocations = -1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp int) +0:27 'i' ( temp highp int) +0:27 Constant: +0:27 0 (const int) +0:27 Loop with condition tested first +0:27 Loop Condition +0:27 Compare Less Than ( temp bool) +0:27 'i' ( temp highp int) +0:27 Constant: +0:27 3 (const int) +0:27 Loop Body +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'gfo1' (layout( stream=0) out highp 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 move second child to first child ( temp highp 2-component vector of float) +0:29 'gfo2' (layout( stream=0) out highp 2-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 o3: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:30 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) +0:30 Constant: +0:30 0 (const int) +0:30 o3: direct index for structure ( in highp 4-component vector of float) +0:30 indirect index (layout( location=5) temp block{ in highp 4-component vector of float o3}) +0:30 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) +0:30 'i' ( temp highp int) +0:30 Constant: +0:30 0 (const int) +0:31 EmitVertex ( global void) +0:27 Loop Terminal Expression +0:27 Post-Increment ( temp highp int) +0:27 'i' ( temp highp int) +0:33 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of highp 4-component vector of float) +0:? 'vgo2' ( in 1-element array of highp 2-component vector of float) +0:? 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) +0:? 'gfo1' (layout( stream=0) out highp 4-component vector of float) +0:? 'gfo2' (layout( stream=0) out highp 2-component vector of float) +0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) + +iomap.crossStage.vk.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:30 Function Definition: Bar( ( global highp 2-component vector of float) +0:30 Function Parameters: +0:31 Sequence +0:31 Branch: Return with expression +0:32 add ( temp highp 2-component vector of float) +0:31 add ( temp highp 2-component vector of float) +0:31 fb1: direct index for structure (layout( column_major std430) readonly buffer highp 2-component vector of float) +0:31 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) +0:31 Constant: +0:31 0 (const uint) +0:32 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) +0:32 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:32 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1 (const int) +0:33 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) +0:33 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:33 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1 (const int) +0:36 Function Definition: Foo( ( global highp 4-component vector of float) +0:36 Function Parameters: +0:37 Sequence +0:37 Branch: Return with expression +0:40 add ( temp highp 4-component vector of float) +0:39 add ( temp highp 4-component vector of float) +0:38 add ( temp highp 4-component vector of float) +0:37 add ( temp highp 4-component vector of float) +0:37 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:37 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:37 Constant: +0:37 0 (const uint) +0:38 b: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:38 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:38 Constant: +0:38 1 (const uint) +0:39 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:39 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:39 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 0 (const int) +0:40 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:40 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:40 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 0 (const int) +0:41 Construct vec4 ( temp highp 4-component vector of float) +0:41 Function Call: Bar( ( global highp 2-component vector of float) +0:41 Constant: +0:41 0.000000 +0:41 Constant: +0:41 0.000000 +0:44 Function Definition: main( ( global void) +0:44 Function Parameters: +0:46 Sequence +0:46 Sequence +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 'color' ( temp highp 4-component vector of float) +0:46 'gfo1' ( smooth in highp 4-component vector of float) +0:47 move second child to first child ( temp highp 4-component vector of float) +0:47 'color' ( temp highp 4-component vector of float) +0:47 add ( temp highp 4-component vector of float) +0:47 'color' ( temp highp 4-component vector of float) +0:47 Function Call: Foo( ( global highp 4-component vector of float) +0:48 move second child to first child ( temp highp 4-component vector of float) +0:48 'outColor' ( out highp 4-component vector of float) +0:48 'color' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in highp 4-component vector of float o3}) +0:? 'gfo1' ( smooth in highp 4-component vector of float) +0:? 'gfo2' ( smooth in highp 2-component vector of float) +0:? 'outColor' ( out highp 4-component vector of float) +0:? 'glass' (layout( binding=0) uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Linked fragment stage: + +WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. + blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" + +Shader version: 460 +0:? Sequence +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'vgo1' ( smooth out highp 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 move second child to first child ( temp highp 2-component vector of float) +0:29 'vgo2' ( smooth out highp 2-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 o3: direct index for structure ( out highp 4-component vector of float) +0:30 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) +0:30 Constant: +0:30 0 (const uint) +0:30 Constant: +0:30 0.000000 +0:30 0.000000 +0:30 0.000000 +0:30 0.000000 +0:? Linker Objects +0:? 'vgo1' ( smooth out highp 4-component vector of float) +0:? 'vgo2' ( smooth out highp 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) +0:? 'glass' (layout( binding=0) uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +Shader version: 460 +invocations = 1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp int) +0:27 'i' ( temp highp int) +0:27 Constant: +0:27 0 (const int) +0:27 Loop with condition tested first +0:27 Loop Condition +0:27 Compare Less Than ( temp bool) +0:27 'i' ( temp highp int) +0:27 Constant: +0:27 3 (const int) +0:27 Loop Body +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'gfo1' (layout( stream=0) out highp 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 move second child to first child ( temp highp 2-component vector of float) +0:29 'gfo2' (layout( stream=0) out highp 2-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 o3: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:30 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) +0:30 Constant: +0:30 0 (const int) +0:30 o3: direct index for structure ( in highp 4-component vector of float) +0:30 indirect index (layout( location=5) temp block{ in highp 4-component vector of float o3}) +0:30 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) +0:30 'i' ( temp highp int) +0:30 Constant: +0:30 0 (const int) +0:31 EmitVertex ( global void) +0:27 Loop Terminal Expression +0:27 Post-Increment ( temp highp int) +0:27 'i' ( temp highp int) +0:33 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of highp 4-component vector of float) +0:? 'vgo2' ( in 1-element array of highp 2-component vector of float) +0:? 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) +0:? 'gfo1' (layout( stream=0) out highp 4-component vector of float) +0:? 'gfo2' (layout( stream=0) out highp 2-component vector of float) +0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:30 Function Definition: Bar( ( global highp 2-component vector of float) +0:30 Function Parameters: +0:31 Sequence +0:31 Branch: Return with expression +0:32 add ( temp highp 2-component vector of float) +0:31 add ( temp highp 2-component vector of float) +0:31 fb1: direct index for structure (layout( column_major std430) readonly buffer highp 2-component vector of float) +0:31 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) +0:31 Constant: +0:31 0 (const uint) +0:32 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) +0:32 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:32 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1 (const int) +0:33 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) +0:33 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:33 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1 (const int) +0:36 Function Definition: Foo( ( global highp 4-component vector of float) +0:36 Function Parameters: +0:37 Sequence +0:37 Branch: Return with expression +0:40 add ( temp highp 4-component vector of float) +0:39 add ( temp highp 4-component vector of float) +0:38 add ( temp highp 4-component vector of float) +0:37 add ( temp highp 4-component vector of float) +0:37 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:37 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:37 Constant: +0:37 0 (const uint) +0:38 b: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:38 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:38 Constant: +0:38 1 (const uint) +0:39 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:39 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:39 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 0 (const int) +0:40 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:40 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:40 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 0 (const int) +0:41 Construct vec4 ( temp highp 4-component vector of float) +0:41 Function Call: Bar( ( global highp 2-component vector of float) +0:41 Constant: +0:41 0.000000 +0:41 Constant: +0:41 0.000000 +0:44 Function Definition: main( ( global void) +0:44 Function Parameters: +0:46 Sequence +0:46 Sequence +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 'color' ( temp highp 4-component vector of float) +0:46 'gfo1' ( smooth in highp 4-component vector of float) +0:47 move second child to first child ( temp highp 4-component vector of float) +0:47 'color' ( temp highp 4-component vector of float) +0:47 add ( temp highp 4-component vector of float) +0:47 'color' ( temp highp 4-component vector of float) +0:47 Function Call: Foo( ( global highp 4-component vector of float) +0:48 move second child to first child ( temp highp 4-component vector of float) +0:48 'outColor' ( out highp 4-component vector of float) +0:48 'color' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in highp 4-component vector of float o3}) +0:? 'gfo1' ( smooth in highp 4-component vector of float) +0:? 'gfo2' ( smooth in highp 2-component vector of float) +0:? 'outColor' ( out highp 4-component vector of float) +0:? 'glass' (layout( binding=0) uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 38 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 14 18 + Source GLSL 460 + Name 4 "main" + Name 9 "vgo1" + Name 14 "vgo2" + Name 16 "outBlock" + MemberName 16(outBlock) 0 "o3" + Name 18 "" + Name 25 "glass" + Name 26 "crossStageBlock1" + MemberName 26(crossStageBlock1) 0 "a" + MemberName 26(crossStageBlock1) 1 "b" + Name 28 "" + Name 29 "vertOnlyBlock" + MemberName 29(vertOnlyBlock) 0 "vb1" + Name 31 "" + Name 32 "crossStageBlock2" + MemberName 32(crossStageBlock2) 0 "a" + MemberName 32(crossStageBlock2) 1 "b" + Name 37 "blockName1" + Decorate 9(vgo1) Location 0 + Decorate 14(vgo2) Location 1 + Decorate 16(outBlock) Block + Decorate 18 Location 5 + Decorate 25(glass) DescriptorSet 0 + Decorate 25(glass) Binding 0 + MemberDecorate 26(crossStageBlock1) 0 Offset 0 + MemberDecorate 26(crossStageBlock1) 1 Offset 16 + Decorate 26(crossStageBlock1) Block + Decorate 28 DescriptorSet 0 + Decorate 28 Binding 1 + MemberDecorate 29(vertOnlyBlock) 0 NonWritable + MemberDecorate 29(vertOnlyBlock) 0 Offset 0 + Decorate 29(vertOnlyBlock) BufferBlock + Decorate 31 DescriptorSet 0 + Decorate 31 Binding 0 + MemberDecorate 32(crossStageBlock2) 0 Offset 0 + MemberDecorate 32(crossStageBlock2) 1 Offset 16 + Decorate 32(crossStageBlock2) Block + Decorate 37(blockName1) DescriptorSet 0 + Decorate 37(blockName1) Binding 3 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(vgo1): 8(ptr) Variable Output + 10: 6(float) Constant 0 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(vgo2): 13(ptr) Variable Output + 15: 12(fvec2) ConstantComposite 10 10 + 16(outBlock): TypeStruct 7(fvec4) + 17: TypePointer Output 16(outBlock) + 18: 17(ptr) Variable Output + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 22: TypeImage 6(float) 2D sampled format:Unknown + 23: TypeSampledImage 22 + 24: TypePointer UniformConstant 23 + 25(glass): 24(ptr) Variable UniformConstant +26(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 27: TypePointer Uniform 26(crossStageBlock1) + 28: 27(ptr) Variable Uniform +29(vertOnlyBlock): TypeStruct 12(fvec2) + 30: TypePointer Uniform 29(vertOnlyBlock) + 31: 30(ptr) Variable Uniform +32(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) + 33: TypeInt 32 0 + 34: 33(int) Constant 2 + 35: TypeArray 32(crossStageBlock2) 34 + 36: TypePointer Uniform 35 + 37(blockName1): 36(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + Store 9(vgo1) 11 + Store 14(vgo2) 15 + 21: 8(ptr) AccessChain 18 20 + Store 21 11 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 57 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 22 27 31 37 48 51 + ExecutionMode 4 InputPoints + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source GLSL 460 + Name 4 "main" + Name 8 "i" + Name 22 "gfo1" + Name 27 "gfo2" + Name 29 "outBlock" + MemberName 29(outBlock) 0 "o3" + Name 31 "gf_out" + Name 32 "outBlock" + MemberName 32(outBlock) 0 "o3" + Name 37 "inBlock" + Name 48 "vgo1" + Name 51 "vgo2" + Name 52 "crossStageBlock2" + MemberName 52(crossStageBlock2) 0 "a" + MemberName 52(crossStageBlock2) 1 "b" + Name 56 "blockName1" + Decorate 22(gfo1) Location 0 + Decorate 27(gfo2) Location 1 + Decorate 29(outBlock) Block + Decorate 31(gf_out) Location 5 + Decorate 32(outBlock) Block + Decorate 37(inBlock) Location 5 + Decorate 48(vgo1) Location 0 + Decorate 51(vgo2) Location 1 + MemberDecorate 52(crossStageBlock2) 0 Offset 0 + MemberDecorate 52(crossStageBlock2) 1 Offset 16 + Decorate 52(crossStageBlock2) Block + Decorate 56(blockName1) DescriptorSet 0 + Decorate 56(blockName1) Binding 3 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 3 + 17: TypeBool + 19: TypeFloat 32 + 20: TypeVector 19(float) 4 + 21: TypePointer Output 20(fvec4) + 22(gfo1): 21(ptr) Variable Output + 23: 19(float) Constant 0 + 24: 20(fvec4) ConstantComposite 23 23 23 23 + 25: TypeVector 19(float) 2 + 26: TypePointer Output 25(fvec2) + 27(gfo2): 26(ptr) Variable Output + 28: 25(fvec2) ConstantComposite 23 23 + 29(outBlock): TypeStruct 20(fvec4) + 30: TypePointer Output 29(outBlock) + 31(gf_out): 30(ptr) Variable Output + 32(outBlock): TypeStruct 20(fvec4) + 33: TypeInt 32 0 + 34: 33(int) Constant 1 + 35: TypeArray 32(outBlock) 34 + 36: TypePointer Input 35 + 37(inBlock): 36(ptr) Variable Input + 39: TypePointer Input 20(fvec4) + 44: 6(int) Constant 1 + 46: TypeArray 20(fvec4) 34 + 47: TypePointer Input 46 + 48(vgo1): 47(ptr) Variable Input + 49: TypeArray 25(fvec2) 34 + 50: TypePointer Input 49 + 51(vgo2): 50(ptr) Variable Input +52(crossStageBlock2): TypeStruct 20(fvec4) 25(fvec2) + 53: 33(int) Constant 2 + 54: TypeArray 52(crossStageBlock2) 53 + 55: TypePointer Uniform 54 + 56(blockName1): 55(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + Store 22(gfo1) 24 + Store 27(gfo2) 28 + 38: 6(int) Load 8(i) + 40: 39(ptr) AccessChain 37(inBlock) 38 9 + 41: 20(fvec4) Load 40 + 42: 21(ptr) AccessChain 31(gf_out) 9 + Store 42 41 + EmitVertex + Branch 13 + 13: Label + 43: 6(int) Load 8(i) + 45: 6(int) IAdd 43 44 + Store 8(i) 45 + Branch 10 + 12: Label + EndPrimitive + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 81 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 64 70 74 76 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 9 "Bar(" + Name 13 "Foo(" + Name 15 "fragOnlyBlock" + MemberName 15(fragOnlyBlock) 0 "fb1" + Name 17 "" + Name 23 "crossStageBlock2" + MemberName 23(crossStageBlock2) 0 "a" + MemberName 23(crossStageBlock2) 1 "b" + Name 28 "blockName2" + Name 38 "crossStageBlock1" + MemberName 38(crossStageBlock1) 0 "a" + MemberName 38(crossStageBlock1) 1 "b" + Name 40 "" + Name 62 "color" + Name 64 "gfo1" + Name 70 "outColor" + Name 72 "outBlock" + MemberName 72(outBlock) 0 "o3" + Name 74 "" + Name 76 "gfo2" + Name 80 "glass" + MemberDecorate 15(fragOnlyBlock) 0 NonWritable + MemberDecorate 15(fragOnlyBlock) 0 Offset 0 + Decorate 15(fragOnlyBlock) BufferBlock + Decorate 17 DescriptorSet 0 + Decorate 17 Binding 2 + MemberDecorate 23(crossStageBlock2) 0 Offset 0 + MemberDecorate 23(crossStageBlock2) 1 Offset 16 + Decorate 23(crossStageBlock2) Block + Decorate 28(blockName2) DescriptorSet 0 + Decorate 28(blockName2) Binding 3 + MemberDecorate 38(crossStageBlock1) 0 Offset 0 + MemberDecorate 38(crossStageBlock1) 1 Offset 16 + Decorate 38(crossStageBlock1) Block + Decorate 40 DescriptorSet 0 + Decorate 40 Binding 1 + Decorate 64(gfo1) Location 0 + Decorate 70(outColor) Location 0 + Decorate 72(outBlock) Block + Decorate 74 Location 5 + Decorate 76(gfo2) Location 1 + Decorate 80(glass) DescriptorSet 0 + Decorate 80(glass) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypeFunction 7(fvec2) + 11: TypeVector 6(float) 4 + 12: TypeFunction 11(fvec4) +15(fragOnlyBlock): TypeStruct 7(fvec2) + 16: TypePointer Uniform 15(fragOnlyBlock) + 17: 16(ptr) Variable Uniform + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 20: TypePointer Uniform 7(fvec2) +23(crossStageBlock2): TypeStruct 11(fvec4) 7(fvec2) + 24: TypeInt 32 0 + 25: 24(int) Constant 2 + 26: TypeArray 23(crossStageBlock2) 25 + 27: TypePointer Uniform 26 + 28(blockName2): 27(ptr) Variable Uniform + 29: 18(int) Constant 1 +38(crossStageBlock1): TypeStruct 11(fvec4) 11(fvec4) + 39: TypePointer Uniform 38(crossStageBlock1) + 40: 39(ptr) Variable Uniform + 41: TypePointer Uniform 11(fvec4) + 54: 6(float) Constant 0 + 61: TypePointer Function 11(fvec4) + 63: TypePointer Input 11(fvec4) + 64(gfo1): 63(ptr) Variable Input + 69: TypePointer Output 11(fvec4) + 70(outColor): 69(ptr) Variable Output + 72(outBlock): TypeStruct 11(fvec4) + 73: TypePointer Input 72(outBlock) + 74: 73(ptr) Variable Input + 75: TypePointer Input 7(fvec2) + 76(gfo2): 75(ptr) Variable Input + 77: TypeImage 6(float) 2D sampled format:Unknown + 78: TypeSampledImage 77 + 79: TypePointer UniformConstant 78 + 80(glass): 79(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 62(color): 61(ptr) Variable Function + 65: 11(fvec4) Load 64(gfo1) + Store 62(color) 65 + 66: 11(fvec4) Load 62(color) + 67: 11(fvec4) FunctionCall 13(Foo() + 68: 11(fvec4) FAdd 66 67 + Store 62(color) 68 + 71: 11(fvec4) Load 62(color) + Store 70(outColor) 71 + Return + FunctionEnd + 9(Bar(): 7(fvec2) Function None 8 + 10: Label + 21: 20(ptr) AccessChain 17 19 + 22: 7(fvec2) Load 21 + 30: 20(ptr) AccessChain 28(blockName2) 19 29 + 31: 7(fvec2) Load 30 + 32: 7(fvec2) FAdd 22 31 + 33: 20(ptr) AccessChain 28(blockName2) 29 29 + 34: 7(fvec2) Load 33 + 35: 7(fvec2) FAdd 32 34 + ReturnValue 35 + FunctionEnd + 13(Foo(): 11(fvec4) Function None 12 + 14: Label + 42: 41(ptr) AccessChain 40 19 + 43: 11(fvec4) Load 42 + 44: 41(ptr) AccessChain 40 29 + 45: 11(fvec4) Load 44 + 46: 11(fvec4) FAdd 43 45 + 47: 41(ptr) AccessChain 28(blockName2) 19 19 + 48: 11(fvec4) Load 47 + 49: 11(fvec4) FAdd 46 48 + 50: 41(ptr) AccessChain 28(blockName2) 29 19 + 51: 11(fvec4) Load 50 + 52: 11(fvec4) FAdd 49 51 + 53: 7(fvec2) FunctionCall 9(Bar() + 55: 6(float) CompositeExtract 53 0 + 56: 6(float) CompositeExtract 53 1 + 57: 11(fvec4) CompositeConstruct 55 56 54 54 + 58: 11(fvec4) FAdd 52 57 + ReturnValue 58 + FunctionEnd diff --git a/Test/baseResults/vk.relaxed.errorcheck.vert.out b/Test/baseResults/vk.relaxed.errorcheck.vert.out new file mode 100644 index 0000000000..f19eae6407 --- /dev/null +++ b/Test/baseResults/vk.relaxed.errorcheck.vert.out @@ -0,0 +1,124 @@ +vk.relaxed.errorcheck.vert +Shader version: 460 +0:? Sequence +0:9 Function Definition: foo( ( global highp 4-component vector of float) +0:9 Function Parameters: +0:10 Sequence +0:10 Branch: Return with expression +0:10 vector swizzle ( temp highp 4-component vector of float) +0:10 a: direct index for structure ( uniform highp 2-component vector of float) +0:10 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) +0:10 Constant: +0:10 0 (const uint) +0:10 Sequence +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp highp 4-component vector of float) +0:14 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:14 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) + +vk.relaxed.errorcheck.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: foo( ( global highp 4-component vector of float) +0:10 Function Parameters: +0:11 Sequence +0:11 Branch: Return with expression +0:11 a: direct index for structure ( uniform highp 4-component vector of float) +0:11 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) +0:11 Constant: +0:11 0 (const uint) +0:14 Function Definition: main( ( global void) +0:14 Function Parameters: +0:15 Sequence +0:15 move second child to first child ( temp highp 4-component vector of float) +0:15 'o' ( out highp 4-component vector of float) +0:15 add ( temp highp 4-component vector of float) +0:15 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:15 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) + + +Linked vertex stage: + + +Linked fragment stage: + +ERROR: Linking unknown stage stage: Types must match: + a: " uniform highp 2-component vector of float" versus " uniform highp 4-component vector of float" + +Shader version: 460 +0:? Sequence +0:9 Function Definition: foo( ( global highp 4-component vector of float) +0:9 Function Parameters: +0:10 Sequence +0:10 Branch: Return with expression +0:10 vector swizzle ( temp highp 4-component vector of float) +0:10 a: direct index for structure ( uniform highp 2-component vector of float) +0:10 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) +0:10 Constant: +0:10 0 (const uint) +0:10 Sequence +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp highp 4-component vector of float) +0:14 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:14 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: foo( ( global highp 4-component vector of float) +0:10 Function Parameters: +0:11 Sequence +0:11 Branch: Return with expression +0:11 a: direct index for structure ( uniform highp 4-component vector of float) +0:11 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) +0:11 Constant: +0:11 0 (const uint) +0:14 Function Definition: main( ( global void) +0:14 Function Parameters: +0:15 Sequence +0:15 move second child to first child ( temp highp 4-component vector of float) +0:15 'o' ( out highp 4-component vector of float) +0:15 add ( temp highp 4-component vector of float) +0:15 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:15 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) + +Validation failed +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/vk.relaxed.frag.out b/Test/baseResults/vk.relaxed.frag.out new file mode 100644 index 0000000000..d98910e6f8 --- /dev/null +++ b/Test/baseResults/vk.relaxed.frag.out @@ -0,0 +1,826 @@ +vk.relaxed.frag +WARNING: 0:7: 'b' : Ignoring initializer for uniform +WARNING: 0:8: 'c' : ignoring layout qualifier for uniform location + +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:36 Function Definition: bar( ( global highp uint) +0:36 Function Parameters: +0:37 Sequence +0:37 Sequence +0:37 move second child to first child ( temp highp uint) +0:37 'j' ( temp highp uint) +0:37 Constant: +0:37 0 (const uint) +0:38 move second child to first child ( temp highp uint) +0:38 'j' ( temp highp uint) +0:38 AtomicAdd ( global highp uint) +0:38 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:38 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:38 Constant: +0:38 0 (const uint) +0:38 Constant: +0:38 1 (const uint) +0:39 move second child to first child ( temp highp uint) +0:39 'j' ( temp highp uint) +0:39 subtract ( temp highp uint) +0:39 AtomicAdd ( global highp uint) +0:39 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:39 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:39 Constant: +0:39 0 (const uint) +0:39 Constant: +0:39 4294967295 (const uint) +0:39 Constant: +0:39 1 (const uint) +0:40 move second child to first child ( temp highp uint) +0:40 'j' ( temp highp uint) +0:40 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:40 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:40 Constant: +0:40 0 (const uint) +0:42 move second child to first child ( temp highp uint) +0:42 'j' ( temp highp uint) +0:42 AtomicAdd ( global highp uint) +0:42 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:42 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:42 Constant: +0:42 0 (const uint) +0:42 Constant: +0:42 1 (const uint) +0:43 move second child to first child ( temp highp uint) +0:43 'j' ( temp highp uint) +0:43 AtomicAdd ( global highp uint) +0:43 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:43 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:43 Constant: +0:43 0 (const uint) +0:43 Constant: +0:43 4294967295 (const uint) +0:44 move second child to first child ( temp highp uint) +0:44 'j' ( temp highp uint) +0:44 AtomicSubtract ( global highp uint) +0:44 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:44 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:44 Constant: +0:44 0 (const uint) +0:44 Constant: +0:44 1 (const uint) +0:46 move second child to first child ( temp highp uint) +0:46 'j' ( temp highp uint) +0:46 AtomicMin ( global highp uint) +0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:46 Constant: +0:46 0 (const uint) +0:46 'j' ( temp highp uint) +0:47 move second child to first child ( temp highp uint) +0:47 'j' ( temp highp uint) +0:47 AtomicMax ( global highp uint) +0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:47 Constant: +0:47 0 (const uint) +0:47 'j' ( temp highp uint) +0:48 move second child to first child ( temp highp uint) +0:48 'j' ( temp highp uint) +0:48 AtomicAnd ( global highp uint) +0:48 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:48 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:48 Constant: +0:48 0 (const uint) +0:48 'j' ( temp highp uint) +0:50 move second child to first child ( temp highp uint) +0:50 'j' ( temp highp uint) +0:50 AtomicOr ( global highp uint) +0:50 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:50 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:50 Constant: +0:50 0 (const uint) +0:50 'j' ( temp highp uint) +0:51 move second child to first child ( temp highp uint) +0:51 'j' ( temp highp uint) +0:51 AtomicXor ( global highp uint) +0:51 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:51 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:51 Constant: +0:51 0 (const uint) +0:51 'j' ( temp highp uint) +0:53 move second child to first child ( temp highp uint) +0:53 'j' ( temp highp uint) +0:53 AtomicExchange ( global highp uint) +0:53 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:53 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:53 Constant: +0:53 0 (const uint) +0:53 'j' ( temp highp uint) +0:54 move second child to first child ( temp highp uint) +0:54 'j' ( temp highp uint) +0:54 AtomicCompSwap ( global highp uint) +0:54 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:54 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:54 Constant: +0:54 0 (const uint) +0:54 Constant: +0:54 0 (const uint) +0:54 'j' ( temp highp uint) +0:56 AtomicAdd ( global highp uint) +0:56 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:56 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:56 Constant: +0:56 1 (const uint) +0:56 Constant: +0:56 1 (const uint) +0:57 AtomicAdd ( global highp uint) +0:57 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:57 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) +0:57 Constant: +0:57 0 (const uint) +0:57 Constant: +0:57 1 (const uint) +0:59 MemoryBarrierBuffer ( global void) +0:61 Branch: Return with expression +0:61 'j' ( temp highp uint) +0:64 Function Definition: foo( ( global highp 4-component vector of float) +0:64 Function Parameters: +0:65 Sequence +0:65 Sequence +0:65 move second child to first child ( temp highp float) +0:65 'f' ( temp highp float) +0:65 add ( temp highp float) +0:65 add ( temp highp float) +0:65 add ( temp highp float) +0:65 j: direct index for structure (layout( column_major std140) uniform highp float) +0:65 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:65 Constant: +0:65 0 (const uint) +0:65 j: direct index for structure (layout( column_major std430) buffer highp float) +0:65 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:65 Constant: +0:65 0 (const int) +0:65 y: direct index for structure ( global highp float) +0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:65 Constant: +0:65 4 (const uint) +0:65 Constant: +0:65 1 (const int) +0:65 Convert uint to float ( temp highp float) +0:65 z: direct index for structure ( global highp uint) +0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:65 Constant: +0:65 4 (const uint) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child ( temp highp 2-component vector of float) +0:66 'v2' ( temp highp 2-component vector of float) +0:66 add ( temp highp 2-component vector of float) +0:66 add ( temp highp 2-component vector of float) +0:66 b: direct index for structure ( uniform highp 2-component vector of float) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 1 (const uint) +0:66 c: direct index for structure ( uniform highp 2-component vector of float) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 2 (const uint) +0:66 x: direct index for structure ( global highp 2-component vector of float) +0:66 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 4 (const uint) +0:66 Constant: +0:66 0 (const int) +0:67 Sequence +0:67 move second child to first child ( temp highp 4-component vector of float) +0:67 'v4' ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 a: direct index for structure ( uniform highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 0 (const uint) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 0 (const int) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 1 (const int) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 2 (const int) +0:67 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:67 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:67 Constant: +0:67 1 (const uint) +0:67 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) +0:67 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:67 Constant: +0:67 1 (const int) +0:67 texture ( global highp 4-component vector of float) +0:67 't1' ( uniform highp sampler2D) +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:68 Branch: Return with expression +0:68 component-wise multiply ( temp highp 4-component vector of float) +0:68 component-wise multiply ( temp highp 4-component vector of float) +0:68 Construct vec4 ( temp highp 4-component vector of float) +0:68 'f' ( temp highp float) +0:68 Construct vec4 ( temp highp 4-component vector of float) +0:68 'v2' ( temp highp 2-component vector of float) +0:68 Constant: +0:68 1.000000 +0:68 Constant: +0:68 1.000000 +0:68 'v4' ( temp highp 4-component vector of float) +0:71 Function Definition: main( ( global void) +0:71 Function Parameters: +0:72 Sequence +0:72 Sequence +0:72 move second child to first child ( temp highp float) +0:72 'j' ( temp highp float) +0:72 Convert uint to float ( temp highp float) +0:72 Function Call: bar( ( global highp uint) +0:73 move second child to first child ( temp highp 4-component vector of float) +0:73 'o' ( out highp 4-component vector of float) +0:73 vector-scale ( temp highp 4-component vector of float) +0:73 'j' ( temp highp float) +0:73 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:? 't1' ( uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:? 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:? 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:? 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) + + +Linked fragment stage: + + +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:36 Function Definition: bar( ( global highp uint) +0:36 Function Parameters: +0:37 Sequence +0:37 Sequence +0:37 move second child to first child ( temp highp uint) +0:37 'j' ( temp highp uint) +0:37 Constant: +0:37 0 (const uint) +0:38 move second child to first child ( temp highp uint) +0:38 'j' ( temp highp uint) +0:38 AtomicAdd ( global highp uint) +0:38 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:38 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:38 Constant: +0:38 0 (const uint) +0:38 Constant: +0:38 1 (const uint) +0:39 move second child to first child ( temp highp uint) +0:39 'j' ( temp highp uint) +0:39 subtract ( temp highp uint) +0:39 AtomicAdd ( global highp uint) +0:39 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:39 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:39 Constant: +0:39 0 (const uint) +0:39 Constant: +0:39 4294967295 (const uint) +0:39 Constant: +0:39 1 (const uint) +0:40 move second child to first child ( temp highp uint) +0:40 'j' ( temp highp uint) +0:40 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:40 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:40 Constant: +0:40 0 (const uint) +0:42 move second child to first child ( temp highp uint) +0:42 'j' ( temp highp uint) +0:42 AtomicAdd ( global highp uint) +0:42 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:42 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:42 Constant: +0:42 0 (const uint) +0:42 Constant: +0:42 1 (const uint) +0:43 move second child to first child ( temp highp uint) +0:43 'j' ( temp highp uint) +0:43 AtomicAdd ( global highp uint) +0:43 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:43 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:43 Constant: +0:43 0 (const uint) +0:43 Constant: +0:43 4294967295 (const uint) +0:44 move second child to first child ( temp highp uint) +0:44 'j' ( temp highp uint) +0:44 AtomicSubtract ( global highp uint) +0:44 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:44 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:44 Constant: +0:44 0 (const uint) +0:44 Constant: +0:44 1 (const uint) +0:46 move second child to first child ( temp highp uint) +0:46 'j' ( temp highp uint) +0:46 AtomicMin ( global highp uint) +0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:46 Constant: +0:46 0 (const uint) +0:46 'j' ( temp highp uint) +0:47 move second child to first child ( temp highp uint) +0:47 'j' ( temp highp uint) +0:47 AtomicMax ( global highp uint) +0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:47 Constant: +0:47 0 (const uint) +0:47 'j' ( temp highp uint) +0:48 move second child to first child ( temp highp uint) +0:48 'j' ( temp highp uint) +0:48 AtomicAnd ( global highp uint) +0:48 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:48 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:48 Constant: +0:48 0 (const uint) +0:48 'j' ( temp highp uint) +0:50 move second child to first child ( temp highp uint) +0:50 'j' ( temp highp uint) +0:50 AtomicOr ( global highp uint) +0:50 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:50 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:50 Constant: +0:50 0 (const uint) +0:50 'j' ( temp highp uint) +0:51 move second child to first child ( temp highp uint) +0:51 'j' ( temp highp uint) +0:51 AtomicXor ( global highp uint) +0:51 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:51 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:51 Constant: +0:51 0 (const uint) +0:51 'j' ( temp highp uint) +0:53 move second child to first child ( temp highp uint) +0:53 'j' ( temp highp uint) +0:53 AtomicExchange ( global highp uint) +0:53 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:53 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:53 Constant: +0:53 0 (const uint) +0:53 'j' ( temp highp uint) +0:54 move second child to first child ( temp highp uint) +0:54 'j' ( temp highp uint) +0:54 AtomicCompSwap ( global highp uint) +0:54 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:54 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:54 Constant: +0:54 0 (const uint) +0:54 Constant: +0:54 0 (const uint) +0:54 'j' ( temp highp uint) +0:56 AtomicAdd ( global highp uint) +0:56 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:56 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:56 Constant: +0:56 1 (const uint) +0:56 Constant: +0:56 1 (const uint) +0:57 AtomicAdd ( global highp uint) +0:57 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:57 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) +0:57 Constant: +0:57 0 (const uint) +0:57 Constant: +0:57 1 (const uint) +0:59 MemoryBarrierBuffer ( global void) +0:61 Branch: Return with expression +0:61 'j' ( temp highp uint) +0:64 Function Definition: foo( ( global highp 4-component vector of float) +0:64 Function Parameters: +0:65 Sequence +0:65 Sequence +0:65 move second child to first child ( temp highp float) +0:65 'f' ( temp highp float) +0:65 add ( temp highp float) +0:65 add ( temp highp float) +0:65 add ( temp highp float) +0:65 j: direct index for structure (layout( column_major std140) uniform highp float) +0:65 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:65 Constant: +0:65 0 (const uint) +0:65 j: direct index for structure (layout( column_major std430) buffer highp float) +0:65 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:65 Constant: +0:65 0 (const int) +0:65 y: direct index for structure ( global highp float) +0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:65 Constant: +0:65 4 (const uint) +0:65 Constant: +0:65 1 (const int) +0:65 Convert uint to float ( temp highp float) +0:65 z: direct index for structure ( global highp uint) +0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:65 Constant: +0:65 4 (const uint) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child ( temp highp 2-component vector of float) +0:66 'v2' ( temp highp 2-component vector of float) +0:66 add ( temp highp 2-component vector of float) +0:66 add ( temp highp 2-component vector of float) +0:66 b: direct index for structure ( uniform highp 2-component vector of float) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 1 (const uint) +0:66 c: direct index for structure ( uniform highp 2-component vector of float) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 2 (const uint) +0:66 x: direct index for structure ( global highp 2-component vector of float) +0:66 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 4 (const uint) +0:66 Constant: +0:66 0 (const int) +0:67 Sequence +0:67 move second child to first child ( temp highp 4-component vector of float) +0:67 'v4' ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 a: direct index for structure ( uniform highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 0 (const uint) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 0 (const int) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 1 (const int) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 2 (const int) +0:67 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:67 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:67 Constant: +0:67 1 (const uint) +0:67 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) +0:67 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:67 Constant: +0:67 1 (const int) +0:67 texture ( global highp 4-component vector of float) +0:67 't1' ( uniform highp sampler2D) +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:68 Branch: Return with expression +0:68 component-wise multiply ( temp highp 4-component vector of float) +0:68 component-wise multiply ( temp highp 4-component vector of float) +0:68 Construct vec4 ( temp highp 4-component vector of float) +0:68 'f' ( temp highp float) +0:68 Construct vec4 ( temp highp 4-component vector of float) +0:68 'v2' ( temp highp 2-component vector of float) +0:68 Constant: +0:68 1.000000 +0:68 Constant: +0:68 1.000000 +0:68 'v4' ( temp highp 4-component vector of float) +0:71 Function Definition: main( ( global void) +0:71 Function Parameters: +0:72 Sequence +0:72 Sequence +0:72 move second child to first child ( temp highp float) +0:72 'j' ( temp highp float) +0:72 Convert uint to float ( temp highp float) +0:72 Function Call: bar( ( global highp uint) +0:73 move second child to first child ( temp highp 4-component vector of float) +0:73 'o' ( out highp 4-component vector of float) +0:73 vector-scale ( temp highp 4-component vector of float) +0:73 'j' ( temp highp float) +0:73 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:? 't1' ( uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:? 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:? 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:? 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 163 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 159 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 8 "bar(" + Name 13 "foo(" + Name 16 "j" + Name 18 "gl_AtomicCounterBlock_0" + MemberName 18(gl_AtomicCounterBlock_0) 0 "counter1" + MemberName 18(gl_AtomicCounterBlock_0) 1 "counter2" + Name 20 "" + Name 63 "gl_AtomicCounterBlock_1" + MemberName 63(gl_AtomicCounterBlock_1) 0 "counter3" + Name 65 "" + Name 73 "f" + Name 74 "UniformBlock" + MemberName 74(UniformBlock) 0 "j" + MemberName 74(UniformBlock) 1 "k" + Name 76 "" + Name 80 "BufferBlock" + MemberName 80(BufferBlock) 0 "j" + MemberName 80(BufferBlock) 1 "k" + Name 82 "bufferInstance" + Name 89 "e" + MemberName 89(e) 0 "x" + MemberName 89(e) 1 "y" + MemberName 89(e) 2 "z" + Name 90 "gl_DefaultUniformBlock" + MemberName 90(gl_DefaultUniformBlock) 0 "a" + MemberName 90(gl_DefaultUniformBlock) 1 "b" + MemberName 90(gl_DefaultUniformBlock) 2 "c" + MemberName 90(gl_DefaultUniformBlock) 3 "d" + MemberName 90(gl_DefaultUniformBlock) 4 "structUniform" + Name 92 "" + Name 103 "v2" + Name 114 "v4" + Name 137 "t1" + Name 155 "j" + Name 159 "o" + MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Offset 4 + Decorate 18(gl_AtomicCounterBlock_0) BufferBlock + Decorate 20 DescriptorSet 0 + Decorate 20 Binding 4 + MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent + MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Volatile + MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent + MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Offset 0 + Decorate 63(gl_AtomicCounterBlock_1) BufferBlock + Decorate 65 DescriptorSet 0 + Decorate 65 Binding 5 + MemberDecorate 74(UniformBlock) 0 Offset 0 + MemberDecorate 74(UniformBlock) 1 Offset 16 + Decorate 74(UniformBlock) Block + Decorate 76 DescriptorSet 0 + Decorate 76 Binding 2 + MemberDecorate 80(BufferBlock) 0 Offset 0 + MemberDecorate 80(BufferBlock) 1 Offset 16 + Decorate 80(BufferBlock) BufferBlock + Decorate 82(bufferInstance) DescriptorSet 0 + Decorate 82(bufferInstance) Binding 3 + Decorate 88 ArrayStride 16 + MemberDecorate 89(e) 0 Offset 0 + MemberDecorate 89(e) 1 Offset 8 + MemberDecorate 89(e) 2 Offset 12 + MemberDecorate 90(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 90(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 90(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 90(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 90(gl_DefaultUniformBlock) 4 Offset 192 + Decorate 90(gl_DefaultUniformBlock) Block + Decorate 92 DescriptorSet 0 + Decorate 92 Binding 0 + Decorate 137(t1) DescriptorSet 0 + Decorate 137(t1) Binding 1 + Decorate 159(o) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeFunction 6(int) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypeFunction 11(fvec4) + 15: TypePointer Function 6(int) + 17: 6(int) Constant 0 +18(gl_AtomicCounterBlock_0): TypeStruct 6(int) 6(int) + 19: TypePointer Uniform 18(gl_AtomicCounterBlock_0) + 20: 19(ptr) Variable Uniform + 21: TypeInt 32 1 + 22: 21(int) Constant 0 + 23: TypePointer Uniform 6(int) + 25: 6(int) Constant 1 + 28: 6(int) Constant 4294967295 + 60: 21(int) Constant 1 +63(gl_AtomicCounterBlock_1): TypeStruct 6(int) + 64: TypePointer Uniform 63(gl_AtomicCounterBlock_1) + 65: 64(ptr) Variable Uniform + 68: 6(int) Constant 72 + 72: TypePointer Function 10(float) +74(UniformBlock): TypeStruct 10(float) 11(fvec4) + 75: TypePointer Uniform 74(UniformBlock) + 76: 75(ptr) Variable Uniform + 77: TypePointer Uniform 10(float) + 80(BufferBlock): TypeStruct 10(float) 11(fvec4) + 81: TypePointer Uniform 80(BufferBlock) +82(bufferInstance): 81(ptr) Variable Uniform + 86: TypeVector 10(float) 2 + 87: 6(int) Constant 10 + 88: TypeArray 11(fvec4) 87 + 89(e): TypeStruct 86(fvec2) 10(float) 6(int) +90(gl_DefaultUniformBlock): TypeStruct 11(fvec4) 86(fvec2) 86(fvec2) 88 89(e) + 91: TypePointer Uniform 90(gl_DefaultUniformBlock) + 92: 91(ptr) Variable Uniform + 93: 21(int) Constant 4 + 97: 21(int) Constant 2 + 102: TypePointer Function 86(fvec2) + 104: TypePointer Uniform 86(fvec2) + 113: TypePointer Function 11(fvec4) + 115: TypePointer Uniform 11(fvec4) + 118: 21(int) Constant 3 + 134: TypeImage 10(float) 2D sampled format:Unknown + 135: TypeSampledImage 134 + 136: TypePointer UniformConstant 135 + 137(t1): 136(ptr) Variable UniformConstant + 139: 10(float) Constant 0 + 140: 86(fvec2) ConstantComposite 139 139 + 146: 10(float) Constant 1065353216 + 158: TypePointer Output 11(fvec4) + 159(o): 158(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 155(j): 72(ptr) Variable Function + 156: 6(int) FunctionCall 8(bar() + 157: 10(float) ConvertUToF 156 + Store 155(j) 157 + 160: 10(float) Load 155(j) + 161: 11(fvec4) FunctionCall 13(foo() + 162: 11(fvec4) VectorTimesScalar 161 160 + Store 159(o) 162 + Return + FunctionEnd + 8(bar(): 6(int) Function None 7 + 9: Label + 16(j): 15(ptr) Variable Function + Store 16(j) 17 + 24: 23(ptr) AccessChain 20 22 + 26: 6(int) AtomicIAdd 24 25 17 25 + Store 16(j) 26 + 27: 23(ptr) AccessChain 20 22 + 29: 6(int) AtomicIAdd 27 25 17 28 + 30: 6(int) ISub 29 25 + Store 16(j) 30 + 31: 23(ptr) AccessChain 20 22 + 32: 6(int) Load 31 + Store 16(j) 32 + 33: 23(ptr) AccessChain 20 22 + 34: 6(int) AtomicIAdd 33 25 17 25 + Store 16(j) 34 + 35: 23(ptr) AccessChain 20 22 + 36: 6(int) AtomicIAdd 35 25 17 28 + Store 16(j) 36 + 37: 23(ptr) AccessChain 20 22 + 38: 6(int) AtomicISub 37 25 17 25 + Store 16(j) 38 + 39: 23(ptr) AccessChain 20 22 + 40: 6(int) Load 16(j) + 41: 6(int) AtomicUMin 39 25 17 40 + Store 16(j) 41 + 42: 23(ptr) AccessChain 20 22 + 43: 6(int) Load 16(j) + 44: 6(int) AtomicUMax 42 25 17 43 + Store 16(j) 44 + 45: 23(ptr) AccessChain 20 22 + 46: 6(int) Load 16(j) + 47: 6(int) AtomicAnd 45 25 17 46 + Store 16(j) 47 + 48: 23(ptr) AccessChain 20 22 + 49: 6(int) Load 16(j) + 50: 6(int) AtomicOr 48 25 17 49 + Store 16(j) 50 + 51: 23(ptr) AccessChain 20 22 + 52: 6(int) Load 16(j) + 53: 6(int) AtomicXor 51 25 17 52 + Store 16(j) 53 + 54: 23(ptr) AccessChain 20 22 + 55: 6(int) Load 16(j) + 56: 6(int) AtomicExchange 54 25 17 55 + Store 16(j) 56 + 57: 23(ptr) AccessChain 20 22 + 58: 6(int) Load 16(j) + 59: 6(int) AtomicCompareExchange 57 25 17 17 58 17 + Store 16(j) 59 + 61: 23(ptr) AccessChain 20 60 + 62: 6(int) AtomicIAdd 61 25 17 25 + 66: 23(ptr) AccessChain 65 22 + 67: 6(int) AtomicIAdd 66 25 17 25 + MemoryBarrier 25 68 + 69: 6(int) Load 16(j) + ReturnValue 69 + FunctionEnd + 13(foo(): 11(fvec4) Function None 12 + 14: Label + 73(f): 72(ptr) Variable Function + 103(v2): 102(ptr) Variable Function + 114(v4): 113(ptr) Variable Function + 78: 77(ptr) AccessChain 76 22 + 79: 10(float) Load 78 + 83: 77(ptr) AccessChain 82(bufferInstance) 22 + 84: 10(float) Load 83 + 85: 10(float) FAdd 79 84 + 94: 77(ptr) AccessChain 92 93 60 + 95: 10(float) Load 94 + 96: 10(float) FAdd 85 95 + 98: 23(ptr) AccessChain 92 93 97 + 99: 6(int) Load 98 + 100: 10(float) ConvertUToF 99 + 101: 10(float) FAdd 96 100 + Store 73(f) 101 + 105: 104(ptr) AccessChain 92 60 + 106: 86(fvec2) Load 105 + 107: 104(ptr) AccessChain 92 97 + 108: 86(fvec2) Load 107 + 109: 86(fvec2) FAdd 106 108 + 110: 104(ptr) AccessChain 92 93 22 + 111: 86(fvec2) Load 110 + 112: 86(fvec2) FAdd 109 111 + Store 103(v2) 112 + 116: 115(ptr) AccessChain 92 22 + 117: 11(fvec4) Load 116 + 119: 115(ptr) AccessChain 92 118 22 + 120: 11(fvec4) Load 119 + 121: 11(fvec4) FAdd 117 120 + 122: 115(ptr) AccessChain 92 118 60 + 123: 11(fvec4) Load 122 + 124: 11(fvec4) FAdd 121 123 + 125: 115(ptr) AccessChain 92 118 97 + 126: 11(fvec4) Load 125 + 127: 11(fvec4) FAdd 124 126 + 128: 115(ptr) AccessChain 76 60 + 129: 11(fvec4) Load 128 + 130: 11(fvec4) FAdd 127 129 + 131: 115(ptr) AccessChain 82(bufferInstance) 60 + 132: 11(fvec4) Load 131 + 133: 11(fvec4) FAdd 130 132 + 138: 135 Load 137(t1) + 141: 11(fvec4) ImageSampleImplicitLod 138 140 + 142: 11(fvec4) FAdd 133 141 + Store 114(v4) 142 + 143: 10(float) Load 73(f) + 144: 11(fvec4) CompositeConstruct 143 143 143 143 + 145: 86(fvec2) Load 103(v2) + 147: 10(float) CompositeExtract 145 0 + 148: 10(float) CompositeExtract 145 1 + 149: 11(fvec4) CompositeConstruct 147 148 146 146 + 150: 11(fvec4) FMul 144 149 + 151: 11(fvec4) Load 114(v4) + 152: 11(fvec4) FMul 150 151 + ReturnValue 152 + FunctionEnd diff --git a/Test/baseResults/vk.relaxed.link1.frag.out b/Test/baseResults/vk.relaxed.link1.frag.out new file mode 100644 index 0000000000..9dac4c64e2 --- /dev/null +++ b/Test/baseResults/vk.relaxed.link1.frag.out @@ -0,0 +1,515 @@ +vk.relaxed.link1.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: bar( ( global highp 4-component vector of float) +0:19 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp uint) +0:20 'j' ( temp highp uint) +0:20 add ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 0 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:20 subtract ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 4294967295 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'v' ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 a: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 0 (const uint) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 c1: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 3 (const uint) +0:21 d: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 4 (const uint) +0:23 Branch: Return with expression +0:23 vector-scale ( temp highp 4-component vector of float) +0:23 Convert uint to float ( temp highp float) +0:23 'j' ( temp highp uint) +0:23 'v' ( temp highp 4-component vector of float) +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'o' ( out highp 4-component vector of float) +0:27 add ( temp highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:27 Function Call: bar( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) + +vk.relaxed.link2.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:14 Function Definition: foo( ( global highp 4-component vector of float) +0:14 Function Parameters: +0:15 Sequence +0:15 Sequence +0:15 move second child to first child ( temp highp uint) +0:15 'j' ( temp highp uint) +0:15 add ( temp highp uint) +0:15 AtomicAdd ( global highp uint) +0:15 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:15 Constant: +0:15 1 (const uint) +0:15 Constant: +0:15 1 (const uint) +0:15 subtract ( temp highp uint) +0:15 AtomicAdd ( global highp uint) +0:15 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:15 Constant: +0:15 0 (const uint) +0:15 Constant: +0:15 4294967295 (const uint) +0:15 Constant: +0:15 1 (const uint) +0:16 Sequence +0:16 move second child to first child ( temp highp 4-component vector of float) +0:16 'v' ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 a: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 0 (const uint) +0:16 Construct vec4 ( temp highp 4-component vector of float) +0:16 direct index ( temp highp float) +0:16 b1: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp highp float) +0:16 b1: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 1 (const int) +0:16 direct index ( temp highp float) +0:16 b2: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 1 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp highp float) +0:16 b2: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 1 (const uint) +0:16 Constant: +0:16 1 (const int) +0:16 c2: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 3 (const uint) +0:16 d: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 4 (const uint) +0:18 Branch: Return with expression +0:18 vector-scale ( temp highp 4-component vector of float) +0:18 Convert uint to float ( temp highp float) +0:18 'j' ( temp highp uint) +0:18 'v' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) + + +Linked fragment stage: + + +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: bar( ( global highp 4-component vector of float) +0:19 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp uint) +0:20 'j' ( temp highp uint) +0:20 add ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) +0:20 Constant: +0:20 0 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:20 subtract ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 4294967295 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'v' ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 a: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 0 (const uint) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 c1: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 3 (const uint) +0:21 d: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 4 (const uint) +0:23 Branch: Return with expression +0:23 vector-scale ( temp highp 4-component vector of float) +0:23 Convert uint to float ( temp highp float) +0:23 'j' ( temp highp uint) +0:23 'v' ( temp highp 4-component vector of float) +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'o' ( out highp 4-component vector of float) +0:27 add ( temp highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:27 Function Call: bar( ( global highp 4-component vector of float) +0:14 Function Definition: foo( ( global highp 4-component vector of float) +0:14 Function Parameters: +0:15 Sequence +0:15 Sequence +0:15 move second child to first child ( temp highp uint) +0:15 'j' ( temp highp uint) +0:15 add ( temp highp uint) +0:15 AtomicAdd ( global highp uint) +0:15 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) +0:15 Constant: +0:15 1 (const uint) +0:15 Constant: +0:15 1 (const uint) +0:15 subtract ( temp highp uint) +0:15 AtomicAdd ( global highp uint) +0:15 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) +0:15 Constant: +0:15 2 (const uint) +0:15 Constant: +0:15 4294967295 (const uint) +0:15 Constant: +0:15 1 (const uint) +0:16 Sequence +0:16 move second child to first child ( temp highp 4-component vector of float) +0:16 'v' ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 a: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 0 (const uint) +0:16 Construct vec4 ( temp highp 4-component vector of float) +0:16 direct index ( temp highp float) +0:16 b1: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 1 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp highp float) +0:16 b1: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 1 (const uint) +0:16 Constant: +0:16 1 (const int) +0:16 direct index ( temp highp float) +0:16 b2: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp highp float) +0:16 b2: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 1 (const int) +0:16 c2: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 5 (const uint) +0:16 d: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 4 (const uint) +0:18 Branch: Return with expression +0:18 vector-scale ( temp highp 4-component vector of float) +0:18 Convert uint to float ( temp highp float) +0:18 'j' ( temp highp uint) +0:18 'v' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 105 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 68 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 9 "bar(" + Name 11 "foo(" + Name 15 "j" + Name 16 "gl_AtomicCounterBlock_0" + MemberName 16(gl_AtomicCounterBlock_0) 0 "counter1" + MemberName 16(gl_AtomicCounterBlock_0) 1 "counter2" + MemberName 16(gl_AtomicCounterBlock_0) 2 "counter3" + Name 18 "" + Name 33 "v" + Name 35 "gl_DefaultUniformBlock" + MemberName 35(gl_DefaultUniformBlock) 0 "a" + MemberName 35(gl_DefaultUniformBlock) 1 "b1" + MemberName 35(gl_DefaultUniformBlock) 2 "b2" + MemberName 35(gl_DefaultUniformBlock) 3 "c1" + MemberName 35(gl_DefaultUniformBlock) 4 "d" + MemberName 35(gl_DefaultUniformBlock) 5 "c2" + Name 37 "" + Name 68 "o" + Name 72 "j" + Name 79 "v" + MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Offset 4 + MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Volatile + MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Offset 8 + Decorate 16(gl_AtomicCounterBlock_0) BufferBlock + Decorate 18 DescriptorSet 0 + Decorate 18 Binding 1 + MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 + MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 + Decorate 35(gl_DefaultUniformBlock) Block + Decorate 37 DescriptorSet 0 + Decorate 37 Binding 0 + Decorate 68(o) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 13: TypeInt 32 0 + 14: TypePointer Function 13(int) +16(gl_AtomicCounterBlock_0): TypeStruct 13(int) 13(int) 13(int) + 17: TypePointer Uniform 16(gl_AtomicCounterBlock_0) + 18: 17(ptr) Variable Uniform + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 21: TypePointer Uniform 13(int) + 23: 13(int) Constant 1 + 24: 13(int) Constant 0 + 26: 19(int) Constant 1 + 28: 13(int) Constant 4294967295 + 32: TypePointer Function 7(fvec4) + 34: TypeVector 6(float) 2 +35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 34(fvec2) 34(fvec2) 7(fvec4) 7(fvec4) 7(fvec4) + 36: TypePointer Uniform 35(gl_DefaultUniformBlock) + 37: 36(ptr) Variable Uniform + 38: TypePointer Uniform 7(fvec4) + 41: TypePointer Uniform 6(float) + 46: 19(int) Constant 2 + 53: 19(int) Constant 3 + 57: 19(int) Constant 4 + 67: TypePointer Output 7(fvec4) + 68(o): 67(ptr) Variable Output + 92: 19(int) Constant 5 + 4(main): 2 Function None 3 + 5: Label + 69: 7(fvec4) FunctionCall 11(foo() + 70: 7(fvec4) FunctionCall 9(bar() + 71: 7(fvec4) FAdd 69 70 + Store 68(o) 71 + Return + FunctionEnd + 9(bar(): 7(fvec4) Function None 8 + 10: Label + 15(j): 14(ptr) Variable Function + 33(v): 32(ptr) Variable Function + 22: 21(ptr) AccessChain 18 20 + 25: 13(int) AtomicIAdd 22 23 24 23 + 27: 21(ptr) AccessChain 18 26 + 29: 13(int) AtomicIAdd 27 23 24 28 + 30: 13(int) ISub 29 23 + 31: 13(int) IAdd 25 30 + Store 15(j) 31 + 39: 38(ptr) AccessChain 37 20 + 40: 7(fvec4) Load 39 + 42: 41(ptr) AccessChain 37 26 24 + 43: 6(float) Load 42 + 44: 41(ptr) AccessChain 37 26 23 + 45: 6(float) Load 44 + 47: 41(ptr) AccessChain 37 46 24 + 48: 6(float) Load 47 + 49: 41(ptr) AccessChain 37 46 23 + 50: 6(float) Load 49 + 51: 7(fvec4) CompositeConstruct 43 45 48 50 + 52: 7(fvec4) FAdd 40 51 + 54: 38(ptr) AccessChain 37 53 + 55: 7(fvec4) Load 54 + 56: 7(fvec4) FAdd 52 55 + 58: 38(ptr) AccessChain 37 57 + 59: 7(fvec4) Load 58 + 60: 7(fvec4) FAdd 56 59 + Store 33(v) 60 + 61: 13(int) Load 15(j) + 62: 6(float) ConvertUToF 61 + 63: 7(fvec4) Load 33(v) + 64: 7(fvec4) VectorTimesScalar 63 62 + ReturnValue 64 + FunctionEnd + 11(foo(): 7(fvec4) Function None 8 + 12: Label + 72(j): 14(ptr) Variable Function + 79(v): 32(ptr) Variable Function + 73: 21(ptr) AccessChain 18 26 + 74: 13(int) AtomicIAdd 73 23 24 23 + 75: 21(ptr) AccessChain 18 46 + 76: 13(int) AtomicIAdd 75 23 24 28 + 77: 13(int) ISub 76 23 + 78: 13(int) IAdd 74 77 + Store 72(j) 78 + 80: 38(ptr) AccessChain 37 20 + 81: 7(fvec4) Load 80 + 82: 41(ptr) AccessChain 37 26 24 + 83: 6(float) Load 82 + 84: 41(ptr) AccessChain 37 26 23 + 85: 6(float) Load 84 + 86: 41(ptr) AccessChain 37 46 24 + 87: 6(float) Load 86 + 88: 41(ptr) AccessChain 37 46 23 + 89: 6(float) Load 88 + 90: 7(fvec4) CompositeConstruct 83 85 87 89 + 91: 7(fvec4) FAdd 81 90 + 93: 38(ptr) AccessChain 37 92 + 94: 7(fvec4) Load 93 + 95: 7(fvec4) FAdd 91 94 + 96: 38(ptr) AccessChain 37 57 + 97: 7(fvec4) Load 96 + 98: 7(fvec4) FAdd 95 97 + Store 79(v) 98 + 99: 13(int) Load 72(j) + 100: 6(float) ConvertUToF 99 + 101: 7(fvec4) Load 79(v) + 102: 7(fvec4) VectorTimesScalar 101 100 + ReturnValue 102 + FunctionEnd diff --git a/Test/baseResults/vk.relaxed.stagelink.vert.out b/Test/baseResults/vk.relaxed.stagelink.vert.out new file mode 100644 index 0000000000..a63f10c353 --- /dev/null +++ b/Test/baseResults/vk.relaxed.stagelink.vert.out @@ -0,0 +1,717 @@ +vk.relaxed.stagelink.vert +Shader version: 460 +0:? Sequence +0:18 Function Definition: foo( ( global highp 4-component vector of float) +0:18 Function Parameters: +0:19 Sequence +0:19 Sequence +0:19 move second child to first child ( temp highp uint) +0:19 'j' ( temp highp uint) +0:19 add ( temp highp uint) +0:19 AtomicAdd ( global highp uint) +0:19 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:19 Constant: +0:19 1 (const uint) +0:19 Constant: +0:19 1 (const uint) +0:19 subtract ( temp highp uint) +0:19 AtomicAdd ( global highp uint) +0:19 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:19 Constant: +0:19 0 (const uint) +0:19 Constant: +0:19 4294967295 (const uint) +0:19 Constant: +0:19 1 (const uint) +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 'v' ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 a: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 0 (const uint) +0:20 Construct vec4 ( temp highp 4-component vector of float) +0:20 direct index ( temp highp float) +0:20 b1: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 2 (const uint) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp highp float) +0:20 b1: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 2 (const uint) +0:20 Constant: +0:20 1 (const int) +0:20 direct index ( temp highp float) +0:20 b2: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp highp float) +0:20 b2: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 1 (const int) +0:20 c2: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 3 (const uint) +0:20 d: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 4 (const uint) +0:22 Branch: Return with expression +0:22 vector-scale ( temp highp 4-component vector of float) +0:22 Convert uint to float ( temp highp float) +0:22 'j' ( temp highp uint) +0:22 'v' ( temp highp 4-component vector of float) +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'v' ( temp highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'v' ( temp highp 4-component vector of float) +0:28 add ( temp highp 4-component vector of float) +0:28 'v' ( temp highp 4-component vector of float) +0:28 indirect index ( temp highp 4-component vector of float) +0:28 s: direct index for structure ( uniform 4-element array of highp 4-component vector of float) +0:28 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:28 Constant: +0:28 5 (const uint) +0:28 'gl_VertexID' ( in int VertexIndex) +0:29 move second child to first child ( temp highp float) +0:29 direct index ( temp highp float) +0:29 'v' ( temp highp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 subtract ( temp highp float) +0:29 direct index ( temp highp float) +0:29 'v' ( temp highp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 Convert int to float ( temp highp float) +0:29 'gl_InstanceID' ( in highp int InstanceIndex) +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:30 'v' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) + +vk.relaxed.stagelink.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: foo( ( global highp 4-component vector of float) +0:19 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp uint) +0:20 'j' ( temp highp uint) +0:20 add ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 0 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:20 subtract ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 4294967295 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'v' ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 a: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 0 (const uint) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 c1: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 3 (const uint) +0:21 d: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 4 (const uint) +0:23 Branch: Return with expression +0:23 vector-scale ( temp highp 4-component vector of float) +0:23 Convert uint to float ( temp highp float) +0:23 'j' ( temp highp uint) +0:23 'v' ( temp highp 4-component vector of float) +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'o' ( out highp 4-component vector of float) +0:27 add ( temp highp 4-component vector of float) +0:27 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) + + +Linked vertex stage: + + +Linked fragment stage: + + +Shader version: 460 +0:? Sequence +0:18 Function Definition: foo( ( global highp 4-component vector of float) +0:18 Function Parameters: +0:19 Sequence +0:19 Sequence +0:19 move second child to first child ( temp highp uint) +0:19 'j' ( temp highp uint) +0:19 add ( temp highp uint) +0:19 AtomicAdd ( global highp uint) +0:19 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:19 Constant: +0:19 1 (const uint) +0:19 Constant: +0:19 1 (const uint) +0:19 subtract ( temp highp uint) +0:19 AtomicAdd ( global highp uint) +0:19 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:19 Constant: +0:19 0 (const uint) +0:19 Constant: +0:19 4294967295 (const uint) +0:19 Constant: +0:19 1 (const uint) +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 'v' ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 a: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 0 (const uint) +0:20 Construct vec4 ( temp highp 4-component vector of float) +0:20 direct index ( temp highp float) +0:20 b1: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 2 (const uint) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp highp float) +0:20 b1: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 2 (const uint) +0:20 Constant: +0:20 1 (const int) +0:20 direct index ( temp highp float) +0:20 b2: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp highp float) +0:20 b2: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 1 (const int) +0:20 c2: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 3 (const uint) +0:20 d: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 4 (const uint) +0:22 Branch: Return with expression +0:22 vector-scale ( temp highp 4-component vector of float) +0:22 Convert uint to float ( temp highp float) +0:22 'j' ( temp highp uint) +0:22 'v' ( temp highp 4-component vector of float) +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'v' ( temp highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'v' ( temp highp 4-component vector of float) +0:28 add ( temp highp 4-component vector of float) +0:28 'v' ( temp highp 4-component vector of float) +0:28 indirect index ( temp highp 4-component vector of float) +0:28 s: direct index for structure ( uniform 4-element array of highp 4-component vector of float) +0:28 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:28 Constant: +0:28 5 (const uint) +0:28 'gl_VertexID' ( in int VertexIndex) +0:29 move second child to first child ( temp highp float) +0:29 direct index ( temp highp float) +0:29 'v' ( temp highp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 subtract ( temp highp float) +0:29 direct index ( temp highp float) +0:29 'v' ( temp highp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 Convert int to float ( temp highp float) +0:29 'gl_InstanceID' ( in highp int InstanceIndex) +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:30 'v' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: foo( ( global highp 4-component vector of float) +0:19 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp uint) +0:20 'j' ( temp highp uint) +0:20 add ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 0 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:20 subtract ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 4294967295 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'v' ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 a: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 0 (const uint) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 c1: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 3 (const uint) +0:21 d: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 4 (const uint) +0:23 Branch: Return with expression +0:23 vector-scale ( temp highp 4-component vector of float) +0:23 Convert uint to float ( temp highp float) +0:23 'j' ( temp highp uint) +0:23 'v' ( temp highp 4-component vector of float) +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'o' ( out highp 4-component vector of float) +0:27 add ( temp highp 4-component vector of float) +0:27 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 88 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 72 80 86 + Source GLSL 460 + Name 4 "main" + Name 9 "foo(" + Name 13 "j" + Name 14 "gl_AtomicCounterBlock_0" + MemberName 14(gl_AtomicCounterBlock_0) 0 "counter3" + MemberName 14(gl_AtomicCounterBlock_0) 1 "counter2" + MemberName 14(gl_AtomicCounterBlock_0) 2 "counter1" + Name 16 "" + Name 31 "v" + Name 35 "gl_DefaultUniformBlock" + MemberName 35(gl_DefaultUniformBlock) 0 "a" + MemberName 35(gl_DefaultUniformBlock) 1 "b2" + MemberName 35(gl_DefaultUniformBlock) 2 "b1" + MemberName 35(gl_DefaultUniformBlock) 3 "c2" + MemberName 35(gl_DefaultUniformBlock) 4 "d" + MemberName 35(gl_DefaultUniformBlock) 5 "s" + MemberName 35(gl_DefaultUniformBlock) 6 "c1" + Name 37 "" + Name 67 "v" + Name 72 "gl_VertexID" + Name 80 "gl_InstanceID" + Name 86 "io" + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4 + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8 + Decorate 14(gl_AtomicCounterBlock_0) BufferBlock + Decorate 16 DescriptorSet 0 + Decorate 16 Binding 1 + Decorate 34 ArrayStride 16 + MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 + MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 + MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128 + Decorate 35(gl_DefaultUniformBlock) Block + Decorate 37 DescriptorSet 0 + Decorate 37 Binding 0 + Decorate 72(gl_VertexID) BuiltIn VertexIndex + Decorate 80(gl_InstanceID) BuiltIn InstanceIndex + Decorate 86(io) 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(gl_AtomicCounterBlock_0): TypeStruct 11(int) 11(int) 11(int) + 15: TypePointer Uniform 14(gl_AtomicCounterBlock_0) + 16: 15(ptr) Variable Uniform + 17: TypeInt 32 1 + 18: 17(int) Constant 1 + 19: TypePointer Uniform 11(int) + 21: 11(int) Constant 1 + 22: 11(int) Constant 0 + 24: 17(int) Constant 0 + 26: 11(int) Constant 4294967295 + 30: TypePointer Function 7(fvec4) + 32: TypeVector 6(float) 2 + 33: 11(int) Constant 4 + 34: TypeArray 7(fvec4) 33 +35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 32(fvec2) 32(fvec2) 7(fvec4) 7(fvec4) 34 7(fvec4) + 36: TypePointer Uniform 35(gl_DefaultUniformBlock) + 37: 36(ptr) Variable Uniform + 38: TypePointer Uniform 7(fvec4) + 41: 17(int) Constant 2 + 42: TypePointer Uniform 6(float) + 53: 17(int) Constant 3 + 57: 17(int) Constant 4 + 70: 17(int) Constant 5 + 71: TypePointer Input 17(int) + 72(gl_VertexID): 71(ptr) Variable Input + 77: TypePointer Function 6(float) +80(gl_InstanceID): 71(ptr) Variable Input + 85: TypePointer Output 7(fvec4) + 86(io): 85(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 67(v): 30(ptr) Variable Function + 68: 7(fvec4) FunctionCall 9(foo() + Store 67(v) 68 + 69: 7(fvec4) Load 67(v) + 73: 17(int) Load 72(gl_VertexID) + 74: 38(ptr) AccessChain 37 70 73 + 75: 7(fvec4) Load 74 + 76: 7(fvec4) FAdd 69 75 + Store 67(v) 76 + 78: 77(ptr) AccessChain 67(v) 22 + 79: 6(float) Load 78 + 81: 17(int) Load 80(gl_InstanceID) + 82: 6(float) ConvertSToF 81 + 83: 6(float) FSub 79 82 + 84: 77(ptr) AccessChain 67(v) 22 + Store 84 83 + 87: 7(fvec4) Load 67(v) + Store 86(io) 87 + Return + FunctionEnd + 9(foo(): 7(fvec4) Function None 8 + 10: Label + 13(j): 12(ptr) Variable Function + 31(v): 30(ptr) Variable Function + 20: 19(ptr) AccessChain 16 18 + 23: 11(int) AtomicIAdd 20 21 22 21 + 25: 19(ptr) AccessChain 16 24 + 27: 11(int) AtomicIAdd 25 21 22 26 + 28: 11(int) ISub 27 21 + 29: 11(int) IAdd 23 28 + Store 13(j) 29 + 39: 38(ptr) AccessChain 37 24 + 40: 7(fvec4) Load 39 + 43: 42(ptr) AccessChain 37 41 22 + 44: 6(float) Load 43 + 45: 42(ptr) AccessChain 37 41 21 + 46: 6(float) Load 45 + 47: 42(ptr) AccessChain 37 18 22 + 48: 6(float) Load 47 + 49: 42(ptr) AccessChain 37 18 21 + 50: 6(float) Load 49 + 51: 7(fvec4) CompositeConstruct 44 46 48 50 + 52: 7(fvec4) FAdd 40 51 + 54: 38(ptr) AccessChain 37 53 + 55: 7(fvec4) Load 54 + 56: 7(fvec4) FAdd 52 55 + 58: 38(ptr) AccessChain 37 57 + 59: 7(fvec4) Load 58 + 60: 7(fvec4) FAdd 56 59 + Store 31(v) 60 + 61: 11(int) Load 13(j) + 62: 6(float) ConvertUToF 61 + 63: 7(fvec4) Load 31(v) + 64: 7(fvec4) VectorTimesScalar 63 62 + ReturnValue 64 + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 74 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 68 70 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 9 "foo(" + Name 13 "j" + Name 14 "gl_AtomicCounterBlock_0" + MemberName 14(gl_AtomicCounterBlock_0) 0 "counter3" + MemberName 14(gl_AtomicCounterBlock_0) 1 "counter2" + MemberName 14(gl_AtomicCounterBlock_0) 2 "counter1" + Name 16 "" + Name 31 "v" + Name 35 "gl_DefaultUniformBlock" + MemberName 35(gl_DefaultUniformBlock) 0 "a" + MemberName 35(gl_DefaultUniformBlock) 1 "b2" + MemberName 35(gl_DefaultUniformBlock) 2 "b1" + MemberName 35(gl_DefaultUniformBlock) 3 "c2" + MemberName 35(gl_DefaultUniformBlock) 4 "d" + MemberName 35(gl_DefaultUniformBlock) 5 "s" + MemberName 35(gl_DefaultUniformBlock) 6 "c1" + Name 37 "" + Name 68 "o" + Name 70 "io" + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4 + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8 + Decorate 14(gl_AtomicCounterBlock_0) BufferBlock + Decorate 16 DescriptorSet 0 + Decorate 16 Binding 1 + Decorate 34 ArrayStride 16 + MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 + MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 + MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128 + Decorate 35(gl_DefaultUniformBlock) Block + Decorate 37 DescriptorSet 0 + Decorate 37 Binding 0 + Decorate 68(o) Location 0 + Decorate 70(io) 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(gl_AtomicCounterBlock_0): TypeStruct 11(int) 11(int) 11(int) + 15: TypePointer Uniform 14(gl_AtomicCounterBlock_0) + 16: 15(ptr) Variable Uniform + 17: TypeInt 32 1 + 18: 17(int) Constant 2 + 19: TypePointer Uniform 11(int) + 21: 11(int) Constant 1 + 22: 11(int) Constant 0 + 24: 17(int) Constant 1 + 26: 11(int) Constant 4294967295 + 30: TypePointer Function 7(fvec4) + 32: TypeVector 6(float) 2 + 33: 11(int) Constant 4 + 34: TypeArray 7(fvec4) 33 +35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 32(fvec2) 32(fvec2) 7(fvec4) 7(fvec4) 34 7(fvec4) + 36: TypePointer Uniform 35(gl_DefaultUniformBlock) + 37: 36(ptr) Variable Uniform + 38: 17(int) Constant 0 + 39: TypePointer Uniform 7(fvec4) + 42: TypePointer Uniform 6(float) + 53: 17(int) Constant 6 + 57: 17(int) Constant 4 + 67: TypePointer Output 7(fvec4) + 68(o): 67(ptr) Variable Output + 69: TypePointer Input 7(fvec4) + 70(io): 69(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 71: 7(fvec4) Load 70(io) + 72: 7(fvec4) FunctionCall 9(foo() + 73: 7(fvec4) FAdd 71 72 + Store 68(o) 73 + Return + FunctionEnd + 9(foo(): 7(fvec4) Function None 8 + 10: Label + 13(j): 12(ptr) Variable Function + 31(v): 30(ptr) Variable Function + 20: 19(ptr) AccessChain 16 18 + 23: 11(int) AtomicIAdd 20 21 22 21 + 25: 19(ptr) AccessChain 16 24 + 27: 11(int) AtomicIAdd 25 21 22 26 + 28: 11(int) ISub 27 21 + 29: 11(int) IAdd 23 28 + Store 13(j) 29 + 40: 39(ptr) AccessChain 37 38 + 41: 7(fvec4) Load 40 + 43: 42(ptr) AccessChain 37 18 22 + 44: 6(float) Load 43 + 45: 42(ptr) AccessChain 37 18 21 + 46: 6(float) Load 45 + 47: 42(ptr) AccessChain 37 24 22 + 48: 6(float) Load 47 + 49: 42(ptr) AccessChain 37 24 21 + 50: 6(float) Load 49 + 51: 7(fvec4) CompositeConstruct 44 46 48 50 + 52: 7(fvec4) FAdd 41 51 + 54: 39(ptr) AccessChain 37 53 + 55: 7(fvec4) Load 54 + 56: 7(fvec4) FAdd 52 55 + 58: 39(ptr) AccessChain 37 57 + 59: 7(fvec4) Load 58 + 60: 7(fvec4) FAdd 56 59 + Store 31(v) 60 + 61: 11(int) Load 13(j) + 62: 6(float) ConvertUToF 61 + 63: 7(fvec4) Load 31(v) + 64: 7(fvec4) VectorTimesScalar 63 62 + ReturnValue 64 + FunctionEnd diff --git a/Test/iomap.crossStage.2.frag b/Test/iomap.crossStage.2.frag new file mode 100644 index 0000000000..25756a6d0e --- /dev/null +++ b/Test/iomap.crossStage.2.frag @@ -0,0 +1,42 @@ +#version 460 + + +layout(location = 5) in outBlock { + vec4 o3; +}; + + +in vec4 gfo1; +in vec2 gfo2; + +out vec4 outColor; + +uniform vec2 u1; +uniform vec3 u2; // initializer present in vertex stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in vertex stage + +uniform mat2 um2 = mat2(4.0); + +layout (location = 0, binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +buffer fragOnlyBlock { + vec2 fb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName2 [2]; // instance name different from vert + + +void main() +{ + vec4 color = gfo1 * u1.rgrg * u2.rgbr * u3.rgba; // o1 is statically used + outColor = color; +} + diff --git a/Test/iomap.crossStage.2.geom b/Test/iomap.crossStage.2.geom new file mode 100644 index 0000000000..91508ab5ef --- /dev/null +++ b/Test/iomap.crossStage.2.geom @@ -0,0 +1,39 @@ +#version 460 + +layout(points) in; +layout(triangle_strip, max_vertices=3) out; + +in vec4 vgo1[]; +in vec2 vgo2[]; + +layout(location = 5) in outBlock { + vec4 o3; +} inBlock[]; + +out vec4 gfo1; +out vec2 gfo2; + +layout(location = 5) out outBlock { + vec4 o3; +} gf_out; + +uniform vec2 u1; +uniform vec3 u2 = vec3(0); // initializer not present in fragment stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + for (int i = 0; i < 3; i++) { + gfo1 = vec4(0); + gfo2 = vec2(0); + gf_out.o3 = inBlock[i].o3; + EmitVertex(); + } + EndPrimitive(); +} + diff --git a/Test/iomap.crossStage.2.vert b/Test/iomap.crossStage.2.vert new file mode 100644 index 0000000000..ebb0d9d1e2 --- /dev/null +++ b/Test/iomap.crossStage.2.vert @@ -0,0 +1,38 @@ +#version 460 + +out vec4 vgo1; // declaration order different than fragment shader +out vec2 vgo2; // declaration order different than fragment shader + +layout(location = 5) out outBlock { + vec4 o3; +}; + +uniform vec2 u1; +uniform vec3 u2 = vec3(0); // initializer not present in fragment stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage + +uniform mat2 um2 = mat2(4.0); + +layout (location = 0, binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +buffer vertOnlyBlock { + vec2 vb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + vgo1 = vec4(0); + vgo2 = vec2(0); + o3 = vec4(0); +} + diff --git a/Test/iomap.crossStage.frag b/Test/iomap.crossStage.frag new file mode 100644 index 0000000000..16247032e3 --- /dev/null +++ b/Test/iomap.crossStage.frag @@ -0,0 +1,41 @@ +#version 460 + + +layout(location = 5) in outBlock { + vec4 o3; +}; + +in vec2 o2; // declaration order different than vertex shader +in vec4 o1; // declaration order different than vertex shader + +out vec4 outColor; + +uniform vec2 u1; +uniform vec3 u2; // initializer present in vertex stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in vertex stage + +uniform mat2 um2 = mat2(4.0); + +layout (location = 0, binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +buffer fragOnlyBlock { + vec2 fb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName2 [2]; // instance name different from vert + + +void main() +{ + vec4 color = o1 * u1.rgrg * u2.rgbr * u3.rgba; // o1 is statically used + outColor = color; +} + diff --git a/Test/iomap.crossStage.vert b/Test/iomap.crossStage.vert new file mode 100644 index 0000000000..d05874ffae --- /dev/null +++ b/Test/iomap.crossStage.vert @@ -0,0 +1,38 @@ +#version 460 + +out vec4 o1; // declaration order different than fragment shader +out vec2 o2; // declaration order different than fragment shader + +layout(location = 5) out outBlock { + vec4 o3; +}; + +uniform vec2 u1; +uniform vec3 u2 = vec3(0); // initializer not present in fragment stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage + +uniform mat2 um2 = mat2(4.0); + +layout (location = 0, binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +buffer vertOnlyBlock { + vec2 vb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + o1 = vec4(0); + o2 = vec2(0); + o3 = vec4(0); +} + diff --git a/Test/iomap.crossStage.vk.frag b/Test/iomap.crossStage.vk.frag new file mode 100644 index 0000000000..d09e687457 --- /dev/null +++ b/Test/iomap.crossStage.vk.frag @@ -0,0 +1,50 @@ +#version 460 + + +layout(location = 5) in outBlock { + vec4 o3; +}; + + +in vec4 gfo1; +in vec2 gfo2; + +out vec4 outColor; + +layout (binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +readonly buffer fragOnlyBlock { + vec2 fb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName2 [2]; // instance name different from vert + +vec2 Bar() { + return fb1 + + blockName2[0].b + + blockName2[1].b; +} + +vec4 Foo() { + return a + + b + + blockName2[0].a + + blockName2[1].a + + vec4(Bar(), 0.0, 0.0); +} + +void main() +{ + vec4 color = gfo1; // o1 is statically used + color = color + Foo(); + outColor = color; +} + diff --git a/Test/iomap.crossStage.vk.geom b/Test/iomap.crossStage.vk.geom new file mode 100644 index 0000000000..b951737363 --- /dev/null +++ b/Test/iomap.crossStage.vk.geom @@ -0,0 +1,35 @@ +#version 460 + +layout(points) in; +layout(triangle_strip, max_vertices=3) out; + +in vec4 vgo1[]; +in vec2 vgo2[]; + +layout(location = 5) in outBlock { + vec4 o3; +} inBlock[]; + +out vec4 gfo1; +out vec2 gfo2; + +layout(location = 5) out outBlock { + vec4 o3; +} gf_out; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + for (int i = 0; i < 3; i++) { + gfo1 = vec4(0); + gfo2 = vec2(0); + gf_out.o3 = inBlock[i].o3; + EmitVertex(); + } + EndPrimitive(); +} + diff --git a/Test/iomap.crossStage.vk.vert b/Test/iomap.crossStage.vk.vert new file mode 100644 index 0000000000..e422131f2c --- /dev/null +++ b/Test/iomap.crossStage.vk.vert @@ -0,0 +1,32 @@ +#version 460 + +out vec4 vgo1; // declaration order different than fragment shader +out vec2 vgo2; // declaration order different than fragment shader + +layout(location = 5) out outBlock { + vec4 o3; +}; + +layout (binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +readonly buffer vertOnlyBlock { + vec2 vb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + vgo1 = vec4(0); + vgo2 = vec2(0); + o3 = vec4(0); +} + diff --git a/Test/vk.relaxed.errorcheck.frag b/Test/vk.relaxed.errorcheck.frag new file mode 100644 index 0000000000..b75b50b77f --- /dev/null +++ b/Test/vk.relaxed.errorcheck.frag @@ -0,0 +1,16 @@ +#version 460 + +layout (location = 0) in vec4 io; + +out vec4 o; + +// default uniforms will be gathered into a uniform block +uniform vec4 a; // declared in both stages with different types + +vec4 foo() { + return a; +} + +void main() { + o = io + foo(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.errorcheck.vert b/Test/vk.relaxed.errorcheck.vert new file mode 100644 index 0000000000..b1bdbbecad --- /dev/null +++ b/Test/vk.relaxed.errorcheck.vert @@ -0,0 +1,15 @@ +#version 460 + +layout (location = 0) out vec4 io; + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec2 a; // declared in both stages with different type + +vec4 foo() { + return a.xyxy; +} + +void main() { + io = foo(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.frag b/Test/vk.relaxed.frag new file mode 100644 index 0000000000..d43416e0c0 --- /dev/null +++ b/Test/vk.relaxed.frag @@ -0,0 +1,74 @@ +#version 460 + +out vec4 o; + +// default uniforms will be gathered into a uniform block +uniform vec4 a; +uniform vec2 b = vec2(0, 0); // initializer will be ignored +layout(location = 0) uniform vec2 c; // location qualifier will be ignored +uniform vec4 d[10]; +uniform struct e { + vec2 x; + float y; + uint z; +} structUniform; + +// opaque types will not be grouped into uniform block +uniform sampler2D t1; + +// shared and packed layout qualifier are silently ignored +layout(shared) uniform UniformBlock { + float j; + vec4 k; +}; + +layout(packed) buffer BufferBlock { + float j; + vec4 k; +} bufferInstance; + +// atomic_uint will be converted to uint and gathered in a buffer block +layout(binding = 0) uniform atomic_uint counter1; // offset not used +layout(binding = 0) uniform atomic_uint counter2; // offset not used +layout(binding = 1) uniform atomic_uint counter3; // offset not used + +// atomic counter functions will be converted to equivalent integer atomic operations +uint bar() { + uint j = 0; + j = atomicCounterIncrement(counter1); + j = atomicCounterDecrement(counter1); + j = atomicCounter(counter1); + + j = atomicCounterAdd(counter1, 1); + j = atomicCounterAdd(counter1, -1); + j = atomicCounterSubtract(counter1, 1); + + j = atomicCounterMin(counter1, j); + j = atomicCounterMax(counter1, j); + j = atomicCounterAnd(counter1, j); + + j = atomicCounterOr(counter1, j); + j = atomicCounterXor(counter1, j); + + j = atomicCounterExchange(counter1, j); + j = atomicCounterCompSwap(counter1, 0, j); + + atomicCounterIncrement(counter2); + atomicCounterIncrement(counter3); + + memoryBarrierAtomicCounter(); + + return j; +} + +vec4 foo() { + float f = j + bufferInstance.j + structUniform.y + structUniform.z; + vec2 v2 = b + c + structUniform.x; + vec4 v4 = a + d[0] + d[1] + d[2] + k + bufferInstance.k + texture(t1, vec2(0, 0)); + return vec4(f) * vec4(v2, 1, 1) * v4; +} + +void main() { + float j = float(bar()); + o = j * foo(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.link1.frag b/Test/vk.relaxed.link1.frag new file mode 100644 index 0000000000..95b609f225 --- /dev/null +++ b/Test/vk.relaxed.link1.frag @@ -0,0 +1,28 @@ +#version 460 + +out vec4 o; + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec4 a; // declared in both stages +uniform vec2 b1; // declaration order swapped in other stage +uniform vec2 b2; +uniform vec4 c1; // not delcared in other file +uniform vec4 d; + +// final global buffer will berge buffers from all linked files +layout (binding = 0) uniform atomic_uint counter1; +layout (binding = 0) uniform atomic_uint counter2; + +vec4 foo(); + +vec4 bar() { + uint j = atomicCounterIncrement(counter1) + atomicCounterDecrement(counter2); + vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c1 + d; + + return float(j) * v; +} + +void main() { + o = foo() + bar(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.link2.frag b/Test/vk.relaxed.link2.frag new file mode 100644 index 0000000000..a4f468a4be --- /dev/null +++ b/Test/vk.relaxed.link2.frag @@ -0,0 +1,19 @@ +#version 460 + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec4 a; // declared in both stages +uniform vec2 b2; // declaration order swapped in other stage +uniform vec2 b1; +uniform vec4 c2; // not delcared in other file +uniform vec4 d; + +layout (binding = 0) uniform atomic_uint counter3; +layout (binding = 0) uniform atomic_uint counter2; + +vec4 foo() { + uint j = atomicCounterIncrement(counter2) + atomicCounterDecrement(counter3); + vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c2 + d; + + return float(j) * v; +} \ No newline at end of file diff --git a/Test/vk.relaxed.stagelink.frag b/Test/vk.relaxed.stagelink.frag new file mode 100644 index 0000000000..d1eebba038 --- /dev/null +++ b/Test/vk.relaxed.stagelink.frag @@ -0,0 +1,28 @@ +#version 460 + +layout (location = 0) in vec4 io; + +out vec4 o; + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec4 a; // declared in both stages +uniform vec2 b1; // declaration order swapped in other stage +uniform vec2 b2; +uniform vec4 c1; // not delcared in other file +uniform vec4 d; + +// final global buffer will berge buffers from all linked files +layout (binding = 0) uniform atomic_uint counter1; +layout (binding = 0) uniform atomic_uint counter2; + +vec4 foo() { + uint j = atomicCounterIncrement(counter1) + atomicCounterDecrement(counter2); + vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c1 + d; + + return float(j) * v; +} + +void main() { + o = io + foo(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.stagelink.vert b/Test/vk.relaxed.stagelink.vert new file mode 100644 index 0000000000..52396ac523 --- /dev/null +++ b/Test/vk.relaxed.stagelink.vert @@ -0,0 +1,31 @@ +#version 460 + +layout (location = 0) out vec4 io; + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec4 a; // declared in both stages +uniform vec2 b2; // declaration order swapped in other stage +uniform vec2 b1; +uniform vec4 c2; // not delcared in other file +uniform vec4 d; + +uniform vec4 s[4]; + +layout (binding = 0) uniform atomic_uint counter3; +layout (binding = 0) uniform atomic_uint counter2; + +vec4 foo() { + uint j = atomicCounterIncrement(counter2) + atomicCounterDecrement(counter3); + vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c2 + d; + + return float(j) * v; +} + +void main() { + + vec4 v = foo(); + v = v + s[gl_VertexID]; + v.x = v.x - float(gl_InstanceID); + io = v; +} \ No newline at end of file diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 603203db9a..bb6d0bd856 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -501,6 +501,7 @@ class TQualifier { noContraction = false; nullInit = false; #endif + defaultBlock = false; } // drop qualifiers that don't belong in a temporary variable @@ -514,6 +515,7 @@ class TQualifier { specConstant = false; nonUniform = false; nullInit = false; + defaultBlock = false; clearLayout(); } @@ -572,6 +574,7 @@ class TQualifier { bool specConstant : 1; bool nonUniform : 1; bool explicitOffset : 1; + bool defaultBlock : 1; // default blocks with matching names have structures merged when linking #ifdef GLSLANG_WEB bool isWriteOnly() const { return false; } @@ -756,6 +759,46 @@ class TQualifier { } } + TBlockStorageClass getBlockStorage() const { + if (storage == EvqUniform && !isPushConstant()) { + return EbsUniform; + } + else if (storage == EvqUniform) { + return EbsPushConstant; + } + else if (storage == EvqBuffer) { + return EbsStorageBuffer; + } + return EbsNone; + } + + void setBlockStorage(TBlockStorageClass newBacking) { +#ifndef GLSLANG_WEB + layoutPushConstant = (newBacking == EbsPushConstant); +#endif + switch (newBacking) { + case EbsUniform : + if (layoutPacking == ElpStd430) { + // std430 would not be valid + layoutPacking = ElpStd140; + } + storage = EvqUniform; + break; + case EbsStorageBuffer : + storage = EvqBuffer; + break; +#ifndef GLSLANG_WEB + case EbsPushConstant : + storage = EvqUniform; + layoutSet = TQualifier::layoutSetEnd; + layoutBinding = TQualifier::layoutBindingEnd; + break; +#endif + default: + break; + } + } + #ifdef GLSLANG_WEB bool isPerView() const { return false; } bool isTaskMemory() const { return false; } @@ -852,6 +895,7 @@ class TQualifier { return hasNonXfbLayout() || hasXfb(); } + TLayoutMatrix layoutMatrix : 3; TLayoutPacking layoutPacking : 4; int layoutOffset; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 85edd6358d..1440c205ec 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -593,6 +593,7 @@ enum TOperator { EOpTime, EOpAtomicAdd, + EOpAtomicSubtract, EOpAtomicMin, EOpAtomicMax, EOpAtomicAnd, @@ -1135,6 +1136,8 @@ class TIntermTyped : public TIntermNode { virtual TBasicType getBasicType() const { return type.getBasicType(); } virtual TQualifier& getQualifier() { return type.getQualifier(); } virtual const TQualifier& getQualifier() const { return type.getQualifier(); } + virtual TArraySizes* getArraySizes() { return type.getArraySizes(); } + virtual const TArraySizes* getArraySizes() const { return type.getArraySizes(); } virtual void propagatePrecision(TPrecisionQualifier); virtual int getVectorSize() const { return type.getVectorSize(); } virtual int getMatrixCols() const { return type.getMatrixCols(); } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index c94a8a4b54..a9e5af456a 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1627,6 +1627,36 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "uint atomicCounterExchange(atomic_uint, uint);" "uint atomicCounterCompSwap(atomic_uint, uint, uint);" + "\n"); + } + } + else if (spvVersion.vulkanRelaxed) { + // + // Atomic counter functions act as aliases to normal atomic functions. + // replace definitions to take 'volatile coherent uint' instead of 'atomic_uint' + // and map to equivalent non-counter atomic op + // + if ((profile != EEsProfile && version >= 300) || + (profile == EEsProfile && version >= 310)) { + commonBuiltins.append( + "uint atomicCounterIncrement(volatile coherent uint);" + "uint atomicCounterDecrement(volatile coherent uint);" + "uint atomicCounter(volatile coherent uint);" + + "\n"); + } + if (profile != EEsProfile && version >= 460) { + commonBuiltins.append( + "uint atomicCounterAdd(volatile coherent uint, uint);" + "uint atomicCounterSubtract(volatile coherent uint, uint);" + "uint atomicCounterMin(volatile coherent uint, uint);" + "uint atomicCounterMax(volatile coherent uint, uint);" + "uint atomicCounterAnd(volatile coherent uint, uint);" + "uint atomicCounterOr(volatile coherent uint, uint);" + "uint atomicCounterXor(volatile coherent uint, uint);" + "uint atomicCounterExchange(volatile coherent uint, uint);" + "uint atomicCounterCompSwap(volatile coherent uint, uint, uint);" + "\n"); } } @@ -4124,7 +4154,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } #ifndef GLSLANG_WEB if ((profile != EEsProfile && version >= 420) || esBarrier) { - if (spvVersion.vulkan == 0) { + if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) { commonBuiltins.append("void memoryBarrierAtomicCounter();"); } commonBuiltins.append("void memoryBarrierImage();"); @@ -4848,6 +4878,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in int gl_VertexIndex;" "in int gl_InstanceIndex;" ); + + if (spvVersion.vulkan > 0 && version >= 140 && spvVersion.vulkanRelaxed) + stageBuiltins[EShLangVertex].append( + "in int gl_VertexID;" // declare with 'in' qualifier + "in int gl_InstanceID;" + ); + if (version >= 440) { stageBuiltins[EShLangVertex].append( "in int gl_BaseVertexARB;" @@ -4885,7 +4922,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "mediump float gl_PointSize;" // needs qualifier fixed later ); } else { - if (spvVersion.vulkan == 0) + if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) stageBuiltins[EShLangVertex].append( "in highp int gl_VertexID;" // needs qualifier fixed later "in highp int gl_InstanceID;" // needs qualifier fixed later @@ -7436,6 +7473,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable); } + if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { + // treat these built-ins as aliases of VertexIndex and InstanceIndex + BuiltInVariable("gl_VertexID", EbvVertexIndex, symbolTable); + BuiltInVariable("gl_InstanceID", EbvInstanceIndex, symbolTable); + } + if (profile != EEsProfile) { if (version >= 440) { symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters); @@ -8912,6 +8955,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter); symbolTable.relateToOperator("memoryBarrierImage", EOpMemoryBarrierImage); + if (spvVersion.vulkanRelaxed) { + // + // functions signature have been replaced to take uint operations on buffer variables + // remap atomic counter functions to atomic operations + // + symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierBuffer); + } + symbolTable.relateToOperator("atomicLoad", EOpAtomicLoad); symbolTable.relateToOperator("atomicStore", EOpAtomicStore); @@ -8919,6 +8970,20 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement); symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter); + if (spvVersion.vulkanRelaxed) { + // + // functions signature have been replaced to take uint operations + // remap atomic counter functions to atomic operations + // + // these atomic counter functions do not match signatures of glsl + // atomic functions, so they will be remapped to semantically + // equivalent functions in the parser + // + symbolTable.relateToOperator("atomicCounterIncrement", EOpNull); + symbolTable.relateToOperator("atomicCounterDecrement", EOpNull); + symbolTable.relateToOperator("atomicCounter", EOpNull); + } + symbolTable.relateToOperator("clockARB", EOpReadClockSubgroupKHR); symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR); @@ -8937,6 +9002,23 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCounterCompSwap); } + if (spvVersion.vulkanRelaxed) { + // + // functions signature have been replaced to take 'uint' instead of 'atomic_uint' + // remap atomic counter functions to non-counter atomic ops so + // functions act as aliases to non-counter atomic ops + // + symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicAdd); + symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicSubtract); + symbolTable.relateToOperator("atomicCounterMin", EOpAtomicMin); + symbolTable.relateToOperator("atomicCounterMax", EOpAtomicMax); + symbolTable.relateToOperator("atomicCounterAnd", EOpAtomicAnd); + symbolTable.relateToOperator("atomicCounterOr", EOpAtomicOr); + symbolTable.relateToOperator("atomicCounterXor", EOpAtomicXor); + symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicExchange); + symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCompSwap); + } + symbolTable.relateToOperator("fma", EOpFma); symbolTable.relateToOperator("frexp", EOpFrexp); symbolTable.relateToOperator("ldexp", EOpLdexp); diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index 3efa27aca3..02cca409e1 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -601,7 +601,6 @@ void TParseContextBase::parseSwizzleSelector(const TSourceLoc& loc, const TStrin selector.push_back(0); } -#ifdef ENABLE_HLSL // // Make the passed-in variable information become a member of the // global uniform block. If this doesn't exist yet, make it. @@ -646,7 +645,67 @@ void TParseContextBase::growGlobalUniformBlock(const TSourceLoc& loc, TType& mem ++firstNewMember; } -#endif + +void TParseContextBase::growAtomicCounterBlock(int binding, const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) { + // Make the atomic counter block, if not yet made. + const auto &at = atomicCounterBuffers.find(binding); + if (at == atomicCounterBuffers.end()) { + atomicCounterBuffers.insert({binding, (TVariable*)nullptr }); + atomicCounterBlockFirstNewMember.insert({binding, 0}); + } + + TVariable*& atomicCounterBuffer = atomicCounterBuffers[binding]; + int& bufferNewMember = atomicCounterBlockFirstNewMember[binding]; + + if (atomicCounterBuffer == nullptr) { + TQualifier blockQualifier; + blockQualifier.clear(); + blockQualifier.storage = EvqBuffer; + + char charBuffer[512]; + if (binding != TQualifier::layoutBindingEnd) { + snprintf(charBuffer, 512, "%s_%d", getAtomicCounterBlockName(), binding); + } else { + snprintf(charBuffer, 512, "%s_0", getAtomicCounterBlockName()); + } + + TType blockType(new TTypeList, *NewPoolTString(charBuffer), blockQualifier); + setUniformBlockDefaults(blockType); + blockType.getQualifier().layoutPacking = ElpStd430; + atomicCounterBuffer = new TVariable(NewPoolTString(""), blockType, true); + // If we arn't auto mapping bindings then set the block to use the same + // binding as what the atomic was set to use + if (!intermediate.getAutoMapBindings()) { + atomicCounterBuffer->getWritableType().getQualifier().layoutBinding = binding; + } + bufferNewMember = 0; + + atomicCounterBuffer->getWritableType().getQualifier().layoutSet = atomicCounterBlockSet; + } + + // Add the requested member as a member to the global block. + TType* type = new TType; + type->shallowCopy(memberType); + type->setFieldName(memberName); + if (typeList) + type->setStruct(typeList); + TTypeLoc typeLoc = {type, loc}; + atomicCounterBuffer->getType().getWritableStruct()->push_back(typeLoc); + + // Insert into the symbol table. + if (bufferNewMember == 0) { + // This is the first request; we need a normal symbol table insert + if (symbolTable.insert(*atomicCounterBuffer)) + trackLinkage(*atomicCounterBuffer); + else + error(loc, "failed to insert the global constant buffer", "buffer", ""); + } else { + // This is a follow-on request; we need to amend the first insert + symbolTable.amend(*atomicCounterBuffer, bufferNewMember); + } + + ++bufferNewMember; +} void TParseContextBase::finish() { diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 12d68a3e6c..550fce6797 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -225,6 +225,108 @@ void TParseContext::parserError(const char* s) error(getCurrentLoc(), "compilation terminated", "", ""); } +void TParseContext::growGlobalUniformBlock(const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) +{ + bool createBlock = globalUniformBlock == nullptr; + + if (createBlock) { + globalUniformBinding = intermediate.getGlobalUniformBinding(); + globalUniformSet = intermediate.getGlobalUniformSet(); + } + + // use base class function to create/expand block + TParseContextBase::growGlobalUniformBlock(loc, memberType, memberName, typeList); + + if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { + // check for a block storage override + TBlockStorageClass storageOverride = intermediate.getBlockStorageOverride(getGlobalUniformBlockName()); + TQualifier& qualifier = globalUniformBlock->getWritableType().getQualifier(); + qualifier.defaultBlock = true; + + if (storageOverride != EbsNone) { + if (createBlock) { + // Remap block storage + qualifier.setBlockStorage(storageOverride); + + // check that the change didn't create errors + blockQualifierCheck(loc, qualifier, false); + } + + // remap meber storage as well + memberType.getQualifier().setBlockStorage(storageOverride); + } + } +} + +void TParseContext::growAtomicCounterBlock(int binding, const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) +{ + bool createBlock = atomicCounterBuffers.find(binding) == atomicCounterBuffers.end(); + + if (createBlock) { + atomicCounterBlockSet = intermediate.getAtomicCounterBlockSet(); + } + + // use base class function to create/expand block + TParseContextBase::growAtomicCounterBlock(binding, loc, memberType, memberName, typeList); + TQualifier& qualifier = atomicCounterBuffers[binding]->getWritableType().getQualifier(); + qualifier.defaultBlock = true; + + if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { + // check for a Block storage override + TBlockStorageClass storageOverride = intermediate.getBlockStorageOverride(getAtomicCounterBlockName()); + + if (storageOverride != EbsNone) { + if (createBlock) { + // Remap block storage + + qualifier.setBlockStorage(storageOverride); + + // check that the change didn't create errors + blockQualifierCheck(loc, qualifier, false); + } + + // remap meber storage as well + memberType.getQualifier().setBlockStorage(storageOverride); + } + } +} + +const char* TParseContext::getGlobalUniformBlockName() const +{ + const char* name = intermediate.getGlobalUniformBlockName(); + if (std::string(name) == "") + return "gl_DefaultUniformBlock"; + else + return name; +} +void TParseContext::finalizeGlobalUniformBlockLayout(TVariable&) +{ +} +void TParseContext::setUniformBlockDefaults(TType& block) const +{ + block.getQualifier().layoutPacking = ElpStd140; + block.getQualifier().layoutMatrix = ElmColumnMajor; +} + + +const char* TParseContext::getAtomicCounterBlockName() const +{ + const char* name = intermediate.getAtomicCounterBlockName(); + if (std::string(name) == "") + return "gl_AtomicCounterBlock"; + else + return name; +} +void TParseContext::finalizeAtomicCounterBlockLayout(TVariable&) +{ +} + +void TParseContext::setAtomicCounterBlockDefaults(TType& block) const +{ + block.getQualifier().layoutPacking = ElpStd430; + block.getQualifier().layoutMatrix = ElmRowMajor; +} + void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& tokens) { #ifndef GLSLANG_WEB @@ -1135,6 +1237,14 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction { TIntermTyped* result = nullptr; + if (spvVersion.vulkan != 0 && spvVersion.vulkanRelaxed) { + // allow calls that are invalid in Vulkan Semantics to be invisibily + // remapped to equivalent valid functions + result = vkRelaxedRemapFunctionCall(loc, function, arguments); + if (result) + return result; + } + if (function->getBuiltInOp() == EOpArrayLength) result = handleLengthMethod(loc, function, arguments); else if (function->getBuiltInOp() != EOpNull) { @@ -1727,6 +1837,7 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& // Grab the semantics and storage class semantics from the operands, based on opcode switch (callNode.getOp()) { case EOpAtomicAdd: + case EOpAtomicSubtract: case EOpAtomicMin: case EOpAtomicMax: case EOpAtomicAnd: @@ -2176,6 +2287,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } case EOpAtomicAdd: + case EOpAtomicSubtract: case EOpAtomicMin: case EOpAtomicMax: case EOpAtomicAnd: @@ -3388,7 +3500,7 @@ void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& t if (type.containsNonOpaque()) { // Vulkan doesn't allow transparent uniforms outside of blocks - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed) vulkanRemoved(loc, "non-opaque uniforms outside a block"); // OpenGL wants locations on these (unless they are getting automapped) if (spvVersion.openGl > 0 && !type.getQualifier().hasLocation() && !intermediate.getAutoMapLocations()) @@ -5019,14 +5131,22 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } if (id == TQualifier::getLayoutPackingString(ElpPacked)) { - if (spvVersion.spv != 0) - spvRemoved(loc, "packed"); + if (spvVersion.spv != 0) { + if (spvVersion.vulkanRelaxed) + return; // silently ignore qualifier + else + spvRemoved(loc, "packed"); + } publicType.qualifier.layoutPacking = ElpPacked; return; } if (id == TQualifier::getLayoutPackingString(ElpShared)) { - if (spvVersion.spv != 0) - spvRemoved(loc, "shared"); + if (spvVersion.spv != 0) { + if (spvVersion.vulkanRelaxed) + return; // silently ignore qualifier + else + spvRemoved(loc, "shared"); + } publicType.qualifier.layoutPacking = ElpShared; return; } @@ -5928,7 +6048,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : ""); #endif } - if (type.isAtomic()) { + if (type.isAtomic() && !spvVersion.vulkanRelaxed) { if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", ""); return; @@ -6598,6 +6718,68 @@ const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc, return bestMatch; } +// +// Adjust function calls that aren't declared in Vulkan to a +// calls with equivalent effects +// +TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, TFunction* function, TIntermNode* arguments) +{ + TIntermTyped* result = nullptr; + +#ifndef GLSLANG_WEB + if (function->getBuiltInOp() != EOpNull) { + return nullptr; + } + + if (function->getName() == "atomicCounterIncrement") { + // change atomicCounterIncrement into an atomicAdd of 1 + TString name("atomicAdd"); + TType uintType(EbtUint); + + TFunction realFunc(&name, function->getType()); + + for (int i = 0; i < function->getParamCount(); ++i) { + realFunc.addParameter((*function)[i]); + } + + TParameter tmpP = { 0, &uintType }; + realFunc.addParameter(tmpP); + arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(1, loc, true)); + + result = handleFunctionCall(loc, &realFunc, arguments); + } else if (function->getName() == "atomicCounterDecrement") { + // change atomicCounterDecrement into an atomicAdd with -1 + // and subtract 1 from result, to return post-decrement value + TString name("atomicAdd"); + TType uintType(EbtUint); + + TFunction realFunc(&name, function->getType()); + + for (int i = 0; i < function->getParamCount(); ++i) { + realFunc.addParameter((*function)[i]); + } + + TParameter tmpP = { 0, &uintType }; + realFunc.addParameter(tmpP); + arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(-1, loc, true)); + + result = handleFunctionCall(loc, &realFunc, arguments); + + // post decrement, so that it matches AtomicCounterDecrement semantics + if (result) { + result = handleBinaryMath(loc, "-", EOpSub, result, intermediate.addConstantUnion(1, loc, true)); + } + } else if (function->getName() == "atomicCounter") { + // change atomicCounter into a direct read of the variable + if (arguments->getAsTyped()) { + result = arguments->getAsTyped(); + } + } +#endif + + return result; +} + // When a declaration includes a type, but not a variable name, it can be used // to establish defaults. void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType) @@ -6622,6 +6804,91 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType #endif } +bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString& identifier, const TPublicType&, + TArraySizes*, TIntermTyped* initializer, TType& type) +{ + if (parsingBuiltins || symbolTable.atBuiltInLevel() || !symbolTable.atGlobalLevel() || + type.getQualifier().storage != EvqUniform || + !(type.containsNonOpaque() +#ifndef GLSLANG_WEB + || type.getBasicType() == EbtAtomicUint +#endif + )) { + return false; + } + + if (type.getQualifier().hasLocation()) { + warn(loc, "ignoring layout qualifier for uniform", identifier.c_str(), "location"); + type.getQualifier().layoutLocation = TQualifier::layoutLocationEnd; + } + + if (initializer) { + warn(loc, "Ignoring initializer for uniform", identifier.c_str(), ""); + initializer = nullptr; + } + + if (type.isArray()) { + // do array size checks here + arraySizesCheck(loc, type.getQualifier(), type.getArraySizes(), initializer, false); + + if (arrayQualifierError(loc, type.getQualifier()) || arrayError(loc, type)) { + error(loc, "array param error", identifier.c_str(), ""); + } + } + + // do some checking on the type as it was declared + layoutTypeCheck(loc, type); + + int bufferBinding = TQualifier::layoutBindingEnd; + TVariable* updatedBlock = nullptr; + +#ifndef GLSLANG_WEB + // Convert atomic_uint into members of a buffer block + if (type.isAtomic()) { + type.setBasicType(EbtUint); + type.getQualifier().storage = EvqBuffer; + + type.getQualifier().volatil = true; + type.getQualifier().coherent = true; + + // xxTODO: use logic from fixOffset() to apply explicit member offset + bufferBinding = type.getQualifier().layoutBinding; + type.getQualifier().layoutBinding = TQualifier::layoutBindingEnd; + type.getQualifier().explicitOffset = false; + growAtomicCounterBlock(bufferBinding, loc, type, identifier, nullptr); + updatedBlock = atomicCounterBuffers[bufferBinding]; + } +#endif + + if (!updatedBlock) { + growGlobalUniformBlock(loc, type, identifier, nullptr); + updatedBlock = globalUniformBlock; + } + + // + // don't assign explicit member offsets here + // if any are assigned, need to be updated here and in the merge/link step + // fixBlockUniformOffsets(updatedBlock->getWritableType().getQualifier(), *updatedBlock->getWritableType().getWritableStruct()); + + // checks on update buffer object + layoutObjectCheck(loc, *updatedBlock); + + TSymbol* symbol = symbolTable.find(identifier); + + if (!symbol) { + if (updatedBlock == globalUniformBlock) + error(loc, "error adding uniform to default uniform block", identifier.c_str(), ""); + else + error(loc, "error adding atomic counter to atomic counter block", identifier.c_str(), ""); + return false; + } + + // merge qualifiers + mergeObjectLayoutQualifiers(updatedBlock->getWritableType().getQualifier(), type.getQualifier(), true); + + return true; +} + // // Do everything necessary to handle a variable (non-block) declaration. // Either redeclaring a variable, or making a new one, updating the symbol @@ -6733,6 +7000,14 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden if (symbol == nullptr) reservedErrorCheck(loc, identifier); + if (symbol == nullptr && spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { + bool remapped = vkRelaxedRemapUniformVariable(loc, identifier, publicType, arraySizes, initializer, type); + + if (remapped) { + return nullptr; + } + } + inheritGlobalDefaults(type.getQualifier()); // Declare the variable @@ -7625,6 +7900,8 @@ void TParseContext::inheritMemoryQualifiers(const TQualifier& from, TQualifier& void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes) { + if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) + blockStorageRemap(loc, blockName, currentBlockQualifier); blockStageIoCheck(loc, currentBlockQualifier); blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr); if (arraySizes != nullptr) { @@ -7914,6 +8191,17 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con trackLinkage(variable); } +// +// allow storage type of block to be remapped at compile time +// +void TParseContext::blockStorageRemap(const TSourceLoc&, const TString* instanceName, TQualifier& qualifier) +{ + TBlockStorageClass type = intermediate.getBlockStorageOverride(instanceName->c_str()); + if (type != EbsNone) { + qualifier.setBlockStorage(type); + } +} + // Do all block-declaration checking regarding the combination of in/out/uniform/buffer // with a particular stage. void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& qualifier) diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index ad9b8d6acd..6f00621af9 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -92,7 +92,8 @@ class TParseContextBase : public TParseVersions { limits(resources.limits), globalUniformBlock(nullptr), globalUniformBinding(TQualifier::layoutBindingEnd), - globalUniformSet(TQualifier::layoutSetEnd) + globalUniformSet(TQualifier::layoutSetEnd), + atomicCounterBlockSet(TQualifier::layoutSetEnd) { if (entryPoint != nullptr) sourceEntryPointName = *entryPoint; @@ -154,10 +155,11 @@ class TParseContextBase : public TParseVersions { extensionCallback(line, extension, behavior); } -#ifdef ENABLE_HLSL // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL) virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr); -#endif + + // Manage global buffer (used for backing atomic counters in GLSL when using relaxed Vulkan semantics) + virtual void growAtomicCounterBlock(int binding, const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr); // Potentially rename shader entry point function void renameShaderFunction(TString*& name) const @@ -230,7 +232,24 @@ class TParseContextBase : public TParseVersions { // override this to set the language-specific name virtual const char* getGlobalUniformBlockName() const { return ""; } virtual void setUniformBlockDefaults(TType&) const { } - virtual void finalizeGlobalUniformBlockLayout(TVariable&) { } + virtual void finalizeGlobalUniformBlockLayout(TVariable&) {} + + // Manage the atomic counter block (used for atomic_uints with Vulkan-Relaxed) + TMap atomicCounterBuffers; + unsigned int atomicCounterBlockSet; + TMap atomicCounterBlockFirstNewMember; + // override this to set the language-specific name + virtual const char* getAtomicCounterBlockName() const { return ""; } + virtual void setAtomicCounterBlockDefaults(TType&) const {} + virtual void finalizeAtomicCounterBlockLayout(TVariable&) {} + bool isAtomicCounterBlock(const TSymbol& symbol) { + const TVariable* var = symbol.getAsVariable(); + if (!var) + return false; + const auto& at = atomicCounterBuffers.find(var->getType().getQualifier().layoutBinding); + return (at != atomicCounterBuffers.end() && (*at).second->getType() == var->getType()); + } + virtual void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken, const char* szExtraInfoFormat, TPrefixType prefix, va_list args); @@ -293,6 +312,9 @@ class TParseContext : public TParseContextBase { bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false) override; void parserError(const char* s); // for bison's yyerror + virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr) override; + virtual void growAtomicCounterBlock(int binding, const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr) override; + void reservedErrorCheck(const TSourceLoc&, const TString&); void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op) override; bool lineContinuationCheck(const TSourceLoc&, bool endOfComment) override; @@ -340,6 +362,10 @@ class TParseContext : public TParseContextBase { void checkPrecisionQualifier(const TSourceLoc&, TPrecisionQualifier); void memorySemanticsCheck(const TSourceLoc&, const TFunction&, const TIntermOperator& callNode); + TIntermTyped* vkRelaxedRemapFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*); + // returns true if the variable was remapped to something else + bool vkRelaxedRemapUniformVariable(const TSourceLoc&, TString&, const TPublicType&, TArraySizes*, TIntermTyped*, TType&); + void assignError(const TSourceLoc&, const char* op, TString left, TString right); void unaryOpError(const TSourceLoc&, const char* op, TString operand); void binaryOpError(const TSourceLoc&, const char* op, TString left, TString right); @@ -417,6 +443,7 @@ class TParseContext : public TParseContextBase { TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset); void inheritMemoryQualifiers(const TQualifier& from, TQualifier& to); void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0); + void blockStorageRemap(const TSourceLoc&, const TString*, TQualifier&); void blockStageIoCheck(const TSourceLoc&, const TQualifier&); void blockQualifierCheck(const TSourceLoc&, const TQualifier&, bool instanceName); void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation); @@ -461,6 +488,14 @@ class TParseContext : public TParseContextBase { void finish() override; #endif + virtual const char* getGlobalUniformBlockName() const override; + virtual void finalizeGlobalUniformBlockLayout(TVariable&) override; + virtual void setUniformBlockDefaults(TType& block) const override; + + virtual const char* getAtomicCounterBlockName() const override; + virtual void finalizeAtomicCounterBlockLayout(TVariable&) override; + virtual void setAtomicCounterBlockDefaults(TType& block) const override; + public: // // Generally, bison productions, the scanner, and the PP need read/write access to these; just give them direct access diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 3f793a7434..4b340eaa19 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -159,7 +159,7 @@ int MapVersionToIndex(int version) return index; } -const int SpvVersionCount = 3; // index range in MapSpvVersionToIndex +const int SpvVersionCount = 4; // index range in MapSpvVersionToIndex int MapSpvVersionToIndex(const SpvVersion& spvVersion) { @@ -167,8 +167,12 @@ int MapSpvVersionToIndex(const SpvVersion& spvVersion) if (spvVersion.openGl > 0) index = 1; - else if (spvVersion.vulkan > 0) - index = 2; + else if (spvVersion.vulkan > 0) { + if (!spvVersion.vulkanRelaxed) + index = 2; + else + index = 3; + } assert(index < SpvVersionCount); @@ -723,6 +727,7 @@ void TranslateEnvironment(const TEnvironment* environment, EShMessages& messages break; case EShClientVulkan: spvVersion.vulkanGlsl = environment->input.dialectVersion; + spvVersion.vulkanRelaxed = environment->input.VulkanRulesRelaxed; break; case EShClientOpenGL: spvVersion.openGl = environment->input.dialectVersion; @@ -1868,6 +1873,15 @@ void TShader::setResourceSetBinding(const std::vector& base) { in void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); } #endif +void TShader::addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) { intermediate->addBlockStorageOverride(nameStr, backing); } + +void TShader::setGlobalUniformBlockName(const char* name) { intermediate->setGlobalUniformBlockName(name); } +void TShader::setGlobalUniformSet(unsigned int set) { intermediate->setGlobalUniformSet(set); } +void TShader::setGlobalUniformBinding(unsigned int binding) { intermediate->setGlobalUniformBinding(binding); } + +void TShader::setAtomicCounterBlockName(const char* name) { intermediate->setAtomicCounterBlockName(name); } +void TShader::setAtomicCounterBlockSet(unsigned int set) { intermediate->setAtomicCounterBlockSet(set); } + #ifdef ENABLE_HLSL // See comment above TDefaultHlslIoMapper in iomapper.cpp: void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); } @@ -1983,7 +1997,10 @@ bool TProgram::link(EShMessages messages) error = true; } - // TODO: Link: cross-stage error checking + if (!error) { + if (! crossStageCheck(messages)) + error = true; + } return ! error; } @@ -2060,6 +2077,64 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) return intermediate[stage]->getNumErrors() == 0; } +// +// Check that there are no errors in linker objects accross stages +// +// Return true if no errors. +// +bool TProgram::crossStageCheck(EShMessages) { + + // make temporary intermediates to hold the linkage symbols for each linking interface + // while we do the checks + // Independent interfaces are: + // all uniform variables and blocks + // all buffer blocks + // all in/out on a stage boundary + + TVector activeStages; + for (int s = 0; s < EShLangCount; ++s) { + if (intermediate[s]) + activeStages.push_back(intermediate[s]); + } + + // no extra linking if there is only one stage + if (! (activeStages.size() > 1)) + return true; + + // setup temporary tree to hold unfirom objects from different stages + TIntermediate* firstIntermediate = activeStages.front(); + TIntermediate uniforms(EShLangCount, + firstIntermediate->getVersion(), + firstIntermediate->getProfile()); + uniforms.setSpv(firstIntermediate->getSpv()); + + TIntermAggregate uniformObjects(EOpLinkerObjects); + TIntermAggregate root(EOpSequence); + root.getSequence().push_back(&uniformObjects); + uniforms.setTreeRoot(&root); + + bool error = false; + + // merge uniforms from all stages into a single intermediate + for (unsigned int i = 0; i < activeStages.size(); ++i) { + uniforms.mergeUniformObjects(*infoSink, *activeStages[i]); + } + error |= uniforms.getNumErrors() != 0; + + // copy final definition of global block back into each stage + for (unsigned int i = 0; i < activeStages.size(); ++i) { + activeStages[i]->mergeGlobalUniformBlocks(*infoSink, uniforms); + } + + // compare cross stage symbols for each stage boundary + for (unsigned int i = 1; i < activeStages.size(); ++i) { + activeStages[i - 1]->checkStageIO(*infoSink, *activeStages[i]); + error |= (activeStages[i - 1]->getNumErrors() != 0); + } + + return !error; +} + const char* TProgram::getInfoLog() { return infoSink->info.c_str(); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 488c98c5cc..7554bfd769 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -1273,7 +1273,7 @@ void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op) // Call for any operation removed because Vulkan SPIR-V is being generated. void TParseVersions::vulkanRemoved(const TSourceLoc& loc, const char* op) { - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed) error(loc, "not allowed when using GLSL for Vulkan", op, ""); } diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index f377973a85..25feb0b7bf 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -87,11 +87,12 @@ inline const char* ProfileName(EProfile profile) // The union of all requested rule sets will be applied. // struct SpvVersion { - SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0) {} + SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0), vulkanRelaxed(false) {} unsigned int spv; // the version of SPIR-V to target, as defined by "word 1" of the SPIR-V binary header int vulkanGlsl; // the version of GLSL semantics for Vulkan, from GL_KHR_vulkan_glsl, for "#define VULKAN XXX" int vulkan; // the version of Vulkan, for which SPIR-V execution environment rules to use int openGl; // the version of GLSL semantics for OpenGL, from GL_ARB_gl_spirv, for "#define GL_SPIRV XXX" + bool vulkanRelaxed; // relax changes to GLSL for Vulkan, allowing some GL-specific to be compiled to Vulkan SPIR-V target }; // diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index 5ce3e47280..c718f949a7 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -886,6 +886,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpTime: out.debug << "time"; break; case EOpAtomicAdd: out.debug << "AtomicAdd"; break; + case EOpAtomicSubtract: out.debug << "AtomicSubtract"; break; case EOpAtomicMin: out.debug << "AtomicMin"; break; case EOpAtomicMax: out.debug << "AtomicMax"; break; case EOpAtomicAnd: out.debug << "AtomicAnd"; break; diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index c42e74fa5f..7e12864f36 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -210,8 +210,8 @@ struct TResolverUniformAdaptor { ent.newIndex = -1; const bool isValid = resolver.validateBinding(stage, ent); if (isValid) { - resolver.resolveBinding(ent.stage, ent); resolver.resolveSet(ent.stage, ent); + resolver.resolveBinding(ent.stage, ent); resolver.resolveUniformLocation(ent.stage, ent); if (ent.newBinding != -1) { @@ -317,15 +317,13 @@ struct TResolverInOutAdaptor { }; // The class is used for reserving explicit uniform locations and ubo/ssbo/opaque bindings +// xxTODO: maybe this logic should be moved into the resolver's "validateInOut" and "validateUniform" struct TSymbolValidater { TSymbolValidater(TIoMapResolver& r, TInfoSink& i, TVarLiveMap* in[EShLangCount], TVarLiveMap* out[EShLangCount], TVarLiveMap* uniform[EShLangCount], bool& hadError, EProfile profile, int version) - : preStage(EShLangCount) - , currentStage(EShLangCount) - , nextStage(EShLangCount) - , resolver(r) + : resolver(r) , infoSink(i) , hadError(hadError) , profile(profile) @@ -438,17 +436,23 @@ struct TSymbolValidater TIntermSymbol* base = ent1.symbol; const TType& type = ent1.symbol->getType(); const TString& name = entKey.first; - EShLanguage stage = ent1.stage; TString mangleName1, mangleName2; - if (currentStage != stage) { - preStage = currentStage; - currentStage = stage; - nextStage = EShLangCount; - for (int i = currentStage + 1; i < EShLangCount; i++) { - if (inVarMaps[i] != nullptr) { - nextStage = static_cast(i); - break; - } + EShLanguage stage = ent1.stage; + EShLanguage preStage, currentStage, nextStage; + + preStage = EShLangCount; + for (int i = stage - 1; i >= 0; i--) { + if (inVarMaps[i] != nullptr) { + preStage = static_cast(i); + break; + } + } + currentStage = stage; + nextStage = EShLangCount; + for (int i = stage + 1; i < EShLangCount; i++) { + if (inVarMaps[i] != nullptr) { + nextStage = static_cast(i); + break; } } @@ -459,6 +463,9 @@ struct TSymbolValidater type.appendMangledName(mangleName1); } + + // basic checking that symbols match + // more extensive checking in the link stage if (base->getQualifier().storage == EvqVaryingIn) { // validate stage in; if (preStage == EShLangCount) @@ -484,8 +491,7 @@ struct TSymbolValidater if (ent2->second.symbol->getType().getQualifier().isArrayedIo(preStage)) { TType subType(ent2->second.symbol->getType(), 0); subType.appendMangledName(mangleName2); - } - else { + } else { ent2->second.symbol->getType().appendMangledName(mangleName2); } @@ -536,8 +542,7 @@ struct TSymbolValidater if (ent2->second.symbol->getType().getQualifier().isArrayedIo(nextStage)) { TType subType(ent2->second.symbol->getType(), 0); subType.appendMangledName(mangleName2); - } - else { + } else { ent2->second.symbol->getType().appendMangledName(mangleName2); } if (mangleName1 == mangleName2) @@ -550,7 +555,7 @@ struct TSymbolValidater } return; } - } else if (base->getQualifier().isUniformOrBuffer() && ! base->getQualifier().isPushConstant()) { + } else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant()) { // validate uniform type; for (int i = 0; i < EShLangCount; i++) { if (i != currentStage && outVarMaps[i] != nullptr) { @@ -558,6 +563,7 @@ struct TSymbolValidater if (ent2 != uniformVarMap[i]->end()) { ent2->second.symbol->getType().appendMangledName(mangleName2); if (mangleName1 != mangleName2) { + ent2->second.symbol->getType().sameElementType(type); TString err = "Invalid Uniform variable type : " + entKey.first; infoSink.info.message(EPrefixInternalError, err.c_str()); hadError = true; @@ -608,8 +614,7 @@ struct TSymbolValidater } TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], *uniformVarMap[EShLangCount]; - // Use for mark pre stage, to get more interface symbol information. - EShLanguage preStage, currentStage, nextStage; + // Use for mark current shader stage for resolver TIoMapResolver& resolver; TInfoSink& infoSink; @@ -749,14 +754,18 @@ TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate , nextOutputLocation(0) { memset(stageMask, false, sizeof(bool) * (EShLangCount + 1)); + memset(stageIntermediates, 0, sizeof(TIntermediate*) * (EShLangCount)); + stageIntermediates[intermediate.getStage()] = &intermediate; } -int TDefaultIoResolverBase::getBaseBinding(TResourceType res, unsigned int set) const { - return selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set)); +int TDefaultIoResolverBase::getBaseBinding(EShLanguage stage, TResourceType res, unsigned int set) const { + return stageIntermediates[stage] ? selectBaseBinding(stageIntermediates[stage]->getShiftBinding(res), stageIntermediates[stage]->getShiftBindingForSet(res, set)) + : selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set)); } -const std::vector& TDefaultIoResolverBase::getResourceSetBinding() const { - return intermediate.getResourceSetBinding(); +const std::vector& TDefaultIoResolverBase::getResourceSetBinding(EShLanguage stage) const { + return stageIntermediates[stage] ? stageIntermediates[stage]->getResourceSetBinding() + : intermediate.getResourceSetBinding(); } bool TDefaultIoResolverBase::doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); } @@ -797,14 +806,14 @@ int TDefaultIoResolverBase::getFreeSlot(int set, int base, int size) { return reserveSlot(set, base, size); } -int TDefaultIoResolverBase::resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) { +int TDefaultIoResolverBase::resolveSet(EShLanguage stage, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); if (type.getQualifier().hasSet()) { return ent.newSet = type.getQualifier().layoutSet; } // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN) - if (getResourceSetBinding().size() == 1) { - return ent.newSet = atoi(getResourceSetBinding()[0].c_str()); + if (getResourceSetBinding(stage).size() == 1) { + return ent.newSet = atoi(getResourceSetBinding(stage)[0].c_str()); } return ent.newSet = 0; } @@ -925,7 +934,7 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf preStage = currentStage; currentStage = stage; } - // kick out of not doing this + // kick out if not doing this if (! doAutoLocationMapping()) { return ent.newLocation = -1; } @@ -1073,7 +1082,7 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn return ent.newLocation = location; } -int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) { +int TDefaultGlslIoResolver::resolveBinding(EShLanguage stage, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); // On OpenGL arrays of opaque types take a separate binding for each element @@ -1086,30 +1095,32 @@ int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& // There is no 'set' qualifier in OpenGL shading language, each resource has its own // binding name space, so remap the 'set' to resource type which make each resource // binding is valid from 0 to MAX_XXRESOURCE_BINDINGS - int set = resource; + int set = intermediate.getSpv().openGl != 0 ? resource : ent.newSet; + int resourceKey = set; if (resource < EResCount) { if (type.getQualifier().hasBinding()) { - ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings); - return ent.newBinding; - } else if (ent.live && doAutoBindingMapping()) { + int newBinding = reserveSlot(resourceKey, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding, numBindings); + return ent.newBinding = newBinding; + + } else { // The resource in current stage is not declared with binding, but it is possible declared // with explicit binding in other stages, find the resourceSlotMap firstly to check whether // the resource has binding, don't need to allocate if it already has a binding bool hasBinding = false; - if (! resourceSlotMap[resource].empty()) { - TVarSlotMap::iterator iter = resourceSlotMap[resource].find(name); - if (iter != resourceSlotMap[resource].end()) { + ent.newBinding = -1; // leave as -1 if it isn't set below + + if (! resourceSlotMap[resourceKey].empty()) { + TVarSlotMap::iterator iter = resourceSlotMap[resourceKey].find(name); + if (iter != resourceSlotMap[resourceKey].end()) { hasBinding = true; ent.newBinding = iter->second; } } - if (! hasBinding) { - TVarSlotMap varSlotMap; + if (!hasBinding && (ent.live && doAutoBindingMapping())) { // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - int binding = getFreeSlot(resource, getBaseBinding(resource, set), numBindings); - varSlotMap[name] = binding; - resourceSlotMap[resource] = varSlotMap; + int binding = getFreeSlot(resourceKey, getBaseBinding(stage, resource, set), numBindings); + resourceSlotMap[resourceKey][name] = binding; ent.newBinding = binding; } return ent.newBinding; @@ -1211,16 +1222,20 @@ void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); - int resource = getResourceType(type); + TResourceType resource = getResourceType(type); + int set = intermediate.getSpv().openGl != 0 ? resource : resolveSet(ent.stage, ent); + int resourceKey = set; + if (type.getQualifier().hasBinding()) { - TVarSlotMap& varSlotMap = resourceSlotMap[resource]; + TVarSlotMap& varSlotMap = resourceSlotMap[resourceKey]; TVarSlotMap::iterator iter = varSlotMap.find(name); - int binding = type.getQualifier().layoutBinding; + int binding = type.getQualifier().layoutBinding + getBaseBinding(ent.stage, resource, set); + if (iter == varSlotMap.end()) { // Reserve the slots for the ubo, ssbo and opaques who has explicit binding - int numBindings = type.isSizedArray() ? type.getCumulativeArraySize() : 1; + int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; varSlotMap[name] = binding; - reserveSlot(resource, binding, numBindings); + reserveSlot(resourceKey, binding, numBindings); } else { // Allocate binding by name for OpenGL driver, so the resource in different // stages should be declared with the same binding @@ -1269,7 +1284,7 @@ struct TDefaultIoResolver : public TDefaultIoResolverBase { return EResCount; } - int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override { + int resolveBinding(EShLanguage stage, TVarEntryInfo& ent) override { const TType& type = ent.symbol->getType(); const int set = getLayoutSet(type); // On OpenGL arrays of opaque types take a seperate binding for each element @@ -1278,11 +1293,11 @@ struct TDefaultIoResolver : public TDefaultIoResolverBase { if (resource < EResCount) { if (type.getQualifier().hasBinding()) { return ent.newBinding = reserveSlot( - set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings); + set, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding, numBindings); } else if (ent.live && doAutoBindingMapping()) { // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set), numBindings); + return ent.newBinding = getFreeSlot(set, getBaseBinding(stage, resource, set), numBindings); } } return ent.newBinding = -1; @@ -1354,17 +1369,17 @@ struct TDefaultHlslIoResolver : public TDefaultIoResolverBase { return EResCount; } - int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override { + int resolveBinding(EShLanguage stage, TVarEntryInfo& ent) override { const TType& type = ent.symbol->getType(); const int set = getLayoutSet(type); TResourceType resource = getResourceType(type); if (resource < EResCount) { if (type.getQualifier().hasBinding()) { - return ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding); + return ent.newBinding = reserveSlot(set, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding); } else if (ent.live && doAutoBindingMapping()) { // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set)); + return ent.newBinding = getFreeSlot(set, getBaseBinding(stage, resource, set)); } } return ent.newBinding = -1; @@ -1403,10 +1418,10 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi else resolver = &defaultResolver; } - resolver->addStage(stage); #else resolver = &defaultResolver; #endif + resolver->addStage(stage, intermediate); TVarLiveMap inVarMap, outVarMap, uniformVarMap; TVarLiveVector inVector, outVector, uniformVector; @@ -1502,10 +1517,21 @@ bool TGlslIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TIn } // if no resolver is provided, use the default resolver with the given shifts and auto map settings TDefaultGlslIoResolver defaultResolver(intermediate); +#ifdef ENABLE_HLSL + TDefaultHlslIoResolver defaultHlslResolver(intermediate); + if (resolver == nullptr) { + // TODO: use a passed in IO mapper for this + if (intermediate.usingHlslIoMapping()) + resolver = &defaultHlslResolver; + else + resolver = &defaultResolver; + } +#else if (resolver == nullptr) { resolver = &defaultResolver; } - resolver->addStage(stage); +#endif + resolver->addStage(stage, intermediate); inVarMaps[stage] = new TVarLiveMap(); outVarMaps[stage] = new TVarLiveMap(); uniformVarMap[stage] = new TVarLiveMap(); TVarGatherTraverser iter_binding_all(intermediate, true, *inVarMaps[stage], *outVarMaps[stage], *uniformVarMap[stage]); @@ -1547,15 +1573,51 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { TResolverInOutAdaptor inOutResolve(EShLangCount, *resolver, infoSink, hadError); TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, outVarMaps, uniformVarMap, hadError, profile, version); + + TVarLiveVector inVectors[EShLangCount]; + TVarLiveVector outVectors[EShLangCount]; TVarLiveVector uniformVector; + resolver->beginResolve(EShLangCount); for (int stage = EShLangVertex; stage < EShLangCount; stage++) { if (inVarMaps[stage] != nullptr) { inOutResolve.setStage(EShLanguage(stage)); - for (auto& var : *(inVarMaps[stage])) { symbolValidater(var); } - for (auto& var : *(inVarMaps[stage])) { inOutResolve(var); } - for (auto& var : *(outVarMaps[stage])) { symbolValidater(var); } - for (auto& var : *(outVarMaps[stage])) { inOutResolve(var); } + + // copy vars into a sorted list + std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), + [&inVectors, stage](TVarLivePair p) { inVectors[stage].push_back(p); }); + std::sort(inVectors[stage].begin(), inVectors[stage].end(), + [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { + return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); + }); + + std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), + [&outVectors, stage](TVarLivePair p) { outVectors[stage].push_back(p); }); + std::sort(outVectors[stage].begin(), outVectors[stage].end(), + [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { + return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); + }); + + for (auto& var : inVectors[stage]) { symbolValidater(var); } + for (auto& var : inVectors[stage]) { inOutResolve(var); } + for (auto& var : outVectors[stage]) { symbolValidater(var); } + for (auto& var : outVectors[stage]) { inOutResolve(var); } + + // copy results back into maps + std::for_each(inVectors[stage].begin(), inVectors[stage].end(), + [this, stage](TVarLivePair p) { + auto at = inVarMaps[stage]->find(p.first); + if (at != inVarMaps[stage]->end()) + at->second = p.second; + }); + + std::for_each(outVectors[stage].begin(), outVectors[stage].end(), + [this, stage](TVarLivePair p) { + auto at = outVarMaps[stage]->find(p.first); + if (at != outVarMaps[stage]->end()) + at->second = p.second; + }); + } if (uniformVarMap[stage] != nullptr) { uniformResolve.setStage(EShLanguage(stage)); @@ -1563,7 +1625,7 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { } } std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { - return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); + return TVarEntryInfo::TOrderByPriorityAndLive()(p1.second, p2.second); }); for (auto& var : uniformVector) { symbolValidater(var); } for (auto& var : uniformVector) { uniformResolve(var); } diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 1dce8ff54b..07357c2ef4 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -87,6 +87,35 @@ struct TVarEntryInfo { return lPoints > rPoints; } }; + + struct TOrderByPriorityAndLive { + // ordering: + // 1) do live variables first + // 2) has both binding and set + // 3) has binding but no set + // 4) has no binding but set + // 5) has no binding and no set + inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { + + const TQualifier& lq = l.symbol->getQualifier(); + const TQualifier& rq = r.symbol->getQualifier(); + + // simple rules: + // has binding gives 2 points + // has set gives 1 point + // who has the most points is more important. + int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); + int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); + + if (l.live != r.live) + return l.live > r.live; + + if (lPoints != rPoints) + return lPoints > rPoints; + + return l.id < r.id; + } + }; }; // Base class for shared TIoMapResolver services, used by several derivations. @@ -107,8 +136,8 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { void endCollect(EShLanguage) override {} void reserverResourceSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {} void reserverStorageSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {} - int getBaseBinding(TResourceType res, unsigned int set) const; - const std::vector& getResourceSetBinding() const; + int getBaseBinding(EShLanguage stage, TResourceType res, unsigned int set) const; + const std::vector& getResourceSetBinding(EShLanguage stage) const; virtual TResourceType getResourceType(const glslang::TType& type) = 0; bool doAutoBindingMapping() const; bool doAutoLocationMapping() const; @@ -122,9 +151,11 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override; int resolveInOutComponent(EShLanguage /*stage*/, TVarEntryInfo& ent) override; int resolveInOutIndex(EShLanguage /*stage*/, TVarEntryInfo& ent) override; - void addStage(EShLanguage stage) override { - if (stage < EShLangCount) + void addStage(EShLanguage stage, TIntermediate& stageIntermediate) override { + if (stage < EShLangCount) { stageMask[stage] = true; + stageIntermediates[stage] = &stageIntermediate; + } } uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage); @@ -139,6 +170,8 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { int nextInputLocation; int nextOutputLocation; bool stageMask[EShLangCount + 1]; + const TIntermediate* stageIntermediates[EShLangCount]; + // Return descriptor set specific base if there is one, and the generic base otherwise. int selectBaseBinding(int base, int descriptorSetBase) const { return descriptorSetBase != -1 ? descriptorSetBase : base; diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 3f3a3127c3..789dc3c308 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -90,6 +90,55 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) #endif } +// +// check that link objects between stages +// +void TIntermediate::mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit) { + if (unit.treeRoot == nullptr || treeRoot == nullptr) + return; + + // Get the linker-object lists + TIntermSequence& linkerObjects = findLinkerObjects()->getSequence(); + TIntermSequence unitLinkerObjects = unit.findLinkerObjects()->getSequence(); + + // filter unitLinkerObjects to only contain uniforms + auto end = std::remove_if(unitLinkerObjects.begin(), unitLinkerObjects.end(), + [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqUniform && + node->getAsSymbolNode()->getQualifier().storage != EvqBuffer; }); + unitLinkerObjects.resize(end - unitLinkerObjects.begin()); + + // merge uniforms and do error checking + mergeGlobalUniformBlocks(infoSink, unit); + mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); +} + +// +// do error checking on the shader boundary in / out vars +// +void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) { + if (unit.treeRoot == nullptr || treeRoot == nullptr) + return; + + // Get copies of the linker-object lists + TIntermSequence linkerObjects = findLinkerObjects()->getSequence(); + TIntermSequence unitLinkerObjects = unit.findLinkerObjects()->getSequence(); + + // filter linkerObjects to only contain out variables + auto end = std::remove_if(linkerObjects.begin(), linkerObjects.end(), + [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqVaryingOut; }); + linkerObjects.resize(end - linkerObjects.begin()); + + // filter unitLinkerObjects to only contain in variables + auto unitEnd = std::remove_if(unitLinkerObjects.begin(), unitLinkerObjects.end(), + [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqVaryingIn; }); + unitLinkerObjects.resize(unitEnd - unitLinkerObjects.begin()); + + // do matching and error checking + mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); + + // TODO: final check; make sure that any statically used `in` have matching `out` written to +} + void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit) { if (unit.getNumEntryPoints() > 0) { @@ -137,6 +186,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_MAX(spvVersion.vulkanGlsl); MERGE_MAX(spvVersion.vulkan); MERGE_MAX(spvVersion.openGl); + MERGE_TRUE(spvVersion.vulkanRelaxed); numErrors += unit.getNumErrors(); // Only one push_constant is allowed, mergeLinkerObjects() will ensure the push_constant @@ -312,7 +362,8 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit) remapIds(idMaps, idShift + 1, unit); mergeBodies(infoSink, globals, unitGlobals); - mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects); + mergeGlobalUniformBlocks(infoSink, unit); + mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end()); } @@ -456,11 +507,193 @@ void TIntermediate::mergeBodies(TInfoSink& infoSink, TIntermSequence& globals, c globals.insert(globals.end() - 1, unitGlobals.begin(), unitGlobals.end() - 1); } +static inline bool isSameInterface(TIntermSymbol* symbol, EShLanguage stage, TIntermSymbol* unitSymbol, EShLanguage unitStage) { + return // 1) same stage and same shader interface + (stage == unitStage && symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) || + // 2) accross stages and both are uniform or buffer + (symbol->getQualifier().storage == EvqUniform && unitSymbol->getQualifier().storage == EvqUniform) || + (symbol->getQualifier().storage == EvqBuffer && unitSymbol->getQualifier().storage == EvqBuffer) || + // 3) in/out matched across stage boundary + (stage < unitStage && symbol->getQualifier().storage == EvqVaryingOut && unitSymbol->getQualifier().storage == EvqVaryingIn) || + (unitStage < stage && symbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().storage == EvqVaryingOut); +} + +// +// Global Unfiform block stores any default uniforms (i.e. uniforms without a block) +// If two linked stages declare the same member, they are meant to be the same uniform +// and need to be in the same block +// merge the members of different stages to allow them to be linked properly +// as a single block +// +void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit) +{ + TIntermSequence& linkerObjects = findLinkerObjects()->getSequence(); + TIntermSequence& unitLinkerObjects = unit.findLinkerObjects()->getSequence(); + + // build lists of default blocks from the intermediates + TIntermSequence defaultBlocks; + TIntermSequence unitDefaultBlocks; + + auto filter = [](TIntermSequence& list, TIntermNode* node) { + if (node->getAsSymbolNode()->getQualifier().defaultBlock) { + list.push_back(node); + } + }; + + std::for_each(linkerObjects.begin(), linkerObjects.end(), + [&defaultBlocks, &filter](TIntermNode* node) { + filter(defaultBlocks, node); + }); + std::for_each(unitLinkerObjects.begin(), unitLinkerObjects.end(), + [&unitDefaultBlocks, &filter](TIntermNode* node) { + filter(unitDefaultBlocks, node); + }); + + auto itUnitBlock = unitDefaultBlocks.begin(); + for (; itUnitBlock != unitDefaultBlocks.end(); itUnitBlock++) { + + bool add = true; + auto itBlock = defaultBlocks.begin(); + + for (; itBlock != defaultBlocks.end(); itBlock++) { + TIntermSymbol* block = (*itBlock)->getAsSymbolNode(); + TIntermSymbol* unitBlock = (*itUnitBlock)->getAsSymbolNode(); + + assert(block && unitBlock); + + // if the two default blocks match, then merge their definitions + if (block->getType().getTypeName() == unitBlock->getType().getTypeName() && + block->getQualifier().storage == unitBlock->getQualifier().storage) { + add = false; + mergeBlockDefinitions(infoSink, block, unitBlock, &unit); + } + } + if (add) { + // push back on original list; won't change the size of the list we're iterating over + linkerObjects.push_back(*itUnitBlock); + } + } +} + +void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unit) { + if (block->getType() == unitBlock->getType()) { + return; + } + + if (block->getType().getTypeName() != unitBlock->getType().getTypeName() || + block->getType().getBasicType() != unitBlock->getType().getBasicType() || + block->getQualifier().storage != unitBlock->getQualifier().storage || + block->getQualifier().layoutSet != unitBlock->getQualifier().layoutSet) { + // different block names likely means different blocks + return; + } + + // merge the struct + // order of declarations doesn't matter and they matched based on member name + TTypeList* memberList = block->getType().getWritableStruct(); + TTypeList* unitMemberList = unitBlock->getType().getWritableStruct(); + + // keep track of which members have changed position + // so we don't have to search the array again + std::map memberIndexUpdates; + + size_t memberListStartSize = memberList->size(); + for (unsigned int i = 0; i < unitMemberList->size(); ++i) { + bool merge = true; + for (unsigned int j = 0; j < memberListStartSize; ++j) { + if ((*memberList)[j].type->getFieldName() == (*unitMemberList)[i].type->getFieldName()) { + merge = false; + const TType* memberType = (*memberList)[j].type; + const TType* unitMemberType = (*unitMemberList)[i].type; + + // compare types + // don't need as many checks as when merging symbols, since + // initializers and most qualifiers are stripped when the member is moved into the block + if ((*memberType) != (*unitMemberType)) { + error(infoSink, "Types must match:"); + infoSink.info << " " << memberType->getFieldName() << ": "; + infoSink.info << "\"" << memberType->getCompleteString() << "\" versus "; + infoSink.info << "\"" << unitMemberType->getCompleteString() << "\"\n"; + } + + memberIndexUpdates[i] = j; + } + } + if (merge) { + memberList->push_back((*unitMemberList)[i]); + memberIndexUpdates[i] = (unsigned int)memberList->size() - 1; + } + } + + TType unitType; + unitType.shallowCopy(unitBlock->getType()); + + // update symbol node in unit tree, + // and other nodes that may reference it + class TMergeBlockTraverser : public TIntermTraverser { + public: + TMergeBlockTraverser(const glslang::TType &type, const glslang::TType& unitType, + glslang::TIntermediate& unit, + const std::map& memberIdxUpdates) : + newType(type), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates) + { } + virtual ~TMergeBlockTraverser() { } + + const glslang::TType& newType; // type with modifications + const glslang::TType& unitType; // copy of original type + glslang::TIntermediate& unit; // intermediate that is being updated + const std::map& memberIndexUpdates; + + virtual void visitSymbol(TIntermSymbol* symbol) + { + glslang::TType& symType = symbol->getWritableType(); + + if (symType == unitType) { + // each symbol node has a local copy of the unitType + // if merging involves changing properties that aren't shared objects + // they should be updated in all instances + + // e.g. the struct list is a ptr to an object, so it can be updated + // once, outside the traverser + //*symType.getWritableStruct() = *newType.getStruct(); + } + + } + + virtual bool visitBinary(TVisit, glslang::TIntermBinary* node) + { + if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == unitType) { + // this is a dereference to a member of the block since the + // member list changed, need to update this to point to the + // right index + assert(node->getRight()->getAsConstantUnion()); + + glslang::TIntermConstantUnion* constNode = node->getRight()->getAsConstantUnion(); + unsigned int memberIdx = constNode->getConstArray()[0].getUConst(); + unsigned int newIdx = memberIndexUpdates.at(memberIdx); + TIntermTyped* newConstNode = unit.addConstantUnion(newIdx, node->getRight()->getLoc()); + + node->setRight(newConstNode); + delete constNode; + + return true; + } + return true; + } + } finalLinkTraverser(block->getType(), unitType, *unit, memberIndexUpdates); + + // update the tree to use the new type + unit->getTreeRoot()->traverse(&finalLinkTraverser); + + // update the member list + (*unitMemberList) = (*memberList); +} + // // Merge the linker objects from unitLinkerObjects into linkerObjects. // Duplication is expected and filtered out, but contradictions are an error. // -void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects) +void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects, EShLanguage unitStage) { // Error check and merge the linker objects (duplicates should not be created) std::size_t initialNumLinkerObjects = linkerObjects.size(); @@ -475,7 +708,7 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin // If they are both blocks in the same shader interface, // match by the block-name, not the identifier name. if (symbol->getType().getBasicType() == EbtBlock && unitSymbol->getType().getBasicType() == EbtBlock) { - if (symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) { + if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) { isSameSymbol = symbol->getType().getTypeName() == unitSymbol->getType().getTypeName(); } } @@ -495,18 +728,54 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin if (! symbol->getQualifier().hasBinding() && unitSymbol->getQualifier().hasBinding()) symbol->getQualifier().layoutBinding = unitSymbol->getQualifier().layoutBinding; + // Similarly for location + if (!symbol->getQualifier().hasLocation() && unitSymbol->getQualifier().hasLocation()) { + symbol->getQualifier().layoutLocation = unitSymbol->getQualifier().layoutLocation; + } + // Update implicit array sizes mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType()); // Check for consistent types/qualification/initializers etc. - mergeErrorCheck(infoSink, *symbol, *unitSymbol, false); + mergeErrorCheck(infoSink, *symbol, *unitSymbol, unitStage); } // If different symbols, verify they arn't push_constant since there can only be one per stage - else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant()) + else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant() && getStage() == unitStage) error(infoSink, "Only one push_constant block is allowed per stage"); } - if (merge) + if (merge) { linkerObjects.push_back(unitLinkerObjects[unitLinkObj]); + + // for anonymous blocks, check that their members don't conflict with other names + if (unitLinkerObjects[unitLinkObj]->getAsSymbolNode()->getBasicType() == EbtBlock && + IsAnonymous(unitLinkerObjects[unitLinkObj]->getAsSymbolNode()->getName())) { + for (std::size_t linkObj = 0; linkObj < initialNumLinkerObjects; ++linkObj) { + TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode(); + TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); + assert(symbol && unitSymbol); + + auto checkName = [this, unitSymbol, &infoSink](const TString& name) { + for (unsigned int i = 0; i < unitSymbol->getType().getStruct()->size(); ++i) { + if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName()) { + error(infoSink, "Anonymous member name used for global variable or other anonymous member: "); + infoSink.info << (*unitSymbol->getType().getStruct())[i].type->getCompleteString() << "\n"; + } + } + }; + + if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) { + checkName(symbol->getName()); + + // check members of other anonymous blocks + if (symbol->getBasicType() == EbtBlock && IsAnonymous(symbol->getName())) { + for (unsigned int i = 0; i < symbol->getType().getStruct()->size(); ++i) { + checkName((*symbol->getType().getStruct())[i].type->getFieldName()); + } + } + } + } + } + } } } @@ -538,26 +807,74 @@ void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType) // // This function only does one of intra- or cross-stage matching per call. // -void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage) +void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, EShLanguage unitStage) { #if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) + bool crossStage = getStage() != unitStage; bool writeTypeComparison = false; // Types have to match - if (symbol.getType() != unitSymbol.getType()) { + { // but, we make an exception if one is an implicit array and the other is sized - if (! (symbol.getType().isArray() && unitSymbol.getType().isArray() && - symbol.getType().sameElementType(unitSymbol.getType()) && - (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray()))) { - error(infoSink, "Types must match:"); + // or if the array sizes differ because of the extra array dimension on some in/out boundaries + bool arraysMatch = false; + if (isIoResizeArray(symbol.getType(), getStage()) || isIoResizeArray(unitSymbol.getType(), unitStage)) { + // if the arrays have an extra dimension because of the stage. + // compare dimensions while ignoring the outer dimension + unsigned int firstDim = isIoResizeArray(symbol.getType(), getStage()) ? 1 : 0; + unsigned int numDim = symbol.getArraySizes() + ? symbol.getArraySizes()->getNumDims() : 0; + unsigned int unitFirstDim = isIoResizeArray(unitSymbol.getType(), unitStage) ? 1 : 0; + unsigned int unitNumDim = unitSymbol.getArraySizes() + ? unitSymbol.getArraySizes()->getNumDims() : 0; + arraysMatch = (numDim - firstDim) == (unitNumDim - unitFirstDim); + // check that array sizes match as well + for (unsigned int i = 0; i < (numDim - firstDim) && arraysMatch; i++) { + if (symbol.getArraySizes()->getDimSize(firstDim + i) != + unitSymbol.getArraySizes()->getDimSize(unitFirstDim + i)) { + arraysMatch = false; + break; + } + } + } + else { + arraysMatch = symbol.getType().sameArrayness(unitSymbol.getType()) || + (symbol.getType().isArray() && unitSymbol.getType().isArray() && + (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray())); + } + + if (!symbol.getType().sameElementType(unitSymbol.getType()) || + !symbol.getType().sameTypeParameters(unitSymbol.getType()) || + !arraysMatch ) { writeTypeComparison = true; + error(infoSink, "Types must match:"); + } + } + + // Interface block member-wise layout qualifiers have to match + if (symbol.getType().getBasicType() == EbtBlock && unitSymbol.getType().getBasicType() == EbtBlock && + symbol.getType().getStruct() && unitSymbol.getType().getStruct() && + symbol.getType().sameStructType(unitSymbol.getType())) { + for (unsigned int i = 0; i < symbol.getType().getStruct()->size(); ++i) { + const TQualifier& qualifier = (*symbol.getType().getStruct())[i].type->getQualifier(); + const TQualifier& unitQualifier = (*unitSymbol.getType().getStruct())[i].type->getQualifier(); + if (qualifier.layoutMatrix != unitQualifier.layoutMatrix || + qualifier.layoutOffset != unitQualifier.layoutOffset || + qualifier.layoutAlign != unitQualifier.layoutAlign || + qualifier.layoutLocation != unitQualifier.layoutLocation || + qualifier.layoutComponent != unitQualifier.layoutComponent) { + error(infoSink, "Interface block member layout qualifiers must match:"); + writeTypeComparison = true; + } } } // Qualifiers have to (almost) match // Storage... - if (symbol.getQualifier().storage != unitSymbol.getQualifier().storage) { + if (symbol.getQualifier().storage != unitSymbol.getQualifier().storage && + !((crossStage && symbol.getQualifier().storage == EvqVaryingIn && unitSymbol.getQualifier().storage == EvqVaryingOut) || + (crossStage && symbol.getQualifier().storage == EvqVaryingOut && unitSymbol.getQualifier().storage == EvqVaryingIn))) { error(infoSink, "Storage qualifiers must match:"); writeTypeComparison = true; } @@ -597,12 +914,16 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy } // Auxiliary and interpolation... - if (symbol.getQualifier().centroid != unitSymbol.getQualifier().centroid || + // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ. + // These mismatches are allowed between any pair of stages ... + // those provided in the fragment shader supersede those provided in previous stages." + if (!crossStage && + (symbol.getQualifier().centroid != unitSymbol.getQualifier().centroid || symbol.getQualifier().smooth != unitSymbol.getQualifier().smooth || symbol.getQualifier().flat != unitSymbol.getQualifier().flat || symbol.getQualifier().isSample()!= unitSymbol.getQualifier().isSample() || symbol.getQualifier().isPatch() != unitSymbol.getQualifier().isPatch() || - symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective()) { + symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective())) { error(infoSink, "Interpolation and auxiliary storage qualifiers must match:"); writeTypeComparison = true; } @@ -1830,4 +2151,17 @@ int TIntermediate::computeBufferReferenceTypeSize(const TType& type) return size; } +#ifndef GLSLANG_WEB +bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) { + return type.isArray() && + ((language == EShLangGeometry && type.getQualifier().storage == EvqVaryingIn) || + (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && + ! type.getQualifier().patch) || + (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && + type.getQualifier().pervertexNV) || + (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && + !type.getQualifier().perTaskNV)); +} +#endif // not GLSLANG_WEB + } // end namespace glslang diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 9fe684a333..9bfa35cc88 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -293,7 +293,12 @@ class TIntermediate { useStorageBuffer(false), nanMinMaxClamp(false), depthReplacing(false), - uniqueId(0) + uniqueId(0), + globalUniformBlockName(""), + atomicCounterBlockName(""), + globalUniformBlockSet(TQualifier::layoutSetEnd), + globalUniformBlockBinding(TQualifier::layoutBindingEnd), + atomicCounterBlockSet(TQualifier::layoutSetEnd) #ifndef GLSLANG_WEB , implicitThisName("@this"), implicitCounterName("@count"), @@ -537,6 +542,19 @@ class TIntermediate { void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&); TIntermAggregate* findLinkerObjects() const; + void setGlobalUniformBlockName(const char* name) { globalUniformBlockName = std::string(name); } + const char* getGlobalUniformBlockName() const { return globalUniformBlockName.c_str(); } + void setGlobalUniformSet(unsigned int set) { globalUniformBlockSet = set; } + unsigned int getGlobalUniformSet() const { return globalUniformBlockSet; } + void setGlobalUniformBinding(unsigned int binding) { globalUniformBlockBinding = binding; } + unsigned int getGlobalUniformBinding() const { return globalUniformBlockBinding; } + + void setAtomicCounterBlockName(const char* name) { atomicCounterBlockName = std::string(name); } + const char* getAtomicCounterBlockName() const { return atomicCounterBlockName.c_str(); } + void setAtomicCounterBlockSet(unsigned int set) { atomicCounterBlockSet = set; } + unsigned int getAtomicCounterBlockSet() const { return atomicCounterBlockSet; } + + void setUseStorageBuffer() { useStorageBuffer = true; } bool usingStorageBuffer() const { return useStorageBuffer; } void setDepthReplacing() { depthReplacing = true; } @@ -848,6 +866,20 @@ class TIntermediate { bool getBinaryDoubleOutput() { return binaryDoubleOutput; } #endif // GLSLANG_WEB + void addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) + { + std::string name(nameStr); + blockBackingOverrides[name] = backing; + } + TBlockStorageClass getBlockStorageOverride(const char* nameStr) const + { + std::string name = nameStr; + auto pos = blockBackingOverrides.find(name); + if (pos == blockBackingOverrides.end()) + return EbsNone; + else + return pos->second; + } #ifdef ENABLE_HLSL void setHlslFunctionality1() { hlslFunctionality1 = true; } bool getHlslFunctionality1() const { return hlslFunctionality1; } @@ -883,6 +915,10 @@ class TIntermediate { void merge(TInfoSink&, TIntermediate&); void finalCheck(TInfoSink&, bool keepUncalled); + void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit); + void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit); + void checkStageIO(TInfoSink&, TIntermediate&); + bool buildConvertOp(TBasicType dst, TBasicType src, TOperator& convertOp) const; TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const; @@ -906,6 +942,8 @@ class TIntermediate { static int getOffset(const TType& type, int index); static int getBlockSize(const TType& blockType); static int computeBufferReferenceTypeSize(const TType&); + static bool isIoResizeArray(const TType& type, EShLanguage language); + bool promote(TIntermOperator*); void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; } bool getNanMinMaxClamp() const { return nanMinMaxClamp; } @@ -963,9 +1001,10 @@ class TIntermediate { void seedIdMap(TIdMaps& idMaps, long long& IdShift); void remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate&); void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals); - void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects); + void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects, EShLanguage); + void mergeBlockDefinitions(TInfoSink&, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unitRoot); void mergeImplicitArraySizes(TType&, const TType&); - void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, bool crossStage); + void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, EShLanguage); void checkCallGraphCycles(TInfoSink&); void checkCallGraphBodies(TInfoSink&, bool keepUncalled); void inOutLocationCheck(TInfoSink&); @@ -1015,6 +1054,13 @@ class TIntermediate { bool localSizeNotDefault[3]; int localSizeSpecId[3]; unsigned long long uniqueId; + + std::string globalUniformBlockName; + std::string atomicCounterBlockName; + unsigned int globalUniformBlockSet; + unsigned int globalUniformBlockBinding; + unsigned int atomicCounterBlockSet; + #ifndef GLSLANG_WEB public: const char* const implicitThisName; @@ -1075,6 +1121,7 @@ class TIntermediate { int uniformLocationBase; TNumericFeatures numericFeatures; #endif + std::unordered_map blockBackingOverrides; std::unordered_set usedConstantId; // specialization constant ids used std::vector usedAtomics; // sets of bindings used by atomic counters diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index e147b0dc89..74b9f3eef7 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -187,6 +187,7 @@ struct TInputLanguage { EShLanguage stage; // redundant information with other input, this one overrides when not EShSourceNone EShClient dialect; int dialectVersion; // version of client's language definition, not the client (when not EShClientNone) + bool VulkanRulesRelaxed = false; }; struct TClient { @@ -427,6 +428,14 @@ enum TResourceType { EResCount }; +enum TBlockStorageClass +{ + EbsUniform = 0, + EbsStorageBuffer, + EbsPushConstant, + EbsNone, // not a uniform or buffer variable + EbsCount, +}; // Make one TShader per shader that you will link into a program. Then // - provide the shader through setStrings() or setStringsWithLengths() @@ -483,6 +492,14 @@ class TShader { GLSLANG_EXPORT void setNoStorageFormat(bool useUnknownFormat); GLSLANG_EXPORT void setNanMinMaxClamp(bool nanMinMaxClamp); GLSLANG_EXPORT void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode); + GLSLANG_EXPORT void addBlockStorageOverride(const char* nameStr, glslang::TBlockStorageClass backing); + + GLSLANG_EXPORT void setGlobalUniformBlockName(const char* name); + GLSLANG_EXPORT void setAtomicCounterBlockName(const char* name); + GLSLANG_EXPORT void setGlobalUniformSet(unsigned int set); + GLSLANG_EXPORT void setGlobalUniformBinding(unsigned int binding); + GLSLANG_EXPORT void setAtomicCounterBlockSet(unsigned int set); + GLSLANG_EXPORT void setAtomicCounterBlockBinding(unsigned int binding); // For setting up the environment (cleared to nothingness in the constructor). // These must be called so that parsing is done for the right source language and @@ -539,6 +556,9 @@ class TShader { bool getEnvTargetHlslFunctionality1() const { return false; } #endif + void setEnvInputVulkanRulesRelaxed() { environment.input.VulkanRulesRelaxed = true; } + bool getEnvInputVulkanRulesRelaxed() const { return environment.input.VulkanRulesRelaxed; } + // Interface to #include handlers. // // To support #include, a client of Glslang does the following: @@ -806,7 +826,7 @@ class TIoMapResolver // Called by TSlotCollector to resolve resource locations or bindings virtual void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0; // Called by mapIO.addStage to set shader stage mask to mark a stage be added to this pipeline - virtual void addStage(EShLanguage stage) = 0; + virtual void addStage(EShLanguage stage, TIntermediate& stageIntermediate) = 0; }; #endif // !GLSLANG_WEB && !GLSLANG_ANGLE @@ -928,6 +948,7 @@ class TProgram { protected: GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages); + GLSLANG_EXPORT bool crossStageCheck(EShMessages); TPoolAllocator* pool; std::list stages[EShLangCount]; diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 0617ff850e..74c9809aac 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -53,7 +53,9 @@ if(BUILD_TESTING) ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp) + ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/VkRelaxed.FromFile.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/GlslMapIO.FromFile.cpp) if(ENABLE_SPVREMAPPER) set(TEST_SOURCES ${TEST_SOURCES} diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp new file mode 100644 index 0000000000..574e905f89 --- /dev/null +++ b/gtests/GlslMapIO.FromFile.cpp @@ -0,0 +1,306 @@ +// +// Copyright (C) 2016-2017 Google, Inc. +// Copyright (C) 2020 The Khronos Group Inc. +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +#include + +#include + +#include "TestFixture.h" + +#include "glslang/MachineIndependent/iomapper.h" +#include "glslang/MachineIndependent/reflection.h" + +#ifndef GLSLANG_WEB +namespace glslangtest { +namespace { + +struct IoMapData { + std::vector fileNames; + Semantics semantics; +}; + +using GlslMapIOTest = GlslangTest <::testing::TestWithParam>; + +template +std::string interfaceName(T symbol) { + return symbol.getType()->getBasicType() == glslang::EbtBlock ? std::string(symbol.getType()->getTypeName().c_str()) : symbol.name; +} + +bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { + bool success = true; + + // Verify IO Mapping by generating reflection for each stage individually + // and comparing layout qualifiers on the results + + + int reflectionOptions = EShReflectionDefault; + //reflectionOptions |= EShReflectionStrictArraySuffix; + //reflectionOptions |= EShReflectionBasicArraySuffix; + reflectionOptions |= EShReflectionIntermediateIO; + reflectionOptions |= EShReflectionSeparateBuffers; + reflectionOptions |= EShReflectionAllBlockVariables; + //reflectionOptions |= EShReflectionUnwrapIOBlocks; + + success &= program.buildReflection(reflectionOptions); + + // check that the reflection output from the individual stages all makes sense.. + std::vector stageReflections; + for (int s = 0; s < EShLangCount; ++s) { + if (program.getIntermediate((EShLanguage)s)) { + stageReflections.emplace_back((EShReflectionOptions)reflectionOptions, (EShLanguage)s, (EShLanguage)s); + success &= stageReflections.back().addStage((EShLanguage)s, *program.getIntermediate((EShLanguage)s)); + } + } + + // check that input/output locations match between stages + auto it = stageReflections.begin(); + auto nextIt = it + 1; + for (; nextIt != stageReflections.end(); it++, nextIt++) { + int numOut = it->getNumPipeOutputs(); + std::map pipeOut; + + for (int i = 0; i < numOut; i++) { + const glslang::TObjectReflection& out = it->getPipeOutput(i); + std::string name = interfaceName(out); + pipeOut[name] = &out; + } + + int numIn = nextIt->getNumPipeInputs(); + for (int i = 0; i < numIn; i++) { + auto in = nextIt->getPipeInput(i); + std::string name = interfaceName(in); + auto out = pipeOut.find(name); + + if (out != pipeOut.end()) { + auto inQualifier = in.getType()->getQualifier(); + auto outQualifier = out->second->getType()->getQualifier(); + success &= outQualifier.layoutLocation == inQualifier.layoutLocation; + } + else { + success &= false; + } + } + } + + // compare uniforms in each stage to the program + { + int totalUniforms = program.getNumUniformVariables(); + std::map programUniforms; + for (int i = 0; i < totalUniforms; i++) { + const glslang::TObjectReflection& uniform = program.getUniform(i); + std::string name = interfaceName(uniform); + programUniforms[name] = &uniform; + } + it = stageReflections.begin(); + for (; it != stageReflections.end(); it++) { + int numUniform = it->getNumUniforms(); + std::map uniforms; + + for (int i = 0; i < numUniform; i++) { + glslang::TObjectReflection uniform = it->getUniform(i); + std::string name = interfaceName(uniform); + auto programUniform = programUniforms.find(name); + + if (programUniform != programUniforms.end()) { + auto stageQualifier = uniform.getType()->getQualifier(); + auto programQualifier = programUniform->second->getType()->getQualifier(); + + success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; + success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; + success &= stageQualifier.layoutSet == programQualifier.layoutSet; + } + else { + success &= false; + } + } + } + } + + // compare uniform blocks in each stage to the program table + { + int totalUniforms = program.getNumUniformBlocks(); + std::map programUniforms; + for (int i = 0; i < totalUniforms; i++) { + const glslang::TObjectReflection& uniform = program.getUniformBlock(i); + std::string name = interfaceName(uniform); + programUniforms[name] = &uniform; + } + it = stageReflections.begin(); + for (; it != stageReflections.end(); it++) { + int numUniform = it->getNumUniformBlocks(); + std::map uniforms; + + for (int i = 0; i < numUniform; i++) { + glslang::TObjectReflection uniform = it->getUniformBlock(i); + std::string name = interfaceName(uniform); + auto programUniform = programUniforms.find(name); + + if (programUniform != programUniforms.end()) { + auto stageQualifier = uniform.getType()->getQualifier(); + auto programQualifier = programUniform->second->getType()->getQualifier(); + + success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; + success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; + success &= stageQualifier.layoutSet == programQualifier.layoutSet; + } + else { + success &= false; + } + } + } + } + + if (!success) { + linkingError += "Mismatched cross-stage IO\n"; + } + + return success; +} + +TEST_P(GlslMapIOTest, FromFile) +{ + const auto& fileNames = GetParam().fileNames; + Semantics semantics = GetParam().semantics; + const size_t fileCount = fileNames.size(); + const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv); + GlslangResult result; + + // Compile each input shader file. + bool success = true; + std::vector> shaders; + for (size_t i = 0; i < fileCount; ++i) { + std::string contents; + tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], + "input", &contents); + shaders.emplace_back( + new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); + auto* shader = shaders.back().get(); + + shader->setAutoMapLocations(true); + shader->setAutoMapBindings(true); + + if (controls & EShMsgSpvRules) { + if (controls & EShMsgVulkanRules) { + shader->setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl + : glslang::EShSourceGlsl, + shader->getStage(), glslang::EShClientVulkan, 100); + shader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1); + shader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_0); + } else { + shader->setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl + : glslang::EShSourceGlsl, + shader->getStage(), glslang::EShClientOpenGL, 100); + shader->setEnvClient(glslang::EShClientOpenGL, glslang::EShTargetOpenGL_450); + shader->setEnvTarget(glslang::EshTargetSpv, glslang::EShTargetSpv_1_0); + } + } + + success &= compile(shader, contents, "", controls); + + result.shaderResults.push_back( + { fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog() }); + } + + // Link all of them. + glslang::TProgram program; + for (const auto& shader : shaders) program.addShader(shader.get()); + success &= program.link(controls); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + + unsigned int stage = 0; + glslang::TIntermediate* firstIntermediate = nullptr; + while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } + firstIntermediate = program.getIntermediate((EShLanguage)stage); + + glslang::TDefaultGlslIoResolver resolver(*firstIntermediate); + glslang::TGlslIoMapper ioMapper; + + if (success) { + success &= program.mapIO(&resolver, &ioMapper); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + } + + success &= verifyIOMapping(result.linkingError, program); + result.validationResult = success; + + if (success && (controls & EShMsgSpvRules)) { + for (int stage = 0; stage < EShLangCount; ++stage) { + if (program.getIntermediate((EShLanguage)stage)) { + spv::SpvBuildLogger logger; + std::vector spirv_binary; + options().disableOptimizer = false; + glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), + spirv_binary, &logger, &options()); + + std::ostringstream disassembly_stream; + spv::Parameterize(); + spv::Disassemble(disassembly_stream, spirv_binary); + result.spirvWarningsErrors += logger.getAllMessages(); + result.spirv += disassembly_stream.str(); + result.validationResult &= !options().validate || logger.getAllMessages().empty(); + } + } + } + + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + // Check with expected results. + const std::string expectedOutputFname = + GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out"; + std::string expectedOutput; + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname, + result.spirvWarningsErrors); +} + +// clang-format off +INSTANTIATE_TEST_SUITE_P( + Glsl, GlslMapIOTest, + ::testing::ValuesIn(std::vector({ + {{"iomap.crossStage.vert", "iomap.crossStage.frag" }, Semantics::OpenGL}, + {{"iomap.crossStage.2.vert", "iomap.crossStage.2.geom", "iomap.crossStage.2.frag" }, Semantics::OpenGL}, + // vulkan semantics + {{"iomap.crossStage.vk.vert", "iomap.crossStage.vk.geom", "iomap.crossStage.vk.frag" }, Semantics::Vulkan}, + })) +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest +#endif \ No newline at end of file diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp index 2909a9c135..5e005a463c 100644 --- a/gtests/Link.FromFile.Vk.cpp +++ b/gtests/Link.FromFile.Vk.cpp @@ -114,12 +114,12 @@ INSTANTIATE_TEST_SUITE_P( ::testing::ValuesIn(std::vector>({ {"link1.vk.frag", "link2.vk.frag"}, {"spv.unit1.frag", "spv.unit2.frag", "spv.unit3.frag"}, - {"link.vk.matchingPC.0.0.frag", "link.vk.matchingPC.0.1.frag", - "link.vk.matchingPC.0.2.frag"}, - {"link.vk.differentPC.0.0.frag", "link.vk.differentPC.0.1.frag", - "link.vk.differentPC.0.2.frag"}, - {"link.vk.differentPC.1.0.frag", "link.vk.differentPC.1.1.frag", - "link.vk.differentPC.1.2.frag"}, + {"link.vk.matchingPC.0.0.frag", "link.vk.matchingPC.0.1.frag", + "link.vk.matchingPC.0.2.frag"}, + {"link.vk.differentPC.0.0.frag", "link.vk.differentPC.0.1.frag", + "link.vk.differentPC.0.2.frag"}, + {"link.vk.differentPC.1.0.frag", "link.vk.differentPC.1.1.frag", + "link.vk.differentPC.1.2.frag"}, {"link.vk.pcNamingValid.0.0.vert", "link.vk.pcNamingValid.0.1.vert"}, {"link.vk.pcNamingInvalid.0.0.vert", "link.vk.pcNamingInvalid.0.1.vert"}, {"link.vk.multiBlocksValid.0.0.vert", "link.vk.multiBlocksValid.0.1.vert"}, diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp new file mode 100644 index 0000000000..d791d6cc67 --- /dev/null +++ b/gtests/VkRelaxed.FromFile.cpp @@ -0,0 +1,296 @@ +// +// Copyright (C) 2016-2017 Google, Inc. +// Copyright (C) 2020 The Khronos Group Inc. +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +#include + +#include + +#include "TestFixture.h" + +#include "glslang/MachineIndependent/iomapper.h" +#include "glslang/MachineIndependent/reflection.h" + +#ifndef GLSLANG_WEB +namespace glslangtest { +namespace { + +struct vkRelaxedData { + std::vector fileNames; +}; + +using VulkanRelaxedTest = GlslangTest <::testing::TestWithParam>; + +template +std::string interfaceName(T symbol) { + return symbol.getType()->getBasicType() == glslang::EbtBlock ? std::string(symbol.getType()->getTypeName().c_str()) : symbol.name; +} + +bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { + bool success = true; + + // Verify IO Mapping by generating reflection for each stage individually + // and comparing layout qualifiers on the results + + + int reflectionOptions = EShReflectionDefault; + //reflectionOptions |= EShReflectionStrictArraySuffix; + //reflectionOptions |= EShReflectionBasicArraySuffix; + reflectionOptions |= EShReflectionIntermediateIO; + reflectionOptions |= EShReflectionSeparateBuffers; + reflectionOptions |= EShReflectionAllBlockVariables; + //reflectionOptions |= EShReflectionUnwrapIOBlocks; + + success &= program.buildReflection(reflectionOptions); + + // check that the reflection output from the individual stages all makes sense.. + std::vector stageReflections; + for (int s = 0; s < EShLangCount; ++s) { + if (program.getIntermediate((EShLanguage)s)) { + stageReflections.emplace_back((EShReflectionOptions)reflectionOptions, (EShLanguage)s, (EShLanguage)s); + success &= stageReflections.back().addStage((EShLanguage)s, *program.getIntermediate((EShLanguage)s)); + } + } + + // check that input/output locations match between stages + auto it = stageReflections.begin(); + auto nextIt = it + 1; + for (; nextIt != stageReflections.end(); it++, nextIt++) { + int numOut = it->getNumPipeOutputs(); + std::map pipeOut; + + for (int i = 0; i < numOut; i++) { + const glslang::TObjectReflection& out = it->getPipeOutput(i); + std::string name = interfaceName(out); + pipeOut[name] = &out; + } + + int numIn = nextIt->getNumPipeInputs(); + for (int i = 0; i < numIn; i++) { + auto in = nextIt->getPipeInput(i); + std::string name = interfaceName(in); + auto out = pipeOut.find(name); + + if (out != pipeOut.end()) { + auto inQualifier = in.getType()->getQualifier(); + auto outQualifier = out->second->getType()->getQualifier(); + success &= outQualifier.layoutLocation == inQualifier.layoutLocation; + } + else { + success &= false; + } + } + } + + // compare uniforms in each stage to the program + { + int totalUniforms = program.getNumUniformVariables(); + std::map programUniforms; + for (int i = 0; i < totalUniforms; i++) { + const glslang::TObjectReflection& uniform = program.getUniform(i); + std::string name = interfaceName(uniform); + programUniforms[name] = &uniform; + } + it = stageReflections.begin(); + for (; it != stageReflections.end(); it++) { + int numUniform = it->getNumUniforms(); + std::map uniforms; + + for (int i = 0; i < numUniform; i++) { + glslang::TObjectReflection uniform = it->getUniform(i); + std::string name = interfaceName(uniform); + auto programUniform = programUniforms.find(name); + + if (programUniform != programUniforms.end()) { + auto stageQualifier = uniform.getType()->getQualifier(); + auto programQualifier = programUniform->second->getType()->getQualifier(); + + success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; + success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; + success &= stageQualifier.layoutSet == programQualifier.layoutSet; + } + else { + success &= false; + } + } + } + } + + // compare uniform blocks in each stage to the program table + { + int totalUniforms = program.getNumUniformBlocks(); + std::map programUniforms; + for (int i = 0; i < totalUniforms; i++) { + const glslang::TObjectReflection& uniform = program.getUniformBlock(i); + std::string name = interfaceName(uniform); + programUniforms[name] = &uniform; + } + it = stageReflections.begin(); + for (; it != stageReflections.end(); it++) { + int numUniform = it->getNumUniformBlocks(); + std::map uniforms; + + for (int i = 0; i < numUniform; i++) { + glslang::TObjectReflection uniform = it->getUniformBlock(i); + std::string name = interfaceName(uniform); + auto programUniform = programUniforms.find(name); + + if (programUniform != programUniforms.end()) { + auto stageQualifier = uniform.getType()->getQualifier(); + auto programQualifier = programUniform->second->getType()->getQualifier(); + + success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; + success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; + success &= stageQualifier.layoutSet == programQualifier.layoutSet; + } + else { + success &= false; + } + } + } + } + + if (!success) { + linkingError += "Mismatched cross-stage IO\n"; + } + + return success; +} + +TEST_P(VulkanRelaxedTest, FromFile) +{ + const auto& fileNames = GetParam().fileNames; + Semantics semantics = Semantics::Vulkan; + const size_t fileCount = fileNames.size(); + const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv); + GlslangResult result; + + // Compile each input shader file. + bool success = true; + std::vector> shaders; + for (size_t i = 0; i < fileCount; ++i) { + std::string contents; + tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], + "input", &contents); + shaders.emplace_back( + new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); + auto* shader = shaders.back().get(); + + shader->setAutoMapLocations(true); + shader->setAutoMapBindings(true); + + shader->setEnvInput(glslang::EShSourceGlsl, shader->getStage(), glslang::EShClientVulkan, 100); + shader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1); + shader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_0); + + // Use vulkan relaxed option + shader->setEnvInputVulkanRulesRelaxed(); + + success &= compile(shader, contents, "", controls); + + result.shaderResults.push_back( + { fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog() }); + } + + // Link all of them. + glslang::TProgram program; + for (const auto& shader : shaders) program.addShader(shader.get()); + success &= program.link(controls); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + + unsigned int stage = 0; + glslang::TIntermediate* firstIntermediate = nullptr; + while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } + firstIntermediate = program.getIntermediate((EShLanguage)stage); + + glslang::TDefaultGlslIoResolver resolver(*firstIntermediate); + glslang::TGlslIoMapper ioMapper; + + if (success) { + success &= program.mapIO(&resolver, &ioMapper); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + } + + success &= verifyIOMapping(result.linkingError, program); + result.validationResult = success; + + if (success && (controls & EShMsgSpvRules)) { + for (int stage = 0; stage < EShLangCount; ++stage) { + if (program.getIntermediate((EShLanguage)stage)) { + spv::SpvBuildLogger logger; + std::vector spirv_binary; + options().disableOptimizer = false; + glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), + spirv_binary, &logger, &options()); + + std::ostringstream disassembly_stream; + spv::Parameterize(); + spv::Disassemble(disassembly_stream, spirv_binary); + result.spirvWarningsErrors += logger.getAllMessages(); + result.spirv += disassembly_stream.str(); + result.validationResult &= !options().validate || logger.getAllMessages().empty(); + } + } + } + + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + // Check with expected results. + const std::string expectedOutputFname = + GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out"; + std::string expectedOutput; + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname, + result.spirvWarningsErrors); +} + +// clang-format off +INSTANTIATE_TEST_SUITE_P( + Glsl, VulkanRelaxedTest, + ::testing::ValuesIn(std::vector({ + {{"vk.relaxed.frag"}}, + {{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}}, + {{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}}, + {{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}}, + })) +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest +#endif \ No newline at end of file From b5c8fd4fcff9667c2a40c53f085f2a868287f114 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 8 Mar 2021 14:02:06 -0700 Subject: [PATCH 124/365] Pass correct proxy type for atomicStore Fixes #2564 --- SPIRV/GlslangToSpv.cpp | 4 +- .../baseResults/spv.atomicStoreInt64.comp.out | 57 +++++++++++++++++++ Test/spv.atomicStoreInt64.comp | 11 ++++ gtests/Spv.FromFile.cpp | 1 + 4 files changed, 72 insertions(+), 1 deletion(-) create mode 100644 Test/baseResults/spv.atomicStoreInt64.comp.out create mode 100644 Test/spv.atomicStoreInt64.comp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 8a1b30d777..8eb06b7cdf 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3164,7 +3164,9 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt #endif if (atomic) { // Handle all atomics - result = createAtomicOperation(node->getOp(), precision, resultType(), operands, node->getBasicType(), + glslang::TBasicType typeProxy = (node->getOp() == glslang::EOpAtomicStore) + ? node->getSequence()[0]->getAsTyped()->getBasicType() : node->getBasicType(); + result = createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy, lvalueCoherentFlags); } else if (node->getOp() == glslang::EOpDebugPrintf) { if (!nonSemanticDebugPrintf) { diff --git a/Test/baseResults/spv.atomicStoreInt64.comp.out b/Test/baseResults/spv.atomicStoreInt64.comp.out new file mode 100644 index 0000000000..3adadcb288 --- /dev/null +++ b/Test/baseResults/spv.atomicStoreInt64.comp.out @@ -0,0 +1,57 @@ +spv.atomicStoreInt64.comp +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 25 + + Capability Shader + Capability Int64 + Capability Int64Atomics + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_atomic_int64" + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 7 "ssbo" + MemberName 7(ssbo) 0 "y" + Name 9 "" + Name 14 "ubo" + MemberName 14(ubo) 0 "z" + Name 16 "" + MemberDecorate 7(ssbo) 0 Offset 0 + Decorate 7(ssbo) BufferBlock + Decorate 9 DescriptorSet 0 + Decorate 9 Binding 0 + MemberDecorate 14(ubo) 0 Offset 0 + Decorate 14(ubo) Block + Decorate 16 DescriptorSet 0 + Decorate 16 Binding 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 64 0 + 7(ssbo): TypeStruct 6(int64_t) + 8: TypePointer Uniform 7(ssbo) + 9: 8(ptr) Variable Uniform + 10: TypeInt 32 1 + 11: 10(int) Constant 0 + 12: TypePointer Uniform 6(int64_t) + 14(ubo): TypeStruct 6(int64_t) + 15: TypePointer Uniform 14(ubo) + 16: 15(ptr) Variable Uniform + 19: 10(int) Constant 1 + 20: 10(int) Constant 64 + 21: TypeInt 32 0 + 22: 21(int) Constant 1 + 23: 21(int) Constant 0 + 24: 21(int) Constant 64 + 4(main): 2 Function None 3 + 5: Label + 13: 12(ptr) AccessChain 9 11 + 17: 12(ptr) AccessChain 16 11 + 18: 6(int64_t) Load 17 + AtomicStore 13 19 24 18 + Return + FunctionEnd diff --git a/Test/spv.atomicStoreInt64.comp b/Test/spv.atomicStoreInt64.comp new file mode 100644 index 0000000000..879c37a876 --- /dev/null +++ b/Test/spv.atomicStoreInt64.comp @@ -0,0 +1,11 @@ +#version 450 +#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable +#extension GL_EXT_shader_atomic_int64 : enable +#extension GL_KHR_memory_scope_semantics : enable + +layout(set = 0, binding = 0) buffer ssbo { uint64_t y; }; +layout(set = 0, binding = 1) uniform ubo { uint64_t z; }; + +void main() { + atomicStore(y, z, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index e2a837db0a..5456fb8934 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -714,6 +714,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.multiviewPerViewAttributes.vert", "spv.multiviewPerViewAttributes.tesc", "spv.atomicInt64.comp", + "spv.atomicStoreInt64.comp", "spv.shadingRate.frag", "spv.RayGenShader.rgen", "spv.RayGenShaderArray.rgen", From e063363878f3dd25f5f86386c5bfa12854e6e973 Mon Sep 17 00:00:00 2001 From: greg-lunarg Date: Wed, 10 Mar 2021 11:26:43 -0700 Subject: [PATCH 125/365] Revert "GL_ext_vulkan_glsl_relaxed extension support, and cross stage aware IO mapper" --- SPIRV/GlslangToSpv.cpp | 3 - StandAlone/StandAlone.cpp | 174 ---- Test/baseResults/iomap.crossStage.2.vert.out | 787 ----------------- Test/baseResults/iomap.crossStage.vert.out | 515 ----------- Test/baseResults/iomap.crossStage.vk.vert.out | 720 --------------- .../vk.relaxed.errorcheck.vert.out | 124 --- Test/baseResults/vk.relaxed.frag.out | 826 ------------------ Test/baseResults/vk.relaxed.link1.frag.out | 515 ----------- .../baseResults/vk.relaxed.stagelink.vert.out | 717 --------------- Test/iomap.crossStage.2.frag | 42 - Test/iomap.crossStage.2.geom | 39 - Test/iomap.crossStage.2.vert | 38 - Test/iomap.crossStage.frag | 41 - Test/iomap.crossStage.vert | 38 - Test/iomap.crossStage.vk.frag | 50 -- Test/iomap.crossStage.vk.geom | 35 - Test/iomap.crossStage.vk.vert | 32 - Test/vk.relaxed.errorcheck.frag | 16 - Test/vk.relaxed.errorcheck.vert | 15 - Test/vk.relaxed.frag | 74 -- Test/vk.relaxed.link1.frag | 28 - Test/vk.relaxed.link2.frag | 19 - Test/vk.relaxed.stagelink.frag | 28 - Test/vk.relaxed.stagelink.vert | 31 - glslang/Include/Types.h | 44 - glslang/Include/intermediate.h | 3 - glslang/MachineIndependent/Initialize.cpp | 86 +- .../MachineIndependent/ParseContextBase.cpp | 63 +- glslang/MachineIndependent/ParseHelper.cpp | 300 +------ glslang/MachineIndependent/ParseHelper.h | 43 +- glslang/MachineIndependent/ShaderLang.cpp | 83 +- glslang/MachineIndependent/Versions.cpp | 2 +- glslang/MachineIndependent/Versions.h | 3 +- glslang/MachineIndependent/intermOut.cpp | 1 - glslang/MachineIndependent/iomapper.cpp | 184 ++-- glslang/MachineIndependent/iomapper.h | 41 +- glslang/MachineIndependent/linkValidate.cpp | 364 +------- .../MachineIndependent/localintermediate.h | 53 +- glslang/Public/ShaderLang.h | 23 +- gtests/CMakeLists.txt | 4 +- gtests/GlslMapIO.FromFile.cpp | 306 ------- gtests/Link.FromFile.Vk.cpp | 12 +- gtests/VkRelaxed.FromFile.cpp | 296 ------- 43 files changed, 111 insertions(+), 6707 deletions(-) delete mode 100644 Test/baseResults/iomap.crossStage.2.vert.out delete mode 100644 Test/baseResults/iomap.crossStage.vert.out delete mode 100644 Test/baseResults/iomap.crossStage.vk.vert.out delete mode 100644 Test/baseResults/vk.relaxed.errorcheck.vert.out delete mode 100644 Test/baseResults/vk.relaxed.frag.out delete mode 100644 Test/baseResults/vk.relaxed.link1.frag.out delete mode 100644 Test/baseResults/vk.relaxed.stagelink.vert.out delete mode 100644 Test/iomap.crossStage.2.frag delete mode 100644 Test/iomap.crossStage.2.geom delete mode 100644 Test/iomap.crossStage.2.vert delete mode 100644 Test/iomap.crossStage.frag delete mode 100644 Test/iomap.crossStage.vert delete mode 100644 Test/iomap.crossStage.vk.frag delete mode 100644 Test/iomap.crossStage.vk.geom delete mode 100644 Test/iomap.crossStage.vk.vert delete mode 100644 Test/vk.relaxed.errorcheck.frag delete mode 100644 Test/vk.relaxed.errorcheck.vert delete mode 100644 Test/vk.relaxed.frag delete mode 100644 Test/vk.relaxed.link1.frag delete mode 100644 Test/vk.relaxed.link2.frag delete mode 100644 Test/vk.relaxed.stagelink.frag delete mode 100644 Test/vk.relaxed.stagelink.vert delete mode 100644 gtests/GlslMapIO.FromFile.cpp delete mode 100644 gtests/VkRelaxed.FromFile.cpp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 6d9c7cfec3..8eb06b7cdf 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2784,7 +2784,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt break; case glslang::EOpAtomicAdd: - case glslang::EOpAtomicSubtract: case glslang::EOpAtomicMin: case glslang::EOpAtomicMax: case glslang::EOpAtomicAnd: @@ -2956,7 +2955,6 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt break; case glslang::EOpAtomicAdd: - case glslang::EOpAtomicSubtract: case glslang::EOpAtomicMin: case glslang::EOpAtomicMax: case glslang::EOpAtomicAnd: @@ -6896,7 +6894,6 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv builder.addCapability(spv::CapabilityAtomicFloat64AddEXT); } break; - case glslang::EOpAtomicSubtract: case glslang::EOpAtomicCounterSubtract: opCode = spv::OpAtomicISub; break; diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 923ded3052..fdbf027990 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -110,7 +110,6 @@ bool SpvToolsValidate = false; bool NaNClamp = false; bool stripDebugInfo = false; bool beQuiet = false; -bool VulkanRulesRelaxed = false; // // Return codes from main/exit(). @@ -196,17 +195,6 @@ std::array, glslang::EResCount> baseBindi std::array, glslang::EResCount> baseBindingForSet; std::array, EShLangCount> baseResourceSetBinding; -std::vector> blockStorageOverrides; - -bool setGlobalUniformBlock = false; -std::string globalUniformName; -unsigned int globalUniformBinding; -unsigned int globalUniformSet; - -bool setGlobalBufferBlock = false; -std::string atomicCounterBlockName; -unsigned int atomicCounterBlockSet; - // Add things like "#define ..." to a preamble to use in the beginning of the shader. class TPreamble { public: @@ -408,115 +396,6 @@ void ProcessResourceSetBindingBase(int& argc, char**& argv, std::array>& storage) -{ - if (argc < 3) - usage(); - - glslang::TBlockStorageClass blockStorage = glslang::EbsNone; - - std::string strBacking(argv[2]); - if (strBacking == "uniform") - blockStorage = glslang::EbsUniform; - else if (strBacking == "buffer") - blockStorage = glslang::EbsStorageBuffer; - else if (strBacking == "push_constant") - blockStorage = glslang::EbsPushConstant; - else { - printf("%s: invalid block storage\n", strBacking.c_str()); - usage(); - } - - storage.push_back(std::make_pair(std::string(argv[1]), blockStorage)); - - argc -= 2; - argv += 2; -} - -inline bool isNonDigit(char c) { - // a non-digit character valid in a glsl identifier - return (c == '_') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); -} - -// whether string isa valid identifier to be used in glsl -bool isValidIdentifier(const char* str) { - std::string idn(str); - - if (idn.length() == 0) { - return false; - } - - if (idn.length() >= 3 && idn.substr(0, 3) == "gl_") { - // identifiers startin with "gl_" are reserved - return false; - } - - if (!isNonDigit(idn[0])) { - return false; - } - - for (unsigned int i = 1; i < idn.length(); ++i) { - if (!(isdigit(idn[i]) || isNonDigit(idn[i]))) { - return false; - } - } - - return true; -} - -// Process settings for either the global buffer block or global unfirom block -// of the form: -// --argname name set binding -void ProcessGlobalBlockSettings(int& argc, char**& argv, std::string* name, unsigned int* set, unsigned int* binding) -{ - if (argc < 4) - usage(); - - unsigned int curArg = 1; - - assert(name || set || binding); - - if (name) { - if (!isValidIdentifier(argv[curArg])) { - printf("%s: invalid identifier\n", argv[curArg]); - usage(); - } - *name = argv[curArg]; - - curArg++; - } - - if (set) { - errno = 0; - int setVal = ::strtol(argv[curArg], NULL, 10); - if (errno || setVal < 0) { - printf("%s: invalid set\n", argv[curArg]); - usage(); - } - *set = setVal; - - curArg++; - } - - if (binding) { - errno = 0; - int bindingVal = ::strtol(argv[curArg], NULL, 10); - if (errno || bindingVal < 0) { - printf("%s: invalid binding\n", argv[curArg]); - usage(); - } - *binding = bindingVal; - - curArg++; - } - - argc -= (curArg - 1); - argv += (curArg - 1); -} - // // Do all command-line argument parsing. This includes building up the work-items // to be processed later, and saving all the command-line options. @@ -690,17 +569,6 @@ void ProcessArguments(std::vector>& workItem lowerword == "resource-set-binding" || lowerword == "rsb") { ProcessResourceSetBindingBase(argc, argv, baseResourceSetBinding); - } else if (lowerword == "set-block-storage" || - lowerword == "sbs") { - ProcessBlockStorage(argc, argv, blockStorageOverrides); - } else if (lowerword == "set-atomic-counter-block" || - lowerword == "sacb") { - ProcessGlobalBlockSettings(argc, argv, &atomicCounterBlockName, &atomicCounterBlockSet, nullptr); - setGlobalBufferBlock = true; - } else if (lowerword == "set-default-uniform-block" || - lowerword == "sdub") { - ProcessGlobalBlockSettings(argc, argv, &globalUniformName, &globalUniformSet, &globalUniformBinding); - setGlobalUniformBlock = true; } else if (lowerword == "shift-image-bindings" || // synonyms lowerword == "shift-image-binding" || lowerword == "sib") { @@ -853,9 +721,6 @@ void ProcessArguments(std::vector>& workItem else Error("unknown -O option"); break; - case 'R': - VulkanRulesRelaxed = true; - break; case 'S': if (argc <= 1) Error("no specified for -S"); @@ -1203,24 +1068,6 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setUniformLocationBase(uniformBase); #endif - if (VulkanRulesRelaxed) { - for (auto& storageOverride : blockStorageOverrides) { - shader->addBlockStorageOverride(storageOverride.first.c_str(), - storageOverride.second); - } - - if (setGlobalBufferBlock) { - shader->setAtomicCounterBlockName(atomicCounterBlockName.c_str()); - shader->setAtomicCounterBlockSet(atomicCounterBlockSet); - } - - if (setGlobalUniformBlock) { - shader->setGlobalUniformBlockName(globalUniformName.c_str()); - shader->setGlobalUniformSet(globalUniformSet); - shader->setGlobalUniformBinding(globalUniformBinding); - } - } - shader->setNanMinMaxClamp(NaNClamp); #ifdef ENABLE_HLSL @@ -1244,8 +1091,6 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (targetHlslFunctionality1) shader->setEnvTargetHlslFunctionality1(); #endif - if (VulkanRulesRelaxed) - shader->setEnvInputVulkanRulesRelaxed(); } shaders.push_back(shader); @@ -1727,9 +1572,6 @@ void usage() " is searched first, followed by left-to-right order of -I\n" " -Od disables optimization; may cause illegal SPIR-V for HLSL\n" " -Os optimizes SPIR-V to minimize size\n" - " -R use relaxed verification rules for generating Vulkan SPIR-V,\n" - " allowing the use of default uniforms, atomic_uints, and\n" - " gl_VertexID and gl_InstanceID keywords.\n" " -S uses specified stage rather than parsing the file extension\n" " choices for are vert, tesc, tese, geom, frag, or comp\n" " -U | --undef-macro | --U \n" @@ -1807,22 +1649,6 @@ void usage() " --resource-set-binding [stage] set\n" " set descriptor set for all resources\n" " --rsb synonym for --resource-set-binding\n" - " --set-block-backing name {uniform|buffer|push_constant}\n" - " changes the backing type of a uniform, buffer,\n" - " or push_constant block declared in\n" - " in the program, when using -R option.\n" - " This can be used to change the backing\n" - " for existing blocks as well as implicit ones\n" - " such as 'gl_DefaultUniformBlock'.\n" - " --sbs synonym for set-block-storage\n" - " --set-atomic-counter-block name set\n" - " set name, and descriptor set for\n" - " atomic counter blocks, with -R opt\n" - " --sacb synonym for set-atomic-counter-block\n" - " --set-default-uniform-block name set binding\n" - " set name, descriptor set, and binding for\n" - " global default-uniform-block, with -R opt\n" - " --sdub synonym for set-default-uniform-block\n" " --shift-image-binding [stage] num\n" " base binding number for images (uav)\n" " --shift-image-binding [stage] [num set]...\n" diff --git a/Test/baseResults/iomap.crossStage.2.vert.out b/Test/baseResults/iomap.crossStage.2.vert.out deleted file mode 100644 index 325c1b465a..0000000000 --- a/Test/baseResults/iomap.crossStage.2.vert.out +++ /dev/null @@ -1,787 +0,0 @@ -iomap.crossStage.2.vert -Shader version: 460 -0:? Sequence -0:32 Function Definition: main( ( global void) -0:32 Function Parameters: -0:34 Sequence -0:34 move second child to first child ( temp 4-component vector of float) -0:34 'vgo1' ( smooth out 4-component vector of float) -0:34 Constant: -0:34 0.000000 -0:34 0.000000 -0:34 0.000000 -0:34 0.000000 -0:35 move second child to first child ( temp 2-component vector of float) -0:35 'vgo2' ( smooth out 2-component vector of float) -0:35 Constant: -0:35 0.000000 -0:35 0.000000 -0:36 move second child to first child ( temp 4-component vector of float) -0:36 o3: direct index for structure ( out 4-component vector of float) -0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) -0:36 Constant: -0:36 0 (const uint) -0:36 Constant: -0:36 0.000000 -0:36 0.000000 -0:36 0.000000 -0:36 0.000000 -0:? Linker Objects -0:? 'vgo1' ( smooth out 4-component vector of float) -0:? 'vgo2' ( smooth out 2-component vector of float) -0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'um2' ( uniform 2X2 matrix of float) -0:? 4.000000 -0:? 0.000000 -0:? 0.000000 -0:? 4.000000 -0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) -0:? 'gl_VertexID' ( gl_VertexId int VertexId) -0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) - -iomap.crossStage.2.geom -Shader version: 460 -invocations = -1 -max_vertices = 3 -input primitive = points -output primitive = triangle_strip -0:? Sequence -0:29 Function Definition: main( ( global void) -0:29 Function Parameters: -0:31 Sequence -0:31 Sequence -0:31 Sequence -0:31 move second child to first child ( temp int) -0:31 'i' ( temp int) -0:31 Constant: -0:31 0 (const int) -0:31 Loop with condition tested first -0:31 Loop Condition -0:31 Compare Less Than ( temp bool) -0:31 'i' ( temp int) -0:31 Constant: -0:31 3 (const int) -0:31 Loop Body -0:32 Sequence -0:32 move second child to first child ( temp 4-component vector of float) -0:32 'gfo1' (layout( stream=0) out 4-component vector of float) -0:32 Constant: -0:32 0.000000 -0:32 0.000000 -0:32 0.000000 -0:32 0.000000 -0:33 move second child to first child ( temp 2-component vector of float) -0:33 'gfo2' (layout( stream=0) out 2-component vector of float) -0:33 Constant: -0:33 0.000000 -0:33 0.000000 -0:34 move second child to first child ( temp 4-component vector of float) -0:34 o3: direct index for structure (layout( stream=0) out 4-component vector of float) -0:34 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) -0:34 Constant: -0:34 0 (const int) -0:34 o3: direct index for structure ( in 4-component vector of float) -0:34 indirect index (layout( location=5) temp block{ in 4-component vector of float o3}) -0:34 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) -0:34 'i' ( temp int) -0:34 Constant: -0:34 0 (const int) -0:35 EmitVertex ( global void) -0:31 Loop Terminal Expression -0:31 Post-Increment ( temp int) -0:31 'i' ( temp int) -0:37 EndPrimitive ( global void) -0:? Linker Objects -0:? 'vgo1' ( in 1-element array of 4-component vector of float) -0:? 'vgo2' ( in 1-element array of 2-component vector of float) -0:? 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) -0:? 'gfo1' (layout( stream=0) out 4-component vector of float) -0:? 'gfo2' (layout( stream=0) out 2-component vector of float) -0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) - -iomap.crossStage.2.frag -Shader version: 460 -0:? Sequence -0:37 Function Definition: main( ( global void) -0:37 Function Parameters: -0:39 Sequence -0:39 Sequence -0:39 move second child to first child ( temp 4-component vector of float) -0:39 'color' ( temp 4-component vector of float) -0:39 component-wise multiply ( temp 4-component vector of float) -0:39 component-wise multiply ( temp 4-component vector of float) -0:39 component-wise multiply ( temp 4-component vector of float) -0:39 'gfo1' ( smooth in 4-component vector of float) -0:39 vector swizzle ( temp 4-component vector of float) -0:39 'u1' ( uniform 2-component vector of float) -0:39 Sequence -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 1 (const int) -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 1 (const int) -0:39 vector swizzle ( temp 4-component vector of float) -0:39 'u2' ( uniform 3-component vector of float) -0:39 Sequence -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 1 (const int) -0:39 Constant: -0:39 2 (const int) -0:39 Constant: -0:39 0 (const int) -0:39 vector swizzle ( temp 4-component vector of float) -0:39 'u3' ( uniform 4-component vector of float) -0:39 0.000000 -0:39 0.000000 -0:39 0.000000 -0:39 0.000000 -0:39 Sequence -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 1 (const int) -0:39 Constant: -0:39 2 (const int) -0:39 Constant: -0:39 3 (const int) -0:40 move second child to first child ( temp 4-component vector of float) -0:40 'outColor' ( out 4-component vector of float) -0:40 'color' ( temp 4-component vector of float) -0:? Linker Objects -0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) -0:? 'gfo1' ( smooth in 4-component vector of float) -0:? 'gfo2' ( smooth in 2-component vector of float) -0:? 'outColor' ( out 4-component vector of float) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'um2' ( uniform 2X2 matrix of float) -0:? 4.000000 -0:? 0.000000 -0:? 0.000000 -0:? 4.000000 -0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) -0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) - - -Linked vertex stage: - - -Linked geometry stage: - - -Linked fragment stage: - -WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. - blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" - -Shader version: 460 -0:? Sequence -0:32 Function Definition: main( ( global void) -0:32 Function Parameters: -0:34 Sequence -0:34 move second child to first child ( temp 4-component vector of float) -0:34 'vgo1' ( smooth out 4-component vector of float) -0:34 Constant: -0:34 0.000000 -0:34 0.000000 -0:34 0.000000 -0:34 0.000000 -0:35 move second child to first child ( temp 2-component vector of float) -0:35 'vgo2' ( smooth out 2-component vector of float) -0:35 Constant: -0:35 0.000000 -0:35 0.000000 -0:36 move second child to first child ( temp 4-component vector of float) -0:36 o3: direct index for structure ( out 4-component vector of float) -0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) -0:36 Constant: -0:36 0 (const uint) -0:36 Constant: -0:36 0.000000 -0:36 0.000000 -0:36 0.000000 -0:36 0.000000 -0:? Linker Objects -0:? 'vgo1' ( smooth out 4-component vector of float) -0:? 'vgo2' ( smooth out 2-component vector of float) -0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'um2' ( uniform 2X2 matrix of float) -0:? 4.000000 -0:? 0.000000 -0:? 0.000000 -0:? 4.000000 -0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) -0:? 'gl_VertexID' ( gl_VertexId int VertexId) -0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) -Shader version: 460 -invocations = 1 -max_vertices = 3 -input primitive = points -output primitive = triangle_strip -0:? Sequence -0:29 Function Definition: main( ( global void) -0:29 Function Parameters: -0:31 Sequence -0:31 Sequence -0:31 Sequence -0:31 move second child to first child ( temp int) -0:31 'i' ( temp int) -0:31 Constant: -0:31 0 (const int) -0:31 Loop with condition tested first -0:31 Loop Condition -0:31 Compare Less Than ( temp bool) -0:31 'i' ( temp int) -0:31 Constant: -0:31 3 (const int) -0:31 Loop Body -0:32 Sequence -0:32 move second child to first child ( temp 4-component vector of float) -0:32 'gfo1' (layout( stream=0) out 4-component vector of float) -0:32 Constant: -0:32 0.000000 -0:32 0.000000 -0:32 0.000000 -0:32 0.000000 -0:33 move second child to first child ( temp 2-component vector of float) -0:33 'gfo2' (layout( stream=0) out 2-component vector of float) -0:33 Constant: -0:33 0.000000 -0:33 0.000000 -0:34 move second child to first child ( temp 4-component vector of float) -0:34 o3: direct index for structure (layout( stream=0) out 4-component vector of float) -0:34 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) -0:34 Constant: -0:34 0 (const int) -0:34 o3: direct index for structure ( in 4-component vector of float) -0:34 indirect index (layout( location=5) temp block{ in 4-component vector of float o3}) -0:34 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) -0:34 'i' ( temp int) -0:34 Constant: -0:34 0 (const int) -0:35 EmitVertex ( global void) -0:31 Loop Terminal Expression -0:31 Post-Increment ( temp int) -0:31 'i' ( temp int) -0:37 EndPrimitive ( global void) -0:? Linker Objects -0:? 'vgo1' ( in 1-element array of 4-component vector of float) -0:? 'vgo2' ( in 1-element array of 2-component vector of float) -0:? 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) -0:? 'gfo1' (layout( stream=0) out 4-component vector of float) -0:? 'gfo2' (layout( stream=0) out 2-component vector of float) -0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) -Shader version: 460 -0:? Sequence -0:37 Function Definition: main( ( global void) -0:37 Function Parameters: -0:39 Sequence -0:39 Sequence -0:39 move second child to first child ( temp 4-component vector of float) -0:39 'color' ( temp 4-component vector of float) -0:39 component-wise multiply ( temp 4-component vector of float) -0:39 component-wise multiply ( temp 4-component vector of float) -0:39 component-wise multiply ( temp 4-component vector of float) -0:39 'gfo1' ( smooth in 4-component vector of float) -0:39 vector swizzle ( temp 4-component vector of float) -0:39 'u1' ( uniform 2-component vector of float) -0:39 Sequence -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 1 (const int) -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 1 (const int) -0:39 vector swizzle ( temp 4-component vector of float) -0:39 'u2' ( uniform 3-component vector of float) -0:39 Sequence -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 1 (const int) -0:39 Constant: -0:39 2 (const int) -0:39 Constant: -0:39 0 (const int) -0:39 vector swizzle ( temp 4-component vector of float) -0:39 'u3' ( uniform 4-component vector of float) -0:39 0.000000 -0:39 0.000000 -0:39 0.000000 -0:39 0.000000 -0:39 Sequence -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 1 (const int) -0:39 Constant: -0:39 2 (const int) -0:39 Constant: -0:39 3 (const int) -0:40 move second child to first child ( temp 4-component vector of float) -0:40 'outColor' ( out 4-component vector of float) -0:40 'color' ( temp 4-component vector of float) -0:? Linker Objects -0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) -0:? 'gfo1' ( smooth in 4-component vector of float) -0:? 'gfo2' ( smooth in 2-component vector of float) -0:? 'outColor' ( out 4-component vector of float) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'um2' ( uniform 2X2 matrix of float) -0:? 4.000000 -0:? 0.000000 -0:? 0.000000 -0:? 4.000000 -0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) -0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) - -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 56 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 9 14 18 54 55 - Source GLSL 460 - Name 4 "main" - Name 9 "vgo1" - Name 14 "vgo2" - Name 16 "outBlock" - MemberName 16(outBlock) 0 "o3" - Name 18 "" - Name 23 "u1" - Name 27 "u2" - Name 29 "u3" - Name 36 "um2" - Name 40 "glass" - Name 41 "crossStageBlock1" - MemberName 41(crossStageBlock1) 0 "a" - MemberName 41(crossStageBlock1) 1 "b" - Name 43 "" - Name 44 "vertOnlyBlock" - MemberName 44(vertOnlyBlock) 0 "vb1" - Name 46 "" - Name 47 "crossStageBlock2" - MemberName 47(crossStageBlock2) 0 "a" - MemberName 47(crossStageBlock2) 1 "b" - Name 52 "blockName1" - Name 54 "gl_VertexID" - Name 55 "gl_InstanceID" - Decorate 9(vgo1) Location 0 - Decorate 14(vgo2) Location 1 - Decorate 16(outBlock) Block - Decorate 18 Location 5 - Decorate 23(u1) Location 1 - Decorate 23(u1) DescriptorSet 0 - Decorate 27(u2) Location 2 - Decorate 27(u2) DescriptorSet 0 - Decorate 29(u3) Location 3 - Decorate 29(u3) DescriptorSet 0 - Decorate 36(um2) Location 4 - Decorate 36(um2) DescriptorSet 0 - Decorate 40(glass) Location 0 - Decorate 40(glass) DescriptorSet 0 - Decorate 40(glass) Binding 0 - MemberDecorate 41(crossStageBlock1) 0 Offset 0 - MemberDecorate 41(crossStageBlock1) 1 Offset 16 - Decorate 41(crossStageBlock1) Block - Decorate 43 DescriptorSet 0 - Decorate 43 Binding 0 - MemberDecorate 44(vertOnlyBlock) 0 Offset 0 - Decorate 44(vertOnlyBlock) BufferBlock - Decorate 46 DescriptorSet 0 - Decorate 46 Binding 0 - MemberDecorate 47(crossStageBlock2) 0 Offset 0 - MemberDecorate 47(crossStageBlock2) 1 Offset 16 - Decorate 47(crossStageBlock2) Block - Decorate 52(blockName1) DescriptorSet 0 - Decorate 52(blockName1) Binding 0 - Decorate 54(gl_VertexID) BuiltIn VertexId - Decorate 55(gl_InstanceID) BuiltIn InstanceId - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8: TypePointer Output 7(fvec4) - 9(vgo1): 8(ptr) Variable Output - 10: 6(float) Constant 0 - 11: 7(fvec4) ConstantComposite 10 10 10 10 - 12: TypeVector 6(float) 2 - 13: TypePointer Output 12(fvec2) - 14(vgo2): 13(ptr) Variable Output - 15: 12(fvec2) ConstantComposite 10 10 - 16(outBlock): TypeStruct 7(fvec4) - 17: TypePointer Output 16(outBlock) - 18: 17(ptr) Variable Output - 19: TypeInt 32 1 - 20: 19(int) Constant 0 - 22: TypePointer UniformConstant 12(fvec2) - 23(u1): 22(ptr) Variable UniformConstant - 24: TypeVector 6(float) 3 - 25: 24(fvec3) ConstantComposite 10 10 10 - 26: TypePointer UniformConstant 24(fvec3) - 27(u2): 26(ptr) Variable UniformConstant 25 - 28: TypePointer UniformConstant 7(fvec4) - 29(u3): 28(ptr) Variable UniformConstant 11 - 30: TypeMatrix 12(fvec2) 2 - 31: 6(float) Constant 1082130432 - 32: 12(fvec2) ConstantComposite 31 10 - 33: 12(fvec2) ConstantComposite 10 31 - 34: 30 ConstantComposite 32 33 - 35: TypePointer UniformConstant 30 - 36(um2): 35(ptr) Variable UniformConstant 34 - 37: TypeImage 6(float) 2D sampled format:Unknown - 38: TypeSampledImage 37 - 39: TypePointer UniformConstant 38 - 40(glass): 39(ptr) Variable UniformConstant -41(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) - 42: TypePointer Uniform 41(crossStageBlock1) - 43: 42(ptr) Variable Uniform -44(vertOnlyBlock): TypeStruct 12(fvec2) - 45: TypePointer Uniform 44(vertOnlyBlock) - 46: 45(ptr) Variable Uniform -47(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) - 48: TypeInt 32 0 - 49: 48(int) Constant 2 - 50: TypeArray 47(crossStageBlock2) 49 - 51: TypePointer Uniform 50 - 52(blockName1): 51(ptr) Variable Uniform - 53: TypePointer Input 19(int) - 54(gl_VertexID): 53(ptr) Variable Input -55(gl_InstanceID): 53(ptr) Variable Input - 4(main): 2 Function None 3 - 5: Label - Store 9(vgo1) 11 - Store 14(vgo2) 15 - 21: 8(ptr) AccessChain 18 20 - Store 21 11 - Return - FunctionEnd -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 65 - - Capability Geometry - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Geometry 4 "main" 22 27 31 37 48 51 - ExecutionMode 4 InputPoints - ExecutionMode 4 Invocations 1 - ExecutionMode 4 OutputTriangleStrip - ExecutionMode 4 OutputVertices 3 - Source GLSL 460 - Name 4 "main" - Name 8 "i" - Name 22 "gfo1" - Name 27 "gfo2" - Name 29 "outBlock" - MemberName 29(outBlock) 0 "o3" - Name 31 "gf_out" - Name 32 "outBlock" - MemberName 32(outBlock) 0 "o3" - Name 37 "inBlock" - Name 48 "vgo1" - Name 51 "vgo2" - Name 53 "u1" - Name 57 "u2" - Name 59 "u3" - Name 60 "crossStageBlock2" - MemberName 60(crossStageBlock2) 0 "a" - MemberName 60(crossStageBlock2) 1 "b" - Name 64 "blockName1" - Decorate 22(gfo1) Location 0 - Decorate 27(gfo2) Location 1 - Decorate 29(outBlock) Block - Decorate 31(gf_out) Location 5 - Decorate 32(outBlock) Block - Decorate 37(inBlock) Location 5 - Decorate 48(vgo1) Location 0 - Decorate 51(vgo2) Location 1 - Decorate 53(u1) Location 1 - Decorate 53(u1) DescriptorSet 0 - Decorate 57(u2) Location 2 - Decorate 57(u2) DescriptorSet 0 - Decorate 59(u3) Location 3 - Decorate 59(u3) DescriptorSet 0 - MemberDecorate 60(crossStageBlock2) 0 Offset 0 - MemberDecorate 60(crossStageBlock2) 1 Offset 16 - Decorate 60(crossStageBlock2) Block - Decorate 64(blockName1) DescriptorSet 0 - Decorate 64(blockName1) Binding 0 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeInt 32 1 - 7: TypePointer Function 6(int) - 9: 6(int) Constant 0 - 16: 6(int) Constant 3 - 17: TypeBool - 19: TypeFloat 32 - 20: TypeVector 19(float) 4 - 21: TypePointer Output 20(fvec4) - 22(gfo1): 21(ptr) Variable Output - 23: 19(float) Constant 0 - 24: 20(fvec4) ConstantComposite 23 23 23 23 - 25: TypeVector 19(float) 2 - 26: TypePointer Output 25(fvec2) - 27(gfo2): 26(ptr) Variable Output - 28: 25(fvec2) ConstantComposite 23 23 - 29(outBlock): TypeStruct 20(fvec4) - 30: TypePointer Output 29(outBlock) - 31(gf_out): 30(ptr) Variable Output - 32(outBlock): TypeStruct 20(fvec4) - 33: TypeInt 32 0 - 34: 33(int) Constant 1 - 35: TypeArray 32(outBlock) 34 - 36: TypePointer Input 35 - 37(inBlock): 36(ptr) Variable Input - 39: TypePointer Input 20(fvec4) - 44: 6(int) Constant 1 - 46: TypeArray 20(fvec4) 34 - 47: TypePointer Input 46 - 48(vgo1): 47(ptr) Variable Input - 49: TypeArray 25(fvec2) 34 - 50: TypePointer Input 49 - 51(vgo2): 50(ptr) Variable Input - 52: TypePointer UniformConstant 25(fvec2) - 53(u1): 52(ptr) Variable UniformConstant - 54: TypeVector 19(float) 3 - 55: 54(fvec3) ConstantComposite 23 23 23 - 56: TypePointer UniformConstant 54(fvec3) - 57(u2): 56(ptr) Variable UniformConstant 55 - 58: TypePointer UniformConstant 20(fvec4) - 59(u3): 58(ptr) Variable UniformConstant 24 -60(crossStageBlock2): TypeStruct 20(fvec4) 25(fvec2) - 61: 33(int) Constant 2 - 62: TypeArray 60(crossStageBlock2) 61 - 63: TypePointer Uniform 62 - 64(blockName1): 63(ptr) Variable Uniform - 4(main): 2 Function None 3 - 5: Label - 8(i): 7(ptr) Variable Function - Store 8(i) 9 - Branch 10 - 10: Label - LoopMerge 12 13 None - Branch 14 - 14: Label - 15: 6(int) Load 8(i) - 18: 17(bool) SLessThan 15 16 - BranchConditional 18 11 12 - 11: Label - Store 22(gfo1) 24 - Store 27(gfo2) 28 - 38: 6(int) Load 8(i) - 40: 39(ptr) AccessChain 37(inBlock) 38 9 - 41: 20(fvec4) Load 40 - 42: 21(ptr) AccessChain 31(gf_out) 9 - Store 42 41 - EmitVertex - Branch 13 - 13: Label - 43: 6(int) Load 8(i) - 45: 6(int) IAdd 43 44 - Store 8(i) 45 - Branch 10 - 12: Label - EndPrimitive - Return - FunctionEnd -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 62 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 11 32 36 38 - ExecutionMode 4 OriginLowerLeft - Source GLSL 460 - Name 4 "main" - Name 9 "color" - Name 11 "gfo1" - Name 15 "u1" - Name 21 "u2" - Name 28 "u3" - Name 32 "outColor" - Name 34 "outBlock" - MemberName 34(outBlock) 0 "o3" - Name 36 "" - Name 38 "gfo2" - Name 45 "um2" - Name 49 "glass" - Name 50 "crossStageBlock1" - MemberName 50(crossStageBlock1) 0 "a" - MemberName 50(crossStageBlock1) 1 "b" - Name 52 "" - Name 53 "fragOnlyBlock" - MemberName 53(fragOnlyBlock) 0 "fb1" - Name 55 "" - Name 56 "crossStageBlock2" - MemberName 56(crossStageBlock2) 0 "a" - MemberName 56(crossStageBlock2) 1 "b" - Name 61 "blockName2" - Decorate 11(gfo1) Location 0 - Decorate 15(u1) Location 1 - Decorate 15(u1) DescriptorSet 0 - Decorate 21(u2) Location 2 - Decorate 21(u2) DescriptorSet 0 - Decorate 28(u3) Location 3 - Decorate 28(u3) DescriptorSet 0 - Decorate 32(outColor) Location 0 - Decorate 34(outBlock) Block - Decorate 36 Location 5 - Decorate 38(gfo2) Location 1 - Decorate 45(um2) Location 4 - Decorate 45(um2) DescriptorSet 0 - Decorate 49(glass) Location 0 - Decorate 49(glass) DescriptorSet 0 - Decorate 49(glass) Binding 0 - MemberDecorate 50(crossStageBlock1) 0 Offset 0 - MemberDecorate 50(crossStageBlock1) 1 Offset 16 - Decorate 50(crossStageBlock1) Block - Decorate 52 DescriptorSet 0 - Decorate 52 Binding 0 - MemberDecorate 53(fragOnlyBlock) 0 Offset 0 - Decorate 53(fragOnlyBlock) BufferBlock - Decorate 55 DescriptorSet 0 - Decorate 55 Binding 0 - MemberDecorate 56(crossStageBlock2) 0 Offset 0 - MemberDecorate 56(crossStageBlock2) 1 Offset 16 - Decorate 56(crossStageBlock2) Block - Decorate 61(blockName2) DescriptorSet 0 - Decorate 61(blockName2) Binding 0 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) - 10: TypePointer Input 7(fvec4) - 11(gfo1): 10(ptr) Variable Input - 13: TypeVector 6(float) 2 - 14: TypePointer UniformConstant 13(fvec2) - 15(u1): 14(ptr) Variable UniformConstant - 19: TypeVector 6(float) 3 - 20: TypePointer UniformConstant 19(fvec3) - 21(u2): 20(ptr) Variable UniformConstant - 25: 6(float) Constant 0 - 26: 7(fvec4) ConstantComposite 25 25 25 25 - 27: TypePointer UniformConstant 7(fvec4) - 28(u3): 27(ptr) Variable UniformConstant 26 - 31: TypePointer Output 7(fvec4) - 32(outColor): 31(ptr) Variable Output - 34(outBlock): TypeStruct 7(fvec4) - 35: TypePointer Input 34(outBlock) - 36: 35(ptr) Variable Input - 37: TypePointer Input 13(fvec2) - 38(gfo2): 37(ptr) Variable Input - 39: TypeMatrix 13(fvec2) 2 - 40: 6(float) Constant 1082130432 - 41: 13(fvec2) ConstantComposite 40 25 - 42: 13(fvec2) ConstantComposite 25 40 - 43: 39 ConstantComposite 41 42 - 44: TypePointer UniformConstant 39 - 45(um2): 44(ptr) Variable UniformConstant 43 - 46: TypeImage 6(float) 2D sampled format:Unknown - 47: TypeSampledImage 46 - 48: TypePointer UniformConstant 47 - 49(glass): 48(ptr) Variable UniformConstant -50(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) - 51: TypePointer Uniform 50(crossStageBlock1) - 52: 51(ptr) Variable Uniform -53(fragOnlyBlock): TypeStruct 13(fvec2) - 54: TypePointer Uniform 53(fragOnlyBlock) - 55: 54(ptr) Variable Uniform -56(crossStageBlock2): TypeStruct 7(fvec4) 13(fvec2) - 57: TypeInt 32 0 - 58: 57(int) Constant 2 - 59: TypeArray 56(crossStageBlock2) 58 - 60: TypePointer Uniform 59 - 61(blockName2): 60(ptr) Variable Uniform - 4(main): 2 Function None 3 - 5: Label - 9(color): 8(ptr) Variable Function - 12: 7(fvec4) Load 11(gfo1) - 16: 13(fvec2) Load 15(u1) - 17: 7(fvec4) VectorShuffle 16 16 0 1 0 1 - 18: 7(fvec4) FMul 12 17 - 22: 19(fvec3) Load 21(u2) - 23: 7(fvec4) VectorShuffle 22 22 0 1 2 0 - 24: 7(fvec4) FMul 18 23 - 29: 7(fvec4) Load 28(u3) - 30: 7(fvec4) FMul 24 29 - Store 9(color) 30 - 33: 7(fvec4) Load 9(color) - Store 32(outColor) 33 - Return - FunctionEnd diff --git a/Test/baseResults/iomap.crossStage.vert.out b/Test/baseResults/iomap.crossStage.vert.out deleted file mode 100644 index 5338b80750..0000000000 --- a/Test/baseResults/iomap.crossStage.vert.out +++ /dev/null @@ -1,515 +0,0 @@ -iomap.crossStage.vert -Shader version: 460 -0:? Sequence -0:32 Function Definition: main( ( global void) -0:32 Function Parameters: -0:34 Sequence -0:34 move second child to first child ( temp 4-component vector of float) -0:34 'o1' ( smooth out 4-component vector of float) -0:34 Constant: -0:34 0.000000 -0:34 0.000000 -0:34 0.000000 -0:34 0.000000 -0:35 move second child to first child ( temp 2-component vector of float) -0:35 'o2' ( smooth out 2-component vector of float) -0:35 Constant: -0:35 0.000000 -0:35 0.000000 -0:36 move second child to first child ( temp 4-component vector of float) -0:36 o3: direct index for structure ( out 4-component vector of float) -0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) -0:36 Constant: -0:36 0 (const uint) -0:36 Constant: -0:36 0.000000 -0:36 0.000000 -0:36 0.000000 -0:36 0.000000 -0:? Linker Objects -0:? 'o1' ( smooth out 4-component vector of float) -0:? 'o2' ( smooth out 2-component vector of float) -0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'um2' ( uniform 2X2 matrix of float) -0:? 4.000000 -0:? 0.000000 -0:? 0.000000 -0:? 4.000000 -0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) -0:? 'gl_VertexID' ( gl_VertexId int VertexId) -0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) - -iomap.crossStage.frag -Shader version: 460 -0:? Sequence -0:36 Function Definition: main( ( global void) -0:36 Function Parameters: -0:38 Sequence -0:38 Sequence -0:38 move second child to first child ( temp 4-component vector of float) -0:38 'color' ( temp 4-component vector of float) -0:38 component-wise multiply ( temp 4-component vector of float) -0:38 component-wise multiply ( temp 4-component vector of float) -0:38 component-wise multiply ( temp 4-component vector of float) -0:38 'o1' ( smooth in 4-component vector of float) -0:38 vector swizzle ( temp 4-component vector of float) -0:38 'u1' ( uniform 2-component vector of float) -0:38 Sequence -0:38 Constant: -0:38 0 (const int) -0:38 Constant: -0:38 1 (const int) -0:38 Constant: -0:38 0 (const int) -0:38 Constant: -0:38 1 (const int) -0:38 vector swizzle ( temp 4-component vector of float) -0:38 'u2' ( uniform 3-component vector of float) -0:38 Sequence -0:38 Constant: -0:38 0 (const int) -0:38 Constant: -0:38 1 (const int) -0:38 Constant: -0:38 2 (const int) -0:38 Constant: -0:38 0 (const int) -0:38 vector swizzle ( temp 4-component vector of float) -0:38 'u3' ( uniform 4-component vector of float) -0:38 0.000000 -0:38 0.000000 -0:38 0.000000 -0:38 0.000000 -0:38 Sequence -0:38 Constant: -0:38 0 (const int) -0:38 Constant: -0:38 1 (const int) -0:38 Constant: -0:38 2 (const int) -0:38 Constant: -0:38 3 (const int) -0:39 move second child to first child ( temp 4-component vector of float) -0:39 'outColor' ( out 4-component vector of float) -0:39 'color' ( temp 4-component vector of float) -0:? Linker Objects -0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) -0:? 'o2' ( smooth in 2-component vector of float) -0:? 'o1' ( smooth in 4-component vector of float) -0:? 'outColor' ( out 4-component vector of float) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'um2' ( uniform 2X2 matrix of float) -0:? 4.000000 -0:? 0.000000 -0:? 0.000000 -0:? 4.000000 -0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) -0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) - - -Linked vertex stage: - - -Linked fragment stage: - -WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. - blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" - -Shader version: 460 -0:? Sequence -0:32 Function Definition: main( ( global void) -0:32 Function Parameters: -0:34 Sequence -0:34 move second child to first child ( temp 4-component vector of float) -0:34 'o1' ( smooth out 4-component vector of float) -0:34 Constant: -0:34 0.000000 -0:34 0.000000 -0:34 0.000000 -0:34 0.000000 -0:35 move second child to first child ( temp 2-component vector of float) -0:35 'o2' ( smooth out 2-component vector of float) -0:35 Constant: -0:35 0.000000 -0:35 0.000000 -0:36 move second child to first child ( temp 4-component vector of float) -0:36 o3: direct index for structure ( out 4-component vector of float) -0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) -0:36 Constant: -0:36 0 (const uint) -0:36 Constant: -0:36 0.000000 -0:36 0.000000 -0:36 0.000000 -0:36 0.000000 -0:? Linker Objects -0:? 'o1' ( smooth out 4-component vector of float) -0:? 'o2' ( smooth out 2-component vector of float) -0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'um2' ( uniform 2X2 matrix of float) -0:? 4.000000 -0:? 0.000000 -0:? 0.000000 -0:? 4.000000 -0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) -0:? 'gl_VertexID' ( gl_VertexId int VertexId) -0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) -Shader version: 460 -0:? Sequence -0:36 Function Definition: main( ( global void) -0:36 Function Parameters: -0:38 Sequence -0:38 Sequence -0:38 move second child to first child ( temp 4-component vector of float) -0:38 'color' ( temp 4-component vector of float) -0:38 component-wise multiply ( temp 4-component vector of float) -0:38 component-wise multiply ( temp 4-component vector of float) -0:38 component-wise multiply ( temp 4-component vector of float) -0:38 'o1' ( smooth in 4-component vector of float) -0:38 vector swizzle ( temp 4-component vector of float) -0:38 'u1' ( uniform 2-component vector of float) -0:38 Sequence -0:38 Constant: -0:38 0 (const int) -0:38 Constant: -0:38 1 (const int) -0:38 Constant: -0:38 0 (const int) -0:38 Constant: -0:38 1 (const int) -0:38 vector swizzle ( temp 4-component vector of float) -0:38 'u2' ( uniform 3-component vector of float) -0:38 Sequence -0:38 Constant: -0:38 0 (const int) -0:38 Constant: -0:38 1 (const int) -0:38 Constant: -0:38 2 (const int) -0:38 Constant: -0:38 0 (const int) -0:38 vector swizzle ( temp 4-component vector of float) -0:38 'u3' ( uniform 4-component vector of float) -0:38 0.000000 -0:38 0.000000 -0:38 0.000000 -0:38 0.000000 -0:38 Sequence -0:38 Constant: -0:38 0 (const int) -0:38 Constant: -0:38 1 (const int) -0:38 Constant: -0:38 2 (const int) -0:38 Constant: -0:38 3 (const int) -0:39 move second child to first child ( temp 4-component vector of float) -0:39 'outColor' ( out 4-component vector of float) -0:39 'color' ( temp 4-component vector of float) -0:? Linker Objects -0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) -0:? 'o2' ( smooth in 2-component vector of float) -0:? 'o1' ( smooth in 4-component vector of float) -0:? 'outColor' ( out 4-component vector of float) -0:? 'u1' ( uniform 2-component vector of float) -0:? 'u2' ( uniform 3-component vector of float) -0:? 'u3' ( uniform 4-component vector of float) -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 'um2' ( uniform 2X2 matrix of float) -0:? 4.000000 -0:? 0.000000 -0:? 0.000000 -0:? 4.000000 -0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) -0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) - -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 56 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 9 14 18 54 55 - Source GLSL 460 - Name 4 "main" - Name 9 "o1" - Name 14 "o2" - Name 16 "outBlock" - MemberName 16(outBlock) 0 "o3" - Name 18 "" - Name 23 "u1" - Name 27 "u2" - Name 29 "u3" - Name 36 "um2" - Name 40 "glass" - Name 41 "crossStageBlock1" - MemberName 41(crossStageBlock1) 0 "a" - MemberName 41(crossStageBlock1) 1 "b" - Name 43 "" - Name 44 "vertOnlyBlock" - MemberName 44(vertOnlyBlock) 0 "vb1" - Name 46 "" - Name 47 "crossStageBlock2" - MemberName 47(crossStageBlock2) 0 "a" - MemberName 47(crossStageBlock2) 1 "b" - Name 52 "blockName1" - Name 54 "gl_VertexID" - Name 55 "gl_InstanceID" - Decorate 9(o1) Location 0 - Decorate 14(o2) Location 1 - Decorate 16(outBlock) Block - Decorate 18 Location 5 - Decorate 23(u1) Location 1 - Decorate 23(u1) DescriptorSet 0 - Decorate 27(u2) Location 2 - Decorate 27(u2) DescriptorSet 0 - Decorate 29(u3) Location 3 - Decorate 29(u3) DescriptorSet 0 - Decorate 36(um2) Location 4 - Decorate 36(um2) DescriptorSet 0 - Decorate 40(glass) Location 0 - Decorate 40(glass) DescriptorSet 0 - Decorate 40(glass) Binding 0 - MemberDecorate 41(crossStageBlock1) 0 Offset 0 - MemberDecorate 41(crossStageBlock1) 1 Offset 16 - Decorate 41(crossStageBlock1) Block - Decorate 43 DescriptorSet 0 - Decorate 43 Binding 0 - MemberDecorate 44(vertOnlyBlock) 0 Offset 0 - Decorate 44(vertOnlyBlock) BufferBlock - Decorate 46 DescriptorSet 0 - Decorate 46 Binding 0 - MemberDecorate 47(crossStageBlock2) 0 Offset 0 - MemberDecorate 47(crossStageBlock2) 1 Offset 16 - Decorate 47(crossStageBlock2) Block - Decorate 52(blockName1) DescriptorSet 0 - Decorate 52(blockName1) Binding 0 - Decorate 54(gl_VertexID) BuiltIn VertexId - Decorate 55(gl_InstanceID) BuiltIn InstanceId - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8: TypePointer Output 7(fvec4) - 9(o1): 8(ptr) Variable Output - 10: 6(float) Constant 0 - 11: 7(fvec4) ConstantComposite 10 10 10 10 - 12: TypeVector 6(float) 2 - 13: TypePointer Output 12(fvec2) - 14(o2): 13(ptr) Variable Output - 15: 12(fvec2) ConstantComposite 10 10 - 16(outBlock): TypeStruct 7(fvec4) - 17: TypePointer Output 16(outBlock) - 18: 17(ptr) Variable Output - 19: TypeInt 32 1 - 20: 19(int) Constant 0 - 22: TypePointer UniformConstant 12(fvec2) - 23(u1): 22(ptr) Variable UniformConstant - 24: TypeVector 6(float) 3 - 25: 24(fvec3) ConstantComposite 10 10 10 - 26: TypePointer UniformConstant 24(fvec3) - 27(u2): 26(ptr) Variable UniformConstant 25 - 28: TypePointer UniformConstant 7(fvec4) - 29(u3): 28(ptr) Variable UniformConstant 11 - 30: TypeMatrix 12(fvec2) 2 - 31: 6(float) Constant 1082130432 - 32: 12(fvec2) ConstantComposite 31 10 - 33: 12(fvec2) ConstantComposite 10 31 - 34: 30 ConstantComposite 32 33 - 35: TypePointer UniformConstant 30 - 36(um2): 35(ptr) Variable UniformConstant 34 - 37: TypeImage 6(float) 2D sampled format:Unknown - 38: TypeSampledImage 37 - 39: TypePointer UniformConstant 38 - 40(glass): 39(ptr) Variable UniformConstant -41(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) - 42: TypePointer Uniform 41(crossStageBlock1) - 43: 42(ptr) Variable Uniform -44(vertOnlyBlock): TypeStruct 12(fvec2) - 45: TypePointer Uniform 44(vertOnlyBlock) - 46: 45(ptr) Variable Uniform -47(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) - 48: TypeInt 32 0 - 49: 48(int) Constant 2 - 50: TypeArray 47(crossStageBlock2) 49 - 51: TypePointer Uniform 50 - 52(blockName1): 51(ptr) Variable Uniform - 53: TypePointer Input 19(int) - 54(gl_VertexID): 53(ptr) Variable Input -55(gl_InstanceID): 53(ptr) Variable Input - 4(main): 2 Function None 3 - 5: Label - Store 9(o1) 11 - Store 14(o2) 15 - 21: 8(ptr) AccessChain 18 20 - Store 21 11 - Return - FunctionEnd -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 62 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 11 32 36 38 - ExecutionMode 4 OriginLowerLeft - Source GLSL 460 - Name 4 "main" - Name 9 "color" - Name 11 "o1" - Name 15 "u1" - Name 21 "u2" - Name 28 "u3" - Name 32 "outColor" - Name 34 "outBlock" - MemberName 34(outBlock) 0 "o3" - Name 36 "" - Name 38 "o2" - Name 45 "um2" - Name 49 "glass" - Name 50 "crossStageBlock1" - MemberName 50(crossStageBlock1) 0 "a" - MemberName 50(crossStageBlock1) 1 "b" - Name 52 "" - Name 53 "fragOnlyBlock" - MemberName 53(fragOnlyBlock) 0 "fb1" - Name 55 "" - Name 56 "crossStageBlock2" - MemberName 56(crossStageBlock2) 0 "a" - MemberName 56(crossStageBlock2) 1 "b" - Name 61 "blockName2" - Decorate 11(o1) Location 0 - Decorate 15(u1) Location 1 - Decorate 15(u1) DescriptorSet 0 - Decorate 21(u2) Location 2 - Decorate 21(u2) DescriptorSet 0 - Decorate 28(u3) Location 3 - Decorate 28(u3) DescriptorSet 0 - Decorate 32(outColor) Location 0 - Decorate 34(outBlock) Block - Decorate 36 Location 5 - Decorate 38(o2) Location 1 - Decorate 45(um2) Location 4 - Decorate 45(um2) DescriptorSet 0 - Decorate 49(glass) Location 0 - Decorate 49(glass) DescriptorSet 0 - Decorate 49(glass) Binding 0 - MemberDecorate 50(crossStageBlock1) 0 Offset 0 - MemberDecorate 50(crossStageBlock1) 1 Offset 16 - Decorate 50(crossStageBlock1) Block - Decorate 52 DescriptorSet 0 - Decorate 52 Binding 0 - MemberDecorate 53(fragOnlyBlock) 0 Offset 0 - Decorate 53(fragOnlyBlock) BufferBlock - Decorate 55 DescriptorSet 0 - Decorate 55 Binding 0 - MemberDecorate 56(crossStageBlock2) 0 Offset 0 - MemberDecorate 56(crossStageBlock2) 1 Offset 16 - Decorate 56(crossStageBlock2) Block - Decorate 61(blockName2) DescriptorSet 0 - Decorate 61(blockName2) Binding 0 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) - 10: TypePointer Input 7(fvec4) - 11(o1): 10(ptr) Variable Input - 13: TypeVector 6(float) 2 - 14: TypePointer UniformConstant 13(fvec2) - 15(u1): 14(ptr) Variable UniformConstant - 19: TypeVector 6(float) 3 - 20: TypePointer UniformConstant 19(fvec3) - 21(u2): 20(ptr) Variable UniformConstant - 25: 6(float) Constant 0 - 26: 7(fvec4) ConstantComposite 25 25 25 25 - 27: TypePointer UniformConstant 7(fvec4) - 28(u3): 27(ptr) Variable UniformConstant 26 - 31: TypePointer Output 7(fvec4) - 32(outColor): 31(ptr) Variable Output - 34(outBlock): TypeStruct 7(fvec4) - 35: TypePointer Input 34(outBlock) - 36: 35(ptr) Variable Input - 37: TypePointer Input 13(fvec2) - 38(o2): 37(ptr) Variable Input - 39: TypeMatrix 13(fvec2) 2 - 40: 6(float) Constant 1082130432 - 41: 13(fvec2) ConstantComposite 40 25 - 42: 13(fvec2) ConstantComposite 25 40 - 43: 39 ConstantComposite 41 42 - 44: TypePointer UniformConstant 39 - 45(um2): 44(ptr) Variable UniformConstant 43 - 46: TypeImage 6(float) 2D sampled format:Unknown - 47: TypeSampledImage 46 - 48: TypePointer UniformConstant 47 - 49(glass): 48(ptr) Variable UniformConstant -50(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) - 51: TypePointer Uniform 50(crossStageBlock1) - 52: 51(ptr) Variable Uniform -53(fragOnlyBlock): TypeStruct 13(fvec2) - 54: TypePointer Uniform 53(fragOnlyBlock) - 55: 54(ptr) Variable Uniform -56(crossStageBlock2): TypeStruct 7(fvec4) 13(fvec2) - 57: TypeInt 32 0 - 58: 57(int) Constant 2 - 59: TypeArray 56(crossStageBlock2) 58 - 60: TypePointer Uniform 59 - 61(blockName2): 60(ptr) Variable Uniform - 4(main): 2 Function None 3 - 5: Label - 9(color): 8(ptr) Variable Function - 12: 7(fvec4) Load 11(o1) - 16: 13(fvec2) Load 15(u1) - 17: 7(fvec4) VectorShuffle 16 16 0 1 0 1 - 18: 7(fvec4) FMul 12 17 - 22: 19(fvec3) Load 21(u2) - 23: 7(fvec4) VectorShuffle 22 22 0 1 2 0 - 24: 7(fvec4) FMul 18 23 - 29: 7(fvec4) Load 28(u3) - 30: 7(fvec4) FMul 24 29 - Store 9(color) 30 - 33: 7(fvec4) Load 9(color) - Store 32(outColor) 33 - Return - FunctionEnd diff --git a/Test/baseResults/iomap.crossStage.vk.vert.out b/Test/baseResults/iomap.crossStage.vk.vert.out deleted file mode 100644 index e137bdfc40..0000000000 --- a/Test/baseResults/iomap.crossStage.vk.vert.out +++ /dev/null @@ -1,720 +0,0 @@ -iomap.crossStage.vk.vert -Shader version: 460 -0:? Sequence -0:26 Function Definition: main( ( global void) -0:26 Function Parameters: -0:28 Sequence -0:28 move second child to first child ( temp highp 4-component vector of float) -0:28 'vgo1' ( smooth out highp 4-component vector of float) -0:28 Constant: -0:28 0.000000 -0:28 0.000000 -0:28 0.000000 -0:28 0.000000 -0:29 move second child to first child ( temp highp 2-component vector of float) -0:29 'vgo2' ( smooth out highp 2-component vector of float) -0:29 Constant: -0:29 0.000000 -0:29 0.000000 -0:30 move second child to first child ( temp highp 4-component vector of float) -0:30 o3: direct index for structure ( out highp 4-component vector of float) -0:30 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) -0:30 Constant: -0:30 0 (const uint) -0:30 Constant: -0:30 0.000000 -0:30 0.000000 -0:30 0.000000 -0:30 0.000000 -0:? Linker Objects -0:? 'vgo1' ( smooth out highp 4-component vector of float) -0:? 'vgo2' ( smooth out highp 2-component vector of float) -0:? 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) -0:? 'glass' (layout( binding=0) uniform highp sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float vb1}) -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) - -iomap.crossStage.vk.geom -Shader version: 460 -invocations = -1 -max_vertices = 3 -input primitive = points -output primitive = triangle_strip -0:? Sequence -0:25 Function Definition: main( ( global void) -0:25 Function Parameters: -0:27 Sequence -0:27 Sequence -0:27 Sequence -0:27 move second child to first child ( temp highp int) -0:27 'i' ( temp highp int) -0:27 Constant: -0:27 0 (const int) -0:27 Loop with condition tested first -0:27 Loop Condition -0:27 Compare Less Than ( temp bool) -0:27 'i' ( temp highp int) -0:27 Constant: -0:27 3 (const int) -0:27 Loop Body -0:28 Sequence -0:28 move second child to first child ( temp highp 4-component vector of float) -0:28 'gfo1' (layout( stream=0) out highp 4-component vector of float) -0:28 Constant: -0:28 0.000000 -0:28 0.000000 -0:28 0.000000 -0:28 0.000000 -0:29 move second child to first child ( temp highp 2-component vector of float) -0:29 'gfo2' (layout( stream=0) out highp 2-component vector of float) -0:29 Constant: -0:29 0.000000 -0:29 0.000000 -0:30 move second child to first child ( temp highp 4-component vector of float) -0:30 o3: direct index for structure (layout( stream=0) out highp 4-component vector of float) -0:30 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) -0:30 Constant: -0:30 0 (const int) -0:30 o3: direct index for structure ( in highp 4-component vector of float) -0:30 indirect index (layout( location=5) temp block{ in highp 4-component vector of float o3}) -0:30 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) -0:30 'i' ( temp highp int) -0:30 Constant: -0:30 0 (const int) -0:31 EmitVertex ( global void) -0:27 Loop Terminal Expression -0:27 Post-Increment ( temp highp int) -0:27 'i' ( temp highp int) -0:33 EndPrimitive ( global void) -0:? Linker Objects -0:? 'vgo1' ( in 1-element array of highp 4-component vector of float) -0:? 'vgo2' ( in 1-element array of highp 2-component vector of float) -0:? 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) -0:? 'gfo1' (layout( stream=0) out highp 4-component vector of float) -0:? 'gfo2' (layout( stream=0) out highp 2-component vector of float) -0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) - -iomap.crossStage.vk.frag -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:30 Function Definition: Bar( ( global highp 2-component vector of float) -0:30 Function Parameters: -0:31 Sequence -0:31 Branch: Return with expression -0:32 add ( temp highp 2-component vector of float) -0:31 add ( temp highp 2-component vector of float) -0:31 fb1: direct index for structure (layout( column_major std430) readonly buffer highp 2-component vector of float) -0:31 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) -0:31 Constant: -0:31 0 (const uint) -0:32 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) -0:32 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:32 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:32 Constant: -0:32 0 (const int) -0:32 Constant: -0:32 1 (const int) -0:33 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) -0:33 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:33 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:33 Constant: -0:33 1 (const int) -0:33 Constant: -0:33 1 (const int) -0:36 Function Definition: Foo( ( global highp 4-component vector of float) -0:36 Function Parameters: -0:37 Sequence -0:37 Branch: Return with expression -0:40 add ( temp highp 4-component vector of float) -0:39 add ( temp highp 4-component vector of float) -0:38 add ( temp highp 4-component vector of float) -0:37 add ( temp highp 4-component vector of float) -0:37 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:37 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) -0:37 Constant: -0:37 0 (const uint) -0:38 b: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:38 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) -0:38 Constant: -0:38 1 (const uint) -0:39 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:39 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:39 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 0 (const int) -0:40 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:40 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:40 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:40 Constant: -0:40 1 (const int) -0:40 Constant: -0:40 0 (const int) -0:41 Construct vec4 ( temp highp 4-component vector of float) -0:41 Function Call: Bar( ( global highp 2-component vector of float) -0:41 Constant: -0:41 0.000000 -0:41 Constant: -0:41 0.000000 -0:44 Function Definition: main( ( global void) -0:44 Function Parameters: -0:46 Sequence -0:46 Sequence -0:46 move second child to first child ( temp highp 4-component vector of float) -0:46 'color' ( temp highp 4-component vector of float) -0:46 'gfo1' ( smooth in highp 4-component vector of float) -0:47 move second child to first child ( temp highp 4-component vector of float) -0:47 'color' ( temp highp 4-component vector of float) -0:47 add ( temp highp 4-component vector of float) -0:47 'color' ( temp highp 4-component vector of float) -0:47 Function Call: Foo( ( global highp 4-component vector of float) -0:48 move second child to first child ( temp highp 4-component vector of float) -0:48 'outColor' ( out highp 4-component vector of float) -0:48 'color' ( temp highp 4-component vector of float) -0:? Linker Objects -0:? 'anon@0' (layout( location=5) in block{ in highp 4-component vector of float o3}) -0:? 'gfo1' ( smooth in highp 4-component vector of float) -0:? 'gfo2' ( smooth in highp 2-component vector of float) -0:? 'outColor' ( out highp 4-component vector of float) -0:? 'glass' (layout( binding=0) uniform highp sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) -0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) - - -Linked vertex stage: - - -Linked geometry stage: - - -Linked fragment stage: - -WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. - blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" - -Shader version: 460 -0:? Sequence -0:26 Function Definition: main( ( global void) -0:26 Function Parameters: -0:28 Sequence -0:28 move second child to first child ( temp highp 4-component vector of float) -0:28 'vgo1' ( smooth out highp 4-component vector of float) -0:28 Constant: -0:28 0.000000 -0:28 0.000000 -0:28 0.000000 -0:28 0.000000 -0:29 move second child to first child ( temp highp 2-component vector of float) -0:29 'vgo2' ( smooth out highp 2-component vector of float) -0:29 Constant: -0:29 0.000000 -0:29 0.000000 -0:30 move second child to first child ( temp highp 4-component vector of float) -0:30 o3: direct index for structure ( out highp 4-component vector of float) -0:30 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) -0:30 Constant: -0:30 0 (const uint) -0:30 Constant: -0:30 0.000000 -0:30 0.000000 -0:30 0.000000 -0:30 0.000000 -0:? Linker Objects -0:? 'vgo1' ( smooth out highp 4-component vector of float) -0:? 'vgo2' ( smooth out highp 2-component vector of float) -0:? 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) -0:? 'glass' (layout( binding=0) uniform highp sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float vb1}) -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -Shader version: 460 -invocations = 1 -max_vertices = 3 -input primitive = points -output primitive = triangle_strip -0:? Sequence -0:25 Function Definition: main( ( global void) -0:25 Function Parameters: -0:27 Sequence -0:27 Sequence -0:27 Sequence -0:27 move second child to first child ( temp highp int) -0:27 'i' ( temp highp int) -0:27 Constant: -0:27 0 (const int) -0:27 Loop with condition tested first -0:27 Loop Condition -0:27 Compare Less Than ( temp bool) -0:27 'i' ( temp highp int) -0:27 Constant: -0:27 3 (const int) -0:27 Loop Body -0:28 Sequence -0:28 move second child to first child ( temp highp 4-component vector of float) -0:28 'gfo1' (layout( stream=0) out highp 4-component vector of float) -0:28 Constant: -0:28 0.000000 -0:28 0.000000 -0:28 0.000000 -0:28 0.000000 -0:29 move second child to first child ( temp highp 2-component vector of float) -0:29 'gfo2' (layout( stream=0) out highp 2-component vector of float) -0:29 Constant: -0:29 0.000000 -0:29 0.000000 -0:30 move second child to first child ( temp highp 4-component vector of float) -0:30 o3: direct index for structure (layout( stream=0) out highp 4-component vector of float) -0:30 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) -0:30 Constant: -0:30 0 (const int) -0:30 o3: direct index for structure ( in highp 4-component vector of float) -0:30 indirect index (layout( location=5) temp block{ in highp 4-component vector of float o3}) -0:30 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) -0:30 'i' ( temp highp int) -0:30 Constant: -0:30 0 (const int) -0:31 EmitVertex ( global void) -0:27 Loop Terminal Expression -0:27 Post-Increment ( temp highp int) -0:27 'i' ( temp highp int) -0:33 EndPrimitive ( global void) -0:? Linker Objects -0:? 'vgo1' ( in 1-element array of highp 4-component vector of float) -0:? 'vgo2' ( in 1-element array of highp 2-component vector of float) -0:? 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) -0:? 'gfo1' (layout( stream=0) out highp 4-component vector of float) -0:? 'gfo2' (layout( stream=0) out highp 2-component vector of float) -0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) -0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:30 Function Definition: Bar( ( global highp 2-component vector of float) -0:30 Function Parameters: -0:31 Sequence -0:31 Branch: Return with expression -0:32 add ( temp highp 2-component vector of float) -0:31 add ( temp highp 2-component vector of float) -0:31 fb1: direct index for structure (layout( column_major std430) readonly buffer highp 2-component vector of float) -0:31 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) -0:31 Constant: -0:31 0 (const uint) -0:32 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) -0:32 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:32 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:32 Constant: -0:32 0 (const int) -0:32 Constant: -0:32 1 (const int) -0:33 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) -0:33 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:33 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:33 Constant: -0:33 1 (const int) -0:33 Constant: -0:33 1 (const int) -0:36 Function Definition: Foo( ( global highp 4-component vector of float) -0:36 Function Parameters: -0:37 Sequence -0:37 Branch: Return with expression -0:40 add ( temp highp 4-component vector of float) -0:39 add ( temp highp 4-component vector of float) -0:38 add ( temp highp 4-component vector of float) -0:37 add ( temp highp 4-component vector of float) -0:37 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:37 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) -0:37 Constant: -0:37 0 (const uint) -0:38 b: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:38 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) -0:38 Constant: -0:38 1 (const uint) -0:39 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:39 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:39 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:39 Constant: -0:39 0 (const int) -0:39 Constant: -0:39 0 (const int) -0:40 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:40 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:40 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) -0:40 Constant: -0:40 1 (const int) -0:40 Constant: -0:40 0 (const int) -0:41 Construct vec4 ( temp highp 4-component vector of float) -0:41 Function Call: Bar( ( global highp 2-component vector of float) -0:41 Constant: -0:41 0.000000 -0:41 Constant: -0:41 0.000000 -0:44 Function Definition: main( ( global void) -0:44 Function Parameters: -0:46 Sequence -0:46 Sequence -0:46 move second child to first child ( temp highp 4-component vector of float) -0:46 'color' ( temp highp 4-component vector of float) -0:46 'gfo1' ( smooth in highp 4-component vector of float) -0:47 move second child to first child ( temp highp 4-component vector of float) -0:47 'color' ( temp highp 4-component vector of float) -0:47 add ( temp highp 4-component vector of float) -0:47 'color' ( temp highp 4-component vector of float) -0:47 Function Call: Foo( ( global highp 4-component vector of float) -0:48 move second child to first child ( temp highp 4-component vector of float) -0:48 'outColor' ( out highp 4-component vector of float) -0:48 'color' ( temp highp 4-component vector of float) -0:? Linker Objects -0:? 'anon@0' (layout( location=5) in block{ in highp 4-component vector of float o3}) -0:? 'gfo1' ( smooth in highp 4-component vector of float) -0:? 'gfo2' ( smooth in highp 2-component vector of float) -0:? 'outColor' ( out highp 4-component vector of float) -0:? 'glass' (layout( binding=0) uniform highp sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) -0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) -0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) - -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 38 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 9 14 18 - Source GLSL 460 - Name 4 "main" - Name 9 "vgo1" - Name 14 "vgo2" - Name 16 "outBlock" - MemberName 16(outBlock) 0 "o3" - Name 18 "" - Name 25 "glass" - Name 26 "crossStageBlock1" - MemberName 26(crossStageBlock1) 0 "a" - MemberName 26(crossStageBlock1) 1 "b" - Name 28 "" - Name 29 "vertOnlyBlock" - MemberName 29(vertOnlyBlock) 0 "vb1" - Name 31 "" - Name 32 "crossStageBlock2" - MemberName 32(crossStageBlock2) 0 "a" - MemberName 32(crossStageBlock2) 1 "b" - Name 37 "blockName1" - Decorate 9(vgo1) Location 0 - Decorate 14(vgo2) Location 1 - Decorate 16(outBlock) Block - Decorate 18 Location 5 - Decorate 25(glass) DescriptorSet 0 - Decorate 25(glass) Binding 0 - MemberDecorate 26(crossStageBlock1) 0 Offset 0 - MemberDecorate 26(crossStageBlock1) 1 Offset 16 - Decorate 26(crossStageBlock1) Block - Decorate 28 DescriptorSet 0 - Decorate 28 Binding 1 - MemberDecorate 29(vertOnlyBlock) 0 NonWritable - MemberDecorate 29(vertOnlyBlock) 0 Offset 0 - Decorate 29(vertOnlyBlock) BufferBlock - Decorate 31 DescriptorSet 0 - Decorate 31 Binding 0 - MemberDecorate 32(crossStageBlock2) 0 Offset 0 - MemberDecorate 32(crossStageBlock2) 1 Offset 16 - Decorate 32(crossStageBlock2) Block - Decorate 37(blockName1) DescriptorSet 0 - Decorate 37(blockName1) Binding 3 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8: TypePointer Output 7(fvec4) - 9(vgo1): 8(ptr) Variable Output - 10: 6(float) Constant 0 - 11: 7(fvec4) ConstantComposite 10 10 10 10 - 12: TypeVector 6(float) 2 - 13: TypePointer Output 12(fvec2) - 14(vgo2): 13(ptr) Variable Output - 15: 12(fvec2) ConstantComposite 10 10 - 16(outBlock): TypeStruct 7(fvec4) - 17: TypePointer Output 16(outBlock) - 18: 17(ptr) Variable Output - 19: TypeInt 32 1 - 20: 19(int) Constant 0 - 22: TypeImage 6(float) 2D sampled format:Unknown - 23: TypeSampledImage 22 - 24: TypePointer UniformConstant 23 - 25(glass): 24(ptr) Variable UniformConstant -26(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) - 27: TypePointer Uniform 26(crossStageBlock1) - 28: 27(ptr) Variable Uniform -29(vertOnlyBlock): TypeStruct 12(fvec2) - 30: TypePointer Uniform 29(vertOnlyBlock) - 31: 30(ptr) Variable Uniform -32(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) - 33: TypeInt 32 0 - 34: 33(int) Constant 2 - 35: TypeArray 32(crossStageBlock2) 34 - 36: TypePointer Uniform 35 - 37(blockName1): 36(ptr) Variable Uniform - 4(main): 2 Function None 3 - 5: Label - Store 9(vgo1) 11 - Store 14(vgo2) 15 - 21: 8(ptr) AccessChain 18 20 - Store 21 11 - Return - FunctionEnd -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 57 - - Capability Geometry - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Geometry 4 "main" 22 27 31 37 48 51 - ExecutionMode 4 InputPoints - ExecutionMode 4 Invocations 1 - ExecutionMode 4 OutputTriangleStrip - ExecutionMode 4 OutputVertices 3 - Source GLSL 460 - Name 4 "main" - Name 8 "i" - Name 22 "gfo1" - Name 27 "gfo2" - Name 29 "outBlock" - MemberName 29(outBlock) 0 "o3" - Name 31 "gf_out" - Name 32 "outBlock" - MemberName 32(outBlock) 0 "o3" - Name 37 "inBlock" - Name 48 "vgo1" - Name 51 "vgo2" - Name 52 "crossStageBlock2" - MemberName 52(crossStageBlock2) 0 "a" - MemberName 52(crossStageBlock2) 1 "b" - Name 56 "blockName1" - Decorate 22(gfo1) Location 0 - Decorate 27(gfo2) Location 1 - Decorate 29(outBlock) Block - Decorate 31(gf_out) Location 5 - Decorate 32(outBlock) Block - Decorate 37(inBlock) Location 5 - Decorate 48(vgo1) Location 0 - Decorate 51(vgo2) Location 1 - MemberDecorate 52(crossStageBlock2) 0 Offset 0 - MemberDecorate 52(crossStageBlock2) 1 Offset 16 - Decorate 52(crossStageBlock2) Block - Decorate 56(blockName1) DescriptorSet 0 - Decorate 56(blockName1) Binding 3 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeInt 32 1 - 7: TypePointer Function 6(int) - 9: 6(int) Constant 0 - 16: 6(int) Constant 3 - 17: TypeBool - 19: TypeFloat 32 - 20: TypeVector 19(float) 4 - 21: TypePointer Output 20(fvec4) - 22(gfo1): 21(ptr) Variable Output - 23: 19(float) Constant 0 - 24: 20(fvec4) ConstantComposite 23 23 23 23 - 25: TypeVector 19(float) 2 - 26: TypePointer Output 25(fvec2) - 27(gfo2): 26(ptr) Variable Output - 28: 25(fvec2) ConstantComposite 23 23 - 29(outBlock): TypeStruct 20(fvec4) - 30: TypePointer Output 29(outBlock) - 31(gf_out): 30(ptr) Variable Output - 32(outBlock): TypeStruct 20(fvec4) - 33: TypeInt 32 0 - 34: 33(int) Constant 1 - 35: TypeArray 32(outBlock) 34 - 36: TypePointer Input 35 - 37(inBlock): 36(ptr) Variable Input - 39: TypePointer Input 20(fvec4) - 44: 6(int) Constant 1 - 46: TypeArray 20(fvec4) 34 - 47: TypePointer Input 46 - 48(vgo1): 47(ptr) Variable Input - 49: TypeArray 25(fvec2) 34 - 50: TypePointer Input 49 - 51(vgo2): 50(ptr) Variable Input -52(crossStageBlock2): TypeStruct 20(fvec4) 25(fvec2) - 53: 33(int) Constant 2 - 54: TypeArray 52(crossStageBlock2) 53 - 55: TypePointer Uniform 54 - 56(blockName1): 55(ptr) Variable Uniform - 4(main): 2 Function None 3 - 5: Label - 8(i): 7(ptr) Variable Function - Store 8(i) 9 - Branch 10 - 10: Label - LoopMerge 12 13 None - Branch 14 - 14: Label - 15: 6(int) Load 8(i) - 18: 17(bool) SLessThan 15 16 - BranchConditional 18 11 12 - 11: Label - Store 22(gfo1) 24 - Store 27(gfo2) 28 - 38: 6(int) Load 8(i) - 40: 39(ptr) AccessChain 37(inBlock) 38 9 - 41: 20(fvec4) Load 40 - 42: 21(ptr) AccessChain 31(gf_out) 9 - Store 42 41 - EmitVertex - Branch 13 - 13: Label - 43: 6(int) Load 8(i) - 45: 6(int) IAdd 43 44 - Store 8(i) 45 - Branch 10 - 12: Label - EndPrimitive - Return - FunctionEnd -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 81 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 64 70 74 76 - ExecutionMode 4 OriginUpperLeft - Source GLSL 460 - Name 4 "main" - Name 9 "Bar(" - Name 13 "Foo(" - Name 15 "fragOnlyBlock" - MemberName 15(fragOnlyBlock) 0 "fb1" - Name 17 "" - Name 23 "crossStageBlock2" - MemberName 23(crossStageBlock2) 0 "a" - MemberName 23(crossStageBlock2) 1 "b" - Name 28 "blockName2" - Name 38 "crossStageBlock1" - MemberName 38(crossStageBlock1) 0 "a" - MemberName 38(crossStageBlock1) 1 "b" - Name 40 "" - Name 62 "color" - Name 64 "gfo1" - Name 70 "outColor" - Name 72 "outBlock" - MemberName 72(outBlock) 0 "o3" - Name 74 "" - Name 76 "gfo2" - Name 80 "glass" - MemberDecorate 15(fragOnlyBlock) 0 NonWritable - MemberDecorate 15(fragOnlyBlock) 0 Offset 0 - Decorate 15(fragOnlyBlock) BufferBlock - Decorate 17 DescriptorSet 0 - Decorate 17 Binding 2 - MemberDecorate 23(crossStageBlock2) 0 Offset 0 - MemberDecorate 23(crossStageBlock2) 1 Offset 16 - Decorate 23(crossStageBlock2) Block - Decorate 28(blockName2) DescriptorSet 0 - Decorate 28(blockName2) Binding 3 - MemberDecorate 38(crossStageBlock1) 0 Offset 0 - MemberDecorate 38(crossStageBlock1) 1 Offset 16 - Decorate 38(crossStageBlock1) Block - Decorate 40 DescriptorSet 0 - Decorate 40 Binding 1 - Decorate 64(gfo1) Location 0 - Decorate 70(outColor) Location 0 - Decorate 72(outBlock) Block - Decorate 74 Location 5 - Decorate 76(gfo2) Location 1 - Decorate 80(glass) DescriptorSet 0 - Decorate 80(glass) Binding 0 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 2 - 8: TypeFunction 7(fvec2) - 11: TypeVector 6(float) 4 - 12: TypeFunction 11(fvec4) -15(fragOnlyBlock): TypeStruct 7(fvec2) - 16: TypePointer Uniform 15(fragOnlyBlock) - 17: 16(ptr) Variable Uniform - 18: TypeInt 32 1 - 19: 18(int) Constant 0 - 20: TypePointer Uniform 7(fvec2) -23(crossStageBlock2): TypeStruct 11(fvec4) 7(fvec2) - 24: TypeInt 32 0 - 25: 24(int) Constant 2 - 26: TypeArray 23(crossStageBlock2) 25 - 27: TypePointer Uniform 26 - 28(blockName2): 27(ptr) Variable Uniform - 29: 18(int) Constant 1 -38(crossStageBlock1): TypeStruct 11(fvec4) 11(fvec4) - 39: TypePointer Uniform 38(crossStageBlock1) - 40: 39(ptr) Variable Uniform - 41: TypePointer Uniform 11(fvec4) - 54: 6(float) Constant 0 - 61: TypePointer Function 11(fvec4) - 63: TypePointer Input 11(fvec4) - 64(gfo1): 63(ptr) Variable Input - 69: TypePointer Output 11(fvec4) - 70(outColor): 69(ptr) Variable Output - 72(outBlock): TypeStruct 11(fvec4) - 73: TypePointer Input 72(outBlock) - 74: 73(ptr) Variable Input - 75: TypePointer Input 7(fvec2) - 76(gfo2): 75(ptr) Variable Input - 77: TypeImage 6(float) 2D sampled format:Unknown - 78: TypeSampledImage 77 - 79: TypePointer UniformConstant 78 - 80(glass): 79(ptr) Variable UniformConstant - 4(main): 2 Function None 3 - 5: Label - 62(color): 61(ptr) Variable Function - 65: 11(fvec4) Load 64(gfo1) - Store 62(color) 65 - 66: 11(fvec4) Load 62(color) - 67: 11(fvec4) FunctionCall 13(Foo() - 68: 11(fvec4) FAdd 66 67 - Store 62(color) 68 - 71: 11(fvec4) Load 62(color) - Store 70(outColor) 71 - Return - FunctionEnd - 9(Bar(): 7(fvec2) Function None 8 - 10: Label - 21: 20(ptr) AccessChain 17 19 - 22: 7(fvec2) Load 21 - 30: 20(ptr) AccessChain 28(blockName2) 19 29 - 31: 7(fvec2) Load 30 - 32: 7(fvec2) FAdd 22 31 - 33: 20(ptr) AccessChain 28(blockName2) 29 29 - 34: 7(fvec2) Load 33 - 35: 7(fvec2) FAdd 32 34 - ReturnValue 35 - FunctionEnd - 13(Foo(): 11(fvec4) Function None 12 - 14: Label - 42: 41(ptr) AccessChain 40 19 - 43: 11(fvec4) Load 42 - 44: 41(ptr) AccessChain 40 29 - 45: 11(fvec4) Load 44 - 46: 11(fvec4) FAdd 43 45 - 47: 41(ptr) AccessChain 28(blockName2) 19 19 - 48: 11(fvec4) Load 47 - 49: 11(fvec4) FAdd 46 48 - 50: 41(ptr) AccessChain 28(blockName2) 29 19 - 51: 11(fvec4) Load 50 - 52: 11(fvec4) FAdd 49 51 - 53: 7(fvec2) FunctionCall 9(Bar() - 55: 6(float) CompositeExtract 53 0 - 56: 6(float) CompositeExtract 53 1 - 57: 11(fvec4) CompositeConstruct 55 56 54 54 - 58: 11(fvec4) FAdd 52 57 - ReturnValue 58 - FunctionEnd diff --git a/Test/baseResults/vk.relaxed.errorcheck.vert.out b/Test/baseResults/vk.relaxed.errorcheck.vert.out deleted file mode 100644 index f19eae6407..0000000000 --- a/Test/baseResults/vk.relaxed.errorcheck.vert.out +++ /dev/null @@ -1,124 +0,0 @@ -vk.relaxed.errorcheck.vert -Shader version: 460 -0:? Sequence -0:9 Function Definition: foo( ( global highp 4-component vector of float) -0:9 Function Parameters: -0:10 Sequence -0:10 Branch: Return with expression -0:10 vector swizzle ( temp highp 4-component vector of float) -0:10 a: direct index for structure ( uniform highp 2-component vector of float) -0:10 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) -0:10 Constant: -0:10 0 (const uint) -0:10 Sequence -0:10 Constant: -0:10 0 (const int) -0:10 Constant: -0:10 1 (const int) -0:10 Constant: -0:10 0 (const int) -0:10 Constant: -0:10 1 (const int) -0:13 Function Definition: main( ( global void) -0:13 Function Parameters: -0:14 Sequence -0:14 move second child to first child ( temp highp 4-component vector of float) -0:14 'io' (layout( location=0) smooth out highp 4-component vector of float) -0:14 Function Call: foo( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) - -vk.relaxed.errorcheck.frag -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:10 Function Definition: foo( ( global highp 4-component vector of float) -0:10 Function Parameters: -0:11 Sequence -0:11 Branch: Return with expression -0:11 a: direct index for structure ( uniform highp 4-component vector of float) -0:11 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) -0:11 Constant: -0:11 0 (const uint) -0:14 Function Definition: main( ( global void) -0:14 Function Parameters: -0:15 Sequence -0:15 move second child to first child ( temp highp 4-component vector of float) -0:15 'o' ( out highp 4-component vector of float) -0:15 add ( temp highp 4-component vector of float) -0:15 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:15 Function Call: foo( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) - - -Linked vertex stage: - - -Linked fragment stage: - -ERROR: Linking unknown stage stage: Types must match: - a: " uniform highp 2-component vector of float" versus " uniform highp 4-component vector of float" - -Shader version: 460 -0:? Sequence -0:9 Function Definition: foo( ( global highp 4-component vector of float) -0:9 Function Parameters: -0:10 Sequence -0:10 Branch: Return with expression -0:10 vector swizzle ( temp highp 4-component vector of float) -0:10 a: direct index for structure ( uniform highp 2-component vector of float) -0:10 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) -0:10 Constant: -0:10 0 (const uint) -0:10 Sequence -0:10 Constant: -0:10 0 (const int) -0:10 Constant: -0:10 1 (const int) -0:10 Constant: -0:10 0 (const int) -0:10 Constant: -0:10 1 (const int) -0:13 Function Definition: main( ( global void) -0:13 Function Parameters: -0:14 Sequence -0:14 move second child to first child ( temp highp 4-component vector of float) -0:14 'io' (layout( location=0) smooth out highp 4-component vector of float) -0:14 Function Call: foo( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:10 Function Definition: foo( ( global highp 4-component vector of float) -0:10 Function Parameters: -0:11 Sequence -0:11 Branch: Return with expression -0:11 a: direct index for structure ( uniform highp 4-component vector of float) -0:11 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) -0:11 Constant: -0:11 0 (const uint) -0:14 Function Definition: main( ( global void) -0:14 Function Parameters: -0:15 Sequence -0:15 move second child to first child ( temp highp 4-component vector of float) -0:15 'o' ( out highp 4-component vector of float) -0:15 add ( temp highp 4-component vector of float) -0:15 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:15 Function Call: foo( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) - -Validation failed -SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/vk.relaxed.frag.out b/Test/baseResults/vk.relaxed.frag.out deleted file mode 100644 index d98910e6f8..0000000000 --- a/Test/baseResults/vk.relaxed.frag.out +++ /dev/null @@ -1,826 +0,0 @@ -vk.relaxed.frag -WARNING: 0:7: 'b' : Ignoring initializer for uniform -WARNING: 0:8: 'c' : ignoring layout qualifier for uniform location - -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:36 Function Definition: bar( ( global highp uint) -0:36 Function Parameters: -0:37 Sequence -0:37 Sequence -0:37 move second child to first child ( temp highp uint) -0:37 'j' ( temp highp uint) -0:37 Constant: -0:37 0 (const uint) -0:38 move second child to first child ( temp highp uint) -0:38 'j' ( temp highp uint) -0:38 AtomicAdd ( global highp uint) -0:38 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:38 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:38 Constant: -0:38 0 (const uint) -0:38 Constant: -0:38 1 (const uint) -0:39 move second child to first child ( temp highp uint) -0:39 'j' ( temp highp uint) -0:39 subtract ( temp highp uint) -0:39 AtomicAdd ( global highp uint) -0:39 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:39 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:39 Constant: -0:39 0 (const uint) -0:39 Constant: -0:39 4294967295 (const uint) -0:39 Constant: -0:39 1 (const uint) -0:40 move second child to first child ( temp highp uint) -0:40 'j' ( temp highp uint) -0:40 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:40 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:40 Constant: -0:40 0 (const uint) -0:42 move second child to first child ( temp highp uint) -0:42 'j' ( temp highp uint) -0:42 AtomicAdd ( global highp uint) -0:42 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:42 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:42 Constant: -0:42 0 (const uint) -0:42 Constant: -0:42 1 (const uint) -0:43 move second child to first child ( temp highp uint) -0:43 'j' ( temp highp uint) -0:43 AtomicAdd ( global highp uint) -0:43 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:43 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:43 Constant: -0:43 0 (const uint) -0:43 Constant: -0:43 4294967295 (const uint) -0:44 move second child to first child ( temp highp uint) -0:44 'j' ( temp highp uint) -0:44 AtomicSubtract ( global highp uint) -0:44 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:44 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:44 Constant: -0:44 0 (const uint) -0:44 Constant: -0:44 1 (const uint) -0:46 move second child to first child ( temp highp uint) -0:46 'j' ( temp highp uint) -0:46 AtomicMin ( global highp uint) -0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:46 Constant: -0:46 0 (const uint) -0:46 'j' ( temp highp uint) -0:47 move second child to first child ( temp highp uint) -0:47 'j' ( temp highp uint) -0:47 AtomicMax ( global highp uint) -0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:47 Constant: -0:47 0 (const uint) -0:47 'j' ( temp highp uint) -0:48 move second child to first child ( temp highp uint) -0:48 'j' ( temp highp uint) -0:48 AtomicAnd ( global highp uint) -0:48 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:48 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:48 Constant: -0:48 0 (const uint) -0:48 'j' ( temp highp uint) -0:50 move second child to first child ( temp highp uint) -0:50 'j' ( temp highp uint) -0:50 AtomicOr ( global highp uint) -0:50 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:50 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:50 Constant: -0:50 0 (const uint) -0:50 'j' ( temp highp uint) -0:51 move second child to first child ( temp highp uint) -0:51 'j' ( temp highp uint) -0:51 AtomicXor ( global highp uint) -0:51 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:51 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:51 Constant: -0:51 0 (const uint) -0:51 'j' ( temp highp uint) -0:53 move second child to first child ( temp highp uint) -0:53 'j' ( temp highp uint) -0:53 AtomicExchange ( global highp uint) -0:53 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:53 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:53 Constant: -0:53 0 (const uint) -0:53 'j' ( temp highp uint) -0:54 move second child to first child ( temp highp uint) -0:54 'j' ( temp highp uint) -0:54 AtomicCompSwap ( global highp uint) -0:54 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:54 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:54 Constant: -0:54 0 (const uint) -0:54 Constant: -0:54 0 (const uint) -0:54 'j' ( temp highp uint) -0:56 AtomicAdd ( global highp uint) -0:56 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:56 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:56 Constant: -0:56 1 (const uint) -0:56 Constant: -0:56 1 (const uint) -0:57 AtomicAdd ( global highp uint) -0:57 counter3: direct index for structure ( coherent volatile buffer highp uint) -0:57 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) -0:57 Constant: -0:57 0 (const uint) -0:57 Constant: -0:57 1 (const uint) -0:59 MemoryBarrierBuffer ( global void) -0:61 Branch: Return with expression -0:61 'j' ( temp highp uint) -0:64 Function Definition: foo( ( global highp 4-component vector of float) -0:64 Function Parameters: -0:65 Sequence -0:65 Sequence -0:65 move second child to first child ( temp highp float) -0:65 'f' ( temp highp float) -0:65 add ( temp highp float) -0:65 add ( temp highp float) -0:65 add ( temp highp float) -0:65 j: direct index for structure (layout( column_major std140) uniform highp float) -0:65 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:65 Constant: -0:65 0 (const uint) -0:65 j: direct index for structure (layout( column_major std430) buffer highp float) -0:65 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:65 Constant: -0:65 0 (const int) -0:65 y: direct index for structure ( global highp float) -0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:65 Constant: -0:65 4 (const uint) -0:65 Constant: -0:65 1 (const int) -0:65 Convert uint to float ( temp highp float) -0:65 z: direct index for structure ( global highp uint) -0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:65 Constant: -0:65 4 (const uint) -0:65 Constant: -0:65 2 (const int) -0:66 Sequence -0:66 move second child to first child ( temp highp 2-component vector of float) -0:66 'v2' ( temp highp 2-component vector of float) -0:66 add ( temp highp 2-component vector of float) -0:66 add ( temp highp 2-component vector of float) -0:66 b: direct index for structure ( uniform highp 2-component vector of float) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 1 (const uint) -0:66 c: direct index for structure ( uniform highp 2-component vector of float) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 2 (const uint) -0:66 x: direct index for structure ( global highp 2-component vector of float) -0:66 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 4 (const uint) -0:66 Constant: -0:66 0 (const int) -0:67 Sequence -0:67 move second child to first child ( temp highp 4-component vector of float) -0:67 'v4' ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 a: direct index for structure ( uniform highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 0 (const uint) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 0 (const int) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 1 (const int) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 2 (const int) -0:67 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:67 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:67 Constant: -0:67 1 (const uint) -0:67 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) -0:67 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:67 Constant: -0:67 1 (const int) -0:67 texture ( global highp 4-component vector of float) -0:67 't1' ( uniform highp sampler2D) -0:67 Constant: -0:67 0.000000 -0:67 0.000000 -0:68 Branch: Return with expression -0:68 component-wise multiply ( temp highp 4-component vector of float) -0:68 component-wise multiply ( temp highp 4-component vector of float) -0:68 Construct vec4 ( temp highp 4-component vector of float) -0:68 'f' ( temp highp float) -0:68 Construct vec4 ( temp highp 4-component vector of float) -0:68 'v2' ( temp highp 2-component vector of float) -0:68 Constant: -0:68 1.000000 -0:68 Constant: -0:68 1.000000 -0:68 'v4' ( temp highp 4-component vector of float) -0:71 Function Definition: main( ( global void) -0:71 Function Parameters: -0:72 Sequence -0:72 Sequence -0:72 move second child to first child ( temp highp float) -0:72 'j' ( temp highp float) -0:72 Convert uint to float ( temp highp float) -0:72 Function Call: bar( ( global highp uint) -0:73 move second child to first child ( temp highp 4-component vector of float) -0:73 'o' ( out highp 4-component vector of float) -0:73 vector-scale ( temp highp 4-component vector of float) -0:73 'j' ( temp highp float) -0:73 Function Call: foo( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:? 't1' ( uniform highp sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:? 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:? 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:? 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) - - -Linked fragment stage: - - -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:36 Function Definition: bar( ( global highp uint) -0:36 Function Parameters: -0:37 Sequence -0:37 Sequence -0:37 move second child to first child ( temp highp uint) -0:37 'j' ( temp highp uint) -0:37 Constant: -0:37 0 (const uint) -0:38 move second child to first child ( temp highp uint) -0:38 'j' ( temp highp uint) -0:38 AtomicAdd ( global highp uint) -0:38 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:38 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:38 Constant: -0:38 0 (const uint) -0:38 Constant: -0:38 1 (const uint) -0:39 move second child to first child ( temp highp uint) -0:39 'j' ( temp highp uint) -0:39 subtract ( temp highp uint) -0:39 AtomicAdd ( global highp uint) -0:39 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:39 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:39 Constant: -0:39 0 (const uint) -0:39 Constant: -0:39 4294967295 (const uint) -0:39 Constant: -0:39 1 (const uint) -0:40 move second child to first child ( temp highp uint) -0:40 'j' ( temp highp uint) -0:40 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:40 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:40 Constant: -0:40 0 (const uint) -0:42 move second child to first child ( temp highp uint) -0:42 'j' ( temp highp uint) -0:42 AtomicAdd ( global highp uint) -0:42 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:42 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:42 Constant: -0:42 0 (const uint) -0:42 Constant: -0:42 1 (const uint) -0:43 move second child to first child ( temp highp uint) -0:43 'j' ( temp highp uint) -0:43 AtomicAdd ( global highp uint) -0:43 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:43 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:43 Constant: -0:43 0 (const uint) -0:43 Constant: -0:43 4294967295 (const uint) -0:44 move second child to first child ( temp highp uint) -0:44 'j' ( temp highp uint) -0:44 AtomicSubtract ( global highp uint) -0:44 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:44 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:44 Constant: -0:44 0 (const uint) -0:44 Constant: -0:44 1 (const uint) -0:46 move second child to first child ( temp highp uint) -0:46 'j' ( temp highp uint) -0:46 AtomicMin ( global highp uint) -0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:46 Constant: -0:46 0 (const uint) -0:46 'j' ( temp highp uint) -0:47 move second child to first child ( temp highp uint) -0:47 'j' ( temp highp uint) -0:47 AtomicMax ( global highp uint) -0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:47 Constant: -0:47 0 (const uint) -0:47 'j' ( temp highp uint) -0:48 move second child to first child ( temp highp uint) -0:48 'j' ( temp highp uint) -0:48 AtomicAnd ( global highp uint) -0:48 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:48 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:48 Constant: -0:48 0 (const uint) -0:48 'j' ( temp highp uint) -0:50 move second child to first child ( temp highp uint) -0:50 'j' ( temp highp uint) -0:50 AtomicOr ( global highp uint) -0:50 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:50 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:50 Constant: -0:50 0 (const uint) -0:50 'j' ( temp highp uint) -0:51 move second child to first child ( temp highp uint) -0:51 'j' ( temp highp uint) -0:51 AtomicXor ( global highp uint) -0:51 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:51 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:51 Constant: -0:51 0 (const uint) -0:51 'j' ( temp highp uint) -0:53 move second child to first child ( temp highp uint) -0:53 'j' ( temp highp uint) -0:53 AtomicExchange ( global highp uint) -0:53 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:53 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:53 Constant: -0:53 0 (const uint) -0:53 'j' ( temp highp uint) -0:54 move second child to first child ( temp highp uint) -0:54 'j' ( temp highp uint) -0:54 AtomicCompSwap ( global highp uint) -0:54 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:54 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:54 Constant: -0:54 0 (const uint) -0:54 Constant: -0:54 0 (const uint) -0:54 'j' ( temp highp uint) -0:56 AtomicAdd ( global highp uint) -0:56 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:56 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:56 Constant: -0:56 1 (const uint) -0:56 Constant: -0:56 1 (const uint) -0:57 AtomicAdd ( global highp uint) -0:57 counter3: direct index for structure ( coherent volatile buffer highp uint) -0:57 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) -0:57 Constant: -0:57 0 (const uint) -0:57 Constant: -0:57 1 (const uint) -0:59 MemoryBarrierBuffer ( global void) -0:61 Branch: Return with expression -0:61 'j' ( temp highp uint) -0:64 Function Definition: foo( ( global highp 4-component vector of float) -0:64 Function Parameters: -0:65 Sequence -0:65 Sequence -0:65 move second child to first child ( temp highp float) -0:65 'f' ( temp highp float) -0:65 add ( temp highp float) -0:65 add ( temp highp float) -0:65 add ( temp highp float) -0:65 j: direct index for structure (layout( column_major std140) uniform highp float) -0:65 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:65 Constant: -0:65 0 (const uint) -0:65 j: direct index for structure (layout( column_major std430) buffer highp float) -0:65 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:65 Constant: -0:65 0 (const int) -0:65 y: direct index for structure ( global highp float) -0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:65 Constant: -0:65 4 (const uint) -0:65 Constant: -0:65 1 (const int) -0:65 Convert uint to float ( temp highp float) -0:65 z: direct index for structure ( global highp uint) -0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:65 Constant: -0:65 4 (const uint) -0:65 Constant: -0:65 2 (const int) -0:66 Sequence -0:66 move second child to first child ( temp highp 2-component vector of float) -0:66 'v2' ( temp highp 2-component vector of float) -0:66 add ( temp highp 2-component vector of float) -0:66 add ( temp highp 2-component vector of float) -0:66 b: direct index for structure ( uniform highp 2-component vector of float) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 1 (const uint) -0:66 c: direct index for structure ( uniform highp 2-component vector of float) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 2 (const uint) -0:66 x: direct index for structure ( global highp 2-component vector of float) -0:66 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) -0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:66 Constant: -0:66 4 (const uint) -0:66 Constant: -0:66 0 (const int) -0:67 Sequence -0:67 move second child to first child ( temp highp 4-component vector of float) -0:67 'v4' ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 add ( temp highp 4-component vector of float) -0:67 a: direct index for structure ( uniform highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 0 (const uint) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 0 (const int) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 1 (const int) -0:67 direct index ( temp highp 4-component vector of float) -0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) -0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:67 Constant: -0:67 3 (const uint) -0:67 Constant: -0:67 2 (const int) -0:67 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) -0:67 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:67 Constant: -0:67 1 (const uint) -0:67 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) -0:67 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:67 Constant: -0:67 1 (const int) -0:67 texture ( global highp 4-component vector of float) -0:67 't1' ( uniform highp sampler2D) -0:67 Constant: -0:67 0.000000 -0:67 0.000000 -0:68 Branch: Return with expression -0:68 component-wise multiply ( temp highp 4-component vector of float) -0:68 component-wise multiply ( temp highp 4-component vector of float) -0:68 Construct vec4 ( temp highp 4-component vector of float) -0:68 'f' ( temp highp float) -0:68 Construct vec4 ( temp highp 4-component vector of float) -0:68 'v2' ( temp highp 2-component vector of float) -0:68 Constant: -0:68 1.000000 -0:68 Constant: -0:68 1.000000 -0:68 'v4' ( temp highp 4-component vector of float) -0:71 Function Definition: main( ( global void) -0:71 Function Parameters: -0:72 Sequence -0:72 Sequence -0:72 move second child to first child ( temp highp float) -0:72 'j' ( temp highp float) -0:72 Convert uint to float ( temp highp float) -0:72 Function Call: bar( ( global highp uint) -0:73 move second child to first child ( temp highp 4-component vector of float) -0:73 'o' ( out highp 4-component vector of float) -0:73 vector-scale ( temp highp 4-component vector of float) -0:73 'j' ( temp highp float) -0:73 Function Call: foo( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) -0:? 't1' ( uniform highp sampler2D) -0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) -0:? 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) -0:? 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:? 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) - -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 163 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 159 - ExecutionMode 4 OriginUpperLeft - Source GLSL 460 - Name 4 "main" - Name 8 "bar(" - Name 13 "foo(" - Name 16 "j" - Name 18 "gl_AtomicCounterBlock_0" - MemberName 18(gl_AtomicCounterBlock_0) 0 "counter1" - MemberName 18(gl_AtomicCounterBlock_0) 1 "counter2" - Name 20 "" - Name 63 "gl_AtomicCounterBlock_1" - MemberName 63(gl_AtomicCounterBlock_1) 0 "counter3" - Name 65 "" - Name 73 "f" - Name 74 "UniformBlock" - MemberName 74(UniformBlock) 0 "j" - MemberName 74(UniformBlock) 1 "k" - Name 76 "" - Name 80 "BufferBlock" - MemberName 80(BufferBlock) 0 "j" - MemberName 80(BufferBlock) 1 "k" - Name 82 "bufferInstance" - Name 89 "e" - MemberName 89(e) 0 "x" - MemberName 89(e) 1 "y" - MemberName 89(e) 2 "z" - Name 90 "gl_DefaultUniformBlock" - MemberName 90(gl_DefaultUniformBlock) 0 "a" - MemberName 90(gl_DefaultUniformBlock) 1 "b" - MemberName 90(gl_DefaultUniformBlock) 2 "c" - MemberName 90(gl_DefaultUniformBlock) 3 "d" - MemberName 90(gl_DefaultUniformBlock) 4 "structUniform" - Name 92 "" - Name 103 "v2" - Name 114 "v4" - Name 137 "t1" - Name 155 "j" - Name 159 "o" - MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Volatile - MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Offset 0 - MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Volatile - MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Offset 4 - Decorate 18(gl_AtomicCounterBlock_0) BufferBlock - Decorate 20 DescriptorSet 0 - Decorate 20 Binding 4 - MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent - MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Volatile - MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent - MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Offset 0 - Decorate 63(gl_AtomicCounterBlock_1) BufferBlock - Decorate 65 DescriptorSet 0 - Decorate 65 Binding 5 - MemberDecorate 74(UniformBlock) 0 Offset 0 - MemberDecorate 74(UniformBlock) 1 Offset 16 - Decorate 74(UniformBlock) Block - Decorate 76 DescriptorSet 0 - Decorate 76 Binding 2 - MemberDecorate 80(BufferBlock) 0 Offset 0 - MemberDecorate 80(BufferBlock) 1 Offset 16 - Decorate 80(BufferBlock) BufferBlock - Decorate 82(bufferInstance) DescriptorSet 0 - Decorate 82(bufferInstance) Binding 3 - Decorate 88 ArrayStride 16 - MemberDecorate 89(e) 0 Offset 0 - MemberDecorate 89(e) 1 Offset 8 - MemberDecorate 89(e) 2 Offset 12 - MemberDecorate 90(gl_DefaultUniformBlock) 0 Offset 0 - MemberDecorate 90(gl_DefaultUniformBlock) 1 Offset 16 - MemberDecorate 90(gl_DefaultUniformBlock) 2 Offset 24 - MemberDecorate 90(gl_DefaultUniformBlock) 3 Offset 32 - MemberDecorate 90(gl_DefaultUniformBlock) 4 Offset 192 - Decorate 90(gl_DefaultUniformBlock) Block - Decorate 92 DescriptorSet 0 - Decorate 92 Binding 0 - Decorate 137(t1) DescriptorSet 0 - Decorate 137(t1) Binding 1 - Decorate 159(o) Location 0 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeInt 32 0 - 7: TypeFunction 6(int) - 10: TypeFloat 32 - 11: TypeVector 10(float) 4 - 12: TypeFunction 11(fvec4) - 15: TypePointer Function 6(int) - 17: 6(int) Constant 0 -18(gl_AtomicCounterBlock_0): TypeStruct 6(int) 6(int) - 19: TypePointer Uniform 18(gl_AtomicCounterBlock_0) - 20: 19(ptr) Variable Uniform - 21: TypeInt 32 1 - 22: 21(int) Constant 0 - 23: TypePointer Uniform 6(int) - 25: 6(int) Constant 1 - 28: 6(int) Constant 4294967295 - 60: 21(int) Constant 1 -63(gl_AtomicCounterBlock_1): TypeStruct 6(int) - 64: TypePointer Uniform 63(gl_AtomicCounterBlock_1) - 65: 64(ptr) Variable Uniform - 68: 6(int) Constant 72 - 72: TypePointer Function 10(float) -74(UniformBlock): TypeStruct 10(float) 11(fvec4) - 75: TypePointer Uniform 74(UniformBlock) - 76: 75(ptr) Variable Uniform - 77: TypePointer Uniform 10(float) - 80(BufferBlock): TypeStruct 10(float) 11(fvec4) - 81: TypePointer Uniform 80(BufferBlock) -82(bufferInstance): 81(ptr) Variable Uniform - 86: TypeVector 10(float) 2 - 87: 6(int) Constant 10 - 88: TypeArray 11(fvec4) 87 - 89(e): TypeStruct 86(fvec2) 10(float) 6(int) -90(gl_DefaultUniformBlock): TypeStruct 11(fvec4) 86(fvec2) 86(fvec2) 88 89(e) - 91: TypePointer Uniform 90(gl_DefaultUniformBlock) - 92: 91(ptr) Variable Uniform - 93: 21(int) Constant 4 - 97: 21(int) Constant 2 - 102: TypePointer Function 86(fvec2) - 104: TypePointer Uniform 86(fvec2) - 113: TypePointer Function 11(fvec4) - 115: TypePointer Uniform 11(fvec4) - 118: 21(int) Constant 3 - 134: TypeImage 10(float) 2D sampled format:Unknown - 135: TypeSampledImage 134 - 136: TypePointer UniformConstant 135 - 137(t1): 136(ptr) Variable UniformConstant - 139: 10(float) Constant 0 - 140: 86(fvec2) ConstantComposite 139 139 - 146: 10(float) Constant 1065353216 - 158: TypePointer Output 11(fvec4) - 159(o): 158(ptr) Variable Output - 4(main): 2 Function None 3 - 5: Label - 155(j): 72(ptr) Variable Function - 156: 6(int) FunctionCall 8(bar() - 157: 10(float) ConvertUToF 156 - Store 155(j) 157 - 160: 10(float) Load 155(j) - 161: 11(fvec4) FunctionCall 13(foo() - 162: 11(fvec4) VectorTimesScalar 161 160 - Store 159(o) 162 - Return - FunctionEnd - 8(bar(): 6(int) Function None 7 - 9: Label - 16(j): 15(ptr) Variable Function - Store 16(j) 17 - 24: 23(ptr) AccessChain 20 22 - 26: 6(int) AtomicIAdd 24 25 17 25 - Store 16(j) 26 - 27: 23(ptr) AccessChain 20 22 - 29: 6(int) AtomicIAdd 27 25 17 28 - 30: 6(int) ISub 29 25 - Store 16(j) 30 - 31: 23(ptr) AccessChain 20 22 - 32: 6(int) Load 31 - Store 16(j) 32 - 33: 23(ptr) AccessChain 20 22 - 34: 6(int) AtomicIAdd 33 25 17 25 - Store 16(j) 34 - 35: 23(ptr) AccessChain 20 22 - 36: 6(int) AtomicIAdd 35 25 17 28 - Store 16(j) 36 - 37: 23(ptr) AccessChain 20 22 - 38: 6(int) AtomicISub 37 25 17 25 - Store 16(j) 38 - 39: 23(ptr) AccessChain 20 22 - 40: 6(int) Load 16(j) - 41: 6(int) AtomicUMin 39 25 17 40 - Store 16(j) 41 - 42: 23(ptr) AccessChain 20 22 - 43: 6(int) Load 16(j) - 44: 6(int) AtomicUMax 42 25 17 43 - Store 16(j) 44 - 45: 23(ptr) AccessChain 20 22 - 46: 6(int) Load 16(j) - 47: 6(int) AtomicAnd 45 25 17 46 - Store 16(j) 47 - 48: 23(ptr) AccessChain 20 22 - 49: 6(int) Load 16(j) - 50: 6(int) AtomicOr 48 25 17 49 - Store 16(j) 50 - 51: 23(ptr) AccessChain 20 22 - 52: 6(int) Load 16(j) - 53: 6(int) AtomicXor 51 25 17 52 - Store 16(j) 53 - 54: 23(ptr) AccessChain 20 22 - 55: 6(int) Load 16(j) - 56: 6(int) AtomicExchange 54 25 17 55 - Store 16(j) 56 - 57: 23(ptr) AccessChain 20 22 - 58: 6(int) Load 16(j) - 59: 6(int) AtomicCompareExchange 57 25 17 17 58 17 - Store 16(j) 59 - 61: 23(ptr) AccessChain 20 60 - 62: 6(int) AtomicIAdd 61 25 17 25 - 66: 23(ptr) AccessChain 65 22 - 67: 6(int) AtomicIAdd 66 25 17 25 - MemoryBarrier 25 68 - 69: 6(int) Load 16(j) - ReturnValue 69 - FunctionEnd - 13(foo(): 11(fvec4) Function None 12 - 14: Label - 73(f): 72(ptr) Variable Function - 103(v2): 102(ptr) Variable Function - 114(v4): 113(ptr) Variable Function - 78: 77(ptr) AccessChain 76 22 - 79: 10(float) Load 78 - 83: 77(ptr) AccessChain 82(bufferInstance) 22 - 84: 10(float) Load 83 - 85: 10(float) FAdd 79 84 - 94: 77(ptr) AccessChain 92 93 60 - 95: 10(float) Load 94 - 96: 10(float) FAdd 85 95 - 98: 23(ptr) AccessChain 92 93 97 - 99: 6(int) Load 98 - 100: 10(float) ConvertUToF 99 - 101: 10(float) FAdd 96 100 - Store 73(f) 101 - 105: 104(ptr) AccessChain 92 60 - 106: 86(fvec2) Load 105 - 107: 104(ptr) AccessChain 92 97 - 108: 86(fvec2) Load 107 - 109: 86(fvec2) FAdd 106 108 - 110: 104(ptr) AccessChain 92 93 22 - 111: 86(fvec2) Load 110 - 112: 86(fvec2) FAdd 109 111 - Store 103(v2) 112 - 116: 115(ptr) AccessChain 92 22 - 117: 11(fvec4) Load 116 - 119: 115(ptr) AccessChain 92 118 22 - 120: 11(fvec4) Load 119 - 121: 11(fvec4) FAdd 117 120 - 122: 115(ptr) AccessChain 92 118 60 - 123: 11(fvec4) Load 122 - 124: 11(fvec4) FAdd 121 123 - 125: 115(ptr) AccessChain 92 118 97 - 126: 11(fvec4) Load 125 - 127: 11(fvec4) FAdd 124 126 - 128: 115(ptr) AccessChain 76 60 - 129: 11(fvec4) Load 128 - 130: 11(fvec4) FAdd 127 129 - 131: 115(ptr) AccessChain 82(bufferInstance) 60 - 132: 11(fvec4) Load 131 - 133: 11(fvec4) FAdd 130 132 - 138: 135 Load 137(t1) - 141: 11(fvec4) ImageSampleImplicitLod 138 140 - 142: 11(fvec4) FAdd 133 141 - Store 114(v4) 142 - 143: 10(float) Load 73(f) - 144: 11(fvec4) CompositeConstruct 143 143 143 143 - 145: 86(fvec2) Load 103(v2) - 147: 10(float) CompositeExtract 145 0 - 148: 10(float) CompositeExtract 145 1 - 149: 11(fvec4) CompositeConstruct 147 148 146 146 - 150: 11(fvec4) FMul 144 149 - 151: 11(fvec4) Load 114(v4) - 152: 11(fvec4) FMul 150 151 - ReturnValue 152 - FunctionEnd diff --git a/Test/baseResults/vk.relaxed.link1.frag.out b/Test/baseResults/vk.relaxed.link1.frag.out deleted file mode 100644 index 9dac4c64e2..0000000000 --- a/Test/baseResults/vk.relaxed.link1.frag.out +++ /dev/null @@ -1,515 +0,0 @@ -vk.relaxed.link1.frag -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:19 Function Definition: bar( ( global highp 4-component vector of float) -0:19 Function Parameters: -0:20 Sequence -0:20 Sequence -0:20 move second child to first child ( temp highp uint) -0:20 'j' ( temp highp uint) -0:20 add ( temp highp uint) -0:20 AtomicAdd ( global highp uint) -0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:20 Constant: -0:20 0 (const uint) -0:20 Constant: -0:20 1 (const uint) -0:20 subtract ( temp highp uint) -0:20 AtomicAdd ( global highp uint) -0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:20 Constant: -0:20 1 (const uint) -0:20 Constant: -0:20 4294967295 (const uint) -0:20 Constant: -0:20 1 (const uint) -0:21 Sequence -0:21 move second child to first child ( temp highp 4-component vector of float) -0:21 'v' ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 a: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 0 (const uint) -0:21 Construct vec4 ( temp highp 4-component vector of float) -0:21 direct index ( temp highp float) -0:21 b1: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 1 (const uint) -0:21 Constant: -0:21 0 (const int) -0:21 direct index ( temp highp float) -0:21 b1: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 1 (const uint) -0:21 Constant: -0:21 1 (const int) -0:21 direct index ( temp highp float) -0:21 b2: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 2 (const uint) -0:21 Constant: -0:21 0 (const int) -0:21 direct index ( temp highp float) -0:21 b2: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 2 (const uint) -0:21 Constant: -0:21 1 (const int) -0:21 c1: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 3 (const uint) -0:21 d: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 4 (const uint) -0:23 Branch: Return with expression -0:23 vector-scale ( temp highp 4-component vector of float) -0:23 Convert uint to float ( temp highp float) -0:23 'j' ( temp highp uint) -0:23 'v' ( temp highp 4-component vector of float) -0:26 Function Definition: main( ( global void) -0:26 Function Parameters: -0:27 Sequence -0:27 move second child to first child ( temp highp 4-component vector of float) -0:27 'o' ( out highp 4-component vector of float) -0:27 add ( temp highp 4-component vector of float) -0:27 Function Call: foo( ( global highp 4-component vector of float) -0:27 Function Call: bar( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) - -vk.relaxed.link2.frag -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:14 Function Definition: foo( ( global highp 4-component vector of float) -0:14 Function Parameters: -0:15 Sequence -0:15 Sequence -0:15 move second child to first child ( temp highp uint) -0:15 'j' ( temp highp uint) -0:15 add ( temp highp uint) -0:15 AtomicAdd ( global highp uint) -0:15 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:15 Constant: -0:15 1 (const uint) -0:15 Constant: -0:15 1 (const uint) -0:15 subtract ( temp highp uint) -0:15 AtomicAdd ( global highp uint) -0:15 counter3: direct index for structure ( coherent volatile buffer highp uint) -0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:15 Constant: -0:15 0 (const uint) -0:15 Constant: -0:15 4294967295 (const uint) -0:15 Constant: -0:15 1 (const uint) -0:16 Sequence -0:16 move second child to first child ( temp highp 4-component vector of float) -0:16 'v' ( temp highp 4-component vector of float) -0:16 add ( temp highp 4-component vector of float) -0:16 add ( temp highp 4-component vector of float) -0:16 add ( temp highp 4-component vector of float) -0:16 a: direct index for structure ( uniform highp 4-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) -0:16 Constant: -0:16 0 (const uint) -0:16 Construct vec4 ( temp highp 4-component vector of float) -0:16 direct index ( temp highp float) -0:16 b1: direct index for structure ( uniform highp 2-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) -0:16 Constant: -0:16 2 (const uint) -0:16 Constant: -0:16 0 (const int) -0:16 direct index ( temp highp float) -0:16 b1: direct index for structure ( uniform highp 2-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) -0:16 Constant: -0:16 2 (const uint) -0:16 Constant: -0:16 1 (const int) -0:16 direct index ( temp highp float) -0:16 b2: direct index for structure ( uniform highp 2-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) -0:16 Constant: -0:16 1 (const uint) -0:16 Constant: -0:16 0 (const int) -0:16 direct index ( temp highp float) -0:16 b2: direct index for structure ( uniform highp 2-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) -0:16 Constant: -0:16 1 (const uint) -0:16 Constant: -0:16 1 (const int) -0:16 c2: direct index for structure ( uniform highp 4-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) -0:16 Constant: -0:16 3 (const uint) -0:16 d: direct index for structure ( uniform highp 4-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) -0:16 Constant: -0:16 4 (const uint) -0:18 Branch: Return with expression -0:18 vector-scale ( temp highp 4-component vector of float) -0:18 Convert uint to float ( temp highp float) -0:18 'j' ( temp highp uint) -0:18 'v' ( temp highp 4-component vector of float) -0:? Linker Objects -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) -0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) - - -Linked fragment stage: - - -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:19 Function Definition: bar( ( global highp 4-component vector of float) -0:19 Function Parameters: -0:20 Sequence -0:20 Sequence -0:20 move second child to first child ( temp highp uint) -0:20 'j' ( temp highp uint) -0:20 add ( temp highp uint) -0:20 AtomicAdd ( global highp uint) -0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) -0:20 Constant: -0:20 0 (const uint) -0:20 Constant: -0:20 1 (const uint) -0:20 subtract ( temp highp uint) -0:20 AtomicAdd ( global highp uint) -0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) -0:20 Constant: -0:20 1 (const uint) -0:20 Constant: -0:20 4294967295 (const uint) -0:20 Constant: -0:20 1 (const uint) -0:21 Sequence -0:21 move second child to first child ( temp highp 4-component vector of float) -0:21 'v' ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 a: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:21 Constant: -0:21 0 (const uint) -0:21 Construct vec4 ( temp highp 4-component vector of float) -0:21 direct index ( temp highp float) -0:21 b1: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:21 Constant: -0:21 1 (const uint) -0:21 Constant: -0:21 0 (const int) -0:21 direct index ( temp highp float) -0:21 b1: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:21 Constant: -0:21 1 (const uint) -0:21 Constant: -0:21 1 (const int) -0:21 direct index ( temp highp float) -0:21 b2: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:21 Constant: -0:21 2 (const uint) -0:21 Constant: -0:21 0 (const int) -0:21 direct index ( temp highp float) -0:21 b2: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:21 Constant: -0:21 2 (const uint) -0:21 Constant: -0:21 1 (const int) -0:21 c1: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:21 Constant: -0:21 3 (const uint) -0:21 d: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:21 Constant: -0:21 4 (const uint) -0:23 Branch: Return with expression -0:23 vector-scale ( temp highp 4-component vector of float) -0:23 Convert uint to float ( temp highp float) -0:23 'j' ( temp highp uint) -0:23 'v' ( temp highp 4-component vector of float) -0:26 Function Definition: main( ( global void) -0:26 Function Parameters: -0:27 Sequence -0:27 move second child to first child ( temp highp 4-component vector of float) -0:27 'o' ( out highp 4-component vector of float) -0:27 add ( temp highp 4-component vector of float) -0:27 Function Call: foo( ( global highp 4-component vector of float) -0:27 Function Call: bar( ( global highp 4-component vector of float) -0:14 Function Definition: foo( ( global highp 4-component vector of float) -0:14 Function Parameters: -0:15 Sequence -0:15 Sequence -0:15 move second child to first child ( temp highp uint) -0:15 'j' ( temp highp uint) -0:15 add ( temp highp uint) -0:15 AtomicAdd ( global highp uint) -0:15 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) -0:15 Constant: -0:15 1 (const uint) -0:15 Constant: -0:15 1 (const uint) -0:15 subtract ( temp highp uint) -0:15 AtomicAdd ( global highp uint) -0:15 counter3: direct index for structure ( coherent volatile buffer highp uint) -0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) -0:15 Constant: -0:15 2 (const uint) -0:15 Constant: -0:15 4294967295 (const uint) -0:15 Constant: -0:15 1 (const uint) -0:16 Sequence -0:16 move second child to first child ( temp highp 4-component vector of float) -0:16 'v' ( temp highp 4-component vector of float) -0:16 add ( temp highp 4-component vector of float) -0:16 add ( temp highp 4-component vector of float) -0:16 add ( temp highp 4-component vector of float) -0:16 a: direct index for structure ( uniform highp 4-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:16 Constant: -0:16 0 (const uint) -0:16 Construct vec4 ( temp highp 4-component vector of float) -0:16 direct index ( temp highp float) -0:16 b1: direct index for structure ( uniform highp 2-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:16 Constant: -0:16 1 (const uint) -0:16 Constant: -0:16 0 (const int) -0:16 direct index ( temp highp float) -0:16 b1: direct index for structure ( uniform highp 2-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:16 Constant: -0:16 1 (const uint) -0:16 Constant: -0:16 1 (const int) -0:16 direct index ( temp highp float) -0:16 b2: direct index for structure ( uniform highp 2-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:16 Constant: -0:16 2 (const uint) -0:16 Constant: -0:16 0 (const int) -0:16 direct index ( temp highp float) -0:16 b2: direct index for structure ( uniform highp 2-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:16 Constant: -0:16 2 (const uint) -0:16 Constant: -0:16 1 (const int) -0:16 c2: direct index for structure ( uniform highp 4-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:16 Constant: -0:16 5 (const uint) -0:16 d: direct index for structure ( uniform highp 4-component vector of float) -0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:16 Constant: -0:16 4 (const uint) -0:18 Branch: Return with expression -0:18 vector-scale ( temp highp 4-component vector of float) -0:18 Convert uint to float ( temp highp float) -0:18 'j' ( temp highp uint) -0:18 'v' ( temp highp 4-component vector of float) -0:? Linker Objects -0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) -0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) - -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 105 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 68 - ExecutionMode 4 OriginUpperLeft - Source GLSL 460 - Name 4 "main" - Name 9 "bar(" - Name 11 "foo(" - Name 15 "j" - Name 16 "gl_AtomicCounterBlock_0" - MemberName 16(gl_AtomicCounterBlock_0) 0 "counter1" - MemberName 16(gl_AtomicCounterBlock_0) 1 "counter2" - MemberName 16(gl_AtomicCounterBlock_0) 2 "counter3" - Name 18 "" - Name 33 "v" - Name 35 "gl_DefaultUniformBlock" - MemberName 35(gl_DefaultUniformBlock) 0 "a" - MemberName 35(gl_DefaultUniformBlock) 1 "b1" - MemberName 35(gl_DefaultUniformBlock) 2 "b2" - MemberName 35(gl_DefaultUniformBlock) 3 "c1" - MemberName 35(gl_DefaultUniformBlock) 4 "d" - MemberName 35(gl_DefaultUniformBlock) 5 "c2" - Name 37 "" - Name 68 "o" - Name 72 "j" - Name 79 "v" - MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Volatile - MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Offset 0 - MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Volatile - MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Offset 4 - MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent - MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Volatile - MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent - MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Offset 8 - Decorate 16(gl_AtomicCounterBlock_0) BufferBlock - Decorate 18 DescriptorSet 0 - Decorate 18 Binding 1 - MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 - MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 - MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 - MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 - MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 - MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 - Decorate 35(gl_DefaultUniformBlock) Block - Decorate 37 DescriptorSet 0 - Decorate 37 Binding 0 - Decorate 68(o) Location 0 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8: TypeFunction 7(fvec4) - 13: TypeInt 32 0 - 14: TypePointer Function 13(int) -16(gl_AtomicCounterBlock_0): TypeStruct 13(int) 13(int) 13(int) - 17: TypePointer Uniform 16(gl_AtomicCounterBlock_0) - 18: 17(ptr) Variable Uniform - 19: TypeInt 32 1 - 20: 19(int) Constant 0 - 21: TypePointer Uniform 13(int) - 23: 13(int) Constant 1 - 24: 13(int) Constant 0 - 26: 19(int) Constant 1 - 28: 13(int) Constant 4294967295 - 32: TypePointer Function 7(fvec4) - 34: TypeVector 6(float) 2 -35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 34(fvec2) 34(fvec2) 7(fvec4) 7(fvec4) 7(fvec4) - 36: TypePointer Uniform 35(gl_DefaultUniformBlock) - 37: 36(ptr) Variable Uniform - 38: TypePointer Uniform 7(fvec4) - 41: TypePointer Uniform 6(float) - 46: 19(int) Constant 2 - 53: 19(int) Constant 3 - 57: 19(int) Constant 4 - 67: TypePointer Output 7(fvec4) - 68(o): 67(ptr) Variable Output - 92: 19(int) Constant 5 - 4(main): 2 Function None 3 - 5: Label - 69: 7(fvec4) FunctionCall 11(foo() - 70: 7(fvec4) FunctionCall 9(bar() - 71: 7(fvec4) FAdd 69 70 - Store 68(o) 71 - Return - FunctionEnd - 9(bar(): 7(fvec4) Function None 8 - 10: Label - 15(j): 14(ptr) Variable Function - 33(v): 32(ptr) Variable Function - 22: 21(ptr) AccessChain 18 20 - 25: 13(int) AtomicIAdd 22 23 24 23 - 27: 21(ptr) AccessChain 18 26 - 29: 13(int) AtomicIAdd 27 23 24 28 - 30: 13(int) ISub 29 23 - 31: 13(int) IAdd 25 30 - Store 15(j) 31 - 39: 38(ptr) AccessChain 37 20 - 40: 7(fvec4) Load 39 - 42: 41(ptr) AccessChain 37 26 24 - 43: 6(float) Load 42 - 44: 41(ptr) AccessChain 37 26 23 - 45: 6(float) Load 44 - 47: 41(ptr) AccessChain 37 46 24 - 48: 6(float) Load 47 - 49: 41(ptr) AccessChain 37 46 23 - 50: 6(float) Load 49 - 51: 7(fvec4) CompositeConstruct 43 45 48 50 - 52: 7(fvec4) FAdd 40 51 - 54: 38(ptr) AccessChain 37 53 - 55: 7(fvec4) Load 54 - 56: 7(fvec4) FAdd 52 55 - 58: 38(ptr) AccessChain 37 57 - 59: 7(fvec4) Load 58 - 60: 7(fvec4) FAdd 56 59 - Store 33(v) 60 - 61: 13(int) Load 15(j) - 62: 6(float) ConvertUToF 61 - 63: 7(fvec4) Load 33(v) - 64: 7(fvec4) VectorTimesScalar 63 62 - ReturnValue 64 - FunctionEnd - 11(foo(): 7(fvec4) Function None 8 - 12: Label - 72(j): 14(ptr) Variable Function - 79(v): 32(ptr) Variable Function - 73: 21(ptr) AccessChain 18 26 - 74: 13(int) AtomicIAdd 73 23 24 23 - 75: 21(ptr) AccessChain 18 46 - 76: 13(int) AtomicIAdd 75 23 24 28 - 77: 13(int) ISub 76 23 - 78: 13(int) IAdd 74 77 - Store 72(j) 78 - 80: 38(ptr) AccessChain 37 20 - 81: 7(fvec4) Load 80 - 82: 41(ptr) AccessChain 37 26 24 - 83: 6(float) Load 82 - 84: 41(ptr) AccessChain 37 26 23 - 85: 6(float) Load 84 - 86: 41(ptr) AccessChain 37 46 24 - 87: 6(float) Load 86 - 88: 41(ptr) AccessChain 37 46 23 - 89: 6(float) Load 88 - 90: 7(fvec4) CompositeConstruct 83 85 87 89 - 91: 7(fvec4) FAdd 81 90 - 93: 38(ptr) AccessChain 37 92 - 94: 7(fvec4) Load 93 - 95: 7(fvec4) FAdd 91 94 - 96: 38(ptr) AccessChain 37 57 - 97: 7(fvec4) Load 96 - 98: 7(fvec4) FAdd 95 97 - Store 79(v) 98 - 99: 13(int) Load 72(j) - 100: 6(float) ConvertUToF 99 - 101: 7(fvec4) Load 79(v) - 102: 7(fvec4) VectorTimesScalar 101 100 - ReturnValue 102 - FunctionEnd diff --git a/Test/baseResults/vk.relaxed.stagelink.vert.out b/Test/baseResults/vk.relaxed.stagelink.vert.out deleted file mode 100644 index a63f10c353..0000000000 --- a/Test/baseResults/vk.relaxed.stagelink.vert.out +++ /dev/null @@ -1,717 +0,0 @@ -vk.relaxed.stagelink.vert -Shader version: 460 -0:? Sequence -0:18 Function Definition: foo( ( global highp 4-component vector of float) -0:18 Function Parameters: -0:19 Sequence -0:19 Sequence -0:19 move second child to first child ( temp highp uint) -0:19 'j' ( temp highp uint) -0:19 add ( temp highp uint) -0:19 AtomicAdd ( global highp uint) -0:19 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:19 Constant: -0:19 1 (const uint) -0:19 Constant: -0:19 1 (const uint) -0:19 subtract ( temp highp uint) -0:19 AtomicAdd ( global highp uint) -0:19 counter3: direct index for structure ( coherent volatile buffer highp uint) -0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:19 Constant: -0:19 0 (const uint) -0:19 Constant: -0:19 4294967295 (const uint) -0:19 Constant: -0:19 1 (const uint) -0:20 Sequence -0:20 move second child to first child ( temp highp 4-component vector of float) -0:20 'v' ( temp highp 4-component vector of float) -0:20 add ( temp highp 4-component vector of float) -0:20 add ( temp highp 4-component vector of float) -0:20 add ( temp highp 4-component vector of float) -0:20 a: direct index for structure ( uniform highp 4-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 0 (const uint) -0:20 Construct vec4 ( temp highp 4-component vector of float) -0:20 direct index ( temp highp float) -0:20 b1: direct index for structure ( uniform highp 2-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 2 (const uint) -0:20 Constant: -0:20 0 (const int) -0:20 direct index ( temp highp float) -0:20 b1: direct index for structure ( uniform highp 2-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 2 (const uint) -0:20 Constant: -0:20 1 (const int) -0:20 direct index ( temp highp float) -0:20 b2: direct index for structure ( uniform highp 2-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 1 (const uint) -0:20 Constant: -0:20 0 (const int) -0:20 direct index ( temp highp float) -0:20 b2: direct index for structure ( uniform highp 2-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 1 (const uint) -0:20 Constant: -0:20 1 (const int) -0:20 c2: direct index for structure ( uniform highp 4-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 3 (const uint) -0:20 d: direct index for structure ( uniform highp 4-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 4 (const uint) -0:22 Branch: Return with expression -0:22 vector-scale ( temp highp 4-component vector of float) -0:22 Convert uint to float ( temp highp float) -0:22 'j' ( temp highp uint) -0:22 'v' ( temp highp 4-component vector of float) -0:25 Function Definition: main( ( global void) -0:25 Function Parameters: -0:27 Sequence -0:27 Sequence -0:27 move second child to first child ( temp highp 4-component vector of float) -0:27 'v' ( temp highp 4-component vector of float) -0:27 Function Call: foo( ( global highp 4-component vector of float) -0:28 move second child to first child ( temp highp 4-component vector of float) -0:28 'v' ( temp highp 4-component vector of float) -0:28 add ( temp highp 4-component vector of float) -0:28 'v' ( temp highp 4-component vector of float) -0:28 indirect index ( temp highp 4-component vector of float) -0:28 s: direct index for structure ( uniform 4-element array of highp 4-component vector of float) -0:28 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:28 Constant: -0:28 5 (const uint) -0:28 'gl_VertexID' ( in int VertexIndex) -0:29 move second child to first child ( temp highp float) -0:29 direct index ( temp highp float) -0:29 'v' ( temp highp 4-component vector of float) -0:29 Constant: -0:29 0 (const int) -0:29 subtract ( temp highp float) -0:29 direct index ( temp highp float) -0:29 'v' ( temp highp 4-component vector of float) -0:29 Constant: -0:29 0 (const int) -0:29 Convert int to float ( temp highp float) -0:29 'gl_InstanceID' ( in highp int InstanceIndex) -0:30 move second child to first child ( temp highp 4-component vector of float) -0:30 'io' (layout( location=0) smooth out highp 4-component vector of float) -0:30 'v' ( temp highp 4-component vector of float) -0:? Linker Objects -0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) - -vk.relaxed.stagelink.frag -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:19 Function Definition: foo( ( global highp 4-component vector of float) -0:19 Function Parameters: -0:20 Sequence -0:20 Sequence -0:20 move second child to first child ( temp highp uint) -0:20 'j' ( temp highp uint) -0:20 add ( temp highp uint) -0:20 AtomicAdd ( global highp uint) -0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:20 Constant: -0:20 0 (const uint) -0:20 Constant: -0:20 1 (const uint) -0:20 subtract ( temp highp uint) -0:20 AtomicAdd ( global highp uint) -0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:20 Constant: -0:20 1 (const uint) -0:20 Constant: -0:20 4294967295 (const uint) -0:20 Constant: -0:20 1 (const uint) -0:21 Sequence -0:21 move second child to first child ( temp highp 4-component vector of float) -0:21 'v' ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 a: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 0 (const uint) -0:21 Construct vec4 ( temp highp 4-component vector of float) -0:21 direct index ( temp highp float) -0:21 b1: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 1 (const uint) -0:21 Constant: -0:21 0 (const int) -0:21 direct index ( temp highp float) -0:21 b1: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 1 (const uint) -0:21 Constant: -0:21 1 (const int) -0:21 direct index ( temp highp float) -0:21 b2: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 2 (const uint) -0:21 Constant: -0:21 0 (const int) -0:21 direct index ( temp highp float) -0:21 b2: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 2 (const uint) -0:21 Constant: -0:21 1 (const int) -0:21 c1: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 3 (const uint) -0:21 d: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 4 (const uint) -0:23 Branch: Return with expression -0:23 vector-scale ( temp highp 4-component vector of float) -0:23 Convert uint to float ( temp highp float) -0:23 'j' ( temp highp uint) -0:23 'v' ( temp highp 4-component vector of float) -0:26 Function Definition: main( ( global void) -0:26 Function Parameters: -0:27 Sequence -0:27 move second child to first child ( temp highp 4-component vector of float) -0:27 'o' ( out highp 4-component vector of float) -0:27 add ( temp highp 4-component vector of float) -0:27 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:27 Function Call: foo( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) - - -Linked vertex stage: - - -Linked fragment stage: - - -Shader version: 460 -0:? Sequence -0:18 Function Definition: foo( ( global highp 4-component vector of float) -0:18 Function Parameters: -0:19 Sequence -0:19 Sequence -0:19 move second child to first child ( temp highp uint) -0:19 'j' ( temp highp uint) -0:19 add ( temp highp uint) -0:19 AtomicAdd ( global highp uint) -0:19 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:19 Constant: -0:19 1 (const uint) -0:19 Constant: -0:19 1 (const uint) -0:19 subtract ( temp highp uint) -0:19 AtomicAdd ( global highp uint) -0:19 counter3: direct index for structure ( coherent volatile buffer highp uint) -0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:19 Constant: -0:19 0 (const uint) -0:19 Constant: -0:19 4294967295 (const uint) -0:19 Constant: -0:19 1 (const uint) -0:20 Sequence -0:20 move second child to first child ( temp highp 4-component vector of float) -0:20 'v' ( temp highp 4-component vector of float) -0:20 add ( temp highp 4-component vector of float) -0:20 add ( temp highp 4-component vector of float) -0:20 add ( temp highp 4-component vector of float) -0:20 a: direct index for structure ( uniform highp 4-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 0 (const uint) -0:20 Construct vec4 ( temp highp 4-component vector of float) -0:20 direct index ( temp highp float) -0:20 b1: direct index for structure ( uniform highp 2-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 2 (const uint) -0:20 Constant: -0:20 0 (const int) -0:20 direct index ( temp highp float) -0:20 b1: direct index for structure ( uniform highp 2-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 2 (const uint) -0:20 Constant: -0:20 1 (const int) -0:20 direct index ( temp highp float) -0:20 b2: direct index for structure ( uniform highp 2-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 1 (const uint) -0:20 Constant: -0:20 0 (const int) -0:20 direct index ( temp highp float) -0:20 b2: direct index for structure ( uniform highp 2-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 1 (const uint) -0:20 Constant: -0:20 1 (const int) -0:20 c2: direct index for structure ( uniform highp 4-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 3 (const uint) -0:20 d: direct index for structure ( uniform highp 4-component vector of float) -0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:20 Constant: -0:20 4 (const uint) -0:22 Branch: Return with expression -0:22 vector-scale ( temp highp 4-component vector of float) -0:22 Convert uint to float ( temp highp float) -0:22 'j' ( temp highp uint) -0:22 'v' ( temp highp 4-component vector of float) -0:25 Function Definition: main( ( global void) -0:25 Function Parameters: -0:27 Sequence -0:27 Sequence -0:27 move second child to first child ( temp highp 4-component vector of float) -0:27 'v' ( temp highp 4-component vector of float) -0:27 Function Call: foo( ( global highp 4-component vector of float) -0:28 move second child to first child ( temp highp 4-component vector of float) -0:28 'v' ( temp highp 4-component vector of float) -0:28 add ( temp highp 4-component vector of float) -0:28 'v' ( temp highp 4-component vector of float) -0:28 indirect index ( temp highp 4-component vector of float) -0:28 s: direct index for structure ( uniform 4-element array of highp 4-component vector of float) -0:28 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:28 Constant: -0:28 5 (const uint) -0:28 'gl_VertexID' ( in int VertexIndex) -0:29 move second child to first child ( temp highp float) -0:29 direct index ( temp highp float) -0:29 'v' ( temp highp 4-component vector of float) -0:29 Constant: -0:29 0 (const int) -0:29 subtract ( temp highp float) -0:29 direct index ( temp highp float) -0:29 'v' ( temp highp 4-component vector of float) -0:29 Constant: -0:29 0 (const int) -0:29 Convert int to float ( temp highp float) -0:29 'gl_InstanceID' ( in highp int InstanceIndex) -0:30 move second child to first child ( temp highp 4-component vector of float) -0:30 'io' (layout( location=0) smooth out highp 4-component vector of float) -0:30 'v' ( temp highp 4-component vector of float) -0:? Linker Objects -0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) -0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) -Shader version: 460 -gl_FragCoord origin is upper left -0:? Sequence -0:19 Function Definition: foo( ( global highp 4-component vector of float) -0:19 Function Parameters: -0:20 Sequence -0:20 Sequence -0:20 move second child to first child ( temp highp uint) -0:20 'j' ( temp highp uint) -0:20 add ( temp highp uint) -0:20 AtomicAdd ( global highp uint) -0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) -0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:20 Constant: -0:20 0 (const uint) -0:20 Constant: -0:20 1 (const uint) -0:20 subtract ( temp highp uint) -0:20 AtomicAdd ( global highp uint) -0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) -0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) -0:20 Constant: -0:20 1 (const uint) -0:20 Constant: -0:20 4294967295 (const uint) -0:20 Constant: -0:20 1 (const uint) -0:21 Sequence -0:21 move second child to first child ( temp highp 4-component vector of float) -0:21 'v' ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 add ( temp highp 4-component vector of float) -0:21 a: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 0 (const uint) -0:21 Construct vec4 ( temp highp 4-component vector of float) -0:21 direct index ( temp highp float) -0:21 b1: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 1 (const uint) -0:21 Constant: -0:21 0 (const int) -0:21 direct index ( temp highp float) -0:21 b1: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 1 (const uint) -0:21 Constant: -0:21 1 (const int) -0:21 direct index ( temp highp float) -0:21 b2: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 2 (const uint) -0:21 Constant: -0:21 0 (const int) -0:21 direct index ( temp highp float) -0:21 b2: direct index for structure ( uniform highp 2-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 2 (const uint) -0:21 Constant: -0:21 1 (const int) -0:21 c1: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 3 (const uint) -0:21 d: direct index for structure ( uniform highp 4-component vector of float) -0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:21 Constant: -0:21 4 (const uint) -0:23 Branch: Return with expression -0:23 vector-scale ( temp highp 4-component vector of float) -0:23 Convert uint to float ( temp highp float) -0:23 'j' ( temp highp uint) -0:23 'v' ( temp highp 4-component vector of float) -0:26 Function Definition: main( ( global void) -0:26 Function Parameters: -0:27 Sequence -0:27 move second child to first child ( temp highp 4-component vector of float) -0:27 'o' ( out highp 4-component vector of float) -0:27 add ( temp highp 4-component vector of float) -0:27 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:27 Function Call: foo( ( global highp 4-component vector of float) -0:? Linker Objects -0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) -0:? 'o' ( out highp 4-component vector of float) -0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) -0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) - -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 88 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 72 80 86 - Source GLSL 460 - Name 4 "main" - Name 9 "foo(" - Name 13 "j" - Name 14 "gl_AtomicCounterBlock_0" - MemberName 14(gl_AtomicCounterBlock_0) 0 "counter3" - MemberName 14(gl_AtomicCounterBlock_0) 1 "counter2" - MemberName 14(gl_AtomicCounterBlock_0) 2 "counter1" - Name 16 "" - Name 31 "v" - Name 35 "gl_DefaultUniformBlock" - MemberName 35(gl_DefaultUniformBlock) 0 "a" - MemberName 35(gl_DefaultUniformBlock) 1 "b2" - MemberName 35(gl_DefaultUniformBlock) 2 "b1" - MemberName 35(gl_DefaultUniformBlock) 3 "c2" - MemberName 35(gl_DefaultUniformBlock) 4 "d" - MemberName 35(gl_DefaultUniformBlock) 5 "s" - MemberName 35(gl_DefaultUniformBlock) 6 "c1" - Name 37 "" - Name 67 "v" - Name 72 "gl_VertexID" - Name 80 "gl_InstanceID" - Name 86 "io" - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0 - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4 - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8 - Decorate 14(gl_AtomicCounterBlock_0) BufferBlock - Decorate 16 DescriptorSet 0 - Decorate 16 Binding 1 - Decorate 34 ArrayStride 16 - MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 - MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 - MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 - MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 - MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 - MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 - MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128 - Decorate 35(gl_DefaultUniformBlock) Block - Decorate 37 DescriptorSet 0 - Decorate 37 Binding 0 - Decorate 72(gl_VertexID) BuiltIn VertexIndex - Decorate 80(gl_InstanceID) BuiltIn InstanceIndex - Decorate 86(io) 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(gl_AtomicCounterBlock_0): TypeStruct 11(int) 11(int) 11(int) - 15: TypePointer Uniform 14(gl_AtomicCounterBlock_0) - 16: 15(ptr) Variable Uniform - 17: TypeInt 32 1 - 18: 17(int) Constant 1 - 19: TypePointer Uniform 11(int) - 21: 11(int) Constant 1 - 22: 11(int) Constant 0 - 24: 17(int) Constant 0 - 26: 11(int) Constant 4294967295 - 30: TypePointer Function 7(fvec4) - 32: TypeVector 6(float) 2 - 33: 11(int) Constant 4 - 34: TypeArray 7(fvec4) 33 -35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 32(fvec2) 32(fvec2) 7(fvec4) 7(fvec4) 34 7(fvec4) - 36: TypePointer Uniform 35(gl_DefaultUniformBlock) - 37: 36(ptr) Variable Uniform - 38: TypePointer Uniform 7(fvec4) - 41: 17(int) Constant 2 - 42: TypePointer Uniform 6(float) - 53: 17(int) Constant 3 - 57: 17(int) Constant 4 - 70: 17(int) Constant 5 - 71: TypePointer Input 17(int) - 72(gl_VertexID): 71(ptr) Variable Input - 77: TypePointer Function 6(float) -80(gl_InstanceID): 71(ptr) Variable Input - 85: TypePointer Output 7(fvec4) - 86(io): 85(ptr) Variable Output - 4(main): 2 Function None 3 - 5: Label - 67(v): 30(ptr) Variable Function - 68: 7(fvec4) FunctionCall 9(foo() - Store 67(v) 68 - 69: 7(fvec4) Load 67(v) - 73: 17(int) Load 72(gl_VertexID) - 74: 38(ptr) AccessChain 37 70 73 - 75: 7(fvec4) Load 74 - 76: 7(fvec4) FAdd 69 75 - Store 67(v) 76 - 78: 77(ptr) AccessChain 67(v) 22 - 79: 6(float) Load 78 - 81: 17(int) Load 80(gl_InstanceID) - 82: 6(float) ConvertSToF 81 - 83: 6(float) FSub 79 82 - 84: 77(ptr) AccessChain 67(v) 22 - Store 84 83 - 87: 7(fvec4) Load 67(v) - Store 86(io) 87 - Return - FunctionEnd - 9(foo(): 7(fvec4) Function None 8 - 10: Label - 13(j): 12(ptr) Variable Function - 31(v): 30(ptr) Variable Function - 20: 19(ptr) AccessChain 16 18 - 23: 11(int) AtomicIAdd 20 21 22 21 - 25: 19(ptr) AccessChain 16 24 - 27: 11(int) AtomicIAdd 25 21 22 26 - 28: 11(int) ISub 27 21 - 29: 11(int) IAdd 23 28 - Store 13(j) 29 - 39: 38(ptr) AccessChain 37 24 - 40: 7(fvec4) Load 39 - 43: 42(ptr) AccessChain 37 41 22 - 44: 6(float) Load 43 - 45: 42(ptr) AccessChain 37 41 21 - 46: 6(float) Load 45 - 47: 42(ptr) AccessChain 37 18 22 - 48: 6(float) Load 47 - 49: 42(ptr) AccessChain 37 18 21 - 50: 6(float) Load 49 - 51: 7(fvec4) CompositeConstruct 44 46 48 50 - 52: 7(fvec4) FAdd 40 51 - 54: 38(ptr) AccessChain 37 53 - 55: 7(fvec4) Load 54 - 56: 7(fvec4) FAdd 52 55 - 58: 38(ptr) AccessChain 37 57 - 59: 7(fvec4) Load 58 - 60: 7(fvec4) FAdd 56 59 - Store 31(v) 60 - 61: 11(int) Load 13(j) - 62: 6(float) ConvertUToF 61 - 63: 7(fvec4) Load 31(v) - 64: 7(fvec4) VectorTimesScalar 63 62 - ReturnValue 64 - FunctionEnd -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 74 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 68 70 - ExecutionMode 4 OriginUpperLeft - Source GLSL 460 - Name 4 "main" - Name 9 "foo(" - Name 13 "j" - Name 14 "gl_AtomicCounterBlock_0" - MemberName 14(gl_AtomicCounterBlock_0) 0 "counter3" - MemberName 14(gl_AtomicCounterBlock_0) 1 "counter2" - MemberName 14(gl_AtomicCounterBlock_0) 2 "counter1" - Name 16 "" - Name 31 "v" - Name 35 "gl_DefaultUniformBlock" - MemberName 35(gl_DefaultUniformBlock) 0 "a" - MemberName 35(gl_DefaultUniformBlock) 1 "b2" - MemberName 35(gl_DefaultUniformBlock) 2 "b1" - MemberName 35(gl_DefaultUniformBlock) 3 "c2" - MemberName 35(gl_DefaultUniformBlock) 4 "d" - MemberName 35(gl_DefaultUniformBlock) 5 "s" - MemberName 35(gl_DefaultUniformBlock) 6 "c1" - Name 37 "" - Name 68 "o" - Name 70 "io" - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0 - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4 - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent - MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8 - Decorate 14(gl_AtomicCounterBlock_0) BufferBlock - Decorate 16 DescriptorSet 0 - Decorate 16 Binding 1 - Decorate 34 ArrayStride 16 - MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 - MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 - MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 - MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 - MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 - MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 - MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128 - Decorate 35(gl_DefaultUniformBlock) Block - Decorate 37 DescriptorSet 0 - Decorate 37 Binding 0 - Decorate 68(o) Location 0 - Decorate 70(io) 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(gl_AtomicCounterBlock_0): TypeStruct 11(int) 11(int) 11(int) - 15: TypePointer Uniform 14(gl_AtomicCounterBlock_0) - 16: 15(ptr) Variable Uniform - 17: TypeInt 32 1 - 18: 17(int) Constant 2 - 19: TypePointer Uniform 11(int) - 21: 11(int) Constant 1 - 22: 11(int) Constant 0 - 24: 17(int) Constant 1 - 26: 11(int) Constant 4294967295 - 30: TypePointer Function 7(fvec4) - 32: TypeVector 6(float) 2 - 33: 11(int) Constant 4 - 34: TypeArray 7(fvec4) 33 -35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 32(fvec2) 32(fvec2) 7(fvec4) 7(fvec4) 34 7(fvec4) - 36: TypePointer Uniform 35(gl_DefaultUniformBlock) - 37: 36(ptr) Variable Uniform - 38: 17(int) Constant 0 - 39: TypePointer Uniform 7(fvec4) - 42: TypePointer Uniform 6(float) - 53: 17(int) Constant 6 - 57: 17(int) Constant 4 - 67: TypePointer Output 7(fvec4) - 68(o): 67(ptr) Variable Output - 69: TypePointer Input 7(fvec4) - 70(io): 69(ptr) Variable Input - 4(main): 2 Function None 3 - 5: Label - 71: 7(fvec4) Load 70(io) - 72: 7(fvec4) FunctionCall 9(foo() - 73: 7(fvec4) FAdd 71 72 - Store 68(o) 73 - Return - FunctionEnd - 9(foo(): 7(fvec4) Function None 8 - 10: Label - 13(j): 12(ptr) Variable Function - 31(v): 30(ptr) Variable Function - 20: 19(ptr) AccessChain 16 18 - 23: 11(int) AtomicIAdd 20 21 22 21 - 25: 19(ptr) AccessChain 16 24 - 27: 11(int) AtomicIAdd 25 21 22 26 - 28: 11(int) ISub 27 21 - 29: 11(int) IAdd 23 28 - Store 13(j) 29 - 40: 39(ptr) AccessChain 37 38 - 41: 7(fvec4) Load 40 - 43: 42(ptr) AccessChain 37 18 22 - 44: 6(float) Load 43 - 45: 42(ptr) AccessChain 37 18 21 - 46: 6(float) Load 45 - 47: 42(ptr) AccessChain 37 24 22 - 48: 6(float) Load 47 - 49: 42(ptr) AccessChain 37 24 21 - 50: 6(float) Load 49 - 51: 7(fvec4) CompositeConstruct 44 46 48 50 - 52: 7(fvec4) FAdd 41 51 - 54: 39(ptr) AccessChain 37 53 - 55: 7(fvec4) Load 54 - 56: 7(fvec4) FAdd 52 55 - 58: 39(ptr) AccessChain 37 57 - 59: 7(fvec4) Load 58 - 60: 7(fvec4) FAdd 56 59 - Store 31(v) 60 - 61: 11(int) Load 13(j) - 62: 6(float) ConvertUToF 61 - 63: 7(fvec4) Load 31(v) - 64: 7(fvec4) VectorTimesScalar 63 62 - ReturnValue 64 - FunctionEnd diff --git a/Test/iomap.crossStage.2.frag b/Test/iomap.crossStage.2.frag deleted file mode 100644 index 25756a6d0e..0000000000 --- a/Test/iomap.crossStage.2.frag +++ /dev/null @@ -1,42 +0,0 @@ -#version 460 - - -layout(location = 5) in outBlock { - vec4 o3; -}; - - -in vec4 gfo1; -in vec2 gfo2; - -out vec4 outColor; - -uniform vec2 u1; -uniform vec3 u2; // initializer present in vertex stage -uniform vec4 u3 = vec4(0); // initializer matches initializer in vertex stage - -uniform mat2 um2 = mat2(4.0); - -layout (location = 0, binding = 0) uniform sampler2D glass; - -uniform crossStageBlock1 { - uniform vec4 a; - vec4 b; -}; - -buffer fragOnlyBlock { - vec2 fb1; -}; - -uniform crossStageBlock2 { - uniform vec4 a; - vec2 b; -} blockName2 [2]; // instance name different from vert - - -void main() -{ - vec4 color = gfo1 * u1.rgrg * u2.rgbr * u3.rgba; // o1 is statically used - outColor = color; -} - diff --git a/Test/iomap.crossStage.2.geom b/Test/iomap.crossStage.2.geom deleted file mode 100644 index 91508ab5ef..0000000000 --- a/Test/iomap.crossStage.2.geom +++ /dev/null @@ -1,39 +0,0 @@ -#version 460 - -layout(points) in; -layout(triangle_strip, max_vertices=3) out; - -in vec4 vgo1[]; -in vec2 vgo2[]; - -layout(location = 5) in outBlock { - vec4 o3; -} inBlock[]; - -out vec4 gfo1; -out vec2 gfo2; - -layout(location = 5) out outBlock { - vec4 o3; -} gf_out; - -uniform vec2 u1; -uniform vec3 u2 = vec3(0); // initializer not present in fragment stage -uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage - -uniform crossStageBlock2 { - uniform vec4 a; - vec2 b; -} blockName1 [2]; // instance name different from frag - -void main() -{ - for (int i = 0; i < 3; i++) { - gfo1 = vec4(0); - gfo2 = vec2(0); - gf_out.o3 = inBlock[i].o3; - EmitVertex(); - } - EndPrimitive(); -} - diff --git a/Test/iomap.crossStage.2.vert b/Test/iomap.crossStage.2.vert deleted file mode 100644 index ebb0d9d1e2..0000000000 --- a/Test/iomap.crossStage.2.vert +++ /dev/null @@ -1,38 +0,0 @@ -#version 460 - -out vec4 vgo1; // declaration order different than fragment shader -out vec2 vgo2; // declaration order different than fragment shader - -layout(location = 5) out outBlock { - vec4 o3; -}; - -uniform vec2 u1; -uniform vec3 u2 = vec3(0); // initializer not present in fragment stage -uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage - -uniform mat2 um2 = mat2(4.0); - -layout (location = 0, binding = 0) uniform sampler2D glass; - -uniform crossStageBlock1 { - uniform vec4 a; - vec4 b; -}; - -buffer vertOnlyBlock { - vec2 vb1; -}; - -uniform crossStageBlock2 { - uniform vec4 a; - vec2 b; -} blockName1 [2]; // instance name different from frag - -void main() -{ - vgo1 = vec4(0); - vgo2 = vec2(0); - o3 = vec4(0); -} - diff --git a/Test/iomap.crossStage.frag b/Test/iomap.crossStage.frag deleted file mode 100644 index 16247032e3..0000000000 --- a/Test/iomap.crossStage.frag +++ /dev/null @@ -1,41 +0,0 @@ -#version 460 - - -layout(location = 5) in outBlock { - vec4 o3; -}; - -in vec2 o2; // declaration order different than vertex shader -in vec4 o1; // declaration order different than vertex shader - -out vec4 outColor; - -uniform vec2 u1; -uniform vec3 u2; // initializer present in vertex stage -uniform vec4 u3 = vec4(0); // initializer matches initializer in vertex stage - -uniform mat2 um2 = mat2(4.0); - -layout (location = 0, binding = 0) uniform sampler2D glass; - -uniform crossStageBlock1 { - uniform vec4 a; - vec4 b; -}; - -buffer fragOnlyBlock { - vec2 fb1; -}; - -uniform crossStageBlock2 { - uniform vec4 a; - vec2 b; -} blockName2 [2]; // instance name different from vert - - -void main() -{ - vec4 color = o1 * u1.rgrg * u2.rgbr * u3.rgba; // o1 is statically used - outColor = color; -} - diff --git a/Test/iomap.crossStage.vert b/Test/iomap.crossStage.vert deleted file mode 100644 index d05874ffae..0000000000 --- a/Test/iomap.crossStage.vert +++ /dev/null @@ -1,38 +0,0 @@ -#version 460 - -out vec4 o1; // declaration order different than fragment shader -out vec2 o2; // declaration order different than fragment shader - -layout(location = 5) out outBlock { - vec4 o3; -}; - -uniform vec2 u1; -uniform vec3 u2 = vec3(0); // initializer not present in fragment stage -uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage - -uniform mat2 um2 = mat2(4.0); - -layout (location = 0, binding = 0) uniform sampler2D glass; - -uniform crossStageBlock1 { - uniform vec4 a; - vec4 b; -}; - -buffer vertOnlyBlock { - vec2 vb1; -}; - -uniform crossStageBlock2 { - uniform vec4 a; - vec2 b; -} blockName1 [2]; // instance name different from frag - -void main() -{ - o1 = vec4(0); - o2 = vec2(0); - o3 = vec4(0); -} - diff --git a/Test/iomap.crossStage.vk.frag b/Test/iomap.crossStage.vk.frag deleted file mode 100644 index d09e687457..0000000000 --- a/Test/iomap.crossStage.vk.frag +++ /dev/null @@ -1,50 +0,0 @@ -#version 460 - - -layout(location = 5) in outBlock { - vec4 o3; -}; - - -in vec4 gfo1; -in vec2 gfo2; - -out vec4 outColor; - -layout (binding = 0) uniform sampler2D glass; - -uniform crossStageBlock1 { - uniform vec4 a; - vec4 b; -}; - -readonly buffer fragOnlyBlock { - vec2 fb1; -}; - -uniform crossStageBlock2 { - uniform vec4 a; - vec2 b; -} blockName2 [2]; // instance name different from vert - -vec2 Bar() { - return fb1 + - blockName2[0].b + - blockName2[1].b; -} - -vec4 Foo() { - return a + - b + - blockName2[0].a + - blockName2[1].a + - vec4(Bar(), 0.0, 0.0); -} - -void main() -{ - vec4 color = gfo1; // o1 is statically used - color = color + Foo(); - outColor = color; -} - diff --git a/Test/iomap.crossStage.vk.geom b/Test/iomap.crossStage.vk.geom deleted file mode 100644 index b951737363..0000000000 --- a/Test/iomap.crossStage.vk.geom +++ /dev/null @@ -1,35 +0,0 @@ -#version 460 - -layout(points) in; -layout(triangle_strip, max_vertices=3) out; - -in vec4 vgo1[]; -in vec2 vgo2[]; - -layout(location = 5) in outBlock { - vec4 o3; -} inBlock[]; - -out vec4 gfo1; -out vec2 gfo2; - -layout(location = 5) out outBlock { - vec4 o3; -} gf_out; - -uniform crossStageBlock2 { - uniform vec4 a; - vec2 b; -} blockName1 [2]; // instance name different from frag - -void main() -{ - for (int i = 0; i < 3; i++) { - gfo1 = vec4(0); - gfo2 = vec2(0); - gf_out.o3 = inBlock[i].o3; - EmitVertex(); - } - EndPrimitive(); -} - diff --git a/Test/iomap.crossStage.vk.vert b/Test/iomap.crossStage.vk.vert deleted file mode 100644 index e422131f2c..0000000000 --- a/Test/iomap.crossStage.vk.vert +++ /dev/null @@ -1,32 +0,0 @@ -#version 460 - -out vec4 vgo1; // declaration order different than fragment shader -out vec2 vgo2; // declaration order different than fragment shader - -layout(location = 5) out outBlock { - vec4 o3; -}; - -layout (binding = 0) uniform sampler2D glass; - -uniform crossStageBlock1 { - uniform vec4 a; - vec4 b; -}; - -readonly buffer vertOnlyBlock { - vec2 vb1; -}; - -uniform crossStageBlock2 { - uniform vec4 a; - vec2 b; -} blockName1 [2]; // instance name different from frag - -void main() -{ - vgo1 = vec4(0); - vgo2 = vec2(0); - o3 = vec4(0); -} - diff --git a/Test/vk.relaxed.errorcheck.frag b/Test/vk.relaxed.errorcheck.frag deleted file mode 100644 index b75b50b77f..0000000000 --- a/Test/vk.relaxed.errorcheck.frag +++ /dev/null @@ -1,16 +0,0 @@ -#version 460 - -layout (location = 0) in vec4 io; - -out vec4 o; - -// default uniforms will be gathered into a uniform block -uniform vec4 a; // declared in both stages with different types - -vec4 foo() { - return a; -} - -void main() { - o = io + foo(); -} \ No newline at end of file diff --git a/Test/vk.relaxed.errorcheck.vert b/Test/vk.relaxed.errorcheck.vert deleted file mode 100644 index b1bdbbecad..0000000000 --- a/Test/vk.relaxed.errorcheck.vert +++ /dev/null @@ -1,15 +0,0 @@ -#version 460 - -layout (location = 0) out vec4 io; - -// default uniforms will be gathered into a uniform block -// final global block will merge uniforms from all linked files -uniform vec2 a; // declared in both stages with different type - -vec4 foo() { - return a.xyxy; -} - -void main() { - io = foo(); -} \ No newline at end of file diff --git a/Test/vk.relaxed.frag b/Test/vk.relaxed.frag deleted file mode 100644 index d43416e0c0..0000000000 --- a/Test/vk.relaxed.frag +++ /dev/null @@ -1,74 +0,0 @@ -#version 460 - -out vec4 o; - -// default uniforms will be gathered into a uniform block -uniform vec4 a; -uniform vec2 b = vec2(0, 0); // initializer will be ignored -layout(location = 0) uniform vec2 c; // location qualifier will be ignored -uniform vec4 d[10]; -uniform struct e { - vec2 x; - float y; - uint z; -} structUniform; - -// opaque types will not be grouped into uniform block -uniform sampler2D t1; - -// shared and packed layout qualifier are silently ignored -layout(shared) uniform UniformBlock { - float j; - vec4 k; -}; - -layout(packed) buffer BufferBlock { - float j; - vec4 k; -} bufferInstance; - -// atomic_uint will be converted to uint and gathered in a buffer block -layout(binding = 0) uniform atomic_uint counter1; // offset not used -layout(binding = 0) uniform atomic_uint counter2; // offset not used -layout(binding = 1) uniform atomic_uint counter3; // offset not used - -// atomic counter functions will be converted to equivalent integer atomic operations -uint bar() { - uint j = 0; - j = atomicCounterIncrement(counter1); - j = atomicCounterDecrement(counter1); - j = atomicCounter(counter1); - - j = atomicCounterAdd(counter1, 1); - j = atomicCounterAdd(counter1, -1); - j = atomicCounterSubtract(counter1, 1); - - j = atomicCounterMin(counter1, j); - j = atomicCounterMax(counter1, j); - j = atomicCounterAnd(counter1, j); - - j = atomicCounterOr(counter1, j); - j = atomicCounterXor(counter1, j); - - j = atomicCounterExchange(counter1, j); - j = atomicCounterCompSwap(counter1, 0, j); - - atomicCounterIncrement(counter2); - atomicCounterIncrement(counter3); - - memoryBarrierAtomicCounter(); - - return j; -} - -vec4 foo() { - float f = j + bufferInstance.j + structUniform.y + structUniform.z; - vec2 v2 = b + c + structUniform.x; - vec4 v4 = a + d[0] + d[1] + d[2] + k + bufferInstance.k + texture(t1, vec2(0, 0)); - return vec4(f) * vec4(v2, 1, 1) * v4; -} - -void main() { - float j = float(bar()); - o = j * foo(); -} \ No newline at end of file diff --git a/Test/vk.relaxed.link1.frag b/Test/vk.relaxed.link1.frag deleted file mode 100644 index 95b609f225..0000000000 --- a/Test/vk.relaxed.link1.frag +++ /dev/null @@ -1,28 +0,0 @@ -#version 460 - -out vec4 o; - -// default uniforms will be gathered into a uniform block -// final global block will merge uniforms from all linked files -uniform vec4 a; // declared in both stages -uniform vec2 b1; // declaration order swapped in other stage -uniform vec2 b2; -uniform vec4 c1; // not delcared in other file -uniform vec4 d; - -// final global buffer will berge buffers from all linked files -layout (binding = 0) uniform atomic_uint counter1; -layout (binding = 0) uniform atomic_uint counter2; - -vec4 foo(); - -vec4 bar() { - uint j = atomicCounterIncrement(counter1) + atomicCounterDecrement(counter2); - vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c1 + d; - - return float(j) * v; -} - -void main() { - o = foo() + bar(); -} \ No newline at end of file diff --git a/Test/vk.relaxed.link2.frag b/Test/vk.relaxed.link2.frag deleted file mode 100644 index a4f468a4be..0000000000 --- a/Test/vk.relaxed.link2.frag +++ /dev/null @@ -1,19 +0,0 @@ -#version 460 - -// default uniforms will be gathered into a uniform block -// final global block will merge uniforms from all linked files -uniform vec4 a; // declared in both stages -uniform vec2 b2; // declaration order swapped in other stage -uniform vec2 b1; -uniform vec4 c2; // not delcared in other file -uniform vec4 d; - -layout (binding = 0) uniform atomic_uint counter3; -layout (binding = 0) uniform atomic_uint counter2; - -vec4 foo() { - uint j = atomicCounterIncrement(counter2) + atomicCounterDecrement(counter3); - vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c2 + d; - - return float(j) * v; -} \ No newline at end of file diff --git a/Test/vk.relaxed.stagelink.frag b/Test/vk.relaxed.stagelink.frag deleted file mode 100644 index d1eebba038..0000000000 --- a/Test/vk.relaxed.stagelink.frag +++ /dev/null @@ -1,28 +0,0 @@ -#version 460 - -layout (location = 0) in vec4 io; - -out vec4 o; - -// default uniforms will be gathered into a uniform block -// final global block will merge uniforms from all linked files -uniform vec4 a; // declared in both stages -uniform vec2 b1; // declaration order swapped in other stage -uniform vec2 b2; -uniform vec4 c1; // not delcared in other file -uniform vec4 d; - -// final global buffer will berge buffers from all linked files -layout (binding = 0) uniform atomic_uint counter1; -layout (binding = 0) uniform atomic_uint counter2; - -vec4 foo() { - uint j = atomicCounterIncrement(counter1) + atomicCounterDecrement(counter2); - vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c1 + d; - - return float(j) * v; -} - -void main() { - o = io + foo(); -} \ No newline at end of file diff --git a/Test/vk.relaxed.stagelink.vert b/Test/vk.relaxed.stagelink.vert deleted file mode 100644 index 52396ac523..0000000000 --- a/Test/vk.relaxed.stagelink.vert +++ /dev/null @@ -1,31 +0,0 @@ -#version 460 - -layout (location = 0) out vec4 io; - -// default uniforms will be gathered into a uniform block -// final global block will merge uniforms from all linked files -uniform vec4 a; // declared in both stages -uniform vec2 b2; // declaration order swapped in other stage -uniform vec2 b1; -uniform vec4 c2; // not delcared in other file -uniform vec4 d; - -uniform vec4 s[4]; - -layout (binding = 0) uniform atomic_uint counter3; -layout (binding = 0) uniform atomic_uint counter2; - -vec4 foo() { - uint j = atomicCounterIncrement(counter2) + atomicCounterDecrement(counter3); - vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c2 + d; - - return float(j) * v; -} - -void main() { - - vec4 v = foo(); - v = v + s[gl_VertexID]; - v.x = v.x - float(gl_InstanceID); - io = v; -} \ No newline at end of file diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index bb6d0bd856..603203db9a 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -501,7 +501,6 @@ class TQualifier { noContraction = false; nullInit = false; #endif - defaultBlock = false; } // drop qualifiers that don't belong in a temporary variable @@ -515,7 +514,6 @@ class TQualifier { specConstant = false; nonUniform = false; nullInit = false; - defaultBlock = false; clearLayout(); } @@ -574,7 +572,6 @@ class TQualifier { bool specConstant : 1; bool nonUniform : 1; bool explicitOffset : 1; - bool defaultBlock : 1; // default blocks with matching names have structures merged when linking #ifdef GLSLANG_WEB bool isWriteOnly() const { return false; } @@ -759,46 +756,6 @@ class TQualifier { } } - TBlockStorageClass getBlockStorage() const { - if (storage == EvqUniform && !isPushConstant()) { - return EbsUniform; - } - else if (storage == EvqUniform) { - return EbsPushConstant; - } - else if (storage == EvqBuffer) { - return EbsStorageBuffer; - } - return EbsNone; - } - - void setBlockStorage(TBlockStorageClass newBacking) { -#ifndef GLSLANG_WEB - layoutPushConstant = (newBacking == EbsPushConstant); -#endif - switch (newBacking) { - case EbsUniform : - if (layoutPacking == ElpStd430) { - // std430 would not be valid - layoutPacking = ElpStd140; - } - storage = EvqUniform; - break; - case EbsStorageBuffer : - storage = EvqBuffer; - break; -#ifndef GLSLANG_WEB - case EbsPushConstant : - storage = EvqUniform; - layoutSet = TQualifier::layoutSetEnd; - layoutBinding = TQualifier::layoutBindingEnd; - break; -#endif - default: - break; - } - } - #ifdef GLSLANG_WEB bool isPerView() const { return false; } bool isTaskMemory() const { return false; } @@ -895,7 +852,6 @@ class TQualifier { return hasNonXfbLayout() || hasXfb(); } - TLayoutMatrix layoutMatrix : 3; TLayoutPacking layoutPacking : 4; int layoutOffset; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 1440c205ec..85edd6358d 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -593,7 +593,6 @@ enum TOperator { EOpTime, EOpAtomicAdd, - EOpAtomicSubtract, EOpAtomicMin, EOpAtomicMax, EOpAtomicAnd, @@ -1136,8 +1135,6 @@ class TIntermTyped : public TIntermNode { virtual TBasicType getBasicType() const { return type.getBasicType(); } virtual TQualifier& getQualifier() { return type.getQualifier(); } virtual const TQualifier& getQualifier() const { return type.getQualifier(); } - virtual TArraySizes* getArraySizes() { return type.getArraySizes(); } - virtual const TArraySizes* getArraySizes() const { return type.getArraySizes(); } virtual void propagatePrecision(TPrecisionQualifier); virtual int getVectorSize() const { return type.getVectorSize(); } virtual int getMatrixCols() const { return type.getMatrixCols(); } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index a9e5af456a..c94a8a4b54 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1627,36 +1627,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "uint atomicCounterExchange(atomic_uint, uint);" "uint atomicCounterCompSwap(atomic_uint, uint, uint);" - "\n"); - } - } - else if (spvVersion.vulkanRelaxed) { - // - // Atomic counter functions act as aliases to normal atomic functions. - // replace definitions to take 'volatile coherent uint' instead of 'atomic_uint' - // and map to equivalent non-counter atomic op - // - if ((profile != EEsProfile && version >= 300) || - (profile == EEsProfile && version >= 310)) { - commonBuiltins.append( - "uint atomicCounterIncrement(volatile coherent uint);" - "uint atomicCounterDecrement(volatile coherent uint);" - "uint atomicCounter(volatile coherent uint);" - - "\n"); - } - if (profile != EEsProfile && version >= 460) { - commonBuiltins.append( - "uint atomicCounterAdd(volatile coherent uint, uint);" - "uint atomicCounterSubtract(volatile coherent uint, uint);" - "uint atomicCounterMin(volatile coherent uint, uint);" - "uint atomicCounterMax(volatile coherent uint, uint);" - "uint atomicCounterAnd(volatile coherent uint, uint);" - "uint atomicCounterOr(volatile coherent uint, uint);" - "uint atomicCounterXor(volatile coherent uint, uint);" - "uint atomicCounterExchange(volatile coherent uint, uint);" - "uint atomicCounterCompSwap(volatile coherent uint, uint, uint);" - "\n"); } } @@ -4154,7 +4124,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } #ifndef GLSLANG_WEB if ((profile != EEsProfile && version >= 420) || esBarrier) { - if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) { + if (spvVersion.vulkan == 0) { commonBuiltins.append("void memoryBarrierAtomicCounter();"); } commonBuiltins.append("void memoryBarrierImage();"); @@ -4878,13 +4848,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in int gl_VertexIndex;" "in int gl_InstanceIndex;" ); - - if (spvVersion.vulkan > 0 && version >= 140 && spvVersion.vulkanRelaxed) - stageBuiltins[EShLangVertex].append( - "in int gl_VertexID;" // declare with 'in' qualifier - "in int gl_InstanceID;" - ); - if (version >= 440) { stageBuiltins[EShLangVertex].append( "in int gl_BaseVertexARB;" @@ -4922,7 +4885,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "mediump float gl_PointSize;" // needs qualifier fixed later ); } else { - if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) + if (spvVersion.vulkan == 0) stageBuiltins[EShLangVertex].append( "in highp int gl_VertexID;" // needs qualifier fixed later "in highp int gl_InstanceID;" // needs qualifier fixed later @@ -7473,12 +7436,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable); } - if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { - // treat these built-ins as aliases of VertexIndex and InstanceIndex - BuiltInVariable("gl_VertexID", EbvVertexIndex, symbolTable); - BuiltInVariable("gl_InstanceID", EbvInstanceIndex, symbolTable); - } - if (profile != EEsProfile) { if (version >= 440) { symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters); @@ -8955,14 +8912,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter); symbolTable.relateToOperator("memoryBarrierImage", EOpMemoryBarrierImage); - if (spvVersion.vulkanRelaxed) { - // - // functions signature have been replaced to take uint operations on buffer variables - // remap atomic counter functions to atomic operations - // - symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierBuffer); - } - symbolTable.relateToOperator("atomicLoad", EOpAtomicLoad); symbolTable.relateToOperator("atomicStore", EOpAtomicStore); @@ -8970,20 +8919,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement); symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter); - if (spvVersion.vulkanRelaxed) { - // - // functions signature have been replaced to take uint operations - // remap atomic counter functions to atomic operations - // - // these atomic counter functions do not match signatures of glsl - // atomic functions, so they will be remapped to semantically - // equivalent functions in the parser - // - symbolTable.relateToOperator("atomicCounterIncrement", EOpNull); - symbolTable.relateToOperator("atomicCounterDecrement", EOpNull); - symbolTable.relateToOperator("atomicCounter", EOpNull); - } - symbolTable.relateToOperator("clockARB", EOpReadClockSubgroupKHR); symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR); @@ -9002,23 +8937,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCounterCompSwap); } - if (spvVersion.vulkanRelaxed) { - // - // functions signature have been replaced to take 'uint' instead of 'atomic_uint' - // remap atomic counter functions to non-counter atomic ops so - // functions act as aliases to non-counter atomic ops - // - symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicAdd); - symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicSubtract); - symbolTable.relateToOperator("atomicCounterMin", EOpAtomicMin); - symbolTable.relateToOperator("atomicCounterMax", EOpAtomicMax); - symbolTable.relateToOperator("atomicCounterAnd", EOpAtomicAnd); - symbolTable.relateToOperator("atomicCounterOr", EOpAtomicOr); - symbolTable.relateToOperator("atomicCounterXor", EOpAtomicXor); - symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicExchange); - symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCompSwap); - } - symbolTable.relateToOperator("fma", EOpFma); symbolTable.relateToOperator("frexp", EOpFrexp); symbolTable.relateToOperator("ldexp", EOpLdexp); diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index 02cca409e1..3efa27aca3 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -601,6 +601,7 @@ void TParseContextBase::parseSwizzleSelector(const TSourceLoc& loc, const TStrin selector.push_back(0); } +#ifdef ENABLE_HLSL // // Make the passed-in variable information become a member of the // global uniform block. If this doesn't exist yet, make it. @@ -645,67 +646,7 @@ void TParseContextBase::growGlobalUniformBlock(const TSourceLoc& loc, TType& mem ++firstNewMember; } - -void TParseContextBase::growAtomicCounterBlock(int binding, const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) { - // Make the atomic counter block, if not yet made. - const auto &at = atomicCounterBuffers.find(binding); - if (at == atomicCounterBuffers.end()) { - atomicCounterBuffers.insert({binding, (TVariable*)nullptr }); - atomicCounterBlockFirstNewMember.insert({binding, 0}); - } - - TVariable*& atomicCounterBuffer = atomicCounterBuffers[binding]; - int& bufferNewMember = atomicCounterBlockFirstNewMember[binding]; - - if (atomicCounterBuffer == nullptr) { - TQualifier blockQualifier; - blockQualifier.clear(); - blockQualifier.storage = EvqBuffer; - - char charBuffer[512]; - if (binding != TQualifier::layoutBindingEnd) { - snprintf(charBuffer, 512, "%s_%d", getAtomicCounterBlockName(), binding); - } else { - snprintf(charBuffer, 512, "%s_0", getAtomicCounterBlockName()); - } - - TType blockType(new TTypeList, *NewPoolTString(charBuffer), blockQualifier); - setUniformBlockDefaults(blockType); - blockType.getQualifier().layoutPacking = ElpStd430; - atomicCounterBuffer = new TVariable(NewPoolTString(""), blockType, true); - // If we arn't auto mapping bindings then set the block to use the same - // binding as what the atomic was set to use - if (!intermediate.getAutoMapBindings()) { - atomicCounterBuffer->getWritableType().getQualifier().layoutBinding = binding; - } - bufferNewMember = 0; - - atomicCounterBuffer->getWritableType().getQualifier().layoutSet = atomicCounterBlockSet; - } - - // Add the requested member as a member to the global block. - TType* type = new TType; - type->shallowCopy(memberType); - type->setFieldName(memberName); - if (typeList) - type->setStruct(typeList); - TTypeLoc typeLoc = {type, loc}; - atomicCounterBuffer->getType().getWritableStruct()->push_back(typeLoc); - - // Insert into the symbol table. - if (bufferNewMember == 0) { - // This is the first request; we need a normal symbol table insert - if (symbolTable.insert(*atomicCounterBuffer)) - trackLinkage(*atomicCounterBuffer); - else - error(loc, "failed to insert the global constant buffer", "buffer", ""); - } else { - // This is a follow-on request; we need to amend the first insert - symbolTable.amend(*atomicCounterBuffer, bufferNewMember); - } - - ++bufferNewMember; -} +#endif void TParseContextBase::finish() { diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 550fce6797..12d68a3e6c 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -225,108 +225,6 @@ void TParseContext::parserError(const char* s) error(getCurrentLoc(), "compilation terminated", "", ""); } -void TParseContext::growGlobalUniformBlock(const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) -{ - bool createBlock = globalUniformBlock == nullptr; - - if (createBlock) { - globalUniformBinding = intermediate.getGlobalUniformBinding(); - globalUniformSet = intermediate.getGlobalUniformSet(); - } - - // use base class function to create/expand block - TParseContextBase::growGlobalUniformBlock(loc, memberType, memberName, typeList); - - if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { - // check for a block storage override - TBlockStorageClass storageOverride = intermediate.getBlockStorageOverride(getGlobalUniformBlockName()); - TQualifier& qualifier = globalUniformBlock->getWritableType().getQualifier(); - qualifier.defaultBlock = true; - - if (storageOverride != EbsNone) { - if (createBlock) { - // Remap block storage - qualifier.setBlockStorage(storageOverride); - - // check that the change didn't create errors - blockQualifierCheck(loc, qualifier, false); - } - - // remap meber storage as well - memberType.getQualifier().setBlockStorage(storageOverride); - } - } -} - -void TParseContext::growAtomicCounterBlock(int binding, const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) -{ - bool createBlock = atomicCounterBuffers.find(binding) == atomicCounterBuffers.end(); - - if (createBlock) { - atomicCounterBlockSet = intermediate.getAtomicCounterBlockSet(); - } - - // use base class function to create/expand block - TParseContextBase::growAtomicCounterBlock(binding, loc, memberType, memberName, typeList); - TQualifier& qualifier = atomicCounterBuffers[binding]->getWritableType().getQualifier(); - qualifier.defaultBlock = true; - - if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { - // check for a Block storage override - TBlockStorageClass storageOverride = intermediate.getBlockStorageOverride(getAtomicCounterBlockName()); - - if (storageOverride != EbsNone) { - if (createBlock) { - // Remap block storage - - qualifier.setBlockStorage(storageOverride); - - // check that the change didn't create errors - blockQualifierCheck(loc, qualifier, false); - } - - // remap meber storage as well - memberType.getQualifier().setBlockStorage(storageOverride); - } - } -} - -const char* TParseContext::getGlobalUniformBlockName() const -{ - const char* name = intermediate.getGlobalUniformBlockName(); - if (std::string(name) == "") - return "gl_DefaultUniformBlock"; - else - return name; -} -void TParseContext::finalizeGlobalUniformBlockLayout(TVariable&) -{ -} -void TParseContext::setUniformBlockDefaults(TType& block) const -{ - block.getQualifier().layoutPacking = ElpStd140; - block.getQualifier().layoutMatrix = ElmColumnMajor; -} - - -const char* TParseContext::getAtomicCounterBlockName() const -{ - const char* name = intermediate.getAtomicCounterBlockName(); - if (std::string(name) == "") - return "gl_AtomicCounterBlock"; - else - return name; -} -void TParseContext::finalizeAtomicCounterBlockLayout(TVariable&) -{ -} - -void TParseContext::setAtomicCounterBlockDefaults(TType& block) const -{ - block.getQualifier().layoutPacking = ElpStd430; - block.getQualifier().layoutMatrix = ElmRowMajor; -} - void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& tokens) { #ifndef GLSLANG_WEB @@ -1237,14 +1135,6 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction { TIntermTyped* result = nullptr; - if (spvVersion.vulkan != 0 && spvVersion.vulkanRelaxed) { - // allow calls that are invalid in Vulkan Semantics to be invisibily - // remapped to equivalent valid functions - result = vkRelaxedRemapFunctionCall(loc, function, arguments); - if (result) - return result; - } - if (function->getBuiltInOp() == EOpArrayLength) result = handleLengthMethod(loc, function, arguments); else if (function->getBuiltInOp() != EOpNull) { @@ -1837,7 +1727,6 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& // Grab the semantics and storage class semantics from the operands, based on opcode switch (callNode.getOp()) { case EOpAtomicAdd: - case EOpAtomicSubtract: case EOpAtomicMin: case EOpAtomicMax: case EOpAtomicAnd: @@ -2287,7 +2176,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } case EOpAtomicAdd: - case EOpAtomicSubtract: case EOpAtomicMin: case EOpAtomicMax: case EOpAtomicAnd: @@ -3500,7 +3388,7 @@ void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& t if (type.containsNonOpaque()) { // Vulkan doesn't allow transparent uniforms outside of blocks - if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed) + if (spvVersion.vulkan > 0) vulkanRemoved(loc, "non-opaque uniforms outside a block"); // OpenGL wants locations on these (unless they are getting automapped) if (spvVersion.openGl > 0 && !type.getQualifier().hasLocation() && !intermediate.getAutoMapLocations()) @@ -5131,22 +5019,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } if (id == TQualifier::getLayoutPackingString(ElpPacked)) { - if (spvVersion.spv != 0) { - if (spvVersion.vulkanRelaxed) - return; // silently ignore qualifier - else - spvRemoved(loc, "packed"); - } + if (spvVersion.spv != 0) + spvRemoved(loc, "packed"); publicType.qualifier.layoutPacking = ElpPacked; return; } if (id == TQualifier::getLayoutPackingString(ElpShared)) { - if (spvVersion.spv != 0) { - if (spvVersion.vulkanRelaxed) - return; // silently ignore qualifier - else - spvRemoved(loc, "shared"); - } + if (spvVersion.spv != 0) + spvRemoved(loc, "shared"); publicType.qualifier.layoutPacking = ElpShared; return; } @@ -6048,7 +5928,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : ""); #endif } - if (type.isAtomic() && !spvVersion.vulkanRelaxed) { + if (type.isAtomic()) { if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", ""); return; @@ -6718,68 +6598,6 @@ const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc, return bestMatch; } -// -// Adjust function calls that aren't declared in Vulkan to a -// calls with equivalent effects -// -TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, TFunction* function, TIntermNode* arguments) -{ - TIntermTyped* result = nullptr; - -#ifndef GLSLANG_WEB - if (function->getBuiltInOp() != EOpNull) { - return nullptr; - } - - if (function->getName() == "atomicCounterIncrement") { - // change atomicCounterIncrement into an atomicAdd of 1 - TString name("atomicAdd"); - TType uintType(EbtUint); - - TFunction realFunc(&name, function->getType()); - - for (int i = 0; i < function->getParamCount(); ++i) { - realFunc.addParameter((*function)[i]); - } - - TParameter tmpP = { 0, &uintType }; - realFunc.addParameter(tmpP); - arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(1, loc, true)); - - result = handleFunctionCall(loc, &realFunc, arguments); - } else if (function->getName() == "atomicCounterDecrement") { - // change atomicCounterDecrement into an atomicAdd with -1 - // and subtract 1 from result, to return post-decrement value - TString name("atomicAdd"); - TType uintType(EbtUint); - - TFunction realFunc(&name, function->getType()); - - for (int i = 0; i < function->getParamCount(); ++i) { - realFunc.addParameter((*function)[i]); - } - - TParameter tmpP = { 0, &uintType }; - realFunc.addParameter(tmpP); - arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(-1, loc, true)); - - result = handleFunctionCall(loc, &realFunc, arguments); - - // post decrement, so that it matches AtomicCounterDecrement semantics - if (result) { - result = handleBinaryMath(loc, "-", EOpSub, result, intermediate.addConstantUnion(1, loc, true)); - } - } else if (function->getName() == "atomicCounter") { - // change atomicCounter into a direct read of the variable - if (arguments->getAsTyped()) { - result = arguments->getAsTyped(); - } - } -#endif - - return result; -} - // When a declaration includes a type, but not a variable name, it can be used // to establish defaults. void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType) @@ -6804,91 +6622,6 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType #endif } -bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString& identifier, const TPublicType&, - TArraySizes*, TIntermTyped* initializer, TType& type) -{ - if (parsingBuiltins || symbolTable.atBuiltInLevel() || !symbolTable.atGlobalLevel() || - type.getQualifier().storage != EvqUniform || - !(type.containsNonOpaque() -#ifndef GLSLANG_WEB - || type.getBasicType() == EbtAtomicUint -#endif - )) { - return false; - } - - if (type.getQualifier().hasLocation()) { - warn(loc, "ignoring layout qualifier for uniform", identifier.c_str(), "location"); - type.getQualifier().layoutLocation = TQualifier::layoutLocationEnd; - } - - if (initializer) { - warn(loc, "Ignoring initializer for uniform", identifier.c_str(), ""); - initializer = nullptr; - } - - if (type.isArray()) { - // do array size checks here - arraySizesCheck(loc, type.getQualifier(), type.getArraySizes(), initializer, false); - - if (arrayQualifierError(loc, type.getQualifier()) || arrayError(loc, type)) { - error(loc, "array param error", identifier.c_str(), ""); - } - } - - // do some checking on the type as it was declared - layoutTypeCheck(loc, type); - - int bufferBinding = TQualifier::layoutBindingEnd; - TVariable* updatedBlock = nullptr; - -#ifndef GLSLANG_WEB - // Convert atomic_uint into members of a buffer block - if (type.isAtomic()) { - type.setBasicType(EbtUint); - type.getQualifier().storage = EvqBuffer; - - type.getQualifier().volatil = true; - type.getQualifier().coherent = true; - - // xxTODO: use logic from fixOffset() to apply explicit member offset - bufferBinding = type.getQualifier().layoutBinding; - type.getQualifier().layoutBinding = TQualifier::layoutBindingEnd; - type.getQualifier().explicitOffset = false; - growAtomicCounterBlock(bufferBinding, loc, type, identifier, nullptr); - updatedBlock = atomicCounterBuffers[bufferBinding]; - } -#endif - - if (!updatedBlock) { - growGlobalUniformBlock(loc, type, identifier, nullptr); - updatedBlock = globalUniformBlock; - } - - // - // don't assign explicit member offsets here - // if any are assigned, need to be updated here and in the merge/link step - // fixBlockUniformOffsets(updatedBlock->getWritableType().getQualifier(), *updatedBlock->getWritableType().getWritableStruct()); - - // checks on update buffer object - layoutObjectCheck(loc, *updatedBlock); - - TSymbol* symbol = symbolTable.find(identifier); - - if (!symbol) { - if (updatedBlock == globalUniformBlock) - error(loc, "error adding uniform to default uniform block", identifier.c_str(), ""); - else - error(loc, "error adding atomic counter to atomic counter block", identifier.c_str(), ""); - return false; - } - - // merge qualifiers - mergeObjectLayoutQualifiers(updatedBlock->getWritableType().getQualifier(), type.getQualifier(), true); - - return true; -} - // // Do everything necessary to handle a variable (non-block) declaration. // Either redeclaring a variable, or making a new one, updating the symbol @@ -7000,14 +6733,6 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden if (symbol == nullptr) reservedErrorCheck(loc, identifier); - if (symbol == nullptr && spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { - bool remapped = vkRelaxedRemapUniformVariable(loc, identifier, publicType, arraySizes, initializer, type); - - if (remapped) { - return nullptr; - } - } - inheritGlobalDefaults(type.getQualifier()); // Declare the variable @@ -7900,8 +7625,6 @@ void TParseContext::inheritMemoryQualifiers(const TQualifier& from, TQualifier& void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes) { - if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) - blockStorageRemap(loc, blockName, currentBlockQualifier); blockStageIoCheck(loc, currentBlockQualifier); blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr); if (arraySizes != nullptr) { @@ -8191,17 +7914,6 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con trackLinkage(variable); } -// -// allow storage type of block to be remapped at compile time -// -void TParseContext::blockStorageRemap(const TSourceLoc&, const TString* instanceName, TQualifier& qualifier) -{ - TBlockStorageClass type = intermediate.getBlockStorageOverride(instanceName->c_str()); - if (type != EbsNone) { - qualifier.setBlockStorage(type); - } -} - // Do all block-declaration checking regarding the combination of in/out/uniform/buffer // with a particular stage. void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& qualifier) diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 6f00621af9..ad9b8d6acd 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -92,8 +92,7 @@ class TParseContextBase : public TParseVersions { limits(resources.limits), globalUniformBlock(nullptr), globalUniformBinding(TQualifier::layoutBindingEnd), - globalUniformSet(TQualifier::layoutSetEnd), - atomicCounterBlockSet(TQualifier::layoutSetEnd) + globalUniformSet(TQualifier::layoutSetEnd) { if (entryPoint != nullptr) sourceEntryPointName = *entryPoint; @@ -155,11 +154,10 @@ class TParseContextBase : public TParseVersions { extensionCallback(line, extension, behavior); } +#ifdef ENABLE_HLSL // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL) virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr); - - // Manage global buffer (used for backing atomic counters in GLSL when using relaxed Vulkan semantics) - virtual void growAtomicCounterBlock(int binding, const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr); +#endif // Potentially rename shader entry point function void renameShaderFunction(TString*& name) const @@ -232,24 +230,7 @@ class TParseContextBase : public TParseVersions { // override this to set the language-specific name virtual const char* getGlobalUniformBlockName() const { return ""; } virtual void setUniformBlockDefaults(TType&) const { } - virtual void finalizeGlobalUniformBlockLayout(TVariable&) {} - - // Manage the atomic counter block (used for atomic_uints with Vulkan-Relaxed) - TMap atomicCounterBuffers; - unsigned int atomicCounterBlockSet; - TMap atomicCounterBlockFirstNewMember; - // override this to set the language-specific name - virtual const char* getAtomicCounterBlockName() const { return ""; } - virtual void setAtomicCounterBlockDefaults(TType&) const {} - virtual void finalizeAtomicCounterBlockLayout(TVariable&) {} - bool isAtomicCounterBlock(const TSymbol& symbol) { - const TVariable* var = symbol.getAsVariable(); - if (!var) - return false; - const auto& at = atomicCounterBuffers.find(var->getType().getQualifier().layoutBinding); - return (at != atomicCounterBuffers.end() && (*at).second->getType() == var->getType()); - } - + virtual void finalizeGlobalUniformBlockLayout(TVariable&) { } virtual void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken, const char* szExtraInfoFormat, TPrefixType prefix, va_list args); @@ -312,9 +293,6 @@ class TParseContext : public TParseContextBase { bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false) override; void parserError(const char* s); // for bison's yyerror - virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr) override; - virtual void growAtomicCounterBlock(int binding, const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr) override; - void reservedErrorCheck(const TSourceLoc&, const TString&); void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op) override; bool lineContinuationCheck(const TSourceLoc&, bool endOfComment) override; @@ -362,10 +340,6 @@ class TParseContext : public TParseContextBase { void checkPrecisionQualifier(const TSourceLoc&, TPrecisionQualifier); void memorySemanticsCheck(const TSourceLoc&, const TFunction&, const TIntermOperator& callNode); - TIntermTyped* vkRelaxedRemapFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*); - // returns true if the variable was remapped to something else - bool vkRelaxedRemapUniformVariable(const TSourceLoc&, TString&, const TPublicType&, TArraySizes*, TIntermTyped*, TType&); - void assignError(const TSourceLoc&, const char* op, TString left, TString right); void unaryOpError(const TSourceLoc&, const char* op, TString operand); void binaryOpError(const TSourceLoc&, const char* op, TString left, TString right); @@ -443,7 +417,6 @@ class TParseContext : public TParseContextBase { TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset); void inheritMemoryQualifiers(const TQualifier& from, TQualifier& to); void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0); - void blockStorageRemap(const TSourceLoc&, const TString*, TQualifier&); void blockStageIoCheck(const TSourceLoc&, const TQualifier&); void blockQualifierCheck(const TSourceLoc&, const TQualifier&, bool instanceName); void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation); @@ -488,14 +461,6 @@ class TParseContext : public TParseContextBase { void finish() override; #endif - virtual const char* getGlobalUniformBlockName() const override; - virtual void finalizeGlobalUniformBlockLayout(TVariable&) override; - virtual void setUniformBlockDefaults(TType& block) const override; - - virtual const char* getAtomicCounterBlockName() const override; - virtual void finalizeAtomicCounterBlockLayout(TVariable&) override; - virtual void setAtomicCounterBlockDefaults(TType& block) const override; - public: // // Generally, bison productions, the scanner, and the PP need read/write access to these; just give them direct access diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 4b340eaa19..3f793a7434 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -159,7 +159,7 @@ int MapVersionToIndex(int version) return index; } -const int SpvVersionCount = 4; // index range in MapSpvVersionToIndex +const int SpvVersionCount = 3; // index range in MapSpvVersionToIndex int MapSpvVersionToIndex(const SpvVersion& spvVersion) { @@ -167,12 +167,8 @@ int MapSpvVersionToIndex(const SpvVersion& spvVersion) if (spvVersion.openGl > 0) index = 1; - else if (spvVersion.vulkan > 0) { - if (!spvVersion.vulkanRelaxed) - index = 2; - else - index = 3; - } + else if (spvVersion.vulkan > 0) + index = 2; assert(index < SpvVersionCount); @@ -727,7 +723,6 @@ void TranslateEnvironment(const TEnvironment* environment, EShMessages& messages break; case EShClientVulkan: spvVersion.vulkanGlsl = environment->input.dialectVersion; - spvVersion.vulkanRelaxed = environment->input.VulkanRulesRelaxed; break; case EShClientOpenGL: spvVersion.openGl = environment->input.dialectVersion; @@ -1873,15 +1868,6 @@ void TShader::setResourceSetBinding(const std::vector& base) { in void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); } #endif -void TShader::addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) { intermediate->addBlockStorageOverride(nameStr, backing); } - -void TShader::setGlobalUniformBlockName(const char* name) { intermediate->setGlobalUniformBlockName(name); } -void TShader::setGlobalUniformSet(unsigned int set) { intermediate->setGlobalUniformSet(set); } -void TShader::setGlobalUniformBinding(unsigned int binding) { intermediate->setGlobalUniformBinding(binding); } - -void TShader::setAtomicCounterBlockName(const char* name) { intermediate->setAtomicCounterBlockName(name); } -void TShader::setAtomicCounterBlockSet(unsigned int set) { intermediate->setAtomicCounterBlockSet(set); } - #ifdef ENABLE_HLSL // See comment above TDefaultHlslIoMapper in iomapper.cpp: void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); } @@ -1997,10 +1983,7 @@ bool TProgram::link(EShMessages messages) error = true; } - if (!error) { - if (! crossStageCheck(messages)) - error = true; - } + // TODO: Link: cross-stage error checking return ! error; } @@ -2077,64 +2060,6 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) return intermediate[stage]->getNumErrors() == 0; } -// -// Check that there are no errors in linker objects accross stages -// -// Return true if no errors. -// -bool TProgram::crossStageCheck(EShMessages) { - - // make temporary intermediates to hold the linkage symbols for each linking interface - // while we do the checks - // Independent interfaces are: - // all uniform variables and blocks - // all buffer blocks - // all in/out on a stage boundary - - TVector activeStages; - for (int s = 0; s < EShLangCount; ++s) { - if (intermediate[s]) - activeStages.push_back(intermediate[s]); - } - - // no extra linking if there is only one stage - if (! (activeStages.size() > 1)) - return true; - - // setup temporary tree to hold unfirom objects from different stages - TIntermediate* firstIntermediate = activeStages.front(); - TIntermediate uniforms(EShLangCount, - firstIntermediate->getVersion(), - firstIntermediate->getProfile()); - uniforms.setSpv(firstIntermediate->getSpv()); - - TIntermAggregate uniformObjects(EOpLinkerObjects); - TIntermAggregate root(EOpSequence); - root.getSequence().push_back(&uniformObjects); - uniforms.setTreeRoot(&root); - - bool error = false; - - // merge uniforms from all stages into a single intermediate - for (unsigned int i = 0; i < activeStages.size(); ++i) { - uniforms.mergeUniformObjects(*infoSink, *activeStages[i]); - } - error |= uniforms.getNumErrors() != 0; - - // copy final definition of global block back into each stage - for (unsigned int i = 0; i < activeStages.size(); ++i) { - activeStages[i]->mergeGlobalUniformBlocks(*infoSink, uniforms); - } - - // compare cross stage symbols for each stage boundary - for (unsigned int i = 1; i < activeStages.size(); ++i) { - activeStages[i - 1]->checkStageIO(*infoSink, *activeStages[i]); - error |= (activeStages[i - 1]->getNumErrors() != 0); - } - - return !error; -} - const char* TProgram::getInfoLog() { return infoSink->info.c_str(); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 7554bfd769..488c98c5cc 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -1273,7 +1273,7 @@ void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op) // Call for any operation removed because Vulkan SPIR-V is being generated. void TParseVersions::vulkanRemoved(const TSourceLoc& loc, const char* op) { - if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed) + if (spvVersion.vulkan > 0) error(loc, "not allowed when using GLSL for Vulkan", op, ""); } diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 25feb0b7bf..f377973a85 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -87,12 +87,11 @@ inline const char* ProfileName(EProfile profile) // The union of all requested rule sets will be applied. // struct SpvVersion { - SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0), vulkanRelaxed(false) {} + SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0) {} unsigned int spv; // the version of SPIR-V to target, as defined by "word 1" of the SPIR-V binary header int vulkanGlsl; // the version of GLSL semantics for Vulkan, from GL_KHR_vulkan_glsl, for "#define VULKAN XXX" int vulkan; // the version of Vulkan, for which SPIR-V execution environment rules to use int openGl; // the version of GLSL semantics for OpenGL, from GL_ARB_gl_spirv, for "#define GL_SPIRV XXX" - bool vulkanRelaxed; // relax changes to GLSL for Vulkan, allowing some GL-specific to be compiled to Vulkan SPIR-V target }; // diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index c718f949a7..5ce3e47280 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -886,7 +886,6 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpTime: out.debug << "time"; break; case EOpAtomicAdd: out.debug << "AtomicAdd"; break; - case EOpAtomicSubtract: out.debug << "AtomicSubtract"; break; case EOpAtomicMin: out.debug << "AtomicMin"; break; case EOpAtomicMax: out.debug << "AtomicMax"; break; case EOpAtomicAnd: out.debug << "AtomicAnd"; break; diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 7e12864f36..c42e74fa5f 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -210,8 +210,8 @@ struct TResolverUniformAdaptor { ent.newIndex = -1; const bool isValid = resolver.validateBinding(stage, ent); if (isValid) { - resolver.resolveSet(ent.stage, ent); resolver.resolveBinding(ent.stage, ent); + resolver.resolveSet(ent.stage, ent); resolver.resolveUniformLocation(ent.stage, ent); if (ent.newBinding != -1) { @@ -317,13 +317,15 @@ struct TResolverInOutAdaptor { }; // The class is used for reserving explicit uniform locations and ubo/ssbo/opaque bindings -// xxTODO: maybe this logic should be moved into the resolver's "validateInOut" and "validateUniform" struct TSymbolValidater { TSymbolValidater(TIoMapResolver& r, TInfoSink& i, TVarLiveMap* in[EShLangCount], TVarLiveMap* out[EShLangCount], TVarLiveMap* uniform[EShLangCount], bool& hadError, EProfile profile, int version) - : resolver(r) + : preStage(EShLangCount) + , currentStage(EShLangCount) + , nextStage(EShLangCount) + , resolver(r) , infoSink(i) , hadError(hadError) , profile(profile) @@ -436,23 +438,17 @@ struct TSymbolValidater TIntermSymbol* base = ent1.symbol; const TType& type = ent1.symbol->getType(); const TString& name = entKey.first; - TString mangleName1, mangleName2; EShLanguage stage = ent1.stage; - EShLanguage preStage, currentStage, nextStage; - - preStage = EShLangCount; - for (int i = stage - 1; i >= 0; i--) { - if (inVarMaps[i] != nullptr) { - preStage = static_cast(i); - break; - } - } - currentStage = stage; - nextStage = EShLangCount; - for (int i = stage + 1; i < EShLangCount; i++) { - if (inVarMaps[i] != nullptr) { - nextStage = static_cast(i); - break; + TString mangleName1, mangleName2; + if (currentStage != stage) { + preStage = currentStage; + currentStage = stage; + nextStage = EShLangCount; + for (int i = currentStage + 1; i < EShLangCount; i++) { + if (inVarMaps[i] != nullptr) { + nextStage = static_cast(i); + break; + } } } @@ -463,9 +459,6 @@ struct TSymbolValidater type.appendMangledName(mangleName1); } - - // basic checking that symbols match - // more extensive checking in the link stage if (base->getQualifier().storage == EvqVaryingIn) { // validate stage in; if (preStage == EShLangCount) @@ -491,7 +484,8 @@ struct TSymbolValidater if (ent2->second.symbol->getType().getQualifier().isArrayedIo(preStage)) { TType subType(ent2->second.symbol->getType(), 0); subType.appendMangledName(mangleName2); - } else { + } + else { ent2->second.symbol->getType().appendMangledName(mangleName2); } @@ -542,7 +536,8 @@ struct TSymbolValidater if (ent2->second.symbol->getType().getQualifier().isArrayedIo(nextStage)) { TType subType(ent2->second.symbol->getType(), 0); subType.appendMangledName(mangleName2); - } else { + } + else { ent2->second.symbol->getType().appendMangledName(mangleName2); } if (mangleName1 == mangleName2) @@ -555,7 +550,7 @@ struct TSymbolValidater } return; } - } else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant()) { + } else if (base->getQualifier().isUniformOrBuffer() && ! base->getQualifier().isPushConstant()) { // validate uniform type; for (int i = 0; i < EShLangCount; i++) { if (i != currentStage && outVarMaps[i] != nullptr) { @@ -563,7 +558,6 @@ struct TSymbolValidater if (ent2 != uniformVarMap[i]->end()) { ent2->second.symbol->getType().appendMangledName(mangleName2); if (mangleName1 != mangleName2) { - ent2->second.symbol->getType().sameElementType(type); TString err = "Invalid Uniform variable type : " + entKey.first; infoSink.info.message(EPrefixInternalError, err.c_str()); hadError = true; @@ -614,7 +608,8 @@ struct TSymbolValidater } TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], *uniformVarMap[EShLangCount]; - + // Use for mark pre stage, to get more interface symbol information. + EShLanguage preStage, currentStage, nextStage; // Use for mark current shader stage for resolver TIoMapResolver& resolver; TInfoSink& infoSink; @@ -754,18 +749,14 @@ TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate , nextOutputLocation(0) { memset(stageMask, false, sizeof(bool) * (EShLangCount + 1)); - memset(stageIntermediates, 0, sizeof(TIntermediate*) * (EShLangCount)); - stageIntermediates[intermediate.getStage()] = &intermediate; } -int TDefaultIoResolverBase::getBaseBinding(EShLanguage stage, TResourceType res, unsigned int set) const { - return stageIntermediates[stage] ? selectBaseBinding(stageIntermediates[stage]->getShiftBinding(res), stageIntermediates[stage]->getShiftBindingForSet(res, set)) - : selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set)); +int TDefaultIoResolverBase::getBaseBinding(TResourceType res, unsigned int set) const { + return selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set)); } -const std::vector& TDefaultIoResolverBase::getResourceSetBinding(EShLanguage stage) const { - return stageIntermediates[stage] ? stageIntermediates[stage]->getResourceSetBinding() - : intermediate.getResourceSetBinding(); +const std::vector& TDefaultIoResolverBase::getResourceSetBinding() const { + return intermediate.getResourceSetBinding(); } bool TDefaultIoResolverBase::doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); } @@ -806,14 +797,14 @@ int TDefaultIoResolverBase::getFreeSlot(int set, int base, int size) { return reserveSlot(set, base, size); } -int TDefaultIoResolverBase::resolveSet(EShLanguage stage, TVarEntryInfo& ent) { +int TDefaultIoResolverBase::resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); if (type.getQualifier().hasSet()) { return ent.newSet = type.getQualifier().layoutSet; } // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN) - if (getResourceSetBinding(stage).size() == 1) { - return ent.newSet = atoi(getResourceSetBinding(stage)[0].c_str()); + if (getResourceSetBinding().size() == 1) { + return ent.newSet = atoi(getResourceSetBinding()[0].c_str()); } return ent.newSet = 0; } @@ -934,7 +925,7 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf preStage = currentStage; currentStage = stage; } - // kick out if not doing this + // kick out of not doing this if (! doAutoLocationMapping()) { return ent.newLocation = -1; } @@ -1082,7 +1073,7 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn return ent.newLocation = location; } -int TDefaultGlslIoResolver::resolveBinding(EShLanguage stage, TVarEntryInfo& ent) { +int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); // On OpenGL arrays of opaque types take a separate binding for each element @@ -1095,32 +1086,30 @@ int TDefaultGlslIoResolver::resolveBinding(EShLanguage stage, TVarEntryInfo& ent // There is no 'set' qualifier in OpenGL shading language, each resource has its own // binding name space, so remap the 'set' to resource type which make each resource // binding is valid from 0 to MAX_XXRESOURCE_BINDINGS - int set = intermediate.getSpv().openGl != 0 ? resource : ent.newSet; - int resourceKey = set; + int set = resource; if (resource < EResCount) { if (type.getQualifier().hasBinding()) { - int newBinding = reserveSlot(resourceKey, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding, numBindings); - return ent.newBinding = newBinding; - - } else { + ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings); + return ent.newBinding; + } else if (ent.live && doAutoBindingMapping()) { // The resource in current stage is not declared with binding, but it is possible declared // with explicit binding in other stages, find the resourceSlotMap firstly to check whether // the resource has binding, don't need to allocate if it already has a binding bool hasBinding = false; - ent.newBinding = -1; // leave as -1 if it isn't set below - - if (! resourceSlotMap[resourceKey].empty()) { - TVarSlotMap::iterator iter = resourceSlotMap[resourceKey].find(name); - if (iter != resourceSlotMap[resourceKey].end()) { + if (! resourceSlotMap[resource].empty()) { + TVarSlotMap::iterator iter = resourceSlotMap[resource].find(name); + if (iter != resourceSlotMap[resource].end()) { hasBinding = true; ent.newBinding = iter->second; } } - if (!hasBinding && (ent.live && doAutoBindingMapping())) { + if (! hasBinding) { + TVarSlotMap varSlotMap; // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - int binding = getFreeSlot(resourceKey, getBaseBinding(stage, resource, set), numBindings); - resourceSlotMap[resourceKey][name] = binding; + int binding = getFreeSlot(resource, getBaseBinding(resource, set), numBindings); + varSlotMap[name] = binding; + resourceSlotMap[resource] = varSlotMap; ent.newBinding = binding; } return ent.newBinding; @@ -1222,20 +1211,16 @@ void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); - TResourceType resource = getResourceType(type); - int set = intermediate.getSpv().openGl != 0 ? resource : resolveSet(ent.stage, ent); - int resourceKey = set; - + int resource = getResourceType(type); if (type.getQualifier().hasBinding()) { - TVarSlotMap& varSlotMap = resourceSlotMap[resourceKey]; + TVarSlotMap& varSlotMap = resourceSlotMap[resource]; TVarSlotMap::iterator iter = varSlotMap.find(name); - int binding = type.getQualifier().layoutBinding + getBaseBinding(ent.stage, resource, set); - + int binding = type.getQualifier().layoutBinding; if (iter == varSlotMap.end()) { // Reserve the slots for the ubo, ssbo and opaques who has explicit binding - int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; + int numBindings = type.isSizedArray() ? type.getCumulativeArraySize() : 1; varSlotMap[name] = binding; - reserveSlot(resourceKey, binding, numBindings); + reserveSlot(resource, binding, numBindings); } else { // Allocate binding by name for OpenGL driver, so the resource in different // stages should be declared with the same binding @@ -1284,7 +1269,7 @@ struct TDefaultIoResolver : public TDefaultIoResolverBase { return EResCount; } - int resolveBinding(EShLanguage stage, TVarEntryInfo& ent) override { + int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override { const TType& type = ent.symbol->getType(); const int set = getLayoutSet(type); // On OpenGL arrays of opaque types take a seperate binding for each element @@ -1293,11 +1278,11 @@ struct TDefaultIoResolver : public TDefaultIoResolverBase { if (resource < EResCount) { if (type.getQualifier().hasBinding()) { return ent.newBinding = reserveSlot( - set, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding, numBindings); + set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings); } else if (ent.live && doAutoBindingMapping()) { // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - return ent.newBinding = getFreeSlot(set, getBaseBinding(stage, resource, set), numBindings); + return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set), numBindings); } } return ent.newBinding = -1; @@ -1369,17 +1354,17 @@ struct TDefaultHlslIoResolver : public TDefaultIoResolverBase { return EResCount; } - int resolveBinding(EShLanguage stage, TVarEntryInfo& ent) override { + int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override { const TType& type = ent.symbol->getType(); const int set = getLayoutSet(type); TResourceType resource = getResourceType(type); if (resource < EResCount) { if (type.getQualifier().hasBinding()) { - return ent.newBinding = reserveSlot(set, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding); + return ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding); } else if (ent.live && doAutoBindingMapping()) { // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - return ent.newBinding = getFreeSlot(set, getBaseBinding(stage, resource, set)); + return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set)); } } return ent.newBinding = -1; @@ -1418,10 +1403,10 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi else resolver = &defaultResolver; } + resolver->addStage(stage); #else resolver = &defaultResolver; #endif - resolver->addStage(stage, intermediate); TVarLiveMap inVarMap, outVarMap, uniformVarMap; TVarLiveVector inVector, outVector, uniformVector; @@ -1517,21 +1502,10 @@ bool TGlslIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TIn } // if no resolver is provided, use the default resolver with the given shifts and auto map settings TDefaultGlslIoResolver defaultResolver(intermediate); -#ifdef ENABLE_HLSL - TDefaultHlslIoResolver defaultHlslResolver(intermediate); - if (resolver == nullptr) { - // TODO: use a passed in IO mapper for this - if (intermediate.usingHlslIoMapping()) - resolver = &defaultHlslResolver; - else - resolver = &defaultResolver; - } -#else if (resolver == nullptr) { resolver = &defaultResolver; } -#endif - resolver->addStage(stage, intermediate); + resolver->addStage(stage); inVarMaps[stage] = new TVarLiveMap(); outVarMaps[stage] = new TVarLiveMap(); uniformVarMap[stage] = new TVarLiveMap(); TVarGatherTraverser iter_binding_all(intermediate, true, *inVarMaps[stage], *outVarMaps[stage], *uniformVarMap[stage]); @@ -1573,51 +1547,15 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { TResolverInOutAdaptor inOutResolve(EShLangCount, *resolver, infoSink, hadError); TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, outVarMaps, uniformVarMap, hadError, profile, version); - - TVarLiveVector inVectors[EShLangCount]; - TVarLiveVector outVectors[EShLangCount]; TVarLiveVector uniformVector; - resolver->beginResolve(EShLangCount); for (int stage = EShLangVertex; stage < EShLangCount; stage++) { if (inVarMaps[stage] != nullptr) { inOutResolve.setStage(EShLanguage(stage)); - - // copy vars into a sorted list - std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), - [&inVectors, stage](TVarLivePair p) { inVectors[stage].push_back(p); }); - std::sort(inVectors[stage].begin(), inVectors[stage].end(), - [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { - return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); - }); - - std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), - [&outVectors, stage](TVarLivePair p) { outVectors[stage].push_back(p); }); - std::sort(outVectors[stage].begin(), outVectors[stage].end(), - [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { - return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); - }); - - for (auto& var : inVectors[stage]) { symbolValidater(var); } - for (auto& var : inVectors[stage]) { inOutResolve(var); } - for (auto& var : outVectors[stage]) { symbolValidater(var); } - for (auto& var : outVectors[stage]) { inOutResolve(var); } - - // copy results back into maps - std::for_each(inVectors[stage].begin(), inVectors[stage].end(), - [this, stage](TVarLivePair p) { - auto at = inVarMaps[stage]->find(p.first); - if (at != inVarMaps[stage]->end()) - at->second = p.second; - }); - - std::for_each(outVectors[stage].begin(), outVectors[stage].end(), - [this, stage](TVarLivePair p) { - auto at = outVarMaps[stage]->find(p.first); - if (at != outVarMaps[stage]->end()) - at->second = p.second; - }); - + for (auto& var : *(inVarMaps[stage])) { symbolValidater(var); } + for (auto& var : *(inVarMaps[stage])) { inOutResolve(var); } + for (auto& var : *(outVarMaps[stage])) { symbolValidater(var); } + for (auto& var : *(outVarMaps[stage])) { inOutResolve(var); } } if (uniformVarMap[stage] != nullptr) { uniformResolve.setStage(EShLanguage(stage)); @@ -1625,7 +1563,7 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { } } std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { - return TVarEntryInfo::TOrderByPriorityAndLive()(p1.second, p2.second); + return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); }); for (auto& var : uniformVector) { symbolValidater(var); } for (auto& var : uniformVector) { uniformResolve(var); } diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 07357c2ef4..1dce8ff54b 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -87,35 +87,6 @@ struct TVarEntryInfo { return lPoints > rPoints; } }; - - struct TOrderByPriorityAndLive { - // ordering: - // 1) do live variables first - // 2) has both binding and set - // 3) has binding but no set - // 4) has no binding but set - // 5) has no binding and no set - inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { - - const TQualifier& lq = l.symbol->getQualifier(); - const TQualifier& rq = r.symbol->getQualifier(); - - // simple rules: - // has binding gives 2 points - // has set gives 1 point - // who has the most points is more important. - int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); - int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); - - if (l.live != r.live) - return l.live > r.live; - - if (lPoints != rPoints) - return lPoints > rPoints; - - return l.id < r.id; - } - }; }; // Base class for shared TIoMapResolver services, used by several derivations. @@ -136,8 +107,8 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { void endCollect(EShLanguage) override {} void reserverResourceSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {} void reserverStorageSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {} - int getBaseBinding(EShLanguage stage, TResourceType res, unsigned int set) const; - const std::vector& getResourceSetBinding(EShLanguage stage) const; + int getBaseBinding(TResourceType res, unsigned int set) const; + const std::vector& getResourceSetBinding() const; virtual TResourceType getResourceType(const glslang::TType& type) = 0; bool doAutoBindingMapping() const; bool doAutoLocationMapping() const; @@ -151,11 +122,9 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override; int resolveInOutComponent(EShLanguage /*stage*/, TVarEntryInfo& ent) override; int resolveInOutIndex(EShLanguage /*stage*/, TVarEntryInfo& ent) override; - void addStage(EShLanguage stage, TIntermediate& stageIntermediate) override { - if (stage < EShLangCount) { + void addStage(EShLanguage stage) override { + if (stage < EShLangCount) stageMask[stage] = true; - stageIntermediates[stage] = &stageIntermediate; - } } uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage); @@ -170,8 +139,6 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { int nextInputLocation; int nextOutputLocation; bool stageMask[EShLangCount + 1]; - const TIntermediate* stageIntermediates[EShLangCount]; - // Return descriptor set specific base if there is one, and the generic base otherwise. int selectBaseBinding(int base, int descriptorSetBase) const { return descriptorSetBase != -1 ? descriptorSetBase : base; diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 789dc3c308..3f3a3127c3 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -90,55 +90,6 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) #endif } -// -// check that link objects between stages -// -void TIntermediate::mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit) { - if (unit.treeRoot == nullptr || treeRoot == nullptr) - return; - - // Get the linker-object lists - TIntermSequence& linkerObjects = findLinkerObjects()->getSequence(); - TIntermSequence unitLinkerObjects = unit.findLinkerObjects()->getSequence(); - - // filter unitLinkerObjects to only contain uniforms - auto end = std::remove_if(unitLinkerObjects.begin(), unitLinkerObjects.end(), - [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqUniform && - node->getAsSymbolNode()->getQualifier().storage != EvqBuffer; }); - unitLinkerObjects.resize(end - unitLinkerObjects.begin()); - - // merge uniforms and do error checking - mergeGlobalUniformBlocks(infoSink, unit); - mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); -} - -// -// do error checking on the shader boundary in / out vars -// -void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) { - if (unit.treeRoot == nullptr || treeRoot == nullptr) - return; - - // Get copies of the linker-object lists - TIntermSequence linkerObjects = findLinkerObjects()->getSequence(); - TIntermSequence unitLinkerObjects = unit.findLinkerObjects()->getSequence(); - - // filter linkerObjects to only contain out variables - auto end = std::remove_if(linkerObjects.begin(), linkerObjects.end(), - [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqVaryingOut; }); - linkerObjects.resize(end - linkerObjects.begin()); - - // filter unitLinkerObjects to only contain in variables - auto unitEnd = std::remove_if(unitLinkerObjects.begin(), unitLinkerObjects.end(), - [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqVaryingIn; }); - unitLinkerObjects.resize(unitEnd - unitLinkerObjects.begin()); - - // do matching and error checking - mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); - - // TODO: final check; make sure that any statically used `in` have matching `out` written to -} - void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit) { if (unit.getNumEntryPoints() > 0) { @@ -186,7 +137,6 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_MAX(spvVersion.vulkanGlsl); MERGE_MAX(spvVersion.vulkan); MERGE_MAX(spvVersion.openGl); - MERGE_TRUE(spvVersion.vulkanRelaxed); numErrors += unit.getNumErrors(); // Only one push_constant is allowed, mergeLinkerObjects() will ensure the push_constant @@ -362,8 +312,7 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit) remapIds(idMaps, idShift + 1, unit); mergeBodies(infoSink, globals, unitGlobals); - mergeGlobalUniformBlocks(infoSink, unit); - mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); + mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects); ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end()); } @@ -507,193 +456,11 @@ void TIntermediate::mergeBodies(TInfoSink& infoSink, TIntermSequence& globals, c globals.insert(globals.end() - 1, unitGlobals.begin(), unitGlobals.end() - 1); } -static inline bool isSameInterface(TIntermSymbol* symbol, EShLanguage stage, TIntermSymbol* unitSymbol, EShLanguage unitStage) { - return // 1) same stage and same shader interface - (stage == unitStage && symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) || - // 2) accross stages and both are uniform or buffer - (symbol->getQualifier().storage == EvqUniform && unitSymbol->getQualifier().storage == EvqUniform) || - (symbol->getQualifier().storage == EvqBuffer && unitSymbol->getQualifier().storage == EvqBuffer) || - // 3) in/out matched across stage boundary - (stage < unitStage && symbol->getQualifier().storage == EvqVaryingOut && unitSymbol->getQualifier().storage == EvqVaryingIn) || - (unitStage < stage && symbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().storage == EvqVaryingOut); -} - -// -// Global Unfiform block stores any default uniforms (i.e. uniforms without a block) -// If two linked stages declare the same member, they are meant to be the same uniform -// and need to be in the same block -// merge the members of different stages to allow them to be linked properly -// as a single block -// -void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit) -{ - TIntermSequence& linkerObjects = findLinkerObjects()->getSequence(); - TIntermSequence& unitLinkerObjects = unit.findLinkerObjects()->getSequence(); - - // build lists of default blocks from the intermediates - TIntermSequence defaultBlocks; - TIntermSequence unitDefaultBlocks; - - auto filter = [](TIntermSequence& list, TIntermNode* node) { - if (node->getAsSymbolNode()->getQualifier().defaultBlock) { - list.push_back(node); - } - }; - - std::for_each(linkerObjects.begin(), linkerObjects.end(), - [&defaultBlocks, &filter](TIntermNode* node) { - filter(defaultBlocks, node); - }); - std::for_each(unitLinkerObjects.begin(), unitLinkerObjects.end(), - [&unitDefaultBlocks, &filter](TIntermNode* node) { - filter(unitDefaultBlocks, node); - }); - - auto itUnitBlock = unitDefaultBlocks.begin(); - for (; itUnitBlock != unitDefaultBlocks.end(); itUnitBlock++) { - - bool add = true; - auto itBlock = defaultBlocks.begin(); - - for (; itBlock != defaultBlocks.end(); itBlock++) { - TIntermSymbol* block = (*itBlock)->getAsSymbolNode(); - TIntermSymbol* unitBlock = (*itUnitBlock)->getAsSymbolNode(); - - assert(block && unitBlock); - - // if the two default blocks match, then merge their definitions - if (block->getType().getTypeName() == unitBlock->getType().getTypeName() && - block->getQualifier().storage == unitBlock->getQualifier().storage) { - add = false; - mergeBlockDefinitions(infoSink, block, unitBlock, &unit); - } - } - if (add) { - // push back on original list; won't change the size of the list we're iterating over - linkerObjects.push_back(*itUnitBlock); - } - } -} - -void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unit) { - if (block->getType() == unitBlock->getType()) { - return; - } - - if (block->getType().getTypeName() != unitBlock->getType().getTypeName() || - block->getType().getBasicType() != unitBlock->getType().getBasicType() || - block->getQualifier().storage != unitBlock->getQualifier().storage || - block->getQualifier().layoutSet != unitBlock->getQualifier().layoutSet) { - // different block names likely means different blocks - return; - } - - // merge the struct - // order of declarations doesn't matter and they matched based on member name - TTypeList* memberList = block->getType().getWritableStruct(); - TTypeList* unitMemberList = unitBlock->getType().getWritableStruct(); - - // keep track of which members have changed position - // so we don't have to search the array again - std::map memberIndexUpdates; - - size_t memberListStartSize = memberList->size(); - for (unsigned int i = 0; i < unitMemberList->size(); ++i) { - bool merge = true; - for (unsigned int j = 0; j < memberListStartSize; ++j) { - if ((*memberList)[j].type->getFieldName() == (*unitMemberList)[i].type->getFieldName()) { - merge = false; - const TType* memberType = (*memberList)[j].type; - const TType* unitMemberType = (*unitMemberList)[i].type; - - // compare types - // don't need as many checks as when merging symbols, since - // initializers and most qualifiers are stripped when the member is moved into the block - if ((*memberType) != (*unitMemberType)) { - error(infoSink, "Types must match:"); - infoSink.info << " " << memberType->getFieldName() << ": "; - infoSink.info << "\"" << memberType->getCompleteString() << "\" versus "; - infoSink.info << "\"" << unitMemberType->getCompleteString() << "\"\n"; - } - - memberIndexUpdates[i] = j; - } - } - if (merge) { - memberList->push_back((*unitMemberList)[i]); - memberIndexUpdates[i] = (unsigned int)memberList->size() - 1; - } - } - - TType unitType; - unitType.shallowCopy(unitBlock->getType()); - - // update symbol node in unit tree, - // and other nodes that may reference it - class TMergeBlockTraverser : public TIntermTraverser { - public: - TMergeBlockTraverser(const glslang::TType &type, const glslang::TType& unitType, - glslang::TIntermediate& unit, - const std::map& memberIdxUpdates) : - newType(type), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates) - { } - virtual ~TMergeBlockTraverser() { } - - const glslang::TType& newType; // type with modifications - const glslang::TType& unitType; // copy of original type - glslang::TIntermediate& unit; // intermediate that is being updated - const std::map& memberIndexUpdates; - - virtual void visitSymbol(TIntermSymbol* symbol) - { - glslang::TType& symType = symbol->getWritableType(); - - if (symType == unitType) { - // each symbol node has a local copy of the unitType - // if merging involves changing properties that aren't shared objects - // they should be updated in all instances - - // e.g. the struct list is a ptr to an object, so it can be updated - // once, outside the traverser - //*symType.getWritableStruct() = *newType.getStruct(); - } - - } - - virtual bool visitBinary(TVisit, glslang::TIntermBinary* node) - { - if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == unitType) { - // this is a dereference to a member of the block since the - // member list changed, need to update this to point to the - // right index - assert(node->getRight()->getAsConstantUnion()); - - glslang::TIntermConstantUnion* constNode = node->getRight()->getAsConstantUnion(); - unsigned int memberIdx = constNode->getConstArray()[0].getUConst(); - unsigned int newIdx = memberIndexUpdates.at(memberIdx); - TIntermTyped* newConstNode = unit.addConstantUnion(newIdx, node->getRight()->getLoc()); - - node->setRight(newConstNode); - delete constNode; - - return true; - } - return true; - } - } finalLinkTraverser(block->getType(), unitType, *unit, memberIndexUpdates); - - // update the tree to use the new type - unit->getTreeRoot()->traverse(&finalLinkTraverser); - - // update the member list - (*unitMemberList) = (*memberList); -} - // // Merge the linker objects from unitLinkerObjects into linkerObjects. // Duplication is expected and filtered out, but contradictions are an error. // -void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects, EShLanguage unitStage) +void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects) { // Error check and merge the linker objects (duplicates should not be created) std::size_t initialNumLinkerObjects = linkerObjects.size(); @@ -708,7 +475,7 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin // If they are both blocks in the same shader interface, // match by the block-name, not the identifier name. if (symbol->getType().getBasicType() == EbtBlock && unitSymbol->getType().getBasicType() == EbtBlock) { - if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) { + if (symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) { isSameSymbol = symbol->getType().getTypeName() == unitSymbol->getType().getTypeName(); } } @@ -728,54 +495,18 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin if (! symbol->getQualifier().hasBinding() && unitSymbol->getQualifier().hasBinding()) symbol->getQualifier().layoutBinding = unitSymbol->getQualifier().layoutBinding; - // Similarly for location - if (!symbol->getQualifier().hasLocation() && unitSymbol->getQualifier().hasLocation()) { - symbol->getQualifier().layoutLocation = unitSymbol->getQualifier().layoutLocation; - } - // Update implicit array sizes mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType()); // Check for consistent types/qualification/initializers etc. - mergeErrorCheck(infoSink, *symbol, *unitSymbol, unitStage); + mergeErrorCheck(infoSink, *symbol, *unitSymbol, false); } // If different symbols, verify they arn't push_constant since there can only be one per stage - else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant() && getStage() == unitStage) + else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant()) error(infoSink, "Only one push_constant block is allowed per stage"); } - if (merge) { + if (merge) linkerObjects.push_back(unitLinkerObjects[unitLinkObj]); - - // for anonymous blocks, check that their members don't conflict with other names - if (unitLinkerObjects[unitLinkObj]->getAsSymbolNode()->getBasicType() == EbtBlock && - IsAnonymous(unitLinkerObjects[unitLinkObj]->getAsSymbolNode()->getName())) { - for (std::size_t linkObj = 0; linkObj < initialNumLinkerObjects; ++linkObj) { - TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode(); - TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); - assert(symbol && unitSymbol); - - auto checkName = [this, unitSymbol, &infoSink](const TString& name) { - for (unsigned int i = 0; i < unitSymbol->getType().getStruct()->size(); ++i) { - if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName()) { - error(infoSink, "Anonymous member name used for global variable or other anonymous member: "); - infoSink.info << (*unitSymbol->getType().getStruct())[i].type->getCompleteString() << "\n"; - } - } - }; - - if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) { - checkName(symbol->getName()); - - // check members of other anonymous blocks - if (symbol->getBasicType() == EbtBlock && IsAnonymous(symbol->getName())) { - for (unsigned int i = 0; i < symbol->getType().getStruct()->size(); ++i) { - checkName((*symbol->getType().getStruct())[i].type->getFieldName()); - } - } - } - } - } - } } } @@ -807,74 +538,26 @@ void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType) // // This function only does one of intra- or cross-stage matching per call. // -void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, EShLanguage unitStage) +void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage) { #if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) - bool crossStage = getStage() != unitStage; bool writeTypeComparison = false; // Types have to match - { + if (symbol.getType() != unitSymbol.getType()) { // but, we make an exception if one is an implicit array and the other is sized - // or if the array sizes differ because of the extra array dimension on some in/out boundaries - bool arraysMatch = false; - if (isIoResizeArray(symbol.getType(), getStage()) || isIoResizeArray(unitSymbol.getType(), unitStage)) { - // if the arrays have an extra dimension because of the stage. - // compare dimensions while ignoring the outer dimension - unsigned int firstDim = isIoResizeArray(symbol.getType(), getStage()) ? 1 : 0; - unsigned int numDim = symbol.getArraySizes() - ? symbol.getArraySizes()->getNumDims() : 0; - unsigned int unitFirstDim = isIoResizeArray(unitSymbol.getType(), unitStage) ? 1 : 0; - unsigned int unitNumDim = unitSymbol.getArraySizes() - ? unitSymbol.getArraySizes()->getNumDims() : 0; - arraysMatch = (numDim - firstDim) == (unitNumDim - unitFirstDim); - // check that array sizes match as well - for (unsigned int i = 0; i < (numDim - firstDim) && arraysMatch; i++) { - if (symbol.getArraySizes()->getDimSize(firstDim + i) != - unitSymbol.getArraySizes()->getDimSize(unitFirstDim + i)) { - arraysMatch = false; - break; - } - } - } - else { - arraysMatch = symbol.getType().sameArrayness(unitSymbol.getType()) || - (symbol.getType().isArray() && unitSymbol.getType().isArray() && - (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray())); - } - - if (!symbol.getType().sameElementType(unitSymbol.getType()) || - !symbol.getType().sameTypeParameters(unitSymbol.getType()) || - !arraysMatch ) { - writeTypeComparison = true; + if (! (symbol.getType().isArray() && unitSymbol.getType().isArray() && + symbol.getType().sameElementType(unitSymbol.getType()) && + (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray()))) { error(infoSink, "Types must match:"); - } - } - - // Interface block member-wise layout qualifiers have to match - if (symbol.getType().getBasicType() == EbtBlock && unitSymbol.getType().getBasicType() == EbtBlock && - symbol.getType().getStruct() && unitSymbol.getType().getStruct() && - symbol.getType().sameStructType(unitSymbol.getType())) { - for (unsigned int i = 0; i < symbol.getType().getStruct()->size(); ++i) { - const TQualifier& qualifier = (*symbol.getType().getStruct())[i].type->getQualifier(); - const TQualifier& unitQualifier = (*unitSymbol.getType().getStruct())[i].type->getQualifier(); - if (qualifier.layoutMatrix != unitQualifier.layoutMatrix || - qualifier.layoutOffset != unitQualifier.layoutOffset || - qualifier.layoutAlign != unitQualifier.layoutAlign || - qualifier.layoutLocation != unitQualifier.layoutLocation || - qualifier.layoutComponent != unitQualifier.layoutComponent) { - error(infoSink, "Interface block member layout qualifiers must match:"); - writeTypeComparison = true; - } + writeTypeComparison = true; } } // Qualifiers have to (almost) match // Storage... - if (symbol.getQualifier().storage != unitSymbol.getQualifier().storage && - !((crossStage && symbol.getQualifier().storage == EvqVaryingIn && unitSymbol.getQualifier().storage == EvqVaryingOut) || - (crossStage && symbol.getQualifier().storage == EvqVaryingOut && unitSymbol.getQualifier().storage == EvqVaryingIn))) { + if (symbol.getQualifier().storage != unitSymbol.getQualifier().storage) { error(infoSink, "Storage qualifiers must match:"); writeTypeComparison = true; } @@ -914,16 +597,12 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy } // Auxiliary and interpolation... - // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ. - // These mismatches are allowed between any pair of stages ... - // those provided in the fragment shader supersede those provided in previous stages." - if (!crossStage && - (symbol.getQualifier().centroid != unitSymbol.getQualifier().centroid || + if (symbol.getQualifier().centroid != unitSymbol.getQualifier().centroid || symbol.getQualifier().smooth != unitSymbol.getQualifier().smooth || symbol.getQualifier().flat != unitSymbol.getQualifier().flat || symbol.getQualifier().isSample()!= unitSymbol.getQualifier().isSample() || symbol.getQualifier().isPatch() != unitSymbol.getQualifier().isPatch() || - symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective())) { + symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective()) { error(infoSink, "Interpolation and auxiliary storage qualifiers must match:"); writeTypeComparison = true; } @@ -2151,17 +1830,4 @@ int TIntermediate::computeBufferReferenceTypeSize(const TType& type) return size; } -#ifndef GLSLANG_WEB -bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) { - return type.isArray() && - ((language == EShLangGeometry && type.getQualifier().storage == EvqVaryingIn) || - (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && - ! type.getQualifier().patch) || - (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && - type.getQualifier().pervertexNV) || - (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && - !type.getQualifier().perTaskNV)); -} -#endif // not GLSLANG_WEB - } // end namespace glslang diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 9bfa35cc88..9fe684a333 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -293,12 +293,7 @@ class TIntermediate { useStorageBuffer(false), nanMinMaxClamp(false), depthReplacing(false), - uniqueId(0), - globalUniformBlockName(""), - atomicCounterBlockName(""), - globalUniformBlockSet(TQualifier::layoutSetEnd), - globalUniformBlockBinding(TQualifier::layoutBindingEnd), - atomicCounterBlockSet(TQualifier::layoutSetEnd) + uniqueId(0) #ifndef GLSLANG_WEB , implicitThisName("@this"), implicitCounterName("@count"), @@ -542,19 +537,6 @@ class TIntermediate { void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&); TIntermAggregate* findLinkerObjects() const; - void setGlobalUniformBlockName(const char* name) { globalUniformBlockName = std::string(name); } - const char* getGlobalUniformBlockName() const { return globalUniformBlockName.c_str(); } - void setGlobalUniformSet(unsigned int set) { globalUniformBlockSet = set; } - unsigned int getGlobalUniformSet() const { return globalUniformBlockSet; } - void setGlobalUniformBinding(unsigned int binding) { globalUniformBlockBinding = binding; } - unsigned int getGlobalUniformBinding() const { return globalUniformBlockBinding; } - - void setAtomicCounterBlockName(const char* name) { atomicCounterBlockName = std::string(name); } - const char* getAtomicCounterBlockName() const { return atomicCounterBlockName.c_str(); } - void setAtomicCounterBlockSet(unsigned int set) { atomicCounterBlockSet = set; } - unsigned int getAtomicCounterBlockSet() const { return atomicCounterBlockSet; } - - void setUseStorageBuffer() { useStorageBuffer = true; } bool usingStorageBuffer() const { return useStorageBuffer; } void setDepthReplacing() { depthReplacing = true; } @@ -866,20 +848,6 @@ class TIntermediate { bool getBinaryDoubleOutput() { return binaryDoubleOutput; } #endif // GLSLANG_WEB - void addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) - { - std::string name(nameStr); - blockBackingOverrides[name] = backing; - } - TBlockStorageClass getBlockStorageOverride(const char* nameStr) const - { - std::string name = nameStr; - auto pos = blockBackingOverrides.find(name); - if (pos == blockBackingOverrides.end()) - return EbsNone; - else - return pos->second; - } #ifdef ENABLE_HLSL void setHlslFunctionality1() { hlslFunctionality1 = true; } bool getHlslFunctionality1() const { return hlslFunctionality1; } @@ -915,10 +883,6 @@ class TIntermediate { void merge(TInfoSink&, TIntermediate&); void finalCheck(TInfoSink&, bool keepUncalled); - void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit); - void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit); - void checkStageIO(TInfoSink&, TIntermediate&); - bool buildConvertOp(TBasicType dst, TBasicType src, TOperator& convertOp) const; TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const; @@ -942,8 +906,6 @@ class TIntermediate { static int getOffset(const TType& type, int index); static int getBlockSize(const TType& blockType); static int computeBufferReferenceTypeSize(const TType&); - static bool isIoResizeArray(const TType& type, EShLanguage language); - bool promote(TIntermOperator*); void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; } bool getNanMinMaxClamp() const { return nanMinMaxClamp; } @@ -1001,10 +963,9 @@ class TIntermediate { void seedIdMap(TIdMaps& idMaps, long long& IdShift); void remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate&); void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals); - void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects, EShLanguage); - void mergeBlockDefinitions(TInfoSink&, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unitRoot); + void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects); void mergeImplicitArraySizes(TType&, const TType&); - void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, EShLanguage); + void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, bool crossStage); void checkCallGraphCycles(TInfoSink&); void checkCallGraphBodies(TInfoSink&, bool keepUncalled); void inOutLocationCheck(TInfoSink&); @@ -1054,13 +1015,6 @@ class TIntermediate { bool localSizeNotDefault[3]; int localSizeSpecId[3]; unsigned long long uniqueId; - - std::string globalUniformBlockName; - std::string atomicCounterBlockName; - unsigned int globalUniformBlockSet; - unsigned int globalUniformBlockBinding; - unsigned int atomicCounterBlockSet; - #ifndef GLSLANG_WEB public: const char* const implicitThisName; @@ -1121,7 +1075,6 @@ class TIntermediate { int uniformLocationBase; TNumericFeatures numericFeatures; #endif - std::unordered_map blockBackingOverrides; std::unordered_set usedConstantId; // specialization constant ids used std::vector usedAtomics; // sets of bindings used by atomic counters diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 74b9f3eef7..e147b0dc89 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -187,7 +187,6 @@ struct TInputLanguage { EShLanguage stage; // redundant information with other input, this one overrides when not EShSourceNone EShClient dialect; int dialectVersion; // version of client's language definition, not the client (when not EShClientNone) - bool VulkanRulesRelaxed = false; }; struct TClient { @@ -428,14 +427,6 @@ enum TResourceType { EResCount }; -enum TBlockStorageClass -{ - EbsUniform = 0, - EbsStorageBuffer, - EbsPushConstant, - EbsNone, // not a uniform or buffer variable - EbsCount, -}; // Make one TShader per shader that you will link into a program. Then // - provide the shader through setStrings() or setStringsWithLengths() @@ -492,14 +483,6 @@ class TShader { GLSLANG_EXPORT void setNoStorageFormat(bool useUnknownFormat); GLSLANG_EXPORT void setNanMinMaxClamp(bool nanMinMaxClamp); GLSLANG_EXPORT void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode); - GLSLANG_EXPORT void addBlockStorageOverride(const char* nameStr, glslang::TBlockStorageClass backing); - - GLSLANG_EXPORT void setGlobalUniformBlockName(const char* name); - GLSLANG_EXPORT void setAtomicCounterBlockName(const char* name); - GLSLANG_EXPORT void setGlobalUniformSet(unsigned int set); - GLSLANG_EXPORT void setGlobalUniformBinding(unsigned int binding); - GLSLANG_EXPORT void setAtomicCounterBlockSet(unsigned int set); - GLSLANG_EXPORT void setAtomicCounterBlockBinding(unsigned int binding); // For setting up the environment (cleared to nothingness in the constructor). // These must be called so that parsing is done for the right source language and @@ -556,9 +539,6 @@ class TShader { bool getEnvTargetHlslFunctionality1() const { return false; } #endif - void setEnvInputVulkanRulesRelaxed() { environment.input.VulkanRulesRelaxed = true; } - bool getEnvInputVulkanRulesRelaxed() const { return environment.input.VulkanRulesRelaxed; } - // Interface to #include handlers. // // To support #include, a client of Glslang does the following: @@ -826,7 +806,7 @@ class TIoMapResolver // Called by TSlotCollector to resolve resource locations or bindings virtual void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0; // Called by mapIO.addStage to set shader stage mask to mark a stage be added to this pipeline - virtual void addStage(EShLanguage stage, TIntermediate& stageIntermediate) = 0; + virtual void addStage(EShLanguage stage) = 0; }; #endif // !GLSLANG_WEB && !GLSLANG_ANGLE @@ -948,7 +928,6 @@ class TProgram { protected: GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages); - GLSLANG_EXPORT bool crossStageCheck(EShMessages); TPoolAllocator* pool; std::list stages[EShLangCount]; diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 74c9809aac..0617ff850e 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -53,9 +53,7 @@ if(BUILD_TESTING) ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/VkRelaxed.FromFile.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/GlslMapIO.FromFile.cpp) + ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp) if(ENABLE_SPVREMAPPER) set(TEST_SOURCES ${TEST_SOURCES} diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp deleted file mode 100644 index 574e905f89..0000000000 --- a/gtests/GlslMapIO.FromFile.cpp +++ /dev/null @@ -1,306 +0,0 @@ -// -// Copyright (C) 2016-2017 Google, Inc. -// Copyright (C) 2020 The Khronos Group Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -#include - -#include - -#include "TestFixture.h" - -#include "glslang/MachineIndependent/iomapper.h" -#include "glslang/MachineIndependent/reflection.h" - -#ifndef GLSLANG_WEB -namespace glslangtest { -namespace { - -struct IoMapData { - std::vector fileNames; - Semantics semantics; -}; - -using GlslMapIOTest = GlslangTest <::testing::TestWithParam>; - -template -std::string interfaceName(T symbol) { - return symbol.getType()->getBasicType() == glslang::EbtBlock ? std::string(symbol.getType()->getTypeName().c_str()) : symbol.name; -} - -bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { - bool success = true; - - // Verify IO Mapping by generating reflection for each stage individually - // and comparing layout qualifiers on the results - - - int reflectionOptions = EShReflectionDefault; - //reflectionOptions |= EShReflectionStrictArraySuffix; - //reflectionOptions |= EShReflectionBasicArraySuffix; - reflectionOptions |= EShReflectionIntermediateIO; - reflectionOptions |= EShReflectionSeparateBuffers; - reflectionOptions |= EShReflectionAllBlockVariables; - //reflectionOptions |= EShReflectionUnwrapIOBlocks; - - success &= program.buildReflection(reflectionOptions); - - // check that the reflection output from the individual stages all makes sense.. - std::vector stageReflections; - for (int s = 0; s < EShLangCount; ++s) { - if (program.getIntermediate((EShLanguage)s)) { - stageReflections.emplace_back((EShReflectionOptions)reflectionOptions, (EShLanguage)s, (EShLanguage)s); - success &= stageReflections.back().addStage((EShLanguage)s, *program.getIntermediate((EShLanguage)s)); - } - } - - // check that input/output locations match between stages - auto it = stageReflections.begin(); - auto nextIt = it + 1; - for (; nextIt != stageReflections.end(); it++, nextIt++) { - int numOut = it->getNumPipeOutputs(); - std::map pipeOut; - - for (int i = 0; i < numOut; i++) { - const glslang::TObjectReflection& out = it->getPipeOutput(i); - std::string name = interfaceName(out); - pipeOut[name] = &out; - } - - int numIn = nextIt->getNumPipeInputs(); - for (int i = 0; i < numIn; i++) { - auto in = nextIt->getPipeInput(i); - std::string name = interfaceName(in); - auto out = pipeOut.find(name); - - if (out != pipeOut.end()) { - auto inQualifier = in.getType()->getQualifier(); - auto outQualifier = out->second->getType()->getQualifier(); - success &= outQualifier.layoutLocation == inQualifier.layoutLocation; - } - else { - success &= false; - } - } - } - - // compare uniforms in each stage to the program - { - int totalUniforms = program.getNumUniformVariables(); - std::map programUniforms; - for (int i = 0; i < totalUniforms; i++) { - const glslang::TObjectReflection& uniform = program.getUniform(i); - std::string name = interfaceName(uniform); - programUniforms[name] = &uniform; - } - it = stageReflections.begin(); - for (; it != stageReflections.end(); it++) { - int numUniform = it->getNumUniforms(); - std::map uniforms; - - for (int i = 0; i < numUniform; i++) { - glslang::TObjectReflection uniform = it->getUniform(i); - std::string name = interfaceName(uniform); - auto programUniform = programUniforms.find(name); - - if (programUniform != programUniforms.end()) { - auto stageQualifier = uniform.getType()->getQualifier(); - auto programQualifier = programUniform->second->getType()->getQualifier(); - - success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; - success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; - success &= stageQualifier.layoutSet == programQualifier.layoutSet; - } - else { - success &= false; - } - } - } - } - - // compare uniform blocks in each stage to the program table - { - int totalUniforms = program.getNumUniformBlocks(); - std::map programUniforms; - for (int i = 0; i < totalUniforms; i++) { - const glslang::TObjectReflection& uniform = program.getUniformBlock(i); - std::string name = interfaceName(uniform); - programUniforms[name] = &uniform; - } - it = stageReflections.begin(); - for (; it != stageReflections.end(); it++) { - int numUniform = it->getNumUniformBlocks(); - std::map uniforms; - - for (int i = 0; i < numUniform; i++) { - glslang::TObjectReflection uniform = it->getUniformBlock(i); - std::string name = interfaceName(uniform); - auto programUniform = programUniforms.find(name); - - if (programUniform != programUniforms.end()) { - auto stageQualifier = uniform.getType()->getQualifier(); - auto programQualifier = programUniform->second->getType()->getQualifier(); - - success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; - success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; - success &= stageQualifier.layoutSet == programQualifier.layoutSet; - } - else { - success &= false; - } - } - } - } - - if (!success) { - linkingError += "Mismatched cross-stage IO\n"; - } - - return success; -} - -TEST_P(GlslMapIOTest, FromFile) -{ - const auto& fileNames = GetParam().fileNames; - Semantics semantics = GetParam().semantics; - const size_t fileCount = fileNames.size(); - const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv); - GlslangResult result; - - // Compile each input shader file. - bool success = true; - std::vector> shaders; - for (size_t i = 0; i < fileCount; ++i) { - std::string contents; - tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], - "input", &contents); - shaders.emplace_back( - new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); - auto* shader = shaders.back().get(); - - shader->setAutoMapLocations(true); - shader->setAutoMapBindings(true); - - if (controls & EShMsgSpvRules) { - if (controls & EShMsgVulkanRules) { - shader->setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl - : glslang::EShSourceGlsl, - shader->getStage(), glslang::EShClientVulkan, 100); - shader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1); - shader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_0); - } else { - shader->setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl - : glslang::EShSourceGlsl, - shader->getStage(), glslang::EShClientOpenGL, 100); - shader->setEnvClient(glslang::EShClientOpenGL, glslang::EShTargetOpenGL_450); - shader->setEnvTarget(glslang::EshTargetSpv, glslang::EShTargetSpv_1_0); - } - } - - success &= compile(shader, contents, "", controls); - - result.shaderResults.push_back( - { fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog() }); - } - - // Link all of them. - glslang::TProgram program; - for (const auto& shader : shaders) program.addShader(shader.get()); - success &= program.link(controls); - result.linkingOutput = program.getInfoLog(); - result.linkingError = program.getInfoDebugLog(); - - unsigned int stage = 0; - glslang::TIntermediate* firstIntermediate = nullptr; - while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } - firstIntermediate = program.getIntermediate((EShLanguage)stage); - - glslang::TDefaultGlslIoResolver resolver(*firstIntermediate); - glslang::TGlslIoMapper ioMapper; - - if (success) { - success &= program.mapIO(&resolver, &ioMapper); - result.linkingOutput = program.getInfoLog(); - result.linkingError = program.getInfoDebugLog(); - } - - success &= verifyIOMapping(result.linkingError, program); - result.validationResult = success; - - if (success && (controls & EShMsgSpvRules)) { - for (int stage = 0; stage < EShLangCount; ++stage) { - if (program.getIntermediate((EShLanguage)stage)) { - spv::SpvBuildLogger logger; - std::vector spirv_binary; - options().disableOptimizer = false; - glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), - spirv_binary, &logger, &options()); - - std::ostringstream disassembly_stream; - spv::Parameterize(); - spv::Disassemble(disassembly_stream, spirv_binary); - result.spirvWarningsErrors += logger.getAllMessages(); - result.spirv += disassembly_stream.str(); - result.validationResult &= !options().validate || logger.getAllMessages().empty(); - } - } - } - - std::ostringstream stream; - outputResultToStream(&stream, result, controls); - - // Check with expected results. - const std::string expectedOutputFname = - GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out"; - std::string expectedOutput; - tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); - - checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname, - result.spirvWarningsErrors); -} - -// clang-format off -INSTANTIATE_TEST_SUITE_P( - Glsl, GlslMapIOTest, - ::testing::ValuesIn(std::vector({ - {{"iomap.crossStage.vert", "iomap.crossStage.frag" }, Semantics::OpenGL}, - {{"iomap.crossStage.2.vert", "iomap.crossStage.2.geom", "iomap.crossStage.2.frag" }, Semantics::OpenGL}, - // vulkan semantics - {{"iomap.crossStage.vk.vert", "iomap.crossStage.vk.geom", "iomap.crossStage.vk.frag" }, Semantics::Vulkan}, - })) -); -// clang-format on - -} // anonymous namespace -} // namespace glslangtest -#endif \ No newline at end of file diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp index 5e005a463c..2909a9c135 100644 --- a/gtests/Link.FromFile.Vk.cpp +++ b/gtests/Link.FromFile.Vk.cpp @@ -114,12 +114,12 @@ INSTANTIATE_TEST_SUITE_P( ::testing::ValuesIn(std::vector>({ {"link1.vk.frag", "link2.vk.frag"}, {"spv.unit1.frag", "spv.unit2.frag", "spv.unit3.frag"}, - {"link.vk.matchingPC.0.0.frag", "link.vk.matchingPC.0.1.frag", - "link.vk.matchingPC.0.2.frag"}, - {"link.vk.differentPC.0.0.frag", "link.vk.differentPC.0.1.frag", - "link.vk.differentPC.0.2.frag"}, - {"link.vk.differentPC.1.0.frag", "link.vk.differentPC.1.1.frag", - "link.vk.differentPC.1.2.frag"}, + {"link.vk.matchingPC.0.0.frag", "link.vk.matchingPC.0.1.frag", + "link.vk.matchingPC.0.2.frag"}, + {"link.vk.differentPC.0.0.frag", "link.vk.differentPC.0.1.frag", + "link.vk.differentPC.0.2.frag"}, + {"link.vk.differentPC.1.0.frag", "link.vk.differentPC.1.1.frag", + "link.vk.differentPC.1.2.frag"}, {"link.vk.pcNamingValid.0.0.vert", "link.vk.pcNamingValid.0.1.vert"}, {"link.vk.pcNamingInvalid.0.0.vert", "link.vk.pcNamingInvalid.0.1.vert"}, {"link.vk.multiBlocksValid.0.0.vert", "link.vk.multiBlocksValid.0.1.vert"}, diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp deleted file mode 100644 index d791d6cc67..0000000000 --- a/gtests/VkRelaxed.FromFile.cpp +++ /dev/null @@ -1,296 +0,0 @@ -// -// Copyright (C) 2016-2017 Google, Inc. -// Copyright (C) 2020 The Khronos Group Inc. -// -// All rights reserved. -// -// Redistribution and use in source and binary forms, with or without -// modification, are permitted provided that the following conditions -// are met: -// -// Redistributions of source code must retain the above copyright -// notice, this list of conditions and the following disclaimer. -// -// Redistributions in binary form must reproduce the above -// copyright notice, this list of conditions and the following -// disclaimer in the documentation and/or other materials provided -// with the distribution. -// -// Neither the name of 3Dlabs Inc. Ltd. nor the names of its -// contributors may be used to endorse or promote products derived -// from this software without specific prior written permission. -// -// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS -// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT -// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE -// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, -// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, -// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER -// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT -// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN -// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -// POSSIBILITY OF SUCH DAMAGE. -// -#include - -#include - -#include "TestFixture.h" - -#include "glslang/MachineIndependent/iomapper.h" -#include "glslang/MachineIndependent/reflection.h" - -#ifndef GLSLANG_WEB -namespace glslangtest { -namespace { - -struct vkRelaxedData { - std::vector fileNames; -}; - -using VulkanRelaxedTest = GlslangTest <::testing::TestWithParam>; - -template -std::string interfaceName(T symbol) { - return symbol.getType()->getBasicType() == glslang::EbtBlock ? std::string(symbol.getType()->getTypeName().c_str()) : symbol.name; -} - -bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { - bool success = true; - - // Verify IO Mapping by generating reflection for each stage individually - // and comparing layout qualifiers on the results - - - int reflectionOptions = EShReflectionDefault; - //reflectionOptions |= EShReflectionStrictArraySuffix; - //reflectionOptions |= EShReflectionBasicArraySuffix; - reflectionOptions |= EShReflectionIntermediateIO; - reflectionOptions |= EShReflectionSeparateBuffers; - reflectionOptions |= EShReflectionAllBlockVariables; - //reflectionOptions |= EShReflectionUnwrapIOBlocks; - - success &= program.buildReflection(reflectionOptions); - - // check that the reflection output from the individual stages all makes sense.. - std::vector stageReflections; - for (int s = 0; s < EShLangCount; ++s) { - if (program.getIntermediate((EShLanguage)s)) { - stageReflections.emplace_back((EShReflectionOptions)reflectionOptions, (EShLanguage)s, (EShLanguage)s); - success &= stageReflections.back().addStage((EShLanguage)s, *program.getIntermediate((EShLanguage)s)); - } - } - - // check that input/output locations match between stages - auto it = stageReflections.begin(); - auto nextIt = it + 1; - for (; nextIt != stageReflections.end(); it++, nextIt++) { - int numOut = it->getNumPipeOutputs(); - std::map pipeOut; - - for (int i = 0; i < numOut; i++) { - const glslang::TObjectReflection& out = it->getPipeOutput(i); - std::string name = interfaceName(out); - pipeOut[name] = &out; - } - - int numIn = nextIt->getNumPipeInputs(); - for (int i = 0; i < numIn; i++) { - auto in = nextIt->getPipeInput(i); - std::string name = interfaceName(in); - auto out = pipeOut.find(name); - - if (out != pipeOut.end()) { - auto inQualifier = in.getType()->getQualifier(); - auto outQualifier = out->second->getType()->getQualifier(); - success &= outQualifier.layoutLocation == inQualifier.layoutLocation; - } - else { - success &= false; - } - } - } - - // compare uniforms in each stage to the program - { - int totalUniforms = program.getNumUniformVariables(); - std::map programUniforms; - for (int i = 0; i < totalUniforms; i++) { - const glslang::TObjectReflection& uniform = program.getUniform(i); - std::string name = interfaceName(uniform); - programUniforms[name] = &uniform; - } - it = stageReflections.begin(); - for (; it != stageReflections.end(); it++) { - int numUniform = it->getNumUniforms(); - std::map uniforms; - - for (int i = 0; i < numUniform; i++) { - glslang::TObjectReflection uniform = it->getUniform(i); - std::string name = interfaceName(uniform); - auto programUniform = programUniforms.find(name); - - if (programUniform != programUniforms.end()) { - auto stageQualifier = uniform.getType()->getQualifier(); - auto programQualifier = programUniform->second->getType()->getQualifier(); - - success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; - success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; - success &= stageQualifier.layoutSet == programQualifier.layoutSet; - } - else { - success &= false; - } - } - } - } - - // compare uniform blocks in each stage to the program table - { - int totalUniforms = program.getNumUniformBlocks(); - std::map programUniforms; - for (int i = 0; i < totalUniforms; i++) { - const glslang::TObjectReflection& uniform = program.getUniformBlock(i); - std::string name = interfaceName(uniform); - programUniforms[name] = &uniform; - } - it = stageReflections.begin(); - for (; it != stageReflections.end(); it++) { - int numUniform = it->getNumUniformBlocks(); - std::map uniforms; - - for (int i = 0; i < numUniform; i++) { - glslang::TObjectReflection uniform = it->getUniformBlock(i); - std::string name = interfaceName(uniform); - auto programUniform = programUniforms.find(name); - - if (programUniform != programUniforms.end()) { - auto stageQualifier = uniform.getType()->getQualifier(); - auto programQualifier = programUniform->second->getType()->getQualifier(); - - success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; - success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; - success &= stageQualifier.layoutSet == programQualifier.layoutSet; - } - else { - success &= false; - } - } - } - } - - if (!success) { - linkingError += "Mismatched cross-stage IO\n"; - } - - return success; -} - -TEST_P(VulkanRelaxedTest, FromFile) -{ - const auto& fileNames = GetParam().fileNames; - Semantics semantics = Semantics::Vulkan; - const size_t fileCount = fileNames.size(); - const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv); - GlslangResult result; - - // Compile each input shader file. - bool success = true; - std::vector> shaders; - for (size_t i = 0; i < fileCount; ++i) { - std::string contents; - tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], - "input", &contents); - shaders.emplace_back( - new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); - auto* shader = shaders.back().get(); - - shader->setAutoMapLocations(true); - shader->setAutoMapBindings(true); - - shader->setEnvInput(glslang::EShSourceGlsl, shader->getStage(), glslang::EShClientVulkan, 100); - shader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1); - shader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_0); - - // Use vulkan relaxed option - shader->setEnvInputVulkanRulesRelaxed(); - - success &= compile(shader, contents, "", controls); - - result.shaderResults.push_back( - { fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog() }); - } - - // Link all of them. - glslang::TProgram program; - for (const auto& shader : shaders) program.addShader(shader.get()); - success &= program.link(controls); - result.linkingOutput = program.getInfoLog(); - result.linkingError = program.getInfoDebugLog(); - - unsigned int stage = 0; - glslang::TIntermediate* firstIntermediate = nullptr; - while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } - firstIntermediate = program.getIntermediate((EShLanguage)stage); - - glslang::TDefaultGlslIoResolver resolver(*firstIntermediate); - glslang::TGlslIoMapper ioMapper; - - if (success) { - success &= program.mapIO(&resolver, &ioMapper); - result.linkingOutput = program.getInfoLog(); - result.linkingError = program.getInfoDebugLog(); - } - - success &= verifyIOMapping(result.linkingError, program); - result.validationResult = success; - - if (success && (controls & EShMsgSpvRules)) { - for (int stage = 0; stage < EShLangCount; ++stage) { - if (program.getIntermediate((EShLanguage)stage)) { - spv::SpvBuildLogger logger; - std::vector spirv_binary; - options().disableOptimizer = false; - glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), - spirv_binary, &logger, &options()); - - std::ostringstream disassembly_stream; - spv::Parameterize(); - spv::Disassemble(disassembly_stream, spirv_binary); - result.spirvWarningsErrors += logger.getAllMessages(); - result.spirv += disassembly_stream.str(); - result.validationResult &= !options().validate || logger.getAllMessages().empty(); - } - } - } - - std::ostringstream stream; - outputResultToStream(&stream, result, controls); - - // Check with expected results. - const std::string expectedOutputFname = - GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out"; - std::string expectedOutput; - tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); - - checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname, - result.spirvWarningsErrors); -} - -// clang-format off -INSTANTIATE_TEST_SUITE_P( - Glsl, VulkanRelaxedTest, - ::testing::ValuesIn(std::vector({ - {{"vk.relaxed.frag"}}, - {{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}}, - {{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}}, - {{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}}, - })) -); -// clang-format on - -} // anonymous namespace -} // namespace glslangtest -#endif \ No newline at end of file From e3235cb2e4feb4f507f2b1f47cc6ca6360c303bd Mon Sep 17 00:00:00 2001 From: feifei14119 Date: Mon, 15 Mar 2021 16:54:31 +0800 Subject: [PATCH 126/365] 1. fix macro definition value for unsinged-int64-vector, according to kronos spec at https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_gpu_shader_int64.txt; 2. fix typo in reflection --- glslang/MachineIndependent/gl_types.h | 6 +++--- glslang/MachineIndependent/reflection.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/glslang/MachineIndependent/gl_types.h b/glslang/MachineIndependent/gl_types.h index b9372d4bbb..d6c939374a 100644 --- a/glslang/MachineIndependent/gl_types.h +++ b/glslang/MachineIndependent/gl_types.h @@ -49,9 +49,9 @@ #define GL_INT64_VEC4_ARB 0x8FEB #define GL_UNSIGNED_INT64_ARB 0x140F -#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FE5 -#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FE6 -#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FE7 +#define GL_UNSIGNED_INT64_VEC2_ARB 0x8FF5 +#define GL_UNSIGNED_INT64_VEC3_ARB 0x8FF6 +#define GL_UNSIGNED_INT64_VEC4_ARB 0x8FF7 #define GL_UNSIGNED_INT16_VEC2_NV 0x8FF1 #define GL_UNSIGNED_INT16_VEC3_NV 0x8FF2 #define GL_UNSIGNED_INT16_VEC4_NV 0x8FF3 diff --git a/glslang/MachineIndependent/reflection.cpp b/glslang/MachineIndependent/reflection.cpp index 9870a400be..9ea48c452d 100644 --- a/glslang/MachineIndependent/reflection.cpp +++ b/glslang/MachineIndependent/reflection.cpp @@ -907,8 +907,8 @@ class TReflectionTraverser : public TIntermTraverser { case EbtFloat16: return GL_FLOAT16_VEC2_NV + offset; case EbtInt: return GL_INT_VEC2 + offset; case EbtUint: return GL_UNSIGNED_INT_VEC2 + offset; - case EbtInt64: return GL_INT64_ARB + offset; - case EbtUint64: return GL_UNSIGNED_INT64_ARB + offset; + case EbtInt64: return GL_INT64_VEC2_ARB + offset; + case EbtUint64: return GL_UNSIGNED_INT64_VEC2_ARB + offset; case EbtBool: return GL_BOOL_VEC2 + offset; case EbtAtomicUint: return GL_UNSIGNED_INT_ATOMIC_COUNTER + offset; default: return 0; From 4e064eef4619b0b1e17aca78c52fcfca83ad937d Mon Sep 17 00:00:00 2001 From: greg-lunarg Date: Mon, 15 Mar 2021 11:26:11 -0600 Subject: [PATCH 127/365] Revert "Revert "GL_ext_vulkan_glsl_relaxed extension support, and cross stage aware IO mapper"" --- SPIRV/GlslangToSpv.cpp | 3 + StandAlone/StandAlone.cpp | 174 ++++ Test/baseResults/iomap.crossStage.2.vert.out | 787 +++++++++++++++++ Test/baseResults/iomap.crossStage.vert.out | 515 +++++++++++ Test/baseResults/iomap.crossStage.vk.vert.out | 720 +++++++++++++++ .../vk.relaxed.errorcheck.vert.out | 124 +++ Test/baseResults/vk.relaxed.frag.out | 826 ++++++++++++++++++ Test/baseResults/vk.relaxed.link1.frag.out | 515 +++++++++++ .../baseResults/vk.relaxed.stagelink.vert.out | 717 +++++++++++++++ Test/iomap.crossStage.2.frag | 42 + Test/iomap.crossStage.2.geom | 39 + Test/iomap.crossStage.2.vert | 38 + Test/iomap.crossStage.frag | 41 + Test/iomap.crossStage.vert | 38 + Test/iomap.crossStage.vk.frag | 50 ++ Test/iomap.crossStage.vk.geom | 35 + Test/iomap.crossStage.vk.vert | 32 + Test/vk.relaxed.errorcheck.frag | 16 + Test/vk.relaxed.errorcheck.vert | 15 + Test/vk.relaxed.frag | 74 ++ Test/vk.relaxed.link1.frag | 28 + Test/vk.relaxed.link2.frag | 19 + Test/vk.relaxed.stagelink.frag | 28 + Test/vk.relaxed.stagelink.vert | 31 + glslang/Include/Types.h | 44 + glslang/Include/intermediate.h | 3 + glslang/MachineIndependent/Initialize.cpp | 86 +- .../MachineIndependent/ParseContextBase.cpp | 63 +- glslang/MachineIndependent/ParseHelper.cpp | 300 ++++++- glslang/MachineIndependent/ParseHelper.h | 43 +- glslang/MachineIndependent/ShaderLang.cpp | 83 +- glslang/MachineIndependent/Versions.cpp | 2 +- glslang/MachineIndependent/Versions.h | 3 +- glslang/MachineIndependent/intermOut.cpp | 1 + glslang/MachineIndependent/iomapper.cpp | 184 ++-- glslang/MachineIndependent/iomapper.h | 41 +- glslang/MachineIndependent/linkValidate.cpp | 364 +++++++- .../MachineIndependent/localintermediate.h | 53 +- glslang/Public/ShaderLang.h | 23 +- gtests/CMakeLists.txt | 4 +- gtests/GlslMapIO.FromFile.cpp | 306 +++++++ gtests/Link.FromFile.Vk.cpp | 12 +- gtests/VkRelaxed.FromFile.cpp | 296 +++++++ 43 files changed, 6707 insertions(+), 111 deletions(-) create mode 100644 Test/baseResults/iomap.crossStage.2.vert.out create mode 100644 Test/baseResults/iomap.crossStage.vert.out create mode 100644 Test/baseResults/iomap.crossStage.vk.vert.out create mode 100644 Test/baseResults/vk.relaxed.errorcheck.vert.out create mode 100644 Test/baseResults/vk.relaxed.frag.out create mode 100644 Test/baseResults/vk.relaxed.link1.frag.out create mode 100644 Test/baseResults/vk.relaxed.stagelink.vert.out create mode 100644 Test/iomap.crossStage.2.frag create mode 100644 Test/iomap.crossStage.2.geom create mode 100644 Test/iomap.crossStage.2.vert create mode 100644 Test/iomap.crossStage.frag create mode 100644 Test/iomap.crossStage.vert create mode 100644 Test/iomap.crossStage.vk.frag create mode 100644 Test/iomap.crossStage.vk.geom create mode 100644 Test/iomap.crossStage.vk.vert create mode 100644 Test/vk.relaxed.errorcheck.frag create mode 100644 Test/vk.relaxed.errorcheck.vert create mode 100644 Test/vk.relaxed.frag create mode 100644 Test/vk.relaxed.link1.frag create mode 100644 Test/vk.relaxed.link2.frag create mode 100644 Test/vk.relaxed.stagelink.frag create mode 100644 Test/vk.relaxed.stagelink.vert create mode 100644 gtests/GlslMapIO.FromFile.cpp create mode 100644 gtests/VkRelaxed.FromFile.cpp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 8eb06b7cdf..6d9c7cfec3 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2784,6 +2784,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt break; case glslang::EOpAtomicAdd: + case glslang::EOpAtomicSubtract: case glslang::EOpAtomicMin: case glslang::EOpAtomicMax: case glslang::EOpAtomicAnd: @@ -2955,6 +2956,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt break; case glslang::EOpAtomicAdd: + case glslang::EOpAtomicSubtract: case glslang::EOpAtomicMin: case glslang::EOpAtomicMax: case glslang::EOpAtomicAnd: @@ -6894,6 +6896,7 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv builder.addCapability(spv::CapabilityAtomicFloat64AddEXT); } break; + case glslang::EOpAtomicSubtract: case glslang::EOpAtomicCounterSubtract: opCode = spv::OpAtomicISub; break; diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index fdbf027990..923ded3052 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -110,6 +110,7 @@ bool SpvToolsValidate = false; bool NaNClamp = false; bool stripDebugInfo = false; bool beQuiet = false; +bool VulkanRulesRelaxed = false; // // Return codes from main/exit(). @@ -195,6 +196,17 @@ std::array, glslang::EResCount> baseBindi std::array, glslang::EResCount> baseBindingForSet; std::array, EShLangCount> baseResourceSetBinding; +std::vector> blockStorageOverrides; + +bool setGlobalUniformBlock = false; +std::string globalUniformName; +unsigned int globalUniformBinding; +unsigned int globalUniformSet; + +bool setGlobalBufferBlock = false; +std::string atomicCounterBlockName; +unsigned int atomicCounterBlockSet; + // Add things like "#define ..." to a preamble to use in the beginning of the shader. class TPreamble { public: @@ -396,6 +408,115 @@ void ProcessResourceSetBindingBase(int& argc, char**& argv, std::array>& storage) +{ + if (argc < 3) + usage(); + + glslang::TBlockStorageClass blockStorage = glslang::EbsNone; + + std::string strBacking(argv[2]); + if (strBacking == "uniform") + blockStorage = glslang::EbsUniform; + else if (strBacking == "buffer") + blockStorage = glslang::EbsStorageBuffer; + else if (strBacking == "push_constant") + blockStorage = glslang::EbsPushConstant; + else { + printf("%s: invalid block storage\n", strBacking.c_str()); + usage(); + } + + storage.push_back(std::make_pair(std::string(argv[1]), blockStorage)); + + argc -= 2; + argv += 2; +} + +inline bool isNonDigit(char c) { + // a non-digit character valid in a glsl identifier + return (c == '_') || (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'); +} + +// whether string isa valid identifier to be used in glsl +bool isValidIdentifier(const char* str) { + std::string idn(str); + + if (idn.length() == 0) { + return false; + } + + if (idn.length() >= 3 && idn.substr(0, 3) == "gl_") { + // identifiers startin with "gl_" are reserved + return false; + } + + if (!isNonDigit(idn[0])) { + return false; + } + + for (unsigned int i = 1; i < idn.length(); ++i) { + if (!(isdigit(idn[i]) || isNonDigit(idn[i]))) { + return false; + } + } + + return true; +} + +// Process settings for either the global buffer block or global unfirom block +// of the form: +// --argname name set binding +void ProcessGlobalBlockSettings(int& argc, char**& argv, std::string* name, unsigned int* set, unsigned int* binding) +{ + if (argc < 4) + usage(); + + unsigned int curArg = 1; + + assert(name || set || binding); + + if (name) { + if (!isValidIdentifier(argv[curArg])) { + printf("%s: invalid identifier\n", argv[curArg]); + usage(); + } + *name = argv[curArg]; + + curArg++; + } + + if (set) { + errno = 0; + int setVal = ::strtol(argv[curArg], NULL, 10); + if (errno || setVal < 0) { + printf("%s: invalid set\n", argv[curArg]); + usage(); + } + *set = setVal; + + curArg++; + } + + if (binding) { + errno = 0; + int bindingVal = ::strtol(argv[curArg], NULL, 10); + if (errno || bindingVal < 0) { + printf("%s: invalid binding\n", argv[curArg]); + usage(); + } + *binding = bindingVal; + + curArg++; + } + + argc -= (curArg - 1); + argv += (curArg - 1); +} + // // Do all command-line argument parsing. This includes building up the work-items // to be processed later, and saving all the command-line options. @@ -569,6 +690,17 @@ void ProcessArguments(std::vector>& workItem lowerword == "resource-set-binding" || lowerword == "rsb") { ProcessResourceSetBindingBase(argc, argv, baseResourceSetBinding); + } else if (lowerword == "set-block-storage" || + lowerword == "sbs") { + ProcessBlockStorage(argc, argv, blockStorageOverrides); + } else if (lowerword == "set-atomic-counter-block" || + lowerword == "sacb") { + ProcessGlobalBlockSettings(argc, argv, &atomicCounterBlockName, &atomicCounterBlockSet, nullptr); + setGlobalBufferBlock = true; + } else if (lowerword == "set-default-uniform-block" || + lowerword == "sdub") { + ProcessGlobalBlockSettings(argc, argv, &globalUniformName, &globalUniformSet, &globalUniformBinding); + setGlobalUniformBlock = true; } else if (lowerword == "shift-image-bindings" || // synonyms lowerword == "shift-image-binding" || lowerword == "sib") { @@ -721,6 +853,9 @@ void ProcessArguments(std::vector>& workItem else Error("unknown -O option"); break; + case 'R': + VulkanRulesRelaxed = true; + break; case 'S': if (argc <= 1) Error("no specified for -S"); @@ -1068,6 +1203,24 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setUniformLocationBase(uniformBase); #endif + if (VulkanRulesRelaxed) { + for (auto& storageOverride : blockStorageOverrides) { + shader->addBlockStorageOverride(storageOverride.first.c_str(), + storageOverride.second); + } + + if (setGlobalBufferBlock) { + shader->setAtomicCounterBlockName(atomicCounterBlockName.c_str()); + shader->setAtomicCounterBlockSet(atomicCounterBlockSet); + } + + if (setGlobalUniformBlock) { + shader->setGlobalUniformBlockName(globalUniformName.c_str()); + shader->setGlobalUniformSet(globalUniformSet); + shader->setGlobalUniformBinding(globalUniformBinding); + } + } + shader->setNanMinMaxClamp(NaNClamp); #ifdef ENABLE_HLSL @@ -1091,6 +1244,8 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (targetHlslFunctionality1) shader->setEnvTargetHlslFunctionality1(); #endif + if (VulkanRulesRelaxed) + shader->setEnvInputVulkanRulesRelaxed(); } shaders.push_back(shader); @@ -1572,6 +1727,9 @@ void usage() " is searched first, followed by left-to-right order of -I\n" " -Od disables optimization; may cause illegal SPIR-V for HLSL\n" " -Os optimizes SPIR-V to minimize size\n" + " -R use relaxed verification rules for generating Vulkan SPIR-V,\n" + " allowing the use of default uniforms, atomic_uints, and\n" + " gl_VertexID and gl_InstanceID keywords.\n" " -S uses specified stage rather than parsing the file extension\n" " choices for are vert, tesc, tese, geom, frag, or comp\n" " -U | --undef-macro | --U \n" @@ -1649,6 +1807,22 @@ void usage() " --resource-set-binding [stage] set\n" " set descriptor set for all resources\n" " --rsb synonym for --resource-set-binding\n" + " --set-block-backing name {uniform|buffer|push_constant}\n" + " changes the backing type of a uniform, buffer,\n" + " or push_constant block declared in\n" + " in the program, when using -R option.\n" + " This can be used to change the backing\n" + " for existing blocks as well as implicit ones\n" + " such as 'gl_DefaultUniformBlock'.\n" + " --sbs synonym for set-block-storage\n" + " --set-atomic-counter-block name set\n" + " set name, and descriptor set for\n" + " atomic counter blocks, with -R opt\n" + " --sacb synonym for set-atomic-counter-block\n" + " --set-default-uniform-block name set binding\n" + " set name, descriptor set, and binding for\n" + " global default-uniform-block, with -R opt\n" + " --sdub synonym for set-default-uniform-block\n" " --shift-image-binding [stage] num\n" " base binding number for images (uav)\n" " --shift-image-binding [stage] [num set]...\n" diff --git a/Test/baseResults/iomap.crossStage.2.vert.out b/Test/baseResults/iomap.crossStage.2.vert.out new file mode 100644 index 0000000000..325c1b465a --- /dev/null +++ b/Test/baseResults/iomap.crossStage.2.vert.out @@ -0,0 +1,787 @@ +iomap.crossStage.2.vert +Shader version: 460 +0:? Sequence +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'vgo1' ( smooth out 4-component vector of float) +0:34 Constant: +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'vgo2' ( smooth out 2-component vector of float) +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:36 move second child to first child ( temp 4-component vector of float) +0:36 o3: direct index for structure ( out 4-component vector of float) +0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:36 Constant: +0:36 0 (const uint) +0:36 Constant: +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:? Linker Objects +0:? 'vgo1' ( smooth out 4-component vector of float) +0:? 'vgo2' ( smooth out 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +iomap.crossStage.2.geom +Shader version: 460 +invocations = -1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:29 Function Definition: main( ( global void) +0:29 Function Parameters: +0:31 Sequence +0:31 Sequence +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'i' ( temp int) +0:31 Constant: +0:31 0 (const int) +0:31 Loop with condition tested first +0:31 Loop Condition +0:31 Compare Less Than ( temp bool) +0:31 'i' ( temp int) +0:31 Constant: +0:31 3 (const int) +0:31 Loop Body +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'gfo1' (layout( stream=0) out 4-component vector of float) +0:32 Constant: +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:33 move second child to first child ( temp 2-component vector of float) +0:33 'gfo2' (layout( stream=0) out 2-component vector of float) +0:33 Constant: +0:33 0.000000 +0:33 0.000000 +0:34 move second child to first child ( temp 4-component vector of float) +0:34 o3: direct index for structure (layout( stream=0) out 4-component vector of float) +0:34 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) +0:34 Constant: +0:34 0 (const int) +0:34 o3: direct index for structure ( in 4-component vector of float) +0:34 indirect index (layout( location=5) temp block{ in 4-component vector of float o3}) +0:34 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) +0:34 'i' ( temp int) +0:34 Constant: +0:34 0 (const int) +0:35 EmitVertex ( global void) +0:31 Loop Terminal Expression +0:31 Post-Increment ( temp int) +0:31 'i' ( temp int) +0:37 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of 4-component vector of float) +0:? 'vgo2' ( in 1-element array of 2-component vector of float) +0:? 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) +0:? 'gfo1' (layout( stream=0) out 4-component vector of float) +0:? 'gfo2' (layout( stream=0) out 2-component vector of float) +0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + +iomap.crossStage.2.frag +Shader version: 460 +0:? Sequence +0:37 Function Definition: main( ( global void) +0:37 Function Parameters: +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 'gfo1' ( smooth in 4-component vector of float) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u1' ( uniform 2-component vector of float) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u2' ( uniform 3-component vector of float) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 2 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u3' ( uniform 4-component vector of float) +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 2 (const int) +0:39 Constant: +0:39 3 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'outColor' ( out 4-component vector of float) +0:40 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) +0:? 'gfo1' ( smooth in 4-component vector of float) +0:? 'gfo2' ( smooth in 2-component vector of float) +0:? 'outColor' ( out 4-component vector of float) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Linked fragment stage: + +WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. + blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" + +Shader version: 460 +0:? Sequence +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'vgo1' ( smooth out 4-component vector of float) +0:34 Constant: +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'vgo2' ( smooth out 2-component vector of float) +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:36 move second child to first child ( temp 4-component vector of float) +0:36 o3: direct index for structure ( out 4-component vector of float) +0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:36 Constant: +0:36 0 (const uint) +0:36 Constant: +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:? Linker Objects +0:? 'vgo1' ( smooth out 4-component vector of float) +0:? 'vgo2' ( smooth out 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 460 +invocations = 1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:29 Function Definition: main( ( global void) +0:29 Function Parameters: +0:31 Sequence +0:31 Sequence +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'i' ( temp int) +0:31 Constant: +0:31 0 (const int) +0:31 Loop with condition tested first +0:31 Loop Condition +0:31 Compare Less Than ( temp bool) +0:31 'i' ( temp int) +0:31 Constant: +0:31 3 (const int) +0:31 Loop Body +0:32 Sequence +0:32 move second child to first child ( temp 4-component vector of float) +0:32 'gfo1' (layout( stream=0) out 4-component vector of float) +0:32 Constant: +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:32 0.000000 +0:33 move second child to first child ( temp 2-component vector of float) +0:33 'gfo2' (layout( stream=0) out 2-component vector of float) +0:33 Constant: +0:33 0.000000 +0:33 0.000000 +0:34 move second child to first child ( temp 4-component vector of float) +0:34 o3: direct index for structure (layout( stream=0) out 4-component vector of float) +0:34 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) +0:34 Constant: +0:34 0 (const int) +0:34 o3: direct index for structure ( in 4-component vector of float) +0:34 indirect index (layout( location=5) temp block{ in 4-component vector of float o3}) +0:34 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) +0:34 'i' ( temp int) +0:34 Constant: +0:34 0 (const int) +0:35 EmitVertex ( global void) +0:31 Loop Terminal Expression +0:31 Post-Increment ( temp int) +0:31 'i' ( temp int) +0:37 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of 4-component vector of float) +0:? 'vgo2' ( in 1-element array of 2-component vector of float) +0:? 'inBlock' (layout( location=5) in 1-element array of block{ in 4-component vector of float o3}) +0:? 'gfo1' (layout( stream=0) out 4-component vector of float) +0:? 'gfo2' (layout( stream=0) out 2-component vector of float) +0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +Shader version: 460 +0:? Sequence +0:37 Function Definition: main( ( global void) +0:37 Function Parameters: +0:39 Sequence +0:39 Sequence +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 component-wise multiply ( temp 4-component vector of float) +0:39 'gfo1' ( smooth in 4-component vector of float) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u1' ( uniform 2-component vector of float) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u2' ( uniform 3-component vector of float) +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 2 (const int) +0:39 Constant: +0:39 0 (const int) +0:39 vector swizzle ( temp 4-component vector of float) +0:39 'u3' ( uniform 4-component vector of float) +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 Sequence +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 Constant: +0:39 2 (const int) +0:39 Constant: +0:39 3 (const int) +0:40 move second child to first child ( temp 4-component vector of float) +0:40 'outColor' ( out 4-component vector of float) +0:40 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) +0:? 'gfo1' ( smooth in 4-component vector of float) +0:? 'gfo2' ( smooth in 2-component vector of float) +0:? 'outColor' ( out 4-component vector of float) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 56 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 14 18 54 55 + Source GLSL 460 + Name 4 "main" + Name 9 "vgo1" + Name 14 "vgo2" + Name 16 "outBlock" + MemberName 16(outBlock) 0 "o3" + Name 18 "" + Name 23 "u1" + Name 27 "u2" + Name 29 "u3" + Name 36 "um2" + Name 40 "glass" + Name 41 "crossStageBlock1" + MemberName 41(crossStageBlock1) 0 "a" + MemberName 41(crossStageBlock1) 1 "b" + Name 43 "" + Name 44 "vertOnlyBlock" + MemberName 44(vertOnlyBlock) 0 "vb1" + Name 46 "" + Name 47 "crossStageBlock2" + MemberName 47(crossStageBlock2) 0 "a" + MemberName 47(crossStageBlock2) 1 "b" + Name 52 "blockName1" + Name 54 "gl_VertexID" + Name 55 "gl_InstanceID" + Decorate 9(vgo1) Location 0 + Decorate 14(vgo2) Location 1 + Decorate 16(outBlock) Block + Decorate 18 Location 5 + Decorate 23(u1) Location 1 + Decorate 23(u1) DescriptorSet 0 + Decorate 27(u2) Location 2 + Decorate 27(u2) DescriptorSet 0 + Decorate 29(u3) Location 3 + Decorate 29(u3) DescriptorSet 0 + Decorate 36(um2) Location 4 + Decorate 36(um2) DescriptorSet 0 + Decorate 40(glass) Location 0 + Decorate 40(glass) DescriptorSet 0 + Decorate 40(glass) Binding 0 + MemberDecorate 41(crossStageBlock1) 0 Offset 0 + MemberDecorate 41(crossStageBlock1) 1 Offset 16 + Decorate 41(crossStageBlock1) Block + Decorate 43 DescriptorSet 0 + Decorate 43 Binding 0 + MemberDecorate 44(vertOnlyBlock) 0 Offset 0 + Decorate 44(vertOnlyBlock) BufferBlock + Decorate 46 DescriptorSet 0 + Decorate 46 Binding 0 + MemberDecorate 47(crossStageBlock2) 0 Offset 0 + MemberDecorate 47(crossStageBlock2) 1 Offset 16 + Decorate 47(crossStageBlock2) Block + Decorate 52(blockName1) DescriptorSet 0 + Decorate 52(blockName1) Binding 0 + Decorate 54(gl_VertexID) BuiltIn VertexId + Decorate 55(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(vgo1): 8(ptr) Variable Output + 10: 6(float) Constant 0 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(vgo2): 13(ptr) Variable Output + 15: 12(fvec2) ConstantComposite 10 10 + 16(outBlock): TypeStruct 7(fvec4) + 17: TypePointer Output 16(outBlock) + 18: 17(ptr) Variable Output + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 22: TypePointer UniformConstant 12(fvec2) + 23(u1): 22(ptr) Variable UniformConstant + 24: TypeVector 6(float) 3 + 25: 24(fvec3) ConstantComposite 10 10 10 + 26: TypePointer UniformConstant 24(fvec3) + 27(u2): 26(ptr) Variable UniformConstant 25 + 28: TypePointer UniformConstant 7(fvec4) + 29(u3): 28(ptr) Variable UniformConstant 11 + 30: TypeMatrix 12(fvec2) 2 + 31: 6(float) Constant 1082130432 + 32: 12(fvec2) ConstantComposite 31 10 + 33: 12(fvec2) ConstantComposite 10 31 + 34: 30 ConstantComposite 32 33 + 35: TypePointer UniformConstant 30 + 36(um2): 35(ptr) Variable UniformConstant 34 + 37: TypeImage 6(float) 2D sampled format:Unknown + 38: TypeSampledImage 37 + 39: TypePointer UniformConstant 38 + 40(glass): 39(ptr) Variable UniformConstant +41(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 42: TypePointer Uniform 41(crossStageBlock1) + 43: 42(ptr) Variable Uniform +44(vertOnlyBlock): TypeStruct 12(fvec2) + 45: TypePointer Uniform 44(vertOnlyBlock) + 46: 45(ptr) Variable Uniform +47(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) + 48: TypeInt 32 0 + 49: 48(int) Constant 2 + 50: TypeArray 47(crossStageBlock2) 49 + 51: TypePointer Uniform 50 + 52(blockName1): 51(ptr) Variable Uniform + 53: TypePointer Input 19(int) + 54(gl_VertexID): 53(ptr) Variable Input +55(gl_InstanceID): 53(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Store 9(vgo1) 11 + Store 14(vgo2) 15 + 21: 8(ptr) AccessChain 18 20 + Store 21 11 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 65 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 22 27 31 37 48 51 + ExecutionMode 4 InputPoints + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source GLSL 460 + Name 4 "main" + Name 8 "i" + Name 22 "gfo1" + Name 27 "gfo2" + Name 29 "outBlock" + MemberName 29(outBlock) 0 "o3" + Name 31 "gf_out" + Name 32 "outBlock" + MemberName 32(outBlock) 0 "o3" + Name 37 "inBlock" + Name 48 "vgo1" + Name 51 "vgo2" + Name 53 "u1" + Name 57 "u2" + Name 59 "u3" + Name 60 "crossStageBlock2" + MemberName 60(crossStageBlock2) 0 "a" + MemberName 60(crossStageBlock2) 1 "b" + Name 64 "blockName1" + Decorate 22(gfo1) Location 0 + Decorate 27(gfo2) Location 1 + Decorate 29(outBlock) Block + Decorate 31(gf_out) Location 5 + Decorate 32(outBlock) Block + Decorate 37(inBlock) Location 5 + Decorate 48(vgo1) Location 0 + Decorate 51(vgo2) Location 1 + Decorate 53(u1) Location 1 + Decorate 53(u1) DescriptorSet 0 + Decorate 57(u2) Location 2 + Decorate 57(u2) DescriptorSet 0 + Decorate 59(u3) Location 3 + Decorate 59(u3) DescriptorSet 0 + MemberDecorate 60(crossStageBlock2) 0 Offset 0 + MemberDecorate 60(crossStageBlock2) 1 Offset 16 + Decorate 60(crossStageBlock2) Block + Decorate 64(blockName1) DescriptorSet 0 + Decorate 64(blockName1) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 3 + 17: TypeBool + 19: TypeFloat 32 + 20: TypeVector 19(float) 4 + 21: TypePointer Output 20(fvec4) + 22(gfo1): 21(ptr) Variable Output + 23: 19(float) Constant 0 + 24: 20(fvec4) ConstantComposite 23 23 23 23 + 25: TypeVector 19(float) 2 + 26: TypePointer Output 25(fvec2) + 27(gfo2): 26(ptr) Variable Output + 28: 25(fvec2) ConstantComposite 23 23 + 29(outBlock): TypeStruct 20(fvec4) + 30: TypePointer Output 29(outBlock) + 31(gf_out): 30(ptr) Variable Output + 32(outBlock): TypeStruct 20(fvec4) + 33: TypeInt 32 0 + 34: 33(int) Constant 1 + 35: TypeArray 32(outBlock) 34 + 36: TypePointer Input 35 + 37(inBlock): 36(ptr) Variable Input + 39: TypePointer Input 20(fvec4) + 44: 6(int) Constant 1 + 46: TypeArray 20(fvec4) 34 + 47: TypePointer Input 46 + 48(vgo1): 47(ptr) Variable Input + 49: TypeArray 25(fvec2) 34 + 50: TypePointer Input 49 + 51(vgo2): 50(ptr) Variable Input + 52: TypePointer UniformConstant 25(fvec2) + 53(u1): 52(ptr) Variable UniformConstant + 54: TypeVector 19(float) 3 + 55: 54(fvec3) ConstantComposite 23 23 23 + 56: TypePointer UniformConstant 54(fvec3) + 57(u2): 56(ptr) Variable UniformConstant 55 + 58: TypePointer UniformConstant 20(fvec4) + 59(u3): 58(ptr) Variable UniformConstant 24 +60(crossStageBlock2): TypeStruct 20(fvec4) 25(fvec2) + 61: 33(int) Constant 2 + 62: TypeArray 60(crossStageBlock2) 61 + 63: TypePointer Uniform 62 + 64(blockName1): 63(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + Store 22(gfo1) 24 + Store 27(gfo2) 28 + 38: 6(int) Load 8(i) + 40: 39(ptr) AccessChain 37(inBlock) 38 9 + 41: 20(fvec4) Load 40 + 42: 21(ptr) AccessChain 31(gf_out) 9 + Store 42 41 + EmitVertex + Branch 13 + 13: Label + 43: 6(int) Load 8(i) + 45: 6(int) IAdd 43 44 + Store 8(i) 45 + Branch 10 + 12: Label + EndPrimitive + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 62 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 32 36 38 + ExecutionMode 4 OriginLowerLeft + Source GLSL 460 + Name 4 "main" + Name 9 "color" + Name 11 "gfo1" + Name 15 "u1" + Name 21 "u2" + Name 28 "u3" + Name 32 "outColor" + Name 34 "outBlock" + MemberName 34(outBlock) 0 "o3" + Name 36 "" + Name 38 "gfo2" + Name 45 "um2" + Name 49 "glass" + Name 50 "crossStageBlock1" + MemberName 50(crossStageBlock1) 0 "a" + MemberName 50(crossStageBlock1) 1 "b" + Name 52 "" + Name 53 "fragOnlyBlock" + MemberName 53(fragOnlyBlock) 0 "fb1" + Name 55 "" + Name 56 "crossStageBlock2" + MemberName 56(crossStageBlock2) 0 "a" + MemberName 56(crossStageBlock2) 1 "b" + Name 61 "blockName2" + Decorate 11(gfo1) Location 0 + Decorate 15(u1) Location 1 + Decorate 15(u1) DescriptorSet 0 + Decorate 21(u2) Location 2 + Decorate 21(u2) DescriptorSet 0 + Decorate 28(u3) Location 3 + Decorate 28(u3) DescriptorSet 0 + Decorate 32(outColor) Location 0 + Decorate 34(outBlock) Block + Decorate 36 Location 5 + Decorate 38(gfo2) Location 1 + Decorate 45(um2) Location 4 + Decorate 45(um2) DescriptorSet 0 + Decorate 49(glass) Location 0 + Decorate 49(glass) DescriptorSet 0 + Decorate 49(glass) Binding 0 + MemberDecorate 50(crossStageBlock1) 0 Offset 0 + MemberDecorate 50(crossStageBlock1) 1 Offset 16 + Decorate 50(crossStageBlock1) Block + Decorate 52 DescriptorSet 0 + Decorate 52 Binding 0 + MemberDecorate 53(fragOnlyBlock) 0 Offset 0 + Decorate 53(fragOnlyBlock) BufferBlock + Decorate 55 DescriptorSet 0 + Decorate 55 Binding 0 + MemberDecorate 56(crossStageBlock2) 0 Offset 0 + MemberDecorate 56(crossStageBlock2) 1 Offset 16 + Decorate 56(crossStageBlock2) Block + Decorate 61(blockName2) DescriptorSet 0 + Decorate 61(blockName2) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(gfo1): 10(ptr) Variable Input + 13: TypeVector 6(float) 2 + 14: TypePointer UniformConstant 13(fvec2) + 15(u1): 14(ptr) Variable UniformConstant + 19: TypeVector 6(float) 3 + 20: TypePointer UniformConstant 19(fvec3) + 21(u2): 20(ptr) Variable UniformConstant + 25: 6(float) Constant 0 + 26: 7(fvec4) ConstantComposite 25 25 25 25 + 27: TypePointer UniformConstant 7(fvec4) + 28(u3): 27(ptr) Variable UniformConstant 26 + 31: TypePointer Output 7(fvec4) + 32(outColor): 31(ptr) Variable Output + 34(outBlock): TypeStruct 7(fvec4) + 35: TypePointer Input 34(outBlock) + 36: 35(ptr) Variable Input + 37: TypePointer Input 13(fvec2) + 38(gfo2): 37(ptr) Variable Input + 39: TypeMatrix 13(fvec2) 2 + 40: 6(float) Constant 1082130432 + 41: 13(fvec2) ConstantComposite 40 25 + 42: 13(fvec2) ConstantComposite 25 40 + 43: 39 ConstantComposite 41 42 + 44: TypePointer UniformConstant 39 + 45(um2): 44(ptr) Variable UniformConstant 43 + 46: TypeImage 6(float) 2D sampled format:Unknown + 47: TypeSampledImage 46 + 48: TypePointer UniformConstant 47 + 49(glass): 48(ptr) Variable UniformConstant +50(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 51: TypePointer Uniform 50(crossStageBlock1) + 52: 51(ptr) Variable Uniform +53(fragOnlyBlock): TypeStruct 13(fvec2) + 54: TypePointer Uniform 53(fragOnlyBlock) + 55: 54(ptr) Variable Uniform +56(crossStageBlock2): TypeStruct 7(fvec4) 13(fvec2) + 57: TypeInt 32 0 + 58: 57(int) Constant 2 + 59: TypeArray 56(crossStageBlock2) 58 + 60: TypePointer Uniform 59 + 61(blockName2): 60(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(gfo1) + 16: 13(fvec2) Load 15(u1) + 17: 7(fvec4) VectorShuffle 16 16 0 1 0 1 + 18: 7(fvec4) FMul 12 17 + 22: 19(fvec3) Load 21(u2) + 23: 7(fvec4) VectorShuffle 22 22 0 1 2 0 + 24: 7(fvec4) FMul 18 23 + 29: 7(fvec4) Load 28(u3) + 30: 7(fvec4) FMul 24 29 + Store 9(color) 30 + 33: 7(fvec4) Load 9(color) + Store 32(outColor) 33 + Return + FunctionEnd diff --git a/Test/baseResults/iomap.crossStage.vert.out b/Test/baseResults/iomap.crossStage.vert.out new file mode 100644 index 0000000000..5338b80750 --- /dev/null +++ b/Test/baseResults/iomap.crossStage.vert.out @@ -0,0 +1,515 @@ +iomap.crossStage.vert +Shader version: 460 +0:? Sequence +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'o1' ( smooth out 4-component vector of float) +0:34 Constant: +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'o2' ( smooth out 2-component vector of float) +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:36 move second child to first child ( temp 4-component vector of float) +0:36 o3: direct index for structure ( out 4-component vector of float) +0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:36 Constant: +0:36 0 (const uint) +0:36 Constant: +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:? Linker Objects +0:? 'o1' ( smooth out 4-component vector of float) +0:? 'o2' ( smooth out 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +iomap.crossStage.frag +Shader version: 460 +0:? Sequence +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:38 Sequence +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'color' ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 'o1' ( smooth in 4-component vector of float) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u1' ( uniform 2-component vector of float) +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u2' ( uniform 3-component vector of float) +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u3' ( uniform 4-component vector of float) +0:38 0.000000 +0:38 0.000000 +0:38 0.000000 +0:38 0.000000 +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 3 (const int) +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'outColor' ( out 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) +0:? 'o2' ( smooth in 2-component vector of float) +0:? 'o1' ( smooth in 4-component vector of float) +0:? 'outColor' ( out 4-component vector of float) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + + +Linked vertex stage: + + +Linked fragment stage: + +WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. + blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" + +Shader version: 460 +0:? Sequence +0:32 Function Definition: main( ( global void) +0:32 Function Parameters: +0:34 Sequence +0:34 move second child to first child ( temp 4-component vector of float) +0:34 'o1' ( smooth out 4-component vector of float) +0:34 Constant: +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:34 0.000000 +0:35 move second child to first child ( temp 2-component vector of float) +0:35 'o2' ( smooth out 2-component vector of float) +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:36 move second child to first child ( temp 4-component vector of float) +0:36 o3: direct index for structure ( out 4-component vector of float) +0:36 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:36 Constant: +0:36 0 (const uint) +0:36 Constant: +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:36 0.000000 +0:? Linker Objects +0:? 'o1' ( smooth out 4-component vector of float) +0:? 'o2' ( smooth out 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out 4-component vector of float o3}) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 460 +0:? Sequence +0:36 Function Definition: main( ( global void) +0:36 Function Parameters: +0:38 Sequence +0:38 Sequence +0:38 move second child to first child ( temp 4-component vector of float) +0:38 'color' ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 component-wise multiply ( temp 4-component vector of float) +0:38 'o1' ( smooth in 4-component vector of float) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u1' ( uniform 2-component vector of float) +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u2' ( uniform 3-component vector of float) +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 0 (const int) +0:38 vector swizzle ( temp 4-component vector of float) +0:38 'u3' ( uniform 4-component vector of float) +0:38 0.000000 +0:38 0.000000 +0:38 0.000000 +0:38 0.000000 +0:38 Sequence +0:38 Constant: +0:38 0 (const int) +0:38 Constant: +0:38 1 (const int) +0:38 Constant: +0:38 2 (const int) +0:38 Constant: +0:38 3 (const int) +0:39 move second child to first child ( temp 4-component vector of float) +0:39 'outColor' ( out 4-component vector of float) +0:39 'color' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in 4-component vector of float o3}) +0:? 'o2' ( smooth in 2-component vector of float) +0:? 'o1' ( smooth in 4-component vector of float) +0:? 'outColor' ( out 4-component vector of float) +0:? 'u1' ( uniform 2-component vector of float) +0:? 'u2' ( uniform 3-component vector of float) +0:? 'u3' ( uniform 4-component vector of float) +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 0.000000 +0:? 'um2' ( uniform 2X2 matrix of float) +0:? 4.000000 +0:? 0.000000 +0:? 0.000000 +0:? 4.000000 +0:? 'glass' (layout( location=0 binding=0) uniform sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) buffer block{layout( column_major std430) buffer 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 56 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 14 18 54 55 + Source GLSL 460 + Name 4 "main" + Name 9 "o1" + Name 14 "o2" + Name 16 "outBlock" + MemberName 16(outBlock) 0 "o3" + Name 18 "" + Name 23 "u1" + Name 27 "u2" + Name 29 "u3" + Name 36 "um2" + Name 40 "glass" + Name 41 "crossStageBlock1" + MemberName 41(crossStageBlock1) 0 "a" + MemberName 41(crossStageBlock1) 1 "b" + Name 43 "" + Name 44 "vertOnlyBlock" + MemberName 44(vertOnlyBlock) 0 "vb1" + Name 46 "" + Name 47 "crossStageBlock2" + MemberName 47(crossStageBlock2) 0 "a" + MemberName 47(crossStageBlock2) 1 "b" + Name 52 "blockName1" + Name 54 "gl_VertexID" + Name 55 "gl_InstanceID" + Decorate 9(o1) Location 0 + Decorate 14(o2) Location 1 + Decorate 16(outBlock) Block + Decorate 18 Location 5 + Decorate 23(u1) Location 1 + Decorate 23(u1) DescriptorSet 0 + Decorate 27(u2) Location 2 + Decorate 27(u2) DescriptorSet 0 + Decorate 29(u3) Location 3 + Decorate 29(u3) DescriptorSet 0 + Decorate 36(um2) Location 4 + Decorate 36(um2) DescriptorSet 0 + Decorate 40(glass) Location 0 + Decorate 40(glass) DescriptorSet 0 + Decorate 40(glass) Binding 0 + MemberDecorate 41(crossStageBlock1) 0 Offset 0 + MemberDecorate 41(crossStageBlock1) 1 Offset 16 + Decorate 41(crossStageBlock1) Block + Decorate 43 DescriptorSet 0 + Decorate 43 Binding 0 + MemberDecorate 44(vertOnlyBlock) 0 Offset 0 + Decorate 44(vertOnlyBlock) BufferBlock + Decorate 46 DescriptorSet 0 + Decorate 46 Binding 0 + MemberDecorate 47(crossStageBlock2) 0 Offset 0 + MemberDecorate 47(crossStageBlock2) 1 Offset 16 + Decorate 47(crossStageBlock2) Block + Decorate 52(blockName1) DescriptorSet 0 + Decorate 52(blockName1) Binding 0 + Decorate 54(gl_VertexID) BuiltIn VertexId + Decorate 55(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(o1): 8(ptr) Variable Output + 10: 6(float) Constant 0 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(o2): 13(ptr) Variable Output + 15: 12(fvec2) ConstantComposite 10 10 + 16(outBlock): TypeStruct 7(fvec4) + 17: TypePointer Output 16(outBlock) + 18: 17(ptr) Variable Output + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 22: TypePointer UniformConstant 12(fvec2) + 23(u1): 22(ptr) Variable UniformConstant + 24: TypeVector 6(float) 3 + 25: 24(fvec3) ConstantComposite 10 10 10 + 26: TypePointer UniformConstant 24(fvec3) + 27(u2): 26(ptr) Variable UniformConstant 25 + 28: TypePointer UniformConstant 7(fvec4) + 29(u3): 28(ptr) Variable UniformConstant 11 + 30: TypeMatrix 12(fvec2) 2 + 31: 6(float) Constant 1082130432 + 32: 12(fvec2) ConstantComposite 31 10 + 33: 12(fvec2) ConstantComposite 10 31 + 34: 30 ConstantComposite 32 33 + 35: TypePointer UniformConstant 30 + 36(um2): 35(ptr) Variable UniformConstant 34 + 37: TypeImage 6(float) 2D sampled format:Unknown + 38: TypeSampledImage 37 + 39: TypePointer UniformConstant 38 + 40(glass): 39(ptr) Variable UniformConstant +41(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 42: TypePointer Uniform 41(crossStageBlock1) + 43: 42(ptr) Variable Uniform +44(vertOnlyBlock): TypeStruct 12(fvec2) + 45: TypePointer Uniform 44(vertOnlyBlock) + 46: 45(ptr) Variable Uniform +47(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) + 48: TypeInt 32 0 + 49: 48(int) Constant 2 + 50: TypeArray 47(crossStageBlock2) 49 + 51: TypePointer Uniform 50 + 52(blockName1): 51(ptr) Variable Uniform + 53: TypePointer Input 19(int) + 54(gl_VertexID): 53(ptr) Variable Input +55(gl_InstanceID): 53(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Store 9(o1) 11 + Store 14(o2) 15 + 21: 8(ptr) AccessChain 18 20 + Store 21 11 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 62 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 11 32 36 38 + ExecutionMode 4 OriginLowerLeft + Source GLSL 460 + Name 4 "main" + Name 9 "color" + Name 11 "o1" + Name 15 "u1" + Name 21 "u2" + Name 28 "u3" + Name 32 "outColor" + Name 34 "outBlock" + MemberName 34(outBlock) 0 "o3" + Name 36 "" + Name 38 "o2" + Name 45 "um2" + Name 49 "glass" + Name 50 "crossStageBlock1" + MemberName 50(crossStageBlock1) 0 "a" + MemberName 50(crossStageBlock1) 1 "b" + Name 52 "" + Name 53 "fragOnlyBlock" + MemberName 53(fragOnlyBlock) 0 "fb1" + Name 55 "" + Name 56 "crossStageBlock2" + MemberName 56(crossStageBlock2) 0 "a" + MemberName 56(crossStageBlock2) 1 "b" + Name 61 "blockName2" + Decorate 11(o1) Location 0 + Decorate 15(u1) Location 1 + Decorate 15(u1) DescriptorSet 0 + Decorate 21(u2) Location 2 + Decorate 21(u2) DescriptorSet 0 + Decorate 28(u3) Location 3 + Decorate 28(u3) DescriptorSet 0 + Decorate 32(outColor) Location 0 + Decorate 34(outBlock) Block + Decorate 36 Location 5 + Decorate 38(o2) Location 1 + Decorate 45(um2) Location 4 + Decorate 45(um2) DescriptorSet 0 + Decorate 49(glass) Location 0 + Decorate 49(glass) DescriptorSet 0 + Decorate 49(glass) Binding 0 + MemberDecorate 50(crossStageBlock1) 0 Offset 0 + MemberDecorate 50(crossStageBlock1) 1 Offset 16 + Decorate 50(crossStageBlock1) Block + Decorate 52 DescriptorSet 0 + Decorate 52 Binding 0 + MemberDecorate 53(fragOnlyBlock) 0 Offset 0 + Decorate 53(fragOnlyBlock) BufferBlock + Decorate 55 DescriptorSet 0 + Decorate 55 Binding 0 + MemberDecorate 56(crossStageBlock2) 0 Offset 0 + MemberDecorate 56(crossStageBlock2) 1 Offset 16 + Decorate 56(crossStageBlock2) Block + Decorate 61(blockName2) DescriptorSet 0 + Decorate 61(blockName2) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 10: TypePointer Input 7(fvec4) + 11(o1): 10(ptr) Variable Input + 13: TypeVector 6(float) 2 + 14: TypePointer UniformConstant 13(fvec2) + 15(u1): 14(ptr) Variable UniformConstant + 19: TypeVector 6(float) 3 + 20: TypePointer UniformConstant 19(fvec3) + 21(u2): 20(ptr) Variable UniformConstant + 25: 6(float) Constant 0 + 26: 7(fvec4) ConstantComposite 25 25 25 25 + 27: TypePointer UniformConstant 7(fvec4) + 28(u3): 27(ptr) Variable UniformConstant 26 + 31: TypePointer Output 7(fvec4) + 32(outColor): 31(ptr) Variable Output + 34(outBlock): TypeStruct 7(fvec4) + 35: TypePointer Input 34(outBlock) + 36: 35(ptr) Variable Input + 37: TypePointer Input 13(fvec2) + 38(o2): 37(ptr) Variable Input + 39: TypeMatrix 13(fvec2) 2 + 40: 6(float) Constant 1082130432 + 41: 13(fvec2) ConstantComposite 40 25 + 42: 13(fvec2) ConstantComposite 25 40 + 43: 39 ConstantComposite 41 42 + 44: TypePointer UniformConstant 39 + 45(um2): 44(ptr) Variable UniformConstant 43 + 46: TypeImage 6(float) 2D sampled format:Unknown + 47: TypeSampledImage 46 + 48: TypePointer UniformConstant 47 + 49(glass): 48(ptr) Variable UniformConstant +50(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 51: TypePointer Uniform 50(crossStageBlock1) + 52: 51(ptr) Variable Uniform +53(fragOnlyBlock): TypeStruct 13(fvec2) + 54: TypePointer Uniform 53(fragOnlyBlock) + 55: 54(ptr) Variable Uniform +56(crossStageBlock2): TypeStruct 7(fvec4) 13(fvec2) + 57: TypeInt 32 0 + 58: 57(int) Constant 2 + 59: TypeArray 56(crossStageBlock2) 58 + 60: TypePointer Uniform 59 + 61(blockName2): 60(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 12: 7(fvec4) Load 11(o1) + 16: 13(fvec2) Load 15(u1) + 17: 7(fvec4) VectorShuffle 16 16 0 1 0 1 + 18: 7(fvec4) FMul 12 17 + 22: 19(fvec3) Load 21(u2) + 23: 7(fvec4) VectorShuffle 22 22 0 1 2 0 + 24: 7(fvec4) FMul 18 23 + 29: 7(fvec4) Load 28(u3) + 30: 7(fvec4) FMul 24 29 + Store 9(color) 30 + 33: 7(fvec4) Load 9(color) + Store 32(outColor) 33 + Return + FunctionEnd diff --git a/Test/baseResults/iomap.crossStage.vk.vert.out b/Test/baseResults/iomap.crossStage.vk.vert.out new file mode 100644 index 0000000000..e137bdfc40 --- /dev/null +++ b/Test/baseResults/iomap.crossStage.vk.vert.out @@ -0,0 +1,720 @@ +iomap.crossStage.vk.vert +Shader version: 460 +0:? Sequence +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'vgo1' ( smooth out highp 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 move second child to first child ( temp highp 2-component vector of float) +0:29 'vgo2' ( smooth out highp 2-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 o3: direct index for structure ( out highp 4-component vector of float) +0:30 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) +0:30 Constant: +0:30 0 (const uint) +0:30 Constant: +0:30 0.000000 +0:30 0.000000 +0:30 0.000000 +0:30 0.000000 +0:? Linker Objects +0:? 'vgo1' ( smooth out highp 4-component vector of float) +0:? 'vgo2' ( smooth out highp 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) +0:? 'glass' (layout( binding=0) uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) + +iomap.crossStage.vk.geom +Shader version: 460 +invocations = -1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp int) +0:27 'i' ( temp highp int) +0:27 Constant: +0:27 0 (const int) +0:27 Loop with condition tested first +0:27 Loop Condition +0:27 Compare Less Than ( temp bool) +0:27 'i' ( temp highp int) +0:27 Constant: +0:27 3 (const int) +0:27 Loop Body +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'gfo1' (layout( stream=0) out highp 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 move second child to first child ( temp highp 2-component vector of float) +0:29 'gfo2' (layout( stream=0) out highp 2-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 o3: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:30 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) +0:30 Constant: +0:30 0 (const int) +0:30 o3: direct index for structure ( in highp 4-component vector of float) +0:30 indirect index (layout( location=5) temp block{ in highp 4-component vector of float o3}) +0:30 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) +0:30 'i' ( temp highp int) +0:30 Constant: +0:30 0 (const int) +0:31 EmitVertex ( global void) +0:27 Loop Terminal Expression +0:27 Post-Increment ( temp highp int) +0:27 'i' ( temp highp int) +0:33 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of highp 4-component vector of float) +0:? 'vgo2' ( in 1-element array of highp 2-component vector of float) +0:? 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) +0:? 'gfo1' (layout( stream=0) out highp 4-component vector of float) +0:? 'gfo2' (layout( stream=0) out highp 2-component vector of float) +0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) + +iomap.crossStage.vk.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:30 Function Definition: Bar( ( global highp 2-component vector of float) +0:30 Function Parameters: +0:31 Sequence +0:31 Branch: Return with expression +0:32 add ( temp highp 2-component vector of float) +0:31 add ( temp highp 2-component vector of float) +0:31 fb1: direct index for structure (layout( column_major std430) readonly buffer highp 2-component vector of float) +0:31 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) +0:31 Constant: +0:31 0 (const uint) +0:32 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) +0:32 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:32 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1 (const int) +0:33 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) +0:33 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:33 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1 (const int) +0:36 Function Definition: Foo( ( global highp 4-component vector of float) +0:36 Function Parameters: +0:37 Sequence +0:37 Branch: Return with expression +0:40 add ( temp highp 4-component vector of float) +0:39 add ( temp highp 4-component vector of float) +0:38 add ( temp highp 4-component vector of float) +0:37 add ( temp highp 4-component vector of float) +0:37 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:37 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:37 Constant: +0:37 0 (const uint) +0:38 b: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:38 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:38 Constant: +0:38 1 (const uint) +0:39 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:39 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:39 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 0 (const int) +0:40 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:40 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:40 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 0 (const int) +0:41 Construct vec4 ( temp highp 4-component vector of float) +0:41 Function Call: Bar( ( global highp 2-component vector of float) +0:41 Constant: +0:41 0.000000 +0:41 Constant: +0:41 0.000000 +0:44 Function Definition: main( ( global void) +0:44 Function Parameters: +0:46 Sequence +0:46 Sequence +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 'color' ( temp highp 4-component vector of float) +0:46 'gfo1' ( smooth in highp 4-component vector of float) +0:47 move second child to first child ( temp highp 4-component vector of float) +0:47 'color' ( temp highp 4-component vector of float) +0:47 add ( temp highp 4-component vector of float) +0:47 'color' ( temp highp 4-component vector of float) +0:47 Function Call: Foo( ( global highp 4-component vector of float) +0:48 move second child to first child ( temp highp 4-component vector of float) +0:48 'outColor' ( out highp 4-component vector of float) +0:48 'color' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in highp 4-component vector of float o3}) +0:? 'gfo1' ( smooth in highp 4-component vector of float) +0:? 'gfo2' ( smooth in highp 2-component vector of float) +0:? 'outColor' ( out highp 4-component vector of float) +0:? 'glass' (layout( binding=0) uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Linked fragment stage: + +WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. + blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" + +Shader version: 460 +0:? Sequence +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'vgo1' ( smooth out highp 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 move second child to first child ( temp highp 2-component vector of float) +0:29 'vgo2' ( smooth out highp 2-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 o3: direct index for structure ( out highp 4-component vector of float) +0:30 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) +0:30 Constant: +0:30 0 (const uint) +0:30 Constant: +0:30 0.000000 +0:30 0.000000 +0:30 0.000000 +0:30 0.000000 +0:? Linker Objects +0:? 'vgo1' ( smooth out highp 4-component vector of float) +0:? 'vgo2' ( smooth out highp 2-component vector of float) +0:? 'anon@0' (layout( location=5) out block{ out highp 4-component vector of float o3}) +0:? 'glass' (layout( binding=0) uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float vb1}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +Shader version: 460 +invocations = 1 +max_vertices = 3 +input primitive = points +output primitive = triangle_strip +0:? Sequence +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp int) +0:27 'i' ( temp highp int) +0:27 Constant: +0:27 0 (const int) +0:27 Loop with condition tested first +0:27 Loop Condition +0:27 Compare Less Than ( temp bool) +0:27 'i' ( temp highp int) +0:27 Constant: +0:27 3 (const int) +0:27 Loop Body +0:28 Sequence +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'gfo1' (layout( stream=0) out highp 4-component vector of float) +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:29 move second child to first child ( temp highp 2-component vector of float) +0:29 'gfo2' (layout( stream=0) out highp 2-component vector of float) +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 o3: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:30 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) +0:30 Constant: +0:30 0 (const int) +0:30 o3: direct index for structure ( in highp 4-component vector of float) +0:30 indirect index (layout( location=5) temp block{ in highp 4-component vector of float o3}) +0:30 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) +0:30 'i' ( temp highp int) +0:30 Constant: +0:30 0 (const int) +0:31 EmitVertex ( global void) +0:27 Loop Terminal Expression +0:27 Post-Increment ( temp highp int) +0:27 'i' ( temp highp int) +0:33 EndPrimitive ( global void) +0:? Linker Objects +0:? 'vgo1' ( in 1-element array of highp 4-component vector of float) +0:? 'vgo2' ( in 1-element array of highp 2-component vector of float) +0:? 'inBlock' (layout( location=5) in 1-element array of block{ in highp 4-component vector of float o3}) +0:? 'gfo1' (layout( stream=0) out highp 4-component vector of float) +0:? 'gfo2' (layout( stream=0) out highp 2-component vector of float) +0:? 'gf_out' (layout( location=5 stream=0) out block{layout( stream=0) out highp 4-component vector of float o3}) +0:? 'blockName1' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:30 Function Definition: Bar( ( global highp 2-component vector of float) +0:30 Function Parameters: +0:31 Sequence +0:31 Branch: Return with expression +0:32 add ( temp highp 2-component vector of float) +0:31 add ( temp highp 2-component vector of float) +0:31 fb1: direct index for structure (layout( column_major std430) readonly buffer highp 2-component vector of float) +0:31 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) +0:31 Constant: +0:31 0 (const uint) +0:32 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) +0:32 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:32 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 1 (const int) +0:33 b: direct index for structure (layout( column_major std140) uniform highp 2-component vector of float) +0:33 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:33 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 1 (const int) +0:36 Function Definition: Foo( ( global highp 4-component vector of float) +0:36 Function Parameters: +0:37 Sequence +0:37 Branch: Return with expression +0:40 add ( temp highp 4-component vector of float) +0:39 add ( temp highp 4-component vector of float) +0:38 add ( temp highp 4-component vector of float) +0:37 add ( temp highp 4-component vector of float) +0:37 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:37 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:37 Constant: +0:37 0 (const uint) +0:38 b: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:38 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:38 Constant: +0:38 1 (const uint) +0:39 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:39 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:39 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:39 Constant: +0:39 0 (const int) +0:39 Constant: +0:39 0 (const int) +0:40 a: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:40 direct index (layout( column_major std140) temp block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:40 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) +0:40 Constant: +0:40 1 (const int) +0:40 Constant: +0:40 0 (const int) +0:41 Construct vec4 ( temp highp 4-component vector of float) +0:41 Function Call: Bar( ( global highp 2-component vector of float) +0:41 Constant: +0:41 0.000000 +0:41 Constant: +0:41 0.000000 +0:44 Function Definition: main( ( global void) +0:44 Function Parameters: +0:46 Sequence +0:46 Sequence +0:46 move second child to first child ( temp highp 4-component vector of float) +0:46 'color' ( temp highp 4-component vector of float) +0:46 'gfo1' ( smooth in highp 4-component vector of float) +0:47 move second child to first child ( temp highp 4-component vector of float) +0:47 'color' ( temp highp 4-component vector of float) +0:47 add ( temp highp 4-component vector of float) +0:47 'color' ( temp highp 4-component vector of float) +0:47 Function Call: Foo( ( global highp 4-component vector of float) +0:48 move second child to first child ( temp highp 4-component vector of float) +0:48 'outColor' ( out highp 4-component vector of float) +0:48 'color' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( location=5) in block{ in highp 4-component vector of float o3}) +0:? 'gfo1' ( smooth in highp 4-component vector of float) +0:? 'gfo2' ( smooth in highp 2-component vector of float) +0:? 'outColor' ( out highp 4-component vector of float) +0:? 'glass' (layout( binding=0) uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 4-component vector of float b}) +0:? 'anon@2' (layout( column_major std430) readonly buffer block{layout( column_major std430) readonly buffer highp 2-component vector of float fb1}) +0:? 'blockName2' (layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 38 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 14 18 + Source GLSL 460 + Name 4 "main" + Name 9 "vgo1" + Name 14 "vgo2" + Name 16 "outBlock" + MemberName 16(outBlock) 0 "o3" + Name 18 "" + Name 25 "glass" + Name 26 "crossStageBlock1" + MemberName 26(crossStageBlock1) 0 "a" + MemberName 26(crossStageBlock1) 1 "b" + Name 28 "" + Name 29 "vertOnlyBlock" + MemberName 29(vertOnlyBlock) 0 "vb1" + Name 31 "" + Name 32 "crossStageBlock2" + MemberName 32(crossStageBlock2) 0 "a" + MemberName 32(crossStageBlock2) 1 "b" + Name 37 "blockName1" + Decorate 9(vgo1) Location 0 + Decorate 14(vgo2) Location 1 + Decorate 16(outBlock) Block + Decorate 18 Location 5 + Decorate 25(glass) DescriptorSet 0 + Decorate 25(glass) Binding 0 + MemberDecorate 26(crossStageBlock1) 0 Offset 0 + MemberDecorate 26(crossStageBlock1) 1 Offset 16 + Decorate 26(crossStageBlock1) Block + Decorate 28 DescriptorSet 0 + Decorate 28 Binding 1 + MemberDecorate 29(vertOnlyBlock) 0 NonWritable + MemberDecorate 29(vertOnlyBlock) 0 Offset 0 + Decorate 29(vertOnlyBlock) BufferBlock + Decorate 31 DescriptorSet 0 + Decorate 31 Binding 0 + MemberDecorate 32(crossStageBlock2) 0 Offset 0 + MemberDecorate 32(crossStageBlock2) 1 Offset 16 + Decorate 32(crossStageBlock2) Block + Decorate 37(blockName1) DescriptorSet 0 + Decorate 37(blockName1) Binding 3 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(vgo1): 8(ptr) Variable Output + 10: 6(float) Constant 0 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(vgo2): 13(ptr) Variable Output + 15: 12(fvec2) ConstantComposite 10 10 + 16(outBlock): TypeStruct 7(fvec4) + 17: TypePointer Output 16(outBlock) + 18: 17(ptr) Variable Output + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 22: TypeImage 6(float) 2D sampled format:Unknown + 23: TypeSampledImage 22 + 24: TypePointer UniformConstant 23 + 25(glass): 24(ptr) Variable UniformConstant +26(crossStageBlock1): TypeStruct 7(fvec4) 7(fvec4) + 27: TypePointer Uniform 26(crossStageBlock1) + 28: 27(ptr) Variable Uniform +29(vertOnlyBlock): TypeStruct 12(fvec2) + 30: TypePointer Uniform 29(vertOnlyBlock) + 31: 30(ptr) Variable Uniform +32(crossStageBlock2): TypeStruct 7(fvec4) 12(fvec2) + 33: TypeInt 32 0 + 34: 33(int) Constant 2 + 35: TypeArray 32(crossStageBlock2) 34 + 36: TypePointer Uniform 35 + 37(blockName1): 36(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + Store 9(vgo1) 11 + Store 14(vgo2) 15 + 21: 8(ptr) AccessChain 18 20 + Store 21 11 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 57 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 22 27 31 37 48 51 + ExecutionMode 4 InputPoints + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source GLSL 460 + Name 4 "main" + Name 8 "i" + Name 22 "gfo1" + Name 27 "gfo2" + Name 29 "outBlock" + MemberName 29(outBlock) 0 "o3" + Name 31 "gf_out" + Name 32 "outBlock" + MemberName 32(outBlock) 0 "o3" + Name 37 "inBlock" + Name 48 "vgo1" + Name 51 "vgo2" + Name 52 "crossStageBlock2" + MemberName 52(crossStageBlock2) 0 "a" + MemberName 52(crossStageBlock2) 1 "b" + Name 56 "blockName1" + Decorate 22(gfo1) Location 0 + Decorate 27(gfo2) Location 1 + Decorate 29(outBlock) Block + Decorate 31(gf_out) Location 5 + Decorate 32(outBlock) Block + Decorate 37(inBlock) Location 5 + Decorate 48(vgo1) Location 0 + Decorate 51(vgo2) Location 1 + MemberDecorate 52(crossStageBlock2) 0 Offset 0 + MemberDecorate 52(crossStageBlock2) 1 Offset 16 + Decorate 52(crossStageBlock2) Block + Decorate 56(blockName1) DescriptorSet 0 + Decorate 56(blockName1) Binding 3 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Function 6(int) + 9: 6(int) Constant 0 + 16: 6(int) Constant 3 + 17: TypeBool + 19: TypeFloat 32 + 20: TypeVector 19(float) 4 + 21: TypePointer Output 20(fvec4) + 22(gfo1): 21(ptr) Variable Output + 23: 19(float) Constant 0 + 24: 20(fvec4) ConstantComposite 23 23 23 23 + 25: TypeVector 19(float) 2 + 26: TypePointer Output 25(fvec2) + 27(gfo2): 26(ptr) Variable Output + 28: 25(fvec2) ConstantComposite 23 23 + 29(outBlock): TypeStruct 20(fvec4) + 30: TypePointer Output 29(outBlock) + 31(gf_out): 30(ptr) Variable Output + 32(outBlock): TypeStruct 20(fvec4) + 33: TypeInt 32 0 + 34: 33(int) Constant 1 + 35: TypeArray 32(outBlock) 34 + 36: TypePointer Input 35 + 37(inBlock): 36(ptr) Variable Input + 39: TypePointer Input 20(fvec4) + 44: 6(int) Constant 1 + 46: TypeArray 20(fvec4) 34 + 47: TypePointer Input 46 + 48(vgo1): 47(ptr) Variable Input + 49: TypeArray 25(fvec2) 34 + 50: TypePointer Input 49 + 51(vgo2): 50(ptr) Variable Input +52(crossStageBlock2): TypeStruct 20(fvec4) 25(fvec2) + 53: 33(int) Constant 2 + 54: TypeArray 52(crossStageBlock2) 53 + 55: TypePointer Uniform 54 + 56(blockName1): 55(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 8(i): 7(ptr) Variable Function + Store 8(i) 9 + Branch 10 + 10: Label + LoopMerge 12 13 None + Branch 14 + 14: Label + 15: 6(int) Load 8(i) + 18: 17(bool) SLessThan 15 16 + BranchConditional 18 11 12 + 11: Label + Store 22(gfo1) 24 + Store 27(gfo2) 28 + 38: 6(int) Load 8(i) + 40: 39(ptr) AccessChain 37(inBlock) 38 9 + 41: 20(fvec4) Load 40 + 42: 21(ptr) AccessChain 31(gf_out) 9 + Store 42 41 + EmitVertex + Branch 13 + 13: Label + 43: 6(int) Load 8(i) + 45: 6(int) IAdd 43 44 + Store 8(i) 45 + Branch 10 + 12: Label + EndPrimitive + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 81 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 64 70 74 76 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 9 "Bar(" + Name 13 "Foo(" + Name 15 "fragOnlyBlock" + MemberName 15(fragOnlyBlock) 0 "fb1" + Name 17 "" + Name 23 "crossStageBlock2" + MemberName 23(crossStageBlock2) 0 "a" + MemberName 23(crossStageBlock2) 1 "b" + Name 28 "blockName2" + Name 38 "crossStageBlock1" + MemberName 38(crossStageBlock1) 0 "a" + MemberName 38(crossStageBlock1) 1 "b" + Name 40 "" + Name 62 "color" + Name 64 "gfo1" + Name 70 "outColor" + Name 72 "outBlock" + MemberName 72(outBlock) 0 "o3" + Name 74 "" + Name 76 "gfo2" + Name 80 "glass" + MemberDecorate 15(fragOnlyBlock) 0 NonWritable + MemberDecorate 15(fragOnlyBlock) 0 Offset 0 + Decorate 15(fragOnlyBlock) BufferBlock + Decorate 17 DescriptorSet 0 + Decorate 17 Binding 2 + MemberDecorate 23(crossStageBlock2) 0 Offset 0 + MemberDecorate 23(crossStageBlock2) 1 Offset 16 + Decorate 23(crossStageBlock2) Block + Decorate 28(blockName2) DescriptorSet 0 + Decorate 28(blockName2) Binding 3 + MemberDecorate 38(crossStageBlock1) 0 Offset 0 + MemberDecorate 38(crossStageBlock1) 1 Offset 16 + Decorate 38(crossStageBlock1) Block + Decorate 40 DescriptorSet 0 + Decorate 40 Binding 1 + Decorate 64(gfo1) Location 0 + Decorate 70(outColor) Location 0 + Decorate 72(outBlock) Block + Decorate 74 Location 5 + Decorate 76(gfo2) Location 1 + Decorate 80(glass) DescriptorSet 0 + Decorate 80(glass) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8: TypeFunction 7(fvec2) + 11: TypeVector 6(float) 4 + 12: TypeFunction 11(fvec4) +15(fragOnlyBlock): TypeStruct 7(fvec2) + 16: TypePointer Uniform 15(fragOnlyBlock) + 17: 16(ptr) Variable Uniform + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 20: TypePointer Uniform 7(fvec2) +23(crossStageBlock2): TypeStruct 11(fvec4) 7(fvec2) + 24: TypeInt 32 0 + 25: 24(int) Constant 2 + 26: TypeArray 23(crossStageBlock2) 25 + 27: TypePointer Uniform 26 + 28(blockName2): 27(ptr) Variable Uniform + 29: 18(int) Constant 1 +38(crossStageBlock1): TypeStruct 11(fvec4) 11(fvec4) + 39: TypePointer Uniform 38(crossStageBlock1) + 40: 39(ptr) Variable Uniform + 41: TypePointer Uniform 11(fvec4) + 54: 6(float) Constant 0 + 61: TypePointer Function 11(fvec4) + 63: TypePointer Input 11(fvec4) + 64(gfo1): 63(ptr) Variable Input + 69: TypePointer Output 11(fvec4) + 70(outColor): 69(ptr) Variable Output + 72(outBlock): TypeStruct 11(fvec4) + 73: TypePointer Input 72(outBlock) + 74: 73(ptr) Variable Input + 75: TypePointer Input 7(fvec2) + 76(gfo2): 75(ptr) Variable Input + 77: TypeImage 6(float) 2D sampled format:Unknown + 78: TypeSampledImage 77 + 79: TypePointer UniformConstant 78 + 80(glass): 79(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 62(color): 61(ptr) Variable Function + 65: 11(fvec4) Load 64(gfo1) + Store 62(color) 65 + 66: 11(fvec4) Load 62(color) + 67: 11(fvec4) FunctionCall 13(Foo() + 68: 11(fvec4) FAdd 66 67 + Store 62(color) 68 + 71: 11(fvec4) Load 62(color) + Store 70(outColor) 71 + Return + FunctionEnd + 9(Bar(): 7(fvec2) Function None 8 + 10: Label + 21: 20(ptr) AccessChain 17 19 + 22: 7(fvec2) Load 21 + 30: 20(ptr) AccessChain 28(blockName2) 19 29 + 31: 7(fvec2) Load 30 + 32: 7(fvec2) FAdd 22 31 + 33: 20(ptr) AccessChain 28(blockName2) 29 29 + 34: 7(fvec2) Load 33 + 35: 7(fvec2) FAdd 32 34 + ReturnValue 35 + FunctionEnd + 13(Foo(): 11(fvec4) Function None 12 + 14: Label + 42: 41(ptr) AccessChain 40 19 + 43: 11(fvec4) Load 42 + 44: 41(ptr) AccessChain 40 29 + 45: 11(fvec4) Load 44 + 46: 11(fvec4) FAdd 43 45 + 47: 41(ptr) AccessChain 28(blockName2) 19 19 + 48: 11(fvec4) Load 47 + 49: 11(fvec4) FAdd 46 48 + 50: 41(ptr) AccessChain 28(blockName2) 29 19 + 51: 11(fvec4) Load 50 + 52: 11(fvec4) FAdd 49 51 + 53: 7(fvec2) FunctionCall 9(Bar() + 55: 6(float) CompositeExtract 53 0 + 56: 6(float) CompositeExtract 53 1 + 57: 11(fvec4) CompositeConstruct 55 56 54 54 + 58: 11(fvec4) FAdd 52 57 + ReturnValue 58 + FunctionEnd diff --git a/Test/baseResults/vk.relaxed.errorcheck.vert.out b/Test/baseResults/vk.relaxed.errorcheck.vert.out new file mode 100644 index 0000000000..f19eae6407 --- /dev/null +++ b/Test/baseResults/vk.relaxed.errorcheck.vert.out @@ -0,0 +1,124 @@ +vk.relaxed.errorcheck.vert +Shader version: 460 +0:? Sequence +0:9 Function Definition: foo( ( global highp 4-component vector of float) +0:9 Function Parameters: +0:10 Sequence +0:10 Branch: Return with expression +0:10 vector swizzle ( temp highp 4-component vector of float) +0:10 a: direct index for structure ( uniform highp 2-component vector of float) +0:10 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) +0:10 Constant: +0:10 0 (const uint) +0:10 Sequence +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp highp 4-component vector of float) +0:14 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:14 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) + +vk.relaxed.errorcheck.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: foo( ( global highp 4-component vector of float) +0:10 Function Parameters: +0:11 Sequence +0:11 Branch: Return with expression +0:11 a: direct index for structure ( uniform highp 4-component vector of float) +0:11 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) +0:11 Constant: +0:11 0 (const uint) +0:14 Function Definition: main( ( global void) +0:14 Function Parameters: +0:15 Sequence +0:15 move second child to first child ( temp highp 4-component vector of float) +0:15 'o' ( out highp 4-component vector of float) +0:15 add ( temp highp 4-component vector of float) +0:15 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:15 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) + + +Linked vertex stage: + + +Linked fragment stage: + +ERROR: Linking unknown stage stage: Types must match: + a: " uniform highp 2-component vector of float" versus " uniform highp 4-component vector of float" + +Shader version: 460 +0:? Sequence +0:9 Function Definition: foo( ( global highp 4-component vector of float) +0:9 Function Parameters: +0:10 Sequence +0:10 Branch: Return with expression +0:10 vector swizzle ( temp highp 4-component vector of float) +0:10 a: direct index for structure ( uniform highp 2-component vector of float) +0:10 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) +0:10 Constant: +0:10 0 (const uint) +0:10 Sequence +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:13 Function Definition: main( ( global void) +0:13 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp highp 4-component vector of float) +0:14 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:14 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: foo( ( global highp 4-component vector of float) +0:10 Function Parameters: +0:11 Sequence +0:11 Branch: Return with expression +0:11 a: direct index for structure ( uniform highp 4-component vector of float) +0:11 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) +0:11 Constant: +0:11 0 (const uint) +0:14 Function Definition: main( ( global void) +0:14 Function Parameters: +0:15 Sequence +0:15 move second child to first child ( temp highp 4-component vector of float) +0:15 'o' ( out highp 4-component vector of float) +0:15 add ( temp highp 4-component vector of float) +0:15 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:15 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a}) + +Validation failed +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/vk.relaxed.frag.out b/Test/baseResults/vk.relaxed.frag.out new file mode 100644 index 0000000000..d98910e6f8 --- /dev/null +++ b/Test/baseResults/vk.relaxed.frag.out @@ -0,0 +1,826 @@ +vk.relaxed.frag +WARNING: 0:7: 'b' : Ignoring initializer for uniform +WARNING: 0:8: 'c' : ignoring layout qualifier for uniform location + +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:36 Function Definition: bar( ( global highp uint) +0:36 Function Parameters: +0:37 Sequence +0:37 Sequence +0:37 move second child to first child ( temp highp uint) +0:37 'j' ( temp highp uint) +0:37 Constant: +0:37 0 (const uint) +0:38 move second child to first child ( temp highp uint) +0:38 'j' ( temp highp uint) +0:38 AtomicAdd ( global highp uint) +0:38 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:38 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:38 Constant: +0:38 0 (const uint) +0:38 Constant: +0:38 1 (const uint) +0:39 move second child to first child ( temp highp uint) +0:39 'j' ( temp highp uint) +0:39 subtract ( temp highp uint) +0:39 AtomicAdd ( global highp uint) +0:39 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:39 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:39 Constant: +0:39 0 (const uint) +0:39 Constant: +0:39 4294967295 (const uint) +0:39 Constant: +0:39 1 (const uint) +0:40 move second child to first child ( temp highp uint) +0:40 'j' ( temp highp uint) +0:40 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:40 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:40 Constant: +0:40 0 (const uint) +0:42 move second child to first child ( temp highp uint) +0:42 'j' ( temp highp uint) +0:42 AtomicAdd ( global highp uint) +0:42 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:42 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:42 Constant: +0:42 0 (const uint) +0:42 Constant: +0:42 1 (const uint) +0:43 move second child to first child ( temp highp uint) +0:43 'j' ( temp highp uint) +0:43 AtomicAdd ( global highp uint) +0:43 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:43 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:43 Constant: +0:43 0 (const uint) +0:43 Constant: +0:43 4294967295 (const uint) +0:44 move second child to first child ( temp highp uint) +0:44 'j' ( temp highp uint) +0:44 AtomicSubtract ( global highp uint) +0:44 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:44 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:44 Constant: +0:44 0 (const uint) +0:44 Constant: +0:44 1 (const uint) +0:46 move second child to first child ( temp highp uint) +0:46 'j' ( temp highp uint) +0:46 AtomicMin ( global highp uint) +0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:46 Constant: +0:46 0 (const uint) +0:46 'j' ( temp highp uint) +0:47 move second child to first child ( temp highp uint) +0:47 'j' ( temp highp uint) +0:47 AtomicMax ( global highp uint) +0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:47 Constant: +0:47 0 (const uint) +0:47 'j' ( temp highp uint) +0:48 move second child to first child ( temp highp uint) +0:48 'j' ( temp highp uint) +0:48 AtomicAnd ( global highp uint) +0:48 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:48 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:48 Constant: +0:48 0 (const uint) +0:48 'j' ( temp highp uint) +0:50 move second child to first child ( temp highp uint) +0:50 'j' ( temp highp uint) +0:50 AtomicOr ( global highp uint) +0:50 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:50 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:50 Constant: +0:50 0 (const uint) +0:50 'j' ( temp highp uint) +0:51 move second child to first child ( temp highp uint) +0:51 'j' ( temp highp uint) +0:51 AtomicXor ( global highp uint) +0:51 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:51 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:51 Constant: +0:51 0 (const uint) +0:51 'j' ( temp highp uint) +0:53 move second child to first child ( temp highp uint) +0:53 'j' ( temp highp uint) +0:53 AtomicExchange ( global highp uint) +0:53 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:53 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:53 Constant: +0:53 0 (const uint) +0:53 'j' ( temp highp uint) +0:54 move second child to first child ( temp highp uint) +0:54 'j' ( temp highp uint) +0:54 AtomicCompSwap ( global highp uint) +0:54 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:54 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:54 Constant: +0:54 0 (const uint) +0:54 Constant: +0:54 0 (const uint) +0:54 'j' ( temp highp uint) +0:56 AtomicAdd ( global highp uint) +0:56 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:56 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:56 Constant: +0:56 1 (const uint) +0:56 Constant: +0:56 1 (const uint) +0:57 AtomicAdd ( global highp uint) +0:57 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:57 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) +0:57 Constant: +0:57 0 (const uint) +0:57 Constant: +0:57 1 (const uint) +0:59 MemoryBarrierBuffer ( global void) +0:61 Branch: Return with expression +0:61 'j' ( temp highp uint) +0:64 Function Definition: foo( ( global highp 4-component vector of float) +0:64 Function Parameters: +0:65 Sequence +0:65 Sequence +0:65 move second child to first child ( temp highp float) +0:65 'f' ( temp highp float) +0:65 add ( temp highp float) +0:65 add ( temp highp float) +0:65 add ( temp highp float) +0:65 j: direct index for structure (layout( column_major std140) uniform highp float) +0:65 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:65 Constant: +0:65 0 (const uint) +0:65 j: direct index for structure (layout( column_major std430) buffer highp float) +0:65 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:65 Constant: +0:65 0 (const int) +0:65 y: direct index for structure ( global highp float) +0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:65 Constant: +0:65 4 (const uint) +0:65 Constant: +0:65 1 (const int) +0:65 Convert uint to float ( temp highp float) +0:65 z: direct index for structure ( global highp uint) +0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:65 Constant: +0:65 4 (const uint) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child ( temp highp 2-component vector of float) +0:66 'v2' ( temp highp 2-component vector of float) +0:66 add ( temp highp 2-component vector of float) +0:66 add ( temp highp 2-component vector of float) +0:66 b: direct index for structure ( uniform highp 2-component vector of float) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 1 (const uint) +0:66 c: direct index for structure ( uniform highp 2-component vector of float) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 2 (const uint) +0:66 x: direct index for structure ( global highp 2-component vector of float) +0:66 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 4 (const uint) +0:66 Constant: +0:66 0 (const int) +0:67 Sequence +0:67 move second child to first child ( temp highp 4-component vector of float) +0:67 'v4' ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 a: direct index for structure ( uniform highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 0 (const uint) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 0 (const int) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 1 (const int) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 2 (const int) +0:67 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:67 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:67 Constant: +0:67 1 (const uint) +0:67 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) +0:67 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:67 Constant: +0:67 1 (const int) +0:67 texture ( global highp 4-component vector of float) +0:67 't1' ( uniform highp sampler2D) +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:68 Branch: Return with expression +0:68 component-wise multiply ( temp highp 4-component vector of float) +0:68 component-wise multiply ( temp highp 4-component vector of float) +0:68 Construct vec4 ( temp highp 4-component vector of float) +0:68 'f' ( temp highp float) +0:68 Construct vec4 ( temp highp 4-component vector of float) +0:68 'v2' ( temp highp 2-component vector of float) +0:68 Constant: +0:68 1.000000 +0:68 Constant: +0:68 1.000000 +0:68 'v4' ( temp highp 4-component vector of float) +0:71 Function Definition: main( ( global void) +0:71 Function Parameters: +0:72 Sequence +0:72 Sequence +0:72 move second child to first child ( temp highp float) +0:72 'j' ( temp highp float) +0:72 Convert uint to float ( temp highp float) +0:72 Function Call: bar( ( global highp uint) +0:73 move second child to first child ( temp highp 4-component vector of float) +0:73 'o' ( out highp 4-component vector of float) +0:73 vector-scale ( temp highp 4-component vector of float) +0:73 'j' ( temp highp float) +0:73 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:? 't1' ( uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:? 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:? 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:? 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) + + +Linked fragment stage: + + +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:36 Function Definition: bar( ( global highp uint) +0:36 Function Parameters: +0:37 Sequence +0:37 Sequence +0:37 move second child to first child ( temp highp uint) +0:37 'j' ( temp highp uint) +0:37 Constant: +0:37 0 (const uint) +0:38 move second child to first child ( temp highp uint) +0:38 'j' ( temp highp uint) +0:38 AtomicAdd ( global highp uint) +0:38 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:38 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:38 Constant: +0:38 0 (const uint) +0:38 Constant: +0:38 1 (const uint) +0:39 move second child to first child ( temp highp uint) +0:39 'j' ( temp highp uint) +0:39 subtract ( temp highp uint) +0:39 AtomicAdd ( global highp uint) +0:39 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:39 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:39 Constant: +0:39 0 (const uint) +0:39 Constant: +0:39 4294967295 (const uint) +0:39 Constant: +0:39 1 (const uint) +0:40 move second child to first child ( temp highp uint) +0:40 'j' ( temp highp uint) +0:40 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:40 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:40 Constant: +0:40 0 (const uint) +0:42 move second child to first child ( temp highp uint) +0:42 'j' ( temp highp uint) +0:42 AtomicAdd ( global highp uint) +0:42 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:42 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:42 Constant: +0:42 0 (const uint) +0:42 Constant: +0:42 1 (const uint) +0:43 move second child to first child ( temp highp uint) +0:43 'j' ( temp highp uint) +0:43 AtomicAdd ( global highp uint) +0:43 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:43 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:43 Constant: +0:43 0 (const uint) +0:43 Constant: +0:43 4294967295 (const uint) +0:44 move second child to first child ( temp highp uint) +0:44 'j' ( temp highp uint) +0:44 AtomicSubtract ( global highp uint) +0:44 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:44 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:44 Constant: +0:44 0 (const uint) +0:44 Constant: +0:44 1 (const uint) +0:46 move second child to first child ( temp highp uint) +0:46 'j' ( temp highp uint) +0:46 AtomicMin ( global highp uint) +0:46 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:46 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:46 Constant: +0:46 0 (const uint) +0:46 'j' ( temp highp uint) +0:47 move second child to first child ( temp highp uint) +0:47 'j' ( temp highp uint) +0:47 AtomicMax ( global highp uint) +0:47 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:47 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:47 Constant: +0:47 0 (const uint) +0:47 'j' ( temp highp uint) +0:48 move second child to first child ( temp highp uint) +0:48 'j' ( temp highp uint) +0:48 AtomicAnd ( global highp uint) +0:48 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:48 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:48 Constant: +0:48 0 (const uint) +0:48 'j' ( temp highp uint) +0:50 move second child to first child ( temp highp uint) +0:50 'j' ( temp highp uint) +0:50 AtomicOr ( global highp uint) +0:50 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:50 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:50 Constant: +0:50 0 (const uint) +0:50 'j' ( temp highp uint) +0:51 move second child to first child ( temp highp uint) +0:51 'j' ( temp highp uint) +0:51 AtomicXor ( global highp uint) +0:51 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:51 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:51 Constant: +0:51 0 (const uint) +0:51 'j' ( temp highp uint) +0:53 move second child to first child ( temp highp uint) +0:53 'j' ( temp highp uint) +0:53 AtomicExchange ( global highp uint) +0:53 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:53 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:53 Constant: +0:53 0 (const uint) +0:53 'j' ( temp highp uint) +0:54 move second child to first child ( temp highp uint) +0:54 'j' ( temp highp uint) +0:54 AtomicCompSwap ( global highp uint) +0:54 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:54 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:54 Constant: +0:54 0 (const uint) +0:54 Constant: +0:54 0 (const uint) +0:54 'j' ( temp highp uint) +0:56 AtomicAdd ( global highp uint) +0:56 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:56 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:56 Constant: +0:56 1 (const uint) +0:56 Constant: +0:56 1 (const uint) +0:57 AtomicAdd ( global highp uint) +0:57 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:57 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) +0:57 Constant: +0:57 0 (const uint) +0:57 Constant: +0:57 1 (const uint) +0:59 MemoryBarrierBuffer ( global void) +0:61 Branch: Return with expression +0:61 'j' ( temp highp uint) +0:64 Function Definition: foo( ( global highp 4-component vector of float) +0:64 Function Parameters: +0:65 Sequence +0:65 Sequence +0:65 move second child to first child ( temp highp float) +0:65 'f' ( temp highp float) +0:65 add ( temp highp float) +0:65 add ( temp highp float) +0:65 add ( temp highp float) +0:65 j: direct index for structure (layout( column_major std140) uniform highp float) +0:65 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:65 Constant: +0:65 0 (const uint) +0:65 j: direct index for structure (layout( column_major std430) buffer highp float) +0:65 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:65 Constant: +0:65 0 (const int) +0:65 y: direct index for structure ( global highp float) +0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:65 Constant: +0:65 4 (const uint) +0:65 Constant: +0:65 1 (const int) +0:65 Convert uint to float ( temp highp float) +0:65 z: direct index for structure ( global highp uint) +0:65 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:65 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:65 Constant: +0:65 4 (const uint) +0:65 Constant: +0:65 2 (const int) +0:66 Sequence +0:66 move second child to first child ( temp highp 2-component vector of float) +0:66 'v2' ( temp highp 2-component vector of float) +0:66 add ( temp highp 2-component vector of float) +0:66 add ( temp highp 2-component vector of float) +0:66 b: direct index for structure ( uniform highp 2-component vector of float) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 1 (const uint) +0:66 c: direct index for structure ( uniform highp 2-component vector of float) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 2 (const uint) +0:66 x: direct index for structure ( global highp 2-component vector of float) +0:66 structUniform: direct index for structure ( uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z}) +0:66 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:66 Constant: +0:66 4 (const uint) +0:66 Constant: +0:66 0 (const int) +0:67 Sequence +0:67 move second child to first child ( temp highp 4-component vector of float) +0:67 'v4' ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 add ( temp highp 4-component vector of float) +0:67 a: direct index for structure ( uniform highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 0 (const uint) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 0 (const int) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 1 (const int) +0:67 direct index ( temp highp 4-component vector of float) +0:67 d: direct index for structure ( uniform 10-element array of highp 4-component vector of float) +0:67 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:67 Constant: +0:67 3 (const uint) +0:67 Constant: +0:67 2 (const int) +0:67 k: direct index for structure (layout( column_major std140) uniform highp 4-component vector of float) +0:67 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:67 Constant: +0:67 1 (const uint) +0:67 k: direct index for structure (layout( column_major std430) buffer highp 4-component vector of float) +0:67 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:67 Constant: +0:67 1 (const int) +0:67 texture ( global highp 4-component vector of float) +0:67 't1' ( uniform highp sampler2D) +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:68 Branch: Return with expression +0:68 component-wise multiply ( temp highp 4-component vector of float) +0:68 component-wise multiply ( temp highp 4-component vector of float) +0:68 Construct vec4 ( temp highp 4-component vector of float) +0:68 'f' ( temp highp float) +0:68 Construct vec4 ( temp highp 4-component vector of float) +0:68 'v2' ( temp highp 2-component vector of float) +0:68 Constant: +0:68 1.000000 +0:68 Constant: +0:68 1.000000 +0:68 'v4' ( temp highp 4-component vector of float) +0:71 Function Definition: main( ( global void) +0:71 Function Parameters: +0:72 Sequence +0:72 Sequence +0:72 move second child to first child ( temp highp float) +0:72 'j' ( temp highp float) +0:72 Convert uint to float ( temp highp float) +0:72 Function Call: bar( ( global highp uint) +0:73 move second child to first child ( temp highp 4-component vector of float) +0:73 'o' ( out highp 4-component vector of float) +0:73 vector-scale ( temp highp 4-component vector of float) +0:73 'j' ( temp highp float) +0:73 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b, uniform highp 2-component vector of float c, uniform 10-element array of highp 4-component vector of float d, uniform structure{ global highp 2-component vector of float x, global highp float y, global highp uint z} structUniform}) +0:? 't1' ( uniform highp sampler2D) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140) uniform highp float j, layout( column_major std140) uniform highp 4-component vector of float k}) +0:? 'bufferInstance' (layout( column_major std430) buffer block{layout( column_major std430) buffer highp float j, layout( column_major std430) buffer highp 4-component vector of float k}) +0:? 'anon@2' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:? 'anon@3' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 163 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 159 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 8 "bar(" + Name 13 "foo(" + Name 16 "j" + Name 18 "gl_AtomicCounterBlock_0" + MemberName 18(gl_AtomicCounterBlock_0) 0 "counter1" + MemberName 18(gl_AtomicCounterBlock_0) 1 "counter2" + Name 20 "" + Name 63 "gl_AtomicCounterBlock_1" + MemberName 63(gl_AtomicCounterBlock_1) 0 "counter3" + Name 65 "" + Name 73 "f" + Name 74 "UniformBlock" + MemberName 74(UniformBlock) 0 "j" + MemberName 74(UniformBlock) 1 "k" + Name 76 "" + Name 80 "BufferBlock" + MemberName 80(BufferBlock) 0 "j" + MemberName 80(BufferBlock) 1 "k" + Name 82 "bufferInstance" + Name 89 "e" + MemberName 89(e) 0 "x" + MemberName 89(e) 1 "y" + MemberName 89(e) 2 "z" + Name 90 "gl_DefaultUniformBlock" + MemberName 90(gl_DefaultUniformBlock) 0 "a" + MemberName 90(gl_DefaultUniformBlock) 1 "b" + MemberName 90(gl_DefaultUniformBlock) 2 "c" + MemberName 90(gl_DefaultUniformBlock) 3 "d" + MemberName 90(gl_DefaultUniformBlock) 4 "structUniform" + Name 92 "" + Name 103 "v2" + Name 114 "v4" + Name 137 "t1" + Name 155 "j" + Name 159 "o" + MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 18(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 18(gl_AtomicCounterBlock_0) 1 Offset 4 + Decorate 18(gl_AtomicCounterBlock_0) BufferBlock + Decorate 20 DescriptorSet 0 + Decorate 20 Binding 4 + MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent + MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Volatile + MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Coherent + MemberDecorate 63(gl_AtomicCounterBlock_1) 0 Offset 0 + Decorate 63(gl_AtomicCounterBlock_1) BufferBlock + Decorate 65 DescriptorSet 0 + Decorate 65 Binding 5 + MemberDecorate 74(UniformBlock) 0 Offset 0 + MemberDecorate 74(UniformBlock) 1 Offset 16 + Decorate 74(UniformBlock) Block + Decorate 76 DescriptorSet 0 + Decorate 76 Binding 2 + MemberDecorate 80(BufferBlock) 0 Offset 0 + MemberDecorate 80(BufferBlock) 1 Offset 16 + Decorate 80(BufferBlock) BufferBlock + Decorate 82(bufferInstance) DescriptorSet 0 + Decorate 82(bufferInstance) Binding 3 + Decorate 88 ArrayStride 16 + MemberDecorate 89(e) 0 Offset 0 + MemberDecorate 89(e) 1 Offset 8 + MemberDecorate 89(e) 2 Offset 12 + MemberDecorate 90(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 90(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 90(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 90(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 90(gl_DefaultUniformBlock) 4 Offset 192 + Decorate 90(gl_DefaultUniformBlock) Block + Decorate 92 DescriptorSet 0 + Decorate 92 Binding 0 + Decorate 137(t1) DescriptorSet 0 + Decorate 137(t1) Binding 1 + Decorate 159(o) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeFunction 6(int) + 10: TypeFloat 32 + 11: TypeVector 10(float) 4 + 12: TypeFunction 11(fvec4) + 15: TypePointer Function 6(int) + 17: 6(int) Constant 0 +18(gl_AtomicCounterBlock_0): TypeStruct 6(int) 6(int) + 19: TypePointer Uniform 18(gl_AtomicCounterBlock_0) + 20: 19(ptr) Variable Uniform + 21: TypeInt 32 1 + 22: 21(int) Constant 0 + 23: TypePointer Uniform 6(int) + 25: 6(int) Constant 1 + 28: 6(int) Constant 4294967295 + 60: 21(int) Constant 1 +63(gl_AtomicCounterBlock_1): TypeStruct 6(int) + 64: TypePointer Uniform 63(gl_AtomicCounterBlock_1) + 65: 64(ptr) Variable Uniform + 68: 6(int) Constant 72 + 72: TypePointer Function 10(float) +74(UniformBlock): TypeStruct 10(float) 11(fvec4) + 75: TypePointer Uniform 74(UniformBlock) + 76: 75(ptr) Variable Uniform + 77: TypePointer Uniform 10(float) + 80(BufferBlock): TypeStruct 10(float) 11(fvec4) + 81: TypePointer Uniform 80(BufferBlock) +82(bufferInstance): 81(ptr) Variable Uniform + 86: TypeVector 10(float) 2 + 87: 6(int) Constant 10 + 88: TypeArray 11(fvec4) 87 + 89(e): TypeStruct 86(fvec2) 10(float) 6(int) +90(gl_DefaultUniformBlock): TypeStruct 11(fvec4) 86(fvec2) 86(fvec2) 88 89(e) + 91: TypePointer Uniform 90(gl_DefaultUniformBlock) + 92: 91(ptr) Variable Uniform + 93: 21(int) Constant 4 + 97: 21(int) Constant 2 + 102: TypePointer Function 86(fvec2) + 104: TypePointer Uniform 86(fvec2) + 113: TypePointer Function 11(fvec4) + 115: TypePointer Uniform 11(fvec4) + 118: 21(int) Constant 3 + 134: TypeImage 10(float) 2D sampled format:Unknown + 135: TypeSampledImage 134 + 136: TypePointer UniformConstant 135 + 137(t1): 136(ptr) Variable UniformConstant + 139: 10(float) Constant 0 + 140: 86(fvec2) ConstantComposite 139 139 + 146: 10(float) Constant 1065353216 + 158: TypePointer Output 11(fvec4) + 159(o): 158(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 155(j): 72(ptr) Variable Function + 156: 6(int) FunctionCall 8(bar() + 157: 10(float) ConvertUToF 156 + Store 155(j) 157 + 160: 10(float) Load 155(j) + 161: 11(fvec4) FunctionCall 13(foo() + 162: 11(fvec4) VectorTimesScalar 161 160 + Store 159(o) 162 + Return + FunctionEnd + 8(bar(): 6(int) Function None 7 + 9: Label + 16(j): 15(ptr) Variable Function + Store 16(j) 17 + 24: 23(ptr) AccessChain 20 22 + 26: 6(int) AtomicIAdd 24 25 17 25 + Store 16(j) 26 + 27: 23(ptr) AccessChain 20 22 + 29: 6(int) AtomicIAdd 27 25 17 28 + 30: 6(int) ISub 29 25 + Store 16(j) 30 + 31: 23(ptr) AccessChain 20 22 + 32: 6(int) Load 31 + Store 16(j) 32 + 33: 23(ptr) AccessChain 20 22 + 34: 6(int) AtomicIAdd 33 25 17 25 + Store 16(j) 34 + 35: 23(ptr) AccessChain 20 22 + 36: 6(int) AtomicIAdd 35 25 17 28 + Store 16(j) 36 + 37: 23(ptr) AccessChain 20 22 + 38: 6(int) AtomicISub 37 25 17 25 + Store 16(j) 38 + 39: 23(ptr) AccessChain 20 22 + 40: 6(int) Load 16(j) + 41: 6(int) AtomicUMin 39 25 17 40 + Store 16(j) 41 + 42: 23(ptr) AccessChain 20 22 + 43: 6(int) Load 16(j) + 44: 6(int) AtomicUMax 42 25 17 43 + Store 16(j) 44 + 45: 23(ptr) AccessChain 20 22 + 46: 6(int) Load 16(j) + 47: 6(int) AtomicAnd 45 25 17 46 + Store 16(j) 47 + 48: 23(ptr) AccessChain 20 22 + 49: 6(int) Load 16(j) + 50: 6(int) AtomicOr 48 25 17 49 + Store 16(j) 50 + 51: 23(ptr) AccessChain 20 22 + 52: 6(int) Load 16(j) + 53: 6(int) AtomicXor 51 25 17 52 + Store 16(j) 53 + 54: 23(ptr) AccessChain 20 22 + 55: 6(int) Load 16(j) + 56: 6(int) AtomicExchange 54 25 17 55 + Store 16(j) 56 + 57: 23(ptr) AccessChain 20 22 + 58: 6(int) Load 16(j) + 59: 6(int) AtomicCompareExchange 57 25 17 17 58 17 + Store 16(j) 59 + 61: 23(ptr) AccessChain 20 60 + 62: 6(int) AtomicIAdd 61 25 17 25 + 66: 23(ptr) AccessChain 65 22 + 67: 6(int) AtomicIAdd 66 25 17 25 + MemoryBarrier 25 68 + 69: 6(int) Load 16(j) + ReturnValue 69 + FunctionEnd + 13(foo(): 11(fvec4) Function None 12 + 14: Label + 73(f): 72(ptr) Variable Function + 103(v2): 102(ptr) Variable Function + 114(v4): 113(ptr) Variable Function + 78: 77(ptr) AccessChain 76 22 + 79: 10(float) Load 78 + 83: 77(ptr) AccessChain 82(bufferInstance) 22 + 84: 10(float) Load 83 + 85: 10(float) FAdd 79 84 + 94: 77(ptr) AccessChain 92 93 60 + 95: 10(float) Load 94 + 96: 10(float) FAdd 85 95 + 98: 23(ptr) AccessChain 92 93 97 + 99: 6(int) Load 98 + 100: 10(float) ConvertUToF 99 + 101: 10(float) FAdd 96 100 + Store 73(f) 101 + 105: 104(ptr) AccessChain 92 60 + 106: 86(fvec2) Load 105 + 107: 104(ptr) AccessChain 92 97 + 108: 86(fvec2) Load 107 + 109: 86(fvec2) FAdd 106 108 + 110: 104(ptr) AccessChain 92 93 22 + 111: 86(fvec2) Load 110 + 112: 86(fvec2) FAdd 109 111 + Store 103(v2) 112 + 116: 115(ptr) AccessChain 92 22 + 117: 11(fvec4) Load 116 + 119: 115(ptr) AccessChain 92 118 22 + 120: 11(fvec4) Load 119 + 121: 11(fvec4) FAdd 117 120 + 122: 115(ptr) AccessChain 92 118 60 + 123: 11(fvec4) Load 122 + 124: 11(fvec4) FAdd 121 123 + 125: 115(ptr) AccessChain 92 118 97 + 126: 11(fvec4) Load 125 + 127: 11(fvec4) FAdd 124 126 + 128: 115(ptr) AccessChain 76 60 + 129: 11(fvec4) Load 128 + 130: 11(fvec4) FAdd 127 129 + 131: 115(ptr) AccessChain 82(bufferInstance) 60 + 132: 11(fvec4) Load 131 + 133: 11(fvec4) FAdd 130 132 + 138: 135 Load 137(t1) + 141: 11(fvec4) ImageSampleImplicitLod 138 140 + 142: 11(fvec4) FAdd 133 141 + Store 114(v4) 142 + 143: 10(float) Load 73(f) + 144: 11(fvec4) CompositeConstruct 143 143 143 143 + 145: 86(fvec2) Load 103(v2) + 147: 10(float) CompositeExtract 145 0 + 148: 10(float) CompositeExtract 145 1 + 149: 11(fvec4) CompositeConstruct 147 148 146 146 + 150: 11(fvec4) FMul 144 149 + 151: 11(fvec4) Load 114(v4) + 152: 11(fvec4) FMul 150 151 + ReturnValue 152 + FunctionEnd diff --git a/Test/baseResults/vk.relaxed.link1.frag.out b/Test/baseResults/vk.relaxed.link1.frag.out new file mode 100644 index 0000000000..9dac4c64e2 --- /dev/null +++ b/Test/baseResults/vk.relaxed.link1.frag.out @@ -0,0 +1,515 @@ +vk.relaxed.link1.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: bar( ( global highp 4-component vector of float) +0:19 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp uint) +0:20 'j' ( temp highp uint) +0:20 add ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 0 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:20 subtract ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 4294967295 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'v' ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 a: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 0 (const uint) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 c1: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 3 (const uint) +0:21 d: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 4 (const uint) +0:23 Branch: Return with expression +0:23 vector-scale ( temp highp 4-component vector of float) +0:23 Convert uint to float ( temp highp float) +0:23 'j' ( temp highp uint) +0:23 'v' ( temp highp 4-component vector of float) +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'o' ( out highp 4-component vector of float) +0:27 add ( temp highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:27 Function Call: bar( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) + +vk.relaxed.link2.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:14 Function Definition: foo( ( global highp 4-component vector of float) +0:14 Function Parameters: +0:15 Sequence +0:15 Sequence +0:15 move second child to first child ( temp highp uint) +0:15 'j' ( temp highp uint) +0:15 add ( temp highp uint) +0:15 AtomicAdd ( global highp uint) +0:15 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:15 Constant: +0:15 1 (const uint) +0:15 Constant: +0:15 1 (const uint) +0:15 subtract ( temp highp uint) +0:15 AtomicAdd ( global highp uint) +0:15 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:15 Constant: +0:15 0 (const uint) +0:15 Constant: +0:15 4294967295 (const uint) +0:15 Constant: +0:15 1 (const uint) +0:16 Sequence +0:16 move second child to first child ( temp highp 4-component vector of float) +0:16 'v' ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 a: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 0 (const uint) +0:16 Construct vec4 ( temp highp 4-component vector of float) +0:16 direct index ( temp highp float) +0:16 b1: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp highp float) +0:16 b1: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 1 (const int) +0:16 direct index ( temp highp float) +0:16 b2: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 1 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp highp float) +0:16 b2: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 1 (const uint) +0:16 Constant: +0:16 1 (const int) +0:16 c2: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 3 (const uint) +0:16 d: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:16 Constant: +0:16 4 (const uint) +0:18 Branch: Return with expression +0:18 vector-scale ( temp highp 4-component vector of float) +0:18 Convert uint to float ( temp highp float) +0:18 'j' ( temp highp uint) +0:18 'v' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) + + +Linked fragment stage: + + +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: bar( ( global highp 4-component vector of float) +0:19 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp uint) +0:20 'j' ( temp highp uint) +0:20 add ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) +0:20 Constant: +0:20 0 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:20 subtract ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 4294967295 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'v' ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 a: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 0 (const uint) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 c1: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 3 (const uint) +0:21 d: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:21 Constant: +0:21 4 (const uint) +0:23 Branch: Return with expression +0:23 vector-scale ( temp highp 4-component vector of float) +0:23 Convert uint to float ( temp highp float) +0:23 'j' ( temp highp uint) +0:23 'v' ( temp highp 4-component vector of float) +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'o' ( out highp 4-component vector of float) +0:27 add ( temp highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:27 Function Call: bar( ( global highp 4-component vector of float) +0:14 Function Definition: foo( ( global highp 4-component vector of float) +0:14 Function Parameters: +0:15 Sequence +0:15 Sequence +0:15 move second child to first child ( temp highp uint) +0:15 'j' ( temp highp uint) +0:15 add ( temp highp uint) +0:15 AtomicAdd ( global highp uint) +0:15 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) +0:15 Constant: +0:15 1 (const uint) +0:15 Constant: +0:15 1 (const uint) +0:15 subtract ( temp highp uint) +0:15 AtomicAdd ( global highp uint) +0:15 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:15 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) +0:15 Constant: +0:15 2 (const uint) +0:15 Constant: +0:15 4294967295 (const uint) +0:15 Constant: +0:15 1 (const uint) +0:16 Sequence +0:16 move second child to first child ( temp highp 4-component vector of float) +0:16 'v' ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 add ( temp highp 4-component vector of float) +0:16 a: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 0 (const uint) +0:16 Construct vec4 ( temp highp 4-component vector of float) +0:16 direct index ( temp highp float) +0:16 b1: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 1 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp highp float) +0:16 b1: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 1 (const uint) +0:16 Constant: +0:16 1 (const int) +0:16 direct index ( temp highp float) +0:16 b2: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 0 (const int) +0:16 direct index ( temp highp float) +0:16 b2: direct index for structure ( uniform highp 2-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 2 (const uint) +0:16 Constant: +0:16 1 (const int) +0:16 c2: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 5 (const uint) +0:16 d: direct index for structure ( uniform highp 4-component vector of float) +0:16 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:16 Constant: +0:16 4 (const uint) +0:18 Branch: Return with expression +0:18 vector-scale ( temp highp 4-component vector of float) +0:18 Convert uint to float ( temp highp float) +0:18 'j' ( temp highp uint) +0:18 'v' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d, uniform highp 4-component vector of float c2}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2, coherent volatile buffer highp uint counter3}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 105 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 68 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 9 "bar(" + Name 11 "foo(" + Name 15 "j" + Name 16 "gl_AtomicCounterBlock_0" + MemberName 16(gl_AtomicCounterBlock_0) 0 "counter1" + MemberName 16(gl_AtomicCounterBlock_0) 1 "counter2" + MemberName 16(gl_AtomicCounterBlock_0) 2 "counter3" + Name 18 "" + Name 33 "v" + Name 35 "gl_DefaultUniformBlock" + MemberName 35(gl_DefaultUniformBlock) 0 "a" + MemberName 35(gl_DefaultUniformBlock) 1 "b1" + MemberName 35(gl_DefaultUniformBlock) 2 "b2" + MemberName 35(gl_DefaultUniformBlock) 3 "c1" + MemberName 35(gl_DefaultUniformBlock) 4 "d" + MemberName 35(gl_DefaultUniformBlock) 5 "c2" + Name 37 "" + Name 68 "o" + Name 72 "j" + Name 79 "v" + MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 1 Offset 4 + MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Volatile + MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 16(gl_AtomicCounterBlock_0) 2 Offset 8 + Decorate 16(gl_AtomicCounterBlock_0) BufferBlock + Decorate 18 DescriptorSet 0 + Decorate 18 Binding 1 + MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 + MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 + Decorate 35(gl_DefaultUniformBlock) Block + Decorate 37 DescriptorSet 0 + Decorate 37 Binding 0 + Decorate 68(o) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeFunction 7(fvec4) + 13: TypeInt 32 0 + 14: TypePointer Function 13(int) +16(gl_AtomicCounterBlock_0): TypeStruct 13(int) 13(int) 13(int) + 17: TypePointer Uniform 16(gl_AtomicCounterBlock_0) + 18: 17(ptr) Variable Uniform + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 21: TypePointer Uniform 13(int) + 23: 13(int) Constant 1 + 24: 13(int) Constant 0 + 26: 19(int) Constant 1 + 28: 13(int) Constant 4294967295 + 32: TypePointer Function 7(fvec4) + 34: TypeVector 6(float) 2 +35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 34(fvec2) 34(fvec2) 7(fvec4) 7(fvec4) 7(fvec4) + 36: TypePointer Uniform 35(gl_DefaultUniformBlock) + 37: 36(ptr) Variable Uniform + 38: TypePointer Uniform 7(fvec4) + 41: TypePointer Uniform 6(float) + 46: 19(int) Constant 2 + 53: 19(int) Constant 3 + 57: 19(int) Constant 4 + 67: TypePointer Output 7(fvec4) + 68(o): 67(ptr) Variable Output + 92: 19(int) Constant 5 + 4(main): 2 Function None 3 + 5: Label + 69: 7(fvec4) FunctionCall 11(foo() + 70: 7(fvec4) FunctionCall 9(bar() + 71: 7(fvec4) FAdd 69 70 + Store 68(o) 71 + Return + FunctionEnd + 9(bar(): 7(fvec4) Function None 8 + 10: Label + 15(j): 14(ptr) Variable Function + 33(v): 32(ptr) Variable Function + 22: 21(ptr) AccessChain 18 20 + 25: 13(int) AtomicIAdd 22 23 24 23 + 27: 21(ptr) AccessChain 18 26 + 29: 13(int) AtomicIAdd 27 23 24 28 + 30: 13(int) ISub 29 23 + 31: 13(int) IAdd 25 30 + Store 15(j) 31 + 39: 38(ptr) AccessChain 37 20 + 40: 7(fvec4) Load 39 + 42: 41(ptr) AccessChain 37 26 24 + 43: 6(float) Load 42 + 44: 41(ptr) AccessChain 37 26 23 + 45: 6(float) Load 44 + 47: 41(ptr) AccessChain 37 46 24 + 48: 6(float) Load 47 + 49: 41(ptr) AccessChain 37 46 23 + 50: 6(float) Load 49 + 51: 7(fvec4) CompositeConstruct 43 45 48 50 + 52: 7(fvec4) FAdd 40 51 + 54: 38(ptr) AccessChain 37 53 + 55: 7(fvec4) Load 54 + 56: 7(fvec4) FAdd 52 55 + 58: 38(ptr) AccessChain 37 57 + 59: 7(fvec4) Load 58 + 60: 7(fvec4) FAdd 56 59 + Store 33(v) 60 + 61: 13(int) Load 15(j) + 62: 6(float) ConvertUToF 61 + 63: 7(fvec4) Load 33(v) + 64: 7(fvec4) VectorTimesScalar 63 62 + ReturnValue 64 + FunctionEnd + 11(foo(): 7(fvec4) Function None 8 + 12: Label + 72(j): 14(ptr) Variable Function + 79(v): 32(ptr) Variable Function + 73: 21(ptr) AccessChain 18 26 + 74: 13(int) AtomicIAdd 73 23 24 23 + 75: 21(ptr) AccessChain 18 46 + 76: 13(int) AtomicIAdd 75 23 24 28 + 77: 13(int) ISub 76 23 + 78: 13(int) IAdd 74 77 + Store 72(j) 78 + 80: 38(ptr) AccessChain 37 20 + 81: 7(fvec4) Load 80 + 82: 41(ptr) AccessChain 37 26 24 + 83: 6(float) Load 82 + 84: 41(ptr) AccessChain 37 26 23 + 85: 6(float) Load 84 + 86: 41(ptr) AccessChain 37 46 24 + 87: 6(float) Load 86 + 88: 41(ptr) AccessChain 37 46 23 + 89: 6(float) Load 88 + 90: 7(fvec4) CompositeConstruct 83 85 87 89 + 91: 7(fvec4) FAdd 81 90 + 93: 38(ptr) AccessChain 37 92 + 94: 7(fvec4) Load 93 + 95: 7(fvec4) FAdd 91 94 + 96: 38(ptr) AccessChain 37 57 + 97: 7(fvec4) Load 96 + 98: 7(fvec4) FAdd 95 97 + Store 79(v) 98 + 99: 13(int) Load 72(j) + 100: 6(float) ConvertUToF 99 + 101: 7(fvec4) Load 79(v) + 102: 7(fvec4) VectorTimesScalar 101 100 + ReturnValue 102 + FunctionEnd diff --git a/Test/baseResults/vk.relaxed.stagelink.vert.out b/Test/baseResults/vk.relaxed.stagelink.vert.out new file mode 100644 index 0000000000..a63f10c353 --- /dev/null +++ b/Test/baseResults/vk.relaxed.stagelink.vert.out @@ -0,0 +1,717 @@ +vk.relaxed.stagelink.vert +Shader version: 460 +0:? Sequence +0:18 Function Definition: foo( ( global highp 4-component vector of float) +0:18 Function Parameters: +0:19 Sequence +0:19 Sequence +0:19 move second child to first child ( temp highp uint) +0:19 'j' ( temp highp uint) +0:19 add ( temp highp uint) +0:19 AtomicAdd ( global highp uint) +0:19 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:19 Constant: +0:19 1 (const uint) +0:19 Constant: +0:19 1 (const uint) +0:19 subtract ( temp highp uint) +0:19 AtomicAdd ( global highp uint) +0:19 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:19 Constant: +0:19 0 (const uint) +0:19 Constant: +0:19 4294967295 (const uint) +0:19 Constant: +0:19 1 (const uint) +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 'v' ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 a: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 0 (const uint) +0:20 Construct vec4 ( temp highp 4-component vector of float) +0:20 direct index ( temp highp float) +0:20 b1: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 2 (const uint) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp highp float) +0:20 b1: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 2 (const uint) +0:20 Constant: +0:20 1 (const int) +0:20 direct index ( temp highp float) +0:20 b2: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp highp float) +0:20 b2: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 1 (const int) +0:20 c2: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 3 (const uint) +0:20 d: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 4 (const uint) +0:22 Branch: Return with expression +0:22 vector-scale ( temp highp 4-component vector of float) +0:22 Convert uint to float ( temp highp float) +0:22 'j' ( temp highp uint) +0:22 'v' ( temp highp 4-component vector of float) +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'v' ( temp highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'v' ( temp highp 4-component vector of float) +0:28 add ( temp highp 4-component vector of float) +0:28 'v' ( temp highp 4-component vector of float) +0:28 indirect index ( temp highp 4-component vector of float) +0:28 s: direct index for structure ( uniform 4-element array of highp 4-component vector of float) +0:28 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:28 Constant: +0:28 5 (const uint) +0:28 'gl_VertexID' ( in int VertexIndex) +0:29 move second child to first child ( temp highp float) +0:29 direct index ( temp highp float) +0:29 'v' ( temp highp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 subtract ( temp highp float) +0:29 direct index ( temp highp float) +0:29 'v' ( temp highp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 Convert int to float ( temp highp float) +0:29 'gl_InstanceID' ( in highp int InstanceIndex) +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:30 'v' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) + +vk.relaxed.stagelink.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: foo( ( global highp 4-component vector of float) +0:19 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp uint) +0:20 'j' ( temp highp uint) +0:20 add ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 0 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:20 subtract ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 4294967295 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'v' ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 a: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 0 (const uint) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 c1: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 3 (const uint) +0:21 d: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 4 (const uint) +0:23 Branch: Return with expression +0:23 vector-scale ( temp highp 4-component vector of float) +0:23 Convert uint to float ( temp highp float) +0:23 'j' ( temp highp uint) +0:23 'v' ( temp highp 4-component vector of float) +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'o' ( out highp 4-component vector of float) +0:27 add ( temp highp 4-component vector of float) +0:27 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) + + +Linked vertex stage: + + +Linked fragment stage: + + +Shader version: 460 +0:? Sequence +0:18 Function Definition: foo( ( global highp 4-component vector of float) +0:18 Function Parameters: +0:19 Sequence +0:19 Sequence +0:19 move second child to first child ( temp highp uint) +0:19 'j' ( temp highp uint) +0:19 add ( temp highp uint) +0:19 AtomicAdd ( global highp uint) +0:19 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:19 Constant: +0:19 1 (const uint) +0:19 Constant: +0:19 1 (const uint) +0:19 subtract ( temp highp uint) +0:19 AtomicAdd ( global highp uint) +0:19 counter3: direct index for structure ( coherent volatile buffer highp uint) +0:19 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:19 Constant: +0:19 0 (const uint) +0:19 Constant: +0:19 4294967295 (const uint) +0:19 Constant: +0:19 1 (const uint) +0:20 Sequence +0:20 move second child to first child ( temp highp 4-component vector of float) +0:20 'v' ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 add ( temp highp 4-component vector of float) +0:20 a: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 0 (const uint) +0:20 Construct vec4 ( temp highp 4-component vector of float) +0:20 direct index ( temp highp float) +0:20 b1: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 2 (const uint) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp highp float) +0:20 b1: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 2 (const uint) +0:20 Constant: +0:20 1 (const int) +0:20 direct index ( temp highp float) +0:20 b2: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 0 (const int) +0:20 direct index ( temp highp float) +0:20 b2: direct index for structure ( uniform highp 2-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 1 (const int) +0:20 c2: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 3 (const uint) +0:20 d: direct index for structure ( uniform highp 4-component vector of float) +0:20 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:20 Constant: +0:20 4 (const uint) +0:22 Branch: Return with expression +0:22 vector-scale ( temp highp 4-component vector of float) +0:22 Convert uint to float ( temp highp float) +0:22 'j' ( temp highp uint) +0:22 'v' ( temp highp 4-component vector of float) +0:25 Function Definition: main( ( global void) +0:25 Function Parameters: +0:27 Sequence +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'v' ( temp highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:28 move second child to first child ( temp highp 4-component vector of float) +0:28 'v' ( temp highp 4-component vector of float) +0:28 add ( temp highp 4-component vector of float) +0:28 'v' ( temp highp 4-component vector of float) +0:28 indirect index ( temp highp 4-component vector of float) +0:28 s: direct index for structure ( uniform 4-element array of highp 4-component vector of float) +0:28 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:28 Constant: +0:28 5 (const uint) +0:28 'gl_VertexID' ( in int VertexIndex) +0:29 move second child to first child ( temp highp float) +0:29 direct index ( temp highp float) +0:29 'v' ( temp highp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 subtract ( temp highp float) +0:29 direct index ( temp highp float) +0:29 'v' ( temp highp 4-component vector of float) +0:29 Constant: +0:29 0 (const int) +0:29 Convert int to float ( temp highp float) +0:29 'gl_InstanceID' ( in highp int InstanceIndex) +0:30 move second child to first child ( temp highp 4-component vector of float) +0:30 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:30 'v' ( temp highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:19 Function Definition: foo( ( global highp 4-component vector of float) +0:19 Function Parameters: +0:20 Sequence +0:20 Sequence +0:20 move second child to first child ( temp highp uint) +0:20 'j' ( temp highp uint) +0:20 add ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter1: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 0 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:20 subtract ( temp highp uint) +0:20 AtomicAdd ( global highp uint) +0:20 counter2: direct index for structure ( coherent volatile buffer highp uint) +0:20 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) +0:20 Constant: +0:20 1 (const uint) +0:20 Constant: +0:20 4294967295 (const uint) +0:20 Constant: +0:20 1 (const uint) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'v' ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 add ( temp highp 4-component vector of float) +0:21 a: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 0 (const uint) +0:21 Construct vec4 ( temp highp 4-component vector of float) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b1: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 1 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 0 (const int) +0:21 direct index ( temp highp float) +0:21 b2: direct index for structure ( uniform highp 2-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 2 (const uint) +0:21 Constant: +0:21 1 (const int) +0:21 c1: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 3 (const uint) +0:21 d: direct index for structure ( uniform highp 4-component vector of float) +0:21 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:21 Constant: +0:21 4 (const uint) +0:23 Branch: Return with expression +0:23 vector-scale ( temp highp 4-component vector of float) +0:23 Convert uint to float ( temp highp float) +0:23 'j' ( temp highp uint) +0:23 'v' ( temp highp 4-component vector of float) +0:26 Function Definition: main( ( global void) +0:26 Function Parameters: +0:27 Sequence +0:27 move second child to first child ( temp highp 4-component vector of float) +0:27 'o' ( out highp 4-component vector of float) +0:27 add ( temp highp 4-component vector of float) +0:27 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:27 Function Call: foo( ( global highp 4-component vector of float) +0:? Linker Objects +0:? 'io' (layout( location=0) smooth in highp 4-component vector of float) +0:? 'o' ( out highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b1, uniform highp 2-component vector of float b2, uniform highp 4-component vector of float c1, uniform highp 4-component vector of float d}) +0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter1, coherent volatile buffer highp uint counter2}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 88 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 72 80 86 + Source GLSL 460 + Name 4 "main" + Name 9 "foo(" + Name 13 "j" + Name 14 "gl_AtomicCounterBlock_0" + MemberName 14(gl_AtomicCounterBlock_0) 0 "counter3" + MemberName 14(gl_AtomicCounterBlock_0) 1 "counter2" + MemberName 14(gl_AtomicCounterBlock_0) 2 "counter1" + Name 16 "" + Name 31 "v" + Name 35 "gl_DefaultUniformBlock" + MemberName 35(gl_DefaultUniformBlock) 0 "a" + MemberName 35(gl_DefaultUniformBlock) 1 "b2" + MemberName 35(gl_DefaultUniformBlock) 2 "b1" + MemberName 35(gl_DefaultUniformBlock) 3 "c2" + MemberName 35(gl_DefaultUniformBlock) 4 "d" + MemberName 35(gl_DefaultUniformBlock) 5 "s" + MemberName 35(gl_DefaultUniformBlock) 6 "c1" + Name 37 "" + Name 67 "v" + Name 72 "gl_VertexID" + Name 80 "gl_InstanceID" + Name 86 "io" + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4 + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8 + Decorate 14(gl_AtomicCounterBlock_0) BufferBlock + Decorate 16 DescriptorSet 0 + Decorate 16 Binding 1 + Decorate 34 ArrayStride 16 + MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 + MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 + MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128 + Decorate 35(gl_DefaultUniformBlock) Block + Decorate 37 DescriptorSet 0 + Decorate 37 Binding 0 + Decorate 72(gl_VertexID) BuiltIn VertexIndex + Decorate 80(gl_InstanceID) BuiltIn InstanceIndex + Decorate 86(io) 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(gl_AtomicCounterBlock_0): TypeStruct 11(int) 11(int) 11(int) + 15: TypePointer Uniform 14(gl_AtomicCounterBlock_0) + 16: 15(ptr) Variable Uniform + 17: TypeInt 32 1 + 18: 17(int) Constant 1 + 19: TypePointer Uniform 11(int) + 21: 11(int) Constant 1 + 22: 11(int) Constant 0 + 24: 17(int) Constant 0 + 26: 11(int) Constant 4294967295 + 30: TypePointer Function 7(fvec4) + 32: TypeVector 6(float) 2 + 33: 11(int) Constant 4 + 34: TypeArray 7(fvec4) 33 +35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 32(fvec2) 32(fvec2) 7(fvec4) 7(fvec4) 34 7(fvec4) + 36: TypePointer Uniform 35(gl_DefaultUniformBlock) + 37: 36(ptr) Variable Uniform + 38: TypePointer Uniform 7(fvec4) + 41: 17(int) Constant 2 + 42: TypePointer Uniform 6(float) + 53: 17(int) Constant 3 + 57: 17(int) Constant 4 + 70: 17(int) Constant 5 + 71: TypePointer Input 17(int) + 72(gl_VertexID): 71(ptr) Variable Input + 77: TypePointer Function 6(float) +80(gl_InstanceID): 71(ptr) Variable Input + 85: TypePointer Output 7(fvec4) + 86(io): 85(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 67(v): 30(ptr) Variable Function + 68: 7(fvec4) FunctionCall 9(foo() + Store 67(v) 68 + 69: 7(fvec4) Load 67(v) + 73: 17(int) Load 72(gl_VertexID) + 74: 38(ptr) AccessChain 37 70 73 + 75: 7(fvec4) Load 74 + 76: 7(fvec4) FAdd 69 75 + Store 67(v) 76 + 78: 77(ptr) AccessChain 67(v) 22 + 79: 6(float) Load 78 + 81: 17(int) Load 80(gl_InstanceID) + 82: 6(float) ConvertSToF 81 + 83: 6(float) FSub 79 82 + 84: 77(ptr) AccessChain 67(v) 22 + Store 84 83 + 87: 7(fvec4) Load 67(v) + Store 86(io) 87 + Return + FunctionEnd + 9(foo(): 7(fvec4) Function None 8 + 10: Label + 13(j): 12(ptr) Variable Function + 31(v): 30(ptr) Variable Function + 20: 19(ptr) AccessChain 16 18 + 23: 11(int) AtomicIAdd 20 21 22 21 + 25: 19(ptr) AccessChain 16 24 + 27: 11(int) AtomicIAdd 25 21 22 26 + 28: 11(int) ISub 27 21 + 29: 11(int) IAdd 23 28 + Store 13(j) 29 + 39: 38(ptr) AccessChain 37 24 + 40: 7(fvec4) Load 39 + 43: 42(ptr) AccessChain 37 41 22 + 44: 6(float) Load 43 + 45: 42(ptr) AccessChain 37 41 21 + 46: 6(float) Load 45 + 47: 42(ptr) AccessChain 37 18 22 + 48: 6(float) Load 47 + 49: 42(ptr) AccessChain 37 18 21 + 50: 6(float) Load 49 + 51: 7(fvec4) CompositeConstruct 44 46 48 50 + 52: 7(fvec4) FAdd 40 51 + 54: 38(ptr) AccessChain 37 53 + 55: 7(fvec4) Load 54 + 56: 7(fvec4) FAdd 52 55 + 58: 38(ptr) AccessChain 37 57 + 59: 7(fvec4) Load 58 + 60: 7(fvec4) FAdd 56 59 + Store 31(v) 60 + 61: 11(int) Load 13(j) + 62: 6(float) ConvertUToF 61 + 63: 7(fvec4) Load 31(v) + 64: 7(fvec4) VectorTimesScalar 63 62 + ReturnValue 64 + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 74 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 68 70 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 9 "foo(" + Name 13 "j" + Name 14 "gl_AtomicCounterBlock_0" + MemberName 14(gl_AtomicCounterBlock_0) 0 "counter3" + MemberName 14(gl_AtomicCounterBlock_0) 1 "counter2" + MemberName 14(gl_AtomicCounterBlock_0) 2 "counter1" + Name 16 "" + Name 31 "v" + Name 35 "gl_DefaultUniformBlock" + MemberName 35(gl_DefaultUniformBlock) 0 "a" + MemberName 35(gl_DefaultUniformBlock) 1 "b2" + MemberName 35(gl_DefaultUniformBlock) 2 "b1" + MemberName 35(gl_DefaultUniformBlock) 3 "c2" + MemberName 35(gl_DefaultUniformBlock) 4 "d" + MemberName 35(gl_DefaultUniformBlock) 5 "s" + MemberName 35(gl_DefaultUniformBlock) 6 "c1" + Name 37 "" + Name 68 "o" + Name 70 "io" + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Offset 0 + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 1 Offset 4 + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Volatile + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Coherent + MemberDecorate 14(gl_AtomicCounterBlock_0) 2 Offset 8 + Decorate 14(gl_AtomicCounterBlock_0) BufferBlock + Decorate 16 DescriptorSet 0 + Decorate 16 Binding 1 + Decorate 34 ArrayStride 16 + MemberDecorate 35(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 35(gl_DefaultUniformBlock) 1 Offset 16 + MemberDecorate 35(gl_DefaultUniformBlock) 2 Offset 24 + MemberDecorate 35(gl_DefaultUniformBlock) 3 Offset 32 + MemberDecorate 35(gl_DefaultUniformBlock) 4 Offset 48 + MemberDecorate 35(gl_DefaultUniformBlock) 5 Offset 64 + MemberDecorate 35(gl_DefaultUniformBlock) 6 Offset 128 + Decorate 35(gl_DefaultUniformBlock) Block + Decorate 37 DescriptorSet 0 + Decorate 37 Binding 0 + Decorate 68(o) Location 0 + Decorate 70(io) 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(gl_AtomicCounterBlock_0): TypeStruct 11(int) 11(int) 11(int) + 15: TypePointer Uniform 14(gl_AtomicCounterBlock_0) + 16: 15(ptr) Variable Uniform + 17: TypeInt 32 1 + 18: 17(int) Constant 2 + 19: TypePointer Uniform 11(int) + 21: 11(int) Constant 1 + 22: 11(int) Constant 0 + 24: 17(int) Constant 1 + 26: 11(int) Constant 4294967295 + 30: TypePointer Function 7(fvec4) + 32: TypeVector 6(float) 2 + 33: 11(int) Constant 4 + 34: TypeArray 7(fvec4) 33 +35(gl_DefaultUniformBlock): TypeStruct 7(fvec4) 32(fvec2) 32(fvec2) 7(fvec4) 7(fvec4) 34 7(fvec4) + 36: TypePointer Uniform 35(gl_DefaultUniformBlock) + 37: 36(ptr) Variable Uniform + 38: 17(int) Constant 0 + 39: TypePointer Uniform 7(fvec4) + 42: TypePointer Uniform 6(float) + 53: 17(int) Constant 6 + 57: 17(int) Constant 4 + 67: TypePointer Output 7(fvec4) + 68(o): 67(ptr) Variable Output + 69: TypePointer Input 7(fvec4) + 70(io): 69(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 71: 7(fvec4) Load 70(io) + 72: 7(fvec4) FunctionCall 9(foo() + 73: 7(fvec4) FAdd 71 72 + Store 68(o) 73 + Return + FunctionEnd + 9(foo(): 7(fvec4) Function None 8 + 10: Label + 13(j): 12(ptr) Variable Function + 31(v): 30(ptr) Variable Function + 20: 19(ptr) AccessChain 16 18 + 23: 11(int) AtomicIAdd 20 21 22 21 + 25: 19(ptr) AccessChain 16 24 + 27: 11(int) AtomicIAdd 25 21 22 26 + 28: 11(int) ISub 27 21 + 29: 11(int) IAdd 23 28 + Store 13(j) 29 + 40: 39(ptr) AccessChain 37 38 + 41: 7(fvec4) Load 40 + 43: 42(ptr) AccessChain 37 18 22 + 44: 6(float) Load 43 + 45: 42(ptr) AccessChain 37 18 21 + 46: 6(float) Load 45 + 47: 42(ptr) AccessChain 37 24 22 + 48: 6(float) Load 47 + 49: 42(ptr) AccessChain 37 24 21 + 50: 6(float) Load 49 + 51: 7(fvec4) CompositeConstruct 44 46 48 50 + 52: 7(fvec4) FAdd 41 51 + 54: 39(ptr) AccessChain 37 53 + 55: 7(fvec4) Load 54 + 56: 7(fvec4) FAdd 52 55 + 58: 39(ptr) AccessChain 37 57 + 59: 7(fvec4) Load 58 + 60: 7(fvec4) FAdd 56 59 + Store 31(v) 60 + 61: 11(int) Load 13(j) + 62: 6(float) ConvertUToF 61 + 63: 7(fvec4) Load 31(v) + 64: 7(fvec4) VectorTimesScalar 63 62 + ReturnValue 64 + FunctionEnd diff --git a/Test/iomap.crossStage.2.frag b/Test/iomap.crossStage.2.frag new file mode 100644 index 0000000000..25756a6d0e --- /dev/null +++ b/Test/iomap.crossStage.2.frag @@ -0,0 +1,42 @@ +#version 460 + + +layout(location = 5) in outBlock { + vec4 o3; +}; + + +in vec4 gfo1; +in vec2 gfo2; + +out vec4 outColor; + +uniform vec2 u1; +uniform vec3 u2; // initializer present in vertex stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in vertex stage + +uniform mat2 um2 = mat2(4.0); + +layout (location = 0, binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +buffer fragOnlyBlock { + vec2 fb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName2 [2]; // instance name different from vert + + +void main() +{ + vec4 color = gfo1 * u1.rgrg * u2.rgbr * u3.rgba; // o1 is statically used + outColor = color; +} + diff --git a/Test/iomap.crossStage.2.geom b/Test/iomap.crossStage.2.geom new file mode 100644 index 0000000000..91508ab5ef --- /dev/null +++ b/Test/iomap.crossStage.2.geom @@ -0,0 +1,39 @@ +#version 460 + +layout(points) in; +layout(triangle_strip, max_vertices=3) out; + +in vec4 vgo1[]; +in vec2 vgo2[]; + +layout(location = 5) in outBlock { + vec4 o3; +} inBlock[]; + +out vec4 gfo1; +out vec2 gfo2; + +layout(location = 5) out outBlock { + vec4 o3; +} gf_out; + +uniform vec2 u1; +uniform vec3 u2 = vec3(0); // initializer not present in fragment stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + for (int i = 0; i < 3; i++) { + gfo1 = vec4(0); + gfo2 = vec2(0); + gf_out.o3 = inBlock[i].o3; + EmitVertex(); + } + EndPrimitive(); +} + diff --git a/Test/iomap.crossStage.2.vert b/Test/iomap.crossStage.2.vert new file mode 100644 index 0000000000..ebb0d9d1e2 --- /dev/null +++ b/Test/iomap.crossStage.2.vert @@ -0,0 +1,38 @@ +#version 460 + +out vec4 vgo1; // declaration order different than fragment shader +out vec2 vgo2; // declaration order different than fragment shader + +layout(location = 5) out outBlock { + vec4 o3; +}; + +uniform vec2 u1; +uniform vec3 u2 = vec3(0); // initializer not present in fragment stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage + +uniform mat2 um2 = mat2(4.0); + +layout (location = 0, binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +buffer vertOnlyBlock { + vec2 vb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + vgo1 = vec4(0); + vgo2 = vec2(0); + o3 = vec4(0); +} + diff --git a/Test/iomap.crossStage.frag b/Test/iomap.crossStage.frag new file mode 100644 index 0000000000..16247032e3 --- /dev/null +++ b/Test/iomap.crossStage.frag @@ -0,0 +1,41 @@ +#version 460 + + +layout(location = 5) in outBlock { + vec4 o3; +}; + +in vec2 o2; // declaration order different than vertex shader +in vec4 o1; // declaration order different than vertex shader + +out vec4 outColor; + +uniform vec2 u1; +uniform vec3 u2; // initializer present in vertex stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in vertex stage + +uniform mat2 um2 = mat2(4.0); + +layout (location = 0, binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +buffer fragOnlyBlock { + vec2 fb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName2 [2]; // instance name different from vert + + +void main() +{ + vec4 color = o1 * u1.rgrg * u2.rgbr * u3.rgba; // o1 is statically used + outColor = color; +} + diff --git a/Test/iomap.crossStage.vert b/Test/iomap.crossStage.vert new file mode 100644 index 0000000000..d05874ffae --- /dev/null +++ b/Test/iomap.crossStage.vert @@ -0,0 +1,38 @@ +#version 460 + +out vec4 o1; // declaration order different than fragment shader +out vec2 o2; // declaration order different than fragment shader + +layout(location = 5) out outBlock { + vec4 o3; +}; + +uniform vec2 u1; +uniform vec3 u2 = vec3(0); // initializer not present in fragment stage +uniform vec4 u3 = vec4(0); // initializer matches initializer in fragment stage + +uniform mat2 um2 = mat2(4.0); + +layout (location = 0, binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +buffer vertOnlyBlock { + vec2 vb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + o1 = vec4(0); + o2 = vec2(0); + o3 = vec4(0); +} + diff --git a/Test/iomap.crossStage.vk.frag b/Test/iomap.crossStage.vk.frag new file mode 100644 index 0000000000..d09e687457 --- /dev/null +++ b/Test/iomap.crossStage.vk.frag @@ -0,0 +1,50 @@ +#version 460 + + +layout(location = 5) in outBlock { + vec4 o3; +}; + + +in vec4 gfo1; +in vec2 gfo2; + +out vec4 outColor; + +layout (binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +readonly buffer fragOnlyBlock { + vec2 fb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName2 [2]; // instance name different from vert + +vec2 Bar() { + return fb1 + + blockName2[0].b + + blockName2[1].b; +} + +vec4 Foo() { + return a + + b + + blockName2[0].a + + blockName2[1].a + + vec4(Bar(), 0.0, 0.0); +} + +void main() +{ + vec4 color = gfo1; // o1 is statically used + color = color + Foo(); + outColor = color; +} + diff --git a/Test/iomap.crossStage.vk.geom b/Test/iomap.crossStage.vk.geom new file mode 100644 index 0000000000..b951737363 --- /dev/null +++ b/Test/iomap.crossStage.vk.geom @@ -0,0 +1,35 @@ +#version 460 + +layout(points) in; +layout(triangle_strip, max_vertices=3) out; + +in vec4 vgo1[]; +in vec2 vgo2[]; + +layout(location = 5) in outBlock { + vec4 o3; +} inBlock[]; + +out vec4 gfo1; +out vec2 gfo2; + +layout(location = 5) out outBlock { + vec4 o3; +} gf_out; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + for (int i = 0; i < 3; i++) { + gfo1 = vec4(0); + gfo2 = vec2(0); + gf_out.o3 = inBlock[i].o3; + EmitVertex(); + } + EndPrimitive(); +} + diff --git a/Test/iomap.crossStage.vk.vert b/Test/iomap.crossStage.vk.vert new file mode 100644 index 0000000000..e422131f2c --- /dev/null +++ b/Test/iomap.crossStage.vk.vert @@ -0,0 +1,32 @@ +#version 460 + +out vec4 vgo1; // declaration order different than fragment shader +out vec2 vgo2; // declaration order different than fragment shader + +layout(location = 5) out outBlock { + vec4 o3; +}; + +layout (binding = 0) uniform sampler2D glass; + +uniform crossStageBlock1 { + uniform vec4 a; + vec4 b; +}; + +readonly buffer vertOnlyBlock { + vec2 vb1; +}; + +uniform crossStageBlock2 { + uniform vec4 a; + vec2 b; +} blockName1 [2]; // instance name different from frag + +void main() +{ + vgo1 = vec4(0); + vgo2 = vec2(0); + o3 = vec4(0); +} + diff --git a/Test/vk.relaxed.errorcheck.frag b/Test/vk.relaxed.errorcheck.frag new file mode 100644 index 0000000000..b75b50b77f --- /dev/null +++ b/Test/vk.relaxed.errorcheck.frag @@ -0,0 +1,16 @@ +#version 460 + +layout (location = 0) in vec4 io; + +out vec4 o; + +// default uniforms will be gathered into a uniform block +uniform vec4 a; // declared in both stages with different types + +vec4 foo() { + return a; +} + +void main() { + o = io + foo(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.errorcheck.vert b/Test/vk.relaxed.errorcheck.vert new file mode 100644 index 0000000000..b1bdbbecad --- /dev/null +++ b/Test/vk.relaxed.errorcheck.vert @@ -0,0 +1,15 @@ +#version 460 + +layout (location = 0) out vec4 io; + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec2 a; // declared in both stages with different type + +vec4 foo() { + return a.xyxy; +} + +void main() { + io = foo(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.frag b/Test/vk.relaxed.frag new file mode 100644 index 0000000000..d43416e0c0 --- /dev/null +++ b/Test/vk.relaxed.frag @@ -0,0 +1,74 @@ +#version 460 + +out vec4 o; + +// default uniforms will be gathered into a uniform block +uniform vec4 a; +uniform vec2 b = vec2(0, 0); // initializer will be ignored +layout(location = 0) uniform vec2 c; // location qualifier will be ignored +uniform vec4 d[10]; +uniform struct e { + vec2 x; + float y; + uint z; +} structUniform; + +// opaque types will not be grouped into uniform block +uniform sampler2D t1; + +// shared and packed layout qualifier are silently ignored +layout(shared) uniform UniformBlock { + float j; + vec4 k; +}; + +layout(packed) buffer BufferBlock { + float j; + vec4 k; +} bufferInstance; + +// atomic_uint will be converted to uint and gathered in a buffer block +layout(binding = 0) uniform atomic_uint counter1; // offset not used +layout(binding = 0) uniform atomic_uint counter2; // offset not used +layout(binding = 1) uniform atomic_uint counter3; // offset not used + +// atomic counter functions will be converted to equivalent integer atomic operations +uint bar() { + uint j = 0; + j = atomicCounterIncrement(counter1); + j = atomicCounterDecrement(counter1); + j = atomicCounter(counter1); + + j = atomicCounterAdd(counter1, 1); + j = atomicCounterAdd(counter1, -1); + j = atomicCounterSubtract(counter1, 1); + + j = atomicCounterMin(counter1, j); + j = atomicCounterMax(counter1, j); + j = atomicCounterAnd(counter1, j); + + j = atomicCounterOr(counter1, j); + j = atomicCounterXor(counter1, j); + + j = atomicCounterExchange(counter1, j); + j = atomicCounterCompSwap(counter1, 0, j); + + atomicCounterIncrement(counter2); + atomicCounterIncrement(counter3); + + memoryBarrierAtomicCounter(); + + return j; +} + +vec4 foo() { + float f = j + bufferInstance.j + structUniform.y + structUniform.z; + vec2 v2 = b + c + structUniform.x; + vec4 v4 = a + d[0] + d[1] + d[2] + k + bufferInstance.k + texture(t1, vec2(0, 0)); + return vec4(f) * vec4(v2, 1, 1) * v4; +} + +void main() { + float j = float(bar()); + o = j * foo(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.link1.frag b/Test/vk.relaxed.link1.frag new file mode 100644 index 0000000000..95b609f225 --- /dev/null +++ b/Test/vk.relaxed.link1.frag @@ -0,0 +1,28 @@ +#version 460 + +out vec4 o; + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec4 a; // declared in both stages +uniform vec2 b1; // declaration order swapped in other stage +uniform vec2 b2; +uniform vec4 c1; // not delcared in other file +uniform vec4 d; + +// final global buffer will berge buffers from all linked files +layout (binding = 0) uniform atomic_uint counter1; +layout (binding = 0) uniform atomic_uint counter2; + +vec4 foo(); + +vec4 bar() { + uint j = atomicCounterIncrement(counter1) + atomicCounterDecrement(counter2); + vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c1 + d; + + return float(j) * v; +} + +void main() { + o = foo() + bar(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.link2.frag b/Test/vk.relaxed.link2.frag new file mode 100644 index 0000000000..a4f468a4be --- /dev/null +++ b/Test/vk.relaxed.link2.frag @@ -0,0 +1,19 @@ +#version 460 + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec4 a; // declared in both stages +uniform vec2 b2; // declaration order swapped in other stage +uniform vec2 b1; +uniform vec4 c2; // not delcared in other file +uniform vec4 d; + +layout (binding = 0) uniform atomic_uint counter3; +layout (binding = 0) uniform atomic_uint counter2; + +vec4 foo() { + uint j = atomicCounterIncrement(counter2) + atomicCounterDecrement(counter3); + vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c2 + d; + + return float(j) * v; +} \ No newline at end of file diff --git a/Test/vk.relaxed.stagelink.frag b/Test/vk.relaxed.stagelink.frag new file mode 100644 index 0000000000..d1eebba038 --- /dev/null +++ b/Test/vk.relaxed.stagelink.frag @@ -0,0 +1,28 @@ +#version 460 + +layout (location = 0) in vec4 io; + +out vec4 o; + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec4 a; // declared in both stages +uniform vec2 b1; // declaration order swapped in other stage +uniform vec2 b2; +uniform vec4 c1; // not delcared in other file +uniform vec4 d; + +// final global buffer will berge buffers from all linked files +layout (binding = 0) uniform atomic_uint counter1; +layout (binding = 0) uniform atomic_uint counter2; + +vec4 foo() { + uint j = atomicCounterIncrement(counter1) + atomicCounterDecrement(counter2); + vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c1 + d; + + return float(j) * v; +} + +void main() { + o = io + foo(); +} \ No newline at end of file diff --git a/Test/vk.relaxed.stagelink.vert b/Test/vk.relaxed.stagelink.vert new file mode 100644 index 0000000000..52396ac523 --- /dev/null +++ b/Test/vk.relaxed.stagelink.vert @@ -0,0 +1,31 @@ +#version 460 + +layout (location = 0) out vec4 io; + +// default uniforms will be gathered into a uniform block +// final global block will merge uniforms from all linked files +uniform vec4 a; // declared in both stages +uniform vec2 b2; // declaration order swapped in other stage +uniform vec2 b1; +uniform vec4 c2; // not delcared in other file +uniform vec4 d; + +uniform vec4 s[4]; + +layout (binding = 0) uniform atomic_uint counter3; +layout (binding = 0) uniform atomic_uint counter2; + +vec4 foo() { + uint j = atomicCounterIncrement(counter2) + atomicCounterDecrement(counter3); + vec4 v = a + vec4(b1.x, b1.y, b2.x, b2.y) + c2 + d; + + return float(j) * v; +} + +void main() { + + vec4 v = foo(); + v = v + s[gl_VertexID]; + v.x = v.x - float(gl_InstanceID); + io = v; +} \ No newline at end of file diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 603203db9a..bb6d0bd856 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -501,6 +501,7 @@ class TQualifier { noContraction = false; nullInit = false; #endif + defaultBlock = false; } // drop qualifiers that don't belong in a temporary variable @@ -514,6 +515,7 @@ class TQualifier { specConstant = false; nonUniform = false; nullInit = false; + defaultBlock = false; clearLayout(); } @@ -572,6 +574,7 @@ class TQualifier { bool specConstant : 1; bool nonUniform : 1; bool explicitOffset : 1; + bool defaultBlock : 1; // default blocks with matching names have structures merged when linking #ifdef GLSLANG_WEB bool isWriteOnly() const { return false; } @@ -756,6 +759,46 @@ class TQualifier { } } + TBlockStorageClass getBlockStorage() const { + if (storage == EvqUniform && !isPushConstant()) { + return EbsUniform; + } + else if (storage == EvqUniform) { + return EbsPushConstant; + } + else if (storage == EvqBuffer) { + return EbsStorageBuffer; + } + return EbsNone; + } + + void setBlockStorage(TBlockStorageClass newBacking) { +#ifndef GLSLANG_WEB + layoutPushConstant = (newBacking == EbsPushConstant); +#endif + switch (newBacking) { + case EbsUniform : + if (layoutPacking == ElpStd430) { + // std430 would not be valid + layoutPacking = ElpStd140; + } + storage = EvqUniform; + break; + case EbsStorageBuffer : + storage = EvqBuffer; + break; +#ifndef GLSLANG_WEB + case EbsPushConstant : + storage = EvqUniform; + layoutSet = TQualifier::layoutSetEnd; + layoutBinding = TQualifier::layoutBindingEnd; + break; +#endif + default: + break; + } + } + #ifdef GLSLANG_WEB bool isPerView() const { return false; } bool isTaskMemory() const { return false; } @@ -852,6 +895,7 @@ class TQualifier { return hasNonXfbLayout() || hasXfb(); } + TLayoutMatrix layoutMatrix : 3; TLayoutPacking layoutPacking : 4; int layoutOffset; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 85edd6358d..1440c205ec 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -593,6 +593,7 @@ enum TOperator { EOpTime, EOpAtomicAdd, + EOpAtomicSubtract, EOpAtomicMin, EOpAtomicMax, EOpAtomicAnd, @@ -1135,6 +1136,8 @@ class TIntermTyped : public TIntermNode { virtual TBasicType getBasicType() const { return type.getBasicType(); } virtual TQualifier& getQualifier() { return type.getQualifier(); } virtual const TQualifier& getQualifier() const { return type.getQualifier(); } + virtual TArraySizes* getArraySizes() { return type.getArraySizes(); } + virtual const TArraySizes* getArraySizes() const { return type.getArraySizes(); } virtual void propagatePrecision(TPrecisionQualifier); virtual int getVectorSize() const { return type.getVectorSize(); } virtual int getMatrixCols() const { return type.getMatrixCols(); } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index c94a8a4b54..a9e5af456a 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1627,6 +1627,36 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "uint atomicCounterExchange(atomic_uint, uint);" "uint atomicCounterCompSwap(atomic_uint, uint, uint);" + "\n"); + } + } + else if (spvVersion.vulkanRelaxed) { + // + // Atomic counter functions act as aliases to normal atomic functions. + // replace definitions to take 'volatile coherent uint' instead of 'atomic_uint' + // and map to equivalent non-counter atomic op + // + if ((profile != EEsProfile && version >= 300) || + (profile == EEsProfile && version >= 310)) { + commonBuiltins.append( + "uint atomicCounterIncrement(volatile coherent uint);" + "uint atomicCounterDecrement(volatile coherent uint);" + "uint atomicCounter(volatile coherent uint);" + + "\n"); + } + if (profile != EEsProfile && version >= 460) { + commonBuiltins.append( + "uint atomicCounterAdd(volatile coherent uint, uint);" + "uint atomicCounterSubtract(volatile coherent uint, uint);" + "uint atomicCounterMin(volatile coherent uint, uint);" + "uint atomicCounterMax(volatile coherent uint, uint);" + "uint atomicCounterAnd(volatile coherent uint, uint);" + "uint atomicCounterOr(volatile coherent uint, uint);" + "uint atomicCounterXor(volatile coherent uint, uint);" + "uint atomicCounterExchange(volatile coherent uint, uint);" + "uint atomicCounterCompSwap(volatile coherent uint, uint, uint);" + "\n"); } } @@ -4124,7 +4154,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } #ifndef GLSLANG_WEB if ((profile != EEsProfile && version >= 420) || esBarrier) { - if (spvVersion.vulkan == 0) { + if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) { commonBuiltins.append("void memoryBarrierAtomicCounter();"); } commonBuiltins.append("void memoryBarrierImage();"); @@ -4848,6 +4878,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in int gl_VertexIndex;" "in int gl_InstanceIndex;" ); + + if (spvVersion.vulkan > 0 && version >= 140 && spvVersion.vulkanRelaxed) + stageBuiltins[EShLangVertex].append( + "in int gl_VertexID;" // declare with 'in' qualifier + "in int gl_InstanceID;" + ); + if (version >= 440) { stageBuiltins[EShLangVertex].append( "in int gl_BaseVertexARB;" @@ -4885,7 +4922,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "mediump float gl_PointSize;" // needs qualifier fixed later ); } else { - if (spvVersion.vulkan == 0) + if (spvVersion.vulkan == 0 || spvVersion.vulkanRelaxed) stageBuiltins[EShLangVertex].append( "in highp int gl_VertexID;" // needs qualifier fixed later "in highp int gl_InstanceID;" // needs qualifier fixed later @@ -7436,6 +7473,12 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion SpecialQualifier("gl_InstanceID", EvqInstanceId, EbvInstanceId, symbolTable); } + if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { + // treat these built-ins as aliases of VertexIndex and InstanceIndex + BuiltInVariable("gl_VertexID", EbvVertexIndex, symbolTable); + BuiltInVariable("gl_InstanceID", EbvInstanceIndex, symbolTable); + } + if (profile != EEsProfile) { if (version >= 440) { symbolTable.setVariableExtensions("gl_BaseVertexARB", 1, &E_GL_ARB_shader_draw_parameters); @@ -8912,6 +8955,14 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierAtomicCounter); symbolTable.relateToOperator("memoryBarrierImage", EOpMemoryBarrierImage); + if (spvVersion.vulkanRelaxed) { + // + // functions signature have been replaced to take uint operations on buffer variables + // remap atomic counter functions to atomic operations + // + symbolTable.relateToOperator("memoryBarrierAtomicCounter", EOpMemoryBarrierBuffer); + } + symbolTable.relateToOperator("atomicLoad", EOpAtomicLoad); symbolTable.relateToOperator("atomicStore", EOpAtomicStore); @@ -8919,6 +8970,20 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("atomicCounterDecrement", EOpAtomicCounterDecrement); symbolTable.relateToOperator("atomicCounter", EOpAtomicCounter); + if (spvVersion.vulkanRelaxed) { + // + // functions signature have been replaced to take uint operations + // remap atomic counter functions to atomic operations + // + // these atomic counter functions do not match signatures of glsl + // atomic functions, so they will be remapped to semantically + // equivalent functions in the parser + // + symbolTable.relateToOperator("atomicCounterIncrement", EOpNull); + symbolTable.relateToOperator("atomicCounterDecrement", EOpNull); + symbolTable.relateToOperator("atomicCounter", EOpNull); + } + symbolTable.relateToOperator("clockARB", EOpReadClockSubgroupKHR); symbolTable.relateToOperator("clock2x32ARB", EOpReadClockSubgroupKHR); @@ -8937,6 +9002,23 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCounterCompSwap); } + if (spvVersion.vulkanRelaxed) { + // + // functions signature have been replaced to take 'uint' instead of 'atomic_uint' + // remap atomic counter functions to non-counter atomic ops so + // functions act as aliases to non-counter atomic ops + // + symbolTable.relateToOperator("atomicCounterAdd", EOpAtomicAdd); + symbolTable.relateToOperator("atomicCounterSubtract", EOpAtomicSubtract); + symbolTable.relateToOperator("atomicCounterMin", EOpAtomicMin); + symbolTable.relateToOperator("atomicCounterMax", EOpAtomicMax); + symbolTable.relateToOperator("atomicCounterAnd", EOpAtomicAnd); + symbolTable.relateToOperator("atomicCounterOr", EOpAtomicOr); + symbolTable.relateToOperator("atomicCounterXor", EOpAtomicXor); + symbolTable.relateToOperator("atomicCounterExchange", EOpAtomicExchange); + symbolTable.relateToOperator("atomicCounterCompSwap", EOpAtomicCompSwap); + } + symbolTable.relateToOperator("fma", EOpFma); symbolTable.relateToOperator("frexp", EOpFrexp); symbolTable.relateToOperator("ldexp", EOpLdexp); diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index 3efa27aca3..02cca409e1 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -601,7 +601,6 @@ void TParseContextBase::parseSwizzleSelector(const TSourceLoc& loc, const TStrin selector.push_back(0); } -#ifdef ENABLE_HLSL // // Make the passed-in variable information become a member of the // global uniform block. If this doesn't exist yet, make it. @@ -646,7 +645,67 @@ void TParseContextBase::growGlobalUniformBlock(const TSourceLoc& loc, TType& mem ++firstNewMember; } -#endif + +void TParseContextBase::growAtomicCounterBlock(int binding, const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) { + // Make the atomic counter block, if not yet made. + const auto &at = atomicCounterBuffers.find(binding); + if (at == atomicCounterBuffers.end()) { + atomicCounterBuffers.insert({binding, (TVariable*)nullptr }); + atomicCounterBlockFirstNewMember.insert({binding, 0}); + } + + TVariable*& atomicCounterBuffer = atomicCounterBuffers[binding]; + int& bufferNewMember = atomicCounterBlockFirstNewMember[binding]; + + if (atomicCounterBuffer == nullptr) { + TQualifier blockQualifier; + blockQualifier.clear(); + blockQualifier.storage = EvqBuffer; + + char charBuffer[512]; + if (binding != TQualifier::layoutBindingEnd) { + snprintf(charBuffer, 512, "%s_%d", getAtomicCounterBlockName(), binding); + } else { + snprintf(charBuffer, 512, "%s_0", getAtomicCounterBlockName()); + } + + TType blockType(new TTypeList, *NewPoolTString(charBuffer), blockQualifier); + setUniformBlockDefaults(blockType); + blockType.getQualifier().layoutPacking = ElpStd430; + atomicCounterBuffer = new TVariable(NewPoolTString(""), blockType, true); + // If we arn't auto mapping bindings then set the block to use the same + // binding as what the atomic was set to use + if (!intermediate.getAutoMapBindings()) { + atomicCounterBuffer->getWritableType().getQualifier().layoutBinding = binding; + } + bufferNewMember = 0; + + atomicCounterBuffer->getWritableType().getQualifier().layoutSet = atomicCounterBlockSet; + } + + // Add the requested member as a member to the global block. + TType* type = new TType; + type->shallowCopy(memberType); + type->setFieldName(memberName); + if (typeList) + type->setStruct(typeList); + TTypeLoc typeLoc = {type, loc}; + atomicCounterBuffer->getType().getWritableStruct()->push_back(typeLoc); + + // Insert into the symbol table. + if (bufferNewMember == 0) { + // This is the first request; we need a normal symbol table insert + if (symbolTable.insert(*atomicCounterBuffer)) + trackLinkage(*atomicCounterBuffer); + else + error(loc, "failed to insert the global constant buffer", "buffer", ""); + } else { + // This is a follow-on request; we need to amend the first insert + symbolTable.amend(*atomicCounterBuffer, bufferNewMember); + } + + ++bufferNewMember; +} void TParseContextBase::finish() { diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 12d68a3e6c..550fce6797 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -225,6 +225,108 @@ void TParseContext::parserError(const char* s) error(getCurrentLoc(), "compilation terminated", "", ""); } +void TParseContext::growGlobalUniformBlock(const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) +{ + bool createBlock = globalUniformBlock == nullptr; + + if (createBlock) { + globalUniformBinding = intermediate.getGlobalUniformBinding(); + globalUniformSet = intermediate.getGlobalUniformSet(); + } + + // use base class function to create/expand block + TParseContextBase::growGlobalUniformBlock(loc, memberType, memberName, typeList); + + if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { + // check for a block storage override + TBlockStorageClass storageOverride = intermediate.getBlockStorageOverride(getGlobalUniformBlockName()); + TQualifier& qualifier = globalUniformBlock->getWritableType().getQualifier(); + qualifier.defaultBlock = true; + + if (storageOverride != EbsNone) { + if (createBlock) { + // Remap block storage + qualifier.setBlockStorage(storageOverride); + + // check that the change didn't create errors + blockQualifierCheck(loc, qualifier, false); + } + + // remap meber storage as well + memberType.getQualifier().setBlockStorage(storageOverride); + } + } +} + +void TParseContext::growAtomicCounterBlock(int binding, const TSourceLoc& loc, TType& memberType, const TString& memberName, TTypeList* typeList) +{ + bool createBlock = atomicCounterBuffers.find(binding) == atomicCounterBuffers.end(); + + if (createBlock) { + atomicCounterBlockSet = intermediate.getAtomicCounterBlockSet(); + } + + // use base class function to create/expand block + TParseContextBase::growAtomicCounterBlock(binding, loc, memberType, memberName, typeList); + TQualifier& qualifier = atomicCounterBuffers[binding]->getWritableType().getQualifier(); + qualifier.defaultBlock = true; + + if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { + // check for a Block storage override + TBlockStorageClass storageOverride = intermediate.getBlockStorageOverride(getAtomicCounterBlockName()); + + if (storageOverride != EbsNone) { + if (createBlock) { + // Remap block storage + + qualifier.setBlockStorage(storageOverride); + + // check that the change didn't create errors + blockQualifierCheck(loc, qualifier, false); + } + + // remap meber storage as well + memberType.getQualifier().setBlockStorage(storageOverride); + } + } +} + +const char* TParseContext::getGlobalUniformBlockName() const +{ + const char* name = intermediate.getGlobalUniformBlockName(); + if (std::string(name) == "") + return "gl_DefaultUniformBlock"; + else + return name; +} +void TParseContext::finalizeGlobalUniformBlockLayout(TVariable&) +{ +} +void TParseContext::setUniformBlockDefaults(TType& block) const +{ + block.getQualifier().layoutPacking = ElpStd140; + block.getQualifier().layoutMatrix = ElmColumnMajor; +} + + +const char* TParseContext::getAtomicCounterBlockName() const +{ + const char* name = intermediate.getAtomicCounterBlockName(); + if (std::string(name) == "") + return "gl_AtomicCounterBlock"; + else + return name; +} +void TParseContext::finalizeAtomicCounterBlockLayout(TVariable&) +{ +} + +void TParseContext::setAtomicCounterBlockDefaults(TType& block) const +{ + block.getQualifier().layoutPacking = ElpStd430; + block.getQualifier().layoutMatrix = ElmRowMajor; +} + void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& tokens) { #ifndef GLSLANG_WEB @@ -1135,6 +1237,14 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction { TIntermTyped* result = nullptr; + if (spvVersion.vulkan != 0 && spvVersion.vulkanRelaxed) { + // allow calls that are invalid in Vulkan Semantics to be invisibily + // remapped to equivalent valid functions + result = vkRelaxedRemapFunctionCall(loc, function, arguments); + if (result) + return result; + } + if (function->getBuiltInOp() == EOpArrayLength) result = handleLengthMethod(loc, function, arguments); else if (function->getBuiltInOp() != EOpNull) { @@ -1727,6 +1837,7 @@ void TParseContext::memorySemanticsCheck(const TSourceLoc& loc, const TFunction& // Grab the semantics and storage class semantics from the operands, based on opcode switch (callNode.getOp()) { case EOpAtomicAdd: + case EOpAtomicSubtract: case EOpAtomicMin: case EOpAtomicMax: case EOpAtomicAnd: @@ -2176,6 +2287,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan } case EOpAtomicAdd: + case EOpAtomicSubtract: case EOpAtomicMin: case EOpAtomicMax: case EOpAtomicAnd: @@ -3388,7 +3500,7 @@ void TParseContext::transparentOpaqueCheck(const TSourceLoc& loc, const TType& t if (type.containsNonOpaque()) { // Vulkan doesn't allow transparent uniforms outside of blocks - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed) vulkanRemoved(loc, "non-opaque uniforms outside a block"); // OpenGL wants locations on these (unless they are getting automapped) if (spvVersion.openGl > 0 && !type.getQualifier().hasLocation() && !intermediate.getAutoMapLocations()) @@ -5019,14 +5131,22 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } if (id == TQualifier::getLayoutPackingString(ElpPacked)) { - if (spvVersion.spv != 0) - spvRemoved(loc, "packed"); + if (spvVersion.spv != 0) { + if (spvVersion.vulkanRelaxed) + return; // silently ignore qualifier + else + spvRemoved(loc, "packed"); + } publicType.qualifier.layoutPacking = ElpPacked; return; } if (id == TQualifier::getLayoutPackingString(ElpShared)) { - if (spvVersion.spv != 0) - spvRemoved(loc, "shared"); + if (spvVersion.spv != 0) { + if (spvVersion.vulkanRelaxed) + return; // silently ignore qualifier + else + spvRemoved(loc, "shared"); + } publicType.qualifier.layoutPacking = ElpShared; return; } @@ -5928,7 +6048,7 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) error(loc, "sampler binding not less than gl_MaxCombinedTextureImageUnits", "binding", type.isArray() ? "(using array)" : ""); #endif } - if (type.isAtomic()) { + if (type.isAtomic() && !spvVersion.vulkanRelaxed) { if (qualifier.layoutBinding >= (unsigned int)resources.maxAtomicCounterBindings) { error(loc, "atomic_uint binding is too large; see gl_MaxAtomicCounterBindings", "binding", ""); return; @@ -6598,6 +6718,68 @@ const TFunction* TParseContext::findFunctionExplicitTypes(const TSourceLoc& loc, return bestMatch; } +// +// Adjust function calls that aren't declared in Vulkan to a +// calls with equivalent effects +// +TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, TFunction* function, TIntermNode* arguments) +{ + TIntermTyped* result = nullptr; + +#ifndef GLSLANG_WEB + if (function->getBuiltInOp() != EOpNull) { + return nullptr; + } + + if (function->getName() == "atomicCounterIncrement") { + // change atomicCounterIncrement into an atomicAdd of 1 + TString name("atomicAdd"); + TType uintType(EbtUint); + + TFunction realFunc(&name, function->getType()); + + for (int i = 0; i < function->getParamCount(); ++i) { + realFunc.addParameter((*function)[i]); + } + + TParameter tmpP = { 0, &uintType }; + realFunc.addParameter(tmpP); + arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(1, loc, true)); + + result = handleFunctionCall(loc, &realFunc, arguments); + } else if (function->getName() == "atomicCounterDecrement") { + // change atomicCounterDecrement into an atomicAdd with -1 + // and subtract 1 from result, to return post-decrement value + TString name("atomicAdd"); + TType uintType(EbtUint); + + TFunction realFunc(&name, function->getType()); + + for (int i = 0; i < function->getParamCount(); ++i) { + realFunc.addParameter((*function)[i]); + } + + TParameter tmpP = { 0, &uintType }; + realFunc.addParameter(tmpP); + arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(-1, loc, true)); + + result = handleFunctionCall(loc, &realFunc, arguments); + + // post decrement, so that it matches AtomicCounterDecrement semantics + if (result) { + result = handleBinaryMath(loc, "-", EOpSub, result, intermediate.addConstantUnion(1, loc, true)); + } + } else if (function->getName() == "atomicCounter") { + // change atomicCounter into a direct read of the variable + if (arguments->getAsTyped()) { + result = arguments->getAsTyped(); + } + } +#endif + + return result; +} + // When a declaration includes a type, but not a variable name, it can be used // to establish defaults. void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType& publicType) @@ -6622,6 +6804,91 @@ void TParseContext::declareTypeDefaults(const TSourceLoc& loc, const TPublicType #endif } +bool TParseContext::vkRelaxedRemapUniformVariable(const TSourceLoc& loc, TString& identifier, const TPublicType&, + TArraySizes*, TIntermTyped* initializer, TType& type) +{ + if (parsingBuiltins || symbolTable.atBuiltInLevel() || !symbolTable.atGlobalLevel() || + type.getQualifier().storage != EvqUniform || + !(type.containsNonOpaque() +#ifndef GLSLANG_WEB + || type.getBasicType() == EbtAtomicUint +#endif + )) { + return false; + } + + if (type.getQualifier().hasLocation()) { + warn(loc, "ignoring layout qualifier for uniform", identifier.c_str(), "location"); + type.getQualifier().layoutLocation = TQualifier::layoutLocationEnd; + } + + if (initializer) { + warn(loc, "Ignoring initializer for uniform", identifier.c_str(), ""); + initializer = nullptr; + } + + if (type.isArray()) { + // do array size checks here + arraySizesCheck(loc, type.getQualifier(), type.getArraySizes(), initializer, false); + + if (arrayQualifierError(loc, type.getQualifier()) || arrayError(loc, type)) { + error(loc, "array param error", identifier.c_str(), ""); + } + } + + // do some checking on the type as it was declared + layoutTypeCheck(loc, type); + + int bufferBinding = TQualifier::layoutBindingEnd; + TVariable* updatedBlock = nullptr; + +#ifndef GLSLANG_WEB + // Convert atomic_uint into members of a buffer block + if (type.isAtomic()) { + type.setBasicType(EbtUint); + type.getQualifier().storage = EvqBuffer; + + type.getQualifier().volatil = true; + type.getQualifier().coherent = true; + + // xxTODO: use logic from fixOffset() to apply explicit member offset + bufferBinding = type.getQualifier().layoutBinding; + type.getQualifier().layoutBinding = TQualifier::layoutBindingEnd; + type.getQualifier().explicitOffset = false; + growAtomicCounterBlock(bufferBinding, loc, type, identifier, nullptr); + updatedBlock = atomicCounterBuffers[bufferBinding]; + } +#endif + + if (!updatedBlock) { + growGlobalUniformBlock(loc, type, identifier, nullptr); + updatedBlock = globalUniformBlock; + } + + // + // don't assign explicit member offsets here + // if any are assigned, need to be updated here and in the merge/link step + // fixBlockUniformOffsets(updatedBlock->getWritableType().getQualifier(), *updatedBlock->getWritableType().getWritableStruct()); + + // checks on update buffer object + layoutObjectCheck(loc, *updatedBlock); + + TSymbol* symbol = symbolTable.find(identifier); + + if (!symbol) { + if (updatedBlock == globalUniformBlock) + error(loc, "error adding uniform to default uniform block", identifier.c_str(), ""); + else + error(loc, "error adding atomic counter to atomic counter block", identifier.c_str(), ""); + return false; + } + + // merge qualifiers + mergeObjectLayoutQualifiers(updatedBlock->getWritableType().getQualifier(), type.getQualifier(), true); + + return true; +} + // // Do everything necessary to handle a variable (non-block) declaration. // Either redeclaring a variable, or making a new one, updating the symbol @@ -6733,6 +7000,14 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden if (symbol == nullptr) reservedErrorCheck(loc, identifier); + if (symbol == nullptr && spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { + bool remapped = vkRelaxedRemapUniformVariable(loc, identifier, publicType, arraySizes, initializer, type); + + if (remapped) { + return nullptr; + } + } + inheritGlobalDefaults(type.getQualifier()); // Declare the variable @@ -7625,6 +7900,8 @@ void TParseContext::inheritMemoryQualifiers(const TQualifier& from, TQualifier& void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, const TString* instanceName, TArraySizes* arraySizes) { + if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) + blockStorageRemap(loc, blockName, currentBlockQualifier); blockStageIoCheck(loc, currentBlockQualifier); blockQualifierCheck(loc, currentBlockQualifier, instanceName != nullptr); if (arraySizes != nullptr) { @@ -7914,6 +8191,17 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con trackLinkage(variable); } +// +// allow storage type of block to be remapped at compile time +// +void TParseContext::blockStorageRemap(const TSourceLoc&, const TString* instanceName, TQualifier& qualifier) +{ + TBlockStorageClass type = intermediate.getBlockStorageOverride(instanceName->c_str()); + if (type != EbsNone) { + qualifier.setBlockStorage(type); + } +} + // Do all block-declaration checking regarding the combination of in/out/uniform/buffer // with a particular stage. void TParseContext::blockStageIoCheck(const TSourceLoc& loc, const TQualifier& qualifier) diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index ad9b8d6acd..6f00621af9 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -92,7 +92,8 @@ class TParseContextBase : public TParseVersions { limits(resources.limits), globalUniformBlock(nullptr), globalUniformBinding(TQualifier::layoutBindingEnd), - globalUniformSet(TQualifier::layoutSetEnd) + globalUniformSet(TQualifier::layoutSetEnd), + atomicCounterBlockSet(TQualifier::layoutSetEnd) { if (entryPoint != nullptr) sourceEntryPointName = *entryPoint; @@ -154,10 +155,11 @@ class TParseContextBase : public TParseVersions { extensionCallback(line, extension, behavior); } -#ifdef ENABLE_HLSL // Manage the global uniform block (default uniforms in GLSL, $Global in HLSL) virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr); -#endif + + // Manage global buffer (used for backing atomic counters in GLSL when using relaxed Vulkan semantics) + virtual void growAtomicCounterBlock(int binding, const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr); // Potentially rename shader entry point function void renameShaderFunction(TString*& name) const @@ -230,7 +232,24 @@ class TParseContextBase : public TParseVersions { // override this to set the language-specific name virtual const char* getGlobalUniformBlockName() const { return ""; } virtual void setUniformBlockDefaults(TType&) const { } - virtual void finalizeGlobalUniformBlockLayout(TVariable&) { } + virtual void finalizeGlobalUniformBlockLayout(TVariable&) {} + + // Manage the atomic counter block (used for atomic_uints with Vulkan-Relaxed) + TMap atomicCounterBuffers; + unsigned int atomicCounterBlockSet; + TMap atomicCounterBlockFirstNewMember; + // override this to set the language-specific name + virtual const char* getAtomicCounterBlockName() const { return ""; } + virtual void setAtomicCounterBlockDefaults(TType&) const {} + virtual void finalizeAtomicCounterBlockLayout(TVariable&) {} + bool isAtomicCounterBlock(const TSymbol& symbol) { + const TVariable* var = symbol.getAsVariable(); + if (!var) + return false; + const auto& at = atomicCounterBuffers.find(var->getType().getQualifier().layoutBinding); + return (at != atomicCounterBuffers.end() && (*at).second->getType() == var->getType()); + } + virtual void outputMessage(const TSourceLoc&, const char* szReason, const char* szToken, const char* szExtraInfoFormat, TPrefixType prefix, va_list args); @@ -293,6 +312,9 @@ class TParseContext : public TParseContextBase { bool parseShaderStrings(TPpContext&, TInputScanner& input, bool versionWillBeError = false) override; void parserError(const char* s); // for bison's yyerror + virtual void growGlobalUniformBlock(const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr) override; + virtual void growAtomicCounterBlock(int binding, const TSourceLoc&, TType&, const TString& memberName, TTypeList* typeList = nullptr) override; + void reservedErrorCheck(const TSourceLoc&, const TString&); void reservedPpErrorCheck(const TSourceLoc&, const char* name, const char* op) override; bool lineContinuationCheck(const TSourceLoc&, bool endOfComment) override; @@ -340,6 +362,10 @@ class TParseContext : public TParseContextBase { void checkPrecisionQualifier(const TSourceLoc&, TPrecisionQualifier); void memorySemanticsCheck(const TSourceLoc&, const TFunction&, const TIntermOperator& callNode); + TIntermTyped* vkRelaxedRemapFunctionCall(const TSourceLoc&, TFunction*, TIntermNode*); + // returns true if the variable was remapped to something else + bool vkRelaxedRemapUniformVariable(const TSourceLoc&, TString&, const TPublicType&, TArraySizes*, TIntermTyped*, TType&); + void assignError(const TSourceLoc&, const char* op, TString left, TString right); void unaryOpError(const TSourceLoc&, const char* op, TString operand); void binaryOpError(const TSourceLoc&, const char* op, TString left, TString right); @@ -417,6 +443,7 @@ class TParseContext : public TParseContextBase { TIntermTyped* constructBuiltIn(const TType&, TOperator, TIntermTyped*, const TSourceLoc&, bool subset); void inheritMemoryQualifiers(const TQualifier& from, TQualifier& to); void declareBlock(const TSourceLoc&, TTypeList& typeList, const TString* instanceName = 0, TArraySizes* arraySizes = 0); + void blockStorageRemap(const TSourceLoc&, const TString*, TQualifier&); void blockStageIoCheck(const TSourceLoc&, const TQualifier&); void blockQualifierCheck(const TSourceLoc&, const TQualifier&, bool instanceName); void fixBlockLocations(const TSourceLoc&, TQualifier&, TTypeList&, bool memberWithLocation, bool memberWithoutLocation); @@ -461,6 +488,14 @@ class TParseContext : public TParseContextBase { void finish() override; #endif + virtual const char* getGlobalUniformBlockName() const override; + virtual void finalizeGlobalUniformBlockLayout(TVariable&) override; + virtual void setUniformBlockDefaults(TType& block) const override; + + virtual const char* getAtomicCounterBlockName() const override; + virtual void finalizeAtomicCounterBlockLayout(TVariable&) override; + virtual void setAtomicCounterBlockDefaults(TType& block) const override; + public: // // Generally, bison productions, the scanner, and the PP need read/write access to these; just give them direct access diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 3f793a7434..4b340eaa19 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -159,7 +159,7 @@ int MapVersionToIndex(int version) return index; } -const int SpvVersionCount = 3; // index range in MapSpvVersionToIndex +const int SpvVersionCount = 4; // index range in MapSpvVersionToIndex int MapSpvVersionToIndex(const SpvVersion& spvVersion) { @@ -167,8 +167,12 @@ int MapSpvVersionToIndex(const SpvVersion& spvVersion) if (spvVersion.openGl > 0) index = 1; - else if (spvVersion.vulkan > 0) - index = 2; + else if (spvVersion.vulkan > 0) { + if (!spvVersion.vulkanRelaxed) + index = 2; + else + index = 3; + } assert(index < SpvVersionCount); @@ -723,6 +727,7 @@ void TranslateEnvironment(const TEnvironment* environment, EShMessages& messages break; case EShClientVulkan: spvVersion.vulkanGlsl = environment->input.dialectVersion; + spvVersion.vulkanRelaxed = environment->input.VulkanRulesRelaxed; break; case EShClientOpenGL: spvVersion.openGl = environment->input.dialectVersion; @@ -1868,6 +1873,15 @@ void TShader::setResourceSetBinding(const std::vector& base) { in void TShader::setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode) { intermediate->setTextureSamplerTransformMode(mode); } #endif +void TShader::addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) { intermediate->addBlockStorageOverride(nameStr, backing); } + +void TShader::setGlobalUniformBlockName(const char* name) { intermediate->setGlobalUniformBlockName(name); } +void TShader::setGlobalUniformSet(unsigned int set) { intermediate->setGlobalUniformSet(set); } +void TShader::setGlobalUniformBinding(unsigned int binding) { intermediate->setGlobalUniformBinding(binding); } + +void TShader::setAtomicCounterBlockName(const char* name) { intermediate->setAtomicCounterBlockName(name); } +void TShader::setAtomicCounterBlockSet(unsigned int set) { intermediate->setAtomicCounterBlockSet(set); } + #ifdef ENABLE_HLSL // See comment above TDefaultHlslIoMapper in iomapper.cpp: void TShader::setHlslIoMapping(bool hlslIoMap) { intermediate->setHlslIoMapping(hlslIoMap); } @@ -1983,7 +1997,10 @@ bool TProgram::link(EShMessages messages) error = true; } - // TODO: Link: cross-stage error checking + if (!error) { + if (! crossStageCheck(messages)) + error = true; + } return ! error; } @@ -2060,6 +2077,64 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) return intermediate[stage]->getNumErrors() == 0; } +// +// Check that there are no errors in linker objects accross stages +// +// Return true if no errors. +// +bool TProgram::crossStageCheck(EShMessages) { + + // make temporary intermediates to hold the linkage symbols for each linking interface + // while we do the checks + // Independent interfaces are: + // all uniform variables and blocks + // all buffer blocks + // all in/out on a stage boundary + + TVector activeStages; + for (int s = 0; s < EShLangCount; ++s) { + if (intermediate[s]) + activeStages.push_back(intermediate[s]); + } + + // no extra linking if there is only one stage + if (! (activeStages.size() > 1)) + return true; + + // setup temporary tree to hold unfirom objects from different stages + TIntermediate* firstIntermediate = activeStages.front(); + TIntermediate uniforms(EShLangCount, + firstIntermediate->getVersion(), + firstIntermediate->getProfile()); + uniforms.setSpv(firstIntermediate->getSpv()); + + TIntermAggregate uniformObjects(EOpLinkerObjects); + TIntermAggregate root(EOpSequence); + root.getSequence().push_back(&uniformObjects); + uniforms.setTreeRoot(&root); + + bool error = false; + + // merge uniforms from all stages into a single intermediate + for (unsigned int i = 0; i < activeStages.size(); ++i) { + uniforms.mergeUniformObjects(*infoSink, *activeStages[i]); + } + error |= uniforms.getNumErrors() != 0; + + // copy final definition of global block back into each stage + for (unsigned int i = 0; i < activeStages.size(); ++i) { + activeStages[i]->mergeGlobalUniformBlocks(*infoSink, uniforms); + } + + // compare cross stage symbols for each stage boundary + for (unsigned int i = 1; i < activeStages.size(); ++i) { + activeStages[i - 1]->checkStageIO(*infoSink, *activeStages[i]); + error |= (activeStages[i - 1]->getNumErrors() != 0); + } + + return !error; +} + const char* TProgram::getInfoLog() { return infoSink->info.c_str(); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 488c98c5cc..7554bfd769 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -1273,7 +1273,7 @@ void TParseVersions::spvRemoved(const TSourceLoc& loc, const char* op) // Call for any operation removed because Vulkan SPIR-V is being generated. void TParseVersions::vulkanRemoved(const TSourceLoc& loc, const char* op) { - if (spvVersion.vulkan > 0) + if (spvVersion.vulkan > 0 && !spvVersion.vulkanRelaxed) error(loc, "not allowed when using GLSL for Vulkan", op, ""); } diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index f377973a85..25feb0b7bf 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -87,11 +87,12 @@ inline const char* ProfileName(EProfile profile) // The union of all requested rule sets will be applied. // struct SpvVersion { - SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0) {} + SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0), vulkanRelaxed(false) {} unsigned int spv; // the version of SPIR-V to target, as defined by "word 1" of the SPIR-V binary header int vulkanGlsl; // the version of GLSL semantics for Vulkan, from GL_KHR_vulkan_glsl, for "#define VULKAN XXX" int vulkan; // the version of Vulkan, for which SPIR-V execution environment rules to use int openGl; // the version of GLSL semantics for OpenGL, from GL_ARB_gl_spirv, for "#define GL_SPIRV XXX" + bool vulkanRelaxed; // relax changes to GLSL for Vulkan, allowing some GL-specific to be compiled to Vulkan SPIR-V target }; // diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index 5ce3e47280..c718f949a7 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -886,6 +886,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpTime: out.debug << "time"; break; case EOpAtomicAdd: out.debug << "AtomicAdd"; break; + case EOpAtomicSubtract: out.debug << "AtomicSubtract"; break; case EOpAtomicMin: out.debug << "AtomicMin"; break; case EOpAtomicMax: out.debug << "AtomicMax"; break; case EOpAtomicAnd: out.debug << "AtomicAnd"; break; diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index c42e74fa5f..7e12864f36 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -210,8 +210,8 @@ struct TResolverUniformAdaptor { ent.newIndex = -1; const bool isValid = resolver.validateBinding(stage, ent); if (isValid) { - resolver.resolveBinding(ent.stage, ent); resolver.resolveSet(ent.stage, ent); + resolver.resolveBinding(ent.stage, ent); resolver.resolveUniformLocation(ent.stage, ent); if (ent.newBinding != -1) { @@ -317,15 +317,13 @@ struct TResolverInOutAdaptor { }; // The class is used for reserving explicit uniform locations and ubo/ssbo/opaque bindings +// xxTODO: maybe this logic should be moved into the resolver's "validateInOut" and "validateUniform" struct TSymbolValidater { TSymbolValidater(TIoMapResolver& r, TInfoSink& i, TVarLiveMap* in[EShLangCount], TVarLiveMap* out[EShLangCount], TVarLiveMap* uniform[EShLangCount], bool& hadError, EProfile profile, int version) - : preStage(EShLangCount) - , currentStage(EShLangCount) - , nextStage(EShLangCount) - , resolver(r) + : resolver(r) , infoSink(i) , hadError(hadError) , profile(profile) @@ -438,17 +436,23 @@ struct TSymbolValidater TIntermSymbol* base = ent1.symbol; const TType& type = ent1.symbol->getType(); const TString& name = entKey.first; - EShLanguage stage = ent1.stage; TString mangleName1, mangleName2; - if (currentStage != stage) { - preStage = currentStage; - currentStage = stage; - nextStage = EShLangCount; - for (int i = currentStage + 1; i < EShLangCount; i++) { - if (inVarMaps[i] != nullptr) { - nextStage = static_cast(i); - break; - } + EShLanguage stage = ent1.stage; + EShLanguage preStage, currentStage, nextStage; + + preStage = EShLangCount; + for (int i = stage - 1; i >= 0; i--) { + if (inVarMaps[i] != nullptr) { + preStage = static_cast(i); + break; + } + } + currentStage = stage; + nextStage = EShLangCount; + for (int i = stage + 1; i < EShLangCount; i++) { + if (inVarMaps[i] != nullptr) { + nextStage = static_cast(i); + break; } } @@ -459,6 +463,9 @@ struct TSymbolValidater type.appendMangledName(mangleName1); } + + // basic checking that symbols match + // more extensive checking in the link stage if (base->getQualifier().storage == EvqVaryingIn) { // validate stage in; if (preStage == EShLangCount) @@ -484,8 +491,7 @@ struct TSymbolValidater if (ent2->second.symbol->getType().getQualifier().isArrayedIo(preStage)) { TType subType(ent2->second.symbol->getType(), 0); subType.appendMangledName(mangleName2); - } - else { + } else { ent2->second.symbol->getType().appendMangledName(mangleName2); } @@ -536,8 +542,7 @@ struct TSymbolValidater if (ent2->second.symbol->getType().getQualifier().isArrayedIo(nextStage)) { TType subType(ent2->second.symbol->getType(), 0); subType.appendMangledName(mangleName2); - } - else { + } else { ent2->second.symbol->getType().appendMangledName(mangleName2); } if (mangleName1 == mangleName2) @@ -550,7 +555,7 @@ struct TSymbolValidater } return; } - } else if (base->getQualifier().isUniformOrBuffer() && ! base->getQualifier().isPushConstant()) { + } else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant()) { // validate uniform type; for (int i = 0; i < EShLangCount; i++) { if (i != currentStage && outVarMaps[i] != nullptr) { @@ -558,6 +563,7 @@ struct TSymbolValidater if (ent2 != uniformVarMap[i]->end()) { ent2->second.symbol->getType().appendMangledName(mangleName2); if (mangleName1 != mangleName2) { + ent2->second.symbol->getType().sameElementType(type); TString err = "Invalid Uniform variable type : " + entKey.first; infoSink.info.message(EPrefixInternalError, err.c_str()); hadError = true; @@ -608,8 +614,7 @@ struct TSymbolValidater } TVarLiveMap *inVarMaps[EShLangCount], *outVarMaps[EShLangCount], *uniformVarMap[EShLangCount]; - // Use for mark pre stage, to get more interface symbol information. - EShLanguage preStage, currentStage, nextStage; + // Use for mark current shader stage for resolver TIoMapResolver& resolver; TInfoSink& infoSink; @@ -749,14 +754,18 @@ TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate , nextOutputLocation(0) { memset(stageMask, false, sizeof(bool) * (EShLangCount + 1)); + memset(stageIntermediates, 0, sizeof(TIntermediate*) * (EShLangCount)); + stageIntermediates[intermediate.getStage()] = &intermediate; } -int TDefaultIoResolverBase::getBaseBinding(TResourceType res, unsigned int set) const { - return selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set)); +int TDefaultIoResolverBase::getBaseBinding(EShLanguage stage, TResourceType res, unsigned int set) const { + return stageIntermediates[stage] ? selectBaseBinding(stageIntermediates[stage]->getShiftBinding(res), stageIntermediates[stage]->getShiftBindingForSet(res, set)) + : selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set)); } -const std::vector& TDefaultIoResolverBase::getResourceSetBinding() const { - return intermediate.getResourceSetBinding(); +const std::vector& TDefaultIoResolverBase::getResourceSetBinding(EShLanguage stage) const { + return stageIntermediates[stage] ? stageIntermediates[stage]->getResourceSetBinding() + : intermediate.getResourceSetBinding(); } bool TDefaultIoResolverBase::doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); } @@ -797,14 +806,14 @@ int TDefaultIoResolverBase::getFreeSlot(int set, int base, int size) { return reserveSlot(set, base, size); } -int TDefaultIoResolverBase::resolveSet(EShLanguage /*stage*/, TVarEntryInfo& ent) { +int TDefaultIoResolverBase::resolveSet(EShLanguage stage, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); if (type.getQualifier().hasSet()) { return ent.newSet = type.getQualifier().layoutSet; } // If a command line or API option requested a single descriptor set, use that (if not overrided by spaceN) - if (getResourceSetBinding().size() == 1) { - return ent.newSet = atoi(getResourceSetBinding()[0].c_str()); + if (getResourceSetBinding(stage).size() == 1) { + return ent.newSet = atoi(getResourceSetBinding(stage)[0].c_str()); } return ent.newSet = 0; } @@ -925,7 +934,7 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf preStage = currentStage; currentStage = stage; } - // kick out of not doing this + // kick out if not doing this if (! doAutoLocationMapping()) { return ent.newLocation = -1; } @@ -1073,7 +1082,7 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn return ent.newLocation = location; } -int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) { +int TDefaultGlslIoResolver::resolveBinding(EShLanguage stage, TVarEntryInfo& ent) { const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); // On OpenGL arrays of opaque types take a separate binding for each element @@ -1086,30 +1095,32 @@ int TDefaultGlslIoResolver::resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& // There is no 'set' qualifier in OpenGL shading language, each resource has its own // binding name space, so remap the 'set' to resource type which make each resource // binding is valid from 0 to MAX_XXRESOURCE_BINDINGS - int set = resource; + int set = intermediate.getSpv().openGl != 0 ? resource : ent.newSet; + int resourceKey = set; if (resource < EResCount) { if (type.getQualifier().hasBinding()) { - ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings); - return ent.newBinding; - } else if (ent.live && doAutoBindingMapping()) { + int newBinding = reserveSlot(resourceKey, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding, numBindings); + return ent.newBinding = newBinding; + + } else { // The resource in current stage is not declared with binding, but it is possible declared // with explicit binding in other stages, find the resourceSlotMap firstly to check whether // the resource has binding, don't need to allocate if it already has a binding bool hasBinding = false; - if (! resourceSlotMap[resource].empty()) { - TVarSlotMap::iterator iter = resourceSlotMap[resource].find(name); - if (iter != resourceSlotMap[resource].end()) { + ent.newBinding = -1; // leave as -1 if it isn't set below + + if (! resourceSlotMap[resourceKey].empty()) { + TVarSlotMap::iterator iter = resourceSlotMap[resourceKey].find(name); + if (iter != resourceSlotMap[resourceKey].end()) { hasBinding = true; ent.newBinding = iter->second; } } - if (! hasBinding) { - TVarSlotMap varSlotMap; + if (!hasBinding && (ent.live && doAutoBindingMapping())) { // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - int binding = getFreeSlot(resource, getBaseBinding(resource, set), numBindings); - varSlotMap[name] = binding; - resourceSlotMap[resource] = varSlotMap; + int binding = getFreeSlot(resourceKey, getBaseBinding(stage, resource, set), numBindings); + resourceSlotMap[resourceKey][name] = binding; ent.newBinding = binding; } return ent.newBinding; @@ -1211,16 +1222,20 @@ void TDefaultGlslIoResolver::reserverStorageSlot(TVarEntryInfo& ent, TInfoSink& void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) { const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); - int resource = getResourceType(type); + TResourceType resource = getResourceType(type); + int set = intermediate.getSpv().openGl != 0 ? resource : resolveSet(ent.stage, ent); + int resourceKey = set; + if (type.getQualifier().hasBinding()) { - TVarSlotMap& varSlotMap = resourceSlotMap[resource]; + TVarSlotMap& varSlotMap = resourceSlotMap[resourceKey]; TVarSlotMap::iterator iter = varSlotMap.find(name); - int binding = type.getQualifier().layoutBinding; + int binding = type.getQualifier().layoutBinding + getBaseBinding(ent.stage, resource, set); + if (iter == varSlotMap.end()) { // Reserve the slots for the ubo, ssbo and opaques who has explicit binding - int numBindings = type.isSizedArray() ? type.getCumulativeArraySize() : 1; + int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; varSlotMap[name] = binding; - reserveSlot(resource, binding, numBindings); + reserveSlot(resourceKey, binding, numBindings); } else { // Allocate binding by name for OpenGL driver, so the resource in different // stages should be declared with the same binding @@ -1269,7 +1284,7 @@ struct TDefaultIoResolver : public TDefaultIoResolverBase { return EResCount; } - int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override { + int resolveBinding(EShLanguage stage, TVarEntryInfo& ent) override { const TType& type = ent.symbol->getType(); const int set = getLayoutSet(type); // On OpenGL arrays of opaque types take a seperate binding for each element @@ -1278,11 +1293,11 @@ struct TDefaultIoResolver : public TDefaultIoResolverBase { if (resource < EResCount) { if (type.getQualifier().hasBinding()) { return ent.newBinding = reserveSlot( - set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding, numBindings); + set, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding, numBindings); } else if (ent.live && doAutoBindingMapping()) { // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set), numBindings); + return ent.newBinding = getFreeSlot(set, getBaseBinding(stage, resource, set), numBindings); } } return ent.newBinding = -1; @@ -1354,17 +1369,17 @@ struct TDefaultHlslIoResolver : public TDefaultIoResolverBase { return EResCount; } - int resolveBinding(EShLanguage /*stage*/, TVarEntryInfo& ent) override { + int resolveBinding(EShLanguage stage, TVarEntryInfo& ent) override { const TType& type = ent.symbol->getType(); const int set = getLayoutSet(type); TResourceType resource = getResourceType(type); if (resource < EResCount) { if (type.getQualifier().hasBinding()) { - return ent.newBinding = reserveSlot(set, getBaseBinding(resource, set) + type.getQualifier().layoutBinding); + return ent.newBinding = reserveSlot(set, getBaseBinding(stage, resource, set) + type.getQualifier().layoutBinding); } else if (ent.live && doAutoBindingMapping()) { // find free slot, the caller did make sure it passes all vars with binding // first and now all are passed that do not have a binding and needs one - return ent.newBinding = getFreeSlot(set, getBaseBinding(resource, set)); + return ent.newBinding = getFreeSlot(set, getBaseBinding(stage, resource, set)); } } return ent.newBinding = -1; @@ -1403,10 +1418,10 @@ bool TIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TInfoSi else resolver = &defaultResolver; } - resolver->addStage(stage); #else resolver = &defaultResolver; #endif + resolver->addStage(stage, intermediate); TVarLiveMap inVarMap, outVarMap, uniformVarMap; TVarLiveVector inVector, outVector, uniformVector; @@ -1502,10 +1517,21 @@ bool TGlslIoMapper::addStage(EShLanguage stage, TIntermediate& intermediate, TIn } // if no resolver is provided, use the default resolver with the given shifts and auto map settings TDefaultGlslIoResolver defaultResolver(intermediate); +#ifdef ENABLE_HLSL + TDefaultHlslIoResolver defaultHlslResolver(intermediate); + if (resolver == nullptr) { + // TODO: use a passed in IO mapper for this + if (intermediate.usingHlslIoMapping()) + resolver = &defaultHlslResolver; + else + resolver = &defaultResolver; + } +#else if (resolver == nullptr) { resolver = &defaultResolver; } - resolver->addStage(stage); +#endif + resolver->addStage(stage, intermediate); inVarMaps[stage] = new TVarLiveMap(); outVarMaps[stage] = new TVarLiveMap(); uniformVarMap[stage] = new TVarLiveMap(); TVarGatherTraverser iter_binding_all(intermediate, true, *inVarMaps[stage], *outVarMaps[stage], *uniformVarMap[stage]); @@ -1547,15 +1573,51 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { TResolverInOutAdaptor inOutResolve(EShLangCount, *resolver, infoSink, hadError); TSymbolValidater symbolValidater(*resolver, infoSink, inVarMaps, outVarMaps, uniformVarMap, hadError, profile, version); + + TVarLiveVector inVectors[EShLangCount]; + TVarLiveVector outVectors[EShLangCount]; TVarLiveVector uniformVector; + resolver->beginResolve(EShLangCount); for (int stage = EShLangVertex; stage < EShLangCount; stage++) { if (inVarMaps[stage] != nullptr) { inOutResolve.setStage(EShLanguage(stage)); - for (auto& var : *(inVarMaps[stage])) { symbolValidater(var); } - for (auto& var : *(inVarMaps[stage])) { inOutResolve(var); } - for (auto& var : *(outVarMaps[stage])) { symbolValidater(var); } - for (auto& var : *(outVarMaps[stage])) { inOutResolve(var); } + + // copy vars into a sorted list + std::for_each(inVarMaps[stage]->begin(), inVarMaps[stage]->end(), + [&inVectors, stage](TVarLivePair p) { inVectors[stage].push_back(p); }); + std::sort(inVectors[stage].begin(), inVectors[stage].end(), + [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { + return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); + }); + + std::for_each(outVarMaps[stage]->begin(), outVarMaps[stage]->end(), + [&outVectors, stage](TVarLivePair p) { outVectors[stage].push_back(p); }); + std::sort(outVectors[stage].begin(), outVectors[stage].end(), + [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { + return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); + }); + + for (auto& var : inVectors[stage]) { symbolValidater(var); } + for (auto& var : inVectors[stage]) { inOutResolve(var); } + for (auto& var : outVectors[stage]) { symbolValidater(var); } + for (auto& var : outVectors[stage]) { inOutResolve(var); } + + // copy results back into maps + std::for_each(inVectors[stage].begin(), inVectors[stage].end(), + [this, stage](TVarLivePair p) { + auto at = inVarMaps[stage]->find(p.first); + if (at != inVarMaps[stage]->end()) + at->second = p.second; + }); + + std::for_each(outVectors[stage].begin(), outVectors[stage].end(), + [this, stage](TVarLivePair p) { + auto at = outVarMaps[stage]->find(p.first); + if (at != outVarMaps[stage]->end()) + at->second = p.second; + }); + } if (uniformVarMap[stage] != nullptr) { uniformResolve.setStage(EShLanguage(stage)); @@ -1563,7 +1625,7 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { } } std::sort(uniformVector.begin(), uniformVector.end(), [](const TVarLivePair& p1, const TVarLivePair& p2) -> bool { - return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); + return TVarEntryInfo::TOrderByPriorityAndLive()(p1.second, p2.second); }); for (auto& var : uniformVector) { symbolValidater(var); } for (auto& var : uniformVector) { uniformResolve(var); } diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 1dce8ff54b..07357c2ef4 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -87,6 +87,35 @@ struct TVarEntryInfo { return lPoints > rPoints; } }; + + struct TOrderByPriorityAndLive { + // ordering: + // 1) do live variables first + // 2) has both binding and set + // 3) has binding but no set + // 4) has no binding but set + // 5) has no binding and no set + inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { + + const TQualifier& lq = l.symbol->getQualifier(); + const TQualifier& rq = r.symbol->getQualifier(); + + // simple rules: + // has binding gives 2 points + // has set gives 1 point + // who has the most points is more important. + int lPoints = (lq.hasBinding() ? 2 : 0) + (lq.hasSet() ? 1 : 0); + int rPoints = (rq.hasBinding() ? 2 : 0) + (rq.hasSet() ? 1 : 0); + + if (l.live != r.live) + return l.live > r.live; + + if (lPoints != rPoints) + return lPoints > rPoints; + + return l.id < r.id; + } + }; }; // Base class for shared TIoMapResolver services, used by several derivations. @@ -107,8 +136,8 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { void endCollect(EShLanguage) override {} void reserverResourceSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {} void reserverStorageSlot(TVarEntryInfo& /*ent*/, TInfoSink& /*infoSink*/) override {} - int getBaseBinding(TResourceType res, unsigned int set) const; - const std::vector& getResourceSetBinding() const; + int getBaseBinding(EShLanguage stage, TResourceType res, unsigned int set) const; + const std::vector& getResourceSetBinding(EShLanguage stage) const; virtual TResourceType getResourceType(const glslang::TType& type) = 0; bool doAutoBindingMapping() const; bool doAutoLocationMapping() const; @@ -122,9 +151,11 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { int resolveInOutLocation(EShLanguage stage, TVarEntryInfo& ent) override; int resolveInOutComponent(EShLanguage /*stage*/, TVarEntryInfo& ent) override; int resolveInOutIndex(EShLanguage /*stage*/, TVarEntryInfo& ent) override; - void addStage(EShLanguage stage) override { - if (stage < EShLangCount) + void addStage(EShLanguage stage, TIntermediate& stageIntermediate) override { + if (stage < EShLangCount) { stageMask[stage] = true; + stageIntermediates[stage] = &stageIntermediate; + } } uint32_t computeTypeLocationSize(const TType& type, EShLanguage stage); @@ -139,6 +170,8 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { int nextInputLocation; int nextOutputLocation; bool stageMask[EShLangCount + 1]; + const TIntermediate* stageIntermediates[EShLangCount]; + // Return descriptor set specific base if there is one, and the generic base otherwise. int selectBaseBinding(int base, int descriptorSetBase) const { return descriptorSetBase != -1 ? descriptorSetBase : base; diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 3f3a3127c3..789dc3c308 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -90,6 +90,55 @@ void TIntermediate::merge(TInfoSink& infoSink, TIntermediate& unit) #endif } +// +// check that link objects between stages +// +void TIntermediate::mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit) { + if (unit.treeRoot == nullptr || treeRoot == nullptr) + return; + + // Get the linker-object lists + TIntermSequence& linkerObjects = findLinkerObjects()->getSequence(); + TIntermSequence unitLinkerObjects = unit.findLinkerObjects()->getSequence(); + + // filter unitLinkerObjects to only contain uniforms + auto end = std::remove_if(unitLinkerObjects.begin(), unitLinkerObjects.end(), + [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqUniform && + node->getAsSymbolNode()->getQualifier().storage != EvqBuffer; }); + unitLinkerObjects.resize(end - unitLinkerObjects.begin()); + + // merge uniforms and do error checking + mergeGlobalUniformBlocks(infoSink, unit); + mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); +} + +// +// do error checking on the shader boundary in / out vars +// +void TIntermediate::checkStageIO(TInfoSink& infoSink, TIntermediate& unit) { + if (unit.treeRoot == nullptr || treeRoot == nullptr) + return; + + // Get copies of the linker-object lists + TIntermSequence linkerObjects = findLinkerObjects()->getSequence(); + TIntermSequence unitLinkerObjects = unit.findLinkerObjects()->getSequence(); + + // filter linkerObjects to only contain out variables + auto end = std::remove_if(linkerObjects.begin(), linkerObjects.end(), + [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqVaryingOut; }); + linkerObjects.resize(end - linkerObjects.begin()); + + // filter unitLinkerObjects to only contain in variables + auto unitEnd = std::remove_if(unitLinkerObjects.begin(), unitLinkerObjects.end(), + [](TIntermNode* node) {return node->getAsSymbolNode()->getQualifier().storage != EvqVaryingIn; }); + unitLinkerObjects.resize(unitEnd - unitLinkerObjects.begin()); + + // do matching and error checking + mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); + + // TODO: final check; make sure that any statically used `in` have matching `out` written to +} + void TIntermediate::mergeCallGraphs(TInfoSink& infoSink, TIntermediate& unit) { if (unit.getNumEntryPoints() > 0) { @@ -137,6 +186,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_MAX(spvVersion.vulkanGlsl); MERGE_MAX(spvVersion.vulkan); MERGE_MAX(spvVersion.openGl); + MERGE_TRUE(spvVersion.vulkanRelaxed); numErrors += unit.getNumErrors(); // Only one push_constant is allowed, mergeLinkerObjects() will ensure the push_constant @@ -312,7 +362,8 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit) remapIds(idMaps, idShift + 1, unit); mergeBodies(infoSink, globals, unitGlobals); - mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects); + mergeGlobalUniformBlocks(infoSink, unit); + mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end()); } @@ -456,11 +507,193 @@ void TIntermediate::mergeBodies(TInfoSink& infoSink, TIntermSequence& globals, c globals.insert(globals.end() - 1, unitGlobals.begin(), unitGlobals.end() - 1); } +static inline bool isSameInterface(TIntermSymbol* symbol, EShLanguage stage, TIntermSymbol* unitSymbol, EShLanguage unitStage) { + return // 1) same stage and same shader interface + (stage == unitStage && symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) || + // 2) accross stages and both are uniform or buffer + (symbol->getQualifier().storage == EvqUniform && unitSymbol->getQualifier().storage == EvqUniform) || + (symbol->getQualifier().storage == EvqBuffer && unitSymbol->getQualifier().storage == EvqBuffer) || + // 3) in/out matched across stage boundary + (stage < unitStage && symbol->getQualifier().storage == EvqVaryingOut && unitSymbol->getQualifier().storage == EvqVaryingIn) || + (unitStage < stage && symbol->getQualifier().storage == EvqVaryingIn && unitSymbol->getQualifier().storage == EvqVaryingOut); +} + +// +// Global Unfiform block stores any default uniforms (i.e. uniforms without a block) +// If two linked stages declare the same member, they are meant to be the same uniform +// and need to be in the same block +// merge the members of different stages to allow them to be linked properly +// as a single block +// +void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit) +{ + TIntermSequence& linkerObjects = findLinkerObjects()->getSequence(); + TIntermSequence& unitLinkerObjects = unit.findLinkerObjects()->getSequence(); + + // build lists of default blocks from the intermediates + TIntermSequence defaultBlocks; + TIntermSequence unitDefaultBlocks; + + auto filter = [](TIntermSequence& list, TIntermNode* node) { + if (node->getAsSymbolNode()->getQualifier().defaultBlock) { + list.push_back(node); + } + }; + + std::for_each(linkerObjects.begin(), linkerObjects.end(), + [&defaultBlocks, &filter](TIntermNode* node) { + filter(defaultBlocks, node); + }); + std::for_each(unitLinkerObjects.begin(), unitLinkerObjects.end(), + [&unitDefaultBlocks, &filter](TIntermNode* node) { + filter(unitDefaultBlocks, node); + }); + + auto itUnitBlock = unitDefaultBlocks.begin(); + for (; itUnitBlock != unitDefaultBlocks.end(); itUnitBlock++) { + + bool add = true; + auto itBlock = defaultBlocks.begin(); + + for (; itBlock != defaultBlocks.end(); itBlock++) { + TIntermSymbol* block = (*itBlock)->getAsSymbolNode(); + TIntermSymbol* unitBlock = (*itUnitBlock)->getAsSymbolNode(); + + assert(block && unitBlock); + + // if the two default blocks match, then merge their definitions + if (block->getType().getTypeName() == unitBlock->getType().getTypeName() && + block->getQualifier().storage == unitBlock->getQualifier().storage) { + add = false; + mergeBlockDefinitions(infoSink, block, unitBlock, &unit); + } + } + if (add) { + // push back on original list; won't change the size of the list we're iterating over + linkerObjects.push_back(*itUnitBlock); + } + } +} + +void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unit) { + if (block->getType() == unitBlock->getType()) { + return; + } + + if (block->getType().getTypeName() != unitBlock->getType().getTypeName() || + block->getType().getBasicType() != unitBlock->getType().getBasicType() || + block->getQualifier().storage != unitBlock->getQualifier().storage || + block->getQualifier().layoutSet != unitBlock->getQualifier().layoutSet) { + // different block names likely means different blocks + return; + } + + // merge the struct + // order of declarations doesn't matter and they matched based on member name + TTypeList* memberList = block->getType().getWritableStruct(); + TTypeList* unitMemberList = unitBlock->getType().getWritableStruct(); + + // keep track of which members have changed position + // so we don't have to search the array again + std::map memberIndexUpdates; + + size_t memberListStartSize = memberList->size(); + for (unsigned int i = 0; i < unitMemberList->size(); ++i) { + bool merge = true; + for (unsigned int j = 0; j < memberListStartSize; ++j) { + if ((*memberList)[j].type->getFieldName() == (*unitMemberList)[i].type->getFieldName()) { + merge = false; + const TType* memberType = (*memberList)[j].type; + const TType* unitMemberType = (*unitMemberList)[i].type; + + // compare types + // don't need as many checks as when merging symbols, since + // initializers and most qualifiers are stripped when the member is moved into the block + if ((*memberType) != (*unitMemberType)) { + error(infoSink, "Types must match:"); + infoSink.info << " " << memberType->getFieldName() << ": "; + infoSink.info << "\"" << memberType->getCompleteString() << "\" versus "; + infoSink.info << "\"" << unitMemberType->getCompleteString() << "\"\n"; + } + + memberIndexUpdates[i] = j; + } + } + if (merge) { + memberList->push_back((*unitMemberList)[i]); + memberIndexUpdates[i] = (unsigned int)memberList->size() - 1; + } + } + + TType unitType; + unitType.shallowCopy(unitBlock->getType()); + + // update symbol node in unit tree, + // and other nodes that may reference it + class TMergeBlockTraverser : public TIntermTraverser { + public: + TMergeBlockTraverser(const glslang::TType &type, const glslang::TType& unitType, + glslang::TIntermediate& unit, + const std::map& memberIdxUpdates) : + newType(type), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates) + { } + virtual ~TMergeBlockTraverser() { } + + const glslang::TType& newType; // type with modifications + const glslang::TType& unitType; // copy of original type + glslang::TIntermediate& unit; // intermediate that is being updated + const std::map& memberIndexUpdates; + + virtual void visitSymbol(TIntermSymbol* symbol) + { + glslang::TType& symType = symbol->getWritableType(); + + if (symType == unitType) { + // each symbol node has a local copy of the unitType + // if merging involves changing properties that aren't shared objects + // they should be updated in all instances + + // e.g. the struct list is a ptr to an object, so it can be updated + // once, outside the traverser + //*symType.getWritableStruct() = *newType.getStruct(); + } + + } + + virtual bool visitBinary(TVisit, glslang::TIntermBinary* node) + { + if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == unitType) { + // this is a dereference to a member of the block since the + // member list changed, need to update this to point to the + // right index + assert(node->getRight()->getAsConstantUnion()); + + glslang::TIntermConstantUnion* constNode = node->getRight()->getAsConstantUnion(); + unsigned int memberIdx = constNode->getConstArray()[0].getUConst(); + unsigned int newIdx = memberIndexUpdates.at(memberIdx); + TIntermTyped* newConstNode = unit.addConstantUnion(newIdx, node->getRight()->getLoc()); + + node->setRight(newConstNode); + delete constNode; + + return true; + } + return true; + } + } finalLinkTraverser(block->getType(), unitType, *unit, memberIndexUpdates); + + // update the tree to use the new type + unit->getTreeRoot()->traverse(&finalLinkTraverser); + + // update the member list + (*unitMemberList) = (*memberList); +} + // // Merge the linker objects from unitLinkerObjects into linkerObjects. // Duplication is expected and filtered out, but contradictions are an error. // -void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects) +void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects, EShLanguage unitStage) { // Error check and merge the linker objects (duplicates should not be created) std::size_t initialNumLinkerObjects = linkerObjects.size(); @@ -475,7 +708,7 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin // If they are both blocks in the same shader interface, // match by the block-name, not the identifier name. if (symbol->getType().getBasicType() == EbtBlock && unitSymbol->getType().getBasicType() == EbtBlock) { - if (symbol->getType().getShaderInterface() == unitSymbol->getType().getShaderInterface()) { + if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) { isSameSymbol = symbol->getType().getTypeName() == unitSymbol->getType().getTypeName(); } } @@ -495,18 +728,54 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin if (! symbol->getQualifier().hasBinding() && unitSymbol->getQualifier().hasBinding()) symbol->getQualifier().layoutBinding = unitSymbol->getQualifier().layoutBinding; + // Similarly for location + if (!symbol->getQualifier().hasLocation() && unitSymbol->getQualifier().hasLocation()) { + symbol->getQualifier().layoutLocation = unitSymbol->getQualifier().layoutLocation; + } + // Update implicit array sizes mergeImplicitArraySizes(symbol->getWritableType(), unitSymbol->getType()); // Check for consistent types/qualification/initializers etc. - mergeErrorCheck(infoSink, *symbol, *unitSymbol, false); + mergeErrorCheck(infoSink, *symbol, *unitSymbol, unitStage); } // If different symbols, verify they arn't push_constant since there can only be one per stage - else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant()) + else if (symbol->getQualifier().isPushConstant() && unitSymbol->getQualifier().isPushConstant() && getStage() == unitStage) error(infoSink, "Only one push_constant block is allowed per stage"); } - if (merge) + if (merge) { linkerObjects.push_back(unitLinkerObjects[unitLinkObj]); + + // for anonymous blocks, check that their members don't conflict with other names + if (unitLinkerObjects[unitLinkObj]->getAsSymbolNode()->getBasicType() == EbtBlock && + IsAnonymous(unitLinkerObjects[unitLinkObj]->getAsSymbolNode()->getName())) { + for (std::size_t linkObj = 0; linkObj < initialNumLinkerObjects; ++linkObj) { + TIntermSymbol* symbol = linkerObjects[linkObj]->getAsSymbolNode(); + TIntermSymbol* unitSymbol = unitLinkerObjects[unitLinkObj]->getAsSymbolNode(); + assert(symbol && unitSymbol); + + auto checkName = [this, unitSymbol, &infoSink](const TString& name) { + for (unsigned int i = 0; i < unitSymbol->getType().getStruct()->size(); ++i) { + if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName()) { + error(infoSink, "Anonymous member name used for global variable or other anonymous member: "); + infoSink.info << (*unitSymbol->getType().getStruct())[i].type->getCompleteString() << "\n"; + } + } + }; + + if (isSameInterface(symbol, getStage(), unitSymbol, unitStage)) { + checkName(symbol->getName()); + + // check members of other anonymous blocks + if (symbol->getBasicType() == EbtBlock && IsAnonymous(symbol->getName())) { + for (unsigned int i = 0; i < symbol->getType().getStruct()->size(); ++i) { + checkName((*symbol->getType().getStruct())[i].type->getFieldName()); + } + } + } + } + } + } } } @@ -538,26 +807,74 @@ void TIntermediate::mergeImplicitArraySizes(TType& type, const TType& unitType) // // This function only does one of intra- or cross-stage matching per call. // -void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, bool crossStage) +void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& symbol, const TIntermSymbol& unitSymbol, EShLanguage unitStage) { #if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) + bool crossStage = getStage() != unitStage; bool writeTypeComparison = false; // Types have to match - if (symbol.getType() != unitSymbol.getType()) { + { // but, we make an exception if one is an implicit array and the other is sized - if (! (symbol.getType().isArray() && unitSymbol.getType().isArray() && - symbol.getType().sameElementType(unitSymbol.getType()) && - (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray()))) { - error(infoSink, "Types must match:"); + // or if the array sizes differ because of the extra array dimension on some in/out boundaries + bool arraysMatch = false; + if (isIoResizeArray(symbol.getType(), getStage()) || isIoResizeArray(unitSymbol.getType(), unitStage)) { + // if the arrays have an extra dimension because of the stage. + // compare dimensions while ignoring the outer dimension + unsigned int firstDim = isIoResizeArray(symbol.getType(), getStage()) ? 1 : 0; + unsigned int numDim = symbol.getArraySizes() + ? symbol.getArraySizes()->getNumDims() : 0; + unsigned int unitFirstDim = isIoResizeArray(unitSymbol.getType(), unitStage) ? 1 : 0; + unsigned int unitNumDim = unitSymbol.getArraySizes() + ? unitSymbol.getArraySizes()->getNumDims() : 0; + arraysMatch = (numDim - firstDim) == (unitNumDim - unitFirstDim); + // check that array sizes match as well + for (unsigned int i = 0; i < (numDim - firstDim) && arraysMatch; i++) { + if (symbol.getArraySizes()->getDimSize(firstDim + i) != + unitSymbol.getArraySizes()->getDimSize(unitFirstDim + i)) { + arraysMatch = false; + break; + } + } + } + else { + arraysMatch = symbol.getType().sameArrayness(unitSymbol.getType()) || + (symbol.getType().isArray() && unitSymbol.getType().isArray() && + (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray())); + } + + if (!symbol.getType().sameElementType(unitSymbol.getType()) || + !symbol.getType().sameTypeParameters(unitSymbol.getType()) || + !arraysMatch ) { writeTypeComparison = true; + error(infoSink, "Types must match:"); + } + } + + // Interface block member-wise layout qualifiers have to match + if (symbol.getType().getBasicType() == EbtBlock && unitSymbol.getType().getBasicType() == EbtBlock && + symbol.getType().getStruct() && unitSymbol.getType().getStruct() && + symbol.getType().sameStructType(unitSymbol.getType())) { + for (unsigned int i = 0; i < symbol.getType().getStruct()->size(); ++i) { + const TQualifier& qualifier = (*symbol.getType().getStruct())[i].type->getQualifier(); + const TQualifier& unitQualifier = (*unitSymbol.getType().getStruct())[i].type->getQualifier(); + if (qualifier.layoutMatrix != unitQualifier.layoutMatrix || + qualifier.layoutOffset != unitQualifier.layoutOffset || + qualifier.layoutAlign != unitQualifier.layoutAlign || + qualifier.layoutLocation != unitQualifier.layoutLocation || + qualifier.layoutComponent != unitQualifier.layoutComponent) { + error(infoSink, "Interface block member layout qualifiers must match:"); + writeTypeComparison = true; + } } } // Qualifiers have to (almost) match // Storage... - if (symbol.getQualifier().storage != unitSymbol.getQualifier().storage) { + if (symbol.getQualifier().storage != unitSymbol.getQualifier().storage && + !((crossStage && symbol.getQualifier().storage == EvqVaryingIn && unitSymbol.getQualifier().storage == EvqVaryingOut) || + (crossStage && symbol.getQualifier().storage == EvqVaryingOut && unitSymbol.getQualifier().storage == EvqVaryingIn))) { error(infoSink, "Storage qualifiers must match:"); writeTypeComparison = true; } @@ -597,12 +914,16 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy } // Auxiliary and interpolation... - if (symbol.getQualifier().centroid != unitSymbol.getQualifier().centroid || + // "interpolation qualification (e.g., flat) and auxiliary qualification (e.g. centroid) may differ. + // These mismatches are allowed between any pair of stages ... + // those provided in the fragment shader supersede those provided in previous stages." + if (!crossStage && + (symbol.getQualifier().centroid != unitSymbol.getQualifier().centroid || symbol.getQualifier().smooth != unitSymbol.getQualifier().smooth || symbol.getQualifier().flat != unitSymbol.getQualifier().flat || symbol.getQualifier().isSample()!= unitSymbol.getQualifier().isSample() || symbol.getQualifier().isPatch() != unitSymbol.getQualifier().isPatch() || - symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective()) { + symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective())) { error(infoSink, "Interpolation and auxiliary storage qualifiers must match:"); writeTypeComparison = true; } @@ -1830,4 +2151,17 @@ int TIntermediate::computeBufferReferenceTypeSize(const TType& type) return size; } +#ifndef GLSLANG_WEB +bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) { + return type.isArray() && + ((language == EShLangGeometry && type.getQualifier().storage == EvqVaryingIn) || + (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && + ! type.getQualifier().patch) || + (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && + type.getQualifier().pervertexNV) || + (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && + !type.getQualifier().perTaskNV)); +} +#endif // not GLSLANG_WEB + } // end namespace glslang diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 9fe684a333..9bfa35cc88 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -293,7 +293,12 @@ class TIntermediate { useStorageBuffer(false), nanMinMaxClamp(false), depthReplacing(false), - uniqueId(0) + uniqueId(0), + globalUniformBlockName(""), + atomicCounterBlockName(""), + globalUniformBlockSet(TQualifier::layoutSetEnd), + globalUniformBlockBinding(TQualifier::layoutBindingEnd), + atomicCounterBlockSet(TQualifier::layoutSetEnd) #ifndef GLSLANG_WEB , implicitThisName("@this"), implicitCounterName("@count"), @@ -537,6 +542,19 @@ class TIntermediate { void addSymbolLinkageNode(TIntermAggregate*& linkage, const TSymbol&); TIntermAggregate* findLinkerObjects() const; + void setGlobalUniformBlockName(const char* name) { globalUniformBlockName = std::string(name); } + const char* getGlobalUniformBlockName() const { return globalUniformBlockName.c_str(); } + void setGlobalUniformSet(unsigned int set) { globalUniformBlockSet = set; } + unsigned int getGlobalUniformSet() const { return globalUniformBlockSet; } + void setGlobalUniformBinding(unsigned int binding) { globalUniformBlockBinding = binding; } + unsigned int getGlobalUniformBinding() const { return globalUniformBlockBinding; } + + void setAtomicCounterBlockName(const char* name) { atomicCounterBlockName = std::string(name); } + const char* getAtomicCounterBlockName() const { return atomicCounterBlockName.c_str(); } + void setAtomicCounterBlockSet(unsigned int set) { atomicCounterBlockSet = set; } + unsigned int getAtomicCounterBlockSet() const { return atomicCounterBlockSet; } + + void setUseStorageBuffer() { useStorageBuffer = true; } bool usingStorageBuffer() const { return useStorageBuffer; } void setDepthReplacing() { depthReplacing = true; } @@ -848,6 +866,20 @@ class TIntermediate { bool getBinaryDoubleOutput() { return binaryDoubleOutput; } #endif // GLSLANG_WEB + void addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) + { + std::string name(nameStr); + blockBackingOverrides[name] = backing; + } + TBlockStorageClass getBlockStorageOverride(const char* nameStr) const + { + std::string name = nameStr; + auto pos = blockBackingOverrides.find(name); + if (pos == blockBackingOverrides.end()) + return EbsNone; + else + return pos->second; + } #ifdef ENABLE_HLSL void setHlslFunctionality1() { hlslFunctionality1 = true; } bool getHlslFunctionality1() const { return hlslFunctionality1; } @@ -883,6 +915,10 @@ class TIntermediate { void merge(TInfoSink&, TIntermediate&); void finalCheck(TInfoSink&, bool keepUncalled); + void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit); + void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit); + void checkStageIO(TInfoSink&, TIntermediate&); + bool buildConvertOp(TBasicType dst, TBasicType src, TOperator& convertOp) const; TIntermTyped* createConversion(TBasicType convertTo, TIntermTyped* node) const; @@ -906,6 +942,8 @@ class TIntermediate { static int getOffset(const TType& type, int index); static int getBlockSize(const TType& blockType); static int computeBufferReferenceTypeSize(const TType&); + static bool isIoResizeArray(const TType& type, EShLanguage language); + bool promote(TIntermOperator*); void setNanMinMaxClamp(bool setting) { nanMinMaxClamp = setting; } bool getNanMinMaxClamp() const { return nanMinMaxClamp; } @@ -963,9 +1001,10 @@ class TIntermediate { void seedIdMap(TIdMaps& idMaps, long long& IdShift); void remapIds(const TIdMaps& idMaps, long long idShift, TIntermediate&); void mergeBodies(TInfoSink&, TIntermSequence& globals, const TIntermSequence& unitGlobals); - void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects); + void mergeLinkerObjects(TInfoSink&, TIntermSequence& linkerObjects, const TIntermSequence& unitLinkerObjects, EShLanguage); + void mergeBlockDefinitions(TInfoSink&, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unitRoot); void mergeImplicitArraySizes(TType&, const TType&); - void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, bool crossStage); + void mergeErrorCheck(TInfoSink&, const TIntermSymbol&, const TIntermSymbol&, EShLanguage); void checkCallGraphCycles(TInfoSink&); void checkCallGraphBodies(TInfoSink&, bool keepUncalled); void inOutLocationCheck(TInfoSink&); @@ -1015,6 +1054,13 @@ class TIntermediate { bool localSizeNotDefault[3]; int localSizeSpecId[3]; unsigned long long uniqueId; + + std::string globalUniformBlockName; + std::string atomicCounterBlockName; + unsigned int globalUniformBlockSet; + unsigned int globalUniformBlockBinding; + unsigned int atomicCounterBlockSet; + #ifndef GLSLANG_WEB public: const char* const implicitThisName; @@ -1075,6 +1121,7 @@ class TIntermediate { int uniformLocationBase; TNumericFeatures numericFeatures; #endif + std::unordered_map blockBackingOverrides; std::unordered_set usedConstantId; // specialization constant ids used std::vector usedAtomics; // sets of bindings used by atomic counters diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index e147b0dc89..74b9f3eef7 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -187,6 +187,7 @@ struct TInputLanguage { EShLanguage stage; // redundant information with other input, this one overrides when not EShSourceNone EShClient dialect; int dialectVersion; // version of client's language definition, not the client (when not EShClientNone) + bool VulkanRulesRelaxed = false; }; struct TClient { @@ -427,6 +428,14 @@ enum TResourceType { EResCount }; +enum TBlockStorageClass +{ + EbsUniform = 0, + EbsStorageBuffer, + EbsPushConstant, + EbsNone, // not a uniform or buffer variable + EbsCount, +}; // Make one TShader per shader that you will link into a program. Then // - provide the shader through setStrings() or setStringsWithLengths() @@ -483,6 +492,14 @@ class TShader { GLSLANG_EXPORT void setNoStorageFormat(bool useUnknownFormat); GLSLANG_EXPORT void setNanMinMaxClamp(bool nanMinMaxClamp); GLSLANG_EXPORT void setTextureSamplerTransformMode(EShTextureSamplerTransformMode mode); + GLSLANG_EXPORT void addBlockStorageOverride(const char* nameStr, glslang::TBlockStorageClass backing); + + GLSLANG_EXPORT void setGlobalUniformBlockName(const char* name); + GLSLANG_EXPORT void setAtomicCounterBlockName(const char* name); + GLSLANG_EXPORT void setGlobalUniformSet(unsigned int set); + GLSLANG_EXPORT void setGlobalUniformBinding(unsigned int binding); + GLSLANG_EXPORT void setAtomicCounterBlockSet(unsigned int set); + GLSLANG_EXPORT void setAtomicCounterBlockBinding(unsigned int binding); // For setting up the environment (cleared to nothingness in the constructor). // These must be called so that parsing is done for the right source language and @@ -539,6 +556,9 @@ class TShader { bool getEnvTargetHlslFunctionality1() const { return false; } #endif + void setEnvInputVulkanRulesRelaxed() { environment.input.VulkanRulesRelaxed = true; } + bool getEnvInputVulkanRulesRelaxed() const { return environment.input.VulkanRulesRelaxed; } + // Interface to #include handlers. // // To support #include, a client of Glslang does the following: @@ -806,7 +826,7 @@ class TIoMapResolver // Called by TSlotCollector to resolve resource locations or bindings virtual void reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& infoSink) = 0; // Called by mapIO.addStage to set shader stage mask to mark a stage be added to this pipeline - virtual void addStage(EShLanguage stage) = 0; + virtual void addStage(EShLanguage stage, TIntermediate& stageIntermediate) = 0; }; #endif // !GLSLANG_WEB && !GLSLANG_ANGLE @@ -928,6 +948,7 @@ class TProgram { protected: GLSLANG_EXPORT bool linkStage(EShLanguage, EShMessages); + GLSLANG_EXPORT bool crossStageCheck(EShMessages); TPoolAllocator* pool; std::list stages[EShLangCount]; diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 0617ff850e..74c9809aac 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -53,7 +53,9 @@ if(BUILD_TESTING) ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Link.FromFile.Vk.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Pp.FromFile.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp) + ${CMAKE_CURRENT_SOURCE_DIR}/Spv.FromFile.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/VkRelaxed.FromFile.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/GlslMapIO.FromFile.cpp) if(ENABLE_SPVREMAPPER) set(TEST_SOURCES ${TEST_SOURCES} diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp new file mode 100644 index 0000000000..574e905f89 --- /dev/null +++ b/gtests/GlslMapIO.FromFile.cpp @@ -0,0 +1,306 @@ +// +// Copyright (C) 2016-2017 Google, Inc. +// Copyright (C) 2020 The Khronos Group Inc. +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +#include + +#include + +#include "TestFixture.h" + +#include "glslang/MachineIndependent/iomapper.h" +#include "glslang/MachineIndependent/reflection.h" + +#ifndef GLSLANG_WEB +namespace glslangtest { +namespace { + +struct IoMapData { + std::vector fileNames; + Semantics semantics; +}; + +using GlslMapIOTest = GlslangTest <::testing::TestWithParam>; + +template +std::string interfaceName(T symbol) { + return symbol.getType()->getBasicType() == glslang::EbtBlock ? std::string(symbol.getType()->getTypeName().c_str()) : symbol.name; +} + +bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { + bool success = true; + + // Verify IO Mapping by generating reflection for each stage individually + // and comparing layout qualifiers on the results + + + int reflectionOptions = EShReflectionDefault; + //reflectionOptions |= EShReflectionStrictArraySuffix; + //reflectionOptions |= EShReflectionBasicArraySuffix; + reflectionOptions |= EShReflectionIntermediateIO; + reflectionOptions |= EShReflectionSeparateBuffers; + reflectionOptions |= EShReflectionAllBlockVariables; + //reflectionOptions |= EShReflectionUnwrapIOBlocks; + + success &= program.buildReflection(reflectionOptions); + + // check that the reflection output from the individual stages all makes sense.. + std::vector stageReflections; + for (int s = 0; s < EShLangCount; ++s) { + if (program.getIntermediate((EShLanguage)s)) { + stageReflections.emplace_back((EShReflectionOptions)reflectionOptions, (EShLanguage)s, (EShLanguage)s); + success &= stageReflections.back().addStage((EShLanguage)s, *program.getIntermediate((EShLanguage)s)); + } + } + + // check that input/output locations match between stages + auto it = stageReflections.begin(); + auto nextIt = it + 1; + for (; nextIt != stageReflections.end(); it++, nextIt++) { + int numOut = it->getNumPipeOutputs(); + std::map pipeOut; + + for (int i = 0; i < numOut; i++) { + const glslang::TObjectReflection& out = it->getPipeOutput(i); + std::string name = interfaceName(out); + pipeOut[name] = &out; + } + + int numIn = nextIt->getNumPipeInputs(); + for (int i = 0; i < numIn; i++) { + auto in = nextIt->getPipeInput(i); + std::string name = interfaceName(in); + auto out = pipeOut.find(name); + + if (out != pipeOut.end()) { + auto inQualifier = in.getType()->getQualifier(); + auto outQualifier = out->second->getType()->getQualifier(); + success &= outQualifier.layoutLocation == inQualifier.layoutLocation; + } + else { + success &= false; + } + } + } + + // compare uniforms in each stage to the program + { + int totalUniforms = program.getNumUniformVariables(); + std::map programUniforms; + for (int i = 0; i < totalUniforms; i++) { + const glslang::TObjectReflection& uniform = program.getUniform(i); + std::string name = interfaceName(uniform); + programUniforms[name] = &uniform; + } + it = stageReflections.begin(); + for (; it != stageReflections.end(); it++) { + int numUniform = it->getNumUniforms(); + std::map uniforms; + + for (int i = 0; i < numUniform; i++) { + glslang::TObjectReflection uniform = it->getUniform(i); + std::string name = interfaceName(uniform); + auto programUniform = programUniforms.find(name); + + if (programUniform != programUniforms.end()) { + auto stageQualifier = uniform.getType()->getQualifier(); + auto programQualifier = programUniform->second->getType()->getQualifier(); + + success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; + success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; + success &= stageQualifier.layoutSet == programQualifier.layoutSet; + } + else { + success &= false; + } + } + } + } + + // compare uniform blocks in each stage to the program table + { + int totalUniforms = program.getNumUniformBlocks(); + std::map programUniforms; + for (int i = 0; i < totalUniforms; i++) { + const glslang::TObjectReflection& uniform = program.getUniformBlock(i); + std::string name = interfaceName(uniform); + programUniforms[name] = &uniform; + } + it = stageReflections.begin(); + for (; it != stageReflections.end(); it++) { + int numUniform = it->getNumUniformBlocks(); + std::map uniforms; + + for (int i = 0; i < numUniform; i++) { + glslang::TObjectReflection uniform = it->getUniformBlock(i); + std::string name = interfaceName(uniform); + auto programUniform = programUniforms.find(name); + + if (programUniform != programUniforms.end()) { + auto stageQualifier = uniform.getType()->getQualifier(); + auto programQualifier = programUniform->second->getType()->getQualifier(); + + success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; + success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; + success &= stageQualifier.layoutSet == programQualifier.layoutSet; + } + else { + success &= false; + } + } + } + } + + if (!success) { + linkingError += "Mismatched cross-stage IO\n"; + } + + return success; +} + +TEST_P(GlslMapIOTest, FromFile) +{ + const auto& fileNames = GetParam().fileNames; + Semantics semantics = GetParam().semantics; + const size_t fileCount = fileNames.size(); + const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv); + GlslangResult result; + + // Compile each input shader file. + bool success = true; + std::vector> shaders; + for (size_t i = 0; i < fileCount; ++i) { + std::string contents; + tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], + "input", &contents); + shaders.emplace_back( + new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); + auto* shader = shaders.back().get(); + + shader->setAutoMapLocations(true); + shader->setAutoMapBindings(true); + + if (controls & EShMsgSpvRules) { + if (controls & EShMsgVulkanRules) { + shader->setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl + : glslang::EShSourceGlsl, + shader->getStage(), glslang::EShClientVulkan, 100); + shader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1); + shader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_0); + } else { + shader->setEnvInput((controls & EShMsgReadHlsl) ? glslang::EShSourceHlsl + : glslang::EShSourceGlsl, + shader->getStage(), glslang::EShClientOpenGL, 100); + shader->setEnvClient(glslang::EShClientOpenGL, glslang::EShTargetOpenGL_450); + shader->setEnvTarget(glslang::EshTargetSpv, glslang::EShTargetSpv_1_0); + } + } + + success &= compile(shader, contents, "", controls); + + result.shaderResults.push_back( + { fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog() }); + } + + // Link all of them. + glslang::TProgram program; + for (const auto& shader : shaders) program.addShader(shader.get()); + success &= program.link(controls); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + + unsigned int stage = 0; + glslang::TIntermediate* firstIntermediate = nullptr; + while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } + firstIntermediate = program.getIntermediate((EShLanguage)stage); + + glslang::TDefaultGlslIoResolver resolver(*firstIntermediate); + glslang::TGlslIoMapper ioMapper; + + if (success) { + success &= program.mapIO(&resolver, &ioMapper); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + } + + success &= verifyIOMapping(result.linkingError, program); + result.validationResult = success; + + if (success && (controls & EShMsgSpvRules)) { + for (int stage = 0; stage < EShLangCount; ++stage) { + if (program.getIntermediate((EShLanguage)stage)) { + spv::SpvBuildLogger logger; + std::vector spirv_binary; + options().disableOptimizer = false; + glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), + spirv_binary, &logger, &options()); + + std::ostringstream disassembly_stream; + spv::Parameterize(); + spv::Disassemble(disassembly_stream, spirv_binary); + result.spirvWarningsErrors += logger.getAllMessages(); + result.spirv += disassembly_stream.str(); + result.validationResult &= !options().validate || logger.getAllMessages().empty(); + } + } + } + + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + // Check with expected results. + const std::string expectedOutputFname = + GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out"; + std::string expectedOutput; + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname, + result.spirvWarningsErrors); +} + +// clang-format off +INSTANTIATE_TEST_SUITE_P( + Glsl, GlslMapIOTest, + ::testing::ValuesIn(std::vector({ + {{"iomap.crossStage.vert", "iomap.crossStage.frag" }, Semantics::OpenGL}, + {{"iomap.crossStage.2.vert", "iomap.crossStage.2.geom", "iomap.crossStage.2.frag" }, Semantics::OpenGL}, + // vulkan semantics + {{"iomap.crossStage.vk.vert", "iomap.crossStage.vk.geom", "iomap.crossStage.vk.frag" }, Semantics::Vulkan}, + })) +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest +#endif \ No newline at end of file diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp index 2909a9c135..5e005a463c 100644 --- a/gtests/Link.FromFile.Vk.cpp +++ b/gtests/Link.FromFile.Vk.cpp @@ -114,12 +114,12 @@ INSTANTIATE_TEST_SUITE_P( ::testing::ValuesIn(std::vector>({ {"link1.vk.frag", "link2.vk.frag"}, {"spv.unit1.frag", "spv.unit2.frag", "spv.unit3.frag"}, - {"link.vk.matchingPC.0.0.frag", "link.vk.matchingPC.0.1.frag", - "link.vk.matchingPC.0.2.frag"}, - {"link.vk.differentPC.0.0.frag", "link.vk.differentPC.0.1.frag", - "link.vk.differentPC.0.2.frag"}, - {"link.vk.differentPC.1.0.frag", "link.vk.differentPC.1.1.frag", - "link.vk.differentPC.1.2.frag"}, + {"link.vk.matchingPC.0.0.frag", "link.vk.matchingPC.0.1.frag", + "link.vk.matchingPC.0.2.frag"}, + {"link.vk.differentPC.0.0.frag", "link.vk.differentPC.0.1.frag", + "link.vk.differentPC.0.2.frag"}, + {"link.vk.differentPC.1.0.frag", "link.vk.differentPC.1.1.frag", + "link.vk.differentPC.1.2.frag"}, {"link.vk.pcNamingValid.0.0.vert", "link.vk.pcNamingValid.0.1.vert"}, {"link.vk.pcNamingInvalid.0.0.vert", "link.vk.pcNamingInvalid.0.1.vert"}, {"link.vk.multiBlocksValid.0.0.vert", "link.vk.multiBlocksValid.0.1.vert"}, diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp new file mode 100644 index 0000000000..d791d6cc67 --- /dev/null +++ b/gtests/VkRelaxed.FromFile.cpp @@ -0,0 +1,296 @@ +// +// Copyright (C) 2016-2017 Google, Inc. +// Copyright (C) 2020 The Khronos Group Inc. +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// +#include + +#include + +#include "TestFixture.h" + +#include "glslang/MachineIndependent/iomapper.h" +#include "glslang/MachineIndependent/reflection.h" + +#ifndef GLSLANG_WEB +namespace glslangtest { +namespace { + +struct vkRelaxedData { + std::vector fileNames; +}; + +using VulkanRelaxedTest = GlslangTest <::testing::TestWithParam>; + +template +std::string interfaceName(T symbol) { + return symbol.getType()->getBasicType() == glslang::EbtBlock ? std::string(symbol.getType()->getTypeName().c_str()) : symbol.name; +} + +bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { + bool success = true; + + // Verify IO Mapping by generating reflection for each stage individually + // and comparing layout qualifiers on the results + + + int reflectionOptions = EShReflectionDefault; + //reflectionOptions |= EShReflectionStrictArraySuffix; + //reflectionOptions |= EShReflectionBasicArraySuffix; + reflectionOptions |= EShReflectionIntermediateIO; + reflectionOptions |= EShReflectionSeparateBuffers; + reflectionOptions |= EShReflectionAllBlockVariables; + //reflectionOptions |= EShReflectionUnwrapIOBlocks; + + success &= program.buildReflection(reflectionOptions); + + // check that the reflection output from the individual stages all makes sense.. + std::vector stageReflections; + for (int s = 0; s < EShLangCount; ++s) { + if (program.getIntermediate((EShLanguage)s)) { + stageReflections.emplace_back((EShReflectionOptions)reflectionOptions, (EShLanguage)s, (EShLanguage)s); + success &= stageReflections.back().addStage((EShLanguage)s, *program.getIntermediate((EShLanguage)s)); + } + } + + // check that input/output locations match between stages + auto it = stageReflections.begin(); + auto nextIt = it + 1; + for (; nextIt != stageReflections.end(); it++, nextIt++) { + int numOut = it->getNumPipeOutputs(); + std::map pipeOut; + + for (int i = 0; i < numOut; i++) { + const glslang::TObjectReflection& out = it->getPipeOutput(i); + std::string name = interfaceName(out); + pipeOut[name] = &out; + } + + int numIn = nextIt->getNumPipeInputs(); + for (int i = 0; i < numIn; i++) { + auto in = nextIt->getPipeInput(i); + std::string name = interfaceName(in); + auto out = pipeOut.find(name); + + if (out != pipeOut.end()) { + auto inQualifier = in.getType()->getQualifier(); + auto outQualifier = out->second->getType()->getQualifier(); + success &= outQualifier.layoutLocation == inQualifier.layoutLocation; + } + else { + success &= false; + } + } + } + + // compare uniforms in each stage to the program + { + int totalUniforms = program.getNumUniformVariables(); + std::map programUniforms; + for (int i = 0; i < totalUniforms; i++) { + const glslang::TObjectReflection& uniform = program.getUniform(i); + std::string name = interfaceName(uniform); + programUniforms[name] = &uniform; + } + it = stageReflections.begin(); + for (; it != stageReflections.end(); it++) { + int numUniform = it->getNumUniforms(); + std::map uniforms; + + for (int i = 0; i < numUniform; i++) { + glslang::TObjectReflection uniform = it->getUniform(i); + std::string name = interfaceName(uniform); + auto programUniform = programUniforms.find(name); + + if (programUniform != programUniforms.end()) { + auto stageQualifier = uniform.getType()->getQualifier(); + auto programQualifier = programUniform->second->getType()->getQualifier(); + + success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; + success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; + success &= stageQualifier.layoutSet == programQualifier.layoutSet; + } + else { + success &= false; + } + } + } + } + + // compare uniform blocks in each stage to the program table + { + int totalUniforms = program.getNumUniformBlocks(); + std::map programUniforms; + for (int i = 0; i < totalUniforms; i++) { + const glslang::TObjectReflection& uniform = program.getUniformBlock(i); + std::string name = interfaceName(uniform); + programUniforms[name] = &uniform; + } + it = stageReflections.begin(); + for (; it != stageReflections.end(); it++) { + int numUniform = it->getNumUniformBlocks(); + std::map uniforms; + + for (int i = 0; i < numUniform; i++) { + glslang::TObjectReflection uniform = it->getUniformBlock(i); + std::string name = interfaceName(uniform); + auto programUniform = programUniforms.find(name); + + if (programUniform != programUniforms.end()) { + auto stageQualifier = uniform.getType()->getQualifier(); + auto programQualifier = programUniform->second->getType()->getQualifier(); + + success &= stageQualifier.layoutLocation == programQualifier.layoutLocation; + success &= stageQualifier.layoutBinding == programQualifier.layoutBinding; + success &= stageQualifier.layoutSet == programQualifier.layoutSet; + } + else { + success &= false; + } + } + } + } + + if (!success) { + linkingError += "Mismatched cross-stage IO\n"; + } + + return success; +} + +TEST_P(VulkanRelaxedTest, FromFile) +{ + const auto& fileNames = GetParam().fileNames; + Semantics semantics = Semantics::Vulkan; + const size_t fileCount = fileNames.size(); + const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv); + GlslangResult result; + + // Compile each input shader file. + bool success = true; + std::vector> shaders; + for (size_t i = 0; i < fileCount; ++i) { + std::string contents; + tryLoadFile(GlobalTestSettings.testRoot + "/" + fileNames[i], + "input", &contents); + shaders.emplace_back( + new glslang::TShader(GetShaderStage(GetSuffix(fileNames[i])))); + auto* shader = shaders.back().get(); + + shader->setAutoMapLocations(true); + shader->setAutoMapBindings(true); + + shader->setEnvInput(glslang::EShSourceGlsl, shader->getStage(), glslang::EShClientVulkan, 100); + shader->setEnvClient(glslang::EShClientVulkan, glslang::EShTargetVulkan_1_1); + shader->setEnvTarget(glslang::EShTargetSpv, glslang::EShTargetSpv_1_0); + + // Use vulkan relaxed option + shader->setEnvInputVulkanRulesRelaxed(); + + success &= compile(shader, contents, "", controls); + + result.shaderResults.push_back( + { fileNames[i], shader->getInfoLog(), shader->getInfoDebugLog() }); + } + + // Link all of them. + glslang::TProgram program; + for (const auto& shader : shaders) program.addShader(shader.get()); + success &= program.link(controls); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + + unsigned int stage = 0; + glslang::TIntermediate* firstIntermediate = nullptr; + while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } + firstIntermediate = program.getIntermediate((EShLanguage)stage); + + glslang::TDefaultGlslIoResolver resolver(*firstIntermediate); + glslang::TGlslIoMapper ioMapper; + + if (success) { + success &= program.mapIO(&resolver, &ioMapper); + result.linkingOutput = program.getInfoLog(); + result.linkingError = program.getInfoDebugLog(); + } + + success &= verifyIOMapping(result.linkingError, program); + result.validationResult = success; + + if (success && (controls & EShMsgSpvRules)) { + for (int stage = 0; stage < EShLangCount; ++stage) { + if (program.getIntermediate((EShLanguage)stage)) { + spv::SpvBuildLogger logger; + std::vector spirv_binary; + options().disableOptimizer = false; + glslang::GlslangToSpv(*program.getIntermediate((EShLanguage)stage), + spirv_binary, &logger, &options()); + + std::ostringstream disassembly_stream; + spv::Parameterize(); + spv::Disassemble(disassembly_stream, spirv_binary); + result.spirvWarningsErrors += logger.getAllMessages(); + result.spirv += disassembly_stream.str(); + result.validationResult &= !options().validate || logger.getAllMessages().empty(); + } + } + } + + std::ostringstream stream; + outputResultToStream(&stream, result, controls); + + // Check with expected results. + const std::string expectedOutputFname = + GlobalTestSettings.testRoot + "/baseResults/" + fileNames.front() + ".out"; + std::string expectedOutput; + tryLoadFile(expectedOutputFname, "expected output", &expectedOutput); + + checkEqAndUpdateIfRequested(expectedOutput, stream.str(), expectedOutputFname, + result.spirvWarningsErrors); +} + +// clang-format off +INSTANTIATE_TEST_SUITE_P( + Glsl, VulkanRelaxedTest, + ::testing::ValuesIn(std::vector({ + {{"vk.relaxed.frag"}}, + {{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}}, + {{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}}, + {{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}}, + })) +); +// clang-format on + +} // anonymous namespace +} // namespace glslangtest +#endif \ No newline at end of file From 48f08c60e293d497bc395d18fe4ff1966be927d6 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Tue, 16 Mar 2021 19:00:52 -0400 Subject: [PATCH 128/365] fix variable capitilization. Don't initialize it in the struct's constructor --- glslang/MachineIndependent/ShaderLang.cpp | 3 ++- glslang/Public/ShaderLang.h | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 4b340eaa19..e85196c445 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -727,7 +727,7 @@ void TranslateEnvironment(const TEnvironment* environment, EShMessages& messages break; case EShClientVulkan: spvVersion.vulkanGlsl = environment->input.dialectVersion; - spvVersion.vulkanRelaxed = environment->input.VulkanRulesRelaxed; + spvVersion.vulkanRelaxed = environment->input.vulkanRulesRelaxed; break; case EShClientOpenGL: spvVersion.openGl = environment->input.dialectVersion; @@ -1767,6 +1767,7 @@ TShader::TShader(EShLanguage s) // clear environment (avoid constructors in them for use in a C interface) environment.input.languageFamily = EShSourceNone; environment.input.dialect = EShClientNone; + environment.input.vulkanRulesRelaxed = false; environment.client.client = EShClientNone; environment.target.language = EShTargetNone; environment.target.hlslFunctionality1 = false; diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 74b9f3eef7..14683daf11 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -187,7 +187,7 @@ struct TInputLanguage { EShLanguage stage; // redundant information with other input, this one overrides when not EShSourceNone EShClient dialect; int dialectVersion; // version of client's language definition, not the client (when not EShClientNone) - bool VulkanRulesRelaxed = false; + bool vulkanRulesRelaxed; }; struct TClient { @@ -556,8 +556,8 @@ class TShader { bool getEnvTargetHlslFunctionality1() const { return false; } #endif - void setEnvInputVulkanRulesRelaxed() { environment.input.VulkanRulesRelaxed = true; } - bool getEnvInputVulkanRulesRelaxed() const { return environment.input.VulkanRulesRelaxed; } + void setEnvInputVulkanRulesRelaxed() { environment.input.vulkanRulesRelaxed = true; } + bool getEnvInputVulkanRulesRelaxed() const { return environment.input.vulkanRulesRelaxed; } // Interface to #include handlers. // From 5340752190843cafab8a2ee94bff5f1a3b743839 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Wed, 17 Mar 2021 18:47:13 -0400 Subject: [PATCH 129/365] Fix issue with remapping global uniform blocks Avoid adding global uniform blocks to stages that don't already have it. Otherwise multiple stages point to the same block object, and a remapping that occurs later on will change the mapping on multiple stages. --- .../baseResults/vk.relaxed.changeSet.vert.out | 281 ++++++++++++++++++ Test/vk.relaxed.changeSet.frag | 13 + Test/vk.relaxed.changeSet.vert | 16 + glslang/MachineIndependent/ShaderLang.cpp | 7 +- glslang/MachineIndependent/linkValidate.cpp | 10 +- .../MachineIndependent/localintermediate.h | 2 +- gtests/VkRelaxed.FromFile.cpp | 9 + 7 files changed, 332 insertions(+), 6 deletions(-) create mode 100755 Test/baseResults/vk.relaxed.changeSet.vert.out create mode 100755 Test/vk.relaxed.changeSet.frag create mode 100755 Test/vk.relaxed.changeSet.vert diff --git a/Test/baseResults/vk.relaxed.changeSet.vert.out b/Test/baseResults/vk.relaxed.changeSet.vert.out new file mode 100755 index 0000000000..f6bce292ba --- /dev/null +++ b/Test/baseResults/vk.relaxed.changeSet.vert.out @@ -0,0 +1,281 @@ +vk.relaxed.changeSet.vert +Shader version: 460 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child ( temp highp 4-component vector of float) +0:13 'Color' ( smooth out highp 4-component vector of float) +0:13 'aColor' ( in highp 4-component vector of float) +0:14 move second child to first child ( temp highp 2-component vector of float) +0:14 'UV' ( smooth out highp 2-component vector of float) +0:14 'aUV' ( in highp 2-component vector of float) +0:15 move second child to first child ( temp highp 4-component vector of float) +0:15 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:15 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) +0:15 Constant: +0:15 0 (const uint) +0:15 matrix-times-vector ( temp highp 4-component vector of float) +0:15 projectionMatrix: direct index for structure ( uniform highp 4X4 matrix of float) +0:15 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4X4 matrix of float projectionMatrix}) +0:15 Constant: +0:15 0 (const uint) +0:15 Construct vec4 ( temp highp 4-component vector of float) +0:15 'aPos' ( in highp 2-component vector of float) +0:15 Constant: +0:15 0.000000 +0:15 Constant: +0:15 1.000000 +0:? Linker Objects +0:? 'aPos' ( in highp 2-component vector of float) +0:? 'aUV' ( in highp 2-component vector of float) +0:? 'aColor' ( in highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4X4 matrix of float projectionMatrix}) +0:? 'Color' ( smooth out highp 4-component vector of float) +0:? 'UV' ( smooth out highp 2-component vector of float) +0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) + +vk.relaxed.changeSet.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp highp 4-component vector of float) +0:12 'fragColor' (layout( location=0) out highp 4-component vector of float) +0:12 vector-scale ( temp highp 4-component vector of float) +0:12 'Color' ( smooth in highp 4-component vector of float) +0:12 direct index ( temp highp float) +0:12 texture ( global highp 4-component vector of float) +0:12 'sTexture' ( uniform highp sampler2D) +0:12 vector swizzle ( temp highp 2-component vector of float) +0:12 'UV' ( smooth in highp 2-component vector of float) +0:12 Sequence +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 0 (const int) +0:? Linker Objects +0:? 'fragColor' (layout( location=0) out highp 4-component vector of float) +0:? 'sTexture' ( uniform highp sampler2D) +0:? 'Color' ( smooth in highp 4-component vector of float) +0:? 'UV' ( smooth in highp 2-component vector of float) + + +Linked vertex stage: + + +Linked fragment stage: + + +Shader version: 460 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child ( temp highp 4-component vector of float) +0:13 'Color' ( smooth out highp 4-component vector of float) +0:13 'aColor' ( in highp 4-component vector of float) +0:14 move second child to first child ( temp highp 2-component vector of float) +0:14 'UV' ( smooth out highp 2-component vector of float) +0:14 'aUV' ( in highp 2-component vector of float) +0:15 move second child to first child ( temp highp 4-component vector of float) +0:15 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:15 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +0:15 Constant: +0:15 0 (const uint) +0:15 matrix-times-vector ( temp highp 4-component vector of float) +0:15 projectionMatrix: direct index for structure ( uniform highp 4X4 matrix of float) +0:15 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4X4 matrix of float projectionMatrix}) +0:15 Constant: +0:15 0 (const uint) +0:15 Construct vec4 ( temp highp 4-component vector of float) +0:15 'aPos' ( in highp 2-component vector of float) +0:15 Constant: +0:15 0.000000 +0:15 Constant: +0:15 1.000000 +0:? Linker Objects +0:? 'aPos' ( in highp 2-component vector of float) +0:? 'aUV' ( in highp 2-component vector of float) +0:? 'aColor' ( in highp 4-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4X4 matrix of float projectionMatrix}) +0:? 'Color' ( smooth out highp 4-component vector of float) +0:? 'UV' ( smooth out highp 2-component vector of float) +0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +0:? 'gl_VertexID' ( in int VertexIndex) +0:? 'gl_InstanceID' ( in int InstanceIndex) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp highp 4-component vector of float) +0:12 'fragColor' (layout( location=0) out highp 4-component vector of float) +0:12 vector-scale ( temp highp 4-component vector of float) +0:12 'Color' ( smooth in highp 4-component vector of float) +0:12 direct index ( temp highp float) +0:12 texture ( global highp 4-component vector of float) +0:12 'sTexture' ( uniform highp sampler2D) +0:12 vector swizzle ( temp highp 2-component vector of float) +0:12 'UV' ( smooth in highp 2-component vector of float) +0:12 Sequence +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 0 (const int) +0:? Linker Objects +0:? 'fragColor' (layout( location=0) out highp 4-component vector of float) +0:? 'sTexture' ( uniform highp sampler2D) +0:? 'Color' ( smooth in highp 4-component vector of float) +0:? 'UV' ( smooth in highp 2-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 46 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 11 15 17 24 34 44 45 + Source GLSL 460 + Name 4 "main" + Name 9 "Color" + Name 11 "aColor" + Name 15 "UV" + Name 17 "aUV" + Name 22 "gl_PerVertex" + MemberName 22(gl_PerVertex) 0 "gl_Position" + MemberName 22(gl_PerVertex) 1 "gl_PointSize" + MemberName 22(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 22(gl_PerVertex) 3 "gl_CullDistance" + Name 24 "" + Name 28 "gl_DefaultUniformBlock" + MemberName 28(gl_DefaultUniformBlock) 0 "projectionMatrix" + Name 30 "" + Name 34 "aPos" + Name 44 "gl_VertexID" + Name 45 "gl_InstanceID" + Decorate 9(Color) Location 0 + Decorate 11(aColor) Location 2 + Decorate 15(UV) Location 1 + Decorate 17(aUV) Location 1 + MemberDecorate 22(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 22(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 22(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 22(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 22(gl_PerVertex) Block + MemberDecorate 28(gl_DefaultUniformBlock) 0 ColMajor + MemberDecorate 28(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 28(gl_DefaultUniformBlock) 0 MatrixStride 16 + Decorate 28(gl_DefaultUniformBlock) Block + Decorate 30 DescriptorSet 0 + Decorate 30 Binding 0 + Decorate 34(aPos) Location 0 + Decorate 44(gl_VertexID) BuiltIn VertexIndex + Decorate 45(gl_InstanceID) BuiltIn InstanceIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(Color): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec4) + 11(aColor): 10(ptr) Variable Input + 13: TypeVector 6(float) 2 + 14: TypePointer Output 13(fvec2) + 15(UV): 14(ptr) Variable Output + 16: TypePointer Input 13(fvec2) + 17(aUV): 16(ptr) Variable Input + 19: TypeInt 32 0 + 20: 19(int) Constant 1 + 21: TypeArray 6(float) 20 +22(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 21 21 + 23: TypePointer Output 22(gl_PerVertex) + 24: 23(ptr) Variable Output + 25: TypeInt 32 1 + 26: 25(int) Constant 0 + 27: TypeMatrix 7(fvec4) 4 +28(gl_DefaultUniformBlock): TypeStruct 27 + 29: TypePointer Uniform 28(gl_DefaultUniformBlock) + 30: 29(ptr) Variable Uniform + 31: TypePointer Uniform 27 + 34(aPos): 16(ptr) Variable Input + 36: 6(float) Constant 0 + 37: 6(float) Constant 1065353216 + 43: TypePointer Input 25(int) + 44(gl_VertexID): 43(ptr) Variable Input +45(gl_InstanceID): 43(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 12: 7(fvec4) Load 11(aColor) + Store 9(Color) 12 + 18: 13(fvec2) Load 17(aUV) + Store 15(UV) 18 + 32: 31(ptr) AccessChain 30 26 + 33: 27 Load 32 + 35: 13(fvec2) Load 34(aPos) + 38: 6(float) CompositeExtract 35 0 + 39: 6(float) CompositeExtract 35 1 + 40: 7(fvec4) CompositeConstruct 38 39 36 37 + 41: 7(fvec4) MatrixTimesVector 33 40 + 42: 8(ptr) AccessChain 24 26 + Store 42 41 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 27 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 11 20 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 9 "fragColor" + Name 11 "Color" + Name 16 "sTexture" + Name 20 "UV" + Decorate 9(fragColor) Location 0 + Decorate 11(Color) Location 0 + Decorate 16(sTexture) DescriptorSet 1 + Decorate 16(sTexture) Binding 0 + Decorate 20(UV) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(fragColor): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec4) + 11(Color): 10(ptr) Variable Input + 13: TypeImage 6(float) 2D sampled format:Unknown + 14: TypeSampledImage 13 + 15: TypePointer UniformConstant 14 + 16(sTexture): 15(ptr) Variable UniformConstant + 18: TypeVector 6(float) 2 + 19: TypePointer Input 18(fvec2) + 20(UV): 19(ptr) Variable Input + 23: TypeInt 32 0 + 24: 23(int) Constant 0 + 4(main): 2 Function None 3 + 5: Label + 12: 7(fvec4) Load 11(Color) + 17: 14 Load 16(sTexture) + 21: 18(fvec2) Load 20(UV) + 22: 7(fvec4) ImageSampleImplicitLod 17 21 + 25: 6(float) CompositeExtract 22 0 + 26: 7(fvec4) VectorTimesScalar 12 25 + Store 9(fragColor) 26 + Return + FunctionEnd diff --git a/Test/vk.relaxed.changeSet.frag b/Test/vk.relaxed.changeSet.frag new file mode 100755 index 0000000000..e2f2403a61 --- /dev/null +++ b/Test/vk.relaxed.changeSet.frag @@ -0,0 +1,13 @@ +#version 460 + +layout(location = 0) out vec4 fragColor; + +uniform sampler2D sTexture; + +in vec4 Color; +in vec2 UV; + +void main() +{ + fragColor = Color * texture(sTexture, UV.st).r; +} diff --git a/Test/vk.relaxed.changeSet.vert b/Test/vk.relaxed.changeSet.vert new file mode 100755 index 0000000000..419adba362 --- /dev/null +++ b/Test/vk.relaxed.changeSet.vert @@ -0,0 +1,16 @@ +#version 460 + +in vec2 aPos; +in vec2 aUV; +in vec4 aColor; +uniform mat4 projectionMatrix; + +out vec4 Color; +out vec2 UV; + +void main() +{ + Color = aColor; + UV = aUV; + gl_Position = projectionMatrix * vec4(aPos, 0, 1); +} diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index e85196c445..d02eae6fcc 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -2124,7 +2124,12 @@ bool TProgram::crossStageCheck(EShMessages) { // copy final definition of global block back into each stage for (unsigned int i = 0; i < activeStages.size(); ++i) { - activeStages[i]->mergeGlobalUniformBlocks(*infoSink, uniforms); + // We only want to merge into already existing global uniform blocks. + // A stage that doesn't already know about the global doesn't care about it's content. + // Otherwise we end up pointing to the same object between different stages + // and that will break binding/set remappings + bool mergeExistingOnly = true; + activeStages[i]->mergeGlobalUniformBlocks(*infoSink, uniforms, mergeExistingOnly); } // compare cross stage symbols for each stage boundary diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 789dc3c308..33af7bbe09 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -108,7 +108,8 @@ void TIntermediate::mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit unitLinkerObjects.resize(end - unitLinkerObjects.begin()); // merge uniforms and do error checking - mergeGlobalUniformBlocks(infoSink, unit); + bool mergeExistingOnly = false; + mergeGlobalUniformBlocks(infoSink, unit, mergeExistingOnly); mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); } @@ -362,7 +363,8 @@ void TIntermediate::mergeTrees(TInfoSink& infoSink, TIntermediate& unit) remapIds(idMaps, idShift + 1, unit); mergeBodies(infoSink, globals, unitGlobals); - mergeGlobalUniformBlocks(infoSink, unit); + bool mergeExistingOnly = false; + mergeGlobalUniformBlocks(infoSink, unit, mergeExistingOnly); mergeLinkerObjects(infoSink, linkerObjects, unitLinkerObjects, unit.getStage()); ioAccessed.insert(unit.ioAccessed.begin(), unit.ioAccessed.end()); } @@ -525,7 +527,7 @@ static inline bool isSameInterface(TIntermSymbol* symbol, EShLanguage stage, TIn // merge the members of different stages to allow them to be linked properly // as a single block // -void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit) +void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit, bool mergeExistingOnly) { TIntermSequence& linkerObjects = findLinkerObjects()->getSequence(); TIntermSequence& unitLinkerObjects = unit.findLinkerObjects()->getSequence(); @@ -552,7 +554,7 @@ void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& auto itUnitBlock = unitDefaultBlocks.begin(); for (; itUnitBlock != unitDefaultBlocks.end(); itUnitBlock++) { - bool add = true; + bool add = !mergeExistingOnly; auto itBlock = defaultBlocks.begin(); for (; itBlock != defaultBlocks.end(); itBlock++) { diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 9bfa35cc88..c9a1d8114a 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -915,7 +915,7 @@ class TIntermediate { void merge(TInfoSink&, TIntermediate&); void finalCheck(TInfoSink&, bool keepUncalled); - void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit); + void mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& unit, bool mergeExistingOnly); void mergeUniformObjects(TInfoSink& infoSink, TIntermediate& unit); void checkStageIO(TInfoSink&, TIntermediate&); diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp index d791d6cc67..32e3c29b88 100644 --- a/gtests/VkRelaxed.FromFile.cpp +++ b/gtests/VkRelaxed.FromFile.cpp @@ -48,6 +48,7 @@ namespace { struct vkRelaxedData { std::vector fileNames; + std::vector> resourceSetBindings; }; using VulkanRelaxedTest = GlslangTest <::testing::TestWithParam>; @@ -191,6 +192,7 @@ bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { TEST_P(VulkanRelaxedTest, FromFile) { const auto& fileNames = GetParam().fileNames; + const auto& resourceSetBindings = GetParam().resourceSetBindings; Semantics semantics = Semantics::Vulkan; const size_t fileCount = fileNames.size(); const EShMessages controls = DeriveOptions(Source::GLSL, semantics, Target::BothASTAndSpv); @@ -230,6 +232,12 @@ TEST_P(VulkanRelaxedTest, FromFile) result.linkingOutput = program.getInfoLog(); result.linkingError = program.getInfoDebugLog(); + if (!resourceSetBindings.empty()) { + assert(resourceSetBindings.size() == fileNames.size()); + for (int i = 0; i < shaders.size(); i++) + shaders[i]->setResourceSetBinding(resourceSetBindings[i]); + } + unsigned int stage = 0; glslang::TIntermediate* firstIntermediate = nullptr; while (!program.getIntermediate((EShLanguage)stage) && stage < EShLangCount) { stage++; } @@ -287,6 +295,7 @@ INSTANTIATE_TEST_SUITE_P( {{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}}, {{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}}, {{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}}, + {{"vk.relaxed.changeSet.vert", "vk.relaxed.changeSet.frag" }, { {"0"}, {"1"} } }, })) ); // clang-format on From 9b962f611c79f897ea96a1bb864dfe7ca31109f7 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Thu, 18 Mar 2021 16:58:40 -0400 Subject: [PATCH 130/365] Partial fix for inconsistencies re: #2578 gl_SecondaryPositionNV and gl_PositionPerViewNV are inconsistently declared inside and outside of gl_PerVertex. This breaks interface block matching. For now ignore these errors since it should be fixed with how they are declared. --- ...link.vk.inconsistentGLPerVertex.0.vert.out | 315 ++++++++++++++++++ Test/link.vk.inconsistentGLPerVertex.0.geom | 27 ++ Test/link.vk.inconsistentGLPerVertex.0.vert | 20 ++ glslang/Include/Types.h | 59 +++- gtests/Link.FromFile.Vk.cpp | 1 + 5 files changed, 411 insertions(+), 11 deletions(-) create mode 100755 Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out create mode 100755 Test/link.vk.inconsistentGLPerVertex.0.geom create mode 100755 Test/link.vk.inconsistentGLPerVertex.0.vert diff --git a/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out b/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out new file mode 100755 index 0000000000..3d76b2f382 --- /dev/null +++ b/Test/baseResults/link.vk.inconsistentGLPerVertex.0.vert.out @@ -0,0 +1,315 @@ +link.vk.inconsistentGLPerVertex.0.vert +Shader version: 460 +0:? Sequence +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp highp 4-component vector of float) +0:17 color: direct index for structure ( out highp 4-component vector of float) +0:17 'vs_out' ( out block{ out highp 4-component vector of float color}) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 1.000000 +0:17 1.000000 +0:17 1.000000 +0:17 1.000000 +0:18 move second child to first child ( temp float) +0:18 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:18 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) +0:18 Constant: +0:18 1 (const uint) +0:18 Constant: +0:18 1.000000 +0:19 move second child to first child ( temp highp 4-component vector of float) +0:19 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:19 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) +0:19 Constant: +0:19 0 (const uint) +0:19 'P' ( in highp 4-component vector of float) +0:? Linker Objects +0:? 'vs_out' ( out block{ out highp 4-component vector of float color}) +0:? 'P' ( in highp 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) + +link.vk.inconsistentGLPerVertex.0.geom +Shader version: 460 +invocations = -1 +max_vertices = 50 +input primitive = lines_adjacency +output primitive = triangle_strip +0:? Sequence +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:18 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 1-element array of float CullDistance gl_CullDistance}) +0:18 Constant: +0:18 0 (const uint) +0:18 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:18 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance, in unsized 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:18 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance, in unsized 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 0 (const int) +0:19 move second child to first child ( temp highp 4-component vector of float) +0:19 color: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:19 'gs_out' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float color}) +0:19 Constant: +0:19 0 (const int) +0:19 color: direct index for structure ( in highp 4-component vector of float) +0:19 direct index ( temp block{ in highp 4-component vector of float color}) +0:19 'gs_in' ( in 4-element array of block{ in highp 4-component vector of float color}) +0:19 Constant: +0:19 0 (const int) +0:19 Constant: +0:19 0 (const int) +0:20 EmitVertex ( global void) +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 color: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:21 'gs_out' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float color}) +0:21 Constant: +0:21 0 (const int) +0:21 color: direct index for structure ( in highp 4-component vector of float) +0:21 direct index ( temp block{ in highp 4-component vector of float color}) +0:21 'gs_in' ( in 4-element array of block{ in highp 4-component vector of float color}) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 0 (const int) +0:22 move second child to first child ( temp 4-component vector of float) +0:22 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:22 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 1-element array of float CullDistance gl_CullDistance}) +0:22 Constant: +0:22 0 (const uint) +0:22 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:22 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance, in unsized 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:22 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance, in unsized 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 EmitVertex ( global void) +0:24 move second child to first child ( temp highp 4-component vector of float) +0:24 color: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:24 'gs_out' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float color}) +0:24 Constant: +0:24 0 (const int) +0:24 color: direct index for structure ( in highp 4-component vector of float) +0:24 direct index ( temp block{ in highp 4-component vector of float color}) +0:24 'gs_in' ( in 4-element array of block{ in highp 4-component vector of float color}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:25 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 1-element array of float CullDistance gl_CullDistance}) +0:25 Constant: +0:25 0 (const uint) +0:25 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:25 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance, in unsized 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:25 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance, in unsized 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0 (const int) +0:26 EmitVertex ( global void) +0:? Linker Objects +0:? 'gs_in' ( in 4-element array of block{ in highp 4-component vector of float color}) +0:? 'gs_out' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float color}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out unsized 1-element array of float CullDistance gl_CullDistance}) +0:? 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance, in unsized 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in unsized 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Shader version: 460 +0:? Sequence +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp highp 4-component vector of float) +0:17 color: direct index for structure ( out highp 4-component vector of float) +0:17 'vs_out' ( out block{ out highp 4-component vector of float color}) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 1.000000 +0:17 1.000000 +0:17 1.000000 +0:17 1.000000 +0:18 move second child to first child ( temp float) +0:18 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:18 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +0:18 Constant: +0:18 1 (const uint) +0:18 Constant: +0:18 1.000000 +0:19 move second child to first child ( temp highp 4-component vector of float) +0:19 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:19 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +0:19 Constant: +0:19 0 (const uint) +0:19 'P' ( in highp 4-component vector of float) +0:? Linker Objects +0:? 'vs_out' ( out block{ out highp 4-component vector of float color}) +0:? 'P' ( in highp 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +Shader version: 460 +invocations = 1 +max_vertices = 50 +input primitive = lines_adjacency +output primitive = triangle_strip +0:? Sequence +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:18 Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:18 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out 1-element array of float CullDistance gl_CullDistance}) +0:18 Constant: +0:18 0 (const uint) +0:18 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:18 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance, in 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:18 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance, in 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:18 Constant: +0:18 0 (const int) +0:18 Constant: +0:18 0 (const int) +0:19 move second child to first child ( temp highp 4-component vector of float) +0:19 color: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:19 'gs_out' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float color}) +0:19 Constant: +0:19 0 (const int) +0:19 color: direct index for structure ( in highp 4-component vector of float) +0:19 direct index ( temp block{ in highp 4-component vector of float color}) +0:19 'gs_in' ( in 4-element array of block{ in highp 4-component vector of float color}) +0:19 Constant: +0:19 0 (const int) +0:19 Constant: +0:19 0 (const int) +0:20 EmitVertex ( global void) +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 color: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:21 'gs_out' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float color}) +0:21 Constant: +0:21 0 (const int) +0:21 color: direct index for structure ( in highp 4-component vector of float) +0:21 direct index ( temp block{ in highp 4-component vector of float color}) +0:21 'gs_in' ( in 4-element array of block{ in highp 4-component vector of float color}) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 0 (const int) +0:22 move second child to first child ( temp 4-component vector of float) +0:22 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:22 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out 1-element array of float CullDistance gl_CullDistance}) +0:22 Constant: +0:22 0 (const uint) +0:22 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:22 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance, in 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:22 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance, in 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 0 (const int) +0:23 EmitVertex ( global void) +0:24 move second child to first child ( temp highp 4-component vector of float) +0:24 color: direct index for structure (layout( stream=0) out highp 4-component vector of float) +0:24 'gs_out' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float color}) +0:24 Constant: +0:24 0 (const int) +0:24 color: direct index for structure ( in highp 4-component vector of float) +0:24 direct index ( temp block{ in highp 4-component vector of float color}) +0:24 'gs_in' ( in 4-element array of block{ in highp 4-component vector of float color}) +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 0 (const int) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:25 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out 1-element array of float CullDistance gl_CullDistance}) +0:25 Constant: +0:25 0 (const uint) +0:25 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:25 direct index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance, in 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:25 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance, in 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0 (const int) +0:26 EmitVertex ( global void) +0:? Linker Objects +0:? 'gs_in' ( in 4-element array of block{ in highp 4-component vector of float color}) +0:? 'gs_out' (layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float color}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance, layout( stream=0) out 1-element array of float CullDistance gl_CullDistance}) +0:? 'gl_in' ( in 4-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance, in 1-element array of float CullDistance gl_CullDistance, in 4-component vector of float SecondaryPositionNV gl_SecondaryPositionNV, in 1-element array of 4-component vector of float PositionPerViewNV gl_PositionPerViewNV}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 30 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 22 27 + Source GLSL 460 + Name 4 "main" + Name 8 "vs_output" + MemberName 8(vs_output) 0 "color" + Name 10 "vs_out" + Name 20 "gl_PerVertex" + MemberName 20(gl_PerVertex) 0 "gl_Position" + MemberName 20(gl_PerVertex) 1 "gl_PointSize" + MemberName 20(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 20(gl_PerVertex) 3 "gl_CullDistance" + Name 22 "" + Name 27 "P" + Decorate 8(vs_output) Block + Decorate 10(vs_out) Location 0 + MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 20(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 20(gl_PerVertex) Block + Decorate 27(P) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8(vs_output): TypeStruct 7(fvec4) + 9: TypePointer Output 8(vs_output) + 10(vs_out): 9(ptr) Variable Output + 11: TypeInt 32 1 + 12: 11(int) Constant 0 + 13: 6(float) Constant 1065353216 + 14: 7(fvec4) ConstantComposite 13 13 13 13 + 15: TypePointer Output 7(fvec4) + 17: TypeInt 32 0 + 18: 17(int) Constant 1 + 19: TypeArray 6(float) 18 +20(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 19 19 + 21: TypePointer Output 20(gl_PerVertex) + 22: 21(ptr) Variable Output + 23: 11(int) Constant 1 + 24: TypePointer Output 6(float) + 26: TypePointer Input 7(fvec4) + 27(P): 26(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 16: 15(ptr) AccessChain 10(vs_out) 12 + Store 16 14 + 25: 24(ptr) AccessChain 22 23 + Store 25 13 + 28: 7(fvec4) Load 27(P) + 29: 15(ptr) AccessChain 22 12 + Store 29 28 + Return + FunctionEnd diff --git a/Test/link.vk.inconsistentGLPerVertex.0.geom b/Test/link.vk.inconsistentGLPerVertex.0.geom new file mode 100755 index 0000000000..4d192d67ea --- /dev/null +++ b/Test/link.vk.inconsistentGLPerVertex.0.geom @@ -0,0 +1,27 @@ +#version 460 core + +layout(lines_adjacency) in; +layout(triangle_strip, max_vertices = 50) out; + +in vs_output +{ + vec4 color; +} gs_in[]; + +out gs_output +{ + vec4 color; +} gs_out; + +void main() +{ + gl_Position = gl_in[0].gl_Position; + gs_out.color = gs_in[0].color; + EmitVertex(); + gs_out.color = gs_in[1].color; + gl_Position = gl_in[1].gl_Position; + EmitVertex(); + gs_out.color = gs_in[0].color; + gl_Position = gl_in[0].gl_Position; + EmitVertex(); +} diff --git a/Test/link.vk.inconsistentGLPerVertex.0.vert b/Test/link.vk.inconsistentGLPerVertex.0.vert new file mode 100755 index 0000000000..7658c68ca9 --- /dev/null +++ b/Test/link.vk.inconsistentGLPerVertex.0.vert @@ -0,0 +1,20 @@ +#version 460 core + +// This test is to test isInconsistentGLPerVertexMember() workarounds. +// Without that workaround this compile fails due to block declarations +// in gl_PerVertex not being consistent for: +// gl_SecondaryPositionNV +// gl_PositionPerViewNV + +out vs_output +{ + vec4 color; +} vs_out; + +in vec4 P; +void main() +{ + vs_out.color = vec4(1.); + gl_PointSize = 1.0; + gl_Position = P; +} diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index bb6d0bd856..04250843aa 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -2336,6 +2336,17 @@ class TType { name += ';' ; } + // These variables are inconsistently declared inside and outside of gl_PerVertex in glslang right now. + // They are declared inside of 'in gl_PerVertex', but sitting as standalone when they are 'out'puts. + bool isInconsistentGLPerVertexMember(const TString& name) const + { + if (name == "gl_SecondaryPositionNV" || + name == "gl_PositionPerViewNV") + return true; + return false; + } + + // Do two structure types match? They could be declared independently, // in different places, but still might satisfy the definition of matching. // From the spec: @@ -2351,22 +2362,48 @@ class TType { (isStruct() && right.isStruct() && structure == right.structure)) return true; - // Both being nullptr was caught above, now they both have to be structures of the same number of elements - if (!isStruct() || !right.isStruct() || - structure->size() != right.structure->size()) - return false; - // Structure names have to match if (*typeName != *right.typeName) return false; - // Compare the names and types of all the members, which have to match - for (unsigned int i = 0; i < structure->size(); ++i) { - if ((*structure)[i].type->getFieldName() != (*right.structure)[i].type->getFieldName()) - return false; + // There are inconsistencies with how gl_PerVertex is setup. For now ignore those as errors if they + // are known inconsistencies. + bool isGLPerVertex = *typeName == "gl_PerVertex"; - if (*(*structure)[i].type != *(*right.structure)[i].type) - return false; + // Both being nullptr was caught above, now they both have to be structures of the same number of elements + if (!isStruct() || !right.isStruct() || + (structure->size() != right.structure->size() && !isGLPerVertex)) + return false; + + // Compare the names and types of all the members, which have to match + for (int li = 0, ri = 0; li < structure->size() || ri < right.structure->size(); ++li, ++ri) { + if (li < structure->size() && ri < right.structure->size()) { + if ((*structure)[li].type->getFieldName() == (*right.structure)[ri].type->getFieldName()) { + if (*(*structure)[li].type != *(*right.structure)[ri].type) + return false; + } else { + // If one of the members is something that's inconsistently declared, skip over it + // for now. + if (isGLPerVertex) { + if (isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) { + ri--; + continue; + } else if (isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) { + li--; + continue; + } + } else { + return false; + } + } + // If we get here, then there should only be inconsistently declared members left + } else if (li < structure->size()) { + if (!isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) + return false; + } else { + if (!isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) + return false; + } } return true; diff --git a/gtests/Link.FromFile.Vk.cpp b/gtests/Link.FromFile.Vk.cpp index 5e005a463c..4db71c2c96 100644 --- a/gtests/Link.FromFile.Vk.cpp +++ b/gtests/Link.FromFile.Vk.cpp @@ -124,6 +124,7 @@ INSTANTIATE_TEST_SUITE_P( {"link.vk.pcNamingInvalid.0.0.vert", "link.vk.pcNamingInvalid.0.1.vert"}, {"link.vk.multiBlocksValid.0.0.vert", "link.vk.multiBlocksValid.0.1.vert"}, {"link.vk.multiBlocksValid.1.0.geom", "link.vk.multiBlocksValid.1.1.geom"}, + {"link.vk.inconsistentGLPerVertex.0.vert", "link.vk.inconsistentGLPerVertex.0.geom"}, })) ); // clang-format on From 7662557d2ac8a574d7bfb4067b0ee4159dcd473c Mon Sep 17 00:00:00 2001 From: Sidney Just Date: Fri, 19 Mar 2021 13:26:53 -0700 Subject: [PATCH 131/365] Fixed OpGroupNonUniformQuadBroadcast Direction operand being marked as a literal --- SPIRV/doc.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 05bc5a2dec..3da77bf7e8 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -2719,7 +2719,7 @@ void Parameterize() InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandScope, "'Execution'"); InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "X"); - InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandLiteralNumber, "'Direction'"); + InstructionDesc[OpGroupNonUniformQuadSwap].operands.push(OperandId, "'Direction'"); InstructionDesc[OpSubgroupBallotKHR].operands.push(OperandId, "'Predicate'"); From 50dce096d986e9167c6623f86ced57304fdfeb0f Mon Sep 17 00:00:00 2001 From: Scott Bennett Date: Thu, 18 Mar 2021 16:42:51 -0400 Subject: [PATCH 132/365] Add cmd_bat action to bazel export_spirv_headers target Only having `cmd` rather than separate `cmd_bash` and `cmd_bat` (or `cmd_ps`) requires bash to be installed on Windows. So adding support for `cmd_bat` makes glslangValidator easier to compile on Windows. --- BUILD.bazel | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/BUILD.bazel b/BUILD.bazel index bfb77974a6..e8cf6a864b 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -53,7 +53,8 @@ genrule( name = "gen_build_info_h", srcs = ["CHANGES.md", "build_info.h.tmpl"], outs = ["glslang/build_info.h"], - cmd = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)", + cmd_bash = "$(location build_info) $$(dirname $(location CHANGES.md)) -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)", + cmd_bat = "for %F in ($(location CHANGES.md)) do $(location build_info) %~dpF -i $(location build_info.h.tmpl) -o $(location glslang/build_info.h)", tools = [":build_info"], ) @@ -143,7 +144,8 @@ genrule( "include/SPIRV/NonSemanticDebugPrintf.h", "include/SPIRV/spirv.hpp", ], - cmd = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/", + cmd_bash = "mkdir -p $(@D)/include/SPIRV && cp $(SRCS) $(@D)/include/SPIRV/", + cmd_bat = "(if not exist $(@D)\\include\\SPIRV mkdir $(@D)\\include\\SPIRV) && (for %S in ($(SRCS)) do @xcopy /q %S $(@D)\\include\\SPIRV\\ >NUL)", ) cc_library( From 8bbd41f274972d8533ff0932a22da740eb82843c Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Mon, 22 Mar 2021 13:51:45 -0400 Subject: [PATCH 133/365] Don't check precision qualifiers on cross-stage checks Fixes #2586 --- glslang/MachineIndependent/linkValidate.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 33af7bbe09..42b416dbae 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -871,12 +871,13 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy } } - // Qualifiers have to (almost) match + bool isInOut = crossStage && + ((symbol.getQualifier().storage == EvqVaryingIn && unitSymbol.getQualifier().storage == EvqVaryingOut) || + (symbol.getQualifier().storage == EvqVaryingOut && unitSymbol.getQualifier().storage == EvqVaryingIn)); + // Qualifiers have to (almost) match // Storage... - if (symbol.getQualifier().storage != unitSymbol.getQualifier().storage && - !((crossStage && symbol.getQualifier().storage == EvqVaryingIn && unitSymbol.getQualifier().storage == EvqVaryingOut) || - (crossStage && symbol.getQualifier().storage == EvqVaryingOut && unitSymbol.getQualifier().storage == EvqVaryingIn))) { + if (!isInOut && symbol.getQualifier().storage != unitSymbol.getQualifier().storage) { error(infoSink, "Storage qualifiers must match:"); writeTypeComparison = true; } @@ -898,7 +899,7 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy } // Precision... - if (symbol.getQualifier().precision != unitSymbol.getQualifier().precision) { + if (!isInOut && symbol.getQualifier().precision != unitSymbol.getQualifier().precision) { error(infoSink, "Precision qualifiers must match:"); writeTypeComparison = true; } From 13e27f9dd03c27fed02f5d3b17e1e1ddf23974b1 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Thu, 4 Mar 2021 18:03:14 -0700 Subject: [PATCH 134/365] Default to KHR extension Fix #2530. --- SPIRV/GlslangToSpv.cpp | 5 +---- Test/baseResults/spv.bufferhandle1.frag.out | 2 +- Test/baseResults/spv.bufferhandle10.frag.out | 2 +- Test/baseResults/spv.bufferhandle11.frag.out | 2 +- Test/baseResults/spv.bufferhandle12.frag.out | 2 +- Test/baseResults/spv.bufferhandle13.frag.out | 2 +- Test/baseResults/spv.bufferhandle14.frag.out | 2 +- Test/baseResults/spv.bufferhandle15.frag.out | 2 +- Test/baseResults/spv.bufferhandle16.frag.out | 2 +- Test/baseResults/spv.bufferhandle18.frag.out | 2 +- Test/baseResults/spv.bufferhandle2.frag.out | 2 +- Test/baseResults/spv.bufferhandle3.frag.out | 2 +- Test/baseResults/spv.bufferhandle4.frag.out | 2 +- Test/baseResults/spv.bufferhandle5.frag.out | 2 +- Test/baseResults/spv.bufferhandle6.frag.out | 2 +- Test/baseResults/spv.bufferhandle7.frag.out | 2 +- Test/baseResults/spv.bufferhandle8.frag.out | 2 +- Test/baseResults/spv.bufferhandle9.frag.out | 2 +- Test/baseResults/spv.coopmat.comp.out | 2 +- Test/baseResults/spv.intcoopmat.comp.out | 2 +- 20 files changed, 20 insertions(+), 23 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 6d9c7cfec3..9137cc0b35 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1493,7 +1493,7 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, if (glslangIntermediate->usingPhysicalStorageBuffer()) { addressingModel = spv::AddressingModelPhysicalStorageBuffer64EXT; - builder.addIncorporatedExtension(spv::E_SPV_EXT_physical_storage_buffer, spv::Spv_1_5); + builder.addIncorporatedExtension(spv::E_SPV_KHR_physical_storage_buffer, spv::Spv_1_5); builder.addCapability(spv::CapabilityPhysicalStorageBufferAddressesEXT); } if (glslangIntermediate->usingVulkanMemoryModel()) { @@ -6836,9 +6836,6 @@ spv::Id TGlslangToSpvTraverser::createConversion(glslang::TOperator op, OpDecora break; case glslang::EOpConvPtrToUvec2: case glslang::EOpConvUvec2ToPtr: - if (builder.isVector(operand)) - builder.promoteIncorporatedExtension(spv::E_SPV_EXT_physical_storage_buffer, - spv::E_SPV_KHR_physical_storage_buffer, spv::Spv_1_5); convOp = spv::OpBitcast; break; #endif diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out index 59bcc78921..b49c129630 100644 --- a/Test/baseResults/spv.bufferhandle1.frag.out +++ b/Test/baseResults/spv.bufferhandle1.frag.out @@ -6,7 +6,7 @@ spv.bufferhandle1.frag Capability Shader Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" 1: ExtInstImport "GLSL.std.450" diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out index 3a33c420f8..f9ab60d290 100644 --- a/Test/baseResults/spv.bufferhandle10.frag.out +++ b/Test/baseResults/spv.bufferhandle10.frag.out @@ -6,7 +6,7 @@ spv.bufferhandle10.frag Capability Shader Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" 1: ExtInstImport "GLSL.std.450" diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out index bd034aa829..9dd1c7b84a 100644 --- a/Test/baseResults/spv.bufferhandle11.frag.out +++ b/Test/baseResults/spv.bufferhandle11.frag.out @@ -9,8 +9,8 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to Capability Shader Capability StorageBuffer8BitAccess Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" Extension "SPV_KHR_8bit_storage" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out index c47c7189db..7cd5cb5e4d 100644 --- a/Test/baseResults/spv.bufferhandle12.frag.out +++ b/Test/baseResults/spv.bufferhandle12.frag.out @@ -9,8 +9,8 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to Capability Shader Capability StorageUniformBufferBlock16 Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" Extension "SPV_KHR_16bit_storage" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out index bfc152453b..5ce24acd38 100644 --- a/Test/baseResults/spv.bufferhandle13.frag.out +++ b/Test/baseResults/spv.bufferhandle13.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle13.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out index 514a7987f8..34df7538c9 100644 --- a/Test/baseResults/spv.bufferhandle14.frag.out +++ b/Test/baseResults/spv.bufferhandle14.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle14.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out index bfa5d94c11..ab1b4dbaef 100644 --- a/Test/baseResults/spv.bufferhandle15.frag.out +++ b/Test/baseResults/spv.bufferhandle15.frag.out @@ -8,7 +8,7 @@ WARNING: 0:16: '' : all default precisions are highp; use precision statements t Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out index 284bcb0a95..a9d9dcf265 100644 --- a/Test/baseResults/spv.bufferhandle16.frag.out +++ b/Test/baseResults/spv.bufferhandle16.frag.out @@ -6,7 +6,7 @@ spv.bufferhandle16.frag Capability Shader Capability Int64 Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out index 21dddc5e13..59ad6d02be 100644 --- a/Test/baseResults/spv.bufferhandle18.frag.out +++ b/Test/baseResults/spv.bufferhandle18.frag.out @@ -6,7 +6,7 @@ spv.bufferhandle18.frag Capability Shader Capability Int64 Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out index f66c92ac75..e20f3b7f2b 100644 --- a/Test/baseResults/spv.bufferhandle2.frag.out +++ b/Test/baseResults/spv.bufferhandle2.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle2.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out index 95d4dcf243..65ad1ca6fa 100644 --- a/Test/baseResults/spv.bufferhandle3.frag.out +++ b/Test/baseResults/spv.bufferhandle3.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle3.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out index 6751d6fbaa..e06bca4e8b 100644 --- a/Test/baseResults/spv.bufferhandle4.frag.out +++ b/Test/baseResults/spv.bufferhandle4.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle4.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out index 9f78166425..bf4d3a2ab3 100644 --- a/Test/baseResults/spv.bufferhandle5.frag.out +++ b/Test/baseResults/spv.bufferhandle5.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle5.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out index 441c762f47..abc9187c84 100644 --- a/Test/baseResults/spv.bufferhandle6.frag.out +++ b/Test/baseResults/spv.bufferhandle6.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle6.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out index 3c8e86c126..4282a3622c 100644 --- a/Test/baseResults/spv.bufferhandle7.frag.out +++ b/Test/baseResults/spv.bufferhandle7.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle7.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out index b9f23c5f32..65d4665324 100644 --- a/Test/baseResults/spv.bufferhandle8.frag.out +++ b/Test/baseResults/spv.bufferhandle8.frag.out @@ -5,7 +5,7 @@ spv.bufferhandle8.frag Capability Shader Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out index 7e534dfc83..1e5091c2ef 100644 --- a/Test/baseResults/spv.bufferhandle9.frag.out +++ b/Test/baseResults/spv.bufferhandle9.frag.out @@ -6,7 +6,7 @@ spv.bufferhandle9.frag Capability Shader Capability Int64 Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_EXT_physical_storage_buffer" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out index 6838bfc928..0a609df18a 100644 --- a/Test/baseResults/spv.coopmat.comp.out +++ b/Test/baseResults/spv.coopmat.comp.out @@ -9,8 +9,8 @@ spv.coopmat.comp Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT Capability CooperativeMatrixNV - Extension "SPV_EXT_physical_storage_buffer" Extension "SPV_KHR_16bit_storage" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" Extension "SPV_NV_cooperative_matrix" diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out index e74f44eae2..6a69743234 100644 --- a/Test/baseResults/spv.intcoopmat.comp.out +++ b/Test/baseResults/spv.intcoopmat.comp.out @@ -10,8 +10,8 @@ spv.intcoopmat.comp Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT Capability CooperativeMatrixNV - Extension "SPV_EXT_physical_storage_buffer" Extension "SPV_KHR_8bit_storage" + Extension "SPV_KHR_physical_storage_buffer" Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" Extension "SPV_NV_cooperative_matrix" From 591651da3dbfa9741252a1f0be72bf6799ae094a Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Tue, 23 Mar 2021 10:47:59 +0000 Subject: [PATCH 135/365] Fix warnings about int comparisons of different signness Warnings in public headers can trigger warnings-as-errors. --- glslang/Include/Types.h | 2 +- gtests/VkRelaxed.FromFile.cpp | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 04250843aa..202e69352d 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -2376,7 +2376,7 @@ class TType { return false; // Compare the names and types of all the members, which have to match - for (int li = 0, ri = 0; li < structure->size() || ri < right.structure->size(); ++li, ++ri) { + for (size_t li = 0, ri = 0; li < structure->size() || ri < right.structure->size(); ++li, ++ri) { if (li < structure->size() && ri < right.structure->size()) { if ((*structure)[li].type->getFieldName() == (*right.structure)[ri].type->getFieldName()) { if (*(*structure)[li].type != *(*right.structure)[ri].type) diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp index 32e3c29b88..777134d913 100644 --- a/gtests/VkRelaxed.FromFile.cpp +++ b/gtests/VkRelaxed.FromFile.cpp @@ -234,7 +234,7 @@ TEST_P(VulkanRelaxedTest, FromFile) if (!resourceSetBindings.empty()) { assert(resourceSetBindings.size() == fileNames.size()); - for (int i = 0; i < shaders.size(); i++) + for (size_t i = 0; i < shaders.size(); i++) shaders[i]->setResourceSetBinding(resourceSetBindings[i]); } @@ -302,4 +302,4 @@ INSTANTIATE_TEST_SUITE_P( } // anonymous namespace } // namespace glslangtest -#endif \ No newline at end of file +#endif From 97dfbe2c4be4dc18ee2b9e814e38f700d673813e Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Fri, 26 Mar 2021 15:39:34 -0600 Subject: [PATCH 136/365] Update minimum SPIR-V requirement Require SPIR-V 1.3 when using GL_EXT_buffer_reference. Migrate tests to SPIR-V 1.3 fixture as necessary. Fix extension table key. Fix whitespace. --- Test/baseResults/spv.bufferhandle1.frag.out | 3 +- Test/baseResults/spv.bufferhandle10.frag.out | 3 +- Test/baseResults/spv.bufferhandle11.frag.out | 3 +- Test/baseResults/spv.bufferhandle12.frag.out | 4 +- Test/baseResults/spv.bufferhandle13.frag.out | 3 +- Test/baseResults/spv.bufferhandle14.frag.out | 2 +- Test/baseResults/spv.bufferhandle15.frag.out | 3 +- Test/baseResults/spv.bufferhandle16.frag.out | 2 +- Test/baseResults/spv.bufferhandle18.frag.out | 2 +- Test/baseResults/spv.bufferhandle2.frag.out | 3 +- Test/baseResults/spv.bufferhandle3.frag.out | 3 +- Test/baseResults/spv.bufferhandle4.frag.out | 3 +- Test/baseResults/spv.bufferhandle5.frag.out | 2 +- Test/baseResults/spv.bufferhandle6.frag.out | 3 +- Test/baseResults/spv.bufferhandle7.frag.out | 3 +- Test/baseResults/spv.bufferhandle8.frag.out | 3 +- Test/baseResults/spv.bufferhandle9.frag.out | 3 +- .../spv.bufferhandleUvec2.frag.out | 3 +- Test/baseResults/spv.coopmat.comp.out | 4 +- Test/baseResults/spv.intcoopmat.comp.out | 3 +- glslang/MachineIndependent/Versions.cpp | 7 +-- gtests/Spv.FromFile.cpp | 46 +++++++++---------- 22 files changed, 47 insertions(+), 64 deletions(-) diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out index b49c129630..68dd483371 100644 --- a/Test/baseResults/spv.bufferhandle1.frag.out +++ b/Test/baseResults/spv.bufferhandle1.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle1.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 52 @@ -7,7 +7,6 @@ spv.bufferhandle1.frag Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT VulkanKHR diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out index f9ab60d290..a376aefb9a 100644 --- a/Test/baseResults/spv.bufferhandle10.frag.out +++ b/Test/baseResults/spv.bufferhandle10.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle10.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 40 @@ -7,7 +7,6 @@ spv.bufferhandle10.frag Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT VulkanKHR diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out index 9dd1c7b84a..5d0e3a06ea 100644 --- a/Test/baseResults/spv.bufferhandle11.frag.out +++ b/Test/baseResults/spv.bufferhandle11.frag.out @@ -2,7 +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;" -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 61 @@ -11,7 +11,6 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_8bit_storage" Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out index 7cd5cb5e4d..b5473488b6 100644 --- a/Test/baseResults/spv.bufferhandle12.frag.out +++ b/Test/baseResults/spv.bufferhandle12.frag.out @@ -2,16 +2,14 @@ spv.bufferhandle12.frag WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: "precision mediump int; precision highp float;" -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 183 Capability Shader Capability StorageUniformBufferBlock16 Capability PhysicalStorageBufferAddressesEXT - Extension "SPV_KHR_16bit_storage" Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out index 5ce24acd38..491141ac75 100644 --- a/Test/baseResults/spv.bufferhandle13.frag.out +++ b/Test/baseResults/spv.bufferhandle13.frag.out @@ -1,12 +1,11 @@ spv.bufferhandle13.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 58 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out index 34df7538c9..5fef7ba0e5 100644 --- a/Test/baseResults/spv.bufferhandle14.frag.out +++ b/Test/baseResults/spv.bufferhandle14.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle14.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 46 diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out index ab1b4dbaef..5d619e2dcb 100644 --- a/Test/baseResults/spv.bufferhandle15.frag.out +++ b/Test/baseResults/spv.bufferhandle15.frag.out @@ -2,14 +2,13 @@ spv.bufferhandle15.frag WARNING: 0:16: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: "precision mediump int; precision highp float;" -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 60 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 37 diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out index a9d9dcf265..14f960990a 100644 --- a/Test/baseResults/spv.bufferhandle16.frag.out +++ b/Test/baseResults/spv.bufferhandle16.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle16.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 48 diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out index 59ad6d02be..ea4061d63b 100644 --- a/Test/baseResults/spv.bufferhandle18.frag.out +++ b/Test/baseResults/spv.bufferhandle18.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle18.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 196 diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out index e20f3b7f2b..32c8e18a8c 100644 --- a/Test/baseResults/spv.bufferhandle2.frag.out +++ b/Test/baseResults/spv.bufferhandle2.frag.out @@ -1,12 +1,11 @@ spv.bufferhandle2.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 45 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out index 65ad1ca6fa..429a857e27 100644 --- a/Test/baseResults/spv.bufferhandle3.frag.out +++ b/Test/baseResults/spv.bufferhandle3.frag.out @@ -1,12 +1,11 @@ spv.bufferhandle3.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 50 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 42 diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out index e06bca4e8b..a441f7bf83 100644 --- a/Test/baseResults/spv.bufferhandle4.frag.out +++ b/Test/baseResults/spv.bufferhandle4.frag.out @@ -1,12 +1,11 @@ spv.bufferhandle4.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 61 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out index bf4d3a2ab3..ebd922c6c3 100644 --- a/Test/baseResults/spv.bufferhandle5.frag.out +++ b/Test/baseResults/spv.bufferhandle5.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle5.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 22 diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out index abc9187c84..9367d90937 100644 --- a/Test/baseResults/spv.bufferhandle6.frag.out +++ b/Test/baseResults/spv.bufferhandle6.frag.out @@ -1,12 +1,11 @@ spv.bufferhandle6.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 165 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 154 diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out index 4282a3622c..65903c2d77 100644 --- a/Test/baseResults/spv.bufferhandle7.frag.out +++ b/Test/baseResults/spv.bufferhandle7.frag.out @@ -1,12 +1,11 @@ spv.bufferhandle7.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 24 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out index 65d4665324..d3725d4e6c 100644 --- a/Test/baseResults/spv.bufferhandle8.frag.out +++ b/Test/baseResults/spv.bufferhandle8.frag.out @@ -1,12 +1,11 @@ spv.bufferhandle8.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 27 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out index 1e5091c2ef..24dcc4ad26 100644 --- a/Test/baseResults/spv.bufferhandle9.frag.out +++ b/Test/baseResults/spv.bufferhandle9.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle9.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 56 @@ -7,7 +7,6 @@ spv.bufferhandle9.frag Capability Int64 Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 16 19 diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out index fbdbb6aa30..2d4d279e8c 100644 --- a/Test/baseResults/spv.bufferhandleUvec2.frag.out +++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out @@ -1,12 +1,11 @@ spv.bufferhandleUvec2.frag -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 71 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 16 19 diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out index 0a609df18a..16e0c7641c 100644 --- a/Test/baseResults/spv.coopmat.comp.out +++ b/Test/baseResults/spv.coopmat.comp.out @@ -1,5 +1,5 @@ spv.coopmat.comp -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 228 @@ -9,9 +9,7 @@ spv.coopmat.comp Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT Capability CooperativeMatrixNV - Extension "SPV_KHR_16bit_storage" Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" Extension "SPV_NV_cooperative_matrix" 1: ExtInstImport "GLSL.std.450" diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out index 6a69743234..6ea7127136 100644 --- a/Test/baseResults/spv.intcoopmat.comp.out +++ b/Test/baseResults/spv.intcoopmat.comp.out @@ -1,5 +1,5 @@ spv.intcoopmat.comp -// Module Version 10000 +// Module Version 10300 // Generated by (magic number): 8000a // Id's are bound by 262 @@ -12,7 +12,6 @@ spv.intcoopmat.comp Capability CooperativeMatrixNV Extension "SPV_KHR_8bit_storage" Extension "SPV_KHR_physical_storage_buffer" - Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" Extension "SPV_NV_cooperative_matrix" 1: ExtInstImport "GLSL.std.450" diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 7554bfd769..804cf2fb65 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -165,12 +165,13 @@ void TParseVersions::initializeExtensionBehavior() EShTargetLanguageVersion minSpvVersion; } extensionData; - const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4} }; + const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4}, + {E_GL_EXT_buffer_reference, EShTargetSpv_1_3} }; for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) { // Add only extensions which require > spv1.0 to save space in map if (exts[ii].minSpvVersion > EShTargetSpv_1_0) { - extensionMinSpv[E_GL_EXT_ray_tracing] = exts[ii].minSpvVersion; + extensionMinSpv[exts[ii].extensionName] = exts[ii].minSpvVersion; } } @@ -875,7 +876,7 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co checkExtensionStage(getCurrentLoc(), extension); // check if extension has additional requirements - extensionRequires(getCurrentLoc(), extension ,behaviorString); + extensionRequires(getCurrentLoc(), extension, behaviorString); // update the requested extension updateExtensionBehavior(extension, behavior); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 5456fb8934..af301ad793 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -289,27 +289,6 @@ INSTANTIATE_TEST_SUITE_P( "spv.bool.vert", "spv.boolInBlock.frag", "spv.branch-return.vert", - "spv.bufferhandle1.frag", - "spv.bufferhandle10.frag", - "spv.bufferhandle11.frag", - "spv.bufferhandle12.frag", - "spv.bufferhandle13.frag", - "spv.bufferhandle14.frag", - "spv.bufferhandle15.frag", - "spv.bufferhandle16.frag", - "spv.bufferhandle17_Errors.frag", - "spv.bufferhandle18.frag", - "spv.bufferhandle19_Errors.frag", - "spv.bufferhandle2.frag", - "spv.bufferhandle3.frag", - "spv.bufferhandle4.frag", - "spv.bufferhandle5.frag", - "spv.bufferhandle6.frag", - "spv.bufferhandle7.frag", - "spv.bufferhandle8.frag", - "spv.bufferhandle9.frag", - "spv.bufferhandleUvec2.frag", - "spv.bufferhandle_Error.frag", "spv.builtInXFB.vert", "spv.conditionalDemote.frag", "spv.conditionalDiscard.frag", @@ -318,7 +297,6 @@ INSTANTIATE_TEST_SUITE_P( "spv.constConstruct.vert", "spv.controlFlowAttributes.frag", "spv.conversion.frag", - "spv.coopmat.comp", "spv.coopmat_Error.comp", "spv.dataOut.frag", "spv.dataOutIndirect.frag", @@ -353,7 +331,6 @@ INSTANTIATE_TEST_SUITE_P( "spv.GeometryShaderPassthrough.geom", "spv.interpOps.frag", "spv.int64.frag", - "spv.intcoopmat.comp", "spv.intOps.vert", "spv.layer.tese", "spv.layoutNested.vert", @@ -493,6 +470,28 @@ INSTANTIATE_TEST_SUITE_P( "spv.1.3.8bitstorage-ubo.vert", "spv.1.3.8bitstorage-ssbo.vert", "spv.1.3.coopmat.comp", + "spv.bufferhandle1.frag", + "spv.bufferhandle10.frag", + "spv.bufferhandle11.frag", + "spv.bufferhandle12.frag", + "spv.bufferhandle13.frag", + "spv.bufferhandle14.frag", + "spv.bufferhandle15.frag", + "spv.bufferhandle16.frag", + "spv.bufferhandle17_Errors.frag", + "spv.bufferhandle18.frag", + "spv.bufferhandle19_Errors.frag", + "spv.bufferhandle2.frag", + "spv.bufferhandle3.frag", + "spv.bufferhandle4.frag", + "spv.bufferhandle5.frag", + "spv.bufferhandle6.frag", + "spv.bufferhandle7.frag", + "spv.bufferhandle8.frag", + "spv.bufferhandle9.frag", + "spv.bufferhandleUvec2.frag", + "spv.bufferhandle_Error.frag", + "spv.coopmat.comp", "spv.deviceGroup.frag", "spv.drawParams.vert", "spv.int8.frag", @@ -501,6 +500,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.explicittypes.frag", "spv.float32.frag", "spv.float64.frag", + "spv.intcoopmat.comp", "spv.memoryScopeSemantics.comp", "spv.memoryScopeSemantics_Error.comp", "spv.multiView.frag", From 18cfc3f1068dc0587f975581c14ea03e6f302088 Mon Sep 17 00:00:00 2001 From: Pankaj Mistry <63069047+pmistryNV@users.noreply.github.com> Date: Wed, 24 Mar 2021 12:52:23 -0700 Subject: [PATCH 137/365] For bug #2580: sparseTextureGatherOffsetsARB should only take constant offsets. --- Test/450.frag | 25 + Test/baseResults/450.frag.out | 144 +- Test/baseResults/spv.float16Fetch.frag.out | 4300 ++++++++++--------- Test/baseResults/spv.sparseTexture.frag.out | 229 +- Test/spv.float16Fetch.frag | 27 +- Test/spv.sparseTexture.frag | 9 +- glslang/MachineIndependent/ParseHelper.cpp | 8 +- 7 files changed, 2441 insertions(+), 2301 deletions(-) diff --git a/Test/450.frag b/Test/450.frag index 076d0b3a96..abab34d710 100644 --- a/Test/450.frag +++ b/Test/450.frag @@ -48,6 +48,31 @@ void foo() float f = imageAtomicExchange(i2dmsa, ivec3(in3), 2, 4.5); } +#extension GL_ARB_sparse_texture2: enable + +uniform sampler2D s2D; +uniform isampler2DArray is2DArray; +uniform sampler2DRectShadow s2DRectShadow; + +in flat ivec2 offsets[4]; +in vec2 c2; +in vec3 c3; + +void testOffsets() +{ + vec4 texel = vec4(0.0); + ivec4 itexel = ivec4(0); + const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); + sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel); + sparseTextureGatherOffsetsARB(is2DArray, c3, constOffsets, itexel, 2); + sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, constOffsets, texel); + + sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel); // Error : Non constant offsets + sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2); // Error : Non constant offsets + sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel); // Error : Non constant offsets + +} + in float gl_CullDistance[6]; float cull(int i) diff --git a/Test/baseResults/450.frag.out b/Test/baseResults/450.frag.out index 9cbb4cbd08..ec184ac9e4 100644 --- a/Test/baseResults/450.frag.out +++ b/Test/baseResults/450.frag.out @@ -1,10 +1,14 @@ 450.frag -ERROR: 0:63: 'location' : cannot use in a block array where new locations are needed for each block element -ERROR: 0:68: 'early_fragment_tests' : can only apply to a standalone qualifier -ERROR: 2 compilation errors. No code generated. +ERROR: 0:70: 'offsets' : argument must be compile-time constant +ERROR: 0:71: 'offsets' : argument must be compile-time constant +ERROR: 0:72: 'offsets' : argument must be compile-time constant +ERROR: 0:88: 'location' : cannot use in a block array where new locations are needed for each block element +ERROR: 0:93: 'early_fragment_tests' : can only apply to a standalone qualifier +ERROR: 5 compilation errors. No code generated. Shader version: 450 +Requested GL_ARB_sparse_texture2 ERROR: node is still EOpNull! 0:8 Function Definition: main( ( global void) 0:8 Function Parameters: @@ -133,26 +137,107 @@ ERROR: node is still EOpNull! 0:48 2 (const int) 0:48 Constant: 0:48 4.500000 -0:53 Function Definition: cull(i1; ( global float) -0:53 Function Parameters: -0:53 'i' ( in int) -0:55 Sequence -0:55 Branch: Return with expression -0:55 Test condition and select ( temp float) -0:55 Condition -0:55 Compare Greater Than or Equal ( temp bool) -0:55 'i' ( in int) -0:55 Constant: -0:55 6 (const int) -0:55 true case -0:55 direct index ( smooth temp float CullDistance) -0:55 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) -0:55 Constant: -0:55 5 (const int) -0:55 false case -0:55 indirect index ( smooth temp float CullDistance) -0:55 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) -0:55 'i' ( in int) +0:61 Function Definition: testOffsets( ( global void) +0:61 Function Parameters: +0:63 Sequence +0:63 Sequence +0:63 move second child to first child ( temp 4-component vector of float) +0:63 'texel' ( temp 4-component vector of float) +0:63 Constant: +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 +0:64 Sequence +0:64 move second child to first child ( temp 4-component vector of int) +0:64 'itexel' ( temp 4-component vector of int) +0:64 Constant: +0:64 0 (const int) +0:64 0 (const int) +0:64 0 (const int) +0:64 0 (const int) +0:66 sparseTextureGatherOffsets ( global int) +0:66 's2D' ( uniform sampler2D) +0:66 'c2' ( smooth in 2-component vector of float) +0:66 Constant: +0:66 1 (const int) +0:66 2 (const int) +0:66 3 (const int) +0:66 4 (const int) +0:66 15 (const int) +0:66 16 (const int) +0:66 -2 (const int) +0:66 0 (const int) +0:66 'texel' ( temp 4-component vector of float) +0:67 sparseTextureGatherOffsets ( global int) +0:67 'is2DArray' ( uniform isampler2DArray) +0:67 'c3' ( smooth in 3-component vector of float) +0:67 Constant: +0:67 1 (const int) +0:67 2 (const int) +0:67 3 (const int) +0:67 4 (const int) +0:67 15 (const int) +0:67 16 (const int) +0:67 -2 (const int) +0:67 0 (const int) +0:67 'itexel' ( temp 4-component vector of int) +0:67 Constant: +0:67 2 (const int) +0:68 sparseTextureGatherOffsets ( global int) +0:68 's2DRectShadow' ( uniform sampler2DRectShadow) +0:68 'c2' ( smooth in 2-component vector of float) +0:68 Constant: +0:68 2.000000 +0:68 Constant: +0:68 1 (const int) +0:68 2 (const int) +0:68 3 (const int) +0:68 4 (const int) +0:68 15 (const int) +0:68 16 (const int) +0:68 -2 (const int) +0:68 0 (const int) +0:68 'texel' ( temp 4-component vector of float) +0:70 sparseTextureGatherOffsets ( global int) +0:70 's2D' ( uniform sampler2D) +0:70 'c2' ( smooth in 2-component vector of float) +0:70 'offsets' ( flat in 4-element array of 2-component vector of int) +0:70 'texel' ( temp 4-component vector of float) +0:71 sparseTextureGatherOffsets ( global int) +0:71 'is2DArray' ( uniform isampler2DArray) +0:71 'c3' ( smooth in 3-component vector of float) +0:71 'offsets' ( flat in 4-element array of 2-component vector of int) +0:71 'itexel' ( temp 4-component vector of int) +0:71 Constant: +0:71 2 (const int) +0:72 sparseTextureGatherOffsets ( global int) +0:72 's2DRectShadow' ( uniform sampler2DRectShadow) +0:72 'c2' ( smooth in 2-component vector of float) +0:72 Constant: +0:72 2.000000 +0:72 'offsets' ( flat in 4-element array of 2-component vector of int) +0:72 'texel' ( temp 4-component vector of float) +0:78 Function Definition: cull(i1; ( global float) +0:78 Function Parameters: +0:78 'i' ( in int) +0:80 Sequence +0:80 Branch: Return with expression +0:80 Test condition and select ( temp float) +0:80 Condition +0:80 Compare Greater Than or Equal ( temp bool) +0:80 'i' ( in int) +0:80 Constant: +0:80 6 (const int) +0:80 true case +0:80 direct index ( smooth temp float CullDistance) +0:80 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) +0:80 Constant: +0:80 5 (const int) +0:80 false case +0:80 indirect index ( smooth temp float CullDistance) +0:80 'gl_CullDistance' ( smooth in 6-element array of float CullDistance) +0:80 'i' ( in int) 0:? Linker Objects 0:? 'in1' ( smooth in float) 0:? 'in2' ( smooth in 2-component vector of float) @@ -163,6 +248,12 @@ ERROR: node is still EOpNull! 0:? 'us2dmsa' ( uniform usampler2DMSArray) 0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS) 0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) +0:? 's2D' ( uniform sampler2D) +0:? 'is2DArray' ( uniform isampler2DArray) +0:? 's2DRectShadow' ( uniform sampler2DRectShadow) +0:? 'offsets' ( flat in 4-element array of 2-component vector of int) +0:? 'c2' ( smooth in 2-component vector of float) +0:? 'c3' ( smooth in 3-component vector of float) 0:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m}) 0:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g}) 0:? 'f' ( smooth in float) @@ -172,6 +263,7 @@ Linked fragment stage: Shader version: 450 +Requested GL_ARB_sparse_texture2 ERROR: node is still EOpNull! 0:8 Function Definition: main( ( global void) 0:8 Function Parameters: @@ -279,6 +371,12 @@ ERROR: node is still EOpNull! 0:? 'us2dmsa' ( uniform usampler2DMSArray) 0:? 'ii2dms' (layout( rgba32i) uniform iimage2DMS) 0:? 'i2dmsa' (layout( rgba32f) uniform image2DMSArray) +0:? 's2D' ( uniform sampler2D) +0:? 'is2DArray' ( uniform isampler2DArray) +0:? 's2DRectShadow' ( uniform sampler2DRectShadow) +0:? 'offsets' ( flat in 4-element array of 2-component vector of int) +0:? 'c2' ( smooth in 2-component vector of float) +0:? 'c3' ( smooth in 3-component vector of float) 0:? 'bInst1' ( in block{layout( location=6) in float f, layout( location=7) in float g, layout( location=8) in 4X4 matrix of float m}) 0:? 'bInst2' ( in 3-element array of block{layout( location=12) in float f, layout( location=13) in float g}) 0:? 'f' ( smooth in float) diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out index 38c54784f0..3b2c36fa5a 100644 --- a/Test/baseResults/spv.float16Fetch.frag.out +++ b/Test/baseResults/spv.float16Fetch.frag.out @@ -2,7 +2,7 @@ spv.float16Fetch.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 5923 +// Id's are bound by 5933 Capability Shader Capability Float16 @@ -29,7 +29,7 @@ Validation failed Extension "SPV_KHR_16bit_storage" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 128 135 137 148 156 169 177 215 251 309 565 572 1393 1401 1409 1417 1425 1433 4257 4264 5913 5922 + EntryPoint Fragment 4 "main" 128 135 137 148 156 169 177 215 251 309 565 572 1393 1401 1409 1417 1425 1433 4267 4274 5923 5932 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_AMD_gpu_shader_half_float" @@ -173,40 +173,40 @@ Validation failed Name 3832 "texel" Name 3950 "texel" Name 4022 "texel" - Name 4094 "texel" - Name 4146 "texel" - Name 4174 "texel" - Name 4202 "texel" - Name 4254 "texel" - Name 4257 "lodClamp" - Name 4264 "f16lodClamp" - Name 4391 "texel" - Name 4598 "texel" - Name 4674 "texel" - Name 4818 "texel" - Name 4962 "texel" - Name 5188 "texel" - Name 5280 "texel" - Name 5452 "texel" - Name 5454 "t1D" - Name 5458 "s" - Name 5474 "t2D" - Name 5491 "t3D" - Name 5508 "tCube" - Name 5525 "sShadow" - Name 5589 "t1DArray" - Name 5606 "t2DArray" - Name 5623 "tCubeArray" - Name 5681 "t2DRect" - Name 5741 "subpass" - Name 5747 "subpassMS" - Name 5753 "result" - Name 5834 "param" - Name 5913 "fragColor" - Name 5917 "tBuffer" - Name 5919 "t2DMS" - Name 5921 "t2DMSArray" - Name 5922 "bias" + Name 4104 "texel" + Name 4156 "texel" + Name 4184 "texel" + Name 4212 "texel" + Name 4264 "texel" + Name 4267 "lodClamp" + Name 4274 "f16lodClamp" + Name 4401 "texel" + Name 4608 "texel" + Name 4684 "texel" + Name 4828 "texel" + Name 4972 "texel" + Name 5198 "texel" + Name 5290 "texel" + Name 5462 "texel" + Name 5464 "t1D" + Name 5468 "s" + Name 5484 "t2D" + Name 5501 "t3D" + Name 5518 "tCube" + Name 5535 "sShadow" + Name 5599 "t1DArray" + Name 5616 "t2DArray" + Name 5633 "tCubeArray" + Name 5691 "t2DRect" + Name 5751 "subpass" + Name 5757 "subpassMS" + Name 5763 "result" + Name 5844 "param" + Name 5923 "fragColor" + Name 5927 "tBuffer" + Name 5929 "t2DMS" + Name 5931 "t2DMSArray" + Name 5932 "bias" Decorate 125(s1D) DescriptorSet 0 Decorate 125(s1D) Binding 0 Decorate 128(c1) Location 0 @@ -283,42 +283,42 @@ Validation failed Decorate 3036(i2DMS) Binding 9 Decorate 3045(i2DMSArray) DescriptorSet 1 Decorate 3045(i2DMSArray) Binding 10 - Decorate 4257(lodClamp) Location 7 - Decorate 4264(f16lodClamp) Location 17 - Decorate 5454(t1D) DescriptorSet 2 - Decorate 5454(t1D) Binding 0 - Decorate 5458(s) DescriptorSet 2 - Decorate 5458(s) Binding 11 - Decorate 5474(t2D) DescriptorSet 2 - Decorate 5474(t2D) Binding 1 - Decorate 5491(t3D) DescriptorSet 2 - Decorate 5491(t3D) Binding 2 - Decorate 5508(tCube) DescriptorSet 2 - Decorate 5508(tCube) Binding 4 - Decorate 5525(sShadow) DescriptorSet 2 - Decorate 5525(sShadow) Binding 12 - Decorate 5589(t1DArray) DescriptorSet 2 - Decorate 5589(t1DArray) Binding 5 - Decorate 5606(t2DArray) DescriptorSet 2 - Decorate 5606(t2DArray) Binding 6 - Decorate 5623(tCubeArray) DescriptorSet 2 - Decorate 5623(tCubeArray) Binding 7 - Decorate 5681(t2DRect) DescriptorSet 2 - Decorate 5681(t2DRect) Binding 3 - Decorate 5741(subpass) DescriptorSet 3 - Decorate 5741(subpass) Binding 0 - Decorate 5741(subpass) InputAttachmentIndex 0 - Decorate 5747(subpassMS) DescriptorSet 3 - Decorate 5747(subpassMS) Binding 1 - Decorate 5747(subpassMS) InputAttachmentIndex 0 - Decorate 5913(fragColor) Location 0 - Decorate 5917(tBuffer) DescriptorSet 2 - Decorate 5917(tBuffer) Binding 8 - Decorate 5919(t2DMS) DescriptorSet 2 - Decorate 5919(t2DMS) Binding 9 - Decorate 5921(t2DMSArray) DescriptorSet 2 - Decorate 5921(t2DMSArray) Binding 10 - Decorate 5922(bias) Location 6 + Decorate 4267(lodClamp) Location 7 + Decorate 4274(f16lodClamp) Location 17 + Decorate 5464(t1D) DescriptorSet 2 + Decorate 5464(t1D) Binding 0 + Decorate 5468(s) DescriptorSet 2 + Decorate 5468(s) Binding 11 + Decorate 5484(t2D) DescriptorSet 2 + Decorate 5484(t2D) Binding 1 + Decorate 5501(t3D) DescriptorSet 2 + Decorate 5501(t3D) Binding 2 + Decorate 5518(tCube) DescriptorSet 2 + Decorate 5518(tCube) Binding 4 + Decorate 5535(sShadow) DescriptorSet 2 + Decorate 5535(sShadow) Binding 12 + Decorate 5599(t1DArray) DescriptorSet 2 + Decorate 5599(t1DArray) Binding 5 + Decorate 5616(t2DArray) DescriptorSet 2 + Decorate 5616(t2DArray) Binding 6 + Decorate 5633(tCubeArray) DescriptorSet 2 + Decorate 5633(tCubeArray) Binding 7 + Decorate 5691(t2DRect) DescriptorSet 2 + Decorate 5691(t2DRect) Binding 3 + Decorate 5751(subpass) DescriptorSet 3 + Decorate 5751(subpass) Binding 0 + Decorate 5751(subpass) InputAttachmentIndex 0 + Decorate 5757(subpassMS) DescriptorSet 3 + Decorate 5757(subpassMS) Binding 1 + Decorate 5757(subpassMS) InputAttachmentIndex 0 + Decorate 5923(fragColor) Location 0 + Decorate 5927(tBuffer) DescriptorSet 2 + Decorate 5927(tBuffer) Binding 8 + Decorate 5929(t2DMS) DescriptorSet 2 + Decorate 5929(t2DMS) Binding 9 + Decorate 5931(t2DMSArray) DescriptorSet 2 + Decorate 5931(t2DMSArray) Binding 10 + Decorate 5932(bias) Location 6 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 16 @@ -491,258 +491,268 @@ Validation failed 3045(i2DMSArray): 3044(ptr) Variable UniformConstant 3102(ResType): TypeStruct 47(int) 7(f16vec4) 3138(ResType): TypeStruct 47(int) 6(float16_t) - 4257(lodClamp): 127(ptr) Variable Input -4264(f16lodClamp): 134(ptr) Variable Input - 5453: TypePointer UniformConstant 122 - 5454(t1D): 5453(ptr) Variable UniformConstant - 5456: TypeSampler - 5457: TypePointer UniformConstant 5456 - 5458(s): 5457(ptr) Variable UniformConstant - 5473: TypePointer UniformConstant 142 - 5474(t2D): 5473(ptr) Variable UniformConstant - 5490: TypePointer UniformConstant 162 - 5491(t3D): 5490(ptr) Variable UniformConstant - 5507: TypePointer UniformConstant 183 - 5508(tCube): 5507(ptr) Variable UniformConstant - 5525(sShadow): 5457(ptr) Variable UniformConstant - 5588: TypePointer UniformConstant 268 - 5589(t1DArray): 5588(ptr) Variable UniformConstant - 5605: TypePointer UniformConstant 283 - 5606(t2DArray): 5605(ptr) Variable UniformConstant - 5622: TypePointer UniformConstant 298 -5623(tCubeArray): 5622(ptr) Variable UniformConstant - 5680: TypePointer UniformConstant 356 - 5681(t2DRect): 5680(ptr) Variable UniformConstant - 5739: TypeImage 6(float16_t) SubpassData nonsampled format:Unknown - 5740: TypePointer UniformConstant 5739 - 5741(subpass): 5740(ptr) Variable UniformConstant - 5743: 721(ivec2) ConstantComposite 2187 2187 - 5745: TypeImage 6(float16_t) SubpassData multi-sampled nonsampled format:Unknown - 5746: TypePointer UniformConstant 5745 - 5747(subpassMS): 5746(ptr) Variable UniformConstant - 5912: TypePointer Output 249(fvec4) - 5913(fragColor): 5912(ptr) Variable Output - 5916: TypePointer UniformConstant 1297 - 5917(tBuffer): 5916(ptr) Variable UniformConstant - 5918: TypePointer UniformConstant 1308 - 5919(t2DMS): 5918(ptr) Variable UniformConstant - 5920: TypePointer UniformConstant 1319 -5921(t2DMSArray): 5920(ptr) Variable UniformConstant - 5922(bias): 127(ptr) Variable Input + 4025: 721(ivec2) ConstantComposite 709 1326 + 4026: 47(int) Constant 3 + 4027: 47(int) Constant 4 + 4028: 721(ivec2) ConstantComposite 4026 4027 + 4029: 47(int) Constant 15 + 4030: 47(int) Constant 16 + 4031: 721(ivec2) ConstantComposite 4029 4030 + 4032: 47(int) Constant 4294967294 + 4033: 721(ivec2) ConstantComposite 4032 2187 + 4034: 2379 ConstantComposite 4025 4028 4031 4033 + 4267(lodClamp): 127(ptr) Variable Input +4274(f16lodClamp): 134(ptr) Variable Input + 5463: TypePointer UniformConstant 122 + 5464(t1D): 5463(ptr) Variable UniformConstant + 5466: TypeSampler + 5467: TypePointer UniformConstant 5466 + 5468(s): 5467(ptr) Variable UniformConstant + 5483: TypePointer UniformConstant 142 + 5484(t2D): 5483(ptr) Variable UniformConstant + 5500: TypePointer UniformConstant 162 + 5501(t3D): 5500(ptr) Variable UniformConstant + 5517: TypePointer UniformConstant 183 + 5518(tCube): 5517(ptr) Variable UniformConstant + 5535(sShadow): 5467(ptr) Variable UniformConstant + 5598: TypePointer UniformConstant 268 + 5599(t1DArray): 5598(ptr) Variable UniformConstant + 5615: TypePointer UniformConstant 283 + 5616(t2DArray): 5615(ptr) Variable UniformConstant + 5632: TypePointer UniformConstant 298 +5633(tCubeArray): 5632(ptr) Variable UniformConstant + 5690: TypePointer UniformConstant 356 + 5691(t2DRect): 5690(ptr) Variable UniformConstant + 5749: TypeImage 6(float16_t) SubpassData nonsampled format:Unknown + 5750: TypePointer UniformConstant 5749 + 5751(subpass): 5750(ptr) Variable UniformConstant + 5753: 721(ivec2) ConstantComposite 2187 2187 + 5755: TypeImage 6(float16_t) SubpassData multi-sampled nonsampled format:Unknown + 5756: TypePointer UniformConstant 5755 + 5757(subpassMS): 5756(ptr) Variable UniformConstant + 5922: TypePointer Output 249(fvec4) + 5923(fragColor): 5922(ptr) Variable Output + 5926: TypePointer UniformConstant 1297 + 5927(tBuffer): 5926(ptr) Variable UniformConstant + 5928: TypePointer UniformConstant 1308 + 5929(t2DMS): 5928(ptr) Variable UniformConstant + 5930: TypePointer UniformConstant 1319 +5931(t2DMSArray): 5930(ptr) Variable UniformConstant + 5932(bias): 127(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 5753(result): 64(ptr) Variable Function - 5834(param): 64(ptr) Variable Function - Store 5753(result) 121 - 5754: 7(f16vec4) FunctionCall 9(testTexture() - 5755: 7(f16vec4) Load 5753(result) - 5756: 7(f16vec4) FAdd 5755 5754 - Store 5753(result) 5756 - 5757: 7(f16vec4) FunctionCall 11(testTextureProj() - 5758: 7(f16vec4) Load 5753(result) - 5759: 7(f16vec4) FAdd 5758 5757 - Store 5753(result) 5759 - 5760: 7(f16vec4) FunctionCall 13(testTextureLod() - 5761: 7(f16vec4) Load 5753(result) - 5762: 7(f16vec4) FAdd 5761 5760 - Store 5753(result) 5762 - 5763: 7(f16vec4) FunctionCall 15(testTextureOffset() - 5764: 7(f16vec4) Load 5753(result) - 5765: 7(f16vec4) FAdd 5764 5763 - Store 5753(result) 5765 - 5766: 7(f16vec4) FunctionCall 19(testTextureLodOffset() - 5767: 7(f16vec4) Load 5753(result) - 5768: 7(f16vec4) FAdd 5767 5766 - Store 5753(result) 5768 - 5769: 7(f16vec4) FunctionCall 21(testTextureProjLodOffset() - 5770: 7(f16vec4) Load 5753(result) - 5771: 7(f16vec4) FAdd 5770 5769 - Store 5753(result) 5771 - 5772: 7(f16vec4) FunctionCall 23(testTexelFetch() - 5773: 7(f16vec4) Load 5753(result) - 5774: 7(f16vec4) FAdd 5773 5772 - Store 5753(result) 5774 - 5775: 7(f16vec4) FunctionCall 25(testTexelFetchOffset() - 5776: 7(f16vec4) Load 5753(result) - 5777: 7(f16vec4) FAdd 5776 5775 - Store 5753(result) 5777 - 5778: 7(f16vec4) FunctionCall 27(testTextureGrad() - 5779: 7(f16vec4) Load 5753(result) - 5780: 7(f16vec4) FAdd 5779 5778 - Store 5753(result) 5780 - 5781: 7(f16vec4) FunctionCall 29(testTextureGradOffset() - 5782: 7(f16vec4) Load 5753(result) - 5783: 7(f16vec4) FAdd 5782 5781 - Store 5753(result) 5783 - 5784: 7(f16vec4) FunctionCall 31(testTextureProjGrad() - 5785: 7(f16vec4) Load 5753(result) - 5786: 7(f16vec4) FAdd 5785 5784 - Store 5753(result) 5786 - 5787: 7(f16vec4) FunctionCall 33(testTextureProjGradoffset() - 5788: 7(f16vec4) Load 5753(result) - 5789: 7(f16vec4) FAdd 5788 5787 - Store 5753(result) 5789 - 5790: 7(f16vec4) FunctionCall 35(testTextureGather() - 5791: 7(f16vec4) Load 5753(result) - 5792: 7(f16vec4) FAdd 5791 5790 - Store 5753(result) 5792 - 5793: 7(f16vec4) FunctionCall 37(testTextureGatherOffset() - 5794: 7(f16vec4) Load 5753(result) - 5795: 7(f16vec4) FAdd 5794 5793 - Store 5753(result) 5795 - 5796: 7(f16vec4) FunctionCall 39(testTextureGatherOffsets() - 5797: 7(f16vec4) Load 5753(result) - 5798: 7(f16vec4) FAdd 5797 5796 - Store 5753(result) 5798 - 5799: 7(f16vec4) FunctionCall 41(testTextureGatherLod() - 5800: 7(f16vec4) Load 5753(result) - 5801: 7(f16vec4) FAdd 5800 5799 - Store 5753(result) 5801 - 5802: 7(f16vec4) FunctionCall 43(testTextureGatherLodOffset() - 5803: 7(f16vec4) Load 5753(result) - 5804: 7(f16vec4) FAdd 5803 5802 - Store 5753(result) 5804 - 5805: 7(f16vec4) FunctionCall 45(testTextureGatherLodOffsets() - 5806: 7(f16vec4) Load 5753(result) - 5807: 7(f16vec4) FAdd 5806 5805 - Store 5753(result) 5807 - 5808: 48(ivec4) FunctionCall 50(testTextureSize() - 5809: 7(f16vec4) ConvertSToF 5808 - 5810: 7(f16vec4) Load 5753(result) + 5763(result): 64(ptr) Variable Function + 5844(param): 64(ptr) Variable Function + Store 5763(result) 121 + 5764: 7(f16vec4) FunctionCall 9(testTexture() + 5765: 7(f16vec4) Load 5763(result) + 5766: 7(f16vec4) FAdd 5765 5764 + Store 5763(result) 5766 + 5767: 7(f16vec4) FunctionCall 11(testTextureProj() + 5768: 7(f16vec4) Load 5763(result) + 5769: 7(f16vec4) FAdd 5768 5767 + Store 5763(result) 5769 + 5770: 7(f16vec4) FunctionCall 13(testTextureLod() + 5771: 7(f16vec4) Load 5763(result) + 5772: 7(f16vec4) FAdd 5771 5770 + Store 5763(result) 5772 + 5773: 7(f16vec4) FunctionCall 15(testTextureOffset() + 5774: 7(f16vec4) Load 5763(result) + 5775: 7(f16vec4) FAdd 5774 5773 + Store 5763(result) 5775 + 5776: 7(f16vec4) FunctionCall 19(testTextureLodOffset() + 5777: 7(f16vec4) Load 5763(result) + 5778: 7(f16vec4) FAdd 5777 5776 + Store 5763(result) 5778 + 5779: 7(f16vec4) FunctionCall 21(testTextureProjLodOffset() + 5780: 7(f16vec4) Load 5763(result) + 5781: 7(f16vec4) FAdd 5780 5779 + Store 5763(result) 5781 + 5782: 7(f16vec4) FunctionCall 23(testTexelFetch() + 5783: 7(f16vec4) Load 5763(result) + 5784: 7(f16vec4) FAdd 5783 5782 + Store 5763(result) 5784 + 5785: 7(f16vec4) FunctionCall 25(testTexelFetchOffset() + 5786: 7(f16vec4) Load 5763(result) + 5787: 7(f16vec4) FAdd 5786 5785 + Store 5763(result) 5787 + 5788: 7(f16vec4) FunctionCall 27(testTextureGrad() + 5789: 7(f16vec4) Load 5763(result) + 5790: 7(f16vec4) FAdd 5789 5788 + Store 5763(result) 5790 + 5791: 7(f16vec4) FunctionCall 29(testTextureGradOffset() + 5792: 7(f16vec4) Load 5763(result) + 5793: 7(f16vec4) FAdd 5792 5791 + Store 5763(result) 5793 + 5794: 7(f16vec4) FunctionCall 31(testTextureProjGrad() + 5795: 7(f16vec4) Load 5763(result) + 5796: 7(f16vec4) FAdd 5795 5794 + Store 5763(result) 5796 + 5797: 7(f16vec4) FunctionCall 33(testTextureProjGradoffset() + 5798: 7(f16vec4) Load 5763(result) + 5799: 7(f16vec4) FAdd 5798 5797 + Store 5763(result) 5799 + 5800: 7(f16vec4) FunctionCall 35(testTextureGather() + 5801: 7(f16vec4) Load 5763(result) + 5802: 7(f16vec4) FAdd 5801 5800 + Store 5763(result) 5802 + 5803: 7(f16vec4) FunctionCall 37(testTextureGatherOffset() + 5804: 7(f16vec4) Load 5763(result) + 5805: 7(f16vec4) FAdd 5804 5803 + Store 5763(result) 5805 + 5806: 7(f16vec4) FunctionCall 39(testTextureGatherOffsets() + 5807: 7(f16vec4) Load 5763(result) + 5808: 7(f16vec4) FAdd 5807 5806 + Store 5763(result) 5808 + 5809: 7(f16vec4) FunctionCall 41(testTextureGatherLod() + 5810: 7(f16vec4) Load 5763(result) 5811: 7(f16vec4) FAdd 5810 5809 - Store 5753(result) 5811 - 5812: 53(fvec2) FunctionCall 55(testTextureQueryLod() - 5813:154(f16vec2) FConvert 5812 - 5814: 7(f16vec4) Load 5753(result) - 5815:154(f16vec2) VectorShuffle 5814 5814 0 1 - 5816:154(f16vec2) FAdd 5815 5813 - 5817: 7(f16vec4) Load 5753(result) - 5818: 7(f16vec4) VectorShuffle 5817 5816 4 5 2 3 - Store 5753(result) 5818 - 5819: 47(int) FunctionCall 58(testTextureQueryLevels() - 5820:6(float16_t) ConvertSToF 5819 - 5821: 208(ptr) AccessChain 5753(result) 207 - 5822:6(float16_t) Load 5821 - 5823:6(float16_t) FAdd 5822 5820 - 5824: 208(ptr) AccessChain 5753(result) 207 - Store 5824 5823 - 5825: 47(int) FunctionCall 60(testTextureSamples() - 5826:6(float16_t) ConvertSToF 5825 - 5827: 208(ptr) AccessChain 5753(result) 207 - 5828:6(float16_t) Load 5827 - 5829:6(float16_t) FAdd 5828 5826 - 5830: 208(ptr) AccessChain 5753(result) 207 - Store 5830 5829 - 5831: 7(f16vec4) FunctionCall 62(testImageLoad() - 5832: 7(f16vec4) Load 5753(result) - 5833: 7(f16vec4) FAdd 5832 5831 - Store 5753(result) 5833 - 5835: 7(f16vec4) Load 5753(result) - Store 5834(param) 5835 - 5836: 2 FunctionCall 67(testImageStore(vf164;) 5834(param) - 5837: 7(f16vec4) FunctionCall 69(testSparseTexture() - 5838: 7(f16vec4) Load 5753(result) - 5839: 7(f16vec4) FAdd 5838 5837 - Store 5753(result) 5839 - 5840: 7(f16vec4) FunctionCall 71(testSparseTextureLod() - 5841: 7(f16vec4) Load 5753(result) - 5842: 7(f16vec4) FAdd 5841 5840 - Store 5753(result) 5842 - 5843: 7(f16vec4) FunctionCall 73(testSparseTextureOffset() - 5844: 7(f16vec4) Load 5753(result) - 5845: 7(f16vec4) FAdd 5844 5843 - Store 5753(result) 5845 - 5846: 7(f16vec4) FunctionCall 75(testSparseTextureLodOffset() - 5847: 7(f16vec4) Load 5753(result) - 5848: 7(f16vec4) FAdd 5847 5846 - Store 5753(result) 5848 - 5849: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() - 5850: 7(f16vec4) Load 5753(result) - 5851: 7(f16vec4) FAdd 5850 5849 - Store 5753(result) 5851 - 5852: 7(f16vec4) FunctionCall 79(testSparseTextureGradOffset() - 5853: 7(f16vec4) Load 5753(result) - 5854: 7(f16vec4) FAdd 5853 5852 - Store 5753(result) 5854 - 5855: 7(f16vec4) FunctionCall 81(testSparseTexelFetch() - 5856: 7(f16vec4) Load 5753(result) - 5857: 7(f16vec4) FAdd 5856 5855 - Store 5753(result) 5857 - 5858: 7(f16vec4) FunctionCall 83(testSparseTexelFetchOffset() - 5859: 7(f16vec4) Load 5753(result) - 5860: 7(f16vec4) FAdd 5859 5858 - Store 5753(result) 5860 - 5861: 7(f16vec4) FunctionCall 85(testSparseTextureGather() - 5862: 7(f16vec4) Load 5753(result) - 5863: 7(f16vec4) FAdd 5862 5861 - Store 5753(result) 5863 - 5864: 7(f16vec4) FunctionCall 87(testSparseTextureGatherOffset() - 5865: 7(f16vec4) Load 5753(result) - 5866: 7(f16vec4) FAdd 5865 5864 - Store 5753(result) 5866 - 5867: 7(f16vec4) FunctionCall 89(testSparseTextureGatherOffsets() - 5868: 7(f16vec4) Load 5753(result) - 5869: 7(f16vec4) FAdd 5868 5867 - Store 5753(result) 5869 - 5870: 7(f16vec4) FunctionCall 91(testSparseTextureGatherLod() - 5871: 7(f16vec4) Load 5753(result) - 5872: 7(f16vec4) FAdd 5871 5870 - Store 5753(result) 5872 - 5873: 7(f16vec4) FunctionCall 93(testSparseTextureGatherLodOffset() - 5874: 7(f16vec4) Load 5753(result) - 5875: 7(f16vec4) FAdd 5874 5873 - Store 5753(result) 5875 - 5876: 7(f16vec4) FunctionCall 95(testSparseTextureGatherLodOffsets() - 5877: 7(f16vec4) Load 5753(result) - 5878: 7(f16vec4) FAdd 5877 5876 - Store 5753(result) 5878 - 5879: 7(f16vec4) FunctionCall 97(testSparseImageLoad() - 5880: 7(f16vec4) Load 5753(result) - 5881: 7(f16vec4) FAdd 5880 5879 - Store 5753(result) 5881 - 5882: 7(f16vec4) FunctionCall 99(testSparseTextureClamp() - 5883: 7(f16vec4) Load 5753(result) - 5884: 7(f16vec4) FAdd 5883 5882 - Store 5753(result) 5884 - 5885: 7(f16vec4) FunctionCall 101(testTextureClamp() - 5886: 7(f16vec4) Load 5753(result) - 5887: 7(f16vec4) FAdd 5886 5885 - Store 5753(result) 5887 - 5888: 7(f16vec4) FunctionCall 103(testSparseTextureOffsetClamp() - 5889: 7(f16vec4) Load 5753(result) - 5890: 7(f16vec4) FAdd 5889 5888 - Store 5753(result) 5890 - 5891: 7(f16vec4) FunctionCall 105(testTextureOffsetClamp() - 5892: 7(f16vec4) Load 5753(result) - 5893: 7(f16vec4) FAdd 5892 5891 - Store 5753(result) 5893 - 5894: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() - 5895: 7(f16vec4) Load 5753(result) - 5896: 7(f16vec4) FAdd 5895 5894 - Store 5753(result) 5896 - 5897: 7(f16vec4) FunctionCall 27(testTextureGrad() - 5898: 7(f16vec4) Load 5753(result) - 5899: 7(f16vec4) FAdd 5898 5897 - Store 5753(result) 5899 - 5900: 7(f16vec4) FunctionCall 111(testSparseTextureGradOffsetClamp() - 5901: 7(f16vec4) Load 5753(result) - 5902: 7(f16vec4) FAdd 5901 5900 - Store 5753(result) 5902 - 5903: 7(f16vec4) FunctionCall 113(testTextureGradOffsetClamp() - 5904: 7(f16vec4) Load 5753(result) - 5905: 7(f16vec4) FAdd 5904 5903 - Store 5753(result) 5905 - 5906: 7(f16vec4) FunctionCall 115(testCombinedTextureSampler() - 5907: 7(f16vec4) Load 5753(result) - 5908: 7(f16vec4) FAdd 5907 5906 - Store 5753(result) 5908 - 5909: 7(f16vec4) FunctionCall 117(testSubpassLoad() - 5910: 7(f16vec4) Load 5753(result) - 5911: 7(f16vec4) FAdd 5910 5909 - Store 5753(result) 5911 - 5914: 7(f16vec4) Load 5753(result) - 5915: 249(fvec4) FConvert 5914 - Store 5913(fragColor) 5915 + Store 5763(result) 5811 + 5812: 7(f16vec4) FunctionCall 43(testTextureGatherLodOffset() + 5813: 7(f16vec4) Load 5763(result) + 5814: 7(f16vec4) FAdd 5813 5812 + Store 5763(result) 5814 + 5815: 7(f16vec4) FunctionCall 45(testTextureGatherLodOffsets() + 5816: 7(f16vec4) Load 5763(result) + 5817: 7(f16vec4) FAdd 5816 5815 + Store 5763(result) 5817 + 5818: 48(ivec4) FunctionCall 50(testTextureSize() + 5819: 7(f16vec4) ConvertSToF 5818 + 5820: 7(f16vec4) Load 5763(result) + 5821: 7(f16vec4) FAdd 5820 5819 + Store 5763(result) 5821 + 5822: 53(fvec2) FunctionCall 55(testTextureQueryLod() + 5823:154(f16vec2) FConvert 5822 + 5824: 7(f16vec4) Load 5763(result) + 5825:154(f16vec2) VectorShuffle 5824 5824 0 1 + 5826:154(f16vec2) FAdd 5825 5823 + 5827: 7(f16vec4) Load 5763(result) + 5828: 7(f16vec4) VectorShuffle 5827 5826 4 5 2 3 + Store 5763(result) 5828 + 5829: 47(int) FunctionCall 58(testTextureQueryLevels() + 5830:6(float16_t) ConvertSToF 5829 + 5831: 208(ptr) AccessChain 5763(result) 207 + 5832:6(float16_t) Load 5831 + 5833:6(float16_t) FAdd 5832 5830 + 5834: 208(ptr) AccessChain 5763(result) 207 + Store 5834 5833 + 5835: 47(int) FunctionCall 60(testTextureSamples() + 5836:6(float16_t) ConvertSToF 5835 + 5837: 208(ptr) AccessChain 5763(result) 207 + 5838:6(float16_t) Load 5837 + 5839:6(float16_t) FAdd 5838 5836 + 5840: 208(ptr) AccessChain 5763(result) 207 + Store 5840 5839 + 5841: 7(f16vec4) FunctionCall 62(testImageLoad() + 5842: 7(f16vec4) Load 5763(result) + 5843: 7(f16vec4) FAdd 5842 5841 + Store 5763(result) 5843 + 5845: 7(f16vec4) Load 5763(result) + Store 5844(param) 5845 + 5846: 2 FunctionCall 67(testImageStore(vf164;) 5844(param) + 5847: 7(f16vec4) FunctionCall 69(testSparseTexture() + 5848: 7(f16vec4) Load 5763(result) + 5849: 7(f16vec4) FAdd 5848 5847 + Store 5763(result) 5849 + 5850: 7(f16vec4) FunctionCall 71(testSparseTextureLod() + 5851: 7(f16vec4) Load 5763(result) + 5852: 7(f16vec4) FAdd 5851 5850 + Store 5763(result) 5852 + 5853: 7(f16vec4) FunctionCall 73(testSparseTextureOffset() + 5854: 7(f16vec4) Load 5763(result) + 5855: 7(f16vec4) FAdd 5854 5853 + Store 5763(result) 5855 + 5856: 7(f16vec4) FunctionCall 75(testSparseTextureLodOffset() + 5857: 7(f16vec4) Load 5763(result) + 5858: 7(f16vec4) FAdd 5857 5856 + Store 5763(result) 5858 + 5859: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() + 5860: 7(f16vec4) Load 5763(result) + 5861: 7(f16vec4) FAdd 5860 5859 + Store 5763(result) 5861 + 5862: 7(f16vec4) FunctionCall 79(testSparseTextureGradOffset() + 5863: 7(f16vec4) Load 5763(result) + 5864: 7(f16vec4) FAdd 5863 5862 + Store 5763(result) 5864 + 5865: 7(f16vec4) FunctionCall 81(testSparseTexelFetch() + 5866: 7(f16vec4) Load 5763(result) + 5867: 7(f16vec4) FAdd 5866 5865 + Store 5763(result) 5867 + 5868: 7(f16vec4) FunctionCall 83(testSparseTexelFetchOffset() + 5869: 7(f16vec4) Load 5763(result) + 5870: 7(f16vec4) FAdd 5869 5868 + Store 5763(result) 5870 + 5871: 7(f16vec4) FunctionCall 85(testSparseTextureGather() + 5872: 7(f16vec4) Load 5763(result) + 5873: 7(f16vec4) FAdd 5872 5871 + Store 5763(result) 5873 + 5874: 7(f16vec4) FunctionCall 87(testSparseTextureGatherOffset() + 5875: 7(f16vec4) Load 5763(result) + 5876: 7(f16vec4) FAdd 5875 5874 + Store 5763(result) 5876 + 5877: 7(f16vec4) FunctionCall 89(testSparseTextureGatherOffsets() + 5878: 7(f16vec4) Load 5763(result) + 5879: 7(f16vec4) FAdd 5878 5877 + Store 5763(result) 5879 + 5880: 7(f16vec4) FunctionCall 91(testSparseTextureGatherLod() + 5881: 7(f16vec4) Load 5763(result) + 5882: 7(f16vec4) FAdd 5881 5880 + Store 5763(result) 5882 + 5883: 7(f16vec4) FunctionCall 93(testSparseTextureGatherLodOffset() + 5884: 7(f16vec4) Load 5763(result) + 5885: 7(f16vec4) FAdd 5884 5883 + Store 5763(result) 5885 + 5886: 7(f16vec4) FunctionCall 95(testSparseTextureGatherLodOffsets() + 5887: 7(f16vec4) Load 5763(result) + 5888: 7(f16vec4) FAdd 5887 5886 + Store 5763(result) 5888 + 5889: 7(f16vec4) FunctionCall 97(testSparseImageLoad() + 5890: 7(f16vec4) Load 5763(result) + 5891: 7(f16vec4) FAdd 5890 5889 + Store 5763(result) 5891 + 5892: 7(f16vec4) FunctionCall 99(testSparseTextureClamp() + 5893: 7(f16vec4) Load 5763(result) + 5894: 7(f16vec4) FAdd 5893 5892 + Store 5763(result) 5894 + 5895: 7(f16vec4) FunctionCall 101(testTextureClamp() + 5896: 7(f16vec4) Load 5763(result) + 5897: 7(f16vec4) FAdd 5896 5895 + Store 5763(result) 5897 + 5898: 7(f16vec4) FunctionCall 103(testSparseTextureOffsetClamp() + 5899: 7(f16vec4) Load 5763(result) + 5900: 7(f16vec4) FAdd 5899 5898 + Store 5763(result) 5900 + 5901: 7(f16vec4) FunctionCall 105(testTextureOffsetClamp() + 5902: 7(f16vec4) Load 5763(result) + 5903: 7(f16vec4) FAdd 5902 5901 + Store 5763(result) 5903 + 5904: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() + 5905: 7(f16vec4) Load 5763(result) + 5906: 7(f16vec4) FAdd 5905 5904 + Store 5763(result) 5906 + 5907: 7(f16vec4) FunctionCall 27(testTextureGrad() + 5908: 7(f16vec4) Load 5763(result) + 5909: 7(f16vec4) FAdd 5908 5907 + Store 5763(result) 5909 + 5910: 7(f16vec4) FunctionCall 111(testSparseTextureGradOffsetClamp() + 5911: 7(f16vec4) Load 5763(result) + 5912: 7(f16vec4) FAdd 5911 5910 + Store 5763(result) 5912 + 5913: 7(f16vec4) FunctionCall 113(testTextureGradOffsetClamp() + 5914: 7(f16vec4) Load 5763(result) + 5915: 7(f16vec4) FAdd 5914 5913 + Store 5763(result) 5915 + 5916: 7(f16vec4) FunctionCall 115(testCombinedTextureSampler() + 5917: 7(f16vec4) Load 5763(result) + 5918: 7(f16vec4) FAdd 5917 5916 + Store 5763(result) 5918 + 5919: 7(f16vec4) FunctionCall 117(testSubpassLoad() + 5920: 7(f16vec4) Load 5763(result) + 5921: 7(f16vec4) FAdd 5920 5919 + Store 5763(result) 5921 + 5924: 7(f16vec4) Load 5763(result) + 5925: 249(fvec4) FConvert 5924 + Store 5923(fragColor) 5925 Return FunctionEnd 9(testTexture(): 7(f16vec4) Function None 8 @@ -5123,1949 +5133,1949 @@ Validation failed Store 4022(texel) 121 4023: 143 Load 145(s2D) 4024: 53(fvec2) Load 148(c2) - 4025:3102(ResType) ImageSparseGather 4023 4024 2187 ConstOffsets 2380 - 4026: 7(f16vec4) CompositeExtract 4025 1 - Store 4022(texel) 4026 - 4027: 47(int) CompositeExtract 4025 0 - 4028: 143 Load 145(s2D) - 4029:154(f16vec2) Load 156(f16c2) - 4030:6(float16_t) Load 137(f16bias) - 4031:3102(ResType) ImageSparseGather 4028 4029 2187 Bias ConstOffsets 4030 2380 - 4032: 7(f16vec4) CompositeExtract 4031 1 - Store 4022(texel) 4032 - 4033: 47(int) CompositeExtract 4031 0 - 4034: 284 Load 286(s2DArray) - 4035: 167(fvec3) Load 169(c3) - 4036:3102(ResType) ImageSparseGather 4034 4035 2187 ConstOffsets 2380 - 4037: 7(f16vec4) CompositeExtract 4036 1 - Store 4022(texel) 4037 - 4038: 47(int) CompositeExtract 4036 0 - 4039: 284 Load 286(s2DArray) - 4040:175(f16vec3) Load 177(f16c3) - 4041:6(float16_t) Load 137(f16bias) - 4042:3102(ResType) ImageSparseGather 4039 4040 2187 Bias ConstOffsets 4041 2380 - 4043: 7(f16vec4) CompositeExtract 4042 1 - Store 4022(texel) 4043 - 4044: 47(int) CompositeExtract 4042 0 - 4045: 357 Load 359(s2DRect) - 4046: 53(fvec2) Load 148(c2) - 4047:3102(ResType) ImageSparseGather 4045 4046 2187 ConstOffsets 2380 - 4048: 7(f16vec4) CompositeExtract 4047 1 - Store 4022(texel) 4048 - 4049: 47(int) CompositeExtract 4047 0 - 4050: 357 Load 359(s2DRect) - 4051:154(f16vec2) Load 156(f16c2) - 4052:3102(ResType) ImageSparseGather 4050 4051 2187 ConstOffsets 2380 + 4035:3102(ResType) ImageSparseGather 4023 4024 2187 ConstOffsets 4034 + 4036: 7(f16vec4) CompositeExtract 4035 1 + Store 4022(texel) 4036 + 4037: 47(int) CompositeExtract 4035 0 + 4038: 143 Load 145(s2D) + 4039:154(f16vec2) Load 156(f16c2) + 4040:6(float16_t) Load 137(f16bias) + 4041:3102(ResType) ImageSparseGather 4038 4039 2187 Bias ConstOffsets 4040 4034 + 4042: 7(f16vec4) CompositeExtract 4041 1 + Store 4022(texel) 4042 + 4043: 47(int) CompositeExtract 4041 0 + 4044: 284 Load 286(s2DArray) + 4045: 167(fvec3) Load 169(c3) + 4046:3102(ResType) ImageSparseGather 4044 4045 2187 ConstOffsets 4034 + 4047: 7(f16vec4) CompositeExtract 4046 1 + Store 4022(texel) 4047 + 4048: 47(int) CompositeExtract 4046 0 + 4049: 284 Load 286(s2DArray) + 4050:175(f16vec3) Load 177(f16c3) + 4051:6(float16_t) Load 137(f16bias) + 4052:3102(ResType) ImageSparseGather 4049 4050 2187 Bias ConstOffsets 4051 4034 4053: 7(f16vec4) CompositeExtract 4052 1 Store 4022(texel) 4053 4054: 47(int) CompositeExtract 4052 0 - 4055: 224 Load 226(s2DShadow) + 4055: 357 Load 359(s2DRect) 4056: 53(fvec2) Load 148(c2) - 4057: 52(float) Load 215(compare) - 4058:3102(ResType) ImageSparseDrefGather 4055 4056 4057 ConstOffsets 2380 - 4059: 7(f16vec4) CompositeExtract 4058 1 - Store 4022(texel) 4059 - 4060: 47(int) CompositeExtract 4058 0 - 4061: 224 Load 226(s2DShadow) - 4062:154(f16vec2) Load 156(f16c2) - 4063: 52(float) Load 215(compare) - 4064:3102(ResType) ImageSparseDrefGather 4061 4062 4063 ConstOffsets 2380 - 4065: 7(f16vec4) CompositeExtract 4064 1 - Store 4022(texel) 4065 - 4066: 47(int) CompositeExtract 4064 0 - 4067: 337 Load 339(s2DArrayShadow) - 4068: 167(fvec3) Load 169(c3) - 4069: 52(float) Load 215(compare) - 4070:3102(ResType) ImageSparseDrefGather 4067 4068 4069 ConstOffsets 2380 - 4071: 7(f16vec4) CompositeExtract 4070 1 - Store 4022(texel) 4071 - 4072: 47(int) CompositeExtract 4070 0 - 4073: 337 Load 339(s2DArrayShadow) - 4074:175(f16vec3) Load 177(f16c3) - 4075: 52(float) Load 215(compare) - 4076:3102(ResType) ImageSparseDrefGather 4073 4074 4075 ConstOffsets 2380 - 4077: 7(f16vec4) CompositeExtract 4076 1 - Store 4022(texel) 4077 - 4078: 47(int) CompositeExtract 4076 0 - 4079: 371 Load 373(s2DRectShadow) - 4080: 53(fvec2) Load 148(c2) - 4081: 52(float) Load 215(compare) - 4082:3102(ResType) ImageSparseDrefGather 4079 4080 4081 ConstOffsets 2380 - 4083: 7(f16vec4) CompositeExtract 4082 1 - Store 4022(texel) 4083 - 4084: 47(int) CompositeExtract 4082 0 - 4085: 371 Load 373(s2DRectShadow) - 4086:154(f16vec2) Load 156(f16c2) - 4087: 52(float) Load 215(compare) - 4088:3102(ResType) ImageSparseDrefGather 4085 4086 4087 ConstOffsets 2380 - 4089: 7(f16vec4) CompositeExtract 4088 1 - Store 4022(texel) 4089 - 4090: 47(int) CompositeExtract 4088 0 - 4091: 7(f16vec4) Load 4022(texel) - ReturnValue 4091 + 4057:3102(ResType) ImageSparseGather 4055 4056 2187 ConstOffsets 4034 + 4058: 7(f16vec4) CompositeExtract 4057 1 + Store 4022(texel) 4058 + 4059: 47(int) CompositeExtract 4057 0 + 4060: 357 Load 359(s2DRect) + 4061:154(f16vec2) Load 156(f16c2) + 4062:3102(ResType) ImageSparseGather 4060 4061 2187 ConstOffsets 4034 + 4063: 7(f16vec4) CompositeExtract 4062 1 + Store 4022(texel) 4063 + 4064: 47(int) CompositeExtract 4062 0 + 4065: 224 Load 226(s2DShadow) + 4066: 53(fvec2) Load 148(c2) + 4067: 52(float) Load 215(compare) + 4068:3102(ResType) ImageSparseDrefGather 4065 4066 4067 ConstOffsets 4034 + 4069: 7(f16vec4) CompositeExtract 4068 1 + Store 4022(texel) 4069 + 4070: 47(int) CompositeExtract 4068 0 + 4071: 224 Load 226(s2DShadow) + 4072:154(f16vec2) Load 156(f16c2) + 4073: 52(float) Load 215(compare) + 4074:3102(ResType) ImageSparseDrefGather 4071 4072 4073 ConstOffsets 4034 + 4075: 7(f16vec4) CompositeExtract 4074 1 + Store 4022(texel) 4075 + 4076: 47(int) CompositeExtract 4074 0 + 4077: 337 Load 339(s2DArrayShadow) + 4078: 167(fvec3) Load 169(c3) + 4079: 52(float) Load 215(compare) + 4080:3102(ResType) ImageSparseDrefGather 4077 4078 4079 ConstOffsets 4034 + 4081: 7(f16vec4) CompositeExtract 4080 1 + Store 4022(texel) 4081 + 4082: 47(int) CompositeExtract 4080 0 + 4083: 337 Load 339(s2DArrayShadow) + 4084:175(f16vec3) Load 177(f16c3) + 4085: 52(float) Load 215(compare) + 4086:3102(ResType) ImageSparseDrefGather 4083 4084 4085 ConstOffsets 4034 + 4087: 7(f16vec4) CompositeExtract 4086 1 + Store 4022(texel) 4087 + 4088: 47(int) CompositeExtract 4086 0 + 4089: 371 Load 373(s2DRectShadow) + 4090: 53(fvec2) Load 148(c2) + 4091: 52(float) Load 215(compare) + 4092:3102(ResType) ImageSparseDrefGather 4089 4090 4091 ConstOffsets 4034 + 4093: 7(f16vec4) CompositeExtract 4092 1 + Store 4022(texel) 4093 + 4094: 47(int) CompositeExtract 4092 0 + 4095: 371 Load 373(s2DRectShadow) + 4096:154(f16vec2) Load 156(f16c2) + 4097: 52(float) Load 215(compare) + 4098:3102(ResType) ImageSparseDrefGather 4095 4096 4097 ConstOffsets 4034 + 4099: 7(f16vec4) CompositeExtract 4098 1 + Store 4022(texel) 4099 + 4100: 47(int) CompositeExtract 4098 0 + 4101: 7(f16vec4) Load 4022(texel) + ReturnValue 4101 FunctionEnd 91(testSparseTextureGatherLod(): 7(f16vec4) Function None 8 92: Label - 4094(texel): 64(ptr) Variable Function - Store 4094(texel) 121 - 4095: 143 Load 145(s2D) - 4096: 53(fvec2) Load 148(c2) - 4097: 52(float) Load 565(lod) - 4098:3102(ResType) ImageSparseGather 4095 4096 2187 Lod 4097 - 4099: 7(f16vec4) CompositeExtract 4098 1 - Store 4094(texel) 4099 - 4100: 47(int) CompositeExtract 4098 0 - 4101: 143 Load 145(s2D) - 4102:154(f16vec2) Load 156(f16c2) - 4103:6(float16_t) Load 572(f16lod) - 4104:3102(ResType) ImageSparseGather 4101 4102 2187 Lod 4103 - 4105: 7(f16vec4) CompositeExtract 4104 1 - Store 4094(texel) 4105 - 4106: 47(int) CompositeExtract 4104 0 - 4107: 284 Load 286(s2DArray) - 4108: 167(fvec3) Load 169(c3) - 4109: 52(float) Load 565(lod) - 4110:3102(ResType) ImageSparseGather 4107 4108 2187 Lod 4109 - 4111: 7(f16vec4) CompositeExtract 4110 1 - Store 4094(texel) 4111 - 4112: 47(int) CompositeExtract 4110 0 - 4113: 284 Load 286(s2DArray) - 4114:175(f16vec3) Load 177(f16c3) - 4115:6(float16_t) Load 572(f16lod) - 4116:3102(ResType) ImageSparseGather 4113 4114 2187 Lod 4115 - 4117: 7(f16vec4) CompositeExtract 4116 1 - Store 4094(texel) 4117 - 4118: 47(int) CompositeExtract 4116 0 - 4119: 184 Load 186(sCube) - 4120: 167(fvec3) Load 169(c3) - 4121: 52(float) Load 565(lod) - 4122:3102(ResType) ImageSparseGather 4119 4120 2187 Lod 4121 - 4123: 7(f16vec4) CompositeExtract 4122 1 - Store 4094(texel) 4123 - 4124: 47(int) CompositeExtract 4122 0 - 4125: 184 Load 186(sCube) - 4126:175(f16vec3) Load 177(f16c3) - 4127:6(float16_t) Load 572(f16lod) - 4128:3102(ResType) ImageSparseGather 4125 4126 2187 Lod 4127 - 4129: 7(f16vec4) CompositeExtract 4128 1 - Store 4094(texel) 4129 - 4130: 47(int) CompositeExtract 4128 0 - 4131: 299 Load 301(sCubeArray) - 4132: 249(fvec4) Load 251(c4) - 4133: 52(float) Load 565(lod) - 4134:3102(ResType) ImageSparseGather 4131 4132 2187 Lod 4133 - 4135: 7(f16vec4) CompositeExtract 4134 1 - Store 4094(texel) 4135 - 4136: 47(int) CompositeExtract 4134 0 - 4137: 299 Load 301(sCubeArray) - 4138: 7(f16vec4) Load 309(f16c4) - 4139:6(float16_t) Load 572(f16lod) - 4140:3102(ResType) ImageSparseGather 4137 4138 2187 Lod 4139 - 4141: 7(f16vec4) CompositeExtract 4140 1 - Store 4094(texel) 4141 - 4142: 47(int) CompositeExtract 4140 0 - 4143: 7(f16vec4) Load 4094(texel) - ReturnValue 4143 + 4104(texel): 64(ptr) Variable Function + Store 4104(texel) 121 + 4105: 143 Load 145(s2D) + 4106: 53(fvec2) Load 148(c2) + 4107: 52(float) Load 565(lod) + 4108:3102(ResType) ImageSparseGather 4105 4106 2187 Lod 4107 + 4109: 7(f16vec4) CompositeExtract 4108 1 + Store 4104(texel) 4109 + 4110: 47(int) CompositeExtract 4108 0 + 4111: 143 Load 145(s2D) + 4112:154(f16vec2) Load 156(f16c2) + 4113:6(float16_t) Load 572(f16lod) + 4114:3102(ResType) ImageSparseGather 4111 4112 2187 Lod 4113 + 4115: 7(f16vec4) CompositeExtract 4114 1 + Store 4104(texel) 4115 + 4116: 47(int) CompositeExtract 4114 0 + 4117: 284 Load 286(s2DArray) + 4118: 167(fvec3) Load 169(c3) + 4119: 52(float) Load 565(lod) + 4120:3102(ResType) ImageSparseGather 4117 4118 2187 Lod 4119 + 4121: 7(f16vec4) CompositeExtract 4120 1 + Store 4104(texel) 4121 + 4122: 47(int) CompositeExtract 4120 0 + 4123: 284 Load 286(s2DArray) + 4124:175(f16vec3) Load 177(f16c3) + 4125:6(float16_t) Load 572(f16lod) + 4126:3102(ResType) ImageSparseGather 4123 4124 2187 Lod 4125 + 4127: 7(f16vec4) CompositeExtract 4126 1 + Store 4104(texel) 4127 + 4128: 47(int) CompositeExtract 4126 0 + 4129: 184 Load 186(sCube) + 4130: 167(fvec3) Load 169(c3) + 4131: 52(float) Load 565(lod) + 4132:3102(ResType) ImageSparseGather 4129 4130 2187 Lod 4131 + 4133: 7(f16vec4) CompositeExtract 4132 1 + Store 4104(texel) 4133 + 4134: 47(int) CompositeExtract 4132 0 + 4135: 184 Load 186(sCube) + 4136:175(f16vec3) Load 177(f16c3) + 4137:6(float16_t) Load 572(f16lod) + 4138:3102(ResType) ImageSparseGather 4135 4136 2187 Lod 4137 + 4139: 7(f16vec4) CompositeExtract 4138 1 + Store 4104(texel) 4139 + 4140: 47(int) CompositeExtract 4138 0 + 4141: 299 Load 301(sCubeArray) + 4142: 249(fvec4) Load 251(c4) + 4143: 52(float) Load 565(lod) + 4144:3102(ResType) ImageSparseGather 4141 4142 2187 Lod 4143 + 4145: 7(f16vec4) CompositeExtract 4144 1 + Store 4104(texel) 4145 + 4146: 47(int) CompositeExtract 4144 0 + 4147: 299 Load 301(sCubeArray) + 4148: 7(f16vec4) Load 309(f16c4) + 4149:6(float16_t) Load 572(f16lod) + 4150:3102(ResType) ImageSparseGather 4147 4148 2187 Lod 4149 + 4151: 7(f16vec4) CompositeExtract 4150 1 + Store 4104(texel) 4151 + 4152: 47(int) CompositeExtract 4150 0 + 4153: 7(f16vec4) Load 4104(texel) + ReturnValue 4153 FunctionEnd 93(testSparseTextureGatherLodOffset(): 7(f16vec4) Function None 8 94: Label - 4146(texel): 64(ptr) Variable Function - Store 4146(texel) 121 - 4147: 143 Load 145(s2D) - 4148: 53(fvec2) Load 148(c2) - 4149: 52(float) Load 565(lod) - 4150:3102(ResType) ImageSparseGather 4147 4148 2187 Lod ConstOffset 4149 722 - 4151: 7(f16vec4) CompositeExtract 4150 1 - Store 4146(texel) 4151 - 4152: 47(int) CompositeExtract 4150 0 - 4153: 143 Load 145(s2D) - 4154:154(f16vec2) Load 156(f16c2) - 4155:6(float16_t) Load 572(f16lod) - 4156:3102(ResType) ImageSparseGather 4153 4154 2187 Lod ConstOffset 4155 722 - 4157: 7(f16vec4) CompositeExtract 4156 1 - Store 4146(texel) 4157 - 4158: 47(int) CompositeExtract 4156 0 - 4159: 284 Load 286(s2DArray) - 4160: 167(fvec3) Load 169(c3) - 4161: 52(float) Load 565(lod) - 4162:3102(ResType) ImageSparseGather 4159 4160 2187 Lod ConstOffset 4161 722 - 4163: 7(f16vec4) CompositeExtract 4162 1 - Store 4146(texel) 4163 - 4164: 47(int) CompositeExtract 4162 0 - 4165: 284 Load 286(s2DArray) - 4166:175(f16vec3) Load 177(f16c3) - 4167:6(float16_t) Load 572(f16lod) - 4168:3102(ResType) ImageSparseGather 4165 4166 2187 Lod ConstOffset 4167 722 - 4169: 7(f16vec4) CompositeExtract 4168 1 - Store 4146(texel) 4169 - 4170: 47(int) CompositeExtract 4168 0 - 4171: 7(f16vec4) Load 4146(texel) - ReturnValue 4171 + 4156(texel): 64(ptr) Variable Function + Store 4156(texel) 121 + 4157: 143 Load 145(s2D) + 4158: 53(fvec2) Load 148(c2) + 4159: 52(float) Load 565(lod) + 4160:3102(ResType) ImageSparseGather 4157 4158 2187 Lod ConstOffset 4159 722 + 4161: 7(f16vec4) CompositeExtract 4160 1 + Store 4156(texel) 4161 + 4162: 47(int) CompositeExtract 4160 0 + 4163: 143 Load 145(s2D) + 4164:154(f16vec2) Load 156(f16c2) + 4165:6(float16_t) Load 572(f16lod) + 4166:3102(ResType) ImageSparseGather 4163 4164 2187 Lod ConstOffset 4165 722 + 4167: 7(f16vec4) CompositeExtract 4166 1 + Store 4156(texel) 4167 + 4168: 47(int) CompositeExtract 4166 0 + 4169: 284 Load 286(s2DArray) + 4170: 167(fvec3) Load 169(c3) + 4171: 52(float) Load 565(lod) + 4172:3102(ResType) ImageSparseGather 4169 4170 2187 Lod ConstOffset 4171 722 + 4173: 7(f16vec4) CompositeExtract 4172 1 + Store 4156(texel) 4173 + 4174: 47(int) CompositeExtract 4172 0 + 4175: 284 Load 286(s2DArray) + 4176:175(f16vec3) Load 177(f16c3) + 4177:6(float16_t) Load 572(f16lod) + 4178:3102(ResType) ImageSparseGather 4175 4176 2187 Lod ConstOffset 4177 722 + 4179: 7(f16vec4) CompositeExtract 4178 1 + Store 4156(texel) 4179 + 4180: 47(int) CompositeExtract 4178 0 + 4181: 7(f16vec4) Load 4156(texel) + ReturnValue 4181 FunctionEnd 95(testSparseTextureGatherLodOffsets(): 7(f16vec4) Function None 8 96: Label - 4174(texel): 64(ptr) Variable Function - Store 4174(texel) 121 - 4175: 143 Load 145(s2D) - 4176: 53(fvec2) Load 148(c2) - 4177: 52(float) Load 565(lod) - 4178:3102(ResType) ImageSparseGather 4175 4176 2187 Lod ConstOffsets 4177 2380 - 4179: 7(f16vec4) CompositeExtract 4178 1 - Store 4174(texel) 4179 - 4180: 47(int) CompositeExtract 4178 0 - 4181: 143 Load 145(s2D) - 4182:154(f16vec2) Load 156(f16c2) - 4183:6(float16_t) Load 572(f16lod) - 4184:3102(ResType) ImageSparseGather 4181 4182 2187 Lod ConstOffsets 4183 2380 - 4185: 7(f16vec4) CompositeExtract 4184 1 - Store 4174(texel) 4185 - 4186: 47(int) CompositeExtract 4184 0 - 4187: 284 Load 286(s2DArray) - 4188: 167(fvec3) Load 169(c3) - 4189: 52(float) Load 565(lod) - 4190:3102(ResType) ImageSparseGather 4187 4188 2187 Lod ConstOffsets 4189 2380 - 4191: 7(f16vec4) CompositeExtract 4190 1 - Store 4174(texel) 4191 - 4192: 47(int) CompositeExtract 4190 0 - 4193: 284 Load 286(s2DArray) - 4194:175(f16vec3) Load 177(f16c3) - 4195:6(float16_t) Load 572(f16lod) - 4196:3102(ResType) ImageSparseGather 4193 4194 2187 Lod ConstOffsets 4195 2380 - 4197: 7(f16vec4) CompositeExtract 4196 1 - Store 4174(texel) 4197 - 4198: 47(int) CompositeExtract 4196 0 - 4199: 7(f16vec4) Load 4174(texel) - ReturnValue 4199 + 4184(texel): 64(ptr) Variable Function + Store 4184(texel) 121 + 4185: 143 Load 145(s2D) + 4186: 53(fvec2) Load 148(c2) + 4187: 52(float) Load 565(lod) + 4188:3102(ResType) ImageSparseGather 4185 4186 2187 Lod ConstOffsets 4187 2380 + 4189: 7(f16vec4) CompositeExtract 4188 1 + Store 4184(texel) 4189 + 4190: 47(int) CompositeExtract 4188 0 + 4191: 143 Load 145(s2D) + 4192:154(f16vec2) Load 156(f16c2) + 4193:6(float16_t) Load 572(f16lod) + 4194:3102(ResType) ImageSparseGather 4191 4192 2187 Lod ConstOffsets 4193 2380 + 4195: 7(f16vec4) CompositeExtract 4194 1 + Store 4184(texel) 4195 + 4196: 47(int) CompositeExtract 4194 0 + 4197: 284 Load 286(s2DArray) + 4198: 167(fvec3) Load 169(c3) + 4199: 52(float) Load 565(lod) + 4200:3102(ResType) ImageSparseGather 4197 4198 2187 Lod ConstOffsets 4199 2380 + 4201: 7(f16vec4) CompositeExtract 4200 1 + Store 4184(texel) 4201 + 4202: 47(int) CompositeExtract 4200 0 + 4203: 284 Load 286(s2DArray) + 4204:175(f16vec3) Load 177(f16c3) + 4205:6(float16_t) Load 572(f16lod) + 4206:3102(ResType) ImageSparseGather 4203 4204 2187 Lod ConstOffsets 4205 2380 + 4207: 7(f16vec4) CompositeExtract 4206 1 + Store 4184(texel) 4207 + 4208: 47(int) CompositeExtract 4206 0 + 4209: 7(f16vec4) Load 4184(texel) + ReturnValue 4209 FunctionEnd 97(testSparseImageLoad(): 7(f16vec4) Function None 8 98: Label - 4202(texel): 64(ptr) Variable Function - Store 4202(texel) 121 - 4203: 2962 Load 2964(i2D) - 4204: 53(fvec2) Load 148(c2) - 4205: 721(ivec2) ConvertFToS 4204 - 4206:3102(ResType) ImageSparseRead 4203 4205 - 4207: 7(f16vec4) CompositeExtract 4206 1 - Store 4202(texel) 4207 - 4208: 47(int) CompositeExtract 4206 0 - 4209: 2971 Load 2973(i3D) - 4210: 167(fvec3) Load 169(c3) - 4211: 734(ivec3) ConvertFToS 4210 - 4212:3102(ResType) ImageSparseRead 4209 4211 - 4213: 7(f16vec4) CompositeExtract 4212 1 - Store 4202(texel) 4213 - 4214: 47(int) CompositeExtract 4212 0 - 4215: 2980 Load 2982(i2DRect) - 4216: 53(fvec2) Load 148(c2) - 4217: 721(ivec2) ConvertFToS 4216 - 4218:3102(ResType) ImageSparseRead 4215 4217 - 4219: 7(f16vec4) CompositeExtract 4218 1 - Store 4202(texel) 4219 - 4220: 47(int) CompositeExtract 4218 0 - 4221: 2989 Load 2991(iCube) - 4222: 167(fvec3) Load 169(c3) - 4223: 734(ivec3) ConvertFToS 4222 - 4224:3102(ResType) ImageSparseRead 4221 4223 - 4225: 7(f16vec4) CompositeExtract 4224 1 - Store 4202(texel) 4225 - 4226: 47(int) CompositeExtract 4224 0 - 4227: 3016 Load 3018(i2DArray) - 4228: 167(fvec3) Load 169(c3) - 4229: 734(ivec3) ConvertFToS 4228 - 4230:3102(ResType) ImageSparseRead 4227 4229 - 4231: 7(f16vec4) CompositeExtract 4230 1 - Store 4202(texel) 4231 - 4232: 47(int) CompositeExtract 4230 0 - 4233: 3025 Load 3027(iCubeArray) - 4234: 167(fvec3) Load 169(c3) - 4235: 734(ivec3) ConvertFToS 4234 - 4236:3102(ResType) ImageSparseRead 4233 4235 - 4237: 7(f16vec4) CompositeExtract 4236 1 - Store 4202(texel) 4237 - 4238: 47(int) CompositeExtract 4236 0 - 4239: 3034 Load 3036(i2DMS) - 4240: 53(fvec2) Load 148(c2) - 4241: 721(ivec2) ConvertFToS 4240 - 4242:3102(ResType) ImageSparseRead 4239 4241 Sample 709 - 4243: 7(f16vec4) CompositeExtract 4242 1 - Store 4202(texel) 4243 - 4244: 47(int) CompositeExtract 4242 0 - 4245: 3043 Load 3045(i2DMSArray) - 4246: 167(fvec3) Load 169(c3) - 4247: 734(ivec3) ConvertFToS 4246 - 4248:3102(ResType) ImageSparseRead 4245 4247 Sample 1326 - 4249: 7(f16vec4) CompositeExtract 4248 1 - Store 4202(texel) 4249 - 4250: 47(int) CompositeExtract 4248 0 - 4251: 7(f16vec4) Load 4202(texel) - ReturnValue 4251 + 4212(texel): 64(ptr) Variable Function + Store 4212(texel) 121 + 4213: 2962 Load 2964(i2D) + 4214: 53(fvec2) Load 148(c2) + 4215: 721(ivec2) ConvertFToS 4214 + 4216:3102(ResType) ImageSparseRead 4213 4215 + 4217: 7(f16vec4) CompositeExtract 4216 1 + Store 4212(texel) 4217 + 4218: 47(int) CompositeExtract 4216 0 + 4219: 2971 Load 2973(i3D) + 4220: 167(fvec3) Load 169(c3) + 4221: 734(ivec3) ConvertFToS 4220 + 4222:3102(ResType) ImageSparseRead 4219 4221 + 4223: 7(f16vec4) CompositeExtract 4222 1 + Store 4212(texel) 4223 + 4224: 47(int) CompositeExtract 4222 0 + 4225: 2980 Load 2982(i2DRect) + 4226: 53(fvec2) Load 148(c2) + 4227: 721(ivec2) ConvertFToS 4226 + 4228:3102(ResType) ImageSparseRead 4225 4227 + 4229: 7(f16vec4) CompositeExtract 4228 1 + Store 4212(texel) 4229 + 4230: 47(int) CompositeExtract 4228 0 + 4231: 2989 Load 2991(iCube) + 4232: 167(fvec3) Load 169(c3) + 4233: 734(ivec3) ConvertFToS 4232 + 4234:3102(ResType) ImageSparseRead 4231 4233 + 4235: 7(f16vec4) CompositeExtract 4234 1 + Store 4212(texel) 4235 + 4236: 47(int) CompositeExtract 4234 0 + 4237: 3016 Load 3018(i2DArray) + 4238: 167(fvec3) Load 169(c3) + 4239: 734(ivec3) ConvertFToS 4238 + 4240:3102(ResType) ImageSparseRead 4237 4239 + 4241: 7(f16vec4) CompositeExtract 4240 1 + Store 4212(texel) 4241 + 4242: 47(int) CompositeExtract 4240 0 + 4243: 3025 Load 3027(iCubeArray) + 4244: 167(fvec3) Load 169(c3) + 4245: 734(ivec3) ConvertFToS 4244 + 4246:3102(ResType) ImageSparseRead 4243 4245 + 4247: 7(f16vec4) CompositeExtract 4246 1 + Store 4212(texel) 4247 + 4248: 47(int) CompositeExtract 4246 0 + 4249: 3034 Load 3036(i2DMS) + 4250: 53(fvec2) Load 148(c2) + 4251: 721(ivec2) ConvertFToS 4250 + 4252:3102(ResType) ImageSparseRead 4249 4251 Sample 709 + 4253: 7(f16vec4) CompositeExtract 4252 1 + Store 4212(texel) 4253 + 4254: 47(int) CompositeExtract 4252 0 + 4255: 3043 Load 3045(i2DMSArray) + 4256: 167(fvec3) Load 169(c3) + 4257: 734(ivec3) ConvertFToS 4256 + 4258:3102(ResType) ImageSparseRead 4255 4257 Sample 1326 + 4259: 7(f16vec4) CompositeExtract 4258 1 + Store 4212(texel) 4259 + 4260: 47(int) CompositeExtract 4258 0 + 4261: 7(f16vec4) Load 4212(texel) + ReturnValue 4261 FunctionEnd 99(testSparseTextureClamp(): 7(f16vec4) Function None 8 100: Label - 4254(texel): 64(ptr) Variable Function - Store 4254(texel) 121 - 4255: 143 Load 145(s2D) - 4256: 53(fvec2) Load 148(c2) - 4258: 52(float) Load 4257(lodClamp) - 4259:3102(ResType) ImageSparseSampleImplicitLod 4255 4256 MinLod 4258 - 4260: 7(f16vec4) CompositeExtract 4259 1 - Store 4254(texel) 4260 - 4261: 47(int) CompositeExtract 4259 0 - 4262: 143 Load 145(s2D) - 4263:154(f16vec2) Load 156(f16c2) - 4265:6(float16_t) Load 4264(f16lodClamp) - 4266:6(float16_t) Load 137(f16bias) - 4267:3102(ResType) ImageSparseSampleImplicitLod 4262 4263 Bias MinLod 4266 4265 - 4268: 7(f16vec4) CompositeExtract 4267 1 - Store 4254(texel) 4268 - 4269: 47(int) CompositeExtract 4267 0 - 4270: 163 Load 165(s3D) - 4271: 167(fvec3) Load 169(c3) - 4272: 52(float) Load 4257(lodClamp) - 4273:3102(ResType) ImageSparseSampleImplicitLod 4270 4271 MinLod 4272 - 4274: 7(f16vec4) CompositeExtract 4273 1 - Store 4254(texel) 4274 - 4275: 47(int) CompositeExtract 4273 0 - 4276: 163 Load 165(s3D) - 4277:175(f16vec3) Load 177(f16c3) - 4278:6(float16_t) Load 4264(f16lodClamp) - 4279:6(float16_t) Load 137(f16bias) - 4280:3102(ResType) ImageSparseSampleImplicitLod 4276 4277 Bias MinLod 4279 4278 - 4281: 7(f16vec4) CompositeExtract 4280 1 - Store 4254(texel) 4281 - 4282: 47(int) CompositeExtract 4280 0 - 4283: 184 Load 186(sCube) - 4284: 167(fvec3) Load 169(c3) - 4285: 52(float) Load 4257(lodClamp) - 4286:3102(ResType) ImageSparseSampleImplicitLod 4283 4284 MinLod 4285 - 4287: 7(f16vec4) CompositeExtract 4286 1 - Store 4254(texel) 4287 - 4288: 47(int) CompositeExtract 4286 0 - 4289: 184 Load 186(sCube) - 4290:175(f16vec3) Load 177(f16c3) - 4291:6(float16_t) Load 4264(f16lodClamp) - 4292:6(float16_t) Load 137(f16bias) - 4293:3102(ResType) ImageSparseSampleImplicitLod 4289 4290 Bias MinLod 4292 4291 - 4294: 7(f16vec4) CompositeExtract 4293 1 - Store 4254(texel) 4294 - 4295: 47(int) CompositeExtract 4293 0 - 4296: 224 Load 226(s2DShadow) - 4297: 167(fvec3) Load 169(c3) - 4298: 52(float) Load 4257(lodClamp) - 4299: 208(ptr) AccessChain 4254(texel) 207 - 4300: 52(float) CompositeExtract 4297 2 - 4301:3138(ResType) ImageSparseSampleDrefImplicitLod 4296 4297 4300 MinLod 4298 - 4302:6(float16_t) CompositeExtract 4301 1 - Store 4299 4302 - 4303: 47(int) CompositeExtract 4301 0 - 4304: 224 Load 226(s2DShadow) - 4305:154(f16vec2) Load 156(f16c2) - 4306: 52(float) Load 215(compare) - 4307:6(float16_t) Load 4264(f16lodClamp) - 4308: 208(ptr) AccessChain 4254(texel) 207 - 4309:6(float16_t) Load 137(f16bias) - 4310:3138(ResType) ImageSparseSampleDrefImplicitLod 4304 4305 4306 Bias MinLod 4309 4307 - 4311:6(float16_t) CompositeExtract 4310 1 - Store 4308 4311 - 4312: 47(int) CompositeExtract 4310 0 - 4313: 245 Load 247(sCubeShadow) - 4314: 249(fvec4) Load 251(c4) - 4315: 52(float) Load 4257(lodClamp) - 4316: 208(ptr) AccessChain 4254(texel) 207 - 4317: 52(float) CompositeExtract 4314 3 - 4318:3138(ResType) ImageSparseSampleDrefImplicitLod 4313 4314 4317 MinLod 4315 - 4319:6(float16_t) CompositeExtract 4318 1 - Store 4316 4319 - 4320: 47(int) CompositeExtract 4318 0 - 4321: 245 Load 247(sCubeShadow) - 4322:175(f16vec3) Load 177(f16c3) - 4323: 52(float) Load 215(compare) - 4324:6(float16_t) Load 4264(f16lodClamp) - 4325: 208(ptr) AccessChain 4254(texel) 207 - 4326:6(float16_t) Load 137(f16bias) - 4327:3138(ResType) ImageSparseSampleDrefImplicitLod 4321 4322 4323 Bias MinLod 4326 4324 - 4328:6(float16_t) CompositeExtract 4327 1 - Store 4325 4328 - 4329: 47(int) CompositeExtract 4327 0 - 4330: 284 Load 286(s2DArray) - 4331: 167(fvec3) Load 169(c3) - 4332: 52(float) Load 4257(lodClamp) - 4333:3102(ResType) ImageSparseSampleImplicitLod 4330 4331 MinLod 4332 - 4334: 7(f16vec4) CompositeExtract 4333 1 - Store 4254(texel) 4334 - 4335: 47(int) CompositeExtract 4333 0 - 4336: 284 Load 286(s2DArray) - 4337:175(f16vec3) Load 177(f16c3) - 4338:6(float16_t) Load 4264(f16lodClamp) - 4339:6(float16_t) Load 137(f16bias) - 4340:3102(ResType) ImageSparseSampleImplicitLod 4336 4337 Bias MinLod 4339 4338 - 4341: 7(f16vec4) CompositeExtract 4340 1 - Store 4254(texel) 4341 - 4342: 47(int) CompositeExtract 4340 0 - 4343: 299 Load 301(sCubeArray) - 4344: 249(fvec4) Load 251(c4) - 4345: 52(float) Load 4257(lodClamp) - 4346:3102(ResType) ImageSparseSampleImplicitLod 4343 4344 MinLod 4345 - 4347: 7(f16vec4) CompositeExtract 4346 1 - Store 4254(texel) 4347 - 4348: 47(int) CompositeExtract 4346 0 - 4349: 299 Load 301(sCubeArray) - 4350: 7(f16vec4) Load 309(f16c4) - 4351:6(float16_t) Load 4264(f16lodClamp) - 4352:6(float16_t) Load 137(f16bias) - 4353:3102(ResType) ImageSparseSampleImplicitLod 4349 4350 Bias MinLod 4352 4351 - 4354: 7(f16vec4) CompositeExtract 4353 1 - Store 4254(texel) 4354 - 4355: 47(int) CompositeExtract 4353 0 - 4356: 337 Load 339(s2DArrayShadow) - 4357: 249(fvec4) Load 251(c4) - 4358: 52(float) Load 4257(lodClamp) - 4359: 208(ptr) AccessChain 4254(texel) 207 - 4360: 52(float) CompositeExtract 4357 3 - 4361:3138(ResType) ImageSparseSampleDrefImplicitLod 4356 4357 4360 MinLod 4358 - 4362:6(float16_t) CompositeExtract 4361 1 - Store 4359 4362 - 4363: 47(int) CompositeExtract 4361 0 - 4364: 337 Load 339(s2DArrayShadow) - 4365:175(f16vec3) Load 177(f16c3) - 4366: 52(float) Load 215(compare) - 4367:6(float16_t) Load 4264(f16lodClamp) - 4368: 208(ptr) AccessChain 4254(texel) 207 - 4369:3138(ResType) ImageSparseSampleDrefImplicitLod 4364 4365 4366 MinLod 4367 - 4370:6(float16_t) CompositeExtract 4369 1 - Store 4368 4370 - 4371: 47(int) CompositeExtract 4369 0 - 4372: 391 Load 393(sCubeArrayShadow) - 4373: 249(fvec4) Load 251(c4) - 4374: 52(float) Load 215(compare) - 4375: 52(float) Load 4257(lodClamp) - 4376: 208(ptr) AccessChain 4254(texel) 207 - 4377:3138(ResType) ImageSparseSampleDrefImplicitLod 4372 4373 4374 MinLod 4375 - 4378:6(float16_t) CompositeExtract 4377 1 - Store 4376 4378 - 4379: 47(int) CompositeExtract 4377 0 - 4380: 391 Load 393(sCubeArrayShadow) - 4381: 7(f16vec4) Load 309(f16c4) - 4382: 52(float) Load 215(compare) - 4383:6(float16_t) Load 4264(f16lodClamp) - 4384: 208(ptr) AccessChain 4254(texel) 207 - 4385:3138(ResType) ImageSparseSampleDrefImplicitLod 4380 4381 4382 MinLod 4383 - 4386:6(float16_t) CompositeExtract 4385 1 - Store 4384 4386 - 4387: 47(int) CompositeExtract 4385 0 - 4388: 7(f16vec4) Load 4254(texel) - ReturnValue 4388 + 4264(texel): 64(ptr) Variable Function + Store 4264(texel) 121 + 4265: 143 Load 145(s2D) + 4266: 53(fvec2) Load 148(c2) + 4268: 52(float) Load 4267(lodClamp) + 4269:3102(ResType) ImageSparseSampleImplicitLod 4265 4266 MinLod 4268 + 4270: 7(f16vec4) CompositeExtract 4269 1 + Store 4264(texel) 4270 + 4271: 47(int) CompositeExtract 4269 0 + 4272: 143 Load 145(s2D) + 4273:154(f16vec2) Load 156(f16c2) + 4275:6(float16_t) Load 4274(f16lodClamp) + 4276:6(float16_t) Load 137(f16bias) + 4277:3102(ResType) ImageSparseSampleImplicitLod 4272 4273 Bias MinLod 4276 4275 + 4278: 7(f16vec4) CompositeExtract 4277 1 + Store 4264(texel) 4278 + 4279: 47(int) CompositeExtract 4277 0 + 4280: 163 Load 165(s3D) + 4281: 167(fvec3) Load 169(c3) + 4282: 52(float) Load 4267(lodClamp) + 4283:3102(ResType) ImageSparseSampleImplicitLod 4280 4281 MinLod 4282 + 4284: 7(f16vec4) CompositeExtract 4283 1 + Store 4264(texel) 4284 + 4285: 47(int) CompositeExtract 4283 0 + 4286: 163 Load 165(s3D) + 4287:175(f16vec3) Load 177(f16c3) + 4288:6(float16_t) Load 4274(f16lodClamp) + 4289:6(float16_t) Load 137(f16bias) + 4290:3102(ResType) ImageSparseSampleImplicitLod 4286 4287 Bias MinLod 4289 4288 + 4291: 7(f16vec4) CompositeExtract 4290 1 + Store 4264(texel) 4291 + 4292: 47(int) CompositeExtract 4290 0 + 4293: 184 Load 186(sCube) + 4294: 167(fvec3) Load 169(c3) + 4295: 52(float) Load 4267(lodClamp) + 4296:3102(ResType) ImageSparseSampleImplicitLod 4293 4294 MinLod 4295 + 4297: 7(f16vec4) CompositeExtract 4296 1 + Store 4264(texel) 4297 + 4298: 47(int) CompositeExtract 4296 0 + 4299: 184 Load 186(sCube) + 4300:175(f16vec3) Load 177(f16c3) + 4301:6(float16_t) Load 4274(f16lodClamp) + 4302:6(float16_t) Load 137(f16bias) + 4303:3102(ResType) ImageSparseSampleImplicitLod 4299 4300 Bias MinLod 4302 4301 + 4304: 7(f16vec4) CompositeExtract 4303 1 + Store 4264(texel) 4304 + 4305: 47(int) CompositeExtract 4303 0 + 4306: 224 Load 226(s2DShadow) + 4307: 167(fvec3) Load 169(c3) + 4308: 52(float) Load 4267(lodClamp) + 4309: 208(ptr) AccessChain 4264(texel) 207 + 4310: 52(float) CompositeExtract 4307 2 + 4311:3138(ResType) ImageSparseSampleDrefImplicitLod 4306 4307 4310 MinLod 4308 + 4312:6(float16_t) CompositeExtract 4311 1 + Store 4309 4312 + 4313: 47(int) CompositeExtract 4311 0 + 4314: 224 Load 226(s2DShadow) + 4315:154(f16vec2) Load 156(f16c2) + 4316: 52(float) Load 215(compare) + 4317:6(float16_t) Load 4274(f16lodClamp) + 4318: 208(ptr) AccessChain 4264(texel) 207 + 4319:6(float16_t) Load 137(f16bias) + 4320:3138(ResType) ImageSparseSampleDrefImplicitLod 4314 4315 4316 Bias MinLod 4319 4317 + 4321:6(float16_t) CompositeExtract 4320 1 + Store 4318 4321 + 4322: 47(int) CompositeExtract 4320 0 + 4323: 245 Load 247(sCubeShadow) + 4324: 249(fvec4) Load 251(c4) + 4325: 52(float) Load 4267(lodClamp) + 4326: 208(ptr) AccessChain 4264(texel) 207 + 4327: 52(float) CompositeExtract 4324 3 + 4328:3138(ResType) ImageSparseSampleDrefImplicitLod 4323 4324 4327 MinLod 4325 + 4329:6(float16_t) CompositeExtract 4328 1 + Store 4326 4329 + 4330: 47(int) CompositeExtract 4328 0 + 4331: 245 Load 247(sCubeShadow) + 4332:175(f16vec3) Load 177(f16c3) + 4333: 52(float) Load 215(compare) + 4334:6(float16_t) Load 4274(f16lodClamp) + 4335: 208(ptr) AccessChain 4264(texel) 207 + 4336:6(float16_t) Load 137(f16bias) + 4337:3138(ResType) ImageSparseSampleDrefImplicitLod 4331 4332 4333 Bias MinLod 4336 4334 + 4338:6(float16_t) CompositeExtract 4337 1 + Store 4335 4338 + 4339: 47(int) CompositeExtract 4337 0 + 4340: 284 Load 286(s2DArray) + 4341: 167(fvec3) Load 169(c3) + 4342: 52(float) Load 4267(lodClamp) + 4343:3102(ResType) ImageSparseSampleImplicitLod 4340 4341 MinLod 4342 + 4344: 7(f16vec4) CompositeExtract 4343 1 + Store 4264(texel) 4344 + 4345: 47(int) CompositeExtract 4343 0 + 4346: 284 Load 286(s2DArray) + 4347:175(f16vec3) Load 177(f16c3) + 4348:6(float16_t) Load 4274(f16lodClamp) + 4349:6(float16_t) Load 137(f16bias) + 4350:3102(ResType) ImageSparseSampleImplicitLod 4346 4347 Bias MinLod 4349 4348 + 4351: 7(f16vec4) CompositeExtract 4350 1 + Store 4264(texel) 4351 + 4352: 47(int) CompositeExtract 4350 0 + 4353: 299 Load 301(sCubeArray) + 4354: 249(fvec4) Load 251(c4) + 4355: 52(float) Load 4267(lodClamp) + 4356:3102(ResType) ImageSparseSampleImplicitLod 4353 4354 MinLod 4355 + 4357: 7(f16vec4) CompositeExtract 4356 1 + Store 4264(texel) 4357 + 4358: 47(int) CompositeExtract 4356 0 + 4359: 299 Load 301(sCubeArray) + 4360: 7(f16vec4) Load 309(f16c4) + 4361:6(float16_t) Load 4274(f16lodClamp) + 4362:6(float16_t) Load 137(f16bias) + 4363:3102(ResType) ImageSparseSampleImplicitLod 4359 4360 Bias MinLod 4362 4361 + 4364: 7(f16vec4) CompositeExtract 4363 1 + Store 4264(texel) 4364 + 4365: 47(int) CompositeExtract 4363 0 + 4366: 337 Load 339(s2DArrayShadow) + 4367: 249(fvec4) Load 251(c4) + 4368: 52(float) Load 4267(lodClamp) + 4369: 208(ptr) AccessChain 4264(texel) 207 + 4370: 52(float) CompositeExtract 4367 3 + 4371:3138(ResType) ImageSparseSampleDrefImplicitLod 4366 4367 4370 MinLod 4368 + 4372:6(float16_t) CompositeExtract 4371 1 + Store 4369 4372 + 4373: 47(int) CompositeExtract 4371 0 + 4374: 337 Load 339(s2DArrayShadow) + 4375:175(f16vec3) Load 177(f16c3) + 4376: 52(float) Load 215(compare) + 4377:6(float16_t) Load 4274(f16lodClamp) + 4378: 208(ptr) AccessChain 4264(texel) 207 + 4379:3138(ResType) ImageSparseSampleDrefImplicitLod 4374 4375 4376 MinLod 4377 + 4380:6(float16_t) CompositeExtract 4379 1 + Store 4378 4380 + 4381: 47(int) CompositeExtract 4379 0 + 4382: 391 Load 393(sCubeArrayShadow) + 4383: 249(fvec4) Load 251(c4) + 4384: 52(float) Load 215(compare) + 4385: 52(float) Load 4267(lodClamp) + 4386: 208(ptr) AccessChain 4264(texel) 207 + 4387:3138(ResType) ImageSparseSampleDrefImplicitLod 4382 4383 4384 MinLod 4385 + 4388:6(float16_t) CompositeExtract 4387 1 + Store 4386 4388 + 4389: 47(int) CompositeExtract 4387 0 + 4390: 391 Load 393(sCubeArrayShadow) + 4391: 7(f16vec4) Load 309(f16c4) + 4392: 52(float) Load 215(compare) + 4393:6(float16_t) Load 4274(f16lodClamp) + 4394: 208(ptr) AccessChain 4264(texel) 207 + 4395:3138(ResType) ImageSparseSampleDrefImplicitLod 4390 4391 4392 MinLod 4393 + 4396:6(float16_t) CompositeExtract 4395 1 + Store 4394 4396 + 4397: 47(int) CompositeExtract 4395 0 + 4398: 7(f16vec4) Load 4264(texel) + ReturnValue 4398 FunctionEnd 101(testTextureClamp(): 7(f16vec4) Function None 8 102: Label - 4391(texel): 64(ptr) Variable Function - Store 4391(texel) 121 - 4392: 123 Load 125(s1D) - 4393: 52(float) Load 128(c1) - 4394: 52(float) Load 4257(lodClamp) - 4395: 7(f16vec4) ImageSampleImplicitLod 4392 4393 MinLod 4394 - 4396: 7(f16vec4) Load 4391(texel) - 4397: 7(f16vec4) FAdd 4396 4395 - Store 4391(texel) 4397 - 4398: 123 Load 125(s1D) - 4399:6(float16_t) Load 135(f16c1) - 4400:6(float16_t) Load 4264(f16lodClamp) - 4401:6(float16_t) Load 137(f16bias) - 4402: 7(f16vec4) ImageSampleImplicitLod 4398 4399 Bias MinLod 4401 4400 - 4403: 7(f16vec4) Load 4391(texel) - 4404: 7(f16vec4) FAdd 4403 4402 - Store 4391(texel) 4404 - 4405: 143 Load 145(s2D) - 4406: 53(fvec2) Load 148(c2) - 4407: 52(float) Load 4257(lodClamp) - 4408: 7(f16vec4) ImageSampleImplicitLod 4405 4406 MinLod 4407 - 4409: 7(f16vec4) Load 4391(texel) - 4410: 7(f16vec4) FAdd 4409 4408 - Store 4391(texel) 4410 - 4411: 143 Load 145(s2D) - 4412:154(f16vec2) Load 156(f16c2) - 4413:6(float16_t) Load 4264(f16lodClamp) - 4414:6(float16_t) Load 137(f16bias) - 4415: 7(f16vec4) ImageSampleImplicitLod 4411 4412 Bias MinLod 4414 4413 - 4416: 7(f16vec4) Load 4391(texel) - 4417: 7(f16vec4) FAdd 4416 4415 - Store 4391(texel) 4417 - 4418: 163 Load 165(s3D) - 4419: 167(fvec3) Load 169(c3) - 4420: 52(float) Load 4257(lodClamp) - 4421: 7(f16vec4) ImageSampleImplicitLod 4418 4419 MinLod 4420 - 4422: 7(f16vec4) Load 4391(texel) - 4423: 7(f16vec4) FAdd 4422 4421 - Store 4391(texel) 4423 - 4424: 163 Load 165(s3D) - 4425:175(f16vec3) Load 177(f16c3) - 4426:6(float16_t) Load 4264(f16lodClamp) - 4427:6(float16_t) Load 137(f16bias) - 4428: 7(f16vec4) ImageSampleImplicitLod 4424 4425 Bias MinLod 4427 4426 - 4429: 7(f16vec4) Load 4391(texel) - 4430: 7(f16vec4) FAdd 4429 4428 - Store 4391(texel) 4430 - 4431: 184 Load 186(sCube) - 4432: 167(fvec3) Load 169(c3) - 4433: 52(float) Load 4257(lodClamp) - 4434: 7(f16vec4) ImageSampleImplicitLod 4431 4432 MinLod 4433 - 4435: 7(f16vec4) Load 4391(texel) - 4436: 7(f16vec4) FAdd 4435 4434 - Store 4391(texel) 4436 - 4437: 184 Load 186(sCube) - 4438:175(f16vec3) Load 177(f16c3) - 4439:6(float16_t) Load 4264(f16lodClamp) - 4440:6(float16_t) Load 137(f16bias) - 4441: 7(f16vec4) ImageSampleImplicitLod 4437 4438 Bias MinLod 4440 4439 - 4442: 7(f16vec4) Load 4391(texel) - 4443: 7(f16vec4) FAdd 4442 4441 - Store 4391(texel) 4443 - 4444: 199 Load 201(s1DShadow) - 4445: 167(fvec3) Load 169(c3) - 4446: 52(float) Load 4257(lodClamp) - 4447: 52(float) CompositeExtract 4445 2 - 4448:6(float16_t) ImageSampleDrefImplicitLod 4444 4445 4447 MinLod 4446 - 4449: 208(ptr) AccessChain 4391(texel) 207 - 4450:6(float16_t) Load 4449 - 4451:6(float16_t) FAdd 4450 4448 - 4452: 208(ptr) AccessChain 4391(texel) 207 - Store 4452 4451 - 4453: 199 Load 201(s1DShadow) - 4454:154(f16vec2) Load 156(f16c2) - 4455: 52(float) Load 215(compare) - 4456:6(float16_t) Load 4264(f16lodClamp) - 4457:6(float16_t) Load 137(f16bias) - 4458:6(float16_t) ImageSampleDrefImplicitLod 4453 4454 4455 Bias MinLod 4457 4456 - 4459: 208(ptr) AccessChain 4391(texel) 207 + 4401(texel): 64(ptr) Variable Function + Store 4401(texel) 121 + 4402: 123 Load 125(s1D) + 4403: 52(float) Load 128(c1) + 4404: 52(float) Load 4267(lodClamp) + 4405: 7(f16vec4) ImageSampleImplicitLod 4402 4403 MinLod 4404 + 4406: 7(f16vec4) Load 4401(texel) + 4407: 7(f16vec4) FAdd 4406 4405 + Store 4401(texel) 4407 + 4408: 123 Load 125(s1D) + 4409:6(float16_t) Load 135(f16c1) + 4410:6(float16_t) Load 4274(f16lodClamp) + 4411:6(float16_t) Load 137(f16bias) + 4412: 7(f16vec4) ImageSampleImplicitLod 4408 4409 Bias MinLod 4411 4410 + 4413: 7(f16vec4) Load 4401(texel) + 4414: 7(f16vec4) FAdd 4413 4412 + Store 4401(texel) 4414 + 4415: 143 Load 145(s2D) + 4416: 53(fvec2) Load 148(c2) + 4417: 52(float) Load 4267(lodClamp) + 4418: 7(f16vec4) ImageSampleImplicitLod 4415 4416 MinLod 4417 + 4419: 7(f16vec4) Load 4401(texel) + 4420: 7(f16vec4) FAdd 4419 4418 + Store 4401(texel) 4420 + 4421: 143 Load 145(s2D) + 4422:154(f16vec2) Load 156(f16c2) + 4423:6(float16_t) Load 4274(f16lodClamp) + 4424:6(float16_t) Load 137(f16bias) + 4425: 7(f16vec4) ImageSampleImplicitLod 4421 4422 Bias MinLod 4424 4423 + 4426: 7(f16vec4) Load 4401(texel) + 4427: 7(f16vec4) FAdd 4426 4425 + Store 4401(texel) 4427 + 4428: 163 Load 165(s3D) + 4429: 167(fvec3) Load 169(c3) + 4430: 52(float) Load 4267(lodClamp) + 4431: 7(f16vec4) ImageSampleImplicitLod 4428 4429 MinLod 4430 + 4432: 7(f16vec4) Load 4401(texel) + 4433: 7(f16vec4) FAdd 4432 4431 + Store 4401(texel) 4433 + 4434: 163 Load 165(s3D) + 4435:175(f16vec3) Load 177(f16c3) + 4436:6(float16_t) Load 4274(f16lodClamp) + 4437:6(float16_t) Load 137(f16bias) + 4438: 7(f16vec4) ImageSampleImplicitLod 4434 4435 Bias MinLod 4437 4436 + 4439: 7(f16vec4) Load 4401(texel) + 4440: 7(f16vec4) FAdd 4439 4438 + Store 4401(texel) 4440 + 4441: 184 Load 186(sCube) + 4442: 167(fvec3) Load 169(c3) + 4443: 52(float) Load 4267(lodClamp) + 4444: 7(f16vec4) ImageSampleImplicitLod 4441 4442 MinLod 4443 + 4445: 7(f16vec4) Load 4401(texel) + 4446: 7(f16vec4) FAdd 4445 4444 + Store 4401(texel) 4446 + 4447: 184 Load 186(sCube) + 4448:175(f16vec3) Load 177(f16c3) + 4449:6(float16_t) Load 4274(f16lodClamp) + 4450:6(float16_t) Load 137(f16bias) + 4451: 7(f16vec4) ImageSampleImplicitLod 4447 4448 Bias MinLod 4450 4449 + 4452: 7(f16vec4) Load 4401(texel) + 4453: 7(f16vec4) FAdd 4452 4451 + Store 4401(texel) 4453 + 4454: 199 Load 201(s1DShadow) + 4455: 167(fvec3) Load 169(c3) + 4456: 52(float) Load 4267(lodClamp) + 4457: 52(float) CompositeExtract 4455 2 + 4458:6(float16_t) ImageSampleDrefImplicitLod 4454 4455 4457 MinLod 4456 + 4459: 208(ptr) AccessChain 4401(texel) 207 4460:6(float16_t) Load 4459 4461:6(float16_t) FAdd 4460 4458 - 4462: 208(ptr) AccessChain 4391(texel) 207 + 4462: 208(ptr) AccessChain 4401(texel) 207 Store 4462 4461 - 4463: 224 Load 226(s2DShadow) - 4464: 167(fvec3) Load 169(c3) - 4465: 52(float) Load 4257(lodClamp) - 4466: 52(float) CompositeExtract 4464 2 - 4467:6(float16_t) ImageSampleDrefImplicitLod 4463 4464 4466 MinLod 4465 - 4468: 208(ptr) AccessChain 4391(texel) 207 - 4469:6(float16_t) Load 4468 - 4470:6(float16_t) FAdd 4469 4467 - 4471: 208(ptr) AccessChain 4391(texel) 207 - Store 4471 4470 - 4472: 224 Load 226(s2DShadow) - 4473:154(f16vec2) Load 156(f16c2) - 4474: 52(float) Load 215(compare) - 4475:6(float16_t) Load 4264(f16lodClamp) - 4476:6(float16_t) Load 137(f16bias) - 4477:6(float16_t) ImageSampleDrefImplicitLod 4472 4473 4474 Bias MinLod 4476 4475 - 4478: 208(ptr) AccessChain 4391(texel) 207 + 4463: 199 Load 201(s1DShadow) + 4464:154(f16vec2) Load 156(f16c2) + 4465: 52(float) Load 215(compare) + 4466:6(float16_t) Load 4274(f16lodClamp) + 4467:6(float16_t) Load 137(f16bias) + 4468:6(float16_t) ImageSampleDrefImplicitLod 4463 4464 4465 Bias MinLod 4467 4466 + 4469: 208(ptr) AccessChain 4401(texel) 207 + 4470:6(float16_t) Load 4469 + 4471:6(float16_t) FAdd 4470 4468 + 4472: 208(ptr) AccessChain 4401(texel) 207 + Store 4472 4471 + 4473: 224 Load 226(s2DShadow) + 4474: 167(fvec3) Load 169(c3) + 4475: 52(float) Load 4267(lodClamp) + 4476: 52(float) CompositeExtract 4474 2 + 4477:6(float16_t) ImageSampleDrefImplicitLod 4473 4474 4476 MinLod 4475 + 4478: 208(ptr) AccessChain 4401(texel) 207 4479:6(float16_t) Load 4478 4480:6(float16_t) FAdd 4479 4477 - 4481: 208(ptr) AccessChain 4391(texel) 207 + 4481: 208(ptr) AccessChain 4401(texel) 207 Store 4481 4480 - 4482: 245 Load 247(sCubeShadow) - 4483: 249(fvec4) Load 251(c4) - 4484: 52(float) Load 4257(lodClamp) - 4485: 52(float) CompositeExtract 4483 3 - 4486:6(float16_t) ImageSampleDrefImplicitLod 4482 4483 4485 MinLod 4484 - 4487: 208(ptr) AccessChain 4391(texel) 207 - 4488:6(float16_t) Load 4487 - 4489:6(float16_t) FAdd 4488 4486 - 4490: 208(ptr) AccessChain 4391(texel) 207 - Store 4490 4489 - 4491: 245 Load 247(sCubeShadow) - 4492:175(f16vec3) Load 177(f16c3) - 4493: 52(float) Load 215(compare) - 4494:6(float16_t) Load 4264(f16lodClamp) - 4495:6(float16_t) Load 137(f16bias) - 4496:6(float16_t) ImageSampleDrefImplicitLod 4491 4492 4493 Bias MinLod 4495 4494 - 4497: 208(ptr) AccessChain 4391(texel) 207 + 4482: 224 Load 226(s2DShadow) + 4483:154(f16vec2) Load 156(f16c2) + 4484: 52(float) Load 215(compare) + 4485:6(float16_t) Load 4274(f16lodClamp) + 4486:6(float16_t) Load 137(f16bias) + 4487:6(float16_t) ImageSampleDrefImplicitLod 4482 4483 4484 Bias MinLod 4486 4485 + 4488: 208(ptr) AccessChain 4401(texel) 207 + 4489:6(float16_t) Load 4488 + 4490:6(float16_t) FAdd 4489 4487 + 4491: 208(ptr) AccessChain 4401(texel) 207 + Store 4491 4490 + 4492: 245 Load 247(sCubeShadow) + 4493: 249(fvec4) Load 251(c4) + 4494: 52(float) Load 4267(lodClamp) + 4495: 52(float) CompositeExtract 4493 3 + 4496:6(float16_t) ImageSampleDrefImplicitLod 4492 4493 4495 MinLod 4494 + 4497: 208(ptr) AccessChain 4401(texel) 207 4498:6(float16_t) Load 4497 4499:6(float16_t) FAdd 4498 4496 - 4500: 208(ptr) AccessChain 4391(texel) 207 + 4500: 208(ptr) AccessChain 4401(texel) 207 Store 4500 4499 - 4501: 269 Load 271(s1DArray) - 4502: 53(fvec2) Load 148(c2) - 4503: 52(float) Load 4257(lodClamp) - 4504: 7(f16vec4) ImageSampleImplicitLod 4501 4502 MinLod 4503 - 4505: 7(f16vec4) Load 4391(texel) - 4506: 7(f16vec4) FAdd 4505 4504 - Store 4391(texel) 4506 - 4507: 269 Load 271(s1DArray) - 4508:154(f16vec2) Load 156(f16c2) - 4509:6(float16_t) Load 4264(f16lodClamp) - 4510:6(float16_t) Load 137(f16bias) - 4511: 7(f16vec4) ImageSampleImplicitLod 4507 4508 Bias MinLod 4510 4509 - 4512: 7(f16vec4) Load 4391(texel) - 4513: 7(f16vec4) FAdd 4512 4511 - Store 4391(texel) 4513 - 4514: 284 Load 286(s2DArray) - 4515: 167(fvec3) Load 169(c3) - 4516: 52(float) Load 4257(lodClamp) - 4517: 7(f16vec4) ImageSampleImplicitLod 4514 4515 MinLod 4516 - 4518: 7(f16vec4) Load 4391(texel) - 4519: 7(f16vec4) FAdd 4518 4517 - Store 4391(texel) 4519 - 4520: 284 Load 286(s2DArray) - 4521:175(f16vec3) Load 177(f16c3) - 4522:6(float16_t) Load 4264(f16lodClamp) - 4523:6(float16_t) Load 137(f16bias) - 4524: 7(f16vec4) ImageSampleImplicitLod 4520 4521 Bias MinLod 4523 4522 - 4525: 7(f16vec4) Load 4391(texel) - 4526: 7(f16vec4) FAdd 4525 4524 - Store 4391(texel) 4526 - 4527: 299 Load 301(sCubeArray) - 4528: 249(fvec4) Load 251(c4) - 4529: 52(float) Load 4257(lodClamp) - 4530: 7(f16vec4) ImageSampleImplicitLod 4527 4528 MinLod 4529 - 4531: 7(f16vec4) Load 4391(texel) - 4532: 7(f16vec4) FAdd 4531 4530 - Store 4391(texel) 4532 - 4533: 299 Load 301(sCubeArray) - 4534: 7(f16vec4) Load 309(f16c4) - 4535:6(float16_t) Load 4264(f16lodClamp) - 4536:6(float16_t) Load 137(f16bias) - 4537: 7(f16vec4) ImageSampleImplicitLod 4533 4534 Bias MinLod 4536 4535 - 4538: 7(f16vec4) Load 4391(texel) - 4539: 7(f16vec4) FAdd 4538 4537 - Store 4391(texel) 4539 - 4540: 316 Load 318(s1DArrayShadow) - 4541: 167(fvec3) Load 169(c3) - 4542: 52(float) Load 4257(lodClamp) - 4543: 52(float) CompositeExtract 4541 2 - 4544:6(float16_t) ImageSampleDrefImplicitLod 4540 4541 4543 MinLod 4542 - 4545: 208(ptr) AccessChain 4391(texel) 207 - 4546:6(float16_t) Load 4545 - 4547:6(float16_t) FAdd 4546 4544 - 4548: 208(ptr) AccessChain 4391(texel) 207 - Store 4548 4547 - 4549: 316 Load 318(s1DArrayShadow) - 4550:154(f16vec2) Load 156(f16c2) - 4551: 52(float) Load 215(compare) - 4552:6(float16_t) Load 4264(f16lodClamp) - 4553:6(float16_t) Load 137(f16bias) - 4554:6(float16_t) ImageSampleDrefImplicitLod 4549 4550 4551 Bias MinLod 4553 4552 - 4555: 208(ptr) AccessChain 4391(texel) 207 + 4501: 245 Load 247(sCubeShadow) + 4502:175(f16vec3) Load 177(f16c3) + 4503: 52(float) Load 215(compare) + 4504:6(float16_t) Load 4274(f16lodClamp) + 4505:6(float16_t) Load 137(f16bias) + 4506:6(float16_t) ImageSampleDrefImplicitLod 4501 4502 4503 Bias MinLod 4505 4504 + 4507: 208(ptr) AccessChain 4401(texel) 207 + 4508:6(float16_t) Load 4507 + 4509:6(float16_t) FAdd 4508 4506 + 4510: 208(ptr) AccessChain 4401(texel) 207 + Store 4510 4509 + 4511: 269 Load 271(s1DArray) + 4512: 53(fvec2) Load 148(c2) + 4513: 52(float) Load 4267(lodClamp) + 4514: 7(f16vec4) ImageSampleImplicitLod 4511 4512 MinLod 4513 + 4515: 7(f16vec4) Load 4401(texel) + 4516: 7(f16vec4) FAdd 4515 4514 + Store 4401(texel) 4516 + 4517: 269 Load 271(s1DArray) + 4518:154(f16vec2) Load 156(f16c2) + 4519:6(float16_t) Load 4274(f16lodClamp) + 4520:6(float16_t) Load 137(f16bias) + 4521: 7(f16vec4) ImageSampleImplicitLod 4517 4518 Bias MinLod 4520 4519 + 4522: 7(f16vec4) Load 4401(texel) + 4523: 7(f16vec4) FAdd 4522 4521 + Store 4401(texel) 4523 + 4524: 284 Load 286(s2DArray) + 4525: 167(fvec3) Load 169(c3) + 4526: 52(float) Load 4267(lodClamp) + 4527: 7(f16vec4) ImageSampleImplicitLod 4524 4525 MinLod 4526 + 4528: 7(f16vec4) Load 4401(texel) + 4529: 7(f16vec4) FAdd 4528 4527 + Store 4401(texel) 4529 + 4530: 284 Load 286(s2DArray) + 4531:175(f16vec3) Load 177(f16c3) + 4532:6(float16_t) Load 4274(f16lodClamp) + 4533:6(float16_t) Load 137(f16bias) + 4534: 7(f16vec4) ImageSampleImplicitLod 4530 4531 Bias MinLod 4533 4532 + 4535: 7(f16vec4) Load 4401(texel) + 4536: 7(f16vec4) FAdd 4535 4534 + Store 4401(texel) 4536 + 4537: 299 Load 301(sCubeArray) + 4538: 249(fvec4) Load 251(c4) + 4539: 52(float) Load 4267(lodClamp) + 4540: 7(f16vec4) ImageSampleImplicitLod 4537 4538 MinLod 4539 + 4541: 7(f16vec4) Load 4401(texel) + 4542: 7(f16vec4) FAdd 4541 4540 + Store 4401(texel) 4542 + 4543: 299 Load 301(sCubeArray) + 4544: 7(f16vec4) Load 309(f16c4) + 4545:6(float16_t) Load 4274(f16lodClamp) + 4546:6(float16_t) Load 137(f16bias) + 4547: 7(f16vec4) ImageSampleImplicitLod 4543 4544 Bias MinLod 4546 4545 + 4548: 7(f16vec4) Load 4401(texel) + 4549: 7(f16vec4) FAdd 4548 4547 + Store 4401(texel) 4549 + 4550: 316 Load 318(s1DArrayShadow) + 4551: 167(fvec3) Load 169(c3) + 4552: 52(float) Load 4267(lodClamp) + 4553: 52(float) CompositeExtract 4551 2 + 4554:6(float16_t) ImageSampleDrefImplicitLod 4550 4551 4553 MinLod 4552 + 4555: 208(ptr) AccessChain 4401(texel) 207 4556:6(float16_t) Load 4555 4557:6(float16_t) FAdd 4556 4554 - 4558: 208(ptr) AccessChain 4391(texel) 207 + 4558: 208(ptr) AccessChain 4401(texel) 207 Store 4558 4557 - 4559: 337 Load 339(s2DArrayShadow) - 4560: 249(fvec4) Load 251(c4) - 4561: 52(float) Load 4257(lodClamp) - 4562: 52(float) CompositeExtract 4560 3 - 4563:6(float16_t) ImageSampleDrefImplicitLod 4559 4560 4562 MinLod 4561 - 4564: 208(ptr) AccessChain 4391(texel) 207 - 4565:6(float16_t) Load 4564 - 4566:6(float16_t) FAdd 4565 4563 - 4567: 208(ptr) AccessChain 4391(texel) 207 - Store 4567 4566 - 4568: 337 Load 339(s2DArrayShadow) - 4569:175(f16vec3) Load 177(f16c3) - 4570: 52(float) Load 215(compare) - 4571:6(float16_t) Load 4264(f16lodClamp) - 4572:6(float16_t) ImageSampleDrefImplicitLod 4568 4569 4570 MinLod 4571 - 4573: 208(ptr) AccessChain 4391(texel) 207 - 4574:6(float16_t) Load 4573 - 4575:6(float16_t) FAdd 4574 4572 - 4576: 208(ptr) AccessChain 4391(texel) 207 - Store 4576 4575 - 4577: 391 Load 393(sCubeArrayShadow) - 4578: 249(fvec4) Load 251(c4) - 4579: 52(float) Load 215(compare) - 4580: 52(float) Load 4257(lodClamp) - 4581:6(float16_t) ImageSampleDrefImplicitLod 4577 4578 4579 MinLod 4580 - 4582: 208(ptr) AccessChain 4391(texel) 207 - 4583:6(float16_t) Load 4582 - 4584:6(float16_t) FAdd 4583 4581 - 4585: 208(ptr) AccessChain 4391(texel) 207 - Store 4585 4584 - 4586: 391 Load 393(sCubeArrayShadow) - 4587: 7(f16vec4) Load 309(f16c4) - 4588: 52(float) Load 215(compare) - 4589:6(float16_t) Load 4264(f16lodClamp) - 4590:6(float16_t) ImageSampleDrefImplicitLod 4586 4587 4588 MinLod 4589 - 4591: 208(ptr) AccessChain 4391(texel) 207 - 4592:6(float16_t) Load 4591 - 4593:6(float16_t) FAdd 4592 4590 - 4594: 208(ptr) AccessChain 4391(texel) 207 - Store 4594 4593 - 4595: 7(f16vec4) Load 4391(texel) - ReturnValue 4595 + 4559: 316 Load 318(s1DArrayShadow) + 4560:154(f16vec2) Load 156(f16c2) + 4561: 52(float) Load 215(compare) + 4562:6(float16_t) Load 4274(f16lodClamp) + 4563:6(float16_t) Load 137(f16bias) + 4564:6(float16_t) ImageSampleDrefImplicitLod 4559 4560 4561 Bias MinLod 4563 4562 + 4565: 208(ptr) AccessChain 4401(texel) 207 + 4566:6(float16_t) Load 4565 + 4567:6(float16_t) FAdd 4566 4564 + 4568: 208(ptr) AccessChain 4401(texel) 207 + Store 4568 4567 + 4569: 337 Load 339(s2DArrayShadow) + 4570: 249(fvec4) Load 251(c4) + 4571: 52(float) Load 4267(lodClamp) + 4572: 52(float) CompositeExtract 4570 3 + 4573:6(float16_t) ImageSampleDrefImplicitLod 4569 4570 4572 MinLod 4571 + 4574: 208(ptr) AccessChain 4401(texel) 207 + 4575:6(float16_t) Load 4574 + 4576:6(float16_t) FAdd 4575 4573 + 4577: 208(ptr) AccessChain 4401(texel) 207 + Store 4577 4576 + 4578: 337 Load 339(s2DArrayShadow) + 4579:175(f16vec3) Load 177(f16c3) + 4580: 52(float) Load 215(compare) + 4581:6(float16_t) Load 4274(f16lodClamp) + 4582:6(float16_t) ImageSampleDrefImplicitLod 4578 4579 4580 MinLod 4581 + 4583: 208(ptr) AccessChain 4401(texel) 207 + 4584:6(float16_t) Load 4583 + 4585:6(float16_t) FAdd 4584 4582 + 4586: 208(ptr) AccessChain 4401(texel) 207 + Store 4586 4585 + 4587: 391 Load 393(sCubeArrayShadow) + 4588: 249(fvec4) Load 251(c4) + 4589: 52(float) Load 215(compare) + 4590: 52(float) Load 4267(lodClamp) + 4591:6(float16_t) ImageSampleDrefImplicitLod 4587 4588 4589 MinLod 4590 + 4592: 208(ptr) AccessChain 4401(texel) 207 + 4593:6(float16_t) Load 4592 + 4594:6(float16_t) FAdd 4593 4591 + 4595: 208(ptr) AccessChain 4401(texel) 207 + Store 4595 4594 + 4596: 391 Load 393(sCubeArrayShadow) + 4597: 7(f16vec4) Load 309(f16c4) + 4598: 52(float) Load 215(compare) + 4599:6(float16_t) Load 4274(f16lodClamp) + 4600:6(float16_t) ImageSampleDrefImplicitLod 4596 4597 4598 MinLod 4599 + 4601: 208(ptr) AccessChain 4401(texel) 207 + 4602:6(float16_t) Load 4601 + 4603:6(float16_t) FAdd 4602 4600 + 4604: 208(ptr) AccessChain 4401(texel) 207 + Store 4604 4603 + 4605: 7(f16vec4) Load 4401(texel) + ReturnValue 4605 FunctionEnd 103(testSparseTextureOffsetClamp(): 7(f16vec4) Function None 8 104: Label - 4598(texel): 64(ptr) Variable Function - Store 4598(texel) 121 - 4599: 143 Load 145(s2D) - 4600: 53(fvec2) Load 148(c2) - 4601: 52(float) Load 4257(lodClamp) - 4602:3102(ResType) ImageSparseSampleImplicitLod 4599 4600 ConstOffset MinLod 722 4601 - 4603: 7(f16vec4) CompositeExtract 4602 1 - Store 4598(texel) 4603 - 4604: 47(int) CompositeExtract 4602 0 - 4605: 143 Load 145(s2D) - 4606:154(f16vec2) Load 156(f16c2) - 4607:6(float16_t) Load 4264(f16lodClamp) - 4608:6(float16_t) Load 137(f16bias) - 4609:3102(ResType) ImageSparseSampleImplicitLod 4605 4606 Bias ConstOffset MinLod 4608 722 4607 - 4610: 7(f16vec4) CompositeExtract 4609 1 - Store 4598(texel) 4610 - 4611: 47(int) CompositeExtract 4609 0 - 4612: 163 Load 165(s3D) - 4613: 167(fvec3) Load 169(c3) - 4614: 52(float) Load 4257(lodClamp) - 4615:3102(ResType) ImageSparseSampleImplicitLod 4612 4613 ConstOffset MinLod 735 4614 - 4616: 7(f16vec4) CompositeExtract 4615 1 - Store 4598(texel) 4616 - 4617: 47(int) CompositeExtract 4615 0 - 4618: 163 Load 165(s3D) - 4619:175(f16vec3) Load 177(f16c3) - 4620:6(float16_t) Load 4264(f16lodClamp) - 4621:6(float16_t) Load 137(f16bias) - 4622:3102(ResType) ImageSparseSampleImplicitLod 4618 4619 Bias ConstOffset MinLod 4621 735 4620 - 4623: 7(f16vec4) CompositeExtract 4622 1 - Store 4598(texel) 4623 - 4624: 47(int) CompositeExtract 4622 0 - 4625: 224 Load 226(s2DShadow) - 4626: 167(fvec3) Load 169(c3) - 4627: 52(float) Load 4257(lodClamp) - 4628: 208(ptr) AccessChain 4598(texel) 207 - 4629: 52(float) CompositeExtract 4626 2 - 4630:3138(ResType) ImageSparseSampleDrefImplicitLod 4625 4626 4629 ConstOffset MinLod 722 4627 - 4631:6(float16_t) CompositeExtract 4630 1 - Store 4628 4631 - 4632: 47(int) CompositeExtract 4630 0 - 4633: 224 Load 226(s2DShadow) - 4634:154(f16vec2) Load 156(f16c2) - 4635: 52(float) Load 215(compare) - 4636:6(float16_t) Load 4264(f16lodClamp) - 4637: 208(ptr) AccessChain 4598(texel) 207 - 4638:6(float16_t) Load 137(f16bias) - 4639:3138(ResType) ImageSparseSampleDrefImplicitLod 4633 4634 4635 Bias ConstOffset MinLod 4638 722 4636 - 4640:6(float16_t) CompositeExtract 4639 1 - Store 4637 4640 - 4641: 47(int) CompositeExtract 4639 0 - 4642: 284 Load 286(s2DArray) - 4643: 167(fvec3) Load 169(c3) - 4644: 52(float) Load 4257(lodClamp) - 4645:3102(ResType) ImageSparseSampleImplicitLod 4642 4643 ConstOffset MinLod 722 4644 - 4646: 7(f16vec4) CompositeExtract 4645 1 - Store 4598(texel) 4646 - 4647: 47(int) CompositeExtract 4645 0 - 4648: 284 Load 286(s2DArray) - 4649:175(f16vec3) Load 177(f16c3) - 4650:6(float16_t) Load 4264(f16lodClamp) - 4651:6(float16_t) Load 137(f16bias) - 4652:3102(ResType) ImageSparseSampleImplicitLod 4648 4649 Bias ConstOffset MinLod 4651 722 4650 - 4653: 7(f16vec4) CompositeExtract 4652 1 - Store 4598(texel) 4653 - 4654: 47(int) CompositeExtract 4652 0 - 4655: 337 Load 339(s2DArrayShadow) - 4656: 249(fvec4) Load 251(c4) - 4657: 52(float) Load 4257(lodClamp) - 4658: 208(ptr) AccessChain 4598(texel) 207 - 4659: 52(float) CompositeExtract 4656 3 - 4660:3138(ResType) ImageSparseSampleDrefImplicitLod 4655 4656 4659 ConstOffset MinLod 722 4657 - 4661:6(float16_t) CompositeExtract 4660 1 - Store 4658 4661 - 4662: 47(int) CompositeExtract 4660 0 - 4663: 337 Load 339(s2DArrayShadow) - 4664:175(f16vec3) Load 177(f16c3) - 4665: 52(float) Load 215(compare) - 4666:6(float16_t) Load 4264(f16lodClamp) - 4667: 208(ptr) AccessChain 4598(texel) 207 - 4668:3138(ResType) ImageSparseSampleDrefImplicitLod 4663 4664 4665 ConstOffset MinLod 722 4666 - 4669:6(float16_t) CompositeExtract 4668 1 - Store 4667 4669 - 4670: 47(int) CompositeExtract 4668 0 - 4671: 7(f16vec4) Load 4598(texel) - ReturnValue 4671 + 4608(texel): 64(ptr) Variable Function + Store 4608(texel) 121 + 4609: 143 Load 145(s2D) + 4610: 53(fvec2) Load 148(c2) + 4611: 52(float) Load 4267(lodClamp) + 4612:3102(ResType) ImageSparseSampleImplicitLod 4609 4610 ConstOffset MinLod 722 4611 + 4613: 7(f16vec4) CompositeExtract 4612 1 + Store 4608(texel) 4613 + 4614: 47(int) CompositeExtract 4612 0 + 4615: 143 Load 145(s2D) + 4616:154(f16vec2) Load 156(f16c2) + 4617:6(float16_t) Load 4274(f16lodClamp) + 4618:6(float16_t) Load 137(f16bias) + 4619:3102(ResType) ImageSparseSampleImplicitLod 4615 4616 Bias ConstOffset MinLod 4618 722 4617 + 4620: 7(f16vec4) CompositeExtract 4619 1 + Store 4608(texel) 4620 + 4621: 47(int) CompositeExtract 4619 0 + 4622: 163 Load 165(s3D) + 4623: 167(fvec3) Load 169(c3) + 4624: 52(float) Load 4267(lodClamp) + 4625:3102(ResType) ImageSparseSampleImplicitLod 4622 4623 ConstOffset MinLod 735 4624 + 4626: 7(f16vec4) CompositeExtract 4625 1 + Store 4608(texel) 4626 + 4627: 47(int) CompositeExtract 4625 0 + 4628: 163 Load 165(s3D) + 4629:175(f16vec3) Load 177(f16c3) + 4630:6(float16_t) Load 4274(f16lodClamp) + 4631:6(float16_t) Load 137(f16bias) + 4632:3102(ResType) ImageSparseSampleImplicitLod 4628 4629 Bias ConstOffset MinLod 4631 735 4630 + 4633: 7(f16vec4) CompositeExtract 4632 1 + Store 4608(texel) 4633 + 4634: 47(int) CompositeExtract 4632 0 + 4635: 224 Load 226(s2DShadow) + 4636: 167(fvec3) Load 169(c3) + 4637: 52(float) Load 4267(lodClamp) + 4638: 208(ptr) AccessChain 4608(texel) 207 + 4639: 52(float) CompositeExtract 4636 2 + 4640:3138(ResType) ImageSparseSampleDrefImplicitLod 4635 4636 4639 ConstOffset MinLod 722 4637 + 4641:6(float16_t) CompositeExtract 4640 1 + Store 4638 4641 + 4642: 47(int) CompositeExtract 4640 0 + 4643: 224 Load 226(s2DShadow) + 4644:154(f16vec2) Load 156(f16c2) + 4645: 52(float) Load 215(compare) + 4646:6(float16_t) Load 4274(f16lodClamp) + 4647: 208(ptr) AccessChain 4608(texel) 207 + 4648:6(float16_t) Load 137(f16bias) + 4649:3138(ResType) ImageSparseSampleDrefImplicitLod 4643 4644 4645 Bias ConstOffset MinLod 4648 722 4646 + 4650:6(float16_t) CompositeExtract 4649 1 + Store 4647 4650 + 4651: 47(int) CompositeExtract 4649 0 + 4652: 284 Load 286(s2DArray) + 4653: 167(fvec3) Load 169(c3) + 4654: 52(float) Load 4267(lodClamp) + 4655:3102(ResType) ImageSparseSampleImplicitLod 4652 4653 ConstOffset MinLod 722 4654 + 4656: 7(f16vec4) CompositeExtract 4655 1 + Store 4608(texel) 4656 + 4657: 47(int) CompositeExtract 4655 0 + 4658: 284 Load 286(s2DArray) + 4659:175(f16vec3) Load 177(f16c3) + 4660:6(float16_t) Load 4274(f16lodClamp) + 4661:6(float16_t) Load 137(f16bias) + 4662:3102(ResType) ImageSparseSampleImplicitLod 4658 4659 Bias ConstOffset MinLod 4661 722 4660 + 4663: 7(f16vec4) CompositeExtract 4662 1 + Store 4608(texel) 4663 + 4664: 47(int) CompositeExtract 4662 0 + 4665: 337 Load 339(s2DArrayShadow) + 4666: 249(fvec4) Load 251(c4) + 4667: 52(float) Load 4267(lodClamp) + 4668: 208(ptr) AccessChain 4608(texel) 207 + 4669: 52(float) CompositeExtract 4666 3 + 4670:3138(ResType) ImageSparseSampleDrefImplicitLod 4665 4666 4669 ConstOffset MinLod 722 4667 + 4671:6(float16_t) CompositeExtract 4670 1 + Store 4668 4671 + 4672: 47(int) CompositeExtract 4670 0 + 4673: 337 Load 339(s2DArrayShadow) + 4674:175(f16vec3) Load 177(f16c3) + 4675: 52(float) Load 215(compare) + 4676:6(float16_t) Load 4274(f16lodClamp) + 4677: 208(ptr) AccessChain 4608(texel) 207 + 4678:3138(ResType) ImageSparseSampleDrefImplicitLod 4673 4674 4675 ConstOffset MinLod 722 4676 + 4679:6(float16_t) CompositeExtract 4678 1 + Store 4677 4679 + 4680: 47(int) CompositeExtract 4678 0 + 4681: 7(f16vec4) Load 4608(texel) + ReturnValue 4681 FunctionEnd 105(testTextureOffsetClamp(): 7(f16vec4) Function None 8 106: Label - 4674(texel): 64(ptr) Variable Function - Store 4674(texel) 121 - 4675: 123 Load 125(s1D) - 4676: 52(float) Load 128(c1) - 4677: 52(float) Load 4257(lodClamp) - 4678: 7(f16vec4) ImageSampleImplicitLod 4675 4676 ConstOffset MinLod 709 4677 - 4679: 7(f16vec4) Load 4674(texel) - 4680: 7(f16vec4) FAdd 4679 4678 - Store 4674(texel) 4680 - 4681: 123 Load 125(s1D) - 4682:6(float16_t) Load 135(f16c1) - 4683:6(float16_t) Load 4264(f16lodClamp) - 4684:6(float16_t) Load 137(f16bias) - 4685: 7(f16vec4) ImageSampleImplicitLod 4681 4682 Bias ConstOffset MinLod 4684 709 4683 - 4686: 7(f16vec4) Load 4674(texel) - 4687: 7(f16vec4) FAdd 4686 4685 - Store 4674(texel) 4687 - 4688: 143 Load 145(s2D) - 4689: 53(fvec2) Load 148(c2) - 4690: 52(float) Load 4257(lodClamp) - 4691: 7(f16vec4) ImageSampleImplicitLod 4688 4689 ConstOffset MinLod 722 4690 - 4692: 7(f16vec4) Load 4674(texel) - 4693: 7(f16vec4) FAdd 4692 4691 - Store 4674(texel) 4693 - 4694: 143 Load 145(s2D) - 4695:154(f16vec2) Load 156(f16c2) - 4696:6(float16_t) Load 4264(f16lodClamp) - 4697:6(float16_t) Load 137(f16bias) - 4698: 7(f16vec4) ImageSampleImplicitLod 4694 4695 Bias ConstOffset MinLod 4697 722 4696 - 4699: 7(f16vec4) Load 4674(texel) - 4700: 7(f16vec4) FAdd 4699 4698 - Store 4674(texel) 4700 - 4701: 163 Load 165(s3D) - 4702: 167(fvec3) Load 169(c3) - 4703: 52(float) Load 4257(lodClamp) - 4704: 7(f16vec4) ImageSampleImplicitLod 4701 4702 ConstOffset MinLod 735 4703 - 4705: 7(f16vec4) Load 4674(texel) - 4706: 7(f16vec4) FAdd 4705 4704 - Store 4674(texel) 4706 - 4707: 163 Load 165(s3D) - 4708:175(f16vec3) Load 177(f16c3) - 4709:6(float16_t) Load 4264(f16lodClamp) - 4710:6(float16_t) Load 137(f16bias) - 4711: 7(f16vec4) ImageSampleImplicitLod 4707 4708 Bias ConstOffset MinLod 4710 735 4709 - 4712: 7(f16vec4) Load 4674(texel) - 4713: 7(f16vec4) FAdd 4712 4711 - Store 4674(texel) 4713 - 4714: 199 Load 201(s1DShadow) - 4715: 167(fvec3) Load 169(c3) - 4716: 52(float) Load 4257(lodClamp) - 4717: 52(float) CompositeExtract 4715 2 - 4718:6(float16_t) ImageSampleDrefImplicitLod 4714 4715 4717 ConstOffset MinLod 709 4716 - 4719: 208(ptr) AccessChain 4674(texel) 207 - 4720:6(float16_t) Load 4719 - 4721:6(float16_t) FAdd 4720 4718 - 4722: 208(ptr) AccessChain 4674(texel) 207 - Store 4722 4721 - 4723: 199 Load 201(s1DShadow) - 4724:154(f16vec2) Load 156(f16c2) - 4725: 52(float) Load 215(compare) - 4726:6(float16_t) Load 4264(f16lodClamp) - 4727:6(float16_t) Load 137(f16bias) - 4728:6(float16_t) ImageSampleDrefImplicitLod 4723 4724 4725 Bias ConstOffset MinLod 4727 709 4726 - 4729: 208(ptr) AccessChain 4674(texel) 207 + 4684(texel): 64(ptr) Variable Function + Store 4684(texel) 121 + 4685: 123 Load 125(s1D) + 4686: 52(float) Load 128(c1) + 4687: 52(float) Load 4267(lodClamp) + 4688: 7(f16vec4) ImageSampleImplicitLod 4685 4686 ConstOffset MinLod 709 4687 + 4689: 7(f16vec4) Load 4684(texel) + 4690: 7(f16vec4) FAdd 4689 4688 + Store 4684(texel) 4690 + 4691: 123 Load 125(s1D) + 4692:6(float16_t) Load 135(f16c1) + 4693:6(float16_t) Load 4274(f16lodClamp) + 4694:6(float16_t) Load 137(f16bias) + 4695: 7(f16vec4) ImageSampleImplicitLod 4691 4692 Bias ConstOffset MinLod 4694 709 4693 + 4696: 7(f16vec4) Load 4684(texel) + 4697: 7(f16vec4) FAdd 4696 4695 + Store 4684(texel) 4697 + 4698: 143 Load 145(s2D) + 4699: 53(fvec2) Load 148(c2) + 4700: 52(float) Load 4267(lodClamp) + 4701: 7(f16vec4) ImageSampleImplicitLod 4698 4699 ConstOffset MinLod 722 4700 + 4702: 7(f16vec4) Load 4684(texel) + 4703: 7(f16vec4) FAdd 4702 4701 + Store 4684(texel) 4703 + 4704: 143 Load 145(s2D) + 4705:154(f16vec2) Load 156(f16c2) + 4706:6(float16_t) Load 4274(f16lodClamp) + 4707:6(float16_t) Load 137(f16bias) + 4708: 7(f16vec4) ImageSampleImplicitLod 4704 4705 Bias ConstOffset MinLod 4707 722 4706 + 4709: 7(f16vec4) Load 4684(texel) + 4710: 7(f16vec4) FAdd 4709 4708 + Store 4684(texel) 4710 + 4711: 163 Load 165(s3D) + 4712: 167(fvec3) Load 169(c3) + 4713: 52(float) Load 4267(lodClamp) + 4714: 7(f16vec4) ImageSampleImplicitLod 4711 4712 ConstOffset MinLod 735 4713 + 4715: 7(f16vec4) Load 4684(texel) + 4716: 7(f16vec4) FAdd 4715 4714 + Store 4684(texel) 4716 + 4717: 163 Load 165(s3D) + 4718:175(f16vec3) Load 177(f16c3) + 4719:6(float16_t) Load 4274(f16lodClamp) + 4720:6(float16_t) Load 137(f16bias) + 4721: 7(f16vec4) ImageSampleImplicitLod 4717 4718 Bias ConstOffset MinLod 4720 735 4719 + 4722: 7(f16vec4) Load 4684(texel) + 4723: 7(f16vec4) FAdd 4722 4721 + Store 4684(texel) 4723 + 4724: 199 Load 201(s1DShadow) + 4725: 167(fvec3) Load 169(c3) + 4726: 52(float) Load 4267(lodClamp) + 4727: 52(float) CompositeExtract 4725 2 + 4728:6(float16_t) ImageSampleDrefImplicitLod 4724 4725 4727 ConstOffset MinLod 709 4726 + 4729: 208(ptr) AccessChain 4684(texel) 207 4730:6(float16_t) Load 4729 4731:6(float16_t) FAdd 4730 4728 - 4732: 208(ptr) AccessChain 4674(texel) 207 + 4732: 208(ptr) AccessChain 4684(texel) 207 Store 4732 4731 - 4733: 224 Load 226(s2DShadow) - 4734: 167(fvec3) Load 169(c3) - 4735: 52(float) Load 4257(lodClamp) - 4736: 52(float) CompositeExtract 4734 2 - 4737:6(float16_t) ImageSampleDrefImplicitLod 4733 4734 4736 ConstOffset MinLod 722 4735 - 4738: 208(ptr) AccessChain 4674(texel) 207 - 4739:6(float16_t) Load 4738 - 4740:6(float16_t) FAdd 4739 4737 - 4741: 208(ptr) AccessChain 4674(texel) 207 - Store 4741 4740 - 4742: 224 Load 226(s2DShadow) - 4743:154(f16vec2) Load 156(f16c2) - 4744: 52(float) Load 215(compare) - 4745:6(float16_t) Load 4264(f16lodClamp) - 4746:6(float16_t) Load 137(f16bias) - 4747:6(float16_t) ImageSampleDrefImplicitLod 4742 4743 4744 Bias ConstOffset MinLod 4746 722 4745 - 4748: 208(ptr) AccessChain 4674(texel) 207 + 4733: 199 Load 201(s1DShadow) + 4734:154(f16vec2) Load 156(f16c2) + 4735: 52(float) Load 215(compare) + 4736:6(float16_t) Load 4274(f16lodClamp) + 4737:6(float16_t) Load 137(f16bias) + 4738:6(float16_t) ImageSampleDrefImplicitLod 4733 4734 4735 Bias ConstOffset MinLod 4737 709 4736 + 4739: 208(ptr) AccessChain 4684(texel) 207 + 4740:6(float16_t) Load 4739 + 4741:6(float16_t) FAdd 4740 4738 + 4742: 208(ptr) AccessChain 4684(texel) 207 + Store 4742 4741 + 4743: 224 Load 226(s2DShadow) + 4744: 167(fvec3) Load 169(c3) + 4745: 52(float) Load 4267(lodClamp) + 4746: 52(float) CompositeExtract 4744 2 + 4747:6(float16_t) ImageSampleDrefImplicitLod 4743 4744 4746 ConstOffset MinLod 722 4745 + 4748: 208(ptr) AccessChain 4684(texel) 207 4749:6(float16_t) Load 4748 4750:6(float16_t) FAdd 4749 4747 - 4751: 208(ptr) AccessChain 4674(texel) 207 + 4751: 208(ptr) AccessChain 4684(texel) 207 Store 4751 4750 - 4752: 269 Load 271(s1DArray) - 4753: 53(fvec2) Load 148(c2) - 4754: 52(float) Load 4257(lodClamp) - 4755: 7(f16vec4) ImageSampleImplicitLod 4752 4753 ConstOffset MinLod 709 4754 - 4756: 7(f16vec4) Load 4674(texel) - 4757: 7(f16vec4) FAdd 4756 4755 - Store 4674(texel) 4757 - 4758: 269 Load 271(s1DArray) - 4759:154(f16vec2) Load 156(f16c2) - 4760:6(float16_t) Load 4264(f16lodClamp) - 4761:6(float16_t) Load 137(f16bias) - 4762: 7(f16vec4) ImageSampleImplicitLod 4758 4759 Bias ConstOffset MinLod 4761 709 4760 - 4763: 7(f16vec4) Load 4674(texel) - 4764: 7(f16vec4) FAdd 4763 4762 - Store 4674(texel) 4764 - 4765: 284 Load 286(s2DArray) - 4766: 167(fvec3) Load 169(c3) - 4767: 52(float) Load 4257(lodClamp) - 4768: 7(f16vec4) ImageSampleImplicitLod 4765 4766 ConstOffset MinLod 722 4767 - 4769: 7(f16vec4) Load 4674(texel) - 4770: 7(f16vec4) FAdd 4769 4768 - Store 4674(texel) 4770 - 4771: 284 Load 286(s2DArray) - 4772:175(f16vec3) Load 177(f16c3) - 4773:6(float16_t) Load 4264(f16lodClamp) - 4774:6(float16_t) Load 137(f16bias) - 4775: 7(f16vec4) ImageSampleImplicitLod 4771 4772 Bias ConstOffset MinLod 4774 722 4773 - 4776: 7(f16vec4) Load 4674(texel) - 4777: 7(f16vec4) FAdd 4776 4775 - Store 4674(texel) 4777 - 4778: 316 Load 318(s1DArrayShadow) - 4779: 167(fvec3) Load 169(c3) - 4780: 52(float) Load 4257(lodClamp) - 4781: 52(float) CompositeExtract 4779 2 - 4782:6(float16_t) ImageSampleDrefImplicitLod 4778 4779 4781 ConstOffset MinLod 709 4780 - 4783: 208(ptr) AccessChain 4674(texel) 207 - 4784:6(float16_t) Load 4783 - 4785:6(float16_t) FAdd 4784 4782 - 4786: 208(ptr) AccessChain 4674(texel) 207 - Store 4786 4785 - 4787: 316 Load 318(s1DArrayShadow) - 4788:154(f16vec2) Load 156(f16c2) - 4789: 52(float) Load 215(compare) - 4790:6(float16_t) Load 4264(f16lodClamp) - 4791:6(float16_t) Load 137(f16bias) - 4792:6(float16_t) ImageSampleDrefImplicitLod 4787 4788 4789 Bias ConstOffset MinLod 4791 709 4790 - 4793: 208(ptr) AccessChain 4674(texel) 207 + 4752: 224 Load 226(s2DShadow) + 4753:154(f16vec2) Load 156(f16c2) + 4754: 52(float) Load 215(compare) + 4755:6(float16_t) Load 4274(f16lodClamp) + 4756:6(float16_t) Load 137(f16bias) + 4757:6(float16_t) ImageSampleDrefImplicitLod 4752 4753 4754 Bias ConstOffset MinLod 4756 722 4755 + 4758: 208(ptr) AccessChain 4684(texel) 207 + 4759:6(float16_t) Load 4758 + 4760:6(float16_t) FAdd 4759 4757 + 4761: 208(ptr) AccessChain 4684(texel) 207 + Store 4761 4760 + 4762: 269 Load 271(s1DArray) + 4763: 53(fvec2) Load 148(c2) + 4764: 52(float) Load 4267(lodClamp) + 4765: 7(f16vec4) ImageSampleImplicitLod 4762 4763 ConstOffset MinLod 709 4764 + 4766: 7(f16vec4) Load 4684(texel) + 4767: 7(f16vec4) FAdd 4766 4765 + Store 4684(texel) 4767 + 4768: 269 Load 271(s1DArray) + 4769:154(f16vec2) Load 156(f16c2) + 4770:6(float16_t) Load 4274(f16lodClamp) + 4771:6(float16_t) Load 137(f16bias) + 4772: 7(f16vec4) ImageSampleImplicitLod 4768 4769 Bias ConstOffset MinLod 4771 709 4770 + 4773: 7(f16vec4) Load 4684(texel) + 4774: 7(f16vec4) FAdd 4773 4772 + Store 4684(texel) 4774 + 4775: 284 Load 286(s2DArray) + 4776: 167(fvec3) Load 169(c3) + 4777: 52(float) Load 4267(lodClamp) + 4778: 7(f16vec4) ImageSampleImplicitLod 4775 4776 ConstOffset MinLod 722 4777 + 4779: 7(f16vec4) Load 4684(texel) + 4780: 7(f16vec4) FAdd 4779 4778 + Store 4684(texel) 4780 + 4781: 284 Load 286(s2DArray) + 4782:175(f16vec3) Load 177(f16c3) + 4783:6(float16_t) Load 4274(f16lodClamp) + 4784:6(float16_t) Load 137(f16bias) + 4785: 7(f16vec4) ImageSampleImplicitLod 4781 4782 Bias ConstOffset MinLod 4784 722 4783 + 4786: 7(f16vec4) Load 4684(texel) + 4787: 7(f16vec4) FAdd 4786 4785 + Store 4684(texel) 4787 + 4788: 316 Load 318(s1DArrayShadow) + 4789: 167(fvec3) Load 169(c3) + 4790: 52(float) Load 4267(lodClamp) + 4791: 52(float) CompositeExtract 4789 2 + 4792:6(float16_t) ImageSampleDrefImplicitLod 4788 4789 4791 ConstOffset MinLod 709 4790 + 4793: 208(ptr) AccessChain 4684(texel) 207 4794:6(float16_t) Load 4793 4795:6(float16_t) FAdd 4794 4792 - 4796: 208(ptr) AccessChain 4674(texel) 207 + 4796: 208(ptr) AccessChain 4684(texel) 207 Store 4796 4795 - 4797: 337 Load 339(s2DArrayShadow) - 4798: 249(fvec4) Load 251(c4) - 4799: 52(float) Load 4257(lodClamp) - 4800: 52(float) CompositeExtract 4798 3 - 4801:6(float16_t) ImageSampleDrefImplicitLod 4797 4798 4800 ConstOffset MinLod 722 4799 - 4802: 208(ptr) AccessChain 4674(texel) 207 - 4803:6(float16_t) Load 4802 - 4804:6(float16_t) FAdd 4803 4801 - 4805: 208(ptr) AccessChain 4674(texel) 207 - Store 4805 4804 - 4806: 337 Load 339(s2DArrayShadow) - 4807:175(f16vec3) Load 177(f16c3) - 4808: 52(float) Load 215(compare) - 4809:6(float16_t) Load 4264(f16lodClamp) - 4810:6(float16_t) ImageSampleDrefImplicitLod 4806 4807 4808 ConstOffset MinLod 722 4809 - 4811: 208(ptr) AccessChain 4674(texel) 207 - 4812:6(float16_t) Load 4811 - 4813:6(float16_t) FAdd 4812 4810 - 4814: 208(ptr) AccessChain 4674(texel) 207 - Store 4814 4813 - 4815: 7(f16vec4) Load 4674(texel) - ReturnValue 4815 + 4797: 316 Load 318(s1DArrayShadow) + 4798:154(f16vec2) Load 156(f16c2) + 4799: 52(float) Load 215(compare) + 4800:6(float16_t) Load 4274(f16lodClamp) + 4801:6(float16_t) Load 137(f16bias) + 4802:6(float16_t) ImageSampleDrefImplicitLod 4797 4798 4799 Bias ConstOffset MinLod 4801 709 4800 + 4803: 208(ptr) AccessChain 4684(texel) 207 + 4804:6(float16_t) Load 4803 + 4805:6(float16_t) FAdd 4804 4802 + 4806: 208(ptr) AccessChain 4684(texel) 207 + Store 4806 4805 + 4807: 337 Load 339(s2DArrayShadow) + 4808: 249(fvec4) Load 251(c4) + 4809: 52(float) Load 4267(lodClamp) + 4810: 52(float) CompositeExtract 4808 3 + 4811:6(float16_t) ImageSampleDrefImplicitLod 4807 4808 4810 ConstOffset MinLod 722 4809 + 4812: 208(ptr) AccessChain 4684(texel) 207 + 4813:6(float16_t) Load 4812 + 4814:6(float16_t) FAdd 4813 4811 + 4815: 208(ptr) AccessChain 4684(texel) 207 + Store 4815 4814 + 4816: 337 Load 339(s2DArrayShadow) + 4817:175(f16vec3) Load 177(f16c3) + 4818: 52(float) Load 215(compare) + 4819:6(float16_t) Load 4274(f16lodClamp) + 4820:6(float16_t) ImageSampleDrefImplicitLod 4816 4817 4818 ConstOffset MinLod 722 4819 + 4821: 208(ptr) AccessChain 4684(texel) 207 + 4822:6(float16_t) Load 4821 + 4823:6(float16_t) FAdd 4822 4820 + 4824: 208(ptr) AccessChain 4684(texel) 207 + Store 4824 4823 + 4825: 7(f16vec4) Load 4684(texel) + ReturnValue 4825 FunctionEnd 107(testSparseTextureGradClamp(): 7(f16vec4) Function None 8 108: Label - 4818(texel): 64(ptr) Variable Function - Store 4818(texel) 121 - 4819: 143 Load 145(s2D) - 4820: 53(fvec2) Load 148(c2) - 4821: 53(fvec2) Load 1409(dPdxy2) - 4822: 53(fvec2) Load 1409(dPdxy2) - 4823: 52(float) Load 4257(lodClamp) - 4824:3102(ResType) ImageSparseSampleExplicitLod 4819 4820 Grad MinLod 4821 4822 4823 - 4825: 7(f16vec4) CompositeExtract 4824 1 - Store 4818(texel) 4825 - 4826: 47(int) CompositeExtract 4824 0 - 4827: 143 Load 145(s2D) - 4828:154(f16vec2) Load 156(f16c2) - 4829:154(f16vec2) Load 1417(f16dPdxy2) - 4830:154(f16vec2) Load 1417(f16dPdxy2) - 4831:6(float16_t) Load 4264(f16lodClamp) - 4832:3102(ResType) ImageSparseSampleExplicitLod 4827 4828 Grad MinLod 4829 4830 4831 - 4833: 7(f16vec4) CompositeExtract 4832 1 - Store 4818(texel) 4833 - 4834: 47(int) CompositeExtract 4832 0 - 4835: 163 Load 165(s3D) - 4836: 167(fvec3) Load 169(c3) - 4837: 167(fvec3) Load 1425(dPdxy3) - 4838: 167(fvec3) Load 1425(dPdxy3) - 4839: 52(float) Load 4257(lodClamp) - 4840:3102(ResType) ImageSparseSampleExplicitLod 4835 4836 Grad MinLod 4837 4838 4839 - 4841: 7(f16vec4) CompositeExtract 4840 1 - Store 4818(texel) 4841 - 4842: 47(int) CompositeExtract 4840 0 - 4843: 163 Load 165(s3D) - 4844:175(f16vec3) Load 177(f16c3) - 4845:175(f16vec3) Load 1433(f16dPdxy3) - 4846:175(f16vec3) Load 1433(f16dPdxy3) - 4847:6(float16_t) Load 4264(f16lodClamp) - 4848:3102(ResType) ImageSparseSampleExplicitLod 4843 4844 Grad MinLod 4845 4846 4847 - 4849: 7(f16vec4) CompositeExtract 4848 1 - Store 4818(texel) 4849 - 4850: 47(int) CompositeExtract 4848 0 - 4851: 184 Load 186(sCube) - 4852: 167(fvec3) Load 169(c3) - 4853: 167(fvec3) Load 1425(dPdxy3) - 4854: 167(fvec3) Load 1425(dPdxy3) - 4855: 52(float) Load 4257(lodClamp) - 4856:3102(ResType) ImageSparseSampleExplicitLod 4851 4852 Grad MinLod 4853 4854 4855 - 4857: 7(f16vec4) CompositeExtract 4856 1 - Store 4818(texel) 4857 - 4858: 47(int) CompositeExtract 4856 0 - 4859: 184 Load 186(sCube) - 4860:175(f16vec3) Load 177(f16c3) - 4861:175(f16vec3) Load 1433(f16dPdxy3) - 4862:175(f16vec3) Load 1433(f16dPdxy3) - 4863:6(float16_t) Load 4264(f16lodClamp) - 4864:3102(ResType) ImageSparseSampleExplicitLod 4859 4860 Grad MinLod 4861 4862 4863 - 4865: 7(f16vec4) CompositeExtract 4864 1 - Store 4818(texel) 4865 - 4866: 47(int) CompositeExtract 4864 0 - 4867: 224 Load 226(s2DShadow) - 4868: 167(fvec3) Load 169(c3) - 4869: 53(fvec2) Load 1409(dPdxy2) - 4870: 53(fvec2) Load 1409(dPdxy2) - 4871: 52(float) Load 4257(lodClamp) - 4872: 208(ptr) AccessChain 4818(texel) 207 - 4873: 52(float) CompositeExtract 4868 2 - 4874:3138(ResType) ImageSparseSampleDrefExplicitLod 4867 4868 4873 Grad MinLod 4869 4870 4871 - 4875:6(float16_t) CompositeExtract 4874 1 - Store 4872 4875 + 4828(texel): 64(ptr) Variable Function + Store 4828(texel) 121 + 4829: 143 Load 145(s2D) + 4830: 53(fvec2) Load 148(c2) + 4831: 53(fvec2) Load 1409(dPdxy2) + 4832: 53(fvec2) Load 1409(dPdxy2) + 4833: 52(float) Load 4267(lodClamp) + 4834:3102(ResType) ImageSparseSampleExplicitLod 4829 4830 Grad MinLod 4831 4832 4833 + 4835: 7(f16vec4) CompositeExtract 4834 1 + Store 4828(texel) 4835 + 4836: 47(int) CompositeExtract 4834 0 + 4837: 143 Load 145(s2D) + 4838:154(f16vec2) Load 156(f16c2) + 4839:154(f16vec2) Load 1417(f16dPdxy2) + 4840:154(f16vec2) Load 1417(f16dPdxy2) + 4841:6(float16_t) Load 4274(f16lodClamp) + 4842:3102(ResType) ImageSparseSampleExplicitLod 4837 4838 Grad MinLod 4839 4840 4841 + 4843: 7(f16vec4) CompositeExtract 4842 1 + Store 4828(texel) 4843 + 4844: 47(int) CompositeExtract 4842 0 + 4845: 163 Load 165(s3D) + 4846: 167(fvec3) Load 169(c3) + 4847: 167(fvec3) Load 1425(dPdxy3) + 4848: 167(fvec3) Load 1425(dPdxy3) + 4849: 52(float) Load 4267(lodClamp) + 4850:3102(ResType) ImageSparseSampleExplicitLod 4845 4846 Grad MinLod 4847 4848 4849 + 4851: 7(f16vec4) CompositeExtract 4850 1 + Store 4828(texel) 4851 + 4852: 47(int) CompositeExtract 4850 0 + 4853: 163 Load 165(s3D) + 4854:175(f16vec3) Load 177(f16c3) + 4855:175(f16vec3) Load 1433(f16dPdxy3) + 4856:175(f16vec3) Load 1433(f16dPdxy3) + 4857:6(float16_t) Load 4274(f16lodClamp) + 4858:3102(ResType) ImageSparseSampleExplicitLod 4853 4854 Grad MinLod 4855 4856 4857 + 4859: 7(f16vec4) CompositeExtract 4858 1 + Store 4828(texel) 4859 + 4860: 47(int) CompositeExtract 4858 0 + 4861: 184 Load 186(sCube) + 4862: 167(fvec3) Load 169(c3) + 4863: 167(fvec3) Load 1425(dPdxy3) + 4864: 167(fvec3) Load 1425(dPdxy3) + 4865: 52(float) Load 4267(lodClamp) + 4866:3102(ResType) ImageSparseSampleExplicitLod 4861 4862 Grad MinLod 4863 4864 4865 + 4867: 7(f16vec4) CompositeExtract 4866 1 + Store 4828(texel) 4867 + 4868: 47(int) CompositeExtract 4866 0 + 4869: 184 Load 186(sCube) + 4870:175(f16vec3) Load 177(f16c3) + 4871:175(f16vec3) Load 1433(f16dPdxy3) + 4872:175(f16vec3) Load 1433(f16dPdxy3) + 4873:6(float16_t) Load 4274(f16lodClamp) + 4874:3102(ResType) ImageSparseSampleExplicitLod 4869 4870 Grad MinLod 4871 4872 4873 + 4875: 7(f16vec4) CompositeExtract 4874 1 + Store 4828(texel) 4875 4876: 47(int) CompositeExtract 4874 0 4877: 224 Load 226(s2DShadow) - 4878:154(f16vec2) Load 156(f16c2) - 4879: 52(float) Load 215(compare) - 4880:154(f16vec2) Load 1417(f16dPdxy2) - 4881:154(f16vec2) Load 1417(f16dPdxy2) - 4882:6(float16_t) Load 4264(f16lodClamp) - 4883: 208(ptr) AccessChain 4818(texel) 207 - 4884:3138(ResType) ImageSparseSampleDrefExplicitLod 4877 4878 4879 Grad MinLod 4880 4881 4882 + 4878: 167(fvec3) Load 169(c3) + 4879: 53(fvec2) Load 1409(dPdxy2) + 4880: 53(fvec2) Load 1409(dPdxy2) + 4881: 52(float) Load 4267(lodClamp) + 4882: 208(ptr) AccessChain 4828(texel) 207 + 4883: 52(float) CompositeExtract 4878 2 + 4884:3138(ResType) ImageSparseSampleDrefExplicitLod 4877 4878 4883 Grad MinLod 4879 4880 4881 4885:6(float16_t) CompositeExtract 4884 1 - Store 4883 4885 + Store 4882 4885 4886: 47(int) CompositeExtract 4884 0 - 4887: 245 Load 247(sCubeShadow) - 4888: 249(fvec4) Load 251(c4) - 4889: 167(fvec3) Load 1425(dPdxy3) - 4890: 167(fvec3) Load 1425(dPdxy3) - 4891: 52(float) Load 4257(lodClamp) - 4892: 208(ptr) AccessChain 4818(texel) 207 - 4893: 52(float) CompositeExtract 4888 3 - 4894:3138(ResType) ImageSparseSampleDrefExplicitLod 4887 4888 4893 Grad MinLod 4889 4890 4891 + 4887: 224 Load 226(s2DShadow) + 4888:154(f16vec2) Load 156(f16c2) + 4889: 52(float) Load 215(compare) + 4890:154(f16vec2) Load 1417(f16dPdxy2) + 4891:154(f16vec2) Load 1417(f16dPdxy2) + 4892:6(float16_t) Load 4274(f16lodClamp) + 4893: 208(ptr) AccessChain 4828(texel) 207 + 4894:3138(ResType) ImageSparseSampleDrefExplicitLod 4887 4888 4889 Grad MinLod 4890 4891 4892 4895:6(float16_t) CompositeExtract 4894 1 - Store 4892 4895 + Store 4893 4895 4896: 47(int) CompositeExtract 4894 0 4897: 245 Load 247(sCubeShadow) - 4898:175(f16vec3) Load 177(f16c3) - 4899: 52(float) Load 215(compare) - 4900:175(f16vec3) Load 1433(f16dPdxy3) - 4901:175(f16vec3) Load 1433(f16dPdxy3) - 4902:6(float16_t) Load 4264(f16lodClamp) - 4903: 208(ptr) AccessChain 4818(texel) 207 - 4904:3138(ResType) ImageSparseSampleDrefExplicitLod 4897 4898 4899 Grad MinLod 4900 4901 4902 + 4898: 249(fvec4) Load 251(c4) + 4899: 167(fvec3) Load 1425(dPdxy3) + 4900: 167(fvec3) Load 1425(dPdxy3) + 4901: 52(float) Load 4267(lodClamp) + 4902: 208(ptr) AccessChain 4828(texel) 207 + 4903: 52(float) CompositeExtract 4898 3 + 4904:3138(ResType) ImageSparseSampleDrefExplicitLod 4897 4898 4903 Grad MinLod 4899 4900 4901 4905:6(float16_t) CompositeExtract 4904 1 - Store 4903 4905 + Store 4902 4905 4906: 47(int) CompositeExtract 4904 0 - 4907: 284 Load 286(s2DArray) - 4908: 167(fvec3) Load 169(c3) - 4909: 53(fvec2) Load 1409(dPdxy2) - 4910: 53(fvec2) Load 1409(dPdxy2) - 4911: 52(float) Load 4257(lodClamp) - 4912:3102(ResType) ImageSparseSampleExplicitLod 4907 4908 Grad MinLod 4909 4910 4911 - 4913: 7(f16vec4) CompositeExtract 4912 1 - Store 4818(texel) 4913 - 4914: 47(int) CompositeExtract 4912 0 - 4915: 284 Load 286(s2DArray) - 4916:175(f16vec3) Load 177(f16c3) - 4917:154(f16vec2) Load 1417(f16dPdxy2) - 4918:154(f16vec2) Load 1417(f16dPdxy2) - 4919:6(float16_t) Load 4264(f16lodClamp) - 4920:3102(ResType) ImageSparseSampleExplicitLod 4915 4916 Grad MinLod 4917 4918 4919 - 4921: 7(f16vec4) CompositeExtract 4920 1 - Store 4818(texel) 4921 - 4922: 47(int) CompositeExtract 4920 0 - 4923: 337 Load 339(s2DArrayShadow) - 4924: 249(fvec4) Load 251(c4) - 4925: 53(fvec2) Load 1409(dPdxy2) - 4926: 53(fvec2) Load 1409(dPdxy2) - 4927: 52(float) Load 4257(lodClamp) - 4928: 208(ptr) AccessChain 4818(texel) 207 - 4929: 52(float) CompositeExtract 4924 3 - 4930:3138(ResType) ImageSparseSampleDrefExplicitLod 4923 4924 4929 Grad MinLod 4925 4926 4927 - 4931:6(float16_t) CompositeExtract 4930 1 - Store 4928 4931 + 4907: 245 Load 247(sCubeShadow) + 4908:175(f16vec3) Load 177(f16c3) + 4909: 52(float) Load 215(compare) + 4910:175(f16vec3) Load 1433(f16dPdxy3) + 4911:175(f16vec3) Load 1433(f16dPdxy3) + 4912:6(float16_t) Load 4274(f16lodClamp) + 4913: 208(ptr) AccessChain 4828(texel) 207 + 4914:3138(ResType) ImageSparseSampleDrefExplicitLod 4907 4908 4909 Grad MinLod 4910 4911 4912 + 4915:6(float16_t) CompositeExtract 4914 1 + Store 4913 4915 + 4916: 47(int) CompositeExtract 4914 0 + 4917: 284 Load 286(s2DArray) + 4918: 167(fvec3) Load 169(c3) + 4919: 53(fvec2) Load 1409(dPdxy2) + 4920: 53(fvec2) Load 1409(dPdxy2) + 4921: 52(float) Load 4267(lodClamp) + 4922:3102(ResType) ImageSparseSampleExplicitLod 4917 4918 Grad MinLod 4919 4920 4921 + 4923: 7(f16vec4) CompositeExtract 4922 1 + Store 4828(texel) 4923 + 4924: 47(int) CompositeExtract 4922 0 + 4925: 284 Load 286(s2DArray) + 4926:175(f16vec3) Load 177(f16c3) + 4927:154(f16vec2) Load 1417(f16dPdxy2) + 4928:154(f16vec2) Load 1417(f16dPdxy2) + 4929:6(float16_t) Load 4274(f16lodClamp) + 4930:3102(ResType) ImageSparseSampleExplicitLod 4925 4926 Grad MinLod 4927 4928 4929 + 4931: 7(f16vec4) CompositeExtract 4930 1 + Store 4828(texel) 4931 4932: 47(int) CompositeExtract 4930 0 4933: 337 Load 339(s2DArrayShadow) - 4934:175(f16vec3) Load 177(f16c3) - 4935: 52(float) Load 215(compare) - 4936:154(f16vec2) Load 1417(f16dPdxy2) - 4937:154(f16vec2) Load 1417(f16dPdxy2) - 4938:6(float16_t) Load 4264(f16lodClamp) - 4939: 208(ptr) AccessChain 4818(texel) 207 - 4940:3138(ResType) ImageSparseSampleDrefExplicitLod 4933 4934 4935 Grad MinLod 4936 4937 4938 + 4934: 249(fvec4) Load 251(c4) + 4935: 53(fvec2) Load 1409(dPdxy2) + 4936: 53(fvec2) Load 1409(dPdxy2) + 4937: 52(float) Load 4267(lodClamp) + 4938: 208(ptr) AccessChain 4828(texel) 207 + 4939: 52(float) CompositeExtract 4934 3 + 4940:3138(ResType) ImageSparseSampleDrefExplicitLod 4933 4934 4939 Grad MinLod 4935 4936 4937 4941:6(float16_t) CompositeExtract 4940 1 - Store 4939 4941 + Store 4938 4941 4942: 47(int) CompositeExtract 4940 0 - 4943: 299 Load 301(sCubeArray) - 4944: 249(fvec4) Load 251(c4) - 4945: 167(fvec3) Load 1425(dPdxy3) - 4946: 167(fvec3) Load 1425(dPdxy3) - 4947: 52(float) Load 4257(lodClamp) - 4948:3102(ResType) ImageSparseSampleExplicitLod 4943 4944 Grad MinLod 4945 4946 4947 - 4949: 7(f16vec4) CompositeExtract 4948 1 - Store 4818(texel) 4949 - 4950: 47(int) CompositeExtract 4948 0 - 4951: 299 Load 301(sCubeArray) - 4952: 7(f16vec4) Load 309(f16c4) - 4953:175(f16vec3) Load 1433(f16dPdxy3) - 4954:175(f16vec3) Load 1433(f16dPdxy3) - 4955:6(float16_t) Load 4264(f16lodClamp) - 4956:3102(ResType) ImageSparseSampleExplicitLod 4951 4952 Grad MinLod 4953 4954 4955 - 4957: 7(f16vec4) CompositeExtract 4956 1 - Store 4818(texel) 4957 - 4958: 47(int) CompositeExtract 4956 0 - 4959: 7(f16vec4) Load 4818(texel) - ReturnValue 4959 + 4943: 337 Load 339(s2DArrayShadow) + 4944:175(f16vec3) Load 177(f16c3) + 4945: 52(float) Load 215(compare) + 4946:154(f16vec2) Load 1417(f16dPdxy2) + 4947:154(f16vec2) Load 1417(f16dPdxy2) + 4948:6(float16_t) Load 4274(f16lodClamp) + 4949: 208(ptr) AccessChain 4828(texel) 207 + 4950:3138(ResType) ImageSparseSampleDrefExplicitLod 4943 4944 4945 Grad MinLod 4946 4947 4948 + 4951:6(float16_t) CompositeExtract 4950 1 + Store 4949 4951 + 4952: 47(int) CompositeExtract 4950 0 + 4953: 299 Load 301(sCubeArray) + 4954: 249(fvec4) Load 251(c4) + 4955: 167(fvec3) Load 1425(dPdxy3) + 4956: 167(fvec3) Load 1425(dPdxy3) + 4957: 52(float) Load 4267(lodClamp) + 4958:3102(ResType) ImageSparseSampleExplicitLod 4953 4954 Grad MinLod 4955 4956 4957 + 4959: 7(f16vec4) CompositeExtract 4958 1 + Store 4828(texel) 4959 + 4960: 47(int) CompositeExtract 4958 0 + 4961: 299 Load 301(sCubeArray) + 4962: 7(f16vec4) Load 309(f16c4) + 4963:175(f16vec3) Load 1433(f16dPdxy3) + 4964:175(f16vec3) Load 1433(f16dPdxy3) + 4965:6(float16_t) Load 4274(f16lodClamp) + 4966:3102(ResType) ImageSparseSampleExplicitLod 4961 4962 Grad MinLod 4963 4964 4965 + 4967: 7(f16vec4) CompositeExtract 4966 1 + Store 4828(texel) 4967 + 4968: 47(int) CompositeExtract 4966 0 + 4969: 7(f16vec4) Load 4828(texel) + ReturnValue 4969 FunctionEnd 109(testTextureGradClamp(): 7(f16vec4) Function None 8 110: Label - 4962(texel): 64(ptr) Variable Function - Store 4962(texel) 121 - 4963: 123 Load 125(s1D) - 4964: 52(float) Load 128(c1) - 4965: 52(float) Load 1393(dPdxy1) - 4966: 52(float) Load 1393(dPdxy1) - 4967: 52(float) Load 4257(lodClamp) - 4968: 7(f16vec4) ImageSampleExplicitLod 4963 4964 Grad MinLod 4965 4966 4967 - 4969: 7(f16vec4) Load 4962(texel) - 4970: 7(f16vec4) FAdd 4969 4968 - Store 4962(texel) 4970 - 4971: 123 Load 125(s1D) - 4972:6(float16_t) Load 135(f16c1) - 4973:6(float16_t) Load 1401(f16dPdxy1) - 4974:6(float16_t) Load 1401(f16dPdxy1) - 4975:6(float16_t) Load 4264(f16lodClamp) - 4976: 7(f16vec4) ImageSampleExplicitLod 4971 4972 Grad MinLod 4973 4974 4975 - 4977: 7(f16vec4) Load 4962(texel) - 4978: 7(f16vec4) FAdd 4977 4976 - Store 4962(texel) 4978 - 4979: 143 Load 145(s2D) - 4980: 53(fvec2) Load 148(c2) - 4981: 53(fvec2) Load 1409(dPdxy2) - 4982: 53(fvec2) Load 1409(dPdxy2) - 4983: 52(float) Load 4257(lodClamp) - 4984: 7(f16vec4) ImageSampleExplicitLod 4979 4980 Grad MinLod 4981 4982 4983 - 4985: 7(f16vec4) Load 4962(texel) - 4986: 7(f16vec4) FAdd 4985 4984 - Store 4962(texel) 4986 - 4987: 143 Load 145(s2D) - 4988:154(f16vec2) Load 156(f16c2) - 4989:154(f16vec2) Load 1417(f16dPdxy2) - 4990:154(f16vec2) Load 1417(f16dPdxy2) - 4991:6(float16_t) Load 4264(f16lodClamp) - 4992: 7(f16vec4) ImageSampleExplicitLod 4987 4988 Grad MinLod 4989 4990 4991 - 4993: 7(f16vec4) Load 4962(texel) - 4994: 7(f16vec4) FAdd 4993 4992 - Store 4962(texel) 4994 - 4995: 163 Load 165(s3D) - 4996: 167(fvec3) Load 169(c3) - 4997: 167(fvec3) Load 1425(dPdxy3) - 4998: 167(fvec3) Load 1425(dPdxy3) - 4999: 52(float) Load 4257(lodClamp) - 5000: 7(f16vec4) ImageSampleExplicitLod 4995 4996 Grad MinLod 4997 4998 4999 - 5001: 7(f16vec4) Load 4962(texel) - 5002: 7(f16vec4) FAdd 5001 5000 - Store 4962(texel) 5002 - 5003: 163 Load 165(s3D) - 5004:175(f16vec3) Load 177(f16c3) - 5005:175(f16vec3) Load 1433(f16dPdxy3) - 5006:175(f16vec3) Load 1433(f16dPdxy3) - 5007:6(float16_t) Load 4264(f16lodClamp) - 5008: 7(f16vec4) ImageSampleExplicitLod 5003 5004 Grad MinLod 5005 5006 5007 - 5009: 7(f16vec4) Load 4962(texel) - 5010: 7(f16vec4) FAdd 5009 5008 - Store 4962(texel) 5010 - 5011: 184 Load 186(sCube) - 5012: 167(fvec3) Load 169(c3) - 5013: 167(fvec3) Load 1425(dPdxy3) - 5014: 167(fvec3) Load 1425(dPdxy3) - 5015: 52(float) Load 4257(lodClamp) - 5016: 7(f16vec4) ImageSampleExplicitLod 5011 5012 Grad MinLod 5013 5014 5015 - 5017: 7(f16vec4) Load 4962(texel) - 5018: 7(f16vec4) FAdd 5017 5016 - Store 4962(texel) 5018 - 5019: 184 Load 186(sCube) - 5020:175(f16vec3) Load 177(f16c3) - 5021:175(f16vec3) Load 1433(f16dPdxy3) - 5022:175(f16vec3) Load 1433(f16dPdxy3) - 5023:6(float16_t) Load 4264(f16lodClamp) - 5024: 7(f16vec4) ImageSampleExplicitLod 5019 5020 Grad MinLod 5021 5022 5023 - 5025: 7(f16vec4) Load 4962(texel) - 5026: 7(f16vec4) FAdd 5025 5024 - Store 4962(texel) 5026 - 5027: 199 Load 201(s1DShadow) - 5028: 167(fvec3) Load 169(c3) - 5029: 52(float) Load 1393(dPdxy1) - 5030: 52(float) Load 1393(dPdxy1) - 5031: 52(float) Load 4257(lodClamp) - 5032: 52(float) CompositeExtract 5028 2 - 5033:6(float16_t) ImageSampleDrefExplicitLod 5027 5028 5032 Grad MinLod 5029 5030 5031 - 5034: 208(ptr) AccessChain 4962(texel) 207 - 5035:6(float16_t) Load 5034 - 5036:6(float16_t) FAdd 5035 5033 - 5037: 208(ptr) AccessChain 4962(texel) 207 - Store 5037 5036 - 5038: 199 Load 201(s1DShadow) - 5039:154(f16vec2) Load 156(f16c2) - 5040: 52(float) Load 215(compare) - 5041:6(float16_t) Load 1401(f16dPdxy1) - 5042:6(float16_t) Load 1401(f16dPdxy1) - 5043:6(float16_t) Load 4264(f16lodClamp) - 5044:6(float16_t) ImageSampleDrefExplicitLod 5038 5039 5040 Grad MinLod 5041 5042 5043 - 5045: 208(ptr) AccessChain 4962(texel) 207 - 5046:6(float16_t) Load 5045 - 5047:6(float16_t) FAdd 5046 5044 - 5048: 208(ptr) AccessChain 4962(texel) 207 - Store 5048 5047 - 5049: 224 Load 226(s2DShadow) - 5050: 167(fvec3) Load 169(c3) - 5051: 53(fvec2) Load 1409(dPdxy2) - 5052: 53(fvec2) Load 1409(dPdxy2) - 5053: 52(float) Load 4257(lodClamp) - 5054: 52(float) CompositeExtract 5050 2 - 5055:6(float16_t) ImageSampleDrefExplicitLod 5049 5050 5054 Grad MinLod 5051 5052 5053 - 5056: 208(ptr) AccessChain 4962(texel) 207 - 5057:6(float16_t) Load 5056 - 5058:6(float16_t) FAdd 5057 5055 - 5059: 208(ptr) AccessChain 4962(texel) 207 - Store 5059 5058 - 5060: 224 Load 226(s2DShadow) - 5061:154(f16vec2) Load 156(f16c2) - 5062: 52(float) Load 215(compare) - 5063:154(f16vec2) Load 1417(f16dPdxy2) - 5064:154(f16vec2) Load 1417(f16dPdxy2) - 5065:6(float16_t) Load 4264(f16lodClamp) - 5066:6(float16_t) ImageSampleDrefExplicitLod 5060 5061 5062 Grad MinLod 5063 5064 5065 - 5067: 208(ptr) AccessChain 4962(texel) 207 - 5068:6(float16_t) Load 5067 - 5069:6(float16_t) FAdd 5068 5066 - 5070: 208(ptr) AccessChain 4962(texel) 207 - Store 5070 5069 - 5071: 245 Load 247(sCubeShadow) - 5072: 249(fvec4) Load 251(c4) - 5073: 167(fvec3) Load 1425(dPdxy3) - 5074: 167(fvec3) Load 1425(dPdxy3) - 5075: 52(float) Load 4257(lodClamp) - 5076: 52(float) CompositeExtract 5072 3 - 5077:6(float16_t) ImageSampleDrefExplicitLod 5071 5072 5076 Grad MinLod 5073 5074 5075 - 5078: 208(ptr) AccessChain 4962(texel) 207 - 5079:6(float16_t) Load 5078 - 5080:6(float16_t) FAdd 5079 5077 - 5081: 208(ptr) AccessChain 4962(texel) 207 - Store 5081 5080 - 5082: 245 Load 247(sCubeShadow) - 5083:175(f16vec3) Load 177(f16c3) - 5084: 52(float) Load 215(compare) - 5085:175(f16vec3) Load 1433(f16dPdxy3) - 5086:175(f16vec3) Load 1433(f16dPdxy3) - 5087:6(float16_t) Load 4264(f16lodClamp) - 5088:6(float16_t) ImageSampleDrefExplicitLod 5082 5083 5084 Grad MinLod 5085 5086 5087 - 5089: 208(ptr) AccessChain 4962(texel) 207 - 5090:6(float16_t) Load 5089 - 5091:6(float16_t) FAdd 5090 5088 - 5092: 208(ptr) AccessChain 4962(texel) 207 - Store 5092 5091 - 5093: 269 Load 271(s1DArray) - 5094: 53(fvec2) Load 148(c2) - 5095: 52(float) Load 1393(dPdxy1) - 5096: 52(float) Load 1393(dPdxy1) - 5097: 52(float) Load 4257(lodClamp) - 5098: 7(f16vec4) ImageSampleExplicitLod 5093 5094 Grad MinLod 5095 5096 5097 - 5099: 7(f16vec4) Load 4962(texel) - 5100: 7(f16vec4) FAdd 5099 5098 - Store 4962(texel) 5100 - 5101: 269 Load 271(s1DArray) - 5102:154(f16vec2) Load 156(f16c2) - 5103:6(float16_t) Load 1401(f16dPdxy1) - 5104:6(float16_t) Load 1401(f16dPdxy1) - 5105:6(float16_t) Load 4264(f16lodClamp) - 5106: 7(f16vec4) ImageSampleExplicitLod 5101 5102 Grad MinLod 5103 5104 5105 - 5107: 7(f16vec4) Load 4962(texel) - 5108: 7(f16vec4) FAdd 5107 5106 - Store 4962(texel) 5108 - 5109: 284 Load 286(s2DArray) - 5110: 167(fvec3) Load 169(c3) - 5111: 53(fvec2) Load 1409(dPdxy2) - 5112: 53(fvec2) Load 1409(dPdxy2) - 5113: 52(float) Load 4257(lodClamp) - 5114: 7(f16vec4) ImageSampleExplicitLod 5109 5110 Grad MinLod 5111 5112 5113 - 5115: 7(f16vec4) Load 4962(texel) - 5116: 7(f16vec4) FAdd 5115 5114 - Store 4962(texel) 5116 - 5117: 284 Load 286(s2DArray) - 5118:175(f16vec3) Load 177(f16c3) - 5119:154(f16vec2) Load 1417(f16dPdxy2) - 5120:154(f16vec2) Load 1417(f16dPdxy2) - 5121:6(float16_t) Load 4264(f16lodClamp) - 5122: 7(f16vec4) ImageSampleExplicitLod 5117 5118 Grad MinLod 5119 5120 5121 - 5123: 7(f16vec4) Load 4962(texel) - 5124: 7(f16vec4) FAdd 5123 5122 - Store 4962(texel) 5124 - 5125: 316 Load 318(s1DArrayShadow) - 5126: 167(fvec3) Load 169(c3) - 5127: 52(float) Load 1393(dPdxy1) - 5128: 52(float) Load 1393(dPdxy1) - 5129: 52(float) Load 4257(lodClamp) - 5130: 52(float) CompositeExtract 5126 2 - 5131:6(float16_t) ImageSampleDrefExplicitLod 5125 5126 5130 Grad MinLod 5127 5128 5129 - 5132: 208(ptr) AccessChain 4962(texel) 207 - 5133:6(float16_t) Load 5132 - 5134:6(float16_t) FAdd 5133 5131 - 5135: 208(ptr) AccessChain 4962(texel) 207 - Store 5135 5134 - 5136: 316 Load 318(s1DArrayShadow) - 5137:154(f16vec2) Load 156(f16c2) - 5138: 52(float) Load 215(compare) - 5139:6(float16_t) Load 1401(f16dPdxy1) - 5140:6(float16_t) Load 1401(f16dPdxy1) - 5141:6(float16_t) Load 4264(f16lodClamp) - 5142:6(float16_t) ImageSampleDrefExplicitLod 5136 5137 5138 Grad MinLod 5139 5140 5141 - 5143: 208(ptr) AccessChain 4962(texel) 207 - 5144:6(float16_t) Load 5143 - 5145:6(float16_t) FAdd 5144 5142 - 5146: 208(ptr) AccessChain 4962(texel) 207 - Store 5146 5145 - 5147: 337 Load 339(s2DArrayShadow) - 5148: 249(fvec4) Load 251(c4) - 5149: 53(fvec2) Load 1409(dPdxy2) - 5150: 53(fvec2) Load 1409(dPdxy2) - 5151: 52(float) Load 4257(lodClamp) - 5152: 52(float) CompositeExtract 5148 3 - 5153:6(float16_t) ImageSampleDrefExplicitLod 5147 5148 5152 Grad MinLod 5149 5150 5151 - 5154: 208(ptr) AccessChain 4962(texel) 207 - 5155:6(float16_t) Load 5154 - 5156:6(float16_t) FAdd 5155 5153 - 5157: 208(ptr) AccessChain 4962(texel) 207 - Store 5157 5156 - 5158: 337 Load 339(s2DArrayShadow) - 5159:175(f16vec3) Load 177(f16c3) - 5160: 52(float) Load 215(compare) - 5161:154(f16vec2) Load 1417(f16dPdxy2) - 5162:154(f16vec2) Load 1417(f16dPdxy2) - 5163:6(float16_t) Load 4264(f16lodClamp) - 5164:6(float16_t) ImageSampleDrefExplicitLod 5158 5159 5160 Grad MinLod 5161 5162 5163 - 5165: 208(ptr) AccessChain 4962(texel) 207 - 5166:6(float16_t) Load 5165 - 5167:6(float16_t) FAdd 5166 5164 - 5168: 208(ptr) AccessChain 4962(texel) 207 - Store 5168 5167 - 5169: 299 Load 301(sCubeArray) - 5170: 249(fvec4) Load 251(c4) - 5171: 167(fvec3) Load 1425(dPdxy3) - 5172: 167(fvec3) Load 1425(dPdxy3) - 5173: 52(float) Load 4257(lodClamp) - 5174: 7(f16vec4) ImageSampleExplicitLod 5169 5170 Grad MinLod 5171 5172 5173 - 5175: 7(f16vec4) Load 4962(texel) - 5176: 7(f16vec4) FAdd 5175 5174 - Store 4962(texel) 5176 - 5177: 299 Load 301(sCubeArray) - 5178: 7(f16vec4) Load 309(f16c4) - 5179:175(f16vec3) Load 1433(f16dPdxy3) - 5180:175(f16vec3) Load 1433(f16dPdxy3) - 5181:6(float16_t) Load 4264(f16lodClamp) - 5182: 7(f16vec4) ImageSampleExplicitLod 5177 5178 Grad MinLod 5179 5180 5181 - 5183: 7(f16vec4) Load 4962(texel) - 5184: 7(f16vec4) FAdd 5183 5182 - Store 4962(texel) 5184 - 5185: 7(f16vec4) Load 4962(texel) - ReturnValue 5185 + 4972(texel): 64(ptr) Variable Function + Store 4972(texel) 121 + 4973: 123 Load 125(s1D) + 4974: 52(float) Load 128(c1) + 4975: 52(float) Load 1393(dPdxy1) + 4976: 52(float) Load 1393(dPdxy1) + 4977: 52(float) Load 4267(lodClamp) + 4978: 7(f16vec4) ImageSampleExplicitLod 4973 4974 Grad MinLod 4975 4976 4977 + 4979: 7(f16vec4) Load 4972(texel) + 4980: 7(f16vec4) FAdd 4979 4978 + Store 4972(texel) 4980 + 4981: 123 Load 125(s1D) + 4982:6(float16_t) Load 135(f16c1) + 4983:6(float16_t) Load 1401(f16dPdxy1) + 4984:6(float16_t) Load 1401(f16dPdxy1) + 4985:6(float16_t) Load 4274(f16lodClamp) + 4986: 7(f16vec4) ImageSampleExplicitLod 4981 4982 Grad MinLod 4983 4984 4985 + 4987: 7(f16vec4) Load 4972(texel) + 4988: 7(f16vec4) FAdd 4987 4986 + Store 4972(texel) 4988 + 4989: 143 Load 145(s2D) + 4990: 53(fvec2) Load 148(c2) + 4991: 53(fvec2) Load 1409(dPdxy2) + 4992: 53(fvec2) Load 1409(dPdxy2) + 4993: 52(float) Load 4267(lodClamp) + 4994: 7(f16vec4) ImageSampleExplicitLod 4989 4990 Grad MinLod 4991 4992 4993 + 4995: 7(f16vec4) Load 4972(texel) + 4996: 7(f16vec4) FAdd 4995 4994 + Store 4972(texel) 4996 + 4997: 143 Load 145(s2D) + 4998:154(f16vec2) Load 156(f16c2) + 4999:154(f16vec2) Load 1417(f16dPdxy2) + 5000:154(f16vec2) Load 1417(f16dPdxy2) + 5001:6(float16_t) Load 4274(f16lodClamp) + 5002: 7(f16vec4) ImageSampleExplicitLod 4997 4998 Grad MinLod 4999 5000 5001 + 5003: 7(f16vec4) Load 4972(texel) + 5004: 7(f16vec4) FAdd 5003 5002 + Store 4972(texel) 5004 + 5005: 163 Load 165(s3D) + 5006: 167(fvec3) Load 169(c3) + 5007: 167(fvec3) Load 1425(dPdxy3) + 5008: 167(fvec3) Load 1425(dPdxy3) + 5009: 52(float) Load 4267(lodClamp) + 5010: 7(f16vec4) ImageSampleExplicitLod 5005 5006 Grad MinLod 5007 5008 5009 + 5011: 7(f16vec4) Load 4972(texel) + 5012: 7(f16vec4) FAdd 5011 5010 + Store 4972(texel) 5012 + 5013: 163 Load 165(s3D) + 5014:175(f16vec3) Load 177(f16c3) + 5015:175(f16vec3) Load 1433(f16dPdxy3) + 5016:175(f16vec3) Load 1433(f16dPdxy3) + 5017:6(float16_t) Load 4274(f16lodClamp) + 5018: 7(f16vec4) ImageSampleExplicitLod 5013 5014 Grad MinLod 5015 5016 5017 + 5019: 7(f16vec4) Load 4972(texel) + 5020: 7(f16vec4) FAdd 5019 5018 + Store 4972(texel) 5020 + 5021: 184 Load 186(sCube) + 5022: 167(fvec3) Load 169(c3) + 5023: 167(fvec3) Load 1425(dPdxy3) + 5024: 167(fvec3) Load 1425(dPdxy3) + 5025: 52(float) Load 4267(lodClamp) + 5026: 7(f16vec4) ImageSampleExplicitLod 5021 5022 Grad MinLod 5023 5024 5025 + 5027: 7(f16vec4) Load 4972(texel) + 5028: 7(f16vec4) FAdd 5027 5026 + Store 4972(texel) 5028 + 5029: 184 Load 186(sCube) + 5030:175(f16vec3) Load 177(f16c3) + 5031:175(f16vec3) Load 1433(f16dPdxy3) + 5032:175(f16vec3) Load 1433(f16dPdxy3) + 5033:6(float16_t) Load 4274(f16lodClamp) + 5034: 7(f16vec4) ImageSampleExplicitLod 5029 5030 Grad MinLod 5031 5032 5033 + 5035: 7(f16vec4) Load 4972(texel) + 5036: 7(f16vec4) FAdd 5035 5034 + Store 4972(texel) 5036 + 5037: 199 Load 201(s1DShadow) + 5038: 167(fvec3) Load 169(c3) + 5039: 52(float) Load 1393(dPdxy1) + 5040: 52(float) Load 1393(dPdxy1) + 5041: 52(float) Load 4267(lodClamp) + 5042: 52(float) CompositeExtract 5038 2 + 5043:6(float16_t) ImageSampleDrefExplicitLod 5037 5038 5042 Grad MinLod 5039 5040 5041 + 5044: 208(ptr) AccessChain 4972(texel) 207 + 5045:6(float16_t) Load 5044 + 5046:6(float16_t) FAdd 5045 5043 + 5047: 208(ptr) AccessChain 4972(texel) 207 + Store 5047 5046 + 5048: 199 Load 201(s1DShadow) + 5049:154(f16vec2) Load 156(f16c2) + 5050: 52(float) Load 215(compare) + 5051:6(float16_t) Load 1401(f16dPdxy1) + 5052:6(float16_t) Load 1401(f16dPdxy1) + 5053:6(float16_t) Load 4274(f16lodClamp) + 5054:6(float16_t) ImageSampleDrefExplicitLod 5048 5049 5050 Grad MinLod 5051 5052 5053 + 5055: 208(ptr) AccessChain 4972(texel) 207 + 5056:6(float16_t) Load 5055 + 5057:6(float16_t) FAdd 5056 5054 + 5058: 208(ptr) AccessChain 4972(texel) 207 + Store 5058 5057 + 5059: 224 Load 226(s2DShadow) + 5060: 167(fvec3) Load 169(c3) + 5061: 53(fvec2) Load 1409(dPdxy2) + 5062: 53(fvec2) Load 1409(dPdxy2) + 5063: 52(float) Load 4267(lodClamp) + 5064: 52(float) CompositeExtract 5060 2 + 5065:6(float16_t) ImageSampleDrefExplicitLod 5059 5060 5064 Grad MinLod 5061 5062 5063 + 5066: 208(ptr) AccessChain 4972(texel) 207 + 5067:6(float16_t) Load 5066 + 5068:6(float16_t) FAdd 5067 5065 + 5069: 208(ptr) AccessChain 4972(texel) 207 + Store 5069 5068 + 5070: 224 Load 226(s2DShadow) + 5071:154(f16vec2) Load 156(f16c2) + 5072: 52(float) Load 215(compare) + 5073:154(f16vec2) Load 1417(f16dPdxy2) + 5074:154(f16vec2) Load 1417(f16dPdxy2) + 5075:6(float16_t) Load 4274(f16lodClamp) + 5076:6(float16_t) ImageSampleDrefExplicitLod 5070 5071 5072 Grad MinLod 5073 5074 5075 + 5077: 208(ptr) AccessChain 4972(texel) 207 + 5078:6(float16_t) Load 5077 + 5079:6(float16_t) FAdd 5078 5076 + 5080: 208(ptr) AccessChain 4972(texel) 207 + Store 5080 5079 + 5081: 245 Load 247(sCubeShadow) + 5082: 249(fvec4) Load 251(c4) + 5083: 167(fvec3) Load 1425(dPdxy3) + 5084: 167(fvec3) Load 1425(dPdxy3) + 5085: 52(float) Load 4267(lodClamp) + 5086: 52(float) CompositeExtract 5082 3 + 5087:6(float16_t) ImageSampleDrefExplicitLod 5081 5082 5086 Grad MinLod 5083 5084 5085 + 5088: 208(ptr) AccessChain 4972(texel) 207 + 5089:6(float16_t) Load 5088 + 5090:6(float16_t) FAdd 5089 5087 + 5091: 208(ptr) AccessChain 4972(texel) 207 + Store 5091 5090 + 5092: 245 Load 247(sCubeShadow) + 5093:175(f16vec3) Load 177(f16c3) + 5094: 52(float) Load 215(compare) + 5095:175(f16vec3) Load 1433(f16dPdxy3) + 5096:175(f16vec3) Load 1433(f16dPdxy3) + 5097:6(float16_t) Load 4274(f16lodClamp) + 5098:6(float16_t) ImageSampleDrefExplicitLod 5092 5093 5094 Grad MinLod 5095 5096 5097 + 5099: 208(ptr) AccessChain 4972(texel) 207 + 5100:6(float16_t) Load 5099 + 5101:6(float16_t) FAdd 5100 5098 + 5102: 208(ptr) AccessChain 4972(texel) 207 + Store 5102 5101 + 5103: 269 Load 271(s1DArray) + 5104: 53(fvec2) Load 148(c2) + 5105: 52(float) Load 1393(dPdxy1) + 5106: 52(float) Load 1393(dPdxy1) + 5107: 52(float) Load 4267(lodClamp) + 5108: 7(f16vec4) ImageSampleExplicitLod 5103 5104 Grad MinLod 5105 5106 5107 + 5109: 7(f16vec4) Load 4972(texel) + 5110: 7(f16vec4) FAdd 5109 5108 + Store 4972(texel) 5110 + 5111: 269 Load 271(s1DArray) + 5112:154(f16vec2) Load 156(f16c2) + 5113:6(float16_t) Load 1401(f16dPdxy1) + 5114:6(float16_t) Load 1401(f16dPdxy1) + 5115:6(float16_t) Load 4274(f16lodClamp) + 5116: 7(f16vec4) ImageSampleExplicitLod 5111 5112 Grad MinLod 5113 5114 5115 + 5117: 7(f16vec4) Load 4972(texel) + 5118: 7(f16vec4) FAdd 5117 5116 + Store 4972(texel) 5118 + 5119: 284 Load 286(s2DArray) + 5120: 167(fvec3) Load 169(c3) + 5121: 53(fvec2) Load 1409(dPdxy2) + 5122: 53(fvec2) Load 1409(dPdxy2) + 5123: 52(float) Load 4267(lodClamp) + 5124: 7(f16vec4) ImageSampleExplicitLod 5119 5120 Grad MinLod 5121 5122 5123 + 5125: 7(f16vec4) Load 4972(texel) + 5126: 7(f16vec4) FAdd 5125 5124 + Store 4972(texel) 5126 + 5127: 284 Load 286(s2DArray) + 5128:175(f16vec3) Load 177(f16c3) + 5129:154(f16vec2) Load 1417(f16dPdxy2) + 5130:154(f16vec2) Load 1417(f16dPdxy2) + 5131:6(float16_t) Load 4274(f16lodClamp) + 5132: 7(f16vec4) ImageSampleExplicitLod 5127 5128 Grad MinLod 5129 5130 5131 + 5133: 7(f16vec4) Load 4972(texel) + 5134: 7(f16vec4) FAdd 5133 5132 + Store 4972(texel) 5134 + 5135: 316 Load 318(s1DArrayShadow) + 5136: 167(fvec3) Load 169(c3) + 5137: 52(float) Load 1393(dPdxy1) + 5138: 52(float) Load 1393(dPdxy1) + 5139: 52(float) Load 4267(lodClamp) + 5140: 52(float) CompositeExtract 5136 2 + 5141:6(float16_t) ImageSampleDrefExplicitLod 5135 5136 5140 Grad MinLod 5137 5138 5139 + 5142: 208(ptr) AccessChain 4972(texel) 207 + 5143:6(float16_t) Load 5142 + 5144:6(float16_t) FAdd 5143 5141 + 5145: 208(ptr) AccessChain 4972(texel) 207 + Store 5145 5144 + 5146: 316 Load 318(s1DArrayShadow) + 5147:154(f16vec2) Load 156(f16c2) + 5148: 52(float) Load 215(compare) + 5149:6(float16_t) Load 1401(f16dPdxy1) + 5150:6(float16_t) Load 1401(f16dPdxy1) + 5151:6(float16_t) Load 4274(f16lodClamp) + 5152:6(float16_t) ImageSampleDrefExplicitLod 5146 5147 5148 Grad MinLod 5149 5150 5151 + 5153: 208(ptr) AccessChain 4972(texel) 207 + 5154:6(float16_t) Load 5153 + 5155:6(float16_t) FAdd 5154 5152 + 5156: 208(ptr) AccessChain 4972(texel) 207 + Store 5156 5155 + 5157: 337 Load 339(s2DArrayShadow) + 5158: 249(fvec4) Load 251(c4) + 5159: 53(fvec2) Load 1409(dPdxy2) + 5160: 53(fvec2) Load 1409(dPdxy2) + 5161: 52(float) Load 4267(lodClamp) + 5162: 52(float) CompositeExtract 5158 3 + 5163:6(float16_t) ImageSampleDrefExplicitLod 5157 5158 5162 Grad MinLod 5159 5160 5161 + 5164: 208(ptr) AccessChain 4972(texel) 207 + 5165:6(float16_t) Load 5164 + 5166:6(float16_t) FAdd 5165 5163 + 5167: 208(ptr) AccessChain 4972(texel) 207 + Store 5167 5166 + 5168: 337 Load 339(s2DArrayShadow) + 5169:175(f16vec3) Load 177(f16c3) + 5170: 52(float) Load 215(compare) + 5171:154(f16vec2) Load 1417(f16dPdxy2) + 5172:154(f16vec2) Load 1417(f16dPdxy2) + 5173:6(float16_t) Load 4274(f16lodClamp) + 5174:6(float16_t) ImageSampleDrefExplicitLod 5168 5169 5170 Grad MinLod 5171 5172 5173 + 5175: 208(ptr) AccessChain 4972(texel) 207 + 5176:6(float16_t) Load 5175 + 5177:6(float16_t) FAdd 5176 5174 + 5178: 208(ptr) AccessChain 4972(texel) 207 + Store 5178 5177 + 5179: 299 Load 301(sCubeArray) + 5180: 249(fvec4) Load 251(c4) + 5181: 167(fvec3) Load 1425(dPdxy3) + 5182: 167(fvec3) Load 1425(dPdxy3) + 5183: 52(float) Load 4267(lodClamp) + 5184: 7(f16vec4) ImageSampleExplicitLod 5179 5180 Grad MinLod 5181 5182 5183 + 5185: 7(f16vec4) Load 4972(texel) + 5186: 7(f16vec4) FAdd 5185 5184 + Store 4972(texel) 5186 + 5187: 299 Load 301(sCubeArray) + 5188: 7(f16vec4) Load 309(f16c4) + 5189:175(f16vec3) Load 1433(f16dPdxy3) + 5190:175(f16vec3) Load 1433(f16dPdxy3) + 5191:6(float16_t) Load 4274(f16lodClamp) + 5192: 7(f16vec4) ImageSampleExplicitLod 5187 5188 Grad MinLod 5189 5190 5191 + 5193: 7(f16vec4) Load 4972(texel) + 5194: 7(f16vec4) FAdd 5193 5192 + Store 4972(texel) 5194 + 5195: 7(f16vec4) Load 4972(texel) + ReturnValue 5195 FunctionEnd 111(testSparseTextureGradOffsetClamp(): 7(f16vec4) Function None 8 112: Label - 5188(texel): 64(ptr) Variable Function - Store 5188(texel) 121 - 5189: 143 Load 145(s2D) - 5190: 53(fvec2) Load 148(c2) - 5191: 53(fvec2) Load 1409(dPdxy2) - 5192: 53(fvec2) Load 1409(dPdxy2) - 5193: 52(float) Load 4257(lodClamp) - 5194:3102(ResType) ImageSparseSampleExplicitLod 5189 5190 Grad ConstOffset MinLod 5191 5192 722 5193 - 5195: 7(f16vec4) CompositeExtract 5194 1 - Store 5188(texel) 5195 - 5196: 47(int) CompositeExtract 5194 0 - 5197: 143 Load 145(s2D) - 5198:154(f16vec2) Load 156(f16c2) - 5199:154(f16vec2) Load 1417(f16dPdxy2) - 5200:154(f16vec2) Load 1417(f16dPdxy2) - 5201:6(float16_t) Load 4264(f16lodClamp) - 5202:3102(ResType) ImageSparseSampleExplicitLod 5197 5198 Grad ConstOffset MinLod 5199 5200 722 5201 - 5203: 7(f16vec4) CompositeExtract 5202 1 - Store 5188(texel) 5203 - 5204: 47(int) CompositeExtract 5202 0 - 5205: 163 Load 165(s3D) - 5206: 167(fvec3) Load 169(c3) - 5207: 167(fvec3) Load 1425(dPdxy3) - 5208: 167(fvec3) Load 1425(dPdxy3) - 5209: 52(float) Load 4257(lodClamp) - 5210:3102(ResType) ImageSparseSampleExplicitLod 5205 5206 Grad ConstOffset MinLod 5207 5208 735 5209 - 5211: 7(f16vec4) CompositeExtract 5210 1 - Store 5188(texel) 5211 - 5212: 47(int) CompositeExtract 5210 0 - 5213: 163 Load 165(s3D) - 5214:175(f16vec3) Load 177(f16c3) - 5215:175(f16vec3) Load 1433(f16dPdxy3) - 5216:175(f16vec3) Load 1433(f16dPdxy3) - 5217:6(float16_t) Load 4264(f16lodClamp) - 5218:3102(ResType) ImageSparseSampleExplicitLod 5213 5214 Grad ConstOffset MinLod 5215 5216 735 5217 - 5219: 7(f16vec4) CompositeExtract 5218 1 - Store 5188(texel) 5219 - 5220: 47(int) CompositeExtract 5218 0 - 5221: 224 Load 226(s2DShadow) - 5222: 167(fvec3) Load 169(c3) - 5223: 53(fvec2) Load 1409(dPdxy2) - 5224: 53(fvec2) Load 1409(dPdxy2) - 5225: 52(float) Load 4257(lodClamp) - 5226: 208(ptr) AccessChain 5188(texel) 207 - 5227: 52(float) CompositeExtract 5222 2 - 5228:3138(ResType) ImageSparseSampleDrefExplicitLod 5221 5222 5227 Grad ConstOffset MinLod 5223 5224 722 5225 - 5229:6(float16_t) CompositeExtract 5228 1 - Store 5226 5229 + 5198(texel): 64(ptr) Variable Function + Store 5198(texel) 121 + 5199: 143 Load 145(s2D) + 5200: 53(fvec2) Load 148(c2) + 5201: 53(fvec2) Load 1409(dPdxy2) + 5202: 53(fvec2) Load 1409(dPdxy2) + 5203: 52(float) Load 4267(lodClamp) + 5204:3102(ResType) ImageSparseSampleExplicitLod 5199 5200 Grad ConstOffset MinLod 5201 5202 722 5203 + 5205: 7(f16vec4) CompositeExtract 5204 1 + Store 5198(texel) 5205 + 5206: 47(int) CompositeExtract 5204 0 + 5207: 143 Load 145(s2D) + 5208:154(f16vec2) Load 156(f16c2) + 5209:154(f16vec2) Load 1417(f16dPdxy2) + 5210:154(f16vec2) Load 1417(f16dPdxy2) + 5211:6(float16_t) Load 4274(f16lodClamp) + 5212:3102(ResType) ImageSparseSampleExplicitLod 5207 5208 Grad ConstOffset MinLod 5209 5210 722 5211 + 5213: 7(f16vec4) CompositeExtract 5212 1 + Store 5198(texel) 5213 + 5214: 47(int) CompositeExtract 5212 0 + 5215: 163 Load 165(s3D) + 5216: 167(fvec3) Load 169(c3) + 5217: 167(fvec3) Load 1425(dPdxy3) + 5218: 167(fvec3) Load 1425(dPdxy3) + 5219: 52(float) Load 4267(lodClamp) + 5220:3102(ResType) ImageSparseSampleExplicitLod 5215 5216 Grad ConstOffset MinLod 5217 5218 735 5219 + 5221: 7(f16vec4) CompositeExtract 5220 1 + Store 5198(texel) 5221 + 5222: 47(int) CompositeExtract 5220 0 + 5223: 163 Load 165(s3D) + 5224:175(f16vec3) Load 177(f16c3) + 5225:175(f16vec3) Load 1433(f16dPdxy3) + 5226:175(f16vec3) Load 1433(f16dPdxy3) + 5227:6(float16_t) Load 4274(f16lodClamp) + 5228:3102(ResType) ImageSparseSampleExplicitLod 5223 5224 Grad ConstOffset MinLod 5225 5226 735 5227 + 5229: 7(f16vec4) CompositeExtract 5228 1 + Store 5198(texel) 5229 5230: 47(int) CompositeExtract 5228 0 5231: 224 Load 226(s2DShadow) - 5232:154(f16vec2) Load 156(f16c2) - 5233: 52(float) Load 215(compare) - 5234:154(f16vec2) Load 1417(f16dPdxy2) - 5235:154(f16vec2) Load 1417(f16dPdxy2) - 5236:6(float16_t) Load 4264(f16lodClamp) - 5237: 208(ptr) AccessChain 5188(texel) 207 - 5238:3138(ResType) ImageSparseSampleDrefExplicitLod 5231 5232 5233 Grad ConstOffset MinLod 5234 5235 722 5236 + 5232: 167(fvec3) Load 169(c3) + 5233: 53(fvec2) Load 1409(dPdxy2) + 5234: 53(fvec2) Load 1409(dPdxy2) + 5235: 52(float) Load 4267(lodClamp) + 5236: 208(ptr) AccessChain 5198(texel) 207 + 5237: 52(float) CompositeExtract 5232 2 + 5238:3138(ResType) ImageSparseSampleDrefExplicitLod 5231 5232 5237 Grad ConstOffset MinLod 5233 5234 722 5235 5239:6(float16_t) CompositeExtract 5238 1 - Store 5237 5239 + Store 5236 5239 5240: 47(int) CompositeExtract 5238 0 - 5241: 284 Load 286(s2DArray) - 5242: 167(fvec3) Load 169(c3) - 5243: 53(fvec2) Load 1409(dPdxy2) - 5244: 53(fvec2) Load 1409(dPdxy2) - 5245: 52(float) Load 4257(lodClamp) - 5246:3102(ResType) ImageSparseSampleExplicitLod 5241 5242 Grad ConstOffset MinLod 5243 5244 722 5245 - 5247: 7(f16vec4) CompositeExtract 5246 1 - Store 5188(texel) 5247 - 5248: 47(int) CompositeExtract 5246 0 - 5249: 284 Load 286(s2DArray) - 5250:175(f16vec3) Load 177(f16c3) - 5251:154(f16vec2) Load 1417(f16dPdxy2) - 5252:154(f16vec2) Load 1417(f16dPdxy2) - 5253:6(float16_t) Load 4264(f16lodClamp) - 5254:3102(ResType) ImageSparseSampleExplicitLod 5249 5250 Grad ConstOffset MinLod 5251 5252 722 5253 - 5255: 7(f16vec4) CompositeExtract 5254 1 - Store 5188(texel) 5255 - 5256: 47(int) CompositeExtract 5254 0 - 5257: 337 Load 339(s2DArrayShadow) - 5258: 249(fvec4) Load 251(c4) - 5259: 53(fvec2) Load 1409(dPdxy2) - 5260: 53(fvec2) Load 1409(dPdxy2) - 5261: 52(float) Load 4257(lodClamp) - 5262: 208(ptr) AccessChain 5188(texel) 207 - 5263: 52(float) CompositeExtract 5258 3 - 5264:3138(ResType) ImageSparseSampleDrefExplicitLod 5257 5258 5263 Grad ConstOffset MinLod 5259 5260 722 5261 - 5265:6(float16_t) CompositeExtract 5264 1 - Store 5262 5265 + 5241: 224 Load 226(s2DShadow) + 5242:154(f16vec2) Load 156(f16c2) + 5243: 52(float) Load 215(compare) + 5244:154(f16vec2) Load 1417(f16dPdxy2) + 5245:154(f16vec2) Load 1417(f16dPdxy2) + 5246:6(float16_t) Load 4274(f16lodClamp) + 5247: 208(ptr) AccessChain 5198(texel) 207 + 5248:3138(ResType) ImageSparseSampleDrefExplicitLod 5241 5242 5243 Grad ConstOffset MinLod 5244 5245 722 5246 + 5249:6(float16_t) CompositeExtract 5248 1 + Store 5247 5249 + 5250: 47(int) CompositeExtract 5248 0 + 5251: 284 Load 286(s2DArray) + 5252: 167(fvec3) Load 169(c3) + 5253: 53(fvec2) Load 1409(dPdxy2) + 5254: 53(fvec2) Load 1409(dPdxy2) + 5255: 52(float) Load 4267(lodClamp) + 5256:3102(ResType) ImageSparseSampleExplicitLod 5251 5252 Grad ConstOffset MinLod 5253 5254 722 5255 + 5257: 7(f16vec4) CompositeExtract 5256 1 + Store 5198(texel) 5257 + 5258: 47(int) CompositeExtract 5256 0 + 5259: 284 Load 286(s2DArray) + 5260:175(f16vec3) Load 177(f16c3) + 5261:154(f16vec2) Load 1417(f16dPdxy2) + 5262:154(f16vec2) Load 1417(f16dPdxy2) + 5263:6(float16_t) Load 4274(f16lodClamp) + 5264:3102(ResType) ImageSparseSampleExplicitLod 5259 5260 Grad ConstOffset MinLod 5261 5262 722 5263 + 5265: 7(f16vec4) CompositeExtract 5264 1 + Store 5198(texel) 5265 5266: 47(int) CompositeExtract 5264 0 5267: 337 Load 339(s2DArrayShadow) - 5268:175(f16vec3) Load 177(f16c3) - 5269: 52(float) Load 215(compare) - 5270:154(f16vec2) Load 1417(f16dPdxy2) - 5271:154(f16vec2) Load 1417(f16dPdxy2) - 5272:6(float16_t) Load 4264(f16lodClamp) - 5273: 208(ptr) AccessChain 5188(texel) 207 - 5274:3138(ResType) ImageSparseSampleDrefExplicitLod 5267 5268 5269 Grad ConstOffset MinLod 5270 5271 722 5272 + 5268: 249(fvec4) Load 251(c4) + 5269: 53(fvec2) Load 1409(dPdxy2) + 5270: 53(fvec2) Load 1409(dPdxy2) + 5271: 52(float) Load 4267(lodClamp) + 5272: 208(ptr) AccessChain 5198(texel) 207 + 5273: 52(float) CompositeExtract 5268 3 + 5274:3138(ResType) ImageSparseSampleDrefExplicitLod 5267 5268 5273 Grad ConstOffset MinLod 5269 5270 722 5271 5275:6(float16_t) CompositeExtract 5274 1 - Store 5273 5275 + Store 5272 5275 5276: 47(int) CompositeExtract 5274 0 - 5277: 7(f16vec4) Load 5188(texel) - ReturnValue 5277 + 5277: 337 Load 339(s2DArrayShadow) + 5278:175(f16vec3) Load 177(f16c3) + 5279: 52(float) Load 215(compare) + 5280:154(f16vec2) Load 1417(f16dPdxy2) + 5281:154(f16vec2) Load 1417(f16dPdxy2) + 5282:6(float16_t) Load 4274(f16lodClamp) + 5283: 208(ptr) AccessChain 5198(texel) 207 + 5284:3138(ResType) ImageSparseSampleDrefExplicitLod 5277 5278 5279 Grad ConstOffset MinLod 5280 5281 722 5282 + 5285:6(float16_t) CompositeExtract 5284 1 + Store 5283 5285 + 5286: 47(int) CompositeExtract 5284 0 + 5287: 7(f16vec4) Load 5198(texel) + ReturnValue 5287 FunctionEnd 113(testTextureGradOffsetClamp(): 7(f16vec4) Function None 8 114: Label - 5280(texel): 64(ptr) Variable Function - Store 5280(texel) 121 - 5281: 123 Load 125(s1D) - 5282: 52(float) Load 128(c1) - 5283: 52(float) Load 1393(dPdxy1) - 5284: 52(float) Load 1393(dPdxy1) - 5285: 52(float) Load 4257(lodClamp) - 5286: 7(f16vec4) ImageSampleExplicitLod 5281 5282 Grad ConstOffset MinLod 5283 5284 709 5285 - 5287: 7(f16vec4) Load 5280(texel) - 5288: 7(f16vec4) FAdd 5287 5286 - Store 5280(texel) 5288 - 5289: 123 Load 125(s1D) - 5290:6(float16_t) Load 135(f16c1) - 5291:6(float16_t) Load 1401(f16dPdxy1) - 5292:6(float16_t) Load 1401(f16dPdxy1) - 5293:6(float16_t) Load 4264(f16lodClamp) - 5294: 7(f16vec4) ImageSampleExplicitLod 5289 5290 Grad ConstOffset MinLod 5291 5292 709 5293 - 5295: 7(f16vec4) Load 5280(texel) - 5296: 7(f16vec4) FAdd 5295 5294 - Store 5280(texel) 5296 - 5297: 143 Load 145(s2D) - 5298: 53(fvec2) Load 148(c2) - 5299: 53(fvec2) Load 1409(dPdxy2) - 5300: 53(fvec2) Load 1409(dPdxy2) - 5301: 52(float) Load 4257(lodClamp) - 5302: 7(f16vec4) ImageSampleExplicitLod 5297 5298 Grad ConstOffset MinLod 5299 5300 722 5301 - 5303: 7(f16vec4) Load 5280(texel) - 5304: 7(f16vec4) FAdd 5303 5302 - Store 5280(texel) 5304 - 5305: 143 Load 145(s2D) - 5306:154(f16vec2) Load 156(f16c2) - 5307:154(f16vec2) Load 1417(f16dPdxy2) - 5308:154(f16vec2) Load 1417(f16dPdxy2) - 5309:6(float16_t) Load 4264(f16lodClamp) - 5310: 7(f16vec4) ImageSampleExplicitLod 5305 5306 Grad ConstOffset MinLod 5307 5308 722 5309 - 5311: 7(f16vec4) Load 5280(texel) - 5312: 7(f16vec4) FAdd 5311 5310 - Store 5280(texel) 5312 - 5313: 163 Load 165(s3D) - 5314: 167(fvec3) Load 169(c3) - 5315: 167(fvec3) Load 1425(dPdxy3) - 5316: 167(fvec3) Load 1425(dPdxy3) - 5317: 52(float) Load 4257(lodClamp) - 5318: 7(f16vec4) ImageSampleExplicitLod 5313 5314 Grad ConstOffset MinLod 5315 5316 735 5317 - 5319: 7(f16vec4) Load 5280(texel) - 5320: 7(f16vec4) FAdd 5319 5318 - Store 5280(texel) 5320 - 5321: 163 Load 165(s3D) - 5322:175(f16vec3) Load 177(f16c3) - 5323:175(f16vec3) Load 1433(f16dPdxy3) - 5324:175(f16vec3) Load 1433(f16dPdxy3) - 5325:6(float16_t) Load 4264(f16lodClamp) - 5326: 7(f16vec4) ImageSampleExplicitLod 5321 5322 Grad ConstOffset MinLod 5323 5324 735 5325 - 5327: 7(f16vec4) Load 5280(texel) - 5328: 7(f16vec4) FAdd 5327 5326 - Store 5280(texel) 5328 - 5329: 199 Load 201(s1DShadow) - 5330: 167(fvec3) Load 169(c3) - 5331: 52(float) Load 1393(dPdxy1) - 5332: 52(float) Load 1393(dPdxy1) - 5333: 52(float) Load 4257(lodClamp) - 5334: 52(float) CompositeExtract 5330 2 - 5335:6(float16_t) ImageSampleDrefExplicitLod 5329 5330 5334 Grad ConstOffset MinLod 5331 5332 709 5333 - 5336: 208(ptr) AccessChain 5280(texel) 207 - 5337:6(float16_t) Load 5336 - 5338:6(float16_t) FAdd 5337 5335 - 5339: 208(ptr) AccessChain 5280(texel) 207 - Store 5339 5338 - 5340: 199 Load 201(s1DShadow) - 5341:154(f16vec2) Load 156(f16c2) - 5342: 52(float) Load 215(compare) - 5343:6(float16_t) Load 1401(f16dPdxy1) - 5344:6(float16_t) Load 1401(f16dPdxy1) - 5345:6(float16_t) Load 4264(f16lodClamp) - 5346:6(float16_t) ImageSampleDrefExplicitLod 5340 5341 5342 Grad ConstOffset MinLod 5343 5344 709 5345 - 5347: 208(ptr) AccessChain 5280(texel) 207 - 5348:6(float16_t) Load 5347 - 5349:6(float16_t) FAdd 5348 5346 - 5350: 208(ptr) AccessChain 5280(texel) 207 - Store 5350 5349 - 5351: 224 Load 226(s2DShadow) - 5352: 167(fvec3) Load 169(c3) - 5353: 53(fvec2) Load 1409(dPdxy2) - 5354: 53(fvec2) Load 1409(dPdxy2) - 5355: 52(float) Load 4257(lodClamp) - 5356: 52(float) CompositeExtract 5352 2 - 5357:6(float16_t) ImageSampleDrefExplicitLod 5351 5352 5356 Grad ConstOffset MinLod 5353 5354 722 5355 - 5358: 208(ptr) AccessChain 5280(texel) 207 - 5359:6(float16_t) Load 5358 - 5360:6(float16_t) FAdd 5359 5357 - 5361: 208(ptr) AccessChain 5280(texel) 207 - Store 5361 5360 - 5362: 224 Load 226(s2DShadow) - 5363:154(f16vec2) Load 156(f16c2) - 5364: 52(float) Load 215(compare) - 5365:154(f16vec2) Load 1417(f16dPdxy2) - 5366:154(f16vec2) Load 1417(f16dPdxy2) - 5367:6(float16_t) Load 4264(f16lodClamp) - 5368:6(float16_t) ImageSampleDrefExplicitLod 5362 5363 5364 Grad ConstOffset MinLod 5365 5366 722 5367 - 5369: 208(ptr) AccessChain 5280(texel) 207 - 5370:6(float16_t) Load 5369 - 5371:6(float16_t) FAdd 5370 5368 - 5372: 208(ptr) AccessChain 5280(texel) 207 - Store 5372 5371 - 5373: 269 Load 271(s1DArray) - 5374: 53(fvec2) Load 148(c2) - 5375: 52(float) Load 1393(dPdxy1) - 5376: 52(float) Load 1393(dPdxy1) - 5377: 52(float) Load 4257(lodClamp) - 5378: 7(f16vec4) ImageSampleExplicitLod 5373 5374 Grad ConstOffset MinLod 5375 5376 709 5377 - 5379: 7(f16vec4) Load 5280(texel) - 5380: 7(f16vec4) FAdd 5379 5378 - Store 5280(texel) 5380 - 5381: 269 Load 271(s1DArray) - 5382:154(f16vec2) Load 156(f16c2) - 5383:6(float16_t) Load 1401(f16dPdxy1) - 5384:6(float16_t) Load 1401(f16dPdxy1) - 5385:6(float16_t) Load 4264(f16lodClamp) - 5386: 7(f16vec4) ImageSampleExplicitLod 5381 5382 Grad ConstOffset MinLod 5383 5384 709 5385 - 5387: 7(f16vec4) Load 5280(texel) - 5388: 7(f16vec4) FAdd 5387 5386 - Store 5280(texel) 5388 - 5389: 284 Load 286(s2DArray) - 5390: 167(fvec3) Load 169(c3) - 5391: 53(fvec2) Load 1409(dPdxy2) - 5392: 53(fvec2) Load 1409(dPdxy2) - 5393: 52(float) Load 4257(lodClamp) - 5394: 7(f16vec4) ImageSampleExplicitLod 5389 5390 Grad ConstOffset MinLod 5391 5392 722 5393 - 5395: 7(f16vec4) Load 5280(texel) - 5396: 7(f16vec4) FAdd 5395 5394 - Store 5280(texel) 5396 - 5397: 284 Load 286(s2DArray) - 5398:175(f16vec3) Load 177(f16c3) - 5399:154(f16vec2) Load 1417(f16dPdxy2) - 5400:154(f16vec2) Load 1417(f16dPdxy2) - 5401:6(float16_t) Load 4264(f16lodClamp) - 5402: 7(f16vec4) ImageSampleExplicitLod 5397 5398 Grad ConstOffset MinLod 5399 5400 722 5401 - 5403: 7(f16vec4) Load 5280(texel) - 5404: 7(f16vec4) FAdd 5403 5402 - Store 5280(texel) 5404 - 5405: 316 Load 318(s1DArrayShadow) - 5406: 167(fvec3) Load 169(c3) - 5407: 52(float) Load 1393(dPdxy1) - 5408: 52(float) Load 1393(dPdxy1) - 5409: 52(float) Load 4257(lodClamp) - 5410: 52(float) CompositeExtract 5406 2 - 5411:6(float16_t) ImageSampleDrefExplicitLod 5405 5406 5410 Grad ConstOffset MinLod 5407 5408 709 5409 - 5412: 208(ptr) AccessChain 5280(texel) 207 - 5413:6(float16_t) Load 5412 - 5414:6(float16_t) FAdd 5413 5411 - 5415: 208(ptr) AccessChain 5280(texel) 207 - Store 5415 5414 - 5416: 316 Load 318(s1DArrayShadow) - 5417:154(f16vec2) Load 156(f16c2) - 5418: 52(float) Load 215(compare) - 5419:6(float16_t) Load 1401(f16dPdxy1) - 5420:6(float16_t) Load 1401(f16dPdxy1) - 5421:6(float16_t) Load 4264(f16lodClamp) - 5422:6(float16_t) ImageSampleDrefExplicitLod 5416 5417 5418 Grad ConstOffset MinLod 5419 5420 709 5421 - 5423: 208(ptr) AccessChain 5280(texel) 207 - 5424:6(float16_t) Load 5423 - 5425:6(float16_t) FAdd 5424 5422 - 5426: 208(ptr) AccessChain 5280(texel) 207 - Store 5426 5425 - 5427: 337 Load 339(s2DArrayShadow) - 5428: 249(fvec4) Load 251(c4) - 5429: 53(fvec2) Load 1409(dPdxy2) - 5430: 53(fvec2) Load 1409(dPdxy2) - 5431: 52(float) Load 4257(lodClamp) - 5432: 52(float) CompositeExtract 5428 3 - 5433:6(float16_t) ImageSampleDrefExplicitLod 5427 5428 5432 Grad ConstOffset MinLod 5429 5430 722 5431 - 5434: 208(ptr) AccessChain 5280(texel) 207 - 5435:6(float16_t) Load 5434 - 5436:6(float16_t) FAdd 5435 5433 - 5437: 208(ptr) AccessChain 5280(texel) 207 - Store 5437 5436 - 5438: 337 Load 339(s2DArrayShadow) - 5439:175(f16vec3) Load 177(f16c3) - 5440: 52(float) Load 215(compare) - 5441:154(f16vec2) Load 1417(f16dPdxy2) - 5442:154(f16vec2) Load 1417(f16dPdxy2) - 5443:6(float16_t) Load 4264(f16lodClamp) - 5444:6(float16_t) ImageSampleDrefExplicitLod 5438 5439 5440 Grad ConstOffset MinLod 5441 5442 722 5443 - 5445: 208(ptr) AccessChain 5280(texel) 207 - 5446:6(float16_t) Load 5445 - 5447:6(float16_t) FAdd 5446 5444 - 5448: 208(ptr) AccessChain 5280(texel) 207 - Store 5448 5447 - 5449: 7(f16vec4) Load 5280(texel) - ReturnValue 5449 + 5290(texel): 64(ptr) Variable Function + Store 5290(texel) 121 + 5291: 123 Load 125(s1D) + 5292: 52(float) Load 128(c1) + 5293: 52(float) Load 1393(dPdxy1) + 5294: 52(float) Load 1393(dPdxy1) + 5295: 52(float) Load 4267(lodClamp) + 5296: 7(f16vec4) ImageSampleExplicitLod 5291 5292 Grad ConstOffset MinLod 5293 5294 709 5295 + 5297: 7(f16vec4) Load 5290(texel) + 5298: 7(f16vec4) FAdd 5297 5296 + Store 5290(texel) 5298 + 5299: 123 Load 125(s1D) + 5300:6(float16_t) Load 135(f16c1) + 5301:6(float16_t) Load 1401(f16dPdxy1) + 5302:6(float16_t) Load 1401(f16dPdxy1) + 5303:6(float16_t) Load 4274(f16lodClamp) + 5304: 7(f16vec4) ImageSampleExplicitLod 5299 5300 Grad ConstOffset MinLod 5301 5302 709 5303 + 5305: 7(f16vec4) Load 5290(texel) + 5306: 7(f16vec4) FAdd 5305 5304 + Store 5290(texel) 5306 + 5307: 143 Load 145(s2D) + 5308: 53(fvec2) Load 148(c2) + 5309: 53(fvec2) Load 1409(dPdxy2) + 5310: 53(fvec2) Load 1409(dPdxy2) + 5311: 52(float) Load 4267(lodClamp) + 5312: 7(f16vec4) ImageSampleExplicitLod 5307 5308 Grad ConstOffset MinLod 5309 5310 722 5311 + 5313: 7(f16vec4) Load 5290(texel) + 5314: 7(f16vec4) FAdd 5313 5312 + Store 5290(texel) 5314 + 5315: 143 Load 145(s2D) + 5316:154(f16vec2) Load 156(f16c2) + 5317:154(f16vec2) Load 1417(f16dPdxy2) + 5318:154(f16vec2) Load 1417(f16dPdxy2) + 5319:6(float16_t) Load 4274(f16lodClamp) + 5320: 7(f16vec4) ImageSampleExplicitLod 5315 5316 Grad ConstOffset MinLod 5317 5318 722 5319 + 5321: 7(f16vec4) Load 5290(texel) + 5322: 7(f16vec4) FAdd 5321 5320 + Store 5290(texel) 5322 + 5323: 163 Load 165(s3D) + 5324: 167(fvec3) Load 169(c3) + 5325: 167(fvec3) Load 1425(dPdxy3) + 5326: 167(fvec3) Load 1425(dPdxy3) + 5327: 52(float) Load 4267(lodClamp) + 5328: 7(f16vec4) ImageSampleExplicitLod 5323 5324 Grad ConstOffset MinLod 5325 5326 735 5327 + 5329: 7(f16vec4) Load 5290(texel) + 5330: 7(f16vec4) FAdd 5329 5328 + Store 5290(texel) 5330 + 5331: 163 Load 165(s3D) + 5332:175(f16vec3) Load 177(f16c3) + 5333:175(f16vec3) Load 1433(f16dPdxy3) + 5334:175(f16vec3) Load 1433(f16dPdxy3) + 5335:6(float16_t) Load 4274(f16lodClamp) + 5336: 7(f16vec4) ImageSampleExplicitLod 5331 5332 Grad ConstOffset MinLod 5333 5334 735 5335 + 5337: 7(f16vec4) Load 5290(texel) + 5338: 7(f16vec4) FAdd 5337 5336 + Store 5290(texel) 5338 + 5339: 199 Load 201(s1DShadow) + 5340: 167(fvec3) Load 169(c3) + 5341: 52(float) Load 1393(dPdxy1) + 5342: 52(float) Load 1393(dPdxy1) + 5343: 52(float) Load 4267(lodClamp) + 5344: 52(float) CompositeExtract 5340 2 + 5345:6(float16_t) ImageSampleDrefExplicitLod 5339 5340 5344 Grad ConstOffset MinLod 5341 5342 709 5343 + 5346: 208(ptr) AccessChain 5290(texel) 207 + 5347:6(float16_t) Load 5346 + 5348:6(float16_t) FAdd 5347 5345 + 5349: 208(ptr) AccessChain 5290(texel) 207 + Store 5349 5348 + 5350: 199 Load 201(s1DShadow) + 5351:154(f16vec2) Load 156(f16c2) + 5352: 52(float) Load 215(compare) + 5353:6(float16_t) Load 1401(f16dPdxy1) + 5354:6(float16_t) Load 1401(f16dPdxy1) + 5355:6(float16_t) Load 4274(f16lodClamp) + 5356:6(float16_t) ImageSampleDrefExplicitLod 5350 5351 5352 Grad ConstOffset MinLod 5353 5354 709 5355 + 5357: 208(ptr) AccessChain 5290(texel) 207 + 5358:6(float16_t) Load 5357 + 5359:6(float16_t) FAdd 5358 5356 + 5360: 208(ptr) AccessChain 5290(texel) 207 + Store 5360 5359 + 5361: 224 Load 226(s2DShadow) + 5362: 167(fvec3) Load 169(c3) + 5363: 53(fvec2) Load 1409(dPdxy2) + 5364: 53(fvec2) Load 1409(dPdxy2) + 5365: 52(float) Load 4267(lodClamp) + 5366: 52(float) CompositeExtract 5362 2 + 5367:6(float16_t) ImageSampleDrefExplicitLod 5361 5362 5366 Grad ConstOffset MinLod 5363 5364 722 5365 + 5368: 208(ptr) AccessChain 5290(texel) 207 + 5369:6(float16_t) Load 5368 + 5370:6(float16_t) FAdd 5369 5367 + 5371: 208(ptr) AccessChain 5290(texel) 207 + Store 5371 5370 + 5372: 224 Load 226(s2DShadow) + 5373:154(f16vec2) Load 156(f16c2) + 5374: 52(float) Load 215(compare) + 5375:154(f16vec2) Load 1417(f16dPdxy2) + 5376:154(f16vec2) Load 1417(f16dPdxy2) + 5377:6(float16_t) Load 4274(f16lodClamp) + 5378:6(float16_t) ImageSampleDrefExplicitLod 5372 5373 5374 Grad ConstOffset MinLod 5375 5376 722 5377 + 5379: 208(ptr) AccessChain 5290(texel) 207 + 5380:6(float16_t) Load 5379 + 5381:6(float16_t) FAdd 5380 5378 + 5382: 208(ptr) AccessChain 5290(texel) 207 + Store 5382 5381 + 5383: 269 Load 271(s1DArray) + 5384: 53(fvec2) Load 148(c2) + 5385: 52(float) Load 1393(dPdxy1) + 5386: 52(float) Load 1393(dPdxy1) + 5387: 52(float) Load 4267(lodClamp) + 5388: 7(f16vec4) ImageSampleExplicitLod 5383 5384 Grad ConstOffset MinLod 5385 5386 709 5387 + 5389: 7(f16vec4) Load 5290(texel) + 5390: 7(f16vec4) FAdd 5389 5388 + Store 5290(texel) 5390 + 5391: 269 Load 271(s1DArray) + 5392:154(f16vec2) Load 156(f16c2) + 5393:6(float16_t) Load 1401(f16dPdxy1) + 5394:6(float16_t) Load 1401(f16dPdxy1) + 5395:6(float16_t) Load 4274(f16lodClamp) + 5396: 7(f16vec4) ImageSampleExplicitLod 5391 5392 Grad ConstOffset MinLod 5393 5394 709 5395 + 5397: 7(f16vec4) Load 5290(texel) + 5398: 7(f16vec4) FAdd 5397 5396 + Store 5290(texel) 5398 + 5399: 284 Load 286(s2DArray) + 5400: 167(fvec3) Load 169(c3) + 5401: 53(fvec2) Load 1409(dPdxy2) + 5402: 53(fvec2) Load 1409(dPdxy2) + 5403: 52(float) Load 4267(lodClamp) + 5404: 7(f16vec4) ImageSampleExplicitLod 5399 5400 Grad ConstOffset MinLod 5401 5402 722 5403 + 5405: 7(f16vec4) Load 5290(texel) + 5406: 7(f16vec4) FAdd 5405 5404 + Store 5290(texel) 5406 + 5407: 284 Load 286(s2DArray) + 5408:175(f16vec3) Load 177(f16c3) + 5409:154(f16vec2) Load 1417(f16dPdxy2) + 5410:154(f16vec2) Load 1417(f16dPdxy2) + 5411:6(float16_t) Load 4274(f16lodClamp) + 5412: 7(f16vec4) ImageSampleExplicitLod 5407 5408 Grad ConstOffset MinLod 5409 5410 722 5411 + 5413: 7(f16vec4) Load 5290(texel) + 5414: 7(f16vec4) FAdd 5413 5412 + Store 5290(texel) 5414 + 5415: 316 Load 318(s1DArrayShadow) + 5416: 167(fvec3) Load 169(c3) + 5417: 52(float) Load 1393(dPdxy1) + 5418: 52(float) Load 1393(dPdxy1) + 5419: 52(float) Load 4267(lodClamp) + 5420: 52(float) CompositeExtract 5416 2 + 5421:6(float16_t) ImageSampleDrefExplicitLod 5415 5416 5420 Grad ConstOffset MinLod 5417 5418 709 5419 + 5422: 208(ptr) AccessChain 5290(texel) 207 + 5423:6(float16_t) Load 5422 + 5424:6(float16_t) FAdd 5423 5421 + 5425: 208(ptr) AccessChain 5290(texel) 207 + Store 5425 5424 + 5426: 316 Load 318(s1DArrayShadow) + 5427:154(f16vec2) Load 156(f16c2) + 5428: 52(float) Load 215(compare) + 5429:6(float16_t) Load 1401(f16dPdxy1) + 5430:6(float16_t) Load 1401(f16dPdxy1) + 5431:6(float16_t) Load 4274(f16lodClamp) + 5432:6(float16_t) ImageSampleDrefExplicitLod 5426 5427 5428 Grad ConstOffset MinLod 5429 5430 709 5431 + 5433: 208(ptr) AccessChain 5290(texel) 207 + 5434:6(float16_t) Load 5433 + 5435:6(float16_t) FAdd 5434 5432 + 5436: 208(ptr) AccessChain 5290(texel) 207 + Store 5436 5435 + 5437: 337 Load 339(s2DArrayShadow) + 5438: 249(fvec4) Load 251(c4) + 5439: 53(fvec2) Load 1409(dPdxy2) + 5440: 53(fvec2) Load 1409(dPdxy2) + 5441: 52(float) Load 4267(lodClamp) + 5442: 52(float) CompositeExtract 5438 3 + 5443:6(float16_t) ImageSampleDrefExplicitLod 5437 5438 5442 Grad ConstOffset MinLod 5439 5440 722 5441 + 5444: 208(ptr) AccessChain 5290(texel) 207 + 5445:6(float16_t) Load 5444 + 5446:6(float16_t) FAdd 5445 5443 + 5447: 208(ptr) AccessChain 5290(texel) 207 + Store 5447 5446 + 5448: 337 Load 339(s2DArrayShadow) + 5449:175(f16vec3) Load 177(f16c3) + 5450: 52(float) Load 215(compare) + 5451:154(f16vec2) Load 1417(f16dPdxy2) + 5452:154(f16vec2) Load 1417(f16dPdxy2) + 5453:6(float16_t) Load 4274(f16lodClamp) + 5454:6(float16_t) ImageSampleDrefExplicitLod 5448 5449 5450 Grad ConstOffset MinLod 5451 5452 722 5453 + 5455: 208(ptr) AccessChain 5290(texel) 207 + 5456:6(float16_t) Load 5455 + 5457:6(float16_t) FAdd 5456 5454 + 5458: 208(ptr) AccessChain 5290(texel) 207 + Store 5458 5457 + 5459: 7(f16vec4) Load 5290(texel) + ReturnValue 5459 FunctionEnd 115(testCombinedTextureSampler(): 7(f16vec4) Function None 8 116: Label - 5452(texel): 64(ptr) Variable Function - Store 5452(texel) 121 - 5455: 122 Load 5454(t1D) - 5459: 5456 Load 5458(s) - 5460: 123 SampledImage 5455 5459 - 5461: 52(float) Load 128(c1) - 5462: 7(f16vec4) ImageSampleImplicitLod 5460 5461 - 5463: 7(f16vec4) Load 5452(texel) - 5464: 7(f16vec4) FAdd 5463 5462 - Store 5452(texel) 5464 - 5465: 122 Load 5454(t1D) - 5466: 5456 Load 5458(s) - 5467: 123 SampledImage 5465 5466 - 5468:6(float16_t) Load 135(f16c1) - 5469:6(float16_t) Load 137(f16bias) - 5470: 7(f16vec4) ImageSampleImplicitLod 5467 5468 Bias 5469 - 5471: 7(f16vec4) Load 5452(texel) - 5472: 7(f16vec4) FAdd 5471 5470 - Store 5452(texel) 5472 - 5475: 142 Load 5474(t2D) - 5476: 5456 Load 5458(s) - 5477: 143 SampledImage 5475 5476 - 5478: 53(fvec2) Load 148(c2) - 5479: 7(f16vec4) ImageSampleImplicitLod 5477 5478 - 5480: 7(f16vec4) Load 5452(texel) - 5481: 7(f16vec4) FAdd 5480 5479 - Store 5452(texel) 5481 - 5482: 142 Load 5474(t2D) - 5483: 5456 Load 5458(s) - 5484: 143 SampledImage 5482 5483 - 5485:154(f16vec2) Load 156(f16c2) - 5486:6(float16_t) Load 137(f16bias) - 5487: 7(f16vec4) ImageSampleImplicitLod 5484 5485 Bias 5486 - 5488: 7(f16vec4) Load 5452(texel) - 5489: 7(f16vec4) FAdd 5488 5487 - Store 5452(texel) 5489 - 5492: 162 Load 5491(t3D) - 5493: 5456 Load 5458(s) - 5494: 163 SampledImage 5492 5493 - 5495: 167(fvec3) Load 169(c3) - 5496: 7(f16vec4) ImageSampleImplicitLod 5494 5495 - 5497: 7(f16vec4) Load 5452(texel) - 5498: 7(f16vec4) FAdd 5497 5496 - Store 5452(texel) 5498 - 5499: 162 Load 5491(t3D) - 5500: 5456 Load 5458(s) - 5501: 163 SampledImage 5499 5500 - 5502:175(f16vec3) Load 177(f16c3) - 5503:6(float16_t) Load 137(f16bias) - 5504: 7(f16vec4) ImageSampleImplicitLod 5501 5502 Bias 5503 - 5505: 7(f16vec4) Load 5452(texel) - 5506: 7(f16vec4) FAdd 5505 5504 - Store 5452(texel) 5506 - 5509: 183 Load 5508(tCube) - 5510: 5456 Load 5458(s) - 5511: 184 SampledImage 5509 5510 - 5512: 167(fvec3) Load 169(c3) - 5513: 7(f16vec4) ImageSampleImplicitLod 5511 5512 - 5514: 7(f16vec4) Load 5452(texel) - 5515: 7(f16vec4) FAdd 5514 5513 - Store 5452(texel) 5515 - 5516: 183 Load 5508(tCube) - 5517: 5456 Load 5458(s) - 5518: 184 SampledImage 5516 5517 - 5519:175(f16vec3) Load 177(f16c3) - 5520:6(float16_t) Load 137(f16bias) - 5521: 7(f16vec4) ImageSampleImplicitLod 5518 5519 Bias 5520 - 5522: 7(f16vec4) Load 5452(texel) - 5523: 7(f16vec4) FAdd 5522 5521 - Store 5452(texel) 5523 - 5524: 122 Load 5454(t1D) - 5526: 5456 Load 5525(sShadow) - 5527: 199 SampledImage 5524 5526 - 5528: 167(fvec3) Load 169(c3) - 5529: 52(float) CompositeExtract 5528 2 - 5530:6(float16_t) ImageSampleDrefImplicitLod 5527 5528 5529 - 5531: 208(ptr) AccessChain 5452(texel) 207 - 5532:6(float16_t) Load 5531 - 5533:6(float16_t) FAdd 5532 5530 - 5534: 208(ptr) AccessChain 5452(texel) 207 - Store 5534 5533 - 5535: 122 Load 5454(t1D) - 5536: 5456 Load 5525(sShadow) - 5537: 199 SampledImage 5535 5536 - 5538:154(f16vec2) Load 156(f16c2) - 5539: 52(float) Load 215(compare) - 5540:6(float16_t) Load 137(f16bias) - 5541:6(float16_t) ImageSampleDrefImplicitLod 5537 5538 5539 Bias 5540 - 5542: 208(ptr) AccessChain 5452(texel) 207 - 5543:6(float16_t) Load 5542 - 5544:6(float16_t) FAdd 5543 5541 - 5545: 208(ptr) AccessChain 5452(texel) 207 - Store 5545 5544 - 5546: 142 Load 5474(t2D) - 5547: 5456 Load 5525(sShadow) - 5548: 224 SampledImage 5546 5547 - 5549: 167(fvec3) Load 169(c3) - 5550: 52(float) CompositeExtract 5549 2 - 5551:6(float16_t) ImageSampleDrefImplicitLod 5548 5549 5550 - 5552: 208(ptr) AccessChain 5452(texel) 207 + 5462(texel): 64(ptr) Variable Function + Store 5462(texel) 121 + 5465: 122 Load 5464(t1D) + 5469: 5466 Load 5468(s) + 5470: 123 SampledImage 5465 5469 + 5471: 52(float) Load 128(c1) + 5472: 7(f16vec4) ImageSampleImplicitLod 5470 5471 + 5473: 7(f16vec4) Load 5462(texel) + 5474: 7(f16vec4) FAdd 5473 5472 + Store 5462(texel) 5474 + 5475: 122 Load 5464(t1D) + 5476: 5466 Load 5468(s) + 5477: 123 SampledImage 5475 5476 + 5478:6(float16_t) Load 135(f16c1) + 5479:6(float16_t) Load 137(f16bias) + 5480: 7(f16vec4) ImageSampleImplicitLod 5477 5478 Bias 5479 + 5481: 7(f16vec4) Load 5462(texel) + 5482: 7(f16vec4) FAdd 5481 5480 + Store 5462(texel) 5482 + 5485: 142 Load 5484(t2D) + 5486: 5466 Load 5468(s) + 5487: 143 SampledImage 5485 5486 + 5488: 53(fvec2) Load 148(c2) + 5489: 7(f16vec4) ImageSampleImplicitLod 5487 5488 + 5490: 7(f16vec4) Load 5462(texel) + 5491: 7(f16vec4) FAdd 5490 5489 + Store 5462(texel) 5491 + 5492: 142 Load 5484(t2D) + 5493: 5466 Load 5468(s) + 5494: 143 SampledImage 5492 5493 + 5495:154(f16vec2) Load 156(f16c2) + 5496:6(float16_t) Load 137(f16bias) + 5497: 7(f16vec4) ImageSampleImplicitLod 5494 5495 Bias 5496 + 5498: 7(f16vec4) Load 5462(texel) + 5499: 7(f16vec4) FAdd 5498 5497 + Store 5462(texel) 5499 + 5502: 162 Load 5501(t3D) + 5503: 5466 Load 5468(s) + 5504: 163 SampledImage 5502 5503 + 5505: 167(fvec3) Load 169(c3) + 5506: 7(f16vec4) ImageSampleImplicitLod 5504 5505 + 5507: 7(f16vec4) Load 5462(texel) + 5508: 7(f16vec4) FAdd 5507 5506 + Store 5462(texel) 5508 + 5509: 162 Load 5501(t3D) + 5510: 5466 Load 5468(s) + 5511: 163 SampledImage 5509 5510 + 5512:175(f16vec3) Load 177(f16c3) + 5513:6(float16_t) Load 137(f16bias) + 5514: 7(f16vec4) ImageSampleImplicitLod 5511 5512 Bias 5513 + 5515: 7(f16vec4) Load 5462(texel) + 5516: 7(f16vec4) FAdd 5515 5514 + Store 5462(texel) 5516 + 5519: 183 Load 5518(tCube) + 5520: 5466 Load 5468(s) + 5521: 184 SampledImage 5519 5520 + 5522: 167(fvec3) Load 169(c3) + 5523: 7(f16vec4) ImageSampleImplicitLod 5521 5522 + 5524: 7(f16vec4) Load 5462(texel) + 5525: 7(f16vec4) FAdd 5524 5523 + Store 5462(texel) 5525 + 5526: 183 Load 5518(tCube) + 5527: 5466 Load 5468(s) + 5528: 184 SampledImage 5526 5527 + 5529:175(f16vec3) Load 177(f16c3) + 5530:6(float16_t) Load 137(f16bias) + 5531: 7(f16vec4) ImageSampleImplicitLod 5528 5529 Bias 5530 + 5532: 7(f16vec4) Load 5462(texel) + 5533: 7(f16vec4) FAdd 5532 5531 + Store 5462(texel) 5533 + 5534: 122 Load 5464(t1D) + 5536: 5466 Load 5535(sShadow) + 5537: 199 SampledImage 5534 5536 + 5538: 167(fvec3) Load 169(c3) + 5539: 52(float) CompositeExtract 5538 2 + 5540:6(float16_t) ImageSampleDrefImplicitLod 5537 5538 5539 + 5541: 208(ptr) AccessChain 5462(texel) 207 + 5542:6(float16_t) Load 5541 + 5543:6(float16_t) FAdd 5542 5540 + 5544: 208(ptr) AccessChain 5462(texel) 207 + Store 5544 5543 + 5545: 122 Load 5464(t1D) + 5546: 5466 Load 5535(sShadow) + 5547: 199 SampledImage 5545 5546 + 5548:154(f16vec2) Load 156(f16c2) + 5549: 52(float) Load 215(compare) + 5550:6(float16_t) Load 137(f16bias) + 5551:6(float16_t) ImageSampleDrefImplicitLod 5547 5548 5549 Bias 5550 + 5552: 208(ptr) AccessChain 5462(texel) 207 5553:6(float16_t) Load 5552 5554:6(float16_t) FAdd 5553 5551 - 5555: 208(ptr) AccessChain 5452(texel) 207 + 5555: 208(ptr) AccessChain 5462(texel) 207 Store 5555 5554 - 5556: 142 Load 5474(t2D) - 5557: 5456 Load 5525(sShadow) + 5556: 142 Load 5484(t2D) + 5557: 5466 Load 5535(sShadow) 5558: 224 SampledImage 5556 5557 - 5559:154(f16vec2) Load 156(f16c2) - 5560: 52(float) Load 215(compare) - 5561:6(float16_t) Load 137(f16bias) - 5562:6(float16_t) ImageSampleDrefImplicitLod 5558 5559 5560 Bias 5561 - 5563: 208(ptr) AccessChain 5452(texel) 207 - 5564:6(float16_t) Load 5563 - 5565:6(float16_t) FAdd 5564 5562 - 5566: 208(ptr) AccessChain 5452(texel) 207 - Store 5566 5565 - 5567: 183 Load 5508(tCube) - 5568: 5456 Load 5525(sShadow) - 5569: 245 SampledImage 5567 5568 - 5570: 249(fvec4) Load 251(c4) - 5571: 52(float) CompositeExtract 5570 3 - 5572:6(float16_t) ImageSampleDrefImplicitLod 5569 5570 5571 - 5573: 208(ptr) AccessChain 5452(texel) 207 + 5559: 167(fvec3) Load 169(c3) + 5560: 52(float) CompositeExtract 5559 2 + 5561:6(float16_t) ImageSampleDrefImplicitLod 5558 5559 5560 + 5562: 208(ptr) AccessChain 5462(texel) 207 + 5563:6(float16_t) Load 5562 + 5564:6(float16_t) FAdd 5563 5561 + 5565: 208(ptr) AccessChain 5462(texel) 207 + Store 5565 5564 + 5566: 142 Load 5484(t2D) + 5567: 5466 Load 5535(sShadow) + 5568: 224 SampledImage 5566 5567 + 5569:154(f16vec2) Load 156(f16c2) + 5570: 52(float) Load 215(compare) + 5571:6(float16_t) Load 137(f16bias) + 5572:6(float16_t) ImageSampleDrefImplicitLod 5568 5569 5570 Bias 5571 + 5573: 208(ptr) AccessChain 5462(texel) 207 5574:6(float16_t) Load 5573 5575:6(float16_t) FAdd 5574 5572 - 5576: 208(ptr) AccessChain 5452(texel) 207 + 5576: 208(ptr) AccessChain 5462(texel) 207 Store 5576 5575 - 5577: 183 Load 5508(tCube) - 5578: 5456 Load 5525(sShadow) + 5577: 183 Load 5518(tCube) + 5578: 5466 Load 5535(sShadow) 5579: 245 SampledImage 5577 5578 - 5580:175(f16vec3) Load 177(f16c3) - 5581: 52(float) Load 215(compare) - 5582:6(float16_t) Load 137(f16bias) - 5583:6(float16_t) ImageSampleDrefImplicitLod 5579 5580 5581 Bias 5582 - 5584: 208(ptr) AccessChain 5452(texel) 207 - 5585:6(float16_t) Load 5584 - 5586:6(float16_t) FAdd 5585 5583 - 5587: 208(ptr) AccessChain 5452(texel) 207 - Store 5587 5586 - 5590: 268 Load 5589(t1DArray) - 5591: 5456 Load 5458(s) - 5592: 269 SampledImage 5590 5591 - 5593: 53(fvec2) Load 148(c2) - 5594: 7(f16vec4) ImageSampleImplicitLod 5592 5593 - 5595: 7(f16vec4) Load 5452(texel) - 5596: 7(f16vec4) FAdd 5595 5594 - Store 5452(texel) 5596 - 5597: 268 Load 5589(t1DArray) - 5598: 5456 Load 5458(s) - 5599: 269 SampledImage 5597 5598 - 5600:154(f16vec2) Load 156(f16c2) - 5601:6(float16_t) Load 137(f16bias) - 5602: 7(f16vec4) ImageSampleImplicitLod 5599 5600 Bias 5601 - 5603: 7(f16vec4) Load 5452(texel) - 5604: 7(f16vec4) FAdd 5603 5602 - Store 5452(texel) 5604 - 5607: 283 Load 5606(t2DArray) - 5608: 5456 Load 5458(s) - 5609: 284 SampledImage 5607 5608 - 5610: 167(fvec3) Load 169(c3) - 5611: 7(f16vec4) ImageSampleImplicitLod 5609 5610 - 5612: 7(f16vec4) Load 5452(texel) - 5613: 7(f16vec4) FAdd 5612 5611 - Store 5452(texel) 5613 - 5614: 283 Load 5606(t2DArray) - 5615: 5456 Load 5458(s) - 5616: 284 SampledImage 5614 5615 - 5617:175(f16vec3) Load 177(f16c3) - 5618:6(float16_t) Load 137(f16bias) - 5619: 7(f16vec4) ImageSampleImplicitLod 5616 5617 Bias 5618 - 5620: 7(f16vec4) Load 5452(texel) - 5621: 7(f16vec4) FAdd 5620 5619 - Store 5452(texel) 5621 - 5624: 298 Load 5623(tCubeArray) - 5625: 5456 Load 5458(s) - 5626: 299 SampledImage 5624 5625 - 5627: 249(fvec4) Load 251(c4) - 5628: 7(f16vec4) ImageSampleImplicitLod 5626 5627 - 5629: 7(f16vec4) Load 5452(texel) - 5630: 7(f16vec4) FAdd 5629 5628 - Store 5452(texel) 5630 - 5631: 298 Load 5623(tCubeArray) - 5632: 5456 Load 5458(s) - 5633: 299 SampledImage 5631 5632 - 5634: 7(f16vec4) Load 309(f16c4) - 5635:6(float16_t) Load 137(f16bias) - 5636: 7(f16vec4) ImageSampleImplicitLod 5633 5634 Bias 5635 - 5637: 7(f16vec4) Load 5452(texel) - 5638: 7(f16vec4) FAdd 5637 5636 - Store 5452(texel) 5638 - 5639: 268 Load 5589(t1DArray) - 5640: 5456 Load 5525(sShadow) - 5641: 316 SampledImage 5639 5640 - 5642: 167(fvec3) Load 169(c3) - 5643: 52(float) CompositeExtract 5642 2 - 5644:6(float16_t) ImageSampleDrefImplicitLod 5641 5642 5643 - 5645: 208(ptr) AccessChain 5452(texel) 207 - 5646:6(float16_t) Load 5645 - 5647:6(float16_t) FAdd 5646 5644 - 5648: 208(ptr) AccessChain 5452(texel) 207 - Store 5648 5647 - 5649: 268 Load 5589(t1DArray) - 5650: 5456 Load 5525(sShadow) + 5580: 249(fvec4) Load 251(c4) + 5581: 52(float) CompositeExtract 5580 3 + 5582:6(float16_t) ImageSampleDrefImplicitLod 5579 5580 5581 + 5583: 208(ptr) AccessChain 5462(texel) 207 + 5584:6(float16_t) Load 5583 + 5585:6(float16_t) FAdd 5584 5582 + 5586: 208(ptr) AccessChain 5462(texel) 207 + Store 5586 5585 + 5587: 183 Load 5518(tCube) + 5588: 5466 Load 5535(sShadow) + 5589: 245 SampledImage 5587 5588 + 5590:175(f16vec3) Load 177(f16c3) + 5591: 52(float) Load 215(compare) + 5592:6(float16_t) Load 137(f16bias) + 5593:6(float16_t) ImageSampleDrefImplicitLod 5589 5590 5591 Bias 5592 + 5594: 208(ptr) AccessChain 5462(texel) 207 + 5595:6(float16_t) Load 5594 + 5596:6(float16_t) FAdd 5595 5593 + 5597: 208(ptr) AccessChain 5462(texel) 207 + Store 5597 5596 + 5600: 268 Load 5599(t1DArray) + 5601: 5466 Load 5468(s) + 5602: 269 SampledImage 5600 5601 + 5603: 53(fvec2) Load 148(c2) + 5604: 7(f16vec4) ImageSampleImplicitLod 5602 5603 + 5605: 7(f16vec4) Load 5462(texel) + 5606: 7(f16vec4) FAdd 5605 5604 + Store 5462(texel) 5606 + 5607: 268 Load 5599(t1DArray) + 5608: 5466 Load 5468(s) + 5609: 269 SampledImage 5607 5608 + 5610:154(f16vec2) Load 156(f16c2) + 5611:6(float16_t) Load 137(f16bias) + 5612: 7(f16vec4) ImageSampleImplicitLod 5609 5610 Bias 5611 + 5613: 7(f16vec4) Load 5462(texel) + 5614: 7(f16vec4) FAdd 5613 5612 + Store 5462(texel) 5614 + 5617: 283 Load 5616(t2DArray) + 5618: 5466 Load 5468(s) + 5619: 284 SampledImage 5617 5618 + 5620: 167(fvec3) Load 169(c3) + 5621: 7(f16vec4) ImageSampleImplicitLod 5619 5620 + 5622: 7(f16vec4) Load 5462(texel) + 5623: 7(f16vec4) FAdd 5622 5621 + Store 5462(texel) 5623 + 5624: 283 Load 5616(t2DArray) + 5625: 5466 Load 5468(s) + 5626: 284 SampledImage 5624 5625 + 5627:175(f16vec3) Load 177(f16c3) + 5628:6(float16_t) Load 137(f16bias) + 5629: 7(f16vec4) ImageSampleImplicitLod 5626 5627 Bias 5628 + 5630: 7(f16vec4) Load 5462(texel) + 5631: 7(f16vec4) FAdd 5630 5629 + Store 5462(texel) 5631 + 5634: 298 Load 5633(tCubeArray) + 5635: 5466 Load 5468(s) + 5636: 299 SampledImage 5634 5635 + 5637: 249(fvec4) Load 251(c4) + 5638: 7(f16vec4) ImageSampleImplicitLod 5636 5637 + 5639: 7(f16vec4) Load 5462(texel) + 5640: 7(f16vec4) FAdd 5639 5638 + Store 5462(texel) 5640 + 5641: 298 Load 5633(tCubeArray) + 5642: 5466 Load 5468(s) + 5643: 299 SampledImage 5641 5642 + 5644: 7(f16vec4) Load 309(f16c4) + 5645:6(float16_t) Load 137(f16bias) + 5646: 7(f16vec4) ImageSampleImplicitLod 5643 5644 Bias 5645 + 5647: 7(f16vec4) Load 5462(texel) + 5648: 7(f16vec4) FAdd 5647 5646 + Store 5462(texel) 5648 + 5649: 268 Load 5599(t1DArray) + 5650: 5466 Load 5535(sShadow) 5651: 316 SampledImage 5649 5650 - 5652:154(f16vec2) Load 156(f16c2) - 5653: 52(float) Load 215(compare) - 5654:6(float16_t) Load 137(f16bias) - 5655:6(float16_t) ImageSampleDrefImplicitLod 5651 5652 5653 Bias 5654 - 5656: 208(ptr) AccessChain 5452(texel) 207 - 5657:6(float16_t) Load 5656 - 5658:6(float16_t) FAdd 5657 5655 - 5659: 208(ptr) AccessChain 5452(texel) 207 - Store 5659 5658 - 5660: 283 Load 5606(t2DArray) - 5661: 5456 Load 5525(sShadow) - 5662: 337 SampledImage 5660 5661 - 5663: 249(fvec4) Load 251(c4) - 5664: 52(float) CompositeExtract 5663 3 - 5665:6(float16_t) ImageSampleDrefImplicitLod 5662 5663 5664 - 5666: 208(ptr) AccessChain 5452(texel) 207 + 5652: 167(fvec3) Load 169(c3) + 5653: 52(float) CompositeExtract 5652 2 + 5654:6(float16_t) ImageSampleDrefImplicitLod 5651 5652 5653 + 5655: 208(ptr) AccessChain 5462(texel) 207 + 5656:6(float16_t) Load 5655 + 5657:6(float16_t) FAdd 5656 5654 + 5658: 208(ptr) AccessChain 5462(texel) 207 + Store 5658 5657 + 5659: 268 Load 5599(t1DArray) + 5660: 5466 Load 5535(sShadow) + 5661: 316 SampledImage 5659 5660 + 5662:154(f16vec2) Load 156(f16c2) + 5663: 52(float) Load 215(compare) + 5664:6(float16_t) Load 137(f16bias) + 5665:6(float16_t) ImageSampleDrefImplicitLod 5661 5662 5663 Bias 5664 + 5666: 208(ptr) AccessChain 5462(texel) 207 5667:6(float16_t) Load 5666 5668:6(float16_t) FAdd 5667 5665 - 5669: 208(ptr) AccessChain 5452(texel) 207 + 5669: 208(ptr) AccessChain 5462(texel) 207 Store 5669 5668 - 5670: 283 Load 5606(t2DArray) - 5671: 5456 Load 5525(sShadow) + 5670: 283 Load 5616(t2DArray) + 5671: 5466 Load 5535(sShadow) 5672: 337 SampledImage 5670 5671 - 5673:175(f16vec3) Load 177(f16c3) - 5674: 52(float) Load 215(compare) + 5673: 249(fvec4) Load 251(c4) + 5674: 52(float) CompositeExtract 5673 3 5675:6(float16_t) ImageSampleDrefImplicitLod 5672 5673 5674 - 5676: 208(ptr) AccessChain 5452(texel) 207 + 5676: 208(ptr) AccessChain 5462(texel) 207 5677:6(float16_t) Load 5676 5678:6(float16_t) FAdd 5677 5675 - 5679: 208(ptr) AccessChain 5452(texel) 207 + 5679: 208(ptr) AccessChain 5462(texel) 207 Store 5679 5678 - 5682: 356 Load 5681(t2DRect) - 5683: 5456 Load 5458(s) - 5684: 357 SampledImage 5682 5683 - 5685: 53(fvec2) Load 148(c2) - 5686: 7(f16vec4) ImageSampleImplicitLod 5684 5685 - 5687: 7(f16vec4) Load 5452(texel) - 5688: 7(f16vec4) FAdd 5687 5686 - Store 5452(texel) 5688 - 5689: 356 Load 5681(t2DRect) - 5690: 5456 Load 5458(s) - 5691: 357 SampledImage 5689 5690 - 5692:154(f16vec2) Load 156(f16c2) - 5693: 7(f16vec4) ImageSampleImplicitLod 5691 5692 - 5694: 7(f16vec4) Load 5452(texel) - 5695: 7(f16vec4) FAdd 5694 5693 - Store 5452(texel) 5695 - 5696: 356 Load 5681(t2DRect) - 5697: 5456 Load 5525(sShadow) - 5698: 371 SampledImage 5696 5697 - 5699: 167(fvec3) Load 169(c3) - 5700: 52(float) CompositeExtract 5699 2 - 5701:6(float16_t) ImageSampleDrefImplicitLod 5698 5699 5700 - 5702: 208(ptr) AccessChain 5452(texel) 207 - 5703:6(float16_t) Load 5702 - 5704:6(float16_t) FAdd 5703 5701 - 5705: 208(ptr) AccessChain 5452(texel) 207 - Store 5705 5704 - 5706: 356 Load 5681(t2DRect) - 5707: 5456 Load 5525(sShadow) + 5680: 283 Load 5616(t2DArray) + 5681: 5466 Load 5535(sShadow) + 5682: 337 SampledImage 5680 5681 + 5683:175(f16vec3) Load 177(f16c3) + 5684: 52(float) Load 215(compare) + 5685:6(float16_t) ImageSampleDrefImplicitLod 5682 5683 5684 + 5686: 208(ptr) AccessChain 5462(texel) 207 + 5687:6(float16_t) Load 5686 + 5688:6(float16_t) FAdd 5687 5685 + 5689: 208(ptr) AccessChain 5462(texel) 207 + Store 5689 5688 + 5692: 356 Load 5691(t2DRect) + 5693: 5466 Load 5468(s) + 5694: 357 SampledImage 5692 5693 + 5695: 53(fvec2) Load 148(c2) + 5696: 7(f16vec4) ImageSampleImplicitLod 5694 5695 + 5697: 7(f16vec4) Load 5462(texel) + 5698: 7(f16vec4) FAdd 5697 5696 + Store 5462(texel) 5698 + 5699: 356 Load 5691(t2DRect) + 5700: 5466 Load 5468(s) + 5701: 357 SampledImage 5699 5700 + 5702:154(f16vec2) Load 156(f16c2) + 5703: 7(f16vec4) ImageSampleImplicitLod 5701 5702 + 5704: 7(f16vec4) Load 5462(texel) + 5705: 7(f16vec4) FAdd 5704 5703 + Store 5462(texel) 5705 + 5706: 356 Load 5691(t2DRect) + 5707: 5466 Load 5535(sShadow) 5708: 371 SampledImage 5706 5707 - 5709:154(f16vec2) Load 156(f16c2) - 5710: 52(float) Load 215(compare) + 5709: 167(fvec3) Load 169(c3) + 5710: 52(float) CompositeExtract 5709 2 5711:6(float16_t) ImageSampleDrefImplicitLod 5708 5709 5710 - 5712: 208(ptr) AccessChain 5452(texel) 207 + 5712: 208(ptr) AccessChain 5462(texel) 207 5713:6(float16_t) Load 5712 5714:6(float16_t) FAdd 5713 5711 - 5715: 208(ptr) AccessChain 5452(texel) 207 + 5715: 208(ptr) AccessChain 5462(texel) 207 Store 5715 5714 - 5716: 298 Load 5623(tCubeArray) - 5717: 5456 Load 5525(sShadow) - 5718: 391 SampledImage 5716 5717 - 5719: 249(fvec4) Load 251(c4) + 5716: 356 Load 5691(t2DRect) + 5717: 5466 Load 5535(sShadow) + 5718: 371 SampledImage 5716 5717 + 5719:154(f16vec2) Load 156(f16c2) 5720: 52(float) Load 215(compare) 5721:6(float16_t) ImageSampleDrefImplicitLod 5718 5719 5720 - 5722: 208(ptr) AccessChain 5452(texel) 207 + 5722: 208(ptr) AccessChain 5462(texel) 207 5723:6(float16_t) Load 5722 5724:6(float16_t) FAdd 5723 5721 - 5725: 208(ptr) AccessChain 5452(texel) 207 + 5725: 208(ptr) AccessChain 5462(texel) 207 Store 5725 5724 - 5726: 298 Load 5623(tCubeArray) - 5727: 5456 Load 5525(sShadow) + 5726: 298 Load 5633(tCubeArray) + 5727: 5466 Load 5535(sShadow) 5728: 391 SampledImage 5726 5727 - 5729: 7(f16vec4) Load 309(f16c4) + 5729: 249(fvec4) Load 251(c4) 5730: 52(float) Load 215(compare) 5731:6(float16_t) ImageSampleDrefImplicitLod 5728 5729 5730 - 5732: 208(ptr) AccessChain 5452(texel) 207 + 5732: 208(ptr) AccessChain 5462(texel) 207 5733:6(float16_t) Load 5732 5734:6(float16_t) FAdd 5733 5731 - 5735: 208(ptr) AccessChain 5452(texel) 207 + 5735: 208(ptr) AccessChain 5462(texel) 207 Store 5735 5734 - 5736: 7(f16vec4) Load 5452(texel) - ReturnValue 5736 + 5736: 298 Load 5633(tCubeArray) + 5737: 5466 Load 5535(sShadow) + 5738: 391 SampledImage 5736 5737 + 5739: 7(f16vec4) Load 309(f16c4) + 5740: 52(float) Load 215(compare) + 5741:6(float16_t) ImageSampleDrefImplicitLod 5738 5739 5740 + 5742: 208(ptr) AccessChain 5462(texel) 207 + 5743:6(float16_t) Load 5742 + 5744:6(float16_t) FAdd 5743 5741 + 5745: 208(ptr) AccessChain 5462(texel) 207 + Store 5745 5744 + 5746: 7(f16vec4) Load 5462(texel) + ReturnValue 5746 FunctionEnd 117(testSubpassLoad(): 7(f16vec4) Function None 8 118: Label - 5742: 5739 Load 5741(subpass) - 5744: 7(f16vec4) ImageRead 5742 5743 - 5748: 5745 Load 5747(subpassMS) - 5749: 7(f16vec4) ImageRead 5748 5743 Sample 1326 - 5750: 7(f16vec4) FAdd 5744 5749 - ReturnValue 5750 + 5752: 5749 Load 5751(subpass) + 5754: 7(f16vec4) ImageRead 5752 5753 + 5758: 5755 Load 5757(subpassMS) + 5759: 7(f16vec4) ImageRead 5758 5753 Sample 1326 + 5760: 7(f16vec4) FAdd 5754 5759 + ReturnValue 5760 FunctionEnd diff --git a/Test/baseResults/spv.sparseTexture.frag.out b/Test/baseResults/spv.sparseTexture.frag.out index 0f7c687d1f..bf44b81e00 100644 --- a/Test/baseResults/spv.sparseTexture.frag.out +++ b/Test/baseResults/spv.sparseTexture.frag.out @@ -2,7 +2,7 @@ spv.sparseTexture.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 438 +// Id's are bound by 442 Capability Shader Capability ImageGatherExtended @@ -12,7 +12,7 @@ Validation failed Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 33 48 89 365 393 405 423 + EntryPoint Fragment 4 "main" 33 48 89 397 409 427 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_ARB_sparse_texture2" @@ -40,13 +40,12 @@ Validation failed Name 228 "is2DArray" Name 261 "sCubeShadow" Name 294 "s2DRectShadow" - Name 365 "offsets" - Name 390 "i2D" - Name 393 "ic2" - Name 402 "ii3D" - Name 405 "ic3" - Name 414 "i2DMS" - Name 423 "outColor" + Name 394 "i2D" + Name 397 "ic2" + Name 406 "ii3D" + Name 409 "ic3" + Name 418 "i2DMS" + Name 427 "outColor" Decorate 29(s2D) DescriptorSet 0 Decorate 29(s2D) Binding 0 Decorate 33(c2) Location 0 @@ -74,19 +73,17 @@ Validation failed Decorate 261(sCubeShadow) Binding 3 Decorate 294(s2DRectShadow) DescriptorSet 0 Decorate 294(s2DRectShadow) Binding 5 - Decorate 365(offsets) Flat - Decorate 365(offsets) Location 5 - Decorate 390(i2D) DescriptorSet 0 - Decorate 390(i2D) Binding 12 - Decorate 393(ic2) Flat - Decorate 393(ic2) Location 3 - Decorate 402(ii3D) DescriptorSet 0 - Decorate 402(ii3D) Binding 13 - Decorate 405(ic3) Flat - Decorate 405(ic3) Location 4 - Decorate 414(i2DMS) DescriptorSet 0 - Decorate 414(i2DMS) Binding 14 - Decorate 423(outColor) Location 0 + Decorate 394(i2D) DescriptorSet 0 + Decorate 394(i2D) Binding 12 + Decorate 397(ic2) Flat + Decorate 397(ic2) Location 3 + Decorate 406(ii3D) DescriptorSet 0 + Decorate 406(ii3D) Binding 13 + Decorate 409(ic3) Flat + Decorate 409(ic3) Location 4 + Decorate 418(i2DMS) DescriptorSet 0 + Decorate 418(i2DMS) Binding 14 + Decorate 427(outColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -189,31 +186,38 @@ Validation failed 340: 143(ivec2) ConstantComposite 192 192 362: 20(int) Constant 4 363: TypeArray 143(ivec2) 362 - 364: TypePointer Input 363 - 365(offsets): 364(ptr) Variable Input - 388: TypeImage 10(float) 2D nonsampled format:Rgba32f - 389: TypePointer UniformConstant 388 - 390(i2D): 389(ptr) Variable UniformConstant - 392: TypePointer Input 143(ivec2) - 393(ic2): 392(ptr) Variable Input - 400: TypeImage 6(int) 3D nonsampled format:Rgba32i - 401: TypePointer UniformConstant 400 - 402(ii3D): 401(ptr) Variable UniformConstant - 404: TypePointer Input 129(ivec3) - 405(ic3): 404(ptr) Variable Input - 412: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f - 413: TypePointer UniformConstant 412 - 414(i2DMS): 413(ptr) Variable UniformConstant - 422: TypePointer Output 11(fvec4) - 423(outColor): 422(ptr) Variable Output - 425: TypeBool + 364: 6(int) Constant 1 + 365: 143(ivec2) ConstantComposite 364 130 + 366: 143(ivec2) ConstantComposite 144 192 + 367: 6(int) Constant 15 + 368: 6(int) Constant 16 + 369: 143(ivec2) ConstantComposite 367 368 + 370: 6(int) Constant 4294967294 + 371: 143(ivec2) ConstantComposite 370 9 + 372: 363 ConstantComposite 365 366 369 371 + 392: TypeImage 10(float) 2D nonsampled format:Rgba32f + 393: TypePointer UniformConstant 392 + 394(i2D): 393(ptr) Variable UniformConstant + 396: TypePointer Input 143(ivec2) + 397(ic2): 396(ptr) Variable Input + 404: TypeImage 6(int) 3D nonsampled format:Rgba32i + 405: TypePointer UniformConstant 404 + 406(ii3D): 405(ptr) Variable UniformConstant + 408: TypePointer Input 129(ivec3) + 409(ic3): 408(ptr) Variable Input + 416: TypeImage 10(float) 2D multi-sampled nonsampled format:Rgba32f + 417: TypePointer UniformConstant 416 + 418(i2DMS): 417(ptr) Variable UniformConstant + 426: TypePointer Output 11(fvec4) + 427(outColor): 426(ptr) Variable Output + 429: TypeBool 4(main): 2 Function None 3 5: Label 8(resident): 7(ptr) Variable Function 13(texel): 12(ptr) Variable Function 18(itexel): 17(ptr) Variable Function 23(utexel): 22(ptr) Variable Function - 427: 12(ptr) Variable Function + 431: 12(ptr) Variable Function Store 8(resident) 9 Store 13(texel) 15 Store 18(itexel) 19 @@ -534,79 +538,76 @@ Validation failed Store 8(resident) 359 360: 27 Load 29(s2D) 361: 31(fvec2) Load 33(c2) - 366: 363 Load 365(offsets) - 367: 35(ResType) ImageSparseGather 360 361 9 ConstOffsets 366 - 368: 11(fvec4) CompositeExtract 367 1 - Store 13(texel) 368 - 369: 6(int) CompositeExtract 367 0 - 370: 6(int) Load 8(resident) - 371: 6(int) BitwiseOr 370 369 - Store 8(resident) 371 - 372: 226 Load 228(is2DArray) - 373: 46(fvec3) Load 48(c3) - 374: 363 Load 365(offsets) - 375: 62(ResType) ImageSparseGather 372 373 130 ConstOffsets 374 - 376: 16(ivec4) CompositeExtract 375 1 - Store 18(itexel) 376 - 377: 6(int) CompositeExtract 375 0 - 378: 6(int) Load 8(resident) - 379: 6(int) BitwiseOr 378 377 - Store 8(resident) 379 - 380: 292 Load 294(s2DRectShadow) - 381: 31(fvec2) Load 33(c2) - 382: 363 Load 365(offsets) - 383: 35(ResType) ImageSparseDrefGather 380 381 50 ConstOffsets 382 - 384: 11(fvec4) CompositeExtract 383 1 - Store 13(texel) 384 - 385: 6(int) CompositeExtract 383 0 - 386: 6(int) Load 8(resident) - 387: 6(int) BitwiseOr 386 385 - Store 8(resident) 387 - 391: 388 Load 390(i2D) - 394: 143(ivec2) Load 393(ic2) - 395: 35(ResType) ImageSparseRead 391 394 - 396: 11(fvec4) CompositeExtract 395 1 - Store 13(texel) 396 - 397: 6(int) CompositeExtract 395 0 - 398: 6(int) Load 8(resident) - 399: 6(int) BitwiseOr 398 397 - Store 8(resident) 399 - 403: 400 Load 402(ii3D) - 406: 129(ivec3) Load 405(ic3) - 407: 62(ResType) ImageSparseRead 403 406 - 408: 16(ivec4) CompositeExtract 407 1 - Store 18(itexel) 408 - 409: 6(int) CompositeExtract 407 0 - 410: 6(int) Load 8(resident) - 411: 6(int) BitwiseOr 410 409 - Store 8(resident) 411 - 415: 412 Load 414(i2DMS) - 416: 143(ivec2) Load 393(ic2) - 417: 35(ResType) ImageSparseRead 415 416 Sample 144 - 418: 11(fvec4) CompositeExtract 417 1 - Store 13(texel) 418 - 419: 6(int) CompositeExtract 417 0 - 420: 6(int) Load 8(resident) - 421: 6(int) BitwiseOr 420 419 - Store 8(resident) 421 + 373: 35(ResType) ImageSparseGather 360 361 9 ConstOffsets 372 + 374: 11(fvec4) CompositeExtract 373 1 + Store 13(texel) 374 + 375: 6(int) CompositeExtract 373 0 + 376: 6(int) Load 8(resident) + 377: 6(int) BitwiseOr 376 375 + Store 8(resident) 377 + 378: 226 Load 228(is2DArray) + 379: 46(fvec3) Load 48(c3) + 380: 62(ResType) ImageSparseGather 378 379 130 ConstOffsets 372 + 381: 16(ivec4) CompositeExtract 380 1 + Store 18(itexel) 381 + 382: 6(int) CompositeExtract 380 0 + 383: 6(int) Load 8(resident) + 384: 6(int) BitwiseOr 383 382 + Store 8(resident) 384 + 385: 292 Load 294(s2DRectShadow) + 386: 31(fvec2) Load 33(c2) + 387: 35(ResType) ImageSparseDrefGather 385 386 50 ConstOffsets 372 + 388: 11(fvec4) CompositeExtract 387 1 + Store 13(texel) 388 + 389: 6(int) CompositeExtract 387 0 + 390: 6(int) Load 8(resident) + 391: 6(int) BitwiseOr 390 389 + Store 8(resident) 391 + 395: 392 Load 394(i2D) + 398: 143(ivec2) Load 397(ic2) + 399: 35(ResType) ImageSparseRead 395 398 + 400: 11(fvec4) CompositeExtract 399 1 + Store 13(texel) 400 + 401: 6(int) CompositeExtract 399 0 + 402: 6(int) Load 8(resident) + 403: 6(int) BitwiseOr 402 401 + Store 8(resident) 403 + 407: 404 Load 406(ii3D) + 410: 129(ivec3) Load 409(ic3) + 411: 62(ResType) ImageSparseRead 407 410 + 412: 16(ivec4) CompositeExtract 411 1 + Store 18(itexel) 412 + 413: 6(int) CompositeExtract 411 0 + 414: 6(int) Load 8(resident) + 415: 6(int) BitwiseOr 414 413 + Store 8(resident) 415 + 419: 416 Load 418(i2DMS) + 420: 143(ivec2) Load 397(ic2) + 421: 35(ResType) ImageSparseRead 419 420 Sample 144 + 422: 11(fvec4) CompositeExtract 421 1 + Store 13(texel) 422 + 423: 6(int) CompositeExtract 421 0 424: 6(int) Load 8(resident) - 426: 425(bool) ImageSparseTexelsResident 424 - SelectionMerge 429 None - BranchConditional 426 428 431 - 428: Label - 430: 11(fvec4) Load 13(texel) - Store 427 430 - Branch 429 - 431: Label - 432: 16(ivec4) Load 18(itexel) - 433: 11(fvec4) ConvertSToF 432 - 434: 21(ivec4) Load 23(utexel) - 435: 11(fvec4) ConvertUToF 434 - 436: 11(fvec4) FAdd 433 435 - Store 427 436 - Branch 429 - 429: Label - 437: 11(fvec4) Load 427 - Store 423(outColor) 437 + 425: 6(int) BitwiseOr 424 423 + Store 8(resident) 425 + 428: 6(int) Load 8(resident) + 430: 429(bool) ImageSparseTexelsResident 428 + SelectionMerge 433 None + BranchConditional 430 432 435 + 432: Label + 434: 11(fvec4) Load 13(texel) + Store 431 434 + Branch 433 + 435: Label + 436: 16(ivec4) Load 18(itexel) + 437: 11(fvec4) ConvertSToF 436 + 438: 21(ivec4) Load 23(utexel) + 439: 11(fvec4) ConvertUToF 438 + 440: 11(fvec4) FAdd 437 439 + Store 431 440 + Branch 433 + 433: Label + 441: 11(fvec4) Load 431 + Store 427(outColor) 441 Return FunctionEnd diff --git a/Test/spv.float16Fetch.frag b/Test/spv.float16Fetch.frag index b1ba98c8a8..eeda1dd5ef 100644 --- a/Test/spv.float16Fetch.frag +++ b/Test/spv.float16Fetch.frag @@ -889,19 +889,20 @@ f16vec4 testSparseTextureGatherOffset() f16vec4 testSparseTextureGatherOffsets() { f16vec4 texel = f16vec4(0.0hf); - - sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel, 0); - sparseTextureGatherOffsetsARB(s2D, f16c2, offsets, texel, 0, f16bias); - sparseTextureGatherOffsetsARB(s2DArray, c3, offsets, texel, 0); - sparseTextureGatherOffsetsARB(s2DArray, f16c3, offsets, texel, 0, f16bias); - sparseTextureGatherOffsetsARB(s2DRect, c2, offsets, texel, 0); - sparseTextureGatherOffsetsARB(s2DRect, f16c2, offsets, texel, 0); - sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, offsets, texel); - sparseTextureGatherOffsetsARB(s2DShadow, f16c2, compare, offsets, texel); - sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, offsets, texel); - sparseTextureGatherOffsetsARB(s2DArrayShadow, f16c3, compare, offsets, texel); - sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, offsets, texel); - sparseTextureGatherOffsetsARB(s2DRectShadow, f16c2, compare, offsets, texel); + const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); + + sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel, 0); + sparseTextureGatherOffsetsARB(s2D, f16c2, constOffsets, texel, 0, f16bias); + sparseTextureGatherOffsetsARB(s2DArray, c3, constOffsets, texel, 0); + sparseTextureGatherOffsetsARB(s2DArray, f16c3, constOffsets, texel, 0, f16bias); + sparseTextureGatherOffsetsARB(s2DRect, c2, constOffsets, texel, 0); + sparseTextureGatherOffsetsARB(s2DRect, f16c2, constOffsets, texel, 0); + sparseTextureGatherOffsetsARB(s2DShadow, c2, compare, constOffsets, texel); + sparseTextureGatherOffsetsARB(s2DShadow, f16c2, compare, constOffsets, texel); + sparseTextureGatherOffsetsARB(s2DArrayShadow, c3, compare, constOffsets, texel); + sparseTextureGatherOffsetsARB(s2DArrayShadow, f16c3, compare, constOffsets, texel); + sparseTextureGatherOffsetsARB(s2DRectShadow, c2, compare, constOffsets, texel); + sparseTextureGatherOffsetsARB(s2DRectShadow, f16c2, compare, constOffsets, texel); return texel; } diff --git a/Test/spv.sparseTexture.frag b/Test/spv.sparseTexture.frag index c995ee2ae5..50ea2725ca 100644 --- a/Test/spv.sparseTexture.frag +++ b/Test/spv.sparseTexture.frag @@ -27,8 +27,6 @@ in vec4 c4; in flat ivec2 ic2; in flat ivec3 ic3; -in flat ivec2 offsets[4]; - out vec4 outColor; void main() @@ -79,9 +77,10 @@ void main() resident |= sparseTextureGatherOffsetARB(is2DArray, c3, ivec2(5), itexel, 2); resident |= sparseTextureGatherOffsetARB(s2DRectShadow, c2, 2.0, ivec2(7), texel); - resident |= sparseTextureGatherOffsetsARB(s2D, c2, offsets, texel); - resident |= sparseTextureGatherOffsetsARB(is2DArray, c3, offsets, itexel, 2); - resident |= sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, offsets, texel); + const ivec2 constOffsets[4] = ivec2[4](ivec2(1,2), ivec2(3,4), ivec2(15,16), ivec2(-2,0)); + resident |= sparseTextureGatherOffsetsARB(s2D, c2, constOffsets, texel); + resident |= sparseTextureGatherOffsetsARB(is2DArray, c3, constOffsets, itexel, 2); + resident |= sparseTextureGatherOffsetsARB(s2DRectShadow, c2, 2.0, constOffsets, texel); resident |= sparseImageLoadARB(i2D, ic2, texel); resident |= sparseImageLoadARB(ii3D, ic3, itexel); diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 550fce6797..9e08b14a36 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2096,7 +2096,13 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan profileRequires(loc, ~EEsProfile, 450, nullptr, feature); requireExtensions(loc, 1, &E_GL_AMD_texture_gather_bias_lod, feature); } - + // As per GL_ARB_sparse_texture2 extension "Offsets" parameter must be constant integral expression + // for sparseTextureGatherOffsetsARB just as textureGatherOffsets + if (callNode.getOp() == EOpSparseTextureGatherOffsets) { + int offsetsArg = arg0->getType().getSampler().shadow ? 3 : 2; + if (!(*argp)[offsetsArg]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "offsets", ""); + } break; } From 7fbaca0d0697a46149365f95ecb0577b0a27c978 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 31 Mar 2021 15:24:48 -0600 Subject: [PATCH 138/365] Fix SPIR-V for HLSL EvaluateAttribute* of interpolants in structs Generate load of interpolant for first operand to GLSLstd450 InterpolateAt* SPIR-V ops. This allows the interpolants to propagate from the input struct in the wrapper around main into the shader during HLSL legalization. A new pass has been added to legalization which will remove the load and replace with the pointer of the load to create valid external interpolate op. Fixes #2584 --- SPIRV/GlslangToSpv.cpp | 11 +- SPIRV/SpvTools.cpp | 1 + .../hlsl.intrinsics.evalfns.frag.out | 110 +++++++ .../hlsl.intrinsics.evalfns.frag.out | 287 ------------------ Test/hlsl.intrinsics.evalfns.frag | 35 ++- glslang/HLSL/hlslParseHelper.cpp | 16 +- gtests/Hlsl.FromFile.cpp | 2 +- known_good.json | 4 +- 8 files changed, 162 insertions(+), 304 deletions(-) create mode 100644 Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out delete mode 100644 Test/baseResults/hlsl.intrinsics.evalfns.frag.out diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 9137cc0b35..81aacd1121 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2301,7 +2301,8 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI if (node->getOp() == glslang::EOpAtomicCounterIncrement || node->getOp() == glslang::EOpAtomicCounterDecrement || node->getOp() == glslang::EOpAtomicCounter || - node->getOp() == glslang::EOpInterpolateAtCentroid || + (node->getOp() == glslang::EOpInterpolateAtCentroid && + glslangIntermediate->getSource() != glslang::EShSourceHlsl) || node->getOp() == glslang::EOpRayQueryProceed || node->getOp() == glslang::EOpRayQueryGetRayTMin || node->getOp() == glslang::EOpRayQueryGetRayFlags || @@ -2977,7 +2978,13 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpInterpolateAtOffset: case glslang::EOpInterpolateAtVertex: if (arg == 0) { - lvalue = true; + // If GLSL, use the address of the interpolant argument. + // If HLSL, use an internal version of OpInterolates that takes + // the rvalue of the interpolant. A fixup pass in spirv-opt + // legalization will remove the OpLoad and convert to an lvalue. + // Had to do this because legalization will only propagate a + // builtin into an rvalue. + lvalue = glslangIntermediate->getSource() != glslang::EShSourceHlsl; // Does it need a swizzle inversion? If so, evaluation is inverted; // operate first on the swizzle base, then apply the swizzle. diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 5cfc4262d9..8acf9b139a 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -207,6 +207,7 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); optimizer.RegisterPass(spvtools::CreateVectorDCEPass()); optimizer.RegisterPass(spvtools::CreateDeadInsertElimPass()); + optimizer.RegisterPass(spvtools::CreateInterpolateFixupPass()); if (options->optimizeSize) { optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass()); } diff --git a/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out new file mode 100644 index 0000000000..564f0f4cf8 --- /dev/null +++ b/Test/baseLegalResults/hlsl.intrinsics.evalfns.frag.out @@ -0,0 +1,110 @@ +hlsl.intrinsics.evalfns.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 274 + + Capability Shader + Capability InterpolationFunction + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 138 142 146 150 154 157 161 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 138 "inF1" + Name 142 "inF2" + Name 146 "inF3" + Name 150 "inF4" + Name 154 "inI2" + Name 157 "i.vPos" + Name 161 "@entryPointOutput" + Decorate 138(inF1) Location 0 + Decorate 142(inF2) Location 1 + Decorate 146(inF3) Location 2 + Decorate 150(inF4) Location 3 + Decorate 154(inI2) Flat + Decorate 154(inI2) Location 4 + Decorate 157(i.vPos) Location 5 + Decorate 161(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 8: TypeVector 6(float) 2 + 10: TypeVector 6(float) 3 + 12: TypeVector 6(float) 4 + 14: TypeInt 32 1 + 15: TypeVector 14(int) 2 + 30: 6(float) Constant 3204448256 + 31: 6(float) Constant 3179282432 + 32: 8(fvec2) ConstantComposite 30 31 + 36: 6(float) Constant 0 + 37: 6(float) Constant 1031798784 + 38: 8(fvec2) ConstantComposite 36 37 + 42: 6(float) Constant 1044381696 + 43: 6(float) Constant 3200253952 + 44: 8(fvec2) ConstantComposite 42 43 + 48: 6(float) Constant 1054867456 + 49: 8(fvec2) ConstantComposite 48 30 + 53: 14(int) Constant 28 + 64: TypeInt 32 0 + 65: 64(int) Constant 3 + 137: TypePointer Input 6(float) + 138(inF1): 137(ptr) Variable Input + 141: TypePointer Input 8(fvec2) + 142(inF2): 141(ptr) Variable Input + 145: TypePointer Input 10(fvec3) + 146(inF3): 145(ptr) Variable Input + 149: TypePointer Input 12(fvec4) + 150(inF4): 149(ptr) Variable Input + 153: TypePointer Input 15(ivec2) + 154(inI2): 153(ptr) Variable Input + 157(i.vPos): 141(ptr) Variable Input + 160: TypePointer Output 12(fvec4) +161(@entryPointOutput): 160(ptr) Variable Output + 273: 15(ivec2) ConstantComposite 53 53 + 4(main): 2 Function None 3 + 5: Label + 155: 15(ivec2) Load 154(inI2) + 183: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 138(inF1) 32 + 185: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 142(inF2) 38 + 187: 10(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 146(inF3) 44 + 189: 12(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 150(inF4) 49 + 193: 15(ivec2) ShiftLeftLogical 155 273 + 195: 15(ivec2) ShiftRightArithmetic 193 273 + 196: 8(fvec2) ConvertSToF 195 + 197: 8(fvec2) VectorTimesScalar 196 37 + 198: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 138(inF1) 197 + 200: 6(float) FAdd 183 198 + 202: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 138(inF1) 65 + 204: 6(float) FAdd 200 202 + 206: 8(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 142(inF2) 65 + 208: 8(fvec2) FAdd 185 206 + 210: 10(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 146(inF3) 65 + 212: 10(fvec3) FAdd 187 210 + 214: 12(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 150(inF4) 65 + 216: 12(fvec4) FAdd 189 214 + 219: 14(int) CompositeExtract 155 0 + 220: 64(int) Bitcast 219 + 221: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 138(inF1) 220 + 223: 6(float) FAdd 204 221 + 225: 6(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 138(inF1) + 227: 6(float) FAdd 223 225 + 229: 8(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 142(inF2) + 231: 8(fvec2) FAdd 208 229 + 233: 10(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 146(inF3) + 235: 10(fvec3) FAdd 212 233 + 237: 12(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 150(inF4) + 239: 12(fvec4) FAdd 216 237 + 242: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 157(i.vPos) 38 + 244: 8(fvec2) FAdd 231 242 + 247: 8(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 157(i.vPos) 65 + 249: 8(fvec2) FAdd 244 247 + 252: 8(fvec2) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 157(i.vPos) + 254: 8(fvec2) FAdd 249 252 + 257: 6(float) CompositeExtract 254 1 + 259: 6(float) CompositeExtract 235 2 + 261: 6(float) CompositeExtract 239 3 + 262: 12(fvec4) CompositeConstruct 227 257 259 261 + Store 161(@entryPointOutput) 262 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out b/Test/baseResults/hlsl.intrinsics.evalfns.frag.out deleted file mode 100644 index 502ad0f00e..0000000000 --- a/Test/baseResults/hlsl.intrinsics.evalfns.frag.out +++ /dev/null @@ -1,287 +0,0 @@ -hlsl.intrinsics.evalfns.frag -Shader version: 500 -gl_FragCoord origin is upper left -0:? Sequence -0:3 Function Definition: @main(f1;vf2;vf3;vf4;vi2; ( temp void) -0:3 Function Parameters: -0:3 'inF1' ( in float) -0:3 'inF2' ( in 2-component vector of float) -0:3 'inF3' ( in 3-component vector of float) -0:3 'inF4' ( in 4-component vector of float) -0:3 'inI2' ( in 2-component vector of int) -0:? Sequence -0:4 interpolateAtOffset ( temp float) -0:4 'inF1' ( in float) -0:? Constant: -0:? -0.500000 -0:? -0.062500 -0:5 interpolateAtOffset ( temp 2-component vector of float) -0:5 'inF2' ( in 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.062500 -0:6 interpolateAtOffset ( temp 3-component vector of float) -0:6 'inF3' ( in 3-component vector of float) -0:? Constant: -0:? 0.187500 -0:? -0.375000 -0:7 interpolateAtOffset ( temp 4-component vector of float) -0:7 'inF4' ( in 4-component vector of float) -0:? Constant: -0:? 0.437500 -0:? -0.500000 -0:9 interpolateAtOffset ( temp float) -0:9 'inF1' ( in float) -0:9 vector-scale ( temp 2-component vector of float) -0:9 Convert int to float ( temp 2-component vector of float) -0:9 right-shift ( temp 2-component vector of int) -0:9 left-shift ( temp 2-component vector of int) -0:9 'inI2' ( in 2-component vector of int) -0:9 Constant: -0:9 28 (const int) -0:9 Constant: -0:9 28 (const int) -0:9 Constant: -0:9 0.062500 -0:3 Function Definition: main( ( temp void) -0:3 Function Parameters: -0:? Sequence -0:3 move second child to first child ( temp float) -0:? 'inF1' ( temp float) -0:? 'inF1' (layout( location=0) in float) -0:3 move second child to first child ( temp 2-component vector of float) -0:? 'inF2' ( temp 2-component vector of float) -0:? 'inF2' (layout( location=1) in 2-component vector of float) -0:3 move second child to first child ( temp 3-component vector of float) -0:? 'inF3' ( temp 3-component vector of float) -0:? 'inF3' (layout( location=2) in 3-component vector of float) -0:3 move second child to first child ( temp 4-component vector of float) -0:? 'inF4' ( temp 4-component vector of float) -0:? 'inF4' (layout( location=3) in 4-component vector of float) -0:3 move second child to first child ( temp 2-component vector of int) -0:? 'inI2' ( temp 2-component vector of int) -0:? 'inI2' (layout( location=4) flat in 2-component vector of int) -0:3 Function Call: @main(f1;vf2;vf3;vf4;vi2; ( temp void) -0:? 'inF1' ( temp float) -0:? 'inF2' ( temp 2-component vector of float) -0:? 'inF3' ( temp 3-component vector of float) -0:? 'inF4' ( temp 4-component vector of float) -0:? 'inI2' ( temp 2-component vector of int) -0:? Linker Objects -0:? 'inF1' (layout( location=0) in float) -0:? 'inF2' (layout( location=1) in 2-component vector of float) -0:? 'inF3' (layout( location=2) in 3-component vector of float) -0:? 'inF4' (layout( location=3) in 4-component vector of float) -0:? 'inI2' (layout( location=4) flat in 2-component vector of int) - - -Linked fragment stage: - - -Shader version: 500 -gl_FragCoord origin is upper left -0:? Sequence -0:3 Function Definition: @main(f1;vf2;vf3;vf4;vi2; ( temp void) -0:3 Function Parameters: -0:3 'inF1' ( in float) -0:3 'inF2' ( in 2-component vector of float) -0:3 'inF3' ( in 3-component vector of float) -0:3 'inF4' ( in 4-component vector of float) -0:3 'inI2' ( in 2-component vector of int) -0:? Sequence -0:4 interpolateAtOffset ( temp float) -0:4 'inF1' ( in float) -0:? Constant: -0:? -0.500000 -0:? -0.062500 -0:5 interpolateAtOffset ( temp 2-component vector of float) -0:5 'inF2' ( in 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.062500 -0:6 interpolateAtOffset ( temp 3-component vector of float) -0:6 'inF3' ( in 3-component vector of float) -0:? Constant: -0:? 0.187500 -0:? -0.375000 -0:7 interpolateAtOffset ( temp 4-component vector of float) -0:7 'inF4' ( in 4-component vector of float) -0:? Constant: -0:? 0.437500 -0:? -0.500000 -0:9 interpolateAtOffset ( temp float) -0:9 'inF1' ( in float) -0:9 vector-scale ( temp 2-component vector of float) -0:9 Convert int to float ( temp 2-component vector of float) -0:9 right-shift ( temp 2-component vector of int) -0:9 left-shift ( temp 2-component vector of int) -0:9 'inI2' ( in 2-component vector of int) -0:9 Constant: -0:9 28 (const int) -0:9 Constant: -0:9 28 (const int) -0:9 Constant: -0:9 0.062500 -0:3 Function Definition: main( ( temp void) -0:3 Function Parameters: -0:? Sequence -0:3 move second child to first child ( temp float) -0:? 'inF1' ( temp float) -0:? 'inF1' (layout( location=0) in float) -0:3 move second child to first child ( temp 2-component vector of float) -0:? 'inF2' ( temp 2-component vector of float) -0:? 'inF2' (layout( location=1) in 2-component vector of float) -0:3 move second child to first child ( temp 3-component vector of float) -0:? 'inF3' ( temp 3-component vector of float) -0:? 'inF3' (layout( location=2) in 3-component vector of float) -0:3 move second child to first child ( temp 4-component vector of float) -0:? 'inF4' ( temp 4-component vector of float) -0:? 'inF4' (layout( location=3) in 4-component vector of float) -0:3 move second child to first child ( temp 2-component vector of int) -0:? 'inI2' ( temp 2-component vector of int) -0:? 'inI2' (layout( location=4) flat in 2-component vector of int) -0:3 Function Call: @main(f1;vf2;vf3;vf4;vi2; ( temp void) -0:? 'inF1' ( temp float) -0:? 'inF2' ( temp 2-component vector of float) -0:? 'inF3' ( temp 3-component vector of float) -0:? 'inF4' ( temp 4-component vector of float) -0:? 'inI2' ( temp 2-component vector of int) -0:? Linker Objects -0:? 'inF1' (layout( location=0) in float) -0:? 'inF2' (layout( location=1) in 2-component vector of float) -0:? 'inF3' (layout( location=2) in 3-component vector of float) -0:? 'inF4' (layout( location=3) in 4-component vector of float) -0:? 'inI2' (layout( location=4) flat in 2-component vector of int) - -Validation failed -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 80 - - Capability Shader - Capability InterpolationFunction - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 51 55 59 63 67 - ExecutionMode 4 OriginUpperLeft - Source HLSL 500 - Name 4 "main" - Name 23 "@main(f1;vf2;vf3;vf4;vi2;" - Name 18 "inF1" - Name 19 "inF2" - Name 20 "inF3" - Name 21 "inF4" - Name 22 "inI2" - Name 49 "inF1" - Name 51 "inF1" - Name 53 "inF2" - Name 55 "inF2" - Name 57 "inF3" - Name 59 "inF3" - Name 61 "inF4" - Name 63 "inF4" - Name 65 "inI2" - Name 67 "inI2" - Name 69 "param" - Name 71 "param" - Name 73 "param" - Name 75 "param" - Name 77 "param" - Decorate 51(inF1) Location 0 - Decorate 55(inF2) Location 1 - Decorate 59(inF3) Location 2 - Decorate 63(inF4) Location 3 - Decorate 67(inI2) Flat - Decorate 67(inI2) Location 4 - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypePointer Function 6(float) - 8: TypeVector 6(float) 2 - 9: TypePointer Function 8(fvec2) - 10: TypeVector 6(float) 3 - 11: TypePointer Function 10(fvec3) - 12: TypeVector 6(float) 4 - 13: TypePointer Function 12(fvec4) - 14: TypeInt 32 1 - 15: TypeVector 14(int) 2 - 16: TypePointer Function 15(ivec2) - 17: TypeFunction 2 7(ptr) 9(ptr) 11(ptr) 13(ptr) 16(ptr) - 25: 6(float) Constant 3204448256 - 26: 6(float) Constant 3179282432 - 27: 8(fvec2) ConstantComposite 25 26 - 29: 6(float) Constant 0 - 30: 6(float) Constant 1031798784 - 31: 8(fvec2) ConstantComposite 29 30 - 33: 6(float) Constant 1044381696 - 34: 6(float) Constant 3200253952 - 35: 8(fvec2) ConstantComposite 33 34 - 37: 6(float) Constant 1054867456 - 38: 8(fvec2) ConstantComposite 37 25 - 41: 14(int) Constant 28 - 50: TypePointer Input 6(float) - 51(inF1): 50(ptr) Variable Input - 54: TypePointer Input 8(fvec2) - 55(inF2): 54(ptr) Variable Input - 58: TypePointer Input 10(fvec3) - 59(inF3): 58(ptr) Variable Input - 62: TypePointer Input 12(fvec4) - 63(inF4): 62(ptr) Variable Input - 66: TypePointer Input 15(ivec2) - 67(inI2): 66(ptr) Variable Input - 4(main): 2 Function None 3 - 5: Label - 49(inF1): 7(ptr) Variable Function - 53(inF2): 9(ptr) Variable Function - 57(inF3): 11(ptr) Variable Function - 61(inF4): 13(ptr) Variable Function - 65(inI2): 16(ptr) Variable Function - 69(param): 7(ptr) Variable Function - 71(param): 9(ptr) Variable Function - 73(param): 11(ptr) Variable Function - 75(param): 13(ptr) Variable Function - 77(param): 16(ptr) Variable Function - 52: 6(float) Load 51(inF1) - Store 49(inF1) 52 - 56: 8(fvec2) Load 55(inF2) - Store 53(inF2) 56 - 60: 10(fvec3) Load 59(inF3) - Store 57(inF3) 60 - 64: 12(fvec4) Load 63(inF4) - Store 61(inF4) 64 - 68: 15(ivec2) Load 67(inI2) - Store 65(inI2) 68 - 70: 6(float) Load 49(inF1) - Store 69(param) 70 - 72: 8(fvec2) Load 53(inF2) - Store 71(param) 72 - 74: 10(fvec3) Load 57(inF3) - Store 73(param) 74 - 76: 12(fvec4) Load 61(inF4) - Store 75(param) 76 - 78: 15(ivec2) Load 65(inI2) - Store 77(param) 78 - 79: 2 FunctionCall 23(@main(f1;vf2;vf3;vf4;vi2;) 69(param) 71(param) 73(param) 75(param) 77(param) - Return - FunctionEnd -23(@main(f1;vf2;vf3;vf4;vi2;): 2 Function None 17 - 18(inF1): 7(ptr) FunctionParameter - 19(inF2): 9(ptr) FunctionParameter - 20(inF3): 11(ptr) FunctionParameter - 21(inF4): 13(ptr) FunctionParameter - 22(inI2): 16(ptr) FunctionParameter - 24: Label - 28: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 18(inF1) 27 - 32: 8(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 19(inF2) 31 - 36: 10(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 20(inF3) 35 - 39: 12(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 21(inF4) 38 - 40: 15(ivec2) Load 22(inI2) - 42: 15(ivec2) CompositeConstruct 41 41 - 43: 15(ivec2) ShiftLeftLogical 40 42 - 44: 15(ivec2) CompositeConstruct 41 41 - 45: 15(ivec2) ShiftRightArithmetic 43 44 - 46: 8(fvec2) ConvertSToF 45 - 47: 8(fvec2) VectorTimesScalar 46 30 - 48: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 18(inF1) 47 - Return - FunctionEnd diff --git a/Test/hlsl.intrinsics.evalfns.frag b/Test/hlsl.intrinsics.evalfns.frag index 96387068a9..7b7509d8a2 100644 --- a/Test/hlsl.intrinsics.evalfns.frag +++ b/Test/hlsl.intrinsics.evalfns.frag @@ -1,10 +1,33 @@ +struct PS_INPUT +{ + float2 vPos: TEXCOORD0; +}; -void main(float inF1, float2 inF2, float3 inF3, float4 inF4, int2 inI2) : COLOR +float4 main(float inF1, float2 inF2, float3 inF3, float4 inF4, int2 inI2, PS_INPUT i) : COLOR { - EvaluateAttributeSnapped(inF1, int2(8,15)); - EvaluateAttributeSnapped(inF2, int2(0,1)); - EvaluateAttributeSnapped(inF3, int2(3,10)); - EvaluateAttributeSnapped(inF4, int2(7,8)); + float oF1 = EvaluateAttributeSnapped(inF1, int2(8,15)); + float2 oF2 = EvaluateAttributeSnapped(inF2, int2(0,1)); + float3 oF3 = EvaluateAttributeSnapped(inF3, int2(3,10)); + float4 oF4 = EvaluateAttributeSnapped(inF4, int2(7,8)); + + oF1 += EvaluateAttributeSnapped(inF1, inI2); + + oF1 += EvaluateAttributeAtSample(inF1, 3); + oF2 += EvaluateAttributeAtSample(inF2, 3); + oF3 += EvaluateAttributeAtSample(inF3, 3); + oF4 += EvaluateAttributeAtSample(inF4, 3); + + oF1 += EvaluateAttributeAtSample(inF1, inI2.x); + + oF1 += EvaluateAttributeAtCentroid(inF1); + oF2 += EvaluateAttributeAtCentroid(inF2); + oF3 += EvaluateAttributeAtCentroid(inF3); + oF4 += EvaluateAttributeAtCentroid(inF4); + + oF2 += EvaluateAttributeSnapped(i.vPos, int2(0,1)); + oF2 += EvaluateAttributeAtSample(i.vPos, 3); + oF2 += EvaluateAttributeAtCentroid(i.vPos); - EvaluateAttributeSnapped(inF1, inI2); + float4 color = float4(oF1, oF2.y, oF3.z, oF4.w); + return color; } diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index 63dd8e3879..d62f39278e 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -6075,8 +6075,12 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn case EOpInterpolateAtCentroid: case EOpInterpolateAtSample: case EOpInterpolateAtOffset: + // TODO(greg-lunarg): Re-enable this check. It currently gives false errors for builtins + // defined and passed as members of a struct. In this case the storage class is showing to be + // Function. See glslang #2584 + // Make sure the first argument is an interpolant, or an array element of an interpolant - if (arg0->getType().getQualifier().storage != EvqVaryingIn) { + // if (arg0->getType().getQualifier().storage != EvqVaryingIn) { // It might still be an array element. // // We could check more, but the semantics of the first argument are already met; the @@ -6084,11 +6088,11 @@ void HlslParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fn // // ES and desktop 4.3 and earlier: swizzles may not be used // desktop 4.4 and later: swizzles may be used - const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true); - if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn) - error(loc, "first argument must be an interpolant, or interpolant-array element", - fnCandidate.getName().c_str(), ""); - } + // const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true); + // if (base == nullptr || base->getType().getQualifier().storage != EvqVaryingIn) + // error(loc, "first argument must be an interpolant, or interpolant-array element", + // fnCandidate.getName().c_str(), ""); + // } break; default: diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index de071b9f37..33deef5164 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -245,7 +245,6 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.isfinite.frag", "main"}, {"hlsl.intrinsics.barriers.comp", "ComputeShaderFunction"}, {"hlsl.intrinsics.comp", "ComputeShaderFunction"}, - {"hlsl.intrinsics.evalfns.frag", "main"}, {"hlsl.intrinsics.d3dcolortoubyte4.frag", "main"}, {"hlsl.intrinsics.double.frag", "PixelShaderFunction"}, {"hlsl.intrinsics.f1632.frag", "main"}, @@ -471,6 +470,7 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.flattenOpaqueInitMix.vert", "main"}, {"hlsl.flattenSubset.frag", "main"}, {"hlsl.flattenSubset2.frag", "main"}, + {"hlsl.intrinsics.evalfns.frag", "main"}, {"hlsl.partialFlattenLocal.vert", "main"}, {"hlsl.partialFlattenMixed.vert", "main"} }), diff --git a/known_good.json b/known_good.json index 4442f892e4..e69a3ae64d 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "c79edd260c2b503f0eca57310057b4a100999cc5" + "commit" : "48007a5c7f7cc671b391bebd46e87fd6edc6c24b" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "75b30a659c8a4979104986652c54cc421fc51129" + "commit" : "f88a1f98fa7a44ccfcf33d810c72b200e7d9a78a" } ] } From 02132406bc0c75490c2f8fade3c8b2080f0438ef Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 5 Apr 2021 16:49:42 -0600 Subject: [PATCH 139/365] Do not propagate packing qualifiers to scalars or vectors Packing qualifiers have no practical effect on scalars or vectors so this is unnecessary and its confusing tools downstream that consume the AST. --- Test/440.frag | 15 +++++++++++++++ Test/baseResults/440.frag.out | 2 ++ glslang/Include/Types.h | 1 + glslang/MachineIndependent/ParseHelper.cpp | 10 ++++++---- 4 files changed, 24 insertions(+), 4 deletions(-) diff --git a/Test/440.frag b/Test/440.frag index 4eb1a3ffd2..a3ec89de53 100644 --- a/Test/440.frag +++ b/Test/440.frag @@ -151,3 +151,18 @@ int layer() { return gl_Layer; } + +// The std140 layout qualifier should NOT propagate all the way down to +// the vec3. It is unnecessary and it breaks downstream AST consumers, +// notably LunarGlass. + +struct PointLight_t +{ + vec3 vPositionWs ; +} ; + +layout( std140, row_major ) uniform PerViewLightData_t +{ + + PointLight_t g_pointLightData [ 128 ] ; +} ; diff --git a/Test/baseResults/440.frag.out b/Test/baseResults/440.frag.out index 1ac6e7c68b..c7ff72845b 100644 --- a/Test/baseResults/440.frag.out +++ b/Test/baseResults/440.frag.out @@ -118,6 +118,7 @@ ERROR: node is still EOpNull! 0:? 'aconst' ( global 4-element array of int) 0:? 'bconst' ( global 64-element array of int) 0:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 128-element array of structure{ global 3-component vector of float vPositionWs} g_pointLightData}) Linked fragment stage: @@ -162,4 +163,5 @@ ERROR: node is still EOpNull! 0:? 'aconst' ( global 4-element array of int) 0:? 'bconst' ( global 64-element array of int) 0:? 'sampInArray' ( smooth sample in 4-element array of 3-component vector of float) +0:? 'anon@0' (layout( row_major std140) uniform block{layout( row_major std140 offset=0) uniform 128-element array of structure{ global 3-component vector of float vPositionWs} g_pointLightData}) diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 202e69352d..a3815caa0a 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -1738,6 +1738,7 @@ class TType { virtual bool isScalar() const { return ! isVector() && ! isMatrix() && ! isStruct() && ! isArray(); } virtual bool isScalarOrVec1() const { return isScalar() || vector1; } + virtual bool isScalarOrVector() const { return !isMatrix() && !isStruct() && !isArray(); } virtual bool isVector() const { return vectorSize > 1 || vector1; } virtual bool isMatrix() const { return matrixCols ? true : false; } virtual bool isArray() const { return arraySizes != nullptr; } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 9e08b14a36..bc2a38a100 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -8524,8 +8524,8 @@ void TParseContext::fixBlockUniformLayoutMatrix(TQualifier& qualifier, TTypeList } // -// Spread LayoutPacking to block member, if a block member is a struct, we need spread LayoutPacking to -// this struct member too. and keep this rule for recursive. +// Spread LayoutPacking to matrix or aggregate block members. If a block member is a struct or +// array of struct, spread LayoutPacking recursively to its matrix or aggregate members. // void TParseContext::fixBlockUniformLayoutPacking(TQualifier& qualifier, TTypeList* originTypeList, TTypeList* tmpTypeList) @@ -8534,11 +8534,13 @@ void TParseContext::fixBlockUniformLayoutPacking(TQualifier& qualifier, TTypeLis for (unsigned int member = 0; member < originTypeList->size(); ++member) { if (qualifier.layoutPacking != ElpNone) { if (tmpTypeList == nullptr) { - if ((*originTypeList)[member].type->getQualifier().layoutPacking == ElpNone) { + if ((*originTypeList)[member].type->getQualifier().layoutPacking == ElpNone && + !(*originTypeList)[member].type->isScalarOrVector()) { (*originTypeList)[member].type->getQualifier().layoutPacking = qualifier.layoutPacking; } } else { - if ((*tmpTypeList)[member].type->getQualifier().layoutPacking == ElpNone) { + if ((*tmpTypeList)[member].type->getQualifier().layoutPacking == ElpNone && + !(*tmpTypeList)[member].type->isScalarOrVector()) { (*tmpTypeList)[member].type->getQualifier().layoutPacking = qualifier.layoutPacking; } } From 186e66c1a3fcf4eb0a5a1c68d22bfbf31c2a3e86 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 7 Apr 2021 15:20:16 -0600 Subject: [PATCH 140/365] Revert "Update minimum SPIR-V requirement for GL_EXT_buffer_reference" --- Test/baseResults/spv.bufferhandle1.frag.out | 3 +- Test/baseResults/spv.bufferhandle10.frag.out | 3 +- Test/baseResults/spv.bufferhandle11.frag.out | 3 +- Test/baseResults/spv.bufferhandle12.frag.out | 4 +- Test/baseResults/spv.bufferhandle13.frag.out | 3 +- Test/baseResults/spv.bufferhandle14.frag.out | 2 +- Test/baseResults/spv.bufferhandle15.frag.out | 3 +- Test/baseResults/spv.bufferhandle16.frag.out | 2 +- Test/baseResults/spv.bufferhandle18.frag.out | 2 +- Test/baseResults/spv.bufferhandle2.frag.out | 3 +- Test/baseResults/spv.bufferhandle3.frag.out | 3 +- Test/baseResults/spv.bufferhandle4.frag.out | 3 +- Test/baseResults/spv.bufferhandle5.frag.out | 2 +- Test/baseResults/spv.bufferhandle6.frag.out | 3 +- Test/baseResults/spv.bufferhandle7.frag.out | 3 +- Test/baseResults/spv.bufferhandle8.frag.out | 3 +- Test/baseResults/spv.bufferhandle9.frag.out | 3 +- .../spv.bufferhandleUvec2.frag.out | 3 +- Test/baseResults/spv.coopmat.comp.out | 4 +- Test/baseResults/spv.intcoopmat.comp.out | 3 +- glslang/MachineIndependent/Versions.cpp | 7 ++- gtests/Spv.FromFile.cpp | 46 +++++++++---------- 22 files changed, 64 insertions(+), 47 deletions(-) diff --git a/Test/baseResults/spv.bufferhandle1.frag.out b/Test/baseResults/spv.bufferhandle1.frag.out index 68dd483371..b49c129630 100644 --- a/Test/baseResults/spv.bufferhandle1.frag.out +++ b/Test/baseResults/spv.bufferhandle1.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle1.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 52 @@ -7,6 +7,7 @@ spv.bufferhandle1.frag Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT VulkanKHR diff --git a/Test/baseResults/spv.bufferhandle10.frag.out b/Test/baseResults/spv.bufferhandle10.frag.out index a376aefb9a..f9ab60d290 100644 --- a/Test/baseResults/spv.bufferhandle10.frag.out +++ b/Test/baseResults/spv.bufferhandle10.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle10.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 40 @@ -7,6 +7,7 @@ spv.bufferhandle10.frag Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT VulkanKHR diff --git a/Test/baseResults/spv.bufferhandle11.frag.out b/Test/baseResults/spv.bufferhandle11.frag.out index 5d0e3a06ea..9dd1c7b84a 100644 --- a/Test/baseResults/spv.bufferhandle11.frag.out +++ b/Test/baseResults/spv.bufferhandle11.frag.out @@ -2,7 +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;" -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 61 @@ -11,6 +11,7 @@ WARNING: 0:6: '' : all default precisions are highp; use precision statements to Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_8bit_storage" Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle12.frag.out b/Test/baseResults/spv.bufferhandle12.frag.out index b5473488b6..7cd5cb5e4d 100644 --- a/Test/baseResults/spv.bufferhandle12.frag.out +++ b/Test/baseResults/spv.bufferhandle12.frag.out @@ -2,14 +2,16 @@ spv.bufferhandle12.frag WARNING: 0:6: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: "precision mediump int; precision highp float;" -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 183 Capability Shader Capability StorageUniformBufferBlock16 Capability PhysicalStorageBufferAddressesEXT + Extension "SPV_KHR_16bit_storage" Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle13.frag.out b/Test/baseResults/spv.bufferhandle13.frag.out index 491141ac75..5ce24acd38 100644 --- a/Test/baseResults/spv.bufferhandle13.frag.out +++ b/Test/baseResults/spv.bufferhandle13.frag.out @@ -1,11 +1,12 @@ spv.bufferhandle13.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 58 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle14.frag.out b/Test/baseResults/spv.bufferhandle14.frag.out index 5fef7ba0e5..34df7538c9 100644 --- a/Test/baseResults/spv.bufferhandle14.frag.out +++ b/Test/baseResults/spv.bufferhandle14.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle14.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 46 diff --git a/Test/baseResults/spv.bufferhandle15.frag.out b/Test/baseResults/spv.bufferhandle15.frag.out index 5d619e2dcb..ab1b4dbaef 100644 --- a/Test/baseResults/spv.bufferhandle15.frag.out +++ b/Test/baseResults/spv.bufferhandle15.frag.out @@ -2,13 +2,14 @@ spv.bufferhandle15.frag WARNING: 0:16: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: "precision mediump int; precision highp float;" -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 60 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 37 diff --git a/Test/baseResults/spv.bufferhandle16.frag.out b/Test/baseResults/spv.bufferhandle16.frag.out index 14f960990a..a9d9dcf265 100644 --- a/Test/baseResults/spv.bufferhandle16.frag.out +++ b/Test/baseResults/spv.bufferhandle16.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle16.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 48 diff --git a/Test/baseResults/spv.bufferhandle18.frag.out b/Test/baseResults/spv.bufferhandle18.frag.out index ea4061d63b..59ad6d02be 100644 --- a/Test/baseResults/spv.bufferhandle18.frag.out +++ b/Test/baseResults/spv.bufferhandle18.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle18.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 196 diff --git a/Test/baseResults/spv.bufferhandle2.frag.out b/Test/baseResults/spv.bufferhandle2.frag.out index 32c8e18a8c..e20f3b7f2b 100644 --- a/Test/baseResults/spv.bufferhandle2.frag.out +++ b/Test/baseResults/spv.bufferhandle2.frag.out @@ -1,11 +1,12 @@ spv.bufferhandle2.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 45 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle3.frag.out b/Test/baseResults/spv.bufferhandle3.frag.out index 429a857e27..65ad1ca6fa 100644 --- a/Test/baseResults/spv.bufferhandle3.frag.out +++ b/Test/baseResults/spv.bufferhandle3.frag.out @@ -1,11 +1,12 @@ spv.bufferhandle3.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 50 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 42 diff --git a/Test/baseResults/spv.bufferhandle4.frag.out b/Test/baseResults/spv.bufferhandle4.frag.out index a441f7bf83..e06bca4e8b 100644 --- a/Test/baseResults/spv.bufferhandle4.frag.out +++ b/Test/baseResults/spv.bufferhandle4.frag.out @@ -1,11 +1,12 @@ spv.bufferhandle4.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 61 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle5.frag.out b/Test/baseResults/spv.bufferhandle5.frag.out index ebd922c6c3..bf4d3a2ab3 100644 --- a/Test/baseResults/spv.bufferhandle5.frag.out +++ b/Test/baseResults/spv.bufferhandle5.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle5.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 22 diff --git a/Test/baseResults/spv.bufferhandle6.frag.out b/Test/baseResults/spv.bufferhandle6.frag.out index 9367d90937..abc9187c84 100644 --- a/Test/baseResults/spv.bufferhandle6.frag.out +++ b/Test/baseResults/spv.bufferhandle6.frag.out @@ -1,11 +1,12 @@ spv.bufferhandle6.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 165 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 154 diff --git a/Test/baseResults/spv.bufferhandle7.frag.out b/Test/baseResults/spv.bufferhandle7.frag.out index 65903c2d77..4282a3622c 100644 --- a/Test/baseResults/spv.bufferhandle7.frag.out +++ b/Test/baseResults/spv.bufferhandle7.frag.out @@ -1,11 +1,12 @@ spv.bufferhandle7.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 24 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle8.frag.out b/Test/baseResults/spv.bufferhandle8.frag.out index d3725d4e6c..65d4665324 100644 --- a/Test/baseResults/spv.bufferhandle8.frag.out +++ b/Test/baseResults/spv.bufferhandle8.frag.out @@ -1,11 +1,12 @@ spv.bufferhandle8.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 27 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" diff --git a/Test/baseResults/spv.bufferhandle9.frag.out b/Test/baseResults/spv.bufferhandle9.frag.out index 24dcc4ad26..1e5091c2ef 100644 --- a/Test/baseResults/spv.bufferhandle9.frag.out +++ b/Test/baseResults/spv.bufferhandle9.frag.out @@ -1,5 +1,5 @@ spv.bufferhandle9.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 56 @@ -7,6 +7,7 @@ spv.bufferhandle9.frag Capability Int64 Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 16 19 diff --git a/Test/baseResults/spv.bufferhandleUvec2.frag.out b/Test/baseResults/spv.bufferhandleUvec2.frag.out index 2d4d279e8c..fbdbb6aa30 100644 --- a/Test/baseResults/spv.bufferhandleUvec2.frag.out +++ b/Test/baseResults/spv.bufferhandleUvec2.frag.out @@ -1,11 +1,12 @@ spv.bufferhandleUvec2.frag -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 71 Capability Shader Capability PhysicalStorageBufferAddressesEXT Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" 1: ExtInstImport "GLSL.std.450" MemoryModel PhysicalStorageBuffer64EXT GLSL450 EntryPoint Fragment 4 "main" 16 19 diff --git a/Test/baseResults/spv.coopmat.comp.out b/Test/baseResults/spv.coopmat.comp.out index 16e0c7641c..0a609df18a 100644 --- a/Test/baseResults/spv.coopmat.comp.out +++ b/Test/baseResults/spv.coopmat.comp.out @@ -1,5 +1,5 @@ spv.coopmat.comp -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 228 @@ -9,7 +9,9 @@ spv.coopmat.comp Capability VulkanMemoryModelKHR Capability PhysicalStorageBufferAddressesEXT Capability CooperativeMatrixNV + Extension "SPV_KHR_16bit_storage" Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" Extension "SPV_NV_cooperative_matrix" 1: ExtInstImport "GLSL.std.450" diff --git a/Test/baseResults/spv.intcoopmat.comp.out b/Test/baseResults/spv.intcoopmat.comp.out index 6ea7127136..6a69743234 100644 --- a/Test/baseResults/spv.intcoopmat.comp.out +++ b/Test/baseResults/spv.intcoopmat.comp.out @@ -1,5 +1,5 @@ spv.intcoopmat.comp -// Module Version 10300 +// Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 262 @@ -12,6 +12,7 @@ spv.intcoopmat.comp Capability CooperativeMatrixNV Extension "SPV_KHR_8bit_storage" Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" Extension "SPV_KHR_vulkan_memory_model" Extension "SPV_NV_cooperative_matrix" 1: ExtInstImport "GLSL.std.450" diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 804cf2fb65..7554bfd769 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -165,13 +165,12 @@ void TParseVersions::initializeExtensionBehavior() EShTargetLanguageVersion minSpvVersion; } extensionData; - const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4}, - {E_GL_EXT_buffer_reference, EShTargetSpv_1_3} }; + const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4} }; for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) { // Add only extensions which require > spv1.0 to save space in map if (exts[ii].minSpvVersion > EShTargetSpv_1_0) { - extensionMinSpv[exts[ii].extensionName] = exts[ii].minSpvVersion; + extensionMinSpv[E_GL_EXT_ray_tracing] = exts[ii].minSpvVersion; } } @@ -876,7 +875,7 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co checkExtensionStage(getCurrentLoc(), extension); // check if extension has additional requirements - extensionRequires(getCurrentLoc(), extension, behaviorString); + extensionRequires(getCurrentLoc(), extension ,behaviorString); // update the requested extension updateExtensionBehavior(extension, behavior); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index af301ad793..5456fb8934 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -289,6 +289,27 @@ INSTANTIATE_TEST_SUITE_P( "spv.bool.vert", "spv.boolInBlock.frag", "spv.branch-return.vert", + "spv.bufferhandle1.frag", + "spv.bufferhandle10.frag", + "spv.bufferhandle11.frag", + "spv.bufferhandle12.frag", + "spv.bufferhandle13.frag", + "spv.bufferhandle14.frag", + "spv.bufferhandle15.frag", + "spv.bufferhandle16.frag", + "spv.bufferhandle17_Errors.frag", + "spv.bufferhandle18.frag", + "spv.bufferhandle19_Errors.frag", + "spv.bufferhandle2.frag", + "spv.bufferhandle3.frag", + "spv.bufferhandle4.frag", + "spv.bufferhandle5.frag", + "spv.bufferhandle6.frag", + "spv.bufferhandle7.frag", + "spv.bufferhandle8.frag", + "spv.bufferhandle9.frag", + "spv.bufferhandleUvec2.frag", + "spv.bufferhandle_Error.frag", "spv.builtInXFB.vert", "spv.conditionalDemote.frag", "spv.conditionalDiscard.frag", @@ -297,6 +318,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.constConstruct.vert", "spv.controlFlowAttributes.frag", "spv.conversion.frag", + "spv.coopmat.comp", "spv.coopmat_Error.comp", "spv.dataOut.frag", "spv.dataOutIndirect.frag", @@ -331,6 +353,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.GeometryShaderPassthrough.geom", "spv.interpOps.frag", "spv.int64.frag", + "spv.intcoopmat.comp", "spv.intOps.vert", "spv.layer.tese", "spv.layoutNested.vert", @@ -470,28 +493,6 @@ INSTANTIATE_TEST_SUITE_P( "spv.1.3.8bitstorage-ubo.vert", "spv.1.3.8bitstorage-ssbo.vert", "spv.1.3.coopmat.comp", - "spv.bufferhandle1.frag", - "spv.bufferhandle10.frag", - "spv.bufferhandle11.frag", - "spv.bufferhandle12.frag", - "spv.bufferhandle13.frag", - "spv.bufferhandle14.frag", - "spv.bufferhandle15.frag", - "spv.bufferhandle16.frag", - "spv.bufferhandle17_Errors.frag", - "spv.bufferhandle18.frag", - "spv.bufferhandle19_Errors.frag", - "spv.bufferhandle2.frag", - "spv.bufferhandle3.frag", - "spv.bufferhandle4.frag", - "spv.bufferhandle5.frag", - "spv.bufferhandle6.frag", - "spv.bufferhandle7.frag", - "spv.bufferhandle8.frag", - "spv.bufferhandle9.frag", - "spv.bufferhandleUvec2.frag", - "spv.bufferhandle_Error.frag", - "spv.coopmat.comp", "spv.deviceGroup.frag", "spv.drawParams.vert", "spv.int8.frag", @@ -500,7 +501,6 @@ INSTANTIATE_TEST_SUITE_P( "spv.explicittypes.frag", "spv.float32.frag", "spv.float64.frag", - "spv.intcoopmat.comp", "spv.memoryScopeSemantics.comp", "spv.memoryScopeSemantics_Error.comp", "spv.multiView.frag", From 3549cd6ec212f4cd41708350aa629bc71dd11a3e Mon Sep 17 00:00:00 2001 From: Krzysztof Pilch Date: Thu, 8 Apr 2021 16:33:29 +0200 Subject: [PATCH 141/365] Removed condition for glslang-default-resource-limits instalation. This way the limits are available to clients that links statically. --- StandAlone/CMakeLists.txt | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index bff9ab617a..30326516e4 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -98,9 +98,7 @@ if(ENABLE_GLSLANG_INSTALL) install(EXPORT spirv-remapTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() - if(BUILD_SHARED_LIBS) - install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) - endif() + install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif(ENABLE_GLSLANG_INSTALL) From cb2287751f04328e8b1c69e6e294d77f344435a8 Mon Sep 17 00:00:00 2001 From: Nicholas Barlow Date: Wed, 7 Apr 2021 16:08:17 -0700 Subject: [PATCH 142/365] Add setter for TInterimSelection.condition --- glslang/Include/intermediate.h | 1 + 1 file changed, 1 insertion(+) diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 1440c205ec..6b2fbd1042 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1675,6 +1675,7 @@ class TIntermSelection : public TIntermTyped { flatten(false), dontFlatten(false) {} virtual void traverse(TIntermTraverser*); virtual TIntermTyped* getCondition() const { return condition; } + virtual void setCondition(TIntermTyped* c) { condition = c; }; virtual TIntermNode* getTrueBlock() const { return trueBlock; } virtual TIntermNode* getFalseBlock() const { return falseBlock; } virtual TIntermSelection* getAsSelectionNode() { return this; } From bb9746ae2d6e5d4ef35f9e972aba8958ec24e82f Mon Sep 17 00:00:00 2001 From: Krzysztof Pilch Date: Fri, 9 Apr 2021 16:20:01 +0200 Subject: [PATCH 143/365] Fixed CMake configuration for resource-limits library. --- StandAlone/CMakeLists.txt | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 30326516e4..751d1cd715 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -98,7 +98,14 @@ if(ENABLE_GLSLANG_INSTALL) install(EXPORT spirv-remapTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() - install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + if(BUILD_SHARED_LIBS) + install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) + else() + install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + endif() install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif(ENABLE_GLSLANG_INSTALL) From 4b900778c3699924978df8611fb79c8b8618b0d3 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Fri, 9 Apr 2021 16:37:20 -0600 Subject: [PATCH 144/365] Issue error when declaration rule fails Fix #2514. --- Test/baseResults/hlsl.includeNegative.vert.out | 3 ++- glslang/HLSL/hlslGrammar.cpp | 4 +++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/Test/baseResults/hlsl.includeNegative.vert.out b/Test/baseResults/hlsl.includeNegative.vert.out index 5faa383fec..67bf41c7cc 100644 --- a/Test/baseResults/hlsl.includeNegative.vert.out +++ b/Test/baseResults/hlsl.includeNegative.vert.out @@ -3,8 +3,9 @@ ERROR: ./foo.h:1: '#error' : should not be included ERROR: ./inc2/../foo.h:1: '#error' : should not be included ERROR: ./parentBad:3: '#error' : bad parent ERROR: hlsl.includeNegative.vert:7: '#error' : in main +ERROR: hlsl.includeNegative.vert:6: 'declaration' : Expected hlsl.includeNegative.vert(8): error at column 0, HLSL parsing failed. -ERROR: 5 compilation errors. No code generated. +ERROR: 6 compilation errors. No code generated. SPIR-V is not generated for failed compile or link diff --git a/glslang/HLSL/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp index f30c64097c..df1625e001 100644 --- a/glslang/HLSL/hlslGrammar.cpp +++ b/glslang/HLSL/hlslGrammar.cpp @@ -161,8 +161,10 @@ bool HlslGrammar::acceptDeclarationList(TIntermNode*& nodeList) return true; // declaration - if (! acceptDeclaration(nodeList)) + if (! acceptDeclaration(nodeList)) { + expected("declaration"); return false; + } } while (true); return true; From 634ba4743d6b5d4eeff8558604d62904ad5a6da8 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Fri, 9 Apr 2021 17:00:40 -0600 Subject: [PATCH 145/365] Fix table key and whitespace These got lost in the wash with my last revert but are still relevant. --- glslang/MachineIndependent/Versions.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 7554bfd769..94fe1ab44e 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -170,7 +170,7 @@ void TParseVersions::initializeExtensionBehavior() for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) { // Add only extensions which require > spv1.0 to save space in map if (exts[ii].minSpvVersion > EShTargetSpv_1_0) { - extensionMinSpv[E_GL_EXT_ray_tracing] = exts[ii].minSpvVersion; + extensionMinSpv[exts[ii].extensionName] = exts[ii].minSpvVersion; } } @@ -875,7 +875,7 @@ void TParseVersions::updateExtensionBehavior(int line, const char* extension, co checkExtensionStage(getCurrentLoc(), extension); // check if extension has additional requirements - extensionRequires(getCurrentLoc(), extension ,behaviorString); + extensionRequires(getCurrentLoc(), extension, behaviorString); // update the requested extension updateExtensionBehavior(extension, behavior); From 310a5147175c9a85d61e2e6ee02ca68568d60633 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 12 Apr 2021 18:12:58 -0600 Subject: [PATCH 146/365] Get rid of extra semicolon causing gcc 10.3 troubles. --- glslang/Include/intermediate.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 6b2fbd1042..f50d3ba121 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1675,7 +1675,7 @@ class TIntermSelection : public TIntermTyped { flatten(false), dontFlatten(false) {} virtual void traverse(TIntermTraverser*); virtual TIntermTyped* getCondition() const { return condition; } - virtual void setCondition(TIntermTyped* c) { condition = c; }; + virtual void setCondition(TIntermTyped* c) { condition = c; } virtual TIntermNode* getTrueBlock() const { return trueBlock; } virtual TIntermNode* getFalseBlock() const { return falseBlock; } virtual TIntermSelection* getAsSelectionNode() { return this; } From fa6e3c2737720e14194713767e45ebabb9e3c3ed Mon Sep 17 00:00:00 2001 From: David Neto Date: Wed, 3 Feb 2021 13:56:06 -0500 Subject: [PATCH 147/365] Add IntLog2 and use it Replace uses of floating point log2 when we want an integer result from an integer operand. This avoids concerns about accuracy of floating point library functions. --- glslang/Include/Common.h | 12 ++ glslang/MachineIndependent/ParseHelper.cpp | 9 +- gtests/CMakeLists.txt | 1 + gtests/Common.cpp | 165 +++++++++++++++++++++ 4 files changed, 179 insertions(+), 8 deletions(-) create mode 100644 gtests/Common.cpp diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index b628cdc2f0..89f0192cf5 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -286,6 +286,18 @@ template bool IsMultipleOfPow2(T number, int powerOf2) return ! (number & (powerOf2 - 1)); } +// Returns log2 of an integer power of 2. +// T should be integral. +template int IntLog2(T n) +{ + assert(IsPow2(n)); + int result = 0; + while ((T(1) << result) != n) { + result++; + } + return result; +} + } // end namespace glslang #endif // _COMMON_INCLUDED_ diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 8927b8239b..ee7fa26b33 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -5469,14 +5469,7 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi if (! IsPow2(value)) error(loc, "must be a power of 2", "buffer_reference_align", ""); else -#ifdef __ANDROID__ - // Android NDK r15c tageting ABI 15 doesn't have full support for C++11 - // (no std::exp2/log2). ::exp2 is available from C99 but ::log2 isn't - // available up until ABI 18 so we use the mathematical equivalent form - publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)(std::log(value) / std::log(2.0)); -#else - publicType.qualifier.layoutBufferReferenceAlign = (unsigned int)std::log2(value); -#endif + publicType.qualifier.layoutBufferReferenceAlign = IntLog2(value); if (nonLiteral) error(loc, "needs a literal integer", "buffer_reference_align", ""); return; diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index 0617ff850e..c0f2a9cd18 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -47,6 +47,7 @@ if(BUILD_TESTING) # Test related source files ${CMAKE_CURRENT_SOURCE_DIR}/AST.FromFile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/BuiltInResource.FromFile.cpp + ${CMAKE_CURRENT_SOURCE_DIR}/Common.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Config.FromFile.cpp ${CMAKE_CURRENT_SOURCE_DIR}/HexFloat.cpp ${CMAKE_CURRENT_SOURCE_DIR}/Hlsl.FromFile.cpp diff --git a/gtests/Common.cpp b/gtests/Common.cpp new file mode 100644 index 0000000000..0b70a83e2c --- /dev/null +++ b/gtests/Common.cpp @@ -0,0 +1,165 @@ +// Copyright (c) 2021 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +#include + +#include +#include "glslang/Include/Common.h" + +namespace { + +TEST(IsPow2, Int_Negative) { + EXPECT_EQ(false, glslang::IsPow2(-5)); + EXPECT_EQ(false, glslang::IsPow2(-1)); + EXPECT_EQ(false, glslang::IsPow2(INT_MIN)); + EXPECT_EQ(false, glslang::IsPow2(int64_t(-10))); +} + +TEST(IsPow2, Zero) { + EXPECT_EQ(false, glslang::IsPow2(0)); + EXPECT_EQ(false, glslang::IsPow2(0u)); + EXPECT_EQ(false, glslang::IsPow2(0)); + EXPECT_EQ(false, glslang::IsPow2(uint64_t(0))); + EXPECT_EQ(false, glslang::IsPow2(int64_t(0))); +} + +TEST(IsPow2, Int_Positive_PowersOf2) { + EXPECT_EQ(true, glslang::IsPow2(1)); + EXPECT_EQ(true, glslang::IsPow2(2)); + EXPECT_EQ(true, glslang::IsPow2(4)); + EXPECT_EQ(true, glslang::IsPow2(8)); + EXPECT_EQ(true, glslang::IsPow2(16)); + EXPECT_EQ(true, glslang::IsPow2(32768)); + EXPECT_EQ(true, glslang::IsPow2(65536)); + EXPECT_EQ(true, glslang::IsPow2(2147483648)); +} + +TEST(IsPow2, Int_Positive_NonPowersOf2) { + EXPECT_EQ(false, glslang::IsPow2(3)); + EXPECT_EQ(false, glslang::IsPow2(5)); + EXPECT_EQ(false, glslang::IsPow2(2147483647)); +} + +TEST(IsPow2, Uint_Positive_PowersOf2) { + EXPECT_EQ(true, glslang::IsPow2(1u)); + EXPECT_EQ(true, glslang::IsPow2(2u)); + EXPECT_EQ(true, glslang::IsPow2(4u)); + EXPECT_EQ(true, glslang::IsPow2(8u)); + EXPECT_EQ(true, glslang::IsPow2(16u)); + EXPECT_EQ(true, glslang::IsPow2(32768u)); + EXPECT_EQ(true, glslang::IsPow2(65536u)); + EXPECT_EQ(true, glslang::IsPow2(2147483648u)); +} + +TEST(IsPow2, Uint_Positive_NonPowersOf2) { + EXPECT_EQ(false, glslang::IsPow2(3u)); + EXPECT_EQ(false, glslang::IsPow2(5u)); + EXPECT_EQ(false, glslang::IsPow2(2147483647u)); +} + +TEST(IntLog2, Int) { + EXPECT_EQ(0, glslang::IntLog2(1)); + EXPECT_EQ(1, glslang::IntLog2(2)); + EXPECT_EQ(2, glslang::IntLog2(4)); + EXPECT_EQ(3, glslang::IntLog2(8)); + EXPECT_EQ(4, glslang::IntLog2(16)); + EXPECT_EQ(5, glslang::IntLog2(32)); + EXPECT_EQ(6, glslang::IntLog2(64)); + EXPECT_EQ(7, glslang::IntLog2(128)); + EXPECT_EQ(8, glslang::IntLog2(256)); + EXPECT_EQ(9, glslang::IntLog2(512)); + EXPECT_EQ(10, glslang::IntLog2(1024)); + EXPECT_EQ(11, glslang::IntLog2(2048)); + EXPECT_EQ(12, glslang::IntLog2(0x1000)); + EXPECT_EQ(13, glslang::IntLog2(0x2000)); + EXPECT_EQ(14, glslang::IntLog2(0x4000)); + EXPECT_EQ(15, glslang::IntLog2(0x8000)); + EXPECT_EQ(16, glslang::IntLog2(0x10000)); + EXPECT_EQ(17, glslang::IntLog2(0x20000)); + EXPECT_EQ(18, glslang::IntLog2(0x40000)); + EXPECT_EQ(19, glslang::IntLog2(0x80000)); + EXPECT_EQ(20, glslang::IntLog2(0x100000)); + EXPECT_EQ(21, glslang::IntLog2(0x200000)); + EXPECT_EQ(22, glslang::IntLog2(0x400000)); + EXPECT_EQ(23, glslang::IntLog2(0x800000)); + EXPECT_EQ(24, glslang::IntLog2(0x1000000)); + EXPECT_EQ(25, glslang::IntLog2(0x2000000)); + EXPECT_EQ(26, glslang::IntLog2(0x4000000)); + EXPECT_EQ(27, glslang::IntLog2(0x8000000)); + EXPECT_EQ(28, glslang::IntLog2(0x10000000)); + EXPECT_EQ(29, glslang::IntLog2(0x20000000)); + EXPECT_EQ(30, glslang::IntLog2(0x40000000)); +} + +TEST(IntLog2, Uint) { + EXPECT_EQ(0, glslang::IntLog2(1u)); + EXPECT_EQ(1, glslang::IntLog2(2u)); + EXPECT_EQ(2, glslang::IntLog2(4u)); + EXPECT_EQ(3, glslang::IntLog2(8u)); + EXPECT_EQ(4, glslang::IntLog2(16u)); + EXPECT_EQ(5, glslang::IntLog2(32u)); + EXPECT_EQ(6, glslang::IntLog2(64u)); + EXPECT_EQ(7, glslang::IntLog2(128u)); + EXPECT_EQ(8, glslang::IntLog2(256u)); + EXPECT_EQ(9, glslang::IntLog2(512u)); + EXPECT_EQ(10, glslang::IntLog2(1024u)); + EXPECT_EQ(11, glslang::IntLog2(2048u)); + EXPECT_EQ(12, glslang::IntLog2(0x1000u)); + EXPECT_EQ(13, glslang::IntLog2(0x2000u)); + EXPECT_EQ(14, glslang::IntLog2(0x4000u)); + EXPECT_EQ(15, glslang::IntLog2(0x8000u)); + EXPECT_EQ(16, glslang::IntLog2(0x10000u)); + EXPECT_EQ(17, glslang::IntLog2(0x20000u)); + EXPECT_EQ(18, glslang::IntLog2(0x40000u)); + EXPECT_EQ(19, glslang::IntLog2(0x80000u)); + EXPECT_EQ(20, glslang::IntLog2(0x100000u)); + EXPECT_EQ(21, glslang::IntLog2(0x200000u)); + EXPECT_EQ(22, glslang::IntLog2(0x400000u)); + EXPECT_EQ(23, glslang::IntLog2(0x800000u)); + EXPECT_EQ(24, glslang::IntLog2(0x1000000u)); + EXPECT_EQ(25, glslang::IntLog2(0x2000000u)); + EXPECT_EQ(26, glslang::IntLog2(0x4000000u)); + EXPECT_EQ(27, glslang::IntLog2(0x8000000u)); + EXPECT_EQ(28, glslang::IntLog2(0x10000000u)); + EXPECT_EQ(29, glslang::IntLog2(0x20000000u)); + EXPECT_EQ(30, glslang::IntLog2(0x40000000u)); + EXPECT_EQ(31, glslang::IntLog2(0x80000000u)); +} + +TEST(IntLog2, Int64) { + EXPECT_EQ(0, glslang::IntLog2(int64_t(1))); + EXPECT_EQ(1, glslang::IntLog2(int64_t(2))); + EXPECT_EQ(2, glslang::IntLog2(int64_t(4))); + EXPECT_EQ(3, glslang::IntLog2(int64_t(8))); + EXPECT_EQ(30, glslang::IntLog2(int64_t(0x40000000u))); + EXPECT_EQ(31, glslang::IntLog2(int64_t(0x80000000u))); + EXPECT_EQ(32, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000))); + EXPECT_EQ(48, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000) * int64_t(0x10000))); + EXPECT_EQ(62, glslang::IntLog2(int64_t(0x10000) * int64_t(0x10000) * int64_t(0x10000) * int64_t(0x4000))); +} + +TEST(IntLog2, Uint64) { + EXPECT_EQ(0, glslang::IntLog2(uint64_t(1))); + EXPECT_EQ(1, glslang::IntLog2(uint64_t(2))); + EXPECT_EQ(2, glslang::IntLog2(uint64_t(4))); + EXPECT_EQ(3, glslang::IntLog2(uint64_t(8))); + EXPECT_EQ(30, glslang::IntLog2(uint64_t(0x40000000u))); + EXPECT_EQ(31, glslang::IntLog2(uint64_t(0x80000000u))); + EXPECT_EQ(32, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000))); + EXPECT_EQ(48, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000))); + EXPECT_EQ(62, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x4000))); + EXPECT_EQ(63, glslang::IntLog2(uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x10000) * uint64_t(0x8000))); +} + +} // anonymous namespace From 41992e432cd8c8ef81db319f47299d7336220d6f Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Thu, 15 Apr 2021 21:38:35 +0800 Subject: [PATCH 148/365] TextureOffset not support sampler2DArrayShadow sampler until 430. Signed-off-by: ZhiqianXia --- .../textureoffset_sampler2darrayshadow.vert.out | 4 ++++ Test/textureoffset_sampler2darrayshadow.vert | 11 +++++++++++ glslang/Include/Types.h | 1 + glslang/MachineIndependent/ParseHelper.cpp | 10 ++++++++++ 4 files changed, 26 insertions(+) create mode 100644 Test/baseResults/textureoffset_sampler2darrayshadow.vert.out create mode 100644 Test/textureoffset_sampler2darrayshadow.vert diff --git a/Test/baseResults/textureoffset_sampler2darrayshadow.vert.out b/Test/baseResults/textureoffset_sampler2darrayshadow.vert.out new file mode 100644 index 0000000000..7211b78b9b --- /dev/null +++ b/Test/baseResults/textureoffset_sampler2darrayshadow.vert.out @@ -0,0 +1,4 @@ +textureoffset_sampler2darrayshadow.vert +ERROR: 0:9: 'sampler' : TextureOffset not support the sampler2DArrayShadow : version <= 420 +ERROR: 0:9: '' : compilation terminated +ERROR: 2 compilation errors. No code generated diff --git a/Test/textureoffset_sampler2darrayshadow.vert b/Test/textureoffset_sampler2darrayshadow.vert new file mode 100644 index 0000000000..6ce2dbc3a2 --- /dev/null +++ b/Test/textureoffset_sampler2darrayshadow.vert @@ -0,0 +1,11 @@ +#version 300 es +precision mediump float; +in highp vec4 dEQP_Position; + +uniform mediump sampler2DArrayShadow s; + +void main() +{ + gl_Position = vec4(textureOffset(s, vec4(0), ivec2(0))); + gl_Position = dEQP_Position; +} diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index a3815caa0a..149ba761bb 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -115,6 +115,7 @@ struct TSampler { // misnomer now; includes images, textures without sampler, #endif bool is1D() const { return dim == Esd1D; } + bool is2D() const { return dim == Esd2D; } bool isBuffer() const { return dim == EsdBuffer; } bool isRect() const { return dim == EsdRect; } bool isSubpass() const { return dim == EsdSubpass; } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index bc2a38a100..c8d68630d5 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2191,6 +2191,16 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan "[gl_MinProgramTexelOffset, gl_MaxProgramTexelOffset]"); } } + + if (callNode.getOp() == EOpTextureOffset) { + TSampler s = arg0->getType().getSampler(); + if (s.is2D() && s.isArrayed() && s.isShadow()) { + if (isEsProfile()) + error(loc, "TextureOffset does not support sampler2DArrayShadow : ", "sampler", "ES Profile"); + else if (version <= 420) + error(loc, "TextureOffset does not support sampler2DArrayShadow : ", "sampler", "version <= 420"); + } + } } break; From 100457e095f3603f62a4d6c89580033eb21109d5 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 16 Apr 2021 00:07:08 -0600 Subject: [PATCH 149/365] Add missing builtins for GL_EXT_explicit_arithmetic_types for es --- glslang/MachineIndependent/Initialize.cpp | 258 +++++++++++++++++++-- glslang/MachineIndependent/ParseHelper.cpp | 7 +- 2 files changed, 244 insertions(+), 21 deletions(-) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index a9e5af456a..7f10a0a24d 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -931,7 +931,203 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } - if (profile != EEsProfile && version >= 450) { + if (profile == EEsProfile && version >= 310) { // Explicit Types + commonBuiltins.append( + + "float64_t sqrt(float64_t);" + "f64vec2 sqrt(f64vec2);" + "f64vec3 sqrt(f64vec3);" + "f64vec4 sqrt(f64vec4);" + + "float64_t inversesqrt(float64_t);" + "f64vec2 inversesqrt(f64vec2);" + "f64vec3 inversesqrt(f64vec3);" + "f64vec4 inversesqrt(f64vec4);" + + "float64_t abs(float64_t);" + "f64vec2 abs(f64vec2);" + "f64vec3 abs(f64vec3);" + "f64vec4 abs(f64vec4);" + + "float64_t sign(float64_t);" + "f64vec2 sign(f64vec2);" + "f64vec3 sign(f64vec3);" + "f64vec4 sign(f64vec4);" + + "float64_t floor(float64_t);" + "f64vec2 floor(f64vec2);" + "f64vec3 floor(f64vec3);" + "f64vec4 floor(f64vec4);" + + "float64_t trunc(float64_t);" + "f64vec2 trunc(f64vec2);" + "f64vec3 trunc(f64vec3);" + "f64vec4 trunc(f64vec4);" + + "float64_t round(float64_t);" + "f64vec2 round(f64vec2);" + "f64vec3 round(f64vec3);" + "f64vec4 round(f64vec4);" + + "float64_t roundEven(float64_t);" + "f64vec2 roundEven(f64vec2);" + "f64vec3 roundEven(f64vec3);" + "f64vec4 roundEven(f64vec4);" + + "float64_t ceil(float64_t);" + "f64vec2 ceil(f64vec2);" + "f64vec3 ceil(f64vec3);" + "f64vec4 ceil(f64vec4);" + + "float64_t fract(float64_t);" + "f64vec2 fract(f64vec2);" + "f64vec3 fract(f64vec3);" + "f64vec4 fract(f64vec4);" + + "float64_t mod(float64_t, float64_t);" + "f64vec2 mod(f64vec2 , float64_t);" + "f64vec3 mod(f64vec3 , float64_t);" + "f64vec4 mod(f64vec4 , float64_t);" + "f64vec2 mod(f64vec2 , f64vec2);" + "f64vec3 mod(f64vec3 , f64vec3);" + "f64vec4 mod(f64vec4 , f64vec4);" + + "float64_t modf(float64_t, out float64_t);" + "f64vec2 modf(f64vec2, out f64vec2);" + "f64vec3 modf(f64vec3, out f64vec3);" + "f64vec4 modf(f64vec4, out f64vec4);" + + "float64_t min(float64_t, float64_t);" + "f64vec2 min(f64vec2, float64_t);" + "f64vec3 min(f64vec3, float64_t);" + "f64vec4 min(f64vec4, float64_t);" + "f64vec2 min(f64vec2, f64vec2);" + "f64vec3 min(f64vec3, f64vec3);" + "f64vec4 min(f64vec4, f64vec4);" + + "float64_t max(float64_t, float64_t);" + "f64vec2 max(f64vec2 , float64_t);" + "f64vec3 max(f64vec3 , float64_t);" + "f64vec4 max(f64vec4 , float64_t);" + "f64vec2 max(f64vec2 , f64vec2);" + "f64vec3 max(f64vec3 , f64vec3);" + "f64vec4 max(f64vec4 , f64vec4);" + + "float64_t clamp(float64_t, float64_t, float64_t);" + "f64vec2 clamp(f64vec2 , float64_t, float64_t);" + "f64vec3 clamp(f64vec3 , float64_t, float64_t);" + "f64vec4 clamp(f64vec4 , float64_t, float64_t);" + "f64vec2 clamp(f64vec2 , f64vec2 , f64vec2);" + "f64vec3 clamp(f64vec3 , f64vec3 , f64vec3);" + "f64vec4 clamp(f64vec4 , f64vec4 , f64vec4);" + + "float64_t mix(float64_t, float64_t, float64_t);" + "f64vec2 mix(f64vec2, f64vec2, float64_t);" + "f64vec3 mix(f64vec3, f64vec3, float64_t);" + "f64vec4 mix(f64vec4, f64vec4, float64_t);" + "f64vec2 mix(f64vec2, f64vec2, f64vec2);" + "f64vec3 mix(f64vec3, f64vec3, f64vec3);" + "f64vec4 mix(f64vec4, f64vec4, f64vec4);" + "float64_t mix(float64_t, float64_t, bool);" + "f64vec2 mix(f64vec2, f64vec2, bvec2);" + "f64vec3 mix(f64vec3, f64vec3, bvec3);" + "f64vec4 mix(f64vec4, f64vec4, bvec4);" + + "float64_t step(float64_t, float64_t);" + "f64vec2 step(f64vec2 , f64vec2);" + "f64vec3 step(f64vec3 , f64vec3);" + "f64vec4 step(f64vec4 , f64vec4);" + "f64vec2 step(float64_t, f64vec2);" + "f64vec3 step(float64_t, f64vec3);" + "f64vec4 step(float64_t, f64vec4);" + + "float64_t smoothstep(float64_t, float64_t, float64_t);" + "f64vec2 smoothstep(f64vec2 , f64vec2 , f64vec2);" + "f64vec3 smoothstep(f64vec3 , f64vec3 , f64vec3);" + "f64vec4 smoothstep(f64vec4 , f64vec4 , f64vec4);" + "f64vec2 smoothstep(float64_t, float64_t, f64vec2);" + "f64vec3 smoothstep(float64_t, float64_t, f64vec3);" + "f64vec4 smoothstep(float64_t, float64_t, f64vec4);" + + "float64_t length(float64_t);" + "float64_t length(f64vec2);" + "float64_t length(f64vec3);" + "float64_t length(f64vec4);" + + "float64_t distance(float64_t, float64_t);" + "float64_t distance(f64vec2 , f64vec2);" + "float64_t distance(f64vec3 , f64vec3);" + "float64_t distance(f64vec4 , f64vec4);" + + "float64_t dot(float64_t, float64_t);" + "float64_t dot(f64vec2 , f64vec2);" + "float64_t dot(f64vec3 , f64vec3);" + "float64_t dot(f64vec4 , f64vec4);" + + "f64vec3 cross(f64vec3, f64vec3);" + + "float64_t normalize(float64_t);" + "f64vec2 normalize(f64vec2);" + "f64vec3 normalize(f64vec3);" + "f64vec4 normalize(f64vec4);" + + "float64_t faceforward(float64_t, float64_t, float64_t);" + "f64vec2 faceforward(f64vec2, f64vec2, f64vec2);" + "f64vec3 faceforward(f64vec3, f64vec3, f64vec3);" + "f64vec4 faceforward(f64vec4, f64vec4, f64vec4);" + + "float64_t reflect(float64_t, float64_t);" + "f64vec2 reflect(f64vec2 , f64vec2 );" + "f64vec3 reflect(f64vec3 , f64vec3 );" + "f64vec4 reflect(f64vec4 , f64vec4 );" + + "float64_t refract(float64_t, float64_t, float64_t);" + "f64vec2 refract(f64vec2 , f64vec2 , float64_t);" + "f64vec3 refract(f64vec3 , f64vec3 , float64_t);" + "f64vec4 refract(f64vec4 , f64vec4 , float64_t);" + + "f64mat2 matrixCompMult(f64mat2, f64mat2);" + "f64mat3 matrixCompMult(f64mat3, f64mat3);" + "f64mat4 matrixCompMult(f64mat4, f64mat4);" + "f64mat2x3 matrixCompMult(f64mat2x3, f64mat2x3);" + "f64mat2x4 matrixCompMult(f64mat2x4, f64mat2x4);" + "f64mat3x2 matrixCompMult(f64mat3x2, f64mat3x2);" + "f64mat3x4 matrixCompMult(f64mat3x4, f64mat3x4);" + "f64mat4x2 matrixCompMult(f64mat4x2, f64mat4x2);" + "f64mat4x3 matrixCompMult(f64mat4x3, f64mat4x3);" + + "f64mat2 outerProduct(f64vec2, f64vec2);" + "f64mat3 outerProduct(f64vec3, f64vec3);" + "f64mat4 outerProduct(f64vec4, f64vec4);" + "f64mat2x3 outerProduct(f64vec3, f64vec2);" + "f64mat3x2 outerProduct(f64vec2, f64vec3);" + "f64mat2x4 outerProduct(f64vec4, f64vec2);" + "f64mat4x2 outerProduct(f64vec2, f64vec4);" + "f64mat3x4 outerProduct(f64vec4, f64vec3);" + "f64mat4x3 outerProduct(f64vec3, f64vec4);" + + "f64mat2 transpose(f64mat2);" + "f64mat3 transpose(f64mat3);" + "f64mat4 transpose(f64mat4);" + "f64mat2x3 transpose(f64mat3x2);" + "f64mat3x2 transpose(f64mat2x3);" + "f64mat2x4 transpose(f64mat4x2);" + "f64mat4x2 transpose(f64mat2x4);" + "f64mat3x4 transpose(f64mat4x3);" + "f64mat4x3 transpose(f64mat3x4);" + + "float64_t determinant(f64mat2);" + "float64_t determinant(f64mat3);" + "float64_t determinant(f64mat4);" + + "f64mat2 inverse(f64mat2);" + "f64mat3 inverse(f64mat3);" + "f64mat4 inverse(f64mat4);" + + "\n"); + } + + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) { commonBuiltins.append( "int64_t abs(int64_t);" @@ -998,25 +1194,25 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "u64vec3 mix(u64vec3, u64vec3, bvec3);" "u64vec4 mix(u64vec4, u64vec4, bvec4);" - "int64_t doubleBitsToInt64(double);" - "i64vec2 doubleBitsToInt64(dvec2);" - "i64vec3 doubleBitsToInt64(dvec3);" - "i64vec4 doubleBitsToInt64(dvec4);" + "int64_t doubleBitsToInt64(float64_t);" + "i64vec2 doubleBitsToInt64(f64vec2);" + "i64vec3 doubleBitsToInt64(f64vec3);" + "i64vec4 doubleBitsToInt64(f64vec4);" - "uint64_t doubleBitsToUint64(double);" - "u64vec2 doubleBitsToUint64(dvec2);" - "u64vec3 doubleBitsToUint64(dvec3);" - "u64vec4 doubleBitsToUint64(dvec4);" + "uint64_t doubleBitsToUint64(float64_t);" + "u64vec2 doubleBitsToUint64(f64vec2);" + "u64vec3 doubleBitsToUint64(f64vec3);" + "u64vec4 doubleBitsToUint64(f64vec4);" - "double int64BitsToDouble(int64_t);" - "dvec2 int64BitsToDouble(i64vec2);" - "dvec3 int64BitsToDouble(i64vec3);" - "dvec4 int64BitsToDouble(i64vec4);" + "float64_t int64BitsToDouble(int64_t);" + "f64vec2 int64BitsToDouble(i64vec2);" + "f64vec3 int64BitsToDouble(i64vec3);" + "f64vec4 int64BitsToDouble(i64vec4);" - "double uint64BitsToDouble(uint64_t);" - "dvec2 uint64BitsToDouble(u64vec2);" - "dvec3 uint64BitsToDouble(u64vec3);" - "dvec4 uint64BitsToDouble(u64vec4);" + "float64_t uint64BitsToDouble(uint64_t);" + "f64vec2 uint64BitsToDouble(u64vec2);" + "f64vec3 uint64BitsToDouble(u64vec3);" + "f64vec4 uint64BitsToDouble(u64vec4);" "int64_t packInt2x32(ivec2);" "uint64_t packUint2x32(uvec2);" @@ -1335,6 +1531,15 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "dvec4 fma(dvec4, dvec4, dvec4 );" "\n"); } + + if (profile == EEsProfile && version >= 310) { // ARB_gpu_shader_fp64 + commonBuiltins.append( + "float64_t fma(float64_t, float64_t, float64_t);" + "f64vec2 fma(f64vec2, f64vec2, f64vec2 );" + "f64vec3 fma(f64vec3, f64vec3, f64vec3 );" + "f64vec4 fma(f64vec4, f64vec4, f64vec4 );" + "\n"); + } #endif if ((profile == EEsProfile && version >= 310) || @@ -1371,6 +1576,21 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + + if (profile == EEsProfile && version >= 310) { // ARB_gpu_shader_fp64 + commonBuiltins.append( + "float64_t frexp(float64_t, out int);" + "f64vec2 frexp( f64vec2, out ivec2);" + "f64vec3 frexp( f64vec3, out ivec3);" + "f64vec4 frexp( f64vec4, out ivec4);" + + "float64_t ldexp(float64_t, int);" + "f64vec2 ldexp( f64vec2, ivec2);" + "f64vec3 ldexp( f64vec3, ivec3);" + "f64vec4 ldexp( f64vec4, ivec4);" + + "\n"); + } #endif #endif @@ -3146,7 +3366,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV #ifndef GLSLANG_ANGLE // GL_AMD_gpu_shader_half_float/Explicit types - if (profile != EEsProfile && version >= 450) { + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) { commonBuiltins.append( "float16_t radians(float16_t);" "f16vec2 radians(f16vec2);" @@ -3494,7 +3714,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV } // Explicit types - if (profile != EEsProfile && version >= 450) { + if ((profile != EEsProfile && version >= 450) || (profile == EEsProfile && version >= 310)) { commonBuiltins.append( "int8_t abs(int8_t);" "i8vec2 abs(i8vec2);" diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 6d2bc8492a..0f5f2b8134 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -6424,8 +6424,11 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct extensionTurnedOn(E_GL_EXT_shader_explicit_arithmetic_types_float64); if (isEsProfile()) - function = (extensionTurnedOn(E_GL_EXT_shader_implicit_conversions) && version >= 310) ? - findFunction120(loc, call, builtIn) : findFunctionExact(loc, call, builtIn); + function = (explicitTypesEnabled && version >= 310) + ? findFunctionExplicitTypes(loc, call, builtIn) + : ((extensionTurnedOn(E_GL_EXT_shader_implicit_conversions) && version >= 310) + ? findFunction120(loc, call, builtIn) + : findFunctionExact(loc, call, builtIn)); else if (version < 120) function = findFunctionExact(loc, call, builtIn); else if (version < 400) From b67b6b359b1db1b4153dd588558a8ee88d78f2d2 Mon Sep 17 00:00:00 2001 From: ZaOniRinku Date: Mon, 19 Apr 2021 09:15:36 +0200 Subject: [PATCH 150/365] Fix typo in ShaderLang.h --- glslang/Public/ShaderLang.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 14683daf11..ff5c20c18a 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -508,7 +508,7 @@ class TShader { // // setEnvInput: The input source language and stage. If generating code for a // specific client, the input client semantics to use and the - // version of the that client's input semantics to use, otherwise + // version of that client's input semantics to use, otherwise // use EShClientNone and version of 0, e.g. for validation mode. // Note 'version' does not describe the target environment, // just the version of the source dialect to compile under. From 12f3eb8e3fdfb042afd7386c080b0ed548b359ef Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 16 Apr 2021 18:52:51 -0600 Subject: [PATCH 151/365] Fix and enable textureOffset_samper2darrayshadow test --- ...extureoffset_sampler2darrayshadow.vert.out | 65 ++++++++++++++++++- gtests/AST.FromFile.cpp | 1 + 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/Test/baseResults/textureoffset_sampler2darrayshadow.vert.out b/Test/baseResults/textureoffset_sampler2darrayshadow.vert.out index 7211b78b9b..44d8e97591 100644 --- a/Test/baseResults/textureoffset_sampler2darrayshadow.vert.out +++ b/Test/baseResults/textureoffset_sampler2darrayshadow.vert.out @@ -1,4 +1,63 @@ textureoffset_sampler2darrayshadow.vert -ERROR: 0:9: 'sampler' : TextureOffset not support the sampler2DArrayShadow : version <= 420 -ERROR: 0:9: '' : compilation terminated -ERROR: 2 compilation errors. No code generated +ERROR: 0:9: 'sampler' : TextureOffset does not support sampler2DArrayShadow : ES Profile +ERROR: 1 compilation errors. No code generated. + + +Shader version: 300 +ERROR: node is still EOpNull! +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp highp 4-component vector of float) +0:9 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:9 Construct vec4 ( temp highp 4-component vector of float) +0:9 textureOffset ( global mediump float) +0:9 's' ( uniform mediump sampler2DArrayShadow) +0:9 Constant: +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 +0:9 Constant: +0:9 0 (const int) +0:9 0 (const int) +0:10 move second child to first child ( temp highp 4-component vector of float) +0:10 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:10 'dEQP_Position' ( in highp 4-component vector of float) +0:? Linker Objects +0:? 'dEQP_Position' ( in highp 4-component vector of float) +0:? 's' ( uniform mediump sampler2DArrayShadow) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + + +Linked vertex stage: + + +Shader version: 300 +ERROR: node is still EOpNull! +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 move second child to first child ( temp highp 4-component vector of float) +0:9 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:9 Construct vec4 ( temp highp 4-component vector of float) +0:9 textureOffset ( global mediump float) +0:9 's' ( uniform mediump sampler2DArrayShadow) +0:9 Constant: +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 +0:9 Constant: +0:9 0 (const int) +0:9 0 (const int) +0:10 move second child to first child ( temp highp 4-component vector of float) +0:10 'gl_Position' ( gl_Position highp 4-component vector of float Position) +0:10 'dEQP_Position' ( in highp 4-component vector of float) +0:? Linker Objects +0:? 'dEQP_Position' ( in highp 4-component vector of float) +0:? 's' ( uniform mediump sampler2DArrayShadow) +0:? 'gl_VertexID' ( gl_VertexId highp int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId highp int InstanceId) + diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 8885b291f6..77f0aafbfd 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -281,6 +281,7 @@ INSTANTIATE_TEST_SUITE_P( "terminate.frag", "terminate.vert", "negativeWorkGroupSize.comp", + "textureoffset_sampler2darrayshadow.vert", })), FileNameAsCustomTestSuffix ); From 219b7b9f72930f7296a8a9e96e562e7dd66b88a7 Mon Sep 17 00:00:00 2001 From: Robin Quint Date: Tue, 20 Apr 2021 07:58:36 +0200 Subject: [PATCH 152/365] Exposed #856 as --hlsl-sampled-textures in the StandAlone --- StandAlone/StandAlone.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 923ded3052..58c1704a83 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -111,6 +111,7 @@ bool NaNClamp = false; bool stripDebugInfo = false; bool beQuiet = false; bool VulkanRulesRelaxed = false; +bool hlslSampledTextures = false; // // Return codes from main/exit(). @@ -655,6 +656,8 @@ void ProcessArguments(std::vector>& workItem HlslEnable16BitTypes = true; } else if (lowerword == "hlsl-dx9-compatible") { HlslDX9compatible = true; + } else if (lowerword == "hlsl-sampled-textures") { + hlslSampledTextures = true; } else if (lowerword == "invert-y" || // synonyms lowerword == "iy") { Options |= EOptionInvertY; @@ -1189,6 +1192,9 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0); shader->setResourceSetBinding(baseResourceSetBinding[compUnit.stage]); + if (hlslSampledTextures) + shader->setTextureSamplerTransformMode(EShTexSampTransUpgradeTextureRemoveSampler); + if (Options & EOptionAutoMapBindings) shader->setAutoMapBindings(true); From f050209ce1349ce76b83d226e3861bda9d927009 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Tue, 20 Apr 2021 00:22:15 +0200 Subject: [PATCH 153/365] Add a --depfile option. The output is similar to gcc -MMD and can be used by build systems like meson to automatically recompile shaders if an included header was changed. --- StandAlone/DirStackFileIncluder.h | 8 ++++++ StandAlone/StandAlone.cpp | 48 +++++++++++++++++++++++++++++-- 2 files changed, 53 insertions(+), 3 deletions(-) diff --git a/StandAlone/DirStackFileIncluder.h b/StandAlone/DirStackFileIncluder.h index 18734130e7..5a33c78fa2 100644 --- a/StandAlone/DirStackFileIncluder.h +++ b/StandAlone/DirStackFileIncluder.h @@ -40,6 +40,7 @@ #include #include #include +#include #include "./../glslang/Public/ShaderLang.h" @@ -84,12 +85,18 @@ class DirStackFileIncluder : public glslang::TShader::Includer { } } + virtual std::set getIncludedFiles() + { + return includedFiles; + } + virtual ~DirStackFileIncluder() override { } protected: typedef char tUserDataElement; std::vector directoryStack; int externalLocalDirectoryCount; + std::set includedFiles; // Search for a valid "local" path based on combining the stack of include // directories and the nominal name of the header. @@ -108,6 +115,7 @@ class DirStackFileIncluder : public glslang::TShader::Includer { std::ifstream file(path, std::ios_base::binary | std::ios_base::ate); if (file) { directoryStack.push_back(getDirectory(path)); + includedFiles.insert(path); return newIncludeResult(path, file, (int)file.tellg()); } } diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 923ded3052..f76fc05de4 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -58,6 +58,7 @@ #include #include #include +#include #include "../glslang/OSDependent/osinclude.h" @@ -165,6 +166,7 @@ int ReflectOptions = EShReflectionDefault; int Options = 0; const char* ExecutableName = nullptr; const char* binaryFileName = nullptr; +const char* depencyFileName = nullptr; const char* entryPointName = nullptr; const char* sourceEntryPointName = nullptr; const char* shaderStageName = nullptr; @@ -798,6 +800,11 @@ void ProcessArguments(std::vector>& workItem break; } else if (lowerword == "quiet") { beQuiet = true; + } else if (lowerword == "depfile") { + if (argc <= 1) + Error("no provided", lowerword.c_str()); + depencyFileName = argv[1]; + bumpArg(); } else if (lowerword == "version") { Options |= EOptionDumpVersions; } else if (lowerword == "help") { @@ -1135,6 +1142,23 @@ struct ShaderCompUnit { } }; +// Writes a depfile similar to gcc -MMD foo.c +bool writeDepFile(std::string depfile, std::vector& binaryFiles, const std::vector& sources) +{ + std::ofstream file(depfile); + if (file.fail()) + return false; + + for (auto it = binaryFiles.begin(); it != binaryFiles.end(); it++) { + file << *it << ":"; + for (auto it = sources.begin(); it != sources.end(); it++) { + file << " " << *it; + } + file << std::endl; + } + return true; +} + // // For linking mode: Will independently parse each compilation unit, but then put them // in the same program and link them together, making at most one linked module per @@ -1151,6 +1175,12 @@ void CompileAndLinkShaderUnits(std::vector compUnits) EShMessages messages = EShMsgDefault; SetMessageOptions(messages); + DirStackFileIncluder includer; + std::for_each(IncludeDirectoryList.rbegin(), IncludeDirectoryList.rend(), [&includer](const std::string& dir) { + includer.pushExternalLocalDirectory(dir); }); + + std::vector sources; + // // Per-shader processing... // @@ -1158,6 +1188,9 @@ void CompileAndLinkShaderUnits(std::vector compUnits) glslang::TProgram& program = *new glslang::TProgram; for (auto it = compUnits.cbegin(); it != compUnits.cend(); ++it) { const auto &compUnit = *it; + for (int i = 0; i < compUnit.count; i++) { + sources.push_back(compUnit.fileNameList[i]); + } glslang::TShader* shader = new glslang::TShader(compUnit.stage); shader->setStringsWithLengthsAndNames(compUnit.text, NULL, compUnit.fileNameList, compUnit.count); if (entryPointName) @@ -1252,9 +1285,6 @@ void CompileAndLinkShaderUnits(std::vector compUnits) const int defaultVersion = Options & EOptionDefaultDesktop ? 110 : 100; - DirStackFileIncluder includer; - std::for_each(IncludeDirectoryList.rbegin(), IncludeDirectoryList.rend(), [&includer](const std::string& dir) { - includer.pushExternalLocalDirectory(dir); }); #ifndef GLSLANG_WEB if (Options & EOptionOutputPreprocessed) { std::string str; @@ -1314,6 +1344,8 @@ void CompileAndLinkShaderUnits(std::vector compUnits) } #endif + std::vector outputFiles; + // Dump SPIR-V if (Options & EOptionSpv) { if (CompileFailed || LinkFailed) @@ -1343,6 +1375,8 @@ void CompileAndLinkShaderUnits(std::vector compUnits) } else { glslang::OutputSpvBin(spirv, GetBinaryName((EShLanguage)stage)); } + + outputFiles.push_back(GetBinaryName((EShLanguage)stage)); #ifndef GLSLANG_WEB if (!SpvToolsDisassembler && (Options & EOptionHumanReadableSpv)) spv::Disassemble(std::cout, spirv); @@ -1353,6 +1387,13 @@ void CompileAndLinkShaderUnits(std::vector compUnits) } } + if (depencyFileName && !(CompileFailed || LinkFailed)) { + std::set includedFiles = includer.getIncludedFiles(); + sources.insert(sources.end(), includedFiles.begin(), includedFiles.end()); + + writeDepFile(depencyFileName, outputFiles, sources); + } + // Free everything up, program has to go before the shaders // because it might have merged stuff from the shaders, and // the stuff from the shaders has to have its destructors called @@ -1773,6 +1814,7 @@ void usage() " --auto-map-locations | --aml automatically locate input/output lacking\n" " 'location' (fragile, not cross stage)\n" " --client {vulkan|opengl} see -V and -G\n" + " --depfile writes depfile for build systems\n" " --dump-builtin-symbols prints builtin symbol table prior each compile\n" " -dumpfullversion | -dumpversion print bare major.minor.patchlevel\n" " --flatten-uniform-arrays | --fua flatten uniform texture/sampler arrays to\n" From 498d74d84c52a0754977fcb955f5bef626506673 Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Tue, 20 Apr 2021 18:12:39 +0200 Subject: [PATCH 154/365] Add some basic --depfile tests --- Test/baseResults/hlsl.dashI.vert.d.out | 1 + Test/baseResults/hlsl.include.vert.d.out | 1 + Test/runtests | 10 ++++++++++ 3 files changed, 12 insertions(+) create mode 100644 Test/baseResults/hlsl.dashI.vert.d.out create mode 100644 Test/baseResults/hlsl.include.vert.d.out diff --git a/Test/baseResults/hlsl.dashI.vert.d.out b/Test/baseResults/hlsl.dashI.vert.d.out new file mode 100644 index 0000000000..11f8ed4c54 --- /dev/null +++ b/Test/baseResults/hlsl.dashI.vert.d.out @@ -0,0 +1 @@ +vert.spv: hlsl.dashI.vert ./bar.h ./parent.h inc1/path1/local.h inc1/path1/notHere.h inc1/path2/remote.h diff --git a/Test/baseResults/hlsl.include.vert.d.out b/Test/baseResults/hlsl.include.vert.d.out new file mode 100644 index 0000000000..f2e54ff45e --- /dev/null +++ b/Test/baseResults/hlsl.include.vert.d.out @@ -0,0 +1 @@ +vert.spv: ../Test/hlsl.include.vert ../Test/./inc1/bar.h ../Test/./inc1/foo.h ../Test/bar.h ../Test/inc2/bar.h ../Test/inc2/foo.h ../Test/parent.h diff --git a/Test/runtests b/Test/runtests index 51f1a6a6ce..69312e131f 100755 --- a/Test/runtests +++ b/Test/runtests @@ -190,6 +190,16 @@ diff -b $BASEDIR/hlsl.dashI.vert.out $TARGETDIR/hlsl.dashI.vert.out || HASERROR= run -D -Od -e MainPs -H -Od -g hlsl.pp.line3.frag > $TARGETDIR/hlsl.pp.line3.frag.out diff -b $BASEDIR/hlsl.pp.line3.frag.out $TARGETDIR/hlsl.pp.line3.frag.out || HASERROR=1 +# +# Testing --depfile +# + +echo "Testing --depfile" +run -D -Od -e main -H --depfile $TARGETDIR/hlsl.include.vert.d.out -Od ../Test/hlsl.include.vert > $TARGETDIR/hlsl.include.vert.out +diff -b $BASEDIR/hlsl.include.vert.d.out $TARGETDIR/hlsl.include.vert.d.out || HASERROR=1 +run -D -Od -e main -H --depfile $TARGETDIR/hlsl.dashI.vert.d.out -Od -Iinc1/path1 -Iinc1/path2 hlsl.dashI.vert > $TARGETDIR/hlsl.dashI.vert.out +diff -b $BASEDIR/hlsl.dashI.vert.d.out $TARGETDIR/hlsl.dashI.vert.d.out || HASERROR=1 + # # Testing -D and -U # From ebfca6099f2cfe1693afe2abd9c229c853631c25 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 21 Apr 2021 16:49:53 -0600 Subject: [PATCH 155/365] Change --hlsl-sampled-textures to --auto-sampled-textures --- StandAlone/StandAlone.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 58c1704a83..9535b70da2 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -111,7 +111,7 @@ bool NaNClamp = false; bool stripDebugInfo = false; bool beQuiet = false; bool VulkanRulesRelaxed = false; -bool hlslSampledTextures = false; +bool autoSampledTextures = false; // // Return codes from main/exit(). @@ -656,8 +656,8 @@ void ProcessArguments(std::vector>& workItem HlslEnable16BitTypes = true; } else if (lowerword == "hlsl-dx9-compatible") { HlslDX9compatible = true; - } else if (lowerword == "hlsl-sampled-textures") { - hlslSampledTextures = true; + } else if (lowerword == "auto-sampled-textures") { + autoSampledTextures = true; } else if (lowerword == "invert-y" || // synonyms lowerword == "iy") { Options |= EOptionInvertY; @@ -1192,7 +1192,7 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setNoStorageFormat((Options & EOptionNoStorageFormat) != 0); shader->setResourceSetBinding(baseResourceSetBinding[compUnit.stage]); - if (hlslSampledTextures) + if (autoSampledTextures) shader->setTextureSamplerTransformMode(EShTexSampTransUpgradeTextureRemoveSampler); if (Options & EOptionAutoMapBindings) From f90377e74a6d343e07cc14dd38373f1b9d3c787c Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 21 Apr 2021 18:33:46 -0600 Subject: [PATCH 156/365] Update spirv-tools and spirv-headers known good --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index e69a3ae64d..cc4421164a 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "48007a5c7f7cc671b391bebd46e87fd6edc6c24b" + "commit" : "dc72924cb31cd9f3dbc3eb47e9d926cf641e3a07" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "f88a1f98fa7a44ccfcf33d810c72b200e7d9a78a" + "commit" : "dafead1765f6c1a5f9f8a76387dcb2abe4e54acd" } ] } From a6674e01209cc0306d90e4f1103591f16c539ac2 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 21 Apr 2021 18:42:12 -0600 Subject: [PATCH 157/365] Update CHANGES for 11.3.0 --- CHANGES.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 3fd3636c40..2be2a0c77d 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,15 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.3.0 2021-04-21 + +### Other changes +* Added --depfile +* Added --auto-sampled-textures +* Now supports InterpolateAt-based functions +* Supports cross-stage automatic IO mapping +* Supports GL_EXT_vulkan_glsl_relaxed (-R option) + ## 11.2.0 2021-02-18 ### Other changes From e50b0a857c7c1fb3066a2d42cb212b91ff88674a Mon Sep 17 00:00:00 2001 From: Robin Quint Date: Thu, 22 Apr 2021 13:13:38 +0200 Subject: [PATCH 158/365] Added usage hint for --auto-sampled-textures, added test cases --- StandAlone/StandAlone.cpp | 2 + .../glsl.autosampledtextures.frag.out | 45 +++++++++++ .../hlsl.autosampledtextures.frag.out | 77 +++++++++++++++++++ Test/glsl.autosampledtextures.frag | 13 ++++ Test/hlsl.autosampledtextures.frag | 21 +++++ Test/runtests | 9 +++ 6 files changed, 167 insertions(+) create mode 100644 Test/baseResults/glsl.autosampledtextures.frag.out create mode 100644 Test/baseResults/hlsl.autosampledtextures.frag.out create mode 100644 Test/glsl.autosampledtextures.frag create mode 100644 Test/hlsl.autosampledtextures.frag diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index d38f4adda0..84d0a4474b 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -1819,6 +1819,8 @@ void usage() " without explicit bindings\n" " --auto-map-locations | --aml automatically locate input/output lacking\n" " 'location' (fragile, not cross stage)\n" + " --auto-sampled-textures Removes sampler variables and converts\n" + " existing textures to combined image-samplers\n" " --client {vulkan|opengl} see -V and -G\n" " --depfile writes depfile for build systems\n" " --dump-builtin-symbols prints builtin symbol table prior each compile\n" diff --git a/Test/baseResults/glsl.autosampledtextures.frag.out b/Test/baseResults/glsl.autosampledtextures.frag.out new file mode 100644 index 0000000000..2183898a8f --- /dev/null +++ b/Test/baseResults/glsl.autosampledtextures.frag.out @@ -0,0 +1,45 @@ +glsl.autosampledtextures.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 23 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 17 21 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 9 "color" + Name 13 "u_Tex" + Name 17 "in_UV" + Name 21 "out_Color" + Decorate 13(u_Tex) DescriptorSet 0 + Decorate 13(u_Tex) Binding 0 + Decorate 17(in_UV) Location 0 + Decorate 21(out_Color) 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(u_Tex): 12(ptr) Variable UniformConstant + 15: TypeVector 6(float) 2 + 16: TypePointer Input 15(fvec2) + 17(in_UV): 16(ptr) Variable Input + 20: TypePointer Output 7(fvec4) + 21(out_Color): 20(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(color): 8(ptr) Variable Function + 14: 11 Load 13(u_Tex) + 18: 15(fvec2) Load 17(in_UV) + 19: 7(fvec4) ImageSampleImplicitLod 14 18 + Store 9(color) 19 + 22: 7(fvec4) Load 9(color) + Store 21(out_Color) 22 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.autosampledtextures.frag.out b/Test/baseResults/hlsl.autosampledtextures.frag.out new file mode 100644 index 0000000000..559c1306a2 --- /dev/null +++ b/Test/baseResults/hlsl.autosampledtextures.frag.out @@ -0,0 +1,77 @@ +hlsl.autosampledtextures.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 45 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "MainPs" 36 40 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "MainPs" + Name 8 "PS_INPUT" + MemberName 8(PS_INPUT) 0 "vTextureCoords" + Name 11 "PS_OUTPUT" + MemberName 11(PS_OUTPUT) 0 "vColor" + Name 14 "@MainPs(struct-PS_INPUT-vf21;" + Name 13 "i" + Name 17 "ps_output" + Name 23 "g_tColor" + Name 34 "i" + Name 36 "i.vTextureCoords" + Name 40 "@entryPointOutput.vColor" + Name 41 "param" + Decorate 23(g_tColor) DescriptorSet 0 + Decorate 23(g_tColor) Binding 0 + Decorate 36(i.vTextureCoords) Location 0 + Decorate 40(@entryPointOutput.vColor) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 2 + 8(PS_INPUT): TypeStruct 7(fvec2) + 9: TypePointer Function 8(PS_INPUT) + 10: TypeVector 6(float) 4 + 11(PS_OUTPUT): TypeStruct 10(fvec4) + 12: TypeFunction 11(PS_OUTPUT) 9(ptr) + 16: TypePointer Function 11(PS_OUTPUT) + 18: TypeInt 32 1 + 19: 18(int) Constant 0 + 20: TypeImage 6(float) 2D sampled format:Unknown + 21: TypeSampledImage 20 + 22: TypePointer UniformConstant 21 + 23(g_tColor): 22(ptr) Variable UniformConstant + 25: TypePointer Function 7(fvec2) + 29: TypePointer Function 10(fvec4) + 35: TypePointer Input 7(fvec2) +36(i.vTextureCoords): 35(ptr) Variable Input + 39: TypePointer Output 10(fvec4) +40(@entryPointOutput.vColor): 39(ptr) Variable Output + 4(MainPs): 2 Function None 3 + 5: Label + 34(i): 9(ptr) Variable Function + 41(param): 9(ptr) Variable Function + 37: 7(fvec2) Load 36(i.vTextureCoords) + 38: 25(ptr) AccessChain 34(i) 19 + Store 38 37 + 42: 8(PS_INPUT) Load 34(i) + Store 41(param) 42 + 43:11(PS_OUTPUT) FunctionCall 14(@MainPs(struct-PS_INPUT-vf21;) 41(param) + 44: 10(fvec4) CompositeExtract 43 0 + Store 40(@entryPointOutput.vColor) 44 + Return + FunctionEnd +14(@MainPs(struct-PS_INPUT-vf21;):11(PS_OUTPUT) Function None 12 + 13(i): 9(ptr) FunctionParameter + 15: Label + 17(ps_output): 16(ptr) Variable Function + 24: 21 Load 23(g_tColor) + 26: 25(ptr) AccessChain 13(i) 19 + 27: 7(fvec2) Load 26 + 28: 10(fvec4) ImageSampleImplicitLod 24 27 + 30: 29(ptr) AccessChain 17(ps_output) 19 + Store 30 28 + 31:11(PS_OUTPUT) Load 17(ps_output) + ReturnValue 31 + FunctionEnd diff --git a/Test/glsl.autosampledtextures.frag b/Test/glsl.autosampledtextures.frag new file mode 100644 index 0000000000..db4e68e330 --- /dev/null +++ b/Test/glsl.autosampledtextures.frag @@ -0,0 +1,13 @@ +#version 460 + +layout (location = 0) in vec2 in_UV; + +layout (set=0, binding=0) uniform texture2D u_Tex; +layout (set=0, binding=0) uniform sampler u_Sampler; + +layout (location = 0) out vec4 out_Color; + +void main() { + vec4 color = texture(sampler2D(u_Tex, u_Sampler), in_UV); + out_Color = color; +} diff --git a/Test/hlsl.autosampledtextures.frag b/Test/hlsl.autosampledtextures.frag new file mode 100644 index 0000000000..7c72becdc4 --- /dev/null +++ b/Test/hlsl.autosampledtextures.frag @@ -0,0 +1,21 @@ +Texture2D g_tColor; + +SamplerState g_sAniso; + +struct PS_INPUT +{ + float2 vTextureCoords : TEXCOORD2 ; +} ; + +struct PS_OUTPUT +{ + float4 vColor : SV_Target0 ; +} ; + +PS_OUTPUT MainPs ( PS_INPUT i ) +{ + PS_OUTPUT ps_output ; + + ps_output . vColor = g_tColor . Sample ( g_sAniso , i . vTextureCoords . xy ) ; + return ps_output ; +} \ No newline at end of file diff --git a/Test/runtests b/Test/runtests index 69312e131f..a7bdda7935 100755 --- a/Test/runtests +++ b/Test/runtests @@ -280,6 +280,15 @@ echo "Testing nan-clamp" run --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 +# +# Test --auto-sampled-textures +# +echo "Testing auto-sampled-textures" +run --auto-sampled-textures -H -Od -e MainPs -D -S frag hlsl.autosampledtextures.frag > $TARGETDIR/hlsl.autosampledtextures.frag.out +diff -b $BASEDIR/hlsl.autosampledtextures.frag.out $TARGETDIR/hlsl.autosampledtextures.frag.out || HASERROR=1 +run --auto-sampled-textures -H -Od -S frag glsl.autosampledtextures.frag > $TARGETDIR/glsl.autosampledtextures.frag.out +diff -b $BASEDIR/glsl.autosampledtextures.frag.out $TARGETDIR/glsl.autosampledtextures.frag.out || HASERROR=1 + # # Final checking # From 7b51e234fe0aa47c56314c0c8e95916597303f1d Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 22 Apr 2021 16:30:17 -0600 Subject: [PATCH 159/365] Fix CMakeLists.txt to keep compatibility with CMake 3.10.2 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9ed5265040..70fe3fe924 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -195,7 +195,7 @@ elseif(MSVC) add_compile_options(/EHsc) # Enable Exceptions else() string(REGEX REPLACE /EHsc "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Try to remove default /EHsc cxx_flag - add_compile_definitions(_HAS_EXCEPTIONS=0) + add_compile_options(/D_HAS_EXCEPTIONS=0) endif() endif() From 4e83d93b62a8d388c53e5576a56d8e237144d142 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 22 Apr 2021 18:09:42 -0600 Subject: [PATCH 160/365] Update CHANGES for 11.4.0 --- CHANGES.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 2be2a0c77d..c67d16901e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.4.0 2021-04-22 + +### Other changes +* Fix to keep source compatible with CMake 3.10.2 + ## 11.3.0 2021-04-21 ### Other changes From 4bf373e9a3fc11e787269682b8a846f6bc9b5a13 Mon Sep 17 00:00:00 2001 From: Robin Quint Date: Tue, 27 Apr 2021 16:06:06 +0200 Subject: [PATCH 161/365] Improved usage hint --- StandAlone/StandAlone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 84d0a4474b..c6dc597436 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -1820,7 +1820,7 @@ void usage() " --auto-map-locations | --aml automatically locate input/output lacking\n" " 'location' (fragile, not cross stage)\n" " --auto-sampled-textures Removes sampler variables and converts\n" - " existing textures to combined image-samplers\n" + " existing textures to sampled textures\n" " --client {vulkan|opengl} see -V and -G\n" " --depfile writes depfile for build systems\n" " --dump-builtin-symbols prints builtin symbol table prior each compile\n" From 4c09598526318598218ba3d7192aad769cda70c5 Mon Sep 17 00:00:00 2001 From: okuoku Date: Sun, 2 May 2021 03:47:00 +0900 Subject: [PATCH 162/365] Set CMake policy CMP0054 to NEW to silence warning CMAKE_SYSTEM_NAME variable might evaluate to existing variable such as CYGWIN. This setting also matches with SPIRV-Tools. --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 70fe3fe924..0600516ee0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -37,6 +37,9 @@ cmake_minimum_required(VERSION 2.8.12) if (POLICY CMP0048) cmake_policy(SET CMP0048 NEW) endif() +if(POLICY CMP0054) + cmake_policy(SET CMP0054 NEW) +endif() project(glslang LANGUAGES CXX) From 6113723e40e1b141de0dbd7f85d6b2fc16b48de6 Mon Sep 17 00:00:00 2001 From: Panagiotis Christopoulos Charitos Date: Mon, 3 May 2021 14:26:11 +0200 Subject: [PATCH 163/365] Add support for 64bit integer types and 64bit integer vector types to bitCount() builtin. Fixes #2630 --- Test/baseResults/spv.int64.frag.out | 140 ++++++++++++---------- Test/spv.int64.frag | 8 ++ glslang/MachineIndependent/Initialize.cpp | 10 ++ 3 files changed, 95 insertions(+), 63 deletions(-) diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out index 4b5e450925..b7a93a5203 100644 --- a/Test/baseResults/spv.int64.frag.out +++ b/Test/baseResults/spv.int64.frag.out @@ -2,7 +2,7 @@ spv.int64.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 489 +// Id's are bound by 499 Capability Shader Capability Float64 @@ -47,45 +47,45 @@ Validation failed Name 392 "iv" Name 397 "uv" Name 401 "bv" - Name 462 "Block" - MemberName 462(Block) 0 "i64v" - MemberName 462(Block) 1 "u64" - Name 464 "block" - Name 465 "si64" - Name 466 "su64" - Name 467 "si" - Name 468 "su" - Name 469 "sb" - Name 470 "su64inc" - Name 471 "i64_to_b" - Name 472 "u64_to_b" - Name 473 "b_to_i64" - Name 474 "b_to_u64" - Name 475 "i64_to_i" - Name 476 "i_to_i64" - Name 477 "u64_to_u" - Name 478 "u_to_u64" - Name 479 "u64_to_i64" - Name 480 "i64_to_u64" - Name 482 "u64_to_i" - Name 484 "i_to_u64" - Name 486 "i64_to_u" - Name 488 "u_to_i64" + Name 472 "Block" + MemberName 472(Block) 0 "i64v" + MemberName 472(Block) 1 "u64" + Name 474 "block" + Name 475 "si64" + Name 476 "su64" + Name 477 "si" + Name 478 "su" + Name 479 "sb" + Name 480 "su64inc" + Name 481 "i64_to_b" + Name 482 "u64_to_b" + Name 483 "b_to_i64" + Name 484 "b_to_u64" + Name 485 "i64_to_i" + Name 486 "i_to_i64" + Name 487 "u64_to_u" + Name 488 "u_to_u64" + Name 489 "u64_to_i64" + Name 490 "i64_to_u64" + Name 492 "u64_to_i" + Name 494 "i_to_u64" + Name 496 "i64_to_u" + Name 498 "u_to_i64" MemberDecorate 28(Uniforms) 0 Offset 0 Decorate 28(Uniforms) Block Decorate 30 DescriptorSet 0 Decorate 30 Binding 0 - MemberDecorate 462(Block) 0 Offset 0 - MemberDecorate 462(Block) 1 Offset 24 - Decorate 462(Block) Block - Decorate 464(block) DescriptorSet 0 - Decorate 464(block) Binding 1 - Decorate 465(si64) SpecId 100 - Decorate 466(su64) SpecId 101 - Decorate 467(si) SpecId 102 - Decorate 468(su) SpecId 103 - Decorate 469(sb) SpecId 104 - Decorate 470(su64inc) SpecId 105 + MemberDecorate 472(Block) 0 Offset 0 + MemberDecorate 472(Block) 1 Offset 24 + Decorate 472(Block) Block + Decorate 474(block) DescriptorSet 0 + Decorate 474(block) Binding 1 + Decorate 475(si64) SpecId 100 + Decorate 476(su64) SpecId 101 + Decorate 477(si) SpecId 102 + Decorate 478(su) SpecId 103 + Decorate 479(sb) SpecId 104 + Decorate 480(su64inc) SpecId 105 2: TypeVoid 3: TypeFunction 2 14: TypeInt 64 0 @@ -166,33 +166,33 @@ Validation failed 390: 74(ivec2) ConstantComposite 388 389 395: 81(ivec2) ConstantComposite 217 22 400: TypePointer Function 368(bvec3) - 462(Block): TypeStruct 136(i64vec3) 14(int64_t) - 463: TypePointer Uniform 462(Block) - 464(block): 463(ptr) Variable Uniform - 465(si64): 18(int64_t) SpecConstant 4294967286 4294967295 - 466(su64): 14(int64_t) SpecConstant 20 0 - 467(si): 31(int) SpecConstant 4294967291 - 468(su): 21(int) SpecConstant 4 - 469(sb): 55(bool) SpecConstantTrue - 470(su64inc): 14(int64_t) SpecConstantOp 128 466(su64) 70 - 471(i64_to_b): 55(bool) SpecConstantOp 171 465(si64) 69 - 472(u64_to_b): 55(bool) SpecConstantOp 171 466(su64) 69 - 473(b_to_i64): 18(int64_t) SpecConstantOp 169 469(sb) 61 60 - 474(b_to_u64): 14(int64_t) SpecConstantOp 169 469(sb) 70 69 - 475(i64_to_i): 31(int) SpecConstantOp 114 465(si64) - 476(i_to_i64): 18(int64_t) SpecConstantOp 114 467(si) - 477(u64_to_u): 21(int) SpecConstantOp 113 466(su64) - 478(u_to_u64): 14(int64_t) SpecConstantOp 113 468(su) - 479(u64_to_i64): 18(int64_t) SpecConstantOp 128 466(su64) 69 - 480(i64_to_u64): 14(int64_t) SpecConstantOp 128 465(si64) 69 - 481: 21(int) SpecConstantOp 113 466(su64) - 482(u64_to_i): 31(int) SpecConstantOp 128 481 227 - 483: 18(int64_t) SpecConstantOp 114 467(si) - 484(i_to_u64): 14(int64_t) SpecConstantOp 128 483 69 - 485: 31(int) SpecConstantOp 114 465(si64) - 486(i64_to_u): 21(int) SpecConstantOp 128 485 227 - 487: 14(int64_t) SpecConstantOp 113 468(su) - 488(u_to_i64): 18(int64_t) SpecConstantOp 128 487 69 + 472(Block): TypeStruct 136(i64vec3) 14(int64_t) + 473: TypePointer Uniform 472(Block) + 474(block): 473(ptr) Variable Uniform + 475(si64): 18(int64_t) SpecConstant 4294967286 4294967295 + 476(su64): 14(int64_t) SpecConstant 20 0 + 477(si): 31(int) SpecConstant 4294967291 + 478(su): 21(int) SpecConstant 4 + 479(sb): 55(bool) SpecConstantTrue + 480(su64inc): 14(int64_t) SpecConstantOp 128 476(su64) 70 + 481(i64_to_b): 55(bool) SpecConstantOp 171 475(si64) 69 + 482(u64_to_b): 55(bool) SpecConstantOp 171 476(su64) 69 + 483(b_to_i64): 18(int64_t) SpecConstantOp 169 479(sb) 61 60 + 484(b_to_u64): 14(int64_t) SpecConstantOp 169 479(sb) 70 69 + 485(i64_to_i): 31(int) SpecConstantOp 114 475(si64) + 486(i_to_i64): 18(int64_t) SpecConstantOp 114 477(si) + 487(u64_to_u): 21(int) SpecConstantOp 113 476(su64) + 488(u_to_u64): 14(int64_t) SpecConstantOp 113 478(su) + 489(u64_to_i64): 18(int64_t) SpecConstantOp 128 476(su64) 69 + 490(i64_to_u64): 14(int64_t) SpecConstantOp 128 475(si64) 69 + 491: 21(int) SpecConstantOp 113 476(su64) + 492(u64_to_i): 31(int) SpecConstantOp 128 491 227 + 493: 18(int64_t) SpecConstantOp 114 477(si) + 494(i_to_u64): 14(int64_t) SpecConstantOp 128 493 69 + 495: 31(int) SpecConstantOp 114 475(si64) + 496(i64_to_u): 21(int) SpecConstantOp 128 495 227 + 497: 14(int64_t) SpecConstantOp 113 478(su) + 498(u_to_i64): 18(int64_t) SpecConstantOp 128 497 69 4(main): 2 Function None 3 5: Label Store 16(u64Max) 17 @@ -681,5 +681,19 @@ Validation failed 460: 368(bvec3) Load 401(bv) 461: 368(bvec3) VectorShuffle 460 459 3 4 2 Store 401(bv) 461 + 462: 14(int64_t) Load 301(u64) + 463: 18(int64_t) ExtInst 1(GLSL.std.450) 73(FindILsb) 462 + Store 289(i64) 463 + 464: 14(int64_t) Load 301(u64) + 465: 65(i64vec2) CompositeConstruct 464 464 + 466: 52(i64vec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 465 + Store 286(i64v) 466 + 467: 14(int64_t) Load 301(u64) + 468: 18(int64_t) BitCount 467 + Store 289(i64) 468 + 469: 14(int64_t) Load 301(u64) + 470: 65(i64vec2) CompositeConstruct 469 469 + 471: 52(i64vec2) BitCount 470 + Store 286(i64v) 471 Return FunctionEnd diff --git a/Test/spv.int64.frag b/Test/spv.int64.frag index 5390fb7513..0f80d55974 100644 --- a/Test/spv.int64.frag +++ b/Test/spv.int64.frag @@ -228,6 +228,14 @@ void builtinFuncs() // notEqual() bv = notEqual(u64v, u64vec3(u64)); bv.xy = notEqual(i64v, i64vec2(i64)); + + // findLSB() + i64 = findLSB(u64); + i64v = findLSB(u64vec2(u64)); + + // bitCount() + i64 = bitCount(u64); + i64v = bitCount(u64vec2(u64)); } // Type conversion for specialization constant diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 7f10a0a24d..321a902862 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1261,6 +1261,16 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "bvec3 notEqual(u64vec3, u64vec3);" "bvec4 notEqual(u64vec4, u64vec4);" + "int64_t bitCount(int64_t);" + "i64vec2 bitCount(i64vec2);" + "i64vec3 bitCount(i64vec3);" + "i64vec4 bitCount(i64vec4);" + + "int64_t bitCount(uint64_t);" + "i64vec2 bitCount(u64vec2);" + "i64vec3 bitCount(u64vec3);" + "i64vec4 bitCount(u64vec4);" + "int64_t findLSB(int64_t);" "i64vec2 findLSB(i64vec2);" "i64vec3 findLSB(i64vec3);" From 1464d036b8bfcd80a777c272d68cf756493f4d43 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 6 May 2021 18:01:20 -0600 Subject: [PATCH 164/365] Fix arrays dimensioned with spec constant sized gl_WorkGroupSize --- SPIRV/GlslangToSpv.cpp | 2 ++ Test/baseResults/spv.noWorkgroup.comp.out | 14 +++++++++++++- Test/spv.noWorkgroup.comp | 2 ++ 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 81aacd1121..1d8f199458 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -4236,6 +4236,8 @@ spv::Id TGlslangToSpvTraverser::makeArraySizeId(const glslang::TArraySizes& arra glslang::TIntermTyped* specNode = arraySizes.getDimNode(dim); if (specNode != nullptr) { builder.clearAccessChain(); + SpecConstantOpModeGuard spec_constant_op_mode_setter(&builder); + spec_constant_op_mode_setter.turnOnSpecConstantOpMode(); specNode->traverse(this); return accessChainLoad(specNode->getAsTyped()->getType()); } diff --git a/Test/baseResults/spv.noWorkgroup.comp.out b/Test/baseResults/spv.noWorkgroup.comp.out index 9cd130c029..a8969e026f 100644 --- a/Test/baseResults/spv.noWorkgroup.comp.out +++ b/Test/baseResults/spv.noWorkgroup.comp.out @@ -1,7 +1,7 @@ spv.noWorkgroup.comp // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 12 +// Id's are bound by 23 Capability Shader 1: ExtInstImport "GLSL.std.450" @@ -10,6 +10,7 @@ spv.noWorkgroup.comp ExecutionMode 4 LocalSize 1 1 1 Source GLSL 450 Name 4 "main" + Name 22 "keys" Decorate 7 SpecId 18 Decorate 8 SpecId 10 Decorate 9 SpecId 19 @@ -22,6 +23,17 @@ spv.noWorkgroup.comp 9: 6(int) SpecConstant 1 10: TypeVector 6(int) 3 11: 10(ivec3) SpecConstantComposite 7 8 9 + 12: 6(int) Constant 0 + 13: 6(int) SpecConstantOp 81 11 0 + 14: 6(int) Constant 1 + 15: 6(int) SpecConstantOp 81 11 1(GLSL.std.450) + 16: 6(int) SpecConstantOp 132 13 15 + 17: TypeArray 6(int) 16 + 18: 6(int) Constant 2 + 19: 6(int) SpecConstantOp 81 11 2 + 20: TypeArray 17 19 + 21: TypePointer Workgroup 20 + 22(keys): 21(ptr) Variable Workgroup 4(main): 2 Function None 3 5: Label Return diff --git a/Test/spv.noWorkgroup.comp b/Test/spv.noWorkgroup.comp index 0c77f278fc..37df38873f 100644 --- a/Test/spv.noWorkgroup.comp +++ b/Test/spv.noWorkgroup.comp @@ -2,6 +2,8 @@ layout(local_size_x_id = 18, local_size_y_id=10,local_size_z_id = 19) in; +shared uint keys[gl_WorkGroupSize.z][gl_WorkGroupSize.x * gl_WorkGroupSize.y]; + void main() { } From eaf2af64516d76bc24cae1023ebd59ada857c1b8 Mon Sep 17 00:00:00 2001 From: xantares Date: Sat, 8 May 2021 10:37:37 +0200 Subject: [PATCH 165/365] Dont export inline TObjectReflection::getType() Fixes mingw build Closes #2460 --- glslang/Public/ShaderLang.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index ff5c20c18a..d2a4bf40a0 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -722,7 +722,7 @@ class TObjectReflection { public: GLSLANG_EXPORT TObjectReflection(const std::string& pName, const TType& pType, int pOffset, int pGLDefineType, int pSize, int pIndex); - GLSLANG_EXPORT const TType* getType() const { return type; } + const TType* getType() const { return type; } GLSLANG_EXPORT int getBinding() const; GLSLANG_EXPORT void dump() const; static TObjectReflection badReflection() { return TObjectReflection(); } From adfa0938a2b783a22c164e67d25055dd2025ac1c Mon Sep 17 00:00:00 2001 From: tgfrerer Date: Tue, 11 May 2021 09:42:11 +0100 Subject: [PATCH 166/365] fix error message for hlslGrammar::acceptConstructor Fix the error message for when an erroneous HLSL constructor statement is detected. Prior to this change, such error messages would not show correct file path and line number information. Additionally, update test data to account for updated error messages. --- Test/baseResults/hlsl.aliasOpaque.frag.out | 12 +- Test/baseResults/hlsl.array.frag.out | 40 +- .../hlsl.attribute.expression.comp.out | 20 +- .../hlsl.calculatelod.dx10.frag.out | 84 +- .../hlsl.calculatelodunclamped.dx10.frag.out | 84 +- Test/baseResults/hlsl.comparison.vec.frag.out | 20 +- Test/baseResults/hlsl.conditional.frag.out | 40 +- Test/baseResults/hlsl.constructexpr.frag.out | 24 +- Test/baseResults/hlsl.constructimat.frag.out | 396 ++--- Test/baseResults/hlsl.coverage.frag.out | 20 +- .../hlsl.earlydepthstencil.frag.out | 4 +- Test/baseResults/hlsl.flatten.return.frag.out | 32 +- Test/baseResults/hlsl.flattenOpaque.frag.out | 48 +- .../hlsl.flattenOpaqueInit.vert.out | 12 +- .../hlsl.flattenOpaqueInitMix.vert.out | 4 +- Test/baseResults/hlsl.flattenSubset2.frag.out | 20 +- .../hlsl.gather.array.dx10.frag.out | 108 +- .../hlsl.gather.basic.dx10.frag.out | 84 +- .../hlsl.gather.basic.dx10.vert.out | 104 +- .../hlsl.gather.offset.dx10.frag.out | 72 +- .../hlsl.gather.offsetarray.dx10.frag.out | 84 +- .../hlsl.gathercmpRGBA.offset.dx10.frag.out | 72 +- .../hlsl.getdimensions.dx10.vert.out | 20 +- Test/baseResults/hlsl.groupid.comp.out | 20 +- Test/baseResults/hlsl.gs-hs-mix.tesc.out | 12 +- .../hlsl.identifier.sample.frag.out | 20 +- Test/baseResults/hlsl.implicitBool.frag.out | 20 +- Test/baseResults/hlsl.init.frag.out | 68 +- Test/baseResults/hlsl.init2.frag.out | 176 +-- Test/baseResults/hlsl.inoutquals.frag.out | 4 +- .../baseResults/hlsl.intrinsic.frexp.frag.out | 48 +- .../baseResults/hlsl.intrinsic.frexp.vert.out | 48 +- Test/baseResults/hlsl.intrinsics.comp.out | 48 +- Test/baseResults/hlsl.intrinsics.frag.out | 416 ++--- .../hlsl.intrinsics.negative.comp.out | 48 +- .../hlsl.intrinsics.negative.frag.out | 176 +-- .../hlsl.intrinsics.negative.vert.out | 176 +-- .../hlsl.intrinsics.promote.down.frag.out | 20 +- Test/baseResults/hlsl.intrinsics.vert.out | 296 ++-- Test/baseResults/hlsl.layoutOverride.vert.out | 12 +- .../baseResults/hlsl.load.basic.dx10.vert.out | 20 +- Test/baseResults/hlsl.matType.bool.frag.out | 20 +- Test/baseResults/hlsl.matType.int.frag.out | 20 +- Test/baseResults/hlsl.mip.negative.frag.out | 16 +- Test/baseResults/hlsl.mip.negative2.frag.out | 12 +- Test/baseResults/hlsl.mip.operator.frag.out | 68 +- .../hlsl.nonstaticMemberFunction.frag.out | 72 +- Test/baseResults/hlsl.overload.frag.out | 8 +- Test/baseResults/hlsl.params.default.frag.out | 60 +- .../hlsl.params.default.negative.frag.out | 60 +- .../hlsl.partialFlattenLocal.vert.out | 32 +- Test/baseResults/hlsl.pp.line.frag.out | 4 +- Test/baseResults/hlsl.precedence.frag.out | 4 +- Test/baseResults/hlsl.promote.atomic.frag.out | 20 +- Test/baseResults/hlsl.promote.vec1.frag.out | 20 +- Test/baseResults/hlsl.promotions.frag.out | 4 +- Test/baseResults/hlsl.rw.bracket.frag.out | 136 +- .../hlsl.rw.scalar.bracket.frag.out | 16 +- Test/baseResults/hlsl.rw.swizzle.frag.out | 32 +- .../baseResults/hlsl.rw.vec2.bracket.frag.out | 124 +- .../hlsl.sample.array.dx10.frag.out | 144 +- .../hlsl.sample.basic.dx10.frag.out | 132 +- Test/baseResults/hlsl.sample.dx9.frag.out | 276 ++-- Test/baseResults/hlsl.sample.dx9.vert.out | 100 +- .../hlsl.sample.offset.dx10.frag.out | 168 +- .../hlsl.sample.offsetarray.dx10.frag.out | 120 +- .../hlsl.samplebias.array.dx10.frag.out | 144 +- .../hlsl.samplebias.basic.dx10.frag.out | 132 +- .../hlsl.samplebias.offset.dx10.frag.out | 168 +- .../hlsl.samplebias.offsetarray.dx10.frag.out | 120 +- .../hlsl.samplecmp.array.dx10.frag.out | 144 +- .../hlsl.samplecmp.basic.dx10.frag.out | 84 +- .../hlsl.samplecmp.negative.frag.out | 24 +- .../hlsl.samplecmp.negative2.frag.out | 24 +- .../hlsl.samplecmp.offset.dx10.frag.out | 72 +- .../hlsl.samplecmp.offsetarray.dx10.frag.out | 120 +- ...lsl.samplecmplevelzero.array.dx10.frag.out | 144 +- ...lsl.samplecmplevelzero.basic.dx10.frag.out | 84 +- ...sl.samplecmplevelzero.offset.dx10.frag.out | 72 +- ...mplecmplevelzero.offsetarray.dx10.frag.out | 120 +- .../hlsl.samplegrad.array.dx10.frag.out | 312 ++-- .../hlsl.samplegrad.basic.dx10.frag.out | 396 ++--- .../hlsl.samplegrad.basic.dx10.vert.out | 416 ++--- .../hlsl.samplegrad.offset.dx10.frag.out | 336 ++-- .../hlsl.samplegrad.offsetarray.dx10.frag.out | 192 +-- .../hlsl.samplelevel.array.dx10.frag.out | 144 +- .../hlsl.samplelevel.basic.dx10.frag.out | 132 +- .../hlsl.samplelevel.basic.dx10.vert.out | 152 +- .../hlsl.samplelevel.offset.dx10.frag.out | 168 +- ...hlsl.samplelevel.offsetarray.dx10.frag.out | 120 +- Test/baseResults/hlsl.scalar2matrix.frag.out | 68 +- Test/baseResults/hlsl.semantic-1.vert.out | 16 +- .../hlsl.singleArgIntPromo.vert.out | 20 +- .../hlsl.staticMemberFunction.frag.out | 40 +- Test/baseResults/hlsl.stringtoken.frag.out | 20 +- .../hlsl.struct.split.nested.geom.out | 32 +- .../hlsl.structbuffer.append.fn.frag.out | 20 +- .../hlsl.structbuffer.append.frag.out | 20 +- .../hlsl.structbuffer.byte.frag.out | 8 +- .../hlsl.structbuffer.coherent.frag.out | 4 +- Test/baseResults/hlsl.structbuffer.frag.out | 4 +- .../hlsl.structbuffer.incdec.frag.out | 4 +- .../baseResults/hlsl.structbuffer.rw.frag.out | 4 +- Test/baseResults/hlsl.swizzle.frag.out | 20 +- .../baseResults/hlsl.synthesizeInput.frag.out | 4 +- Test/baseResults/hlsl.targetStruct1.frag.out | 4 +- Test/baseResults/hlsl.targetStruct2.frag.out | 4 +- Test/baseResults/hlsl.templatetypes.frag.out | 560 +++---- Test/baseResults/hlsl.texture.struct.frag.out | 84 +- .../baseResults/hlsl.texture.subvec4.frag.out | 96 +- Test/baseResults/hlsl.this.frag.out | 48 +- Test/baseResults/hlsl.tx.overload.frag.out | 40 +- Test/baseResults/hlsl.type.half.frag.out | 20 +- .../hlsl.type.type.conversion.all.frag.out | 1392 ++++++++--------- .../hlsl.type.type.conversion.valid.frag.out | 1392 ++++++++--------- Test/baseResults/hlsl.wavequery.frag.out | 40 +- glslang/HLSL/hlslGrammar.cpp | 2 +- 117 files changed, 6243 insertions(+), 6243 deletions(-) diff --git a/Test/baseResults/hlsl.aliasOpaque.frag.out b/Test/baseResults/hlsl.aliasOpaque.frag.out index 9218a82b1c..b7c2c9e256 100644 --- a/Test/baseResults/hlsl.aliasOpaque.frag.out +++ b/Test/baseResults/hlsl.aliasOpaque.frag.out @@ -23,9 +23,9 @@ gl_FragCoord origin is upper left 0:13 's' ( in structure{ temp sampler ss, temp float a, temp texture2D tex}) 0:13 Constant: 0:13 0 (const int) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:13 Constant: +0:13 0.200000 +0:13 0.300000 0:17 Function Definition: @main( ( temp 4-component vector of float) 0:17 Function Parameters: 0:? Sequence @@ -96,9 +96,9 @@ gl_FragCoord origin is upper left 0:13 's' ( in structure{ temp sampler ss, temp float a, temp texture2D tex}) 0:13 Constant: 0:13 0 (const int) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:13 Constant: +0:13 0.200000 +0:13 0.300000 0:17 Function Definition: @main( ( temp 4-component vector of float) 0:17 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.array.frag.out b/Test/baseResults/hlsl.array.frag.out index 5b6afbdcb8..269177294d 100644 --- a/Test/baseResults/hlsl.array.frag.out +++ b/Test/baseResults/hlsl.array.frag.out @@ -5,21 +5,21 @@ gl_FragCoord origin is upper left 0:7 Sequence 0:7 move second child to first child ( temp 4-component vector of float) 0:7 'C' ( global 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:7 Constant: +0:7 1.000000 +0:7 2.000000 +0:7 3.000000 +0:7 4.000000 0:11 Sequence 0:11 move second child to first child ( temp 2-element array of 4-component vector of float) 0:11 'c2' ( global 2-element array of 4-component vector of float) 0:11 Construct vec4 ( temp 2-element array of 4-component vector of float) 0:11 'C' ( global 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:11 Constant: +0:11 1.000000 +0:11 2.000000 +0:11 3.000000 +0:11 4.000000 0:14 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) 0:14 Function Parameters: 0:14 'i' ( in int) @@ -152,21 +152,21 @@ gl_FragCoord origin is upper left 0:7 Sequence 0:7 move second child to first child ( temp 4-component vector of float) 0:7 'C' ( global 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:7 Constant: +0:7 1.000000 +0:7 2.000000 +0:7 3.000000 +0:7 4.000000 0:11 Sequence 0:11 move second child to first child ( temp 2-element array of 4-component vector of float) 0:11 'c2' ( global 2-element array of 4-component vector of float) 0:11 Construct vec4 ( temp 2-element array of 4-component vector of float) 0:11 'C' ( global 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:11 Constant: +0:11 1.000000 +0:11 2.000000 +0:11 3.000000 +0:11 4.000000 0:14 Function Definition: @PixelShaderFunction(i1;vf4[3]; ( temp 4-component vector of float) 0:14 Function Parameters: 0:14 'i' ( in int) diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out index 3fc9b5bd12..bee8efe03d 100644 --- a/Test/baseResults/hlsl.attribute.expression.comp.out +++ b/Test/baseResults/hlsl.attribute.expression.comp.out @@ -23,11 +23,11 @@ local_size = (4, 6, 8) 0:11 Pre-Increment ( temp int) 0:11 'x' ( temp int) 0:14 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:14 Constant: +0:14 0.000000 +0:14 0.000000 +0:14 0.000000 +0:14 0.000000 0:9 Function Definition: main( ( temp void) 0:9 Function Parameters: 0:? Sequence @@ -66,11 +66,11 @@ local_size = (4, 6, 8) 0:11 Pre-Increment ( temp int) 0:11 'x' ( temp int) 0:14 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:14 Constant: +0:14 0.000000 +0:14 0.000000 +0:14 0.000000 +0:14 0.000000 0:9 Function Definition: main( ( temp void) 0:9 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.calculatelod.dx10.frag.out b/Test/baseResults/hlsl.calculatelod.dx10.frag.out index 4ee24818b2..d4367a0956 100644 --- a/Test/baseResults/hlsl.calculatelod.dx10.frag.out +++ b/Test/baseResults/hlsl.calculatelod.dx10.frag.out @@ -50,9 +50,9 @@ using depth_any 0:32 Construct combined texture-sampler ( temp sampler2DArray) 0:32 'g_tTex2df4a' ( uniform texture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:32 Constant: +0:32 0.100000 +0:32 0.200000 0:32 Constant: 0:32 0 (const int) 0:33 Sequence @@ -63,9 +63,9 @@ using depth_any 0:33 Construct combined texture-sampler ( temp isampler2DArray) 0:33 'g_tTex2di4a' ( uniform itexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:33 Constant: +0:33 0.300000 +0:33 0.400000 0:33 Constant: 0:33 0 (const int) 0:34 Sequence @@ -76,9 +76,9 @@ using depth_any 0:34 Construct combined texture-sampler ( temp usampler2DArray) 0:34 'g_tTex2du4a' ( uniform utexture2DArray) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:34 Constant: +0:34 0.500000 +0:34 0.600000 0:34 Constant: 0:34 0 (const int) 0:36 Sequence @@ -89,10 +89,10 @@ using depth_any 0:36 Construct combined texture-sampler ( temp samplerCubeArray) 0:36 'g_tTexcdf4a' ( uniform textureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 +0:36 0.300000 0:36 Constant: 0:36 0 (const int) 0:37 Sequence @@ -103,10 +103,10 @@ using depth_any 0:37 Construct combined texture-sampler ( temp isamplerCubeArray) 0:37 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:37 Constant: +0:37 0.400000 +0:37 0.500000 +0:37 0.600000 0:37 Constant: 0:37 0 (const int) 0:38 Sequence @@ -117,10 +117,10 @@ using depth_any 0:38 Construct combined texture-sampler ( temp usamplerCubeArray) 0:38 'g_tTexcdu4a' ( uniform utextureCubeArray) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:38 Constant: +0:38 0.700000 +0:38 0.800000 +0:38 0.900000 0:38 Constant: 0:38 0 (const int) 0:40 move second child to first child ( temp 4-component vector of float) @@ -231,9 +231,9 @@ using depth_any 0:32 Construct combined texture-sampler ( temp sampler2DArray) 0:32 'g_tTex2df4a' ( uniform texture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:32 Constant: +0:32 0.100000 +0:32 0.200000 0:32 Constant: 0:32 0 (const int) 0:33 Sequence @@ -244,9 +244,9 @@ using depth_any 0:33 Construct combined texture-sampler ( temp isampler2DArray) 0:33 'g_tTex2di4a' ( uniform itexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:33 Constant: +0:33 0.300000 +0:33 0.400000 0:33 Constant: 0:33 0 (const int) 0:34 Sequence @@ -257,9 +257,9 @@ using depth_any 0:34 Construct combined texture-sampler ( temp usampler2DArray) 0:34 'g_tTex2du4a' ( uniform utexture2DArray) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:34 Constant: +0:34 0.500000 +0:34 0.600000 0:34 Constant: 0:34 0 (const int) 0:36 Sequence @@ -270,10 +270,10 @@ using depth_any 0:36 Construct combined texture-sampler ( temp samplerCubeArray) 0:36 'g_tTexcdf4a' ( uniform textureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 +0:36 0.300000 0:36 Constant: 0:36 0 (const int) 0:37 Sequence @@ -284,10 +284,10 @@ using depth_any 0:37 Construct combined texture-sampler ( temp isamplerCubeArray) 0:37 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:37 Constant: +0:37 0.400000 +0:37 0.500000 +0:37 0.600000 0:37 Constant: 0:37 0 (const int) 0:38 Sequence @@ -298,10 +298,10 @@ using depth_any 0:38 Construct combined texture-sampler ( temp usamplerCubeArray) 0:38 'g_tTexcdu4a' ( uniform utextureCubeArray) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:38 Constant: +0:38 0.700000 +0:38 0.800000 +0:38 0.900000 0:38 Constant: 0:38 0 (const int) 0:40 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out index 6abe22c050..8a4be02d70 100644 --- a/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out +++ b/Test/baseResults/hlsl.calculatelodunclamped.dx10.frag.out @@ -50,9 +50,9 @@ using depth_any 0:32 Construct combined texture-sampler ( temp sampler2DArray) 0:32 'g_tTex2df4a' ( uniform texture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:32 Constant: +0:32 0.100000 +0:32 0.200000 0:32 Constant: 0:32 1 (const int) 0:33 Sequence @@ -63,9 +63,9 @@ using depth_any 0:33 Construct combined texture-sampler ( temp isampler2DArray) 0:33 'g_tTex2di4a' ( uniform itexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:33 Constant: +0:33 0.300000 +0:33 0.400000 0:33 Constant: 0:33 1 (const int) 0:34 Sequence @@ -76,9 +76,9 @@ using depth_any 0:34 Construct combined texture-sampler ( temp usampler2DArray) 0:34 'g_tTex2du4a' ( uniform utexture2DArray) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:34 Constant: +0:34 0.500000 +0:34 0.600000 0:34 Constant: 0:34 1 (const int) 0:36 Sequence @@ -89,10 +89,10 @@ using depth_any 0:36 Construct combined texture-sampler ( temp samplerCubeArray) 0:36 'g_tTexcdf4a' ( uniform textureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 +0:36 0.300000 0:36 Constant: 0:36 1 (const int) 0:37 Sequence @@ -103,10 +103,10 @@ using depth_any 0:37 Construct combined texture-sampler ( temp isamplerCubeArray) 0:37 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:37 Constant: +0:37 0.400000 +0:37 0.500000 +0:37 0.600000 0:37 Constant: 0:37 1 (const int) 0:38 Sequence @@ -117,10 +117,10 @@ using depth_any 0:38 Construct combined texture-sampler ( temp usamplerCubeArray) 0:38 'g_tTexcdu4a' ( uniform utextureCubeArray) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:38 Constant: +0:38 0.700000 +0:38 0.800000 +0:38 0.900000 0:38 Constant: 0:38 1 (const int) 0:40 move second child to first child ( temp 4-component vector of float) @@ -231,9 +231,9 @@ using depth_any 0:32 Construct combined texture-sampler ( temp sampler2DArray) 0:32 'g_tTex2df4a' ( uniform texture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:32 Constant: +0:32 0.100000 +0:32 0.200000 0:32 Constant: 0:32 1 (const int) 0:33 Sequence @@ -244,9 +244,9 @@ using depth_any 0:33 Construct combined texture-sampler ( temp isampler2DArray) 0:33 'g_tTex2di4a' ( uniform itexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:33 Constant: +0:33 0.300000 +0:33 0.400000 0:33 Constant: 0:33 1 (const int) 0:34 Sequence @@ -257,9 +257,9 @@ using depth_any 0:34 Construct combined texture-sampler ( temp usampler2DArray) 0:34 'g_tTex2du4a' ( uniform utexture2DArray) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:34 Constant: +0:34 0.500000 +0:34 0.600000 0:34 Constant: 0:34 1 (const int) 0:36 Sequence @@ -270,10 +270,10 @@ using depth_any 0:36 Construct combined texture-sampler ( temp samplerCubeArray) 0:36 'g_tTexcdf4a' ( uniform textureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 +0:36 0.300000 0:36 Constant: 0:36 1 (const int) 0:37 Sequence @@ -284,10 +284,10 @@ using depth_any 0:37 Construct combined texture-sampler ( temp isamplerCubeArray) 0:37 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:37 Constant: +0:37 0.400000 +0:37 0.500000 +0:37 0.600000 0:37 Constant: 0:37 1 (const int) 0:38 Sequence @@ -298,10 +298,10 @@ using depth_any 0:38 Construct combined texture-sampler ( temp usamplerCubeArray) 0:38 'g_tTexcdu4a' ( uniform utextureCubeArray) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:38 Constant: +0:38 0.700000 +0:38 0.800000 +0:38 0.900000 0:38 Constant: 0:38 1 (const int) 0:40 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.comparison.vec.frag.out b/Test/baseResults/hlsl.comparison.vec.frag.out index 1bf2cedb36..9fec433834 100644 --- a/Test/baseResults/hlsl.comparison.vec.frag.out +++ b/Test/baseResults/hlsl.comparison.vec.frag.out @@ -9,11 +9,11 @@ gl_FragCoord origin is upper left 0:5 Sequence 0:5 move second child to first child ( temp 4-component vector of float) 0:5 'v04' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:5 Constant: +0:5 0.000000 +0:5 0.000000 +0:5 0.000000 +0:5 0.000000 0:6 Sequence 0:6 move second child to first child ( temp float) 0:6 'v01' ( temp float) @@ -142,11 +142,11 @@ gl_FragCoord origin is upper left 0:5 Sequence 0:5 move second child to first child ( temp 4-component vector of float) 0:5 'v04' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:5 Constant: +0:5 0.000000 +0:5 0.000000 +0:5 0.000000 +0:5 0.000000 0:6 Sequence 0:6 move second child to first child ( temp float) 0:6 'v01' ( temp float) diff --git a/Test/baseResults/hlsl.conditional.frag.out b/Test/baseResults/hlsl.conditional.frag.out index 84396d58ac..99f2538c6e 100644 --- a/Test/baseResults/hlsl.conditional.frag.out +++ b/Test/baseResults/hlsl.conditional.frag.out @@ -228,17 +228,17 @@ gl_FragCoord origin is upper left 0:40 'f' ( temp 4-component vector of float) 0:40 Function Call: vectorCond( ( temp 4-component vector of float) 0:40 Function Call: scalarCond( ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:41 Construct vec4 ( temp 4-component vector of float) 0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float) -0:? Constant: -0:? true (const bool) -0:? false (const bool) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? Constant: -0:? 3.000000 -0:? 4.000000 +0:41 Constant: +0:41 true (const bool) +0:41 false (const bool) +0:41 Constant: +0:41 1.000000 +0:41 2.000000 +0:41 Constant: +0:41 3.000000 +0:41 4.000000 0:41 Constant: 0:41 10.000000 0:41 Constant: @@ -491,17 +491,17 @@ gl_FragCoord origin is upper left 0:40 'f' ( temp 4-component vector of float) 0:40 Function Call: vectorCond( ( temp 4-component vector of float) 0:40 Function Call: scalarCond( ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:41 Construct vec4 ( temp 4-component vector of float) 0:41 Function Call: fbSelect(vb2;vf2;vf2; ( temp 2-component vector of float) -0:? Constant: -0:? true (const bool) -0:? false (const bool) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? Constant: -0:? 3.000000 -0:? 4.000000 +0:41 Constant: +0:41 true (const bool) +0:41 false (const bool) +0:41 Constant: +0:41 1.000000 +0:41 2.000000 +0:41 Constant: +0:41 3.000000 +0:41 4.000000 0:41 Constant: 0:41 10.000000 0:41 Constant: diff --git a/Test/baseResults/hlsl.constructexpr.frag.out b/Test/baseResults/hlsl.constructexpr.frag.out index a6d387f38a..7b25ae8434 100644 --- a/Test/baseResults/hlsl.constructexpr.frag.out +++ b/Test/baseResults/hlsl.constructexpr.frag.out @@ -18,12 +18,12 @@ gl_FragCoord origin is upper left 0:11 Constant: 0:11 8 (const int) 0:12 Comma ( temp 2-component vector of float) -0:? Constant: -0:? 9.000000 -0:? 10.000000 -0:? Constant: -0:? 11.000000 -0:? 12.000000 +0:12 Constant: +0:12 9.000000 +0:12 10.000000 +0:12 Constant: +0:12 11.000000 +0:12 12.000000 0:15 move second child to first child ( temp 4-component vector of float) 0:15 color: direct index for structure ( temp 4-component vector of float) 0:15 'ps_output' ( temp structure{ temp 4-component vector of float color}) @@ -72,12 +72,12 @@ gl_FragCoord origin is upper left 0:11 Constant: 0:11 8 (const int) 0:12 Comma ( temp 2-component vector of float) -0:? Constant: -0:? 9.000000 -0:? 10.000000 -0:? Constant: -0:? 11.000000 -0:? 12.000000 +0:12 Constant: +0:12 9.000000 +0:12 10.000000 +0:12 Constant: +0:12 11.000000 +0:12 12.000000 0:15 move second child to first child ( temp 4-component vector of float) 0:15 color: direct index for structure ( temp 4-component vector of float) 0:15 'ps_output' ( temp structure{ temp 4-component vector of float color}) diff --git a/Test/baseResults/hlsl.constructimat.frag.out b/Test/baseResults/hlsl.constructimat.frag.out index d2d3d01d60..a76ac6a9c0 100644 --- a/Test/baseResults/hlsl.constructimat.frag.out +++ b/Test/baseResults/hlsl.constructimat.frag.out @@ -28,23 +28,23 @@ gl_FragCoord origin is upper left 0:7 Sequence 0:7 move second child to first child ( temp 4X4 matrix of int) 0:7 'var444' ( temp 4X4 matrix of int) -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 1 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) +0:7 Constant: +0:7 0 (const int) +0:7 1 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 1 (const int) +0:7 1 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 1 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) 0:11 Sequence 0:11 move second child to first child ( temp 4X2 matrix of int) 0:11 'var423' ( temp 4X2 matrix of int) @@ -60,15 +60,15 @@ gl_FragCoord origin is upper left 0:12 Sequence 0:12 move second child to first child ( temp 4X2 matrix of int) 0:12 'var424' ( temp 4X2 matrix of int) -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) +0:12 Constant: +0:12 0 (const int) +0:12 1 (const int) +0:12 1 (const int) +0:12 1 (const int) +0:12 1 (const int) +0:12 0 (const int) +0:12 0 (const int) +0:12 0 (const int) 0:16 Sequence 0:16 move second child to first child ( temp 3X2 matrix of int) 0:16 'var323' ( temp 3X2 matrix of int) @@ -82,13 +82,13 @@ gl_FragCoord origin is upper left 0:17 Sequence 0:17 move second child to first child ( temp 3X2 matrix of int) 0:17 'var234' ( temp 3X2 matrix of int) -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 0 (const int) +0:17 Constant: +0:17 0 (const int) +0:17 1 (const int) +0:17 1 (const int) +0:17 1 (const int) +0:17 1 (const int) +0:17 0 (const int) 0:22 Sequence 0:22 move second child to first child ( temp 4X4 matrix of uint) 0:22 'uvar443' ( temp 4X4 matrix of uint) @@ -112,23 +112,23 @@ gl_FragCoord origin is upper left 0:23 Sequence 0:23 move second child to first child ( temp 4X4 matrix of uint) 0:23 'uvar444' ( temp 4X4 matrix of uint) -0:? Constant: -0:? 0 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) +0:23 Constant: +0:23 0 (const uint) +0:23 1 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 1 (const uint) +0:23 1 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 1 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) 0:27 Sequence 0:27 move second child to first child ( temp 4X2 matrix of uint) 0:27 'uvar423' ( temp 4X2 matrix of uint) @@ -144,15 +144,15 @@ gl_FragCoord origin is upper left 0:28 Sequence 0:28 move second child to first child ( temp 4X2 matrix of uint) 0:28 'uvar424' ( temp 4X2 matrix of uint) -0:? Constant: -0:? 0 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) +0:28 Constant: +0:28 0 (const uint) +0:28 1 (const uint) +0:28 1 (const uint) +0:28 1 (const uint) +0:28 1 (const uint) +0:28 0 (const uint) +0:28 0 (const uint) +0:28 0 (const uint) 0:32 Sequence 0:32 move second child to first child ( temp 3X2 matrix of uint) 0:32 'uvar323' ( temp 3X2 matrix of uint) @@ -166,13 +166,13 @@ gl_FragCoord origin is upper left 0:33 Sequence 0:33 move second child to first child ( temp 3X2 matrix of uint) 0:33 'uvar234' ( temp 3X2 matrix of uint) -0:? Constant: -0:? 0 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) +0:33 Constant: +0:33 0 (const uint) +0:33 1 (const uint) +0:33 1 (const uint) +0:33 1 (const uint) +0:33 1 (const uint) +0:33 0 (const uint) 0:38 Sequence 0:38 move second child to first child ( temp 4X4 matrix of bool) 0:38 'bvar443' ( temp 4X4 matrix of bool) @@ -196,23 +196,23 @@ gl_FragCoord origin is upper left 0:39 Sequence 0:39 move second child to first child ( temp 4X4 matrix of bool) 0:39 'bvar444' ( temp 4X4 matrix of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? false (const bool) -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) -0:? false (const bool) -0:? false (const bool) -0:? true (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) +0:39 Constant: +0:39 false (const bool) +0:39 true (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 true (const bool) +0:39 true (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 true (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) 0:43 Sequence 0:43 move second child to first child ( temp 4X2 matrix of bool) 0:43 'bvar423' ( temp 4X2 matrix of bool) @@ -228,15 +228,15 @@ gl_FragCoord origin is upper left 0:44 Sequence 0:44 move second child to first child ( temp 4X2 matrix of bool) 0:44 'bvar424' ( temp 4X2 matrix of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) -0:? true (const bool) -0:? true (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) +0:44 Constant: +0:44 false (const bool) +0:44 true (const bool) +0:44 true (const bool) +0:44 true (const bool) +0:44 true (const bool) +0:44 false (const bool) +0:44 false (const bool) +0:44 false (const bool) 0:48 Sequence 0:48 move second child to first child ( temp 3X2 matrix of bool) 0:48 'bvar323' ( temp 3X2 matrix of bool) @@ -250,13 +250,13 @@ gl_FragCoord origin is upper left 0:49 Sequence 0:49 move second child to first child ( temp 3X2 matrix of bool) 0:49 'bvar234' ( temp 3X2 matrix of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) -0:? true (const bool) -0:? true (const bool) -0:? false (const bool) +0:49 Constant: +0:49 false (const bool) +0:49 true (const bool) +0:49 true (const bool) +0:49 true (const bool) +0:49 true (const bool) +0:49 false (const bool) 0:51 Branch: Return with expression 0:51 Constant: 0:51 0 (const int) @@ -302,23 +302,23 @@ gl_FragCoord origin is upper left 0:7 Sequence 0:7 move second child to first child ( temp 4X4 matrix of int) 0:7 'var444' ( temp 4X4 matrix of int) -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 1 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) +0:7 Constant: +0:7 0 (const int) +0:7 1 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 1 (const int) +0:7 1 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 1 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) +0:7 0 (const int) 0:11 Sequence 0:11 move second child to first child ( temp 4X2 matrix of int) 0:11 'var423' ( temp 4X2 matrix of int) @@ -334,15 +334,15 @@ gl_FragCoord origin is upper left 0:12 Sequence 0:12 move second child to first child ( temp 4X2 matrix of int) 0:12 'var424' ( temp 4X2 matrix of int) -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 0 (const int) -0:? 0 (const int) -0:? 0 (const int) +0:12 Constant: +0:12 0 (const int) +0:12 1 (const int) +0:12 1 (const int) +0:12 1 (const int) +0:12 1 (const int) +0:12 0 (const int) +0:12 0 (const int) +0:12 0 (const int) 0:16 Sequence 0:16 move second child to first child ( temp 3X2 matrix of int) 0:16 'var323' ( temp 3X2 matrix of int) @@ -356,13 +356,13 @@ gl_FragCoord origin is upper left 0:17 Sequence 0:17 move second child to first child ( temp 3X2 matrix of int) 0:17 'var234' ( temp 3X2 matrix of int) -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) -0:? 0 (const int) +0:17 Constant: +0:17 0 (const int) +0:17 1 (const int) +0:17 1 (const int) +0:17 1 (const int) +0:17 1 (const int) +0:17 0 (const int) 0:22 Sequence 0:22 move second child to first child ( temp 4X4 matrix of uint) 0:22 'uvar443' ( temp 4X4 matrix of uint) @@ -386,23 +386,23 @@ gl_FragCoord origin is upper left 0:23 Sequence 0:23 move second child to first child ( temp 4X4 matrix of uint) 0:23 'uvar444' ( temp 4X4 matrix of uint) -0:? Constant: -0:? 0 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) +0:23 Constant: +0:23 0 (const uint) +0:23 1 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 1 (const uint) +0:23 1 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 1 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) +0:23 0 (const uint) 0:27 Sequence 0:27 move second child to first child ( temp 4X2 matrix of uint) 0:27 'uvar423' ( temp 4X2 matrix of uint) @@ -418,15 +418,15 @@ gl_FragCoord origin is upper left 0:28 Sequence 0:28 move second child to first child ( temp 4X2 matrix of uint) 0:28 'uvar424' ( temp 4X2 matrix of uint) -0:? Constant: -0:? 0 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) -0:? 0 (const uint) +0:28 Constant: +0:28 0 (const uint) +0:28 1 (const uint) +0:28 1 (const uint) +0:28 1 (const uint) +0:28 1 (const uint) +0:28 0 (const uint) +0:28 0 (const uint) +0:28 0 (const uint) 0:32 Sequence 0:32 move second child to first child ( temp 3X2 matrix of uint) 0:32 'uvar323' ( temp 3X2 matrix of uint) @@ -440,13 +440,13 @@ gl_FragCoord origin is upper left 0:33 Sequence 0:33 move second child to first child ( temp 3X2 matrix of uint) 0:33 'uvar234' ( temp 3X2 matrix of uint) -0:? Constant: -0:? 0 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 0 (const uint) +0:33 Constant: +0:33 0 (const uint) +0:33 1 (const uint) +0:33 1 (const uint) +0:33 1 (const uint) +0:33 1 (const uint) +0:33 0 (const uint) 0:38 Sequence 0:38 move second child to first child ( temp 4X4 matrix of bool) 0:38 'bvar443' ( temp 4X4 matrix of bool) @@ -470,23 +470,23 @@ gl_FragCoord origin is upper left 0:39 Sequence 0:39 move second child to first child ( temp 4X4 matrix of bool) 0:39 'bvar444' ( temp 4X4 matrix of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? false (const bool) -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) -0:? false (const bool) -0:? false (const bool) -0:? true (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) +0:39 Constant: +0:39 false (const bool) +0:39 true (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 true (const bool) +0:39 true (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 true (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) +0:39 false (const bool) 0:43 Sequence 0:43 move second child to first child ( temp 4X2 matrix of bool) 0:43 'bvar423' ( temp 4X2 matrix of bool) @@ -502,15 +502,15 @@ gl_FragCoord origin is upper left 0:44 Sequence 0:44 move second child to first child ( temp 4X2 matrix of bool) 0:44 'bvar424' ( temp 4X2 matrix of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) -0:? true (const bool) -0:? true (const bool) -0:? false (const bool) -0:? false (const bool) -0:? false (const bool) +0:44 Constant: +0:44 false (const bool) +0:44 true (const bool) +0:44 true (const bool) +0:44 true (const bool) +0:44 true (const bool) +0:44 false (const bool) +0:44 false (const bool) +0:44 false (const bool) 0:48 Sequence 0:48 move second child to first child ( temp 3X2 matrix of bool) 0:48 'bvar323' ( temp 3X2 matrix of bool) @@ -524,13 +524,13 @@ gl_FragCoord origin is upper left 0:49 Sequence 0:49 move second child to first child ( temp 3X2 matrix of bool) 0:49 'bvar234' ( temp 3X2 matrix of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) -0:? true (const bool) -0:? true (const bool) -0:? false (const bool) +0:49 Constant: +0:49 false (const bool) +0:49 true (const bool) +0:49 true (const bool) +0:49 true (const bool) +0:49 true (const bool) +0:49 false (const bool) 0:51 Branch: Return with expression 0:51 Constant: 0:51 0 (const int) diff --git a/Test/baseResults/hlsl.coverage.frag.out b/Test/baseResults/hlsl.coverage.frag.out index cb81d56242..7c44e1fb24 100644 --- a/Test/baseResults/hlsl.coverage.frag.out +++ b/Test/baseResults/hlsl.coverage.frag.out @@ -11,11 +11,11 @@ gl_FragCoord origin is upper left 0:17 'o' ( temp structure{ temp 4-component vector of float vColor, temp uint nCoverageMask}) 0:17 Constant: 0:17 0 (const int) -0:? Constant: -0:? 1.000000 -0:? 0.000000 -0:? 0.000000 -0:? 1.000000 +0:17 Constant: +0:17 1.000000 +0:17 0.000000 +0:17 0.000000 +0:17 1.000000 0:18 move second child to first child ( temp uint) 0:18 nCoverageMask: direct index for structure ( temp uint) 0:18 'o' ( temp structure{ temp 4-component vector of float vColor, temp uint nCoverageMask}) @@ -72,11 +72,11 @@ gl_FragCoord origin is upper left 0:17 'o' ( temp structure{ temp 4-component vector of float vColor, temp uint nCoverageMask}) 0:17 Constant: 0:17 0 (const int) -0:? Constant: -0:? 1.000000 -0:? 0.000000 -0:? 0.000000 -0:? 1.000000 +0:17 Constant: +0:17 1.000000 +0:17 0.000000 +0:17 0.000000 +0:17 1.000000 0:18 move second child to first child ( temp uint) 0:18 nCoverageMask: direct index for structure ( temp uint) 0:18 'o' ( temp structure{ temp 4-component vector of float vColor, temp uint nCoverageMask}) diff --git a/Test/baseResults/hlsl.earlydepthstencil.frag.out b/Test/baseResults/hlsl.earlydepthstencil.frag.out index e6ad359441..34ca0062c8 100644 --- a/Test/baseResults/hlsl.earlydepthstencil.frag.out +++ b/Test/baseResults/hlsl.earlydepthstencil.frag.out @@ -11,7 +11,7 @@ using early_fragment_tests 0:10 'oldVal' ( temp uint) 0:10 imageAtomicExchange ( temp uint) 0:10 'Values' (layout( r32ui) uniform uimage2D) -0:? Construct uvec2 ( temp 2-component vector of uint) +0:10 Construct uvec2 ( temp 2-component vector of uint) 0:10 Convert float to uint ( temp uint) 0:10 direct index ( temp float) 0:10 Position: direct index for structure ( temp 4-component vector of float) @@ -67,7 +67,7 @@ using early_fragment_tests 0:10 'oldVal' ( temp uint) 0:10 imageAtomicExchange ( temp uint) 0:10 'Values' (layout( r32ui) uniform uimage2D) -0:? Construct uvec2 ( temp 2-component vector of uint) +0:10 Construct uvec2 ( temp 2-component vector of uint) 0:10 Convert float to uint ( temp uint) 0:10 direct index ( temp float) 0:10 Position: direct index for structure ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.flatten.return.frag.out b/Test/baseResults/hlsl.flatten.return.frag.out index ffb9dcc493..9a51f1fceb 100644 --- a/Test/baseResults/hlsl.flatten.return.frag.out +++ b/Test/baseResults/hlsl.flatten.return.frag.out @@ -6,14 +6,14 @@ gl_FragCoord origin is upper left 0:11 Function Parameters: 0:? Sequence 0:12 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:12 Constant: +0:12 1.000000 +0:12 1.000000 +0:12 1.000000 +0:12 1.000000 +0:12 2.000000 +0:12 3.000000 +0:12 4.000000 0:16 Function Definition: @main( ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3}) 0:16 Function Parameters: 0:? Sequence @@ -67,14 +67,14 @@ gl_FragCoord origin is upper left 0:11 Function Parameters: 0:? Sequence 0:12 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:12 Constant: +0:12 1.000000 +0:12 1.000000 +0:12 1.000000 +0:12 1.000000 +0:12 2.000000 +0:12 3.000000 +0:12 4.000000 0:16 Function Definition: @main( ( temp structure{ temp 4-component vector of float color, temp float other_struct_member1, temp float other_struct_member2, temp float other_struct_member3}) 0:16 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.flattenOpaque.frag.out b/Test/baseResults/hlsl.flattenOpaque.frag.out index d63caf5c00..9a29081b7c 100644 --- a/Test/baseResults/hlsl.flattenOpaque.frag.out +++ b/Test/baseResults/hlsl.flattenOpaque.frag.out @@ -15,9 +15,9 @@ gl_FragCoord origin is upper left 0:16 's' ( in structure{ temp sampler s2D}) 0:16 Constant: 0:16 0 (const int) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:16 Constant: +0:16 0.200000 +0:16 0.300000 0:20 Function Definition: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float) 0:20 Function Parameters: 0:20 's' ( in structure{ temp sampler s2D}) @@ -47,9 +47,9 @@ gl_FragCoord origin is upper left 0:26 's' ( in structure{ temp sampler s2D, temp texture2D tex}) 0:26 Constant: 0:26 0 (const int) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:26 Constant: +0:26 0.200000 +0:26 0.300000 0:30 Function Definition: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float) 0:30 Function Parameters: 0:30 's' ( in structure{ temp sampler s2D, temp texture2D tex}) @@ -94,9 +94,9 @@ gl_FragCoord origin is upper left 0:37 0 (const int) 0:? 's.s2D' ( uniform sampler) 0:37 'aggShadow' ( temp structure{ temp sampler s2D}) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:37 Constant: +0:37 0.200000 +0:37 0.300000 0:38 Function Call: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float) 0:38 Comma ( temp structure{ temp sampler s2D, temp texture2D tex}) 0:38 Sequence @@ -129,9 +129,9 @@ gl_FragCoord origin is upper left 0:39 1 (const int) 0:? 's2.tex' ( uniform texture2D) 0:39 'aggShadow' ( temp structure{ temp sampler s2D, temp texture2D tex}) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.200000 +0:39 0.300000 0:35 Function Definition: main( ( temp void) 0:35 Function Parameters: 0:? Sequence @@ -164,9 +164,9 @@ gl_FragCoord origin is upper left 0:16 's' ( in structure{ temp sampler s2D}) 0:16 Constant: 0:16 0 (const int) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:16 Constant: +0:16 0.200000 +0:16 0.300000 0:20 Function Definition: osCall2(struct-os-p11;vf2; ( temp 4-component vector of float) 0:20 Function Parameters: 0:20 's' ( in structure{ temp sampler s2D}) @@ -196,9 +196,9 @@ gl_FragCoord origin is upper left 0:26 's' ( in structure{ temp sampler s2D, temp texture2D tex}) 0:26 Constant: 0:26 0 (const int) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:26 Constant: +0:26 0.200000 +0:26 0.300000 0:30 Function Definition: os2Call2(struct-os2-p1-t211;vf2; ( temp 4-component vector of float) 0:30 Function Parameters: 0:30 's' ( in structure{ temp sampler s2D, temp texture2D tex}) @@ -243,9 +243,9 @@ gl_FragCoord origin is upper left 0:37 0 (const int) 0:? 's.s2D' ( uniform sampler) 0:37 'aggShadow' ( temp structure{ temp sampler s2D}) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:37 Constant: +0:37 0.200000 +0:37 0.300000 0:38 Function Call: os2Call1(struct-os2-p1-t211; ( temp 4-component vector of float) 0:38 Comma ( temp structure{ temp sampler s2D, temp texture2D tex}) 0:38 Sequence @@ -278,9 +278,9 @@ gl_FragCoord origin is upper left 0:39 1 (const int) 0:? 's2.tex' ( uniform texture2D) 0:39 'aggShadow' ( temp structure{ temp sampler s2D, temp texture2D tex}) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.200000 +0:39 0.300000 0:35 Function Definition: main( ( temp void) 0:35 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out index d27cadc540..10e8345013 100644 --- a/Test/baseResults/hlsl.flattenOpaqueInit.vert.out +++ b/Test/baseResults/hlsl.flattenOpaqueInit.vert.out @@ -17,9 +17,9 @@ Shader version: 500 0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex}) 0:6 Constant: 0:6 0 (const int) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:6 Constant: +0:6 0.300000 +0:6 0.400000 0:10 Function Definition: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex}) 0:10 Function Parameters: 0:? Sequence @@ -101,9 +101,9 @@ Shader version: 500 0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex}) 0:6 Constant: 0:6 0 (const int) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:6 Constant: +0:6 0.300000 +0:6 0.400000 0:10 Function Definition: fillOpaque( ( temp structure{ temp sampler smpl, temp texture2D tex}) 0:10 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out index 04f70091fd..c8d0b166e6 100644 --- a/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out +++ b/Test/baseResults/hlsl.flattenOpaqueInitMix.vert.out @@ -17,7 +17,7 @@ Shader version: 500 0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex, temp float f}) 0:6 Constant: 0:6 0 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:6 Construct vec2 ( temp 2-component vector of float) 0:6 f: direct index for structure ( temp float) 0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex, temp float f}) 0:6 Constant: @@ -72,7 +72,7 @@ Shader version: 500 0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex, temp float f}) 0:6 Constant: 0:6 0 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:6 Construct vec2 ( temp 2-component vector of float) 0:6 f: direct index for structure ( temp float) 0:6 'tex' ( in structure{ temp sampler smpl, temp texture2D tex, temp float f}) 0:6 Constant: diff --git a/Test/baseResults/hlsl.flattenSubset2.frag.out b/Test/baseResults/hlsl.flattenSubset2.frag.out index bac9b30d4d..c319637832 100644 --- a/Test/baseResults/hlsl.flattenSubset2.frag.out +++ b/Test/baseResults/hlsl.flattenSubset2.frag.out @@ -52,11 +52,11 @@ gl_FragCoord origin is upper left 0:21 Constant: 0:21 1.000000 0:23 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:23 Constant: +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 0:8 Function Definition: main( ( temp void) 0:8 Function Parameters: 0:? Sequence @@ -128,11 +128,11 @@ gl_FragCoord origin is upper left 0:21 Constant: 0:21 1.000000 0:23 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:23 Constant: +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 0:8 Function Definition: main( ( temp void) 0:8 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.gather.array.dx10.frag.out b/Test/baseResults/hlsl.gather.array.dx10.frag.out index b679ac4cf8..e39d5a2a74 100644 --- a/Test/baseResults/hlsl.gather.array.dx10.frag.out +++ b/Test/baseResults/hlsl.gather.array.dx10.frag.out @@ -13,10 +13,10 @@ using depth_any 0:29 Construct combined texture-sampler ( temp sampler2DArray) 0:29 'g_tTex2df4a' ( uniform texture2DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:29 Constant: +0:29 0.100000 +0:29 0.200000 +0:29 0.300000 0:30 Sequence 0:30 move second child to first child ( temp 4-component vector of int) 0:30 'txval21' ( temp 4-component vector of int) @@ -24,10 +24,10 @@ using depth_any 0:30 Construct combined texture-sampler ( temp isampler2DArray) 0:30 'g_tTex2di4a' ( uniform itexture2DArray) 0:30 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:30 Constant: +0:30 0.300000 +0:30 0.400000 +0:30 0.500000 0:31 Sequence 0:31 move second child to first child ( temp 4-component vector of uint) 0:31 'txval22' ( temp 4-component vector of uint) @@ -35,10 +35,10 @@ using depth_any 0:31 Construct combined texture-sampler ( temp usampler2DArray) 0:31 'g_tTex2du4a' ( uniform utexture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:31 Constant: +0:31 0.500000 +0:31 0.600000 +0:31 0.700000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of float) 0:35 'txval40' ( temp 4-component vector of float) @@ -46,11 +46,11 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4a' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval41' ( temp 4-component vector of int) @@ -58,11 +58,11 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:36 Constant: +0:36 0.400000 +0:36 0.500000 +0:36 0.600000 +0:36 0.700000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval42' ( temp 4-component vector of uint) @@ -70,11 +70,11 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4a' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? 1.000000 +0:37 Constant: +0:37 0.700000 +0:37 0.800000 +0:37 0.900000 +0:37 1.000000 0:39 move second child to first child ( temp 4-component vector of float) 0:39 Color: direct index for structure ( temp 4-component vector of float) 0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -146,10 +146,10 @@ using depth_any 0:29 Construct combined texture-sampler ( temp sampler2DArray) 0:29 'g_tTex2df4a' ( uniform texture2DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:29 Constant: +0:29 0.100000 +0:29 0.200000 +0:29 0.300000 0:30 Sequence 0:30 move second child to first child ( temp 4-component vector of int) 0:30 'txval21' ( temp 4-component vector of int) @@ -157,10 +157,10 @@ using depth_any 0:30 Construct combined texture-sampler ( temp isampler2DArray) 0:30 'g_tTex2di4a' ( uniform itexture2DArray) 0:30 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:30 Constant: +0:30 0.300000 +0:30 0.400000 +0:30 0.500000 0:31 Sequence 0:31 move second child to first child ( temp 4-component vector of uint) 0:31 'txval22' ( temp 4-component vector of uint) @@ -168,10 +168,10 @@ using depth_any 0:31 Construct combined texture-sampler ( temp usampler2DArray) 0:31 'g_tTex2du4a' ( uniform utexture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:31 Constant: +0:31 0.500000 +0:31 0.600000 +0:31 0.700000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of float) 0:35 'txval40' ( temp 4-component vector of float) @@ -179,11 +179,11 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4a' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval41' ( temp 4-component vector of int) @@ -191,11 +191,11 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:36 Constant: +0:36 0.400000 +0:36 0.500000 +0:36 0.600000 +0:36 0.700000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval42' ( temp 4-component vector of uint) @@ -203,11 +203,11 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4a' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? 1.000000 +0:37 Constant: +0:37 0.700000 +0:37 0.800000 +0:37 0.900000 +0:37 1.000000 0:39 move second child to first child ( temp 4-component vector of float) 0:39 Color: direct index for structure ( temp 4-component vector of float) 0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.gather.basic.dx10.frag.out b/Test/baseResults/hlsl.gather.basic.dx10.frag.out index c80c10f4e9..99efd61455 100644 --- a/Test/baseResults/hlsl.gather.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.gather.basic.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:34 Construct combined texture-sampler ( temp sampler2D) 0:34 'g_tTex2df4' ( uniform texture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:34 Constant: +0:34 0.100000 +0:34 0.200000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of int) 0:35 'txval21' ( temp 4-component vector of int) @@ -23,9 +23,9 @@ using depth_any 0:35 Construct combined texture-sampler ( temp isampler2D) 0:35 'g_tTex2di4' ( uniform itexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.300000 +0:35 0.400000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of uint) 0:36 'txval22' ( temp 4-component vector of uint) @@ -33,9 +33,9 @@ using depth_any 0:36 Construct combined texture-sampler ( temp usampler2D) 0:36 'g_tTex2du4' ( uniform utexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:36 Constant: +0:36 0.500000 +0:36 0.600000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of float) 0:40 'txval40' ( temp 4-component vector of float) @@ -43,10 +43,10 @@ using depth_any 0:40 Construct combined texture-sampler ( temp samplerCube) 0:40 'g_tTexcdf4' ( uniform textureCube) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:40 Constant: +0:40 0.100000 +0:40 0.200000 +0:40 0.300000 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of int) 0:41 'txval41' ( temp 4-component vector of int) @@ -54,10 +54,10 @@ using depth_any 0:41 Construct combined texture-sampler ( temp isamplerCube) 0:41 'g_tTexcdi4' ( uniform itextureCube) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:41 Constant: +0:41 0.400000 +0:41 0.500000 +0:41 0.600000 0:42 Sequence 0:42 move second child to first child ( temp 4-component vector of uint) 0:42 'txval42' ( temp 4-component vector of uint) @@ -65,10 +65,10 @@ using depth_any 0:42 Construct combined texture-sampler ( temp usamplerCube) 0:42 'g_tTexcdu4' ( uniform utextureCube) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:42 Constant: +0:42 0.700000 +0:42 0.800000 +0:42 0.900000 0:44 move second child to first child ( temp 4-component vector of float) 0:44 Color: direct index for structure ( temp 4-component vector of float) 0:44 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -144,9 +144,9 @@ using depth_any 0:34 Construct combined texture-sampler ( temp sampler2D) 0:34 'g_tTex2df4' ( uniform texture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:34 Constant: +0:34 0.100000 +0:34 0.200000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of int) 0:35 'txval21' ( temp 4-component vector of int) @@ -154,9 +154,9 @@ using depth_any 0:35 Construct combined texture-sampler ( temp isampler2D) 0:35 'g_tTex2di4' ( uniform itexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.300000 +0:35 0.400000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of uint) 0:36 'txval22' ( temp 4-component vector of uint) @@ -164,9 +164,9 @@ using depth_any 0:36 Construct combined texture-sampler ( temp usampler2D) 0:36 'g_tTex2du4' ( uniform utexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:36 Constant: +0:36 0.500000 +0:36 0.600000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of float) 0:40 'txval40' ( temp 4-component vector of float) @@ -174,10 +174,10 @@ using depth_any 0:40 Construct combined texture-sampler ( temp samplerCube) 0:40 'g_tTexcdf4' ( uniform textureCube) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:40 Constant: +0:40 0.100000 +0:40 0.200000 +0:40 0.300000 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of int) 0:41 'txval41' ( temp 4-component vector of int) @@ -185,10 +185,10 @@ using depth_any 0:41 Construct combined texture-sampler ( temp isamplerCube) 0:41 'g_tTexcdi4' ( uniform itextureCube) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:41 Constant: +0:41 0.400000 +0:41 0.500000 +0:41 0.600000 0:42 Sequence 0:42 move second child to first child ( temp 4-component vector of uint) 0:42 'txval42' ( temp 4-component vector of uint) @@ -196,10 +196,10 @@ using depth_any 0:42 Construct combined texture-sampler ( temp usamplerCube) 0:42 'g_tTexcdu4' ( uniform utextureCube) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:42 Constant: +0:42 0.700000 +0:42 0.800000 +0:42 0.900000 0:44 move second child to first child ( temp 4-component vector of float) 0:44 Color: direct index for structure ( temp 4-component vector of float) 0:44 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.gather.basic.dx10.vert.out b/Test/baseResults/hlsl.gather.basic.dx10.vert.out index fd0c958dd9..96525e0c9b 100644 --- a/Test/baseResults/hlsl.gather.basic.dx10.vert.out +++ b/Test/baseResults/hlsl.gather.basic.dx10.vert.out @@ -11,9 +11,9 @@ Shader version: 500 0:33 Construct combined texture-sampler ( temp sampler2D) 0:33 'g_tTex2df4' ( uniform texture2D) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:33 Constant: +0:33 0.100000 +0:33 0.200000 0:34 Sequence 0:34 move second child to first child ( temp 4-component vector of int) 0:34 'txval21' ( temp 4-component vector of int) @@ -21,9 +21,9 @@ Shader version: 500 0:34 Construct combined texture-sampler ( temp isampler2D) 0:34 'g_tTex2di4' ( uniform itexture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:34 Constant: +0:34 0.300000 +0:34 0.400000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of uint) 0:35 'txval22' ( temp 4-component vector of uint) @@ -31,9 +31,9 @@ Shader version: 500 0:35 Construct combined texture-sampler ( temp usampler2D) 0:35 'g_tTex2du4' ( uniform utexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:35 Constant: +0:35 0.500000 +0:35 0.600000 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval40' ( temp 4-component vector of float) @@ -41,10 +41,10 @@ Shader version: 500 0:39 Construct combined texture-sampler ( temp samplerCube) 0:39 'g_tTexcdf4' ( uniform textureCube) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval41' ( temp 4-component vector of int) @@ -52,10 +52,10 @@ Shader version: 500 0:40 Construct combined texture-sampler ( temp isamplerCube) 0:40 'g_tTexcdi4' ( uniform itextureCube) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval42' ( temp 4-component vector of uint) @@ -63,20 +63,20 @@ Shader version: 500 0:41 Construct combined texture-sampler ( temp usamplerCube) 0:41 'g_tTexcdu4' ( uniform utextureCube) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 0:43 move second child to first child ( temp 4-component vector of float) 0:43 Pos: direct index for structure ( temp 4-component vector of float) 0:43 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:43 Constant: 0:43 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 0:45 Branch: Return with expression 0:45 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:28 Function Definition: main( ( temp void) @@ -123,9 +123,9 @@ Shader version: 500 0:33 Construct combined texture-sampler ( temp sampler2D) 0:33 'g_tTex2df4' ( uniform texture2D) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:33 Constant: +0:33 0.100000 +0:33 0.200000 0:34 Sequence 0:34 move second child to first child ( temp 4-component vector of int) 0:34 'txval21' ( temp 4-component vector of int) @@ -133,9 +133,9 @@ Shader version: 500 0:34 Construct combined texture-sampler ( temp isampler2D) 0:34 'g_tTex2di4' ( uniform itexture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:34 Constant: +0:34 0.300000 +0:34 0.400000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of uint) 0:35 'txval22' ( temp 4-component vector of uint) @@ -143,9 +143,9 @@ Shader version: 500 0:35 Construct combined texture-sampler ( temp usampler2D) 0:35 'g_tTex2du4' ( uniform utexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:35 Constant: +0:35 0.500000 +0:35 0.600000 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval40' ( temp 4-component vector of float) @@ -153,10 +153,10 @@ Shader version: 500 0:39 Construct combined texture-sampler ( temp samplerCube) 0:39 'g_tTexcdf4' ( uniform textureCube) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval41' ( temp 4-component vector of int) @@ -164,10 +164,10 @@ Shader version: 500 0:40 Construct combined texture-sampler ( temp isamplerCube) 0:40 'g_tTexcdi4' ( uniform itextureCube) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval42' ( temp 4-component vector of uint) @@ -175,20 +175,20 @@ Shader version: 500 0:41 Construct combined texture-sampler ( temp usamplerCube) 0:41 'g_tTexcdu4' ( uniform utextureCube) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 0:43 move second child to first child ( temp 4-component vector of float) 0:43 Pos: direct index for structure ( temp 4-component vector of float) 0:43 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:43 Constant: 0:43 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 0:45 Branch: Return with expression 0:45 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:28 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.gather.offset.dx10.frag.out b/Test/baseResults/hlsl.gather.offset.dx10.frag.out index 4e40f72d16..59bd8da88b 100644 --- a/Test/baseResults/hlsl.gather.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.gather.offset.dx10.frag.out @@ -13,12 +13,12 @@ using depth_any 0:33 Construct combined texture-sampler ( temp sampler2D) 0:33 'g_tTex2df4' ( uniform texture2D) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:33 Constant: +0:33 0.100000 +0:33 0.200000 +0:33 Constant: +0:33 1 (const int) +0:33 0 (const int) 0:34 Sequence 0:34 move second child to first child ( temp 4-component vector of int) 0:34 'txval21' ( temp 4-component vector of int) @@ -26,12 +26,12 @@ using depth_any 0:34 Construct combined texture-sampler ( temp isampler2D) 0:34 'g_tTex2di4' ( uniform itexture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:34 Constant: +0:34 0.300000 +0:34 0.400000 +0:34 Constant: +0:34 1 (const int) +0:34 1 (const int) 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of uint) 0:35 'txval22' ( temp 4-component vector of uint) @@ -39,12 +39,12 @@ using depth_any 0:35 Construct combined texture-sampler ( temp usampler2D) 0:35 'g_tTex2du4' ( uniform utexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:35 Constant: +0:35 0.500000 +0:35 0.600000 +0:35 Constant: +0:35 1 (const int) +0:35 -1 (const int) 0:40 move second child to first child ( temp 4-component vector of float) 0:40 Color: direct index for structure ( temp 4-component vector of float) 0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -119,12 +119,12 @@ using depth_any 0:33 Construct combined texture-sampler ( temp sampler2D) 0:33 'g_tTex2df4' ( uniform texture2D) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:33 Constant: +0:33 0.100000 +0:33 0.200000 +0:33 Constant: +0:33 1 (const int) +0:33 0 (const int) 0:34 Sequence 0:34 move second child to first child ( temp 4-component vector of int) 0:34 'txval21' ( temp 4-component vector of int) @@ -132,12 +132,12 @@ using depth_any 0:34 Construct combined texture-sampler ( temp isampler2D) 0:34 'g_tTex2di4' ( uniform itexture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:34 Constant: +0:34 0.300000 +0:34 0.400000 +0:34 Constant: +0:34 1 (const int) +0:34 1 (const int) 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of uint) 0:35 'txval22' ( temp 4-component vector of uint) @@ -145,12 +145,12 @@ using depth_any 0:35 Construct combined texture-sampler ( temp usampler2D) 0:35 'g_tTex2du4' ( uniform utexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:35 Constant: +0:35 0.500000 +0:35 0.600000 +0:35 Constant: +0:35 1 (const int) +0:35 -1 (const int) 0:40 move second child to first child ( temp 4-component vector of float) 0:40 Color: direct index for structure ( temp 4-component vector of float) 0:40 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out index 54b693f9cc..942bd923b3 100644 --- a/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.gather.offsetarray.dx10.frag.out @@ -13,13 +13,13 @@ using depth_any 0:25 Construct combined texture-sampler ( temp sampler2DArray) 0:25 'g_tTex2df4' ( uniform texture2DArray) 0:25 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:25 Constant: +0:25 0.100000 +0:25 0.200000 +0:25 0.300000 +0:25 Constant: +0:25 1 (const int) +0:25 0 (const int) 0:26 Sequence 0:26 move second child to first child ( temp 4-component vector of int) 0:26 'txval21' ( temp 4-component vector of int) @@ -27,13 +27,13 @@ using depth_any 0:26 Construct combined texture-sampler ( temp isampler2DArray) 0:26 'g_tTex2di4' ( uniform itexture2DArray) 0:26 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.400000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:26 Constant: +0:26 0.300000 +0:26 0.400000 +0:26 0.400000 +0:26 Constant: +0:26 1 (const int) +0:26 1 (const int) 0:27 Sequence 0:27 move second child to first child ( temp 4-component vector of uint) 0:27 'txval22' ( temp 4-component vector of uint) @@ -41,13 +41,13 @@ using depth_any 0:27 Construct combined texture-sampler ( temp usampler2DArray) 0:27 'g_tTex2du4' ( uniform utexture2DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:27 Constant: +0:27 0.500000 +0:27 0.600000 +0:27 0.700000 +0:27 Constant: +0:27 1 (const int) +0:27 -1 (const int) 0:32 move second child to first child ( temp 4-component vector of float) 0:32 Color: direct index for structure ( temp 4-component vector of float) 0:32 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -116,13 +116,13 @@ using depth_any 0:25 Construct combined texture-sampler ( temp sampler2DArray) 0:25 'g_tTex2df4' ( uniform texture2DArray) 0:25 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:25 Constant: +0:25 0.100000 +0:25 0.200000 +0:25 0.300000 +0:25 Constant: +0:25 1 (const int) +0:25 0 (const int) 0:26 Sequence 0:26 move second child to first child ( temp 4-component vector of int) 0:26 'txval21' ( temp 4-component vector of int) @@ -130,13 +130,13 @@ using depth_any 0:26 Construct combined texture-sampler ( temp isampler2DArray) 0:26 'g_tTex2di4' ( uniform itexture2DArray) 0:26 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.400000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:26 Constant: +0:26 0.300000 +0:26 0.400000 +0:26 0.400000 +0:26 Constant: +0:26 1 (const int) +0:26 1 (const int) 0:27 Sequence 0:27 move second child to first child ( temp 4-component vector of uint) 0:27 'txval22' ( temp 4-component vector of uint) @@ -144,13 +144,13 @@ using depth_any 0:27 Construct combined texture-sampler ( temp usampler2DArray) 0:27 'g_tTex2du4' ( uniform utexture2DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:27 Constant: +0:27 0.500000 +0:27 0.600000 +0:27 0.700000 +0:27 Constant: +0:27 1 (const int) +0:27 -1 (const int) 0:32 move second child to first child ( temp 4-component vector of float) 0:32 Color: direct index for structure ( temp 4-component vector of float) 0:32 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out index 8f45abc2e0..a858f15d8f 100644 --- a/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.gathercmpRGBA.offset.dx10.frag.out @@ -19,9 +19,9 @@ using depth_any 0:45 1 (const uint) 0:45 Constant: 0:45 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 0 (const int) 0:46 Sequence 0:46 move second child to first child ( temp 4-component vector of int) 0:46 'txval011' ( temp 4-component vector of int) @@ -35,9 +35,9 @@ using depth_any 0:46 1 (const uint) 0:46 Constant: 0:46 0.750000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 -1 (const int) 0:47 Sequence 0:47 move second child to first child ( temp 4-component vector of uint) 0:47 'txval021' ( temp 4-component vector of uint) @@ -51,9 +51,9 @@ using depth_any 0:47 1 (const uint) 0:47 Constant: 0:47 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:47 Constant: +0:47 1 (const int) +0:47 1 (const int) 0:49 Sequence 0:49 move second child to first child ( temp 4-component vector of float) 0:49 'txval004' ( temp 4-component vector of float) @@ -133,9 +133,9 @@ using depth_any 0:53 1 (const uint) 0:53 Constant: 0:53 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:53 Constant: +0:53 1 (const int) +0:53 0 (const int) 0:54 Sequence 0:54 move second child to first child ( temp 4-component vector of int) 0:54 'txval411' ( temp 4-component vector of int) @@ -149,9 +149,9 @@ using depth_any 0:54 1 (const uint) 0:54 Constant: 0:54 0.750000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 -1 (const int) 0:55 Sequence 0:55 move second child to first child ( temp 4-component vector of uint) 0:55 'txval421' ( temp 4-component vector of uint) @@ -165,9 +165,9 @@ using depth_any 0:55 1 (const uint) 0:55 Constant: 0:55 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 1 (const int) 0:110 move second child to first child ( temp 4-component vector of float) 0:110 Color: direct index for structure ( temp 4-component vector of float) 0:110 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -249,9 +249,9 @@ using depth_any 0:45 1 (const uint) 0:45 Constant: 0:45 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:45 Constant: +0:45 1 (const int) +0:45 0 (const int) 0:46 Sequence 0:46 move second child to first child ( temp 4-component vector of int) 0:46 'txval011' ( temp 4-component vector of int) @@ -265,9 +265,9 @@ using depth_any 0:46 1 (const uint) 0:46 Constant: 0:46 0.750000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:46 Constant: +0:46 1 (const int) +0:46 -1 (const int) 0:47 Sequence 0:47 move second child to first child ( temp 4-component vector of uint) 0:47 'txval021' ( temp 4-component vector of uint) @@ -281,9 +281,9 @@ using depth_any 0:47 1 (const uint) 0:47 Constant: 0:47 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:47 Constant: +0:47 1 (const int) +0:47 1 (const int) 0:49 Sequence 0:49 move second child to first child ( temp 4-component vector of float) 0:49 'txval004' ( temp 4-component vector of float) @@ -363,9 +363,9 @@ using depth_any 0:53 1 (const uint) 0:53 Constant: 0:53 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:53 Constant: +0:53 1 (const int) +0:53 0 (const int) 0:54 Sequence 0:54 move second child to first child ( temp 4-component vector of int) 0:54 'txval411' ( temp 4-component vector of int) @@ -379,9 +379,9 @@ using depth_any 0:54 1 (const uint) 0:54 Constant: 0:54 0.750000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:54 Constant: +0:54 1 (const int) +0:54 -1 (const int) 0:55 Sequence 0:55 move second child to first child ( temp 4-component vector of uint) 0:55 'txval421' ( temp 4-component vector of uint) @@ -395,9 +395,9 @@ using depth_any 0:55 1 (const uint) 0:55 Constant: 0:55 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:55 Constant: +0:55 1 (const int) +0:55 1 (const int) 0:110 move second child to first child ( temp 4-component vector of float) 0:110 Color: direct index for structure ( temp 4-component vector of float) 0:110 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.getdimensions.dx10.vert.out b/Test/baseResults/hlsl.getdimensions.dx10.vert.out index d681f7d2d3..96a1cc1558 100644 --- a/Test/baseResults/hlsl.getdimensions.dx10.vert.out +++ b/Test/baseResults/hlsl.getdimensions.dx10.vert.out @@ -33,11 +33,11 @@ Shader version: 500 0:24 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:24 Constant: 0:24 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:24 Constant: +0:24 0.000000 +0:24 0.000000 +0:24 0.000000 +0:24 0.000000 0:26 Branch: Return with expression 0:26 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:11 Function Definition: main( ( temp void) @@ -93,11 +93,11 @@ Shader version: 500 0:24 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:24 Constant: 0:24 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:24 Constant: +0:24 0.000000 +0:24 0.000000 +0:24 0.000000 +0:24 0.000000 0:26 Branch: Return with expression 0:26 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:11 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.groupid.comp.out b/Test/baseResults/hlsl.groupid.comp.out index 362f4b43bb..bf39d11a40 100644 --- a/Test/baseResults/hlsl.groupid.comp.out +++ b/Test/baseResults/hlsl.groupid.comp.out @@ -9,11 +9,11 @@ local_size = (8, 8, 1) 0:8 Sequence 0:8 move second child to first child ( temp 4-component vector of float) 0:8 'storeTemp' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 0.000000 -0:? 0.000000 -0:? 1.000000 +0:8 Constant: +0:8 1.000000 +0:8 0.000000 +0:8 0.000000 +0:8 1.000000 0:8 imageStore ( temp void) 0:8 'OutputTexture' (layout( rgba32f) uniform image2D) 0:8 vector swizzle ( temp 2-component vector of uint) @@ -52,11 +52,11 @@ local_size = (8, 8, 1) 0:8 Sequence 0:8 move second child to first child ( temp 4-component vector of float) 0:8 'storeTemp' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 0.000000 -0:? 0.000000 -0:? 1.000000 +0:8 Constant: +0:8 1.000000 +0:8 0.000000 +0:8 0.000000 +0:8 1.000000 0:8 imageStore ( temp void) 0:8 'OutputTexture' (layout( rgba32f) uniform image2D) 0:8 vector swizzle ( temp 2-component vector of uint) diff --git a/Test/baseResults/hlsl.gs-hs-mix.tesc.out b/Test/baseResults/hlsl.gs-hs-mix.tesc.out index 72070ed365..c9496ac1e5 100644 --- a/Test/baseResults/hlsl.gs-hs-mix.tesc.out +++ b/Test/baseResults/hlsl.gs-hs-mix.tesc.out @@ -392,7 +392,7 @@ triangle order = ccw 0:95 move second child to first child ( temp 4-component vector of float) 0:95 'Q0' ( temp 4-component vector of float) 0:95 vector-times-matrix ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:95 Construct vec4 ( temp 4-component vector of float) 0:95 'P0' ( temp 3-component vector of float) 0:95 Constant: 0:95 1.000000 @@ -404,7 +404,7 @@ triangle order = ccw 0:96 move second child to first child ( temp 4-component vector of float) 0:96 'Q1' ( temp 4-component vector of float) 0:96 vector-times-matrix ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:96 Construct vec4 ( temp 4-component vector of float) 0:96 'P1' ( temp 3-component vector of float) 0:96 Constant: 0:96 1.000000 @@ -416,7 +416,7 @@ triangle order = ccw 0:97 move second child to first child ( temp 4-component vector of float) 0:97 'Q2' ( temp 4-component vector of float) 0:97 vector-times-matrix ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:97 Construct vec4 ( temp 4-component vector of float) 0:97 'P2' ( temp 3-component vector of float) 0:97 Constant: 0:97 1.000000 @@ -887,7 +887,7 @@ triangle order = ccw 0:95 move second child to first child ( temp 4-component vector of float) 0:95 'Q0' ( temp 4-component vector of float) 0:95 vector-times-matrix ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:95 Construct vec4 ( temp 4-component vector of float) 0:95 'P0' ( temp 3-component vector of float) 0:95 Constant: 0:95 1.000000 @@ -899,7 +899,7 @@ triangle order = ccw 0:96 move second child to first child ( temp 4-component vector of float) 0:96 'Q1' ( temp 4-component vector of float) 0:96 vector-times-matrix ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:96 Construct vec4 ( temp 4-component vector of float) 0:96 'P1' ( temp 3-component vector of float) 0:96 Constant: 0:96 1.000000 @@ -911,7 +911,7 @@ triangle order = ccw 0:97 move second child to first child ( temp 4-component vector of float) 0:97 'Q2' ( temp 4-component vector of float) 0:97 vector-times-matrix ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:97 Construct vec4 ( temp 4-component vector of float) 0:97 'P2' ( temp 3-component vector of float) 0:97 Constant: 0:97 1.000000 diff --git a/Test/baseResults/hlsl.identifier.sample.frag.out b/Test/baseResults/hlsl.identifier.sample.frag.out index 7ba029d516..e0a89aa4a4 100644 --- a/Test/baseResults/hlsl.identifier.sample.frag.out +++ b/Test/baseResults/hlsl.identifier.sample.frag.out @@ -14,11 +14,11 @@ gl_FragCoord origin is upper left 0:15 Sequence 0:15 move second child to first child ( temp 4-component vector of float) 0:15 'sample' ( temp 4-component vector of float) -0:? Constant: -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 +0:15 Constant: +0:15 3.000000 +0:15 4.000000 +0:15 5.000000 +0:15 6.000000 0:17 Branch: Return with expression 0:17 vector swizzle ( temp 4-component vector of float) 0:17 'sample' ( temp 4-component vector of float) @@ -59,11 +59,11 @@ gl_FragCoord origin is upper left 0:15 Sequence 0:15 move second child to first child ( temp 4-component vector of float) 0:15 'sample' ( temp 4-component vector of float) -0:? Constant: -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 +0:15 Constant: +0:15 3.000000 +0:15 4.000000 +0:15 5.000000 +0:15 6.000000 0:17 Branch: Return with expression 0:17 vector swizzle ( temp 4-component vector of float) 0:17 'sample' ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.implicitBool.frag.out b/Test/baseResults/hlsl.implicitBool.frag.out index 98e3dc0682..dd93b7f1e3 100644 --- a/Test/baseResults/hlsl.implicitBool.frag.out +++ b/Test/baseResults/hlsl.implicitBool.frag.out @@ -8,11 +8,11 @@ gl_FragCoord origin is upper left 0:8 Sequence 0:8 move second child to first child ( temp 4-component vector of float) 0:8 'a' ( temp 4-component vector of float) -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:8 Constant: +0:8 2.000000 +0:8 2.000000 +0:8 2.000000 +0:8 2.000000 0:9 Test condition and select ( temp void) 0:9 Condition 0:9 Convert int to bool ( temp bool) @@ -176,11 +176,11 @@ gl_FragCoord origin is upper left 0:8 Sequence 0:8 move second child to first child ( temp 4-component vector of float) 0:8 'a' ( temp 4-component vector of float) -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:8 Constant: +0:8 2.000000 +0:8 2.000000 +0:8 2.000000 +0:8 2.000000 0:9 Test condition and select ( temp void) 0:9 Condition 0:9 Convert int to bool ( temp bool) diff --git a/Test/baseResults/hlsl.init.frag.out b/Test/baseResults/hlsl.init.frag.out index 97caf9a1c8..f604f0a096 100644 --- a/Test/baseResults/hlsl.init.frag.out +++ b/Test/baseResults/hlsl.init.frag.out @@ -8,18 +8,18 @@ gl_FragCoord origin is upper left 0:1 Sequence 0:1 move second child to first child ( temp 4-component vector of float) 0:1 'a1' ( global 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 0.500000 -0:? 0.000000 -0:? 1.000000 +0:1 Constant: +0:1 1.000000 +0:1 0.500000 +0:1 0.000000 +0:1 1.000000 0:1 move second child to first child ( temp 4-component vector of float) 0:1 'b1' ( global 4-component vector of float) -0:? Constant: -0:? 2.000000 -0:? 2.500000 -0:? 2.100000 -0:? 2.200000 +0:1 Constant: +0:1 2.000000 +0:1 2.500000 +0:1 2.100000 +0:1 2.200000 0:2 Sequence 0:2 move second child to first child ( temp 4-component vector of float) 0:2 'a1i' ( global 4-component vector of float) @@ -88,11 +88,11 @@ gl_FragCoord origin is upper left 0:22 Sequence 0:22 move second child to first child ( temp 4-component vector of float) 0:22 'a2' ( temp 4-component vector of float) -0:? Constant: -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:22 Constant: +0:22 0.200000 +0:22 0.300000 +0:22 0.400000 +0:22 0.500000 0:32 Sequence 0:32 move second child to first child ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) 0:32 's2i' ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) @@ -108,11 +108,11 @@ gl_FragCoord origin is upper left 0:32 12 (const int) 0:32 move second child to first child ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) 0:32 's2' ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) -0:? Construct structure ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 Construct structure ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) 0:32 Constant: 0:32 9 (const int) 0:32 'a5' ( global float) -0:? Construct structure ( temp structure{ temp float f, temp int i}) +0:32 Construct structure ( temp structure{ temp float f, temp int i}) 0:32 Comma ( temp float) 0:32 'a3' ( global float) 0:32 'a4' ( global float) @@ -174,18 +174,18 @@ gl_FragCoord origin is upper left 0:1 Sequence 0:1 move second child to first child ( temp 4-component vector of float) 0:1 'a1' ( global 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 0.500000 -0:? 0.000000 -0:? 1.000000 +0:1 Constant: +0:1 1.000000 +0:1 0.500000 +0:1 0.000000 +0:1 1.000000 0:1 move second child to first child ( temp 4-component vector of float) 0:1 'b1' ( global 4-component vector of float) -0:? Constant: -0:? 2.000000 -0:? 2.500000 -0:? 2.100000 -0:? 2.200000 +0:1 Constant: +0:1 2.000000 +0:1 2.500000 +0:1 2.100000 +0:1 2.200000 0:2 Sequence 0:2 move second child to first child ( temp 4-component vector of float) 0:2 'a1i' ( global 4-component vector of float) @@ -254,11 +254,11 @@ gl_FragCoord origin is upper left 0:22 Sequence 0:22 move second child to first child ( temp 4-component vector of float) 0:22 'a2' ( temp 4-component vector of float) -0:? Constant: -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:22 Constant: +0:22 0.200000 +0:22 0.300000 +0:22 0.400000 +0:22 0.500000 0:32 Sequence 0:32 move second child to first child ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) 0:32 's2i' ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) @@ -274,11 +274,11 @@ gl_FragCoord origin is upper left 0:32 12 (const int) 0:32 move second child to first child ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) 0:32 's2' ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) -0:? Construct structure ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) +0:32 Construct structure ( temp structure{ temp int j, temp float g, temp structure{ temp float f, temp int i} s1}) 0:32 Constant: 0:32 9 (const int) 0:32 'a5' ( global float) -0:? Construct structure ( temp structure{ temp float f, temp int i}) +0:32 Construct structure ( temp structure{ temp float f, temp int i}) 0:32 Comma ( temp float) 0:32 'a3' ( global float) 0:32 'a4' ( global float) diff --git a/Test/baseResults/hlsl.init2.frag.out b/Test/baseResults/hlsl.init2.frag.out index 9654e2b54d..5039333ba0 100644 --- a/Test/baseResults/hlsl.init2.frag.out +++ b/Test/baseResults/hlsl.init2.frag.out @@ -41,73 +41,73 @@ gl_FragCoord origin is upper left 0:26 'a' ( const (read only) 8-element array of 3-component vector of float) 0:26 Construct vec3 ( temp 8-element array of 3-component vector of float) 0:27 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? 0.577350 -0:? 0.577350 -0:? 0.577350 +0:27 Constant: +0:27 0.577350 +0:27 0.577350 +0:27 0.577350 0:27 add second child into first child ( temp float) 0:27 'n' ( temp float) 0:27 Constant: 0:27 1.000000 0:28 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? -0.577350 -0:? -0.577350 +0:28 Constant: +0:28 -0.577350 +0:28 -0.577350 +0:28 -0.577350 0:28 add second child into first child ( temp float) 0:28 'n' ( temp float) 0:28 Constant: 0:28 1.000000 0:29 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? -0.577350 -0:? 0.577350 +0:29 Constant: +0:29 -0.577350 +0:29 -0.577350 +0:29 0.577350 0:29 add second child into first child ( temp float) 0:29 'n' ( temp float) 0:29 Constant: 0:29 1.000000 0:30 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? -0.577350 +0:30 Constant: +0:30 -0.577350 +0:30 0.577350 +0:30 -0.577350 0:30 add second child into first child ( temp float) 0:30 'n' ( temp float) 0:30 Constant: 0:30 1.000000 0:31 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? 0.577350 +0:31 Constant: +0:31 -0.577350 +0:31 0.577350 +0:31 0.577350 0:31 add second child into first child ( temp float) 0:31 'n' ( temp float) 0:31 Constant: 0:31 1.000000 0:32 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? 0.577350 -0:? -0.577350 -0:? -0.577350 +0:32 Constant: +0:32 0.577350 +0:32 -0.577350 +0:32 -0.577350 0:32 add second child into first child ( temp float) 0:32 'n' ( temp float) 0:32 Constant: 0:32 1.000000 0:33 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? 0.577350 -0:? -0.577350 -0:? 0.577350 +0:33 Constant: +0:33 0.577350 +0:33 -0.577350 +0:33 0.577350 0:33 add second child into first child ( temp float) 0:33 'n' ( temp float) 0:33 Constant: 0:33 1.000000 0:34 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? 0.577350 -0:? 0.577350 -0:? -0.577350 +0:34 Constant: +0:34 0.577350 +0:34 0.577350 +0:34 -0.577350 0:34 add second child into first child ( temp float) 0:34 'n' ( temp float) 0:34 Constant: @@ -117,10 +117,10 @@ gl_FragCoord origin is upper left 0:36 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a}) 0:36 Construct structure ( temp structure{ temp 3-component vector of float a}) 0:36 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? 0.577350 +0:36 Constant: +0:36 -0.577350 +0:36 0.577350 +0:36 0.577350 0:36 add second child into first child ( temp float) 0:36 'n' ( temp float) 0:36 Constant: @@ -130,19 +130,19 @@ gl_FragCoord origin is upper left 0:38 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b}) 0:38 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) 0:38 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? 0.577350 +0:38 Constant: +0:38 -0.577350 +0:38 0.577350 +0:38 0.577350 0:38 add second child into first child ( temp float) 0:38 'n' ( temp float) 0:38 Constant: 0:38 1.000000 0:39 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? 0.577350 +0:39 Constant: +0:39 -0.577350 +0:39 0.577350 +0:39 0.577350 0:39 add second child into first child ( temp float) 0:39 'n' ( temp float) 0:39 Constant: @@ -222,73 +222,73 @@ gl_FragCoord origin is upper left 0:26 'a' ( const (read only) 8-element array of 3-component vector of float) 0:26 Construct vec3 ( temp 8-element array of 3-component vector of float) 0:27 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? 0.577350 -0:? 0.577350 -0:? 0.577350 +0:27 Constant: +0:27 0.577350 +0:27 0.577350 +0:27 0.577350 0:27 add second child into first child ( temp float) 0:27 'n' ( temp float) 0:27 Constant: 0:27 1.000000 0:28 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? -0.577350 -0:? -0.577350 +0:28 Constant: +0:28 -0.577350 +0:28 -0.577350 +0:28 -0.577350 0:28 add second child into first child ( temp float) 0:28 'n' ( temp float) 0:28 Constant: 0:28 1.000000 0:29 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? -0.577350 -0:? 0.577350 +0:29 Constant: +0:29 -0.577350 +0:29 -0.577350 +0:29 0.577350 0:29 add second child into first child ( temp float) 0:29 'n' ( temp float) 0:29 Constant: 0:29 1.000000 0:30 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? -0.577350 +0:30 Constant: +0:30 -0.577350 +0:30 0.577350 +0:30 -0.577350 0:30 add second child into first child ( temp float) 0:30 'n' ( temp float) 0:30 Constant: 0:30 1.000000 0:31 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? 0.577350 +0:31 Constant: +0:31 -0.577350 +0:31 0.577350 +0:31 0.577350 0:31 add second child into first child ( temp float) 0:31 'n' ( temp float) 0:31 Constant: 0:31 1.000000 0:32 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? 0.577350 -0:? -0.577350 -0:? -0.577350 +0:32 Constant: +0:32 0.577350 +0:32 -0.577350 +0:32 -0.577350 0:32 add second child into first child ( temp float) 0:32 'n' ( temp float) 0:32 Constant: 0:32 1.000000 0:33 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? 0.577350 -0:? -0.577350 -0:? 0.577350 +0:33 Constant: +0:33 0.577350 +0:33 -0.577350 +0:33 0.577350 0:33 add second child into first child ( temp float) 0:33 'n' ( temp float) 0:33 Constant: 0:33 1.000000 0:34 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? 0.577350 -0:? 0.577350 -0:? -0.577350 +0:34 Constant: +0:34 0.577350 +0:34 0.577350 +0:34 -0.577350 0:34 add second child into first child ( temp float) 0:34 'n' ( temp float) 0:34 Constant: @@ -298,10 +298,10 @@ gl_FragCoord origin is upper left 0:36 'oneNonConst' ( const (read only) structure{ temp 3-component vector of float a}) 0:36 Construct structure ( temp structure{ temp 3-component vector of float a}) 0:36 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? 0.577350 +0:36 Constant: +0:36 -0.577350 +0:36 0.577350 +0:36 0.577350 0:36 add second child into first child ( temp float) 0:36 'n' ( temp float) 0:36 Constant: @@ -311,19 +311,19 @@ gl_FragCoord origin is upper left 0:38 'twoNonConst' ( const (read only) structure{ temp 3-component vector of float a, temp 3-component vector of float b}) 0:38 Construct structure ( temp structure{ temp 3-component vector of float a, temp 3-component vector of float b}) 0:38 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? 0.577350 +0:38 Constant: +0:38 -0.577350 +0:38 0.577350 +0:38 0.577350 0:38 add second child into first child ( temp float) 0:38 'n' ( temp float) 0:38 Constant: 0:38 1.000000 0:39 vector-scale ( temp 3-component vector of float) -0:? Constant: -0:? -0.577350 -0:? 0.577350 -0:? 0.577350 +0:39 Constant: +0:39 -0.577350 +0:39 0.577350 +0:39 0.577350 0:39 add second child into first child ( temp float) 0:39 'n' ( temp float) 0:39 Constant: diff --git a/Test/baseResults/hlsl.inoutquals.frag.out b/Test/baseResults/hlsl.inoutquals.frag.out index 57baeef8cd..25186cb0ef 100644 --- a/Test/baseResults/hlsl.inoutquals.frag.out +++ b/Test/baseResults/hlsl.inoutquals.frag.out @@ -51,7 +51,7 @@ using depth_any 0:22 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) 0:22 Constant: 0:22 0 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:22 Construct vec4 ( temp 4-component vector of float) 0:22 'x' ( temp float) 0:22 'y' ( temp float) 0:22 'z' ( temp float) @@ -160,7 +160,7 @@ using depth_any 0:22 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) 0:22 Constant: 0:22 0 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:22 Construct vec4 ( temp 4-component vector of float) 0:22 'x' ( temp float) 0:22 'y' ( temp float) 0:22 'z' ( temp float) diff --git a/Test/baseResults/hlsl.intrinsic.frexp.frag.out b/Test/baseResults/hlsl.intrinsic.frexp.frag.out index 6067ad0e11..1595a6094a 100644 --- a/Test/baseResults/hlsl.intrinsic.frexp.frag.out +++ b/Test/baseResults/hlsl.intrinsic.frexp.frag.out @@ -28,9 +28,9 @@ gl_FragCoord origin is upper left 0:10 'inF0' ( in 2-component vector of float) 0:10 'inF1' ( in 2-component vector of float) 0:11 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:11 Constant: +0:11 1.000000 +0:11 2.000000 0:15 Function Definition: PixelShaderFunction3(vf3;vf3; ( temp 3-component vector of float) 0:15 Function Parameters: 0:15 'inF0' ( in 3-component vector of float) @@ -43,10 +43,10 @@ gl_FragCoord origin is upper left 0:16 'inF0' ( in 3-component vector of float) 0:16 'inF1' ( in 3-component vector of float) 0:17 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:17 Constant: +0:17 1.000000 +0:17 2.000000 +0:17 3.000000 0:21 Function Definition: PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float) 0:21 Function Parameters: 0:21 'inF0' ( in 4-component vector of float) @@ -59,11 +59,11 @@ gl_FragCoord origin is upper left 0:22 'inF0' ( in 4-component vector of float) 0:22 'inF1' ( in 4-component vector of float) 0:23 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:23 Constant: +0:23 1.000000 +0:23 2.000000 +0:23 3.000000 +0:23 4.000000 0:33 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) 0:33 Function Parameters: 0:? Sequence @@ -125,9 +125,9 @@ gl_FragCoord origin is upper left 0:10 'inF0' ( in 2-component vector of float) 0:10 'inF1' ( in 2-component vector of float) 0:11 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:11 Constant: +0:11 1.000000 +0:11 2.000000 0:15 Function Definition: PixelShaderFunction3(vf3;vf3; ( temp 3-component vector of float) 0:15 Function Parameters: 0:15 'inF0' ( in 3-component vector of float) @@ -140,10 +140,10 @@ gl_FragCoord origin is upper left 0:16 'inF0' ( in 3-component vector of float) 0:16 'inF1' ( in 3-component vector of float) 0:17 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:17 Constant: +0:17 1.000000 +0:17 2.000000 +0:17 3.000000 0:21 Function Definition: PixelShaderFunction(vf4;vf4; ( temp 4-component vector of float) 0:21 Function Parameters: 0:21 'inF0' ( in 4-component vector of float) @@ -156,11 +156,11 @@ gl_FragCoord origin is upper left 0:22 'inF0' ( in 4-component vector of float) 0:22 'inF1' ( in 4-component vector of float) 0:23 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:23 Constant: +0:23 1.000000 +0:23 2.000000 +0:23 3.000000 +0:23 4.000000 0:33 Function Definition: @main( ( temp structure{ temp 4-component vector of float color}) 0:33 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.intrinsic.frexp.vert.out b/Test/baseResults/hlsl.intrinsic.frexp.vert.out index a7cfd2a7aa..0418ed6cd3 100644 --- a/Test/baseResults/hlsl.intrinsic.frexp.vert.out +++ b/Test/baseResults/hlsl.intrinsic.frexp.vert.out @@ -21,9 +21,9 @@ Shader version: 500 0:9 'inF0' ( in 2-component vector of float) 0:9 'inF1' ( in 2-component vector of float) 0:10 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:10 Constant: +0:10 1.000000 +0:10 2.000000 0:14 Function Definition: VertexShaderFunction3(vf3;vf3; ( temp 3-component vector of float) 0:14 Function Parameters: 0:14 'inF0' ( in 3-component vector of float) @@ -33,10 +33,10 @@ Shader version: 500 0:15 'inF0' ( in 3-component vector of float) 0:15 'inF1' ( in 3-component vector of float) 0:16 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:16 Constant: +0:16 1.000000 +0:16 2.000000 +0:16 3.000000 0:20 Function Definition: VertexShaderFunction4(vf4;vf4; ( temp 4-component vector of float) 0:20 Function Parameters: 0:20 'inF0' ( in 4-component vector of float) @@ -46,11 +46,11 @@ Shader version: 500 0:21 'inF0' ( in 4-component vector of float) 0:21 'inF1' ( in 4-component vector of float) 0:22 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:22 Constant: +0:22 1.000000 +0:22 2.000000 +0:22 3.000000 +0:22 4.000000 0:? Linker Objects @@ -80,9 +80,9 @@ Shader version: 500 0:9 'inF0' ( in 2-component vector of float) 0:9 'inF1' ( in 2-component vector of float) 0:10 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:10 Constant: +0:10 1.000000 +0:10 2.000000 0:14 Function Definition: VertexShaderFunction3(vf3;vf3; ( temp 3-component vector of float) 0:14 Function Parameters: 0:14 'inF0' ( in 3-component vector of float) @@ -92,10 +92,10 @@ Shader version: 500 0:15 'inF0' ( in 3-component vector of float) 0:15 'inF1' ( in 3-component vector of float) 0:16 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:16 Constant: +0:16 1.000000 +0:16 2.000000 +0:16 3.000000 0:20 Function Definition: VertexShaderFunction4(vf4;vf4; ( temp 4-component vector of float) 0:20 Function Parameters: 0:20 'inF0' ( in 4-component vector of float) @@ -105,11 +105,11 @@ Shader version: 500 0:21 'inF0' ( in 4-component vector of float) 0:21 'inF1' ( in 4-component vector of float) 0:22 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:22 Constant: +0:22 1.000000 +0:22 2.000000 +0:22 3.000000 +0:22 4.000000 0:? Linker Objects // Module Version 10000 diff --git a/Test/baseResults/hlsl.intrinsics.comp.out b/Test/baseResults/hlsl.intrinsics.comp.out index 5b7e22761e..bce3d149d3 100644 --- a/Test/baseResults/hlsl.intrinsics.comp.out +++ b/Test/baseResults/hlsl.intrinsics.comp.out @@ -155,9 +155,9 @@ local_size = (1, 1, 1) 0:71 'gs_ua2' ( shared 2-component vector of uint) 0:71 'gs_ub2' ( shared 2-component vector of uint) 0:74 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:74 Constant: +0:74 1.000000 +0:74 2.000000 0:78 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) 0:78 Function Parameters: 0:78 'inF0' ( in 3-component vector of float) @@ -229,10 +229,10 @@ local_size = (1, 1, 1) 0:98 'gs_ua3' ( shared 3-component vector of uint) 0:98 'gs_ub3' ( shared 3-component vector of uint) 0:101 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:101 Constant: +0:101 1.000000 +0:101 2.000000 +0:101 3.000000 0:105 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) 0:105 Function Parameters: 0:105 'inF0' ( in 4-component vector of float) @@ -304,11 +304,11 @@ local_size = (1, 1, 1) 0:125 'gs_ua4' ( shared 4-component vector of uint) 0:125 'gs_ub4' ( shared 4-component vector of uint) 0:128 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:128 Constant: +0:128 1.000000 +0:128 2.000000 +0:128 3.000000 +0:128 4.000000 0:105 Function Definition: ComputeShaderFunction( ( temp void) 0:105 Function Parameters: 0:? Sequence @@ -515,9 +515,9 @@ local_size = (1, 1, 1) 0:71 'gs_ua2' ( shared 2-component vector of uint) 0:71 'gs_ub2' ( shared 2-component vector of uint) 0:74 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:74 Constant: +0:74 1.000000 +0:74 2.000000 0:78 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) 0:78 Function Parameters: 0:78 'inF0' ( in 3-component vector of float) @@ -589,10 +589,10 @@ local_size = (1, 1, 1) 0:98 'gs_ua3' ( shared 3-component vector of uint) 0:98 'gs_ub3' ( shared 3-component vector of uint) 0:101 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:101 Constant: +0:101 1.000000 +0:101 2.000000 +0:101 3.000000 0:105 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) 0:105 Function Parameters: 0:105 'inF0' ( in 4-component vector of float) @@ -664,11 +664,11 @@ local_size = (1, 1, 1) 0:125 'gs_ua4' ( shared 4-component vector of uint) 0:125 'gs_ub4' ( shared 4-component vector of uint) 0:128 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:128 Constant: +0:128 1.000000 +0:128 2.000000 +0:128 3.000000 +0:128 4.000000 0:105 Function Definition: ComputeShaderFunction( ( temp void) 0:105 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.intrinsics.frag.out b/Test/baseResults/hlsl.intrinsics.frag.out index c1d0a47877..02b1e6d12a 100644 --- a/Test/baseResults/hlsl.intrinsics.frag.out +++ b/Test/baseResults/hlsl.intrinsics.frag.out @@ -472,10 +472,10 @@ gl_FragCoord origin is upper left 0:117 Sequence 0:117 move second child to first child ( temp 2-component vector of int) 0:117 'r016' ( temp 2-component vector of int) -0:? bitCount ( temp 2-component vector of int) -0:? Constant: -0:? 7 (const int) -0:? 3 (const int) +0:117 bitCount ( temp 2-component vector of int) +0:117 Constant: +0:117 7 (const int) +0:117 3 (const int) 0:118 Sequence 0:118 move second child to first child ( temp 2-component vector of float) 0:118 'r017' ( temp 2-component vector of float) @@ -543,17 +543,17 @@ gl_FragCoord origin is upper left 0:136 Sequence 0:136 move second child to first child ( temp 2-component vector of uint) 0:136 'r031' ( temp 2-component vector of uint) -0:? findMSB ( temp 2-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 8 (const uint) +0:136 findMSB ( temp 2-component vector of uint) +0:136 Constant: +0:136 7 (const uint) +0:136 8 (const uint) 0:137 Sequence 0:137 move second child to first child ( temp 2-component vector of uint) 0:137 'r032' ( temp 2-component vector of uint) -0:? findLSB ( temp 2-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 8 (const uint) +0:137 findLSB ( temp 2-component vector of uint) +0:137 Constant: +0:137 7 (const uint) +0:137 8 (const uint) 0:138 Sequence 0:138 move second child to first child ( temp 2-component vector of float) 0:138 'r033' ( temp 2-component vector of float) @@ -673,10 +673,10 @@ gl_FragCoord origin is upper left 0:159 Sequence 0:159 move second child to first child ( temp 2-component vector of uint) 0:159 'r054' ( temp 2-component vector of uint) -0:? bitFieldReverse ( temp 2-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) +0:159 bitFieldReverse ( temp 2-component vector of uint) +0:159 Constant: +0:159 1 (const uint) +0:159 2 (const uint) 0:160 Sequence 0:160 move second child to first child ( temp 2-component vector of float) 0:160 'r055' ( temp 2-component vector of float) @@ -754,9 +754,9 @@ gl_FragCoord origin is upper left 0:173 trunc ( temp 2-component vector of float) 0:173 'inF0' ( in 2-component vector of float) 0:176 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:176 Constant: +0:176 1.000000 +0:176 2.000000 0:180 Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) 0:180 Function Parameters: 0:180 'inF0' ( in 3-component vector of float) @@ -865,11 +865,11 @@ gl_FragCoord origin is upper left 0:200 Sequence 0:200 move second child to first child ( temp 3-component vector of uint) 0:200 'r015' ( temp 3-component vector of uint) -0:? bitCount ( temp 3-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 3 (const uint) -0:? 5 (const uint) +0:200 bitCount ( temp 3-component vector of uint) +0:200 Constant: +0:200 7 (const uint) +0:200 3 (const uint) +0:200 5 (const uint) 0:201 Sequence 0:201 move second child to first child ( temp 3-component vector of float) 0:201 'r016' ( temp 3-component vector of float) @@ -943,19 +943,19 @@ gl_FragCoord origin is upper left 0:217 Sequence 0:217 move second child to first child ( temp 3-component vector of uint) 0:217 'r032' ( temp 3-component vector of uint) -0:? findMSB ( temp 3-component vector of uint) -0:? Constant: -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:217 findMSB ( temp 3-component vector of uint) +0:217 Constant: +0:217 2 (const uint) +0:217 3 (const uint) +0:217 4 (const uint) 0:218 Sequence 0:218 move second child to first child ( temp 3-component vector of uint) 0:218 'r033' ( temp 3-component vector of uint) -0:? findLSB ( temp 3-component vector of uint) -0:? Constant: -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:218 findLSB ( temp 3-component vector of uint) +0:218 Constant: +0:218 2 (const uint) +0:218 3 (const uint) +0:218 4 (const uint) 0:219 Sequence 0:219 move second child to first child ( temp 3-component vector of float) 0:219 'r034' ( temp 3-component vector of float) @@ -1083,11 +1083,11 @@ gl_FragCoord origin is upper left 0:241 Sequence 0:241 move second child to first child ( temp 3-component vector of uint) 0:241 'r055' ( temp 3-component vector of uint) -0:? bitFieldReverse ( temp 3-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) +0:241 bitFieldReverse ( temp 3-component vector of uint) +0:241 Constant: +0:241 1 (const uint) +0:241 2 (const uint) +0:241 3 (const uint) 0:242 Sequence 0:242 move second child to first child ( temp 3-component vector of float) 0:242 'r056' ( temp 3-component vector of float) @@ -1165,10 +1165,10 @@ gl_FragCoord origin is upper left 0:255 trunc ( temp 3-component vector of float) 0:255 'inF0' ( in 3-component vector of float) 0:258 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:258 Constant: +0:258 1.000000 +0:258 2.000000 +0:258 3.000000 0:262 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) 0:262 Function Parameters: 0:262 'inF0' ( in 4-component vector of float) @@ -1279,12 +1279,12 @@ gl_FragCoord origin is upper left 0:282 Sequence 0:282 move second child to first child ( temp 4-component vector of uint) 0:282 'r015' ( temp 4-component vector of uint) -0:? bitCount ( temp 4-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 3 (const uint) -0:? 5 (const uint) -0:? 2 (const uint) +0:282 bitCount ( temp 4-component vector of uint) +0:282 Constant: +0:282 7 (const uint) +0:282 3 (const uint) +0:282 5 (const uint) +0:282 2 (const uint) 0:283 Sequence 0:283 move second child to first child ( temp 4-component vector of float) 0:283 'r016' ( temp 4-component vector of float) @@ -1375,21 +1375,21 @@ gl_FragCoord origin is upper left 0:299 Sequence 0:299 move second child to first child ( temp 4-component vector of uint) 0:299 'r032' ( temp 4-component vector of uint) -0:? findMSB ( temp 4-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 8 (const uint) -0:? 9 (const uint) -0:? 10 (const uint) +0:299 findMSB ( temp 4-component vector of uint) +0:299 Constant: +0:299 7 (const uint) +0:299 8 (const uint) +0:299 9 (const uint) +0:299 10 (const uint) 0:300 Sequence 0:300 move second child to first child ( temp 4-component vector of uint) 0:300 'r033' ( temp 4-component vector of uint) -0:? findLSB ( temp 4-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 8 (const uint) -0:? 9 (const uint) -0:? 10 (const uint) +0:300 findLSB ( temp 4-component vector of uint) +0:300 Constant: +0:300 7 (const uint) +0:300 8 (const uint) +0:300 9 (const uint) +0:300 10 (const uint) 0:301 Sequence 0:301 move second child to first child ( temp 4-component vector of float) 0:301 'r034' ( temp 4-component vector of float) @@ -1509,12 +1509,12 @@ gl_FragCoord origin is upper left 0:322 Sequence 0:322 move second child to first child ( temp 4-component vector of uint) 0:322 'r055' ( temp 4-component vector of uint) -0:? bitFieldReverse ( temp 4-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:322 bitFieldReverse ( temp 4-component vector of uint) +0:322 Constant: +0:322 1 (const uint) +0:322 2 (const uint) +0:322 3 (const uint) +0:322 4 (const uint) 0:323 Sequence 0:323 move second child to first child ( temp 4-component vector of float) 0:323 'r056' ( temp 4-component vector of float) @@ -1592,11 +1592,11 @@ gl_FragCoord origin is upper left 0:336 trunc ( temp 4-component vector of float) 0:336 'inF0' ( in 4-component vector of float) 0:339 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:339 Constant: +0:339 1.000000 +0:339 2.000000 +0:339 3.000000 +0:339 4.000000 0:402 Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float) 0:402 Function Parameters: 0:402 'inF0' ( in 2X2 matrix of float) @@ -1876,11 +1876,11 @@ gl_FragCoord origin is upper left 0:404 trunc ( temp 2X2 matrix of float) 0:404 'inF0' ( in 2X2 matrix of float) 0:407 Branch: Return with expression -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:407 Constant: +0:407 2.000000 +0:407 2.000000 +0:407 2.000000 +0:407 2.000000 0:411 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) 0:411 Function Parameters: 0:411 'inF0' ( in 3X3 matrix of float) @@ -2165,16 +2165,16 @@ gl_FragCoord origin is upper left 0:413 trunc ( temp 3X3 matrix of float) 0:413 'inF0' ( in 3X3 matrix of float) 0:416 Branch: Return with expression -0:? Constant: -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 +0:416 Constant: +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 0:420 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) 0:420 Function Parameters: 0:420 'inF0' ( in 4X4 matrix of float) @@ -2466,23 +2466,23 @@ gl_FragCoord origin is upper left 0:422 trunc ( temp 4X4 matrix of float) 0:422 'inF0' ( in 4X4 matrix of float) 0:425 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 +0:425 Constant: +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 0:443 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void) 0:443 Function Parameters: 0:443 'inF0' ( in float) @@ -3303,10 +3303,10 @@ gl_FragCoord origin is upper left 0:117 Sequence 0:117 move second child to first child ( temp 2-component vector of int) 0:117 'r016' ( temp 2-component vector of int) -0:? bitCount ( temp 2-component vector of int) -0:? Constant: -0:? 7 (const int) -0:? 3 (const int) +0:117 bitCount ( temp 2-component vector of int) +0:117 Constant: +0:117 7 (const int) +0:117 3 (const int) 0:118 Sequence 0:118 move second child to first child ( temp 2-component vector of float) 0:118 'r017' ( temp 2-component vector of float) @@ -3374,17 +3374,17 @@ gl_FragCoord origin is upper left 0:136 Sequence 0:136 move second child to first child ( temp 2-component vector of uint) 0:136 'r031' ( temp 2-component vector of uint) -0:? findMSB ( temp 2-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 8 (const uint) +0:136 findMSB ( temp 2-component vector of uint) +0:136 Constant: +0:136 7 (const uint) +0:136 8 (const uint) 0:137 Sequence 0:137 move second child to first child ( temp 2-component vector of uint) 0:137 'r032' ( temp 2-component vector of uint) -0:? findLSB ( temp 2-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 8 (const uint) +0:137 findLSB ( temp 2-component vector of uint) +0:137 Constant: +0:137 7 (const uint) +0:137 8 (const uint) 0:138 Sequence 0:138 move second child to first child ( temp 2-component vector of float) 0:138 'r033' ( temp 2-component vector of float) @@ -3504,10 +3504,10 @@ gl_FragCoord origin is upper left 0:159 Sequence 0:159 move second child to first child ( temp 2-component vector of uint) 0:159 'r054' ( temp 2-component vector of uint) -0:? bitFieldReverse ( temp 2-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) +0:159 bitFieldReverse ( temp 2-component vector of uint) +0:159 Constant: +0:159 1 (const uint) +0:159 2 (const uint) 0:160 Sequence 0:160 move second child to first child ( temp 2-component vector of float) 0:160 'r055' ( temp 2-component vector of float) @@ -3585,9 +3585,9 @@ gl_FragCoord origin is upper left 0:173 trunc ( temp 2-component vector of float) 0:173 'inF0' ( in 2-component vector of float) 0:176 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:176 Constant: +0:176 1.000000 +0:176 2.000000 0:180 Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) 0:180 Function Parameters: 0:180 'inF0' ( in 3-component vector of float) @@ -3696,11 +3696,11 @@ gl_FragCoord origin is upper left 0:200 Sequence 0:200 move second child to first child ( temp 3-component vector of uint) 0:200 'r015' ( temp 3-component vector of uint) -0:? bitCount ( temp 3-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 3 (const uint) -0:? 5 (const uint) +0:200 bitCount ( temp 3-component vector of uint) +0:200 Constant: +0:200 7 (const uint) +0:200 3 (const uint) +0:200 5 (const uint) 0:201 Sequence 0:201 move second child to first child ( temp 3-component vector of float) 0:201 'r016' ( temp 3-component vector of float) @@ -3774,19 +3774,19 @@ gl_FragCoord origin is upper left 0:217 Sequence 0:217 move second child to first child ( temp 3-component vector of uint) 0:217 'r032' ( temp 3-component vector of uint) -0:? findMSB ( temp 3-component vector of uint) -0:? Constant: -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:217 findMSB ( temp 3-component vector of uint) +0:217 Constant: +0:217 2 (const uint) +0:217 3 (const uint) +0:217 4 (const uint) 0:218 Sequence 0:218 move second child to first child ( temp 3-component vector of uint) 0:218 'r033' ( temp 3-component vector of uint) -0:? findLSB ( temp 3-component vector of uint) -0:? Constant: -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:218 findLSB ( temp 3-component vector of uint) +0:218 Constant: +0:218 2 (const uint) +0:218 3 (const uint) +0:218 4 (const uint) 0:219 Sequence 0:219 move second child to first child ( temp 3-component vector of float) 0:219 'r034' ( temp 3-component vector of float) @@ -3914,11 +3914,11 @@ gl_FragCoord origin is upper left 0:241 Sequence 0:241 move second child to first child ( temp 3-component vector of uint) 0:241 'r055' ( temp 3-component vector of uint) -0:? bitFieldReverse ( temp 3-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) +0:241 bitFieldReverse ( temp 3-component vector of uint) +0:241 Constant: +0:241 1 (const uint) +0:241 2 (const uint) +0:241 3 (const uint) 0:242 Sequence 0:242 move second child to first child ( temp 3-component vector of float) 0:242 'r056' ( temp 3-component vector of float) @@ -3996,10 +3996,10 @@ gl_FragCoord origin is upper left 0:255 trunc ( temp 3-component vector of float) 0:255 'inF0' ( in 3-component vector of float) 0:258 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:258 Constant: +0:258 1.000000 +0:258 2.000000 +0:258 3.000000 0:262 Function Definition: PixelShaderFunction(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) 0:262 Function Parameters: 0:262 'inF0' ( in 4-component vector of float) @@ -4110,12 +4110,12 @@ gl_FragCoord origin is upper left 0:282 Sequence 0:282 move second child to first child ( temp 4-component vector of uint) 0:282 'r015' ( temp 4-component vector of uint) -0:? bitCount ( temp 4-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 3 (const uint) -0:? 5 (const uint) -0:? 2 (const uint) +0:282 bitCount ( temp 4-component vector of uint) +0:282 Constant: +0:282 7 (const uint) +0:282 3 (const uint) +0:282 5 (const uint) +0:282 2 (const uint) 0:283 Sequence 0:283 move second child to first child ( temp 4-component vector of float) 0:283 'r016' ( temp 4-component vector of float) @@ -4206,21 +4206,21 @@ gl_FragCoord origin is upper left 0:299 Sequence 0:299 move second child to first child ( temp 4-component vector of uint) 0:299 'r032' ( temp 4-component vector of uint) -0:? findMSB ( temp 4-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 8 (const uint) -0:? 9 (const uint) -0:? 10 (const uint) +0:299 findMSB ( temp 4-component vector of uint) +0:299 Constant: +0:299 7 (const uint) +0:299 8 (const uint) +0:299 9 (const uint) +0:299 10 (const uint) 0:300 Sequence 0:300 move second child to first child ( temp 4-component vector of uint) 0:300 'r033' ( temp 4-component vector of uint) -0:? findLSB ( temp 4-component vector of uint) -0:? Constant: -0:? 7 (const uint) -0:? 8 (const uint) -0:? 9 (const uint) -0:? 10 (const uint) +0:300 findLSB ( temp 4-component vector of uint) +0:300 Constant: +0:300 7 (const uint) +0:300 8 (const uint) +0:300 9 (const uint) +0:300 10 (const uint) 0:301 Sequence 0:301 move second child to first child ( temp 4-component vector of float) 0:301 'r034' ( temp 4-component vector of float) @@ -4340,12 +4340,12 @@ gl_FragCoord origin is upper left 0:322 Sequence 0:322 move second child to first child ( temp 4-component vector of uint) 0:322 'r055' ( temp 4-component vector of uint) -0:? bitFieldReverse ( temp 4-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:322 bitFieldReverse ( temp 4-component vector of uint) +0:322 Constant: +0:322 1 (const uint) +0:322 2 (const uint) +0:322 3 (const uint) +0:322 4 (const uint) 0:323 Sequence 0:323 move second child to first child ( temp 4-component vector of float) 0:323 'r056' ( temp 4-component vector of float) @@ -4423,11 +4423,11 @@ gl_FragCoord origin is upper left 0:336 trunc ( temp 4-component vector of float) 0:336 'inF0' ( in 4-component vector of float) 0:339 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:339 Constant: +0:339 1.000000 +0:339 2.000000 +0:339 3.000000 +0:339 4.000000 0:402 Function Definition: PixelShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float) 0:402 Function Parameters: 0:402 'inF0' ( in 2X2 matrix of float) @@ -4707,11 +4707,11 @@ gl_FragCoord origin is upper left 0:404 trunc ( temp 2X2 matrix of float) 0:404 'inF0' ( in 2X2 matrix of float) 0:407 Branch: Return with expression -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:407 Constant: +0:407 2.000000 +0:407 2.000000 +0:407 2.000000 +0:407 2.000000 0:411 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) 0:411 Function Parameters: 0:411 'inF0' ( in 3X3 matrix of float) @@ -4996,16 +4996,16 @@ gl_FragCoord origin is upper left 0:413 trunc ( temp 3X3 matrix of float) 0:413 'inF0' ( in 3X3 matrix of float) 0:416 Branch: Return with expression -0:? Constant: -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 +0:416 Constant: +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 +0:416 3.000000 0:420 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) 0:420 Function Parameters: 0:420 'inF0' ( in 4X4 matrix of float) @@ -5297,23 +5297,23 @@ gl_FragCoord origin is upper left 0:422 trunc ( temp 4X4 matrix of float) 0:422 'inF0' ( in 4X4 matrix of float) 0:425 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 +0:425 Constant: +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 +0:425 4.000000 0:443 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void) 0:443 Function Parameters: 0:443 'inF0' ( in float) diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out index c6fcdf0256..ee88def1b7 100644 --- a/Test/baseResults/hlsl.intrinsics.negative.comp.out +++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out @@ -30,9 +30,9 @@ local_size = (1, 1, 1) 0:66 'inI0' ( in 2-component vector of int) 0:? Sequence 0:109 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:109 Constant: +0:109 1.000000 +0:109 2.000000 0:113 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) 0:113 Function Parameters: 0:113 'inF0' ( in 3-component vector of float) @@ -41,10 +41,10 @@ local_size = (1, 1, 1) 0:113 'inI0' ( in 3-component vector of int) 0:? Sequence 0:154 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:154 Constant: +0:154 1.000000 +0:154 2.000000 +0:154 3.000000 0:158 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) 0:158 Function Parameters: 0:158 'inF0' ( in 4-component vector of float) @@ -53,11 +53,11 @@ local_size = (1, 1, 1) 0:158 'inI0' ( in 4-component vector of int) 0:? Sequence 0:199 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:199 Constant: +0:199 1.000000 +0:199 2.000000 +0:199 3.000000 +0:199 4.000000 0:158 Function Definition: ComputeShaderFunction( ( temp void) 0:158 Function Parameters: 0:? Sequence @@ -122,9 +122,9 @@ local_size = (1, 1, 1) 0:66 'inI0' ( in 2-component vector of int) 0:? Sequence 0:109 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:109 Constant: +0:109 1.000000 +0:109 2.000000 0:113 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) 0:113 Function Parameters: 0:113 'inF0' ( in 3-component vector of float) @@ -133,10 +133,10 @@ local_size = (1, 1, 1) 0:113 'inI0' ( in 3-component vector of int) 0:? Sequence 0:154 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:154 Constant: +0:154 1.000000 +0:154 2.000000 +0:154 3.000000 0:158 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) 0:158 Function Parameters: 0:158 'inF0' ( in 4-component vector of float) @@ -145,11 +145,11 @@ local_size = (1, 1, 1) 0:158 'inI0' ( in 4-component vector of int) 0:? Sequence 0:199 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:199 Constant: +0:199 1.000000 +0:199 2.000000 +0:199 3.000000 +0:199 4.000000 0:158 Function Definition: ComputeShaderFunction( ( temp void) 0:158 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.intrinsics.negative.frag.out b/Test/baseResults/hlsl.intrinsics.negative.frag.out index 980cc96d02..4c021e02d6 100644 --- a/Test/baseResults/hlsl.intrinsics.negative.frag.out +++ b/Test/baseResults/hlsl.intrinsics.negative.frag.out @@ -224,9 +224,9 @@ ERROR: node is still EOpNull! 0:57 Constant: 0:57 0.000000 0:59 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:59 Constant: +0:59 1.000000 +0:59 2.000000 0:63 Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) 0:63 Function Parameters: 0:63 'inF0' ( in 3-component vector of float) @@ -283,10 +283,10 @@ ERROR: node is still EOpNull! 0:73 Constant: 0:73 0.000000 0:76 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:76 Constant: +0:76 1.000000 +0:76 2.000000 +0:76 3.000000 0:80 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) 0:80 Function Parameters: 0:80 'inF0' ( in 4-component vector of float) @@ -355,11 +355,11 @@ ERROR: node is still EOpNull! 0:90 Constant: 0:90 0.000000 0:92 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:92 Constant: +0:92 1.000000 +0:92 2.000000 +0:92 3.000000 +0:92 4.000000 0:80 Function Definition: PixelShaderFunction( ( temp void) 0:80 Function Parameters: 0:? Sequence @@ -415,11 +415,11 @@ ERROR: node is still EOpNull! 0:117 Constant: 0:117 0.000000 0:119 Branch: Return with expression -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:119 Constant: +0:119 2.000000 +0:119 2.000000 +0:119 2.000000 +0:119 2.000000 0:123 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) 0:123 Function Parameters: 0:123 'inF0' ( in 3X3 matrix of float) @@ -453,16 +453,16 @@ ERROR: node is still EOpNull! 0:125 Constant: 0:125 0.000000 0:127 Branch: Return with expression -0:? Constant: -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 +0:127 Constant: +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 0:131 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) 0:131 Function Parameters: 0:131 'inF0' ( in 4X4 matrix of float) @@ -496,23 +496,23 @@ ERROR: node is still EOpNull! 0:133 Constant: 0:133 0.000000 0:135 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 +0:135 Constant: +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 0:? Linker Objects 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) @@ -687,9 +687,9 @@ ERROR: node is still EOpNull! 0:57 Constant: 0:57 0.000000 0:59 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:59 Constant: +0:59 1.000000 +0:59 2.000000 0:63 Function Definition: PixelShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) 0:63 Function Parameters: 0:63 'inF0' ( in 3-component vector of float) @@ -746,10 +746,10 @@ ERROR: node is still EOpNull! 0:73 Constant: 0:73 0.000000 0:76 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:76 Constant: +0:76 1.000000 +0:76 2.000000 +0:76 3.000000 0:80 Function Definition: @PixelShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) 0:80 Function Parameters: 0:80 'inF0' ( in 4-component vector of float) @@ -818,11 +818,11 @@ ERROR: node is still EOpNull! 0:90 Constant: 0:90 0.000000 0:92 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:92 Constant: +0:92 1.000000 +0:92 2.000000 +0:92 3.000000 +0:92 4.000000 0:80 Function Definition: PixelShaderFunction( ( temp void) 0:80 Function Parameters: 0:? Sequence @@ -878,11 +878,11 @@ ERROR: node is still EOpNull! 0:117 Constant: 0:117 0.000000 0:119 Branch: Return with expression -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:119 Constant: +0:119 2.000000 +0:119 2.000000 +0:119 2.000000 +0:119 2.000000 0:123 Function Definition: PixelShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) 0:123 Function Parameters: 0:123 'inF0' ( in 3X3 matrix of float) @@ -916,16 +916,16 @@ ERROR: node is still EOpNull! 0:125 Constant: 0:125 0.000000 0:127 Branch: Return with expression -0:? Constant: -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 +0:127 Constant: +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 +0:127 3.000000 0:131 Function Definition: PixelShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) 0:131 Function Parameters: 0:131 'inF0' ( in 4X4 matrix of float) @@ -959,23 +959,23 @@ ERROR: node is still EOpNull! 0:133 Constant: 0:133 0.000000 0:135 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 +0:135 Constant: +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 +0:135 4.000000 0:? Linker Objects 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) diff --git a/Test/baseResults/hlsl.intrinsics.negative.vert.out b/Test/baseResults/hlsl.intrinsics.negative.vert.out index 0f74c7eda9..f1ab582623 100644 --- a/Test/baseResults/hlsl.intrinsics.negative.vert.out +++ b/Test/baseResults/hlsl.intrinsics.negative.vert.out @@ -29,9 +29,9 @@ Shader version: 500 0:84 'inI0' ( in 2-component vector of int) 0:? Sequence 0:127 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:127 Constant: +0:127 1.000000 +0:127 2.000000 0:131 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) 0:131 Function Parameters: 0:131 'inF0' ( in 3-component vector of float) @@ -40,10 +40,10 @@ Shader version: 500 0:131 'inI0' ( in 3-component vector of int) 0:? Sequence 0:172 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:172 Constant: +0:172 1.000000 +0:172 2.000000 +0:172 3.000000 0:176 Function Definition: @VertexShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) 0:176 Function Parameters: 0:176 'inF0' ( in 4-component vector of float) @@ -52,11 +52,11 @@ Shader version: 500 0:176 'inI0' ( in 4-component vector of int) 0:? Sequence 0:217 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:217 Constant: +0:217 1.000000 +0:217 2.000000 +0:217 3.000000 +0:217 4.000000 0:176 Function Definition: VertexShaderFunction( ( temp void) 0:176 Function Parameters: 0:? Sequence @@ -86,11 +86,11 @@ Shader version: 500 0:226 'inF2' ( in 2X2 matrix of float) 0:? Sequence 0:230 Branch: Return with expression -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:230 Constant: +0:230 2.000000 +0:230 2.000000 +0:230 2.000000 +0:230 2.000000 0:234 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) 0:234 Function Parameters: 0:234 'inF0' ( in 3X3 matrix of float) @@ -98,16 +98,16 @@ Shader version: 500 0:234 'inF2' ( in 3X3 matrix of float) 0:? Sequence 0:238 Branch: Return with expression -0:? Constant: -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 +0:238 Constant: +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 0:242 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) 0:242 Function Parameters: 0:242 'inF0' ( in 4X4 matrix of float) @@ -115,23 +115,23 @@ Shader version: 500 0:242 'inF2' ( in 4X4 matrix of float) 0:? Sequence 0:246 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 +0:246 Constant: +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 0:? Linker Objects 0:? 'gs_ua' ( global uint) 0:? 'gs_ub' ( global uint) @@ -185,9 +185,9 @@ Shader version: 500 0:84 'inI0' ( in 2-component vector of int) 0:? Sequence 0:127 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:127 Constant: +0:127 1.000000 +0:127 2.000000 0:131 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) 0:131 Function Parameters: 0:131 'inF0' ( in 3-component vector of float) @@ -196,10 +196,10 @@ Shader version: 500 0:131 'inI0' ( in 3-component vector of int) 0:? Sequence 0:172 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:172 Constant: +0:172 1.000000 +0:172 2.000000 +0:172 3.000000 0:176 Function Definition: @VertexShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) 0:176 Function Parameters: 0:176 'inF0' ( in 4-component vector of float) @@ -208,11 +208,11 @@ Shader version: 500 0:176 'inI0' ( in 4-component vector of int) 0:? Sequence 0:217 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:217 Constant: +0:217 1.000000 +0:217 2.000000 +0:217 3.000000 +0:217 4.000000 0:176 Function Definition: VertexShaderFunction( ( temp void) 0:176 Function Parameters: 0:? Sequence @@ -242,11 +242,11 @@ Shader version: 500 0:226 'inF2' ( in 2X2 matrix of float) 0:? Sequence 0:230 Branch: Return with expression -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:230 Constant: +0:230 2.000000 +0:230 2.000000 +0:230 2.000000 +0:230 2.000000 0:234 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) 0:234 Function Parameters: 0:234 'inF0' ( in 3X3 matrix of float) @@ -254,16 +254,16 @@ Shader version: 500 0:234 'inF2' ( in 3X3 matrix of float) 0:? Sequence 0:238 Branch: Return with expression -0:? Constant: -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 +0:238 Constant: +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 +0:238 3.000000 0:242 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) 0:242 Function Parameters: 0:242 'inF0' ( in 4X4 matrix of float) @@ -271,23 +271,23 @@ Shader version: 500 0:242 'inF2' ( in 4X4 matrix of float) 0:? Sequence 0:246 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 +0:246 Constant: +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 +0:246 4.000000 0:? Linker Objects 0:? 'gs_ua' ( global uint) 0:? 'gs_ub' ( global uint) diff --git a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out index b17c7e6a88..bd73fae201 100644 --- a/Test/baseResults/hlsl.intrinsics.promote.down.frag.out +++ b/Test/baseResults/hlsl.intrinsics.promote.down.frag.out @@ -28,11 +28,11 @@ gl_FragCoord origin is upper left 0:20 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:20 Constant: 0:20 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:20 Constant: +0:20 0.000000 +0:20 0.000000 +0:20 0.000000 +0:20 0.000000 0:21 Branch: Return with expression 0:21 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:15 Function Definition: main( ( temp void) @@ -82,11 +82,11 @@ gl_FragCoord origin is upper left 0:20 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:20 Constant: 0:20 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:20 Constant: +0:20 0.000000 +0:20 0.000000 +0:20 0.000000 +0:20 0.000000 0:21 Branch: Return with expression 0:21 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:15 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.intrinsics.vert.out b/Test/baseResults/hlsl.intrinsics.vert.out index 384f693b9b..647570c931 100644 --- a/Test/baseResults/hlsl.intrinsics.vert.out +++ b/Test/baseResults/hlsl.intrinsics.vert.out @@ -191,10 +191,10 @@ Shader version: 500 0:83 'inF0' ( in 2-component vector of float) 0:84 hyp. cosine ( temp 2-component vector of float) 0:84 'inF0' ( in 2-component vector of float) -0:? bitCount ( temp 2-component vector of int) -0:? Constant: -0:? 7 (const int) -0:? 3 (const int) +0:85 bitCount ( temp 2-component vector of int) +0:85 Constant: +0:85 7 (const int) +0:85 3 (const int) 0:86 degrees ( temp 2-component vector of float) 0:86 'inF0' ( in 2-component vector of float) 0:87 distance ( temp float) @@ -267,10 +267,10 @@ Shader version: 500 0:116 'inF1' ( in 2-component vector of float) 0:116 Constant: 0:116 2.000000 -0:? bitFieldReverse ( temp 2-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:117 bitFieldReverse ( temp 2-component vector of int) +0:117 Constant: +0:117 1 (const int) +0:117 2 (const int) 0:118 roundEven ( temp 2-component vector of float) 0:118 'inF0' ( in 2-component vector of float) 0:119 inverse sqrt ( temp 2-component vector of float) @@ -312,9 +312,9 @@ Shader version: 500 0:131 trunc ( temp 2-component vector of float) 0:131 'inF0' ( in 2-component vector of float) 0:134 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:134 Constant: +0:134 1.000000 +0:134 2.000000 0:138 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) 0:138 Function Parameters: 0:138 'inF0' ( in 3-component vector of float) @@ -356,11 +356,11 @@ Shader version: 500 0:152 'inF0' ( in 3-component vector of float) 0:153 hyp. cosine ( temp 3-component vector of float) 0:153 'inF0' ( in 3-component vector of float) -0:? bitCount ( temp 3-component vector of int) -0:? Constant: -0:? 7 (const int) -0:? 3 (const int) -0:? 5 (const int) +0:154 bitCount ( temp 3-component vector of int) +0:154 Constant: +0:154 7 (const int) +0:154 3 (const int) +0:154 5 (const int) 0:155 cross-product ( temp 3-component vector of float) 0:155 'inF0' ( in 3-component vector of float) 0:155 'inF1' ( in 3-component vector of float) @@ -436,11 +436,11 @@ Shader version: 500 0:186 'inF1' ( in 3-component vector of float) 0:186 Constant: 0:186 2.000000 -0:? bitFieldReverse ( temp 3-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) +0:187 bitFieldReverse ( temp 3-component vector of int) +0:187 Constant: +0:187 1 (const int) +0:187 2 (const int) +0:187 3 (const int) 0:188 roundEven ( temp 3-component vector of float) 0:188 'inF0' ( in 3-component vector of float) 0:189 inverse sqrt ( temp 3-component vector of float) @@ -482,10 +482,10 @@ Shader version: 500 0:201 trunc ( temp 3-component vector of float) 0:201 'inF0' ( in 3-component vector of float) 0:204 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:204 Constant: +0:204 1.000000 +0:204 2.000000 +0:204 3.000000 0:208 Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) 0:208 Function Parameters: 0:208 'inF0' ( in 4-component vector of float) @@ -527,12 +527,12 @@ Shader version: 500 0:222 'inF0' ( in 4-component vector of float) 0:223 hyp. cosine ( temp 4-component vector of float) 0:223 'inF0' ( in 4-component vector of float) -0:? bitCount ( temp 4-component vector of int) -0:? Constant: -0:? 7 (const int) -0:? 3 (const int) -0:? 5 (const int) -0:? 2 (const int) +0:224 bitCount ( temp 4-component vector of int) +0:224 Constant: +0:224 7 (const int) +0:224 3 (const int) +0:224 5 (const int) +0:224 2 (const int) 0:225 degrees ( temp 4-component vector of float) 0:225 'inF0' ( in 4-component vector of float) 0:226 distance ( temp float) @@ -625,12 +625,12 @@ Shader version: 500 0:256 'inF1' ( in 4-component vector of float) 0:256 Constant: 0:256 2.000000 -0:? bitFieldReverse ( temp 4-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:257 bitFieldReverse ( temp 4-component vector of int) +0:257 Constant: +0:257 1 (const int) +0:257 2 (const int) +0:257 3 (const int) +0:257 4 (const int) 0:258 roundEven ( temp 4-component vector of float) 0:258 'inF0' ( in 4-component vector of float) 0:259 inverse sqrt ( temp 4-component vector of float) @@ -672,11 +672,11 @@ Shader version: 500 0:271 trunc ( temp 4-component vector of float) 0:271 'inF0' ( in 4-component vector of float) 0:274 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:274 Constant: +0:274 1.000000 +0:274 2.000000 +0:274 3.000000 +0:274 4.000000 0:331 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float) 0:331 Function Parameters: 0:331 'inF0' ( in 2X2 matrix of float) @@ -801,11 +801,11 @@ Shader version: 500 0:333 trunc ( temp 2X2 matrix of float) 0:333 'inF0' ( in 2X2 matrix of float) 0:336 Branch: Return with expression -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:336 Constant: +0:336 2.000000 +0:336 2.000000 +0:336 2.000000 +0:336 2.000000 0:340 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) 0:340 Function Parameters: 0:340 'inF0' ( in 3X3 matrix of float) @@ -930,16 +930,16 @@ Shader version: 500 0:342 trunc ( temp 3X3 matrix of float) 0:342 'inF0' ( in 3X3 matrix of float) 0:345 Branch: Return with expression -0:? Constant: -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 +0:345 Constant: +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 0:349 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) 0:349 Function Parameters: 0:349 'inF0' ( in 4X4 matrix of float) @@ -1064,23 +1064,23 @@ Shader version: 500 0:351 trunc ( temp 4X4 matrix of float) 0:351 'inF0' ( in 4X4 matrix of float) 0:354 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 +0:354 Constant: +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 0:372 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void) 0:372 Function Parameters: 0:372 'inF0' ( in float) @@ -1583,10 +1583,10 @@ Shader version: 500 0:83 'inF0' ( in 2-component vector of float) 0:84 hyp. cosine ( temp 2-component vector of float) 0:84 'inF0' ( in 2-component vector of float) -0:? bitCount ( temp 2-component vector of int) -0:? Constant: -0:? 7 (const int) -0:? 3 (const int) +0:85 bitCount ( temp 2-component vector of int) +0:85 Constant: +0:85 7 (const int) +0:85 3 (const int) 0:86 degrees ( temp 2-component vector of float) 0:86 'inF0' ( in 2-component vector of float) 0:87 distance ( temp float) @@ -1659,10 +1659,10 @@ Shader version: 500 0:116 'inF1' ( in 2-component vector of float) 0:116 Constant: 0:116 2.000000 -0:? bitFieldReverse ( temp 2-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:117 bitFieldReverse ( temp 2-component vector of int) +0:117 Constant: +0:117 1 (const int) +0:117 2 (const int) 0:118 roundEven ( temp 2-component vector of float) 0:118 'inF0' ( in 2-component vector of float) 0:119 inverse sqrt ( temp 2-component vector of float) @@ -1704,9 +1704,9 @@ Shader version: 500 0:131 trunc ( temp 2-component vector of float) 0:131 'inF0' ( in 2-component vector of float) 0:134 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:134 Constant: +0:134 1.000000 +0:134 2.000000 0:138 Function Definition: VertexShaderFunction3(vf3;vf3;vf3;vu3;vu3; ( temp 3-component vector of float) 0:138 Function Parameters: 0:138 'inF0' ( in 3-component vector of float) @@ -1748,11 +1748,11 @@ Shader version: 500 0:152 'inF0' ( in 3-component vector of float) 0:153 hyp. cosine ( temp 3-component vector of float) 0:153 'inF0' ( in 3-component vector of float) -0:? bitCount ( temp 3-component vector of int) -0:? Constant: -0:? 7 (const int) -0:? 3 (const int) -0:? 5 (const int) +0:154 bitCount ( temp 3-component vector of int) +0:154 Constant: +0:154 7 (const int) +0:154 3 (const int) +0:154 5 (const int) 0:155 cross-product ( temp 3-component vector of float) 0:155 'inF0' ( in 3-component vector of float) 0:155 'inF1' ( in 3-component vector of float) @@ -1828,11 +1828,11 @@ Shader version: 500 0:186 'inF1' ( in 3-component vector of float) 0:186 Constant: 0:186 2.000000 -0:? bitFieldReverse ( temp 3-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) +0:187 bitFieldReverse ( temp 3-component vector of int) +0:187 Constant: +0:187 1 (const int) +0:187 2 (const int) +0:187 3 (const int) 0:188 roundEven ( temp 3-component vector of float) 0:188 'inF0' ( in 3-component vector of float) 0:189 inverse sqrt ( temp 3-component vector of float) @@ -1874,10 +1874,10 @@ Shader version: 500 0:201 trunc ( temp 3-component vector of float) 0:201 'inF0' ( in 3-component vector of float) 0:204 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:204 Constant: +0:204 1.000000 +0:204 2.000000 +0:204 3.000000 0:208 Function Definition: VertexShaderFunction4(vf4;vf4;vf4;vu4;vu4; ( temp 4-component vector of float) 0:208 Function Parameters: 0:208 'inF0' ( in 4-component vector of float) @@ -1919,12 +1919,12 @@ Shader version: 500 0:222 'inF0' ( in 4-component vector of float) 0:223 hyp. cosine ( temp 4-component vector of float) 0:223 'inF0' ( in 4-component vector of float) -0:? bitCount ( temp 4-component vector of int) -0:? Constant: -0:? 7 (const int) -0:? 3 (const int) -0:? 5 (const int) -0:? 2 (const int) +0:224 bitCount ( temp 4-component vector of int) +0:224 Constant: +0:224 7 (const int) +0:224 3 (const int) +0:224 5 (const int) +0:224 2 (const int) 0:225 degrees ( temp 4-component vector of float) 0:225 'inF0' ( in 4-component vector of float) 0:226 distance ( temp float) @@ -2017,12 +2017,12 @@ Shader version: 500 0:256 'inF1' ( in 4-component vector of float) 0:256 Constant: 0:256 2.000000 -0:? bitFieldReverse ( temp 4-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:257 bitFieldReverse ( temp 4-component vector of int) +0:257 Constant: +0:257 1 (const int) +0:257 2 (const int) +0:257 3 (const int) +0:257 4 (const int) 0:258 roundEven ( temp 4-component vector of float) 0:258 'inF0' ( in 4-component vector of float) 0:259 inverse sqrt ( temp 4-component vector of float) @@ -2064,11 +2064,11 @@ Shader version: 500 0:271 trunc ( temp 4-component vector of float) 0:271 'inF0' ( in 4-component vector of float) 0:274 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:274 Constant: +0:274 1.000000 +0:274 2.000000 +0:274 3.000000 +0:274 4.000000 0:331 Function Definition: VertexShaderFunction2x2(mf22;mf22;mf22; ( temp 2X2 matrix of float) 0:331 Function Parameters: 0:331 'inF0' ( in 2X2 matrix of float) @@ -2193,11 +2193,11 @@ Shader version: 500 0:333 trunc ( temp 2X2 matrix of float) 0:333 'inF0' ( in 2X2 matrix of float) 0:336 Branch: Return with expression -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:336 Constant: +0:336 2.000000 +0:336 2.000000 +0:336 2.000000 +0:336 2.000000 0:340 Function Definition: VertexShaderFunction3x3(mf33;mf33;mf33; ( temp 3X3 matrix of float) 0:340 Function Parameters: 0:340 'inF0' ( in 3X3 matrix of float) @@ -2322,16 +2322,16 @@ Shader version: 500 0:342 trunc ( temp 3X3 matrix of float) 0:342 'inF0' ( in 3X3 matrix of float) 0:345 Branch: Return with expression -0:? Constant: -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 -0:? 3.000000 +0:345 Constant: +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 +0:345 3.000000 0:349 Function Definition: VertexShaderFunction4x4(mf44;mf44;mf44; ( temp 4X4 matrix of float) 0:349 Function Parameters: 0:349 'inF0' ( in 4X4 matrix of float) @@ -2456,23 +2456,23 @@ Shader version: 500 0:351 trunc ( temp 4X4 matrix of float) 0:351 'inF0' ( in 4X4 matrix of float) 0:354 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 -0:? 4.000000 +0:354 Constant: +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 +0:354 4.000000 0:372 Function Definition: TestGenMul2(f1;f1;vf2;vf2;mf22;mf22; ( temp void) 0:372 Function Parameters: 0:372 'inF0' ( in float) diff --git a/Test/baseResults/hlsl.layoutOverride.vert.out b/Test/baseResults/hlsl.layoutOverride.vert.out index 83fa62899f..a3b8960136 100644 --- a/Test/baseResults/hlsl.layoutOverride.vert.out +++ b/Test/baseResults/hlsl.layoutOverride.vert.out @@ -9,9 +9,9 @@ Shader version: 500 0:6 Construct combined texture-sampler ( temp sampler2D) 0:6 'tex' (layout( set=2 binding=0) uniform texture2D) 0:6 'samp' ( uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:6 Constant: +0:6 0.200000 +0:6 0.300000 0:5 Function Definition: main( ( temp void) 0:5 Function Parameters: 0:? Sequence @@ -37,9 +37,9 @@ Shader version: 500 0:6 Construct combined texture-sampler ( temp sampler2D) 0:6 'tex' (layout( set=2 binding=0) uniform texture2D) 0:6 'samp' ( uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:6 Constant: +0:6 0.200000 +0:6 0.300000 0:5 Function Definition: main( ( temp void) 0:5 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.load.basic.dx10.vert.out b/Test/baseResults/hlsl.load.basic.dx10.vert.out index a110532179..8b9a04f823 100644 --- a/Test/baseResults/hlsl.load.basic.dx10.vert.out +++ b/Test/baseResults/hlsl.load.basic.dx10.vert.out @@ -180,11 +180,11 @@ Shader version: 500 0:67 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:67 Constant: 0:67 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 0:69 Branch: Return with expression 0:69 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:47 Function Definition: main( ( temp void) @@ -408,11 +408,11 @@ Shader version: 500 0:67 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:67 Constant: 0:67 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 0:69 Branch: Return with expression 0:69 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:47 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.matType.bool.frag.out b/Test/baseResults/hlsl.matType.bool.frag.out index 47bbaf15c4..500b311c4f 100644 --- a/Test/baseResults/hlsl.matType.bool.frag.out +++ b/Test/baseResults/hlsl.matType.bool.frag.out @@ -93,11 +93,11 @@ gl_FragCoord origin is upper left 0:51 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:51 Constant: 0:51 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:51 Constant: +0:51 0.000000 +0:51 0.000000 +0:51 0.000000 +0:51 0.000000 0:52 Branch: Return with expression 0:52 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:49 Function Definition: main( ( temp void) @@ -211,11 +211,11 @@ gl_FragCoord origin is upper left 0:51 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:51 Constant: 0:51 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:51 Constant: +0:51 0.000000 +0:51 0.000000 +0:51 0.000000 +0:51 0.000000 0:52 Branch: Return with expression 0:52 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:49 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.matType.int.frag.out b/Test/baseResults/hlsl.matType.int.frag.out index d567c17aff..a99bd15ffb 100644 --- a/Test/baseResults/hlsl.matType.int.frag.out +++ b/Test/baseResults/hlsl.matType.int.frag.out @@ -176,11 +176,11 @@ gl_FragCoord origin is upper left 0:95 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:95 Constant: 0:95 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:95 Constant: +0:95 0.000000 +0:95 0.000000 +0:95 0.000000 +0:95 0.000000 0:96 Branch: Return with expression 0:96 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:93 Function Definition: main( ( temp void) @@ -377,11 +377,11 @@ gl_FragCoord origin is upper left 0:95 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:95 Constant: 0:95 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:95 Constant: +0:95 0.000000 +0:95 0.000000 +0:95 0.000000 +0:95 0.000000 0:96 Branch: Return with expression 0:96 'ps_output' ( temp structure{ temp 4-component vector of float color}) 0:93 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.mip.negative.frag.out b/Test/baseResults/hlsl.mip.negative.frag.out index 36f41377d1..4fb8f6ee5b 100644 --- a/Test/baseResults/hlsl.mip.negative.frag.out +++ b/Test/baseResults/hlsl.mip.negative.frag.out @@ -9,11 +9,11 @@ ERROR: node is still EOpNull! 0:4 Function Definition: @main( ( temp 4-component vector of float) 0:4 Function Parameters: 0:? Sequence -0:? textureFetch ( temp 4-component vector of float) +0:5 textureFetch ( temp 4-component vector of float) 0:5 'g_tTex2df4' ( uniform texture2D) -0:? Constant: -0:? 3 (const uint) -0:? 4 (const uint) +0:5 Constant: +0:5 3 (const uint) +0:5 4 (const uint) 0:5 Constant: 0:5 2 (const int) 0:7 Branch: Return with expression @@ -42,11 +42,11 @@ ERROR: node is still EOpNull! 0:4 Function Definition: @main( ( temp 4-component vector of float) 0:4 Function Parameters: 0:? Sequence -0:? textureFetch ( temp 4-component vector of float) +0:5 textureFetch ( temp 4-component vector of float) 0:5 'g_tTex2df4' ( uniform texture2D) -0:? Constant: -0:? 3 (const uint) -0:? 4 (const uint) +0:5 Constant: +0:5 3 (const uint) +0:5 4 (const uint) 0:5 Constant: 0:5 2 (const int) 0:7 Branch: Return with expression diff --git a/Test/baseResults/hlsl.mip.negative2.frag.out b/Test/baseResults/hlsl.mip.negative2.frag.out index 75cf95fc5a..0036f639bf 100644 --- a/Test/baseResults/hlsl.mip.negative2.frag.out +++ b/Test/baseResults/hlsl.mip.negative2.frag.out @@ -16,9 +16,9 @@ ERROR: node is still EOpNull! 0:5 2 (const int) 0:5 Constant: 0:5 0 (const int) -0:? Constant: -0:? 3 (const uint) -0:? 4 (const uint) +0:5 Constant: +0:5 3 (const uint) +0:5 4 (const uint) 0:7 Branch: Return with expression 0:7 Constant: 0:7 0.000000 @@ -52,9 +52,9 @@ ERROR: node is still EOpNull! 0:5 2 (const int) 0:5 Constant: 0:5 0 (const int) -0:? Constant: -0:? 3 (const uint) -0:? 4 (const uint) +0:5 Constant: +0:5 3 (const uint) +0:5 4 (const uint) 0:7 Branch: Return with expression 0:7 Constant: 0:7 0.000000 diff --git a/Test/baseResults/hlsl.mip.operator.frag.out b/Test/baseResults/hlsl.mip.operator.frag.out index 82b000f1a4..48e563ca96 100644 --- a/Test/baseResults/hlsl.mip.operator.frag.out +++ b/Test/baseResults/hlsl.mip.operator.frag.out @@ -8,30 +8,30 @@ gl_FragCoord origin is upper left 0:13 Branch: Return with expression 0:9 add ( temp 4-component vector of float) 0:6 add ( temp 4-component vector of float) -0:? textureFetch ( temp 4-component vector of float) +0:6 textureFetch ( temp 4-component vector of float) 0:6 'g_tTex2df4' ( uniform texture2D) -0:? Constant: -0:? 3 (const uint) -0:? 4 (const uint) +0:6 Constant: +0:6 3 (const uint) +0:6 4 (const uint) 0:6 Constant: 0:6 2 (const int) -0:? textureFetch ( temp 4-component vector of float) +0:9 textureFetch ( temp 4-component vector of float) 0:9 'g_tTex2df4a' ( uniform texture2DArray) -0:? Constant: -0:? 6 (const uint) -0:? 7 (const uint) -0:? 8 (const uint) +0:9 Constant: +0:9 6 (const uint) +0:9 7 (const uint) +0:9 8 (const uint) 0:9 Constant: 0:9 5 (const uint) 0:13 textureFetch ( temp 4-component vector of float) 0:13 'g_tTex2df4' ( uniform texture2D) 0:13 Convert float to uint ( temp 2-component vector of uint) 0:13 vector swizzle ( temp 2-component vector of float) -0:? textureFetch ( temp 4-component vector of float) +0:13 textureFetch ( temp 4-component vector of float) 0:13 'g_tTex2df4' ( uniform texture2D) -0:? Constant: -0:? 14 (const uint) -0:? 15 (const uint) +0:13 Constant: +0:13 14 (const uint) +0:13 15 (const uint) 0:13 Constant: 0:13 13 (const int) 0:13 Sequence @@ -41,11 +41,11 @@ gl_FragCoord origin is upper left 0:13 1 (const int) 0:13 Convert float to uint ( temp uint) 0:13 direct index ( temp float) -0:? textureFetch ( temp 4-component vector of float) +0:13 textureFetch ( temp 4-component vector of float) 0:13 'g_tTex2df4' ( uniform texture2D) -0:? Constant: -0:? 10 (const uint) -0:? 11 (const uint) +0:13 Constant: +0:13 10 (const uint) +0:13 11 (const uint) 0:13 Constant: 0:13 9 (const int) 0:13 Constant: @@ -74,30 +74,30 @@ gl_FragCoord origin is upper left 0:13 Branch: Return with expression 0:9 add ( temp 4-component vector of float) 0:6 add ( temp 4-component vector of float) -0:? textureFetch ( temp 4-component vector of float) +0:6 textureFetch ( temp 4-component vector of float) 0:6 'g_tTex2df4' ( uniform texture2D) -0:? Constant: -0:? 3 (const uint) -0:? 4 (const uint) +0:6 Constant: +0:6 3 (const uint) +0:6 4 (const uint) 0:6 Constant: 0:6 2 (const int) -0:? textureFetch ( temp 4-component vector of float) +0:9 textureFetch ( temp 4-component vector of float) 0:9 'g_tTex2df4a' ( uniform texture2DArray) -0:? Constant: -0:? 6 (const uint) -0:? 7 (const uint) -0:? 8 (const uint) +0:9 Constant: +0:9 6 (const uint) +0:9 7 (const uint) +0:9 8 (const uint) 0:9 Constant: 0:9 5 (const uint) 0:13 textureFetch ( temp 4-component vector of float) 0:13 'g_tTex2df4' ( uniform texture2D) 0:13 Convert float to uint ( temp 2-component vector of uint) 0:13 vector swizzle ( temp 2-component vector of float) -0:? textureFetch ( temp 4-component vector of float) +0:13 textureFetch ( temp 4-component vector of float) 0:13 'g_tTex2df4' ( uniform texture2D) -0:? Constant: -0:? 14 (const uint) -0:? 15 (const uint) +0:13 Constant: +0:13 14 (const uint) +0:13 15 (const uint) 0:13 Constant: 0:13 13 (const int) 0:13 Sequence @@ -107,11 +107,11 @@ gl_FragCoord origin is upper left 0:13 1 (const int) 0:13 Convert float to uint ( temp uint) 0:13 direct index ( temp float) -0:? textureFetch ( temp 4-component vector of float) +0:13 textureFetch ( temp 4-component vector of float) 0:13 'g_tTex2df4' ( uniform texture2D) -0:? Constant: -0:? 10 (const uint) -0:? 11 (const uint) +0:13 Constant: +0:13 10 (const uint) +0:13 11 (const uint) 0:13 Constant: 0:13 9 (const int) 0:13 Constant: diff --git a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out index 59b251a73d..5a485c67dd 100644 --- a/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out +++ b/Test/baseResults/hlsl.nonstaticMemberFunction.frag.out @@ -5,9 +5,9 @@ gl_FragCoord origin is upper left 0:1 Sequence 0:1 move second child to first child ( temp 2-component vector of float) 0:1 'i' ( global 2-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:1 Constant: +0:1 1.000000 +0:1 2.000000 0:5 Function Definition: type1::setmem(vf4; ( temp void) 0:5 Function Parameters: 0:5 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) @@ -85,11 +85,11 @@ gl_FragCoord origin is upper left 0:? Sequence 0:29 Function Call: type1::setmem(vf4; ( temp void) 0:29 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:29 Constant: +0:29 2.000000 +0:29 2.000000 +0:29 2.000000 +0:29 2.000000 0:30 Function Call: type1::seti(i1; ( temp void) 0:30 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) 0:30 Constant: @@ -97,20 +97,20 @@ gl_FragCoord origin is upper left 0:31 Sequence 0:31 move second child to first child ( temp 4-component vector of float) 0:31 'f4' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 +0:31 Constant: +0:31 1.000000 +0:31 1.000000 +0:31 1.000000 +0:31 1.000000 0:32 add second child into first child ( temp 4-component vector of float) 0:32 'f4' ( temp 4-component vector of float) 0:32 Function Call: type1::memFun(vf4; ( temp 4-component vector of float) 0:32 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) -0:? Constant: -0:? 5.000000 -0:? 5.000000 -0:? 5.000000 -0:? 5.000000 +0:32 Constant: +0:32 5.000000 +0:32 5.000000 +0:32 5.000000 +0:32 5.000000 0:33 add second child into first child ( temp 4-component vector of float) 0:33 'f4' ( temp 4-component vector of float) 0:33 Convert int to float ( temp float) @@ -141,9 +141,9 @@ gl_FragCoord origin is upper left 0:1 Sequence 0:1 move second child to first child ( temp 2-component vector of float) 0:1 'i' ( global 2-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:1 Constant: +0:1 1.000000 +0:1 2.000000 0:5 Function Definition: type1::setmem(vf4; ( temp void) 0:5 Function Parameters: 0:5 '@this' ( temp structure{ temp 4-component vector of float memVar, temp int i}) @@ -221,11 +221,11 @@ gl_FragCoord origin is upper left 0:? Sequence 0:29 Function Call: type1::setmem(vf4; ( temp void) 0:29 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) -0:? Constant: -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 -0:? 2.000000 +0:29 Constant: +0:29 2.000000 +0:29 2.000000 +0:29 2.000000 +0:29 2.000000 0:30 Function Call: type1::seti(i1; ( temp void) 0:30 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) 0:30 Constant: @@ -233,20 +233,20 @@ gl_FragCoord origin is upper left 0:31 Sequence 0:31 move second child to first child ( temp 4-component vector of float) 0:31 'f4' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 +0:31 Constant: +0:31 1.000000 +0:31 1.000000 +0:31 1.000000 +0:31 1.000000 0:32 add second child into first child ( temp 4-component vector of float) 0:32 'f4' ( temp 4-component vector of float) 0:32 Function Call: type1::memFun(vf4; ( temp 4-component vector of float) 0:32 'test' ( temp structure{ temp 4-component vector of float memVar, temp int i}) -0:? Constant: -0:? 5.000000 -0:? 5.000000 -0:? 5.000000 -0:? 5.000000 +0:32 Constant: +0:32 5.000000 +0:32 5.000000 +0:32 5.000000 +0:32 5.000000 0:33 add second child into first child ( temp 4-component vector of float) 0:33 'f4' ( temp 4-component vector of float) 0:33 Convert int to float ( temp float) diff --git a/Test/baseResults/hlsl.overload.frag.out b/Test/baseResults/hlsl.overload.frag.out index 3428d8027e..4cfc391183 100644 --- a/Test/baseResults/hlsl.overload.frag.out +++ b/Test/baseResults/hlsl.overload.frag.out @@ -330,8 +330,8 @@ gl_FragCoord origin is upper left 0:133 Construct vec3 ( temp 3-component vector of float) 0:133 'f' ( temp float) 0:134 Function Call: foo16(vu2; ( temp void) -0:? Convert int to uint ( temp 2-component vector of uint) -0:? Construct ivec2 ( temp 2-component vector of int) +0:134 Convert int to uint ( temp 2-component vector of uint) +0:134 Construct ivec2 ( temp 2-component vector of int) 0:134 'i' ( temp int) 0:134 'i' ( temp int) 0:136 Function Call: foo13(vf3; ( temp void) @@ -699,8 +699,8 @@ gl_FragCoord origin is upper left 0:133 Construct vec3 ( temp 3-component vector of float) 0:133 'f' ( temp float) 0:134 Function Call: foo16(vu2; ( temp void) -0:? Convert int to uint ( temp 2-component vector of uint) -0:? Construct ivec2 ( temp 2-component vector of int) +0:134 Convert int to uint ( temp 2-component vector of uint) +0:134 Construct ivec2 ( temp 2-component vector of int) 0:134 'i' ( temp int) 0:134 'i' ( temp int) 0:136 Function Call: foo13(vf3; ( temp void) diff --git a/Test/baseResults/hlsl.params.default.frag.out b/Test/baseResults/hlsl.params.default.frag.out index a28ddc410d..6898240fe0 100644 --- a/Test/baseResults/hlsl.params.default.frag.out +++ b/Test/baseResults/hlsl.params.default.frag.out @@ -34,11 +34,11 @@ gl_FragCoord origin is upper left 0:23 'x' ( in int) 0:? Sequence 0:24 Branch: Return with expression -0:? Constant: -0:? 10 (const int) -0:? 11 (const int) -0:? 12 (const int) -0:? 13 (const int) +0:24 Constant: +0:24 10 (const int) +0:24 11 (const int) +0:24 12 (const int) +0:24 13 (const int) 0:28 Function Definition: fn2(vi4;f1; ( temp 4-component vector of int) 0:28 Function Parameters: 0:28 'p0' ( in 4-component vector of int) @@ -47,11 +47,11 @@ gl_FragCoord origin is upper left 0:29 Branch: Return with expression 0:29 add ( temp 4-component vector of int) 0:29 'p0' ( in 4-component vector of int) -0:? Constant: -0:? 20 (const int) -0:? 21 (const int) -0:? 22 (const int) -0:? 23 (const int) +0:29 Constant: +0:29 20 (const int) +0:29 21 (const int) +0:29 22 (const int) +0:29 23 (const int) 0:32 Function Definition: fn3(i1; ( temp void) 0:32 Function Parameters: 0:32 'p0' ( in int) @@ -84,11 +84,11 @@ gl_FragCoord origin is upper left 0:42 100 (const int) 0:42 100 (const int) 0:42 100 (const int) -0:? Constant: -0:? -1 (const int) -0:? -2 (const int) -0:? -3 (const int) -0:? -4 (const int) +0:14 Constant: +0:14 -1 (const int) +0:14 -2 (const int) +0:14 -3 (const int) +0:14 -4 (const int) 0:15 Constant: 0:15 1 (const int) 0:15 2 (const int) @@ -224,11 +224,11 @@ gl_FragCoord origin is upper left 0:23 'x' ( in int) 0:? Sequence 0:24 Branch: Return with expression -0:? Constant: -0:? 10 (const int) -0:? 11 (const int) -0:? 12 (const int) -0:? 13 (const int) +0:24 Constant: +0:24 10 (const int) +0:24 11 (const int) +0:24 12 (const int) +0:24 13 (const int) 0:28 Function Definition: fn2(vi4;f1; ( temp 4-component vector of int) 0:28 Function Parameters: 0:28 'p0' ( in 4-component vector of int) @@ -237,11 +237,11 @@ gl_FragCoord origin is upper left 0:29 Branch: Return with expression 0:29 add ( temp 4-component vector of int) 0:29 'p0' ( in 4-component vector of int) -0:? Constant: -0:? 20 (const int) -0:? 21 (const int) -0:? 22 (const int) -0:? 23 (const int) +0:29 Constant: +0:29 20 (const int) +0:29 21 (const int) +0:29 22 (const int) +0:29 23 (const int) 0:32 Function Definition: fn3(i1; ( temp void) 0:32 Function Parameters: 0:32 'p0' ( in int) @@ -274,11 +274,11 @@ gl_FragCoord origin is upper left 0:42 100 (const int) 0:42 100 (const int) 0:42 100 (const int) -0:? Constant: -0:? -1 (const int) -0:? -2 (const int) -0:? -3 (const int) -0:? -4 (const int) +0:14 Constant: +0:14 -1 (const int) +0:14 -2 (const int) +0:14 -3 (const int) +0:14 -4 (const int) 0:15 Constant: 0:15 1 (const int) 0:15 2 (const int) diff --git a/Test/baseResults/hlsl.params.default.negative.frag.out b/Test/baseResults/hlsl.params.default.negative.frag.out index f841bd8b6f..213687ab1f 100644 --- a/Test/baseResults/hlsl.params.default.negative.frag.out +++ b/Test/baseResults/hlsl.params.default.negative.frag.out @@ -14,11 +14,11 @@ ERROR: node is still EOpNull! 0:7 'p0' ( in 4-component vector of int) 0:? Sequence 0:7 Branch: Return with expression -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:7 Constant: +0:7 1 (const int) +0:7 2 (const int) +0:7 3 (const int) +0:7 4 (const int) 0:9 Function Definition: fn1(vi4;b1;b1; ( temp 4-component vector of int) 0:9 Function Parameters: 0:9 'p0' ( in 4-component vector of int) @@ -51,11 +51,11 @@ ERROR: node is still EOpNull! 0:23 'x' ( in int) 0:? Sequence 0:24 Branch: Return with expression -0:? Constant: -0:? 10 (const int) -0:? 11 (const int) -0:? 12 (const int) -0:? 13 (const int) +0:24 Constant: +0:24 10 (const int) +0:24 11 (const int) +0:24 12 (const int) +0:24 13 (const int) 0:28 Function Definition: fn2(vi4; ( temp 4-component vector of int) 0:28 Function Parameters: 0:28 'p0' ( in 4-component vector of int) @@ -63,11 +63,11 @@ ERROR: node is still EOpNull! 0:29 Branch: Return with expression 0:29 add ( temp 4-component vector of int) 0:29 'p0' ( in 4-component vector of int) -0:? Constant: -0:? 20 (const int) -0:? 21 (const int) -0:? 22 (const int) -0:? 23 (const int) +0:29 Constant: +0:29 20 (const int) +0:29 21 (const int) +0:29 22 (const int) +0:29 23 (const int) 0:33 Function Definition: fn3(i1; ( temp void) 0:33 Function Parameters: 0:33 'p0' ( in int) @@ -204,11 +204,11 @@ ERROR: node is still EOpNull! 0:7 'p0' ( in 4-component vector of int) 0:? Sequence 0:7 Branch: Return with expression -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:7 Constant: +0:7 1 (const int) +0:7 2 (const int) +0:7 3 (const int) +0:7 4 (const int) 0:9 Function Definition: fn1(vi4;b1;b1; ( temp 4-component vector of int) 0:9 Function Parameters: 0:9 'p0' ( in 4-component vector of int) @@ -241,11 +241,11 @@ ERROR: node is still EOpNull! 0:23 'x' ( in int) 0:? Sequence 0:24 Branch: Return with expression -0:? Constant: -0:? 10 (const int) -0:? 11 (const int) -0:? 12 (const int) -0:? 13 (const int) +0:24 Constant: +0:24 10 (const int) +0:24 11 (const int) +0:24 12 (const int) +0:24 13 (const int) 0:28 Function Definition: fn2(vi4; ( temp 4-component vector of int) 0:28 Function Parameters: 0:28 'p0' ( in 4-component vector of int) @@ -253,11 +253,11 @@ ERROR: node is still EOpNull! 0:29 Branch: Return with expression 0:29 add ( temp 4-component vector of int) 0:29 'p0' ( in 4-component vector of int) -0:? Constant: -0:? 20 (const int) -0:? 21 (const int) -0:? 22 (const int) -0:? 23 (const int) +0:29 Constant: +0:29 20 (const int) +0:29 21 (const int) +0:29 22 (const int) +0:29 23 (const int) 0:33 Function Definition: fn3(i1; ( temp void) 0:33 Function Parameters: 0:33 'p0' ( in int) diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out index 754c86c643..12a60657dd 100644 --- a/Test/baseResults/hlsl.partialFlattenLocal.vert.out +++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out @@ -20,10 +20,10 @@ Shader version: 500 0:15 1 (const int) 0:15 Constant: 0:15 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:15 Constant: +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 0:16 move second child to first child ( temp 2-component vector of float) 0:16 direct index ( temp 2-component vector of float) 0:16 uv: direct index for structure ( temp 2-element array of 2-component vector of float) @@ -32,9 +32,9 @@ Shader version: 500 0:16 2 (const int) 0:16 Constant: 0:16 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 1.000000 +0:16 Constant: +0:16 0.000000 +0:16 1.000000 0:17 move second child to first child ( temp float) 0:17 x: direct index for structure ( temp float) 0:17 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n}) @@ -91,7 +91,7 @@ Shader version: 500 0:26 Branch: Return with expression 0:26 add ( temp 4-component vector of float) 0:26 'pos' ( in 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:26 Construct vec4 ( temp 4-component vector of float) 0:26 direct index ( temp 3-component vector of float) 0:26 pos: direct index for structure ( temp 3-element array of 3-component vector of float) 0:26 'packed2' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n}) @@ -140,10 +140,10 @@ Shader version: 500 0:15 1 (const int) 0:15 Constant: 0:15 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:15 Constant: +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 0:16 move second child to first child ( temp 2-component vector of float) 0:16 direct index ( temp 2-component vector of float) 0:16 uv: direct index for structure ( temp 2-element array of 2-component vector of float) @@ -152,9 +152,9 @@ Shader version: 500 0:16 2 (const int) 0:16 Constant: 0:16 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 1.000000 +0:16 Constant: +0:16 0.000000 +0:16 1.000000 0:17 move second child to first child ( temp float) 0:17 x: direct index for structure ( temp float) 0:17 'packed' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n}) @@ -211,7 +211,7 @@ Shader version: 500 0:26 Branch: Return with expression 0:26 add ( temp 4-component vector of float) 0:26 'pos' ( in 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:26 Construct vec4 ( temp 4-component vector of float) 0:26 direct index ( temp 3-component vector of float) 0:26 pos: direct index for structure ( temp 3-element array of 3-component vector of float) 0:26 'packed2' ( temp structure{ temp texture2D tex, temp 3-element array of 3-component vector of float pos, temp 2-element array of 2-component vector of float uv, temp float x, temp int n}) diff --git a/Test/baseResults/hlsl.pp.line.frag.out b/Test/baseResults/hlsl.pp.line.frag.out index a8479f50f7..68476d2a04 100644 --- a/Test/baseResults/hlsl.pp.line.frag.out +++ b/Test/baseResults/hlsl.pp.line.frag.out @@ -16,7 +16,7 @@ using depth_any 0:126 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) 0:126 Constant: 0:126 0 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:126 Construct vec4 ( temp 4-component vector of float) 0:126 Convert int to float ( temp float) 0:126 'thisLineIs' ( temp int) 0:126 Constant: @@ -78,7 +78,7 @@ using depth_any 0:126 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) 0:126 Constant: 0:126 0 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:126 Construct vec4 ( temp 4-component vector of float) 0:126 Convert int to float ( temp float) 0:126 'thisLineIs' ( temp int) 0:126 Constant: diff --git a/Test/baseResults/hlsl.precedence.frag.out b/Test/baseResults/hlsl.precedence.frag.out index 85fe18795e..3992618dda 100644 --- a/Test/baseResults/hlsl.precedence.frag.out +++ b/Test/baseResults/hlsl.precedence.frag.out @@ -18,7 +18,7 @@ gl_FragCoord origin is upper left 0:8 'a2' ( in 4-component vector of float) 0:8 'a3' ( in 4-component vector of float) 0:8 'a4' ( in 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:8 Construct vec4 ( temp 4-component vector of float) 0:8 component-wise multiply ( temp 3-component vector of float) 0:8 vector swizzle ( temp 3-component vector of float) 0:8 'a1' ( in 4-component vector of float) @@ -94,7 +94,7 @@ gl_FragCoord origin is upper left 0:8 'a2' ( in 4-component vector of float) 0:8 'a3' ( in 4-component vector of float) 0:8 'a4' ( in 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:8 Construct vec4 ( temp 4-component vector of float) 0:8 component-wise multiply ( temp 3-component vector of float) 0:8 vector swizzle ( temp 3-component vector of float) 0:8 'a1' ( in 4-component vector of float) diff --git a/Test/baseResults/hlsl.promote.atomic.frag.out b/Test/baseResults/hlsl.promote.atomic.frag.out index f4197ef13e..a34b7dddd7 100644 --- a/Test/baseResults/hlsl.promote.atomic.frag.out +++ b/Test/baseResults/hlsl.promote.atomic.frag.out @@ -14,11 +14,11 @@ gl_FragCoord origin is upper left 0:13 Convert int to uint ( temp uint) 0:13 'Inc' ( temp int) 0:15 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:15 Constant: +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 0:5 Function Definition: main( ( temp void) 0:5 Function Parameters: 0:? Sequence @@ -48,11 +48,11 @@ gl_FragCoord origin is upper left 0:13 Convert int to uint ( temp uint) 0:13 'Inc' ( temp int) 0:15 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:15 Constant: +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 0:5 Function Definition: main( ( temp void) 0:5 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.promote.vec1.frag.out b/Test/baseResults/hlsl.promote.vec1.frag.out index 8ea55d02f7..11e324f964 100644 --- a/Test/baseResults/hlsl.promote.vec1.frag.out +++ b/Test/baseResults/hlsl.promote.vec1.frag.out @@ -23,11 +23,11 @@ gl_FragCoord origin is upper left 0:13 Construct float ( in float) 0:13 'f1b' ( temp 1-component vector of float) 0:15 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:15 Constant: +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 0:3 Function Definition: main( ( temp void) 0:3 Function Parameters: 0:? Sequence @@ -65,11 +65,11 @@ gl_FragCoord origin is upper left 0:13 Construct float ( in float) 0:13 'f1b' ( temp 1-component vector of float) 0:15 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:15 Constant: +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 +0:15 0.000000 0:3 Function Definition: main( ( temp void) 0:3 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.promotions.frag.out b/Test/baseResults/hlsl.promotions.frag.out index 91ed472fbb..f1354063fc 100644 --- a/Test/baseResults/hlsl.promotions.frag.out +++ b/Test/baseResults/hlsl.promotions.frag.out @@ -757,7 +757,7 @@ gl_FragCoord origin is upper left 0:196 Sequence 0:196 move second child to first child ( temp 4-component vector of float) 0:196 'outval' ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:196 Construct vec4 ( temp 4-component vector of float) 0:196 Constant: 0:196 3.600000 0:196 Constant: @@ -1550,7 +1550,7 @@ gl_FragCoord origin is upper left 0:196 Sequence 0:196 move second child to first child ( temp 4-component vector of float) 0:196 'outval' ( temp 4-component vector of float) -0:? Construct vec4 ( temp 4-component vector of float) +0:196 Construct vec4 ( temp 4-component vector of float) 0:196 Constant: 0:196 3.600000 0:196 Constant: diff --git a/Test/baseResults/hlsl.rw.bracket.frag.out b/Test/baseResults/hlsl.rw.bracket.frag.out index 706882548e..c79877c05a 100644 --- a/Test/baseResults/hlsl.rw.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.bracket.frag.out @@ -183,11 +183,11 @@ gl_FragCoord origin is upper left 0:79 Sequence 0:79 move second child to first child ( temp 4-component vector of int) 0:79 'storeTemp' ( temp 4-component vector of int) -0:? Constant: -0:? 2 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:79 Constant: +0:79 2 (const int) +0:79 2 (const int) +0:79 3 (const int) +0:79 4 (const int) 0:79 imageStore ( temp void) 0:79 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) 0:79 c1: direct index for structure ( uniform int) @@ -199,11 +199,11 @@ gl_FragCoord origin is upper left 0:80 Sequence 0:80 move second child to first child ( temp 4-component vector of uint) 0:80 'storeTemp' ( temp 4-component vector of uint) -0:? Constant: -0:? 3 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:80 Constant: +0:80 3 (const uint) +0:80 2 (const uint) +0:80 3 (const uint) +0:80 4 (const uint) 0:80 imageStore ( temp void) 0:80 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) 0:80 c1: direct index for structure ( uniform int) @@ -428,11 +428,11 @@ gl_FragCoord origin is upper left 0:97 Sequence 0:97 move second child to first child ( temp 4-component vector of int) 0:97 'storeTemp' ( temp 4-component vector of int) -0:? Constant: -0:? 5 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:97 Constant: +0:97 5 (const int) +0:97 2 (const int) +0:97 3 (const int) +0:97 4 (const int) 0:97 imageStore ( temp void) 0:97 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) 0:97 c2: direct index for structure ( uniform 2-component vector of int) @@ -444,11 +444,11 @@ gl_FragCoord origin is upper left 0:98 Sequence 0:98 move second child to first child ( temp 4-component vector of uint) 0:98 'storeTemp' ( temp 4-component vector of uint) -0:? Constant: -0:? 6 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:98 Constant: +0:98 6 (const uint) +0:98 2 (const uint) +0:98 3 (const uint) +0:98 4 (const uint) 0:98 imageStore ( temp void) 0:98 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) 0:98 c2: direct index for structure ( uniform 2-component vector of int) @@ -481,11 +481,11 @@ gl_FragCoord origin is upper left 0:103 Sequence 0:103 move second child to first child ( temp 4-component vector of int) 0:103 'storeTemp' ( temp 4-component vector of int) -0:? Constant: -0:? 8 (const int) -0:? 6 (const int) -0:? 7 (const int) -0:? 8 (const int) +0:103 Constant: +0:103 8 (const int) +0:103 6 (const int) +0:103 7 (const int) +0:103 8 (const int) 0:103 imageStore ( temp void) 0:103 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) 0:103 c3: direct index for structure ( uniform 3-component vector of int) @@ -497,11 +497,11 @@ gl_FragCoord origin is upper left 0:104 Sequence 0:104 move second child to first child ( temp 4-component vector of uint) 0:104 'storeTemp' ( temp 4-component vector of uint) -0:? Constant: -0:? 9 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:104 Constant: +0:104 9 (const uint) +0:104 2 (const uint) +0:104 3 (const uint) +0:104 4 (const uint) 0:104 imageStore ( temp void) 0:104 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) 0:104 c3: direct index for structure ( uniform 3-component vector of int) @@ -816,11 +816,11 @@ gl_FragCoord origin is upper left 0:135 Sequence 0:135 move second child to first child ( temp 4-component vector of float) 0:135 'storeTemp' ( temp 4-component vector of float) -0:? imageLoad ( temp 4-component vector of float) +0:135 imageLoad ( temp 4-component vector of float) 0:135 'g_tTex2df4' (layout( rgba32f) uniform image2D) -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:135 Constant: +0:135 2 (const int) +0:135 3 (const int) 0:135 imageStore ( temp void) 0:135 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) 0:135 Constant: @@ -1057,11 +1057,11 @@ gl_FragCoord origin is upper left 0:79 Sequence 0:79 move second child to first child ( temp 4-component vector of int) 0:79 'storeTemp' ( temp 4-component vector of int) -0:? Constant: -0:? 2 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:79 Constant: +0:79 2 (const int) +0:79 2 (const int) +0:79 3 (const int) +0:79 4 (const int) 0:79 imageStore ( temp void) 0:79 'g_tTex1di4' (layout( rgba32i) uniform iimage1D) 0:79 c1: direct index for structure ( uniform int) @@ -1073,11 +1073,11 @@ gl_FragCoord origin is upper left 0:80 Sequence 0:80 move second child to first child ( temp 4-component vector of uint) 0:80 'storeTemp' ( temp 4-component vector of uint) -0:? Constant: -0:? 3 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:80 Constant: +0:80 3 (const uint) +0:80 2 (const uint) +0:80 3 (const uint) +0:80 4 (const uint) 0:80 imageStore ( temp void) 0:80 'g_tTex1du4' (layout( rgba32ui) uniform uimage1D) 0:80 c1: direct index for structure ( uniform int) @@ -1302,11 +1302,11 @@ gl_FragCoord origin is upper left 0:97 Sequence 0:97 move second child to first child ( temp 4-component vector of int) 0:97 'storeTemp' ( temp 4-component vector of int) -0:? Constant: -0:? 5 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:97 Constant: +0:97 5 (const int) +0:97 2 (const int) +0:97 3 (const int) +0:97 4 (const int) 0:97 imageStore ( temp void) 0:97 'g_tTex2di4' (layout( rgba32i) uniform iimage2D) 0:97 c2: direct index for structure ( uniform 2-component vector of int) @@ -1318,11 +1318,11 @@ gl_FragCoord origin is upper left 0:98 Sequence 0:98 move second child to first child ( temp 4-component vector of uint) 0:98 'storeTemp' ( temp 4-component vector of uint) -0:? Constant: -0:? 6 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:98 Constant: +0:98 6 (const uint) +0:98 2 (const uint) +0:98 3 (const uint) +0:98 4 (const uint) 0:98 imageStore ( temp void) 0:98 'g_tTex2du4' (layout( rgba32ui) uniform uimage2D) 0:98 c2: direct index for structure ( uniform 2-component vector of int) @@ -1355,11 +1355,11 @@ gl_FragCoord origin is upper left 0:103 Sequence 0:103 move second child to first child ( temp 4-component vector of int) 0:103 'storeTemp' ( temp 4-component vector of int) -0:? Constant: -0:? 8 (const int) -0:? 6 (const int) -0:? 7 (const int) -0:? 8 (const int) +0:103 Constant: +0:103 8 (const int) +0:103 6 (const int) +0:103 7 (const int) +0:103 8 (const int) 0:103 imageStore ( temp void) 0:103 'g_tTex3di4' (layout( rgba32i) uniform iimage3D) 0:103 c3: direct index for structure ( uniform 3-component vector of int) @@ -1371,11 +1371,11 @@ gl_FragCoord origin is upper left 0:104 Sequence 0:104 move second child to first child ( temp 4-component vector of uint) 0:104 'storeTemp' ( temp 4-component vector of uint) -0:? Constant: -0:? 9 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:104 Constant: +0:104 9 (const uint) +0:104 2 (const uint) +0:104 3 (const uint) +0:104 4 (const uint) 0:104 imageStore ( temp void) 0:104 'g_tTex3du4' (layout( rgba32ui) uniform uimage3D) 0:104 c3: direct index for structure ( uniform 3-component vector of int) @@ -1690,11 +1690,11 @@ gl_FragCoord origin is upper left 0:135 Sequence 0:135 move second child to first child ( temp 4-component vector of float) 0:135 'storeTemp' ( temp 4-component vector of float) -0:? imageLoad ( temp 4-component vector of float) +0:135 imageLoad ( temp 4-component vector of float) 0:135 'g_tTex2df4' (layout( rgba32f) uniform image2D) -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:135 Constant: +0:135 2 (const int) +0:135 3 (const int) 0:135 imageStore ( temp void) 0:135 'g_tTex1df4' (layout( binding=0 rgba32f) uniform image1D) 0:135 Constant: diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out index 061467709a..e76d5972f7 100644 --- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out @@ -789,11 +789,11 @@ gl_FragCoord origin is upper left 0:135 Sequence 0:135 move second child to first child ( temp float) 0:135 'storeTemp' ( temp float) -0:? imageLoad ( temp float) +0:135 imageLoad ( temp float) 0:135 'g_tTex2df1' (layout( r32f) uniform image2D) -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:135 Constant: +0:135 2 (const int) +0:135 3 (const int) 0:135 imageStore ( temp void) 0:135 'g_tTex1df1' (layout( r32f) uniform image1D) 0:135 Constant: @@ -1636,11 +1636,11 @@ gl_FragCoord origin is upper left 0:135 Sequence 0:135 move second child to first child ( temp float) 0:135 'storeTemp' ( temp float) -0:? imageLoad ( temp float) +0:135 imageLoad ( temp float) 0:135 'g_tTex2df1' (layout( r32f) uniform image2D) -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:135 Constant: +0:135 2 (const int) +0:135 3 (const int) 0:135 imageStore ( temp void) 0:135 'g_tTex1df1' (layout( r32f) uniform image1D) 0:135 Constant: diff --git a/Test/baseResults/hlsl.rw.swizzle.frag.out b/Test/baseResults/hlsl.rw.swizzle.frag.out index 71a9e6cc48..97dd0dc417 100644 --- a/Test/baseResults/hlsl.rw.swizzle.frag.out +++ b/Test/baseResults/hlsl.rw.swizzle.frag.out @@ -6,10 +6,10 @@ gl_FragCoord origin is upper left 0:4 Function Parameters: 0:? Sequence 0:4 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:4 Constant: +0:4 1.000000 +0:4 2.000000 +0:4 3.000000 0:7 Function Definition: @main( ( temp 4-component vector of float) 0:7 Function Parameters: 0:? Sequence @@ -35,10 +35,10 @@ gl_FragCoord origin is upper left 0:12 1 (const int) 0:12 Constant: 0:12 0 (const int) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:12 Constant: +0:12 1.000000 +0:12 2.000000 +0:12 3.000000 0:12 imageStore ( temp void) 0:12 'rwtx' (layout( rgba32f) uniform image2D) 0:12 'tc2' ( temp 2-component vector of int) @@ -109,10 +109,10 @@ gl_FragCoord origin is upper left 0:4 Function Parameters: 0:? Sequence 0:4 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:4 Constant: +0:4 1.000000 +0:4 2.000000 +0:4 3.000000 0:7 Function Definition: @main( ( temp 4-component vector of float) 0:7 Function Parameters: 0:? Sequence @@ -138,10 +138,10 @@ gl_FragCoord origin is upper left 0:12 1 (const int) 0:12 Constant: 0:12 0 (const int) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:12 Constant: +0:12 1.000000 +0:12 2.000000 +0:12 3.000000 0:12 imageStore ( temp void) 0:12 'rwtx' (layout( rgba32f) uniform image2D) 0:12 'tc2' ( temp 2-component vector of int) diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out index 68e40de8db..c8d10e608a 100644 --- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out @@ -26,27 +26,27 @@ gl_FragCoord origin is upper left 0:? Sequence 0:46 move second child to first child ( temp 2-component vector of int) 0:46 'x' ( out 2-component vector of int) -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 0 (const int) 0:47 Function Definition: Fn2(vu2; ( temp void) 0:47 Function Parameters: 0:47 'x' ( out 2-component vector of uint) 0:? Sequence 0:47 move second child to first child ( temp 2-component vector of uint) 0:47 'x' ( out 2-component vector of uint) -0:? Constant: -0:? 0 (const uint) -0:? 0 (const uint) +0:47 Constant: +0:47 0 (const uint) +0:47 0 (const uint) 0:48 Function Definition: Fn2(vf2; ( temp void) 0:48 Function Parameters: 0:48 'x' ( out 2-component vector of float) 0:? Sequence 0:48 move second child to first child ( temp 2-component vector of float) 0:48 'x' ( out 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:48 Constant: +0:48 0.000000 +0:48 0.000000 0:50 Function Definition: SomeValue( ( temp 2-component vector of float) 0:50 Function Parameters: 0:? Sequence @@ -177,9 +177,9 @@ gl_FragCoord origin is upper left 0:79 Sequence 0:79 move second child to first child ( temp 2-component vector of int) 0:79 'storeTemp' ( temp 2-component vector of int) -0:? Constant: -0:? 2 (const int) -0:? 2 (const int) +0:79 Constant: +0:79 2 (const int) +0:79 2 (const int) 0:79 imageStore ( temp void) 0:79 'g_tTex1di2' (layout( rg32i) uniform iimage1D) 0:79 c1: direct index for structure ( uniform int) @@ -191,9 +191,9 @@ gl_FragCoord origin is upper left 0:80 Sequence 0:80 move second child to first child ( temp 2-component vector of uint) 0:80 'storeTemp' ( temp 2-component vector of uint) -0:? Constant: -0:? 3 (const uint) -0:? 2 (const uint) +0:80 Constant: +0:80 3 (const uint) +0:80 2 (const uint) 0:80 imageStore ( temp void) 0:80 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) 0:80 c1: direct index for structure ( uniform int) @@ -418,9 +418,9 @@ gl_FragCoord origin is upper left 0:97 Sequence 0:97 move second child to first child ( temp 2-component vector of int) 0:97 'storeTemp' ( temp 2-component vector of int) -0:? Constant: -0:? 5 (const int) -0:? 2 (const int) +0:97 Constant: +0:97 5 (const int) +0:97 2 (const int) 0:97 imageStore ( temp void) 0:97 'g_tTex2di2' (layout( rg32i) uniform iimage2D) 0:97 c2: direct index for structure ( uniform 2-component vector of int) @@ -432,9 +432,9 @@ gl_FragCoord origin is upper left 0:98 Sequence 0:98 move second child to first child ( temp 2-component vector of uint) 0:98 'storeTemp' ( temp 2-component vector of uint) -0:? Constant: -0:? 6 (const uint) -0:? 2 (const uint) +0:98 Constant: +0:98 6 (const uint) +0:98 2 (const uint) 0:98 imageStore ( temp void) 0:98 'g_tTex2du2' (layout( rg32ui) uniform uimage2D) 0:98 c2: direct index for structure ( uniform 2-component vector of int) @@ -467,9 +467,9 @@ gl_FragCoord origin is upper left 0:103 Sequence 0:103 move second child to first child ( temp 2-component vector of int) 0:103 'storeTemp' ( temp 2-component vector of int) -0:? Constant: -0:? 8 (const int) -0:? 6 (const int) +0:103 Constant: +0:103 8 (const int) +0:103 6 (const int) 0:103 imageStore ( temp void) 0:103 'g_tTex3di2' (layout( rg32i) uniform iimage3D) 0:103 c3: direct index for structure ( uniform 3-component vector of int) @@ -481,9 +481,9 @@ gl_FragCoord origin is upper left 0:104 Sequence 0:104 move second child to first child ( temp 2-component vector of uint) 0:104 'storeTemp' ( temp 2-component vector of uint) -0:? Constant: -0:? 9 (const uint) -0:? 2 (const uint) +0:104 Constant: +0:104 9 (const uint) +0:104 2 (const uint) 0:104 imageStore ( temp void) 0:104 'g_tTex3du2' (layout( rg32ui) uniform uimage3D) 0:104 c3: direct index for structure ( uniform 3-component vector of int) @@ -798,11 +798,11 @@ gl_FragCoord origin is upper left 0:135 Sequence 0:135 move second child to first child ( temp 2-component vector of float) 0:135 'storeTemp' ( temp 2-component vector of float) -0:? imageLoad ( temp 2-component vector of float) +0:135 imageLoad ( temp 2-component vector of float) 0:135 'g_tTex2df2' (layout( rg32f) uniform image2D) -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:135 Constant: +0:135 2 (const int) +0:135 3 (const int) 0:135 imageStore ( temp void) 0:135 'g_tTex1df2' (layout( rg32f) uniform image1D) 0:135 Constant: @@ -882,27 +882,27 @@ gl_FragCoord origin is upper left 0:? Sequence 0:46 move second child to first child ( temp 2-component vector of int) 0:46 'x' ( out 2-component vector of int) -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:46 Constant: +0:46 0 (const int) +0:46 0 (const int) 0:47 Function Definition: Fn2(vu2; ( temp void) 0:47 Function Parameters: 0:47 'x' ( out 2-component vector of uint) 0:? Sequence 0:47 move second child to first child ( temp 2-component vector of uint) 0:47 'x' ( out 2-component vector of uint) -0:? Constant: -0:? 0 (const uint) -0:? 0 (const uint) +0:47 Constant: +0:47 0 (const uint) +0:47 0 (const uint) 0:48 Function Definition: Fn2(vf2; ( temp void) 0:48 Function Parameters: 0:48 'x' ( out 2-component vector of float) 0:? Sequence 0:48 move second child to first child ( temp 2-component vector of float) 0:48 'x' ( out 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:48 Constant: +0:48 0.000000 +0:48 0.000000 0:50 Function Definition: SomeValue( ( temp 2-component vector of float) 0:50 Function Parameters: 0:? Sequence @@ -1033,9 +1033,9 @@ gl_FragCoord origin is upper left 0:79 Sequence 0:79 move second child to first child ( temp 2-component vector of int) 0:79 'storeTemp' ( temp 2-component vector of int) -0:? Constant: -0:? 2 (const int) -0:? 2 (const int) +0:79 Constant: +0:79 2 (const int) +0:79 2 (const int) 0:79 imageStore ( temp void) 0:79 'g_tTex1di2' (layout( rg32i) uniform iimage1D) 0:79 c1: direct index for structure ( uniform int) @@ -1047,9 +1047,9 @@ gl_FragCoord origin is upper left 0:80 Sequence 0:80 move second child to first child ( temp 2-component vector of uint) 0:80 'storeTemp' ( temp 2-component vector of uint) -0:? Constant: -0:? 3 (const uint) -0:? 2 (const uint) +0:80 Constant: +0:80 3 (const uint) +0:80 2 (const uint) 0:80 imageStore ( temp void) 0:80 'g_tTex1du2' (layout( rg32ui) uniform uimage1D) 0:80 c1: direct index for structure ( uniform int) @@ -1274,9 +1274,9 @@ gl_FragCoord origin is upper left 0:97 Sequence 0:97 move second child to first child ( temp 2-component vector of int) 0:97 'storeTemp' ( temp 2-component vector of int) -0:? Constant: -0:? 5 (const int) -0:? 2 (const int) +0:97 Constant: +0:97 5 (const int) +0:97 2 (const int) 0:97 imageStore ( temp void) 0:97 'g_tTex2di2' (layout( rg32i) uniform iimage2D) 0:97 c2: direct index for structure ( uniform 2-component vector of int) @@ -1288,9 +1288,9 @@ gl_FragCoord origin is upper left 0:98 Sequence 0:98 move second child to first child ( temp 2-component vector of uint) 0:98 'storeTemp' ( temp 2-component vector of uint) -0:? Constant: -0:? 6 (const uint) -0:? 2 (const uint) +0:98 Constant: +0:98 6 (const uint) +0:98 2 (const uint) 0:98 imageStore ( temp void) 0:98 'g_tTex2du2' (layout( rg32ui) uniform uimage2D) 0:98 c2: direct index for structure ( uniform 2-component vector of int) @@ -1323,9 +1323,9 @@ gl_FragCoord origin is upper left 0:103 Sequence 0:103 move second child to first child ( temp 2-component vector of int) 0:103 'storeTemp' ( temp 2-component vector of int) -0:? Constant: -0:? 8 (const int) -0:? 6 (const int) +0:103 Constant: +0:103 8 (const int) +0:103 6 (const int) 0:103 imageStore ( temp void) 0:103 'g_tTex3di2' (layout( rg32i) uniform iimage3D) 0:103 c3: direct index for structure ( uniform 3-component vector of int) @@ -1337,9 +1337,9 @@ gl_FragCoord origin is upper left 0:104 Sequence 0:104 move second child to first child ( temp 2-component vector of uint) 0:104 'storeTemp' ( temp 2-component vector of uint) -0:? Constant: -0:? 9 (const uint) -0:? 2 (const uint) +0:104 Constant: +0:104 9 (const uint) +0:104 2 (const uint) 0:104 imageStore ( temp void) 0:104 'g_tTex3du2' (layout( rg32ui) uniform uimage3D) 0:104 c3: direct index for structure ( uniform 3-component vector of int) @@ -1654,11 +1654,11 @@ gl_FragCoord origin is upper left 0:135 Sequence 0:135 move second child to first child ( temp 2-component vector of float) 0:135 'storeTemp' ( temp 2-component vector of float) -0:? imageLoad ( temp 2-component vector of float) +0:135 imageLoad ( temp 2-component vector of float) 0:135 'g_tTex2df2' (layout( rg32f) uniform image2D) -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:135 Constant: +0:135 2 (const int) +0:135 3 (const int) 0:135 imageStore ( temp void) 0:135 'g_tTex1df2' (layout( rg32f) uniform image1D) 0:135 Constant: diff --git a/Test/baseResults/hlsl.sample.array.dx10.frag.out b/Test/baseResults/hlsl.sample.array.dx10.frag.out index 6ecbcf39f0..28d96f0d80 100644 --- a/Test/baseResults/hlsl.sample.array.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.array.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval11' ( temp 4-component vector of int) @@ -23,9 +23,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:28 Constant: +0:28 0.200000 +0:28 0.300000 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval12' ( temp 4-component vector of uint) @@ -33,9 +33,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:29 Constant: +0:29 0.300000 +0:29 0.400000 0:31 Sequence 0:31 move second child to first child ( temp 4-component vector of float) 0:31 'txval20' ( temp 4-component vector of float) @@ -43,10 +43,10 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 0:32 Sequence 0:32 move second child to first child ( temp 4-component vector of int) 0:32 'txval21' ( temp 4-component vector of int) @@ -54,10 +54,10 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:32 Constant: +0:32 0.300000 +0:32 0.400000 +0:32 0.500000 0:33 Sequence 0:33 move second child to first child ( temp 4-component vector of uint) 0:33 'txval22' ( temp 4-component vector of uint) @@ -65,10 +65,10 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:33 Constant: +0:33 0.500000 +0:33 0.600000 +0:33 0.700000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of float) 0:35 'txval40' ( temp 4-component vector of float) @@ -76,11 +76,11 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval41' ( temp 4-component vector of int) @@ -88,11 +88,11 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:36 Constant: +0:36 0.400000 +0:36 0.500000 +0:36 0.600000 +0:36 0.700000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval42' ( temp 4-component vector of uint) @@ -100,11 +100,11 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? 1.000000 +0:37 Constant: +0:37 0.700000 +0:37 0.800000 +0:37 0.900000 +0:37 1.000000 0:39 move second child to first child ( temp 4-component vector of float) 0:39 Color: direct index for structure ( temp 4-component vector of float) 0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -176,9 +176,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval11' ( temp 4-component vector of int) @@ -186,9 +186,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:28 Constant: +0:28 0.200000 +0:28 0.300000 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval12' ( temp 4-component vector of uint) @@ -196,9 +196,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:29 Constant: +0:29 0.300000 +0:29 0.400000 0:31 Sequence 0:31 move second child to first child ( temp 4-component vector of float) 0:31 'txval20' ( temp 4-component vector of float) @@ -206,10 +206,10 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 0:32 Sequence 0:32 move second child to first child ( temp 4-component vector of int) 0:32 'txval21' ( temp 4-component vector of int) @@ -217,10 +217,10 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:32 Constant: +0:32 0.300000 +0:32 0.400000 +0:32 0.500000 0:33 Sequence 0:33 move second child to first child ( temp 4-component vector of uint) 0:33 'txval22' ( temp 4-component vector of uint) @@ -228,10 +228,10 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:33 Constant: +0:33 0.500000 +0:33 0.600000 +0:33 0.700000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of float) 0:35 'txval40' ( temp 4-component vector of float) @@ -239,11 +239,11 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval41' ( temp 4-component vector of int) @@ -251,11 +251,11 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:36 Constant: +0:36 0.400000 +0:36 0.500000 +0:36 0.600000 +0:36 0.700000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval42' ( temp 4-component vector of uint) @@ -263,11 +263,11 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? 1.000000 +0:37 Constant: +0:37 0.700000 +0:37 0.800000 +0:37 0.900000 +0:37 1.000000 0:39 move second child to first child ( temp 4-component vector of float) 0:39 Color: direct index for structure ( temp 4-component vector of float) 0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.sample.basic.dx10.frag.out b/Test/baseResults/hlsl.sample.basic.dx10.frag.out index 9d06667328..12c67111ba 100644 --- a/Test/baseResults/hlsl.sample.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.basic.dx10.frag.out @@ -126,9 +126,9 @@ using depth_any 0:74 Construct combined texture-sampler ( temp sampler2D) 0:74 'g_tTex2df4' ( uniform texture2D) 0:74 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:74 Constant: +0:74 0.100000 +0:74 0.200000 0:75 Sequence 0:75 move second child to first child ( temp 4-component vector of int) 0:75 'txval21' ( temp 4-component vector of int) @@ -136,9 +136,9 @@ using depth_any 0:75 Construct combined texture-sampler ( temp isampler2D) 0:75 'g_tTex2di4' ( uniform itexture2D) 0:75 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:75 Constant: +0:75 0.300000 +0:75 0.400000 0:76 Sequence 0:76 move second child to first child ( temp 4-component vector of uint) 0:76 'txval22' ( temp 4-component vector of uint) @@ -146,9 +146,9 @@ using depth_any 0:76 Construct combined texture-sampler ( temp usampler2D) 0:76 'g_tTex2du4' ( uniform utexture2D) 0:76 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:76 Constant: +0:76 0.500000 +0:76 0.600000 0:78 Sequence 0:78 move second child to first child ( temp 4-component vector of float) 0:78 'txval30' ( temp 4-component vector of float) @@ -156,10 +156,10 @@ using depth_any 0:78 Construct combined texture-sampler ( temp sampler3D) 0:78 'g_tTex3df4' ( uniform texture3D) 0:78 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:78 Constant: +0:78 0.100000 +0:78 0.200000 +0:78 0.300000 0:79 Sequence 0:79 move second child to first child ( temp 4-component vector of int) 0:79 'txval31' ( temp 4-component vector of int) @@ -167,10 +167,10 @@ using depth_any 0:79 Construct combined texture-sampler ( temp isampler3D) 0:79 'g_tTex3di4' ( uniform itexture3D) 0:79 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:79 Constant: +0:79 0.400000 +0:79 0.500000 +0:79 0.600000 0:80 Sequence 0:80 move second child to first child ( temp 4-component vector of uint) 0:80 'txval32' ( temp 4-component vector of uint) @@ -178,10 +178,10 @@ using depth_any 0:80 Construct combined texture-sampler ( temp usampler3D) 0:80 'g_tTex3du4' ( uniform utexture3D) 0:80 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:80 Constant: +0:80 0.700000 +0:80 0.800000 +0:80 0.900000 0:82 Sequence 0:82 move second child to first child ( temp 4-component vector of float) 0:82 'txval40' ( temp 4-component vector of float) @@ -189,10 +189,10 @@ using depth_any 0:82 Construct combined texture-sampler ( temp samplerCube) 0:82 'g_tTexcdf4' ( uniform textureCube) 0:82 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:82 Constant: +0:82 0.100000 +0:82 0.200000 +0:82 0.300000 0:83 Sequence 0:83 move second child to first child ( temp 4-component vector of int) 0:83 'txval41' ( temp 4-component vector of int) @@ -200,10 +200,10 @@ using depth_any 0:83 Construct combined texture-sampler ( temp isamplerCube) 0:83 'g_tTexcdi4' ( uniform itextureCube) 0:83 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:83 Constant: +0:83 0.400000 +0:83 0.500000 +0:83 0.600000 0:84 Sequence 0:84 move second child to first child ( temp 4-component vector of uint) 0:84 'txval42' ( temp 4-component vector of uint) @@ -211,10 +211,10 @@ using depth_any 0:84 Construct combined texture-sampler ( temp usamplerCube) 0:84 'g_tTexcdu4' ( uniform utextureCube) 0:84 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:84 Constant: +0:84 0.700000 +0:84 0.800000 +0:84 0.900000 0:86 move second child to first child ( temp 4-component vector of float) 0:86 Color: direct index for structure ( temp 4-component vector of float) 0:86 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -402,9 +402,9 @@ using depth_any 0:74 Construct combined texture-sampler ( temp sampler2D) 0:74 'g_tTex2df4' ( uniform texture2D) 0:74 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:74 Constant: +0:74 0.100000 +0:74 0.200000 0:75 Sequence 0:75 move second child to first child ( temp 4-component vector of int) 0:75 'txval21' ( temp 4-component vector of int) @@ -412,9 +412,9 @@ using depth_any 0:75 Construct combined texture-sampler ( temp isampler2D) 0:75 'g_tTex2di4' ( uniform itexture2D) 0:75 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:75 Constant: +0:75 0.300000 +0:75 0.400000 0:76 Sequence 0:76 move second child to first child ( temp 4-component vector of uint) 0:76 'txval22' ( temp 4-component vector of uint) @@ -422,9 +422,9 @@ using depth_any 0:76 Construct combined texture-sampler ( temp usampler2D) 0:76 'g_tTex2du4' ( uniform utexture2D) 0:76 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:76 Constant: +0:76 0.500000 +0:76 0.600000 0:78 Sequence 0:78 move second child to first child ( temp 4-component vector of float) 0:78 'txval30' ( temp 4-component vector of float) @@ -432,10 +432,10 @@ using depth_any 0:78 Construct combined texture-sampler ( temp sampler3D) 0:78 'g_tTex3df4' ( uniform texture3D) 0:78 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:78 Constant: +0:78 0.100000 +0:78 0.200000 +0:78 0.300000 0:79 Sequence 0:79 move second child to first child ( temp 4-component vector of int) 0:79 'txval31' ( temp 4-component vector of int) @@ -443,10 +443,10 @@ using depth_any 0:79 Construct combined texture-sampler ( temp isampler3D) 0:79 'g_tTex3di4' ( uniform itexture3D) 0:79 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:79 Constant: +0:79 0.400000 +0:79 0.500000 +0:79 0.600000 0:80 Sequence 0:80 move second child to first child ( temp 4-component vector of uint) 0:80 'txval32' ( temp 4-component vector of uint) @@ -454,10 +454,10 @@ using depth_any 0:80 Construct combined texture-sampler ( temp usampler3D) 0:80 'g_tTex3du4' ( uniform utexture3D) 0:80 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:80 Constant: +0:80 0.700000 +0:80 0.800000 +0:80 0.900000 0:82 Sequence 0:82 move second child to first child ( temp 4-component vector of float) 0:82 'txval40' ( temp 4-component vector of float) @@ -465,10 +465,10 @@ using depth_any 0:82 Construct combined texture-sampler ( temp samplerCube) 0:82 'g_tTexcdf4' ( uniform textureCube) 0:82 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:82 Constant: +0:82 0.100000 +0:82 0.200000 +0:82 0.300000 0:83 Sequence 0:83 move second child to first child ( temp 4-component vector of int) 0:83 'txval41' ( temp 4-component vector of int) @@ -476,10 +476,10 @@ using depth_any 0:83 Construct combined texture-sampler ( temp isamplerCube) 0:83 'g_tTexcdi4' ( uniform itextureCube) 0:83 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:83 Constant: +0:83 0.400000 +0:83 0.500000 +0:83 0.600000 0:84 Sequence 0:84 move second child to first child ( temp 4-component vector of uint) 0:84 'txval42' ( temp 4-component vector of uint) @@ -487,10 +487,10 @@ using depth_any 0:84 Construct combined texture-sampler ( temp usamplerCube) 0:84 'g_tTexcdu4' ( uniform utextureCube) 0:84 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:84 Constant: +0:84 0.700000 +0:84 0.800000 +0:84 0.900000 0:86 move second child to first child ( temp 4-component vector of float) 0:86 Color: direct index for structure ( temp 4-component vector of float) 0:86 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.sample.dx9.frag.out b/Test/baseResults/hlsl.sample.dx9.frag.out index 5f2aecddce..282455c703 100644 --- a/Test/baseResults/hlsl.sample.dx9.frag.out +++ b/Test/baseResults/hlsl.sample.dx9.frag.out @@ -9,18 +9,18 @@ using depth_any 0:18 Sequence 0:18 move second child to first child ( temp 4-component vector of float) 0:18 'ColorOut' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:18 Constant: +0:18 0.000000 +0:18 0.000000 +0:18 0.000000 +0:18 0.000000 0:20 add second child into first child ( temp 4-component vector of float) 0:20 'ColorOut' ( temp 4-component vector of float) 0:20 texture ( temp 4-component vector of float) 0:20 'g_sam' (layout( binding=0) uniform sampler2D) -0:? Constant: -0:? 0.400000 -0:? 0.300000 +0:20 Constant: +0:20 0.400000 +0:20 0.300000 0:21 add second child into first child ( temp 4-component vector of float) 0:21 'ColorOut' ( temp 4-component vector of float) 0:21 texture ( temp 4-component vector of float) @@ -31,41 +31,41 @@ using depth_any 0:22 'ColorOut' ( temp 4-component vector of float) 0:22 texture ( temp 4-component vector of float) 0:22 'g_sam2D' (layout( binding=2) uniform sampler2D) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:22 Constant: +0:22 0.500000 +0:22 0.600000 0:23 add second child into first child ( temp 4-component vector of float) 0:23 'ColorOut' ( temp 4-component vector of float) 0:23 texture ( temp 4-component vector of float) 0:23 'g_sam3D' (layout( binding=3) uniform sampler3D) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 +0:23 Constant: +0:23 0.500000 +0:23 0.600000 +0:23 0.400000 0:24 add second child into first child ( temp 4-component vector of float) 0:24 'ColorOut' ( temp 4-component vector of float) 0:24 texture ( temp 4-component vector of float) 0:24 'g_samCube' (layout( binding=4) uniform samplerCube) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 +0:24 Constant: +0:24 0.500000 +0:24 0.600000 +0:24 0.400000 0:26 add second child into first child ( temp 4-component vector of float) 0:26 'ColorOut' ( temp 4-component vector of float) 0:26 textureLod ( temp 4-component vector of float) 0:26 'g_sam' (layout( binding=0) uniform sampler2D) 0:26 Construct vec2 ( temp 2-component vector of float) -0:? Constant: -0:? 0.400000 -0:? 0.300000 -0:? 0.000000 -0:? 0.000000 +0:26 Constant: +0:26 0.400000 +0:26 0.300000 +0:26 0.000000 +0:26 0.000000 0:26 direct index ( temp float) -0:? Constant: -0:? 0.400000 -0:? 0.300000 -0:? 0.000000 -0:? 0.000000 +0:26 Constant: +0:26 0.400000 +0:26 0.300000 +0:26 0.000000 +0:26 0.000000 0:26 Constant: 0:26 3 (const int) 0:27 add second child into first child ( temp 4-component vector of float) @@ -73,17 +73,17 @@ using depth_any 0:27 textureLod ( temp 4-component vector of float) 0:27 'g_sam1D' (layout( binding=1) uniform sampler1D) 0:27 Construct float ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:27 Constant: +0:27 0.500000 +0:27 0.000000 +0:27 0.000000 +0:27 0.000000 0:27 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:27 Constant: +0:27 0.500000 +0:27 0.000000 +0:27 0.000000 +0:27 0.000000 0:27 Constant: 0:27 3 (const int) 0:28 add second child into first child ( temp 4-component vector of float) @@ -91,17 +91,17 @@ using depth_any 0:28 textureLod ( temp 4-component vector of float) 0:28 'g_sam2D' (layout( binding=2) uniform sampler2D) 0:28 Construct vec2 ( temp 2-component vector of float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.000000 -0:? 0.000000 +0:28 Constant: +0:28 0.500000 +0:28 0.600000 +0:28 0.000000 +0:28 0.000000 0:28 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.000000 -0:? 0.000000 +0:28 Constant: +0:28 0.500000 +0:28 0.600000 +0:28 0.000000 +0:28 0.000000 0:28 Constant: 0:28 3 (const int) 0:29 add second child into first child ( temp 4-component vector of float) @@ -109,17 +109,17 @@ using depth_any 0:29 textureLod ( temp 4-component vector of float) 0:29 'g_sam3D' (layout( binding=3) uniform sampler3D) 0:29 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 -0:? 0.000000 +0:29 Constant: +0:29 0.500000 +0:29 0.600000 +0:29 0.400000 +0:29 0.000000 0:29 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 -0:? 0.000000 +0:29 Constant: +0:29 0.500000 +0:29 0.600000 +0:29 0.400000 +0:29 0.000000 0:29 Constant: 0:29 3 (const int) 0:30 add second child into first child ( temp 4-component vector of float) @@ -127,17 +127,17 @@ using depth_any 0:30 textureLod ( temp 4-component vector of float) 0:30 'g_samCube' (layout( binding=4) uniform samplerCube) 0:30 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 -0:? 0.000000 +0:30 Constant: +0:30 0.500000 +0:30 0.600000 +0:30 0.400000 +0:30 0.000000 0:30 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 -0:? 0.000000 +0:30 Constant: +0:30 0.500000 +0:30 0.600000 +0:30 0.400000 +0:30 0.000000 0:30 Constant: 0:30 3 (const int) 0:32 move second child to first child ( temp 4-component vector of float) @@ -200,18 +200,18 @@ using depth_any 0:18 Sequence 0:18 move second child to first child ( temp 4-component vector of float) 0:18 'ColorOut' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:18 Constant: +0:18 0.000000 +0:18 0.000000 +0:18 0.000000 +0:18 0.000000 0:20 add second child into first child ( temp 4-component vector of float) 0:20 'ColorOut' ( temp 4-component vector of float) 0:20 texture ( temp 4-component vector of float) 0:20 'g_sam' (layout( binding=0) uniform sampler2D) -0:? Constant: -0:? 0.400000 -0:? 0.300000 +0:20 Constant: +0:20 0.400000 +0:20 0.300000 0:21 add second child into first child ( temp 4-component vector of float) 0:21 'ColorOut' ( temp 4-component vector of float) 0:21 texture ( temp 4-component vector of float) @@ -222,41 +222,41 @@ using depth_any 0:22 'ColorOut' ( temp 4-component vector of float) 0:22 texture ( temp 4-component vector of float) 0:22 'g_sam2D' (layout( binding=2) uniform sampler2D) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:22 Constant: +0:22 0.500000 +0:22 0.600000 0:23 add second child into first child ( temp 4-component vector of float) 0:23 'ColorOut' ( temp 4-component vector of float) 0:23 texture ( temp 4-component vector of float) 0:23 'g_sam3D' (layout( binding=3) uniform sampler3D) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 +0:23 Constant: +0:23 0.500000 +0:23 0.600000 +0:23 0.400000 0:24 add second child into first child ( temp 4-component vector of float) 0:24 'ColorOut' ( temp 4-component vector of float) 0:24 texture ( temp 4-component vector of float) 0:24 'g_samCube' (layout( binding=4) uniform samplerCube) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 +0:24 Constant: +0:24 0.500000 +0:24 0.600000 +0:24 0.400000 0:26 add second child into first child ( temp 4-component vector of float) 0:26 'ColorOut' ( temp 4-component vector of float) 0:26 textureLod ( temp 4-component vector of float) 0:26 'g_sam' (layout( binding=0) uniform sampler2D) 0:26 Construct vec2 ( temp 2-component vector of float) -0:? Constant: -0:? 0.400000 -0:? 0.300000 -0:? 0.000000 -0:? 0.000000 +0:26 Constant: +0:26 0.400000 +0:26 0.300000 +0:26 0.000000 +0:26 0.000000 0:26 direct index ( temp float) -0:? Constant: -0:? 0.400000 -0:? 0.300000 -0:? 0.000000 -0:? 0.000000 +0:26 Constant: +0:26 0.400000 +0:26 0.300000 +0:26 0.000000 +0:26 0.000000 0:26 Constant: 0:26 3 (const int) 0:27 add second child into first child ( temp 4-component vector of float) @@ -264,17 +264,17 @@ using depth_any 0:27 textureLod ( temp 4-component vector of float) 0:27 'g_sam1D' (layout( binding=1) uniform sampler1D) 0:27 Construct float ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:27 Constant: +0:27 0.500000 +0:27 0.000000 +0:27 0.000000 +0:27 0.000000 0:27 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:27 Constant: +0:27 0.500000 +0:27 0.000000 +0:27 0.000000 +0:27 0.000000 0:27 Constant: 0:27 3 (const int) 0:28 add second child into first child ( temp 4-component vector of float) @@ -282,17 +282,17 @@ using depth_any 0:28 textureLod ( temp 4-component vector of float) 0:28 'g_sam2D' (layout( binding=2) uniform sampler2D) 0:28 Construct vec2 ( temp 2-component vector of float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.000000 -0:? 0.000000 +0:28 Constant: +0:28 0.500000 +0:28 0.600000 +0:28 0.000000 +0:28 0.000000 0:28 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.000000 -0:? 0.000000 +0:28 Constant: +0:28 0.500000 +0:28 0.600000 +0:28 0.000000 +0:28 0.000000 0:28 Constant: 0:28 3 (const int) 0:29 add second child into first child ( temp 4-component vector of float) @@ -300,17 +300,17 @@ using depth_any 0:29 textureLod ( temp 4-component vector of float) 0:29 'g_sam3D' (layout( binding=3) uniform sampler3D) 0:29 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 -0:? 0.000000 +0:29 Constant: +0:29 0.500000 +0:29 0.600000 +0:29 0.400000 +0:29 0.000000 0:29 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 -0:? 0.000000 +0:29 Constant: +0:29 0.500000 +0:29 0.600000 +0:29 0.400000 +0:29 0.000000 0:29 Constant: 0:29 3 (const int) 0:30 add second child into first child ( temp 4-component vector of float) @@ -318,17 +318,17 @@ using depth_any 0:30 textureLod ( temp 4-component vector of float) 0:30 'g_samCube' (layout( binding=4) uniform samplerCube) 0:30 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 -0:? 0.000000 +0:30 Constant: +0:30 0.500000 +0:30 0.600000 +0:30 0.400000 +0:30 0.000000 0:30 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.400000 -0:? 0.000000 +0:30 Constant: +0:30 0.500000 +0:30 0.600000 +0:30 0.400000 +0:30 0.000000 0:30 Constant: 0:30 3 (const int) 0:32 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.sample.dx9.vert.out b/Test/baseResults/hlsl.sample.dx9.vert.out index 0b47bff308..4b718cf174 100644 --- a/Test/baseResults/hlsl.sample.dx9.vert.out +++ b/Test/baseResults/hlsl.sample.dx9.vert.out @@ -7,27 +7,27 @@ Shader version: 500 0:14 Sequence 0:14 move second child to first child ( temp 4-component vector of float) 0:14 'PosOut' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:14 Constant: +0:14 0.000000 +0:14 0.000000 +0:14 0.000000 +0:14 0.000000 0:16 add second child into first child ( temp 4-component vector of float) 0:16 'PosOut' ( temp 4-component vector of float) 0:16 textureLod ( temp 4-component vector of float) 0:16 'g_sam' (layout( binding=0) uniform sampler2D) 0:16 Construct vec2 ( temp 2-component vector of float) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.000000 -0:? 1.000000 +0:16 Constant: +0:16 0.300000 +0:16 0.400000 +0:16 0.000000 +0:16 1.000000 0:16 direct index ( temp float) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.000000 -0:? 1.000000 +0:16 Constant: +0:16 0.300000 +0:16 0.400000 +0:16 0.000000 +0:16 1.000000 0:16 Constant: 0:16 3 (const int) 0:17 add second child into first child ( temp 4-component vector of float) @@ -35,17 +35,17 @@ Shader version: 500 0:17 textureLod ( temp 4-component vector of float) 0:17 'g_sam2D' (layout( binding=1) uniform sampler2D) 0:17 Construct vec2 ( temp 2-component vector of float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.000000 -0:? 1.000000 +0:17 Constant: +0:17 0.500000 +0:17 0.600000 +0:17 0.000000 +0:17 1.000000 0:17 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.000000 -0:? 1.000000 +0:17 Constant: +0:17 0.500000 +0:17 0.600000 +0:17 0.000000 +0:17 1.000000 0:17 Constant: 0:17 3 (const int) 0:19 move second child to first child ( temp 4-component vector of float) @@ -86,27 +86,27 @@ Shader version: 500 0:14 Sequence 0:14 move second child to first child ( temp 4-component vector of float) 0:14 'PosOut' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:14 Constant: +0:14 0.000000 +0:14 0.000000 +0:14 0.000000 +0:14 0.000000 0:16 add second child into first child ( temp 4-component vector of float) 0:16 'PosOut' ( temp 4-component vector of float) 0:16 textureLod ( temp 4-component vector of float) 0:16 'g_sam' (layout( binding=0) uniform sampler2D) 0:16 Construct vec2 ( temp 2-component vector of float) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.000000 -0:? 1.000000 +0:16 Constant: +0:16 0.300000 +0:16 0.400000 +0:16 0.000000 +0:16 1.000000 0:16 direct index ( temp float) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.000000 -0:? 1.000000 +0:16 Constant: +0:16 0.300000 +0:16 0.400000 +0:16 0.000000 +0:16 1.000000 0:16 Constant: 0:16 3 (const int) 0:17 add second child into first child ( temp 4-component vector of float) @@ -114,17 +114,17 @@ Shader version: 500 0:17 textureLod ( temp 4-component vector of float) 0:17 'g_sam2D' (layout( binding=1) uniform sampler2D) 0:17 Construct vec2 ( temp 2-component vector of float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.000000 -0:? 1.000000 +0:17 Constant: +0:17 0.500000 +0:17 0.600000 +0:17 0.000000 +0:17 1.000000 0:17 direct index ( temp float) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.000000 -0:? 1.000000 +0:17 Constant: +0:17 0.500000 +0:17 0.600000 +0:17 0.000000 +0:17 1.000000 0:17 Constant: 0:17 3 (const int) 0:19 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.sample.offset.dx10.frag.out b/Test/baseResults/hlsl.sample.offset.dx10.frag.out index fc91699967..e5d204f9f7 100644 --- a/Test/baseResults/hlsl.sample.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.offset.dx10.frag.out @@ -46,12 +46,12 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 Constant: +0:35 1 (const int) +0:35 0 (const int) 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -59,12 +59,12 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:36 Constant: +0:36 0.300000 +0:36 0.400000 +0:36 Constant: +0:36 1 (const int) +0:36 1 (const int) 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -72,12 +72,12 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:37 Constant: +0:37 0.500000 +0:37 0.600000 +0:37 Constant: +0:37 1 (const int) +0:37 -1 (const int) 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -85,14 +85,14 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? 1 (const int) +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 +0:39 Constant: +0:39 1 (const int) +0:39 0 (const int) +0:39 1 (const int) 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -100,14 +100,14 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 +0:40 Constant: +0:40 1 (const int) +0:40 1 (const int) +0:40 1 (const int) 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -115,14 +115,14 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? -1 (const int) +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 +0:41 Constant: +0:41 1 (const int) +0:41 0 (const int) +0:41 -1 (const int) 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -230,12 +230,12 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 Constant: +0:35 1 (const int) +0:35 0 (const int) 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -243,12 +243,12 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:36 Constant: +0:36 0.300000 +0:36 0.400000 +0:36 Constant: +0:36 1 (const int) +0:36 1 (const int) 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -256,12 +256,12 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:37 Constant: +0:37 0.500000 +0:37 0.600000 +0:37 Constant: +0:37 1 (const int) +0:37 -1 (const int) 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -269,14 +269,14 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? 1 (const int) +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 +0:39 Constant: +0:39 1 (const int) +0:39 0 (const int) +0:39 1 (const int) 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -284,14 +284,14 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 +0:40 Constant: +0:40 1 (const int) +0:40 1 (const int) +0:40 1 (const int) 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -299,14 +299,14 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? -1 (const int) +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 +0:41 Constant: +0:41 1 (const int) +0:41 0 (const int) +0:41 -1 (const int) 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out index 4d53975b9d..5b14c657ad 100644 --- a/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.sample.offsetarray.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:23 Construct combined texture-sampler ( temp sampler1DArray) 0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:23 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:23 Constant: +0:23 0.100000 +0:23 0.200000 0:23 Constant: 0:23 0 (const int) 0:24 Sequence @@ -25,9 +25,9 @@ using depth_any 0:24 Construct combined texture-sampler ( temp isampler1DArray) 0:24 'g_tTex1di4' ( uniform itexture1DArray) 0:24 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:24 Constant: +0:24 0.200000 +0:24 0.300000 0:24 Constant: 0:24 1 (const int) 0:25 Sequence @@ -37,9 +37,9 @@ using depth_any 0:25 Construct combined texture-sampler ( temp usampler1DArray) 0:25 'g_tTex1du4' ( uniform utexture1DArray) 0:25 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:25 Constant: +0:25 0.300000 +0:25 0.400000 0:25 Constant: 0:25 2 (const int) 0:27 Sequence @@ -49,13 +49,13 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler2DArray) 0:27 'g_tTex2df4' ( uniform texture2DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:27 Constant: +0:27 0.100000 +0:27 0.200000 +0:27 0.300000 +0:27 Constant: +0:27 0 (const int) +0:27 0 (const int) 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval21' ( temp 4-component vector of int) @@ -63,13 +63,13 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler2DArray) 0:28 'g_tTex2di4' ( uniform itexture2DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:28 Constant: +0:28 0.300000 +0:28 0.400000 +0:28 0.500000 +0:28 Constant: +0:28 0 (const int) +0:28 0 (const int) 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval22' ( temp 4-component vector of uint) @@ -77,13 +77,13 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler2DArray) 0:29 'g_tTex2du4' ( uniform utexture2DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) +0:29 Constant: +0:29 0.500000 +0:29 0.600000 +0:29 0.700000 +0:29 Constant: +0:29 0 (const int) +0:29 1 (const int) 0:33 move second child to first child ( temp 4-component vector of float) 0:33 Color: direct index for structure ( temp 4-component vector of float) 0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -152,9 +152,9 @@ using depth_any 0:23 Construct combined texture-sampler ( temp sampler1DArray) 0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:23 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:23 Constant: +0:23 0.100000 +0:23 0.200000 0:23 Constant: 0:23 0 (const int) 0:24 Sequence @@ -164,9 +164,9 @@ using depth_any 0:24 Construct combined texture-sampler ( temp isampler1DArray) 0:24 'g_tTex1di4' ( uniform itexture1DArray) 0:24 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:24 Constant: +0:24 0.200000 +0:24 0.300000 0:24 Constant: 0:24 1 (const int) 0:25 Sequence @@ -176,9 +176,9 @@ using depth_any 0:25 Construct combined texture-sampler ( temp usampler1DArray) 0:25 'g_tTex1du4' ( uniform utexture1DArray) 0:25 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:25 Constant: +0:25 0.300000 +0:25 0.400000 0:25 Constant: 0:25 2 (const int) 0:27 Sequence @@ -188,13 +188,13 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler2DArray) 0:27 'g_tTex2df4' ( uniform texture2DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:27 Constant: +0:27 0.100000 +0:27 0.200000 +0:27 0.300000 +0:27 Constant: +0:27 0 (const int) +0:27 0 (const int) 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval21' ( temp 4-component vector of int) @@ -202,13 +202,13 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler2DArray) 0:28 'g_tTex2di4' ( uniform itexture2DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:28 Constant: +0:28 0.300000 +0:28 0.400000 +0:28 0.500000 +0:28 Constant: +0:28 0 (const int) +0:28 0 (const int) 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval22' ( temp 4-component vector of uint) @@ -216,13 +216,13 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler2DArray) 0:29 'g_tTex2du4' ( uniform utexture2DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) +0:29 Constant: +0:29 0.500000 +0:29 0.600000 +0:29 0.700000 +0:29 Constant: +0:29 0 (const int) +0:29 1 (const int) 0:33 move second child to first child ( temp 4-component vector of float) 0:33 Color: direct index for structure ( temp 4-component vector of float) 0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out index 79901963a5..e177d77b2b 100644 --- a/Test/baseResults/hlsl.samplebias.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.array.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:27 Constant: 0:27 0.500000 0:28 Sequence @@ -25,9 +25,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:28 Constant: +0:28 0.200000 +0:28 0.300000 0:28 Constant: 0:28 0.500000 0:29 Sequence @@ -37,9 +37,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:29 Constant: +0:29 0.300000 +0:29 0.400000 0:29 Constant: 0:29 0.500000 0:31 Sequence @@ -49,10 +49,10 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 0:31 Constant: 0:31 0.500000 0:32 Sequence @@ -62,10 +62,10 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:32 Constant: +0:32 0.300000 +0:32 0.400000 +0:32 0.500000 0:32 Constant: 0:32 0.500000 0:33 Sequence @@ -75,10 +75,10 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:33 Constant: +0:33 0.500000 +0:33 0.600000 +0:33 0.700000 0:33 Constant: 0:33 0.500000 0:35 Sequence @@ -88,11 +88,11 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 0:35 Constant: 0:35 0.500000 0:36 Sequence @@ -102,11 +102,11 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:36 Constant: +0:36 0.400000 +0:36 0.500000 +0:36 0.600000 +0:36 0.700000 0:36 Constant: 0:36 0.500000 0:37 Sequence @@ -116,11 +116,11 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? 1.000000 +0:37 Constant: +0:37 0.700000 +0:37 0.800000 +0:37 0.900000 +0:37 1.000000 0:37 Constant: 0:37 0.500000 0:39 move second child to first child ( temp 4-component vector of float) @@ -194,9 +194,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:27 Constant: 0:27 0.500000 0:28 Sequence @@ -206,9 +206,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:28 Constant: +0:28 0.200000 +0:28 0.300000 0:28 Constant: 0:28 0.500000 0:29 Sequence @@ -218,9 +218,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:29 Constant: +0:29 0.300000 +0:29 0.400000 0:29 Constant: 0:29 0.500000 0:31 Sequence @@ -230,10 +230,10 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 0:31 Constant: 0:31 0.500000 0:32 Sequence @@ -243,10 +243,10 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:32 Constant: +0:32 0.300000 +0:32 0.400000 +0:32 0.500000 0:32 Constant: 0:32 0.500000 0:33 Sequence @@ -256,10 +256,10 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:33 Constant: +0:33 0.500000 +0:33 0.600000 +0:33 0.700000 0:33 Constant: 0:33 0.500000 0:35 Sequence @@ -269,11 +269,11 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 0:35 Constant: 0:35 0.500000 0:36 Sequence @@ -283,11 +283,11 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:36 Constant: +0:36 0.400000 +0:36 0.500000 +0:36 0.600000 +0:36 0.700000 0:36 Constant: 0:36 0.500000 0:37 Sequence @@ -297,11 +297,11 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? 1.000000 +0:37 Constant: +0:37 0.700000 +0:37 0.800000 +0:37 0.900000 +0:37 1.000000 0:37 Constant: 0:37 0.500000 0:39 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out index b318306e07..2f15b42b3b 100644 --- a/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.basic.dx10.frag.out @@ -46,9 +46,9 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 0:35 Constant: 0:35 0.500000 0:36 Sequence @@ -58,9 +58,9 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:36 Constant: +0:36 0.300000 +0:36 0.400000 0:36 Constant: 0:36 0.500000 0:37 Sequence @@ -70,9 +70,9 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:37 Constant: +0:37 0.500000 +0:37 0.600000 0:37 Constant: 0:37 0.500000 0:39 Sequence @@ -82,10 +82,10 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 0:39 Constant: 0:39 0.500000 0:40 Sequence @@ -95,10 +95,10 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 0:40 Constant: 0:40 0.500000 0:41 Sequence @@ -108,10 +108,10 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 0:41 Constant: 0:41 0.500000 0:43 Sequence @@ -121,10 +121,10 @@ using depth_any 0:43 Construct combined texture-sampler ( temp samplerCube) 0:43 'g_tTexcdf4' ( uniform textureCube) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 +0:43 0.300000 0:43 Constant: 0:43 0.500000 0:44 Sequence @@ -134,10 +134,10 @@ using depth_any 0:44 Construct combined texture-sampler ( temp isamplerCube) 0:44 'g_tTexcdi4' ( uniform itextureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:44 Constant: +0:44 0.400000 +0:44 0.500000 +0:44 0.600000 0:44 Constant: 0:44 0.500000 0:45 Sequence @@ -147,10 +147,10 @@ using depth_any 0:45 Construct combined texture-sampler ( temp usamplerCube) 0:45 'g_tTexcdu4' ( uniform utextureCube) 0:45 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:45 Constant: +0:45 0.700000 +0:45 0.800000 +0:45 0.900000 0:45 Constant: 0:45 0.500000 0:47 move second child to first child ( temp 4-component vector of float) @@ -260,9 +260,9 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 0:35 Constant: 0:35 0.500000 0:36 Sequence @@ -272,9 +272,9 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:36 Constant: +0:36 0.300000 +0:36 0.400000 0:36 Constant: 0:36 0.500000 0:37 Sequence @@ -284,9 +284,9 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:37 Constant: +0:37 0.500000 +0:37 0.600000 0:37 Constant: 0:37 0.500000 0:39 Sequence @@ -296,10 +296,10 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 0:39 Constant: 0:39 0.500000 0:40 Sequence @@ -309,10 +309,10 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 0:40 Constant: 0:40 0.500000 0:41 Sequence @@ -322,10 +322,10 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 0:41 Constant: 0:41 0.500000 0:43 Sequence @@ -335,10 +335,10 @@ using depth_any 0:43 Construct combined texture-sampler ( temp samplerCube) 0:43 'g_tTexcdf4' ( uniform textureCube) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 +0:43 0.300000 0:43 Constant: 0:43 0.500000 0:44 Sequence @@ -348,10 +348,10 @@ using depth_any 0:44 Construct combined texture-sampler ( temp isamplerCube) 0:44 'g_tTexcdi4' ( uniform itextureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:44 Constant: +0:44 0.400000 +0:44 0.500000 +0:44 0.600000 0:44 Constant: 0:44 0.500000 0:45 Sequence @@ -361,10 +361,10 @@ using depth_any 0:45 Construct combined texture-sampler ( temp usamplerCube) 0:45 'g_tTexcdu4' ( uniform utextureCube) 0:45 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:45 Constant: +0:45 0.700000 +0:45 0.800000 +0:45 0.900000 0:45 Constant: 0:45 0.500000 0:47 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out index 0e073ee738..478091db57 100644 --- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out @@ -52,14 +52,14 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 0:35 Constant: 0:35 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 0 (const int) 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -67,14 +67,14 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:36 Constant: +0:36 0.300000 +0:36 0.400000 0:36 Constant: 0:36 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:36 Constant: +0:36 1 (const int) +0:36 1 (const int) 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -82,14 +82,14 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 0:37 Constant: 0:37 0.500000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:37 0.600000 +0:37 Constant: +0:37 0.500000 +0:37 Constant: +0:37 1 (const int) +0:37 -1 (const int) 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -97,16 +97,16 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 0:39 Constant: 0:39 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? 1 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 0 (const int) +0:39 1 (const int) 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -114,16 +114,16 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 0:40 Constant: 0:40 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 1 (const int) +0:40 1 (const int) 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -131,16 +131,16 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 0:41 Constant: 0:41 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? -1 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 0 (const int) +0:41 -1 (const int) 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -254,14 +254,14 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 0:35 Constant: 0:35 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 0 (const int) 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -269,14 +269,14 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:36 Constant: +0:36 0.300000 +0:36 0.400000 0:36 Constant: 0:36 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:36 Constant: +0:36 1 (const int) +0:36 1 (const int) 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -284,14 +284,14 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 0:37 Constant: 0:37 0.500000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:37 0.600000 +0:37 Constant: +0:37 0.500000 +0:37 Constant: +0:37 1 (const int) +0:37 -1 (const int) 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -299,16 +299,16 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 0:39 Constant: 0:39 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? 1 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 0 (const int) +0:39 1 (const int) 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -316,16 +316,16 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 0:40 Constant: 0:40 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 1 (const int) +0:40 1 (const int) 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -333,16 +333,16 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 0:41 Constant: 0:41 0.500000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? -1 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 0 (const int) +0:41 -1 (const int) 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out index 6225c4520a..f5aff67f01 100644 --- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:23 Construct combined texture-sampler ( temp sampler1DArray) 0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:23 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:23 Constant: +0:23 0.100000 +0:23 0.200000 0:23 Constant: 0:23 0.500000 0:23 Constant: @@ -27,9 +27,9 @@ using depth_any 0:24 Construct combined texture-sampler ( temp isampler1DArray) 0:24 'g_tTex1di4' ( uniform itexture1DArray) 0:24 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:24 Constant: +0:24 0.200000 +0:24 0.300000 0:24 Constant: 0:24 0.500000 0:24 Constant: @@ -41,9 +41,9 @@ using depth_any 0:25 Construct combined texture-sampler ( temp usampler1DArray) 0:25 'g_tTex1du4' ( uniform utexture1DArray) 0:25 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:25 Constant: +0:25 0.300000 +0:25 0.400000 0:25 Constant: 0:25 0.500000 0:25 Constant: @@ -55,15 +55,15 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler2DArray) 0:27 'g_tTex2df4' ( uniform texture2DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 +0:27 0.300000 0:27 Constant: 0:27 0.500000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:27 Constant: +0:27 0 (const int) +0:27 0 (const int) 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval21' ( temp 4-component vector of int) @@ -71,15 +71,15 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler2DArray) 0:28 'g_tTex2di4' ( uniform itexture2DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 0:28 Constant: +0:28 0.300000 +0:28 0.400000 0:28 0.500000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:28 Constant: +0:28 0.500000 +0:28 Constant: +0:28 0 (const int) +0:28 0 (const int) 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval22' ( temp 4-component vector of uint) @@ -87,15 +87,15 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler2DArray) 0:29 'g_tTex2du4' ( uniform utexture2DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 0:29 Constant: 0:29 0.500000 -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) +0:29 0.600000 +0:29 0.700000 +0:29 Constant: +0:29 0.500000 +0:29 Constant: +0:29 0 (const int) +0:29 1 (const int) 0:33 move second child to first child ( temp 4-component vector of float) 0:33 Color: direct index for structure ( temp 4-component vector of float) 0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -164,9 +164,9 @@ using depth_any 0:23 Construct combined texture-sampler ( temp sampler1DArray) 0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:23 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:23 Constant: +0:23 0.100000 +0:23 0.200000 0:23 Constant: 0:23 0.500000 0:23 Constant: @@ -178,9 +178,9 @@ using depth_any 0:24 Construct combined texture-sampler ( temp isampler1DArray) 0:24 'g_tTex1di4' ( uniform itexture1DArray) 0:24 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:24 Constant: +0:24 0.200000 +0:24 0.300000 0:24 Constant: 0:24 0.500000 0:24 Constant: @@ -192,9 +192,9 @@ using depth_any 0:25 Construct combined texture-sampler ( temp usampler1DArray) 0:25 'g_tTex1du4' ( uniform utexture1DArray) 0:25 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:25 Constant: +0:25 0.300000 +0:25 0.400000 0:25 Constant: 0:25 0.500000 0:25 Constant: @@ -206,15 +206,15 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler2DArray) 0:27 'g_tTex2df4' ( uniform texture2DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 +0:27 0.300000 0:27 Constant: 0:27 0.500000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:27 Constant: +0:27 0 (const int) +0:27 0 (const int) 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval21' ( temp 4-component vector of int) @@ -222,15 +222,15 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler2DArray) 0:28 'g_tTex2di4' ( uniform itexture2DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 0:28 Constant: +0:28 0.300000 +0:28 0.400000 0:28 0.500000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:28 Constant: +0:28 0.500000 +0:28 Constant: +0:28 0 (const int) +0:28 0 (const int) 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval22' ( temp 4-component vector of uint) @@ -238,15 +238,15 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler2DArray) 0:29 'g_tTex2du4' ( uniform utexture2DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 0:29 Constant: 0:29 0.500000 -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) +0:29 0.600000 +0:29 0.700000 +0:29 Constant: +0:29 0.500000 +0:29 Constant: +0:29 0 (const int) +0:29 1 (const int) 0:33 move second child to first child ( temp 4-component vector of float) 0:33 Color: direct index for structure ( temp 4-component vector of float) 0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out index b1c1d6d297..0ab61eba70 100644 --- a/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmp.array.dx10.frag.out @@ -14,9 +14,9 @@ using depth_any 0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) 0:42 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 0:42 Constant: 0:42 0.750000 0:43 Sequence @@ -27,9 +27,9 @@ using depth_any 0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) 0:43 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 0:43 Constant: 0:43 0.750000 0:44 Sequence @@ -40,9 +40,9 @@ using depth_any 0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) 0:44 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 0:44 Constant: 0:44 0.750000 0:47 Sequence @@ -53,10 +53,10 @@ using depth_any 0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 +0:47 0.300000 0:47 Constant: 0:47 0.750000 0:48 Sequence @@ -67,10 +67,10 @@ using depth_any 0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 +0:48 0.300000 0:48 Constant: 0:48 0.750000 0:49 Sequence @@ -81,10 +81,10 @@ using depth_any 0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 +0:49 0.300000 0:49 Constant: 0:49 0.750000 0:52 Sequence @@ -95,11 +95,11 @@ using depth_any 0:52 'g_tTexcdf4a' ( uniform textureCubeArrayShadow) 0:52 'g_sSamp' (layout( binding=0) uniform sampler) 0:52 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:52 Constant: +0:52 0.100000 +0:52 0.200000 +0:52 0.300000 +0:52 0.400000 0:52 Constant: 0:52 0.750000 0:53 Sequence @@ -110,11 +110,11 @@ using depth_any 0:53 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow) 0:53 'g_sSamp' (layout( binding=0) uniform sampler) 0:53 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:53 Constant: +0:53 0.100000 +0:53 0.200000 +0:53 0.300000 +0:53 0.400000 0:53 Constant: 0:53 0.750000 0:54 Sequence @@ -125,11 +125,11 @@ using depth_any 0:54 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow) 0:54 'g_sSamp' (layout( binding=0) uniform sampler) 0:54 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:54 Constant: +0:54 0.100000 +0:54 0.200000 +0:54 0.300000 +0:54 0.400000 0:54 Constant: 0:54 0.750000 0:56 move second child to first child ( temp 4-component vector of float) @@ -215,9 +215,9 @@ using depth_any 0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) 0:42 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 0:42 Constant: 0:42 0.750000 0:43 Sequence @@ -228,9 +228,9 @@ using depth_any 0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) 0:43 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 0:43 Constant: 0:43 0.750000 0:44 Sequence @@ -241,9 +241,9 @@ using depth_any 0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) 0:44 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 0:44 Constant: 0:44 0.750000 0:47 Sequence @@ -254,10 +254,10 @@ using depth_any 0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 +0:47 0.300000 0:47 Constant: 0:47 0.750000 0:48 Sequence @@ -268,10 +268,10 @@ using depth_any 0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 +0:48 0.300000 0:48 Constant: 0:48 0.750000 0:49 Sequence @@ -282,10 +282,10 @@ using depth_any 0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 +0:49 0.300000 0:49 Constant: 0:49 0.750000 0:52 Sequence @@ -296,11 +296,11 @@ using depth_any 0:52 'g_tTexcdf4a' ( uniform textureCubeArrayShadow) 0:52 'g_sSamp' (layout( binding=0) uniform sampler) 0:52 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:52 Constant: +0:52 0.100000 +0:52 0.200000 +0:52 0.300000 +0:52 0.400000 0:52 Constant: 0:52 0.750000 0:53 Sequence @@ -311,11 +311,11 @@ using depth_any 0:53 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow) 0:53 'g_sSamp' (layout( binding=0) uniform sampler) 0:53 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:53 Constant: +0:53 0.100000 +0:53 0.200000 +0:53 0.300000 +0:53 0.400000 0:53 Constant: 0:53 0.750000 0:54 Sequence @@ -326,11 +326,11 @@ using depth_any 0:54 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow) 0:54 'g_sSamp' (layout( binding=0) uniform sampler) 0:54 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:54 Constant: +0:54 0.100000 +0:54 0.200000 +0:54 0.300000 +0:54 0.400000 0:54 Constant: 0:54 0.750000 0:56 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out index e3d5b9303c..c178c571fc 100644 --- a/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmp.basic.dx10.frag.out @@ -50,9 +50,9 @@ using depth_any 0:47 'g_tTex2df4' ( uniform texture2DShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 0:47 Constant: 0:47 0.750000 0:48 Sequence @@ -63,9 +63,9 @@ using depth_any 0:48 'g_tTex2di4' ( uniform itexture2DShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 0:48 Constant: 0:48 0.750000 0:49 Sequence @@ -76,9 +76,9 @@ using depth_any 0:49 'g_tTex2du4' ( uniform utexture2DShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 0:49 Constant: 0:49 0.750000 0:53 Sequence @@ -89,10 +89,10 @@ using depth_any 0:53 'g_tTexcdf4' ( uniform textureCubeShadow) 0:53 'g_sSamp' (layout( binding=0) uniform sampler) 0:53 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:53 Constant: +0:53 0.100000 +0:53 0.200000 +0:53 0.300000 0:53 Constant: 0:53 0.750000 0:54 Sequence @@ -103,10 +103,10 @@ using depth_any 0:54 'g_tTexcdi4' ( uniform itextureCubeShadow) 0:54 'g_sSamp' (layout( binding=0) uniform sampler) 0:54 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:54 Constant: +0:54 0.100000 +0:54 0.200000 +0:54 0.300000 0:54 Constant: 0:54 0.750000 0:55 Sequence @@ -117,10 +117,10 @@ using depth_any 0:55 'g_tTexcdu4' ( uniform utextureCubeShadow) 0:55 'g_sSamp' (layout( binding=0) uniform sampler) 0:55 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:55 Constant: +0:55 0.100000 +0:55 0.200000 +0:55 0.300000 0:55 Constant: 0:55 0.750000 0:57 move second child to first child ( temp 4-component vector of float) @@ -242,9 +242,9 @@ using depth_any 0:47 'g_tTex2df4' ( uniform texture2DShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 0:47 Constant: 0:47 0.750000 0:48 Sequence @@ -255,9 +255,9 @@ using depth_any 0:48 'g_tTex2di4' ( uniform itexture2DShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 0:48 Constant: 0:48 0.750000 0:49 Sequence @@ -268,9 +268,9 @@ using depth_any 0:49 'g_tTex2du4' ( uniform utexture2DShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 0:49 Constant: 0:49 0.750000 0:53 Sequence @@ -281,10 +281,10 @@ using depth_any 0:53 'g_tTexcdf4' ( uniform textureCubeShadow) 0:53 'g_sSamp' (layout( binding=0) uniform sampler) 0:53 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:53 Constant: +0:53 0.100000 +0:53 0.200000 +0:53 0.300000 0:53 Constant: 0:53 0.750000 0:54 Sequence @@ -295,10 +295,10 @@ using depth_any 0:54 'g_tTexcdi4' ( uniform itextureCubeShadow) 0:54 'g_sSamp' (layout( binding=0) uniform sampler) 0:54 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:54 Constant: +0:54 0.100000 +0:54 0.200000 +0:54 0.300000 0:54 Constant: 0:54 0.750000 0:55 Sequence @@ -309,10 +309,10 @@ using depth_any 0:55 'g_tTexcdu4' ( uniform utextureCubeShadow) 0:55 'g_sSamp' (layout( binding=0) uniform sampler) 0:55 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:55 Constant: +0:55 0.100000 +0:55 0.200000 +0:55 0.300000 0:55 Constant: 0:55 0.750000 0:57 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.samplecmp.negative.frag.out b/Test/baseResults/hlsl.samplecmp.negative.frag.out index 65a69e8f10..37a324bef5 100644 --- a/Test/baseResults/hlsl.samplecmp.negative.frag.out +++ b/Test/baseResults/hlsl.samplecmp.negative.frag.out @@ -14,18 +14,18 @@ ERROR: node is still EOpNull! 0:9 'g_shadowTex' ( uniform texture2DShadow) 0:9 'g_shadowSamplerComp' ( uniform sampler) 0:9 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:9 Constant: +0:9 0.000000 +0:9 0.000000 0:9 Constant: 0:9 0.000000 0:10 ERROR: Bad aggregation op ( temp float) 0:10 'g_nonShadowTex' ( uniform texture2D) 0:10 'g_shadowSampler' ( uniform sampler) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:10 Constant: +0:10 0.000000 +0:10 0.000000 0:10 Constant: 0:10 0.000000 0:12 Branch: Return with expression @@ -62,18 +62,18 @@ ERROR: node is still EOpNull! 0:9 'g_shadowTex' ( uniform texture2DShadow) 0:9 'g_shadowSamplerComp' ( uniform sampler) 0:9 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:9 Constant: +0:9 0.000000 +0:9 0.000000 0:9 Constant: 0:9 0.000000 0:10 ERROR: Bad aggregation op ( temp float) 0:10 'g_nonShadowTex' ( uniform texture2D) 0:10 'g_shadowSampler' ( uniform sampler) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:10 Constant: +0:10 0.000000 +0:10 0.000000 0:10 Constant: 0:10 0.000000 0:12 Branch: Return with expression diff --git a/Test/baseResults/hlsl.samplecmp.negative2.frag.out b/Test/baseResults/hlsl.samplecmp.negative2.frag.out index 996b3f8704..893a6d9186 100644 --- a/Test/baseResults/hlsl.samplecmp.negative2.frag.out +++ b/Test/baseResults/hlsl.samplecmp.negative2.frag.out @@ -13,14 +13,14 @@ ERROR: node is still EOpNull! ( temp 4-component vector of float) 0:7 'g_shadowTex' ( uniform texture2D) 0:7 'g_shadowSampler' ( uniform sampler) -0:? Constant: -0:? 0.000000 -0:? 0.000000 0:7 Constant: 0:7 0.000000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:7 0.000000 +0:7 Constant: +0:7 0.000000 +0:7 Constant: +0:7 0 (const int) +0:7 0 (const int) 0:9 Branch: Return with expression 0:9 Constant: 0:9 0.000000 @@ -52,14 +52,14 @@ ERROR: node is still EOpNull! ( temp 4-component vector of float) 0:7 'g_shadowTex' ( uniform texture2D) 0:7 'g_shadowSampler' ( uniform sampler) -0:? Constant: -0:? 0.000000 -0:? 0.000000 0:7 Constant: 0:7 0.000000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:7 0.000000 +0:7 Constant: +0:7 0.000000 +0:7 Constant: +0:7 0 (const int) +0:7 0 (const int) 0:9 Branch: Return with expression 0:9 Constant: 0:9 0.000000 diff --git a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out index aaa2b744a6..1e50d7bbb3 100644 --- a/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmp.offset.dx10.frag.out @@ -56,14 +56,14 @@ using depth_any 0:47 'g_tTex2df4' ( uniform texture2DShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 0:47 Constant: 0:47 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:47 Constant: +0:47 2 (const int) +0:47 3 (const int) 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'r23' ( temp float) @@ -72,14 +72,14 @@ using depth_any 0:48 'g_tTex2di4' ( uniform itexture2DShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 0:48 Constant: 0:48 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:48 Constant: +0:48 2 (const int) +0:48 3 (const int) 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'r25' ( temp float) @@ -88,14 +88,14 @@ using depth_any 0:49 'g_tTex2du4' ( uniform utexture2DShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 0:49 Constant: 0:49 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 3 (const int) 0:62 move second child to first child ( temp 4-component vector of float) 0:62 Color: direct index for structure ( temp 4-component vector of float) 0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -221,14 +221,14 @@ using depth_any 0:47 'g_tTex2df4' ( uniform texture2DShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 0:47 Constant: 0:47 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:47 Constant: +0:47 2 (const int) +0:47 3 (const int) 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'r23' ( temp float) @@ -237,14 +237,14 @@ using depth_any 0:48 'g_tTex2di4' ( uniform itexture2DShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 0:48 Constant: 0:48 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:48 Constant: +0:48 2 (const int) +0:48 3 (const int) 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'r25' ( temp float) @@ -253,14 +253,14 @@ using depth_any 0:49 'g_tTex2du4' ( uniform utexture2DShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 0:49 Constant: 0:49 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 3 (const int) 0:62 move second child to first child ( temp 4-component vector of float) 0:62 Color: direct index for structure ( temp 4-component vector of float) 0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out index 501f4c0cc0..3b1eb6f67c 100644 --- a/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmp.offsetarray.dx10.frag.out @@ -14,9 +14,9 @@ using depth_any 0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) 0:42 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 0:42 Constant: 0:42 0.750000 0:42 Constant: @@ -29,9 +29,9 @@ using depth_any 0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) 0:43 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 0:43 Constant: 0:43 0.750000 0:43 Constant: @@ -44,9 +44,9 @@ using depth_any 0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) 0:44 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 0:44 Constant: 0:44 0.750000 0:44 Constant: @@ -59,15 +59,15 @@ using depth_any 0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 +0:47 0.300000 0:47 Constant: 0:47 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:47 Constant: +0:47 2 (const int) +0:47 3 (const int) 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'r33' ( temp float) @@ -76,15 +76,15 @@ using depth_any 0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 +0:48 0.300000 0:48 Constant: 0:48 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:48 Constant: +0:48 2 (const int) +0:48 3 (const int) 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'r35' ( temp float) @@ -93,15 +93,15 @@ using depth_any 0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 +0:49 0.300000 0:49 Constant: 0:49 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 3 (const int) 0:63 move second child to first child ( temp 4-component vector of float) 0:63 Color: direct index for structure ( temp 4-component vector of float) 0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -185,9 +185,9 @@ using depth_any 0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) 0:42 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 0:42 Constant: 0:42 0.750000 0:42 Constant: @@ -200,9 +200,9 @@ using depth_any 0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) 0:43 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 0:43 Constant: 0:43 0.750000 0:43 Constant: @@ -215,9 +215,9 @@ using depth_any 0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) 0:44 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 0:44 Constant: 0:44 0.750000 0:44 Constant: @@ -230,15 +230,15 @@ using depth_any 0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 +0:47 0.300000 0:47 Constant: 0:47 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:47 Constant: +0:47 2 (const int) +0:47 3 (const int) 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'r33' ( temp float) @@ -247,15 +247,15 @@ using depth_any 0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 +0:48 0.300000 0:48 Constant: 0:48 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:48 Constant: +0:48 2 (const int) +0:48 3 (const int) 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'r35' ( temp float) @@ -264,15 +264,15 @@ using depth_any 0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 +0:49 0.300000 0:49 Constant: 0:49 0.750000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 3 (const int) 0:63 move second child to first child ( temp 4-component vector of float) 0:63 Color: direct index for structure ( temp 4-component vector of float) 0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out index ecfeb1bc1f..a734e5440e 100644 --- a/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmplevelzero.array.dx10.frag.out @@ -14,9 +14,9 @@ using depth_any 0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) 0:42 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 0:42 Constant: 0:42 0.750000 0:42 Constant: @@ -29,9 +29,9 @@ using depth_any 0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) 0:43 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 0:43 Constant: 0:43 0.750000 0:43 Constant: @@ -44,9 +44,9 @@ using depth_any 0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) 0:44 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 0:44 Constant: 0:44 0.750000 0:44 Constant: @@ -59,10 +59,10 @@ using depth_any 0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 +0:47 0.300000 0:47 Constant: 0:47 0.750000 0:47 Constant: @@ -75,10 +75,10 @@ using depth_any 0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 +0:48 0.300000 0:48 Constant: 0:48 0.750000 0:48 Constant: @@ -91,10 +91,10 @@ using depth_any 0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 +0:49 0.300000 0:49 Constant: 0:49 0.750000 0:49 Constant: @@ -107,11 +107,11 @@ using depth_any 0:52 'g_tTexcdf4a' ( uniform textureCubeArrayShadow) 0:52 'g_sSamp' (layout( binding=0) uniform sampler) 0:52 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:52 Constant: +0:52 0.100000 +0:52 0.200000 +0:52 0.300000 +0:52 0.400000 0:52 Constant: 0:52 0.750000 0:52 Constant: @@ -124,11 +124,11 @@ using depth_any 0:53 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow) 0:53 'g_sSamp' (layout( binding=0) uniform sampler) 0:53 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:53 Constant: +0:53 0.100000 +0:53 0.200000 +0:53 0.300000 +0:53 0.400000 0:53 Constant: 0:53 0.750000 0:53 Constant: @@ -141,11 +141,11 @@ using depth_any 0:54 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow) 0:54 'g_sSamp' (layout( binding=0) uniform sampler) 0:54 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:54 Constant: +0:54 0.100000 +0:54 0.200000 +0:54 0.300000 +0:54 0.400000 0:54 Constant: 0:54 0.750000 0:54 Constant: @@ -233,9 +233,9 @@ using depth_any 0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) 0:42 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 0:42 Constant: 0:42 0.750000 0:42 Constant: @@ -248,9 +248,9 @@ using depth_any 0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) 0:43 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 0:43 Constant: 0:43 0.750000 0:43 Constant: @@ -263,9 +263,9 @@ using depth_any 0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) 0:44 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 0:44 Constant: 0:44 0.750000 0:44 Constant: @@ -278,10 +278,10 @@ using depth_any 0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 +0:47 0.300000 0:47 Constant: 0:47 0.750000 0:47 Constant: @@ -294,10 +294,10 @@ using depth_any 0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 +0:48 0.300000 0:48 Constant: 0:48 0.750000 0:48 Constant: @@ -310,10 +310,10 @@ using depth_any 0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 +0:49 0.300000 0:49 Constant: 0:49 0.750000 0:49 Constant: @@ -326,11 +326,11 @@ using depth_any 0:52 'g_tTexcdf4a' ( uniform textureCubeArrayShadow) 0:52 'g_sSamp' (layout( binding=0) uniform sampler) 0:52 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:52 Constant: +0:52 0.100000 +0:52 0.200000 +0:52 0.300000 +0:52 0.400000 0:52 Constant: 0:52 0.750000 0:52 Constant: @@ -343,11 +343,11 @@ using depth_any 0:53 'g_tTexcdi4a' ( uniform itextureCubeArrayShadow) 0:53 'g_sSamp' (layout( binding=0) uniform sampler) 0:53 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:53 Constant: +0:53 0.100000 +0:53 0.200000 +0:53 0.300000 +0:53 0.400000 0:53 Constant: 0:53 0.750000 0:53 Constant: @@ -360,11 +360,11 @@ using depth_any 0:54 'g_tTexcdu4a' ( uniform utextureCubeArrayShadow) 0:54 'g_sSamp' (layout( binding=0) uniform sampler) 0:54 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:54 Constant: +0:54 0.100000 +0:54 0.200000 +0:54 0.300000 +0:54 0.400000 0:54 Constant: 0:54 0.750000 0:54 Constant: diff --git a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out index c852c9ff6f..54135cdb5f 100644 --- a/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmplevelzero.basic.dx10.frag.out @@ -56,9 +56,9 @@ using depth_any 0:47 'g_tTex2df4' ( uniform texture2DShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 0:47 Constant: 0:47 0.750000 0:47 Constant: @@ -71,9 +71,9 @@ using depth_any 0:48 'g_tTex2di4' ( uniform itexture2DShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 0:48 Constant: 0:48 0.750000 0:48 Constant: @@ -86,9 +86,9 @@ using depth_any 0:49 'g_tTex2du4' ( uniform utexture2DShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 0:49 Constant: 0:49 0.750000 0:49 Constant: @@ -101,10 +101,10 @@ using depth_any 0:53 'g_tTexcdf4' ( uniform textureCubeShadow) 0:53 'g_sSamp' (layout( binding=0) uniform sampler) 0:53 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:53 Constant: +0:53 0.100000 +0:53 0.200000 +0:53 0.300000 0:53 Constant: 0:53 0.750000 0:53 Constant: @@ -117,10 +117,10 @@ using depth_any 0:54 'g_tTexcdi4' ( uniform itextureCubeShadow) 0:54 'g_sSamp' (layout( binding=0) uniform sampler) 0:54 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:54 Constant: +0:54 0.100000 +0:54 0.200000 +0:54 0.300000 0:54 Constant: 0:54 0.750000 0:54 Constant: @@ -133,10 +133,10 @@ using depth_any 0:55 'g_tTexcdu4' ( uniform utextureCubeShadow) 0:55 'g_sSamp' (layout( binding=0) uniform sampler) 0:55 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:55 Constant: +0:55 0.100000 +0:55 0.200000 +0:55 0.300000 0:55 Constant: 0:55 0.750000 0:55 Constant: @@ -266,9 +266,9 @@ using depth_any 0:47 'g_tTex2df4' ( uniform texture2DShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 0:47 Constant: 0:47 0.750000 0:47 Constant: @@ -281,9 +281,9 @@ using depth_any 0:48 'g_tTex2di4' ( uniform itexture2DShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 0:48 Constant: 0:48 0.750000 0:48 Constant: @@ -296,9 +296,9 @@ using depth_any 0:49 'g_tTex2du4' ( uniform utexture2DShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 0:49 Constant: 0:49 0.750000 0:49 Constant: @@ -311,10 +311,10 @@ using depth_any 0:53 'g_tTexcdf4' ( uniform textureCubeShadow) 0:53 'g_sSamp' (layout( binding=0) uniform sampler) 0:53 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:53 Constant: +0:53 0.100000 +0:53 0.200000 +0:53 0.300000 0:53 Constant: 0:53 0.750000 0:53 Constant: @@ -327,10 +327,10 @@ using depth_any 0:54 'g_tTexcdi4' ( uniform itextureCubeShadow) 0:54 'g_sSamp' (layout( binding=0) uniform sampler) 0:54 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:54 Constant: +0:54 0.100000 +0:54 0.200000 +0:54 0.300000 0:54 Constant: 0:54 0.750000 0:54 Constant: @@ -343,10 +343,10 @@ using depth_any 0:55 'g_tTexcdu4' ( uniform utextureCubeShadow) 0:55 'g_sSamp' (layout( binding=0) uniform sampler) 0:55 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:55 Constant: +0:55 0.100000 +0:55 0.200000 +0:55 0.300000 0:55 Constant: 0:55 0.750000 0:55 Constant: diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out index 95c5c61ecd..4922cdedbe 100644 --- a/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmplevelzero.offset.dx10.frag.out @@ -62,16 +62,16 @@ using depth_any 0:47 'g_tTex2df4' ( uniform texture2DShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 0:47 Constant: 0:47 0.750000 0:47 Constant: 0:47 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:47 Constant: +0:47 2 (const int) +0:47 3 (const int) 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'r23' ( temp float) @@ -80,16 +80,16 @@ using depth_any 0:48 'g_tTex2di4' ( uniform itexture2DShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 0:48 Constant: 0:48 0.750000 0:48 Constant: 0:48 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:48 Constant: +0:48 2 (const int) +0:48 3 (const int) 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'r25' ( temp float) @@ -98,16 +98,16 @@ using depth_any 0:49 'g_tTex2du4' ( uniform utexture2DShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 0:49 Constant: 0:49 0.750000 0:49 Constant: 0:49 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 3 (const int) 0:62 move second child to first child ( temp 4-component vector of float) 0:62 Color: direct index for structure ( temp 4-component vector of float) 0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -239,16 +239,16 @@ using depth_any 0:47 'g_tTex2df4' ( uniform texture2DShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 0:47 Constant: 0:47 0.750000 0:47 Constant: 0:47 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:47 Constant: +0:47 2 (const int) +0:47 3 (const int) 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'r23' ( temp float) @@ -257,16 +257,16 @@ using depth_any 0:48 'g_tTex2di4' ( uniform itexture2DShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 0:48 Constant: 0:48 0.750000 0:48 Constant: 0:48 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:48 Constant: +0:48 2 (const int) +0:48 3 (const int) 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'r25' ( temp float) @@ -275,16 +275,16 @@ using depth_any 0:49 'g_tTex2du4' ( uniform utexture2DShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 0:49 Constant: 0:49 0.750000 0:49 Constant: 0:49 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 3 (const int) 0:62 move second child to first child ( temp 4-component vector of float) 0:62 Color: direct index for structure ( temp 4-component vector of float) 0:62 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out index 89a7bbacd3..22bd25772a 100644 --- a/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplecmplevelzero.offsetarray.dx10.frag.out @@ -14,9 +14,9 @@ using depth_any 0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) 0:42 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 0:42 Constant: 0:42 0.750000 0:42 Constant: @@ -31,9 +31,9 @@ using depth_any 0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) 0:43 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 0:43 Constant: 0:43 0.750000 0:43 Constant: @@ -48,9 +48,9 @@ using depth_any 0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) 0:44 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 0:44 Constant: 0:44 0.750000 0:44 Constant: @@ -65,17 +65,17 @@ using depth_any 0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 +0:47 0.300000 0:47 Constant: 0:47 0.750000 0:47 Constant: 0:47 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:47 Constant: +0:47 2 (const int) +0:47 3 (const int) 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'r33' ( temp float) @@ -84,17 +84,17 @@ using depth_any 0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 +0:48 0.300000 0:48 Constant: 0:48 0.750000 0:48 Constant: 0:48 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:48 Constant: +0:48 2 (const int) +0:48 3 (const int) 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'r35' ( temp float) @@ -103,17 +103,17 @@ using depth_any 0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 +0:49 0.300000 0:49 Constant: 0:49 0.750000 0:49 Constant: 0:49 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 3 (const int) 0:63 move second child to first child ( temp 4-component vector of float) 0:63 Color: direct index for structure ( temp 4-component vector of float) 0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -197,9 +197,9 @@ using depth_any 0:42 'g_tTex1df4a' ( uniform texture1DArrayShadow) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) 0:42 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 0:42 Constant: 0:42 0.750000 0:42 Constant: @@ -214,9 +214,9 @@ using depth_any 0:43 'g_tTex1di4a' ( uniform itexture1DArrayShadow) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) 0:43 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 0:43 Constant: 0:43 0.750000 0:43 Constant: @@ -231,9 +231,9 @@ using depth_any 0:44 'g_tTex1du4a' ( uniform utexture1DArrayShadow) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) 0:44 Construct vec3 ( temp 3-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 0:44 Constant: 0:44 0.750000 0:44 Constant: @@ -248,17 +248,17 @@ using depth_any 0:47 'g_tTex2df4a' ( uniform texture2DArrayShadow) 0:47 'g_sSamp' (layout( binding=0) uniform sampler) 0:47 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:47 Constant: +0:47 0.100000 +0:47 0.200000 +0:47 0.300000 0:47 Constant: 0:47 0.750000 0:47 Constant: 0:47 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:47 Constant: +0:47 2 (const int) +0:47 3 (const int) 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'r33' ( temp float) @@ -267,17 +267,17 @@ using depth_any 0:48 'g_tTex2di4a' ( uniform itexture2DArrayShadow) 0:48 'g_sSamp' (layout( binding=0) uniform sampler) 0:48 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:48 Constant: +0:48 0.100000 +0:48 0.200000 +0:48 0.300000 0:48 Constant: 0:48 0.750000 0:48 Constant: 0:48 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:48 Constant: +0:48 2 (const int) +0:48 3 (const int) 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'r35' ( temp float) @@ -286,17 +286,17 @@ using depth_any 0:49 'g_tTex2du4a' ( uniform utexture2DArrayShadow) 0:49 'g_sSamp' (layout( binding=0) uniform sampler) 0:49 Construct vec4 ( temp 4-component vector of float) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:49 Constant: +0:49 0.100000 +0:49 0.200000 +0:49 0.300000 0:49 Constant: 0:49 0.750000 0:49 Constant: 0:49 0.000000 -0:? Constant: -0:? 2 (const int) -0:? 3 (const int) +0:49 Constant: +0:49 2 (const int) +0:49 3 (const int) 0:63 move second child to first child ( temp 4-component vector of float) 0:63 Color: direct index for structure ( temp 4-component vector of float) 0:63 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out index 8daeb7fcbd..67e1d15790 100644 --- a/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplegrad.array.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:27 Constant: 0:27 1.100000 0:27 Constant: @@ -27,9 +27,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:28 Constant: +0:28 0.100000 +0:28 0.200000 0:28 Constant: 0:28 1.100000 0:28 Constant: @@ -41,9 +41,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:29 Constant: +0:29 0.100000 +0:29 0.200000 0:29 Constant: 0:29 1.100000 0:29 Constant: @@ -55,16 +55,16 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 +0:31 Constant: +0:31 1.100000 +0:31 1.200000 +0:31 Constant: +0:31 1.100000 +0:31 1.200000 0:32 Sequence 0:32 move second child to first child ( temp 4-component vector of int) 0:32 'txval21' ( temp 4-component vector of int) @@ -72,16 +72,16 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:32 Constant: +0:32 0.100000 +0:32 0.200000 +0:32 0.300000 +0:32 Constant: +0:32 1.100000 +0:32 1.200000 +0:32 Constant: +0:32 1.100000 +0:32 1.200000 0:33 Sequence 0:33 move second child to first child ( temp 4-component vector of uint) 0:33 'txval22' ( temp 4-component vector of uint) @@ -89,16 +89,16 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:33 Constant: +0:33 0.100000 +0:33 0.200000 +0:33 0.300000 +0:33 Constant: +0:33 1.100000 +0:33 1.200000 +0:33 Constant: +0:33 1.100000 +0:33 1.200000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of float) 0:35 'txval40' ( temp 4-component vector of float) @@ -106,19 +106,19 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 1.300000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 1.300000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval41' ( temp 4-component vector of int) @@ -126,19 +126,19 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 +0:36 0.300000 +0:36 0.400000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 1.300000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 1.300000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval42' ( temp 4-component vector of uint) @@ -146,19 +146,19 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:37 Constant: +0:37 0.100000 +0:37 0.200000 +0:37 0.300000 +0:37 0.400000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 +0:37 1.300000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 +0:37 1.300000 0:39 move second child to first child ( temp 4-component vector of float) 0:39 Color: direct index for structure ( temp 4-component vector of float) 0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -230,9 +230,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:27 Constant: 0:27 1.100000 0:27 Constant: @@ -244,9 +244,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:28 Constant: +0:28 0.100000 +0:28 0.200000 0:28 Constant: 0:28 1.100000 0:28 Constant: @@ -258,9 +258,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:29 Constant: +0:29 0.100000 +0:29 0.200000 0:29 Constant: 0:29 1.100000 0:29 Constant: @@ -272,16 +272,16 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 +0:31 Constant: +0:31 1.100000 +0:31 1.200000 +0:31 Constant: +0:31 1.100000 +0:31 1.200000 0:32 Sequence 0:32 move second child to first child ( temp 4-component vector of int) 0:32 'txval21' ( temp 4-component vector of int) @@ -289,16 +289,16 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:32 Constant: +0:32 0.100000 +0:32 0.200000 +0:32 0.300000 +0:32 Constant: +0:32 1.100000 +0:32 1.200000 +0:32 Constant: +0:32 1.100000 +0:32 1.200000 0:33 Sequence 0:33 move second child to first child ( temp 4-component vector of uint) 0:33 'txval22' ( temp 4-component vector of uint) @@ -306,16 +306,16 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:33 Constant: +0:33 0.100000 +0:33 0.200000 +0:33 0.300000 +0:33 Constant: +0:33 1.100000 +0:33 1.200000 +0:33 Constant: +0:33 1.100000 +0:33 1.200000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of float) 0:35 'txval40' ( temp 4-component vector of float) @@ -323,19 +323,19 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 1.300000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 1.300000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval41' ( temp 4-component vector of int) @@ -343,19 +343,19 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 +0:36 0.300000 +0:36 0.400000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 1.300000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 1.300000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval42' ( temp 4-component vector of uint) @@ -363,19 +363,19 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:37 Constant: +0:37 0.100000 +0:37 0.200000 +0:37 0.300000 +0:37 0.400000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 +0:37 1.300000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 +0:37 1.300000 0:39 move second child to first child ( temp 4-component vector of float) 0:39 Color: direct index for structure ( temp 4-component vector of float) 0:39 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out index 03888b62a3..8f2fabc420 100644 --- a/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.frag.out @@ -52,15 +52,15 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -68,15 +68,15 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:36 Constant: +0:36 0.300000 +0:36 0.400000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -84,15 +84,15 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:37 Constant: +0:37 0.500000 +0:37 0.600000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -100,18 +100,18 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -119,18 +119,18 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -138,18 +138,18 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 +0:41 Constant: +0:41 1.100000 +0:41 1.200000 +0:41 1.300000 +0:41 Constant: +0:41 1.100000 +0:41 1.200000 +0:41 1.300000 0:43 Sequence 0:43 move second child to first child ( temp 4-component vector of float) 0:43 'txval40' ( temp 4-component vector of float) @@ -157,18 +157,18 @@ using depth_any 0:43 Construct combined texture-sampler ( temp samplerCube) 0:43 'g_tTexcdf4' ( uniform textureCube) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 +0:43 0.300000 +0:43 Constant: +0:43 1.100000 +0:43 1.200000 +0:43 1.300000 +0:43 Constant: +0:43 1.100000 +0:43 1.200000 +0:43 1.300000 0:44 Sequence 0:44 move second child to first child ( temp 4-component vector of int) 0:44 'txval41' ( temp 4-component vector of int) @@ -176,18 +176,18 @@ using depth_any 0:44 Construct combined texture-sampler ( temp isamplerCube) 0:44 'g_tTexcdi4' ( uniform itextureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:44 Constant: +0:44 0.400000 +0:44 0.500000 +0:44 0.600000 +0:44 Constant: +0:44 1.100000 +0:44 1.200000 +0:44 1.300000 +0:44 Constant: +0:44 1.100000 +0:44 1.200000 +0:44 1.300000 0:45 Sequence 0:45 move second child to first child ( temp 4-component vector of uint) 0:45 'txval42' ( temp 4-component vector of uint) @@ -195,18 +195,18 @@ using depth_any 0:45 Construct combined texture-sampler ( temp usamplerCube) 0:45 'g_tTexcdu4' ( uniform utextureCube) 0:45 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:45 Constant: +0:45 0.700000 +0:45 0.800000 +0:45 0.900000 +0:45 Constant: +0:45 1.100000 +0:45 1.200000 +0:45 1.300000 +0:45 Constant: +0:45 1.100000 +0:45 1.200000 +0:45 1.300000 0:47 move second child to first child ( temp 4-component vector of float) 0:47 Color: direct index for structure ( temp 4-component vector of float) 0:47 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -320,15 +320,15 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -336,15 +336,15 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:36 Constant: +0:36 0.300000 +0:36 0.400000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -352,15 +352,15 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:37 Constant: +0:37 0.500000 +0:37 0.600000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -368,18 +368,18 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -387,18 +387,18 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -406,18 +406,18 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 +0:41 Constant: +0:41 1.100000 +0:41 1.200000 +0:41 1.300000 +0:41 Constant: +0:41 1.100000 +0:41 1.200000 +0:41 1.300000 0:43 Sequence 0:43 move second child to first child ( temp 4-component vector of float) 0:43 'txval40' ( temp 4-component vector of float) @@ -425,18 +425,18 @@ using depth_any 0:43 Construct combined texture-sampler ( temp samplerCube) 0:43 'g_tTexcdf4' ( uniform textureCube) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:43 Constant: +0:43 0.100000 +0:43 0.200000 +0:43 0.300000 +0:43 Constant: +0:43 1.100000 +0:43 1.200000 +0:43 1.300000 +0:43 Constant: +0:43 1.100000 +0:43 1.200000 +0:43 1.300000 0:44 Sequence 0:44 move second child to first child ( temp 4-component vector of int) 0:44 'txval41' ( temp 4-component vector of int) @@ -444,18 +444,18 @@ using depth_any 0:44 Construct combined texture-sampler ( temp isamplerCube) 0:44 'g_tTexcdi4' ( uniform itextureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:44 Constant: +0:44 0.400000 +0:44 0.500000 +0:44 0.600000 +0:44 Constant: +0:44 1.100000 +0:44 1.200000 +0:44 1.300000 +0:44 Constant: +0:44 1.100000 +0:44 1.200000 +0:44 1.300000 0:45 Sequence 0:45 move second child to first child ( temp 4-component vector of uint) 0:45 'txval42' ( temp 4-component vector of uint) @@ -463,18 +463,18 @@ using depth_any 0:45 Construct combined texture-sampler ( temp usamplerCube) 0:45 'g_tTexcdu4' ( uniform utextureCube) 0:45 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:45 Constant: +0:45 0.700000 +0:45 0.800000 +0:45 0.900000 +0:45 Constant: +0:45 1.100000 +0:45 1.200000 +0:45 1.300000 +0:45 Constant: +0:45 1.100000 +0:45 1.200000 +0:45 1.300000 0:47 move second child to first child ( temp 4-component vector of float) 0:47 Color: direct index for structure ( temp 4-component vector of float) 0:47 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out index 71da245907..69820905fa 100644 --- a/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out +++ b/Test/baseResults/hlsl.samplegrad.basic.dx10.vert.out @@ -50,15 +50,15 @@ Shader version: 500 0:34 Construct combined texture-sampler ( temp sampler2D) 0:34 'g_tTex2df4' ( uniform texture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:34 Constant: +0:34 0.100000 +0:34 0.200000 +0:34 Constant: +0:34 1.100000 +0:34 1.200000 +0:34 Constant: +0:34 1.100000 +0:34 1.200000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of int) 0:35 'txval21' ( temp 4-component vector of int) @@ -66,15 +66,15 @@ Shader version: 500 0:35 Construct combined texture-sampler ( temp isampler2D) 0:35 'g_tTex2di4' ( uniform itexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:35 Constant: +0:35 0.300000 +0:35 0.400000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of uint) 0:36 'txval22' ( temp 4-component vector of uint) @@ -82,15 +82,15 @@ Shader version: 500 0:36 Construct combined texture-sampler ( temp usampler2D) 0:36 'g_tTex2du4' ( uniform utexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:36 Constant: +0:36 0.500000 +0:36 0.600000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 0:38 Sequence 0:38 move second child to first child ( temp 4-component vector of float) 0:38 'txval30' ( temp 4-component vector of float) @@ -98,18 +98,18 @@ Shader version: 500 0:38 Construct combined texture-sampler ( temp sampler3D) 0:38 'g_tTex3df4' ( uniform texture3D) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:38 Constant: +0:38 0.100000 +0:38 0.200000 +0:38 0.300000 +0:38 Constant: +0:38 1.100000 +0:38 1.200000 +0:38 1.300000 +0:38 Constant: +0:38 1.100000 +0:38 1.200000 +0:38 1.300000 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of int) 0:39 'txval31' ( temp 4-component vector of int) @@ -117,18 +117,18 @@ Shader version: 500 0:39 Construct combined texture-sampler ( temp isampler3D) 0:39 'g_tTex3di4' ( uniform itexture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:39 Constant: +0:39 0.400000 +0:39 0.500000 +0:39 0.600000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of uint) 0:40 'txval32' ( temp 4-component vector of uint) @@ -136,18 +136,18 @@ Shader version: 500 0:40 Construct combined texture-sampler ( temp usampler3D) 0:40 'g_tTex3du4' ( uniform utexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:40 Constant: +0:40 0.700000 +0:40 0.800000 +0:40 0.900000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 0:42 Sequence 0:42 move second child to first child ( temp 4-component vector of float) 0:42 'txval40' ( temp 4-component vector of float) @@ -155,18 +155,18 @@ Shader version: 500 0:42 Construct combined texture-sampler ( temp samplerCube) 0:42 'g_tTexcdf4' ( uniform textureCube) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 +0:42 0.300000 +0:42 Constant: +0:42 1.100000 +0:42 1.200000 +0:42 1.300000 +0:42 Constant: +0:42 1.100000 +0:42 1.200000 +0:42 1.300000 0:43 Sequence 0:43 move second child to first child ( temp 4-component vector of int) 0:43 'txval41' ( temp 4-component vector of int) @@ -174,18 +174,18 @@ Shader version: 500 0:43 Construct combined texture-sampler ( temp isamplerCube) 0:43 'g_tTexcdi4' ( uniform itextureCube) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:43 Constant: +0:43 0.400000 +0:43 0.500000 +0:43 0.600000 +0:43 Constant: +0:43 1.100000 +0:43 1.200000 +0:43 1.300000 +0:43 Constant: +0:43 1.100000 +0:43 1.200000 +0:43 1.300000 0:44 Sequence 0:44 move second child to first child ( temp 4-component vector of uint) 0:44 'txval42' ( temp 4-component vector of uint) @@ -193,28 +193,28 @@ Shader version: 500 0:44 Construct combined texture-sampler ( temp usamplerCube) 0:44 'g_tTexcdu4' ( uniform utextureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:44 Constant: +0:44 0.700000 +0:44 0.800000 +0:44 0.900000 +0:44 Constant: +0:44 1.100000 +0:44 1.200000 +0:44 1.300000 +0:44 Constant: +0:44 1.100000 +0:44 1.200000 +0:44 1.300000 0:46 move second child to first child ( temp 4-component vector of float) 0:46 Pos: direct index for structure ( temp 4-component vector of float) 0:46 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:46 Constant: 0:46 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:46 Constant: +0:46 0.000000 +0:46 0.000000 +0:46 0.000000 +0:46 0.000000 0:48 Branch: Return with expression 0:48 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:27 Function Definition: main( ( temp void) @@ -299,15 +299,15 @@ Shader version: 500 0:34 Construct combined texture-sampler ( temp sampler2D) 0:34 'g_tTex2df4' ( uniform texture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:34 Constant: +0:34 0.100000 +0:34 0.200000 +0:34 Constant: +0:34 1.100000 +0:34 1.200000 +0:34 Constant: +0:34 1.100000 +0:34 1.200000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of int) 0:35 'txval21' ( temp 4-component vector of int) @@ -315,15 +315,15 @@ Shader version: 500 0:35 Construct combined texture-sampler ( temp isampler2D) 0:35 'g_tTex2di4' ( uniform itexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:35 Constant: +0:35 0.300000 +0:35 0.400000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of uint) 0:36 'txval22' ( temp 4-component vector of uint) @@ -331,15 +331,15 @@ Shader version: 500 0:36 Construct combined texture-sampler ( temp usampler2D) 0:36 'g_tTex2du4' ( uniform utexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 +0:36 Constant: +0:36 0.500000 +0:36 0.600000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 0:38 Sequence 0:38 move second child to first child ( temp 4-component vector of float) 0:38 'txval30' ( temp 4-component vector of float) @@ -347,18 +347,18 @@ Shader version: 500 0:38 Construct combined texture-sampler ( temp sampler3D) 0:38 'g_tTex3df4' ( uniform texture3D) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:38 Constant: +0:38 0.100000 +0:38 0.200000 +0:38 0.300000 +0:38 Constant: +0:38 1.100000 +0:38 1.200000 +0:38 1.300000 +0:38 Constant: +0:38 1.100000 +0:38 1.200000 +0:38 1.300000 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of int) 0:39 'txval31' ( temp 4-component vector of int) @@ -366,18 +366,18 @@ Shader version: 500 0:39 Construct combined texture-sampler ( temp isampler3D) 0:39 'g_tTex3di4' ( uniform itexture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:39 Constant: +0:39 0.400000 +0:39 0.500000 +0:39 0.600000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of uint) 0:40 'txval32' ( temp 4-component vector of uint) @@ -385,18 +385,18 @@ Shader version: 500 0:40 Construct combined texture-sampler ( temp usampler3D) 0:40 'g_tTex3du4' ( uniform utexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:40 Constant: +0:40 0.700000 +0:40 0.800000 +0:40 0.900000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 0:42 Sequence 0:42 move second child to first child ( temp 4-component vector of float) 0:42 'txval40' ( temp 4-component vector of float) @@ -404,18 +404,18 @@ Shader version: 500 0:42 Construct combined texture-sampler ( temp samplerCube) 0:42 'g_tTexcdf4' ( uniform textureCube) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 +0:42 0.300000 +0:42 Constant: +0:42 1.100000 +0:42 1.200000 +0:42 1.300000 +0:42 Constant: +0:42 1.100000 +0:42 1.200000 +0:42 1.300000 0:43 Sequence 0:43 move second child to first child ( temp 4-component vector of int) 0:43 'txval41' ( temp 4-component vector of int) @@ -423,18 +423,18 @@ Shader version: 500 0:43 Construct combined texture-sampler ( temp isamplerCube) 0:43 'g_tTexcdi4' ( uniform itextureCube) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:43 Constant: +0:43 0.400000 +0:43 0.500000 +0:43 0.600000 +0:43 Constant: +0:43 1.100000 +0:43 1.200000 +0:43 1.300000 +0:43 Constant: +0:43 1.100000 +0:43 1.200000 +0:43 1.300000 0:44 Sequence 0:44 move second child to first child ( temp 4-component vector of uint) 0:44 'txval42' ( temp 4-component vector of uint) @@ -442,28 +442,28 @@ Shader version: 500 0:44 Construct combined texture-sampler ( temp usamplerCube) 0:44 'g_tTexcdu4' ( uniform utextureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 +0:44 Constant: +0:44 0.700000 +0:44 0.800000 +0:44 0.900000 +0:44 Constant: +0:44 1.100000 +0:44 1.200000 +0:44 1.300000 +0:44 Constant: +0:44 1.100000 +0:44 1.200000 +0:44 1.300000 0:46 move second child to first child ( temp 4-component vector of float) 0:46 Pos: direct index for structure ( temp 4-component vector of float) 0:46 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:46 Constant: 0:46 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:46 Constant: +0:46 0.000000 +0:46 0.000000 +0:46 0.000000 +0:46 0.000000 0:48 Branch: Return with expression 0:48 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:27 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out index 63192dfbaa..5694f89bc2 100644 --- a/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplegrad.offset.dx10.frag.out @@ -58,18 +58,18 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 Constant: +0:35 1 (const int) +0:35 0 (const int) 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -77,18 +77,18 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:36 Constant: +0:36 0.300000 +0:36 0.400000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 Constant: +0:36 1 (const int) +0:36 1 (const int) 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -96,18 +96,18 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:37 Constant: +0:37 0.500000 +0:37 0.600000 +0:37 Constant: +0:37 0.100000 +0:37 0.200000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 +0:37 Constant: +0:37 1 (const int) +0:37 -1 (const int) 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -115,22 +115,22 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? 1 (const int) +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 +0:39 Constant: +0:39 1 (const int) +0:39 0 (const int) +0:39 1 (const int) 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -138,22 +138,22 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 +0:40 Constant: +0:40 1 (const int) +0:40 1 (const int) +0:40 1 (const int) 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -161,22 +161,22 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? -1 (const int) +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 +0:41 Constant: +0:41 1.100000 +0:41 1.200000 +0:41 1.300000 +0:41 Constant: +0:41 1.100000 +0:41 1.200000 +0:41 1.300000 +0:41 Constant: +0:41 1 (const int) +0:41 0 (const int) +0:41 -1 (const int) 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -296,18 +296,18 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 Constant: +0:35 1.100000 +0:35 1.200000 +0:35 Constant: +0:35 1 (const int) +0:35 0 (const int) 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -315,18 +315,18 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:36 Constant: +0:36 0.300000 +0:36 0.400000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 +0:36 Constant: +0:36 1.100000 +0:36 1.200000 +0:36 Constant: +0:36 1 (const int) +0:36 1 (const int) 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -334,18 +334,18 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:37 Constant: +0:37 0.500000 +0:37 0.600000 +0:37 Constant: +0:37 0.100000 +0:37 0.200000 +0:37 Constant: +0:37 1.100000 +0:37 1.200000 +0:37 Constant: +0:37 1 (const int) +0:37 -1 (const int) 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -353,22 +353,22 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? 1 (const int) +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 +0:39 Constant: +0:39 1.100000 +0:39 1.200000 +0:39 1.300000 +0:39 Constant: +0:39 1 (const int) +0:39 0 (const int) +0:39 1 (const int) 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -376,22 +376,22 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 +0:40 Constant: +0:40 1.100000 +0:40 1.200000 +0:40 1.300000 +0:40 Constant: +0:40 1 (const int) +0:40 1 (const int) +0:40 1 (const int) 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -399,22 +399,22 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? 1.300000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? -1 (const int) +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 +0:41 Constant: +0:41 1.100000 +0:41 1.200000 +0:41 1.300000 +0:41 Constant: +0:41 1.100000 +0:41 1.200000 +0:41 1.300000 +0:41 Constant: +0:41 1 (const int) +0:41 0 (const int) +0:41 -1 (const int) 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out index fb8513b03a..a3bc4c14d8 100644 --- a/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplegrad.offsetarray.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:27 Constant: 0:27 1.100000 0:27 Constant: @@ -29,9 +29,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:28 Constant: +0:28 0.100000 +0:28 0.200000 0:28 Constant: 0:28 1.100000 0:28 Constant: @@ -45,9 +45,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:29 Constant: +0:29 0.100000 +0:29 0.200000 0:29 Constant: 0:29 1.100000 0:29 Constant: @@ -61,19 +61,19 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 +0:31 Constant: +0:31 1.100000 +0:31 1.200000 +0:31 Constant: +0:31 1.100000 +0:31 1.200000 +0:31 Constant: +0:31 1 (const int) +0:31 0 (const int) 0:32 Sequence 0:32 move second child to first child ( temp 4-component vector of int) 0:32 'txval21' ( temp 4-component vector of int) @@ -81,19 +81,19 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:32 Constant: +0:32 0.100000 +0:32 0.200000 +0:32 0.300000 +0:32 Constant: +0:32 1.100000 +0:32 1.200000 +0:32 Constant: +0:32 1.100000 +0:32 1.200000 +0:32 Constant: +0:32 1 (const int) +0:32 0 (const int) 0:33 Sequence 0:33 move second child to first child ( temp 4-component vector of uint) 0:33 'txval22' ( temp 4-component vector of uint) @@ -101,19 +101,19 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:33 Constant: +0:33 0.100000 +0:33 0.200000 +0:33 0.300000 +0:33 Constant: +0:33 1.100000 +0:33 1.200000 +0:33 Constant: +0:33 1.100000 +0:33 1.200000 +0:33 Constant: +0:33 1 (const int) +0:33 0 (const int) 0:35 move second child to first child ( temp 4-component vector of float) 0:35 Color: direct index for structure ( temp 4-component vector of float) 0:35 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -185,9 +185,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:27 Constant: 0:27 1.100000 0:27 Constant: @@ -201,9 +201,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:28 Constant: +0:28 0.100000 +0:28 0.200000 0:28 Constant: 0:28 1.100000 0:28 Constant: @@ -217,9 +217,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:29 Constant: +0:29 0.100000 +0:29 0.200000 0:29 Constant: 0:29 1.100000 0:29 Constant: @@ -233,19 +233,19 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 +0:31 Constant: +0:31 1.100000 +0:31 1.200000 +0:31 Constant: +0:31 1.100000 +0:31 1.200000 +0:31 Constant: +0:31 1 (const int) +0:31 0 (const int) 0:32 Sequence 0:32 move second child to first child ( temp 4-component vector of int) 0:32 'txval21' ( temp 4-component vector of int) @@ -253,19 +253,19 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:32 Constant: +0:32 0.100000 +0:32 0.200000 +0:32 0.300000 +0:32 Constant: +0:32 1.100000 +0:32 1.200000 +0:32 Constant: +0:32 1.100000 +0:32 1.200000 +0:32 Constant: +0:32 1 (const int) +0:32 0 (const int) 0:33 Sequence 0:33 move second child to first child ( temp 4-component vector of uint) 0:33 'txval22' ( temp 4-component vector of uint) @@ -273,19 +273,19 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1.100000 -0:? 1.200000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:33 Constant: +0:33 0.100000 +0:33 0.200000 +0:33 0.300000 +0:33 Constant: +0:33 1.100000 +0:33 1.200000 +0:33 Constant: +0:33 1.100000 +0:33 1.200000 +0:33 Constant: +0:33 1 (const int) +0:33 0 (const int) 0:35 move second child to first child ( temp 4-component vector of float) 0:35 Color: direct index for structure ( temp 4-component vector of float) 0:35 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out index 95a1a54f5a..68e0e87db9 100644 --- a/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.array.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:27 Constant: 0:27 0.750000 0:28 Sequence @@ -25,9 +25,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4a' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:28 Constant: +0:28 0.200000 +0:28 0.300000 0:28 Constant: 0:28 0.750000 0:29 Sequence @@ -37,9 +37,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4a' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:29 Constant: +0:29 0.300000 +0:29 0.400000 0:29 Constant: 0:29 0.750000 0:31 Sequence @@ -49,10 +49,10 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4a' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 0:31 Constant: 0:31 0.750000 0:32 Sequence @@ -62,10 +62,10 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4a' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:32 Constant: +0:32 0.300000 +0:32 0.400000 +0:32 0.500000 0:32 Constant: 0:32 0.750000 0:33 Sequence @@ -75,10 +75,10 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4a' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:33 Constant: +0:33 0.500000 +0:33 0.600000 +0:33 0.700000 0:33 Constant: 0:33 0.750000 0:35 Sequence @@ -88,11 +88,11 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4a' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 0:35 Constant: 0:35 0.750000 0:36 Sequence @@ -102,11 +102,11 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:36 Constant: +0:36 0.400000 +0:36 0.500000 +0:36 0.600000 +0:36 0.700000 0:36 Constant: 0:36 0.750000 0:37 Sequence @@ -116,11 +116,11 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4a' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? 1.000000 +0:37 Constant: +0:37 0.700000 +0:37 0.800000 +0:37 0.900000 +0:37 1.000000 0:37 Constant: 0:37 0.750000 0:39 move second child to first child ( temp 4-component vector of float) @@ -194,9 +194,9 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler1DArray) 0:27 'g_tTex1df4a' (layout( binding=1) uniform texture1DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 0:27 Constant: 0:27 0.750000 0:28 Sequence @@ -206,9 +206,9 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler1DArray) 0:28 'g_tTex1di4a' ( uniform itexture1DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:28 Constant: +0:28 0.200000 +0:28 0.300000 0:28 Constant: 0:28 0.750000 0:29 Sequence @@ -218,9 +218,9 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler1DArray) 0:29 'g_tTex1du4a' ( uniform utexture1DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:29 Constant: +0:29 0.300000 +0:29 0.400000 0:29 Constant: 0:29 0.750000 0:31 Sequence @@ -230,10 +230,10 @@ using depth_any 0:31 Construct combined texture-sampler ( temp sampler2DArray) 0:31 'g_tTex2df4a' ( uniform texture2DArray) 0:31 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:31 Constant: +0:31 0.100000 +0:31 0.200000 +0:31 0.300000 0:31 Constant: 0:31 0.750000 0:32 Sequence @@ -243,10 +243,10 @@ using depth_any 0:32 Construct combined texture-sampler ( temp isampler2DArray) 0:32 'g_tTex2di4a' ( uniform itexture2DArray) 0:32 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:32 Constant: +0:32 0.300000 +0:32 0.400000 +0:32 0.500000 0:32 Constant: 0:32 0.750000 0:33 Sequence @@ -256,10 +256,10 @@ using depth_any 0:33 Construct combined texture-sampler ( temp usampler2DArray) 0:33 'g_tTex2du4a' ( uniform utexture2DArray) 0:33 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:33 Constant: +0:33 0.500000 +0:33 0.600000 +0:33 0.700000 0:33 Constant: 0:33 0.750000 0:35 Sequence @@ -269,11 +269,11 @@ using depth_any 0:35 Construct combined texture-sampler ( temp samplerCubeArray) 0:35 'g_tTexcdf4a' ( uniform textureCubeArray) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 +0:35 0.300000 +0:35 0.400000 0:35 Constant: 0:35 0.750000 0:36 Sequence @@ -283,11 +283,11 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isamplerCubeArray) 0:36 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:36 Constant: +0:36 0.400000 +0:36 0.500000 +0:36 0.600000 +0:36 0.700000 0:36 Constant: 0:36 0.750000 0:37 Sequence @@ -297,11 +297,11 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usamplerCubeArray) 0:37 'g_tTexcdu4a' ( uniform utextureCubeArray) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 -0:? 1.000000 +0:37 Constant: +0:37 0.700000 +0:37 0.800000 +0:37 0.900000 +0:37 1.000000 0:37 Constant: 0:37 0.750000 0:39 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out index 99e252ccf6..ee3588da5f 100644 --- a/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.frag.out @@ -46,9 +46,9 @@ using depth_any 0:36 Construct combined texture-sampler ( temp sampler2D) 0:36 'g_tTex2df4' ( uniform texture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 0:36 Constant: 0:36 0.750000 0:37 Sequence @@ -58,9 +58,9 @@ using depth_any 0:37 Construct combined texture-sampler ( temp isampler2D) 0:37 'g_tTex2di4' ( uniform itexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:37 Constant: +0:37 0.300000 +0:37 0.400000 0:37 Constant: 0:37 0.750000 0:38 Sequence @@ -70,9 +70,9 @@ using depth_any 0:38 Construct combined texture-sampler ( temp usampler2D) 0:38 'g_tTex2du4' ( uniform utexture2D) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:38 Constant: +0:38 0.500000 +0:38 0.600000 0:38 Constant: 0:38 0.750000 0:40 Sequence @@ -82,10 +82,10 @@ using depth_any 0:40 Construct combined texture-sampler ( temp sampler3D) 0:40 'g_tTex3df4' ( uniform texture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:40 Constant: +0:40 0.100000 +0:40 0.200000 +0:40 0.300000 0:40 Constant: 0:40 0.750000 0:41 Sequence @@ -95,10 +95,10 @@ using depth_any 0:41 Construct combined texture-sampler ( temp isampler3D) 0:41 'g_tTex3di4' ( uniform itexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:41 Constant: +0:41 0.400000 +0:41 0.500000 +0:41 0.600000 0:41 Constant: 0:41 0.750000 0:42 Sequence @@ -108,10 +108,10 @@ using depth_any 0:42 Construct combined texture-sampler ( temp usampler3D) 0:42 'g_tTex3du4' ( uniform utexture3D) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:42 Constant: +0:42 0.700000 +0:42 0.800000 +0:42 0.900000 0:42 Constant: 0:42 0.750000 0:44 Sequence @@ -121,10 +121,10 @@ using depth_any 0:44 Construct combined texture-sampler ( temp samplerCube) 0:44 'g_tTexcdf4' ( uniform textureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 +0:44 0.300000 0:44 Constant: 0:44 0.750000 0:45 Sequence @@ -134,10 +134,10 @@ using depth_any 0:45 Construct combined texture-sampler ( temp isamplerCube) 0:45 'g_tTexcdi4' ( uniform itextureCube) 0:45 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:45 Constant: +0:45 0.400000 +0:45 0.500000 +0:45 0.600000 0:45 Constant: 0:45 0.750000 0:46 Sequence @@ -147,10 +147,10 @@ using depth_any 0:46 Construct combined texture-sampler ( temp usamplerCube) 0:46 'g_tTexcdu4' ( uniform utextureCube) 0:46 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:46 Constant: +0:46 0.700000 +0:46 0.800000 +0:46 0.900000 0:46 Constant: 0:46 0.750000 0:48 move second child to first child ( temp 4-component vector of float) @@ -261,9 +261,9 @@ using depth_any 0:36 Construct combined texture-sampler ( temp sampler2D) 0:36 'g_tTex2df4' ( uniform texture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 0:36 Constant: 0:36 0.750000 0:37 Sequence @@ -273,9 +273,9 @@ using depth_any 0:37 Construct combined texture-sampler ( temp isampler2D) 0:37 'g_tTex2di4' ( uniform itexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:37 Constant: +0:37 0.300000 +0:37 0.400000 0:37 Constant: 0:37 0.750000 0:38 Sequence @@ -285,9 +285,9 @@ using depth_any 0:38 Construct combined texture-sampler ( temp usampler2D) 0:38 'g_tTex2du4' ( uniform utexture2D) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:38 Constant: +0:38 0.500000 +0:38 0.600000 0:38 Constant: 0:38 0.750000 0:40 Sequence @@ -297,10 +297,10 @@ using depth_any 0:40 Construct combined texture-sampler ( temp sampler3D) 0:40 'g_tTex3df4' ( uniform texture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:40 Constant: +0:40 0.100000 +0:40 0.200000 +0:40 0.300000 0:40 Constant: 0:40 0.750000 0:41 Sequence @@ -310,10 +310,10 @@ using depth_any 0:41 Construct combined texture-sampler ( temp isampler3D) 0:41 'g_tTex3di4' ( uniform itexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:41 Constant: +0:41 0.400000 +0:41 0.500000 +0:41 0.600000 0:41 Constant: 0:41 0.750000 0:42 Sequence @@ -323,10 +323,10 @@ using depth_any 0:42 Construct combined texture-sampler ( temp usampler3D) 0:42 'g_tTex3du4' ( uniform utexture3D) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:42 Constant: +0:42 0.700000 +0:42 0.800000 +0:42 0.900000 0:42 Constant: 0:42 0.750000 0:44 Sequence @@ -336,10 +336,10 @@ using depth_any 0:44 Construct combined texture-sampler ( temp samplerCube) 0:44 'g_tTexcdf4' ( uniform textureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:44 Constant: +0:44 0.100000 +0:44 0.200000 +0:44 0.300000 0:44 Constant: 0:44 0.750000 0:45 Sequence @@ -349,10 +349,10 @@ using depth_any 0:45 Construct combined texture-sampler ( temp isamplerCube) 0:45 'g_tTexcdi4' ( uniform itextureCube) 0:45 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:45 Constant: +0:45 0.400000 +0:45 0.500000 +0:45 0.600000 0:45 Constant: 0:45 0.750000 0:46 Sequence @@ -362,10 +362,10 @@ using depth_any 0:46 Construct combined texture-sampler ( temp usamplerCube) 0:46 'g_tTexcdu4' ( uniform utextureCube) 0:46 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:46 Constant: +0:46 0.700000 +0:46 0.800000 +0:46 0.900000 0:46 Constant: 0:46 0.750000 0:48 move second child to first child ( temp 4-component vector of float) diff --git a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out index d4d720bc08..a3ff9e6624 100644 --- a/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out +++ b/Test/baseResults/hlsl.samplelevel.basic.dx10.vert.out @@ -44,9 +44,9 @@ Shader version: 500 0:34 Construct combined texture-sampler ( temp sampler2D) 0:34 'g_tTex2df4' ( uniform texture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:34 Constant: +0:34 0.100000 +0:34 0.200000 0:34 Constant: 0:34 0.750000 0:35 Sequence @@ -56,9 +56,9 @@ Shader version: 500 0:35 Construct combined texture-sampler ( temp isampler2D) 0:35 'g_tTex2di4' ( uniform itexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.300000 +0:35 0.400000 0:35 Constant: 0:35 0.750000 0:36 Sequence @@ -68,9 +68,9 @@ Shader version: 500 0:36 Construct combined texture-sampler ( temp usampler2D) 0:36 'g_tTex2du4' ( uniform utexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:36 Constant: +0:36 0.500000 +0:36 0.600000 0:36 Constant: 0:36 0.750000 0:38 Sequence @@ -80,10 +80,10 @@ Shader version: 500 0:38 Construct combined texture-sampler ( temp sampler3D) 0:38 'g_tTex3df4' ( uniform texture3D) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:38 Constant: +0:38 0.100000 +0:38 0.200000 +0:38 0.300000 0:38 Constant: 0:38 0.750000 0:39 Sequence @@ -93,10 +93,10 @@ Shader version: 500 0:39 Construct combined texture-sampler ( temp isampler3D) 0:39 'g_tTex3di4' ( uniform itexture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:39 Constant: +0:39 0.400000 +0:39 0.500000 +0:39 0.600000 0:39 Constant: 0:39 0.750000 0:40 Sequence @@ -106,10 +106,10 @@ Shader version: 500 0:40 Construct combined texture-sampler ( temp usampler3D) 0:40 'g_tTex3du4' ( uniform utexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:40 Constant: +0:40 0.700000 +0:40 0.800000 +0:40 0.900000 0:40 Constant: 0:40 0.750000 0:42 Sequence @@ -119,10 +119,10 @@ Shader version: 500 0:42 Construct combined texture-sampler ( temp samplerCube) 0:42 'g_tTexcdf4' ( uniform textureCube) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 +0:42 0.300000 0:42 Constant: 0:42 0.750000 0:43 Sequence @@ -132,10 +132,10 @@ Shader version: 500 0:43 Construct combined texture-sampler ( temp isamplerCube) 0:43 'g_tTexcdi4' ( uniform itextureCube) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:43 Constant: +0:43 0.400000 +0:43 0.500000 +0:43 0.600000 0:43 Constant: 0:43 0.750000 0:44 Sequence @@ -145,10 +145,10 @@ Shader version: 500 0:44 Construct combined texture-sampler ( temp usamplerCube) 0:44 'g_tTexcdu4' ( uniform utextureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:44 Constant: +0:44 0.700000 +0:44 0.800000 +0:44 0.900000 0:44 Constant: 0:44 0.750000 0:46 move second child to first child ( temp 4-component vector of float) @@ -156,11 +156,11 @@ Shader version: 500 0:46 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:46 Constant: 0:46 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:46 Constant: +0:46 0.000000 +0:46 0.000000 +0:46 0.000000 +0:46 0.000000 0:48 Branch: Return with expression 0:48 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:27 Function Definition: main( ( temp void) @@ -239,9 +239,9 @@ Shader version: 500 0:34 Construct combined texture-sampler ( temp sampler2D) 0:34 'g_tTex2df4' ( uniform texture2D) 0:34 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:34 Constant: +0:34 0.100000 +0:34 0.200000 0:34 Constant: 0:34 0.750000 0:35 Sequence @@ -251,9 +251,9 @@ Shader version: 500 0:35 Construct combined texture-sampler ( temp isampler2D) 0:35 'g_tTex2di4' ( uniform itexture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:35 Constant: +0:35 0.300000 +0:35 0.400000 0:35 Constant: 0:35 0.750000 0:36 Sequence @@ -263,9 +263,9 @@ Shader version: 500 0:36 Construct combined texture-sampler ( temp usampler2D) 0:36 'g_tTex2du4' ( uniform utexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:36 Constant: +0:36 0.500000 +0:36 0.600000 0:36 Constant: 0:36 0.750000 0:38 Sequence @@ -275,10 +275,10 @@ Shader version: 500 0:38 Construct combined texture-sampler ( temp sampler3D) 0:38 'g_tTex3df4' ( uniform texture3D) 0:38 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:38 Constant: +0:38 0.100000 +0:38 0.200000 +0:38 0.300000 0:38 Constant: 0:38 0.750000 0:39 Sequence @@ -288,10 +288,10 @@ Shader version: 500 0:39 Construct combined texture-sampler ( temp isampler3D) 0:39 'g_tTex3di4' ( uniform itexture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:39 Constant: +0:39 0.400000 +0:39 0.500000 +0:39 0.600000 0:39 Constant: 0:39 0.750000 0:40 Sequence @@ -301,10 +301,10 @@ Shader version: 500 0:40 Construct combined texture-sampler ( temp usampler3D) 0:40 'g_tTex3du4' ( uniform utexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:40 Constant: +0:40 0.700000 +0:40 0.800000 +0:40 0.900000 0:40 Constant: 0:40 0.750000 0:42 Sequence @@ -314,10 +314,10 @@ Shader version: 500 0:42 Construct combined texture-sampler ( temp samplerCube) 0:42 'g_tTexcdf4' ( uniform textureCube) 0:42 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:42 Constant: +0:42 0.100000 +0:42 0.200000 +0:42 0.300000 0:42 Constant: 0:42 0.750000 0:43 Sequence @@ -327,10 +327,10 @@ Shader version: 500 0:43 Construct combined texture-sampler ( temp isamplerCube) 0:43 'g_tTexcdi4' ( uniform itextureCube) 0:43 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:43 Constant: +0:43 0.400000 +0:43 0.500000 +0:43 0.600000 0:43 Constant: 0:43 0.750000 0:44 Sequence @@ -340,10 +340,10 @@ Shader version: 500 0:44 Construct combined texture-sampler ( temp usamplerCube) 0:44 'g_tTexcdu4' ( uniform utextureCube) 0:44 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:44 Constant: +0:44 0.700000 +0:44 0.800000 +0:44 0.900000 0:44 Constant: 0:44 0.750000 0:46 move second child to first child ( temp 4-component vector of float) @@ -351,11 +351,11 @@ Shader version: 500 0:46 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:46 Constant: 0:46 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:46 Constant: +0:46 0.000000 +0:46 0.000000 +0:46 0.000000 +0:46 0.000000 0:48 Branch: Return with expression 0:48 'vsout' ( temp structure{ temp 4-component vector of float Pos}) 0:27 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out index dda42386eb..c9d431b217 100644 --- a/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.offset.dx10.frag.out @@ -52,14 +52,14 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 0:35 Constant: 0:35 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 0 (const int) 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -67,14 +67,14 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:36 Constant: +0:36 0.300000 +0:36 0.400000 0:36 Constant: 0:36 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:36 Constant: +0:36 1 (const int) +0:36 1 (const int) 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -82,14 +82,14 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:37 Constant: +0:37 0.500000 +0:37 0.600000 0:37 Constant: 0:37 0.750000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:37 Constant: +0:37 1 (const int) +0:37 -1 (const int) 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -97,16 +97,16 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 0:39 Constant: 0:39 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? 1 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 0 (const int) +0:39 1 (const int) 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -114,16 +114,16 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 0:40 Constant: 0:40 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 1 (const int) +0:40 1 (const int) 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -131,16 +131,16 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 0:41 Constant: 0:41 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? -1 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 0 (const int) +0:41 -1 (const int) 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -254,14 +254,14 @@ using depth_any 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df4' ( uniform texture2D) 0:35 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 0:35 Constant: 0:35 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 0 (const int) 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -269,14 +269,14 @@ using depth_any 0:36 Construct combined texture-sampler ( temp isampler2D) 0:36 'g_tTex2di4' ( uniform itexture2D) 0:36 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:36 Constant: +0:36 0.300000 +0:36 0.400000 0:36 Constant: 0:36 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) +0:36 Constant: +0:36 1 (const int) +0:36 1 (const int) 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -284,14 +284,14 @@ using depth_any 0:37 Construct combined texture-sampler ( temp usampler2D) 0:37 'g_tTex2du4' ( uniform utexture2D) 0:37 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 +0:37 Constant: +0:37 0.500000 +0:37 0.600000 0:37 Constant: 0:37 0.750000 -0:? Constant: -0:? 1 (const int) -0:? -1 (const int) +0:37 Constant: +0:37 1 (const int) +0:37 -1 (const int) 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -299,16 +299,16 @@ using depth_any 0:39 Construct combined texture-sampler ( temp sampler3D) 0:39 'g_tTex3df4' ( uniform texture3D) 0:39 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:39 Constant: +0:39 0.100000 +0:39 0.200000 +0:39 0.300000 0:39 Constant: 0:39 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? 1 (const int) +0:39 Constant: +0:39 1 (const int) +0:39 0 (const int) +0:39 1 (const int) 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -316,16 +316,16 @@ using depth_any 0:40 Construct combined texture-sampler ( temp isampler3D) 0:40 'g_tTex3di4' ( uniform itexture3D) 0:40 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.500000 -0:? 0.600000 +0:40 Constant: +0:40 0.400000 +0:40 0.500000 +0:40 0.600000 0:40 Constant: 0:40 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 1 (const int) -0:? 1 (const int) +0:40 Constant: +0:40 1 (const int) +0:40 1 (const int) +0:40 1 (const int) 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -333,16 +333,16 @@ using depth_any 0:41 Construct combined texture-sampler ( temp usampler3D) 0:41 'g_tTex3du4' ( uniform utexture3D) 0:41 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.700000 -0:? 0.800000 -0:? 0.900000 +0:41 Constant: +0:41 0.700000 +0:41 0.800000 +0:41 0.900000 0:41 Constant: 0:41 0.750000 -0:? Constant: -0:? 1 (const int) -0:? 0 (const int) -0:? -1 (const int) +0:41 Constant: +0:41 1 (const int) +0:41 0 (const int) +0:41 -1 (const int) 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out index c0c27e4d04..3f6ae55658 100644 --- a/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplelevel.offsetarray.dx10.frag.out @@ -13,9 +13,9 @@ using depth_any 0:23 Construct combined texture-sampler ( temp sampler1DArray) 0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:23 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:23 Constant: +0:23 0.100000 +0:23 0.200000 0:23 Constant: 0:23 0.750000 0:23 Constant: @@ -27,9 +27,9 @@ using depth_any 0:24 Construct combined texture-sampler ( temp isampler1DArray) 0:24 'g_tTex1di4' ( uniform itexture1DArray) 0:24 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:24 Constant: +0:24 0.200000 +0:24 0.300000 0:24 Constant: 0:24 0.750000 0:24 Constant: @@ -41,9 +41,9 @@ using depth_any 0:25 Construct combined texture-sampler ( temp usampler1DArray) 0:25 'g_tTex1du4' ( uniform utexture1DArray) 0:25 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:25 Constant: +0:25 0.300000 +0:25 0.400000 0:25 Constant: 0:25 0.750000 0:25 Constant: @@ -55,15 +55,15 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler2DArray) 0:27 'g_tTex2df4' ( uniform texture2DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 +0:27 0.300000 0:27 Constant: 0:27 0.750000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:27 Constant: +0:27 0 (const int) +0:27 0 (const int) 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval21' ( temp 4-component vector of int) @@ -71,15 +71,15 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler2DArray) 0:28 'g_tTex2di4' ( uniform itexture2DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:28 Constant: +0:28 0.300000 +0:28 0.400000 +0:28 0.500000 0:28 Constant: 0:28 0.750000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:28 Constant: +0:28 0 (const int) +0:28 0 (const int) 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval22' ( temp 4-component vector of uint) @@ -87,15 +87,15 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler2DArray) 0:29 'g_tTex2du4' ( uniform utexture2DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:29 Constant: +0:29 0.500000 +0:29 0.600000 +0:29 0.700000 0:29 Constant: 0:29 0.750000 -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 1 (const int) 0:33 move second child to first child ( temp 4-component vector of float) 0:33 Color: direct index for structure ( temp 4-component vector of float) 0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -164,9 +164,9 @@ using depth_any 0:23 Construct combined texture-sampler ( temp sampler1DArray) 0:23 'g_tTex1df4' (layout( binding=0) uniform texture1DArray) 0:23 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:23 Constant: +0:23 0.100000 +0:23 0.200000 0:23 Constant: 0:23 0.750000 0:23 Constant: @@ -178,9 +178,9 @@ using depth_any 0:24 Construct combined texture-sampler ( temp isampler1DArray) 0:24 'g_tTex1di4' ( uniform itexture1DArray) 0:24 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.300000 +0:24 Constant: +0:24 0.200000 +0:24 0.300000 0:24 Constant: 0:24 0.750000 0:24 Constant: @@ -192,9 +192,9 @@ using depth_any 0:25 Construct combined texture-sampler ( temp usampler1DArray) 0:25 'g_tTex1du4' ( uniform utexture1DArray) 0:25 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 +0:25 Constant: +0:25 0.300000 +0:25 0.400000 0:25 Constant: 0:25 0.750000 0:25 Constant: @@ -206,15 +206,15 @@ using depth_any 0:27 Construct combined texture-sampler ( temp sampler2DArray) 0:27 'g_tTex2df4' ( uniform texture2DArray) 0:27 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 -0:? 0.300000 +0:27 Constant: +0:27 0.100000 +0:27 0.200000 +0:27 0.300000 0:27 Constant: 0:27 0.750000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:27 Constant: +0:27 0 (const int) +0:27 0 (const int) 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval21' ( temp 4-component vector of int) @@ -222,15 +222,15 @@ using depth_any 0:28 Construct combined texture-sampler ( temp isampler2DArray) 0:28 'g_tTex2di4' ( uniform itexture2DArray) 0:28 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.400000 -0:? 0.500000 +0:28 Constant: +0:28 0.300000 +0:28 0.400000 +0:28 0.500000 0:28 Constant: 0:28 0.750000 -0:? Constant: -0:? 0 (const int) -0:? 0 (const int) +0:28 Constant: +0:28 0 (const int) +0:28 0 (const int) 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval22' ( temp 4-component vector of uint) @@ -238,15 +238,15 @@ using depth_any 0:29 Construct combined texture-sampler ( temp usampler2DArray) 0:29 'g_tTex2du4' ( uniform utexture2DArray) 0:29 'g_sSamp' (layout( binding=0) uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.600000 -0:? 0.700000 +0:29 Constant: +0:29 0.500000 +0:29 0.600000 +0:29 0.700000 0:29 Constant: 0:29 0.750000 -0:? Constant: -0:? 0 (const int) -0:? 1 (const int) +0:29 Constant: +0:29 0 (const int) +0:29 1 (const int) 0:33 move second child to first child ( temp 4-component vector of float) 0:33 Color: direct index for structure ( temp 4-component vector of float) 0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) diff --git a/Test/baseResults/hlsl.scalar2matrix.frag.out b/Test/baseResults/hlsl.scalar2matrix.frag.out index 8a1413fa8a..62980dd6f9 100644 --- a/Test/baseResults/hlsl.scalar2matrix.frag.out +++ b/Test/baseResults/hlsl.scalar2matrix.frag.out @@ -89,23 +89,23 @@ gl_FragCoord origin is upper left 0:16 0.750000 0:17 move second child to first child ( temp 4X4 matrix of float) 0:17 'mat4' ( temp 4X4 matrix of float) -0:? Constant: -0:? 4.000000 -0:? 4.100000 -0:? 4.200000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:17 Constant: +0:17 4.000000 +0:17 4.100000 +0:17 4.200000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 0:18 move second child to first child ( temp 4X4 matrix of float) 0:18 'mat4' ( temp 4X4 matrix of float) 0:18 Constant: @@ -278,23 +278,23 @@ gl_FragCoord origin is upper left 0:16 0.750000 0:17 move second child to first child ( temp 4X4 matrix of float) 0:17 'mat4' ( temp 4X4 matrix of float) -0:? Constant: -0:? 4.000000 -0:? 4.100000 -0:? 4.200000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:17 Constant: +0:17 4.000000 +0:17 4.100000 +0:17 4.200000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 +0:17 0.000000 0:18 move second child to first child ( temp 4X4 matrix of float) 0:18 'mat4' ( temp 4X4 matrix of float) 0:18 Constant: diff --git a/Test/baseResults/hlsl.semantic-1.vert.out b/Test/baseResults/hlsl.semantic-1.vert.out index e0786f03bf..25fb582260 100644 --- a/Test/baseResults/hlsl.semantic-1.vert.out +++ b/Test/baseResults/hlsl.semantic-1.vert.out @@ -16,7 +16,7 @@ Shader version: 500 0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3}) 0:19 Constant: 0:19 1 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:19 Construct vec2 ( temp 2-component vector of float) 0:19 direct index ( temp float) 0:19 'v' ( in 4-component vector of float) 0:19 Constant: @@ -30,7 +30,7 @@ Shader version: 500 0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3}) 0:20 Constant: 0:20 2 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:20 Construct vec2 ( temp 2-component vector of float) 0:20 direct index ( temp float) 0:20 'v' ( in 4-component vector of float) 0:20 Constant: @@ -44,7 +44,7 @@ Shader version: 500 0:21 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3}) 0:21 Constant: 0:21 3 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:21 Construct vec2 ( temp 2-component vector of float) 0:21 direct index ( temp float) 0:21 'v' ( in 4-component vector of float) 0:21 Constant: @@ -58,7 +58,7 @@ Shader version: 500 0:22 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3}) 0:22 Constant: 0:22 4 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:22 Construct vec2 ( temp 2-component vector of float) 0:22 direct index ( temp float) 0:22 'v' ( in 4-component vector of float) 0:22 Constant: @@ -139,7 +139,7 @@ Shader version: 500 0:19 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3}) 0:19 Constant: 0:19 1 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:19 Construct vec2 ( temp 2-component vector of float) 0:19 direct index ( temp float) 0:19 'v' ( in 4-component vector of float) 0:19 Constant: @@ -153,7 +153,7 @@ Shader version: 500 0:20 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3}) 0:20 Constant: 0:20 2 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:20 Construct vec2 ( temp 2-component vector of float) 0:20 direct index ( temp float) 0:20 'v' ( in 4-component vector of float) 0:20 Constant: @@ -167,7 +167,7 @@ Shader version: 500 0:21 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3}) 0:21 Constant: 0:21 3 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:21 Construct vec2 ( temp 2-component vector of float) 0:21 direct index ( temp float) 0:21 'v' ( in 4-component vector of float) 0:21 Constant: @@ -181,7 +181,7 @@ Shader version: 500 0:22 's' ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float UV0, temp 2-component vector of float UV1, temp 2-component vector of float UV2, temp 2-component vector of float UV3}) 0:22 Constant: 0:22 4 (const int) -0:? Construct vec2 ( temp 2-component vector of float) +0:22 Construct vec2 ( temp 2-component vector of float) 0:22 direct index ( temp float) 0:22 'v' ( in 4-component vector of float) 0:22 Constant: diff --git a/Test/baseResults/hlsl.singleArgIntPromo.vert.out b/Test/baseResults/hlsl.singleArgIntPromo.vert.out index 1da9d5b8bf..a6105944ef 100644 --- a/Test/baseResults/hlsl.singleArgIntPromo.vert.out +++ b/Test/baseResults/hlsl.singleArgIntPromo.vert.out @@ -12,7 +12,7 @@ Shader version: 500 0:4 Sequence 0:4 move second child to first child ( temp 2-component vector of int) 0:4 'd2' ( temp 2-component vector of int) -0:? Construct ivec2 ( temp 2-component vector of int) +0:4 Construct ivec2 ( temp 2-component vector of int) 0:4 Constant: 0:4 5 (const int) 0:4 'd' ( temp int) @@ -30,10 +30,10 @@ Shader version: 500 0:7 Sequence 0:7 move second child to first child ( temp 3-component vector of float) 0:7 'f3' ( temp 3-component vector of float) -0:? Constant: -0:? 1.945910 -0:? 0.693147 -0:? 1.098612 +0:7 Constant: +0:7 1.945910 +0:7 0.693147 +0:7 1.098612 0:8 Sequence 0:8 move second child to first child ( temp 2-component vector of float) 0:8 'f22' ( temp 2-component vector of float) @@ -111,7 +111,7 @@ Shader version: 500 0:4 Sequence 0:4 move second child to first child ( temp 2-component vector of int) 0:4 'd2' ( temp 2-component vector of int) -0:? Construct ivec2 ( temp 2-component vector of int) +0:4 Construct ivec2 ( temp 2-component vector of int) 0:4 Constant: 0:4 5 (const int) 0:4 'd' ( temp int) @@ -129,10 +129,10 @@ Shader version: 500 0:7 Sequence 0:7 move second child to first child ( temp 3-component vector of float) 0:7 'f3' ( temp 3-component vector of float) -0:? Constant: -0:? 1.945910 -0:? 0.693147 -0:? 1.098612 +0:7 Constant: +0:7 1.945910 +0:7 0.693147 +0:7 1.098612 0:8 Sequence 0:8 move second child to first child ( temp 2-component vector of float) 0:8 'f22' ( temp 2-component vector of float) diff --git a/Test/baseResults/hlsl.staticMemberFunction.frag.out b/Test/baseResults/hlsl.staticMemberFunction.frag.out index 0d27dba5cc..f0e5f9f064 100644 --- a/Test/baseResults/hlsl.staticMemberFunction.frag.out +++ b/Test/baseResults/hlsl.staticMemberFunction.frag.out @@ -26,19 +26,19 @@ gl_FragCoord origin is upper left 0:18 Sequence 0:18 move second child to first child ( temp 4-component vector of float) 0:18 'f4' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 +0:18 Constant: +0:18 1.000000 +0:18 1.000000 +0:18 1.000000 +0:18 1.000000 0:19 add second child into first child ( temp 4-component vector of float) 0:19 'f4' ( temp 4-component vector of float) 0:19 Function Call: Test::staticMemFun(vf4; ( global 4-component vector of float) -0:? Constant: -0:? 5.000000 -0:? 5.000000 -0:? 5.000000 -0:? 5.000000 +0:19 Constant: +0:19 5.000000 +0:19 5.000000 +0:19 5.000000 +0:19 5.000000 0:20 add second child into first child ( temp 4-component vector of float) 0:20 'f4' ( temp 4-component vector of float) 0:20 Convert int to float ( temp float) @@ -87,19 +87,19 @@ gl_FragCoord origin is upper left 0:18 Sequence 0:18 move second child to first child ( temp 4-component vector of float) 0:18 'f4' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 -0:? 1.000000 +0:18 Constant: +0:18 1.000000 +0:18 1.000000 +0:18 1.000000 +0:18 1.000000 0:19 add second child into first child ( temp 4-component vector of float) 0:19 'f4' ( temp 4-component vector of float) 0:19 Function Call: Test::staticMemFun(vf4; ( global 4-component vector of float) -0:? Constant: -0:? 5.000000 -0:? 5.000000 -0:? 5.000000 -0:? 5.000000 +0:19 Constant: +0:19 5.000000 +0:19 5.000000 +0:19 5.000000 +0:19 5.000000 0:20 add second child into first child ( temp 4-component vector of float) 0:20 'f4' ( temp 4-component vector of float) 0:20 Convert int to float ( temp float) diff --git a/Test/baseResults/hlsl.stringtoken.frag.out b/Test/baseResults/hlsl.stringtoken.frag.out index 18d32e0d8e..f2ca742cdd 100644 --- a/Test/baseResults/hlsl.stringtoken.frag.out +++ b/Test/baseResults/hlsl.stringtoken.frag.out @@ -10,11 +10,11 @@ gl_FragCoord origin is upper left 0:18 'psout' ( temp structure{ temp 4-component vector of float Color}) 0:18 Constant: 0:18 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 1.000000 +0:18 Constant: +0:18 0.000000 +0:18 0.000000 +0:18 0.000000 +0:18 1.000000 0:19 Branch: Return with expression 0:19 'psout' ( temp structure{ temp 4-component vector of float Color}) 0:16 Function Definition: main( ( temp void) @@ -47,11 +47,11 @@ gl_FragCoord origin is upper left 0:18 'psout' ( temp structure{ temp 4-component vector of float Color}) 0:18 Constant: 0:18 0 (const int) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 1.000000 +0:18 Constant: +0:18 0.000000 +0:18 0.000000 +0:18 0.000000 +0:18 1.000000 0:19 Branch: Return with expression 0:19 'psout' ( temp structure{ temp 4-component vector of float Color}) 0:16 Function Definition: main( ( temp void) diff --git a/Test/baseResults/hlsl.struct.split.nested.geom.out b/Test/baseResults/hlsl.struct.split.nested.geom.out index 642152ba04..1abe4c385c 100644 --- a/Test/baseResults/hlsl.struct.split.nested.geom.out +++ b/Test/baseResults/hlsl.struct.split.nested.geom.out @@ -18,11 +18,11 @@ output primitive = triangle_strip 0:27 0 (const int) 0:27 Constant: 0:27 0 (const int) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:27 Constant: +0:27 1.000000 +0:27 2.000000 +0:27 3.000000 +0:27 4.000000 0:28 move second child to first child ( temp 2-component vector of float) 0:28 tc: direct index for structure ( temp 2-component vector of float) 0:28 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) @@ -31,9 +31,9 @@ output primitive = triangle_strip 0:28 0 (const int) 0:28 Constant: 0:28 1 (const int) -0:? Constant: -0:? 5.000000 -0:? 6.000000 +0:28 Constant: +0:28 5.000000 +0:28 6.000000 0:29 move second child to first child ( temp float) 0:29 direct index ( temp float) 0:29 m0_array: direct index for structure ( temp 2-element array of float) @@ -235,11 +235,11 @@ output primitive = triangle_strip 0:27 0 (const int) 0:27 Constant: 0:27 0 (const int) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:27 Constant: +0:27 1.000000 +0:27 2.000000 +0:27 3.000000 +0:27 4.000000 0:28 move second child to first child ( temp 2-component vector of float) 0:28 tc: direct index for structure ( temp 2-component vector of float) 0:28 psIn: direct index for structure ( temp structure{ temp 4-component vector of float pos, temp 2-component vector of float tc}) @@ -248,9 +248,9 @@ output primitive = triangle_strip 0:28 0 (const int) 0:28 Constant: 0:28 1 (const int) -0:? Constant: -0:? 5.000000 -0:? 6.000000 +0:28 Constant: +0:28 5.000000 +0:28 6.000000 0:29 move second child to first child ( temp float) 0:29 direct index ( temp float) 0:29 m0_array: direct index for structure ( temp 2-element array of float) diff --git a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out index 2ac904eb74..a4e540f07e 100644 --- a/Test/baseResults/hlsl.structbuffer.append.fn.frag.out +++ b/Test/baseResults/hlsl.structbuffer.append.fn.frag.out @@ -22,11 +22,11 @@ gl_FragCoord origin is upper left 0:9 0 (const int) 0:9 Constant: 0:9 1 (const uint) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:9 Constant: +0:9 1.000000 +0:9 2.000000 +0:9 3.000000 +0:9 4.000000 0:10 Branch: Return with expression 0:10 indirect index ( buffer 4-component vector of float) 0:10 @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float) @@ -99,11 +99,11 @@ gl_FragCoord origin is upper left 0:9 0 (const int) 0:9 Constant: 0:9 1 (const uint) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:9 Constant: +0:9 1.000000 +0:9 2.000000 +0:9 3.000000 +0:9 4.000000 0:10 Branch: Return with expression 0:10 indirect index ( buffer 4-component vector of float) 0:10 @data: direct index for structure ( buffer unsized 1-element array of 4-component vector of float) diff --git a/Test/baseResults/hlsl.structbuffer.append.frag.out b/Test/baseResults/hlsl.structbuffer.append.frag.out index 5631624bd0..518b67f04e 100644 --- a/Test/baseResults/hlsl.structbuffer.append.frag.out +++ b/Test/baseResults/hlsl.structbuffer.append.frag.out @@ -19,11 +19,11 @@ gl_FragCoord origin is upper left 0:8 0 (const int) 0:8 Constant: 0:8 1 (const uint) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:8 Constant: +0:8 1.000000 +0:8 2.000000 +0:8 3.000000 +0:8 4.000000 0:10 Branch: Return with expression 0:10 indirect index (layout( row_major std430) buffer 4-component vector of float) 0:10 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float) @@ -83,11 +83,11 @@ gl_FragCoord origin is upper left 0:8 0 (const int) 0:8 Constant: 0:8 1 (const uint) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:8 Constant: +0:8 1.000000 +0:8 2.000000 +0:8 3.000000 +0:8 4.000000 0:10 Branch: Return with expression 0:10 indirect index (layout( row_major std430) buffer 4-component vector of float) 0:10 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of 4-component vector of float) diff --git a/Test/baseResults/hlsl.structbuffer.byte.frag.out b/Test/baseResults/hlsl.structbuffer.byte.frag.out index 40e8d9e9be..b5252bce79 100644 --- a/Test/baseResults/hlsl.structbuffer.byte.frag.out +++ b/Test/baseResults/hlsl.structbuffer.byte.frag.out @@ -28,7 +28,7 @@ gl_FragCoord origin is upper left 0:9 'pos' ( in uint) 0:9 Constant: 0:9 2 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:10 Construct vec4 ( temp 4-component vector of float) 0:? Convert uint to float ( temp 2-component vector of float) 0:? Sequence 0:10 move second child to first child ( temp int) @@ -60,7 +60,7 @@ gl_FragCoord origin is upper left 0:10 0.000000 0:10 Constant: 0:10 0.000000 -0:? Construct vec4 ( temp 4-component vector of float) +0:11 Construct vec4 ( temp 4-component vector of float) 0:? Convert uint to float ( temp 3-component vector of float) 0:? Sequence 0:11 move second child to first child ( temp int) @@ -192,7 +192,7 @@ gl_FragCoord origin is upper left 0:9 'pos' ( in uint) 0:9 Constant: 0:9 2 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:10 Construct vec4 ( temp 4-component vector of float) 0:? Convert uint to float ( temp 2-component vector of float) 0:? Sequence 0:10 move second child to first child ( temp int) @@ -224,7 +224,7 @@ gl_FragCoord origin is upper left 0:10 0.000000 0:10 Constant: 0:10 0.000000 -0:? Construct vec4 ( temp 4-component vector of float) +0:11 Construct vec4 ( temp 4-component vector of float) 0:? Convert uint to float ( temp 3-component vector of float) 0:? Sequence 0:11 move second child to first child ( temp int) diff --git a/Test/baseResults/hlsl.structbuffer.coherent.frag.out b/Test/baseResults/hlsl.structbuffer.coherent.frag.out index 95a9e67afe..3d97ee55e9 100644 --- a/Test/baseResults/hlsl.structbuffer.coherent.frag.out +++ b/Test/baseResults/hlsl.structbuffer.coherent.frag.out @@ -43,7 +43,7 @@ gl_FragCoord origin is upper left 0:19 1 (const int) 0:19 true case 0:20 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:20 Construct vec4 ( temp 4-component vector of float) 0:20 add ( temp 3-component vector of float) 0:20 color: direct index for structure ( temp 3-component vector of float) 0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) @@ -133,7 +133,7 @@ gl_FragCoord origin is upper left 0:19 1 (const int) 0:19 true case 0:20 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:20 Construct vec4 ( temp 4-component vector of float) 0:20 add ( temp 3-component vector of float) 0:20 color: direct index for structure ( temp 3-component vector of float) 0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) diff --git a/Test/baseResults/hlsl.structbuffer.frag.out b/Test/baseResults/hlsl.structbuffer.frag.out index 5979ff2d56..294a1c6c0b 100644 --- a/Test/baseResults/hlsl.structbuffer.frag.out +++ b/Test/baseResults/hlsl.structbuffer.frag.out @@ -40,7 +40,7 @@ gl_FragCoord origin is upper left 0:19 1 (const int) 0:19 true case 0:20 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:20 Construct vec4 ( temp 4-component vector of float) 0:20 add ( temp 3-component vector of float) 0:20 color: direct index for structure ( temp 3-component vector of float) 0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) @@ -136,7 +136,7 @@ gl_FragCoord origin is upper left 0:19 1 (const int) 0:19 true case 0:20 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:20 Construct vec4 ( temp 4-component vector of float) 0:20 add ( temp 3-component vector of float) 0:20 color: direct index for structure ( temp 3-component vector of float) 0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test, temp bool test2}) diff --git a/Test/baseResults/hlsl.structbuffer.incdec.frag.out b/Test/baseResults/hlsl.structbuffer.incdec.frag.out index 8ae9767507..2605777922 100644 --- a/Test/baseResults/hlsl.structbuffer.incdec.frag.out +++ b/Test/baseResults/hlsl.structbuffer.incdec.frag.out @@ -65,7 +65,7 @@ gl_FragCoord origin is upper left 0:16 Constant: 0:16 -1 (const int) 0:18 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:18 Construct vec4 ( temp 4-component vector of float) 0:18 Convert uint to float ( temp float) 0:18 direct index ( temp uint) 0:18 'result' ( temp 4-component vector of uint) @@ -169,7 +169,7 @@ gl_FragCoord origin is upper left 0:16 Constant: 0:16 -1 (const int) 0:18 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:18 Construct vec4 ( temp 4-component vector of float) 0:18 Convert uint to float ( temp float) 0:18 direct index ( temp uint) 0:18 'result' ( temp 4-component vector of uint) diff --git a/Test/baseResults/hlsl.structbuffer.rw.frag.out b/Test/baseResults/hlsl.structbuffer.rw.frag.out index d6eb8f3b64..1eb98aa126 100644 --- a/Test/baseResults/hlsl.structbuffer.rw.frag.out +++ b/Test/baseResults/hlsl.structbuffer.rw.frag.out @@ -43,7 +43,7 @@ gl_FragCoord origin is upper left 0:19 1 (const int) 0:19 true case 0:20 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:20 Construct vec4 ( temp 4-component vector of float) 0:20 add ( temp 3-component vector of float) 0:20 color: direct index for structure ( temp 3-component vector of float) 0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) @@ -133,7 +133,7 @@ gl_FragCoord origin is upper left 0:19 1 (const int) 0:19 true case 0:20 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:20 Construct vec4 ( temp 4-component vector of float) 0:20 add ( temp 3-component vector of float) 0:20 color: direct index for structure ( temp 3-component vector of float) 0:20 indirect index (layout( row_major std430) buffer structure{ temp 3-component vector of float color, temp bool test}) diff --git a/Test/baseResults/hlsl.swizzle.frag.out b/Test/baseResults/hlsl.swizzle.frag.out index 28f295df73..88ea3cc910 100644 --- a/Test/baseResults/hlsl.swizzle.frag.out +++ b/Test/baseResults/hlsl.swizzle.frag.out @@ -5,11 +5,11 @@ gl_FragCoord origin is upper left 0:1 Sequence 0:1 move second child to first child ( temp 4-component vector of float) 0:1 'AmbientColor' ( global 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 0.500000 -0:? 0.000000 -0:? 1.000000 +0:1 Constant: +0:1 1.000000 +0:1 0.500000 +0:1 0.000000 +0:1 1.000000 0:4 Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float) 0:4 Function Parameters: 0:4 'input' ( in 4-component vector of float) @@ -46,11 +46,11 @@ gl_FragCoord origin is upper left 0:1 Sequence 0:1 move second child to first child ( temp 4-component vector of float) 0:1 'AmbientColor' ( global 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 0.500000 -0:? 0.000000 -0:? 1.000000 +0:1 Constant: +0:1 1.000000 +0:1 0.500000 +0:1 0.000000 +0:1 1.000000 0:4 Function Definition: ShaderFunction(vf4; ( temp 4-component vector of float) 0:4 Function Parameters: 0:4 'input' ( in 4-component vector of float) diff --git a/Test/baseResults/hlsl.synthesizeInput.frag.out b/Test/baseResults/hlsl.synthesizeInput.frag.out index 2c1ef1d609..316a352907 100644 --- a/Test/baseResults/hlsl.synthesizeInput.frag.out +++ b/Test/baseResults/hlsl.synthesizeInput.frag.out @@ -7,7 +7,7 @@ gl_FragCoord origin is upper left 0:7 'input' ( in structure{ temp float interp, temp uint no_interp}) 0:? Sequence 0:8 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:8 Construct vec4 ( temp 4-component vector of float) 0:8 Convert uint to float ( temp float) 0:8 no_interp: direct index for structure ( temp uint) 0:8 'input' ( in structure{ temp float interp, temp uint no_interp}) @@ -58,7 +58,7 @@ gl_FragCoord origin is upper left 0:7 'input' ( in structure{ temp float interp, temp uint no_interp}) 0:? Sequence 0:8 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:8 Construct vec4 ( temp 4-component vector of float) 0:8 Convert uint to float ( temp float) 0:8 no_interp: direct index for structure ( temp uint) 0:8 'input' ( in structure{ temp float interp, temp uint no_interp}) diff --git a/Test/baseResults/hlsl.targetStruct1.frag.out b/Test/baseResults/hlsl.targetStruct1.frag.out index 6db5eb4e44..095d15d02a 100644 --- a/Test/baseResults/hlsl.targetStruct1.frag.out +++ b/Test/baseResults/hlsl.targetStruct1.frag.out @@ -12,7 +12,7 @@ gl_FragCoord origin is upper left 0:14 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2}) 0:14 Constant: 0:14 0 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:14 Construct vec4 ( temp 4-component vector of float) 0:14 Convert uint to float ( temp float) 0:14 no_interp: direct index for structure ( temp uint) 0:14 'input' ( in structure{ temp float interp, temp uint no_interp}) @@ -106,7 +106,7 @@ gl_FragCoord origin is upper left 0:14 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2}) 0:14 Constant: 0:14 0 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:14 Construct vec4 ( temp 4-component vector of float) 0:14 Convert uint to float ( temp float) 0:14 no_interp: direct index for structure ( temp uint) 0:14 'input' ( in structure{ temp float interp, temp uint no_interp}) diff --git a/Test/baseResults/hlsl.targetStruct2.frag.out b/Test/baseResults/hlsl.targetStruct2.frag.out index 051d26784f..c57ae008b1 100644 --- a/Test/baseResults/hlsl.targetStruct2.frag.out +++ b/Test/baseResults/hlsl.targetStruct2.frag.out @@ -12,7 +12,7 @@ gl_FragCoord origin is upper left 0:14 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2}) 0:14 Constant: 0:14 0 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:14 Construct vec4 ( temp 4-component vector of float) 0:14 Convert uint to float ( temp float) 0:14 no_interp: direct index for structure ( temp uint) 0:14 'input' ( in structure{ temp float interp, temp uint no_interp}) @@ -106,7 +106,7 @@ gl_FragCoord origin is upper left 0:14 'pso' ( temp structure{ temp 4-component vector of float o1, temp 4-component vector of float o2}) 0:14 Constant: 0:14 0 (const int) -0:? Construct vec4 ( temp 4-component vector of float) +0:14 Construct vec4 ( temp 4-component vector of float) 0:14 Convert uint to float ( temp float) 0:14 no_interp: direct index for structure ( temp uint) 0:14 'input' ( in structure{ temp float interp, temp uint no_interp}) diff --git a/Test/baseResults/hlsl.templatetypes.frag.out b/Test/baseResults/hlsl.templatetypes.frag.out index 1ffb263b20..842ed0d655 100644 --- a/Test/baseResults/hlsl.templatetypes.frag.out +++ b/Test/baseResults/hlsl.templatetypes.frag.out @@ -8,19 +8,19 @@ gl_FragCoord origin is upper left 0:4 Sequence 0:4 move second child to first child ( temp 4-component vector of float) 0:4 'r00' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:4 Constant: +0:4 1.000000 +0:4 2.000000 +0:4 3.000000 +0:4 4.000000 0:5 Sequence 0:5 move second child to first child ( temp 4-component vector of float) 0:5 'r01' ( temp 4-component vector of float) -0:? Constant: -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 +0:5 Constant: +0:5 2.000000 +0:5 3.000000 +0:5 4.000000 +0:5 5.000000 0:7 Sequence 0:7 move second child to first child ( temp 1-component vector of bool) 0:7 'r12' ( temp 1-component vector of bool) @@ -49,196 +49,196 @@ gl_FragCoord origin is upper left 0:13 Sequence 0:13 move second child to first child ( temp 2-component vector of bool) 0:13 'r20' ( temp 2-component vector of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) +0:13 Constant: +0:13 false (const bool) +0:13 true (const bool) 0:14 Sequence 0:14 move second child to first child ( temp 2-component vector of int) 0:14 'r21' ( temp 2-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:14 Constant: +0:14 1 (const int) +0:14 2 (const int) 0:15 Sequence 0:15 move second child to first child ( temp 2-component vector of float) 0:15 'r22' ( temp 2-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:15 Constant: +0:15 1.000000 +0:15 2.000000 0:16 Sequence 0:16 move second child to first child ( temp 2-component vector of double) 0:16 'r23' ( temp 2-component vector of double) -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:16 Constant: +0:16 1.000000 +0:16 2.000000 0:17 Sequence 0:17 move second child to first child ( temp 2-component vector of uint) 0:17 'r24' ( temp 2-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) +0:17 Constant: +0:17 1 (const uint) +0:17 2 (const uint) 0:19 Sequence 0:19 move second child to first child ( temp 3-component vector of bool) 0:19 'r30' ( temp 3-component vector of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) +0:19 Constant: +0:19 false (const bool) +0:19 true (const bool) +0:19 true (const bool) 0:20 Sequence 0:20 move second child to first child ( temp 3-component vector of int) 0:20 'r31' ( temp 3-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) +0:20 Constant: +0:20 1 (const int) +0:20 2 (const int) +0:20 3 (const int) 0:21 Sequence 0:21 move second child to first child ( temp 3-component vector of float) 0:21 'r32' ( temp 3-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:21 Constant: +0:21 1.000000 +0:21 2.000000 +0:21 3.000000 0:22 Sequence 0:22 move second child to first child ( temp 3-component vector of double) 0:22 'r33' ( temp 3-component vector of double) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:22 Constant: +0:22 1.000000 +0:22 2.000000 +0:22 3.000000 0:23 Sequence 0:23 move second child to first child ( temp 3-component vector of uint) 0:23 'r34' ( temp 3-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) +0:23 Constant: +0:23 1 (const uint) +0:23 2 (const uint) +0:23 3 (const uint) 0:25 Sequence 0:25 move second child to first child ( temp 4-component vector of bool) 0:25 'r40' ( temp 4-component vector of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) -0:? false (const bool) +0:25 Constant: +0:25 false (const bool) +0:25 true (const bool) +0:25 true (const bool) +0:25 false (const bool) 0:26 Sequence 0:26 move second child to first child ( temp 4-component vector of int) 0:26 'r41' ( temp 4-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 2 (const int) +0:26 3 (const int) +0:26 4 (const int) 0:27 Sequence 0:27 move second child to first child ( temp 4-component vector of float) 0:27 'r42' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:27 Constant: +0:27 1.000000 +0:27 2.000000 +0:27 3.000000 +0:27 4.000000 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of double) 0:28 'r43' ( temp 4-component vector of double) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:28 Constant: +0:28 1.000000 +0:28 2.000000 +0:28 3.000000 +0:28 4.000000 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'r44' ( temp 4-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:29 Constant: +0:29 1 (const uint) +0:29 2 (const uint) +0:29 3 (const uint) +0:29 4 (const uint) 0:31 Sequence 0:31 move second child to first child ( temp 4X4 matrix of float) 0:31 'r50' ( temp 4X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 -0:? 7.000000 -0:? 8.000000 -0:? 9.000000 -0:? 10.000000 -0:? 11.000000 -0:? 12.000000 -0:? 13.000000 -0:? 14.000000 -0:? 15.000000 +0:31 Constant: +0:31 0.000000 +0:31 1.000000 +0:31 2.000000 +0:31 3.000000 +0:31 4.000000 +0:31 5.000000 +0:31 6.000000 +0:31 7.000000 +0:31 8.000000 +0:31 9.000000 +0:31 10.000000 +0:31 11.000000 +0:31 12.000000 +0:31 13.000000 +0:31 14.000000 +0:31 15.000000 0:32 Sequence 0:32 move second child to first child ( temp 4X4 matrix of float) 0:32 'r51' ( temp 4X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 -0:? 7.000000 -0:? 8.000000 -0:? 9.000000 -0:? 10.000000 -0:? 11.000000 -0:? 12.000000 -0:? 13.000000 -0:? 14.000000 -0:? 15.000000 +0:32 Constant: +0:32 0.000000 +0:32 1.000000 +0:32 2.000000 +0:32 3.000000 +0:32 4.000000 +0:32 5.000000 +0:32 6.000000 +0:32 7.000000 +0:32 8.000000 +0:32 9.000000 +0:32 10.000000 +0:32 11.000000 +0:32 12.000000 +0:32 13.000000 +0:32 14.000000 +0:32 15.000000 0:35 Sequence 0:35 move second child to first child ( temp 2X3 matrix of float) 0:35 'r61' ( temp 2X3 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 +0:35 Constant: +0:35 1.000000 +0:35 2.000000 +0:35 3.000000 +0:35 4.000000 +0:35 5.000000 +0:35 6.000000 0:36 Sequence 0:36 move second child to first child ( temp 3X2 matrix of float) 0:36 'r62' ( temp 3X2 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 +0:36 Constant: +0:36 1.000000 +0:36 2.000000 +0:36 3.000000 +0:36 4.000000 +0:36 5.000000 +0:36 6.000000 0:39 Sequence 0:39 move second child to first child ( temp 4X2 matrix of float) 0:39 'r65' ( temp 4X2 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 -0:? 7.000000 -0:? 8.000000 +0:39 Constant: +0:39 1.000000 +0:39 2.000000 +0:39 3.000000 +0:39 4.000000 +0:39 5.000000 +0:39 6.000000 +0:39 7.000000 +0:39 8.000000 0:40 Sequence 0:40 move second child to first child ( temp 4X3 matrix of float) 0:40 'r66' ( temp 4X3 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 -0:? 7.000000 -0:? 8.000000 -0:? 9.000000 -0:? 10.000000 -0:? 11.000000 -0:? 12.000000 +0:40 Constant: +0:40 1.000000 +0:40 2.000000 +0:40 3.000000 +0:40 4.000000 +0:40 5.000000 +0:40 6.000000 +0:40 7.000000 +0:40 8.000000 +0:40 9.000000 +0:40 10.000000 +0:40 11.000000 +0:40 12.000000 0:45 Branch: Return with expression 0:45 Constant: 0:45 0.000000 @@ -264,19 +264,19 @@ gl_FragCoord origin is upper left 0:4 Sequence 0:4 move second child to first child ( temp 4-component vector of float) 0:4 'r00' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:4 Constant: +0:4 1.000000 +0:4 2.000000 +0:4 3.000000 +0:4 4.000000 0:5 Sequence 0:5 move second child to first child ( temp 4-component vector of float) 0:5 'r01' ( temp 4-component vector of float) -0:? Constant: -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 +0:5 Constant: +0:5 2.000000 +0:5 3.000000 +0:5 4.000000 +0:5 5.000000 0:7 Sequence 0:7 move second child to first child ( temp 1-component vector of bool) 0:7 'r12' ( temp 1-component vector of bool) @@ -305,196 +305,196 @@ gl_FragCoord origin is upper left 0:13 Sequence 0:13 move second child to first child ( temp 2-component vector of bool) 0:13 'r20' ( temp 2-component vector of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) +0:13 Constant: +0:13 false (const bool) +0:13 true (const bool) 0:14 Sequence 0:14 move second child to first child ( temp 2-component vector of int) 0:14 'r21' ( temp 2-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:14 Constant: +0:14 1 (const int) +0:14 2 (const int) 0:15 Sequence 0:15 move second child to first child ( temp 2-component vector of float) 0:15 'r22' ( temp 2-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:15 Constant: +0:15 1.000000 +0:15 2.000000 0:16 Sequence 0:16 move second child to first child ( temp 2-component vector of double) 0:16 'r23' ( temp 2-component vector of double) -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:16 Constant: +0:16 1.000000 +0:16 2.000000 0:17 Sequence 0:17 move second child to first child ( temp 2-component vector of uint) 0:17 'r24' ( temp 2-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) +0:17 Constant: +0:17 1 (const uint) +0:17 2 (const uint) 0:19 Sequence 0:19 move second child to first child ( temp 3-component vector of bool) 0:19 'r30' ( temp 3-component vector of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) +0:19 Constant: +0:19 false (const bool) +0:19 true (const bool) +0:19 true (const bool) 0:20 Sequence 0:20 move second child to first child ( temp 3-component vector of int) 0:20 'r31' ( temp 3-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) +0:20 Constant: +0:20 1 (const int) +0:20 2 (const int) +0:20 3 (const int) 0:21 Sequence 0:21 move second child to first child ( temp 3-component vector of float) 0:21 'r32' ( temp 3-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:21 Constant: +0:21 1.000000 +0:21 2.000000 +0:21 3.000000 0:22 Sequence 0:22 move second child to first child ( temp 3-component vector of double) 0:22 'r33' ( temp 3-component vector of double) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 +0:22 Constant: +0:22 1.000000 +0:22 2.000000 +0:22 3.000000 0:23 Sequence 0:23 move second child to first child ( temp 3-component vector of uint) 0:23 'r34' ( temp 3-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) +0:23 Constant: +0:23 1 (const uint) +0:23 2 (const uint) +0:23 3 (const uint) 0:25 Sequence 0:25 move second child to first child ( temp 4-component vector of bool) 0:25 'r40' ( temp 4-component vector of bool) -0:? Constant: -0:? false (const bool) -0:? true (const bool) -0:? true (const bool) -0:? false (const bool) +0:25 Constant: +0:25 false (const bool) +0:25 true (const bool) +0:25 true (const bool) +0:25 false (const bool) 0:26 Sequence 0:26 move second child to first child ( temp 4-component vector of int) 0:26 'r41' ( temp 4-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) -0:? 4 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 2 (const int) +0:26 3 (const int) +0:26 4 (const int) 0:27 Sequence 0:27 move second child to first child ( temp 4-component vector of float) 0:27 'r42' ( temp 4-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:27 Constant: +0:27 1.000000 +0:27 2.000000 +0:27 3.000000 +0:27 4.000000 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of double) 0:28 'r43' ( temp 4-component vector of double) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:28 Constant: +0:28 1.000000 +0:28 2.000000 +0:28 3.000000 +0:28 4.000000 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'r44' ( temp 4-component vector of uint) -0:? Constant: -0:? 1 (const uint) -0:? 2 (const uint) -0:? 3 (const uint) -0:? 4 (const uint) +0:29 Constant: +0:29 1 (const uint) +0:29 2 (const uint) +0:29 3 (const uint) +0:29 4 (const uint) 0:31 Sequence 0:31 move second child to first child ( temp 4X4 matrix of float) 0:31 'r50' ( temp 4X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 -0:? 7.000000 -0:? 8.000000 -0:? 9.000000 -0:? 10.000000 -0:? 11.000000 -0:? 12.000000 -0:? 13.000000 -0:? 14.000000 -0:? 15.000000 +0:31 Constant: +0:31 0.000000 +0:31 1.000000 +0:31 2.000000 +0:31 3.000000 +0:31 4.000000 +0:31 5.000000 +0:31 6.000000 +0:31 7.000000 +0:31 8.000000 +0:31 9.000000 +0:31 10.000000 +0:31 11.000000 +0:31 12.000000 +0:31 13.000000 +0:31 14.000000 +0:31 15.000000 0:32 Sequence 0:32 move second child to first child ( temp 4X4 matrix of float) 0:32 'r51' ( temp 4X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 -0:? 7.000000 -0:? 8.000000 -0:? 9.000000 -0:? 10.000000 -0:? 11.000000 -0:? 12.000000 -0:? 13.000000 -0:? 14.000000 -0:? 15.000000 +0:32 Constant: +0:32 0.000000 +0:32 1.000000 +0:32 2.000000 +0:32 3.000000 +0:32 4.000000 +0:32 5.000000 +0:32 6.000000 +0:32 7.000000 +0:32 8.000000 +0:32 9.000000 +0:32 10.000000 +0:32 11.000000 +0:32 12.000000 +0:32 13.000000 +0:32 14.000000 +0:32 15.000000 0:35 Sequence 0:35 move second child to first child ( temp 2X3 matrix of float) 0:35 'r61' ( temp 2X3 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 +0:35 Constant: +0:35 1.000000 +0:35 2.000000 +0:35 3.000000 +0:35 4.000000 +0:35 5.000000 +0:35 6.000000 0:36 Sequence 0:36 move second child to first child ( temp 3X2 matrix of float) 0:36 'r62' ( temp 3X2 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 +0:36 Constant: +0:36 1.000000 +0:36 2.000000 +0:36 3.000000 +0:36 4.000000 +0:36 5.000000 +0:36 6.000000 0:39 Sequence 0:39 move second child to first child ( temp 4X2 matrix of float) 0:39 'r65' ( temp 4X2 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 -0:? 7.000000 -0:? 8.000000 +0:39 Constant: +0:39 1.000000 +0:39 2.000000 +0:39 3.000000 +0:39 4.000000 +0:39 5.000000 +0:39 6.000000 +0:39 7.000000 +0:39 8.000000 0:40 Sequence 0:40 move second child to first child ( temp 4X3 matrix of float) 0:40 'r66' ( temp 4X3 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 -0:? 5.000000 -0:? 6.000000 -0:? 7.000000 -0:? 8.000000 -0:? 9.000000 -0:? 10.000000 -0:? 11.000000 -0:? 12.000000 +0:40 Constant: +0:40 1.000000 +0:40 2.000000 +0:40 3.000000 +0:40 4.000000 +0:40 5.000000 +0:40 6.000000 +0:40 7.000000 +0:40 8.000000 +0:40 9.000000 +0:40 10.000000 +0:40 11.000000 +0:40 12.000000 0:45 Branch: Return with expression 0:45 Constant: 0:45 0.000000 diff --git a/Test/baseResults/hlsl.texture.struct.frag.out b/Test/baseResults/hlsl.texture.struct.frag.out index 3d718de118..bf9ab6804d 100644 --- a/Test/baseResults/hlsl.texture.struct.frag.out +++ b/Test/baseResults/hlsl.texture.struct.frag.out @@ -14,9 +14,9 @@ gl_FragCoord origin is upper left 0:38 Construct combined texture-sampler ( temp sampler2D) 0:38 't1' ( in texture2D) 0:38 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.600000 -0:? 0.610000 +0:38 Constant: +0:38 0.600000 +0:38 0.610000 0:38 move second child to first child ( temp float) 0:38 c0: direct index for structure ( temp float) 0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2}) @@ -72,9 +72,9 @@ gl_FragCoord origin is upper left 0:39 Construct combined texture-sampler ( temp sampler2D) 0:39 't2' ( in texture2D) 0:39 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.600000 -0:? 0.610000 +0:39 Constant: +0:39 0.600000 +0:39 0.610000 0:39 move second child to first child ( temp float) 0:39 c0: direct index for structure ( temp float) 0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1}) @@ -134,9 +134,9 @@ gl_FragCoord origin is upper left 0:43 Construct combined texture-sampler ( temp sampler2D) 0:43 'g_tTex2s1' ( uniform texture2D) 0:43 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.110000 +0:43 Constant: +0:43 0.100000 +0:43 0.110000 0:43 move second child to first child ( temp float) 0:43 c0: direct index for structure ( temp float) 0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2}) @@ -190,9 +190,9 @@ gl_FragCoord origin is upper left 0:44 Construct combined texture-sampler ( temp sampler2D) 0:44 'g_tTex2s2' ( uniform texture2D) 0:44 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.210000 +0:44 Constant: +0:44 0.200000 +0:44 0.210000 0:44 move second child to first child ( temp float) 0:44 c0: direct index for structure ( temp float) 0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1}) @@ -249,9 +249,9 @@ gl_FragCoord origin is upper left 0:45 Construct combined texture-sampler ( temp sampler2D) 0:45 'g_tTex2s3' ( uniform texture2D) 0:45 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.310000 +0:45 Constant: +0:45 0.300000 +0:45 0.310000 0:45 move second child to first child ( temp float) 0:45 direct index ( temp float) 0:45 c0: direct index for structure ( temp 2-component vector of float) @@ -299,9 +299,9 @@ gl_FragCoord origin is upper left 0:46 Construct combined texture-sampler ( temp isampler2D) 0:46 'g_tTex2s4' ( uniform itexture2D) 0:46 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.410000 +0:46 Constant: +0:46 0.400000 +0:46 0.410000 0:46 move second child to first child ( temp int) 0:46 c0: direct index for structure ( temp int) 0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2}) @@ -357,9 +357,9 @@ gl_FragCoord origin is upper left 0:47 Construct combined texture-sampler ( temp usampler2D) 0:47 'g_tTex2s5' ( uniform utexture2D) 0:47 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.510000 +0:47 Constant: +0:47 0.500000 +0:47 0.510000 0:47 move second child to first child ( temp uint) 0:47 c0: direct index for structure ( temp uint) 0:47 '@sampleStructTemp' ( temp structure{ temp uint c0, temp uint c1}) @@ -435,9 +435,9 @@ gl_FragCoord origin is upper left 0:38 Construct combined texture-sampler ( temp sampler2D) 0:38 't1' ( in texture2D) 0:38 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.600000 -0:? 0.610000 +0:38 Constant: +0:38 0.600000 +0:38 0.610000 0:38 move second child to first child ( temp float) 0:38 c0: direct index for structure ( temp float) 0:38 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2}) @@ -493,9 +493,9 @@ gl_FragCoord origin is upper left 0:39 Construct combined texture-sampler ( temp sampler2D) 0:39 't2' ( in texture2D) 0:39 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.600000 -0:? 0.610000 +0:39 Constant: +0:39 0.600000 +0:39 0.610000 0:39 move second child to first child ( temp float) 0:39 c0: direct index for structure ( temp float) 0:39 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1}) @@ -555,9 +555,9 @@ gl_FragCoord origin is upper left 0:43 Construct combined texture-sampler ( temp sampler2D) 0:43 'g_tTex2s1' ( uniform texture2D) 0:43 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.110000 +0:43 Constant: +0:43 0.100000 +0:43 0.110000 0:43 move second child to first child ( temp float) 0:43 c0: direct index for structure ( temp float) 0:43 '@sampleStructTemp' ( temp structure{ temp float c0, temp 2-component vector of float c1, temp float c2}) @@ -611,9 +611,9 @@ gl_FragCoord origin is upper left 0:44 Construct combined texture-sampler ( temp sampler2D) 0:44 'g_tTex2s2' ( uniform texture2D) 0:44 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.200000 -0:? 0.210000 +0:44 Constant: +0:44 0.200000 +0:44 0.210000 0:44 move second child to first child ( temp float) 0:44 c0: direct index for structure ( temp float) 0:44 '@sampleStructTemp' ( temp structure{ temp float c0, temp 3-component vector of float c1}) @@ -670,9 +670,9 @@ gl_FragCoord origin is upper left 0:45 Construct combined texture-sampler ( temp sampler2D) 0:45 'g_tTex2s3' ( uniform texture2D) 0:45 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.300000 -0:? 0.310000 +0:45 Constant: +0:45 0.300000 +0:45 0.310000 0:45 move second child to first child ( temp float) 0:45 direct index ( temp float) 0:45 c0: direct index for structure ( temp 2-component vector of float) @@ -720,9 +720,9 @@ gl_FragCoord origin is upper left 0:46 Construct combined texture-sampler ( temp isampler2D) 0:46 'g_tTex2s4' ( uniform itexture2D) 0:46 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.400000 -0:? 0.410000 +0:46 Constant: +0:46 0.400000 +0:46 0.410000 0:46 move second child to first child ( temp int) 0:46 c0: direct index for structure ( temp int) 0:46 '@sampleStructTemp' ( temp structure{ temp int c0, temp 2-component vector of int c1, temp int c2}) @@ -778,9 +778,9 @@ gl_FragCoord origin is upper left 0:47 Construct combined texture-sampler ( temp usampler2D) 0:47 'g_tTex2s5' ( uniform utexture2D) 0:47 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.500000 -0:? 0.510000 +0:47 Constant: +0:47 0.500000 +0:47 0.510000 0:47 move second child to first child ( temp uint) 0:47 c0: direct index for structure ( temp uint) 0:47 '@sampleStructTemp' ( temp structure{ temp uint c0, temp uint c1}) diff --git a/Test/baseResults/hlsl.texture.subvec4.frag.out b/Test/baseResults/hlsl.texture.subvec4.frag.out index 8ba67cf60b..1a7816d8ed 100644 --- a/Test/baseResults/hlsl.texture.subvec4.frag.out +++ b/Test/baseResults/hlsl.texture.subvec4.frag.out @@ -92,32 +92,32 @@ gl_FragCoord origin is upper left 0:29 Construct float ( temp float) 0:? textureFetch ( temp 4-component vector of float) 0:29 'g_tTex2dmsf1' ( uniform texture2DMS) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 2 (const int) 0:29 Constant: 0:29 3 (const int) 0:30 Construct vec2 ( temp 2-component vector of float) 0:? textureFetch ( temp 4-component vector of float) 0:30 'g_tTex2dmsf2' ( uniform texture2DMS) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 2 (const int) 0:30 Constant: 0:30 3 (const int) 0:31 Construct vec3 ( temp 3-component vector of float) 0:? textureFetch ( temp 4-component vector of float) 0:31 'g_tTex2dmsf3' ( uniform texture2DMS) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 2 (const int) 0:31 Constant: 0:31 3 (const int) 0:32 textureFetch ( temp 4-component vector of float) 0:32 'g_tTex2dmsf4' ( uniform texture2DMS) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:32 Constant: +0:32 1 (const int) +0:32 2 (const int) 0:32 Constant: 0:32 3 (const int) 0:34 Construct float ( temp float) @@ -125,32 +125,32 @@ gl_FragCoord origin is upper left 0:34 Construct combined texture-sampler ( temp sampler2D) 0:34 'g_tTex2df1' ( uniform texture2D) 0:34 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:34 Constant: +0:34 0.100000 +0:34 0.200000 0:35 Construct vec2 ( temp 2-component vector of float) 0:? texture ( temp 4-component vector of float) 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df2' ( uniform texture2D) 0:35 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 0:36 Construct vec3 ( temp 3-component vector of float) 0:? texture ( temp 4-component vector of float) 0:36 Construct combined texture-sampler ( temp sampler2D) 0:36 'g_tTex2df3' ( uniform texture2D) 0:36 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 0:37 texture ( temp 4-component vector of float) 0:37 Construct combined texture-sampler ( temp sampler2D) 0:37 'g_tTex2df4' ( uniform texture2D) 0:37 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:37 Constant: +0:37 0.100000 +0:37 0.200000 0:39 Branch: Return with expression 0:39 Constant: 0:39 0.000000 @@ -272,32 +272,32 @@ gl_FragCoord origin is upper left 0:29 Construct float ( temp float) 0:? textureFetch ( temp 4-component vector of float) 0:29 'g_tTex2dmsf1' ( uniform texture2DMS) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:29 Constant: +0:29 1 (const int) +0:29 2 (const int) 0:29 Constant: 0:29 3 (const int) 0:30 Construct vec2 ( temp 2-component vector of float) 0:? textureFetch ( temp 4-component vector of float) 0:30 'g_tTex2dmsf2' ( uniform texture2DMS) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:30 Constant: +0:30 1 (const int) +0:30 2 (const int) 0:30 Constant: 0:30 3 (const int) 0:31 Construct vec3 ( temp 3-component vector of float) 0:? textureFetch ( temp 4-component vector of float) 0:31 'g_tTex2dmsf3' ( uniform texture2DMS) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:31 Constant: +0:31 1 (const int) +0:31 2 (const int) 0:31 Constant: 0:31 3 (const int) 0:32 textureFetch ( temp 4-component vector of float) 0:32 'g_tTex2dmsf4' ( uniform texture2DMS) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) +0:32 Constant: +0:32 1 (const int) +0:32 2 (const int) 0:32 Constant: 0:32 3 (const int) 0:34 Construct float ( temp float) @@ -305,32 +305,32 @@ gl_FragCoord origin is upper left 0:34 Construct combined texture-sampler ( temp sampler2D) 0:34 'g_tTex2df1' ( uniform texture2D) 0:34 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:34 Constant: +0:34 0.100000 +0:34 0.200000 0:35 Construct vec2 ( temp 2-component vector of float) 0:? texture ( temp 4-component vector of float) 0:35 Construct combined texture-sampler ( temp sampler2D) 0:35 'g_tTex2df2' ( uniform texture2D) 0:35 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:35 Constant: +0:35 0.100000 +0:35 0.200000 0:36 Construct vec3 ( temp 3-component vector of float) 0:? texture ( temp 4-component vector of float) 0:36 Construct combined texture-sampler ( temp sampler2D) 0:36 'g_tTex2df3' ( uniform texture2D) 0:36 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:36 Constant: +0:36 0.100000 +0:36 0.200000 0:37 texture ( temp 4-component vector of float) 0:37 Construct combined texture-sampler ( temp sampler2D) 0:37 'g_tTex2df4' ( uniform texture2D) 0:37 'g_sSamp' ( uniform sampler) -0:? Constant: -0:? 0.100000 -0:? 0.200000 +0:37 Constant: +0:37 0.100000 +0:37 0.200000 0:39 Branch: Return with expression 0:39 Constant: 0:39 0.000000 diff --git a/Test/baseResults/hlsl.this.frag.out b/Test/baseResults/hlsl.this.frag.out index 47022ecae8..e6b54cf3d4 100644 --- a/Test/baseResults/hlsl.this.frag.out +++ b/Test/baseResults/hlsl.this.frag.out @@ -5,9 +5,9 @@ gl_FragCoord origin is upper left 0:1 Sequence 0:1 move second child to first child ( temp 2-component vector of float) 0:1 'var' ( global 2-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:1 Constant: +0:1 1.000000 +0:1 2.000000 0:6 Function Definition: type1::memFun1(vi3; ( temp int) 0:6 Function Parameters: 0:6 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) @@ -36,10 +36,10 @@ gl_FragCoord origin is upper left 0:11 Sequence 0:11 move second child to first child ( temp 3-component vector of int) 0:11 'var' ( temp 3-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) +0:11 Constant: +0:11 1 (const int) +0:11 2 (const int) +0:11 3 (const int) 0:12 Branch: Return with expression 0:12 add ( temp int) 0:12 add ( temp int) @@ -87,10 +87,10 @@ gl_FragCoord origin is upper left 0:25 'i' ( temp int) 0:25 Function Call: type1::memFun1(vi3; ( temp int) 0:25 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) -0:? Constant: -0:? 10 (const int) -0:? 11 (const int) -0:? 12 (const int) +0:25 Constant: +0:25 10 (const int) +0:25 11 (const int) +0:25 12 (const int) 0:26 add second child into first child ( temp int) 0:26 'i' ( temp int) 0:26 Function Call: type1::memFun2(i1; ( temp int) @@ -98,7 +98,7 @@ gl_FragCoord origin is upper left 0:26 Constant: 0:26 17 (const int) 0:28 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:28 Construct vec4 ( temp 4-component vector of float) 0:28 Convert int to float ( temp float) 0:28 'i' ( temp int) 0:28 Convert int to float ( temp float) @@ -127,9 +127,9 @@ gl_FragCoord origin is upper left 0:1 Sequence 0:1 move second child to first child ( temp 2-component vector of float) 0:1 'var' ( global 2-component vector of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 +0:1 Constant: +0:1 1.000000 +0:1 2.000000 0:6 Function Definition: type1::memFun1(vi3; ( temp int) 0:6 Function Parameters: 0:6 '@this' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) @@ -158,10 +158,10 @@ gl_FragCoord origin is upper left 0:11 Sequence 0:11 move second child to first child ( temp 3-component vector of int) 0:11 'var' ( temp 3-component vector of int) -0:? Constant: -0:? 1 (const int) -0:? 2 (const int) -0:? 3 (const int) +0:11 Constant: +0:11 1 (const int) +0:11 2 (const int) +0:11 3 (const int) 0:12 Branch: Return with expression 0:12 add ( temp int) 0:12 add ( temp int) @@ -209,10 +209,10 @@ gl_FragCoord origin is upper left 0:25 'i' ( temp int) 0:25 Function Call: type1::memFun1(vi3; ( temp int) 0:25 'T' ( temp structure{ temp 2-component vector of float bar, temp int var, temp int var2}) -0:? Constant: -0:? 10 (const int) -0:? 11 (const int) -0:? 12 (const int) +0:25 Constant: +0:25 10 (const int) +0:25 11 (const int) +0:25 12 (const int) 0:26 add second child into first child ( temp int) 0:26 'i' ( temp int) 0:26 Function Call: type1::memFun2(i1; ( temp int) @@ -220,7 +220,7 @@ gl_FragCoord origin is upper left 0:26 Constant: 0:26 17 (const int) 0:28 Branch: Return with expression -0:? Construct vec4 ( temp 4-component vector of float) +0:28 Construct vec4 ( temp 4-component vector of float) 0:28 Convert int to float ( temp float) 0:28 'i' ( temp int) 0:28 Convert int to float ( temp float) diff --git a/Test/baseResults/hlsl.tx.overload.frag.out b/Test/baseResults/hlsl.tx.overload.frag.out index de8b38bf1c..7fb0640eea 100644 --- a/Test/baseResults/hlsl.tx.overload.frag.out +++ b/Test/baseResults/hlsl.tx.overload.frag.out @@ -14,11 +14,11 @@ gl_FragCoord origin is upper left 0:9 'DummyTex' ( in texture2D) 0:? Sequence 0:9 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:9 Constant: +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 0:11 Function Definition: Func(I211; ( temp float) 0:11 Function Parameters: 0:11 'DummyTex' (layout( r32f) in image2D) @@ -31,11 +31,11 @@ gl_FragCoord origin is upper left 0:12 'DummyTex' (layout( rgba32f) in image2D) 0:? Sequence 0:12 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:12 Constant: +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 0:15 Function Definition: @main( ( temp 4-component vector of float) 0:15 Function Parameters: 0:? Sequence @@ -83,11 +83,11 @@ gl_FragCoord origin is upper left 0:9 'DummyTex' ( in texture2D) 0:? Sequence 0:9 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:9 Constant: +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 +0:9 0.000000 0:11 Function Definition: Func(I211; ( temp float) 0:11 Function Parameters: 0:11 'DummyTex' (layout( r32f) in image2D) @@ -100,11 +100,11 @@ gl_FragCoord origin is upper left 0:12 'DummyTex' (layout( rgba32f) in image2D) 0:? Sequence 0:12 Branch: Return with expression -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:12 Constant: +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 0:15 Function Definition: @main( ( temp 4-component vector of float) 0:15 Function Parameters: 0:? Sequence diff --git a/Test/baseResults/hlsl.type.half.frag.out b/Test/baseResults/hlsl.type.half.frag.out index ec7e46dd5d..68f1b2400b 100644 --- a/Test/baseResults/hlsl.type.half.frag.out +++ b/Test/baseResults/hlsl.type.half.frag.out @@ -39,11 +39,11 @@ gl_FragCoord origin is upper left 0:15 Sequence 0:15 move second child to first child ( temp 2X2 matrix of float) 0:15 'h22' ( temp 2X2 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:15 Constant: +0:15 1.000000 +0:15 2.000000 +0:15 3.000000 +0:15 4.000000 0:16 Sequence 0:16 move second child to first child ( temp 2X3 matrix of float) 0:16 'h23' ( temp 2X3 matrix of float) @@ -123,11 +123,11 @@ gl_FragCoord origin is upper left 0:15 Sequence 0:15 move second child to first child ( temp 2X2 matrix of float) 0:15 'h22' ( temp 2X2 matrix of float) -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:15 Constant: +0:15 1.000000 +0:15 2.000000 +0:15 3.000000 +0:15 4.000000 0:16 Sequence 0:16 move second child to first child ( temp 2X3 matrix of float) 0:16 'h23' ( temp 2X3 matrix of float) diff --git a/Test/baseResults/hlsl.type.type.conversion.all.frag.out b/Test/baseResults/hlsl.type.type.conversion.all.frag.out index 083c92969d..ae05dc2acd 100644 --- a/Test/baseResults/hlsl.type.type.conversion.all.frag.out +++ b/Test/baseResults/hlsl.type.type.conversion.all.frag.out @@ -122,9 +122,9 @@ ERROR: node is still EOpNull! 0:21 Sequence 0:21 move second child to first child ( temp 2-component vector of float) 0:21 'var14' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:21 Constant: +0:21 0.000000 +0:21 0.000000 0:22 Sequence 0:22 move second child to first child ( temp 3-component vector of float) 0:22 'var26' ( temp 3-component vector of float) @@ -135,10 +135,10 @@ ERROR: node is still EOpNull! 0:23 Sequence 0:23 move second child to first child ( temp 3-component vector of float) 0:23 'var28' ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:23 Constant: +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 0:24 Sequence 0:24 move second child to first child ( temp 4-component vector of float) 0:24 'var39' ( temp 4-component vector of float) @@ -150,19 +150,19 @@ ERROR: node is still EOpNull! 0:25 Sequence 0:25 move second child to first child ( temp 4-component vector of float) 0:25 'var42' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:25 Constant: +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 0:26 Sequence 0:26 move second child to first child ( temp 4-component vector of float) 0:26 'var43' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:26 Constant: +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 0:27 Sequence 0:27 move second child to first child ( temp 2X2 matrix of float) 0:27 'var52' ( temp 2X2 matrix of float) @@ -174,19 +174,19 @@ ERROR: node is still EOpNull! 0:28 Sequence 0:28 move second child to first child ( temp 2X2 matrix of float) 0:28 'var55' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 0:29 Sequence 0:29 move second child to first child ( temp 2X2 matrix of float) 0:29 'var56' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:29 0.000000 +0:29 0.000000 0:30 Sequence 0:30 move second child to first child ( temp 2X3 matrix of float) 0:30 'var65' ( temp 2X3 matrix of float) @@ -200,13 +200,13 @@ ERROR: node is still EOpNull! 0:31 Sequence 0:31 move second child to first child ( temp 2X3 matrix of float) 0:31 'var70' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:31 Constant: +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 0:32 Sequence 0:32 move second child to first child ( temp 2X4 matrix of float) 0:32 'var78' ( temp 2X4 matrix of float) @@ -222,15 +222,15 @@ ERROR: node is still EOpNull! 0:33 Sequence 0:33 move second child to first child ( temp 2X4 matrix of float) 0:33 'var84' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:33 Constant: +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 0:34 Sequence 0:34 move second child to first child ( temp 3X2 matrix of float) 0:34 'var91' ( temp 3X2 matrix of float) @@ -244,13 +244,13 @@ ERROR: node is still EOpNull! 0:35 Sequence 0:35 move second child to first child ( temp 3X2 matrix of float) 0:35 'var98' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 0:36 Sequence 0:36 move second child to first child ( temp 3X3 matrix of float) 0:36 'var104' ( temp 3X3 matrix of float) @@ -267,16 +267,16 @@ ERROR: node is still EOpNull! 0:37 Sequence 0:37 move second child to first child ( temp 3X3 matrix of float) 0:37 'var112' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:37 Constant: +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 0:38 Sequence 0:38 move second child to first child ( temp 3X4 matrix of float) 0:38 'var117' ( temp 3X4 matrix of float) @@ -296,19 +296,19 @@ ERROR: node is still EOpNull! 0:39 Sequence 0:39 move second child to first child ( temp 3X4 matrix of float) 0:39 'var126' ( temp 3X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:39 Constant: +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 0:40 Sequence 0:40 move second child to first child ( temp 4X2 matrix of float) 0:40 'var130' ( temp 4X2 matrix of float) @@ -324,15 +324,15 @@ ERROR: node is still EOpNull! 0:41 Sequence 0:41 move second child to first child ( temp 4X2 matrix of float) 0:41 'var140' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:41 Constant: +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 0:42 Sequence 0:42 move second child to first child ( temp 4X3 matrix of float) 0:42 'var143' ( temp 4X3 matrix of float) @@ -352,19 +352,19 @@ ERROR: node is still EOpNull! 0:43 Sequence 0:43 move second child to first child ( temp 4X3 matrix of float) 0:43 'var154' ( temp 4X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 0:44 Sequence 0:44 move second child to first child ( temp 4X4 matrix of float) 0:44 'var156' ( temp 4X4 matrix of float) @@ -388,385 +388,385 @@ ERROR: node is still EOpNull! 0:45 Sequence 0:45 move second child to first child ( temp 4X4 matrix of float) 0:45 'var168' ( temp 4X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:45 Constant: +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 0:46 Sequence 0:46 move second child to first child ( temp float) 0:46 'var1' ( temp float) -0:? Constant: -0:? 0.000000 +0:46 Constant: +0:46 0.000000 0:47 Sequence 0:47 move second child to first child ( temp float) 0:47 'var2' ( temp float) -0:? Constant: -0:? 0.000000 +0:47 Constant: +0:47 0.000000 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'var3' ( temp float) -0:? Constant: -0:? 0.000000 +0:48 Constant: +0:48 0.000000 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'var4' ( temp float) -0:? Constant: -0:? 0.000000 +0:49 Constant: +0:49 0.000000 0:50 Sequence 0:50 move second child to first child ( temp float) 0:50 'var5' ( temp float) -0:? Constant: -0:? 0.000000 +0:50 Constant: +0:50 0.000000 0:51 Sequence 0:51 move second child to first child ( temp float) 0:51 'var6' ( temp float) -0:? Constant: -0:? 0.000000 +0:51 Constant: +0:51 0.000000 0:52 Sequence 0:52 move second child to first child ( temp float) 0:52 'var7' ( temp float) -0:? Constant: -0:? 0.000000 +0:52 Constant: +0:52 0.000000 0:53 Sequence 0:53 move second child to first child ( temp float) 0:53 'var8' ( temp float) -0:? Constant: -0:? 0.000000 +0:53 Constant: +0:53 0.000000 0:54 Sequence 0:54 move second child to first child ( temp float) 0:54 'var9' ( temp float) -0:? Constant: -0:? 0.000000 +0:54 Constant: +0:54 0.000000 0:55 Sequence 0:55 move second child to first child ( temp float) 0:55 'var10' ( temp float) -0:? Constant: -0:? 0.000000 +0:55 Constant: +0:55 0.000000 0:56 Sequence 0:56 move second child to first child ( temp float) 0:56 'var11' ( temp float) -0:? Constant: -0:? 0.000000 +0:56 Constant: +0:56 0.000000 0:57 Sequence 0:57 move second child to first child ( temp float) 0:57 'var12' ( temp float) -0:? Constant: -0:? 0.000000 +0:57 Constant: +0:57 0.000000 0:58 Sequence 0:58 move second child to first child ( temp 2-component vector of float) 0:58 'var15' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:58 Constant: +0:58 0.000000 +0:58 0.000000 0:59 Sequence 0:59 move second child to first child ( temp 2-component vector of float) 0:59 'var16' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:59 Constant: +0:59 0.000000 +0:59 0.000000 0:60 Sequence 0:60 move second child to first child ( temp 3-component vector of float) 0:60 'var29' ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:60 Constant: +0:60 0.000000 +0:60 0.000000 +0:60 0.000000 0:61 Sequence 0:61 move second child to first child ( temp 2X2 matrix of float) 0:61 'var57' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:61 Constant: +0:61 0.000000 +0:61 0.000000 +0:61 0.000000 +0:61 0.000000 0:62 Sequence 0:62 move second child to first child ( temp 2X2 matrix of float) 0:62 'var58' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:62 Constant: +0:62 0.000000 +0:62 0.000000 +0:62 0.000000 +0:62 0.000000 0:63 Sequence 0:63 move second child to first child ( temp 2X2 matrix of float) 0:63 'var59' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:63 Constant: +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 0:64 Sequence 0:64 move second child to first child ( temp 2X2 matrix of float) 0:64 'var60' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:64 Constant: +0:64 0.000000 +0:64 0.000000 +0:64 0.000000 +0:64 0.000000 0:65 Sequence 0:65 move second child to first child ( temp 2X2 matrix of float) 0:65 'var61' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:65 Constant: +0:65 0.000000 +0:65 0.000000 +0:65 0.000000 +0:65 0.000000 0:66 Sequence 0:66 move second child to first child ( temp 2X2 matrix of float) 0:66 'var62' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:66 Constant: +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 0:67 Sequence 0:67 move second child to first child ( temp 2X2 matrix of float) 0:67 'var63' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 0:68 Sequence 0:68 move second child to first child ( temp 2X2 matrix of float) 0:68 'var64' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:68 Constant: +0:68 0.000000 +0:68 0.000000 +0:68 0.000000 +0:68 0.000000 0:69 Sequence 0:69 move second child to first child ( temp 2X3 matrix of float) 0:69 'var71' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:69 Constant: +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 0:70 Sequence 0:70 move second child to first child ( temp 2X3 matrix of float) 0:70 'var73' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:70 Constant: +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 0:71 Sequence 0:71 move second child to first child ( temp 2X3 matrix of float) 0:71 'var74' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:71 Constant: +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 0:72 Sequence 0:72 move second child to first child ( temp 2X3 matrix of float) 0:72 'var76' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:72 Constant: +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 0:73 Sequence 0:73 move second child to first child ( temp 2X3 matrix of float) 0:73 'var77' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:73 Constant: +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 0:74 Sequence 0:74 move second child to first child ( temp 2X4 matrix of float) 0:74 'var87' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:74 Constant: +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 0:75 Sequence 0:75 move second child to first child ( temp 2X4 matrix of float) 0:75 'var90' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:75 Constant: +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 0:76 Sequence 0:76 move second child to first child ( temp 3X2 matrix of float) 0:76 'var99' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:76 Constant: +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 0:77 Sequence 0:77 move second child to first child ( temp 3X2 matrix of float) 0:77 'var100' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:77 Constant: +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 0:78 Sequence 0:78 move second child to first child ( temp 3X2 matrix of float) 0:78 'var101' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:78 Constant: +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 0:79 Sequence 0:79 move second child to first child ( temp 3X2 matrix of float) 0:79 'var102' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 0:80 Sequence 0:80 move second child to first child ( temp 3X2 matrix of float) 0:80 'var103' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:80 Constant: +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 0:81 Sequence 0:81 move second child to first child ( temp 3X3 matrix of float) 0:81 'var113' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:81 Constant: +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 0:82 Sequence 0:82 move second child to first child ( temp 3X3 matrix of float) 0:82 'var115' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:82 Constant: +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 0:83 Sequence 0:83 move second child to first child ( temp 3X3 matrix of float) 0:83 'var116' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:83 Constant: +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 0:84 Sequence 0:84 move second child to first child ( temp 3X4 matrix of float) 0:84 'var129' ( temp 3X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:84 Constant: +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 0:85 Sequence 0:85 move second child to first child ( temp 4X2 matrix of float) 0:85 'var141' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:85 Constant: +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 0:86 Sequence 0:86 move second child to first child ( temp 4X2 matrix of float) 0:86 'var142' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:86 Constant: +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 0:87 Sequence 0:87 move second child to first child ( temp 4X3 matrix of float) 0:87 'var155' ( temp 4X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:87 Constant: +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 0:188 Branch: Return with expression 0:188 Constant: 0:188 0.000000 @@ -806,9 +806,9 @@ ERROR: node is still EOpNull! 0:21 Sequence 0:21 move second child to first child ( temp 2-component vector of float) 0:21 'var14' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:21 Constant: +0:21 0.000000 +0:21 0.000000 0:22 Sequence 0:22 move second child to first child ( temp 3-component vector of float) 0:22 'var26' ( temp 3-component vector of float) @@ -819,10 +819,10 @@ ERROR: node is still EOpNull! 0:23 Sequence 0:23 move second child to first child ( temp 3-component vector of float) 0:23 'var28' ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:23 Constant: +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 0:24 Sequence 0:24 move second child to first child ( temp 4-component vector of float) 0:24 'var39' ( temp 4-component vector of float) @@ -834,19 +834,19 @@ ERROR: node is still EOpNull! 0:25 Sequence 0:25 move second child to first child ( temp 4-component vector of float) 0:25 'var42' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:25 Constant: +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 0:26 Sequence 0:26 move second child to first child ( temp 4-component vector of float) 0:26 'var43' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:26 Constant: +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 0:27 Sequence 0:27 move second child to first child ( temp 2X2 matrix of float) 0:27 'var52' ( temp 2X2 matrix of float) @@ -858,19 +858,19 @@ ERROR: node is still EOpNull! 0:28 Sequence 0:28 move second child to first child ( temp 2X2 matrix of float) 0:28 'var55' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 0:29 Sequence 0:29 move second child to first child ( temp 2X2 matrix of float) 0:29 'var56' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:29 0.000000 +0:29 0.000000 0:30 Sequence 0:30 move second child to first child ( temp 2X3 matrix of float) 0:30 'var65' ( temp 2X3 matrix of float) @@ -884,13 +884,13 @@ ERROR: node is still EOpNull! 0:31 Sequence 0:31 move second child to first child ( temp 2X3 matrix of float) 0:31 'var70' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:31 Constant: +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 0:32 Sequence 0:32 move second child to first child ( temp 2X4 matrix of float) 0:32 'var78' ( temp 2X4 matrix of float) @@ -906,15 +906,15 @@ ERROR: node is still EOpNull! 0:33 Sequence 0:33 move second child to first child ( temp 2X4 matrix of float) 0:33 'var84' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:33 Constant: +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 0:34 Sequence 0:34 move second child to first child ( temp 3X2 matrix of float) 0:34 'var91' ( temp 3X2 matrix of float) @@ -928,13 +928,13 @@ ERROR: node is still EOpNull! 0:35 Sequence 0:35 move second child to first child ( temp 3X2 matrix of float) 0:35 'var98' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 0:36 Sequence 0:36 move second child to first child ( temp 3X3 matrix of float) 0:36 'var104' ( temp 3X3 matrix of float) @@ -951,16 +951,16 @@ ERROR: node is still EOpNull! 0:37 Sequence 0:37 move second child to first child ( temp 3X3 matrix of float) 0:37 'var112' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:37 Constant: +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 0:38 Sequence 0:38 move second child to first child ( temp 3X4 matrix of float) 0:38 'var117' ( temp 3X4 matrix of float) @@ -980,19 +980,19 @@ ERROR: node is still EOpNull! 0:39 Sequence 0:39 move second child to first child ( temp 3X4 matrix of float) 0:39 'var126' ( temp 3X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:39 Constant: +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 0:40 Sequence 0:40 move second child to first child ( temp 4X2 matrix of float) 0:40 'var130' ( temp 4X2 matrix of float) @@ -1008,15 +1008,15 @@ ERROR: node is still EOpNull! 0:41 Sequence 0:41 move second child to first child ( temp 4X2 matrix of float) 0:41 'var140' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:41 Constant: +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 0:42 Sequence 0:42 move second child to first child ( temp 4X3 matrix of float) 0:42 'var143' ( temp 4X3 matrix of float) @@ -1036,19 +1036,19 @@ ERROR: node is still EOpNull! 0:43 Sequence 0:43 move second child to first child ( temp 4X3 matrix of float) 0:43 'var154' ( temp 4X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 0:44 Sequence 0:44 move second child to first child ( temp 4X4 matrix of float) 0:44 'var156' ( temp 4X4 matrix of float) @@ -1072,385 +1072,385 @@ ERROR: node is still EOpNull! 0:45 Sequence 0:45 move second child to first child ( temp 4X4 matrix of float) 0:45 'var168' ( temp 4X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:45 Constant: +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 0:46 Sequence 0:46 move second child to first child ( temp float) 0:46 'var1' ( temp float) -0:? Constant: -0:? 0.000000 +0:46 Constant: +0:46 0.000000 0:47 Sequence 0:47 move second child to first child ( temp float) 0:47 'var2' ( temp float) -0:? Constant: -0:? 0.000000 +0:47 Constant: +0:47 0.000000 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'var3' ( temp float) -0:? Constant: -0:? 0.000000 +0:48 Constant: +0:48 0.000000 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'var4' ( temp float) -0:? Constant: -0:? 0.000000 +0:49 Constant: +0:49 0.000000 0:50 Sequence 0:50 move second child to first child ( temp float) 0:50 'var5' ( temp float) -0:? Constant: -0:? 0.000000 +0:50 Constant: +0:50 0.000000 0:51 Sequence 0:51 move second child to first child ( temp float) 0:51 'var6' ( temp float) -0:? Constant: -0:? 0.000000 +0:51 Constant: +0:51 0.000000 0:52 Sequence 0:52 move second child to first child ( temp float) 0:52 'var7' ( temp float) -0:? Constant: -0:? 0.000000 +0:52 Constant: +0:52 0.000000 0:53 Sequence 0:53 move second child to first child ( temp float) 0:53 'var8' ( temp float) -0:? Constant: -0:? 0.000000 +0:53 Constant: +0:53 0.000000 0:54 Sequence 0:54 move second child to first child ( temp float) 0:54 'var9' ( temp float) -0:? Constant: -0:? 0.000000 +0:54 Constant: +0:54 0.000000 0:55 Sequence 0:55 move second child to first child ( temp float) 0:55 'var10' ( temp float) -0:? Constant: -0:? 0.000000 +0:55 Constant: +0:55 0.000000 0:56 Sequence 0:56 move second child to first child ( temp float) 0:56 'var11' ( temp float) -0:? Constant: -0:? 0.000000 +0:56 Constant: +0:56 0.000000 0:57 Sequence 0:57 move second child to first child ( temp float) 0:57 'var12' ( temp float) -0:? Constant: -0:? 0.000000 +0:57 Constant: +0:57 0.000000 0:58 Sequence 0:58 move second child to first child ( temp 2-component vector of float) 0:58 'var15' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:58 Constant: +0:58 0.000000 +0:58 0.000000 0:59 Sequence 0:59 move second child to first child ( temp 2-component vector of float) 0:59 'var16' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:59 Constant: +0:59 0.000000 +0:59 0.000000 0:60 Sequence 0:60 move second child to first child ( temp 3-component vector of float) 0:60 'var29' ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:60 Constant: +0:60 0.000000 +0:60 0.000000 +0:60 0.000000 0:61 Sequence 0:61 move second child to first child ( temp 2X2 matrix of float) 0:61 'var57' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:61 Constant: +0:61 0.000000 +0:61 0.000000 +0:61 0.000000 +0:61 0.000000 0:62 Sequence 0:62 move second child to first child ( temp 2X2 matrix of float) 0:62 'var58' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:62 Constant: +0:62 0.000000 +0:62 0.000000 +0:62 0.000000 +0:62 0.000000 0:63 Sequence 0:63 move second child to first child ( temp 2X2 matrix of float) 0:63 'var59' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:63 Constant: +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 0:64 Sequence 0:64 move second child to first child ( temp 2X2 matrix of float) 0:64 'var60' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:64 Constant: +0:64 0.000000 +0:64 0.000000 +0:64 0.000000 +0:64 0.000000 0:65 Sequence 0:65 move second child to first child ( temp 2X2 matrix of float) 0:65 'var61' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:65 Constant: +0:65 0.000000 +0:65 0.000000 +0:65 0.000000 +0:65 0.000000 0:66 Sequence 0:66 move second child to first child ( temp 2X2 matrix of float) 0:66 'var62' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:66 Constant: +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 0:67 Sequence 0:67 move second child to first child ( temp 2X2 matrix of float) 0:67 'var63' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 0:68 Sequence 0:68 move second child to first child ( temp 2X2 matrix of float) 0:68 'var64' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:68 Constant: +0:68 0.000000 +0:68 0.000000 +0:68 0.000000 +0:68 0.000000 0:69 Sequence 0:69 move second child to first child ( temp 2X3 matrix of float) 0:69 'var71' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:69 Constant: +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 0:70 Sequence 0:70 move second child to first child ( temp 2X3 matrix of float) 0:70 'var73' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:70 Constant: +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 0:71 Sequence 0:71 move second child to first child ( temp 2X3 matrix of float) 0:71 'var74' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:71 Constant: +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 0:72 Sequence 0:72 move second child to first child ( temp 2X3 matrix of float) 0:72 'var76' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:72 Constant: +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 0:73 Sequence 0:73 move second child to first child ( temp 2X3 matrix of float) 0:73 'var77' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:73 Constant: +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 0:74 Sequence 0:74 move second child to first child ( temp 2X4 matrix of float) 0:74 'var87' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:74 Constant: +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 0:75 Sequence 0:75 move second child to first child ( temp 2X4 matrix of float) 0:75 'var90' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:75 Constant: +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 0:76 Sequence 0:76 move second child to first child ( temp 3X2 matrix of float) 0:76 'var99' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:76 Constant: +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 0:77 Sequence 0:77 move second child to first child ( temp 3X2 matrix of float) 0:77 'var100' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:77 Constant: +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 0:78 Sequence 0:78 move second child to first child ( temp 3X2 matrix of float) 0:78 'var101' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:78 Constant: +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 0:79 Sequence 0:79 move second child to first child ( temp 3X2 matrix of float) 0:79 'var102' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 0:80 Sequence 0:80 move second child to first child ( temp 3X2 matrix of float) 0:80 'var103' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:80 Constant: +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 0:81 Sequence 0:81 move second child to first child ( temp 3X3 matrix of float) 0:81 'var113' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:81 Constant: +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 0:82 Sequence 0:82 move second child to first child ( temp 3X3 matrix of float) 0:82 'var115' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:82 Constant: +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 0:83 Sequence 0:83 move second child to first child ( temp 3X3 matrix of float) 0:83 'var116' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:83 Constant: +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 0:84 Sequence 0:84 move second child to first child ( temp 3X4 matrix of float) 0:84 'var129' ( temp 3X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:84 Constant: +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 0:85 Sequence 0:85 move second child to first child ( temp 4X2 matrix of float) 0:85 'var141' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:85 Constant: +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 0:86 Sequence 0:86 move second child to first child ( temp 4X2 matrix of float) 0:86 'var142' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:86 Constant: +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 0:87 Sequence 0:87 move second child to first child ( temp 4X3 matrix of float) 0:87 'var155' ( temp 4X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:87 Constant: +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 0:188 Branch: Return with expression 0:188 Constant: 0:188 0.000000 diff --git a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out index 407caf34a0..7320074664 100644 --- a/Test/baseResults/hlsl.type.type.conversion.valid.frag.out +++ b/Test/baseResults/hlsl.type.type.conversion.valid.frag.out @@ -19,9 +19,9 @@ gl_FragCoord origin is upper left 0:21 Sequence 0:21 move second child to first child ( temp 2-component vector of float) 0:21 'var14' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:21 Constant: +0:21 0.000000 +0:21 0.000000 0:22 Sequence 0:22 move second child to first child ( temp 3-component vector of float) 0:22 'var26' ( temp 3-component vector of float) @@ -32,10 +32,10 @@ gl_FragCoord origin is upper left 0:23 Sequence 0:23 move second child to first child ( temp 3-component vector of float) 0:23 'var28' ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:23 Constant: +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 0:24 Sequence 0:24 move second child to first child ( temp 4-component vector of float) 0:24 'var39' ( temp 4-component vector of float) @@ -47,19 +47,19 @@ gl_FragCoord origin is upper left 0:25 Sequence 0:25 move second child to first child ( temp 4-component vector of float) 0:25 'var42' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:25 Constant: +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 0:26 Sequence 0:26 move second child to first child ( temp 4-component vector of float) 0:26 'var43' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:26 Constant: +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 0:27 Sequence 0:27 move second child to first child ( temp 2X2 matrix of float) 0:27 'var52' ( temp 2X2 matrix of float) @@ -71,19 +71,19 @@ gl_FragCoord origin is upper left 0:28 Sequence 0:28 move second child to first child ( temp 2X2 matrix of float) 0:28 'var55' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 0:29 Sequence 0:29 move second child to first child ( temp 2X2 matrix of float) 0:29 'var56' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:29 0.000000 +0:29 0.000000 0:30 Sequence 0:30 move second child to first child ( temp 2X3 matrix of float) 0:30 'var65' ( temp 2X3 matrix of float) @@ -97,13 +97,13 @@ gl_FragCoord origin is upper left 0:31 Sequence 0:31 move second child to first child ( temp 2X3 matrix of float) 0:31 'var70' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:31 Constant: +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 0:32 Sequence 0:32 move second child to first child ( temp 2X4 matrix of float) 0:32 'var78' ( temp 2X4 matrix of float) @@ -119,15 +119,15 @@ gl_FragCoord origin is upper left 0:33 Sequence 0:33 move second child to first child ( temp 2X4 matrix of float) 0:33 'var84' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:33 Constant: +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 0:34 Sequence 0:34 move second child to first child ( temp 3X2 matrix of float) 0:34 'var91' ( temp 3X2 matrix of float) @@ -141,13 +141,13 @@ gl_FragCoord origin is upper left 0:35 Sequence 0:35 move second child to first child ( temp 3X2 matrix of float) 0:35 'var98' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 0:36 Sequence 0:36 move second child to first child ( temp 3X3 matrix of float) 0:36 'var104' ( temp 3X3 matrix of float) @@ -164,16 +164,16 @@ gl_FragCoord origin is upper left 0:37 Sequence 0:37 move second child to first child ( temp 3X3 matrix of float) 0:37 'var112' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:37 Constant: +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 0:38 Sequence 0:38 move second child to first child ( temp 3X4 matrix of float) 0:38 'var117' ( temp 3X4 matrix of float) @@ -193,19 +193,19 @@ gl_FragCoord origin is upper left 0:39 Sequence 0:39 move second child to first child ( temp 3X4 matrix of float) 0:39 'var126' ( temp 3X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:39 Constant: +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 0:40 Sequence 0:40 move second child to first child ( temp 4X2 matrix of float) 0:40 'var130' ( temp 4X2 matrix of float) @@ -221,15 +221,15 @@ gl_FragCoord origin is upper left 0:41 Sequence 0:41 move second child to first child ( temp 4X2 matrix of float) 0:41 'var140' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:41 Constant: +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 0:42 Sequence 0:42 move second child to first child ( temp 4X3 matrix of float) 0:42 'var143' ( temp 4X3 matrix of float) @@ -249,19 +249,19 @@ gl_FragCoord origin is upper left 0:43 Sequence 0:43 move second child to first child ( temp 4X3 matrix of float) 0:43 'var154' ( temp 4X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 0:44 Sequence 0:44 move second child to first child ( temp 4X4 matrix of float) 0:44 'var156' ( temp 4X4 matrix of float) @@ -285,385 +285,385 @@ gl_FragCoord origin is upper left 0:45 Sequence 0:45 move second child to first child ( temp 4X4 matrix of float) 0:45 'var168' ( temp 4X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:45 Constant: +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 0:46 Sequence 0:46 move second child to first child ( temp float) 0:46 'var1' ( temp float) -0:? Constant: -0:? 0.000000 +0:46 Constant: +0:46 0.000000 0:47 Sequence 0:47 move second child to first child ( temp float) 0:47 'var2' ( temp float) -0:? Constant: -0:? 0.000000 +0:47 Constant: +0:47 0.000000 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'var3' ( temp float) -0:? Constant: -0:? 0.000000 +0:48 Constant: +0:48 0.000000 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'var4' ( temp float) -0:? Constant: -0:? 0.000000 +0:49 Constant: +0:49 0.000000 0:50 Sequence 0:50 move second child to first child ( temp float) 0:50 'var5' ( temp float) -0:? Constant: -0:? 0.000000 +0:50 Constant: +0:50 0.000000 0:51 Sequence 0:51 move second child to first child ( temp float) 0:51 'var6' ( temp float) -0:? Constant: -0:? 0.000000 +0:51 Constant: +0:51 0.000000 0:52 Sequence 0:52 move second child to first child ( temp float) 0:52 'var7' ( temp float) -0:? Constant: -0:? 0.000000 +0:52 Constant: +0:52 0.000000 0:53 Sequence 0:53 move second child to first child ( temp float) 0:53 'var8' ( temp float) -0:? Constant: -0:? 0.000000 +0:53 Constant: +0:53 0.000000 0:54 Sequence 0:54 move second child to first child ( temp float) 0:54 'var9' ( temp float) -0:? Constant: -0:? 0.000000 +0:54 Constant: +0:54 0.000000 0:55 Sequence 0:55 move second child to first child ( temp float) 0:55 'var10' ( temp float) -0:? Constant: -0:? 0.000000 +0:55 Constant: +0:55 0.000000 0:56 Sequence 0:56 move second child to first child ( temp float) 0:56 'var11' ( temp float) -0:? Constant: -0:? 0.000000 +0:56 Constant: +0:56 0.000000 0:57 Sequence 0:57 move second child to first child ( temp float) 0:57 'var12' ( temp float) -0:? Constant: -0:? 0.000000 +0:57 Constant: +0:57 0.000000 0:58 Sequence 0:58 move second child to first child ( temp 2-component vector of float) 0:58 'var15' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:58 Constant: +0:58 0.000000 +0:58 0.000000 0:59 Sequence 0:59 move second child to first child ( temp 2-component vector of float) 0:59 'var16' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:59 Constant: +0:59 0.000000 +0:59 0.000000 0:60 Sequence 0:60 move second child to first child ( temp 3-component vector of float) 0:60 'var29' ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:60 Constant: +0:60 0.000000 +0:60 0.000000 +0:60 0.000000 0:61 Sequence 0:61 move second child to first child ( temp 2X2 matrix of float) 0:61 'var57' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:61 Constant: +0:61 0.000000 +0:61 0.000000 +0:61 0.000000 +0:61 0.000000 0:62 Sequence 0:62 move second child to first child ( temp 2X2 matrix of float) 0:62 'var58' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:62 Constant: +0:62 0.000000 +0:62 0.000000 +0:62 0.000000 +0:62 0.000000 0:63 Sequence 0:63 move second child to first child ( temp 2X2 matrix of float) 0:63 'var59' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:63 Constant: +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 0:64 Sequence 0:64 move second child to first child ( temp 2X2 matrix of float) 0:64 'var60' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:64 Constant: +0:64 0.000000 +0:64 0.000000 +0:64 0.000000 +0:64 0.000000 0:65 Sequence 0:65 move second child to first child ( temp 2X2 matrix of float) 0:65 'var61' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:65 Constant: +0:65 0.000000 +0:65 0.000000 +0:65 0.000000 +0:65 0.000000 0:66 Sequence 0:66 move second child to first child ( temp 2X2 matrix of float) 0:66 'var62' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:66 Constant: +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 0:67 Sequence 0:67 move second child to first child ( temp 2X2 matrix of float) 0:67 'var63' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 0:68 Sequence 0:68 move second child to first child ( temp 2X2 matrix of float) 0:68 'var64' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:68 Constant: +0:68 0.000000 +0:68 0.000000 +0:68 0.000000 +0:68 0.000000 0:69 Sequence 0:69 move second child to first child ( temp 2X3 matrix of float) 0:69 'var71' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:69 Constant: +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 0:70 Sequence 0:70 move second child to first child ( temp 2X3 matrix of float) 0:70 'var73' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:70 Constant: +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 0:71 Sequence 0:71 move second child to first child ( temp 2X3 matrix of float) 0:71 'var74' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:71 Constant: +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 0:72 Sequence 0:72 move second child to first child ( temp 2X3 matrix of float) 0:72 'var76' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:72 Constant: +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 0:73 Sequence 0:73 move second child to first child ( temp 2X3 matrix of float) 0:73 'var77' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:73 Constant: +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 0:74 Sequence 0:74 move second child to first child ( temp 2X4 matrix of float) 0:74 'var87' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:74 Constant: +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 0:75 Sequence 0:75 move second child to first child ( temp 2X4 matrix of float) 0:75 'var90' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:75 Constant: +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 0:76 Sequence 0:76 move second child to first child ( temp 3X2 matrix of float) 0:76 'var99' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:76 Constant: +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 0:77 Sequence 0:77 move second child to first child ( temp 3X2 matrix of float) 0:77 'var100' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:77 Constant: +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 0:78 Sequence 0:78 move second child to first child ( temp 3X2 matrix of float) 0:78 'var101' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:78 Constant: +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 0:79 Sequence 0:79 move second child to first child ( temp 3X2 matrix of float) 0:79 'var102' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 0:80 Sequence 0:80 move second child to first child ( temp 3X2 matrix of float) 0:80 'var103' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:80 Constant: +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 0:81 Sequence 0:81 move second child to first child ( temp 3X3 matrix of float) 0:81 'var113' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:81 Constant: +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 0:82 Sequence 0:82 move second child to first child ( temp 3X3 matrix of float) 0:82 'var115' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:82 Constant: +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 0:83 Sequence 0:83 move second child to first child ( temp 3X3 matrix of float) 0:83 'var116' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:83 Constant: +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 0:84 Sequence 0:84 move second child to first child ( temp 3X4 matrix of float) 0:84 'var129' ( temp 3X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:84 Constant: +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 0:85 Sequence 0:85 move second child to first child ( temp 4X2 matrix of float) 0:85 'var141' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:85 Constant: +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 0:86 Sequence 0:86 move second child to first child ( temp 4X2 matrix of float) 0:86 'var142' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:86 Constant: +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 0:87 Sequence 0:87 move second child to first child ( temp 4X3 matrix of float) 0:87 'var155' ( temp 4X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:87 Constant: +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 0:88 Branch: Return with expression 0:88 Constant: 0:88 0.000000 @@ -703,9 +703,9 @@ gl_FragCoord origin is upper left 0:21 Sequence 0:21 move second child to first child ( temp 2-component vector of float) 0:21 'var14' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:21 Constant: +0:21 0.000000 +0:21 0.000000 0:22 Sequence 0:22 move second child to first child ( temp 3-component vector of float) 0:22 'var26' ( temp 3-component vector of float) @@ -716,10 +716,10 @@ gl_FragCoord origin is upper left 0:23 Sequence 0:23 move second child to first child ( temp 3-component vector of float) 0:23 'var28' ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:23 Constant: +0:23 0.000000 +0:23 0.000000 +0:23 0.000000 0:24 Sequence 0:24 move second child to first child ( temp 4-component vector of float) 0:24 'var39' ( temp 4-component vector of float) @@ -731,19 +731,19 @@ gl_FragCoord origin is upper left 0:25 Sequence 0:25 move second child to first child ( temp 4-component vector of float) 0:25 'var42' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:25 Constant: +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 0:26 Sequence 0:26 move second child to first child ( temp 4-component vector of float) 0:26 'var43' ( temp 4-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:26 Constant: +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 +0:26 0.000000 0:27 Sequence 0:27 move second child to first child ( temp 2X2 matrix of float) 0:27 'var52' ( temp 2X2 matrix of float) @@ -755,19 +755,19 @@ gl_FragCoord origin is upper left 0:28 Sequence 0:28 move second child to first child ( temp 2X2 matrix of float) 0:28 'var55' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:28 Constant: +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 +0:28 0.000000 0:29 Sequence 0:29 move second child to first child ( temp 2X2 matrix of float) 0:29 'var56' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:29 Constant: +0:29 0.000000 +0:29 0.000000 +0:29 0.000000 +0:29 0.000000 0:30 Sequence 0:30 move second child to first child ( temp 2X3 matrix of float) 0:30 'var65' ( temp 2X3 matrix of float) @@ -781,13 +781,13 @@ gl_FragCoord origin is upper left 0:31 Sequence 0:31 move second child to first child ( temp 2X3 matrix of float) 0:31 'var70' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:31 Constant: +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 +0:31 0.000000 0:32 Sequence 0:32 move second child to first child ( temp 2X4 matrix of float) 0:32 'var78' ( temp 2X4 matrix of float) @@ -803,15 +803,15 @@ gl_FragCoord origin is upper left 0:33 Sequence 0:33 move second child to first child ( temp 2X4 matrix of float) 0:33 'var84' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:33 Constant: +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 +0:33 0.000000 0:34 Sequence 0:34 move second child to first child ( temp 3X2 matrix of float) 0:34 'var91' ( temp 3X2 matrix of float) @@ -825,13 +825,13 @@ gl_FragCoord origin is upper left 0:35 Sequence 0:35 move second child to first child ( temp 3X2 matrix of float) 0:35 'var98' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:35 Constant: +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 +0:35 0.000000 0:36 Sequence 0:36 move second child to first child ( temp 3X3 matrix of float) 0:36 'var104' ( temp 3X3 matrix of float) @@ -848,16 +848,16 @@ gl_FragCoord origin is upper left 0:37 Sequence 0:37 move second child to first child ( temp 3X3 matrix of float) 0:37 'var112' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:37 Constant: +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 +0:37 0.000000 0:38 Sequence 0:38 move second child to first child ( temp 3X4 matrix of float) 0:38 'var117' ( temp 3X4 matrix of float) @@ -877,19 +877,19 @@ gl_FragCoord origin is upper left 0:39 Sequence 0:39 move second child to first child ( temp 3X4 matrix of float) 0:39 'var126' ( temp 3X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:39 Constant: +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 +0:39 0.000000 0:40 Sequence 0:40 move second child to first child ( temp 4X2 matrix of float) 0:40 'var130' ( temp 4X2 matrix of float) @@ -905,15 +905,15 @@ gl_FragCoord origin is upper left 0:41 Sequence 0:41 move second child to first child ( temp 4X2 matrix of float) 0:41 'var140' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:41 Constant: +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 +0:41 0.000000 0:42 Sequence 0:42 move second child to first child ( temp 4X3 matrix of float) 0:42 'var143' ( temp 4X3 matrix of float) @@ -933,19 +933,19 @@ gl_FragCoord origin is upper left 0:43 Sequence 0:43 move second child to first child ( temp 4X3 matrix of float) 0:43 'var154' ( temp 4X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:43 Constant: +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 +0:43 0.000000 0:44 Sequence 0:44 move second child to first child ( temp 4X4 matrix of float) 0:44 'var156' ( temp 4X4 matrix of float) @@ -969,385 +969,385 @@ gl_FragCoord origin is upper left 0:45 Sequence 0:45 move second child to first child ( temp 4X4 matrix of float) 0:45 'var168' ( temp 4X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:45 Constant: +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 +0:45 0.000000 0:46 Sequence 0:46 move second child to first child ( temp float) 0:46 'var1' ( temp float) -0:? Constant: -0:? 0.000000 +0:46 Constant: +0:46 0.000000 0:47 Sequence 0:47 move second child to first child ( temp float) 0:47 'var2' ( temp float) -0:? Constant: -0:? 0.000000 +0:47 Constant: +0:47 0.000000 0:48 Sequence 0:48 move second child to first child ( temp float) 0:48 'var3' ( temp float) -0:? Constant: -0:? 0.000000 +0:48 Constant: +0:48 0.000000 0:49 Sequence 0:49 move second child to first child ( temp float) 0:49 'var4' ( temp float) -0:? Constant: -0:? 0.000000 +0:49 Constant: +0:49 0.000000 0:50 Sequence 0:50 move second child to first child ( temp float) 0:50 'var5' ( temp float) -0:? Constant: -0:? 0.000000 +0:50 Constant: +0:50 0.000000 0:51 Sequence 0:51 move second child to first child ( temp float) 0:51 'var6' ( temp float) -0:? Constant: -0:? 0.000000 +0:51 Constant: +0:51 0.000000 0:52 Sequence 0:52 move second child to first child ( temp float) 0:52 'var7' ( temp float) -0:? Constant: -0:? 0.000000 +0:52 Constant: +0:52 0.000000 0:53 Sequence 0:53 move second child to first child ( temp float) 0:53 'var8' ( temp float) -0:? Constant: -0:? 0.000000 +0:53 Constant: +0:53 0.000000 0:54 Sequence 0:54 move second child to first child ( temp float) 0:54 'var9' ( temp float) -0:? Constant: -0:? 0.000000 +0:54 Constant: +0:54 0.000000 0:55 Sequence 0:55 move second child to first child ( temp float) 0:55 'var10' ( temp float) -0:? Constant: -0:? 0.000000 +0:55 Constant: +0:55 0.000000 0:56 Sequence 0:56 move second child to first child ( temp float) 0:56 'var11' ( temp float) -0:? Constant: -0:? 0.000000 +0:56 Constant: +0:56 0.000000 0:57 Sequence 0:57 move second child to first child ( temp float) 0:57 'var12' ( temp float) -0:? Constant: -0:? 0.000000 +0:57 Constant: +0:57 0.000000 0:58 Sequence 0:58 move second child to first child ( temp 2-component vector of float) 0:58 'var15' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:58 Constant: +0:58 0.000000 +0:58 0.000000 0:59 Sequence 0:59 move second child to first child ( temp 2-component vector of float) 0:59 'var16' ( temp 2-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 +0:59 Constant: +0:59 0.000000 +0:59 0.000000 0:60 Sequence 0:60 move second child to first child ( temp 3-component vector of float) 0:60 'var29' ( temp 3-component vector of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:60 Constant: +0:60 0.000000 +0:60 0.000000 +0:60 0.000000 0:61 Sequence 0:61 move second child to first child ( temp 2X2 matrix of float) 0:61 'var57' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:61 Constant: +0:61 0.000000 +0:61 0.000000 +0:61 0.000000 +0:61 0.000000 0:62 Sequence 0:62 move second child to first child ( temp 2X2 matrix of float) 0:62 'var58' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:62 Constant: +0:62 0.000000 +0:62 0.000000 +0:62 0.000000 +0:62 0.000000 0:63 Sequence 0:63 move second child to first child ( temp 2X2 matrix of float) 0:63 'var59' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:63 Constant: +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 +0:63 0.000000 0:64 Sequence 0:64 move second child to first child ( temp 2X2 matrix of float) 0:64 'var60' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:64 Constant: +0:64 0.000000 +0:64 0.000000 +0:64 0.000000 +0:64 0.000000 0:65 Sequence 0:65 move second child to first child ( temp 2X2 matrix of float) 0:65 'var61' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:65 Constant: +0:65 0.000000 +0:65 0.000000 +0:65 0.000000 +0:65 0.000000 0:66 Sequence 0:66 move second child to first child ( temp 2X2 matrix of float) 0:66 'var62' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:66 Constant: +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 +0:66 0.000000 0:67 Sequence 0:67 move second child to first child ( temp 2X2 matrix of float) 0:67 'var63' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:67 Constant: +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 +0:67 0.000000 0:68 Sequence 0:68 move second child to first child ( temp 2X2 matrix of float) 0:68 'var64' ( temp 2X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:68 Constant: +0:68 0.000000 +0:68 0.000000 +0:68 0.000000 +0:68 0.000000 0:69 Sequence 0:69 move second child to first child ( temp 2X3 matrix of float) 0:69 'var71' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:69 Constant: +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 +0:69 0.000000 0:70 Sequence 0:70 move second child to first child ( temp 2X3 matrix of float) 0:70 'var73' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:70 Constant: +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 +0:70 0.000000 0:71 Sequence 0:71 move second child to first child ( temp 2X3 matrix of float) 0:71 'var74' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:71 Constant: +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 +0:71 0.000000 0:72 Sequence 0:72 move second child to first child ( temp 2X3 matrix of float) 0:72 'var76' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:72 Constant: +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 +0:72 0.000000 0:73 Sequence 0:73 move second child to first child ( temp 2X3 matrix of float) 0:73 'var77' ( temp 2X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:73 Constant: +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 +0:73 0.000000 0:74 Sequence 0:74 move second child to first child ( temp 2X4 matrix of float) 0:74 'var87' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:74 Constant: +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 +0:74 0.000000 0:75 Sequence 0:75 move second child to first child ( temp 2X4 matrix of float) 0:75 'var90' ( temp 2X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:75 Constant: +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 +0:75 0.000000 0:76 Sequence 0:76 move second child to first child ( temp 3X2 matrix of float) 0:76 'var99' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:76 Constant: +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 +0:76 0.000000 0:77 Sequence 0:77 move second child to first child ( temp 3X2 matrix of float) 0:77 'var100' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:77 Constant: +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 +0:77 0.000000 0:78 Sequence 0:78 move second child to first child ( temp 3X2 matrix of float) 0:78 'var101' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:78 Constant: +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 +0:78 0.000000 0:79 Sequence 0:79 move second child to first child ( temp 3X2 matrix of float) 0:79 'var102' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:79 Constant: +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 +0:79 0.000000 0:80 Sequence 0:80 move second child to first child ( temp 3X2 matrix of float) 0:80 'var103' ( temp 3X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:80 Constant: +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 +0:80 0.000000 0:81 Sequence 0:81 move second child to first child ( temp 3X3 matrix of float) 0:81 'var113' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:81 Constant: +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 +0:81 0.000000 0:82 Sequence 0:82 move second child to first child ( temp 3X3 matrix of float) 0:82 'var115' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:82 Constant: +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 +0:82 0.000000 0:83 Sequence 0:83 move second child to first child ( temp 3X3 matrix of float) 0:83 'var116' ( temp 3X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:83 Constant: +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 +0:83 0.000000 0:84 Sequence 0:84 move second child to first child ( temp 3X4 matrix of float) 0:84 'var129' ( temp 3X4 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:84 Constant: +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 +0:84 0.000000 0:85 Sequence 0:85 move second child to first child ( temp 4X2 matrix of float) 0:85 'var141' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:85 Constant: +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 +0:85 0.000000 0:86 Sequence 0:86 move second child to first child ( temp 4X2 matrix of float) 0:86 'var142' ( temp 4X2 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:86 Constant: +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 +0:86 0.000000 0:87 Sequence 0:87 move second child to first child ( temp 4X3 matrix of float) 0:87 'var155' ( temp 4X3 matrix of float) -0:? Constant: -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 -0:? 0.000000 +0:87 Constant: +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 +0:87 0.000000 0:88 Branch: Return with expression 0:88 Constant: 0:88 0.000000 diff --git a/Test/baseResults/hlsl.wavequery.frag.out b/Test/baseResults/hlsl.wavequery.frag.out index 59f3050e0d..df1b59697a 100644 --- a/Test/baseResults/hlsl.wavequery.frag.out +++ b/Test/baseResults/hlsl.wavequery.frag.out @@ -11,19 +11,19 @@ gl_FragCoord origin is upper left 0:3 true case 0:? Sequence 0:5 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:5 Constant: +0:5 1.000000 +0:5 2.000000 +0:5 3.000000 +0:5 4.000000 0:3 false case 0:? Sequence 0:9 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 3.000000 -0:? 2.000000 -0:? 1.000000 +0:9 Constant: +0:9 4.000000 +0:9 3.000000 +0:9 2.000000 +0:9 1.000000 0:2 Function Definition: PixelShaderFunction( ( temp void) 0:2 Function Parameters: 0:? Sequence @@ -49,19 +49,19 @@ gl_FragCoord origin is upper left 0:3 true case 0:? Sequence 0:5 Branch: Return with expression -0:? Constant: -0:? 1.000000 -0:? 2.000000 -0:? 3.000000 -0:? 4.000000 +0:5 Constant: +0:5 1.000000 +0:5 2.000000 +0:5 3.000000 +0:5 4.000000 0:3 false case 0:? Sequence 0:9 Branch: Return with expression -0:? Constant: -0:? 4.000000 -0:? 3.000000 -0:? 2.000000 -0:? 1.000000 +0:9 Constant: +0:9 4.000000 +0:9 3.000000 +0:9 2.000000 +0:9 1.000000 0:2 Function Definition: PixelShaderFunction( ( temp void) 0:2 Function Parameters: 0:? Sequence diff --git a/glslang/HLSL/hlslGrammar.cpp b/glslang/HLSL/hlslGrammar.cpp index df1625e001..bd4af922a0 100644 --- a/glslang/HLSL/hlslGrammar.cpp +++ b/glslang/HLSL/hlslGrammar.cpp @@ -3244,7 +3244,7 @@ bool HlslGrammar::acceptConstructor(TIntermTyped*& node) } // hook it up - node = parseContext.handleFunctionCall(arguments->getLoc(), constructorFunction, arguments); + node = parseContext.handleFunctionCall(token.loc, constructorFunction, arguments); return node != nullptr; } From 587261a817e2f28a0eaa544fc531207dc7efe02c Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Wed, 12 May 2021 20:07:52 +0800 Subject: [PATCH 167/365] Atomic memory function can only be used for shader storage block member or shared variable. The glsl spec says:A shader will fail to compile if the value passed to the mem argument of an atomic memory function does not correspond to a buffer or shared variable. --- Test/atomicAdd.comp | 19 +++++ Test/baseResults/atomicAdd.comp.out | 87 ++++++++++++++++++++++ glslang/MachineIndependent/ParseHelper.cpp | 6 ++ gtests/AST.FromFile.cpp | 1 + 4 files changed, 113 insertions(+) create mode 100644 Test/atomicAdd.comp create mode 100644 Test/baseResults/atomicAdd.comp.out diff --git a/Test/atomicAdd.comp b/Test/atomicAdd.comp new file mode 100644 index 0000000000..65aa9620aa --- /dev/null +++ b/Test/atomicAdd.comp @@ -0,0 +1,19 @@ +#version 320 es +layout(local_size_x = 1) in; + +struct structType{ + int y[3]; +}; + +layout(std430) buffer t2 { + structType f; +} t; + +buffer coherent Buffer { int x; }; +int z; + +void main() { + atomicAdd(x, 1); + atomicAdd(t.f.y[1], 1); + atomicAdd(z, 1); +} diff --git a/Test/baseResults/atomicAdd.comp.out b/Test/baseResults/atomicAdd.comp.out new file mode 100644 index 0000000000..6752a713ff --- /dev/null +++ b/Test/baseResults/atomicAdd.comp.out @@ -0,0 +1,87 @@ +atomicAdd.comp +ERROR: 0:18: 'atomicAdd' : Atomic memory function can only be used for shader storage block member or shared variable. +ERROR: 1 compilation errors. No code generated. + + +Shader version: 320 +local_size = (1, 1, 1) +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:16 Sequence +0:16 AtomicAdd ( global highp int) +0:16 x: direct index for structure (layout( column_major shared) coherent buffer highp int) +0:16 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1 (const int) +0:17 AtomicAdd ( global highp int) +0:17 direct index (layout( std430) temp highp int) +0:17 y: direct index for structure (layout( std430) global 3-element array of highp int) +0:17 f: direct index for structure (layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y}) +0:17 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 1 (const int) +0:18 AtomicAdd ( global highp int) +0:18 'z' ( global highp int) +0:18 Constant: +0:18 1 (const int) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) +0:? 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) +0:? 'z' ( global highp int) + + +Linked compute stage: + + +Shader version: 320 +local_size = (1, 1, 1) +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:16 Sequence +0:16 AtomicAdd ( global highp int) +0:16 x: direct index for structure (layout( column_major shared) coherent buffer highp int) +0:16 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1 (const int) +0:17 AtomicAdd ( global highp int) +0:17 direct index (layout( std430) temp highp int) +0:17 y: direct index for structure (layout( std430) global 3-element array of highp int) +0:17 f: direct index for structure (layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y}) +0:17 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 1 (const int) +0:18 AtomicAdd ( global highp int) +0:18 'z' ( global highp int) +0:18 Constant: +0:18 1 (const int) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) +0:? 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) +0:? 'z' ( global highp int) + diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 45c9362b3b..53c91d7863 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2330,6 +2330,12 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan (arg0->getType().isFloatingDomain())) { requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str()); } + + const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true); + const TQualifier& qualifier = base->getType().getQualifier(); + if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer) + error(loc,"Atomic memory function can only be used for shader storage block member or shared variable.", fnCandidate.getName().c_str(), ""); + break; } diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 77f0aafbfd..cedd558eb7 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -282,6 +282,7 @@ INSTANTIATE_TEST_SUITE_P( "terminate.vert", "negativeWorkGroupSize.comp", "textureoffset_sampler2darrayshadow.vert", + "atomicAdd.comp", })), FileNameAsCustomTestSuffix ); From 9724ee42df38043ec33eae4ed3b362a38b7b81e7 Mon Sep 17 00:00:00 2001 From: John Stiles Date: Tue, 18 May 2021 12:13:41 -0400 Subject: [PATCH 168/365] Fix mat4x2(scalar) constructor. --- Test/baseResults/matrix.frag.out | 60 +++++++++++ Test/matrix.frag | 115 +++++++++++----------- glslang/MachineIndependent/parseConst.cpp | 37 ++++--- 3 files changed, 138 insertions(+), 74 deletions(-) diff --git a/Test/baseResults/matrix.frag.out b/Test/baseResults/matrix.frag.out index f3bea4b226..5fd4eb67df 100644 --- a/Test/baseResults/matrix.frag.out +++ b/Test/baseResults/matrix.frag.out @@ -242,6 +242,36 @@ Shader version: 130 0:54 'un34' ( uniform 4X4 matrix of float) 0:54 'um43' ( uniform 4X4 matrix of float) 0:54 'v' ( smooth in 4-component vector of float) +0:56 Sequence +0:56 move second child to first child ( temp 4X2 matrix of float) +0:56 'm42' ( temp 4X2 matrix of float) +0:56 Constant: +0:56 42.000000 +0:56 0.000000 +0:56 0.000000 +0:56 42.000000 +0:56 0.000000 +0:56 0.000000 +0:56 0.000000 +0:56 0.000000 +0:57 Test condition and select ( temp void) +0:57 Condition +0:57 Compare Equal ( temp bool) +0:57 'm42' ( temp 4X2 matrix of float) +0:57 Constant: +0:57 42.000000 +0:57 0.000000 +0:57 0.000000 +0:57 42.000000 +0:57 0.000000 +0:57 0.000000 +0:57 0.000000 +0:57 0.000000 +0:57 true case +0:58 Sequence +0:58 add second child into first child ( temp 4-component vector of float) +0:58 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:58 'v' ( smooth in 4-component vector of float) 0:? Linker Objects 0:? 'colorTransform' ( uniform 3X3 matrix of float) 0:? 'Color' ( smooth in 3-component vector of float) @@ -495,6 +525,36 @@ Shader version: 130 0:54 'un34' ( uniform 4X4 matrix of float) 0:54 'um43' ( uniform 4X4 matrix of float) 0:54 'v' ( smooth in 4-component vector of float) +0:56 Sequence +0:56 move second child to first child ( temp 4X2 matrix of float) +0:56 'm42' ( temp 4X2 matrix of float) +0:56 Constant: +0:56 42.000000 +0:56 0.000000 +0:56 0.000000 +0:56 42.000000 +0:56 0.000000 +0:56 0.000000 +0:56 0.000000 +0:56 0.000000 +0:57 Test condition and select ( temp void) +0:57 Condition +0:57 Compare Equal ( temp bool) +0:57 'm42' ( temp 4X2 matrix of float) +0:57 Constant: +0:57 42.000000 +0:57 0.000000 +0:57 0.000000 +0:57 42.000000 +0:57 0.000000 +0:57 0.000000 +0:57 0.000000 +0:57 0.000000 +0:57 true case +0:58 Sequence +0:58 add second child into first child ( temp 4-component vector of float) +0:58 'gl_FragColor' ( fragColor 4-component vector of float FragColor) +0:58 'v' ( smooth in 4-component vector of float) 0:? Linker Objects 0:? 'colorTransform' ( uniform 3X3 matrix of float) 0:? 'Color' ( smooth in 3-component vector of float) diff --git a/Test/matrix.frag b/Test/matrix.frag index 150e0434f6..afafa34935 100644 --- a/Test/matrix.frag +++ b/Test/matrix.frag @@ -1,55 +1,60 @@ -#version 130 - -//#define TEST_POST_110 - -uniform mat3 colorTransform; -varying vec3 Color; -uniform mat4 m, n; - -#ifdef TEST_POST_110 -uniform mat4x3 um43; -uniform mat3x4 un34; -#else -uniform mat4 um43; -uniform mat4 un34; -#endif - -varying vec4 v; - -#ifdef TEST_POST_110 -varying vec3 u; -#else -varying vec4 u; -#endif - -void main() -{ - gl_FragColor = vec4(un34[1]); - gl_FragColor += vec4(Color * colorTransform, 1.0); - - if (m != n) - gl_FragColor += v; - else { - gl_FragColor += m * v; - gl_FragColor += v * (m - n); - } - -#ifdef TEST_POST_110 - mat3x4 m34 = outerProduct(v, u); - m34 += mat4(v.x); - m34 += mat4(u, u.x, u, u.x, u, u.x, u.x); -#else - mat4 m34 = mat4(v.x*u.x, v.x*u.y, v.x*u.z, v.x*u.w, - v.y*u.x, v.y*u.y, v.y*u.z, v.y*u.w, - v.z*u.x, v.z*u.y, v.z*u.z, v.z*u.w, - v.w*u.x, v.w*u.y, v.w*u.z, v.w*u.w); - m34 += mat4(v.x); - m34 += mat4(u, u.x, u, u.x, u, u.x, u.x); - -#endif - - if (m34 == un34) - gl_FragColor += m34 * u; - else - gl_FragColor += (un34 * um43) * v; -} +#version 130 + +//#define TEST_POST_110 + +uniform mat3 colorTransform; +varying vec3 Color; +uniform mat4 m, n; + +#ifdef TEST_POST_110 +uniform mat4x3 um43; +uniform mat3x4 un34; +#else +uniform mat4 um43; +uniform mat4 un34; +#endif + +varying vec4 v; + +#ifdef TEST_POST_110 +varying vec3 u; +#else +varying vec4 u; +#endif + +void main() +{ + gl_FragColor = vec4(un34[1]); + gl_FragColor += vec4(Color * colorTransform, 1.0); + + if (m != n) + gl_FragColor += v; + else { + gl_FragColor += m * v; + gl_FragColor += v * (m - n); + } + +#ifdef TEST_POST_110 + mat3x4 m34 = outerProduct(v, u); + m34 += mat4(v.x); + m34 += mat4(u, u.x, u, u.x, u, u.x, u.x); +#else + mat4 m34 = mat4(v.x*u.x, v.x*u.y, v.x*u.z, v.x*u.w, + v.y*u.x, v.y*u.y, v.y*u.z, v.y*u.w, + v.z*u.x, v.z*u.y, v.z*u.z, v.z*u.w, + v.w*u.x, v.w*u.y, v.w*u.z, v.w*u.w); + m34 += mat4(v.x); + m34 += mat4(u, u.x, u, u.x, u, u.x, u.x); + +#endif + + if (m34 == un34) + gl_FragColor += m34 * u; + else + gl_FragColor += (un34 * um43) * v; + + mat4x2 m42 = mat4x2(42); + if (m42 == mat4x2(42, 0, 0, 42, 0, 0, 0, 0)) { + gl_FragColor += v; + } +} diff --git a/glslang/MachineIndependent/parseConst.cpp b/glslang/MachineIndependent/parseConst.cpp index 7c04743ba6..6c182991f5 100644 --- a/glslang/MachineIndependent/parseConst.cpp +++ b/glslang/MachineIndependent/parseConst.cpp @@ -166,31 +166,30 @@ void TConstTraverser::visitConstantUnion(TIntermConstantUnion* node) } } else { // matrix from vector or scalar - int count = 0; - const int startIndex = index; int nodeComps = node->getType().computeNumComponents(); - for (int i = startIndex; i < endIndex; i++) { - if (i >= instanceSize) - return; - if (nodeComps == 1) { - // If there is a single scalar parameter to a matrix - // constructor, it is used to initialize all the - // components on the matrix's diagonal, with the - // remaining components initialized to 0.0. - if (i == startIndex || (i - startIndex) % (matrixRows + 1) == 0 ) - leftUnionArray[i] = rightUnionArray[count]; - else - leftUnionArray[i].setDConst(0.0); - } else { + if (nodeComps == 1) { + for (int c = 0; c < matrixCols; ++c) { + for (int r = 0; r < matrixRows; ++r) { + if (r == c) + leftUnionArray[index] = rightUnionArray[0]; + else + leftUnionArray[index].setDConst(0.0); + index++; + } + } + } else { + int count = 0; + for (int i = index; i < endIndex; i++) { + if (i >= instanceSize) + return; + // construct the matrix in column-major order, from // the components provided, in order leftUnionArray[i] = rightUnionArray[count]; - } - - index++; - if (nodeComps > 1) + index++; count++; + } } } } From 11c24e9adbd915de7651a447a85d69a8a51bfdc0 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 20 May 2021 09:17:53 -0600 Subject: [PATCH 169/365] Do true SPV type check for function array arg linkage Previous check was missing type difference between uniform array actual arg with stride decoration and the formal arg without. Now does logical or component-wise copy where needed. Fixes #2637 --- SPIRV/GlslangToSpv.cpp | 2 +- .../spv.1.4.OpCopyLogical.funcall.frag.out | 90 +++++++-------- .../spv.1.4.funcall.array.frag.out | 74 ++++++++++++ Test/baseResults/spv.funcall.array.frag.out | 106 ++++++++++++++++++ .../spv.multiStructFuncall.frag.out | 100 ++++++++--------- Test/spv.1.4.funcall.array.frag | 17 +++ Test/spv.funcall.array.frag | 17 +++ gtests/Spv.FromFile.cpp | 2 + 8 files changed, 308 insertions(+), 100 deletions(-) create mode 100644 Test/baseResults/spv.1.4.funcall.array.frag.out create mode 100644 Test/baseResults/spv.funcall.array.frag.out create mode 100644 Test/spv.1.4.funcall.array.frag create mode 100644 Test/spv.funcall.array.frag diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 1d8f199458..bf9ac4316d 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -5562,7 +5562,7 @@ spv::Id TGlslangToSpvTraverser::handleUserFunctionCall(const glslang::TIntermAgg ++lValueCount; } else { // process r-value, which involves a copy for a type mismatch - if (function->getParamType(a) != convertGlslangToSpvType(*argTypes[a]) || + if (function->getParamType(a) != builder.getTypeId(rValues[rValueCount]) || TranslatePrecisionDecoration(*argTypes[a]) != function->getParamPrecision(a)) { spv::Id argCopy = builder.createVariable(function->getParamPrecision(a), spv::StorageClassFunction, function->getParamType(a), "arg"); diff --git a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out index 68f7e520e1..a2458bafe6 100644 --- a/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out +++ b/Test/baseResults/spv.1.4.OpCopyLogical.funcall.frag.out @@ -1,12 +1,12 @@ spv.1.4.OpCopyLogical.funcall.frag // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 60 +// Id's are bound by 59 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 25 37 + EntryPoint Fragment 4 "main" 25 36 ExecutionMode 4 OriginUpperLeft Source GLSL 450 Name 4 "main" @@ -23,14 +23,12 @@ spv.1.4.OpCopyLogical.funcall.frag Name 23 "blockName" MemberName 23(blockName) 0 "s1" Name 25 "" - Name 31 "S" - MemberName 31(S) 0 "m" - Name 32 "arg" - Name 37 "s2" - Name 40 "param" - Name 45 "param" - Name 48 "param" - Name 56 "param" + Name 31 "arg" + Name 36 "s2" + Name 39 "param" + Name 44 "param" + Name 47 "param" + Name 55 "param" MemberDecorate 22(S) 0 ColMajor MemberDecorate 22(S) 0 Offset 0 MemberDecorate 22(S) 0 MatrixStride 16 @@ -38,7 +36,6 @@ spv.1.4.OpCopyLogical.funcall.frag Decorate 23(blockName) Block Decorate 25 DescriptorSet 0 Decorate 25 Binding 0 - MemberDecorate 31(S) 0 ColMajor 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -55,46 +52,45 @@ spv.1.4.OpCopyLogical.funcall.frag 26: TypeInt 32 1 27: 26(int) Constant 0 28: TypePointer StorageBuffer 22(S) - 31(S): TypeStruct 8 - 36: TypePointer Private 9(S) - 37(s2): 36(ptr) Variable Private + 35: TypePointer Private 9(S) + 36(s2): 35(ptr) Variable Private 4(main): 2 Function None 3 5: Label - 32(arg): 14(ptr) Variable Function - 40(param): 14(ptr) Variable Function - 45(param): 14(ptr) Variable Function - 48(param): 14(ptr) Variable Function - 56(param): 14(ptr) Variable Function + 31(arg): 14(ptr) Variable Function + 39(param): 14(ptr) Variable Function + 44(param): 14(ptr) Variable Function + 47(param): 14(ptr) Variable Function + 55(param): 14(ptr) Variable Function 29: 28(ptr) AccessChain 25 27 30: 22(S) Load 29 - 33: 9(S) CopyLogical 30 - Store 32(arg) 33 - 34: 9(S) Load 32(arg) - 35: 2 FunctionCall 12(fooConst(struct-S-mf441;) 34 - 38: 9(S) Load 37(s2) - 39: 2 FunctionCall 12(fooConst(struct-S-mf441;) 38 - 41: 28(ptr) AccessChain 25 27 - 42: 22(S) Load 41 - 43: 9(S) CopyLogical 42 - Store 40(param) 43 - 44: 2 FunctionCall 17(foo(struct-S-mf441;) 40(param) - 46: 9(S) Load 37(s2) - Store 45(param) 46 - 47: 2 FunctionCall 17(foo(struct-S-mf441;) 45(param) - 49: 28(ptr) AccessChain 25 27 - 50: 22(S) Load 49 - 51: 9(S) CopyLogical 50 - Store 48(param) 51 - 52: 2 FunctionCall 20(fooOut(struct-S-mf441;) 48(param) - 53: 9(S) Load 48(param) - 54: 28(ptr) AccessChain 25 27 - 55: 22(S) CopyLogical 53 - Store 54 55 - 57: 9(S) Load 37(s2) - Store 56(param) 57 - 58: 2 FunctionCall 20(fooOut(struct-S-mf441;) 56(param) - 59: 9(S) Load 56(param) - Store 37(s2) 59 + 32: 9(S) CopyLogical 30 + Store 31(arg) 32 + 33: 9(S) Load 31(arg) + 34: 2 FunctionCall 12(fooConst(struct-S-mf441;) 33 + 37: 9(S) Load 36(s2) + 38: 2 FunctionCall 12(fooConst(struct-S-mf441;) 37 + 40: 28(ptr) AccessChain 25 27 + 41: 22(S) Load 40 + 42: 9(S) CopyLogical 41 + Store 39(param) 42 + 43: 2 FunctionCall 17(foo(struct-S-mf441;) 39(param) + 45: 9(S) Load 36(s2) + Store 44(param) 45 + 46: 2 FunctionCall 17(foo(struct-S-mf441;) 44(param) + 48: 28(ptr) AccessChain 25 27 + 49: 22(S) Load 48 + 50: 9(S) CopyLogical 49 + Store 47(param) 50 + 51: 2 FunctionCall 20(fooOut(struct-S-mf441;) 47(param) + 52: 9(S) Load 47(param) + 53: 28(ptr) AccessChain 25 27 + 54: 22(S) CopyLogical 52 + Store 53 54 + 56: 9(S) Load 36(s2) + Store 55(param) 56 + 57: 2 FunctionCall 20(fooOut(struct-S-mf441;) 55(param) + 58: 9(S) Load 55(param) + Store 36(s2) 58 Return FunctionEnd 12(fooConst(struct-S-mf441;): 2 Function None 10 diff --git a/Test/baseResults/spv.1.4.funcall.array.frag.out b/Test/baseResults/spv.1.4.funcall.array.frag.out new file mode 100644 index 0000000000..d976bb1f47 --- /dev/null +++ b/Test/baseResults/spv.1.4.funcall.array.frag.out @@ -0,0 +1,74 @@ +spv.1.4.funcall.array.frag +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 42 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 27 31 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 16 "f(vf4[9];i1;" + Name 14 "a" + Name 15 "ix" + Name 20 "indexable" + Name 27 "color" + Name 29 "ub" + MemberName 29(ub) 0 "u" + Name 31 "" + Name 37 "arg" + Name 40 "param" + Decorate 27(color) Location 0 + Decorate 28 ArrayStride 16 + MemberDecorate 29(ub) 0 Offset 0 + Decorate 29(ub) Block + Decorate 31 DescriptorSet 0 + Decorate 31 Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 9 + 10: TypeArray 7(fvec4) 9 + 11: TypeInt 32 1 + 12: TypePointer Function 11(int) + 13: TypeFunction 7(fvec4) 10 12(ptr) + 19: TypePointer Function 10 + 21: TypePointer Function 7(fvec4) + 26: TypePointer Output 7(fvec4) + 27(color): 26(ptr) Variable Output + 28: TypeArray 7(fvec4) 9 + 29(ub): TypeStruct 28 + 30: TypePointer Uniform 29(ub) + 31: 30(ptr) Variable Uniform + 32: 11(int) Constant 0 + 33: TypePointer Uniform 28 + 36: 11(int) Constant 2 + 4(main): 2 Function None 3 + 5: Label + 37(arg): 19(ptr) Variable Function + 40(param): 12(ptr) Variable Function + 34: 33(ptr) AccessChain 31 32 + 35: 28 Load 34 + 38: 10 CopyLogical 35 + Store 37(arg) 38 + 39: 10 Load 37(arg) + Store 40(param) 36 + 41: 7(fvec4) FunctionCall 16(f(vf4[9];i1;) 39 40(param) + Store 27(color) 41 + Return + FunctionEnd +16(f(vf4[9];i1;): 7(fvec4) Function None 13 + 14(a): 10 FunctionParameter + 15(ix): 12(ptr) FunctionParameter + 17: Label + 20(indexable): 19(ptr) Variable Function + 18: 11(int) Load 15(ix) + Store 20(indexable) 14(a) + 22: 21(ptr) AccessChain 20(indexable) 18 + 23: 7(fvec4) Load 22 + ReturnValue 23 + FunctionEnd diff --git a/Test/baseResults/spv.funcall.array.frag.out b/Test/baseResults/spv.funcall.array.frag.out new file mode 100644 index 0000000000..616ba16c02 --- /dev/null +++ b/Test/baseResults/spv.funcall.array.frag.out @@ -0,0 +1,106 @@ +spv.funcall.array.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 66 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 27 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 16 "f(vf4[9];i1;" + Name 14 "a" + Name 15 "ix" + Name 20 "indexable" + Name 27 "color" + Name 29 "ub" + MemberName 29(ub) 0 "u" + Name 31 "" + Name 37 "arg" + Name 64 "param" + Decorate 27(color) Location 0 + Decorate 28 ArrayStride 16 + MemberDecorate 29(ub) 0 Offset 0 + Decorate 29(ub) Block + Decorate 31 DescriptorSet 0 + Decorate 31 Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 9 + 10: TypeArray 7(fvec4) 9 + 11: TypeInt 32 1 + 12: TypePointer Function 11(int) + 13: TypeFunction 7(fvec4) 10 12(ptr) + 19: TypePointer Function 10 + 21: TypePointer Function 7(fvec4) + 26: TypePointer Output 7(fvec4) + 27(color): 26(ptr) Variable Output + 28: TypeArray 7(fvec4) 9 + 29(ub): TypeStruct 28 + 30: TypePointer Uniform 29(ub) + 31: 30(ptr) Variable Uniform + 32: 11(int) Constant 0 + 33: TypePointer Uniform 28 + 36: 11(int) Constant 2 + 41: 11(int) Constant 1 + 46: 11(int) Constant 3 + 49: 11(int) Constant 4 + 52: 11(int) Constant 5 + 55: 11(int) Constant 6 + 58: 11(int) Constant 7 + 61: 11(int) Constant 8 + 4(main): 2 Function None 3 + 5: Label + 37(arg): 19(ptr) Variable Function + 64(param): 12(ptr) Variable Function + 34: 33(ptr) AccessChain 31 32 + 35: 28 Load 34 + 38: 7(fvec4) CompositeExtract 35 0 + 39: 21(ptr) AccessChain 37(arg) 32 + Store 39 38 + 40: 7(fvec4) CompositeExtract 35 1 + 42: 21(ptr) AccessChain 37(arg) 41 + Store 42 40 + 43: 7(fvec4) CompositeExtract 35 2 + 44: 21(ptr) AccessChain 37(arg) 36 + Store 44 43 + 45: 7(fvec4) CompositeExtract 35 3 + 47: 21(ptr) AccessChain 37(arg) 46 + Store 47 45 + 48: 7(fvec4) CompositeExtract 35 4 + 50: 21(ptr) AccessChain 37(arg) 49 + Store 50 48 + 51: 7(fvec4) CompositeExtract 35 5 + 53: 21(ptr) AccessChain 37(arg) 52 + Store 53 51 + 54: 7(fvec4) CompositeExtract 35 6 + 56: 21(ptr) AccessChain 37(arg) 55 + Store 56 54 + 57: 7(fvec4) CompositeExtract 35 7 + 59: 21(ptr) AccessChain 37(arg) 58 + Store 59 57 + 60: 7(fvec4) CompositeExtract 35 8 + 62: 21(ptr) AccessChain 37(arg) 61 + Store 62 60 + 63: 10 Load 37(arg) + Store 64(param) 36 + 65: 7(fvec4) FunctionCall 16(f(vf4[9];i1;) 63 64(param) + Store 27(color) 65 + Return + FunctionEnd +16(f(vf4[9];i1;): 7(fvec4) Function None 13 + 14(a): 10 FunctionParameter + 15(ix): 12(ptr) FunctionParameter + 17: Label + 20(indexable): 19(ptr) Variable Function + 18: 11(int) Load 15(ix) + Store 20(indexable) 14(a) + 22: 21(ptr) AccessChain 20(indexable) 18 + 23: 7(fvec4) Load 22 + ReturnValue 23 + FunctionEnd diff --git a/Test/baseResults/spv.multiStructFuncall.frag.out b/Test/baseResults/spv.multiStructFuncall.frag.out index dd57cd1c19..eec734a352 100644 --- a/Test/baseResults/spv.multiStructFuncall.frag.out +++ b/Test/baseResults/spv.multiStructFuncall.frag.out @@ -1,7 +1,7 @@ spv.multiStructFuncall.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 66 +// Id's are bound by 65 Capability Shader 1: ExtInstImport "GLSL.std.450" @@ -23,14 +23,12 @@ spv.multiStructFuncall.frag Name 23 "blockName" MemberName 23(blockName) 0 "s1" Name 25 "" - Name 31 "S" - MemberName 31(S) 0 "m" - Name 32 "arg" - Name 39 "s2" - Name 42 "param" - Name 48 "param" - Name 51 "param" - Name 62 "param" + Name 31 "arg" + Name 38 "s2" + Name 41 "param" + Name 47 "param" + Name 50 "param" + Name 61 "param" MemberDecorate 22(S) 0 ColMajor MemberDecorate 22(S) 0 Offset 0 MemberDecorate 22(S) 0 MatrixStride 16 @@ -38,7 +36,6 @@ spv.multiStructFuncall.frag Decorate 23(blockName) BufferBlock Decorate 25 DescriptorSet 0 Decorate 25 Binding 0 - MemberDecorate 31(S) 0 ColMajor 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -55,52 +52,51 @@ spv.multiStructFuncall.frag 26: TypeInt 32 1 27: 26(int) Constant 0 28: TypePointer Uniform 22(S) - 31(S): TypeStruct 8 - 34: TypePointer Function 8 - 38: TypePointer Private 9(S) - 39(s2): 38(ptr) Variable Private - 60: TypePointer Uniform 8 + 33: TypePointer Function 8 + 37: TypePointer Private 9(S) + 38(s2): 37(ptr) Variable Private + 59: TypePointer Uniform 8 4(main): 2 Function None 3 5: Label - 32(arg): 14(ptr) Variable Function - 42(param): 14(ptr) Variable Function - 48(param): 14(ptr) Variable Function - 51(param): 14(ptr) Variable Function - 62(param): 14(ptr) Variable Function + 31(arg): 14(ptr) Variable Function + 41(param): 14(ptr) Variable Function + 47(param): 14(ptr) Variable Function + 50(param): 14(ptr) Variable Function + 61(param): 14(ptr) Variable Function 29: 28(ptr) AccessChain 25 27 30: 22(S) Load 29 - 33: 8 CompositeExtract 30 0 - 35: 34(ptr) AccessChain 32(arg) 27 - Store 35 33 - 36: 9(S) Load 32(arg) - 37: 2 FunctionCall 12(fooConst(struct-S-mf441;) 36 - 40: 9(S) Load 39(s2) - 41: 2 FunctionCall 12(fooConst(struct-S-mf441;) 40 - 43: 28(ptr) AccessChain 25 27 - 44: 22(S) Load 43 - 45: 8 CompositeExtract 44 0 - 46: 34(ptr) AccessChain 42(param) 27 - Store 46 45 - 47: 2 FunctionCall 17(foo(struct-S-mf441;) 42(param) - 49: 9(S) Load 39(s2) - Store 48(param) 49 - 50: 2 FunctionCall 17(foo(struct-S-mf441;) 48(param) - 52: 28(ptr) AccessChain 25 27 - 53: 22(S) Load 52 - 54: 8 CompositeExtract 53 0 - 55: 34(ptr) AccessChain 51(param) 27 - Store 55 54 - 56: 2 FunctionCall 20(fooOut(struct-S-mf441;) 51(param) - 57: 9(S) Load 51(param) - 58: 28(ptr) AccessChain 25 27 - 59: 8 CompositeExtract 57 0 - 61: 60(ptr) AccessChain 58 27 - Store 61 59 - 63: 9(S) Load 39(s2) - Store 62(param) 63 - 64: 2 FunctionCall 20(fooOut(struct-S-mf441;) 62(param) - 65: 9(S) Load 62(param) - Store 39(s2) 65 + 32: 8 CompositeExtract 30 0 + 34: 33(ptr) AccessChain 31(arg) 27 + Store 34 32 + 35: 9(S) Load 31(arg) + 36: 2 FunctionCall 12(fooConst(struct-S-mf441;) 35 + 39: 9(S) Load 38(s2) + 40: 2 FunctionCall 12(fooConst(struct-S-mf441;) 39 + 42: 28(ptr) AccessChain 25 27 + 43: 22(S) Load 42 + 44: 8 CompositeExtract 43 0 + 45: 33(ptr) AccessChain 41(param) 27 + Store 45 44 + 46: 2 FunctionCall 17(foo(struct-S-mf441;) 41(param) + 48: 9(S) Load 38(s2) + Store 47(param) 48 + 49: 2 FunctionCall 17(foo(struct-S-mf441;) 47(param) + 51: 28(ptr) AccessChain 25 27 + 52: 22(S) Load 51 + 53: 8 CompositeExtract 52 0 + 54: 33(ptr) AccessChain 50(param) 27 + Store 54 53 + 55: 2 FunctionCall 20(fooOut(struct-S-mf441;) 50(param) + 56: 9(S) Load 50(param) + 57: 28(ptr) AccessChain 25 27 + 58: 8 CompositeExtract 56 0 + 60: 59(ptr) AccessChain 57 27 + Store 60 58 + 62: 9(S) Load 38(s2) + Store 61(param) 62 + 63: 2 FunctionCall 20(fooOut(struct-S-mf441;) 61(param) + 64: 9(S) Load 61(param) + Store 38(s2) 64 Return FunctionEnd 12(fooConst(struct-S-mf441;): 2 Function None 10 diff --git a/Test/spv.1.4.funcall.array.frag b/Test/spv.1.4.funcall.array.frag new file mode 100644 index 0000000000..4f9727ba11 --- /dev/null +++ b/Test/spv.1.4.funcall.array.frag @@ -0,0 +1,17 @@ +#version 450 core + +uniform ub { + vec4 u[9]; +}; + +vec4 f(const vec4 a[9], int ix) { + return a[ix]; +} + +out vec4 color; + +void main() +{ + color = f(u, 2); +} + diff --git a/Test/spv.funcall.array.frag b/Test/spv.funcall.array.frag new file mode 100644 index 0000000000..4f9727ba11 --- /dev/null +++ b/Test/spv.funcall.array.frag @@ -0,0 +1,17 @@ +#version 450 core + +uniform ub { + vec4 u[9]; +}; + +vec4 f(const vec4 a[9], int ix) { + return a[ix]; +} + +out vec4 color; + +void main() +{ + color = f(u, 2); +} + diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 5456fb8934..b679c53b82 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -351,6 +351,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.functionSemantics.frag", "spv.functionParameterTypes.frag", "spv.GeometryShaderPassthrough.geom", + "spv.funcall.array.frag", "spv.interpOps.frag", "spv.int64.frag", "spv.intcoopmat.comp", @@ -555,6 +556,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.1.4.OpCopyLogical.comp", "spv.1.4.OpCopyLogicalBool.comp", "spv.1.4.OpCopyLogical.funcall.frag", + "spv.1.4.funcall.array.frag", "spv.1.4.image.frag", "spv.1.4.sparseTexture.frag", "spv.1.4.texture.frag", From 340685705359c18315c9dd92cf3400924c0817e9 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 26 May 2021 16:14:23 -0600 Subject: [PATCH 170/365] Add missing libs to release GenericCodeGen, MachineIndependent and glslang-default-resource-limits Fixes #2648 --- .appveyor.yml | 3 +++ .travis.yml | 3 +++ 2 files changed, 6 insertions(+) diff --git a/.appveyor.yml b/.appveyor.yml index 500d4bd3ef..bf8c572603 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -77,8 +77,11 @@ after_test: bin\glslangValidator.exe bin\spirv-remap.exe include\glslang\* + lib\GenericCodeGen%SUFFIX%.lib lib\glslang%SUFFIX%.lib + lib\glslang-default-resource-limits%SUFFIX%.lib lib\HLSL%SUFFIX%.lib + lib\MachineIndependent%SUFFIX%.lib lib\OGLCompiler%SUFFIX%.lib lib\OSDependent%SUFFIX%.lib lib\SPIRV%SUFFIX%.lib diff --git a/.travis.yml b/.travis.yml index 87838b8212..cb0392efea 100644 --- a/.travis.yml +++ b/.travis.yml @@ -109,8 +109,11 @@ after_success: zip ${TARBALL} bin/glslangValidator include/glslang/* + lib/libGenericCodeGen${SUFFIX}.a lib/libglslang${SUFFIX}.a + lib/libglslang-default-resource-limits${SUFFIX}.a lib/libHLSL${SUFFIX}.a + lib/libMachineIndependent${SUFFIX}.a lib/libOGLCompiler${SUFFIX}.a lib/libOSDependent${SUFFIX}.a lib/libSPIRV${SUFFIX}.a From ec737378594e38a763e220cc8f07fa86ba8c6b98 Mon Sep 17 00:00:00 2001 From: syntheticmagus <33846034+syntheticmagus@users.noreply.github.com> Date: Fri, 28 May 2021 18:24:59 -0700 Subject: [PATCH 171/365] Add setters for true and false blocks of selection nodes, copying the pattern already used for the condition. --- glslang/Include/intermediate.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index f50d3ba121..677b09050d 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1677,7 +1677,9 @@ class TIntermSelection : public TIntermTyped { virtual TIntermTyped* getCondition() const { return condition; } virtual void setCondition(TIntermTyped* c) { condition = c; } virtual TIntermNode* getTrueBlock() const { return trueBlock; } + virtual void setTrueBlock(TIntermTyped* tb) { trueBlock = tb; } virtual TIntermNode* getFalseBlock() const { return falseBlock; } + virtual void setFalseBlock(TIntermTyped* fb) { falseBlock = fb; } virtual TIntermSelection* getAsSelectionNode() { return this; } virtual const TIntermSelection* getAsSelectionNode() const { return this; } From cfdeeb842d9a4df801587f5aaddc6f76c0d56ac7 Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Thu, 3 Jun 2021 13:42:57 -0400 Subject: [PATCH 172/365] Fix OOB write in matrix constructor In a matrix constructor that takes a number of components, as many components as necessary must be taken, with the rest discarded, as GLSL allows more components than necessary to be specified. For example, the following: mat4 m4 = mat4(v4, v4.yzwx, v4.zwx, v4.zwxy, v4.wxyz); is equivalent to: mat4 m4 = mat4(v4, v4.yzwx, v4.zwx, v4.zwxy, v4.w); glslang takes the components from the constructor and builds the single components of the matrix in a 2D array before constructing the matrix itself. It however did not check for extra parameters and was thus writing OOB to said 2D array. This is fixed in this change Signed-off-by: Shahbaz Youssefi --- SPIRV/SpvBuilder.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 1401bb0940..0482c5a9a3 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -2543,7 +2543,7 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& int row = 0; int col = 0; - for (int arg = 0; arg < (int)sources.size(); ++arg) { + for (int arg = 0; arg < (int)sources.size() && col < numCols; ++arg) { Id argComp = sources[arg]; for (int comp = 0; comp < getNumComponents(sources[arg]); ++comp) { if (getNumComponents(sources[arg]) > 1) { @@ -2555,6 +2555,10 @@ Id Builder::createMatrixConstructor(Decoration precision, const std::vector& row = 0; col++; } + if (col == numCols) { + // If more components are provided than fit the matrix, discard the rest. + break; + } } } } From 10a7137dc95bf205fa41ba6ce8db564a598f31f7 Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Tue, 1 Jun 2021 22:02:49 -0400 Subject: [PATCH 173/365] Fix UBSAN error with negating 0x8000'0000 Signed-off-by: Shahbaz Youssefi --- glslang/MachineIndependent/Constant.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 8dc04a42ce..4629cc2da5 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -529,7 +529,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EbtDouble: case EbtFloat16: case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break; - case EbtInt: newConstArray[i].setIConst(-unionArray[i].getIConst()); break; + // Note: avoid UBSAN error regarding negating 0x80000000 + case EbtInt: newConstArray[i].setIConst( + unionArray[i].getIConst() == 0x80000000 + ? -0x7FFFFFFF - 1 + : -unionArray[i].getIConst()); + break; case EbtUint: newConstArray[i].setUConst(static_cast(-static_cast(unionArray[i].getUConst()))); break; #ifndef GLSLANG_WEB case EbtInt8: newConstArray[i].setI8Const(-unionArray[i].getI8Const()); break; From 848d3a9447b35c2e1f62056d933028ae983b0ee6 Mon Sep 17 00:00:00 2001 From: John Kessenich Date: Fri, 5 Jun 2020 04:15:43 -0600 Subject: [PATCH 174/365] Implement GL_EXT_subgroup_uniform_control_flow. --- SPIRV/GLSL.ext.KHR.h | 1 + SPIRV/GlslangToSpv.cpp | 7 + SPIRV/doc.cpp | 1 + SPIRV/spirv.hpp | 1 + .../spv.subgroupUniformControlFlow.vert.out | 23 + Test/spv.subgroupUniformControlFlow.vert | 11 + glslang/MachineIndependent/ParseHelper.h | 2 + glslang/MachineIndependent/Versions.cpp | 3 + glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/attribute.cpp | 25 + glslang/MachineIndependent/attribute.h | 3 +- glslang/MachineIndependent/glslang.m4 | 23 +- glslang/MachineIndependent/glslang.y | 23 +- glslang/MachineIndependent/glslang_tab.cpp | 6992 +++++++++-------- glslang/MachineIndependent/glslang_tab.cpp.h | 4 +- glslang/MachineIndependent/intermOut.cpp | 3 + .../MachineIndependent/localintermediate.h | 5 + gtests/Spv.FromFile.cpp | 1 + 18 files changed, 3691 insertions(+), 3438 deletions(-) create mode 100644 Test/baseResults/spv.subgroupUniformControlFlow.vert.out create mode 100644 Test/spv.subgroupUniformControlFlow.vert diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index 175fa8d5c4..5eb3e94482 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -51,5 +51,6 @@ static const char* const E_SPV_KHR_ray_query = "SPV_KHR_ray_q static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragment_shading_rate"; static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_terminate_invocation"; static const char* const E_SPV_KHR_workgroup_memory_explicit_layout = "SPV_KHR_workgroup_memory_explicit_layout"; +static const char* const E_SPV_KHR_subgroup_uniform_control_flow = "SPV_KHR_subgroup_uniform_control_flow"; #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index bf9ac4316d..5a25c8d4e2 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1526,6 +1526,13 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addCapability(spv::CapabilityRayTraversalPrimitiveCullingKHR); } +#ifndef GLSLANG_WEB + if (glslangIntermediate->getSubgroupUniformControlFlow()) { + builder.addExtension(spv::E_SPV_KHR_subgroup_uniform_control_flow); + builder.addExecutionMode(shaderEntry, spv::ExecutionModeSubgroupUniformControlFlowKHR); + } +#endif + unsigned int mode; switch (glslangIntermediate->getStage()) { case EShLangVertex: diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 3da77bf7e8..633b03a784 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -188,6 +188,7 @@ const char* ExecutionModeString(int mode) case ExecutionModeRoundingModeRTE: return "RoundingModeRTE"; case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; + case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow"; case ExecutionModeOutputLinesNV: return "OutputLinesNV"; case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV"; diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index af629efac6..dfc1a9940a 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -150,6 +150,7 @@ enum ExecutionMode { ExecutionModeSubgroupsPerWorkgroupId = 37, ExecutionModeLocalSizeId = 38, ExecutionModeLocalSizeHintId = 39, + ExecutionModeSubgroupUniformControlFlowKHR = 4421, ExecutionModePostDepthCoverage = 4446, ExecutionModeDenormPreserve = 4459, ExecutionModeDenormFlushToZero = 4460, diff --git a/Test/baseResults/spv.subgroupUniformControlFlow.vert.out b/Test/baseResults/spv.subgroupUniformControlFlow.vert.out new file mode 100644 index 0000000000..2a2722d3cc --- /dev/null +++ b/Test/baseResults/spv.subgroupUniformControlFlow.vert.out @@ -0,0 +1,23 @@ +spv.subgroupUniformControlFlow.vert +WARNING: 0:7: '' : attribute with arguments not recognized, skipping + +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 6 + + Capability Shader + Extension "SPV_KHR_subgroup_uniform_control_flow" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + ExecutionMode 4 SubgroupUniformControlFlow + Source GLSL 460 + SourceExtension "GL_EXT_subgroup_uniform_control_flow" + Name 4 "main" + 2: TypeVoid + 3: TypeFunction 2 + 4(main): 2 Function None 3 + 5: Label + Return + FunctionEnd diff --git a/Test/spv.subgroupUniformControlFlow.vert b/Test/spv.subgroupUniformControlFlow.vert new file mode 100644 index 0000000000..02ac40d03d --- /dev/null +++ b/Test/spv.subgroupUniformControlFlow.vert @@ -0,0 +1,11 @@ +#version 460 + +#ifdef GL_EXT_subgroup_uniform_control_flow + +#extension GL_EXT_subgroup_uniform_control_flow : enable + +[[random(4)]] void main() [[subgroup_uniform_control_flow]] +{ +} + +#endif diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 6f00621af9..70d3572625 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -470,6 +470,8 @@ class TParseContext : public TParseContextBase { void handleSwitchAttributes(const TAttributes& attributes, TIntermNode*); // Determine loop control from attributes void handleLoopAttributes(const TAttributes& attributes, TIntermNode*); + // Function attributes + void handleFunctionAttributes(const TSourceLoc&, const TAttributes&, TFunction*); #endif void checkAndResizeMeshViewDim(const TSourceLoc&, TType&, bool isBlockMember); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 94fe1ab44e..c7ce0ca0c0 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -251,6 +251,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_16bit_storage] = EBhDisable; extensionBehavior[E_GL_EXT_shader_8bit_storage] = EBhDisable; + extensionBehavior[E_GL_EXT_subgroup_uniform_control_flow] = EBhDisable; // #line and #include extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable; @@ -415,6 +416,7 @@ void TParseVersions::getPreamble(std::string& preamble) } if (version >= 310) { preamble += "#define GL_EXT_null_initializer 1\n"; + preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n"; } } else { // !isEsProfile() @@ -546,6 +548,7 @@ void TParseVersions::getPreamble(std::string& preamble) } if (version >= 140) { preamble += "#define GL_EXT_null_initializer 1\n"; + preamble += "#define GL_EXT_subgroup_uniform_control_flow 1\n"; } #endif // GLSLANG_WEB } diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 25feb0b7bf..01f819daed 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -204,6 +204,7 @@ const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_s const char* const E_GL_EXT_shader_image_int64 = "GL_EXT_shader_image_int64"; const char* const E_GL_EXT_null_initializer = "GL_EXT_null_initializer"; const char* const E_GL_EXT_shared_memory_block = "GL_EXT_shared_memory_block"; +const char* const E_GL_EXT_subgroup_uniform_control_flow = "GL_EXT_subgroup_uniform_control_flow"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/glslang/MachineIndependent/attribute.cpp b/glslang/MachineIndependent/attribute.cpp index 9585518349..8a92f6ae09 100644 --- a/glslang/MachineIndependent/attribute.cpp +++ b/glslang/MachineIndependent/attribute.cpp @@ -123,6 +123,8 @@ TAttributeType TParseContext::attributeFromName(const TString& name) const return EatPeelCount; else if (name == "partial_count") return EatPartialCount; + else if (name == "subgroup_uniform_control_flow") + return EatSubgroupUniformControlFlow; else return EatNone; } @@ -341,6 +343,29 @@ void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermN } } + +// +// Function attributes +// +void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttributes& attributes, TFunction* function) +{ + for (auto it = attributes.begin(); it != attributes.end(); ++it) { + if (it->size() > 0) { + warn(loc, "attribute with arguments not recognized, skipping", "", ""); + continue; + } + + switch (it->name) { + case EatSubgroupUniformControlFlow: + intermediate.setSubgroupUniformControlFlow(); + break; + default: + warn(loc, "attribute does not apply to a function", "", ""); + break; + } + } +} + } // end namespace glslang #endif // GLSLANG_WEB diff --git a/glslang/MachineIndependent/attribute.h b/glslang/MachineIndependent/attribute.h index 38a943d283..c5b29176c4 100644 --- a/glslang/MachineIndependent/attribute.h +++ b/glslang/MachineIndependent/attribute.h @@ -118,7 +118,8 @@ namespace glslang { EatFormatR8ui, EatFormatUnknown, EatNonWritable, - EatNonReadable + EatNonReadable, + EatSubgroupUniformControlFlow, }; class TIntermAggregate; diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 4d37639df1..5b1d2a7eb8 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -944,6 +944,25 @@ function_prototype $$.function = $1; $$.loc = $2.loc; } + | function_declarator RIGHT_PAREN attribute { + $$.function = $1; + $$.loc = $2.loc; + parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes($2.loc, *$3, $$.function); + } + | attribute function_declarator RIGHT_PAREN { + $$.function = $2; + $$.loc = $3.loc; + parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes($3.loc, *$1, $$.function); + } + | attribute function_declarator RIGHT_PAREN attribute { + $$.function = $2; + $$.loc = $3.loc; + parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes($3.loc, *$1, $$.function); + parseContext.handleFunctionAttributes($3.loc, *$4, $$.function); + } ; function_declarator @@ -3713,6 +3732,7 @@ selection_statement } GLSLANG_WEB_EXCLUDE_ON | attribute selection_statement_nonattributed { + parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSelectionAttributes(*$1, $2); $$ = $2; } @@ -3760,6 +3780,7 @@ switch_statement } GLSLANG_WEB_EXCLUDE_ON | attribute switch_statement_nonattributed { + parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSwitchAttributes(*$1, $2); $$ = $2; } @@ -3824,6 +3845,7 @@ iteration_statement } GLSLANG_WEB_EXCLUDE_ON | attribute iteration_statement_nonattributed { + parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleLoopAttributes(*$1, $2); $$ = $2; } @@ -4027,7 +4049,6 @@ GLSLANG_WEB_EXCLUDE_ON attribute : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET { $$ = $3; - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); } attribute_list diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 0b711ae25d..1c054c3ed3 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -944,6 +944,25 @@ function_prototype $$.function = $1; $$.loc = $2.loc; } + | function_declarator RIGHT_PAREN attribute { + $$.function = $1; + $$.loc = $2.loc; + parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes($2.loc, *$3, $$.function); + } + | attribute function_declarator RIGHT_PAREN { + $$.function = $2; + $$.loc = $3.loc; + parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes($3.loc, *$1, $$.function); + } + | attribute function_declarator RIGHT_PAREN attribute { + $$.function = $2; + $$.loc = $3.loc; + parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes($3.loc, *$1, $$.function); + parseContext.handleFunctionAttributes($3.loc, *$4, $$.function); + } ; function_declarator @@ -3713,6 +3732,7 @@ selection_statement } | attribute selection_statement_nonattributed { + parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSelectionAttributes(*$1, $2); $$ = $2; } @@ -3760,6 +3780,7 @@ switch_statement } | attribute switch_statement_nonattributed { + parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSwitchAttributes(*$1, $2); $$ = $2; } @@ -3824,6 +3845,7 @@ iteration_statement } | attribute iteration_statement_nonattributed { + parseContext.requireExtensions($2->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleLoopAttributes(*$1, $2); $$ = $2; } @@ -4027,7 +4049,6 @@ function_definition attribute : LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET { $$ = $3; - parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); } attribute_list diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index da0658c213..35928eb03d 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.7.4. */ +/* A Bison parser, made by GNU Bison 3.7.5. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -46,10 +46,10 @@ USER NAME SPACE" below. */ /* Identify Bison output, and Bison version. */ -#define YYBISON 30704 +#define YYBISON 30705 /* Bison version string. */ -#define YYBISON_VERSION "3.7.4" +#define YYBISON_VERSION "3.7.5" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -738,6 +738,18 @@ typedef int_least16_t yytype_int16; typedef short yytype_int16; #endif +/* Work around bug in HP-UX 11.23, which defines these macros + incorrectly for preprocessor constants. This workaround can likely + be removed in 2023, as HPE has promised support for HP-UX 11.23 + (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of + . */ +#ifdef __hpux +# undef UINT_LEAST8_MAX +# undef UINT_LEAST16_MAX +# define UINT_LEAST8_MAX 255 +# define UINT_LEAST16_MAX 65535 +#endif + #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ @@ -835,9 +847,9 @@ typedef int yy_state_fast_t; /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YYUSE(E) ((void) (E)) +# define YY_USE(E) ((void) (E)) #else -# define YYUSE(E) /* empty */ +# define YY_USE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ @@ -1002,18 +1014,18 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 416 +#define YYFINAL 419 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 10537 +#define YYLAST 10891 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 445 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 111 /* YYNRULES -- Number of rules. */ -#define YYNRULES 617 +#define YYNRULES 620 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 765 +#define YYNSTATES 772 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 699 @@ -1116,58 +1128,59 @@ static const yytype_int16 yyrline[] = 742, 750, 751, 759, 760, 768, 769, 769, 787, 788, 804, 808, 812, 816, 821, 825, 829, 833, 837, 841, 845, 852, 855, 866, 873, 878, 883, 890, 894, 898, - 902, 907, 912, 921, 921, 932, 936, 943, 950, 953, - 960, 968, 988, 1011, 1026, 1051, 1062, 1072, 1082, 1092, - 1101, 1104, 1108, 1112, 1117, 1125, 1132, 1137, 1142, 1147, - 1156, 1166, 1193, 1202, 1209, 1217, 1224, 1231, 1239, 1249, - 1256, 1267, 1273, 1276, 1283, 1287, 1291, 1300, 1310, 1313, - 1324, 1327, 1330, 1334, 1338, 1343, 1347, 1354, 1358, 1363, - 1369, 1375, 1382, 1387, 1395, 1401, 1413, 1427, 1433, 1438, - 1446, 1454, 1462, 1470, 1478, 1486, 1494, 1502, 1509, 1516, - 1520, 1525, 1530, 1535, 1540, 1545, 1550, 1554, 1558, 1562, - 1566, 1572, 1583, 1590, 1593, 1602, 1607, 1617, 1622, 1630, - 1634, 1644, 1647, 1653, 1659, 1666, 1676, 1680, 1684, 1688, - 1693, 1697, 1702, 1707, 1712, 1717, 1722, 1727, 1732, 1737, - 1742, 1748, 1754, 1760, 1765, 1770, 1775, 1780, 1785, 1790, - 1795, 1800, 1805, 1810, 1815, 1821, 1828, 1833, 1838, 1843, - 1848, 1853, 1858, 1863, 1868, 1873, 1878, 1883, 1891, 1899, - 1907, 1913, 1919, 1925, 1931, 1937, 1943, 1949, 1955, 1961, - 1967, 1973, 1979, 1985, 1991, 1997, 2003, 2009, 2015, 2021, - 2027, 2033, 2039, 2045, 2051, 2057, 2063, 2069, 2075, 2081, - 2087, 2093, 2099, 2105, 2113, 2121, 2129, 2137, 2145, 2153, - 2161, 2169, 2177, 2185, 2193, 2201, 2207, 2213, 2219, 2225, - 2231, 2237, 2243, 2249, 2255, 2261, 2267, 2273, 2279, 2285, - 2291, 2297, 2303, 2309, 2315, 2321, 2327, 2333, 2339, 2345, - 2351, 2357, 2363, 2369, 2375, 2381, 2387, 2393, 2399, 2405, - 2411, 2417, 2421, 2425, 2429, 2434, 2440, 2445, 2450, 2455, - 2460, 2465, 2470, 2476, 2481, 2486, 2491, 2496, 2501, 2507, - 2513, 2519, 2525, 2531, 2537, 2543, 2549, 2555, 2561, 2567, - 2573, 2579, 2585, 2590, 2595, 2600, 2605, 2610, 2615, 2621, - 2626, 2631, 2636, 2641, 2646, 2651, 2656, 2662, 2667, 2672, - 2677, 2682, 2687, 2692, 2697, 2702, 2707, 2712, 2717, 2722, - 2727, 2732, 2738, 2743, 2748, 2754, 2760, 2765, 2770, 2775, - 2781, 2786, 2791, 2796, 2802, 2807, 2812, 2817, 2823, 2828, - 2833, 2838, 2844, 2850, 2856, 2862, 2867, 2873, 2879, 2885, - 2890, 2895, 2900, 2905, 2910, 2916, 2921, 2926, 2931, 2937, - 2942, 2947, 2952, 2958, 2963, 2968, 2973, 2979, 2984, 2989, - 2994, 3000, 3005, 3010, 3015, 3021, 3026, 3031, 3036, 3042, - 3047, 3052, 3057, 3063, 3068, 3073, 3078, 3084, 3089, 3094, - 3099, 3105, 3110, 3115, 3120, 3126, 3131, 3136, 3141, 3147, - 3152, 3157, 3162, 3168, 3173, 3178, 3183, 3189, 3194, 3199, - 3204, 3210, 3215, 3220, 3225, 3230, 3235, 3240, 3245, 3250, - 3255, 3260, 3265, 3270, 3275, 3280, 3285, 3290, 3295, 3300, - 3305, 3310, 3315, 3320, 3325, 3330, 3336, 3342, 3348, 3354, - 3361, 3368, 3374, 3380, 3386, 3392, 3398, 3404, 3411, 3416, - 3432, 3437, 3442, 3450, 3450, 3461, 3461, 3471, 3474, 3487, - 3509, 3536, 3540, 3546, 3551, 3562, 3566, 3572, 3578, 3589, - 3592, 3599, 3603, 3604, 3610, 3611, 3612, 3613, 3614, 3615, - 3616, 3618, 3624, 3633, 3634, 3638, 3634, 3650, 3651, 3655, - 3655, 3662, 3662, 3676, 3679, 3687, 3695, 3706, 3707, 3711, - 3715, 3722, 3729, 3733, 3741, 3745, 3758, 3762, 3769, 3769, - 3789, 3792, 3798, 3810, 3822, 3826, 3833, 3833, 3848, 3848, - 3864, 3864, 3885, 3888, 3894, 3897, 3903, 3907, 3914, 3919, - 3924, 3931, 3934, 3938, 3943, 3947, 3957, 3961, 3970, 3973, - 3977, 3986, 3986, 4028, 4034, 4037, 4042, 4045 + 902, 907, 912, 921, 921, 932, 936, 943, 947, 953, + 959, 969, 972, 979, 987, 1007, 1030, 1045, 1070, 1081, + 1091, 1101, 1111, 1120, 1123, 1127, 1131, 1136, 1144, 1151, + 1156, 1161, 1166, 1175, 1185, 1212, 1221, 1228, 1236, 1243, + 1250, 1258, 1268, 1275, 1286, 1292, 1295, 1302, 1306, 1310, + 1319, 1329, 1332, 1343, 1346, 1349, 1353, 1357, 1362, 1366, + 1373, 1377, 1382, 1388, 1394, 1401, 1406, 1414, 1420, 1432, + 1446, 1452, 1457, 1465, 1473, 1481, 1489, 1497, 1505, 1513, + 1521, 1528, 1535, 1539, 1544, 1549, 1554, 1559, 1564, 1569, + 1573, 1577, 1581, 1585, 1591, 1602, 1609, 1612, 1621, 1626, + 1636, 1641, 1649, 1653, 1663, 1666, 1672, 1678, 1685, 1695, + 1699, 1703, 1707, 1712, 1716, 1721, 1726, 1731, 1736, 1741, + 1746, 1751, 1756, 1761, 1767, 1773, 1779, 1784, 1789, 1794, + 1799, 1804, 1809, 1814, 1819, 1824, 1829, 1834, 1840, 1847, + 1852, 1857, 1862, 1867, 1872, 1877, 1882, 1887, 1892, 1897, + 1902, 1910, 1918, 1926, 1932, 1938, 1944, 1950, 1956, 1962, + 1968, 1974, 1980, 1986, 1992, 1998, 2004, 2010, 2016, 2022, + 2028, 2034, 2040, 2046, 2052, 2058, 2064, 2070, 2076, 2082, + 2088, 2094, 2100, 2106, 2112, 2118, 2124, 2132, 2140, 2148, + 2156, 2164, 2172, 2180, 2188, 2196, 2204, 2212, 2220, 2226, + 2232, 2238, 2244, 2250, 2256, 2262, 2268, 2274, 2280, 2286, + 2292, 2298, 2304, 2310, 2316, 2322, 2328, 2334, 2340, 2346, + 2352, 2358, 2364, 2370, 2376, 2382, 2388, 2394, 2400, 2406, + 2412, 2418, 2424, 2430, 2436, 2440, 2444, 2448, 2453, 2459, + 2464, 2469, 2474, 2479, 2484, 2489, 2495, 2500, 2505, 2510, + 2515, 2520, 2526, 2532, 2538, 2544, 2550, 2556, 2562, 2568, + 2574, 2580, 2586, 2592, 2598, 2604, 2609, 2614, 2619, 2624, + 2629, 2634, 2640, 2645, 2650, 2655, 2660, 2665, 2670, 2675, + 2681, 2686, 2691, 2696, 2701, 2706, 2711, 2716, 2721, 2726, + 2731, 2736, 2741, 2746, 2751, 2757, 2762, 2767, 2773, 2779, + 2784, 2789, 2794, 2800, 2805, 2810, 2815, 2821, 2826, 2831, + 2836, 2842, 2847, 2852, 2857, 2863, 2869, 2875, 2881, 2886, + 2892, 2898, 2904, 2909, 2914, 2919, 2924, 2929, 2935, 2940, + 2945, 2950, 2956, 2961, 2966, 2971, 2977, 2982, 2987, 2992, + 2998, 3003, 3008, 3013, 3019, 3024, 3029, 3034, 3040, 3045, + 3050, 3055, 3061, 3066, 3071, 3076, 3082, 3087, 3092, 3097, + 3103, 3108, 3113, 3118, 3124, 3129, 3134, 3139, 3145, 3150, + 3155, 3160, 3166, 3171, 3176, 3181, 3187, 3192, 3197, 3202, + 3208, 3213, 3218, 3223, 3229, 3234, 3239, 3244, 3249, 3254, + 3259, 3264, 3269, 3274, 3279, 3284, 3289, 3294, 3299, 3304, + 3309, 3314, 3319, 3324, 3329, 3334, 3339, 3344, 3349, 3355, + 3361, 3367, 3373, 3380, 3387, 3393, 3399, 3405, 3411, 3417, + 3423, 3430, 3435, 3451, 3456, 3461, 3469, 3469, 3480, 3480, + 3490, 3493, 3506, 3528, 3555, 3559, 3565, 3570, 3581, 3585, + 3591, 3597, 3608, 3611, 3618, 3622, 3623, 3629, 3630, 3631, + 3632, 3633, 3634, 3635, 3637, 3643, 3652, 3653, 3657, 3653, + 3669, 3670, 3674, 3674, 3681, 3681, 3695, 3698, 3706, 3714, + 3725, 3726, 3730, 3734, 3742, 3749, 3753, 3761, 3765, 3778, + 3782, 3790, 3790, 3810, 3813, 3819, 3831, 3843, 3847, 3855, + 3855, 3870, 3870, 3886, 3886, 3907, 3910, 3916, 3919, 3925, + 3929, 3936, 3941, 3946, 3953, 3956, 3960, 3965, 3969, 3979, + 3983, 3992, 3995, 3999, 4008, 4008, 4050, 4055, 4058, 4063, + 4066 }; #endif @@ -1380,12 +1393,12 @@ static const yytype_int16 yytoknum[] = }; #endif -#define YYPACT_NINF (-733) +#define YYPACT_NINF (-741) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-560) +#define YYTABLE_NINF (-563) #define yytable_value_is_error(Yyn) \ 0 @@ -1394,83 +1407,84 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 4304, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - 109, -733, -733, -733, -733, -733, 3, -733, -733, -733, - -733, -733, -733, -322, -261, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, 19, 101, 140, - 79, 6514, 57, -733, 96, -733, -733, -733, -733, 4746, - -733, -733, -733, -733, 133, -733, -733, 768, -733, -733, - 16, -733, 151, -32, 125, -733, -335, -733, 158, -733, - 6514, -733, -733, -733, 6514, 127, 128, -733, 13, -733, - 72, -733, -733, 9493, 163, -733, -733, -733, 156, 6514, - -733, 160, -733, 20, -733, -733, 61, 7801, -733, 10, - 1210, -733, -733, -733, -733, 163, -330, -733, 8224, 14, - -733, 134, -733, 88, 9493, 9493, -733, 9493, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, 54, -733, -733, - -733, 166, 62, 9916, 171, -733, 9493, -733, -733, -343, - 173, -733, 6514, 137, 5188, -733, 6514, 9493, -733, -32, - -733, 141, -733, -733, 122, 93, 39, 28, 41, 157, - 159, 161, 192, 195, 21, 181, 8647, -733, 183, 182, - -733, -733, 186, 178, 179, -733, 190, 191, 184, 9070, - 196, 9493, 187, 188, 189, 194, 197, 131, -733, -733, - 99, -733, 101, 200, 205, -733, -733, -733, -733, -733, - 1652, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -376, 173, 8224, 36, 6955, -733, -733, 8224, 6514, -733, - 170, -733, -733, -733, 71, -733, -733, 9493, 176, -733, - -733, 9493, 208, -733, -733, -733, 9493, -733, 137, 163, - 106, -733, -733, -733, 5630, -733, -733, -733, -733, 9493, - 9493, 9493, 9493, 9493, 9493, 9493, 9493, 9493, 9493, 9493, - 9493, 9493, 9493, 9493, 9493, 9493, 9493, 9493, -733, -733, - -733, 210, 180, -733, 2094, -733, -733, -733, 2094, -733, - 9493, -733, -733, 108, 9493, 29, -733, -733, -733, -733, - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, 9493, 9493, -733, -733, -733, -733, -733, -733, - -733, 8224, -733, -733, 139, -733, 6072, -733, -733, 211, - 185, -733, -733, -733, 123, 173, 137, -733, -733, -733, - -733, -733, 122, 122, 93, 93, 39, 39, 39, 39, - 28, 28, 41, 157, 159, 161, 192, 195, 9493, -733, - 215, 85, -733, 2094, 3862, 153, 3420, 76, -733, 80, - -733, -733, -733, -733, -733, 7378, -733, -733, -733, -733, - 86, 9493, 214, 180, 216, 185, 193, 6514, 219, 222, - -733, -733, 3862, 220, -733, -733, -733, 9493, 224, -733, - -733, -733, 217, 2536, 9493, -733, 213, 226, 199, 227, - 2978, -733, 228, -733, -733, 8224, -733, -733, -733, 83, - 9493, 2536, 220, -733, -733, 2094, -733, 223, 185, -733, - -733, 2094, 225, -733, -733 + 4753, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -328, -741, -741, -741, -741, + -741, 102, -741, -741, -741, -741, -741, 7, -741, -741, + -741, -741, -741, -741, -322, -257, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, 10, 8, + 47, 64, 6963, 87, -741, 46, -741, -741, -741, -741, + 5195, -741, -741, -741, -741, 77, -741, -741, 775, -741, + -741, 6963, 63, 20, -741, 104, -24, 106, -741, -330, + -741, 121, 142, 6963, -741, -741, -741, 6963, 112, 115, + -741, -334, -741, 22, -741, -741, 9942, 151, -741, -741, + -741, 154, 125, 6963, 163, 24, -741, 155, 6963, -741, + 157, -741, 18, -741, -741, 38, 8250, -741, -329, 1217, + -741, -741, -741, -741, -741, 151, -325, -741, 8673, 12, + -741, 128, -741, 94, 9942, 9942, -741, 9942, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, 86, -741, -741, + -741, 167, 68, 10365, 170, -741, 9942, -741, -741, -343, + 172, 142, 176, 9942, 169, 63, -741, 6963, 143, 5637, + -741, 6963, 9942, -741, -24, -741, 144, -741, -741, 116, + 16, -296, 41, 150, 156, 160, 164, 197, 199, 21, + 182, 9096, -741, 183, -741, -741, 189, 193, 194, -741, + 192, 205, 196, 9519, 207, 9942, 201, 208, 210, 211, + 212, 204, -741, -741, 96, -741, 8, 214, 217, -741, + -741, -741, -741, -741, 1659, -741, -741, -741, -741, -741, + -741, -741, -741, -741, 4311, 172, 8673, 13, 7404, -741, + -741, 8673, 6963, -741, 187, -741, -741, -741, 69, -741, + -741, 9942, 190, -741, -741, 9942, 226, -741, -741, -741, + 9942, -741, -741, -741, 227, -741, -741, 143, 151, 108, + -741, -741, -741, 6079, -741, -741, -741, 9942, 9942, 9942, + 9942, 9942, 9942, 9942, 9942, 9942, 9942, 9942, 9942, 9942, + 9942, 9942, 9942, 9942, 9942, 9942, -741, -741, -741, 228, + -741, 2101, -741, -741, -741, 2101, -741, 9942, -741, -741, + 113, 9942, 131, -741, -741, -741, -741, -741, -741, -741, + -741, -741, -741, -741, -741, -741, -741, -741, -741, 9942, + 9942, -741, -741, -741, -741, -741, -741, -741, 8673, -741, + -741, 109, -741, 6521, -741, -741, 229, 222, -741, -741, + -741, -741, 114, 172, 143, -741, -741, -741, -741, -741, + 116, 116, 16, 16, -296, -296, -296, -296, 41, 41, + 150, 156, 160, 164, 197, 199, 9942, -741, 2101, 3869, + 186, 3427, 80, -741, 84, -741, -741, -741, -741, -741, + 7827, -741, -741, -741, -741, 133, 230, 222, 200, 236, + 238, -741, -741, 3869, 235, -741, -741, -741, 9942, -741, + 231, 2543, 9942, -741, 233, 240, 198, 241, 2985, -741, + 244, -741, 8673, -741, -741, -741, 89, 9942, 2543, 235, + -741, -741, 2101, -741, 234, 222, -741, -741, 2101, 245, + -741, -741 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1478,117 +1492,118 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 0, 157, 210, 208, 209, 207, 214, 215, 216, 217, - 218, 219, 220, 221, 222, 211, 212, 213, 223, 224, - 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, - 336, 337, 338, 339, 340, 341, 342, 362, 363, 364, - 365, 366, 367, 368, 377, 390, 391, 378, 379, 381, - 380, 382, 383, 384, 385, 386, 387, 388, 389, 165, - 166, 236, 237, 235, 238, 245, 246, 243, 244, 241, - 242, 239, 240, 268, 269, 270, 280, 281, 282, 265, - 266, 267, 277, 278, 279, 262, 263, 264, 274, 275, - 276, 259, 260, 261, 271, 272, 273, 247, 248, 249, - 283, 284, 285, 250, 251, 252, 295, 296, 297, 253, - 254, 255, 307, 308, 309, 256, 257, 258, 319, 320, - 321, 286, 287, 288, 289, 290, 291, 292, 293, 294, - 298, 299, 300, 301, 302, 303, 304, 305, 306, 310, - 311, 312, 313, 314, 315, 316, 317, 318, 322, 323, - 324, 325, 326, 327, 328, 329, 330, 334, 331, 332, - 333, 515, 516, 517, 346, 347, 370, 373, 335, 344, - 345, 361, 343, 392, 393, 396, 397, 398, 400, 401, - 402, 404, 405, 406, 408, 409, 505, 506, 369, 371, - 372, 348, 349, 350, 394, 351, 355, 356, 359, 399, - 403, 407, 352, 353, 357, 358, 395, 354, 360, 439, - 441, 442, 443, 445, 446, 447, 449, 450, 451, 453, - 454, 455, 457, 458, 459, 461, 462, 463, 465, 466, - 467, 469, 470, 471, 473, 474, 475, 477, 478, 479, - 481, 482, 440, 444, 448, 452, 456, 464, 468, 472, - 460, 476, 480, 483, 484, 485, 486, 487, 488, 489, - 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 374, 375, 376, 410, 419, - 421, 415, 420, 422, 423, 425, 426, 427, 429, 430, - 431, 433, 434, 435, 437, 438, 411, 412, 413, 424, - 414, 416, 417, 418, 428, 432, 436, 507, 508, 511, - 512, 513, 514, 509, 510, 610, 132, 520, 521, 522, - 0, 519, 161, 159, 160, 158, 0, 206, 162, 163, - 164, 134, 133, 0, 190, 171, 173, 169, 175, 177, - 172, 174, 170, 176, 178, 167, 168, 192, 179, 186, - 187, 188, 189, 180, 181, 182, 183, 184, 185, 135, - 136, 137, 138, 139, 140, 147, 609, 0, 611, 0, - 109, 108, 0, 120, 125, 154, 153, 151, 155, 0, - 148, 150, 156, 130, 202, 152, 518, 0, 606, 608, - 0, 525, 0, 0, 0, 97, 0, 94, 0, 107, - 0, 116, 110, 118, 0, 119, 0, 95, 126, 100, - 0, 149, 131, 0, 195, 201, 1, 607, 0, 0, - 523, 144, 146, 0, 142, 193, 0, 0, 98, 0, - 0, 612, 111, 115, 117, 113, 121, 112, 0, 127, + 0, 160, 213, 211, 212, 210, 217, 218, 219, 220, + 221, 222, 223, 224, 225, 214, 215, 216, 226, 227, + 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, + 339, 340, 341, 342, 343, 344, 345, 365, 366, 367, + 368, 369, 370, 371, 380, 393, 394, 381, 382, 384, + 383, 385, 386, 387, 388, 389, 390, 391, 392, 168, + 169, 239, 240, 238, 241, 248, 249, 246, 247, 244, + 245, 242, 243, 271, 272, 273, 283, 284, 285, 268, + 269, 270, 280, 281, 282, 265, 266, 267, 277, 278, + 279, 262, 263, 264, 274, 275, 276, 250, 251, 252, + 286, 287, 288, 253, 254, 255, 298, 299, 300, 256, + 257, 258, 310, 311, 312, 259, 260, 261, 322, 323, + 324, 289, 290, 291, 292, 293, 294, 295, 296, 297, + 301, 302, 303, 304, 305, 306, 307, 308, 309, 313, + 314, 315, 316, 317, 318, 319, 320, 321, 325, 326, + 327, 328, 329, 330, 331, 332, 333, 337, 334, 335, + 336, 518, 519, 520, 349, 350, 373, 376, 338, 347, + 348, 364, 346, 395, 396, 399, 400, 401, 403, 404, + 405, 407, 408, 409, 411, 412, 508, 509, 372, 374, + 375, 351, 352, 353, 397, 354, 358, 359, 362, 402, + 406, 410, 355, 356, 360, 361, 398, 357, 363, 442, + 444, 445, 446, 448, 449, 450, 452, 453, 454, 456, + 457, 458, 460, 461, 462, 464, 465, 466, 468, 469, + 470, 472, 473, 474, 476, 477, 478, 480, 481, 482, + 484, 485, 443, 447, 451, 455, 459, 467, 471, 475, + 463, 479, 483, 486, 487, 488, 489, 490, 491, 492, + 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, + 503, 504, 505, 506, 507, 377, 378, 379, 413, 422, + 424, 418, 423, 425, 426, 428, 429, 430, 432, 433, + 434, 436, 437, 438, 440, 441, 414, 415, 416, 427, + 417, 419, 420, 421, 431, 435, 439, 510, 511, 514, + 515, 516, 517, 512, 513, 0, 613, 135, 523, 524, + 525, 0, 522, 164, 162, 163, 161, 0, 209, 165, + 166, 167, 137, 136, 0, 193, 174, 176, 172, 178, + 180, 175, 177, 173, 179, 181, 170, 171, 195, 182, + 189, 190, 191, 192, 183, 184, 185, 186, 187, 188, + 138, 139, 140, 141, 142, 143, 150, 612, 0, 614, + 0, 112, 111, 0, 123, 128, 157, 156, 154, 158, + 0, 151, 153, 159, 133, 205, 155, 521, 0, 609, + 611, 0, 0, 0, 528, 0, 0, 0, 97, 0, + 94, 0, 107, 0, 119, 113, 121, 0, 122, 0, + 95, 129, 100, 0, 152, 134, 0, 198, 204, 1, + 610, 0, 0, 0, 619, 0, 617, 0, 0, 526, + 147, 149, 0, 145, 196, 0, 0, 98, 0, 0, + 615, 108, 114, 118, 120, 116, 124, 115, 0, 130, 103, 0, 101, 0, 0, 0, 9, 0, 43, 42, 44, 41, 5, 6, 7, 8, 2, 16, 14, 15, 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, - 26, 0, 0, 30, 0, 204, 0, 36, 34, 0, - 196, 96, 0, 0, 0, 527, 0, 0, 141, 0, - 191, 0, 197, 45, 49, 52, 55, 60, 63, 65, - 67, 69, 71, 73, 75, 0, 0, 99, 0, 554, - 563, 567, 0, 0, 0, 588, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 45, 78, 91, - 0, 541, 0, 156, 130, 544, 565, 543, 551, 542, - 0, 545, 546, 569, 547, 576, 548, 549, 584, 550, - 0, 114, 0, 122, 0, 535, 129, 0, 0, 105, - 0, 102, 38, 39, 0, 22, 23, 0, 0, 28, - 27, 0, 206, 31, 33, 40, 0, 203, 0, 533, - 0, 531, 526, 528, 0, 93, 145, 143, 194, 0, + 26, 0, 0, 30, 0, 207, 0, 36, 34, 0, + 199, 109, 0, 0, 0, 0, 96, 0, 0, 0, + 530, 0, 0, 144, 0, 194, 0, 200, 45, 49, + 52, 55, 60, 63, 65, 67, 69, 71, 73, 75, + 0, 0, 99, 557, 566, 570, 0, 0, 0, 591, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 76, 198, - 199, 0, 0, 553, 0, 586, 599, 598, 0, 590, - 0, 602, 600, 0, 0, 0, 583, 603, 604, 605, - 552, 81, 82, 84, 83, 86, 87, 88, 89, 90, - 85, 80, 0, 0, 568, 564, 566, 570, 577, 585, - 124, 0, 538, 539, 0, 128, 0, 106, 4, 0, - 24, 21, 32, 205, 0, 534, 0, 529, 524, 46, - 47, 48, 51, 50, 53, 54, 58, 59, 56, 57, - 61, 62, 64, 66, 68, 70, 72, 74, 0, 200, - 616, 0, 614, 555, 0, 0, 0, 0, 601, 0, - 582, 79, 92, 123, 536, 0, 104, 19, 530, 532, - 0, 0, 0, 0, 0, 574, 0, 0, 0, 0, - 593, 592, 595, 561, 578, 537, 540, 0, 0, 613, - 615, 556, 0, 0, 0, 594, 0, 0, 573, 0, - 0, 571, 0, 77, 617, 0, 558, 587, 557, 0, - 596, 0, 561, 560, 562, 580, 575, 0, 597, 591, - 572, 581, 0, 589, 579 + 0, 45, 78, 91, 0, 544, 0, 159, 133, 547, + 568, 546, 554, 545, 0, 548, 549, 572, 550, 579, + 551, 552, 587, 553, 0, 117, 0, 125, 0, 538, + 132, 0, 0, 105, 0, 102, 38, 39, 0, 22, + 23, 0, 0, 28, 27, 0, 209, 31, 33, 40, + 0, 206, 110, 93, 0, 616, 618, 0, 536, 0, + 534, 529, 531, 0, 148, 146, 197, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 76, 201, 202, 0, + 556, 0, 589, 602, 601, 0, 593, 0, 605, 603, + 0, 0, 0, 586, 606, 607, 608, 555, 81, 82, + 84, 83, 86, 87, 88, 89, 90, 85, 80, 0, + 0, 571, 567, 569, 573, 580, 588, 127, 0, 541, + 542, 0, 131, 0, 106, 4, 0, 24, 21, 32, + 208, 620, 0, 537, 0, 532, 527, 46, 47, 48, + 51, 50, 53, 54, 58, 59, 56, 57, 61, 62, + 64, 66, 68, 70, 72, 74, 0, 203, 558, 0, + 0, 0, 0, 604, 0, 585, 79, 92, 126, 539, + 0, 104, 19, 533, 535, 0, 0, 577, 0, 0, + 0, 596, 595, 598, 564, 581, 540, 543, 0, 559, + 0, 0, 0, 597, 0, 0, 576, 0, 0, 574, + 0, 77, 0, 561, 590, 560, 0, 599, 0, 564, + 563, 565, 583, 578, 0, 600, 594, 575, 584, 0, + 592, 582 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -733, -733, -733, -733, -733, -733, -733, -733, -733, -733, - -733, -733, 9826, -733, -105, -98, -156, -102, -29, -28, - -30, -27, -26, -31, -733, -82, -733, -101, -733, -109, - -134, 2, -733, -733, -733, 4, -733, -733, -733, 177, - 198, 201, -733, -733, -341, -733, -733, -733, -733, 94, - -733, -37, -46, -733, 9, -733, 0, -66, -733, -733, - -733, -733, 262, -733, -733, -733, -481, -149, 11, -79, - -213, -733, -108, -204, -732, -733, -148, -733, -733, -161, - -160, -733, -733, 202, -274, -100, -733, 44, -733, -127, - -733, 47, -733, -733, -733, -733, 49, -733, -733, -733, - -733, -733, -733, -733, -733, 221, -733, -733, -733, -733, - -112 + -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, + -741, -741, 10266, -741, -125, -124, -165, -123, -32, -30, + -27, -31, -26, -29, -741, -80, -741, -110, -741, -116, + 92, 4, -741, -741, -741, 6, -48, -741, -741, 195, + 202, 206, -741, -741, -52, -741, -741, -741, -741, 93, + -741, -17, -28, -741, 9, -741, 0, -69, -741, -741, + -741, -741, 278, -741, -741, -741, -491, -159, 3, -83, + -222, -741, -107, -217, -740, -741, -141, -741, -741, -151, + -150, -741, -741, 213, -286, -103, -741, 51, -741, -122, + -741, 52, -741, -741, -741, -741, 54, -741, -741, -741, + -741, -741, -741, -741, -741, 232, -741, -741, 2, -741, + 124 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 465, 466, 467, 659, 468, 469, 470, 471, 472, - 473, 474, 527, 476, 494, 495, 496, 497, 498, 499, - 500, 501, 502, 503, 504, 528, 688, 529, 642, 530, - 586, 531, 367, 558, 443, 532, 369, 370, 371, 401, - 402, 403, 372, 373, 374, 375, 376, 377, 423, 424, - 378, 379, 380, 381, 477, 426, 478, 429, 414, 415, - 479, 384, 385, 386, 486, 419, 484, 485, 580, 581, - 556, 654, 535, 536, 537, 538, 539, 614, 714, 747, - 738, 739, 740, 748, 540, 541, 542, 543, 741, 718, - 544, 545, 742, 762, 546, 547, 548, 694, 618, 696, - 722, 736, 737, 549, 387, 388, 389, 398, 550, 691, - 692 + 0, 475, 476, 477, 676, 478, 479, 480, 481, 482, + 483, 484, 541, 486, 509, 510, 511, 512, 513, 514, + 515, 516, 517, 518, 519, 542, 706, 543, 659, 544, + 594, 545, 368, 572, 453, 546, 370, 371, 372, 404, + 405, 406, 373, 374, 375, 376, 377, 378, 432, 433, + 379, 380, 381, 382, 487, 435, 488, 438, 417, 418, + 489, 385, 386, 387, 501, 428, 499, 500, 599, 600, + 570, 671, 549, 550, 551, 552, 553, 631, 726, 754, + 746, 747, 748, 755, 554, 555, 556, 557, 749, 729, + 558, 559, 750, 769, 560, 561, 562, 709, 635, 711, + 733, 744, 745, 563, 388, 389, 390, 401, 564, 425, + 426 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1596,134 +1611,15 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 383, 746, 366, 576, 368, 584, 427, 512, 754, 382, - 515, 427, 516, 517, 428, 577, 520, 393, 552, 746, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 656, 394, 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, 411, 404, 583, 646, 555, 564, 650, - 693, 653, 439, 421, 655, 505, 391, 607, 480, 596, - 597, 506, 437, 716, 427, 506, 594, 595, 411, 507, - 488, 438, 557, 404, 600, 601, 489, 422, 395, 551, - 553, 405, 573, 565, 566, 643, 700, 506, 392, 412, - 382, 716, 482, 608, 651, 598, 599, 383, 382, 366, - 418, 368, 321, -35, 396, 567, 382, 326, 327, 568, - 405, 490, 570, 406, 405, 585, 407, 491, 571, 382, - 623, 658, 625, 382, 695, 440, 723, 643, 441, 483, - 724, 442, 643, 757, 611, 400, 643, 712, 382, 643, - 534, 713, 643, 727, 560, 583, 411, 561, 703, 533, - 676, 677, 678, 679, 592, 643, 593, 482, 644, 482, - 397, 555, 666, 555, 643, 667, 555, 698, 660, 631, - 632, 633, 634, 635, 636, 637, 638, 639, 640, 666, - 662, 408, 708, 317, 318, 319, 589, 590, 591, 641, - 399, 761, 578, 704, 483, 705, 483, 672, 673, 646, - 413, 382, 726, 382, 420, 382, 674, 675, 680, 681, - 425, 430, 435, 436, 427, 481, 569, 583, 487, 559, - 574, 697, 579, 665, 506, 699, 588, 605, 602, 603, - 604, 482, 606, 609, 612, 615, 613, 616, 617, 619, - 620, 643, 756, 621, 626, 624, 719, 627, 628, -36, - 534, 701, 702, 629, -34, 657, 630, 482, -29, 533, - 555, 661, 689, 707, 711, 690, 729, 646, 483, 733, - 731, 734, 750, -559, 744, 745, 751, 382, 732, 764, - 509, 755, 763, 682, 684, 683, 687, 728, 685, 710, - 686, 433, 390, 587, 483, 715, 752, 709, 720, 664, - 759, 753, 760, 382, 647, 735, 721, 648, 432, 649, - 431, 730, 0, 0, 555, 434, 0, 0, 417, 0, - 0, 0, 0, 715, 534, 0, 0, 0, 534, 482, - 0, 0, 0, 533, 0, 749, 743, 533, 0, 585, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 758, 0, 0, 555, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 483, 717, 0, 0, - 0, 0, 0, 0, 0, 382, 0, 0, 0, 0, - 0, 411, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 717, 0, 0, 0, 0, - 0, 0, 0, 534, 534, 0, 534, 0, 0, 0, - 0, 0, 533, 533, 0, 533, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 412, 0, 0, - 0, 0, 534, 0, 0, 0, 382, 0, 0, 0, - 0, 533, 0, 534, 0, 0, 0, 0, 0, 0, - 534, 0, 533, 0, 0, 0, 0, 0, 0, 533, - 0, 534, 0, 0, 0, 534, 0, 0, 0, 0, - 533, 534, 0, 0, 533, 0, 0, 0, 416, 0, - 533, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 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, 315, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 316, 317, 318, 319, 320, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 322, 323, 324, 325, 326, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, - 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, - 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, + 384, 753, 391, 590, 367, 447, 369, 436, 761, 383, + 603, 436, 521, 392, 448, 591, 436, 396, 753, 437, + 522, 612, 613, 566, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 58, 673, 397, 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, @@ -1748,556 +1644,499 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, - 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, - 0, 508, 0, 509, 510, 0, 0, 0, 0, 511, - 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 316, 317, 318, 319, 320, 0, 0, - 0, 452, 453, 454, 455, 456, 321, 322, 323, 324, - 325, 326, 327, 512, 513, 514, 515, 0, 516, 517, - 518, 519, 520, 521, 522, 523, 524, 525, 328, 329, - 330, 331, 332, 333, 457, 458, 459, 460, 461, 462, - 463, 464, 334, 526, 335, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 0, - 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, + 308, 309, 310, 311, 312, 313, 314, 663, 569, 422, + 602, 578, 449, 421, 667, 708, 670, 625, 490, 672, + 394, 430, 414, 521, 521, 407, 520, 400, 503, 398, + 571, 668, 614, 615, 504, 450, 494, 610, 451, 611, + 495, 452, 408, 587, 423, 431, 565, 567, 505, 414, + 415, 383, 395, 626, 506, 399, 407, 402, 384, 383, + 391, 384, 367, 427, 369, 414, 322, 383, 616, 617, + 383, 327, 328, 408, 441, 579, 580, 408, 584, 675, + 403, 497, 383, 593, 585, 660, 383, 640, 710, 642, + 734, 411, 593, 415, 735, -35, 660, 581, 498, 764, + 660, 582, 383, 409, 416, 660, 410, 383, 424, 548, + 574, 629, 660, 575, 602, 661, 718, 429, 547, 694, + 695, 696, 697, 719, 684, 720, 569, 685, 569, 660, + 684, 569, 713, 723, 439, 677, 318, 319, 320, 414, + 607, 608, 609, 618, 619, 679, 768, 660, 715, 660, + 738, 434, 497, 315, 497, 690, 691, 445, 692, 693, + 446, 663, 436, 592, 491, 698, 699, 597, 737, 498, + 492, 498, 493, 573, 496, 502, 383, 583, 383, 588, + 383, 595, 422, 521, 602, 447, 421, 620, 598, 606, + 621, 712, 623, 622, 627, 714, 624, 630, 632, 683, + 763, 636, 648, 649, 650, 651, 652, 653, 654, 655, + 656, 657, 633, 634, 637, 638, 641, 423, 643, 716, + 717, 663, 658, -36, 548, 497, -34, 644, 569, 645, + 646, 647, 674, 547, 384, 678, -29, 681, 660, 730, + 707, 722, 498, 383, 739, 740, 741, 742, -562, 752, + 758, 383, 757, 770, 523, 759, 497, 762, 700, 771, + 725, 701, 703, 727, 604, 702, 705, 605, 704, 393, + 682, 724, 443, 498, 731, 442, 760, 766, 732, 767, + 569, 743, 383, 444, 440, 664, 665, 727, 666, 596, + 420, 0, 0, 0, 0, 0, 756, 0, 751, 0, + 0, 548, 0, 0, 0, 548, 0, 0, 0, 0, + 547, 765, 569, 0, 547, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 497, 728, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 446, 447, 0, 508, 0, 509, 645, 0, 0, 0, - 0, 511, 448, 449, 450, 451, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 316, 317, 318, 319, 320, - 0, 0, 0, 452, 453, 454, 455, 456, 321, 322, - 323, 324, 325, 326, 327, 512, 513, 514, 515, 0, - 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, - 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, - 461, 462, 463, 464, 334, 526, 335, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, + 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, + 0, 728, 383, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 548, 548, + 0, 548, 0, 391, 0, 0, 423, 547, 547, 0, + 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, + 0, 548, 547, 0, 0, 0, 0, 0, 548, 0, + 547, 0, 0, 0, 0, 0, 0, 547, 548, 0, + 0, 0, 548, 0, 0, 0, 0, 547, 548, 0, + 0, 547, 0, 0, 0, 419, 0, 547, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 447, 0, 508, 0, 509, 0, 0, - 0, 0, 0, 511, 448, 449, 450, 451, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, - 319, 320, 0, 0, 0, 452, 453, 454, 455, 456, - 321, 322, 323, 324, 325, 326, 327, 512, 513, 514, - 515, 0, 516, 517, 518, 519, 520, 521, 522, 523, - 524, 525, 328, 329, 330, 331, 332, 333, 457, 458, - 459, 460, 461, 462, 463, 464, 334, 526, 335, 336, + 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, + 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 317, 318, + 319, 320, 321, 0, 0, 0, 0, 0, 0, 0, + 0, 322, 323, 324, 325, 326, 327, 328, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 329, 330, 331, 332, 333, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 335, 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 444, 445, 0, 0, 0, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 446, 447, 0, 508, 0, 430, - 0, 0, 0, 0, 0, 511, 448, 449, 450, 451, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, - 317, 318, 319, 320, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 322, 323, 324, 325, 326, 327, 512, - 513, 514, 515, 0, 516, 517, 518, 519, 520, 521, - 522, 523, 524, 525, 328, 329, 330, 331, 332, 333, - 457, 458, 459, 460, 461, 462, 463, 464, 334, 526, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 0, 0, 0, 0, 0, 456, 457, 0, 315, 0, + 523, 524, 0, 0, 0, 0, 525, 458, 459, 460, + 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 317, 318, 319, 320, 321, 0, 0, 0, 462, 463, + 464, 465, 466, 322, 323, 324, 325, 326, 327, 328, + 526, 527, 528, 529, 0, 530, 531, 532, 533, 534, + 535, 536, 537, 538, 539, 329, 330, 331, 332, 333, + 334, 467, 468, 469, 470, 471, 472, 473, 474, 335, + 540, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, 0, 444, 445, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 446, 447, 0, 508, - 0, 0, 0, 0, 0, 0, 0, 511, 448, 449, - 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 316, 317, 318, 319, 320, 0, 0, 0, 452, - 453, 454, 455, 456, 321, 322, 323, 324, 325, 326, - 327, 512, 513, 514, 515, 0, 516, 517, 518, 519, - 520, 521, 522, 523, 524, 525, 328, 329, 330, 331, - 332, 333, 457, 458, 459, 460, 461, 462, 463, 464, - 334, 526, 335, 336, 337, 338, 339, 340, 341, 342, + 365, 366, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 0, 0, 454, 455, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 456, 457, 0, + 315, 0, 523, 662, 0, 0, 0, 0, 525, 458, + 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 317, 318, 319, 320, 321, 0, 0, 0, + 462, 463, 464, 465, 466, 322, 323, 324, 325, 326, + 327, 328, 526, 527, 528, 529, 0, 530, 531, 532, + 533, 534, 535, 536, 537, 538, 539, 329, 330, 331, + 332, 333, 334, 467, 468, 469, 470, 471, 472, 473, + 474, 335, 540, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 444, - 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 511, - 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 316, 317, 318, 319, 320, 0, 0, - 0, 452, 453, 454, 455, 456, 321, 322, 323, 324, - 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, - 330, 331, 332, 333, 457, 458, 459, 460, 461, 462, - 463, 464, 334, 0, 335, 336, 337, 338, 339, 340, + 363, 364, 365, 366, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 0, 0, + 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, + 457, 0, 315, 0, 523, 0, 0, 0, 0, 0, + 525, 458, 459, 460, 461, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 317, 318, 319, 320, 321, 0, + 0, 0, 462, 463, 464, 465, 466, 322, 323, 324, + 325, 326, 327, 328, 526, 527, 528, 529, 0, 530, + 531, 532, 533, 534, 535, 536, 537, 538, 539, 329, + 330, 331, 332, 333, 334, 467, 468, 469, 470, 471, + 472, 473, 474, 335, 540, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 0, - 0, 444, 445, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 446, 447, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 448, 449, 450, 451, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 316, 317, 318, 319, 0, - 0, 0, 0, 452, 453, 454, 455, 456, 321, 322, - 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, + 361, 362, 363, 364, 365, 366, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 328, 329, 330, 331, 332, 333, 457, 458, 459, 460, - 461, 462, 463, 464, 334, 0, 335, 336, 337, 338, + 0, 456, 457, 0, 315, 0, 439, 0, 0, 0, + 0, 0, 525, 458, 459, 460, 461, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 317, 318, 319, 320, + 321, 0, 0, 0, 462, 463, 464, 465, 466, 322, + 323, 324, 325, 326, 327, 328, 526, 527, 528, 529, + 0, 530, 531, 532, 533, 534, 535, 536, 537, 538, + 539, 329, 330, 331, 332, 333, 334, 467, 468, 469, + 470, 471, 472, 473, 474, 335, 540, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 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, 315, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 316, 317, 318, - 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 322, 323, 324, 325, 326, 327, 0, 0, 0, + 359, 360, 361, 362, 363, 364, 365, 366, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 328, 329, 330, 331, 332, 333, 0, 0, - 0, 0, 0, 0, 0, 0, 334, 0, 335, 336, + 0, 0, 0, 456, 457, 0, 315, 0, 0, 0, + 0, 0, 0, 0, 525, 458, 459, 460, 461, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 317, 318, + 319, 320, 321, 0, 0, 0, 462, 463, 464, 465, + 466, 322, 323, 324, 325, 326, 327, 328, 526, 527, + 528, 529, 0, 530, 531, 532, 533, 534, 535, 536, + 537, 538, 539, 329, 330, 331, 332, 333, 334, 467, + 468, 469, 470, 471, 472, 473, 474, 335, 540, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 1, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 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, 409, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 316, - 317, 318, 319, 0, 0, 0, 0, 0, 0, 0, - 0, 410, 321, 322, 323, 324, 325, 326, 327, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 328, 329, 330, 331, 332, 333, - 0, 0, 0, 0, 0, 0, 0, 0, 334, 0, - 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, 0, 0, 0, 0, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 456, 457, 0, 315, 0, + 0, 0, 0, 0, 0, 0, 525, 458, 459, 460, + 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 317, 318, 319, 320, 321, 0, 0, 0, 462, 463, + 464, 465, 466, 322, 323, 324, 325, 326, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 329, 330, 331, 332, 333, + 334, 467, 468, 469, 470, 471, 472, 473, 474, 335, + 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 316, 317, 318, 319, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 321, 322, 323, 324, 325, 326, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 328, 329, 330, 331, - 332, 333, 0, 0, 0, 0, 0, 0, 0, 0, - 334, 0, 335, 336, 337, 338, 339, 340, 341, 342, + 0, 0, 0, 0, 0, 0, 0, 456, 457, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, + 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 317, 318, 319, 320, 0, 0, 0, 0, + 462, 463, 464, 465, 466, 322, 323, 324, 325, 326, + 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 329, 330, 331, + 332, 333, 334, 467, 468, 469, 470, 471, 472, 473, + 474, 335, 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 0, + 363, 364, 365, 366, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 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, 668, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 316, 317, 318, 319, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 321, 322, 323, 324, - 325, 326, 327, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 328, 329, - 330, 331, 332, 333, 0, 0, 0, 0, 0, 0, - 0, 0, 334, 0, 335, 336, 337, 338, 339, 340, + 0, 0, 0, 0, 317, 318, 319, 320, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 322, 323, 324, + 325, 326, 327, 328, 526, 0, 0, 529, 0, 530, + 531, 0, 0, 534, 0, 0, 0, 0, 0, 329, + 330, 331, 332, 333, 334, 0, 0, 0, 0, 0, + 0, 0, 0, 335, 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 361, 362, 363, 364, 365, 366, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 316, 317, 318, 319, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 321, 322, - 323, 324, 325, 326, 327, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, + 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 317, 318, 319, 320, + 321, 0, 0, 0, 0, 0, 0, 0, 0, 322, + 323, 324, 325, 326, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 328, 329, 330, 331, 332, 333, 0, 0, 0, 0, - 0, 0, 0, 0, 334, 0, 335, 336, 337, 338, + 0, 329, 330, 331, 332, 333, 334, 0, 0, 0, + 0, 0, 0, 0, 0, 335, 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 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, 316, 317, 318, - 319, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 321, 322, 323, 324, 325, 326, 327, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 328, 329, 330, 331, 332, 333, 0, 0, - 0, 0, 0, 0, 0, 0, 334, 0, 335, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 2, + 359, 360, 361, 362, 363, 364, 365, 366, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, 62, + 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, @@ -2323,66 +2162,114 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, 445, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 446, 447, 0, 0, 0, 554, 652, - 0, 0, 0, 0, 0, 448, 449, 450, 451, 0, + 313, 314, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 452, 453, 454, 455, - 456, 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 457, - 458, 459, 460, 461, 462, 463, 464, 0, 0, 0, + 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 317, 318, + 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, + 413, 322, 323, 324, 325, 326, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 347, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, - 0, 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, 0, 0, 444, 445, 0, + 0, 0, 0, 329, 330, 331, 332, 333, 334, 0, + 0, 0, 0, 0, 0, 0, 0, 335, 0, 336, + 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 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, 601, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 317, 318, 319, 320, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 322, 323, 324, 325, 326, 327, 328, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 329, 330, 331, 332, 333, + 334, 0, 0, 0, 0, 0, 0, 0, 0, 335, + 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 446, 447, 0, 0, - 0, 554, 725, 0, 0, 0, 0, 0, 448, 449, - 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 452, - 453, 454, 455, 456, 321, 0, 0, 0, 0, 326, - 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 457, 458, 459, 460, 461, 462, 463, 464, + 0, 0, 0, 686, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 347, 2, 3, 4, 5, 6, + 0, 0, 317, 318, 319, 320, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 322, 323, 324, 325, 326, + 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 329, 330, 331, + 332, 333, 334, 0, 0, 0, 0, 0, 0, 0, + 0, 335, 0, 336, 337, 338, 339, 340, 341, 342, + 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, 62, 63, 64, 65, 66, + 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, @@ -2408,17 +2295,63 @@ static const yytype_int16 yytable[] = 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, 0, 0, - 444, 445, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 446, - 447, 0, 0, 492, 0, 0, 0, 0, 0, 0, - 0, 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 452, 453, 454, 455, 456, 321, 0, 0, - 0, 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 457, 458, 459, 460, 461, - 462, 463, 464, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 347, 2, 3, + 0, 0, 0, 0, 0, 721, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 317, 318, 319, 320, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 322, 323, 324, + 325, 326, 327, 328, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, + 330, 331, 332, 333, 334, 0, 0, 0, 0, 0, + 0, 0, 0, 335, 0, 336, 337, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 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, 317, 318, 319, 320, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, + 323, 324, 325, 326, 327, 328, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 329, 330, 331, 332, 333, 334, 0, 0, 0, + 0, 0, 0, 0, 0, 335, 0, 336, 337, 338, + 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -2450,18 +2383,18 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, 445, 0, 0, 0, 0, 0, + 314, 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 446, 447, 0, 0, 0, 554, 0, 0, - 0, 0, 0, 0, 448, 449, 450, 451, 0, 0, + 0, 0, 456, 457, 0, 0, 0, 568, 669, 0, + 0, 0, 0, 0, 458, 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 452, 453, 454, 455, 456, - 321, 0, 0, 0, 0, 326, 327, 0, 0, 0, + 0, 0, 0, 0, 0, 462, 463, 464, 465, 466, + 322, 0, 0, 0, 0, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 457, 458, - 459, 460, 461, 462, 463, 464, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 467, 468, + 469, 470, 471, 472, 473, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 347, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 348, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, @@ -2492,18 +2425,18 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, 445, 0, 0, + 311, 312, 313, 314, 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 446, 447, 0, 0, 610, - 0, 0, 0, 0, 0, 0, 0, 448, 449, 450, - 451, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 452, 453, - 454, 455, 456, 321, 0, 0, 0, 0, 326, 327, + 0, 0, 0, 0, 0, 456, 457, 0, 0, 0, + 568, 736, 0, 0, 0, 0, 0, 458, 459, 460, + 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 462, 463, + 464, 465, 466, 322, 0, 0, 0, 0, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 457, 458, 459, 460, 461, 462, 463, 464, 0, + 0, 467, 468, 469, 470, 471, 472, 473, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 347, 2, 3, 4, 5, 6, 7, + 0, 0, 0, 348, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -2534,18 +2467,18 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, - 445, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 446, 447, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 622, - 448, 449, 450, 451, 0, 0, 0, 0, 0, 0, + 308, 309, 310, 311, 312, 313, 314, 0, 0, 454, + 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 456, 457, + 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, + 458, 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 452, 453, 454, 455, 456, 321, 0, 0, 0, - 0, 326, 327, 0, 0, 0, 0, 0, 0, 0, + 0, 462, 463, 464, 465, 466, 322, 0, 0, 0, + 0, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 457, 458, 459, 460, 461, 462, - 463, 464, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 347, 2, 3, 4, + 0, 0, 0, 0, 467, 468, 469, 470, 471, 472, + 473, 474, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 348, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -2577,17 +2510,17 @@ static const yytype_int16 yytable[] = 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, - 0, 0, 444, 445, 0, 0, 0, 0, 0, 0, + 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 446, 447, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 448, 449, 450, 451, 0, 0, 0, + 0, 456, 457, 0, 0, 0, 568, 0, 0, 0, + 0, 0, 0, 458, 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 452, 453, 454, 455, 456, 321, - 0, 0, 0, 0, 326, 327, 0, 0, 0, 0, + 0, 0, 0, 0, 462, 463, 464, 465, 466, 322, + 0, 0, 0, 0, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 457, 458, 459, - 460, 461, 462, 463, 464, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 347, + 0, 0, 0, 0, 0, 0, 0, 467, 468, 469, + 470, 471, 472, 473, 474, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -2619,169 +2552,168 @@ static const yytype_int16 yytable[] = 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, 0, 0, 444, 445, 0, 0, 475, + 312, 313, 314, 0, 0, 454, 455, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 456, 457, 0, 0, 628, 0, + 0, 0, 0, 0, 0, 0, 458, 459, 460, 461, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 462, 463, 464, + 465, 466, 322, 0, 0, 0, 0, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 493, 446, 447, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 448, 449, 450, 451, - 562, 563, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 452, 453, 454, - 455, 456, 321, 0, 0, 0, 0, 326, 572, 0, - 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 493, 0, 0, 0, 0, 0, 0, - 457, 458, 459, 460, 461, 462, 463, 464, 0, 0, - 0, 0, 493, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 347, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 467, 468, 469, 470, 471, 472, 473, 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 348, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, + 0, 0, 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, 0, 0, 454, 455, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 456, 457, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 639, 458, + 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 462, 463, 464, 465, 466, 322, 0, 0, 0, 0, + 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 467, 468, 469, 470, 471, 472, 473, + 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 348, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, 0, 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, 0, + 0, 454, 455, 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, 669, 670, 671, 493, 493, - 493, 493, 493, 493, 493, 493, 493, 493, 493, 493, - 493, 493, 493, 493, 0, 0, 0, 0, 0, 0, + 456, 457, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 458, 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 462, 463, 464, 465, 466, 322, 0, + 0, 0, 0, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 467, 468, 469, 470, + 471, 472, 473, 474, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 348, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 485, 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 508, 456, 457, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 458, 459, 460, 461, 0, + 576, 577, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 462, 463, 464, 465, + 466, 322, 0, 0, 0, 0, 327, 586, 0, 0, + 0, 0, 589, 0, 0, 0, 0, 0, 0, 508, + 0, 0, 0, 0, 0, 0, 0, 0, 508, 467, + 468, 469, 470, 471, 472, 473, 474, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, + 0, 348, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 493 + 0, 0, 0, 687, 688, 689, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508 }; static const yytype_int16 yycheck[] = { - 0, 733, 0, 346, 0, 486, 341, 383, 740, 0, - 386, 341, 388, 389, 349, 358, 392, 339, 348, 751, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 558, 339, 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, 379, 371, 484, 540, 438, 447, 552, - 614, 554, 408, 375, 557, 427, 343, 326, 414, 321, - 322, 341, 339, 694, 341, 341, 317, 318, 404, 349, - 340, 348, 348, 400, 323, 324, 346, 399, 349, 435, - 436, 371, 473, 319, 320, 346, 347, 341, 375, 379, - 371, 722, 419, 362, 348, 357, 358, 387, 379, 387, - 390, 387, 376, 339, 375, 341, 387, 381, 382, 345, - 400, 340, 340, 346, 404, 487, 349, 346, 346, 400, - 519, 340, 521, 404, 618, 343, 340, 346, 346, 419, - 340, 349, 346, 340, 506, 346, 346, 342, 419, 346, - 430, 346, 346, 347, 346, 584, 482, 349, 651, 430, - 596, 597, 598, 599, 351, 346, 353, 484, 349, 486, - 349, 552, 346, 554, 346, 349, 557, 349, 567, 328, - 329, 330, 331, 332, 333, 334, 335, 336, 337, 346, - 571, 375, 349, 364, 365, 366, 354, 355, 356, 348, - 340, 755, 482, 344, 484, 346, 486, 592, 593, 693, - 357, 482, 705, 484, 343, 486, 594, 595, 600, 601, - 375, 343, 375, 375, 341, 349, 340, 656, 348, 375, - 339, 620, 375, 579, 341, 624, 375, 325, 361, 360, - 359, 558, 327, 342, 341, 339, 344, 349, 349, 339, - 339, 346, 745, 349, 347, 339, 383, 349, 349, 339, - 540, 642, 643, 349, 339, 375, 349, 584, 340, 540, - 651, 375, 342, 342, 339, 375, 342, 761, 558, 340, - 344, 339, 349, 343, 340, 348, 340, 558, 375, 344, - 343, 343, 349, 602, 604, 603, 607, 711, 605, 688, - 606, 404, 320, 489, 584, 694, 387, 666, 696, 578, - 751, 739, 752, 584, 550, 722, 696, 550, 400, 550, - 398, 713, -1, -1, 705, 404, -1, -1, 387, -1, - -1, -1, -1, 722, 614, -1, -1, -1, 618, 656, - -1, -1, -1, 614, -1, 734, 727, 618, -1, 711, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 750, -1, -1, 745, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 656, 694, -1, -1, - -1, -1, -1, -1, -1, 656, -1, -1, -1, -1, - -1, 717, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 722, -1, -1, -1, -1, - -1, -1, -1, 693, 694, -1, 696, -1, -1, -1, - -1, -1, 693, 694, -1, 696, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 717, -1, -1, - -1, -1, 722, -1, -1, -1, 717, -1, -1, -1, - -1, 722, -1, 733, -1, -1, -1, -1, -1, -1, - 740, -1, 733, -1, -1, -1, -1, -1, -1, 740, - -1, 751, -1, -1, -1, 755, -1, -1, -1, -1, - 751, 761, -1, -1, 755, -1, -1, -1, 0, -1, - 761, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 349, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 363, 364, 365, 366, 367, -1, -1, -1, -1, - -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, - 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 398, 399, 400, 401, - 402, 403, -1, -1, -1, -1, -1, -1, -1, -1, - 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, + 0, 741, 0, 346, 0, 339, 0, 341, 748, 0, + 501, 341, 341, 341, 348, 358, 341, 339, 758, 349, + 349, 317, 318, 348, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 60, 572, 339, 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, @@ -2806,556 +2738,499 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, - 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, - -1, 341, -1, 343, 344, -1, -1, -1, -1, 349, - 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 363, 364, 365, 366, 367, -1, -1, - -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, 383, 384, 385, 386, -1, 388, 389, - 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, -1, - -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, + 310, 311, 312, 313, 314, 315, 316, 554, 448, 391, + 499, 457, 411, 391, 566, 631, 568, 326, 417, 571, + 343, 375, 380, 341, 341, 372, 436, 349, 340, 349, + 348, 348, 321, 322, 346, 343, 342, 351, 346, 353, + 346, 349, 372, 483, 391, 399, 445, 446, 340, 407, + 380, 372, 375, 362, 346, 375, 403, 340, 388, 380, + 388, 391, 388, 393, 388, 423, 376, 388, 357, 358, + 391, 381, 382, 403, 402, 319, 320, 407, 340, 340, + 346, 428, 403, 493, 346, 346, 407, 533, 635, 535, + 340, 375, 502, 423, 340, 339, 346, 341, 428, 340, + 346, 345, 423, 346, 357, 346, 349, 428, 375, 439, + 346, 521, 346, 349, 603, 349, 668, 343, 439, 614, + 615, 616, 617, 344, 346, 346, 566, 349, 568, 346, + 346, 571, 349, 349, 343, 581, 364, 365, 366, 497, + 354, 355, 356, 323, 324, 585, 762, 346, 347, 346, + 347, 375, 499, 341, 501, 610, 611, 375, 612, 613, + 375, 708, 341, 491, 340, 618, 619, 497, 720, 499, + 375, 501, 339, 375, 349, 348, 497, 340, 499, 339, + 501, 342, 564, 341, 673, 339, 564, 361, 375, 375, + 360, 637, 325, 359, 342, 641, 327, 344, 339, 598, + 752, 339, 328, 329, 330, 331, 332, 333, 334, 335, + 336, 337, 349, 349, 339, 349, 339, 564, 347, 659, + 660, 768, 348, 339, 554, 572, 339, 349, 668, 349, + 349, 349, 375, 554, 564, 375, 340, 340, 346, 383, + 342, 342, 572, 564, 344, 375, 340, 339, 343, 348, + 340, 572, 349, 349, 343, 387, 603, 343, 620, 344, + 706, 621, 623, 709, 502, 622, 625, 504, 624, 321, + 597, 684, 407, 603, 711, 403, 747, 758, 711, 759, + 720, 733, 603, 407, 401, 564, 564, 733, 564, 495, + 388, -1, -1, -1, -1, -1, 742, -1, 738, -1, + -1, 631, -1, -1, -1, 635, -1, -1, -1, -1, + 631, 757, 752, -1, 635, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 673, 709, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 338, 339, -1, 341, -1, 343, 344, -1, -1, -1, - -1, 349, 350, 351, 352, 353, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 363, 364, 365, 366, 367, - -1, -1, -1, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, 383, 384, 385, 386, -1, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, + -1, -1, -1, 673, -1, -1, -1, -1, -1, -1, + -1, 733, 673, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 709, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 708, 709, + -1, 711, -1, 711, -1, -1, 733, 708, 709, -1, + 711, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 733, -1, -1, -1, -1, -1, -1, + -1, 741, 733, -1, -1, -1, -1, -1, 748, -1, + 741, -1, -1, -1, -1, -1, -1, 748, 758, -1, + -1, -1, 762, -1, -1, -1, -1, 758, 768, -1, + -1, 762, -1, -1, -1, 0, -1, 768, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 338, 339, -1, 341, -1, 343, -1, -1, - -1, -1, -1, 349, 350, 351, 352, 353, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, - 366, 367, -1, -1, -1, 371, 372, 373, 374, 375, - 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, - 386, -1, 388, 389, 390, 391, 392, 393, 394, 395, - 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 341, -1, -1, -1, + -1, -1, -1, -1, 349, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, + 365, 366, 367, -1, -1, -1, -1, -1, -1, -1, + -1, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, 341, -1, 343, - -1, -1, -1, -1, -1, 349, 350, 351, 352, 353, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, - 364, 365, 366, 367, -1, -1, -1, 371, 372, 373, - 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, - 384, 385, 386, -1, 388, 389, 390, 391, 392, 393, - 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, - 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 338, 339, -1, 341, - -1, -1, -1, -1, -1, -1, -1, 349, 350, 351, - 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 363, 364, 365, 366, 367, -1, -1, -1, 371, - 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, - 382, 383, 384, 385, 386, -1, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, -1, -1, 319, - 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 349, - 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 363, 364, 365, 366, 367, -1, -1, - -1, 371, 372, 373, 374, 375, 376, 377, 378, 379, - 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, -1, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, -1, - -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 363, 364, 365, 366, -1, - -1, -1, -1, 371, 372, 373, 374, 375, 376, 377, - 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, - 408, 409, 410, 411, 412, -1, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 349, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, - 366, 367, -1, -1, -1, -1, -1, -1, -1, -1, - 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, 402, 403, -1, -1, - -1, -1, -1, -1, -1, -1, 412, -1, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 349, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 363, - 364, 365, 366, -1, -1, -1, -1, -1, -1, -1, - -1, 375, 376, 377, 378, 379, 380, 381, 382, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 398, 399, 400, 401, 402, 403, - -1, -1, -1, -1, -1, -1, -1, -1, 412, -1, - 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 363, 364, 365, 366, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 376, 377, 378, 379, 380, 381, - 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 398, 399, 400, 401, - 402, 403, -1, -1, -1, -1, -1, -1, -1, -1, - 412, -1, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, -1, -1, -1, + -1, -1, -1, 398, 399, 400, 401, 402, 403, -1, + -1, -1, -1, -1, -1, -1, -1, 412, -1, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, -1, 341, -1, + 343, 344, -1, -1, -1, -1, 349, 350, 351, 352, + 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 364, 365, 366, 367, -1, -1, -1, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, + 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 344, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, + 341, -1, 343, 344, -1, -1, -1, -1, 349, 350, + 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, + 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, -1, -1, + 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, + 339, -1, 341, -1, 343, -1, -1, -1, -1, -1, + 349, 350, 351, 352, 353, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 363, 364, 365, 366, 367, -1, + -1, -1, 371, 372, 373, 374, 375, 376, 377, 378, + 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, + 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 363, 364, 365, 366, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 376, 377, 378, 379, - 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 398, 399, - 400, 401, 402, 403, -1, -1, -1, -1, -1, -1, - -1, -1, 412, -1, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, -1, + -1, 338, 339, -1, 341, -1, 343, -1, -1, -1, + -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, + 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, + -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, + 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 338, 339, -1, 341, -1, -1, -1, + -1, -1, -1, -1, 349, 350, 351, 352, 353, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, + 365, 366, 367, -1, -1, -1, 371, 372, 373, 374, + 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, + 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, + 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 344, -1, -1, -1, + -1, -1, -1, -1, -1, 338, 339, -1, 341, -1, + -1, -1, -1, -1, -1, -1, 349, 350, 351, 352, + 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 364, 365, 366, 367, -1, -1, -1, 371, 372, + 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 363, 364, 365, 366, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 376, 377, - 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 398, 399, 400, 401, 402, + 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, + -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 398, 399, 400, 401, 402, 403, -1, -1, -1, -1, - -1, -1, -1, -1, 412, -1, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 350, + 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, + 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, + 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, -1, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 363, 364, 365, - 366, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 398, 399, 400, 401, 402, 403, -1, -1, - -1, -1, -1, -1, -1, -1, 412, -1, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 4, + -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, + 379, 380, 381, 382, 383, -1, -1, 386, -1, 388, + 389, -1, -1, 392, -1, -1, -1, -1, -1, 398, + 399, 400, 401, 402, 403, -1, -1, -1, -1, -1, + -1, -1, -1, 412, -1, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 341, -1, -1, -1, -1, -1, + -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 398, 399, 400, 401, 402, 403, -1, -1, -1, + -1, -1, -1, -1, -1, 412, -1, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 63, 64, + 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, @@ -3381,66 +3256,114 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, -1, -1, + 315, 316, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 338, 339, -1, -1, -1, 343, 344, - -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, - 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, + -1, -1, -1, -1, 349, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, + 365, 366, -1, -1, -1, -1, -1, -1, -1, -1, + 375, 376, 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, + -1, -1, -1, 398, 399, 400, 401, 402, 403, -1, + -1, -1, -1, -1, -1, -1, -1, 412, -1, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 426, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, - -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 338, 339, -1, -1, - -1, 343, 344, -1, -1, -1, -1, -1, 350, 351, - 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, - 372, 373, 374, 375, 376, -1, -1, -1, -1, 381, - 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 363, 364, 365, 366, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 398, 399, 400, 401, 402, + 403, -1, -1, -1, -1, -1, -1, -1, -1, 412, + -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, + 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 404, 405, 406, 407, 408, 409, 410, 411, + -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 426, 4, 5, 6, 7, 8, + -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, + 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, + 401, 402, 403, -1, -1, -1, -1, -1, -1, -1, + -1, 412, -1, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 63, 64, 65, 66, 67, 68, + 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, @@ -3466,17 +3389,63 @@ static const yytype_int16 yycheck[] = 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, -1, -1, - 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, - 339, -1, -1, 342, -1, -1, -1, -1, -1, -1, - -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, - -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, - 409, 410, 411, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 426, 4, 5, + -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, + 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, + 399, 400, 401, 402, 403, -1, -1, -1, -1, -1, + -1, -1, -1, 412, -1, 414, 415, 416, 417, 418, + 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, + 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 398, 399, 400, 401, 402, 403, -1, -1, -1, + -1, -1, -1, -1, -1, 412, -1, 414, 415, 416, + 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -3510,7 +3479,7 @@ static const yytype_int16 yycheck[] = 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 338, 339, -1, -1, -1, 343, -1, -1, + -1, -1, 338, 339, -1, -1, -1, 343, 344, -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, @@ -3552,8 +3521,8 @@ static const yytype_int16 yycheck[] = 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 338, 339, -1, -1, 342, - -1, -1, -1, -1, -1, -1, -1, 350, 351, 352, + -1, -1, -1, -1, -1, 338, 339, -1, -1, -1, + 343, 344, -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, @@ -3595,7 +3564,7 @@ static const yytype_int16 yycheck[] = 310, 311, 312, 313, 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 349, + -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, @@ -3637,7 +3606,7 @@ static const yytype_int16 yycheck[] = 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, -1, -1, -1, -1, -1, -1, + -1, 338, 339, -1, -1, -1, 343, -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, @@ -3677,37 +3646,155 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, 413, + 314, 315, 316, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 427, 338, 339, -1, -1, -1, -1, + -1, -1, -1, -1, 338, 339, -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, - 444, 445, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, - -1, -1, 476, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 487, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, - -1, -1, 506, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 426, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 426, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + -1, -1, 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 349, 350, + 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, + 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 404, 405, 406, 407, 408, 409, 410, + 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 426, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, -1, -1, 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, -1, + -1, 319, 320, -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, -1, -1, - -1, -1, -1, -1, -1, 589, 590, 591, 592, 593, - 594, 595, 596, 597, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, -1, -1, -1, -1, -1, -1, + 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, + -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 404, 405, 406, 407, + 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 426, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, -1, -1, 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, 416, -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 436, 338, 339, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, + 454, 455, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, + 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, + -1, -1, 486, -1, -1, -1, -1, -1, -1, 493, + -1, -1, -1, -1, -1, -1, -1, -1, 502, 404, + 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 521, -1, -1, + -1, 426, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 590, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 711 + -1, -1, -1, 607, 608, 609, 610, 611, 612, 613, + 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, + 624, 625 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -3745,52 +3832,53 @@ static const yytype_int16 yystos[] = 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, 349, 363, 364, 365, 366, - 367, 376, 377, 378, 379, 380, 381, 382, 398, 399, - 400, 401, 402, 403, 412, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 476, 477, 480, 481, - 482, 483, 487, 488, 489, 490, 491, 492, 495, 496, - 497, 498, 499, 501, 506, 507, 508, 549, 550, 551, - 507, 343, 375, 339, 339, 349, 375, 349, 552, 340, - 346, 484, 485, 486, 496, 501, 346, 349, 375, 349, - 375, 497, 501, 357, 503, 504, 0, 550, 501, 510, - 343, 375, 399, 493, 494, 375, 500, 341, 349, 502, - 343, 528, 485, 484, 486, 375, 375, 339, 348, 502, + 312, 313, 314, 315, 316, 341, 349, 363, 364, 365, + 366, 367, 376, 377, 378, 379, 380, 381, 382, 398, + 399, 400, 401, 402, 403, 412, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 476, 477, 480, + 481, 482, 483, 487, 488, 489, 490, 491, 492, 495, + 496, 497, 498, 499, 501, 506, 507, 508, 549, 550, + 551, 553, 341, 507, 343, 375, 339, 339, 349, 375, + 349, 552, 340, 346, 484, 485, 486, 496, 501, 346, + 349, 375, 349, 375, 497, 501, 357, 503, 504, 0, + 550, 481, 489, 496, 375, 554, 555, 501, 510, 343, + 375, 399, 493, 494, 375, 500, 341, 349, 502, 343, + 528, 553, 485, 484, 486, 375, 375, 339, 348, 502, 343, 346, 349, 479, 319, 320, 338, 339, 350, 351, 352, 353, 371, 372, 373, 374, 375, 404, 405, 406, 407, 408, 409, 410, 411, 446, 447, 448, 450, 451, 452, 453, 454, 455, 456, 457, 458, 499, 501, 505, - 502, 349, 496, 501, 511, 512, 509, 348, 340, 346, - 340, 346, 342, 457, 459, 460, 461, 462, 463, 464, - 465, 466, 467, 468, 469, 470, 341, 349, 341, 343, - 344, 349, 383, 384, 385, 386, 388, 389, 390, 391, - 392, 393, 394, 395, 396, 397, 413, 457, 470, 472, - 474, 476, 480, 499, 501, 517, 518, 519, 520, 521, - 529, 530, 531, 532, 535, 536, 539, 540, 541, 548, - 553, 502, 348, 502, 343, 472, 515, 348, 478, 375, - 346, 349, 457, 457, 474, 319, 320, 341, 345, 340, - 340, 346, 382, 472, 339, 457, 346, 358, 501, 375, - 513, 514, 344, 512, 511, 470, 475, 494, 375, 354, - 355, 356, 351, 353, 317, 318, 321, 322, 357, 358, - 323, 324, 361, 360, 359, 325, 327, 326, 362, 342, - 342, 470, 341, 344, 522, 339, 349, 349, 543, 339, - 339, 349, 349, 474, 339, 474, 347, 349, 349, 349, - 349, 328, 329, 330, 331, 332, 333, 334, 335, 336, - 337, 348, 473, 346, 349, 344, 518, 532, 536, 541, - 515, 348, 344, 515, 516, 515, 511, 375, 340, 449, - 474, 375, 472, 457, 513, 502, 346, 349, 344, 457, - 457, 457, 459, 459, 460, 460, 461, 461, 461, 461, - 462, 462, 463, 464, 465, 466, 467, 468, 471, 342, - 375, 554, 555, 529, 542, 518, 544, 474, 349, 474, - 347, 472, 472, 515, 344, 346, 344, 342, 349, 514, - 474, 339, 342, 346, 523, 474, 489, 496, 534, 383, - 517, 530, 545, 340, 340, 344, 515, 347, 475, 342, - 555, 344, 375, 340, 339, 534, 546, 547, 525, 526, - 527, 533, 537, 472, 340, 348, 519, 524, 528, 474, - 349, 340, 387, 521, 519, 343, 515, 340, 474, 524, - 525, 529, 538, 349, 344 + 502, 340, 375, 339, 342, 346, 349, 496, 501, 511, + 512, 509, 348, 340, 346, 340, 346, 342, 457, 459, + 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, + 470, 341, 349, 343, 344, 349, 383, 384, 385, 386, + 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, + 413, 457, 470, 472, 474, 476, 480, 499, 501, 517, + 518, 519, 520, 521, 529, 530, 531, 532, 535, 536, + 539, 540, 541, 548, 553, 502, 348, 502, 343, 472, + 515, 348, 478, 375, 346, 349, 457, 457, 474, 319, + 320, 341, 345, 340, 340, 346, 382, 472, 339, 457, + 346, 358, 553, 470, 475, 342, 555, 501, 375, 513, + 514, 344, 512, 511, 475, 494, 375, 354, 355, 356, + 351, 353, 317, 318, 321, 322, 357, 358, 323, 324, + 361, 360, 359, 325, 327, 326, 362, 342, 342, 470, + 344, 522, 339, 349, 349, 543, 339, 339, 349, 349, + 474, 339, 474, 347, 349, 349, 349, 349, 328, 329, + 330, 331, 332, 333, 334, 335, 336, 337, 348, 473, + 346, 349, 344, 518, 532, 536, 541, 515, 348, 344, + 515, 516, 515, 511, 375, 340, 449, 474, 375, 472, + 457, 340, 513, 502, 346, 349, 344, 457, 457, 457, + 459, 459, 460, 460, 461, 461, 461, 461, 462, 462, + 463, 464, 465, 466, 467, 468, 471, 342, 529, 542, + 518, 544, 474, 349, 474, 347, 472, 472, 515, 344, + 346, 344, 342, 349, 514, 474, 523, 474, 489, 534, + 383, 517, 530, 545, 340, 340, 344, 515, 347, 344, + 375, 340, 339, 534, 546, 547, 525, 526, 527, 533, + 537, 472, 348, 519, 524, 528, 474, 349, 340, 387, + 521, 519, 343, 515, 340, 474, 524, 525, 529, 538, + 349, 344 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -3806,17 +3894,17 @@ static const yytype_int16 yyr1[] = 467, 468, 468, 469, 469, 470, 471, 470, 472, 472, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, 474, 474, 475, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 478, 477, 479, 479, 480, 481, 481, - 482, 482, 483, 484, 484, 485, 485, 485, 485, 486, - 487, 487, 487, 487, 487, 488, 488, 488, 488, 488, - 489, 489, 490, 491, 491, 491, 491, 491, 491, 491, - 491, 492, 493, 493, 494, 494, 494, 495, 496, 496, - 497, 497, 497, 497, 497, 497, 497, 498, 498, 498, + 476, 476, 476, 478, 477, 479, 479, 480, 480, 480, + 480, 481, 481, 482, 482, 483, 484, 484, 485, 485, + 485, 485, 486, 487, 487, 487, 487, 487, 488, 488, + 488, 488, 488, 489, 489, 490, 491, 491, 491, 491, + 491, 491, 491, 491, 492, 493, 493, 494, 494, 494, + 495, 496, 496, 497, 497, 497, 497, 497, 497, 497, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 499, 500, 500, 501, 501, 502, 502, 502, - 502, 503, 503, 504, 505, 505, 506, 506, 506, 506, + 498, 498, 498, 498, 498, 499, 500, 500, 501, 501, + 502, 502, 502, 502, 503, 503, 504, 505, 505, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, @@ -3848,16 +3936,17 @@ static const yytype_int16 yyr1[] = 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 507, 507, 507, 509, 508, 510, 508, 511, 511, 512, - 512, 513, 513, 514, 514, 515, 515, 515, 515, 516, - 516, 517, 518, 518, 519, 519, 519, 519, 519, 519, - 519, 519, 520, 521, 522, 523, 521, 524, 524, 526, - 525, 527, 525, 528, 528, 529, 529, 530, 530, 531, - 531, 532, 533, 533, 534, 534, 535, 535, 537, 536, - 538, 538, 539, 539, 540, 540, 542, 541, 543, 541, - 544, 541, 545, 545, 546, 546, 547, 547, 548, 548, - 548, 548, 548, 548, 548, 548, 549, 549, 550, 550, - 550, 552, 551, 553, 554, 554, 555, 555 + 506, 506, 506, 507, 507, 507, 509, 508, 510, 508, + 511, 511, 512, 512, 513, 513, 514, 514, 515, 515, + 515, 515, 516, 516, 517, 518, 518, 519, 519, 519, + 519, 519, 519, 519, 519, 520, 521, 522, 523, 521, + 524, 524, 526, 525, 527, 525, 528, 528, 529, 529, + 530, 530, 531, 531, 532, 533, 533, 534, 534, 535, + 535, 537, 536, 538, 538, 539, 539, 540, 540, 542, + 541, 543, 541, 544, 541, 545, 545, 546, 546, 547, + 547, 548, 548, 548, 548, 548, 548, 548, 548, 549, + 549, 550, 550, 550, 552, 551, 553, 554, 554, 555, + 555 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -3873,17 +3962,18 @@ static const yytype_int8 yyr2[] = 3, 1, 3, 1, 3, 1, 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 2, 2, 4, 2, 3, 4, - 2, 3, 4, 0, 6, 2, 3, 2, 1, 1, - 2, 3, 3, 2, 3, 2, 1, 2, 1, 1, - 1, 3, 4, 6, 5, 1, 2, 3, 5, 4, - 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 1, 3, 1, 3, 1, 1, 1, 2, + 2, 3, 4, 0, 6, 2, 3, 2, 3, 3, + 4, 1, 1, 2, 3, 3, 2, 3, 2, 1, + 2, 1, 1, 1, 3, 4, 6, 5, 1, 2, + 3, 5, 4, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 4, 1, 3, 1, 3, 1, + 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 4, 1, 1, 3, 2, 3, + 2, 3, 3, 4, 1, 0, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 4, 1, 1, 3, 2, 3, 2, 3, 3, - 4, 1, 0, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -3914,17 +4004,17 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 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, 2, 1, - 3, 1, 1, 1, 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, 2, 2, 2, 1, 2, 1, 1, - 1, 0, 3, 5, 1, 3, 1, 4 + 1, 1, 1, 1, 1, 1, 0, 6, 0, 5, + 1, 2, 3, 4, 1, 3, 1, 2, 1, 3, + 4, 2, 1, 3, 1, 1, 1, 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, 2, 2, 2, 1, + 2, 1, 1, 1, 0, 3, 5, 1, 3, 1, + 4 }; @@ -4003,8 +4093,8 @@ yy_symbol_value_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext) { FILE *yyoutput = yyo; - YYUSE (yyoutput); - YYUSE (pParseContext); + YY_USE (yyoutput); + YY_USE (pParseContext); if (!yyvaluep) return; # ifdef YYPRINT @@ -4012,7 +4102,7 @@ yy_symbol_value_print (FILE *yyo, YYPRINT (yyo, yytoknum[yykind], *yyvaluep); # endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yykind); + YY_USE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -4393,14 +4483,14 @@ static void yydestruct (const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext) { - YYUSE (yyvaluep); - YYUSE (pParseContext); + YY_USE (yyvaluep); + YY_USE (pParseContext); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YYUSE (yykind); + YY_USE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -4674,7 +4764,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 4678 "MachineIndependent/glslang_tab.cpp" +#line 4768 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ @@ -4682,7 +4772,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4686 "MachineIndependent/glslang_tab.cpp" +#line 4776 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ @@ -4692,7 +4782,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4696 "MachineIndependent/glslang_tab.cpp" +#line 4786 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ @@ -4700,7 +4790,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4704 "MachineIndependent/glslang_tab.cpp" +#line 4794 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ @@ -4708,7 +4798,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4712 "MachineIndependent/glslang_tab.cpp" +#line 4802 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ @@ -4717,7 +4807,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4721 "MachineIndependent/glslang_tab.cpp" +#line 4811 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ @@ -4725,7 +4815,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4729 "MachineIndependent/glslang_tab.cpp" +#line 4819 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ @@ -4733,7 +4823,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 4737 "MachineIndependent/glslang_tab.cpp" +#line 4827 "MachineIndependent/glslang_tab.cpp" break; case 10: /* primary_expression: INT32CONSTANT */ @@ -4742,7 +4832,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4746 "MachineIndependent/glslang_tab.cpp" +#line 4836 "MachineIndependent/glslang_tab.cpp" break; case 11: /* primary_expression: UINT32CONSTANT */ @@ -4751,7 +4841,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4755 "MachineIndependent/glslang_tab.cpp" +#line 4845 "MachineIndependent/glslang_tab.cpp" break; case 12: /* primary_expression: INT64CONSTANT */ @@ -4760,7 +4850,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4764 "MachineIndependent/glslang_tab.cpp" +#line 4854 "MachineIndependent/glslang_tab.cpp" break; case 13: /* primary_expression: UINT64CONSTANT */ @@ -4769,7 +4859,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4773 "MachineIndependent/glslang_tab.cpp" +#line 4863 "MachineIndependent/glslang_tab.cpp" break; case 14: /* primary_expression: INT16CONSTANT */ @@ -4778,7 +4868,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4782 "MachineIndependent/glslang_tab.cpp" +#line 4872 "MachineIndependent/glslang_tab.cpp" break; case 15: /* primary_expression: UINT16CONSTANT */ @@ -4787,7 +4877,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4791 "MachineIndependent/glslang_tab.cpp" +#line 4881 "MachineIndependent/glslang_tab.cpp" break; case 16: /* primary_expression: DOUBLECONSTANT */ @@ -4798,7 +4888,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4802 "MachineIndependent/glslang_tab.cpp" +#line 4892 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ @@ -4807,7 +4897,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4811 "MachineIndependent/glslang_tab.cpp" +#line 4901 "MachineIndependent/glslang_tab.cpp" break; case 18: /* postfix_expression: primary_expression */ @@ -4815,7 +4905,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4819 "MachineIndependent/glslang_tab.cpp" +#line 4909 "MachineIndependent/glslang_tab.cpp" break; case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ @@ -4823,7 +4913,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4827 "MachineIndependent/glslang_tab.cpp" +#line 4917 "MachineIndependent/glslang_tab.cpp" break; case 20: /* postfix_expression: function_call */ @@ -4831,7 +4921,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4835 "MachineIndependent/glslang_tab.cpp" +#line 4925 "MachineIndependent/glslang_tab.cpp" break; case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ @@ -4839,7 +4929,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4843 "MachineIndependent/glslang_tab.cpp" +#line 4933 "MachineIndependent/glslang_tab.cpp" break; case 22: /* postfix_expression: postfix_expression INC_OP */ @@ -4849,7 +4939,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4853 "MachineIndependent/glslang_tab.cpp" +#line 4943 "MachineIndependent/glslang_tab.cpp" break; case 23: /* postfix_expression: postfix_expression DEC_OP */ @@ -4859,7 +4949,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 4863 "MachineIndependent/glslang_tab.cpp" +#line 4953 "MachineIndependent/glslang_tab.cpp" break; case 24: /* integer_expression: expression */ @@ -4868,7 +4958,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4872 "MachineIndependent/glslang_tab.cpp" +#line 4962 "MachineIndependent/glslang_tab.cpp" break; case 25: /* function_call: function_call_or_method */ @@ -4877,7 +4967,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 4881 "MachineIndependent/glslang_tab.cpp" +#line 4971 "MachineIndependent/glslang_tab.cpp" break; case 26: /* function_call_or_method: function_call_generic */ @@ -4885,7 +4975,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[0].interm); } -#line 4889 "MachineIndependent/glslang_tab.cpp" +#line 4979 "MachineIndependent/glslang_tab.cpp" break; case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ @@ -4894,7 +4984,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4898 "MachineIndependent/glslang_tab.cpp" +#line 4988 "MachineIndependent/glslang_tab.cpp" break; case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ @@ -4903,7 +4993,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4907 "MachineIndependent/glslang_tab.cpp" +#line 4997 "MachineIndependent/glslang_tab.cpp" break; case 29: /* function_call_header_no_parameters: function_call_header VOID */ @@ -4911,7 +5001,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[-1].interm); } -#line 4915 "MachineIndependent/glslang_tab.cpp" +#line 5005 "MachineIndependent/glslang_tab.cpp" break; case 30: /* function_call_header_no_parameters: function_call_header */ @@ -4919,7 +5009,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[0].interm); } -#line 4923 "MachineIndependent/glslang_tab.cpp" +#line 5013 "MachineIndependent/glslang_tab.cpp" break; case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ @@ -4931,7 +5021,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 4935 "MachineIndependent/glslang_tab.cpp" +#line 5025 "MachineIndependent/glslang_tab.cpp" break; case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ @@ -4943,7 +5033,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 4947 "MachineIndependent/glslang_tab.cpp" +#line 5037 "MachineIndependent/glslang_tab.cpp" break; case 33: /* function_call_header: function_identifier LEFT_PAREN */ @@ -4951,7 +5041,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[-1].interm); } -#line 4955 "MachineIndependent/glslang_tab.cpp" +#line 5045 "MachineIndependent/glslang_tab.cpp" break; case 34: /* function_identifier: type_specifier */ @@ -4961,7 +5051,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 4965 "MachineIndependent/glslang_tab.cpp" +#line 5055 "MachineIndependent/glslang_tab.cpp" break; case 35: /* function_identifier: postfix_expression */ @@ -4993,7 +5083,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 4997 "MachineIndependent/glslang_tab.cpp" +#line 5087 "MachineIndependent/glslang_tab.cpp" break; case 36: /* function_identifier: non_uniform_qualifier */ @@ -5003,7 +5093,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5007 "MachineIndependent/glslang_tab.cpp" +#line 5097 "MachineIndependent/glslang_tab.cpp" break; case 37: /* unary_expression: postfix_expression */ @@ -5014,7 +5104,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 5018 "MachineIndependent/glslang_tab.cpp" +#line 5108 "MachineIndependent/glslang_tab.cpp" break; case 38: /* unary_expression: INC_OP unary_expression */ @@ -5023,7 +5113,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5027 "MachineIndependent/glslang_tab.cpp" +#line 5117 "MachineIndependent/glslang_tab.cpp" break; case 39: /* unary_expression: DEC_OP unary_expression */ @@ -5032,7 +5122,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5036 "MachineIndependent/glslang_tab.cpp" +#line 5126 "MachineIndependent/glslang_tab.cpp" break; case 40: /* unary_expression: unary_operator unary_expression */ @@ -5053,38 +5143,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 5057 "MachineIndependent/glslang_tab.cpp" +#line 5147 "MachineIndependent/glslang_tab.cpp" break; case 41: /* unary_operator: PLUS */ #line 606 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 5063 "MachineIndependent/glslang_tab.cpp" +#line 5153 "MachineIndependent/glslang_tab.cpp" break; case 42: /* unary_operator: DASH */ #line 607 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 5069 "MachineIndependent/glslang_tab.cpp" +#line 5159 "MachineIndependent/glslang_tab.cpp" break; case 43: /* unary_operator: BANG */ #line 608 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 5075 "MachineIndependent/glslang_tab.cpp" +#line 5165 "MachineIndependent/glslang_tab.cpp" break; case 44: /* unary_operator: TILDE */ #line 609 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 5082 "MachineIndependent/glslang_tab.cpp" +#line 5172 "MachineIndependent/glslang_tab.cpp" break; case 45: /* multiplicative_expression: unary_expression */ #line 615 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5088 "MachineIndependent/glslang_tab.cpp" +#line 5178 "MachineIndependent/glslang_tab.cpp" break; case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ @@ -5094,7 +5184,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5098 "MachineIndependent/glslang_tab.cpp" +#line 5188 "MachineIndependent/glslang_tab.cpp" break; case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ @@ -5104,7 +5194,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5108 "MachineIndependent/glslang_tab.cpp" +#line 5198 "MachineIndependent/glslang_tab.cpp" break; case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ @@ -5115,13 +5205,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5119 "MachineIndependent/glslang_tab.cpp" +#line 5209 "MachineIndependent/glslang_tab.cpp" break; case 49: /* additive_expression: multiplicative_expression */ #line 635 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5125 "MachineIndependent/glslang_tab.cpp" +#line 5215 "MachineIndependent/glslang_tab.cpp" break; case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ @@ -5131,7 +5221,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5135 "MachineIndependent/glslang_tab.cpp" +#line 5225 "MachineIndependent/glslang_tab.cpp" break; case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ @@ -5141,13 +5231,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5145 "MachineIndependent/glslang_tab.cpp" +#line 5235 "MachineIndependent/glslang_tab.cpp" break; case 52: /* shift_expression: additive_expression */ #line 649 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5151 "MachineIndependent/glslang_tab.cpp" +#line 5241 "MachineIndependent/glslang_tab.cpp" break; case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ @@ -5158,7 +5248,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5162 "MachineIndependent/glslang_tab.cpp" +#line 5252 "MachineIndependent/glslang_tab.cpp" break; case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ @@ -5169,13 +5259,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5173 "MachineIndependent/glslang_tab.cpp" +#line 5263 "MachineIndependent/glslang_tab.cpp" break; case 55: /* relational_expression: shift_expression */ #line 665 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5179 "MachineIndependent/glslang_tab.cpp" +#line 5269 "MachineIndependent/glslang_tab.cpp" break; case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ @@ -5185,7 +5275,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5189 "MachineIndependent/glslang_tab.cpp" +#line 5279 "MachineIndependent/glslang_tab.cpp" break; case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ @@ -5195,7 +5285,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5199 "MachineIndependent/glslang_tab.cpp" +#line 5289 "MachineIndependent/glslang_tab.cpp" break; case 58: /* relational_expression: relational_expression LE_OP shift_expression */ @@ -5205,7 +5295,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5209 "MachineIndependent/glslang_tab.cpp" +#line 5299 "MachineIndependent/glslang_tab.cpp" break; case 59: /* relational_expression: relational_expression GE_OP shift_expression */ @@ -5215,13 +5305,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5219 "MachineIndependent/glslang_tab.cpp" +#line 5309 "MachineIndependent/glslang_tab.cpp" break; case 60: /* equality_expression: relational_expression */ #line 689 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5225 "MachineIndependent/glslang_tab.cpp" +#line 5315 "MachineIndependent/glslang_tab.cpp" break; case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ @@ -5235,7 +5325,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5239 "MachineIndependent/glslang_tab.cpp" +#line 5329 "MachineIndependent/glslang_tab.cpp" break; case 62: /* equality_expression: equality_expression NE_OP relational_expression */ @@ -5249,13 +5339,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5253 "MachineIndependent/glslang_tab.cpp" +#line 5343 "MachineIndependent/glslang_tab.cpp" break; case 63: /* and_expression: equality_expression */ #line 711 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5259 "MachineIndependent/glslang_tab.cpp" +#line 5349 "MachineIndependent/glslang_tab.cpp" break; case 64: /* and_expression: and_expression AMPERSAND equality_expression */ @@ -5266,13 +5356,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5270 "MachineIndependent/glslang_tab.cpp" +#line 5360 "MachineIndependent/glslang_tab.cpp" break; case 65: /* exclusive_or_expression: and_expression */ #line 721 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5276 "MachineIndependent/glslang_tab.cpp" +#line 5366 "MachineIndependent/glslang_tab.cpp" break; case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ @@ -5283,13 +5373,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5287 "MachineIndependent/glslang_tab.cpp" +#line 5377 "MachineIndependent/glslang_tab.cpp" break; case 67: /* inclusive_or_expression: exclusive_or_expression */ #line 731 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5293 "MachineIndependent/glslang_tab.cpp" +#line 5383 "MachineIndependent/glslang_tab.cpp" break; case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ @@ -5300,13 +5390,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5304 "MachineIndependent/glslang_tab.cpp" +#line 5394 "MachineIndependent/glslang_tab.cpp" break; case 69: /* logical_and_expression: inclusive_or_expression */ #line 741 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5310 "MachineIndependent/glslang_tab.cpp" +#line 5400 "MachineIndependent/glslang_tab.cpp" break; case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ @@ -5316,13 +5406,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5320 "MachineIndependent/glslang_tab.cpp" +#line 5410 "MachineIndependent/glslang_tab.cpp" break; case 71: /* logical_xor_expression: logical_and_expression */ #line 750 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5326 "MachineIndependent/glslang_tab.cpp" +#line 5416 "MachineIndependent/glslang_tab.cpp" break; case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ @@ -5332,13 +5422,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5336 "MachineIndependent/glslang_tab.cpp" +#line 5426 "MachineIndependent/glslang_tab.cpp" break; case 73: /* logical_or_expression: logical_xor_expression */ #line 759 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5342 "MachineIndependent/glslang_tab.cpp" +#line 5432 "MachineIndependent/glslang_tab.cpp" break; case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ @@ -5348,13 +5438,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5352 "MachineIndependent/glslang_tab.cpp" +#line 5442 "MachineIndependent/glslang_tab.cpp" break; case 75: /* conditional_expression: logical_or_expression */ #line 768 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5358 "MachineIndependent/glslang_tab.cpp" +#line 5448 "MachineIndependent/glslang_tab.cpp" break; case 76: /* $@1: %empty */ @@ -5362,7 +5452,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { ++parseContext.controlFlowNestingLevel; } -#line 5366 "MachineIndependent/glslang_tab.cpp" +#line 5456 "MachineIndependent/glslang_tab.cpp" break; case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ @@ -5379,13 +5469,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5383 "MachineIndependent/glslang_tab.cpp" +#line 5473 "MachineIndependent/glslang_tab.cpp" break; case 78: /* assignment_expression: conditional_expression */ #line 787 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5389 "MachineIndependent/glslang_tab.cpp" +#line 5479 "MachineIndependent/glslang_tab.cpp" break; case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ @@ -5403,7 +5493,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 5407 "MachineIndependent/glslang_tab.cpp" +#line 5497 "MachineIndependent/glslang_tab.cpp" break; case 80: /* assignment_operator: EQUAL */ @@ -5412,7 +5502,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 5416 "MachineIndependent/glslang_tab.cpp" +#line 5506 "MachineIndependent/glslang_tab.cpp" break; case 81: /* assignment_operator: MUL_ASSIGN */ @@ -5421,7 +5511,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 5425 "MachineIndependent/glslang_tab.cpp" +#line 5515 "MachineIndependent/glslang_tab.cpp" break; case 82: /* assignment_operator: DIV_ASSIGN */ @@ -5430,7 +5520,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 5434 "MachineIndependent/glslang_tab.cpp" +#line 5524 "MachineIndependent/glslang_tab.cpp" break; case 83: /* assignment_operator: MOD_ASSIGN */ @@ -5440,7 +5530,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 5444 "MachineIndependent/glslang_tab.cpp" +#line 5534 "MachineIndependent/glslang_tab.cpp" break; case 84: /* assignment_operator: ADD_ASSIGN */ @@ -5449,7 +5539,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5453 "MachineIndependent/glslang_tab.cpp" +#line 5543 "MachineIndependent/glslang_tab.cpp" break; case 85: /* assignment_operator: SUB_ASSIGN */ @@ -5458,7 +5548,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5462 "MachineIndependent/glslang_tab.cpp" +#line 5552 "MachineIndependent/glslang_tab.cpp" break; case 86: /* assignment_operator: LEFT_ASSIGN */ @@ -5467,7 +5557,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5471 "MachineIndependent/glslang_tab.cpp" +#line 5561 "MachineIndependent/glslang_tab.cpp" break; case 87: /* assignment_operator: RIGHT_ASSIGN */ @@ -5476,7 +5566,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5480 "MachineIndependent/glslang_tab.cpp" +#line 5570 "MachineIndependent/glslang_tab.cpp" break; case 88: /* assignment_operator: AND_ASSIGN */ @@ -5485,7 +5575,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5489 "MachineIndependent/glslang_tab.cpp" +#line 5579 "MachineIndependent/glslang_tab.cpp" break; case 89: /* assignment_operator: XOR_ASSIGN */ @@ -5494,7 +5584,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 5498 "MachineIndependent/glslang_tab.cpp" +#line 5588 "MachineIndependent/glslang_tab.cpp" break; case 90: /* assignment_operator: OR_ASSIGN */ @@ -5503,7 +5593,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 5507 "MachineIndependent/glslang_tab.cpp" +#line 5597 "MachineIndependent/glslang_tab.cpp" break; case 91: /* expression: assignment_expression */ @@ -5511,7 +5601,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5515 "MachineIndependent/glslang_tab.cpp" +#line 5605 "MachineIndependent/glslang_tab.cpp" break; case 92: /* expression: expression COMMA assignment_expression */ @@ -5524,7 +5614,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5528 "MachineIndependent/glslang_tab.cpp" +#line 5618 "MachineIndependent/glslang_tab.cpp" break; case 93: /* constant_expression: conditional_expression */ @@ -5533,7 +5623,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5537 "MachineIndependent/glslang_tab.cpp" +#line 5627 "MachineIndependent/glslang_tab.cpp" break; case 94: /* declaration: function_prototype SEMICOLON */ @@ -5543,7 +5633,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 5547 "MachineIndependent/glslang_tab.cpp" +#line 5637 "MachineIndependent/glslang_tab.cpp" break; case 95: /* declaration: init_declarator_list SEMICOLON */ @@ -5553,7 +5643,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence); (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode; } -#line 5557 "MachineIndependent/glslang_tab.cpp" +#line 5647 "MachineIndependent/glslang_tab.cpp" break; case 96: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ @@ -5565,7 +5655,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 5569 "MachineIndependent/glslang_tab.cpp" +#line 5659 "MachineIndependent/glslang_tab.cpp" break; case 97: /* declaration: block_structure SEMICOLON */ @@ -5574,7 +5664,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 5578 "MachineIndependent/glslang_tab.cpp" +#line 5668 "MachineIndependent/glslang_tab.cpp" break; case 98: /* declaration: block_structure IDENTIFIER SEMICOLON */ @@ -5583,7 +5673,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5587 "MachineIndependent/glslang_tab.cpp" +#line 5677 "MachineIndependent/glslang_tab.cpp" break; case 99: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ @@ -5592,7 +5682,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 5596 "MachineIndependent/glslang_tab.cpp" +#line 5686 "MachineIndependent/glslang_tab.cpp" break; case 100: /* declaration: type_qualifier SEMICOLON */ @@ -5602,7 +5692,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 5606 "MachineIndependent/glslang_tab.cpp" +#line 5696 "MachineIndependent/glslang_tab.cpp" break; case 101: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ @@ -5612,7 +5702,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5616 "MachineIndependent/glslang_tab.cpp" +#line 5706 "MachineIndependent/glslang_tab.cpp" break; case 102: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ @@ -5623,13 +5713,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 5627 "MachineIndependent/glslang_tab.cpp" +#line 5717 "MachineIndependent/glslang_tab.cpp" break; case 103: /* $@2: %empty */ #line 921 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 5633 "MachineIndependent/glslang_tab.cpp" +#line 5723 "MachineIndependent/glslang_tab.cpp" break; case 104: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ @@ -5643,7 +5733,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 5647 "MachineIndependent/glslang_tab.cpp" +#line 5737 "MachineIndependent/glslang_tab.cpp" break; case 105: /* identifier_list: COMMA IDENTIFIER */ @@ -5652,7 +5742,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5656 "MachineIndependent/glslang_tab.cpp" +#line 5746 "MachineIndependent/glslang_tab.cpp" break; case 106: /* identifier_list: identifier_list COMMA IDENTIFIER */ @@ -5661,7 +5751,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5665 "MachineIndependent/glslang_tab.cpp" +#line 5755 "MachineIndependent/glslang_tab.cpp" break; case 107: /* function_prototype: function_declarator RIGHT_PAREN */ @@ -5670,27 +5760,61 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5674 "MachineIndependent/glslang_tab.cpp" +#line 5764 "MachineIndependent/glslang_tab.cpp" + break; + + case 108: /* function_prototype: function_declarator RIGHT_PAREN attribute */ +#line 947 "MachineIndependent/glslang.y" + { + (yyval.interm).function = (yyvsp[-2].interm.function); + (yyval.interm).loc = (yyvsp[-1].lex).loc; + parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes), (yyval.interm).function); + } +#line 5775 "MachineIndependent/glslang_tab.cpp" + break; + + case 109: /* function_prototype: attribute function_declarator RIGHT_PAREN */ +#line 953 "MachineIndependent/glslang.y" + { + (yyval.interm).function = (yyvsp[-1].interm.function); + (yyval.interm).loc = (yyvsp[0].lex).loc; + parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes), (yyval.interm).function); + } +#line 5786 "MachineIndependent/glslang_tab.cpp" + break; + + case 110: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ +#line 959 "MachineIndependent/glslang.y" + { + (yyval.interm).function = (yyvsp[-2].interm.function); + (yyval.interm).loc = (yyvsp[-1].lex).loc; + parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes), (yyval.interm).function); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes), (yyval.interm).function); + } +#line 5798 "MachineIndependent/glslang_tab.cpp" break; - case 108: /* function_declarator: function_header */ -#line 950 "MachineIndependent/glslang.y" + case 111: /* function_declarator: function_header */ +#line 969 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5682 "MachineIndependent/glslang_tab.cpp" +#line 5806 "MachineIndependent/glslang_tab.cpp" break; - case 109: /* function_declarator: function_header_with_parameters */ -#line 953 "MachineIndependent/glslang.y" + case 112: /* function_declarator: function_header_with_parameters */ +#line 972 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5690 "MachineIndependent/glslang_tab.cpp" +#line 5814 "MachineIndependent/glslang_tab.cpp" break; - case 110: /* function_header_with_parameters: function_header parameter_declaration */ -#line 960 "MachineIndependent/glslang.y" + case 113: /* function_header_with_parameters: function_header parameter_declaration */ +#line 979 "MachineIndependent/glslang.y" { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); @@ -5699,11 +5823,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 5703 "MachineIndependent/glslang_tab.cpp" +#line 5827 "MachineIndependent/glslang_tab.cpp" break; - case 111: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ -#line 968 "MachineIndependent/glslang.y" + case 114: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ +#line 987 "MachineIndependent/glslang.y" { // // Only first parameter of one-parameter functions can be void @@ -5721,11 +5845,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5725 "MachineIndependent/glslang_tab.cpp" +#line 5849 "MachineIndependent/glslang_tab.cpp" break; - case 112: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ -#line 988 "MachineIndependent/glslang.y" + case 115: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ +#line 1007 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) { parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return", @@ -5745,11 +5869,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5749 "MachineIndependent/glslang_tab.cpp" +#line 5873 "MachineIndependent/glslang_tab.cpp" break; - case 113: /* parameter_declarator: type_specifier IDENTIFIER */ -#line 1011 "MachineIndependent/glslang.y" + case 116: /* parameter_declarator: type_specifier IDENTIFIER */ +#line 1030 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5765,11 +5889,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5769 "MachineIndependent/glslang_tab.cpp" +#line 5893 "MachineIndependent/glslang_tab.cpp" break; - case 114: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ -#line 1026 "MachineIndependent/glslang.y" + case 117: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ +#line 1045 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5789,11 +5913,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5793 "MachineIndependent/glslang_tab.cpp" +#line 5917 "MachineIndependent/glslang_tab.cpp" break; - case 115: /* parameter_declaration: type_qualifier parameter_declarator */ -#line 1051 "MachineIndependent/glslang.y" + case 118: /* parameter_declaration: type_qualifier parameter_declarator */ +#line 1070 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5805,11 +5929,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5809 "MachineIndependent/glslang_tab.cpp" +#line 5933 "MachineIndependent/glslang_tab.cpp" break; - case 116: /* parameter_declaration: parameter_declarator */ -#line 1062 "MachineIndependent/glslang.y" + case 119: /* parameter_declaration: parameter_declarator */ +#line 1081 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -5817,11 +5941,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5821 "MachineIndependent/glslang_tab.cpp" +#line 5945 "MachineIndependent/glslang_tab.cpp" break; - case 117: /* parameter_declaration: type_qualifier parameter_type_specifier */ -#line 1072 "MachineIndependent/glslang.y" + case 120: /* parameter_declaration: type_qualifier parameter_type_specifier */ +#line 1091 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5832,11 +5956,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5836 "MachineIndependent/glslang_tab.cpp" +#line 5960 "MachineIndependent/glslang_tab.cpp" break; - case 118: /* parameter_declaration: parameter_type_specifier */ -#line 1082 "MachineIndependent/glslang.y" + case 121: /* parameter_declaration: parameter_type_specifier */ +#line 1101 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -5844,68 +5968,68 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5848 "MachineIndependent/glslang_tab.cpp" +#line 5972 "MachineIndependent/glslang_tab.cpp" break; - case 119: /* parameter_type_specifier: type_specifier */ -#line 1092 "MachineIndependent/glslang.y" + case 122: /* parameter_type_specifier: type_specifier */ +#line 1111 "MachineIndependent/glslang.y" { TParameter param = { 0, new TType((yyvsp[0].interm.type)) }; (yyval.interm).param = param; if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5859 "MachineIndependent/glslang_tab.cpp" +#line 5983 "MachineIndependent/glslang_tab.cpp" break; - case 120: /* init_declarator_list: single_declaration */ -#line 1101 "MachineIndependent/glslang.y" + case 123: /* init_declarator_list: single_declaration */ +#line 1120 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5867 "MachineIndependent/glslang_tab.cpp" +#line 5991 "MachineIndependent/glslang_tab.cpp" break; - case 121: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ -#line 1104 "MachineIndependent/glslang.y" + case 124: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ +#line 1123 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 5876 "MachineIndependent/glslang_tab.cpp" +#line 6000 "MachineIndependent/glslang_tab.cpp" break; - case 122: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ -#line 1108 "MachineIndependent/glslang.y" + case 125: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ +#line 1127 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 5885 "MachineIndependent/glslang_tab.cpp" +#line 6009 "MachineIndependent/glslang_tab.cpp" break; - case 123: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ -#line 1112 "MachineIndependent/glslang.y" + case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ +#line 1131 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-5].interm).type; 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 5895 "MachineIndependent/glslang_tab.cpp" +#line 6019 "MachineIndependent/glslang_tab.cpp" break; - case 124: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ -#line 1117 "MachineIndependent/glslang.y" + case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ +#line 1136 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm).type; 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 5905 "MachineIndependent/glslang_tab.cpp" +#line 6029 "MachineIndependent/glslang_tab.cpp" break; - case 125: /* single_declaration: fully_specified_type */ -#line 1125 "MachineIndependent/glslang.y" + case 128: /* single_declaration: fully_specified_type */ +#line 1144 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; @@ -5913,51 +6037,51 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 5917 "MachineIndependent/glslang_tab.cpp" +#line 6041 "MachineIndependent/glslang_tab.cpp" break; - case 126: /* single_declaration: fully_specified_type IDENTIFIER */ -#line 1132 "MachineIndependent/glslang.y" + case 129: /* single_declaration: fully_specified_type IDENTIFIER */ +#line 1151 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-1].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 5927 "MachineIndependent/glslang_tab.cpp" +#line 6051 "MachineIndependent/glslang_tab.cpp" break; - case 127: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ -#line 1137 "MachineIndependent/glslang.y" + case 130: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ +#line 1156 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-2].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 5937 "MachineIndependent/glslang_tab.cpp" +#line 6061 "MachineIndependent/glslang_tab.cpp" break; - case 128: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ -#line 1142 "MachineIndependent/glslang.y" + case 131: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ +#line 1161 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm.type); 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 5947 "MachineIndependent/glslang_tab.cpp" +#line 6071 "MachineIndependent/glslang_tab.cpp" break; - case 129: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 1147 "MachineIndependent/glslang.y" + case 132: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 1166 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-3].interm.type); 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 5957 "MachineIndependent/glslang_tab.cpp" +#line 6081 "MachineIndependent/glslang_tab.cpp" break; - case 130: /* fully_specified_type: type_specifier */ -#line 1156 "MachineIndependent/glslang.y" + case 133: /* fully_specified_type: type_specifier */ +#line 1175 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -5968,11 +6092,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 5972 "MachineIndependent/glslang_tab.cpp" +#line 6096 "MachineIndependent/glslang_tab.cpp" break; - case 131: /* fully_specified_type: type_qualifier type_specifier */ -#line 1166 "MachineIndependent/glslang.y" + case 134: /* fully_specified_type: type_qualifier type_specifier */ +#line 1185 "MachineIndependent/glslang.y" { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type)); @@ -5997,22 +6121,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 6001 "MachineIndependent/glslang_tab.cpp" +#line 6125 "MachineIndependent/glslang_tab.cpp" break; - case 132: /* invariant_qualifier: INVARIANT */ -#line 1193 "MachineIndependent/glslang.y" + case 135: /* invariant_qualifier: INVARIANT */ +#line 1212 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "invariant"); parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 6012 "MachineIndependent/glslang_tab.cpp" +#line 6136 "MachineIndependent/glslang_tab.cpp" break; - case 133: /* interpolation_qualifier: SMOOTH */ -#line 1202 "MachineIndependent/glslang.y" + case 136: /* interpolation_qualifier: SMOOTH */ +#line 1221 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); @@ -6020,11 +6144,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 6024 "MachineIndependent/glslang_tab.cpp" +#line 6148 "MachineIndependent/glslang_tab.cpp" break; - case 134: /* interpolation_qualifier: FLAT */ -#line 1209 "MachineIndependent/glslang.y" + case 137: /* interpolation_qualifier: FLAT */ +#line 1228 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); @@ -6032,11 +6156,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 6036 "MachineIndependent/glslang_tab.cpp" +#line 6160 "MachineIndependent/glslang_tab.cpp" break; - case 135: /* interpolation_qualifier: NOPERSPECTIVE */ -#line 1217 "MachineIndependent/glslang.y" + case 138: /* interpolation_qualifier: NOPERSPECTIVE */ +#line 1236 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); @@ -6044,11 +6168,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 6048 "MachineIndependent/glslang_tab.cpp" +#line 6172 "MachineIndependent/glslang_tab.cpp" break; - case 136: /* interpolation_qualifier: EXPLICITINTERPAMD */ -#line 1224 "MachineIndependent/glslang.y" + case 139: /* interpolation_qualifier: EXPLICITINTERPAMD */ +#line 1243 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); @@ -6056,11 +6180,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 6060 "MachineIndependent/glslang_tab.cpp" +#line 6184 "MachineIndependent/glslang_tab.cpp" break; - case 137: /* interpolation_qualifier: PERVERTEXNV */ -#line 1231 "MachineIndependent/glslang.y" + case 140: /* interpolation_qualifier: PERVERTEXNV */ +#line 1250 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); @@ -6069,11 +6193,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 6073 "MachineIndependent/glslang_tab.cpp" +#line 6197 "MachineIndependent/glslang_tab.cpp" break; - case 138: /* interpolation_qualifier: PERPRIMITIVENV */ -#line 1239 "MachineIndependent/glslang.y" + case 141: /* interpolation_qualifier: PERPRIMITIVENV */ +#line 1258 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); @@ -6084,11 +6208,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6088 "MachineIndependent/glslang_tab.cpp" +#line 6212 "MachineIndependent/glslang_tab.cpp" break; - case 139: /* interpolation_qualifier: PERVIEWNV */ -#line 1249 "MachineIndependent/glslang.y" + case 142: /* interpolation_qualifier: PERVIEWNV */ +#line 1268 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); @@ -6096,11 +6220,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 6100 "MachineIndependent/glslang_tab.cpp" +#line 6224 "MachineIndependent/glslang_tab.cpp" break; - case 140: /* interpolation_qualifier: PERTASKNV */ -#line 1256 "MachineIndependent/glslang.y" + case 143: /* interpolation_qualifier: PERTASKNV */ +#line 1275 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); @@ -6108,84 +6232,84 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 6112 "MachineIndependent/glslang_tab.cpp" +#line 6236 "MachineIndependent/glslang_tab.cpp" break; - case 141: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ -#line 1267 "MachineIndependent/glslang.y" + case 144: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ +#line 1286 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 6120 "MachineIndependent/glslang_tab.cpp" +#line 6244 "MachineIndependent/glslang_tab.cpp" break; - case 142: /* layout_qualifier_id_list: layout_qualifier_id */ -#line 1273 "MachineIndependent/glslang.y" + case 145: /* layout_qualifier_id_list: layout_qualifier_id */ +#line 1292 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6128 "MachineIndependent/glslang_tab.cpp" +#line 6252 "MachineIndependent/glslang_tab.cpp" break; - case 143: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ -#line 1276 "MachineIndependent/glslang.y" + case 146: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ +#line 1295 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 6138 "MachineIndependent/glslang_tab.cpp" +#line 6262 "MachineIndependent/glslang_tab.cpp" break; - case 144: /* layout_qualifier_id: IDENTIFIER */ -#line 1283 "MachineIndependent/glslang.y" + case 147: /* layout_qualifier_id: IDENTIFIER */ +#line 1302 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 6147 "MachineIndependent/glslang_tab.cpp" +#line 6271 "MachineIndependent/glslang_tab.cpp" break; - case 145: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ -#line 1287 "MachineIndependent/glslang.y" + case 148: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ +#line 1306 "MachineIndependent/glslang.y" { (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 6156 "MachineIndependent/glslang_tab.cpp" +#line 6280 "MachineIndependent/glslang_tab.cpp" break; - case 146: /* layout_qualifier_id: SHARED */ -#line 1291 "MachineIndependent/glslang.y" + case 149: /* layout_qualifier_id: SHARED */ +#line 1310 "MachineIndependent/glslang.y" { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 6166 "MachineIndependent/glslang_tab.cpp" +#line 6290 "MachineIndependent/glslang_tab.cpp" break; - case 147: /* precise_qualifier: PRECISE */ -#line 1300 "MachineIndependent/glslang.y" + case 150: /* precise_qualifier: PRECISE */ +#line 1319 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 6177 "MachineIndependent/glslang_tab.cpp" +#line 6301 "MachineIndependent/glslang_tab.cpp" break; - case 148: /* type_qualifier: single_type_qualifier */ -#line 1310 "MachineIndependent/glslang.y" + case 151: /* type_qualifier: single_type_qualifier */ +#line 1329 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6185 "MachineIndependent/glslang_tab.cpp" +#line 6309 "MachineIndependent/glslang_tab.cpp" break; - case 149: /* type_qualifier: type_qualifier single_type_qualifier */ -#line 1313 "MachineIndependent/glslang.y" + case 152: /* type_qualifier: type_qualifier single_type_qualifier */ +#line 1332 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -6194,112 +6318,112 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 6198 "MachineIndependent/glslang_tab.cpp" +#line 6322 "MachineIndependent/glslang_tab.cpp" break; - case 150: /* single_type_qualifier: storage_qualifier */ -#line 1324 "MachineIndependent/glslang.y" + case 153: /* single_type_qualifier: storage_qualifier */ +#line 1343 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6206 "MachineIndependent/glslang_tab.cpp" +#line 6330 "MachineIndependent/glslang_tab.cpp" break; - case 151: /* single_type_qualifier: layout_qualifier */ -#line 1327 "MachineIndependent/glslang.y" + case 154: /* single_type_qualifier: layout_qualifier */ +#line 1346 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6214 "MachineIndependent/glslang_tab.cpp" +#line 6338 "MachineIndependent/glslang_tab.cpp" break; - case 152: /* single_type_qualifier: precision_qualifier */ -#line 1330 "MachineIndependent/glslang.y" + case 155: /* single_type_qualifier: precision_qualifier */ +#line 1349 "MachineIndependent/glslang.y" { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6223 "MachineIndependent/glslang_tab.cpp" +#line 6347 "MachineIndependent/glslang_tab.cpp" break; - case 153: /* single_type_qualifier: interpolation_qualifier */ -#line 1334 "MachineIndependent/glslang.y" + case 156: /* single_type_qualifier: interpolation_qualifier */ +#line 1353 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6232 "MachineIndependent/glslang_tab.cpp" +#line 6356 "MachineIndependent/glslang_tab.cpp" break; - case 154: /* single_type_qualifier: invariant_qualifier */ -#line 1338 "MachineIndependent/glslang.y" + case 157: /* single_type_qualifier: invariant_qualifier */ +#line 1357 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6241 "MachineIndependent/glslang_tab.cpp" +#line 6365 "MachineIndependent/glslang_tab.cpp" break; - case 155: /* single_type_qualifier: precise_qualifier */ -#line 1343 "MachineIndependent/glslang.y" + case 158: /* single_type_qualifier: precise_qualifier */ +#line 1362 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6250 "MachineIndependent/glslang_tab.cpp" +#line 6374 "MachineIndependent/glslang_tab.cpp" break; - case 156: /* single_type_qualifier: non_uniform_qualifier */ -#line 1347 "MachineIndependent/glslang.y" + case 159: /* single_type_qualifier: non_uniform_qualifier */ +#line 1366 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6258 "MachineIndependent/glslang_tab.cpp" +#line 6382 "MachineIndependent/glslang_tab.cpp" break; - case 157: /* storage_qualifier: CONST */ -#line 1354 "MachineIndependent/glslang.y" + case 160: /* storage_qualifier: CONST */ +#line 1373 "MachineIndependent/glslang.y" { (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 6267 "MachineIndependent/glslang_tab.cpp" +#line 6391 "MachineIndependent/glslang_tab.cpp" break; - case 158: /* storage_qualifier: INOUT */ -#line 1358 "MachineIndependent/glslang.y" + case 161: /* storage_qualifier: INOUT */ +#line 1377 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 6277 "MachineIndependent/glslang_tab.cpp" +#line 6401 "MachineIndependent/glslang_tab.cpp" break; - case 159: /* storage_qualifier: IN */ -#line 1363 "MachineIndependent/glslang.y" + case 162: /* storage_qualifier: IN */ +#line 1382 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 6288 "MachineIndependent/glslang_tab.cpp" +#line 6412 "MachineIndependent/glslang_tab.cpp" break; - case 160: /* storage_qualifier: OUT */ -#line 1369 "MachineIndependent/glslang.y" + case 163: /* storage_qualifier: OUT */ +#line 1388 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 6299 "MachineIndependent/glslang_tab.cpp" +#line 6423 "MachineIndependent/glslang_tab.cpp" break; - case 161: /* storage_qualifier: CENTROID */ -#line 1375 "MachineIndependent/glslang.y" + case 164: /* storage_qualifier: CENTROID */ +#line 1394 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -6307,21 +6431,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 6311 "MachineIndependent/glslang_tab.cpp" +#line 6435 "MachineIndependent/glslang_tab.cpp" break; - case 162: /* storage_qualifier: UNIFORM */ -#line 1382 "MachineIndependent/glslang.y" + case 165: /* storage_qualifier: UNIFORM */ +#line 1401 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 6321 "MachineIndependent/glslang_tab.cpp" +#line 6445 "MachineIndependent/glslang_tab.cpp" break; - case 163: /* storage_qualifier: SHARED */ -#line 1387 "MachineIndependent/glslang.y" + case 166: /* storage_qualifier: SHARED */ +#line 1406 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); @@ -6330,21 +6454,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 6334 "MachineIndependent/glslang_tab.cpp" +#line 6458 "MachineIndependent/glslang_tab.cpp" break; - case 164: /* storage_qualifier: BUFFER */ -#line 1395 "MachineIndependent/glslang.y" + case 167: /* storage_qualifier: BUFFER */ +#line 1414 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 6344 "MachineIndependent/glslang_tab.cpp" +#line 6468 "MachineIndependent/glslang_tab.cpp" break; - case 165: /* storage_qualifier: ATTRIBUTE */ -#line 1401 "MachineIndependent/glslang.y" + case 168: /* storage_qualifier: ATTRIBUTE */ +#line 1420 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -6357,11 +6481,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6361 "MachineIndependent/glslang_tab.cpp" +#line 6485 "MachineIndependent/glslang_tab.cpp" break; - case 166: /* storage_qualifier: VARYING */ -#line 1413 "MachineIndependent/glslang.y" + case 169: /* storage_qualifier: VARYING */ +#line 1432 "MachineIndependent/glslang.y" { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -6376,32 +6500,32 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6380 "MachineIndependent/glslang_tab.cpp" +#line 6504 "MachineIndependent/glslang_tab.cpp" break; - case 167: /* storage_qualifier: PATCH */ -#line 1427 "MachineIndependent/glslang.y" + case 170: /* storage_qualifier: PATCH */ +#line 1446 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 6391 "MachineIndependent/glslang_tab.cpp" +#line 6515 "MachineIndependent/glslang_tab.cpp" break; - case 168: /* storage_qualifier: SAMPLE */ -#line 1433 "MachineIndependent/glslang.y" + case 171: /* storage_qualifier: SAMPLE */ +#line 1452 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 6401 "MachineIndependent/glslang_tab.cpp" +#line 6525 "MachineIndependent/glslang_tab.cpp" break; - case 169: /* storage_qualifier: HITATTRNV */ -#line 1438 "MachineIndependent/glslang.y" + case 172: /* storage_qualifier: HITATTRNV */ +#line 1457 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -6410,11 +6534,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6414 "MachineIndependent/glslang_tab.cpp" +#line 6538 "MachineIndependent/glslang_tab.cpp" break; - case 170: /* storage_qualifier: HITATTREXT */ -#line 1446 "MachineIndependent/glslang.y" + case 173: /* storage_qualifier: HITATTREXT */ +#line 1465 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -6423,11 +6547,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6427 "MachineIndependent/glslang_tab.cpp" +#line 6551 "MachineIndependent/glslang_tab.cpp" break; - case 171: /* storage_qualifier: PAYLOADNV */ -#line 1454 "MachineIndependent/glslang.y" + case 174: /* storage_qualifier: PAYLOADNV */ +#line 1473 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -6436,11 +6560,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6440 "MachineIndependent/glslang_tab.cpp" +#line 6564 "MachineIndependent/glslang_tab.cpp" break; - case 172: /* storage_qualifier: PAYLOADEXT */ -#line 1462 "MachineIndependent/glslang.y" + case 175: /* storage_qualifier: PAYLOADEXT */ +#line 1481 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -6449,11 +6573,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6453 "MachineIndependent/glslang_tab.cpp" +#line 6577 "MachineIndependent/glslang_tab.cpp" break; - case 173: /* storage_qualifier: PAYLOADINNV */ -#line 1470 "MachineIndependent/glslang.y" + case 176: /* storage_qualifier: PAYLOADINNV */ +#line 1489 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6462,11 +6586,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6466 "MachineIndependent/glslang_tab.cpp" +#line 6590 "MachineIndependent/glslang_tab.cpp" break; - case 174: /* storage_qualifier: PAYLOADINEXT */ -#line 1478 "MachineIndependent/glslang.y" + case 177: /* storage_qualifier: PAYLOADINEXT */ +#line 1497 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6475,11 +6599,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6479 "MachineIndependent/glslang_tab.cpp" +#line 6603 "MachineIndependent/glslang_tab.cpp" break; - case 175: /* storage_qualifier: CALLDATANV */ -#line 1486 "MachineIndependent/glslang.y" + case 178: /* storage_qualifier: CALLDATANV */ +#line 1505 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6488,11 +6612,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6492 "MachineIndependent/glslang_tab.cpp" +#line 6616 "MachineIndependent/glslang_tab.cpp" break; - case 176: /* storage_qualifier: CALLDATAEXT */ -#line 1494 "MachineIndependent/glslang.y" + case 179: /* storage_qualifier: CALLDATAEXT */ +#line 1513 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6501,11 +6625,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6505 "MachineIndependent/glslang_tab.cpp" +#line 6629 "MachineIndependent/glslang_tab.cpp" break; - case 177: /* storage_qualifier: CALLDATAINNV */ -#line 1502 "MachineIndependent/glslang.y" + case 180: /* storage_qualifier: CALLDATAINNV */ +#line 1521 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -6513,11 +6637,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6517 "MachineIndependent/glslang_tab.cpp" +#line 6641 "MachineIndependent/glslang_tab.cpp" break; - case 178: /* storage_qualifier: CALLDATAINEXT */ -#line 1509 "MachineIndependent/glslang.y" + case 181: /* storage_qualifier: CALLDATAINEXT */ +#line 1528 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -6525,175 +6649,175 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6529 "MachineIndependent/glslang_tab.cpp" +#line 6653 "MachineIndependent/glslang_tab.cpp" break; - case 179: /* storage_qualifier: COHERENT */ -#line 1516 "MachineIndependent/glslang.y" + case 182: /* storage_qualifier: COHERENT */ +#line 1535 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 6538 "MachineIndependent/glslang_tab.cpp" +#line 6662 "MachineIndependent/glslang_tab.cpp" break; - case 180: /* storage_qualifier: DEVICECOHERENT */ -#line 1520 "MachineIndependent/glslang.y" + case 183: /* storage_qualifier: DEVICECOHERENT */ +#line 1539 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 6548 "MachineIndependent/glslang_tab.cpp" +#line 6672 "MachineIndependent/glslang_tab.cpp" break; - case 181: /* storage_qualifier: QUEUEFAMILYCOHERENT */ -#line 1525 "MachineIndependent/glslang.y" + case 184: /* storage_qualifier: QUEUEFAMILYCOHERENT */ +#line 1544 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 6558 "MachineIndependent/glslang_tab.cpp" +#line 6682 "MachineIndependent/glslang_tab.cpp" break; - case 182: /* storage_qualifier: WORKGROUPCOHERENT */ -#line 1530 "MachineIndependent/glslang.y" + case 185: /* storage_qualifier: WORKGROUPCOHERENT */ +#line 1549 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 6568 "MachineIndependent/glslang_tab.cpp" +#line 6692 "MachineIndependent/glslang_tab.cpp" break; - case 183: /* storage_qualifier: SUBGROUPCOHERENT */ -#line 1535 "MachineIndependent/glslang.y" + case 186: /* storage_qualifier: SUBGROUPCOHERENT */ +#line 1554 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 6578 "MachineIndependent/glslang_tab.cpp" +#line 6702 "MachineIndependent/glslang_tab.cpp" break; - case 184: /* storage_qualifier: NONPRIVATE */ -#line 1540 "MachineIndependent/glslang.y" + case 187: /* storage_qualifier: NONPRIVATE */ +#line 1559 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 6588 "MachineIndependent/glslang_tab.cpp" +#line 6712 "MachineIndependent/glslang_tab.cpp" break; - case 185: /* storage_qualifier: SHADERCALLCOHERENT */ -#line 1545 "MachineIndependent/glslang.y" + case 188: /* storage_qualifier: SHADERCALLCOHERENT */ +#line 1564 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 6598 "MachineIndependent/glslang_tab.cpp" +#line 6722 "MachineIndependent/glslang_tab.cpp" break; - case 186: /* storage_qualifier: VOLATILE */ -#line 1550 "MachineIndependent/glslang.y" + case 189: /* storage_qualifier: VOLATILE */ +#line 1569 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 6607 "MachineIndependent/glslang_tab.cpp" +#line 6731 "MachineIndependent/glslang_tab.cpp" break; - case 187: /* storage_qualifier: RESTRICT */ -#line 1554 "MachineIndependent/glslang.y" + case 190: /* storage_qualifier: RESTRICT */ +#line 1573 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 6616 "MachineIndependent/glslang_tab.cpp" +#line 6740 "MachineIndependent/glslang_tab.cpp" break; - case 188: /* storage_qualifier: READONLY */ -#line 1558 "MachineIndependent/glslang.y" + case 191: /* storage_qualifier: READONLY */ +#line 1577 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 6625 "MachineIndependent/glslang_tab.cpp" +#line 6749 "MachineIndependent/glslang_tab.cpp" break; - case 189: /* storage_qualifier: WRITEONLY */ -#line 1562 "MachineIndependent/glslang.y" + case 192: /* storage_qualifier: WRITEONLY */ +#line 1581 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 6634 "MachineIndependent/glslang_tab.cpp" +#line 6758 "MachineIndependent/glslang_tab.cpp" break; - case 190: /* storage_qualifier: SUBROUTINE */ -#line 1566 "MachineIndependent/glslang.y" + case 193: /* storage_qualifier: SUBROUTINE */ +#line 1585 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 6645 "MachineIndependent/glslang_tab.cpp" +#line 6769 "MachineIndependent/glslang_tab.cpp" break; - case 191: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ -#line 1572 "MachineIndependent/glslang.y" + case 194: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ +#line 1591 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 6656 "MachineIndependent/glslang_tab.cpp" +#line 6780 "MachineIndependent/glslang_tab.cpp" break; - case 192: /* non_uniform_qualifier: NONUNIFORM */ -#line 1583 "MachineIndependent/glslang.y" + case 195: /* non_uniform_qualifier: NONUNIFORM */ +#line 1602 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 6665 "MachineIndependent/glslang_tab.cpp" +#line 6789 "MachineIndependent/glslang_tab.cpp" break; - case 193: /* type_name_list: IDENTIFIER */ -#line 1590 "MachineIndependent/glslang.y" + case 196: /* type_name_list: IDENTIFIER */ +#line 1609 "MachineIndependent/glslang.y" { // TODO } -#line 6673 "MachineIndependent/glslang_tab.cpp" +#line 6797 "MachineIndependent/glslang_tab.cpp" break; - case 194: /* type_name_list: type_name_list COMMA IDENTIFIER */ -#line 1593 "MachineIndependent/glslang.y" + case 197: /* type_name_list: type_name_list COMMA IDENTIFIER */ +#line 1612 "MachineIndependent/glslang.y" { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 6683 "MachineIndependent/glslang_tab.cpp" +#line 6807 "MachineIndependent/glslang_tab.cpp" break; - case 195: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ -#line 1602 "MachineIndependent/glslang.y" + case 198: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ +#line 1621 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 6693 "MachineIndependent/glslang_tab.cpp" +#line 6817 "MachineIndependent/glslang_tab.cpp" break; - case 196: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ -#line 1607 "MachineIndependent/glslang.y" + case 199: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ +#line 1626 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); @@ -6701,21 +6825,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 6705 "MachineIndependent/glslang_tab.cpp" +#line 6829 "MachineIndependent/glslang_tab.cpp" break; - case 197: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ -#line 1617 "MachineIndependent/glslang.y" + case 200: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ +#line 1636 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 6715 "MachineIndependent/glslang_tab.cpp" +#line 6839 "MachineIndependent/glslang_tab.cpp" break; - case 198: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1622 "MachineIndependent/glslang.y" + case 201: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1641 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -6724,20 +6848,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6728 "MachineIndependent/glslang_tab.cpp" +#line 6852 "MachineIndependent/glslang_tab.cpp" break; - case 199: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ -#line 1630 "MachineIndependent/glslang.y" + case 202: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ +#line 1649 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 6737 "MachineIndependent/glslang_tab.cpp" +#line 6861 "MachineIndependent/glslang_tab.cpp" break; - case 200: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1634 "MachineIndependent/glslang.y" + case 203: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1653 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); @@ -6745,35 +6869,35 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6749 "MachineIndependent/glslang_tab.cpp" +#line 6873 "MachineIndependent/glslang_tab.cpp" break; - case 201: /* type_parameter_specifier_opt: type_parameter_specifier */ -#line 1644 "MachineIndependent/glslang.y" + case 204: /* type_parameter_specifier_opt: type_parameter_specifier */ +#line 1663 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 6757 "MachineIndependent/glslang_tab.cpp" +#line 6881 "MachineIndependent/glslang_tab.cpp" break; - case 202: /* type_parameter_specifier_opt: %empty */ -#line 1647 "MachineIndependent/glslang.y" + case 205: /* type_parameter_specifier_opt: %empty */ +#line 1666 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = 0; } -#line 6765 "MachineIndependent/glslang_tab.cpp" +#line 6889 "MachineIndependent/glslang_tab.cpp" break; - case 203: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ -#line 1653 "MachineIndependent/glslang.y" + case 206: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ +#line 1672 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 6773 "MachineIndependent/glslang_tab.cpp" +#line 6897 "MachineIndependent/glslang_tab.cpp" break; - case 204: /* type_parameter_specifier_list: unary_expression */ -#line 1659 "MachineIndependent/glslang.y" + case 207: /* type_parameter_specifier_list: unary_expression */ +#line 1678 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = new TArraySizes; @@ -6781,11 +6905,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6785 "MachineIndependent/glslang_tab.cpp" +#line 6909 "MachineIndependent/glslang_tab.cpp" break; - case 205: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ -#line 1666 "MachineIndependent/glslang.y" + case 208: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ +#line 1685 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -6793,300 +6917,300 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6797 "MachineIndependent/glslang_tab.cpp" +#line 6921 "MachineIndependent/glslang_tab.cpp" break; - case 206: /* type_specifier_nonarray: VOID */ -#line 1676 "MachineIndependent/glslang.y" + case 209: /* type_specifier_nonarray: VOID */ +#line 1695 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 6806 "MachineIndependent/glslang_tab.cpp" +#line 6930 "MachineIndependent/glslang_tab.cpp" break; - case 207: /* type_specifier_nonarray: FLOAT */ -#line 1680 "MachineIndependent/glslang.y" + case 210: /* type_specifier_nonarray: FLOAT */ +#line 1699 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6815 "MachineIndependent/glslang_tab.cpp" +#line 6939 "MachineIndependent/glslang_tab.cpp" break; - case 208: /* type_specifier_nonarray: INT */ -#line 1684 "MachineIndependent/glslang.y" + case 211: /* type_specifier_nonarray: INT */ +#line 1703 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6824 "MachineIndependent/glslang_tab.cpp" +#line 6948 "MachineIndependent/glslang_tab.cpp" break; - case 209: /* type_specifier_nonarray: UINT */ -#line 1688 "MachineIndependent/glslang.y" + case 212: /* type_specifier_nonarray: UINT */ +#line 1707 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6834 "MachineIndependent/glslang_tab.cpp" +#line 6958 "MachineIndependent/glslang_tab.cpp" break; - case 210: /* type_specifier_nonarray: BOOL */ -#line 1693 "MachineIndependent/glslang.y" + case 213: /* type_specifier_nonarray: BOOL */ +#line 1712 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 6843 "MachineIndependent/glslang_tab.cpp" +#line 6967 "MachineIndependent/glslang_tab.cpp" break; - case 211: /* type_specifier_nonarray: VEC2 */ -#line 1697 "MachineIndependent/glslang.y" + case 214: /* type_specifier_nonarray: VEC2 */ +#line 1716 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6853 "MachineIndependent/glslang_tab.cpp" +#line 6977 "MachineIndependent/glslang_tab.cpp" break; - case 212: /* type_specifier_nonarray: VEC3 */ -#line 1702 "MachineIndependent/glslang.y" + case 215: /* type_specifier_nonarray: VEC3 */ +#line 1721 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6863 "MachineIndependent/glslang_tab.cpp" +#line 6987 "MachineIndependent/glslang_tab.cpp" break; - case 213: /* type_specifier_nonarray: VEC4 */ -#line 1707 "MachineIndependent/glslang.y" + case 216: /* type_specifier_nonarray: VEC4 */ +#line 1726 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6873 "MachineIndependent/glslang_tab.cpp" +#line 6997 "MachineIndependent/glslang_tab.cpp" break; - case 214: /* type_specifier_nonarray: BVEC2 */ -#line 1712 "MachineIndependent/glslang.y" + case 217: /* type_specifier_nonarray: BVEC2 */ +#line 1731 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 6883 "MachineIndependent/glslang_tab.cpp" +#line 7007 "MachineIndependent/glslang_tab.cpp" break; - case 215: /* type_specifier_nonarray: BVEC3 */ -#line 1717 "MachineIndependent/glslang.y" + case 218: /* type_specifier_nonarray: BVEC3 */ +#line 1736 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 6893 "MachineIndependent/glslang_tab.cpp" +#line 7017 "MachineIndependent/glslang_tab.cpp" break; - case 216: /* type_specifier_nonarray: BVEC4 */ -#line 1722 "MachineIndependent/glslang.y" + case 219: /* type_specifier_nonarray: BVEC4 */ +#line 1741 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 6903 "MachineIndependent/glslang_tab.cpp" +#line 7027 "MachineIndependent/glslang_tab.cpp" break; - case 217: /* type_specifier_nonarray: IVEC2 */ -#line 1727 "MachineIndependent/glslang.y" + case 220: /* type_specifier_nonarray: IVEC2 */ +#line 1746 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 6913 "MachineIndependent/glslang_tab.cpp" +#line 7037 "MachineIndependent/glslang_tab.cpp" break; - case 218: /* type_specifier_nonarray: IVEC3 */ -#line 1732 "MachineIndependent/glslang.y" + case 221: /* type_specifier_nonarray: IVEC3 */ +#line 1751 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 6923 "MachineIndependent/glslang_tab.cpp" +#line 7047 "MachineIndependent/glslang_tab.cpp" break; - case 219: /* type_specifier_nonarray: IVEC4 */ -#line 1737 "MachineIndependent/glslang.y" + case 222: /* type_specifier_nonarray: IVEC4 */ +#line 1756 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 6933 "MachineIndependent/glslang_tab.cpp" +#line 7057 "MachineIndependent/glslang_tab.cpp" break; - case 220: /* type_specifier_nonarray: UVEC2 */ -#line 1742 "MachineIndependent/glslang.y" + case 223: /* type_specifier_nonarray: UVEC2 */ +#line 1761 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 6944 "MachineIndependent/glslang_tab.cpp" +#line 7068 "MachineIndependent/glslang_tab.cpp" break; - case 221: /* type_specifier_nonarray: UVEC3 */ -#line 1748 "MachineIndependent/glslang.y" + case 224: /* type_specifier_nonarray: UVEC3 */ +#line 1767 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 6955 "MachineIndependent/glslang_tab.cpp" +#line 7079 "MachineIndependent/glslang_tab.cpp" break; - case 222: /* type_specifier_nonarray: UVEC4 */ -#line 1754 "MachineIndependent/glslang.y" + case 225: /* type_specifier_nonarray: UVEC4 */ +#line 1773 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 6966 "MachineIndependent/glslang_tab.cpp" +#line 7090 "MachineIndependent/glslang_tab.cpp" break; - case 223: /* type_specifier_nonarray: MAT2 */ -#line 1760 "MachineIndependent/glslang.y" + case 226: /* type_specifier_nonarray: MAT2 */ +#line 1779 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 6976 "MachineIndependent/glslang_tab.cpp" +#line 7100 "MachineIndependent/glslang_tab.cpp" break; - case 224: /* type_specifier_nonarray: MAT3 */ -#line 1765 "MachineIndependent/glslang.y" + case 227: /* type_specifier_nonarray: MAT3 */ +#line 1784 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 6986 "MachineIndependent/glslang_tab.cpp" +#line 7110 "MachineIndependent/glslang_tab.cpp" break; - case 225: /* type_specifier_nonarray: MAT4 */ -#line 1770 "MachineIndependent/glslang.y" + case 228: /* type_specifier_nonarray: MAT4 */ +#line 1789 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 6996 "MachineIndependent/glslang_tab.cpp" +#line 7120 "MachineIndependent/glslang_tab.cpp" break; - case 226: /* type_specifier_nonarray: MAT2X2 */ -#line 1775 "MachineIndependent/glslang.y" + case 229: /* type_specifier_nonarray: MAT2X2 */ +#line 1794 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7006 "MachineIndependent/glslang_tab.cpp" +#line 7130 "MachineIndependent/glslang_tab.cpp" break; - case 227: /* type_specifier_nonarray: MAT2X3 */ -#line 1780 "MachineIndependent/glslang.y" + case 230: /* type_specifier_nonarray: MAT2X3 */ +#line 1799 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7016 "MachineIndependent/glslang_tab.cpp" +#line 7140 "MachineIndependent/glslang_tab.cpp" break; - case 228: /* type_specifier_nonarray: MAT2X4 */ -#line 1785 "MachineIndependent/glslang.y" + case 231: /* type_specifier_nonarray: MAT2X4 */ +#line 1804 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7026 "MachineIndependent/glslang_tab.cpp" +#line 7150 "MachineIndependent/glslang_tab.cpp" break; - case 229: /* type_specifier_nonarray: MAT3X2 */ -#line 1790 "MachineIndependent/glslang.y" + case 232: /* type_specifier_nonarray: MAT3X2 */ +#line 1809 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7036 "MachineIndependent/glslang_tab.cpp" +#line 7160 "MachineIndependent/glslang_tab.cpp" break; - case 230: /* type_specifier_nonarray: MAT3X3 */ -#line 1795 "MachineIndependent/glslang.y" + case 233: /* type_specifier_nonarray: MAT3X3 */ +#line 1814 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7046 "MachineIndependent/glslang_tab.cpp" +#line 7170 "MachineIndependent/glslang_tab.cpp" break; - case 231: /* type_specifier_nonarray: MAT3X4 */ -#line 1800 "MachineIndependent/glslang.y" + case 234: /* type_specifier_nonarray: MAT3X4 */ +#line 1819 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7056 "MachineIndependent/glslang_tab.cpp" +#line 7180 "MachineIndependent/glslang_tab.cpp" break; - case 232: /* type_specifier_nonarray: MAT4X2 */ -#line 1805 "MachineIndependent/glslang.y" + case 235: /* type_specifier_nonarray: MAT4X2 */ +#line 1824 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7066 "MachineIndependent/glslang_tab.cpp" +#line 7190 "MachineIndependent/glslang_tab.cpp" break; - case 233: /* type_specifier_nonarray: MAT4X3 */ -#line 1810 "MachineIndependent/glslang.y" + case 236: /* type_specifier_nonarray: MAT4X3 */ +#line 1829 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7076 "MachineIndependent/glslang_tab.cpp" +#line 7200 "MachineIndependent/glslang_tab.cpp" break; - case 234: /* type_specifier_nonarray: MAT4X4 */ -#line 1815 "MachineIndependent/glslang.y" + case 237: /* type_specifier_nonarray: MAT4X4 */ +#line 1834 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7086 "MachineIndependent/glslang_tab.cpp" +#line 7210 "MachineIndependent/glslang_tab.cpp" break; - case 235: /* type_specifier_nonarray: DOUBLE */ -#line 1821 "MachineIndependent/glslang.y" + case 238: /* type_specifier_nonarray: DOUBLE */ +#line 1840 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7094,121 +7218,121 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7098 "MachineIndependent/glslang_tab.cpp" +#line 7222 "MachineIndependent/glslang_tab.cpp" break; - case 236: /* type_specifier_nonarray: FLOAT16_T */ -#line 1828 "MachineIndependent/glslang.y" + case 239: /* type_specifier_nonarray: FLOAT16_T */ +#line 1847 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 7108 "MachineIndependent/glslang_tab.cpp" +#line 7232 "MachineIndependent/glslang_tab.cpp" break; - case 237: /* type_specifier_nonarray: FLOAT32_T */ -#line 1833 "MachineIndependent/glslang.y" + case 240: /* type_specifier_nonarray: FLOAT32_T */ +#line 1852 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7118 "MachineIndependent/glslang_tab.cpp" +#line 7242 "MachineIndependent/glslang_tab.cpp" break; - case 238: /* type_specifier_nonarray: FLOAT64_T */ -#line 1838 "MachineIndependent/glslang.y" + case 241: /* type_specifier_nonarray: FLOAT64_T */ +#line 1857 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7128 "MachineIndependent/glslang_tab.cpp" +#line 7252 "MachineIndependent/glslang_tab.cpp" break; - case 239: /* type_specifier_nonarray: INT8_T */ -#line 1843 "MachineIndependent/glslang.y" + case 242: /* type_specifier_nonarray: INT8_T */ +#line 1862 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 7138 "MachineIndependent/glslang_tab.cpp" +#line 7262 "MachineIndependent/glslang_tab.cpp" break; - case 240: /* type_specifier_nonarray: UINT8_T */ -#line 1848 "MachineIndependent/glslang.y" + case 243: /* type_specifier_nonarray: UINT8_T */ +#line 1867 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 7148 "MachineIndependent/glslang_tab.cpp" +#line 7272 "MachineIndependent/glslang_tab.cpp" break; - case 241: /* type_specifier_nonarray: INT16_T */ -#line 1853 "MachineIndependent/glslang.y" + case 244: /* type_specifier_nonarray: INT16_T */ +#line 1872 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 7158 "MachineIndependent/glslang_tab.cpp" +#line 7282 "MachineIndependent/glslang_tab.cpp" break; - case 242: /* type_specifier_nonarray: UINT16_T */ -#line 1858 "MachineIndependent/glslang.y" + case 245: /* type_specifier_nonarray: UINT16_T */ +#line 1877 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 7168 "MachineIndependent/glslang_tab.cpp" +#line 7292 "MachineIndependent/glslang_tab.cpp" break; - case 243: /* type_specifier_nonarray: INT32_T */ -#line 1863 "MachineIndependent/glslang.y" + case 246: /* type_specifier_nonarray: INT32_T */ +#line 1882 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7178 "MachineIndependent/glslang_tab.cpp" +#line 7302 "MachineIndependent/glslang_tab.cpp" break; - case 244: /* type_specifier_nonarray: UINT32_T */ -#line 1868 "MachineIndependent/glslang.y" + case 247: /* type_specifier_nonarray: UINT32_T */ +#line 1887 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 7188 "MachineIndependent/glslang_tab.cpp" +#line 7312 "MachineIndependent/glslang_tab.cpp" break; - case 245: /* type_specifier_nonarray: INT64_T */ -#line 1873 "MachineIndependent/glslang.y" + case 248: /* type_specifier_nonarray: INT64_T */ +#line 1892 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 7198 "MachineIndependent/glslang_tab.cpp" +#line 7322 "MachineIndependent/glslang_tab.cpp" break; - case 246: /* type_specifier_nonarray: UINT64_T */ -#line 1878 "MachineIndependent/glslang.y" + case 249: /* type_specifier_nonarray: UINT64_T */ +#line 1897 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 7208 "MachineIndependent/glslang_tab.cpp" +#line 7332 "MachineIndependent/glslang_tab.cpp" break; - case 247: /* type_specifier_nonarray: DVEC2 */ -#line 1883 "MachineIndependent/glslang.y" + case 250: /* type_specifier_nonarray: DVEC2 */ +#line 1902 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7217,11 +7341,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7221 "MachineIndependent/glslang_tab.cpp" +#line 7345 "MachineIndependent/glslang_tab.cpp" break; - case 248: /* type_specifier_nonarray: DVEC3 */ -#line 1891 "MachineIndependent/glslang.y" + case 251: /* type_specifier_nonarray: DVEC3 */ +#line 1910 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7230,11 +7354,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7234 "MachineIndependent/glslang_tab.cpp" +#line 7358 "MachineIndependent/glslang_tab.cpp" break; - case 249: /* type_specifier_nonarray: DVEC4 */ -#line 1899 "MachineIndependent/glslang.y" + case 252: /* type_specifier_nonarray: DVEC4 */ +#line 1918 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7243,374 +7367,374 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7247 "MachineIndependent/glslang_tab.cpp" +#line 7371 "MachineIndependent/glslang_tab.cpp" break; - case 250: /* type_specifier_nonarray: F16VEC2 */ -#line 1907 "MachineIndependent/glslang.y" + case 253: /* type_specifier_nonarray: F16VEC2 */ +#line 1926 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 7258 "MachineIndependent/glslang_tab.cpp" +#line 7382 "MachineIndependent/glslang_tab.cpp" break; - case 251: /* type_specifier_nonarray: F16VEC3 */ -#line 1913 "MachineIndependent/glslang.y" + case 254: /* type_specifier_nonarray: F16VEC3 */ +#line 1932 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 7269 "MachineIndependent/glslang_tab.cpp" +#line 7393 "MachineIndependent/glslang_tab.cpp" break; - case 252: /* type_specifier_nonarray: F16VEC4 */ -#line 1919 "MachineIndependent/glslang.y" + case 255: /* type_specifier_nonarray: F16VEC4 */ +#line 1938 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 7280 "MachineIndependent/glslang_tab.cpp" +#line 7404 "MachineIndependent/glslang_tab.cpp" break; - case 253: /* type_specifier_nonarray: F32VEC2 */ -#line 1925 "MachineIndependent/glslang.y" + case 256: /* type_specifier_nonarray: F32VEC2 */ +#line 1944 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 7291 "MachineIndependent/glslang_tab.cpp" +#line 7415 "MachineIndependent/glslang_tab.cpp" break; - case 254: /* type_specifier_nonarray: F32VEC3 */ -#line 1931 "MachineIndependent/glslang.y" + case 257: /* type_specifier_nonarray: F32VEC3 */ +#line 1950 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 7302 "MachineIndependent/glslang_tab.cpp" +#line 7426 "MachineIndependent/glslang_tab.cpp" break; - case 255: /* type_specifier_nonarray: F32VEC4 */ -#line 1937 "MachineIndependent/glslang.y" + case 258: /* type_specifier_nonarray: F32VEC4 */ +#line 1956 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7313 "MachineIndependent/glslang_tab.cpp" +#line 7437 "MachineIndependent/glslang_tab.cpp" break; - case 256: /* type_specifier_nonarray: F64VEC2 */ -#line 1943 "MachineIndependent/glslang.y" + case 259: /* type_specifier_nonarray: F64VEC2 */ +#line 1962 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7324 "MachineIndependent/glslang_tab.cpp" +#line 7448 "MachineIndependent/glslang_tab.cpp" break; - case 257: /* type_specifier_nonarray: F64VEC3 */ -#line 1949 "MachineIndependent/glslang.y" + case 260: /* type_specifier_nonarray: F64VEC3 */ +#line 1968 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7335 "MachineIndependent/glslang_tab.cpp" +#line 7459 "MachineIndependent/glslang_tab.cpp" break; - case 258: /* type_specifier_nonarray: F64VEC4 */ -#line 1955 "MachineIndependent/glslang.y" + case 261: /* type_specifier_nonarray: F64VEC4 */ +#line 1974 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7346 "MachineIndependent/glslang_tab.cpp" +#line 7470 "MachineIndependent/glslang_tab.cpp" break; - case 259: /* type_specifier_nonarray: I8VEC2 */ -#line 1961 "MachineIndependent/glslang.y" + case 262: /* type_specifier_nonarray: I8VEC2 */ +#line 1980 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 7357 "MachineIndependent/glslang_tab.cpp" +#line 7481 "MachineIndependent/glslang_tab.cpp" break; - case 260: /* type_specifier_nonarray: I8VEC3 */ -#line 1967 "MachineIndependent/glslang.y" + case 263: /* type_specifier_nonarray: I8VEC3 */ +#line 1986 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 7368 "MachineIndependent/glslang_tab.cpp" +#line 7492 "MachineIndependent/glslang_tab.cpp" break; - case 261: /* type_specifier_nonarray: I8VEC4 */ -#line 1973 "MachineIndependent/glslang.y" + case 264: /* type_specifier_nonarray: I8VEC4 */ +#line 1992 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 7379 "MachineIndependent/glslang_tab.cpp" +#line 7503 "MachineIndependent/glslang_tab.cpp" break; - case 262: /* type_specifier_nonarray: I16VEC2 */ -#line 1979 "MachineIndependent/glslang.y" + case 265: /* type_specifier_nonarray: I16VEC2 */ +#line 1998 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 7390 "MachineIndependent/glslang_tab.cpp" +#line 7514 "MachineIndependent/glslang_tab.cpp" break; - case 263: /* type_specifier_nonarray: I16VEC3 */ -#line 1985 "MachineIndependent/glslang.y" + case 266: /* type_specifier_nonarray: I16VEC3 */ +#line 2004 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 7401 "MachineIndependent/glslang_tab.cpp" +#line 7525 "MachineIndependent/glslang_tab.cpp" break; - case 264: /* type_specifier_nonarray: I16VEC4 */ -#line 1991 "MachineIndependent/glslang.y" + case 267: /* type_specifier_nonarray: I16VEC4 */ +#line 2010 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 7412 "MachineIndependent/glslang_tab.cpp" +#line 7536 "MachineIndependent/glslang_tab.cpp" break; - case 265: /* type_specifier_nonarray: I32VEC2 */ -#line 1997 "MachineIndependent/glslang.y" + case 268: /* type_specifier_nonarray: I32VEC2 */ +#line 2016 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 7423 "MachineIndependent/glslang_tab.cpp" +#line 7547 "MachineIndependent/glslang_tab.cpp" break; - case 266: /* type_specifier_nonarray: I32VEC3 */ -#line 2003 "MachineIndependent/glslang.y" + case 269: /* type_specifier_nonarray: I32VEC3 */ +#line 2022 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 7434 "MachineIndependent/glslang_tab.cpp" +#line 7558 "MachineIndependent/glslang_tab.cpp" break; - case 267: /* type_specifier_nonarray: I32VEC4 */ -#line 2009 "MachineIndependent/glslang.y" + case 270: /* type_specifier_nonarray: I32VEC4 */ +#line 2028 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 7445 "MachineIndependent/glslang_tab.cpp" +#line 7569 "MachineIndependent/glslang_tab.cpp" break; - case 268: /* type_specifier_nonarray: I64VEC2 */ -#line 2015 "MachineIndependent/glslang.y" + case 271: /* type_specifier_nonarray: I64VEC2 */ +#line 2034 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 7456 "MachineIndependent/glslang_tab.cpp" +#line 7580 "MachineIndependent/glslang_tab.cpp" break; - case 269: /* type_specifier_nonarray: I64VEC3 */ -#line 2021 "MachineIndependent/glslang.y" + case 272: /* type_specifier_nonarray: I64VEC3 */ +#line 2040 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 7467 "MachineIndependent/glslang_tab.cpp" +#line 7591 "MachineIndependent/glslang_tab.cpp" break; - case 270: /* type_specifier_nonarray: I64VEC4 */ -#line 2027 "MachineIndependent/glslang.y" + case 273: /* type_specifier_nonarray: I64VEC4 */ +#line 2046 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 7478 "MachineIndependent/glslang_tab.cpp" +#line 7602 "MachineIndependent/glslang_tab.cpp" break; - case 271: /* type_specifier_nonarray: U8VEC2 */ -#line 2033 "MachineIndependent/glslang.y" + case 274: /* type_specifier_nonarray: U8VEC2 */ +#line 2052 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 7489 "MachineIndependent/glslang_tab.cpp" +#line 7613 "MachineIndependent/glslang_tab.cpp" break; - case 272: /* type_specifier_nonarray: U8VEC3 */ -#line 2039 "MachineIndependent/glslang.y" + case 275: /* type_specifier_nonarray: U8VEC3 */ +#line 2058 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 7500 "MachineIndependent/glslang_tab.cpp" +#line 7624 "MachineIndependent/glslang_tab.cpp" break; - case 273: /* type_specifier_nonarray: U8VEC4 */ -#line 2045 "MachineIndependent/glslang.y" + case 276: /* type_specifier_nonarray: U8VEC4 */ +#line 2064 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 7511 "MachineIndependent/glslang_tab.cpp" +#line 7635 "MachineIndependent/glslang_tab.cpp" break; - case 274: /* type_specifier_nonarray: U16VEC2 */ -#line 2051 "MachineIndependent/glslang.y" + case 277: /* type_specifier_nonarray: U16VEC2 */ +#line 2070 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 7522 "MachineIndependent/glslang_tab.cpp" +#line 7646 "MachineIndependent/glslang_tab.cpp" break; - case 275: /* type_specifier_nonarray: U16VEC3 */ -#line 2057 "MachineIndependent/glslang.y" + case 278: /* type_specifier_nonarray: U16VEC3 */ +#line 2076 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 7533 "MachineIndependent/glslang_tab.cpp" +#line 7657 "MachineIndependent/glslang_tab.cpp" break; - case 276: /* type_specifier_nonarray: U16VEC4 */ -#line 2063 "MachineIndependent/glslang.y" + case 279: /* type_specifier_nonarray: U16VEC4 */ +#line 2082 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 7544 "MachineIndependent/glslang_tab.cpp" +#line 7668 "MachineIndependent/glslang_tab.cpp" break; - case 277: /* type_specifier_nonarray: U32VEC2 */ -#line 2069 "MachineIndependent/glslang.y" + case 280: /* type_specifier_nonarray: U32VEC2 */ +#line 2088 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7555 "MachineIndependent/glslang_tab.cpp" +#line 7679 "MachineIndependent/glslang_tab.cpp" break; - case 278: /* type_specifier_nonarray: U32VEC3 */ -#line 2075 "MachineIndependent/glslang.y" + case 281: /* type_specifier_nonarray: U32VEC3 */ +#line 2094 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7566 "MachineIndependent/glslang_tab.cpp" +#line 7690 "MachineIndependent/glslang_tab.cpp" break; - case 279: /* type_specifier_nonarray: U32VEC4 */ -#line 2081 "MachineIndependent/glslang.y" + case 282: /* type_specifier_nonarray: U32VEC4 */ +#line 2100 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7577 "MachineIndependent/glslang_tab.cpp" +#line 7701 "MachineIndependent/glslang_tab.cpp" break; - case 280: /* type_specifier_nonarray: U64VEC2 */ -#line 2087 "MachineIndependent/glslang.y" + case 283: /* type_specifier_nonarray: U64VEC2 */ +#line 2106 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 7588 "MachineIndependent/glslang_tab.cpp" +#line 7712 "MachineIndependent/glslang_tab.cpp" break; - case 281: /* type_specifier_nonarray: U64VEC3 */ -#line 2093 "MachineIndependent/glslang.y" + case 284: /* type_specifier_nonarray: U64VEC3 */ +#line 2112 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 7599 "MachineIndependent/glslang_tab.cpp" +#line 7723 "MachineIndependent/glslang_tab.cpp" break; - case 282: /* type_specifier_nonarray: U64VEC4 */ -#line 2099 "MachineIndependent/glslang.y" + case 285: /* type_specifier_nonarray: U64VEC4 */ +#line 2118 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 7610 "MachineIndependent/glslang_tab.cpp" +#line 7734 "MachineIndependent/glslang_tab.cpp" break; - case 283: /* type_specifier_nonarray: DMAT2 */ -#line 2105 "MachineIndependent/glslang.y" + case 286: /* type_specifier_nonarray: DMAT2 */ +#line 2124 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7619,11 +7743,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7623 "MachineIndependent/glslang_tab.cpp" +#line 7747 "MachineIndependent/glslang_tab.cpp" break; - case 284: /* type_specifier_nonarray: DMAT3 */ -#line 2113 "MachineIndependent/glslang.y" + case 287: /* type_specifier_nonarray: DMAT3 */ +#line 2132 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7632,11 +7756,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7636 "MachineIndependent/glslang_tab.cpp" +#line 7760 "MachineIndependent/glslang_tab.cpp" break; - case 285: /* type_specifier_nonarray: DMAT4 */ -#line 2121 "MachineIndependent/glslang.y" + case 288: /* type_specifier_nonarray: DMAT4 */ +#line 2140 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7645,11 +7769,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7649 "MachineIndependent/glslang_tab.cpp" +#line 7773 "MachineIndependent/glslang_tab.cpp" break; - case 286: /* type_specifier_nonarray: DMAT2X2 */ -#line 2129 "MachineIndependent/glslang.y" + case 289: /* type_specifier_nonarray: DMAT2X2 */ +#line 2148 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7658,11 +7782,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7662 "MachineIndependent/glslang_tab.cpp" +#line 7786 "MachineIndependent/glslang_tab.cpp" break; - case 287: /* type_specifier_nonarray: DMAT2X3 */ -#line 2137 "MachineIndependent/glslang.y" + case 290: /* type_specifier_nonarray: DMAT2X3 */ +#line 2156 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7671,11 +7795,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7675 "MachineIndependent/glslang_tab.cpp" +#line 7799 "MachineIndependent/glslang_tab.cpp" break; - case 288: /* type_specifier_nonarray: DMAT2X4 */ -#line 2145 "MachineIndependent/glslang.y" + case 291: /* type_specifier_nonarray: DMAT2X4 */ +#line 2164 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7684,11 +7808,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7688 "MachineIndependent/glslang_tab.cpp" +#line 7812 "MachineIndependent/glslang_tab.cpp" break; - case 289: /* type_specifier_nonarray: DMAT3X2 */ -#line 2153 "MachineIndependent/glslang.y" + case 292: /* type_specifier_nonarray: DMAT3X2 */ +#line 2172 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7697,11 +7821,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7701 "MachineIndependent/glslang_tab.cpp" +#line 7825 "MachineIndependent/glslang_tab.cpp" break; - case 290: /* type_specifier_nonarray: DMAT3X3 */ -#line 2161 "MachineIndependent/glslang.y" + case 293: /* type_specifier_nonarray: DMAT3X3 */ +#line 2180 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7710,11 +7834,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7714 "MachineIndependent/glslang_tab.cpp" +#line 7838 "MachineIndependent/glslang_tab.cpp" break; - case 291: /* type_specifier_nonarray: DMAT3X4 */ -#line 2169 "MachineIndependent/glslang.y" + case 294: /* type_specifier_nonarray: DMAT3X4 */ +#line 2188 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7723,11 +7847,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7727 "MachineIndependent/glslang_tab.cpp" +#line 7851 "MachineIndependent/glslang_tab.cpp" break; - case 292: /* type_specifier_nonarray: DMAT4X2 */ -#line 2177 "MachineIndependent/glslang.y" + case 295: /* type_specifier_nonarray: DMAT4X2 */ +#line 2196 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7736,11 +7860,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7740 "MachineIndependent/glslang_tab.cpp" +#line 7864 "MachineIndependent/glslang_tab.cpp" break; - case 293: /* type_specifier_nonarray: DMAT4X3 */ -#line 2185 "MachineIndependent/glslang.y" + case 296: /* type_specifier_nonarray: DMAT4X3 */ +#line 2204 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7749,11 +7873,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7753 "MachineIndependent/glslang_tab.cpp" +#line 7877 "MachineIndependent/glslang_tab.cpp" break; - case 294: /* type_specifier_nonarray: DMAT4X4 */ -#line 2193 "MachineIndependent/glslang.y" + case 297: /* type_specifier_nonarray: DMAT4X4 */ +#line 2212 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7762,2228 +7886,2228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7766 "MachineIndependent/glslang_tab.cpp" +#line 7890 "MachineIndependent/glslang_tab.cpp" break; - case 295: /* type_specifier_nonarray: F16MAT2 */ -#line 2201 "MachineIndependent/glslang.y" + case 298: /* type_specifier_nonarray: F16MAT2 */ +#line 2220 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7777 "MachineIndependent/glslang_tab.cpp" +#line 7901 "MachineIndependent/glslang_tab.cpp" break; - case 296: /* type_specifier_nonarray: F16MAT3 */ -#line 2207 "MachineIndependent/glslang.y" + case 299: /* type_specifier_nonarray: F16MAT3 */ +#line 2226 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7788 "MachineIndependent/glslang_tab.cpp" +#line 7912 "MachineIndependent/glslang_tab.cpp" break; - case 297: /* type_specifier_nonarray: F16MAT4 */ -#line 2213 "MachineIndependent/glslang.y" + case 300: /* type_specifier_nonarray: F16MAT4 */ +#line 2232 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7799 "MachineIndependent/glslang_tab.cpp" +#line 7923 "MachineIndependent/glslang_tab.cpp" break; - case 298: /* type_specifier_nonarray: F16MAT2X2 */ -#line 2219 "MachineIndependent/glslang.y" + case 301: /* type_specifier_nonarray: F16MAT2X2 */ +#line 2238 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7810 "MachineIndependent/glslang_tab.cpp" +#line 7934 "MachineIndependent/glslang_tab.cpp" break; - case 299: /* type_specifier_nonarray: F16MAT2X3 */ -#line 2225 "MachineIndependent/glslang.y" + case 302: /* type_specifier_nonarray: F16MAT2X3 */ +#line 2244 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 7821 "MachineIndependent/glslang_tab.cpp" +#line 7945 "MachineIndependent/glslang_tab.cpp" break; - case 300: /* type_specifier_nonarray: F16MAT2X4 */ -#line 2231 "MachineIndependent/glslang.y" + case 303: /* type_specifier_nonarray: F16MAT2X4 */ +#line 2250 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 7832 "MachineIndependent/glslang_tab.cpp" +#line 7956 "MachineIndependent/glslang_tab.cpp" break; - case 301: /* type_specifier_nonarray: F16MAT3X2 */ -#line 2237 "MachineIndependent/glslang.y" + case 304: /* type_specifier_nonarray: F16MAT3X2 */ +#line 2256 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 7843 "MachineIndependent/glslang_tab.cpp" +#line 7967 "MachineIndependent/glslang_tab.cpp" break; - case 302: /* type_specifier_nonarray: F16MAT3X3 */ -#line 2243 "MachineIndependent/glslang.y" + case 305: /* type_specifier_nonarray: F16MAT3X3 */ +#line 2262 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7854 "MachineIndependent/glslang_tab.cpp" +#line 7978 "MachineIndependent/glslang_tab.cpp" break; - case 303: /* type_specifier_nonarray: F16MAT3X4 */ -#line 2249 "MachineIndependent/glslang.y" + case 306: /* type_specifier_nonarray: F16MAT3X4 */ +#line 2268 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 7865 "MachineIndependent/glslang_tab.cpp" +#line 7989 "MachineIndependent/glslang_tab.cpp" break; - case 304: /* type_specifier_nonarray: F16MAT4X2 */ -#line 2255 "MachineIndependent/glslang.y" + case 307: /* type_specifier_nonarray: F16MAT4X2 */ +#line 2274 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 7876 "MachineIndependent/glslang_tab.cpp" +#line 8000 "MachineIndependent/glslang_tab.cpp" break; - case 305: /* type_specifier_nonarray: F16MAT4X3 */ -#line 2261 "MachineIndependent/glslang.y" + case 308: /* type_specifier_nonarray: F16MAT4X3 */ +#line 2280 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 7887 "MachineIndependent/glslang_tab.cpp" +#line 8011 "MachineIndependent/glslang_tab.cpp" break; - case 306: /* type_specifier_nonarray: F16MAT4X4 */ -#line 2267 "MachineIndependent/glslang.y" + case 309: /* type_specifier_nonarray: F16MAT4X4 */ +#line 2286 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7898 "MachineIndependent/glslang_tab.cpp" +#line 8022 "MachineIndependent/glslang_tab.cpp" break; - case 307: /* type_specifier_nonarray: F32MAT2 */ -#line 2273 "MachineIndependent/glslang.y" + case 310: /* type_specifier_nonarray: F32MAT2 */ +#line 2292 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7909 "MachineIndependent/glslang_tab.cpp" +#line 8033 "MachineIndependent/glslang_tab.cpp" break; - case 308: /* type_specifier_nonarray: F32MAT3 */ -#line 2279 "MachineIndependent/glslang.y" + case 311: /* type_specifier_nonarray: F32MAT3 */ +#line 2298 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7920 "MachineIndependent/glslang_tab.cpp" +#line 8044 "MachineIndependent/glslang_tab.cpp" break; - case 309: /* type_specifier_nonarray: F32MAT4 */ -#line 2285 "MachineIndependent/glslang.y" + case 312: /* type_specifier_nonarray: F32MAT4 */ +#line 2304 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7931 "MachineIndependent/glslang_tab.cpp" +#line 8055 "MachineIndependent/glslang_tab.cpp" break; - case 310: /* type_specifier_nonarray: F32MAT2X2 */ -#line 2291 "MachineIndependent/glslang.y" + case 313: /* type_specifier_nonarray: F32MAT2X2 */ +#line 2310 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7942 "MachineIndependent/glslang_tab.cpp" +#line 8066 "MachineIndependent/glslang_tab.cpp" break; - case 311: /* type_specifier_nonarray: F32MAT2X3 */ -#line 2297 "MachineIndependent/glslang.y" + case 314: /* type_specifier_nonarray: F32MAT2X3 */ +#line 2316 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7953 "MachineIndependent/glslang_tab.cpp" +#line 8077 "MachineIndependent/glslang_tab.cpp" break; - case 312: /* type_specifier_nonarray: F32MAT2X4 */ -#line 2303 "MachineIndependent/glslang.y" + case 315: /* type_specifier_nonarray: F32MAT2X4 */ +#line 2322 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7964 "MachineIndependent/glslang_tab.cpp" +#line 8088 "MachineIndependent/glslang_tab.cpp" break; - case 313: /* type_specifier_nonarray: F32MAT3X2 */ -#line 2309 "MachineIndependent/glslang.y" + case 316: /* type_specifier_nonarray: F32MAT3X2 */ +#line 2328 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7975 "MachineIndependent/glslang_tab.cpp" +#line 8099 "MachineIndependent/glslang_tab.cpp" break; - case 314: /* type_specifier_nonarray: F32MAT3X3 */ -#line 2315 "MachineIndependent/glslang.y" + case 317: /* type_specifier_nonarray: F32MAT3X3 */ +#line 2334 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7986 "MachineIndependent/glslang_tab.cpp" +#line 8110 "MachineIndependent/glslang_tab.cpp" break; - case 315: /* type_specifier_nonarray: F32MAT3X4 */ -#line 2321 "MachineIndependent/glslang.y" + case 318: /* type_specifier_nonarray: F32MAT3X4 */ +#line 2340 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7997 "MachineIndependent/glslang_tab.cpp" +#line 8121 "MachineIndependent/glslang_tab.cpp" break; - case 316: /* type_specifier_nonarray: F32MAT4X2 */ -#line 2327 "MachineIndependent/glslang.y" + case 319: /* type_specifier_nonarray: F32MAT4X2 */ +#line 2346 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 8008 "MachineIndependent/glslang_tab.cpp" +#line 8132 "MachineIndependent/glslang_tab.cpp" break; - case 317: /* type_specifier_nonarray: F32MAT4X3 */ -#line 2333 "MachineIndependent/glslang.y" + case 320: /* type_specifier_nonarray: F32MAT4X3 */ +#line 2352 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 8019 "MachineIndependent/glslang_tab.cpp" +#line 8143 "MachineIndependent/glslang_tab.cpp" break; - case 318: /* type_specifier_nonarray: F32MAT4X4 */ -#line 2339 "MachineIndependent/glslang.y" + case 321: /* type_specifier_nonarray: F32MAT4X4 */ +#line 2358 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 8030 "MachineIndependent/glslang_tab.cpp" +#line 8154 "MachineIndependent/glslang_tab.cpp" break; - case 319: /* type_specifier_nonarray: F64MAT2 */ -#line 2345 "MachineIndependent/glslang.y" + case 322: /* type_specifier_nonarray: F64MAT2 */ +#line 2364 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8041 "MachineIndependent/glslang_tab.cpp" +#line 8165 "MachineIndependent/glslang_tab.cpp" break; - case 320: /* type_specifier_nonarray: F64MAT3 */ -#line 2351 "MachineIndependent/glslang.y" + case 323: /* type_specifier_nonarray: F64MAT3 */ +#line 2370 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8052 "MachineIndependent/glslang_tab.cpp" +#line 8176 "MachineIndependent/glslang_tab.cpp" break; - case 321: /* type_specifier_nonarray: F64MAT4 */ -#line 2357 "MachineIndependent/glslang.y" + case 324: /* type_specifier_nonarray: F64MAT4 */ +#line 2376 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8063 "MachineIndependent/glslang_tab.cpp" +#line 8187 "MachineIndependent/glslang_tab.cpp" break; - case 322: /* type_specifier_nonarray: F64MAT2X2 */ -#line 2363 "MachineIndependent/glslang.y" + case 325: /* type_specifier_nonarray: F64MAT2X2 */ +#line 2382 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8074 "MachineIndependent/glslang_tab.cpp" +#line 8198 "MachineIndependent/glslang_tab.cpp" break; - case 323: /* type_specifier_nonarray: F64MAT2X3 */ -#line 2369 "MachineIndependent/glslang.y" + case 326: /* type_specifier_nonarray: F64MAT2X3 */ +#line 2388 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8085 "MachineIndependent/glslang_tab.cpp" +#line 8209 "MachineIndependent/glslang_tab.cpp" break; - case 324: /* type_specifier_nonarray: F64MAT2X4 */ -#line 2375 "MachineIndependent/glslang.y" + case 327: /* type_specifier_nonarray: F64MAT2X4 */ +#line 2394 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8096 "MachineIndependent/glslang_tab.cpp" +#line 8220 "MachineIndependent/glslang_tab.cpp" break; - case 325: /* type_specifier_nonarray: F64MAT3X2 */ -#line 2381 "MachineIndependent/glslang.y" + case 328: /* type_specifier_nonarray: F64MAT3X2 */ +#line 2400 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8107 "MachineIndependent/glslang_tab.cpp" +#line 8231 "MachineIndependent/glslang_tab.cpp" break; - case 326: /* type_specifier_nonarray: F64MAT3X3 */ -#line 2387 "MachineIndependent/glslang.y" + case 329: /* type_specifier_nonarray: F64MAT3X3 */ +#line 2406 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8118 "MachineIndependent/glslang_tab.cpp" +#line 8242 "MachineIndependent/glslang_tab.cpp" break; - case 327: /* type_specifier_nonarray: F64MAT3X4 */ -#line 2393 "MachineIndependent/glslang.y" + case 330: /* type_specifier_nonarray: F64MAT3X4 */ +#line 2412 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8129 "MachineIndependent/glslang_tab.cpp" +#line 8253 "MachineIndependent/glslang_tab.cpp" break; - case 328: /* type_specifier_nonarray: F64MAT4X2 */ -#line 2399 "MachineIndependent/glslang.y" + case 331: /* type_specifier_nonarray: F64MAT4X2 */ +#line 2418 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8140 "MachineIndependent/glslang_tab.cpp" +#line 8264 "MachineIndependent/glslang_tab.cpp" break; - case 329: /* type_specifier_nonarray: F64MAT4X3 */ -#line 2405 "MachineIndependent/glslang.y" + case 332: /* type_specifier_nonarray: F64MAT4X3 */ +#line 2424 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8151 "MachineIndependent/glslang_tab.cpp" +#line 8275 "MachineIndependent/glslang_tab.cpp" break; - case 330: /* type_specifier_nonarray: F64MAT4X4 */ -#line 2411 "MachineIndependent/glslang.y" + case 333: /* type_specifier_nonarray: F64MAT4X4 */ +#line 2430 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8162 "MachineIndependent/glslang_tab.cpp" +#line 8286 "MachineIndependent/glslang_tab.cpp" break; - case 331: /* type_specifier_nonarray: ACCSTRUCTNV */ -#line 2417 "MachineIndependent/glslang.y" + case 334: /* type_specifier_nonarray: ACCSTRUCTNV */ +#line 2436 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8171 "MachineIndependent/glslang_tab.cpp" +#line 8295 "MachineIndependent/glslang_tab.cpp" break; - case 332: /* type_specifier_nonarray: ACCSTRUCTEXT */ -#line 2421 "MachineIndependent/glslang.y" + case 335: /* type_specifier_nonarray: ACCSTRUCTEXT */ +#line 2440 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8180 "MachineIndependent/glslang_tab.cpp" +#line 8304 "MachineIndependent/glslang_tab.cpp" break; - case 333: /* type_specifier_nonarray: RAYQUERYEXT */ -#line 2425 "MachineIndependent/glslang.y" + case 336: /* type_specifier_nonarray: RAYQUERYEXT */ +#line 2444 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 8189 "MachineIndependent/glslang_tab.cpp" +#line 8313 "MachineIndependent/glslang_tab.cpp" break; - case 334: /* type_specifier_nonarray: ATOMIC_UINT */ -#line 2429 "MachineIndependent/glslang.y" + case 337: /* type_specifier_nonarray: ATOMIC_UINT */ +#line 2448 "MachineIndependent/glslang.y" { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 8199 "MachineIndependent/glslang_tab.cpp" +#line 8323 "MachineIndependent/glslang_tab.cpp" break; - case 335: /* type_specifier_nonarray: SAMPLER1D */ -#line 2434 "MachineIndependent/glslang.y" + case 338: /* type_specifier_nonarray: SAMPLER1D */ +#line 2453 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 8209 "MachineIndependent/glslang_tab.cpp" +#line 8333 "MachineIndependent/glslang_tab.cpp" break; - case 336: /* type_specifier_nonarray: SAMPLER2D */ -#line 2440 "MachineIndependent/glslang.y" + case 339: /* type_specifier_nonarray: SAMPLER2D */ +#line 2459 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 8219 "MachineIndependent/glslang_tab.cpp" +#line 8343 "MachineIndependent/glslang_tab.cpp" break; - case 337: /* type_specifier_nonarray: SAMPLER3D */ -#line 2445 "MachineIndependent/glslang.y" + case 340: /* type_specifier_nonarray: SAMPLER3D */ +#line 2464 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 8229 "MachineIndependent/glslang_tab.cpp" +#line 8353 "MachineIndependent/glslang_tab.cpp" break; - case 338: /* type_specifier_nonarray: SAMPLERCUBE */ -#line 2450 "MachineIndependent/glslang.y" + case 341: /* type_specifier_nonarray: SAMPLERCUBE */ +#line 2469 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 8239 "MachineIndependent/glslang_tab.cpp" +#line 8363 "MachineIndependent/glslang_tab.cpp" break; - case 339: /* type_specifier_nonarray: SAMPLER2DSHADOW */ -#line 2455 "MachineIndependent/glslang.y" + case 342: /* type_specifier_nonarray: SAMPLER2DSHADOW */ +#line 2474 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 8249 "MachineIndependent/glslang_tab.cpp" +#line 8373 "MachineIndependent/glslang_tab.cpp" break; - case 340: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ -#line 2460 "MachineIndependent/glslang.y" + case 343: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ +#line 2479 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 8259 "MachineIndependent/glslang_tab.cpp" +#line 8383 "MachineIndependent/glslang_tab.cpp" break; - case 341: /* type_specifier_nonarray: SAMPLER2DARRAY */ -#line 2465 "MachineIndependent/glslang.y" + case 344: /* type_specifier_nonarray: SAMPLER2DARRAY */ +#line 2484 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 8269 "MachineIndependent/glslang_tab.cpp" +#line 8393 "MachineIndependent/glslang_tab.cpp" break; - case 342: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ -#line 2470 "MachineIndependent/glslang.y" + case 345: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ +#line 2489 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 8279 "MachineIndependent/glslang_tab.cpp" +#line 8403 "MachineIndependent/glslang_tab.cpp" break; - case 343: /* type_specifier_nonarray: SAMPLER1DSHADOW */ -#line 2476 "MachineIndependent/glslang.y" + case 346: /* type_specifier_nonarray: SAMPLER1DSHADOW */ +#line 2495 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 8289 "MachineIndependent/glslang_tab.cpp" +#line 8413 "MachineIndependent/glslang_tab.cpp" break; - case 344: /* type_specifier_nonarray: SAMPLER1DARRAY */ -#line 2481 "MachineIndependent/glslang.y" + case 347: /* type_specifier_nonarray: SAMPLER1DARRAY */ +#line 2500 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 8299 "MachineIndependent/glslang_tab.cpp" +#line 8423 "MachineIndependent/glslang_tab.cpp" break; - case 345: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ -#line 2486 "MachineIndependent/glslang.y" + case 348: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ +#line 2505 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 8309 "MachineIndependent/glslang_tab.cpp" +#line 8433 "MachineIndependent/glslang_tab.cpp" break; - case 346: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ -#line 2491 "MachineIndependent/glslang.y" + case 349: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ +#line 2510 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 8319 "MachineIndependent/glslang_tab.cpp" +#line 8443 "MachineIndependent/glslang_tab.cpp" break; - case 347: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ -#line 2496 "MachineIndependent/glslang.y" + case 350: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ +#line 2515 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 8329 "MachineIndependent/glslang_tab.cpp" +#line 8453 "MachineIndependent/glslang_tab.cpp" break; - case 348: /* type_specifier_nonarray: F16SAMPLER1D */ -#line 2501 "MachineIndependent/glslang.y" + case 351: /* type_specifier_nonarray: F16SAMPLER1D */ +#line 2520 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 8340 "MachineIndependent/glslang_tab.cpp" +#line 8464 "MachineIndependent/glslang_tab.cpp" break; - case 349: /* type_specifier_nonarray: F16SAMPLER2D */ -#line 2507 "MachineIndependent/glslang.y" + case 352: /* type_specifier_nonarray: F16SAMPLER2D */ +#line 2526 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 8351 "MachineIndependent/glslang_tab.cpp" +#line 8475 "MachineIndependent/glslang_tab.cpp" break; - case 350: /* type_specifier_nonarray: F16SAMPLER3D */ -#line 2513 "MachineIndependent/glslang.y" + case 353: /* type_specifier_nonarray: F16SAMPLER3D */ +#line 2532 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 8362 "MachineIndependent/glslang_tab.cpp" +#line 8486 "MachineIndependent/glslang_tab.cpp" break; - case 351: /* type_specifier_nonarray: F16SAMPLERCUBE */ -#line 2519 "MachineIndependent/glslang.y" + case 354: /* type_specifier_nonarray: F16SAMPLERCUBE */ +#line 2538 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 8373 "MachineIndependent/glslang_tab.cpp" +#line 8497 "MachineIndependent/glslang_tab.cpp" break; - case 352: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ -#line 2525 "MachineIndependent/glslang.y" + case 355: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ +#line 2544 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 8384 "MachineIndependent/glslang_tab.cpp" +#line 8508 "MachineIndependent/glslang_tab.cpp" break; - case 353: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ -#line 2531 "MachineIndependent/glslang.y" + case 356: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ +#line 2550 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 8395 "MachineIndependent/glslang_tab.cpp" +#line 8519 "MachineIndependent/glslang_tab.cpp" break; - case 354: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ -#line 2537 "MachineIndependent/glslang.y" + case 357: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ +#line 2556 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 8406 "MachineIndependent/glslang_tab.cpp" +#line 8530 "MachineIndependent/glslang_tab.cpp" break; - case 355: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ -#line 2543 "MachineIndependent/glslang.y" + case 358: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ +#line 2562 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 8417 "MachineIndependent/glslang_tab.cpp" +#line 8541 "MachineIndependent/glslang_tab.cpp" break; - case 356: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ -#line 2549 "MachineIndependent/glslang.y" + case 359: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ +#line 2568 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 8428 "MachineIndependent/glslang_tab.cpp" +#line 8552 "MachineIndependent/glslang_tab.cpp" break; - case 357: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ -#line 2555 "MachineIndependent/glslang.y" + case 360: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ +#line 2574 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 8439 "MachineIndependent/glslang_tab.cpp" +#line 8563 "MachineIndependent/glslang_tab.cpp" break; - case 358: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ -#line 2561 "MachineIndependent/glslang.y" + case 361: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ +#line 2580 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 8450 "MachineIndependent/glslang_tab.cpp" +#line 8574 "MachineIndependent/glslang_tab.cpp" break; - case 359: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ -#line 2567 "MachineIndependent/glslang.y" + case 362: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ +#line 2586 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 8461 "MachineIndependent/glslang_tab.cpp" +#line 8585 "MachineIndependent/glslang_tab.cpp" break; - case 360: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ -#line 2573 "MachineIndependent/glslang.y" + case 363: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ +#line 2592 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 8472 "MachineIndependent/glslang_tab.cpp" +#line 8596 "MachineIndependent/glslang_tab.cpp" break; - case 361: /* type_specifier_nonarray: ISAMPLER1D */ -#line 2579 "MachineIndependent/glslang.y" + case 364: /* type_specifier_nonarray: ISAMPLER1D */ +#line 2598 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 8482 "MachineIndependent/glslang_tab.cpp" +#line 8606 "MachineIndependent/glslang_tab.cpp" break; - case 362: /* type_specifier_nonarray: ISAMPLER2D */ -#line 2585 "MachineIndependent/glslang.y" + case 365: /* type_specifier_nonarray: ISAMPLER2D */ +#line 2604 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 8492 "MachineIndependent/glslang_tab.cpp" +#line 8616 "MachineIndependent/glslang_tab.cpp" break; - case 363: /* type_specifier_nonarray: ISAMPLER3D */ -#line 2590 "MachineIndependent/glslang.y" + case 366: /* type_specifier_nonarray: ISAMPLER3D */ +#line 2609 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 8502 "MachineIndependent/glslang_tab.cpp" +#line 8626 "MachineIndependent/glslang_tab.cpp" break; - case 364: /* type_specifier_nonarray: ISAMPLERCUBE */ -#line 2595 "MachineIndependent/glslang.y" + case 367: /* type_specifier_nonarray: ISAMPLERCUBE */ +#line 2614 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 8512 "MachineIndependent/glslang_tab.cpp" +#line 8636 "MachineIndependent/glslang_tab.cpp" break; - case 365: /* type_specifier_nonarray: ISAMPLER2DARRAY */ -#line 2600 "MachineIndependent/glslang.y" + case 368: /* type_specifier_nonarray: ISAMPLER2DARRAY */ +#line 2619 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 8522 "MachineIndependent/glslang_tab.cpp" +#line 8646 "MachineIndependent/glslang_tab.cpp" break; - case 366: /* type_specifier_nonarray: USAMPLER2D */ -#line 2605 "MachineIndependent/glslang.y" + case 369: /* type_specifier_nonarray: USAMPLER2D */ +#line 2624 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 8532 "MachineIndependent/glslang_tab.cpp" +#line 8656 "MachineIndependent/glslang_tab.cpp" break; - case 367: /* type_specifier_nonarray: USAMPLER3D */ -#line 2610 "MachineIndependent/glslang.y" + case 370: /* type_specifier_nonarray: USAMPLER3D */ +#line 2629 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 8542 "MachineIndependent/glslang_tab.cpp" +#line 8666 "MachineIndependent/glslang_tab.cpp" break; - case 368: /* type_specifier_nonarray: USAMPLERCUBE */ -#line 2615 "MachineIndependent/glslang.y" + case 371: /* type_specifier_nonarray: USAMPLERCUBE */ +#line 2634 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 8552 "MachineIndependent/glslang_tab.cpp" +#line 8676 "MachineIndependent/glslang_tab.cpp" break; - case 369: /* type_specifier_nonarray: ISAMPLER1DARRAY */ -#line 2621 "MachineIndependent/glslang.y" + case 372: /* type_specifier_nonarray: ISAMPLER1DARRAY */ +#line 2640 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 8562 "MachineIndependent/glslang_tab.cpp" +#line 8686 "MachineIndependent/glslang_tab.cpp" break; - case 370: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ -#line 2626 "MachineIndependent/glslang.y" + case 373: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ +#line 2645 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 8572 "MachineIndependent/glslang_tab.cpp" +#line 8696 "MachineIndependent/glslang_tab.cpp" break; - case 371: /* type_specifier_nonarray: USAMPLER1D */ -#line 2631 "MachineIndependent/glslang.y" + case 374: /* type_specifier_nonarray: USAMPLER1D */ +#line 2650 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 8582 "MachineIndependent/glslang_tab.cpp" +#line 8706 "MachineIndependent/glslang_tab.cpp" break; - case 372: /* type_specifier_nonarray: USAMPLER1DARRAY */ -#line 2636 "MachineIndependent/glslang.y" + case 375: /* type_specifier_nonarray: USAMPLER1DARRAY */ +#line 2655 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 8592 "MachineIndependent/glslang_tab.cpp" +#line 8716 "MachineIndependent/glslang_tab.cpp" break; - case 373: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ -#line 2641 "MachineIndependent/glslang.y" + case 376: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ +#line 2660 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 8602 "MachineIndependent/glslang_tab.cpp" +#line 8726 "MachineIndependent/glslang_tab.cpp" break; - case 374: /* type_specifier_nonarray: TEXTURECUBEARRAY */ -#line 2646 "MachineIndependent/glslang.y" + case 377: /* type_specifier_nonarray: TEXTURECUBEARRAY */ +#line 2665 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 8612 "MachineIndependent/glslang_tab.cpp" +#line 8736 "MachineIndependent/glslang_tab.cpp" break; - case 375: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ -#line 2651 "MachineIndependent/glslang.y" + case 378: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ +#line 2670 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8622 "MachineIndependent/glslang_tab.cpp" +#line 8746 "MachineIndependent/glslang_tab.cpp" break; - case 376: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ -#line 2656 "MachineIndependent/glslang.y" + case 379: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ +#line 2675 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8632 "MachineIndependent/glslang_tab.cpp" +#line 8756 "MachineIndependent/glslang_tab.cpp" break; - case 377: /* type_specifier_nonarray: USAMPLER2DARRAY */ -#line 2662 "MachineIndependent/glslang.y" + case 380: /* type_specifier_nonarray: USAMPLER2DARRAY */ +#line 2681 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 8642 "MachineIndependent/glslang_tab.cpp" +#line 8766 "MachineIndependent/glslang_tab.cpp" break; - case 378: /* type_specifier_nonarray: TEXTURE2D */ -#line 2667 "MachineIndependent/glslang.y" + case 381: /* type_specifier_nonarray: TEXTURE2D */ +#line 2686 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 8652 "MachineIndependent/glslang_tab.cpp" +#line 8776 "MachineIndependent/glslang_tab.cpp" break; - case 379: /* type_specifier_nonarray: TEXTURE3D */ -#line 2672 "MachineIndependent/glslang.y" + case 382: /* type_specifier_nonarray: TEXTURE3D */ +#line 2691 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 8662 "MachineIndependent/glslang_tab.cpp" +#line 8786 "MachineIndependent/glslang_tab.cpp" break; - case 380: /* type_specifier_nonarray: TEXTURE2DARRAY */ -#line 2677 "MachineIndependent/glslang.y" + case 383: /* type_specifier_nonarray: TEXTURE2DARRAY */ +#line 2696 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 8672 "MachineIndependent/glslang_tab.cpp" +#line 8796 "MachineIndependent/glslang_tab.cpp" break; - case 381: /* type_specifier_nonarray: TEXTURECUBE */ -#line 2682 "MachineIndependent/glslang.y" + case 384: /* type_specifier_nonarray: TEXTURECUBE */ +#line 2701 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 8682 "MachineIndependent/glslang_tab.cpp" +#line 8806 "MachineIndependent/glslang_tab.cpp" break; - case 382: /* type_specifier_nonarray: ITEXTURE2D */ -#line 2687 "MachineIndependent/glslang.y" + case 385: /* type_specifier_nonarray: ITEXTURE2D */ +#line 2706 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 8692 "MachineIndependent/glslang_tab.cpp" +#line 8816 "MachineIndependent/glslang_tab.cpp" break; - case 383: /* type_specifier_nonarray: ITEXTURE3D */ -#line 2692 "MachineIndependent/glslang.y" + case 386: /* type_specifier_nonarray: ITEXTURE3D */ +#line 2711 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 8702 "MachineIndependent/glslang_tab.cpp" +#line 8826 "MachineIndependent/glslang_tab.cpp" break; - case 384: /* type_specifier_nonarray: ITEXTURECUBE */ -#line 2697 "MachineIndependent/glslang.y" + case 387: /* type_specifier_nonarray: ITEXTURECUBE */ +#line 2716 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 8712 "MachineIndependent/glslang_tab.cpp" +#line 8836 "MachineIndependent/glslang_tab.cpp" break; - case 385: /* type_specifier_nonarray: ITEXTURE2DARRAY */ -#line 2702 "MachineIndependent/glslang.y" + case 388: /* type_specifier_nonarray: ITEXTURE2DARRAY */ +#line 2721 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 8722 "MachineIndependent/glslang_tab.cpp" +#line 8846 "MachineIndependent/glslang_tab.cpp" break; - case 386: /* type_specifier_nonarray: UTEXTURE2D */ -#line 2707 "MachineIndependent/glslang.y" + case 389: /* type_specifier_nonarray: UTEXTURE2D */ +#line 2726 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8732 "MachineIndependent/glslang_tab.cpp" +#line 8856 "MachineIndependent/glslang_tab.cpp" break; - case 387: /* type_specifier_nonarray: UTEXTURE3D */ -#line 2712 "MachineIndependent/glslang.y" + case 390: /* type_specifier_nonarray: UTEXTURE3D */ +#line 2731 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8742 "MachineIndependent/glslang_tab.cpp" +#line 8866 "MachineIndependent/glslang_tab.cpp" break; - case 388: /* type_specifier_nonarray: UTEXTURECUBE */ -#line 2717 "MachineIndependent/glslang.y" + case 391: /* type_specifier_nonarray: UTEXTURECUBE */ +#line 2736 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8752 "MachineIndependent/glslang_tab.cpp" +#line 8876 "MachineIndependent/glslang_tab.cpp" break; - case 389: /* type_specifier_nonarray: UTEXTURE2DARRAY */ -#line 2722 "MachineIndependent/glslang.y" + case 392: /* type_specifier_nonarray: UTEXTURE2DARRAY */ +#line 2741 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8762 "MachineIndependent/glslang_tab.cpp" +#line 8886 "MachineIndependent/glslang_tab.cpp" break; - case 390: /* type_specifier_nonarray: SAMPLER */ -#line 2727 "MachineIndependent/glslang.y" + case 393: /* type_specifier_nonarray: SAMPLER */ +#line 2746 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 8772 "MachineIndependent/glslang_tab.cpp" +#line 8896 "MachineIndependent/glslang_tab.cpp" break; - case 391: /* type_specifier_nonarray: SAMPLERSHADOW */ -#line 2732 "MachineIndependent/glslang.y" + case 394: /* type_specifier_nonarray: SAMPLERSHADOW */ +#line 2751 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 8782 "MachineIndependent/glslang_tab.cpp" +#line 8906 "MachineIndependent/glslang_tab.cpp" break; - case 392: /* type_specifier_nonarray: SAMPLER2DRECT */ -#line 2738 "MachineIndependent/glslang.y" + case 395: /* type_specifier_nonarray: SAMPLER2DRECT */ +#line 2757 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 8792 "MachineIndependent/glslang_tab.cpp" +#line 8916 "MachineIndependent/glslang_tab.cpp" break; - case 393: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ -#line 2743 "MachineIndependent/glslang.y" + case 396: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ +#line 2762 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 8802 "MachineIndependent/glslang_tab.cpp" +#line 8926 "MachineIndependent/glslang_tab.cpp" break; - case 394: /* type_specifier_nonarray: F16SAMPLER2DRECT */ -#line 2748 "MachineIndependent/glslang.y" + case 397: /* type_specifier_nonarray: F16SAMPLER2DRECT */ +#line 2767 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 8813 "MachineIndependent/glslang_tab.cpp" +#line 8937 "MachineIndependent/glslang_tab.cpp" break; - case 395: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ -#line 2754 "MachineIndependent/glslang.y" + case 398: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ +#line 2773 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 8824 "MachineIndependent/glslang_tab.cpp" +#line 8948 "MachineIndependent/glslang_tab.cpp" break; - case 396: /* type_specifier_nonarray: ISAMPLER2DRECT */ -#line 2760 "MachineIndependent/glslang.y" + case 399: /* type_specifier_nonarray: ISAMPLER2DRECT */ +#line 2779 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 8834 "MachineIndependent/glslang_tab.cpp" +#line 8958 "MachineIndependent/glslang_tab.cpp" break; - case 397: /* type_specifier_nonarray: USAMPLER2DRECT */ -#line 2765 "MachineIndependent/glslang.y" + case 400: /* type_specifier_nonarray: USAMPLER2DRECT */ +#line 2784 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 8844 "MachineIndependent/glslang_tab.cpp" +#line 8968 "MachineIndependent/glslang_tab.cpp" break; - case 398: /* type_specifier_nonarray: SAMPLERBUFFER */ -#line 2770 "MachineIndependent/glslang.y" + case 401: /* type_specifier_nonarray: SAMPLERBUFFER */ +#line 2789 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 8854 "MachineIndependent/glslang_tab.cpp" +#line 8978 "MachineIndependent/glslang_tab.cpp" break; - case 399: /* type_specifier_nonarray: F16SAMPLERBUFFER */ -#line 2775 "MachineIndependent/glslang.y" + case 402: /* type_specifier_nonarray: F16SAMPLERBUFFER */ +#line 2794 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 8865 "MachineIndependent/glslang_tab.cpp" +#line 8989 "MachineIndependent/glslang_tab.cpp" break; - case 400: /* type_specifier_nonarray: ISAMPLERBUFFER */ -#line 2781 "MachineIndependent/glslang.y" + case 403: /* type_specifier_nonarray: ISAMPLERBUFFER */ +#line 2800 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 8875 "MachineIndependent/glslang_tab.cpp" +#line 8999 "MachineIndependent/glslang_tab.cpp" break; - case 401: /* type_specifier_nonarray: USAMPLERBUFFER */ -#line 2786 "MachineIndependent/glslang.y" + case 404: /* type_specifier_nonarray: USAMPLERBUFFER */ +#line 2805 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 8885 "MachineIndependent/glslang_tab.cpp" +#line 9009 "MachineIndependent/glslang_tab.cpp" break; - case 402: /* type_specifier_nonarray: SAMPLER2DMS */ -#line 2791 "MachineIndependent/glslang.y" + case 405: /* type_specifier_nonarray: SAMPLER2DMS */ +#line 2810 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 8895 "MachineIndependent/glslang_tab.cpp" +#line 9019 "MachineIndependent/glslang_tab.cpp" break; - case 403: /* type_specifier_nonarray: F16SAMPLER2DMS */ -#line 2796 "MachineIndependent/glslang.y" + case 406: /* type_specifier_nonarray: F16SAMPLER2DMS */ +#line 2815 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 8906 "MachineIndependent/glslang_tab.cpp" +#line 9030 "MachineIndependent/glslang_tab.cpp" break; - case 404: /* type_specifier_nonarray: ISAMPLER2DMS */ -#line 2802 "MachineIndependent/glslang.y" + case 407: /* type_specifier_nonarray: ISAMPLER2DMS */ +#line 2821 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 8916 "MachineIndependent/glslang_tab.cpp" +#line 9040 "MachineIndependent/glslang_tab.cpp" break; - case 405: /* type_specifier_nonarray: USAMPLER2DMS */ -#line 2807 "MachineIndependent/glslang.y" + case 408: /* type_specifier_nonarray: USAMPLER2DMS */ +#line 2826 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 8926 "MachineIndependent/glslang_tab.cpp" +#line 9050 "MachineIndependent/glslang_tab.cpp" break; - case 406: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ -#line 2812 "MachineIndependent/glslang.y" + case 409: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ +#line 2831 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 8936 "MachineIndependent/glslang_tab.cpp" +#line 9060 "MachineIndependent/glslang_tab.cpp" break; - case 407: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ -#line 2817 "MachineIndependent/glslang.y" + case 410: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ +#line 2836 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 8947 "MachineIndependent/glslang_tab.cpp" +#line 9071 "MachineIndependent/glslang_tab.cpp" break; - case 408: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ -#line 2823 "MachineIndependent/glslang.y" + case 411: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ +#line 2842 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 8957 "MachineIndependent/glslang_tab.cpp" +#line 9081 "MachineIndependent/glslang_tab.cpp" break; - case 409: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ -#line 2828 "MachineIndependent/glslang.y" + case 412: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ +#line 2847 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 8967 "MachineIndependent/glslang_tab.cpp" +#line 9091 "MachineIndependent/glslang_tab.cpp" break; - case 410: /* type_specifier_nonarray: TEXTURE1D */ -#line 2833 "MachineIndependent/glslang.y" + case 413: /* type_specifier_nonarray: TEXTURE1D */ +#line 2852 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 8977 "MachineIndependent/glslang_tab.cpp" +#line 9101 "MachineIndependent/glslang_tab.cpp" break; - case 411: /* type_specifier_nonarray: F16TEXTURE1D */ -#line 2838 "MachineIndependent/glslang.y" + case 414: /* type_specifier_nonarray: F16TEXTURE1D */ +#line 2857 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 8988 "MachineIndependent/glslang_tab.cpp" +#line 9112 "MachineIndependent/glslang_tab.cpp" break; - case 412: /* type_specifier_nonarray: F16TEXTURE2D */ -#line 2844 "MachineIndependent/glslang.y" + case 415: /* type_specifier_nonarray: F16TEXTURE2D */ +#line 2863 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 8999 "MachineIndependent/glslang_tab.cpp" +#line 9123 "MachineIndependent/glslang_tab.cpp" break; - case 413: /* type_specifier_nonarray: F16TEXTURE3D */ -#line 2850 "MachineIndependent/glslang.y" + case 416: /* type_specifier_nonarray: F16TEXTURE3D */ +#line 2869 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 9010 "MachineIndependent/glslang_tab.cpp" +#line 9134 "MachineIndependent/glslang_tab.cpp" break; - case 414: /* type_specifier_nonarray: F16TEXTURECUBE */ -#line 2856 "MachineIndependent/glslang.y" + case 417: /* type_specifier_nonarray: F16TEXTURECUBE */ +#line 2875 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 9021 "MachineIndependent/glslang_tab.cpp" +#line 9145 "MachineIndependent/glslang_tab.cpp" break; - case 415: /* type_specifier_nonarray: TEXTURE1DARRAY */ -#line 2862 "MachineIndependent/glslang.y" + case 418: /* type_specifier_nonarray: TEXTURE1DARRAY */ +#line 2881 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 9031 "MachineIndependent/glslang_tab.cpp" +#line 9155 "MachineIndependent/glslang_tab.cpp" break; - case 416: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ -#line 2867 "MachineIndependent/glslang.y" + case 419: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ +#line 2886 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 9042 "MachineIndependent/glslang_tab.cpp" +#line 9166 "MachineIndependent/glslang_tab.cpp" break; - case 417: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ -#line 2873 "MachineIndependent/glslang.y" + case 420: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ +#line 2892 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 9053 "MachineIndependent/glslang_tab.cpp" +#line 9177 "MachineIndependent/glslang_tab.cpp" break; - case 418: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ -#line 2879 "MachineIndependent/glslang.y" + case 421: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ +#line 2898 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 9064 "MachineIndependent/glslang_tab.cpp" +#line 9188 "MachineIndependent/glslang_tab.cpp" break; - case 419: /* type_specifier_nonarray: ITEXTURE1D */ -#line 2885 "MachineIndependent/glslang.y" + case 422: /* type_specifier_nonarray: ITEXTURE1D */ +#line 2904 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 9074 "MachineIndependent/glslang_tab.cpp" +#line 9198 "MachineIndependent/glslang_tab.cpp" break; - case 420: /* type_specifier_nonarray: ITEXTURE1DARRAY */ -#line 2890 "MachineIndependent/glslang.y" + case 423: /* type_specifier_nonarray: ITEXTURE1DARRAY */ +#line 2909 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 9084 "MachineIndependent/glslang_tab.cpp" +#line 9208 "MachineIndependent/glslang_tab.cpp" break; - case 421: /* type_specifier_nonarray: UTEXTURE1D */ -#line 2895 "MachineIndependent/glslang.y" + case 424: /* type_specifier_nonarray: UTEXTURE1D */ +#line 2914 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 9094 "MachineIndependent/glslang_tab.cpp" +#line 9218 "MachineIndependent/glslang_tab.cpp" break; - case 422: /* type_specifier_nonarray: UTEXTURE1DARRAY */ -#line 2900 "MachineIndependent/glslang.y" + case 425: /* type_specifier_nonarray: UTEXTURE1DARRAY */ +#line 2919 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 9104 "MachineIndependent/glslang_tab.cpp" +#line 9228 "MachineIndependent/glslang_tab.cpp" break; - case 423: /* type_specifier_nonarray: TEXTURE2DRECT */ -#line 2905 "MachineIndependent/glslang.y" + case 426: /* type_specifier_nonarray: TEXTURE2DRECT */ +#line 2924 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 9114 "MachineIndependent/glslang_tab.cpp" +#line 9238 "MachineIndependent/glslang_tab.cpp" break; - case 424: /* type_specifier_nonarray: F16TEXTURE2DRECT */ -#line 2910 "MachineIndependent/glslang.y" + case 427: /* type_specifier_nonarray: F16TEXTURE2DRECT */ +#line 2929 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 9125 "MachineIndependent/glslang_tab.cpp" +#line 9249 "MachineIndependent/glslang_tab.cpp" break; - case 425: /* type_specifier_nonarray: ITEXTURE2DRECT */ -#line 2916 "MachineIndependent/glslang.y" + case 428: /* type_specifier_nonarray: ITEXTURE2DRECT */ +#line 2935 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 9135 "MachineIndependent/glslang_tab.cpp" +#line 9259 "MachineIndependent/glslang_tab.cpp" break; - case 426: /* type_specifier_nonarray: UTEXTURE2DRECT */ -#line 2921 "MachineIndependent/glslang.y" + case 429: /* type_specifier_nonarray: UTEXTURE2DRECT */ +#line 2940 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 9145 "MachineIndependent/glslang_tab.cpp" +#line 9269 "MachineIndependent/glslang_tab.cpp" break; - case 427: /* type_specifier_nonarray: TEXTUREBUFFER */ -#line 2926 "MachineIndependent/glslang.y" + case 430: /* type_specifier_nonarray: TEXTUREBUFFER */ +#line 2945 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 9155 "MachineIndependent/glslang_tab.cpp" +#line 9279 "MachineIndependent/glslang_tab.cpp" break; - case 428: /* type_specifier_nonarray: F16TEXTUREBUFFER */ -#line 2931 "MachineIndependent/glslang.y" + case 431: /* type_specifier_nonarray: F16TEXTUREBUFFER */ +#line 2950 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 9166 "MachineIndependent/glslang_tab.cpp" +#line 9290 "MachineIndependent/glslang_tab.cpp" break; - case 429: /* type_specifier_nonarray: ITEXTUREBUFFER */ -#line 2937 "MachineIndependent/glslang.y" + case 432: /* type_specifier_nonarray: ITEXTUREBUFFER */ +#line 2956 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 9176 "MachineIndependent/glslang_tab.cpp" +#line 9300 "MachineIndependent/glslang_tab.cpp" break; - case 430: /* type_specifier_nonarray: UTEXTUREBUFFER */ -#line 2942 "MachineIndependent/glslang.y" + case 433: /* type_specifier_nonarray: UTEXTUREBUFFER */ +#line 2961 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 9186 "MachineIndependent/glslang_tab.cpp" +#line 9310 "MachineIndependent/glslang_tab.cpp" break; - case 431: /* type_specifier_nonarray: TEXTURE2DMS */ -#line 2947 "MachineIndependent/glslang.y" + case 434: /* type_specifier_nonarray: TEXTURE2DMS */ +#line 2966 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 9196 "MachineIndependent/glslang_tab.cpp" +#line 9320 "MachineIndependent/glslang_tab.cpp" break; - case 432: /* type_specifier_nonarray: F16TEXTURE2DMS */ -#line 2952 "MachineIndependent/glslang.y" + case 435: /* type_specifier_nonarray: F16TEXTURE2DMS */ +#line 2971 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 9207 "MachineIndependent/glslang_tab.cpp" +#line 9331 "MachineIndependent/glslang_tab.cpp" break; - case 433: /* type_specifier_nonarray: ITEXTURE2DMS */ -#line 2958 "MachineIndependent/glslang.y" + case 436: /* type_specifier_nonarray: ITEXTURE2DMS */ +#line 2977 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 9217 "MachineIndependent/glslang_tab.cpp" +#line 9341 "MachineIndependent/glslang_tab.cpp" break; - case 434: /* type_specifier_nonarray: UTEXTURE2DMS */ -#line 2963 "MachineIndependent/glslang.y" + case 437: /* type_specifier_nonarray: UTEXTURE2DMS */ +#line 2982 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 9227 "MachineIndependent/glslang_tab.cpp" +#line 9351 "MachineIndependent/glslang_tab.cpp" break; - case 435: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ -#line 2968 "MachineIndependent/glslang.y" + case 438: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ +#line 2987 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 9237 "MachineIndependent/glslang_tab.cpp" +#line 9361 "MachineIndependent/glslang_tab.cpp" break; - case 436: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ -#line 2973 "MachineIndependent/glslang.y" + case 439: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ +#line 2992 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 9248 "MachineIndependent/glslang_tab.cpp" +#line 9372 "MachineIndependent/glslang_tab.cpp" break; - case 437: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ -#line 2979 "MachineIndependent/glslang.y" + case 440: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ +#line 2998 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 9258 "MachineIndependent/glslang_tab.cpp" +#line 9382 "MachineIndependent/glslang_tab.cpp" break; - case 438: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ -#line 2984 "MachineIndependent/glslang.y" + case 441: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ +#line 3003 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 9268 "MachineIndependent/glslang_tab.cpp" +#line 9392 "MachineIndependent/glslang_tab.cpp" break; - case 439: /* type_specifier_nonarray: IMAGE1D */ -#line 2989 "MachineIndependent/glslang.y" + case 442: /* type_specifier_nonarray: IMAGE1D */ +#line 3008 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 9278 "MachineIndependent/glslang_tab.cpp" +#line 9402 "MachineIndependent/glslang_tab.cpp" break; - case 440: /* type_specifier_nonarray: F16IMAGE1D */ -#line 2994 "MachineIndependent/glslang.y" + case 443: /* type_specifier_nonarray: F16IMAGE1D */ +#line 3013 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 9289 "MachineIndependent/glslang_tab.cpp" +#line 9413 "MachineIndependent/glslang_tab.cpp" break; - case 441: /* type_specifier_nonarray: IIMAGE1D */ -#line 3000 "MachineIndependent/glslang.y" + case 444: /* type_specifier_nonarray: IIMAGE1D */ +#line 3019 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 9299 "MachineIndependent/glslang_tab.cpp" +#line 9423 "MachineIndependent/glslang_tab.cpp" break; - case 442: /* type_specifier_nonarray: UIMAGE1D */ -#line 3005 "MachineIndependent/glslang.y" + case 445: /* type_specifier_nonarray: UIMAGE1D */ +#line 3024 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 9309 "MachineIndependent/glslang_tab.cpp" +#line 9433 "MachineIndependent/glslang_tab.cpp" break; - case 443: /* type_specifier_nonarray: IMAGE2D */ -#line 3010 "MachineIndependent/glslang.y" + case 446: /* type_specifier_nonarray: IMAGE2D */ +#line 3029 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 9319 "MachineIndependent/glslang_tab.cpp" +#line 9443 "MachineIndependent/glslang_tab.cpp" break; - case 444: /* type_specifier_nonarray: F16IMAGE2D */ -#line 3015 "MachineIndependent/glslang.y" + case 447: /* type_specifier_nonarray: F16IMAGE2D */ +#line 3034 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 9330 "MachineIndependent/glslang_tab.cpp" +#line 9454 "MachineIndependent/glslang_tab.cpp" break; - case 445: /* type_specifier_nonarray: IIMAGE2D */ -#line 3021 "MachineIndependent/glslang.y" + case 448: /* type_specifier_nonarray: IIMAGE2D */ +#line 3040 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 9340 "MachineIndependent/glslang_tab.cpp" +#line 9464 "MachineIndependent/glslang_tab.cpp" break; - case 446: /* type_specifier_nonarray: UIMAGE2D */ -#line 3026 "MachineIndependent/glslang.y" + case 449: /* type_specifier_nonarray: UIMAGE2D */ +#line 3045 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 9350 "MachineIndependent/glslang_tab.cpp" +#line 9474 "MachineIndependent/glslang_tab.cpp" break; - case 447: /* type_specifier_nonarray: IMAGE3D */ -#line 3031 "MachineIndependent/glslang.y" + case 450: /* type_specifier_nonarray: IMAGE3D */ +#line 3050 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 9360 "MachineIndependent/glslang_tab.cpp" +#line 9484 "MachineIndependent/glslang_tab.cpp" break; - case 448: /* type_specifier_nonarray: F16IMAGE3D */ -#line 3036 "MachineIndependent/glslang.y" + case 451: /* type_specifier_nonarray: F16IMAGE3D */ +#line 3055 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 9371 "MachineIndependent/glslang_tab.cpp" +#line 9495 "MachineIndependent/glslang_tab.cpp" break; - case 449: /* type_specifier_nonarray: IIMAGE3D */ -#line 3042 "MachineIndependent/glslang.y" + case 452: /* type_specifier_nonarray: IIMAGE3D */ +#line 3061 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 9381 "MachineIndependent/glslang_tab.cpp" +#line 9505 "MachineIndependent/glslang_tab.cpp" break; - case 450: /* type_specifier_nonarray: UIMAGE3D */ -#line 3047 "MachineIndependent/glslang.y" + case 453: /* type_specifier_nonarray: UIMAGE3D */ +#line 3066 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 9391 "MachineIndependent/glslang_tab.cpp" +#line 9515 "MachineIndependent/glslang_tab.cpp" break; - case 451: /* type_specifier_nonarray: IMAGE2DRECT */ -#line 3052 "MachineIndependent/glslang.y" + case 454: /* type_specifier_nonarray: IMAGE2DRECT */ +#line 3071 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 9401 "MachineIndependent/glslang_tab.cpp" +#line 9525 "MachineIndependent/glslang_tab.cpp" break; - case 452: /* type_specifier_nonarray: F16IMAGE2DRECT */ -#line 3057 "MachineIndependent/glslang.y" + case 455: /* type_specifier_nonarray: F16IMAGE2DRECT */ +#line 3076 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 9412 "MachineIndependent/glslang_tab.cpp" +#line 9536 "MachineIndependent/glslang_tab.cpp" break; - case 453: /* type_specifier_nonarray: IIMAGE2DRECT */ -#line 3063 "MachineIndependent/glslang.y" + case 456: /* type_specifier_nonarray: IIMAGE2DRECT */ +#line 3082 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 9422 "MachineIndependent/glslang_tab.cpp" +#line 9546 "MachineIndependent/glslang_tab.cpp" break; - case 454: /* type_specifier_nonarray: UIMAGE2DRECT */ -#line 3068 "MachineIndependent/glslang.y" + case 457: /* type_specifier_nonarray: UIMAGE2DRECT */ +#line 3087 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 9432 "MachineIndependent/glslang_tab.cpp" +#line 9556 "MachineIndependent/glslang_tab.cpp" break; - case 455: /* type_specifier_nonarray: IMAGECUBE */ -#line 3073 "MachineIndependent/glslang.y" + case 458: /* type_specifier_nonarray: IMAGECUBE */ +#line 3092 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 9442 "MachineIndependent/glslang_tab.cpp" +#line 9566 "MachineIndependent/glslang_tab.cpp" break; - case 456: /* type_specifier_nonarray: F16IMAGECUBE */ -#line 3078 "MachineIndependent/glslang.y" + case 459: /* type_specifier_nonarray: F16IMAGECUBE */ +#line 3097 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 9453 "MachineIndependent/glslang_tab.cpp" +#line 9577 "MachineIndependent/glslang_tab.cpp" break; - case 457: /* type_specifier_nonarray: IIMAGECUBE */ -#line 3084 "MachineIndependent/glslang.y" + case 460: /* type_specifier_nonarray: IIMAGECUBE */ +#line 3103 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 9463 "MachineIndependent/glslang_tab.cpp" +#line 9587 "MachineIndependent/glslang_tab.cpp" break; - case 458: /* type_specifier_nonarray: UIMAGECUBE */ -#line 3089 "MachineIndependent/glslang.y" + case 461: /* type_specifier_nonarray: UIMAGECUBE */ +#line 3108 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 9473 "MachineIndependent/glslang_tab.cpp" +#line 9597 "MachineIndependent/glslang_tab.cpp" break; - case 459: /* type_specifier_nonarray: IMAGEBUFFER */ -#line 3094 "MachineIndependent/glslang.y" + case 462: /* type_specifier_nonarray: IMAGEBUFFER */ +#line 3113 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 9483 "MachineIndependent/glslang_tab.cpp" +#line 9607 "MachineIndependent/glslang_tab.cpp" break; - case 460: /* type_specifier_nonarray: F16IMAGEBUFFER */ -#line 3099 "MachineIndependent/glslang.y" + case 463: /* type_specifier_nonarray: F16IMAGEBUFFER */ +#line 3118 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 9494 "MachineIndependent/glslang_tab.cpp" +#line 9618 "MachineIndependent/glslang_tab.cpp" break; - case 461: /* type_specifier_nonarray: IIMAGEBUFFER */ -#line 3105 "MachineIndependent/glslang.y" + case 464: /* type_specifier_nonarray: IIMAGEBUFFER */ +#line 3124 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 9504 "MachineIndependent/glslang_tab.cpp" +#line 9628 "MachineIndependent/glslang_tab.cpp" break; - case 462: /* type_specifier_nonarray: UIMAGEBUFFER */ -#line 3110 "MachineIndependent/glslang.y" + case 465: /* type_specifier_nonarray: UIMAGEBUFFER */ +#line 3129 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 9514 "MachineIndependent/glslang_tab.cpp" +#line 9638 "MachineIndependent/glslang_tab.cpp" break; - case 463: /* type_specifier_nonarray: IMAGE1DARRAY */ -#line 3115 "MachineIndependent/glslang.y" + case 466: /* type_specifier_nonarray: IMAGE1DARRAY */ +#line 3134 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 9524 "MachineIndependent/glslang_tab.cpp" +#line 9648 "MachineIndependent/glslang_tab.cpp" break; - case 464: /* type_specifier_nonarray: F16IMAGE1DARRAY */ -#line 3120 "MachineIndependent/glslang.y" + case 467: /* type_specifier_nonarray: F16IMAGE1DARRAY */ +#line 3139 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 9535 "MachineIndependent/glslang_tab.cpp" +#line 9659 "MachineIndependent/glslang_tab.cpp" break; - case 465: /* type_specifier_nonarray: IIMAGE1DARRAY */ -#line 3126 "MachineIndependent/glslang.y" + case 468: /* type_specifier_nonarray: IIMAGE1DARRAY */ +#line 3145 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 9545 "MachineIndependent/glslang_tab.cpp" +#line 9669 "MachineIndependent/glslang_tab.cpp" break; - case 466: /* type_specifier_nonarray: UIMAGE1DARRAY */ -#line 3131 "MachineIndependent/glslang.y" + case 469: /* type_specifier_nonarray: UIMAGE1DARRAY */ +#line 3150 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 9555 "MachineIndependent/glslang_tab.cpp" +#line 9679 "MachineIndependent/glslang_tab.cpp" break; - case 467: /* type_specifier_nonarray: IMAGE2DARRAY */ -#line 3136 "MachineIndependent/glslang.y" + case 470: /* type_specifier_nonarray: IMAGE2DARRAY */ +#line 3155 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 9565 "MachineIndependent/glslang_tab.cpp" +#line 9689 "MachineIndependent/glslang_tab.cpp" break; - case 468: /* type_specifier_nonarray: F16IMAGE2DARRAY */ -#line 3141 "MachineIndependent/glslang.y" + case 471: /* type_specifier_nonarray: F16IMAGE2DARRAY */ +#line 3160 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 9576 "MachineIndependent/glslang_tab.cpp" +#line 9700 "MachineIndependent/glslang_tab.cpp" break; - case 469: /* type_specifier_nonarray: IIMAGE2DARRAY */ -#line 3147 "MachineIndependent/glslang.y" + case 472: /* type_specifier_nonarray: IIMAGE2DARRAY */ +#line 3166 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 9586 "MachineIndependent/glslang_tab.cpp" +#line 9710 "MachineIndependent/glslang_tab.cpp" break; - case 470: /* type_specifier_nonarray: UIMAGE2DARRAY */ -#line 3152 "MachineIndependent/glslang.y" + case 473: /* type_specifier_nonarray: UIMAGE2DARRAY */ +#line 3171 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 9596 "MachineIndependent/glslang_tab.cpp" +#line 9720 "MachineIndependent/glslang_tab.cpp" break; - case 471: /* type_specifier_nonarray: IMAGECUBEARRAY */ -#line 3157 "MachineIndependent/glslang.y" + case 474: /* type_specifier_nonarray: IMAGECUBEARRAY */ +#line 3176 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 9606 "MachineIndependent/glslang_tab.cpp" +#line 9730 "MachineIndependent/glslang_tab.cpp" break; - case 472: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ -#line 3162 "MachineIndependent/glslang.y" + case 475: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ +#line 3181 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 9617 "MachineIndependent/glslang_tab.cpp" +#line 9741 "MachineIndependent/glslang_tab.cpp" break; - case 473: /* type_specifier_nonarray: IIMAGECUBEARRAY */ -#line 3168 "MachineIndependent/glslang.y" + case 476: /* type_specifier_nonarray: IIMAGECUBEARRAY */ +#line 3187 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 9627 "MachineIndependent/glslang_tab.cpp" +#line 9751 "MachineIndependent/glslang_tab.cpp" break; - case 474: /* type_specifier_nonarray: UIMAGECUBEARRAY */ -#line 3173 "MachineIndependent/glslang.y" + case 477: /* type_specifier_nonarray: UIMAGECUBEARRAY */ +#line 3192 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 9637 "MachineIndependent/glslang_tab.cpp" +#line 9761 "MachineIndependent/glslang_tab.cpp" break; - case 475: /* type_specifier_nonarray: IMAGE2DMS */ -#line 3178 "MachineIndependent/glslang.y" + case 478: /* type_specifier_nonarray: IMAGE2DMS */ +#line 3197 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 9647 "MachineIndependent/glslang_tab.cpp" +#line 9771 "MachineIndependent/glslang_tab.cpp" break; - case 476: /* type_specifier_nonarray: F16IMAGE2DMS */ -#line 3183 "MachineIndependent/glslang.y" + case 479: /* type_specifier_nonarray: F16IMAGE2DMS */ +#line 3202 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 9658 "MachineIndependent/glslang_tab.cpp" +#line 9782 "MachineIndependent/glslang_tab.cpp" break; - case 477: /* type_specifier_nonarray: IIMAGE2DMS */ -#line 3189 "MachineIndependent/glslang.y" + case 480: /* type_specifier_nonarray: IIMAGE2DMS */ +#line 3208 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 9668 "MachineIndependent/glslang_tab.cpp" +#line 9792 "MachineIndependent/glslang_tab.cpp" break; - case 478: /* type_specifier_nonarray: UIMAGE2DMS */ -#line 3194 "MachineIndependent/glslang.y" + case 481: /* type_specifier_nonarray: UIMAGE2DMS */ +#line 3213 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 9678 "MachineIndependent/glslang_tab.cpp" +#line 9802 "MachineIndependent/glslang_tab.cpp" break; - case 479: /* type_specifier_nonarray: IMAGE2DMSARRAY */ -#line 3199 "MachineIndependent/glslang.y" + case 482: /* type_specifier_nonarray: IMAGE2DMSARRAY */ +#line 3218 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 9688 "MachineIndependent/glslang_tab.cpp" +#line 9812 "MachineIndependent/glslang_tab.cpp" break; - case 480: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ -#line 3204 "MachineIndependent/glslang.y" + case 483: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ +#line 3223 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 9699 "MachineIndependent/glslang_tab.cpp" +#line 9823 "MachineIndependent/glslang_tab.cpp" break; - case 481: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ -#line 3210 "MachineIndependent/glslang.y" + case 484: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ +#line 3229 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 9709 "MachineIndependent/glslang_tab.cpp" +#line 9833 "MachineIndependent/glslang_tab.cpp" break; - case 482: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ -#line 3215 "MachineIndependent/glslang.y" + case 485: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ +#line 3234 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 9719 "MachineIndependent/glslang_tab.cpp" +#line 9843 "MachineIndependent/glslang_tab.cpp" break; - case 483: /* type_specifier_nonarray: I64IMAGE1D */ -#line 3220 "MachineIndependent/glslang.y" + case 486: /* type_specifier_nonarray: I64IMAGE1D */ +#line 3239 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D); } -#line 9729 "MachineIndependent/glslang_tab.cpp" +#line 9853 "MachineIndependent/glslang_tab.cpp" break; - case 484: /* type_specifier_nonarray: U64IMAGE1D */ -#line 3225 "MachineIndependent/glslang.y" + case 487: /* type_specifier_nonarray: U64IMAGE1D */ +#line 3244 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D); } -#line 9739 "MachineIndependent/glslang_tab.cpp" +#line 9863 "MachineIndependent/glslang_tab.cpp" break; - case 485: /* type_specifier_nonarray: I64IMAGE2D */ -#line 3230 "MachineIndependent/glslang.y" + case 488: /* type_specifier_nonarray: I64IMAGE2D */ +#line 3249 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D); } -#line 9749 "MachineIndependent/glslang_tab.cpp" +#line 9873 "MachineIndependent/glslang_tab.cpp" break; - case 486: /* type_specifier_nonarray: U64IMAGE2D */ -#line 3235 "MachineIndependent/glslang.y" + case 489: /* type_specifier_nonarray: U64IMAGE2D */ +#line 3254 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D); } -#line 9759 "MachineIndependent/glslang_tab.cpp" +#line 9883 "MachineIndependent/glslang_tab.cpp" break; - case 487: /* type_specifier_nonarray: I64IMAGE3D */ -#line 3240 "MachineIndependent/glslang.y" + case 490: /* type_specifier_nonarray: I64IMAGE3D */ +#line 3259 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D); } -#line 9769 "MachineIndependent/glslang_tab.cpp" +#line 9893 "MachineIndependent/glslang_tab.cpp" break; - case 488: /* type_specifier_nonarray: U64IMAGE3D */ -#line 3245 "MachineIndependent/glslang.y" + case 491: /* type_specifier_nonarray: U64IMAGE3D */ +#line 3264 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D); } -#line 9779 "MachineIndependent/glslang_tab.cpp" +#line 9903 "MachineIndependent/glslang_tab.cpp" break; - case 489: /* type_specifier_nonarray: I64IMAGE2DRECT */ -#line 3250 "MachineIndependent/glslang.y" + case 492: /* type_specifier_nonarray: I64IMAGE2DRECT */ +#line 3269 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect); } -#line 9789 "MachineIndependent/glslang_tab.cpp" +#line 9913 "MachineIndependent/glslang_tab.cpp" break; - case 490: /* type_specifier_nonarray: U64IMAGE2DRECT */ -#line 3255 "MachineIndependent/glslang.y" + case 493: /* type_specifier_nonarray: U64IMAGE2DRECT */ +#line 3274 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect); } -#line 9799 "MachineIndependent/glslang_tab.cpp" +#line 9923 "MachineIndependent/glslang_tab.cpp" break; - case 491: /* type_specifier_nonarray: I64IMAGECUBE */ -#line 3260 "MachineIndependent/glslang.y" + case 494: /* type_specifier_nonarray: I64IMAGECUBE */ +#line 3279 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube); } -#line 9809 "MachineIndependent/glslang_tab.cpp" +#line 9933 "MachineIndependent/glslang_tab.cpp" break; - case 492: /* type_specifier_nonarray: U64IMAGECUBE */ -#line 3265 "MachineIndependent/glslang.y" + case 495: /* type_specifier_nonarray: U64IMAGECUBE */ +#line 3284 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube); } -#line 9819 "MachineIndependent/glslang_tab.cpp" +#line 9943 "MachineIndependent/glslang_tab.cpp" break; - case 493: /* type_specifier_nonarray: I64IMAGEBUFFER */ -#line 3270 "MachineIndependent/glslang.y" + case 496: /* type_specifier_nonarray: I64IMAGEBUFFER */ +#line 3289 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer); } -#line 9829 "MachineIndependent/glslang_tab.cpp" +#line 9953 "MachineIndependent/glslang_tab.cpp" break; - case 494: /* type_specifier_nonarray: U64IMAGEBUFFER */ -#line 3275 "MachineIndependent/glslang.y" + case 497: /* type_specifier_nonarray: U64IMAGEBUFFER */ +#line 3294 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer); } -#line 9839 "MachineIndependent/glslang_tab.cpp" +#line 9963 "MachineIndependent/glslang_tab.cpp" break; - case 495: /* type_specifier_nonarray: I64IMAGE1DARRAY */ -#line 3280 "MachineIndependent/glslang.y" + case 498: /* type_specifier_nonarray: I64IMAGE1DARRAY */ +#line 3299 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true); } -#line 9849 "MachineIndependent/glslang_tab.cpp" +#line 9973 "MachineIndependent/glslang_tab.cpp" break; - case 496: /* type_specifier_nonarray: U64IMAGE1DARRAY */ -#line 3285 "MachineIndependent/glslang.y" + case 499: /* type_specifier_nonarray: U64IMAGE1DARRAY */ +#line 3304 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true); } -#line 9859 "MachineIndependent/glslang_tab.cpp" +#line 9983 "MachineIndependent/glslang_tab.cpp" break; - case 497: /* type_specifier_nonarray: I64IMAGE2DARRAY */ -#line 3290 "MachineIndependent/glslang.y" + case 500: /* type_specifier_nonarray: I64IMAGE2DARRAY */ +#line 3309 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true); } -#line 9869 "MachineIndependent/glslang_tab.cpp" +#line 9993 "MachineIndependent/glslang_tab.cpp" break; - case 498: /* type_specifier_nonarray: U64IMAGE2DARRAY */ -#line 3295 "MachineIndependent/glslang.y" + case 501: /* type_specifier_nonarray: U64IMAGE2DARRAY */ +#line 3314 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true); } -#line 9879 "MachineIndependent/glslang_tab.cpp" +#line 10003 "MachineIndependent/glslang_tab.cpp" break; - case 499: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ -#line 3300 "MachineIndependent/glslang.y" + case 502: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ +#line 3319 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true); } -#line 9889 "MachineIndependent/glslang_tab.cpp" +#line 10013 "MachineIndependent/glslang_tab.cpp" break; - case 500: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ -#line 3305 "MachineIndependent/glslang.y" + case 503: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ +#line 3324 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true); } -#line 9899 "MachineIndependent/glslang_tab.cpp" +#line 10023 "MachineIndependent/glslang_tab.cpp" break; - case 501: /* type_specifier_nonarray: I64IMAGE2DMS */ -#line 3310 "MachineIndependent/glslang.y" + case 504: /* type_specifier_nonarray: I64IMAGE2DMS */ +#line 3329 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true); } -#line 9909 "MachineIndependent/glslang_tab.cpp" +#line 10033 "MachineIndependent/glslang_tab.cpp" break; - case 502: /* type_specifier_nonarray: U64IMAGE2DMS */ -#line 3315 "MachineIndependent/glslang.y" + case 505: /* type_specifier_nonarray: U64IMAGE2DMS */ +#line 3334 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true); } -#line 9919 "MachineIndependent/glslang_tab.cpp" +#line 10043 "MachineIndependent/glslang_tab.cpp" break; - case 503: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ -#line 3320 "MachineIndependent/glslang.y" + case 506: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ +#line 3339 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true); } -#line 9929 "MachineIndependent/glslang_tab.cpp" +#line 10053 "MachineIndependent/glslang_tab.cpp" break; - case 504: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ -#line 3325 "MachineIndependent/glslang.y" + case 507: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ +#line 3344 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true); } -#line 9939 "MachineIndependent/glslang_tab.cpp" +#line 10063 "MachineIndependent/glslang_tab.cpp" break; - case 505: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ -#line 3330 "MachineIndependent/glslang.y" + case 508: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ +#line 3349 "MachineIndependent/glslang.y" { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 9950 "MachineIndependent/glslang_tab.cpp" +#line 10074 "MachineIndependent/glslang_tab.cpp" break; - case 506: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ -#line 3336 "MachineIndependent/glslang.y" + case 509: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ +#line 3355 "MachineIndependent/glslang.y" { // GL_EXT_YUV_target (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 9961 "MachineIndependent/glslang_tab.cpp" +#line 10085 "MachineIndependent/glslang_tab.cpp" break; - case 507: /* type_specifier_nonarray: SUBPASSINPUT */ -#line 3342 "MachineIndependent/glslang.y" + case 510: /* type_specifier_nonarray: SUBPASSINPUT */ +#line 3361 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 9972 "MachineIndependent/glslang_tab.cpp" +#line 10096 "MachineIndependent/glslang_tab.cpp" break; - case 508: /* type_specifier_nonarray: SUBPASSINPUTMS */ -#line 3348 "MachineIndependent/glslang.y" + case 511: /* type_specifier_nonarray: SUBPASSINPUTMS */ +#line 3367 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 9983 "MachineIndependent/glslang_tab.cpp" +#line 10107 "MachineIndependent/glslang_tab.cpp" break; - case 509: /* type_specifier_nonarray: F16SUBPASSINPUT */ -#line 3354 "MachineIndependent/glslang.y" + case 512: /* type_specifier_nonarray: F16SUBPASSINPUT */ +#line 3373 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -9991,11 +10115,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 9995 "MachineIndependent/glslang_tab.cpp" +#line 10119 "MachineIndependent/glslang_tab.cpp" break; - case 510: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ -#line 3361 "MachineIndependent/glslang.y" + case 513: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ +#line 3380 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -10003,98 +10127,98 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 10007 "MachineIndependent/glslang_tab.cpp" +#line 10131 "MachineIndependent/glslang_tab.cpp" break; - case 511: /* type_specifier_nonarray: ISUBPASSINPUT */ -#line 3368 "MachineIndependent/glslang.y" + case 514: /* type_specifier_nonarray: ISUBPASSINPUT */ +#line 3387 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 10018 "MachineIndependent/glslang_tab.cpp" +#line 10142 "MachineIndependent/glslang_tab.cpp" break; - case 512: /* type_specifier_nonarray: ISUBPASSINPUTMS */ -#line 3374 "MachineIndependent/glslang.y" + case 515: /* type_specifier_nonarray: ISUBPASSINPUTMS */ +#line 3393 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 10029 "MachineIndependent/glslang_tab.cpp" +#line 10153 "MachineIndependent/glslang_tab.cpp" break; - case 513: /* type_specifier_nonarray: USUBPASSINPUT */ -#line 3380 "MachineIndependent/glslang.y" + case 516: /* type_specifier_nonarray: USUBPASSINPUT */ +#line 3399 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 10040 "MachineIndependent/glslang_tab.cpp" +#line 10164 "MachineIndependent/glslang_tab.cpp" break; - case 514: /* type_specifier_nonarray: USUBPASSINPUTMS */ -#line 3386 "MachineIndependent/glslang.y" + case 517: /* type_specifier_nonarray: USUBPASSINPUTMS */ +#line 3405 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 10051 "MachineIndependent/glslang_tab.cpp" +#line 10175 "MachineIndependent/glslang_tab.cpp" break; - case 515: /* type_specifier_nonarray: FCOOPMATNV */ -#line 3392 "MachineIndependent/glslang.y" + case 518: /* type_specifier_nonarray: FCOOPMATNV */ +#line 3411 "MachineIndependent/glslang.y" { parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 10062 "MachineIndependent/glslang_tab.cpp" +#line 10186 "MachineIndependent/glslang_tab.cpp" break; - case 516: /* type_specifier_nonarray: ICOOPMATNV */ -#line 3398 "MachineIndependent/glslang.y" + case 519: /* type_specifier_nonarray: ICOOPMATNV */ +#line 3417 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).coopmat = true; } -#line 10073 "MachineIndependent/glslang_tab.cpp" +#line 10197 "MachineIndependent/glslang_tab.cpp" break; - case 517: /* type_specifier_nonarray: UCOOPMATNV */ -#line 3404 "MachineIndependent/glslang.y" + case 520: /* type_specifier_nonarray: UCOOPMATNV */ +#line 3423 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).coopmat = true; } -#line 10084 "MachineIndependent/glslang_tab.cpp" +#line 10208 "MachineIndependent/glslang_tab.cpp" break; - case 518: /* type_specifier_nonarray: struct_specifier */ -#line 3411 "MachineIndependent/glslang.y" + case 521: /* type_specifier_nonarray: struct_specifier */ +#line 3430 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 10094 "MachineIndependent/glslang_tab.cpp" +#line 10218 "MachineIndependent/glslang_tab.cpp" break; - case 519: /* type_specifier_nonarray: TYPE_NAME */ -#line 3416 "MachineIndependent/glslang.y" + case 522: /* type_specifier_nonarray: TYPE_NAME */ +#line 3435 "MachineIndependent/glslang.y" { // // This is for user defined type names. The lexical phase looked up the @@ -10108,47 +10232,47 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 10112 "MachineIndependent/glslang_tab.cpp" +#line 10236 "MachineIndependent/glslang_tab.cpp" break; - case 520: /* precision_qualifier: HIGH_PRECISION */ -#line 3432 "MachineIndependent/glslang.y" + case 523: /* precision_qualifier: HIGH_PRECISION */ +#line 3451 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 10122 "MachineIndependent/glslang_tab.cpp" +#line 10246 "MachineIndependent/glslang_tab.cpp" break; - case 521: /* precision_qualifier: MEDIUM_PRECISION */ -#line 3437 "MachineIndependent/glslang.y" + case 524: /* precision_qualifier: MEDIUM_PRECISION */ +#line 3456 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 10132 "MachineIndependent/glslang_tab.cpp" +#line 10256 "MachineIndependent/glslang_tab.cpp" break; - case 522: /* precision_qualifier: LOW_PRECISION */ -#line 3442 "MachineIndependent/glslang.y" + case 525: /* precision_qualifier: LOW_PRECISION */ +#line 3461 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 10142 "MachineIndependent/glslang_tab.cpp" +#line 10266 "MachineIndependent/glslang_tab.cpp" break; - case 523: /* $@3: %empty */ -#line 3450 "MachineIndependent/glslang.y" + case 526: /* $@3: %empty */ +#line 3469 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 10148 "MachineIndependent/glslang_tab.cpp" +#line 10272 "MachineIndependent/glslang_tab.cpp" break; - case 524: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ -#line 3450 "MachineIndependent/glslang.y" + case 527: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ +#line 3469 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); @@ -10160,17 +10284,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10164 "MachineIndependent/glslang_tab.cpp" +#line 10288 "MachineIndependent/glslang_tab.cpp" break; - case 525: /* $@4: %empty */ -#line 3461 "MachineIndependent/glslang.y" + case 528: /* $@4: %empty */ +#line 3480 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 10170 "MachineIndependent/glslang_tab.cpp" +#line 10294 "MachineIndependent/glslang_tab.cpp" break; - case 526: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ -#line 3461 "MachineIndependent/glslang.y" + case 529: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ +#line 3480 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -10178,19 +10302,19 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10182 "MachineIndependent/glslang_tab.cpp" +#line 10306 "MachineIndependent/glslang_tab.cpp" break; - case 527: /* struct_declaration_list: struct_declaration */ -#line 3471 "MachineIndependent/glslang.y" + case 530: /* struct_declaration_list: struct_declaration */ +#line 3490 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 10190 "MachineIndependent/glslang_tab.cpp" +#line 10314 "MachineIndependent/glslang_tab.cpp" break; - case 528: /* struct_declaration_list: struct_declaration_list struct_declaration */ -#line 3474 "MachineIndependent/glslang.y" + case 531: /* struct_declaration_list: struct_declaration_list struct_declaration */ +#line 3493 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -10201,11 +10325,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 10205 "MachineIndependent/glslang_tab.cpp" +#line 10329 "MachineIndependent/glslang_tab.cpp" break; - case 529: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ -#line 3487 "MachineIndependent/glslang.y" + case 532: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ +#line 3506 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10228,11 +10352,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10232 "MachineIndependent/glslang_tab.cpp" +#line 10356 "MachineIndependent/glslang_tab.cpp" break; - case 530: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ -#line 3509 "MachineIndependent/glslang.y" + case 533: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ +#line 3528 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10257,38 +10381,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10261 "MachineIndependent/glslang_tab.cpp" +#line 10385 "MachineIndependent/glslang_tab.cpp" break; - case 531: /* struct_declarator_list: struct_declarator */ -#line 3536 "MachineIndependent/glslang.y" + case 534: /* struct_declarator_list: struct_declarator */ +#line 3555 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10270 "MachineIndependent/glslang_tab.cpp" +#line 10394 "MachineIndependent/glslang_tab.cpp" break; - case 532: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ -#line 3540 "MachineIndependent/glslang.y" + case 535: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ +#line 3559 "MachineIndependent/glslang.y" { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10278 "MachineIndependent/glslang_tab.cpp" +#line 10402 "MachineIndependent/glslang_tab.cpp" break; - case 533: /* struct_declarator: IDENTIFIER */ -#line 3546 "MachineIndependent/glslang.y" + case 536: /* struct_declarator: IDENTIFIER */ +#line 3565 "MachineIndependent/glslang.y" { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 10288 "MachineIndependent/glslang_tab.cpp" +#line 10412 "MachineIndependent/glslang_tab.cpp" break; - case 534: /* struct_declarator: IDENTIFIER array_specifier */ -#line 3551 "MachineIndependent/glslang.y" + case 537: /* struct_declarator: IDENTIFIER array_specifier */ +#line 3570 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -10297,246 +10421,246 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 10301 "MachineIndependent/glslang_tab.cpp" +#line 10425 "MachineIndependent/glslang_tab.cpp" break; - case 535: /* initializer: assignment_expression */ -#line 3562 "MachineIndependent/glslang.y" + case 538: /* initializer: assignment_expression */ +#line 3581 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10309 "MachineIndependent/glslang_tab.cpp" +#line 10433 "MachineIndependent/glslang_tab.cpp" break; - case 536: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ -#line 3566 "MachineIndependent/glslang.y" + case 539: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ +#line 3585 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 10320 "MachineIndependent/glslang_tab.cpp" +#line 10444 "MachineIndependent/glslang_tab.cpp" break; - case 537: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ -#line 3572 "MachineIndependent/glslang.y" + case 540: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ +#line 3591 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 10331 "MachineIndependent/glslang_tab.cpp" +#line 10455 "MachineIndependent/glslang_tab.cpp" break; - case 538: /* initializer: LEFT_BRACE RIGHT_BRACE */ -#line 3578 "MachineIndependent/glslang.y" + case 541: /* initializer: LEFT_BRACE RIGHT_BRACE */ +#line 3597 "MachineIndependent/glslang.y" { const char* initFeature = "empty { } initializer"; parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc); } -#line 10342 "MachineIndependent/glslang_tab.cpp" +#line 10466 "MachineIndependent/glslang_tab.cpp" break; - case 539: /* initializer_list: initializer */ -#line 3589 "MachineIndependent/glslang.y" + case 542: /* initializer_list: initializer */ +#line 3608 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 10350 "MachineIndependent/glslang_tab.cpp" +#line 10474 "MachineIndependent/glslang_tab.cpp" break; - case 540: /* initializer_list: initializer_list COMMA initializer */ -#line 3592 "MachineIndependent/glslang.y" + case 543: /* initializer_list: initializer_list COMMA initializer */ +#line 3611 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 10358 "MachineIndependent/glslang_tab.cpp" +#line 10482 "MachineIndependent/glslang_tab.cpp" break; - case 541: /* declaration_statement: declaration */ -#line 3599 "MachineIndependent/glslang.y" + case 544: /* declaration_statement: declaration */ +#line 3618 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10364 "MachineIndependent/glslang_tab.cpp" +#line 10488 "MachineIndependent/glslang_tab.cpp" break; - case 542: /* statement: compound_statement */ -#line 3603 "MachineIndependent/glslang.y" + case 545: /* statement: compound_statement */ +#line 3622 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10370 "MachineIndependent/glslang_tab.cpp" +#line 10494 "MachineIndependent/glslang_tab.cpp" break; - case 543: /* statement: simple_statement */ -#line 3604 "MachineIndependent/glslang.y" + case 546: /* statement: simple_statement */ +#line 3623 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10376 "MachineIndependent/glslang_tab.cpp" +#line 10500 "MachineIndependent/glslang_tab.cpp" break; - case 544: /* simple_statement: declaration_statement */ -#line 3610 "MachineIndependent/glslang.y" + case 547: /* simple_statement: declaration_statement */ +#line 3629 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10382 "MachineIndependent/glslang_tab.cpp" +#line 10506 "MachineIndependent/glslang_tab.cpp" break; - case 545: /* simple_statement: expression_statement */ -#line 3611 "MachineIndependent/glslang.y" + case 548: /* simple_statement: expression_statement */ +#line 3630 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10388 "MachineIndependent/glslang_tab.cpp" +#line 10512 "MachineIndependent/glslang_tab.cpp" break; - case 546: /* simple_statement: selection_statement */ -#line 3612 "MachineIndependent/glslang.y" + case 549: /* simple_statement: selection_statement */ +#line 3631 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10394 "MachineIndependent/glslang_tab.cpp" +#line 10518 "MachineIndependent/glslang_tab.cpp" break; - case 547: /* simple_statement: switch_statement */ -#line 3613 "MachineIndependent/glslang.y" + case 550: /* simple_statement: switch_statement */ +#line 3632 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10400 "MachineIndependent/glslang_tab.cpp" +#line 10524 "MachineIndependent/glslang_tab.cpp" break; - case 548: /* simple_statement: case_label */ -#line 3614 "MachineIndependent/glslang.y" + case 551: /* simple_statement: case_label */ +#line 3633 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10406 "MachineIndependent/glslang_tab.cpp" +#line 10530 "MachineIndependent/glslang_tab.cpp" break; - case 549: /* simple_statement: iteration_statement */ -#line 3615 "MachineIndependent/glslang.y" + case 552: /* simple_statement: iteration_statement */ +#line 3634 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10412 "MachineIndependent/glslang_tab.cpp" +#line 10536 "MachineIndependent/glslang_tab.cpp" break; - case 550: /* simple_statement: jump_statement */ -#line 3616 "MachineIndependent/glslang.y" + case 553: /* simple_statement: jump_statement */ +#line 3635 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10418 "MachineIndependent/glslang_tab.cpp" +#line 10542 "MachineIndependent/glslang_tab.cpp" break; - case 551: /* simple_statement: demote_statement */ -#line 3618 "MachineIndependent/glslang.y" + case 554: /* simple_statement: demote_statement */ +#line 3637 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10424 "MachineIndependent/glslang_tab.cpp" +#line 10548 "MachineIndependent/glslang_tab.cpp" break; - case 552: /* demote_statement: DEMOTE SEMICOLON */ -#line 3624 "MachineIndependent/glslang.y" + case 555: /* demote_statement: DEMOTE SEMICOLON */ +#line 3643 "MachineIndependent/glslang.y" { 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 10434 "MachineIndependent/glslang_tab.cpp" +#line 10558 "MachineIndependent/glslang_tab.cpp" break; - case 553: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3633 "MachineIndependent/glslang.y" + case 556: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 3652 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10440 "MachineIndependent/glslang_tab.cpp" +#line 10564 "MachineIndependent/glslang_tab.cpp" break; - case 554: /* $@5: %empty */ -#line 3634 "MachineIndependent/glslang.y" + case 557: /* $@5: %empty */ +#line 3653 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 10449 "MachineIndependent/glslang_tab.cpp" +#line 10573 "MachineIndependent/glslang_tab.cpp" break; - case 555: /* $@6: %empty */ -#line 3638 "MachineIndependent/glslang.y" + case 558: /* $@6: %empty */ +#line 3657 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 10458 "MachineIndependent/glslang_tab.cpp" +#line 10582 "MachineIndependent/glslang_tab.cpp" break; - case 556: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ -#line 3642 "MachineIndependent/glslang.y" + case 559: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ +#line 3661 "MachineIndependent/glslang.y" { 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 10468 "MachineIndependent/glslang_tab.cpp" +#line 10592 "MachineIndependent/glslang_tab.cpp" break; - case 557: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3650 "MachineIndependent/glslang.y" + case 560: /* statement_no_new_scope: compound_statement_no_new_scope */ +#line 3669 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10474 "MachineIndependent/glslang_tab.cpp" +#line 10598 "MachineIndependent/glslang_tab.cpp" break; - case 558: /* statement_no_new_scope: simple_statement */ -#line 3651 "MachineIndependent/glslang.y" + case 561: /* statement_no_new_scope: simple_statement */ +#line 3670 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10480 "MachineIndependent/glslang_tab.cpp" +#line 10604 "MachineIndependent/glslang_tab.cpp" break; - case 559: /* $@7: %empty */ -#line 3655 "MachineIndependent/glslang.y" + case 562: /* $@7: %empty */ +#line 3674 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 10488 "MachineIndependent/glslang_tab.cpp" +#line 10612 "MachineIndependent/glslang_tab.cpp" break; - case 560: /* statement_scoped: $@7 compound_statement */ -#line 3658 "MachineIndependent/glslang.y" + case 563: /* statement_scoped: $@7 compound_statement */ +#line 3677 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10497 "MachineIndependent/glslang_tab.cpp" +#line 10621 "MachineIndependent/glslang_tab.cpp" break; - case 561: /* $@8: %empty */ -#line 3662 "MachineIndependent/glslang.y" + case 564: /* $@8: %empty */ +#line 3681 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10507 "MachineIndependent/glslang_tab.cpp" +#line 10631 "MachineIndependent/glslang_tab.cpp" break; - case 562: /* statement_scoped: $@8 simple_statement */ -#line 3667 "MachineIndependent/glslang.y" + case 565: /* statement_scoped: $@8 simple_statement */ +#line 3686 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10518 "MachineIndependent/glslang_tab.cpp" +#line 10642 "MachineIndependent/glslang_tab.cpp" break; - case 563: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 3676 "MachineIndependent/glslang.y" + case 566: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 3695 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10526 "MachineIndependent/glslang_tab.cpp" +#line 10650 "MachineIndependent/glslang_tab.cpp" break; - case 564: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 3679 "MachineIndependent/glslang.y" + case 567: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ +#line 3698 "MachineIndependent/glslang.y" { 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 10536 "MachineIndependent/glslang_tab.cpp" +#line 10660 "MachineIndependent/glslang_tab.cpp" break; - case 565: /* statement_list: statement */ -#line 3687 "MachineIndependent/glslang.y" + case 568: /* statement_list: statement */ +#line 3706 "MachineIndependent/glslang.y" { (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 || @@ -10545,11 +10669,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 10549 "MachineIndependent/glslang_tab.cpp" +#line 10673 "MachineIndependent/glslang_tab.cpp" break; - case 566: /* statement_list: statement_list statement */ -#line 3695 "MachineIndependent/glslang.y" + case 569: /* statement_list: statement_list statement */ +#line 3714 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { @@ -10558,76 +10682,77 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 10562 "MachineIndependent/glslang_tab.cpp" +#line 10686 "MachineIndependent/glslang_tab.cpp" break; - case 567: /* expression_statement: SEMICOLON */ -#line 3706 "MachineIndependent/glslang.y" + case 570: /* expression_statement: SEMICOLON */ +#line 3725 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10568 "MachineIndependent/glslang_tab.cpp" +#line 10692 "MachineIndependent/glslang_tab.cpp" break; - case 568: /* expression_statement: expression SEMICOLON */ -#line 3707 "MachineIndependent/glslang.y" + case 571: /* expression_statement: expression SEMICOLON */ +#line 3726 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 10574 "MachineIndependent/glslang_tab.cpp" +#line 10698 "MachineIndependent/glslang_tab.cpp" break; - case 569: /* selection_statement: selection_statement_nonattributed */ -#line 3711 "MachineIndependent/glslang.y" + case 572: /* selection_statement: selection_statement_nonattributed */ +#line 3730 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10582 "MachineIndependent/glslang_tab.cpp" +#line 10706 "MachineIndependent/glslang_tab.cpp" break; - case 570: /* selection_statement: attribute selection_statement_nonattributed */ -#line 3715 "MachineIndependent/glslang.y" + case 573: /* selection_statement: attribute selection_statement_nonattributed */ +#line 3734 "MachineIndependent/glslang.y" { + parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10591 "MachineIndependent/glslang_tab.cpp" +#line 10716 "MachineIndependent/glslang_tab.cpp" break; - case 571: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 3722 "MachineIndependent/glslang.y" + case 574: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ +#line 3742 "MachineIndependent/glslang.y" { 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 10600 "MachineIndependent/glslang_tab.cpp" +#line 10725 "MachineIndependent/glslang_tab.cpp" break; - case 572: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 3729 "MachineIndependent/glslang.y" + case 575: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ +#line 3749 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 10609 "MachineIndependent/glslang_tab.cpp" +#line 10734 "MachineIndependent/glslang_tab.cpp" break; - case 573: /* selection_rest_statement: statement_scoped */ -#line 3733 "MachineIndependent/glslang.y" + case 576: /* selection_rest_statement: statement_scoped */ +#line 3753 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 10618 "MachineIndependent/glslang_tab.cpp" +#line 10743 "MachineIndependent/glslang_tab.cpp" break; - case 574: /* condition: expression */ -#line 3741 "MachineIndependent/glslang.y" + case 577: /* condition: expression */ +#line 3761 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 10627 "MachineIndependent/glslang_tab.cpp" +#line 10752 "MachineIndependent/glslang_tab.cpp" break; - case 575: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 3745 "MachineIndependent/glslang.y" + case 578: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 3765 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -10638,28 +10763,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 10642 "MachineIndependent/glslang_tab.cpp" +#line 10767 "MachineIndependent/glslang_tab.cpp" break; - case 576: /* switch_statement: switch_statement_nonattributed */ -#line 3758 "MachineIndependent/glslang.y" + case 579: /* switch_statement: switch_statement_nonattributed */ +#line 3778 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10650 "MachineIndependent/glslang_tab.cpp" +#line 10775 "MachineIndependent/glslang_tab.cpp" break; - case 577: /* switch_statement: attribute switch_statement_nonattributed */ -#line 3762 "MachineIndependent/glslang.y" + case 580: /* switch_statement: attribute switch_statement_nonattributed */ +#line 3782 "MachineIndependent/glslang.y" { + parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10659 "MachineIndependent/glslang_tab.cpp" +#line 10785 "MachineIndependent/glslang_tab.cpp" break; - case 578: /* $@9: %empty */ -#line 3769 "MachineIndependent/glslang.y" + case 581: /* $@9: %empty */ +#line 3790 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -10668,11 +10794,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 10672 "MachineIndependent/glslang_tab.cpp" +#line 10798 "MachineIndependent/glslang_tab.cpp" break; - case 579: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 3777 "MachineIndependent/glslang.y" + case 582: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ +#line 3798 "MachineIndependent/glslang.y" { (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(); @@ -10682,27 +10808,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10686 "MachineIndependent/glslang_tab.cpp" +#line 10812 "MachineIndependent/glslang_tab.cpp" break; - case 580: /* switch_statement_list: %empty */ -#line 3789 "MachineIndependent/glslang.y" + case 583: /* switch_statement_list: %empty */ +#line 3810 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10694 "MachineIndependent/glslang_tab.cpp" +#line 10820 "MachineIndependent/glslang_tab.cpp" break; - case 581: /* switch_statement_list: statement_list */ -#line 3792 "MachineIndependent/glslang.y" + case 584: /* switch_statement_list: statement_list */ +#line 3813 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10702 "MachineIndependent/glslang_tab.cpp" +#line 10828 "MachineIndependent/glslang_tab.cpp" break; - case 582: /* case_label: CASE expression COLON */ -#line 3798 "MachineIndependent/glslang.y" + case 585: /* case_label: CASE expression COLON */ +#line 3819 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10715,11 +10841,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 10719 "MachineIndependent/glslang_tab.cpp" +#line 10845 "MachineIndependent/glslang_tab.cpp" break; - case 583: /* case_label: DEFAULT COLON */ -#line 3810 "MachineIndependent/glslang.y" + case 586: /* case_label: DEFAULT COLON */ +#line 3831 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10729,28 +10855,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 10733 "MachineIndependent/glslang_tab.cpp" +#line 10859 "MachineIndependent/glslang_tab.cpp" break; - case 584: /* iteration_statement: iteration_statement_nonattributed */ -#line 3822 "MachineIndependent/glslang.y" + case 587: /* iteration_statement: iteration_statement_nonattributed */ +#line 3843 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10741 "MachineIndependent/glslang_tab.cpp" +#line 10867 "MachineIndependent/glslang_tab.cpp" break; - case 585: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 3826 "MachineIndependent/glslang.y" + case 588: /* iteration_statement: attribute iteration_statement_nonattributed */ +#line 3847 "MachineIndependent/glslang.y" { + parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10750 "MachineIndependent/glslang_tab.cpp" +#line 10877 "MachineIndependent/glslang_tab.cpp" break; - case 586: /* $@10: %empty */ -#line 3833 "MachineIndependent/glslang.y" + case 589: /* $@10: %empty */ +#line 3855 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -10759,11 +10886,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10763 "MachineIndependent/glslang_tab.cpp" +#line 10890 "MachineIndependent/glslang_tab.cpp" break; - case 587: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ -#line 3841 "MachineIndependent/glslang.y" + case 590: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ +#line 3863 "MachineIndependent/glslang.y" { 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); @@ -10771,21 +10898,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10775 "MachineIndependent/glslang_tab.cpp" +#line 10902 "MachineIndependent/glslang_tab.cpp" break; - case 588: /* $@11: %empty */ -#line 3848 "MachineIndependent/glslang.y" + case 591: /* $@11: %empty */ +#line 3870 "MachineIndependent/glslang.y" { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10785 "MachineIndependent/glslang_tab.cpp" +#line 10912 "MachineIndependent/glslang_tab.cpp" break; - case 589: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 3853 "MachineIndependent/glslang.y" + case 592: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ +#line 3875 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -10797,22 +10924,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10801 "MachineIndependent/glslang_tab.cpp" +#line 10928 "MachineIndependent/glslang_tab.cpp" break; - case 590: /* $@12: %empty */ -#line 3864 "MachineIndependent/glslang.y" + case 593: /* $@12: %empty */ +#line 3886 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10812 "MachineIndependent/glslang_tab.cpp" +#line 10939 "MachineIndependent/glslang_tab.cpp" break; - case 591: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 3870 "MachineIndependent/glslang.y" + case 594: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ +#line 3892 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -10825,81 +10952,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10829 "MachineIndependent/glslang_tab.cpp" +#line 10956 "MachineIndependent/glslang_tab.cpp" break; - case 592: /* for_init_statement: expression_statement */ -#line 3885 "MachineIndependent/glslang.y" + case 595: /* for_init_statement: expression_statement */ +#line 3907 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10837 "MachineIndependent/glslang_tab.cpp" +#line 10964 "MachineIndependent/glslang_tab.cpp" break; - case 593: /* for_init_statement: declaration_statement */ -#line 3888 "MachineIndependent/glslang.y" + case 596: /* for_init_statement: declaration_statement */ +#line 3910 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10845 "MachineIndependent/glslang_tab.cpp" +#line 10972 "MachineIndependent/glslang_tab.cpp" break; - case 594: /* conditionopt: condition */ -#line 3894 "MachineIndependent/glslang.y" + case 597: /* conditionopt: condition */ +#line 3916 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10853 "MachineIndependent/glslang_tab.cpp" +#line 10980 "MachineIndependent/glslang_tab.cpp" break; - case 595: /* conditionopt: %empty */ -#line 3897 "MachineIndependent/glslang.y" + case 598: /* conditionopt: %empty */ +#line 3919 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 10861 "MachineIndependent/glslang_tab.cpp" +#line 10988 "MachineIndependent/glslang_tab.cpp" break; - case 596: /* for_rest_statement: conditionopt SEMICOLON */ -#line 3903 "MachineIndependent/glslang.y" + case 599: /* for_rest_statement: conditionopt SEMICOLON */ +#line 3925 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 10870 "MachineIndependent/glslang_tab.cpp" +#line 10997 "MachineIndependent/glslang_tab.cpp" break; - case 597: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 3907 "MachineIndependent/glslang.y" + case 600: /* for_rest_statement: conditionopt SEMICOLON expression */ +#line 3929 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 10879 "MachineIndependent/glslang_tab.cpp" +#line 11006 "MachineIndependent/glslang_tab.cpp" break; - case 598: /* jump_statement: CONTINUE SEMICOLON */ -#line 3914 "MachineIndependent/glslang.y" + case 601: /* jump_statement: CONTINUE SEMICOLON */ +#line 3936 "MachineIndependent/glslang.y" { 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 10889 "MachineIndependent/glslang_tab.cpp" +#line 11016 "MachineIndependent/glslang_tab.cpp" break; - case 599: /* jump_statement: BREAK SEMICOLON */ -#line 3919 "MachineIndependent/glslang.y" + case 602: /* jump_statement: BREAK SEMICOLON */ +#line 3941 "MachineIndependent/glslang.y" { 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 10899 "MachineIndependent/glslang_tab.cpp" +#line 11026 "MachineIndependent/glslang_tab.cpp" break; - case 600: /* jump_statement: RETURN SEMICOLON */ -#line 3924 "MachineIndependent/glslang.y" + case 603: /* jump_statement: RETURN SEMICOLON */ +#line 3946 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -10907,101 +11034,101 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 10911 "MachineIndependent/glslang_tab.cpp" +#line 11038 "MachineIndependent/glslang_tab.cpp" break; - case 601: /* jump_statement: RETURN expression SEMICOLON */ -#line 3931 "MachineIndependent/glslang.y" + case 604: /* jump_statement: RETURN expression SEMICOLON */ +#line 3953 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 10919 "MachineIndependent/glslang_tab.cpp" +#line 11046 "MachineIndependent/glslang_tab.cpp" break; - case 602: /* jump_statement: DISCARD SEMICOLON */ -#line 3934 "MachineIndependent/glslang.y" + case 605: /* jump_statement: DISCARD SEMICOLON */ +#line 3956 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 10928 "MachineIndependent/glslang_tab.cpp" +#line 11055 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 3938 "MachineIndependent/glslang.y" + case 606: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ +#line 3960 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 10937 "MachineIndependent/glslang_tab.cpp" +#line 11064 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 3943 "MachineIndependent/glslang.y" + case 607: /* jump_statement: TERMINATE_RAY SEMICOLON */ +#line 3965 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); } -#line 10946 "MachineIndependent/glslang_tab.cpp" +#line 11073 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 3947 "MachineIndependent/glslang.y" + case 608: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ +#line 3969 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); } -#line 10955 "MachineIndependent/glslang_tab.cpp" +#line 11082 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* translation_unit: external_declaration */ -#line 3957 "MachineIndependent/glslang.y" + case 609: /* translation_unit: external_declaration */ +#line 3979 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 10964 "MachineIndependent/glslang_tab.cpp" +#line 11091 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* translation_unit: translation_unit external_declaration */ -#line 3961 "MachineIndependent/glslang.y" + case 610: /* translation_unit: translation_unit external_declaration */ +#line 3983 "MachineIndependent/glslang.y" { 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 10975 "MachineIndependent/glslang_tab.cpp" +#line 11102 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* external_declaration: function_definition */ -#line 3970 "MachineIndependent/glslang.y" + case 611: /* external_declaration: function_definition */ +#line 3992 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10983 "MachineIndependent/glslang_tab.cpp" +#line 11110 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* external_declaration: declaration */ -#line 3973 "MachineIndependent/glslang.y" + case 612: /* external_declaration: declaration */ +#line 3995 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10991 "MachineIndependent/glslang_tab.cpp" +#line 11118 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* external_declaration: SEMICOLON */ -#line 3977 "MachineIndependent/glslang.y" + case 613: /* external_declaration: SEMICOLON */ +#line 3999 "MachineIndependent/glslang.y" { 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 11001 "MachineIndependent/glslang_tab.cpp" +#line 11128 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* $@13: %empty */ -#line 3986 "MachineIndependent/glslang.y" + case 614: /* $@13: %empty */ +#line 4008 "MachineIndependent/glslang.y" { (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); @@ -11014,11 +11141,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 11018 "MachineIndependent/glslang_tab.cpp" +#line 11145 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 3998 "MachineIndependent/glslang.y" + case 615: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ +#line 4020 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -11045,52 +11172,51 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 11049 "MachineIndependent/glslang_tab.cpp" +#line 11176 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4028 "MachineIndependent/glslang.y" + case 616: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4050 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); - parseContext.requireExtensions((yyvsp[-4].lex).loc, 1, &E_GL_EXT_control_flow_attributes, "attribute"); } -#line 11058 "MachineIndependent/glslang_tab.cpp" +#line 11184 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* attribute_list: single_attribute */ -#line 4034 "MachineIndependent/glslang.y" + case 617: /* attribute_list: single_attribute */ +#line 4055 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 11066 "MachineIndependent/glslang_tab.cpp" +#line 11192 "MachineIndependent/glslang_tab.cpp" break; - case 615: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4037 "MachineIndependent/glslang.y" + case 618: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4058 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 11074 "MachineIndependent/glslang_tab.cpp" +#line 11200 "MachineIndependent/glslang_tab.cpp" break; - case 616: /* single_attribute: IDENTIFIER */ -#line 4042 "MachineIndependent/glslang.y" + case 619: /* single_attribute: IDENTIFIER */ +#line 4063 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 11082 "MachineIndependent/glslang_tab.cpp" +#line 11208 "MachineIndependent/glslang_tab.cpp" break; - case 617: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4045 "MachineIndependent/glslang.y" + case 620: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4066 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 11090 "MachineIndependent/glslang_tab.cpp" +#line 11216 "MachineIndependent/glslang_tab.cpp" break; -#line 11094 "MachineIndependent/glslang_tab.cpp" +#line 11220 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -11315,5 +11441,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4050 "MachineIndependent/glslang.y" +#line 4071 "MachineIndependent/glslang.y" diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index d6bc00d9e8..7f69477fdb 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.7.4. */ +/* A Bison parser, made by GNU Bison 3.7.5. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index c718f949a7..8e0db3d03c 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -1487,6 +1487,9 @@ void TIntermediate::output(TInfoSink& infoSink, bool tree) if (xfbMode) infoSink.debug << "in xfb mode\n"; + if (getSubgroupUniformControlFlow()) + infoSink.debug << "subgroup_uniform_control_flow\n"; + switch (language) { case EShLangVertex: break; diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index c9a1d8114a..f4f2cd90c0 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -328,6 +328,7 @@ class TIntermediate { textureSamplerTransformMode(EShTexSampTransKeep), needToLegalize(false), binaryDoubleOutput(false), + subgroupUniformControlFlow(false), usePhysicalStorageBuffer(false), uniformLocationBase(0) #endif @@ -864,6 +865,9 @@ class TIntermediate { void setBinaryDoubleOutput() { binaryDoubleOutput = true; } bool getBinaryDoubleOutput() { return binaryDoubleOutput; } + + void setSubgroupUniformControlFlow() { subgroupUniformControlFlow = true; } + bool getSubgroupUniformControlFlow() const { return subgroupUniformControlFlow; } #endif // GLSLANG_WEB void addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) @@ -1115,6 +1119,7 @@ class TIntermediate { bool needToLegalize; bool binaryDoubleOutput; + bool subgroupUniformControlFlow; bool usePhysicalStorageBuffer; std::unordered_map uniformLocationOverrides; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index b679c53b82..68973ce41c 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -443,6 +443,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.specConstant.int8.comp", "spv.storageBuffer.vert", "spv.terminate.frag", + "spv.subgroupUniformControlFlow.vert", "spv.precise.tese", "spv.precise.tesc", "spv.viewportindex.tese", From a5f9118e7cc653f17f8e1448bc7e53fefe5b6c4e Mon Sep 17 00:00:00 2001 From: Jaebaek Seo Date: Tue, 8 Jun 2021 09:47:29 -0400 Subject: [PATCH 175/365] Update known_good.json for SPIRV-Tools --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index cc4421164a..d2b6ec2ce3 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "dc72924cb31cd9f3dbc3eb47e9d926cf641e3a07" + "commit" : "fb02131cb4ac74a357bb53039ca3dd8926bb3b14" }, { "name" : "spirv-tools/external/spirv-headers", From 02f1c80d77c1fe3f96b5c816cb75df693d116894 Mon Sep 17 00:00:00 2001 From: Jaebaek Seo Date: Tue, 8 Jun 2021 10:39:55 -0400 Subject: [PATCH 176/365] Fix unit test failures --- Test/baseResults/hlsl.load.2dms.dx10.frag.out | 483 +++--- .../hlsl.load.offset.dx10.frag.out | 1456 ++++++++--------- .../hlsl.load.offsetarray.dx10.frag.out | 1133 +++++++------ Test/hlsl.load.2dms.dx10.frag | 20 +- Test/hlsl.load.offset.dx10.frag | 36 +- Test/hlsl.load.offsetarray.dx10.frag | 25 +- 6 files changed, 1554 insertions(+), 1599 deletions(-) diff --git a/Test/baseResults/hlsl.load.2dms.dx10.frag.out b/Test/baseResults/hlsl.load.2dms.dx10.frag.out index 02365b8ff7..daa28b263d 100644 --- a/Test/baseResults/hlsl.load.2dms.dx10.frag.out +++ b/Test/baseResults/hlsl.load.2dms.dx10.frag.out @@ -3,13 +3,20 @@ Shader version: 500 gl_FragCoord origin is upper left using depth_any 0:? Sequence +0:23 Function Definition: getOffset( ( temp 2-component vector of int) +0:23 Function Parameters: +0:? Sequence +0:24 Branch: Return with expression +0:24 Constant: +0:24 1 (const int) +0:24 1 (const int) 0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) 0:28 Function Parameters: 0:? Sequence 0:32 textureFetch ( temp 4-component vector of float) 0:32 'g_tTex2dmsf4' ( uniform texture2DMS) 0:32 c2: direct index for structure ( uniform 2-component vector of int) -0:32 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:32 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:32 Constant: 0:32 1 (const uint) 0:32 Constant: @@ -17,7 +24,7 @@ using depth_any 0:33 textureFetch ( temp 4-component vector of int) 0:33 'g_tTex2dmsi4' ( uniform itexture2DMS) 0:33 c2: direct index for structure ( uniform 2-component vector of int) -0:33 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:33 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:33 Constant: 0:33 1 (const uint) 0:33 Constant: @@ -25,7 +32,7 @@ using depth_any 0:34 textureFetch ( temp 4-component vector of uint) 0:34 'g_tTex2dmsu4' ( uniform utexture2DMS) 0:34 c2: direct index for structure ( uniform 2-component vector of int) -0:34 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:34 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:34 Constant: 0:34 1 (const uint) 0:34 Constant: @@ -33,43 +40,34 @@ using depth_any 0:37 textureFetchOffset ( temp 4-component vector of float) 0:37 'g_tTex2dmsf4' ( uniform texture2DMS) 0:37 c2: direct index for structure ( uniform 2-component vector of int) -0:37 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:37 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:37 Constant: 0:37 1 (const uint) 0:37 Constant: 0:37 3 (const int) -0:37 o2: direct index for structure ( uniform 2-component vector of int) -0:37 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:37 Constant: -0:37 5 (const uint) +0:37 Function Call: getOffset( ( temp 2-component vector of int) 0:38 textureFetchOffset ( temp 4-component vector of int) 0:38 'g_tTex2dmsi4' ( uniform itexture2DMS) 0:38 c2: direct index for structure ( uniform 2-component vector of int) -0:38 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:38 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:38 Constant: 0:38 1 (const uint) 0:38 Constant: 0:38 3 (const int) -0:38 o2: direct index for structure ( uniform 2-component vector of int) -0:38 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:38 Constant: -0:38 5 (const uint) +0:38 Function Call: getOffset( ( temp 2-component vector of int) 0:39 textureFetchOffset ( temp 4-component vector of uint) 0:39 'g_tTex2dmsu4' ( uniform utexture2DMS) 0:39 c2: direct index for structure ( uniform 2-component vector of int) -0:39 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:39 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:39 Constant: 0:39 1 (const uint) 0:39 Constant: 0:39 3 (const int) -0:39 o2: direct index for structure ( uniform 2-component vector of int) -0:39 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:39 Constant: -0:39 5 (const uint) +0:39 Function Call: getOffset( ( temp 2-component vector of int) 0:42 textureFetch ( temp 4-component vector of float) 0:42 'g_tTex2dmsf4a' ( uniform texture2DMSArray) 0:42 c3: direct index for structure ( uniform 3-component vector of int) -0:42 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:42 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:42 Constant: 0:42 2 (const uint) 0:42 Constant: @@ -77,7 +75,7 @@ using depth_any 0:43 textureFetch ( temp 4-component vector of int) 0:43 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) 0:43 c3: direct index for structure ( uniform 3-component vector of int) -0:43 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:43 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:43 Constant: 0:43 2 (const uint) 0:43 Constant: @@ -85,7 +83,7 @@ using depth_any 0:44 textureFetch ( temp 4-component vector of uint) 0:44 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) 0:44 c3: direct index for structure ( uniform 3-component vector of int) -0:44 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:44 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:44 Constant: 0:44 2 (const uint) 0:44 Constant: @@ -93,39 +91,30 @@ using depth_any 0:47 textureFetchOffset ( temp 4-component vector of float) 0:47 'g_tTex2dmsf4a' ( uniform texture2DMSArray) 0:47 c3: direct index for structure ( uniform 3-component vector of int) -0:47 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:47 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:47 Constant: 0:47 2 (const uint) 0:47 Constant: 0:47 3 (const int) -0:47 o2: direct index for structure ( uniform 2-component vector of int) -0:47 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:47 Constant: -0:47 5 (const uint) +0:47 Function Call: getOffset( ( temp 2-component vector of int) 0:48 textureFetchOffset ( temp 4-component vector of int) 0:48 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) 0:48 c3: direct index for structure ( uniform 3-component vector of int) -0:48 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:48 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:48 Constant: 0:48 2 (const uint) 0:48 Constant: 0:48 3 (const int) -0:48 o2: direct index for structure ( uniform 2-component vector of int) -0:48 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:48 Constant: -0:48 5 (const uint) +0:48 Function Call: getOffset( ( temp 2-component vector of int) 0:49 textureFetchOffset ( temp 4-component vector of uint) 0:49 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) 0:49 c3: direct index for structure ( uniform 3-component vector of int) -0:49 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:49 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:49 Constant: 0:49 2 (const uint) 0:49 Constant: 0:49 3 (const int) -0:49 o2: direct index for structure ( uniform 2-component vector of int) -0:49 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:49 Constant: -0:49 5 (const uint) +0:49 Function Call: getOffset( ( temp 2-component vector of int) 0:51 move second child to first child ( temp 4-component vector of float) 0:51 Color: direct index for structure ( temp 4-component vector of float) 0:51 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -172,7 +161,7 @@ using depth_any 0:? 'g_tTex2dmsf4a' ( uniform texture2DMSArray) 0:? 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) 0:? 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) -0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) @@ -184,13 +173,20 @@ Shader version: 500 gl_FragCoord origin is upper left using depth_any 0:? Sequence +0:23 Function Definition: getOffset( ( temp 2-component vector of int) +0:23 Function Parameters: +0:? Sequence +0:24 Branch: Return with expression +0:24 Constant: +0:24 1 (const int) +0:24 1 (const int) 0:28 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) 0:28 Function Parameters: 0:? Sequence 0:32 textureFetch ( temp 4-component vector of float) 0:32 'g_tTex2dmsf4' ( uniform texture2DMS) 0:32 c2: direct index for structure ( uniform 2-component vector of int) -0:32 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:32 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:32 Constant: 0:32 1 (const uint) 0:32 Constant: @@ -198,7 +194,7 @@ using depth_any 0:33 textureFetch ( temp 4-component vector of int) 0:33 'g_tTex2dmsi4' ( uniform itexture2DMS) 0:33 c2: direct index for structure ( uniform 2-component vector of int) -0:33 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:33 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:33 Constant: 0:33 1 (const uint) 0:33 Constant: @@ -206,7 +202,7 @@ using depth_any 0:34 textureFetch ( temp 4-component vector of uint) 0:34 'g_tTex2dmsu4' ( uniform utexture2DMS) 0:34 c2: direct index for structure ( uniform 2-component vector of int) -0:34 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:34 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:34 Constant: 0:34 1 (const uint) 0:34 Constant: @@ -214,43 +210,34 @@ using depth_any 0:37 textureFetchOffset ( temp 4-component vector of float) 0:37 'g_tTex2dmsf4' ( uniform texture2DMS) 0:37 c2: direct index for structure ( uniform 2-component vector of int) -0:37 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:37 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:37 Constant: 0:37 1 (const uint) 0:37 Constant: 0:37 3 (const int) -0:37 o2: direct index for structure ( uniform 2-component vector of int) -0:37 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:37 Constant: -0:37 5 (const uint) +0:37 Function Call: getOffset( ( temp 2-component vector of int) 0:38 textureFetchOffset ( temp 4-component vector of int) 0:38 'g_tTex2dmsi4' ( uniform itexture2DMS) 0:38 c2: direct index for structure ( uniform 2-component vector of int) -0:38 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:38 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:38 Constant: 0:38 1 (const uint) 0:38 Constant: 0:38 3 (const int) -0:38 o2: direct index for structure ( uniform 2-component vector of int) -0:38 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:38 Constant: -0:38 5 (const uint) +0:38 Function Call: getOffset( ( temp 2-component vector of int) 0:39 textureFetchOffset ( temp 4-component vector of uint) 0:39 'g_tTex2dmsu4' ( uniform utexture2DMS) 0:39 c2: direct index for structure ( uniform 2-component vector of int) -0:39 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:39 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:39 Constant: 0:39 1 (const uint) 0:39 Constant: 0:39 3 (const int) -0:39 o2: direct index for structure ( uniform 2-component vector of int) -0:39 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:39 Constant: -0:39 5 (const uint) +0:39 Function Call: getOffset( ( temp 2-component vector of int) 0:42 textureFetch ( temp 4-component vector of float) 0:42 'g_tTex2dmsf4a' ( uniform texture2DMSArray) 0:42 c3: direct index for structure ( uniform 3-component vector of int) -0:42 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:42 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:42 Constant: 0:42 2 (const uint) 0:42 Constant: @@ -258,7 +245,7 @@ using depth_any 0:43 textureFetch ( temp 4-component vector of int) 0:43 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) 0:43 c3: direct index for structure ( uniform 3-component vector of int) -0:43 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:43 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:43 Constant: 0:43 2 (const uint) 0:43 Constant: @@ -266,7 +253,7 @@ using depth_any 0:44 textureFetch ( temp 4-component vector of uint) 0:44 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) 0:44 c3: direct index for structure ( uniform 3-component vector of int) -0:44 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:44 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:44 Constant: 0:44 2 (const uint) 0:44 Constant: @@ -274,39 +261,30 @@ using depth_any 0:47 textureFetchOffset ( temp 4-component vector of float) 0:47 'g_tTex2dmsf4a' ( uniform texture2DMSArray) 0:47 c3: direct index for structure ( uniform 3-component vector of int) -0:47 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:47 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:47 Constant: 0:47 2 (const uint) 0:47 Constant: 0:47 3 (const int) -0:47 o2: direct index for structure ( uniform 2-component vector of int) -0:47 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:47 Constant: -0:47 5 (const uint) +0:47 Function Call: getOffset( ( temp 2-component vector of int) 0:48 textureFetchOffset ( temp 4-component vector of int) 0:48 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) 0:48 c3: direct index for structure ( uniform 3-component vector of int) -0:48 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:48 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:48 Constant: 0:48 2 (const uint) 0:48 Constant: 0:48 3 (const int) -0:48 o2: direct index for structure ( uniform 2-component vector of int) -0:48 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:48 Constant: -0:48 5 (const uint) +0:48 Function Call: getOffset( ( temp 2-component vector of int) 0:49 textureFetchOffset ( temp 4-component vector of uint) 0:49 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) 0:49 c3: direct index for structure ( uniform 3-component vector of int) -0:49 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:49 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:49 Constant: 0:49 2 (const uint) 0:49 Constant: 0:49 3 (const int) -0:49 o2: direct index for structure ( uniform 2-component vector of int) -0:49 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:49 Constant: -0:49 5 (const uint) +0:49 Function Call: getOffset( ( temp 2-component vector of int) 0:51 move second child to first child ( temp 4-component vector of float) 0:51 Color: direct index for structure ( temp 4-component vector of float) 0:51 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -353,208 +331,199 @@ using depth_any 0:? 'g_tTex2dmsf4a' ( uniform texture2DMSArray) 0:? 'g_tTex2dmsi4a' ( uniform itexture2DMSArray) 0:? 'g_tTex2dmsu4a' ( uniform utexture2DMSArray) -0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 130 +// Id's are bound by 129 Capability Shader Capability ImageGatherExtended 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 120 124 + EntryPoint Fragment 4 "main" 119 123 ExecutionMode 4 OriginUpperLeft ExecutionMode 4 DepthReplacing Source HLSL 500 Name 4 "main" - Name 8 "PS_OUTPUT" - MemberName 8(PS_OUTPUT) 0 "Color" - MemberName 8(PS_OUTPUT) 1 "Depth" - Name 10 "@main(" - Name 14 "g_tTex2dmsf4" - Name 20 "$Global" - MemberName 20($Global) 0 "c1" - MemberName 20($Global) 1 "c2" - MemberName 20($Global) 2 "c3" - MemberName 20($Global) 3 "c4" - MemberName 20($Global) 4 "o1" - MemberName 20($Global) 5 "o2" - MemberName 20($Global) 6 "o3" - MemberName 20($Global) 7 "o4" - Name 22 "" - Name 31 "g_tTex2dmsi4" - Name 39 "g_tTex2dmsu4" - Name 66 "g_tTex2dmsf4a" - Name 75 "g_tTex2dmsi4a" - Name 82 "g_tTex2dmsu4a" - Name 106 "psout" - Name 117 "flattenTemp" - Name 120 "@entryPointOutput.Color" - Name 124 "@entryPointOutput.Depth" - Name 129 "g_sSamp" - Decorate 14(g_tTex2dmsf4) DescriptorSet 0 - Decorate 14(g_tTex2dmsf4) Binding 1 - MemberDecorate 20($Global) 0 Offset 0 - MemberDecorate 20($Global) 1 Offset 8 - MemberDecorate 20($Global) 2 Offset 16 - MemberDecorate 20($Global) 3 Offset 32 - MemberDecorate 20($Global) 4 Offset 48 - MemberDecorate 20($Global) 5 Offset 56 - MemberDecorate 20($Global) 6 Offset 64 - MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 - Decorate 22 Binding 7 - Decorate 31(g_tTex2dmsi4) DescriptorSet 0 - Decorate 31(g_tTex2dmsi4) Binding 2 - Decorate 39(g_tTex2dmsu4) DescriptorSet 0 - Decorate 39(g_tTex2dmsu4) Binding 3 - Decorate 66(g_tTex2dmsf4a) DescriptorSet 0 - Decorate 66(g_tTex2dmsf4a) Binding 4 - Decorate 75(g_tTex2dmsi4a) DescriptorSet 0 - Decorate 75(g_tTex2dmsi4a) Binding 5 - Decorate 82(g_tTex2dmsu4a) DescriptorSet 0 - Decorate 82(g_tTex2dmsu4a) Binding 6 - Decorate 120(@entryPointOutput.Color) Location 0 - Decorate 124(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 129(g_sSamp) DescriptorSet 0 - Decorate 129(g_sSamp) Binding 0 + Name 9 "getOffset(" + Name 13 "PS_OUTPUT" + MemberName 13(PS_OUTPUT) 0 "Color" + MemberName 13(PS_OUTPUT) 1 "Depth" + Name 15 "@main(" + Name 23 "g_tTex2dmsf4" + Name 27 "$Global" + MemberName 27($Global) 0 "c1" + MemberName 27($Global) 1 "c2" + MemberName 27($Global) 2 "c3" + MemberName 27($Global) 3 "c4" + Name 29 "" + Name 37 "g_tTex2dmsi4" + Name 45 "g_tTex2dmsu4" + Name 68 "g_tTex2dmsf4a" + Name 77 "g_tTex2dmsi4a" + Name 84 "g_tTex2dmsu4a" + Name 105 "psout" + Name 116 "flattenTemp" + Name 119 "@entryPointOutput.Color" + Name 123 "@entryPointOutput.Depth" + Name 128 "g_sSamp" + Decorate 23(g_tTex2dmsf4) DescriptorSet 0 + Decorate 23(g_tTex2dmsf4) Binding 1 + MemberDecorate 27($Global) 0 Offset 0 + MemberDecorate 27($Global) 1 Offset 8 + MemberDecorate 27($Global) 2 Offset 16 + MemberDecorate 27($Global) 3 Offset 32 + Decorate 27($Global) Block + Decorate 29 DescriptorSet 0 + Decorate 29 Binding 7 + Decorate 37(g_tTex2dmsi4) DescriptorSet 0 + Decorate 37(g_tTex2dmsi4) Binding 2 + Decorate 45(g_tTex2dmsu4) DescriptorSet 0 + Decorate 45(g_tTex2dmsu4) Binding 3 + Decorate 68(g_tTex2dmsf4a) DescriptorSet 0 + Decorate 68(g_tTex2dmsf4a) Binding 4 + Decorate 77(g_tTex2dmsi4a) DescriptorSet 0 + Decorate 77(g_tTex2dmsi4a) Binding 5 + Decorate 84(g_tTex2dmsu4a) DescriptorSet 0 + Decorate 84(g_tTex2dmsu4a) Binding 6 + Decorate 119(@entryPointOutput.Color) Location 0 + Decorate 123(@entryPointOutput.Depth) BuiltIn FragDepth + Decorate 128(g_sSamp) DescriptorSet 0 + Decorate 128(g_sSamp) Binding 0 2: TypeVoid 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) - 9: TypeFunction 8(PS_OUTPUT) - 12: TypeImage 6(float) 2D multi-sampled sampled format:Unknown - 13: TypePointer UniformConstant 12 -14(g_tTex2dmsf4): 13(ptr) Variable UniformConstant - 16: TypeInt 32 1 - 17: TypeVector 16(int) 2 - 18: TypeVector 16(int) 3 - 19: TypeVector 16(int) 4 - 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) - 21: TypePointer Uniform 20($Global) - 22: 21(ptr) Variable Uniform - 23: 16(int) Constant 1 - 24: TypePointer Uniform 17(ivec2) - 27: 16(int) Constant 3 - 29: TypeImage 16(int) 2D multi-sampled sampled format:Unknown - 30: TypePointer UniformConstant 29 -31(g_tTex2dmsi4): 30(ptr) Variable UniformConstant - 36: TypeInt 32 0 - 37: TypeImage 36(int) 2D multi-sampled sampled format:Unknown - 38: TypePointer UniformConstant 37 -39(g_tTex2dmsu4): 38(ptr) Variable UniformConstant - 43: TypeVector 36(int) 4 - 48: 16(int) Constant 5 - 64: TypeImage 6(float) 2D array multi-sampled sampled format:Unknown - 65: TypePointer UniformConstant 64 -66(g_tTex2dmsf4a): 65(ptr) Variable UniformConstant - 68: 16(int) Constant 2 - 69: TypePointer Uniform 18(ivec3) - 73: TypeImage 16(int) 2D array multi-sampled sampled format:Unknown - 74: TypePointer UniformConstant 73 -75(g_tTex2dmsi4a): 74(ptr) Variable UniformConstant - 80: TypeImage 36(int) 2D array multi-sampled sampled format:Unknown - 81: TypePointer UniformConstant 80 -82(g_tTex2dmsu4a): 81(ptr) Variable UniformConstant - 105: TypePointer Function 8(PS_OUTPUT) - 107: 16(int) Constant 0 - 108: 6(float) Constant 1065353216 - 109: 7(fvec4) ConstantComposite 108 108 108 108 - 110: TypePointer Function 7(fvec4) - 112: TypePointer Function 6(float) - 119: TypePointer Output 7(fvec4) -120(@entryPointOutput.Color): 119(ptr) Variable Output - 123: TypePointer Output 6(float) -124(@entryPointOutput.Depth): 123(ptr) Variable Output - 127: TypeSampler - 128: TypePointer UniformConstant 127 - 129(g_sSamp): 128(ptr) Variable UniformConstant + 6: TypeInt 32 1 + 7: TypeVector 6(int) 2 + 8: TypeFunction 7(ivec2) + 11: TypeFloat 32 + 12: TypeVector 11(float) 4 + 13(PS_OUTPUT): TypeStruct 12(fvec4) 11(float) + 14: TypeFunction 13(PS_OUTPUT) + 17: 6(int) Constant 1 + 18: 7(ivec2) ConstantComposite 17 17 + 21: TypeImage 11(float) 2D multi-sampled sampled format:Unknown + 22: TypePointer UniformConstant 21 +23(g_tTex2dmsf4): 22(ptr) Variable UniformConstant + 25: TypeVector 6(int) 3 + 26: TypeVector 6(int) 4 + 27($Global): TypeStruct 6(int) 7(ivec2) 25(ivec3) 26(ivec4) + 28: TypePointer Uniform 27($Global) + 29: 28(ptr) Variable Uniform + 30: TypePointer Uniform 7(ivec2) + 33: 6(int) Constant 3 + 35: TypeImage 6(int) 2D multi-sampled sampled format:Unknown + 36: TypePointer UniformConstant 35 +37(g_tTex2dmsi4): 36(ptr) Variable UniformConstant + 42: TypeInt 32 0 + 43: TypeImage 42(int) 2D multi-sampled sampled format:Unknown + 44: TypePointer UniformConstant 43 +45(g_tTex2dmsu4): 44(ptr) Variable UniformConstant + 49: TypeVector 42(int) 4 + 66: TypeImage 11(float) 2D array multi-sampled sampled format:Unknown + 67: TypePointer UniformConstant 66 +68(g_tTex2dmsf4a): 67(ptr) Variable UniformConstant + 70: 6(int) Constant 2 + 71: TypePointer Uniform 25(ivec3) + 75: TypeImage 6(int) 2D array multi-sampled sampled format:Unknown + 76: TypePointer UniformConstant 75 +77(g_tTex2dmsi4a): 76(ptr) Variable UniformConstant + 82: TypeImage 42(int) 2D array multi-sampled sampled format:Unknown + 83: TypePointer UniformConstant 82 +84(g_tTex2dmsu4a): 83(ptr) Variable UniformConstant + 104: TypePointer Function 13(PS_OUTPUT) + 106: 6(int) Constant 0 + 107: 11(float) Constant 1065353216 + 108: 12(fvec4) ConstantComposite 107 107 107 107 + 109: TypePointer Function 12(fvec4) + 111: TypePointer Function 11(float) + 118: TypePointer Output 12(fvec4) +119(@entryPointOutput.Color): 118(ptr) Variable Output + 122: TypePointer Output 11(float) +123(@entryPointOutput.Depth): 122(ptr) Variable Output + 126: TypeSampler + 127: TypePointer UniformConstant 126 + 128(g_sSamp): 127(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label -117(flattenTemp): 105(ptr) Variable Function - 118:8(PS_OUTPUT) FunctionCall 10(@main() - Store 117(flattenTemp) 118 - 121: 110(ptr) AccessChain 117(flattenTemp) 107 - 122: 7(fvec4) Load 121 - Store 120(@entryPointOutput.Color) 122 - 125: 112(ptr) AccessChain 117(flattenTemp) 23 - 126: 6(float) Load 125 - Store 124(@entryPointOutput.Depth) 126 +116(flattenTemp): 104(ptr) Variable Function + 117:13(PS_OUTPUT) FunctionCall 15(@main() + Store 116(flattenTemp) 117 + 120: 109(ptr) AccessChain 116(flattenTemp) 106 + 121: 12(fvec4) Load 120 + Store 119(@entryPointOutput.Color) 121 + 124: 111(ptr) AccessChain 116(flattenTemp) 17 + 125: 11(float) Load 124 + Store 123(@entryPointOutput.Depth) 125 Return FunctionEnd - 10(@main():8(PS_OUTPUT) Function None 9 - 11: Label - 106(psout): 105(ptr) Variable Function - 15: 12 Load 14(g_tTex2dmsf4) - 25: 24(ptr) AccessChain 22 23 - 26: 17(ivec2) Load 25 - 28: 7(fvec4) ImageFetch 15 26 Sample 27 - 32: 29 Load 31(g_tTex2dmsi4) - 33: 24(ptr) AccessChain 22 23 - 34: 17(ivec2) Load 33 - 35: 19(ivec4) ImageFetch 32 34 Sample 27 - 40: 37 Load 39(g_tTex2dmsu4) - 41: 24(ptr) AccessChain 22 23 - 42: 17(ivec2) Load 41 - 44: 43(ivec4) ImageFetch 40 42 Sample 27 - 45: 12 Load 14(g_tTex2dmsf4) - 46: 24(ptr) AccessChain 22 23 - 47: 17(ivec2) Load 46 - 49: 24(ptr) AccessChain 22 48 - 50: 17(ivec2) Load 49 - 51: 7(fvec4) ImageFetch 45 47 Offset Sample 50 27 - 52: 29 Load 31(g_tTex2dmsi4) - 53: 24(ptr) AccessChain 22 23 - 54: 17(ivec2) Load 53 - 55: 24(ptr) AccessChain 22 48 - 56: 17(ivec2) Load 55 - 57: 19(ivec4) ImageFetch 52 54 Offset Sample 56 27 - 58: 37 Load 39(g_tTex2dmsu4) - 59: 24(ptr) AccessChain 22 23 - 60: 17(ivec2) Load 59 - 61: 24(ptr) AccessChain 22 48 - 62: 17(ivec2) Load 61 - 63: 43(ivec4) ImageFetch 58 60 Offset Sample 62 27 - 67: 64 Load 66(g_tTex2dmsf4a) - 70: 69(ptr) AccessChain 22 68 - 71: 18(ivec3) Load 70 - 72: 7(fvec4) ImageFetch 67 71 Sample 27 - 76: 73 Load 75(g_tTex2dmsi4a) - 77: 69(ptr) AccessChain 22 68 - 78: 18(ivec3) Load 77 - 79: 19(ivec4) ImageFetch 76 78 Sample 27 - 83: 80 Load 82(g_tTex2dmsu4a) - 84: 69(ptr) AccessChain 22 68 - 85: 18(ivec3) Load 84 - 86: 43(ivec4) ImageFetch 83 85 Sample 27 - 87: 64 Load 66(g_tTex2dmsf4a) - 88: 69(ptr) AccessChain 22 68 - 89: 18(ivec3) Load 88 - 90: 24(ptr) AccessChain 22 48 - 91: 17(ivec2) Load 90 - 92: 7(fvec4) ImageFetch 87 89 Offset Sample 91 27 - 93: 73 Load 75(g_tTex2dmsi4a) - 94: 69(ptr) AccessChain 22 68 - 95: 18(ivec3) Load 94 - 96: 24(ptr) AccessChain 22 48 - 97: 17(ivec2) Load 96 - 98: 19(ivec4) ImageFetch 93 95 Offset Sample 97 27 - 99: 80 Load 82(g_tTex2dmsu4a) - 100: 69(ptr) AccessChain 22 68 - 101: 18(ivec3) Load 100 - 102: 24(ptr) AccessChain 22 48 - 103: 17(ivec2) Load 102 - 104: 43(ivec4) ImageFetch 99 101 Offset Sample 103 27 - 111: 110(ptr) AccessChain 106(psout) 107 - Store 111 109 - 113: 112(ptr) AccessChain 106(psout) 23 - Store 113 108 - 114:8(PS_OUTPUT) Load 106(psout) - ReturnValue 114 + 9(getOffset(): 7(ivec2) Function None 8 + 10: Label + ReturnValue 18 + FunctionEnd + 15(@main():13(PS_OUTPUT) Function None 14 + 16: Label + 105(psout): 104(ptr) Variable Function + 24: 21 Load 23(g_tTex2dmsf4) + 31: 30(ptr) AccessChain 29 17 + 32: 7(ivec2) Load 31 + 34: 12(fvec4) ImageFetch 24 32 Sample 33 + 38: 35 Load 37(g_tTex2dmsi4) + 39: 30(ptr) AccessChain 29 17 + 40: 7(ivec2) Load 39 + 41: 26(ivec4) ImageFetch 38 40 Sample 33 + 46: 43 Load 45(g_tTex2dmsu4) + 47: 30(ptr) AccessChain 29 17 + 48: 7(ivec2) Load 47 + 50: 49(ivec4) ImageFetch 46 48 Sample 33 + 51: 21 Load 23(g_tTex2dmsf4) + 52: 30(ptr) AccessChain 29 17 + 53: 7(ivec2) Load 52 + 54: 7(ivec2) FunctionCall 9(getOffset() + 55: 12(fvec4) ImageFetch 51 53 Offset Sample 54 33 + 56: 35 Load 37(g_tTex2dmsi4) + 57: 30(ptr) AccessChain 29 17 + 58: 7(ivec2) Load 57 + 59: 7(ivec2) FunctionCall 9(getOffset() + 60: 26(ivec4) ImageFetch 56 58 Offset Sample 59 33 + 61: 43 Load 45(g_tTex2dmsu4) + 62: 30(ptr) AccessChain 29 17 + 63: 7(ivec2) Load 62 + 64: 7(ivec2) FunctionCall 9(getOffset() + 65: 49(ivec4) ImageFetch 61 63 Offset Sample 64 33 + 69: 66 Load 68(g_tTex2dmsf4a) + 72: 71(ptr) AccessChain 29 70 + 73: 25(ivec3) Load 72 + 74: 12(fvec4) ImageFetch 69 73 Sample 33 + 78: 75 Load 77(g_tTex2dmsi4a) + 79: 71(ptr) AccessChain 29 70 + 80: 25(ivec3) Load 79 + 81: 26(ivec4) ImageFetch 78 80 Sample 33 + 85: 82 Load 84(g_tTex2dmsu4a) + 86: 71(ptr) AccessChain 29 70 + 87: 25(ivec3) Load 86 + 88: 49(ivec4) ImageFetch 85 87 Sample 33 + 89: 66 Load 68(g_tTex2dmsf4a) + 90: 71(ptr) AccessChain 29 70 + 91: 25(ivec3) Load 90 + 92: 7(ivec2) FunctionCall 9(getOffset() + 93: 12(fvec4) ImageFetch 89 91 Offset Sample 92 33 + 94: 75 Load 77(g_tTex2dmsi4a) + 95: 71(ptr) AccessChain 29 70 + 96: 25(ivec3) Load 95 + 97: 7(ivec2) FunctionCall 9(getOffset() + 98: 26(ivec4) ImageFetch 94 96 Offset Sample 97 33 + 99: 82 Load 84(g_tTex2dmsu4a) + 100: 71(ptr) AccessChain 29 70 + 101: 25(ivec3) Load 100 + 102: 7(ivec2) FunctionCall 9(getOffset() + 103: 49(ivec4) ImageFetch 99 101 Offset Sample 102 33 + 110: 109(ptr) AccessChain 105(psout) 106 + Store 110 108 + 112: 111(ptr) AccessChain 105(psout) 17 + Store 112 107 + 113:13(PS_OUTPUT) Load 105(psout) + ReturnValue 113 FunctionEnd diff --git a/Test/baseResults/hlsl.load.offset.dx10.frag.out b/Test/baseResults/hlsl.load.offset.dx10.frag.out index 135b4afaa8..106af53912 100644 --- a/Test/baseResults/hlsl.load.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.load.offset.dx10.frag.out @@ -3,254 +3,248 @@ Shader version: 500 gl_FragCoord origin is upper left using depth_any 0:? Sequence -0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:43 Function Definition: getOffset1( ( temp int) +0:43 Function Parameters: +0:? Sequence +0:44 Branch: Return with expression +0:44 Constant: +0:44 1 (const int) +0:48 Function Definition: getOffset2( ( temp 2-component vector of int) 0:48 Function Parameters: 0:? Sequence -0:52 textureFetchOffset ( temp 4-component vector of float) -0:52 'g_tTex1df4' (layout( binding=0) uniform texture1D) -0:52 vector swizzle ( temp int) -0:52 c2: direct index for structure ( uniform 2-component vector of int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 1 (const uint) -0:52 Sequence -0:52 Constant: -0:52 0 (const int) -0:52 direct index ( temp int) -0:52 c2: direct index for structure ( uniform 2-component vector of int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 1 (const uint) -0:52 Constant: -0:52 1 (const int) -0:52 o1: direct index for structure ( uniform int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 4 (const uint) -0:53 textureFetchOffset ( temp 4-component vector of int) -0:53 'g_tTex1di4' ( uniform itexture1D) -0:53 vector swizzle ( temp int) -0:53 c2: direct index for structure ( uniform 2-component vector of int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 1 (const uint) -0:53 Sequence -0:53 Constant: -0:53 0 (const int) -0:53 direct index ( temp int) -0:53 c2: direct index for structure ( uniform 2-component vector of int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 1 (const uint) -0:53 Constant: -0:53 1 (const int) -0:53 o1: direct index for structure ( uniform int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 4 (const uint) -0:54 textureFetchOffset ( temp 4-component vector of uint) -0:54 'g_tTex1du4' ( uniform utexture1D) -0:54 vector swizzle ( temp int) -0:54 c2: direct index for structure ( uniform 2-component vector of int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 1 (const uint) -0:54 Sequence -0:54 Constant: -0:54 0 (const int) -0:54 direct index ( temp int) -0:54 c2: direct index for structure ( uniform 2-component vector of int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 1 (const uint) -0:54 Constant: -0:54 1 (const int) -0:54 o1: direct index for structure ( uniform int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 4 (const uint) -0:57 textureFetchOffset ( temp 4-component vector of float) -0:57 'g_tTex2df4' ( uniform texture2D) -0:57 vector swizzle ( temp 2-component vector of int) -0:57 c3: direct index for structure ( uniform 3-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:57 Constant: -0:57 2 (const uint) -0:57 Sequence -0:57 Constant: -0:57 0 (const int) -0:57 Constant: -0:57 1 (const int) -0:57 direct index ( temp int) -0:57 c3: direct index for structure ( uniform 3-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:57 Constant: -0:57 2 (const uint) -0:57 Constant: -0:57 2 (const int) -0:57 o2: direct index for structure ( uniform 2-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:57 Constant: -0:57 5 (const uint) -0:58 textureFetchOffset ( temp 4-component vector of int) -0:58 'g_tTex2di4' ( uniform itexture2D) -0:58 vector swizzle ( temp 2-component vector of int) -0:58 c3: direct index for structure ( uniform 3-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:58 Constant: -0:58 2 (const uint) -0:58 Sequence -0:58 Constant: -0:58 0 (const int) -0:58 Constant: -0:58 1 (const int) -0:58 direct index ( temp int) -0:58 c3: direct index for structure ( uniform 3-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:58 Constant: -0:58 2 (const uint) -0:58 Constant: -0:58 2 (const int) -0:58 o2: direct index for structure ( uniform 2-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:58 Constant: -0:58 5 (const uint) -0:59 textureFetchOffset ( temp 4-component vector of uint) -0:59 'g_tTex2du4' ( uniform utexture2D) -0:59 vector swizzle ( temp 2-component vector of int) -0:59 c3: direct index for structure ( uniform 3-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:59 Constant: -0:59 2 (const uint) -0:59 Sequence -0:59 Constant: -0:59 0 (const int) -0:59 Constant: -0:59 1 (const int) -0:59 direct index ( temp int) -0:59 c3: direct index for structure ( uniform 3-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:59 Constant: -0:59 2 (const uint) -0:59 Constant: -0:59 2 (const int) -0:59 o2: direct index for structure ( uniform 2-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:59 Constant: -0:59 5 (const uint) +0:49 Branch: Return with expression +0:49 Constant: +0:49 1 (const int) +0:49 1 (const int) +0:53 Function Definition: getOffset3( ( temp 3-component vector of int) +0:53 Function Parameters: +0:? Sequence +0:54 Branch: Return with expression +0:54 Constant: +0:54 1 (const int) +0:54 1 (const int) +0:54 1 (const int) +0:58 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Function Parameters: +0:? Sequence 0:62 textureFetchOffset ( temp 4-component vector of float) -0:62 'g_tTex3df4' ( uniform texture3D) -0:62 vector swizzle ( temp 3-component vector of int) -0:62 c4: direct index for structure ( uniform 4-component vector of int) -0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:62 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:62 vector swizzle ( temp int) +0:62 c2: direct index for structure ( uniform 2-component vector of int) +0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:62 Constant: -0:62 3 (const uint) +0:62 1 (const uint) 0:62 Sequence 0:62 Constant: 0:62 0 (const int) -0:62 Constant: -0:62 1 (const int) -0:62 Constant: -0:62 2 (const int) 0:62 direct index ( temp int) -0:62 c4: direct index for structure ( uniform 4-component vector of int) -0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:62 c2: direct index for structure ( uniform 2-component vector of int) +0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:62 Constant: -0:62 3 (const uint) -0:62 Constant: -0:62 3 (const int) -0:62 o3: direct index for structure ( uniform 3-component vector of int) -0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:62 1 (const uint) 0:62 Constant: -0:62 6 (const uint) +0:62 1 (const int) +0:62 Function Call: getOffset1( ( temp int) 0:63 textureFetchOffset ( temp 4-component vector of int) -0:63 'g_tTex3di4' ( uniform itexture3D) -0:63 vector swizzle ( temp 3-component vector of int) -0:63 c4: direct index for structure ( uniform 4-component vector of int) -0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:63 'g_tTex1di4' ( uniform itexture1D) +0:63 vector swizzle ( temp int) +0:63 c2: direct index for structure ( uniform 2-component vector of int) +0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:63 Constant: -0:63 3 (const uint) +0:63 1 (const uint) 0:63 Sequence 0:63 Constant: 0:63 0 (const int) -0:63 Constant: -0:63 1 (const int) -0:63 Constant: -0:63 2 (const int) 0:63 direct index ( temp int) -0:63 c4: direct index for structure ( uniform 4-component vector of int) -0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:63 c2: direct index for structure ( uniform 2-component vector of int) +0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:63 Constant: -0:63 3 (const uint) -0:63 Constant: -0:63 3 (const int) -0:63 o3: direct index for structure ( uniform 3-component vector of int) -0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:63 1 (const uint) 0:63 Constant: -0:63 6 (const uint) +0:63 1 (const int) +0:63 Function Call: getOffset1( ( temp int) 0:64 textureFetchOffset ( temp 4-component vector of uint) -0:64 'g_tTex3du4' ( uniform utexture3D) -0:64 vector swizzle ( temp 3-component vector of int) -0:64 c4: direct index for structure ( uniform 4-component vector of int) -0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:64 'g_tTex1du4' ( uniform utexture1D) +0:64 vector swizzle ( temp int) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:64 Constant: -0:64 3 (const uint) +0:64 1 (const uint) 0:64 Sequence 0:64 Constant: 0:64 0 (const int) -0:64 Constant: -0:64 1 (const int) -0:64 Constant: -0:64 2 (const int) 0:64 direct index ( temp int) -0:64 c4: direct index for structure ( uniform 4-component vector of int) -0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:64 Constant: -0:64 3 (const uint) -0:64 Constant: -0:64 3 (const int) -0:64 o3: direct index for structure ( uniform 3-component vector of int) -0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:64 1 (const uint) 0:64 Constant: -0:64 6 (const uint) -0:72 move second child to first child ( temp 4-component vector of float) -0:72 Color: direct index for structure ( temp 4-component vector of float) -0:72 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:64 1 (const int) +0:64 Function Call: getOffset1( ( temp int) +0:67 textureFetchOffset ( temp 4-component vector of float) +0:67 'g_tTex2df4' ( uniform texture2D) +0:67 vector swizzle ( temp 2-component vector of int) +0:67 c3: direct index for structure ( uniform 3-component vector of int) +0:67 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:67 Constant: +0:67 2 (const uint) +0:67 Sequence +0:67 Constant: +0:67 0 (const int) +0:67 Constant: +0:67 1 (const int) +0:67 direct index ( temp int) +0:67 c3: direct index for structure ( uniform 3-component vector of int) +0:67 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:67 Constant: +0:67 2 (const uint) +0:67 Constant: +0:67 2 (const int) +0:67 Function Call: getOffset2( ( temp 2-component vector of int) +0:68 textureFetchOffset ( temp 4-component vector of int) +0:68 'g_tTex2di4' ( uniform itexture2D) +0:68 vector swizzle ( temp 2-component vector of int) +0:68 c3: direct index for structure ( uniform 3-component vector of int) +0:68 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:68 Constant: +0:68 2 (const uint) +0:68 Sequence +0:68 Constant: +0:68 0 (const int) +0:68 Constant: +0:68 1 (const int) +0:68 direct index ( temp int) +0:68 c3: direct index for structure ( uniform 3-component vector of int) +0:68 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:68 Constant: +0:68 2 (const uint) +0:68 Constant: +0:68 2 (const int) +0:68 Function Call: getOffset2( ( temp 2-component vector of int) +0:69 textureFetchOffset ( temp 4-component vector of uint) +0:69 'g_tTex2du4' ( uniform utexture2D) +0:69 vector swizzle ( temp 2-component vector of int) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:69 Constant: +0:69 2 (const uint) +0:69 Sequence +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 1 (const int) +0:69 direct index ( temp int) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:69 Constant: +0:69 2 (const uint) +0:69 Constant: +0:69 2 (const int) +0:69 Function Call: getOffset2( ( temp 2-component vector of int) +0:72 textureFetchOffset ( temp 4-component vector of float) +0:72 'g_tTex3df4' ( uniform texture3D) +0:72 vector swizzle ( temp 3-component vector of int) +0:72 c4: direct index for structure ( uniform 4-component vector of int) +0:72 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:72 Constant: +0:72 3 (const uint) +0:72 Sequence +0:72 Constant: +0:72 0 (const int) +0:72 Constant: +0:72 1 (const int) +0:72 Constant: +0:72 2 (const int) +0:72 direct index ( temp int) +0:72 c4: direct index for structure ( uniform 4-component vector of int) +0:72 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:72 Constant: +0:72 3 (const uint) 0:72 Constant: -0:72 0 (const int) -0:72 Constant: -0:72 1.000000 -0:72 1.000000 -0:72 1.000000 -0:72 1.000000 -0:73 move second child to first child ( temp float) -0:73 Depth: direct index for structure ( temp float) -0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:72 3 (const int) +0:72 Function Call: getOffset3( ( temp 3-component vector of int) +0:73 textureFetchOffset ( temp 4-component vector of int) +0:73 'g_tTex3di4' ( uniform itexture3D) +0:73 vector swizzle ( temp 3-component vector of int) +0:73 c4: direct index for structure ( uniform 4-component vector of int) +0:73 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:73 Constant: +0:73 3 (const uint) +0:73 Sequence +0:73 Constant: +0:73 0 (const int) +0:73 Constant: +0:73 1 (const int) +0:73 Constant: +0:73 2 (const int) +0:73 direct index ( temp int) +0:73 c4: direct index for structure ( uniform 4-component vector of int) +0:73 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:73 Constant: +0:73 3 (const uint) 0:73 Constant: -0:73 1 (const int) -0:73 Constant: -0:73 1.000000 -0:75 Branch: Return with expression -0:75 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Function Definition: main( ( temp void) -0:48 Function Parameters: +0:73 3 (const int) +0:73 Function Call: getOffset3( ( temp 3-component vector of int) +0:74 textureFetchOffset ( temp 4-component vector of uint) +0:74 'g_tTex3du4' ( uniform utexture3D) +0:74 vector swizzle ( temp 3-component vector of int) +0:74 c4: direct index for structure ( uniform 4-component vector of int) +0:74 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:74 Constant: +0:74 3 (const uint) +0:74 Sequence +0:74 Constant: +0:74 0 (const int) +0:74 Constant: +0:74 1 (const int) +0:74 Constant: +0:74 2 (const int) +0:74 direct index ( temp int) +0:74 c4: direct index for structure ( uniform 4-component vector of int) +0:74 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:74 Constant: +0:74 3 (const uint) +0:74 Constant: +0:74 3 (const int) +0:74 Function Call: getOffset3( ( temp 3-component vector of int) +0:82 move second child to first child ( temp 4-component vector of float) +0:82 Color: direct index for structure ( temp 4-component vector of float) +0:82 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:82 Constant: +0:82 0 (const int) +0:82 Constant: +0:82 1.000000 +0:82 1.000000 +0:82 1.000000 +0:82 1.000000 +0:83 move second child to first child ( temp float) +0:83 Depth: direct index for structure ( temp float) +0:83 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:83 Constant: +0:83 1 (const int) +0:83 Constant: +0:83 1.000000 +0:85 Branch: Return with expression +0:85 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Function Definition: main( ( temp void) +0:58 Function Parameters: 0:? Sequence -0:48 Sequence -0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 move second child to first child ( temp 4-component vector of float) +0:58 Sequence +0:58 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -0:48 Color: direct index for structure ( temp 4-component vector of float) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Constant: -0:48 0 (const int) -0:48 move second child to first child ( temp float) +0:58 Color: direct index for structure ( temp 4-component vector of float) +0:58 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 0 (const int) +0:58 move second child to first child ( temp float) 0:? '@entryPointOutput.Depth' ( out float FragDepth) -0:48 Depth: direct index for structure ( temp float) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Constant: -0:48 1 (const int) +0:58 Depth: direct index for structure ( temp float) +0:58 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 1 (const int) 0:? Linker Objects 0:? 'g_sSamp' (layout( binding=0) uniform sampler) 0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D) @@ -274,7 +268,7 @@ using depth_any 0:? 'g_tTexcdf4a' ( uniform textureCubeArray) 0:? 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:? 'g_tTexcdu4a' ( uniform utextureCubeArray) -0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) @@ -286,254 +280,248 @@ Shader version: 500 gl_FragCoord origin is upper left using depth_any 0:? Sequence -0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:43 Function Definition: getOffset1( ( temp int) +0:43 Function Parameters: +0:? Sequence +0:44 Branch: Return with expression +0:44 Constant: +0:44 1 (const int) +0:48 Function Definition: getOffset2( ( temp 2-component vector of int) 0:48 Function Parameters: 0:? Sequence -0:52 textureFetchOffset ( temp 4-component vector of float) -0:52 'g_tTex1df4' (layout( binding=0) uniform texture1D) -0:52 vector swizzle ( temp int) -0:52 c2: direct index for structure ( uniform 2-component vector of int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 1 (const uint) -0:52 Sequence -0:52 Constant: -0:52 0 (const int) -0:52 direct index ( temp int) -0:52 c2: direct index for structure ( uniform 2-component vector of int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 1 (const uint) -0:52 Constant: -0:52 1 (const int) -0:52 o1: direct index for structure ( uniform int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 4 (const uint) -0:53 textureFetchOffset ( temp 4-component vector of int) -0:53 'g_tTex1di4' ( uniform itexture1D) -0:53 vector swizzle ( temp int) -0:53 c2: direct index for structure ( uniform 2-component vector of int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 1 (const uint) -0:53 Sequence -0:53 Constant: -0:53 0 (const int) -0:53 direct index ( temp int) -0:53 c2: direct index for structure ( uniform 2-component vector of int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 1 (const uint) -0:53 Constant: -0:53 1 (const int) -0:53 o1: direct index for structure ( uniform int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 4 (const uint) -0:54 textureFetchOffset ( temp 4-component vector of uint) -0:54 'g_tTex1du4' ( uniform utexture1D) -0:54 vector swizzle ( temp int) -0:54 c2: direct index for structure ( uniform 2-component vector of int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 1 (const uint) -0:54 Sequence -0:54 Constant: -0:54 0 (const int) -0:54 direct index ( temp int) -0:54 c2: direct index for structure ( uniform 2-component vector of int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 1 (const uint) -0:54 Constant: -0:54 1 (const int) -0:54 o1: direct index for structure ( uniform int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 4 (const uint) -0:57 textureFetchOffset ( temp 4-component vector of float) -0:57 'g_tTex2df4' ( uniform texture2D) -0:57 vector swizzle ( temp 2-component vector of int) -0:57 c3: direct index for structure ( uniform 3-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:57 Constant: -0:57 2 (const uint) -0:57 Sequence -0:57 Constant: -0:57 0 (const int) -0:57 Constant: -0:57 1 (const int) -0:57 direct index ( temp int) -0:57 c3: direct index for structure ( uniform 3-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:57 Constant: -0:57 2 (const uint) -0:57 Constant: -0:57 2 (const int) -0:57 o2: direct index for structure ( uniform 2-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:57 Constant: -0:57 5 (const uint) -0:58 textureFetchOffset ( temp 4-component vector of int) -0:58 'g_tTex2di4' ( uniform itexture2D) -0:58 vector swizzle ( temp 2-component vector of int) -0:58 c3: direct index for structure ( uniform 3-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:58 Constant: -0:58 2 (const uint) -0:58 Sequence -0:58 Constant: -0:58 0 (const int) -0:58 Constant: -0:58 1 (const int) -0:58 direct index ( temp int) -0:58 c3: direct index for structure ( uniform 3-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:58 Constant: -0:58 2 (const uint) -0:58 Constant: -0:58 2 (const int) -0:58 o2: direct index for structure ( uniform 2-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:58 Constant: -0:58 5 (const uint) -0:59 textureFetchOffset ( temp 4-component vector of uint) -0:59 'g_tTex2du4' ( uniform utexture2D) -0:59 vector swizzle ( temp 2-component vector of int) -0:59 c3: direct index for structure ( uniform 3-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:59 Constant: -0:59 2 (const uint) -0:59 Sequence -0:59 Constant: -0:59 0 (const int) -0:59 Constant: -0:59 1 (const int) -0:59 direct index ( temp int) -0:59 c3: direct index for structure ( uniform 3-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:59 Constant: -0:59 2 (const uint) -0:59 Constant: -0:59 2 (const int) -0:59 o2: direct index for structure ( uniform 2-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:59 Constant: -0:59 5 (const uint) +0:49 Branch: Return with expression +0:49 Constant: +0:49 1 (const int) +0:49 1 (const int) +0:53 Function Definition: getOffset3( ( temp 3-component vector of int) +0:53 Function Parameters: +0:? Sequence +0:54 Branch: Return with expression +0:54 Constant: +0:54 1 (const int) +0:54 1 (const int) +0:54 1 (const int) +0:58 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Function Parameters: +0:? Sequence 0:62 textureFetchOffset ( temp 4-component vector of float) -0:62 'g_tTex3df4' ( uniform texture3D) -0:62 vector swizzle ( temp 3-component vector of int) -0:62 c4: direct index for structure ( uniform 4-component vector of int) -0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:62 'g_tTex1df4' (layout( binding=0) uniform texture1D) +0:62 vector swizzle ( temp int) +0:62 c2: direct index for structure ( uniform 2-component vector of int) +0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:62 Constant: -0:62 3 (const uint) +0:62 1 (const uint) 0:62 Sequence 0:62 Constant: 0:62 0 (const int) -0:62 Constant: -0:62 1 (const int) -0:62 Constant: -0:62 2 (const int) 0:62 direct index ( temp int) -0:62 c4: direct index for structure ( uniform 4-component vector of int) -0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:62 c2: direct index for structure ( uniform 2-component vector of int) +0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:62 Constant: -0:62 3 (const uint) +0:62 1 (const uint) 0:62 Constant: -0:62 3 (const int) -0:62 o3: direct index for structure ( uniform 3-component vector of int) -0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:62 Constant: -0:62 6 (const uint) +0:62 1 (const int) +0:62 Function Call: getOffset1( ( temp int) 0:63 textureFetchOffset ( temp 4-component vector of int) -0:63 'g_tTex3di4' ( uniform itexture3D) -0:63 vector swizzle ( temp 3-component vector of int) -0:63 c4: direct index for structure ( uniform 4-component vector of int) -0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:63 'g_tTex1di4' ( uniform itexture1D) +0:63 vector swizzle ( temp int) +0:63 c2: direct index for structure ( uniform 2-component vector of int) +0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:63 Constant: -0:63 3 (const uint) +0:63 1 (const uint) 0:63 Sequence 0:63 Constant: 0:63 0 (const int) -0:63 Constant: -0:63 1 (const int) -0:63 Constant: -0:63 2 (const int) 0:63 direct index ( temp int) -0:63 c4: direct index for structure ( uniform 4-component vector of int) -0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:63 c2: direct index for structure ( uniform 2-component vector of int) +0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:63 Constant: -0:63 3 (const uint) +0:63 1 (const uint) 0:63 Constant: -0:63 3 (const int) -0:63 o3: direct index for structure ( uniform 3-component vector of int) -0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:63 Constant: -0:63 6 (const uint) +0:63 1 (const int) +0:63 Function Call: getOffset1( ( temp int) 0:64 textureFetchOffset ( temp 4-component vector of uint) -0:64 'g_tTex3du4' ( uniform utexture3D) -0:64 vector swizzle ( temp 3-component vector of int) -0:64 c4: direct index for structure ( uniform 4-component vector of int) -0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:64 'g_tTex1du4' ( uniform utexture1D) +0:64 vector swizzle ( temp int) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:64 Constant: -0:64 3 (const uint) +0:64 1 (const uint) 0:64 Sequence 0:64 Constant: 0:64 0 (const int) -0:64 Constant: -0:64 1 (const int) -0:64 Constant: -0:64 2 (const int) 0:64 direct index ( temp int) -0:64 c4: direct index for structure ( uniform 4-component vector of int) -0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:64 c2: direct index for structure ( uniform 2-component vector of int) +0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:64 Constant: -0:64 3 (const uint) +0:64 1 (const uint) 0:64 Constant: -0:64 3 (const int) -0:64 o3: direct index for structure ( uniform 3-component vector of int) -0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:64 Constant: -0:64 6 (const uint) -0:72 move second child to first child ( temp 4-component vector of float) -0:72 Color: direct index for structure ( temp 4-component vector of float) -0:72 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:64 1 (const int) +0:64 Function Call: getOffset1( ( temp int) +0:67 textureFetchOffset ( temp 4-component vector of float) +0:67 'g_tTex2df4' ( uniform texture2D) +0:67 vector swizzle ( temp 2-component vector of int) +0:67 c3: direct index for structure ( uniform 3-component vector of int) +0:67 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:67 Constant: +0:67 2 (const uint) +0:67 Sequence +0:67 Constant: +0:67 0 (const int) +0:67 Constant: +0:67 1 (const int) +0:67 direct index ( temp int) +0:67 c3: direct index for structure ( uniform 3-component vector of int) +0:67 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:67 Constant: +0:67 2 (const uint) +0:67 Constant: +0:67 2 (const int) +0:67 Function Call: getOffset2( ( temp 2-component vector of int) +0:68 textureFetchOffset ( temp 4-component vector of int) +0:68 'g_tTex2di4' ( uniform itexture2D) +0:68 vector swizzle ( temp 2-component vector of int) +0:68 c3: direct index for structure ( uniform 3-component vector of int) +0:68 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:68 Constant: +0:68 2 (const uint) +0:68 Sequence +0:68 Constant: +0:68 0 (const int) +0:68 Constant: +0:68 1 (const int) +0:68 direct index ( temp int) +0:68 c3: direct index for structure ( uniform 3-component vector of int) +0:68 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:68 Constant: +0:68 2 (const uint) +0:68 Constant: +0:68 2 (const int) +0:68 Function Call: getOffset2( ( temp 2-component vector of int) +0:69 textureFetchOffset ( temp 4-component vector of uint) +0:69 'g_tTex2du4' ( uniform utexture2D) +0:69 vector swizzle ( temp 2-component vector of int) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:69 Constant: +0:69 2 (const uint) +0:69 Sequence +0:69 Constant: +0:69 0 (const int) +0:69 Constant: +0:69 1 (const int) +0:69 direct index ( temp int) +0:69 c3: direct index for structure ( uniform 3-component vector of int) +0:69 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:69 Constant: +0:69 2 (const uint) +0:69 Constant: +0:69 2 (const int) +0:69 Function Call: getOffset2( ( temp 2-component vector of int) +0:72 textureFetchOffset ( temp 4-component vector of float) +0:72 'g_tTex3df4' ( uniform texture3D) +0:72 vector swizzle ( temp 3-component vector of int) +0:72 c4: direct index for structure ( uniform 4-component vector of int) +0:72 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:72 Constant: +0:72 3 (const uint) +0:72 Sequence +0:72 Constant: +0:72 0 (const int) +0:72 Constant: +0:72 1 (const int) +0:72 Constant: +0:72 2 (const int) +0:72 direct index ( temp int) +0:72 c4: direct index for structure ( uniform 4-component vector of int) +0:72 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:72 Constant: +0:72 3 (const uint) 0:72 Constant: -0:72 0 (const int) -0:72 Constant: -0:72 1.000000 -0:72 1.000000 -0:72 1.000000 -0:72 1.000000 -0:73 move second child to first child ( temp float) -0:73 Depth: direct index for structure ( temp float) -0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:72 3 (const int) +0:72 Function Call: getOffset3( ( temp 3-component vector of int) +0:73 textureFetchOffset ( temp 4-component vector of int) +0:73 'g_tTex3di4' ( uniform itexture3D) +0:73 vector swizzle ( temp 3-component vector of int) +0:73 c4: direct index for structure ( uniform 4-component vector of int) +0:73 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:73 Constant: +0:73 3 (const uint) +0:73 Sequence +0:73 Constant: +0:73 0 (const int) +0:73 Constant: +0:73 1 (const int) +0:73 Constant: +0:73 2 (const int) +0:73 direct index ( temp int) +0:73 c4: direct index for structure ( uniform 4-component vector of int) +0:73 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:73 Constant: +0:73 3 (const uint) 0:73 Constant: -0:73 1 (const int) -0:73 Constant: -0:73 1.000000 -0:75 Branch: Return with expression -0:75 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Function Definition: main( ( temp void) -0:48 Function Parameters: +0:73 3 (const int) +0:73 Function Call: getOffset3( ( temp 3-component vector of int) +0:74 textureFetchOffset ( temp 4-component vector of uint) +0:74 'g_tTex3du4' ( uniform utexture3D) +0:74 vector swizzle ( temp 3-component vector of int) +0:74 c4: direct index for structure ( uniform 4-component vector of int) +0:74 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:74 Constant: +0:74 3 (const uint) +0:74 Sequence +0:74 Constant: +0:74 0 (const int) +0:74 Constant: +0:74 1 (const int) +0:74 Constant: +0:74 2 (const int) +0:74 direct index ( temp int) +0:74 c4: direct index for structure ( uniform 4-component vector of int) +0:74 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:74 Constant: +0:74 3 (const uint) +0:74 Constant: +0:74 3 (const int) +0:74 Function Call: getOffset3( ( temp 3-component vector of int) +0:82 move second child to first child ( temp 4-component vector of float) +0:82 Color: direct index for structure ( temp 4-component vector of float) +0:82 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:82 Constant: +0:82 0 (const int) +0:82 Constant: +0:82 1.000000 +0:82 1.000000 +0:82 1.000000 +0:82 1.000000 +0:83 move second child to first child ( temp float) +0:83 Depth: direct index for structure ( temp float) +0:83 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:83 Constant: +0:83 1 (const int) +0:83 Constant: +0:83 1.000000 +0:85 Branch: Return with expression +0:85 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Function Definition: main( ( temp void) +0:58 Function Parameters: 0:? Sequence -0:48 Sequence -0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 move second child to first child ( temp 4-component vector of float) +0:58 Sequence +0:58 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -0:48 Color: direct index for structure ( temp 4-component vector of float) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Constant: -0:48 0 (const int) -0:48 move second child to first child ( temp float) +0:58 Color: direct index for structure ( temp 4-component vector of float) +0:58 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 0 (const int) +0:58 move second child to first child ( temp float) 0:? '@entryPointOutput.Depth' ( out float FragDepth) -0:48 Depth: direct index for structure ( temp float) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Constant: -0:48 1 (const int) +0:58 Depth: direct index for structure ( temp float) +0:58 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:58 Constant: +0:58 1 (const int) 0:? Linker Objects 0:? 'g_sSamp' (layout( binding=0) uniform sampler) 0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D) @@ -557,14 +545,13 @@ using depth_any 0:? 'g_tTexcdf4a' ( uniform textureCubeArray) 0:? 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:? 'g_tTexcdu4a' ( uniform utextureCubeArray) -0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 201 +// Id's are bound by 205 Capability Shader Capability ImageGatherExtended @@ -572,311 +559,310 @@ Validation failed Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 155 159 + EntryPoint Fragment 4 "main" 159 163 ExecutionMode 4 OriginUpperLeft ExecutionMode 4 DepthReplacing Source HLSL 500 Name 4 "main" - Name 8 "PS_OUTPUT" - MemberName 8(PS_OUTPUT) 0 "Color" - MemberName 8(PS_OUTPUT) 1 "Depth" - Name 10 "@main(" - Name 14 "g_tTex1df4" - Name 20 "$Global" - MemberName 20($Global) 0 "c1" - MemberName 20($Global) 1 "c2" - MemberName 20($Global) 2 "c3" - MemberName 20($Global) 3 "c4" - MemberName 20($Global) 4 "o1" - MemberName 20($Global) 5 "o2" - MemberName 20($Global) 6 "o3" - MemberName 20($Global) 7 "o4" - Name 22 "" - Name 38 "g_tTex1di4" - Name 49 "g_tTex1du4" - Name 61 "g_tTex2df4" - Name 78 "g_tTex2di4" - Name 90 "g_tTex2du4" - Name 102 "g_tTex3df4" - Name 118 "g_tTex3di4" - Name 130 "g_tTex3du4" - Name 141 "psout" - Name 152 "flattenTemp" - Name 155 "@entryPointOutput.Color" - Name 159 "@entryPointOutput.Depth" - Name 164 "g_sSamp" - Name 167 "g_tTexcdf4" - Name 170 "g_tTexcdi4" - Name 173 "g_tTexcdu4" - Name 176 "g_tTex1df4a" - Name 179 "g_tTex1di4a" - Name 182 "g_tTex1du4a" - Name 185 "g_tTex2df4a" - Name 188 "g_tTex2di4a" - Name 191 "g_tTex2du4a" - Name 194 "g_tTexcdf4a" - Name 197 "g_tTexcdi4a" - Name 200 "g_tTexcdu4a" - Decorate 14(g_tTex1df4) DescriptorSet 0 - Decorate 14(g_tTex1df4) Binding 0 - MemberDecorate 20($Global) 0 Offset 0 - MemberDecorate 20($Global) 1 Offset 8 - MemberDecorate 20($Global) 2 Offset 16 - MemberDecorate 20($Global) 3 Offset 32 - MemberDecorate 20($Global) 4 Offset 48 - MemberDecorate 20($Global) 5 Offset 56 - MemberDecorate 20($Global) 6 Offset 64 - MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 - Decorate 22 Binding 9 - Decorate 38(g_tTex1di4) DescriptorSet 0 - Decorate 38(g_tTex1di4) Binding 1 - Decorate 49(g_tTex1du4) DescriptorSet 0 - Decorate 49(g_tTex1du4) Binding 2 - Decorate 61(g_tTex2df4) DescriptorSet 0 - Decorate 61(g_tTex2df4) Binding 3 - Decorate 78(g_tTex2di4) DescriptorSet 0 - Decorate 78(g_tTex2di4) Binding 4 - Decorate 90(g_tTex2du4) DescriptorSet 0 - Decorate 90(g_tTex2du4) Binding 5 - Decorate 102(g_tTex3df4) DescriptorSet 0 - Decorate 102(g_tTex3df4) Binding 6 - Decorate 118(g_tTex3di4) DescriptorSet 0 - Decorate 118(g_tTex3di4) Binding 7 - Decorate 130(g_tTex3du4) DescriptorSet 0 - Decorate 130(g_tTex3du4) Binding 8 - Decorate 155(@entryPointOutput.Color) Location 0 - Decorate 159(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 164(g_sSamp) DescriptorSet 0 - Decorate 164(g_sSamp) Binding 0 - Decorate 167(g_tTexcdf4) DescriptorSet 0 - Decorate 167(g_tTexcdf4) Binding 0 - Decorate 170(g_tTexcdi4) DescriptorSet 0 - Decorate 170(g_tTexcdi4) Binding 0 - Decorate 173(g_tTexcdu4) DescriptorSet 0 - Decorate 173(g_tTexcdu4) Binding 0 - Decorate 176(g_tTex1df4a) DescriptorSet 0 - Decorate 176(g_tTex1df4a) Binding 0 - Decorate 179(g_tTex1di4a) DescriptorSet 0 - Decorate 179(g_tTex1di4a) Binding 0 - Decorate 182(g_tTex1du4a) DescriptorSet 0 - Decorate 182(g_tTex1du4a) Binding 0 - Decorate 185(g_tTex2df4a) DescriptorSet 0 - Decorate 185(g_tTex2df4a) Binding 0 - Decorate 188(g_tTex2di4a) DescriptorSet 0 - Decorate 188(g_tTex2di4a) Binding 0 - Decorate 191(g_tTex2du4a) DescriptorSet 0 - Decorate 191(g_tTex2du4a) Binding 0 - Decorate 194(g_tTexcdf4a) DescriptorSet 0 - Decorate 194(g_tTexcdf4a) Binding 0 - Decorate 197(g_tTexcdi4a) DescriptorSet 0 - Decorate 197(g_tTexcdi4a) Binding 0 - Decorate 200(g_tTexcdu4a) DescriptorSet 0 - Decorate 200(g_tTexcdu4a) Binding 0 + Name 8 "getOffset1(" + Name 12 "getOffset2(" + Name 16 "getOffset3(" + Name 20 "PS_OUTPUT" + MemberName 20(PS_OUTPUT) 0 "Color" + MemberName 20(PS_OUTPUT) 1 "Depth" + Name 22 "@main(" + Name 35 "g_tTex1df4" + Name 38 "$Global" + MemberName 38($Global) 0 "c1" + MemberName 38($Global) 1 "c2" + MemberName 38($Global) 2 "c3" + MemberName 38($Global) 3 "c4" + Name 40 "" + Name 53 "g_tTex1di4" + Name 63 "g_tTex1du4" + Name 74 "g_tTex2df4" + Name 88 "g_tTex2di4" + Name 99 "g_tTex2du4" + Name 110 "g_tTex3df4" + Name 124 "g_tTex3di4" + Name 135 "g_tTex3du4" + Name 145 "psout" + Name 156 "flattenTemp" + Name 159 "@entryPointOutput.Color" + Name 163 "@entryPointOutput.Depth" + Name 168 "g_sSamp" + Name 171 "g_tTexcdf4" + Name 174 "g_tTexcdi4" + Name 177 "g_tTexcdu4" + Name 180 "g_tTex1df4a" + Name 183 "g_tTex1di4a" + Name 186 "g_tTex1du4a" + Name 189 "g_tTex2df4a" + Name 192 "g_tTex2di4a" + Name 195 "g_tTex2du4a" + Name 198 "g_tTexcdf4a" + Name 201 "g_tTexcdi4a" + Name 204 "g_tTexcdu4a" + Decorate 35(g_tTex1df4) DescriptorSet 0 + Decorate 35(g_tTex1df4) Binding 0 + MemberDecorate 38($Global) 0 Offset 0 + MemberDecorate 38($Global) 1 Offset 8 + MemberDecorate 38($Global) 2 Offset 16 + MemberDecorate 38($Global) 3 Offset 32 + Decorate 38($Global) Block + Decorate 40 DescriptorSet 0 + Decorate 40 Binding 9 + Decorate 53(g_tTex1di4) DescriptorSet 0 + Decorate 53(g_tTex1di4) Binding 1 + Decorate 63(g_tTex1du4) DescriptorSet 0 + Decorate 63(g_tTex1du4) Binding 2 + Decorate 74(g_tTex2df4) DescriptorSet 0 + Decorate 74(g_tTex2df4) Binding 3 + Decorate 88(g_tTex2di4) DescriptorSet 0 + Decorate 88(g_tTex2di4) Binding 4 + Decorate 99(g_tTex2du4) DescriptorSet 0 + Decorate 99(g_tTex2du4) Binding 5 + Decorate 110(g_tTex3df4) DescriptorSet 0 + Decorate 110(g_tTex3df4) Binding 6 + Decorate 124(g_tTex3di4) DescriptorSet 0 + Decorate 124(g_tTex3di4) Binding 7 + Decorate 135(g_tTex3du4) DescriptorSet 0 + Decorate 135(g_tTex3du4) Binding 8 + Decorate 159(@entryPointOutput.Color) Location 0 + Decorate 163(@entryPointOutput.Depth) BuiltIn FragDepth + Decorate 168(g_sSamp) DescriptorSet 0 + Decorate 168(g_sSamp) Binding 0 + Decorate 171(g_tTexcdf4) DescriptorSet 0 + Decorate 171(g_tTexcdf4) Binding 0 + Decorate 174(g_tTexcdi4) DescriptorSet 0 + Decorate 174(g_tTexcdi4) Binding 0 + Decorate 177(g_tTexcdu4) DescriptorSet 0 + Decorate 177(g_tTexcdu4) Binding 0 + Decorate 180(g_tTex1df4a) DescriptorSet 0 + Decorate 180(g_tTex1df4a) Binding 0 + Decorate 183(g_tTex1di4a) DescriptorSet 0 + Decorate 183(g_tTex1di4a) Binding 0 + Decorate 186(g_tTex1du4a) DescriptorSet 0 + Decorate 186(g_tTex1du4a) Binding 0 + Decorate 189(g_tTex2df4a) DescriptorSet 0 + Decorate 189(g_tTex2df4a) Binding 0 + Decorate 192(g_tTex2di4a) DescriptorSet 0 + Decorate 192(g_tTex2di4a) Binding 0 + Decorate 195(g_tTex2du4a) DescriptorSet 0 + Decorate 195(g_tTex2du4a) Binding 0 + Decorate 198(g_tTexcdf4a) DescriptorSet 0 + Decorate 198(g_tTexcdf4a) Binding 0 + Decorate 201(g_tTexcdi4a) DescriptorSet 0 + Decorate 201(g_tTexcdi4a) Binding 0 + Decorate 204(g_tTexcdu4a) DescriptorSet 0 + Decorate 204(g_tTexcdu4a) Binding 0 2: TypeVoid 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) - 9: TypeFunction 8(PS_OUTPUT) - 12: TypeImage 6(float) 1D sampled format:Unknown - 13: TypePointer UniformConstant 12 - 14(g_tTex1df4): 13(ptr) Variable UniformConstant - 16: TypeInt 32 1 - 17: TypeVector 16(int) 2 - 18: TypeVector 16(int) 3 - 19: TypeVector 16(int) 4 - 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) - 21: TypePointer Uniform 20($Global) - 22: 21(ptr) Variable Uniform - 23: 16(int) Constant 1 - 24: TypeInt 32 0 - 25: 24(int) Constant 0 - 26: TypePointer Uniform 16(int) - 29: 24(int) Constant 1 - 32: 16(int) Constant 4 - 36: TypeImage 16(int) 1D sampled format:Unknown - 37: TypePointer UniformConstant 36 - 38(g_tTex1di4): 37(ptr) Variable UniformConstant - 47: TypeImage 24(int) 1D sampled format:Unknown - 48: TypePointer UniformConstant 47 - 49(g_tTex1du4): 48(ptr) Variable UniformConstant - 57: TypeVector 24(int) 4 - 59: TypeImage 6(float) 2D sampled format:Unknown - 60: TypePointer UniformConstant 59 - 61(g_tTex2df4): 60(ptr) Variable UniformConstant - 63: 16(int) Constant 2 - 64: TypePointer Uniform 18(ivec3) - 68: 24(int) Constant 2 - 71: 16(int) Constant 5 - 72: TypePointer Uniform 17(ivec2) - 76: TypeImage 16(int) 2D sampled format:Unknown - 77: TypePointer UniformConstant 76 - 78(g_tTex2di4): 77(ptr) Variable UniformConstant - 88: TypeImage 24(int) 2D sampled format:Unknown - 89: TypePointer UniformConstant 88 - 90(g_tTex2du4): 89(ptr) Variable UniformConstant - 100: TypeImage 6(float) 3D sampled format:Unknown - 101: TypePointer UniformConstant 100 - 102(g_tTex3df4): 101(ptr) Variable UniformConstant - 104: 16(int) Constant 3 - 105: TypePointer Uniform 19(ivec4) - 109: 24(int) Constant 3 - 112: 16(int) Constant 6 - 116: TypeImage 16(int) 3D sampled format:Unknown - 117: TypePointer UniformConstant 116 - 118(g_tTex3di4): 117(ptr) Variable UniformConstant - 128: TypeImage 24(int) 3D sampled format:Unknown - 129: TypePointer UniformConstant 128 - 130(g_tTex3du4): 129(ptr) Variable UniformConstant - 140: TypePointer Function 8(PS_OUTPUT) - 142: 16(int) Constant 0 - 143: 6(float) Constant 1065353216 - 144: 7(fvec4) ConstantComposite 143 143 143 143 - 145: TypePointer Function 7(fvec4) - 147: TypePointer Function 6(float) - 154: TypePointer Output 7(fvec4) -155(@entryPointOutput.Color): 154(ptr) Variable Output - 158: TypePointer Output 6(float) -159(@entryPointOutput.Depth): 158(ptr) Variable Output - 162: TypeSampler - 163: TypePointer UniformConstant 162 - 164(g_sSamp): 163(ptr) Variable UniformConstant - 165: TypeImage 6(float) Cube sampled format:Unknown - 166: TypePointer UniformConstant 165 - 167(g_tTexcdf4): 166(ptr) Variable UniformConstant - 168: TypeImage 16(int) Cube sampled format:Unknown - 169: TypePointer UniformConstant 168 - 170(g_tTexcdi4): 169(ptr) Variable UniformConstant - 171: TypeImage 24(int) Cube sampled format:Unknown - 172: TypePointer UniformConstant 171 - 173(g_tTexcdu4): 172(ptr) Variable UniformConstant - 174: TypeImage 6(float) 1D array sampled format:Unknown - 175: TypePointer UniformConstant 174 -176(g_tTex1df4a): 175(ptr) Variable UniformConstant - 177: TypeImage 16(int) 1D array sampled format:Unknown - 178: TypePointer UniformConstant 177 -179(g_tTex1di4a): 178(ptr) Variable UniformConstant - 180: TypeImage 24(int) 1D array sampled format:Unknown - 181: TypePointer UniformConstant 180 -182(g_tTex1du4a): 181(ptr) Variable UniformConstant - 183: TypeImage 6(float) 2D array sampled format:Unknown - 184: TypePointer UniformConstant 183 -185(g_tTex2df4a): 184(ptr) Variable UniformConstant - 186: TypeImage 16(int) 2D array sampled format:Unknown - 187: TypePointer UniformConstant 186 -188(g_tTex2di4a): 187(ptr) Variable UniformConstant - 189: TypeImage 24(int) 2D array sampled format:Unknown - 190: TypePointer UniformConstant 189 -191(g_tTex2du4a): 190(ptr) Variable UniformConstant - 192: TypeImage 6(float) Cube array sampled format:Unknown - 193: TypePointer UniformConstant 192 -194(g_tTexcdf4a): 193(ptr) Variable UniformConstant - 195: TypeImage 16(int) Cube array sampled format:Unknown - 196: TypePointer UniformConstant 195 -197(g_tTexcdi4a): 196(ptr) Variable UniformConstant - 198: TypeImage 24(int) Cube array sampled format:Unknown - 199: TypePointer UniformConstant 198 -200(g_tTexcdu4a): 199(ptr) Variable UniformConstant + 6: TypeInt 32 1 + 7: TypeFunction 6(int) + 10: TypeVector 6(int) 2 + 11: TypeFunction 10(ivec2) + 14: TypeVector 6(int) 3 + 15: TypeFunction 14(ivec3) + 18: TypeFloat 32 + 19: TypeVector 18(float) 4 + 20(PS_OUTPUT): TypeStruct 19(fvec4) 18(float) + 21: TypeFunction 20(PS_OUTPUT) + 24: 6(int) Constant 1 + 27: 10(ivec2) ConstantComposite 24 24 + 30: 14(ivec3) ConstantComposite 24 24 24 + 33: TypeImage 18(float) 1D sampled format:Unknown + 34: TypePointer UniformConstant 33 + 35(g_tTex1df4): 34(ptr) Variable UniformConstant + 37: TypeVector 6(int) 4 + 38($Global): TypeStruct 6(int) 10(ivec2) 14(ivec3) 37(ivec4) + 39: TypePointer Uniform 38($Global) + 40: 39(ptr) Variable Uniform + 41: TypeInt 32 0 + 42: 41(int) Constant 0 + 43: TypePointer Uniform 6(int) + 46: 41(int) Constant 1 + 51: TypeImage 6(int) 1D sampled format:Unknown + 52: TypePointer UniformConstant 51 + 53(g_tTex1di4): 52(ptr) Variable UniformConstant + 61: TypeImage 41(int) 1D sampled format:Unknown + 62: TypePointer UniformConstant 61 + 63(g_tTex1du4): 62(ptr) Variable UniformConstant + 70: TypeVector 41(int) 4 + 72: TypeImage 18(float) 2D sampled format:Unknown + 73: TypePointer UniformConstant 72 + 74(g_tTex2df4): 73(ptr) Variable UniformConstant + 76: 6(int) Constant 2 + 77: TypePointer Uniform 14(ivec3) + 81: 41(int) Constant 2 + 86: TypeImage 6(int) 2D sampled format:Unknown + 87: TypePointer UniformConstant 86 + 88(g_tTex2di4): 87(ptr) Variable UniformConstant + 97: TypeImage 41(int) 2D sampled format:Unknown + 98: TypePointer UniformConstant 97 + 99(g_tTex2du4): 98(ptr) Variable UniformConstant + 108: TypeImage 18(float) 3D sampled format:Unknown + 109: TypePointer UniformConstant 108 + 110(g_tTex3df4): 109(ptr) Variable UniformConstant + 112: 6(int) Constant 3 + 113: TypePointer Uniform 37(ivec4) + 117: 41(int) Constant 3 + 122: TypeImage 6(int) 3D sampled format:Unknown + 123: TypePointer UniformConstant 122 + 124(g_tTex3di4): 123(ptr) Variable UniformConstant + 133: TypeImage 41(int) 3D sampled format:Unknown + 134: TypePointer UniformConstant 133 + 135(g_tTex3du4): 134(ptr) Variable UniformConstant + 144: TypePointer Function 20(PS_OUTPUT) + 146: 6(int) Constant 0 + 147: 18(float) Constant 1065353216 + 148: 19(fvec4) ConstantComposite 147 147 147 147 + 149: TypePointer Function 19(fvec4) + 151: TypePointer Function 18(float) + 158: TypePointer Output 19(fvec4) +159(@entryPointOutput.Color): 158(ptr) Variable Output + 162: TypePointer Output 18(float) +163(@entryPointOutput.Depth): 162(ptr) Variable Output + 166: TypeSampler + 167: TypePointer UniformConstant 166 + 168(g_sSamp): 167(ptr) Variable UniformConstant + 169: TypeImage 18(float) Cube sampled format:Unknown + 170: TypePointer UniformConstant 169 + 171(g_tTexcdf4): 170(ptr) Variable UniformConstant + 172: TypeImage 6(int) Cube sampled format:Unknown + 173: TypePointer UniformConstant 172 + 174(g_tTexcdi4): 173(ptr) Variable UniformConstant + 175: TypeImage 41(int) Cube sampled format:Unknown + 176: TypePointer UniformConstant 175 + 177(g_tTexcdu4): 176(ptr) Variable UniformConstant + 178: TypeImage 18(float) 1D array sampled format:Unknown + 179: TypePointer UniformConstant 178 +180(g_tTex1df4a): 179(ptr) Variable UniformConstant + 181: TypeImage 6(int) 1D array sampled format:Unknown + 182: TypePointer UniformConstant 181 +183(g_tTex1di4a): 182(ptr) Variable UniformConstant + 184: TypeImage 41(int) 1D array sampled format:Unknown + 185: TypePointer UniformConstant 184 +186(g_tTex1du4a): 185(ptr) Variable UniformConstant + 187: TypeImage 18(float) 2D array sampled format:Unknown + 188: TypePointer UniformConstant 187 +189(g_tTex2df4a): 188(ptr) Variable UniformConstant + 190: TypeImage 6(int) 2D array sampled format:Unknown + 191: TypePointer UniformConstant 190 +192(g_tTex2di4a): 191(ptr) Variable UniformConstant + 193: TypeImage 41(int) 2D array sampled format:Unknown + 194: TypePointer UniformConstant 193 +195(g_tTex2du4a): 194(ptr) Variable UniformConstant + 196: TypeImage 18(float) Cube array sampled format:Unknown + 197: TypePointer UniformConstant 196 +198(g_tTexcdf4a): 197(ptr) Variable UniformConstant + 199: TypeImage 6(int) Cube array sampled format:Unknown + 200: TypePointer UniformConstant 199 +201(g_tTexcdi4a): 200(ptr) Variable UniformConstant + 202: TypeImage 41(int) Cube array sampled format:Unknown + 203: TypePointer UniformConstant 202 +204(g_tTexcdu4a): 203(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label -152(flattenTemp): 140(ptr) Variable Function - 153:8(PS_OUTPUT) FunctionCall 10(@main() - Store 152(flattenTemp) 153 - 156: 145(ptr) AccessChain 152(flattenTemp) 142 - 157: 7(fvec4) Load 156 - Store 155(@entryPointOutput.Color) 157 - 160: 147(ptr) AccessChain 152(flattenTemp) 23 - 161: 6(float) Load 160 - Store 159(@entryPointOutput.Depth) 161 +156(flattenTemp): 144(ptr) Variable Function + 157:20(PS_OUTPUT) FunctionCall 22(@main() + Store 156(flattenTemp) 157 + 160: 149(ptr) AccessChain 156(flattenTemp) 146 + 161: 19(fvec4) Load 160 + Store 159(@entryPointOutput.Color) 161 + 164: 151(ptr) AccessChain 156(flattenTemp) 24 + 165: 18(float) Load 164 + Store 163(@entryPointOutput.Depth) 165 Return FunctionEnd - 10(@main():8(PS_OUTPUT) Function None 9 - 11: Label - 141(psout): 140(ptr) Variable Function - 15: 12 Load 14(g_tTex1df4) - 27: 26(ptr) AccessChain 22 23 25 - 28: 16(int) Load 27 - 30: 26(ptr) AccessChain 22 23 29 - 31: 16(int) Load 30 - 33: 26(ptr) AccessChain 22 32 - 34: 16(int) Load 33 - 35: 7(fvec4) ImageFetch 15 28 Lod Offset 31 34 - 39: 36 Load 38(g_tTex1di4) - 40: 26(ptr) AccessChain 22 23 25 - 41: 16(int) Load 40 - 42: 26(ptr) AccessChain 22 23 29 - 43: 16(int) Load 42 - 44: 26(ptr) AccessChain 22 32 - 45: 16(int) Load 44 - 46: 19(ivec4) ImageFetch 39 41 Lod Offset 43 45 - 50: 47 Load 49(g_tTex1du4) - 51: 26(ptr) AccessChain 22 23 25 - 52: 16(int) Load 51 - 53: 26(ptr) AccessChain 22 23 29 - 54: 16(int) Load 53 - 55: 26(ptr) AccessChain 22 32 - 56: 16(int) Load 55 - 58: 57(ivec4) ImageFetch 50 52 Lod Offset 54 56 - 62: 59 Load 61(g_tTex2df4) - 65: 64(ptr) AccessChain 22 63 - 66: 18(ivec3) Load 65 - 67: 17(ivec2) VectorShuffle 66 66 0 1 - 69: 26(ptr) AccessChain 22 63 68 - 70: 16(int) Load 69 - 73: 72(ptr) AccessChain 22 71 - 74: 17(ivec2) Load 73 - 75: 7(fvec4) ImageFetch 62 67 Lod Offset 70 74 - 79: 76 Load 78(g_tTex2di4) - 80: 64(ptr) AccessChain 22 63 - 81: 18(ivec3) Load 80 - 82: 17(ivec2) VectorShuffle 81 81 0 1 - 83: 26(ptr) AccessChain 22 63 68 - 84: 16(int) Load 83 - 85: 72(ptr) AccessChain 22 71 - 86: 17(ivec2) Load 85 - 87: 19(ivec4) ImageFetch 79 82 Lod Offset 84 86 - 91: 88 Load 90(g_tTex2du4) - 92: 64(ptr) AccessChain 22 63 - 93: 18(ivec3) Load 92 - 94: 17(ivec2) VectorShuffle 93 93 0 1 - 95: 26(ptr) AccessChain 22 63 68 - 96: 16(int) Load 95 - 97: 72(ptr) AccessChain 22 71 - 98: 17(ivec2) Load 97 - 99: 57(ivec4) ImageFetch 91 94 Lod Offset 96 98 - 103: 100 Load 102(g_tTex3df4) - 106: 105(ptr) AccessChain 22 104 - 107: 19(ivec4) Load 106 - 108: 18(ivec3) VectorShuffle 107 107 0 1 2 - 110: 26(ptr) AccessChain 22 104 109 - 111: 16(int) Load 110 - 113: 64(ptr) AccessChain 22 112 - 114: 18(ivec3) Load 113 - 115: 7(fvec4) ImageFetch 103 108 Lod Offset 111 114 - 119: 116 Load 118(g_tTex3di4) - 120: 105(ptr) AccessChain 22 104 - 121: 19(ivec4) Load 120 - 122: 18(ivec3) VectorShuffle 121 121 0 1 2 - 123: 26(ptr) AccessChain 22 104 109 - 124: 16(int) Load 123 - 125: 64(ptr) AccessChain 22 112 - 126: 18(ivec3) Load 125 - 127: 19(ivec4) ImageFetch 119 122 Lod Offset 124 126 - 131: 128 Load 130(g_tTex3du4) - 132: 105(ptr) AccessChain 22 104 - 133: 19(ivec4) Load 132 - 134: 18(ivec3) VectorShuffle 133 133 0 1 2 - 135: 26(ptr) AccessChain 22 104 109 - 136: 16(int) Load 135 - 137: 64(ptr) AccessChain 22 112 - 138: 18(ivec3) Load 137 - 139: 57(ivec4) ImageFetch 131 134 Lod Offset 136 138 - 146: 145(ptr) AccessChain 141(psout) 142 - Store 146 144 - 148: 147(ptr) AccessChain 141(psout) 23 - Store 148 143 - 149:8(PS_OUTPUT) Load 141(psout) - ReturnValue 149 + 8(getOffset1(): 6(int) Function None 7 + 9: Label + ReturnValue 24 + FunctionEnd + 12(getOffset2(): 10(ivec2) Function None 11 + 13: Label + ReturnValue 27 + FunctionEnd + 16(getOffset3(): 14(ivec3) Function None 15 + 17: Label + ReturnValue 30 + FunctionEnd + 22(@main():20(PS_OUTPUT) Function None 21 + 23: Label + 145(psout): 144(ptr) Variable Function + 36: 33 Load 35(g_tTex1df4) + 44: 43(ptr) AccessChain 40 24 42 + 45: 6(int) Load 44 + 47: 43(ptr) AccessChain 40 24 46 + 48: 6(int) Load 47 + 49: 6(int) FunctionCall 8(getOffset1() + 50: 19(fvec4) ImageFetch 36 45 Lod Offset 48 49 + 54: 51 Load 53(g_tTex1di4) + 55: 43(ptr) AccessChain 40 24 42 + 56: 6(int) Load 55 + 57: 43(ptr) AccessChain 40 24 46 + 58: 6(int) Load 57 + 59: 6(int) FunctionCall 8(getOffset1() + 60: 37(ivec4) ImageFetch 54 56 Lod Offset 58 59 + 64: 61 Load 63(g_tTex1du4) + 65: 43(ptr) AccessChain 40 24 42 + 66: 6(int) Load 65 + 67: 43(ptr) AccessChain 40 24 46 + 68: 6(int) Load 67 + 69: 6(int) FunctionCall 8(getOffset1() + 71: 70(ivec4) ImageFetch 64 66 Lod Offset 68 69 + 75: 72 Load 74(g_tTex2df4) + 78: 77(ptr) AccessChain 40 76 + 79: 14(ivec3) Load 78 + 80: 10(ivec2) VectorShuffle 79 79 0 1 + 82: 43(ptr) AccessChain 40 76 81 + 83: 6(int) Load 82 + 84: 10(ivec2) FunctionCall 12(getOffset2() + 85: 19(fvec4) ImageFetch 75 80 Lod Offset 83 84 + 89: 86 Load 88(g_tTex2di4) + 90: 77(ptr) AccessChain 40 76 + 91: 14(ivec3) Load 90 + 92: 10(ivec2) VectorShuffle 91 91 0 1 + 93: 43(ptr) AccessChain 40 76 81 + 94: 6(int) Load 93 + 95: 10(ivec2) FunctionCall 12(getOffset2() + 96: 37(ivec4) ImageFetch 89 92 Lod Offset 94 95 + 100: 97 Load 99(g_tTex2du4) + 101: 77(ptr) AccessChain 40 76 + 102: 14(ivec3) Load 101 + 103: 10(ivec2) VectorShuffle 102 102 0 1 + 104: 43(ptr) AccessChain 40 76 81 + 105: 6(int) Load 104 + 106: 10(ivec2) FunctionCall 12(getOffset2() + 107: 70(ivec4) ImageFetch 100 103 Lod Offset 105 106 + 111: 108 Load 110(g_tTex3df4) + 114: 113(ptr) AccessChain 40 112 + 115: 37(ivec4) Load 114 + 116: 14(ivec3) VectorShuffle 115 115 0 1 2 + 118: 43(ptr) AccessChain 40 112 117 + 119: 6(int) Load 118 + 120: 14(ivec3) FunctionCall 16(getOffset3() + 121: 19(fvec4) ImageFetch 111 116 Lod Offset 119 120 + 125: 122 Load 124(g_tTex3di4) + 126: 113(ptr) AccessChain 40 112 + 127: 37(ivec4) Load 126 + 128: 14(ivec3) VectorShuffle 127 127 0 1 2 + 129: 43(ptr) AccessChain 40 112 117 + 130: 6(int) Load 129 + 131: 14(ivec3) FunctionCall 16(getOffset3() + 132: 37(ivec4) ImageFetch 125 128 Lod Offset 130 131 + 136: 133 Load 135(g_tTex3du4) + 137: 113(ptr) AccessChain 40 112 + 138: 37(ivec4) Load 137 + 139: 14(ivec3) VectorShuffle 138 138 0 1 2 + 140: 43(ptr) AccessChain 40 112 117 + 141: 6(int) Load 140 + 142: 14(ivec3) FunctionCall 16(getOffset3() + 143: 70(ivec4) ImageFetch 136 139 Lod Offset 141 142 + 150: 149(ptr) AccessChain 145(psout) 146 + Store 150 148 + 152: 151(ptr) AccessChain 145(psout) 24 + Store 152 147 + 153:20(PS_OUTPUT) Load 145(psout) + ReturnValue 153 FunctionEnd diff --git a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out index 24aa368064..04ea482774 100644 --- a/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.load.offsetarray.dx10.frag.out @@ -3,191 +3,186 @@ Shader version: 500 gl_FragCoord origin is upper left using depth_any 0:? Sequence -0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:43 Function Definition: getOffset1( ( temp int) +0:43 Function Parameters: +0:? Sequence +0:44 Branch: Return with expression +0:44 Constant: +0:44 1 (const int) +0:48 Function Definition: getOffset2( ( temp 2-component vector of int) 0:48 Function Parameters: 0:? Sequence -0:52 textureFetchOffset ( temp 4-component vector of float) -0:52 'g_tTex1df4a' ( uniform texture1DArray) -0:52 vector swizzle ( temp 2-component vector of int) -0:52 c3: direct index for structure ( uniform 3-component vector of int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 2 (const uint) -0:52 Sequence -0:52 Constant: -0:52 0 (const int) -0:52 Constant: -0:52 1 (const int) -0:52 direct index ( temp int) -0:52 c3: direct index for structure ( uniform 3-component vector of int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 2 (const uint) -0:52 Constant: -0:52 2 (const int) -0:52 o1: direct index for structure ( uniform int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 4 (const uint) -0:53 textureFetchOffset ( temp 4-component vector of int) -0:53 'g_tTex1di4a' ( uniform itexture1DArray) -0:53 vector swizzle ( temp 2-component vector of int) -0:53 c3: direct index for structure ( uniform 3-component vector of int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 2 (const uint) -0:53 Sequence -0:53 Constant: -0:53 0 (const int) -0:53 Constant: -0:53 1 (const int) -0:53 direct index ( temp int) -0:53 c3: direct index for structure ( uniform 3-component vector of int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 2 (const uint) -0:53 Constant: -0:53 2 (const int) -0:53 o1: direct index for structure ( uniform int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 4 (const uint) -0:54 textureFetchOffset ( temp 4-component vector of uint) -0:54 'g_tTex1du4a' ( uniform utexture1DArray) -0:54 vector swizzle ( temp 2-component vector of int) -0:54 c3: direct index for structure ( uniform 3-component vector of int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 2 (const uint) -0:54 Sequence -0:54 Constant: -0:54 0 (const int) -0:54 Constant: -0:54 1 (const int) -0:54 direct index ( temp int) -0:54 c3: direct index for structure ( uniform 3-component vector of int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 2 (const uint) -0:54 Constant: -0:54 2 (const int) -0:54 o1: direct index for structure ( uniform int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 4 (const uint) +0:49 Branch: Return with expression +0:49 Constant: +0:49 1 (const int) +0:49 1 (const int) +0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Function Parameters: +0:? Sequence 0:57 textureFetchOffset ( temp 4-component vector of float) -0:57 'g_tTex2df4a' ( uniform texture2DArray) -0:57 vector swizzle ( temp 3-component vector of int) -0:57 c4: direct index for structure ( uniform 4-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:57 'g_tTex1df4a' ( uniform texture1DArray) +0:57 vector swizzle ( temp 2-component vector of int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:57 Constant: -0:57 3 (const uint) +0:57 2 (const uint) 0:57 Sequence 0:57 Constant: 0:57 0 (const int) 0:57 Constant: 0:57 1 (const int) -0:57 Constant: -0:57 2 (const int) 0:57 direct index ( temp int) -0:57 c4: direct index for structure ( uniform 4-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:57 Constant: -0:57 3 (const uint) -0:57 Constant: -0:57 3 (const int) -0:57 o2: direct index for structure ( uniform 2-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:57 2 (const uint) 0:57 Constant: -0:57 5 (const uint) +0:57 2 (const int) +0:57 Function Call: getOffset1( ( temp int) 0:58 textureFetchOffset ( temp 4-component vector of int) -0:58 'g_tTex2di4a' ( uniform itexture2DArray) -0:58 vector swizzle ( temp 3-component vector of int) -0:58 c4: direct index for structure ( uniform 4-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:58 'g_tTex1di4a' ( uniform itexture1DArray) +0:58 vector swizzle ( temp 2-component vector of int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:58 Constant: -0:58 3 (const uint) +0:58 2 (const uint) 0:58 Sequence 0:58 Constant: 0:58 0 (const int) 0:58 Constant: 0:58 1 (const int) -0:58 Constant: -0:58 2 (const int) 0:58 direct index ( temp int) -0:58 c4: direct index for structure ( uniform 4-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:58 Constant: -0:58 3 (const uint) -0:58 Constant: -0:58 3 (const int) -0:58 o2: direct index for structure ( uniform 2-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:58 2 (const uint) 0:58 Constant: -0:58 5 (const uint) +0:58 2 (const int) +0:58 Function Call: getOffset1( ( temp int) 0:59 textureFetchOffset ( temp 4-component vector of uint) -0:59 'g_tTex2du4a' ( uniform utexture2DArray) -0:59 vector swizzle ( temp 3-component vector of int) -0:59 c4: direct index for structure ( uniform 4-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:59 'g_tTex1du4a' ( uniform utexture1DArray) +0:59 vector swizzle ( temp 2-component vector of int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:59 Constant: -0:59 3 (const uint) +0:59 2 (const uint) 0:59 Sequence 0:59 Constant: 0:59 0 (const int) 0:59 Constant: 0:59 1 (const int) -0:59 Constant: -0:59 2 (const int) 0:59 direct index ( temp int) -0:59 c4: direct index for structure ( uniform 4-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:59 Constant: -0:59 3 (const uint) +0:59 2 (const uint) 0:59 Constant: -0:59 3 (const int) -0:59 o2: direct index for structure ( uniform 2-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:59 Constant: -0:59 5 (const uint) -0:65 move second child to first child ( temp 4-component vector of float) -0:65 Color: direct index for structure ( temp 4-component vector of float) -0:65 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:65 Constant: -0:65 0 (const int) -0:65 Constant: -0:65 1.000000 -0:65 1.000000 -0:65 1.000000 -0:65 1.000000 -0:66 move second child to first child ( temp float) -0:66 Depth: direct index for structure ( temp float) -0:66 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:66 Constant: -0:66 1 (const int) -0:66 Constant: -0:66 1.000000 -0:68 Branch: Return with expression -0:68 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Function Definition: main( ( temp void) -0:48 Function Parameters: +0:59 2 (const int) +0:59 Function Call: getOffset1( ( temp int) +0:62 textureFetchOffset ( temp 4-component vector of float) +0:62 'g_tTex2df4a' ( uniform texture2DArray) +0:62 vector swizzle ( temp 3-component vector of int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:62 Constant: +0:62 3 (const uint) +0:62 Sequence +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 direct index ( temp int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:62 Constant: +0:62 3 (const uint) +0:62 Constant: +0:62 3 (const int) +0:62 Function Call: getOffset2( ( temp 2-component vector of int) +0:63 textureFetchOffset ( temp 4-component vector of int) +0:63 'g_tTex2di4a' ( uniform itexture2DArray) +0:63 vector swizzle ( temp 3-component vector of int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:63 Constant: +0:63 3 (const uint) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 direct index ( temp int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:63 Function Call: getOffset2( ( temp 2-component vector of int) +0:64 textureFetchOffset ( temp 4-component vector of uint) +0:64 'g_tTex2du4a' ( uniform utexture2DArray) +0:64 vector swizzle ( temp 3-component vector of int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:64 Constant: +0:64 3 (const uint) +0:64 Sequence +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 2 (const int) +0:64 direct index ( temp int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:64 Constant: +0:64 3 (const uint) +0:64 Constant: +0:64 3 (const int) +0:64 Function Call: getOffset2( ( temp 2-component vector of int) +0:70 move second child to first child ( temp 4-component vector of float) +0:70 Color: direct index for structure ( temp 4-component vector of float) +0:70 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:71 move second child to first child ( temp float) +0:71 Depth: direct index for structure ( temp float) +0:71 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 1.000000 +0:73 Branch: Return with expression +0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: 0:? Sequence -0:48 Sequence -0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 move second child to first child ( temp 4-component vector of float) +0:53 Sequence +0:53 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -0:48 Color: direct index for structure ( temp 4-component vector of float) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Constant: -0:48 0 (const int) -0:48 move second child to first child ( temp float) +0:53 Color: direct index for structure ( temp 4-component vector of float) +0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Constant: +0:53 0 (const int) +0:53 move second child to first child ( temp float) 0:? '@entryPointOutput.Depth' ( out float FragDepth) -0:48 Depth: direct index for structure ( temp float) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Constant: -0:48 1 (const int) +0:53 Depth: direct index for structure ( temp float) +0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Constant: +0:53 1 (const int) 0:? Linker Objects 0:? 'g_sSamp' (layout( binding=0) uniform sampler) 0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D) @@ -211,7 +206,7 @@ using depth_any 0:? 'g_tTexcdf4a' ( uniform textureCubeArray) 0:? 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:? 'g_tTexcdu4a' ( uniform utextureCubeArray) -0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) @@ -223,191 +218,186 @@ Shader version: 500 gl_FragCoord origin is upper left using depth_any 0:? Sequence -0:48 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:43 Function Definition: getOffset1( ( temp int) +0:43 Function Parameters: +0:? Sequence +0:44 Branch: Return with expression +0:44 Constant: +0:44 1 (const int) +0:48 Function Definition: getOffset2( ( temp 2-component vector of int) 0:48 Function Parameters: 0:? Sequence -0:52 textureFetchOffset ( temp 4-component vector of float) -0:52 'g_tTex1df4a' ( uniform texture1DArray) -0:52 vector swizzle ( temp 2-component vector of int) -0:52 c3: direct index for structure ( uniform 3-component vector of int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 2 (const uint) -0:52 Sequence -0:52 Constant: -0:52 0 (const int) -0:52 Constant: -0:52 1 (const int) -0:52 direct index ( temp int) -0:52 c3: direct index for structure ( uniform 3-component vector of int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 2 (const uint) -0:52 Constant: -0:52 2 (const int) -0:52 o1: direct index for structure ( uniform int) -0:52 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:52 Constant: -0:52 4 (const uint) -0:53 textureFetchOffset ( temp 4-component vector of int) -0:53 'g_tTex1di4a' ( uniform itexture1DArray) -0:53 vector swizzle ( temp 2-component vector of int) -0:53 c3: direct index for structure ( uniform 3-component vector of int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 2 (const uint) -0:53 Sequence -0:53 Constant: -0:53 0 (const int) -0:53 Constant: -0:53 1 (const int) -0:53 direct index ( temp int) -0:53 c3: direct index for structure ( uniform 3-component vector of int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 2 (const uint) -0:53 Constant: -0:53 2 (const int) -0:53 o1: direct index for structure ( uniform int) -0:53 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:53 Constant: -0:53 4 (const uint) -0:54 textureFetchOffset ( temp 4-component vector of uint) -0:54 'g_tTex1du4a' ( uniform utexture1DArray) -0:54 vector swizzle ( temp 2-component vector of int) -0:54 c3: direct index for structure ( uniform 3-component vector of int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 2 (const uint) -0:54 Sequence -0:54 Constant: -0:54 0 (const int) -0:54 Constant: -0:54 1 (const int) -0:54 direct index ( temp int) -0:54 c3: direct index for structure ( uniform 3-component vector of int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 2 (const uint) -0:54 Constant: -0:54 2 (const int) -0:54 o1: direct index for structure ( uniform int) -0:54 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:54 Constant: -0:54 4 (const uint) +0:49 Branch: Return with expression +0:49 Constant: +0:49 1 (const int) +0:49 1 (const int) +0:53 Function Definition: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Function Parameters: +0:? Sequence 0:57 textureFetchOffset ( temp 4-component vector of float) -0:57 'g_tTex2df4a' ( uniform texture2DArray) -0:57 vector swizzle ( temp 3-component vector of int) -0:57 c4: direct index for structure ( uniform 4-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:57 'g_tTex1df4a' ( uniform texture1DArray) +0:57 vector swizzle ( temp 2-component vector of int) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:57 Constant: -0:57 3 (const uint) +0:57 2 (const uint) 0:57 Sequence 0:57 Constant: 0:57 0 (const int) 0:57 Constant: 0:57 1 (const int) -0:57 Constant: -0:57 2 (const int) 0:57 direct index ( temp int) -0:57 c4: direct index for structure ( uniform 4-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:57 c3: direct index for structure ( uniform 3-component vector of int) +0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:57 Constant: -0:57 3 (const uint) +0:57 2 (const uint) 0:57 Constant: -0:57 3 (const int) -0:57 o2: direct index for structure ( uniform 2-component vector of int) -0:57 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:57 Constant: -0:57 5 (const uint) +0:57 2 (const int) +0:57 Function Call: getOffset1( ( temp int) 0:58 textureFetchOffset ( temp 4-component vector of int) -0:58 'g_tTex2di4a' ( uniform itexture2DArray) -0:58 vector swizzle ( temp 3-component vector of int) -0:58 c4: direct index for structure ( uniform 4-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:58 'g_tTex1di4a' ( uniform itexture1DArray) +0:58 vector swizzle ( temp 2-component vector of int) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:58 Constant: -0:58 3 (const uint) +0:58 2 (const uint) 0:58 Sequence 0:58 Constant: 0:58 0 (const int) 0:58 Constant: 0:58 1 (const int) -0:58 Constant: -0:58 2 (const int) 0:58 direct index ( temp int) -0:58 c4: direct index for structure ( uniform 4-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:58 c3: direct index for structure ( uniform 3-component vector of int) +0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:58 Constant: -0:58 3 (const uint) +0:58 2 (const uint) 0:58 Constant: -0:58 3 (const int) -0:58 o2: direct index for structure ( uniform 2-component vector of int) -0:58 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) -0:58 Constant: -0:58 5 (const uint) +0:58 2 (const int) +0:58 Function Call: getOffset1( ( temp int) 0:59 textureFetchOffset ( temp 4-component vector of uint) -0:59 'g_tTex2du4a' ( uniform utexture2DArray) -0:59 vector swizzle ( temp 3-component vector of int) -0:59 c4: direct index for structure ( uniform 4-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:59 'g_tTex1du4a' ( uniform utexture1DArray) +0:59 vector swizzle ( temp 2-component vector of int) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:59 Constant: -0:59 3 (const uint) +0:59 2 (const uint) 0:59 Sequence 0:59 Constant: 0:59 0 (const int) 0:59 Constant: 0:59 1 (const int) -0:59 Constant: -0:59 2 (const int) 0:59 direct index ( temp int) -0:59 c4: direct index for structure ( uniform 4-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:59 c3: direct index for structure ( uniform 3-component vector of int) +0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:59 Constant: -0:59 3 (const uint) -0:59 Constant: -0:59 3 (const int) -0:59 o2: direct index for structure ( uniform 2-component vector of int) -0:59 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:59 2 (const uint) 0:59 Constant: -0:59 5 (const uint) -0:65 move second child to first child ( temp 4-component vector of float) -0:65 Color: direct index for structure ( temp 4-component vector of float) -0:65 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:65 Constant: -0:65 0 (const int) -0:65 Constant: -0:65 1.000000 -0:65 1.000000 -0:65 1.000000 -0:65 1.000000 -0:66 move second child to first child ( temp float) -0:66 Depth: direct index for structure ( temp float) -0:66 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:66 Constant: -0:66 1 (const int) -0:66 Constant: -0:66 1.000000 -0:68 Branch: Return with expression -0:68 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Function Definition: main( ( temp void) -0:48 Function Parameters: +0:59 2 (const int) +0:59 Function Call: getOffset1( ( temp int) +0:62 textureFetchOffset ( temp 4-component vector of float) +0:62 'g_tTex2df4a' ( uniform texture2DArray) +0:62 vector swizzle ( temp 3-component vector of int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:62 Constant: +0:62 3 (const uint) +0:62 Sequence +0:62 Constant: +0:62 0 (const int) +0:62 Constant: +0:62 1 (const int) +0:62 Constant: +0:62 2 (const int) +0:62 direct index ( temp int) +0:62 c4: direct index for structure ( uniform 4-component vector of int) +0:62 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:62 Constant: +0:62 3 (const uint) +0:62 Constant: +0:62 3 (const int) +0:62 Function Call: getOffset2( ( temp 2-component vector of int) +0:63 textureFetchOffset ( temp 4-component vector of int) +0:63 'g_tTex2di4a' ( uniform itexture2DArray) +0:63 vector swizzle ( temp 3-component vector of int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:63 Constant: +0:63 3 (const uint) +0:63 Sequence +0:63 Constant: +0:63 0 (const int) +0:63 Constant: +0:63 1 (const int) +0:63 Constant: +0:63 2 (const int) +0:63 direct index ( temp int) +0:63 c4: direct index for structure ( uniform 4-component vector of int) +0:63 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:63 Constant: +0:63 3 (const uint) +0:63 Constant: +0:63 3 (const int) +0:63 Function Call: getOffset2( ( temp 2-component vector of int) +0:64 textureFetchOffset ( temp 4-component vector of uint) +0:64 'g_tTex2du4a' ( uniform utexture2DArray) +0:64 vector swizzle ( temp 3-component vector of int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:64 Constant: +0:64 3 (const uint) +0:64 Sequence +0:64 Constant: +0:64 0 (const int) +0:64 Constant: +0:64 1 (const int) +0:64 Constant: +0:64 2 (const int) +0:64 direct index ( temp int) +0:64 c4: direct index for structure ( uniform 4-component vector of int) +0:64 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) +0:64 Constant: +0:64 3 (const uint) +0:64 Constant: +0:64 3 (const int) +0:64 Function Call: getOffset2( ( temp 2-component vector of int) +0:70 move second child to first child ( temp 4-component vector of float) +0:70 Color: direct index for structure ( temp 4-component vector of float) +0:70 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:70 Constant: +0:70 0 (const int) +0:70 Constant: +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:70 1.000000 +0:71 move second child to first child ( temp float) +0:71 Depth: direct index for structure ( temp float) +0:71 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:71 Constant: +0:71 1 (const int) +0:71 Constant: +0:71 1.000000 +0:73 Branch: Return with expression +0:73 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Function Definition: main( ( temp void) +0:53 Function Parameters: 0:? Sequence -0:48 Sequence -0:48 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 move second child to first child ( temp 4-component vector of float) +0:53 Sequence +0:53 move second child to first child ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Function Call: @main( ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 move second child to first child ( temp 4-component vector of float) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -0:48 Color: direct index for structure ( temp 4-component vector of float) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Constant: -0:48 0 (const int) -0:48 move second child to first child ( temp float) +0:53 Color: direct index for structure ( temp 4-component vector of float) +0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Constant: +0:53 0 (const int) +0:53 move second child to first child ( temp float) 0:? '@entryPointOutput.Depth' ( out float FragDepth) -0:48 Depth: direct index for structure ( temp float) -0:48 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) -0:48 Constant: -0:48 1 (const int) +0:53 Depth: direct index for structure ( temp float) +0:53 'flattenTemp' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) +0:53 Constant: +0:53 1 (const int) 0:? Linker Objects 0:? 'g_sSamp' (layout( binding=0) uniform sampler) 0:? 'g_tTex1df4' (layout( binding=0) uniform texture1D) @@ -431,14 +421,13 @@ using depth_any 0:? 'g_tTexcdf4a' ( uniform textureCubeArray) 0:? 'g_tTexcdi4a' ( uniform itextureCubeArray) 0:? 'g_tTexcdu4a' ( uniform utextureCubeArray) -0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4}) +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4}) 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 174 +// Id's are bound by 176 Capability Shader Capability ImageGatherExtended @@ -446,284 +435,280 @@ Validation failed Capability SampledCubeArray 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 119 123 + EntryPoint Fragment 4 "main" 121 125 ExecutionMode 4 OriginUpperLeft ExecutionMode 4 DepthReplacing Source HLSL 500 Name 4 "main" - Name 8 "PS_OUTPUT" - MemberName 8(PS_OUTPUT) 0 "Color" - MemberName 8(PS_OUTPUT) 1 "Depth" - Name 10 "@main(" - Name 14 "g_tTex1df4a" - Name 20 "$Global" - MemberName 20($Global) 0 "c1" - MemberName 20($Global) 1 "c2" - MemberName 20($Global) 2 "c3" - MemberName 20($Global) 3 "c4" - MemberName 20($Global) 4 "o1" - MemberName 20($Global) 5 "o2" - MemberName 20($Global) 6 "o3" - MemberName 20($Global) 7 "o4" - Name 22 "" - Name 39 "g_tTex1di4a" - Name 51 "g_tTex1du4a" - Name 64 "g_tTex2df4a" - Name 81 "g_tTex2di4a" - Name 93 "g_tTex2du4a" - Name 104 "psout" - Name 116 "flattenTemp" - Name 119 "@entryPointOutput.Color" - Name 123 "@entryPointOutput.Depth" - Name 128 "g_sSamp" - Name 131 "g_tTex1df4" - Name 134 "g_tTex1di4" - Name 137 "g_tTex1du4" - Name 140 "g_tTex2df4" - Name 143 "g_tTex2di4" - Name 146 "g_tTex2du4" - Name 149 "g_tTex3df4" - Name 152 "g_tTex3di4" - Name 155 "g_tTex3du4" - Name 158 "g_tTexcdf4" - Name 161 "g_tTexcdi4" - Name 164 "g_tTexcdu4" - Name 167 "g_tTexcdf4a" - Name 170 "g_tTexcdi4a" - Name 173 "g_tTexcdu4a" - Decorate 14(g_tTex1df4a) DescriptorSet 0 - Decorate 14(g_tTex1df4a) Binding 1 - MemberDecorate 20($Global) 0 Offset 0 - MemberDecorate 20($Global) 1 Offset 8 - MemberDecorate 20($Global) 2 Offset 16 - MemberDecorate 20($Global) 3 Offset 32 - MemberDecorate 20($Global) 4 Offset 48 - MemberDecorate 20($Global) 5 Offset 56 - MemberDecorate 20($Global) 6 Offset 64 - MemberDecorate 20($Global) 7 Offset 80 - Decorate 20($Global) Block - Decorate 22 DescriptorSet 0 - Decorate 22 Binding 7 - Decorate 39(g_tTex1di4a) DescriptorSet 0 - Decorate 39(g_tTex1di4a) Binding 2 - Decorate 51(g_tTex1du4a) DescriptorSet 0 - Decorate 51(g_tTex1du4a) Binding 3 - Decorate 64(g_tTex2df4a) DescriptorSet 0 - Decorate 64(g_tTex2df4a) Binding 4 - Decorate 81(g_tTex2di4a) DescriptorSet 0 - Decorate 81(g_tTex2di4a) Binding 5 - Decorate 93(g_tTex2du4a) DescriptorSet 0 - Decorate 93(g_tTex2du4a) Binding 6 - Decorate 119(@entryPointOutput.Color) Location 0 - Decorate 123(@entryPointOutput.Depth) BuiltIn FragDepth - Decorate 128(g_sSamp) DescriptorSet 0 - Decorate 128(g_sSamp) Binding 0 - Decorate 131(g_tTex1df4) DescriptorSet 0 - Decorate 131(g_tTex1df4) Binding 0 - Decorate 134(g_tTex1di4) DescriptorSet 0 - Decorate 134(g_tTex1di4) Binding 0 - Decorate 137(g_tTex1du4) DescriptorSet 0 - Decorate 137(g_tTex1du4) Binding 0 - Decorate 140(g_tTex2df4) DescriptorSet 0 - Decorate 140(g_tTex2df4) Binding 0 - Decorate 143(g_tTex2di4) DescriptorSet 0 - Decorate 143(g_tTex2di4) Binding 0 - Decorate 146(g_tTex2du4) DescriptorSet 0 - Decorate 146(g_tTex2du4) Binding 0 - Decorate 149(g_tTex3df4) DescriptorSet 0 - Decorate 149(g_tTex3df4) Binding 0 - Decorate 152(g_tTex3di4) DescriptorSet 0 - Decorate 152(g_tTex3di4) Binding 0 - Decorate 155(g_tTex3du4) DescriptorSet 0 - Decorate 155(g_tTex3du4) Binding 0 - Decorate 158(g_tTexcdf4) DescriptorSet 0 - Decorate 158(g_tTexcdf4) Binding 0 - Decorate 161(g_tTexcdi4) DescriptorSet 0 - Decorate 161(g_tTexcdi4) Binding 0 - Decorate 164(g_tTexcdu4) DescriptorSet 0 - Decorate 164(g_tTexcdu4) Binding 0 - Decorate 167(g_tTexcdf4a) DescriptorSet 0 - Decorate 167(g_tTexcdf4a) Binding 0 - Decorate 170(g_tTexcdi4a) DescriptorSet 0 - Decorate 170(g_tTexcdi4a) Binding 0 - Decorate 173(g_tTexcdu4a) DescriptorSet 0 - Decorate 173(g_tTexcdu4a) Binding 0 + Name 8 "getOffset1(" + Name 12 "getOffset2(" + Name 16 "PS_OUTPUT" + MemberName 16(PS_OUTPUT) 0 "Color" + MemberName 16(PS_OUTPUT) 1 "Depth" + Name 18 "@main(" + Name 28 "g_tTex1df4a" + Name 32 "$Global" + MemberName 32($Global) 0 "c1" + MemberName 32($Global) 1 "c2" + MemberName 32($Global) 2 "c3" + MemberName 32($Global) 3 "c4" + Name 34 "" + Name 49 "g_tTex1di4a" + Name 60 "g_tTex1du4a" + Name 72 "g_tTex2df4a" + Name 86 "g_tTex2di4a" + Name 97 "g_tTex2du4a" + Name 107 "psout" + Name 118 "flattenTemp" + Name 121 "@entryPointOutput.Color" + Name 125 "@entryPointOutput.Depth" + Name 130 "g_sSamp" + Name 133 "g_tTex1df4" + Name 136 "g_tTex1di4" + Name 139 "g_tTex1du4" + Name 142 "g_tTex2df4" + Name 145 "g_tTex2di4" + Name 148 "g_tTex2du4" + Name 151 "g_tTex3df4" + Name 154 "g_tTex3di4" + Name 157 "g_tTex3du4" + Name 160 "g_tTexcdf4" + Name 163 "g_tTexcdi4" + Name 166 "g_tTexcdu4" + Name 169 "g_tTexcdf4a" + Name 172 "g_tTexcdi4a" + Name 175 "g_tTexcdu4a" + Decorate 28(g_tTex1df4a) DescriptorSet 0 + Decorate 28(g_tTex1df4a) Binding 1 + MemberDecorate 32($Global) 0 Offset 0 + MemberDecorate 32($Global) 1 Offset 8 + MemberDecorate 32($Global) 2 Offset 16 + MemberDecorate 32($Global) 3 Offset 32 + Decorate 32($Global) Block + Decorate 34 DescriptorSet 0 + Decorate 34 Binding 7 + Decorate 49(g_tTex1di4a) DescriptorSet 0 + Decorate 49(g_tTex1di4a) Binding 2 + Decorate 60(g_tTex1du4a) DescriptorSet 0 + Decorate 60(g_tTex1du4a) Binding 3 + Decorate 72(g_tTex2df4a) DescriptorSet 0 + Decorate 72(g_tTex2df4a) Binding 4 + Decorate 86(g_tTex2di4a) DescriptorSet 0 + Decorate 86(g_tTex2di4a) Binding 5 + Decorate 97(g_tTex2du4a) DescriptorSet 0 + Decorate 97(g_tTex2du4a) Binding 6 + Decorate 121(@entryPointOutput.Color) Location 0 + Decorate 125(@entryPointOutput.Depth) BuiltIn FragDepth + Decorate 130(g_sSamp) DescriptorSet 0 + Decorate 130(g_sSamp) Binding 0 + Decorate 133(g_tTex1df4) DescriptorSet 0 + Decorate 133(g_tTex1df4) Binding 0 + Decorate 136(g_tTex1di4) DescriptorSet 0 + Decorate 136(g_tTex1di4) Binding 0 + Decorate 139(g_tTex1du4) DescriptorSet 0 + Decorate 139(g_tTex1du4) Binding 0 + Decorate 142(g_tTex2df4) DescriptorSet 0 + Decorate 142(g_tTex2df4) Binding 0 + Decorate 145(g_tTex2di4) DescriptorSet 0 + Decorate 145(g_tTex2di4) Binding 0 + Decorate 148(g_tTex2du4) DescriptorSet 0 + Decorate 148(g_tTex2du4) Binding 0 + Decorate 151(g_tTex3df4) DescriptorSet 0 + Decorate 151(g_tTex3df4) Binding 0 + Decorate 154(g_tTex3di4) DescriptorSet 0 + Decorate 154(g_tTex3di4) Binding 0 + Decorate 157(g_tTex3du4) DescriptorSet 0 + Decorate 157(g_tTex3du4) Binding 0 + Decorate 160(g_tTexcdf4) DescriptorSet 0 + Decorate 160(g_tTexcdf4) Binding 0 + Decorate 163(g_tTexcdi4) DescriptorSet 0 + Decorate 163(g_tTexcdi4) Binding 0 + Decorate 166(g_tTexcdu4) DescriptorSet 0 + Decorate 166(g_tTexcdu4) Binding 0 + Decorate 169(g_tTexcdf4a) DescriptorSet 0 + Decorate 169(g_tTexcdf4a) Binding 0 + Decorate 172(g_tTexcdi4a) DescriptorSet 0 + Decorate 172(g_tTexcdi4a) Binding 0 + Decorate 175(g_tTexcdu4a) DescriptorSet 0 + Decorate 175(g_tTexcdu4a) Binding 0 2: TypeVoid 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8(PS_OUTPUT): TypeStruct 7(fvec4) 6(float) - 9: TypeFunction 8(PS_OUTPUT) - 12: TypeImage 6(float) 1D array sampled format:Unknown - 13: TypePointer UniformConstant 12 - 14(g_tTex1df4a): 13(ptr) Variable UniformConstant - 16: TypeInt 32 1 - 17: TypeVector 16(int) 2 - 18: TypeVector 16(int) 3 - 19: TypeVector 16(int) 4 - 20($Global): TypeStruct 16(int) 17(ivec2) 18(ivec3) 19(ivec4) 16(int) 17(ivec2) 18(ivec3) 19(ivec4) - 21: TypePointer Uniform 20($Global) - 22: 21(ptr) Variable Uniform - 23: 16(int) Constant 2 - 24: TypePointer Uniform 18(ivec3) - 28: TypeInt 32 0 - 29: 28(int) Constant 2 - 30: TypePointer Uniform 16(int) - 33: 16(int) Constant 4 - 37: TypeImage 16(int) 1D array sampled format:Unknown - 38: TypePointer UniformConstant 37 - 39(g_tTex1di4a): 38(ptr) Variable UniformConstant - 49: TypeImage 28(int) 1D array sampled format:Unknown - 50: TypePointer UniformConstant 49 - 51(g_tTex1du4a): 50(ptr) Variable UniformConstant - 60: TypeVector 28(int) 4 - 62: TypeImage 6(float) 2D array sampled format:Unknown - 63: TypePointer UniformConstant 62 - 64(g_tTex2df4a): 63(ptr) Variable UniformConstant - 66: 16(int) Constant 3 - 67: TypePointer Uniform 19(ivec4) - 71: 28(int) Constant 3 - 74: 16(int) Constant 5 - 75: TypePointer Uniform 17(ivec2) - 79: TypeImage 16(int) 2D array sampled format:Unknown - 80: TypePointer UniformConstant 79 - 81(g_tTex2di4a): 80(ptr) Variable UniformConstant - 91: TypeImage 28(int) 2D array sampled format:Unknown - 92: TypePointer UniformConstant 91 - 93(g_tTex2du4a): 92(ptr) Variable UniformConstant - 103: TypePointer Function 8(PS_OUTPUT) - 105: 16(int) Constant 0 - 106: 6(float) Constant 1065353216 - 107: 7(fvec4) ConstantComposite 106 106 106 106 - 108: TypePointer Function 7(fvec4) - 110: 16(int) Constant 1 - 111: TypePointer Function 6(float) - 118: TypePointer Output 7(fvec4) -119(@entryPointOutput.Color): 118(ptr) Variable Output - 122: TypePointer Output 6(float) -123(@entryPointOutput.Depth): 122(ptr) Variable Output - 126: TypeSampler - 127: TypePointer UniformConstant 126 - 128(g_sSamp): 127(ptr) Variable UniformConstant - 129: TypeImage 6(float) 1D sampled format:Unknown - 130: TypePointer UniformConstant 129 - 131(g_tTex1df4): 130(ptr) Variable UniformConstant - 132: TypeImage 16(int) 1D sampled format:Unknown - 133: TypePointer UniformConstant 132 - 134(g_tTex1di4): 133(ptr) Variable UniformConstant - 135: TypeImage 28(int) 1D sampled format:Unknown - 136: TypePointer UniformConstant 135 - 137(g_tTex1du4): 136(ptr) Variable UniformConstant - 138: TypeImage 6(float) 2D sampled format:Unknown - 139: TypePointer UniformConstant 138 - 140(g_tTex2df4): 139(ptr) Variable UniformConstant - 141: TypeImage 16(int) 2D sampled format:Unknown - 142: TypePointer UniformConstant 141 - 143(g_tTex2di4): 142(ptr) Variable UniformConstant - 144: TypeImage 28(int) 2D sampled format:Unknown - 145: TypePointer UniformConstant 144 - 146(g_tTex2du4): 145(ptr) Variable UniformConstant - 147: TypeImage 6(float) 3D sampled format:Unknown - 148: TypePointer UniformConstant 147 - 149(g_tTex3df4): 148(ptr) Variable UniformConstant - 150: TypeImage 16(int) 3D sampled format:Unknown - 151: TypePointer UniformConstant 150 - 152(g_tTex3di4): 151(ptr) Variable UniformConstant - 153: TypeImage 28(int) 3D sampled format:Unknown - 154: TypePointer UniformConstant 153 - 155(g_tTex3du4): 154(ptr) Variable UniformConstant - 156: TypeImage 6(float) Cube sampled format:Unknown - 157: TypePointer UniformConstant 156 - 158(g_tTexcdf4): 157(ptr) Variable UniformConstant - 159: TypeImage 16(int) Cube sampled format:Unknown - 160: TypePointer UniformConstant 159 - 161(g_tTexcdi4): 160(ptr) Variable UniformConstant - 162: TypeImage 28(int) Cube sampled format:Unknown - 163: TypePointer UniformConstant 162 - 164(g_tTexcdu4): 163(ptr) Variable UniformConstant - 165: TypeImage 6(float) Cube array sampled format:Unknown - 166: TypePointer UniformConstant 165 -167(g_tTexcdf4a): 166(ptr) Variable UniformConstant - 168: TypeImage 16(int) Cube array sampled format:Unknown - 169: TypePointer UniformConstant 168 -170(g_tTexcdi4a): 169(ptr) Variable UniformConstant - 171: TypeImage 28(int) Cube array sampled format:Unknown - 172: TypePointer UniformConstant 171 -173(g_tTexcdu4a): 172(ptr) Variable UniformConstant + 6: TypeInt 32 1 + 7: TypeFunction 6(int) + 10: TypeVector 6(int) 2 + 11: TypeFunction 10(ivec2) + 14: TypeFloat 32 + 15: TypeVector 14(float) 4 + 16(PS_OUTPUT): TypeStruct 15(fvec4) 14(float) + 17: TypeFunction 16(PS_OUTPUT) + 20: 6(int) Constant 1 + 23: 10(ivec2) ConstantComposite 20 20 + 26: TypeImage 14(float) 1D array sampled format:Unknown + 27: TypePointer UniformConstant 26 + 28(g_tTex1df4a): 27(ptr) Variable UniformConstant + 30: TypeVector 6(int) 3 + 31: TypeVector 6(int) 4 + 32($Global): TypeStruct 6(int) 10(ivec2) 30(ivec3) 31(ivec4) + 33: TypePointer Uniform 32($Global) + 34: 33(ptr) Variable Uniform + 35: 6(int) Constant 2 + 36: TypePointer Uniform 30(ivec3) + 40: TypeInt 32 0 + 41: 40(int) Constant 2 + 42: TypePointer Uniform 6(int) + 47: TypeImage 6(int) 1D array sampled format:Unknown + 48: TypePointer UniformConstant 47 + 49(g_tTex1di4a): 48(ptr) Variable UniformConstant + 58: TypeImage 40(int) 1D array sampled format:Unknown + 59: TypePointer UniformConstant 58 + 60(g_tTex1du4a): 59(ptr) Variable UniformConstant + 68: TypeVector 40(int) 4 + 70: TypeImage 14(float) 2D array sampled format:Unknown + 71: TypePointer UniformConstant 70 + 72(g_tTex2df4a): 71(ptr) Variable UniformConstant + 74: 6(int) Constant 3 + 75: TypePointer Uniform 31(ivec4) + 79: 40(int) Constant 3 + 84: TypeImage 6(int) 2D array sampled format:Unknown + 85: TypePointer UniformConstant 84 + 86(g_tTex2di4a): 85(ptr) Variable UniformConstant + 95: TypeImage 40(int) 2D array sampled format:Unknown + 96: TypePointer UniformConstant 95 + 97(g_tTex2du4a): 96(ptr) Variable UniformConstant + 106: TypePointer Function 16(PS_OUTPUT) + 108: 6(int) Constant 0 + 109: 14(float) Constant 1065353216 + 110: 15(fvec4) ConstantComposite 109 109 109 109 + 111: TypePointer Function 15(fvec4) + 113: TypePointer Function 14(float) + 120: TypePointer Output 15(fvec4) +121(@entryPointOutput.Color): 120(ptr) Variable Output + 124: TypePointer Output 14(float) +125(@entryPointOutput.Depth): 124(ptr) Variable Output + 128: TypeSampler + 129: TypePointer UniformConstant 128 + 130(g_sSamp): 129(ptr) Variable UniformConstant + 131: TypeImage 14(float) 1D sampled format:Unknown + 132: TypePointer UniformConstant 131 + 133(g_tTex1df4): 132(ptr) Variable UniformConstant + 134: TypeImage 6(int) 1D sampled format:Unknown + 135: TypePointer UniformConstant 134 + 136(g_tTex1di4): 135(ptr) Variable UniformConstant + 137: TypeImage 40(int) 1D sampled format:Unknown + 138: TypePointer UniformConstant 137 + 139(g_tTex1du4): 138(ptr) Variable UniformConstant + 140: TypeImage 14(float) 2D sampled format:Unknown + 141: TypePointer UniformConstant 140 + 142(g_tTex2df4): 141(ptr) Variable UniformConstant + 143: TypeImage 6(int) 2D sampled format:Unknown + 144: TypePointer UniformConstant 143 + 145(g_tTex2di4): 144(ptr) Variable UniformConstant + 146: TypeImage 40(int) 2D sampled format:Unknown + 147: TypePointer UniformConstant 146 + 148(g_tTex2du4): 147(ptr) Variable UniformConstant + 149: TypeImage 14(float) 3D sampled format:Unknown + 150: TypePointer UniformConstant 149 + 151(g_tTex3df4): 150(ptr) Variable UniformConstant + 152: TypeImage 6(int) 3D sampled format:Unknown + 153: TypePointer UniformConstant 152 + 154(g_tTex3di4): 153(ptr) Variable UniformConstant + 155: TypeImage 40(int) 3D sampled format:Unknown + 156: TypePointer UniformConstant 155 + 157(g_tTex3du4): 156(ptr) Variable UniformConstant + 158: TypeImage 14(float) Cube sampled format:Unknown + 159: TypePointer UniformConstant 158 + 160(g_tTexcdf4): 159(ptr) Variable UniformConstant + 161: TypeImage 6(int) Cube sampled format:Unknown + 162: TypePointer UniformConstant 161 + 163(g_tTexcdi4): 162(ptr) Variable UniformConstant + 164: TypeImage 40(int) Cube sampled format:Unknown + 165: TypePointer UniformConstant 164 + 166(g_tTexcdu4): 165(ptr) Variable UniformConstant + 167: TypeImage 14(float) Cube array sampled format:Unknown + 168: TypePointer UniformConstant 167 +169(g_tTexcdf4a): 168(ptr) Variable UniformConstant + 170: TypeImage 6(int) Cube array sampled format:Unknown + 171: TypePointer UniformConstant 170 +172(g_tTexcdi4a): 171(ptr) Variable UniformConstant + 173: TypeImage 40(int) Cube array sampled format:Unknown + 174: TypePointer UniformConstant 173 +175(g_tTexcdu4a): 174(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label -116(flattenTemp): 103(ptr) Variable Function - 117:8(PS_OUTPUT) FunctionCall 10(@main() - Store 116(flattenTemp) 117 - 120: 108(ptr) AccessChain 116(flattenTemp) 105 - 121: 7(fvec4) Load 120 - Store 119(@entryPointOutput.Color) 121 - 124: 111(ptr) AccessChain 116(flattenTemp) 110 - 125: 6(float) Load 124 - Store 123(@entryPointOutput.Depth) 125 +118(flattenTemp): 106(ptr) Variable Function + 119:16(PS_OUTPUT) FunctionCall 18(@main() + Store 118(flattenTemp) 119 + 122: 111(ptr) AccessChain 118(flattenTemp) 108 + 123: 15(fvec4) Load 122 + Store 121(@entryPointOutput.Color) 123 + 126: 113(ptr) AccessChain 118(flattenTemp) 20 + 127: 14(float) Load 126 + Store 125(@entryPointOutput.Depth) 127 Return FunctionEnd - 10(@main():8(PS_OUTPUT) Function None 9 - 11: Label - 104(psout): 103(ptr) Variable Function - 15: 12 Load 14(g_tTex1df4a) - 25: 24(ptr) AccessChain 22 23 - 26: 18(ivec3) Load 25 - 27: 17(ivec2) VectorShuffle 26 26 0 1 - 31: 30(ptr) AccessChain 22 23 29 - 32: 16(int) Load 31 - 34: 30(ptr) AccessChain 22 33 - 35: 16(int) Load 34 - 36: 7(fvec4) ImageFetch 15 27 Lod Offset 32 35 - 40: 37 Load 39(g_tTex1di4a) - 41: 24(ptr) AccessChain 22 23 - 42: 18(ivec3) Load 41 - 43: 17(ivec2) VectorShuffle 42 42 0 1 - 44: 30(ptr) AccessChain 22 23 29 - 45: 16(int) Load 44 - 46: 30(ptr) AccessChain 22 33 - 47: 16(int) Load 46 - 48: 19(ivec4) ImageFetch 40 43 Lod Offset 45 47 - 52: 49 Load 51(g_tTex1du4a) - 53: 24(ptr) AccessChain 22 23 - 54: 18(ivec3) Load 53 - 55: 17(ivec2) VectorShuffle 54 54 0 1 - 56: 30(ptr) AccessChain 22 23 29 - 57: 16(int) Load 56 - 58: 30(ptr) AccessChain 22 33 - 59: 16(int) Load 58 - 61: 60(ivec4) ImageFetch 52 55 Lod Offset 57 59 - 65: 62 Load 64(g_tTex2df4a) - 68: 67(ptr) AccessChain 22 66 - 69: 19(ivec4) Load 68 - 70: 18(ivec3) VectorShuffle 69 69 0 1 2 - 72: 30(ptr) AccessChain 22 66 71 - 73: 16(int) Load 72 - 76: 75(ptr) AccessChain 22 74 - 77: 17(ivec2) Load 76 - 78: 7(fvec4) ImageFetch 65 70 Lod Offset 73 77 - 82: 79 Load 81(g_tTex2di4a) - 83: 67(ptr) AccessChain 22 66 - 84: 19(ivec4) Load 83 - 85: 18(ivec3) VectorShuffle 84 84 0 1 2 - 86: 30(ptr) AccessChain 22 66 71 - 87: 16(int) Load 86 - 88: 75(ptr) AccessChain 22 74 - 89: 17(ivec2) Load 88 - 90: 19(ivec4) ImageFetch 82 85 Lod Offset 87 89 - 94: 91 Load 93(g_tTex2du4a) - 95: 67(ptr) AccessChain 22 66 - 96: 19(ivec4) Load 95 - 97: 18(ivec3) VectorShuffle 96 96 0 1 2 - 98: 30(ptr) AccessChain 22 66 71 - 99: 16(int) Load 98 - 100: 75(ptr) AccessChain 22 74 - 101: 17(ivec2) Load 100 - 102: 60(ivec4) ImageFetch 94 97 Lod Offset 99 101 - 109: 108(ptr) AccessChain 104(psout) 105 - Store 109 107 - 112: 111(ptr) AccessChain 104(psout) 110 - Store 112 106 - 113:8(PS_OUTPUT) Load 104(psout) - ReturnValue 113 + 8(getOffset1(): 6(int) Function None 7 + 9: Label + ReturnValue 20 + FunctionEnd + 12(getOffset2(): 10(ivec2) Function None 11 + 13: Label + ReturnValue 23 + FunctionEnd + 18(@main():16(PS_OUTPUT) Function None 17 + 19: Label + 107(psout): 106(ptr) Variable Function + 29: 26 Load 28(g_tTex1df4a) + 37: 36(ptr) AccessChain 34 35 + 38: 30(ivec3) Load 37 + 39: 10(ivec2) VectorShuffle 38 38 0 1 + 43: 42(ptr) AccessChain 34 35 41 + 44: 6(int) Load 43 + 45: 6(int) FunctionCall 8(getOffset1() + 46: 15(fvec4) ImageFetch 29 39 Lod Offset 44 45 + 50: 47 Load 49(g_tTex1di4a) + 51: 36(ptr) AccessChain 34 35 + 52: 30(ivec3) Load 51 + 53: 10(ivec2) VectorShuffle 52 52 0 1 + 54: 42(ptr) AccessChain 34 35 41 + 55: 6(int) Load 54 + 56: 6(int) FunctionCall 8(getOffset1() + 57: 31(ivec4) ImageFetch 50 53 Lod Offset 55 56 + 61: 58 Load 60(g_tTex1du4a) + 62: 36(ptr) AccessChain 34 35 + 63: 30(ivec3) Load 62 + 64: 10(ivec2) VectorShuffle 63 63 0 1 + 65: 42(ptr) AccessChain 34 35 41 + 66: 6(int) Load 65 + 67: 6(int) FunctionCall 8(getOffset1() + 69: 68(ivec4) ImageFetch 61 64 Lod Offset 66 67 + 73: 70 Load 72(g_tTex2df4a) + 76: 75(ptr) AccessChain 34 74 + 77: 31(ivec4) Load 76 + 78: 30(ivec3) VectorShuffle 77 77 0 1 2 + 80: 42(ptr) AccessChain 34 74 79 + 81: 6(int) Load 80 + 82: 10(ivec2) FunctionCall 12(getOffset2() + 83: 15(fvec4) ImageFetch 73 78 Lod Offset 81 82 + 87: 84 Load 86(g_tTex2di4a) + 88: 75(ptr) AccessChain 34 74 + 89: 31(ivec4) Load 88 + 90: 30(ivec3) VectorShuffle 89 89 0 1 2 + 91: 42(ptr) AccessChain 34 74 79 + 92: 6(int) Load 91 + 93: 10(ivec2) FunctionCall 12(getOffset2() + 94: 31(ivec4) ImageFetch 87 90 Lod Offset 92 93 + 98: 95 Load 97(g_tTex2du4a) + 99: 75(ptr) AccessChain 34 74 + 100: 31(ivec4) Load 99 + 101: 30(ivec3) VectorShuffle 100 100 0 1 2 + 102: 42(ptr) AccessChain 34 74 79 + 103: 6(int) Load 102 + 104: 10(ivec2) FunctionCall 12(getOffset2() + 105: 68(ivec4) ImageFetch 98 101 Lod Offset 103 104 + 112: 111(ptr) AccessChain 107(psout) 108 + Store 112 110 + 114: 113(ptr) AccessChain 107(psout) 20 + Store 114 109 + 115:16(PS_OUTPUT) Load 107(psout) + ReturnValue 115 FunctionEnd diff --git a/Test/hlsl.load.2dms.dx10.frag b/Test/hlsl.load.2dms.dx10.frag index 29974f58e0..bc1525b0ad 100644 --- a/Test/hlsl.load.2dms.dx10.frag +++ b/Test/hlsl.load.2dms.dx10.frag @@ -19,10 +19,10 @@ uniform int2 c2; uniform int3 c3; uniform int4 c4; -uniform int o1; -uniform int2 o2; -uniform int3 o3; -uniform int4 o4; +int2 getOffset() +{ + return int2(1, 1); +} PS_OUTPUT main() { @@ -34,9 +34,9 @@ PS_OUTPUT main() g_tTex2dmsu4.Load(c2, 3); // 2DMS, offset - g_tTex2dmsf4.Load(c2, 3, o2); - g_tTex2dmsi4.Load(c2, 3, o2); - g_tTex2dmsu4.Load(c2, 3, o2); + g_tTex2dmsf4.Load(c2, 3, getOffset()); + g_tTex2dmsi4.Load(c2, 3, getOffset()); + g_tTex2dmsu4.Load(c2, 3, getOffset()); // 2DMSArray, no offset g_tTex2dmsf4a.Load(c3, 3); @@ -44,9 +44,9 @@ PS_OUTPUT main() g_tTex2dmsu4a.Load(c3, 3); // 2DMSArray, offset - g_tTex2dmsf4a.Load(c3, 3, o2); - g_tTex2dmsi4a.Load(c3, 3, o2); - g_tTex2dmsu4a.Load(c3, 3, o2); + g_tTex2dmsf4a.Load(c3, 3, getOffset()); + g_tTex2dmsi4a.Load(c3, 3, getOffset()); + g_tTex2dmsu4a.Load(c3, 3, getOffset()); psout.Color = 1.0; psout.Depth = 1.0; diff --git a/Test/hlsl.load.offset.dx10.frag b/Test/hlsl.load.offset.dx10.frag index bc946eead7..926406f905 100644 --- a/Test/hlsl.load.offset.dx10.frag +++ b/Test/hlsl.load.offset.dx10.frag @@ -39,29 +39,39 @@ uniform int2 c2; uniform int3 c3; uniform int4 c4; -uniform int o1; -uniform int2 o2; -uniform int3 o3; -uniform int4 o4; +int getOffset1() +{ + return 1; +} + +int2 getOffset2() +{ + return int2(1, 1); +} + +int3 getOffset3() +{ + return int3(1, 1, 1); +} PS_OUTPUT main() { PS_OUTPUT psout; // 1D - g_tTex1df4.Load(c2, o1); - g_tTex1di4.Load(c2, o1); - g_tTex1du4.Load(c2, o1); + g_tTex1df4.Load(c2, getOffset1()); + g_tTex1di4.Load(c2, getOffset1()); + g_tTex1du4.Load(c2, getOffset1()); // 2D - g_tTex2df4.Load(c3, o2); - g_tTex2di4.Load(c3, o2); - g_tTex2du4.Load(c3, o2); + g_tTex2df4.Load(c3, getOffset2()); + g_tTex2di4.Load(c3, getOffset2()); + g_tTex2du4.Load(c3, getOffset2()); // 3D - g_tTex3df4.Load(c4, o3); - g_tTex3di4.Load(c4, o3); - g_tTex3du4.Load(c4, o3); + g_tTex3df4.Load(c4, getOffset3()); + g_tTex3di4.Load(c4, getOffset3()); + g_tTex3du4.Load(c4, getOffset3()); // Offset has no Cube or CubeArray forms diff --git a/Test/hlsl.load.offsetarray.dx10.frag b/Test/hlsl.load.offsetarray.dx10.frag index 12b6a9e5a2..d911d3163d 100644 --- a/Test/hlsl.load.offsetarray.dx10.frag +++ b/Test/hlsl.load.offsetarray.dx10.frag @@ -39,24 +39,29 @@ uniform int2 c2; uniform int3 c3; uniform int4 c4; -uniform int o1; -uniform int2 o2; -uniform int3 o3; -uniform int4 o4; +int getOffset1() +{ + return 1; +} + +int2 getOffset2() +{ + return int2(1, 1); +} PS_OUTPUT main() { PS_OUTPUT psout; // 1DArray - g_tTex1df4a.Load(c3, o1); - g_tTex1di4a.Load(c3, o1); - g_tTex1du4a.Load(c3, o1); + g_tTex1df4a.Load(c3, getOffset1()); + g_tTex1di4a.Load(c3, getOffset1()); + g_tTex1du4a.Load(c3, getOffset1()); // 2DArray - g_tTex2df4a.Load(c4, o2); - g_tTex2di4a.Load(c4, o2); - g_tTex2du4a.Load(c4, o2); + g_tTex2df4a.Load(c4, getOffset2()); + g_tTex2di4a.Load(c4, getOffset2()); + g_tTex2du4a.Load(c4, getOffset2()); // TODO: // Load, SampleIndex From 65a7fb70547a65410e7372e62f4b22ff389d8f6d Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Sun, 25 Apr 2021 16:52:35 +0800 Subject: [PATCH 177/365] Implement the extension GL_EXT_spirv_intrinsics - Add support of SPIR-V execution mode qualifiers. - Add support of SPIR-V storage class qualifier. - Add support of SPIR-V decorate qualifiers. - Add support of SPIR-V type specifier. - Add support of SPIR-V intruction qualifiers. - Add support of spirv_by_reference/spirv_literal parameter qualifier. - Add shader stage macros introduced by this extension. --- BUILD.gn | 2 + SPIRV/GlslangToSpv.cpp | 329 +- Test/baseResults/cppBad.vert.out | 4 +- Test/baseResults/cppSimple.vert.out | 8 +- .../spv.intrinsicsSpirvByReference.vert.out | 56 + .../spv.intrinsicsSpirvDecorate.frag.out | 88 + .../spv.intrinsicsSpirvExecutionMode.frag.out | 36 + .../spv.intrinsicsSpirvInstruction.vert.out | 59 + .../spv.intrinsicsSpirvLiteral.vert.out | 29 + .../spv.intrinsicsSpirvStorageClass.rchit.out | 30 + .../spv.intrinsicsSpirvType.rgen.out | 45 + Test/spv.intrinsicsSpirvByReference.vert | 21 + Test/spv.intrinsicsSpirvDecorate.frag | 37 + Test/spv.intrinsicsSpirvExecutionMode.frag | 17 + Test/spv.intrinsicsSpirvInstruction.vert | 26 + Test/spv.intrinsicsSpirvLiteral.vert | 17 + Test/spv.intrinsicsSpirvStorageClass.rchit | 12 + Test/spv.intrinsicsSpirvType.rgen | 22 + glslang/CMakeLists.txt | 2 + glslang/Include/BaseTypes.h | 10 + glslang/Include/Common.h | 4 + glslang/Include/SpirvIntrinsics.h | 136 + glslang/Include/Types.h | 116 +- glslang/Include/intermediate.h | 17 + glslang/MachineIndependent/ParseHelper.cpp | 140 +- glslang/MachineIndependent/ParseHelper.h | 14 + glslang/MachineIndependent/Scan.cpp | 27 + .../MachineIndependent/SpirvIntrinsics.cpp | 355 + glslang/MachineIndependent/SymbolTable.cpp | 4 + glslang/MachineIndependent/SymbolTable.h | 13 + glslang/MachineIndependent/Versions.cpp | 25 + glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/glslang.m4 | 327 + glslang/MachineIndependent/glslang.y | 327 + glslang/MachineIndependent/glslang_tab.cpp | 7003 ++++++++++------- glslang/MachineIndependent/glslang_tab.cpp.h | 275 +- glslang/MachineIndependent/intermOut.cpp | 8 + .../MachineIndependent/localintermediate.h | 14 + .../preprocessor/PpScanner.cpp | 9 +- gtests/Spv.FromFile.cpp | 7 + 40 files changed, 6521 insertions(+), 3151 deletions(-) create mode 100644 Test/baseResults/spv.intrinsicsSpirvByReference.vert.out create mode 100644 Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out create mode 100644 Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out create mode 100644 Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out create mode 100644 Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out create mode 100644 Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out create mode 100644 Test/baseResults/spv.intrinsicsSpirvType.rgen.out create mode 100644 Test/spv.intrinsicsSpirvByReference.vert create mode 100644 Test/spv.intrinsicsSpirvDecorate.frag create mode 100644 Test/spv.intrinsicsSpirvExecutionMode.frag create mode 100644 Test/spv.intrinsicsSpirvInstruction.vert create mode 100644 Test/spv.intrinsicsSpirvLiteral.vert create mode 100644 Test/spv.intrinsicsSpirvStorageClass.rchit create mode 100644 Test/spv.intrinsicsSpirvType.rgen create mode 100644 glslang/Include/SpirvIntrinsics.h create mode 100644 glslang/MachineIndependent/SpirvIntrinsics.cpp diff --git a/BUILD.gn b/BUILD.gn index 973ca98b55..a37e1d25e2 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -131,6 +131,7 @@ template("glslang_sources_common") { "glslang/Include/PoolAlloc.h", "glslang/Include/ResourceLimits.h", "glslang/Include/ShHandle.h", + "glslang/Include/SpirvIntrinsics.h", "glslang/Include/Types.h", "glslang/Include/arrays.h", "glslang/Include/intermediate.h", @@ -151,6 +152,7 @@ template("glslang_sources_common") { "glslang/MachineIndependent/Scan.h", "glslang/MachineIndependent/ScanContext.h", "glslang/MachineIndependent/ShaderLang.cpp", + "glslang/MachineIndependent/SpirvIntrinsics.cpp", "glslang/MachineIndependent/SymbolTable.cpp", "glslang/MachineIndependent/SymbolTable.h", "glslang/MachineIndependent/Versions.cpp", diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 5a25c8d4e2..ac2fef9e2a 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -160,6 +160,7 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { spv::SelectionControlMask TranslateSwitchControl(const glslang::TIntermSwitch&) const; spv::LoopControlMask TranslateLoopControl(const glslang::TIntermLoop&, std::vector& operands) const; spv::StorageClass TranslateStorageClass(const glslang::TType&); + void TranslateLiterals(const glslang::TVector&, std::vector&) const; void addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType); spv::Id createSpvVariable(const glslang::TIntermSymbol*, spv::Id forcedType); spv::Id getSampledType(const glslang::TSampler&); @@ -1249,6 +1250,10 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T { if (type.getBasicType() == glslang::EbtRayQuery) return spv::StorageClassPrivate; +#ifndef GLSLANG_WEB + if (type.getQualifier().isSpirvByReference()) + return spv::StorageClassFunction; +#endif if (type.getQualifier().isPipeInput()) return spv::StorageClassInput; if (type.getQualifier().isPipeOutput()) @@ -1297,6 +1302,7 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T case glslang::EvqHitAttr: return spv::StorageClassHitAttributeKHR; case glslang::EvqCallableData: return spv::StorageClassCallableDataKHR; case glslang::EvqCallableDataIn: return spv::StorageClassIncomingCallableDataKHR; + case glslang::EvqSpirvStorageClass: return static_cast(type.getQualifier().spirvStorageClass); #endif default: assert(0); @@ -1306,6 +1312,52 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T return spv::StorageClassFunction; } +// Translate glslang constants to SPIR-V literals +void TGlslangToSpvTraverser::TranslateLiterals(const glslang::TVector& constants, + std::vector& literals) const +{ + for (auto constant : constants) { + if (constant->getBasicType() == glslang::EbtFloat) { + float floatValue = static_cast(constant->getConstArray()[0].getDConst()); + unsigned literal = *reinterpret_cast(&floatValue); + literals.push_back(literal); + } else if (constant->getBasicType() == glslang::EbtInt) { + unsigned literal = constant->getConstArray()[0].getIConst(); + literals.push_back(literal); + } else if (constant->getBasicType() == glslang::EbtUint) { + unsigned literal = constant->getConstArray()[0].getUConst(); + literals.push_back(literal); + } else if (constant->getBasicType() == glslang::EbtBool) { + unsigned literal = constant->getConstArray()[0].getBConst(); + literals.push_back(literal); + } else if (constant->getBasicType() == glslang::EbtString) { + auto str = constant->getConstArray()[0].getSConst()->c_str(); + unsigned literal = 0; + char* literalPtr = reinterpret_cast(&literal); + unsigned charCount = 0; + char ch = 0; + do { + ch = *(str++); + *(literalPtr++) = ch; + ++charCount; + if (charCount == 4) { + literals.push_back(literal); + literalPtr = reinterpret_cast(&literal); + charCount = 0; + } + } while (ch != 0); + + // Partial literal is padded with 0 + if (charCount > 0) { + for (; charCount < 4; ++charCount) + *(literalPtr++) = 0; + literals.push_back(literal); + } + } else + assert(0); // Unexpected type + } +} + // Add capabilities pertaining to how an array is indexed. void TGlslangToSpvTraverser::addIndirectionIndexCapabilities(const glslang::TType& baseType, const glslang::TType& indexType) @@ -1735,6 +1787,53 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, default: break; } + +#ifndef GLSLANG_WEB + // + // Add SPIR-V requirements (GL_EXT_spirv_intrinsics) + // + if (glslangIntermediate->hasSpirvRequirement()) { + const glslang::TSpirvRequirement& spirvRequirement = glslangIntermediate->getSpirvRequirement(); + + // Add SPIR-V extension requirement + for (auto& extension : spirvRequirement.extensions) + builder.addExtension(extension.c_str()); + + // Add SPIR-V capability requirement + for (auto capability : spirvRequirement.capabilities) + builder.addCapability(static_cast(capability)); + } + + // + // Add SPIR-V execution mode qualifiers (GL_EXT_spirv_intrinsics) + // + if (glslangIntermediate->hasSpirvExecutionMode()) { + const glslang::TSpirvExecutionMode spirvExecutionMode = glslangIntermediate->getSpirvExecutionMode(); + + // Add spirv_execution_mode + for (auto& mode : spirvExecutionMode.modes) { + if (!mode.second.empty()) { + std::vector literals; + TranslateLiterals(mode.second, literals); + builder.addExecutionMode(shaderEntry, static_cast(mode.first), literals); + } else + builder.addExecutionMode(shaderEntry, static_cast(mode.first)); + } + + // Add spirv_execution_mode_id + for (auto& modeId : spirvExecutionMode.modeIds) { + std::vector operandIds; + assert(!modeId.second.empty()); + for (auto extraOperand : modeId.second) { + int nextConst = 0; + spv::Id operandId = createSpvConstantFromConstUnionArray( + extraOperand->getType(), extraOperand->getConstArray(), nextConst, false); + operandIds.push_back(operandId); + } + builder.addExecutionModeId(shaderEntry, static_cast(modeId.first), operandIds); + } + } +#endif } // Finish creating SPV, after the traversal is complete. @@ -2317,10 +2416,14 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI node->getOp() == glslang::EOpRayQueryGetWorldRayDirection || node->getOp() == glslang::EOpRayQueryGetIntersectionCandidateAABBOpaque || node->getOp() == glslang::EOpRayQueryTerminate || - node->getOp() == glslang::EOpRayQueryConfirmIntersection) { + node->getOp() == glslang::EOpRayQueryConfirmIntersection || + (node->getOp() == glslang::EOpSpirvInst && operandNode->getAsTyped()->getQualifier().isSpirvByReference())) { operand = builder.accessChainGetLValue(); // Special case l-value operands lvalueCoherentFlags = builder.getAccessChain().coherentFlags; lvalueCoherentFlags |= TranslateCoherent(operandNode->getAsTyped()->getType()); + } else if (operandNode->getAsTyped()->getQualifier().isSpirvLiteral()) { + // Will be translated to a literal value, make a placeholder here + operand = spv::NoResult; } else #endif { @@ -2341,6 +2444,38 @@ bool TGlslangToSpvTraverser::visitUnary(glslang::TVisit /* visit */, glslang::TI result = createUnaryOperation(node->getOp(), decorations, resultType(), operand, node->getOperand()->getBasicType(), lvalueCoherentFlags); +#ifndef GLSLANG_WEB + // it could be attached to a SPIR-V intruction + if (!result) { + if (node->getOp() == glslang::EOpSpirvInst) { + const auto& spirvInst = node->getSpirvInstruction(); + if (spirvInst.set == "") { + spv::IdImmediate idImmOp = {true, operand}; + if (operandNode->getAsTyped()->getQualifier().isSpirvLiteral()) { + // Translate the constant to a literal value + std::vector literals; + glslang::TVector constants; + constants.push_back(operandNode->getAsConstantUnion()); + TranslateLiterals(constants, literals); + idImmOp = {false, literals[0]}; + } + + if (node->getBasicType() == glslang::EbtVoid) + builder.createNoResultOp(static_cast(spirvInst.id), {idImmOp}); + else + result = builder.createOp(static_cast(spirvInst.id), resultType(), {idImmOp}); + } else { + result = builder.createBuiltinCall( + resultType(), spirvInst.set == "GLSL.std.450" ? stdBuiltins : getExtBuiltins(spirvInst.set.c_str()), + spirvInst.id, {operand}); + } + + if (node->getBasicType() == glslang::EbtVoid) + return false; // done with this node + } + } +#endif + if (result) { if (invertedType) { result = createInvertedSwizzle(decorations.precision, *node->getOperand(), result); @@ -3037,6 +3172,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt if (arg == 1) lvalue = true; break; + case glslang::EOpSpirvInst: + if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvByReference()) + lvalue = true; + break; #endif default: break; @@ -3142,7 +3281,12 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt visitSymbol(itNode->second); spv::Id symId = getSymbolId(itNode->second); operands.push_back(symId); - } else { +#ifndef GLSLANG_WEB + } else if (glslangOperands[arg]->getAsTyped()->getQualifier().isSpirvLiteral()) { + // Will be translated to a literal value, make a placeholder here + operands.push_back(spv::NoResult); +#endif + } else { operands.push_back(accessChainLoad(glslangOperands[arg]->getAsTyped()->getType())); } } @@ -3184,6 +3328,34 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt ? node->getSequence()[0]->getAsTyped()->getBasicType() : node->getBasicType(); result = createAtomicOperation(node->getOp(), precision, resultType(), operands, typeProxy, lvalueCoherentFlags); +#ifndef GLSLANG_WEB + } else if (node->getOp() == glslang::EOpSpirvInst) { + const auto& spirvInst = node->getSpirvInstruction(); + if (spirvInst.set == "") { + std::vector idImmOps; + for (int i = 0; i < glslangOperands.size(); ++i) { + if (glslangOperands[i]->getAsTyped()->getQualifier().isSpirvLiteral()) { + // Translate the constant to a literal value + std::vector literals; + glslang::TVector constants; + constants.push_back(glslangOperands[i]->getAsConstantUnion()); + TranslateLiterals(constants, literals); + idImmOps.push_back({false, literals[0]}); + } else + idImmOps.push_back({true, operands[i]}); + } + + if (node->getBasicType() == glslang::EbtVoid) + builder.createNoResultOp(static_cast(spirvInst.id), idImmOps); + else + result = builder.createOp(static_cast(spirvInst.id), resultType(), idImmOps); + } else { + result = builder.createBuiltinCall( + resultType(), spirvInst.set == "GLSL.std.450" ? stdBuiltins : getExtBuiltins(spirvInst.set.c_str()), + spirvInst.id, operands); + } + noReturnValue = node->getBasicType() == glslang::EbtVoid; +#endif } else if (node->getOp() == glslang::EOpDebugPrintf) { if (!nonSemanticDebugPrintf) { nonSemanticDebugPrintf = builder.import("NonSemantic.DebugPrintf"); @@ -3464,6 +3636,11 @@ bool TGlslangToSpvTraverser::visitSwitch(glslang::TVisit /* visit */, glslang::T void TGlslangToSpvTraverser::visitConstantUnion(glslang::TIntermConstantUnion* node) { +#ifndef GLSLANG_WEB + if (node->getQualifier().isSpirvLiteral()) + return; // Translated to a literal value, skip further processing +#endif + int nextConst = 0; spv::Id constant = createSpvConstantFromConstUnionArray(node->getType(), node->getConstArray(), nextConst, false); @@ -3912,6 +4089,77 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty case glslang::EbtString: // no type used for OpString return 0; +#ifndef GLSLANG_WEB + case glslang::EbtSpirvType: { + // GL_EXT_spirv_intrinsics + const auto& spirvType = type.getSpirvType(); + const auto& spirvInst = spirvType.spirvInst; + + std::vector operands; + for (const auto& typeParam : spirvType.typeParams) { + if (typeParam.isConstant) { + // Constant expression + if (typeParam.constant->isLiteral()) { + if (typeParam.constant->getBasicType() == glslang::EbtFloat) { + float floatValue = static_cast(typeParam.constant->getConstArray()[0].getDConst()); + unsigned literal = *reinterpret_cast(&floatValue); + operands.push_back(literal); + } else if (typeParam.constant->getBasicType() == glslang::EbtInt) { + unsigned literal = typeParam.constant->getConstArray()[0].getIConst(); + operands.push_back(literal); + } else if (typeParam.constant->getBasicType() == glslang::EbtUint) { + unsigned literal = typeParam.constant->getConstArray()[0].getUConst(); + operands.push_back(literal); + } else if (typeParam.constant->getBasicType() == glslang::EbtBool) { + unsigned literal = typeParam.constant->getConstArray()[0].getBConst(); + operands.push_back(literal); + } else if (typeParam.constant->getBasicType() == glslang::EbtString) { + auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str(); + unsigned literal = 0; + char* literalPtr = reinterpret_cast(&literal); + unsigned charCount = 0; + char ch = 0; + do { + ch = *(str++); + *(literalPtr++) = ch; + ++charCount; + if (charCount == 4) { + operands.push_back(literal); + literalPtr = reinterpret_cast(&literal); + charCount = 0; + } + } while (ch != 0); + + // Partial literal is padded with 0 + if (charCount > 0) { + for (; charCount < 4; ++charCount) + *(literalPtr++) = 0; + operands.push_back(literal); + } + } else + assert(0); // Unexpected type + } else { + int nextConst = 0; + spv::Id constant = createSpvConstantFromConstUnionArray( + typeParam.constant->getType(), typeParam.constant->getConstArray(), nextConst, false); + operands.push_back(constant); + } + } else { + // Type specifier + spv::Id typeId = convertGlslangToSpvType(*typeParam.type); + operands.push_back(typeId); + } + } + + if (spirvInst.set == "") + spvType = builder.createOp(static_cast(spirvInst.id), spv::NoType, operands); + else { + spvType = builder.createBuiltinCall( + spv::NoType, getExtBuiltins(spirvInst.set.c_str()), spirvInst.id, operands); + } + break; + } +#endif default: assert(0); break; @@ -4225,6 +4473,38 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, builder.addCapability(spv::CapabilityGeometryShaderPassthroughNV); builder.addExtension(spv::E_SPV_NV_geometry_shader_passthrough); } + + // + // Add SPIR-V decorations for members (GL_EXT_spirv_intrinsics) + // + if (glslangMember.getQualifier().hasSprivDecorate()) { + const glslang::TSpirvDecorate& spirvDecorate = glslangMember.getQualifier().getSpirvDecorate(); + + // Add spirv_decorate + for (auto& decorate : spirvDecorate.decorates) { + if (!decorate.second.empty()) { + std::vector literals; + TranslateLiterals(decorate.second, literals); + builder.addMemberDecoration(spvType, member, static_cast(decorate.first), literals); + } + else + builder.addMemberDecoration(spvType, member, static_cast(decorate.first)); + } + + // spirv_decorate_id not applied to members + assert(spirvDecorate.decorateIds.empty()); + + // Add spirv_decorate_string + for (auto& decorateString : spirvDecorate.decorateStrings) { + std::vector strings; + assert(!decorateString.second.empty()); + for (auto extraOperand : decorateString.second) { + const char* string = extraOperand->getConstArray()[0].getSConst()->c_str(); + strings.push_back(string); + } + builder.addDecoration(spvType, static_cast(decorateString.first), strings); + } + } #endif } @@ -4614,6 +4894,9 @@ bool TGlslangToSpvTraverser::originalParam(glslang::TStorageQualifier qualifier, if (glslangIntermediate->getSource() == glslang::EShSourceHlsl) return paramType.getBasicType() == glslang::EbtBlock; return paramType.containsOpaque() || // sampler, etc. +#ifndef GLSLANG_WEB + paramType.getQualifier().isSpirvByReference() || // spirv_by_reference +#endif (paramType.getBasicType() == glslang::EbtBlock && qualifier == glslang::EvqBuffer); // SSBO } @@ -8465,6 +8748,48 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, symbol->getType().getQualifier().restrict ? spv::DecorationRestrictPointerEXT : spv::DecorationAliasedPointerEXT); } + + // + // Add SPIR-V decorations for structure (GL_EXT_spirv_intrinsics) + // + if (symbol->getType().getQualifier().hasSprivDecorate()) { + const glslang::TSpirvDecorate& spirvDecorate = symbol->getType().getQualifier().getSpirvDecorate(); + + // Add spirv_decorate + for (auto& decorate : spirvDecorate.decorates) { + if (!decorate.second.empty()) { + std::vector literals; + TranslateLiterals(decorate.second, literals); + builder.addDecoration(id, static_cast(decorate.first), literals); + } + else + builder.addDecoration(id, static_cast(decorate.first)); + } + + // Add spirv_decorate_id + for (auto& decorateId : spirvDecorate.decorateIds) { + std::vector operandIds; + assert(!decorateId.second.empty()); + for (auto extraOperand : decorateId.second) { + int nextConst = 0; + spv::Id operandId = createSpvConstantFromConstUnionArray( + extraOperand->getType(), extraOperand->getConstArray(), nextConst, false); + operandIds.push_back(operandId); + } + builder.addDecoration(id, static_cast(decorateId.first), operandIds); + } + + // Add spirv_decorate_string + for (auto& decorateString : spirvDecorate.decorateStrings) { + std::vector strings; + assert(!decorateString.second.empty()); + for (auto extraOperand : decorateString.second) { + const char* string = extraOperand->getConstArray()[0].getSConst()->c_str(); + strings.push_back(string); + } + builder.addDecoration(id, static_cast(decorateString.first), strings); + } + } #endif return id; diff --git a/Test/baseResults/cppBad.vert.out b/Test/baseResults/cppBad.vert.out index aaecdf0775..8ab04bc0e7 100644 --- a/Test/baseResults/cppBad.vert.out +++ b/Test/baseResults/cppBad.vert.out @@ -3,7 +3,9 @@ WARNING: 0:1: '#define' : missing space after macro name ERROR: 0:3: 'preprocessor evaluation' : bad expression ERROR: 0:3: '#if' : unexpected tokens following directive ERROR: 0:6: 'string' : End of line in string -ERROR: 0:6: 'string literal' : required extension not requested: GL_EXT_debug_printf +ERROR: 0:6: 'string literal' : required extension not requested: Possible extensions include: +GL_EXT_debug_printf +GL_EXT_spirv_intrinsics ERROR: 0:6: '' : syntax error, unexpected INT, expecting COMMA or SEMICOLON ERROR: 5 compilation errors. No code generated. diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out index 3257856cef..0646c5fee4 100644 --- a/Test/baseResults/cppSimple.vert.out +++ b/Test/baseResults/cppSimple.vert.out @@ -18,8 +18,12 @@ ERROR: 0:117: '#error' : bad5 ERROR: 0:120: '#if' : unexpected tokens following directive ERROR: 0:121: '#error' : bad6 ERROR: 0:122: '#endif' : unexpected tokens following directive -ERROR: 0:135: 'string literal' : required extension not requested: GL_EXT_debug_printf -ERROR: 0:136: 'string literal' : required extension not requested: GL_EXT_debug_printf +ERROR: 0:135: 'string literal' : required extension not requested: Possible extensions include: +GL_EXT_debug_printf +GL_EXT_spirv_intrinsics +ERROR: 0:136: 'string literal' : required extension not requested: Possible extensions include: +GL_EXT_debug_printf +GL_EXT_spirv_intrinsics ERROR: 0:136: 'length' : no matching overloaded function found ERROR: 0:136: '=' : cannot convert from ' const float' to ' global int' ERROR: 0:138: ''' : character literals not supported diff --git a/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out b/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out new file mode 100644 index 0000000000..d46b33f8dd --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvByReference.vert.out @@ -0,0 +1,56 @@ +spv.intrinsicsSpirvByReference.vert +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 30 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 15 17 26 + Source GLSL 450 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 10 "func(f1;" + Name 9 "f" + Name 15 "vec2Out" + Name 17 "floatIn" + Name 26 "floatOut" + Name 27 "param" + Decorate 15(vec2Out) Location 0 + Decorate 17(floatIn) Location 0 + Decorate 26(floatOut) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 2 7(ptr) + 12: 6(float) Constant 1056964608 + 13: TypeVector 6(float) 2 + 14: TypePointer Output 13(fvec2) + 15(vec2Out): 14(ptr) Variable Output + 16: TypePointer Input 6(float) + 17(floatIn): 16(ptr) Variable Input + 19: TypeInt 32 0 + 20: 19(int) Constant 1 + 21: TypePointer Output 6(float) + 24: 19(int) Constant 0 + 26(floatOut): 21(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 27(param): 7(ptr) Variable Function + 18: 6(float) Load 17(floatIn) + 22: 21(ptr) AccessChain 15(vec2Out) 20 + 23: 6(float) ExtInst 1(GLSL.std.450) 35(Modf) 18 22 + 25: 21(ptr) AccessChain 15(vec2Out) 24 + Store 25 23 + 28: 6(float) Load 26(floatOut) + Store 27(param) 28 + 29: 2 FunctionCall 10(func(f1;) 27(param) + Return + FunctionEnd + 10(func(f1;): 2 Function None 8 + 9(f): 7(ptr) FunctionParameter + 11: Label + Store 9(f) 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out new file mode 100644 index 0000000000..cbd46b0026 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out @@ -0,0 +1,88 @@ +spv.intrinsicsSpirvDecorate.frag +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 43 + + Capability Shader + Extension "SPV_AMD_shader_explicit_vertex_parameter" + 1: ExtInstImport "GLSL.std.450" + 14: ExtInstImport "SPV_AMD_shader_explicit_vertex_parameter" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 10 18 20 22 25 28 31 34 39 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 8 "floatOut" + Name 10 "floatIn" + Name 18 "vec2Out" + Name 20 "gl_BaryCoordNoPerspAMD" + Name 22 "gl_BaryCoordNoPerspCentroidAMD" + Name 25 "gl_BaryCoordNoPerspSampleAMD" + Name 28 "gl_BaryCoordSmoothAMD" + Name 31 "gl_BaryCoordSmoothCentroidAMD" + Name 34 "gl_BaryCoordSmoothSampleAMD" + Name 39 "gl_BaryCoordPullModelAMD" + Decorate 8(floatOut) Location 0 + Decorate 10(floatIn) Location 0 + Decorate 10(floatIn) ExplicitInterpAMD + Decorate 18(vec2Out) Location 1 + Decorate 20(gl_BaryCoordNoPerspAMD) Location 0 + Decorate 20(gl_BaryCoordNoPerspAMD) BuiltIn BaryCoordNoPerspAMD + Decorate 22(gl_BaryCoordNoPerspCentroidAMD) Location 1 + Decorate 22(gl_BaryCoordNoPerspCentroidAMD) BuiltIn BaryCoordNoPerspCentroidAMD + Decorate 25(gl_BaryCoordNoPerspSampleAMD) Location 2 + Decorate 25(gl_BaryCoordNoPerspSampleAMD) BuiltIn BaryCoordNoPerspSampleAMD + Decorate 28(gl_BaryCoordSmoothAMD) Location 3 + Decorate 28(gl_BaryCoordSmoothAMD) BuiltIn BaryCoordSmoothAMD + Decorate 31(gl_BaryCoordSmoothCentroidAMD) Location 4 + Decorate 31(gl_BaryCoordSmoothCentroidAMD) BuiltIn BaryCoordSmoothCentroidAMD + Decorate 34(gl_BaryCoordSmoothSampleAMD) Location 5 + Decorate 34(gl_BaryCoordSmoothSampleAMD) BuiltIn BaryCoordSmoothSampleAMD + Decorate 39(gl_BaryCoordPullModelAMD) Location 6 + Decorate 39(gl_BaryCoordPullModelAMD) BuiltIn BaryCoordPullModelAMD + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(floatOut): 7(ptr) Variable Output + 9: TypePointer Input 6(float) + 10(floatIn): 9(ptr) Variable Input + 12: TypeInt 32 0 + 13: 12(int) Constant 1 + 16: TypeVector 6(float) 2 + 17: TypePointer Output 16(fvec2) + 18(vec2Out): 17(ptr) Variable Output + 19: TypePointer Input 16(fvec2) +20(gl_BaryCoordNoPerspAMD): 19(ptr) Variable Input +22(gl_BaryCoordNoPerspCentroidAMD): 19(ptr) Variable Input +25(gl_BaryCoordNoPerspSampleAMD): 19(ptr) Variable Input +28(gl_BaryCoordSmoothAMD): 19(ptr) Variable Input +31(gl_BaryCoordSmoothCentroidAMD): 19(ptr) Variable Input +34(gl_BaryCoordSmoothSampleAMD): 19(ptr) Variable Input + 37: TypeVector 6(float) 3 + 38: TypePointer Input 37(fvec3) +39(gl_BaryCoordPullModelAMD): 38(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 11: 6(float) Load 10(floatIn) + 15: 6(float) ExtInst 14(SPV_AMD_shader_explicit_vertex_parameter) 1(InterpolateAtVertexAMD) 11 13 + Store 8(floatOut) 15 + 21: 16(fvec2) Load 20(gl_BaryCoordNoPerspAMD) + 23: 16(fvec2) Load 22(gl_BaryCoordNoPerspCentroidAMD) + 24: 16(fvec2) FAdd 21 23 + 26: 16(fvec2) Load 25(gl_BaryCoordNoPerspSampleAMD) + 27: 16(fvec2) FAdd 24 26 + 29: 16(fvec2) Load 28(gl_BaryCoordSmoothAMD) + 30: 16(fvec2) FAdd 27 29 + 32: 16(fvec2) Load 31(gl_BaryCoordSmoothCentroidAMD) + 33: 16(fvec2) FAdd 30 32 + 35: 16(fvec2) Load 34(gl_BaryCoordSmoothSampleAMD) + 36: 16(fvec2) FAdd 33 35 + 40: 37(fvec3) Load 39(gl_BaryCoordPullModelAMD) + 41: 16(fvec2) VectorShuffle 40 40 0 1 + 42: 16(fvec2) FAdd 36 41 + Store 18(vec2Out) 42 + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out b/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out new file mode 100644 index 0000000000..22bc53b0a8 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out @@ -0,0 +1,36 @@ +spv.intrinsicsSpirvExecutionMode.frag +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 12 + + Capability Shader + Capability StencilExportEXT + Extension "SPV_EXT_shader_stencil_export" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 10 + ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 StencilRefReplacingEXT + Source GLSL 450 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 8 "gl_FragStencilRef" + Name 10 "color" + Decorate 8(gl_FragStencilRef) Location 0 + Decorate 8(gl_FragStencilRef) BuiltIn FragStencilRefEXT + Decorate 10(color) Flat + Decorate 10(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 1 + 7: TypePointer Output 6(int) +8(gl_FragStencilRef): 7(ptr) Variable Output + 9: TypePointer Input 6(int) + 10(color): 9(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 11: 6(int) Load 10(color) + Store 8(gl_FragStencilRef) 11 + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out b/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out new file mode 100644 index 0000000000..0e2780cff8 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out @@ -0,0 +1,59 @@ +spv.intrinsicsSpirvInstruction.vert +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 30 + + Capability Shader + Capability Int64 + Capability ShaderClockKHR + Extension "SPV_AMD_shader_trinary_minmax" + Extension "SPV_KHR_shader_clock" + 1: ExtInstImport "GLSL.std.450" + 28: ExtInstImport "SPV_AMD_shader_trinary_minmax" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 13 18 21 + Source GLSL 450 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 9 "uvec2Out" + Name 13 "i64Out" + Name 18 "vec2Out" + Name 21 "vec3In" + Decorate 9(uvec2Out) Location 0 + Decorate 13(i64Out) Location 1 + Decorate 18(vec2Out) Location 2 + Decorate 21(vec3In) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 2 + 8: TypePointer Output 7(ivec2) + 9(uvec2Out): 8(ptr) Variable Output + 11: TypeInt 64 1 + 12: TypePointer Output 11(int64_t) + 13(i64Out): 12(ptr) Variable Output + 15: TypeFloat 32 + 16: TypeVector 15(float) 2 + 17: TypePointer Output 16(fvec2) + 18(vec2Out): 17(ptr) Variable Output + 19: TypeVector 15(float) 3 + 20: TypePointer Input 19(fvec3) + 21(vec3In): 20(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 10: 7(ivec2) ReadClockKHR + Store 9(uvec2Out) 10 + 14: 11(int64_t) ReadClockKHR + Store 13(i64Out) 14 + 22: 19(fvec3) Load 21(vec3In) + 23: 16(fvec2) VectorShuffle 22 22 0 1 + 24: 19(fvec3) Load 21(vec3In) + 25: 16(fvec2) VectorShuffle 24 24 1 2 + 26: 19(fvec3) Load 21(vec3In) + 27: 16(fvec2) VectorShuffle 26 26 2 0 + 29: 16(fvec2) ExtInst 28(SPV_AMD_shader_trinary_minmax) 1(FMin3AMD) 23 25 27 + Store 18(vec2Out) 29 + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out new file mode 100644 index 0000000000..af4ac16736 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out @@ -0,0 +1,29 @@ +spv.intrinsicsSpirvLiteral.vert +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 12 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source GLSL 450 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 9 "vec4Out" + Name 10 "vec4In" + Decorate 9(vec4Out) Location 1 + Decorate 10(vec4In) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 4(main): 2 Function None 3 + 5: Label + 9(vec4Out): 8(ptr) Variable Function + 10(vec4In): 8(ptr) Variable Function + 11: 7(fvec4) Load 10(vec4In) None + Store 9(vec4Out) 11 Volatile + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out b/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out new file mode 100644 index 0000000000..4be5b91453 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvStorageClass.rchit.out @@ -0,0 +1,30 @@ +spv.intrinsicsSpirvStorageClass.rchit +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 13 + + Capability RayTracingKHR + Capability RayTracingProvisionalKHR + Extension "SPV_KHR_ray_tracing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint ClosestHitKHR 4 "main" + Source GLSL 460 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 9 "payload" + Decorate 9(payload) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer RayPayloadKHR 7(fvec4) + 9(payload): 8(ptr) Variable RayPayloadKHR + 10: 6(float) Constant 0 + 11: 6(float) Constant 1065353216 + 12: 7(fvec4) ConstantComposite 10 11 10 11 + 4(main): 2 Function None 3 + 5: Label + Store 9(payload) 12 + Return + FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out new file mode 100644 index 0000000000..ac0c9464a6 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out @@ -0,0 +1,45 @@ +spv.intrinsicsSpirvType.rgen +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 21 + + Capability RayQueryKHR + Capability RayTraversalPrimitiveCullingKHR + Capability RayTracingKHR + Extension "SPV_KHR_ray_query" + Extension "SPV_KHR_ray_tracing" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" + Source GLSL 460 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 8 "rq" + Name 11 "as" + Decorate 11(as) Location 0 + Decorate 11(as) DescriptorSet 0 + Decorate 11(as) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 7: TypePointer Function 6 + 10: TypePointer UniformConstant 9 + 11(as): 10(ptr) Variable UniformConstant + 13: TypeInt 32 0 + 14: 13(int) Constant 0 + 15: TypeFloat 32 + 16: TypeVector 15(float) 3 + 17: 15(float) Constant 0 + 18: 16(fvec3) ConstantComposite 17 17 17 + 19: 15(float) Constant 1065353216 + 20: 16(fvec3) ConstantComposite 19 19 19 + 4(main): 2 Function None 3 + 5: Label + 8(rq): 7(ptr) Variable Function + 6: TypeRayQueryKHR + 9: TypeAccelerationStructureKHR + 12: 9 Load 11(as) + RayQueryInitializeKHR 8(rq) 12 14 14 18 17 20 19 + RayQueryTerminateKHR 8(rq) + Return + FunctionEnd diff --git a/Test/spv.intrinsicsSpirvByReference.vert b/Test/spv.intrinsicsSpirvByReference.vert new file mode 100644 index 0000000000..b02c582690 --- /dev/null +++ b/Test/spv.intrinsicsSpirvByReference.vert @@ -0,0 +1,21 @@ +#version 450 core + +#extension GL_EXT_spirv_intrinsics: enable + +spirv_instruction (set = "GLSL.std.450", id = 35) // modf +float modf(float x, spirv_by_reference float i); + +layout(location = 0) in float floatIn; +layout(location = 0) out vec2 vec2Out; +layout(location = 1) out float floatOut; + +void func(spirv_by_reference float f) +{ + f = 0.5; +} + +void main() +{ + vec2Out.x = modf(floatIn, vec2Out.y); + func(floatOut); +} diff --git a/Test/spv.intrinsicsSpirvDecorate.frag b/Test/spv.intrinsicsSpirvDecorate.frag new file mode 100644 index 0000000000..8b495cf723 --- /dev/null +++ b/Test/spv.intrinsicsSpirvDecorate.frag @@ -0,0 +1,37 @@ +#version 450 core + +#extension GL_EXT_spirv_intrinsics: enable + +#define GL_AMD_shader_explicit_vertex_parameter 1 + +spirv_decorate (extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], 11, 4992) +in vec2 gl_BaryCoordNoPerspAMD; +spirv_decorate (extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], 11, 4993) +in vec2 gl_BaryCoordNoPerspCentroidAMD; +spirv_decorate (extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], 11, 4994) +in vec2 gl_BaryCoordNoPerspSampleAMD; +spirv_decorate (extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], 11, 4995) +in vec2 gl_BaryCoordSmoothAMD; +spirv_decorate (extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], 11, 4996) +in vec2 gl_BaryCoordSmoothCentroidAMD; +spirv_decorate (extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], 11, 4997) +in vec2 gl_BaryCoordSmoothSampleAMD; +spirv_decorate (extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], 11, 4998) +in vec3 gl_BaryCoordPullModelAMD; + +#define __explicitInterpAMD spirv_decorate(extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], 4999) + +spirv_instruction(extensions = ["SPV_AMD_shader_explicit_vertex_parameter"], set = "SPV_AMD_shader_explicit_vertex_parameter", id = 1) +float interpolateAtVertexAMD(float interpolant, uint vertexIdx); + +layout(location = 0) in __explicitInterpAMD float floatIn; +layout(location = 0) out float floatOut; +layout(location = 1) out vec2 vec2Out; + +void main() +{ + floatOut = interpolateAtVertexAMD(floatIn, 1); + vec2Out = gl_BaryCoordNoPerspAMD + gl_BaryCoordNoPerspCentroidAMD + gl_BaryCoordNoPerspSampleAMD + + gl_BaryCoordSmoothAMD + gl_BaryCoordSmoothCentroidAMD + gl_BaryCoordSmoothSampleAMD + + gl_BaryCoordPullModelAMD.xy; +} diff --git a/Test/spv.intrinsicsSpirvExecutionMode.frag b/Test/spv.intrinsicsSpirvExecutionMode.frag new file mode 100644 index 0000000000..9213e746f9 --- /dev/null +++ b/Test/spv.intrinsicsSpirvExecutionMode.frag @@ -0,0 +1,17 @@ +#version 450 core + +#extension GL_EXT_spirv_intrinsics: enable + +#define GL_ARB_shader_stencil_export 1 + +spirv_execution_mode(5027); // StencilRefReplacingEXT + +spirv_decorate(extensions = ["SPV_EXT_shader_stencil_export"], capabilities = [5013], 11, 5014) +out int gl_FragStencilRef; + +layout(location = 0) in flat int color; + +void main() +{ + gl_FragStencilRef = color; +} diff --git a/Test/spv.intrinsicsSpirvInstruction.vert b/Test/spv.intrinsicsSpirvInstruction.vert new file mode 100644 index 0000000000..a4efb7da99 --- /dev/null +++ b/Test/spv.intrinsicsSpirvInstruction.vert @@ -0,0 +1,26 @@ +#version 450 core + +#extension GL_EXT_spirv_intrinsics: enable +#extension GL_ARB_gpu_shader_int64: enable + +spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056) +uvec2 clockRealtime2x32EXT(void); + +spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056) +int64_t clockRealtimeEXT(void); + +spirv_instruction (extensions = ["SPV_AMD_shader_trinary_minmax"], set = "SPV_AMD_shader_trinary_minmax", id = 1) +vec2 min3(vec2 x, vec2 y, vec2 z); + +layout(location = 0) in vec3 vec3In; + +layout(location = 0) out uvec2 uvec2Out; +layout(location = 1) out int64_t i64Out; +layout(location = 2) out vec2 vec2Out; + +void main() +{ + uvec2Out = clockRealtime2x32EXT(); + i64Out = clockRealtimeEXT(); + vec2Out = min3(vec3In.xy, vec3In.yz, vec3In.zx); +} diff --git a/Test/spv.intrinsicsSpirvLiteral.vert b/Test/spv.intrinsicsSpirvLiteral.vert new file mode 100644 index 0000000000..a6c012fe58 --- /dev/null +++ b/Test/spv.intrinsicsSpirvLiteral.vert @@ -0,0 +1,17 @@ +#version 450 core + +#extension GL_EXT_spirv_intrinsics: enable + +spirv_instruction(id = 61) +vec4 load(spirv_by_reference vec4 pointer, spirv_literal int memoryOperands); + +spirv_instruction(id = 62) +void store(spirv_by_reference vec4 pointer, vec4 object, spirv_literal int memoryOperands); + +layout(location = 0) in vec4 vec4In; +layout(location = 1) out vec4 vec4Out; + +void main() +{ + store(vec4Out, load(vec4In, /*None=*/0x0), /*Volatile=*/0x1); +} diff --git a/Test/spv.intrinsicsSpirvStorageClass.rchit b/Test/spv.intrinsicsSpirvStorageClass.rchit new file mode 100644 index 0000000000..5d23d4f895 --- /dev/null +++ b/Test/spv.intrinsicsSpirvStorageClass.rchit @@ -0,0 +1,12 @@ +#version 460 + +#extension GL_EXT_spirv_intrinsics: enable + +#define rayPayloadEXT spirv_storage_class(extensions = ["SPV_KHR_ray_tracing"], capabilities = [5353], 5338) + +layout(location = 1) rayPayloadEXT vec4 payload; + +void main() +{ + payload = vec4(0.0, 1.0, 0.0, 1.0); +} diff --git a/Test/spv.intrinsicsSpirvType.rgen b/Test/spv.intrinsicsSpirvType.rgen new file mode 100644 index 0000000000..bed072964f --- /dev/null +++ b/Test/spv.intrinsicsSpirvType.rgen @@ -0,0 +1,22 @@ +#version 460 core + +#extension GL_EXT_spirv_intrinsics: enable + +#define rayQueryEXT spirv_type (extensions = ["SPV_KHR_ray_query"], capabilities = [4472], id = 4472) +#define accelerationStructureEXT spirv_type (extensions = ["SPV_KHR_ray_query"], capabilities = [4472], id = 5341) + +spirv_instruction (extensions = ["SPV_KHR_ray_query"], capabilities = [4472, 4478], id = 4473) +void rayQueryInitializeEXT(spirv_by_reference rayQueryEXT rayQuery, accelerationStructureEXT topLevel, uint rayFlags, uint cullMask, vec3 origin, float tMin, vec3 direction, float tMax); + +spirv_instruction (extensions = ["SPV_KHR_ray_query"], capabilities = [4478], id = 4474) +void rayQueryTerminateEXT(spirv_by_reference rayQueryEXT rayQuery); + +layout(binding = 0) uniform accelerationStructureEXT as; + +void main() +{ + rayQueryEXT rq; + + rayQueryInitializeEXT(rq, as, 0, 0, vec3(0.0), 0.0, vec3(1.0), 1.0); + rayQueryTerminateEXT(rq); +} diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt index fc925eafc5..dab5f8bf2f 100644 --- a/glslang/CMakeLists.txt +++ b/glslang/CMakeLists.txt @@ -73,6 +73,7 @@ set(MACHINEINDEPENDENT_SOURCES MachineIndependent/RemoveTree.cpp MachineIndependent/Scan.cpp MachineIndependent/ShaderLang.cpp + MachineIndependent/SpirvIntrinsics.cpp MachineIndependent/SymbolTable.cpp MachineIndependent/Versions.cpp MachineIndependent/intermOut.cpp @@ -160,6 +161,7 @@ set(GLSLANG_HEADERS Include/PoolAlloc.h Include/ResourceLimits.h Include/ShHandle.h + Include/SpirvIntrinsics.h Include/Types.h) add_library(glslang ${LIB_TYPE} ${BISON_GLSLParser_OUTPUT_SOURCE} ${GLSLANG_SOURCES} ${GLSLANG_HEADERS}) diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index 55bdd25da5..1d9da12d6f 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -65,6 +65,10 @@ enum TBasicType { EbtAccStruct, EbtReference, EbtRayQuery, +#ifndef GLSLANG_WEB + // SPIR-V type defined by spirv_type + EbtSpirvType, +#endif // HLSL types that live only temporarily. EbtString, @@ -91,6 +95,9 @@ enum TStorageQualifier { EvqUniform, // read only, shared with app EvqBuffer, // read/write, shared with app EvqShared, // compute shader's read/write 'shared' qualifier +#ifndef GLSLANG_WEB + EvqSpirvStorageClass, // spirv_storage_class +#endif EvqPayload, EvqPayloadIn, @@ -321,6 +328,9 @@ __inline const char* GetStorageQualifierString(TStorageQualifier q) case EvqGlobal: return "global"; break; case EvqConst: return "const"; break; case EvqConstReadOnly: return "const (read only)"; break; +#ifndef GLSLANG_WEB + case EvqSpirvStorageClass: return "spirv_storage_class"; break; +#endif case EvqVaryingIn: return "in"; break; case EvqVaryingOut: return "out"; break; case EvqUniform: return "uniform"; break; diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index 89f0192cf5..1e47239a7a 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -194,6 +194,10 @@ template , class PRED = std::equal_t class TUnorderedMap : public std::unordered_map > > { }; +template > +class TSet : public std::set > { +}; + // // Persistent string memory. Should only be used for strings that survive // across compiles/links. diff --git a/glslang/Include/SpirvIntrinsics.h b/glslang/Include/SpirvIntrinsics.h new file mode 100644 index 0000000000..e7a999d408 --- /dev/null +++ b/glslang/Include/SpirvIntrinsics.h @@ -0,0 +1,136 @@ +// +// Copyright(C) 2021 Advanced Micro Devices, Inc. +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#pragma once + +#ifndef GLSLANG_WEB + +// +// GL_EXT_spirv_intrinsics +// +#include "Common.h" + +namespace glslang { + +class TIntermTyped; +class TIntermConstantUnion; +class TType; + +// SPIR-V requirements +struct TSpirvRequirement { + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + // capability = [..] + TSet extensions; + // extension = [..] + TSet capabilities; +}; + +// SPIR-V execution modes +struct TSpirvExecutionMode { + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + // spirv_execution_mode + TMap> modes; + // spirv_execution_mode_id + TMap > modeIds; +}; + +// SPIR-V decorations +struct TSpirvDecorate { + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + // spirv_decorate + TMap > decorates; + // spirv_decorate_id + TMap > decorateIds; + // spirv_decorate_string + TMap > decorateStrings; +}; + +// SPIR-V instruction +struct TSpirvInstruction { + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + TSpirvInstruction() { set = ""; id = -1; } + + bool operator==(const TSpirvInstruction& rhs) const { return set == rhs.set && id == rhs.id; } + bool operator!=(const TSpirvInstruction& rhs) const { return !operator==(rhs); } + + // spirv_instruction + TString set; + int id; +}; + +// SPIR-V type parameter +struct TSpirvTypeParameter { + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + TSpirvTypeParameter(const TIntermConstantUnion* arg) { isConstant = true; constant = arg; } + TSpirvTypeParameter(const TType* arg) { isConstant = false; type = arg; } + + bool operator==(const TSpirvTypeParameter& rhs) const + { + return isConstant == rhs.isConstant && ((isConstant && constant == rhs.constant) || (!isConstant && type == rhs.type)); + } + bool operator!=(const TSpirvTypeParameter& rhs) const { return !operator==(rhs); } + + bool isConstant; + union { + const TIntermConstantUnion* constant; + const TType* type; + }; +}; + +typedef TVector TSpirvTypeParameters; + +// SPIR-V type +struct TSpirvType { + POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) + + bool operator==(const TSpirvType& rhs) const + { + return spirvInst == rhs.spirvInst && typeParams == rhs.typeParams; + } + bool operator!=(const TSpirvType& rhs) const { return !operator==(rhs); } + + // spirv_type + TSpirvInstruction spirvInst; + TSpirvTypeParameters typeParams; +}; + +} // end namespace glslang + +#endif // GLSLANG_WEB diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 149ba761bb..a6bf191d75 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -44,11 +44,14 @@ #include "../Include/BaseTypes.h" #include "../Public/ShaderLang.h" #include "arrays.h" +#include "SpirvIntrinsics.h" #include namespace glslang { +class TIntermAggregate; + const int GlslangMaxTypeLength = 200; // TODO: need to print block/struct one member per line, so this can stay bounded const char* const AnonymousPrefix = "anon@"; // for something like a block whose members can be directly accessed @@ -487,7 +490,6 @@ enum TShaderInterface EsiCount }; - class TQualifier { public: static const int layoutNotSet = -1; @@ -501,6 +503,8 @@ class TQualifier { #ifndef GLSLANG_WEB noContraction = false; nullInit = false; + spirvByReference = false; + spirvLiteral = false; #endif defaultBlock = false; } @@ -518,6 +522,12 @@ class TQualifier { nullInit = false; defaultBlock = false; clearLayout(); +#ifndef GLSLANG_WEB + spirvStorageClass = -1; + spirvDecorate = nullptr; + spirvByReference = false; + spirvLiteral = false; +#endif } void clearInterstage() @@ -596,6 +606,10 @@ class TQualifier { bool isPervertexNV() const { return false; } void setNullInit() { } bool isNullInit() const { return false; } + void setSpirvByReference() { } + bool isSpirvByReference() { return false; } + void setSpirvLiteral() { } + bool isSpirvLiteral() { return false; } #else bool noContraction: 1; // prevent contraction and reassociation, e.g., for 'precise' keyword, and expressions it affects bool nopersp : 1; @@ -618,6 +632,8 @@ class TQualifier { bool shadercallcoherent : 1; bool nonprivate : 1; bool nullInit : 1; + bool spirvByReference : 1; + bool spirvLiteral : 1; bool isWriteOnly() const { return writeonly; } bool isReadOnly() const { return readonly; } bool isRestrict() const { return restrict; } @@ -655,6 +671,10 @@ class TQualifier { bool isPervertexNV() const { return pervertexNV; } void setNullInit() { nullInit = true; } bool isNullInit() const { return nullInit; } + void setSpirvByReference() { spirvByReference = true; } + bool isSpirvByReference() const { return spirvByReference; } + void setSpirvLiteral() { spirvLiteral = true; } + bool isSpirvLiteral() const { return spirvLiteral; } #endif bool isPipeInput() const @@ -948,6 +968,10 @@ class TQualifier { bool layoutViewportRelative; int layoutSecondaryViewportRelativeOffset; bool layoutShaderRecord; + + // GL_EXT_spirv_intrinsics + int spirvStorageClass; + TSpirvDecorate* spirvDecorate; #endif bool hasUniformLayout() const @@ -1079,6 +1103,15 @@ class TQualifier { { return nonUniform; } + + // GL_EXT_spirv_intrinsics + bool hasSprivDecorate() const { return spirvDecorate != nullptr; } + void setSpirvDecorate(int decoration, const TIntermAggregate* args = nullptr); + void setSpirvDecorateId(int decoration, const TIntermAggregate* args); + void setSpirvDecorateString(int decoration, const TIntermAggregate* args); + const TSpirvDecorate& getSpirvDecorate() const { assert(spirvDecorate); return *spirvDecorate; } + TSpirvDecorate& getSpirvDecorate() { assert(spirvDecorate); return *spirvDecorate; } + TString getSpirvDecorateQualifierString() const; #endif bool hasSpecConstantId() const { @@ -1423,6 +1456,10 @@ class TPublicType { const TType* userDef; TSourceLoc loc; TArraySizes* typeParameters; +#ifndef GLSLANG_WEB + // SPIR-V type defined by spirv_type directive + TSpirvType* spirvType; +#endif #ifdef GLSLANG_WEB bool isCoopmat() const { return false; } @@ -1441,6 +1478,9 @@ class TPublicType { loc = l; typeParameters = nullptr; coopmat = false; +#ifndef GLSLANG_WEB + spirvType = nullptr; +#endif } void initQualifiers(bool global = false) @@ -1477,6 +1517,11 @@ class TPublicType { return matrixCols == 0 && vectorSize == 1 && arraySizes == nullptr && userDef == nullptr; } +#ifndef GLSLANG_WEB + // GL_EXT_spirv_intrinsics + void setSpirvType(const TSpirvInstruction& spirvInst, const TSpirvTypeParameters* typeParams = nullptr); +#endif + // "Image" is a superset of "Subpass" bool isImage() const { return basicType == EbtSampler && sampler.isImage(); } bool isSubpass() const { return basicType == EbtSampler && sampler.isSubpass(); } @@ -1494,6 +1539,9 @@ class TType { bool isVector = false) : basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false), arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr) +#ifndef GLSLANG_WEB + , spirvType(nullptr) +#endif { sampler.clear(); qualifier.clear(); @@ -1505,6 +1553,9 @@ class TType { bool isVector = false) : basicType(t), vectorSize(vs), matrixCols(mc), matrixRows(mr), vector1(isVector && vs == 1), coopmat(false), arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(nullptr) +#ifndef GLSLANG_WEB + , spirvType(nullptr) +#endif { sampler.clear(); qualifier.clear(); @@ -1518,6 +1569,9 @@ class TType { basicType(p.basicType), vectorSize(p.vectorSize), matrixCols(p.matrixCols), matrixRows(p.matrixRows), vector1(false), coopmat(p.coopmat), arraySizes(p.arraySizes), structure(nullptr), fieldName(nullptr), typeName(nullptr), typeParameters(p.typeParameters) +#ifndef GLSLANG_WEB + , spirvType(p.spirvType) +#endif { if (basicType == EbtSampler) sampler = p.sampler; @@ -1552,6 +1606,9 @@ class TType { basicType(EbtSampler), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), arraySizes(as), structure(nullptr), fieldName(nullptr), typeName(nullptr), sampler(sampler), typeParameters(nullptr) +#ifndef GLSLANG_WEB + , spirvType(nullptr) +#endif { qualifier.clear(); qualifier.storage = q; @@ -1602,6 +1659,9 @@ class TType { TType(TTypeList* userDef, const TString& n) : basicType(EbtStruct), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr) +#ifndef GLSLANG_WEB + , spirvType(nullptr) +#endif { sampler.clear(); qualifier.clear(); @@ -1611,6 +1671,9 @@ class TType { TType(TTypeList* userDef, const TString& n, const TQualifier& q) : basicType(EbtBlock), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), coopmat(false), qualifier(q), arraySizes(nullptr), structure(userDef), fieldName(nullptr), typeParameters(nullptr) +#ifndef GLSLANG_WEB + , spirvType(nullptr) +#endif { sampler.clear(); typeName = NewPoolTString(n.c_str()); @@ -1619,6 +1682,9 @@ class TType { explicit TType(TBasicType t, const TType &p, const TString& n) : basicType(t), vectorSize(1), matrixCols(0), matrixRows(0), vector1(false), arraySizes(nullptr), structure(nullptr), fieldName(nullptr), typeName(nullptr) +#ifndef GLSLANG_WEB + , spirvType(nullptr) +#endif { assert(t == EbtReference); typeName = NewPoolTString(n.c_str()); @@ -1649,6 +1715,9 @@ class TType { referentType = copyOf.referentType; } typeParameters = copyOf.typeParameters; +#ifndef GLSLANG_WEB + spirvType = copyOf.spirvType; +#endif coopmat = copyOf.isCoopMat(); } @@ -1770,7 +1839,7 @@ class TType { } virtual bool isOpaque() const { return basicType == EbtSampler #ifndef GLSLANG_WEB - || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery + || basicType == EbtAtomicUint || basicType == EbtAccStruct || basicType == EbtRayQuery #endif ; } virtual bool isBuiltIn() const { return getQualifier().builtIn != EbvNone; } @@ -2018,8 +2087,6 @@ class TType { } } - - const char* getBasicString() const { return TType::getBasicString(basicType); @@ -2050,6 +2117,7 @@ class TType { case EbtRayQuery: return "rayQueryEXT"; case EbtReference: return "reference"; case EbtString: return "string"; + case EbtSpirvType: return "spirv_type"; #endif default: return "unknown type"; } @@ -2070,6 +2138,9 @@ class TType { const auto appendUint = [&](unsigned int u) { typeString.append(std::to_string(u).c_str()); }; const auto appendInt = [&](int i) { typeString.append(std::to_string(i).c_str()); }; + if (qualifier.hasSprivDecorate()) + appendStr(qualifier.getSpirvDecorateQualifierString().c_str()); + if (qualifier.hasLayout()) { // To reduce noise, skip this if the only layout is an xfb_buffer // with no triggering xfb_offset. @@ -2219,6 +2290,10 @@ class TType { appendStr(" nonuniform"); if (qualifier.isNullInit()) appendStr(" null-init"); + if (qualifier.isSpirvByReference()) + appendStr(" spirv_by_reference"); + if (qualifier.isSpirvLiteral()) + appendStr(" spirv_literal"); appendStr(" "); appendStr(getStorageQualifierString()); if (isArray()) { @@ -2455,6 +2530,15 @@ class TType { (typeParameters != nullptr && right.typeParameters != nullptr && *typeParameters == *right.typeParameters)); } +#ifndef GLSLANG_WEB + // See if two type's SPIR-V type contents match + bool sameSpirvType(const TType& right) const + { + return ((spirvType == nullptr && right.spirvType == nullptr) || + (spirvType != nullptr && right.spirvType != nullptr && *spirvType == *right.spirvType)); + } +#endif + // See if two type's elements match in all ways except basic type bool sameElementShape(const TType& right) const { @@ -2493,7 +2577,11 @@ class TType { // See if two types match in all ways (just the actual type, not qualification) bool operator==(const TType& right) const { +#ifndef GLSLANG_WEB + return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right) && sameSpirvType(right); +#else return sameElementType(right) && sameArrayness(right) && sameTypeParameters(right); +#endif } bool operator!=(const TType& right) const @@ -2512,6 +2600,10 @@ class TType { return 0; } +#ifndef GLSLANG_WEB + const TSpirvType& getSpirvType() const { assert(spirvType); return *spirvType; } +#endif + protected: // Require consumer to pick between deep copy and shallow copy. TType(const TType& type); @@ -2524,6 +2616,19 @@ class TType { { shallowCopy(copyOf); +#ifndef GLSLANG_WEB + // GL_EXT_spirv_intrinsics + if (copyOf.qualifier.spirvDecorate) { + qualifier.spirvDecorate = new TSpirvDecorate; + *qualifier.spirvDecorate = *copyOf.qualifier.spirvDecorate; + } + + if (copyOf.spirvType) { + spirvType = new TSpirvType; + *spirvType = *copyOf.spirvType; + } +#endif + if (copyOf.arraySizes) { arraySizes = new TArraySizes; *arraySizes = *copyOf.arraySizes; @@ -2583,6 +2688,9 @@ class TType { TString *typeName; // for structure type name TSampler sampler; TArraySizes* typeParameters;// nullptr unless a parameterized type; can be shared across types +#ifndef GLSLANG_WEB + TSpirvType* spirvType; // SPIR-V type defined by spirv_type directive +#endif }; } // end namespace glslang diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 677b09050d..172c09cf35 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -71,6 +71,9 @@ enum TOperator { EOpFunctionCall, EOpFunction, // For function definition EOpParameters, // an aggregate listing the parameters to a function +#ifndef GLSLANG_WEB + EOpSpirvInst, +#endif // // Unary operators @@ -1616,8 +1619,15 @@ class TIntermUnary : public TIntermOperator { virtual TIntermUnary* getAsUnaryNode() { return this; } virtual const TIntermUnary* getAsUnaryNode() const { return this; } virtual void updatePrecision(); +#ifndef GLSLANG_WEB + void setSpirvInstruction(const TSpirvInstruction& inst) { spirvInst = inst; } + const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; } +#endif protected: TIntermTyped* operand; +#ifndef GLSLANG_WEB + TSpirvInstruction spirvInst; +#endif }; typedef TVector TIntermSequence; @@ -1648,6 +1658,10 @@ class TIntermAggregate : public TIntermOperator { bool getDebug() const { return debug; } void setPragmaTable(const TPragmaTable& pTable); const TPragmaTable& getPragmaTable() const { return *pragmaTable; } +#ifndef GLSLANG_WEB + void setSpirvInstruction(const TSpirvInstruction& inst) { spirvInst = inst; } + const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; } +#endif protected: TIntermAggregate(const TIntermAggregate&); // disallow copy constructor TIntermAggregate& operator=(const TIntermAggregate&); // disallow assignment operator @@ -1658,6 +1672,9 @@ class TIntermAggregate : public TIntermOperator { bool optimize; bool debug; TPragmaTable* pragmaTable; +#ifndef GLSLANG_WEB + TSpirvInstruction spirvInst; +#endif }; // diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 45c9362b3b..722d976630 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1092,12 +1092,31 @@ TFunction* TParseContext::handleFunctionDeclarator(const TSourceLoc& loc, TFunct TSymbol* symbol = symbolTable.find(function.getMangledName(), &builtIn); if (symbol && symbol->getAsFunction() && builtIn) requireProfile(loc, ~EEsProfile, "redefinition of built-in function"); +#ifndef GLSLANG_WEB + // Check the validity of using spirv_literal qualifier + for (int i = 0; i < function.getParamCount(); ++i) { + if (function[i].type->getQualifier().isSpirvLiteral() && function.getBuiltInOp() != EOpSpirvInst) + error(loc, "'spirv_literal' can only be used on functions defined with 'spirv_instruction' for argument", + function.getName().c_str(), "%d", i + 1); + } + + // For function declaration with SPIR-V instruction qualifier, always ignore the built-in function and + // respect this redeclared one. + if (symbol && builtIn && function.getBuiltInOp() == EOpSpirvInst) + symbol = nullptr; +#endif const TFunction* prevDec = symbol ? symbol->getAsFunction() : 0; if (prevDec) { if (prevDec->isPrototyped() && prototype) profileRequires(loc, EEsProfile, 300, nullptr, "multiple prototypes for same function"); if (prevDec->getType() != function.getType()) error(loc, "overloaded functions must have the same return type", function.getName().c_str(), ""); +#ifndef GLSLANG_WEB + if (prevDec->getSpirvInstruction() != function.getSpirvInstruction()) { + error(loc, "overloaded functions must have the same qualifiers", function.getName().c_str(), + "spirv_instruction"); + } +#endif for (int i = 0; i < prevDec->getParamCount(); ++i) { if ((*prevDec)[i].type->getQualifier().storage != function[i].type->getQualifier().storage) error(loc, "overloaded functions must have the same parameter storage qualifiers for argument", function[i].type->getStorageQualifierString(), "%d", i+1); @@ -1299,6 +1318,15 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction if (lValueErrorCheck(arguments->getLoc(), "assign", arg->getAsTyped())) error(arguments->getLoc(), "Non-L-value cannot be passed for 'out' or 'inout' parameters.", "out", ""); } +#ifndef GLSLANG_WEB + if (formalQualifier.isSpirvLiteral()) { + if (!arg->getAsTyped()->getQualifier().isFrontEndConstant()) { + error(arguments->getLoc(), + "Non front-end constant expressions cannot be passed for 'spirv_literal' parameters.", + "spirv_literal", ""); + } + } +#endif const TType& argType = arg->getAsTyped()->getType(); const TQualifier& argQualifier = argType.getQualifier(); if (argQualifier.isMemory() && (argType.containsOpaque() || argType.isReference())) { @@ -1353,6 +1381,11 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction if (builtIn && fnCandidate->getBuiltInOp() != EOpNull) { // A function call mapped to a built-in operation. result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate); +#ifndef GLSLANG_WEB + } else if (fnCandidate->getBuiltInOp() == EOpSpirvInst) { + // When SPIR-V instruction qualifier is specified, the function call is still mapped to a built-in operation. + result = handleBuiltInFunctionCall(loc, arguments, *fnCandidate); +#endif } else { // This is a function call not mapped to built-in operator. // It could still be a built-in function, but only if PureOperatorBuiltins == false. @@ -1430,6 +1463,35 @@ TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNo } else if (result->getAsOperator()) builtInOpCheck(loc, function, *result->getAsOperator()); +#ifndef GLSLANG_WEB + // Special handling for function call with SPIR-V instruction qualifier specified + if (function.getBuiltInOp() == EOpSpirvInst) { + if (auto agg = result->getAsAggregate()) { + // Propogate spirv_by_reference/spirv_literal from parameters to arguments + auto& sequence = agg->getSequence(); + for (unsigned i = 0; i < sequence.size(); ++i) { + if (function[i].type->getQualifier().isSpirvByReference()) + sequence[i]->getAsTyped()->getQualifier().setSpirvByReference(); + if (function[i].type->getQualifier().isSpirvLiteral()) + sequence[i]->getAsTyped()->getQualifier().setSpirvLiteral(); + } + + // Attach the function call to SPIR-V intruction + agg->setSpirvInstruction(function.getSpirvInstruction()); + } else if (auto unaryNode = result->getAsUnaryNode()) { + // Propogate spirv_by_reference/spirv_literal from parameters to arguments + if (function[0].type->getQualifier().isSpirvByReference()) + unaryNode->getOperand()->getQualifier().setSpirvByReference(); + if (function[0].type->getQualifier().isSpirvLiteral()) + unaryNode->getOperand()->getQualifier().setSpirvLiteral(); + + // Attach the function call to SPIR-V intruction + unaryNode->setSpirvInstruction(function.getSpirvInstruction()); + } else + assert(0); + } +#endif + return result; } @@ -2931,7 +2993,8 @@ void TParseContext::reservedErrorCheck(const TSourceLoc& loc, const TString& ide // "Identifiers starting with "gl_" are reserved for use by OpenGL, and may not be // declared in a shader; this results in a compile-time error." if (! symbolTable.atBuiltInLevel()) { - if (builtInName(identifier)) + if (builtInName(identifier) && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) + // The extension GL_EXT_spirv_intrinsics allows us to declare identifiers starting with "gl_". error(loc, "identifiers starting with \"gl_\" are reserved", identifier.c_str(), ""); // "__" are not supposed to be an error. ES 300 (and desktop) added the clarification: @@ -2939,7 +3002,8 @@ void TParseContext::reservedErrorCheck(const TSourceLoc& loc, const TString& ide // reserved; using such a name does not itself result in an error, but may result // in undefined behavior." // however, before that, ES tests required an error. - if (identifier.find("__") != TString::npos) { + if (identifier.find("__") != TString::npos && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) { + // The extension GL_EXT_spirv_intrinsics allows us to declare identifiers starting with "__". if (isEsProfile() && version < 300) error(loc, "identifiers containing consecutive underscores (\"__\") are reserved, and an error if version < 300", identifier.c_str(), ""); else @@ -2960,14 +3024,16 @@ void TParseContext::reservedPpErrorCheck(const TSourceLoc& loc, const char* iden // single underscore) are also reserved, and defining such a name results in a // compile-time error." // however, before that, ES tests required an error. - if (strncmp(identifier, "GL_", 3) == 0) + if (strncmp(identifier, "GL_", 3) == 0 && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) + // The extension GL_EXT_spirv_intrinsics allows us to declare macros prefixed with "GL_". ppError(loc, "names beginning with \"GL_\" can't be (un)defined:", op, identifier); else if (strncmp(identifier, "defined", 8) == 0) if (relaxedErrors()) ppWarn(loc, "\"defined\" is (un)defined:", op, identifier); else ppError(loc, "\"defined\" can't be (un)defined:", op, identifier); - else if (strstr(identifier, "__") != 0) { + else if (strstr(identifier, "__") != 0 && !extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) { + // The extension GL_EXT_spirv_intrinsics allows us to declare macros prefixed with "__". if (isEsProfile() && version >= 300 && (strcmp(identifier, "__LINE__") == 0 || strcmp(identifier, "__FILE__") == 0 || @@ -3582,6 +3648,14 @@ void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& q if (!nonuniformOkay && qualifier.isNonUniform()) error(loc, "for non-parameter, can only apply to 'in' or no storage qualifier", "nonuniformEXT", ""); +#ifndef GLSLANG_WEB + if (qualifier.isSpirvByReference()) + error(loc, "can only apply to parameter", "spirv_by_reference", ""); + + if (qualifier.isSpirvLiteral()) + error(loc, "can only apply to parameter", "spirv_literal", ""); +#endif + // Storage qualifier isn't ready for memberQualifierCheck, we should skip invariantCheck for it. if (!isMemberCheck || structNestingLevel > 0) invariantCheck(loc, qualifier); @@ -3843,6 +3917,41 @@ void TParseContext::mergeQualifiers(const TSourceLoc& loc, TQualifier& dst, cons MERGE_SINGLETON(nonUniform); #endif +#ifndef GLSLANG_WEB + // SPIR-V storage class qualifier (GL_EXT_spirv_intrinsics) + dst.spirvStorageClass = src.spirvStorageClass; + + // SPIR-V decorate qualifiers (GL_EXT_spirv_intrinsics) + if (src.hasSprivDecorate()) { + if (dst.hasSprivDecorate()) { + const TSpirvDecorate& srcSpirvDecorate = src.getSpirvDecorate(); + TSpirvDecorate& dstSpirvDecorate = dst.getSpirvDecorate(); + for (auto& decorate : srcSpirvDecorate.decorates) { + if (dstSpirvDecorate.decorates.find(decorate.first) != dstSpirvDecorate.decorates.end()) + error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate", "(decoration=%u)", decorate.first); + else + dstSpirvDecorate.decorates.insert(decorate); + } + + for (auto& decorateId : srcSpirvDecorate.decorateIds) { + if (dstSpirvDecorate.decorateIds.find(decorateId.first) != dstSpirvDecorate.decorateIds.end()) + error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate_id", "(decoration=%u)", decorateId.first); + else + dstSpirvDecorate.decorateIds.insert(decorateId); + } + + for (auto& decorateString : srcSpirvDecorate.decorateStrings) { + if (dstSpirvDecorate.decorates.find(decorateString.first) != dstSpirvDecorate.decorates.end()) + error(loc, "too many SPIR-V decorate qualifiers", "spirv_decorate_string", "(decoration=%u)", decorateString.first); + else + dstSpirvDecorate.decorates.insert(decorateString); + } + } else { + dst.spirvDecorate = src.spirvDecorate; + } + } +#endif + if (repeated) error(loc, "replicated qualifiers", "", ""); } @@ -4806,6 +4915,17 @@ void TParseContext::paramCheckFix(const TSourceLoc& loc, const TQualifier& quali } if (qualifier.isNonUniform()) type.getQualifier().nonUniform = qualifier.nonUniform; +#ifndef GLSLANG_WEB + if (qualifier.isSpirvByReference()) + type.getQualifier().setSpirvByReference(); + if (qualifier.isSpirvLiteral()) { + if (type.getBasicType() == EbtFloat || type.getBasicType() == EbtInt || type.getBasicType() == EbtUint || + type.getBasicType() == EbtBool) + type.getQualifier().setSpirvLiteral(); + else + error(loc, "cannot use spirv_literal qualifier", type.getBasicTypeString().c_str(), ""); +#endif + } paramCheckFixStorage(loc, qualifier.storage, type); } @@ -5873,6 +5993,9 @@ void TParseContext::layoutObjectCheck(const TSourceLoc& loc, const TSymbol& symb case EvqVaryingIn: case EvqVaryingOut: if (!type.getQualifier().isTaskMemory() && +#ifndef GLSLANG_WEB + !type.getQualifier().hasSprivDecorate() && +#endif (type.getBasicType() != EbtBlock || (!(*type.getStruct())[0].type->getQualifier().hasLocation() && (*type.getStruct())[0].type->getQualifier().builtIn == EbvNone))) @@ -5934,6 +6057,11 @@ void TParseContext::layoutMemberLocationArrayCheck(const TSourceLoc& loc, bool m // Do layout error checking with respect to a type. void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) { +#ifndef GLSLANG_WEB + if (extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) + return; // Skip any check if GL_EXT_spirv_intrinsics is turned on +#endif + const TQualifier& qualifier = type.getQualifier(); // first, intra-layout qualifier-only error checking @@ -7940,6 +8068,10 @@ void TParseContext::declareBlock(const TSourceLoc& loc, TTypeList& typeList, con memberQualifier.perViewNV = currentBlockQualifier.perViewNV; if (currentBlockQualifier.perTaskNV) memberQualifier.perTaskNV = currentBlockQualifier.perTaskNV; + if (memberQualifier.storage == EvqSpirvStorageClass) + error(memberLoc, "member cannot have a spirv_storage_class qualifier", memberType.getFieldName().c_str(), ""); + if (memberQualifier.hasSprivDecorate() && !memberQualifier.getSpirvDecorate().decorateIds.empty()) + error(memberLoc, "member cannot have a spirv_decorate_id qualifier", memberType.getFieldName().c_str(), ""); #endif if ((currentBlockQualifier.storage == EvqUniform || currentBlockQualifier.storage == EvqBuffer) && (memberQualifier.isInterpolation() || memberQualifier.isAuxiliary())) error(memberLoc, "member of uniform or buffer block cannot have an auxiliary or interpolation qualifier", memberType.getFieldName().c_str(), ""); diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 70d3572625..c9e633420f 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -472,6 +472,20 @@ class TParseContext : public TParseContextBase { void handleLoopAttributes(const TAttributes& attributes, TIntermNode*); // Function attributes void handleFunctionAttributes(const TSourceLoc&, const TAttributes&, TFunction*); + + // GL_EXT_spirv_intrinsics + TSpirvRequirement* makeSpirvRequirement(const TSourceLoc& loc, const TString& name, + const TIntermAggregate* extensions, const TIntermAggregate* capabilities); + TSpirvRequirement* mergeSpirvRequirements(const TSourceLoc& loc, TSpirvRequirement* spirvReq1, + TSpirvRequirement* spirvReq2); + TSpirvTypeParameters* makeSpirvTypeParameters(const TSourceLoc& loc, const TIntermConstantUnion* constant); + TSpirvTypeParameters* makeSpirvTypeParameters(const TPublicType& type); + TSpirvTypeParameters* mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, + TSpirvTypeParameters* spirvTypeParams2); + TSpirvInstruction* makeSpirvInstruction(const TSourceLoc& loc, const TString& name, const TString& value); + TSpirvInstruction* makeSpirvInstruction(const TSourceLoc& loc, const TString& name, int value); + TSpirvInstruction* mergeSpirvInstruction(const TSourceLoc& loc, TSpirvInstruction* spirvInst1, + TSpirvInstruction* spirvInst2); #endif void checkAndResizeMeshViewDim(const TSourceLoc&, TType&, bool isBlockMember); diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index 78c8a365d7..c387aede0e 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -586,6 +586,18 @@ void TScanContext::fillInKeywordMap() (*KeywordMap)["f64mat4x2"] = F64MAT4X2; (*KeywordMap)["f64mat4x3"] = F64MAT4X3; (*KeywordMap)["f64mat4x4"] = F64MAT4X4; + + // GL_EXT_spirv_intrinsics + (*KeywordMap)["spirv_instruction"] = SPIRV_INSTRUCTION; + (*KeywordMap)["spirv_execution_mode"] = SPIRV_EXECUTION_MODE; + (*KeywordMap)["spirv_execution_mode_id"] = SPIRV_EXECUTION_MODE_ID; + (*KeywordMap)["spirv_decorate"] = SPIRV_DECORATE; + (*KeywordMap)["spirv_decorate_id"] = SPIRV_DECORATE_ID; + (*KeywordMap)["spirv_decorate_string"] = SPIRV_DECORATE_STRING; + (*KeywordMap)["spirv_type"] = SPIRV_TYPE; + (*KeywordMap)["spirv_storage_class"] = SPIRV_STORAGE_CLASS; + (*KeywordMap)["spirv_by_reference"] = SPIRV_BY_REFERENCE; + (*KeywordMap)["spirv_literal"] = SPIRV_LITERAL; #endif (*KeywordMap)["sampler2D"] = SAMPLER2D; @@ -1747,6 +1759,21 @@ int TScanContext::tokenizeIdentifier() return keyword; else return identifierOrType(); + + case SPIRV_INSTRUCTION: + case SPIRV_EXECUTION_MODE: + case SPIRV_EXECUTION_MODE_ID: + case SPIRV_DECORATE: + case SPIRV_DECORATE_ID: + case SPIRV_DECORATE_STRING: + case SPIRV_TYPE: + case SPIRV_STORAGE_CLASS: + case SPIRV_BY_REFERENCE: + case SPIRV_LITERAL: + if (parseContext.symbolTable.atBuiltInLevel() || + parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) + return keyword; + return identifierOrType(); #endif default: diff --git a/glslang/MachineIndependent/SpirvIntrinsics.cpp b/glslang/MachineIndependent/SpirvIntrinsics.cpp new file mode 100644 index 0000000000..38094eaaf7 --- /dev/null +++ b/glslang/MachineIndependent/SpirvIntrinsics.cpp @@ -0,0 +1,355 @@ +// +// Copyright(C) 2021 Advanced Micro Devices, Inc. +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#ifndef GLSLANG_WEB + +// +// GL_EXT_spirv_intrinsics +// +#include "../Include/intermediate.h" +#include "../Include/SpirvIntrinsics.h" +#include "../Include/Types.h" +#include "ParseHelper.h" + +namespace glslang { + +// +// Handle SPIR-V requirements +// +TSpirvRequirement* TParseContext::makeSpirvRequirement(const TSourceLoc& loc, const TString& name, + const TIntermAggregate* extensions, + const TIntermAggregate* capabilities) +{ + TSpirvRequirement* spirvReq = new TSpirvRequirement; + + if (name == "extensions") { + assert(extensions); + for (auto extension : extensions->getSequence()) { + assert(extension->getAsConstantUnion()); + spirvReq->extensions.insert(*extension->getAsConstantUnion()->getConstArray()[0].getSConst()); + } + } else if (name == "capabilities") { + assert(capabilities); + for (auto capability : capabilities->getSequence()) { + assert(capability->getAsConstantUnion()); + spirvReq->capabilities.insert(capability->getAsConstantUnion()->getConstArray()[0].getIConst()); + } + } else + error(loc, "unknow SPIR-V requirement", name.c_str(), ""); + + return spirvReq; +} + +TSpirvRequirement* TParseContext::mergeSpirvRequirements(const TSourceLoc& loc, TSpirvRequirement* spirvReq1, + TSpirvRequirement* spirvReq2) +{ + // Merge the second SPIR-V requirement to the first one + if (!spirvReq2->extensions.empty()) { + if (spirvReq1->extensions.empty()) + spirvReq1->extensions = spirvReq2->extensions; + else + error(loc, "too many SPIR-V requirements", "extensions", ""); + } + + if (!spirvReq2->capabilities.empty()) { + if (spirvReq1->capabilities.empty()) + spirvReq1->capabilities = spirvReq2->capabilities; + else + error(loc, "too many SPIR-V requirements", "capabilities", ""); + } + + return spirvReq1; +} + +void TIntermediate::insertSpirvRequirement(const TSpirvRequirement* spirvReq) +{ + if (!spirvRequirement) + spirvRequirement = new TSpirvRequirement; + + for (auto extension : spirvReq->extensions) + spirvRequirement->extensions.insert(extension); + + for (auto capability : spirvReq->capabilities) + spirvRequirement->capabilities.insert(capability); +} + +// +// Handle SPIR-V execution modes +// +void TIntermediate::insertSpirvExecutionMode(int executionMode, const TIntermAggregate* args) +{ + if (!spirvExecutionMode) + spirvExecutionMode = new TSpirvExecutionMode; + + TVector extraOperands; + if (args) { + for (auto arg : args->getSequence()) { + auto extraOperand = arg->getAsConstantUnion(); + assert(extraOperand != nullptr); + extraOperands.push_back(extraOperand); + } + } + spirvExecutionMode->modes[executionMode] = extraOperands; +} + +void TIntermediate::insertSpirvExecutionModeId(int executionMode, const TIntermAggregate* args) +{ + if (!spirvExecutionMode) + spirvExecutionMode = new TSpirvExecutionMode; + + assert(args); + TVector extraOperands; + + for (auto arg : args->getSequence()) { + auto extraOperand = arg->getAsConstantUnion(); + assert(extraOperand != nullptr); + extraOperands.push_back(extraOperand); + } + spirvExecutionMode->modeIds[executionMode] = extraOperands; +} + +// +// Handle SPIR-V decorate qualifiers +// +void TQualifier::setSpirvDecorate(int decoration, const TIntermAggregate* args) +{ + if (!spirvDecorate) + spirvDecorate = new TSpirvDecorate; + + TVector extraOperands; + if (args) { + for (auto arg : args->getSequence()) { + auto extraOperand = arg->getAsConstantUnion(); + assert(extraOperand != nullptr); + extraOperands.push_back(extraOperand); + } + } + spirvDecorate->decorates[decoration] = extraOperands; +} + +void TQualifier::setSpirvDecorateId(int decoration, const TIntermAggregate* args) +{ + if (!spirvDecorate) + spirvDecorate = new TSpirvDecorate; + + assert(args); + TVector extraOperands; + for (auto arg : args->getSequence()) { + auto extraOperand = arg->getAsConstantUnion(); + assert(extraOperand != nullptr); + extraOperands.push_back(extraOperand); + } + spirvDecorate->decorateIds[decoration] = extraOperands; +} + +void TQualifier::setSpirvDecorateString(int decoration, const TIntermAggregate* args) +{ + if (!spirvDecorate) + spirvDecorate = new TSpirvDecorate; + + assert(args); + TVector extraOperands; + for (auto arg : args->getSequence()) { + auto extraOperand = arg->getAsConstantUnion(); + assert(extraOperand != nullptr); + extraOperands.push_back(extraOperand); + } + spirvDecorate->decorateStrings[decoration] = extraOperands; +} + +TString TQualifier::getSpirvDecorateQualifierString() const +{ + assert(spirvDecorate); + + TString qualifierString; + + const auto appendFloat = [&](float f) { qualifierString.append(std::to_string(f).c_str()); }; + const auto appendInt = [&](int i) { qualifierString.append(std::to_string(i).c_str()); }; + const auto appendUint = [&](unsigned int u) { qualifierString.append(std::to_string(u).c_str()); }; + const auto appendBool = [&](bool b) { qualifierString.append(std::to_string(b).c_str()); }; + const auto appendStr = [&](const char* s) { qualifierString.append(s); }; + + const auto appendDecorate = [&](const TIntermConstantUnion* constant) { + if (constant->getBasicType() == EbtFloat) { + float value = static_cast(constant->getConstArray()[0].getDConst()); + appendFloat(value); + } + else if (constant->getBasicType() == EbtInt) { + int value = constant->getConstArray()[0].getIConst(); + appendInt(value); + } + else if (constant->getBasicType() == EbtUint) { + unsigned value = constant->getConstArray()[0].getUConst(); + appendUint(value); + } + else if (constant->getBasicType() == EbtBool) { + bool value = constant->getConstArray()[0].getBConst(); + appendBool(value); + } + else if (constant->getBasicType() == EbtString) { + const TString* value = constant->getConstArray()[0].getSConst(); + appendStr(value->c_str()); + } + else + assert(0); + }; + + for (auto& decorate : spirvDecorate->decorates) { + appendStr("spirv_decorate("); + appendInt(decorate.first); + for (auto extraOperand : decorate.second) { + appendStr(", "); + appendDecorate(extraOperand); + } + appendStr(") "); + } + + for (auto& decorateId : spirvDecorate->decorateIds) { + appendStr("spirv_decorate_id("); + appendInt(decorateId.first); + for (auto extraOperand : decorateId.second) { + appendStr(", "); + appendDecorate(extraOperand); + } + appendStr(") "); + } + + for (auto& decorateString : spirvDecorate->decorateStrings) { + appendStr("spirv_decorate_string("); + appendInt(decorateString.first); + for (auto extraOperand : decorateString.second) { + appendStr(", "); + appendDecorate(extraOperand); + } + appendStr(") "); + } + + return qualifierString; +} + +// +// Handle SPIR-V type specifiers +// +void TPublicType::setSpirvType(const TSpirvInstruction& spirvInst, const TSpirvTypeParameters* typeParams) +{ + if (!spirvType) + spirvType = new TSpirvType; + + basicType = EbtSpirvType; + spirvType->spirvInst = spirvInst; + if (typeParams) + spirvType->typeParams = *typeParams; +} + +TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TSourceLoc& loc, const TIntermConstantUnion* constant) +{ + TSpirvTypeParameters* spirvTypeParams = new TSpirvTypeParameters; + if (constant->getBasicType() != EbtFloat && + constant->getBasicType() != EbtInt && + constant->getBasicType() != EbtUint && + constant->getBasicType() != EbtBool && + constant->getBasicType() != EbtString) + error(loc, "this type not allowed", constant->getType().getBasicString(), ""); + else { + assert(constant); + spirvTypeParams->push_back(TSpirvTypeParameter(constant)); + } + + return spirvTypeParams; +} + +TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TPublicType& type) +{ + TSpirvTypeParameters* spirvTypeParams = new TSpirvTypeParameters; + spirvTypeParams->push_back(TSpirvTypeParameter(new TType(type))); + return spirvTypeParams; +} + +TSpirvTypeParameters* TParseContext::mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, TSpirvTypeParameters* spirvTypeParams2) +{ + // Merge SPIR-V type parameters of the second one to the first one + for (const auto& spirvTypeParam : *spirvTypeParams2) + spirvTypeParams1->push_back(spirvTypeParam); + return spirvTypeParams1; +} + +// +// Handle SPIR-V instruction qualifiers +// +TSpirvInstruction* TParseContext::makeSpirvInstruction(const TSourceLoc& loc, const TString& name, const TString& value) +{ + TSpirvInstruction* spirvInst = new TSpirvInstruction; + if (name == "set") + spirvInst->set = value; + else + error(loc, "unknown SPIR-V instruction qualifier", name.c_str(), ""); + + return spirvInst; +} + +TSpirvInstruction* TParseContext::makeSpirvInstruction(const TSourceLoc& loc, const TString& name, int value) +{ + TSpirvInstruction* spirvInstuction = new TSpirvInstruction; + if (name == "id") + spirvInstuction->id = value; + else + error(loc, "unknown SPIR-V instruction qualifier", name.c_str(), ""); + + return spirvInstuction; +} + +TSpirvInstruction* TParseContext::mergeSpirvInstruction(const TSourceLoc& loc, TSpirvInstruction* spirvInst1, TSpirvInstruction* spirvInst2) +{ + // Merge qualifiers of the second SPIR-V instruction to those of the first one + if (!spirvInst2->set.empty()) { + if (spirvInst1->set.empty()) + spirvInst1->set = spirvInst2->set; + else + error(loc, "too many SPIR-V instruction qualifiers", "spirv_instruction", "(set)"); + } + + if (spirvInst2->id != -1) { + if (spirvInst1->id == -1) + spirvInst1->id = spirvInst2->id; + else + error(loc, "too many SPIR-V instruction qualifiers", "spirv_instruction", "(id)"); + } + + return spirvInst1; +} + +} // end namespace glslang + +#endif // GLSLANG_WEB diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index 0e5ee19527..747b43666d 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -77,6 +77,7 @@ void TType::buildMangledName(TString& mangledName) const case EbtAtomicUint: mangledName += "au"; break; case EbtAccStruct: mangledName += "as"; break; case EbtRayQuery: mangledName += "rq"; break; + case EbtSpirvType: mangledName += "spv-t"; break; #endif case EbtSampler: switch (sampler.type) { @@ -390,6 +391,9 @@ TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf) implicitThis = copyOf.implicitThis; illegalImplicitThis = copyOf.illegalImplicitThis; defaultParamCount = copyOf.defaultParamCount; +#ifndef GLSLANG_WEB + spirvInst = copyOf.spirvInst; +#endif } TFunction* TFunction::clone() const diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 152dc474cb..2196093073 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -319,6 +319,15 @@ class TFunction : public TSymbol { virtual TParameter& operator[](int i) { assert(writable); return parameters[i]; } virtual const TParameter& operator[](int i) const { return parameters[i]; } +#ifndef GLSLANG_WEB + virtual void setSpirvInstruction(const TSpirvInstruction& inst) + { + relateToOperator(EOpSpirvInst); + spirvInst = inst; + } + virtual const TSpirvInstruction& getSpirvInstruction() const { return spirvInst; } +#endif + #if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) virtual void dump(TInfoSink& infoSink, bool complete = false) const override; #endif @@ -342,6 +351,10 @@ class TFunction : public TSymbol { // This is important for a static member function that has member variables in scope, // but is not allowed to use them, or see hidden symbols instead. int defaultParamCount; + +#ifndef GLSLANG_WEB + TSpirvInstruction spirvInst; // SPIR-V instruction qualifiers +#endif }; // diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index c7ce0ca0c0..884f671376 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -333,6 +333,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_image_int64] = EBhDisable; extensionBehavior[E_GL_EXT_terminate_invocation] = EBhDisable; extensionBehavior[E_GL_EXT_shared_memory_block] = EBhDisable; + extensionBehavior[E_GL_EXT_spirv_intrinsics] = EBhDisable; // OVR extensions extensionBehavior[E_GL_OVR_multiview] = EBhDisable; @@ -493,6 +494,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_ray_tracing 1\n" "#define GL_EXT_ray_query 1\n" "#define GL_EXT_ray_flags_primitive_culling 1\n" + "#define GL_EXT_spirv_intrinsics 1\n" "#define GL_AMD_shader_ballot 1\n" "#define GL_AMD_shader_trinary_minmax 1\n" @@ -602,6 +604,29 @@ void TParseVersions::getPreamble(std::string& preamble) preamble += "\n"; } #endif + +#ifndef GLSLANG_WEB + // GL_EXT_spirv_intrinsics + if (!isEsProfile()) { + switch (language) { + case EShLangVertex: preamble += "#define GL_VERTEX_SHADER 1 \n"; break; + case EShLangTessControl: preamble += "#define GL_TESSELLATION_CONTROL_SHADER 1 \n"; break; + case EShLangTessEvaluation: preamble += "#define GL_TESSELLATION_EVALUATION_SHADER 1 \n"; break; + case EShLangGeometry: preamble += "#define GL_GEOMETRY_SHADER 1 \n"; break; + case EShLangFragment: preamble += "#define GL_FRAGMENT_SHADER 1 \n"; break; + case EShLangCompute: preamble += "#define GL_COMPUTE_SHADER 1 \n"; break; + case EShLangRayGen: preamble += "#define GL_RAY_GENERATION_SHADER_EXT 1 \n"; break; + case EShLangIntersect: preamble += "#define GL_INTERSECTION_SHADER_EXT 1 \n"; break; + case EShLangAnyHit: preamble += "#define GL_ANY_HIT_SHADER_EXT 1 \n"; break; + case EShLangClosestHit: preamble += "#define GL_CLOSEST_HIT_SHADER_EXT 1 \n"; break; + case EShLangMiss: preamble += "#define GL_MISS_SHADER_EXT 1 \n"; break; + case EShLangCallable: preamble += "#define GL_CALLABLE_SHADER_EXT 1 \n"; break; + case EShLangTaskNV: preamble += "#define GL_TASK_SHADER_NV 1 \n"; break; + case EShLangMeshNV: preamble += "#define GL_MESH_SHADER_NV 1 \n"; break; + default: break; + } + } +#endif } // diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 01f819daed..21846c40dc 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -205,6 +205,7 @@ const char* const E_GL_EXT_shader_image_int64 = "GL_EXT_shader_ima const char* const E_GL_EXT_null_initializer = "GL_EXT_null_initializer"; const char* const E_GL_EXT_shared_memory_block = "GL_EXT_shared_memory_block"; const char* const E_GL_EXT_subgroup_uniform_control_flow = "GL_EXT_subgroup_uniform_control_flow"; +const char* const E_GL_EXT_spirv_intrinsics = "GL_EXT_spirv_intrinsics"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 5b1d2a7eb8..93041ce39e 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -116,6 +116,9 @@ using namespace glslang; glslang::TIntermNodePair nodePair; glslang::TIntermTyped* intermTypedNode; glslang::TAttributes* attributes; + glslang::TSpirvRequirement* spirvReq; + glslang::TSpirvInstruction* spirvInst; + glslang::TSpirvTypeParameters* spirvTypeParams; }; union { glslang::TPublicType type; @@ -271,6 +274,11 @@ GLSLANG_WEB_EXCLUDE_ON %token SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS %token F16SUBPASSINPUT F16SUBPASSINPUTMS +// spirv intrinsics +%token SPIRV_INSTRUCTION SPIRV_EXECUTION_MODE SPIRV_EXECUTION_MODE_ID +%token SPIRV_DECORATE SPIRV_DECORATE_ID SPIRV_DECORATE_STRING +%token SPIRV_TYPE SPIRV_STORAGE_CLASS SPIRV_BY_REFERENCE SPIRV_LITERAL + GLSLANG_WEB_EXCLUDE_OFF %token LEFT_OP RIGHT_OP @@ -362,6 +370,19 @@ GLSLANG_WEB_EXCLUDE_ON %type attribute attribute_list single_attribute %type demote_statement %type initializer_list +%type spirv_requirements_list spirv_requirements_parameter +%type spirv_extension_list spirv_capability_list +%type spirv_execution_mode_qualifier +%type spirv_execution_mode_parameter_list spirv_execution_mode_parameter spirv_execution_mode_id_parameter_list +%type spirv_storage_class_qualifier +%type spirv_decorate_qualifier +%type spirv_decorate_parameter_list spirv_decorate_parameter +%type spirv_decorate_id_parameter_list +%type spirv_decorate_string_parameter_list +%type spirv_type_specifier +%type spirv_type_parameter_list spirv_type_parameter +%type spirv_instruction_qualifier +%type spirv_instruction_qualifier_list spirv_instruction_qualifier_id GLSLANG_WEB_EXCLUDE_OFF %start translation_unit @@ -875,6 +896,20 @@ declaration $$ = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } +GLSLANG_WEB_EXCLUDE_ON + | spirv_instruction_qualifier function_prototype SEMICOLON { + parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier"); + $2.function->setSpirvInstruction(*$1); // Attach SPIR-V intruction qualifier + parseContext.handleFunctionDeclarator($2.loc, *$2.function, true /* prototype */); + $$ = 0; + // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature + } + | spirv_execution_mode_qualifier SEMICOLON { + parseContext.globalCheck($2.loc, "SPIR-V execution mode qualifier"); + parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier"); + $$ = 0; + } +GLSLANG_WEB_EXCLUDE_OFF | init_declarator_list SEMICOLON { if ($1.intermNode && $1.intermNode->getAsAggregate()) $1.intermNode->getAsAggregate()->setOperator(EOpSequence); @@ -1366,6 +1401,25 @@ GLSLANG_WEB_EXCLUDE_ON | non_uniform_qualifier { $$ = $1; } + | spirv_storage_class_qualifier { + parseContext.globalCheck($1.loc, "spirv_storage_class"); + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier"); + $$ = $1; + } + | spirv_decorate_qualifier { + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier"); + $$ = $1; + } + | SPIRV_BY_REFERENCE { + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference"); + $$.init($1.loc); + $$.qualifier.setSpirvByReference(); + } + | SPIRV_LITERAL { + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal"); + $$.init($1.loc); + $$.qualifier.setSpirvLiteral(); + } GLSLANG_WEB_EXCLUDE_OFF ; @@ -3426,6 +3480,10 @@ GLSLANG_WEB_EXCLUDE_ON $$.basicType = EbtUint; $$.coopmat = true; } + | spirv_type_specifier { + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier"); + $$ = $1; + } GLSLANG_WEB_EXCLUDE_OFF | struct_specifier { $$ = $1; @@ -4068,4 +4126,273 @@ single_attribute } GLSLANG_WEB_EXCLUDE_OFF +GLSLANG_WEB_EXCLUDE_ON +spirv_requirements_list + : spirv_requirements_parameter { + $$ = $1; + } + | spirv_requirements_list COMMA spirv_requirements_parameter { + $$ = parseContext.mergeSpirvRequirements($2.loc, $1, $3); + } + +spirv_requirements_parameter + : IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET { + $$ = parseContext.makeSpirvRequirement($2.loc, *$1.string, $4->getAsAggregate(), nullptr); + } + | IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET { + $$ = parseContext.makeSpirvRequirement($2.loc, *$1.string, nullptr, $4->getAsAggregate()); + } + +spirv_extension_list + : STRING_LITERAL { + $$ = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion($1.string, $1.loc, true)); + } + | spirv_extension_list COMMA STRING_LITERAL { + $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.string, $3.loc, true)); + } + +spirv_capability_list + : INTCONSTANT { + $$ = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion($1.i, $1.loc, true)); + } + | spirv_capability_list COMMA INTCONSTANT { + $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.i, $3.loc, true)); + } + +spirv_execution_mode_qualifier + : SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN { + parseContext.intermediate.insertSpirvExecutionMode($3.i); + $$ = 0; + } + | SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN { + parseContext.intermediate.insertSpirvRequirement($3); + parseContext.intermediate.insertSpirvExecutionMode($5.i); + $$ = 0; + } + | SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvExecutionMode($3.i, $5->getAsAggregate()); + $$ = 0; + } + | SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvRequirement($3); + parseContext.intermediate.insertSpirvExecutionMode($5.i, $7->getAsAggregate()); + $$ = 0; + } + | SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvExecutionModeId($3.i, $5->getAsAggregate()); + $$ = 0; + } + | SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvRequirement($3); + parseContext.intermediate.insertSpirvExecutionModeId($5.i, $7->getAsAggregate()); + $$ = 0; + } + +spirv_execution_mode_parameter_list + : spirv_execution_mode_parameter { + $$ = parseContext.intermediate.makeAggregate($1); + } + | spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter { + $$ = parseContext.intermediate.growAggregate($1, $3); + } + +spirv_execution_mode_parameter + : FLOATCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); + } + | INTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); + } + | UINTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); + } + | BOOLCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); + } + | STRING_LITERAL { + $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true); + } + +spirv_execution_mode_id_parameter_list + : constant_expression { + if ($1->getBasicType() != EbtFloat && + $1->getBasicType() != EbtInt && + $1->getBasicType() != EbtUint && + $1->getBasicType() != EbtBool && + $1->getBasicType() != EbtString) + parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), ""); + $$ = parseContext.intermediate.makeAggregate($1); + } + | spirv_execution_mode_id_parameter_list COMMA constant_expression { + if ($3->getBasicType() != EbtFloat && + $3->getBasicType() != EbtInt && + $3->getBasicType() != EbtUint && + $3->getBasicType() != EbtBool && + $3->getBasicType() != EbtString) + parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), ""); + $$ = parseContext.intermediate.growAggregate($1, $3); + } + +spirv_storage_class_qualifier + : SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN { + $$.init($1.loc); + $$.qualifier.storage = EvqSpirvStorageClass; + $$.qualifier.spirvStorageClass = $3.i; + } + | SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN { + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.storage = EvqSpirvStorageClass; + $$.qualifier.spirvStorageClass = $5.i; + } + +spirv_decorate_qualifier + : SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN{ + $$.init($1.loc); + $$.qualifier.setSpirvDecorate($3.i); + } + | SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN{ + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.setSpirvDecorate($5.i); + } + | SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN { + $$.init($1.loc); + $$.qualifier.setSpirvDecorate($3.i, $5->getAsAggregate()); + } + | SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN { + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.setSpirvDecorate($5.i, $7->getAsAggregate()); + } + | SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN { + $$.init($1.loc); + $$.qualifier.setSpirvDecorateId($3.i, $5->getAsAggregate()); + } + | SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN { + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.setSpirvDecorateId($5.i, $7->getAsAggregate()); + } + | SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN { + $$.init($1.loc); + $$.qualifier.setSpirvDecorateString($3.i, $5->getAsAggregate()); + } + | SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN { + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.setSpirvDecorateString($5.i, $7->getAsAggregate()); + } + +spirv_decorate_parameter_list + : spirv_decorate_parameter { + $$ = parseContext.intermediate.makeAggregate($1); + } + | spirv_decorate_parameter_list COMMA spirv_decorate_parameter { + $$ = parseContext.intermediate.growAggregate($1, $3); + } + +spirv_decorate_parameter + : FLOATCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); + } + | INTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); + } + | UINTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); + } + | BOOLCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); + } + +spirv_decorate_id_parameter_list + : constant_expression { + if ($1->getBasicType() != EbtFloat && + $1->getBasicType() != EbtInt && + $1->getBasicType() != EbtUint && + $1->getBasicType() != EbtBool) + parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), ""); + $$ = parseContext.intermediate.makeAggregate($1); + } + | spirv_decorate_id_parameter_list COMMA constant_expression { + if ($3->getBasicType() != EbtFloat && + $3->getBasicType() != EbtInt && + $3->getBasicType() != EbtUint && + $3->getBasicType() != EbtBool) + parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), ""); + $$ = parseContext.intermediate.growAggregate($1, $3); + } + +spirv_decorate_string_parameter_list + : STRING_LITERAL { + $$ = parseContext.intermediate.makeAggregate( + parseContext.intermediate.addConstantUnion($1.string, $1.loc, true)); + } + | spirv_decorate_string_parameter_list COMMA STRING_LITERAL { + $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.string, $3.loc, true)); + } + +spirv_type_specifier + : SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.setSpirvType(*$3, $5); + } + | SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.intermediate.insertSpirvRequirement($3); + $$.setSpirvType(*$5, $7); + } + | SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.setSpirvType(*$3); + } + | SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.intermediate.insertSpirvRequirement($3); + $$.setSpirvType(*$5); + } + +spirv_type_parameter_list + : spirv_type_parameter { + $$ = $1; + } + | spirv_type_parameter_list COMMA spirv_type_parameter { + $$ = parseContext.mergeSpirvTypeParameters($1, $3); + } + +spirv_type_parameter + : constant_expression { + $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion()); + } + | type_specifier { + $$ = parseContext.makeSpirvTypeParameters($1); + } + +spirv_instruction_qualifier + : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { + $$ = $3; + } + | SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvRequirement($3); + $$ = $5; + } + +spirv_instruction_qualifier_list + : spirv_instruction_qualifier_id { + $$ = $1; + } + | spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id { + $$ = parseContext.mergeSpirvInstruction($2.loc, $1, $3); + } + +spirv_instruction_qualifier_id + : IDENTIFIER EQUAL STRING_LITERAL { + $$ = parseContext.makeSpirvInstruction($2.loc, *$1.string, *$3.string); + } + | IDENTIFIER EQUAL INTCONSTANT { + $$ = parseContext.makeSpirvInstruction($2.loc, *$1.string, $3.i); + } +GLSLANG_WEB_EXCLUDE_OFF + %% diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 1c054c3ed3..b77f4617be 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -116,6 +116,9 @@ using namespace glslang; glslang::TIntermNodePair nodePair; glslang::TIntermTyped* intermTypedNode; glslang::TAttributes* attributes; + glslang::TSpirvRequirement* spirvReq; + glslang::TSpirvInstruction* spirvInst; + glslang::TSpirvTypeParameters* spirvTypeParams; }; union { glslang::TPublicType type; @@ -271,6 +274,11 @@ extern int yylex(YYSTYPE*, TParseContext&); %token SUBPASSINPUT SUBPASSINPUTMS ISUBPASSINPUT ISUBPASSINPUTMS USUBPASSINPUT USUBPASSINPUTMS %token F16SUBPASSINPUT F16SUBPASSINPUTMS +// spirv intrinsics +%token SPIRV_INSTRUCTION SPIRV_EXECUTION_MODE SPIRV_EXECUTION_MODE_ID +%token SPIRV_DECORATE SPIRV_DECORATE_ID SPIRV_DECORATE_STRING +%token SPIRV_TYPE SPIRV_STORAGE_CLASS SPIRV_BY_REFERENCE SPIRV_LITERAL + %token LEFT_OP RIGHT_OP @@ -362,6 +370,19 @@ extern int yylex(YYSTYPE*, TParseContext&); %type attribute attribute_list single_attribute %type demote_statement %type initializer_list +%type spirv_requirements_list spirv_requirements_parameter +%type spirv_extension_list spirv_capability_list +%type spirv_execution_mode_qualifier +%type spirv_execution_mode_parameter_list spirv_execution_mode_parameter spirv_execution_mode_id_parameter_list +%type spirv_storage_class_qualifier +%type spirv_decorate_qualifier +%type spirv_decorate_parameter_list spirv_decorate_parameter +%type spirv_decorate_id_parameter_list +%type spirv_decorate_string_parameter_list +%type spirv_type_specifier +%type spirv_type_parameter_list spirv_type_parameter +%type spirv_instruction_qualifier +%type spirv_instruction_qualifier_list spirv_instruction_qualifier_id %start translation_unit @@ -875,6 +896,20 @@ declaration $$ = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } + + | spirv_instruction_qualifier function_prototype SEMICOLON { + parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier"); + $2.function->setSpirvInstruction(*$1); // Attach SPIR-V intruction qualifier + parseContext.handleFunctionDeclarator($2.loc, *$2.function, true /* prototype */); + $$ = 0; + // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature + } + | spirv_execution_mode_qualifier SEMICOLON { + parseContext.globalCheck($2.loc, "SPIR-V execution mode qualifier"); + parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier"); + $$ = 0; + } + | init_declarator_list SEMICOLON { if ($1.intermNode && $1.intermNode->getAsAggregate()) $1.intermNode->getAsAggregate()->setOperator(EOpSequence); @@ -1366,6 +1401,25 @@ single_type_qualifier | non_uniform_qualifier { $$ = $1; } + | spirv_storage_class_qualifier { + parseContext.globalCheck($1.loc, "spirv_storage_class"); + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier"); + $$ = $1; + } + | spirv_decorate_qualifier { + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier"); + $$ = $1; + } + | SPIRV_BY_REFERENCE { + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference"); + $$.init($1.loc); + $$.qualifier.setSpirvByReference(); + } + | SPIRV_LITERAL { + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal"); + $$.init($1.loc); + $$.qualifier.setSpirvLiteral(); + } ; @@ -3426,6 +3480,10 @@ type_specifier_nonarray $$.basicType = EbtUint; $$.coopmat = true; } + | spirv_type_specifier { + parseContext.requireExtensions($1.loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier"); + $$ = $1; + } | struct_specifier { $$ = $1; @@ -4068,4 +4126,273 @@ single_attribute } + +spirv_requirements_list + : spirv_requirements_parameter { + $$ = $1; + } + | spirv_requirements_list COMMA spirv_requirements_parameter { + $$ = parseContext.mergeSpirvRequirements($2.loc, $1, $3); + } + +spirv_requirements_parameter + : IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET { + $$ = parseContext.makeSpirvRequirement($2.loc, *$1.string, $4->getAsAggregate(), nullptr); + } + | IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET { + $$ = parseContext.makeSpirvRequirement($2.loc, *$1.string, nullptr, $4->getAsAggregate()); + } + +spirv_extension_list + : STRING_LITERAL { + $$ = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion($1.string, $1.loc, true)); + } + | spirv_extension_list COMMA STRING_LITERAL { + $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.string, $3.loc, true)); + } + +spirv_capability_list + : INTCONSTANT { + $$ = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion($1.i, $1.loc, true)); + } + | spirv_capability_list COMMA INTCONSTANT { + $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.i, $3.loc, true)); + } + +spirv_execution_mode_qualifier + : SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN { + parseContext.intermediate.insertSpirvExecutionMode($3.i); + $$ = 0; + } + | SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN { + parseContext.intermediate.insertSpirvRequirement($3); + parseContext.intermediate.insertSpirvExecutionMode($5.i); + $$ = 0; + } + | SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvExecutionMode($3.i, $5->getAsAggregate()); + $$ = 0; + } + | SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvRequirement($3); + parseContext.intermediate.insertSpirvExecutionMode($5.i, $7->getAsAggregate()); + $$ = 0; + } + | SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvExecutionModeId($3.i, $5->getAsAggregate()); + $$ = 0; + } + | SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvRequirement($3); + parseContext.intermediate.insertSpirvExecutionModeId($5.i, $7->getAsAggregate()); + $$ = 0; + } + +spirv_execution_mode_parameter_list + : spirv_execution_mode_parameter { + $$ = parseContext.intermediate.makeAggregate($1); + } + | spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter { + $$ = parseContext.intermediate.growAggregate($1, $3); + } + +spirv_execution_mode_parameter + : FLOATCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); + } + | INTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); + } + | UINTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); + } + | BOOLCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); + } + | STRING_LITERAL { + $$ = parseContext.intermediate.addConstantUnion($1.string, $1.loc, true); + } + +spirv_execution_mode_id_parameter_list + : constant_expression { + if ($1->getBasicType() != EbtFloat && + $1->getBasicType() != EbtInt && + $1->getBasicType() != EbtUint && + $1->getBasicType() != EbtBool && + $1->getBasicType() != EbtString) + parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), ""); + $$ = parseContext.intermediate.makeAggregate($1); + } + | spirv_execution_mode_id_parameter_list COMMA constant_expression { + if ($3->getBasicType() != EbtFloat && + $3->getBasicType() != EbtInt && + $3->getBasicType() != EbtUint && + $3->getBasicType() != EbtBool && + $3->getBasicType() != EbtString) + parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), ""); + $$ = parseContext.intermediate.growAggregate($1, $3); + } + +spirv_storage_class_qualifier + : SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN { + $$.init($1.loc); + $$.qualifier.storage = EvqSpirvStorageClass; + $$.qualifier.spirvStorageClass = $3.i; + } + | SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN { + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.storage = EvqSpirvStorageClass; + $$.qualifier.spirvStorageClass = $5.i; + } + +spirv_decorate_qualifier + : SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN{ + $$.init($1.loc); + $$.qualifier.setSpirvDecorate($3.i); + } + | SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN{ + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.setSpirvDecorate($5.i); + } + | SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN { + $$.init($1.loc); + $$.qualifier.setSpirvDecorate($3.i, $5->getAsAggregate()); + } + | SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN { + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.setSpirvDecorate($5.i, $7->getAsAggregate()); + } + | SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN { + $$.init($1.loc); + $$.qualifier.setSpirvDecorateId($3.i, $5->getAsAggregate()); + } + | SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN { + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.setSpirvDecorateId($5.i, $7->getAsAggregate()); + } + | SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN { + $$.init($1.loc); + $$.qualifier.setSpirvDecorateString($3.i, $5->getAsAggregate()); + } + | SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN { + $$.init($1.loc); + parseContext.intermediate.insertSpirvRequirement($3); + $$.qualifier.setSpirvDecorateString($5.i, $7->getAsAggregate()); + } + +spirv_decorate_parameter_list + : spirv_decorate_parameter { + $$ = parseContext.intermediate.makeAggregate($1); + } + | spirv_decorate_parameter_list COMMA spirv_decorate_parameter { + $$ = parseContext.intermediate.growAggregate($1, $3); + } + +spirv_decorate_parameter + : FLOATCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.d, EbtFloat, $1.loc, true); + } + | INTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.i, $1.loc, true); + } + | UINTCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.u, $1.loc, true); + } + | BOOLCONSTANT { + $$ = parseContext.intermediate.addConstantUnion($1.b, $1.loc, true); + } + +spirv_decorate_id_parameter_list + : constant_expression { + if ($1->getBasicType() != EbtFloat && + $1->getBasicType() != EbtInt && + $1->getBasicType() != EbtUint && + $1->getBasicType() != EbtBool) + parseContext.error($1->getLoc(), "this type not allowed", $1->getType().getBasicString(), ""); + $$ = parseContext.intermediate.makeAggregate($1); + } + | spirv_decorate_id_parameter_list COMMA constant_expression { + if ($3->getBasicType() != EbtFloat && + $3->getBasicType() != EbtInt && + $3->getBasicType() != EbtUint && + $3->getBasicType() != EbtBool) + parseContext.error($3->getLoc(), "this type not allowed", $3->getType().getBasicString(), ""); + $$ = parseContext.intermediate.growAggregate($1, $3); + } + +spirv_decorate_string_parameter_list + : STRING_LITERAL { + $$ = parseContext.intermediate.makeAggregate( + parseContext.intermediate.addConstantUnion($1.string, $1.loc, true)); + } + | spirv_decorate_string_parameter_list COMMA STRING_LITERAL { + $$ = parseContext.intermediate.growAggregate($1, parseContext.intermediate.addConstantUnion($3.string, $3.loc, true)); + } + +spirv_type_specifier + : SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.setSpirvType(*$3, $5); + } + | SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.intermediate.insertSpirvRequirement($3); + $$.setSpirvType(*$5, $7); + } + | SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + $$.setSpirvType(*$3); + } + | SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN { + $$.init($1.loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.intermediate.insertSpirvRequirement($3); + $$.setSpirvType(*$5); + } + +spirv_type_parameter_list + : spirv_type_parameter { + $$ = $1; + } + | spirv_type_parameter_list COMMA spirv_type_parameter { + $$ = parseContext.mergeSpirvTypeParameters($1, $3); + } + +spirv_type_parameter + : constant_expression { + $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion()); + } + | type_specifier { + $$ = parseContext.makeSpirvTypeParameters($1); + } + +spirv_instruction_qualifier + : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { + $$ = $3; + } + | SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN { + parseContext.intermediate.insertSpirvRequirement($3); + $$ = $5; + } + +spirv_instruction_qualifier_list + : spirv_instruction_qualifier_id { + $$ = $1; + } + | spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id { + $$ = parseContext.mergeSpirvInstruction($2.loc, $1, $3); + } + +spirv_instruction_qualifier_id + : IDENTIFIER EQUAL STRING_LITERAL { + $$ = parseContext.makeSpirvInstruction($2.loc, *$1.string, *$3.string); + } + | IDENTIFIER EQUAL INTCONSTANT { + $$ = parseContext.makeSpirvInstruction($2.loc, *$1.string, $3.i); + } + + %% diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 35928eb03d..dba06aefef 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.7.5. */ +/* A Bison parser, made by GNU Bison 3.7.4. */ /* Bison implementation for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -46,10 +46,10 @@ USER NAME SPACE" below. */ /* Identify Bison output, and Bison version. */ -#define YYBISON 30705 +#define YYBISON 30704 /* Bison version string. */ -#define YYBISON_VERSION "3.7.5" +#define YYBISON_VERSION "3.7.4" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" @@ -438,251 +438,281 @@ enum yysymbol_kind_t YYSYMBOL_USUBPASSINPUTMS = 314, /* USUBPASSINPUTMS */ YYSYMBOL_F16SUBPASSINPUT = 315, /* F16SUBPASSINPUT */ YYSYMBOL_F16SUBPASSINPUTMS = 316, /* F16SUBPASSINPUTMS */ - YYSYMBOL_LEFT_OP = 317, /* LEFT_OP */ - YYSYMBOL_RIGHT_OP = 318, /* RIGHT_OP */ - YYSYMBOL_INC_OP = 319, /* INC_OP */ - YYSYMBOL_DEC_OP = 320, /* DEC_OP */ - YYSYMBOL_LE_OP = 321, /* LE_OP */ - YYSYMBOL_GE_OP = 322, /* GE_OP */ - YYSYMBOL_EQ_OP = 323, /* EQ_OP */ - YYSYMBOL_NE_OP = 324, /* NE_OP */ - YYSYMBOL_AND_OP = 325, /* AND_OP */ - YYSYMBOL_OR_OP = 326, /* OR_OP */ - YYSYMBOL_XOR_OP = 327, /* XOR_OP */ - YYSYMBOL_MUL_ASSIGN = 328, /* MUL_ASSIGN */ - YYSYMBOL_DIV_ASSIGN = 329, /* DIV_ASSIGN */ - YYSYMBOL_ADD_ASSIGN = 330, /* ADD_ASSIGN */ - YYSYMBOL_MOD_ASSIGN = 331, /* MOD_ASSIGN */ - YYSYMBOL_LEFT_ASSIGN = 332, /* LEFT_ASSIGN */ - YYSYMBOL_RIGHT_ASSIGN = 333, /* RIGHT_ASSIGN */ - YYSYMBOL_AND_ASSIGN = 334, /* AND_ASSIGN */ - YYSYMBOL_XOR_ASSIGN = 335, /* XOR_ASSIGN */ - YYSYMBOL_OR_ASSIGN = 336, /* OR_ASSIGN */ - YYSYMBOL_SUB_ASSIGN = 337, /* SUB_ASSIGN */ - YYSYMBOL_STRING_LITERAL = 338, /* STRING_LITERAL */ - YYSYMBOL_LEFT_PAREN = 339, /* LEFT_PAREN */ - YYSYMBOL_RIGHT_PAREN = 340, /* RIGHT_PAREN */ - YYSYMBOL_LEFT_BRACKET = 341, /* LEFT_BRACKET */ - YYSYMBOL_RIGHT_BRACKET = 342, /* RIGHT_BRACKET */ - YYSYMBOL_LEFT_BRACE = 343, /* LEFT_BRACE */ - YYSYMBOL_RIGHT_BRACE = 344, /* RIGHT_BRACE */ - YYSYMBOL_DOT = 345, /* DOT */ - YYSYMBOL_COMMA = 346, /* COMMA */ - YYSYMBOL_COLON = 347, /* COLON */ - YYSYMBOL_EQUAL = 348, /* EQUAL */ - YYSYMBOL_SEMICOLON = 349, /* SEMICOLON */ - YYSYMBOL_BANG = 350, /* BANG */ - YYSYMBOL_DASH = 351, /* DASH */ - YYSYMBOL_TILDE = 352, /* TILDE */ - YYSYMBOL_PLUS = 353, /* PLUS */ - YYSYMBOL_STAR = 354, /* STAR */ - YYSYMBOL_SLASH = 355, /* SLASH */ - YYSYMBOL_PERCENT = 356, /* PERCENT */ - YYSYMBOL_LEFT_ANGLE = 357, /* LEFT_ANGLE */ - YYSYMBOL_RIGHT_ANGLE = 358, /* RIGHT_ANGLE */ - YYSYMBOL_VERTICAL_BAR = 359, /* VERTICAL_BAR */ - YYSYMBOL_CARET = 360, /* CARET */ - YYSYMBOL_AMPERSAND = 361, /* AMPERSAND */ - YYSYMBOL_QUESTION = 362, /* QUESTION */ - YYSYMBOL_INVARIANT = 363, /* INVARIANT */ - YYSYMBOL_HIGH_PRECISION = 364, /* HIGH_PRECISION */ - YYSYMBOL_MEDIUM_PRECISION = 365, /* MEDIUM_PRECISION */ - YYSYMBOL_LOW_PRECISION = 366, /* LOW_PRECISION */ - YYSYMBOL_PRECISION = 367, /* PRECISION */ - YYSYMBOL_PACKED = 368, /* PACKED */ - YYSYMBOL_RESOURCE = 369, /* RESOURCE */ - YYSYMBOL_SUPERP = 370, /* SUPERP */ - YYSYMBOL_FLOATCONSTANT = 371, /* FLOATCONSTANT */ - YYSYMBOL_INTCONSTANT = 372, /* INTCONSTANT */ - YYSYMBOL_UINTCONSTANT = 373, /* UINTCONSTANT */ - YYSYMBOL_BOOLCONSTANT = 374, /* BOOLCONSTANT */ - YYSYMBOL_IDENTIFIER = 375, /* IDENTIFIER */ - YYSYMBOL_TYPE_NAME = 376, /* TYPE_NAME */ - YYSYMBOL_CENTROID = 377, /* CENTROID */ - YYSYMBOL_IN = 378, /* IN */ - YYSYMBOL_OUT = 379, /* OUT */ - YYSYMBOL_INOUT = 380, /* INOUT */ - YYSYMBOL_STRUCT = 381, /* STRUCT */ - YYSYMBOL_VOID = 382, /* VOID */ - YYSYMBOL_WHILE = 383, /* WHILE */ - YYSYMBOL_BREAK = 384, /* BREAK */ - YYSYMBOL_CONTINUE = 385, /* CONTINUE */ - YYSYMBOL_DO = 386, /* DO */ - YYSYMBOL_ELSE = 387, /* ELSE */ - YYSYMBOL_FOR = 388, /* FOR */ - YYSYMBOL_IF = 389, /* IF */ - YYSYMBOL_DISCARD = 390, /* DISCARD */ - YYSYMBOL_RETURN = 391, /* RETURN */ - YYSYMBOL_SWITCH = 392, /* SWITCH */ - YYSYMBOL_CASE = 393, /* CASE */ - YYSYMBOL_DEFAULT = 394, /* DEFAULT */ - YYSYMBOL_TERMINATE_INVOCATION = 395, /* TERMINATE_INVOCATION */ - YYSYMBOL_TERMINATE_RAY = 396, /* TERMINATE_RAY */ - YYSYMBOL_IGNORE_INTERSECTION = 397, /* IGNORE_INTERSECTION */ - YYSYMBOL_UNIFORM = 398, /* UNIFORM */ - YYSYMBOL_SHARED = 399, /* SHARED */ - YYSYMBOL_BUFFER = 400, /* BUFFER */ - YYSYMBOL_FLAT = 401, /* FLAT */ - YYSYMBOL_SMOOTH = 402, /* SMOOTH */ - YYSYMBOL_LAYOUT = 403, /* LAYOUT */ - YYSYMBOL_DOUBLECONSTANT = 404, /* DOUBLECONSTANT */ - YYSYMBOL_INT16CONSTANT = 405, /* INT16CONSTANT */ - YYSYMBOL_UINT16CONSTANT = 406, /* UINT16CONSTANT */ - YYSYMBOL_FLOAT16CONSTANT = 407, /* FLOAT16CONSTANT */ - YYSYMBOL_INT32CONSTANT = 408, /* INT32CONSTANT */ - YYSYMBOL_UINT32CONSTANT = 409, /* UINT32CONSTANT */ - YYSYMBOL_INT64CONSTANT = 410, /* INT64CONSTANT */ - YYSYMBOL_UINT64CONSTANT = 411, /* UINT64CONSTANT */ - YYSYMBOL_SUBROUTINE = 412, /* SUBROUTINE */ - YYSYMBOL_DEMOTE = 413, /* DEMOTE */ - YYSYMBOL_PAYLOADNV = 414, /* PAYLOADNV */ - YYSYMBOL_PAYLOADINNV = 415, /* PAYLOADINNV */ - YYSYMBOL_HITATTRNV = 416, /* HITATTRNV */ - YYSYMBOL_CALLDATANV = 417, /* CALLDATANV */ - YYSYMBOL_CALLDATAINNV = 418, /* CALLDATAINNV */ - YYSYMBOL_PAYLOADEXT = 419, /* PAYLOADEXT */ - YYSYMBOL_PAYLOADINEXT = 420, /* PAYLOADINEXT */ - YYSYMBOL_HITATTREXT = 421, /* HITATTREXT */ - YYSYMBOL_CALLDATAEXT = 422, /* CALLDATAEXT */ - YYSYMBOL_CALLDATAINEXT = 423, /* CALLDATAINEXT */ - YYSYMBOL_PATCH = 424, /* PATCH */ - YYSYMBOL_SAMPLE = 425, /* SAMPLE */ - YYSYMBOL_NONUNIFORM = 426, /* NONUNIFORM */ - YYSYMBOL_COHERENT = 427, /* COHERENT */ - YYSYMBOL_VOLATILE = 428, /* VOLATILE */ - YYSYMBOL_RESTRICT = 429, /* RESTRICT */ - YYSYMBOL_READONLY = 430, /* READONLY */ - YYSYMBOL_WRITEONLY = 431, /* WRITEONLY */ - YYSYMBOL_DEVICECOHERENT = 432, /* DEVICECOHERENT */ - YYSYMBOL_QUEUEFAMILYCOHERENT = 433, /* QUEUEFAMILYCOHERENT */ - YYSYMBOL_WORKGROUPCOHERENT = 434, /* WORKGROUPCOHERENT */ - YYSYMBOL_SUBGROUPCOHERENT = 435, /* SUBGROUPCOHERENT */ - YYSYMBOL_NONPRIVATE = 436, /* NONPRIVATE */ - YYSYMBOL_SHADERCALLCOHERENT = 437, /* SHADERCALLCOHERENT */ - YYSYMBOL_NOPERSPECTIVE = 438, /* NOPERSPECTIVE */ - YYSYMBOL_EXPLICITINTERPAMD = 439, /* EXPLICITINTERPAMD */ - YYSYMBOL_PERVERTEXNV = 440, /* PERVERTEXNV */ - YYSYMBOL_PERPRIMITIVENV = 441, /* PERPRIMITIVENV */ - YYSYMBOL_PERVIEWNV = 442, /* PERVIEWNV */ - YYSYMBOL_PERTASKNV = 443, /* PERTASKNV */ - YYSYMBOL_PRECISE = 444, /* PRECISE */ - YYSYMBOL_YYACCEPT = 445, /* $accept */ - YYSYMBOL_variable_identifier = 446, /* variable_identifier */ - YYSYMBOL_primary_expression = 447, /* primary_expression */ - YYSYMBOL_postfix_expression = 448, /* postfix_expression */ - YYSYMBOL_integer_expression = 449, /* integer_expression */ - YYSYMBOL_function_call = 450, /* function_call */ - YYSYMBOL_function_call_or_method = 451, /* function_call_or_method */ - YYSYMBOL_function_call_generic = 452, /* function_call_generic */ - YYSYMBOL_function_call_header_no_parameters = 453, /* function_call_header_no_parameters */ - YYSYMBOL_function_call_header_with_parameters = 454, /* function_call_header_with_parameters */ - YYSYMBOL_function_call_header = 455, /* function_call_header */ - YYSYMBOL_function_identifier = 456, /* function_identifier */ - YYSYMBOL_unary_expression = 457, /* unary_expression */ - YYSYMBOL_unary_operator = 458, /* unary_operator */ - YYSYMBOL_multiplicative_expression = 459, /* multiplicative_expression */ - YYSYMBOL_additive_expression = 460, /* additive_expression */ - YYSYMBOL_shift_expression = 461, /* shift_expression */ - YYSYMBOL_relational_expression = 462, /* relational_expression */ - YYSYMBOL_equality_expression = 463, /* equality_expression */ - YYSYMBOL_and_expression = 464, /* and_expression */ - YYSYMBOL_exclusive_or_expression = 465, /* exclusive_or_expression */ - YYSYMBOL_inclusive_or_expression = 466, /* inclusive_or_expression */ - YYSYMBOL_logical_and_expression = 467, /* logical_and_expression */ - YYSYMBOL_logical_xor_expression = 468, /* logical_xor_expression */ - YYSYMBOL_logical_or_expression = 469, /* logical_or_expression */ - YYSYMBOL_conditional_expression = 470, /* conditional_expression */ - YYSYMBOL_471_1 = 471, /* $@1 */ - YYSYMBOL_assignment_expression = 472, /* assignment_expression */ - YYSYMBOL_assignment_operator = 473, /* assignment_operator */ - YYSYMBOL_expression = 474, /* expression */ - YYSYMBOL_constant_expression = 475, /* constant_expression */ - YYSYMBOL_declaration = 476, /* declaration */ - YYSYMBOL_block_structure = 477, /* block_structure */ - YYSYMBOL_478_2 = 478, /* $@2 */ - YYSYMBOL_identifier_list = 479, /* identifier_list */ - YYSYMBOL_function_prototype = 480, /* function_prototype */ - YYSYMBOL_function_declarator = 481, /* function_declarator */ - YYSYMBOL_function_header_with_parameters = 482, /* function_header_with_parameters */ - YYSYMBOL_function_header = 483, /* function_header */ - YYSYMBOL_parameter_declarator = 484, /* parameter_declarator */ - YYSYMBOL_parameter_declaration = 485, /* parameter_declaration */ - YYSYMBOL_parameter_type_specifier = 486, /* parameter_type_specifier */ - YYSYMBOL_init_declarator_list = 487, /* init_declarator_list */ - YYSYMBOL_single_declaration = 488, /* single_declaration */ - YYSYMBOL_fully_specified_type = 489, /* fully_specified_type */ - YYSYMBOL_invariant_qualifier = 490, /* invariant_qualifier */ - YYSYMBOL_interpolation_qualifier = 491, /* interpolation_qualifier */ - YYSYMBOL_layout_qualifier = 492, /* layout_qualifier */ - YYSYMBOL_layout_qualifier_id_list = 493, /* layout_qualifier_id_list */ - YYSYMBOL_layout_qualifier_id = 494, /* layout_qualifier_id */ - YYSYMBOL_precise_qualifier = 495, /* precise_qualifier */ - YYSYMBOL_type_qualifier = 496, /* type_qualifier */ - YYSYMBOL_single_type_qualifier = 497, /* single_type_qualifier */ - YYSYMBOL_storage_qualifier = 498, /* storage_qualifier */ - YYSYMBOL_non_uniform_qualifier = 499, /* non_uniform_qualifier */ - YYSYMBOL_type_name_list = 500, /* type_name_list */ - YYSYMBOL_type_specifier = 501, /* type_specifier */ - YYSYMBOL_array_specifier = 502, /* array_specifier */ - YYSYMBOL_type_parameter_specifier_opt = 503, /* type_parameter_specifier_opt */ - YYSYMBOL_type_parameter_specifier = 504, /* type_parameter_specifier */ - YYSYMBOL_type_parameter_specifier_list = 505, /* type_parameter_specifier_list */ - YYSYMBOL_type_specifier_nonarray = 506, /* type_specifier_nonarray */ - YYSYMBOL_precision_qualifier = 507, /* precision_qualifier */ - YYSYMBOL_struct_specifier = 508, /* struct_specifier */ - YYSYMBOL_509_3 = 509, /* $@3 */ - YYSYMBOL_510_4 = 510, /* $@4 */ - YYSYMBOL_struct_declaration_list = 511, /* struct_declaration_list */ - YYSYMBOL_struct_declaration = 512, /* struct_declaration */ - YYSYMBOL_struct_declarator_list = 513, /* struct_declarator_list */ - YYSYMBOL_struct_declarator = 514, /* struct_declarator */ - YYSYMBOL_initializer = 515, /* initializer */ - YYSYMBOL_initializer_list = 516, /* initializer_list */ - YYSYMBOL_declaration_statement = 517, /* declaration_statement */ - YYSYMBOL_statement = 518, /* statement */ - YYSYMBOL_simple_statement = 519, /* simple_statement */ - YYSYMBOL_demote_statement = 520, /* demote_statement */ - YYSYMBOL_compound_statement = 521, /* compound_statement */ - YYSYMBOL_522_5 = 522, /* $@5 */ - YYSYMBOL_523_6 = 523, /* $@6 */ - YYSYMBOL_statement_no_new_scope = 524, /* statement_no_new_scope */ - YYSYMBOL_statement_scoped = 525, /* statement_scoped */ - YYSYMBOL_526_7 = 526, /* $@7 */ - YYSYMBOL_527_8 = 527, /* $@8 */ - YYSYMBOL_compound_statement_no_new_scope = 528, /* compound_statement_no_new_scope */ - YYSYMBOL_statement_list = 529, /* statement_list */ - YYSYMBOL_expression_statement = 530, /* expression_statement */ - YYSYMBOL_selection_statement = 531, /* selection_statement */ - YYSYMBOL_selection_statement_nonattributed = 532, /* selection_statement_nonattributed */ - YYSYMBOL_selection_rest_statement = 533, /* selection_rest_statement */ - YYSYMBOL_condition = 534, /* condition */ - YYSYMBOL_switch_statement = 535, /* switch_statement */ - YYSYMBOL_switch_statement_nonattributed = 536, /* switch_statement_nonattributed */ - YYSYMBOL_537_9 = 537, /* $@9 */ - YYSYMBOL_switch_statement_list = 538, /* switch_statement_list */ - YYSYMBOL_case_label = 539, /* case_label */ - YYSYMBOL_iteration_statement = 540, /* iteration_statement */ - YYSYMBOL_iteration_statement_nonattributed = 541, /* iteration_statement_nonattributed */ - YYSYMBOL_542_10 = 542, /* $@10 */ - YYSYMBOL_543_11 = 543, /* $@11 */ - YYSYMBOL_544_12 = 544, /* $@12 */ - YYSYMBOL_for_init_statement = 545, /* for_init_statement */ - YYSYMBOL_conditionopt = 546, /* conditionopt */ - YYSYMBOL_for_rest_statement = 547, /* for_rest_statement */ - YYSYMBOL_jump_statement = 548, /* jump_statement */ - YYSYMBOL_translation_unit = 549, /* translation_unit */ - YYSYMBOL_external_declaration = 550, /* external_declaration */ - YYSYMBOL_function_definition = 551, /* function_definition */ - YYSYMBOL_552_13 = 552, /* $@13 */ - YYSYMBOL_attribute = 553, /* attribute */ - YYSYMBOL_attribute_list = 554, /* attribute_list */ - YYSYMBOL_single_attribute = 555 /* single_attribute */ + YYSYMBOL_SPIRV_INSTRUCTION = 317, /* SPIRV_INSTRUCTION */ + YYSYMBOL_SPIRV_EXECUTION_MODE = 318, /* SPIRV_EXECUTION_MODE */ + YYSYMBOL_SPIRV_EXECUTION_MODE_ID = 319, /* SPIRV_EXECUTION_MODE_ID */ + YYSYMBOL_SPIRV_DECORATE = 320, /* SPIRV_DECORATE */ + YYSYMBOL_SPIRV_DECORATE_ID = 321, /* SPIRV_DECORATE_ID */ + YYSYMBOL_SPIRV_DECORATE_STRING = 322, /* SPIRV_DECORATE_STRING */ + YYSYMBOL_SPIRV_TYPE = 323, /* SPIRV_TYPE */ + YYSYMBOL_SPIRV_STORAGE_CLASS = 324, /* SPIRV_STORAGE_CLASS */ + YYSYMBOL_SPIRV_BY_REFERENCE = 325, /* SPIRV_BY_REFERENCE */ + YYSYMBOL_SPIRV_LITERAL = 326, /* SPIRV_LITERAL */ + YYSYMBOL_LEFT_OP = 327, /* LEFT_OP */ + YYSYMBOL_RIGHT_OP = 328, /* RIGHT_OP */ + YYSYMBOL_INC_OP = 329, /* INC_OP */ + YYSYMBOL_DEC_OP = 330, /* DEC_OP */ + YYSYMBOL_LE_OP = 331, /* LE_OP */ + YYSYMBOL_GE_OP = 332, /* GE_OP */ + YYSYMBOL_EQ_OP = 333, /* EQ_OP */ + YYSYMBOL_NE_OP = 334, /* NE_OP */ + YYSYMBOL_AND_OP = 335, /* AND_OP */ + YYSYMBOL_OR_OP = 336, /* OR_OP */ + YYSYMBOL_XOR_OP = 337, /* XOR_OP */ + YYSYMBOL_MUL_ASSIGN = 338, /* MUL_ASSIGN */ + YYSYMBOL_DIV_ASSIGN = 339, /* DIV_ASSIGN */ + YYSYMBOL_ADD_ASSIGN = 340, /* ADD_ASSIGN */ + YYSYMBOL_MOD_ASSIGN = 341, /* MOD_ASSIGN */ + YYSYMBOL_LEFT_ASSIGN = 342, /* LEFT_ASSIGN */ + YYSYMBOL_RIGHT_ASSIGN = 343, /* RIGHT_ASSIGN */ + YYSYMBOL_AND_ASSIGN = 344, /* AND_ASSIGN */ + YYSYMBOL_XOR_ASSIGN = 345, /* XOR_ASSIGN */ + YYSYMBOL_OR_ASSIGN = 346, /* OR_ASSIGN */ + YYSYMBOL_SUB_ASSIGN = 347, /* SUB_ASSIGN */ + YYSYMBOL_STRING_LITERAL = 348, /* STRING_LITERAL */ + YYSYMBOL_LEFT_PAREN = 349, /* LEFT_PAREN */ + YYSYMBOL_RIGHT_PAREN = 350, /* RIGHT_PAREN */ + YYSYMBOL_LEFT_BRACKET = 351, /* LEFT_BRACKET */ + YYSYMBOL_RIGHT_BRACKET = 352, /* RIGHT_BRACKET */ + YYSYMBOL_LEFT_BRACE = 353, /* LEFT_BRACE */ + YYSYMBOL_RIGHT_BRACE = 354, /* RIGHT_BRACE */ + YYSYMBOL_DOT = 355, /* DOT */ + YYSYMBOL_COMMA = 356, /* COMMA */ + YYSYMBOL_COLON = 357, /* COLON */ + YYSYMBOL_EQUAL = 358, /* EQUAL */ + YYSYMBOL_SEMICOLON = 359, /* SEMICOLON */ + YYSYMBOL_BANG = 360, /* BANG */ + YYSYMBOL_DASH = 361, /* DASH */ + YYSYMBOL_TILDE = 362, /* TILDE */ + YYSYMBOL_PLUS = 363, /* PLUS */ + YYSYMBOL_STAR = 364, /* STAR */ + YYSYMBOL_SLASH = 365, /* SLASH */ + YYSYMBOL_PERCENT = 366, /* PERCENT */ + YYSYMBOL_LEFT_ANGLE = 367, /* LEFT_ANGLE */ + YYSYMBOL_RIGHT_ANGLE = 368, /* RIGHT_ANGLE */ + YYSYMBOL_VERTICAL_BAR = 369, /* VERTICAL_BAR */ + YYSYMBOL_CARET = 370, /* CARET */ + YYSYMBOL_AMPERSAND = 371, /* AMPERSAND */ + YYSYMBOL_QUESTION = 372, /* QUESTION */ + YYSYMBOL_INVARIANT = 373, /* INVARIANT */ + YYSYMBOL_HIGH_PRECISION = 374, /* HIGH_PRECISION */ + YYSYMBOL_MEDIUM_PRECISION = 375, /* MEDIUM_PRECISION */ + YYSYMBOL_LOW_PRECISION = 376, /* LOW_PRECISION */ + YYSYMBOL_PRECISION = 377, /* PRECISION */ + YYSYMBOL_PACKED = 378, /* PACKED */ + YYSYMBOL_RESOURCE = 379, /* RESOURCE */ + YYSYMBOL_SUPERP = 380, /* SUPERP */ + YYSYMBOL_FLOATCONSTANT = 381, /* FLOATCONSTANT */ + YYSYMBOL_INTCONSTANT = 382, /* INTCONSTANT */ + YYSYMBOL_UINTCONSTANT = 383, /* UINTCONSTANT */ + YYSYMBOL_BOOLCONSTANT = 384, /* BOOLCONSTANT */ + YYSYMBOL_IDENTIFIER = 385, /* IDENTIFIER */ + YYSYMBOL_TYPE_NAME = 386, /* TYPE_NAME */ + YYSYMBOL_CENTROID = 387, /* CENTROID */ + YYSYMBOL_IN = 388, /* IN */ + YYSYMBOL_OUT = 389, /* OUT */ + YYSYMBOL_INOUT = 390, /* INOUT */ + YYSYMBOL_STRUCT = 391, /* STRUCT */ + YYSYMBOL_VOID = 392, /* VOID */ + YYSYMBOL_WHILE = 393, /* WHILE */ + YYSYMBOL_BREAK = 394, /* BREAK */ + YYSYMBOL_CONTINUE = 395, /* CONTINUE */ + YYSYMBOL_DO = 396, /* DO */ + YYSYMBOL_ELSE = 397, /* ELSE */ + YYSYMBOL_FOR = 398, /* FOR */ + YYSYMBOL_IF = 399, /* IF */ + YYSYMBOL_DISCARD = 400, /* DISCARD */ + YYSYMBOL_RETURN = 401, /* RETURN */ + YYSYMBOL_SWITCH = 402, /* SWITCH */ + YYSYMBOL_CASE = 403, /* CASE */ + YYSYMBOL_DEFAULT = 404, /* DEFAULT */ + YYSYMBOL_TERMINATE_INVOCATION = 405, /* TERMINATE_INVOCATION */ + YYSYMBOL_TERMINATE_RAY = 406, /* TERMINATE_RAY */ + YYSYMBOL_IGNORE_INTERSECTION = 407, /* IGNORE_INTERSECTION */ + YYSYMBOL_UNIFORM = 408, /* UNIFORM */ + YYSYMBOL_SHARED = 409, /* SHARED */ + YYSYMBOL_BUFFER = 410, /* BUFFER */ + YYSYMBOL_FLAT = 411, /* FLAT */ + YYSYMBOL_SMOOTH = 412, /* SMOOTH */ + YYSYMBOL_LAYOUT = 413, /* LAYOUT */ + YYSYMBOL_DOUBLECONSTANT = 414, /* DOUBLECONSTANT */ + YYSYMBOL_INT16CONSTANT = 415, /* INT16CONSTANT */ + YYSYMBOL_UINT16CONSTANT = 416, /* UINT16CONSTANT */ + YYSYMBOL_FLOAT16CONSTANT = 417, /* FLOAT16CONSTANT */ + YYSYMBOL_INT32CONSTANT = 418, /* INT32CONSTANT */ + YYSYMBOL_UINT32CONSTANT = 419, /* UINT32CONSTANT */ + YYSYMBOL_INT64CONSTANT = 420, /* INT64CONSTANT */ + YYSYMBOL_UINT64CONSTANT = 421, /* UINT64CONSTANT */ + YYSYMBOL_SUBROUTINE = 422, /* SUBROUTINE */ + YYSYMBOL_DEMOTE = 423, /* DEMOTE */ + YYSYMBOL_PAYLOADNV = 424, /* PAYLOADNV */ + YYSYMBOL_PAYLOADINNV = 425, /* PAYLOADINNV */ + YYSYMBOL_HITATTRNV = 426, /* HITATTRNV */ + YYSYMBOL_CALLDATANV = 427, /* CALLDATANV */ + YYSYMBOL_CALLDATAINNV = 428, /* CALLDATAINNV */ + YYSYMBOL_PAYLOADEXT = 429, /* PAYLOADEXT */ + YYSYMBOL_PAYLOADINEXT = 430, /* PAYLOADINEXT */ + YYSYMBOL_HITATTREXT = 431, /* HITATTREXT */ + YYSYMBOL_CALLDATAEXT = 432, /* CALLDATAEXT */ + YYSYMBOL_CALLDATAINEXT = 433, /* CALLDATAINEXT */ + YYSYMBOL_PATCH = 434, /* PATCH */ + YYSYMBOL_SAMPLE = 435, /* SAMPLE */ + YYSYMBOL_NONUNIFORM = 436, /* NONUNIFORM */ + YYSYMBOL_COHERENT = 437, /* COHERENT */ + YYSYMBOL_VOLATILE = 438, /* VOLATILE */ + YYSYMBOL_RESTRICT = 439, /* RESTRICT */ + YYSYMBOL_READONLY = 440, /* READONLY */ + YYSYMBOL_WRITEONLY = 441, /* WRITEONLY */ + YYSYMBOL_DEVICECOHERENT = 442, /* DEVICECOHERENT */ + YYSYMBOL_QUEUEFAMILYCOHERENT = 443, /* QUEUEFAMILYCOHERENT */ + YYSYMBOL_WORKGROUPCOHERENT = 444, /* WORKGROUPCOHERENT */ + YYSYMBOL_SUBGROUPCOHERENT = 445, /* SUBGROUPCOHERENT */ + YYSYMBOL_NONPRIVATE = 446, /* NONPRIVATE */ + YYSYMBOL_SHADERCALLCOHERENT = 447, /* SHADERCALLCOHERENT */ + YYSYMBOL_NOPERSPECTIVE = 448, /* NOPERSPECTIVE */ + YYSYMBOL_EXPLICITINTERPAMD = 449, /* EXPLICITINTERPAMD */ + YYSYMBOL_PERVERTEXNV = 450, /* PERVERTEXNV */ + YYSYMBOL_PERPRIMITIVENV = 451, /* PERPRIMITIVENV */ + YYSYMBOL_PERVIEWNV = 452, /* PERVIEWNV */ + YYSYMBOL_PERTASKNV = 453, /* PERTASKNV */ + YYSYMBOL_PRECISE = 454, /* PRECISE */ + YYSYMBOL_YYACCEPT = 455, /* $accept */ + YYSYMBOL_variable_identifier = 456, /* variable_identifier */ + YYSYMBOL_primary_expression = 457, /* primary_expression */ + YYSYMBOL_postfix_expression = 458, /* postfix_expression */ + YYSYMBOL_integer_expression = 459, /* integer_expression */ + YYSYMBOL_function_call = 460, /* function_call */ + YYSYMBOL_function_call_or_method = 461, /* function_call_or_method */ + YYSYMBOL_function_call_generic = 462, /* function_call_generic */ + YYSYMBOL_function_call_header_no_parameters = 463, /* function_call_header_no_parameters */ + YYSYMBOL_function_call_header_with_parameters = 464, /* function_call_header_with_parameters */ + YYSYMBOL_function_call_header = 465, /* function_call_header */ + YYSYMBOL_function_identifier = 466, /* function_identifier */ + YYSYMBOL_unary_expression = 467, /* unary_expression */ + YYSYMBOL_unary_operator = 468, /* unary_operator */ + YYSYMBOL_multiplicative_expression = 469, /* multiplicative_expression */ + YYSYMBOL_additive_expression = 470, /* additive_expression */ + YYSYMBOL_shift_expression = 471, /* shift_expression */ + YYSYMBOL_relational_expression = 472, /* relational_expression */ + YYSYMBOL_equality_expression = 473, /* equality_expression */ + YYSYMBOL_and_expression = 474, /* and_expression */ + YYSYMBOL_exclusive_or_expression = 475, /* exclusive_or_expression */ + YYSYMBOL_inclusive_or_expression = 476, /* inclusive_or_expression */ + YYSYMBOL_logical_and_expression = 477, /* logical_and_expression */ + YYSYMBOL_logical_xor_expression = 478, /* logical_xor_expression */ + YYSYMBOL_logical_or_expression = 479, /* logical_or_expression */ + YYSYMBOL_conditional_expression = 480, /* conditional_expression */ + YYSYMBOL_481_1 = 481, /* $@1 */ + YYSYMBOL_assignment_expression = 482, /* assignment_expression */ + YYSYMBOL_assignment_operator = 483, /* assignment_operator */ + YYSYMBOL_expression = 484, /* expression */ + YYSYMBOL_constant_expression = 485, /* constant_expression */ + YYSYMBOL_declaration = 486, /* declaration */ + YYSYMBOL_block_structure = 487, /* block_structure */ + YYSYMBOL_488_2 = 488, /* $@2 */ + YYSYMBOL_identifier_list = 489, /* identifier_list */ + YYSYMBOL_function_prototype = 490, /* function_prototype */ + YYSYMBOL_function_declarator = 491, /* function_declarator */ + YYSYMBOL_function_header_with_parameters = 492, /* function_header_with_parameters */ + YYSYMBOL_function_header = 493, /* function_header */ + YYSYMBOL_parameter_declarator = 494, /* parameter_declarator */ + YYSYMBOL_parameter_declaration = 495, /* parameter_declaration */ + YYSYMBOL_parameter_type_specifier = 496, /* parameter_type_specifier */ + YYSYMBOL_init_declarator_list = 497, /* init_declarator_list */ + YYSYMBOL_single_declaration = 498, /* single_declaration */ + YYSYMBOL_fully_specified_type = 499, /* fully_specified_type */ + YYSYMBOL_invariant_qualifier = 500, /* invariant_qualifier */ + YYSYMBOL_interpolation_qualifier = 501, /* interpolation_qualifier */ + YYSYMBOL_layout_qualifier = 502, /* layout_qualifier */ + YYSYMBOL_layout_qualifier_id_list = 503, /* layout_qualifier_id_list */ + YYSYMBOL_layout_qualifier_id = 504, /* layout_qualifier_id */ + YYSYMBOL_precise_qualifier = 505, /* precise_qualifier */ + YYSYMBOL_type_qualifier = 506, /* type_qualifier */ + YYSYMBOL_single_type_qualifier = 507, /* single_type_qualifier */ + YYSYMBOL_storage_qualifier = 508, /* storage_qualifier */ + YYSYMBOL_non_uniform_qualifier = 509, /* non_uniform_qualifier */ + YYSYMBOL_type_name_list = 510, /* type_name_list */ + YYSYMBOL_type_specifier = 511, /* type_specifier */ + YYSYMBOL_array_specifier = 512, /* array_specifier */ + YYSYMBOL_type_parameter_specifier_opt = 513, /* type_parameter_specifier_opt */ + YYSYMBOL_type_parameter_specifier = 514, /* type_parameter_specifier */ + YYSYMBOL_type_parameter_specifier_list = 515, /* type_parameter_specifier_list */ + YYSYMBOL_type_specifier_nonarray = 516, /* type_specifier_nonarray */ + YYSYMBOL_precision_qualifier = 517, /* precision_qualifier */ + YYSYMBOL_struct_specifier = 518, /* struct_specifier */ + YYSYMBOL_519_3 = 519, /* $@3 */ + YYSYMBOL_520_4 = 520, /* $@4 */ + YYSYMBOL_struct_declaration_list = 521, /* struct_declaration_list */ + YYSYMBOL_struct_declaration = 522, /* struct_declaration */ + YYSYMBOL_struct_declarator_list = 523, /* struct_declarator_list */ + YYSYMBOL_struct_declarator = 524, /* struct_declarator */ + YYSYMBOL_initializer = 525, /* initializer */ + YYSYMBOL_initializer_list = 526, /* initializer_list */ + YYSYMBOL_declaration_statement = 527, /* declaration_statement */ + YYSYMBOL_statement = 528, /* statement */ + YYSYMBOL_simple_statement = 529, /* simple_statement */ + YYSYMBOL_demote_statement = 530, /* demote_statement */ + YYSYMBOL_compound_statement = 531, /* compound_statement */ + YYSYMBOL_532_5 = 532, /* $@5 */ + YYSYMBOL_533_6 = 533, /* $@6 */ + YYSYMBOL_statement_no_new_scope = 534, /* statement_no_new_scope */ + YYSYMBOL_statement_scoped = 535, /* statement_scoped */ + YYSYMBOL_536_7 = 536, /* $@7 */ + YYSYMBOL_537_8 = 537, /* $@8 */ + YYSYMBOL_compound_statement_no_new_scope = 538, /* compound_statement_no_new_scope */ + YYSYMBOL_statement_list = 539, /* statement_list */ + YYSYMBOL_expression_statement = 540, /* expression_statement */ + YYSYMBOL_selection_statement = 541, /* selection_statement */ + YYSYMBOL_selection_statement_nonattributed = 542, /* selection_statement_nonattributed */ + YYSYMBOL_selection_rest_statement = 543, /* selection_rest_statement */ + YYSYMBOL_condition = 544, /* condition */ + YYSYMBOL_switch_statement = 545, /* switch_statement */ + YYSYMBOL_switch_statement_nonattributed = 546, /* switch_statement_nonattributed */ + YYSYMBOL_547_9 = 547, /* $@9 */ + YYSYMBOL_switch_statement_list = 548, /* switch_statement_list */ + YYSYMBOL_case_label = 549, /* case_label */ + YYSYMBOL_iteration_statement = 550, /* iteration_statement */ + YYSYMBOL_iteration_statement_nonattributed = 551, /* iteration_statement_nonattributed */ + YYSYMBOL_552_10 = 552, /* $@10 */ + YYSYMBOL_553_11 = 553, /* $@11 */ + YYSYMBOL_554_12 = 554, /* $@12 */ + YYSYMBOL_for_init_statement = 555, /* for_init_statement */ + YYSYMBOL_conditionopt = 556, /* conditionopt */ + YYSYMBOL_for_rest_statement = 557, /* for_rest_statement */ + YYSYMBOL_jump_statement = 558, /* jump_statement */ + YYSYMBOL_translation_unit = 559, /* translation_unit */ + YYSYMBOL_external_declaration = 560, /* external_declaration */ + YYSYMBOL_function_definition = 561, /* function_definition */ + YYSYMBOL_562_13 = 562, /* $@13 */ + YYSYMBOL_attribute = 563, /* attribute */ + YYSYMBOL_attribute_list = 564, /* attribute_list */ + YYSYMBOL_single_attribute = 565, /* single_attribute */ + YYSYMBOL_spirv_requirements_list = 566, /* spirv_requirements_list */ + YYSYMBOL_spirv_requirements_parameter = 567, /* spirv_requirements_parameter */ + YYSYMBOL_spirv_extension_list = 568, /* spirv_extension_list */ + YYSYMBOL_spirv_capability_list = 569, /* spirv_capability_list */ + YYSYMBOL_spirv_execution_mode_qualifier = 570, /* spirv_execution_mode_qualifier */ + YYSYMBOL_spirv_execution_mode_parameter_list = 571, /* spirv_execution_mode_parameter_list */ + YYSYMBOL_spirv_execution_mode_parameter = 572, /* spirv_execution_mode_parameter */ + YYSYMBOL_spirv_execution_mode_id_parameter_list = 573, /* spirv_execution_mode_id_parameter_list */ + YYSYMBOL_spirv_storage_class_qualifier = 574, /* spirv_storage_class_qualifier */ + YYSYMBOL_spirv_decorate_qualifier = 575, /* spirv_decorate_qualifier */ + YYSYMBOL_spirv_decorate_parameter_list = 576, /* spirv_decorate_parameter_list */ + YYSYMBOL_spirv_decorate_parameter = 577, /* spirv_decorate_parameter */ + YYSYMBOL_spirv_decorate_id_parameter_list = 578, /* spirv_decorate_id_parameter_list */ + YYSYMBOL_spirv_decorate_string_parameter_list = 579, /* spirv_decorate_string_parameter_list */ + YYSYMBOL_spirv_type_specifier = 580, /* spirv_type_specifier */ + YYSYMBOL_spirv_type_parameter_list = 581, /* spirv_type_parameter_list */ + YYSYMBOL_spirv_type_parameter = 582, /* spirv_type_parameter */ + YYSYMBOL_spirv_instruction_qualifier = 583, /* spirv_instruction_qualifier */ + YYSYMBOL_spirv_instruction_qualifier_list = 584, /* spirv_instruction_qualifier_list */ + YYSYMBOL_spirv_instruction_qualifier_id = 585 /* spirv_instruction_qualifier_id */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; /* Second part of user prologue. */ -#line 133 "MachineIndependent/glslang.y" +#line 136 "MachineIndependent/glslang.y" /* windows only pragma */ @@ -698,7 +728,7 @@ typedef enum yysymbol_kind_t yysymbol_kind_t; extern int yylex(YYSTYPE*, TParseContext&); -#line 702 "MachineIndependent/glslang_tab.cpp" +#line 732 "MachineIndependent/glslang_tab.cpp" #ifdef short @@ -738,18 +768,6 @@ typedef int_least16_t yytype_int16; typedef short yytype_int16; #endif -/* Work around bug in HP-UX 11.23, which defines these macros - incorrectly for preprocessor constants. This workaround can likely - be removed in 2023, as HPE has promised support for HP-UX 11.23 - (aka HP-UX 11i v2) only through the end of 2022; see Table 2 of - . */ -#ifdef __hpux -# undef UINT_LEAST8_MAX -# undef UINT_LEAST16_MAX -# define UINT_LEAST8_MAX 255 -# define UINT_LEAST16_MAX 65535 -#endif - #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ @@ -847,9 +865,9 @@ typedef int yy_state_fast_t; /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ -# define YY_USE(E) ((void) (E)) +# define YYUSE(E) ((void) (E)) #else -# define YY_USE(E) /* empty */ +# define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ @@ -1014,21 +1032,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 419 +#define YYFINAL 442 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 10891 +#define YYLAST 12453 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 445 +#define YYNTOKENS 455 /* YYNNTS -- Number of nonterminals. */ -#define YYNNTS 111 +#define YYNNTS 131 /* YYNRULES -- Number of rules. */ -#define YYNRULES 620 +#define YYNRULES 684 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 772 +#define YYNSTATES 930 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 699 +#define YYMAXUTOK 709 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1111,76 +1129,83 @@ static const yytype_int16 yytranslate[] = 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444 + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454 }; #if YYDEBUG /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { - 0, 371, 371, 377, 380, 385, 388, 391, 395, 399, - 402, 406, 410, 414, 418, 422, 426, 432, 440, 443, - 446, 449, 452, 457, 465, 472, 479, 485, 489, 496, - 499, 505, 512, 522, 530, 535, 563, 572, 578, 582, - 586, 606, 607, 608, 609, 615, 616, 621, 626, 635, - 636, 641, 649, 650, 656, 665, 666, 671, 676, 681, - 689, 690, 699, 711, 712, 721, 722, 731, 732, 741, - 742, 750, 751, 759, 760, 768, 769, 769, 787, 788, - 804, 808, 812, 816, 821, 825, 829, 833, 837, 841, - 845, 852, 855, 866, 873, 878, 883, 890, 894, 898, - 902, 907, 912, 921, 921, 932, 936, 943, 947, 953, - 959, 969, 972, 979, 987, 1007, 1030, 1045, 1070, 1081, - 1091, 1101, 1111, 1120, 1123, 1127, 1131, 1136, 1144, 1151, - 1156, 1161, 1166, 1175, 1185, 1212, 1221, 1228, 1236, 1243, - 1250, 1258, 1268, 1275, 1286, 1292, 1295, 1302, 1306, 1310, - 1319, 1329, 1332, 1343, 1346, 1349, 1353, 1357, 1362, 1366, - 1373, 1377, 1382, 1388, 1394, 1401, 1406, 1414, 1420, 1432, - 1446, 1452, 1457, 1465, 1473, 1481, 1489, 1497, 1505, 1513, - 1521, 1528, 1535, 1539, 1544, 1549, 1554, 1559, 1564, 1569, - 1573, 1577, 1581, 1585, 1591, 1602, 1609, 1612, 1621, 1626, - 1636, 1641, 1649, 1653, 1663, 1666, 1672, 1678, 1685, 1695, - 1699, 1703, 1707, 1712, 1716, 1721, 1726, 1731, 1736, 1741, - 1746, 1751, 1756, 1761, 1767, 1773, 1779, 1784, 1789, 1794, - 1799, 1804, 1809, 1814, 1819, 1824, 1829, 1834, 1840, 1847, - 1852, 1857, 1862, 1867, 1872, 1877, 1882, 1887, 1892, 1897, - 1902, 1910, 1918, 1926, 1932, 1938, 1944, 1950, 1956, 1962, - 1968, 1974, 1980, 1986, 1992, 1998, 2004, 2010, 2016, 2022, - 2028, 2034, 2040, 2046, 2052, 2058, 2064, 2070, 2076, 2082, - 2088, 2094, 2100, 2106, 2112, 2118, 2124, 2132, 2140, 2148, - 2156, 2164, 2172, 2180, 2188, 2196, 2204, 2212, 2220, 2226, - 2232, 2238, 2244, 2250, 2256, 2262, 2268, 2274, 2280, 2286, - 2292, 2298, 2304, 2310, 2316, 2322, 2328, 2334, 2340, 2346, - 2352, 2358, 2364, 2370, 2376, 2382, 2388, 2394, 2400, 2406, - 2412, 2418, 2424, 2430, 2436, 2440, 2444, 2448, 2453, 2459, - 2464, 2469, 2474, 2479, 2484, 2489, 2495, 2500, 2505, 2510, - 2515, 2520, 2526, 2532, 2538, 2544, 2550, 2556, 2562, 2568, - 2574, 2580, 2586, 2592, 2598, 2604, 2609, 2614, 2619, 2624, - 2629, 2634, 2640, 2645, 2650, 2655, 2660, 2665, 2670, 2675, - 2681, 2686, 2691, 2696, 2701, 2706, 2711, 2716, 2721, 2726, - 2731, 2736, 2741, 2746, 2751, 2757, 2762, 2767, 2773, 2779, - 2784, 2789, 2794, 2800, 2805, 2810, 2815, 2821, 2826, 2831, - 2836, 2842, 2847, 2852, 2857, 2863, 2869, 2875, 2881, 2886, - 2892, 2898, 2904, 2909, 2914, 2919, 2924, 2929, 2935, 2940, - 2945, 2950, 2956, 2961, 2966, 2971, 2977, 2982, 2987, 2992, - 2998, 3003, 3008, 3013, 3019, 3024, 3029, 3034, 3040, 3045, - 3050, 3055, 3061, 3066, 3071, 3076, 3082, 3087, 3092, 3097, - 3103, 3108, 3113, 3118, 3124, 3129, 3134, 3139, 3145, 3150, - 3155, 3160, 3166, 3171, 3176, 3181, 3187, 3192, 3197, 3202, - 3208, 3213, 3218, 3223, 3229, 3234, 3239, 3244, 3249, 3254, - 3259, 3264, 3269, 3274, 3279, 3284, 3289, 3294, 3299, 3304, - 3309, 3314, 3319, 3324, 3329, 3334, 3339, 3344, 3349, 3355, - 3361, 3367, 3373, 3380, 3387, 3393, 3399, 3405, 3411, 3417, - 3423, 3430, 3435, 3451, 3456, 3461, 3469, 3469, 3480, 3480, - 3490, 3493, 3506, 3528, 3555, 3559, 3565, 3570, 3581, 3585, - 3591, 3597, 3608, 3611, 3618, 3622, 3623, 3629, 3630, 3631, - 3632, 3633, 3634, 3635, 3637, 3643, 3652, 3653, 3657, 3653, - 3669, 3670, 3674, 3674, 3681, 3681, 3695, 3698, 3706, 3714, - 3725, 3726, 3730, 3734, 3742, 3749, 3753, 3761, 3765, 3778, - 3782, 3790, 3790, 3810, 3813, 3819, 3831, 3843, 3847, 3855, - 3855, 3870, 3870, 3886, 3886, 3907, 3910, 3916, 3919, 3925, - 3929, 3936, 3941, 3946, 3953, 3956, 3960, 3965, 3969, 3979, - 3983, 3992, 3995, 3999, 4008, 4008, 4050, 4055, 4058, 4063, - 4066 + 0, 392, 392, 398, 401, 406, 409, 412, 416, 420, + 423, 427, 431, 435, 439, 443, 447, 453, 461, 464, + 467, 470, 473, 478, 486, 493, 500, 506, 510, 517, + 520, 526, 533, 543, 551, 556, 584, 593, 599, 603, + 607, 627, 628, 629, 630, 636, 637, 642, 647, 656, + 657, 662, 670, 671, 677, 686, 687, 692, 697, 702, + 710, 711, 720, 732, 733, 742, 743, 752, 753, 762, + 763, 771, 772, 780, 781, 789, 790, 790, 808, 809, + 825, 829, 833, 837, 842, 846, 850, 854, 858, 862, + 866, 873, 876, 887, 894, 900, 907, 913, 918, 925, + 929, 933, 937, 942, 947, 956, 956, 967, 971, 978, + 982, 988, 994, 1004, 1007, 1014, 1022, 1042, 1065, 1080, + 1105, 1116, 1126, 1136, 1146, 1155, 1158, 1162, 1166, 1171, + 1179, 1186, 1191, 1196, 1201, 1210, 1220, 1247, 1256, 1263, + 1271, 1278, 1285, 1293, 1303, 1310, 1321, 1327, 1330, 1337, + 1341, 1345, 1354, 1364, 1367, 1378, 1381, 1384, 1388, 1392, + 1397, 1401, 1404, 1409, 1413, 1418, 1427, 1431, 1436, 1442, + 1448, 1455, 1460, 1468, 1474, 1486, 1500, 1506, 1511, 1519, + 1527, 1535, 1543, 1551, 1559, 1567, 1575, 1582, 1589, 1593, + 1598, 1603, 1608, 1613, 1618, 1623, 1627, 1631, 1635, 1639, + 1645, 1656, 1663, 1666, 1675, 1680, 1690, 1695, 1703, 1707, + 1717, 1720, 1726, 1732, 1739, 1749, 1753, 1757, 1761, 1766, + 1770, 1775, 1780, 1785, 1790, 1795, 1800, 1805, 1810, 1815, + 1821, 1827, 1833, 1838, 1843, 1848, 1853, 1858, 1863, 1868, + 1873, 1878, 1883, 1888, 1894, 1901, 1906, 1911, 1916, 1921, + 1926, 1931, 1936, 1941, 1946, 1951, 1956, 1964, 1972, 1980, + 1986, 1992, 1998, 2004, 2010, 2016, 2022, 2028, 2034, 2040, + 2046, 2052, 2058, 2064, 2070, 2076, 2082, 2088, 2094, 2100, + 2106, 2112, 2118, 2124, 2130, 2136, 2142, 2148, 2154, 2160, + 2166, 2172, 2178, 2186, 2194, 2202, 2210, 2218, 2226, 2234, + 2242, 2250, 2258, 2266, 2274, 2280, 2286, 2292, 2298, 2304, + 2310, 2316, 2322, 2328, 2334, 2340, 2346, 2352, 2358, 2364, + 2370, 2376, 2382, 2388, 2394, 2400, 2406, 2412, 2418, 2424, + 2430, 2436, 2442, 2448, 2454, 2460, 2466, 2472, 2478, 2484, + 2490, 2494, 2498, 2502, 2507, 2513, 2518, 2523, 2528, 2533, + 2538, 2543, 2549, 2554, 2559, 2564, 2569, 2574, 2580, 2586, + 2592, 2598, 2604, 2610, 2616, 2622, 2628, 2634, 2640, 2646, + 2652, 2658, 2663, 2668, 2673, 2678, 2683, 2688, 2694, 2699, + 2704, 2709, 2714, 2719, 2724, 2729, 2735, 2740, 2745, 2750, + 2755, 2760, 2765, 2770, 2775, 2780, 2785, 2790, 2795, 2800, + 2805, 2811, 2816, 2821, 2827, 2833, 2838, 2843, 2848, 2854, + 2859, 2864, 2869, 2875, 2880, 2885, 2890, 2896, 2901, 2906, + 2911, 2917, 2923, 2929, 2935, 2940, 2946, 2952, 2958, 2963, + 2968, 2973, 2978, 2983, 2989, 2994, 2999, 3004, 3010, 3015, + 3020, 3025, 3031, 3036, 3041, 3046, 3052, 3057, 3062, 3067, + 3073, 3078, 3083, 3088, 3094, 3099, 3104, 3109, 3115, 3120, + 3125, 3130, 3136, 3141, 3146, 3151, 3157, 3162, 3167, 3172, + 3178, 3183, 3188, 3193, 3199, 3204, 3209, 3214, 3220, 3225, + 3230, 3235, 3241, 3246, 3251, 3256, 3262, 3267, 3272, 3277, + 3283, 3288, 3293, 3298, 3303, 3308, 3313, 3318, 3323, 3328, + 3333, 3338, 3343, 3348, 3353, 3358, 3363, 3368, 3373, 3378, + 3383, 3388, 3393, 3398, 3403, 3409, 3415, 3421, 3427, 3434, + 3441, 3447, 3453, 3459, 3465, 3471, 3477, 3483, 3488, 3493, + 3509, 3514, 3519, 3527, 3527, 3538, 3538, 3548, 3551, 3564, + 3586, 3613, 3617, 3623, 3628, 3639, 3643, 3649, 3655, 3666, + 3669, 3676, 3680, 3681, 3687, 3688, 3689, 3690, 3691, 3692, + 3693, 3695, 3701, 3710, 3711, 3715, 3711, 3727, 3728, 3732, + 3732, 3739, 3739, 3753, 3756, 3764, 3772, 3783, 3784, 3788, + 3792, 3800, 3807, 3811, 3819, 3823, 3836, 3840, 3848, 3848, + 3868, 3871, 3877, 3889, 3901, 3905, 3913, 3913, 3928, 3928, + 3944, 3944, 3965, 3968, 3974, 3977, 3983, 3987, 3994, 3999, + 4004, 4011, 4014, 4018, 4023, 4027, 4037, 4041, 4050, 4053, + 4057, 4066, 4066, 4108, 4113, 4116, 4121, 4124, 4131, 4134, + 4139, 4142, 4147, 4150, 4155, 4158, 4163, 4167, 4172, 4176, + 4181, 4185, 4192, 4195, 4200, 4203, 4206, 4209, 4212, 4217, + 4226, 4237, 4242, 4250, 4254, 4259, 4263, 4268, 4272, 4277, + 4281, 4288, 4291, 4296, 4299, 4302, 4305, 4310, 4318, 4328, + 4332, 4337, 4341, 4346, 4350, 4357, 4360, 4365, 4368, 4373, + 4376, 4382, 4385, 4390, 4393 }; #endif @@ -1267,17 +1292,20 @@ static const char *const yytname[] = "F16TEXTURECUBEARRAY", "F16TEXTUREBUFFER", "F16TEXTURE2DMS", "F16TEXTURE2DMSARRAY", "SUBPASSINPUT", "SUBPASSINPUTMS", "ISUBPASSINPUT", "ISUBPASSINPUTMS", "USUBPASSINPUT", "USUBPASSINPUTMS", "F16SUBPASSINPUT", - "F16SUBPASSINPUTMS", "LEFT_OP", "RIGHT_OP", "INC_OP", "DEC_OP", "LE_OP", - "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", "XOR_OP", "MUL_ASSIGN", - "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", "LEFT_ASSIGN", "RIGHT_ASSIGN", - "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", "SUB_ASSIGN", "STRING_LITERAL", - "LEFT_PAREN", "RIGHT_PAREN", "LEFT_BRACKET", "RIGHT_BRACKET", - "LEFT_BRACE", "RIGHT_BRACE", "DOT", "COMMA", "COLON", "EQUAL", - "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", "STAR", "SLASH", "PERCENT", - "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", "CARET", "AMPERSAND", - "QUESTION", "INVARIANT", "HIGH_PRECISION", "MEDIUM_PRECISION", - "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", "SUPERP", - "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", + "F16SUBPASSINPUTMS", "SPIRV_INSTRUCTION", "SPIRV_EXECUTION_MODE", + "SPIRV_EXECUTION_MODE_ID", "SPIRV_DECORATE", "SPIRV_DECORATE_ID", + "SPIRV_DECORATE_STRING", "SPIRV_TYPE", "SPIRV_STORAGE_CLASS", + "SPIRV_BY_REFERENCE", "SPIRV_LITERAL", "LEFT_OP", "RIGHT_OP", "INC_OP", + "DEC_OP", "LE_OP", "GE_OP", "EQ_OP", "NE_OP", "AND_OP", "OR_OP", + "XOR_OP", "MUL_ASSIGN", "DIV_ASSIGN", "ADD_ASSIGN", "MOD_ASSIGN", + "LEFT_ASSIGN", "RIGHT_ASSIGN", "AND_ASSIGN", "XOR_ASSIGN", "OR_ASSIGN", + "SUB_ASSIGN", "STRING_LITERAL", "LEFT_PAREN", "RIGHT_PAREN", + "LEFT_BRACKET", "RIGHT_BRACKET", "LEFT_BRACE", "RIGHT_BRACE", "DOT", + "COMMA", "COLON", "EQUAL", "SEMICOLON", "BANG", "DASH", "TILDE", "PLUS", + "STAR", "SLASH", "PERCENT", "LEFT_ANGLE", "RIGHT_ANGLE", "VERTICAL_BAR", + "CARET", "AMPERSAND", "QUESTION", "INVARIANT", "HIGH_PRECISION", + "MEDIUM_PRECISION", "LOW_PRECISION", "PRECISION", "PACKED", "RESOURCE", + "SUPERP", "FLOATCONSTANT", "INTCONSTANT", "UINTCONSTANT", "BOOLCONSTANT", "IDENTIFIER", "TYPE_NAME", "CENTROID", "IN", "OUT", "INOUT", "STRUCT", "VOID", "WHILE", "BREAK", "CONTINUE", "DO", "ELSE", "FOR", "IF", "DISCARD", "RETURN", "SWITCH", "CASE", "DEFAULT", "TERMINATE_INVOCATION", @@ -1330,7 +1358,18 @@ static const char *const yytname[] = "for_init_statement", "conditionopt", "for_rest_statement", "jump_statement", "translation_unit", "external_declaration", "function_definition", "$@13", "attribute", "attribute_list", - "single_attribute", YY_NULLPTR + "single_attribute", "spirv_requirements_list", + "spirv_requirements_parameter", "spirv_extension_list", + "spirv_capability_list", "spirv_execution_mode_qualifier", + "spirv_execution_mode_parameter_list", "spirv_execution_mode_parameter", + "spirv_execution_mode_id_parameter_list", + "spirv_storage_class_qualifier", "spirv_decorate_qualifier", + "spirv_decorate_parameter_list", "spirv_decorate_parameter", + "spirv_decorate_id_parameter_list", + "spirv_decorate_string_parameter_list", "spirv_type_specifier", + "spirv_type_parameter_list", "spirv_type_parameter", + "spirv_instruction_qualifier", "spirv_instruction_qualifier_list", + "spirv_instruction_qualifier_id", YY_NULLPTR }; static const char * @@ -1389,16 +1428,17 @@ static const yytype_int16 yytoknum[] = 665, 666, 667, 668, 669, 670, 671, 672, 673, 674, 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, - 695, 696, 697, 698, 699 + 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, + 705, 706, 707, 708, 709 }; #endif -#define YYPACT_NINF (-741) +#define YYPACT_NINF (-863) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-563) +#define YYTABLE_NINF (-570) #define yytable_value_is_error(Yyn) \ 0 @@ -1407,84 +1447,99 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 4753, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -328, -741, -741, -741, -741, - -741, 102, -741, -741, -741, -741, -741, 7, -741, -741, - -741, -741, -741, -741, -322, -257, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, 10, 8, - 47, 64, 6963, 87, -741, 46, -741, -741, -741, -741, - 5195, -741, -741, -741, -741, 77, -741, -741, 775, -741, - -741, 6963, 63, 20, -741, 104, -24, 106, -741, -330, - -741, 121, 142, 6963, -741, -741, -741, 6963, 112, 115, - -741, -334, -741, 22, -741, -741, 9942, 151, -741, -741, - -741, 154, 125, 6963, 163, 24, -741, 155, 6963, -741, - 157, -741, 18, -741, -741, 38, 8250, -741, -329, 1217, - -741, -741, -741, -741, -741, 151, -325, -741, 8673, 12, - -741, 128, -741, 94, 9942, 9942, -741, 9942, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, 86, -741, -741, - -741, 167, 68, 10365, 170, -741, 9942, -741, -741, -343, - 172, 142, 176, 9942, 169, 63, -741, 6963, 143, 5637, - -741, 6963, 9942, -741, -24, -741, 144, -741, -741, 116, - 16, -296, 41, 150, 156, 160, 164, 197, 199, 21, - 182, 9096, -741, 183, -741, -741, 189, 193, 194, -741, - 192, 205, 196, 9519, 207, 9942, 201, 208, 210, 211, - 212, 204, -741, -741, 96, -741, 8, 214, 217, -741, - -741, -741, -741, -741, 1659, -741, -741, -741, -741, -741, - -741, -741, -741, -741, 4311, 172, 8673, 13, 7404, -741, - -741, 8673, 6963, -741, 187, -741, -741, -741, 69, -741, - -741, 9942, 190, -741, -741, 9942, 226, -741, -741, -741, - 9942, -741, -741, -741, 227, -741, -741, 143, 151, 108, - -741, -741, -741, 6079, -741, -741, -741, 9942, 9942, 9942, - 9942, 9942, 9942, 9942, 9942, 9942, 9942, 9942, 9942, 9942, - 9942, 9942, 9942, 9942, 9942, 9942, -741, -741, -741, 228, - -741, 2101, -741, -741, -741, 2101, -741, 9942, -741, -741, - 113, 9942, 131, -741, -741, -741, -741, -741, -741, -741, - -741, -741, -741, -741, -741, -741, -741, -741, -741, 9942, - 9942, -741, -741, -741, -741, -741, -741, -741, 8673, -741, - -741, 109, -741, 6521, -741, -741, 229, 222, -741, -741, - -741, -741, 114, 172, 143, -741, -741, -741, -741, -741, - 116, 116, 16, 16, -296, -296, -296, -296, 41, 41, - 150, 156, 160, 164, 197, 199, 9942, -741, 2101, 3869, - 186, 3427, 80, -741, 84, -741, -741, -741, -741, -741, - 7827, -741, -741, -741, -741, 133, 230, 222, 200, 236, - 238, -741, -741, 3869, 235, -741, -741, -741, 9942, -741, - 231, 2543, 9942, -741, 233, 240, 198, 241, 2985, -741, - 244, -741, 8673, -741, -741, -741, 89, 9942, 2543, 235, - -741, -741, 2101, -741, 234, 222, -741, -741, 2101, 245, - -741, -741 + 4549, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -260, -182, -177, -163, -130, + -115, -100, -89, -863, -863, -196, -863, -863, -863, -863, + -863, -324, -863, -863, -863, -863, -863, -306, -863, -863, + -863, -863, -863, -863, -77, -66, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -332, -175, + -153, -161, 7713, -266, -863, -71, -863, -863, -863, -863, + 5453, -863, -863, -863, -863, -116, -863, -863, 933, -863, + -863, 7713, -35, -863, -863, -863, 5905, -54, -139, -138, + -137, -128, -124, -54, -123, -51, 12061, -863, -15, -347, + -44, -863, -295, -863, -9, -6, 7713, -863, -863, -863, + 7713, -39, -38, -863, -303, -863, -226, -863, -863, 10762, + -3, -863, -863, -863, 1, -32, 7713, -863, -5, -8, + -1, -863, -230, -863, -219, -2, 3, 4, 5, -215, + 6, 8, 10, 11, 12, 15, -214, 13, 16, 21, + -134, -863, 17, 7713, -863, 19, -863, -212, -863, -863, + -211, 9030, -863, -273, 1385, -863, -863, -863, -863, -863, + -3, -263, -863, 9463, -236, -863, -28, -863, -106, 10762, + 10762, -863, 10762, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -264, -863, -863, -863, 23, -203, 11195, 25, + -863, 10762, -863, -863, -311, 24, -6, 29, -863, -309, + -54, -863, -20, -863, -323, 28, -118, 10762, -112, -863, + -155, -111, 10762, -103, 35, -98, -54, -863, 11628, -863, + -94, 10762, 32, -51, -863, 7713, 18, 6357, -863, 7713, + 10762, -863, -347, -863, 33, -863, -863, -72, -254, -86, + -297, -68, -13, 26, 20, 50, 49, -300, 42, 9896, + -863, 43, -863, -863, 55, 58, 60, -863, 65, 71, + 62, 10329, 73, 10762, 66, 69, 70, 72, 74, -241, + -863, -863, -41, -863, -175, 83, 85, -863, -863, -863, + -863, -863, 1837, -863, -863, -863, -863, -863, -863, -863, + -863, -863, 5001, 24, 9463, -233, 8164, -863, -863, 9463, + 7713, -863, 51, -863, -863, -863, -194, -863, -863, 10762, + 52, -863, -863, 10762, 88, -863, -863, -863, 10762, -863, + -863, -863, -315, -863, -863, -191, 82, -863, -863, -863, + -863, -863, -863, -190, -863, -187, -863, -863, -186, 86, + -863, -863, -863, -863, -169, -863, -168, -863, -167, 89, + -863, -165, 91, -157, 82, -863, 85, -156, -863, 94, + 98, -863, -863, 18, -3, -40, -863, -863, -863, 6809, + -863, -863, -863, 10762, 10762, 10762, 10762, 10762, 10762, 10762, + 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, + 10762, 10762, -863, -863, -863, 97, -863, 2289, -863, -863, + -863, 2289, -863, 10762, -863, -863, -34, 10762, -79, -863, + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, 10762, 10762, -863, -863, -863, + -863, -863, -863, -863, 9463, -863, -863, -208, -863, 7261, + -863, -863, 99, 96, -863, -863, -863, -863, -863, -132, + -131, -863, -307, -863, -323, -863, -323, -863, 10762, 10762, + -863, -155, -863, -155, -863, 10762, 10762, -863, 93, 35, + -863, 11628, -863, 10762, -863, -863, -33, 24, 18, -863, + -863, -863, -863, -863, -72, -72, -254, -254, -86, -86, + -86, -86, -297, -297, -68, -13, 26, 20, 50, 49, + 10762, -863, 2289, 4097, 57, 3645, -154, -863, -152, -863, + -863, -863, -863, -863, 8597, -863, -863, -863, 105, -863, + 75, -863, -145, -863, -144, -863, -143, -863, -142, -863, + -141, -140, -863, -863, -863, -27, 100, 96, 76, 106, + 109, -863, -863, 4097, 107, -863, -863, -863, -863, -863, + -863, -863, -863, -863, -863, -863, 10762, -863, 101, 2741, + 10762, -863, 103, 113, 67, 112, 3193, -863, 114, -863, + 9463, -863, -863, -863, -133, 10762, 2741, 107, -863, -863, + 2289, -863, 110, 96, -863, -863, 2289, 116, -863, -863 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1492,118 +1547,137 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 0, 160, 213, 211, 212, 210, 217, 218, 219, 220, - 221, 222, 223, 224, 225, 214, 215, 216, 226, 227, - 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, - 339, 340, 341, 342, 343, 344, 345, 365, 366, 367, - 368, 369, 370, 371, 380, 393, 394, 381, 382, 384, - 383, 385, 386, 387, 388, 389, 390, 391, 392, 168, - 169, 239, 240, 238, 241, 248, 249, 246, 247, 244, - 245, 242, 243, 271, 272, 273, 283, 284, 285, 268, - 269, 270, 280, 281, 282, 265, 266, 267, 277, 278, - 279, 262, 263, 264, 274, 275, 276, 250, 251, 252, - 286, 287, 288, 253, 254, 255, 298, 299, 300, 256, - 257, 258, 310, 311, 312, 259, 260, 261, 322, 323, - 324, 289, 290, 291, 292, 293, 294, 295, 296, 297, - 301, 302, 303, 304, 305, 306, 307, 308, 309, 313, - 314, 315, 316, 317, 318, 319, 320, 321, 325, 326, - 327, 328, 329, 330, 331, 332, 333, 337, 334, 335, - 336, 518, 519, 520, 349, 350, 373, 376, 338, 347, - 348, 364, 346, 395, 396, 399, 400, 401, 403, 404, - 405, 407, 408, 409, 411, 412, 508, 509, 372, 374, - 375, 351, 352, 353, 397, 354, 358, 359, 362, 402, - 406, 410, 355, 356, 360, 361, 398, 357, 363, 442, - 444, 445, 446, 448, 449, 450, 452, 453, 454, 456, - 457, 458, 460, 461, 462, 464, 465, 466, 468, 469, - 470, 472, 473, 474, 476, 477, 478, 480, 481, 482, - 484, 485, 443, 447, 451, 455, 459, 467, 471, 475, - 463, 479, 483, 486, 487, 488, 489, 490, 491, 492, - 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, - 503, 504, 505, 506, 507, 377, 378, 379, 413, 422, - 424, 418, 423, 425, 426, 428, 429, 430, 432, 433, - 434, 436, 437, 438, 440, 441, 414, 415, 416, 427, - 417, 419, 420, 421, 431, 435, 439, 510, 511, 514, - 515, 516, 517, 512, 513, 0, 613, 135, 523, 524, - 525, 0, 522, 164, 162, 163, 161, 0, 209, 165, - 166, 167, 137, 136, 0, 193, 174, 176, 172, 178, - 180, 175, 177, 173, 179, 181, 170, 171, 195, 182, - 189, 190, 191, 192, 183, 184, 185, 186, 187, 188, - 138, 139, 140, 141, 142, 143, 150, 612, 0, 614, - 0, 112, 111, 0, 123, 128, 157, 156, 154, 158, - 0, 151, 153, 159, 133, 205, 155, 521, 0, 609, - 611, 0, 0, 0, 528, 0, 0, 0, 97, 0, - 94, 0, 107, 0, 119, 113, 121, 0, 122, 0, - 95, 129, 100, 0, 152, 134, 0, 198, 204, 1, - 610, 0, 0, 0, 619, 0, 617, 0, 0, 526, - 147, 149, 0, 145, 196, 0, 0, 98, 0, 0, - 615, 108, 114, 118, 120, 116, 124, 115, 0, 130, - 103, 0, 101, 0, 0, 0, 9, 0, 43, 42, - 44, 41, 5, 6, 7, 8, 2, 16, 14, 15, - 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, - 26, 0, 0, 30, 0, 207, 0, 36, 34, 0, - 199, 109, 0, 0, 0, 0, 96, 0, 0, 0, - 530, 0, 0, 144, 0, 194, 0, 200, 45, 49, - 52, 55, 60, 63, 65, 67, 69, 71, 73, 75, - 0, 0, 99, 557, 566, 570, 0, 0, 0, 591, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 45, 78, 91, 0, 544, 0, 159, 133, 547, - 568, 546, 554, 545, 0, 548, 549, 572, 550, 579, - 551, 552, 587, 553, 0, 117, 0, 125, 0, 538, - 132, 0, 0, 105, 0, 102, 38, 39, 0, 22, - 23, 0, 0, 28, 27, 0, 209, 31, 33, 40, - 0, 206, 110, 93, 0, 616, 618, 0, 536, 0, - 534, 529, 531, 0, 148, 146, 197, 0, 0, 0, + 0, 166, 219, 217, 218, 216, 223, 224, 225, 226, + 227, 228, 229, 230, 231, 220, 221, 222, 232, 233, + 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, + 345, 346, 347, 348, 349, 350, 351, 371, 372, 373, + 374, 375, 376, 377, 386, 399, 400, 387, 388, 390, + 389, 391, 392, 393, 394, 395, 396, 397, 398, 174, + 175, 245, 246, 244, 247, 254, 255, 252, 253, 250, + 251, 248, 249, 277, 278, 279, 289, 290, 291, 274, + 275, 276, 286, 287, 288, 271, 272, 273, 283, 284, + 285, 268, 269, 270, 280, 281, 282, 256, 257, 258, + 292, 293, 294, 259, 260, 261, 304, 305, 306, 262, + 263, 264, 316, 317, 318, 265, 266, 267, 328, 329, + 330, 295, 296, 297, 298, 299, 300, 301, 302, 303, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 319, + 320, 321, 322, 323, 324, 325, 326, 327, 331, 332, + 333, 334, 335, 336, 337, 338, 339, 343, 340, 341, + 342, 524, 525, 526, 355, 356, 379, 382, 344, 353, + 354, 370, 352, 401, 402, 405, 406, 407, 409, 410, + 411, 413, 414, 415, 417, 418, 514, 515, 378, 380, + 381, 357, 358, 359, 403, 360, 364, 365, 368, 408, + 412, 416, 361, 362, 366, 367, 404, 363, 369, 448, + 450, 451, 452, 454, 455, 456, 458, 459, 460, 462, + 463, 464, 466, 467, 468, 470, 471, 472, 474, 475, + 476, 478, 479, 480, 482, 483, 484, 486, 487, 488, + 490, 491, 449, 453, 457, 461, 465, 473, 477, 481, + 469, 485, 489, 492, 493, 494, 495, 496, 497, 498, + 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, + 509, 510, 511, 512, 513, 383, 384, 385, 419, 428, + 430, 424, 429, 431, 432, 434, 435, 436, 438, 439, + 440, 442, 443, 444, 446, 447, 420, 421, 422, 433, + 423, 425, 426, 427, 437, 441, 445, 516, 517, 520, + 521, 522, 523, 518, 519, 0, 0, 0, 0, 0, + 0, 0, 0, 164, 165, 0, 620, 137, 530, 531, + 532, 0, 529, 170, 168, 169, 167, 0, 215, 171, + 172, 173, 139, 138, 0, 199, 180, 182, 178, 184, + 186, 181, 183, 179, 185, 187, 176, 177, 201, 188, + 195, 196, 197, 198, 189, 190, 191, 192, 193, 194, + 140, 141, 142, 143, 144, 145, 152, 619, 0, 621, + 0, 114, 113, 0, 125, 130, 159, 158, 156, 160, + 0, 153, 155, 161, 135, 211, 157, 528, 0, 616, + 618, 0, 0, 162, 163, 527, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, + 0, 99, 0, 94, 0, 109, 0, 121, 115, 123, + 0, 124, 0, 97, 131, 102, 0, 154, 136, 0, + 204, 210, 1, 617, 0, 0, 0, 96, 0, 0, + 0, 628, 0, 681, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, + 0, 624, 0, 0, 533, 149, 151, 0, 147, 202, + 0, 0, 100, 0, 0, 622, 110, 116, 120, 122, + 118, 126, 117, 0, 132, 105, 0, 103, 0, 0, + 0, 9, 0, 43, 42, 44, 41, 5, 6, 7, + 8, 2, 16, 14, 15, 17, 10, 11, 12, 13, + 3, 18, 37, 20, 25, 26, 0, 0, 30, 0, + 213, 0, 36, 34, 0, 205, 111, 0, 95, 0, + 0, 679, 0, 636, 0, 0, 0, 0, 0, 653, + 0, 0, 0, 0, 0, 0, 0, 673, 0, 651, + 0, 0, 0, 0, 98, 0, 0, 0, 537, 0, + 0, 146, 0, 200, 0, 206, 45, 49, 52, 55, + 60, 63, 65, 67, 69, 71, 73, 75, 0, 0, + 101, 564, 573, 577, 0, 0, 0, 598, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, + 78, 91, 0, 551, 0, 161, 135, 554, 575, 553, + 561, 552, 0, 555, 556, 579, 557, 586, 558, 559, + 594, 560, 0, 119, 0, 127, 0, 545, 134, 0, + 0, 107, 0, 104, 38, 39, 0, 22, 23, 0, + 0, 28, 27, 0, 215, 31, 33, 40, 0, 212, + 112, 683, 0, 684, 629, 0, 0, 682, 648, 644, + 645, 646, 647, 0, 642, 0, 93, 649, 0, 0, + 663, 664, 665, 666, 0, 661, 0, 667, 0, 0, + 669, 0, 0, 0, 2, 677, 678, 0, 675, 0, + 0, 623, 625, 0, 543, 0, 541, 536, 538, 0, + 150, 148, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 76, 201, 202, 0, - 556, 0, 589, 602, 601, 0, 593, 0, 605, 603, - 0, 0, 0, 586, 606, 607, 608, 555, 81, 82, - 84, 83, 86, 87, 88, 89, 90, 85, 80, 0, - 0, 571, 567, 569, 573, 580, 588, 127, 0, 541, - 542, 0, 131, 0, 106, 4, 0, 24, 21, 32, - 208, 620, 0, 537, 0, 532, 527, 46, 47, 48, - 51, 50, 53, 54, 58, 59, 56, 57, 61, 62, - 64, 66, 68, 70, 72, 74, 0, 203, 558, 0, - 0, 0, 0, 604, 0, 585, 79, 92, 126, 539, - 0, 104, 19, 533, 535, 0, 0, 577, 0, 0, - 0, 596, 595, 598, 564, 581, 540, 543, 0, 559, - 0, 0, 0, 597, 0, 0, 576, 0, 0, 574, - 0, 77, 0, 561, 590, 560, 0, 599, 0, 564, - 563, 565, 583, 578, 0, 600, 594, 575, 584, 0, - 592, 582 + 0, 0, 76, 207, 208, 0, 563, 0, 596, 609, + 608, 0, 600, 0, 612, 610, 0, 0, 0, 593, + 613, 614, 615, 562, 81, 82, 84, 83, 86, 87, + 88, 89, 90, 85, 80, 0, 0, 578, 574, 576, + 580, 587, 595, 129, 0, 548, 549, 0, 133, 0, + 108, 4, 0, 24, 21, 32, 214, 632, 634, 0, + 0, 680, 0, 638, 0, 637, 0, 640, 0, 0, + 655, 0, 654, 0, 657, 0, 0, 659, 0, 0, + 674, 0, 671, 0, 652, 627, 0, 544, 0, 539, + 534, 46, 47, 48, 51, 50, 53, 54, 58, 59, + 56, 57, 61, 62, 64, 66, 68, 70, 72, 74, + 0, 209, 565, 0, 0, 0, 0, 611, 0, 592, + 79, 92, 128, 546, 0, 106, 19, 630, 0, 631, + 0, 643, 0, 650, 0, 662, 0, 668, 0, 670, + 0, 0, 676, 540, 542, 0, 0, 584, 0, 0, + 0, 603, 602, 605, 571, 588, 547, 550, 633, 635, + 639, 641, 656, 658, 660, 672, 0, 566, 0, 0, + 0, 604, 0, 0, 583, 0, 0, 581, 0, 77, + 0, 568, 597, 567, 0, 606, 0, 571, 570, 572, + 590, 585, 0, 607, 601, 582, 591, 0, 599, 589 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -741, -741, -741, -741, -741, -741, -741, -741, -741, -741, - -741, -741, 10266, -741, -125, -124, -165, -123, -32, -30, - -27, -31, -26, -29, -741, -80, -741, -110, -741, -116, - 92, 4, -741, -741, -741, 6, -48, -741, -741, 195, - 202, 206, -741, -741, -52, -741, -741, -741, -741, 93, - -741, -17, -28, -741, 9, -741, 0, -69, -741, -741, - -741, -741, 278, -741, -741, -741, -491, -159, 3, -83, - -222, -741, -107, -217, -740, -741, -141, -741, -741, -151, - -150, -741, -741, 213, -286, -103, -741, 51, -741, -122, - -741, 52, -741, -741, -741, -741, 54, -741, -741, -741, - -741, -741, -741, -741, -741, 232, -741, -741, 2, -741, - 124 + -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, + -863, -863, -418, -863, -380, -379, -484, -382, -258, -256, + -253, -257, -252, -255, -863, -478, -863, -485, -863, -491, + -530, 14, -863, -863, -863, 7, -397, -863, -863, 44, + 53, 47, -863, -863, -400, -863, -863, -863, -863, -92, + -863, -377, -362, -863, 9, -863, 0, -414, -863, -863, + -863, -863, 150, -863, -863, -863, -546, -548, -218, -331, + -624, -863, -359, -609, -862, -863, -417, -863, -863, -427, + -426, -863, -863, 68, -719, -355, -863, -136, -863, -389, + -863, -135, -863, -863, -863, -863, -129, -863, -863, -863, + -863, -863, -863, -863, -863, 102, -863, -863, 2, -863, + -65, -234, -432, -863, -863, -863, -301, -293, -294, -863, + -863, -304, -299, -302, -298, -863, -296, -305, -863, -383, + -526 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - 0, 475, 476, 477, 676, 478, 479, 480, 481, 482, - 483, 484, 541, 486, 509, 510, 511, 512, 513, 514, - 515, 516, 517, 518, 519, 542, 706, 543, 659, 544, - 594, 545, 368, 572, 453, 546, 370, 371, 372, 404, - 405, 406, 373, 374, 375, 376, 377, 378, 432, 433, - 379, 380, 381, 382, 487, 435, 488, 438, 417, 418, - 489, 385, 386, 387, 501, 428, 499, 500, 599, 600, - 570, 671, 549, 550, 551, 552, 553, 631, 726, 754, - 746, 747, 748, 755, 554, 555, 556, 557, 749, 729, - 558, 559, 750, 769, 560, 561, 562, 709, 635, 711, - 733, 744, 745, 563, 388, 389, 390, 401, 564, 425, - 426 + -1, 520, 521, 522, 782, 523, 524, 525, 526, 527, + 528, 529, 609, 531, 577, 578, 579, 580, 581, 582, + 583, 584, 585, 586, 587, 610, 840, 611, 765, 612, + 695, 613, 378, 640, 498, 614, 380, 381, 382, 427, + 428, 429, 383, 384, 385, 386, 387, 388, 477, 478, + 389, 390, 391, 392, 532, 480, 533, 483, 440, 441, + 534, 395, 396, 397, 569, 473, 567, 568, 705, 706, + 638, 777, 617, 618, 619, 620, 621, 737, 876, 912, + 904, 905, 906, 913, 622, 623, 624, 625, 907, 879, + 626, 627, 908, 927, 628, 629, 630, 843, 741, 845, + 883, 902, 903, 631, 398, 399, 400, 424, 632, 470, + 471, 450, 451, 789, 790, 402, 673, 674, 678, 403, + 404, 684, 685, 688, 691, 405, 697, 698, 406, 452, + 453 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1611,84 +1685,145 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 384, 753, 391, 590, 367, 447, 369, 436, 761, 383, - 603, 436, 521, 392, 448, 591, 436, 396, 753, 437, - 522, 612, 613, 566, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 673, 397, 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, 663, 569, 422, - 602, 578, 449, 421, 667, 708, 670, 625, 490, 672, - 394, 430, 414, 521, 521, 407, 520, 400, 503, 398, - 571, 668, 614, 615, 504, 450, 494, 610, 451, 611, - 495, 452, 408, 587, 423, 431, 565, 567, 505, 414, - 415, 383, 395, 626, 506, 399, 407, 402, 384, 383, - 391, 384, 367, 427, 369, 414, 322, 383, 616, 617, - 383, 327, 328, 408, 441, 579, 580, 408, 584, 675, - 403, 497, 383, 593, 585, 660, 383, 640, 710, 642, - 734, 411, 593, 415, 735, -35, 660, 581, 498, 764, - 660, 582, 383, 409, 416, 660, 410, 383, 424, 548, - 574, 629, 660, 575, 602, 661, 718, 429, 547, 694, - 695, 696, 697, 719, 684, 720, 569, 685, 569, 660, - 684, 569, 713, 723, 439, 677, 318, 319, 320, 414, - 607, 608, 609, 618, 619, 679, 768, 660, 715, 660, - 738, 434, 497, 315, 497, 690, 691, 445, 692, 693, - 446, 663, 436, 592, 491, 698, 699, 597, 737, 498, - 492, 498, 493, 573, 496, 502, 383, 583, 383, 588, - 383, 595, 422, 521, 602, 447, 421, 620, 598, 606, - 621, 712, 623, 622, 627, 714, 624, 630, 632, 683, - 763, 636, 648, 649, 650, 651, 652, 653, 654, 655, - 656, 657, 633, 634, 637, 638, 641, 423, 643, 716, - 717, 663, 658, -36, 548, 497, -34, 644, 569, 645, - 646, 647, 674, 547, 384, 678, -29, 681, 660, 730, - 707, 722, 498, 383, 739, 740, 741, 742, -562, 752, - 758, 383, 757, 770, 523, 759, 497, 762, 700, 771, - 725, 701, 703, 727, 604, 702, 705, 605, 704, 393, - 682, 724, 443, 498, 731, 442, 760, 766, 732, 767, - 569, 743, 383, 444, 440, 664, 665, 727, 666, 596, - 420, 0, 0, 0, 0, 0, 756, 0, 751, 0, - 0, 548, 0, 0, 0, 548, 0, 0, 0, 0, - 547, 765, 569, 0, 547, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 497, 728, 0, 0, + 394, 445, 401, 588, 444, 430, 445, 379, 637, 393, + 773, 646, 776, 769, 377, 778, 667, 677, 842, 708, + 494, 530, 687, 709, 446, 668, 535, 421, 437, 446, + 466, 700, 667, 787, 720, 721, 731, 911, 475, 661, + 710, 661, 662, 655, 919, 658, 492, 417, 481, 430, + 328, 329, 330, 422, 911, 493, 481, 659, 669, 670, + 671, 672, 476, 576, 482, 647, 648, 788, 437, 676, + 722, 723, 732, 663, 676, 663, 633, 635, 589, 418, + 676, 644, 645, 676, 437, -35, 590, 649, 481, 407, + 432, 650, 676, 433, 779, 634, 565, 754, 755, 756, + 757, 758, 759, 760, 761, 762, 763, 716, 664, 717, + 746, 735, 748, 657, 664, 589, 664, 764, 589, 664, + 541, 664, 639, 664, 664, 774, 542, 495, 664, 576, + 496, 543, 844, 497, 576, 549, 557, 544, 571, 573, + 576, 550, 558, 576, 572, 574, 853, 652, 854, 637, + 852, 637, 576, 653, 637, 415, 781, 665, 783, 791, + 793, 708, 766, 795, 797, 542, 794, 408, 785, 796, + 798, 576, 409, 693, 456, 458, 460, 462, 464, 465, + 468, 800, 802, 804, 423, 807, 410, 801, 803, 805, + 565, 808, 565, 810, 812, 426, 884, 425, 885, 811, + 813, 926, 766, 437, 766, 890, 891, 892, 893, 894, + 895, 794, 798, 801, 805, 808, 813, 922, 562, 411, + 857, 859, 563, 766, 858, 860, 680, 681, 682, 683, + 887, 708, 445, 769, 412, 444, 828, 829, 830, 831, + 786, 718, 719, 454, 457, 459, 455, 455, 455, 413, + 642, 439, 846, 643, 461, 446, 848, 455, 463, 467, + 414, 455, 455, 565, 675, 724, 725, 455, 863, 677, + 679, 686, 419, 455, 455, 867, 687, 766, 849, 689, + 850, 851, 455, 420, 692, 667, 921, 455, 699, 637, + 817, 455, 713, 714, 715, 821, 822, 823, 576, 576, + 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, + 576, 576, 576, 576, 434, 766, 818, 769, 767, 819, + 676, 676, 766, 818, 447, 847, 873, 676, 676, 766, + 896, 449, 565, 676, 469, 676, 824, 825, 474, 826, + 827, 479, 832, 833, 484, 325, 490, 491, 481, 875, + 539, 536, 877, 537, 538, 540, 545, 641, 726, 546, + 547, 548, 551, 559, 552, 666, 553, 554, 555, 637, + 561, 556, 560, 651, 656, 589, 564, 570, 492, 662, + 576, 576, 431, 690, 701, 729, 730, 576, 576, 728, + 438, 393, 877, 576, 733, 576, 727, 736, 394, 393, + 401, 394, 565, 704, 738, 379, 394, 393, 401, 914, + 393, 909, 377, 448, 742, 393, 472, 739, 712, 740, + 743, 744, 747, 749, 923, 637, 431, 486, 750, 751, + 431, 752, -36, 753, -34, 393, 780, 784, -29, 393, + 792, 869, 799, 878, 814, 806, 438, 809, 815, 841, + 880, 856, 766, 888, 897, 393, 899, 889, 900, 910, + -569, 898, 915, 916, 917, 591, 446, 920, 834, 928, + 929, 835, 837, 566, 488, 836, 839, 489, 838, 487, + 711, 416, 393, 878, 616, 816, 881, 874, 918, 924, + 882, 925, 485, 615, 901, 862, 770, 771, 702, 866, + 443, 861, 865, 772, 868, 864, 446, 0, 872, 0, + 0, 870, 0, 0, 0, 871, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, + 0, 0, 0, 0, 0, 703, 0, 566, 0, 566, + 0, 0, 0, 0, 393, 0, 393, 0, 393, 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, 616, 0, 0, 0, 0, 0, 0, 0, + 0, 615, 394, 0, 0, 0, 0, 0, 0, 0, + 566, 393, 0, 0, 0, 0, 0, 0, 0, 393, + 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, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, + 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, + 0, 616, 0, 0, 0, 0, 615, 0, 0, 0, + 615, 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, 566, + 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 696, 0, 696, 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, 616, 616, 0, 616, 0, 401, 0, 0, + 0, 615, 615, 0, 615, 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, 616, 0, 0, 0, 0, 0, 0, + 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, + 0, 0, 0, 0, 0, 0, 616, 0, 615, 0, + 0, 0, 0, 0, 0, 615, 616, 0, 0, 0, + 616, 0, 0, 0, 0, 615, 616, 0, 0, 615, + 0, 0, 0, 442, 0, 615, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, + 331, 0, 0, 0, 0, 0, 0, 0, 0, 332, + 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 498, 0, 0, 0, 0, 0, 0, - 0, 728, 383, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 423, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 548, 548, - 0, 548, 0, 391, 0, 0, 423, 547, 547, 0, - 547, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 548, 0, 0, 0, 0, 0, 0, - 0, 548, 547, 0, 0, 0, 0, 0, 548, 0, - 547, 0, 0, 0, 0, 0, 0, 547, 548, 0, - 0, 0, 548, 0, 0, 0, 0, 547, 548, 0, - 0, 547, 0, 0, 0, 419, 0, 547, 1, 2, + 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, + 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, @@ -1720,19 +1855,20 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 315, 0, 0, 0, - 0, 0, 0, 0, 316, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 317, 318, - 319, 320, 321, 0, 0, 0, 0, 0, 0, 0, - 0, 322, 323, 324, 325, 326, 327, 328, 0, 0, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 329, 330, 331, 332, 333, 334, 0, - 0, 0, 0, 0, 0, 0, 0, 335, 0, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 0, 0, 0, 501, 502, 0, 325, 0, 591, 592, + 0, 0, 0, 0, 593, 503, 504, 505, 506, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, + 329, 330, 331, 0, 0, 0, 507, 508, 509, 510, + 511, 332, 333, 334, 335, 336, 337, 338, 594, 595, + 596, 597, 0, 598, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 339, 340, 341, 342, 343, 344, 512, + 513, 514, 515, 516, 517, 518, 519, 345, 608, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, @@ -1764,20 +1900,21 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, 0, 0, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 456, 457, 0, 315, 0, - 523, 524, 0, 0, 0, 0, 525, 458, 459, 460, - 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 317, 318, 319, 320, 321, 0, 0, 0, 462, 463, - 464, 465, 466, 322, 323, 324, 325, 326, 327, 328, - 526, 527, 528, 529, 0, 530, 531, 532, 533, 534, - 535, 536, 537, 538, 539, 329, 330, 331, 332, 333, - 334, 467, 468, 469, 470, 471, 472, 473, 474, 335, - 540, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 0, 0, 0, 0, 0, 501, 502, 0, 325, 0, + 591, 768, 0, 0, 0, 0, 593, 503, 504, 505, + 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 327, 328, 329, 330, 331, 0, 0, 0, 507, 508, + 509, 510, 511, 332, 333, 334, 335, 336, 337, 338, + 594, 595, 596, 597, 0, 598, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 339, 340, 341, 342, 343, + 344, 512, 513, 514, 515, 516, 517, 518, 519, 345, + 608, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 1, 2, 3, 4, 5, 6, 7, 8, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -1808,20 +1945,21 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 456, 457, 0, - 315, 0, 523, 662, 0, 0, 0, 0, 525, 458, - 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 317, 318, 319, 320, 321, 0, 0, 0, - 462, 463, 464, 465, 466, 322, 323, 324, 325, 326, - 327, 328, 526, 527, 528, 529, 0, 530, 531, 532, - 533, 534, 535, 536, 537, 538, 539, 329, 330, 331, - 332, 333, 334, 467, 468, 469, 470, 471, 472, 473, - 474, 335, 540, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 0, 0, 0, 0, 0, 0, 0, 501, 502, 0, + 325, 0, 591, 0, 0, 0, 0, 0, 593, 503, + 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 327, 328, 329, 330, 331, 0, 0, 0, + 507, 508, 509, 510, 511, 332, 333, 334, 335, 336, + 337, 338, 594, 595, 596, 597, 0, 598, 599, 600, + 601, 602, 603, 604, 605, 606, 607, 339, 340, 341, + 342, 343, 344, 512, 513, 514, 515, 516, 517, 518, + 519, 345, 608, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 1, 2, 3, 4, 5, 6, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -1852,20 +1990,21 @@ static const yytype_int16 yytable[] = 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, 0, 0, - 454, 455, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 456, - 457, 0, 315, 0, 523, 0, 0, 0, 0, 0, - 525, 458, 459, 460, 461, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 317, 318, 319, 320, 321, 0, - 0, 0, 462, 463, 464, 465, 466, 322, 323, 324, - 325, 326, 327, 328, 526, 527, 528, 529, 0, 530, - 531, 532, 533, 534, 535, 536, 537, 538, 539, 329, - 330, 331, 332, 333, 334, 467, 468, 469, 470, 471, - 472, 473, 474, 335, 540, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, + 317, 318, 319, 320, 321, 322, 323, 324, 0, 0, + 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, + 502, 0, 325, 0, 484, 0, 0, 0, 0, 0, + 593, 503, 504, 505, 506, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 327, 328, 329, 330, 331, 0, + 0, 0, 507, 508, 509, 510, 511, 332, 333, 334, + 335, 336, 337, 338, 594, 595, 596, 597, 0, 598, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 339, + 340, 341, 342, 343, 344, 512, 513, 514, 515, 516, + 517, 518, 519, 345, 608, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 1, 2, 3, 4, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -1897,19 +2036,20 @@ static const yytype_int16 yytable[] = 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, - 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 456, 457, 0, 315, 0, 439, 0, 0, 0, - 0, 0, 525, 458, 459, 460, 461, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 317, 318, 319, 320, - 321, 0, 0, 0, 462, 463, 464, 465, 466, 322, - 323, 324, 325, 326, 327, 328, 526, 527, 528, 529, - 0, 530, 531, 532, 533, 534, 535, 536, 537, 538, - 539, 329, 330, 331, 332, 333, 334, 467, 468, 469, - 470, 471, 472, 473, 474, 335, 540, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 0, 501, 502, 0, 325, 0, 0, 0, 0, 0, + 0, 0, 593, 503, 504, 505, 506, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, + 331, 0, 0, 0, 507, 508, 509, 510, 511, 332, + 333, 334, 335, 336, 337, 338, 594, 595, 596, 597, + 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, + 607, 339, 340, 341, 342, 343, 344, 512, 513, 514, + 515, 516, 517, 518, 519, 345, 608, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 1, 2, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, @@ -1941,19 +2081,20 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, 0, 0, 0, 0, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 0, 0, 499, 500, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 501, 502, 0, 325, 0, 0, 0, + 0, 0, 0, 0, 593, 503, 504, 505, 506, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, + 329, 330, 331, 0, 0, 0, 507, 508, 509, 510, + 511, 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 456, 457, 0, 315, 0, 0, 0, - 0, 0, 0, 0, 525, 458, 459, 460, 461, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 317, 318, - 319, 320, 321, 0, 0, 0, 462, 463, 464, 465, - 466, 322, 323, 324, 325, 326, 327, 328, 526, 527, - 528, 529, 0, 530, 531, 532, 533, 534, 535, 536, - 537, 538, 539, 329, 330, 331, 332, 333, 334, 467, - 468, 469, 470, 471, 472, 473, 474, 335, 540, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 0, 0, 0, 339, 340, 341, 342, 343, 344, 512, + 513, 514, 515, 516, 517, 518, 519, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, @@ -1985,20 +2126,21 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, 0, 0, + 311, 312, 313, 314, 0, 0, 0, 318, 319, 320, + 321, 322, 323, 324, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 456, 457, 0, 315, 0, - 0, 0, 0, 0, 0, 0, 525, 458, 459, 460, - 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 317, 318, 319, 320, 321, 0, 0, 0, 462, 463, - 464, 465, 466, 322, 323, 324, 325, 326, 327, 328, + 0, 0, 0, 0, 0, 501, 502, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 503, 504, 505, + 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 327, 328, 329, 330, 0, 0, 0, 0, 507, 508, + 509, 510, 511, 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 329, 330, 331, 332, 333, - 334, 467, 468, 469, 470, 471, 472, 473, 474, 335, - 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 0, 0, 0, 0, 0, 339, 340, 341, 342, 343, + 344, 512, 513, 514, 515, 516, 517, 518, 519, 345, + 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 1, 2, 3, 4, 5, 6, 7, 8, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -2029,20 +2171,21 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 325, 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 456, 457, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 458, - 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 317, 318, 319, 320, 0, 0, 0, 0, - 462, 463, 464, 465, 466, 322, 323, 324, 325, 326, - 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 329, 330, 331, - 332, 333, 334, 467, 468, 469, 470, 471, 472, 473, - 474, 335, 0, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 0, 0, 327, 328, 329, 330, 331, 0, 0, 0, + 0, 0, 0, 0, 0, 332, 333, 334, 335, 336, + 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 339, 340, 341, + 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 1, 2, 3, 4, 5, 6, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -2074,19 +2217,20 @@ static const yytype_int16 yytable[] = 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, 0, 0, + 0, 318, 319, 320, 321, 322, 323, 324, 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, 317, 318, 319, 320, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 322, 323, 324, - 325, 326, 327, 328, 526, 0, 0, 529, 0, 530, - 531, 0, 0, 534, 0, 0, 0, 0, 0, 329, - 330, 331, 332, 333, 334, 0, 0, 0, 0, 0, - 0, 0, 0, 335, 0, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 332, 333, 334, + 335, 336, 337, 338, 594, 0, 0, 597, 0, 598, + 599, 0, 0, 602, 0, 0, 0, 0, 0, 339, + 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, + 0, 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 1, 2, 3, 4, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -2118,19 +2262,20 @@ static const yytype_int16 yytable[] = 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, + 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 315, 0, 0, 0, 0, 0, - 0, 0, 316, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 317, 318, 319, 320, - 321, 0, 0, 0, 0, 0, 0, 0, 0, 322, - 323, 324, 325, 326, 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 329, 330, 331, 332, 333, 334, 0, 0, 0, - 0, 0, 0, 0, 0, 335, 0, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, + 0, 0, 0, 0, 0, 0, 0, 0, 436, 332, + 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, + 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 1, 2, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, @@ -2162,19 +2307,20 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 314, 0, 0, 0, 318, 319, 320, 321, 322, + 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 412, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 317, 318, - 319, 320, 0, 0, 0, 0, 0, 0, 0, 0, - 413, 322, 323, 324, 325, 326, 327, 328, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, + 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 329, 330, 331, 332, 333, 334, 0, - 0, 0, 0, 0, 0, 0, 0, 335, 0, 336, - 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, + 0, 0, 0, 339, 340, 341, 342, 343, 344, 0, + 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, @@ -2206,20 +2352,21 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, 0, + 311, 312, 313, 314, 0, 0, 0, 318, 319, 320, + 321, 322, 323, 324, 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, 601, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 317, 318, 319, 320, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 322, 323, 324, 325, 326, 327, 328, + 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 329, 330, 331, 332, 333, - 334, 0, 0, 0, 0, 0, 0, 0, 0, 335, - 0, 336, 337, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 0, 0, 0, 0, 0, 339, 340, 341, 342, 343, + 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, + 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 1, 2, 3, 4, 5, 6, 7, 8, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -2250,20 +2397,21 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, + 309, 310, 311, 312, 313, 314, 0, 0, 0, 318, + 319, 320, 321, 322, 323, 324, 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, 686, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 820, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 317, 318, 319, 320, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 322, 323, 324, 325, 326, - 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 329, 330, 331, - 332, 333, 334, 0, 0, 0, 0, 0, 0, 0, - 0, 335, 0, 336, 337, 338, 339, 340, 341, 342, - 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, + 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 332, 333, 334, 335, 336, + 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 339, 340, 341, + 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 1, 2, 3, 4, 5, 6, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -2295,19 +2443,20 @@ static const yytype_int16 yytable[] = 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, 0, 0, + 0, 318, 319, 320, 321, 322, 323, 324, 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, 721, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 855, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 317, 318, 319, 320, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 322, 323, 324, - 325, 326, 327, 328, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 329, - 330, 331, 332, 333, 334, 0, 0, 0, 0, 0, - 0, 0, 0, 335, 0, 336, 337, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, + 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 332, 333, 334, + 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, + 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, + 0, 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 1, 2, 3, 4, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -2339,19 +2488,20 @@ static const yytype_int16 yytable[] = 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, + 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, 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, 317, 318, 319, 320, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 322, - 323, 324, 325, 326, 327, 328, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, + 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 329, 330, 331, 332, 333, 334, 0, 0, 0, - 0, 0, 0, 0, 0, 335, 0, 336, 337, 338, - 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, + 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, + 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 2, 3, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -2383,18 +2533,19 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, 0, 0, 0, 0, 0, + 314, 0, 0, 0, 0, 0, 0, 321, 0, 0, + 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 456, 457, 0, 0, 0, 568, 669, 0, - 0, 0, 0, 0, 458, 459, 460, 461, 0, 0, + 0, 0, 501, 502, 0, 0, 0, 636, 775, 0, + 0, 0, 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 462, 463, 464, 465, 466, - 322, 0, 0, 0, 0, 327, 328, 0, 0, 0, + 0, 0, 0, 0, 0, 507, 508, 509, 510, 511, + 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 467, 468, - 469, 470, 471, 472, 473, 474, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 348, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, @@ -2425,18 +2576,19 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, 0, 0, + 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, + 321, 0, 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 456, 457, 0, 0, 0, - 568, 736, 0, 0, 0, 0, 0, 458, 459, 460, - 461, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 462, 463, - 464, 465, 466, 322, 0, 0, 0, 0, 327, 328, + 0, 0, 0, 0, 0, 501, 502, 0, 0, 0, + 636, 886, 0, 0, 0, 0, 0, 503, 504, 505, + 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 507, 508, + 509, 510, 511, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 467, 468, 469, 470, 471, 472, 473, 474, 0, + 0, 512, 513, 514, 515, 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 348, 2, 3, 4, 5, 6, 7, + 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -2467,18 +2619,19 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, - 455, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 456, 457, - 0, 0, 507, 0, 0, 0, 0, 0, 0, 0, - 458, 459, 460, 461, 0, 0, 0, 0, 0, 0, + 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, + 0, 0, 0, 321, 0, 0, 0, 0, 0, 499, + 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 501, 502, + 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, + 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 462, 463, 464, 465, 466, 322, 0, 0, 0, - 0, 327, 328, 0, 0, 0, 0, 0, 0, 0, + 0, 507, 508, 509, 510, 511, 332, 0, 0, 0, + 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 467, 468, 469, 470, 471, 472, - 473, 474, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 348, 2, 3, 4, + 0, 0, 0, 0, 512, 513, 514, 515, 516, 517, + 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -2510,17 +2663,18 @@ static const yytype_int16 yytable[] = 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, - 0, 0, 454, 455, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, + 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 456, 457, 0, 0, 0, 568, 0, 0, 0, - 0, 0, 0, 458, 459, 460, 461, 0, 0, 0, + 0, 501, 502, 0, 0, 0, 636, 0, 0, 0, + 0, 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 462, 463, 464, 465, 466, 322, - 0, 0, 0, 0, 327, 328, 0, 0, 0, 0, + 0, 0, 0, 0, 507, 508, 509, 510, 511, 332, + 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 467, 468, 469, - 470, 471, 472, 473, 474, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 348, + 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, + 515, 516, 517, 518, 519, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -2552,18 +2706,19 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, 0, 0, 0, + 312, 313, 314, 0, 0, 0, 0, 0, 0, 321, + 0, 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 456, 457, 0, 0, 628, 0, - 0, 0, 0, 0, 0, 0, 458, 459, 460, 461, + 0, 0, 0, 0, 501, 502, 0, 0, 734, 0, + 0, 0, 0, 0, 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 462, 463, 464, - 465, 466, 322, 0, 0, 0, 0, 327, 328, 0, + 0, 0, 0, 0, 0, 0, 0, 507, 508, 509, + 510, 511, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 467, 468, 469, 470, 471, 472, 473, 474, 0, 0, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 348, 2, 3, 4, 5, 6, 7, 8, + 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -2594,18 +2749,19 @@ static const yytype_int16 yytable[] = 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, 0, 0, 454, 455, + 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, + 0, 0, 321, 0, 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 456, 457, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 639, 458, - 459, 460, 461, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 501, 502, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 745, 503, + 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 462, 463, 464, 465, 466, 322, 0, 0, 0, 0, - 327, 328, 0, 0, 0, 0, 0, 0, 0, 0, + 507, 508, 509, 510, 511, 332, 0, 0, 0, 0, + 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 467, 468, 469, 470, 471, 472, 473, - 474, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 348, 2, 3, 4, 5, + 0, 0, 0, 512, 513, 514, 515, 516, 517, 518, + 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -2637,17 +2793,18 @@ static const yytype_int16 yytable[] = 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, 0, - 0, 454, 455, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, + 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 456, 457, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 458, 459, 460, 461, 0, 0, 0, 0, + 501, 502, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 462, 463, 464, 465, 466, 322, 0, - 0, 0, 0, 327, 328, 0, 0, 0, 0, 0, + 0, 0, 0, 507, 508, 509, 510, 511, 332, 0, + 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 467, 468, 469, 470, - 471, 472, 473, 474, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 348, 2, + 0, 0, 0, 0, 0, 0, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, @@ -2679,41 +2836,25 @@ static const yytype_int16 yytable[] = 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, 485, 0, 454, 455, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 508, 456, 457, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 458, 459, 460, 461, 0, - 576, 577, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 462, 463, 464, 465, - 466, 322, 0, 0, 0, 0, 327, 586, 0, 0, - 0, 0, 589, 0, 0, 0, 0, 0, 0, 508, - 0, 0, 0, 0, 0, 0, 0, 0, 508, 467, - 468, 469, 470, 471, 472, 473, 474, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 508, 0, 0, - 0, 348, 0, 0, 0, 0, 0, 0, 0, 0, + 313, 314, 0, 0, 0, 0, 0, 0, 321, 0, + 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 501, 502, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 507, 508, 509, 510, + 511, 332, 0, 0, 0, 0, 337, 654, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, + 513, 514, 515, 516, 517, 518, 519, 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, 680, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 687, 688, 689, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 508 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 741, 0, 346, 0, 339, 0, 341, 748, 0, - 501, 341, 341, 341, 348, 358, 341, 339, 758, 349, - 349, 317, 318, 348, 4, 5, 6, 7, 8, 9, + 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 572, 339, 63, 64, 65, 66, 67, 68, 69, + 50, 51, 52, 53, 54, 55, 56, 57, 58, 0, + 0, 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, @@ -2738,51 +2879,201 @@ static const yytype_int16 yycheck[] = 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, 554, 448, 391, - 499, 457, 411, 391, 566, 631, 568, 326, 417, 571, - 343, 375, 380, 341, 341, 372, 436, 349, 340, 349, - 348, 348, 321, 322, 346, 343, 342, 351, 346, 353, - 346, 349, 372, 483, 391, 399, 445, 446, 340, 407, - 380, 372, 375, 362, 346, 375, 403, 340, 388, 380, - 388, 391, 388, 393, 388, 423, 376, 388, 357, 358, - 391, 381, 382, 403, 402, 319, 320, 407, 340, 340, - 346, 428, 403, 493, 346, 346, 407, 533, 635, 535, - 340, 375, 502, 423, 340, 339, 346, 341, 428, 340, - 346, 345, 423, 346, 357, 346, 349, 428, 375, 439, - 346, 521, 346, 349, 603, 349, 668, 343, 439, 614, - 615, 616, 617, 344, 346, 346, 566, 349, 568, 346, - 346, 571, 349, 349, 343, 581, 364, 365, 366, 497, - 354, 355, 356, 323, 324, 585, 762, 346, 347, 346, - 347, 375, 499, 341, 501, 610, 611, 375, 612, 613, - 375, 708, 341, 491, 340, 618, 619, 497, 720, 499, - 375, 501, 339, 375, 349, 348, 497, 340, 499, 339, - 501, 342, 564, 341, 673, 339, 564, 361, 375, 375, - 360, 637, 325, 359, 342, 641, 327, 344, 339, 598, - 752, 339, 328, 329, 330, 331, 332, 333, 334, 335, - 336, 337, 349, 349, 339, 349, 339, 564, 347, 659, - 660, 768, 348, 339, 554, 572, 339, 349, 668, 349, - 349, 349, 375, 554, 564, 375, 340, 340, 346, 383, - 342, 342, 572, 564, 344, 375, 340, 339, 343, 348, - 340, 572, 349, 349, 343, 387, 603, 343, 620, 344, - 706, 621, 623, 709, 502, 622, 625, 504, 624, 321, - 597, 684, 407, 603, 711, 403, 747, 758, 711, 759, - 720, 733, 603, 407, 401, 564, 564, 733, 564, 495, - 388, -1, -1, -1, -1, -1, 742, -1, 738, -1, - -1, 631, -1, -1, -1, 635, -1, -1, -1, -1, - 631, 757, 752, -1, 635, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 673, 709, -1, -1, + 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, + 0, 321, 0, 0, 0, 0, 0, 499, 500, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 501, 502, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 503, 504, + 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, + 508, 509, 510, 694, 332, 0, 0, 0, 0, 337, + 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 0, 0, 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, 0, 0, + 0, 0, 0, 0, 321, 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, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, + 0, 0, 337, 338 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 401, 0, 481, 401, 382, 406, 0, 493, 0, + 634, 502, 636, 622, 0, 639, 542, 547, 737, 567, + 434, 439, 552, 569, 401, 348, 440, 359, 390, 406, + 413, 561, 558, 348, 331, 332, 336, 899, 385, 348, + 570, 348, 351, 528, 906, 356, 349, 353, 351, 426, + 374, 375, 376, 385, 916, 358, 351, 368, 381, 382, + 383, 384, 409, 481, 359, 329, 330, 382, 430, 547, + 367, 368, 372, 382, 552, 382, 490, 491, 351, 385, + 558, 499, 500, 561, 446, 349, 359, 351, 351, 349, + 356, 355, 570, 359, 640, 358, 473, 338, 339, 340, + 341, 342, 343, 344, 345, 346, 347, 361, 540, 363, + 601, 589, 603, 531, 546, 351, 548, 358, 351, 551, + 350, 553, 358, 555, 556, 358, 356, 353, 560, 547, + 356, 350, 741, 359, 552, 350, 350, 356, 350, 350, + 558, 356, 356, 561, 356, 356, 354, 350, 356, 634, + 774, 636, 570, 356, 639, 351, 350, 540, 649, 350, + 350, 709, 356, 350, 350, 356, 356, 349, 653, 356, + 356, 589, 349, 556, 408, 409, 410, 411, 412, 413, + 414, 350, 350, 350, 359, 350, 349, 356, 356, 356, + 567, 356, 569, 350, 350, 356, 350, 350, 350, 356, + 356, 920, 356, 565, 356, 350, 350, 350, 350, 350, + 350, 356, 356, 356, 356, 356, 356, 350, 352, 349, + 352, 352, 356, 356, 356, 356, 381, 382, 383, 384, + 854, 779, 632, 842, 349, 632, 720, 721, 722, 723, + 658, 327, 328, 382, 382, 382, 385, 385, 385, 349, + 356, 367, 743, 359, 382, 632, 747, 385, 382, 382, + 349, 385, 385, 640, 382, 333, 334, 385, 798, 799, + 382, 382, 349, 385, 385, 805, 806, 356, 357, 382, + 765, 766, 385, 349, 382, 811, 910, 385, 382, 774, + 704, 385, 364, 365, 366, 713, 714, 715, 716, 717, + 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, + 728, 729, 730, 731, 385, 356, 356, 926, 359, 359, + 798, 799, 356, 356, 359, 359, 359, 805, 806, 356, + 357, 385, 709, 811, 385, 813, 716, 717, 353, 718, + 719, 385, 724, 725, 353, 351, 385, 385, 351, 840, + 358, 350, 843, 385, 359, 356, 358, 385, 371, 356, + 356, 356, 356, 350, 356, 385, 356, 356, 356, 854, + 349, 356, 356, 350, 349, 351, 359, 358, 349, 351, + 798, 799, 382, 348, 352, 335, 337, 805, 806, 369, + 390, 382, 883, 811, 352, 813, 370, 354, 398, 390, + 398, 401, 779, 385, 349, 398, 406, 398, 406, 900, + 401, 896, 398, 406, 349, 406, 416, 359, 385, 359, + 349, 359, 349, 357, 915, 910, 426, 425, 359, 359, + 430, 359, 349, 359, 349, 426, 385, 385, 350, 430, + 358, 348, 356, 843, 350, 356, 446, 356, 350, 352, + 393, 352, 356, 348, 354, 446, 350, 382, 349, 358, + 353, 385, 359, 350, 397, 353, 843, 353, 726, 359, + 354, 727, 729, 473, 430, 728, 731, 430, 730, 426, + 572, 331, 473, 883, 484, 703, 845, 818, 905, 916, + 845, 917, 424, 484, 883, 796, 632, 632, 563, 803, + 398, 794, 801, 632, 806, 799, 883, -1, 813, -1, + -1, 809, -1, -1, -1, 811, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 536, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 558, -1, + -1, -1, -1, -1, -1, 565, -1, 567, -1, 569, + -1, -1, -1, -1, 565, -1, 567, -1, 569, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 622, -1, -1, -1, -1, -1, -1, -1, + -1, 622, 632, -1, -1, -1, -1, -1, -1, -1, + 640, 632, -1, -1, -1, -1, -1, -1, -1, 640, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 709, + -1, -1, -1, -1, -1, -1, -1, -1, 709, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 737, -1, -1, + -1, 741, -1, -1, -1, -1, 737, -1, -1, -1, + 741, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 779, + -1, -1, -1, -1, -1, -1, -1, -1, 779, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 811, -1, 813, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 842, 843, -1, 845, -1, 845, -1, -1, + -1, 842, 843, -1, 845, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 883, -1, -1, -1, -1, -1, -1, + -1, -1, 883, -1, -1, -1, -1, -1, -1, 899, + -1, -1, -1, -1, -1, -1, 906, -1, 899, -1, + -1, -1, -1, -1, -1, 906, 916, -1, -1, -1, + 920, -1, -1, -1, -1, 916, 926, -1, -1, 920, + -1, -1, -1, 0, -1, 926, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 673, -1, -1, -1, -1, -1, -1, - -1, 733, 673, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 709, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 708, 709, - -1, 711, -1, 711, -1, -1, 733, 708, 709, -1, - 711, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 733, -1, -1, -1, -1, -1, -1, - -1, 741, 733, -1, -1, -1, -1, -1, 748, -1, - 741, -1, -1, -1, -1, -1, -1, 748, 758, -1, - -1, -1, 762, -1, -1, -1, -1, 758, 768, -1, - -1, 762, -1, -1, -1, 0, -1, 768, 3, 4, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 351, -1, -1, -1, -1, -1, + -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, + 377, -1, -1, -1, -1, -1, -1, -1, -1, 386, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, + -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -2814,19 +3105,20 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 341, -1, -1, -1, - -1, -1, -1, -1, 349, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, - 365, 366, 367, -1, -1, -1, -1, -1, -1, -1, - -1, 376, 377, 378, 379, 380, 381, 382, -1, -1, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 398, 399, 400, 401, 402, 403, -1, - -1, -1, -1, -1, -1, -1, -1, 412, -1, 414, + -1, -1, -1, 348, 349, -1, 351, -1, 353, 354, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, + 375, 376, 377, -1, -1, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, @@ -2858,20 +3150,21 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, + 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, + 323, 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 338, 339, -1, 341, -1, - 343, 344, -1, -1, -1, -1, 349, 350, 351, 352, - 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 363, 364, 365, 366, 367, -1, -1, -1, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, - 383, 384, 385, 386, -1, 388, 389, 390, 391, 392, - 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, + -1, -1, -1, -1, -1, 348, 349, -1, 351, -1, + 353, 354, -1, -1, -1, -1, 359, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 373, 374, 375, 376, 377, -1, -1, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, + 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, @@ -2902,20 +3195,21 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, - 341, -1, 343, 344, -1, -1, -1, -1, 349, 350, - 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 363, 364, 365, 366, 367, -1, -1, -1, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, 383, 384, 385, 386, -1, 388, 389, 390, - 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, + -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, + 351, -1, 353, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 373, 374, 375, 376, 377, -1, -1, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -2946,20 +3240,21 @@ static const yytype_int16 yycheck[] = 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, -1, -1, - 319, 320, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 338, - 339, -1, 341, -1, 343, -1, -1, -1, -1, -1, - 349, 350, 351, 352, 353, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, 364, 365, 366, 367, -1, - -1, -1, 371, 372, 373, 374, 375, 376, 377, 378, - 379, 380, 381, 382, 383, 384, 385, 386, -1, 388, - 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, + 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, + 319, 320, 321, 322, 323, 324, 325, 326, -1, -1, + 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, + 349, -1, 351, -1, 353, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 373, 374, 375, 376, 377, -1, + -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -2991,19 +3286,20 @@ static const yytype_int16 yycheck[] = 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, + -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, 341, -1, 343, -1, -1, -1, - -1, -1, 349, 350, 351, 352, 353, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, 371, 372, 373, 374, 375, 376, - 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, - -1, 388, 389, 390, 391, 392, 393, 394, 395, 396, - 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, + -1, 348, 349, -1, 351, -1, -1, -1, -1, -1, + -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, + 377, -1, -1, -1, 381, 382, 383, 384, 385, 386, + 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, + -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -3035,19 +3331,20 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, -1, -1, + 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, + 325, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 338, 339, -1, 341, -1, -1, -1, - -1, -1, -1, -1, 349, 350, 351, 352, 353, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, - 365, 366, 367, -1, -1, -1, 371, 372, 373, 374, - 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, - 385, 386, -1, 388, 389, 390, 391, 392, 393, 394, - 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + -1, -1, -1, 348, 349, -1, 351, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, + 375, 376, 377, -1, -1, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, @@ -3079,20 +3376,21 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, + 313, 314, 315, 316, -1, -1, -1, 320, 321, 322, + 323, 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 338, 339, -1, 341, -1, - -1, -1, -1, -1, -1, -1, 349, 350, 351, 352, - 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 363, 364, 365, 366, 367, -1, -1, -1, 371, 372, - 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, + -1, -1, -1, -1, -1, 348, 349, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, + 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + -1, -1, -1, -1, -1, 408, 409, 410, 411, 412, + 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, + -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, @@ -3123,20 +3421,21 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, + 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, + 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 350, - 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, - 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, - 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, -1, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 351, -1, -1, -1, -1, -1, -1, -1, 359, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 373, 374, 375, 376, 377, -1, -1, -1, + -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, + 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 408, 409, 410, + 411, 412, 413, -1, -1, -1, -1, -1, -1, -1, + -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -3168,19 +3467,20 @@ static const yytype_int16 yycheck[] = 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, -1, -1, + -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, - 379, 380, 381, 382, 383, -1, -1, 386, -1, 388, - 389, -1, -1, 392, -1, -1, -1, -1, -1, 398, - 399, 400, 401, 402, 403, -1, -1, -1, -1, -1, - -1, -1, -1, 412, -1, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, -1, -1, 373, 374, 375, 376, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 386, 387, 388, + 389, 390, 391, 392, 393, -1, -1, 396, -1, 398, + 399, -1, -1, 402, -1, -1, -1, -1, -1, 408, + 409, 410, 411, 412, 413, -1, -1, -1, -1, -1, + -1, -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3212,19 +3512,20 @@ static const yytype_int16 yycheck[] = 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, + -1, -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 341, -1, -1, -1, -1, -1, - -1, -1, 349, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - 367, -1, -1, -1, -1, -1, -1, -1, -1, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 398, 399, 400, 401, 402, 403, -1, -1, -1, - -1, -1, -1, -1, -1, 412, -1, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, + -1, -1, -1, -1, -1, -1, -1, -1, 385, 386, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, + -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 3, 4, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -3256,19 +3557,20 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, -1, -1, -1, + 315, 316, -1, -1, -1, 320, 321, 322, 323, 324, + 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 349, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 363, 364, - 365, 366, -1, -1, -1, -1, -1, -1, -1, -1, - 375, 376, 377, 378, 379, 380, 381, 382, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, + 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 398, 399, 400, 401, 402, 403, -1, - -1, -1, -1, -1, -1, -1, -1, 412, -1, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + -1, -1, -1, 408, 409, 410, 411, 412, 413, -1, + -1, -1, -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, @@ -3300,20 +3602,21 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, -1, + 313, 314, 315, 316, -1, -1, -1, 320, 321, 322, + 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 344, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 363, 364, 365, 366, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 376, 377, 378, 379, 380, 381, 382, + 373, 374, 375, 376, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 398, 399, 400, 401, 402, - 403, -1, -1, -1, -1, -1, -1, -1, -1, 412, - -1, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, + -1, -1, -1, -1, -1, 408, 409, 410, 411, 412, + 413, -1, -1, -1, -1, -1, -1, -1, -1, 422, + -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 3, 4, 5, 6, 7, 8, 9, 10, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, @@ -3344,20 +3647,21 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, + 311, 312, 313, 314, 315, 316, -1, -1, -1, 320, + 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 344, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 363, 364, 365, 366, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 376, 377, 378, 379, 380, - 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 398, 399, 400, - 401, 402, 403, -1, -1, -1, -1, -1, -1, -1, - -1, 412, -1, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + -1, -1, 373, 374, 375, 376, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, + 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 408, 409, 410, + 411, 412, 413, -1, -1, -1, -1, -1, -1, -1, + -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 3, 4, 5, 6, 7, 8, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, @@ -3389,19 +3693,20 @@ static const yytype_int16 yycheck[] = 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, -1, -1, + -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 344, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 363, 364, 365, 366, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 376, 377, 378, - 379, 380, 381, 382, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 398, - 399, 400, 401, 402, 403, -1, -1, -1, -1, -1, - -1, -1, -1, 412, -1, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, + -1, -1, -1, -1, 373, 374, 375, 376, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 386, 387, 388, + 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, + 409, 410, 411, 412, 413, -1, -1, -1, -1, -1, + -1, -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 3, 4, 5, 6, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3433,19 +3738,20 @@ static const yytype_int16 yycheck[] = 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, + -1, -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 363, 364, 365, 366, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 376, - 377, 378, 379, 380, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 386, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 398, 399, 400, 401, 402, 403, -1, -1, -1, - -1, -1, -1, -1, -1, 412, -1, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, + -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, + -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 4, 5, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -3477,18 +3783,19 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, -1, -1, -1, + 316, -1, -1, -1, -1, -1, -1, 323, -1, -1, + -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 338, 339, -1, -1, -1, 343, 344, -1, - -1, -1, -1, -1, 350, 351, 352, 353, -1, -1, + -1, -1, 348, 349, -1, -1, -1, 353, 354, -1, + -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 371, 372, 373, 374, 375, - 376, -1, -1, -1, -1, 381, 382, -1, -1, -1, + -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, + 386, -1, -1, -1, -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 404, 405, - 406, 407, 408, 409, 410, 411, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 414, 415, + 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 426, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, @@ -3519,18 +3826,19 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, + 313, 314, 315, 316, -1, -1, -1, -1, -1, -1, + 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 338, 339, -1, -1, -1, - 343, 344, -1, -1, -1, -1, -1, 350, 351, 352, - 353, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 371, 372, - 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, + -1, -1, -1, -1, -1, 348, 349, -1, -1, -1, + 353, 354, -1, -1, -1, -1, -1, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, + 383, 384, 385, 386, -1, -1, -1, -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 404, 405, 406, 407, 408, 409, 410, 411, -1, + -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 426, 4, 5, 6, 7, 8, 9, + -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -3561,18 +3869,19 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, - 320, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 338, 339, - -1, -1, 342, -1, -1, -1, -1, -1, -1, -1, - 350, 351, 352, 353, -1, -1, -1, -1, -1, -1, + 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, + -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, + 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, + -1, -1, 352, -1, -1, -1, -1, -1, -1, -1, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 371, 372, 373, 374, 375, 376, -1, -1, -1, - -1, 381, 382, -1, -1, -1, -1, -1, -1, -1, + -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, + -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 404, 405, 406, 407, 408, 409, - 410, 411, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 426, 4, 5, 6, + -1, -1, -1, -1, 414, 415, 416, 417, 418, 419, + 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3604,17 +3913,18 @@ static const yytype_int16 yycheck[] = 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, - -1, -1, 319, 320, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 323, -1, -1, -1, + -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 338, 339, -1, -1, -1, 343, -1, -1, -1, - -1, -1, -1, 350, 351, 352, 353, -1, -1, -1, + -1, 348, 349, -1, -1, -1, 353, -1, -1, -1, + -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 371, 372, 373, 374, 375, 376, - -1, -1, -1, -1, 381, 382, -1, -1, -1, -1, + -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, + -1, -1, -1, -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 404, 405, 406, - 407, 408, 409, 410, 411, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 426, + -1, -1, -1, -1, -1, -1, -1, 414, 415, 416, + 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -3646,18 +3956,19 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, -1, -1, -1, + 314, 315, 316, -1, -1, -1, -1, -1, -1, 323, + -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 338, 339, -1, -1, 342, -1, - -1, -1, -1, -1, -1, -1, 350, 351, 352, 353, + -1, -1, -1, -1, 348, 349, -1, -1, 352, -1, + -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 371, 372, 373, - 374, 375, 376, -1, -1, -1, -1, 381, 382, -1, + -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, + 384, 385, 386, -1, -1, -1, -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 404, 405, 406, 407, 408, 409, 410, 411, -1, -1, + 414, 415, 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 426, 4, 5, 6, 7, 8, 9, 10, + -1, -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, @@ -3688,18 +3999,19 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 319, 320, + 311, 312, 313, 314, 315, 316, -1, -1, -1, -1, + -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 338, 339, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 349, 350, - 351, 352, 353, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 371, 372, 373, 374, 375, 376, -1, -1, -1, -1, - 381, 382, -1, -1, -1, -1, -1, -1, -1, -1, + 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, + 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 404, 405, 406, 407, 408, 409, 410, - 411, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 426, 4, 5, 6, 7, + -1, -1, -1, 414, 415, 416, 417, 418, 419, 420, + 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -3731,17 +4043,18 @@ static const yytype_int16 yycheck[] = 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, -1, - -1, 319, 320, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, + -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 338, 339, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 350, 351, 352, 353, -1, -1, -1, -1, + 348, 349, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 371, 372, 373, 374, 375, 376, -1, - -1, -1, -1, 381, 382, -1, -1, -1, -1, -1, + -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, + -1, -1, -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 404, 405, 406, 407, - 408, 409, 410, 411, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 426, 4, + -1, -1, -1, -1, -1, -1, 414, 415, 416, 417, + 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -3773,35 +4086,108 @@ static const yytype_int16 yycheck[] = 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, 416, -1, 319, 320, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 436, 338, 339, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 350, 351, 352, 353, -1, - 454, 455, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 371, 372, 373, 374, - 375, 376, -1, -1, -1, -1, 381, 382, -1, -1, - -1, -1, 486, -1, -1, -1, -1, -1, -1, 493, - -1, -1, -1, -1, -1, -1, -1, -1, 502, 404, - 405, 406, 407, 408, 409, 410, 411, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 521, -1, -1, - -1, 426, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 315, 316, -1, -1, -1, -1, -1, -1, 323, -1, + -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 348, 349, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, + 385, 386, -1, -1, -1, -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 414, + 415, 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 590, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 607, 608, 609, 610, 611, 612, 613, - 614, 615, 616, 617, 618, 619, 620, 621, 622, 623, - 624, 625 -}; - - /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing - symbol of state STATE-NUM. */ -static const yytype_int16 yystos[] = -{ - 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, + -1, 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, -1, -1, -1, -1, -1, + -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 348, 349, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 360, 361, + 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, + 382, 383, 384, 385, 386, -1, -1, -1, -1, 391, + 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 414, 415, 416, 417, 418, 419, 420, 421, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 436, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, -1, -1, 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, -1, -1, + -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -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, 391, 392 +}; + + /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing + symbol of state STATE-NUM. */ +static const yytype_int16 yystos[] = +{ + 0, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, @@ -3832,121 +4218,142 @@ static const yytype_int16 yystos[] = 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, 341, 349, 363, 364, 365, - 366, 367, 376, 377, 378, 379, 380, 381, 382, 398, - 399, 400, 401, 402, 403, 412, 414, 415, 416, 417, - 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, + 322, 323, 324, 325, 326, 351, 359, 373, 374, 375, + 376, 377, 386, 387, 388, 389, 390, 391, 392, 408, + 409, 410, 411, 412, 413, 422, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 476, 477, 480, - 481, 482, 483, 487, 488, 489, 490, 491, 492, 495, - 496, 497, 498, 499, 501, 506, 507, 508, 549, 550, - 551, 553, 341, 507, 343, 375, 339, 339, 349, 375, - 349, 552, 340, 346, 484, 485, 486, 496, 501, 346, - 349, 375, 349, 375, 497, 501, 357, 503, 504, 0, - 550, 481, 489, 496, 375, 554, 555, 501, 510, 343, - 375, 399, 493, 494, 375, 500, 341, 349, 502, 343, - 528, 553, 485, 484, 486, 375, 375, 339, 348, 502, - 343, 346, 349, 479, 319, 320, 338, 339, 350, 351, - 352, 353, 371, 372, 373, 374, 375, 404, 405, 406, - 407, 408, 409, 410, 411, 446, 447, 448, 450, 451, - 452, 453, 454, 455, 456, 457, 458, 499, 501, 505, - 502, 340, 375, 339, 342, 346, 349, 496, 501, 511, - 512, 509, 348, 340, 346, 340, 346, 342, 457, 459, - 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, - 470, 341, 349, 343, 344, 349, 383, 384, 385, 386, - 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, - 413, 457, 470, 472, 474, 476, 480, 499, 501, 517, - 518, 519, 520, 521, 529, 530, 531, 532, 535, 536, - 539, 540, 541, 548, 553, 502, 348, 502, 343, 472, - 515, 348, 478, 375, 346, 349, 457, 457, 474, 319, - 320, 341, 345, 340, 340, 346, 382, 472, 339, 457, - 346, 358, 553, 470, 475, 342, 555, 501, 375, 513, - 514, 344, 512, 511, 475, 494, 375, 354, 355, 356, - 351, 353, 317, 318, 321, 322, 357, 358, 323, 324, - 361, 360, 359, 325, 327, 326, 362, 342, 342, 470, - 344, 522, 339, 349, 349, 543, 339, 339, 349, 349, - 474, 339, 474, 347, 349, 349, 349, 349, 328, 329, - 330, 331, 332, 333, 334, 335, 336, 337, 348, 473, - 346, 349, 344, 518, 532, 536, 541, 515, 348, 344, - 515, 516, 515, 511, 375, 340, 449, 474, 375, 472, - 457, 340, 513, 502, 346, 349, 344, 457, 457, 457, - 459, 459, 460, 460, 461, 461, 461, 461, 462, 462, - 463, 464, 465, 466, 467, 468, 471, 342, 529, 542, - 518, 544, 474, 349, 474, 347, 472, 472, 515, 344, - 346, 344, 342, 349, 514, 474, 523, 474, 489, 534, - 383, 517, 530, 545, 340, 340, 344, 515, 347, 344, - 375, 340, 339, 534, 546, 547, 525, 526, 527, 533, - 537, 472, 348, 519, 524, 528, 474, 349, 340, 387, - 521, 519, 343, 515, 340, 474, 524, 525, 529, 538, - 349, 344 + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 486, 487, 490, + 491, 492, 493, 497, 498, 499, 500, 501, 502, 505, + 506, 507, 508, 509, 511, 516, 517, 518, 559, 560, + 561, 563, 570, 574, 575, 580, 583, 349, 349, 349, + 349, 349, 349, 349, 349, 351, 517, 353, 385, 349, + 349, 359, 385, 359, 562, 350, 356, 494, 495, 496, + 506, 511, 356, 359, 385, 359, 385, 507, 511, 367, + 513, 514, 0, 560, 491, 499, 506, 359, 490, 385, + 566, 567, 584, 585, 382, 385, 566, 382, 566, 382, + 566, 382, 566, 382, 566, 566, 584, 382, 566, 385, + 564, 565, 511, 520, 353, 385, 409, 503, 504, 385, + 510, 351, 359, 512, 353, 538, 563, 495, 494, 496, + 385, 385, 349, 358, 512, 353, 356, 359, 489, 329, + 330, 348, 349, 360, 361, 362, 363, 381, 382, 383, + 384, 385, 414, 415, 416, 417, 418, 419, 420, 421, + 456, 457, 458, 460, 461, 462, 463, 464, 465, 466, + 467, 468, 509, 511, 515, 512, 350, 385, 359, 358, + 356, 350, 356, 350, 356, 358, 356, 356, 356, 350, + 356, 356, 356, 356, 356, 356, 356, 350, 356, 350, + 356, 349, 352, 356, 359, 506, 511, 521, 522, 519, + 358, 350, 356, 350, 356, 352, 467, 469, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 351, + 359, 353, 354, 359, 393, 394, 395, 396, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 423, 467, + 480, 482, 484, 486, 490, 509, 511, 527, 528, 529, + 530, 531, 539, 540, 541, 542, 545, 546, 549, 550, + 551, 558, 563, 512, 358, 512, 353, 482, 525, 358, + 488, 385, 356, 359, 467, 467, 484, 329, 330, 351, + 355, 350, 350, 356, 392, 482, 349, 467, 356, 368, + 563, 348, 351, 382, 567, 584, 385, 585, 348, 381, + 382, 383, 384, 571, 572, 382, 480, 485, 573, 382, + 381, 382, 383, 384, 576, 577, 382, 485, 578, 382, + 348, 579, 382, 584, 385, 485, 511, 581, 582, 382, + 485, 352, 565, 511, 385, 523, 524, 354, 522, 521, + 485, 504, 385, 364, 365, 366, 361, 363, 327, 328, + 331, 332, 367, 368, 333, 334, 371, 370, 369, 335, + 337, 336, 372, 352, 352, 480, 354, 532, 349, 359, + 359, 553, 349, 349, 359, 359, 484, 349, 484, 357, + 359, 359, 359, 359, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 358, 483, 356, 359, 354, 528, + 542, 546, 551, 525, 358, 354, 525, 526, 525, 521, + 385, 350, 459, 484, 385, 482, 467, 348, 382, 568, + 569, 350, 358, 350, 356, 350, 356, 350, 356, 356, + 350, 356, 350, 356, 350, 356, 356, 350, 356, 356, + 350, 356, 350, 356, 350, 350, 523, 512, 356, 359, + 354, 467, 467, 467, 469, 469, 470, 470, 471, 471, + 471, 471, 472, 472, 473, 474, 475, 476, 477, 478, + 481, 352, 539, 552, 528, 554, 484, 359, 484, 357, + 482, 482, 525, 354, 356, 354, 352, 352, 356, 352, + 356, 572, 571, 485, 573, 577, 576, 485, 578, 348, + 579, 581, 582, 359, 524, 484, 533, 484, 499, 544, + 393, 527, 540, 555, 350, 350, 354, 525, 348, 382, + 350, 350, 350, 350, 350, 350, 357, 354, 385, 350, + 349, 544, 556, 557, 535, 536, 537, 543, 547, 482, + 358, 529, 534, 538, 484, 359, 350, 397, 531, 529, + 353, 525, 350, 484, 534, 535, 539, 548, 359, 354 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int16 yyr1[] = { - 0, 445, 446, 447, 447, 447, 447, 447, 447, 447, - 447, 447, 447, 447, 447, 447, 447, 447, 448, 448, - 448, 448, 448, 448, 449, 450, 451, 452, 452, 453, - 453, 454, 454, 455, 456, 456, 456, 457, 457, 457, - 457, 458, 458, 458, 458, 459, 459, 459, 459, 460, - 460, 460, 461, 461, 461, 462, 462, 462, 462, 462, - 463, 463, 463, 464, 464, 465, 465, 466, 466, 467, - 467, 468, 468, 469, 469, 470, 471, 470, 472, 472, - 473, 473, 473, 473, 473, 473, 473, 473, 473, 473, - 473, 474, 474, 475, 476, 476, 476, 476, 476, 476, - 476, 476, 476, 478, 477, 479, 479, 480, 480, 480, - 480, 481, 481, 482, 482, 483, 484, 484, 485, 485, - 485, 485, 486, 487, 487, 487, 487, 487, 488, 488, - 488, 488, 488, 489, 489, 490, 491, 491, 491, 491, - 491, 491, 491, 491, 492, 493, 493, 494, 494, 494, - 495, 496, 496, 497, 497, 497, 497, 497, 497, 497, - 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, 498, 498, 498, 498, 498, 498, - 498, 498, 498, 498, 498, 499, 500, 500, 501, 501, - 502, 502, 502, 502, 503, 503, 504, 505, 505, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 506, 506, 506, 506, 506, 506, 506, - 506, 506, 506, 507, 507, 507, 509, 508, 510, 508, - 511, 511, 512, 512, 513, 513, 514, 514, 515, 515, - 515, 515, 516, 516, 517, 518, 518, 519, 519, 519, - 519, 519, 519, 519, 519, 520, 521, 522, 523, 521, - 524, 524, 526, 525, 527, 525, 528, 528, 529, 529, - 530, 530, 531, 531, 532, 533, 533, 534, 534, 535, - 535, 537, 536, 538, 538, 539, 539, 540, 540, 542, - 541, 543, 541, 544, 541, 545, 545, 546, 546, 547, - 547, 548, 548, 548, 548, 548, 548, 548, 548, 549, - 549, 550, 550, 550, 552, 551, 553, 554, 554, 555, - 555 + 0, 455, 456, 457, 457, 457, 457, 457, 457, 457, + 457, 457, 457, 457, 457, 457, 457, 457, 458, 458, + 458, 458, 458, 458, 459, 460, 461, 462, 462, 463, + 463, 464, 464, 465, 466, 466, 466, 467, 467, 467, + 467, 468, 468, 468, 468, 469, 469, 469, 469, 470, + 470, 470, 471, 471, 471, 472, 472, 472, 472, 472, + 473, 473, 473, 474, 474, 475, 475, 476, 476, 477, + 477, 478, 478, 479, 479, 480, 481, 480, 482, 482, + 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, + 483, 484, 484, 485, 486, 486, 486, 486, 486, 486, + 486, 486, 486, 486, 486, 488, 487, 489, 489, 490, + 490, 490, 490, 491, 491, 492, 492, 493, 494, 494, + 495, 495, 495, 495, 496, 497, 497, 497, 497, 497, + 498, 498, 498, 498, 498, 499, 499, 500, 501, 501, + 501, 501, 501, 501, 501, 501, 502, 503, 503, 504, + 504, 504, 505, 506, 506, 507, 507, 507, 507, 507, + 507, 507, 507, 507, 507, 507, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, + 508, 509, 510, 510, 511, 511, 512, 512, 512, 512, + 513, 513, 514, 515, 515, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, + 517, 517, 517, 519, 518, 520, 518, 521, 521, 522, + 522, 523, 523, 524, 524, 525, 525, 525, 525, 526, + 526, 527, 528, 528, 529, 529, 529, 529, 529, 529, + 529, 529, 530, 531, 532, 533, 531, 534, 534, 536, + 535, 537, 535, 538, 538, 539, 539, 540, 540, 541, + 541, 542, 543, 543, 544, 544, 545, 545, 547, 546, + 548, 548, 549, 549, 550, 550, 552, 551, 553, 551, + 554, 551, 555, 555, 556, 556, 557, 557, 558, 558, + 558, 558, 558, 558, 558, 558, 559, 559, 560, 560, + 560, 562, 561, 563, 564, 564, 565, 565, 566, 566, + 567, 567, 568, 568, 569, 569, 570, 570, 570, 570, + 570, 570, 571, 571, 572, 572, 572, 572, 572, 573, + 573, 574, 574, 575, 575, 575, 575, 575, 575, 575, + 575, 576, 576, 577, 577, 577, 577, 578, 578, 579, + 579, 580, 580, 580, 580, 581, 581, 582, 582, 583, + 583, 584, 584, 585, 585 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -3961,19 +4368,19 @@ static const yytype_int8 yyr2[] = 1, 3, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 0, 6, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 3, 1, 2, 2, 4, 2, 3, 4, - 2, 3, 4, 0, 6, 2, 3, 2, 3, 3, - 4, 1, 1, 2, 3, 3, 2, 3, 2, 1, - 2, 1, 1, 1, 3, 4, 6, 5, 1, 2, - 3, 5, 4, 1, 2, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 4, 1, 3, 1, 3, 1, - 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, + 1, 1, 3, 1, 2, 3, 2, 2, 4, 2, + 3, 4, 2, 3, 4, 0, 6, 2, 3, 2, + 3, 3, 4, 1, 1, 2, 3, 3, 2, 3, + 2, 1, 2, 1, 1, 1, 3, 4, 6, 5, + 1, 2, 3, 5, 4, 1, 2, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 4, 1, 3, 1, + 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 1, 1, 1, 1, 4, 1, 1, 3, 2, 3, - 2, 3, 3, 4, 1, 0, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, + 4, 1, 1, 3, 2, 3, 2, 3, 3, 4, + 1, 0, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -4004,17 +4411,23 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 1, 3, 1, 1, 1, 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, 2, 2, 2, 1, - 2, 1, 1, 1, 0, 3, 5, 1, 3, 1, - 4 + 1, 1, 1, 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, 2, 1, + 3, 1, 1, 1, 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, 2, 2, 2, 1, 2, 1, 1, + 1, 0, 3, 5, 1, 3, 1, 4, 1, 3, + 5, 5, 1, 3, 1, 3, 4, 6, 6, 8, + 6, 8, 1, 3, 1, 1, 1, 1, 1, 1, + 3, 4, 6, 4, 6, 6, 8, 6, 8, 6, + 8, 1, 3, 1, 1, 1, 1, 1, 3, 1, + 3, 6, 8, 4, 6, 1, 3, 1, 1, 4, + 6, 1, 3, 3, 3 }; @@ -4093,8 +4506,8 @@ yy_symbol_value_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, glslang::TParseContext* pParseContext) { FILE *yyoutput = yyo; - YY_USE (yyoutput); - YY_USE (pParseContext); + YYUSE (yyoutput); + YYUSE (pParseContext); if (!yyvaluep) return; # ifdef YYPRINT @@ -4102,7 +4515,7 @@ yy_symbol_value_print (FILE *yyo, YYPRINT (yyo, yytoknum[yykind], *yyvaluep); # endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); + YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -4483,14 +4896,14 @@ static void yydestruct (const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep, glslang::TParseContext* pParseContext) { - YY_USE (yyvaluep); - YY_USE (pParseContext); + YYUSE (yyvaluep); + YYUSE (pParseContext); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN - YY_USE (yykind); + YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } @@ -4760,260 +5173,260 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); switch (yyn) { case 2: /* variable_identifier: IDENTIFIER */ -#line 371 "MachineIndependent/glslang.y" +#line 392 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 4768 "MachineIndependent/glslang_tab.cpp" +#line 5181 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ -#line 377 "MachineIndependent/glslang.y" +#line 398 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4776 "MachineIndependent/glslang_tab.cpp" +#line 5189 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ -#line 380 "MachineIndependent/glslang.y" +#line 401 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 4786 "MachineIndependent/glslang_tab.cpp" +#line 5199 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ -#line 385 "MachineIndependent/glslang.y" +#line 406 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 4794 "MachineIndependent/glslang_tab.cpp" +#line 5207 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ -#line 388 "MachineIndependent/glslang.y" +#line 409 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 4802 "MachineIndependent/glslang_tab.cpp" +#line 5215 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ -#line 391 "MachineIndependent/glslang.y" +#line 412 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 4811 "MachineIndependent/glslang_tab.cpp" +#line 5224 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ -#line 395 "MachineIndependent/glslang.y" +#line 416 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 4819 "MachineIndependent/glslang_tab.cpp" +#line 5232 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ -#line 399 "MachineIndependent/glslang.y" +#line 420 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 4827 "MachineIndependent/glslang_tab.cpp" +#line 5240 "MachineIndependent/glslang_tab.cpp" break; case 10: /* primary_expression: INT32CONSTANT */ -#line 402 "MachineIndependent/glslang.y" +#line 423 "MachineIndependent/glslang.y" { 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 4836 "MachineIndependent/glslang_tab.cpp" +#line 5249 "MachineIndependent/glslang_tab.cpp" break; case 11: /* primary_expression: UINT32CONSTANT */ -#line 406 "MachineIndependent/glslang.y" +#line 427 "MachineIndependent/glslang.y" { 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 4845 "MachineIndependent/glslang_tab.cpp" +#line 5258 "MachineIndependent/glslang_tab.cpp" break; case 12: /* primary_expression: INT64CONSTANT */ -#line 410 "MachineIndependent/glslang.y" +#line 431 "MachineIndependent/glslang.y" { 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 4854 "MachineIndependent/glslang_tab.cpp" +#line 5267 "MachineIndependent/glslang_tab.cpp" break; case 13: /* primary_expression: UINT64CONSTANT */ -#line 414 "MachineIndependent/glslang.y" +#line 435 "MachineIndependent/glslang.y" { 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 4863 "MachineIndependent/glslang_tab.cpp" +#line 5276 "MachineIndependent/glslang_tab.cpp" break; case 14: /* primary_expression: INT16CONSTANT */ -#line 418 "MachineIndependent/glslang.y" +#line 439 "MachineIndependent/glslang.y" { 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 4872 "MachineIndependent/glslang_tab.cpp" +#line 5285 "MachineIndependent/glslang_tab.cpp" break; case 15: /* primary_expression: UINT16CONSTANT */ -#line 422 "MachineIndependent/glslang.y" +#line 443 "MachineIndependent/glslang.y" { 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 4881 "MachineIndependent/glslang_tab.cpp" +#line 5294 "MachineIndependent/glslang_tab.cpp" break; case 16: /* primary_expression: DOUBLECONSTANT */ -#line 426 "MachineIndependent/glslang.y" +#line 447 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double literal"); if (! parseContext.symbolTable.atBuiltInLevel()) 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 4892 "MachineIndependent/glslang_tab.cpp" +#line 5305 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ -#line 432 "MachineIndependent/glslang.y" +#line 453 "MachineIndependent/glslang.y" { 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 4901 "MachineIndependent/glslang_tab.cpp" +#line 5314 "MachineIndependent/glslang_tab.cpp" break; case 18: /* postfix_expression: primary_expression */ -#line 440 "MachineIndependent/glslang.y" +#line 461 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4909 "MachineIndependent/glslang_tab.cpp" +#line 5322 "MachineIndependent/glslang_tab.cpp" break; case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ -#line 443 "MachineIndependent/glslang.y" +#line 464 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 4917 "MachineIndependent/glslang_tab.cpp" +#line 5330 "MachineIndependent/glslang_tab.cpp" break; case 20: /* postfix_expression: function_call */ -#line 446 "MachineIndependent/glslang.y" +#line 467 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4925 "MachineIndependent/glslang_tab.cpp" +#line 5338 "MachineIndependent/glslang_tab.cpp" break; case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ -#line 449 "MachineIndependent/glslang.y" +#line 470 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 4933 "MachineIndependent/glslang_tab.cpp" +#line 5346 "MachineIndependent/glslang_tab.cpp" break; case 22: /* postfix_expression: postfix_expression INC_OP */ -#line 452 "MachineIndependent/glslang.y" +#line 473 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4943 "MachineIndependent/glslang_tab.cpp" +#line 5356 "MachineIndependent/glslang_tab.cpp" break; case 23: /* postfix_expression: postfix_expression DEC_OP */ -#line 457 "MachineIndependent/glslang.y" +#line 478 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[-1].interm.intermTypedNode)); 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 4953 "MachineIndependent/glslang_tab.cpp" +#line 5366 "MachineIndependent/glslang_tab.cpp" break; case 24: /* integer_expression: expression */ -#line 465 "MachineIndependent/glslang.y" +#line 486 "MachineIndependent/glslang.y" { parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 4962 "MachineIndependent/glslang_tab.cpp" +#line 5375 "MachineIndependent/glslang_tab.cpp" break; case 25: /* function_call: function_call_or_method */ -#line 472 "MachineIndependent/glslang.y" +#line 493 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 4971 "MachineIndependent/glslang_tab.cpp" +#line 5384 "MachineIndependent/glslang_tab.cpp" break; case 26: /* function_call_or_method: function_call_generic */ -#line 479 "MachineIndependent/glslang.y" +#line 500 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 4979 "MachineIndependent/glslang_tab.cpp" +#line 5392 "MachineIndependent/glslang_tab.cpp" break; case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ -#line 485 "MachineIndependent/glslang.y" +#line 506 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4988 "MachineIndependent/glslang_tab.cpp" +#line 5401 "MachineIndependent/glslang_tab.cpp" break; case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ -#line 489 "MachineIndependent/glslang.y" +#line 510 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 4997 "MachineIndependent/glslang_tab.cpp" +#line 5410 "MachineIndependent/glslang_tab.cpp" break; case 29: /* function_call_header_no_parameters: function_call_header VOID */ -#line 496 "MachineIndependent/glslang.y" +#line 517 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5005 "MachineIndependent/glslang_tab.cpp" +#line 5418 "MachineIndependent/glslang_tab.cpp" break; case 30: /* function_call_header_no_parameters: function_call_header */ -#line 499 "MachineIndependent/glslang.y" +#line 520 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5013 "MachineIndependent/glslang_tab.cpp" +#line 5426 "MachineIndependent/glslang_tab.cpp" break; case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ -#line 505 "MachineIndependent/glslang.y" +#line 526 "MachineIndependent/glslang.y" { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); @@ -5021,11 +5434,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 5025 "MachineIndependent/glslang_tab.cpp" +#line 5438 "MachineIndependent/glslang_tab.cpp" break; case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ -#line 512 "MachineIndependent/glslang.y" +#line 533 "MachineIndependent/glslang.y" { TParameter param = { 0, new TType }; param.type->shallowCopy((yyvsp[0].interm.intermTypedNode)->getType()); @@ -5033,29 +5446,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 5037 "MachineIndependent/glslang_tab.cpp" +#line 5450 "MachineIndependent/glslang_tab.cpp" break; case 33: /* function_call_header: function_identifier LEFT_PAREN */ -#line 522 "MachineIndependent/glslang.y" +#line 543 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-1].interm); } -#line 5045 "MachineIndependent/glslang_tab.cpp" +#line 5458 "MachineIndependent/glslang_tab.cpp" break; case 34: /* function_identifier: type_specifier */ -#line 530 "MachineIndependent/glslang.y" +#line 551 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5055 "MachineIndependent/glslang_tab.cpp" +#line 5468 "MachineIndependent/glslang_tab.cpp" break; case 35: /* function_identifier: postfix_expression */ -#line 535 "MachineIndependent/glslang.y" +#line 556 "MachineIndependent/glslang.y" { // // Should be a method or subroutine call, but we haven't recognized the arguments yet. @@ -5083,50 +5496,50 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 5087 "MachineIndependent/glslang_tab.cpp" +#line 5500 "MachineIndependent/glslang_tab.cpp" break; case 36: /* function_identifier: non_uniform_qualifier */ -#line 563 "MachineIndependent/glslang.y" +#line 584 "MachineIndependent/glslang.y" { // Constructor (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5097 "MachineIndependent/glslang_tab.cpp" +#line 5510 "MachineIndependent/glslang_tab.cpp" break; case 37: /* unary_expression: postfix_expression */ -#line 572 "MachineIndependent/glslang.y" +#line 593 "MachineIndependent/glslang.y" { parseContext.variableCheck((yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 5108 "MachineIndependent/glslang_tab.cpp" +#line 5521 "MachineIndependent/glslang_tab.cpp" break; case 38: /* unary_expression: INC_OP unary_expression */ -#line 578 "MachineIndependent/glslang.y" +#line 599 "MachineIndependent/glslang.y" { 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 5117 "MachineIndependent/glslang_tab.cpp" +#line 5530 "MachineIndependent/glslang_tab.cpp" break; case 39: /* unary_expression: DEC_OP unary_expression */ -#line 582 "MachineIndependent/glslang.y" +#line 603 "MachineIndependent/glslang.y" { 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 5126 "MachineIndependent/glslang_tab.cpp" +#line 5539 "MachineIndependent/glslang_tab.cpp" break; case 40: /* unary_expression: unary_operator unary_expression */ -#line 586 "MachineIndependent/glslang.y" +#line 607 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm).op != EOpNull) { char errorOp[2] = {0, 0}; @@ -5143,179 +5556,179 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 5147 "MachineIndependent/glslang_tab.cpp" +#line 5560 "MachineIndependent/glslang_tab.cpp" break; case 41: /* unary_operator: PLUS */ -#line 606 "MachineIndependent/glslang.y" +#line 627 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 5153 "MachineIndependent/glslang_tab.cpp" +#line 5566 "MachineIndependent/glslang_tab.cpp" break; case 42: /* unary_operator: DASH */ -#line 607 "MachineIndependent/glslang.y" +#line 628 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 5159 "MachineIndependent/glslang_tab.cpp" +#line 5572 "MachineIndependent/glslang_tab.cpp" break; case 43: /* unary_operator: BANG */ -#line 608 "MachineIndependent/glslang.y" +#line 629 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 5165 "MachineIndependent/glslang_tab.cpp" +#line 5578 "MachineIndependent/glslang_tab.cpp" break; case 44: /* unary_operator: TILDE */ -#line 609 "MachineIndependent/glslang.y" +#line 630 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 5172 "MachineIndependent/glslang_tab.cpp" +#line 5585 "MachineIndependent/glslang_tab.cpp" break; case 45: /* multiplicative_expression: unary_expression */ -#line 615 "MachineIndependent/glslang.y" +#line 636 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5178 "MachineIndependent/glslang_tab.cpp" +#line 5591 "MachineIndependent/glslang_tab.cpp" break; case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ -#line 616 "MachineIndependent/glslang.y" +#line 637 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "*", EOpMul, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5188 "MachineIndependent/glslang_tab.cpp" +#line 5601 "MachineIndependent/glslang_tab.cpp" break; case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ -#line 621 "MachineIndependent/glslang.y" +#line 642 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "/", EOpDiv, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5198 "MachineIndependent/glslang_tab.cpp" +#line 5611 "MachineIndependent/glslang_tab.cpp" break; case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ -#line 626 "MachineIndependent/glslang.y" +#line 647 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "%"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "%", EOpMod, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5209 "MachineIndependent/glslang_tab.cpp" +#line 5622 "MachineIndependent/glslang_tab.cpp" break; case 49: /* additive_expression: multiplicative_expression */ -#line 635 "MachineIndependent/glslang.y" +#line 656 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5215 "MachineIndependent/glslang_tab.cpp" +#line 5628 "MachineIndependent/glslang_tab.cpp" break; case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ -#line 636 "MachineIndependent/glslang.y" +#line 657 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "+", EOpAdd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5225 "MachineIndependent/glslang_tab.cpp" +#line 5638 "MachineIndependent/glslang_tab.cpp" break; case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ -#line 641 "MachineIndependent/glslang.y" +#line 662 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "-", EOpSub, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5235 "MachineIndependent/glslang_tab.cpp" +#line 5648 "MachineIndependent/glslang_tab.cpp" break; case 52: /* shift_expression: additive_expression */ -#line 649 "MachineIndependent/glslang.y" +#line 670 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5241 "MachineIndependent/glslang_tab.cpp" +#line 5654 "MachineIndependent/glslang_tab.cpp" break; case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ -#line 650 "MachineIndependent/glslang.y" +#line 671 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift left"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<<", EOpLeftShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5252 "MachineIndependent/glslang_tab.cpp" +#line 5665 "MachineIndependent/glslang_tab.cpp" break; case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ -#line 656 "MachineIndependent/glslang.y" +#line 677 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bit shift right"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">>", EOpRightShift, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5263 "MachineIndependent/glslang_tab.cpp" +#line 5676 "MachineIndependent/glslang_tab.cpp" break; case 55: /* relational_expression: shift_expression */ -#line 665 "MachineIndependent/glslang.y" +#line 686 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5269 "MachineIndependent/glslang_tab.cpp" +#line 5682 "MachineIndependent/glslang_tab.cpp" break; case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ -#line 666 "MachineIndependent/glslang.y" +#line 687 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<", EOpLessThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5279 "MachineIndependent/glslang_tab.cpp" +#line 5692 "MachineIndependent/glslang_tab.cpp" break; case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ -#line 671 "MachineIndependent/glslang.y" +#line 692 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">", EOpGreaterThan, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5289 "MachineIndependent/glslang_tab.cpp" +#line 5702 "MachineIndependent/glslang_tab.cpp" break; case 58: /* relational_expression: relational_expression LE_OP shift_expression */ -#line 676 "MachineIndependent/glslang.y" +#line 697 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "<=", EOpLessThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5299 "MachineIndependent/glslang_tab.cpp" +#line 5712 "MachineIndependent/glslang_tab.cpp" break; case 59: /* relational_expression: relational_expression GE_OP shift_expression */ -#line 681 "MachineIndependent/glslang.y" +#line 702 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, ">=", EOpGreaterThanEqual, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5309 "MachineIndependent/glslang_tab.cpp" +#line 5722 "MachineIndependent/glslang_tab.cpp" break; case 60: /* equality_expression: relational_expression */ -#line 689 "MachineIndependent/glslang.y" +#line 710 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5315 "MachineIndependent/glslang_tab.cpp" +#line 5728 "MachineIndependent/glslang_tab.cpp" break; case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ -#line 690 "MachineIndependent/glslang.y" +#line 711 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "=="); @@ -5325,11 +5738,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5329 "MachineIndependent/glslang_tab.cpp" +#line 5742 "MachineIndependent/glslang_tab.cpp" break; case 62: /* equality_expression: equality_expression NE_OP relational_expression */ -#line 699 "MachineIndependent/glslang.y" +#line 720 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array comparison"); parseContext.opaqueCheck((yyvsp[-1].lex).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "!="); @@ -5339,124 +5752,124 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5343 "MachineIndependent/glslang_tab.cpp" +#line 5756 "MachineIndependent/glslang_tab.cpp" break; case 63: /* and_expression: equality_expression */ -#line 711 "MachineIndependent/glslang.y" +#line 732 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5349 "MachineIndependent/glslang_tab.cpp" +#line 5762 "MachineIndependent/glslang_tab.cpp" break; case 64: /* and_expression: and_expression AMPERSAND equality_expression */ -#line 712 "MachineIndependent/glslang.y" +#line 733 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise and"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&", EOpAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5360 "MachineIndependent/glslang_tab.cpp" +#line 5773 "MachineIndependent/glslang_tab.cpp" break; case 65: /* exclusive_or_expression: and_expression */ -#line 721 "MachineIndependent/glslang.y" +#line 742 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5366 "MachineIndependent/glslang_tab.cpp" +#line 5779 "MachineIndependent/glslang_tab.cpp" break; case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ -#line 722 "MachineIndependent/glslang.y" +#line 743 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise exclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^", EOpExclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5377 "MachineIndependent/glslang_tab.cpp" +#line 5790 "MachineIndependent/glslang_tab.cpp" break; case 67: /* inclusive_or_expression: exclusive_or_expression */ -#line 731 "MachineIndependent/glslang.y" +#line 752 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5383 "MachineIndependent/glslang_tab.cpp" +#line 5796 "MachineIndependent/glslang_tab.cpp" break; case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ -#line 732 "MachineIndependent/glslang.y" +#line 753 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[-1].lex).loc, "bitwise inclusive or"); (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "|", EOpInclusiveOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5394 "MachineIndependent/glslang_tab.cpp" +#line 5807 "MachineIndependent/glslang_tab.cpp" break; case 69: /* logical_and_expression: inclusive_or_expression */ -#line 741 "MachineIndependent/glslang.y" +#line 762 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5400 "MachineIndependent/glslang_tab.cpp" +#line 5813 "MachineIndependent/glslang_tab.cpp" break; case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ -#line 742 "MachineIndependent/glslang.y" +#line 763 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "&&", EOpLogicalAnd, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5410 "MachineIndependent/glslang_tab.cpp" +#line 5823 "MachineIndependent/glslang_tab.cpp" break; case 71: /* logical_xor_expression: logical_and_expression */ -#line 750 "MachineIndependent/glslang.y" +#line 771 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5416 "MachineIndependent/glslang_tab.cpp" +#line 5829 "MachineIndependent/glslang_tab.cpp" break; case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ -#line 751 "MachineIndependent/glslang.y" +#line 772 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "^^", EOpLogicalXor, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5426 "MachineIndependent/glslang_tab.cpp" +#line 5839 "MachineIndependent/glslang_tab.cpp" break; case 73: /* logical_or_expression: logical_xor_expression */ -#line 759 "MachineIndependent/glslang.y" +#line 780 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5432 "MachineIndependent/glslang_tab.cpp" +#line 5845 "MachineIndependent/glslang_tab.cpp" break; case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ -#line 760 "MachineIndependent/glslang.y" +#line 781 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.handleBinaryMath((yyvsp[-1].lex).loc, "||", EOpLogicalOr, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5442 "MachineIndependent/glslang_tab.cpp" +#line 5855 "MachineIndependent/glslang_tab.cpp" break; case 75: /* conditional_expression: logical_or_expression */ -#line 768 "MachineIndependent/glslang.y" +#line 789 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5448 "MachineIndependent/glslang_tab.cpp" +#line 5861 "MachineIndependent/glslang_tab.cpp" break; case 76: /* $@1: %empty */ -#line 769 "MachineIndependent/glslang.y" +#line 790 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 5456 "MachineIndependent/glslang_tab.cpp" +#line 5869 "MachineIndependent/glslang_tab.cpp" break; case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ -#line 772 "MachineIndependent/glslang.y" +#line 793 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; parseContext.boolCheck((yyvsp[-4].lex).loc, (yyvsp[-5].interm.intermTypedNode)); @@ -5469,17 +5882,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5473 "MachineIndependent/glslang_tab.cpp" +#line 5886 "MachineIndependent/glslang_tab.cpp" break; case 78: /* assignment_expression: conditional_expression */ -#line 787 "MachineIndependent/glslang.y" +#line 808 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5479 "MachineIndependent/glslang_tab.cpp" +#line 5892 "MachineIndependent/glslang_tab.cpp" break; case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ -#line 788 "MachineIndependent/glslang.y" +#line 809 "MachineIndependent/glslang.y" { parseContext.arrayObjectCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "array assignment"); parseContext.opaqueCheck((yyvsp[-1].interm).loc, (yyvsp[-2].interm.intermTypedNode)->getType(), "="); @@ -5493,119 +5906,119 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 5497 "MachineIndependent/glslang_tab.cpp" +#line 5910 "MachineIndependent/glslang_tab.cpp" break; case 80: /* assignment_operator: EQUAL */ -#line 804 "MachineIndependent/glslang.y" +#line 825 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 5506 "MachineIndependent/glslang_tab.cpp" +#line 5919 "MachineIndependent/glslang_tab.cpp" break; case 81: /* assignment_operator: MUL_ASSIGN */ -#line 808 "MachineIndependent/glslang.y" +#line 829 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 5515 "MachineIndependent/glslang_tab.cpp" +#line 5928 "MachineIndependent/glslang_tab.cpp" break; case 82: /* assignment_operator: DIV_ASSIGN */ -#line 812 "MachineIndependent/glslang.y" +#line 833 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 5524 "MachineIndependent/glslang_tab.cpp" +#line 5937 "MachineIndependent/glslang_tab.cpp" break; case 83: /* assignment_operator: MOD_ASSIGN */ -#line 816 "MachineIndependent/glslang.y" +#line 837 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "%="); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 5534 "MachineIndependent/glslang_tab.cpp" +#line 5947 "MachineIndependent/glslang_tab.cpp" break; case 84: /* assignment_operator: ADD_ASSIGN */ -#line 821 "MachineIndependent/glslang.y" +#line 842 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5543 "MachineIndependent/glslang_tab.cpp" +#line 5956 "MachineIndependent/glslang_tab.cpp" break; case 85: /* assignment_operator: SUB_ASSIGN */ -#line 825 "MachineIndependent/glslang.y" +#line 846 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5552 "MachineIndependent/glslang_tab.cpp" +#line 5965 "MachineIndependent/glslang_tab.cpp" break; case 86: /* assignment_operator: LEFT_ASSIGN */ -#line 829 "MachineIndependent/glslang.y" +#line 850 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5561 "MachineIndependent/glslang_tab.cpp" +#line 5974 "MachineIndependent/glslang_tab.cpp" break; case 87: /* assignment_operator: RIGHT_ASSIGN */ -#line 833 "MachineIndependent/glslang.y" +#line 854 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5570 "MachineIndependent/glslang_tab.cpp" +#line 5983 "MachineIndependent/glslang_tab.cpp" break; case 88: /* assignment_operator: AND_ASSIGN */ -#line 837 "MachineIndependent/glslang.y" +#line 858 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5579 "MachineIndependent/glslang_tab.cpp" +#line 5992 "MachineIndependent/glslang_tab.cpp" break; case 89: /* assignment_operator: XOR_ASSIGN */ -#line 841 "MachineIndependent/glslang.y" +#line 862 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 5588 "MachineIndependent/glslang_tab.cpp" +#line 6001 "MachineIndependent/glslang_tab.cpp" break; case 90: /* assignment_operator: OR_ASSIGN */ -#line 845 "MachineIndependent/glslang.y" +#line 866 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 5597 "MachineIndependent/glslang_tab.cpp" +#line 6010 "MachineIndependent/glslang_tab.cpp" break; case 91: /* expression: assignment_expression */ -#line 852 "MachineIndependent/glslang.y" +#line 873 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5605 "MachineIndependent/glslang_tab.cpp" +#line 6018 "MachineIndependent/glslang_tab.cpp" break; case 92: /* expression: expression COMMA assignment_expression */ -#line 855 "MachineIndependent/glslang.y" +#line 876 "MachineIndependent/glslang.y" { parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); @@ -5614,40 +6027,62 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5618 "MachineIndependent/glslang_tab.cpp" +#line 6031 "MachineIndependent/glslang_tab.cpp" break; case 93: /* constant_expression: conditional_expression */ -#line 866 "MachineIndependent/glslang.y" +#line 887 "MachineIndependent/glslang.y" { parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5627 "MachineIndependent/glslang_tab.cpp" +#line 6040 "MachineIndependent/glslang_tab.cpp" break; case 94: /* declaration: function_prototype SEMICOLON */ -#line 873 "MachineIndependent/glslang.y" +#line 894 "MachineIndependent/glslang.y" { parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 5637 "MachineIndependent/glslang_tab.cpp" +#line 6050 "MachineIndependent/glslang_tab.cpp" + break; + + case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON */ +#line 900 "MachineIndependent/glslang.y" + { + parseContext.requireExtensions((yyvsp[-1].interm).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V instruction qualifier"); + (yyvsp[-1].interm).function->setSpirvInstruction(*(yyvsp[-2].interm.spirvInst)); // Attach SPIR-V intruction qualifier + parseContext.handleFunctionDeclarator((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).function, true /* prototype */); + (yyval.interm.intermNode) = 0; + // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature + } +#line 6062 "MachineIndependent/glslang_tab.cpp" + break; + + case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON */ +#line 907 "MachineIndependent/glslang.y" + { + parseContext.globalCheck((yyvsp[0].lex).loc, "SPIR-V execution mode qualifier"); + parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier"); + (yyval.interm.intermNode) = 0; + } +#line 6072 "MachineIndependent/glslang_tab.cpp" break; - case 95: /* declaration: init_declarator_list SEMICOLON */ -#line 878 "MachineIndependent/glslang.y" + case 97: /* declaration: init_declarator_list SEMICOLON */ +#line 913 "MachineIndependent/glslang.y" { 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 5647 "MachineIndependent/glslang_tab.cpp" +#line 6082 "MachineIndependent/glslang_tab.cpp" break; - case 96: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ -#line 883 "MachineIndependent/glslang.y" + case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ +#line 918 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[-3].lex).loc, ENoProfile, 130, 0, "precision statement"); // lazy setting of the previous scope's defaults, has effect only the first time it is called in a particular scope @@ -5655,75 +6090,75 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 5659 "MachineIndependent/glslang_tab.cpp" +#line 6094 "MachineIndependent/glslang_tab.cpp" break; - case 97: /* declaration: block_structure SEMICOLON */ -#line 890 "MachineIndependent/glslang.y" + case 99: /* declaration: block_structure SEMICOLON */ +#line 925 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 5668 "MachineIndependent/glslang_tab.cpp" +#line 6103 "MachineIndependent/glslang_tab.cpp" break; - case 98: /* declaration: block_structure IDENTIFIER SEMICOLON */ -#line 894 "MachineIndependent/glslang.y" + case 100: /* declaration: block_structure IDENTIFIER SEMICOLON */ +#line 929 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5677 "MachineIndependent/glslang_tab.cpp" +#line 6112 "MachineIndependent/glslang_tab.cpp" break; - case 99: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ -#line 898 "MachineIndependent/glslang.y" + case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ +#line 933 "MachineIndependent/glslang.y" { parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 5686 "MachineIndependent/glslang_tab.cpp" +#line 6121 "MachineIndependent/glslang_tab.cpp" break; - case 100: /* declaration: type_qualifier SEMICOLON */ -#line 902 "MachineIndependent/glslang.y" + case 102: /* declaration: type_qualifier SEMICOLON */ +#line 937 "MachineIndependent/glslang.y" { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 5696 "MachineIndependent/glslang_tab.cpp" +#line 6131 "MachineIndependent/glslang_tab.cpp" break; - case 101: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ -#line 907 "MachineIndependent/glslang.y" + case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ +#line 942 "MachineIndependent/glslang.y" { parseContext.checkNoShaderLayouts((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).shaderQualifiers); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 5706 "MachineIndependent/glslang_tab.cpp" +#line 6141 "MachineIndependent/glslang_tab.cpp" break; - case 102: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ -#line 912 "MachineIndependent/glslang.y" + case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ +#line 947 "MachineIndependent/glslang.y" { parseContext.checkNoShaderLayouts((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).shaderQualifiers); (yyvsp[-1].interm.identifierList)->push_back((yyvsp[-2].lex).string); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 5717 "MachineIndependent/glslang_tab.cpp" +#line 6152 "MachineIndependent/glslang_tab.cpp" break; - case 103: /* $@2: %empty */ -#line 921 "MachineIndependent/glslang.y" + case 105: /* $@2: %empty */ +#line 956 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 5723 "MachineIndependent/glslang_tab.cpp" +#line 6158 "MachineIndependent/glslang_tab.cpp" break; - case 104: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ -#line 921 "MachineIndependent/glslang.y" + case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ +#line 956 "MachineIndependent/glslang.y" { --parseContext.blockNestingLevel; parseContext.blockName = (yyvsp[-4].lex).string; @@ -5733,60 +6168,60 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 5737 "MachineIndependent/glslang_tab.cpp" +#line 6172 "MachineIndependent/glslang_tab.cpp" break; - case 105: /* identifier_list: COMMA IDENTIFIER */ -#line 932 "MachineIndependent/glslang.y" + case 107: /* identifier_list: COMMA IDENTIFIER */ +#line 967 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5746 "MachineIndependent/glslang_tab.cpp" +#line 6181 "MachineIndependent/glslang_tab.cpp" break; - case 106: /* identifier_list: identifier_list COMMA IDENTIFIER */ -#line 936 "MachineIndependent/glslang.y" + case 108: /* identifier_list: identifier_list COMMA IDENTIFIER */ +#line 971 "MachineIndependent/glslang.y" { (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 5755 "MachineIndependent/glslang_tab.cpp" +#line 6190 "MachineIndependent/glslang_tab.cpp" break; - case 107: /* function_prototype: function_declarator RIGHT_PAREN */ -#line 943 "MachineIndependent/glslang.y" + case 109: /* function_prototype: function_declarator RIGHT_PAREN */ +#line 978 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5764 "MachineIndependent/glslang_tab.cpp" +#line 6199 "MachineIndependent/glslang_tab.cpp" break; - case 108: /* function_prototype: function_declarator RIGHT_PAREN attribute */ -#line 947 "MachineIndependent/glslang.y" + case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute */ +#line 982 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); (yyval.interm).loc = (yyvsp[-1].lex).loc; parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes), (yyval.interm).function); } -#line 5775 "MachineIndependent/glslang_tab.cpp" +#line 6210 "MachineIndependent/glslang_tab.cpp" break; - case 109: /* function_prototype: attribute function_declarator RIGHT_PAREN */ -#line 953 "MachineIndependent/glslang.y" + case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN */ +#line 988 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes), (yyval.interm).function); } -#line 5786 "MachineIndependent/glslang_tab.cpp" +#line 6221 "MachineIndependent/glslang_tab.cpp" break; - case 110: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ -#line 959 "MachineIndependent/glslang.y" + case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ +#line 994 "MachineIndependent/glslang.y" { (yyval.interm).function = (yyvsp[-2].interm.function); (yyval.interm).loc = (yyvsp[-1].lex).loc; @@ -5794,27 +6229,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes), (yyval.interm).function); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes), (yyval.interm).function); } -#line 5798 "MachineIndependent/glslang_tab.cpp" +#line 6233 "MachineIndependent/glslang_tab.cpp" break; - case 111: /* function_declarator: function_header */ -#line 969 "MachineIndependent/glslang.y" + case 113: /* function_declarator: function_header */ +#line 1004 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5806 "MachineIndependent/glslang_tab.cpp" +#line 6241 "MachineIndependent/glslang_tab.cpp" break; - case 112: /* function_declarator: function_header_with_parameters */ -#line 972 "MachineIndependent/glslang.y" + case 114: /* function_declarator: function_header_with_parameters */ +#line 1007 "MachineIndependent/glslang.y" { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 5814 "MachineIndependent/glslang_tab.cpp" +#line 6249 "MachineIndependent/glslang_tab.cpp" break; - case 113: /* function_header_with_parameters: function_header parameter_declaration */ -#line 979 "MachineIndependent/glslang.y" + case 115: /* function_header_with_parameters: function_header parameter_declaration */ +#line 1014 "MachineIndependent/glslang.y" { // Add the parameter (yyval.interm.function) = (yyvsp[-1].interm.function); @@ -5823,11 +6258,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 5827 "MachineIndependent/glslang_tab.cpp" +#line 6262 "MachineIndependent/glslang_tab.cpp" break; - case 114: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ -#line 987 "MachineIndependent/glslang.y" + case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ +#line 1022 "MachineIndependent/glslang.y" { // // Only first parameter of one-parameter functions can be void @@ -5845,11 +6280,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 5849 "MachineIndependent/glslang_tab.cpp" +#line 6284 "MachineIndependent/glslang_tab.cpp" break; - case 115: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ -#line 1007 "MachineIndependent/glslang.y" + case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ +#line 1042 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).qualifier.storage != EvqGlobal && (yyvsp[-2].interm.type).qualifier.storage != EvqTemporary) { parseContext.error((yyvsp[-1].lex).loc, "no qualifiers allowed for function return", @@ -5869,11 +6304,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 5873 "MachineIndependent/glslang_tab.cpp" +#line 6308 "MachineIndependent/glslang_tab.cpp" break; - case 116: /* parameter_declarator: type_specifier IDENTIFIER */ -#line 1030 "MachineIndependent/glslang.y" + case 118: /* parameter_declarator: type_specifier IDENTIFIER */ +#line 1065 "MachineIndependent/glslang.y" { if ((yyvsp[-1].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-1].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5889,11 +6324,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 5893 "MachineIndependent/glslang_tab.cpp" +#line 6328 "MachineIndependent/glslang_tab.cpp" break; - case 117: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ -#line 1045 "MachineIndependent/glslang.y" + case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ +#line 1080 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -5913,11 +6348,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 5917 "MachineIndependent/glslang_tab.cpp" +#line 6352 "MachineIndependent/glslang_tab.cpp" break; - case 118: /* parameter_declaration: type_qualifier parameter_declarator */ -#line 1070 "MachineIndependent/glslang.y" + case 120: /* parameter_declaration: type_qualifier parameter_declarator */ +#line 1105 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5929,11 +6364,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 5933 "MachineIndependent/glslang_tab.cpp" +#line 6368 "MachineIndependent/glslang_tab.cpp" break; - case 119: /* parameter_declaration: parameter_declarator */ -#line 1081 "MachineIndependent/glslang.y" + case 121: /* parameter_declaration: parameter_declarator */ +#line 1116 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -5941,11 +6376,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5945 "MachineIndependent/glslang_tab.cpp" +#line 6380 "MachineIndependent/glslang_tab.cpp" break; - case 120: /* parameter_declaration: type_qualifier parameter_type_specifier */ -#line 1091 "MachineIndependent/glslang.y" + case 122: /* parameter_declaration: type_qualifier parameter_type_specifier */ +#line 1126 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); if ((yyvsp[-1].interm.type).qualifier.precision != EpqNone) @@ -5956,11 +6391,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5960 "MachineIndependent/glslang_tab.cpp" +#line 6395 "MachineIndependent/glslang_tab.cpp" break; - case 121: /* parameter_declaration: parameter_type_specifier */ -#line 1101 "MachineIndependent/glslang.y" + case 123: /* parameter_declaration: parameter_type_specifier */ +#line 1136 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); @@ -5968,68 +6403,68 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5972 "MachineIndependent/glslang_tab.cpp" +#line 6407 "MachineIndependent/glslang_tab.cpp" break; - case 122: /* parameter_type_specifier: type_specifier */ -#line 1111 "MachineIndependent/glslang.y" + case 124: /* parameter_type_specifier: type_specifier */ +#line 1146 "MachineIndependent/glslang.y" { TParameter param = { 0, new TType((yyvsp[0].interm.type)) }; (yyval.interm).param = param; if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 5983 "MachineIndependent/glslang_tab.cpp" +#line 6418 "MachineIndependent/glslang_tab.cpp" break; - case 123: /* init_declarator_list: single_declaration */ -#line 1120 "MachineIndependent/glslang.y" + case 125: /* init_declarator_list: single_declaration */ +#line 1155 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[0].interm); } -#line 5991 "MachineIndependent/glslang_tab.cpp" +#line 6426 "MachineIndependent/glslang_tab.cpp" break; - case 124: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ -#line 1123 "MachineIndependent/glslang.y" + case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ +#line 1158 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 6000 "MachineIndependent/glslang_tab.cpp" +#line 6435 "MachineIndependent/glslang_tab.cpp" break; - case 125: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ -#line 1127 "MachineIndependent/glslang.y" + case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ +#line 1162 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 6009 "MachineIndependent/glslang_tab.cpp" +#line 6444 "MachineIndependent/glslang_tab.cpp" break; - case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ -#line 1131 "MachineIndependent/glslang.y" + case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ +#line 1166 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-5].interm).type; 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 6019 "MachineIndependent/glslang_tab.cpp" +#line 6454 "MachineIndependent/glslang_tab.cpp" break; - case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ -#line 1136 "MachineIndependent/glslang.y" + case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ +#line 1171 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm).type; 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 6029 "MachineIndependent/glslang_tab.cpp" +#line 6464 "MachineIndependent/glslang_tab.cpp" break; - case 128: /* single_declaration: fully_specified_type */ -#line 1144 "MachineIndependent/glslang.y" + case 130: /* single_declaration: fully_specified_type */ +#line 1179 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[0].interm.type); (yyval.interm).intermNode = 0; @@ -6037,51 +6472,51 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 6041 "MachineIndependent/glslang_tab.cpp" +#line 6476 "MachineIndependent/glslang_tab.cpp" break; - case 129: /* single_declaration: fully_specified_type IDENTIFIER */ -#line 1151 "MachineIndependent/glslang.y" + case 131: /* single_declaration: fully_specified_type IDENTIFIER */ +#line 1186 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-1].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 6051 "MachineIndependent/glslang_tab.cpp" +#line 6486 "MachineIndependent/glslang_tab.cpp" break; - case 130: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ -#line 1156 "MachineIndependent/glslang.y" + case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ +#line 1191 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-2].interm.type); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 6061 "MachineIndependent/glslang_tab.cpp" +#line 6496 "MachineIndependent/glslang_tab.cpp" break; - case 131: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ -#line 1161 "MachineIndependent/glslang.y" + case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ +#line 1196 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-4].interm.type); 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 6071 "MachineIndependent/glslang_tab.cpp" +#line 6506 "MachineIndependent/glslang_tab.cpp" break; - case 132: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 1166 "MachineIndependent/glslang.y" + case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 1201 "MachineIndependent/glslang.y" { (yyval.interm).type = (yyvsp[-3].interm.type); 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 6081 "MachineIndependent/glslang_tab.cpp" +#line 6516 "MachineIndependent/glslang_tab.cpp" break; - case 133: /* fully_specified_type: type_specifier */ -#line 1175 "MachineIndependent/glslang.y" + case 135: /* fully_specified_type: type_specifier */ +#line 1210 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); @@ -6092,11 +6527,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 6096 "MachineIndependent/glslang_tab.cpp" +#line 6531 "MachineIndependent/glslang_tab.cpp" break; - case 134: /* fully_specified_type: type_qualifier type_specifier */ -#line 1185 "MachineIndependent/glslang.y" + case 136: /* fully_specified_type: type_qualifier type_specifier */ +#line 1220 "MachineIndependent/glslang.y" { parseContext.globalQualifierFixCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier); parseContext.globalQualifierTypeCheck((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, (yyvsp[0].interm.type)); @@ -6121,22 +6556,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 6125 "MachineIndependent/glslang_tab.cpp" +#line 6560 "MachineIndependent/glslang_tab.cpp" break; - case 135: /* invariant_qualifier: INVARIANT */ -#line 1212 "MachineIndependent/glslang.y" + case 137: /* invariant_qualifier: INVARIANT */ +#line 1247 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "invariant"); parseContext.profileRequires((yyval.interm.type).loc, ENoProfile, 120, 0, "invariant"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 6136 "MachineIndependent/glslang_tab.cpp" +#line 6571 "MachineIndependent/glslang_tab.cpp" break; - case 136: /* interpolation_qualifier: SMOOTH */ -#line 1221 "MachineIndependent/glslang.y" + case 138: /* interpolation_qualifier: SMOOTH */ +#line 1256 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "smooth"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "smooth"); @@ -6144,11 +6579,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 6148 "MachineIndependent/glslang_tab.cpp" +#line 6583 "MachineIndependent/glslang_tab.cpp" break; - case 137: /* interpolation_qualifier: FLAT */ -#line 1228 "MachineIndependent/glslang.y" + case 139: /* interpolation_qualifier: FLAT */ +#line 1263 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "flat"); parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "flat"); @@ -6156,11 +6591,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 6160 "MachineIndependent/glslang_tab.cpp" +#line 6595 "MachineIndependent/glslang_tab.cpp" break; - case 138: /* interpolation_qualifier: NOPERSPECTIVE */ -#line 1236 "MachineIndependent/glslang.y" + case 140: /* interpolation_qualifier: NOPERSPECTIVE */ +#line 1271 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "noperspective"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_NV_shader_noperspective_interpolation, "noperspective"); @@ -6168,11 +6603,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 6172 "MachineIndependent/glslang_tab.cpp" +#line 6607 "MachineIndependent/glslang_tab.cpp" break; - case 139: /* interpolation_qualifier: EXPLICITINTERPAMD */ -#line 1243 "MachineIndependent/glslang.y" + case 141: /* interpolation_qualifier: EXPLICITINTERPAMD */ +#line 1278 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "__explicitInterpAMD"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 450, E_GL_AMD_shader_explicit_vertex_parameter, "explicit interpolation"); @@ -6180,11 +6615,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 6184 "MachineIndependent/glslang_tab.cpp" +#line 6619 "MachineIndependent/glslang_tab.cpp" break; - case 140: /* interpolation_qualifier: PERVERTEXNV */ -#line 1250 "MachineIndependent/glslang.y" + case 142: /* interpolation_qualifier: PERVERTEXNV */ +#line 1285 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexNV"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_NV_fragment_shader_barycentric, "fragment shader barycentric"); @@ -6193,11 +6628,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 6197 "MachineIndependent/glslang_tab.cpp" +#line 6632 "MachineIndependent/glslang_tab.cpp" break; - case 141: /* interpolation_qualifier: PERPRIMITIVENV */ -#line 1258 "MachineIndependent/glslang.y" + case 143: /* interpolation_qualifier: PERPRIMITIVENV */ +#line 1293 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); @@ -6208,11 +6643,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6212 "MachineIndependent/glslang_tab.cpp" +#line 6647 "MachineIndependent/glslang_tab.cpp" break; - case 142: /* interpolation_qualifier: PERVIEWNV */ -#line 1268 "MachineIndependent/glslang.y" + case 144: /* interpolation_qualifier: PERVIEWNV */ +#line 1303 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); @@ -6220,11 +6655,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 6224 "MachineIndependent/glslang_tab.cpp" +#line 6659 "MachineIndependent/glslang_tab.cpp" break; - case 143: /* interpolation_qualifier: PERTASKNV */ -#line 1275 "MachineIndependent/glslang.y" + case 145: /* interpolation_qualifier: PERTASKNV */ +#line 1310 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); @@ -6232,84 +6667,84 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 6236 "MachineIndependent/glslang_tab.cpp" +#line 6671 "MachineIndependent/glslang_tab.cpp" break; - case 144: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ -#line 1286 "MachineIndependent/glslang.y" + case 146: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ +#line 1321 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 6244 "MachineIndependent/glslang_tab.cpp" +#line 6679 "MachineIndependent/glslang_tab.cpp" break; - case 145: /* layout_qualifier_id_list: layout_qualifier_id */ -#line 1292 "MachineIndependent/glslang.y" + case 147: /* layout_qualifier_id_list: layout_qualifier_id */ +#line 1327 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6252 "MachineIndependent/glslang_tab.cpp" +#line 6687 "MachineIndependent/glslang_tab.cpp" break; - case 146: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ -#line 1295 "MachineIndependent/glslang.y" + case 148: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ +#line 1330 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 6262 "MachineIndependent/glslang_tab.cpp" +#line 6697 "MachineIndependent/glslang_tab.cpp" break; - case 147: /* layout_qualifier_id: IDENTIFIER */ -#line 1302 "MachineIndependent/glslang.y" + case 149: /* layout_qualifier_id: IDENTIFIER */ +#line 1337 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 6271 "MachineIndependent/glslang_tab.cpp" +#line 6706 "MachineIndependent/glslang_tab.cpp" break; - case 148: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ -#line 1306 "MachineIndependent/glslang.y" + case 150: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ +#line 1341 "MachineIndependent/glslang.y" { (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 6280 "MachineIndependent/glslang_tab.cpp" +#line 6715 "MachineIndependent/glslang_tab.cpp" break; - case 149: /* layout_qualifier_id: SHARED */ -#line 1310 "MachineIndependent/glslang.y" + case 151: /* layout_qualifier_id: SHARED */ +#line 1345 "MachineIndependent/glslang.y" { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 6290 "MachineIndependent/glslang_tab.cpp" +#line 6725 "MachineIndependent/glslang_tab.cpp" break; - case 150: /* precise_qualifier: PRECISE */ -#line 1319 "MachineIndependent/glslang.y" + case 152: /* precise_qualifier: PRECISE */ +#line 1354 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 6301 "MachineIndependent/glslang_tab.cpp" +#line 6736 "MachineIndependent/glslang_tab.cpp" break; - case 151: /* type_qualifier: single_type_qualifier */ -#line 1329 "MachineIndependent/glslang.y" + case 153: /* type_qualifier: single_type_qualifier */ +#line 1364 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6309 "MachineIndependent/glslang_tab.cpp" +#line 6744 "MachineIndependent/glslang_tab.cpp" break; - case 152: /* type_qualifier: type_qualifier single_type_qualifier */ -#line 1332 "MachineIndependent/glslang.y" + case 154: /* type_qualifier: type_qualifier single_type_qualifier */ +#line 1367 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -6318,112 +6753,151 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 6322 "MachineIndependent/glslang_tab.cpp" +#line 6757 "MachineIndependent/glslang_tab.cpp" break; - case 153: /* single_type_qualifier: storage_qualifier */ -#line 1343 "MachineIndependent/glslang.y" + case 155: /* single_type_qualifier: storage_qualifier */ +#line 1378 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6330 "MachineIndependent/glslang_tab.cpp" +#line 6765 "MachineIndependent/glslang_tab.cpp" break; - case 154: /* single_type_qualifier: layout_qualifier */ -#line 1346 "MachineIndependent/glslang.y" + case 156: /* single_type_qualifier: layout_qualifier */ +#line 1381 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6338 "MachineIndependent/glslang_tab.cpp" +#line 6773 "MachineIndependent/glslang_tab.cpp" break; - case 155: /* single_type_qualifier: precision_qualifier */ -#line 1349 "MachineIndependent/glslang.y" + case 157: /* single_type_qualifier: precision_qualifier */ +#line 1384 "MachineIndependent/glslang.y" { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6347 "MachineIndependent/glslang_tab.cpp" +#line 6782 "MachineIndependent/glslang_tab.cpp" break; - case 156: /* single_type_qualifier: interpolation_qualifier */ -#line 1353 "MachineIndependent/glslang.y" + case 158: /* single_type_qualifier: interpolation_qualifier */ +#line 1388 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6356 "MachineIndependent/glslang_tab.cpp" +#line 6791 "MachineIndependent/glslang_tab.cpp" break; - case 157: /* single_type_qualifier: invariant_qualifier */ -#line 1357 "MachineIndependent/glslang.y" + case 159: /* single_type_qualifier: invariant_qualifier */ +#line 1392 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6365 "MachineIndependent/glslang_tab.cpp" +#line 6800 "MachineIndependent/glslang_tab.cpp" break; - case 158: /* single_type_qualifier: precise_qualifier */ -#line 1362 "MachineIndependent/glslang.y" + case 160: /* single_type_qualifier: precise_qualifier */ +#line 1397 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6374 "MachineIndependent/glslang_tab.cpp" +#line 6809 "MachineIndependent/glslang_tab.cpp" break; - case 159: /* single_type_qualifier: non_uniform_qualifier */ -#line 1366 "MachineIndependent/glslang.y" + case 161: /* single_type_qualifier: non_uniform_qualifier */ +#line 1401 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6382 "MachineIndependent/glslang_tab.cpp" +#line 6817 "MachineIndependent/glslang_tab.cpp" + break; + + case 162: /* single_type_qualifier: spirv_storage_class_qualifier */ +#line 1404 "MachineIndependent/glslang.y" + { + parseContext.globalCheck((yyvsp[0].interm.type).loc, "spirv_storage_class"); + parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier"); + (yyval.interm.type) = (yyvsp[0].interm.type); + } +#line 6827 "MachineIndependent/glslang_tab.cpp" + break; + + case 163: /* single_type_qualifier: spirv_decorate_qualifier */ +#line 1409 "MachineIndependent/glslang.y" + { + parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier"); + (yyval.interm.type) = (yyvsp[0].interm.type); + } +#line 6836 "MachineIndependent/glslang_tab.cpp" + break; + + case 164: /* single_type_qualifier: SPIRV_BY_REFERENCE */ +#line 1413 "MachineIndependent/glslang.y" + { + parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference"); + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.setSpirvByReference(); + } +#line 6846 "MachineIndependent/glslang_tab.cpp" + break; + + case 165: /* single_type_qualifier: SPIRV_LITERAL */ +#line 1418 "MachineIndependent/glslang.y" + { + parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal"); + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.setSpirvLiteral(); + } +#line 6856 "MachineIndependent/glslang_tab.cpp" break; - case 160: /* storage_qualifier: CONST */ -#line 1373 "MachineIndependent/glslang.y" + case 166: /* storage_qualifier: CONST */ +#line 1427 "MachineIndependent/glslang.y" { (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 6391 "MachineIndependent/glslang_tab.cpp" +#line 6865 "MachineIndependent/glslang_tab.cpp" break; - case 161: /* storage_qualifier: INOUT */ -#line 1377 "MachineIndependent/glslang.y" + case 167: /* storage_qualifier: INOUT */ +#line 1431 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 6401 "MachineIndependent/glslang_tab.cpp" +#line 6875 "MachineIndependent/glslang_tab.cpp" break; - case 162: /* storage_qualifier: IN */ -#line 1382 "MachineIndependent/glslang.y" + case 168: /* storage_qualifier: IN */ +#line 1436 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 6412 "MachineIndependent/glslang_tab.cpp" +#line 6886 "MachineIndependent/glslang_tab.cpp" break; - case 163: /* storage_qualifier: OUT */ -#line 1388 "MachineIndependent/glslang.y" + case 169: /* storage_qualifier: OUT */ +#line 1442 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 6423 "MachineIndependent/glslang_tab.cpp" +#line 6897 "MachineIndependent/glslang_tab.cpp" break; - case 164: /* storage_qualifier: CENTROID */ -#line 1394 "MachineIndependent/glslang.y" + case 170: /* storage_qualifier: CENTROID */ +#line 1448 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -6431,21 +6905,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 6435 "MachineIndependent/glslang_tab.cpp" +#line 6909 "MachineIndependent/glslang_tab.cpp" break; - case 165: /* storage_qualifier: UNIFORM */ -#line 1401 "MachineIndependent/glslang.y" + case 171: /* storage_qualifier: UNIFORM */ +#line 1455 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 6445 "MachineIndependent/glslang_tab.cpp" +#line 6919 "MachineIndependent/glslang_tab.cpp" break; - case 166: /* storage_qualifier: SHARED */ -#line 1406 "MachineIndependent/glslang.y" + case 172: /* storage_qualifier: SHARED */ +#line 1460 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); @@ -6454,21 +6928,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 6458 "MachineIndependent/glslang_tab.cpp" +#line 6932 "MachineIndependent/glslang_tab.cpp" break; - case 167: /* storage_qualifier: BUFFER */ -#line 1414 "MachineIndependent/glslang.y" + case 173: /* storage_qualifier: BUFFER */ +#line 1468 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 6468 "MachineIndependent/glslang_tab.cpp" +#line 6942 "MachineIndependent/glslang_tab.cpp" break; - case 168: /* storage_qualifier: ATTRIBUTE */ -#line 1420 "MachineIndependent/glslang.y" + case 174: /* storage_qualifier: ATTRIBUTE */ +#line 1474 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -6481,11 +6955,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6485 "MachineIndependent/glslang_tab.cpp" +#line 6959 "MachineIndependent/glslang_tab.cpp" break; - case 169: /* storage_qualifier: VARYING */ -#line 1432 "MachineIndependent/glslang.y" + case 175: /* storage_qualifier: VARYING */ +#line 1486 "MachineIndependent/glslang.y" { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -6500,32 +6974,32 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6504 "MachineIndependent/glslang_tab.cpp" +#line 6978 "MachineIndependent/glslang_tab.cpp" break; - case 170: /* storage_qualifier: PATCH */ -#line 1446 "MachineIndependent/glslang.y" + case 176: /* storage_qualifier: PATCH */ +#line 1500 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 6515 "MachineIndependent/glslang_tab.cpp" +#line 6989 "MachineIndependent/glslang_tab.cpp" break; - case 171: /* storage_qualifier: SAMPLE */ -#line 1452 "MachineIndependent/glslang.y" + case 177: /* storage_qualifier: SAMPLE */ +#line 1506 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 6525 "MachineIndependent/glslang_tab.cpp" +#line 6999 "MachineIndependent/glslang_tab.cpp" break; - case 172: /* storage_qualifier: HITATTRNV */ -#line 1457 "MachineIndependent/glslang.y" + case 178: /* storage_qualifier: HITATTRNV */ +#line 1511 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -6534,11 +7008,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6538 "MachineIndependent/glslang_tab.cpp" +#line 7012 "MachineIndependent/glslang_tab.cpp" break; - case 173: /* storage_qualifier: HITATTREXT */ -#line 1465 "MachineIndependent/glslang.y" + case 179: /* storage_qualifier: HITATTREXT */ +#line 1519 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -6547,11 +7021,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 6551 "MachineIndependent/glslang_tab.cpp" +#line 7025 "MachineIndependent/glslang_tab.cpp" break; - case 174: /* storage_qualifier: PAYLOADNV */ -#line 1473 "MachineIndependent/glslang.y" + case 180: /* storage_qualifier: PAYLOADNV */ +#line 1527 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -6560,11 +7034,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6564 "MachineIndependent/glslang_tab.cpp" +#line 7038 "MachineIndependent/glslang_tab.cpp" break; - case 175: /* storage_qualifier: PAYLOADEXT */ -#line 1481 "MachineIndependent/glslang.y" + case 181: /* storage_qualifier: PAYLOADEXT */ +#line 1535 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -6573,11 +7047,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 6577 "MachineIndependent/glslang_tab.cpp" +#line 7051 "MachineIndependent/glslang_tab.cpp" break; - case 176: /* storage_qualifier: PAYLOADINNV */ -#line 1489 "MachineIndependent/glslang.y" + case 182: /* storage_qualifier: PAYLOADINNV */ +#line 1543 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6586,11 +7060,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6590 "MachineIndependent/glslang_tab.cpp" +#line 7064 "MachineIndependent/glslang_tab.cpp" break; - case 177: /* storage_qualifier: PAYLOADINEXT */ -#line 1497 "MachineIndependent/glslang.y" + case 183: /* storage_qualifier: PAYLOADINEXT */ +#line 1551 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -6599,11 +7073,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 6603 "MachineIndependent/glslang_tab.cpp" +#line 7077 "MachineIndependent/glslang_tab.cpp" break; - case 178: /* storage_qualifier: CALLDATANV */ -#line 1505 "MachineIndependent/glslang.y" + case 184: /* storage_qualifier: CALLDATANV */ +#line 1559 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6612,11 +7086,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6616 "MachineIndependent/glslang_tab.cpp" +#line 7090 "MachineIndependent/glslang_tab.cpp" break; - case 179: /* storage_qualifier: CALLDATAEXT */ -#line 1513 "MachineIndependent/glslang.y" + case 185: /* storage_qualifier: CALLDATAEXT */ +#line 1567 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -6625,11 +7099,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 6629 "MachineIndependent/glslang_tab.cpp" +#line 7103 "MachineIndependent/glslang_tab.cpp" break; - case 180: /* storage_qualifier: CALLDATAINNV */ -#line 1521 "MachineIndependent/glslang.y" + case 186: /* storage_qualifier: CALLDATAINNV */ +#line 1575 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -6637,11 +7111,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6641 "MachineIndependent/glslang_tab.cpp" +#line 7115 "MachineIndependent/glslang_tab.cpp" break; - case 181: /* storage_qualifier: CALLDATAINEXT */ -#line 1528 "MachineIndependent/glslang.y" + case 187: /* storage_qualifier: CALLDATAINEXT */ +#line 1582 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -6649,175 +7123,175 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 6653 "MachineIndependent/glslang_tab.cpp" +#line 7127 "MachineIndependent/glslang_tab.cpp" break; - case 182: /* storage_qualifier: COHERENT */ -#line 1535 "MachineIndependent/glslang.y" + case 188: /* storage_qualifier: COHERENT */ +#line 1589 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 6662 "MachineIndependent/glslang_tab.cpp" +#line 7136 "MachineIndependent/glslang_tab.cpp" break; - case 183: /* storage_qualifier: DEVICECOHERENT */ -#line 1539 "MachineIndependent/glslang.y" + case 189: /* storage_qualifier: DEVICECOHERENT */ +#line 1593 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 6672 "MachineIndependent/glslang_tab.cpp" +#line 7146 "MachineIndependent/glslang_tab.cpp" break; - case 184: /* storage_qualifier: QUEUEFAMILYCOHERENT */ -#line 1544 "MachineIndependent/glslang.y" + case 190: /* storage_qualifier: QUEUEFAMILYCOHERENT */ +#line 1598 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 6682 "MachineIndependent/glslang_tab.cpp" +#line 7156 "MachineIndependent/glslang_tab.cpp" break; - case 185: /* storage_qualifier: WORKGROUPCOHERENT */ -#line 1549 "MachineIndependent/glslang.y" + case 191: /* storage_qualifier: WORKGROUPCOHERENT */ +#line 1603 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 6692 "MachineIndependent/glslang_tab.cpp" +#line 7166 "MachineIndependent/glslang_tab.cpp" break; - case 186: /* storage_qualifier: SUBGROUPCOHERENT */ -#line 1554 "MachineIndependent/glslang.y" + case 192: /* storage_qualifier: SUBGROUPCOHERENT */ +#line 1608 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 6702 "MachineIndependent/glslang_tab.cpp" +#line 7176 "MachineIndependent/glslang_tab.cpp" break; - case 187: /* storage_qualifier: NONPRIVATE */ -#line 1559 "MachineIndependent/glslang.y" + case 193: /* storage_qualifier: NONPRIVATE */ +#line 1613 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 6712 "MachineIndependent/glslang_tab.cpp" +#line 7186 "MachineIndependent/glslang_tab.cpp" break; - case 188: /* storage_qualifier: SHADERCALLCOHERENT */ -#line 1564 "MachineIndependent/glslang.y" + case 194: /* storage_qualifier: SHADERCALLCOHERENT */ +#line 1618 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 6722 "MachineIndependent/glslang_tab.cpp" +#line 7196 "MachineIndependent/glslang_tab.cpp" break; - case 189: /* storage_qualifier: VOLATILE */ -#line 1569 "MachineIndependent/glslang.y" + case 195: /* storage_qualifier: VOLATILE */ +#line 1623 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 6731 "MachineIndependent/glslang_tab.cpp" +#line 7205 "MachineIndependent/glslang_tab.cpp" break; - case 190: /* storage_qualifier: RESTRICT */ -#line 1573 "MachineIndependent/glslang.y" + case 196: /* storage_qualifier: RESTRICT */ +#line 1627 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 6740 "MachineIndependent/glslang_tab.cpp" +#line 7214 "MachineIndependent/glslang_tab.cpp" break; - case 191: /* storage_qualifier: READONLY */ -#line 1577 "MachineIndependent/glslang.y" + case 197: /* storage_qualifier: READONLY */ +#line 1631 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 6749 "MachineIndependent/glslang_tab.cpp" +#line 7223 "MachineIndependent/glslang_tab.cpp" break; - case 192: /* storage_qualifier: WRITEONLY */ -#line 1581 "MachineIndependent/glslang.y" + case 198: /* storage_qualifier: WRITEONLY */ +#line 1635 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 6758 "MachineIndependent/glslang_tab.cpp" +#line 7232 "MachineIndependent/glslang_tab.cpp" break; - case 193: /* storage_qualifier: SUBROUTINE */ -#line 1585 "MachineIndependent/glslang.y" + case 199: /* storage_qualifier: SUBROUTINE */ +#line 1639 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 6769 "MachineIndependent/glslang_tab.cpp" +#line 7243 "MachineIndependent/glslang_tab.cpp" break; - case 194: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ -#line 1591 "MachineIndependent/glslang.y" + case 200: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ +#line 1645 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 6780 "MachineIndependent/glslang_tab.cpp" +#line 7254 "MachineIndependent/glslang_tab.cpp" break; - case 195: /* non_uniform_qualifier: NONUNIFORM */ -#line 1602 "MachineIndependent/glslang.y" + case 201: /* non_uniform_qualifier: NONUNIFORM */ +#line 1656 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 6789 "MachineIndependent/glslang_tab.cpp" +#line 7263 "MachineIndependent/glslang_tab.cpp" break; - case 196: /* type_name_list: IDENTIFIER */ -#line 1609 "MachineIndependent/glslang.y" + case 202: /* type_name_list: IDENTIFIER */ +#line 1663 "MachineIndependent/glslang.y" { // TODO } -#line 6797 "MachineIndependent/glslang_tab.cpp" +#line 7271 "MachineIndependent/glslang_tab.cpp" break; - case 197: /* type_name_list: type_name_list COMMA IDENTIFIER */ -#line 1612 "MachineIndependent/glslang.y" + case 203: /* type_name_list: type_name_list COMMA IDENTIFIER */ +#line 1666 "MachineIndependent/glslang.y" { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 6807 "MachineIndependent/glslang_tab.cpp" +#line 7281 "MachineIndependent/glslang_tab.cpp" break; - case 198: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ -#line 1621 "MachineIndependent/glslang.y" + case 204: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ +#line 1675 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 6817 "MachineIndependent/glslang_tab.cpp" +#line 7291 "MachineIndependent/glslang_tab.cpp" break; - case 199: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ -#line 1626 "MachineIndependent/glslang.y" + case 205: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ +#line 1680 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); @@ -6825,21 +7299,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 6829 "MachineIndependent/glslang_tab.cpp" +#line 7303 "MachineIndependent/glslang_tab.cpp" break; - case 200: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ -#line 1636 "MachineIndependent/glslang.y" + case 206: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ +#line 1690 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 6839 "MachineIndependent/glslang_tab.cpp" +#line 7313 "MachineIndependent/glslang_tab.cpp" break; - case 201: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1641 "MachineIndependent/glslang.y" + case 207: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1695 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -6848,20 +7322,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6852 "MachineIndependent/glslang_tab.cpp" +#line 7326 "MachineIndependent/glslang_tab.cpp" break; - case 202: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ -#line 1649 "MachineIndependent/glslang.y" + case 208: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ +#line 1703 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 6861 "MachineIndependent/glslang_tab.cpp" +#line 7335 "MachineIndependent/glslang_tab.cpp" break; - case 203: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1653 "MachineIndependent/glslang.y" + case 209: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1707 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); @@ -6869,35 +7343,35 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 6873 "MachineIndependent/glslang_tab.cpp" +#line 7347 "MachineIndependent/glslang_tab.cpp" break; - case 204: /* type_parameter_specifier_opt: type_parameter_specifier */ -#line 1663 "MachineIndependent/glslang.y" + case 210: /* type_parameter_specifier_opt: type_parameter_specifier */ +#line 1717 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 6881 "MachineIndependent/glslang_tab.cpp" +#line 7355 "MachineIndependent/glslang_tab.cpp" break; - case 205: /* type_parameter_specifier_opt: %empty */ -#line 1666 "MachineIndependent/glslang.y" + case 211: /* type_parameter_specifier_opt: %empty */ +#line 1720 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = 0; } -#line 6889 "MachineIndependent/glslang_tab.cpp" +#line 7363 "MachineIndependent/glslang_tab.cpp" break; - case 206: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ -#line 1672 "MachineIndependent/glslang.y" + case 212: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ +#line 1726 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 6897 "MachineIndependent/glslang_tab.cpp" +#line 7371 "MachineIndependent/glslang_tab.cpp" break; - case 207: /* type_parameter_specifier_list: unary_expression */ -#line 1678 "MachineIndependent/glslang.y" + case 213: /* type_parameter_specifier_list: unary_expression */ +#line 1732 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = new TArraySizes; @@ -6905,11 +7379,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6909 "MachineIndependent/glslang_tab.cpp" +#line 7383 "MachineIndependent/glslang_tab.cpp" break; - case 208: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ -#line 1685 "MachineIndependent/glslang.y" + case 214: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ +#line 1739 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -6917,300 +7391,300 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 6921 "MachineIndependent/glslang_tab.cpp" +#line 7395 "MachineIndependent/glslang_tab.cpp" break; - case 209: /* type_specifier_nonarray: VOID */ -#line 1695 "MachineIndependent/glslang.y" + case 215: /* type_specifier_nonarray: VOID */ +#line 1749 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 6930 "MachineIndependent/glslang_tab.cpp" +#line 7404 "MachineIndependent/glslang_tab.cpp" break; - case 210: /* type_specifier_nonarray: FLOAT */ -#line 1699 "MachineIndependent/glslang.y" + case 216: /* type_specifier_nonarray: FLOAT */ +#line 1753 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 6939 "MachineIndependent/glslang_tab.cpp" +#line 7413 "MachineIndependent/glslang_tab.cpp" break; - case 211: /* type_specifier_nonarray: INT */ -#line 1703 "MachineIndependent/glslang.y" + case 217: /* type_specifier_nonarray: INT */ +#line 1757 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 6948 "MachineIndependent/glslang_tab.cpp" +#line 7422 "MachineIndependent/glslang_tab.cpp" break; - case 212: /* type_specifier_nonarray: UINT */ -#line 1707 "MachineIndependent/glslang.y" + case 218: /* type_specifier_nonarray: UINT */ +#line 1761 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 6958 "MachineIndependent/glslang_tab.cpp" +#line 7432 "MachineIndependent/glslang_tab.cpp" break; - case 213: /* type_specifier_nonarray: BOOL */ -#line 1712 "MachineIndependent/glslang.y" + case 219: /* type_specifier_nonarray: BOOL */ +#line 1766 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 6967 "MachineIndependent/glslang_tab.cpp" +#line 7441 "MachineIndependent/glslang_tab.cpp" break; - case 214: /* type_specifier_nonarray: VEC2 */ -#line 1716 "MachineIndependent/glslang.y" + case 220: /* type_specifier_nonarray: VEC2 */ +#line 1770 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 6977 "MachineIndependent/glslang_tab.cpp" +#line 7451 "MachineIndependent/glslang_tab.cpp" break; - case 215: /* type_specifier_nonarray: VEC3 */ -#line 1721 "MachineIndependent/glslang.y" + case 221: /* type_specifier_nonarray: VEC3 */ +#line 1775 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 6987 "MachineIndependent/glslang_tab.cpp" +#line 7461 "MachineIndependent/glslang_tab.cpp" break; - case 216: /* type_specifier_nonarray: VEC4 */ -#line 1726 "MachineIndependent/glslang.y" + case 222: /* type_specifier_nonarray: VEC4 */ +#line 1780 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 6997 "MachineIndependent/glslang_tab.cpp" +#line 7471 "MachineIndependent/glslang_tab.cpp" break; - case 217: /* type_specifier_nonarray: BVEC2 */ -#line 1731 "MachineIndependent/glslang.y" + case 223: /* type_specifier_nonarray: BVEC2 */ +#line 1785 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 7007 "MachineIndependent/glslang_tab.cpp" +#line 7481 "MachineIndependent/glslang_tab.cpp" break; - case 218: /* type_specifier_nonarray: BVEC3 */ -#line 1736 "MachineIndependent/glslang.y" + case 224: /* type_specifier_nonarray: BVEC3 */ +#line 1790 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 7017 "MachineIndependent/glslang_tab.cpp" +#line 7491 "MachineIndependent/glslang_tab.cpp" break; - case 219: /* type_specifier_nonarray: BVEC4 */ -#line 1741 "MachineIndependent/glslang.y" + case 225: /* type_specifier_nonarray: BVEC4 */ +#line 1795 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 7027 "MachineIndependent/glslang_tab.cpp" +#line 7501 "MachineIndependent/glslang_tab.cpp" break; - case 220: /* type_specifier_nonarray: IVEC2 */ -#line 1746 "MachineIndependent/glslang.y" + case 226: /* type_specifier_nonarray: IVEC2 */ +#line 1800 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 7037 "MachineIndependent/glslang_tab.cpp" +#line 7511 "MachineIndependent/glslang_tab.cpp" break; - case 221: /* type_specifier_nonarray: IVEC3 */ -#line 1751 "MachineIndependent/glslang.y" + case 227: /* type_specifier_nonarray: IVEC3 */ +#line 1805 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 7047 "MachineIndependent/glslang_tab.cpp" +#line 7521 "MachineIndependent/glslang_tab.cpp" break; - case 222: /* type_specifier_nonarray: IVEC4 */ -#line 1756 "MachineIndependent/glslang.y" + case 228: /* type_specifier_nonarray: IVEC4 */ +#line 1810 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 7057 "MachineIndependent/glslang_tab.cpp" +#line 7531 "MachineIndependent/glslang_tab.cpp" break; - case 223: /* type_specifier_nonarray: UVEC2 */ -#line 1761 "MachineIndependent/glslang.y" + case 229: /* type_specifier_nonarray: UVEC2 */ +#line 1815 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7068 "MachineIndependent/glslang_tab.cpp" +#line 7542 "MachineIndependent/glslang_tab.cpp" break; - case 224: /* type_specifier_nonarray: UVEC3 */ -#line 1767 "MachineIndependent/glslang.y" + case 230: /* type_specifier_nonarray: UVEC3 */ +#line 1821 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7079 "MachineIndependent/glslang_tab.cpp" +#line 7553 "MachineIndependent/glslang_tab.cpp" break; - case 225: /* type_specifier_nonarray: UVEC4 */ -#line 1773 "MachineIndependent/glslang.y" + case 231: /* type_specifier_nonarray: UVEC4 */ +#line 1827 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7090 "MachineIndependent/glslang_tab.cpp" +#line 7564 "MachineIndependent/glslang_tab.cpp" break; - case 226: /* type_specifier_nonarray: MAT2 */ -#line 1779 "MachineIndependent/glslang.y" + case 232: /* type_specifier_nonarray: MAT2 */ +#line 1833 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7100 "MachineIndependent/glslang_tab.cpp" +#line 7574 "MachineIndependent/glslang_tab.cpp" break; - case 227: /* type_specifier_nonarray: MAT3 */ -#line 1784 "MachineIndependent/glslang.y" + case 233: /* type_specifier_nonarray: MAT3 */ +#line 1838 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7110 "MachineIndependent/glslang_tab.cpp" +#line 7584 "MachineIndependent/glslang_tab.cpp" break; - case 228: /* type_specifier_nonarray: MAT4 */ -#line 1789 "MachineIndependent/glslang.y" + case 234: /* type_specifier_nonarray: MAT4 */ +#line 1843 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7120 "MachineIndependent/glslang_tab.cpp" +#line 7594 "MachineIndependent/glslang_tab.cpp" break; - case 229: /* type_specifier_nonarray: MAT2X2 */ -#line 1794 "MachineIndependent/glslang.y" + case 235: /* type_specifier_nonarray: MAT2X2 */ +#line 1848 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7130 "MachineIndependent/glslang_tab.cpp" +#line 7604 "MachineIndependent/glslang_tab.cpp" break; - case 230: /* type_specifier_nonarray: MAT2X3 */ -#line 1799 "MachineIndependent/glslang.y" + case 236: /* type_specifier_nonarray: MAT2X3 */ +#line 1853 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7140 "MachineIndependent/glslang_tab.cpp" +#line 7614 "MachineIndependent/glslang_tab.cpp" break; - case 231: /* type_specifier_nonarray: MAT2X4 */ -#line 1804 "MachineIndependent/glslang.y" + case 237: /* type_specifier_nonarray: MAT2X4 */ +#line 1858 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7150 "MachineIndependent/glslang_tab.cpp" +#line 7624 "MachineIndependent/glslang_tab.cpp" break; - case 232: /* type_specifier_nonarray: MAT3X2 */ -#line 1809 "MachineIndependent/glslang.y" + case 238: /* type_specifier_nonarray: MAT3X2 */ +#line 1863 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7160 "MachineIndependent/glslang_tab.cpp" +#line 7634 "MachineIndependent/glslang_tab.cpp" break; - case 233: /* type_specifier_nonarray: MAT3X3 */ -#line 1814 "MachineIndependent/glslang.y" + case 239: /* type_specifier_nonarray: MAT3X3 */ +#line 1868 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7170 "MachineIndependent/glslang_tab.cpp" +#line 7644 "MachineIndependent/glslang_tab.cpp" break; - case 234: /* type_specifier_nonarray: MAT3X4 */ -#line 1819 "MachineIndependent/glslang.y" + case 240: /* type_specifier_nonarray: MAT3X4 */ +#line 1873 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7180 "MachineIndependent/glslang_tab.cpp" +#line 7654 "MachineIndependent/glslang_tab.cpp" break; - case 235: /* type_specifier_nonarray: MAT4X2 */ -#line 1824 "MachineIndependent/glslang.y" + case 241: /* type_specifier_nonarray: MAT4X2 */ +#line 1878 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7190 "MachineIndependent/glslang_tab.cpp" +#line 7664 "MachineIndependent/glslang_tab.cpp" break; - case 236: /* type_specifier_nonarray: MAT4X3 */ -#line 1829 "MachineIndependent/glslang.y" + case 242: /* type_specifier_nonarray: MAT4X3 */ +#line 1883 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7200 "MachineIndependent/glslang_tab.cpp" +#line 7674 "MachineIndependent/glslang_tab.cpp" break; - case 237: /* type_specifier_nonarray: MAT4X4 */ -#line 1834 "MachineIndependent/glslang.y" + case 243: /* type_specifier_nonarray: MAT4X4 */ +#line 1888 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7210 "MachineIndependent/glslang_tab.cpp" +#line 7684 "MachineIndependent/glslang_tab.cpp" break; - case 238: /* type_specifier_nonarray: DOUBLE */ -#line 1840 "MachineIndependent/glslang.y" + case 244: /* type_specifier_nonarray: DOUBLE */ +#line 1894 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7218,121 +7692,121 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7222 "MachineIndependent/glslang_tab.cpp" +#line 7696 "MachineIndependent/glslang_tab.cpp" break; - case 239: /* type_specifier_nonarray: FLOAT16_T */ -#line 1847 "MachineIndependent/glslang.y" + case 245: /* type_specifier_nonarray: FLOAT16_T */ +#line 1901 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 7232 "MachineIndependent/glslang_tab.cpp" +#line 7706 "MachineIndependent/glslang_tab.cpp" break; - case 240: /* type_specifier_nonarray: FLOAT32_T */ -#line 1852 "MachineIndependent/glslang.y" + case 246: /* type_specifier_nonarray: FLOAT32_T */ +#line 1906 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7242 "MachineIndependent/glslang_tab.cpp" +#line 7716 "MachineIndependent/glslang_tab.cpp" break; - case 241: /* type_specifier_nonarray: FLOAT64_T */ -#line 1857 "MachineIndependent/glslang.y" + case 247: /* type_specifier_nonarray: FLOAT64_T */ +#line 1911 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7252 "MachineIndependent/glslang_tab.cpp" +#line 7726 "MachineIndependent/glslang_tab.cpp" break; - case 242: /* type_specifier_nonarray: INT8_T */ -#line 1862 "MachineIndependent/glslang.y" + case 248: /* type_specifier_nonarray: INT8_T */ +#line 1916 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 7262 "MachineIndependent/glslang_tab.cpp" +#line 7736 "MachineIndependent/glslang_tab.cpp" break; - case 243: /* type_specifier_nonarray: UINT8_T */ -#line 1867 "MachineIndependent/glslang.y" + case 249: /* type_specifier_nonarray: UINT8_T */ +#line 1921 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 7272 "MachineIndependent/glslang_tab.cpp" +#line 7746 "MachineIndependent/glslang_tab.cpp" break; - case 244: /* type_specifier_nonarray: INT16_T */ -#line 1872 "MachineIndependent/glslang.y" + case 250: /* type_specifier_nonarray: INT16_T */ +#line 1926 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 7282 "MachineIndependent/glslang_tab.cpp" +#line 7756 "MachineIndependent/glslang_tab.cpp" break; - case 245: /* type_specifier_nonarray: UINT16_T */ -#line 1877 "MachineIndependent/glslang.y" + case 251: /* type_specifier_nonarray: UINT16_T */ +#line 1931 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 7292 "MachineIndependent/glslang_tab.cpp" +#line 7766 "MachineIndependent/glslang_tab.cpp" break; - case 246: /* type_specifier_nonarray: INT32_T */ -#line 1882 "MachineIndependent/glslang.y" + case 252: /* type_specifier_nonarray: INT32_T */ +#line 1936 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7302 "MachineIndependent/glslang_tab.cpp" +#line 7776 "MachineIndependent/glslang_tab.cpp" break; - case 247: /* type_specifier_nonarray: UINT32_T */ -#line 1887 "MachineIndependent/glslang.y" + case 253: /* type_specifier_nonarray: UINT32_T */ +#line 1941 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 7312 "MachineIndependent/glslang_tab.cpp" +#line 7786 "MachineIndependent/glslang_tab.cpp" break; - case 248: /* type_specifier_nonarray: INT64_T */ -#line 1892 "MachineIndependent/glslang.y" + case 254: /* type_specifier_nonarray: INT64_T */ +#line 1946 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 7322 "MachineIndependent/glslang_tab.cpp" +#line 7796 "MachineIndependent/glslang_tab.cpp" break; - case 249: /* type_specifier_nonarray: UINT64_T */ -#line 1897 "MachineIndependent/glslang.y" + case 255: /* type_specifier_nonarray: UINT64_T */ +#line 1951 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 7332 "MachineIndependent/glslang_tab.cpp" +#line 7806 "MachineIndependent/glslang_tab.cpp" break; - case 250: /* type_specifier_nonarray: DVEC2 */ -#line 1902 "MachineIndependent/glslang.y" + case 256: /* type_specifier_nonarray: DVEC2 */ +#line 1956 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7341,11 +7815,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7345 "MachineIndependent/glslang_tab.cpp" +#line 7819 "MachineIndependent/glslang_tab.cpp" break; - case 251: /* type_specifier_nonarray: DVEC3 */ -#line 1910 "MachineIndependent/glslang.y" + case 257: /* type_specifier_nonarray: DVEC3 */ +#line 1964 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7354,11 +7828,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7358 "MachineIndependent/glslang_tab.cpp" +#line 7832 "MachineIndependent/glslang_tab.cpp" break; - case 252: /* type_specifier_nonarray: DVEC4 */ -#line 1918 "MachineIndependent/glslang.y" + case 258: /* type_specifier_nonarray: DVEC4 */ +#line 1972 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7367,374 +7841,374 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7371 "MachineIndependent/glslang_tab.cpp" +#line 7845 "MachineIndependent/glslang_tab.cpp" break; - case 253: /* type_specifier_nonarray: F16VEC2 */ -#line 1926 "MachineIndependent/glslang.y" + case 259: /* type_specifier_nonarray: F16VEC2 */ +#line 1980 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 7382 "MachineIndependent/glslang_tab.cpp" +#line 7856 "MachineIndependent/glslang_tab.cpp" break; - case 254: /* type_specifier_nonarray: F16VEC3 */ -#line 1932 "MachineIndependent/glslang.y" + case 260: /* type_specifier_nonarray: F16VEC3 */ +#line 1986 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 7393 "MachineIndependent/glslang_tab.cpp" +#line 7867 "MachineIndependent/glslang_tab.cpp" break; - case 255: /* type_specifier_nonarray: F16VEC4 */ -#line 1938 "MachineIndependent/glslang.y" + case 261: /* type_specifier_nonarray: F16VEC4 */ +#line 1992 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 7404 "MachineIndependent/glslang_tab.cpp" +#line 7878 "MachineIndependent/glslang_tab.cpp" break; - case 256: /* type_specifier_nonarray: F32VEC2 */ -#line 1944 "MachineIndependent/glslang.y" + case 262: /* type_specifier_nonarray: F32VEC2 */ +#line 1998 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 7415 "MachineIndependent/glslang_tab.cpp" +#line 7889 "MachineIndependent/glslang_tab.cpp" break; - case 257: /* type_specifier_nonarray: F32VEC3 */ -#line 1950 "MachineIndependent/glslang.y" + case 263: /* type_specifier_nonarray: F32VEC3 */ +#line 2004 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 7426 "MachineIndependent/glslang_tab.cpp" +#line 7900 "MachineIndependent/glslang_tab.cpp" break; - case 258: /* type_specifier_nonarray: F32VEC4 */ -#line 1956 "MachineIndependent/glslang.y" + case 264: /* type_specifier_nonarray: F32VEC4 */ +#line 2010 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7437 "MachineIndependent/glslang_tab.cpp" +#line 7911 "MachineIndependent/glslang_tab.cpp" break; - case 259: /* type_specifier_nonarray: F64VEC2 */ -#line 1962 "MachineIndependent/glslang.y" + case 265: /* type_specifier_nonarray: F64VEC2 */ +#line 2016 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7448 "MachineIndependent/glslang_tab.cpp" +#line 7922 "MachineIndependent/glslang_tab.cpp" break; - case 260: /* type_specifier_nonarray: F64VEC3 */ -#line 1968 "MachineIndependent/glslang.y" + case 266: /* type_specifier_nonarray: F64VEC3 */ +#line 2022 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7459 "MachineIndependent/glslang_tab.cpp" +#line 7933 "MachineIndependent/glslang_tab.cpp" break; - case 261: /* type_specifier_nonarray: F64VEC4 */ -#line 1974 "MachineIndependent/glslang.y" + case 267: /* type_specifier_nonarray: F64VEC4 */ +#line 2028 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7470 "MachineIndependent/glslang_tab.cpp" +#line 7944 "MachineIndependent/glslang_tab.cpp" break; - case 262: /* type_specifier_nonarray: I8VEC2 */ -#line 1980 "MachineIndependent/glslang.y" + case 268: /* type_specifier_nonarray: I8VEC2 */ +#line 2034 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 7481 "MachineIndependent/glslang_tab.cpp" +#line 7955 "MachineIndependent/glslang_tab.cpp" break; - case 263: /* type_specifier_nonarray: I8VEC3 */ -#line 1986 "MachineIndependent/glslang.y" + case 269: /* type_specifier_nonarray: I8VEC3 */ +#line 2040 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 7492 "MachineIndependent/glslang_tab.cpp" +#line 7966 "MachineIndependent/glslang_tab.cpp" break; - case 264: /* type_specifier_nonarray: I8VEC4 */ -#line 1992 "MachineIndependent/glslang.y" + case 270: /* type_specifier_nonarray: I8VEC4 */ +#line 2046 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 7503 "MachineIndependent/glslang_tab.cpp" +#line 7977 "MachineIndependent/glslang_tab.cpp" break; - case 265: /* type_specifier_nonarray: I16VEC2 */ -#line 1998 "MachineIndependent/glslang.y" + case 271: /* type_specifier_nonarray: I16VEC2 */ +#line 2052 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 7514 "MachineIndependent/glslang_tab.cpp" +#line 7988 "MachineIndependent/glslang_tab.cpp" break; - case 266: /* type_specifier_nonarray: I16VEC3 */ -#line 2004 "MachineIndependent/glslang.y" + case 272: /* type_specifier_nonarray: I16VEC3 */ +#line 2058 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 7525 "MachineIndependent/glslang_tab.cpp" +#line 7999 "MachineIndependent/glslang_tab.cpp" break; - case 267: /* type_specifier_nonarray: I16VEC4 */ -#line 2010 "MachineIndependent/glslang.y" + case 273: /* type_specifier_nonarray: I16VEC4 */ +#line 2064 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 7536 "MachineIndependent/glslang_tab.cpp" +#line 8010 "MachineIndependent/glslang_tab.cpp" break; - case 268: /* type_specifier_nonarray: I32VEC2 */ -#line 2016 "MachineIndependent/glslang.y" + case 274: /* type_specifier_nonarray: I32VEC2 */ +#line 2070 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 7547 "MachineIndependent/glslang_tab.cpp" +#line 8021 "MachineIndependent/glslang_tab.cpp" break; - case 269: /* type_specifier_nonarray: I32VEC3 */ -#line 2022 "MachineIndependent/glslang.y" + case 275: /* type_specifier_nonarray: I32VEC3 */ +#line 2076 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 7558 "MachineIndependent/glslang_tab.cpp" +#line 8032 "MachineIndependent/glslang_tab.cpp" break; - case 270: /* type_specifier_nonarray: I32VEC4 */ -#line 2028 "MachineIndependent/glslang.y" + case 276: /* type_specifier_nonarray: I32VEC4 */ +#line 2082 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 7569 "MachineIndependent/glslang_tab.cpp" +#line 8043 "MachineIndependent/glslang_tab.cpp" break; - case 271: /* type_specifier_nonarray: I64VEC2 */ -#line 2034 "MachineIndependent/glslang.y" + case 277: /* type_specifier_nonarray: I64VEC2 */ +#line 2088 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 7580 "MachineIndependent/glslang_tab.cpp" +#line 8054 "MachineIndependent/glslang_tab.cpp" break; - case 272: /* type_specifier_nonarray: I64VEC3 */ -#line 2040 "MachineIndependent/glslang.y" + case 278: /* type_specifier_nonarray: I64VEC3 */ +#line 2094 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 7591 "MachineIndependent/glslang_tab.cpp" +#line 8065 "MachineIndependent/glslang_tab.cpp" break; - case 273: /* type_specifier_nonarray: I64VEC4 */ -#line 2046 "MachineIndependent/glslang.y" + case 279: /* type_specifier_nonarray: I64VEC4 */ +#line 2100 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 7602 "MachineIndependent/glslang_tab.cpp" +#line 8076 "MachineIndependent/glslang_tab.cpp" break; - case 274: /* type_specifier_nonarray: U8VEC2 */ -#line 2052 "MachineIndependent/glslang.y" + case 280: /* type_specifier_nonarray: U8VEC2 */ +#line 2106 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 7613 "MachineIndependent/glslang_tab.cpp" +#line 8087 "MachineIndependent/glslang_tab.cpp" break; - case 275: /* type_specifier_nonarray: U8VEC3 */ -#line 2058 "MachineIndependent/glslang.y" + case 281: /* type_specifier_nonarray: U8VEC3 */ +#line 2112 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 7624 "MachineIndependent/glslang_tab.cpp" +#line 8098 "MachineIndependent/glslang_tab.cpp" break; - case 276: /* type_specifier_nonarray: U8VEC4 */ -#line 2064 "MachineIndependent/glslang.y" + case 282: /* type_specifier_nonarray: U8VEC4 */ +#line 2118 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 7635 "MachineIndependent/glslang_tab.cpp" +#line 8109 "MachineIndependent/glslang_tab.cpp" break; - case 277: /* type_specifier_nonarray: U16VEC2 */ -#line 2070 "MachineIndependent/glslang.y" + case 283: /* type_specifier_nonarray: U16VEC2 */ +#line 2124 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 7646 "MachineIndependent/glslang_tab.cpp" +#line 8120 "MachineIndependent/glslang_tab.cpp" break; - case 278: /* type_specifier_nonarray: U16VEC3 */ -#line 2076 "MachineIndependent/glslang.y" + case 284: /* type_specifier_nonarray: U16VEC3 */ +#line 2130 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 7657 "MachineIndependent/glslang_tab.cpp" +#line 8131 "MachineIndependent/glslang_tab.cpp" break; - case 279: /* type_specifier_nonarray: U16VEC4 */ -#line 2082 "MachineIndependent/glslang.y" + case 285: /* type_specifier_nonarray: U16VEC4 */ +#line 2136 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 7668 "MachineIndependent/glslang_tab.cpp" +#line 8142 "MachineIndependent/glslang_tab.cpp" break; - case 280: /* type_specifier_nonarray: U32VEC2 */ -#line 2088 "MachineIndependent/glslang.y" + case 286: /* type_specifier_nonarray: U32VEC2 */ +#line 2142 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7679 "MachineIndependent/glslang_tab.cpp" +#line 8153 "MachineIndependent/glslang_tab.cpp" break; - case 281: /* type_specifier_nonarray: U32VEC3 */ -#line 2094 "MachineIndependent/glslang.y" + case 287: /* type_specifier_nonarray: U32VEC3 */ +#line 2148 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7690 "MachineIndependent/glslang_tab.cpp" +#line 8164 "MachineIndependent/glslang_tab.cpp" break; - case 282: /* type_specifier_nonarray: U32VEC4 */ -#line 2100 "MachineIndependent/glslang.y" + case 288: /* type_specifier_nonarray: U32VEC4 */ +#line 2154 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7701 "MachineIndependent/glslang_tab.cpp" +#line 8175 "MachineIndependent/glslang_tab.cpp" break; - case 283: /* type_specifier_nonarray: U64VEC2 */ -#line 2106 "MachineIndependent/glslang.y" + case 289: /* type_specifier_nonarray: U64VEC2 */ +#line 2160 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 7712 "MachineIndependent/glslang_tab.cpp" +#line 8186 "MachineIndependent/glslang_tab.cpp" break; - case 284: /* type_specifier_nonarray: U64VEC3 */ -#line 2112 "MachineIndependent/glslang.y" + case 290: /* type_specifier_nonarray: U64VEC3 */ +#line 2166 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 7723 "MachineIndependent/glslang_tab.cpp" +#line 8197 "MachineIndependent/glslang_tab.cpp" break; - case 285: /* type_specifier_nonarray: U64VEC4 */ -#line 2118 "MachineIndependent/glslang.y" + case 291: /* type_specifier_nonarray: U64VEC4 */ +#line 2172 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 7734 "MachineIndependent/glslang_tab.cpp" +#line 8208 "MachineIndependent/glslang_tab.cpp" break; - case 286: /* type_specifier_nonarray: DMAT2 */ -#line 2124 "MachineIndependent/glslang.y" + case 292: /* type_specifier_nonarray: DMAT2 */ +#line 2178 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7743,11 +8217,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7747 "MachineIndependent/glslang_tab.cpp" +#line 8221 "MachineIndependent/glslang_tab.cpp" break; - case 287: /* type_specifier_nonarray: DMAT3 */ -#line 2132 "MachineIndependent/glslang.y" + case 293: /* type_specifier_nonarray: DMAT3 */ +#line 2186 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7756,11 +8230,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7760 "MachineIndependent/glslang_tab.cpp" +#line 8234 "MachineIndependent/glslang_tab.cpp" break; - case 288: /* type_specifier_nonarray: DMAT4 */ -#line 2140 "MachineIndependent/glslang.y" + case 294: /* type_specifier_nonarray: DMAT4 */ +#line 2194 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7769,11 +8243,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7773 "MachineIndependent/glslang_tab.cpp" +#line 8247 "MachineIndependent/glslang_tab.cpp" break; - case 289: /* type_specifier_nonarray: DMAT2X2 */ -#line 2148 "MachineIndependent/glslang.y" + case 295: /* type_specifier_nonarray: DMAT2X2 */ +#line 2202 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7782,11 +8256,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 7786 "MachineIndependent/glslang_tab.cpp" +#line 8260 "MachineIndependent/glslang_tab.cpp" break; - case 290: /* type_specifier_nonarray: DMAT2X3 */ -#line 2156 "MachineIndependent/glslang.y" + case 296: /* type_specifier_nonarray: DMAT2X3 */ +#line 2210 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7795,11 +8269,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 7799 "MachineIndependent/glslang_tab.cpp" +#line 8273 "MachineIndependent/glslang_tab.cpp" break; - case 291: /* type_specifier_nonarray: DMAT2X4 */ -#line 2164 "MachineIndependent/glslang.y" + case 297: /* type_specifier_nonarray: DMAT2X4 */ +#line 2218 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7808,11 +8282,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 7812 "MachineIndependent/glslang_tab.cpp" +#line 8286 "MachineIndependent/glslang_tab.cpp" break; - case 292: /* type_specifier_nonarray: DMAT3X2 */ -#line 2172 "MachineIndependent/glslang.y" + case 298: /* type_specifier_nonarray: DMAT3X2 */ +#line 2226 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7821,11 +8295,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 7825 "MachineIndependent/glslang_tab.cpp" +#line 8299 "MachineIndependent/glslang_tab.cpp" break; - case 293: /* type_specifier_nonarray: DMAT3X3 */ -#line 2180 "MachineIndependent/glslang.y" + case 299: /* type_specifier_nonarray: DMAT3X3 */ +#line 2234 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7834,11 +8308,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 7838 "MachineIndependent/glslang_tab.cpp" +#line 8312 "MachineIndependent/glslang_tab.cpp" break; - case 294: /* type_specifier_nonarray: DMAT3X4 */ -#line 2188 "MachineIndependent/glslang.y" + case 300: /* type_specifier_nonarray: DMAT3X4 */ +#line 2242 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7847,11 +8321,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 7851 "MachineIndependent/glslang_tab.cpp" +#line 8325 "MachineIndependent/glslang_tab.cpp" break; - case 295: /* type_specifier_nonarray: DMAT4X2 */ -#line 2196 "MachineIndependent/glslang.y" + case 301: /* type_specifier_nonarray: DMAT4X2 */ +#line 2250 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7860,11 +8334,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 7864 "MachineIndependent/glslang_tab.cpp" +#line 8338 "MachineIndependent/glslang_tab.cpp" break; - case 296: /* type_specifier_nonarray: DMAT4X3 */ -#line 2204 "MachineIndependent/glslang.y" + case 302: /* type_specifier_nonarray: DMAT4X3 */ +#line 2258 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7873,11 +8347,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 7877 "MachineIndependent/glslang_tab.cpp" +#line 8351 "MachineIndependent/glslang_tab.cpp" break; - case 297: /* type_specifier_nonarray: DMAT4X4 */ -#line 2212 "MachineIndependent/glslang.y" + case 303: /* type_specifier_nonarray: DMAT4X4 */ +#line 2266 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7886,2228 +8360,2228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 7890 "MachineIndependent/glslang_tab.cpp" +#line 8364 "MachineIndependent/glslang_tab.cpp" break; - case 298: /* type_specifier_nonarray: F16MAT2 */ -#line 2220 "MachineIndependent/glslang.y" + case 304: /* type_specifier_nonarray: F16MAT2 */ +#line 2274 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7901 "MachineIndependent/glslang_tab.cpp" +#line 8375 "MachineIndependent/glslang_tab.cpp" break; - case 299: /* type_specifier_nonarray: F16MAT3 */ -#line 2226 "MachineIndependent/glslang.y" + case 305: /* type_specifier_nonarray: F16MAT3 */ +#line 2280 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7912 "MachineIndependent/glslang_tab.cpp" +#line 8386 "MachineIndependent/glslang_tab.cpp" break; - case 300: /* type_specifier_nonarray: F16MAT4 */ -#line 2232 "MachineIndependent/glslang.y" + case 306: /* type_specifier_nonarray: F16MAT4 */ +#line 2286 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 7923 "MachineIndependent/glslang_tab.cpp" +#line 8397 "MachineIndependent/glslang_tab.cpp" break; - case 301: /* type_specifier_nonarray: F16MAT2X2 */ -#line 2238 "MachineIndependent/glslang.y" + case 307: /* type_specifier_nonarray: F16MAT2X2 */ +#line 2292 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 7934 "MachineIndependent/glslang_tab.cpp" +#line 8408 "MachineIndependent/glslang_tab.cpp" break; - case 302: /* type_specifier_nonarray: F16MAT2X3 */ -#line 2244 "MachineIndependent/glslang.y" + case 308: /* type_specifier_nonarray: F16MAT2X3 */ +#line 2298 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 7945 "MachineIndependent/glslang_tab.cpp" +#line 8419 "MachineIndependent/glslang_tab.cpp" break; - case 303: /* type_specifier_nonarray: F16MAT2X4 */ -#line 2250 "MachineIndependent/glslang.y" + case 309: /* type_specifier_nonarray: F16MAT2X4 */ +#line 2304 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 7956 "MachineIndependent/glslang_tab.cpp" +#line 8430 "MachineIndependent/glslang_tab.cpp" break; - case 304: /* type_specifier_nonarray: F16MAT3X2 */ -#line 2256 "MachineIndependent/glslang.y" + case 310: /* type_specifier_nonarray: F16MAT3X2 */ +#line 2310 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 7967 "MachineIndependent/glslang_tab.cpp" +#line 8441 "MachineIndependent/glslang_tab.cpp" break; - case 305: /* type_specifier_nonarray: F16MAT3X3 */ -#line 2262 "MachineIndependent/glslang.y" + case 311: /* type_specifier_nonarray: F16MAT3X3 */ +#line 2316 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 7978 "MachineIndependent/glslang_tab.cpp" +#line 8452 "MachineIndependent/glslang_tab.cpp" break; - case 306: /* type_specifier_nonarray: F16MAT3X4 */ -#line 2268 "MachineIndependent/glslang.y" + case 312: /* type_specifier_nonarray: F16MAT3X4 */ +#line 2322 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 7989 "MachineIndependent/glslang_tab.cpp" +#line 8463 "MachineIndependent/glslang_tab.cpp" break; - case 307: /* type_specifier_nonarray: F16MAT4X2 */ -#line 2274 "MachineIndependent/glslang.y" + case 313: /* type_specifier_nonarray: F16MAT4X2 */ +#line 2328 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 8000 "MachineIndependent/glslang_tab.cpp" +#line 8474 "MachineIndependent/glslang_tab.cpp" break; - case 308: /* type_specifier_nonarray: F16MAT4X3 */ -#line 2280 "MachineIndependent/glslang.y" + case 314: /* type_specifier_nonarray: F16MAT4X3 */ +#line 2334 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 8011 "MachineIndependent/glslang_tab.cpp" +#line 8485 "MachineIndependent/glslang_tab.cpp" break; - case 309: /* type_specifier_nonarray: F16MAT4X4 */ -#line 2286 "MachineIndependent/glslang.y" + case 315: /* type_specifier_nonarray: F16MAT4X4 */ +#line 2340 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 8022 "MachineIndependent/glslang_tab.cpp" +#line 8496 "MachineIndependent/glslang_tab.cpp" break; - case 310: /* type_specifier_nonarray: F32MAT2 */ -#line 2292 "MachineIndependent/glslang.y" + case 316: /* type_specifier_nonarray: F32MAT2 */ +#line 2346 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 8033 "MachineIndependent/glslang_tab.cpp" +#line 8507 "MachineIndependent/glslang_tab.cpp" break; - case 311: /* type_specifier_nonarray: F32MAT3 */ -#line 2298 "MachineIndependent/glslang.y" + case 317: /* type_specifier_nonarray: F32MAT3 */ +#line 2352 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 8044 "MachineIndependent/glslang_tab.cpp" +#line 8518 "MachineIndependent/glslang_tab.cpp" break; - case 312: /* type_specifier_nonarray: F32MAT4 */ -#line 2304 "MachineIndependent/glslang.y" + case 318: /* type_specifier_nonarray: F32MAT4 */ +#line 2358 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 8055 "MachineIndependent/glslang_tab.cpp" +#line 8529 "MachineIndependent/glslang_tab.cpp" break; - case 313: /* type_specifier_nonarray: F32MAT2X2 */ -#line 2310 "MachineIndependent/glslang.y" + case 319: /* type_specifier_nonarray: F32MAT2X2 */ +#line 2364 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 8066 "MachineIndependent/glslang_tab.cpp" +#line 8540 "MachineIndependent/glslang_tab.cpp" break; - case 314: /* type_specifier_nonarray: F32MAT2X3 */ -#line 2316 "MachineIndependent/glslang.y" + case 320: /* type_specifier_nonarray: F32MAT2X3 */ +#line 2370 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 8077 "MachineIndependent/glslang_tab.cpp" +#line 8551 "MachineIndependent/glslang_tab.cpp" break; - case 315: /* type_specifier_nonarray: F32MAT2X4 */ -#line 2322 "MachineIndependent/glslang.y" + case 321: /* type_specifier_nonarray: F32MAT2X4 */ +#line 2376 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 8088 "MachineIndependent/glslang_tab.cpp" +#line 8562 "MachineIndependent/glslang_tab.cpp" break; - case 316: /* type_specifier_nonarray: F32MAT3X2 */ -#line 2328 "MachineIndependent/glslang.y" + case 322: /* type_specifier_nonarray: F32MAT3X2 */ +#line 2382 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 8099 "MachineIndependent/glslang_tab.cpp" +#line 8573 "MachineIndependent/glslang_tab.cpp" break; - case 317: /* type_specifier_nonarray: F32MAT3X3 */ -#line 2334 "MachineIndependent/glslang.y" + case 323: /* type_specifier_nonarray: F32MAT3X3 */ +#line 2388 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 8110 "MachineIndependent/glslang_tab.cpp" +#line 8584 "MachineIndependent/glslang_tab.cpp" break; - case 318: /* type_specifier_nonarray: F32MAT3X4 */ -#line 2340 "MachineIndependent/glslang.y" + case 324: /* type_specifier_nonarray: F32MAT3X4 */ +#line 2394 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 8121 "MachineIndependent/glslang_tab.cpp" +#line 8595 "MachineIndependent/glslang_tab.cpp" break; - case 319: /* type_specifier_nonarray: F32MAT4X2 */ -#line 2346 "MachineIndependent/glslang.y" + case 325: /* type_specifier_nonarray: F32MAT4X2 */ +#line 2400 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 8132 "MachineIndependent/glslang_tab.cpp" +#line 8606 "MachineIndependent/glslang_tab.cpp" break; - case 320: /* type_specifier_nonarray: F32MAT4X3 */ -#line 2352 "MachineIndependent/glslang.y" + case 326: /* type_specifier_nonarray: F32MAT4X3 */ +#line 2406 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 8143 "MachineIndependent/glslang_tab.cpp" +#line 8617 "MachineIndependent/glslang_tab.cpp" break; - case 321: /* type_specifier_nonarray: F32MAT4X4 */ -#line 2358 "MachineIndependent/glslang.y" + case 327: /* type_specifier_nonarray: F32MAT4X4 */ +#line 2412 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 8154 "MachineIndependent/glslang_tab.cpp" +#line 8628 "MachineIndependent/glslang_tab.cpp" break; - case 322: /* type_specifier_nonarray: F64MAT2 */ -#line 2364 "MachineIndependent/glslang.y" + case 328: /* type_specifier_nonarray: F64MAT2 */ +#line 2418 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8165 "MachineIndependent/glslang_tab.cpp" +#line 8639 "MachineIndependent/glslang_tab.cpp" break; - case 323: /* type_specifier_nonarray: F64MAT3 */ -#line 2370 "MachineIndependent/glslang.y" + case 329: /* type_specifier_nonarray: F64MAT3 */ +#line 2424 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8176 "MachineIndependent/glslang_tab.cpp" +#line 8650 "MachineIndependent/glslang_tab.cpp" break; - case 324: /* type_specifier_nonarray: F64MAT4 */ -#line 2376 "MachineIndependent/glslang.y" + case 330: /* type_specifier_nonarray: F64MAT4 */ +#line 2430 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8187 "MachineIndependent/glslang_tab.cpp" +#line 8661 "MachineIndependent/glslang_tab.cpp" break; - case 325: /* type_specifier_nonarray: F64MAT2X2 */ -#line 2382 "MachineIndependent/glslang.y" + case 331: /* type_specifier_nonarray: F64MAT2X2 */ +#line 2436 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8198 "MachineIndependent/glslang_tab.cpp" +#line 8672 "MachineIndependent/glslang_tab.cpp" break; - case 326: /* type_specifier_nonarray: F64MAT2X3 */ -#line 2388 "MachineIndependent/glslang.y" + case 332: /* type_specifier_nonarray: F64MAT2X3 */ +#line 2442 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8209 "MachineIndependent/glslang_tab.cpp" +#line 8683 "MachineIndependent/glslang_tab.cpp" break; - case 327: /* type_specifier_nonarray: F64MAT2X4 */ -#line 2394 "MachineIndependent/glslang.y" + case 333: /* type_specifier_nonarray: F64MAT2X4 */ +#line 2448 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8220 "MachineIndependent/glslang_tab.cpp" +#line 8694 "MachineIndependent/glslang_tab.cpp" break; - case 328: /* type_specifier_nonarray: F64MAT3X2 */ -#line 2400 "MachineIndependent/glslang.y" + case 334: /* type_specifier_nonarray: F64MAT3X2 */ +#line 2454 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8231 "MachineIndependent/glslang_tab.cpp" +#line 8705 "MachineIndependent/glslang_tab.cpp" break; - case 329: /* type_specifier_nonarray: F64MAT3X3 */ -#line 2406 "MachineIndependent/glslang.y" + case 335: /* type_specifier_nonarray: F64MAT3X3 */ +#line 2460 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8242 "MachineIndependent/glslang_tab.cpp" +#line 8716 "MachineIndependent/glslang_tab.cpp" break; - case 330: /* type_specifier_nonarray: F64MAT3X4 */ -#line 2412 "MachineIndependent/glslang.y" + case 336: /* type_specifier_nonarray: F64MAT3X4 */ +#line 2466 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8253 "MachineIndependent/glslang_tab.cpp" +#line 8727 "MachineIndependent/glslang_tab.cpp" break; - case 331: /* type_specifier_nonarray: F64MAT4X2 */ -#line 2418 "MachineIndependent/glslang.y" + case 337: /* type_specifier_nonarray: F64MAT4X2 */ +#line 2472 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8264 "MachineIndependent/glslang_tab.cpp" +#line 8738 "MachineIndependent/glslang_tab.cpp" break; - case 332: /* type_specifier_nonarray: F64MAT4X3 */ -#line 2424 "MachineIndependent/glslang.y" + case 338: /* type_specifier_nonarray: F64MAT4X3 */ +#line 2478 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8275 "MachineIndependent/glslang_tab.cpp" +#line 8749 "MachineIndependent/glslang_tab.cpp" break; - case 333: /* type_specifier_nonarray: F64MAT4X4 */ -#line 2430 "MachineIndependent/glslang.y" + case 339: /* type_specifier_nonarray: F64MAT4X4 */ +#line 2484 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8286 "MachineIndependent/glslang_tab.cpp" +#line 8760 "MachineIndependent/glslang_tab.cpp" break; - case 334: /* type_specifier_nonarray: ACCSTRUCTNV */ -#line 2436 "MachineIndependent/glslang.y" + case 340: /* type_specifier_nonarray: ACCSTRUCTNV */ +#line 2490 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8295 "MachineIndependent/glslang_tab.cpp" +#line 8769 "MachineIndependent/glslang_tab.cpp" break; - case 335: /* type_specifier_nonarray: ACCSTRUCTEXT */ -#line 2440 "MachineIndependent/glslang.y" + case 341: /* type_specifier_nonarray: ACCSTRUCTEXT */ +#line 2494 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8304 "MachineIndependent/glslang_tab.cpp" +#line 8778 "MachineIndependent/glslang_tab.cpp" break; - case 336: /* type_specifier_nonarray: RAYQUERYEXT */ -#line 2444 "MachineIndependent/glslang.y" + case 342: /* type_specifier_nonarray: RAYQUERYEXT */ +#line 2498 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 8313 "MachineIndependent/glslang_tab.cpp" +#line 8787 "MachineIndependent/glslang_tab.cpp" break; - case 337: /* type_specifier_nonarray: ATOMIC_UINT */ -#line 2448 "MachineIndependent/glslang.y" + case 343: /* type_specifier_nonarray: ATOMIC_UINT */ +#line 2502 "MachineIndependent/glslang.y" { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 8323 "MachineIndependent/glslang_tab.cpp" +#line 8797 "MachineIndependent/glslang_tab.cpp" break; - case 338: /* type_specifier_nonarray: SAMPLER1D */ -#line 2453 "MachineIndependent/glslang.y" + case 344: /* type_specifier_nonarray: SAMPLER1D */ +#line 2507 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 8333 "MachineIndependent/glslang_tab.cpp" +#line 8807 "MachineIndependent/glslang_tab.cpp" break; - case 339: /* type_specifier_nonarray: SAMPLER2D */ -#line 2459 "MachineIndependent/glslang.y" + case 345: /* type_specifier_nonarray: SAMPLER2D */ +#line 2513 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 8343 "MachineIndependent/glslang_tab.cpp" +#line 8817 "MachineIndependent/glslang_tab.cpp" break; - case 340: /* type_specifier_nonarray: SAMPLER3D */ -#line 2464 "MachineIndependent/glslang.y" + case 346: /* type_specifier_nonarray: SAMPLER3D */ +#line 2518 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 8353 "MachineIndependent/glslang_tab.cpp" +#line 8827 "MachineIndependent/glslang_tab.cpp" break; - case 341: /* type_specifier_nonarray: SAMPLERCUBE */ -#line 2469 "MachineIndependent/glslang.y" + case 347: /* type_specifier_nonarray: SAMPLERCUBE */ +#line 2523 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 8363 "MachineIndependent/glslang_tab.cpp" +#line 8837 "MachineIndependent/glslang_tab.cpp" break; - case 342: /* type_specifier_nonarray: SAMPLER2DSHADOW */ -#line 2474 "MachineIndependent/glslang.y" + case 348: /* type_specifier_nonarray: SAMPLER2DSHADOW */ +#line 2528 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 8373 "MachineIndependent/glslang_tab.cpp" +#line 8847 "MachineIndependent/glslang_tab.cpp" break; - case 343: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ -#line 2479 "MachineIndependent/glslang.y" + case 349: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ +#line 2533 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 8383 "MachineIndependent/glslang_tab.cpp" +#line 8857 "MachineIndependent/glslang_tab.cpp" break; - case 344: /* type_specifier_nonarray: SAMPLER2DARRAY */ -#line 2484 "MachineIndependent/glslang.y" + case 350: /* type_specifier_nonarray: SAMPLER2DARRAY */ +#line 2538 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 8393 "MachineIndependent/glslang_tab.cpp" +#line 8867 "MachineIndependent/glslang_tab.cpp" break; - case 345: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ -#line 2489 "MachineIndependent/glslang.y" + case 351: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ +#line 2543 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 8403 "MachineIndependent/glslang_tab.cpp" +#line 8877 "MachineIndependent/glslang_tab.cpp" break; - case 346: /* type_specifier_nonarray: SAMPLER1DSHADOW */ -#line 2495 "MachineIndependent/glslang.y" + case 352: /* type_specifier_nonarray: SAMPLER1DSHADOW */ +#line 2549 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 8413 "MachineIndependent/glslang_tab.cpp" +#line 8887 "MachineIndependent/glslang_tab.cpp" break; - case 347: /* type_specifier_nonarray: SAMPLER1DARRAY */ -#line 2500 "MachineIndependent/glslang.y" + case 353: /* type_specifier_nonarray: SAMPLER1DARRAY */ +#line 2554 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 8423 "MachineIndependent/glslang_tab.cpp" +#line 8897 "MachineIndependent/glslang_tab.cpp" break; - case 348: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ -#line 2505 "MachineIndependent/glslang.y" + case 354: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ +#line 2559 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 8433 "MachineIndependent/glslang_tab.cpp" +#line 8907 "MachineIndependent/glslang_tab.cpp" break; - case 349: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ -#line 2510 "MachineIndependent/glslang.y" + case 355: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ +#line 2564 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 8443 "MachineIndependent/glslang_tab.cpp" +#line 8917 "MachineIndependent/glslang_tab.cpp" break; - case 350: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ -#line 2515 "MachineIndependent/glslang.y" + case 356: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ +#line 2569 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 8453 "MachineIndependent/glslang_tab.cpp" +#line 8927 "MachineIndependent/glslang_tab.cpp" break; - case 351: /* type_specifier_nonarray: F16SAMPLER1D */ -#line 2520 "MachineIndependent/glslang.y" + case 357: /* type_specifier_nonarray: F16SAMPLER1D */ +#line 2574 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 8464 "MachineIndependent/glslang_tab.cpp" +#line 8938 "MachineIndependent/glslang_tab.cpp" break; - case 352: /* type_specifier_nonarray: F16SAMPLER2D */ -#line 2526 "MachineIndependent/glslang.y" + case 358: /* type_specifier_nonarray: F16SAMPLER2D */ +#line 2580 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 8475 "MachineIndependent/glslang_tab.cpp" +#line 8949 "MachineIndependent/glslang_tab.cpp" break; - case 353: /* type_specifier_nonarray: F16SAMPLER3D */ -#line 2532 "MachineIndependent/glslang.y" + case 359: /* type_specifier_nonarray: F16SAMPLER3D */ +#line 2586 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 8486 "MachineIndependent/glslang_tab.cpp" +#line 8960 "MachineIndependent/glslang_tab.cpp" break; - case 354: /* type_specifier_nonarray: F16SAMPLERCUBE */ -#line 2538 "MachineIndependent/glslang.y" + case 360: /* type_specifier_nonarray: F16SAMPLERCUBE */ +#line 2592 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 8497 "MachineIndependent/glslang_tab.cpp" +#line 8971 "MachineIndependent/glslang_tab.cpp" break; - case 355: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ -#line 2544 "MachineIndependent/glslang.y" + case 361: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ +#line 2598 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 8508 "MachineIndependent/glslang_tab.cpp" +#line 8982 "MachineIndependent/glslang_tab.cpp" break; - case 356: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ -#line 2550 "MachineIndependent/glslang.y" + case 362: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ +#line 2604 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 8519 "MachineIndependent/glslang_tab.cpp" +#line 8993 "MachineIndependent/glslang_tab.cpp" break; - case 357: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ -#line 2556 "MachineIndependent/glslang.y" + case 363: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ +#line 2610 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 8530 "MachineIndependent/glslang_tab.cpp" +#line 9004 "MachineIndependent/glslang_tab.cpp" break; - case 358: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ -#line 2562 "MachineIndependent/glslang.y" + case 364: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ +#line 2616 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 8541 "MachineIndependent/glslang_tab.cpp" +#line 9015 "MachineIndependent/glslang_tab.cpp" break; - case 359: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ -#line 2568 "MachineIndependent/glslang.y" + case 365: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ +#line 2622 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 8552 "MachineIndependent/glslang_tab.cpp" +#line 9026 "MachineIndependent/glslang_tab.cpp" break; - case 360: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ -#line 2574 "MachineIndependent/glslang.y" + case 366: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ +#line 2628 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 8563 "MachineIndependent/glslang_tab.cpp" +#line 9037 "MachineIndependent/glslang_tab.cpp" break; - case 361: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ -#line 2580 "MachineIndependent/glslang.y" + case 367: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ +#line 2634 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 8574 "MachineIndependent/glslang_tab.cpp" +#line 9048 "MachineIndependent/glslang_tab.cpp" break; - case 362: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ -#line 2586 "MachineIndependent/glslang.y" + case 368: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ +#line 2640 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 8585 "MachineIndependent/glslang_tab.cpp" +#line 9059 "MachineIndependent/glslang_tab.cpp" break; - case 363: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ -#line 2592 "MachineIndependent/glslang.y" + case 369: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ +#line 2646 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 8596 "MachineIndependent/glslang_tab.cpp" +#line 9070 "MachineIndependent/glslang_tab.cpp" break; - case 364: /* type_specifier_nonarray: ISAMPLER1D */ -#line 2598 "MachineIndependent/glslang.y" + case 370: /* type_specifier_nonarray: ISAMPLER1D */ +#line 2652 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 8606 "MachineIndependent/glslang_tab.cpp" +#line 9080 "MachineIndependent/glslang_tab.cpp" break; - case 365: /* type_specifier_nonarray: ISAMPLER2D */ -#line 2604 "MachineIndependent/glslang.y" + case 371: /* type_specifier_nonarray: ISAMPLER2D */ +#line 2658 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 8616 "MachineIndependent/glslang_tab.cpp" +#line 9090 "MachineIndependent/glslang_tab.cpp" break; - case 366: /* type_specifier_nonarray: ISAMPLER3D */ -#line 2609 "MachineIndependent/glslang.y" + case 372: /* type_specifier_nonarray: ISAMPLER3D */ +#line 2663 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 8626 "MachineIndependent/glslang_tab.cpp" +#line 9100 "MachineIndependent/glslang_tab.cpp" break; - case 367: /* type_specifier_nonarray: ISAMPLERCUBE */ -#line 2614 "MachineIndependent/glslang.y" + case 373: /* type_specifier_nonarray: ISAMPLERCUBE */ +#line 2668 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 8636 "MachineIndependent/glslang_tab.cpp" +#line 9110 "MachineIndependent/glslang_tab.cpp" break; - case 368: /* type_specifier_nonarray: ISAMPLER2DARRAY */ -#line 2619 "MachineIndependent/glslang.y" + case 374: /* type_specifier_nonarray: ISAMPLER2DARRAY */ +#line 2673 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 8646 "MachineIndependent/glslang_tab.cpp" +#line 9120 "MachineIndependent/glslang_tab.cpp" break; - case 369: /* type_specifier_nonarray: USAMPLER2D */ -#line 2624 "MachineIndependent/glslang.y" + case 375: /* type_specifier_nonarray: USAMPLER2D */ +#line 2678 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 8656 "MachineIndependent/glslang_tab.cpp" +#line 9130 "MachineIndependent/glslang_tab.cpp" break; - case 370: /* type_specifier_nonarray: USAMPLER3D */ -#line 2629 "MachineIndependent/glslang.y" + case 376: /* type_specifier_nonarray: USAMPLER3D */ +#line 2683 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 8666 "MachineIndependent/glslang_tab.cpp" +#line 9140 "MachineIndependent/glslang_tab.cpp" break; - case 371: /* type_specifier_nonarray: USAMPLERCUBE */ -#line 2634 "MachineIndependent/glslang.y" + case 377: /* type_specifier_nonarray: USAMPLERCUBE */ +#line 2688 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 8676 "MachineIndependent/glslang_tab.cpp" +#line 9150 "MachineIndependent/glslang_tab.cpp" break; - case 372: /* type_specifier_nonarray: ISAMPLER1DARRAY */ -#line 2640 "MachineIndependent/glslang.y" + case 378: /* type_specifier_nonarray: ISAMPLER1DARRAY */ +#line 2694 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 8686 "MachineIndependent/glslang_tab.cpp" +#line 9160 "MachineIndependent/glslang_tab.cpp" break; - case 373: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ -#line 2645 "MachineIndependent/glslang.y" + case 379: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ +#line 2699 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 8696 "MachineIndependent/glslang_tab.cpp" +#line 9170 "MachineIndependent/glslang_tab.cpp" break; - case 374: /* type_specifier_nonarray: USAMPLER1D */ -#line 2650 "MachineIndependent/glslang.y" + case 380: /* type_specifier_nonarray: USAMPLER1D */ +#line 2704 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 8706 "MachineIndependent/glslang_tab.cpp" +#line 9180 "MachineIndependent/glslang_tab.cpp" break; - case 375: /* type_specifier_nonarray: USAMPLER1DARRAY */ -#line 2655 "MachineIndependent/glslang.y" + case 381: /* type_specifier_nonarray: USAMPLER1DARRAY */ +#line 2709 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 8716 "MachineIndependent/glslang_tab.cpp" +#line 9190 "MachineIndependent/glslang_tab.cpp" break; - case 376: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ -#line 2660 "MachineIndependent/glslang.y" + case 382: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ +#line 2714 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 8726 "MachineIndependent/glslang_tab.cpp" +#line 9200 "MachineIndependent/glslang_tab.cpp" break; - case 377: /* type_specifier_nonarray: TEXTURECUBEARRAY */ -#line 2665 "MachineIndependent/glslang.y" + case 383: /* type_specifier_nonarray: TEXTURECUBEARRAY */ +#line 2719 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 8736 "MachineIndependent/glslang_tab.cpp" +#line 9210 "MachineIndependent/glslang_tab.cpp" break; - case 378: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ -#line 2670 "MachineIndependent/glslang.y" + case 384: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ +#line 2724 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 8746 "MachineIndependent/glslang_tab.cpp" +#line 9220 "MachineIndependent/glslang_tab.cpp" break; - case 379: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ -#line 2675 "MachineIndependent/glslang.y" + case 385: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ +#line 2729 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 8756 "MachineIndependent/glslang_tab.cpp" +#line 9230 "MachineIndependent/glslang_tab.cpp" break; - case 380: /* type_specifier_nonarray: USAMPLER2DARRAY */ -#line 2681 "MachineIndependent/glslang.y" + case 386: /* type_specifier_nonarray: USAMPLER2DARRAY */ +#line 2735 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 8766 "MachineIndependent/glslang_tab.cpp" +#line 9240 "MachineIndependent/glslang_tab.cpp" break; - case 381: /* type_specifier_nonarray: TEXTURE2D */ -#line 2686 "MachineIndependent/glslang.y" + case 387: /* type_specifier_nonarray: TEXTURE2D */ +#line 2740 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 8776 "MachineIndependent/glslang_tab.cpp" +#line 9250 "MachineIndependent/glslang_tab.cpp" break; - case 382: /* type_specifier_nonarray: TEXTURE3D */ -#line 2691 "MachineIndependent/glslang.y" + case 388: /* type_specifier_nonarray: TEXTURE3D */ +#line 2745 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 8786 "MachineIndependent/glslang_tab.cpp" +#line 9260 "MachineIndependent/glslang_tab.cpp" break; - case 383: /* type_specifier_nonarray: TEXTURE2DARRAY */ -#line 2696 "MachineIndependent/glslang.y" + case 389: /* type_specifier_nonarray: TEXTURE2DARRAY */ +#line 2750 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 8796 "MachineIndependent/glslang_tab.cpp" +#line 9270 "MachineIndependent/glslang_tab.cpp" break; - case 384: /* type_specifier_nonarray: TEXTURECUBE */ -#line 2701 "MachineIndependent/glslang.y" + case 390: /* type_specifier_nonarray: TEXTURECUBE */ +#line 2755 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 8806 "MachineIndependent/glslang_tab.cpp" +#line 9280 "MachineIndependent/glslang_tab.cpp" break; - case 385: /* type_specifier_nonarray: ITEXTURE2D */ -#line 2706 "MachineIndependent/glslang.y" + case 391: /* type_specifier_nonarray: ITEXTURE2D */ +#line 2760 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 8816 "MachineIndependent/glslang_tab.cpp" +#line 9290 "MachineIndependent/glslang_tab.cpp" break; - case 386: /* type_specifier_nonarray: ITEXTURE3D */ -#line 2711 "MachineIndependent/glslang.y" + case 392: /* type_specifier_nonarray: ITEXTURE3D */ +#line 2765 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 8826 "MachineIndependent/glslang_tab.cpp" +#line 9300 "MachineIndependent/glslang_tab.cpp" break; - case 387: /* type_specifier_nonarray: ITEXTURECUBE */ -#line 2716 "MachineIndependent/glslang.y" + case 393: /* type_specifier_nonarray: ITEXTURECUBE */ +#line 2770 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 8836 "MachineIndependent/glslang_tab.cpp" +#line 9310 "MachineIndependent/glslang_tab.cpp" break; - case 388: /* type_specifier_nonarray: ITEXTURE2DARRAY */ -#line 2721 "MachineIndependent/glslang.y" + case 394: /* type_specifier_nonarray: ITEXTURE2DARRAY */ +#line 2775 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 8846 "MachineIndependent/glslang_tab.cpp" +#line 9320 "MachineIndependent/glslang_tab.cpp" break; - case 389: /* type_specifier_nonarray: UTEXTURE2D */ -#line 2726 "MachineIndependent/glslang.y" + case 395: /* type_specifier_nonarray: UTEXTURE2D */ +#line 2780 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 8856 "MachineIndependent/glslang_tab.cpp" +#line 9330 "MachineIndependent/glslang_tab.cpp" break; - case 390: /* type_specifier_nonarray: UTEXTURE3D */ -#line 2731 "MachineIndependent/glslang.y" + case 396: /* type_specifier_nonarray: UTEXTURE3D */ +#line 2785 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 8866 "MachineIndependent/glslang_tab.cpp" +#line 9340 "MachineIndependent/glslang_tab.cpp" break; - case 391: /* type_specifier_nonarray: UTEXTURECUBE */ -#line 2736 "MachineIndependent/glslang.y" + case 397: /* type_specifier_nonarray: UTEXTURECUBE */ +#line 2790 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 8876 "MachineIndependent/glslang_tab.cpp" +#line 9350 "MachineIndependent/glslang_tab.cpp" break; - case 392: /* type_specifier_nonarray: UTEXTURE2DARRAY */ -#line 2741 "MachineIndependent/glslang.y" + case 398: /* type_specifier_nonarray: UTEXTURE2DARRAY */ +#line 2795 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 8886 "MachineIndependent/glslang_tab.cpp" +#line 9360 "MachineIndependent/glslang_tab.cpp" break; - case 393: /* type_specifier_nonarray: SAMPLER */ -#line 2746 "MachineIndependent/glslang.y" + case 399: /* type_specifier_nonarray: SAMPLER */ +#line 2800 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 8896 "MachineIndependent/glslang_tab.cpp" +#line 9370 "MachineIndependent/glslang_tab.cpp" break; - case 394: /* type_specifier_nonarray: SAMPLERSHADOW */ -#line 2751 "MachineIndependent/glslang.y" + case 400: /* type_specifier_nonarray: SAMPLERSHADOW */ +#line 2805 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 8906 "MachineIndependent/glslang_tab.cpp" +#line 9380 "MachineIndependent/glslang_tab.cpp" break; - case 395: /* type_specifier_nonarray: SAMPLER2DRECT */ -#line 2757 "MachineIndependent/glslang.y" + case 401: /* type_specifier_nonarray: SAMPLER2DRECT */ +#line 2811 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 8916 "MachineIndependent/glslang_tab.cpp" +#line 9390 "MachineIndependent/glslang_tab.cpp" break; - case 396: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ -#line 2762 "MachineIndependent/glslang.y" + case 402: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ +#line 2816 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 8926 "MachineIndependent/glslang_tab.cpp" +#line 9400 "MachineIndependent/glslang_tab.cpp" break; - case 397: /* type_specifier_nonarray: F16SAMPLER2DRECT */ -#line 2767 "MachineIndependent/glslang.y" + case 403: /* type_specifier_nonarray: F16SAMPLER2DRECT */ +#line 2821 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 8937 "MachineIndependent/glslang_tab.cpp" +#line 9411 "MachineIndependent/glslang_tab.cpp" break; - case 398: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ -#line 2773 "MachineIndependent/glslang.y" + case 404: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ +#line 2827 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 8948 "MachineIndependent/glslang_tab.cpp" +#line 9422 "MachineIndependent/glslang_tab.cpp" break; - case 399: /* type_specifier_nonarray: ISAMPLER2DRECT */ -#line 2779 "MachineIndependent/glslang.y" + case 405: /* type_specifier_nonarray: ISAMPLER2DRECT */ +#line 2833 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 8958 "MachineIndependent/glslang_tab.cpp" +#line 9432 "MachineIndependent/glslang_tab.cpp" break; - case 400: /* type_specifier_nonarray: USAMPLER2DRECT */ -#line 2784 "MachineIndependent/glslang.y" + case 406: /* type_specifier_nonarray: USAMPLER2DRECT */ +#line 2838 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 8968 "MachineIndependent/glslang_tab.cpp" +#line 9442 "MachineIndependent/glslang_tab.cpp" break; - case 401: /* type_specifier_nonarray: SAMPLERBUFFER */ -#line 2789 "MachineIndependent/glslang.y" + case 407: /* type_specifier_nonarray: SAMPLERBUFFER */ +#line 2843 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 8978 "MachineIndependent/glslang_tab.cpp" +#line 9452 "MachineIndependent/glslang_tab.cpp" break; - case 402: /* type_specifier_nonarray: F16SAMPLERBUFFER */ -#line 2794 "MachineIndependent/glslang.y" + case 408: /* type_specifier_nonarray: F16SAMPLERBUFFER */ +#line 2848 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 8989 "MachineIndependent/glslang_tab.cpp" +#line 9463 "MachineIndependent/glslang_tab.cpp" break; - case 403: /* type_specifier_nonarray: ISAMPLERBUFFER */ -#line 2800 "MachineIndependent/glslang.y" + case 409: /* type_specifier_nonarray: ISAMPLERBUFFER */ +#line 2854 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 8999 "MachineIndependent/glslang_tab.cpp" +#line 9473 "MachineIndependent/glslang_tab.cpp" break; - case 404: /* type_specifier_nonarray: USAMPLERBUFFER */ -#line 2805 "MachineIndependent/glslang.y" + case 410: /* type_specifier_nonarray: USAMPLERBUFFER */ +#line 2859 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 9009 "MachineIndependent/glslang_tab.cpp" +#line 9483 "MachineIndependent/glslang_tab.cpp" break; - case 405: /* type_specifier_nonarray: SAMPLER2DMS */ -#line 2810 "MachineIndependent/glslang.y" + case 411: /* type_specifier_nonarray: SAMPLER2DMS */ +#line 2864 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 9019 "MachineIndependent/glslang_tab.cpp" +#line 9493 "MachineIndependent/glslang_tab.cpp" break; - case 406: /* type_specifier_nonarray: F16SAMPLER2DMS */ -#line 2815 "MachineIndependent/glslang.y" + case 412: /* type_specifier_nonarray: F16SAMPLER2DMS */ +#line 2869 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 9030 "MachineIndependent/glslang_tab.cpp" +#line 9504 "MachineIndependent/glslang_tab.cpp" break; - case 407: /* type_specifier_nonarray: ISAMPLER2DMS */ -#line 2821 "MachineIndependent/glslang.y" + case 413: /* type_specifier_nonarray: ISAMPLER2DMS */ +#line 2875 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 9040 "MachineIndependent/glslang_tab.cpp" +#line 9514 "MachineIndependent/glslang_tab.cpp" break; - case 408: /* type_specifier_nonarray: USAMPLER2DMS */ -#line 2826 "MachineIndependent/glslang.y" + case 414: /* type_specifier_nonarray: USAMPLER2DMS */ +#line 2880 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 9050 "MachineIndependent/glslang_tab.cpp" +#line 9524 "MachineIndependent/glslang_tab.cpp" break; - case 409: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ -#line 2831 "MachineIndependent/glslang.y" + case 415: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ +#line 2885 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 9060 "MachineIndependent/glslang_tab.cpp" +#line 9534 "MachineIndependent/glslang_tab.cpp" break; - case 410: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ -#line 2836 "MachineIndependent/glslang.y" + case 416: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ +#line 2890 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 9071 "MachineIndependent/glslang_tab.cpp" +#line 9545 "MachineIndependent/glslang_tab.cpp" break; - case 411: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ -#line 2842 "MachineIndependent/glslang.y" + case 417: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ +#line 2896 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 9081 "MachineIndependent/glslang_tab.cpp" +#line 9555 "MachineIndependent/glslang_tab.cpp" break; - case 412: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ -#line 2847 "MachineIndependent/glslang.y" + case 418: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ +#line 2901 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 9091 "MachineIndependent/glslang_tab.cpp" +#line 9565 "MachineIndependent/glslang_tab.cpp" break; - case 413: /* type_specifier_nonarray: TEXTURE1D */ -#line 2852 "MachineIndependent/glslang.y" + case 419: /* type_specifier_nonarray: TEXTURE1D */ +#line 2906 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 9101 "MachineIndependent/glslang_tab.cpp" +#line 9575 "MachineIndependent/glslang_tab.cpp" break; - case 414: /* type_specifier_nonarray: F16TEXTURE1D */ -#line 2857 "MachineIndependent/glslang.y" + case 420: /* type_specifier_nonarray: F16TEXTURE1D */ +#line 2911 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 9112 "MachineIndependent/glslang_tab.cpp" +#line 9586 "MachineIndependent/glslang_tab.cpp" break; - case 415: /* type_specifier_nonarray: F16TEXTURE2D */ -#line 2863 "MachineIndependent/glslang.y" + case 421: /* type_specifier_nonarray: F16TEXTURE2D */ +#line 2917 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 9123 "MachineIndependent/glslang_tab.cpp" +#line 9597 "MachineIndependent/glslang_tab.cpp" break; - case 416: /* type_specifier_nonarray: F16TEXTURE3D */ -#line 2869 "MachineIndependent/glslang.y" + case 422: /* type_specifier_nonarray: F16TEXTURE3D */ +#line 2923 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 9134 "MachineIndependent/glslang_tab.cpp" +#line 9608 "MachineIndependent/glslang_tab.cpp" break; - case 417: /* type_specifier_nonarray: F16TEXTURECUBE */ -#line 2875 "MachineIndependent/glslang.y" + case 423: /* type_specifier_nonarray: F16TEXTURECUBE */ +#line 2929 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 9145 "MachineIndependent/glslang_tab.cpp" +#line 9619 "MachineIndependent/glslang_tab.cpp" break; - case 418: /* type_specifier_nonarray: TEXTURE1DARRAY */ -#line 2881 "MachineIndependent/glslang.y" + case 424: /* type_specifier_nonarray: TEXTURE1DARRAY */ +#line 2935 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 9155 "MachineIndependent/glslang_tab.cpp" +#line 9629 "MachineIndependent/glslang_tab.cpp" break; - case 419: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ -#line 2886 "MachineIndependent/glslang.y" + case 425: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ +#line 2940 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 9166 "MachineIndependent/glslang_tab.cpp" +#line 9640 "MachineIndependent/glslang_tab.cpp" break; - case 420: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ -#line 2892 "MachineIndependent/glslang.y" + case 426: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ +#line 2946 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 9177 "MachineIndependent/glslang_tab.cpp" +#line 9651 "MachineIndependent/glslang_tab.cpp" break; - case 421: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ -#line 2898 "MachineIndependent/glslang.y" + case 427: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ +#line 2952 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 9188 "MachineIndependent/glslang_tab.cpp" +#line 9662 "MachineIndependent/glslang_tab.cpp" break; - case 422: /* type_specifier_nonarray: ITEXTURE1D */ -#line 2904 "MachineIndependent/glslang.y" + case 428: /* type_specifier_nonarray: ITEXTURE1D */ +#line 2958 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 9198 "MachineIndependent/glslang_tab.cpp" +#line 9672 "MachineIndependent/glslang_tab.cpp" break; - case 423: /* type_specifier_nonarray: ITEXTURE1DARRAY */ -#line 2909 "MachineIndependent/glslang.y" + case 429: /* type_specifier_nonarray: ITEXTURE1DARRAY */ +#line 2963 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 9208 "MachineIndependent/glslang_tab.cpp" +#line 9682 "MachineIndependent/glslang_tab.cpp" break; - case 424: /* type_specifier_nonarray: UTEXTURE1D */ -#line 2914 "MachineIndependent/glslang.y" + case 430: /* type_specifier_nonarray: UTEXTURE1D */ +#line 2968 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 9218 "MachineIndependent/glslang_tab.cpp" +#line 9692 "MachineIndependent/glslang_tab.cpp" break; - case 425: /* type_specifier_nonarray: UTEXTURE1DARRAY */ -#line 2919 "MachineIndependent/glslang.y" + case 431: /* type_specifier_nonarray: UTEXTURE1DARRAY */ +#line 2973 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 9228 "MachineIndependent/glslang_tab.cpp" +#line 9702 "MachineIndependent/glslang_tab.cpp" break; - case 426: /* type_specifier_nonarray: TEXTURE2DRECT */ -#line 2924 "MachineIndependent/glslang.y" + case 432: /* type_specifier_nonarray: TEXTURE2DRECT */ +#line 2978 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 9238 "MachineIndependent/glslang_tab.cpp" +#line 9712 "MachineIndependent/glslang_tab.cpp" break; - case 427: /* type_specifier_nonarray: F16TEXTURE2DRECT */ -#line 2929 "MachineIndependent/glslang.y" + case 433: /* type_specifier_nonarray: F16TEXTURE2DRECT */ +#line 2983 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 9249 "MachineIndependent/glslang_tab.cpp" +#line 9723 "MachineIndependent/glslang_tab.cpp" break; - case 428: /* type_specifier_nonarray: ITEXTURE2DRECT */ -#line 2935 "MachineIndependent/glslang.y" + case 434: /* type_specifier_nonarray: ITEXTURE2DRECT */ +#line 2989 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 9259 "MachineIndependent/glslang_tab.cpp" +#line 9733 "MachineIndependent/glslang_tab.cpp" break; - case 429: /* type_specifier_nonarray: UTEXTURE2DRECT */ -#line 2940 "MachineIndependent/glslang.y" + case 435: /* type_specifier_nonarray: UTEXTURE2DRECT */ +#line 2994 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 9269 "MachineIndependent/glslang_tab.cpp" +#line 9743 "MachineIndependent/glslang_tab.cpp" break; - case 430: /* type_specifier_nonarray: TEXTUREBUFFER */ -#line 2945 "MachineIndependent/glslang.y" + case 436: /* type_specifier_nonarray: TEXTUREBUFFER */ +#line 2999 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 9279 "MachineIndependent/glslang_tab.cpp" +#line 9753 "MachineIndependent/glslang_tab.cpp" break; - case 431: /* type_specifier_nonarray: F16TEXTUREBUFFER */ -#line 2950 "MachineIndependent/glslang.y" + case 437: /* type_specifier_nonarray: F16TEXTUREBUFFER */ +#line 3004 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 9290 "MachineIndependent/glslang_tab.cpp" +#line 9764 "MachineIndependent/glslang_tab.cpp" break; - case 432: /* type_specifier_nonarray: ITEXTUREBUFFER */ -#line 2956 "MachineIndependent/glslang.y" + case 438: /* type_specifier_nonarray: ITEXTUREBUFFER */ +#line 3010 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 9300 "MachineIndependent/glslang_tab.cpp" +#line 9774 "MachineIndependent/glslang_tab.cpp" break; - case 433: /* type_specifier_nonarray: UTEXTUREBUFFER */ -#line 2961 "MachineIndependent/glslang.y" + case 439: /* type_specifier_nonarray: UTEXTUREBUFFER */ +#line 3015 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 9310 "MachineIndependent/glslang_tab.cpp" +#line 9784 "MachineIndependent/glslang_tab.cpp" break; - case 434: /* type_specifier_nonarray: TEXTURE2DMS */ -#line 2966 "MachineIndependent/glslang.y" + case 440: /* type_specifier_nonarray: TEXTURE2DMS */ +#line 3020 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 9320 "MachineIndependent/glslang_tab.cpp" +#line 9794 "MachineIndependent/glslang_tab.cpp" break; - case 435: /* type_specifier_nonarray: F16TEXTURE2DMS */ -#line 2971 "MachineIndependent/glslang.y" + case 441: /* type_specifier_nonarray: F16TEXTURE2DMS */ +#line 3025 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 9331 "MachineIndependent/glslang_tab.cpp" +#line 9805 "MachineIndependent/glslang_tab.cpp" break; - case 436: /* type_specifier_nonarray: ITEXTURE2DMS */ -#line 2977 "MachineIndependent/glslang.y" + case 442: /* type_specifier_nonarray: ITEXTURE2DMS */ +#line 3031 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 9341 "MachineIndependent/glslang_tab.cpp" +#line 9815 "MachineIndependent/glslang_tab.cpp" break; - case 437: /* type_specifier_nonarray: UTEXTURE2DMS */ -#line 2982 "MachineIndependent/glslang.y" + case 443: /* type_specifier_nonarray: UTEXTURE2DMS */ +#line 3036 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 9351 "MachineIndependent/glslang_tab.cpp" +#line 9825 "MachineIndependent/glslang_tab.cpp" break; - case 438: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ -#line 2987 "MachineIndependent/glslang.y" + case 444: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ +#line 3041 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 9361 "MachineIndependent/glslang_tab.cpp" +#line 9835 "MachineIndependent/glslang_tab.cpp" break; - case 439: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ -#line 2992 "MachineIndependent/glslang.y" + case 445: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ +#line 3046 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 9372 "MachineIndependent/glslang_tab.cpp" +#line 9846 "MachineIndependent/glslang_tab.cpp" break; - case 440: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ -#line 2998 "MachineIndependent/glslang.y" + case 446: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ +#line 3052 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 9382 "MachineIndependent/glslang_tab.cpp" +#line 9856 "MachineIndependent/glslang_tab.cpp" break; - case 441: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ -#line 3003 "MachineIndependent/glslang.y" + case 447: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ +#line 3057 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 9392 "MachineIndependent/glslang_tab.cpp" +#line 9866 "MachineIndependent/glslang_tab.cpp" break; - case 442: /* type_specifier_nonarray: IMAGE1D */ -#line 3008 "MachineIndependent/glslang.y" + case 448: /* type_specifier_nonarray: IMAGE1D */ +#line 3062 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 9402 "MachineIndependent/glslang_tab.cpp" +#line 9876 "MachineIndependent/glslang_tab.cpp" break; - case 443: /* type_specifier_nonarray: F16IMAGE1D */ -#line 3013 "MachineIndependent/glslang.y" + case 449: /* type_specifier_nonarray: F16IMAGE1D */ +#line 3067 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 9413 "MachineIndependent/glslang_tab.cpp" +#line 9887 "MachineIndependent/glslang_tab.cpp" break; - case 444: /* type_specifier_nonarray: IIMAGE1D */ -#line 3019 "MachineIndependent/glslang.y" + case 450: /* type_specifier_nonarray: IIMAGE1D */ +#line 3073 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 9423 "MachineIndependent/glslang_tab.cpp" +#line 9897 "MachineIndependent/glslang_tab.cpp" break; - case 445: /* type_specifier_nonarray: UIMAGE1D */ -#line 3024 "MachineIndependent/glslang.y" + case 451: /* type_specifier_nonarray: UIMAGE1D */ +#line 3078 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 9433 "MachineIndependent/glslang_tab.cpp" +#line 9907 "MachineIndependent/glslang_tab.cpp" break; - case 446: /* type_specifier_nonarray: IMAGE2D */ -#line 3029 "MachineIndependent/glslang.y" + case 452: /* type_specifier_nonarray: IMAGE2D */ +#line 3083 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 9443 "MachineIndependent/glslang_tab.cpp" +#line 9917 "MachineIndependent/glslang_tab.cpp" break; - case 447: /* type_specifier_nonarray: F16IMAGE2D */ -#line 3034 "MachineIndependent/glslang.y" + case 453: /* type_specifier_nonarray: F16IMAGE2D */ +#line 3088 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 9454 "MachineIndependent/glslang_tab.cpp" +#line 9928 "MachineIndependent/glslang_tab.cpp" break; - case 448: /* type_specifier_nonarray: IIMAGE2D */ -#line 3040 "MachineIndependent/glslang.y" + case 454: /* type_specifier_nonarray: IIMAGE2D */ +#line 3094 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 9464 "MachineIndependent/glslang_tab.cpp" +#line 9938 "MachineIndependent/glslang_tab.cpp" break; - case 449: /* type_specifier_nonarray: UIMAGE2D */ -#line 3045 "MachineIndependent/glslang.y" + case 455: /* type_specifier_nonarray: UIMAGE2D */ +#line 3099 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 9474 "MachineIndependent/glslang_tab.cpp" +#line 9948 "MachineIndependent/glslang_tab.cpp" break; - case 450: /* type_specifier_nonarray: IMAGE3D */ -#line 3050 "MachineIndependent/glslang.y" + case 456: /* type_specifier_nonarray: IMAGE3D */ +#line 3104 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 9484 "MachineIndependent/glslang_tab.cpp" +#line 9958 "MachineIndependent/glslang_tab.cpp" break; - case 451: /* type_specifier_nonarray: F16IMAGE3D */ -#line 3055 "MachineIndependent/glslang.y" + case 457: /* type_specifier_nonarray: F16IMAGE3D */ +#line 3109 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 9495 "MachineIndependent/glslang_tab.cpp" +#line 9969 "MachineIndependent/glslang_tab.cpp" break; - case 452: /* type_specifier_nonarray: IIMAGE3D */ -#line 3061 "MachineIndependent/glslang.y" + case 458: /* type_specifier_nonarray: IIMAGE3D */ +#line 3115 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 9505 "MachineIndependent/glslang_tab.cpp" +#line 9979 "MachineIndependent/glslang_tab.cpp" break; - case 453: /* type_specifier_nonarray: UIMAGE3D */ -#line 3066 "MachineIndependent/glslang.y" + case 459: /* type_specifier_nonarray: UIMAGE3D */ +#line 3120 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 9515 "MachineIndependent/glslang_tab.cpp" +#line 9989 "MachineIndependent/glslang_tab.cpp" break; - case 454: /* type_specifier_nonarray: IMAGE2DRECT */ -#line 3071 "MachineIndependent/glslang.y" + case 460: /* type_specifier_nonarray: IMAGE2DRECT */ +#line 3125 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 9525 "MachineIndependent/glslang_tab.cpp" +#line 9999 "MachineIndependent/glslang_tab.cpp" break; - case 455: /* type_specifier_nonarray: F16IMAGE2DRECT */ -#line 3076 "MachineIndependent/glslang.y" + case 461: /* type_specifier_nonarray: F16IMAGE2DRECT */ +#line 3130 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 9536 "MachineIndependent/glslang_tab.cpp" +#line 10010 "MachineIndependent/glslang_tab.cpp" break; - case 456: /* type_specifier_nonarray: IIMAGE2DRECT */ -#line 3082 "MachineIndependent/glslang.y" + case 462: /* type_specifier_nonarray: IIMAGE2DRECT */ +#line 3136 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 9546 "MachineIndependent/glslang_tab.cpp" +#line 10020 "MachineIndependent/glslang_tab.cpp" break; - case 457: /* type_specifier_nonarray: UIMAGE2DRECT */ -#line 3087 "MachineIndependent/glslang.y" + case 463: /* type_specifier_nonarray: UIMAGE2DRECT */ +#line 3141 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 9556 "MachineIndependent/glslang_tab.cpp" +#line 10030 "MachineIndependent/glslang_tab.cpp" break; - case 458: /* type_specifier_nonarray: IMAGECUBE */ -#line 3092 "MachineIndependent/glslang.y" + case 464: /* type_specifier_nonarray: IMAGECUBE */ +#line 3146 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 9566 "MachineIndependent/glslang_tab.cpp" +#line 10040 "MachineIndependent/glslang_tab.cpp" break; - case 459: /* type_specifier_nonarray: F16IMAGECUBE */ -#line 3097 "MachineIndependent/glslang.y" + case 465: /* type_specifier_nonarray: F16IMAGECUBE */ +#line 3151 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 9577 "MachineIndependent/glslang_tab.cpp" +#line 10051 "MachineIndependent/glslang_tab.cpp" break; - case 460: /* type_specifier_nonarray: IIMAGECUBE */ -#line 3103 "MachineIndependent/glslang.y" + case 466: /* type_specifier_nonarray: IIMAGECUBE */ +#line 3157 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 9587 "MachineIndependent/glslang_tab.cpp" +#line 10061 "MachineIndependent/glslang_tab.cpp" break; - case 461: /* type_specifier_nonarray: UIMAGECUBE */ -#line 3108 "MachineIndependent/glslang.y" + case 467: /* type_specifier_nonarray: UIMAGECUBE */ +#line 3162 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 9597 "MachineIndependent/glslang_tab.cpp" +#line 10071 "MachineIndependent/glslang_tab.cpp" break; - case 462: /* type_specifier_nonarray: IMAGEBUFFER */ -#line 3113 "MachineIndependent/glslang.y" + case 468: /* type_specifier_nonarray: IMAGEBUFFER */ +#line 3167 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 9607 "MachineIndependent/glslang_tab.cpp" +#line 10081 "MachineIndependent/glslang_tab.cpp" break; - case 463: /* type_specifier_nonarray: F16IMAGEBUFFER */ -#line 3118 "MachineIndependent/glslang.y" + case 469: /* type_specifier_nonarray: F16IMAGEBUFFER */ +#line 3172 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 9618 "MachineIndependent/glslang_tab.cpp" +#line 10092 "MachineIndependent/glslang_tab.cpp" break; - case 464: /* type_specifier_nonarray: IIMAGEBUFFER */ -#line 3124 "MachineIndependent/glslang.y" + case 470: /* type_specifier_nonarray: IIMAGEBUFFER */ +#line 3178 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 9628 "MachineIndependent/glslang_tab.cpp" +#line 10102 "MachineIndependent/glslang_tab.cpp" break; - case 465: /* type_specifier_nonarray: UIMAGEBUFFER */ -#line 3129 "MachineIndependent/glslang.y" + case 471: /* type_specifier_nonarray: UIMAGEBUFFER */ +#line 3183 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 9638 "MachineIndependent/glslang_tab.cpp" +#line 10112 "MachineIndependent/glslang_tab.cpp" break; - case 466: /* type_specifier_nonarray: IMAGE1DARRAY */ -#line 3134 "MachineIndependent/glslang.y" + case 472: /* type_specifier_nonarray: IMAGE1DARRAY */ +#line 3188 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 9648 "MachineIndependent/glslang_tab.cpp" +#line 10122 "MachineIndependent/glslang_tab.cpp" break; - case 467: /* type_specifier_nonarray: F16IMAGE1DARRAY */ -#line 3139 "MachineIndependent/glslang.y" + case 473: /* type_specifier_nonarray: F16IMAGE1DARRAY */ +#line 3193 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 9659 "MachineIndependent/glslang_tab.cpp" +#line 10133 "MachineIndependent/glslang_tab.cpp" break; - case 468: /* type_specifier_nonarray: IIMAGE1DARRAY */ -#line 3145 "MachineIndependent/glslang.y" + case 474: /* type_specifier_nonarray: IIMAGE1DARRAY */ +#line 3199 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 9669 "MachineIndependent/glslang_tab.cpp" +#line 10143 "MachineIndependent/glslang_tab.cpp" break; - case 469: /* type_specifier_nonarray: UIMAGE1DARRAY */ -#line 3150 "MachineIndependent/glslang.y" + case 475: /* type_specifier_nonarray: UIMAGE1DARRAY */ +#line 3204 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 9679 "MachineIndependent/glslang_tab.cpp" +#line 10153 "MachineIndependent/glslang_tab.cpp" break; - case 470: /* type_specifier_nonarray: IMAGE2DARRAY */ -#line 3155 "MachineIndependent/glslang.y" + case 476: /* type_specifier_nonarray: IMAGE2DARRAY */ +#line 3209 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 9689 "MachineIndependent/glslang_tab.cpp" +#line 10163 "MachineIndependent/glslang_tab.cpp" break; - case 471: /* type_specifier_nonarray: F16IMAGE2DARRAY */ -#line 3160 "MachineIndependent/glslang.y" + case 477: /* type_specifier_nonarray: F16IMAGE2DARRAY */ +#line 3214 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 9700 "MachineIndependent/glslang_tab.cpp" +#line 10174 "MachineIndependent/glslang_tab.cpp" break; - case 472: /* type_specifier_nonarray: IIMAGE2DARRAY */ -#line 3166 "MachineIndependent/glslang.y" + case 478: /* type_specifier_nonarray: IIMAGE2DARRAY */ +#line 3220 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 9710 "MachineIndependent/glslang_tab.cpp" +#line 10184 "MachineIndependent/glslang_tab.cpp" break; - case 473: /* type_specifier_nonarray: UIMAGE2DARRAY */ -#line 3171 "MachineIndependent/glslang.y" + case 479: /* type_specifier_nonarray: UIMAGE2DARRAY */ +#line 3225 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 9720 "MachineIndependent/glslang_tab.cpp" +#line 10194 "MachineIndependent/glslang_tab.cpp" break; - case 474: /* type_specifier_nonarray: IMAGECUBEARRAY */ -#line 3176 "MachineIndependent/glslang.y" + case 480: /* type_specifier_nonarray: IMAGECUBEARRAY */ +#line 3230 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 9730 "MachineIndependent/glslang_tab.cpp" +#line 10204 "MachineIndependent/glslang_tab.cpp" break; - case 475: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ -#line 3181 "MachineIndependent/glslang.y" + case 481: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ +#line 3235 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 9741 "MachineIndependent/glslang_tab.cpp" +#line 10215 "MachineIndependent/glslang_tab.cpp" break; - case 476: /* type_specifier_nonarray: IIMAGECUBEARRAY */ -#line 3187 "MachineIndependent/glslang.y" + case 482: /* type_specifier_nonarray: IIMAGECUBEARRAY */ +#line 3241 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 9751 "MachineIndependent/glslang_tab.cpp" +#line 10225 "MachineIndependent/glslang_tab.cpp" break; - case 477: /* type_specifier_nonarray: UIMAGECUBEARRAY */ -#line 3192 "MachineIndependent/glslang.y" + case 483: /* type_specifier_nonarray: UIMAGECUBEARRAY */ +#line 3246 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 9761 "MachineIndependent/glslang_tab.cpp" +#line 10235 "MachineIndependent/glslang_tab.cpp" break; - case 478: /* type_specifier_nonarray: IMAGE2DMS */ -#line 3197 "MachineIndependent/glslang.y" + case 484: /* type_specifier_nonarray: IMAGE2DMS */ +#line 3251 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 9771 "MachineIndependent/glslang_tab.cpp" +#line 10245 "MachineIndependent/glslang_tab.cpp" break; - case 479: /* type_specifier_nonarray: F16IMAGE2DMS */ -#line 3202 "MachineIndependent/glslang.y" + case 485: /* type_specifier_nonarray: F16IMAGE2DMS */ +#line 3256 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 9782 "MachineIndependent/glslang_tab.cpp" +#line 10256 "MachineIndependent/glslang_tab.cpp" break; - case 480: /* type_specifier_nonarray: IIMAGE2DMS */ -#line 3208 "MachineIndependent/glslang.y" + case 486: /* type_specifier_nonarray: IIMAGE2DMS */ +#line 3262 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 9792 "MachineIndependent/glslang_tab.cpp" +#line 10266 "MachineIndependent/glslang_tab.cpp" break; - case 481: /* type_specifier_nonarray: UIMAGE2DMS */ -#line 3213 "MachineIndependent/glslang.y" + case 487: /* type_specifier_nonarray: UIMAGE2DMS */ +#line 3267 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 9802 "MachineIndependent/glslang_tab.cpp" +#line 10276 "MachineIndependent/glslang_tab.cpp" break; - case 482: /* type_specifier_nonarray: IMAGE2DMSARRAY */ -#line 3218 "MachineIndependent/glslang.y" + case 488: /* type_specifier_nonarray: IMAGE2DMSARRAY */ +#line 3272 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 9812 "MachineIndependent/glslang_tab.cpp" +#line 10286 "MachineIndependent/glslang_tab.cpp" break; - case 483: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ -#line 3223 "MachineIndependent/glslang.y" + case 489: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ +#line 3277 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 9823 "MachineIndependent/glslang_tab.cpp" +#line 10297 "MachineIndependent/glslang_tab.cpp" break; - case 484: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ -#line 3229 "MachineIndependent/glslang.y" + case 490: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ +#line 3283 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 9833 "MachineIndependent/glslang_tab.cpp" +#line 10307 "MachineIndependent/glslang_tab.cpp" break; - case 485: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ -#line 3234 "MachineIndependent/glslang.y" + case 491: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ +#line 3288 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 9843 "MachineIndependent/glslang_tab.cpp" +#line 10317 "MachineIndependent/glslang_tab.cpp" break; - case 486: /* type_specifier_nonarray: I64IMAGE1D */ -#line 3239 "MachineIndependent/glslang.y" + case 492: /* type_specifier_nonarray: I64IMAGE1D */ +#line 3293 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D); } -#line 9853 "MachineIndependent/glslang_tab.cpp" +#line 10327 "MachineIndependent/glslang_tab.cpp" break; - case 487: /* type_specifier_nonarray: U64IMAGE1D */ -#line 3244 "MachineIndependent/glslang.y" + case 493: /* type_specifier_nonarray: U64IMAGE1D */ +#line 3298 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D); } -#line 9863 "MachineIndependent/glslang_tab.cpp" +#line 10337 "MachineIndependent/glslang_tab.cpp" break; - case 488: /* type_specifier_nonarray: I64IMAGE2D */ -#line 3249 "MachineIndependent/glslang.y" + case 494: /* type_specifier_nonarray: I64IMAGE2D */ +#line 3303 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D); } -#line 9873 "MachineIndependent/glslang_tab.cpp" +#line 10347 "MachineIndependent/glslang_tab.cpp" break; - case 489: /* type_specifier_nonarray: U64IMAGE2D */ -#line 3254 "MachineIndependent/glslang.y" + case 495: /* type_specifier_nonarray: U64IMAGE2D */ +#line 3308 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D); } -#line 9883 "MachineIndependent/glslang_tab.cpp" +#line 10357 "MachineIndependent/glslang_tab.cpp" break; - case 490: /* type_specifier_nonarray: I64IMAGE3D */ -#line 3259 "MachineIndependent/glslang.y" + case 496: /* type_specifier_nonarray: I64IMAGE3D */ +#line 3313 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D); } -#line 9893 "MachineIndependent/glslang_tab.cpp" +#line 10367 "MachineIndependent/glslang_tab.cpp" break; - case 491: /* type_specifier_nonarray: U64IMAGE3D */ -#line 3264 "MachineIndependent/glslang.y" + case 497: /* type_specifier_nonarray: U64IMAGE3D */ +#line 3318 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D); } -#line 9903 "MachineIndependent/glslang_tab.cpp" +#line 10377 "MachineIndependent/glslang_tab.cpp" break; - case 492: /* type_specifier_nonarray: I64IMAGE2DRECT */ -#line 3269 "MachineIndependent/glslang.y" + case 498: /* type_specifier_nonarray: I64IMAGE2DRECT */ +#line 3323 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect); } -#line 9913 "MachineIndependent/glslang_tab.cpp" +#line 10387 "MachineIndependent/glslang_tab.cpp" break; - case 493: /* type_specifier_nonarray: U64IMAGE2DRECT */ -#line 3274 "MachineIndependent/glslang.y" + case 499: /* type_specifier_nonarray: U64IMAGE2DRECT */ +#line 3328 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect); } -#line 9923 "MachineIndependent/glslang_tab.cpp" +#line 10397 "MachineIndependent/glslang_tab.cpp" break; - case 494: /* type_specifier_nonarray: I64IMAGECUBE */ -#line 3279 "MachineIndependent/glslang.y" + case 500: /* type_specifier_nonarray: I64IMAGECUBE */ +#line 3333 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube); } -#line 9933 "MachineIndependent/glslang_tab.cpp" +#line 10407 "MachineIndependent/glslang_tab.cpp" break; - case 495: /* type_specifier_nonarray: U64IMAGECUBE */ -#line 3284 "MachineIndependent/glslang.y" + case 501: /* type_specifier_nonarray: U64IMAGECUBE */ +#line 3338 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube); } -#line 9943 "MachineIndependent/glslang_tab.cpp" +#line 10417 "MachineIndependent/glslang_tab.cpp" break; - case 496: /* type_specifier_nonarray: I64IMAGEBUFFER */ -#line 3289 "MachineIndependent/glslang.y" + case 502: /* type_specifier_nonarray: I64IMAGEBUFFER */ +#line 3343 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer); } -#line 9953 "MachineIndependent/glslang_tab.cpp" +#line 10427 "MachineIndependent/glslang_tab.cpp" break; - case 497: /* type_specifier_nonarray: U64IMAGEBUFFER */ -#line 3294 "MachineIndependent/glslang.y" + case 503: /* type_specifier_nonarray: U64IMAGEBUFFER */ +#line 3348 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer); } -#line 9963 "MachineIndependent/glslang_tab.cpp" +#line 10437 "MachineIndependent/glslang_tab.cpp" break; - case 498: /* type_specifier_nonarray: I64IMAGE1DARRAY */ -#line 3299 "MachineIndependent/glslang.y" + case 504: /* type_specifier_nonarray: I64IMAGE1DARRAY */ +#line 3353 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true); } -#line 9973 "MachineIndependent/glslang_tab.cpp" +#line 10447 "MachineIndependent/glslang_tab.cpp" break; - case 499: /* type_specifier_nonarray: U64IMAGE1DARRAY */ -#line 3304 "MachineIndependent/glslang.y" + case 505: /* type_specifier_nonarray: U64IMAGE1DARRAY */ +#line 3358 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true); } -#line 9983 "MachineIndependent/glslang_tab.cpp" +#line 10457 "MachineIndependent/glslang_tab.cpp" break; - case 500: /* type_specifier_nonarray: I64IMAGE2DARRAY */ -#line 3309 "MachineIndependent/glslang.y" + case 506: /* type_specifier_nonarray: I64IMAGE2DARRAY */ +#line 3363 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true); } -#line 9993 "MachineIndependent/glslang_tab.cpp" +#line 10467 "MachineIndependent/glslang_tab.cpp" break; - case 501: /* type_specifier_nonarray: U64IMAGE2DARRAY */ -#line 3314 "MachineIndependent/glslang.y" + case 507: /* type_specifier_nonarray: U64IMAGE2DARRAY */ +#line 3368 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true); } -#line 10003 "MachineIndependent/glslang_tab.cpp" +#line 10477 "MachineIndependent/glslang_tab.cpp" break; - case 502: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ -#line 3319 "MachineIndependent/glslang.y" + case 508: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ +#line 3373 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true); } -#line 10013 "MachineIndependent/glslang_tab.cpp" +#line 10487 "MachineIndependent/glslang_tab.cpp" break; - case 503: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ -#line 3324 "MachineIndependent/glslang.y" + case 509: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ +#line 3378 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true); } -#line 10023 "MachineIndependent/glslang_tab.cpp" +#line 10497 "MachineIndependent/glslang_tab.cpp" break; - case 504: /* type_specifier_nonarray: I64IMAGE2DMS */ -#line 3329 "MachineIndependent/glslang.y" + case 510: /* type_specifier_nonarray: I64IMAGE2DMS */ +#line 3383 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true); } -#line 10033 "MachineIndependent/glslang_tab.cpp" +#line 10507 "MachineIndependent/glslang_tab.cpp" break; - case 505: /* type_specifier_nonarray: U64IMAGE2DMS */ -#line 3334 "MachineIndependent/glslang.y" + case 511: /* type_specifier_nonarray: U64IMAGE2DMS */ +#line 3388 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true); } -#line 10043 "MachineIndependent/glslang_tab.cpp" +#line 10517 "MachineIndependent/glslang_tab.cpp" break; - case 506: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ -#line 3339 "MachineIndependent/glslang.y" + case 512: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ +#line 3393 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true); } -#line 10053 "MachineIndependent/glslang_tab.cpp" +#line 10527 "MachineIndependent/glslang_tab.cpp" break; - case 507: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ -#line 3344 "MachineIndependent/glslang.y" + case 513: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ +#line 3398 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true); } -#line 10063 "MachineIndependent/glslang_tab.cpp" +#line 10537 "MachineIndependent/glslang_tab.cpp" break; - case 508: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ -#line 3349 "MachineIndependent/glslang.y" + case 514: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ +#line 3403 "MachineIndependent/glslang.y" { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 10074 "MachineIndependent/glslang_tab.cpp" +#line 10548 "MachineIndependent/glslang_tab.cpp" break; - case 509: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ -#line 3355 "MachineIndependent/glslang.y" + case 515: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ +#line 3409 "MachineIndependent/glslang.y" { // GL_EXT_YUV_target (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 10085 "MachineIndependent/glslang_tab.cpp" +#line 10559 "MachineIndependent/glslang_tab.cpp" break; - case 510: /* type_specifier_nonarray: SUBPASSINPUT */ -#line 3361 "MachineIndependent/glslang.y" + case 516: /* type_specifier_nonarray: SUBPASSINPUT */ +#line 3415 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 10096 "MachineIndependent/glslang_tab.cpp" +#line 10570 "MachineIndependent/glslang_tab.cpp" break; - case 511: /* type_specifier_nonarray: SUBPASSINPUTMS */ -#line 3367 "MachineIndependent/glslang.y" + case 517: /* type_specifier_nonarray: SUBPASSINPUTMS */ +#line 3421 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 10107 "MachineIndependent/glslang_tab.cpp" +#line 10581 "MachineIndependent/glslang_tab.cpp" break; - case 512: /* type_specifier_nonarray: F16SUBPASSINPUT */ -#line 3373 "MachineIndependent/glslang.y" + case 518: /* type_specifier_nonarray: F16SUBPASSINPUT */ +#line 3427 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -10115,11 +10589,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 10119 "MachineIndependent/glslang_tab.cpp" +#line 10593 "MachineIndependent/glslang_tab.cpp" break; - case 513: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ -#line 3380 "MachineIndependent/glslang.y" + case 519: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ +#line 3434 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -10127,98 +10601,107 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 10131 "MachineIndependent/glslang_tab.cpp" +#line 10605 "MachineIndependent/glslang_tab.cpp" break; - case 514: /* type_specifier_nonarray: ISUBPASSINPUT */ -#line 3387 "MachineIndependent/glslang.y" + case 520: /* type_specifier_nonarray: ISUBPASSINPUT */ +#line 3441 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 10142 "MachineIndependent/glslang_tab.cpp" +#line 10616 "MachineIndependent/glslang_tab.cpp" break; - case 515: /* type_specifier_nonarray: ISUBPASSINPUTMS */ -#line 3393 "MachineIndependent/glslang.y" + case 521: /* type_specifier_nonarray: ISUBPASSINPUTMS */ +#line 3447 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 10153 "MachineIndependent/glslang_tab.cpp" +#line 10627 "MachineIndependent/glslang_tab.cpp" break; - case 516: /* type_specifier_nonarray: USUBPASSINPUT */ -#line 3399 "MachineIndependent/glslang.y" + case 522: /* type_specifier_nonarray: USUBPASSINPUT */ +#line 3453 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 10164 "MachineIndependent/glslang_tab.cpp" +#line 10638 "MachineIndependent/glslang_tab.cpp" break; - case 517: /* type_specifier_nonarray: USUBPASSINPUTMS */ -#line 3405 "MachineIndependent/glslang.y" + case 523: /* type_specifier_nonarray: USUBPASSINPUTMS */ +#line 3459 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 10175 "MachineIndependent/glslang_tab.cpp" +#line 10649 "MachineIndependent/glslang_tab.cpp" break; - case 518: /* type_specifier_nonarray: FCOOPMATNV */ -#line 3411 "MachineIndependent/glslang.y" + case 524: /* type_specifier_nonarray: FCOOPMATNV */ +#line 3465 "MachineIndependent/glslang.y" { parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 10186 "MachineIndependent/glslang_tab.cpp" +#line 10660 "MachineIndependent/glslang_tab.cpp" break; - case 519: /* type_specifier_nonarray: ICOOPMATNV */ -#line 3417 "MachineIndependent/glslang.y" + case 525: /* type_specifier_nonarray: ICOOPMATNV */ +#line 3471 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).coopmat = true; } -#line 10197 "MachineIndependent/glslang_tab.cpp" +#line 10671 "MachineIndependent/glslang_tab.cpp" break; - case 520: /* type_specifier_nonarray: UCOOPMATNV */ -#line 3423 "MachineIndependent/glslang.y" + case 526: /* type_specifier_nonarray: UCOOPMATNV */ +#line 3477 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).coopmat = true; } -#line 10208 "MachineIndependent/glslang_tab.cpp" +#line 10682 "MachineIndependent/glslang_tab.cpp" break; - case 521: /* type_specifier_nonarray: struct_specifier */ -#line 3430 "MachineIndependent/glslang.y" + case 527: /* type_specifier_nonarray: spirv_type_specifier */ +#line 3483 "MachineIndependent/glslang.y" + { + parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier"); + (yyval.interm.type) = (yyvsp[0].interm.type); + } +#line 10691 "MachineIndependent/glslang_tab.cpp" + break; + + case 528: /* type_specifier_nonarray: struct_specifier */ +#line 3488 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 10218 "MachineIndependent/glslang_tab.cpp" +#line 10701 "MachineIndependent/glslang_tab.cpp" break; - case 522: /* type_specifier_nonarray: TYPE_NAME */ -#line 3435 "MachineIndependent/glslang.y" + case 529: /* type_specifier_nonarray: TYPE_NAME */ +#line 3493 "MachineIndependent/glslang.y" { // // This is for user defined type names. The lexical phase looked up the @@ -10232,47 +10715,47 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 10236 "MachineIndependent/glslang_tab.cpp" +#line 10719 "MachineIndependent/glslang_tab.cpp" break; - case 523: /* precision_qualifier: HIGH_PRECISION */ -#line 3451 "MachineIndependent/glslang.y" + case 530: /* precision_qualifier: HIGH_PRECISION */ +#line 3509 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 10246 "MachineIndependent/glslang_tab.cpp" +#line 10729 "MachineIndependent/glslang_tab.cpp" break; - case 524: /* precision_qualifier: MEDIUM_PRECISION */ -#line 3456 "MachineIndependent/glslang.y" + case 531: /* precision_qualifier: MEDIUM_PRECISION */ +#line 3514 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 10256 "MachineIndependent/glslang_tab.cpp" +#line 10739 "MachineIndependent/glslang_tab.cpp" break; - case 525: /* precision_qualifier: LOW_PRECISION */ -#line 3461 "MachineIndependent/glslang.y" + case 532: /* precision_qualifier: LOW_PRECISION */ +#line 3519 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 10266 "MachineIndependent/glslang_tab.cpp" +#line 10749 "MachineIndependent/glslang_tab.cpp" break; - case 526: /* $@3: %empty */ -#line 3469 "MachineIndependent/glslang.y" + case 533: /* $@3: %empty */ +#line 3527 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 10272 "MachineIndependent/glslang_tab.cpp" +#line 10755 "MachineIndependent/glslang_tab.cpp" break; - case 527: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ -#line 3469 "MachineIndependent/glslang.y" + case 534: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ +#line 3527 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); @@ -10284,17 +10767,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10288 "MachineIndependent/glslang_tab.cpp" +#line 10771 "MachineIndependent/glslang_tab.cpp" break; - case 528: /* $@4: %empty */ -#line 3480 "MachineIndependent/glslang.y" + case 535: /* $@4: %empty */ +#line 3538 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 10294 "MachineIndependent/glslang_tab.cpp" +#line 10777 "MachineIndependent/glslang_tab.cpp" break; - case 529: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ -#line 3480 "MachineIndependent/glslang.y" + case 536: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ +#line 3538 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -10302,19 +10785,19 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10306 "MachineIndependent/glslang_tab.cpp" +#line 10789 "MachineIndependent/glslang_tab.cpp" break; - case 530: /* struct_declaration_list: struct_declaration */ -#line 3490 "MachineIndependent/glslang.y" + case 537: /* struct_declaration_list: struct_declaration */ +#line 3548 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 10314 "MachineIndependent/glslang_tab.cpp" +#line 10797 "MachineIndependent/glslang_tab.cpp" break; - case 531: /* struct_declaration_list: struct_declaration_list struct_declaration */ -#line 3493 "MachineIndependent/glslang.y" + case 538: /* struct_declaration_list: struct_declaration_list struct_declaration */ +#line 3551 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -10325,11 +10808,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 10329 "MachineIndependent/glslang_tab.cpp" +#line 10812 "MachineIndependent/glslang_tab.cpp" break; - case 532: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ -#line 3506 "MachineIndependent/glslang.y" + case 539: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ +#line 3564 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10352,11 +10835,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10356 "MachineIndependent/glslang_tab.cpp" +#line 10839 "MachineIndependent/glslang_tab.cpp" break; - case 533: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ -#line 3528 "MachineIndependent/glslang.y" + case 540: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ +#line 3586 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10381,38 +10864,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10385 "MachineIndependent/glslang_tab.cpp" +#line 10868 "MachineIndependent/glslang_tab.cpp" break; - case 534: /* struct_declarator_list: struct_declarator */ -#line 3555 "MachineIndependent/glslang.y" + case 541: /* struct_declarator_list: struct_declarator */ +#line 3613 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10394 "MachineIndependent/glslang_tab.cpp" +#line 10877 "MachineIndependent/glslang_tab.cpp" break; - case 535: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ -#line 3559 "MachineIndependent/glslang.y" + case 542: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ +#line 3617 "MachineIndependent/glslang.y" { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10402 "MachineIndependent/glslang_tab.cpp" +#line 10885 "MachineIndependent/glslang_tab.cpp" break; - case 536: /* struct_declarator: IDENTIFIER */ -#line 3565 "MachineIndependent/glslang.y" + case 543: /* struct_declarator: IDENTIFIER */ +#line 3623 "MachineIndependent/glslang.y" { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 10412 "MachineIndependent/glslang_tab.cpp" +#line 10895 "MachineIndependent/glslang_tab.cpp" break; - case 537: /* struct_declarator: IDENTIFIER array_specifier */ -#line 3570 "MachineIndependent/glslang.y" + case 544: /* struct_declarator: IDENTIFIER array_specifier */ +#line 3628 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -10421,246 +10904,246 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 10425 "MachineIndependent/glslang_tab.cpp" +#line 10908 "MachineIndependent/glslang_tab.cpp" break; - case 538: /* initializer: assignment_expression */ -#line 3581 "MachineIndependent/glslang.y" + case 545: /* initializer: assignment_expression */ +#line 3639 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10433 "MachineIndependent/glslang_tab.cpp" +#line 10916 "MachineIndependent/glslang_tab.cpp" break; - case 539: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ -#line 3585 "MachineIndependent/glslang.y" + case 546: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ +#line 3643 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 10444 "MachineIndependent/glslang_tab.cpp" +#line 10927 "MachineIndependent/glslang_tab.cpp" break; - case 540: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ -#line 3591 "MachineIndependent/glslang.y" + case 547: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ +#line 3649 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 10455 "MachineIndependent/glslang_tab.cpp" +#line 10938 "MachineIndependent/glslang_tab.cpp" break; - case 541: /* initializer: LEFT_BRACE RIGHT_BRACE */ -#line 3597 "MachineIndependent/glslang.y" + case 548: /* initializer: LEFT_BRACE RIGHT_BRACE */ +#line 3655 "MachineIndependent/glslang.y" { const char* initFeature = "empty { } initializer"; parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc); } -#line 10466 "MachineIndependent/glslang_tab.cpp" +#line 10949 "MachineIndependent/glslang_tab.cpp" break; - case 542: /* initializer_list: initializer */ -#line 3608 "MachineIndependent/glslang.y" + case 549: /* initializer_list: initializer */ +#line 3666 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 10474 "MachineIndependent/glslang_tab.cpp" +#line 10957 "MachineIndependent/glslang_tab.cpp" break; - case 543: /* initializer_list: initializer_list COMMA initializer */ -#line 3611 "MachineIndependent/glslang.y" + case 550: /* initializer_list: initializer_list COMMA initializer */ +#line 3669 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 10482 "MachineIndependent/glslang_tab.cpp" +#line 10965 "MachineIndependent/glslang_tab.cpp" break; - case 544: /* declaration_statement: declaration */ -#line 3618 "MachineIndependent/glslang.y" + case 551: /* declaration_statement: declaration */ +#line 3676 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10488 "MachineIndependent/glslang_tab.cpp" +#line 10971 "MachineIndependent/glslang_tab.cpp" break; - case 545: /* statement: compound_statement */ -#line 3622 "MachineIndependent/glslang.y" + case 552: /* statement: compound_statement */ +#line 3680 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10494 "MachineIndependent/glslang_tab.cpp" +#line 10977 "MachineIndependent/glslang_tab.cpp" break; - case 546: /* statement: simple_statement */ -#line 3623 "MachineIndependent/glslang.y" + case 553: /* statement: simple_statement */ +#line 3681 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10500 "MachineIndependent/glslang_tab.cpp" +#line 10983 "MachineIndependent/glslang_tab.cpp" break; - case 547: /* simple_statement: declaration_statement */ -#line 3629 "MachineIndependent/glslang.y" + case 554: /* simple_statement: declaration_statement */ +#line 3687 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10506 "MachineIndependent/glslang_tab.cpp" +#line 10989 "MachineIndependent/glslang_tab.cpp" break; - case 548: /* simple_statement: expression_statement */ -#line 3630 "MachineIndependent/glslang.y" + case 555: /* simple_statement: expression_statement */ +#line 3688 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10512 "MachineIndependent/glslang_tab.cpp" +#line 10995 "MachineIndependent/glslang_tab.cpp" break; - case 549: /* simple_statement: selection_statement */ -#line 3631 "MachineIndependent/glslang.y" + case 556: /* simple_statement: selection_statement */ +#line 3689 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10518 "MachineIndependent/glslang_tab.cpp" +#line 11001 "MachineIndependent/glslang_tab.cpp" break; - case 550: /* simple_statement: switch_statement */ -#line 3632 "MachineIndependent/glslang.y" + case 557: /* simple_statement: switch_statement */ +#line 3690 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10524 "MachineIndependent/glslang_tab.cpp" +#line 11007 "MachineIndependent/glslang_tab.cpp" break; - case 551: /* simple_statement: case_label */ -#line 3633 "MachineIndependent/glslang.y" + case 558: /* simple_statement: case_label */ +#line 3691 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10530 "MachineIndependent/glslang_tab.cpp" +#line 11013 "MachineIndependent/glslang_tab.cpp" break; - case 552: /* simple_statement: iteration_statement */ -#line 3634 "MachineIndependent/glslang.y" + case 559: /* simple_statement: iteration_statement */ +#line 3692 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10536 "MachineIndependent/glslang_tab.cpp" +#line 11019 "MachineIndependent/glslang_tab.cpp" break; - case 553: /* simple_statement: jump_statement */ -#line 3635 "MachineIndependent/glslang.y" + case 560: /* simple_statement: jump_statement */ +#line 3693 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10542 "MachineIndependent/glslang_tab.cpp" +#line 11025 "MachineIndependent/glslang_tab.cpp" break; - case 554: /* simple_statement: demote_statement */ -#line 3637 "MachineIndependent/glslang.y" + case 561: /* simple_statement: demote_statement */ +#line 3695 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10548 "MachineIndependent/glslang_tab.cpp" +#line 11031 "MachineIndependent/glslang_tab.cpp" break; - case 555: /* demote_statement: DEMOTE SEMICOLON */ -#line 3643 "MachineIndependent/glslang.y" + case 562: /* demote_statement: DEMOTE SEMICOLON */ +#line 3701 "MachineIndependent/glslang.y" { 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 10558 "MachineIndependent/glslang_tab.cpp" +#line 11041 "MachineIndependent/glslang_tab.cpp" break; - case 556: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3652 "MachineIndependent/glslang.y" + case 563: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 3710 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10564 "MachineIndependent/glslang_tab.cpp" +#line 11047 "MachineIndependent/glslang_tab.cpp" break; - case 557: /* $@5: %empty */ -#line 3653 "MachineIndependent/glslang.y" + case 564: /* $@5: %empty */ +#line 3711 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 10573 "MachineIndependent/glslang_tab.cpp" +#line 11056 "MachineIndependent/glslang_tab.cpp" break; - case 558: /* $@6: %empty */ -#line 3657 "MachineIndependent/glslang.y" + case 565: /* $@6: %empty */ +#line 3715 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 10582 "MachineIndependent/glslang_tab.cpp" +#line 11065 "MachineIndependent/glslang_tab.cpp" break; - case 559: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ -#line 3661 "MachineIndependent/glslang.y" + case 566: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ +#line 3719 "MachineIndependent/glslang.y" { 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 10592 "MachineIndependent/glslang_tab.cpp" +#line 11075 "MachineIndependent/glslang_tab.cpp" break; - case 560: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3669 "MachineIndependent/glslang.y" + case 567: /* statement_no_new_scope: compound_statement_no_new_scope */ +#line 3727 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10598 "MachineIndependent/glslang_tab.cpp" +#line 11081 "MachineIndependent/glslang_tab.cpp" break; - case 561: /* statement_no_new_scope: simple_statement */ -#line 3670 "MachineIndependent/glslang.y" + case 568: /* statement_no_new_scope: simple_statement */ +#line 3728 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10604 "MachineIndependent/glslang_tab.cpp" +#line 11087 "MachineIndependent/glslang_tab.cpp" break; - case 562: /* $@7: %empty */ -#line 3674 "MachineIndependent/glslang.y" + case 569: /* $@7: %empty */ +#line 3732 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 10612 "MachineIndependent/glslang_tab.cpp" +#line 11095 "MachineIndependent/glslang_tab.cpp" break; - case 563: /* statement_scoped: $@7 compound_statement */ -#line 3677 "MachineIndependent/glslang.y" + case 570: /* statement_scoped: $@7 compound_statement */ +#line 3735 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10621 "MachineIndependent/glslang_tab.cpp" +#line 11104 "MachineIndependent/glslang_tab.cpp" break; - case 564: /* $@8: %empty */ -#line 3681 "MachineIndependent/glslang.y" + case 571: /* $@8: %empty */ +#line 3739 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10631 "MachineIndependent/glslang_tab.cpp" +#line 11114 "MachineIndependent/glslang_tab.cpp" break; - case 565: /* statement_scoped: $@8 simple_statement */ -#line 3686 "MachineIndependent/glslang.y" + case 572: /* statement_scoped: $@8 simple_statement */ +#line 3744 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10642 "MachineIndependent/glslang_tab.cpp" +#line 11125 "MachineIndependent/glslang_tab.cpp" break; - case 566: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 3695 "MachineIndependent/glslang.y" + case 573: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 3753 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10650 "MachineIndependent/glslang_tab.cpp" +#line 11133 "MachineIndependent/glslang_tab.cpp" break; - case 567: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 3698 "MachineIndependent/glslang.y" + case 574: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ +#line 3756 "MachineIndependent/glslang.y" { 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 10660 "MachineIndependent/glslang_tab.cpp" +#line 11143 "MachineIndependent/glslang_tab.cpp" break; - case 568: /* statement_list: statement */ -#line 3706 "MachineIndependent/glslang.y" + case 575: /* statement_list: statement */ +#line 3764 "MachineIndependent/glslang.y" { (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 || @@ -10669,11 +11152,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 10673 "MachineIndependent/glslang_tab.cpp" +#line 11156 "MachineIndependent/glslang_tab.cpp" break; - case 569: /* statement_list: statement_list statement */ -#line 3714 "MachineIndependent/glslang.y" + case 576: /* statement_list: statement_list statement */ +#line 3772 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { @@ -10682,77 +11165,77 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 10686 "MachineIndependent/glslang_tab.cpp" +#line 11169 "MachineIndependent/glslang_tab.cpp" break; - case 570: /* expression_statement: SEMICOLON */ -#line 3725 "MachineIndependent/glslang.y" + case 577: /* expression_statement: SEMICOLON */ +#line 3783 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10692 "MachineIndependent/glslang_tab.cpp" +#line 11175 "MachineIndependent/glslang_tab.cpp" break; - case 571: /* expression_statement: expression SEMICOLON */ -#line 3726 "MachineIndependent/glslang.y" + case 578: /* expression_statement: expression SEMICOLON */ +#line 3784 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 10698 "MachineIndependent/glslang_tab.cpp" +#line 11181 "MachineIndependent/glslang_tab.cpp" break; - case 572: /* selection_statement: selection_statement_nonattributed */ -#line 3730 "MachineIndependent/glslang.y" + case 579: /* selection_statement: selection_statement_nonattributed */ +#line 3788 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10706 "MachineIndependent/glslang_tab.cpp" +#line 11189 "MachineIndependent/glslang_tab.cpp" break; - case 573: /* selection_statement: attribute selection_statement_nonattributed */ -#line 3734 "MachineIndependent/glslang.y" + case 580: /* selection_statement: attribute selection_statement_nonattributed */ +#line 3792 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10716 "MachineIndependent/glslang_tab.cpp" +#line 11199 "MachineIndependent/glslang_tab.cpp" break; - case 574: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 3742 "MachineIndependent/glslang.y" + case 581: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ +#line 3800 "MachineIndependent/glslang.y" { 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 10725 "MachineIndependent/glslang_tab.cpp" +#line 11208 "MachineIndependent/glslang_tab.cpp" break; - case 575: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 3749 "MachineIndependent/glslang.y" + case 582: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ +#line 3807 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 10734 "MachineIndependent/glslang_tab.cpp" +#line 11217 "MachineIndependent/glslang_tab.cpp" break; - case 576: /* selection_rest_statement: statement_scoped */ -#line 3753 "MachineIndependent/glslang.y" + case 583: /* selection_rest_statement: statement_scoped */ +#line 3811 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 10743 "MachineIndependent/glslang_tab.cpp" +#line 11226 "MachineIndependent/glslang_tab.cpp" break; - case 577: /* condition: expression */ -#line 3761 "MachineIndependent/glslang.y" + case 584: /* condition: expression */ +#line 3819 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 10752 "MachineIndependent/glslang_tab.cpp" +#line 11235 "MachineIndependent/glslang_tab.cpp" break; - case 578: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 3765 "MachineIndependent/glslang.y" + case 585: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 3823 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -10763,29 +11246,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 10767 "MachineIndependent/glslang_tab.cpp" +#line 11250 "MachineIndependent/glslang_tab.cpp" break; - case 579: /* switch_statement: switch_statement_nonattributed */ -#line 3778 "MachineIndependent/glslang.y" + case 586: /* switch_statement: switch_statement_nonattributed */ +#line 3836 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10775 "MachineIndependent/glslang_tab.cpp" +#line 11258 "MachineIndependent/glslang_tab.cpp" break; - case 580: /* switch_statement: attribute switch_statement_nonattributed */ -#line 3782 "MachineIndependent/glslang.y" + case 587: /* switch_statement: attribute switch_statement_nonattributed */ +#line 3840 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10785 "MachineIndependent/glslang_tab.cpp" +#line 11268 "MachineIndependent/glslang_tab.cpp" break; - case 581: /* $@9: %empty */ -#line 3790 "MachineIndependent/glslang.y" + case 588: /* $@9: %empty */ +#line 3848 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -10794,11 +11277,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 10798 "MachineIndependent/glslang_tab.cpp" +#line 11281 "MachineIndependent/glslang_tab.cpp" break; - case 582: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 3798 "MachineIndependent/glslang.y" + case 589: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ +#line 3856 "MachineIndependent/glslang.y" { (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(); @@ -10808,27 +11291,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10812 "MachineIndependent/glslang_tab.cpp" +#line 11295 "MachineIndependent/glslang_tab.cpp" break; - case 583: /* switch_statement_list: %empty */ -#line 3810 "MachineIndependent/glslang.y" + case 590: /* switch_statement_list: %empty */ +#line 3868 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 10820 "MachineIndependent/glslang_tab.cpp" +#line 11303 "MachineIndependent/glslang_tab.cpp" break; - case 584: /* switch_statement_list: statement_list */ -#line 3813 "MachineIndependent/glslang.y" + case 591: /* switch_statement_list: statement_list */ +#line 3871 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10828 "MachineIndependent/glslang_tab.cpp" +#line 11311 "MachineIndependent/glslang_tab.cpp" break; - case 585: /* case_label: CASE expression COLON */ -#line 3819 "MachineIndependent/glslang.y" + case 592: /* case_label: CASE expression COLON */ +#line 3877 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10841,11 +11324,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 10845 "MachineIndependent/glslang_tab.cpp" +#line 11328 "MachineIndependent/glslang_tab.cpp" break; - case 586: /* case_label: DEFAULT COLON */ -#line 3831 "MachineIndependent/glslang.y" + case 593: /* case_label: DEFAULT COLON */ +#line 3889 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -10855,29 +11338,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 10859 "MachineIndependent/glslang_tab.cpp" +#line 11342 "MachineIndependent/glslang_tab.cpp" break; - case 587: /* iteration_statement: iteration_statement_nonattributed */ -#line 3843 "MachineIndependent/glslang.y" + case 594: /* iteration_statement: iteration_statement_nonattributed */ +#line 3901 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10867 "MachineIndependent/glslang_tab.cpp" +#line 11350 "MachineIndependent/glslang_tab.cpp" break; - case 588: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 3847 "MachineIndependent/glslang.y" + case 595: /* iteration_statement: attribute iteration_statement_nonattributed */ +#line 3905 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10877 "MachineIndependent/glslang_tab.cpp" +#line 11360 "MachineIndependent/glslang_tab.cpp" break; - case 589: /* $@10: %empty */ -#line 3855 "MachineIndependent/glslang.y" + case 596: /* $@10: %empty */ +#line 3913 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -10886,11 +11369,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10890 "MachineIndependent/glslang_tab.cpp" +#line 11373 "MachineIndependent/glslang_tab.cpp" break; - case 590: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ -#line 3863 "MachineIndependent/glslang.y" + case 597: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ +#line 3921 "MachineIndependent/glslang.y" { 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); @@ -10898,21 +11381,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10902 "MachineIndependent/glslang_tab.cpp" +#line 11385 "MachineIndependent/glslang_tab.cpp" break; - case 591: /* $@11: %empty */ -#line 3870 "MachineIndependent/glslang.y" + case 598: /* $@11: %empty */ +#line 3928 "MachineIndependent/glslang.y" { ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10912 "MachineIndependent/glslang_tab.cpp" +#line 11395 "MachineIndependent/glslang_tab.cpp" break; - case 592: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 3875 "MachineIndependent/glslang.y" + case 599: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ +#line 3933 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -10924,22 +11407,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10928 "MachineIndependent/glslang_tab.cpp" +#line 11411 "MachineIndependent/glslang_tab.cpp" break; - case 593: /* $@12: %empty */ -#line 3886 "MachineIndependent/glslang.y" + case 600: /* $@12: %empty */ +#line 3944 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 10939 "MachineIndependent/glslang_tab.cpp" +#line 11422 "MachineIndependent/glslang_tab.cpp" break; - case 594: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 3892 "MachineIndependent/glslang.y" + case 601: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ +#line 3950 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -10952,81 +11435,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 10956 "MachineIndependent/glslang_tab.cpp" +#line 11439 "MachineIndependent/glslang_tab.cpp" break; - case 595: /* for_init_statement: expression_statement */ -#line 3907 "MachineIndependent/glslang.y" + case 602: /* for_init_statement: expression_statement */ +#line 3965 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10964 "MachineIndependent/glslang_tab.cpp" +#line 11447 "MachineIndependent/glslang_tab.cpp" break; - case 596: /* for_init_statement: declaration_statement */ -#line 3910 "MachineIndependent/glslang.y" + case 603: /* for_init_statement: declaration_statement */ +#line 3968 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10972 "MachineIndependent/glslang_tab.cpp" +#line 11455 "MachineIndependent/glslang_tab.cpp" break; - case 597: /* conditionopt: condition */ -#line 3916 "MachineIndependent/glslang.y" + case 604: /* conditionopt: condition */ +#line 3974 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10980 "MachineIndependent/glslang_tab.cpp" +#line 11463 "MachineIndependent/glslang_tab.cpp" break; - case 598: /* conditionopt: %empty */ -#line 3919 "MachineIndependent/glslang.y" + case 605: /* conditionopt: %empty */ +#line 3977 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 10988 "MachineIndependent/glslang_tab.cpp" +#line 11471 "MachineIndependent/glslang_tab.cpp" break; - case 599: /* for_rest_statement: conditionopt SEMICOLON */ -#line 3925 "MachineIndependent/glslang.y" + case 606: /* for_rest_statement: conditionopt SEMICOLON */ +#line 3983 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 10997 "MachineIndependent/glslang_tab.cpp" +#line 11480 "MachineIndependent/glslang_tab.cpp" break; - case 600: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 3929 "MachineIndependent/glslang.y" + case 607: /* for_rest_statement: conditionopt SEMICOLON expression */ +#line 3987 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 11006 "MachineIndependent/glslang_tab.cpp" +#line 11489 "MachineIndependent/glslang_tab.cpp" break; - case 601: /* jump_statement: CONTINUE SEMICOLON */ -#line 3936 "MachineIndependent/glslang.y" + case 608: /* jump_statement: CONTINUE SEMICOLON */ +#line 3994 "MachineIndependent/glslang.y" { 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 11016 "MachineIndependent/glslang_tab.cpp" +#line 11499 "MachineIndependent/glslang_tab.cpp" break; - case 602: /* jump_statement: BREAK SEMICOLON */ -#line 3941 "MachineIndependent/glslang.y" + case 609: /* jump_statement: BREAK SEMICOLON */ +#line 3999 "MachineIndependent/glslang.y" { 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 11026 "MachineIndependent/glslang_tab.cpp" +#line 11509 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* jump_statement: RETURN SEMICOLON */ -#line 3946 "MachineIndependent/glslang.y" + case 610: /* jump_statement: RETURN SEMICOLON */ +#line 4004 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -11034,101 +11517,101 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 11038 "MachineIndependent/glslang_tab.cpp" +#line 11521 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* jump_statement: RETURN expression SEMICOLON */ -#line 3953 "MachineIndependent/glslang.y" + case 611: /* jump_statement: RETURN expression SEMICOLON */ +#line 4011 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 11046 "MachineIndependent/glslang_tab.cpp" +#line 11529 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* jump_statement: DISCARD SEMICOLON */ -#line 3956 "MachineIndependent/glslang.y" + case 612: /* jump_statement: DISCARD SEMICOLON */ +#line 4014 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 11055 "MachineIndependent/glslang_tab.cpp" +#line 11538 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 3960 "MachineIndependent/glslang.y" + case 613: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ +#line 4018 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 11064 "MachineIndependent/glslang_tab.cpp" +#line 11547 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 3965 "MachineIndependent/glslang.y" + case 614: /* jump_statement: TERMINATE_RAY SEMICOLON */ +#line 4023 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); } -#line 11073 "MachineIndependent/glslang_tab.cpp" +#line 11556 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 3969 "MachineIndependent/glslang.y" + case 615: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ +#line 4027 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); } -#line 11082 "MachineIndependent/glslang_tab.cpp" +#line 11565 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* translation_unit: external_declaration */ -#line 3979 "MachineIndependent/glslang.y" + case 616: /* translation_unit: external_declaration */ +#line 4037 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 11091 "MachineIndependent/glslang_tab.cpp" +#line 11574 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* translation_unit: translation_unit external_declaration */ -#line 3983 "MachineIndependent/glslang.y" + case 617: /* translation_unit: translation_unit external_declaration */ +#line 4041 "MachineIndependent/glslang.y" { 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 11102 "MachineIndependent/glslang_tab.cpp" +#line 11585 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* external_declaration: function_definition */ -#line 3992 "MachineIndependent/glslang.y" + case 618: /* external_declaration: function_definition */ +#line 4050 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11110 "MachineIndependent/glslang_tab.cpp" +#line 11593 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* external_declaration: declaration */ -#line 3995 "MachineIndependent/glslang.y" + case 619: /* external_declaration: declaration */ +#line 4053 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11118 "MachineIndependent/glslang_tab.cpp" +#line 11601 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* external_declaration: SEMICOLON */ -#line 3999 "MachineIndependent/glslang.y" + case 620: /* external_declaration: SEMICOLON */ +#line 4057 "MachineIndependent/glslang.y" { 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 11128 "MachineIndependent/glslang_tab.cpp" +#line 11611 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* $@13: %empty */ -#line 4008 "MachineIndependent/glslang.y" + case 621: /* $@13: %empty */ +#line 4066 "MachineIndependent/glslang.y" { (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); @@ -11141,11 +11624,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 11145 "MachineIndependent/glslang_tab.cpp" +#line 11628 "MachineIndependent/glslang_tab.cpp" break; - case 615: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 4020 "MachineIndependent/glslang.y" + case 622: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ +#line 4078 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -11172,51 +11655,563 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 11176 "MachineIndependent/glslang_tab.cpp" +#line 11659 "MachineIndependent/glslang_tab.cpp" break; - case 616: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4050 "MachineIndependent/glslang.y" + case 623: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4108 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); } -#line 11184 "MachineIndependent/glslang_tab.cpp" +#line 11667 "MachineIndependent/glslang_tab.cpp" break; - case 617: /* attribute_list: single_attribute */ -#line 4055 "MachineIndependent/glslang.y" + case 624: /* attribute_list: single_attribute */ +#line 4113 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 11192 "MachineIndependent/glslang_tab.cpp" +#line 11675 "MachineIndependent/glslang_tab.cpp" break; - case 618: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4058 "MachineIndependent/glslang.y" + case 625: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4116 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 11200 "MachineIndependent/glslang_tab.cpp" +#line 11683 "MachineIndependent/glslang_tab.cpp" break; - case 619: /* single_attribute: IDENTIFIER */ -#line 4063 "MachineIndependent/glslang.y" + case 626: /* single_attribute: IDENTIFIER */ +#line 4121 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 11208 "MachineIndependent/glslang_tab.cpp" +#line 11691 "MachineIndependent/glslang_tab.cpp" break; - case 620: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4066 "MachineIndependent/glslang.y" + case 627: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4124 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 11216 "MachineIndependent/glslang_tab.cpp" +#line 11699 "MachineIndependent/glslang_tab.cpp" + break; + + case 628: /* spirv_requirements_list: spirv_requirements_parameter */ +#line 4131 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq); + } +#line 11707 "MachineIndependent/glslang_tab.cpp" + break; + + case 629: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ +#line 4134 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq)); + } +#line 11715 "MachineIndependent/glslang_tab.cpp" + break; + + case 630: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ +#line 4139 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr); + } +#line 11723 "MachineIndependent/glslang_tab.cpp" + break; + + case 631: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ +#line 4142 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + } +#line 11731 "MachineIndependent/glslang_tab.cpp" + break; + + case 632: /* spirv_extension_list: STRING_LITERAL */ +#line 4147 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); + } +#line 11739 "MachineIndependent/glslang_tab.cpp" + break; + + case 633: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ +#line 4150 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); + } +#line 11747 "MachineIndependent/glslang_tab.cpp" + break; + + case 634: /* spirv_capability_list: INTCONSTANT */ +#line 4155 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); + } +#line 11755 "MachineIndependent/glslang_tab.cpp" + break; + + case 635: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ +#line 4158 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); + } +#line 11763 "MachineIndependent/glslang_tab.cpp" + break; + + case 636: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4163 "MachineIndependent/glslang.y" + { + parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); + (yyval.interm.intermNode) = 0; + } +#line 11772 "MachineIndependent/glslang_tab.cpp" + break; + + case 637: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4167 "MachineIndependent/glslang.y" + { + parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); + parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); + (yyval.interm.intermNode) = 0; + } +#line 11782 "MachineIndependent/glslang_tab.cpp" + break; + + case 638: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4172 "MachineIndependent/glslang.y" + { + parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + (yyval.interm.intermNode) = 0; + } +#line 11791 "MachineIndependent/glslang_tab.cpp" + break; + + case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4176 "MachineIndependent/glslang.y" + { + parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); + parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + (yyval.interm.intermNode) = 0; + } +#line 11801 "MachineIndependent/glslang_tab.cpp" + break; + + case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ +#line 4181 "MachineIndependent/glslang.y" + { + parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + (yyval.interm.intermNode) = 0; + } +#line 11810 "MachineIndependent/glslang_tab.cpp" + break; + + case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ +#line 4185 "MachineIndependent/glslang.y" + { + parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); + parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + (yyval.interm.intermNode) = 0; + } +#line 11820 "MachineIndependent/glslang_tab.cpp" + break; + + case 642: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ +#line 4192 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); + } +#line 11828 "MachineIndependent/glslang_tab.cpp" + break; + + case 643: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ +#line 4195 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); + } +#line 11836 "MachineIndependent/glslang_tab.cpp" + break; + + case 644: /* spirv_execution_mode_parameter: FLOATCONSTANT */ +#line 4200 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); + } +#line 11844 "MachineIndependent/glslang_tab.cpp" + break; + + case 645: /* spirv_execution_mode_parameter: INTCONSTANT */ +#line 4203 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); + } +#line 11852 "MachineIndependent/glslang_tab.cpp" + break; + + case 646: /* spirv_execution_mode_parameter: UINTCONSTANT */ +#line 4206 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); + } +#line 11860 "MachineIndependent/glslang_tab.cpp" + break; + + case 647: /* spirv_execution_mode_parameter: BOOLCONSTANT */ +#line 4209 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); + } +#line 11868 "MachineIndependent/glslang_tab.cpp" + break; + + case 648: /* spirv_execution_mode_parameter: STRING_LITERAL */ +#line 4212 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); + } +#line 11876 "MachineIndependent/glslang_tab.cpp" + break; + + case 649: /* spirv_execution_mode_id_parameter_list: constant_expression */ +#line 4217 "MachineIndependent/glslang.y" + { + if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtString) + parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); + (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode)); + } +#line 11890 "MachineIndependent/glslang_tab.cpp" + break; + + case 650: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ +#line 4226 "MachineIndependent/glslang.y" + { + if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtString) + parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode)); + } +#line 11904 "MachineIndependent/glslang_tab.cpp" + break; + + case 651: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4237 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-3].lex).loc); + (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass; + (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i; + } +#line 11914 "MachineIndependent/glslang_tab.cpp" + break; + + case 652: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4242 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-5].lex).loc); + parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); + (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass; + (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i; + } +#line 11925 "MachineIndependent/glslang_tab.cpp" + break; + + case 653: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4250 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-3].lex).loc); + (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); + } +#line 11934 "MachineIndependent/glslang_tab.cpp" + break; + + case 654: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4254 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-5].lex).loc); + parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); + (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); + } +#line 11944 "MachineIndependent/glslang_tab.cpp" + break; + + case 655: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4259 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-5].lex).loc); + (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + } +#line 11953 "MachineIndependent/glslang_tab.cpp" + break; + + case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4263 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-7].lex).loc); + parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); + (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + } +#line 11963 "MachineIndependent/glslang_tab.cpp" + break; + + case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4268 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-5].lex).loc); + (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + } +#line 11972 "MachineIndependent/glslang_tab.cpp" + break; + + case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4272 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-7].lex).loc); + parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); + (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + } +#line 11982 "MachineIndependent/glslang_tab.cpp" + break; + + case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4277 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-5].lex).loc); + (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + } +#line 11991 "MachineIndependent/glslang_tab.cpp" + break; + + case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4281 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-7].lex).loc); + parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); + (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); + } +#line 12001 "MachineIndependent/glslang_tab.cpp" + break; + + case 661: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ +#line 4288 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); + } +#line 12009 "MachineIndependent/glslang_tab.cpp" + break; + + case 662: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ +#line 4291 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); + } +#line 12017 "MachineIndependent/glslang_tab.cpp" + break; + + case 663: /* spirv_decorate_parameter: FLOATCONSTANT */ +#line 4296 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); + } +#line 12025 "MachineIndependent/glslang_tab.cpp" + break; + + case 664: /* spirv_decorate_parameter: INTCONSTANT */ +#line 4299 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); + } +#line 12033 "MachineIndependent/glslang_tab.cpp" + break; + + case 665: /* spirv_decorate_parameter: UINTCONSTANT */ +#line 4302 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); + } +#line 12041 "MachineIndependent/glslang_tab.cpp" + break; + + case 666: /* spirv_decorate_parameter: BOOLCONSTANT */ +#line 4305 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); + } +#line 12049 "MachineIndependent/glslang_tab.cpp" + break; + + case 667: /* spirv_decorate_id_parameter_list: constant_expression */ +#line 4310 "MachineIndependent/glslang.y" + { + if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool) + parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); + (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode)); + } +#line 12062 "MachineIndependent/glslang_tab.cpp" + break; + + case 668: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression */ +#line 4318 "MachineIndependent/glslang.y" + { + if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtUint && + (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtBool) + parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode)); + } +#line 12075 "MachineIndependent/glslang_tab.cpp" + break; + + case 669: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ +#line 4328 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate( + parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); + } +#line 12084 "MachineIndependent/glslang_tab.cpp" + break; + + case 670: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ +#line 4332 "MachineIndependent/glslang.y" + { + (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); + } +#line 12092 "MachineIndependent/glslang_tab.cpp" + break; + + case 671: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4337 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams)); + } +#line 12101 "MachineIndependent/glslang_tab.cpp" + break; + + case 672: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4341 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); + (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams)); + } +#line 12111 "MachineIndependent/glslang_tab.cpp" + break; + + case 673: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4346 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel()); + (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); + } +#line 12120 "MachineIndependent/glslang_tab.cpp" + break; + + case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4350 "MachineIndependent/glslang.y" + { + (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel()); + parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); + (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); + } +#line 12130 "MachineIndependent/glslang_tab.cpp" + break; + + case 675: /* spirv_type_parameter_list: spirv_type_parameter */ +#line 4357 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams); + } +#line 12138 "MachineIndependent/glslang_tab.cpp" + break; + + case 676: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ +#line 4360 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams)); + } +#line 12146 "MachineIndependent/glslang_tab.cpp" + break; + + case 677: /* spirv_type_parameter: constant_expression */ +#line 4365 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion()); + } +#line 12154 "MachineIndependent/glslang_tab.cpp" + break; + + case 678: /* spirv_type_parameter: type_specifier */ +#line 4368 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type)); + } +#line 12162 "MachineIndependent/glslang_tab.cpp" + break; + + case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4373 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); + } +#line 12170 "MachineIndependent/glslang_tab.cpp" + break; + + case 680: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4376 "MachineIndependent/glslang.y" + { + parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); + (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); + } +#line 12179 "MachineIndependent/glslang_tab.cpp" + break; + + case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ +#line 4382 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst); + } +#line 12187 "MachineIndependent/glslang_tab.cpp" + break; + + case 682: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ +#line 4385 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst)); + } +#line 12195 "MachineIndependent/glslang_tab.cpp" + break; + + case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ +#line 4390 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string); + } +#line 12203 "MachineIndependent/glslang_tab.cpp" + break; + + case 684: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ +#line 4393 "MachineIndependent/glslang.y" + { + (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i); + } +#line 12211 "MachineIndependent/glslang_tab.cpp" break; -#line 11220 "MachineIndependent/glslang_tab.cpp" +#line 12215 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -11441,5 +12436,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4071 "MachineIndependent/glslang.y" +#line 4398 "MachineIndependent/glslang.y" diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index 7f69477fdb..596a10e6d9 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -1,8 +1,8 @@ -/* A Bison parser, made by GNU Bison 3.7.5. */ +/* A Bison parser, made by GNU Bison 3.7.4. */ /* Bison interface for Yacc-like parsers in C - Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation, + Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify @@ -368,134 +368,144 @@ extern int yydebug; USUBPASSINPUTMS = 569, /* USUBPASSINPUTMS */ F16SUBPASSINPUT = 570, /* F16SUBPASSINPUT */ F16SUBPASSINPUTMS = 571, /* F16SUBPASSINPUTMS */ - LEFT_OP = 572, /* LEFT_OP */ - RIGHT_OP = 573, /* RIGHT_OP */ - INC_OP = 574, /* INC_OP */ - DEC_OP = 575, /* DEC_OP */ - LE_OP = 576, /* LE_OP */ - GE_OP = 577, /* GE_OP */ - EQ_OP = 578, /* EQ_OP */ - NE_OP = 579, /* NE_OP */ - AND_OP = 580, /* AND_OP */ - OR_OP = 581, /* OR_OP */ - XOR_OP = 582, /* XOR_OP */ - MUL_ASSIGN = 583, /* MUL_ASSIGN */ - DIV_ASSIGN = 584, /* DIV_ASSIGN */ - ADD_ASSIGN = 585, /* ADD_ASSIGN */ - MOD_ASSIGN = 586, /* MOD_ASSIGN */ - LEFT_ASSIGN = 587, /* LEFT_ASSIGN */ - RIGHT_ASSIGN = 588, /* RIGHT_ASSIGN */ - AND_ASSIGN = 589, /* AND_ASSIGN */ - XOR_ASSIGN = 590, /* XOR_ASSIGN */ - OR_ASSIGN = 591, /* OR_ASSIGN */ - SUB_ASSIGN = 592, /* SUB_ASSIGN */ - STRING_LITERAL = 593, /* STRING_LITERAL */ - LEFT_PAREN = 594, /* LEFT_PAREN */ - RIGHT_PAREN = 595, /* RIGHT_PAREN */ - LEFT_BRACKET = 596, /* LEFT_BRACKET */ - RIGHT_BRACKET = 597, /* RIGHT_BRACKET */ - LEFT_BRACE = 598, /* LEFT_BRACE */ - RIGHT_BRACE = 599, /* RIGHT_BRACE */ - DOT = 600, /* DOT */ - COMMA = 601, /* COMMA */ - COLON = 602, /* COLON */ - EQUAL = 603, /* EQUAL */ - SEMICOLON = 604, /* SEMICOLON */ - BANG = 605, /* BANG */ - DASH = 606, /* DASH */ - TILDE = 607, /* TILDE */ - PLUS = 608, /* PLUS */ - STAR = 609, /* STAR */ - SLASH = 610, /* SLASH */ - PERCENT = 611, /* PERCENT */ - LEFT_ANGLE = 612, /* LEFT_ANGLE */ - RIGHT_ANGLE = 613, /* RIGHT_ANGLE */ - VERTICAL_BAR = 614, /* VERTICAL_BAR */ - CARET = 615, /* CARET */ - AMPERSAND = 616, /* AMPERSAND */ - QUESTION = 617, /* QUESTION */ - INVARIANT = 618, /* INVARIANT */ - HIGH_PRECISION = 619, /* HIGH_PRECISION */ - MEDIUM_PRECISION = 620, /* MEDIUM_PRECISION */ - LOW_PRECISION = 621, /* LOW_PRECISION */ - PRECISION = 622, /* PRECISION */ - PACKED = 623, /* PACKED */ - RESOURCE = 624, /* RESOURCE */ - SUPERP = 625, /* SUPERP */ - FLOATCONSTANT = 626, /* FLOATCONSTANT */ - INTCONSTANT = 627, /* INTCONSTANT */ - UINTCONSTANT = 628, /* UINTCONSTANT */ - BOOLCONSTANT = 629, /* BOOLCONSTANT */ - IDENTIFIER = 630, /* IDENTIFIER */ - TYPE_NAME = 631, /* TYPE_NAME */ - CENTROID = 632, /* CENTROID */ - IN = 633, /* IN */ - OUT = 634, /* OUT */ - INOUT = 635, /* INOUT */ - STRUCT = 636, /* STRUCT */ - VOID = 637, /* VOID */ - WHILE = 638, /* WHILE */ - BREAK = 639, /* BREAK */ - CONTINUE = 640, /* CONTINUE */ - DO = 641, /* DO */ - ELSE = 642, /* ELSE */ - FOR = 643, /* FOR */ - IF = 644, /* IF */ - DISCARD = 645, /* DISCARD */ - RETURN = 646, /* RETURN */ - SWITCH = 647, /* SWITCH */ - CASE = 648, /* CASE */ - DEFAULT = 649, /* DEFAULT */ - TERMINATE_INVOCATION = 650, /* TERMINATE_INVOCATION */ - TERMINATE_RAY = 651, /* TERMINATE_RAY */ - IGNORE_INTERSECTION = 652, /* IGNORE_INTERSECTION */ - UNIFORM = 653, /* UNIFORM */ - SHARED = 654, /* SHARED */ - BUFFER = 655, /* BUFFER */ - FLAT = 656, /* FLAT */ - SMOOTH = 657, /* SMOOTH */ - LAYOUT = 658, /* LAYOUT */ - DOUBLECONSTANT = 659, /* DOUBLECONSTANT */ - INT16CONSTANT = 660, /* INT16CONSTANT */ - UINT16CONSTANT = 661, /* UINT16CONSTANT */ - FLOAT16CONSTANT = 662, /* FLOAT16CONSTANT */ - INT32CONSTANT = 663, /* INT32CONSTANT */ - UINT32CONSTANT = 664, /* UINT32CONSTANT */ - INT64CONSTANT = 665, /* INT64CONSTANT */ - UINT64CONSTANT = 666, /* UINT64CONSTANT */ - SUBROUTINE = 667, /* SUBROUTINE */ - DEMOTE = 668, /* DEMOTE */ - PAYLOADNV = 669, /* PAYLOADNV */ - PAYLOADINNV = 670, /* PAYLOADINNV */ - HITATTRNV = 671, /* HITATTRNV */ - CALLDATANV = 672, /* CALLDATANV */ - CALLDATAINNV = 673, /* CALLDATAINNV */ - PAYLOADEXT = 674, /* PAYLOADEXT */ - PAYLOADINEXT = 675, /* PAYLOADINEXT */ - HITATTREXT = 676, /* HITATTREXT */ - CALLDATAEXT = 677, /* CALLDATAEXT */ - CALLDATAINEXT = 678, /* CALLDATAINEXT */ - PATCH = 679, /* PATCH */ - SAMPLE = 680, /* SAMPLE */ - NONUNIFORM = 681, /* NONUNIFORM */ - COHERENT = 682, /* COHERENT */ - VOLATILE = 683, /* VOLATILE */ - RESTRICT = 684, /* RESTRICT */ - READONLY = 685, /* READONLY */ - WRITEONLY = 686, /* WRITEONLY */ - DEVICECOHERENT = 687, /* DEVICECOHERENT */ - QUEUEFAMILYCOHERENT = 688, /* QUEUEFAMILYCOHERENT */ - WORKGROUPCOHERENT = 689, /* WORKGROUPCOHERENT */ - SUBGROUPCOHERENT = 690, /* SUBGROUPCOHERENT */ - NONPRIVATE = 691, /* NONPRIVATE */ - SHADERCALLCOHERENT = 692, /* SHADERCALLCOHERENT */ - NOPERSPECTIVE = 693, /* NOPERSPECTIVE */ - EXPLICITINTERPAMD = 694, /* EXPLICITINTERPAMD */ - PERVERTEXNV = 695, /* PERVERTEXNV */ - PERPRIMITIVENV = 696, /* PERPRIMITIVENV */ - PERVIEWNV = 697, /* PERVIEWNV */ - PERTASKNV = 698, /* PERTASKNV */ - PRECISE = 699 /* PRECISE */ + SPIRV_INSTRUCTION = 572, /* SPIRV_INSTRUCTION */ + SPIRV_EXECUTION_MODE = 573, /* SPIRV_EXECUTION_MODE */ + SPIRV_EXECUTION_MODE_ID = 574, /* SPIRV_EXECUTION_MODE_ID */ + SPIRV_DECORATE = 575, /* SPIRV_DECORATE */ + SPIRV_DECORATE_ID = 576, /* SPIRV_DECORATE_ID */ + SPIRV_DECORATE_STRING = 577, /* SPIRV_DECORATE_STRING */ + SPIRV_TYPE = 578, /* SPIRV_TYPE */ + SPIRV_STORAGE_CLASS = 579, /* SPIRV_STORAGE_CLASS */ + SPIRV_BY_REFERENCE = 580, /* SPIRV_BY_REFERENCE */ + SPIRV_LITERAL = 581, /* SPIRV_LITERAL */ + LEFT_OP = 582, /* LEFT_OP */ + RIGHT_OP = 583, /* RIGHT_OP */ + INC_OP = 584, /* INC_OP */ + DEC_OP = 585, /* DEC_OP */ + LE_OP = 586, /* LE_OP */ + GE_OP = 587, /* GE_OP */ + EQ_OP = 588, /* EQ_OP */ + NE_OP = 589, /* NE_OP */ + AND_OP = 590, /* AND_OP */ + OR_OP = 591, /* OR_OP */ + XOR_OP = 592, /* XOR_OP */ + MUL_ASSIGN = 593, /* MUL_ASSIGN */ + DIV_ASSIGN = 594, /* DIV_ASSIGN */ + ADD_ASSIGN = 595, /* ADD_ASSIGN */ + MOD_ASSIGN = 596, /* MOD_ASSIGN */ + LEFT_ASSIGN = 597, /* LEFT_ASSIGN */ + RIGHT_ASSIGN = 598, /* RIGHT_ASSIGN */ + AND_ASSIGN = 599, /* AND_ASSIGN */ + XOR_ASSIGN = 600, /* XOR_ASSIGN */ + OR_ASSIGN = 601, /* OR_ASSIGN */ + SUB_ASSIGN = 602, /* SUB_ASSIGN */ + STRING_LITERAL = 603, /* STRING_LITERAL */ + LEFT_PAREN = 604, /* LEFT_PAREN */ + RIGHT_PAREN = 605, /* RIGHT_PAREN */ + LEFT_BRACKET = 606, /* LEFT_BRACKET */ + RIGHT_BRACKET = 607, /* RIGHT_BRACKET */ + LEFT_BRACE = 608, /* LEFT_BRACE */ + RIGHT_BRACE = 609, /* RIGHT_BRACE */ + DOT = 610, /* DOT */ + COMMA = 611, /* COMMA */ + COLON = 612, /* COLON */ + EQUAL = 613, /* EQUAL */ + SEMICOLON = 614, /* SEMICOLON */ + BANG = 615, /* BANG */ + DASH = 616, /* DASH */ + TILDE = 617, /* TILDE */ + PLUS = 618, /* PLUS */ + STAR = 619, /* STAR */ + SLASH = 620, /* SLASH */ + PERCENT = 621, /* PERCENT */ + LEFT_ANGLE = 622, /* LEFT_ANGLE */ + RIGHT_ANGLE = 623, /* RIGHT_ANGLE */ + VERTICAL_BAR = 624, /* VERTICAL_BAR */ + CARET = 625, /* CARET */ + AMPERSAND = 626, /* AMPERSAND */ + QUESTION = 627, /* QUESTION */ + INVARIANT = 628, /* INVARIANT */ + HIGH_PRECISION = 629, /* HIGH_PRECISION */ + MEDIUM_PRECISION = 630, /* MEDIUM_PRECISION */ + LOW_PRECISION = 631, /* LOW_PRECISION */ + PRECISION = 632, /* PRECISION */ + PACKED = 633, /* PACKED */ + RESOURCE = 634, /* RESOURCE */ + SUPERP = 635, /* SUPERP */ + FLOATCONSTANT = 636, /* FLOATCONSTANT */ + INTCONSTANT = 637, /* INTCONSTANT */ + UINTCONSTANT = 638, /* UINTCONSTANT */ + BOOLCONSTANT = 639, /* BOOLCONSTANT */ + IDENTIFIER = 640, /* IDENTIFIER */ + TYPE_NAME = 641, /* TYPE_NAME */ + CENTROID = 642, /* CENTROID */ + IN = 643, /* IN */ + OUT = 644, /* OUT */ + INOUT = 645, /* INOUT */ + STRUCT = 646, /* STRUCT */ + VOID = 647, /* VOID */ + WHILE = 648, /* WHILE */ + BREAK = 649, /* BREAK */ + CONTINUE = 650, /* CONTINUE */ + DO = 651, /* DO */ + ELSE = 652, /* ELSE */ + FOR = 653, /* FOR */ + IF = 654, /* IF */ + DISCARD = 655, /* DISCARD */ + RETURN = 656, /* RETURN */ + SWITCH = 657, /* SWITCH */ + CASE = 658, /* CASE */ + DEFAULT = 659, /* DEFAULT */ + TERMINATE_INVOCATION = 660, /* TERMINATE_INVOCATION */ + TERMINATE_RAY = 661, /* TERMINATE_RAY */ + IGNORE_INTERSECTION = 662, /* IGNORE_INTERSECTION */ + UNIFORM = 663, /* UNIFORM */ + SHARED = 664, /* SHARED */ + BUFFER = 665, /* BUFFER */ + FLAT = 666, /* FLAT */ + SMOOTH = 667, /* SMOOTH */ + LAYOUT = 668, /* LAYOUT */ + DOUBLECONSTANT = 669, /* DOUBLECONSTANT */ + INT16CONSTANT = 670, /* INT16CONSTANT */ + UINT16CONSTANT = 671, /* UINT16CONSTANT */ + FLOAT16CONSTANT = 672, /* FLOAT16CONSTANT */ + INT32CONSTANT = 673, /* INT32CONSTANT */ + UINT32CONSTANT = 674, /* UINT32CONSTANT */ + INT64CONSTANT = 675, /* INT64CONSTANT */ + UINT64CONSTANT = 676, /* UINT64CONSTANT */ + SUBROUTINE = 677, /* SUBROUTINE */ + DEMOTE = 678, /* DEMOTE */ + PAYLOADNV = 679, /* PAYLOADNV */ + PAYLOADINNV = 680, /* PAYLOADINNV */ + HITATTRNV = 681, /* HITATTRNV */ + CALLDATANV = 682, /* CALLDATANV */ + CALLDATAINNV = 683, /* CALLDATAINNV */ + PAYLOADEXT = 684, /* PAYLOADEXT */ + PAYLOADINEXT = 685, /* PAYLOADINEXT */ + HITATTREXT = 686, /* HITATTREXT */ + CALLDATAEXT = 687, /* CALLDATAEXT */ + CALLDATAINEXT = 688, /* CALLDATAINEXT */ + PATCH = 689, /* PATCH */ + SAMPLE = 690, /* SAMPLE */ + NONUNIFORM = 691, /* NONUNIFORM */ + COHERENT = 692, /* COHERENT */ + VOLATILE = 693, /* VOLATILE */ + RESTRICT = 694, /* RESTRICT */ + READONLY = 695, /* READONLY */ + WRITEONLY = 696, /* WRITEONLY */ + DEVICECOHERENT = 697, /* DEVICECOHERENT */ + QUEUEFAMILYCOHERENT = 698, /* QUEUEFAMILYCOHERENT */ + WORKGROUPCOHERENT = 699, /* WORKGROUPCOHERENT */ + SUBGROUPCOHERENT = 700, /* SUBGROUPCOHERENT */ + NONPRIVATE = 701, /* NONPRIVATE */ + SHADERCALLCOHERENT = 702, /* SHADERCALLCOHERENT */ + NOPERSPECTIVE = 703, /* NOPERSPECTIVE */ + EXPLICITINTERPAMD = 704, /* EXPLICITINTERPAMD */ + PERVERTEXNV = 705, /* PERVERTEXNV */ + PERPRIMITIVENV = 706, /* PERPRIMITIVENV */ + PERVIEWNV = 707, /* PERVIEWNV */ + PERTASKNV = 708, /* PERTASKNV */ + PRECISE = 709 /* PRECISE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -527,6 +537,9 @@ union YYSTYPE glslang::TIntermNodePair nodePair; glslang::TIntermTyped* intermTypedNode; glslang::TAttributes* attributes; + glslang::TSpirvRequirement* spirvReq; + glslang::TSpirvInstruction* spirvInst; + glslang::TSpirvTypeParameters* spirvTypeParams; }; union { glslang::TPublicType type; @@ -540,7 +553,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 544 "MachineIndependent/glslang_tab.cpp.h" +#line 557 "MachineIndependent/glslang_tab.cpp.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index 8e0db3d03c..105adc480e 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -696,6 +696,10 @@ bool TOutputTraverser::visitUnary(TVisit /* visit */, TIntermUnary* node) case EOpConstructReference: out.debug << "Construct reference type"; break; +#ifndef GLSLANG_WEB + case EOpSpirvInst: out.debug << "spirv_instruction"; break; +#endif + default: out.debug.message(EPrefixError, "Bad unary op"); } @@ -1126,6 +1130,10 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpIsHelperInvocation: out.debug << "IsHelperInvocation"; break; case EOpDebugPrintf: out.debug << "Debug printf"; break; +#ifndef GLSLANG_WEB + case EOpSpirvInst: out.debug << "spirv_instruction"; break; +#endif + default: out.debug.message(EPrefixError, "Bad aggregation op"); } diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index f4f2cd90c0..5cc9930acb 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -330,6 +330,8 @@ class TIntermediate { binaryDoubleOutput(false), subgroupUniformControlFlow(false), usePhysicalStorageBuffer(false), + spirvRequirement(nullptr), + spirvExecutionMode(nullptr), uniformLocationBase(0) #endif { @@ -868,6 +870,15 @@ class TIntermediate { void setSubgroupUniformControlFlow() { subgroupUniformControlFlow = true; } bool getSubgroupUniformControlFlow() const { return subgroupUniformControlFlow; } + + // GL_EXT_spirv_intrinsics + void insertSpirvRequirement(const TSpirvRequirement* spirvReq); + bool hasSpirvRequirement() const { return spirvRequirement != nullptr; } + const TSpirvRequirement& getSpirvRequirement() const { return *spirvRequirement; } + void insertSpirvExecutionMode(int executionMode, const TIntermAggregate* args = nullptr); + void insertSpirvExecutionModeId(int executionMode, const TIntermAggregate* args); + bool hasSpirvExecutionMode() const { return spirvExecutionMode != nullptr; } + const TSpirvExecutionMode& getSpirvExecutionMode() const { return *spirvExecutionMode; } #endif // GLSLANG_WEB void addBlockStorageOverride(const char* nameStr, TBlockStorageClass backing) @@ -1122,6 +1133,9 @@ class TIntermediate { bool subgroupUniformControlFlow; bool usePhysicalStorageBuffer; + TSpirvRequirement* spirvRequirement; + TSpirvExecutionMode* spirvExecutionMode; + std::unordered_map uniformLocationOverrides; int uniformLocationBase; TNumericFeatures numericFeatures; diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index e0f44f8b4f..ac5bfafaba 100644 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -1191,9 +1191,12 @@ int TPpContext::tokenize(TPpToken& ppToken) // HLSL allows string literals. // GLSL allows string literals with GL_EXT_debug_printf. if (ifdepth == 0 && parseContext.intermediate.getSource() != EShSourceHlsl) { - parseContext.requireExtensions(ppToken.loc, 1, &E_GL_EXT_debug_printf, "string literal"); - if (!parseContext.extensionTurnedOn(E_GL_EXT_debug_printf)) - continue; + const char* const string_literal_EXTs[] = { E_GL_EXT_debug_printf, E_GL_EXT_spirv_intrinsics }; + const int Num_string_literal_EXTs = sizeof(string_literal_EXTs) / sizeof(string_literal_EXTs[0]); + parseContext.requireExtensions(ppToken.loc, 2, string_literal_EXTs, "string literal"); + if (!parseContext.extensionTurnedOn(E_GL_EXT_debug_printf) && + !parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) + continue; } break; case '\'': diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 68973ce41c..20683a686b 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -356,6 +356,13 @@ INSTANTIATE_TEST_SUITE_P( "spv.int64.frag", "spv.intcoopmat.comp", "spv.intOps.vert", + "spv.intrinsicsSpirvByReference.vert", + "spv.intrinsicsSpirvDecorate.frag", + "spv.intrinsicsSpirvExecutionMode.frag", + "spv.intrinsicsSpirvInstruction.vert", + "spv.intrinsicsSpirvLiteral.vert", + "spv.intrinsicsSpirvStorageClass.rchit", + "spv.intrinsicsSpirvType.rgen", "spv.layer.tese", "spv.layoutNested.vert", "spv.length.frag", From 230168d5d96d9f49393e2d5333fe1090aa9a336f Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 8 Jun 2021 19:10:48 -0600 Subject: [PATCH 178/365] Add support for float spec const vector initialization Fixes #2025 --- Test/baseResults/vulkan.ast.vert.out | 18 +++++++++--------- Test/vulkan.ast.vert | 2 +- glslang/MachineIndependent/ParseHelper.cpp | 12 ++++++++++++ 3 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out index d19c963310..05a635532f 100644 --- a/Test/baseResults/vulkan.ast.vert.out +++ b/Test/baseResults/vulkan.ast.vert.out @@ -102,18 +102,18 @@ Shader version: 450 0:38 2 (const int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) -0:40 Construct vec2 ( temp 2-component vector of float) +0:40 Construct vec2 ( specialization-constant const 2-component vector of float) 0:40 'scf1' ( specialization-constant const highp float) 0:40 1.000000 0:40 'scf1' ( specialization-constant const highp float) 0:40 1.000000 0:41 Construct vec2 ( temp 2-element array of 2-component vector of float) -0:41 Construct vec2 ( temp 2-component vector of float) +0:41 Construct vec2 ( specialization-constant const 2-component vector of float) 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 -0:41 Construct vec2 ( temp 2-component vector of float) +0:41 Construct vec2 ( specialization-constant const 2-component vector of float) 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 0:41 'scf1' ( specialization-constant const highp float) @@ -233,18 +233,18 @@ Shader version: 450 0:38 2 (const int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) -0:40 Construct vec2 ( temp 2-component vector of float) +0:40 Construct vec2 ( specialization-constant const 2-component vector of float) 0:40 'scf1' ( specialization-constant const highp float) 0:40 1.000000 0:40 'scf1' ( specialization-constant const highp float) 0:40 1.000000 0:41 Construct vec2 ( temp 2-element array of 2-component vector of float) -0:41 Construct vec2 ( temp 2-component vector of float) +0:41 Construct vec2 ( specialization-constant const 2-component vector of float) 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 -0:41 Construct vec2 ( temp 2-component vector of float) +0:41 Construct vec2 ( specialization-constant const 2-component vector of float) 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 0:41 'scf1' ( specialization-constant const highp float) @@ -303,6 +303,9 @@ Shader version: 450 41: 14(int) Constant 2 42: TypeArray 37(ivec2) 41 44: TypeVector 6(float) 2 + 45: 44(fvec2) SpecConstantComposite 7(scf1) 7(scf1) + 46: 44(fvec2) SpecConstantComposite 7(scf1) 7(scf1) + 47: 44(fvec2) SpecConstantComposite 7(scf1) 7(scf1) 48: TypeArray 44(fvec2) 41 4(main): 2 Function None 3 5: Label @@ -317,9 +320,6 @@ Shader version: 450 32: 8(bool) FOrdGreaterThan 7(scf1) 7(scf1) 34: 8(bool) FUnordNotEqual 7(scf1) 7(scf1) 43: 42 CompositeConstruct 39 40 - 45: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1) - 46: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1) - 47: 44(fvec2) CompositeConstruct 7(scf1) 7(scf1) 49: 48 CompositeConstruct 46 47 Return FunctionEnd diff --git a/Test/vulkan.ast.vert b/Test/vulkan.ast.vert index c5a6a42c7d..b9e3e28b88 100644 --- a/Test/vulkan.ast.vert +++ b/Test/vulkan.ast.vert @@ -37,6 +37,6 @@ void main() ivec2(sci2, sci2); // spec-const ivec2[2](ivec2(sci2, sci2), ivec2(sci2, sci2)); // not a spec-const - vec2(scf1, scf1); // not spec-const + vec2(scf1, scf1); // spec-const vec2[2](vec2(scf1, scf1), vec2(scf1, scf1)); // not a spec-const } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 45c9362b3b..3c08c658c4 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -3115,6 +3115,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T bool matrixInMatrix = false; bool arrayArg = false; bool floatArgument = false; + bool intArgument = false; for (int arg = 0; arg < function.getParamCount(); ++arg) { if (function[arg].type->isArray()) { if (function[arg].type->isUnsizedArray()) { @@ -3145,6 +3146,8 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T specConstType = true; if (function[arg].type->isFloatingDomain()) floatArgument = true; + if (function[arg].type->isIntegerDomain()) + intArgument = true; if (type.isStruct()) { if (function[arg].type->contains16BitFloat()) { requireFloat16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type"); @@ -3250,6 +3253,15 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T // and aren't making an array. makeSpecConst = ! floatArgument && ! type.isArray(); break; + + case EOpConstructVec2: + case EOpConstructVec3: + case EOpConstructVec4: + // This was the list of valid ones, if they aren't converting from int + // and aren't making an array. + makeSpecConst = ! intArgument && !type.isArray(); + break; + default: // anything else wasn't white-listed in the spec as a conversion makeSpecConst = false; From 275d7ae882413694f5270b1a6940d65eb646db77 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Thu, 10 Jun 2021 21:42:46 -0400 Subject: [PATCH 179/365] only declare compatibility gl_ variables in compatibility mode avoid declaring them in GLSL 1.50+ if core profile is chosen by the version statement fixes #2663 --- Test/baseResults/150.frag.out | 3 +- Test/baseResults/150.vert.out | 31 +++++++------------ Test/baseResults/400.frag.out | 6 ++-- Test/baseResults/430scope.vert.out | 4 +-- Test/baseResults/450.vert.out | 4 +-- Test/baseResults/cppSimple.vert.out | 10 +++--- .../link.multiAnonBlocksInvalid.0.0.vert.out | 8 ++--- .../link.multiAnonBlocksValid.0.0.vert.out | 8 ++--- .../link.multiBlocksInvalid.0.0.vert.out | 8 ++--- .../link.multiBlocksValid.1.0.vert.out | 8 ++--- Test/baseResults/specExamples.frag.out | 7 +++-- Test/baseResults/specExamples.vert.out | 9 +++--- Test/baseResults/specExamplesConf.vert.out | 9 +++--- Test/baseResults/versionsErrors.vert.out | 8 ++--- glslang/MachineIndependent/Initialize.cpp | 6 ++-- 15 files changed, 62 insertions(+), 67 deletions(-) diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out index 7672b5817b..2192e14aab 100644 --- a/Test/baseResults/150.frag.out +++ b/Test/baseResults/150.frag.out @@ -3,7 +3,6 @@ ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_ ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord ERROR: 0:14: 'gl_FragCoord' : cannot redeclare after use -ERROR: 0:50: 'gl_PerFragment' : cannot be used (maybe an instance name is needed) ERROR: 0:50: 'gl_PerFragment' : undeclared identifier ERROR: 0:53: 'double' : Reserved word. ERROR: 0:53: 'double' : not supported for this version or the enabled extensions @@ -18,7 +17,7 @@ ERROR: 0:154: 'assign' : cannot convert from ' const float' to ' temp 2-compone ERROR: 0:155: 'textureQueryLod' : no matching overloaded function found ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix -ERROR: 19 compilation errors. No code generated. +ERROR: 18 compilation errors. No code generated. Shader version: 150 diff --git a/Test/baseResults/150.vert.out b/Test/baseResults/150.vert.out index 05a1db9f6f..408db3678a 100644 --- a/Test/baseResults/150.vert.out +++ b/Test/baseResults/150.vert.out @@ -1,10 +1,12 @@ 150.vert +ERROR: 0:18: 'gl_ClipVertex' : undeclared identifier +ERROR: 0:18: 'assign' : cannot convert from ' in 4-component vector of float' to ' temp float' ERROR: 0:26: 'a' : cannot redeclare a user-block member array ERROR: 0:28: 'double' : Reserved word. ERROR: 0:28: 'double' : not supported for this version or the enabled extensions ERROR: 0:28: 'vertex-shader `double` type input' : not supported for this version or the enabled extensions ERROR: 0:3001: '#error' : line of this error should be 3001 -ERROR: 5 compilation errors. No code generated. +ERROR: 7 compilation errors. No code generated. Shader version: 150 @@ -15,20 +17,20 @@ ERROR: node is still EOpNull! 0:15 Sequence 0:15 move second child to first child ( temp 4-component vector of float) 0:15 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position) -0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance}) 0:15 Constant: 0:15 0 (const uint) 0:15 'iv4' ( in 4-component vector of float) 0:16 move second child to first child ( temp float) 0:16 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) -0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance}) 0:16 Constant: 0:16 1 (const uint) 0:16 'ps' ( uniform float) 0:17 move second child to first child ( temp float) 0:17 direct index ( temp float ClipDistance) 0:17 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance) -0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance}) 0:17 Constant: 0:17 2 (const uint) 0:17 Constant: @@ -37,12 +39,7 @@ ERROR: node is still EOpNull! 0:17 'iv4' ( in 4-component vector of float) 0:17 Constant: 0:17 0 (const int) -0:18 move second child to first child ( temp 4-component vector of float) -0:18 gl_ClipVertex: direct index for structure ( gl_ClipVertex 4-component vector of float ClipVertex) -0:18 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) -0:18 Constant: -0:18 3 (const uint) -0:18 'iv4' ( in 4-component vector of float) +0:18 'gl_ClipVertex' ( temp float) 0:? Linker Objects 0:? 'iv4' ( in 4-component vector of float) 0:? 'ps' ( uniform float) @@ -67,7 +64,6 @@ ERROR: node is still EOpNull! Linked vertex stage: -ERROR: Linking vertex stage: Can only use one of gl_ClipDistance or gl_ClipVertex (gl_ClipDistance is preferred) Shader version: 150 Requested GL_ARB_vertex_attrib_64bit @@ -77,20 +73,20 @@ ERROR: node is still EOpNull! 0:15 Sequence 0:15 move second child to first child ( temp 4-component vector of float) 0:15 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position) -0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:15 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance}) 0:15 Constant: 0:15 0 (const uint) 0:15 'iv4' ( in 4-component vector of float) 0:16 move second child to first child ( temp float) 0:16 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) -0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:16 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance}) 0:16 Constant: 0:16 1 (const uint) 0:16 'ps' ( uniform float) 0:17 move second child to first child ( temp float) 0:17 direct index ( temp float ClipDistance) 0:17 gl_ClipDistance: direct index for structure ( out 4-element array of float ClipDistance) -0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:17 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance}) 0:17 Constant: 0:17 2 (const uint) 0:17 Constant: @@ -99,12 +95,7 @@ ERROR: node is still EOpNull! 0:17 'iv4' ( in 4-component vector of float) 0:17 Constant: 0:17 0 (const int) -0:18 move second child to first child ( temp 4-component vector of float) -0:18 gl_ClipVertex: direct index for structure ( gl_ClipVertex 4-component vector of float ClipVertex) -0:18 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 4-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) -0:18 Constant: -0:18 3 (const uint) -0:18 'iv4' ( in 4-component vector of float) +0:18 'gl_ClipVertex' ( temp float) 0:? Linker Objects 0:? 'iv4' ( in 4-component vector of float) 0:? 'ps' ( uniform float) diff --git a/Test/baseResults/400.frag.out b/Test/baseResults/400.frag.out index b7e88df9ed..db3cd24302 100644 --- a/Test/baseResults/400.frag.out +++ b/Test/baseResults/400.frag.out @@ -4,7 +4,7 @@ ERROR: 0:22: 'textureGatherOffset(...)' : must be a compile-time constant: compo ERROR: 0:23: 'textureGatherOffset(...)' : must be 0, 1, 2, or 3: component argument ERROR: 0:30: 'location qualifier on input' : not supported for this version or the enabled extensions ERROR: 0:38: 'location qualifier on uniform or buffer' : not supported for this version or the enabled extensions -ERROR: 0:40: 'redeclaration' : cannot apply layout qualifier to gl_Color +ERROR: 0:40: 'gl_Color' : identifiers starting with "gl_" are reserved ERROR: 0:41: 'redeclaration' : cannot change qualification of gl_ClipDistance ERROR: 0:43: 'gl_FragCoord' : cannot redeclare after use ERROR: 0:51: 'texel offset' : argument must be compile-time constant @@ -516,7 +516,7 @@ ERROR: node is still EOpNull! 0:? 'vl' (layout( location=4) smooth in 4-component vector of float) 0:? 'vl2' (layout( location=6) smooth in 4-component vector of float) 0:? 'uv3' (layout( location=3) uniform 3-component vector of float) -0:? 'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord, in unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor}) +0:? 'gl_Color' (layout( location=5) smooth in 4-component vector of float) 0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) 0:? 'u2drs' ( uniform sampler2DRectShadow) 0:? 'patchIn' ( smooth patch in 4-component vector of float) @@ -691,7 +691,7 @@ ERROR: node is still EOpNull! 0:? 'vl' (layout( location=4) smooth in 4-component vector of float) 0:? 'vl2' (layout( location=6) smooth in 4-component vector of float) 0:? 'uv3' (layout( location=3) uniform 3-component vector of float) -0:? 'anon@0' ( in block{ in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, smooth in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor}) +0:? 'gl_Color' (layout( location=5) smooth in 4-component vector of float) 0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) 0:? 'u2drs' ( uniform sampler2DRectShadow) 0:? 'patchIn' ( smooth patch in 4-component vector of float) diff --git a/Test/baseResults/430scope.vert.out b/Test/baseResults/430scope.vert.out index 973c21aa14..ad83141746 100644 --- a/Test/baseResults/430scope.vert.out +++ b/Test/baseResults/430scope.vert.out @@ -63,7 +63,7 @@ ERROR: node is still EOpNull! 0:47 3.000000 0:49 move second child to first child ( temp 4-component vector of float) 0:49 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position) -0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:49 Constant: 0:49 0 (const uint) 0:49 Construct vec4 ( temp 4-component vector of float) @@ -168,7 +168,7 @@ ERROR: node is still EOpNull! 0:47 3.000000 0:49 move second child to first child ( temp 4-component vector of float) 0:49 gl_Position: direct index for structure ( invariant gl_Position 4-component vector of float Position) -0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:49 'anon@0' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:49 Constant: 0:49 0 (const uint) 0:49 Construct vec4 ( temp 4-component vector of float) diff --git a/Test/baseResults/450.vert.out b/Test/baseResults/450.vert.out index 0f5f23136e..b3451c00c4 100644 --- a/Test/baseResults/450.vert.out +++ b/Test/baseResults/450.vert.out @@ -34,7 +34,7 @@ ERROR: node is still EOpNull! 0:9 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) 0:9 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance}) 0:9 Constant: -0:9 10 (const uint) +0:9 3 (const uint) 0:9 Constant: 0:9 2 (const int) 0:9 Constant: @@ -98,7 +98,7 @@ ERROR: node is still EOpNull! 0:9 gl_CullDistance: direct index for structure ( out 3-element array of float CullDistance) 0:9 'anon@0' ( out block{ out 3-element array of float CullDistance gl_CullDistance}) 0:9 Constant: -0:9 10 (const uint) +0:9 3 (const uint) 0:9 Constant: 0:9 2 (const int) 0:9 Constant: diff --git a/Test/baseResults/cppSimple.vert.out b/Test/baseResults/cppSimple.vert.out index 3257856cef..af2a1fd947 100644 --- a/Test/baseResults/cppSimple.vert.out +++ b/Test/baseResults/cppSimple.vert.out @@ -134,7 +134,7 @@ ERROR: node is still EOpNull! 0:65 0.050000 0:69 move second child to first child ( temp 4-component vector of float) 0:69 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:69 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:69 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:69 Constant: 0:69 0 (const uint) 0:69 Construct vec4 ( temp 4-component vector of float) @@ -174,7 +174,7 @@ ERROR: node is still EOpNull! 12:20033 Sequence 12:20033 move second child to first child ( temp 4-component vector of float) 12:20033 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -12:20033 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +12:20033 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 12:20033 Constant: 12:20033 0 (const uint) 12:20033 Constant: @@ -188,7 +188,7 @@ ERROR: node is still EOpNull! 12:9011 'RECURSE' ( global int) 0:? Linker Objects 0:? 'sum' ( global float) -0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'linenumber' ( global int) 0:? 'filenumber' ( global int) 0:? 'version' ( global int) @@ -246,7 +246,7 @@ ERROR: node is still EOpNull! 0:65 0.050000 0:69 move second child to first child ( temp 4-component vector of float) 0:69 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:69 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:69 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:69 Constant: 0:69 0 (const uint) 0:69 Construct vec4 ( temp 4-component vector of float) @@ -287,7 +287,7 @@ ERROR: node is still EOpNull! 12:9011 'RECURSE' ( global int) 0:? Linker Objects 0:? 'sum' ( global float) -0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'linenumber' ( global int) 0:? 'filenumber' ( global int) 0:? 'version' ( global int) diff --git a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out index b8ba789127..404ae84939 100644 --- a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out +++ b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out @@ -29,7 +29,7 @@ ERROR: node is still EOpNull! 0:49 0 (const uint) 0:51 move second child to first child ( temp 4-component vector of float) 0:51 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:51 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:51 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:51 Constant: 0:51 0 (const uint) 0:51 matrix-times-vector ( temp 4-component vector of float) @@ -44,7 +44,7 @@ ERROR: node is still EOpNull! 0:? 'anon@2' ( out block{ out 4-component vector of float v1}) 0:? 'myName' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}) 0:? 'oColor' ( smooth out 4-component vector of float) -0:? 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) @@ -126,7 +126,7 @@ ERROR: node is still EOpNull! 0:49 0 (const uint) 0:51 move second child to first child ( temp 4-component vector of float) 0:51 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:51 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:51 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:51 Constant: 0:51 0 (const uint) 0:51 matrix-times-vector ( temp 4-component vector of float) @@ -169,7 +169,7 @@ ERROR: node is still EOpNull! 0:? 'anon@2' ( out block{ out 4-component vector of float v1}) 0:? 'myName' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}) 0:? 'oColor' ( smooth out 4-component vector of float) -0:? 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) 0:? 'anon@0' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}) diff --git a/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out index 87c31b1eb1..1c8b9c48ae 100644 --- a/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out +++ b/Test/baseResults/link.multiAnonBlocksValid.0.0.vert.out @@ -23,7 +23,7 @@ Shader version: 430 0:35 0 (const uint) 0:37 move second child to first child ( temp 4-component vector of float) 0:37 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:37 'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:37 'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:37 Constant: 0:37 0 (const uint) 0:37 matrix-times-vector ( temp 4-component vector of float) @@ -37,7 +37,7 @@ Shader version: 430 0:? 'anon@1' ( out block{ out 4-component vector of float v1, out 4-component vector of float v2}) 0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}) 0:? 'oColor' ( smooth out 4-component vector of float) -0:? 'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) @@ -108,7 +108,7 @@ Shader version: 430 0:35 0 (const uint) 0:37 move second child to first child ( temp 4-component vector of float) 0:37 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:37 'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:37 'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:37 Constant: 0:37 0 (const uint) 0:37 matrix-times-vector ( temp 4-component vector of float) @@ -150,7 +150,7 @@ Shader version: 430 0:? 'anon@1' ( out block{ out 4-component vector of float v1, out 4-component vector of float v2}) 0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}) 0:? 'oColor' ( smooth out 4-component vector of float) -0:? 'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@3' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) 0:? 'P' ( in 4-component vector of float) diff --git a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out index 12b5c43262..ad609e86f1 100644 --- a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out +++ b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out @@ -28,7 +28,7 @@ Shader version: 430 0:37 0 (const int) 0:39 move second child to first child ( temp 4-component vector of float) 0:39 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:39 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:39 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:39 Constant: 0:39 0 (const uint) 0:39 matrix-times-vector ( temp 4-component vector of float) @@ -43,7 +43,7 @@ Shader version: 430 0:? 'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1}) 0:? 'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1}) 0:? 'oColor' ( smooth out 4-component vector of float) -0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) @@ -132,7 +132,7 @@ Shader version: 430 0:37 0 (const int) 0:39 move second child to first child ( temp 4-component vector of float) 0:39 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:39 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:39 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:39 Constant: 0:39 0 (const uint) 0:39 matrix-times-vector ( temp 4-component vector of float) @@ -175,7 +175,7 @@ Shader version: 430 0:? 'uC' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1}) 0:? 'uBufC' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1}) 0:? 'oColor' ( smooth out 4-component vector of float) -0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) 0:? 'P' ( in 4-component vector of float) diff --git a/Test/baseResults/link.multiBlocksValid.1.0.vert.out b/Test/baseResults/link.multiBlocksValid.1.0.vert.out index 2f32abd255..0015cab45b 100644 --- a/Test/baseResults/link.multiBlocksValid.1.0.vert.out +++ b/Test/baseResults/link.multiBlocksValid.1.0.vert.out @@ -23,7 +23,7 @@ Shader version: 430 0:29 0 (const int) 0:31 move second child to first child ( temp 4-component vector of float) 0:31 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:31 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:31 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:31 Constant: 0:31 0 (const uint) 0:31 matrix-times-vector ( temp 4-component vector of float) @@ -37,7 +37,7 @@ Shader version: 430 0:? 'b' ( out block{ out 4-component vector of float v1, out 4-component vector of float v2}) 0:? 'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}) 0:? 'oColor' ( smooth out 4-component vector of float) -0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) @@ -114,7 +114,7 @@ Shader version: 430 0:29 0 (const int) 0:31 move second child to first child ( temp 4-component vector of float) 0:31 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:31 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:31 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:31 Constant: 0:31 0 (const uint) 0:31 matrix-times-vector ( temp 4-component vector of float) @@ -156,7 +156,7 @@ Shader version: 430 0:? 'b' ( out block{ out 4-component vector of float v1, out 4-component vector of float v2}) 0:? 'c' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}) 0:? 'oColor' ( smooth out 4-component vector of float) -0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) 0:? 'P' ( in 4-component vector of float) diff --git a/Test/baseResults/specExamples.frag.out b/Test/baseResults/specExamples.frag.out index 5eec3cbf44..5fb5bd71df 100644 --- a/Test/baseResults/specExamples.frag.out +++ b/Test/baseResults/specExamples.frag.out @@ -16,6 +16,7 @@ ERROR: 0:102: 'color' : redefinition ERROR: 0:112: 'redeclaration' : all redeclarations must use the same depth layout on gl_FragDepth ERROR: 0:118: 'redeclaration' : all redeclarations must use the same depth layout on gl_FragDepth ERROR: 0:121: 'redeclaration' : all redeclarations must use the same depth layout on gl_FragDepth +ERROR: 0:123: 'gl_Color' : identifiers starting with "gl_" are reserved ERROR: 0:172: 'x' : undeclared identifier ERROR: 0:172: '[]' : scalar integer expression required ERROR: 0:175: 'x' : undeclared identifier @@ -37,7 +38,7 @@ ERROR: 0:226: 'in' : not allowed in nested scope ERROR: 0:227: 'in' : not allowed in nested scope ERROR: 0:228: 'in' : not allowed in nested scope ERROR: 0:232: 'out' : not allowed in nested scope -ERROR: 38 compilation errors. No code generated. +ERROR: 39 compilation errors. No code generated. Shader version: 430 @@ -320,7 +321,7 @@ ERROR: node is still EOpNull! 0:? 'factor' (layout( location=3 index=1) out 4-component vector of float) 0:? 'colors' (layout( location=2) out 3-element array of 4-component vector of float) 0:? 'gl_FragDepth' ( gl_FragDepth float FragDepth) -0:? 'anon@2' ( in block{ in float FogFragCoord gl_FogFragCoord, in unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor}) +0:? 'gl_Color' ( flat in 4-component vector of float) Linked fragment stage: @@ -595,5 +596,5 @@ ERROR: node is still EOpNull! 0:? 'factor' (layout( location=3 index=1) out 4-component vector of float) 0:? 'colors' (layout( location=2) out 3-element array of 4-component vector of float) 0:? 'gl_FragDepth' ( gl_FragDepth float FragDepth) -0:? 'anon@2' ( in block{ in float FogFragCoord gl_FogFragCoord, in 1-element array of 4-component vector of float TexCoord gl_TexCoord, flat in 4-component vector of float Color gl_Color, in 4-component vector of float SecondaryColor gl_SecondaryColor}) +0:? 'gl_Color' ( flat in 4-component vector of float) diff --git a/Test/baseResults/specExamples.vert.out b/Test/baseResults/specExamples.vert.out index 1dbf9a292d..caddb5c447 100644 --- a/Test/baseResults/specExamples.vert.out +++ b/Test/baseResults/specExamples.vert.out @@ -24,7 +24,8 @@ ERROR: 0:95: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCount ERROR: 0:96: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings ERROR: 0:97: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings ERROR: 0:106: '' : vertex input cannot be further qualified -ERROR: 0:106: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_FrontColor +ERROR: 0:106: 'gl_FrontColor' : identifiers starting with "gl_" are reserved +ERROR: 0:107: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_FrontColor ERROR: 0:112: 'ColorIvn' : identifier not previously declared ERROR: 0:132: 'shared' : not supported in this stage: vertex ERROR: 0:134: '' : function does not return a value: funcA @@ -33,7 +34,7 @@ ERROR: 0:153: '' : function does not return a value: func3 ERROR: 0:169: 'format' : image formats must match ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:170: 'format' : image formats must match -ERROR: 34 compilation errors. No code generated. +ERROR: 35 compilation errors. No code generated. Shader version: 430 @@ -297,7 +298,7 @@ ERROR: node is still EOpNull! 0:? 'b2' (layout( binding=2) uniform atomic_uint) 0:? 'c2' (layout( binding=3) uniform atomic_uint) 0:? 'd2' (layout( binding=2) uniform atomic_uint) -0:? 'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'gl_FrontColor' ( flat in 4-component vector of float) 0:? 'ColorInv' ( smooth out 3-component vector of float) 0:? 'Color4' ( invariant centroid smooth out 3-component vector of float) 0:? 'position' ( noContraction smooth out 4-component vector of float) @@ -580,7 +581,7 @@ ERROR: node is still EOpNull! 0:? 'b2' (layout( binding=2) uniform atomic_uint) 0:? 'c2' (layout( binding=3) uniform atomic_uint) 0:? 'd2' (layout( binding=2) uniform atomic_uint) -0:? 'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'gl_FrontColor' ( flat in 4-component vector of float) 0:? 'ColorInv' ( smooth out 3-component vector of float) 0:? 'Color4' ( invariant centroid smooth out 3-component vector of float) 0:? 'position' ( noContraction smooth out 4-component vector of float) diff --git a/Test/baseResults/specExamplesConf.vert.out b/Test/baseResults/specExamplesConf.vert.out index 94f48a5e75..7d5fbb9057 100644 --- a/Test/baseResults/specExamplesConf.vert.out +++ b/Test/baseResults/specExamplesConf.vert.out @@ -25,7 +25,8 @@ ERROR: 0:95: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCount ERROR: 0:96: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings ERROR: 0:97: 'binding' : atomic_uint binding is too large; see gl_MaxAtomicCounterBindings ERROR: 0:106: '' : vertex input cannot be further qualified -ERROR: 0:106: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_FrontColor +ERROR: 0:106: 'gl_FrontColor' : identifiers starting with "gl_" are reserved +ERROR: 0:107: 'redeclaration' : cannot change storage, memory, or auxiliary qualification of gl_FrontColor ERROR: 0:112: 'ColorIvn' : identifier not previously declared ERROR: 0:132: 'shared' : not supported in this stage: vertex ERROR: 0:134: '' : function does not return a value: funcA @@ -34,7 +35,7 @@ ERROR: 0:153: '' : function does not return a value: func3 ERROR: 0:169: 'format' : image formats must match ERROR: 0:170: 'coherent' : argument cannot drop memory qualifier when passed to formal parameter ERROR: 0:170: 'format' : image formats must match -ERROR: 35 compilation errors. No code generated. +ERROR: 36 compilation errors. No code generated. Shader version: 430 @@ -298,7 +299,7 @@ ERROR: node is still EOpNull! 0:? 'b2' (layout( binding=2) uniform atomic_uint) 0:? 'c2' (layout( binding=3) uniform atomic_uint) 0:? 'd2' (layout( binding=2) uniform atomic_uint) -0:? 'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'gl_FrontColor' ( flat in 4-component vector of float) 0:? 'ColorInv' ( smooth out 3-component vector of float) 0:? 'Color4' ( invariant centroid smooth out 3-component vector of float) 0:? 'position' ( noContraction smooth out 4-component vector of float) @@ -581,7 +582,7 @@ ERROR: node is still EOpNull! 0:? 'b2' (layout( binding=2) uniform atomic_uint) 0:? 'c2' (layout( binding=3) uniform atomic_uint) 0:? 'd2' (layout( binding=2) uniform atomic_uint) -0:? 'anon@5' ( out block{ invariant gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, flat out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'gl_FrontColor' ( flat in 4-component vector of float) 0:? 'ColorInv' ( smooth out 3-component vector of float) 0:? 'Color4' ( invariant centroid smooth out 3-component vector of float) 0:? 'position' ( noContraction smooth out 4-component vector of float) diff --git a/Test/baseResults/versionsErrors.vert.out b/Test/baseResults/versionsErrors.vert.out index 6551364e9a..a7a59ea922 100644 --- a/Test/baseResults/versionsErrors.vert.out +++ b/Test/baseResults/versionsErrors.vert.out @@ -13,7 +13,7 @@ ERROR: node is still EOpNull! 0:44 Sequence 0:44 move second child to first child ( temp 4-component vector of float) 0:44 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:44 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:44 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:44 Constant: 0:44 0 (const uint) 0:44 Construct vec4 ( temp 4-component vector of float) @@ -24,7 +24,7 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'color' ( in 3-component vector of float) 0:? 'foo' ( uniform sampler2DRect) -0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out unsized 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) @@ -40,7 +40,7 @@ ERROR: node is still EOpNull! 0:44 Sequence 0:44 move second child to first child ( temp 4-component vector of float) 0:44 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) -0:44 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:44 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:44 Constant: 0:44 0 (const uint) 0:44 Construct vec4 ( temp 4-component vector of float) @@ -51,7 +51,7 @@ ERROR: node is still EOpNull! 0:? Linker Objects 0:? 'color' ( in 3-component vector of float) 0:? 'foo' ( uniform sampler2DRect) -0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, gl_ClipVertex 4-component vector of float ClipVertex gl_ClipVertex, out 4-component vector of float FrontColor gl_FrontColor, out 4-component vector of float BackColor gl_BackColor, out 4-component vector of float FrontSecondaryColor gl_FrontSecondaryColor, out 4-component vector of float BackSecondaryColor gl_BackSecondaryColor, out 1-element array of 4-component vector of float TexCoord gl_TexCoord, out float FogFragCoord gl_FogFragCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) 0:? 'gl_VertexID' ( gl_VertexId int VertexId) 0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 321a902862..b199c6549d 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -483,7 +483,8 @@ void TBuiltIns::relateTabledBuiltins(int /* version */, EProfile /* profile */, inline bool IncludeLegacy(int version, EProfile profile, const SpvVersion& spvVersion) { - return profile != EEsProfile && (version <= 130 || (spvVersion.spv == 0 && ARBCompatibility) || profile == ECompatibilityProfile); + return profile != EEsProfile && (version <= 130 || (spvVersion.spv == 0 && version == 140 && ARBCompatibility) || + profile == ECompatibilityProfile); } // Construct TBuiltInParseables base class. This can be used for language-common constructs. @@ -7278,7 +7279,8 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf snprintf(builtInConstant, maxSize, "const int gl_MaxVertexUniformComponents = %d;", resources.maxVertexUniformComponents); s.append(builtInConstant); - if (version < 150 || ARBCompatibility) { + // Moved from just being deprecated into compatibility profile only as of 4.20 + if (version < 420 || profile == ECompatibilityProfile) { snprintf(builtInConstant, maxSize, "const int gl_MaxVaryingFloats = %d;", resources.maxVaryingFloats); s.append(builtInConstant); } From f1121f02ab7d0898cbf9a5fb760bed91c167c421 Mon Sep 17 00:00:00 2001 From: Sidney Just Date: Sat, 12 Jun 2021 15:30:36 -0700 Subject: [PATCH 180/365] Fixed SPIR-V remapper not remapping OpExtInst instruction set IDs --- SPIRV/SPVRemapper.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index 56d7f431a7..56d6d5d4a5 100644 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -544,6 +544,9 @@ namespace spv { // Extended instructions: currently, assume everything is an ID. // TODO: add whatever data we need for exceptions to that if (opCode == spv::OpExtInst) { + + idFn(asId(word)); // Instruction set is an ID that also needs to be mapped + word += 2; // instruction set, and instruction from set numOperands -= 2; From f997bb32dadf45e071d73aed4e8272df614e42fd Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Tue, 15 Jun 2021 11:11:58 -0400 Subject: [PATCH 181/365] Update known good SPIRV-Tools and SPIRV-Headers --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index d2b6ec2ce3..177fab1dbb 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "fb02131cb4ac74a357bb53039ca3dd8926bb3b14" + "commit" : "4d22f58a812ea02e1ad53c9ccba12cb48f2bd0b2" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "dafead1765f6c1a5f9f8a76387dcb2abe4e54acd" + "commit" : "f5417a4b6633c3217c9a1bc2f0c70b1454975ba7" } ] } From 3d9a31c6d1a454c72d933f060b4c4f0fbc06b8c7 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Tue, 15 Jun 2021 11:13:35 -0400 Subject: [PATCH 182/365] Update test expectations --- Test/baseResults/hlsl.attribute.expression.comp.out | 1 + Test/baseResults/hlsl.intrinsics.barriers.comp.out | 1 + Test/baseResults/hlsl.intrinsics.negative.comp.out | 1 + Test/baseResults/spv.subgroupUniformControlFlow.vert.out | 1 - 4 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out index bee8efe03d..27775a6857 100644 --- a/Test/baseResults/hlsl.attribute.expression.comp.out +++ b/Test/baseResults/hlsl.attribute.expression.comp.out @@ -81,6 +81,7 @@ local_size = (4, 6, 8) 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int bound}) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 39 diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out index 9017d41f8e..1ae95bca51 100644 --- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out +++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out @@ -51,6 +51,7 @@ local_size = (1, 1, 1) 0:? Linker Objects 0:? '@entryPointOutput' (layout( location=0) out float) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 22 diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out index ee88def1b7..dfcaa2b998 100644 --- a/Test/baseResults/hlsl.intrinsics.negative.comp.out +++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out @@ -179,6 +179,7 @@ local_size = (1, 1, 1) 0:? 'inF2' (layout( location=2) in 4-component vector of float) 0:? 'inI0' (layout( location=3) in 4-component vector of int) +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 99 diff --git a/Test/baseResults/spv.subgroupUniformControlFlow.vert.out b/Test/baseResults/spv.subgroupUniformControlFlow.vert.out index 2a2722d3cc..b7fce5a3ca 100644 --- a/Test/baseResults/spv.subgroupUniformControlFlow.vert.out +++ b/Test/baseResults/spv.subgroupUniformControlFlow.vert.out @@ -1,7 +1,6 @@ spv.subgroupUniformControlFlow.vert WARNING: 0:7: '' : attribute with arguments not recognized, skipping -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 6 From cd6b2382d0803cb97c84104821a8e51ede116a5f Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 15 Jun 2021 15:56:27 -0600 Subject: [PATCH 183/365] Remove output variables from compute regression tests Output variables in GLCompute shaders is not supported in Vulkan. Recent upgrade of spirv-tools revealed this problem. --- .../hlsl.attribute.expression.comp.out | 123 +++---- .../hlsl.intrinsics.barriers.comp.out | 67 ++-- .../hlsl.intrinsics.negative.comp.out | 342 +++++++----------- Test/hlsl.attribute.expression.comp | 4 +- Test/hlsl.intrinsics.barriers.comp | 4 +- Test/hlsl.intrinsics.negative.comp | 20 +- 6 files changed, 212 insertions(+), 348 deletions(-) diff --git a/Test/baseResults/hlsl.attribute.expression.comp.out b/Test/baseResults/hlsl.attribute.expression.comp.out index 27775a6857..90c17402fe 100644 --- a/Test/baseResults/hlsl.attribute.expression.comp.out +++ b/Test/baseResults/hlsl.attribute.expression.comp.out @@ -2,7 +2,7 @@ hlsl.attribute.expression.comp Shader version: 500 local_size = (4, 6, 8) 0:? Sequence -0:9 Function Definition: @main( ( temp 4-component vector of float) +0:9 Function Definition: @main( ( temp void) 0:9 Function Parameters: 0:? Sequence 0:11 Sequence @@ -22,21 +22,12 @@ local_size = (4, 6, 8) 0:11 Loop Terminal Expression 0:11 Pre-Increment ( temp int) 0:11 'x' ( temp int) -0:14 Branch: Return with expression -0:14 Constant: -0:14 0.000000 -0:14 0.000000 -0:14 0.000000 -0:14 0.000000 0:9 Function Definition: main( ( temp void) 0:9 Function Parameters: 0:? Sequence -0:9 move second child to first child ( temp 4-component vector of float) -0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:9 Function Call: @main( ( temp 4-component vector of float) +0:9 Function Call: @main( ( temp void) 0:? Linker Objects 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int bound}) -0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) Linked compute stage: @@ -45,7 +36,7 @@ Linked compute stage: Shader version: 500 local_size = (4, 6, 8) 0:? Sequence -0:9 Function Definition: @main( ( temp 4-component vector of float) +0:9 Function Definition: @main( ( temp void) 0:9 Function Parameters: 0:? Sequence 0:11 Sequence @@ -65,90 +56,70 @@ local_size = (4, 6, 8) 0:11 Loop Terminal Expression 0:11 Pre-Increment ( temp int) 0:11 'x' ( temp int) -0:14 Branch: Return with expression -0:14 Constant: -0:14 0.000000 -0:14 0.000000 -0:14 0.000000 -0:14 0.000000 0:9 Function Definition: main( ( temp void) 0:9 Function Parameters: 0:? Sequence -0:9 move second child to first child ( temp 4-component vector of float) -0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:9 Function Call: @main( ( temp 4-component vector of float) +0:9 Function Call: @main( ( temp void) 0:? Linker Objects 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int bound}) -0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 39 +// Id's are bound by 30 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "main" 37 + EntryPoint GLCompute 4 "main" ExecutionMode 4 LocalSize 4 6 8 Source HLSL 500 Name 4 "main" - Name 9 "@main(" - Name 13 "x" - Name 21 "$Global" - MemberName 21($Global) 0 "bound" - Name 23 "" - Name 37 "@entryPointOutput" - MemberDecorate 21($Global) 0 Offset 0 - Decorate 21($Global) Block - Decorate 23 DescriptorSet 0 - Decorate 23 Binding 0 - Decorate 37(@entryPointOutput) Location 0 + Name 6 "@main(" + Name 10 "x" + Name 18 "$Global" + MemberName 18($Global) 0 "bound" + Name 20 "" + MemberDecorate 18($Global) 0 Offset 0 + Decorate 18($Global) Block + Decorate 20 DescriptorSet 0 + Decorate 20 Binding 0 2: TypeVoid 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeVector 6(float) 4 - 8: TypeFunction 7(fvec4) - 11: TypeInt 32 1 - 12: TypePointer Function 11(int) - 14: 11(int) Constant 0 - 21($Global): TypeStruct 11(int) - 22: TypePointer Uniform 21($Global) - 23: 22(ptr) Variable Uniform - 24: TypePointer Uniform 11(int) - 27: TypeBool - 30: 11(int) Constant 1 - 32: 6(float) Constant 0 - 33: 7(fvec4) ConstantComposite 32 32 32 32 - 36: TypePointer Output 7(fvec4) -37(@entryPointOutput): 36(ptr) Variable Output + 8: TypeInt 32 1 + 9: TypePointer Function 8(int) + 11: 8(int) Constant 0 + 18($Global): TypeStruct 8(int) + 19: TypePointer Uniform 18($Global) + 20: 19(ptr) Variable Uniform + 21: TypePointer Uniform 8(int) + 24: TypeBool + 27: 8(int) Constant 1 4(main): 2 Function None 3 5: Label - 38: 7(fvec4) FunctionCall 9(@main() - Store 37(@entryPointOutput) 38 + 29: 2 FunctionCall 6(@main() Return FunctionEnd - 9(@main(): 7(fvec4) Function None 8 - 10: Label - 13(x): 12(ptr) Variable Function - Store 13(x) 14 - Branch 15 - 15: Label - LoopMerge 17 18 Unroll - Branch 19 - 19: Label - 20: 11(int) Load 13(x) - 25: 24(ptr) AccessChain 23 14 - 26: 11(int) Load 25 - 28: 27(bool) SLessThan 20 26 - BranchConditional 28 16 17 - 16: Label - Branch 18 - 18: Label - 29: 11(int) Load 13(x) - 31: 11(int) IAdd 29 30 - Store 13(x) 31 + 6(@main(): 2 Function None 3 + 7: Label + 10(x): 9(ptr) Variable Function + Store 10(x) 11 + Branch 12 + 12: Label + LoopMerge 14 15 Unroll + Branch 16 + 16: Label + 17: 8(int) Load 10(x) + 22: 21(ptr) AccessChain 20 11 + 23: 8(int) Load 22 + 25: 24(bool) SLessThan 17 23 + BranchConditional 25 13 14 + 13: Label Branch 15 - 17: Label - ReturnValue 33 + 15: Label + 26: 8(int) Load 10(x) + 28: 8(int) IAdd 26 27 + Store 10(x) 28 + Branch 12 + 14: Label + Return FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.barriers.comp.out b/Test/baseResults/hlsl.intrinsics.barriers.comp.out index 1ae95bca51..abb9650f61 100644 --- a/Test/baseResults/hlsl.intrinsics.barriers.comp.out +++ b/Test/baseResults/hlsl.intrinsics.barriers.comp.out @@ -2,7 +2,7 @@ hlsl.intrinsics.barriers.comp Shader version: 500 local_size = (1, 1, 1) 0:? Sequence -0:3 Function Definition: @ComputeShaderFunction( ( temp float) +0:3 Function Definition: @ComputeShaderFunction( ( temp void) 0:3 Function Parameters: 0:? Sequence 0:4 MemoryBarrier ( temp void) @@ -11,17 +11,11 @@ local_size = (1, 1, 1) 0:7 DeviceMemoryBarrierWithGroupSync ( temp void) 0:8 WorkgroupMemoryBarrier ( temp void) 0:9 WorkgroupMemoryBarrierWithGroupSync ( temp void) -0:11 Branch: Return with expression -0:11 Constant: -0:11 0.000000 0:3 Function Definition: ComputeShaderFunction( ( temp void) 0:3 Function Parameters: 0:? Sequence -0:3 move second child to first child ( temp float) -0:? '@entryPointOutput' (layout( location=0) out float) -0:3 Function Call: @ComputeShaderFunction( ( temp float) +0:3 Function Call: @ComputeShaderFunction( ( temp void) 0:? Linker Objects -0:? '@entryPointOutput' (layout( location=0) out float) Linked compute stage: @@ -30,7 +24,7 @@ Linked compute stage: Shader version: 500 local_size = (1, 1, 1) 0:? Sequence -0:3 Function Definition: @ComputeShaderFunction( ( temp float) +0:3 Function Definition: @ComputeShaderFunction( ( temp void) 0:3 Function Parameters: 0:? Sequence 0:4 MemoryBarrier ( temp void) @@ -39,59 +33,44 @@ local_size = (1, 1, 1) 0:7 DeviceMemoryBarrierWithGroupSync ( temp void) 0:8 WorkgroupMemoryBarrier ( temp void) 0:9 WorkgroupMemoryBarrierWithGroupSync ( temp void) -0:11 Branch: Return with expression -0:11 Constant: -0:11 0.000000 0:3 Function Definition: ComputeShaderFunction( ( temp void) 0:3 Function Parameters: 0:? Sequence -0:3 move second child to first child ( temp float) -0:? '@entryPointOutput' (layout( location=0) out float) -0:3 Function Call: @ComputeShaderFunction( ( temp float) +0:3 Function Call: @ComputeShaderFunction( ( temp void) 0:? Linker Objects -0:? '@entryPointOutput' (layout( location=0) out float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 22 +// Id's are bound by 15 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "ComputeShaderFunction" 20 + EntryPoint GLCompute 4 "ComputeShaderFunction" ExecutionMode 4 LocalSize 1 1 1 Source HLSL 500 Name 4 "ComputeShaderFunction" - Name 8 "@ComputeShaderFunction(" - Name 20 "@entryPointOutput" - Decorate 20(@entryPointOutput) Location 0 + Name 6 "@ComputeShaderFunction(" 2: TypeVoid 3: TypeFunction 2 - 6: TypeFloat 32 - 7: TypeFunction 6(float) - 10: TypeInt 32 0 - 11: 10(int) Constant 1 - 12: 10(int) Constant 3400 - 13: 10(int) Constant 2 - 14: 10(int) Constant 2120 - 15: 10(int) Constant 264 - 16: 6(float) Constant 0 - 19: TypePointer Output 6(float) -20(@entryPointOutput): 19(ptr) Variable Output + 8: TypeInt 32 0 + 9: 8(int) Constant 1 + 10: 8(int) Constant 3400 + 11: 8(int) Constant 2 + 12: 8(int) Constant 2120 + 13: 8(int) Constant 264 4(ComputeShaderFunction): 2 Function None 3 5: Label - 21: 6(float) FunctionCall 8(@ComputeShaderFunction() - Store 20(@entryPointOutput) 21 + 14: 2 FunctionCall 6(@ComputeShaderFunction() Return FunctionEnd -8(@ComputeShaderFunction(): 6(float) Function None 7 - 9: Label - MemoryBarrier 11 12 - ControlBarrier 13 11 12 - MemoryBarrier 11 14 - ControlBarrier 13 11 14 - MemoryBarrier 13 15 - ControlBarrier 13 13 15 - ReturnValue 16 +6(@ComputeShaderFunction(): 2 Function None 3 + 7: Label + MemoryBarrier 9 10 + ControlBarrier 11 9 10 + MemoryBarrier 9 12 + ControlBarrier 11 9 12 + MemoryBarrier 11 13 + ControlBarrier 11 11 13 + Return FunctionEnd diff --git a/Test/baseResults/hlsl.intrinsics.negative.comp.out b/Test/baseResults/hlsl.intrinsics.negative.comp.out index dfcaa2b998..c0a543c28b 100644 --- a/Test/baseResults/hlsl.intrinsics.negative.comp.out +++ b/Test/baseResults/hlsl.intrinsics.negative.comp.out @@ -2,86 +2,57 @@ hlsl.intrinsics.negative.comp Shader version: 500 local_size = (1, 1, 1) 0:? Sequence -0:2 Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; ( temp float) +0:2 Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; ( temp void) 0:2 Function Parameters: 0:2 'inF0' ( in float) 0:2 'inF1' ( in float) 0:2 'inF2' ( in float) 0:2 'inI0' ( in int) +0:55 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; ( temp void) +0:55 Function Parameters: +0:55 'inF0' ( in 1-component vector of float) +0:55 'inF1' ( in 1-component vector of float) +0:55 'inF2' ( in 1-component vector of float) +0:55 'inI0' ( in 1-component vector of int) +0:62 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; ( temp void) +0:62 Function Parameters: +0:62 'inF0' ( in 2-component vector of float) +0:62 'inF1' ( in 2-component vector of float) +0:62 'inF2' ( in 2-component vector of float) +0:62 'inI0' ( in 2-component vector of int) +0:107 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; ( temp void) +0:107 Function Parameters: +0:107 'inF0' ( in 3-component vector of float) +0:107 'inF1' ( in 3-component vector of float) +0:107 'inF2' ( in 3-component vector of float) +0:107 'inI0' ( in 3-component vector of int) +0:150 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp void) +0:150 Function Parameters: +0:150 'inF0' ( in 4-component vector of float) +0:150 'inF1' ( in 4-component vector of float) +0:150 'inF2' ( in 4-component vector of float) +0:150 'inI0' ( in 4-component vector of int) +0:150 Function Definition: ComputeShaderFunction( ( temp void) +0:150 Function Parameters: 0:? Sequence -0:53 Branch: Return with expression -0:53 Constant: -0:53 0.000000 -0:57 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; ( temp 1-component vector of float) -0:57 Function Parameters: -0:57 'inF0' ( in 1-component vector of float) -0:57 'inF1' ( in 1-component vector of float) -0:57 'inF2' ( in 1-component vector of float) -0:57 'inI0' ( in 1-component vector of int) -0:? Sequence -0:62 Branch: Return with expression -0:62 Constant: -0:62 0.000000 -0:66 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; ( temp 2-component vector of float) -0:66 Function Parameters: -0:66 'inF0' ( in 2-component vector of float) -0:66 'inF1' ( in 2-component vector of float) -0:66 'inF2' ( in 2-component vector of float) -0:66 'inI0' ( in 2-component vector of int) -0:? Sequence -0:109 Branch: Return with expression -0:109 Constant: -0:109 1.000000 -0:109 2.000000 -0:113 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) -0:113 Function Parameters: -0:113 'inF0' ( in 3-component vector of float) -0:113 'inF1' ( in 3-component vector of float) -0:113 'inF2' ( in 3-component vector of float) -0:113 'inI0' ( in 3-component vector of int) -0:? Sequence -0:154 Branch: Return with expression -0:154 Constant: -0:154 1.000000 -0:154 2.000000 -0:154 3.000000 -0:158 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) -0:158 Function Parameters: -0:158 'inF0' ( in 4-component vector of float) -0:158 'inF1' ( in 4-component vector of float) -0:158 'inF2' ( in 4-component vector of float) -0:158 'inI0' ( in 4-component vector of int) -0:? Sequence -0:199 Branch: Return with expression -0:199 Constant: -0:199 1.000000 -0:199 2.000000 -0:199 3.000000 -0:199 4.000000 -0:158 Function Definition: ComputeShaderFunction( ( temp void) -0:158 Function Parameters: -0:? Sequence -0:158 move second child to first child ( temp 4-component vector of float) +0:150 move second child to first child ( temp 4-component vector of float) 0:? 'inF0' ( temp 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) -0:158 move second child to first child ( temp 4-component vector of float) +0:150 move second child to first child ( temp 4-component vector of float) 0:? 'inF1' ( temp 4-component vector of float) 0:? 'inF1' (layout( location=1) in 4-component vector of float) -0:158 move second child to first child ( temp 4-component vector of float) +0:150 move second child to first child ( temp 4-component vector of float) 0:? 'inF2' ( temp 4-component vector of float) 0:? 'inF2' (layout( location=2) in 4-component vector of float) -0:158 move second child to first child ( temp 4-component vector of int) +0:150 move second child to first child ( temp 4-component vector of int) 0:? 'inI0' ( temp 4-component vector of int) 0:? 'inI0' (layout( location=3) in 4-component vector of int) -0:158 move second child to first child ( temp 4-component vector of float) -0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:158 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) -0:? 'inF0' ( temp 4-component vector of float) -0:? 'inF1' ( temp 4-component vector of float) -0:? 'inF2' ( temp 4-component vector of float) -0:? 'inI0' ( temp 4-component vector of int) +0:150 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp void) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inI0' ( temp 4-component vector of int) 0:? Linker Objects -0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) 0:? 'inF1' (layout( location=1) in 4-component vector of float) 0:? 'inF2' (layout( location=2) in 4-component vector of float) @@ -94,100 +65,70 @@ Linked compute stage: Shader version: 500 local_size = (1, 1, 1) 0:? Sequence -0:2 Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; ( temp float) +0:2 Function Definition: ComputeShaderFunctionS(f1;f1;f1;i1; ( temp void) 0:2 Function Parameters: 0:2 'inF0' ( in float) 0:2 'inF1' ( in float) 0:2 'inF2' ( in float) 0:2 'inI0' ( in int) +0:55 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; ( temp void) +0:55 Function Parameters: +0:55 'inF0' ( in 1-component vector of float) +0:55 'inF1' ( in 1-component vector of float) +0:55 'inF2' ( in 1-component vector of float) +0:55 'inI0' ( in 1-component vector of int) +0:62 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; ( temp void) +0:62 Function Parameters: +0:62 'inF0' ( in 2-component vector of float) +0:62 'inF1' ( in 2-component vector of float) +0:62 'inF2' ( in 2-component vector of float) +0:62 'inI0' ( in 2-component vector of int) +0:107 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; ( temp void) +0:107 Function Parameters: +0:107 'inF0' ( in 3-component vector of float) +0:107 'inF1' ( in 3-component vector of float) +0:107 'inF2' ( in 3-component vector of float) +0:107 'inI0' ( in 3-component vector of int) +0:150 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp void) +0:150 Function Parameters: +0:150 'inF0' ( in 4-component vector of float) +0:150 'inF1' ( in 4-component vector of float) +0:150 'inF2' ( in 4-component vector of float) +0:150 'inI0' ( in 4-component vector of int) +0:150 Function Definition: ComputeShaderFunction( ( temp void) +0:150 Function Parameters: 0:? Sequence -0:53 Branch: Return with expression -0:53 Constant: -0:53 0.000000 -0:57 Function Definition: ComputeShaderFunction1(vf1;vf1;vf1;vi1; ( temp 1-component vector of float) -0:57 Function Parameters: -0:57 'inF0' ( in 1-component vector of float) -0:57 'inF1' ( in 1-component vector of float) -0:57 'inF2' ( in 1-component vector of float) -0:57 'inI0' ( in 1-component vector of int) -0:? Sequence -0:62 Branch: Return with expression -0:62 Constant: -0:62 0.000000 -0:66 Function Definition: ComputeShaderFunction2(vf2;vf2;vf2;vi2; ( temp 2-component vector of float) -0:66 Function Parameters: -0:66 'inF0' ( in 2-component vector of float) -0:66 'inF1' ( in 2-component vector of float) -0:66 'inF2' ( in 2-component vector of float) -0:66 'inI0' ( in 2-component vector of int) -0:? Sequence -0:109 Branch: Return with expression -0:109 Constant: -0:109 1.000000 -0:109 2.000000 -0:113 Function Definition: ComputeShaderFunction3(vf3;vf3;vf3;vi3; ( temp 3-component vector of float) -0:113 Function Parameters: -0:113 'inF0' ( in 3-component vector of float) -0:113 'inF1' ( in 3-component vector of float) -0:113 'inF2' ( in 3-component vector of float) -0:113 'inI0' ( in 3-component vector of int) -0:? Sequence -0:154 Branch: Return with expression -0:154 Constant: -0:154 1.000000 -0:154 2.000000 -0:154 3.000000 -0:158 Function Definition: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) -0:158 Function Parameters: -0:158 'inF0' ( in 4-component vector of float) -0:158 'inF1' ( in 4-component vector of float) -0:158 'inF2' ( in 4-component vector of float) -0:158 'inI0' ( in 4-component vector of int) -0:? Sequence -0:199 Branch: Return with expression -0:199 Constant: -0:199 1.000000 -0:199 2.000000 -0:199 3.000000 -0:199 4.000000 -0:158 Function Definition: ComputeShaderFunction( ( temp void) -0:158 Function Parameters: -0:? Sequence -0:158 move second child to first child ( temp 4-component vector of float) +0:150 move second child to first child ( temp 4-component vector of float) 0:? 'inF0' ( temp 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) -0:158 move second child to first child ( temp 4-component vector of float) +0:150 move second child to first child ( temp 4-component vector of float) 0:? 'inF1' ( temp 4-component vector of float) 0:? 'inF1' (layout( location=1) in 4-component vector of float) -0:158 move second child to first child ( temp 4-component vector of float) +0:150 move second child to first child ( temp 4-component vector of float) 0:? 'inF2' ( temp 4-component vector of float) 0:? 'inF2' (layout( location=2) in 4-component vector of float) -0:158 move second child to first child ( temp 4-component vector of int) +0:150 move second child to first child ( temp 4-component vector of int) 0:? 'inI0' ( temp 4-component vector of int) 0:? 'inI0' (layout( location=3) in 4-component vector of int) -0:158 move second child to first child ( temp 4-component vector of float) -0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -0:158 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp 4-component vector of float) -0:? 'inF0' ( temp 4-component vector of float) -0:? 'inF1' ( temp 4-component vector of float) -0:? 'inF2' ( temp 4-component vector of float) -0:? 'inI0' ( temp 4-component vector of int) +0:150 Function Call: @ComputeShaderFunction(vf4;vf4;vf4;vi4; ( temp void) +0:? 'inF0' ( temp 4-component vector of float) +0:? 'inF1' ( temp 4-component vector of float) +0:? 'inF2' ( temp 4-component vector of float) +0:? 'inI0' ( temp 4-component vector of int) 0:? Linker Objects -0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) 0:? 'inF0' (layout( location=0) in 4-component vector of float) 0:? 'inF1' (layout( location=1) in 4-component vector of float) 0:? 'inF2' (layout( location=2) in 4-component vector of float) 0:? 'inI0' (layout( location=3) in 4-component vector of int) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 99 +// Id's are bound by 79 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "ComputeShaderFunction" 76 79 82 86 89 + EntryPoint GLCompute 4 "ComputeShaderFunction" 58 61 64 68 ExecutionMode 4 LocalSize 1 1 1 Source HLSL 500 Name 4 "ComputeShaderFunction" @@ -216,129 +157,116 @@ Validation failed Name 51 "inF1" Name 52 "inF2" Name 53 "inI0" - Name 74 "inF0" - Name 76 "inF0" - Name 78 "inF1" - Name 79 "inF1" - Name 81 "inF2" - Name 82 "inF2" - Name 84 "inI0" - Name 86 "inI0" - Name 89 "@entryPointOutput" - Name 90 "param" - Name 92 "param" - Name 94 "param" - Name 96 "param" - Decorate 76(inF0) Location 0 - Decorate 79(inF1) Location 1 - Decorate 82(inF2) Location 2 - Decorate 86(inI0) Location 3 - Decorate 89(@entryPointOutput) Location 0 + Name 56 "inF0" + Name 58 "inF0" + Name 60 "inF1" + Name 61 "inF1" + Name 63 "inF2" + Name 64 "inF2" + Name 66 "inI0" + Name 68 "inI0" + Name 70 "param" + Name 72 "param" + Name 74 "param" + Name 76 "param" + Decorate 58(inF0) Location 0 + Decorate 61(inF1) Location 1 + Decorate 64(inF2) Location 2 + Decorate 68(inI0) Location 3 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 7: TypePointer Function 6(float) 8: TypeInt 32 1 9: TypePointer Function 8(int) - 10: TypeFunction 6(float) 7(ptr) 7(ptr) 7(ptr) 9(ptr) + 10: TypeFunction 2 7(ptr) 7(ptr) 7(ptr) 9(ptr) 23: TypeVector 6(float) 2 24: TypePointer Function 23(fvec2) 25: TypeVector 8(int) 2 26: TypePointer Function 25(ivec2) - 27: TypeFunction 23(fvec2) 24(ptr) 24(ptr) 24(ptr) 26(ptr) + 27: TypeFunction 2 24(ptr) 24(ptr) 24(ptr) 26(ptr) 34: TypeVector 6(float) 3 35: TypePointer Function 34(fvec3) 36: TypeVector 8(int) 3 37: TypePointer Function 36(ivec3) - 38: TypeFunction 34(fvec3) 35(ptr) 35(ptr) 35(ptr) 37(ptr) + 38: TypeFunction 2 35(ptr) 35(ptr) 35(ptr) 37(ptr) 45: TypeVector 6(float) 4 46: TypePointer Function 45(fvec4) 47: TypeVector 8(int) 4 48: TypePointer Function 47(ivec4) - 49: TypeFunction 45(fvec4) 46(ptr) 46(ptr) 46(ptr) 48(ptr) - 56: 6(float) Constant 0 - 61: 6(float) Constant 1065353216 - 62: 6(float) Constant 1073741824 - 63: 23(fvec2) ConstantComposite 61 62 - 66: 6(float) Constant 1077936128 - 67: 34(fvec3) ConstantComposite 61 62 66 - 70: 6(float) Constant 1082130432 - 71: 45(fvec4) ConstantComposite 61 62 66 70 - 75: TypePointer Input 45(fvec4) - 76(inF0): 75(ptr) Variable Input - 79(inF1): 75(ptr) Variable Input - 82(inF2): 75(ptr) Variable Input - 85: TypePointer Input 47(ivec4) - 86(inI0): 85(ptr) Variable Input - 88: TypePointer Output 45(fvec4) -89(@entryPointOutput): 88(ptr) Variable Output + 49: TypeFunction 2 46(ptr) 46(ptr) 46(ptr) 48(ptr) + 57: TypePointer Input 45(fvec4) + 58(inF0): 57(ptr) Variable Input + 61(inF1): 57(ptr) Variable Input + 64(inF2): 57(ptr) Variable Input + 67: TypePointer Input 47(ivec4) + 68(inI0): 67(ptr) Variable Input 4(ComputeShaderFunction): 2 Function None 3 5: Label - 74(inF0): 46(ptr) Variable Function - 78(inF1): 46(ptr) Variable Function - 81(inF2): 46(ptr) Variable Function - 84(inI0): 48(ptr) Variable Function - 90(param): 46(ptr) Variable Function - 92(param): 46(ptr) Variable Function - 94(param): 46(ptr) Variable Function - 96(param): 48(ptr) Variable Function - 77: 45(fvec4) Load 76(inF0) - Store 74(inF0) 77 - 80: 45(fvec4) Load 79(inF1) - Store 78(inF1) 80 - 83: 45(fvec4) Load 82(inF2) - Store 81(inF2) 83 - 87: 47(ivec4) Load 86(inI0) - Store 84(inI0) 87 - 91: 45(fvec4) Load 74(inF0) - Store 90(param) 91 - 93: 45(fvec4) Load 78(inF1) - Store 92(param) 93 - 95: 45(fvec4) Load 81(inF2) - Store 94(param) 95 - 97: 47(ivec4) Load 84(inI0) - Store 96(param) 97 - 98: 45(fvec4) FunctionCall 54(@ComputeShaderFunction(vf4;vf4;vf4;vi4;) 90(param) 92(param) 94(param) 96(param) - Store 89(@entryPointOutput) 98 + 56(inF0): 46(ptr) Variable Function + 60(inF1): 46(ptr) Variable Function + 63(inF2): 46(ptr) Variable Function + 66(inI0): 48(ptr) Variable Function + 70(param): 46(ptr) Variable Function + 72(param): 46(ptr) Variable Function + 74(param): 46(ptr) Variable Function + 76(param): 48(ptr) Variable Function + 59: 45(fvec4) Load 58(inF0) + Store 56(inF0) 59 + 62: 45(fvec4) Load 61(inF1) + Store 60(inF1) 62 + 65: 45(fvec4) Load 64(inF2) + Store 63(inF2) 65 + 69: 47(ivec4) Load 68(inI0) + Store 66(inI0) 69 + 71: 45(fvec4) Load 56(inF0) + Store 70(param) 71 + 73: 45(fvec4) Load 60(inF1) + Store 72(param) 73 + 75: 45(fvec4) Load 63(inF2) + Store 74(param) 75 + 77: 47(ivec4) Load 66(inI0) + Store 76(param) 77 + 78: 2 FunctionCall 54(@ComputeShaderFunction(vf4;vf4;vf4;vi4;) 70(param) 72(param) 74(param) 76(param) Return FunctionEnd -15(ComputeShaderFunctionS(f1;f1;f1;i1;): 6(float) Function None 10 +15(ComputeShaderFunctionS(f1;f1;f1;i1;): 2 Function None 10 11(inF0): 7(ptr) FunctionParameter 12(inF1): 7(ptr) FunctionParameter 13(inF2): 7(ptr) FunctionParameter 14(inI0): 9(ptr) FunctionParameter 16: Label - ReturnValue 56 + Return FunctionEnd -21(ComputeShaderFunction1(vf1;vf1;vf1;vi1;): 6(float) Function None 10 +21(ComputeShaderFunction1(vf1;vf1;vf1;vi1;): 2 Function None 10 17(inF0): 7(ptr) FunctionParameter 18(inF1): 7(ptr) FunctionParameter 19(inF2): 7(ptr) FunctionParameter 20(inI0): 9(ptr) FunctionParameter 22: Label - ReturnValue 56 + Return FunctionEnd -32(ComputeShaderFunction2(vf2;vf2;vf2;vi2;): 23(fvec2) Function None 27 +32(ComputeShaderFunction2(vf2;vf2;vf2;vi2;): 2 Function None 27 28(inF0): 24(ptr) FunctionParameter 29(inF1): 24(ptr) FunctionParameter 30(inF2): 24(ptr) FunctionParameter 31(inI0): 26(ptr) FunctionParameter 33: Label - ReturnValue 63 + Return FunctionEnd -43(ComputeShaderFunction3(vf3;vf3;vf3;vi3;): 34(fvec3) Function None 38 +43(ComputeShaderFunction3(vf3;vf3;vf3;vi3;): 2 Function None 38 39(inF0): 35(ptr) FunctionParameter 40(inF1): 35(ptr) FunctionParameter 41(inF2): 35(ptr) FunctionParameter 42(inI0): 37(ptr) FunctionParameter 44: Label - ReturnValue 67 + Return FunctionEnd -54(@ComputeShaderFunction(vf4;vf4;vf4;vi4;): 45(fvec4) Function None 49 +54(@ComputeShaderFunction(vf4;vf4;vf4;vi4;): 2 Function None 49 50(inF0): 46(ptr) FunctionParameter 51(inF1): 46(ptr) FunctionParameter 52(inF2): 46(ptr) FunctionParameter 53(inI0): 48(ptr) FunctionParameter 55: Label - ReturnValue 71 + Return FunctionEnd diff --git a/Test/hlsl.attribute.expression.comp b/Test/hlsl.attribute.expression.comp index 535fbad42c..23489fa75e 100644 --- a/Test/hlsl.attribute.expression.comp +++ b/Test/hlsl.attribute.expression.comp @@ -5,11 +5,9 @@ uniform int bound; #define BAR 2 [numthreads(2+2, 2*3, (1+FOO)*BAR)] -float4 main() : SV_TARGET +void main() { [unroll(5*2 + 1) ] for (int x=0; x Date: Wed, 13 Jan 2021 14:36:17 -0600 Subject: [PATCH 184/365] Implement GLSL_EXT_shader_atomic_float2 --- SPIRV/GLSL.ext.EXT.h | 2 + SPIRV/GlslangToSpv.cpp | 42 ++++- SPIRV/doc.cpp | 16 ++ SPIRV/spirv.hpp | 26 ++- Test/spv.atomicFloat2.comp | 179 +++++++++++++++++++++ glslang/MachineIndependent/Initialize.cpp | 36 +++++ glslang/MachineIndependent/ParseHelper.cpp | 39 +++-- glslang/MachineIndependent/Versions.cpp | 2 + glslang/MachineIndependent/Versions.h | 1 + 9 files changed, 319 insertions(+), 24 deletions(-) create mode 100644 Test/spv.atomicFloat2.comp diff --git a/SPIRV/GLSL.ext.EXT.h b/SPIRV/GLSL.ext.EXT.h index 20b9e54014..f48f1304d6 100644 --- a/SPIRV/GLSL.ext.EXT.h +++ b/SPIRV/GLSL.ext.EXT.h @@ -36,6 +36,8 @@ static const char* const E_SPV_EXT_fragment_fully_covered = "SPV_EXT_fragment_fu 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"; static const char* const E_SPV_EXT_shader_atomic_float_add = "SPV_EXT_shader_atomic_float_add"; +static const char* const E_SPV_EXT_shader_atomic_float16_add = "SPV_EXT_shader_atomic_float16_add"; +static const char* const E_SPV_EXT_shader_atomic_float_min_max = "SPV_EXT_shader_atomic_float_min_max"; static const char* const E_SPV_EXT_shader_image_int64 = "SPV_EXT_shader_image_int64"; #endif // #ifndef GLSLextEXT_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 5a25c8d4e2..b6a9bda868 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -6900,13 +6900,17 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv case glslang::EOpImageAtomicAdd: case glslang::EOpAtomicCounterAdd: opCode = spv::OpAtomicIAdd; - if (typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { + if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { opCode = spv::OpAtomicFAddEXT; builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_add); - if (typeProxy == glslang::EbtFloat) + if (typeProxy == glslang::EbtFloat16) { + builder.addExtension(spv::E_SPV_EXT_shader_atomic_float16_add); + builder.addCapability(spv::CapabilityAtomicFloat16AddEXT); + } else if (typeProxy == glslang::EbtFloat) { builder.addCapability(spv::CapabilityAtomicFloat32AddEXT); - else + } else { builder.addCapability(spv::CapabilityAtomicFloat64AddEXT); + } } break; case glslang::EOpAtomicSubtract: @@ -6916,14 +6920,38 @@ spv::Id TGlslangToSpvTraverser::createAtomicOperation(glslang::TOperator op, spv case glslang::EOpAtomicMin: case glslang::EOpImageAtomicMin: case glslang::EOpAtomicCounterMin: - opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? - spv::OpAtomicUMin : spv::OpAtomicSMin; + if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { + opCode = spv::OpAtomicFMinEXT; + builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max); + if (typeProxy == glslang::EbtFloat16) + builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT); + else if (typeProxy == glslang::EbtFloat) + builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT); + else + builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT); + } else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) { + opCode = spv::OpAtomicUMin; + } else { + opCode = spv::OpAtomicSMin; + } break; case glslang::EOpAtomicMax: case glslang::EOpImageAtomicMax: case glslang::EOpAtomicCounterMax: - opCode = (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) ? - spv::OpAtomicUMax : spv::OpAtomicSMax; + if (typeProxy == glslang::EbtFloat16 || typeProxy == glslang::EbtFloat || typeProxy == glslang::EbtDouble) { + opCode = spv::OpAtomicFMaxEXT; + builder.addExtension(spv::E_SPV_EXT_shader_atomic_float_min_max); + if (typeProxy == glslang::EbtFloat16) + builder.addCapability(spv::CapabilityAtomicFloat16MinMaxEXT); + else if (typeProxy == glslang::EbtFloat) + builder.addCapability(spv::CapabilityAtomicFloat32MinMaxEXT); + else + builder.addCapability(spv::CapabilityAtomicFloat64MinMaxEXT); + } else if (typeProxy == glslang::EbtUint || typeProxy == glslang::EbtUint64) { + opCode = spv::OpAtomicUMax; + } else { + opCode = spv::OpAtomicSMax; + } break; case glslang::EOpAtomicAnd: case glslang::EOpImageAtomicAnd: diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 633b03a784..31b20a1f24 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -966,8 +966,12 @@ const char* CapabilityString(int info) case CapabilityIntegerFunctions2INTEL: return "CapabilityIntegerFunctions2INTEL"; + case CapabilityAtomicFloat16AddEXT: return "AtomicFloat16AddEXT"; case CapabilityAtomicFloat32AddEXT: return "AtomicFloat32AddEXT"; case CapabilityAtomicFloat64AddEXT: return "AtomicFloat64AddEXT"; + case CapabilityAtomicFloat16MinMaxEXT: return "AtomicFloat16MinMaxEXT"; + case CapabilityAtomicFloat32MinMaxEXT: return "AtomicFloat32MinMaxEXT"; + case CapabilityAtomicFloat64MinMaxEXT: return "AtomicFloat64MinMaxEXT"; case CapabilityWorkgroupMemoryExplicitLayoutKHR: return "CapabilityWorkgroupMemoryExplicitLayoutKHR"; case CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR: return "CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR"; @@ -1352,6 +1356,8 @@ const char* OpcodeString(int op) case 4432: return "OpSubgroupReadInvocationKHR"; case OpAtomicFAddEXT: return "OpAtomicFAddEXT"; + case OpAtomicFMinEXT: return "OpAtomicFMinEXT"; + case OpAtomicFMaxEXT: return "OpAtomicFMaxEXT"; case 5000: return "OpGroupIAddNonUniformAMD"; case 5001: return "OpGroupFAddNonUniformAMD"; @@ -2342,6 +2348,16 @@ void Parameterize() InstructionDesc[OpAtomicSMax].operands.push(OperandMemorySemantics, "'Semantics'"); InstructionDesc[OpAtomicSMax].operands.push(OperandId, "'Value'"); + InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFMinEXT].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFMinEXT].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicFMinEXT].operands.push(OperandId, "'Value'"); + + InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Pointer'"); + InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandScope, "'Scope'"); + InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandMemorySemantics, "'Semantics'"); + InstructionDesc[OpAtomicFMaxEXT].operands.push(OperandId, "'Value'"); + InstructionDesc[OpAtomicAnd].operands.push(OperandId, "'Pointer'"); InstructionDesc[OpAtomicAnd].operands.push(OperandScope, "'Scope'"); InstructionDesc[OpAtomicAnd].operands.push(OperandMemorySemantics, "'Semantics'"); diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index dfc1a9940a..317db81f17 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -410,6 +410,7 @@ enum FPRoundingMode { enum LinkageType { LinkageTypeExport = 0, LinkageTypeImport = 1, + LinkageTypeLinkOnceODR = 2, LinkageTypeMax = 0x7fffffff, }; @@ -1011,8 +1012,12 @@ enum Capability { CapabilityFunctionPointersINTEL = 5603, CapabilityIndirectReferencesINTEL = 5604, CapabilityAsmINTEL = 5606, + CapabilityAtomicFloat32MinMaxEXT = 5612, + CapabilityAtomicFloat64MinMaxEXT = 5613, + CapabilityAtomicFloat16MinMaxEXT = 5616, CapabilityVectorComputeINTEL = 5617, CapabilityVectorAnyINTEL = 5619, + CapabilityExpectAssumeKHR = 5629, CapabilitySubgroupAvcMotionEstimationINTEL = 5696, CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, @@ -1036,6 +1041,7 @@ enum Capability { CapabilityAtomicFloat32AddEXT = 6033, CapabilityAtomicFloat64AddEXT = 6034, CapabilityLongConstantCompositeINTEL = 6089, + CapabilityAtomicFloat16AddEXT = 6095, CapabilityMax = 0x7fffffff, }; @@ -1103,15 +1109,15 @@ enum FragmentShadingRateMask { }; enum FPDenormMode { - FPDenormModePreserve = 0, - FPDenormModeFlushToZero = 1, - FPDenormModeMax = 0x7fffffff, + FPDenormModePreserve = 0, + FPDenormModeFlushToZero = 1, + FPDenormModeMax = 0x7fffffff, }; enum FPOperationMode { - FPOperationModeIEEE = 0, - FPOperationModeALT = 1, - FPOperationModeMax = 0x7fffffff, + FPOperationModeIEEE = 0, + FPOperationModeALT = 1, + FPOperationModeMax = 0x7fffffff, }; enum Op { @@ -1538,6 +1544,10 @@ enum Op { OpAsmTargetINTEL = 5609, OpAsmINTEL = 5610, OpAsmCallINTEL = 5611, + OpAtomicFMinEXT = 5614, + OpAtomicFMaxEXT = 5615, + OpAssumeTrueKHR = 5630, + OpExpectKHR = 5631, OpDecorateString = 5632, OpDecorateStringGOOGLE = 5632, OpMemberDecorateString = 5633, @@ -2120,6 +2130,10 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; + case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; + case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; + case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; + case OpExpectKHR: *hasResult = true; *hasResultType = true; break; case OpDecorateString: *hasResult = false; *hasResultType = false; break; case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; diff --git a/Test/spv.atomicFloat2.comp b/Test/spv.atomicFloat2.comp new file mode 100644 index 0000000000..09235c5e6b --- /dev/null +++ b/Test/spv.atomicFloat2.comp @@ -0,0 +1,179 @@ +#version 450 core + +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_EXT_shader_explicit_arithmetic_types_float16 : enable +#extension GL_EXT_shader_atomic_float2: enable +#pragma use_vulkan_memory_model + +layout(local_size_x = 16, local_size_y = 16) in; + +layout(binding = 0) buffer Buffer +{ + float16_t datah; + float dataf; + double datad; +} buf; + +shared float16_t atomh; +shared float atomf; +shared double atomd; + +layout(binding = 0, r32f) volatile coherent uniform image1D fimage1D; +layout(binding = 1, r32f) volatile coherent uniform image1DArray fimage1DArray; +layout(binding = 2, r32f) volatile coherent uniform image2D fimage2D; +layout(binding = 3, r32f) volatile coherent uniform image2DArray fimage2DArray; +layout(binding = 4, r32f) volatile coherent uniform image2DRect fimage2DRect; +layout(binding = 5, r32f) volatile coherent uniform imageCube fimageCube; +layout(binding = 6, r32f) volatile coherent uniform imageCubeArray fimageCubeArray; +layout(binding = 9, r32f) volatile coherent uniform image3D fimage3D; + +void main() +{ + //atomicAdd + float16_t resulth = float16_t(0.0); + resulth = atomicAdd(atomh, float16_t(3.0)); + resulth = atomicAdd(atomh, float16_t(4.5), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + resulth = atomicAdd(buf.datah, float16_t(3.0)); + resulth = atomicAdd(buf.datah, float16_t(4.5), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + + //atomicMin + resulth = atomicMin(atomh, float16_t(3.0)); + resulth = atomicMin(atomh, float16_t(4.5), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + resulth = atomicMin(buf.datah, float16_t(3.0)); + resulth = atomicMin(buf.datah, float16_t(4.5), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + + float resultf = 0.0; + resultf = atomicMin(atomf, 3.0); + resultf = atomicMin(atomf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + resultf = atomicMin(buf.dataf, 3.0); + resultf = atomicMin(buf.dataf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + + double resultd = 0.0; + resultd = atomicMin(atomd, 3.0); + resultd = atomicMin(atomd, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + resultd = atomicMin(buf.datad, 3.0); + resultd = atomicMin(buf.datad, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + + //atomicMax + resulth = atomicMax(atomh, float16_t(3.0)); + resulth = atomicMax(atomh, float16_t(4.5), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + resulth = atomicMax(buf.datah, float16_t(3.0)); + resulth = atomicMax(buf.datah, float16_t(4.5), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + + resultf = atomicMax(atomf, 3.0); + resultf = atomicMax(atomf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + resultf = atomicMax(buf.dataf, 3.0); + resultf = atomicMax(buf.dataf, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + + resultd = atomicMax(atomd, 3.0); + resultd = atomicMax(atomd, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + resultd = atomicMax(buf.datad, 3.0); + resultd = atomicMax(buf.datad, 4.5, gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelaxed); + + //atomicExchange + resulth = atomicExchange(buf.datah, resulth); + buf.datah += resulth; + resulth = atomicExchange(buf.datah, resulth, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed); + buf.datah += resulth; + resulth = atomicExchange(atomh, resulth); + buf.datah += resulth; + resulth = atomicExchange(atomh, resulth, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed); + buf.datah += resulth; + + //atomic load/store + resulth = atomicLoad(buf.datah, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed); + atomicStore(buf.datah, resulth, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed); + buf.datah += resulth; + + resulth = atomicLoad(atomh, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed); + atomicStore(atomh, resulth, gl_ScopeDevice, gl_StorageSemanticsShared, gl_SemanticsRelaxed); + buf.datah += resulth; + + // image atomics on 1D: + atomf = imageAtomicMin(fimage1D, int(0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMin(fimage1D, int(1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + atomf = imageAtomicMax(fimage1D, int(0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMax(fimage1D, int(1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + // image atomics on 1D Array: + atomf = imageAtomicMin(fimage1DArray, ivec2(0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMin(fimage1DArray, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + atomf = imageAtomicMax(fimage1DArray, ivec2(0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMax(fimage1DArray, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + // image atomics on 2D: + atomf = imageAtomicMin(fimage2D, ivec2(0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMin(fimage2D, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + atomf = imageAtomicMax(fimage2D, ivec2(0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMax(fimage2D, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + // image atomics on 2D Rect: + atomf = imageAtomicMin(fimage2DRect, ivec2(0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMin(fimage2DRect, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + atomf = imageAtomicMax(fimage2DRect, ivec2(0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMax(fimage2DRect, ivec2(1,1), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + // image atomics on 2D Array: + atomf = imageAtomicMin(fimage2DArray, ivec3(0,0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMin(fimage2DArray, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + atomf = imageAtomicMax(fimage2DArray, ivec3(0,0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMax(fimage2DArray, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + // image atomics on Cube: + atomf = imageAtomicMin(fimageCube, ivec3(0,0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMin(fimageCube, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + atomf = imageAtomicMax(fimageCube, ivec3(0,0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMax(fimageCube, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + // image atomics on Cube Array: + atomf = imageAtomicMin(fimageCubeArray, ivec3(0,0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMin(fimageCubeArray, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + atomf = imageAtomicMax(fimageCubeArray, ivec3(0,0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMax(fimageCubeArray, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + // image atomics on 3D: + atomf = imageAtomicMin(fimage3D, ivec3(0,0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMin(fimage3D, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; + + atomf = imageAtomicMax(fimage3D, ivec3(0,0,0), 2.0); + buf.dataf += atomf; + atomf = imageAtomicMax(fimage3D, ivec3(1,1,0), 3.0, gl_ScopeDevice, gl_StorageSemanticsImage , gl_SemanticsRelaxed); + buf.dataf += atomf; +} diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 321a902862..49817a0adc 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1436,11 +1436,23 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV " int64_t atomicMin(coherent volatile inout int64_t, int64_t);" "uint64_t atomicMin(coherent volatile inout uint64_t, uint64_t, int, int, int);" " int64_t atomicMin(coherent volatile inout int64_t, int64_t, int, int, int);" + "float16_t atomicMin(coherent volatile inout float16_t, float16_t);" + "float16_t atomicMin(coherent volatile inout float16_t, float16_t, int, int, int);" + " float atomicMin(coherent volatile inout float, float);" + " float atomicMin(coherent volatile inout float, float, int, int, int);" + " double atomicMin(coherent volatile inout double, double);" + " double atomicMin(coherent volatile inout double, double, int, int, int);" "uint64_t atomicMax(coherent volatile inout uint64_t, uint64_t);" " int64_t atomicMax(coherent volatile inout int64_t, int64_t);" "uint64_t atomicMax(coherent volatile inout uint64_t, uint64_t, int, int, int);" " int64_t atomicMax(coherent volatile inout int64_t, int64_t, int, int, int);" + "float16_t atomicMax(coherent volatile inout float16_t, float16_t);" + "float16_t atomicMax(coherent volatile inout float16_t, float16_t, int, int, int);" + " float atomicMax(coherent volatile inout float, float);" + " float atomicMax(coherent volatile inout float, float, int, int, int);" + " double atomicMax(coherent volatile inout double, double);" + " double atomicMax(coherent volatile inout double, double, int, int, int);" "uint64_t atomicAnd(coherent volatile inout uint64_t, uint64_t);" " int64_t atomicAnd(coherent volatile inout int64_t, int64_t);" @@ -1461,6 +1473,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV " int64_t atomicAdd(coherent volatile inout int64_t, int64_t);" "uint64_t atomicAdd(coherent volatile inout uint64_t, uint64_t, int, int, int);" " int64_t atomicAdd(coherent volatile inout int64_t, int64_t, int, int, int);" + "float16_t atomicAdd(coherent volatile inout float16_t, float16_t);" + "float16_t atomicAdd(coherent volatile inout float16_t, float16_t, int, int, int);" " float atomicAdd(coherent volatile inout float, float);" " float atomicAdd(coherent volatile inout float, float, int, int, int);" " double atomicAdd(coherent volatile inout double, double);" @@ -1470,6 +1484,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV " int64_t atomicExchange(coherent volatile inout int64_t, int64_t);" "uint64_t atomicExchange(coherent volatile inout uint64_t, uint64_t, int, int, int);" " int64_t atomicExchange(coherent volatile inout int64_t, int64_t, int, int, int);" + "float16_t atomicExchange(coherent volatile inout float16_t, float16_t);" + "float16_t atomicExchange(coherent volatile inout float16_t, float16_t, int, int, int);" " float atomicExchange(coherent volatile inout float, float);" " float atomicExchange(coherent volatile inout float, float, int, int, int);" " double atomicExchange(coherent volatile inout double, double);" @@ -1482,11 +1498,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "uint64_t atomicLoad(coherent volatile in uint64_t, int, int, int);" " int64_t atomicLoad(coherent volatile in int64_t, int, int, int);" + "float16_t atomicLoad(coherent volatile in float16_t, int, int, int);" " float atomicLoad(coherent volatile in float, int, int, int);" " double atomicLoad(coherent volatile in double, int, int, int);" "void atomicStore(coherent volatile out uint64_t, uint64_t, int, int, int);" "void atomicStore(coherent volatile out int64_t, int64_t, int, int, int);" + "void atomicStore(coherent volatile out float16_t, float16_t, int, int, int);" "void atomicStore(coherent volatile out float, float, int, int, int);" "void atomicStore(coherent volatile out double, double, int, int, int);" "\n"); @@ -6478,6 +6496,24 @@ void TBuiltIns::addImageFunctions(TSampler sampler, const TString& typeName, int commonBuiltins.append(imageParams); commonBuiltins.append(", float"); commonBuiltins.append(", int, int, int);\n"); + + commonBuiltins.append("float imageAtomicMin(volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(", float);\n"); + + commonBuiltins.append("float imageAtomicMin(volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(", float"); + commonBuiltins.append(", int, int, int);\n"); + + commonBuiltins.append("float imageAtomicMax(volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(", float);\n"); + + commonBuiltins.append("float imageAtomicMax(volatile coherent "); + commonBuiltins.append(imageParams); + commonBuiltins.append(", float"); + commonBuiltins.append(", int, int, int);\n"); } } } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 3c08c658c4..1ba66529d7 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2279,18 +2279,23 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan error(loc, "only supported on image with format r64i", fnCandidate.getName().c_str(), ""); else if (callNode.getType().getBasicType() == EbtUint64 && imageType.getQualifier().getFormat() != ElfR64ui) error(loc, "only supported on image with format r64ui", fnCandidate.getName().c_str(), ""); - } else { - bool isImageAtomicOnFloatAllowed = ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) || - (fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) || - (fnCandidate.getName().compare(0, 16, "imageAtomicStore") == 0) || - (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") == 0)); - if (imageType.getSampler().type == EbtFloat && isImageAtomicOnFloatAllowed && - (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") != 0)) // imageAtomicExchange doesn't require GL_EXT_shader_atomic_float + } else if (imageType.getSampler().type == EbtFloat) { + if (fnCandidate.getName().compare(0, 19, "imageAtomicExchange") == 0) { + // imageAtomicExchange doesn't require an extension + } else if ((fnCandidate.getName().compare(0, 14, "imageAtomicAdd") == 0) || + (fnCandidate.getName().compare(0, 15, "imageAtomicLoad") == 0) || + (fnCandidate.getName().compare(0, 16, "imageAtomicStore") == 0)) { requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str()); - if (!isImageAtomicOnFloatAllowed) + } else if ((fnCandidate.getName().compare(0, 14, "imageAtomicMin") == 0) || + (fnCandidate.getName().compare(0, 14, "imageAtomicMax") == 0)) { + requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str()); + } else { error(loc, "only supported on integer images", fnCandidate.getName().c_str(), ""); - else if (imageType.getQualifier().getFormat() != ElfR32f && isEsProfile()) + } + if (imageType.getQualifier().getFormat() != ElfR32f && isEsProfile()) error(loc, "only supported on image with format r32f", fnCandidate.getName().c_str(), ""); + } else { + error(loc, "not supported on this image type", fnCandidate.getName().c_str(), ""); } const size_t maxArgs = imageType.getSampler().isMultiSample() ? 5 : 4; @@ -2319,16 +2324,28 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan memorySemanticsCheck(loc, fnCandidate, callNode); if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange || callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpAtomicStore) && - (arg0->getType().isFloatingDomain())) { + (arg0->getType().getBasicType() == EbtFloat || + arg0->getType().getBasicType() == EbtDouble)) { requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str()); + } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange || + callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpAtomicStore || + callNode.getOp() == EOpAtomicMin || callNode.getOp() == EOpAtomicMax) && + arg0->getType().isFloatingDomain()) { + requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str()); } } else if (arg0->getType().getBasicType() == EbtInt64 || arg0->getType().getBasicType() == EbtUint64) { const char* const extensions[2] = { E_GL_NV_shader_atomic_int64, E_GL_EXT_shader_atomic_int64 }; requireExtensions(loc, 2, extensions, fnCandidate.getName().c_str()); } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange) && - (arg0->getType().isFloatingDomain())) { + (arg0->getType().getBasicType() == EbtFloat || + arg0->getType().getBasicType() == EbtDouble)) { requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float, fnCandidate.getName().c_str()); + } else if ((callNode.getOp() == EOpAtomicAdd || callNode.getOp() == EOpAtomicExchange || + callNode.getOp() == EOpAtomicLoad || callNode.getOp() == EOpAtomicStore || + callNode.getOp() == EOpAtomicMin || callNode.getOp() == EOpAtomicMax) && + arg0->getType().isFloatingDomain()) { + requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str()); } break; } diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index c7ce0ca0c0..a580718ac5 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -354,6 +354,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_int64] = EBhDisable; extensionBehavior[E_GL_EXT_shader_subgroup_extended_types_float16] = EBhDisable; extensionBehavior[E_GL_EXT_shader_atomic_float] = EBhDisable; + extensionBehavior[E_GL_EXT_shader_atomic_float2] = EBhDisable; } #endif // GLSLANG_WEB @@ -537,6 +538,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_shader_subgroup_extended_types_float16 1\n" "#define GL_EXT_shader_atomic_float 1\n" + "#define GL_EXT_shader_atomic_float2 1\n" ; if (version >= 150) { diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 01f819daed..2313d0963c 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -306,6 +306,7 @@ const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shad const char* const E_GL_EXT_terminate_invocation = "GL_EXT_terminate_invocation"; const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float"; +const char* const E_GL_EXT_shader_atomic_float2 = "GL_EXT_shader_atomic_float2"; // Arrays of extensions for the above AEP duplications From c5f30ff6febcf1c0574abe4fe15f9d962bc83a1c Mon Sep 17 00:00:00 2001 From: Natalie Chouinard Date: Thu, 17 Jun 2021 11:10:10 -0700 Subject: [PATCH 185/365] Remove unused variable Num_string_literal_EXTs Remove an unused variable that causes build failures in downstream repository. --- glslang/MachineIndependent/preprocessor/PpScanner.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/glslang/MachineIndependent/preprocessor/PpScanner.cpp b/glslang/MachineIndependent/preprocessor/PpScanner.cpp index ac5bfafaba..ad11792002 100644 --- a/glslang/MachineIndependent/preprocessor/PpScanner.cpp +++ b/glslang/MachineIndependent/preprocessor/PpScanner.cpp @@ -1192,7 +1192,6 @@ int TPpContext::tokenize(TPpToken& ppToken) // GLSL allows string literals with GL_EXT_debug_printf. if (ifdepth == 0 && parseContext.intermediate.getSource() != EShSourceHlsl) { const char* const string_literal_EXTs[] = { E_GL_EXT_debug_printf, E_GL_EXT_spirv_intrinsics }; - const int Num_string_literal_EXTs = sizeof(string_literal_EXTs) / sizeof(string_literal_EXTs[0]); parseContext.requireExtensions(ppToken.loc, 2, string_literal_EXTs, "string literal"); if (!parseContext.extensionTurnedOn(E_GL_EXT_debug_printf) && !parseContext.extensionTurnedOn(E_GL_EXT_spirv_intrinsics)) From e89fbf3ad82d867300fab8549a9597f5f483225f Mon Sep 17 00:00:00 2001 From: David Neto Date: Tue, 22 Jun 2021 21:57:05 -0400 Subject: [PATCH 186/365] Android.mk: Add SpirvIntrinsics.cpp It was missing, and was breaking the build for Android.mk. --- Android.mk | 1 + 1 file changed, 1 insertion(+) diff --git a/Android.mk b/Android.mk index 3a7449716c..c9b221f1a9 100644 --- a/Android.mk +++ b/Android.mk @@ -125,6 +125,7 @@ LOCAL_SRC_FILES:= \ glslang/MachineIndependent/RemoveTree.cpp \ glslang/MachineIndependent/Scan.cpp \ glslang/MachineIndependent/ShaderLang.cpp \ + glslang/MachineIndependent/SpirvIntrinsics.cpp \ glslang/MachineIndependent/SymbolTable.cpp \ glslang/MachineIndependent/Versions.cpp \ glslang/MachineIndependent/preprocessor/PpAtom.cpp \ From 83be602174dd5f1dd83fa68cbba87818e94eb20e Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 23 Jun 2021 13:47:39 -0600 Subject: [PATCH 187/365] Update known goods and CHANGES for 11.5.0 --- CHANGES.md | 12 ++++++++++++ known_good.json | 4 ++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index c67d16901e..27b002e842 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,18 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.5.0 2021-06-23 + +### Other changes +* Implement GLSL_EXT_shader_atomic_float2 +* Implement GL_EXT_spirv_intrinsics +* Fixed SPIR-V remapper not remapping OpExtInst instruction set IDs +* only declare compatibility gl_ variables in compatibility mode +* Add support for float spec const vector initialization +* Implement GL_EXT_subgroup_uniform_control_flow. +* Fix arrays dimensioned with spec constant sized gl_WorkGroupSize +* Add support for 64bit integer scalar and vector types to bitCount() builtin + ## 11.4.0 2021-04-22 ### Other changes diff --git a/known_good.json b/known_good.json index 177fab1dbb..c6fd4ff4ee 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "4d22f58a812ea02e1ad53c9ccba12cb48f2bd0b2" + "commit" : "5dd2f76918bb2d0d67628e338f60f724f3e02e13" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "f5417a4b6633c3217c9a1bc2f0c70b1454975ba7" + "commit" : "07f259e68af3a540038fa32df522554e74f53ed5" } ] } From 5531fbc662291565482be67192cee2c10007e985 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Wed, 7 Jul 2021 15:32:52 +0800 Subject: [PATCH 188/365] Add support for gl_MaxVaryingVectors for ogl. --- glslang/MachineIndependent/Initialize.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 486b6c374b..a79925d3e5 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -7283,6 +7283,9 @@ void TBuiltIns::initialize(const TBuiltInResource &resources, int version, EProf snprintf(builtInConstant, maxSize, "const int gl_MaxFragmentUniformVectors = %d;", resources.maxFragmentUniformVectors); s.append(builtInConstant); + + snprintf(builtInConstant, maxSize, "const int gl_MaxVaryingVectors = %d;", resources.maxVaryingVectors); + s.append(builtInConstant); } snprintf(builtInConstant, maxSize, "const int gl_MaxVertexAttribs = %d;", resources.maxVertexAttribs); From 263e50f6aa932490f021520b747b1e3fdd0e7669 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 8 Jul 2021 13:10:58 -0600 Subject: [PATCH 189/365] Revert "Atomic memory function can only be used for shader storage block member or shared variable." --- Test/atomicAdd.comp | 19 ----- Test/baseResults/atomicAdd.comp.out | 87 ---------------------- glslang/MachineIndependent/ParseHelper.cpp | 6 -- gtests/AST.FromFile.cpp | 1 - 4 files changed, 113 deletions(-) delete mode 100644 Test/atomicAdd.comp delete mode 100644 Test/baseResults/atomicAdd.comp.out diff --git a/Test/atomicAdd.comp b/Test/atomicAdd.comp deleted file mode 100644 index 65aa9620aa..0000000000 --- a/Test/atomicAdd.comp +++ /dev/null @@ -1,19 +0,0 @@ -#version 320 es -layout(local_size_x = 1) in; - -struct structType{ - int y[3]; -}; - -layout(std430) buffer t2 { - structType f; -} t; - -buffer coherent Buffer { int x; }; -int z; - -void main() { - atomicAdd(x, 1); - atomicAdd(t.f.y[1], 1); - atomicAdd(z, 1); -} diff --git a/Test/baseResults/atomicAdd.comp.out b/Test/baseResults/atomicAdd.comp.out deleted file mode 100644 index 6752a713ff..0000000000 --- a/Test/baseResults/atomicAdd.comp.out +++ /dev/null @@ -1,87 +0,0 @@ -atomicAdd.comp -ERROR: 0:18: 'atomicAdd' : Atomic memory function can only be used for shader storage block member or shared variable. -ERROR: 1 compilation errors. No code generated. - - -Shader version: 320 -local_size = (1, 1, 1) -ERROR: node is still EOpNull! -0:15 Function Definition: main( ( global void) -0:15 Function Parameters: -0:16 Sequence -0:16 AtomicAdd ( global highp int) -0:16 x: direct index for structure (layout( column_major shared) coherent buffer highp int) -0:16 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) -0:16 Constant: -0:16 0 (const uint) -0:16 Constant: -0:16 1 (const int) -0:17 AtomicAdd ( global highp int) -0:17 direct index (layout( std430) temp highp int) -0:17 y: direct index for structure (layout( std430) global 3-element array of highp int) -0:17 f: direct index for structure (layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y}) -0:17 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) -0:17 Constant: -0:17 0 (const int) -0:17 Constant: -0:17 0 (const int) -0:17 Constant: -0:17 1 (const int) -0:17 Constant: -0:17 1 (const int) -0:18 AtomicAdd ( global highp int) -0:18 'z' ( global highp int) -0:18 Constant: -0:18 1 (const int) -0:? Linker Objects -0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) -0:? 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) -0:? 'z' ( global highp int) - - -Linked compute stage: - - -Shader version: 320 -local_size = (1, 1, 1) -ERROR: node is still EOpNull! -0:15 Function Definition: main( ( global void) -0:15 Function Parameters: -0:16 Sequence -0:16 AtomicAdd ( global highp int) -0:16 x: direct index for structure (layout( column_major shared) coherent buffer highp int) -0:16 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) -0:16 Constant: -0:16 0 (const uint) -0:16 Constant: -0:16 1 (const int) -0:17 AtomicAdd ( global highp int) -0:17 direct index (layout( std430) temp highp int) -0:17 y: direct index for structure (layout( std430) global 3-element array of highp int) -0:17 f: direct index for structure (layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y}) -0:17 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) -0:17 Constant: -0:17 0 (const int) -0:17 Constant: -0:17 0 (const int) -0:17 Constant: -0:17 1 (const int) -0:17 Constant: -0:17 1 (const int) -0:18 AtomicAdd ( global highp int) -0:18 'z' ( global highp int) -0:18 Constant: -0:18 1 (const int) -0:? Linker Objects -0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 1 (const uint) -0:? 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) -0:? 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) -0:? 'z' ( global highp int) - diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 7d32746e1a..c2b9edcf69 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2409,12 +2409,6 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan arg0->getType().isFloatingDomain()) { requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str()); } - - const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true); - const TQualifier& qualifier = base->getType().getQualifier(); - if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer) - error(loc,"Atomic memory function can only be used for shader storage block member or shared variable.", fnCandidate.getName().c_str(), ""); - break; } diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index cedd558eb7..77f0aafbfd 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -282,7 +282,6 @@ INSTANTIATE_TEST_SUITE_P( "terminate.vert", "negativeWorkGroupSize.comp", "textureoffset_sampler2darrayshadow.vert", - "atomicAdd.comp", })), FileNameAsCustomTestSuffix ); From 5597c8d7cfc616f9a0c4dedba2ea9b57db94658c Mon Sep 17 00:00:00 2001 From: Kevin McCullough Date: Tue, 6 Jul 2021 11:50:48 -0700 Subject: [PATCH 190/365] Fix isIoResizeArray() tessellation stage handling --- Test/baseResults/link.tesselation.tese.out | 254 ++++++++++++++++++++ Test/baseResults/link.tesselation.vert.out | 94 ++++++++ Test/link.tesselation.frag | 15 ++ Test/link.tesselation.tesc | 21 ++ Test/link.tesselation.tese | 26 ++ Test/link.tesselation.vert | 16 ++ glslang/MachineIndependent/linkValidate.cpp | 3 +- gtests/Link.FromFile.cpp | 2 + 8 files changed, 430 insertions(+), 1 deletion(-) create mode 100644 Test/baseResults/link.tesselation.tese.out create mode 100644 Test/baseResults/link.tesselation.vert.out create mode 100644 Test/link.tesselation.frag create mode 100644 Test/link.tesselation.tesc create mode 100644 Test/link.tesselation.tese create mode 100644 Test/link.tesselation.vert diff --git a/Test/baseResults/link.tesselation.tese.out b/Test/baseResults/link.tesselation.tese.out new file mode 100644 index 0000000000..056459f5de --- /dev/null +++ b/Test/baseResults/link.tesselation.tese.out @@ -0,0 +1,254 @@ +link.tesselation.tese +Shader version: 440 +input primitive = triangles +vertex spacing = fractional_odd_spacing +triangle order = cw +0:? Sequence +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'u' ( temp float) +0:17 direct index ( temp float) +0:17 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:17 Constant: +0:17 0 (const int) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'v' ( temp float) +0:18 direct index ( temp float) +0:18 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:18 Constant: +0:18 1 (const int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'w' ( temp float) +0:19 direct index ( temp float) +0:19 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:19 Constant: +0:19 2 (const int) +0:21 Sequence +0:21 move second child to first child ( temp 2-component vector of float) +0:21 'newUv' ( temp 2-component vector of float) +0:21 Construct vec2 ( temp 2-component vector of float) +0:21 add ( temp 2-component vector of float) +0:21 add ( temp 2-component vector of float) +0:21 vector-scale ( temp 2-component vector of float) +0:21 'u' ( temp float) +0:21 texCoord: direct index for structure ( in 2-component vector of float) +0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord}) +0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 0 (const int) +0:21 vector-scale ( temp 2-component vector of float) +0:21 'v' ( temp float) +0:21 texCoord: direct index for structure ( in 2-component vector of float) +0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord}) +0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 0 (const int) +0:21 vector-scale ( temp 2-component vector of float) +0:21 'w' ( temp float) +0:21 texCoord: direct index for structure ( in 2-component vector of float) +0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord}) +0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 0 (const int) +0:22 move second child to first child ( temp 2-component vector of float) +0:22 texCoord: direct index for structure ( out 2-component vector of float) +0:22 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord}) +0:22 Constant: +0:22 0 (const int) +0:22 'newUv' ( temp 2-component vector of float) +0:23 move second child to first child ( temp 4-component vector of float) +0:23 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:23 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:23 Constant: +0:23 0 (const uint) +0:23 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:23 indirect index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:23 'gl_PatchVerticesIn' ( in int PatchVertices) +0:23 Constant: +0:23 0 (const int) +0:? Linker Objects +0:? 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:? 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) + +link.tesselation.tesc +Shader version: 440 +vertices = 3 +0:? Sequence +0:14 Function Definition: main( ( global void) +0:14 Function Parameters: +0:16 Sequence +0:16 move second child to first child ( temp 2-component vector of float) +0:16 texCoord: direct index for structure ( out 2-component vector of float) +0:16 indirect index (layout( location=0) temp block{ out 2-component vector of float texCoord}) +0:16 'OUT' (layout( location=0) out 3-element array of block{ out 2-component vector of float texCoord}) +0:16 'gl_InvocationID' ( in int InvocationID) +0:16 Constant: +0:16 0 (const int) +0:16 texCoord: direct index for structure ( in 2-component vector of float) +0:16 indirect index (layout( location=0) temp block{ in 2-component vector of float texCoord}) +0:16 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:16 'gl_InvocationID' ( in int InvocationID) +0:16 Constant: +0:16 0 (const int) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'tessLevel' ( temp float) +0:18 Constant: +0:18 10.000000 +0:19 move second child to first child ( temp float) +0:19 indirect index ( patch temp float TessLevelOuter) +0:19 'gl_TessLevelOuter' ( patch out 4-element array of float TessLevelOuter) +0:19 'gl_InvocationID' ( in int InvocationID) +0:19 'tessLevel' ( temp float) +0:20 move second child to first child ( temp float) +0:20 direct index ( patch temp float TessLevelInner) +0:20 'gl_TessLevelInner' ( patch out 2-element array of float TessLevelInner) +0:20 Constant: +0:20 0 (const int) +0:20 'tessLevel' ( temp float) +0:? Linker Objects +0:? 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:? 'OUT' (layout( location=0) out 3-element array of block{ out 2-component vector of float texCoord}) + + +Linked tessellation control stage: + + +Linked tessellation evaluation stage: + + +Shader version: 440 +vertices = 3 +0:? Sequence +0:14 Function Definition: main( ( global void) +0:14 Function Parameters: +0:16 Sequence +0:16 move second child to first child ( temp 2-component vector of float) +0:16 texCoord: direct index for structure ( out 2-component vector of float) +0:16 indirect index (layout( location=0) temp block{ out 2-component vector of float texCoord}) +0:16 'OUT' (layout( location=0) out 3-element array of block{ out 2-component vector of float texCoord}) +0:16 'gl_InvocationID' ( in int InvocationID) +0:16 Constant: +0:16 0 (const int) +0:16 texCoord: direct index for structure ( in 2-component vector of float) +0:16 indirect index (layout( location=0) temp block{ in 2-component vector of float texCoord}) +0:16 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:16 'gl_InvocationID' ( in int InvocationID) +0:16 Constant: +0:16 0 (const int) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'tessLevel' ( temp float) +0:18 Constant: +0:18 10.000000 +0:19 move second child to first child ( temp float) +0:19 indirect index ( patch temp float TessLevelOuter) +0:19 'gl_TessLevelOuter' ( patch out 4-element array of float TessLevelOuter) +0:19 'gl_InvocationID' ( in int InvocationID) +0:19 'tessLevel' ( temp float) +0:20 move second child to first child ( temp float) +0:20 direct index ( patch temp float TessLevelInner) +0:20 'gl_TessLevelInner' ( patch out 2-element array of float TessLevelInner) +0:20 Constant: +0:20 0 (const int) +0:20 'tessLevel' ( temp float) +0:? Linker Objects +0:? 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:? 'OUT' (layout( location=0) out 3-element array of block{ out 2-component vector of float texCoord}) +Shader version: 440 +input primitive = triangles +vertex spacing = fractional_odd_spacing +triangle order = cw +0:? Sequence +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'u' ( temp float) +0:17 direct index ( temp float) +0:17 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:17 Constant: +0:17 0 (const int) +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'v' ( temp float) +0:18 direct index ( temp float) +0:18 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:18 Constant: +0:18 1 (const int) +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 'w' ( temp float) +0:19 direct index ( temp float) +0:19 'gl_TessCoord' ( in 3-component vector of float TessCoord) +0:19 Constant: +0:19 2 (const int) +0:21 Sequence +0:21 move second child to first child ( temp 2-component vector of float) +0:21 'newUv' ( temp 2-component vector of float) +0:21 Construct vec2 ( temp 2-component vector of float) +0:21 add ( temp 2-component vector of float) +0:21 add ( temp 2-component vector of float) +0:21 vector-scale ( temp 2-component vector of float) +0:21 'u' ( temp float) +0:21 texCoord: direct index for structure ( in 2-component vector of float) +0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord}) +0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:21 Constant: +0:21 0 (const int) +0:21 Constant: +0:21 0 (const int) +0:21 vector-scale ( temp 2-component vector of float) +0:21 'v' ( temp float) +0:21 texCoord: direct index for structure ( in 2-component vector of float) +0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord}) +0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:21 Constant: +0:21 1 (const int) +0:21 Constant: +0:21 0 (const int) +0:21 vector-scale ( temp 2-component vector of float) +0:21 'w' ( temp float) +0:21 texCoord: direct index for structure ( in 2-component vector of float) +0:21 direct index (layout( location=0) temp block{ in 2-component vector of float texCoord}) +0:21 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 0 (const int) +0:22 move second child to first child ( temp 2-component vector of float) +0:22 texCoord: direct index for structure ( out 2-component vector of float) +0:22 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord}) +0:22 Constant: +0:22 0 (const int) +0:22 'newUv' ( temp 2-component vector of float) +0:23 move second child to first child ( temp 4-component vector of float) +0:23 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:23 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:23 Constant: +0:23 0 (const uint) +0:23 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:23 indirect index ( temp block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance}) +0:23 'gl_in' ( in 32-element array of block{ in 4-component vector of float Position gl_Position, in float PointSize gl_PointSize, in 1-element array of float ClipDistance gl_ClipDistance}) +0:23 'gl_PatchVerticesIn' ( in int PatchVertices) +0:23 Constant: +0:23 0 (const int) +0:? Linker Objects +0:? 'IN' (layout( location=0) in 32-element array of block{ in 2-component vector of float texCoord}) +0:? 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) + diff --git a/Test/baseResults/link.tesselation.vert.out b/Test/baseResults/link.tesselation.vert.out new file mode 100644 index 0000000000..d56c3402a3 --- /dev/null +++ b/Test/baseResults/link.tesselation.vert.out @@ -0,0 +1,94 @@ +link.tesselation.vert +Shader version: 440 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:13 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 'i_Pos' (layout( location=0) in 4-component vector of float) +0:14 move second child to first child ( temp 2-component vector of float) +0:14 texCoord: direct index for structure ( out 2-component vector of float) +0:14 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord}) +0:14 Constant: +0:14 0 (const int) +0:14 'i_Tex' (layout( location=1) in 2-component vector of float) +0:? Linker Objects +0:? 'i_Pos' (layout( location=0) in 4-component vector of float) +0:? 'i_Tex' (layout( location=1) in 2-component vector of float) +0:? 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +link.tesselation.frag +Shader version: 440 +0:? Sequence +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'oColor' (layout( location=0) out 4-component vector of float) +0:14 texture ( global 4-component vector of float) +0:14 'mytex' (layout( binding=0) uniform sampler2D) +0:14 texCoord: direct index for structure ( in 2-component vector of float) +0:14 'IN' (layout( location=0) in block{ in 2-component vector of float texCoord}) +0:14 Constant: +0:14 0 (const int) +0:? Linker Objects +0:? 'IN' (layout( location=0) in block{ in 2-component vector of float texCoord}) +0:? 'oColor' (layout( location=0) out 4-component vector of float) +0:? 'mytex' (layout( binding=0) uniform sampler2D) + + +Linked vertex stage: + + +Linked fragment stage: + + +Shader version: 440 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:13 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 'i_Pos' (layout( location=0) in 4-component vector of float) +0:14 move second child to first child ( temp 2-component vector of float) +0:14 texCoord: direct index for structure ( out 2-component vector of float) +0:14 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord}) +0:14 Constant: +0:14 0 (const int) +0:14 'i_Tex' (layout( location=1) in 2-component vector of float) +0:? Linker Objects +0:? 'i_Pos' (layout( location=0) in 4-component vector of float) +0:? 'i_Tex' (layout( location=1) in 2-component vector of float) +0:? 'OUT' (layout( location=0) out block{ out 2-component vector of float texCoord}) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 440 +0:? Sequence +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'oColor' (layout( location=0) out 4-component vector of float) +0:14 texture ( global 4-component vector of float) +0:14 'mytex' (layout( binding=0) uniform sampler2D) +0:14 texCoord: direct index for structure ( in 2-component vector of float) +0:14 'IN' (layout( location=0) in block{ in 2-component vector of float texCoord}) +0:14 Constant: +0:14 0 (const int) +0:? Linker Objects +0:? 'IN' (layout( location=0) in block{ in 2-component vector of float texCoord}) +0:? 'oColor' (layout( location=0) out 4-component vector of float) +0:? 'mytex' (layout( binding=0) uniform sampler2D) + diff --git a/Test/link.tesselation.frag b/Test/link.tesselation.frag new file mode 100644 index 0000000000..420384db0e --- /dev/null +++ b/Test/link.tesselation.frag @@ -0,0 +1,15 @@ +#version 440 + +layout(location = 0) in Primitive +{ + vec2 texCoord; +} IN; + +layout(location = 0) out vec4 oColor; + +layout(binding = 0) uniform sampler2D mytex; + +void main() +{ + oColor = texture(mytex, IN.texCoord); +} diff --git a/Test/link.tesselation.tesc b/Test/link.tesselation.tesc new file mode 100644 index 0000000000..c47d2ad66d --- /dev/null +++ b/Test/link.tesselation.tesc @@ -0,0 +1,21 @@ +#version 440 + +layout(location = 0) in Primitive +{ + vec2 texCoord; +} IN[]; + +layout(location = 0) out Primitive +{ + vec2 texCoord; +} OUT[]; + +layout(vertices = 3) out; +void main() +{ + OUT[gl_InvocationID].texCoord = IN[gl_InvocationID].texCoord; + + float tessLevel = 10.0; + gl_TessLevelOuter[gl_InvocationID] = tessLevel; + gl_TessLevelInner[0] = tessLevel; +} diff --git a/Test/link.tesselation.tese b/Test/link.tesselation.tese new file mode 100644 index 0000000000..e11129201b --- /dev/null +++ b/Test/link.tesselation.tese @@ -0,0 +1,26 @@ +#version 440 + +layout(location = 0) in Primitive +{ + vec2 texCoord; +} IN[]; + +layout(location = 0) out Primitive +{ + vec2 texCoord; +} OUT; + +layout(triangles, fractional_odd_spacing) in; +layout(cw) in; +void main() +{ + float u = gl_TessCoord.x; + float v = gl_TessCoord.y; + float w = gl_TessCoord.z; + + vec2 newUv = vec2( u * IN[0].texCoord + v * IN[1].texCoord + w * IN[2].texCoord); + OUT.texCoord = newUv; + gl_Position = gl_in[gl_PatchVerticesIn].gl_Position; +} + + diff --git a/Test/link.tesselation.vert b/Test/link.tesselation.vert new file mode 100644 index 0000000000..daf35372f0 --- /dev/null +++ b/Test/link.tesselation.vert @@ -0,0 +1,16 @@ +#version 440 + +layout(location = 0) in vec4 i_Pos; +layout(location = 1) in vec2 i_Tex; + +layout(location = 0) out Primitive +{ + vec2 texCoord; +} OUT; + +void main() +{ + gl_Position = i_Pos; + OUT.texCoord = i_Tex; +} + diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 42b416dbae..cec94fc815 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -2158,8 +2158,9 @@ int TIntermediate::computeBufferReferenceTypeSize(const TType& type) bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) { return type.isArray() && ((language == EShLangGeometry && type.getQualifier().storage == EvqVaryingIn) || - (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && + (language == EShLangTessControl && (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut) && ! type.getQualifier().patch) || + (language == EShLangTessEvaluation && type.getQualifier().storage == EvqVaryingIn) || (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && type.getQualifier().pervertexNV) || (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp index 29590c02a0..a83d49d917 100644 --- a/gtests/Link.FromFile.cpp +++ b/gtests/Link.FromFile.cpp @@ -106,6 +106,8 @@ INSTANTIATE_TEST_SUITE_P( {"link.multiAnonBlocksValid.0.0.vert", "link.multiAnonBlocksValid.0.1.vert"}, {"link.multiBlocksInvalid.0.0.vert", "link.multiBlocksInvalid.0.1.vert"}, {"link.multiBlocksValid.1.0.vert", "link.multiBlocksValid.1.1.vert"}, + {"link.tesselation.vert", "link.tesselation.frag"}, + {"link.tesselation.tese", "link.tesselation.tesc"}, })) ); // clang-format on From cf52f73a0cba3a9464d5e4b672e494a2bb9ef96b Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Mon, 12 Jul 2021 16:57:25 +0800 Subject: [PATCH 191/365] Atomic memory function can only be used for shader storage block member or shared variable. Signed-off-by: ZhiqianXia --- Test/atomicAdd.comp | 19 ++ Test/baseResults/atomicAdd.comp.out | 87 +++++ .../spv.atomicAdd.bufferReference.comp.out | 304 ++++++++++++++++++ Test/spv.atomicAdd.bufferReference.comp | 50 +++ glslang/MachineIndependent/Intermediate.cpp | 8 +- glslang/MachineIndependent/ParseHelper.cpp | 8 + .../MachineIndependent/localintermediate.h | 2 +- gtests/AST.FromFile.cpp | 1 + gtests/Spv.FromFile.cpp | 1 + 9 files changed, 478 insertions(+), 2 deletions(-) create mode 100644 Test/atomicAdd.comp create mode 100644 Test/baseResults/atomicAdd.comp.out create mode 100644 Test/baseResults/spv.atomicAdd.bufferReference.comp.out create mode 100644 Test/spv.atomicAdd.bufferReference.comp diff --git a/Test/atomicAdd.comp b/Test/atomicAdd.comp new file mode 100644 index 0000000000..27dfa13b70 --- /dev/null +++ b/Test/atomicAdd.comp @@ -0,0 +1,19 @@ +#version 320 es +layout(local_size_x = 1) in; + +struct structType{ + int y[3]; +}; + +layout(std430) buffer t2 { + structType f; +} t; + +buffer coherent Buffer { int x; }; +int z; + +void main() { + atomicAdd(x, 1); + atomicAdd(t.f.y[1], 1); + atomicAdd(z, 1); +} \ No newline at end of file diff --git a/Test/baseResults/atomicAdd.comp.out b/Test/baseResults/atomicAdd.comp.out new file mode 100644 index 0000000000..6752a713ff --- /dev/null +++ b/Test/baseResults/atomicAdd.comp.out @@ -0,0 +1,87 @@ +atomicAdd.comp +ERROR: 0:18: 'atomicAdd' : Atomic memory function can only be used for shader storage block member or shared variable. +ERROR: 1 compilation errors. No code generated. + + +Shader version: 320 +local_size = (1, 1, 1) +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:16 Sequence +0:16 AtomicAdd ( global highp int) +0:16 x: direct index for structure (layout( column_major shared) coherent buffer highp int) +0:16 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1 (const int) +0:17 AtomicAdd ( global highp int) +0:17 direct index (layout( std430) temp highp int) +0:17 y: direct index for structure (layout( std430) global 3-element array of highp int) +0:17 f: direct index for structure (layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y}) +0:17 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 1 (const int) +0:18 AtomicAdd ( global highp int) +0:18 'z' ( global highp int) +0:18 Constant: +0:18 1 (const int) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) +0:? 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) +0:? 'z' ( global highp int) + + +Linked compute stage: + + +Shader version: 320 +local_size = (1, 1, 1) +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:16 Sequence +0:16 AtomicAdd ( global highp int) +0:16 x: direct index for structure (layout( column_major shared) coherent buffer highp int) +0:16 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1 (const int) +0:17 AtomicAdd ( global highp int) +0:17 direct index (layout( std430) temp highp int) +0:17 y: direct index for structure (layout( std430) global 3-element array of highp int) +0:17 f: direct index for structure (layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y}) +0:17 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 0 (const int) +0:17 Constant: +0:17 1 (const int) +0:17 Constant: +0:17 1 (const int) +0:18 AtomicAdd ( global highp int) +0:18 'z' ( global highp int) +0:18 Constant: +0:18 1 (const int) +0:? Linker Objects +0:? 'gl_WorkGroupSize' ( const highp 3-component vector of uint WorkGroupSize) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 1 (const uint) +0:? 't' (layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer structure{layout( std430) global 3-element array of highp int y} f}) +0:? 'anon@0' (layout( column_major shared) coherent buffer block{layout( column_major shared) coherent buffer highp int x}) +0:? 'z' ( global highp int) + diff --git a/Test/baseResults/spv.atomicAdd.bufferReference.comp.out b/Test/baseResults/spv.atomicAdd.bufferReference.comp.out new file mode 100644 index 0000000000..9ecc74259d --- /dev/null +++ b/Test/baseResults/spv.atomicAdd.bufferReference.comp.out @@ -0,0 +1,304 @@ +spv.atomicAdd.bufferReference.comp +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 188 + + Capability Shader + Capability VulkanMemoryModelKHR + Capability VulkanMemoryModelDeviceScopeKHR + Capability PhysicalStorageBufferAddressesEXT + Extension "SPV_KHR_physical_storage_buffer" + Extension "SPV_KHR_storage_buffer_storage_class" + Extension "SPV_KHR_vulkan_memory_model" + 1: ExtInstImport "GLSL.std.450" + MemoryModel PhysicalStorageBuffer64EXT VulkanKHR + EntryPoint GLCompute 4 "main" 37 81 133 + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_ARB_gpu_shader_int64" + SourceExtension "GL_EXT_buffer_reference" + SourceExtension "GL_KHR_memory_scope_semantics" + SourceExtension "GL_KHR_shader_subgroup_ballot" + SourceExtension "GL_KHR_shader_subgroup_basic" + SourceExtension "GL_KHR_shader_subgroup_shuffle" + Name 4 "main" + Name 8 "pass" + Name 10 "skip" + Name 13 "sharedSkip" + Name 18 "PayloadRef" + MemberName 18(PayloadRef) 0 "x" + Name 20 "payload" + Name 22 "PC" + MemberName 22(PC) 0 "payloadref" + MemberName 22(PC) 1 "guard" + Name 24 "GuardRef" + MemberName 24(GuardRef) 0 "x" + Name 26 "" + Name 34 "globalId" + Name 37 "gl_GlobalInvocationID" + Name 42 "partnerGlobalId" + Name 43 "DIM" + Name 44 "NUM_WORKGROUP_EACH_DIM" + Name 54 "bufferCoord" + Name 66 "partnerBufferCoord" + Name 75 "imageCoord" + Name 77 "partnerImageCoord" + Name 79 "globalId00" + Name 81 "gl_WorkGroupID" + Name 86 "partnerGlobalId00" + Name 95 "bufferCoord00" + Name 104 "partnerBufferCoord00" + Name 113 "imageCoord00" + Name 115 "partnerImageCoord00" + Name 133 "gl_LocalInvocationID" + Name 163 "r" + Name 179 "Fail" + MemberName 179(Fail) 0 "x" + Name 181 "fail" + Decorate 17 ArrayStride 4 + MemberDecorate 18(PayloadRef) 0 Offset 0 + Decorate 18(PayloadRef) Block + Decorate 20(payload) DecorationAliasedPointerEXT + MemberDecorate 22(PC) 0 Offset 0 + MemberDecorate 22(PC) 1 Offset 8 + Decorate 22(PC) Block + Decorate 23 ArrayStride 4 + MemberDecorate 24(GuardRef) 0 Offset 0 + Decorate 24(GuardRef) Block + Decorate 37(gl_GlobalInvocationID) BuiltIn GlobalInvocationId + Decorate 43(DIM) SpecId 0 + Decorate 44(NUM_WORKGROUP_EACH_DIM) SpecId 1 + Decorate 81(gl_WorkGroupID) BuiltIn WorkgroupId + Decorate 133(gl_LocalInvocationID) BuiltIn LocalInvocationId + Decorate 178 ArrayStride 4 + MemberDecorate 179(Fail) 0 Offset 0 + Decorate 179(Fail) Block + Decorate 181(fail) DescriptorSet 0 + Decorate 181(fail) Binding 2 + Decorate 185 SpecId 0 + Decorate 186 SpecId 0 + Decorate 187 BuiltIn WorkgroupSize + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypePointer Function 6(bool) + 9: 6(bool) ConstantTrue + 11: 6(bool) ConstantFalse + 12: TypePointer Workgroup 6(bool) + 13(sharedSkip): 12(ptr) Variable Workgroup + 14: TypeInt 32 0 + 15: 14(int) Constant 2 + TypeForwardPointer 16 PhysicalStorageBufferEXT + 17: TypeRuntimeArray 14(int) + 18(PayloadRef): TypeStruct 17 + 16: TypePointer PhysicalStorageBufferEXT 18(PayloadRef) + 19: TypePointer Function 16(ptr) + TypeForwardPointer 21 PhysicalStorageBufferEXT + 22(PC): TypeStruct 16(ptr) 21 + 23: TypeRuntimeArray 14(int) + 24(GuardRef): TypeStruct 23 + 21: TypePointer PhysicalStorageBufferEXT 24(GuardRef) + 25: TypePointer PushConstant 22(PC) + 26: 25(ptr) Variable PushConstant + 27: TypeInt 32 1 + 28: 27(int) Constant 0 + 29: TypePointer PushConstant 16(ptr) + 32: TypeVector 27(int) 2 + 33: TypePointer Function 32(ivec2) + 35: TypeVector 14(int) 3 + 36: TypePointer Input 35(ivec3) +37(gl_GlobalInvocationID): 36(ptr) Variable Input + 38: TypeVector 14(int) 2 + 43(DIM): 27(int) SpecConstant 1 +44(NUM_WORKGROUP_EACH_DIM): 27(int) SpecConstant 1 + 45: 27(int) SpecConstantOp 132 43(DIM) 44(NUM_WORKGROUP_EACH_DIM) + 46: 27(int) Constant 1 + 47: 27(int) SpecConstantOp 130 45 46 + 48: 32(ivec2) SpecConstantComposite 47 47 + 53: TypePointer Function 14(int) + 55: 14(int) Constant 1 + 56: TypePointer Function 27(int) + 61: 14(int) Constant 0 + 80: 32(ivec2) SpecConstantComposite 43(DIM) 43(DIM) +81(gl_WorkGroupID): 36(ptr) Variable Input + 87: 32(ivec2) SpecConstantComposite 43(DIM) 43(DIM) + 88: 27(int) SpecConstantOp 130 44(NUM_WORKGROUP_EACH_DIM) 46 + 89: 32(ivec2) SpecConstantComposite 88 88 + 122: TypePointer PhysicalStorageBufferEXT 14(int) + 125: 27(int) Constant 31 + 129: 27(int) Constant 2 + 130: 27(int) Constant 320 + 131: 27(int) Constant 8200 + 132: 14(int) Constant 8520 +133(gl_LocalInvocationID): 36(ptr) Variable Input + 136: 38(ivec2) ConstantComposite 61 61 + 137: TypeVector 6(bool) 2 + 142: TypePointer PushConstant 21(ptr) + 147: 27(int) Constant 64 + 148: 27(int) Constant 8196 + 149: 14(int) Constant 5 + 150: 14(int) Constant 8260 + 155: 27(int) Constant 16386 + 156: 14(int) Constant 16450 + 160: 27(int) Constant 16392 + 161: 14(int) Constant 16712 + 178: TypeRuntimeArray 14(int) + 179(Fail): TypeStruct 178 + 180: TypePointer StorageBuffer 179(Fail) + 181(fail): 180(ptr) Variable StorageBuffer + 183: TypePointer StorageBuffer 14(int) + 185: 14(int) SpecConstant 1 + 186: 14(int) SpecConstant 1 + 187: 35(ivec3) SpecConstantComposite 185 186 55 + 4(main): 2 Function None 3 + 5: Label + 8(pass): 7(ptr) Variable Function + 10(skip): 7(ptr) Variable Function + 20(payload): 19(ptr) Variable Function + 34(globalId): 33(ptr) Variable Function +42(partnerGlobalId): 33(ptr) Variable Function + 54(bufferCoord): 53(ptr) Variable Function +66(partnerBufferCoord): 53(ptr) Variable Function + 75(imageCoord): 33(ptr) Variable Function +77(partnerImageCoord): 33(ptr) Variable Function + 79(globalId00): 33(ptr) Variable Function +86(partnerGlobalId00): 33(ptr) Variable Function +95(bufferCoord00): 53(ptr) Variable Function +104(partnerBufferCoord00): 53(ptr) Variable Function +113(imageCoord00): 33(ptr) Variable Function +115(partnerImageCoord00): 33(ptr) Variable Function + 163(r): 53(ptr) Variable Function + Store 8(pass) 9 + Store 10(skip) 11 + Store 13(sharedSkip) 11 MakePointerAvailableKHR NonPrivatePointerKHR 15 + 30: 29(ptr) AccessChain 26 28 + 31: 16(ptr) Load 30 + Store 20(payload) 31 + 39: 35(ivec3) Load 37(gl_GlobalInvocationID) + 40: 38(ivec2) VectorShuffle 39 39 0 1 + 41: 32(ivec2) Bitcast 40 + Store 34(globalId) 41 + 49: 35(ivec3) Load 37(gl_GlobalInvocationID) + 50: 38(ivec2) VectorShuffle 49 49 0 1 + 51: 32(ivec2) Bitcast 50 + 52: 32(ivec2) ISub 48 51 + Store 42(partnerGlobalId) 52 + 57: 56(ptr) AccessChain 34(globalId) 55 + 58: 27(int) Load 57 + 59: 27(int) IMul 58 43(DIM) + 60: 27(int) IMul 59 44(NUM_WORKGROUP_EACH_DIM) + 62: 56(ptr) AccessChain 34(globalId) 61 + 63: 27(int) Load 62 + 64: 27(int) IAdd 60 63 + 65: 14(int) Bitcast 64 + Store 54(bufferCoord) 65 + 67: 56(ptr) AccessChain 42(partnerGlobalId) 55 + 68: 27(int) Load 67 + 69: 27(int) IMul 68 43(DIM) + 70: 27(int) IMul 69 44(NUM_WORKGROUP_EACH_DIM) + 71: 56(ptr) AccessChain 42(partnerGlobalId) 61 + 72: 27(int) Load 71 + 73: 27(int) IAdd 70 72 + 74: 14(int) Bitcast 73 + Store 66(partnerBufferCoord) 74 + 76: 32(ivec2) Load 34(globalId) + Store 75(imageCoord) 76 + 78: 32(ivec2) Load 42(partnerGlobalId) + Store 77(partnerImageCoord) 78 + 82: 35(ivec3) Load 81(gl_WorkGroupID) + 83: 38(ivec2) VectorShuffle 82 82 0 1 + 84: 32(ivec2) Bitcast 83 + 85: 32(ivec2) IMul 80 84 + Store 79(globalId00) 85 + 90: 35(ivec3) Load 81(gl_WorkGroupID) + 91: 38(ivec2) VectorShuffle 90 90 0 1 + 92: 32(ivec2) Bitcast 91 + 93: 32(ivec2) ISub 89 92 + 94: 32(ivec2) IMul 87 93 + Store 86(partnerGlobalId00) 94 + 96: 56(ptr) AccessChain 79(globalId00) 55 + 97: 27(int) Load 96 + 98: 27(int) IMul 97 43(DIM) + 99: 27(int) IMul 98 44(NUM_WORKGROUP_EACH_DIM) + 100: 56(ptr) AccessChain 79(globalId00) 61 + 101: 27(int) Load 100 + 102: 27(int) IAdd 99 101 + 103: 14(int) Bitcast 102 + Store 95(bufferCoord00) 103 + 105: 56(ptr) AccessChain 86(partnerGlobalId00) 55 + 106: 27(int) Load 105 + 107: 27(int) IMul 106 43(DIM) + 108: 27(int) IMul 107 44(NUM_WORKGROUP_EACH_DIM) + 109: 56(ptr) AccessChain 86(partnerGlobalId00) 61 + 110: 27(int) Load 109 + 111: 27(int) IAdd 108 110 + 112: 14(int) Bitcast 111 + Store 104(partnerBufferCoord00) 112 + 114: 32(ivec2) Load 79(globalId00) + Store 113(imageCoord00) 114 + 116: 32(ivec2) Load 86(partnerGlobalId00) + Store 115(partnerImageCoord00) 116 + 117: 16(ptr) Load 20(payload) + 118: 14(int) Load 54(bufferCoord) + 119: 14(int) Load 54(bufferCoord) + 120: 16(ptr) Load 20(payload) + 121: 14(int) Load 66(partnerBufferCoord) + 123: 122(ptr) AccessChain 120 28 121 + 124: 14(int) Load 123 Aligned NonPrivatePointerKHR 4 + 126: 14(int) ShiftRightLogical 124 125 + 127: 14(int) IAdd 119 126 + 128: 122(ptr) AccessChain 117 28 118 + Store 128 127 Aligned NonPrivatePointerKHR 4 + ControlBarrier 15 15 132 + 134: 35(ivec3) Load 133(gl_LocalInvocationID) + 135: 38(ivec2) VectorShuffle 134 134 0 1 + 138: 137(bvec2) IEqual 135 136 + 139: 6(bool) All 138 + SelectionMerge 141 None + BranchConditional 139 140 141 + 140: Label + 143: 142(ptr) AccessChain 26 46 + 144: 21(ptr) Load 143 + 145: 14(int) Load 54(bufferCoord) + 146: 122(ptr) AccessChain 144 28 145 + AtomicStore 146 46 150 55 + 151: 142(ptr) AccessChain 26 46 + 152: 21(ptr) Load 151 + 153: 14(int) Load 104(partnerBufferCoord00) + 154: 122(ptr) AccessChain 152 28 153 + 157: 14(int) AtomicLoad 154 46 156 + 158: 6(bool) IEqual 157 61 + Store 10(skip) 158 + 159: 6(bool) Load 10(skip) + Store 13(sharedSkip) 159 MakePointerAvailableKHR NonPrivatePointerKHR 15 + Branch 141 + 141: Label + ControlBarrier 15 15 161 + 162: 6(bool) Load 13(sharedSkip) MakePointerVisibleKHR NonPrivatePointerKHR 15 + Store 10(skip) 162 + 164: 16(ptr) Load 20(payload) + 165: 14(int) Load 66(partnerBufferCoord) + 166: 122(ptr) AccessChain 164 28 165 + 167: 14(int) Load 166 Aligned NonPrivatePointerKHR 4 + Store 163(r) 167 + 168: 6(bool) Load 10(skip) + 169: 6(bool) LogicalNot 168 + SelectionMerge 171 None + BranchConditional 169 170 171 + 170: Label + 172: 14(int) Load 163(r) + 173: 14(int) Load 66(partnerBufferCoord) + 174: 6(bool) INotEqual 172 173 + Branch 171 + 171: Label + 175: 6(bool) Phi 169 141 174 170 + SelectionMerge 177 None + BranchConditional 175 176 177 + 176: Label + 182: 14(int) Load 54(bufferCoord) + 184: 183(ptr) AccessChain 181(fail) 28 182 + Store 184 55 + Branch 177 + 177: Label + Return + FunctionEnd diff --git a/Test/spv.atomicAdd.bufferReference.comp b/Test/spv.atomicAdd.bufferReference.comp new file mode 100644 index 0000000000..fdd031d0b9 --- /dev/null +++ b/Test/spv.atomicAdd.bufferReference.comp @@ -0,0 +1,50 @@ +#version 450 core +#pragma use_vulkan_memory_model +#extension GL_KHR_shader_subgroup_basic : enable +#extension GL_KHR_shader_subgroup_shuffle : enable +#extension GL_KHR_shader_subgroup_ballot : enable +#extension GL_KHR_memory_scope_semantics : enable +#extension GL_ARB_gpu_shader_int64 : enable +#extension GL_EXT_buffer_reference : enable +// DIM/NUM_WORKGROUP_EACH_DIM overriden by spec constants +layout(constant_id = 0) const int DIM = 1; +layout(constant_id = 1) const int NUM_WORKGROUP_EACH_DIM = 1; +shared bool sharedSkip; +layout(local_size_x_id = 0, local_size_y_id = 0, local_size_z = 1) in; +layout(buffer_reference) buffer PayloadRef { uint x[]; }; +layout(buffer_reference) buffer GuardRef { uint x[]; }; +layout(set=0, binding=2) buffer Fail { uint x[]; } fail; +layout (push_constant, std430) uniform PC { + layout(offset = 0) PayloadRef payloadref; +layout(offset = 8) GuardRef guard; +}; +void main() +{ + bool pass = true; + bool skip = false; + sharedSkip = false; + nonprivate PayloadRef payload = payloadref; + ivec2 globalId = ivec2(gl_GlobalInvocationID.xy); + ivec2 partnerGlobalId = ivec2(DIM*NUM_WORKGROUP_EACH_DIM-1) - ivec2(gl_GlobalInvocationID.xy); + uint bufferCoord = globalId.y * DIM*NUM_WORKGROUP_EACH_DIM + globalId.x; + uint partnerBufferCoord = partnerGlobalId.y * DIM*NUM_WORKGROUP_EACH_DIM + partnerGlobalId.x; + ivec2 imageCoord = globalId; + ivec2 partnerImageCoord = partnerGlobalId; + ivec2 globalId00 = ivec2(DIM) * ivec2(gl_WorkGroupID.xy); + ivec2 partnerGlobalId00 = ivec2(DIM) * (ivec2(NUM_WORKGROUP_EACH_DIM-1) - ivec2(gl_WorkGroupID.xy)); + uint bufferCoord00 = globalId00.y * DIM*NUM_WORKGROUP_EACH_DIM + globalId00.x; + uint partnerBufferCoord00 = partnerGlobalId00.y * DIM*NUM_WORKGROUP_EACH_DIM + partnerGlobalId00.x; + ivec2 imageCoord00 = globalId00; + ivec2 partnerImageCoord00 = partnerGlobalId00; + payload.x[bufferCoord] = bufferCoord + (payload.x[partnerBufferCoord]>>31); + controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeAvailable); + if (all(equal(gl_LocalInvocationID.xy, ivec2(0,0)))) { + atomicStore(guard.x[bufferCoord], uint(1u), gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsRelease | gl_SemanticsMakeAvailable); + skip = atomicLoad(guard.x[partnerBufferCoord00], gl_ScopeDevice, gl_StorageSemanticsBuffer, gl_SemanticsAcquire | gl_SemanticsMakeVisible) == 0; + sharedSkip = skip; + } + controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsBuffer | gl_StorageSemanticsShared, gl_SemanticsAcquireRelease | gl_SemanticsMakeVisible); + skip = sharedSkip; + uint r = payload.x[partnerBufferCoord]; + if (!skip && r != uint(partnerBufferCoord)) { fail.x[bufferCoord] = 1; } +} \ No newline at end of file diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index d1123d4a91..08494f825e 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -2676,7 +2676,11 @@ TIntermTyped* TIntermediate::addSwizzle(TSwizzleSelectors& selecto // 'swizzleOkay' says whether or not it is okay to consider a swizzle // a valid part of the dereference chain. // -const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool swizzleOkay) +// 'BufferReferenceOk' says if type is buffer_reference, the routine stop to find the most left node. +// +// + +const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool swizzleOkay , bool bufferReferenceOk) { do { const TIntermBinary* binary = node->getAsBinaryNode(); @@ -2694,6 +2698,8 @@ const TIntermTyped* TIntermediate::findLValueBase(const TIntermTyped* node, bool return nullptr; } node = node->getAsBinaryNode()->getLeft(); + if (bufferReferenceOk && node->isReference()) + return node; } while (true); } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index c2b9edcf69..d2ad355f56 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2409,6 +2409,14 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan arg0->getType().isFloatingDomain()) { requireExtensions(loc, 1, &E_GL_EXT_shader_atomic_float2, fnCandidate.getName().c_str()); } + + const TIntermTyped* base = TIntermediate::findLValueBase(arg0, true , true); + const TType* refType = (base->getType().isReference()) ? base->getType().getReferentType() : nullptr; + const TQualifier& qualifier = (refType != nullptr) ? refType->getQualifier() : base->getType().getQualifier(); + if (qualifier.storage != EvqShared && qualifier.storage != EvqBuffer) + error(loc,"Atomic memory function can only be used for shader storage block member or shared variable.", + fnCandidate.getName().c_str(), ""); + break; } diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 5cc9930acb..37a783975a 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -538,7 +538,7 @@ class TIntermediate { TIntermTyped* foldSwizzle(TIntermTyped* node, TSwizzleSelectors& fields, const TSourceLoc&); // Tree ops - static const TIntermTyped* findLValueBase(const TIntermTyped*, bool swizzleOkay); + static const TIntermTyped* findLValueBase(const TIntermTyped*, bool swizzleOkay , bool BufferReferenceOk = false); // Linkage related void addSymbolLinkageNodes(TIntermAggregate*& linkage, EShLanguage, TSymbolTable&); diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 77f0aafbfd..cedd558eb7 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -282,6 +282,7 @@ INSTANTIATE_TEST_SUITE_P( "terminate.vert", "negativeWorkGroupSize.comp", "textureoffset_sampler2darrayshadow.vert", + "atomicAdd.comp", })), FileNameAsCustomTestSuffix ); diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 20683a686b..1abd9b7845 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -465,6 +465,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.smBuiltins.frag", "spv.builtin.PrimitiveShadingRateEXT.vert", "spv.builtin.ShadingRateEXT.frag", + "spv.atomicAdd.bufferReference.comp" })), FileNameAsCustomTestSuffix ); From 22d19b963c89b109f2d4d5b67bf762b328f7a3af Mon Sep 17 00:00:00 2001 From: "andrei.malashkin" Date: Mon, 12 Jul 2021 20:08:15 +0400 Subject: [PATCH 192/365] add possibility to not override runtime of MSVC --- CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 0600516ee0..6b8ebe0627 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,7 +138,8 @@ endif(ENABLE_GLSLANG_WEBMIN) if(WIN32) set(CMAKE_DEBUG_POSTFIX "d") - if(MSVC) + option(OVERRIDE_MSVCCRT "Overrides runtime of MSVC " ON) + if(MSVC and OVERRIDE_MSVCCRT) include(ChooseMSVCCRT.cmake) endif(MSVC) add_definitions(-DGLSLANG_OSINCLUDE_WIN32) From fda1c58350273dd9c1d27430c10538dd0c97de87 Mon Sep 17 00:00:00 2001 From: "andrei.malashkin" Date: Wed, 14 Jul 2021 09:33:02 +0400 Subject: [PATCH 193/365] make AND to upper case --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6b8ebe0627..5fb6c958d0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -139,7 +139,7 @@ endif(ENABLE_GLSLANG_WEBMIN) if(WIN32) set(CMAKE_DEBUG_POSTFIX "d") option(OVERRIDE_MSVCCRT "Overrides runtime of MSVC " ON) - if(MSVC and OVERRIDE_MSVCCRT) + if(MSVC AND OVERRIDE_MSVCCRT) include(ChooseMSVCCRT.cmake) endif(MSVC) add_definitions(-DGLSLANG_OSINCLUDE_WIN32) From 097215f6188817252e5b06ef03e99ba1d06daed0 Mon Sep 17 00:00:00 2001 From: Shahbaz Youssefi Date: Thu, 15 Jul 2021 22:00:51 -0400 Subject: [PATCH 194/365] Fix loading bool arrays from interface blocks SPIR-V disallows bool in interface blocks, which is emulated with uint. When loading a bool variable (through accessChainLoad()), it's converted from uint to bool if it came from an interface block. This was handled for bool and bvecN, but not for bool arrays. This change implements the conversion for bool arrays. Closes #2694 --- SPIRV/GlslangToSpv.cpp | 58 +++++++-- ...4.load.bool.array.interface.block.frag.out | 104 +++++++++++++++ ...v.load.bool.array.interface.block.frag.out | 119 ++++++++++++++++++ ...v.1.4.load.bool.array.interface.block.frag | 17 +++ Test/spv.load.bool.array.interface.block.frag | 17 +++ gtests/Spv.FromFile.cpp | 2 + 6 files changed, 304 insertions(+), 13 deletions(-) create mode 100644 Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out create mode 100644 Test/baseResults/spv.load.bool.array.interface.block.frag.out create mode 100644 Test/spv.1.4.load.bool.array.interface.block.frag create mode 100644 Test/spv.load.bool.array.interface.block.frag diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index c767ab61a8..d0bebaea4a 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -179,6 +179,7 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { spv::Id accessChainLoad(const glslang::TType& type); void accessChainStore(const glslang::TType& type, spv::Id rvalue); void multiTypeStore(const glslang::TType&, spv::Id rValue); + spv::Id convertLoadedBoolInUniformToUint(const glslang::TType& type, spv::Id nominalTypeId, spv::Id loadedId); glslang::TLayoutPacking getExplicitLayout(const glslang::TType& type) const; int getArrayStride(const glslang::TType& arrayType, glslang::TLayoutPacking, glslang::TLayoutMatrix); int getMatrixStride(const glslang::TType& matrixType, glslang::TLayoutPacking, glslang::TLayoutMatrix); @@ -2231,6 +2232,49 @@ bool TGlslangToSpvTraverser::visitBinary(glslang::TVisit /* visit */, glslang::T } } +spv::Id TGlslangToSpvTraverser::convertLoadedBoolInUniformToUint(const glslang::TType& type, + spv::Id nominalTypeId, + spv::Id loadedId) +{ + if (builder.isScalarType(nominalTypeId)) { + // Conversion for bool + spv::Id boolType = builder.makeBoolType(); + if (nominalTypeId != boolType) + return builder.createBinOp(spv::OpINotEqual, boolType, loadedId, builder.makeUintConstant(0)); + } else if (builder.isVectorType(nominalTypeId)) { + // Conversion for bvec + int vecSize = builder.getNumTypeComponents(nominalTypeId); + spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize); + if (nominalTypeId != bvecType) + loadedId = builder.createBinOp(spv::OpINotEqual, bvecType, loadedId, + makeSmearedConstant(builder.makeUintConstant(0), vecSize)); + } else if (builder.isArrayType(nominalTypeId)) { + // Conversion for bool array + spv::Id boolArrayTypeId = convertGlslangToSpvType(type); + if (nominalTypeId != boolArrayTypeId) + { + // Use OpCopyLogical from SPIR-V 1.4 if available. + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_4) + return builder.createUnaryOp(spv::OpCopyLogical, boolArrayTypeId, loadedId); + + glslang::TType glslangElementType(type, 0); + spv::Id elementNominalTypeId = builder.getContainedTypeId(nominalTypeId); + std::vector constituents; + for (int index = 0; index < type.getOuterArraySize(); ++index) { + // get the element + spv::Id elementValue = builder.createCompositeExtract(loadedId, elementNominalTypeId, index); + + // recursively convert it + spv::Id elementConvertedValue = convertLoadedBoolInUniformToUint(glslangElementType, elementNominalTypeId, elementValue); + constituents.push_back(elementConvertedValue); + } + return builder.createCompositeConstruct(boolArrayTypeId, constituents); + } + } + + return loadedId; +} + // 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. @@ -4560,19 +4604,7 @@ spv::Id TGlslangToSpvTraverser::accessChainLoad(const glslang::TType& type) // Need to convert to abstract types when necessary if (type.getBasicType() == glslang::EbtBool) { - if (builder.isScalarType(nominalTypeId)) { - // Conversion for bool - spv::Id boolType = builder.makeBoolType(); - if (nominalTypeId != boolType) - loadedId = builder.createBinOp(spv::OpINotEqual, boolType, loadedId, builder.makeUintConstant(0)); - } else if (builder.isVectorType(nominalTypeId)) { - // Conversion for bvec - int vecSize = builder.getNumTypeComponents(nominalTypeId); - spv::Id bvecType = builder.makeVectorType(builder.makeBoolType(), vecSize); - if (nominalTypeId != bvecType) - loadedId = builder.createBinOp(spv::OpINotEqual, bvecType, loadedId, - makeSmearedConstant(builder.makeUintConstant(0), vecSize)); - } + loadedId = convertLoadedBoolInUniformToUint(type, nominalTypeId, loadedId); } return loadedId; diff --git a/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out b/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out new file mode 100644 index 0000000000..9f698db880 --- /dev/null +++ b/Test/baseResults/spv.1.4.load.bool.array.interface.block.frag.out @@ -0,0 +1,104 @@ +spv.1.4.load.bool.array.interface.block.frag +Validation failed +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 64 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 20 61 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 11 "ssbo" + MemberName 11(ssbo) 0 "bo" + Name 13 "" + Name 18 "ub" + MemberName 18(ub) 0 "bi" + Name 20 "" + Name 61 "color" + Decorate 8 ArrayStride 4 + Decorate 10 ArrayStride 12 + MemberDecorate 11(ssbo) 0 Offset 0 + Decorate 11(ssbo) Block + Decorate 13 DescriptorSet 0 + Decorate 13 Binding 1 + Decorate 16 ArrayStride 16 + Decorate 17 ArrayStride 48 + MemberDecorate 18(ub) 0 Offset 0 + Decorate 18(ub) Block + Decorate 20 DescriptorSet 0 + Decorate 20 Binding 0 + Decorate 61(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) Constant 3 + 8: TypeArray 6(int) 7 + 9: 6(int) Constant 2 + 10: TypeArray 8 9 + 11(ssbo): TypeStruct 10 + 12: TypePointer StorageBuffer 11(ssbo) + 13: 12(ptr) Variable StorageBuffer + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypeArray 6(int) 7 + 17: TypeArray 16 9 + 18(ub): TypeStruct 17 + 19: TypePointer Uniform 18(ub) + 20: 19(ptr) Variable Uniform + 21: TypePointer Uniform 17 + 24: TypeBool + 25: TypeArray 24(bool) 7 + 26: TypeArray 25 9 + 28: TypePointer StorageBuffer 10 + 31: TypePointer StorageBuffer 8 + 34: 6(int) Constant 1 + 35: 6(int) Constant 0 + 37: TypePointer StorageBuffer 6(int) + 40: 14(int) Constant 1 + 44: 14(int) Constant 2 + 58: TypeFloat 32 + 59: TypeVector 58(float) 4 + 60: TypePointer Output 59(fvec4) + 61(color): 60(ptr) Variable Output + 62: 58(float) Constant 0 + 63: 59(fvec4) ConstantComposite 62 62 62 62 + 4(main): 2 Function None 3 + 5: Label + 22: 21(ptr) AccessChain 20 15 + 23: 17 Load 22 + 27: 26 CopyLogical 23 + 29: 28(ptr) AccessChain 13 15 + 30: 25 CompositeExtract 27 0 + 32: 31(ptr) AccessChain 29 15 + 33: 24(bool) CompositeExtract 30 0 + 36: 6(int) Select 33 34 35 + 38: 37(ptr) AccessChain 32 15 + Store 38 36 + 39: 24(bool) CompositeExtract 30 1 + 41: 6(int) Select 39 34 35 + 42: 37(ptr) AccessChain 32 40 + Store 42 41 + 43: 24(bool) CompositeExtract 30 2 + 45: 6(int) Select 43 34 35 + 46: 37(ptr) AccessChain 32 44 + Store 46 45 + 47: 25 CompositeExtract 27 1 + 48: 31(ptr) AccessChain 29 40 + 49: 24(bool) CompositeExtract 47 0 + 50: 6(int) Select 49 34 35 + 51: 37(ptr) AccessChain 48 15 + Store 51 50 + 52: 24(bool) CompositeExtract 47 1 + 53: 6(int) Select 52 34 35 + 54: 37(ptr) AccessChain 48 40 + Store 54 53 + 55: 24(bool) CompositeExtract 47 2 + 56: 6(int) Select 55 34 35 + 57: 37(ptr) AccessChain 48 44 + Store 57 56 + Store 61(color) 63 + Return + FunctionEnd diff --git a/Test/baseResults/spv.load.bool.array.interface.block.frag.out b/Test/baseResults/spv.load.bool.array.interface.block.frag.out new file mode 100644 index 0000000000..f45736cbd0 --- /dev/null +++ b/Test/baseResults/spv.load.bool.array.interface.block.frag.out @@ -0,0 +1,119 @@ +spv.load.bool.array.interface.block.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 80 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 77 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + Name 4 "main" + Name 11 "ssbo" + MemberName 11(ssbo) 0 "bo" + Name 13 "" + Name 18 "ub" + MemberName 18(ub) 0 "bi" + Name 20 "" + Name 77 "color" + Decorate 8 ArrayStride 4 + Decorate 10 ArrayStride 12 + MemberDecorate 11(ssbo) 0 Offset 0 + Decorate 11(ssbo) BufferBlock + Decorate 13 DescriptorSet 0 + Decorate 13 Binding 1 + Decorate 16 ArrayStride 16 + Decorate 17 ArrayStride 48 + MemberDecorate 18(ub) 0 Offset 0 + Decorate 18(ub) Block + Decorate 20 DescriptorSet 0 + Decorate 20 Binding 0 + Decorate 77(color) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) Constant 3 + 8: TypeArray 6(int) 7 + 9: 6(int) Constant 2 + 10: TypeArray 8 9 + 11(ssbo): TypeStruct 10 + 12: TypePointer Uniform 11(ssbo) + 13: 12(ptr) Variable Uniform + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypeArray 6(int) 7 + 17: TypeArray 16 9 + 18(ub): TypeStruct 17 + 19: TypePointer Uniform 18(ub) + 20: 19(ptr) Variable Uniform + 21: TypePointer Uniform 17 + 24: TypeBool + 25: TypeArray 24(bool) 7 + 26: TypeArray 25 9 + 29: 6(int) Constant 0 + 45: TypePointer Uniform 10 + 48: TypePointer Uniform 8 + 51: 6(int) Constant 1 + 53: TypePointer Uniform 6(int) + 56: 14(int) Constant 1 + 60: 14(int) Constant 2 + 74: TypeFloat 32 + 75: TypeVector 74(float) 4 + 76: TypePointer Output 75(fvec4) + 77(color): 76(ptr) Variable Output + 78: 74(float) Constant 0 + 79: 75(fvec4) ConstantComposite 78 78 78 78 + 4(main): 2 Function None 3 + 5: Label + 22: 21(ptr) AccessChain 20 15 + 23: 17 Load 22 + 27: 16 CompositeExtract 23 0 + 28: 6(int) CompositeExtract 27 0 + 30: 24(bool) INotEqual 28 29 + 31: 6(int) CompositeExtract 27 1 + 32: 24(bool) INotEqual 31 29 + 33: 6(int) CompositeExtract 27 2 + 34: 24(bool) INotEqual 33 29 + 35: 25 CompositeConstruct 30 32 34 + 36: 16 CompositeExtract 23 1 + 37: 6(int) CompositeExtract 36 0 + 38: 24(bool) INotEqual 37 29 + 39: 6(int) CompositeExtract 36 1 + 40: 24(bool) INotEqual 39 29 + 41: 6(int) CompositeExtract 36 2 + 42: 24(bool) INotEqual 41 29 + 43: 25 CompositeConstruct 38 40 42 + 44: 26 CompositeConstruct 35 43 + 46: 45(ptr) AccessChain 13 15 + 47: 25 CompositeExtract 44 0 + 49: 48(ptr) AccessChain 46 15 + 50: 24(bool) CompositeExtract 47 0 + 52: 6(int) Select 50 51 29 + 54: 53(ptr) AccessChain 49 15 + Store 54 52 + 55: 24(bool) CompositeExtract 47 1 + 57: 6(int) Select 55 51 29 + 58: 53(ptr) AccessChain 49 56 + Store 58 57 + 59: 24(bool) CompositeExtract 47 2 + 61: 6(int) Select 59 51 29 + 62: 53(ptr) AccessChain 49 60 + Store 62 61 + 63: 25 CompositeExtract 44 1 + 64: 48(ptr) AccessChain 46 56 + 65: 24(bool) CompositeExtract 63 0 + 66: 6(int) Select 65 51 29 + 67: 53(ptr) AccessChain 64 15 + Store 67 66 + 68: 24(bool) CompositeExtract 63 1 + 69: 6(int) Select 68 51 29 + 70: 53(ptr) AccessChain 64 56 + Store 70 69 + 71: 24(bool) CompositeExtract 63 2 + 72: 6(int) Select 71 51 29 + 73: 53(ptr) AccessChain 64 60 + Store 73 72 + Store 77(color) 79 + Return + FunctionEnd diff --git a/Test/spv.1.4.load.bool.array.interface.block.frag b/Test/spv.1.4.load.bool.array.interface.block.frag new file mode 100644 index 0000000000..22037415e8 --- /dev/null +++ b/Test/spv.1.4.load.bool.array.interface.block.frag @@ -0,0 +1,17 @@ +#version 450 core + +layout(std140, set=0, binding=0) uniform ub { + bool bi[2][3]; +}; +layout(std430, set=0, binding=1) buffer ssbo { + bool bo[2][3]; +}; + +layout(location=0) out vec4 color; + +void main() +{ + bo = bi; + color = vec4(0); +} + diff --git a/Test/spv.load.bool.array.interface.block.frag b/Test/spv.load.bool.array.interface.block.frag new file mode 100644 index 0000000000..22037415e8 --- /dev/null +++ b/Test/spv.load.bool.array.interface.block.frag @@ -0,0 +1,17 @@ +#version 450 core + +layout(std140, set=0, binding=0) uniform ub { + bool bi[2][3]; +}; +layout(std430, set=0, binding=1) buffer ssbo { + bool bo[2][3]; +}; + +layout(location=0) out vec4 color; + +void main() +{ + bo = bi; + color = vec4(0); +} + diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 20683a686b..80ce0b1837 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -352,6 +352,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.functionParameterTypes.frag", "spv.GeometryShaderPassthrough.geom", "spv.funcall.array.frag", + "spv.load.bool.array.interface.block.frag", "spv.interpOps.frag", "spv.int64.frag", "spv.intcoopmat.comp", @@ -565,6 +566,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.1.4.OpCopyLogicalBool.comp", "spv.1.4.OpCopyLogical.funcall.frag", "spv.1.4.funcall.array.frag", + "spv.1.4.load.bool.array.interface.block.frag", "spv.1.4.image.frag", "spv.1.4.sparseTexture.frag", "spv.1.4.texture.frag", From 8cd85272adb6f966faee08b8b52e8997120b87ec Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Mon, 19 Jul 2021 17:24:28 +0800 Subject: [PATCH 195/365] Support Uint to Int implicit conversions at #extension GL_ARB_gpu_shader5. Signed-off-by: ZhiqianXia --- Test/GL_ARB_gpu_shader5.u2i.vert | 11 ++++ .../GL_ARB_gpu_shader5.u2i.vert.out | 57 +++++++++++++++++++ glslang/MachineIndependent/Intermediate.cpp | 2 +- .../MachineIndependent/localintermediate.h | 5 ++ gtests/AST.FromFile.cpp | 1 + 5 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 Test/GL_ARB_gpu_shader5.u2i.vert create mode 100644 Test/baseResults/GL_ARB_gpu_shader5.u2i.vert.out diff --git a/Test/GL_ARB_gpu_shader5.u2i.vert b/Test/GL_ARB_gpu_shader5.u2i.vert new file mode 100644 index 0000000000..0caa9bcfa4 --- /dev/null +++ b/Test/GL_ARB_gpu_shader5.u2i.vert @@ -0,0 +1,11 @@ +#version 150 +#extension GL_ARB_gpu_shader5 : require + +uniform int u1; +uniform int u2; +out vec4 result; +void main() +{ + uint v = 0; + v = uint(u2) - u1; // implicit conversions +} diff --git a/Test/baseResults/GL_ARB_gpu_shader5.u2i.vert.out b/Test/baseResults/GL_ARB_gpu_shader5.u2i.vert.out new file mode 100644 index 0000000000..c7b34556f0 --- /dev/null +++ b/Test/baseResults/GL_ARB_gpu_shader5.u2i.vert.out @@ -0,0 +1,57 @@ +GL_ARB_gpu_shader5.u2i.vert +WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5 + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp uint) +0:9 'v' ( temp uint) +0:9 Constant: +0:9 0 (const uint) +0:10 move second child to first child ( temp uint) +0:10 'v' ( temp uint) +0:10 subtract ( temp uint) +0:10 Convert int to uint ( temp uint) +0:10 'u2' ( uniform int) +0:10 Convert int to uint ( temp uint) +0:10 'u1' ( uniform int) +0:? Linker Objects +0:? 'u1' ( uniform int) +0:? 'u2' ( uniform int) +0:? 'result' ( smooth out 4-component vector of float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +0:? Sequence +0:7 Function Definition: main( ( global void) +0:7 Function Parameters: +0:9 Sequence +0:9 Sequence +0:9 move second child to first child ( temp uint) +0:9 'v' ( temp uint) +0:9 Constant: +0:9 0 (const uint) +0:10 move second child to first child ( temp uint) +0:10 'v' ( temp uint) +0:10 subtract ( temp uint) +0:10 Convert int to uint ( temp uint) +0:10 'u2' ( uniform int) +0:10 Convert int to uint ( temp uint) +0:10 'u1' ( uniform int) +0:? Linker Objects +0:? 'u1' ( uniform int) +0:? 'u2' ( uniform int) +0:? 'result' ( smooth out 4-component vector of float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index d1123d4a91..a2c57326c4 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -1739,7 +1739,7 @@ bool TIntermediate::canImplicitlyPromote(TBasicType from, TBasicType to, TOperat case EbtUint: switch (from) { case EbtInt: - return version >= 400 || getSource() == EShSourceHlsl; + return version >= 400 || getSource() == EShSourceHlsl || IsRequestedExtension(E_GL_ARB_gpu_shader5); case EbtBool: return getSource() == EShSourceHlsl; case EbtInt16: diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 5cc9930acb..b8353f985f 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -926,6 +926,11 @@ class TIntermediate { return false; } + bool IsRequestedExtension(const char* extension) const + { + return (requestedExtensions.find(extension) != requestedExtensions.end()); + } + void addToCallGraph(TInfoSink&, const TString& caller, const TString& callee); void merge(TInfoSink&, TIntermediate&); void finalCheck(TInfoSink&, bool keepUncalled); diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 77f0aafbfd..16cda6b79f 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -282,6 +282,7 @@ INSTANTIATE_TEST_SUITE_P( "terminate.vert", "negativeWorkGroupSize.comp", "textureoffset_sampler2darrayshadow.vert", + "GL_ARB_gpu_shader5.u2i.vert", })), FileNameAsCustomTestSuffix ); From ae4305da91a315c858ca9491101ebd1a4706763e Mon Sep 17 00:00:00 2001 From: Yun Hsiao Wu Date: Mon, 26 Jul 2021 16:21:12 +0800 Subject: [PATCH 196/365] Fix per-set argument parsing in standalone --- StandAlone/StandAlone.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index c6dc597436..e62f92f719 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -347,13 +347,13 @@ void ProcessBindingBase(int& argc, char**& argv, glslang::TResourceType res) lang = FindLanguage(argv[arg++], false); } - if ((argc - arg) > 2 && isdigit(argv[arg+0][0]) && isdigit(argv[arg+1][0])) { + if ((argc - arg) >= 2 && isdigit(argv[arg+0][0]) && isdigit(argv[arg+1][0])) { // Parse a per-set binding base - while ((argc - arg) > 2 && isdigit(argv[arg+0][0]) && isdigit(argv[arg+1][0])) { + do { const int baseNum = atoi(argv[arg++]); const int setNum = atoi(argv[arg++]); perSetBase[setNum] = baseNum; - } + } while ((argc - arg) >= 2 && isdigit(argv[arg + 0][0]) && isdigit(argv[arg + 1][0])); } else { // Parse single binding base singleBase = atoi(argv[arg++]); From e8cffa5b7fe9ec61c47b8138878889308e4c18c6 Mon Sep 17 00:00:00 2001 From: Peter Kasting Date: Mon, 26 Jul 2021 07:34:37 -0700 Subject: [PATCH 197/365] Fix some instances of -Wunused-but-set-variable. Bug: chromium:1203071 --- SPIRV/GlslangToSpv.cpp | 5 ----- glslang/HLSL/hlslParseHelper.cpp | 9 +-------- 2 files changed, 1 insertion(+), 13 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index d0bebaea4a..226c929ae3 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -4400,7 +4400,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, { // Name and decorate the non-hidden members int offset = -1; - int locationOffset = 0; // for use within the members of this struct bool memberLocationInvalid = type.isArrayOfArrays() || (type.isArray() && (type.getQualifier().isArrayedIo(glslangIntermediate->getStage()) == false)); for (int i = 0; i < (int)glslangMembers->size(); i++) { @@ -4458,10 +4457,6 @@ void TGlslangToSpvTraverser::decorateStructType(const glslang::TType& type, if (!memberLocationInvalid && memberQualifier.hasLocation()) builder.addMemberDecoration(spvType, member, spv::DecorationLocation, memberQualifier.layoutLocation); - if (qualifier.hasLocation()) // track for upcoming inheritance - locationOffset += glslangIntermediate->computeTypeLocationSize( - glslangMember, glslangIntermediate->getStage()); - // component, XFB, others if (glslangMember.getQualifier().hasComponent()) builder.addMemberDecoration(spvType, member, spv::DecorationComponent, diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index d62f39278e..02aac3c69e 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -6689,12 +6689,6 @@ void HlslParseContext::globalQualifierFix(const TSourceLoc&, TQualifier& qualifi // // Merge characteristics of the 'src' qualifier into the 'dst'. -// If there is duplication, issue error messages, unless 'force' -// is specified, which means to just override default settings. -// -// Also, when force is false, it will be assumed that 'src' follows -// 'dst', for the purpose of error checking order for versions -// that require specific orderings of qualifiers. // void HlslParseContext::mergeQualifiers(TQualifier& dst, const TQualifier& src) { @@ -6712,8 +6706,7 @@ void HlslParseContext::mergeQualifiers(TQualifier& dst, const TQualifier& src) mergeObjectLayoutQualifiers(dst, src, false); // individual qualifiers - bool repeated = false; -#define MERGE_SINGLETON(field) repeated |= dst.field && src.field; dst.field |= src.field; +#define MERGE_SINGLETON(field) dst.field |= src.field; MERGE_SINGLETON(invariant); MERGE_SINGLETON(noContraction); MERGE_SINGLETON(centroid); From fc9897d1ba419063a67b105ccf5a6364402a1ea7 Mon Sep 17 00:00:00 2001 From: Nathan Reed Date: Wed, 28 Jul 2021 08:29:17 -0700 Subject: [PATCH 198/365] Fix OpImageRead result type when compiling HLSL (#2706) Fix OpImageRead result type when compiling HLSL - Per the Vulkan spec, OpImageRead must return a 4-component vector always. When compiling HLSL, loads from a RWTexture of a template type with < 4 components would incorrectly generate an OpImageRead with a < 4 component result, resulting in validation errors. - This was previously fixed for OpImageFetch in commit 4425f24; this commit does the same thing for OpImageRead. - Added associated tests and expanded existing image fetch tests to check all the different types of textures, in both float and int incarnations, for completeness. - Update other HLSL tests involving OpImageRead --- SPIRV/GlslangToSpv.cpp | 5 +- .../hlsl.imagefetch-subvec4.comp.out | 721 ++++++- .../hlsl.imageload-subvec4.comp.out | 477 +++++ Test/baseResults/hlsl.rw.register.frag.out | 72 +- .../hlsl.rw.scalar.bracket.frag.out | 1503 +++++++-------- .../baseResults/hlsl.rw.vec2.bracket.frag.out | 1657 +++++++++-------- Test/baseResults/spv.rw.autoassign.frag.out | 72 +- Test/hlsl.imagefetch-subvec4.comp | 39 +- Test/hlsl.imageload-subvec4.comp | 33 + gtests/Hlsl.FromFile.cpp | 1 + 10 files changed, 2907 insertions(+), 1673 deletions(-) create mode 100644 Test/baseResults/hlsl.imageload-subvec4.comp.out create mode 100644 Test/hlsl.imageload-subvec4.comp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 226c929ae3..c8a73a6b28 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -5317,7 +5317,10 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO int components = node->getType().getVectorSize(); - if (node->getOp() == glslang::EOpTextureFetch) { + if (node->getOp() == glslang::EOpImageLoad || + node->getOp() == glslang::EOpImageLoadLod || + node->getOp() == glslang::EOpTextureFetch || + node->getOp() == glslang::EOpTextureFetchOffset) { // These must produce 4 components, per SPIR-V spec. We'll add a conversion constructor if needed. // This will only happen through the HLSL path for operator[], so we do not have to handle e.g. // the EOpTexture/Proj/Lod/etc family. It would be harmless to do so, but would need more logic diff --git a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out index a12c59f799..ff201eb077 100644 --- a/Test/baseResults/hlsl.imagefetch-subvec4.comp.out +++ b/Test/baseResults/hlsl.imagefetch-subvec4.comp.out @@ -2,35 +2,204 @@ hlsl.imagefetch-subvec4.comp Shader version: 500 local_size = (8, 8, 8) 0:? Sequence -0:6 Function Definition: @main(vu3; ( temp void) -0:6 Function Parameters: -0:6 'tid' ( in 3-component vector of uint) +0:21 Function Definition: @main(vu3; ( temp void) +0:21 Function Parameters: +0:21 'tid' ( in 3-component vector of uint) 0:? Sequence -0:7 Sequence -0:7 move second child to first child ( temp uint) -0:7 'storeTemp' ( temp uint) -0:7 Convert int to uint ( temp uint) -0:7 textureFetch ( temp int) -0:7 'IN' (layout( binding=0) uniform itexture3D) -0:7 'tid' ( in 3-component vector of uint) -0:7 Constant: -0:7 0 (const int) -0:7 imageStore ( temp void) -0:7 'OUT' (layout( binding=1 r32ui) uniform uimage3D) -0:7 'tid' ( in 3-component vector of uint) -0:7 'storeTemp' ( temp uint) -0:7 'storeTemp' ( temp uint) -0:6 Function Definition: main( ( temp void) -0:6 Function Parameters: +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'f' ( temp float) +0:22 Constant: +0:22 0.000000 +0:23 add second child into first child ( temp float) +0:23 'f' ( temp float) +0:23 textureFetch ( temp float) +0:23 'i1D' (layout( binding=0) uniform texture1D) +0:23 direct index ( temp uint) +0:23 'tid' ( in 3-component vector of uint) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:24 add second child into first child ( temp float) +0:24 'f' ( temp float) +0:24 textureFetch ( temp float) +0:24 'i2D' (layout( binding=1) uniform texture2D) +0:24 vector swizzle ( temp 2-component vector of uint) +0:24 'tid' ( in 3-component vector of uint) +0:24 Sequence +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0 (const int) +0:25 add second child into first child ( temp float) +0:25 'f' ( temp float) +0:25 textureFetch ( temp float) +0:25 'i3D' (layout( binding=2) uniform texture3D) +0:25 'tid' ( in 3-component vector of uint) +0:25 Constant: +0:25 0 (const int) +0:26 add second child into first child ( temp float) +0:26 'f' ( temp float) +0:26 textureFetch ( temp float) +0:26 'i1DArray' (layout( binding=3) uniform texture1DArray) +0:26 vector swizzle ( temp 2-component vector of uint) +0:26 'tid' ( in 3-component vector of uint) +0:26 Sequence +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 0 (const int) +0:27 add second child into first child ( temp float) +0:27 'f' ( temp float) +0:27 textureFetch ( temp float) +0:27 'i2DArray' (layout( binding=4) uniform texture2DArray) +0:27 'tid' ( in 3-component vector of uint) +0:27 Constant: +0:27 0 (const int) +0:28 add second child into first child ( temp float) +0:28 'f' ( temp float) +0:28 Construct float ( temp float) +0:? textureFetch ( temp 4-component vector of float) +0:28 'i2DMS' (layout( binding=5) uniform texture2DMS) +0:28 Convert uint to int ( temp 2-component vector of int) +0:28 vector swizzle ( temp 2-component vector of uint) +0:28 'tid' ( in 3-component vector of uint) +0:28 Sequence +0:28 Constant: +0:28 0 (const int) +0:28 Constant: +0:28 1 (const int) +0:28 Constant: +0:28 1 (const int) +0:29 add second child into first child ( temp float) +0:29 'f' ( temp float) +0:29 Construct float ( temp float) +0:? textureFetch ( temp 4-component vector of float) +0:29 'i2DMSArray' (layout( binding=6) uniform texture2DMSArray) +0:29 Convert uint to int ( temp 3-component vector of int) +0:29 'tid' ( in 3-component vector of uint) +0:29 Constant: +0:29 3 (const int) +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'i' ( temp int) +0:31 Constant: +0:31 0 (const int) +0:32 add second child into first child ( temp int) +0:32 'i' ( temp int) +0:32 textureFetch ( temp int) +0:32 'ii1D' (layout( binding=7) uniform itexture1D) +0:32 direct index ( temp uint) +0:32 'tid' ( in 3-component vector of uint) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 0 (const int) +0:33 add second child into first child ( temp int) +0:33 'i' ( temp int) +0:33 textureFetch ( temp int) +0:33 'ii2D' (layout( binding=8) uniform itexture2D) +0:33 vector swizzle ( temp 2-component vector of uint) +0:33 'tid' ( in 3-component vector of uint) +0:33 Sequence +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 0 (const int) +0:34 add second child into first child ( temp int) +0:34 'i' ( temp int) +0:34 textureFetch ( temp int) +0:34 'ii3D' (layout( binding=9) uniform itexture3D) +0:34 'tid' ( in 3-component vector of uint) +0:34 Constant: +0:34 0 (const int) +0:35 add second child into first child ( temp int) +0:35 'i' ( temp int) +0:35 textureFetch ( temp int) +0:35 'ii1DArray' (layout( binding=10) uniform itexture1DArray) +0:35 vector swizzle ( temp 2-component vector of uint) +0:35 'tid' ( in 3-component vector of uint) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 0 (const int) +0:36 add second child into first child ( temp int) +0:36 'i' ( temp int) +0:36 textureFetch ( temp int) +0:36 'ii2DArray' (layout( binding=11) uniform itexture2DArray) +0:36 'tid' ( in 3-component vector of uint) +0:36 Constant: +0:36 0 (const int) +0:37 add second child into first child ( temp int) +0:37 'i' ( temp int) +0:37 Construct int ( temp int) +0:? textureFetch ( temp 4-component vector of int) +0:37 'ii2DMS' (layout( binding=12) uniform itexture2DMS) +0:37 Convert uint to int ( temp 2-component vector of int) +0:37 vector swizzle ( temp 2-component vector of uint) +0:37 'tid' ( in 3-component vector of uint) +0:37 Sequence +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 1 (const int) +0:37 Constant: +0:37 1 (const int) +0:38 add second child into first child ( temp int) +0:38 'i' ( temp int) +0:38 Construct int ( temp int) +0:? textureFetch ( temp 4-component vector of int) +0:38 'ii2DMSArray' (layout( binding=13) uniform itexture2DMSArray) +0:38 Convert uint to int ( temp 3-component vector of int) +0:38 'tid' ( in 3-component vector of uint) +0:38 Constant: +0:38 3 (const int) +0:40 Sequence +0:40 move second child to first child ( temp float) +0:40 'storeTemp' ( temp float) +0:40 add ( temp float) +0:40 'f' ( temp float) +0:40 Convert int to float ( temp float) +0:40 'i' ( temp int) +0:40 imageStore ( temp void) +0:40 'OUT' (layout( binding=0 r32f) uniform image3D) +0:40 'tid' ( in 3-component vector of uint) +0:40 'storeTemp' ( temp float) +0:40 'storeTemp' ( temp float) +0:21 Function Definition: main( ( temp void) +0:21 Function Parameters: 0:? Sequence -0:6 move second child to first child ( temp 3-component vector of uint) +0:21 move second child to first child ( temp 3-component vector of uint) 0:? 'tid' ( temp 3-component vector of uint) 0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) -0:6 Function Call: @main(vu3; ( temp void) +0:21 Function Call: @main(vu3; ( temp void) 0:? 'tid' ( temp 3-component vector of uint) 0:? Linker Objects -0:? 'IN' (layout( binding=0) uniform itexture3D) -0:? 'OUT' (layout( binding=1 r32ui) uniform uimage3D) +0:? 'i1D' (layout( binding=0) uniform texture1D) +0:? 'i2D' (layout( binding=1) uniform texture2D) +0:? 'i3D' (layout( binding=2) uniform texture3D) +0:? 'i1DArray' (layout( binding=3) uniform texture1DArray) +0:? 'i2DArray' (layout( binding=4) uniform texture2DArray) +0:? 'i2DMS' (layout( binding=5) uniform texture2DMS) +0:? 'i2DMSArray' (layout( binding=6) uniform texture2DMSArray) +0:? 'ii1D' (layout( binding=7) uniform itexture1D) +0:? 'ii2D' (layout( binding=8) uniform itexture2D) +0:? 'ii3D' (layout( binding=9) uniform itexture3D) +0:? 'ii1DArray' (layout( binding=10) uniform itexture1DArray) +0:? 'ii2DArray' (layout( binding=11) uniform itexture2DArray) +0:? 'ii2DMS' (layout( binding=12) uniform itexture2DMS) +0:? 'ii2DMSArray' (layout( binding=13) uniform itexture2DMSArray) +0:? 'OUT' (layout( binding=0 r32f) uniform image3D) 0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) @@ -40,103 +209,477 @@ Linked compute stage: Shader version: 500 local_size = (8, 8, 8) 0:? Sequence -0:6 Function Definition: @main(vu3; ( temp void) -0:6 Function Parameters: -0:6 'tid' ( in 3-component vector of uint) +0:21 Function Definition: @main(vu3; ( temp void) +0:21 Function Parameters: +0:21 'tid' ( in 3-component vector of uint) 0:? Sequence -0:7 Sequence -0:7 move second child to first child ( temp uint) -0:7 'storeTemp' ( temp uint) -0:7 Convert int to uint ( temp uint) -0:7 textureFetch ( temp int) -0:7 'IN' (layout( binding=0) uniform itexture3D) -0:7 'tid' ( in 3-component vector of uint) -0:7 Constant: -0:7 0 (const int) -0:7 imageStore ( temp void) -0:7 'OUT' (layout( binding=1 r32ui) uniform uimage3D) -0:7 'tid' ( in 3-component vector of uint) -0:7 'storeTemp' ( temp uint) -0:7 'storeTemp' ( temp uint) -0:6 Function Definition: main( ( temp void) -0:6 Function Parameters: +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 'f' ( temp float) +0:22 Constant: +0:22 0.000000 +0:23 add second child into first child ( temp float) +0:23 'f' ( temp float) +0:23 textureFetch ( temp float) +0:23 'i1D' (layout( binding=0) uniform texture1D) +0:23 direct index ( temp uint) +0:23 'tid' ( in 3-component vector of uint) +0:23 Constant: +0:23 0 (const int) +0:23 Constant: +0:23 0 (const int) +0:24 add second child into first child ( temp float) +0:24 'f' ( temp float) +0:24 textureFetch ( temp float) +0:24 'i2D' (layout( binding=1) uniform texture2D) +0:24 vector swizzle ( temp 2-component vector of uint) +0:24 'tid' ( in 3-component vector of uint) +0:24 Sequence +0:24 Constant: +0:24 0 (const int) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0 (const int) +0:25 add second child into first child ( temp float) +0:25 'f' ( temp float) +0:25 textureFetch ( temp float) +0:25 'i3D' (layout( binding=2) uniform texture3D) +0:25 'tid' ( in 3-component vector of uint) +0:25 Constant: +0:25 0 (const int) +0:26 add second child into first child ( temp float) +0:26 'f' ( temp float) +0:26 textureFetch ( temp float) +0:26 'i1DArray' (layout( binding=3) uniform texture1DArray) +0:26 vector swizzle ( temp 2-component vector of uint) +0:26 'tid' ( in 3-component vector of uint) +0:26 Sequence +0:26 Constant: +0:26 0 (const int) +0:26 Constant: +0:26 1 (const int) +0:26 Constant: +0:26 0 (const int) +0:27 add second child into first child ( temp float) +0:27 'f' ( temp float) +0:27 textureFetch ( temp float) +0:27 'i2DArray' (layout( binding=4) uniform texture2DArray) +0:27 'tid' ( in 3-component vector of uint) +0:27 Constant: +0:27 0 (const int) +0:28 add second child into first child ( temp float) +0:28 'f' ( temp float) +0:28 Construct float ( temp float) +0:? textureFetch ( temp 4-component vector of float) +0:28 'i2DMS' (layout( binding=5) uniform texture2DMS) +0:28 Convert uint to int ( temp 2-component vector of int) +0:28 vector swizzle ( temp 2-component vector of uint) +0:28 'tid' ( in 3-component vector of uint) +0:28 Sequence +0:28 Constant: +0:28 0 (const int) +0:28 Constant: +0:28 1 (const int) +0:28 Constant: +0:28 1 (const int) +0:29 add second child into first child ( temp float) +0:29 'f' ( temp float) +0:29 Construct float ( temp float) +0:? textureFetch ( temp 4-component vector of float) +0:29 'i2DMSArray' (layout( binding=6) uniform texture2DMSArray) +0:29 Convert uint to int ( temp 3-component vector of int) +0:29 'tid' ( in 3-component vector of uint) +0:29 Constant: +0:29 3 (const int) +0:31 Sequence +0:31 move second child to first child ( temp int) +0:31 'i' ( temp int) +0:31 Constant: +0:31 0 (const int) +0:32 add second child into first child ( temp int) +0:32 'i' ( temp int) +0:32 textureFetch ( temp int) +0:32 'ii1D' (layout( binding=7) uniform itexture1D) +0:32 direct index ( temp uint) +0:32 'tid' ( in 3-component vector of uint) +0:32 Constant: +0:32 0 (const int) +0:32 Constant: +0:32 0 (const int) +0:33 add second child into first child ( temp int) +0:33 'i' ( temp int) +0:33 textureFetch ( temp int) +0:33 'ii2D' (layout( binding=8) uniform itexture2D) +0:33 vector swizzle ( temp 2-component vector of uint) +0:33 'tid' ( in 3-component vector of uint) +0:33 Sequence +0:33 Constant: +0:33 0 (const int) +0:33 Constant: +0:33 1 (const int) +0:33 Constant: +0:33 0 (const int) +0:34 add second child into first child ( temp int) +0:34 'i' ( temp int) +0:34 textureFetch ( temp int) +0:34 'ii3D' (layout( binding=9) uniform itexture3D) +0:34 'tid' ( in 3-component vector of uint) +0:34 Constant: +0:34 0 (const int) +0:35 add second child into first child ( temp int) +0:35 'i' ( temp int) +0:35 textureFetch ( temp int) +0:35 'ii1DArray' (layout( binding=10) uniform itexture1DArray) +0:35 vector swizzle ( temp 2-component vector of uint) +0:35 'tid' ( in 3-component vector of uint) +0:35 Sequence +0:35 Constant: +0:35 0 (const int) +0:35 Constant: +0:35 1 (const int) +0:35 Constant: +0:35 0 (const int) +0:36 add second child into first child ( temp int) +0:36 'i' ( temp int) +0:36 textureFetch ( temp int) +0:36 'ii2DArray' (layout( binding=11) uniform itexture2DArray) +0:36 'tid' ( in 3-component vector of uint) +0:36 Constant: +0:36 0 (const int) +0:37 add second child into first child ( temp int) +0:37 'i' ( temp int) +0:37 Construct int ( temp int) +0:? textureFetch ( temp 4-component vector of int) +0:37 'ii2DMS' (layout( binding=12) uniform itexture2DMS) +0:37 Convert uint to int ( temp 2-component vector of int) +0:37 vector swizzle ( temp 2-component vector of uint) +0:37 'tid' ( in 3-component vector of uint) +0:37 Sequence +0:37 Constant: +0:37 0 (const int) +0:37 Constant: +0:37 1 (const int) +0:37 Constant: +0:37 1 (const int) +0:38 add second child into first child ( temp int) +0:38 'i' ( temp int) +0:38 Construct int ( temp int) +0:? textureFetch ( temp 4-component vector of int) +0:38 'ii2DMSArray' (layout( binding=13) uniform itexture2DMSArray) +0:38 Convert uint to int ( temp 3-component vector of int) +0:38 'tid' ( in 3-component vector of uint) +0:38 Constant: +0:38 3 (const int) +0:40 Sequence +0:40 move second child to first child ( temp float) +0:40 'storeTemp' ( temp float) +0:40 add ( temp float) +0:40 'f' ( temp float) +0:40 Convert int to float ( temp float) +0:40 'i' ( temp int) +0:40 imageStore ( temp void) +0:40 'OUT' (layout( binding=0 r32f) uniform image3D) +0:40 'tid' ( in 3-component vector of uint) +0:40 'storeTemp' ( temp float) +0:40 'storeTemp' ( temp float) +0:21 Function Definition: main( ( temp void) +0:21 Function Parameters: 0:? Sequence -0:6 move second child to first child ( temp 3-component vector of uint) +0:21 move second child to first child ( temp 3-component vector of uint) 0:? 'tid' ( temp 3-component vector of uint) 0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) -0:6 Function Call: @main(vu3; ( temp void) +0:21 Function Call: @main(vu3; ( temp void) 0:? 'tid' ( temp 3-component vector of uint) 0:? Linker Objects -0:? 'IN' (layout( binding=0) uniform itexture3D) -0:? 'OUT' (layout( binding=1 r32ui) uniform uimage3D) +0:? 'i1D' (layout( binding=0) uniform texture1D) +0:? 'i2D' (layout( binding=1) uniform texture2D) +0:? 'i3D' (layout( binding=2) uniform texture3D) +0:? 'i1DArray' (layout( binding=3) uniform texture1DArray) +0:? 'i2DArray' (layout( binding=4) uniform texture2DArray) +0:? 'i2DMS' (layout( binding=5) uniform texture2DMS) +0:? 'i2DMSArray' (layout( binding=6) uniform texture2DMSArray) +0:? 'ii1D' (layout( binding=7) uniform itexture1D) +0:? 'ii2D' (layout( binding=8) uniform itexture2D) +0:? 'ii3D' (layout( binding=9) uniform itexture3D) +0:? 'ii1DArray' (layout( binding=10) uniform itexture1DArray) +0:? 'ii2DArray' (layout( binding=11) uniform itexture2DArray) +0:? 'ii2DMS' (layout( binding=12) uniform itexture2DMS) +0:? 'ii2DMSArray' (layout( binding=13) uniform itexture2DMSArray) +0:? 'OUT' (layout( binding=0 r32f) uniform image3D) 0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 39 +// Id's are bound by 186 Capability Shader + Capability Sampled1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "main" 34 + EntryPoint GLCompute 4 "main" 181 ExecutionMode 4 LocalSize 8 8 8 Source HLSL 500 Name 4 "main" Name 11 "@main(vu3;" Name 10 "tid" - Name 14 "storeTemp" - Name 18 "IN" - Name 28 "OUT" - Name 32 "tid" - Name 34 "tid" - Name 36 "param" - Decorate 18(IN) DescriptorSet 0 - Decorate 18(IN) Binding 0 - Decorate 28(OUT) DescriptorSet 0 - Decorate 28(OUT) Binding 1 - Decorate 34(tid) BuiltIn GlobalInvocationId + Name 15 "f" + Name 19 "i1D" + Name 34 "i2D" + Name 45 "i3D" + Name 54 "i1DArray" + Name 64 "i2DArray" + Name 73 "i2DMS" + Name 86 "i2DMSArray" + Name 97 "i" + Name 100 "ii1D" + Name 111 "ii2D" + Name 121 "ii3D" + Name 130 "ii1DArray" + Name 140 "ii2DArray" + Name 149 "ii2DMS" + Name 160 "ii2DMSArray" + Name 168 "storeTemp" + Name 175 "OUT" + Name 179 "tid" + Name 181 "tid" + Name 183 "param" + Decorate 19(i1D) DescriptorSet 0 + Decorate 19(i1D) Binding 0 + Decorate 34(i2D) DescriptorSet 0 + Decorate 34(i2D) Binding 1 + Decorate 45(i3D) DescriptorSet 0 + Decorate 45(i3D) Binding 2 + Decorate 54(i1DArray) DescriptorSet 0 + Decorate 54(i1DArray) Binding 3 + Decorate 64(i2DArray) DescriptorSet 0 + Decorate 64(i2DArray) Binding 4 + Decorate 73(i2DMS) DescriptorSet 0 + Decorate 73(i2DMS) Binding 5 + Decorate 86(i2DMSArray) DescriptorSet 0 + Decorate 86(i2DMSArray) Binding 6 + Decorate 100(ii1D) DescriptorSet 0 + Decorate 100(ii1D) Binding 7 + Decorate 111(ii2D) DescriptorSet 0 + Decorate 111(ii2D) Binding 8 + Decorate 121(ii3D) DescriptorSet 0 + Decorate 121(ii3D) Binding 9 + Decorate 130(ii1DArray) DescriptorSet 0 + Decorate 130(ii1DArray) Binding 10 + Decorate 140(ii2DArray) DescriptorSet 0 + Decorate 140(ii2DArray) Binding 11 + Decorate 149(ii2DMS) DescriptorSet 0 + Decorate 149(ii2DMS) Binding 12 + Decorate 160(ii2DMSArray) DescriptorSet 0 + Decorate 160(ii2DMSArray) Binding 13 + Decorate 175(OUT) DescriptorSet 0 + Decorate 175(OUT) Binding 0 + Decorate 181(tid) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 7: TypeVector 6(int) 3 8: TypePointer Function 7(ivec3) 9: TypeFunction 2 8(ptr) - 13: TypePointer Function 6(int) - 15: TypeInt 32 1 - 16: TypeImage 15(int) 3D sampled format:Unknown - 17: TypePointer UniformConstant 16 - 18(IN): 17(ptr) Variable UniformConstant - 21: 15(int) Constant 0 - 22: TypeVector 15(int) 4 - 26: TypeImage 6(int) 3D nonsampled format:R32ui - 27: TypePointer UniformConstant 26 - 28(OUT): 27(ptr) Variable UniformConstant - 33: TypePointer Input 7(ivec3) - 34(tid): 33(ptr) Variable Input + 13: TypeFloat 32 + 14: TypePointer Function 13(float) + 16: 13(float) Constant 0 + 17: TypeImage 13(float) 1D sampled format:Unknown + 18: TypePointer UniformConstant 17 + 19(i1D): 18(ptr) Variable UniformConstant + 21: 6(int) Constant 0 + 22: TypePointer Function 6(int) + 25: TypeInt 32 1 + 26: 25(int) Constant 0 + 27: TypeVector 13(float) 4 + 32: TypeImage 13(float) 2D sampled format:Unknown + 33: TypePointer UniformConstant 32 + 34(i2D): 33(ptr) Variable UniformConstant + 36: TypeVector 6(int) 2 + 43: TypeImage 13(float) 3D sampled format:Unknown + 44: TypePointer UniformConstant 43 + 45(i3D): 44(ptr) Variable UniformConstant + 52: TypeImage 13(float) 1D array sampled format:Unknown + 53: TypePointer UniformConstant 52 + 54(i1DArray): 53(ptr) Variable UniformConstant + 62: TypeImage 13(float) 2D array sampled format:Unknown + 63: TypePointer UniformConstant 62 + 64(i2DArray): 63(ptr) Variable UniformConstant + 71: TypeImage 13(float) 2D multi-sampled sampled format:Unknown + 72: TypePointer UniformConstant 71 + 73(i2DMS): 72(ptr) Variable UniformConstant + 77: TypeVector 25(int) 2 + 79: 25(int) Constant 1 + 84: TypeImage 13(float) 2D array multi-sampled sampled format:Unknown + 85: TypePointer UniformConstant 84 + 86(i2DMSArray): 85(ptr) Variable UniformConstant + 89: TypeVector 25(int) 3 + 91: 25(int) Constant 3 + 96: TypePointer Function 25(int) + 98: TypeImage 25(int) 1D sampled format:Unknown + 99: TypePointer UniformConstant 98 + 100(ii1D): 99(ptr) Variable UniformConstant + 104: TypeVector 25(int) 4 + 109: TypeImage 25(int) 2D sampled format:Unknown + 110: TypePointer UniformConstant 109 + 111(ii2D): 110(ptr) Variable UniformConstant + 119: TypeImage 25(int) 3D sampled format:Unknown + 120: TypePointer UniformConstant 119 + 121(ii3D): 120(ptr) Variable UniformConstant + 128: TypeImage 25(int) 1D array sampled format:Unknown + 129: TypePointer UniformConstant 128 + 130(ii1DArray): 129(ptr) Variable UniformConstant + 138: TypeImage 25(int) 2D array sampled format:Unknown + 139: TypePointer UniformConstant 138 + 140(ii2DArray): 139(ptr) Variable UniformConstant + 147: TypeImage 25(int) 2D multi-sampled sampled format:Unknown + 148: TypePointer UniformConstant 147 + 149(ii2DMS): 148(ptr) Variable UniformConstant + 158: TypeImage 25(int) 2D array multi-sampled sampled format:Unknown + 159: TypePointer UniformConstant 158 +160(ii2DMSArray): 159(ptr) Variable UniformConstant + 173: TypeImage 13(float) 3D nonsampled format:R32f + 174: TypePointer UniformConstant 173 + 175(OUT): 174(ptr) Variable UniformConstant + 180: TypePointer Input 7(ivec3) + 181(tid): 180(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 32(tid): 8(ptr) Variable Function - 36(param): 8(ptr) Variable Function - 35: 7(ivec3) Load 34(tid) - Store 32(tid) 35 - 37: 7(ivec3) Load 32(tid) - Store 36(param) 37 - 38: 2 FunctionCall 11(@main(vu3;) 36(param) + 179(tid): 8(ptr) Variable Function + 183(param): 8(ptr) Variable Function + 182: 7(ivec3) Load 181(tid) + Store 179(tid) 182 + 184: 7(ivec3) Load 179(tid) + Store 183(param) 184 + 185: 2 FunctionCall 11(@main(vu3;) 183(param) Return FunctionEnd 11(@main(vu3;): 2 Function None 9 10(tid): 8(ptr) FunctionParameter 12: Label - 14(storeTemp): 13(ptr) Variable Function - 19: 16 Load 18(IN) - 20: 7(ivec3) Load 10(tid) - 23: 22(ivec4) ImageFetch 19 20 Lod 21 - 24: 15(int) CompositeExtract 23 0 - 25: 6(int) Bitcast 24 - Store 14(storeTemp) 25 - 29: 26 Load 28(OUT) - 30: 7(ivec3) Load 10(tid) - 31: 6(int) Load 14(storeTemp) - ImageWrite 29 30 31 + 15(f): 14(ptr) Variable Function + 97(i): 96(ptr) Variable Function + 168(storeTemp): 14(ptr) Variable Function + Store 15(f) 16 + 20: 17 Load 19(i1D) + 23: 22(ptr) AccessChain 10(tid) 21 + 24: 6(int) Load 23 + 28: 27(fvec4) ImageFetch 20 24 Lod 26 + 29: 13(float) CompositeExtract 28 0 + 30: 13(float) Load 15(f) + 31: 13(float) FAdd 30 29 + Store 15(f) 31 + 35: 32 Load 34(i2D) + 37: 7(ivec3) Load 10(tid) + 38: 36(ivec2) VectorShuffle 37 37 0 1 + 39: 27(fvec4) ImageFetch 35 38 Lod 26 + 40: 13(float) CompositeExtract 39 0 + 41: 13(float) Load 15(f) + 42: 13(float) FAdd 41 40 + Store 15(f) 42 + 46: 43 Load 45(i3D) + 47: 7(ivec3) Load 10(tid) + 48: 27(fvec4) ImageFetch 46 47 Lod 26 + 49: 13(float) CompositeExtract 48 0 + 50: 13(float) Load 15(f) + 51: 13(float) FAdd 50 49 + Store 15(f) 51 + 55: 52 Load 54(i1DArray) + 56: 7(ivec3) Load 10(tid) + 57: 36(ivec2) VectorShuffle 56 56 0 1 + 58: 27(fvec4) ImageFetch 55 57 Lod 26 + 59: 13(float) CompositeExtract 58 0 + 60: 13(float) Load 15(f) + 61: 13(float) FAdd 60 59 + Store 15(f) 61 + 65: 62 Load 64(i2DArray) + 66: 7(ivec3) Load 10(tid) + 67: 27(fvec4) ImageFetch 65 66 Lod 26 + 68: 13(float) CompositeExtract 67 0 + 69: 13(float) Load 15(f) + 70: 13(float) FAdd 69 68 + Store 15(f) 70 + 74: 71 Load 73(i2DMS) + 75: 7(ivec3) Load 10(tid) + 76: 36(ivec2) VectorShuffle 75 75 0 1 + 78: 77(ivec2) Bitcast 76 + 80: 27(fvec4) ImageFetch 74 78 Sample 79 + 81: 13(float) CompositeExtract 80 0 + 82: 13(float) Load 15(f) + 83: 13(float) FAdd 82 81 + Store 15(f) 83 + 87: 84 Load 86(i2DMSArray) + 88: 7(ivec3) Load 10(tid) + 90: 89(ivec3) Bitcast 88 + 92: 27(fvec4) ImageFetch 87 90 Sample 91 + 93: 13(float) CompositeExtract 92 0 + 94: 13(float) Load 15(f) + 95: 13(float) FAdd 94 93 + Store 15(f) 95 + Store 97(i) 26 + 101: 98 Load 100(ii1D) + 102: 22(ptr) AccessChain 10(tid) 21 + 103: 6(int) Load 102 + 105: 104(ivec4) ImageFetch 101 103 Lod 26 + 106: 25(int) CompositeExtract 105 0 + 107: 25(int) Load 97(i) + 108: 25(int) IAdd 107 106 + Store 97(i) 108 + 112: 109 Load 111(ii2D) + 113: 7(ivec3) Load 10(tid) + 114: 36(ivec2) VectorShuffle 113 113 0 1 + 115: 104(ivec4) ImageFetch 112 114 Lod 26 + 116: 25(int) CompositeExtract 115 0 + 117: 25(int) Load 97(i) + 118: 25(int) IAdd 117 116 + Store 97(i) 118 + 122: 119 Load 121(ii3D) + 123: 7(ivec3) Load 10(tid) + 124: 104(ivec4) ImageFetch 122 123 Lod 26 + 125: 25(int) CompositeExtract 124 0 + 126: 25(int) Load 97(i) + 127: 25(int) IAdd 126 125 + Store 97(i) 127 + 131: 128 Load 130(ii1DArray) + 132: 7(ivec3) Load 10(tid) + 133: 36(ivec2) VectorShuffle 132 132 0 1 + 134: 104(ivec4) ImageFetch 131 133 Lod 26 + 135: 25(int) CompositeExtract 134 0 + 136: 25(int) Load 97(i) + 137: 25(int) IAdd 136 135 + Store 97(i) 137 + 141: 138 Load 140(ii2DArray) + 142: 7(ivec3) Load 10(tid) + 143: 104(ivec4) ImageFetch 141 142 Lod 26 + 144: 25(int) CompositeExtract 143 0 + 145: 25(int) Load 97(i) + 146: 25(int) IAdd 145 144 + Store 97(i) 146 + 150: 147 Load 149(ii2DMS) + 151: 7(ivec3) Load 10(tid) + 152: 36(ivec2) VectorShuffle 151 151 0 1 + 153: 77(ivec2) Bitcast 152 + 154: 104(ivec4) ImageFetch 150 153 Sample 79 + 155: 25(int) CompositeExtract 154 0 + 156: 25(int) Load 97(i) + 157: 25(int) IAdd 156 155 + Store 97(i) 157 + 161: 158 Load 160(ii2DMSArray) + 162: 7(ivec3) Load 10(tid) + 163: 89(ivec3) Bitcast 162 + 164: 104(ivec4) ImageFetch 161 163 Sample 91 + 165: 25(int) CompositeExtract 164 0 + 166: 25(int) Load 97(i) + 167: 25(int) IAdd 166 165 + Store 97(i) 167 + 169: 13(float) Load 15(f) + 170: 25(int) Load 97(i) + 171: 13(float) ConvertSToF 170 + 172: 13(float) FAdd 169 171 + Store 168(storeTemp) 172 + 176: 173 Load 175(OUT) + 177: 7(ivec3) Load 10(tid) + 178: 13(float) Load 168(storeTemp) + ImageWrite 176 177 178 Return FunctionEnd diff --git a/Test/baseResults/hlsl.imageload-subvec4.comp.out b/Test/baseResults/hlsl.imageload-subvec4.comp.out new file mode 100644 index 0000000000..4d038a1958 --- /dev/null +++ b/Test/baseResults/hlsl.imageload-subvec4.comp.out @@ -0,0 +1,477 @@ +hlsl.imageload-subvec4.comp +Shader version: 500 +local_size = (8, 8, 8) +0:? Sequence +0:17 Function Definition: @main(vu3; ( temp void) +0:17 Function Parameters: +0:17 'tid' ( in 3-component vector of uint) +0:? Sequence +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'f' ( temp float) +0:18 Constant: +0:18 0.000000 +0:19 add second child into first child ( temp float) +0:19 'f' ( temp float) +0:19 imageLoad ( temp float) +0:19 'i1D' (layout( binding=0 r32f) uniform image1D) +0:19 direct index ( temp uint) +0:19 'tid' ( in 3-component vector of uint) +0:19 Constant: +0:19 0 (const int) +0:20 add second child into first child ( temp float) +0:20 'f' ( temp float) +0:20 imageLoad ( temp float) +0:20 'i2D' (layout( binding=1 r32f) uniform image2D) +0:20 vector swizzle ( temp 2-component vector of uint) +0:20 'tid' ( in 3-component vector of uint) +0:20 Sequence +0:20 Constant: +0:20 0 (const int) +0:20 Constant: +0:20 1 (const int) +0:21 add second child into first child ( temp float) +0:21 'f' ( temp float) +0:21 imageLoad ( temp float) +0:21 'i3D' (layout( binding=2 r32f) uniform image3D) +0:21 'tid' ( in 3-component vector of uint) +0:22 add second child into first child ( temp float) +0:22 'f' ( temp float) +0:22 imageLoad ( temp float) +0:22 'i1DArray' (layout( binding=3 r32f) uniform image1DArray) +0:22 vector swizzle ( temp 2-component vector of uint) +0:22 'tid' ( in 3-component vector of uint) +0:22 Sequence +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 1 (const int) +0:23 add second child into first child ( temp float) +0:23 'f' ( temp float) +0:23 imageLoad ( temp float) +0:23 'i2DArray' (layout( binding=4 r32f) uniform image2DArray) +0:23 'tid' ( in 3-component vector of uint) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'i' ( temp int) +0:25 Constant: +0:25 0 (const int) +0:26 add second child into first child ( temp int) +0:26 'i' ( temp int) +0:26 imageLoad ( temp int) +0:26 'ii1D' (layout( binding=5 r32i) uniform iimage1D) +0:26 direct index ( temp uint) +0:26 'tid' ( in 3-component vector of uint) +0:26 Constant: +0:26 0 (const int) +0:27 add second child into first child ( temp int) +0:27 'i' ( temp int) +0:27 imageLoad ( temp int) +0:27 'ii2D' (layout( binding=6 r32i) uniform iimage2D) +0:27 vector swizzle ( temp 2-component vector of uint) +0:27 'tid' ( in 3-component vector of uint) +0:27 Sequence +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 1 (const int) +0:28 add second child into first child ( temp int) +0:28 'i' ( temp int) +0:28 imageLoad ( temp int) +0:28 'ii3D' (layout( binding=7 r32i) uniform iimage3D) +0:28 'tid' ( in 3-component vector of uint) +0:29 add second child into first child ( temp int) +0:29 'i' ( temp int) +0:29 imageLoad ( temp int) +0:29 'ii1DArray' (layout( binding=8 r32i) uniform iimage1DArray) +0:29 vector swizzle ( temp 2-component vector of uint) +0:29 'tid' ( in 3-component vector of uint) +0:29 Sequence +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:30 add second child into first child ( temp int) +0:30 'i' ( temp int) +0:30 imageLoad ( temp int) +0:30 'ii2DArray' (layout( binding=9 r32i) uniform iimage2DArray) +0:30 'tid' ( in 3-component vector of uint) +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'storeTemp' ( temp float) +0:32 add ( temp float) +0:32 'f' ( temp float) +0:32 Convert int to float ( temp float) +0:32 'i' ( temp int) +0:32 imageStore ( temp void) +0:32 'OUT' (layout( binding=10 r32f) uniform image3D) +0:32 'tid' ( in 3-component vector of uint) +0:32 'storeTemp' ( temp float) +0:32 'storeTemp' ( temp float) +0:17 Function Definition: main( ( temp void) +0:17 Function Parameters: +0:? Sequence +0:17 move second child to first child ( temp 3-component vector of uint) +0:? 'tid' ( temp 3-component vector of uint) +0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) +0:17 Function Call: @main(vu3; ( temp void) +0:? 'tid' ( temp 3-component vector of uint) +0:? Linker Objects +0:? 'i1D' (layout( binding=0 r32f) uniform image1D) +0:? 'i2D' (layout( binding=1 r32f) uniform image2D) +0:? 'i3D' (layout( binding=2 r32f) uniform image3D) +0:? 'i1DArray' (layout( binding=3 r32f) uniform image1DArray) +0:? 'i2DArray' (layout( binding=4 r32f) uniform image2DArray) +0:? 'ii1D' (layout( binding=5 r32i) uniform iimage1D) +0:? 'ii2D' (layout( binding=6 r32i) uniform iimage2D) +0:? 'ii3D' (layout( binding=7 r32i) uniform iimage3D) +0:? 'ii1DArray' (layout( binding=8 r32i) uniform iimage1DArray) +0:? 'ii2DArray' (layout( binding=9 r32i) uniform iimage2DArray) +0:? 'OUT' (layout( binding=10 r32f) uniform image3D) +0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) + + +Linked compute stage: + + +Shader version: 500 +local_size = (8, 8, 8) +0:? Sequence +0:17 Function Definition: @main(vu3; ( temp void) +0:17 Function Parameters: +0:17 'tid' ( in 3-component vector of uint) +0:? Sequence +0:18 Sequence +0:18 move second child to first child ( temp float) +0:18 'f' ( temp float) +0:18 Constant: +0:18 0.000000 +0:19 add second child into first child ( temp float) +0:19 'f' ( temp float) +0:19 imageLoad ( temp float) +0:19 'i1D' (layout( binding=0 r32f) uniform image1D) +0:19 direct index ( temp uint) +0:19 'tid' ( in 3-component vector of uint) +0:19 Constant: +0:19 0 (const int) +0:20 add second child into first child ( temp float) +0:20 'f' ( temp float) +0:20 imageLoad ( temp float) +0:20 'i2D' (layout( binding=1 r32f) uniform image2D) +0:20 vector swizzle ( temp 2-component vector of uint) +0:20 'tid' ( in 3-component vector of uint) +0:20 Sequence +0:20 Constant: +0:20 0 (const int) +0:20 Constant: +0:20 1 (const int) +0:21 add second child into first child ( temp float) +0:21 'f' ( temp float) +0:21 imageLoad ( temp float) +0:21 'i3D' (layout( binding=2 r32f) uniform image3D) +0:21 'tid' ( in 3-component vector of uint) +0:22 add second child into first child ( temp float) +0:22 'f' ( temp float) +0:22 imageLoad ( temp float) +0:22 'i1DArray' (layout( binding=3 r32f) uniform image1DArray) +0:22 vector swizzle ( temp 2-component vector of uint) +0:22 'tid' ( in 3-component vector of uint) +0:22 Sequence +0:22 Constant: +0:22 0 (const int) +0:22 Constant: +0:22 1 (const int) +0:23 add second child into first child ( temp float) +0:23 'f' ( temp float) +0:23 imageLoad ( temp float) +0:23 'i2DArray' (layout( binding=4 r32f) uniform image2DArray) +0:23 'tid' ( in 3-component vector of uint) +0:25 Sequence +0:25 move second child to first child ( temp int) +0:25 'i' ( temp int) +0:25 Constant: +0:25 0 (const int) +0:26 add second child into first child ( temp int) +0:26 'i' ( temp int) +0:26 imageLoad ( temp int) +0:26 'ii1D' (layout( binding=5 r32i) uniform iimage1D) +0:26 direct index ( temp uint) +0:26 'tid' ( in 3-component vector of uint) +0:26 Constant: +0:26 0 (const int) +0:27 add second child into first child ( temp int) +0:27 'i' ( temp int) +0:27 imageLoad ( temp int) +0:27 'ii2D' (layout( binding=6 r32i) uniform iimage2D) +0:27 vector swizzle ( temp 2-component vector of uint) +0:27 'tid' ( in 3-component vector of uint) +0:27 Sequence +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 1 (const int) +0:28 add second child into first child ( temp int) +0:28 'i' ( temp int) +0:28 imageLoad ( temp int) +0:28 'ii3D' (layout( binding=7 r32i) uniform iimage3D) +0:28 'tid' ( in 3-component vector of uint) +0:29 add second child into first child ( temp int) +0:29 'i' ( temp int) +0:29 imageLoad ( temp int) +0:29 'ii1DArray' (layout( binding=8 r32i) uniform iimage1DArray) +0:29 vector swizzle ( temp 2-component vector of uint) +0:29 'tid' ( in 3-component vector of uint) +0:29 Sequence +0:29 Constant: +0:29 0 (const int) +0:29 Constant: +0:29 1 (const int) +0:30 add second child into first child ( temp int) +0:30 'i' ( temp int) +0:30 imageLoad ( temp int) +0:30 'ii2DArray' (layout( binding=9 r32i) uniform iimage2DArray) +0:30 'tid' ( in 3-component vector of uint) +0:32 Sequence +0:32 move second child to first child ( temp float) +0:32 'storeTemp' ( temp float) +0:32 add ( temp float) +0:32 'f' ( temp float) +0:32 Convert int to float ( temp float) +0:32 'i' ( temp int) +0:32 imageStore ( temp void) +0:32 'OUT' (layout( binding=10 r32f) uniform image3D) +0:32 'tid' ( in 3-component vector of uint) +0:32 'storeTemp' ( temp float) +0:32 'storeTemp' ( temp float) +0:17 Function Definition: main( ( temp void) +0:17 Function Parameters: +0:? Sequence +0:17 move second child to first child ( temp 3-component vector of uint) +0:? 'tid' ( temp 3-component vector of uint) +0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) +0:17 Function Call: @main(vu3; ( temp void) +0:? 'tid' ( temp 3-component vector of uint) +0:? Linker Objects +0:? 'i1D' (layout( binding=0 r32f) uniform image1D) +0:? 'i2D' (layout( binding=1 r32f) uniform image2D) +0:? 'i3D' (layout( binding=2 r32f) uniform image3D) +0:? 'i1DArray' (layout( binding=3 r32f) uniform image1DArray) +0:? 'i2DArray' (layout( binding=4 r32f) uniform image2DArray) +0:? 'ii1D' (layout( binding=5 r32i) uniform iimage1D) +0:? 'ii2D' (layout( binding=6 r32i) uniform iimage2D) +0:? 'ii3D' (layout( binding=7 r32i) uniform iimage3D) +0:? 'ii1DArray' (layout( binding=8 r32i) uniform iimage1DArray) +0:? 'ii2DArray' (layout( binding=9 r32i) uniform iimage2DArray) +0:? 'OUT' (layout( binding=10 r32f) uniform image3D) +0:? 'tid' ( in 3-component vector of uint GlobalInvocationID) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 138 + + Capability Shader + Capability Image1D + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 133 + ExecutionMode 4 LocalSize 8 8 8 + Source HLSL 500 + Name 4 "main" + Name 11 "@main(vu3;" + Name 10 "tid" + Name 15 "f" + Name 19 "i1D" + Name 32 "i2D" + Name 43 "i3D" + Name 52 "i1DArray" + Name 62 "i2DArray" + Name 71 "i" + Name 75 "ii1D" + Name 86 "ii2D" + Name 96 "ii3D" + Name 105 "ii1DArray" + Name 115 "ii2DArray" + Name 122 "storeTemp" + Name 127 "OUT" + Name 131 "tid" + Name 133 "tid" + Name 135 "param" + Decorate 19(i1D) DescriptorSet 0 + Decorate 19(i1D) Binding 0 + Decorate 32(i2D) DescriptorSet 0 + Decorate 32(i2D) Binding 1 + Decorate 43(i3D) DescriptorSet 0 + Decorate 43(i3D) Binding 2 + Decorate 52(i1DArray) DescriptorSet 0 + Decorate 52(i1DArray) Binding 3 + Decorate 62(i2DArray) DescriptorSet 0 + Decorate 62(i2DArray) Binding 4 + Decorate 75(ii1D) DescriptorSet 0 + Decorate 75(ii1D) Binding 5 + Decorate 86(ii2D) DescriptorSet 0 + Decorate 86(ii2D) Binding 6 + Decorate 96(ii3D) DescriptorSet 0 + Decorate 96(ii3D) Binding 7 + Decorate 105(ii1DArray) DescriptorSet 0 + Decorate 105(ii1DArray) Binding 8 + Decorate 115(ii2DArray) DescriptorSet 0 + Decorate 115(ii2DArray) Binding 9 + Decorate 127(OUT) DescriptorSet 0 + Decorate 127(OUT) Binding 10 + Decorate 133(tid) BuiltIn GlobalInvocationId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypeVector 6(int) 3 + 8: TypePointer Function 7(ivec3) + 9: TypeFunction 2 8(ptr) + 13: TypeFloat 32 + 14: TypePointer Function 13(float) + 16: 13(float) Constant 0 + 17: TypeImage 13(float) 1D nonsampled format:R32f + 18: TypePointer UniformConstant 17 + 19(i1D): 18(ptr) Variable UniformConstant + 21: 6(int) Constant 0 + 22: TypePointer Function 6(int) + 25: TypeVector 13(float) 4 + 30: TypeImage 13(float) 2D nonsampled format:R32f + 31: TypePointer UniformConstant 30 + 32(i2D): 31(ptr) Variable UniformConstant + 34: TypeVector 6(int) 2 + 41: TypeImage 13(float) 3D nonsampled format:R32f + 42: TypePointer UniformConstant 41 + 43(i3D): 42(ptr) Variable UniformConstant + 50: TypeImage 13(float) 1D array nonsampled format:R32f + 51: TypePointer UniformConstant 50 + 52(i1DArray): 51(ptr) Variable UniformConstant + 60: TypeImage 13(float) 2D array nonsampled format:R32f + 61: TypePointer UniformConstant 60 + 62(i2DArray): 61(ptr) Variable UniformConstant + 69: TypeInt 32 1 + 70: TypePointer Function 69(int) + 72: 69(int) Constant 0 + 73: TypeImage 69(int) 1D nonsampled format:R32i + 74: TypePointer UniformConstant 73 + 75(ii1D): 74(ptr) Variable UniformConstant + 79: TypeVector 69(int) 4 + 84: TypeImage 69(int) 2D nonsampled format:R32i + 85: TypePointer UniformConstant 84 + 86(ii2D): 85(ptr) Variable UniformConstant + 94: TypeImage 69(int) 3D nonsampled format:R32i + 95: TypePointer UniformConstant 94 + 96(ii3D): 95(ptr) Variable UniformConstant + 103: TypeImage 69(int) 1D array nonsampled format:R32i + 104: TypePointer UniformConstant 103 + 105(ii1DArray): 104(ptr) Variable UniformConstant + 113: TypeImage 69(int) 2D array nonsampled format:R32i + 114: TypePointer UniformConstant 113 + 115(ii2DArray): 114(ptr) Variable UniformConstant + 127(OUT): 42(ptr) Variable UniformConstant + 132: TypePointer Input 7(ivec3) + 133(tid): 132(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 131(tid): 8(ptr) Variable Function + 135(param): 8(ptr) Variable Function + 134: 7(ivec3) Load 133(tid) + Store 131(tid) 134 + 136: 7(ivec3) Load 131(tid) + Store 135(param) 136 + 137: 2 FunctionCall 11(@main(vu3;) 135(param) + Return + FunctionEnd + 11(@main(vu3;): 2 Function None 9 + 10(tid): 8(ptr) FunctionParameter + 12: Label + 15(f): 14(ptr) Variable Function + 71(i): 70(ptr) Variable Function + 122(storeTemp): 14(ptr) Variable Function + Store 15(f) 16 + 20: 17 Load 19(i1D) + 23: 22(ptr) AccessChain 10(tid) 21 + 24: 6(int) Load 23 + 26: 25(fvec4) ImageRead 20 24 + 27: 13(float) CompositeExtract 26 0 + 28: 13(float) Load 15(f) + 29: 13(float) FAdd 28 27 + Store 15(f) 29 + 33: 30 Load 32(i2D) + 35: 7(ivec3) Load 10(tid) + 36: 34(ivec2) VectorShuffle 35 35 0 1 + 37: 25(fvec4) ImageRead 33 36 + 38: 13(float) CompositeExtract 37 0 + 39: 13(float) Load 15(f) + 40: 13(float) FAdd 39 38 + Store 15(f) 40 + 44: 41 Load 43(i3D) + 45: 7(ivec3) Load 10(tid) + 46: 25(fvec4) ImageRead 44 45 + 47: 13(float) CompositeExtract 46 0 + 48: 13(float) Load 15(f) + 49: 13(float) FAdd 48 47 + Store 15(f) 49 + 53: 50 Load 52(i1DArray) + 54: 7(ivec3) Load 10(tid) + 55: 34(ivec2) VectorShuffle 54 54 0 1 + 56: 25(fvec4) ImageRead 53 55 + 57: 13(float) CompositeExtract 56 0 + 58: 13(float) Load 15(f) + 59: 13(float) FAdd 58 57 + Store 15(f) 59 + 63: 60 Load 62(i2DArray) + 64: 7(ivec3) Load 10(tid) + 65: 25(fvec4) ImageRead 63 64 + 66: 13(float) CompositeExtract 65 0 + 67: 13(float) Load 15(f) + 68: 13(float) FAdd 67 66 + Store 15(f) 68 + Store 71(i) 72 + 76: 73 Load 75(ii1D) + 77: 22(ptr) AccessChain 10(tid) 21 + 78: 6(int) Load 77 + 80: 79(ivec4) ImageRead 76 78 + 81: 69(int) CompositeExtract 80 0 + 82: 69(int) Load 71(i) + 83: 69(int) IAdd 82 81 + Store 71(i) 83 + 87: 84 Load 86(ii2D) + 88: 7(ivec3) Load 10(tid) + 89: 34(ivec2) VectorShuffle 88 88 0 1 + 90: 79(ivec4) ImageRead 87 89 + 91: 69(int) CompositeExtract 90 0 + 92: 69(int) Load 71(i) + 93: 69(int) IAdd 92 91 + Store 71(i) 93 + 97: 94 Load 96(ii3D) + 98: 7(ivec3) Load 10(tid) + 99: 79(ivec4) ImageRead 97 98 + 100: 69(int) CompositeExtract 99 0 + 101: 69(int) Load 71(i) + 102: 69(int) IAdd 101 100 + Store 71(i) 102 + 106: 103 Load 105(ii1DArray) + 107: 7(ivec3) Load 10(tid) + 108: 34(ivec2) VectorShuffle 107 107 0 1 + 109: 79(ivec4) ImageRead 106 108 + 110: 69(int) CompositeExtract 109 0 + 111: 69(int) Load 71(i) + 112: 69(int) IAdd 111 110 + Store 71(i) 112 + 116: 113 Load 115(ii2DArray) + 117: 7(ivec3) Load 10(tid) + 118: 79(ivec4) ImageRead 116 117 + 119: 69(int) CompositeExtract 118 0 + 120: 69(int) Load 71(i) + 121: 69(int) IAdd 120 119 + Store 71(i) 121 + 123: 13(float) Load 15(f) + 124: 69(int) Load 71(i) + 125: 13(float) ConvertSToF 124 + 126: 13(float) FAdd 123 125 + Store 122(storeTemp) 126 + 128: 41 Load 127(OUT) + 129: 7(ivec3) Load 10(tid) + 130: 13(float) Load 122(storeTemp) + ImageWrite 128 129 130 + Return + FunctionEnd diff --git a/Test/baseResults/hlsl.rw.register.frag.out b/Test/baseResults/hlsl.rw.register.frag.out index 7bcecc9f74..265eaf9e36 100644 --- a/Test/baseResults/hlsl.rw.register.frag.out +++ b/Test/baseResults/hlsl.rw.register.frag.out @@ -97,17 +97,16 @@ gl_FragCoord origin is upper left 0:? 'g_tBuf1du1' (layout( binding=3 r32ui) uniform uimageBuffer) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 42 +// Id's are bound by 45 Capability Shader Capability Image1D Capability ImageBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 39 + EntryPoint Fragment 4 "main" 42 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" @@ -116,15 +115,15 @@ Validation failed Name 10 "@main(" Name 13 "r00" Name 16 "g_tTex1df1" - Name 23 "r01" - Name 26 "g_tBuf1du1" - Name 30 "psout" - Name 39 "@entryPointOutput.Color" + Name 24 "r01" + Name 27 "g_tBuf1du1" + Name 33 "psout" + Name 42 "@entryPointOutput.Color" Decorate 16(g_tTex1df1) DescriptorSet 0 Decorate 16(g_tTex1df1) Binding 2 - Decorate 26(g_tBuf1du1) DescriptorSet 0 - Decorate 26(g_tBuf1du1) Binding 3 - Decorate 39(@entryPointOutput.Color) Location 0 + Decorate 27(g_tBuf1du1) DescriptorSet 0 + Decorate 27(g_tBuf1du1) Binding 3 + Decorate 42(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -137,37 +136,40 @@ Validation failed 16(g_tTex1df1): 15(ptr) Variable UniformConstant 18: TypeInt 32 1 19: 18(int) Constant 0 - 21: TypeInt 32 0 - 22: TypePointer Function 21(int) - 24: TypeImage 21(int) Buffer nonsampled format:R32ui - 25: TypePointer UniformConstant 24 - 26(g_tBuf1du1): 25(ptr) Variable UniformConstant - 29: TypePointer Function 8(PS_OUTPUT) - 31: 6(float) Constant 1065353216 - 32: 7(fvec4) ConstantComposite 31 31 31 31 - 33: TypePointer Function 7(fvec4) - 38: TypePointer Output 7(fvec4) -39(@entryPointOutput.Color): 38(ptr) Variable Output + 22: TypeInt 32 0 + 23: TypePointer Function 22(int) + 25: TypeImage 22(int) Buffer nonsampled format:R32ui + 26: TypePointer UniformConstant 25 + 27(g_tBuf1du1): 26(ptr) Variable UniformConstant + 29: TypeVector 22(int) 4 + 32: TypePointer Function 8(PS_OUTPUT) + 34: 6(float) Constant 1065353216 + 35: 7(fvec4) ConstantComposite 34 34 34 34 + 36: TypePointer Function 7(fvec4) + 41: TypePointer Output 7(fvec4) +42(@entryPointOutput.Color): 41(ptr) Variable Output 4(main): 2 Function None 3 5: Label - 40:8(PS_OUTPUT) FunctionCall 10(@main() - 41: 7(fvec4) CompositeExtract 40 0 - Store 39(@entryPointOutput.Color) 41 + 43:8(PS_OUTPUT) FunctionCall 10(@main() + 44: 7(fvec4) CompositeExtract 43 0 + Store 42(@entryPointOutput.Color) 44 Return FunctionEnd 10(@main():8(PS_OUTPUT) Function None 9 11: Label 13(r00): 12(ptr) Variable Function - 23(r01): 22(ptr) Variable Function - 30(psout): 29(ptr) Variable Function + 24(r01): 23(ptr) Variable Function + 33(psout): 32(ptr) Variable Function 17: 14 Load 16(g_tTex1df1) - 20: 6(float) ImageRead 17 19 - Store 13(r00) 20 - 27: 24 Load 26(g_tBuf1du1) - 28: 21(int) ImageRead 27 19 - Store 23(r01) 28 - 34: 33(ptr) AccessChain 30(psout) 19 - Store 34 32 - 35:8(PS_OUTPUT) Load 30(psout) - ReturnValue 35 + 20: 7(fvec4) ImageRead 17 19 + 21: 6(float) CompositeExtract 20 0 + Store 13(r00) 21 + 28: 25 Load 27(g_tBuf1du1) + 30: 29(ivec4) ImageRead 28 19 + 31: 22(int) CompositeExtract 30 0 + Store 24(r01) 31 + 37: 36(ptr) AccessChain 33(psout) 19 + Store 37 35 + 38:8(PS_OUTPUT) Load 33(psout) + ReturnValue 38 FunctionEnd diff --git a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out index e76d5972f7..8e4716b71b 100644 --- a/Test/baseResults/hlsl.rw.scalar.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.scalar.bracket.frag.out @@ -1689,16 +1689,15 @@ gl_FragCoord origin is upper left 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform float uf1, uniform int ui1, uniform uint uu1}) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 571 +// Id's are bound by 607 Capability Shader Capability Image1D 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 547 + EntryPoint Fragment 4 "main" 583 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" @@ -1732,101 +1731,101 @@ Validation failed MemberName 59($Global) 10 "uu1" Name 61 "" Name 70 "g_tTex1df1" - Name 75 "r00" - Name 80 "r01" - Name 83 "g_tTex1di1" - Name 88 "r02" - Name 91 "g_tTex1du1" - Name 96 "r10" - Name 99 "g_tTex2df1" - Name 106 "r11" - Name 109 "g_tTex2di1" - Name 114 "r12" - Name 117 "g_tTex2du1" - Name 122 "r20" - Name 125 "g_tTex3df1" - Name 132 "r21" - Name 135 "g_tTex3di1" - Name 140 "r22" - Name 143 "g_tTex3du1" - Name 148 "lf1" - Name 153 "storeTemp" - Name 163 "storeTemp" - Name 168 "storeTemp" - Name 174 "val1" - Name 175 "coordTemp" - Name 178 "storeTemp" - Name 189 "coordTemp" - Name 192 "storeTemp" - Name 202 "coordTemp" - Name 205 "storeTemp" + Name 76 "r00" + Name 82 "r01" + Name 85 "g_tTex1di1" + Name 91 "r02" + Name 94 "g_tTex1du1" + Name 101 "r10" + Name 104 "g_tTex2df1" + Name 112 "r11" + Name 115 "g_tTex2di1" + Name 121 "r12" + Name 124 "g_tTex2du1" + Name 130 "r20" + Name 133 "g_tTex3df1" + Name 141 "r21" + Name 144 "g_tTex3di1" + Name 150 "r22" + Name 153 "g_tTex3du1" + Name 159 "lf1" + Name 164 "storeTemp" + Name 174 "storeTemp" + Name 179 "storeTemp" + Name 185 "val1" + Name 186 "coordTemp" + Name 189 "storeTemp" + Name 201 "coordTemp" + Name 204 "storeTemp" Name 215 "coordTemp" Name 218 "storeTemp" - Name 227 "coordTemp" - Name 230 "storeTemp" - Name 239 "coordTemp" - Name 242 "storeTemp" - Name 252 "coordTemp" - Name 255 "storeTemp" - Name 265 "coordTemp" - Name 268 "storeTemp" - Name 277 "coordTemp" - Name 280 "storeTemp" - Name 289 "storeTemp" + Name 229 "coordTemp" + Name 232 "storeTemp" + Name 242 "coordTemp" + Name 245 "storeTemp" + Name 255 "coordTemp" + Name 258 "storeTemp" + Name 269 "coordTemp" + Name 272 "storeTemp" + Name 283 "coordTemp" + Name 286 "storeTemp" + Name 296 "coordTemp" Name 299 "storeTemp" - Name 305 "storeTemp" - Name 311 "storeTemp" - Name 321 "storeTemp" - Name 326 "storeTemp" - Name 336 "param" - Name 342 "param" - Name 348 "param" - Name 350 "tempArg" - Name 351 "param" - Name 358 "tempArg" - Name 359 "param" - Name 366 "tempArg" - Name 367 "param" - Name 374 "coordTemp" - Name 377 "storeTemp" - Name 387 "coordTemp" - Name 390 "storeTemp" - Name 399 "coordTemp" - Name 402 "storeTemp" + Name 309 "storeTemp" + Name 319 "storeTemp" + Name 325 "storeTemp" + Name 331 "storeTemp" + Name 341 "storeTemp" + Name 346 "storeTemp" + Name 357 "param" + Name 364 "param" + Name 371 "param" + Name 373 "tempArg" + Name 374 "param" + Name 381 "tempArg" + Name 382 "param" + Name 389 "tempArg" + Name 390 "param" + Name 397 "coordTemp" + Name 400 "storeTemp" Name 411 "coordTemp" Name 414 "storeTemp" - Name 423 "coordTemp" - Name 426 "storeTemp" - Name 435 "coordTemp" - Name 438 "storeTemp" - Name 447 "coordTemp" - Name 450 "storeTempPre" - Name 454 "storeTempPost" - Name 461 "coordTemp" - Name 464 "storeTempPre" - Name 468 "storeTempPost" - Name 475 "coordTemp" - Name 478 "storeTempPre" - Name 482 "storeTempPost" - Name 489 "coordTemp" - Name 492 "storeTempPre" - Name 496 "storeTempPost" - Name 503 "coordTemp" - Name 506 "storeTempPre" - Name 510 "storeTempPost" - Name 517 "coordTemp" - Name 520 "storeTempPre" - Name 524 "storeTempPost" - Name 531 "storeTemp" - Name 539 "psout" - Name 547 "@entryPointOutput.Color" - Name 552 "g_sSamp" - Name 555 "g_tTex1df1a" - Name 558 "g_tTex1di1a" - Name 561 "g_tTex1du1a" - Name 564 "g_tTex2df1a" - Name 567 "g_tTex2di1a" - Name 570 "g_tTex2du1a" + Name 424 "coordTemp" + Name 427 "storeTemp" + Name 437 "coordTemp" + Name 440 "storeTemp" + Name 450 "coordTemp" + Name 453 "storeTemp" + Name 463 "coordTemp" + Name 466 "storeTemp" + Name 476 "coordTemp" + Name 479 "storeTempPre" + Name 484 "storeTempPost" + Name 491 "coordTemp" + Name 494 "storeTempPre" + Name 499 "storeTempPost" + Name 506 "coordTemp" + Name 509 "storeTempPre" + Name 514 "storeTempPost" + Name 521 "coordTemp" + Name 524 "storeTempPre" + Name 529 "storeTempPost" + Name 536 "coordTemp" + Name 539 "storeTempPre" + Name 544 "storeTempPost" + Name 551 "coordTemp" + Name 554 "storeTempPre" + Name 559 "storeTempPost" + Name 566 "storeTemp" + Name 575 "psout" + Name 583 "@entryPointOutput.Color" + Name 588 "g_sSamp" + Name 591 "g_tTex1df1a" + Name 594 "g_tTex1di1a" + Name 597 "g_tTex1du1a" + Name 600 "g_tTex2df1a" + Name 603 "g_tTex2di1a" + Name 606 "g_tTex2du1a" MemberDecorate 59($Global) 0 Offset 0 MemberDecorate 59($Global) 1 Offset 8 MemberDecorate 59($Global) 2 Offset 16 @@ -1843,37 +1842,37 @@ Validation failed Decorate 61 Binding 10 Decorate 70(g_tTex1df1) DescriptorSet 0 Decorate 70(g_tTex1df1) Binding 1 - Decorate 83(g_tTex1di1) DescriptorSet 0 - Decorate 83(g_tTex1di1) Binding 2 - Decorate 91(g_tTex1du1) DescriptorSet 0 - Decorate 91(g_tTex1du1) Binding 3 - Decorate 99(g_tTex2df1) DescriptorSet 0 - Decorate 99(g_tTex2df1) Binding 4 - Decorate 109(g_tTex2di1) DescriptorSet 0 - Decorate 109(g_tTex2di1) Binding 5 - Decorate 117(g_tTex2du1) DescriptorSet 0 - Decorate 117(g_tTex2du1) Binding 6 - Decorate 125(g_tTex3df1) DescriptorSet 0 - Decorate 125(g_tTex3df1) Binding 7 - Decorate 135(g_tTex3di1) DescriptorSet 0 - Decorate 135(g_tTex3di1) Binding 8 - Decorate 143(g_tTex3du1) DescriptorSet 0 - Decorate 143(g_tTex3du1) Binding 9 - Decorate 547(@entryPointOutput.Color) Location 0 - Decorate 552(g_sSamp) DescriptorSet 0 - Decorate 552(g_sSamp) Binding 0 - Decorate 555(g_tTex1df1a) DescriptorSet 0 - Decorate 555(g_tTex1df1a) Binding 0 - Decorate 558(g_tTex1di1a) DescriptorSet 0 - Decorate 558(g_tTex1di1a) Binding 0 - Decorate 561(g_tTex1du1a) DescriptorSet 0 - Decorate 561(g_tTex1du1a) Binding 0 - Decorate 564(g_tTex2df1a) DescriptorSet 0 - Decorate 564(g_tTex2df1a) Binding 0 - Decorate 567(g_tTex2di1a) DescriptorSet 0 - Decorate 567(g_tTex2di1a) Binding 0 - Decorate 570(g_tTex2du1a) DescriptorSet 0 - Decorate 570(g_tTex2du1a) Binding 0 + Decorate 85(g_tTex1di1) DescriptorSet 0 + Decorate 85(g_tTex1di1) Binding 2 + Decorate 94(g_tTex1du1) DescriptorSet 0 + Decorate 94(g_tTex1du1) Binding 3 + Decorate 104(g_tTex2df1) DescriptorSet 0 + Decorate 104(g_tTex2df1) Binding 4 + Decorate 115(g_tTex2di1) DescriptorSet 0 + Decorate 115(g_tTex2di1) Binding 5 + Decorate 124(g_tTex2du1) DescriptorSet 0 + Decorate 124(g_tTex2du1) Binding 6 + Decorate 133(g_tTex3df1) DescriptorSet 0 + Decorate 133(g_tTex3df1) Binding 7 + Decorate 144(g_tTex3di1) DescriptorSet 0 + Decorate 144(g_tTex3di1) Binding 8 + Decorate 153(g_tTex3du1) DescriptorSet 0 + Decorate 153(g_tTex3du1) Binding 9 + Decorate 583(@entryPointOutput.Color) Location 0 + Decorate 588(g_sSamp) DescriptorSet 0 + Decorate 588(g_sSamp) Binding 0 + Decorate 591(g_tTex1df1a) DescriptorSet 0 + Decorate 591(g_tTex1df1a) Binding 0 + Decorate 594(g_tTex1di1a) DescriptorSet 0 + Decorate 594(g_tTex1di1a) Binding 0 + Decorate 597(g_tTex1du1a) DescriptorSet 0 + Decorate 597(g_tTex1du1a) Binding 0 + Decorate 600(g_tTex2df1a) DescriptorSet 0 + Decorate 600(g_tTex2df1a) Binding 0 + Decorate 603(g_tTex2di1a) DescriptorSet 0 + Decorate 603(g_tTex2di1a) Binding 0 + Decorate 606(g_tTex2du1a) DescriptorSet 0 + Decorate 606(g_tTex2du1a) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -1905,79 +1904,80 @@ Validation failed 68: TypeImage 18(float) 1D nonsampled format:R32f 69: TypePointer UniformConstant 68 70(g_tTex1df1): 69(ptr) Variable UniformConstant - 81: TypeImage 6(int) 1D nonsampled format:R32i - 82: TypePointer UniformConstant 81 - 83(g_tTex1di1): 82(ptr) Variable UniformConstant - 89: TypeImage 12(int) 1D nonsampled format:R32ui - 90: TypePointer UniformConstant 89 - 91(g_tTex1du1): 90(ptr) Variable UniformConstant - 97: TypeImage 18(float) 2D nonsampled format:R32f - 98: TypePointer UniformConstant 97 - 99(g_tTex2df1): 98(ptr) Variable UniformConstant - 101: 6(int) Constant 1 - 102: TypePointer Uniform 56(ivec2) - 107: TypeImage 6(int) 2D nonsampled format:R32i - 108: TypePointer UniformConstant 107 - 109(g_tTex2di1): 108(ptr) Variable UniformConstant - 115: TypeImage 12(int) 2D nonsampled format:R32ui - 116: TypePointer UniformConstant 115 - 117(g_tTex2du1): 116(ptr) Variable UniformConstant - 123: TypeImage 18(float) 3D nonsampled format:R32f - 124: TypePointer UniformConstant 123 - 125(g_tTex3df1): 124(ptr) Variable UniformConstant - 127: 6(int) Constant 2 - 128: TypePointer Uniform 57(ivec3) - 133: TypeImage 6(int) 3D nonsampled format:R32i - 134: TypePointer UniformConstant 133 - 135(g_tTex3di1): 134(ptr) Variable UniformConstant - 141: TypeImage 12(int) 3D nonsampled format:R32ui - 142: TypePointer UniformConstant 141 - 143(g_tTex3du1): 142(ptr) Variable UniformConstant - 149: 6(int) Constant 8 - 150: TypePointer Uniform 18(float) - 169: 12(int) Constant 3 - 182: 18(float) Constant 1073741824 - 196: 18(float) Constant 1077936128 - 209: 18(float) Constant 1082130432 - 246: 6(int) Constant 65535 - 259: 6(int) Constant 61680 - 300: 6(int) Constant 5 - 306: 12(int) Constant 6 - 327: 12(int) Constant 9 - 382: 18(float) Constant 1065353216 - 533: 6(int) Constant 3 - 534: 56(ivec2) ConstantComposite 127 533 - 538: TypePointer Function 40(PS_OUTPUT) - 540: 39(fvec4) ConstantComposite 382 382 382 382 - 541: TypePointer Function 39(fvec4) - 546: TypePointer Output 39(fvec4) -547(@entryPointOutput.Color): 546(ptr) Variable Output - 550: TypeSampler - 551: TypePointer UniformConstant 550 - 552(g_sSamp): 551(ptr) Variable UniformConstant - 553: TypeImage 18(float) 1D array nonsampled format:R32f - 554: TypePointer UniformConstant 553 -555(g_tTex1df1a): 554(ptr) Variable UniformConstant - 556: TypeImage 6(int) 1D array nonsampled format:R32i - 557: TypePointer UniformConstant 556 -558(g_tTex1di1a): 557(ptr) Variable UniformConstant - 559: TypeImage 12(int) 1D array nonsampled format:R32ui - 560: TypePointer UniformConstant 559 -561(g_tTex1du1a): 560(ptr) Variable UniformConstant - 562: TypeImage 18(float) 2D array nonsampled format:R32f - 563: TypePointer UniformConstant 562 -564(g_tTex2df1a): 563(ptr) Variable UniformConstant - 565: TypeImage 6(int) 2D array nonsampled format:R32i - 566: TypePointer UniformConstant 565 -567(g_tTex2di1a): 566(ptr) Variable UniformConstant - 568: TypeImage 12(int) 2D array nonsampled format:R32ui - 569: TypePointer UniformConstant 568 -570(g_tTex2du1a): 569(ptr) Variable UniformConstant + 83: TypeImage 6(int) 1D nonsampled format:R32i + 84: TypePointer UniformConstant 83 + 85(g_tTex1di1): 84(ptr) Variable UniformConstant + 92: TypeImage 12(int) 1D nonsampled format:R32ui + 93: TypePointer UniformConstant 92 + 94(g_tTex1du1): 93(ptr) Variable UniformConstant + 98: TypeVector 12(int) 4 + 102: TypeImage 18(float) 2D nonsampled format:R32f + 103: TypePointer UniformConstant 102 + 104(g_tTex2df1): 103(ptr) Variable UniformConstant + 106: 6(int) Constant 1 + 107: TypePointer Uniform 56(ivec2) + 113: TypeImage 6(int) 2D nonsampled format:R32i + 114: TypePointer UniformConstant 113 + 115(g_tTex2di1): 114(ptr) Variable UniformConstant + 122: TypeImage 12(int) 2D nonsampled format:R32ui + 123: TypePointer UniformConstant 122 + 124(g_tTex2du1): 123(ptr) Variable UniformConstant + 131: TypeImage 18(float) 3D nonsampled format:R32f + 132: TypePointer UniformConstant 131 + 133(g_tTex3df1): 132(ptr) Variable UniformConstant + 135: 6(int) Constant 2 + 136: TypePointer Uniform 57(ivec3) + 142: TypeImage 6(int) 3D nonsampled format:R32i + 143: TypePointer UniformConstant 142 + 144(g_tTex3di1): 143(ptr) Variable UniformConstant + 151: TypeImage 12(int) 3D nonsampled format:R32ui + 152: TypePointer UniformConstant 151 + 153(g_tTex3du1): 152(ptr) Variable UniformConstant + 160: 6(int) Constant 8 + 161: TypePointer Uniform 18(float) + 180: 12(int) Constant 3 + 194: 18(float) Constant 1073741824 + 209: 18(float) Constant 1077936128 + 223: 18(float) Constant 1082130432 + 263: 6(int) Constant 65535 + 277: 6(int) Constant 61680 + 320: 6(int) Constant 5 + 326: 12(int) Constant 6 + 347: 12(int) Constant 9 + 406: 18(float) Constant 1065353216 + 568: 6(int) Constant 3 + 569: 56(ivec2) ConstantComposite 135 568 + 574: TypePointer Function 40(PS_OUTPUT) + 576: 39(fvec4) ConstantComposite 406 406 406 406 + 577: TypePointer Function 39(fvec4) + 582: TypePointer Output 39(fvec4) +583(@entryPointOutput.Color): 582(ptr) Variable Output + 586: TypeSampler + 587: TypePointer UniformConstant 586 + 588(g_sSamp): 587(ptr) Variable UniformConstant + 589: TypeImage 18(float) 1D array nonsampled format:R32f + 590: TypePointer UniformConstant 589 +591(g_tTex1df1a): 590(ptr) Variable UniformConstant + 592: TypeImage 6(int) 1D array nonsampled format:R32i + 593: TypePointer UniformConstant 592 +594(g_tTex1di1a): 593(ptr) Variable UniformConstant + 595: TypeImage 12(int) 1D array nonsampled format:R32ui + 596: TypePointer UniformConstant 595 +597(g_tTex1du1a): 596(ptr) Variable UniformConstant + 598: TypeImage 18(float) 2D array nonsampled format:R32f + 599: TypePointer UniformConstant 598 +600(g_tTex2df1a): 599(ptr) Variable UniformConstant + 601: TypeImage 6(int) 2D array nonsampled format:R32i + 602: TypePointer UniformConstant 601 +603(g_tTex2di1a): 602(ptr) Variable UniformConstant + 604: TypeImage 12(int) 2D array nonsampled format:R32ui + 605: TypePointer UniformConstant 604 +606(g_tTex2du1a): 605(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label - 548:40(PS_OUTPUT) FunctionCall 42(@main() - 549: 39(fvec4) CompositeExtract 548 0 - Store 547(@entryPointOutput.Color) 549 + 584:40(PS_OUTPUT) FunctionCall 42(@main() + 585: 39(fvec4) CompositeExtract 584 0 + Store 583(@entryPointOutput.Color) 585 Return FunctionEnd 10(Fn1(i1;): 6(int) Function None 8 @@ -2025,567 +2025,602 @@ Validation failed FunctionEnd 42(@main():40(PS_OUTPUT) Function None 41 43: Label - 75(r00): 19(ptr) Variable Function - 80(r01): 7(ptr) Variable Function - 88(r02): 13(ptr) Variable Function - 96(r10): 19(ptr) Variable Function - 106(r11): 7(ptr) Variable Function - 114(r12): 13(ptr) Variable Function - 122(r20): 19(ptr) Variable Function - 132(r21): 7(ptr) Variable Function - 140(r22): 13(ptr) Variable Function - 148(lf1): 19(ptr) Variable Function - 153(storeTemp): 19(ptr) Variable Function - 163(storeTemp): 7(ptr) Variable Function - 168(storeTemp): 13(ptr) Variable Function - 174(val1): 19(ptr) Variable Function - 175(coordTemp): 7(ptr) Variable Function - 178(storeTemp): 19(ptr) Variable Function - 189(coordTemp): 7(ptr) Variable Function - 192(storeTemp): 19(ptr) Variable Function - 202(coordTemp): 7(ptr) Variable Function - 205(storeTemp): 19(ptr) Variable Function + 76(r00): 19(ptr) Variable Function + 82(r01): 7(ptr) Variable Function + 91(r02): 13(ptr) Variable Function + 101(r10): 19(ptr) Variable Function + 112(r11): 7(ptr) Variable Function + 121(r12): 13(ptr) Variable Function + 130(r20): 19(ptr) Variable Function + 141(r21): 7(ptr) Variable Function + 150(r22): 13(ptr) Variable Function + 159(lf1): 19(ptr) Variable Function + 164(storeTemp): 19(ptr) Variable Function + 174(storeTemp): 7(ptr) Variable Function + 179(storeTemp): 13(ptr) Variable Function + 185(val1): 19(ptr) Variable Function + 186(coordTemp): 7(ptr) Variable Function + 189(storeTemp): 19(ptr) Variable Function + 201(coordTemp): 7(ptr) Variable Function + 204(storeTemp): 19(ptr) Variable Function 215(coordTemp): 7(ptr) Variable Function - 218(storeTemp): 7(ptr) Variable Function - 227(coordTemp): 7(ptr) Variable Function - 230(storeTemp): 7(ptr) Variable Function - 239(coordTemp): 7(ptr) Variable Function - 242(storeTemp): 7(ptr) Variable Function - 252(coordTemp): 7(ptr) Variable Function - 255(storeTemp): 7(ptr) Variable Function - 265(coordTemp): 7(ptr) Variable Function - 268(storeTemp): 7(ptr) Variable Function - 277(coordTemp): 7(ptr) Variable Function - 280(storeTemp): 7(ptr) Variable Function - 289(storeTemp): 19(ptr) Variable Function + 218(storeTemp): 19(ptr) Variable Function + 229(coordTemp): 7(ptr) Variable Function + 232(storeTemp): 7(ptr) Variable Function + 242(coordTemp): 7(ptr) Variable Function + 245(storeTemp): 7(ptr) Variable Function + 255(coordTemp): 7(ptr) Variable Function + 258(storeTemp): 7(ptr) Variable Function + 269(coordTemp): 7(ptr) Variable Function + 272(storeTemp): 7(ptr) Variable Function + 283(coordTemp): 7(ptr) Variable Function + 286(storeTemp): 7(ptr) Variable Function + 296(coordTemp): 7(ptr) Variable Function 299(storeTemp): 7(ptr) Variable Function - 305(storeTemp): 13(ptr) Variable Function - 311(storeTemp): 19(ptr) Variable Function - 321(storeTemp): 7(ptr) Variable Function - 326(storeTemp): 13(ptr) Variable Function - 336(param): 19(ptr) Variable Function - 342(param): 7(ptr) Variable Function - 348(param): 13(ptr) Variable Function - 350(tempArg): 19(ptr) Variable Function - 351(param): 19(ptr) Variable Function - 358(tempArg): 7(ptr) Variable Function - 359(param): 7(ptr) Variable Function - 366(tempArg): 13(ptr) Variable Function - 367(param): 13(ptr) Variable Function - 374(coordTemp): 7(ptr) Variable Function - 377(storeTemp): 19(ptr) Variable Function - 387(coordTemp): 7(ptr) Variable Function - 390(storeTemp): 7(ptr) Variable Function - 399(coordTemp): 7(ptr) Variable Function - 402(storeTemp): 13(ptr) Variable Function + 309(storeTemp): 19(ptr) Variable Function + 319(storeTemp): 7(ptr) Variable Function + 325(storeTemp): 13(ptr) Variable Function + 331(storeTemp): 19(ptr) Variable Function + 341(storeTemp): 7(ptr) Variable Function + 346(storeTemp): 13(ptr) Variable Function + 357(param): 19(ptr) Variable Function + 364(param): 7(ptr) Variable Function + 371(param): 13(ptr) Variable Function + 373(tempArg): 19(ptr) Variable Function + 374(param): 19(ptr) Variable Function + 381(tempArg): 7(ptr) Variable Function + 382(param): 7(ptr) Variable Function + 389(tempArg): 13(ptr) Variable Function + 390(param): 13(ptr) Variable Function + 397(coordTemp): 7(ptr) Variable Function + 400(storeTemp): 19(ptr) Variable Function 411(coordTemp): 7(ptr) Variable Function - 414(storeTemp): 19(ptr) Variable Function - 423(coordTemp): 7(ptr) Variable Function - 426(storeTemp): 7(ptr) Variable Function - 435(coordTemp): 7(ptr) Variable Function - 438(storeTemp): 13(ptr) Variable Function - 447(coordTemp): 7(ptr) Variable Function -450(storeTempPre): 19(ptr) Variable Function -454(storeTempPost): 19(ptr) Variable Function - 461(coordTemp): 7(ptr) Variable Function -464(storeTempPre): 13(ptr) Variable Function -468(storeTempPost): 13(ptr) Variable Function - 475(coordTemp): 7(ptr) Variable Function -478(storeTempPre): 7(ptr) Variable Function -482(storeTempPost): 7(ptr) Variable Function - 489(coordTemp): 7(ptr) Variable Function -492(storeTempPre): 19(ptr) Variable Function -496(storeTempPost): 19(ptr) Variable Function - 503(coordTemp): 7(ptr) Variable Function -506(storeTempPre): 7(ptr) Variable Function -510(storeTempPost): 7(ptr) Variable Function - 517(coordTemp): 7(ptr) Variable Function -520(storeTempPre): 13(ptr) Variable Function -524(storeTempPost): 13(ptr) Variable Function - 531(storeTemp): 19(ptr) Variable Function - 539(psout): 538(ptr) Variable Function + 414(storeTemp): 7(ptr) Variable Function + 424(coordTemp): 7(ptr) Variable Function + 427(storeTemp): 13(ptr) Variable Function + 437(coordTemp): 7(ptr) Variable Function + 440(storeTemp): 19(ptr) Variable Function + 450(coordTemp): 7(ptr) Variable Function + 453(storeTemp): 7(ptr) Variable Function + 463(coordTemp): 7(ptr) Variable Function + 466(storeTemp): 13(ptr) Variable Function + 476(coordTemp): 7(ptr) Variable Function +479(storeTempPre): 19(ptr) Variable Function +484(storeTempPost): 19(ptr) Variable Function + 491(coordTemp): 7(ptr) Variable Function +494(storeTempPre): 13(ptr) Variable Function +499(storeTempPost): 13(ptr) Variable Function + 506(coordTemp): 7(ptr) Variable Function +509(storeTempPre): 7(ptr) Variable Function +514(storeTempPost): 7(ptr) Variable Function + 521(coordTemp): 7(ptr) Variable Function +524(storeTempPre): 19(ptr) Variable Function +529(storeTempPost): 19(ptr) Variable Function + 536(coordTemp): 7(ptr) Variable Function +539(storeTempPre): 7(ptr) Variable Function +544(storeTempPost): 7(ptr) Variable Function + 551(coordTemp): 7(ptr) Variable Function +554(storeTempPre): 13(ptr) Variable Function +559(storeTempPost): 13(ptr) Variable Function + 566(storeTemp): 19(ptr) Variable Function + 575(psout): 574(ptr) Variable Function 71: 68 Load 70(g_tTex1df1) 72: 62(ptr) AccessChain 61 53 73: 6(int) Load 72 - 74: 18(float) ImageRead 71 73 - 76: 68 Load 70(g_tTex1df1) - 77: 62(ptr) AccessChain 61 53 - 78: 6(int) Load 77 - 79: 18(float) ImageRead 76 78 - Store 75(r00) 79 - 84: 81 Load 83(g_tTex1di1) - 85: 62(ptr) AccessChain 61 53 - 86: 6(int) Load 85 - 87: 6(int) ImageRead 84 86 - Store 80(r01) 87 - 92: 89 Load 91(g_tTex1du1) - 93: 62(ptr) AccessChain 61 53 - 94: 6(int) Load 93 - 95: 12(int) ImageRead 92 94 - Store 88(r02) 95 - 100: 97 Load 99(g_tTex2df1) - 103: 102(ptr) AccessChain 61 101 - 104: 56(ivec2) Load 103 - 105: 18(float) ImageRead 100 104 - Store 96(r10) 105 - 110: 107 Load 109(g_tTex2di1) - 111: 102(ptr) AccessChain 61 101 - 112: 56(ivec2) Load 111 - 113: 6(int) ImageRead 110 112 - Store 106(r11) 113 - 118: 115 Load 117(g_tTex2du1) - 119: 102(ptr) AccessChain 61 101 - 120: 56(ivec2) Load 119 - 121: 12(int) ImageRead 118 120 - Store 114(r12) 121 - 126: 123 Load 125(g_tTex3df1) - 129: 128(ptr) AccessChain 61 127 - 130: 57(ivec3) Load 129 - 131: 18(float) ImageRead 126 130 - Store 122(r20) 131 - 136: 133 Load 135(g_tTex3di1) - 137: 128(ptr) AccessChain 61 127 + 74: 39(fvec4) ImageRead 71 73 + 75: 18(float) CompositeExtract 74 0 + 77: 68 Load 70(g_tTex1df1) + 78: 62(ptr) AccessChain 61 53 + 79: 6(int) Load 78 + 80: 39(fvec4) ImageRead 77 79 + 81: 18(float) CompositeExtract 80 0 + Store 76(r00) 81 + 86: 83 Load 85(g_tTex1di1) + 87: 62(ptr) AccessChain 61 53 + 88: 6(int) Load 87 + 89: 58(ivec4) ImageRead 86 88 + 90: 6(int) CompositeExtract 89 0 + Store 82(r01) 90 + 95: 92 Load 94(g_tTex1du1) + 96: 62(ptr) AccessChain 61 53 + 97: 6(int) Load 96 + 99: 98(ivec4) ImageRead 95 97 + 100: 12(int) CompositeExtract 99 0 + Store 91(r02) 100 + 105: 102 Load 104(g_tTex2df1) + 108: 107(ptr) AccessChain 61 106 + 109: 56(ivec2) Load 108 + 110: 39(fvec4) ImageRead 105 109 + 111: 18(float) CompositeExtract 110 0 + Store 101(r10) 111 + 116: 113 Load 115(g_tTex2di1) + 117: 107(ptr) AccessChain 61 106 + 118: 56(ivec2) Load 117 + 119: 58(ivec4) ImageRead 116 118 + 120: 6(int) CompositeExtract 119 0 + Store 112(r11) 120 + 125: 122 Load 124(g_tTex2du1) + 126: 107(ptr) AccessChain 61 106 + 127: 56(ivec2) Load 126 + 128: 98(ivec4) ImageRead 125 127 + 129: 12(int) CompositeExtract 128 0 + Store 121(r12) 129 + 134: 131 Load 133(g_tTex3df1) + 137: 136(ptr) AccessChain 61 135 138: 57(ivec3) Load 137 - 139: 6(int) ImageRead 136 138 - Store 132(r21) 139 - 144: 141 Load 143(g_tTex3du1) - 145: 128(ptr) AccessChain 61 127 - 146: 57(ivec3) Load 145 - 147: 12(int) ImageRead 144 146 - Store 140(r22) 147 - 151: 150(ptr) AccessChain 61 149 - 152: 18(float) Load 151 - Store 148(lf1) 152 - 154: 18(float) FunctionCall 37(SomeValue() - Store 153(storeTemp) 154 - 155: 68 Load 70(g_tTex1df1) - 156: 62(ptr) AccessChain 61 53 - 157: 6(int) Load 156 - 158: 18(float) Load 153(storeTemp) - ImageWrite 155 157 158 - 159: 68 Load 70(g_tTex1df1) - 160: 62(ptr) AccessChain 61 53 - 161: 6(int) Load 160 - 162: 18(float) Load 148(lf1) - ImageWrite 159 161 162 - Store 163(storeTemp) 127 - 164: 81 Load 83(g_tTex1di1) - 165: 62(ptr) AccessChain 61 53 - 166: 6(int) Load 165 - 167: 6(int) Load 163(storeTemp) - ImageWrite 164 166 167 - Store 168(storeTemp) 169 - 170: 89 Load 91(g_tTex1du1) + 139: 39(fvec4) ImageRead 134 138 + 140: 18(float) CompositeExtract 139 0 + Store 130(r20) 140 + 145: 142 Load 144(g_tTex3di1) + 146: 136(ptr) AccessChain 61 135 + 147: 57(ivec3) Load 146 + 148: 58(ivec4) ImageRead 145 147 + 149: 6(int) CompositeExtract 148 0 + Store 141(r21) 149 + 154: 151 Load 153(g_tTex3du1) + 155: 136(ptr) AccessChain 61 135 + 156: 57(ivec3) Load 155 + 157: 98(ivec4) ImageRead 154 156 + 158: 12(int) CompositeExtract 157 0 + Store 150(r22) 158 + 162: 161(ptr) AccessChain 61 160 + 163: 18(float) Load 162 + Store 159(lf1) 163 + 165: 18(float) FunctionCall 37(SomeValue() + Store 164(storeTemp) 165 + 166: 68 Load 70(g_tTex1df1) + 167: 62(ptr) AccessChain 61 53 + 168: 6(int) Load 167 + 169: 18(float) Load 164(storeTemp) + ImageWrite 166 168 169 + 170: 68 Load 70(g_tTex1df1) 171: 62(ptr) AccessChain 61 53 172: 6(int) Load 171 - 173: 12(int) Load 168(storeTemp) + 173: 18(float) Load 159(lf1) ImageWrite 170 172 173 + Store 174(storeTemp) 135 + 175: 83 Load 85(g_tTex1di1) 176: 62(ptr) AccessChain 61 53 177: 6(int) Load 176 - Store 175(coordTemp) 177 - 179: 68 Load 70(g_tTex1df1) - 180: 6(int) Load 175(coordTemp) - 181: 18(float) ImageRead 179 180 - Store 178(storeTemp) 181 - 183: 18(float) Load 178(storeTemp) - 184: 18(float) FMul 183 182 - Store 178(storeTemp) 184 - 185: 68 Load 70(g_tTex1df1) - 186: 6(int) Load 175(coordTemp) - 187: 18(float) Load 178(storeTemp) - ImageWrite 185 186 187 - 188: 18(float) Load 178(storeTemp) - Store 174(val1) 188 - 190: 62(ptr) AccessChain 61 53 - 191: 6(int) Load 190 - Store 189(coordTemp) 191 - 193: 68 Load 70(g_tTex1df1) - 194: 6(int) Load 189(coordTemp) - 195: 18(float) ImageRead 193 194 - Store 192(storeTemp) 195 - 197: 18(float) Load 192(storeTemp) - 198: 18(float) FSub 197 196 - Store 192(storeTemp) 198 - 199: 68 Load 70(g_tTex1df1) - 200: 6(int) Load 189(coordTemp) - 201: 18(float) Load 192(storeTemp) - ImageWrite 199 200 201 - 203: 62(ptr) AccessChain 61 53 - 204: 6(int) Load 203 - Store 202(coordTemp) 204 - 206: 68 Load 70(g_tTex1df1) - 207: 6(int) Load 202(coordTemp) - 208: 18(float) ImageRead 206 207 - Store 205(storeTemp) 208 - 210: 18(float) Load 205(storeTemp) - 211: 18(float) FAdd 210 209 - Store 205(storeTemp) 211 + 178: 6(int) Load 174(storeTemp) + ImageWrite 175 177 178 + Store 179(storeTemp) 180 + 181: 92 Load 94(g_tTex1du1) + 182: 62(ptr) AccessChain 61 53 + 183: 6(int) Load 182 + 184: 12(int) Load 179(storeTemp) + ImageWrite 181 183 184 + 187: 62(ptr) AccessChain 61 53 + 188: 6(int) Load 187 + Store 186(coordTemp) 188 + 190: 68 Load 70(g_tTex1df1) + 191: 6(int) Load 186(coordTemp) + 192: 39(fvec4) ImageRead 190 191 + 193: 18(float) CompositeExtract 192 0 + Store 189(storeTemp) 193 + 195: 18(float) Load 189(storeTemp) + 196: 18(float) FMul 195 194 + Store 189(storeTemp) 196 + 197: 68 Load 70(g_tTex1df1) + 198: 6(int) Load 186(coordTemp) + 199: 18(float) Load 189(storeTemp) + ImageWrite 197 198 199 + 200: 18(float) Load 189(storeTemp) + Store 185(val1) 200 + 202: 62(ptr) AccessChain 61 53 + 203: 6(int) Load 202 + Store 201(coordTemp) 203 + 205: 68 Load 70(g_tTex1df1) + 206: 6(int) Load 201(coordTemp) + 207: 39(fvec4) ImageRead 205 206 + 208: 18(float) CompositeExtract 207 0 + Store 204(storeTemp) 208 + 210: 18(float) Load 204(storeTemp) + 211: 18(float) FSub 210 209 + Store 204(storeTemp) 211 212: 68 Load 70(g_tTex1df1) - 213: 6(int) Load 202(coordTemp) - 214: 18(float) Load 205(storeTemp) + 213: 6(int) Load 201(coordTemp) + 214: 18(float) Load 204(storeTemp) ImageWrite 212 213 214 216: 62(ptr) AccessChain 61 53 217: 6(int) Load 216 Store 215(coordTemp) 217 - 219: 81 Load 83(g_tTex1di1) + 219: 68 Load 70(g_tTex1df1) 220: 6(int) Load 215(coordTemp) - 221: 6(int) ImageRead 219 220 - Store 218(storeTemp) 221 - 222: 6(int) Load 218(storeTemp) - 223: 6(int) SDiv 222 127 - Store 218(storeTemp) 223 - 224: 81 Load 83(g_tTex1di1) - 225: 6(int) Load 215(coordTemp) - 226: 6(int) Load 218(storeTemp) - ImageWrite 224 225 226 - 228: 62(ptr) AccessChain 61 53 - 229: 6(int) Load 228 - Store 227(coordTemp) 229 - 231: 81 Load 83(g_tTex1di1) - 232: 6(int) Load 227(coordTemp) - 233: 6(int) ImageRead 231 232 - Store 230(storeTemp) 233 - 234: 6(int) Load 230(storeTemp) - 235: 6(int) SMod 234 127 - Store 230(storeTemp) 235 - 236: 81 Load 83(g_tTex1di1) - 237: 6(int) Load 227(coordTemp) - 238: 6(int) Load 230(storeTemp) - ImageWrite 236 237 238 - 240: 62(ptr) AccessChain 61 53 - 241: 6(int) Load 240 - Store 239(coordTemp) 241 - 243: 81 Load 83(g_tTex1di1) - 244: 6(int) Load 239(coordTemp) - 245: 6(int) ImageRead 243 244 - Store 242(storeTemp) 245 - 247: 6(int) Load 242(storeTemp) - 248: 6(int) BitwiseAnd 247 246 - Store 242(storeTemp) 248 - 249: 81 Load 83(g_tTex1di1) - 250: 6(int) Load 239(coordTemp) - 251: 6(int) Load 242(storeTemp) - ImageWrite 249 250 251 - 253: 62(ptr) AccessChain 61 53 - 254: 6(int) Load 253 - Store 252(coordTemp) 254 - 256: 81 Load 83(g_tTex1di1) - 257: 6(int) Load 252(coordTemp) - 258: 6(int) ImageRead 256 257 - Store 255(storeTemp) 258 - 260: 6(int) Load 255(storeTemp) - 261: 6(int) BitwiseOr 260 259 - Store 255(storeTemp) 261 - 262: 81 Load 83(g_tTex1di1) - 263: 6(int) Load 252(coordTemp) - 264: 6(int) Load 255(storeTemp) - ImageWrite 262 263 264 - 266: 62(ptr) AccessChain 61 53 - 267: 6(int) Load 266 - Store 265(coordTemp) 267 - 269: 81 Load 83(g_tTex1di1) - 270: 6(int) Load 265(coordTemp) - 271: 6(int) ImageRead 269 270 - Store 268(storeTemp) 271 - 272: 6(int) Load 268(storeTemp) - 273: 6(int) ShiftLeftLogical 272 127 - Store 268(storeTemp) 273 - 274: 81 Load 83(g_tTex1di1) - 275: 6(int) Load 265(coordTemp) - 276: 6(int) Load 268(storeTemp) - ImageWrite 274 275 276 - 278: 62(ptr) AccessChain 61 53 - 279: 6(int) Load 278 - Store 277(coordTemp) 279 - 281: 81 Load 83(g_tTex1di1) - 282: 6(int) Load 277(coordTemp) - 283: 6(int) ImageRead 281 282 - Store 280(storeTemp) 283 - 284: 6(int) Load 280(storeTemp) - 285: 6(int) ShiftRightArithmetic 284 127 - Store 280(storeTemp) 285 - 286: 81 Load 83(g_tTex1di1) - 287: 6(int) Load 277(coordTemp) - 288: 6(int) Load 280(storeTemp) - ImageWrite 286 287 288 - 290: 18(float) FunctionCall 37(SomeValue() - Store 289(storeTemp) 290 - 291: 97 Load 99(g_tTex2df1) - 292: 102(ptr) AccessChain 61 101 - 293: 56(ivec2) Load 292 - 294: 18(float) Load 289(storeTemp) - ImageWrite 291 293 294 - 295: 97 Load 99(g_tTex2df1) - 296: 102(ptr) AccessChain 61 101 - 297: 56(ivec2) Load 296 - 298: 18(float) Load 148(lf1) - ImageWrite 295 297 298 - Store 299(storeTemp) 300 - 301: 107 Load 109(g_tTex2di1) - 302: 102(ptr) AccessChain 61 101 - 303: 56(ivec2) Load 302 + 221: 39(fvec4) ImageRead 219 220 + 222: 18(float) CompositeExtract 221 0 + Store 218(storeTemp) 222 + 224: 18(float) Load 218(storeTemp) + 225: 18(float) FAdd 224 223 + Store 218(storeTemp) 225 + 226: 68 Load 70(g_tTex1df1) + 227: 6(int) Load 215(coordTemp) + 228: 18(float) Load 218(storeTemp) + ImageWrite 226 227 228 + 230: 62(ptr) AccessChain 61 53 + 231: 6(int) Load 230 + Store 229(coordTemp) 231 + 233: 83 Load 85(g_tTex1di1) + 234: 6(int) Load 229(coordTemp) + 235: 58(ivec4) ImageRead 233 234 + 236: 6(int) CompositeExtract 235 0 + Store 232(storeTemp) 236 + 237: 6(int) Load 232(storeTemp) + 238: 6(int) SDiv 237 135 + Store 232(storeTemp) 238 + 239: 83 Load 85(g_tTex1di1) + 240: 6(int) Load 229(coordTemp) + 241: 6(int) Load 232(storeTemp) + ImageWrite 239 240 241 + 243: 62(ptr) AccessChain 61 53 + 244: 6(int) Load 243 + Store 242(coordTemp) 244 + 246: 83 Load 85(g_tTex1di1) + 247: 6(int) Load 242(coordTemp) + 248: 58(ivec4) ImageRead 246 247 + 249: 6(int) CompositeExtract 248 0 + Store 245(storeTemp) 249 + 250: 6(int) Load 245(storeTemp) + 251: 6(int) SMod 250 135 + Store 245(storeTemp) 251 + 252: 83 Load 85(g_tTex1di1) + 253: 6(int) Load 242(coordTemp) + 254: 6(int) Load 245(storeTemp) + ImageWrite 252 253 254 + 256: 62(ptr) AccessChain 61 53 + 257: 6(int) Load 256 + Store 255(coordTemp) 257 + 259: 83 Load 85(g_tTex1di1) + 260: 6(int) Load 255(coordTemp) + 261: 58(ivec4) ImageRead 259 260 + 262: 6(int) CompositeExtract 261 0 + Store 258(storeTemp) 262 + 264: 6(int) Load 258(storeTemp) + 265: 6(int) BitwiseAnd 264 263 + Store 258(storeTemp) 265 + 266: 83 Load 85(g_tTex1di1) + 267: 6(int) Load 255(coordTemp) + 268: 6(int) Load 258(storeTemp) + ImageWrite 266 267 268 + 270: 62(ptr) AccessChain 61 53 + 271: 6(int) Load 270 + Store 269(coordTemp) 271 + 273: 83 Load 85(g_tTex1di1) + 274: 6(int) Load 269(coordTemp) + 275: 58(ivec4) ImageRead 273 274 + 276: 6(int) CompositeExtract 275 0 + Store 272(storeTemp) 276 + 278: 6(int) Load 272(storeTemp) + 279: 6(int) BitwiseOr 278 277 + Store 272(storeTemp) 279 + 280: 83 Load 85(g_tTex1di1) + 281: 6(int) Load 269(coordTemp) + 282: 6(int) Load 272(storeTemp) + ImageWrite 280 281 282 + 284: 62(ptr) AccessChain 61 53 + 285: 6(int) Load 284 + Store 283(coordTemp) 285 + 287: 83 Load 85(g_tTex1di1) + 288: 6(int) Load 283(coordTemp) + 289: 58(ivec4) ImageRead 287 288 + 290: 6(int) CompositeExtract 289 0 + Store 286(storeTemp) 290 + 291: 6(int) Load 286(storeTemp) + 292: 6(int) ShiftLeftLogical 291 135 + Store 286(storeTemp) 292 + 293: 83 Load 85(g_tTex1di1) + 294: 6(int) Load 283(coordTemp) + 295: 6(int) Load 286(storeTemp) + ImageWrite 293 294 295 + 297: 62(ptr) AccessChain 61 53 + 298: 6(int) Load 297 + Store 296(coordTemp) 298 + 300: 83 Load 85(g_tTex1di1) + 301: 6(int) Load 296(coordTemp) + 302: 58(ivec4) ImageRead 300 301 + 303: 6(int) CompositeExtract 302 0 + Store 299(storeTemp) 303 304: 6(int) Load 299(storeTemp) - ImageWrite 301 303 304 - Store 305(storeTemp) 306 - 307: 115 Load 117(g_tTex2du1) - 308: 102(ptr) AccessChain 61 101 - 309: 56(ivec2) Load 308 - 310: 12(int) Load 305(storeTemp) - ImageWrite 307 309 310 - 312: 18(float) FunctionCall 37(SomeValue() - Store 311(storeTemp) 312 - 313: 123 Load 125(g_tTex3df1) - 314: 128(ptr) AccessChain 61 127 - 315: 57(ivec3) Load 314 - 316: 18(float) Load 311(storeTemp) - ImageWrite 313 315 316 - 317: 123 Load 125(g_tTex3df1) - 318: 128(ptr) AccessChain 61 127 - 319: 57(ivec3) Load 318 - 320: 18(float) Load 148(lf1) - ImageWrite 317 319 320 - Store 321(storeTemp) 149 - 322: 133 Load 135(g_tTex3di1) - 323: 128(ptr) AccessChain 61 127 - 324: 57(ivec3) Load 323 - 325: 6(int) Load 321(storeTemp) - ImageWrite 322 324 325 - Store 326(storeTemp) 327 - 328: 141 Load 143(g_tTex3du1) - 329: 128(ptr) AccessChain 61 127 - 330: 57(ivec3) Load 329 - 331: 12(int) Load 326(storeTemp) - ImageWrite 328 330 331 - 332: 68 Load 70(g_tTex1df1) - 333: 62(ptr) AccessChain 61 53 - 334: 6(int) Load 333 - 335: 18(float) ImageRead 332 334 - Store 336(param) 335 - 337: 18(float) FunctionCall 22(Fn1(f1;) 336(param) - 338: 81 Load 83(g_tTex1di1) - 339: 62(ptr) AccessChain 61 53 - 340: 6(int) Load 339 - 341: 6(int) ImageRead 338 340 - Store 342(param) 341 - 343: 6(int) FunctionCall 10(Fn1(i1;) 342(param) - 344: 89 Load 91(g_tTex1du1) - 345: 62(ptr) AccessChain 61 53 - 346: 6(int) Load 345 - 347: 12(int) ImageRead 344 346 - Store 348(param) 347 - 349: 12(int) FunctionCall 16(Fn1(u1;) 348(param) - 352: 2 FunctionCall 34(Fn2(f1;) 351(param) - 353: 18(float) Load 351(param) - Store 350(tempArg) 353 - 354: 68 Load 70(g_tTex1df1) - 355: 62(ptr) AccessChain 61 53 - 356: 6(int) Load 355 - 357: 18(float) Load 350(tempArg) - ImageWrite 354 356 357 - 360: 2 FunctionCall 26(Fn2(i1;) 359(param) - 361: 6(int) Load 359(param) - Store 358(tempArg) 361 - 362: 81 Load 83(g_tTex1di1) - 363: 62(ptr) AccessChain 61 53 - 364: 6(int) Load 363 - 365: 6(int) Load 358(tempArg) - ImageWrite 362 364 365 - 368: 2 FunctionCall 30(Fn2(u1;) 367(param) - 369: 12(int) Load 367(param) - Store 366(tempArg) 369 - 370: 89 Load 91(g_tTex1du1) - 371: 62(ptr) AccessChain 61 53 - 372: 6(int) Load 371 - 373: 12(int) Load 366(tempArg) - ImageWrite 370 372 373 - 375: 62(ptr) AccessChain 61 53 - 376: 6(int) Load 375 - Store 374(coordTemp) 376 - 378: 68 Load 70(g_tTex1df1) - 379: 6(int) Load 374(coordTemp) - 380: 18(float) ImageRead 378 379 - Store 377(storeTemp) 380 - 381: 18(float) Load 377(storeTemp) - 383: 18(float) FAdd 381 382 - Store 377(storeTemp) 383 - 384: 68 Load 70(g_tTex1df1) - 385: 6(int) Load 374(coordTemp) - 386: 18(float) Load 377(storeTemp) - ImageWrite 384 385 386 - 388: 62(ptr) AccessChain 61 53 - 389: 6(int) Load 388 - Store 387(coordTemp) 389 - 391: 81 Load 83(g_tTex1di1) - 392: 6(int) Load 387(coordTemp) - 393: 6(int) ImageRead 391 392 - Store 390(storeTemp) 393 - 394: 6(int) Load 390(storeTemp) - 395: 6(int) IAdd 394 101 - Store 390(storeTemp) 395 - 396: 81 Load 83(g_tTex1di1) - 397: 6(int) Load 387(coordTemp) - 398: 6(int) Load 390(storeTemp) - ImageWrite 396 397 398 - 400: 62(ptr) AccessChain 61 53 - 401: 6(int) Load 400 - Store 399(coordTemp) 401 - 403: 89 Load 91(g_tTex1du1) - 404: 6(int) Load 399(coordTemp) - 405: 12(int) ImageRead 403 404 - Store 402(storeTemp) 405 - 406: 12(int) Load 402(storeTemp) - 407: 12(int) IAdd 406 101 - Store 402(storeTemp) 407 - 408: 89 Load 91(g_tTex1du1) - 409: 6(int) Load 399(coordTemp) - 410: 12(int) Load 402(storeTemp) + 305: 6(int) ShiftRightArithmetic 304 135 + Store 299(storeTemp) 305 + 306: 83 Load 85(g_tTex1di1) + 307: 6(int) Load 296(coordTemp) + 308: 6(int) Load 299(storeTemp) + ImageWrite 306 307 308 + 310: 18(float) FunctionCall 37(SomeValue() + Store 309(storeTemp) 310 + 311: 102 Load 104(g_tTex2df1) + 312: 107(ptr) AccessChain 61 106 + 313: 56(ivec2) Load 312 + 314: 18(float) Load 309(storeTemp) + ImageWrite 311 313 314 + 315: 102 Load 104(g_tTex2df1) + 316: 107(ptr) AccessChain 61 106 + 317: 56(ivec2) Load 316 + 318: 18(float) Load 159(lf1) + ImageWrite 315 317 318 + Store 319(storeTemp) 320 + 321: 113 Load 115(g_tTex2di1) + 322: 107(ptr) AccessChain 61 106 + 323: 56(ivec2) Load 322 + 324: 6(int) Load 319(storeTemp) + ImageWrite 321 323 324 + Store 325(storeTemp) 326 + 327: 122 Load 124(g_tTex2du1) + 328: 107(ptr) AccessChain 61 106 + 329: 56(ivec2) Load 328 + 330: 12(int) Load 325(storeTemp) + ImageWrite 327 329 330 + 332: 18(float) FunctionCall 37(SomeValue() + Store 331(storeTemp) 332 + 333: 131 Load 133(g_tTex3df1) + 334: 136(ptr) AccessChain 61 135 + 335: 57(ivec3) Load 334 + 336: 18(float) Load 331(storeTemp) + ImageWrite 333 335 336 + 337: 131 Load 133(g_tTex3df1) + 338: 136(ptr) AccessChain 61 135 + 339: 57(ivec3) Load 338 + 340: 18(float) Load 159(lf1) + ImageWrite 337 339 340 + Store 341(storeTemp) 160 + 342: 142 Load 144(g_tTex3di1) + 343: 136(ptr) AccessChain 61 135 + 344: 57(ivec3) Load 343 + 345: 6(int) Load 341(storeTemp) + ImageWrite 342 344 345 + Store 346(storeTemp) 347 + 348: 151 Load 153(g_tTex3du1) + 349: 136(ptr) AccessChain 61 135 + 350: 57(ivec3) Load 349 + 351: 12(int) Load 346(storeTemp) + ImageWrite 348 350 351 + 352: 68 Load 70(g_tTex1df1) + 353: 62(ptr) AccessChain 61 53 + 354: 6(int) Load 353 + 355: 39(fvec4) ImageRead 352 354 + 356: 18(float) CompositeExtract 355 0 + Store 357(param) 356 + 358: 18(float) FunctionCall 22(Fn1(f1;) 357(param) + 359: 83 Load 85(g_tTex1di1) + 360: 62(ptr) AccessChain 61 53 + 361: 6(int) Load 360 + 362: 58(ivec4) ImageRead 359 361 + 363: 6(int) CompositeExtract 362 0 + Store 364(param) 363 + 365: 6(int) FunctionCall 10(Fn1(i1;) 364(param) + 366: 92 Load 94(g_tTex1du1) + 367: 62(ptr) AccessChain 61 53 + 368: 6(int) Load 367 + 369: 98(ivec4) ImageRead 366 368 + 370: 12(int) CompositeExtract 369 0 + Store 371(param) 370 + 372: 12(int) FunctionCall 16(Fn1(u1;) 371(param) + 375: 2 FunctionCall 34(Fn2(f1;) 374(param) + 376: 18(float) Load 374(param) + Store 373(tempArg) 376 + 377: 68 Load 70(g_tTex1df1) + 378: 62(ptr) AccessChain 61 53 + 379: 6(int) Load 378 + 380: 18(float) Load 373(tempArg) + ImageWrite 377 379 380 + 383: 2 FunctionCall 26(Fn2(i1;) 382(param) + 384: 6(int) Load 382(param) + Store 381(tempArg) 384 + 385: 83 Load 85(g_tTex1di1) + 386: 62(ptr) AccessChain 61 53 + 387: 6(int) Load 386 + 388: 6(int) Load 381(tempArg) + ImageWrite 385 387 388 + 391: 2 FunctionCall 30(Fn2(u1;) 390(param) + 392: 12(int) Load 390(param) + Store 389(tempArg) 392 + 393: 92 Load 94(g_tTex1du1) + 394: 62(ptr) AccessChain 61 53 + 395: 6(int) Load 394 + 396: 12(int) Load 389(tempArg) + ImageWrite 393 395 396 + 398: 62(ptr) AccessChain 61 53 + 399: 6(int) Load 398 + Store 397(coordTemp) 399 + 401: 68 Load 70(g_tTex1df1) + 402: 6(int) Load 397(coordTemp) + 403: 39(fvec4) ImageRead 401 402 + 404: 18(float) CompositeExtract 403 0 + Store 400(storeTemp) 404 + 405: 18(float) Load 400(storeTemp) + 407: 18(float) FAdd 405 406 + Store 400(storeTemp) 407 + 408: 68 Load 70(g_tTex1df1) + 409: 6(int) Load 397(coordTemp) + 410: 18(float) Load 400(storeTemp) ImageWrite 408 409 410 412: 62(ptr) AccessChain 61 53 413: 6(int) Load 412 Store 411(coordTemp) 413 - 415: 68 Load 70(g_tTex1df1) + 415: 83 Load 85(g_tTex1di1) 416: 6(int) Load 411(coordTemp) - 417: 18(float) ImageRead 415 416 - Store 414(storeTemp) 417 - 418: 18(float) Load 414(storeTemp) - 419: 18(float) FSub 418 382 - Store 414(storeTemp) 419 - 420: 68 Load 70(g_tTex1df1) - 421: 6(int) Load 411(coordTemp) - 422: 18(float) Load 414(storeTemp) - ImageWrite 420 421 422 - 424: 62(ptr) AccessChain 61 53 - 425: 6(int) Load 424 - Store 423(coordTemp) 425 - 427: 81 Load 83(g_tTex1di1) - 428: 6(int) Load 423(coordTemp) - 429: 6(int) ImageRead 427 428 - Store 426(storeTemp) 429 - 430: 6(int) Load 426(storeTemp) - 431: 6(int) ISub 430 101 - Store 426(storeTemp) 431 - 432: 81 Load 83(g_tTex1di1) - 433: 6(int) Load 423(coordTemp) - 434: 6(int) Load 426(storeTemp) - ImageWrite 432 433 434 - 436: 62(ptr) AccessChain 61 53 - 437: 6(int) Load 436 - Store 435(coordTemp) 437 - 439: 89 Load 91(g_tTex1du1) - 440: 6(int) Load 435(coordTemp) - 441: 12(int) ImageRead 439 440 - Store 438(storeTemp) 441 - 442: 12(int) Load 438(storeTemp) - 443: 12(int) ISub 442 101 - Store 438(storeTemp) 443 - 444: 89 Load 91(g_tTex1du1) - 445: 6(int) Load 435(coordTemp) - 446: 12(int) Load 438(storeTemp) - ImageWrite 444 445 446 - 448: 62(ptr) AccessChain 61 53 - 449: 6(int) Load 448 - Store 447(coordTemp) 449 - 451: 68 Load 70(g_tTex1df1) - 452: 6(int) Load 447(coordTemp) - 453: 18(float) ImageRead 451 452 - Store 450(storeTempPre) 453 - 455: 18(float) Load 450(storeTempPre) - Store 454(storeTempPost) 455 - 456: 18(float) Load 454(storeTempPost) - 457: 18(float) FAdd 456 382 - Store 454(storeTempPost) 457 - 458: 68 Load 70(g_tTex1df1) - 459: 6(int) Load 447(coordTemp) - 460: 18(float) Load 454(storeTempPost) - ImageWrite 458 459 460 - 462: 62(ptr) AccessChain 61 53 - 463: 6(int) Load 462 - Store 461(coordTemp) 463 - 465: 89 Load 91(g_tTex1du1) - 466: 6(int) Load 461(coordTemp) - 467: 12(int) ImageRead 465 466 - Store 464(storeTempPre) 467 - 469: 12(int) Load 464(storeTempPre) - Store 468(storeTempPost) 469 - 470: 12(int) Load 468(storeTempPost) - 471: 12(int) ISub 470 101 - Store 468(storeTempPost) 471 - 472: 89 Load 91(g_tTex1du1) - 473: 6(int) Load 461(coordTemp) - 474: 12(int) Load 468(storeTempPost) - ImageWrite 472 473 474 - 476: 62(ptr) AccessChain 61 53 - 477: 6(int) Load 476 - Store 475(coordTemp) 477 - 479: 81 Load 83(g_tTex1di1) - 480: 6(int) Load 475(coordTemp) - 481: 6(int) ImageRead 479 480 - Store 478(storeTempPre) 481 - 483: 6(int) Load 478(storeTempPre) - Store 482(storeTempPost) 483 - 484: 6(int) Load 482(storeTempPost) - 485: 6(int) IAdd 484 101 - Store 482(storeTempPost) 485 - 486: 81 Load 83(g_tTex1di1) - 487: 6(int) Load 475(coordTemp) - 488: 6(int) Load 482(storeTempPost) - ImageWrite 486 487 488 - 490: 62(ptr) AccessChain 61 53 - 491: 6(int) Load 490 - Store 489(coordTemp) 491 - 493: 68 Load 70(g_tTex1df1) - 494: 6(int) Load 489(coordTemp) - 495: 18(float) ImageRead 493 494 - Store 492(storeTempPre) 495 - 497: 18(float) Load 492(storeTempPre) - Store 496(storeTempPost) 497 - 498: 18(float) Load 496(storeTempPost) - 499: 18(float) FSub 498 382 - Store 496(storeTempPost) 499 - 500: 68 Load 70(g_tTex1df1) - 501: 6(int) Load 489(coordTemp) - 502: 18(float) Load 496(storeTempPost) - ImageWrite 500 501 502 - 504: 62(ptr) AccessChain 61 53 - 505: 6(int) Load 504 - Store 503(coordTemp) 505 - 507: 81 Load 83(g_tTex1di1) - 508: 6(int) Load 503(coordTemp) - 509: 6(int) ImageRead 507 508 - Store 506(storeTempPre) 509 - 511: 6(int) Load 506(storeTempPre) - Store 510(storeTempPost) 511 - 512: 6(int) Load 510(storeTempPost) - 513: 6(int) IAdd 512 101 - Store 510(storeTempPost) 513 - 514: 81 Load 83(g_tTex1di1) - 515: 6(int) Load 503(coordTemp) - 516: 6(int) Load 510(storeTempPost) - ImageWrite 514 515 516 - 518: 62(ptr) AccessChain 61 53 - 519: 6(int) Load 518 - Store 517(coordTemp) 519 - 521: 89 Load 91(g_tTex1du1) - 522: 6(int) Load 517(coordTemp) - 523: 12(int) ImageRead 521 522 - Store 520(storeTempPre) 523 - 525: 12(int) Load 520(storeTempPre) - Store 524(storeTempPost) 525 - 526: 12(int) Load 524(storeTempPost) - 527: 12(int) ISub 526 101 - Store 524(storeTempPost) 527 - 528: 89 Load 91(g_tTex1du1) - 529: 6(int) Load 517(coordTemp) - 530: 12(int) Load 524(storeTempPost) - ImageWrite 528 529 530 - 532: 97 Load 99(g_tTex2df1) - 535: 18(float) ImageRead 532 534 - Store 531(storeTemp) 535 - 536: 68 Load 70(g_tTex1df1) - 537: 18(float) Load 531(storeTemp) - ImageWrite 536 101 537 - 542: 541(ptr) AccessChain 539(psout) 53 - Store 542 540 - 543:40(PS_OUTPUT) Load 539(psout) - ReturnValue 543 + 417: 58(ivec4) ImageRead 415 416 + 418: 6(int) CompositeExtract 417 0 + Store 414(storeTemp) 418 + 419: 6(int) Load 414(storeTemp) + 420: 6(int) IAdd 419 106 + Store 414(storeTemp) 420 + 421: 83 Load 85(g_tTex1di1) + 422: 6(int) Load 411(coordTemp) + 423: 6(int) Load 414(storeTemp) + ImageWrite 421 422 423 + 425: 62(ptr) AccessChain 61 53 + 426: 6(int) Load 425 + Store 424(coordTemp) 426 + 428: 92 Load 94(g_tTex1du1) + 429: 6(int) Load 424(coordTemp) + 430: 98(ivec4) ImageRead 428 429 + 431: 12(int) CompositeExtract 430 0 + Store 427(storeTemp) 431 + 432: 12(int) Load 427(storeTemp) + 433: 12(int) IAdd 432 106 + Store 427(storeTemp) 433 + 434: 92 Load 94(g_tTex1du1) + 435: 6(int) Load 424(coordTemp) + 436: 12(int) Load 427(storeTemp) + ImageWrite 434 435 436 + 438: 62(ptr) AccessChain 61 53 + 439: 6(int) Load 438 + Store 437(coordTemp) 439 + 441: 68 Load 70(g_tTex1df1) + 442: 6(int) Load 437(coordTemp) + 443: 39(fvec4) ImageRead 441 442 + 444: 18(float) CompositeExtract 443 0 + Store 440(storeTemp) 444 + 445: 18(float) Load 440(storeTemp) + 446: 18(float) FSub 445 406 + Store 440(storeTemp) 446 + 447: 68 Load 70(g_tTex1df1) + 448: 6(int) Load 437(coordTemp) + 449: 18(float) Load 440(storeTemp) + ImageWrite 447 448 449 + 451: 62(ptr) AccessChain 61 53 + 452: 6(int) Load 451 + Store 450(coordTemp) 452 + 454: 83 Load 85(g_tTex1di1) + 455: 6(int) Load 450(coordTemp) + 456: 58(ivec4) ImageRead 454 455 + 457: 6(int) CompositeExtract 456 0 + Store 453(storeTemp) 457 + 458: 6(int) Load 453(storeTemp) + 459: 6(int) ISub 458 106 + Store 453(storeTemp) 459 + 460: 83 Load 85(g_tTex1di1) + 461: 6(int) Load 450(coordTemp) + 462: 6(int) Load 453(storeTemp) + ImageWrite 460 461 462 + 464: 62(ptr) AccessChain 61 53 + 465: 6(int) Load 464 + Store 463(coordTemp) 465 + 467: 92 Load 94(g_tTex1du1) + 468: 6(int) Load 463(coordTemp) + 469: 98(ivec4) ImageRead 467 468 + 470: 12(int) CompositeExtract 469 0 + Store 466(storeTemp) 470 + 471: 12(int) Load 466(storeTemp) + 472: 12(int) ISub 471 106 + Store 466(storeTemp) 472 + 473: 92 Load 94(g_tTex1du1) + 474: 6(int) Load 463(coordTemp) + 475: 12(int) Load 466(storeTemp) + ImageWrite 473 474 475 + 477: 62(ptr) AccessChain 61 53 + 478: 6(int) Load 477 + Store 476(coordTemp) 478 + 480: 68 Load 70(g_tTex1df1) + 481: 6(int) Load 476(coordTemp) + 482: 39(fvec4) ImageRead 480 481 + 483: 18(float) CompositeExtract 482 0 + Store 479(storeTempPre) 483 + 485: 18(float) Load 479(storeTempPre) + Store 484(storeTempPost) 485 + 486: 18(float) Load 484(storeTempPost) + 487: 18(float) FAdd 486 406 + Store 484(storeTempPost) 487 + 488: 68 Load 70(g_tTex1df1) + 489: 6(int) Load 476(coordTemp) + 490: 18(float) Load 484(storeTempPost) + ImageWrite 488 489 490 + 492: 62(ptr) AccessChain 61 53 + 493: 6(int) Load 492 + Store 491(coordTemp) 493 + 495: 92 Load 94(g_tTex1du1) + 496: 6(int) Load 491(coordTemp) + 497: 98(ivec4) ImageRead 495 496 + 498: 12(int) CompositeExtract 497 0 + Store 494(storeTempPre) 498 + 500: 12(int) Load 494(storeTempPre) + Store 499(storeTempPost) 500 + 501: 12(int) Load 499(storeTempPost) + 502: 12(int) ISub 501 106 + Store 499(storeTempPost) 502 + 503: 92 Load 94(g_tTex1du1) + 504: 6(int) Load 491(coordTemp) + 505: 12(int) Load 499(storeTempPost) + ImageWrite 503 504 505 + 507: 62(ptr) AccessChain 61 53 + 508: 6(int) Load 507 + Store 506(coordTemp) 508 + 510: 83 Load 85(g_tTex1di1) + 511: 6(int) Load 506(coordTemp) + 512: 58(ivec4) ImageRead 510 511 + 513: 6(int) CompositeExtract 512 0 + Store 509(storeTempPre) 513 + 515: 6(int) Load 509(storeTempPre) + Store 514(storeTempPost) 515 + 516: 6(int) Load 514(storeTempPost) + 517: 6(int) IAdd 516 106 + Store 514(storeTempPost) 517 + 518: 83 Load 85(g_tTex1di1) + 519: 6(int) Load 506(coordTemp) + 520: 6(int) Load 514(storeTempPost) + ImageWrite 518 519 520 + 522: 62(ptr) AccessChain 61 53 + 523: 6(int) Load 522 + Store 521(coordTemp) 523 + 525: 68 Load 70(g_tTex1df1) + 526: 6(int) Load 521(coordTemp) + 527: 39(fvec4) ImageRead 525 526 + 528: 18(float) CompositeExtract 527 0 + Store 524(storeTempPre) 528 + 530: 18(float) Load 524(storeTempPre) + Store 529(storeTempPost) 530 + 531: 18(float) Load 529(storeTempPost) + 532: 18(float) FSub 531 406 + Store 529(storeTempPost) 532 + 533: 68 Load 70(g_tTex1df1) + 534: 6(int) Load 521(coordTemp) + 535: 18(float) Load 529(storeTempPost) + ImageWrite 533 534 535 + 537: 62(ptr) AccessChain 61 53 + 538: 6(int) Load 537 + Store 536(coordTemp) 538 + 540: 83 Load 85(g_tTex1di1) + 541: 6(int) Load 536(coordTemp) + 542: 58(ivec4) ImageRead 540 541 + 543: 6(int) CompositeExtract 542 0 + Store 539(storeTempPre) 543 + 545: 6(int) Load 539(storeTempPre) + Store 544(storeTempPost) 545 + 546: 6(int) Load 544(storeTempPost) + 547: 6(int) IAdd 546 106 + Store 544(storeTempPost) 547 + 548: 83 Load 85(g_tTex1di1) + 549: 6(int) Load 536(coordTemp) + 550: 6(int) Load 544(storeTempPost) + ImageWrite 548 549 550 + 552: 62(ptr) AccessChain 61 53 + 553: 6(int) Load 552 + Store 551(coordTemp) 553 + 555: 92 Load 94(g_tTex1du1) + 556: 6(int) Load 551(coordTemp) + 557: 98(ivec4) ImageRead 555 556 + 558: 12(int) CompositeExtract 557 0 + Store 554(storeTempPre) 558 + 560: 12(int) Load 554(storeTempPre) + Store 559(storeTempPost) 560 + 561: 12(int) Load 559(storeTempPost) + 562: 12(int) ISub 561 106 + Store 559(storeTempPost) 562 + 563: 92 Load 94(g_tTex1du1) + 564: 6(int) Load 551(coordTemp) + 565: 12(int) Load 559(storeTempPost) + ImageWrite 563 564 565 + 567: 102 Load 104(g_tTex2df1) + 570: 39(fvec4) ImageRead 567 569 + 571: 18(float) CompositeExtract 570 0 + Store 566(storeTemp) 571 + 572: 68 Load 70(g_tTex1df1) + 573: 18(float) Load 566(storeTemp) + ImageWrite 572 106 573 + 578: 577(ptr) AccessChain 575(psout) 53 + Store 578 576 + 579:40(PS_OUTPUT) Load 575(psout) + ReturnValue 579 FunctionEnd diff --git a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out index c8d10e608a..1f77a77817 100644 --- a/Test/baseResults/hlsl.rw.vec2.bracket.frag.out +++ b/Test/baseResults/hlsl.rw.vec2.bracket.frag.out @@ -1707,17 +1707,16 @@ gl_FragCoord origin is upper left 0:? 'anon@0' (layout( row_major std140) uniform block{ uniform int c1, uniform 2-component vector of int c2, uniform 3-component vector of int c3, uniform 4-component vector of int c4, uniform int o1, uniform 2-component vector of int o2, uniform 3-component vector of int o3, uniform 4-component vector of int o4, uniform 2-component vector of float uf2, uniform 2-component vector of int ui2, uniform 2-component vector of uint uu2}) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 605 +// Id's are bound by 711 Capability Shader Capability Image1D Capability StorageImageExtendedFormats 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 581 + EntryPoint Fragment 4 "main" 687 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" @@ -1751,101 +1750,101 @@ Validation failed MemberName 64($Global) 10 "uu2" Name 66 "" Name 76 "g_tTex1df2" - Name 82 "r00" - Name 87 "r01" - Name 90 "g_tTex1di2" - Name 95 "r02" - Name 98 "g_tTex1du2" - Name 103 "r10" - Name 106 "g_tTex2df2" - Name 111 "r11" - Name 114 "g_tTex2di2" - Name 119 "r12" - Name 122 "g_tTex2du2" - Name 127 "r20" - Name 130 "g_tTex3df2" - Name 137 "r21" - Name 140 "g_tTex3di2" - Name 145 "r22" - Name 148 "g_tTex3du2" - Name 153 "lf2" - Name 158 "storeTemp" - Name 168 "storeTemp" - Name 174 "storeTemp" - Name 182 "val1" - Name 184 "coordTemp" - Name 187 "storeTemp" - Name 198 "coordTemp" - Name 201 "storeTemp" - Name 212 "coordTemp" - Name 215 "storeTemp" - Name 226 "coordTemp" - Name 229 "storeTemp" - Name 239 "coordTemp" - Name 242 "storeTemp" - Name 252 "coordTemp" - Name 255 "storeTemp" + Name 85 "r00" + Name 93 "r01" + Name 96 "g_tTex1di2" + Name 104 "r02" + Name 107 "g_tTex1du2" + Name 116 "r10" + Name 119 "g_tTex2df2" + Name 127 "r11" + Name 130 "g_tTex2di2" + Name 138 "r12" + Name 141 "g_tTex2du2" + Name 149 "r20" + Name 152 "g_tTex3df2" + Name 162 "r21" + Name 165 "g_tTex3di2" + Name 173 "r22" + Name 176 "g_tTex3du2" + Name 184 "lf2" + Name 189 "storeTemp" + Name 199 "storeTemp" + Name 205 "storeTemp" + Name 213 "val1" + Name 215 "coordTemp" + Name 218 "storeTemp" + Name 232 "coordTemp" + Name 235 "storeTemp" + Name 249 "coordTemp" + Name 252 "storeTemp" Name 266 "coordTemp" Name 269 "storeTemp" - Name 280 "coordTemp" - Name 283 "storeTemp" - Name 293 "coordTemp" - Name 296 "storeTemp" - Name 306 "storeTemp" - Name 316 "storeTemp" - Name 323 "storeTemp" - Name 330 "storeTemp" - Name 340 "storeTemp" - Name 347 "storeTemp" - Name 358 "param" - Name 364 "param" - Name 370 "param" - Name 372 "tempArg" - Name 373 "param" - Name 380 "tempArg" - Name 381 "param" - Name 388 "tempArg" - Name 389 "param" - Name 396 "coordTemp" - Name 399 "storeTemp" - Name 410 "coordTemp" - Name 413 "storeTemp" - Name 423 "coordTemp" - Name 426 "storeTemp" - Name 436 "coordTemp" - Name 439 "storeTemp" - Name 449 "coordTemp" - Name 452 "storeTemp" - Name 462 "coordTemp" - Name 465 "storeTemp" - Name 475 "coordTemp" - Name 478 "storeTempPre" - Name 482 "storeTempPost" - Name 490 "coordTemp" - Name 493 "storeTempPre" - Name 497 "storeTempPost" - Name 505 "coordTemp" - Name 508 "storeTempPre" - Name 512 "storeTempPost" - Name 520 "coordTemp" - Name 523 "storeTempPre" - Name 527 "storeTempPost" - Name 535 "coordTemp" - Name 538 "storeTempPre" - Name 542 "storeTempPost" - Name 550 "coordTemp" - Name 553 "storeTempPre" - Name 557 "storeTempPost" - Name 565 "storeTemp" - Name 573 "psout" - Name 581 "@entryPointOutput.Color" - Name 586 "g_sSamp" - Name 589 "g_tTex1df2a" - Name 592 "g_tTex1di2a" - Name 595 "g_tTex1du2a" - Name 598 "g_tTex2df2a" - Name 601 "g_tTex2di2a" - Name 604 "g_tTex2du2a" + Name 282 "coordTemp" + Name 285 "storeTemp" + Name 298 "coordTemp" + Name 301 "storeTemp" + Name 315 "coordTemp" + Name 318 "storeTemp" + Name 332 "coordTemp" + Name 335 "storeTemp" + Name 348 "coordTemp" + Name 351 "storeTemp" + Name 364 "storeTemp" + Name 374 "storeTemp" + Name 381 "storeTemp" + Name 388 "storeTemp" + Name 398 "storeTemp" + Name 405 "storeTemp" + Name 419 "param" + Name 428 "param" + Name 437 "param" + Name 439 "tempArg" + Name 440 "param" + Name 447 "tempArg" + Name 448 "param" + Name 455 "tempArg" + Name 456 "param" + Name 463 "coordTemp" + Name 466 "storeTemp" + Name 480 "coordTemp" + Name 483 "storeTemp" + Name 496 "coordTemp" + Name 499 "storeTemp" + Name 512 "coordTemp" + Name 515 "storeTemp" + Name 528 "coordTemp" + Name 531 "storeTemp" + Name 544 "coordTemp" + Name 547 "storeTemp" + Name 560 "coordTemp" + Name 563 "storeTempPre" + Name 570 "storeTempPost" + Name 578 "coordTemp" + Name 581 "storeTempPre" + Name 588 "storeTempPost" + Name 596 "coordTemp" + Name 599 "storeTempPre" + Name 606 "storeTempPost" + Name 614 "coordTemp" + Name 617 "storeTempPre" + Name 624 "storeTempPost" + Name 632 "coordTemp" + Name 635 "storeTempPre" + Name 642 "storeTempPost" + Name 650 "coordTemp" + Name 653 "storeTempPre" + Name 660 "storeTempPost" + Name 668 "storeTemp" + Name 679 "psout" + Name 687 "@entryPointOutput.Color" + Name 692 "g_sSamp" + Name 695 "g_tTex1df2a" + Name 698 "g_tTex1di2a" + Name 701 "g_tTex1du2a" + Name 704 "g_tTex2df2a" + Name 707 "g_tTex2di2a" + Name 710 "g_tTex2du2a" MemberDecorate 64($Global) 0 Offset 0 MemberDecorate 64($Global) 1 Offset 8 MemberDecorate 64($Global) 2 Offset 16 @@ -1862,37 +1861,37 @@ Validation failed Decorate 66 Binding 10 Decorate 76(g_tTex1df2) DescriptorSet 0 Decorate 76(g_tTex1df2) Binding 1 - Decorate 90(g_tTex1di2) DescriptorSet 0 - Decorate 90(g_tTex1di2) Binding 2 - Decorate 98(g_tTex1du2) DescriptorSet 0 - Decorate 98(g_tTex1du2) Binding 3 - Decorate 106(g_tTex2df2) DescriptorSet 0 - Decorate 106(g_tTex2df2) Binding 4 - Decorate 114(g_tTex2di2) DescriptorSet 0 - Decorate 114(g_tTex2di2) Binding 5 - Decorate 122(g_tTex2du2) DescriptorSet 0 - Decorate 122(g_tTex2du2) Binding 6 - Decorate 130(g_tTex3df2) DescriptorSet 0 - Decorate 130(g_tTex3df2) Binding 7 - Decorate 140(g_tTex3di2) DescriptorSet 0 - Decorate 140(g_tTex3di2) Binding 8 - Decorate 148(g_tTex3du2) DescriptorSet 0 - Decorate 148(g_tTex3du2) Binding 9 - Decorate 581(@entryPointOutput.Color) Location 0 - Decorate 586(g_sSamp) DescriptorSet 0 - Decorate 586(g_sSamp) Binding 0 - Decorate 589(g_tTex1df2a) DescriptorSet 0 - Decorate 589(g_tTex1df2a) Binding 0 - Decorate 592(g_tTex1di2a) DescriptorSet 0 - Decorate 592(g_tTex1di2a) Binding 0 - Decorate 595(g_tTex1du2a) DescriptorSet 0 - Decorate 595(g_tTex1du2a) Binding 0 - Decorate 598(g_tTex2df2a) DescriptorSet 0 - Decorate 598(g_tTex2df2a) Binding 0 - Decorate 601(g_tTex2di2a) DescriptorSet 0 - Decorate 601(g_tTex2di2a) Binding 0 - Decorate 604(g_tTex2du2a) DescriptorSet 0 - Decorate 604(g_tTex2du2a) Binding 0 + Decorate 96(g_tTex1di2) DescriptorSet 0 + Decorate 96(g_tTex1di2) Binding 2 + Decorate 107(g_tTex1du2) DescriptorSet 0 + Decorate 107(g_tTex1du2) Binding 3 + Decorate 119(g_tTex2df2) DescriptorSet 0 + Decorate 119(g_tTex2df2) Binding 4 + Decorate 130(g_tTex2di2) DescriptorSet 0 + Decorate 130(g_tTex2di2) Binding 5 + Decorate 141(g_tTex2du2) DescriptorSet 0 + Decorate 141(g_tTex2du2) Binding 6 + Decorate 152(g_tTex3df2) DescriptorSet 0 + Decorate 152(g_tTex3df2) Binding 7 + Decorate 165(g_tTex3di2) DescriptorSet 0 + Decorate 165(g_tTex3di2) Binding 8 + Decorate 176(g_tTex3du2) DescriptorSet 0 + Decorate 176(g_tTex3du2) Binding 9 + Decorate 687(@entryPointOutput.Color) Location 0 + Decorate 692(g_sSamp) DescriptorSet 0 + Decorate 692(g_sSamp) Binding 0 + Decorate 695(g_tTex1df2a) DescriptorSet 0 + Decorate 695(g_tTex1df2a) Binding 0 + Decorate 698(g_tTex1di2a) DescriptorSet 0 + Decorate 698(g_tTex1di2a) Binding 0 + Decorate 701(g_tTex1du2a) DescriptorSet 0 + Decorate 701(g_tTex1du2a) Binding 0 + Decorate 704(g_tTex2df2a) DescriptorSet 0 + Decorate 704(g_tTex2df2a) Binding 0 + Decorate 707(g_tTex2di2a) DescriptorSet 0 + Decorate 707(g_tTex2di2a) Binding 0 + Decorate 710(g_tTex2du2a) DescriptorSet 0 + Decorate 710(g_tTex2du2a) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -1931,86 +1930,87 @@ Validation failed 75: TypePointer UniformConstant 74 76(g_tTex1df2): 75(ptr) Variable UniformConstant 78: TypePointer Uniform 6(int) - 88: TypeImage 6(int) 1D nonsampled format:Rg32i - 89: TypePointer UniformConstant 88 - 90(g_tTex1di2): 89(ptr) Variable UniformConstant - 96: TypeImage 13(int) 1D nonsampled format:Rg32ui - 97: TypePointer UniformConstant 96 - 98(g_tTex1du2): 97(ptr) Variable UniformConstant - 104: TypeImage 20(float) 2D nonsampled format:Rg32f - 105: TypePointer UniformConstant 104 - 106(g_tTex2df2): 105(ptr) Variable UniformConstant - 112: TypeImage 6(int) 2D nonsampled format:Rg32i - 113: TypePointer UniformConstant 112 - 114(g_tTex2di2): 113(ptr) Variable UniformConstant - 120: TypeImage 13(int) 2D nonsampled format:Rg32ui - 121: TypePointer UniformConstant 120 - 122(g_tTex2du2): 121(ptr) Variable UniformConstant - 128: TypeImage 20(float) 3D nonsampled format:Rg32f + 94: TypeImage 6(int) 1D nonsampled format:Rg32i + 95: TypePointer UniformConstant 94 + 96(g_tTex1di2): 95(ptr) Variable UniformConstant + 105: TypeImage 13(int) 1D nonsampled format:Rg32ui + 106: TypePointer UniformConstant 105 + 107(g_tTex1du2): 106(ptr) Variable UniformConstant + 111: TypeVector 13(int) 4 + 117: TypeImage 20(float) 2D nonsampled format:Rg32f + 118: TypePointer UniformConstant 117 + 119(g_tTex2df2): 118(ptr) Variable UniformConstant + 128: TypeImage 6(int) 2D nonsampled format:Rg32i 129: TypePointer UniformConstant 128 - 130(g_tTex3df2): 129(ptr) Variable UniformConstant - 132: 6(int) Constant 2 - 133: TypePointer Uniform 62(ivec3) - 138: TypeImage 6(int) 3D nonsampled format:Rg32i - 139: TypePointer UniformConstant 138 - 140(g_tTex3di2): 139(ptr) Variable UniformConstant - 146: TypeImage 13(int) 3D nonsampled format:Rg32ui - 147: TypePointer UniformConstant 146 - 148(g_tTex3du2): 147(ptr) Variable UniformConstant - 154: 6(int) Constant 8 - 155: TypePointer Uniform 21(fvec2) - 169: 7(ivec2) ConstantComposite 132 132 - 175: 13(int) Constant 3 - 176: 13(int) Constant 2 - 177: 14(ivec2) ConstantComposite 175 176 - 183: TypePointer Function 6(int) - 191: 20(float) Constant 1073741824 - 205: 20(float) Constant 1077936128 - 219: 20(float) Constant 1082130432 - 259: 6(int) Constant 65535 - 273: 6(int) Constant 61680 - 317: 6(int) Constant 5 - 318: 7(ivec2) ConstantComposite 317 132 - 324: 13(int) Constant 6 - 325: 14(ivec2) ConstantComposite 324 176 - 341: 6(int) Constant 6 - 342: 7(ivec2) ConstantComposite 154 341 - 348: 13(int) Constant 9 - 349: 14(ivec2) ConstantComposite 348 176 - 404: 20(float) Constant 1065353216 - 567: 6(int) Constant 3 - 568: 7(ivec2) ConstantComposite 132 567 - 572: TypePointer Function 43(PS_OUTPUT) - 574: 42(fvec4) ConstantComposite 404 404 404 404 - 575: TypePointer Function 42(fvec4) - 580: TypePointer Output 42(fvec4) -581(@entryPointOutput.Color): 580(ptr) Variable Output - 584: TypeSampler - 585: TypePointer UniformConstant 584 - 586(g_sSamp): 585(ptr) Variable UniformConstant - 587: TypeImage 20(float) 1D array nonsampled format:Rg32f - 588: TypePointer UniformConstant 587 -589(g_tTex1df2a): 588(ptr) Variable UniformConstant - 590: TypeImage 6(int) 1D array nonsampled format:Rg32i - 591: TypePointer UniformConstant 590 -592(g_tTex1di2a): 591(ptr) Variable UniformConstant - 593: TypeImage 13(int) 1D array nonsampled format:Rg32ui - 594: TypePointer UniformConstant 593 -595(g_tTex1du2a): 594(ptr) Variable UniformConstant - 596: TypeImage 20(float) 2D array nonsampled format:Rg32f - 597: TypePointer UniformConstant 596 -598(g_tTex2df2a): 597(ptr) Variable UniformConstant - 599: TypeImage 6(int) 2D array nonsampled format:Rg32i - 600: TypePointer UniformConstant 599 -601(g_tTex2di2a): 600(ptr) Variable UniformConstant - 602: TypeImage 13(int) 2D array nonsampled format:Rg32ui - 603: TypePointer UniformConstant 602 -604(g_tTex2du2a): 603(ptr) Variable UniformConstant + 130(g_tTex2di2): 129(ptr) Variable UniformConstant + 139: TypeImage 13(int) 2D nonsampled format:Rg32ui + 140: TypePointer UniformConstant 139 + 141(g_tTex2du2): 140(ptr) Variable UniformConstant + 150: TypeImage 20(float) 3D nonsampled format:Rg32f + 151: TypePointer UniformConstant 150 + 152(g_tTex3df2): 151(ptr) Variable UniformConstant + 154: 6(int) Constant 2 + 155: TypePointer Uniform 62(ivec3) + 163: TypeImage 6(int) 3D nonsampled format:Rg32i + 164: TypePointer UniformConstant 163 + 165(g_tTex3di2): 164(ptr) Variable UniformConstant + 174: TypeImage 13(int) 3D nonsampled format:Rg32ui + 175: TypePointer UniformConstant 174 + 176(g_tTex3du2): 175(ptr) Variable UniformConstant + 185: 6(int) Constant 8 + 186: TypePointer Uniform 21(fvec2) + 200: 7(ivec2) ConstantComposite 154 154 + 206: 13(int) Constant 3 + 207: 13(int) Constant 2 + 208: 14(ivec2) ConstantComposite 206 207 + 214: TypePointer Function 6(int) + 225: 20(float) Constant 1073741824 + 242: 20(float) Constant 1077936128 + 259: 20(float) Constant 1082130432 + 308: 6(int) Constant 65535 + 325: 6(int) Constant 61680 + 375: 6(int) Constant 5 + 376: 7(ivec2) ConstantComposite 375 154 + 382: 13(int) Constant 6 + 383: 14(ivec2) ConstantComposite 382 207 + 399: 6(int) Constant 6 + 400: 7(ivec2) ConstantComposite 185 399 + 406: 13(int) Constant 9 + 407: 14(ivec2) ConstantComposite 406 207 + 474: 20(float) Constant 1065353216 + 670: 6(int) Constant 3 + 671: 7(ivec2) ConstantComposite 154 670 + 678: TypePointer Function 43(PS_OUTPUT) + 680: 42(fvec4) ConstantComposite 474 474 474 474 + 681: TypePointer Function 42(fvec4) + 686: TypePointer Output 42(fvec4) +687(@entryPointOutput.Color): 686(ptr) Variable Output + 690: TypeSampler + 691: TypePointer UniformConstant 690 + 692(g_sSamp): 691(ptr) Variable UniformConstant + 693: TypeImage 20(float) 1D array nonsampled format:Rg32f + 694: TypePointer UniformConstant 693 +695(g_tTex1df2a): 694(ptr) Variable UniformConstant + 696: TypeImage 6(int) 1D array nonsampled format:Rg32i + 697: TypePointer UniformConstant 696 +698(g_tTex1di2a): 697(ptr) Variable UniformConstant + 699: TypeImage 13(int) 1D array nonsampled format:Rg32ui + 700: TypePointer UniformConstant 699 +701(g_tTex1du2a): 700(ptr) Variable UniformConstant + 702: TypeImage 20(float) 2D array nonsampled format:Rg32f + 703: TypePointer UniformConstant 702 +704(g_tTex2df2a): 703(ptr) Variable UniformConstant + 705: TypeImage 6(int) 2D array nonsampled format:Rg32i + 706: TypePointer UniformConstant 705 +707(g_tTex2di2a): 706(ptr) Variable UniformConstant + 708: TypeImage 13(int) 2D array nonsampled format:Rg32ui + 709: TypePointer UniformConstant 708 +710(g_tTex2du2a): 709(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label - 582:43(PS_OUTPUT) FunctionCall 45(@main() - 583: 42(fvec4) CompositeExtract 582 0 - Store 581(@entryPointOutput.Color) 583 + 688:43(PS_OUTPUT) FunctionCall 45(@main() + 689: 42(fvec4) CompositeExtract 688 0 + Store 687(@entryPointOutput.Color) 689 Return FunctionEnd 11(Fn1(vi2;): 7(ivec2) Function None 9 @@ -2058,587 +2058,692 @@ Validation failed FunctionEnd 45(@main():43(PS_OUTPUT) Function None 44 46: Label - 82(r00): 22(ptr) Variable Function - 87(r01): 8(ptr) Variable Function - 95(r02): 15(ptr) Variable Function - 103(r10): 22(ptr) Variable Function - 111(r11): 8(ptr) Variable Function - 119(r12): 15(ptr) Variable Function - 127(r20): 22(ptr) Variable Function - 137(r21): 8(ptr) Variable Function - 145(r22): 15(ptr) Variable Function - 153(lf2): 22(ptr) Variable Function - 158(storeTemp): 22(ptr) Variable Function - 168(storeTemp): 8(ptr) Variable Function - 174(storeTemp): 15(ptr) Variable Function - 182(val1): 22(ptr) Variable Function - 184(coordTemp): 183(ptr) Variable Function - 187(storeTemp): 22(ptr) Variable Function - 198(coordTemp): 183(ptr) Variable Function - 201(storeTemp): 22(ptr) Variable Function - 212(coordTemp): 183(ptr) Variable Function - 215(storeTemp): 22(ptr) Variable Function - 226(coordTemp): 183(ptr) Variable Function - 229(storeTemp): 8(ptr) Variable Function - 239(coordTemp): 183(ptr) Variable Function - 242(storeTemp): 8(ptr) Variable Function - 252(coordTemp): 183(ptr) Variable Function - 255(storeTemp): 8(ptr) Variable Function - 266(coordTemp): 183(ptr) Variable Function + 85(r00): 22(ptr) Variable Function + 93(r01): 8(ptr) Variable Function + 104(r02): 15(ptr) Variable Function + 116(r10): 22(ptr) Variable Function + 127(r11): 8(ptr) Variable Function + 138(r12): 15(ptr) Variable Function + 149(r20): 22(ptr) Variable Function + 162(r21): 8(ptr) Variable Function + 173(r22): 15(ptr) Variable Function + 184(lf2): 22(ptr) Variable Function + 189(storeTemp): 22(ptr) Variable Function + 199(storeTemp): 8(ptr) Variable Function + 205(storeTemp): 15(ptr) Variable Function + 213(val1): 22(ptr) Variable Function + 215(coordTemp): 214(ptr) Variable Function + 218(storeTemp): 22(ptr) Variable Function + 232(coordTemp): 214(ptr) Variable Function + 235(storeTemp): 22(ptr) Variable Function + 249(coordTemp): 214(ptr) Variable Function + 252(storeTemp): 22(ptr) Variable Function + 266(coordTemp): 214(ptr) Variable Function 269(storeTemp): 8(ptr) Variable Function - 280(coordTemp): 183(ptr) Variable Function - 283(storeTemp): 8(ptr) Variable Function - 293(coordTemp): 183(ptr) Variable Function - 296(storeTemp): 8(ptr) Variable Function - 306(storeTemp): 22(ptr) Variable Function - 316(storeTemp): 8(ptr) Variable Function - 323(storeTemp): 15(ptr) Variable Function - 330(storeTemp): 22(ptr) Variable Function - 340(storeTemp): 8(ptr) Variable Function - 347(storeTemp): 15(ptr) Variable Function - 358(param): 22(ptr) Variable Function - 364(param): 8(ptr) Variable Function - 370(param): 15(ptr) Variable Function - 372(tempArg): 22(ptr) Variable Function - 373(param): 22(ptr) Variable Function - 380(tempArg): 8(ptr) Variable Function - 381(param): 8(ptr) Variable Function - 388(tempArg): 15(ptr) Variable Function - 389(param): 15(ptr) Variable Function - 396(coordTemp): 183(ptr) Variable Function - 399(storeTemp): 22(ptr) Variable Function - 410(coordTemp): 183(ptr) Variable Function - 413(storeTemp): 8(ptr) Variable Function - 423(coordTemp): 183(ptr) Variable Function - 426(storeTemp): 15(ptr) Variable Function - 436(coordTemp): 183(ptr) Variable Function - 439(storeTemp): 22(ptr) Variable Function - 449(coordTemp): 183(ptr) Variable Function - 452(storeTemp): 8(ptr) Variable Function - 462(coordTemp): 183(ptr) Variable Function - 465(storeTemp): 15(ptr) Variable Function - 475(coordTemp): 183(ptr) Variable Function -478(storeTempPre): 22(ptr) Variable Function -482(storeTempPost): 22(ptr) Variable Function - 490(coordTemp): 183(ptr) Variable Function -493(storeTempPre): 15(ptr) Variable Function -497(storeTempPost): 15(ptr) Variable Function - 505(coordTemp): 183(ptr) Variable Function -508(storeTempPre): 8(ptr) Variable Function -512(storeTempPost): 8(ptr) Variable Function - 520(coordTemp): 183(ptr) Variable Function -523(storeTempPre): 22(ptr) Variable Function -527(storeTempPost): 22(ptr) Variable Function - 535(coordTemp): 183(ptr) Variable Function -538(storeTempPre): 8(ptr) Variable Function -542(storeTempPost): 8(ptr) Variable Function - 550(coordTemp): 183(ptr) Variable Function -553(storeTempPre): 15(ptr) Variable Function -557(storeTempPost): 15(ptr) Variable Function - 565(storeTemp): 22(ptr) Variable Function - 573(psout): 572(ptr) Variable Function + 282(coordTemp): 214(ptr) Variable Function + 285(storeTemp): 8(ptr) Variable Function + 298(coordTemp): 214(ptr) Variable Function + 301(storeTemp): 8(ptr) Variable Function + 315(coordTemp): 214(ptr) Variable Function + 318(storeTemp): 8(ptr) Variable Function + 332(coordTemp): 214(ptr) Variable Function + 335(storeTemp): 8(ptr) Variable Function + 348(coordTemp): 214(ptr) Variable Function + 351(storeTemp): 8(ptr) Variable Function + 364(storeTemp): 22(ptr) Variable Function + 374(storeTemp): 8(ptr) Variable Function + 381(storeTemp): 15(ptr) Variable Function + 388(storeTemp): 22(ptr) Variable Function + 398(storeTemp): 8(ptr) Variable Function + 405(storeTemp): 15(ptr) Variable Function + 419(param): 22(ptr) Variable Function + 428(param): 8(ptr) Variable Function + 437(param): 15(ptr) Variable Function + 439(tempArg): 22(ptr) Variable Function + 440(param): 22(ptr) Variable Function + 447(tempArg): 8(ptr) Variable Function + 448(param): 8(ptr) Variable Function + 455(tempArg): 15(ptr) Variable Function + 456(param): 15(ptr) Variable Function + 463(coordTemp): 214(ptr) Variable Function + 466(storeTemp): 22(ptr) Variable Function + 480(coordTemp): 214(ptr) Variable Function + 483(storeTemp): 8(ptr) Variable Function + 496(coordTemp): 214(ptr) Variable Function + 499(storeTemp): 15(ptr) Variable Function + 512(coordTemp): 214(ptr) Variable Function + 515(storeTemp): 22(ptr) Variable Function + 528(coordTemp): 214(ptr) Variable Function + 531(storeTemp): 8(ptr) Variable Function + 544(coordTemp): 214(ptr) Variable Function + 547(storeTemp): 15(ptr) Variable Function + 560(coordTemp): 214(ptr) Variable Function +563(storeTempPre): 22(ptr) Variable Function +570(storeTempPost): 22(ptr) Variable Function + 578(coordTemp): 214(ptr) Variable Function +581(storeTempPre): 15(ptr) Variable Function +588(storeTempPost): 15(ptr) Variable Function + 596(coordTemp): 214(ptr) Variable Function +599(storeTempPre): 8(ptr) Variable Function +606(storeTempPost): 8(ptr) Variable Function + 614(coordTemp): 214(ptr) Variable Function +617(storeTempPre): 22(ptr) Variable Function +624(storeTempPost): 22(ptr) Variable Function + 632(coordTemp): 214(ptr) Variable Function +635(storeTempPre): 8(ptr) Variable Function +642(storeTempPost): 8(ptr) Variable Function + 650(coordTemp): 214(ptr) Variable Function +653(storeTempPre): 15(ptr) Variable Function +660(storeTempPost): 15(ptr) Variable Function + 668(storeTemp): 22(ptr) Variable Function + 679(psout): 678(ptr) Variable Function 77: 74 Load 76(g_tTex1df2) 79: 78(ptr) AccessChain 66 56 80: 6(int) Load 79 - 81: 21(fvec2) ImageRead 77 80 - 83: 74 Load 76(g_tTex1df2) - 84: 78(ptr) AccessChain 66 56 - 85: 6(int) Load 84 - 86: 21(fvec2) ImageRead 83 85 - Store 82(r00) 86 - 91: 88 Load 90(g_tTex1di2) - 92: 78(ptr) AccessChain 66 56 - 93: 6(int) Load 92 - 94: 7(ivec2) ImageRead 91 93 - Store 87(r01) 94 - 99: 96 Load 98(g_tTex1du2) - 100: 78(ptr) AccessChain 66 56 - 101: 6(int) Load 100 - 102: 14(ivec2) ImageRead 99 101 - Store 95(r02) 102 - 107: 104 Load 106(g_tTex2df2) - 108: 68(ptr) AccessChain 66 67 - 109: 7(ivec2) Load 108 - 110: 21(fvec2) ImageRead 107 109 - Store 103(r10) 110 - 115: 112 Load 114(g_tTex2di2) - 116: 68(ptr) AccessChain 66 67 - 117: 7(ivec2) Load 116 - 118: 7(ivec2) ImageRead 115 117 - Store 111(r11) 118 - 123: 120 Load 122(g_tTex2du2) - 124: 68(ptr) AccessChain 66 67 - 125: 7(ivec2) Load 124 - 126: 14(ivec2) ImageRead 123 125 - Store 119(r12) 126 - 131: 128 Load 130(g_tTex3df2) - 134: 133(ptr) AccessChain 66 132 - 135: 62(ivec3) Load 134 - 136: 21(fvec2) ImageRead 131 135 - Store 127(r20) 136 - 141: 138 Load 140(g_tTex3di2) - 142: 133(ptr) AccessChain 66 132 - 143: 62(ivec3) Load 142 - 144: 7(ivec2) ImageRead 141 143 - Store 137(r21) 144 - 149: 146 Load 148(g_tTex3du2) - 150: 133(ptr) AccessChain 66 132 - 151: 62(ivec3) Load 150 - 152: 14(ivec2) ImageRead 149 151 - Store 145(r22) 152 + 81: 42(fvec4) ImageRead 77 80 + 82: 20(float) CompositeExtract 81 0 + 83: 20(float) CompositeExtract 81 1 + 84: 21(fvec2) CompositeConstruct 82 83 + 86: 74 Load 76(g_tTex1df2) + 87: 78(ptr) AccessChain 66 56 + 88: 6(int) Load 87 + 89: 42(fvec4) ImageRead 86 88 + 90: 20(float) CompositeExtract 89 0 + 91: 20(float) CompositeExtract 89 1 + 92: 21(fvec2) CompositeConstruct 90 91 + Store 85(r00) 92 + 97: 94 Load 96(g_tTex1di2) + 98: 78(ptr) AccessChain 66 56 + 99: 6(int) Load 98 + 100: 63(ivec4) ImageRead 97 99 + 101: 6(int) CompositeExtract 100 0 + 102: 6(int) CompositeExtract 100 1 + 103: 7(ivec2) CompositeConstruct 101 102 + Store 93(r01) 103 + 108: 105 Load 107(g_tTex1du2) + 109: 78(ptr) AccessChain 66 56 + 110: 6(int) Load 109 + 112: 111(ivec4) ImageRead 108 110 + 113: 13(int) CompositeExtract 112 0 + 114: 13(int) CompositeExtract 112 1 + 115: 14(ivec2) CompositeConstruct 113 114 + Store 104(r02) 115 + 120: 117 Load 119(g_tTex2df2) + 121: 68(ptr) AccessChain 66 67 + 122: 7(ivec2) Load 121 + 123: 42(fvec4) ImageRead 120 122 + 124: 20(float) CompositeExtract 123 0 + 125: 20(float) CompositeExtract 123 1 + 126: 21(fvec2) CompositeConstruct 124 125 + Store 116(r10) 126 + 131: 128 Load 130(g_tTex2di2) + 132: 68(ptr) AccessChain 66 67 + 133: 7(ivec2) Load 132 + 134: 63(ivec4) ImageRead 131 133 + 135: 6(int) CompositeExtract 134 0 + 136: 6(int) CompositeExtract 134 1 + 137: 7(ivec2) CompositeConstruct 135 136 + Store 127(r11) 137 + 142: 139 Load 141(g_tTex2du2) + 143: 68(ptr) AccessChain 66 67 + 144: 7(ivec2) Load 143 + 145: 111(ivec4) ImageRead 142 144 + 146: 13(int) CompositeExtract 145 0 + 147: 13(int) CompositeExtract 145 1 + 148: 14(ivec2) CompositeConstruct 146 147 + Store 138(r12) 148 + 153: 150 Load 152(g_tTex3df2) 156: 155(ptr) AccessChain 66 154 - 157: 21(fvec2) Load 156 - Store 153(lf2) 157 - 159: 21(fvec2) FunctionCall 40(SomeValue() - Store 158(storeTemp) 159 - 160: 74 Load 76(g_tTex1df2) - 161: 78(ptr) AccessChain 66 56 - 162: 6(int) Load 161 - 163: 21(fvec2) Load 158(storeTemp) - ImageWrite 160 162 163 - 164: 74 Load 76(g_tTex1df2) - 165: 78(ptr) AccessChain 66 56 - 166: 6(int) Load 165 - 167: 21(fvec2) Load 153(lf2) - ImageWrite 164 166 167 - Store 168(storeTemp) 169 - 170: 88 Load 90(g_tTex1di2) - 171: 78(ptr) AccessChain 66 56 - 172: 6(int) Load 171 - 173: 7(ivec2) Load 168(storeTemp) - ImageWrite 170 172 173 - Store 174(storeTemp) 177 - 178: 96 Load 98(g_tTex1du2) - 179: 78(ptr) AccessChain 66 56 - 180: 6(int) Load 179 - 181: 14(ivec2) Load 174(storeTemp) - ImageWrite 178 180 181 - 185: 78(ptr) AccessChain 66 56 - 186: 6(int) Load 185 - Store 184(coordTemp) 186 - 188: 74 Load 76(g_tTex1df2) - 189: 6(int) Load 184(coordTemp) - 190: 21(fvec2) ImageRead 188 189 - Store 187(storeTemp) 190 - 192: 21(fvec2) Load 187(storeTemp) - 193: 21(fvec2) VectorTimesScalar 192 191 - Store 187(storeTemp) 193 - 194: 74 Load 76(g_tTex1df2) - 195: 6(int) Load 184(coordTemp) - 196: 21(fvec2) Load 187(storeTemp) - ImageWrite 194 195 196 - 197: 21(fvec2) Load 187(storeTemp) - Store 182(val1) 197 - 199: 78(ptr) AccessChain 66 56 - 200: 6(int) Load 199 - Store 198(coordTemp) 200 - 202: 74 Load 76(g_tTex1df2) - 203: 6(int) Load 198(coordTemp) - 204: 21(fvec2) ImageRead 202 203 - Store 201(storeTemp) 204 - 206: 21(fvec2) Load 201(storeTemp) - 207: 21(fvec2) CompositeConstruct 205 205 - 208: 21(fvec2) FSub 206 207 - Store 201(storeTemp) 208 - 209: 74 Load 76(g_tTex1df2) - 210: 6(int) Load 198(coordTemp) - 211: 21(fvec2) Load 201(storeTemp) - ImageWrite 209 210 211 - 213: 78(ptr) AccessChain 66 56 - 214: 6(int) Load 213 - Store 212(coordTemp) 214 - 216: 74 Load 76(g_tTex1df2) - 217: 6(int) Load 212(coordTemp) - 218: 21(fvec2) ImageRead 216 217 - Store 215(storeTemp) 218 - 220: 21(fvec2) Load 215(storeTemp) - 221: 21(fvec2) CompositeConstruct 219 219 - 222: 21(fvec2) FAdd 220 221 - Store 215(storeTemp) 222 - 223: 74 Load 76(g_tTex1df2) - 224: 6(int) Load 212(coordTemp) - 225: 21(fvec2) Load 215(storeTemp) - ImageWrite 223 224 225 - 227: 78(ptr) AccessChain 66 56 - 228: 6(int) Load 227 - Store 226(coordTemp) 228 - 230: 88 Load 90(g_tTex1di2) - 231: 6(int) Load 226(coordTemp) - 232: 7(ivec2) ImageRead 230 231 - Store 229(storeTemp) 232 - 233: 7(ivec2) Load 229(storeTemp) - 234: 7(ivec2) CompositeConstruct 132 132 - 235: 7(ivec2) SDiv 233 234 - Store 229(storeTemp) 235 - 236: 88 Load 90(g_tTex1di2) - 237: 6(int) Load 226(coordTemp) - 238: 7(ivec2) Load 229(storeTemp) - ImageWrite 236 237 238 - 240: 78(ptr) AccessChain 66 56 - 241: 6(int) Load 240 - Store 239(coordTemp) 241 - 243: 88 Load 90(g_tTex1di2) - 244: 6(int) Load 239(coordTemp) - 245: 7(ivec2) ImageRead 243 244 - Store 242(storeTemp) 245 - 246: 7(ivec2) Load 242(storeTemp) - 247: 7(ivec2) CompositeConstruct 132 132 - 248: 7(ivec2) SMod 246 247 - Store 242(storeTemp) 248 - 249: 88 Load 90(g_tTex1di2) - 250: 6(int) Load 239(coordTemp) - 251: 7(ivec2) Load 242(storeTemp) - ImageWrite 249 250 251 - 253: 78(ptr) AccessChain 66 56 - 254: 6(int) Load 253 - Store 252(coordTemp) 254 - 256: 88 Load 90(g_tTex1di2) - 257: 6(int) Load 252(coordTemp) - 258: 7(ivec2) ImageRead 256 257 - Store 255(storeTemp) 258 - 260: 7(ivec2) Load 255(storeTemp) - 261: 7(ivec2) CompositeConstruct 259 259 - 262: 7(ivec2) BitwiseAnd 260 261 - Store 255(storeTemp) 262 - 263: 88 Load 90(g_tTex1di2) - 264: 6(int) Load 252(coordTemp) - 265: 7(ivec2) Load 255(storeTemp) + 157: 62(ivec3) Load 156 + 158: 42(fvec4) ImageRead 153 157 + 159: 20(float) CompositeExtract 158 0 + 160: 20(float) CompositeExtract 158 1 + 161: 21(fvec2) CompositeConstruct 159 160 + Store 149(r20) 161 + 166: 163 Load 165(g_tTex3di2) + 167: 155(ptr) AccessChain 66 154 + 168: 62(ivec3) Load 167 + 169: 63(ivec4) ImageRead 166 168 + 170: 6(int) CompositeExtract 169 0 + 171: 6(int) CompositeExtract 169 1 + 172: 7(ivec2) CompositeConstruct 170 171 + Store 162(r21) 172 + 177: 174 Load 176(g_tTex3du2) + 178: 155(ptr) AccessChain 66 154 + 179: 62(ivec3) Load 178 + 180: 111(ivec4) ImageRead 177 179 + 181: 13(int) CompositeExtract 180 0 + 182: 13(int) CompositeExtract 180 1 + 183: 14(ivec2) CompositeConstruct 181 182 + Store 173(r22) 183 + 187: 186(ptr) AccessChain 66 185 + 188: 21(fvec2) Load 187 + Store 184(lf2) 188 + 190: 21(fvec2) FunctionCall 40(SomeValue() + Store 189(storeTemp) 190 + 191: 74 Load 76(g_tTex1df2) + 192: 78(ptr) AccessChain 66 56 + 193: 6(int) Load 192 + 194: 21(fvec2) Load 189(storeTemp) + ImageWrite 191 193 194 + 195: 74 Load 76(g_tTex1df2) + 196: 78(ptr) AccessChain 66 56 + 197: 6(int) Load 196 + 198: 21(fvec2) Load 184(lf2) + ImageWrite 195 197 198 + Store 199(storeTemp) 200 + 201: 94 Load 96(g_tTex1di2) + 202: 78(ptr) AccessChain 66 56 + 203: 6(int) Load 202 + 204: 7(ivec2) Load 199(storeTemp) + ImageWrite 201 203 204 + Store 205(storeTemp) 208 + 209: 105 Load 107(g_tTex1du2) + 210: 78(ptr) AccessChain 66 56 + 211: 6(int) Load 210 + 212: 14(ivec2) Load 205(storeTemp) + ImageWrite 209 211 212 + 216: 78(ptr) AccessChain 66 56 + 217: 6(int) Load 216 + Store 215(coordTemp) 217 + 219: 74 Load 76(g_tTex1df2) + 220: 6(int) Load 215(coordTemp) + 221: 42(fvec4) ImageRead 219 220 + 222: 20(float) CompositeExtract 221 0 + 223: 20(float) CompositeExtract 221 1 + 224: 21(fvec2) CompositeConstruct 222 223 + Store 218(storeTemp) 224 + 226: 21(fvec2) Load 218(storeTemp) + 227: 21(fvec2) VectorTimesScalar 226 225 + Store 218(storeTemp) 227 + 228: 74 Load 76(g_tTex1df2) + 229: 6(int) Load 215(coordTemp) + 230: 21(fvec2) Load 218(storeTemp) + ImageWrite 228 229 230 + 231: 21(fvec2) Load 218(storeTemp) + Store 213(val1) 231 + 233: 78(ptr) AccessChain 66 56 + 234: 6(int) Load 233 + Store 232(coordTemp) 234 + 236: 74 Load 76(g_tTex1df2) + 237: 6(int) Load 232(coordTemp) + 238: 42(fvec4) ImageRead 236 237 + 239: 20(float) CompositeExtract 238 0 + 240: 20(float) CompositeExtract 238 1 + 241: 21(fvec2) CompositeConstruct 239 240 + Store 235(storeTemp) 241 + 243: 21(fvec2) Load 235(storeTemp) + 244: 21(fvec2) CompositeConstruct 242 242 + 245: 21(fvec2) FSub 243 244 + Store 235(storeTemp) 245 + 246: 74 Load 76(g_tTex1df2) + 247: 6(int) Load 232(coordTemp) + 248: 21(fvec2) Load 235(storeTemp) + ImageWrite 246 247 248 + 250: 78(ptr) AccessChain 66 56 + 251: 6(int) Load 250 + Store 249(coordTemp) 251 + 253: 74 Load 76(g_tTex1df2) + 254: 6(int) Load 249(coordTemp) + 255: 42(fvec4) ImageRead 253 254 + 256: 20(float) CompositeExtract 255 0 + 257: 20(float) CompositeExtract 255 1 + 258: 21(fvec2) CompositeConstruct 256 257 + Store 252(storeTemp) 258 + 260: 21(fvec2) Load 252(storeTemp) + 261: 21(fvec2) CompositeConstruct 259 259 + 262: 21(fvec2) FAdd 260 261 + Store 252(storeTemp) 262 + 263: 74 Load 76(g_tTex1df2) + 264: 6(int) Load 249(coordTemp) + 265: 21(fvec2) Load 252(storeTemp) ImageWrite 263 264 265 267: 78(ptr) AccessChain 66 56 268: 6(int) Load 267 Store 266(coordTemp) 268 - 270: 88 Load 90(g_tTex1di2) + 270: 94 Load 96(g_tTex1di2) 271: 6(int) Load 266(coordTemp) - 272: 7(ivec2) ImageRead 270 271 - Store 269(storeTemp) 272 - 274: 7(ivec2) Load 269(storeTemp) - 275: 7(ivec2) CompositeConstruct 273 273 - 276: 7(ivec2) BitwiseOr 274 275 - Store 269(storeTemp) 276 - 277: 88 Load 90(g_tTex1di2) - 278: 6(int) Load 266(coordTemp) - 279: 7(ivec2) Load 269(storeTemp) - ImageWrite 277 278 279 - 281: 78(ptr) AccessChain 66 56 - 282: 6(int) Load 281 - Store 280(coordTemp) 282 - 284: 88 Load 90(g_tTex1di2) - 285: 6(int) Load 280(coordTemp) - 286: 7(ivec2) ImageRead 284 285 - Store 283(storeTemp) 286 - 287: 7(ivec2) Load 283(storeTemp) - 288: 7(ivec2) CompositeConstruct 132 132 - 289: 7(ivec2) ShiftLeftLogical 287 288 - Store 283(storeTemp) 289 - 290: 88 Load 90(g_tTex1di2) - 291: 6(int) Load 280(coordTemp) - 292: 7(ivec2) Load 283(storeTemp) - ImageWrite 290 291 292 - 294: 78(ptr) AccessChain 66 56 - 295: 6(int) Load 294 - Store 293(coordTemp) 295 - 297: 88 Load 90(g_tTex1di2) - 298: 6(int) Load 293(coordTemp) - 299: 7(ivec2) ImageRead 297 298 - Store 296(storeTemp) 299 - 300: 7(ivec2) Load 296(storeTemp) - 301: 7(ivec2) CompositeConstruct 132 132 - 302: 7(ivec2) ShiftRightArithmetic 300 301 - Store 296(storeTemp) 302 - 303: 88 Load 90(g_tTex1di2) - 304: 6(int) Load 293(coordTemp) - 305: 7(ivec2) Load 296(storeTemp) - ImageWrite 303 304 305 - 307: 21(fvec2) FunctionCall 40(SomeValue() - Store 306(storeTemp) 307 - 308: 104 Load 106(g_tTex2df2) - 309: 68(ptr) AccessChain 66 67 - 310: 7(ivec2) Load 309 - 311: 21(fvec2) Load 306(storeTemp) - ImageWrite 308 310 311 - 312: 104 Load 106(g_tTex2df2) - 313: 68(ptr) AccessChain 66 67 - 314: 7(ivec2) Load 313 - 315: 21(fvec2) Load 153(lf2) - ImageWrite 312 314 315 - Store 316(storeTemp) 318 - 319: 112 Load 114(g_tTex2di2) - 320: 68(ptr) AccessChain 66 67 - 321: 7(ivec2) Load 320 - 322: 7(ivec2) Load 316(storeTemp) - ImageWrite 319 321 322 - Store 323(storeTemp) 325 - 326: 120 Load 122(g_tTex2du2) - 327: 68(ptr) AccessChain 66 67 - 328: 7(ivec2) Load 327 - 329: 14(ivec2) Load 323(storeTemp) - ImageWrite 326 328 329 - 331: 21(fvec2) FunctionCall 40(SomeValue() - Store 330(storeTemp) 331 - 332: 128 Load 130(g_tTex3df2) - 333: 133(ptr) AccessChain 66 132 - 334: 62(ivec3) Load 333 - 335: 21(fvec2) Load 330(storeTemp) - ImageWrite 332 334 335 - 336: 128 Load 130(g_tTex3df2) - 337: 133(ptr) AccessChain 66 132 - 338: 62(ivec3) Load 337 - 339: 21(fvec2) Load 153(lf2) - ImageWrite 336 338 339 - Store 340(storeTemp) 342 - 343: 138 Load 140(g_tTex3di2) - 344: 133(ptr) AccessChain 66 132 - 345: 62(ivec3) Load 344 - 346: 7(ivec2) Load 340(storeTemp) - ImageWrite 343 345 346 - Store 347(storeTemp) 349 - 350: 146 Load 148(g_tTex3du2) - 351: 133(ptr) AccessChain 66 132 - 352: 62(ivec3) Load 351 - 353: 14(ivec2) Load 347(storeTemp) - ImageWrite 350 352 353 - 354: 74 Load 76(g_tTex1df2) - 355: 78(ptr) AccessChain 66 56 - 356: 6(int) Load 355 - 357: 21(fvec2) ImageRead 354 356 - Store 358(param) 357 - 359: 21(fvec2) FunctionCall 25(Fn1(vf2;) 358(param) - 360: 88 Load 90(g_tTex1di2) - 361: 78(ptr) AccessChain 66 56 - 362: 6(int) Load 361 - 363: 7(ivec2) ImageRead 360 362 - Store 364(param) 363 - 365: 7(ivec2) FunctionCall 11(Fn1(vi2;) 364(param) - 366: 96 Load 98(g_tTex1du2) - 367: 78(ptr) AccessChain 66 56 - 368: 6(int) Load 367 - 369: 14(ivec2) ImageRead 366 368 - Store 370(param) 369 - 371: 14(ivec2) FunctionCall 18(Fn1(vu2;) 370(param) - 374: 2 FunctionCall 37(Fn2(vf2;) 373(param) - 375: 21(fvec2) Load 373(param) - Store 372(tempArg) 375 - 376: 74 Load 76(g_tTex1df2) - 377: 78(ptr) AccessChain 66 56 - 378: 6(int) Load 377 - 379: 21(fvec2) Load 372(tempArg) - ImageWrite 376 378 379 - 382: 2 FunctionCall 29(Fn2(vi2;) 381(param) - 383: 7(ivec2) Load 381(param) - Store 380(tempArg) 383 - 384: 88 Load 90(g_tTex1di2) - 385: 78(ptr) AccessChain 66 56 - 386: 6(int) Load 385 - 387: 7(ivec2) Load 380(tempArg) + 272: 63(ivec4) ImageRead 270 271 + 273: 6(int) CompositeExtract 272 0 + 274: 6(int) CompositeExtract 272 1 + 275: 7(ivec2) CompositeConstruct 273 274 + Store 269(storeTemp) 275 + 276: 7(ivec2) Load 269(storeTemp) + 277: 7(ivec2) CompositeConstruct 154 154 + 278: 7(ivec2) SDiv 276 277 + Store 269(storeTemp) 278 + 279: 94 Load 96(g_tTex1di2) + 280: 6(int) Load 266(coordTemp) + 281: 7(ivec2) Load 269(storeTemp) + ImageWrite 279 280 281 + 283: 78(ptr) AccessChain 66 56 + 284: 6(int) Load 283 + Store 282(coordTemp) 284 + 286: 94 Load 96(g_tTex1di2) + 287: 6(int) Load 282(coordTemp) + 288: 63(ivec4) ImageRead 286 287 + 289: 6(int) CompositeExtract 288 0 + 290: 6(int) CompositeExtract 288 1 + 291: 7(ivec2) CompositeConstruct 289 290 + Store 285(storeTemp) 291 + 292: 7(ivec2) Load 285(storeTemp) + 293: 7(ivec2) CompositeConstruct 154 154 + 294: 7(ivec2) SMod 292 293 + Store 285(storeTemp) 294 + 295: 94 Load 96(g_tTex1di2) + 296: 6(int) Load 282(coordTemp) + 297: 7(ivec2) Load 285(storeTemp) + ImageWrite 295 296 297 + 299: 78(ptr) AccessChain 66 56 + 300: 6(int) Load 299 + Store 298(coordTemp) 300 + 302: 94 Load 96(g_tTex1di2) + 303: 6(int) Load 298(coordTemp) + 304: 63(ivec4) ImageRead 302 303 + 305: 6(int) CompositeExtract 304 0 + 306: 6(int) CompositeExtract 304 1 + 307: 7(ivec2) CompositeConstruct 305 306 + Store 301(storeTemp) 307 + 309: 7(ivec2) Load 301(storeTemp) + 310: 7(ivec2) CompositeConstruct 308 308 + 311: 7(ivec2) BitwiseAnd 309 310 + Store 301(storeTemp) 311 + 312: 94 Load 96(g_tTex1di2) + 313: 6(int) Load 298(coordTemp) + 314: 7(ivec2) Load 301(storeTemp) + ImageWrite 312 313 314 + 316: 78(ptr) AccessChain 66 56 + 317: 6(int) Load 316 + Store 315(coordTemp) 317 + 319: 94 Load 96(g_tTex1di2) + 320: 6(int) Load 315(coordTemp) + 321: 63(ivec4) ImageRead 319 320 + 322: 6(int) CompositeExtract 321 0 + 323: 6(int) CompositeExtract 321 1 + 324: 7(ivec2) CompositeConstruct 322 323 + Store 318(storeTemp) 324 + 326: 7(ivec2) Load 318(storeTemp) + 327: 7(ivec2) CompositeConstruct 325 325 + 328: 7(ivec2) BitwiseOr 326 327 + Store 318(storeTemp) 328 + 329: 94 Load 96(g_tTex1di2) + 330: 6(int) Load 315(coordTemp) + 331: 7(ivec2) Load 318(storeTemp) + ImageWrite 329 330 331 + 333: 78(ptr) AccessChain 66 56 + 334: 6(int) Load 333 + Store 332(coordTemp) 334 + 336: 94 Load 96(g_tTex1di2) + 337: 6(int) Load 332(coordTemp) + 338: 63(ivec4) ImageRead 336 337 + 339: 6(int) CompositeExtract 338 0 + 340: 6(int) CompositeExtract 338 1 + 341: 7(ivec2) CompositeConstruct 339 340 + Store 335(storeTemp) 341 + 342: 7(ivec2) Load 335(storeTemp) + 343: 7(ivec2) CompositeConstruct 154 154 + 344: 7(ivec2) ShiftLeftLogical 342 343 + Store 335(storeTemp) 344 + 345: 94 Load 96(g_tTex1di2) + 346: 6(int) Load 332(coordTemp) + 347: 7(ivec2) Load 335(storeTemp) + ImageWrite 345 346 347 + 349: 78(ptr) AccessChain 66 56 + 350: 6(int) Load 349 + Store 348(coordTemp) 350 + 352: 94 Load 96(g_tTex1di2) + 353: 6(int) Load 348(coordTemp) + 354: 63(ivec4) ImageRead 352 353 + 355: 6(int) CompositeExtract 354 0 + 356: 6(int) CompositeExtract 354 1 + 357: 7(ivec2) CompositeConstruct 355 356 + Store 351(storeTemp) 357 + 358: 7(ivec2) Load 351(storeTemp) + 359: 7(ivec2) CompositeConstruct 154 154 + 360: 7(ivec2) ShiftRightArithmetic 358 359 + Store 351(storeTemp) 360 + 361: 94 Load 96(g_tTex1di2) + 362: 6(int) Load 348(coordTemp) + 363: 7(ivec2) Load 351(storeTemp) + ImageWrite 361 362 363 + 365: 21(fvec2) FunctionCall 40(SomeValue() + Store 364(storeTemp) 365 + 366: 117 Load 119(g_tTex2df2) + 367: 68(ptr) AccessChain 66 67 + 368: 7(ivec2) Load 367 + 369: 21(fvec2) Load 364(storeTemp) + ImageWrite 366 368 369 + 370: 117 Load 119(g_tTex2df2) + 371: 68(ptr) AccessChain 66 67 + 372: 7(ivec2) Load 371 + 373: 21(fvec2) Load 184(lf2) + ImageWrite 370 372 373 + Store 374(storeTemp) 376 + 377: 128 Load 130(g_tTex2di2) + 378: 68(ptr) AccessChain 66 67 + 379: 7(ivec2) Load 378 + 380: 7(ivec2) Load 374(storeTemp) + ImageWrite 377 379 380 + Store 381(storeTemp) 383 + 384: 139 Load 141(g_tTex2du2) + 385: 68(ptr) AccessChain 66 67 + 386: 7(ivec2) Load 385 + 387: 14(ivec2) Load 381(storeTemp) ImageWrite 384 386 387 - 390: 2 FunctionCall 33(Fn2(vu2;) 389(param) - 391: 14(ivec2) Load 389(param) - Store 388(tempArg) 391 - 392: 96 Load 98(g_tTex1du2) - 393: 78(ptr) AccessChain 66 56 - 394: 6(int) Load 393 - 395: 14(ivec2) Load 388(tempArg) - ImageWrite 392 394 395 - 397: 78(ptr) AccessChain 66 56 - 398: 6(int) Load 397 - Store 396(coordTemp) 398 - 400: 74 Load 76(g_tTex1df2) - 401: 6(int) Load 396(coordTemp) - 402: 21(fvec2) ImageRead 400 401 - Store 399(storeTemp) 402 - 403: 21(fvec2) Load 399(storeTemp) - 405: 21(fvec2) CompositeConstruct 404 404 - 406: 21(fvec2) FAdd 403 405 - Store 399(storeTemp) 406 - 407: 74 Load 76(g_tTex1df2) - 408: 6(int) Load 396(coordTemp) - 409: 21(fvec2) Load 399(storeTemp) - ImageWrite 407 408 409 - 411: 78(ptr) AccessChain 66 56 - 412: 6(int) Load 411 - Store 410(coordTemp) 412 - 414: 88 Load 90(g_tTex1di2) - 415: 6(int) Load 410(coordTemp) - 416: 7(ivec2) ImageRead 414 415 - Store 413(storeTemp) 416 - 417: 7(ivec2) Load 413(storeTemp) - 418: 7(ivec2) CompositeConstruct 67 67 - 419: 7(ivec2) IAdd 417 418 - Store 413(storeTemp) 419 - 420: 88 Load 90(g_tTex1di2) - 421: 6(int) Load 410(coordTemp) - 422: 7(ivec2) Load 413(storeTemp) - ImageWrite 420 421 422 - 424: 78(ptr) AccessChain 66 56 - 425: 6(int) Load 424 - Store 423(coordTemp) 425 - 427: 96 Load 98(g_tTex1du2) - 428: 6(int) Load 423(coordTemp) - 429: 14(ivec2) ImageRead 427 428 - Store 426(storeTemp) 429 - 430: 14(ivec2) Load 426(storeTemp) - 431: 7(ivec2) CompositeConstruct 67 67 - 432: 14(ivec2) IAdd 430 431 - Store 426(storeTemp) 432 - 433: 96 Load 98(g_tTex1du2) - 434: 6(int) Load 423(coordTemp) - 435: 14(ivec2) Load 426(storeTemp) - ImageWrite 433 434 435 - 437: 78(ptr) AccessChain 66 56 - 438: 6(int) Load 437 - Store 436(coordTemp) 438 - 440: 74 Load 76(g_tTex1df2) - 441: 6(int) Load 436(coordTemp) - 442: 21(fvec2) ImageRead 440 441 - Store 439(storeTemp) 442 - 443: 21(fvec2) Load 439(storeTemp) - 444: 21(fvec2) CompositeConstruct 404 404 - 445: 21(fvec2) FSub 443 444 - Store 439(storeTemp) 445 - 446: 74 Load 76(g_tTex1df2) - 447: 6(int) Load 436(coordTemp) - 448: 21(fvec2) Load 439(storeTemp) - ImageWrite 446 447 448 - 450: 78(ptr) AccessChain 66 56 - 451: 6(int) Load 450 - Store 449(coordTemp) 451 - 453: 88 Load 90(g_tTex1di2) - 454: 6(int) Load 449(coordTemp) - 455: 7(ivec2) ImageRead 453 454 - Store 452(storeTemp) 455 - 456: 7(ivec2) Load 452(storeTemp) - 457: 7(ivec2) CompositeConstruct 67 67 - 458: 7(ivec2) ISub 456 457 - Store 452(storeTemp) 458 - 459: 88 Load 90(g_tTex1di2) - 460: 6(int) Load 449(coordTemp) - 461: 7(ivec2) Load 452(storeTemp) - ImageWrite 459 460 461 - 463: 78(ptr) AccessChain 66 56 - 464: 6(int) Load 463 - Store 462(coordTemp) 464 - 466: 96 Load 98(g_tTex1du2) - 467: 6(int) Load 462(coordTemp) - 468: 14(ivec2) ImageRead 466 467 - Store 465(storeTemp) 468 - 469: 14(ivec2) Load 465(storeTemp) - 470: 7(ivec2) CompositeConstruct 67 67 - 471: 14(ivec2) ISub 469 470 - Store 465(storeTemp) 471 - 472: 96 Load 98(g_tTex1du2) - 473: 6(int) Load 462(coordTemp) - 474: 14(ivec2) Load 465(storeTemp) - ImageWrite 472 473 474 - 476: 78(ptr) AccessChain 66 56 - 477: 6(int) Load 476 - Store 475(coordTemp) 477 - 479: 74 Load 76(g_tTex1df2) - 480: 6(int) Load 475(coordTemp) - 481: 21(fvec2) ImageRead 479 480 - Store 478(storeTempPre) 481 - 483: 21(fvec2) Load 478(storeTempPre) - Store 482(storeTempPost) 483 - 484: 21(fvec2) Load 482(storeTempPost) - 485: 21(fvec2) CompositeConstruct 404 404 - 486: 21(fvec2) FAdd 484 485 - Store 482(storeTempPost) 486 - 487: 74 Load 76(g_tTex1df2) - 488: 6(int) Load 475(coordTemp) - 489: 21(fvec2) Load 482(storeTempPost) - ImageWrite 487 488 489 - 491: 78(ptr) AccessChain 66 56 - 492: 6(int) Load 491 - Store 490(coordTemp) 492 - 494: 96 Load 98(g_tTex1du2) - 495: 6(int) Load 490(coordTemp) - 496: 14(ivec2) ImageRead 494 495 - Store 493(storeTempPre) 496 - 498: 14(ivec2) Load 493(storeTempPre) - Store 497(storeTempPost) 498 - 499: 14(ivec2) Load 497(storeTempPost) - 500: 7(ivec2) CompositeConstruct 67 67 - 501: 14(ivec2) ISub 499 500 - Store 497(storeTempPost) 501 - 502: 96 Load 98(g_tTex1du2) - 503: 6(int) Load 490(coordTemp) - 504: 14(ivec2) Load 497(storeTempPost) - ImageWrite 502 503 504 - 506: 78(ptr) AccessChain 66 56 - 507: 6(int) Load 506 - Store 505(coordTemp) 507 - 509: 88 Load 90(g_tTex1di2) - 510: 6(int) Load 505(coordTemp) - 511: 7(ivec2) ImageRead 509 510 - Store 508(storeTempPre) 511 - 513: 7(ivec2) Load 508(storeTempPre) - Store 512(storeTempPost) 513 - 514: 7(ivec2) Load 512(storeTempPost) - 515: 7(ivec2) CompositeConstruct 67 67 - 516: 7(ivec2) IAdd 514 515 - Store 512(storeTempPost) 516 - 517: 88 Load 90(g_tTex1di2) - 518: 6(int) Load 505(coordTemp) - 519: 7(ivec2) Load 512(storeTempPost) - ImageWrite 517 518 519 - 521: 78(ptr) AccessChain 66 56 - 522: 6(int) Load 521 - Store 520(coordTemp) 522 - 524: 74 Load 76(g_tTex1df2) - 525: 6(int) Load 520(coordTemp) - 526: 21(fvec2) ImageRead 524 525 - Store 523(storeTempPre) 526 - 528: 21(fvec2) Load 523(storeTempPre) - Store 527(storeTempPost) 528 - 529: 21(fvec2) Load 527(storeTempPost) - 530: 21(fvec2) CompositeConstruct 404 404 - 531: 21(fvec2) FSub 529 530 - Store 527(storeTempPost) 531 - 532: 74 Load 76(g_tTex1df2) - 533: 6(int) Load 520(coordTemp) - 534: 21(fvec2) Load 527(storeTempPost) - ImageWrite 532 533 534 - 536: 78(ptr) AccessChain 66 56 - 537: 6(int) Load 536 - Store 535(coordTemp) 537 - 539: 88 Load 90(g_tTex1di2) - 540: 6(int) Load 535(coordTemp) - 541: 7(ivec2) ImageRead 539 540 - Store 538(storeTempPre) 541 - 543: 7(ivec2) Load 538(storeTempPre) - Store 542(storeTempPost) 543 - 544: 7(ivec2) Load 542(storeTempPost) - 545: 7(ivec2) CompositeConstruct 67 67 - 546: 7(ivec2) IAdd 544 545 - Store 542(storeTempPost) 546 - 547: 88 Load 90(g_tTex1di2) - 548: 6(int) Load 535(coordTemp) - 549: 7(ivec2) Load 542(storeTempPost) - ImageWrite 547 548 549 - 551: 78(ptr) AccessChain 66 56 - 552: 6(int) Load 551 - Store 550(coordTemp) 552 - 554: 96 Load 98(g_tTex1du2) - 555: 6(int) Load 550(coordTemp) - 556: 14(ivec2) ImageRead 554 555 - Store 553(storeTempPre) 556 - 558: 14(ivec2) Load 553(storeTempPre) - Store 557(storeTempPost) 558 - 559: 14(ivec2) Load 557(storeTempPost) - 560: 7(ivec2) CompositeConstruct 67 67 - 561: 14(ivec2) ISub 559 560 - Store 557(storeTempPost) 561 - 562: 96 Load 98(g_tTex1du2) - 563: 6(int) Load 550(coordTemp) - 564: 14(ivec2) Load 557(storeTempPost) - ImageWrite 562 563 564 - 566: 104 Load 106(g_tTex2df2) - 569: 21(fvec2) ImageRead 566 568 - Store 565(storeTemp) 569 - 570: 74 Load 76(g_tTex1df2) - 571: 21(fvec2) Load 565(storeTemp) - ImageWrite 570 67 571 - 576: 575(ptr) AccessChain 573(psout) 56 - Store 576 574 - 577:43(PS_OUTPUT) Load 573(psout) - ReturnValue 577 + 389: 21(fvec2) FunctionCall 40(SomeValue() + Store 388(storeTemp) 389 + 390: 150 Load 152(g_tTex3df2) + 391: 155(ptr) AccessChain 66 154 + 392: 62(ivec3) Load 391 + 393: 21(fvec2) Load 388(storeTemp) + ImageWrite 390 392 393 + 394: 150 Load 152(g_tTex3df2) + 395: 155(ptr) AccessChain 66 154 + 396: 62(ivec3) Load 395 + 397: 21(fvec2) Load 184(lf2) + ImageWrite 394 396 397 + Store 398(storeTemp) 400 + 401: 163 Load 165(g_tTex3di2) + 402: 155(ptr) AccessChain 66 154 + 403: 62(ivec3) Load 402 + 404: 7(ivec2) Load 398(storeTemp) + ImageWrite 401 403 404 + Store 405(storeTemp) 407 + 408: 174 Load 176(g_tTex3du2) + 409: 155(ptr) AccessChain 66 154 + 410: 62(ivec3) Load 409 + 411: 14(ivec2) Load 405(storeTemp) + ImageWrite 408 410 411 + 412: 74 Load 76(g_tTex1df2) + 413: 78(ptr) AccessChain 66 56 + 414: 6(int) Load 413 + 415: 42(fvec4) ImageRead 412 414 + 416: 20(float) CompositeExtract 415 0 + 417: 20(float) CompositeExtract 415 1 + 418: 21(fvec2) CompositeConstruct 416 417 + Store 419(param) 418 + 420: 21(fvec2) FunctionCall 25(Fn1(vf2;) 419(param) + 421: 94 Load 96(g_tTex1di2) + 422: 78(ptr) AccessChain 66 56 + 423: 6(int) Load 422 + 424: 63(ivec4) ImageRead 421 423 + 425: 6(int) CompositeExtract 424 0 + 426: 6(int) CompositeExtract 424 1 + 427: 7(ivec2) CompositeConstruct 425 426 + Store 428(param) 427 + 429: 7(ivec2) FunctionCall 11(Fn1(vi2;) 428(param) + 430: 105 Load 107(g_tTex1du2) + 431: 78(ptr) AccessChain 66 56 + 432: 6(int) Load 431 + 433: 111(ivec4) ImageRead 430 432 + 434: 13(int) CompositeExtract 433 0 + 435: 13(int) CompositeExtract 433 1 + 436: 14(ivec2) CompositeConstruct 434 435 + Store 437(param) 436 + 438: 14(ivec2) FunctionCall 18(Fn1(vu2;) 437(param) + 441: 2 FunctionCall 37(Fn2(vf2;) 440(param) + 442: 21(fvec2) Load 440(param) + Store 439(tempArg) 442 + 443: 74 Load 76(g_tTex1df2) + 444: 78(ptr) AccessChain 66 56 + 445: 6(int) Load 444 + 446: 21(fvec2) Load 439(tempArg) + ImageWrite 443 445 446 + 449: 2 FunctionCall 29(Fn2(vi2;) 448(param) + 450: 7(ivec2) Load 448(param) + Store 447(tempArg) 450 + 451: 94 Load 96(g_tTex1di2) + 452: 78(ptr) AccessChain 66 56 + 453: 6(int) Load 452 + 454: 7(ivec2) Load 447(tempArg) + ImageWrite 451 453 454 + 457: 2 FunctionCall 33(Fn2(vu2;) 456(param) + 458: 14(ivec2) Load 456(param) + Store 455(tempArg) 458 + 459: 105 Load 107(g_tTex1du2) + 460: 78(ptr) AccessChain 66 56 + 461: 6(int) Load 460 + 462: 14(ivec2) Load 455(tempArg) + ImageWrite 459 461 462 + 464: 78(ptr) AccessChain 66 56 + 465: 6(int) Load 464 + Store 463(coordTemp) 465 + 467: 74 Load 76(g_tTex1df2) + 468: 6(int) Load 463(coordTemp) + 469: 42(fvec4) ImageRead 467 468 + 470: 20(float) CompositeExtract 469 0 + 471: 20(float) CompositeExtract 469 1 + 472: 21(fvec2) CompositeConstruct 470 471 + Store 466(storeTemp) 472 + 473: 21(fvec2) Load 466(storeTemp) + 475: 21(fvec2) CompositeConstruct 474 474 + 476: 21(fvec2) FAdd 473 475 + Store 466(storeTemp) 476 + 477: 74 Load 76(g_tTex1df2) + 478: 6(int) Load 463(coordTemp) + 479: 21(fvec2) Load 466(storeTemp) + ImageWrite 477 478 479 + 481: 78(ptr) AccessChain 66 56 + 482: 6(int) Load 481 + Store 480(coordTemp) 482 + 484: 94 Load 96(g_tTex1di2) + 485: 6(int) Load 480(coordTemp) + 486: 63(ivec4) ImageRead 484 485 + 487: 6(int) CompositeExtract 486 0 + 488: 6(int) CompositeExtract 486 1 + 489: 7(ivec2) CompositeConstruct 487 488 + Store 483(storeTemp) 489 + 490: 7(ivec2) Load 483(storeTemp) + 491: 7(ivec2) CompositeConstruct 67 67 + 492: 7(ivec2) IAdd 490 491 + Store 483(storeTemp) 492 + 493: 94 Load 96(g_tTex1di2) + 494: 6(int) Load 480(coordTemp) + 495: 7(ivec2) Load 483(storeTemp) + ImageWrite 493 494 495 + 497: 78(ptr) AccessChain 66 56 + 498: 6(int) Load 497 + Store 496(coordTemp) 498 + 500: 105 Load 107(g_tTex1du2) + 501: 6(int) Load 496(coordTemp) + 502: 111(ivec4) ImageRead 500 501 + 503: 13(int) CompositeExtract 502 0 + 504: 13(int) CompositeExtract 502 1 + 505: 14(ivec2) CompositeConstruct 503 504 + Store 499(storeTemp) 505 + 506: 14(ivec2) Load 499(storeTemp) + 507: 7(ivec2) CompositeConstruct 67 67 + 508: 14(ivec2) IAdd 506 507 + Store 499(storeTemp) 508 + 509: 105 Load 107(g_tTex1du2) + 510: 6(int) Load 496(coordTemp) + 511: 14(ivec2) Load 499(storeTemp) + ImageWrite 509 510 511 + 513: 78(ptr) AccessChain 66 56 + 514: 6(int) Load 513 + Store 512(coordTemp) 514 + 516: 74 Load 76(g_tTex1df2) + 517: 6(int) Load 512(coordTemp) + 518: 42(fvec4) ImageRead 516 517 + 519: 20(float) CompositeExtract 518 0 + 520: 20(float) CompositeExtract 518 1 + 521: 21(fvec2) CompositeConstruct 519 520 + Store 515(storeTemp) 521 + 522: 21(fvec2) Load 515(storeTemp) + 523: 21(fvec2) CompositeConstruct 474 474 + 524: 21(fvec2) FSub 522 523 + Store 515(storeTemp) 524 + 525: 74 Load 76(g_tTex1df2) + 526: 6(int) Load 512(coordTemp) + 527: 21(fvec2) Load 515(storeTemp) + ImageWrite 525 526 527 + 529: 78(ptr) AccessChain 66 56 + 530: 6(int) Load 529 + Store 528(coordTemp) 530 + 532: 94 Load 96(g_tTex1di2) + 533: 6(int) Load 528(coordTemp) + 534: 63(ivec4) ImageRead 532 533 + 535: 6(int) CompositeExtract 534 0 + 536: 6(int) CompositeExtract 534 1 + 537: 7(ivec2) CompositeConstruct 535 536 + Store 531(storeTemp) 537 + 538: 7(ivec2) Load 531(storeTemp) + 539: 7(ivec2) CompositeConstruct 67 67 + 540: 7(ivec2) ISub 538 539 + Store 531(storeTemp) 540 + 541: 94 Load 96(g_tTex1di2) + 542: 6(int) Load 528(coordTemp) + 543: 7(ivec2) Load 531(storeTemp) + ImageWrite 541 542 543 + 545: 78(ptr) AccessChain 66 56 + 546: 6(int) Load 545 + Store 544(coordTemp) 546 + 548: 105 Load 107(g_tTex1du2) + 549: 6(int) Load 544(coordTemp) + 550: 111(ivec4) ImageRead 548 549 + 551: 13(int) CompositeExtract 550 0 + 552: 13(int) CompositeExtract 550 1 + 553: 14(ivec2) CompositeConstruct 551 552 + Store 547(storeTemp) 553 + 554: 14(ivec2) Load 547(storeTemp) + 555: 7(ivec2) CompositeConstruct 67 67 + 556: 14(ivec2) ISub 554 555 + Store 547(storeTemp) 556 + 557: 105 Load 107(g_tTex1du2) + 558: 6(int) Load 544(coordTemp) + 559: 14(ivec2) Load 547(storeTemp) + ImageWrite 557 558 559 + 561: 78(ptr) AccessChain 66 56 + 562: 6(int) Load 561 + Store 560(coordTemp) 562 + 564: 74 Load 76(g_tTex1df2) + 565: 6(int) Load 560(coordTemp) + 566: 42(fvec4) ImageRead 564 565 + 567: 20(float) CompositeExtract 566 0 + 568: 20(float) CompositeExtract 566 1 + 569: 21(fvec2) CompositeConstruct 567 568 + Store 563(storeTempPre) 569 + 571: 21(fvec2) Load 563(storeTempPre) + Store 570(storeTempPost) 571 + 572: 21(fvec2) Load 570(storeTempPost) + 573: 21(fvec2) CompositeConstruct 474 474 + 574: 21(fvec2) FAdd 572 573 + Store 570(storeTempPost) 574 + 575: 74 Load 76(g_tTex1df2) + 576: 6(int) Load 560(coordTemp) + 577: 21(fvec2) Load 570(storeTempPost) + ImageWrite 575 576 577 + 579: 78(ptr) AccessChain 66 56 + 580: 6(int) Load 579 + Store 578(coordTemp) 580 + 582: 105 Load 107(g_tTex1du2) + 583: 6(int) Load 578(coordTemp) + 584: 111(ivec4) ImageRead 582 583 + 585: 13(int) CompositeExtract 584 0 + 586: 13(int) CompositeExtract 584 1 + 587: 14(ivec2) CompositeConstruct 585 586 + Store 581(storeTempPre) 587 + 589: 14(ivec2) Load 581(storeTempPre) + Store 588(storeTempPost) 589 + 590: 14(ivec2) Load 588(storeTempPost) + 591: 7(ivec2) CompositeConstruct 67 67 + 592: 14(ivec2) ISub 590 591 + Store 588(storeTempPost) 592 + 593: 105 Load 107(g_tTex1du2) + 594: 6(int) Load 578(coordTemp) + 595: 14(ivec2) Load 588(storeTempPost) + ImageWrite 593 594 595 + 597: 78(ptr) AccessChain 66 56 + 598: 6(int) Load 597 + Store 596(coordTemp) 598 + 600: 94 Load 96(g_tTex1di2) + 601: 6(int) Load 596(coordTemp) + 602: 63(ivec4) ImageRead 600 601 + 603: 6(int) CompositeExtract 602 0 + 604: 6(int) CompositeExtract 602 1 + 605: 7(ivec2) CompositeConstruct 603 604 + Store 599(storeTempPre) 605 + 607: 7(ivec2) Load 599(storeTempPre) + Store 606(storeTempPost) 607 + 608: 7(ivec2) Load 606(storeTempPost) + 609: 7(ivec2) CompositeConstruct 67 67 + 610: 7(ivec2) IAdd 608 609 + Store 606(storeTempPost) 610 + 611: 94 Load 96(g_tTex1di2) + 612: 6(int) Load 596(coordTemp) + 613: 7(ivec2) Load 606(storeTempPost) + ImageWrite 611 612 613 + 615: 78(ptr) AccessChain 66 56 + 616: 6(int) Load 615 + Store 614(coordTemp) 616 + 618: 74 Load 76(g_tTex1df2) + 619: 6(int) Load 614(coordTemp) + 620: 42(fvec4) ImageRead 618 619 + 621: 20(float) CompositeExtract 620 0 + 622: 20(float) CompositeExtract 620 1 + 623: 21(fvec2) CompositeConstruct 621 622 + Store 617(storeTempPre) 623 + 625: 21(fvec2) Load 617(storeTempPre) + Store 624(storeTempPost) 625 + 626: 21(fvec2) Load 624(storeTempPost) + 627: 21(fvec2) CompositeConstruct 474 474 + 628: 21(fvec2) FSub 626 627 + Store 624(storeTempPost) 628 + 629: 74 Load 76(g_tTex1df2) + 630: 6(int) Load 614(coordTemp) + 631: 21(fvec2) Load 624(storeTempPost) + ImageWrite 629 630 631 + 633: 78(ptr) AccessChain 66 56 + 634: 6(int) Load 633 + Store 632(coordTemp) 634 + 636: 94 Load 96(g_tTex1di2) + 637: 6(int) Load 632(coordTemp) + 638: 63(ivec4) ImageRead 636 637 + 639: 6(int) CompositeExtract 638 0 + 640: 6(int) CompositeExtract 638 1 + 641: 7(ivec2) CompositeConstruct 639 640 + Store 635(storeTempPre) 641 + 643: 7(ivec2) Load 635(storeTempPre) + Store 642(storeTempPost) 643 + 644: 7(ivec2) Load 642(storeTempPost) + 645: 7(ivec2) CompositeConstruct 67 67 + 646: 7(ivec2) IAdd 644 645 + Store 642(storeTempPost) 646 + 647: 94 Load 96(g_tTex1di2) + 648: 6(int) Load 632(coordTemp) + 649: 7(ivec2) Load 642(storeTempPost) + ImageWrite 647 648 649 + 651: 78(ptr) AccessChain 66 56 + 652: 6(int) Load 651 + Store 650(coordTemp) 652 + 654: 105 Load 107(g_tTex1du2) + 655: 6(int) Load 650(coordTemp) + 656: 111(ivec4) ImageRead 654 655 + 657: 13(int) CompositeExtract 656 0 + 658: 13(int) CompositeExtract 656 1 + 659: 14(ivec2) CompositeConstruct 657 658 + Store 653(storeTempPre) 659 + 661: 14(ivec2) Load 653(storeTempPre) + Store 660(storeTempPost) 661 + 662: 14(ivec2) Load 660(storeTempPost) + 663: 7(ivec2) CompositeConstruct 67 67 + 664: 14(ivec2) ISub 662 663 + Store 660(storeTempPost) 664 + 665: 105 Load 107(g_tTex1du2) + 666: 6(int) Load 650(coordTemp) + 667: 14(ivec2) Load 660(storeTempPost) + ImageWrite 665 666 667 + 669: 117 Load 119(g_tTex2df2) + 672: 42(fvec4) ImageRead 669 671 + 673: 20(float) CompositeExtract 672 0 + 674: 20(float) CompositeExtract 672 1 + 675: 21(fvec2) CompositeConstruct 673 674 + Store 668(storeTemp) 675 + 676: 74 Load 76(g_tTex1df2) + 677: 21(fvec2) Load 668(storeTemp) + ImageWrite 676 67 677 + 682: 681(ptr) AccessChain 679(psout) 56 + Store 682 680 + 683:43(PS_OUTPUT) Load 679(psout) + ReturnValue 683 FunctionEnd diff --git a/Test/baseResults/spv.rw.autoassign.frag.out b/Test/baseResults/spv.rw.autoassign.frag.out index c696c52582..27db3368a2 100644 --- a/Test/baseResults/spv.rw.autoassign.frag.out +++ b/Test/baseResults/spv.rw.autoassign.frag.out @@ -1,15 +1,14 @@ spv.rw.autoassign.frag -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 42 +// Id's are bound by 45 Capability Shader Capability Image1D Capability ImageBuffer 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 39 + EntryPoint Fragment 4 "main" 42 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" @@ -18,15 +17,15 @@ Validation failed Name 10 "@main(" Name 13 "r00" Name 16 "g_tTex1df1" - Name 23 "r01" - Name 26 "g_tBuf1du1" - Name 30 "psout" - Name 39 "@entryPointOutput.Color" + Name 24 "r01" + Name 27 "g_tBuf1du1" + Name 33 "psout" + Name 42 "@entryPointOutput.Color" Decorate 16(g_tTex1df1) DescriptorSet 0 Decorate 16(g_tTex1df1) Binding 20 - Decorate 26(g_tBuf1du1) DescriptorSet 0 - Decorate 26(g_tBuf1du1) Binding 21 - Decorate 39(@entryPointOutput.Color) Location 0 + Decorate 27(g_tBuf1du1) DescriptorSet 0 + Decorate 27(g_tBuf1du1) Binding 21 + Decorate 42(@entryPointOutput.Color) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -39,37 +38,40 @@ Validation failed 16(g_tTex1df1): 15(ptr) Variable UniformConstant 18: TypeInt 32 1 19: 18(int) Constant 0 - 21: TypeInt 32 0 - 22: TypePointer Function 21(int) - 24: TypeImage 21(int) Buffer nonsampled format:R32ui - 25: TypePointer UniformConstant 24 - 26(g_tBuf1du1): 25(ptr) Variable UniformConstant - 29: TypePointer Function 8(PS_OUTPUT) - 31: 6(float) Constant 0 - 32: 7(fvec4) ConstantComposite 31 31 31 31 - 33: TypePointer Function 7(fvec4) - 38: TypePointer Output 7(fvec4) -39(@entryPointOutput.Color): 38(ptr) Variable Output + 22: TypeInt 32 0 + 23: TypePointer Function 22(int) + 25: TypeImage 22(int) Buffer nonsampled format:R32ui + 26: TypePointer UniformConstant 25 + 27(g_tBuf1du1): 26(ptr) Variable UniformConstant + 29: TypeVector 22(int) 4 + 32: TypePointer Function 8(PS_OUTPUT) + 34: 6(float) Constant 0 + 35: 7(fvec4) ConstantComposite 34 34 34 34 + 36: TypePointer Function 7(fvec4) + 41: TypePointer Output 7(fvec4) +42(@entryPointOutput.Color): 41(ptr) Variable Output 4(main): 2 Function None 3 5: Label - 40:8(PS_OUTPUT) FunctionCall 10(@main() - 41: 7(fvec4) CompositeExtract 40 0 - Store 39(@entryPointOutput.Color) 41 + 43:8(PS_OUTPUT) FunctionCall 10(@main() + 44: 7(fvec4) CompositeExtract 43 0 + Store 42(@entryPointOutput.Color) 44 Return FunctionEnd 10(@main():8(PS_OUTPUT) Function None 9 11: Label 13(r00): 12(ptr) Variable Function - 23(r01): 22(ptr) Variable Function - 30(psout): 29(ptr) Variable Function + 24(r01): 23(ptr) Variable Function + 33(psout): 32(ptr) Variable Function 17: 14 Load 16(g_tTex1df1) - 20: 6(float) ImageRead 17 19 - Store 13(r00) 20 - 27: 24 Load 26(g_tBuf1du1) - 28: 21(int) ImageRead 27 19 - Store 23(r01) 28 - 34: 33(ptr) AccessChain 30(psout) 19 - Store 34 32 - 35:8(PS_OUTPUT) Load 30(psout) - ReturnValue 35 + 20: 7(fvec4) ImageRead 17 19 + 21: 6(float) CompositeExtract 20 0 + Store 13(r00) 21 + 28: 25 Load 27(g_tBuf1du1) + 30: 29(ivec4) ImageRead 28 19 + 31: 22(int) CompositeExtract 30 0 + Store 24(r01) 31 + 37: 36(ptr) AccessChain 33(psout) 19 + Store 37 35 + 38:8(PS_OUTPUT) Load 33(psout) + ReturnValue 38 FunctionEnd diff --git a/Test/hlsl.imagefetch-subvec4.comp b/Test/hlsl.imagefetch-subvec4.comp index 2a83dd27ca..a5d70c2c1c 100644 --- a/Test/hlsl.imagefetch-subvec4.comp +++ b/Test/hlsl.imagefetch-subvec4.comp @@ -1,8 +1,41 @@ -Texture3D IN: register(t0); -RWTexture3D OUT: register(u1); +Texture1D i1D: register(t0); +Texture2D i2D: register(t1); +Texture3D i3D: register(t2); +Texture1DArray i1DArray: register(t3); +Texture2DArray i2DArray: register(t4); +Texture2DMS i2DMS: register(t5); +Texture2DMSArray i2DMSArray: register(t6); + +Texture1D ii1D: register(t7); +Texture2D ii2D: register(t8); +Texture3D ii3D: register(t9); +Texture1DArray ii1DArray: register(t10); +Texture2DArray ii2DArray: register(t11); +Texture2DMS ii2DMS: register(t12); +Texture2DMSArray ii2DMSArray: register(t13); + +RWTexture3D OUT: register(u0); [numthreads(8,8,8)] void main(uint3 tid: SV_DispatchThreadID) { - OUT[tid] = IN[tid]; + float f = 0.0; + f += i1D[tid.x]; + f += i2D[tid.xy]; + f += i3D[tid]; + f += i1DArray[tid.xy]; + f += i2DArray[tid]; + f += i2DMS.Load(tid.xy, 1); + f += i2DMSArray.Load(tid, 3); + + int i = 0.0; + i += ii1D[tid.x]; + i += ii2D[tid.xy]; + i += ii3D[tid]; + i += ii1DArray[tid.xy]; + i += ii2DArray[tid]; + i += ii2DMS.Load(tid.xy, 1); + i += ii2DMSArray.Load(tid, 3); + + OUT[tid] = f + float(i); } diff --git a/Test/hlsl.imageload-subvec4.comp b/Test/hlsl.imageload-subvec4.comp new file mode 100644 index 0000000000..b465cdbd9e --- /dev/null +++ b/Test/hlsl.imageload-subvec4.comp @@ -0,0 +1,33 @@ +RWTexture1D i1D: register(u0); +RWTexture2D i2D: register(u1); +RWTexture3D i3D: register(u2); +RWTexture1DArray i1DArray: register(u3); +RWTexture2DArray i2DArray: register(u4); + +RWTexture1D ii1D: register(u5); +RWTexture2D ii2D: register(u6); +RWTexture3D ii3D: register(u7); +RWTexture1DArray ii1DArray: register(u8); +RWTexture2DArray ii2DArray: register(u9); + +RWTexture3D OUT: register(u10); + +[numthreads(8,8,8)] +void main(uint3 tid: SV_DispatchThreadID) +{ + float f = 0.0; + f += i1D[tid.x]; + f += i2D[tid.xy]; + f += i3D[tid]; + f += i1DArray[tid.xy]; + f += i2DArray[tid]; + + int i = 0.0; + i += ii1D[tid.x]; + i += ii2D[tid.xy]; + i += ii3D[tid]; + i += ii1DArray[tid.xy]; + i += ii2DArray[tid]; + + OUT[tid] = f + float(i); +} diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 33deef5164..5e1cbdae62 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -235,6 +235,7 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.groupid.comp", "main"}, {"hlsl.identifier.sample.frag", "main"}, {"hlsl.if.frag", "PixelShaderFunction"}, + {"hlsl.imageload-subvec4.comp", "main"}, {"hlsl.imagefetch-subvec4.comp", "main"}, {"hlsl.implicitBool.frag", "main"}, {"hlsl.inf.vert", "main"}, From 6d5b40f0514582475b158b53353b6f46a2ca88b3 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Fri, 16 Jul 2021 15:07:16 -0600 Subject: [PATCH 199/365] Generate separate stores for partially swizzled memory stores Full vector and fully specified vector swizzle stores are not affected by this change, only partial swizzles ie swizzles with fewer components than the vector being stored to. Previously the vector being stored to loaded and any components not specified in the swizzle were used to create a full store to the vector. While this change generates more SPIR-V instructions, it is necessary for correctness. Fixes #2518. --- SPIRV/SpvBuilder.cpp | 93 +- SPIRV/SpvBuilder.h | 1 + .../hlsl.partialFlattenLocal.vert.out | 99 +- .../hlsl.partialFlattenLocal.vert.out | 84 +- Test/baseResults/hlsl.wavebroadcast.comp.out | 694 +- Test/baseResults/hlsl.waveprefix.comp.out | 710 +- Test/baseResults/hlsl.wavequad.comp.out | 2330 +++-- Test/baseResults/hlsl.wavereduction.comp.out | 1840 ++-- .../remap.uniformarray.everything.frag.out | 37 +- .../remap.uniformarray.none.frag.out | 79 +- Test/baseResults/spv.310.bitcast.frag.out | 406 +- .../spv.320.meshShaderUserDefined.mesh.out | 191 +- Test/baseResults/spv.400.frag.nanclamp.out | 218 +- Test/baseResults/spv.400.frag.out | 218 +- Test/baseResults/spv.Operations.frag.out | 644 +- Test/baseResults/spv.accessChain.frag.out | 313 +- Test/baseResults/spv.bitCast.frag.out | 430 +- Test/baseResults/spv.float16.frag.out | 306 +- Test/baseResults/spv.float16Fetch.frag.out | 7826 +++++++------- Test/baseResults/spv.float32.frag.out | 222 +- Test/baseResults/spv.float64.frag.out | 224 +- Test/baseResults/spv.forLoop.frag.out | 146 +- Test/baseResults/spv.image.frag.out | 971 +- Test/baseResults/spv.int16.amd.frag.out | 464 +- Test/baseResults/spv.int16.frag.out | 204 +- Test/baseResults/spv.int32.frag.out | 226 +- Test/baseResults/spv.int64.frag.out | 361 +- Test/baseResults/spv.int8.frag.out | 204 +- Test/baseResults/spv.intOps.vert.out | 644 +- Test/baseResults/spv.interpOps.frag.out | 215 +- Test/baseResults/spv.memoryQualifier.frag.out | 77 +- .../spv.meshShaderUserDefined.mesh.out | 189 +- Test/baseResults/spv.shaderBallot.comp.out | 527 +- .../spv.subgroupArithmetic.comp.out | 5074 +++++----- Test/baseResults/spv.subgroupBallot.comp.out | 728 +- .../spv.subgroupClustered.comp.out | 1716 ++-- ...v.subgroupExtendedTypesArithmetic.comp.out | 8997 +++++++++-------- .../spv.subgroupExtendedTypesBallot.comp.out | 967 +- ...pv.subgroupExtendedTypesClustered.comp.out | 3051 +++--- ....subgroupExtendedTypesPartitioned.comp.out | 3251 +++--- .../spv.subgroupExtendedTypesQuad.comp.out | 1878 ++-- .../spv.subgroupExtendedTypesShuffle.comp.out | 1027 +- ...groupExtendedTypesShuffleRelative.comp.out | 1027 +- .../spv.subgroupPartitioned.comp.out | 5528 +++++----- Test/baseResults/spv.subgroupQuad.comp.out | 1416 +-- Test/baseResults/spv.subgroupShuffle.comp.out | 777 +- .../spv.subgroupShuffleRelative.comp.out | 777 +- Test/baseResults/spv.swizzle.frag.out | 235 +- Test/baseResults/spv.uniformArray.frag.out | 79 +- Test/baseResults/spv.vulkan110.int16.frag.out | 204 +- 50 files changed, 31337 insertions(+), 26588 deletions(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 0482c5a9a3..6751dec215 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -743,6 +743,26 @@ Id Builder::getContainedTypeId(Id typeId, int member) const } } +// Figure out the final resulting type of the access chain. +Id Builder::getResultingAccessChainType() const +{ + assert(accessChain.base != NoResult); + Id typeId = getTypeId(accessChain.base); + + assert(isPointerType(typeId)); + typeId = getContainedTypeId(typeId); + + for (int i = 0; i < (int)accessChain.indexChain.size(); ++i) { + if (isStructType(typeId)) { + assert(isConstantScalar(accessChain.indexChain[i])); + typeId = getContainedTypeId(typeId, getConstantScalar(accessChain.indexChain[i])); + } else + typeId = getContainedTypeId(typeId, accessChain.indexChain[i]); + } + + return typeId; +} + // Return the immediately contained type of a given composite type. Id Builder::getContainedTypeId(Id typeId) const { @@ -1585,16 +1605,7 @@ Id Builder::createLoad(Id lValue, spv::Decoration precision, spv::MemoryAccessMa Id Builder::createAccessChain(StorageClass storageClass, Id base, const std::vector& offsets) { // Figure out the final resulting type. - spv::Id typeId = getTypeId(base); - assert(isPointerType(typeId) && offsets.size() > 0); - typeId = getContainedTypeId(typeId); - for (int i = 0; i < (int)offsets.size(); ++i) { - if (isStructType(typeId)) { - assert(isConstantScalar(offsets[i])); - typeId = getContainedTypeId(typeId, getConstantScalar(offsets[i])); - } else - typeId = getContainedTypeId(typeId, offsets[i]); - } + Id typeId = getResultingAccessChainType(); typeId = makePointer(storageClass, typeId); // Make the instruction @@ -2794,28 +2805,58 @@ void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAcce assert(accessChain.isRValue == false); transferAccessChainSwizzle(true); - Id base = collapseAccessChain(); - addDecoration(base, nonUniform); - Id source = rvalue; + // If a swizzle exists and is not full and is not dynamic, then the swizzle will be broken into individual stores. + if (accessChain.swizzle.size() > 0 && + getNumTypeComponents(getResultingAccessChainType()) != (int)accessChain.swizzle.size() && + accessChain.component == NoResult) { + for (unsigned int i = 0; i < accessChain.swizzle.size(); ++i) { + accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle[i])); - // dynamic component should be gone - assert(accessChain.component == NoResult); + Id base = collapseAccessChain(); + addDecoration(base, nonUniform); - // If swizzle still exists, it is out-of-order or not full, we must load the target vector, - // extract and insert elements to perform writeMask and/or swizzle. - if (accessChain.swizzle.size() > 0) { - Id tempBaseId = createLoad(base, spv::NoPrecision); - source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle); - } + accessChain.indexChain.pop_back(); + accessChain.instr = NoResult; + + // dynamic component should be gone + assert(accessChain.component == NoResult); + + Id source = createCompositeExtract(rvalue, getContainedTypeId(getTypeId(rvalue)), i); + + // take LSB of alignment + alignment = alignment & ~(alignment & (alignment-1)); + if (getStorageClass(base) == StorageClassPhysicalStorageBufferEXT) { + memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask); + } - // take LSB of alignment - alignment = alignment & ~(alignment & (alignment-1)); - if (getStorageClass(base) == StorageClassPhysicalStorageBufferEXT) { - memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask); + createStore(source, base, memoryAccess, scope, alignment); + } } + else { + Id base = collapseAccessChain(); + addDecoration(base, nonUniform); + + Id source = rvalue; + + // dynamic component should be gone + assert(accessChain.component == NoResult); - createStore(source, base, memoryAccess, scope, alignment); + // If swizzle still exists, it may be out-of-order, we must load the target vector, + // extract and insert elements to perform writeMask and/or swizzle. + if (accessChain.swizzle.size() > 0) { + Id tempBaseId = createLoad(base, spv::NoPrecision); + source = createLvalueSwizzle(getTypeId(tempBaseId), tempBaseId, source, accessChain.swizzle); + } + + // take LSB of alignment + alignment = alignment & ~(alignment & (alignment-1)); + if (getStorageClass(base) == StorageClassPhysicalStorageBufferEXT) { + memoryAccess = (spv::MemoryAccessMask)(memoryAccess | spv::MemoryAccessAlignedMask); + } + + createStore(source, base, memoryAccess, scope, alignment); + } } // Comments in header diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 73847e1d1c..251b9ee823 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -202,6 +202,7 @@ class Builder { StorageClass getTypeStorageClass(Id typeId) const { return module.getStorageClass(typeId); } ImageFormat getImageTypeFormat(Id typeId) const { return (ImageFormat)module.getInstruction(typeId)->getImmediateOperand(6); } + Id getResultingAccessChainType() const; bool isPointer(Id resultId) const { return isPointerType(getTypeId(resultId)); } bool isScalar(Id resultId) const { return isScalarType(getTypeId(resultId)); } diff --git a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out index 824aa49b8e..f45a76881f 100644 --- a/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out +++ b/Test/baseLegalResults/hlsl.partialFlattenLocal.vert.out @@ -1,18 +1,18 @@ hlsl.partialFlattenLocal.vert // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 159 +// Id's are bound by 164 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 83 86 + EntryPoint Vertex 4 "main" 86 89 Source HLSL 500 Name 4 "main" - Name 83 "pos" - Name 86 "@entryPointOutput" - Decorate 83(pos) Location 0 - Decorate 86(@entryPointOutput) BuiltIn Position + Name 86 "pos" + Name 89 "@entryPointOutput" + Decorate 86(pos) Location 0 + Decorate 89(@entryPointOutput) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -33,49 +33,54 @@ hlsl.partialFlattenLocal.vert 37: 6(float) Constant 1065353216 38: 18(fvec2) ConstantComposite 32 37 39: TypePointer Function 18(fvec2) + 42: TypePointer Function 6(float) 54: TypeBool - 82: TypePointer Input 7(fvec4) - 83(pos): 82(ptr) Variable Input - 85: TypePointer Output 7(fvec4) -86(@entryPointOutput): 85(ptr) Variable Output - 131: TypePointer Function 17 - 133: TypePointer Function 20 + 64: 15(int) Constant 0 + 67: 15(int) Constant 1 + 85: TypePointer Input 7(fvec4) + 86(pos): 85(ptr) Variable Input + 88: TypePointer Output 7(fvec4) +89(@entryPointOutput): 88(ptr) Variable Output + 135: TypePointer Function 17 + 137: TypePointer Function 20 4(main): 2 Function None 3 5: Label - 134: 133(ptr) Variable Function - 132: 131(ptr) Variable Function - 84: 7(fvec4) Load 83(pos) - 137: 34(ptr) AccessChain 132 25 - Store 137 33 - 138: 39(ptr) AccessChain 134 25 - Store 138 38 - Branch 101 - 101: Label - 158: 21(int) Phi 25 5 119 105 - 104: 54(bool) SLessThan 158 31 - LoopMerge 120 105 None - BranchConditional 104 105 120 - 105: Label - 139: 39(ptr) AccessChain 134 158 - 109: 18(fvec2) Load 139 - 140: 34(ptr) AccessChain 132 158 - 111: 14(fvec3) Load 140 - 112: 18(fvec2) VectorShuffle 111 111 0 1 - 113: 18(fvec2) FAdd 112 109 - 141: 34(ptr) AccessChain 132 158 - 115: 14(fvec3) Load 141 - 116: 14(fvec3) VectorShuffle 115 113 3 4 2 - Store 141 116 - 119: 21(int) IAdd 158 31 - Branch 101 - 120: Label - 143: 17 Load 132 - 157: 14(fvec3) CompositeExtract 143 0 - 125: 6(float) CompositeExtract 157 0 - 126: 6(float) CompositeExtract 157 1 - 127: 6(float) CompositeExtract 157 2 - 128: 7(fvec4) CompositeConstruct 125 126 127 32 - 129: 7(fvec4) FAdd 84 128 - Store 86(@entryPointOutput) 129 + 138: 137(ptr) Variable Function + 136: 135(ptr) Variable Function + 87: 7(fvec4) Load 86(pos) + 141: 34(ptr) AccessChain 136 25 + Store 141 33 + 142: 39(ptr) AccessChain 138 25 + Store 142 38 + Branch 104 + 104: Label + 163: 21(int) Phi 25 5 123 108 + 107: 54(bool) SLessThan 163 31 + LoopMerge 124 108 None + BranchConditional 107 108 124 + 108: Label + 143: 39(ptr) AccessChain 138 163 + 112: 18(fvec2) Load 143 + 144: 34(ptr) AccessChain 136 163 + 114: 14(fvec3) Load 144 + 115: 18(fvec2) VectorShuffle 114 114 0 1 + 116: 18(fvec2) FAdd 115 112 + 145: 42(ptr) AccessChain 136 163 64 + 118: 6(float) CompositeExtract 116 0 + Store 145 118 + 146: 42(ptr) AccessChain 136 163 67 + 120: 6(float) CompositeExtract 116 1 + Store 146 120 + 123: 21(int) IAdd 163 31 + Branch 104 + 124: Label + 148: 17 Load 136 + 162: 14(fvec3) CompositeExtract 148 0 + 129: 6(float) CompositeExtract 162 0 + 130: 6(float) CompositeExtract 162 1 + 131: 6(float) CompositeExtract 162 2 + 132: 7(fvec4) CompositeConstruct 129 130 131 32 + 133: 7(fvec4) FAdd 87 132 + Store 89(@entryPointOutput) 133 Return FunctionEnd diff --git a/Test/baseResults/hlsl.partialFlattenLocal.vert.out b/Test/baseResults/hlsl.partialFlattenLocal.vert.out index 12a60657dd..7bcc8791d5 100644 --- a/Test/baseResults/hlsl.partialFlattenLocal.vert.out +++ b/Test/baseResults/hlsl.partialFlattenLocal.vert.out @@ -238,12 +238,12 @@ Shader version: 500 // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 90 +// Id's are bound by 93 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 83 86 + EntryPoint Vertex 4 "main" 86 89 Source HLSL 500 Name 4 "main" Name 11 "@main(vf4;" @@ -257,15 +257,15 @@ Shader version: 500 Name 24 "packed" Name 27 "tex" Name 47 "i" - Name 69 "packed2" - Name 81 "pos" - Name 83 "pos" - Name 86 "@entryPointOutput" - Name 87 "param" + Name 72 "packed2" + Name 84 "pos" + Name 86 "pos" + Name 89 "@entryPointOutput" + Name 90 "param" Decorate 27(tex) DescriptorSet 0 Decorate 27(tex) Binding 0 - Decorate 83(pos) Location 0 - Decorate 86(@entryPointOutput) BuiltIn Position + Decorate 86(pos) Location 0 + Decorate 89(@entryPointOutput) BuiltIn Position 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -300,20 +300,22 @@ Shader version: 500 44: 21(int) Constant 4 45: TypePointer Function 21(int) 54: TypeBool - 82: TypePointer Input 7(fvec4) - 83(pos): 82(ptr) Variable Input - 85: TypePointer Output 7(fvec4) -86(@entryPointOutput): 85(ptr) Variable Output + 64: 15(int) Constant 0 + 67: 15(int) Constant 1 + 85: TypePointer Input 7(fvec4) + 86(pos): 85(ptr) Variable Input + 88: TypePointer Output 7(fvec4) +89(@entryPointOutput): 88(ptr) Variable Output 4(main): 2 Function None 3 5: Label - 81(pos): 8(ptr) Variable Function - 87(param): 8(ptr) Variable Function - 84: 7(fvec4) Load 83(pos) - Store 81(pos) 84 - 88: 7(fvec4) Load 81(pos) - Store 87(param) 88 - 89: 7(fvec4) FunctionCall 11(@main(vf4;) 87(param) - Store 86(@entryPointOutput) 89 + 84(pos): 8(ptr) Variable Function + 90(param): 8(ptr) Variable Function + 87: 7(fvec4) Load 86(pos) + Store 84(pos) 87 + 91: 7(fvec4) Load 84(pos) + Store 90(param) 91 + 92: 7(fvec4) FunctionCall 11(@main(vf4;) 90(param) + Store 89(@entryPointOutput) 92 Return FunctionEnd 11(@main(vf4;): 7(fvec4) Function None 9 @@ -321,7 +323,7 @@ Shader version: 500 12: Label 24(packed): 23(ptr) Variable Function 47(i): 45(ptr) Variable Function - 69(packed2): 23(ptr) Variable Function + 72(packed2): 23(ptr) Variable Function 28: 13 Load 27(tex) 30: 29(ptr) AccessChain 24(packed) 25 Store 30 28 @@ -351,26 +353,28 @@ Shader version: 500 61: 14(fvec3) Load 60 62: 18(fvec2) VectorShuffle 61 61 0 1 63: 18(fvec2) FAdd 62 59 - 64: 34(ptr) AccessChain 24(packed) 31 56 - 65: 14(fvec3) Load 64 - 66: 14(fvec3) VectorShuffle 65 63 3 4 2 - Store 64 66 + 65: 42(ptr) AccessChain 24(packed) 31 56 64 + 66: 6(float) CompositeExtract 63 0 + Store 65 66 + 68: 42(ptr) AccessChain 24(packed) 31 56 67 + 69: 6(float) CompositeExtract 63 1 + Store 68 69 Branch 51 51: Label - 67: 21(int) Load 47(i) - 68: 21(int) IAdd 67 31 - Store 47(i) 68 + 70: 21(int) Load 47(i) + 71: 21(int) IAdd 70 31 + Store 47(i) 71 Branch 48 50: Label - 70: 22(Packed) Load 24(packed) - Store 69(packed2) 70 - 71: 7(fvec4) Load 10(pos) - 72: 34(ptr) AccessChain 69(packed2) 31 25 - 73: 14(fvec3) Load 72 - 74: 6(float) CompositeExtract 73 0 - 75: 6(float) CompositeExtract 73 1 - 76: 6(float) CompositeExtract 73 2 - 77: 7(fvec4) CompositeConstruct 74 75 76 32 - 78: 7(fvec4) FAdd 71 77 - ReturnValue 78 + 73: 22(Packed) Load 24(packed) + Store 72(packed2) 73 + 74: 7(fvec4) Load 10(pos) + 75: 34(ptr) AccessChain 72(packed2) 31 25 + 76: 14(fvec3) Load 75 + 77: 6(float) CompositeExtract 76 0 + 78: 6(float) CompositeExtract 76 1 + 79: 6(float) CompositeExtract 76 2 + 80: 7(fvec4) CompositeConstruct 77 78 79 32 + 81: 7(fvec4) FAdd 74 80 + ReturnValue 81 FunctionEnd diff --git a/Test/baseResults/hlsl.wavebroadcast.comp.out b/Test/baseResults/hlsl.wavebroadcast.comp.out index 573195d135..01bc953da6 100644 --- a/Test/baseResults/hlsl.wavebroadcast.comp.out +++ b/Test/baseResults/hlsl.wavebroadcast.comp.out @@ -2299,7 +2299,7 @@ local_size = (32, 16, 1) // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 359 +// Id's are bound by 393 Capability Shader Capability Float64 @@ -2308,7 +2308,7 @@ local_size = (32, 16, 1) Capability GroupNonUniformShuffle 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "CSMain" 354 + EntryPoint GLCompute 4 "CSMain" 388 ExecutionMode 4 LocalSize 32 16 1 Source HLSL 500 Name 4 "CSMain" @@ -2322,9 +2322,9 @@ local_size = (32, 16, 1) Name 22 "data" MemberName 22(data) 0 "@data" Name 24 "data" - Name 352 "dti" - Name 354 "dti" - Name 356 "param" + Name 386 "dti" + Name 388 "dti" + Name 390 "param" MemberDecorate 20(Types) 0 Offset 0 MemberDecorate 20(Types) 1 Offset 16 MemberDecorate 20(Types) 2 Offset 32 @@ -2334,7 +2334,7 @@ local_size = (32, 16, 1) Decorate 22(data) BufferBlock Decorate 24(data) DescriptorSet 0 Decorate 24(data) Binding 0 - Decorate 354(dti) BuiltIn GlobalInvocationId + Decorate 388(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -2361,32 +2361,34 @@ local_size = (32, 16, 1) 36: 6(int) Constant 3 43: TypePointer Uniform 6(int) 52: TypeVector 6(int) 2 - 73: 14(int) Constant 1 - 76: TypePointer Uniform 15(ivec4) - 85: TypePointer Uniform 14(int) - 94: TypeVector 14(int) 2 - 106: TypeVector 14(int) 3 - 116: 14(int) Constant 2 - 119: TypePointer Uniform 17(fvec4) - 128: TypePointer Uniform 16(float) - 137: TypeVector 16(float) 2 - 149: TypeVector 16(float) 3 - 159: 14(int) Constant 3 - 162: TypePointer Uniform 19(f64vec4) - 171: TypePointer Uniform 18(float64_t) - 180: TypeVector 18(float64_t) 2 - 192: TypeVector 18(float64_t) 3 - 353: TypePointer Input 7(ivec3) - 354(dti): 353(ptr) Variable Input + 59: 6(int) Constant 1 + 74: 6(int) Constant 2 + 79: 14(int) Constant 1 + 82: TypePointer Uniform 15(ivec4) + 91: TypePointer Uniform 14(int) + 100: TypeVector 14(int) 2 + 113: TypeVector 14(int) 3 + 126: 14(int) Constant 2 + 129: TypePointer Uniform 17(fvec4) + 138: TypePointer Uniform 16(float) + 147: TypeVector 16(float) 2 + 160: TypeVector 16(float) 3 + 173: 14(int) Constant 3 + 176: TypePointer Uniform 19(f64vec4) + 185: TypePointer Uniform 18(float64_t) + 194: TypeVector 18(float64_t) 2 + 207: TypeVector 18(float64_t) 3 + 387: TypePointer Input 7(ivec3) + 388(dti): 387(ptr) Variable Input 4(CSMain): 2 Function None 3 5: Label - 352(dti): 8(ptr) Variable Function - 356(param): 8(ptr) Variable Function - 355: 7(ivec3) Load 354(dti) - Store 352(dti) 355 - 357: 7(ivec3) Load 352(dti) - Store 356(param) 357 - 358: 2 FunctionCall 11(@CSMain(vu3;) 356(param) + 386(dti): 8(ptr) Variable Function + 390(param): 8(ptr) Variable Function + 389: 7(ivec3) Load 388(dti) + Store 386(dti) 389 + 391: 7(ivec3) Load 386(dti) + Store 390(param) 391 + 392: 2 FunctionCall 11(@CSMain(vu3;) 390(param) Return FunctionEnd 11(@CSMain(vu3;): 2 Function None 9 @@ -2418,315 +2420,371 @@ local_size = (32, 16, 1) 54: 13(ivec4) Load 53 55: 52(ivec2) VectorShuffle 54 54 0 1 56: 52(ivec2) GroupNonUniformShuffle 36 55 35 - 57: 32(ptr) AccessChain 24(data) 25 49 25 - 58: 13(ivec4) Load 57 - 59: 13(ivec4) VectorShuffle 58 56 4 5 2 3 - Store 57 59 - 60: 27(ptr) AccessChain 10(dti) 26 - 61: 6(int) Load 60 + 57: 43(ptr) AccessChain 24(data) 25 49 25 26 + 58: 6(int) CompositeExtract 56 0 + Store 57 58 + 60: 43(ptr) AccessChain 24(data) 25 49 25 59 + 61: 6(int) CompositeExtract 56 1 + Store 60 61 62: 27(ptr) AccessChain 10(dti) 26 63: 6(int) Load 62 - 64: 32(ptr) AccessChain 24(data) 25 63 25 - 65: 13(ivec4) Load 64 - 66: 7(ivec3) VectorShuffle 65 65 0 1 2 - 67: 7(ivec3) GroupNonUniformShuffle 36 66 35 - 68: 32(ptr) AccessChain 24(data) 25 61 25 - 69: 13(ivec4) Load 68 - 70: 13(ivec4) VectorShuffle 69 67 4 5 6 3 - Store 68 70 - 71: 27(ptr) AccessChain 10(dti) 26 - 72: 6(int) Load 71 - 74: 27(ptr) AccessChain 10(dti) 26 - 75: 6(int) Load 74 - 77: 76(ptr) AccessChain 24(data) 25 75 73 - 78: 15(ivec4) Load 77 - 79: 15(ivec4) GroupNonUniformShuffle 36 78 35 - 80: 76(ptr) AccessChain 24(data) 25 72 73 - Store 80 79 - 81: 27(ptr) AccessChain 10(dti) 26 - 82: 6(int) Load 81 - 83: 27(ptr) AccessChain 10(dti) 26 - 84: 6(int) Load 83 - 86: 85(ptr) AccessChain 24(data) 25 84 73 26 - 87: 14(int) Load 86 - 88: 14(int) GroupNonUniformShuffle 36 87 35 - 89: 85(ptr) AccessChain 24(data) 25 82 73 26 - Store 89 88 - 90: 27(ptr) AccessChain 10(dti) 26 - 91: 6(int) Load 90 - 92: 27(ptr) AccessChain 10(dti) 26 - 93: 6(int) Load 92 - 95: 76(ptr) AccessChain 24(data) 25 93 73 - 96: 15(ivec4) Load 95 - 97: 94(ivec2) VectorShuffle 96 96 0 1 - 98: 94(ivec2) GroupNonUniformShuffle 36 97 35 - 99: 76(ptr) AccessChain 24(data) 25 91 73 - 100: 15(ivec4) Load 99 - 101: 15(ivec4) VectorShuffle 100 98 4 5 2 3 - Store 99 101 - 102: 27(ptr) AccessChain 10(dti) 26 - 103: 6(int) Load 102 - 104: 27(ptr) AccessChain 10(dti) 26 - 105: 6(int) Load 104 - 107: 76(ptr) AccessChain 24(data) 25 105 73 - 108: 15(ivec4) Load 107 - 109: 106(ivec3) VectorShuffle 108 108 0 1 2 - 110: 106(ivec3) GroupNonUniformShuffle 36 109 35 - 111: 76(ptr) AccessChain 24(data) 25 103 73 - 112: 15(ivec4) Load 111 - 113: 15(ivec4) VectorShuffle 112 110 4 5 6 3 - Store 111 113 - 114: 27(ptr) AccessChain 10(dti) 26 - 115: 6(int) Load 114 - 117: 27(ptr) AccessChain 10(dti) 26 - 118: 6(int) Load 117 - 120: 119(ptr) AccessChain 24(data) 25 118 116 - 121: 17(fvec4) Load 120 - 122: 17(fvec4) GroupNonUniformShuffle 36 121 35 - 123: 119(ptr) AccessChain 24(data) 25 115 116 - Store 123 122 + 64: 27(ptr) AccessChain 10(dti) 26 + 65: 6(int) Load 64 + 66: 32(ptr) AccessChain 24(data) 25 65 25 + 67: 13(ivec4) Load 66 + 68: 7(ivec3) VectorShuffle 67 67 0 1 2 + 69: 7(ivec3) GroupNonUniformShuffle 36 68 35 + 70: 43(ptr) AccessChain 24(data) 25 63 25 26 + 71: 6(int) CompositeExtract 69 0 + Store 70 71 + 72: 43(ptr) AccessChain 24(data) 25 63 25 59 + 73: 6(int) CompositeExtract 69 1 + Store 72 73 + 75: 43(ptr) AccessChain 24(data) 25 63 25 74 + 76: 6(int) CompositeExtract 69 2 + Store 75 76 + 77: 27(ptr) AccessChain 10(dti) 26 + 78: 6(int) Load 77 + 80: 27(ptr) AccessChain 10(dti) 26 + 81: 6(int) Load 80 + 83: 82(ptr) AccessChain 24(data) 25 81 79 + 84: 15(ivec4) Load 83 + 85: 15(ivec4) GroupNonUniformShuffle 36 84 35 + 86: 82(ptr) AccessChain 24(data) 25 78 79 + Store 86 85 + 87: 27(ptr) AccessChain 10(dti) 26 + 88: 6(int) Load 87 + 89: 27(ptr) AccessChain 10(dti) 26 + 90: 6(int) Load 89 + 92: 91(ptr) AccessChain 24(data) 25 90 79 26 + 93: 14(int) Load 92 + 94: 14(int) GroupNonUniformShuffle 36 93 35 + 95: 91(ptr) AccessChain 24(data) 25 88 79 26 + Store 95 94 + 96: 27(ptr) AccessChain 10(dti) 26 + 97: 6(int) Load 96 + 98: 27(ptr) AccessChain 10(dti) 26 + 99: 6(int) Load 98 + 101: 82(ptr) AccessChain 24(data) 25 99 79 + 102: 15(ivec4) Load 101 + 103: 100(ivec2) VectorShuffle 102 102 0 1 + 104: 100(ivec2) GroupNonUniformShuffle 36 103 35 + 105: 91(ptr) AccessChain 24(data) 25 97 79 26 + 106: 14(int) CompositeExtract 104 0 + Store 105 106 + 107: 91(ptr) AccessChain 24(data) 25 97 79 59 + 108: 14(int) CompositeExtract 104 1 + Store 107 108 + 109: 27(ptr) AccessChain 10(dti) 26 + 110: 6(int) Load 109 + 111: 27(ptr) AccessChain 10(dti) 26 + 112: 6(int) Load 111 + 114: 82(ptr) AccessChain 24(data) 25 112 79 + 115: 15(ivec4) Load 114 + 116: 113(ivec3) VectorShuffle 115 115 0 1 2 + 117: 113(ivec3) GroupNonUniformShuffle 36 116 35 + 118: 91(ptr) AccessChain 24(data) 25 110 79 26 + 119: 14(int) CompositeExtract 117 0 + Store 118 119 + 120: 91(ptr) AccessChain 24(data) 25 110 79 59 + 121: 14(int) CompositeExtract 117 1 + Store 120 121 + 122: 91(ptr) AccessChain 24(data) 25 110 79 74 + 123: 14(int) CompositeExtract 117 2 + Store 122 123 124: 27(ptr) AccessChain 10(dti) 26 125: 6(int) Load 124 - 126: 27(ptr) AccessChain 10(dti) 26 - 127: 6(int) Load 126 - 129: 128(ptr) AccessChain 24(data) 25 127 116 26 - 130: 16(float) Load 129 - 131: 16(float) GroupNonUniformShuffle 36 130 35 - 132: 128(ptr) AccessChain 24(data) 25 125 116 26 - Store 132 131 - 133: 27(ptr) AccessChain 10(dti) 26 - 134: 6(int) Load 133 - 135: 27(ptr) AccessChain 10(dti) 26 - 136: 6(int) Load 135 - 138: 119(ptr) AccessChain 24(data) 25 136 116 - 139: 17(fvec4) Load 138 - 140: 137(fvec2) VectorShuffle 139 139 0 1 - 141: 137(fvec2) GroupNonUniformShuffle 36 140 35 - 142: 119(ptr) AccessChain 24(data) 25 134 116 - 143: 17(fvec4) Load 142 - 144: 17(fvec4) VectorShuffle 143 141 4 5 2 3 - Store 142 144 + 127: 27(ptr) AccessChain 10(dti) 26 + 128: 6(int) Load 127 + 130: 129(ptr) AccessChain 24(data) 25 128 126 + 131: 17(fvec4) Load 130 + 132: 17(fvec4) GroupNonUniformShuffle 36 131 35 + 133: 129(ptr) AccessChain 24(data) 25 125 126 + Store 133 132 + 134: 27(ptr) AccessChain 10(dti) 26 + 135: 6(int) Load 134 + 136: 27(ptr) AccessChain 10(dti) 26 + 137: 6(int) Load 136 + 139: 138(ptr) AccessChain 24(data) 25 137 126 26 + 140: 16(float) Load 139 + 141: 16(float) GroupNonUniformShuffle 36 140 35 + 142: 138(ptr) AccessChain 24(data) 25 135 126 26 + Store 142 141 + 143: 27(ptr) AccessChain 10(dti) 26 + 144: 6(int) Load 143 145: 27(ptr) AccessChain 10(dti) 26 146: 6(int) Load 145 - 147: 27(ptr) AccessChain 10(dti) 26 - 148: 6(int) Load 147 - 150: 119(ptr) AccessChain 24(data) 25 148 116 - 151: 17(fvec4) Load 150 - 152: 149(fvec3) VectorShuffle 151 151 0 1 2 - 153: 149(fvec3) GroupNonUniformShuffle 36 152 35 - 154: 119(ptr) AccessChain 24(data) 25 146 116 - 155: 17(fvec4) Load 154 - 156: 17(fvec4) VectorShuffle 155 153 4 5 6 3 - Store 154 156 - 157: 27(ptr) AccessChain 10(dti) 26 - 158: 6(int) Load 157 - 160: 27(ptr) AccessChain 10(dti) 26 - 161: 6(int) Load 160 - 163: 162(ptr) AccessChain 24(data) 25 161 159 - 164: 19(f64vec4) Load 163 - 165: 19(f64vec4) GroupNonUniformBroadcastFirst 36 164 - 166: 162(ptr) AccessChain 24(data) 25 158 159 - Store 166 165 - 167: 27(ptr) AccessChain 10(dti) 26 - 168: 6(int) Load 167 - 169: 27(ptr) AccessChain 10(dti) 26 - 170: 6(int) Load 169 - 172: 171(ptr) AccessChain 24(data) 25 170 159 26 - 173:18(float64_t) Load 172 - 174:18(float64_t) GroupNonUniformBroadcastFirst 36 173 - 175: 171(ptr) AccessChain 24(data) 25 168 159 26 - Store 175 174 - 176: 27(ptr) AccessChain 10(dti) 26 - 177: 6(int) Load 176 - 178: 27(ptr) AccessChain 10(dti) 26 - 179: 6(int) Load 178 - 181: 162(ptr) AccessChain 24(data) 25 179 159 - 182: 19(f64vec4) Load 181 - 183:180(f64vec2) VectorShuffle 182 182 0 1 - 184:180(f64vec2) GroupNonUniformBroadcastFirst 36 183 - 185: 162(ptr) AccessChain 24(data) 25 177 159 - 186: 19(f64vec4) Load 185 - 187: 19(f64vec4) VectorShuffle 186 184 4 5 2 3 - Store 185 187 - 188: 27(ptr) AccessChain 10(dti) 26 - 189: 6(int) Load 188 + 148: 129(ptr) AccessChain 24(data) 25 146 126 + 149: 17(fvec4) Load 148 + 150: 147(fvec2) VectorShuffle 149 149 0 1 + 151: 147(fvec2) GroupNonUniformShuffle 36 150 35 + 152: 138(ptr) AccessChain 24(data) 25 144 126 26 + 153: 16(float) CompositeExtract 151 0 + Store 152 153 + 154: 138(ptr) AccessChain 24(data) 25 144 126 59 + 155: 16(float) CompositeExtract 151 1 + Store 154 155 + 156: 27(ptr) AccessChain 10(dti) 26 + 157: 6(int) Load 156 + 158: 27(ptr) AccessChain 10(dti) 26 + 159: 6(int) Load 158 + 161: 129(ptr) AccessChain 24(data) 25 159 126 + 162: 17(fvec4) Load 161 + 163: 160(fvec3) VectorShuffle 162 162 0 1 2 + 164: 160(fvec3) GroupNonUniformShuffle 36 163 35 + 165: 138(ptr) AccessChain 24(data) 25 157 126 26 + 166: 16(float) CompositeExtract 164 0 + Store 165 166 + 167: 138(ptr) AccessChain 24(data) 25 157 126 59 + 168: 16(float) CompositeExtract 164 1 + Store 167 168 + 169: 138(ptr) AccessChain 24(data) 25 157 126 74 + 170: 16(float) CompositeExtract 164 2 + Store 169 170 + 171: 27(ptr) AccessChain 10(dti) 26 + 172: 6(int) Load 171 + 174: 27(ptr) AccessChain 10(dti) 26 + 175: 6(int) Load 174 + 177: 176(ptr) AccessChain 24(data) 25 175 173 + 178: 19(f64vec4) Load 177 + 179: 19(f64vec4) GroupNonUniformBroadcastFirst 36 178 + 180: 176(ptr) AccessChain 24(data) 25 172 173 + Store 180 179 + 181: 27(ptr) AccessChain 10(dti) 26 + 182: 6(int) Load 181 + 183: 27(ptr) AccessChain 10(dti) 26 + 184: 6(int) Load 183 + 186: 185(ptr) AccessChain 24(data) 25 184 173 26 + 187:18(float64_t) Load 186 + 188:18(float64_t) GroupNonUniformBroadcastFirst 36 187 + 189: 185(ptr) AccessChain 24(data) 25 182 173 26 + Store 189 188 190: 27(ptr) AccessChain 10(dti) 26 191: 6(int) Load 190 - 193: 162(ptr) AccessChain 24(data) 25 191 159 - 194: 19(f64vec4) Load 193 - 195:192(f64vec3) VectorShuffle 194 194 0 1 2 - 196:192(f64vec3) GroupNonUniformBroadcastFirst 36 195 - 197: 162(ptr) AccessChain 24(data) 25 189 159 - 198: 19(f64vec4) Load 197 - 199: 19(f64vec4) VectorShuffle 198 196 4 5 6 3 - Store 197 199 - 200: 27(ptr) AccessChain 10(dti) 26 - 201: 6(int) Load 200 - 202: 27(ptr) AccessChain 10(dti) 26 - 203: 6(int) Load 202 - 204: 32(ptr) AccessChain 24(data) 25 203 25 - 205: 13(ivec4) Load 204 - 206: 13(ivec4) GroupNonUniformBroadcastFirst 36 205 - 207: 32(ptr) AccessChain 24(data) 25 201 25 - Store 207 206 - 208: 27(ptr) AccessChain 10(dti) 26 - 209: 6(int) Load 208 - 210: 27(ptr) AccessChain 10(dti) 26 - 211: 6(int) Load 210 - 212: 43(ptr) AccessChain 24(data) 25 211 25 26 - 213: 6(int) Load 212 - 214: 6(int) GroupNonUniformBroadcastFirst 36 213 - 215: 43(ptr) AccessChain 24(data) 25 209 25 26 - Store 215 214 - 216: 27(ptr) AccessChain 10(dti) 26 - 217: 6(int) Load 216 + 192: 27(ptr) AccessChain 10(dti) 26 + 193: 6(int) Load 192 + 195: 176(ptr) AccessChain 24(data) 25 193 173 + 196: 19(f64vec4) Load 195 + 197:194(f64vec2) VectorShuffle 196 196 0 1 + 198:194(f64vec2) GroupNonUniformBroadcastFirst 36 197 + 199: 185(ptr) AccessChain 24(data) 25 191 173 26 + 200:18(float64_t) CompositeExtract 198 0 + Store 199 200 + 201: 185(ptr) AccessChain 24(data) 25 191 173 59 + 202:18(float64_t) CompositeExtract 198 1 + Store 201 202 + 203: 27(ptr) AccessChain 10(dti) 26 + 204: 6(int) Load 203 + 205: 27(ptr) AccessChain 10(dti) 26 + 206: 6(int) Load 205 + 208: 176(ptr) AccessChain 24(data) 25 206 173 + 209: 19(f64vec4) Load 208 + 210:207(f64vec3) VectorShuffle 209 209 0 1 2 + 211:207(f64vec3) GroupNonUniformBroadcastFirst 36 210 + 212: 185(ptr) AccessChain 24(data) 25 204 173 26 + 213:18(float64_t) CompositeExtract 211 0 + Store 212 213 + 214: 185(ptr) AccessChain 24(data) 25 204 173 59 + 215:18(float64_t) CompositeExtract 211 1 + Store 214 215 + 216: 185(ptr) AccessChain 24(data) 25 204 173 74 + 217:18(float64_t) CompositeExtract 211 2 + Store 216 217 218: 27(ptr) AccessChain 10(dti) 26 219: 6(int) Load 218 - 220: 32(ptr) AccessChain 24(data) 25 219 25 - 221: 13(ivec4) Load 220 - 222: 52(ivec2) VectorShuffle 221 221 0 1 - 223: 52(ivec2) GroupNonUniformBroadcastFirst 36 222 - 224: 32(ptr) AccessChain 24(data) 25 217 25 - 225: 13(ivec4) Load 224 - 226: 13(ivec4) VectorShuffle 225 223 4 5 2 3 - Store 224 226 - 227: 27(ptr) AccessChain 10(dti) 26 - 228: 6(int) Load 227 - 229: 27(ptr) AccessChain 10(dti) 26 - 230: 6(int) Load 229 - 231: 32(ptr) AccessChain 24(data) 25 230 25 - 232: 13(ivec4) Load 231 - 233: 7(ivec3) VectorShuffle 232 232 0 1 2 - 234: 7(ivec3) GroupNonUniformBroadcastFirst 36 233 - 235: 32(ptr) AccessChain 24(data) 25 228 25 - 236: 13(ivec4) Load 235 - 237: 13(ivec4) VectorShuffle 236 234 4 5 6 3 - Store 235 237 - 238: 27(ptr) AccessChain 10(dti) 26 - 239: 6(int) Load 238 - 240: 27(ptr) AccessChain 10(dti) 26 - 241: 6(int) Load 240 - 242: 76(ptr) AccessChain 24(data) 25 241 73 - 243: 15(ivec4) Load 242 - 244: 15(ivec4) GroupNonUniformBroadcastFirst 36 243 - 245: 76(ptr) AccessChain 24(data) 25 239 73 - Store 245 244 + 220: 27(ptr) AccessChain 10(dti) 26 + 221: 6(int) Load 220 + 222: 32(ptr) AccessChain 24(data) 25 221 25 + 223: 13(ivec4) Load 222 + 224: 13(ivec4) GroupNonUniformBroadcastFirst 36 223 + 225: 32(ptr) AccessChain 24(data) 25 219 25 + Store 225 224 + 226: 27(ptr) AccessChain 10(dti) 26 + 227: 6(int) Load 226 + 228: 27(ptr) AccessChain 10(dti) 26 + 229: 6(int) Load 228 + 230: 43(ptr) AccessChain 24(data) 25 229 25 26 + 231: 6(int) Load 230 + 232: 6(int) GroupNonUniformBroadcastFirst 36 231 + 233: 43(ptr) AccessChain 24(data) 25 227 25 26 + Store 233 232 + 234: 27(ptr) AccessChain 10(dti) 26 + 235: 6(int) Load 234 + 236: 27(ptr) AccessChain 10(dti) 26 + 237: 6(int) Load 236 + 238: 32(ptr) AccessChain 24(data) 25 237 25 + 239: 13(ivec4) Load 238 + 240: 52(ivec2) VectorShuffle 239 239 0 1 + 241: 52(ivec2) GroupNonUniformBroadcastFirst 36 240 + 242: 43(ptr) AccessChain 24(data) 25 235 25 26 + 243: 6(int) CompositeExtract 241 0 + Store 242 243 + 244: 43(ptr) AccessChain 24(data) 25 235 25 59 + 245: 6(int) CompositeExtract 241 1 + Store 244 245 246: 27(ptr) AccessChain 10(dti) 26 247: 6(int) Load 246 248: 27(ptr) AccessChain 10(dti) 26 249: 6(int) Load 248 - 250: 85(ptr) AccessChain 24(data) 25 249 73 26 - 251: 14(int) Load 250 - 252: 14(int) GroupNonUniformBroadcastFirst 36 251 - 253: 85(ptr) AccessChain 24(data) 25 247 73 26 - Store 253 252 - 254: 27(ptr) AccessChain 10(dti) 26 - 255: 6(int) Load 254 - 256: 27(ptr) AccessChain 10(dti) 26 - 257: 6(int) Load 256 - 258: 76(ptr) AccessChain 24(data) 25 257 73 - 259: 15(ivec4) Load 258 - 260: 94(ivec2) VectorShuffle 259 259 0 1 - 261: 94(ivec2) GroupNonUniformBroadcastFirst 36 260 - 262: 76(ptr) AccessChain 24(data) 25 255 73 - 263: 15(ivec4) Load 262 - 264: 15(ivec4) VectorShuffle 263 261 4 5 2 3 - Store 262 264 - 265: 27(ptr) AccessChain 10(dti) 26 - 266: 6(int) Load 265 - 267: 27(ptr) AccessChain 10(dti) 26 - 268: 6(int) Load 267 - 269: 76(ptr) AccessChain 24(data) 25 268 73 - 270: 15(ivec4) Load 269 - 271: 106(ivec3) VectorShuffle 270 270 0 1 2 - 272: 106(ivec3) GroupNonUniformBroadcastFirst 36 271 - 273: 76(ptr) AccessChain 24(data) 25 266 73 - 274: 15(ivec4) Load 273 - 275: 15(ivec4) VectorShuffle 274 272 4 5 6 3 - Store 273 275 + 250: 32(ptr) AccessChain 24(data) 25 249 25 + 251: 13(ivec4) Load 250 + 252: 7(ivec3) VectorShuffle 251 251 0 1 2 + 253: 7(ivec3) GroupNonUniformBroadcastFirst 36 252 + 254: 43(ptr) AccessChain 24(data) 25 247 25 26 + 255: 6(int) CompositeExtract 253 0 + Store 254 255 + 256: 43(ptr) AccessChain 24(data) 25 247 25 59 + 257: 6(int) CompositeExtract 253 1 + Store 256 257 + 258: 43(ptr) AccessChain 24(data) 25 247 25 74 + 259: 6(int) CompositeExtract 253 2 + Store 258 259 + 260: 27(ptr) AccessChain 10(dti) 26 + 261: 6(int) Load 260 + 262: 27(ptr) AccessChain 10(dti) 26 + 263: 6(int) Load 262 + 264: 82(ptr) AccessChain 24(data) 25 263 79 + 265: 15(ivec4) Load 264 + 266: 15(ivec4) GroupNonUniformBroadcastFirst 36 265 + 267: 82(ptr) AccessChain 24(data) 25 261 79 + Store 267 266 + 268: 27(ptr) AccessChain 10(dti) 26 + 269: 6(int) Load 268 + 270: 27(ptr) AccessChain 10(dti) 26 + 271: 6(int) Load 270 + 272: 91(ptr) AccessChain 24(data) 25 271 79 26 + 273: 14(int) Load 272 + 274: 14(int) GroupNonUniformBroadcastFirst 36 273 + 275: 91(ptr) AccessChain 24(data) 25 269 79 26 + Store 275 274 276: 27(ptr) AccessChain 10(dti) 26 277: 6(int) Load 276 278: 27(ptr) AccessChain 10(dti) 26 279: 6(int) Load 278 - 280: 119(ptr) AccessChain 24(data) 25 279 116 - 281: 17(fvec4) Load 280 - 282: 17(fvec4) GroupNonUniformBroadcastFirst 36 281 - 283: 119(ptr) AccessChain 24(data) 25 277 116 - Store 283 282 - 284: 27(ptr) AccessChain 10(dti) 26 - 285: 6(int) Load 284 - 286: 27(ptr) AccessChain 10(dti) 26 - 287: 6(int) Load 286 - 288: 128(ptr) AccessChain 24(data) 25 287 116 26 - 289: 16(float) Load 288 - 290: 16(float) GroupNonUniformBroadcastFirst 36 289 - 291: 128(ptr) AccessChain 24(data) 25 285 116 26 - Store 291 290 - 292: 27(ptr) AccessChain 10(dti) 26 - 293: 6(int) Load 292 - 294: 27(ptr) AccessChain 10(dti) 26 - 295: 6(int) Load 294 - 296: 119(ptr) AccessChain 24(data) 25 295 116 - 297: 17(fvec4) Load 296 - 298: 137(fvec2) VectorShuffle 297 297 0 1 - 299: 137(fvec2) GroupNonUniformBroadcastFirst 36 298 - 300: 119(ptr) AccessChain 24(data) 25 293 116 - 301: 17(fvec4) Load 300 - 302: 17(fvec4) VectorShuffle 301 299 4 5 2 3 - Store 300 302 - 303: 27(ptr) AccessChain 10(dti) 26 - 304: 6(int) Load 303 - 305: 27(ptr) AccessChain 10(dti) 26 - 306: 6(int) Load 305 - 307: 119(ptr) AccessChain 24(data) 25 306 116 - 308: 17(fvec4) Load 307 - 309: 149(fvec3) VectorShuffle 308 308 0 1 2 - 310: 149(fvec3) GroupNonUniformBroadcastFirst 36 309 - 311: 119(ptr) AccessChain 24(data) 25 304 116 - 312: 17(fvec4) Load 311 - 313: 17(fvec4) VectorShuffle 312 310 4 5 6 3 - Store 311 313 - 314: 27(ptr) AccessChain 10(dti) 26 - 315: 6(int) Load 314 - 316: 27(ptr) AccessChain 10(dti) 26 - 317: 6(int) Load 316 - 318: 162(ptr) AccessChain 24(data) 25 317 159 - 319: 19(f64vec4) Load 318 - 320: 19(f64vec4) GroupNonUniformBroadcastFirst 36 319 - 321: 162(ptr) AccessChain 24(data) 25 315 159 - Store 321 320 - 322: 27(ptr) AccessChain 10(dti) 26 - 323: 6(int) Load 322 - 324: 27(ptr) AccessChain 10(dti) 26 - 325: 6(int) Load 324 - 326: 171(ptr) AccessChain 24(data) 25 325 159 26 - 327:18(float64_t) Load 326 - 328:18(float64_t) GroupNonUniformBroadcastFirst 36 327 - 329: 171(ptr) AccessChain 24(data) 25 323 159 26 - Store 329 328 + 280: 82(ptr) AccessChain 24(data) 25 279 79 + 281: 15(ivec4) Load 280 + 282: 100(ivec2) VectorShuffle 281 281 0 1 + 283: 100(ivec2) GroupNonUniformBroadcastFirst 36 282 + 284: 91(ptr) AccessChain 24(data) 25 277 79 26 + 285: 14(int) CompositeExtract 283 0 + Store 284 285 + 286: 91(ptr) AccessChain 24(data) 25 277 79 59 + 287: 14(int) CompositeExtract 283 1 + Store 286 287 + 288: 27(ptr) AccessChain 10(dti) 26 + 289: 6(int) Load 288 + 290: 27(ptr) AccessChain 10(dti) 26 + 291: 6(int) Load 290 + 292: 82(ptr) AccessChain 24(data) 25 291 79 + 293: 15(ivec4) Load 292 + 294: 113(ivec3) VectorShuffle 293 293 0 1 2 + 295: 113(ivec3) GroupNonUniformBroadcastFirst 36 294 + 296: 91(ptr) AccessChain 24(data) 25 289 79 26 + 297: 14(int) CompositeExtract 295 0 + Store 296 297 + 298: 91(ptr) AccessChain 24(data) 25 289 79 59 + 299: 14(int) CompositeExtract 295 1 + Store 298 299 + 300: 91(ptr) AccessChain 24(data) 25 289 79 74 + 301: 14(int) CompositeExtract 295 2 + Store 300 301 + 302: 27(ptr) AccessChain 10(dti) 26 + 303: 6(int) Load 302 + 304: 27(ptr) AccessChain 10(dti) 26 + 305: 6(int) Load 304 + 306: 129(ptr) AccessChain 24(data) 25 305 126 + 307: 17(fvec4) Load 306 + 308: 17(fvec4) GroupNonUniformBroadcastFirst 36 307 + 309: 129(ptr) AccessChain 24(data) 25 303 126 + Store 309 308 + 310: 27(ptr) AccessChain 10(dti) 26 + 311: 6(int) Load 310 + 312: 27(ptr) AccessChain 10(dti) 26 + 313: 6(int) Load 312 + 314: 138(ptr) AccessChain 24(data) 25 313 126 26 + 315: 16(float) Load 314 + 316: 16(float) GroupNonUniformBroadcastFirst 36 315 + 317: 138(ptr) AccessChain 24(data) 25 311 126 26 + Store 317 316 + 318: 27(ptr) AccessChain 10(dti) 26 + 319: 6(int) Load 318 + 320: 27(ptr) AccessChain 10(dti) 26 + 321: 6(int) Load 320 + 322: 129(ptr) AccessChain 24(data) 25 321 126 + 323: 17(fvec4) Load 322 + 324: 147(fvec2) VectorShuffle 323 323 0 1 + 325: 147(fvec2) GroupNonUniformBroadcastFirst 36 324 + 326: 138(ptr) AccessChain 24(data) 25 319 126 26 + 327: 16(float) CompositeExtract 325 0 + Store 326 327 + 328: 138(ptr) AccessChain 24(data) 25 319 126 59 + 329: 16(float) CompositeExtract 325 1 + Store 328 329 330: 27(ptr) AccessChain 10(dti) 26 331: 6(int) Load 330 332: 27(ptr) AccessChain 10(dti) 26 333: 6(int) Load 332 - 334: 162(ptr) AccessChain 24(data) 25 333 159 - 335: 19(f64vec4) Load 334 - 336:180(f64vec2) VectorShuffle 335 335 0 1 - 337:180(f64vec2) GroupNonUniformBroadcastFirst 36 336 - 338: 162(ptr) AccessChain 24(data) 25 331 159 - 339: 19(f64vec4) Load 338 - 340: 19(f64vec4) VectorShuffle 339 337 4 5 2 3 - Store 338 340 - 341: 27(ptr) AccessChain 10(dti) 26 - 342: 6(int) Load 341 - 343: 27(ptr) AccessChain 10(dti) 26 - 344: 6(int) Load 343 - 345: 162(ptr) AccessChain 24(data) 25 344 159 - 346: 19(f64vec4) Load 345 - 347:192(f64vec3) VectorShuffle 346 346 0 1 2 - 348:192(f64vec3) GroupNonUniformBroadcastFirst 36 347 - 349: 162(ptr) AccessChain 24(data) 25 342 159 - 350: 19(f64vec4) Load 349 - 351: 19(f64vec4) VectorShuffle 350 348 4 5 6 3 - Store 349 351 + 334: 129(ptr) AccessChain 24(data) 25 333 126 + 335: 17(fvec4) Load 334 + 336: 160(fvec3) VectorShuffle 335 335 0 1 2 + 337: 160(fvec3) GroupNonUniformBroadcastFirst 36 336 + 338: 138(ptr) AccessChain 24(data) 25 331 126 26 + 339: 16(float) CompositeExtract 337 0 + Store 338 339 + 340: 138(ptr) AccessChain 24(data) 25 331 126 59 + 341: 16(float) CompositeExtract 337 1 + Store 340 341 + 342: 138(ptr) AccessChain 24(data) 25 331 126 74 + 343: 16(float) CompositeExtract 337 2 + Store 342 343 + 344: 27(ptr) AccessChain 10(dti) 26 + 345: 6(int) Load 344 + 346: 27(ptr) AccessChain 10(dti) 26 + 347: 6(int) Load 346 + 348: 176(ptr) AccessChain 24(data) 25 347 173 + 349: 19(f64vec4) Load 348 + 350: 19(f64vec4) GroupNonUniformBroadcastFirst 36 349 + 351: 176(ptr) AccessChain 24(data) 25 345 173 + Store 351 350 + 352: 27(ptr) AccessChain 10(dti) 26 + 353: 6(int) Load 352 + 354: 27(ptr) AccessChain 10(dti) 26 + 355: 6(int) Load 354 + 356: 185(ptr) AccessChain 24(data) 25 355 173 26 + 357:18(float64_t) Load 356 + 358:18(float64_t) GroupNonUniformBroadcastFirst 36 357 + 359: 185(ptr) AccessChain 24(data) 25 353 173 26 + Store 359 358 + 360: 27(ptr) AccessChain 10(dti) 26 + 361: 6(int) Load 360 + 362: 27(ptr) AccessChain 10(dti) 26 + 363: 6(int) Load 362 + 364: 176(ptr) AccessChain 24(data) 25 363 173 + 365: 19(f64vec4) Load 364 + 366:194(f64vec2) VectorShuffle 365 365 0 1 + 367:194(f64vec2) GroupNonUniformBroadcastFirst 36 366 + 368: 185(ptr) AccessChain 24(data) 25 361 173 26 + 369:18(float64_t) CompositeExtract 367 0 + Store 368 369 + 370: 185(ptr) AccessChain 24(data) 25 361 173 59 + 371:18(float64_t) CompositeExtract 367 1 + Store 370 371 + 372: 27(ptr) AccessChain 10(dti) 26 + 373: 6(int) Load 372 + 374: 27(ptr) AccessChain 10(dti) 26 + 375: 6(int) Load 374 + 376: 176(ptr) AccessChain 24(data) 25 375 173 + 377: 19(f64vec4) Load 376 + 378:207(f64vec3) VectorShuffle 377 377 0 1 2 + 379:207(f64vec3) GroupNonUniformBroadcastFirst 36 378 + 380: 185(ptr) AccessChain 24(data) 25 373 173 26 + 381:18(float64_t) CompositeExtract 379 0 + Store 380 381 + 382: 185(ptr) AccessChain 24(data) 25 373 173 59 + 383:18(float64_t) CompositeExtract 379 1 + Store 382 383 + 384: 185(ptr) AccessChain 24(data) 25 373 173 74 + 385:18(float64_t) CompositeExtract 379 2 + Store 384 385 Return FunctionEnd diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out index 1d79f1777e..cc4737ed76 100644 --- a/Test/baseResults/hlsl.waveprefix.comp.out +++ b/Test/baseResults/hlsl.waveprefix.comp.out @@ -2323,7 +2323,7 @@ local_size = (32, 16, 1) // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 369 +// Id's are bound by 403 Capability Shader Capability Float64 @@ -2332,7 +2332,7 @@ local_size = (32, 16, 1) Capability GroupNonUniformBallot 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "CSMain" 364 + EntryPoint GLCompute 4 "CSMain" 398 ExecutionMode 4 LocalSize 32 16 1 Source HLSL 500 Name 4 "CSMain" @@ -2346,9 +2346,9 @@ local_size = (32, 16, 1) Name 22 "data" MemberName 22(data) 0 "@data" Name 24 "data" - Name 362 "dti" - Name 364 "dti" - Name 366 "param" + Name 396 "dti" + Name 398 "dti" + Name 400 "param" MemberDecorate 20(Types) 0 Offset 0 MemberDecorate 20(Types) 1 Offset 16 MemberDecorate 20(Types) 2 Offset 32 @@ -2358,7 +2358,7 @@ local_size = (32, 16, 1) Decorate 22(data) BufferBlock Decorate 24(data) DescriptorSet 0 Decorate 24(data) Binding 0 - Decorate 364(dti) BuiltIn GlobalInvocationId + Decorate 398(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -2384,33 +2384,35 @@ local_size = (32, 16, 1) 35: 6(int) Constant 3 42: TypePointer Uniform 6(int) 51: TypeVector 6(int) 2 - 72: 14(int) Constant 1 - 75: TypePointer Uniform 15(ivec4) - 84: TypePointer Uniform 14(int) - 93: TypeVector 14(int) 2 - 105: TypeVector 14(int) 3 - 115: 14(int) Constant 2 - 118: TypePointer Uniform 17(fvec4) - 127: TypePointer Uniform 16(float) - 136: TypeVector 16(float) 2 - 148: TypeVector 16(float) 3 - 158: 14(int) Constant 3 - 161: TypePointer Uniform 19(f64vec4) - 170: TypePointer Uniform 18(float64_t) - 179: TypeVector 18(float64_t) 2 - 191: TypeVector 18(float64_t) 3 - 357: TypeBool - 363: TypePointer Input 7(ivec3) - 364(dti): 363(ptr) Variable Input + 58: 6(int) Constant 1 + 73: 6(int) Constant 2 + 78: 14(int) Constant 1 + 81: TypePointer Uniform 15(ivec4) + 90: TypePointer Uniform 14(int) + 99: TypeVector 14(int) 2 + 112: TypeVector 14(int) 3 + 125: 14(int) Constant 2 + 128: TypePointer Uniform 17(fvec4) + 137: TypePointer Uniform 16(float) + 146: TypeVector 16(float) 2 + 159: TypeVector 16(float) 3 + 172: 14(int) Constant 3 + 175: TypePointer Uniform 19(f64vec4) + 184: TypePointer Uniform 18(float64_t) + 193: TypeVector 18(float64_t) 2 + 206: TypeVector 18(float64_t) 3 + 391: TypeBool + 397: TypePointer Input 7(ivec3) + 398(dti): 397(ptr) Variable Input 4(CSMain): 2 Function None 3 5: Label - 362(dti): 8(ptr) Variable Function - 366(param): 8(ptr) Variable Function - 365: 7(ivec3) Load 364(dti) - Store 362(dti) 365 - 367: 7(ivec3) Load 362(dti) - Store 366(param) 367 - 368: 2 FunctionCall 11(@CSMain(vu3;) 366(param) + 396(dti): 8(ptr) Variable Function + 400(param): 8(ptr) Variable Function + 399: 7(ivec3) Load 398(dti) + Store 396(dti) 399 + 401: 7(ivec3) Load 396(dti) + Store 400(param) 401 + 402: 2 FunctionCall 11(@CSMain(vu3;) 400(param) Return FunctionEnd 11(@CSMain(vu3;): 2 Function None 9 @@ -2442,326 +2444,382 @@ local_size = (32, 16, 1) 53: 13(ivec4) Load 52 54: 51(ivec2) VectorShuffle 53 53 0 1 55: 51(ivec2) GroupNonUniformIAdd 35 InclusiveScan 54 - 56: 32(ptr) AccessChain 24(data) 25 48 25 - 57: 13(ivec4) Load 56 - 58: 13(ivec4) VectorShuffle 57 55 4 5 2 3 - Store 56 58 - 59: 27(ptr) AccessChain 10(dti) 26 - 60: 6(int) Load 59 + 56: 42(ptr) AccessChain 24(data) 25 48 25 26 + 57: 6(int) CompositeExtract 55 0 + Store 56 57 + 59: 42(ptr) AccessChain 24(data) 25 48 25 58 + 60: 6(int) CompositeExtract 55 1 + Store 59 60 61: 27(ptr) AccessChain 10(dti) 26 62: 6(int) Load 61 - 63: 32(ptr) AccessChain 24(data) 25 62 25 - 64: 13(ivec4) Load 63 - 65: 7(ivec3) VectorShuffle 64 64 0 1 2 - 66: 7(ivec3) GroupNonUniformIAdd 35 InclusiveScan 65 - 67: 32(ptr) AccessChain 24(data) 25 60 25 - 68: 13(ivec4) Load 67 - 69: 13(ivec4) VectorShuffle 68 66 4 5 6 3 - Store 67 69 - 70: 27(ptr) AccessChain 10(dti) 26 - 71: 6(int) Load 70 - 73: 27(ptr) AccessChain 10(dti) 26 - 74: 6(int) Load 73 - 76: 75(ptr) AccessChain 24(data) 25 74 72 - 77: 15(ivec4) Load 76 - 78: 15(ivec4) GroupNonUniformIAdd 35 InclusiveScan 77 - 79: 75(ptr) AccessChain 24(data) 25 71 72 - Store 79 78 - 80: 27(ptr) AccessChain 10(dti) 26 - 81: 6(int) Load 80 - 82: 27(ptr) AccessChain 10(dti) 26 - 83: 6(int) Load 82 - 85: 84(ptr) AccessChain 24(data) 25 83 72 26 - 86: 14(int) Load 85 - 87: 14(int) GroupNonUniformIAdd 35 InclusiveScan 86 - 88: 84(ptr) AccessChain 24(data) 25 81 72 26 - Store 88 87 - 89: 27(ptr) AccessChain 10(dti) 26 - 90: 6(int) Load 89 - 91: 27(ptr) AccessChain 10(dti) 26 - 92: 6(int) Load 91 - 94: 75(ptr) AccessChain 24(data) 25 92 72 - 95: 15(ivec4) Load 94 - 96: 93(ivec2) VectorShuffle 95 95 0 1 - 97: 93(ivec2) GroupNonUniformIAdd 35 InclusiveScan 96 - 98: 75(ptr) AccessChain 24(data) 25 90 72 - 99: 15(ivec4) Load 98 - 100: 15(ivec4) VectorShuffle 99 97 4 5 2 3 - Store 98 100 - 101: 27(ptr) AccessChain 10(dti) 26 - 102: 6(int) Load 101 - 103: 27(ptr) AccessChain 10(dti) 26 - 104: 6(int) Load 103 - 106: 75(ptr) AccessChain 24(data) 25 104 72 - 107: 15(ivec4) Load 106 - 108: 105(ivec3) VectorShuffle 107 107 0 1 2 - 109: 105(ivec3) GroupNonUniformIAdd 35 InclusiveScan 108 - 110: 75(ptr) AccessChain 24(data) 25 102 72 - 111: 15(ivec4) Load 110 - 112: 15(ivec4) VectorShuffle 111 109 4 5 6 3 - Store 110 112 - 113: 27(ptr) AccessChain 10(dti) 26 - 114: 6(int) Load 113 - 116: 27(ptr) AccessChain 10(dti) 26 - 117: 6(int) Load 116 - 119: 118(ptr) AccessChain 24(data) 25 117 115 - 120: 17(fvec4) Load 119 - 121: 17(fvec4) GroupNonUniformFAdd 35 InclusiveScan 120 - 122: 118(ptr) AccessChain 24(data) 25 114 115 - Store 122 121 + 63: 27(ptr) AccessChain 10(dti) 26 + 64: 6(int) Load 63 + 65: 32(ptr) AccessChain 24(data) 25 64 25 + 66: 13(ivec4) Load 65 + 67: 7(ivec3) VectorShuffle 66 66 0 1 2 + 68: 7(ivec3) GroupNonUniformIAdd 35 InclusiveScan 67 + 69: 42(ptr) AccessChain 24(data) 25 62 25 26 + 70: 6(int) CompositeExtract 68 0 + Store 69 70 + 71: 42(ptr) AccessChain 24(data) 25 62 25 58 + 72: 6(int) CompositeExtract 68 1 + Store 71 72 + 74: 42(ptr) AccessChain 24(data) 25 62 25 73 + 75: 6(int) CompositeExtract 68 2 + Store 74 75 + 76: 27(ptr) AccessChain 10(dti) 26 + 77: 6(int) Load 76 + 79: 27(ptr) AccessChain 10(dti) 26 + 80: 6(int) Load 79 + 82: 81(ptr) AccessChain 24(data) 25 80 78 + 83: 15(ivec4) Load 82 + 84: 15(ivec4) GroupNonUniformIAdd 35 InclusiveScan 83 + 85: 81(ptr) AccessChain 24(data) 25 77 78 + Store 85 84 + 86: 27(ptr) AccessChain 10(dti) 26 + 87: 6(int) Load 86 + 88: 27(ptr) AccessChain 10(dti) 26 + 89: 6(int) Load 88 + 91: 90(ptr) AccessChain 24(data) 25 89 78 26 + 92: 14(int) Load 91 + 93: 14(int) GroupNonUniformIAdd 35 InclusiveScan 92 + 94: 90(ptr) AccessChain 24(data) 25 87 78 26 + Store 94 93 + 95: 27(ptr) AccessChain 10(dti) 26 + 96: 6(int) Load 95 + 97: 27(ptr) AccessChain 10(dti) 26 + 98: 6(int) Load 97 + 100: 81(ptr) AccessChain 24(data) 25 98 78 + 101: 15(ivec4) Load 100 + 102: 99(ivec2) VectorShuffle 101 101 0 1 + 103: 99(ivec2) GroupNonUniformIAdd 35 InclusiveScan 102 + 104: 90(ptr) AccessChain 24(data) 25 96 78 26 + 105: 14(int) CompositeExtract 103 0 + Store 104 105 + 106: 90(ptr) AccessChain 24(data) 25 96 78 58 + 107: 14(int) CompositeExtract 103 1 + Store 106 107 + 108: 27(ptr) AccessChain 10(dti) 26 + 109: 6(int) Load 108 + 110: 27(ptr) AccessChain 10(dti) 26 + 111: 6(int) Load 110 + 113: 81(ptr) AccessChain 24(data) 25 111 78 + 114: 15(ivec4) Load 113 + 115: 112(ivec3) VectorShuffle 114 114 0 1 2 + 116: 112(ivec3) GroupNonUniformIAdd 35 InclusiveScan 115 + 117: 90(ptr) AccessChain 24(data) 25 109 78 26 + 118: 14(int) CompositeExtract 116 0 + Store 117 118 + 119: 90(ptr) AccessChain 24(data) 25 109 78 58 + 120: 14(int) CompositeExtract 116 1 + Store 119 120 + 121: 90(ptr) AccessChain 24(data) 25 109 78 73 + 122: 14(int) CompositeExtract 116 2 + Store 121 122 123: 27(ptr) AccessChain 10(dti) 26 124: 6(int) Load 123 - 125: 27(ptr) AccessChain 10(dti) 26 - 126: 6(int) Load 125 - 128: 127(ptr) AccessChain 24(data) 25 126 115 26 - 129: 16(float) Load 128 - 130: 16(float) GroupNonUniformFAdd 35 InclusiveScan 129 - 131: 127(ptr) AccessChain 24(data) 25 124 115 26 - Store 131 130 - 132: 27(ptr) AccessChain 10(dti) 26 - 133: 6(int) Load 132 - 134: 27(ptr) AccessChain 10(dti) 26 - 135: 6(int) Load 134 - 137: 118(ptr) AccessChain 24(data) 25 135 115 - 138: 17(fvec4) Load 137 - 139: 136(fvec2) VectorShuffle 138 138 0 1 - 140: 136(fvec2) GroupNonUniformFAdd 35 InclusiveScan 139 - 141: 118(ptr) AccessChain 24(data) 25 133 115 - 142: 17(fvec4) Load 141 - 143: 17(fvec4) VectorShuffle 142 140 4 5 2 3 - Store 141 143 + 126: 27(ptr) AccessChain 10(dti) 26 + 127: 6(int) Load 126 + 129: 128(ptr) AccessChain 24(data) 25 127 125 + 130: 17(fvec4) Load 129 + 131: 17(fvec4) GroupNonUniformFAdd 35 InclusiveScan 130 + 132: 128(ptr) AccessChain 24(data) 25 124 125 + Store 132 131 + 133: 27(ptr) AccessChain 10(dti) 26 + 134: 6(int) Load 133 + 135: 27(ptr) AccessChain 10(dti) 26 + 136: 6(int) Load 135 + 138: 137(ptr) AccessChain 24(data) 25 136 125 26 + 139: 16(float) Load 138 + 140: 16(float) GroupNonUniformFAdd 35 InclusiveScan 139 + 141: 137(ptr) AccessChain 24(data) 25 134 125 26 + Store 141 140 + 142: 27(ptr) AccessChain 10(dti) 26 + 143: 6(int) Load 142 144: 27(ptr) AccessChain 10(dti) 26 145: 6(int) Load 144 - 146: 27(ptr) AccessChain 10(dti) 26 - 147: 6(int) Load 146 - 149: 118(ptr) AccessChain 24(data) 25 147 115 - 150: 17(fvec4) Load 149 - 151: 148(fvec3) VectorShuffle 150 150 0 1 2 - 152: 148(fvec3) GroupNonUniformFAdd 35 InclusiveScan 151 - 153: 118(ptr) AccessChain 24(data) 25 145 115 - 154: 17(fvec4) Load 153 - 155: 17(fvec4) VectorShuffle 154 152 4 5 6 3 - Store 153 155 - 156: 27(ptr) AccessChain 10(dti) 26 - 157: 6(int) Load 156 - 159: 27(ptr) AccessChain 10(dti) 26 - 160: 6(int) Load 159 - 162: 161(ptr) AccessChain 24(data) 25 160 158 - 163: 19(f64vec4) Load 162 - 164: 19(f64vec4) GroupNonUniformFAdd 35 InclusiveScan 163 - 165: 161(ptr) AccessChain 24(data) 25 157 158 - Store 165 164 - 166: 27(ptr) AccessChain 10(dti) 26 - 167: 6(int) Load 166 - 168: 27(ptr) AccessChain 10(dti) 26 - 169: 6(int) Load 168 - 171: 170(ptr) AccessChain 24(data) 25 169 158 26 - 172:18(float64_t) Load 171 - 173:18(float64_t) GroupNonUniformFAdd 35 InclusiveScan 172 - 174: 170(ptr) AccessChain 24(data) 25 167 158 26 - Store 174 173 - 175: 27(ptr) AccessChain 10(dti) 26 - 176: 6(int) Load 175 - 177: 27(ptr) AccessChain 10(dti) 26 - 178: 6(int) Load 177 - 180: 161(ptr) AccessChain 24(data) 25 178 158 - 181: 19(f64vec4) Load 180 - 182:179(f64vec2) VectorShuffle 181 181 0 1 - 183:179(f64vec2) GroupNonUniformFAdd 35 InclusiveScan 182 - 184: 161(ptr) AccessChain 24(data) 25 176 158 - 185: 19(f64vec4) Load 184 - 186: 19(f64vec4) VectorShuffle 185 183 4 5 2 3 - Store 184 186 - 187: 27(ptr) AccessChain 10(dti) 26 - 188: 6(int) Load 187 + 147: 128(ptr) AccessChain 24(data) 25 145 125 + 148: 17(fvec4) Load 147 + 149: 146(fvec2) VectorShuffle 148 148 0 1 + 150: 146(fvec2) GroupNonUniformFAdd 35 InclusiveScan 149 + 151: 137(ptr) AccessChain 24(data) 25 143 125 26 + 152: 16(float) CompositeExtract 150 0 + Store 151 152 + 153: 137(ptr) AccessChain 24(data) 25 143 125 58 + 154: 16(float) CompositeExtract 150 1 + Store 153 154 + 155: 27(ptr) AccessChain 10(dti) 26 + 156: 6(int) Load 155 + 157: 27(ptr) AccessChain 10(dti) 26 + 158: 6(int) Load 157 + 160: 128(ptr) AccessChain 24(data) 25 158 125 + 161: 17(fvec4) Load 160 + 162: 159(fvec3) VectorShuffle 161 161 0 1 2 + 163: 159(fvec3) GroupNonUniformFAdd 35 InclusiveScan 162 + 164: 137(ptr) AccessChain 24(data) 25 156 125 26 + 165: 16(float) CompositeExtract 163 0 + Store 164 165 + 166: 137(ptr) AccessChain 24(data) 25 156 125 58 + 167: 16(float) CompositeExtract 163 1 + Store 166 167 + 168: 137(ptr) AccessChain 24(data) 25 156 125 73 + 169: 16(float) CompositeExtract 163 2 + Store 168 169 + 170: 27(ptr) AccessChain 10(dti) 26 + 171: 6(int) Load 170 + 173: 27(ptr) AccessChain 10(dti) 26 + 174: 6(int) Load 173 + 176: 175(ptr) AccessChain 24(data) 25 174 172 + 177: 19(f64vec4) Load 176 + 178: 19(f64vec4) GroupNonUniformFAdd 35 InclusiveScan 177 + 179: 175(ptr) AccessChain 24(data) 25 171 172 + Store 179 178 + 180: 27(ptr) AccessChain 10(dti) 26 + 181: 6(int) Load 180 + 182: 27(ptr) AccessChain 10(dti) 26 + 183: 6(int) Load 182 + 185: 184(ptr) AccessChain 24(data) 25 183 172 26 + 186:18(float64_t) Load 185 + 187:18(float64_t) GroupNonUniformFAdd 35 InclusiveScan 186 + 188: 184(ptr) AccessChain 24(data) 25 181 172 26 + Store 188 187 189: 27(ptr) AccessChain 10(dti) 26 190: 6(int) Load 189 - 192: 161(ptr) AccessChain 24(data) 25 190 158 - 193: 19(f64vec4) Load 192 - 194:191(f64vec3) VectorShuffle 193 193 0 1 2 - 195:191(f64vec3) GroupNonUniformFAdd 35 InclusiveScan 194 - 196: 161(ptr) AccessChain 24(data) 25 188 158 - 197: 19(f64vec4) Load 196 - 198: 19(f64vec4) VectorShuffle 197 195 4 5 6 3 - Store 196 198 - 199: 27(ptr) AccessChain 10(dti) 26 - 200: 6(int) Load 199 - 201: 27(ptr) AccessChain 10(dti) 26 - 202: 6(int) Load 201 - 203: 32(ptr) AccessChain 24(data) 25 202 25 - 204: 13(ivec4) Load 203 - 205: 13(ivec4) GroupNonUniformIMul 35 InclusiveScan 204 - 206: 32(ptr) AccessChain 24(data) 25 200 25 - Store 206 205 - 207: 27(ptr) AccessChain 10(dti) 26 - 208: 6(int) Load 207 - 209: 27(ptr) AccessChain 10(dti) 26 - 210: 6(int) Load 209 - 211: 42(ptr) AccessChain 24(data) 25 210 25 26 - 212: 6(int) Load 211 - 213: 6(int) GroupNonUniformIMul 35 InclusiveScan 212 - 214: 42(ptr) AccessChain 24(data) 25 208 25 26 - Store 214 213 - 215: 27(ptr) AccessChain 10(dti) 26 - 216: 6(int) Load 215 + 191: 27(ptr) AccessChain 10(dti) 26 + 192: 6(int) Load 191 + 194: 175(ptr) AccessChain 24(data) 25 192 172 + 195: 19(f64vec4) Load 194 + 196:193(f64vec2) VectorShuffle 195 195 0 1 + 197:193(f64vec2) GroupNonUniformFAdd 35 InclusiveScan 196 + 198: 184(ptr) AccessChain 24(data) 25 190 172 26 + 199:18(float64_t) CompositeExtract 197 0 + Store 198 199 + 200: 184(ptr) AccessChain 24(data) 25 190 172 58 + 201:18(float64_t) CompositeExtract 197 1 + Store 200 201 + 202: 27(ptr) AccessChain 10(dti) 26 + 203: 6(int) Load 202 + 204: 27(ptr) AccessChain 10(dti) 26 + 205: 6(int) Load 204 + 207: 175(ptr) AccessChain 24(data) 25 205 172 + 208: 19(f64vec4) Load 207 + 209:206(f64vec3) VectorShuffle 208 208 0 1 2 + 210:206(f64vec3) GroupNonUniformFAdd 35 InclusiveScan 209 + 211: 184(ptr) AccessChain 24(data) 25 203 172 26 + 212:18(float64_t) CompositeExtract 210 0 + Store 211 212 + 213: 184(ptr) AccessChain 24(data) 25 203 172 58 + 214:18(float64_t) CompositeExtract 210 1 + Store 213 214 + 215: 184(ptr) AccessChain 24(data) 25 203 172 73 + 216:18(float64_t) CompositeExtract 210 2 + Store 215 216 217: 27(ptr) AccessChain 10(dti) 26 218: 6(int) Load 217 - 219: 32(ptr) AccessChain 24(data) 25 218 25 - 220: 13(ivec4) Load 219 - 221: 51(ivec2) VectorShuffle 220 220 0 1 - 222: 51(ivec2) GroupNonUniformIMul 35 InclusiveScan 221 - 223: 32(ptr) AccessChain 24(data) 25 216 25 - 224: 13(ivec4) Load 223 - 225: 13(ivec4) VectorShuffle 224 222 4 5 2 3 - Store 223 225 - 226: 27(ptr) AccessChain 10(dti) 26 - 227: 6(int) Load 226 - 228: 27(ptr) AccessChain 10(dti) 26 - 229: 6(int) Load 228 - 230: 32(ptr) AccessChain 24(data) 25 229 25 - 231: 13(ivec4) Load 230 - 232: 7(ivec3) VectorShuffle 231 231 0 1 2 - 233: 7(ivec3) GroupNonUniformIMul 35 InclusiveScan 232 - 234: 32(ptr) AccessChain 24(data) 25 227 25 - 235: 13(ivec4) Load 234 - 236: 13(ivec4) VectorShuffle 235 233 4 5 6 3 - Store 234 236 - 237: 27(ptr) AccessChain 10(dti) 26 - 238: 6(int) Load 237 - 239: 27(ptr) AccessChain 10(dti) 26 - 240: 6(int) Load 239 - 241: 75(ptr) AccessChain 24(data) 25 240 72 - 242: 15(ivec4) Load 241 - 243: 15(ivec4) GroupNonUniformIMul 35 InclusiveScan 242 - 244: 75(ptr) AccessChain 24(data) 25 238 72 - Store 244 243 + 219: 27(ptr) AccessChain 10(dti) 26 + 220: 6(int) Load 219 + 221: 32(ptr) AccessChain 24(data) 25 220 25 + 222: 13(ivec4) Load 221 + 223: 13(ivec4) GroupNonUniformIMul 35 InclusiveScan 222 + 224: 32(ptr) AccessChain 24(data) 25 218 25 + Store 224 223 + 225: 27(ptr) AccessChain 10(dti) 26 + 226: 6(int) Load 225 + 227: 27(ptr) AccessChain 10(dti) 26 + 228: 6(int) Load 227 + 229: 42(ptr) AccessChain 24(data) 25 228 25 26 + 230: 6(int) Load 229 + 231: 6(int) GroupNonUniformIMul 35 InclusiveScan 230 + 232: 42(ptr) AccessChain 24(data) 25 226 25 26 + Store 232 231 + 233: 27(ptr) AccessChain 10(dti) 26 + 234: 6(int) Load 233 + 235: 27(ptr) AccessChain 10(dti) 26 + 236: 6(int) Load 235 + 237: 32(ptr) AccessChain 24(data) 25 236 25 + 238: 13(ivec4) Load 237 + 239: 51(ivec2) VectorShuffle 238 238 0 1 + 240: 51(ivec2) GroupNonUniformIMul 35 InclusiveScan 239 + 241: 42(ptr) AccessChain 24(data) 25 234 25 26 + 242: 6(int) CompositeExtract 240 0 + Store 241 242 + 243: 42(ptr) AccessChain 24(data) 25 234 25 58 + 244: 6(int) CompositeExtract 240 1 + Store 243 244 245: 27(ptr) AccessChain 10(dti) 26 246: 6(int) Load 245 247: 27(ptr) AccessChain 10(dti) 26 248: 6(int) Load 247 - 249: 84(ptr) AccessChain 24(data) 25 248 72 26 - 250: 14(int) Load 249 - 251: 14(int) GroupNonUniformIMul 35 InclusiveScan 250 - 252: 84(ptr) AccessChain 24(data) 25 246 72 26 - Store 252 251 - 253: 27(ptr) AccessChain 10(dti) 26 - 254: 6(int) Load 253 - 255: 27(ptr) AccessChain 10(dti) 26 - 256: 6(int) Load 255 - 257: 75(ptr) AccessChain 24(data) 25 256 72 - 258: 15(ivec4) Load 257 - 259: 93(ivec2) VectorShuffle 258 258 0 1 - 260: 93(ivec2) GroupNonUniformIMul 35 InclusiveScan 259 - 261: 75(ptr) AccessChain 24(data) 25 254 72 - 262: 15(ivec4) Load 261 - 263: 15(ivec4) VectorShuffle 262 260 4 5 2 3 - Store 261 263 - 264: 27(ptr) AccessChain 10(dti) 26 - 265: 6(int) Load 264 - 266: 27(ptr) AccessChain 10(dti) 26 - 267: 6(int) Load 266 - 268: 75(ptr) AccessChain 24(data) 25 267 72 - 269: 15(ivec4) Load 268 - 270: 105(ivec3) VectorShuffle 269 269 0 1 2 - 271: 105(ivec3) GroupNonUniformIMul 35 InclusiveScan 270 - 272: 75(ptr) AccessChain 24(data) 25 265 72 - 273: 15(ivec4) Load 272 - 274: 15(ivec4) VectorShuffle 273 271 4 5 6 3 - Store 272 274 + 249: 32(ptr) AccessChain 24(data) 25 248 25 + 250: 13(ivec4) Load 249 + 251: 7(ivec3) VectorShuffle 250 250 0 1 2 + 252: 7(ivec3) GroupNonUniformIMul 35 InclusiveScan 251 + 253: 42(ptr) AccessChain 24(data) 25 246 25 26 + 254: 6(int) CompositeExtract 252 0 + Store 253 254 + 255: 42(ptr) AccessChain 24(data) 25 246 25 58 + 256: 6(int) CompositeExtract 252 1 + Store 255 256 + 257: 42(ptr) AccessChain 24(data) 25 246 25 73 + 258: 6(int) CompositeExtract 252 2 + Store 257 258 + 259: 27(ptr) AccessChain 10(dti) 26 + 260: 6(int) Load 259 + 261: 27(ptr) AccessChain 10(dti) 26 + 262: 6(int) Load 261 + 263: 81(ptr) AccessChain 24(data) 25 262 78 + 264: 15(ivec4) Load 263 + 265: 15(ivec4) GroupNonUniformIMul 35 InclusiveScan 264 + 266: 81(ptr) AccessChain 24(data) 25 260 78 + Store 266 265 + 267: 27(ptr) AccessChain 10(dti) 26 + 268: 6(int) Load 267 + 269: 27(ptr) AccessChain 10(dti) 26 + 270: 6(int) Load 269 + 271: 90(ptr) AccessChain 24(data) 25 270 78 26 + 272: 14(int) Load 271 + 273: 14(int) GroupNonUniformIMul 35 InclusiveScan 272 + 274: 90(ptr) AccessChain 24(data) 25 268 78 26 + Store 274 273 275: 27(ptr) AccessChain 10(dti) 26 276: 6(int) Load 275 277: 27(ptr) AccessChain 10(dti) 26 278: 6(int) Load 277 - 279: 118(ptr) AccessChain 24(data) 25 278 115 - 280: 17(fvec4) Load 279 - 281: 17(fvec4) GroupNonUniformFMul 35 InclusiveScan 280 - 282: 118(ptr) AccessChain 24(data) 25 276 115 - Store 282 281 - 283: 27(ptr) AccessChain 10(dti) 26 - 284: 6(int) Load 283 - 285: 27(ptr) AccessChain 10(dti) 26 - 286: 6(int) Load 285 - 287: 127(ptr) AccessChain 24(data) 25 286 115 26 - 288: 16(float) Load 287 - 289: 16(float) GroupNonUniformFMul 35 InclusiveScan 288 - 290: 127(ptr) AccessChain 24(data) 25 284 115 26 - Store 290 289 - 291: 27(ptr) AccessChain 10(dti) 26 - 292: 6(int) Load 291 - 293: 27(ptr) AccessChain 10(dti) 26 - 294: 6(int) Load 293 - 295: 118(ptr) AccessChain 24(data) 25 294 115 - 296: 17(fvec4) Load 295 - 297: 136(fvec2) VectorShuffle 296 296 0 1 - 298: 136(fvec2) GroupNonUniformFMul 35 InclusiveScan 297 - 299: 118(ptr) AccessChain 24(data) 25 292 115 - 300: 17(fvec4) Load 299 - 301: 17(fvec4) VectorShuffle 300 298 4 5 2 3 - Store 299 301 - 302: 27(ptr) AccessChain 10(dti) 26 - 303: 6(int) Load 302 - 304: 27(ptr) AccessChain 10(dti) 26 - 305: 6(int) Load 304 - 306: 118(ptr) AccessChain 24(data) 25 305 115 - 307: 17(fvec4) Load 306 - 308: 148(fvec3) VectorShuffle 307 307 0 1 2 - 309: 148(fvec3) GroupNonUniformFMul 35 InclusiveScan 308 - 310: 118(ptr) AccessChain 24(data) 25 303 115 - 311: 17(fvec4) Load 310 - 312: 17(fvec4) VectorShuffle 311 309 4 5 6 3 - Store 310 312 - 313: 27(ptr) AccessChain 10(dti) 26 - 314: 6(int) Load 313 - 315: 27(ptr) AccessChain 10(dti) 26 - 316: 6(int) Load 315 - 317: 161(ptr) AccessChain 24(data) 25 316 158 - 318: 19(f64vec4) Load 317 - 319: 19(f64vec4) GroupNonUniformFMul 35 InclusiveScan 318 - 320: 161(ptr) AccessChain 24(data) 25 314 158 - Store 320 319 - 321: 27(ptr) AccessChain 10(dti) 26 - 322: 6(int) Load 321 - 323: 27(ptr) AccessChain 10(dti) 26 - 324: 6(int) Load 323 - 325: 170(ptr) AccessChain 24(data) 25 324 158 26 - 326:18(float64_t) Load 325 - 327:18(float64_t) GroupNonUniformFMul 35 InclusiveScan 326 - 328: 170(ptr) AccessChain 24(data) 25 322 158 26 - Store 328 327 + 279: 81(ptr) AccessChain 24(data) 25 278 78 + 280: 15(ivec4) Load 279 + 281: 99(ivec2) VectorShuffle 280 280 0 1 + 282: 99(ivec2) GroupNonUniformIMul 35 InclusiveScan 281 + 283: 90(ptr) AccessChain 24(data) 25 276 78 26 + 284: 14(int) CompositeExtract 282 0 + Store 283 284 + 285: 90(ptr) AccessChain 24(data) 25 276 78 58 + 286: 14(int) CompositeExtract 282 1 + Store 285 286 + 287: 27(ptr) AccessChain 10(dti) 26 + 288: 6(int) Load 287 + 289: 27(ptr) AccessChain 10(dti) 26 + 290: 6(int) Load 289 + 291: 81(ptr) AccessChain 24(data) 25 290 78 + 292: 15(ivec4) Load 291 + 293: 112(ivec3) VectorShuffle 292 292 0 1 2 + 294: 112(ivec3) GroupNonUniformIMul 35 InclusiveScan 293 + 295: 90(ptr) AccessChain 24(data) 25 288 78 26 + 296: 14(int) CompositeExtract 294 0 + Store 295 296 + 297: 90(ptr) AccessChain 24(data) 25 288 78 58 + 298: 14(int) CompositeExtract 294 1 + Store 297 298 + 299: 90(ptr) AccessChain 24(data) 25 288 78 73 + 300: 14(int) CompositeExtract 294 2 + Store 299 300 + 301: 27(ptr) AccessChain 10(dti) 26 + 302: 6(int) Load 301 + 303: 27(ptr) AccessChain 10(dti) 26 + 304: 6(int) Load 303 + 305: 128(ptr) AccessChain 24(data) 25 304 125 + 306: 17(fvec4) Load 305 + 307: 17(fvec4) GroupNonUniformFMul 35 InclusiveScan 306 + 308: 128(ptr) AccessChain 24(data) 25 302 125 + Store 308 307 + 309: 27(ptr) AccessChain 10(dti) 26 + 310: 6(int) Load 309 + 311: 27(ptr) AccessChain 10(dti) 26 + 312: 6(int) Load 311 + 313: 137(ptr) AccessChain 24(data) 25 312 125 26 + 314: 16(float) Load 313 + 315: 16(float) GroupNonUniformFMul 35 InclusiveScan 314 + 316: 137(ptr) AccessChain 24(data) 25 310 125 26 + Store 316 315 + 317: 27(ptr) AccessChain 10(dti) 26 + 318: 6(int) Load 317 + 319: 27(ptr) AccessChain 10(dti) 26 + 320: 6(int) Load 319 + 321: 128(ptr) AccessChain 24(data) 25 320 125 + 322: 17(fvec4) Load 321 + 323: 146(fvec2) VectorShuffle 322 322 0 1 + 324: 146(fvec2) GroupNonUniformFMul 35 InclusiveScan 323 + 325: 137(ptr) AccessChain 24(data) 25 318 125 26 + 326: 16(float) CompositeExtract 324 0 + Store 325 326 + 327: 137(ptr) AccessChain 24(data) 25 318 125 58 + 328: 16(float) CompositeExtract 324 1 + Store 327 328 329: 27(ptr) AccessChain 10(dti) 26 330: 6(int) Load 329 331: 27(ptr) AccessChain 10(dti) 26 332: 6(int) Load 331 - 333: 161(ptr) AccessChain 24(data) 25 332 158 - 334: 19(f64vec4) Load 333 - 335:179(f64vec2) VectorShuffle 334 334 0 1 - 336:179(f64vec2) GroupNonUniformFMul 35 InclusiveScan 335 - 337: 161(ptr) AccessChain 24(data) 25 330 158 - 338: 19(f64vec4) Load 337 - 339: 19(f64vec4) VectorShuffle 338 336 4 5 2 3 - Store 337 339 - 340: 27(ptr) AccessChain 10(dti) 26 - 341: 6(int) Load 340 - 342: 27(ptr) AccessChain 10(dti) 26 - 343: 6(int) Load 342 - 344: 161(ptr) AccessChain 24(data) 25 343 158 - 345: 19(f64vec4) Load 344 - 346:191(f64vec3) VectorShuffle 345 345 0 1 2 - 347:191(f64vec3) GroupNonUniformFMul 35 InclusiveScan 346 - 348: 161(ptr) AccessChain 24(data) 25 341 158 - 349: 19(f64vec4) Load 348 - 350: 19(f64vec4) VectorShuffle 349 347 4 5 6 3 - Store 348 350 + 333: 128(ptr) AccessChain 24(data) 25 332 125 + 334: 17(fvec4) Load 333 + 335: 159(fvec3) VectorShuffle 334 334 0 1 2 + 336: 159(fvec3) GroupNonUniformFMul 35 InclusiveScan 335 + 337: 137(ptr) AccessChain 24(data) 25 330 125 26 + 338: 16(float) CompositeExtract 336 0 + Store 337 338 + 339: 137(ptr) AccessChain 24(data) 25 330 125 58 + 340: 16(float) CompositeExtract 336 1 + Store 339 340 + 341: 137(ptr) AccessChain 24(data) 25 330 125 73 + 342: 16(float) CompositeExtract 336 2 + Store 341 342 + 343: 27(ptr) AccessChain 10(dti) 26 + 344: 6(int) Load 343 + 345: 27(ptr) AccessChain 10(dti) 26 + 346: 6(int) Load 345 + 347: 175(ptr) AccessChain 24(data) 25 346 172 + 348: 19(f64vec4) Load 347 + 349: 19(f64vec4) GroupNonUniformFMul 35 InclusiveScan 348 + 350: 175(ptr) AccessChain 24(data) 25 344 172 + Store 350 349 351: 27(ptr) AccessChain 10(dti) 26 352: 6(int) Load 351 353: 27(ptr) AccessChain 10(dti) 26 354: 6(int) Load 353 - 355: 42(ptr) AccessChain 24(data) 25 354 25 26 - 356: 6(int) Load 355 - 358: 357(bool) IEqual 356 26 - 359: 13(ivec4) GroupNonUniformBallot 35 358 - 360: 6(int) GroupNonUniformBallotBitCount 35 InclusiveScan 359 - 361: 42(ptr) AccessChain 24(data) 25 352 25 26 - Store 361 360 + 355: 184(ptr) AccessChain 24(data) 25 354 172 26 + 356:18(float64_t) Load 355 + 357:18(float64_t) GroupNonUniformFMul 35 InclusiveScan 356 + 358: 184(ptr) AccessChain 24(data) 25 352 172 26 + Store 358 357 + 359: 27(ptr) AccessChain 10(dti) 26 + 360: 6(int) Load 359 + 361: 27(ptr) AccessChain 10(dti) 26 + 362: 6(int) Load 361 + 363: 175(ptr) AccessChain 24(data) 25 362 172 + 364: 19(f64vec4) Load 363 + 365:193(f64vec2) VectorShuffle 364 364 0 1 + 366:193(f64vec2) GroupNonUniformFMul 35 InclusiveScan 365 + 367: 184(ptr) AccessChain 24(data) 25 360 172 26 + 368:18(float64_t) CompositeExtract 366 0 + Store 367 368 + 369: 184(ptr) AccessChain 24(data) 25 360 172 58 + 370:18(float64_t) CompositeExtract 366 1 + Store 369 370 + 371: 27(ptr) AccessChain 10(dti) 26 + 372: 6(int) Load 371 + 373: 27(ptr) AccessChain 10(dti) 26 + 374: 6(int) Load 373 + 375: 175(ptr) AccessChain 24(data) 25 374 172 + 376: 19(f64vec4) Load 375 + 377:206(f64vec3) VectorShuffle 376 376 0 1 2 + 378:206(f64vec3) GroupNonUniformFMul 35 InclusiveScan 377 + 379: 184(ptr) AccessChain 24(data) 25 372 172 26 + 380:18(float64_t) CompositeExtract 378 0 + Store 379 380 + 381: 184(ptr) AccessChain 24(data) 25 372 172 58 + 382:18(float64_t) CompositeExtract 378 1 + Store 381 382 + 383: 184(ptr) AccessChain 24(data) 25 372 172 73 + 384:18(float64_t) CompositeExtract 378 2 + Store 383 384 + 385: 27(ptr) AccessChain 10(dti) 26 + 386: 6(int) Load 385 + 387: 27(ptr) AccessChain 10(dti) 26 + 388: 6(int) Load 387 + 389: 42(ptr) AccessChain 24(data) 25 388 25 26 + 390: 6(int) Load 389 + 392: 391(bool) IEqual 390 26 + 393: 13(ivec4) GroupNonUniformBallot 35 392 + 394: 6(int) GroupNonUniformBallotBitCount 35 InclusiveScan 393 + 395: 42(ptr) AccessChain 24(data) 25 386 25 26 + Store 395 394 Return FunctionEnd diff --git a/Test/baseResults/hlsl.wavequad.comp.out b/Test/baseResults/hlsl.wavequad.comp.out index 1647c7dfe6..e4311c7466 100644 --- a/Test/baseResults/hlsl.wavequad.comp.out +++ b/Test/baseResults/hlsl.wavequad.comp.out @@ -8027,7 +8027,7 @@ local_size = (32, 16, 1) // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 1120 +// Id's are bound by 1232 Capability Shader Capability Float64 @@ -8035,7 +8035,7 @@ local_size = (32, 16, 1) Capability GroupNonUniformQuad 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "CSMain" 1115 + EntryPoint GLCompute 4 "CSMain" 1227 ExecutionMode 4 LocalSize 32 16 1 Source HLSL 500 Name 4 "CSMain" @@ -8049,9 +8049,9 @@ local_size = (32, 16, 1) Name 22 "data" MemberName 22(data) 0 "@data" Name 24 "data" - Name 1113 "dti" - Name 1115 "dti" - Name 1117 "param" + Name 1225 "dti" + Name 1227 "dti" + Name 1229 "param" MemberDecorate 20(Types) 0 Offset 0 MemberDecorate 20(Types) 1 Offset 16 MemberDecorate 20(Types) 2 Offset 32 @@ -8061,7 +8061,7 @@ local_size = (32, 16, 1) Decorate 22(data) BufferBlock Decorate 24(data) DescriptorSet 0 Decorate 24(data) Binding 0 - Decorate 1115(dti) BuiltIn GlobalInvocationId + Decorate 1227(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -8087,34 +8087,34 @@ local_size = (32, 16, 1) 35: 6(int) Constant 3 42: TypePointer Uniform 6(int) 51: TypeVector 6(int) 2 - 72: 14(int) Constant 1 - 75: TypePointer Uniform 15(ivec4) - 84: TypePointer Uniform 14(int) - 93: TypeVector 14(int) 2 - 105: TypeVector 14(int) 3 - 115: 14(int) Constant 2 - 118: TypePointer Uniform 17(fvec4) - 127: TypePointer Uniform 16(float) - 136: TypeVector 16(float) 2 - 148: TypeVector 16(float) 3 - 158: 14(int) Constant 3 - 161: TypePointer Uniform 19(f64vec4) - 170: TypePointer Uniform 18(float64_t) - 179: TypeVector 18(float64_t) 2 - 191: TypeVector 18(float64_t) 3 - 205: 6(int) Constant 1 - 358: 6(int) Constant 2 - 1114: TypePointer Input 7(ivec3) - 1115(dti): 1114(ptr) Variable Input + 58: 6(int) Constant 1 + 73: 6(int) Constant 2 + 78: 14(int) Constant 1 + 81: TypePointer Uniform 15(ivec4) + 90: TypePointer Uniform 14(int) + 99: TypeVector 14(int) 2 + 112: TypeVector 14(int) 3 + 125: 14(int) Constant 2 + 128: TypePointer Uniform 17(fvec4) + 137: TypePointer Uniform 16(float) + 146: TypeVector 16(float) 2 + 159: TypeVector 16(float) 3 + 172: 14(int) Constant 3 + 175: TypePointer Uniform 19(f64vec4) + 184: TypePointer Uniform 18(float64_t) + 193: TypeVector 18(float64_t) 2 + 206: TypeVector 18(float64_t) 3 + 1226: TypePointer Input 7(ivec3) + 1227(dti): 1226(ptr) Variable Input 4(CSMain): 2 Function None 3 5: Label - 1113(dti): 8(ptr) Variable Function - 1117(param): 8(ptr) Variable Function - 1116: 7(ivec3) Load 1115(dti) - Store 1113(dti) 1116 - 1118: 7(ivec3) Load 1113(dti) - Store 1117(param) 1118 - 1119: 2 FunctionCall 11(@CSMain(vu3;) 1117(param) + 1225(dti): 8(ptr) Variable Function + 1229(param): 8(ptr) Variable Function + 1228: 7(ivec3) Load 1227(dti) + Store 1225(dti) 1228 + 1230: 7(ivec3) Load 1225(dti) + Store 1229(param) 1230 + 1231: 2 FunctionCall 11(@CSMain(vu3;) 1229(param) Return FunctionEnd 11(@CSMain(vu3;): 2 Function None 9 @@ -8146,1155 +8146,1351 @@ local_size = (32, 16, 1) 53: 13(ivec4) Load 52 54: 51(ivec2) VectorShuffle 53 53 0 1 55: 51(ivec2) GroupNonUniformQuadBroadcast 35 54 26 - 56: 32(ptr) AccessChain 24(data) 25 48 25 - 57: 13(ivec4) Load 56 - 58: 13(ivec4) VectorShuffle 57 55 4 5 2 3 - Store 56 58 - 59: 27(ptr) AccessChain 10(dti) 26 - 60: 6(int) Load 59 + 56: 42(ptr) AccessChain 24(data) 25 48 25 26 + 57: 6(int) CompositeExtract 55 0 + Store 56 57 + 59: 42(ptr) AccessChain 24(data) 25 48 25 58 + 60: 6(int) CompositeExtract 55 1 + Store 59 60 61: 27(ptr) AccessChain 10(dti) 26 62: 6(int) Load 61 - 63: 32(ptr) AccessChain 24(data) 25 62 25 - 64: 13(ivec4) Load 63 - 65: 7(ivec3) VectorShuffle 64 64 0 1 2 - 66: 7(ivec3) GroupNonUniformQuadBroadcast 35 65 26 - 67: 32(ptr) AccessChain 24(data) 25 60 25 - 68: 13(ivec4) Load 67 - 69: 13(ivec4) VectorShuffle 68 66 4 5 6 3 - Store 67 69 - 70: 27(ptr) AccessChain 10(dti) 26 - 71: 6(int) Load 70 - 73: 27(ptr) AccessChain 10(dti) 26 - 74: 6(int) Load 73 - 76: 75(ptr) AccessChain 24(data) 25 74 72 - 77: 15(ivec4) Load 76 - 78: 15(ivec4) GroupNonUniformQuadBroadcast 35 77 26 - 79: 75(ptr) AccessChain 24(data) 25 71 72 - Store 79 78 - 80: 27(ptr) AccessChain 10(dti) 26 - 81: 6(int) Load 80 - 82: 27(ptr) AccessChain 10(dti) 26 - 83: 6(int) Load 82 - 85: 84(ptr) AccessChain 24(data) 25 83 72 26 - 86: 14(int) Load 85 - 87: 14(int) GroupNonUniformQuadBroadcast 35 86 26 - 88: 84(ptr) AccessChain 24(data) 25 81 72 26 - Store 88 87 - 89: 27(ptr) AccessChain 10(dti) 26 - 90: 6(int) Load 89 - 91: 27(ptr) AccessChain 10(dti) 26 - 92: 6(int) Load 91 - 94: 75(ptr) AccessChain 24(data) 25 92 72 - 95: 15(ivec4) Load 94 - 96: 93(ivec2) VectorShuffle 95 95 0 1 - 97: 93(ivec2) GroupNonUniformQuadBroadcast 35 96 26 - 98: 75(ptr) AccessChain 24(data) 25 90 72 - 99: 15(ivec4) Load 98 - 100: 15(ivec4) VectorShuffle 99 97 4 5 2 3 - Store 98 100 - 101: 27(ptr) AccessChain 10(dti) 26 - 102: 6(int) Load 101 - 103: 27(ptr) AccessChain 10(dti) 26 - 104: 6(int) Load 103 - 106: 75(ptr) AccessChain 24(data) 25 104 72 - 107: 15(ivec4) Load 106 - 108: 105(ivec3) VectorShuffle 107 107 0 1 2 - 109: 105(ivec3) GroupNonUniformQuadBroadcast 35 108 26 - 110: 75(ptr) AccessChain 24(data) 25 102 72 - 111: 15(ivec4) Load 110 - 112: 15(ivec4) VectorShuffle 111 109 4 5 6 3 - Store 110 112 - 113: 27(ptr) AccessChain 10(dti) 26 - 114: 6(int) Load 113 - 116: 27(ptr) AccessChain 10(dti) 26 - 117: 6(int) Load 116 - 119: 118(ptr) AccessChain 24(data) 25 117 115 - 120: 17(fvec4) Load 119 - 121: 17(fvec4) GroupNonUniformQuadBroadcast 35 120 26 - 122: 118(ptr) AccessChain 24(data) 25 114 115 - Store 122 121 + 63: 27(ptr) AccessChain 10(dti) 26 + 64: 6(int) Load 63 + 65: 32(ptr) AccessChain 24(data) 25 64 25 + 66: 13(ivec4) Load 65 + 67: 7(ivec3) VectorShuffle 66 66 0 1 2 + 68: 7(ivec3) GroupNonUniformQuadBroadcast 35 67 26 + 69: 42(ptr) AccessChain 24(data) 25 62 25 26 + 70: 6(int) CompositeExtract 68 0 + Store 69 70 + 71: 42(ptr) AccessChain 24(data) 25 62 25 58 + 72: 6(int) CompositeExtract 68 1 + Store 71 72 + 74: 42(ptr) AccessChain 24(data) 25 62 25 73 + 75: 6(int) CompositeExtract 68 2 + Store 74 75 + 76: 27(ptr) AccessChain 10(dti) 26 + 77: 6(int) Load 76 + 79: 27(ptr) AccessChain 10(dti) 26 + 80: 6(int) Load 79 + 82: 81(ptr) AccessChain 24(data) 25 80 78 + 83: 15(ivec4) Load 82 + 84: 15(ivec4) GroupNonUniformQuadBroadcast 35 83 26 + 85: 81(ptr) AccessChain 24(data) 25 77 78 + Store 85 84 + 86: 27(ptr) AccessChain 10(dti) 26 + 87: 6(int) Load 86 + 88: 27(ptr) AccessChain 10(dti) 26 + 89: 6(int) Load 88 + 91: 90(ptr) AccessChain 24(data) 25 89 78 26 + 92: 14(int) Load 91 + 93: 14(int) GroupNonUniformQuadBroadcast 35 92 26 + 94: 90(ptr) AccessChain 24(data) 25 87 78 26 + Store 94 93 + 95: 27(ptr) AccessChain 10(dti) 26 + 96: 6(int) Load 95 + 97: 27(ptr) AccessChain 10(dti) 26 + 98: 6(int) Load 97 + 100: 81(ptr) AccessChain 24(data) 25 98 78 + 101: 15(ivec4) Load 100 + 102: 99(ivec2) VectorShuffle 101 101 0 1 + 103: 99(ivec2) GroupNonUniformQuadBroadcast 35 102 26 + 104: 90(ptr) AccessChain 24(data) 25 96 78 26 + 105: 14(int) CompositeExtract 103 0 + Store 104 105 + 106: 90(ptr) AccessChain 24(data) 25 96 78 58 + 107: 14(int) CompositeExtract 103 1 + Store 106 107 + 108: 27(ptr) AccessChain 10(dti) 26 + 109: 6(int) Load 108 + 110: 27(ptr) AccessChain 10(dti) 26 + 111: 6(int) Load 110 + 113: 81(ptr) AccessChain 24(data) 25 111 78 + 114: 15(ivec4) Load 113 + 115: 112(ivec3) VectorShuffle 114 114 0 1 2 + 116: 112(ivec3) GroupNonUniformQuadBroadcast 35 115 26 + 117: 90(ptr) AccessChain 24(data) 25 109 78 26 + 118: 14(int) CompositeExtract 116 0 + Store 117 118 + 119: 90(ptr) AccessChain 24(data) 25 109 78 58 + 120: 14(int) CompositeExtract 116 1 + Store 119 120 + 121: 90(ptr) AccessChain 24(data) 25 109 78 73 + 122: 14(int) CompositeExtract 116 2 + Store 121 122 123: 27(ptr) AccessChain 10(dti) 26 124: 6(int) Load 123 - 125: 27(ptr) AccessChain 10(dti) 26 - 126: 6(int) Load 125 - 128: 127(ptr) AccessChain 24(data) 25 126 115 26 - 129: 16(float) Load 128 - 130: 16(float) GroupNonUniformQuadBroadcast 35 129 26 - 131: 127(ptr) AccessChain 24(data) 25 124 115 26 - Store 131 130 - 132: 27(ptr) AccessChain 10(dti) 26 - 133: 6(int) Load 132 - 134: 27(ptr) AccessChain 10(dti) 26 - 135: 6(int) Load 134 - 137: 118(ptr) AccessChain 24(data) 25 135 115 - 138: 17(fvec4) Load 137 - 139: 136(fvec2) VectorShuffle 138 138 0 1 - 140: 136(fvec2) GroupNonUniformQuadBroadcast 35 139 26 - 141: 118(ptr) AccessChain 24(data) 25 133 115 - 142: 17(fvec4) Load 141 - 143: 17(fvec4) VectorShuffle 142 140 4 5 2 3 - Store 141 143 + 126: 27(ptr) AccessChain 10(dti) 26 + 127: 6(int) Load 126 + 129: 128(ptr) AccessChain 24(data) 25 127 125 + 130: 17(fvec4) Load 129 + 131: 17(fvec4) GroupNonUniformQuadBroadcast 35 130 26 + 132: 128(ptr) AccessChain 24(data) 25 124 125 + Store 132 131 + 133: 27(ptr) AccessChain 10(dti) 26 + 134: 6(int) Load 133 + 135: 27(ptr) AccessChain 10(dti) 26 + 136: 6(int) Load 135 + 138: 137(ptr) AccessChain 24(data) 25 136 125 26 + 139: 16(float) Load 138 + 140: 16(float) GroupNonUniformQuadBroadcast 35 139 26 + 141: 137(ptr) AccessChain 24(data) 25 134 125 26 + Store 141 140 + 142: 27(ptr) AccessChain 10(dti) 26 + 143: 6(int) Load 142 144: 27(ptr) AccessChain 10(dti) 26 145: 6(int) Load 144 - 146: 27(ptr) AccessChain 10(dti) 26 - 147: 6(int) Load 146 - 149: 118(ptr) AccessChain 24(data) 25 147 115 - 150: 17(fvec4) Load 149 - 151: 148(fvec3) VectorShuffle 150 150 0 1 2 - 152: 148(fvec3) GroupNonUniformQuadBroadcast 35 151 26 - 153: 118(ptr) AccessChain 24(data) 25 145 115 - 154: 17(fvec4) Load 153 - 155: 17(fvec4) VectorShuffle 154 152 4 5 6 3 - Store 153 155 - 156: 27(ptr) AccessChain 10(dti) 26 - 157: 6(int) Load 156 - 159: 27(ptr) AccessChain 10(dti) 26 - 160: 6(int) Load 159 - 162: 161(ptr) AccessChain 24(data) 25 160 158 - 163: 19(f64vec4) Load 162 - 164: 19(f64vec4) GroupNonUniformQuadBroadcast 35 163 26 - 165: 161(ptr) AccessChain 24(data) 25 157 158 - Store 165 164 - 166: 27(ptr) AccessChain 10(dti) 26 - 167: 6(int) Load 166 - 168: 27(ptr) AccessChain 10(dti) 26 - 169: 6(int) Load 168 - 171: 170(ptr) AccessChain 24(data) 25 169 158 26 - 172:18(float64_t) Load 171 - 173:18(float64_t) GroupNonUniformQuadBroadcast 35 172 26 - 174: 170(ptr) AccessChain 24(data) 25 167 158 26 - Store 174 173 - 175: 27(ptr) AccessChain 10(dti) 26 - 176: 6(int) Load 175 - 177: 27(ptr) AccessChain 10(dti) 26 - 178: 6(int) Load 177 - 180: 161(ptr) AccessChain 24(data) 25 178 158 - 181: 19(f64vec4) Load 180 - 182:179(f64vec2) VectorShuffle 181 181 0 1 - 183:179(f64vec2) GroupNonUniformQuadBroadcast 35 182 26 - 184: 161(ptr) AccessChain 24(data) 25 176 158 - 185: 19(f64vec4) Load 184 - 186: 19(f64vec4) VectorShuffle 185 183 4 5 2 3 - Store 184 186 - 187: 27(ptr) AccessChain 10(dti) 26 - 188: 6(int) Load 187 + 147: 128(ptr) AccessChain 24(data) 25 145 125 + 148: 17(fvec4) Load 147 + 149: 146(fvec2) VectorShuffle 148 148 0 1 + 150: 146(fvec2) GroupNonUniformQuadBroadcast 35 149 26 + 151: 137(ptr) AccessChain 24(data) 25 143 125 26 + 152: 16(float) CompositeExtract 150 0 + Store 151 152 + 153: 137(ptr) AccessChain 24(data) 25 143 125 58 + 154: 16(float) CompositeExtract 150 1 + Store 153 154 + 155: 27(ptr) AccessChain 10(dti) 26 + 156: 6(int) Load 155 + 157: 27(ptr) AccessChain 10(dti) 26 + 158: 6(int) Load 157 + 160: 128(ptr) AccessChain 24(data) 25 158 125 + 161: 17(fvec4) Load 160 + 162: 159(fvec3) VectorShuffle 161 161 0 1 2 + 163: 159(fvec3) GroupNonUniformQuadBroadcast 35 162 26 + 164: 137(ptr) AccessChain 24(data) 25 156 125 26 + 165: 16(float) CompositeExtract 163 0 + Store 164 165 + 166: 137(ptr) AccessChain 24(data) 25 156 125 58 + 167: 16(float) CompositeExtract 163 1 + Store 166 167 + 168: 137(ptr) AccessChain 24(data) 25 156 125 73 + 169: 16(float) CompositeExtract 163 2 + Store 168 169 + 170: 27(ptr) AccessChain 10(dti) 26 + 171: 6(int) Load 170 + 173: 27(ptr) AccessChain 10(dti) 26 + 174: 6(int) Load 173 + 176: 175(ptr) AccessChain 24(data) 25 174 172 + 177: 19(f64vec4) Load 176 + 178: 19(f64vec4) GroupNonUniformQuadBroadcast 35 177 26 + 179: 175(ptr) AccessChain 24(data) 25 171 172 + Store 179 178 + 180: 27(ptr) AccessChain 10(dti) 26 + 181: 6(int) Load 180 + 182: 27(ptr) AccessChain 10(dti) 26 + 183: 6(int) Load 182 + 185: 184(ptr) AccessChain 24(data) 25 183 172 26 + 186:18(float64_t) Load 185 + 187:18(float64_t) GroupNonUniformQuadBroadcast 35 186 26 + 188: 184(ptr) AccessChain 24(data) 25 181 172 26 + Store 188 187 189: 27(ptr) AccessChain 10(dti) 26 190: 6(int) Load 189 - 192: 161(ptr) AccessChain 24(data) 25 190 158 - 193: 19(f64vec4) Load 192 - 194:191(f64vec3) VectorShuffle 193 193 0 1 2 - 195:191(f64vec3) GroupNonUniformQuadBroadcast 35 194 26 - 196: 161(ptr) AccessChain 24(data) 25 188 158 - 197: 19(f64vec4) Load 196 - 198: 19(f64vec4) VectorShuffle 197 195 4 5 6 3 - Store 196 198 - 199: 27(ptr) AccessChain 10(dti) 26 - 200: 6(int) Load 199 - 201: 27(ptr) AccessChain 10(dti) 26 - 202: 6(int) Load 201 - 203: 32(ptr) AccessChain 24(data) 25 202 25 - 204: 13(ivec4) Load 203 - 206: 13(ivec4) GroupNonUniformQuadBroadcast 35 204 205 - 207: 32(ptr) AccessChain 24(data) 25 200 25 - Store 207 206 - 208: 27(ptr) AccessChain 10(dti) 26 - 209: 6(int) Load 208 - 210: 27(ptr) AccessChain 10(dti) 26 - 211: 6(int) Load 210 - 212: 42(ptr) AccessChain 24(data) 25 211 25 26 - 213: 6(int) Load 212 - 214: 6(int) GroupNonUniformQuadBroadcast 35 213 205 - 215: 42(ptr) AccessChain 24(data) 25 209 25 26 - Store 215 214 - 216: 27(ptr) AccessChain 10(dti) 26 - 217: 6(int) Load 216 - 218: 27(ptr) AccessChain 10(dti) 26 - 219: 6(int) Load 218 - 220: 32(ptr) AccessChain 24(data) 25 219 25 - 221: 13(ivec4) Load 220 - 222: 51(ivec2) VectorShuffle 221 221 0 1 - 223: 51(ivec2) GroupNonUniformQuadBroadcast 35 222 205 - 224: 32(ptr) AccessChain 24(data) 25 217 25 - 225: 13(ivec4) Load 224 - 226: 13(ivec4) VectorShuffle 225 223 4 5 2 3 - Store 224 226 + 191: 27(ptr) AccessChain 10(dti) 26 + 192: 6(int) Load 191 + 194: 175(ptr) AccessChain 24(data) 25 192 172 + 195: 19(f64vec4) Load 194 + 196:193(f64vec2) VectorShuffle 195 195 0 1 + 197:193(f64vec2) GroupNonUniformQuadBroadcast 35 196 26 + 198: 184(ptr) AccessChain 24(data) 25 190 172 26 + 199:18(float64_t) CompositeExtract 197 0 + Store 198 199 + 200: 184(ptr) AccessChain 24(data) 25 190 172 58 + 201:18(float64_t) CompositeExtract 197 1 + Store 200 201 + 202: 27(ptr) AccessChain 10(dti) 26 + 203: 6(int) Load 202 + 204: 27(ptr) AccessChain 10(dti) 26 + 205: 6(int) Load 204 + 207: 175(ptr) AccessChain 24(data) 25 205 172 + 208: 19(f64vec4) Load 207 + 209:206(f64vec3) VectorShuffle 208 208 0 1 2 + 210:206(f64vec3) GroupNonUniformQuadBroadcast 35 209 26 + 211: 184(ptr) AccessChain 24(data) 25 203 172 26 + 212:18(float64_t) CompositeExtract 210 0 + Store 211 212 + 213: 184(ptr) AccessChain 24(data) 25 203 172 58 + 214:18(float64_t) CompositeExtract 210 1 + Store 213 214 + 215: 184(ptr) AccessChain 24(data) 25 203 172 73 + 216:18(float64_t) CompositeExtract 210 2 + Store 215 216 + 217: 27(ptr) AccessChain 10(dti) 26 + 218: 6(int) Load 217 + 219: 27(ptr) AccessChain 10(dti) 26 + 220: 6(int) Load 219 + 221: 32(ptr) AccessChain 24(data) 25 220 25 + 222: 13(ivec4) Load 221 + 223: 13(ivec4) GroupNonUniformQuadBroadcast 35 222 58 + 224: 32(ptr) AccessChain 24(data) 25 218 25 + Store 224 223 + 225: 27(ptr) AccessChain 10(dti) 26 + 226: 6(int) Load 225 227: 27(ptr) AccessChain 10(dti) 26 228: 6(int) Load 227 - 229: 27(ptr) AccessChain 10(dti) 26 + 229: 42(ptr) AccessChain 24(data) 25 228 25 26 230: 6(int) Load 229 - 231: 32(ptr) AccessChain 24(data) 25 230 25 - 232: 13(ivec4) Load 231 - 233: 7(ivec3) VectorShuffle 232 232 0 1 2 - 234: 7(ivec3) GroupNonUniformQuadBroadcast 35 233 205 - 235: 32(ptr) AccessChain 24(data) 25 228 25 - 236: 13(ivec4) Load 235 - 237: 13(ivec4) VectorShuffle 236 234 4 5 6 3 - Store 235 237 - 238: 27(ptr) AccessChain 10(dti) 26 - 239: 6(int) Load 238 - 240: 27(ptr) AccessChain 10(dti) 26 - 241: 6(int) Load 240 - 242: 75(ptr) AccessChain 24(data) 25 241 72 - 243: 15(ivec4) Load 242 - 244: 15(ivec4) GroupNonUniformQuadBroadcast 35 243 205 - 245: 75(ptr) AccessChain 24(data) 25 239 72 - Store 245 244 - 246: 27(ptr) AccessChain 10(dti) 26 - 247: 6(int) Load 246 - 248: 27(ptr) AccessChain 10(dti) 26 - 249: 6(int) Load 248 - 250: 84(ptr) AccessChain 24(data) 25 249 72 26 - 251: 14(int) Load 250 - 252: 14(int) GroupNonUniformQuadBroadcast 35 251 205 - 253: 84(ptr) AccessChain 24(data) 25 247 72 26 - Store 253 252 - 254: 27(ptr) AccessChain 10(dti) 26 - 255: 6(int) Load 254 - 256: 27(ptr) AccessChain 10(dti) 26 - 257: 6(int) Load 256 - 258: 75(ptr) AccessChain 24(data) 25 257 72 - 259: 15(ivec4) Load 258 - 260: 93(ivec2) VectorShuffle 259 259 0 1 - 261: 93(ivec2) GroupNonUniformQuadBroadcast 35 260 205 - 262: 75(ptr) AccessChain 24(data) 25 255 72 - 263: 15(ivec4) Load 262 - 264: 15(ivec4) VectorShuffle 263 261 4 5 2 3 - Store 262 264 - 265: 27(ptr) AccessChain 10(dti) 26 - 266: 6(int) Load 265 + 231: 6(int) GroupNonUniformQuadBroadcast 35 230 58 + 232: 42(ptr) AccessChain 24(data) 25 226 25 26 + Store 232 231 + 233: 27(ptr) AccessChain 10(dti) 26 + 234: 6(int) Load 233 + 235: 27(ptr) AccessChain 10(dti) 26 + 236: 6(int) Load 235 + 237: 32(ptr) AccessChain 24(data) 25 236 25 + 238: 13(ivec4) Load 237 + 239: 51(ivec2) VectorShuffle 238 238 0 1 + 240: 51(ivec2) GroupNonUniformQuadBroadcast 35 239 58 + 241: 42(ptr) AccessChain 24(data) 25 234 25 26 + 242: 6(int) CompositeExtract 240 0 + Store 241 242 + 243: 42(ptr) AccessChain 24(data) 25 234 25 58 + 244: 6(int) CompositeExtract 240 1 + Store 243 244 + 245: 27(ptr) AccessChain 10(dti) 26 + 246: 6(int) Load 245 + 247: 27(ptr) AccessChain 10(dti) 26 + 248: 6(int) Load 247 + 249: 32(ptr) AccessChain 24(data) 25 248 25 + 250: 13(ivec4) Load 249 + 251: 7(ivec3) VectorShuffle 250 250 0 1 2 + 252: 7(ivec3) GroupNonUniformQuadBroadcast 35 251 58 + 253: 42(ptr) AccessChain 24(data) 25 246 25 26 + 254: 6(int) CompositeExtract 252 0 + Store 253 254 + 255: 42(ptr) AccessChain 24(data) 25 246 25 58 + 256: 6(int) CompositeExtract 252 1 + Store 255 256 + 257: 42(ptr) AccessChain 24(data) 25 246 25 73 + 258: 6(int) CompositeExtract 252 2 + Store 257 258 + 259: 27(ptr) AccessChain 10(dti) 26 + 260: 6(int) Load 259 + 261: 27(ptr) AccessChain 10(dti) 26 + 262: 6(int) Load 261 + 263: 81(ptr) AccessChain 24(data) 25 262 78 + 264: 15(ivec4) Load 263 + 265: 15(ivec4) GroupNonUniformQuadBroadcast 35 264 58 + 266: 81(ptr) AccessChain 24(data) 25 260 78 + Store 266 265 267: 27(ptr) AccessChain 10(dti) 26 268: 6(int) Load 267 - 269: 75(ptr) AccessChain 24(data) 25 268 72 - 270: 15(ivec4) Load 269 - 271: 105(ivec3) VectorShuffle 270 270 0 1 2 - 272: 105(ivec3) GroupNonUniformQuadBroadcast 35 271 205 - 273: 75(ptr) AccessChain 24(data) 25 266 72 - 274: 15(ivec4) Load 273 - 275: 15(ivec4) VectorShuffle 274 272 4 5 6 3 - Store 273 275 - 276: 27(ptr) AccessChain 10(dti) 26 - 277: 6(int) Load 276 - 278: 27(ptr) AccessChain 10(dti) 26 - 279: 6(int) Load 278 - 280: 118(ptr) AccessChain 24(data) 25 279 115 - 281: 17(fvec4) Load 280 - 282: 17(fvec4) GroupNonUniformQuadBroadcast 35 281 205 - 283: 118(ptr) AccessChain 24(data) 25 277 115 - Store 283 282 - 284: 27(ptr) AccessChain 10(dti) 26 - 285: 6(int) Load 284 - 286: 27(ptr) AccessChain 10(dti) 26 - 287: 6(int) Load 286 - 288: 127(ptr) AccessChain 24(data) 25 287 115 26 - 289: 16(float) Load 288 - 290: 16(float) GroupNonUniformQuadBroadcast 35 289 205 - 291: 127(ptr) AccessChain 24(data) 25 285 115 26 - Store 291 290 - 292: 27(ptr) AccessChain 10(dti) 26 - 293: 6(int) Load 292 - 294: 27(ptr) AccessChain 10(dti) 26 - 295: 6(int) Load 294 - 296: 118(ptr) AccessChain 24(data) 25 295 115 - 297: 17(fvec4) Load 296 - 298: 136(fvec2) VectorShuffle 297 297 0 1 - 299: 136(fvec2) GroupNonUniformQuadBroadcast 35 298 205 - 300: 118(ptr) AccessChain 24(data) 25 293 115 - 301: 17(fvec4) Load 300 - 302: 17(fvec4) VectorShuffle 301 299 4 5 2 3 - Store 300 302 + 269: 27(ptr) AccessChain 10(dti) 26 + 270: 6(int) Load 269 + 271: 90(ptr) AccessChain 24(data) 25 270 78 26 + 272: 14(int) Load 271 + 273: 14(int) GroupNonUniformQuadBroadcast 35 272 58 + 274: 90(ptr) AccessChain 24(data) 25 268 78 26 + Store 274 273 + 275: 27(ptr) AccessChain 10(dti) 26 + 276: 6(int) Load 275 + 277: 27(ptr) AccessChain 10(dti) 26 + 278: 6(int) Load 277 + 279: 81(ptr) AccessChain 24(data) 25 278 78 + 280: 15(ivec4) Load 279 + 281: 99(ivec2) VectorShuffle 280 280 0 1 + 282: 99(ivec2) GroupNonUniformQuadBroadcast 35 281 58 + 283: 90(ptr) AccessChain 24(data) 25 276 78 26 + 284: 14(int) CompositeExtract 282 0 + Store 283 284 + 285: 90(ptr) AccessChain 24(data) 25 276 78 58 + 286: 14(int) CompositeExtract 282 1 + Store 285 286 + 287: 27(ptr) AccessChain 10(dti) 26 + 288: 6(int) Load 287 + 289: 27(ptr) AccessChain 10(dti) 26 + 290: 6(int) Load 289 + 291: 81(ptr) AccessChain 24(data) 25 290 78 + 292: 15(ivec4) Load 291 + 293: 112(ivec3) VectorShuffle 292 292 0 1 2 + 294: 112(ivec3) GroupNonUniformQuadBroadcast 35 293 58 + 295: 90(ptr) AccessChain 24(data) 25 288 78 26 + 296: 14(int) CompositeExtract 294 0 + Store 295 296 + 297: 90(ptr) AccessChain 24(data) 25 288 78 58 + 298: 14(int) CompositeExtract 294 1 + Store 297 298 + 299: 90(ptr) AccessChain 24(data) 25 288 78 73 + 300: 14(int) CompositeExtract 294 2 + Store 299 300 + 301: 27(ptr) AccessChain 10(dti) 26 + 302: 6(int) Load 301 303: 27(ptr) AccessChain 10(dti) 26 304: 6(int) Load 303 - 305: 27(ptr) AccessChain 10(dti) 26 - 306: 6(int) Load 305 - 307: 118(ptr) AccessChain 24(data) 25 306 115 - 308: 17(fvec4) Load 307 - 309: 148(fvec3) VectorShuffle 308 308 0 1 2 - 310: 148(fvec3) GroupNonUniformQuadBroadcast 35 309 205 - 311: 118(ptr) AccessChain 24(data) 25 304 115 - 312: 17(fvec4) Load 311 - 313: 17(fvec4) VectorShuffle 312 310 4 5 6 3 - Store 311 313 - 314: 27(ptr) AccessChain 10(dti) 26 - 315: 6(int) Load 314 - 316: 27(ptr) AccessChain 10(dti) 26 - 317: 6(int) Load 316 - 318: 161(ptr) AccessChain 24(data) 25 317 158 - 319: 19(f64vec4) Load 318 - 320: 19(f64vec4) GroupNonUniformQuadBroadcast 35 319 205 - 321: 161(ptr) AccessChain 24(data) 25 315 158 - Store 321 320 - 322: 27(ptr) AccessChain 10(dti) 26 - 323: 6(int) Load 322 - 324: 27(ptr) AccessChain 10(dti) 26 - 325: 6(int) Load 324 - 326: 170(ptr) AccessChain 24(data) 25 325 158 26 - 327:18(float64_t) Load 326 - 328:18(float64_t) GroupNonUniformQuadBroadcast 35 327 205 - 329: 170(ptr) AccessChain 24(data) 25 323 158 26 - Store 329 328 - 330: 27(ptr) AccessChain 10(dti) 26 - 331: 6(int) Load 330 - 332: 27(ptr) AccessChain 10(dti) 26 - 333: 6(int) Load 332 - 334: 161(ptr) AccessChain 24(data) 25 333 158 - 335: 19(f64vec4) Load 334 - 336:179(f64vec2) VectorShuffle 335 335 0 1 - 337:179(f64vec2) GroupNonUniformQuadBroadcast 35 336 205 - 338: 161(ptr) AccessChain 24(data) 25 331 158 - 339: 19(f64vec4) Load 338 - 340: 19(f64vec4) VectorShuffle 339 337 4 5 2 3 - Store 338 340 - 341: 27(ptr) AccessChain 10(dti) 26 - 342: 6(int) Load 341 + 305: 128(ptr) AccessChain 24(data) 25 304 125 + 306: 17(fvec4) Load 305 + 307: 17(fvec4) GroupNonUniformQuadBroadcast 35 306 58 + 308: 128(ptr) AccessChain 24(data) 25 302 125 + Store 308 307 + 309: 27(ptr) AccessChain 10(dti) 26 + 310: 6(int) Load 309 + 311: 27(ptr) AccessChain 10(dti) 26 + 312: 6(int) Load 311 + 313: 137(ptr) AccessChain 24(data) 25 312 125 26 + 314: 16(float) Load 313 + 315: 16(float) GroupNonUniformQuadBroadcast 35 314 58 + 316: 137(ptr) AccessChain 24(data) 25 310 125 26 + Store 316 315 + 317: 27(ptr) AccessChain 10(dti) 26 + 318: 6(int) Load 317 + 319: 27(ptr) AccessChain 10(dti) 26 + 320: 6(int) Load 319 + 321: 128(ptr) AccessChain 24(data) 25 320 125 + 322: 17(fvec4) Load 321 + 323: 146(fvec2) VectorShuffle 322 322 0 1 + 324: 146(fvec2) GroupNonUniformQuadBroadcast 35 323 58 + 325: 137(ptr) AccessChain 24(data) 25 318 125 26 + 326: 16(float) CompositeExtract 324 0 + Store 325 326 + 327: 137(ptr) AccessChain 24(data) 25 318 125 58 + 328: 16(float) CompositeExtract 324 1 + Store 327 328 + 329: 27(ptr) AccessChain 10(dti) 26 + 330: 6(int) Load 329 + 331: 27(ptr) AccessChain 10(dti) 26 + 332: 6(int) Load 331 + 333: 128(ptr) AccessChain 24(data) 25 332 125 + 334: 17(fvec4) Load 333 + 335: 159(fvec3) VectorShuffle 334 334 0 1 2 + 336: 159(fvec3) GroupNonUniformQuadBroadcast 35 335 58 + 337: 137(ptr) AccessChain 24(data) 25 330 125 26 + 338: 16(float) CompositeExtract 336 0 + Store 337 338 + 339: 137(ptr) AccessChain 24(data) 25 330 125 58 + 340: 16(float) CompositeExtract 336 1 + Store 339 340 + 341: 137(ptr) AccessChain 24(data) 25 330 125 73 + 342: 16(float) CompositeExtract 336 2 + Store 341 342 343: 27(ptr) AccessChain 10(dti) 26 344: 6(int) Load 343 - 345: 161(ptr) AccessChain 24(data) 25 344 158 - 346: 19(f64vec4) Load 345 - 347:191(f64vec3) VectorShuffle 346 346 0 1 2 - 348:191(f64vec3) GroupNonUniformQuadBroadcast 35 347 205 - 349: 161(ptr) AccessChain 24(data) 25 342 158 - 350: 19(f64vec4) Load 349 - 351: 19(f64vec4) VectorShuffle 350 348 4 5 6 3 - Store 349 351 - 352: 27(ptr) AccessChain 10(dti) 26 - 353: 6(int) Load 352 - 354: 27(ptr) AccessChain 10(dti) 26 - 355: 6(int) Load 354 - 356: 32(ptr) AccessChain 24(data) 25 355 25 - 357: 13(ivec4) Load 356 - 359: 13(ivec4) GroupNonUniformQuadBroadcast 35 357 358 - 360: 32(ptr) AccessChain 24(data) 25 353 25 - Store 360 359 + 345: 27(ptr) AccessChain 10(dti) 26 + 346: 6(int) Load 345 + 347: 175(ptr) AccessChain 24(data) 25 346 172 + 348: 19(f64vec4) Load 347 + 349: 19(f64vec4) GroupNonUniformQuadBroadcast 35 348 58 + 350: 175(ptr) AccessChain 24(data) 25 344 172 + Store 350 349 + 351: 27(ptr) AccessChain 10(dti) 26 + 352: 6(int) Load 351 + 353: 27(ptr) AccessChain 10(dti) 26 + 354: 6(int) Load 353 + 355: 184(ptr) AccessChain 24(data) 25 354 172 26 + 356:18(float64_t) Load 355 + 357:18(float64_t) GroupNonUniformQuadBroadcast 35 356 58 + 358: 184(ptr) AccessChain 24(data) 25 352 172 26 + Store 358 357 + 359: 27(ptr) AccessChain 10(dti) 26 + 360: 6(int) Load 359 361: 27(ptr) AccessChain 10(dti) 26 362: 6(int) Load 361 - 363: 27(ptr) AccessChain 10(dti) 26 - 364: 6(int) Load 363 - 365: 42(ptr) AccessChain 24(data) 25 364 25 26 - 366: 6(int) Load 365 - 367: 6(int) GroupNonUniformQuadBroadcast 35 366 358 - 368: 42(ptr) AccessChain 24(data) 25 362 25 26 - Store 368 367 - 369: 27(ptr) AccessChain 10(dti) 26 - 370: 6(int) Load 369 + 363: 175(ptr) AccessChain 24(data) 25 362 172 + 364: 19(f64vec4) Load 363 + 365:193(f64vec2) VectorShuffle 364 364 0 1 + 366:193(f64vec2) GroupNonUniformQuadBroadcast 35 365 58 + 367: 184(ptr) AccessChain 24(data) 25 360 172 26 + 368:18(float64_t) CompositeExtract 366 0 + Store 367 368 + 369: 184(ptr) AccessChain 24(data) 25 360 172 58 + 370:18(float64_t) CompositeExtract 366 1 + Store 369 370 371: 27(ptr) AccessChain 10(dti) 26 372: 6(int) Load 371 - 373: 32(ptr) AccessChain 24(data) 25 372 25 - 374: 13(ivec4) Load 373 - 375: 51(ivec2) VectorShuffle 374 374 0 1 - 376: 51(ivec2) GroupNonUniformQuadBroadcast 35 375 358 - 377: 32(ptr) AccessChain 24(data) 25 370 25 - 378: 13(ivec4) Load 377 - 379: 13(ivec4) VectorShuffle 378 376 4 5 2 3 - Store 377 379 - 380: 27(ptr) AccessChain 10(dti) 26 - 381: 6(int) Load 380 - 382: 27(ptr) AccessChain 10(dti) 26 - 383: 6(int) Load 382 - 384: 32(ptr) AccessChain 24(data) 25 383 25 - 385: 13(ivec4) Load 384 - 386: 7(ivec3) VectorShuffle 385 385 0 1 2 - 387: 7(ivec3) GroupNonUniformQuadBroadcast 35 386 358 - 388: 32(ptr) AccessChain 24(data) 25 381 25 - 389: 13(ivec4) Load 388 - 390: 13(ivec4) VectorShuffle 389 387 4 5 6 3 - Store 388 390 - 391: 27(ptr) AccessChain 10(dti) 26 - 392: 6(int) Load 391 + 373: 27(ptr) AccessChain 10(dti) 26 + 374: 6(int) Load 373 + 375: 175(ptr) AccessChain 24(data) 25 374 172 + 376: 19(f64vec4) Load 375 + 377:206(f64vec3) VectorShuffle 376 376 0 1 2 + 378:206(f64vec3) GroupNonUniformQuadBroadcast 35 377 58 + 379: 184(ptr) AccessChain 24(data) 25 372 172 26 + 380:18(float64_t) CompositeExtract 378 0 + Store 379 380 + 381: 184(ptr) AccessChain 24(data) 25 372 172 58 + 382:18(float64_t) CompositeExtract 378 1 + Store 381 382 + 383: 184(ptr) AccessChain 24(data) 25 372 172 73 + 384:18(float64_t) CompositeExtract 378 2 + Store 383 384 + 385: 27(ptr) AccessChain 10(dti) 26 + 386: 6(int) Load 385 + 387: 27(ptr) AccessChain 10(dti) 26 + 388: 6(int) Load 387 + 389: 32(ptr) AccessChain 24(data) 25 388 25 + 390: 13(ivec4) Load 389 + 391: 13(ivec4) GroupNonUniformQuadBroadcast 35 390 73 + 392: 32(ptr) AccessChain 24(data) 25 386 25 + Store 392 391 393: 27(ptr) AccessChain 10(dti) 26 394: 6(int) Load 393 - 395: 75(ptr) AccessChain 24(data) 25 394 72 - 396: 15(ivec4) Load 395 - 397: 15(ivec4) GroupNonUniformQuadBroadcast 35 396 358 - 398: 75(ptr) AccessChain 24(data) 25 392 72 - Store 398 397 - 399: 27(ptr) AccessChain 10(dti) 26 - 400: 6(int) Load 399 + 395: 27(ptr) AccessChain 10(dti) 26 + 396: 6(int) Load 395 + 397: 42(ptr) AccessChain 24(data) 25 396 25 26 + 398: 6(int) Load 397 + 399: 6(int) GroupNonUniformQuadBroadcast 35 398 73 + 400: 42(ptr) AccessChain 24(data) 25 394 25 26 + Store 400 399 401: 27(ptr) AccessChain 10(dti) 26 402: 6(int) Load 401 - 403: 84(ptr) AccessChain 24(data) 25 402 72 26 - 404: 14(int) Load 403 - 405: 14(int) GroupNonUniformQuadBroadcast 35 404 358 - 406: 84(ptr) AccessChain 24(data) 25 400 72 26 - Store 406 405 - 407: 27(ptr) AccessChain 10(dti) 26 - 408: 6(int) Load 407 - 409: 27(ptr) AccessChain 10(dti) 26 - 410: 6(int) Load 409 - 411: 75(ptr) AccessChain 24(data) 25 410 72 - 412: 15(ivec4) Load 411 - 413: 93(ivec2) VectorShuffle 412 412 0 1 - 414: 93(ivec2) GroupNonUniformQuadBroadcast 35 413 358 - 415: 75(ptr) AccessChain 24(data) 25 408 72 - 416: 15(ivec4) Load 415 - 417: 15(ivec4) VectorShuffle 416 414 4 5 2 3 - Store 415 417 - 418: 27(ptr) AccessChain 10(dti) 26 - 419: 6(int) Load 418 - 420: 27(ptr) AccessChain 10(dti) 26 - 421: 6(int) Load 420 - 422: 75(ptr) AccessChain 24(data) 25 421 72 - 423: 15(ivec4) Load 422 - 424: 105(ivec3) VectorShuffle 423 423 0 1 2 - 425: 105(ivec3) GroupNonUniformQuadBroadcast 35 424 358 - 426: 75(ptr) AccessChain 24(data) 25 419 72 - 427: 15(ivec4) Load 426 - 428: 15(ivec4) VectorShuffle 427 425 4 5 6 3 - Store 426 428 + 403: 27(ptr) AccessChain 10(dti) 26 + 404: 6(int) Load 403 + 405: 32(ptr) AccessChain 24(data) 25 404 25 + 406: 13(ivec4) Load 405 + 407: 51(ivec2) VectorShuffle 406 406 0 1 + 408: 51(ivec2) GroupNonUniformQuadBroadcast 35 407 73 + 409: 42(ptr) AccessChain 24(data) 25 402 25 26 + 410: 6(int) CompositeExtract 408 0 + Store 409 410 + 411: 42(ptr) AccessChain 24(data) 25 402 25 58 + 412: 6(int) CompositeExtract 408 1 + Store 411 412 + 413: 27(ptr) AccessChain 10(dti) 26 + 414: 6(int) Load 413 + 415: 27(ptr) AccessChain 10(dti) 26 + 416: 6(int) Load 415 + 417: 32(ptr) AccessChain 24(data) 25 416 25 + 418: 13(ivec4) Load 417 + 419: 7(ivec3) VectorShuffle 418 418 0 1 2 + 420: 7(ivec3) GroupNonUniformQuadBroadcast 35 419 73 + 421: 42(ptr) AccessChain 24(data) 25 414 25 26 + 422: 6(int) CompositeExtract 420 0 + Store 421 422 + 423: 42(ptr) AccessChain 24(data) 25 414 25 58 + 424: 6(int) CompositeExtract 420 1 + Store 423 424 + 425: 42(ptr) AccessChain 24(data) 25 414 25 73 + 426: 6(int) CompositeExtract 420 2 + Store 425 426 + 427: 27(ptr) AccessChain 10(dti) 26 + 428: 6(int) Load 427 429: 27(ptr) AccessChain 10(dti) 26 430: 6(int) Load 429 - 431: 27(ptr) AccessChain 10(dti) 26 - 432: 6(int) Load 431 - 433: 118(ptr) AccessChain 24(data) 25 432 115 - 434: 17(fvec4) Load 433 - 435: 17(fvec4) GroupNonUniformQuadBroadcast 35 434 358 - 436: 118(ptr) AccessChain 24(data) 25 430 115 - Store 436 435 + 431: 81(ptr) AccessChain 24(data) 25 430 78 + 432: 15(ivec4) Load 431 + 433: 15(ivec4) GroupNonUniformQuadBroadcast 35 432 73 + 434: 81(ptr) AccessChain 24(data) 25 428 78 + Store 434 433 + 435: 27(ptr) AccessChain 10(dti) 26 + 436: 6(int) Load 435 437: 27(ptr) AccessChain 10(dti) 26 438: 6(int) Load 437 - 439: 27(ptr) AccessChain 10(dti) 26 - 440: 6(int) Load 439 - 441: 127(ptr) AccessChain 24(data) 25 440 115 26 - 442: 16(float) Load 441 - 443: 16(float) GroupNonUniformQuadBroadcast 35 442 358 - 444: 127(ptr) AccessChain 24(data) 25 438 115 26 - Store 444 443 + 439: 90(ptr) AccessChain 24(data) 25 438 78 26 + 440: 14(int) Load 439 + 441: 14(int) GroupNonUniformQuadBroadcast 35 440 73 + 442: 90(ptr) AccessChain 24(data) 25 436 78 26 + Store 442 441 + 443: 27(ptr) AccessChain 10(dti) 26 + 444: 6(int) Load 443 445: 27(ptr) AccessChain 10(dti) 26 446: 6(int) Load 445 - 447: 27(ptr) AccessChain 10(dti) 26 - 448: 6(int) Load 447 - 449: 118(ptr) AccessChain 24(data) 25 448 115 - 450: 17(fvec4) Load 449 - 451: 136(fvec2) VectorShuffle 450 450 0 1 - 452: 136(fvec2) GroupNonUniformQuadBroadcast 35 451 358 - 453: 118(ptr) AccessChain 24(data) 25 446 115 - 454: 17(fvec4) Load 453 - 455: 17(fvec4) VectorShuffle 454 452 4 5 2 3 - Store 453 455 - 456: 27(ptr) AccessChain 10(dti) 26 - 457: 6(int) Load 456 - 458: 27(ptr) AccessChain 10(dti) 26 - 459: 6(int) Load 458 - 460: 118(ptr) AccessChain 24(data) 25 459 115 - 461: 17(fvec4) Load 460 - 462: 148(fvec3) VectorShuffle 461 461 0 1 2 - 463: 148(fvec3) GroupNonUniformQuadBroadcast 35 462 358 - 464: 118(ptr) AccessChain 24(data) 25 457 115 - 465: 17(fvec4) Load 464 - 466: 17(fvec4) VectorShuffle 465 463 4 5 6 3 - Store 464 466 - 467: 27(ptr) AccessChain 10(dti) 26 - 468: 6(int) Load 467 + 447: 81(ptr) AccessChain 24(data) 25 446 78 + 448: 15(ivec4) Load 447 + 449: 99(ivec2) VectorShuffle 448 448 0 1 + 450: 99(ivec2) GroupNonUniformQuadBroadcast 35 449 73 + 451: 90(ptr) AccessChain 24(data) 25 444 78 26 + 452: 14(int) CompositeExtract 450 0 + Store 451 452 + 453: 90(ptr) AccessChain 24(data) 25 444 78 58 + 454: 14(int) CompositeExtract 450 1 + Store 453 454 + 455: 27(ptr) AccessChain 10(dti) 26 + 456: 6(int) Load 455 + 457: 27(ptr) AccessChain 10(dti) 26 + 458: 6(int) Load 457 + 459: 81(ptr) AccessChain 24(data) 25 458 78 + 460: 15(ivec4) Load 459 + 461: 112(ivec3) VectorShuffle 460 460 0 1 2 + 462: 112(ivec3) GroupNonUniformQuadBroadcast 35 461 73 + 463: 90(ptr) AccessChain 24(data) 25 456 78 26 + 464: 14(int) CompositeExtract 462 0 + Store 463 464 + 465: 90(ptr) AccessChain 24(data) 25 456 78 58 + 466: 14(int) CompositeExtract 462 1 + Store 465 466 + 467: 90(ptr) AccessChain 24(data) 25 456 78 73 + 468: 14(int) CompositeExtract 462 2 + Store 467 468 469: 27(ptr) AccessChain 10(dti) 26 470: 6(int) Load 469 - 471: 161(ptr) AccessChain 24(data) 25 470 158 - 472: 19(f64vec4) Load 471 - 473: 19(f64vec4) GroupNonUniformQuadBroadcast 35 472 358 - 474: 161(ptr) AccessChain 24(data) 25 468 158 - Store 474 473 - 475: 27(ptr) AccessChain 10(dti) 26 - 476: 6(int) Load 475 + 471: 27(ptr) AccessChain 10(dti) 26 + 472: 6(int) Load 471 + 473: 128(ptr) AccessChain 24(data) 25 472 125 + 474: 17(fvec4) Load 473 + 475: 17(fvec4) GroupNonUniformQuadBroadcast 35 474 73 + 476: 128(ptr) AccessChain 24(data) 25 470 125 + Store 476 475 477: 27(ptr) AccessChain 10(dti) 26 478: 6(int) Load 477 - 479: 170(ptr) AccessChain 24(data) 25 478 158 26 - 480:18(float64_t) Load 479 - 481:18(float64_t) GroupNonUniformQuadBroadcast 35 480 358 - 482: 170(ptr) AccessChain 24(data) 25 476 158 26 - Store 482 481 - 483: 27(ptr) AccessChain 10(dti) 26 - 484: 6(int) Load 483 + 479: 27(ptr) AccessChain 10(dti) 26 + 480: 6(int) Load 479 + 481: 137(ptr) AccessChain 24(data) 25 480 125 26 + 482: 16(float) Load 481 + 483: 16(float) GroupNonUniformQuadBroadcast 35 482 73 + 484: 137(ptr) AccessChain 24(data) 25 478 125 26 + Store 484 483 485: 27(ptr) AccessChain 10(dti) 26 486: 6(int) Load 485 - 487: 161(ptr) AccessChain 24(data) 25 486 158 - 488: 19(f64vec4) Load 487 - 489:179(f64vec2) VectorShuffle 488 488 0 1 - 490:179(f64vec2) GroupNonUniformQuadBroadcast 35 489 358 - 491: 161(ptr) AccessChain 24(data) 25 484 158 - 492: 19(f64vec4) Load 491 - 493: 19(f64vec4) VectorShuffle 492 490 4 5 2 3 - Store 491 493 - 494: 27(ptr) AccessChain 10(dti) 26 - 495: 6(int) Load 494 - 496: 27(ptr) AccessChain 10(dti) 26 - 497: 6(int) Load 496 - 498: 161(ptr) AccessChain 24(data) 25 497 158 - 499: 19(f64vec4) Load 498 - 500:191(f64vec3) VectorShuffle 499 499 0 1 2 - 501:191(f64vec3) GroupNonUniformQuadBroadcast 35 500 358 - 502: 161(ptr) AccessChain 24(data) 25 495 158 - 503: 19(f64vec4) Load 502 - 504: 19(f64vec4) VectorShuffle 503 501 4 5 6 3 - Store 502 504 - 505: 27(ptr) AccessChain 10(dti) 26 - 506: 6(int) Load 505 - 507: 27(ptr) AccessChain 10(dti) 26 - 508: 6(int) Load 507 - 509: 32(ptr) AccessChain 24(data) 25 508 25 - 510: 13(ivec4) Load 509 - 511: 13(ivec4) GroupNonUniformQuadBroadcast 35 510 35 - 512: 32(ptr) AccessChain 24(data) 25 506 25 - Store 512 511 + 487: 27(ptr) AccessChain 10(dti) 26 + 488: 6(int) Load 487 + 489: 128(ptr) AccessChain 24(data) 25 488 125 + 490: 17(fvec4) Load 489 + 491: 146(fvec2) VectorShuffle 490 490 0 1 + 492: 146(fvec2) GroupNonUniformQuadBroadcast 35 491 73 + 493: 137(ptr) AccessChain 24(data) 25 486 125 26 + 494: 16(float) CompositeExtract 492 0 + Store 493 494 + 495: 137(ptr) AccessChain 24(data) 25 486 125 58 + 496: 16(float) CompositeExtract 492 1 + Store 495 496 + 497: 27(ptr) AccessChain 10(dti) 26 + 498: 6(int) Load 497 + 499: 27(ptr) AccessChain 10(dti) 26 + 500: 6(int) Load 499 + 501: 128(ptr) AccessChain 24(data) 25 500 125 + 502: 17(fvec4) Load 501 + 503: 159(fvec3) VectorShuffle 502 502 0 1 2 + 504: 159(fvec3) GroupNonUniformQuadBroadcast 35 503 73 + 505: 137(ptr) AccessChain 24(data) 25 498 125 26 + 506: 16(float) CompositeExtract 504 0 + Store 505 506 + 507: 137(ptr) AccessChain 24(data) 25 498 125 58 + 508: 16(float) CompositeExtract 504 1 + Store 507 508 + 509: 137(ptr) AccessChain 24(data) 25 498 125 73 + 510: 16(float) CompositeExtract 504 2 + Store 509 510 + 511: 27(ptr) AccessChain 10(dti) 26 + 512: 6(int) Load 511 513: 27(ptr) AccessChain 10(dti) 26 514: 6(int) Load 513 - 515: 27(ptr) AccessChain 10(dti) 26 - 516: 6(int) Load 515 - 517: 42(ptr) AccessChain 24(data) 25 516 25 26 - 518: 6(int) Load 517 - 519: 6(int) GroupNonUniformQuadBroadcast 35 518 35 - 520: 42(ptr) AccessChain 24(data) 25 514 25 26 - Store 520 519 + 515: 175(ptr) AccessChain 24(data) 25 514 172 + 516: 19(f64vec4) Load 515 + 517: 19(f64vec4) GroupNonUniformQuadBroadcast 35 516 73 + 518: 175(ptr) AccessChain 24(data) 25 512 172 + Store 518 517 + 519: 27(ptr) AccessChain 10(dti) 26 + 520: 6(int) Load 519 521: 27(ptr) AccessChain 10(dti) 26 522: 6(int) Load 521 - 523: 27(ptr) AccessChain 10(dti) 26 - 524: 6(int) Load 523 - 525: 32(ptr) AccessChain 24(data) 25 524 25 - 526: 13(ivec4) Load 525 - 527: 51(ivec2) VectorShuffle 526 526 0 1 - 528: 51(ivec2) GroupNonUniformQuadBroadcast 35 527 35 - 529: 32(ptr) AccessChain 24(data) 25 522 25 - 530: 13(ivec4) Load 529 - 531: 13(ivec4) VectorShuffle 530 528 4 5 2 3 - Store 529 531 - 532: 27(ptr) AccessChain 10(dti) 26 - 533: 6(int) Load 532 - 534: 27(ptr) AccessChain 10(dti) 26 - 535: 6(int) Load 534 - 536: 32(ptr) AccessChain 24(data) 25 535 25 - 537: 13(ivec4) Load 536 - 538: 7(ivec3) VectorShuffle 537 537 0 1 2 - 539: 7(ivec3) GroupNonUniformQuadBroadcast 35 538 35 - 540: 32(ptr) AccessChain 24(data) 25 533 25 - 541: 13(ivec4) Load 540 - 542: 13(ivec4) VectorShuffle 541 539 4 5 6 3 - Store 540 542 - 543: 27(ptr) AccessChain 10(dti) 26 - 544: 6(int) Load 543 - 545: 27(ptr) AccessChain 10(dti) 26 - 546: 6(int) Load 545 - 547: 75(ptr) AccessChain 24(data) 25 546 72 - 548: 15(ivec4) Load 547 - 549: 15(ivec4) GroupNonUniformQuadBroadcast 35 548 35 - 550: 75(ptr) AccessChain 24(data) 25 544 72 - Store 550 549 - 551: 27(ptr) AccessChain 10(dti) 26 - 552: 6(int) Load 551 + 523: 184(ptr) AccessChain 24(data) 25 522 172 26 + 524:18(float64_t) Load 523 + 525:18(float64_t) GroupNonUniformQuadBroadcast 35 524 73 + 526: 184(ptr) AccessChain 24(data) 25 520 172 26 + Store 526 525 + 527: 27(ptr) AccessChain 10(dti) 26 + 528: 6(int) Load 527 + 529: 27(ptr) AccessChain 10(dti) 26 + 530: 6(int) Load 529 + 531: 175(ptr) AccessChain 24(data) 25 530 172 + 532: 19(f64vec4) Load 531 + 533:193(f64vec2) VectorShuffle 532 532 0 1 + 534:193(f64vec2) GroupNonUniformQuadBroadcast 35 533 73 + 535: 184(ptr) AccessChain 24(data) 25 528 172 26 + 536:18(float64_t) CompositeExtract 534 0 + Store 535 536 + 537: 184(ptr) AccessChain 24(data) 25 528 172 58 + 538:18(float64_t) CompositeExtract 534 1 + Store 537 538 + 539: 27(ptr) AccessChain 10(dti) 26 + 540: 6(int) Load 539 + 541: 27(ptr) AccessChain 10(dti) 26 + 542: 6(int) Load 541 + 543: 175(ptr) AccessChain 24(data) 25 542 172 + 544: 19(f64vec4) Load 543 + 545:206(f64vec3) VectorShuffle 544 544 0 1 2 + 546:206(f64vec3) GroupNonUniformQuadBroadcast 35 545 73 + 547: 184(ptr) AccessChain 24(data) 25 540 172 26 + 548:18(float64_t) CompositeExtract 546 0 + Store 547 548 + 549: 184(ptr) AccessChain 24(data) 25 540 172 58 + 550:18(float64_t) CompositeExtract 546 1 + Store 549 550 + 551: 184(ptr) AccessChain 24(data) 25 540 172 73 + 552:18(float64_t) CompositeExtract 546 2 + Store 551 552 553: 27(ptr) AccessChain 10(dti) 26 554: 6(int) Load 553 - 555: 84(ptr) AccessChain 24(data) 25 554 72 26 - 556: 14(int) Load 555 - 557: 14(int) GroupNonUniformQuadBroadcast 35 556 35 - 558: 84(ptr) AccessChain 24(data) 25 552 72 26 - Store 558 557 - 559: 27(ptr) AccessChain 10(dti) 26 - 560: 6(int) Load 559 + 555: 27(ptr) AccessChain 10(dti) 26 + 556: 6(int) Load 555 + 557: 32(ptr) AccessChain 24(data) 25 556 25 + 558: 13(ivec4) Load 557 + 559: 13(ivec4) GroupNonUniformQuadBroadcast 35 558 35 + 560: 32(ptr) AccessChain 24(data) 25 554 25 + Store 560 559 561: 27(ptr) AccessChain 10(dti) 26 562: 6(int) Load 561 - 563: 75(ptr) AccessChain 24(data) 25 562 72 - 564: 15(ivec4) Load 563 - 565: 93(ivec2) VectorShuffle 564 564 0 1 - 566: 93(ivec2) GroupNonUniformQuadBroadcast 35 565 35 - 567: 75(ptr) AccessChain 24(data) 25 560 72 - 568: 15(ivec4) Load 567 - 569: 15(ivec4) VectorShuffle 568 566 4 5 2 3 - Store 567 569 - 570: 27(ptr) AccessChain 10(dti) 26 - 571: 6(int) Load 570 - 572: 27(ptr) AccessChain 10(dti) 26 - 573: 6(int) Load 572 - 574: 75(ptr) AccessChain 24(data) 25 573 72 - 575: 15(ivec4) Load 574 - 576: 105(ivec3) VectorShuffle 575 575 0 1 2 - 577: 105(ivec3) GroupNonUniformQuadBroadcast 35 576 35 - 578: 75(ptr) AccessChain 24(data) 25 571 72 - 579: 15(ivec4) Load 578 - 580: 15(ivec4) VectorShuffle 579 577 4 5 6 3 - Store 578 580 + 563: 27(ptr) AccessChain 10(dti) 26 + 564: 6(int) Load 563 + 565: 42(ptr) AccessChain 24(data) 25 564 25 26 + 566: 6(int) Load 565 + 567: 6(int) GroupNonUniformQuadBroadcast 35 566 35 + 568: 42(ptr) AccessChain 24(data) 25 562 25 26 + Store 568 567 + 569: 27(ptr) AccessChain 10(dti) 26 + 570: 6(int) Load 569 + 571: 27(ptr) AccessChain 10(dti) 26 + 572: 6(int) Load 571 + 573: 32(ptr) AccessChain 24(data) 25 572 25 + 574: 13(ivec4) Load 573 + 575: 51(ivec2) VectorShuffle 574 574 0 1 + 576: 51(ivec2) GroupNonUniformQuadBroadcast 35 575 35 + 577: 42(ptr) AccessChain 24(data) 25 570 25 26 + 578: 6(int) CompositeExtract 576 0 + Store 577 578 + 579: 42(ptr) AccessChain 24(data) 25 570 25 58 + 580: 6(int) CompositeExtract 576 1 + Store 579 580 581: 27(ptr) AccessChain 10(dti) 26 582: 6(int) Load 581 583: 27(ptr) AccessChain 10(dti) 26 584: 6(int) Load 583 - 585: 118(ptr) AccessChain 24(data) 25 584 115 - 586: 17(fvec4) Load 585 - 587: 17(fvec4) GroupNonUniformQuadBroadcast 35 586 35 - 588: 118(ptr) AccessChain 24(data) 25 582 115 - Store 588 587 - 589: 27(ptr) AccessChain 10(dti) 26 - 590: 6(int) Load 589 - 591: 27(ptr) AccessChain 10(dti) 26 - 592: 6(int) Load 591 - 593: 127(ptr) AccessChain 24(data) 25 592 115 26 - 594: 16(float) Load 593 - 595: 16(float) GroupNonUniformQuadBroadcast 35 594 35 - 596: 127(ptr) AccessChain 24(data) 25 590 115 26 - Store 596 595 + 585: 32(ptr) AccessChain 24(data) 25 584 25 + 586: 13(ivec4) Load 585 + 587: 7(ivec3) VectorShuffle 586 586 0 1 2 + 588: 7(ivec3) GroupNonUniformQuadBroadcast 35 587 35 + 589: 42(ptr) AccessChain 24(data) 25 582 25 26 + 590: 6(int) CompositeExtract 588 0 + Store 589 590 + 591: 42(ptr) AccessChain 24(data) 25 582 25 58 + 592: 6(int) CompositeExtract 588 1 + Store 591 592 + 593: 42(ptr) AccessChain 24(data) 25 582 25 73 + 594: 6(int) CompositeExtract 588 2 + Store 593 594 + 595: 27(ptr) AccessChain 10(dti) 26 + 596: 6(int) Load 595 597: 27(ptr) AccessChain 10(dti) 26 598: 6(int) Load 597 - 599: 27(ptr) AccessChain 10(dti) 26 - 600: 6(int) Load 599 - 601: 118(ptr) AccessChain 24(data) 25 600 115 - 602: 17(fvec4) Load 601 - 603: 136(fvec2) VectorShuffle 602 602 0 1 - 604: 136(fvec2) GroupNonUniformQuadBroadcast 35 603 35 - 605: 118(ptr) AccessChain 24(data) 25 598 115 - 606: 17(fvec4) Load 605 - 607: 17(fvec4) VectorShuffle 606 604 4 5 2 3 - Store 605 607 - 608: 27(ptr) AccessChain 10(dti) 26 - 609: 6(int) Load 608 - 610: 27(ptr) AccessChain 10(dti) 26 - 611: 6(int) Load 610 - 612: 118(ptr) AccessChain 24(data) 25 611 115 - 613: 17(fvec4) Load 612 - 614: 148(fvec3) VectorShuffle 613 613 0 1 2 - 615: 148(fvec3) GroupNonUniformQuadBroadcast 35 614 35 - 616: 118(ptr) AccessChain 24(data) 25 609 115 - 617: 17(fvec4) Load 616 - 618: 17(fvec4) VectorShuffle 617 615 4 5 6 3 - Store 616 618 - 619: 27(ptr) AccessChain 10(dti) 26 - 620: 6(int) Load 619 - 621: 27(ptr) AccessChain 10(dti) 26 - 622: 6(int) Load 621 - 623: 161(ptr) AccessChain 24(data) 25 622 158 - 624: 19(f64vec4) Load 623 - 625: 19(f64vec4) GroupNonUniformQuadBroadcast 35 624 35 - 626: 161(ptr) AccessChain 24(data) 25 620 158 - Store 626 625 - 627: 27(ptr) AccessChain 10(dti) 26 - 628: 6(int) Load 627 - 629: 27(ptr) AccessChain 10(dti) 26 - 630: 6(int) Load 629 - 631: 170(ptr) AccessChain 24(data) 25 630 158 26 - 632:18(float64_t) Load 631 - 633:18(float64_t) GroupNonUniformQuadBroadcast 35 632 35 - 634: 170(ptr) AccessChain 24(data) 25 628 158 26 - Store 634 633 - 635: 27(ptr) AccessChain 10(dti) 26 - 636: 6(int) Load 635 + 599: 81(ptr) AccessChain 24(data) 25 598 78 + 600: 15(ivec4) Load 599 + 601: 15(ivec4) GroupNonUniformQuadBroadcast 35 600 35 + 602: 81(ptr) AccessChain 24(data) 25 596 78 + Store 602 601 + 603: 27(ptr) AccessChain 10(dti) 26 + 604: 6(int) Load 603 + 605: 27(ptr) AccessChain 10(dti) 26 + 606: 6(int) Load 605 + 607: 90(ptr) AccessChain 24(data) 25 606 78 26 + 608: 14(int) Load 607 + 609: 14(int) GroupNonUniformQuadBroadcast 35 608 35 + 610: 90(ptr) AccessChain 24(data) 25 604 78 26 + Store 610 609 + 611: 27(ptr) AccessChain 10(dti) 26 + 612: 6(int) Load 611 + 613: 27(ptr) AccessChain 10(dti) 26 + 614: 6(int) Load 613 + 615: 81(ptr) AccessChain 24(data) 25 614 78 + 616: 15(ivec4) Load 615 + 617: 99(ivec2) VectorShuffle 616 616 0 1 + 618: 99(ivec2) GroupNonUniformQuadBroadcast 35 617 35 + 619: 90(ptr) AccessChain 24(data) 25 612 78 26 + 620: 14(int) CompositeExtract 618 0 + Store 619 620 + 621: 90(ptr) AccessChain 24(data) 25 612 78 58 + 622: 14(int) CompositeExtract 618 1 + Store 621 622 + 623: 27(ptr) AccessChain 10(dti) 26 + 624: 6(int) Load 623 + 625: 27(ptr) AccessChain 10(dti) 26 + 626: 6(int) Load 625 + 627: 81(ptr) AccessChain 24(data) 25 626 78 + 628: 15(ivec4) Load 627 + 629: 112(ivec3) VectorShuffle 628 628 0 1 2 + 630: 112(ivec3) GroupNonUniformQuadBroadcast 35 629 35 + 631: 90(ptr) AccessChain 24(data) 25 624 78 26 + 632: 14(int) CompositeExtract 630 0 + Store 631 632 + 633: 90(ptr) AccessChain 24(data) 25 624 78 58 + 634: 14(int) CompositeExtract 630 1 + Store 633 634 + 635: 90(ptr) AccessChain 24(data) 25 624 78 73 + 636: 14(int) CompositeExtract 630 2 + Store 635 636 637: 27(ptr) AccessChain 10(dti) 26 638: 6(int) Load 637 - 639: 161(ptr) AccessChain 24(data) 25 638 158 - 640: 19(f64vec4) Load 639 - 641:179(f64vec2) VectorShuffle 640 640 0 1 - 642:179(f64vec2) GroupNonUniformQuadBroadcast 35 641 35 - 643: 161(ptr) AccessChain 24(data) 25 636 158 - 644: 19(f64vec4) Load 643 - 645: 19(f64vec4) VectorShuffle 644 642 4 5 2 3 - Store 643 645 - 646: 27(ptr) AccessChain 10(dti) 26 - 647: 6(int) Load 646 - 648: 27(ptr) AccessChain 10(dti) 26 - 649: 6(int) Load 648 - 650: 161(ptr) AccessChain 24(data) 25 649 158 - 651: 19(f64vec4) Load 650 - 652:191(f64vec3) VectorShuffle 651 651 0 1 2 - 653:191(f64vec3) GroupNonUniformQuadBroadcast 35 652 35 - 654: 161(ptr) AccessChain 24(data) 25 647 158 - 655: 19(f64vec4) Load 654 - 656: 19(f64vec4) VectorShuffle 655 653 4 5 6 3 - Store 654 656 - 657: 27(ptr) AccessChain 10(dti) 26 - 658: 6(int) Load 657 - 659: 27(ptr) AccessChain 10(dti) 26 - 660: 6(int) Load 659 - 661: 32(ptr) AccessChain 24(data) 25 660 25 - 662: 13(ivec4) Load 661 - 663: 13(ivec4) GroupNonUniformQuadSwap 35 662 26 - 664: 32(ptr) AccessChain 24(data) 25 658 25 - Store 664 663 + 639: 27(ptr) AccessChain 10(dti) 26 + 640: 6(int) Load 639 + 641: 128(ptr) AccessChain 24(data) 25 640 125 + 642: 17(fvec4) Load 641 + 643: 17(fvec4) GroupNonUniformQuadBroadcast 35 642 35 + 644: 128(ptr) AccessChain 24(data) 25 638 125 + Store 644 643 + 645: 27(ptr) AccessChain 10(dti) 26 + 646: 6(int) Load 645 + 647: 27(ptr) AccessChain 10(dti) 26 + 648: 6(int) Load 647 + 649: 137(ptr) AccessChain 24(data) 25 648 125 26 + 650: 16(float) Load 649 + 651: 16(float) GroupNonUniformQuadBroadcast 35 650 35 + 652: 137(ptr) AccessChain 24(data) 25 646 125 26 + Store 652 651 + 653: 27(ptr) AccessChain 10(dti) 26 + 654: 6(int) Load 653 + 655: 27(ptr) AccessChain 10(dti) 26 + 656: 6(int) Load 655 + 657: 128(ptr) AccessChain 24(data) 25 656 125 + 658: 17(fvec4) Load 657 + 659: 146(fvec2) VectorShuffle 658 658 0 1 + 660: 146(fvec2) GroupNonUniformQuadBroadcast 35 659 35 + 661: 137(ptr) AccessChain 24(data) 25 654 125 26 + 662: 16(float) CompositeExtract 660 0 + Store 661 662 + 663: 137(ptr) AccessChain 24(data) 25 654 125 58 + 664: 16(float) CompositeExtract 660 1 + Store 663 664 665: 27(ptr) AccessChain 10(dti) 26 666: 6(int) Load 665 667: 27(ptr) AccessChain 10(dti) 26 668: 6(int) Load 667 - 669: 42(ptr) AccessChain 24(data) 25 668 25 26 - 670: 6(int) Load 669 - 671: 6(int) GroupNonUniformQuadSwap 35 670 26 - 672: 42(ptr) AccessChain 24(data) 25 666 25 26 - Store 672 671 - 673: 27(ptr) AccessChain 10(dti) 26 - 674: 6(int) Load 673 - 675: 27(ptr) AccessChain 10(dti) 26 - 676: 6(int) Load 675 - 677: 32(ptr) AccessChain 24(data) 25 676 25 - 678: 13(ivec4) Load 677 - 679: 51(ivec2) VectorShuffle 678 678 0 1 - 680: 51(ivec2) GroupNonUniformQuadSwap 35 679 26 - 681: 32(ptr) AccessChain 24(data) 25 674 25 - 682: 13(ivec4) Load 681 - 683: 13(ivec4) VectorShuffle 682 680 4 5 2 3 - Store 681 683 - 684: 27(ptr) AccessChain 10(dti) 26 - 685: 6(int) Load 684 - 686: 27(ptr) AccessChain 10(dti) 26 - 687: 6(int) Load 686 - 688: 32(ptr) AccessChain 24(data) 25 687 25 - 689: 13(ivec4) Load 688 - 690: 7(ivec3) VectorShuffle 689 689 0 1 2 - 691: 7(ivec3) GroupNonUniformQuadSwap 35 690 26 - 692: 32(ptr) AccessChain 24(data) 25 685 25 - 693: 13(ivec4) Load 692 - 694: 13(ivec4) VectorShuffle 693 691 4 5 6 3 - Store 692 694 + 669: 128(ptr) AccessChain 24(data) 25 668 125 + 670: 17(fvec4) Load 669 + 671: 159(fvec3) VectorShuffle 670 670 0 1 2 + 672: 159(fvec3) GroupNonUniformQuadBroadcast 35 671 35 + 673: 137(ptr) AccessChain 24(data) 25 666 125 26 + 674: 16(float) CompositeExtract 672 0 + Store 673 674 + 675: 137(ptr) AccessChain 24(data) 25 666 125 58 + 676: 16(float) CompositeExtract 672 1 + Store 675 676 + 677: 137(ptr) AccessChain 24(data) 25 666 125 73 + 678: 16(float) CompositeExtract 672 2 + Store 677 678 + 679: 27(ptr) AccessChain 10(dti) 26 + 680: 6(int) Load 679 + 681: 27(ptr) AccessChain 10(dti) 26 + 682: 6(int) Load 681 + 683: 175(ptr) AccessChain 24(data) 25 682 172 + 684: 19(f64vec4) Load 683 + 685: 19(f64vec4) GroupNonUniformQuadBroadcast 35 684 35 + 686: 175(ptr) AccessChain 24(data) 25 680 172 + Store 686 685 + 687: 27(ptr) AccessChain 10(dti) 26 + 688: 6(int) Load 687 + 689: 27(ptr) AccessChain 10(dti) 26 + 690: 6(int) Load 689 + 691: 184(ptr) AccessChain 24(data) 25 690 172 26 + 692:18(float64_t) Load 691 + 693:18(float64_t) GroupNonUniformQuadBroadcast 35 692 35 + 694: 184(ptr) AccessChain 24(data) 25 688 172 26 + Store 694 693 695: 27(ptr) AccessChain 10(dti) 26 696: 6(int) Load 695 697: 27(ptr) AccessChain 10(dti) 26 698: 6(int) Load 697 - 699: 75(ptr) AccessChain 24(data) 25 698 72 - 700: 15(ivec4) Load 699 - 701: 15(ivec4) GroupNonUniformQuadSwap 35 700 26 - 702: 75(ptr) AccessChain 24(data) 25 696 72 - Store 702 701 - 703: 27(ptr) AccessChain 10(dti) 26 - 704: 6(int) Load 703 - 705: 27(ptr) AccessChain 10(dti) 26 - 706: 6(int) Load 705 - 707: 84(ptr) AccessChain 24(data) 25 706 72 26 - 708: 14(int) Load 707 - 709: 14(int) GroupNonUniformQuadSwap 35 708 26 - 710: 84(ptr) AccessChain 24(data) 25 704 72 26 - Store 710 709 - 711: 27(ptr) AccessChain 10(dti) 26 - 712: 6(int) Load 711 - 713: 27(ptr) AccessChain 10(dti) 26 - 714: 6(int) Load 713 - 715: 75(ptr) AccessChain 24(data) 25 714 72 - 716: 15(ivec4) Load 715 - 717: 93(ivec2) VectorShuffle 716 716 0 1 - 718: 93(ivec2) GroupNonUniformQuadSwap 35 717 26 - 719: 75(ptr) AccessChain 24(data) 25 712 72 - 720: 15(ivec4) Load 719 - 721: 15(ivec4) VectorShuffle 720 718 4 5 2 3 - Store 719 721 - 722: 27(ptr) AccessChain 10(dti) 26 - 723: 6(int) Load 722 - 724: 27(ptr) AccessChain 10(dti) 26 - 725: 6(int) Load 724 - 726: 75(ptr) AccessChain 24(data) 25 725 72 - 727: 15(ivec4) Load 726 - 728: 105(ivec3) VectorShuffle 727 727 0 1 2 - 729: 105(ivec3) GroupNonUniformQuadSwap 35 728 26 - 730: 75(ptr) AccessChain 24(data) 25 723 72 - 731: 15(ivec4) Load 730 - 732: 15(ivec4) VectorShuffle 731 729 4 5 6 3 - Store 730 732 - 733: 27(ptr) AccessChain 10(dti) 26 + 699: 175(ptr) AccessChain 24(data) 25 698 172 + 700: 19(f64vec4) Load 699 + 701:193(f64vec2) VectorShuffle 700 700 0 1 + 702:193(f64vec2) GroupNonUniformQuadBroadcast 35 701 35 + 703: 184(ptr) AccessChain 24(data) 25 696 172 26 + 704:18(float64_t) CompositeExtract 702 0 + Store 703 704 + 705: 184(ptr) AccessChain 24(data) 25 696 172 58 + 706:18(float64_t) CompositeExtract 702 1 + Store 705 706 + 707: 27(ptr) AccessChain 10(dti) 26 + 708: 6(int) Load 707 + 709: 27(ptr) AccessChain 10(dti) 26 + 710: 6(int) Load 709 + 711: 175(ptr) AccessChain 24(data) 25 710 172 + 712: 19(f64vec4) Load 711 + 713:206(f64vec3) VectorShuffle 712 712 0 1 2 + 714:206(f64vec3) GroupNonUniformQuadBroadcast 35 713 35 + 715: 184(ptr) AccessChain 24(data) 25 708 172 26 + 716:18(float64_t) CompositeExtract 714 0 + Store 715 716 + 717: 184(ptr) AccessChain 24(data) 25 708 172 58 + 718:18(float64_t) CompositeExtract 714 1 + Store 717 718 + 719: 184(ptr) AccessChain 24(data) 25 708 172 73 + 720:18(float64_t) CompositeExtract 714 2 + Store 719 720 + 721: 27(ptr) AccessChain 10(dti) 26 + 722: 6(int) Load 721 + 723: 27(ptr) AccessChain 10(dti) 26 + 724: 6(int) Load 723 + 725: 32(ptr) AccessChain 24(data) 25 724 25 + 726: 13(ivec4) Load 725 + 727: 13(ivec4) GroupNonUniformQuadSwap 35 726 26 + 728: 32(ptr) AccessChain 24(data) 25 722 25 + Store 728 727 + 729: 27(ptr) AccessChain 10(dti) 26 + 730: 6(int) Load 729 + 731: 27(ptr) AccessChain 10(dti) 26 + 732: 6(int) Load 731 + 733: 42(ptr) AccessChain 24(data) 25 732 25 26 734: 6(int) Load 733 - 735: 27(ptr) AccessChain 10(dti) 26 - 736: 6(int) Load 735 - 737: 118(ptr) AccessChain 24(data) 25 736 115 - 738: 17(fvec4) Load 737 - 739: 17(fvec4) GroupNonUniformQuadSwap 35 738 26 - 740: 118(ptr) AccessChain 24(data) 25 734 115 - Store 740 739 - 741: 27(ptr) AccessChain 10(dti) 26 - 742: 6(int) Load 741 - 743: 27(ptr) AccessChain 10(dti) 26 - 744: 6(int) Load 743 - 745: 127(ptr) AccessChain 24(data) 25 744 115 26 - 746: 16(float) Load 745 - 747: 16(float) GroupNonUniformQuadSwap 35 746 26 - 748: 127(ptr) AccessChain 24(data) 25 742 115 26 - Store 748 747 + 735: 6(int) GroupNonUniformQuadSwap 35 734 26 + 736: 42(ptr) AccessChain 24(data) 25 730 25 26 + Store 736 735 + 737: 27(ptr) AccessChain 10(dti) 26 + 738: 6(int) Load 737 + 739: 27(ptr) AccessChain 10(dti) 26 + 740: 6(int) Load 739 + 741: 32(ptr) AccessChain 24(data) 25 740 25 + 742: 13(ivec4) Load 741 + 743: 51(ivec2) VectorShuffle 742 742 0 1 + 744: 51(ivec2) GroupNonUniformQuadSwap 35 743 26 + 745: 42(ptr) AccessChain 24(data) 25 738 25 26 + 746: 6(int) CompositeExtract 744 0 + Store 745 746 + 747: 42(ptr) AccessChain 24(data) 25 738 25 58 + 748: 6(int) CompositeExtract 744 1 + Store 747 748 749: 27(ptr) AccessChain 10(dti) 26 750: 6(int) Load 749 751: 27(ptr) AccessChain 10(dti) 26 752: 6(int) Load 751 - 753: 118(ptr) AccessChain 24(data) 25 752 115 - 754: 17(fvec4) Load 753 - 755: 136(fvec2) VectorShuffle 754 754 0 1 - 756: 136(fvec2) GroupNonUniformQuadSwap 35 755 26 - 757: 118(ptr) AccessChain 24(data) 25 750 115 - 758: 17(fvec4) Load 757 - 759: 17(fvec4) VectorShuffle 758 756 4 5 2 3 - Store 757 759 - 760: 27(ptr) AccessChain 10(dti) 26 - 761: 6(int) Load 760 - 762: 27(ptr) AccessChain 10(dti) 26 - 763: 6(int) Load 762 - 764: 118(ptr) AccessChain 24(data) 25 763 115 - 765: 17(fvec4) Load 764 - 766: 148(fvec3) VectorShuffle 765 765 0 1 2 - 767: 148(fvec3) GroupNonUniformQuadSwap 35 766 26 - 768: 118(ptr) AccessChain 24(data) 25 761 115 - 769: 17(fvec4) Load 768 - 770: 17(fvec4) VectorShuffle 769 767 4 5 6 3 - Store 768 770 + 753: 32(ptr) AccessChain 24(data) 25 752 25 + 754: 13(ivec4) Load 753 + 755: 7(ivec3) VectorShuffle 754 754 0 1 2 + 756: 7(ivec3) GroupNonUniformQuadSwap 35 755 26 + 757: 42(ptr) AccessChain 24(data) 25 750 25 26 + 758: 6(int) CompositeExtract 756 0 + Store 757 758 + 759: 42(ptr) AccessChain 24(data) 25 750 25 58 + 760: 6(int) CompositeExtract 756 1 + Store 759 760 + 761: 42(ptr) AccessChain 24(data) 25 750 25 73 + 762: 6(int) CompositeExtract 756 2 + Store 761 762 + 763: 27(ptr) AccessChain 10(dti) 26 + 764: 6(int) Load 763 + 765: 27(ptr) AccessChain 10(dti) 26 + 766: 6(int) Load 765 + 767: 81(ptr) AccessChain 24(data) 25 766 78 + 768: 15(ivec4) Load 767 + 769: 15(ivec4) GroupNonUniformQuadSwap 35 768 26 + 770: 81(ptr) AccessChain 24(data) 25 764 78 + Store 770 769 771: 27(ptr) AccessChain 10(dti) 26 772: 6(int) Load 771 773: 27(ptr) AccessChain 10(dti) 26 774: 6(int) Load 773 - 775: 161(ptr) AccessChain 24(data) 25 774 158 - 776: 19(f64vec4) Load 775 - 777: 19(f64vec4) GroupNonUniformQuadSwap 35 776 26 - 778: 161(ptr) AccessChain 24(data) 25 772 158 + 775: 90(ptr) AccessChain 24(data) 25 774 78 26 + 776: 14(int) Load 775 + 777: 14(int) GroupNonUniformQuadSwap 35 776 26 + 778: 90(ptr) AccessChain 24(data) 25 772 78 26 Store 778 777 779: 27(ptr) AccessChain 10(dti) 26 780: 6(int) Load 779 781: 27(ptr) AccessChain 10(dti) 26 782: 6(int) Load 781 - 783: 170(ptr) AccessChain 24(data) 25 782 158 26 - 784:18(float64_t) Load 783 - 785:18(float64_t) GroupNonUniformQuadSwap 35 784 26 - 786: 170(ptr) AccessChain 24(data) 25 780 158 26 - Store 786 785 - 787: 27(ptr) AccessChain 10(dti) 26 - 788: 6(int) Load 787 - 789: 27(ptr) AccessChain 10(dti) 26 - 790: 6(int) Load 789 - 791: 161(ptr) AccessChain 24(data) 25 790 158 - 792: 19(f64vec4) Load 791 - 793:179(f64vec2) VectorShuffle 792 792 0 1 - 794:179(f64vec2) GroupNonUniformQuadSwap 35 793 26 - 795: 161(ptr) AccessChain 24(data) 25 788 158 - 796: 19(f64vec4) Load 795 - 797: 19(f64vec4) VectorShuffle 796 794 4 5 2 3 - Store 795 797 - 798: 27(ptr) AccessChain 10(dti) 26 - 799: 6(int) Load 798 - 800: 27(ptr) AccessChain 10(dti) 26 - 801: 6(int) Load 800 - 802: 161(ptr) AccessChain 24(data) 25 801 158 - 803: 19(f64vec4) Load 802 - 804:191(f64vec3) VectorShuffle 803 803 0 1 2 - 805:191(f64vec3) GroupNonUniformQuadSwap 35 804 26 - 806: 161(ptr) AccessChain 24(data) 25 799 158 - 807: 19(f64vec4) Load 806 - 808: 19(f64vec4) VectorShuffle 807 805 4 5 6 3 - Store 806 808 - 809: 27(ptr) AccessChain 10(dti) 26 - 810: 6(int) Load 809 - 811: 27(ptr) AccessChain 10(dti) 26 - 812: 6(int) Load 811 - 813: 32(ptr) AccessChain 24(data) 25 812 25 - 814: 13(ivec4) Load 813 - 815: 13(ivec4) GroupNonUniformQuadSwap 35 814 205 - 816: 32(ptr) AccessChain 24(data) 25 810 25 - Store 816 815 - 817: 27(ptr) AccessChain 10(dti) 26 - 818: 6(int) Load 817 - 819: 27(ptr) AccessChain 10(dti) 26 - 820: 6(int) Load 819 - 821: 42(ptr) AccessChain 24(data) 25 820 25 26 + 783: 81(ptr) AccessChain 24(data) 25 782 78 + 784: 15(ivec4) Load 783 + 785: 99(ivec2) VectorShuffle 784 784 0 1 + 786: 99(ivec2) GroupNonUniformQuadSwap 35 785 26 + 787: 90(ptr) AccessChain 24(data) 25 780 78 26 + 788: 14(int) CompositeExtract 786 0 + Store 787 788 + 789: 90(ptr) AccessChain 24(data) 25 780 78 58 + 790: 14(int) CompositeExtract 786 1 + Store 789 790 + 791: 27(ptr) AccessChain 10(dti) 26 + 792: 6(int) Load 791 + 793: 27(ptr) AccessChain 10(dti) 26 + 794: 6(int) Load 793 + 795: 81(ptr) AccessChain 24(data) 25 794 78 + 796: 15(ivec4) Load 795 + 797: 112(ivec3) VectorShuffle 796 796 0 1 2 + 798: 112(ivec3) GroupNonUniformQuadSwap 35 797 26 + 799: 90(ptr) AccessChain 24(data) 25 792 78 26 + 800: 14(int) CompositeExtract 798 0 + Store 799 800 + 801: 90(ptr) AccessChain 24(data) 25 792 78 58 + 802: 14(int) CompositeExtract 798 1 + Store 801 802 + 803: 90(ptr) AccessChain 24(data) 25 792 78 73 + 804: 14(int) CompositeExtract 798 2 + Store 803 804 + 805: 27(ptr) AccessChain 10(dti) 26 + 806: 6(int) Load 805 + 807: 27(ptr) AccessChain 10(dti) 26 + 808: 6(int) Load 807 + 809: 128(ptr) AccessChain 24(data) 25 808 125 + 810: 17(fvec4) Load 809 + 811: 17(fvec4) GroupNonUniformQuadSwap 35 810 26 + 812: 128(ptr) AccessChain 24(data) 25 806 125 + Store 812 811 + 813: 27(ptr) AccessChain 10(dti) 26 + 814: 6(int) Load 813 + 815: 27(ptr) AccessChain 10(dti) 26 + 816: 6(int) Load 815 + 817: 137(ptr) AccessChain 24(data) 25 816 125 26 + 818: 16(float) Load 817 + 819: 16(float) GroupNonUniformQuadSwap 35 818 26 + 820: 137(ptr) AccessChain 24(data) 25 814 125 26 + Store 820 819 + 821: 27(ptr) AccessChain 10(dti) 26 822: 6(int) Load 821 - 823: 6(int) GroupNonUniformQuadSwap 35 822 205 - 824: 42(ptr) AccessChain 24(data) 25 818 25 26 - Store 824 823 - 825: 27(ptr) AccessChain 10(dti) 26 - 826: 6(int) Load 825 - 827: 27(ptr) AccessChain 10(dti) 26 - 828: 6(int) Load 827 - 829: 32(ptr) AccessChain 24(data) 25 828 25 - 830: 13(ivec4) Load 829 - 831: 51(ivec2) VectorShuffle 830 830 0 1 - 832: 51(ivec2) GroupNonUniformQuadSwap 35 831 205 - 833: 32(ptr) AccessChain 24(data) 25 826 25 - 834: 13(ivec4) Load 833 - 835: 13(ivec4) VectorShuffle 834 832 4 5 2 3 - Store 833 835 - 836: 27(ptr) AccessChain 10(dti) 26 - 837: 6(int) Load 836 - 838: 27(ptr) AccessChain 10(dti) 26 - 839: 6(int) Load 838 - 840: 32(ptr) AccessChain 24(data) 25 839 25 - 841: 13(ivec4) Load 840 - 842: 7(ivec3) VectorShuffle 841 841 0 1 2 - 843: 7(ivec3) GroupNonUniformQuadSwap 35 842 205 - 844: 32(ptr) AccessChain 24(data) 25 837 25 - 845: 13(ivec4) Load 844 - 846: 13(ivec4) VectorShuffle 845 843 4 5 6 3 - Store 844 846 + 823: 27(ptr) AccessChain 10(dti) 26 + 824: 6(int) Load 823 + 825: 128(ptr) AccessChain 24(data) 25 824 125 + 826: 17(fvec4) Load 825 + 827: 146(fvec2) VectorShuffle 826 826 0 1 + 828: 146(fvec2) GroupNonUniformQuadSwap 35 827 26 + 829: 137(ptr) AccessChain 24(data) 25 822 125 26 + 830: 16(float) CompositeExtract 828 0 + Store 829 830 + 831: 137(ptr) AccessChain 24(data) 25 822 125 58 + 832: 16(float) CompositeExtract 828 1 + Store 831 832 + 833: 27(ptr) AccessChain 10(dti) 26 + 834: 6(int) Load 833 + 835: 27(ptr) AccessChain 10(dti) 26 + 836: 6(int) Load 835 + 837: 128(ptr) AccessChain 24(data) 25 836 125 + 838: 17(fvec4) Load 837 + 839: 159(fvec3) VectorShuffle 838 838 0 1 2 + 840: 159(fvec3) GroupNonUniformQuadSwap 35 839 26 + 841: 137(ptr) AccessChain 24(data) 25 834 125 26 + 842: 16(float) CompositeExtract 840 0 + Store 841 842 + 843: 137(ptr) AccessChain 24(data) 25 834 125 58 + 844: 16(float) CompositeExtract 840 1 + Store 843 844 + 845: 137(ptr) AccessChain 24(data) 25 834 125 73 + 846: 16(float) CompositeExtract 840 2 + Store 845 846 847: 27(ptr) AccessChain 10(dti) 26 848: 6(int) Load 847 849: 27(ptr) AccessChain 10(dti) 26 850: 6(int) Load 849 - 851: 75(ptr) AccessChain 24(data) 25 850 72 - 852: 15(ivec4) Load 851 - 853: 15(ivec4) GroupNonUniformQuadSwap 35 852 205 - 854: 75(ptr) AccessChain 24(data) 25 848 72 + 851: 175(ptr) AccessChain 24(data) 25 850 172 + 852: 19(f64vec4) Load 851 + 853: 19(f64vec4) GroupNonUniformQuadSwap 35 852 26 + 854: 175(ptr) AccessChain 24(data) 25 848 172 Store 854 853 855: 27(ptr) AccessChain 10(dti) 26 856: 6(int) Load 855 857: 27(ptr) AccessChain 10(dti) 26 858: 6(int) Load 857 - 859: 84(ptr) AccessChain 24(data) 25 858 72 26 - 860: 14(int) Load 859 - 861: 14(int) GroupNonUniformQuadSwap 35 860 205 - 862: 84(ptr) AccessChain 24(data) 25 856 72 26 + 859: 184(ptr) AccessChain 24(data) 25 858 172 26 + 860:18(float64_t) Load 859 + 861:18(float64_t) GroupNonUniformQuadSwap 35 860 26 + 862: 184(ptr) AccessChain 24(data) 25 856 172 26 Store 862 861 863: 27(ptr) AccessChain 10(dti) 26 864: 6(int) Load 863 865: 27(ptr) AccessChain 10(dti) 26 866: 6(int) Load 865 - 867: 75(ptr) AccessChain 24(data) 25 866 72 - 868: 15(ivec4) Load 867 - 869: 93(ivec2) VectorShuffle 868 868 0 1 - 870: 93(ivec2) GroupNonUniformQuadSwap 35 869 205 - 871: 75(ptr) AccessChain 24(data) 25 864 72 - 872: 15(ivec4) Load 871 - 873: 15(ivec4) VectorShuffle 872 870 4 5 2 3 - Store 871 873 - 874: 27(ptr) AccessChain 10(dti) 26 - 875: 6(int) Load 874 - 876: 27(ptr) AccessChain 10(dti) 26 - 877: 6(int) Load 876 - 878: 75(ptr) AccessChain 24(data) 25 877 72 - 879: 15(ivec4) Load 878 - 880: 105(ivec3) VectorShuffle 879 879 0 1 2 - 881: 105(ivec3) GroupNonUniformQuadSwap 35 880 205 - 882: 75(ptr) AccessChain 24(data) 25 875 72 - 883: 15(ivec4) Load 882 - 884: 15(ivec4) VectorShuffle 883 881 4 5 6 3 - Store 882 884 - 885: 27(ptr) AccessChain 10(dti) 26 - 886: 6(int) Load 885 - 887: 27(ptr) AccessChain 10(dti) 26 - 888: 6(int) Load 887 - 889: 118(ptr) AccessChain 24(data) 25 888 115 - 890: 17(fvec4) Load 889 - 891: 17(fvec4) GroupNonUniformQuadSwap 35 890 205 - 892: 118(ptr) AccessChain 24(data) 25 886 115 - Store 892 891 - 893: 27(ptr) AccessChain 10(dti) 26 - 894: 6(int) Load 893 - 895: 27(ptr) AccessChain 10(dti) 26 - 896: 6(int) Load 895 - 897: 127(ptr) AccessChain 24(data) 25 896 115 26 - 898: 16(float) Load 897 - 899: 16(float) GroupNonUniformQuadSwap 35 898 205 - 900: 127(ptr) AccessChain 24(data) 25 894 115 26 - Store 900 899 - 901: 27(ptr) AccessChain 10(dti) 26 + 867: 175(ptr) AccessChain 24(data) 25 866 172 + 868: 19(f64vec4) Load 867 + 869:193(f64vec2) VectorShuffle 868 868 0 1 + 870:193(f64vec2) GroupNonUniformQuadSwap 35 869 26 + 871: 184(ptr) AccessChain 24(data) 25 864 172 26 + 872:18(float64_t) CompositeExtract 870 0 + Store 871 872 + 873: 184(ptr) AccessChain 24(data) 25 864 172 58 + 874:18(float64_t) CompositeExtract 870 1 + Store 873 874 + 875: 27(ptr) AccessChain 10(dti) 26 + 876: 6(int) Load 875 + 877: 27(ptr) AccessChain 10(dti) 26 + 878: 6(int) Load 877 + 879: 175(ptr) AccessChain 24(data) 25 878 172 + 880: 19(f64vec4) Load 879 + 881:206(f64vec3) VectorShuffle 880 880 0 1 2 + 882:206(f64vec3) GroupNonUniformQuadSwap 35 881 26 + 883: 184(ptr) AccessChain 24(data) 25 876 172 26 + 884:18(float64_t) CompositeExtract 882 0 + Store 883 884 + 885: 184(ptr) AccessChain 24(data) 25 876 172 58 + 886:18(float64_t) CompositeExtract 882 1 + Store 885 886 + 887: 184(ptr) AccessChain 24(data) 25 876 172 73 + 888:18(float64_t) CompositeExtract 882 2 + Store 887 888 + 889: 27(ptr) AccessChain 10(dti) 26 + 890: 6(int) Load 889 + 891: 27(ptr) AccessChain 10(dti) 26 + 892: 6(int) Load 891 + 893: 32(ptr) AccessChain 24(data) 25 892 25 + 894: 13(ivec4) Load 893 + 895: 13(ivec4) GroupNonUniformQuadSwap 35 894 58 + 896: 32(ptr) AccessChain 24(data) 25 890 25 + Store 896 895 + 897: 27(ptr) AccessChain 10(dti) 26 + 898: 6(int) Load 897 + 899: 27(ptr) AccessChain 10(dti) 26 + 900: 6(int) Load 899 + 901: 42(ptr) AccessChain 24(data) 25 900 25 26 902: 6(int) Load 901 - 903: 27(ptr) AccessChain 10(dti) 26 - 904: 6(int) Load 903 - 905: 118(ptr) AccessChain 24(data) 25 904 115 - 906: 17(fvec4) Load 905 - 907: 136(fvec2) VectorShuffle 906 906 0 1 - 908: 136(fvec2) GroupNonUniformQuadSwap 35 907 205 - 909: 118(ptr) AccessChain 24(data) 25 902 115 - 910: 17(fvec4) Load 909 - 911: 17(fvec4) VectorShuffle 910 908 4 5 2 3 - Store 909 911 - 912: 27(ptr) AccessChain 10(dti) 26 - 913: 6(int) Load 912 - 914: 27(ptr) AccessChain 10(dti) 26 - 915: 6(int) Load 914 - 916: 118(ptr) AccessChain 24(data) 25 915 115 - 917: 17(fvec4) Load 916 - 918: 148(fvec3) VectorShuffle 917 917 0 1 2 - 919: 148(fvec3) GroupNonUniformQuadSwap 35 918 205 - 920: 118(ptr) AccessChain 24(data) 25 913 115 - 921: 17(fvec4) Load 920 - 922: 17(fvec4) VectorShuffle 921 919 4 5 6 3 - Store 920 922 - 923: 27(ptr) AccessChain 10(dti) 26 - 924: 6(int) Load 923 - 925: 27(ptr) AccessChain 10(dti) 26 - 926: 6(int) Load 925 - 927: 161(ptr) AccessChain 24(data) 25 926 158 - 928: 19(f64vec4) Load 927 - 929: 19(f64vec4) GroupNonUniformQuadSwap 35 928 205 - 930: 161(ptr) AccessChain 24(data) 25 924 158 - Store 930 929 + 903: 6(int) GroupNonUniformQuadSwap 35 902 58 + 904: 42(ptr) AccessChain 24(data) 25 898 25 26 + Store 904 903 + 905: 27(ptr) AccessChain 10(dti) 26 + 906: 6(int) Load 905 + 907: 27(ptr) AccessChain 10(dti) 26 + 908: 6(int) Load 907 + 909: 32(ptr) AccessChain 24(data) 25 908 25 + 910: 13(ivec4) Load 909 + 911: 51(ivec2) VectorShuffle 910 910 0 1 + 912: 51(ivec2) GroupNonUniformQuadSwap 35 911 58 + 913: 42(ptr) AccessChain 24(data) 25 906 25 26 + 914: 6(int) CompositeExtract 912 0 + Store 913 914 + 915: 42(ptr) AccessChain 24(data) 25 906 25 58 + 916: 6(int) CompositeExtract 912 1 + Store 915 916 + 917: 27(ptr) AccessChain 10(dti) 26 + 918: 6(int) Load 917 + 919: 27(ptr) AccessChain 10(dti) 26 + 920: 6(int) Load 919 + 921: 32(ptr) AccessChain 24(data) 25 920 25 + 922: 13(ivec4) Load 921 + 923: 7(ivec3) VectorShuffle 922 922 0 1 2 + 924: 7(ivec3) GroupNonUniformQuadSwap 35 923 58 + 925: 42(ptr) AccessChain 24(data) 25 918 25 26 + 926: 6(int) CompositeExtract 924 0 + Store 925 926 + 927: 42(ptr) AccessChain 24(data) 25 918 25 58 + 928: 6(int) CompositeExtract 924 1 + Store 927 928 + 929: 42(ptr) AccessChain 24(data) 25 918 25 73 + 930: 6(int) CompositeExtract 924 2 + Store 929 930 931: 27(ptr) AccessChain 10(dti) 26 932: 6(int) Load 931 933: 27(ptr) AccessChain 10(dti) 26 934: 6(int) Load 933 - 935: 170(ptr) AccessChain 24(data) 25 934 158 26 - 936:18(float64_t) Load 935 - 937:18(float64_t) GroupNonUniformQuadSwap 35 936 205 - 938: 170(ptr) AccessChain 24(data) 25 932 158 26 + 935: 81(ptr) AccessChain 24(data) 25 934 78 + 936: 15(ivec4) Load 935 + 937: 15(ivec4) GroupNonUniformQuadSwap 35 936 58 + 938: 81(ptr) AccessChain 24(data) 25 932 78 Store 938 937 939: 27(ptr) AccessChain 10(dti) 26 940: 6(int) Load 939 941: 27(ptr) AccessChain 10(dti) 26 942: 6(int) Load 941 - 943: 161(ptr) AccessChain 24(data) 25 942 158 - 944: 19(f64vec4) Load 943 - 945:179(f64vec2) VectorShuffle 944 944 0 1 - 946:179(f64vec2) GroupNonUniformQuadSwap 35 945 205 - 947: 161(ptr) AccessChain 24(data) 25 940 158 - 948: 19(f64vec4) Load 947 - 949: 19(f64vec4) VectorShuffle 948 946 4 5 2 3 - Store 947 949 - 950: 27(ptr) AccessChain 10(dti) 26 - 951: 6(int) Load 950 - 952: 27(ptr) AccessChain 10(dti) 26 - 953: 6(int) Load 952 - 954: 161(ptr) AccessChain 24(data) 25 953 158 - 955: 19(f64vec4) Load 954 - 956:191(f64vec3) VectorShuffle 955 955 0 1 2 - 957:191(f64vec3) GroupNonUniformQuadSwap 35 956 205 - 958: 161(ptr) AccessChain 24(data) 25 951 158 - 959: 19(f64vec4) Load 958 - 960: 19(f64vec4) VectorShuffle 959 957 4 5 6 3 - Store 958 960 + 943: 90(ptr) AccessChain 24(data) 25 942 78 26 + 944: 14(int) Load 943 + 945: 14(int) GroupNonUniformQuadSwap 35 944 58 + 946: 90(ptr) AccessChain 24(data) 25 940 78 26 + Store 946 945 + 947: 27(ptr) AccessChain 10(dti) 26 + 948: 6(int) Load 947 + 949: 27(ptr) AccessChain 10(dti) 26 + 950: 6(int) Load 949 + 951: 81(ptr) AccessChain 24(data) 25 950 78 + 952: 15(ivec4) Load 951 + 953: 99(ivec2) VectorShuffle 952 952 0 1 + 954: 99(ivec2) GroupNonUniformQuadSwap 35 953 58 + 955: 90(ptr) AccessChain 24(data) 25 948 78 26 + 956: 14(int) CompositeExtract 954 0 + Store 955 956 + 957: 90(ptr) AccessChain 24(data) 25 948 78 58 + 958: 14(int) CompositeExtract 954 1 + Store 957 958 + 959: 27(ptr) AccessChain 10(dti) 26 + 960: 6(int) Load 959 961: 27(ptr) AccessChain 10(dti) 26 962: 6(int) Load 961 - 963: 27(ptr) AccessChain 10(dti) 26 - 964: 6(int) Load 963 - 965: 32(ptr) AccessChain 24(data) 25 964 25 - 966: 13(ivec4) Load 965 - 967: 13(ivec4) GroupNonUniformQuadSwap 35 966 358 - 968: 32(ptr) AccessChain 24(data) 25 962 25 - Store 968 967 - 969: 27(ptr) AccessChain 10(dti) 26 - 970: 6(int) Load 969 - 971: 27(ptr) AccessChain 10(dti) 26 - 972: 6(int) Load 971 - 973: 42(ptr) AccessChain 24(data) 25 972 25 26 + 963: 81(ptr) AccessChain 24(data) 25 962 78 + 964: 15(ivec4) Load 963 + 965: 112(ivec3) VectorShuffle 964 964 0 1 2 + 966: 112(ivec3) GroupNonUniformQuadSwap 35 965 58 + 967: 90(ptr) AccessChain 24(data) 25 960 78 26 + 968: 14(int) CompositeExtract 966 0 + Store 967 968 + 969: 90(ptr) AccessChain 24(data) 25 960 78 58 + 970: 14(int) CompositeExtract 966 1 + Store 969 970 + 971: 90(ptr) AccessChain 24(data) 25 960 78 73 + 972: 14(int) CompositeExtract 966 2 + Store 971 972 + 973: 27(ptr) AccessChain 10(dti) 26 974: 6(int) Load 973 - 975: 6(int) GroupNonUniformQuadSwap 35 974 358 - 976: 42(ptr) AccessChain 24(data) 25 970 25 26 - Store 976 975 - 977: 27(ptr) AccessChain 10(dti) 26 - 978: 6(int) Load 977 - 979: 27(ptr) AccessChain 10(dti) 26 - 980: 6(int) Load 979 - 981: 32(ptr) AccessChain 24(data) 25 980 25 - 982: 13(ivec4) Load 981 - 983: 51(ivec2) VectorShuffle 982 982 0 1 - 984: 51(ivec2) GroupNonUniformQuadSwap 35 983 358 - 985: 32(ptr) AccessChain 24(data) 25 978 25 - 986: 13(ivec4) Load 985 - 987: 13(ivec4) VectorShuffle 986 984 4 5 2 3 - Store 985 987 - 988: 27(ptr) AccessChain 10(dti) 26 - 989: 6(int) Load 988 - 990: 27(ptr) AccessChain 10(dti) 26 - 991: 6(int) Load 990 - 992: 32(ptr) AccessChain 24(data) 25 991 25 - 993: 13(ivec4) Load 992 - 994: 7(ivec3) VectorShuffle 993 993 0 1 2 - 995: 7(ivec3) GroupNonUniformQuadSwap 35 994 358 - 996: 32(ptr) AccessChain 24(data) 25 989 25 - 997: 13(ivec4) Load 996 - 998: 13(ivec4) VectorShuffle 997 995 4 5 6 3 - Store 996 998 - 999: 27(ptr) AccessChain 10(dti) 26 - 1000: 6(int) Load 999 + 975: 27(ptr) AccessChain 10(dti) 26 + 976: 6(int) Load 975 + 977: 128(ptr) AccessChain 24(data) 25 976 125 + 978: 17(fvec4) Load 977 + 979: 17(fvec4) GroupNonUniformQuadSwap 35 978 58 + 980: 128(ptr) AccessChain 24(data) 25 974 125 + Store 980 979 + 981: 27(ptr) AccessChain 10(dti) 26 + 982: 6(int) Load 981 + 983: 27(ptr) AccessChain 10(dti) 26 + 984: 6(int) Load 983 + 985: 137(ptr) AccessChain 24(data) 25 984 125 26 + 986: 16(float) Load 985 + 987: 16(float) GroupNonUniformQuadSwap 35 986 58 + 988: 137(ptr) AccessChain 24(data) 25 982 125 26 + Store 988 987 + 989: 27(ptr) AccessChain 10(dti) 26 + 990: 6(int) Load 989 + 991: 27(ptr) AccessChain 10(dti) 26 + 992: 6(int) Load 991 + 993: 128(ptr) AccessChain 24(data) 25 992 125 + 994: 17(fvec4) Load 993 + 995: 146(fvec2) VectorShuffle 994 994 0 1 + 996: 146(fvec2) GroupNonUniformQuadSwap 35 995 58 + 997: 137(ptr) AccessChain 24(data) 25 990 125 26 + 998: 16(float) CompositeExtract 996 0 + Store 997 998 + 999: 137(ptr) AccessChain 24(data) 25 990 125 58 + 1000: 16(float) CompositeExtract 996 1 + Store 999 1000 1001: 27(ptr) AccessChain 10(dti) 26 1002: 6(int) Load 1001 - 1003: 75(ptr) AccessChain 24(data) 25 1002 72 - 1004: 15(ivec4) Load 1003 - 1005: 15(ivec4) GroupNonUniformQuadSwap 35 1004 358 - 1006: 75(ptr) AccessChain 24(data) 25 1000 72 - Store 1006 1005 - 1007: 27(ptr) AccessChain 10(dti) 26 - 1008: 6(int) Load 1007 - 1009: 27(ptr) AccessChain 10(dti) 26 - 1010: 6(int) Load 1009 - 1011: 84(ptr) AccessChain 24(data) 25 1010 72 26 - 1012: 14(int) Load 1011 - 1013: 14(int) GroupNonUniformQuadSwap 35 1012 358 - 1014: 84(ptr) AccessChain 24(data) 25 1008 72 26 - Store 1014 1013 + 1003: 27(ptr) AccessChain 10(dti) 26 + 1004: 6(int) Load 1003 + 1005: 128(ptr) AccessChain 24(data) 25 1004 125 + 1006: 17(fvec4) Load 1005 + 1007: 159(fvec3) VectorShuffle 1006 1006 0 1 2 + 1008: 159(fvec3) GroupNonUniformQuadSwap 35 1007 58 + 1009: 137(ptr) AccessChain 24(data) 25 1002 125 26 + 1010: 16(float) CompositeExtract 1008 0 + Store 1009 1010 + 1011: 137(ptr) AccessChain 24(data) 25 1002 125 58 + 1012: 16(float) CompositeExtract 1008 1 + Store 1011 1012 + 1013: 137(ptr) AccessChain 24(data) 25 1002 125 73 + 1014: 16(float) CompositeExtract 1008 2 + Store 1013 1014 1015: 27(ptr) AccessChain 10(dti) 26 1016: 6(int) Load 1015 1017: 27(ptr) AccessChain 10(dti) 26 1018: 6(int) Load 1017 - 1019: 75(ptr) AccessChain 24(data) 25 1018 72 - 1020: 15(ivec4) Load 1019 - 1021: 93(ivec2) VectorShuffle 1020 1020 0 1 - 1022: 93(ivec2) GroupNonUniformQuadSwap 35 1021 358 - 1023: 75(ptr) AccessChain 24(data) 25 1016 72 - 1024: 15(ivec4) Load 1023 - 1025: 15(ivec4) VectorShuffle 1024 1022 4 5 2 3 - Store 1023 1025 - 1026: 27(ptr) AccessChain 10(dti) 26 - 1027: 6(int) Load 1026 - 1028: 27(ptr) AccessChain 10(dti) 26 - 1029: 6(int) Load 1028 - 1030: 75(ptr) AccessChain 24(data) 25 1029 72 - 1031: 15(ivec4) Load 1030 - 1032: 105(ivec3) VectorShuffle 1031 1031 0 1 2 - 1033: 105(ivec3) GroupNonUniformQuadSwap 35 1032 358 - 1034: 75(ptr) AccessChain 24(data) 25 1027 72 - 1035: 15(ivec4) Load 1034 - 1036: 15(ivec4) VectorShuffle 1035 1033 4 5 6 3 - Store 1034 1036 - 1037: 27(ptr) AccessChain 10(dti) 26 - 1038: 6(int) Load 1037 - 1039: 27(ptr) AccessChain 10(dti) 26 - 1040: 6(int) Load 1039 - 1041: 118(ptr) AccessChain 24(data) 25 1040 115 - 1042: 17(fvec4) Load 1041 - 1043: 17(fvec4) GroupNonUniformQuadSwap 35 1042 358 - 1044: 118(ptr) AccessChain 24(data) 25 1038 115 - Store 1044 1043 + 1019: 175(ptr) AccessChain 24(data) 25 1018 172 + 1020: 19(f64vec4) Load 1019 + 1021: 19(f64vec4) GroupNonUniformQuadSwap 35 1020 58 + 1022: 175(ptr) AccessChain 24(data) 25 1016 172 + Store 1022 1021 + 1023: 27(ptr) AccessChain 10(dti) 26 + 1024: 6(int) Load 1023 + 1025: 27(ptr) AccessChain 10(dti) 26 + 1026: 6(int) Load 1025 + 1027: 184(ptr) AccessChain 24(data) 25 1026 172 26 + 1028:18(float64_t) Load 1027 + 1029:18(float64_t) GroupNonUniformQuadSwap 35 1028 58 + 1030: 184(ptr) AccessChain 24(data) 25 1024 172 26 + Store 1030 1029 + 1031: 27(ptr) AccessChain 10(dti) 26 + 1032: 6(int) Load 1031 + 1033: 27(ptr) AccessChain 10(dti) 26 + 1034: 6(int) Load 1033 + 1035: 175(ptr) AccessChain 24(data) 25 1034 172 + 1036: 19(f64vec4) Load 1035 + 1037:193(f64vec2) VectorShuffle 1036 1036 0 1 + 1038:193(f64vec2) GroupNonUniformQuadSwap 35 1037 58 + 1039: 184(ptr) AccessChain 24(data) 25 1032 172 26 + 1040:18(float64_t) CompositeExtract 1038 0 + Store 1039 1040 + 1041: 184(ptr) AccessChain 24(data) 25 1032 172 58 + 1042:18(float64_t) CompositeExtract 1038 1 + Store 1041 1042 + 1043: 27(ptr) AccessChain 10(dti) 26 + 1044: 6(int) Load 1043 1045: 27(ptr) AccessChain 10(dti) 26 1046: 6(int) Load 1045 - 1047: 27(ptr) AccessChain 10(dti) 26 - 1048: 6(int) Load 1047 - 1049: 127(ptr) AccessChain 24(data) 25 1048 115 26 - 1050: 16(float) Load 1049 - 1051: 16(float) GroupNonUniformQuadSwap 35 1050 358 - 1052: 127(ptr) AccessChain 24(data) 25 1046 115 26 - Store 1052 1051 - 1053: 27(ptr) AccessChain 10(dti) 26 - 1054: 6(int) Load 1053 - 1055: 27(ptr) AccessChain 10(dti) 26 - 1056: 6(int) Load 1055 - 1057: 118(ptr) AccessChain 24(data) 25 1056 115 - 1058: 17(fvec4) Load 1057 - 1059: 136(fvec2) VectorShuffle 1058 1058 0 1 - 1060: 136(fvec2) GroupNonUniformQuadSwap 35 1059 358 - 1061: 118(ptr) AccessChain 24(data) 25 1054 115 - 1062: 17(fvec4) Load 1061 - 1063: 17(fvec4) VectorShuffle 1062 1060 4 5 2 3 - Store 1061 1063 - 1064: 27(ptr) AccessChain 10(dti) 26 - 1065: 6(int) Load 1064 - 1066: 27(ptr) AccessChain 10(dti) 26 - 1067: 6(int) Load 1066 - 1068: 118(ptr) AccessChain 24(data) 25 1067 115 - 1069: 17(fvec4) Load 1068 - 1070: 148(fvec3) VectorShuffle 1069 1069 0 1 2 - 1071: 148(fvec3) GroupNonUniformQuadSwap 35 1070 358 - 1072: 118(ptr) AccessChain 24(data) 25 1065 115 - 1073: 17(fvec4) Load 1072 - 1074: 17(fvec4) VectorShuffle 1073 1071 4 5 6 3 - Store 1072 1074 + 1047: 175(ptr) AccessChain 24(data) 25 1046 172 + 1048: 19(f64vec4) Load 1047 + 1049:206(f64vec3) VectorShuffle 1048 1048 0 1 2 + 1050:206(f64vec3) GroupNonUniformQuadSwap 35 1049 58 + 1051: 184(ptr) AccessChain 24(data) 25 1044 172 26 + 1052:18(float64_t) CompositeExtract 1050 0 + Store 1051 1052 + 1053: 184(ptr) AccessChain 24(data) 25 1044 172 58 + 1054:18(float64_t) CompositeExtract 1050 1 + Store 1053 1054 + 1055: 184(ptr) AccessChain 24(data) 25 1044 172 73 + 1056:18(float64_t) CompositeExtract 1050 2 + Store 1055 1056 + 1057: 27(ptr) AccessChain 10(dti) 26 + 1058: 6(int) Load 1057 + 1059: 27(ptr) AccessChain 10(dti) 26 + 1060: 6(int) Load 1059 + 1061: 32(ptr) AccessChain 24(data) 25 1060 25 + 1062: 13(ivec4) Load 1061 + 1063: 13(ivec4) GroupNonUniformQuadSwap 35 1062 73 + 1064: 32(ptr) AccessChain 24(data) 25 1058 25 + Store 1064 1063 + 1065: 27(ptr) AccessChain 10(dti) 26 + 1066: 6(int) Load 1065 + 1067: 27(ptr) AccessChain 10(dti) 26 + 1068: 6(int) Load 1067 + 1069: 42(ptr) AccessChain 24(data) 25 1068 25 26 + 1070: 6(int) Load 1069 + 1071: 6(int) GroupNonUniformQuadSwap 35 1070 73 + 1072: 42(ptr) AccessChain 24(data) 25 1066 25 26 + Store 1072 1071 + 1073: 27(ptr) AccessChain 10(dti) 26 + 1074: 6(int) Load 1073 1075: 27(ptr) AccessChain 10(dti) 26 1076: 6(int) Load 1075 - 1077: 27(ptr) AccessChain 10(dti) 26 - 1078: 6(int) Load 1077 - 1079: 161(ptr) AccessChain 24(data) 25 1078 158 - 1080: 19(f64vec4) Load 1079 - 1081: 19(f64vec4) GroupNonUniformQuadSwap 35 1080 358 - 1082: 161(ptr) AccessChain 24(data) 25 1076 158 - Store 1082 1081 - 1083: 27(ptr) AccessChain 10(dti) 26 - 1084: 6(int) Load 1083 + 1077: 32(ptr) AccessChain 24(data) 25 1076 25 + 1078: 13(ivec4) Load 1077 + 1079: 51(ivec2) VectorShuffle 1078 1078 0 1 + 1080: 51(ivec2) GroupNonUniformQuadSwap 35 1079 73 + 1081: 42(ptr) AccessChain 24(data) 25 1074 25 26 + 1082: 6(int) CompositeExtract 1080 0 + Store 1081 1082 + 1083: 42(ptr) AccessChain 24(data) 25 1074 25 58 + 1084: 6(int) CompositeExtract 1080 1 + Store 1083 1084 1085: 27(ptr) AccessChain 10(dti) 26 1086: 6(int) Load 1085 - 1087: 170(ptr) AccessChain 24(data) 25 1086 158 26 - 1088:18(float64_t) Load 1087 - 1089:18(float64_t) GroupNonUniformQuadSwap 35 1088 358 - 1090: 170(ptr) AccessChain 24(data) 25 1084 158 26 - Store 1090 1089 - 1091: 27(ptr) AccessChain 10(dti) 26 - 1092: 6(int) Load 1091 - 1093: 27(ptr) AccessChain 10(dti) 26 - 1094: 6(int) Load 1093 - 1095: 161(ptr) AccessChain 24(data) 25 1094 158 - 1096: 19(f64vec4) Load 1095 - 1097:179(f64vec2) VectorShuffle 1096 1096 0 1 - 1098:179(f64vec2) GroupNonUniformQuadSwap 35 1097 358 - 1099: 161(ptr) AccessChain 24(data) 25 1092 158 - 1100: 19(f64vec4) Load 1099 - 1101: 19(f64vec4) VectorShuffle 1100 1098 4 5 2 3 - Store 1099 1101 - 1102: 27(ptr) AccessChain 10(dti) 26 - 1103: 6(int) Load 1102 - 1104: 27(ptr) AccessChain 10(dti) 26 - 1105: 6(int) Load 1104 - 1106: 161(ptr) AccessChain 24(data) 25 1105 158 - 1107: 19(f64vec4) Load 1106 - 1108:191(f64vec3) VectorShuffle 1107 1107 0 1 2 - 1109:191(f64vec3) GroupNonUniformQuadSwap 35 1108 358 - 1110: 161(ptr) AccessChain 24(data) 25 1103 158 - 1111: 19(f64vec4) Load 1110 - 1112: 19(f64vec4) VectorShuffle 1111 1109 4 5 6 3 - Store 1110 1112 + 1087: 27(ptr) AccessChain 10(dti) 26 + 1088: 6(int) Load 1087 + 1089: 32(ptr) AccessChain 24(data) 25 1088 25 + 1090: 13(ivec4) Load 1089 + 1091: 7(ivec3) VectorShuffle 1090 1090 0 1 2 + 1092: 7(ivec3) GroupNonUniformQuadSwap 35 1091 73 + 1093: 42(ptr) AccessChain 24(data) 25 1086 25 26 + 1094: 6(int) CompositeExtract 1092 0 + Store 1093 1094 + 1095: 42(ptr) AccessChain 24(data) 25 1086 25 58 + 1096: 6(int) CompositeExtract 1092 1 + Store 1095 1096 + 1097: 42(ptr) AccessChain 24(data) 25 1086 25 73 + 1098: 6(int) CompositeExtract 1092 2 + Store 1097 1098 + 1099: 27(ptr) AccessChain 10(dti) 26 + 1100: 6(int) Load 1099 + 1101: 27(ptr) AccessChain 10(dti) 26 + 1102: 6(int) Load 1101 + 1103: 81(ptr) AccessChain 24(data) 25 1102 78 + 1104: 15(ivec4) Load 1103 + 1105: 15(ivec4) GroupNonUniformQuadSwap 35 1104 73 + 1106: 81(ptr) AccessChain 24(data) 25 1100 78 + Store 1106 1105 + 1107: 27(ptr) AccessChain 10(dti) 26 + 1108: 6(int) Load 1107 + 1109: 27(ptr) AccessChain 10(dti) 26 + 1110: 6(int) Load 1109 + 1111: 90(ptr) AccessChain 24(data) 25 1110 78 26 + 1112: 14(int) Load 1111 + 1113: 14(int) GroupNonUniformQuadSwap 35 1112 73 + 1114: 90(ptr) AccessChain 24(data) 25 1108 78 26 + Store 1114 1113 + 1115: 27(ptr) AccessChain 10(dti) 26 + 1116: 6(int) Load 1115 + 1117: 27(ptr) AccessChain 10(dti) 26 + 1118: 6(int) Load 1117 + 1119: 81(ptr) AccessChain 24(data) 25 1118 78 + 1120: 15(ivec4) Load 1119 + 1121: 99(ivec2) VectorShuffle 1120 1120 0 1 + 1122: 99(ivec2) GroupNonUniformQuadSwap 35 1121 73 + 1123: 90(ptr) AccessChain 24(data) 25 1116 78 26 + 1124: 14(int) CompositeExtract 1122 0 + Store 1123 1124 + 1125: 90(ptr) AccessChain 24(data) 25 1116 78 58 + 1126: 14(int) CompositeExtract 1122 1 + Store 1125 1126 + 1127: 27(ptr) AccessChain 10(dti) 26 + 1128: 6(int) Load 1127 + 1129: 27(ptr) AccessChain 10(dti) 26 + 1130: 6(int) Load 1129 + 1131: 81(ptr) AccessChain 24(data) 25 1130 78 + 1132: 15(ivec4) Load 1131 + 1133: 112(ivec3) VectorShuffle 1132 1132 0 1 2 + 1134: 112(ivec3) GroupNonUniformQuadSwap 35 1133 73 + 1135: 90(ptr) AccessChain 24(data) 25 1128 78 26 + 1136: 14(int) CompositeExtract 1134 0 + Store 1135 1136 + 1137: 90(ptr) AccessChain 24(data) 25 1128 78 58 + 1138: 14(int) CompositeExtract 1134 1 + Store 1137 1138 + 1139: 90(ptr) AccessChain 24(data) 25 1128 78 73 + 1140: 14(int) CompositeExtract 1134 2 + Store 1139 1140 + 1141: 27(ptr) AccessChain 10(dti) 26 + 1142: 6(int) Load 1141 + 1143: 27(ptr) AccessChain 10(dti) 26 + 1144: 6(int) Load 1143 + 1145: 128(ptr) AccessChain 24(data) 25 1144 125 + 1146: 17(fvec4) Load 1145 + 1147: 17(fvec4) GroupNonUniformQuadSwap 35 1146 73 + 1148: 128(ptr) AccessChain 24(data) 25 1142 125 + Store 1148 1147 + 1149: 27(ptr) AccessChain 10(dti) 26 + 1150: 6(int) Load 1149 + 1151: 27(ptr) AccessChain 10(dti) 26 + 1152: 6(int) Load 1151 + 1153: 137(ptr) AccessChain 24(data) 25 1152 125 26 + 1154: 16(float) Load 1153 + 1155: 16(float) GroupNonUniformQuadSwap 35 1154 73 + 1156: 137(ptr) AccessChain 24(data) 25 1150 125 26 + Store 1156 1155 + 1157: 27(ptr) AccessChain 10(dti) 26 + 1158: 6(int) Load 1157 + 1159: 27(ptr) AccessChain 10(dti) 26 + 1160: 6(int) Load 1159 + 1161: 128(ptr) AccessChain 24(data) 25 1160 125 + 1162: 17(fvec4) Load 1161 + 1163: 146(fvec2) VectorShuffle 1162 1162 0 1 + 1164: 146(fvec2) GroupNonUniformQuadSwap 35 1163 73 + 1165: 137(ptr) AccessChain 24(data) 25 1158 125 26 + 1166: 16(float) CompositeExtract 1164 0 + Store 1165 1166 + 1167: 137(ptr) AccessChain 24(data) 25 1158 125 58 + 1168: 16(float) CompositeExtract 1164 1 + Store 1167 1168 + 1169: 27(ptr) AccessChain 10(dti) 26 + 1170: 6(int) Load 1169 + 1171: 27(ptr) AccessChain 10(dti) 26 + 1172: 6(int) Load 1171 + 1173: 128(ptr) AccessChain 24(data) 25 1172 125 + 1174: 17(fvec4) Load 1173 + 1175: 159(fvec3) VectorShuffle 1174 1174 0 1 2 + 1176: 159(fvec3) GroupNonUniformQuadSwap 35 1175 73 + 1177: 137(ptr) AccessChain 24(data) 25 1170 125 26 + 1178: 16(float) CompositeExtract 1176 0 + Store 1177 1178 + 1179: 137(ptr) AccessChain 24(data) 25 1170 125 58 + 1180: 16(float) CompositeExtract 1176 1 + Store 1179 1180 + 1181: 137(ptr) AccessChain 24(data) 25 1170 125 73 + 1182: 16(float) CompositeExtract 1176 2 + Store 1181 1182 + 1183: 27(ptr) AccessChain 10(dti) 26 + 1184: 6(int) Load 1183 + 1185: 27(ptr) AccessChain 10(dti) 26 + 1186: 6(int) Load 1185 + 1187: 175(ptr) AccessChain 24(data) 25 1186 172 + 1188: 19(f64vec4) Load 1187 + 1189: 19(f64vec4) GroupNonUniformQuadSwap 35 1188 73 + 1190: 175(ptr) AccessChain 24(data) 25 1184 172 + Store 1190 1189 + 1191: 27(ptr) AccessChain 10(dti) 26 + 1192: 6(int) Load 1191 + 1193: 27(ptr) AccessChain 10(dti) 26 + 1194: 6(int) Load 1193 + 1195: 184(ptr) AccessChain 24(data) 25 1194 172 26 + 1196:18(float64_t) Load 1195 + 1197:18(float64_t) GroupNonUniformQuadSwap 35 1196 73 + 1198: 184(ptr) AccessChain 24(data) 25 1192 172 26 + Store 1198 1197 + 1199: 27(ptr) AccessChain 10(dti) 26 + 1200: 6(int) Load 1199 + 1201: 27(ptr) AccessChain 10(dti) 26 + 1202: 6(int) Load 1201 + 1203: 175(ptr) AccessChain 24(data) 25 1202 172 + 1204: 19(f64vec4) Load 1203 + 1205:193(f64vec2) VectorShuffle 1204 1204 0 1 + 1206:193(f64vec2) GroupNonUniformQuadSwap 35 1205 73 + 1207: 184(ptr) AccessChain 24(data) 25 1200 172 26 + 1208:18(float64_t) CompositeExtract 1206 0 + Store 1207 1208 + 1209: 184(ptr) AccessChain 24(data) 25 1200 172 58 + 1210:18(float64_t) CompositeExtract 1206 1 + Store 1209 1210 + 1211: 27(ptr) AccessChain 10(dti) 26 + 1212: 6(int) Load 1211 + 1213: 27(ptr) AccessChain 10(dti) 26 + 1214: 6(int) Load 1213 + 1215: 175(ptr) AccessChain 24(data) 25 1214 172 + 1216: 19(f64vec4) Load 1215 + 1217:206(f64vec3) VectorShuffle 1216 1216 0 1 2 + 1218:206(f64vec3) GroupNonUniformQuadSwap 35 1217 73 + 1219: 184(ptr) AccessChain 24(data) 25 1212 172 26 + 1220:18(float64_t) CompositeExtract 1218 0 + Store 1219 1220 + 1221: 184(ptr) AccessChain 24(data) 25 1212 172 58 + 1222:18(float64_t) CompositeExtract 1218 1 + Store 1221 1222 + 1223: 184(ptr) AccessChain 24(data) 25 1212 172 73 + 1224:18(float64_t) CompositeExtract 1218 2 + Store 1223 1224 Return FunctionEnd diff --git a/Test/baseResults/hlsl.wavereduction.comp.out b/Test/baseResults/hlsl.wavereduction.comp.out index a8986125c5..64a4e7c30d 100644 --- a/Test/baseResults/hlsl.wavereduction.comp.out +++ b/Test/baseResults/hlsl.wavereduction.comp.out @@ -6187,7 +6187,7 @@ local_size = (32, 16, 1) // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 901 +// Id's are bound by 991 Capability Shader Capability Float64 @@ -6196,7 +6196,7 @@ local_size = (32, 16, 1) Capability GroupNonUniformBallot 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint GLCompute 4 "CSMain" 896 + EntryPoint GLCompute 4 "CSMain" 986 ExecutionMode 4 LocalSize 32 16 1 Source HLSL 500 Name 4 "CSMain" @@ -6210,9 +6210,9 @@ local_size = (32, 16, 1) Name 22 "data" MemberName 22(data) 0 "@data" Name 24 "data" - Name 894 "dti" - Name 896 "dti" - Name 898 "param" + Name 984 "dti" + Name 986 "dti" + Name 988 "param" MemberDecorate 20(Types) 0 Offset 0 MemberDecorate 20(Types) 1 Offset 16 MemberDecorate 20(Types) 2 Offset 32 @@ -6222,7 +6222,7 @@ local_size = (32, 16, 1) Decorate 22(data) BufferBlock Decorate 24(data) DescriptorSet 0 Decorate 24(data) Binding 0 - Decorate 896(dti) BuiltIn GlobalInvocationId + Decorate 986(dti) BuiltIn GlobalInvocationId 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -6248,33 +6248,35 @@ local_size = (32, 16, 1) 35: 6(int) Constant 3 42: TypePointer Uniform 6(int) 51: TypeVector 6(int) 2 - 72: 14(int) Constant 1 - 75: TypePointer Uniform 15(ivec4) - 84: TypePointer Uniform 14(int) - 93: TypeVector 14(int) 2 - 105: TypeVector 14(int) 3 - 115: 14(int) Constant 2 - 118: TypePointer Uniform 17(fvec4) - 127: TypePointer Uniform 16(float) - 136: TypeVector 16(float) 2 - 148: TypeVector 16(float) 3 - 158: 14(int) Constant 3 - 161: TypePointer Uniform 19(f64vec4) - 170: TypePointer Uniform 18(float64_t) - 179: TypeVector 18(float64_t) 2 - 191: TypeVector 18(float64_t) 3 - 889: TypeBool - 895: TypePointer Input 7(ivec3) - 896(dti): 895(ptr) Variable Input + 58: 6(int) Constant 1 + 73: 6(int) Constant 2 + 78: 14(int) Constant 1 + 81: TypePointer Uniform 15(ivec4) + 90: TypePointer Uniform 14(int) + 99: TypeVector 14(int) 2 + 112: TypeVector 14(int) 3 + 125: 14(int) Constant 2 + 128: TypePointer Uniform 17(fvec4) + 137: TypePointer Uniform 16(float) + 146: TypeVector 16(float) 2 + 159: TypeVector 16(float) 3 + 172: 14(int) Constant 3 + 175: TypePointer Uniform 19(f64vec4) + 184: TypePointer Uniform 18(float64_t) + 193: TypeVector 18(float64_t) 2 + 206: TypeVector 18(float64_t) 3 + 979: TypeBool + 985: TypePointer Input 7(ivec3) + 986(dti): 985(ptr) Variable Input 4(CSMain): 2 Function None 3 5: Label - 894(dti): 8(ptr) Variable Function - 898(param): 8(ptr) Variable Function - 897: 7(ivec3) Load 896(dti) - Store 894(dti) 897 - 899: 7(ivec3) Load 894(dti) - Store 898(param) 899 - 900: 2 FunctionCall 11(@CSMain(vu3;) 898(param) + 984(dti): 8(ptr) Variable Function + 988(param): 8(ptr) Variable Function + 987: 7(ivec3) Load 986(dti) + Store 984(dti) 987 + 989: 7(ivec3) Load 984(dti) + Store 988(param) 989 + 990: 2 FunctionCall 11(@CSMain(vu3;) 988(param) Return FunctionEnd 11(@CSMain(vu3;): 2 Function None 9 @@ -6306,914 +6308,1068 @@ local_size = (32, 16, 1) 53: 13(ivec4) Load 52 54: 51(ivec2) VectorShuffle 53 53 0 1 55: 51(ivec2) GroupNonUniformIAdd 35 Reduce 54 - 56: 32(ptr) AccessChain 24(data) 25 48 25 - 57: 13(ivec4) Load 56 - 58: 13(ivec4) VectorShuffle 57 55 4 5 2 3 - Store 56 58 - 59: 27(ptr) AccessChain 10(dti) 26 - 60: 6(int) Load 59 + 56: 42(ptr) AccessChain 24(data) 25 48 25 26 + 57: 6(int) CompositeExtract 55 0 + Store 56 57 + 59: 42(ptr) AccessChain 24(data) 25 48 25 58 + 60: 6(int) CompositeExtract 55 1 + Store 59 60 61: 27(ptr) AccessChain 10(dti) 26 62: 6(int) Load 61 - 63: 32(ptr) AccessChain 24(data) 25 62 25 - 64: 13(ivec4) Load 63 - 65: 7(ivec3) VectorShuffle 64 64 0 1 2 - 66: 7(ivec3) GroupNonUniformIAdd 35 Reduce 65 - 67: 32(ptr) AccessChain 24(data) 25 60 25 - 68: 13(ivec4) Load 67 - 69: 13(ivec4) VectorShuffle 68 66 4 5 6 3 - Store 67 69 - 70: 27(ptr) AccessChain 10(dti) 26 - 71: 6(int) Load 70 - 73: 27(ptr) AccessChain 10(dti) 26 - 74: 6(int) Load 73 - 76: 75(ptr) AccessChain 24(data) 25 74 72 - 77: 15(ivec4) Load 76 - 78: 15(ivec4) GroupNonUniformIAdd 35 Reduce 77 - 79: 75(ptr) AccessChain 24(data) 25 71 72 - Store 79 78 - 80: 27(ptr) AccessChain 10(dti) 26 - 81: 6(int) Load 80 - 82: 27(ptr) AccessChain 10(dti) 26 - 83: 6(int) Load 82 - 85: 84(ptr) AccessChain 24(data) 25 83 72 26 - 86: 14(int) Load 85 - 87: 14(int) GroupNonUniformIAdd 35 Reduce 86 - 88: 84(ptr) AccessChain 24(data) 25 81 72 26 - Store 88 87 - 89: 27(ptr) AccessChain 10(dti) 26 - 90: 6(int) Load 89 - 91: 27(ptr) AccessChain 10(dti) 26 - 92: 6(int) Load 91 - 94: 75(ptr) AccessChain 24(data) 25 92 72 - 95: 15(ivec4) Load 94 - 96: 93(ivec2) VectorShuffle 95 95 0 1 - 97: 93(ivec2) GroupNonUniformIAdd 35 Reduce 96 - 98: 75(ptr) AccessChain 24(data) 25 90 72 - 99: 15(ivec4) Load 98 - 100: 15(ivec4) VectorShuffle 99 97 4 5 2 3 - Store 98 100 - 101: 27(ptr) AccessChain 10(dti) 26 - 102: 6(int) Load 101 - 103: 27(ptr) AccessChain 10(dti) 26 - 104: 6(int) Load 103 - 106: 75(ptr) AccessChain 24(data) 25 104 72 - 107: 15(ivec4) Load 106 - 108: 105(ivec3) VectorShuffle 107 107 0 1 2 - 109: 105(ivec3) GroupNonUniformIAdd 35 Reduce 108 - 110: 75(ptr) AccessChain 24(data) 25 102 72 - 111: 15(ivec4) Load 110 - 112: 15(ivec4) VectorShuffle 111 109 4 5 6 3 - Store 110 112 - 113: 27(ptr) AccessChain 10(dti) 26 - 114: 6(int) Load 113 - 116: 27(ptr) AccessChain 10(dti) 26 - 117: 6(int) Load 116 - 119: 118(ptr) AccessChain 24(data) 25 117 115 - 120: 17(fvec4) Load 119 - 121: 17(fvec4) GroupNonUniformFAdd 35 Reduce 120 - 122: 118(ptr) AccessChain 24(data) 25 114 115 - Store 122 121 + 63: 27(ptr) AccessChain 10(dti) 26 + 64: 6(int) Load 63 + 65: 32(ptr) AccessChain 24(data) 25 64 25 + 66: 13(ivec4) Load 65 + 67: 7(ivec3) VectorShuffle 66 66 0 1 2 + 68: 7(ivec3) GroupNonUniformIAdd 35 Reduce 67 + 69: 42(ptr) AccessChain 24(data) 25 62 25 26 + 70: 6(int) CompositeExtract 68 0 + Store 69 70 + 71: 42(ptr) AccessChain 24(data) 25 62 25 58 + 72: 6(int) CompositeExtract 68 1 + Store 71 72 + 74: 42(ptr) AccessChain 24(data) 25 62 25 73 + 75: 6(int) CompositeExtract 68 2 + Store 74 75 + 76: 27(ptr) AccessChain 10(dti) 26 + 77: 6(int) Load 76 + 79: 27(ptr) AccessChain 10(dti) 26 + 80: 6(int) Load 79 + 82: 81(ptr) AccessChain 24(data) 25 80 78 + 83: 15(ivec4) Load 82 + 84: 15(ivec4) GroupNonUniformIAdd 35 Reduce 83 + 85: 81(ptr) AccessChain 24(data) 25 77 78 + Store 85 84 + 86: 27(ptr) AccessChain 10(dti) 26 + 87: 6(int) Load 86 + 88: 27(ptr) AccessChain 10(dti) 26 + 89: 6(int) Load 88 + 91: 90(ptr) AccessChain 24(data) 25 89 78 26 + 92: 14(int) Load 91 + 93: 14(int) GroupNonUniformIAdd 35 Reduce 92 + 94: 90(ptr) AccessChain 24(data) 25 87 78 26 + Store 94 93 + 95: 27(ptr) AccessChain 10(dti) 26 + 96: 6(int) Load 95 + 97: 27(ptr) AccessChain 10(dti) 26 + 98: 6(int) Load 97 + 100: 81(ptr) AccessChain 24(data) 25 98 78 + 101: 15(ivec4) Load 100 + 102: 99(ivec2) VectorShuffle 101 101 0 1 + 103: 99(ivec2) GroupNonUniformIAdd 35 Reduce 102 + 104: 90(ptr) AccessChain 24(data) 25 96 78 26 + 105: 14(int) CompositeExtract 103 0 + Store 104 105 + 106: 90(ptr) AccessChain 24(data) 25 96 78 58 + 107: 14(int) CompositeExtract 103 1 + Store 106 107 + 108: 27(ptr) AccessChain 10(dti) 26 + 109: 6(int) Load 108 + 110: 27(ptr) AccessChain 10(dti) 26 + 111: 6(int) Load 110 + 113: 81(ptr) AccessChain 24(data) 25 111 78 + 114: 15(ivec4) Load 113 + 115: 112(ivec3) VectorShuffle 114 114 0 1 2 + 116: 112(ivec3) GroupNonUniformIAdd 35 Reduce 115 + 117: 90(ptr) AccessChain 24(data) 25 109 78 26 + 118: 14(int) CompositeExtract 116 0 + Store 117 118 + 119: 90(ptr) AccessChain 24(data) 25 109 78 58 + 120: 14(int) CompositeExtract 116 1 + Store 119 120 + 121: 90(ptr) AccessChain 24(data) 25 109 78 73 + 122: 14(int) CompositeExtract 116 2 + Store 121 122 123: 27(ptr) AccessChain 10(dti) 26 124: 6(int) Load 123 - 125: 27(ptr) AccessChain 10(dti) 26 - 126: 6(int) Load 125 - 128: 127(ptr) AccessChain 24(data) 25 126 115 26 - 129: 16(float) Load 128 - 130: 16(float) GroupNonUniformFAdd 35 Reduce 129 - 131: 127(ptr) AccessChain 24(data) 25 124 115 26 - Store 131 130 - 132: 27(ptr) AccessChain 10(dti) 26 - 133: 6(int) Load 132 - 134: 27(ptr) AccessChain 10(dti) 26 - 135: 6(int) Load 134 - 137: 118(ptr) AccessChain 24(data) 25 135 115 - 138: 17(fvec4) Load 137 - 139: 136(fvec2) VectorShuffle 138 138 0 1 - 140: 136(fvec2) GroupNonUniformFAdd 35 Reduce 139 - 141: 118(ptr) AccessChain 24(data) 25 133 115 - 142: 17(fvec4) Load 141 - 143: 17(fvec4) VectorShuffle 142 140 4 5 2 3 - Store 141 143 + 126: 27(ptr) AccessChain 10(dti) 26 + 127: 6(int) Load 126 + 129: 128(ptr) AccessChain 24(data) 25 127 125 + 130: 17(fvec4) Load 129 + 131: 17(fvec4) GroupNonUniformFAdd 35 Reduce 130 + 132: 128(ptr) AccessChain 24(data) 25 124 125 + Store 132 131 + 133: 27(ptr) AccessChain 10(dti) 26 + 134: 6(int) Load 133 + 135: 27(ptr) AccessChain 10(dti) 26 + 136: 6(int) Load 135 + 138: 137(ptr) AccessChain 24(data) 25 136 125 26 + 139: 16(float) Load 138 + 140: 16(float) GroupNonUniformFAdd 35 Reduce 139 + 141: 137(ptr) AccessChain 24(data) 25 134 125 26 + Store 141 140 + 142: 27(ptr) AccessChain 10(dti) 26 + 143: 6(int) Load 142 144: 27(ptr) AccessChain 10(dti) 26 145: 6(int) Load 144 - 146: 27(ptr) AccessChain 10(dti) 26 - 147: 6(int) Load 146 - 149: 118(ptr) AccessChain 24(data) 25 147 115 - 150: 17(fvec4) Load 149 - 151: 148(fvec3) VectorShuffle 150 150 0 1 2 - 152: 148(fvec3) GroupNonUniformFAdd 35 Reduce 151 - 153: 118(ptr) AccessChain 24(data) 25 145 115 - 154: 17(fvec4) Load 153 - 155: 17(fvec4) VectorShuffle 154 152 4 5 6 3 - Store 153 155 - 156: 27(ptr) AccessChain 10(dti) 26 - 157: 6(int) Load 156 - 159: 27(ptr) AccessChain 10(dti) 26 - 160: 6(int) Load 159 - 162: 161(ptr) AccessChain 24(data) 25 160 158 - 163: 19(f64vec4) Load 162 - 164: 19(f64vec4) GroupNonUniformFAdd 35 Reduce 163 - 165: 161(ptr) AccessChain 24(data) 25 157 158 - Store 165 164 - 166: 27(ptr) AccessChain 10(dti) 26 - 167: 6(int) Load 166 - 168: 27(ptr) AccessChain 10(dti) 26 - 169: 6(int) Load 168 - 171: 170(ptr) AccessChain 24(data) 25 169 158 26 - 172:18(float64_t) Load 171 - 173:18(float64_t) GroupNonUniformFAdd 35 Reduce 172 - 174: 170(ptr) AccessChain 24(data) 25 167 158 26 - Store 174 173 - 175: 27(ptr) AccessChain 10(dti) 26 - 176: 6(int) Load 175 - 177: 27(ptr) AccessChain 10(dti) 26 - 178: 6(int) Load 177 - 180: 161(ptr) AccessChain 24(data) 25 178 158 - 181: 19(f64vec4) Load 180 - 182:179(f64vec2) VectorShuffle 181 181 0 1 - 183:179(f64vec2) GroupNonUniformFAdd 35 Reduce 182 - 184: 161(ptr) AccessChain 24(data) 25 176 158 - 185: 19(f64vec4) Load 184 - 186: 19(f64vec4) VectorShuffle 185 183 4 5 2 3 - Store 184 186 - 187: 27(ptr) AccessChain 10(dti) 26 - 188: 6(int) Load 187 + 147: 128(ptr) AccessChain 24(data) 25 145 125 + 148: 17(fvec4) Load 147 + 149: 146(fvec2) VectorShuffle 148 148 0 1 + 150: 146(fvec2) GroupNonUniformFAdd 35 Reduce 149 + 151: 137(ptr) AccessChain 24(data) 25 143 125 26 + 152: 16(float) CompositeExtract 150 0 + Store 151 152 + 153: 137(ptr) AccessChain 24(data) 25 143 125 58 + 154: 16(float) CompositeExtract 150 1 + Store 153 154 + 155: 27(ptr) AccessChain 10(dti) 26 + 156: 6(int) Load 155 + 157: 27(ptr) AccessChain 10(dti) 26 + 158: 6(int) Load 157 + 160: 128(ptr) AccessChain 24(data) 25 158 125 + 161: 17(fvec4) Load 160 + 162: 159(fvec3) VectorShuffle 161 161 0 1 2 + 163: 159(fvec3) GroupNonUniformFAdd 35 Reduce 162 + 164: 137(ptr) AccessChain 24(data) 25 156 125 26 + 165: 16(float) CompositeExtract 163 0 + Store 164 165 + 166: 137(ptr) AccessChain 24(data) 25 156 125 58 + 167: 16(float) CompositeExtract 163 1 + Store 166 167 + 168: 137(ptr) AccessChain 24(data) 25 156 125 73 + 169: 16(float) CompositeExtract 163 2 + Store 168 169 + 170: 27(ptr) AccessChain 10(dti) 26 + 171: 6(int) Load 170 + 173: 27(ptr) AccessChain 10(dti) 26 + 174: 6(int) Load 173 + 176: 175(ptr) AccessChain 24(data) 25 174 172 + 177: 19(f64vec4) Load 176 + 178: 19(f64vec4) GroupNonUniformFAdd 35 Reduce 177 + 179: 175(ptr) AccessChain 24(data) 25 171 172 + Store 179 178 + 180: 27(ptr) AccessChain 10(dti) 26 + 181: 6(int) Load 180 + 182: 27(ptr) AccessChain 10(dti) 26 + 183: 6(int) Load 182 + 185: 184(ptr) AccessChain 24(data) 25 183 172 26 + 186:18(float64_t) Load 185 + 187:18(float64_t) GroupNonUniformFAdd 35 Reduce 186 + 188: 184(ptr) AccessChain 24(data) 25 181 172 26 + Store 188 187 189: 27(ptr) AccessChain 10(dti) 26 190: 6(int) Load 189 - 192: 161(ptr) AccessChain 24(data) 25 190 158 - 193: 19(f64vec4) Load 192 - 194:191(f64vec3) VectorShuffle 193 193 0 1 2 - 195:191(f64vec3) GroupNonUniformFAdd 35 Reduce 194 - 196: 161(ptr) AccessChain 24(data) 25 188 158 - 197: 19(f64vec4) Load 196 - 198: 19(f64vec4) VectorShuffle 197 195 4 5 6 3 - Store 196 198 - 199: 27(ptr) AccessChain 10(dti) 26 - 200: 6(int) Load 199 - 201: 27(ptr) AccessChain 10(dti) 26 - 202: 6(int) Load 201 - 203: 32(ptr) AccessChain 24(data) 25 202 25 - 204: 13(ivec4) Load 203 - 205: 13(ivec4) GroupNonUniformIMul 35 Reduce 204 - 206: 32(ptr) AccessChain 24(data) 25 200 25 - Store 206 205 - 207: 27(ptr) AccessChain 10(dti) 26 - 208: 6(int) Load 207 - 209: 27(ptr) AccessChain 10(dti) 26 - 210: 6(int) Load 209 - 211: 42(ptr) AccessChain 24(data) 25 210 25 26 - 212: 6(int) Load 211 - 213: 6(int) GroupNonUniformIMul 35 Reduce 212 - 214: 42(ptr) AccessChain 24(data) 25 208 25 26 - Store 214 213 - 215: 27(ptr) AccessChain 10(dti) 26 - 216: 6(int) Load 215 + 191: 27(ptr) AccessChain 10(dti) 26 + 192: 6(int) Load 191 + 194: 175(ptr) AccessChain 24(data) 25 192 172 + 195: 19(f64vec4) Load 194 + 196:193(f64vec2) VectorShuffle 195 195 0 1 + 197:193(f64vec2) GroupNonUniformFAdd 35 Reduce 196 + 198: 184(ptr) AccessChain 24(data) 25 190 172 26 + 199:18(float64_t) CompositeExtract 197 0 + Store 198 199 + 200: 184(ptr) AccessChain 24(data) 25 190 172 58 + 201:18(float64_t) CompositeExtract 197 1 + Store 200 201 + 202: 27(ptr) AccessChain 10(dti) 26 + 203: 6(int) Load 202 + 204: 27(ptr) AccessChain 10(dti) 26 + 205: 6(int) Load 204 + 207: 175(ptr) AccessChain 24(data) 25 205 172 + 208: 19(f64vec4) Load 207 + 209:206(f64vec3) VectorShuffle 208 208 0 1 2 + 210:206(f64vec3) GroupNonUniformFAdd 35 Reduce 209 + 211: 184(ptr) AccessChain 24(data) 25 203 172 26 + 212:18(float64_t) CompositeExtract 210 0 + Store 211 212 + 213: 184(ptr) AccessChain 24(data) 25 203 172 58 + 214:18(float64_t) CompositeExtract 210 1 + Store 213 214 + 215: 184(ptr) AccessChain 24(data) 25 203 172 73 + 216:18(float64_t) CompositeExtract 210 2 + Store 215 216 217: 27(ptr) AccessChain 10(dti) 26 218: 6(int) Load 217 - 219: 32(ptr) AccessChain 24(data) 25 218 25 - 220: 13(ivec4) Load 219 - 221: 51(ivec2) VectorShuffle 220 220 0 1 - 222: 51(ivec2) GroupNonUniformIMul 35 Reduce 221 - 223: 32(ptr) AccessChain 24(data) 25 216 25 - 224: 13(ivec4) Load 223 - 225: 13(ivec4) VectorShuffle 224 222 4 5 2 3 - Store 223 225 - 226: 27(ptr) AccessChain 10(dti) 26 - 227: 6(int) Load 226 - 228: 27(ptr) AccessChain 10(dti) 26 - 229: 6(int) Load 228 - 230: 32(ptr) AccessChain 24(data) 25 229 25 - 231: 13(ivec4) Load 230 - 232: 7(ivec3) VectorShuffle 231 231 0 1 2 - 233: 7(ivec3) GroupNonUniformIMul 35 Reduce 232 - 234: 32(ptr) AccessChain 24(data) 25 227 25 - 235: 13(ivec4) Load 234 - 236: 13(ivec4) VectorShuffle 235 233 4 5 6 3 - Store 234 236 - 237: 27(ptr) AccessChain 10(dti) 26 - 238: 6(int) Load 237 - 239: 27(ptr) AccessChain 10(dti) 26 - 240: 6(int) Load 239 - 241: 75(ptr) AccessChain 24(data) 25 240 72 - 242: 15(ivec4) Load 241 - 243: 15(ivec4) GroupNonUniformIMul 35 Reduce 242 - 244: 75(ptr) AccessChain 24(data) 25 238 72 - Store 244 243 + 219: 27(ptr) AccessChain 10(dti) 26 + 220: 6(int) Load 219 + 221: 32(ptr) AccessChain 24(data) 25 220 25 + 222: 13(ivec4) Load 221 + 223: 13(ivec4) GroupNonUniformIMul 35 Reduce 222 + 224: 32(ptr) AccessChain 24(data) 25 218 25 + Store 224 223 + 225: 27(ptr) AccessChain 10(dti) 26 + 226: 6(int) Load 225 + 227: 27(ptr) AccessChain 10(dti) 26 + 228: 6(int) Load 227 + 229: 42(ptr) AccessChain 24(data) 25 228 25 26 + 230: 6(int) Load 229 + 231: 6(int) GroupNonUniformIMul 35 Reduce 230 + 232: 42(ptr) AccessChain 24(data) 25 226 25 26 + Store 232 231 + 233: 27(ptr) AccessChain 10(dti) 26 + 234: 6(int) Load 233 + 235: 27(ptr) AccessChain 10(dti) 26 + 236: 6(int) Load 235 + 237: 32(ptr) AccessChain 24(data) 25 236 25 + 238: 13(ivec4) Load 237 + 239: 51(ivec2) VectorShuffle 238 238 0 1 + 240: 51(ivec2) GroupNonUniformIMul 35 Reduce 239 + 241: 42(ptr) AccessChain 24(data) 25 234 25 26 + 242: 6(int) CompositeExtract 240 0 + Store 241 242 + 243: 42(ptr) AccessChain 24(data) 25 234 25 58 + 244: 6(int) CompositeExtract 240 1 + Store 243 244 245: 27(ptr) AccessChain 10(dti) 26 246: 6(int) Load 245 247: 27(ptr) AccessChain 10(dti) 26 248: 6(int) Load 247 - 249: 84(ptr) AccessChain 24(data) 25 248 72 26 - 250: 14(int) Load 249 - 251: 14(int) GroupNonUniformIMul 35 Reduce 250 - 252: 84(ptr) AccessChain 24(data) 25 246 72 26 - Store 252 251 - 253: 27(ptr) AccessChain 10(dti) 26 - 254: 6(int) Load 253 - 255: 27(ptr) AccessChain 10(dti) 26 - 256: 6(int) Load 255 - 257: 75(ptr) AccessChain 24(data) 25 256 72 - 258: 15(ivec4) Load 257 - 259: 93(ivec2) VectorShuffle 258 258 0 1 - 260: 93(ivec2) GroupNonUniformIMul 35 Reduce 259 - 261: 75(ptr) AccessChain 24(data) 25 254 72 - 262: 15(ivec4) Load 261 - 263: 15(ivec4) VectorShuffle 262 260 4 5 2 3 - Store 261 263 - 264: 27(ptr) AccessChain 10(dti) 26 - 265: 6(int) Load 264 - 266: 27(ptr) AccessChain 10(dti) 26 - 267: 6(int) Load 266 - 268: 75(ptr) AccessChain 24(data) 25 267 72 - 269: 15(ivec4) Load 268 - 270: 105(ivec3) VectorShuffle 269 269 0 1 2 - 271: 105(ivec3) GroupNonUniformIMul 35 Reduce 270 - 272: 75(ptr) AccessChain 24(data) 25 265 72 - 273: 15(ivec4) Load 272 - 274: 15(ivec4) VectorShuffle 273 271 4 5 6 3 - Store 272 274 + 249: 32(ptr) AccessChain 24(data) 25 248 25 + 250: 13(ivec4) Load 249 + 251: 7(ivec3) VectorShuffle 250 250 0 1 2 + 252: 7(ivec3) GroupNonUniformIMul 35 Reduce 251 + 253: 42(ptr) AccessChain 24(data) 25 246 25 26 + 254: 6(int) CompositeExtract 252 0 + Store 253 254 + 255: 42(ptr) AccessChain 24(data) 25 246 25 58 + 256: 6(int) CompositeExtract 252 1 + Store 255 256 + 257: 42(ptr) AccessChain 24(data) 25 246 25 73 + 258: 6(int) CompositeExtract 252 2 + Store 257 258 + 259: 27(ptr) AccessChain 10(dti) 26 + 260: 6(int) Load 259 + 261: 27(ptr) AccessChain 10(dti) 26 + 262: 6(int) Load 261 + 263: 81(ptr) AccessChain 24(data) 25 262 78 + 264: 15(ivec4) Load 263 + 265: 15(ivec4) GroupNonUniformIMul 35 Reduce 264 + 266: 81(ptr) AccessChain 24(data) 25 260 78 + Store 266 265 + 267: 27(ptr) AccessChain 10(dti) 26 + 268: 6(int) Load 267 + 269: 27(ptr) AccessChain 10(dti) 26 + 270: 6(int) Load 269 + 271: 90(ptr) AccessChain 24(data) 25 270 78 26 + 272: 14(int) Load 271 + 273: 14(int) GroupNonUniformIMul 35 Reduce 272 + 274: 90(ptr) AccessChain 24(data) 25 268 78 26 + Store 274 273 275: 27(ptr) AccessChain 10(dti) 26 276: 6(int) Load 275 277: 27(ptr) AccessChain 10(dti) 26 278: 6(int) Load 277 - 279: 118(ptr) AccessChain 24(data) 25 278 115 - 280: 17(fvec4) Load 279 - 281: 17(fvec4) GroupNonUniformFMul 35 Reduce 280 - 282: 118(ptr) AccessChain 24(data) 25 276 115 - Store 282 281 - 283: 27(ptr) AccessChain 10(dti) 26 - 284: 6(int) Load 283 - 285: 27(ptr) AccessChain 10(dti) 26 - 286: 6(int) Load 285 - 287: 127(ptr) AccessChain 24(data) 25 286 115 26 - 288: 16(float) Load 287 - 289: 16(float) GroupNonUniformFMul 35 Reduce 288 - 290: 127(ptr) AccessChain 24(data) 25 284 115 26 - Store 290 289 - 291: 27(ptr) AccessChain 10(dti) 26 - 292: 6(int) Load 291 - 293: 27(ptr) AccessChain 10(dti) 26 - 294: 6(int) Load 293 - 295: 118(ptr) AccessChain 24(data) 25 294 115 - 296: 17(fvec4) Load 295 - 297: 136(fvec2) VectorShuffle 296 296 0 1 - 298: 136(fvec2) GroupNonUniformFMul 35 Reduce 297 - 299: 118(ptr) AccessChain 24(data) 25 292 115 - 300: 17(fvec4) Load 299 - 301: 17(fvec4) VectorShuffle 300 298 4 5 2 3 - Store 299 301 - 302: 27(ptr) AccessChain 10(dti) 26 - 303: 6(int) Load 302 - 304: 27(ptr) AccessChain 10(dti) 26 - 305: 6(int) Load 304 - 306: 118(ptr) AccessChain 24(data) 25 305 115 - 307: 17(fvec4) Load 306 - 308: 148(fvec3) VectorShuffle 307 307 0 1 2 - 309: 148(fvec3) GroupNonUniformFMul 35 Reduce 308 - 310: 118(ptr) AccessChain 24(data) 25 303 115 - 311: 17(fvec4) Load 310 - 312: 17(fvec4) VectorShuffle 311 309 4 5 6 3 - Store 310 312 - 313: 27(ptr) AccessChain 10(dti) 26 - 314: 6(int) Load 313 - 315: 27(ptr) AccessChain 10(dti) 26 - 316: 6(int) Load 315 - 317: 161(ptr) AccessChain 24(data) 25 316 158 - 318: 19(f64vec4) Load 317 - 319: 19(f64vec4) GroupNonUniformFMul 35 Reduce 318 - 320: 161(ptr) AccessChain 24(data) 25 314 158 - Store 320 319 - 321: 27(ptr) AccessChain 10(dti) 26 - 322: 6(int) Load 321 - 323: 27(ptr) AccessChain 10(dti) 26 - 324: 6(int) Load 323 - 325: 170(ptr) AccessChain 24(data) 25 324 158 26 - 326:18(float64_t) Load 325 - 327:18(float64_t) GroupNonUniformFMul 35 Reduce 326 - 328: 170(ptr) AccessChain 24(data) 25 322 158 26 - Store 328 327 + 279: 81(ptr) AccessChain 24(data) 25 278 78 + 280: 15(ivec4) Load 279 + 281: 99(ivec2) VectorShuffle 280 280 0 1 + 282: 99(ivec2) GroupNonUniformIMul 35 Reduce 281 + 283: 90(ptr) AccessChain 24(data) 25 276 78 26 + 284: 14(int) CompositeExtract 282 0 + Store 283 284 + 285: 90(ptr) AccessChain 24(data) 25 276 78 58 + 286: 14(int) CompositeExtract 282 1 + Store 285 286 + 287: 27(ptr) AccessChain 10(dti) 26 + 288: 6(int) Load 287 + 289: 27(ptr) AccessChain 10(dti) 26 + 290: 6(int) Load 289 + 291: 81(ptr) AccessChain 24(data) 25 290 78 + 292: 15(ivec4) Load 291 + 293: 112(ivec3) VectorShuffle 292 292 0 1 2 + 294: 112(ivec3) GroupNonUniformIMul 35 Reduce 293 + 295: 90(ptr) AccessChain 24(data) 25 288 78 26 + 296: 14(int) CompositeExtract 294 0 + Store 295 296 + 297: 90(ptr) AccessChain 24(data) 25 288 78 58 + 298: 14(int) CompositeExtract 294 1 + Store 297 298 + 299: 90(ptr) AccessChain 24(data) 25 288 78 73 + 300: 14(int) CompositeExtract 294 2 + Store 299 300 + 301: 27(ptr) AccessChain 10(dti) 26 + 302: 6(int) Load 301 + 303: 27(ptr) AccessChain 10(dti) 26 + 304: 6(int) Load 303 + 305: 128(ptr) AccessChain 24(data) 25 304 125 + 306: 17(fvec4) Load 305 + 307: 17(fvec4) GroupNonUniformFMul 35 Reduce 306 + 308: 128(ptr) AccessChain 24(data) 25 302 125 + Store 308 307 + 309: 27(ptr) AccessChain 10(dti) 26 + 310: 6(int) Load 309 + 311: 27(ptr) AccessChain 10(dti) 26 + 312: 6(int) Load 311 + 313: 137(ptr) AccessChain 24(data) 25 312 125 26 + 314: 16(float) Load 313 + 315: 16(float) GroupNonUniformFMul 35 Reduce 314 + 316: 137(ptr) AccessChain 24(data) 25 310 125 26 + Store 316 315 + 317: 27(ptr) AccessChain 10(dti) 26 + 318: 6(int) Load 317 + 319: 27(ptr) AccessChain 10(dti) 26 + 320: 6(int) Load 319 + 321: 128(ptr) AccessChain 24(data) 25 320 125 + 322: 17(fvec4) Load 321 + 323: 146(fvec2) VectorShuffle 322 322 0 1 + 324: 146(fvec2) GroupNonUniformFMul 35 Reduce 323 + 325: 137(ptr) AccessChain 24(data) 25 318 125 26 + 326: 16(float) CompositeExtract 324 0 + Store 325 326 + 327: 137(ptr) AccessChain 24(data) 25 318 125 58 + 328: 16(float) CompositeExtract 324 1 + Store 327 328 329: 27(ptr) AccessChain 10(dti) 26 330: 6(int) Load 329 331: 27(ptr) AccessChain 10(dti) 26 332: 6(int) Load 331 - 333: 161(ptr) AccessChain 24(data) 25 332 158 - 334: 19(f64vec4) Load 333 - 335:179(f64vec2) VectorShuffle 334 334 0 1 - 336:179(f64vec2) GroupNonUniformFMul 35 Reduce 335 - 337: 161(ptr) AccessChain 24(data) 25 330 158 - 338: 19(f64vec4) Load 337 - 339: 19(f64vec4) VectorShuffle 338 336 4 5 2 3 - Store 337 339 - 340: 27(ptr) AccessChain 10(dti) 26 - 341: 6(int) Load 340 - 342: 27(ptr) AccessChain 10(dti) 26 - 343: 6(int) Load 342 - 344: 161(ptr) AccessChain 24(data) 25 343 158 - 345: 19(f64vec4) Load 344 - 346:191(f64vec3) VectorShuffle 345 345 0 1 2 - 347:191(f64vec3) GroupNonUniformFMul 35 Reduce 346 - 348: 161(ptr) AccessChain 24(data) 25 341 158 - 349: 19(f64vec4) Load 348 - 350: 19(f64vec4) VectorShuffle 349 347 4 5 6 3 - Store 348 350 + 333: 128(ptr) AccessChain 24(data) 25 332 125 + 334: 17(fvec4) Load 333 + 335: 159(fvec3) VectorShuffle 334 334 0 1 2 + 336: 159(fvec3) GroupNonUniformFMul 35 Reduce 335 + 337: 137(ptr) AccessChain 24(data) 25 330 125 26 + 338: 16(float) CompositeExtract 336 0 + Store 337 338 + 339: 137(ptr) AccessChain 24(data) 25 330 125 58 + 340: 16(float) CompositeExtract 336 1 + Store 339 340 + 341: 137(ptr) AccessChain 24(data) 25 330 125 73 + 342: 16(float) CompositeExtract 336 2 + Store 341 342 + 343: 27(ptr) AccessChain 10(dti) 26 + 344: 6(int) Load 343 + 345: 27(ptr) AccessChain 10(dti) 26 + 346: 6(int) Load 345 + 347: 175(ptr) AccessChain 24(data) 25 346 172 + 348: 19(f64vec4) Load 347 + 349: 19(f64vec4) GroupNonUniformFMul 35 Reduce 348 + 350: 175(ptr) AccessChain 24(data) 25 344 172 + Store 350 349 351: 27(ptr) AccessChain 10(dti) 26 352: 6(int) Load 351 353: 27(ptr) AccessChain 10(dti) 26 354: 6(int) Load 353 - 355: 32(ptr) AccessChain 24(data) 25 354 25 - 356: 13(ivec4) Load 355 - 357: 13(ivec4) GroupNonUniformUMin 35 Reduce 356 - 358: 32(ptr) AccessChain 24(data) 25 352 25 + 355: 184(ptr) AccessChain 24(data) 25 354 172 26 + 356:18(float64_t) Load 355 + 357:18(float64_t) GroupNonUniformFMul 35 Reduce 356 + 358: 184(ptr) AccessChain 24(data) 25 352 172 26 Store 358 357 359: 27(ptr) AccessChain 10(dti) 26 360: 6(int) Load 359 361: 27(ptr) AccessChain 10(dti) 26 362: 6(int) Load 361 - 363: 42(ptr) AccessChain 24(data) 25 362 25 26 - 364: 6(int) Load 363 - 365: 6(int) GroupNonUniformUMin 35 Reduce 364 - 366: 42(ptr) AccessChain 24(data) 25 360 25 26 - Store 366 365 - 367: 27(ptr) AccessChain 10(dti) 26 - 368: 6(int) Load 367 - 369: 27(ptr) AccessChain 10(dti) 26 - 370: 6(int) Load 369 - 371: 32(ptr) AccessChain 24(data) 25 370 25 - 372: 13(ivec4) Load 371 - 373: 51(ivec2) VectorShuffle 372 372 0 1 - 374: 51(ivec2) GroupNonUniformUMin 35 Reduce 373 - 375: 32(ptr) AccessChain 24(data) 25 368 25 - 376: 13(ivec4) Load 375 - 377: 13(ivec4) VectorShuffle 376 374 4 5 2 3 - Store 375 377 - 378: 27(ptr) AccessChain 10(dti) 26 - 379: 6(int) Load 378 - 380: 27(ptr) AccessChain 10(dti) 26 - 381: 6(int) Load 380 - 382: 32(ptr) AccessChain 24(data) 25 381 25 - 383: 13(ivec4) Load 382 - 384: 7(ivec3) VectorShuffle 383 383 0 1 2 - 385: 7(ivec3) GroupNonUniformUMin 35 Reduce 384 - 386: 32(ptr) AccessChain 24(data) 25 379 25 - 387: 13(ivec4) Load 386 - 388: 13(ivec4) VectorShuffle 387 385 4 5 6 3 - Store 386 388 - 389: 27(ptr) AccessChain 10(dti) 26 - 390: 6(int) Load 389 - 391: 27(ptr) AccessChain 10(dti) 26 - 392: 6(int) Load 391 - 393: 75(ptr) AccessChain 24(data) 25 392 72 - 394: 15(ivec4) Load 393 - 395: 15(ivec4) GroupNonUniformSMin 35 Reduce 394 - 396: 75(ptr) AccessChain 24(data) 25 390 72 - Store 396 395 - 397: 27(ptr) AccessChain 10(dti) 26 + 363: 175(ptr) AccessChain 24(data) 25 362 172 + 364: 19(f64vec4) Load 363 + 365:193(f64vec2) VectorShuffle 364 364 0 1 + 366:193(f64vec2) GroupNonUniformFMul 35 Reduce 365 + 367: 184(ptr) AccessChain 24(data) 25 360 172 26 + 368:18(float64_t) CompositeExtract 366 0 + Store 367 368 + 369: 184(ptr) AccessChain 24(data) 25 360 172 58 + 370:18(float64_t) CompositeExtract 366 1 + Store 369 370 + 371: 27(ptr) AccessChain 10(dti) 26 + 372: 6(int) Load 371 + 373: 27(ptr) AccessChain 10(dti) 26 + 374: 6(int) Load 373 + 375: 175(ptr) AccessChain 24(data) 25 374 172 + 376: 19(f64vec4) Load 375 + 377:206(f64vec3) VectorShuffle 376 376 0 1 2 + 378:206(f64vec3) GroupNonUniformFMul 35 Reduce 377 + 379: 184(ptr) AccessChain 24(data) 25 372 172 26 + 380:18(float64_t) CompositeExtract 378 0 + Store 379 380 + 381: 184(ptr) AccessChain 24(data) 25 372 172 58 + 382:18(float64_t) CompositeExtract 378 1 + Store 381 382 + 383: 184(ptr) AccessChain 24(data) 25 372 172 73 + 384:18(float64_t) CompositeExtract 378 2 + Store 383 384 + 385: 27(ptr) AccessChain 10(dti) 26 + 386: 6(int) Load 385 + 387: 27(ptr) AccessChain 10(dti) 26 + 388: 6(int) Load 387 + 389: 32(ptr) AccessChain 24(data) 25 388 25 + 390: 13(ivec4) Load 389 + 391: 13(ivec4) GroupNonUniformUMin 35 Reduce 390 + 392: 32(ptr) AccessChain 24(data) 25 386 25 + Store 392 391 + 393: 27(ptr) AccessChain 10(dti) 26 + 394: 6(int) Load 393 + 395: 27(ptr) AccessChain 10(dti) 26 + 396: 6(int) Load 395 + 397: 42(ptr) AccessChain 24(data) 25 396 25 26 398: 6(int) Load 397 - 399: 27(ptr) AccessChain 10(dti) 26 - 400: 6(int) Load 399 - 401: 84(ptr) AccessChain 24(data) 25 400 72 26 - 402: 14(int) Load 401 - 403: 14(int) GroupNonUniformSMin 35 Reduce 402 - 404: 84(ptr) AccessChain 24(data) 25 398 72 26 - Store 404 403 - 405: 27(ptr) AccessChain 10(dti) 26 - 406: 6(int) Load 405 - 407: 27(ptr) AccessChain 10(dti) 26 - 408: 6(int) Load 407 - 409: 75(ptr) AccessChain 24(data) 25 408 72 - 410: 15(ivec4) Load 409 - 411: 93(ivec2) VectorShuffle 410 410 0 1 - 412: 93(ivec2) GroupNonUniformSMin 35 Reduce 411 - 413: 75(ptr) AccessChain 24(data) 25 406 72 - 414: 15(ivec4) Load 413 - 415: 15(ivec4) VectorShuffle 414 412 4 5 2 3 - Store 413 415 - 416: 27(ptr) AccessChain 10(dti) 26 - 417: 6(int) Load 416 - 418: 27(ptr) AccessChain 10(dti) 26 - 419: 6(int) Load 418 - 420: 75(ptr) AccessChain 24(data) 25 419 72 - 421: 15(ivec4) Load 420 - 422: 105(ivec3) VectorShuffle 421 421 0 1 2 - 423: 105(ivec3) GroupNonUniformSMin 35 Reduce 422 - 424: 75(ptr) AccessChain 24(data) 25 417 72 - 425: 15(ivec4) Load 424 - 426: 15(ivec4) VectorShuffle 425 423 4 5 6 3 - Store 424 426 + 399: 6(int) GroupNonUniformUMin 35 Reduce 398 + 400: 42(ptr) AccessChain 24(data) 25 394 25 26 + Store 400 399 + 401: 27(ptr) AccessChain 10(dti) 26 + 402: 6(int) Load 401 + 403: 27(ptr) AccessChain 10(dti) 26 + 404: 6(int) Load 403 + 405: 32(ptr) AccessChain 24(data) 25 404 25 + 406: 13(ivec4) Load 405 + 407: 51(ivec2) VectorShuffle 406 406 0 1 + 408: 51(ivec2) GroupNonUniformUMin 35 Reduce 407 + 409: 42(ptr) AccessChain 24(data) 25 402 25 26 + 410: 6(int) CompositeExtract 408 0 + Store 409 410 + 411: 42(ptr) AccessChain 24(data) 25 402 25 58 + 412: 6(int) CompositeExtract 408 1 + Store 411 412 + 413: 27(ptr) AccessChain 10(dti) 26 + 414: 6(int) Load 413 + 415: 27(ptr) AccessChain 10(dti) 26 + 416: 6(int) Load 415 + 417: 32(ptr) AccessChain 24(data) 25 416 25 + 418: 13(ivec4) Load 417 + 419: 7(ivec3) VectorShuffle 418 418 0 1 2 + 420: 7(ivec3) GroupNonUniformUMin 35 Reduce 419 + 421: 42(ptr) AccessChain 24(data) 25 414 25 26 + 422: 6(int) CompositeExtract 420 0 + Store 421 422 + 423: 42(ptr) AccessChain 24(data) 25 414 25 58 + 424: 6(int) CompositeExtract 420 1 + Store 423 424 + 425: 42(ptr) AccessChain 24(data) 25 414 25 73 + 426: 6(int) CompositeExtract 420 2 + Store 425 426 427: 27(ptr) AccessChain 10(dti) 26 428: 6(int) Load 427 429: 27(ptr) AccessChain 10(dti) 26 430: 6(int) Load 429 - 431: 118(ptr) AccessChain 24(data) 25 430 115 - 432: 17(fvec4) Load 431 - 433: 17(fvec4) GroupNonUniformFMin 35 Reduce 432 - 434: 118(ptr) AccessChain 24(data) 25 428 115 + 431: 81(ptr) AccessChain 24(data) 25 430 78 + 432: 15(ivec4) Load 431 + 433: 15(ivec4) GroupNonUniformSMin 35 Reduce 432 + 434: 81(ptr) AccessChain 24(data) 25 428 78 Store 434 433 435: 27(ptr) AccessChain 10(dti) 26 436: 6(int) Load 435 437: 27(ptr) AccessChain 10(dti) 26 438: 6(int) Load 437 - 439: 127(ptr) AccessChain 24(data) 25 438 115 26 - 440: 16(float) Load 439 - 441: 16(float) GroupNonUniformFMin 35 Reduce 440 - 442: 127(ptr) AccessChain 24(data) 25 436 115 26 + 439: 90(ptr) AccessChain 24(data) 25 438 78 26 + 440: 14(int) Load 439 + 441: 14(int) GroupNonUniformSMin 35 Reduce 440 + 442: 90(ptr) AccessChain 24(data) 25 436 78 26 Store 442 441 443: 27(ptr) AccessChain 10(dti) 26 444: 6(int) Load 443 445: 27(ptr) AccessChain 10(dti) 26 446: 6(int) Load 445 - 447: 118(ptr) AccessChain 24(data) 25 446 115 - 448: 17(fvec4) Load 447 - 449: 136(fvec2) VectorShuffle 448 448 0 1 - 450: 136(fvec2) GroupNonUniformFMin 35 Reduce 449 - 451: 118(ptr) AccessChain 24(data) 25 444 115 - 452: 17(fvec4) Load 451 - 453: 17(fvec4) VectorShuffle 452 450 4 5 2 3 - Store 451 453 - 454: 27(ptr) AccessChain 10(dti) 26 - 455: 6(int) Load 454 - 456: 27(ptr) AccessChain 10(dti) 26 - 457: 6(int) Load 456 - 458: 118(ptr) AccessChain 24(data) 25 457 115 - 459: 17(fvec4) Load 458 - 460: 148(fvec3) VectorShuffle 459 459 0 1 2 - 461: 148(fvec3) GroupNonUniformFMin 35 Reduce 460 - 462: 118(ptr) AccessChain 24(data) 25 455 115 - 463: 17(fvec4) Load 462 - 464: 17(fvec4) VectorShuffle 463 461 4 5 6 3 - Store 462 464 - 465: 27(ptr) AccessChain 10(dti) 26 - 466: 6(int) Load 465 - 467: 27(ptr) AccessChain 10(dti) 26 - 468: 6(int) Load 467 - 469: 161(ptr) AccessChain 24(data) 25 468 158 - 470: 19(f64vec4) Load 469 - 471: 19(f64vec4) GroupNonUniformFMin 35 Reduce 470 - 472: 161(ptr) AccessChain 24(data) 25 466 158 - Store 472 471 - 473: 27(ptr) AccessChain 10(dti) 26 - 474: 6(int) Load 473 - 475: 27(ptr) AccessChain 10(dti) 26 - 476: 6(int) Load 475 - 477: 170(ptr) AccessChain 24(data) 25 476 158 26 - 478:18(float64_t) Load 477 - 479:18(float64_t) GroupNonUniformFMin 35 Reduce 478 - 480: 170(ptr) AccessChain 24(data) 25 474 158 26 - Store 480 479 - 481: 27(ptr) AccessChain 10(dti) 26 - 482: 6(int) Load 481 - 483: 27(ptr) AccessChain 10(dti) 26 - 484: 6(int) Load 483 - 485: 161(ptr) AccessChain 24(data) 25 484 158 - 486: 19(f64vec4) Load 485 - 487:179(f64vec2) VectorShuffle 486 486 0 1 - 488:179(f64vec2) GroupNonUniformFMin 35 Reduce 487 - 489: 161(ptr) AccessChain 24(data) 25 482 158 - 490: 19(f64vec4) Load 489 - 491: 19(f64vec4) VectorShuffle 490 488 4 5 2 3 - Store 489 491 - 492: 27(ptr) AccessChain 10(dti) 26 - 493: 6(int) Load 492 - 494: 27(ptr) AccessChain 10(dti) 26 - 495: 6(int) Load 494 - 496: 161(ptr) AccessChain 24(data) 25 495 158 - 497: 19(f64vec4) Load 496 - 498:191(f64vec3) VectorShuffle 497 497 0 1 2 - 499:191(f64vec3) GroupNonUniformFMin 35 Reduce 498 - 500: 161(ptr) AccessChain 24(data) 25 493 158 - 501: 19(f64vec4) Load 500 - 502: 19(f64vec4) VectorShuffle 501 499 4 5 6 3 - Store 500 502 - 503: 27(ptr) AccessChain 10(dti) 26 - 504: 6(int) Load 503 - 505: 27(ptr) AccessChain 10(dti) 26 - 506: 6(int) Load 505 - 507: 32(ptr) AccessChain 24(data) 25 506 25 - 508: 13(ivec4) Load 507 - 509: 13(ivec4) GroupNonUniformUMax 35 Reduce 508 - 510: 32(ptr) AccessChain 24(data) 25 504 25 - Store 510 509 + 447: 81(ptr) AccessChain 24(data) 25 446 78 + 448: 15(ivec4) Load 447 + 449: 99(ivec2) VectorShuffle 448 448 0 1 + 450: 99(ivec2) GroupNonUniformSMin 35 Reduce 449 + 451: 90(ptr) AccessChain 24(data) 25 444 78 26 + 452: 14(int) CompositeExtract 450 0 + Store 451 452 + 453: 90(ptr) AccessChain 24(data) 25 444 78 58 + 454: 14(int) CompositeExtract 450 1 + Store 453 454 + 455: 27(ptr) AccessChain 10(dti) 26 + 456: 6(int) Load 455 + 457: 27(ptr) AccessChain 10(dti) 26 + 458: 6(int) Load 457 + 459: 81(ptr) AccessChain 24(data) 25 458 78 + 460: 15(ivec4) Load 459 + 461: 112(ivec3) VectorShuffle 460 460 0 1 2 + 462: 112(ivec3) GroupNonUniformSMin 35 Reduce 461 + 463: 90(ptr) AccessChain 24(data) 25 456 78 26 + 464: 14(int) CompositeExtract 462 0 + Store 463 464 + 465: 90(ptr) AccessChain 24(data) 25 456 78 58 + 466: 14(int) CompositeExtract 462 1 + Store 465 466 + 467: 90(ptr) AccessChain 24(data) 25 456 78 73 + 468: 14(int) CompositeExtract 462 2 + Store 467 468 + 469: 27(ptr) AccessChain 10(dti) 26 + 470: 6(int) Load 469 + 471: 27(ptr) AccessChain 10(dti) 26 + 472: 6(int) Load 471 + 473: 128(ptr) AccessChain 24(data) 25 472 125 + 474: 17(fvec4) Load 473 + 475: 17(fvec4) GroupNonUniformFMin 35 Reduce 474 + 476: 128(ptr) AccessChain 24(data) 25 470 125 + Store 476 475 + 477: 27(ptr) AccessChain 10(dti) 26 + 478: 6(int) Load 477 + 479: 27(ptr) AccessChain 10(dti) 26 + 480: 6(int) Load 479 + 481: 137(ptr) AccessChain 24(data) 25 480 125 26 + 482: 16(float) Load 481 + 483: 16(float) GroupNonUniformFMin 35 Reduce 482 + 484: 137(ptr) AccessChain 24(data) 25 478 125 26 + Store 484 483 + 485: 27(ptr) AccessChain 10(dti) 26 + 486: 6(int) Load 485 + 487: 27(ptr) AccessChain 10(dti) 26 + 488: 6(int) Load 487 + 489: 128(ptr) AccessChain 24(data) 25 488 125 + 490: 17(fvec4) Load 489 + 491: 146(fvec2) VectorShuffle 490 490 0 1 + 492: 146(fvec2) GroupNonUniformFMin 35 Reduce 491 + 493: 137(ptr) AccessChain 24(data) 25 486 125 26 + 494: 16(float) CompositeExtract 492 0 + Store 493 494 + 495: 137(ptr) AccessChain 24(data) 25 486 125 58 + 496: 16(float) CompositeExtract 492 1 + Store 495 496 + 497: 27(ptr) AccessChain 10(dti) 26 + 498: 6(int) Load 497 + 499: 27(ptr) AccessChain 10(dti) 26 + 500: 6(int) Load 499 + 501: 128(ptr) AccessChain 24(data) 25 500 125 + 502: 17(fvec4) Load 501 + 503: 159(fvec3) VectorShuffle 502 502 0 1 2 + 504: 159(fvec3) GroupNonUniformFMin 35 Reduce 503 + 505: 137(ptr) AccessChain 24(data) 25 498 125 26 + 506: 16(float) CompositeExtract 504 0 + Store 505 506 + 507: 137(ptr) AccessChain 24(data) 25 498 125 58 + 508: 16(float) CompositeExtract 504 1 + Store 507 508 + 509: 137(ptr) AccessChain 24(data) 25 498 125 73 + 510: 16(float) CompositeExtract 504 2 + Store 509 510 511: 27(ptr) AccessChain 10(dti) 26 512: 6(int) Load 511 513: 27(ptr) AccessChain 10(dti) 26 514: 6(int) Load 513 - 515: 42(ptr) AccessChain 24(data) 25 514 25 26 - 516: 6(int) Load 515 - 517: 6(int) GroupNonUniformUMax 35 Reduce 516 - 518: 42(ptr) AccessChain 24(data) 25 512 25 26 + 515: 175(ptr) AccessChain 24(data) 25 514 172 + 516: 19(f64vec4) Load 515 + 517: 19(f64vec4) GroupNonUniformFMin 35 Reduce 516 + 518: 175(ptr) AccessChain 24(data) 25 512 172 Store 518 517 519: 27(ptr) AccessChain 10(dti) 26 520: 6(int) Load 519 521: 27(ptr) AccessChain 10(dti) 26 522: 6(int) Load 521 - 523: 32(ptr) AccessChain 24(data) 25 522 25 - 524: 13(ivec4) Load 523 - 525: 51(ivec2) VectorShuffle 524 524 0 1 - 526: 51(ivec2) GroupNonUniformUMax 35 Reduce 525 - 527: 32(ptr) AccessChain 24(data) 25 520 25 - 528: 13(ivec4) Load 527 - 529: 13(ivec4) VectorShuffle 528 526 4 5 2 3 - Store 527 529 - 530: 27(ptr) AccessChain 10(dti) 26 - 531: 6(int) Load 530 - 532: 27(ptr) AccessChain 10(dti) 26 - 533: 6(int) Load 532 - 534: 32(ptr) AccessChain 24(data) 25 533 25 - 535: 13(ivec4) Load 534 - 536: 7(ivec3) VectorShuffle 535 535 0 1 2 - 537: 7(ivec3) GroupNonUniformUMax 35 Reduce 536 - 538: 32(ptr) AccessChain 24(data) 25 531 25 - 539: 13(ivec4) Load 538 - 540: 13(ivec4) VectorShuffle 539 537 4 5 6 3 - Store 538 540 + 523: 184(ptr) AccessChain 24(data) 25 522 172 26 + 524:18(float64_t) Load 523 + 525:18(float64_t) GroupNonUniformFMin 35 Reduce 524 + 526: 184(ptr) AccessChain 24(data) 25 520 172 26 + Store 526 525 + 527: 27(ptr) AccessChain 10(dti) 26 + 528: 6(int) Load 527 + 529: 27(ptr) AccessChain 10(dti) 26 + 530: 6(int) Load 529 + 531: 175(ptr) AccessChain 24(data) 25 530 172 + 532: 19(f64vec4) Load 531 + 533:193(f64vec2) VectorShuffle 532 532 0 1 + 534:193(f64vec2) GroupNonUniformFMin 35 Reduce 533 + 535: 184(ptr) AccessChain 24(data) 25 528 172 26 + 536:18(float64_t) CompositeExtract 534 0 + Store 535 536 + 537: 184(ptr) AccessChain 24(data) 25 528 172 58 + 538:18(float64_t) CompositeExtract 534 1 + Store 537 538 + 539: 27(ptr) AccessChain 10(dti) 26 + 540: 6(int) Load 539 541: 27(ptr) AccessChain 10(dti) 26 542: 6(int) Load 541 - 543: 27(ptr) AccessChain 10(dti) 26 - 544: 6(int) Load 543 - 545: 75(ptr) AccessChain 24(data) 25 544 72 - 546: 15(ivec4) Load 545 - 547: 15(ivec4) GroupNonUniformSMax 35 Reduce 546 - 548: 75(ptr) AccessChain 24(data) 25 542 72 - Store 548 547 - 549: 27(ptr) AccessChain 10(dti) 26 - 550: 6(int) Load 549 - 551: 27(ptr) AccessChain 10(dti) 26 - 552: 6(int) Load 551 - 553: 84(ptr) AccessChain 24(data) 25 552 72 26 - 554: 14(int) Load 553 - 555: 14(int) GroupNonUniformSMax 35 Reduce 554 - 556: 84(ptr) AccessChain 24(data) 25 550 72 26 - Store 556 555 - 557: 27(ptr) AccessChain 10(dti) 26 - 558: 6(int) Load 557 - 559: 27(ptr) AccessChain 10(dti) 26 - 560: 6(int) Load 559 - 561: 75(ptr) AccessChain 24(data) 25 560 72 - 562: 15(ivec4) Load 561 - 563: 93(ivec2) VectorShuffle 562 562 0 1 - 564: 93(ivec2) GroupNonUniformSMax 35 Reduce 563 - 565: 75(ptr) AccessChain 24(data) 25 558 72 - 566: 15(ivec4) Load 565 - 567: 15(ivec4) VectorShuffle 566 564 4 5 2 3 - Store 565 567 - 568: 27(ptr) AccessChain 10(dti) 26 - 569: 6(int) Load 568 - 570: 27(ptr) AccessChain 10(dti) 26 - 571: 6(int) Load 570 - 572: 75(ptr) AccessChain 24(data) 25 571 72 - 573: 15(ivec4) Load 572 - 574: 105(ivec3) VectorShuffle 573 573 0 1 2 - 575: 105(ivec3) GroupNonUniformSMax 35 Reduce 574 - 576: 75(ptr) AccessChain 24(data) 25 569 72 - 577: 15(ivec4) Load 576 - 578: 15(ivec4) VectorShuffle 577 575 4 5 6 3 - Store 576 578 - 579: 27(ptr) AccessChain 10(dti) 26 - 580: 6(int) Load 579 + 543: 175(ptr) AccessChain 24(data) 25 542 172 + 544: 19(f64vec4) Load 543 + 545:206(f64vec3) VectorShuffle 544 544 0 1 2 + 546:206(f64vec3) GroupNonUniformFMin 35 Reduce 545 + 547: 184(ptr) AccessChain 24(data) 25 540 172 26 + 548:18(float64_t) CompositeExtract 546 0 + Store 547 548 + 549: 184(ptr) AccessChain 24(data) 25 540 172 58 + 550:18(float64_t) CompositeExtract 546 1 + Store 549 550 + 551: 184(ptr) AccessChain 24(data) 25 540 172 73 + 552:18(float64_t) CompositeExtract 546 2 + Store 551 552 + 553: 27(ptr) AccessChain 10(dti) 26 + 554: 6(int) Load 553 + 555: 27(ptr) AccessChain 10(dti) 26 + 556: 6(int) Load 555 + 557: 32(ptr) AccessChain 24(data) 25 556 25 + 558: 13(ivec4) Load 557 + 559: 13(ivec4) GroupNonUniformUMax 35 Reduce 558 + 560: 32(ptr) AccessChain 24(data) 25 554 25 + Store 560 559 + 561: 27(ptr) AccessChain 10(dti) 26 + 562: 6(int) Load 561 + 563: 27(ptr) AccessChain 10(dti) 26 + 564: 6(int) Load 563 + 565: 42(ptr) AccessChain 24(data) 25 564 25 26 + 566: 6(int) Load 565 + 567: 6(int) GroupNonUniformUMax 35 Reduce 566 + 568: 42(ptr) AccessChain 24(data) 25 562 25 26 + Store 568 567 + 569: 27(ptr) AccessChain 10(dti) 26 + 570: 6(int) Load 569 + 571: 27(ptr) AccessChain 10(dti) 26 + 572: 6(int) Load 571 + 573: 32(ptr) AccessChain 24(data) 25 572 25 + 574: 13(ivec4) Load 573 + 575: 51(ivec2) VectorShuffle 574 574 0 1 + 576: 51(ivec2) GroupNonUniformUMax 35 Reduce 575 + 577: 42(ptr) AccessChain 24(data) 25 570 25 26 + 578: 6(int) CompositeExtract 576 0 + Store 577 578 + 579: 42(ptr) AccessChain 24(data) 25 570 25 58 + 580: 6(int) CompositeExtract 576 1 + Store 579 580 581: 27(ptr) AccessChain 10(dti) 26 582: 6(int) Load 581 - 583: 118(ptr) AccessChain 24(data) 25 582 115 - 584: 17(fvec4) Load 583 - 585: 17(fvec4) GroupNonUniformFMax 35 Reduce 584 - 586: 118(ptr) AccessChain 24(data) 25 580 115 - Store 586 585 - 587: 27(ptr) AccessChain 10(dti) 26 - 588: 6(int) Load 587 - 589: 27(ptr) AccessChain 10(dti) 26 - 590: 6(int) Load 589 - 591: 127(ptr) AccessChain 24(data) 25 590 115 26 - 592: 16(float) Load 591 - 593: 16(float) GroupNonUniformFMax 35 Reduce 592 - 594: 127(ptr) AccessChain 24(data) 25 588 115 26 - Store 594 593 + 583: 27(ptr) AccessChain 10(dti) 26 + 584: 6(int) Load 583 + 585: 32(ptr) AccessChain 24(data) 25 584 25 + 586: 13(ivec4) Load 585 + 587: 7(ivec3) VectorShuffle 586 586 0 1 2 + 588: 7(ivec3) GroupNonUniformUMax 35 Reduce 587 + 589: 42(ptr) AccessChain 24(data) 25 582 25 26 + 590: 6(int) CompositeExtract 588 0 + Store 589 590 + 591: 42(ptr) AccessChain 24(data) 25 582 25 58 + 592: 6(int) CompositeExtract 588 1 + Store 591 592 + 593: 42(ptr) AccessChain 24(data) 25 582 25 73 + 594: 6(int) CompositeExtract 588 2 + Store 593 594 595: 27(ptr) AccessChain 10(dti) 26 596: 6(int) Load 595 597: 27(ptr) AccessChain 10(dti) 26 598: 6(int) Load 597 - 599: 118(ptr) AccessChain 24(data) 25 598 115 - 600: 17(fvec4) Load 599 - 601: 136(fvec2) VectorShuffle 600 600 0 1 - 602: 136(fvec2) GroupNonUniformFMax 35 Reduce 601 - 603: 118(ptr) AccessChain 24(data) 25 596 115 - 604: 17(fvec4) Load 603 - 605: 17(fvec4) VectorShuffle 604 602 4 5 2 3 - Store 603 605 - 606: 27(ptr) AccessChain 10(dti) 26 - 607: 6(int) Load 606 - 608: 27(ptr) AccessChain 10(dti) 26 - 609: 6(int) Load 608 - 610: 118(ptr) AccessChain 24(data) 25 609 115 - 611: 17(fvec4) Load 610 - 612: 148(fvec3) VectorShuffle 611 611 0 1 2 - 613: 148(fvec3) GroupNonUniformFMax 35 Reduce 612 - 614: 118(ptr) AccessChain 24(data) 25 607 115 - 615: 17(fvec4) Load 614 - 616: 17(fvec4) VectorShuffle 615 613 4 5 6 3 - Store 614 616 - 617: 27(ptr) AccessChain 10(dti) 26 - 618: 6(int) Load 617 - 619: 27(ptr) AccessChain 10(dti) 26 - 620: 6(int) Load 619 - 621: 161(ptr) AccessChain 24(data) 25 620 158 - 622: 19(f64vec4) Load 621 - 623: 19(f64vec4) GroupNonUniformFMax 35 Reduce 622 - 624: 161(ptr) AccessChain 24(data) 25 618 158 - Store 624 623 + 599: 81(ptr) AccessChain 24(data) 25 598 78 + 600: 15(ivec4) Load 599 + 601: 15(ivec4) GroupNonUniformSMax 35 Reduce 600 + 602: 81(ptr) AccessChain 24(data) 25 596 78 + Store 602 601 + 603: 27(ptr) AccessChain 10(dti) 26 + 604: 6(int) Load 603 + 605: 27(ptr) AccessChain 10(dti) 26 + 606: 6(int) Load 605 + 607: 90(ptr) AccessChain 24(data) 25 606 78 26 + 608: 14(int) Load 607 + 609: 14(int) GroupNonUniformSMax 35 Reduce 608 + 610: 90(ptr) AccessChain 24(data) 25 604 78 26 + Store 610 609 + 611: 27(ptr) AccessChain 10(dti) 26 + 612: 6(int) Load 611 + 613: 27(ptr) AccessChain 10(dti) 26 + 614: 6(int) Load 613 + 615: 81(ptr) AccessChain 24(data) 25 614 78 + 616: 15(ivec4) Load 615 + 617: 99(ivec2) VectorShuffle 616 616 0 1 + 618: 99(ivec2) GroupNonUniformSMax 35 Reduce 617 + 619: 90(ptr) AccessChain 24(data) 25 612 78 26 + 620: 14(int) CompositeExtract 618 0 + Store 619 620 + 621: 90(ptr) AccessChain 24(data) 25 612 78 58 + 622: 14(int) CompositeExtract 618 1 + Store 621 622 + 623: 27(ptr) AccessChain 10(dti) 26 + 624: 6(int) Load 623 625: 27(ptr) AccessChain 10(dti) 26 626: 6(int) Load 625 - 627: 27(ptr) AccessChain 10(dti) 26 - 628: 6(int) Load 627 - 629: 170(ptr) AccessChain 24(data) 25 628 158 26 - 630:18(float64_t) Load 629 - 631:18(float64_t) GroupNonUniformFMax 35 Reduce 630 - 632: 170(ptr) AccessChain 24(data) 25 626 158 26 - Store 632 631 - 633: 27(ptr) AccessChain 10(dti) 26 - 634: 6(int) Load 633 - 635: 27(ptr) AccessChain 10(dti) 26 - 636: 6(int) Load 635 - 637: 161(ptr) AccessChain 24(data) 25 636 158 - 638: 19(f64vec4) Load 637 - 639:179(f64vec2) VectorShuffle 638 638 0 1 - 640:179(f64vec2) GroupNonUniformFMax 35 Reduce 639 - 641: 161(ptr) AccessChain 24(data) 25 634 158 - 642: 19(f64vec4) Load 641 - 643: 19(f64vec4) VectorShuffle 642 640 4 5 2 3 - Store 641 643 - 644: 27(ptr) AccessChain 10(dti) 26 - 645: 6(int) Load 644 - 646: 27(ptr) AccessChain 10(dti) 26 - 647: 6(int) Load 646 - 648: 161(ptr) AccessChain 24(data) 25 647 158 - 649: 19(f64vec4) Load 648 - 650:191(f64vec3) VectorShuffle 649 649 0 1 2 - 651:191(f64vec3) GroupNonUniformFMax 35 Reduce 650 - 652: 161(ptr) AccessChain 24(data) 25 645 158 - 653: 19(f64vec4) Load 652 - 654: 19(f64vec4) VectorShuffle 653 651 4 5 6 3 - Store 652 654 + 627: 81(ptr) AccessChain 24(data) 25 626 78 + 628: 15(ivec4) Load 627 + 629: 112(ivec3) VectorShuffle 628 628 0 1 2 + 630: 112(ivec3) GroupNonUniformSMax 35 Reduce 629 + 631: 90(ptr) AccessChain 24(data) 25 624 78 26 + 632: 14(int) CompositeExtract 630 0 + Store 631 632 + 633: 90(ptr) AccessChain 24(data) 25 624 78 58 + 634: 14(int) CompositeExtract 630 1 + Store 633 634 + 635: 90(ptr) AccessChain 24(data) 25 624 78 73 + 636: 14(int) CompositeExtract 630 2 + Store 635 636 + 637: 27(ptr) AccessChain 10(dti) 26 + 638: 6(int) Load 637 + 639: 27(ptr) AccessChain 10(dti) 26 + 640: 6(int) Load 639 + 641: 128(ptr) AccessChain 24(data) 25 640 125 + 642: 17(fvec4) Load 641 + 643: 17(fvec4) GroupNonUniformFMax 35 Reduce 642 + 644: 128(ptr) AccessChain 24(data) 25 638 125 + Store 644 643 + 645: 27(ptr) AccessChain 10(dti) 26 + 646: 6(int) Load 645 + 647: 27(ptr) AccessChain 10(dti) 26 + 648: 6(int) Load 647 + 649: 137(ptr) AccessChain 24(data) 25 648 125 26 + 650: 16(float) Load 649 + 651: 16(float) GroupNonUniformFMax 35 Reduce 650 + 652: 137(ptr) AccessChain 24(data) 25 646 125 26 + Store 652 651 + 653: 27(ptr) AccessChain 10(dti) 26 + 654: 6(int) Load 653 655: 27(ptr) AccessChain 10(dti) 26 656: 6(int) Load 655 - 657: 27(ptr) AccessChain 10(dti) 26 - 658: 6(int) Load 657 - 659: 32(ptr) AccessChain 24(data) 25 658 25 - 660: 13(ivec4) Load 659 - 661: 13(ivec4) GroupNonUniformBitwiseAnd 35 Reduce 660 - 662: 32(ptr) AccessChain 24(data) 25 656 25 - Store 662 661 - 663: 27(ptr) AccessChain 10(dti) 26 - 664: 6(int) Load 663 + 657: 128(ptr) AccessChain 24(data) 25 656 125 + 658: 17(fvec4) Load 657 + 659: 146(fvec2) VectorShuffle 658 658 0 1 + 660: 146(fvec2) GroupNonUniformFMax 35 Reduce 659 + 661: 137(ptr) AccessChain 24(data) 25 654 125 26 + 662: 16(float) CompositeExtract 660 0 + Store 661 662 + 663: 137(ptr) AccessChain 24(data) 25 654 125 58 + 664: 16(float) CompositeExtract 660 1 + Store 663 664 665: 27(ptr) AccessChain 10(dti) 26 666: 6(int) Load 665 - 667: 42(ptr) AccessChain 24(data) 25 666 25 26 + 667: 27(ptr) AccessChain 10(dti) 26 668: 6(int) Load 667 - 669: 6(int) GroupNonUniformBitwiseAnd 35 Reduce 668 - 670: 42(ptr) AccessChain 24(data) 25 664 25 26 - Store 670 669 - 671: 27(ptr) AccessChain 10(dti) 26 - 672: 6(int) Load 671 - 673: 27(ptr) AccessChain 10(dti) 26 - 674: 6(int) Load 673 - 675: 32(ptr) AccessChain 24(data) 25 674 25 - 676: 13(ivec4) Load 675 - 677: 51(ivec2) VectorShuffle 676 676 0 1 - 678: 51(ivec2) GroupNonUniformBitwiseAnd 35 Reduce 677 - 679: 32(ptr) AccessChain 24(data) 25 672 25 - 680: 13(ivec4) Load 679 - 681: 13(ivec4) VectorShuffle 680 678 4 5 2 3 - Store 679 681 - 682: 27(ptr) AccessChain 10(dti) 26 - 683: 6(int) Load 682 - 684: 27(ptr) AccessChain 10(dti) 26 - 685: 6(int) Load 684 - 686: 32(ptr) AccessChain 24(data) 25 685 25 - 687: 13(ivec4) Load 686 - 688: 7(ivec3) VectorShuffle 687 687 0 1 2 - 689: 7(ivec3) GroupNonUniformBitwiseAnd 35 Reduce 688 - 690: 32(ptr) AccessChain 24(data) 25 683 25 - 691: 13(ivec4) Load 690 - 692: 13(ivec4) VectorShuffle 691 689 4 5 6 3 - Store 690 692 - 693: 27(ptr) AccessChain 10(dti) 26 - 694: 6(int) Load 693 + 669: 128(ptr) AccessChain 24(data) 25 668 125 + 670: 17(fvec4) Load 669 + 671: 159(fvec3) VectorShuffle 670 670 0 1 2 + 672: 159(fvec3) GroupNonUniformFMax 35 Reduce 671 + 673: 137(ptr) AccessChain 24(data) 25 666 125 26 + 674: 16(float) CompositeExtract 672 0 + Store 673 674 + 675: 137(ptr) AccessChain 24(data) 25 666 125 58 + 676: 16(float) CompositeExtract 672 1 + Store 675 676 + 677: 137(ptr) AccessChain 24(data) 25 666 125 73 + 678: 16(float) CompositeExtract 672 2 + Store 677 678 + 679: 27(ptr) AccessChain 10(dti) 26 + 680: 6(int) Load 679 + 681: 27(ptr) AccessChain 10(dti) 26 + 682: 6(int) Load 681 + 683: 175(ptr) AccessChain 24(data) 25 682 172 + 684: 19(f64vec4) Load 683 + 685: 19(f64vec4) GroupNonUniformFMax 35 Reduce 684 + 686: 175(ptr) AccessChain 24(data) 25 680 172 + Store 686 685 + 687: 27(ptr) AccessChain 10(dti) 26 + 688: 6(int) Load 687 + 689: 27(ptr) AccessChain 10(dti) 26 + 690: 6(int) Load 689 + 691: 184(ptr) AccessChain 24(data) 25 690 172 26 + 692:18(float64_t) Load 691 + 693:18(float64_t) GroupNonUniformFMax 35 Reduce 692 + 694: 184(ptr) AccessChain 24(data) 25 688 172 26 + Store 694 693 695: 27(ptr) AccessChain 10(dti) 26 696: 6(int) Load 695 - 697: 75(ptr) AccessChain 24(data) 25 696 72 - 698: 15(ivec4) Load 697 - 699: 15(ivec4) GroupNonUniformBitwiseAnd 35 Reduce 698 - 700: 75(ptr) AccessChain 24(data) 25 694 72 - Store 700 699 - 701: 27(ptr) AccessChain 10(dti) 26 - 702: 6(int) Load 701 - 703: 27(ptr) AccessChain 10(dti) 26 - 704: 6(int) Load 703 - 705: 84(ptr) AccessChain 24(data) 25 704 72 26 - 706: 14(int) Load 705 - 707: 14(int) GroupNonUniformBitwiseAnd 35 Reduce 706 - 708: 84(ptr) AccessChain 24(data) 25 702 72 26 - Store 708 707 + 697: 27(ptr) AccessChain 10(dti) 26 + 698: 6(int) Load 697 + 699: 175(ptr) AccessChain 24(data) 25 698 172 + 700: 19(f64vec4) Load 699 + 701:193(f64vec2) VectorShuffle 700 700 0 1 + 702:193(f64vec2) GroupNonUniformFMax 35 Reduce 701 + 703: 184(ptr) AccessChain 24(data) 25 696 172 26 + 704:18(float64_t) CompositeExtract 702 0 + Store 703 704 + 705: 184(ptr) AccessChain 24(data) 25 696 172 58 + 706:18(float64_t) CompositeExtract 702 1 + Store 705 706 + 707: 27(ptr) AccessChain 10(dti) 26 + 708: 6(int) Load 707 709: 27(ptr) AccessChain 10(dti) 26 710: 6(int) Load 709 - 711: 27(ptr) AccessChain 10(dti) 26 - 712: 6(int) Load 711 - 713: 75(ptr) AccessChain 24(data) 25 712 72 - 714: 15(ivec4) Load 713 - 715: 93(ivec2) VectorShuffle 714 714 0 1 - 716: 93(ivec2) GroupNonUniformBitwiseAnd 35 Reduce 715 - 717: 75(ptr) AccessChain 24(data) 25 710 72 - 718: 15(ivec4) Load 717 - 719: 15(ivec4) VectorShuffle 718 716 4 5 2 3 - Store 717 719 - 720: 27(ptr) AccessChain 10(dti) 26 - 721: 6(int) Load 720 - 722: 27(ptr) AccessChain 10(dti) 26 - 723: 6(int) Load 722 - 724: 75(ptr) AccessChain 24(data) 25 723 72 - 725: 15(ivec4) Load 724 - 726: 105(ivec3) VectorShuffle 725 725 0 1 2 - 727: 105(ivec3) GroupNonUniformBitwiseAnd 35 Reduce 726 - 728: 75(ptr) AccessChain 24(data) 25 721 72 - 729: 15(ivec4) Load 728 - 730: 15(ivec4) VectorShuffle 729 727 4 5 6 3 - Store 728 730 + 711: 175(ptr) AccessChain 24(data) 25 710 172 + 712: 19(f64vec4) Load 711 + 713:206(f64vec3) VectorShuffle 712 712 0 1 2 + 714:206(f64vec3) GroupNonUniformFMax 35 Reduce 713 + 715: 184(ptr) AccessChain 24(data) 25 708 172 26 + 716:18(float64_t) CompositeExtract 714 0 + Store 715 716 + 717: 184(ptr) AccessChain 24(data) 25 708 172 58 + 718:18(float64_t) CompositeExtract 714 1 + Store 717 718 + 719: 184(ptr) AccessChain 24(data) 25 708 172 73 + 720:18(float64_t) CompositeExtract 714 2 + Store 719 720 + 721: 27(ptr) AccessChain 10(dti) 26 + 722: 6(int) Load 721 + 723: 27(ptr) AccessChain 10(dti) 26 + 724: 6(int) Load 723 + 725: 32(ptr) AccessChain 24(data) 25 724 25 + 726: 13(ivec4) Load 725 + 727: 13(ivec4) GroupNonUniformBitwiseAnd 35 Reduce 726 + 728: 32(ptr) AccessChain 24(data) 25 722 25 + Store 728 727 + 729: 27(ptr) AccessChain 10(dti) 26 + 730: 6(int) Load 729 731: 27(ptr) AccessChain 10(dti) 26 732: 6(int) Load 731 - 733: 27(ptr) AccessChain 10(dti) 26 + 733: 42(ptr) AccessChain 24(data) 25 732 25 26 734: 6(int) Load 733 - 735: 32(ptr) AccessChain 24(data) 25 734 25 - 736: 13(ivec4) Load 735 - 737: 13(ivec4) GroupNonUniformBitwiseOr 35 Reduce 736 - 738: 32(ptr) AccessChain 24(data) 25 732 25 - Store 738 737 + 735: 6(int) GroupNonUniformBitwiseAnd 35 Reduce 734 + 736: 42(ptr) AccessChain 24(data) 25 730 25 26 + Store 736 735 + 737: 27(ptr) AccessChain 10(dti) 26 + 738: 6(int) Load 737 739: 27(ptr) AccessChain 10(dti) 26 740: 6(int) Load 739 - 741: 27(ptr) AccessChain 10(dti) 26 - 742: 6(int) Load 741 - 743: 42(ptr) AccessChain 24(data) 25 742 25 26 - 744: 6(int) Load 743 - 745: 6(int) GroupNonUniformBitwiseOr 35 Reduce 744 - 746: 42(ptr) AccessChain 24(data) 25 740 25 26 - Store 746 745 - 747: 27(ptr) AccessChain 10(dti) 26 - 748: 6(int) Load 747 + 741: 32(ptr) AccessChain 24(data) 25 740 25 + 742: 13(ivec4) Load 741 + 743: 51(ivec2) VectorShuffle 742 742 0 1 + 744: 51(ivec2) GroupNonUniformBitwiseAnd 35 Reduce 743 + 745: 42(ptr) AccessChain 24(data) 25 738 25 26 + 746: 6(int) CompositeExtract 744 0 + Store 745 746 + 747: 42(ptr) AccessChain 24(data) 25 738 25 58 + 748: 6(int) CompositeExtract 744 1 + Store 747 748 749: 27(ptr) AccessChain 10(dti) 26 750: 6(int) Load 749 - 751: 32(ptr) AccessChain 24(data) 25 750 25 - 752: 13(ivec4) Load 751 - 753: 51(ivec2) VectorShuffle 752 752 0 1 - 754: 51(ivec2) GroupNonUniformBitwiseOr 35 Reduce 753 - 755: 32(ptr) AccessChain 24(data) 25 748 25 - 756: 13(ivec4) Load 755 - 757: 13(ivec4) VectorShuffle 756 754 4 5 2 3 - Store 755 757 - 758: 27(ptr) AccessChain 10(dti) 26 - 759: 6(int) Load 758 - 760: 27(ptr) AccessChain 10(dti) 26 - 761: 6(int) Load 760 - 762: 32(ptr) AccessChain 24(data) 25 761 25 - 763: 13(ivec4) Load 762 - 764: 7(ivec3) VectorShuffle 763 763 0 1 2 - 765: 7(ivec3) GroupNonUniformBitwiseOr 35 Reduce 764 - 766: 32(ptr) AccessChain 24(data) 25 759 25 - 767: 13(ivec4) Load 766 - 768: 13(ivec4) VectorShuffle 767 765 4 5 6 3 - Store 766 768 - 769: 27(ptr) AccessChain 10(dti) 26 - 770: 6(int) Load 769 + 751: 27(ptr) AccessChain 10(dti) 26 + 752: 6(int) Load 751 + 753: 32(ptr) AccessChain 24(data) 25 752 25 + 754: 13(ivec4) Load 753 + 755: 7(ivec3) VectorShuffle 754 754 0 1 2 + 756: 7(ivec3) GroupNonUniformBitwiseAnd 35 Reduce 755 + 757: 42(ptr) AccessChain 24(data) 25 750 25 26 + 758: 6(int) CompositeExtract 756 0 + Store 757 758 + 759: 42(ptr) AccessChain 24(data) 25 750 25 58 + 760: 6(int) CompositeExtract 756 1 + Store 759 760 + 761: 42(ptr) AccessChain 24(data) 25 750 25 73 + 762: 6(int) CompositeExtract 756 2 + Store 761 762 + 763: 27(ptr) AccessChain 10(dti) 26 + 764: 6(int) Load 763 + 765: 27(ptr) AccessChain 10(dti) 26 + 766: 6(int) Load 765 + 767: 81(ptr) AccessChain 24(data) 25 766 78 + 768: 15(ivec4) Load 767 + 769: 15(ivec4) GroupNonUniformBitwiseAnd 35 Reduce 768 + 770: 81(ptr) AccessChain 24(data) 25 764 78 + Store 770 769 771: 27(ptr) AccessChain 10(dti) 26 772: 6(int) Load 771 - 773: 75(ptr) AccessChain 24(data) 25 772 72 - 774: 15(ivec4) Load 773 - 775: 15(ivec4) GroupNonUniformBitwiseOr 35 Reduce 774 - 776: 75(ptr) AccessChain 24(data) 25 770 72 - Store 776 775 - 777: 27(ptr) AccessChain 10(dti) 26 - 778: 6(int) Load 777 + 773: 27(ptr) AccessChain 10(dti) 26 + 774: 6(int) Load 773 + 775: 90(ptr) AccessChain 24(data) 25 774 78 26 + 776: 14(int) Load 775 + 777: 14(int) GroupNonUniformBitwiseAnd 35 Reduce 776 + 778: 90(ptr) AccessChain 24(data) 25 772 78 26 + Store 778 777 779: 27(ptr) AccessChain 10(dti) 26 780: 6(int) Load 779 - 781: 84(ptr) AccessChain 24(data) 25 780 72 26 - 782: 14(int) Load 781 - 783: 14(int) GroupNonUniformBitwiseOr 35 Reduce 782 - 784: 84(ptr) AccessChain 24(data) 25 778 72 26 - Store 784 783 - 785: 27(ptr) AccessChain 10(dti) 26 - 786: 6(int) Load 785 - 787: 27(ptr) AccessChain 10(dti) 26 - 788: 6(int) Load 787 - 789: 75(ptr) AccessChain 24(data) 25 788 72 - 790: 15(ivec4) Load 789 - 791: 93(ivec2) VectorShuffle 790 790 0 1 - 792: 93(ivec2) GroupNonUniformBitwiseOr 35 Reduce 791 - 793: 75(ptr) AccessChain 24(data) 25 786 72 - 794: 15(ivec4) Load 793 - 795: 15(ivec4) VectorShuffle 794 792 4 5 2 3 - Store 793 795 - 796: 27(ptr) AccessChain 10(dti) 26 - 797: 6(int) Load 796 - 798: 27(ptr) AccessChain 10(dti) 26 - 799: 6(int) Load 798 - 800: 75(ptr) AccessChain 24(data) 25 799 72 - 801: 15(ivec4) Load 800 - 802: 105(ivec3) VectorShuffle 801 801 0 1 2 - 803: 105(ivec3) GroupNonUniformBitwiseOr 35 Reduce 802 - 804: 75(ptr) AccessChain 24(data) 25 797 72 - 805: 15(ivec4) Load 804 - 806: 15(ivec4) VectorShuffle 805 803 4 5 6 3 - Store 804 806 + 781: 27(ptr) AccessChain 10(dti) 26 + 782: 6(int) Load 781 + 783: 81(ptr) AccessChain 24(data) 25 782 78 + 784: 15(ivec4) Load 783 + 785: 99(ivec2) VectorShuffle 784 784 0 1 + 786: 99(ivec2) GroupNonUniformBitwiseAnd 35 Reduce 785 + 787: 90(ptr) AccessChain 24(data) 25 780 78 26 + 788: 14(int) CompositeExtract 786 0 + Store 787 788 + 789: 90(ptr) AccessChain 24(data) 25 780 78 58 + 790: 14(int) CompositeExtract 786 1 + Store 789 790 + 791: 27(ptr) AccessChain 10(dti) 26 + 792: 6(int) Load 791 + 793: 27(ptr) AccessChain 10(dti) 26 + 794: 6(int) Load 793 + 795: 81(ptr) AccessChain 24(data) 25 794 78 + 796: 15(ivec4) Load 795 + 797: 112(ivec3) VectorShuffle 796 796 0 1 2 + 798: 112(ivec3) GroupNonUniformBitwiseAnd 35 Reduce 797 + 799: 90(ptr) AccessChain 24(data) 25 792 78 26 + 800: 14(int) CompositeExtract 798 0 + Store 799 800 + 801: 90(ptr) AccessChain 24(data) 25 792 78 58 + 802: 14(int) CompositeExtract 798 1 + Store 801 802 + 803: 90(ptr) AccessChain 24(data) 25 792 78 73 + 804: 14(int) CompositeExtract 798 2 + Store 803 804 + 805: 27(ptr) AccessChain 10(dti) 26 + 806: 6(int) Load 805 807: 27(ptr) AccessChain 10(dti) 26 808: 6(int) Load 807 - 809: 27(ptr) AccessChain 10(dti) 26 - 810: 6(int) Load 809 - 811: 32(ptr) AccessChain 24(data) 25 810 25 - 812: 13(ivec4) Load 811 - 813: 13(ivec4) GroupNonUniformBitwiseXor 35 Reduce 812 - 814: 32(ptr) AccessChain 24(data) 25 808 25 - Store 814 813 + 809: 32(ptr) AccessChain 24(data) 25 808 25 + 810: 13(ivec4) Load 809 + 811: 13(ivec4) GroupNonUniformBitwiseOr 35 Reduce 810 + 812: 32(ptr) AccessChain 24(data) 25 806 25 + Store 812 811 + 813: 27(ptr) AccessChain 10(dti) 26 + 814: 6(int) Load 813 815: 27(ptr) AccessChain 10(dti) 26 816: 6(int) Load 815 - 817: 27(ptr) AccessChain 10(dti) 26 + 817: 42(ptr) AccessChain 24(data) 25 816 25 26 818: 6(int) Load 817 - 819: 42(ptr) AccessChain 24(data) 25 818 25 26 - 820: 6(int) Load 819 - 821: 6(int) GroupNonUniformBitwiseXor 35 Reduce 820 - 822: 42(ptr) AccessChain 24(data) 25 816 25 26 - Store 822 821 + 819: 6(int) GroupNonUniformBitwiseOr 35 Reduce 818 + 820: 42(ptr) AccessChain 24(data) 25 814 25 26 + Store 820 819 + 821: 27(ptr) AccessChain 10(dti) 26 + 822: 6(int) Load 821 823: 27(ptr) AccessChain 10(dti) 26 824: 6(int) Load 823 - 825: 27(ptr) AccessChain 10(dti) 26 - 826: 6(int) Load 825 - 827: 32(ptr) AccessChain 24(data) 25 826 25 - 828: 13(ivec4) Load 827 - 829: 51(ivec2) VectorShuffle 828 828 0 1 - 830: 51(ivec2) GroupNonUniformBitwiseXor 35 Reduce 829 - 831: 32(ptr) AccessChain 24(data) 25 824 25 - 832: 13(ivec4) Load 831 - 833: 13(ivec4) VectorShuffle 832 830 4 5 2 3 - Store 831 833 - 834: 27(ptr) AccessChain 10(dti) 26 - 835: 6(int) Load 834 - 836: 27(ptr) AccessChain 10(dti) 26 - 837: 6(int) Load 836 - 838: 32(ptr) AccessChain 24(data) 25 837 25 - 839: 13(ivec4) Load 838 - 840: 7(ivec3) VectorShuffle 839 839 0 1 2 - 841: 7(ivec3) GroupNonUniformBitwiseXor 35 Reduce 840 - 842: 32(ptr) AccessChain 24(data) 25 835 25 - 843: 13(ivec4) Load 842 - 844: 13(ivec4) VectorShuffle 843 841 4 5 6 3 - Store 842 844 - 845: 27(ptr) AccessChain 10(dti) 26 - 846: 6(int) Load 845 + 825: 32(ptr) AccessChain 24(data) 25 824 25 + 826: 13(ivec4) Load 825 + 827: 51(ivec2) VectorShuffle 826 826 0 1 + 828: 51(ivec2) GroupNonUniformBitwiseOr 35 Reduce 827 + 829: 42(ptr) AccessChain 24(data) 25 822 25 26 + 830: 6(int) CompositeExtract 828 0 + Store 829 830 + 831: 42(ptr) AccessChain 24(data) 25 822 25 58 + 832: 6(int) CompositeExtract 828 1 + Store 831 832 + 833: 27(ptr) AccessChain 10(dti) 26 + 834: 6(int) Load 833 + 835: 27(ptr) AccessChain 10(dti) 26 + 836: 6(int) Load 835 + 837: 32(ptr) AccessChain 24(data) 25 836 25 + 838: 13(ivec4) Load 837 + 839: 7(ivec3) VectorShuffle 838 838 0 1 2 + 840: 7(ivec3) GroupNonUniformBitwiseOr 35 Reduce 839 + 841: 42(ptr) AccessChain 24(data) 25 834 25 26 + 842: 6(int) CompositeExtract 840 0 + Store 841 842 + 843: 42(ptr) AccessChain 24(data) 25 834 25 58 + 844: 6(int) CompositeExtract 840 1 + Store 843 844 + 845: 42(ptr) AccessChain 24(data) 25 834 25 73 + 846: 6(int) CompositeExtract 840 2 + Store 845 846 847: 27(ptr) AccessChain 10(dti) 26 848: 6(int) Load 847 - 849: 75(ptr) AccessChain 24(data) 25 848 72 - 850: 15(ivec4) Load 849 - 851: 15(ivec4) GroupNonUniformBitwiseXor 35 Reduce 850 - 852: 75(ptr) AccessChain 24(data) 25 846 72 - Store 852 851 - 853: 27(ptr) AccessChain 10(dti) 26 - 854: 6(int) Load 853 + 849: 27(ptr) AccessChain 10(dti) 26 + 850: 6(int) Load 849 + 851: 81(ptr) AccessChain 24(data) 25 850 78 + 852: 15(ivec4) Load 851 + 853: 15(ivec4) GroupNonUniformBitwiseOr 35 Reduce 852 + 854: 81(ptr) AccessChain 24(data) 25 848 78 + Store 854 853 855: 27(ptr) AccessChain 10(dti) 26 856: 6(int) Load 855 - 857: 84(ptr) AccessChain 24(data) 25 856 72 26 - 858: 14(int) Load 857 - 859: 14(int) GroupNonUniformBitwiseXor 35 Reduce 858 - 860: 84(ptr) AccessChain 24(data) 25 854 72 26 - Store 860 859 - 861: 27(ptr) AccessChain 10(dti) 26 - 862: 6(int) Load 861 + 857: 27(ptr) AccessChain 10(dti) 26 + 858: 6(int) Load 857 + 859: 90(ptr) AccessChain 24(data) 25 858 78 26 + 860: 14(int) Load 859 + 861: 14(int) GroupNonUniformBitwiseOr 35 Reduce 860 + 862: 90(ptr) AccessChain 24(data) 25 856 78 26 + Store 862 861 863: 27(ptr) AccessChain 10(dti) 26 864: 6(int) Load 863 - 865: 75(ptr) AccessChain 24(data) 25 864 72 - 866: 15(ivec4) Load 865 - 867: 93(ivec2) VectorShuffle 866 866 0 1 - 868: 93(ivec2) GroupNonUniformBitwiseXor 35 Reduce 867 - 869: 75(ptr) AccessChain 24(data) 25 862 72 - 870: 15(ivec4) Load 869 - 871: 15(ivec4) VectorShuffle 870 868 4 5 2 3 - Store 869 871 - 872: 27(ptr) AccessChain 10(dti) 26 - 873: 6(int) Load 872 - 874: 27(ptr) AccessChain 10(dti) 26 - 875: 6(int) Load 874 - 876: 75(ptr) AccessChain 24(data) 25 875 72 - 877: 15(ivec4) Load 876 - 878: 105(ivec3) VectorShuffle 877 877 0 1 2 - 879: 105(ivec3) GroupNonUniformBitwiseXor 35 Reduce 878 - 880: 75(ptr) AccessChain 24(data) 25 873 72 - 881: 15(ivec4) Load 880 - 882: 15(ivec4) VectorShuffle 881 879 4 5 6 3 - Store 880 882 - 883: 27(ptr) AccessChain 10(dti) 26 - 884: 6(int) Load 883 - 885: 27(ptr) AccessChain 10(dti) 26 - 886: 6(int) Load 885 - 887: 42(ptr) AccessChain 24(data) 25 886 25 26 - 888: 6(int) Load 887 - 890: 889(bool) IEqual 888 26 - 891: 13(ivec4) GroupNonUniformBallot 35 890 - 892: 6(int) GroupNonUniformBallotBitCount 35 Reduce 891 - 893: 42(ptr) AccessChain 24(data) 25 884 25 26 - Store 893 892 + 865: 27(ptr) AccessChain 10(dti) 26 + 866: 6(int) Load 865 + 867: 81(ptr) AccessChain 24(data) 25 866 78 + 868: 15(ivec4) Load 867 + 869: 99(ivec2) VectorShuffle 868 868 0 1 + 870: 99(ivec2) GroupNonUniformBitwiseOr 35 Reduce 869 + 871: 90(ptr) AccessChain 24(data) 25 864 78 26 + 872: 14(int) CompositeExtract 870 0 + Store 871 872 + 873: 90(ptr) AccessChain 24(data) 25 864 78 58 + 874: 14(int) CompositeExtract 870 1 + Store 873 874 + 875: 27(ptr) AccessChain 10(dti) 26 + 876: 6(int) Load 875 + 877: 27(ptr) AccessChain 10(dti) 26 + 878: 6(int) Load 877 + 879: 81(ptr) AccessChain 24(data) 25 878 78 + 880: 15(ivec4) Load 879 + 881: 112(ivec3) VectorShuffle 880 880 0 1 2 + 882: 112(ivec3) GroupNonUniformBitwiseOr 35 Reduce 881 + 883: 90(ptr) AccessChain 24(data) 25 876 78 26 + 884: 14(int) CompositeExtract 882 0 + Store 883 884 + 885: 90(ptr) AccessChain 24(data) 25 876 78 58 + 886: 14(int) CompositeExtract 882 1 + Store 885 886 + 887: 90(ptr) AccessChain 24(data) 25 876 78 73 + 888: 14(int) CompositeExtract 882 2 + Store 887 888 + 889: 27(ptr) AccessChain 10(dti) 26 + 890: 6(int) Load 889 + 891: 27(ptr) AccessChain 10(dti) 26 + 892: 6(int) Load 891 + 893: 32(ptr) AccessChain 24(data) 25 892 25 + 894: 13(ivec4) Load 893 + 895: 13(ivec4) GroupNonUniformBitwiseXor 35 Reduce 894 + 896: 32(ptr) AccessChain 24(data) 25 890 25 + Store 896 895 + 897: 27(ptr) AccessChain 10(dti) 26 + 898: 6(int) Load 897 + 899: 27(ptr) AccessChain 10(dti) 26 + 900: 6(int) Load 899 + 901: 42(ptr) AccessChain 24(data) 25 900 25 26 + 902: 6(int) Load 901 + 903: 6(int) GroupNonUniformBitwiseXor 35 Reduce 902 + 904: 42(ptr) AccessChain 24(data) 25 898 25 26 + Store 904 903 + 905: 27(ptr) AccessChain 10(dti) 26 + 906: 6(int) Load 905 + 907: 27(ptr) AccessChain 10(dti) 26 + 908: 6(int) Load 907 + 909: 32(ptr) AccessChain 24(data) 25 908 25 + 910: 13(ivec4) Load 909 + 911: 51(ivec2) VectorShuffle 910 910 0 1 + 912: 51(ivec2) GroupNonUniformBitwiseXor 35 Reduce 911 + 913: 42(ptr) AccessChain 24(data) 25 906 25 26 + 914: 6(int) CompositeExtract 912 0 + Store 913 914 + 915: 42(ptr) AccessChain 24(data) 25 906 25 58 + 916: 6(int) CompositeExtract 912 1 + Store 915 916 + 917: 27(ptr) AccessChain 10(dti) 26 + 918: 6(int) Load 917 + 919: 27(ptr) AccessChain 10(dti) 26 + 920: 6(int) Load 919 + 921: 32(ptr) AccessChain 24(data) 25 920 25 + 922: 13(ivec4) Load 921 + 923: 7(ivec3) VectorShuffle 922 922 0 1 2 + 924: 7(ivec3) GroupNonUniformBitwiseXor 35 Reduce 923 + 925: 42(ptr) AccessChain 24(data) 25 918 25 26 + 926: 6(int) CompositeExtract 924 0 + Store 925 926 + 927: 42(ptr) AccessChain 24(data) 25 918 25 58 + 928: 6(int) CompositeExtract 924 1 + Store 927 928 + 929: 42(ptr) AccessChain 24(data) 25 918 25 73 + 930: 6(int) CompositeExtract 924 2 + Store 929 930 + 931: 27(ptr) AccessChain 10(dti) 26 + 932: 6(int) Load 931 + 933: 27(ptr) AccessChain 10(dti) 26 + 934: 6(int) Load 933 + 935: 81(ptr) AccessChain 24(data) 25 934 78 + 936: 15(ivec4) Load 935 + 937: 15(ivec4) GroupNonUniformBitwiseXor 35 Reduce 936 + 938: 81(ptr) AccessChain 24(data) 25 932 78 + Store 938 937 + 939: 27(ptr) AccessChain 10(dti) 26 + 940: 6(int) Load 939 + 941: 27(ptr) AccessChain 10(dti) 26 + 942: 6(int) Load 941 + 943: 90(ptr) AccessChain 24(data) 25 942 78 26 + 944: 14(int) Load 943 + 945: 14(int) GroupNonUniformBitwiseXor 35 Reduce 944 + 946: 90(ptr) AccessChain 24(data) 25 940 78 26 + Store 946 945 + 947: 27(ptr) AccessChain 10(dti) 26 + 948: 6(int) Load 947 + 949: 27(ptr) AccessChain 10(dti) 26 + 950: 6(int) Load 949 + 951: 81(ptr) AccessChain 24(data) 25 950 78 + 952: 15(ivec4) Load 951 + 953: 99(ivec2) VectorShuffle 952 952 0 1 + 954: 99(ivec2) GroupNonUniformBitwiseXor 35 Reduce 953 + 955: 90(ptr) AccessChain 24(data) 25 948 78 26 + 956: 14(int) CompositeExtract 954 0 + Store 955 956 + 957: 90(ptr) AccessChain 24(data) 25 948 78 58 + 958: 14(int) CompositeExtract 954 1 + Store 957 958 + 959: 27(ptr) AccessChain 10(dti) 26 + 960: 6(int) Load 959 + 961: 27(ptr) AccessChain 10(dti) 26 + 962: 6(int) Load 961 + 963: 81(ptr) AccessChain 24(data) 25 962 78 + 964: 15(ivec4) Load 963 + 965: 112(ivec3) VectorShuffle 964 964 0 1 2 + 966: 112(ivec3) GroupNonUniformBitwiseXor 35 Reduce 965 + 967: 90(ptr) AccessChain 24(data) 25 960 78 26 + 968: 14(int) CompositeExtract 966 0 + Store 967 968 + 969: 90(ptr) AccessChain 24(data) 25 960 78 58 + 970: 14(int) CompositeExtract 966 1 + Store 969 970 + 971: 90(ptr) AccessChain 24(data) 25 960 78 73 + 972: 14(int) CompositeExtract 966 2 + Store 971 972 + 973: 27(ptr) AccessChain 10(dti) 26 + 974: 6(int) Load 973 + 975: 27(ptr) AccessChain 10(dti) 26 + 976: 6(int) Load 975 + 977: 42(ptr) AccessChain 24(data) 25 976 25 26 + 978: 6(int) Load 977 + 980: 979(bool) IEqual 978 26 + 981: 13(ivec4) GroupNonUniformBallot 35 980 + 982: 6(int) GroupNonUniformBallotBitCount 35 Reduce 981 + 983: 42(ptr) AccessChain 24(data) 25 974 25 26 + Store 983 982 Return FunctionEnd diff --git a/Test/baseResults/remap.uniformarray.everything.frag.out b/Test/baseResults/remap.uniformarray.everything.frag.out index bebff93899..ee1daa756a 100644 --- a/Test/baseResults/remap.uniformarray.everything.frag.out +++ b/Test/baseResults/remap.uniformarray.everything.frag.out @@ -28,14 +28,17 @@ remap.uniformarray.everything.frag 24: TypeVector 13(float) 3 661: TypePointer Input 24(fvec3) 4957: 661(ptr) Variable Input + 2570: 11(int) Constant 0 + 650: TypePointer Function 13(float) + 2573: 11(int) Constant 1 + 2576: 11(int) Constant 2 2618: 11(int) Constant 16 - 669: TypeArray 13(float) 2618 - 1306: TypePointer Input 669 - 4339: 1306(ptr) Variable Input + 709: TypeArray 13(float) 2618 + 1346: TypePointer Input 709 + 4339: 1346(ptr) Variable Input 2607: 12(int) Constant 12 - 650: TypePointer Input 13(float) + 651: TypePointer Input 13(float) 2579: 11(int) Constant 3 - 651: TypePointer Function 13(float) 668: TypePointer Output 29(fvec4) 5139: 668(ptr) Variable Output 5663: 8 Function None 1282 @@ -49,17 +52,23 @@ remap.uniformarray.everything.frag Store 4902 23084 21218: 24(fvec3) Load 4957 13695: 29(fvec4) Load 4902 - 23883: 24(fvec3) VectorShuffle 13695 13695 0 1 2 - 15591: 24(fvec3) FAdd 23883 21218 - 17086: 29(fvec4) Load 4902 - 7051: 29(fvec4) VectorShuffle 17086 15591 4 5 6 3 - Store 4902 7051 - 18282: 650(ptr) AccessChain 4339 2607 - 7372: 13(float) Load 18282 - 21371: 651(ptr) AccessChain 4902 2579 + 23959: 24(fvec3) VectorShuffle 13695 13695 0 1 2 + 14937: 24(fvec3) FAdd 23959 21218 + 15653: 650(ptr) AccessChain 4902 2570 + 21354: 13(float) CompositeExtract 14937 0 + Store 15653 21354 + 16378: 650(ptr) AccessChain 4902 2573 + 15746: 13(float) CompositeExtract 14937 1 + Store 16378 15746 + 16379: 650(ptr) AccessChain 4902 2576 + 15747: 13(float) CompositeExtract 14937 2 + Store 16379 15747 + 19895: 651(ptr) AccessChain 4339 2607 + 7372: 13(float) Load 19895 + 21371: 650(ptr) AccessChain 4902 2579 11412: 13(float) Load 21371 22584: 13(float) FAdd 11412 7372 - 17318: 651(ptr) AccessChain 4902 2579 + 17318: 650(ptr) AccessChain 4902 2579 Store 17318 22584 17934: 29(fvec4) Load 4902 Store 5139 17934 diff --git a/Test/baseResults/remap.uniformarray.none.frag.out b/Test/baseResults/remap.uniformarray.none.frag.out index 6bd58d2774..00e1f57ea3 100644 --- a/Test/baseResults/remap.uniformarray.none.frag.out +++ b/Test/baseResults/remap.uniformarray.none.frag.out @@ -1,27 +1,27 @@ remap.uniformarray.none.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 53 +// Id's are bound by 60 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 14 25 35 47 + EntryPoint Fragment 4 "main" 14 25 43 54 ExecutionMode 4 OriginUpperLeft Source GLSL 140 Name 4 "main" Name 9 "texColor" Name 14 "color" Name 25 "inColor" - Name 35 "alpha" - Name 47 "gl_FragColor" - Name 52 "texSampler2D" + Name 43 "alpha" + Name 54 "gl_FragColor" + Name 59 "texSampler2D" Decorate 14(color) Location 1 Decorate 25(inColor) Location 0 - Decorate 35(alpha) Location 7 - Decorate 47(gl_FragColor) Location 0 - Decorate 52(texSampler2D) DescriptorSet 0 - Decorate 52(texSampler2D) Binding 0 + Decorate 43(alpha) Location 7 + Decorate 54(gl_FragColor) Location 0 + Decorate 59(texSampler2D) DescriptorSet 0 + Decorate 59(texSampler2D) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -38,20 +38,23 @@ remap.uniformarray.none.frag 23: TypeVector 6(float) 3 24: TypePointer Input 23(fvec3) 25(inColor): 24(ptr) Variable Input - 32: 10(int) Constant 16 - 33: TypeArray 6(float) 32 - 34: TypePointer Input 33 - 35(alpha): 34(ptr) Variable Input - 36: 15(int) Constant 12 - 37: TypePointer Input 6(float) - 40: 10(int) Constant 3 - 41: TypePointer Function 6(float) - 46: TypePointer Output 7(fvec4) -47(gl_FragColor): 46(ptr) Variable Output - 49: TypeImage 6(float) 2D sampled format:Unknown - 50: TypeSampledImage 49 - 51: TypePointer UniformConstant 50 -52(texSampler2D): 51(ptr) Variable UniformConstant + 30: 10(int) Constant 0 + 31: TypePointer Function 6(float) + 34: 10(int) Constant 1 + 37: 10(int) Constant 2 + 40: 10(int) Constant 16 + 41: TypeArray 6(float) 40 + 42: TypePointer Input 41 + 43(alpha): 42(ptr) Variable Input + 44: 15(int) Constant 12 + 45: TypePointer Input 6(float) + 48: 10(int) Constant 3 + 53: TypePointer Output 7(fvec4) +54(gl_FragColor): 53(ptr) Variable Output + 56: TypeImage 6(float) 2D sampled format:Unknown + 57: TypeSampledImage 56 + 58: TypePointer UniformConstant 57 +59(texSampler2D): 58(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 9(texColor): 8(ptr) Variable Function @@ -65,17 +68,23 @@ remap.uniformarray.none.frag 27: 7(fvec4) Load 9(texColor) 28: 23(fvec3) VectorShuffle 27 27 0 1 2 29: 23(fvec3) FAdd 28 26 - 30: 7(fvec4) Load 9(texColor) - 31: 7(fvec4) VectorShuffle 30 29 4 5 6 3 - Store 9(texColor) 31 - 38: 37(ptr) AccessChain 35(alpha) 36 - 39: 6(float) Load 38 - 42: 41(ptr) AccessChain 9(texColor) 40 - 43: 6(float) Load 42 - 44: 6(float) FAdd 43 39 - 45: 41(ptr) AccessChain 9(texColor) 40 - Store 45 44 - 48: 7(fvec4) Load 9(texColor) - Store 47(gl_FragColor) 48 + 32: 31(ptr) AccessChain 9(texColor) 30 + 33: 6(float) CompositeExtract 29 0 + Store 32 33 + 35: 31(ptr) AccessChain 9(texColor) 34 + 36: 6(float) CompositeExtract 29 1 + Store 35 36 + 38: 31(ptr) AccessChain 9(texColor) 37 + 39: 6(float) CompositeExtract 29 2 + Store 38 39 + 46: 45(ptr) AccessChain 43(alpha) 44 + 47: 6(float) Load 46 + 49: 31(ptr) AccessChain 9(texColor) 48 + 50: 6(float) Load 49 + 51: 6(float) FAdd 50 47 + 52: 31(ptr) AccessChain 9(texColor) 48 + Store 52 51 + 55: 7(fvec4) Load 9(texColor) + Store 54(gl_FragColor) 55 Return FunctionEnd diff --git a/Test/baseResults/spv.310.bitcast.frag.out b/Test/baseResults/spv.310.bitcast.frag.out index b7f823d633..f4322abc50 100644 --- a/Test/baseResults/spv.310.bitcast.frag.out +++ b/Test/baseResults/spv.310.bitcast.frag.out @@ -1,71 +1,71 @@ spv.310.bitcast.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 153 +// Id's are bound by 179 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 14 26 37 48 89 98 107 116 122 130 139 148 + EntryPoint Fragment 4 "main" 14 26 40 56 103 112 123 136 142 150 161 174 ExecutionMode 4 OriginUpperLeft Source ESSL 310 Name 4 "main" Name 9 "idata" Name 14 "f1" Name 26 "f2" - Name 37 "f3" - Name 48 "f4" - Name 55 "udata" - Name 85 "fdata" - Name 89 "i1" - Name 98 "i2" - Name 107 "i3" - Name 116 "i4" - Name 122 "u1" - Name 130 "u2" - Name 139 "u3" - Name 148 "u4" + Name 40 "f3" + Name 56 "f4" + Name 63 "udata" + Name 99 "fdata" + Name 103 "i1" + Name 112 "i2" + Name 123 "i3" + Name 136 "i4" + Name 142 "u1" + Name 150 "u2" + Name 161 "u3" + Name 174 "u4" Decorate 14(f1) RelaxedPrecision Decorate 14(f1) Location 8 Decorate 15 RelaxedPrecision Decorate 26(f2) RelaxedPrecision Decorate 26(f2) Location 9 Decorate 27 RelaxedPrecision - Decorate 37(f3) RelaxedPrecision - Decorate 37(f3) Location 10 - Decorate 38 RelaxedPrecision - Decorate 48(f4) Location 11 - Decorate 57 RelaxedPrecision - Decorate 64 RelaxedPrecision + Decorate 40(f3) RelaxedPrecision + Decorate 40(f3) Location 10 + Decorate 41 RelaxedPrecision + Decorate 56(f4) Location 11 + Decorate 65 RelaxedPrecision Decorate 72 RelaxedPrecision - Decorate 89(i1) RelaxedPrecision - Decorate 89(i1) Flat - Decorate 89(i1) Location 0 - Decorate 90 RelaxedPrecision - Decorate 98(i2) RelaxedPrecision - Decorate 98(i2) Flat - Decorate 98(i2) Location 1 - Decorate 99 RelaxedPrecision - Decorate 107(i3) RelaxedPrecision - Decorate 107(i3) Flat - Decorate 107(i3) Location 2 - Decorate 108 RelaxedPrecision - Decorate 116(i4) Flat - Decorate 116(i4) Location 3 - Decorate 122(u1) RelaxedPrecision - Decorate 122(u1) Flat - Decorate 122(u1) Location 4 - Decorate 123 RelaxedPrecision - Decorate 130(u2) RelaxedPrecision - Decorate 130(u2) Flat - Decorate 130(u2) Location 5 - Decorate 131 RelaxedPrecision - Decorate 139(u3) RelaxedPrecision - Decorate 139(u3) Flat - Decorate 139(u3) Location 6 - Decorate 140 RelaxedPrecision - Decorate 148(u4) Flat - Decorate 148(u4) Location 7 + Decorate 82 RelaxedPrecision + Decorate 103(i1) RelaxedPrecision + Decorate 103(i1) Flat + Decorate 103(i1) Location 0 + Decorate 104 RelaxedPrecision + Decorate 112(i2) RelaxedPrecision + Decorate 112(i2) Flat + Decorate 112(i2) Location 1 + Decorate 113 RelaxedPrecision + Decorate 123(i3) RelaxedPrecision + Decorate 123(i3) Flat + Decorate 123(i3) Location 2 + Decorate 124 RelaxedPrecision + Decorate 136(i4) Flat + Decorate 136(i4) Location 3 + Decorate 142(u1) RelaxedPrecision + Decorate 142(u1) Flat + Decorate 142(u1) Location 4 + Decorate 143 RelaxedPrecision + Decorate 150(u2) RelaxedPrecision + Decorate 150(u2) Flat + Decorate 150(u2) Location 5 + Decorate 151 RelaxedPrecision + Decorate 161(u3) RelaxedPrecision + Decorate 161(u3) Flat + Decorate 161(u3) Location 6 + Decorate 162 RelaxedPrecision + Decorate 174(u4) Flat + Decorate 174(u4) Location 7 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -83,44 +83,46 @@ spv.310.bitcast.frag 25: TypePointer Input 24(fvec2) 26(f2): 25(ptr) Variable Input 28: TypeVector 6(int) 2 - 35: TypeVector 12(float) 3 - 36: TypePointer Input 35(fvec3) - 37(f3): 36(ptr) Variable Input - 39: TypeVector 6(int) 3 - 46: TypeVector 12(float) 4 - 47: TypePointer Input 46(fvec4) - 48(f4): 47(ptr) Variable Input - 53: TypeVector 17(int) 4 - 54: TypePointer Function 53(ivec4) - 56: 53(ivec4) ConstantComposite 18 18 18 18 - 59: TypePointer Function 17(int) - 65: TypeVector 17(int) 2 - 73: TypeVector 17(int) 3 - 84: TypePointer Function 46(fvec4) - 86: 12(float) Constant 0 - 87: 46(fvec4) ConstantComposite 86 86 86 86 - 88: TypePointer Input 6(int) - 89(i1): 88(ptr) Variable Input - 92: TypePointer Function 12(float) - 97: TypePointer Input 28(ivec2) - 98(i2): 97(ptr) Variable Input - 106: TypePointer Input 39(ivec3) - 107(i3): 106(ptr) Variable Input - 115: TypePointer Input 7(ivec4) - 116(i4): 115(ptr) Variable Input - 121: TypePointer Input 17(int) - 122(u1): 121(ptr) Variable Input - 129: TypePointer Input 65(ivec2) - 130(u2): 129(ptr) Variable Input - 138: TypePointer Input 73(ivec3) - 139(u3): 138(ptr) Variable Input - 147: TypePointer Input 53(ivec4) - 148(u4): 147(ptr) Variable Input + 35: 17(int) Constant 1 + 38: TypeVector 12(float) 3 + 39: TypePointer Input 38(fvec3) + 40(f3): 39(ptr) Variable Input + 42: TypeVector 6(int) 3 + 51: 17(int) Constant 2 + 54: TypeVector 12(float) 4 + 55: TypePointer Input 54(fvec4) + 56(f4): 55(ptr) Variable Input + 61: TypeVector 17(int) 4 + 62: TypePointer Function 61(ivec4) + 64: 61(ivec4) ConstantComposite 18 18 18 18 + 67: TypePointer Function 17(int) + 73: TypeVector 17(int) 2 + 83: TypeVector 17(int) 3 + 98: TypePointer Function 54(fvec4) + 100: 12(float) Constant 0 + 101: 54(fvec4) ConstantComposite 100 100 100 100 + 102: TypePointer Input 6(int) + 103(i1): 102(ptr) Variable Input + 106: TypePointer Function 12(float) + 111: TypePointer Input 28(ivec2) + 112(i2): 111(ptr) Variable Input + 122: TypePointer Input 42(ivec3) + 123(i3): 122(ptr) Variable Input + 135: TypePointer Input 7(ivec4) + 136(i4): 135(ptr) Variable Input + 141: TypePointer Input 17(int) + 142(u1): 141(ptr) Variable Input + 149: TypePointer Input 73(ivec2) + 150(u2): 149(ptr) Variable Input + 160: TypePointer Input 83(ivec3) + 161(u3): 160(ptr) Variable Input + 173: TypePointer Input 61(ivec4) + 174(u4): 173(ptr) Variable Input 4(main): 2 Function None 3 5: Label 9(idata): 8(ptr) Variable Function - 55(udata): 54(ptr) Variable Function - 85(fdata): 84(ptr) Variable Function + 63(udata): 62(ptr) Variable Function + 99(fdata): 98(ptr) Variable Function Store 9(idata) 11 15: 12(float) Load 14(f1) 16: 6(int) Bitcast 15 @@ -134,107 +136,143 @@ spv.310.bitcast.frag 30: 7(ivec4) Load 9(idata) 31: 28(ivec2) VectorShuffle 30 30 0 1 32: 28(ivec2) IAdd 31 29 - 33: 7(ivec4) Load 9(idata) - 34: 7(ivec4) VectorShuffle 33 32 4 5 2 3 - Store 9(idata) 34 - 38: 35(fvec3) Load 37(f3) - 40: 39(ivec3) Bitcast 38 - 41: 7(ivec4) Load 9(idata) - 42: 39(ivec3) VectorShuffle 41 41 0 1 2 - 43: 39(ivec3) IAdd 42 40 + 33: 19(ptr) AccessChain 9(idata) 18 + 34: 6(int) CompositeExtract 32 0 + Store 33 34 + 36: 19(ptr) AccessChain 9(idata) 35 + 37: 6(int) CompositeExtract 32 1 + Store 36 37 + 41: 38(fvec3) Load 40(f3) + 43: 42(ivec3) Bitcast 41 44: 7(ivec4) Load 9(idata) - 45: 7(ivec4) VectorShuffle 44 43 4 5 6 3 - Store 9(idata) 45 - 49: 46(fvec4) Load 48(f4) - 50: 7(ivec4) Bitcast 49 - 51: 7(ivec4) Load 9(idata) - 52: 7(ivec4) IAdd 51 50 - Store 9(idata) 52 - Store 55(udata) 56 - 57: 12(float) Load 14(f1) - 58: 17(int) Bitcast 57 - 60: 59(ptr) AccessChain 55(udata) 18 - 61: 17(int) Load 60 - 62: 17(int) IAdd 61 58 - 63: 59(ptr) AccessChain 55(udata) 18 - Store 63 62 - 64: 24(fvec2) Load 26(f2) - 66: 65(ivec2) Bitcast 64 - 67: 53(ivec4) Load 55(udata) - 68: 65(ivec2) VectorShuffle 67 67 0 1 - 69: 65(ivec2) IAdd 68 66 - 70: 53(ivec4) Load 55(udata) - 71: 53(ivec4) VectorShuffle 70 69 4 5 2 3 - Store 55(udata) 71 - 72: 35(fvec3) Load 37(f3) - 74: 73(ivec3) Bitcast 72 - 75: 53(ivec4) Load 55(udata) - 76: 73(ivec3) VectorShuffle 75 75 0 1 2 - 77: 73(ivec3) IAdd 76 74 - 78: 53(ivec4) Load 55(udata) - 79: 53(ivec4) VectorShuffle 78 77 4 5 6 3 - Store 55(udata) 79 - 80: 46(fvec4) Load 48(f4) - 81: 53(ivec4) Bitcast 80 - 82: 53(ivec4) Load 55(udata) - 83: 53(ivec4) IAdd 82 81 - Store 55(udata) 83 - Store 85(fdata) 87 - 90: 6(int) Load 89(i1) - 91: 12(float) Bitcast 90 - 93: 92(ptr) AccessChain 85(fdata) 18 - 94: 12(float) Load 93 - 95: 12(float) FAdd 94 91 - 96: 92(ptr) AccessChain 85(fdata) 18 - Store 96 95 - 99: 28(ivec2) Load 98(i2) - 100: 24(fvec2) Bitcast 99 - 101: 46(fvec4) Load 85(fdata) - 102: 24(fvec2) VectorShuffle 101 101 0 1 - 103: 24(fvec2) FAdd 102 100 - 104: 46(fvec4) Load 85(fdata) - 105: 46(fvec4) VectorShuffle 104 103 4 5 2 3 - Store 85(fdata) 105 - 108: 39(ivec3) Load 107(i3) - 109: 35(fvec3) Bitcast 108 - 110: 46(fvec4) Load 85(fdata) - 111: 35(fvec3) VectorShuffle 110 110 0 1 2 - 112: 35(fvec3) FAdd 111 109 - 113: 46(fvec4) Load 85(fdata) - 114: 46(fvec4) VectorShuffle 113 112 4 5 6 3 - Store 85(fdata) 114 - 117: 7(ivec4) Load 116(i4) - 118: 46(fvec4) Bitcast 117 - 119: 46(fvec4) Load 85(fdata) - 120: 46(fvec4) FAdd 119 118 - Store 85(fdata) 120 - 123: 17(int) Load 122(u1) - 124: 12(float) Bitcast 123 - 125: 92(ptr) AccessChain 85(fdata) 18 - 126: 12(float) Load 125 - 127: 12(float) FAdd 126 124 - 128: 92(ptr) AccessChain 85(fdata) 18 - Store 128 127 - 131: 65(ivec2) Load 130(u2) - 132: 24(fvec2) Bitcast 131 - 133: 46(fvec4) Load 85(fdata) - 134: 24(fvec2) VectorShuffle 133 133 0 1 - 135: 24(fvec2) FAdd 134 132 - 136: 46(fvec4) Load 85(fdata) - 137: 46(fvec4) VectorShuffle 136 135 4 5 2 3 - Store 85(fdata) 137 - 140: 73(ivec3) Load 139(u3) - 141: 35(fvec3) Bitcast 140 - 142: 46(fvec4) Load 85(fdata) - 143: 35(fvec3) VectorShuffle 142 142 0 1 2 - 144: 35(fvec3) FAdd 143 141 - 145: 46(fvec4) Load 85(fdata) - 146: 46(fvec4) VectorShuffle 145 144 4 5 6 3 - Store 85(fdata) 146 - 149: 53(ivec4) Load 148(u4) - 150: 46(fvec4) Bitcast 149 - 151: 46(fvec4) Load 85(fdata) - 152: 46(fvec4) FAdd 151 150 - Store 85(fdata) 152 + 45: 42(ivec3) VectorShuffle 44 44 0 1 2 + 46: 42(ivec3) IAdd 45 43 + 47: 19(ptr) AccessChain 9(idata) 18 + 48: 6(int) CompositeExtract 46 0 + Store 47 48 + 49: 19(ptr) AccessChain 9(idata) 35 + 50: 6(int) CompositeExtract 46 1 + Store 49 50 + 52: 19(ptr) AccessChain 9(idata) 51 + 53: 6(int) CompositeExtract 46 2 + Store 52 53 + 57: 54(fvec4) Load 56(f4) + 58: 7(ivec4) Bitcast 57 + 59: 7(ivec4) Load 9(idata) + 60: 7(ivec4) IAdd 59 58 + Store 9(idata) 60 + Store 63(udata) 64 + 65: 12(float) Load 14(f1) + 66: 17(int) Bitcast 65 + 68: 67(ptr) AccessChain 63(udata) 18 + 69: 17(int) Load 68 + 70: 17(int) IAdd 69 66 + 71: 67(ptr) AccessChain 63(udata) 18 + Store 71 70 + 72: 24(fvec2) Load 26(f2) + 74: 73(ivec2) Bitcast 72 + 75: 61(ivec4) Load 63(udata) + 76: 73(ivec2) VectorShuffle 75 75 0 1 + 77: 73(ivec2) IAdd 76 74 + 78: 67(ptr) AccessChain 63(udata) 18 + 79: 17(int) CompositeExtract 77 0 + Store 78 79 + 80: 67(ptr) AccessChain 63(udata) 35 + 81: 17(int) CompositeExtract 77 1 + Store 80 81 + 82: 38(fvec3) Load 40(f3) + 84: 83(ivec3) Bitcast 82 + 85: 61(ivec4) Load 63(udata) + 86: 83(ivec3) VectorShuffle 85 85 0 1 2 + 87: 83(ivec3) IAdd 86 84 + 88: 67(ptr) AccessChain 63(udata) 18 + 89: 17(int) CompositeExtract 87 0 + Store 88 89 + 90: 67(ptr) AccessChain 63(udata) 35 + 91: 17(int) CompositeExtract 87 1 + Store 90 91 + 92: 67(ptr) AccessChain 63(udata) 51 + 93: 17(int) CompositeExtract 87 2 + Store 92 93 + 94: 54(fvec4) Load 56(f4) + 95: 61(ivec4) Bitcast 94 + 96: 61(ivec4) Load 63(udata) + 97: 61(ivec4) IAdd 96 95 + Store 63(udata) 97 + Store 99(fdata) 101 + 104: 6(int) Load 103(i1) + 105: 12(float) Bitcast 104 + 107: 106(ptr) AccessChain 99(fdata) 18 + 108: 12(float) Load 107 + 109: 12(float) FAdd 108 105 + 110: 106(ptr) AccessChain 99(fdata) 18 + Store 110 109 + 113: 28(ivec2) Load 112(i2) + 114: 24(fvec2) Bitcast 113 + 115: 54(fvec4) Load 99(fdata) + 116: 24(fvec2) VectorShuffle 115 115 0 1 + 117: 24(fvec2) FAdd 116 114 + 118: 106(ptr) AccessChain 99(fdata) 18 + 119: 12(float) CompositeExtract 117 0 + Store 118 119 + 120: 106(ptr) AccessChain 99(fdata) 35 + 121: 12(float) CompositeExtract 117 1 + Store 120 121 + 124: 42(ivec3) Load 123(i3) + 125: 38(fvec3) Bitcast 124 + 126: 54(fvec4) Load 99(fdata) + 127: 38(fvec3) VectorShuffle 126 126 0 1 2 + 128: 38(fvec3) FAdd 127 125 + 129: 106(ptr) AccessChain 99(fdata) 18 + 130: 12(float) CompositeExtract 128 0 + Store 129 130 + 131: 106(ptr) AccessChain 99(fdata) 35 + 132: 12(float) CompositeExtract 128 1 + Store 131 132 + 133: 106(ptr) AccessChain 99(fdata) 51 + 134: 12(float) CompositeExtract 128 2 + Store 133 134 + 137: 7(ivec4) Load 136(i4) + 138: 54(fvec4) Bitcast 137 + 139: 54(fvec4) Load 99(fdata) + 140: 54(fvec4) FAdd 139 138 + Store 99(fdata) 140 + 143: 17(int) Load 142(u1) + 144: 12(float) Bitcast 143 + 145: 106(ptr) AccessChain 99(fdata) 18 + 146: 12(float) Load 145 + 147: 12(float) FAdd 146 144 + 148: 106(ptr) AccessChain 99(fdata) 18 + Store 148 147 + 151: 73(ivec2) Load 150(u2) + 152: 24(fvec2) Bitcast 151 + 153: 54(fvec4) Load 99(fdata) + 154: 24(fvec2) VectorShuffle 153 153 0 1 + 155: 24(fvec2) FAdd 154 152 + 156: 106(ptr) AccessChain 99(fdata) 18 + 157: 12(float) CompositeExtract 155 0 + Store 156 157 + 158: 106(ptr) AccessChain 99(fdata) 35 + 159: 12(float) CompositeExtract 155 1 + Store 158 159 + 162: 83(ivec3) Load 161(u3) + 163: 38(fvec3) Bitcast 162 + 164: 54(fvec4) Load 99(fdata) + 165: 38(fvec3) VectorShuffle 164 164 0 1 2 + 166: 38(fvec3) FAdd 165 163 + 167: 106(ptr) AccessChain 99(fdata) 18 + 168: 12(float) CompositeExtract 166 0 + Store 167 168 + 169: 106(ptr) AccessChain 99(fdata) 35 + 170: 12(float) CompositeExtract 166 1 + Store 169 170 + 171: 106(ptr) AccessChain 99(fdata) 51 + 172: 12(float) CompositeExtract 166 2 + Store 171 172 + 175: 61(ivec4) Load 174(u4) + 176: 54(fvec4) Bitcast 175 + 177: 54(fvec4) Load 99(fdata) + 178: 54(fvec4) FAdd 177 176 + Store 99(fdata) 178 Return FunctionEnd diff --git a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out index 9bc86d081c..a4d8413be0 100644 --- a/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out +++ b/Test/baseResults/spv.320.meshShaderUserDefined.mesh.out @@ -1,13 +1,13 @@ spv.320.meshShaderUserDefined.mesh // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 140 +// Id's are bound by 143 Capability MeshShadingNV Extension "SPV_NV_mesh_shader" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MeshNV 4 "main" 12 19 37 103 + EntryPoint MeshNV 4 "main" 12 19 37 106 ExecutionMode 4 LocalSize 32 1 1 ExecutionMode 4 OutputVertices 81 ExecutionMode 4 OutputPrimitivesNV 32 @@ -27,11 +27,11 @@ spv.320.meshShaderUserDefined.mesh MemberName 33(myblock) 4 "m" MemberName 33(myblock) 5 "mArr" Name 37 "blk" - Name 99 "myblock2" - MemberName 99(myblock2) 0 "f" - MemberName 99(myblock2) 1 "pos" - MemberName 99(myblock2) 2 "m" - Name 103 "blk2" + Name 102 "myblock2" + MemberName 102(myblock2) 0 "f" + MemberName 102(myblock2) 1 "pos" + MemberName 102(myblock2) 2 "m" + Name 106 "blk2" Decorate 12(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 19(gl_WorkGroupID) BuiltIn WorkgroupId MemberDecorate 33(myblock) 0 PerPrimitiveNV @@ -42,9 +42,9 @@ spv.320.meshShaderUserDefined.mesh MemberDecorate 33(myblock) 5 PerPrimitiveNV Decorate 33(myblock) Block Decorate 37(blk) Location 0 - Decorate 99(myblock2) Block - Decorate 103(blk2) Location 20 - Decorate 139 BuiltIn WorkgroupSize + Decorate 102(myblock2) Block + Decorate 106(blk2) Location 20 + Decorate 142 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -82,31 +82,31 @@ spv.320.meshShaderUserDefined.mesh 57: 26(fvec3) ConstantComposite 54 55 56 58: TypePointer Output 26(fvec3) 64: 6(int) Constant 3 - 69: TypePointer Output 27(fvec4) - 74: 6(int) Constant 4 - 76: 23(float) Constant 1098907648 - 77: 27(fvec4) ConstantComposite 56 54 55 76 - 82: 6(int) Constant 5 - 85: 9(int) Constant 3 - 88: 9(int) Constant 1 - 93: 23(float) Constant 1099431936 - 94: 23(float) Constant 1099956224 - 95: 23(float) Constant 1100480512 - 96: 26(fvec3) ConstantComposite 93 94 95 - 98: 9(int) Constant 264 - 99(myblock2): TypeStruct 23(float) 27(fvec4) 29 - 100: 9(int) Constant 81 - 101: TypeArray 99(myblock2) 100 - 102: TypePointer Output 101 - 103(blk2): 102(ptr) Variable Output - 109: 23(float) Constant 1101004800 - 113: 23(float) Constant 1101529088 - 114: 23(float) Constant 1102053376 - 115: 23(float) Constant 1102577664 - 116: 23(float) Constant 1103101952 - 117: 27(fvec4) ConstantComposite 113 114 115 116 - 129: 23(float) Constant 1105723392 - 139: 10(ivec3) ConstantComposite 34 88 88 + 69: 9(int) Constant 1 + 74: 9(int) Constant 3 + 78: 6(int) Constant 4 + 80: 23(float) Constant 1098907648 + 81: 27(fvec4) ConstantComposite 56 54 55 80 + 82: TypePointer Output 27(fvec4) + 87: 6(int) Constant 5 + 96: 23(float) Constant 1099431936 + 97: 23(float) Constant 1099956224 + 98: 23(float) Constant 1100480512 + 99: 26(fvec3) ConstantComposite 96 97 98 + 101: 9(int) Constant 264 + 102(myblock2): TypeStruct 23(float) 27(fvec4) 29 + 103: 9(int) Constant 81 + 104: TypeArray 102(myblock2) 103 + 105: TypePointer Output 104 + 106(blk2): 105(ptr) Variable Output + 112: 23(float) Constant 1101004800 + 116: 23(float) Constant 1101529088 + 117: 23(float) Constant 1102053376 + 118: 23(float) Constant 1102577664 + 119: 23(float) Constant 1103101952 + 120: 27(fvec4) ConstantComposite 116 117 118 119 + 132: 23(float) Constant 1105723392 + 142: 10(ivec3) ConstantComposite 34 69 69 4(main): 2 Function None 3 5: Label 8(iid): 7(ptr) Variable Function @@ -142,64 +142,69 @@ spv.320.meshShaderUserDefined.mesh 66: 6(int) SDiv 65 52 67: 58(ptr) AccessChain 37(blk) 66 52 68: 26(fvec3) Load 67 - 70: 69(ptr) AccessChain 37(blk) 63 64 44 - 71: 27(fvec4) Load 70 - 72: 27(fvec4) VectorShuffle 71 68 0 4 5 6 - Store 70 72 - 73: 6(int) Load 8(iid) - 75: 6(int) SDiv 73 74 - 78: 69(ptr) AccessChain 37(blk) 75 74 52 - 79: 27(fvec4) Load 78 - 80: 27(fvec4) VectorShuffle 79 77 7 6 5 4 - Store 78 80 - 81: 6(int) Load 8(iid) - 83: 6(int) Load 8(iid) - 84: 6(int) SDiv 83 74 - 86: 41(ptr) AccessChain 37(blk) 84 74 52 85 - 87: 23(float) Load 86 - 89: 41(ptr) AccessChain 37(blk) 81 82 39 44 88 - Store 89 87 - 90: 6(int) Load 8(iid) - 91: 6(int) IMul 90 74 - 92: 6(int) Load 18(gid) - 97: 58(ptr) AccessChain 37(blk) 91 82 44 92 - Store 97 96 - MemoryBarrier 88 98 - ControlBarrier 31 31 98 - 104: 6(int) Load 8(iid) - 105: 6(int) Load 8(iid) - 106: 6(int) ISub 105 44 - 107: 41(ptr) AccessChain 103(blk2) 106 39 - 108: 23(float) Load 107 - 110: 23(float) FAdd 108 109 - 111: 41(ptr) AccessChain 103(blk2) 104 39 - Store 111 110 - 112: 6(int) Load 8(iid) - 118: 69(ptr) AccessChain 103(blk2) 112 44 - Store 118 117 - 119: 6(int) Load 8(iid) - 120: 6(int) IAdd 119 44 - 121: 6(int) Load 18(gid) + 70: 41(ptr) AccessChain 37(blk) 63 64 44 69 + 71: 23(float) CompositeExtract 68 0 + Store 70 71 + 72: 41(ptr) AccessChain 37(blk) 63 64 44 31 + 73: 23(float) CompositeExtract 68 1 + Store 72 73 + 75: 41(ptr) AccessChain 37(blk) 63 64 44 74 + 76: 23(float) CompositeExtract 68 2 + Store 75 76 + 77: 6(int) Load 8(iid) + 79: 6(int) SDiv 77 78 + 83: 82(ptr) AccessChain 37(blk) 79 78 52 + 84: 27(fvec4) Load 83 + 85: 27(fvec4) VectorShuffle 84 81 7 6 5 4 + Store 83 85 + 86: 6(int) Load 8(iid) + 88: 6(int) Load 8(iid) + 89: 6(int) SDiv 88 78 + 90: 41(ptr) AccessChain 37(blk) 89 78 52 74 + 91: 23(float) Load 90 + 92: 41(ptr) AccessChain 37(blk) 86 87 39 44 69 + Store 92 91 + 93: 6(int) Load 8(iid) + 94: 6(int) IMul 93 78 + 95: 6(int) Load 18(gid) + 100: 58(ptr) AccessChain 37(blk) 94 87 44 95 + Store 100 99 + MemoryBarrier 69 101 + ControlBarrier 31 31 101 + 107: 6(int) Load 8(iid) + 108: 6(int) Load 8(iid) + 109: 6(int) ISub 108 44 + 110: 41(ptr) AccessChain 106(blk2) 109 39 + 111: 23(float) Load 110 + 113: 23(float) FAdd 111 112 + 114: 41(ptr) AccessChain 106(blk2) 107 39 + Store 114 113 + 115: 6(int) Load 8(iid) + 121: 82(ptr) AccessChain 106(blk2) 115 44 + Store 121 120 122: 6(int) Load 8(iid) - 123: 69(ptr) AccessChain 103(blk2) 122 44 - 124: 27(fvec4) Load 123 - 125: 69(ptr) AccessChain 103(blk2) 120 52 121 - Store 125 124 - 126: 6(int) Load 8(iid) - 127: 6(int) IAdd 126 44 - 128: 6(int) Load 18(gid) - 130: 41(ptr) AccessChain 103(blk2) 127 52 128 31 - Store 130 129 - 131: 6(int) Load 8(iid) - 132: 6(int) IAdd 131 52 - 133: 6(int) Load 8(iid) - 134: 6(int) IAdd 133 44 - 135: 6(int) Load 18(gid) - 136: 69(ptr) AccessChain 103(blk2) 134 52 135 - 137: 27(fvec4) Load 136 - 138: 69(ptr) AccessChain 103(blk2) 132 52 64 - Store 138 137 - MemoryBarrier 88 98 - ControlBarrier 31 31 98 + 123: 6(int) IAdd 122 44 + 124: 6(int) Load 18(gid) + 125: 6(int) Load 8(iid) + 126: 82(ptr) AccessChain 106(blk2) 125 44 + 127: 27(fvec4) Load 126 + 128: 82(ptr) AccessChain 106(blk2) 123 52 124 + Store 128 127 + 129: 6(int) Load 8(iid) + 130: 6(int) IAdd 129 44 + 131: 6(int) Load 18(gid) + 133: 41(ptr) AccessChain 106(blk2) 130 52 131 31 + Store 133 132 + 134: 6(int) Load 8(iid) + 135: 6(int) IAdd 134 52 + 136: 6(int) Load 8(iid) + 137: 6(int) IAdd 136 44 + 138: 6(int) Load 18(gid) + 139: 82(ptr) AccessChain 106(blk2) 137 52 138 + 140: 27(fvec4) Load 139 + 141: 82(ptr) AccessChain 106(blk2) 135 52 64 + Store 141 140 + MemoryBarrier 69 101 + ControlBarrier 31 31 101 Return FunctionEnd diff --git a/Test/baseResults/spv.400.frag.nanclamp.out b/Test/baseResults/spv.400.frag.nanclamp.out index 57f4365f44..cf1ffb0418 100644 --- a/Test/baseResults/spv.400.frag.nanclamp.out +++ b/Test/baseResults/spv.400.frag.nanclamp.out @@ -1,7 +1,7 @@ spv.400.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 1118 +// Id's are bound by 1122 Capability Shader Capability Geometry @@ -11,7 +11,7 @@ spv.400.frag 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 + EntryPoint Fragment 4 "main" 13 1027 1033 1038 1054 1080 1101 1103 1109 1111 1120 ExecutionMode 4 OriginUpperLeft Source GLSL 400 SourceExtension "GL_ARB_separate_shader_objects" @@ -42,16 +42,16 @@ spv.400.frag 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" + Name 1054 "uoutp" + Name 1058 "samp2dr" + Name 1080 "ioutp" + Name 1084 "isamp2DA" + Name 1101 "gl_FragCoord" + Name 1103 "vl2" + Name 1109 "uo" + Name 1111 "u" + Name 1119 "id" + Name 1120 "gl_PrimitiveID" Decorate 13(outp) Location 1 Decorate 17(u2drs) DescriptorSet 0 Decorate 17(u2drs) Binding 3 @@ -61,19 +61,19 @@ spv.400.frag 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 + Decorate 1054(uoutp) Location 3 + Decorate 1058(samp2dr) DescriptorSet 0 + Decorate 1058(samp2dr) Binding 1 + Decorate 1080(ioutp) Location 2 + Decorate 1084(isamp2DA) DescriptorSet 0 + Decorate 1084(isamp2DA) Binding 2 + Decorate 1101(gl_FragCoord) BuiltIn FragCoord + Decorate 1103(vl2) Location 6 + Decorate 1109(uo) Location 0 + Decorate 1111(u) Flat + Decorate 1111(u) Location 2 + Decorate 1120(gl_PrimitiveID) Flat + Decorate 1120(gl_PrimitiveID) BuiltIn PrimitiveId 2: TypeVoid 3: TypeFunction 2 10: TypeFloat 32 @@ -161,46 +161,46 @@ spv.400.frag 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 + 1052: TypeVector 32(int) 4 + 1053: TypePointer Output 1052(ivec4) + 1054(uoutp): 1053(ptr) Variable Output + 1055: TypeImage 32(int) Rect sampled format:Unknown + 1056: TypeSampledImage 1055 + 1057: TypePointer UniformConstant 1056 + 1058(samp2dr): 1057(ptr) Variable UniformConstant + 1061: 32(int) Constant 4 + 1062: TypeArray 24(ivec2) 1061 + 1063: 24(ivec2) ConstantComposite 966 970 + 1064: 23(int) Constant 15 + 1065: 23(int) Constant 16 + 1066: 24(ivec2) ConstantComposite 1064 1065 + 1067: 23(int) Constant 4294967294 + 1068: 23(int) Constant 0 + 1069: 24(ivec2) ConstantComposite 1067 1068 + 1070: 1062 ConstantComposite 1063 27 1066 1069 + 1078: TypeVector 23(int) 4 + 1079: TypePointer Output 1078(ivec4) + 1080(ioutp): 1079(ptr) Variable Output + 1081: TypeImage 23(int) 2D array sampled format:Unknown + 1082: TypeSampledImage 1081 + 1083: TypePointer UniformConstant 1082 + 1084(isamp2DA): 1083(ptr) Variable UniformConstant + 1086: 10(float) Constant 1036831949 + 1087: 1043(fvec3) ConstantComposite 1086 1086 1086 + 1088: 24(ivec2) ConstantComposite 966 966 + 1100: TypePointer Input 11(fvec4) +1101(gl_FragCoord): 1100(ptr) Variable Input + 1103(vl2): 1100(ptr) Variable Input + 1108: TypePointer Output 32(int) + 1109(uo): 1108(ptr) Variable Output + 1110: TypePointer Input 32(int) + 1111(u): 1110(ptr) Variable Input + 1118: TypePointer Function 23(int) +1120(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 + 1119(id): 1118(ptr) Variable Function 1028: 23(int) Load 1027(i) 1030: 1029(ptr) AccessChain 1025(arrayedSampler) 1028 1031: 1021 Load 1030 @@ -213,50 +213,56 @@ spv.400.frag 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 + 1046: 34(ptr) AccessChain 13(outp) 954 + 1047: 10(float) CompositeExtract 1045 0 + Store 1046 1047 + 1048: 34(ptr) AccessChain 13(outp) 958 + 1049: 10(float) CompositeExtract 1045 1 + Store 1048 1049 + 1050: 34(ptr) AccessChain 13(outp) 962 + 1051: 10(float) CompositeExtract 1045 2 + Store 1050 1051 + 1059: 1056 Load 1058(samp2dr) + 1060: 20(fvec2) Load 1033(c2D) + 1071: 1052(ivec4) ImageGather 1059 1060 970 ConstOffsets 1070 + Store 1054(uoutp) 1071 + 1072: 1029(ptr) AccessChain 1025(arrayedSampler) 1068 + 1073: 1021 Load 1072 + 1074: 20(fvec2) Load 1033(c2D) + 1075: 11(fvec4) ImageGather 1073 1074 1068 + 1076: 11(fvec4) Load 13(outp) + 1077: 11(fvec4) FAdd 1076 1075 + Store 13(outp) 1077 + 1085: 1082 Load 1084(isamp2DA) + 1089: 1078(ivec4) ImageGather 1085 1087 25 ConstOffset 1088 + Store 1080(ioutp) 1089 + 1090: 1082 Load 1084(isamp2DA) + 1091: 1078(ivec4) ImageGather 1090 1087 25 ConstOffset 1088 + 1092: 1078(ivec4) Load 1080(ioutp) + 1093: 1078(ivec4) IAdd 1092 1091 + Store 1080(ioutp) 1093 + 1094: 1082 Load 1084(isamp2DA) + 1095: 23(int) Load 1027(i) + 1096: 24(ivec2) CompositeConstruct 1095 1095 + 1097: 1078(ivec4) ImageGather 1094 1087 1068 Offset 1096 + 1098: 1078(ivec4) Load 1080(ioutp) + 1099: 1078(ivec4) IAdd 1098 1097 + Store 1080(ioutp) 1099 + 1102: 11(fvec4) Load 1101(gl_FragCoord) + 1104: 11(fvec4) Load 1103(vl2) + 1105: 11(fvec4) FAdd 1102 1104 + 1106: 11(fvec4) Load 13(outp) + 1107: 11(fvec4) FAdd 1106 1105 + Store 13(outp) 1107 + 1112: 32(int) Load 1111(u) + 1113: 23(int) Load 1027(i) + 1114: 32(int) Bitcast 1113 + 1115: 32(int) UMod 1112 1114 + Store 1109(uo) 1115 + 1116: 2 FunctionCall 6(foo23() + 1117: 2 FunctionCall 8(doubles() + 1121: 23(int) Load 1120(gl_PrimitiveID) + Store 1119(id) 1121 Return FunctionEnd 6(foo23(): 2 Function None 3 diff --git a/Test/baseResults/spv.400.frag.out b/Test/baseResults/spv.400.frag.out index 2e7b2f59b3..67868859cf 100644 --- a/Test/baseResults/spv.400.frag.out +++ b/Test/baseResults/spv.400.frag.out @@ -2,7 +2,7 @@ spv.400.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 1118 +// Id's are bound by 1122 Capability Shader Capability Geometry @@ -12,7 +12,7 @@ Validation failed 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 + EntryPoint Fragment 4 "main" 13 1027 1033 1038 1054 1080 1101 1103 1109 1111 1120 ExecutionMode 4 OriginUpperLeft Source GLSL 400 SourceExtension "GL_ARB_separate_shader_objects" @@ -43,16 +43,16 @@ Validation failed 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" + Name 1054 "uoutp" + Name 1058 "samp2dr" + Name 1080 "ioutp" + Name 1084 "isamp2DA" + Name 1101 "gl_FragCoord" + Name 1103 "vl2" + Name 1109 "uo" + Name 1111 "u" + Name 1119 "id" + Name 1120 "gl_PrimitiveID" Decorate 13(outp) Location 1 Decorate 17(u2drs) DescriptorSet 0 Decorate 17(u2drs) Binding 3 @@ -62,19 +62,19 @@ Validation failed 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 + Decorate 1054(uoutp) Location 3 + Decorate 1058(samp2dr) DescriptorSet 0 + Decorate 1058(samp2dr) Binding 1 + Decorate 1080(ioutp) Location 2 + Decorate 1084(isamp2DA) DescriptorSet 0 + Decorate 1084(isamp2DA) Binding 2 + Decorate 1101(gl_FragCoord) BuiltIn FragCoord + Decorate 1103(vl2) Location 6 + Decorate 1109(uo) Location 0 + Decorate 1111(u) Flat + Decorate 1111(u) Location 2 + Decorate 1120(gl_PrimitiveID) Flat + Decorate 1120(gl_PrimitiveID) BuiltIn PrimitiveId 2: TypeVoid 3: TypeFunction 2 10: TypeFloat 32 @@ -162,46 +162,46 @@ Validation failed 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 + 1052: TypeVector 32(int) 4 + 1053: TypePointer Output 1052(ivec4) + 1054(uoutp): 1053(ptr) Variable Output + 1055: TypeImage 32(int) Rect sampled format:Unknown + 1056: TypeSampledImage 1055 + 1057: TypePointer UniformConstant 1056 + 1058(samp2dr): 1057(ptr) Variable UniformConstant + 1061: 32(int) Constant 4 + 1062: TypeArray 24(ivec2) 1061 + 1063: 24(ivec2) ConstantComposite 966 970 + 1064: 23(int) Constant 15 + 1065: 23(int) Constant 16 + 1066: 24(ivec2) ConstantComposite 1064 1065 + 1067: 23(int) Constant 4294967294 + 1068: 23(int) Constant 0 + 1069: 24(ivec2) ConstantComposite 1067 1068 + 1070: 1062 ConstantComposite 1063 27 1066 1069 + 1078: TypeVector 23(int) 4 + 1079: TypePointer Output 1078(ivec4) + 1080(ioutp): 1079(ptr) Variable Output + 1081: TypeImage 23(int) 2D array sampled format:Unknown + 1082: TypeSampledImage 1081 + 1083: TypePointer UniformConstant 1082 + 1084(isamp2DA): 1083(ptr) Variable UniformConstant + 1086: 10(float) Constant 1036831949 + 1087: 1043(fvec3) ConstantComposite 1086 1086 1086 + 1088: 24(ivec2) ConstantComposite 966 966 + 1100: TypePointer Input 11(fvec4) +1101(gl_FragCoord): 1100(ptr) Variable Input + 1103(vl2): 1100(ptr) Variable Input + 1108: TypePointer Output 32(int) + 1109(uo): 1108(ptr) Variable Output + 1110: TypePointer Input 32(int) + 1111(u): 1110(ptr) Variable Input + 1118: TypePointer Function 23(int) +1120(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 + 1119(id): 1118(ptr) Variable Function 1028: 23(int) Load 1027(i) 1030: 1029(ptr) AccessChain 1025(arrayedSampler) 1028 1031: 1021 Load 1030 @@ -214,50 +214,56 @@ Validation failed 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 + 1046: 34(ptr) AccessChain 13(outp) 954 + 1047: 10(float) CompositeExtract 1045 0 + Store 1046 1047 + 1048: 34(ptr) AccessChain 13(outp) 958 + 1049: 10(float) CompositeExtract 1045 1 + Store 1048 1049 + 1050: 34(ptr) AccessChain 13(outp) 962 + 1051: 10(float) CompositeExtract 1045 2 + Store 1050 1051 + 1059: 1056 Load 1058(samp2dr) + 1060: 20(fvec2) Load 1033(c2D) + 1071: 1052(ivec4) ImageGather 1059 1060 970 ConstOffsets 1070 + Store 1054(uoutp) 1071 + 1072: 1029(ptr) AccessChain 1025(arrayedSampler) 1068 + 1073: 1021 Load 1072 + 1074: 20(fvec2) Load 1033(c2D) + 1075: 11(fvec4) ImageGather 1073 1074 1068 + 1076: 11(fvec4) Load 13(outp) + 1077: 11(fvec4) FAdd 1076 1075 + Store 13(outp) 1077 + 1085: 1082 Load 1084(isamp2DA) + 1089: 1078(ivec4) ImageGather 1085 1087 25 ConstOffset 1088 + Store 1080(ioutp) 1089 + 1090: 1082 Load 1084(isamp2DA) + 1091: 1078(ivec4) ImageGather 1090 1087 25 ConstOffset 1088 + 1092: 1078(ivec4) Load 1080(ioutp) + 1093: 1078(ivec4) IAdd 1092 1091 + Store 1080(ioutp) 1093 + 1094: 1082 Load 1084(isamp2DA) + 1095: 23(int) Load 1027(i) + 1096: 24(ivec2) CompositeConstruct 1095 1095 + 1097: 1078(ivec4) ImageGather 1094 1087 1068 Offset 1096 + 1098: 1078(ivec4) Load 1080(ioutp) + 1099: 1078(ivec4) IAdd 1098 1097 + Store 1080(ioutp) 1099 + 1102: 11(fvec4) Load 1101(gl_FragCoord) + 1104: 11(fvec4) Load 1103(vl2) + 1105: 11(fvec4) FAdd 1102 1104 + 1106: 11(fvec4) Load 13(outp) + 1107: 11(fvec4) FAdd 1106 1105 + Store 13(outp) 1107 + 1112: 32(int) Load 1111(u) + 1113: 23(int) Load 1027(i) + 1114: 32(int) Bitcast 1113 + 1115: 32(int) UMod 1112 1114 + Store 1109(uo) 1115 + 1116: 2 FunctionCall 6(foo23() + 1117: 2 FunctionCall 8(doubles() + 1121: 23(int) Load 1120(gl_PrimitiveID) + Store 1119(id) 1121 Return FunctionEnd 6(foo23(): 2 Function None 3 diff --git a/Test/baseResults/spv.Operations.frag.out b/Test/baseResults/spv.Operations.frag.out index a856e6e9d1..fc8e241527 100644 --- a/Test/baseResults/spv.Operations.frag.out +++ b/Test/baseResults/spv.Operations.frag.out @@ -1,12 +1,12 @@ spv.Operations.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 583 +// Id's are bound by 591 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 11 22 220 296 314 539 580 + EntryPoint Fragment 4 "main" 11 22 220 296 314 547 588 ExecutionMode 4 OriginUpperLeft Source GLSL 450 Name 4 "main" @@ -26,13 +26,13 @@ spv.Operations.frag Name 324 "lsb" Name 325 "swizzleTemp" Name 326 "ResType" - Name 359 "b" - Name 396 "ub42" - Name 539 "FragColor" - Name 557 "m1" - Name 564 "m2" - Name 580 "uiv4" - Name 582 "ub" + Name 367 "b" + Name 404 "ub42" + Name 547 "FragColor" + Name 565 "m1" + Name 572 "m2" + Name 588 "uiv4" + Name 590 "ub" Decorate 11(uv4) Location 1 Decorate 22(ui) Flat Decorate 22(ui) Location 3 @@ -41,9 +41,9 @@ spv.Operations.frag Decorate 296(uui) Location 5 Decorate 314(uuv4) Flat Decorate 314(uuv4) Location 4 - Decorate 539(FragColor) Location 0 - Decorate 580(uiv4) Flat - Decorate 580(uiv4) Location 0 + Decorate 547(FragColor) Location 0 + Decorate 588(uiv4) Flat + Decorate 588(uiv4) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -74,34 +74,34 @@ spv.Operations.frag 320: TypePointer Function 312(ivec4) 322: TypePointer Function 315(ivec3) 326(ResType): TypeStruct 315(ivec3) 315(ivec3) - 338: 141(int) Constant 1 - 342: 141(int) Constant 2 - 358: TypePointer Function 186(bool) - 396(ub42): 188(ptr) Variable Private - 452: 18(int) Constant 2 - 459: 18(int) Constant 1 - 489: TypeVector 6(float) 3 - 508: 6(float) Constant 1073741824 - 515: 6(float) Constant 1065353216 - 520: 18(int) Constant 66 - 526: 18(int) Constant 17 - 538: TypePointer Output 7(fvec4) - 539(FragColor): 538(ptr) Variable Output - 555: TypeMatrix 7(fvec4) 4 - 556: TypePointer Function 555 - 558: 6(float) Constant 0 - 559: 7(fvec4) ConstantComposite 515 558 558 558 - 560: 7(fvec4) ConstantComposite 558 515 558 558 - 561: 7(fvec4) ConstantComposite 558 558 515 558 - 562: 7(fvec4) ConstantComposite 558 558 558 515 - 563: 555 ConstantComposite 559 560 561 562 - 565: 7(fvec4) ConstantComposite 558 558 558 558 - 566: 555 ConstantComposite 565 565 565 565 - 578: TypeVector 18(int) 4 - 579: TypePointer Input 578(ivec4) - 580(uiv4): 579(ptr) Variable Input - 581: TypePointer Private 186(bool) - 582(ub): 581(ptr) Variable Private + 333: 141(int) Constant 1 + 336: 141(int) Constant 2 + 366: TypePointer Function 186(bool) + 404(ub42): 188(ptr) Variable Private + 460: 18(int) Constant 2 + 467: 18(int) Constant 1 + 497: TypeVector 6(float) 3 + 516: 6(float) Constant 1073741824 + 523: 6(float) Constant 1065353216 + 528: 18(int) Constant 66 + 534: 18(int) Constant 17 + 546: TypePointer Output 7(fvec4) + 547(FragColor): 546(ptr) Variable Output + 563: TypeMatrix 7(fvec4) 4 + 564: TypePointer Function 563 + 566: 6(float) Constant 0 + 567: 7(fvec4) ConstantComposite 523 566 566 566 + 568: 7(fvec4) ConstantComposite 566 523 566 566 + 569: 7(fvec4) ConstantComposite 566 566 523 566 + 570: 7(fvec4) ConstantComposite 566 566 566 523 + 571: 563 ConstantComposite 567 568 569 570 + 573: 7(fvec4) ConstantComposite 566 566 566 566 + 574: 563 ConstantComposite 573 573 573 573 + 586: TypeVector 18(int) 4 + 587: TypePointer Input 586(ivec4) + 588(uiv4): 587(ptr) Variable Input + 589: TypePointer Private 186(bool) + 590(ub): 589(ptr) Variable Private 4(main): 2 Function None 3 5: Label 9(v): 8(ptr) Variable Function @@ -113,11 +113,11 @@ spv.Operations.frag 323(swizzleTemp): 322(ptr) Variable Function 324(lsb): 320(ptr) Variable Function 325(swizzleTemp): 322(ptr) Variable Function - 359(b): 358(ptr) Variable Function - 541: 8(ptr) Variable Function - 557(m1): 556(ptr) Variable Function - 564(m2): 556(ptr) Variable Function - 568: 556(ptr) Variable Function + 367(b): 366(ptr) Variable Function + 549: 8(ptr) Variable Function + 565(m1): 564(ptr) Variable Function + 572(m2): 564(ptr) Variable Function + 576: 564(ptr) Variable Function 12: 7(fvec4) Load 11(uv4) 13: 7(fvec4) ExtInst 1(GLSL.std.450) 11(Radians) 12 Store 9(v) 13 @@ -469,306 +469,318 @@ spv.Operations.frag 329: 315(ivec3) CompositeExtract 327 1 Store 323(swizzleTemp) 329 330: 315(ivec3) Load 323(swizzleTemp) - 331: 312(ivec4) Load 321(msb) - 332: 312(ivec4) VectorShuffle 331 330 4 5 6 3 - Store 321(msb) 332 - 333: 315(ivec3) Load 325(swizzleTemp) - 334: 312(ivec4) Load 324(lsb) - 335: 312(ivec4) VectorShuffle 334 333 4 5 6 3 - Store 324(lsb) 335 - 336: 292(ptr) AccessChain 321(msb) 142 - 337: 141(int) Load 336 - 339: 292(ptr) AccessChain 321(msb) 338 - 340: 141(int) Load 339 - 341: 141(int) IAdd 337 340 - 343: 292(ptr) AccessChain 321(msb) 342 - 344: 141(int) Load 343 - 345: 141(int) IAdd 341 344 - 346: 141(int) Load 293(u) - 347: 141(int) IAdd 346 345 - Store 293(u) 347 - 348: 292(ptr) AccessChain 324(lsb) 142 + 331: 292(ptr) AccessChain 321(msb) 142 + 332: 141(int) CompositeExtract 330 0 + Store 331 332 + 334: 292(ptr) AccessChain 321(msb) 333 + 335: 141(int) CompositeExtract 330 1 + Store 334 335 + 337: 292(ptr) AccessChain 321(msb) 336 + 338: 141(int) CompositeExtract 330 2 + Store 337 338 + 339: 315(ivec3) Load 325(swizzleTemp) + 340: 292(ptr) AccessChain 324(lsb) 142 + 341: 141(int) CompositeExtract 339 0 + Store 340 341 + 342: 292(ptr) AccessChain 324(lsb) 333 + 343: 141(int) CompositeExtract 339 1 + Store 342 343 + 344: 292(ptr) AccessChain 324(lsb) 336 + 345: 141(int) CompositeExtract 339 2 + Store 344 345 + 346: 292(ptr) AccessChain 321(msb) 142 + 347: 141(int) Load 346 + 348: 292(ptr) AccessChain 321(msb) 333 349: 141(int) Load 348 - 350: 292(ptr) AccessChain 324(lsb) 338 - 351: 141(int) Load 350 - 352: 141(int) IAdd 349 351 - 353: 292(ptr) AccessChain 324(lsb) 342 - 354: 141(int) Load 353 - 355: 141(int) IAdd 352 354 - 356: 141(int) Load 293(u) - 357: 141(int) IAdd 356 355 - Store 293(u) 357 - 360: 6(float) Load 220(uf) - 361: 186(bool) IsNan 360 - Store 359(b) 361 - 362: 6(float) Load 196(f) - 363: 186(bool) IsInf 362 - Store 359(b) 363 - 364: 7(fvec4) Load 9(v) - 365: 7(fvec4) Load 11(uv4) - 366: 187(bvec4) FOrdLessThan 364 365 - 367: 186(bool) Any 366 - Store 359(b) 367 - 368: 186(bool) Load 359(b) - SelectionMerge 370 None - BranchConditional 368 369 370 - 369: Label - 371: 7(fvec4) Load 9(v) - 372: 7(fvec4) Load 11(uv4) - 373: 187(bvec4) FOrdLessThanEqual 371 372 - 374: 186(bool) Any 373 - Branch 370 - 370: Label - 375: 186(bool) Phi 368 5 374 369 - Store 359(b) 375 - 376: 186(bool) Load 359(b) + 350: 141(int) IAdd 347 349 + 351: 292(ptr) AccessChain 321(msb) 336 + 352: 141(int) Load 351 + 353: 141(int) IAdd 350 352 + 354: 141(int) Load 293(u) + 355: 141(int) IAdd 354 353 + Store 293(u) 355 + 356: 292(ptr) AccessChain 324(lsb) 142 + 357: 141(int) Load 356 + 358: 292(ptr) AccessChain 324(lsb) 333 + 359: 141(int) Load 358 + 360: 141(int) IAdd 357 359 + 361: 292(ptr) AccessChain 324(lsb) 336 + 362: 141(int) Load 361 + 363: 141(int) IAdd 360 362 + 364: 141(int) Load 293(u) + 365: 141(int) IAdd 364 363 + Store 293(u) 365 + 368: 6(float) Load 220(uf) + 369: 186(bool) IsNan 368 + Store 367(b) 369 + 370: 6(float) Load 196(f) + 371: 186(bool) IsInf 370 + Store 367(b) 371 + 372: 7(fvec4) Load 9(v) + 373: 7(fvec4) Load 11(uv4) + 374: 187(bvec4) FOrdLessThan 372 373 + 375: 186(bool) Any 374 + Store 367(b) 375 + 376: 186(bool) Load 367(b) SelectionMerge 378 None BranchConditional 376 377 378 377: Label 379: 7(fvec4) Load 9(v) 380: 7(fvec4) Load 11(uv4) - 381: 187(bvec4) FOrdGreaterThan 379 380 + 381: 187(bvec4) FOrdLessThanEqual 379 380 382: 186(bool) Any 381 Branch 378 378: Label - 383: 186(bool) Phi 376 370 382 377 - Store 359(b) 383 - 384: 186(bool) Load 359(b) + 383: 186(bool) Phi 376 5 382 377 + Store 367(b) 383 + 384: 186(bool) Load 367(b) SelectionMerge 386 None BranchConditional 384 385 386 385: Label 387: 7(fvec4) Load 9(v) 388: 7(fvec4) Load 11(uv4) - 389: 187(bvec4) FOrdGreaterThanEqual 387 388 + 389: 187(bvec4) FOrdGreaterThan 387 388 390: 186(bool) Any 389 Branch 386 386: Label 391: 186(bool) Phi 384 378 390 385 - Store 359(b) 391 - 392: 186(bool) Load 359(b) + Store 367(b) 391 + 392: 186(bool) Load 367(b) SelectionMerge 394 None BranchConditional 392 393 394 393: Label - 395: 187(bvec4) Load 189(ub41) - 397: 187(bvec4) Load 396(ub42) - 398: 187(bvec4) LogicalEqual 395 397 - 399: 186(bool) Any 398 + 395: 7(fvec4) Load 9(v) + 396: 7(fvec4) Load 11(uv4) + 397: 187(bvec4) FOrdGreaterThanEqual 395 396 + 398: 186(bool) Any 397 Branch 394 394: Label - 400: 186(bool) Phi 392 386 399 393 - Store 359(b) 400 - 401: 186(bool) Load 359(b) - SelectionMerge 403 None - BranchConditional 401 402 403 - 402: Label - 404: 187(bvec4) Load 189(ub41) - 405: 187(bvec4) Load 396(ub42) - 406: 187(bvec4) LogicalNotEqual 404 405 + 399: 186(bool) Phi 392 386 398 393 + Store 367(b) 399 + 400: 186(bool) Load 367(b) + SelectionMerge 402 None + BranchConditional 400 401 402 + 401: Label + 403: 187(bvec4) Load 189(ub41) + 405: 187(bvec4) Load 404(ub42) + 406: 187(bvec4) LogicalEqual 403 405 407: 186(bool) Any 406 - Branch 403 - 403: Label - 408: 186(bool) Phi 401 394 407 402 - Store 359(b) 408 - 409: 186(bool) Load 359(b) - 410: 187(bvec4) Load 189(ub41) - 411: 186(bool) Any 410 - 412: 186(bool) LogicalAnd 409 411 - Store 359(b) 412 - 413: 186(bool) Load 359(b) - 414: 187(bvec4) Load 189(ub41) - 415: 186(bool) All 414 - 416: 186(bool) LogicalAnd 413 415 - Store 359(b) 416 - 417: 186(bool) Load 359(b) - SelectionMerge 419 None - BranchConditional 417 418 419 - 418: Label - 420: 187(bvec4) Load 189(ub41) - 421: 187(bvec4) LogicalNot 420 - 422: 186(bool) Any 421 - Branch 419 - 419: Label - 423: 186(bool) Phi 417 403 422 418 - Store 359(b) 423 - 424: 18(int) Load 20(i) - 425: 18(int) Load 22(ui) - 426: 18(int) IAdd 424 425 - 427: 18(int) Load 20(i) - 428: 18(int) IMul 426 427 - 429: 18(int) Load 22(ui) - 430: 18(int) ISub 428 429 - 431: 18(int) Load 20(i) - 432: 18(int) SDiv 430 431 - Store 20(i) 432 - 433: 18(int) Load 20(i) - 434: 18(int) Load 22(ui) - 435: 18(int) SMod 433 434 - Store 20(i) 435 - 436: 18(int) Load 20(i) + Branch 402 + 402: Label + 408: 186(bool) Phi 400 394 407 401 + Store 367(b) 408 + 409: 186(bool) Load 367(b) + SelectionMerge 411 None + BranchConditional 409 410 411 + 410: Label + 412: 187(bvec4) Load 189(ub41) + 413: 187(bvec4) Load 404(ub42) + 414: 187(bvec4) LogicalNotEqual 412 413 + 415: 186(bool) Any 414 + Branch 411 + 411: Label + 416: 186(bool) Phi 409 402 415 410 + Store 367(b) 416 + 417: 186(bool) Load 367(b) + 418: 187(bvec4) Load 189(ub41) + 419: 186(bool) Any 418 + 420: 186(bool) LogicalAnd 417 419 + Store 367(b) 420 + 421: 186(bool) Load 367(b) + 422: 187(bvec4) Load 189(ub41) + 423: 186(bool) All 422 + 424: 186(bool) LogicalAnd 421 423 + Store 367(b) 424 + 425: 186(bool) Load 367(b) + SelectionMerge 427 None + BranchConditional 425 426 427 + 426: Label + 428: 187(bvec4) Load 189(ub41) + 429: 187(bvec4) LogicalNot 428 + 430: 186(bool) Any 429 + Branch 427 + 427: Label + 431: 186(bool) Phi 425 411 430 426 + Store 367(b) 431 + 432: 18(int) Load 20(i) + 433: 18(int) Load 22(ui) + 434: 18(int) IAdd 432 433 + 435: 18(int) Load 20(i) + 436: 18(int) IMul 434 435 437: 18(int) Load 22(ui) - 438: 186(bool) IEqual 436 437 - 439: 186(bool) LogicalNot 438 - SelectionMerge 441 None - BranchConditional 439 440 441 - 440: Label - 442: 18(int) Load 20(i) - 443: 18(int) Load 22(ui) - 444: 186(bool) INotEqual 442 443 - SelectionMerge 446 None - BranchConditional 444 445 446 - 445: Label - 447: 18(int) Load 20(i) - 448: 18(int) Load 22(ui) - 449: 186(bool) IEqual 447 448 - Branch 446 - 446: Label - 450: 186(bool) Phi 444 440 449 445 - 451: 18(int) Load 20(i) - 453: 186(bool) INotEqual 451 452 - 454: 186(bool) LogicalNotEqual 450 453 - Branch 441 - 441: Label - 455: 186(bool) Phi 438 419 454 446 - SelectionMerge 457 None - BranchConditional 455 456 457 - 456: Label - 458: 18(int) Load 20(i) - 460: 18(int) IAdd 458 459 - Store 20(i) 460 - Branch 457 - 457: Label - 461: 6(float) Load 220(uf) - 462: 6(float) Load 220(uf) - 463: 6(float) FAdd 461 462 - 464: 6(float) Load 220(uf) - 465: 6(float) FMul 463 464 - 466: 6(float) Load 220(uf) - 467: 6(float) FSub 465 466 - 468: 6(float) Load 220(uf) - 469: 6(float) FDiv 467 468 - Store 196(f) 469 - 470: 7(fvec4) Load 9(v) - 471: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 470 - 472: 6(float) Load 196(f) - 473: 6(float) FAdd 472 471 - Store 196(f) 473 - 474: 7(fvec4) Load 9(v) - 475: 7(fvec4) Load 9(v) - 476: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 474 475 - 477: 6(float) Load 196(f) - 478: 6(float) FAdd 477 476 - Store 196(f) 478 - 479: 7(fvec4) Load 9(v) - 480: 7(fvec4) Load 9(v) - 481: 6(float) Dot 479 480 - 482: 6(float) Load 196(f) - 483: 6(float) FAdd 482 481 - Store 196(f) 483 - 484: 6(float) Load 196(f) - 485: 6(float) Load 220(uf) - 486: 6(float) FMul 484 485 - 487: 6(float) Load 196(f) - 488: 6(float) FAdd 487 486 - Store 196(f) 488 - 490: 7(fvec4) Load 9(v) - 491: 489(fvec3) VectorShuffle 490 490 0 1 2 - 492: 7(fvec4) Load 9(v) - 493: 489(fvec3) VectorShuffle 492 492 0 1 2 - 494: 489(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 491 493 - 495: 6(float) CompositeExtract 494 0 - 496: 6(float) Load 196(f) - 497: 6(float) FAdd 496 495 - Store 196(f) 497 - 498: 6(float) Load 196(f) - 499: 6(float) Load 220(uf) - 500: 186(bool) FOrdEqual 498 499 - 501: 186(bool) LogicalNot 500 - SelectionMerge 503 None - BranchConditional 501 502 503 - 502: Label - 504: 6(float) Load 196(f) - 505: 6(float) Load 220(uf) - 506: 186(bool) FUnordNotEqual 504 505 - 507: 6(float) Load 196(f) - 509: 186(bool) FUnordNotEqual 507 508 - 510: 186(bool) LogicalAnd 506 509 - Branch 503 - 503: Label - 511: 186(bool) Phi 500 457 510 502 - SelectionMerge 513 None - BranchConditional 511 512 513 - 512: Label - 514: 6(float) Load 196(f) - 516: 6(float) FAdd 514 515 - Store 196(f) 516 - Branch 513 - 513: Label - 517: 18(int) Load 22(ui) - 518: 18(int) Load 20(i) - 519: 18(int) BitwiseAnd 518 517 - Store 20(i) 519 - 521: 18(int) Load 20(i) - 522: 18(int) BitwiseOr 521 520 - Store 20(i) 522 - 523: 18(int) Load 22(ui) - 524: 18(int) Load 20(i) - 525: 18(int) BitwiseXor 524 523 - Store 20(i) 525 - 527: 18(int) Load 20(i) - 528: 18(int) SMod 527 526 - Store 20(i) 528 + 438: 18(int) ISub 436 437 + 439: 18(int) Load 20(i) + 440: 18(int) SDiv 438 439 + Store 20(i) 440 + 441: 18(int) Load 20(i) + 442: 18(int) Load 22(ui) + 443: 18(int) SMod 441 442 + Store 20(i) 443 + 444: 18(int) Load 20(i) + 445: 18(int) Load 22(ui) + 446: 186(bool) IEqual 444 445 + 447: 186(bool) LogicalNot 446 + SelectionMerge 449 None + BranchConditional 447 448 449 + 448: Label + 450: 18(int) Load 20(i) + 451: 18(int) Load 22(ui) + 452: 186(bool) INotEqual 450 451 + SelectionMerge 454 None + BranchConditional 452 453 454 + 453: Label + 455: 18(int) Load 20(i) + 456: 18(int) Load 22(ui) + 457: 186(bool) IEqual 455 456 + Branch 454 + 454: Label + 458: 186(bool) Phi 452 448 457 453 + 459: 18(int) Load 20(i) + 461: 186(bool) INotEqual 459 460 + 462: 186(bool) LogicalNotEqual 458 461 + Branch 449 + 449: Label + 463: 186(bool) Phi 446 427 462 454 + SelectionMerge 465 None + BranchConditional 463 464 465 + 464: Label + 466: 18(int) Load 20(i) + 468: 18(int) IAdd 466 467 + Store 20(i) 468 + Branch 465 + 465: Label + 469: 6(float) Load 220(uf) + 470: 6(float) Load 220(uf) + 471: 6(float) FAdd 469 470 + 472: 6(float) Load 220(uf) + 473: 6(float) FMul 471 472 + 474: 6(float) Load 220(uf) + 475: 6(float) FSub 473 474 + 476: 6(float) Load 220(uf) + 477: 6(float) FDiv 475 476 + Store 196(f) 477 + 478: 7(fvec4) Load 9(v) + 479: 6(float) ExtInst 1(GLSL.std.450) 66(Length) 478 + 480: 6(float) Load 196(f) + 481: 6(float) FAdd 480 479 + Store 196(f) 481 + 482: 7(fvec4) Load 9(v) + 483: 7(fvec4) Load 9(v) + 484: 6(float) ExtInst 1(GLSL.std.450) 67(Distance) 482 483 + 485: 6(float) Load 196(f) + 486: 6(float) FAdd 485 484 + Store 196(f) 486 + 487: 7(fvec4) Load 9(v) + 488: 7(fvec4) Load 9(v) + 489: 6(float) Dot 487 488 + 490: 6(float) Load 196(f) + 491: 6(float) FAdd 490 489 + Store 196(f) 491 + 492: 6(float) Load 196(f) + 493: 6(float) Load 220(uf) + 494: 6(float) FMul 492 493 + 495: 6(float) Load 196(f) + 496: 6(float) FAdd 495 494 + Store 196(f) 496 + 498: 7(fvec4) Load 9(v) + 499: 497(fvec3) VectorShuffle 498 498 0 1 2 + 500: 7(fvec4) Load 9(v) + 501: 497(fvec3) VectorShuffle 500 500 0 1 2 + 502: 497(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 499 501 + 503: 6(float) CompositeExtract 502 0 + 504: 6(float) Load 196(f) + 505: 6(float) FAdd 504 503 + Store 196(f) 505 + 506: 6(float) Load 196(f) + 507: 6(float) Load 220(uf) + 508: 186(bool) FOrdEqual 506 507 + 509: 186(bool) LogicalNot 508 + SelectionMerge 511 None + BranchConditional 509 510 511 + 510: Label + 512: 6(float) Load 196(f) + 513: 6(float) Load 220(uf) + 514: 186(bool) FUnordNotEqual 512 513 + 515: 6(float) Load 196(f) + 517: 186(bool) FUnordNotEqual 515 516 + 518: 186(bool) LogicalAnd 514 517 + Branch 511 + 511: Label + 519: 186(bool) Phi 508 465 518 510 + SelectionMerge 521 None + BranchConditional 519 520 521 + 520: Label + 522: 6(float) Load 196(f) + 524: 6(float) FAdd 522 523 + Store 196(f) 524 + Branch 521 + 521: Label + 525: 18(int) Load 22(ui) + 526: 18(int) Load 20(i) + 527: 18(int) BitwiseAnd 526 525 + Store 20(i) 527 529: 18(int) Load 20(i) - 530: 18(int) ShiftRightArithmetic 529 452 + 530: 18(int) BitwiseOr 529 528 Store 20(i) 530 531: 18(int) Load 22(ui) 532: 18(int) Load 20(i) - 533: 18(int) ShiftLeftLogical 532 531 + 533: 18(int) BitwiseXor 532 531 Store 20(i) 533 - 534: 18(int) Load 20(i) - 535: 18(int) Not 534 - Store 20(i) 535 - 536: 186(bool) Load 359(b) - 537: 186(bool) LogicalNot 536 - Store 359(b) 537 - 540: 186(bool) Load 359(b) - SelectionMerge 543 None - BranchConditional 540 542 552 - 542: Label - 544: 18(int) Load 20(i) - 545: 6(float) ConvertSToF 544 - 546: 7(fvec4) CompositeConstruct 545 545 545 545 - 547: 6(float) Load 196(f) - 548: 7(fvec4) CompositeConstruct 547 547 547 547 - 549: 7(fvec4) FAdd 546 548 - 550: 7(fvec4) Load 9(v) - 551: 7(fvec4) FAdd 549 550 - Store 541 551 - Branch 543 - 552: Label - 553: 7(fvec4) Load 9(v) - Store 541 553 - Branch 543 - 543: Label - 554: 7(fvec4) Load 541 - Store 539(FragColor) 554 - Store 557(m1) 563 - Store 564(m2) 566 - 567: 186(bool) Load 359(b) - SelectionMerge 570 None - BranchConditional 567 569 572 - 569: Label - 571: 555 Load 557(m1) - Store 568 571 - Branch 570 - 572: Label - 573: 555 Load 564(m2) - Store 568 573 - Branch 570 - 570: Label - 574: 8(ptr) AccessChain 568 459 - 575: 7(fvec4) Load 574 - 576: 7(fvec4) Load 539(FragColor) - 577: 7(fvec4) FAdd 576 575 - Store 539(FragColor) 577 + 535: 18(int) Load 20(i) + 536: 18(int) SMod 535 534 + Store 20(i) 536 + 537: 18(int) Load 20(i) + 538: 18(int) ShiftRightArithmetic 537 460 + Store 20(i) 538 + 539: 18(int) Load 22(ui) + 540: 18(int) Load 20(i) + 541: 18(int) ShiftLeftLogical 540 539 + Store 20(i) 541 + 542: 18(int) Load 20(i) + 543: 18(int) Not 542 + Store 20(i) 543 + 544: 186(bool) Load 367(b) + 545: 186(bool) LogicalNot 544 + Store 367(b) 545 + 548: 186(bool) Load 367(b) + SelectionMerge 551 None + BranchConditional 548 550 560 + 550: Label + 552: 18(int) Load 20(i) + 553: 6(float) ConvertSToF 552 + 554: 7(fvec4) CompositeConstruct 553 553 553 553 + 555: 6(float) Load 196(f) + 556: 7(fvec4) CompositeConstruct 555 555 555 555 + 557: 7(fvec4) FAdd 554 556 + 558: 7(fvec4) Load 9(v) + 559: 7(fvec4) FAdd 557 558 + Store 549 559 + Branch 551 + 560: Label + 561: 7(fvec4) Load 9(v) + Store 549 561 + Branch 551 + 551: Label + 562: 7(fvec4) Load 549 + Store 547(FragColor) 562 + Store 565(m1) 571 + Store 572(m2) 574 + 575: 186(bool) Load 367(b) + SelectionMerge 578 None + BranchConditional 575 577 580 + 577: Label + 579: 563 Load 565(m1) + Store 576 579 + Branch 578 + 580: Label + 581: 563 Load 572(m2) + Store 576 581 + Branch 578 + 578: Label + 582: 8(ptr) AccessChain 576 467 + 583: 7(fvec4) Load 582 + 584: 7(fvec4) Load 547(FragColor) + 585: 7(fvec4) FAdd 584 583 + Store 547(FragColor) 585 Return FunctionEnd diff --git a/Test/baseResults/spv.accessChain.frag.out b/Test/baseResults/spv.accessChain.frag.out index 753688f66d..379131b141 100644 --- a/Test/baseResults/spv.accessChain.frag.out +++ b/Test/baseResults/spv.accessChain.frag.out @@ -1,12 +1,12 @@ spv.accessChain.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 222 +// Id's are bound by 228 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 69 170 + EntryPoint Fragment 4 "main" 69 176 ExecutionMode 4 OriginUpperLeft Source GLSL 420 Name 4 "main" @@ -54,24 +54,24 @@ spv.accessChain.frag Name 64 "i" Name 65 "comp" Name 69 "OutColor" - Name 165 "s" - Name 170 "u" - Name 171 "param" - Name 175 "param" - Name 179 "param" - Name 183 "param" - Name 187 "param" - Name 191 "param" - Name 195 "param" - Name 199 "param" - Name 203 "param" - Name 207 "param" - Name 211 "param" - Name 215 "param" - Name 219 "param" + Name 171 "s" + Name 176 "u" + Name 177 "param" + Name 181 "param" + Name 185 "param" + Name 189 "param" + Name 193 "param" + Name 197 "param" + Name 201 "param" + Name 205 "param" + Name 209 "param" + Name 213 "param" + Name 217 "param" + Name 221 "param" + Name 225 "param" Decorate 69(OutColor) Location 0 - Decorate 170(u) Flat - Decorate 170(u) Location 0 + Decorate 176(u) Flat + Decorate 176(u) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -87,89 +87,89 @@ spv.accessChain.frag 71: TypeInt 32 0 72: 71(int) Constant 0 99: TypeVector 6(float) 2 - 113: 71(int) Constant 2 - 140: TypePointer Output 6(float) - 147: 71(int) Constant 1 - 148: TypeVector 71(int) 2 - 149: 148(ivec2) ConstantComposite 113 147 - 158: TypeVector 71(int) 3 - 159: 158(ivec3) ConstantComposite 113 147 72 - 162: 6(float) Constant 0 - 163: 7(fvec3) ConstantComposite 162 162 162 - 164: TypePointer Function 8(S) - 169: TypePointer Input 13(int) - 170(u): 169(ptr) Variable Input + 111: TypePointer Output 6(float) + 114: 71(int) Constant 1 + 117: 71(int) Constant 2 + 154: TypeVector 71(int) 2 + 155: 154(ivec2) ConstantComposite 117 114 + 164: TypeVector 71(int) 3 + 165: 164(ivec3) ConstantComposite 117 114 72 + 168: 6(float) Constant 0 + 169: 7(fvec3) ConstantComposite 168 168 168 + 170: TypePointer Function 8(S) + 175: TypePointer Input 13(int) + 176(u): 175(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 165(s): 164(ptr) Variable Function - 171(param): 14(ptr) Variable Function - 175(param): 14(ptr) Variable Function - 179(param): 14(ptr) Variable Function - 183(param): 14(ptr) Variable Function - 187(param): 14(ptr) Variable Function - 191(param): 14(ptr) Variable Function - 195(param): 14(ptr) Variable Function - 199(param): 14(ptr) Variable Function - 203(param): 14(ptr) Variable Function - 207(param): 14(ptr) Variable Function - 211(param): 14(ptr) Variable Function - 215(param): 14(ptr) Variable Function - 219(param): 14(ptr) Variable Function - Store 69(OutColor) 163 - 166: 8(S) Load 165(s) - 167: 2 FunctionCall 11(GetColor1(struct-S-vf31;) 166 - 168: 8(S) Load 165(s) - 172: 13(int) Load 170(u) - Store 171(param) 172 - 173: 2 FunctionCall 18(GetColor2(struct-S-vf31;i1;) 168 171(param) - 174: 8(S) Load 165(s) - 176: 13(int) Load 170(u) - Store 175(param) 176 - 177: 2 FunctionCall 22(GetColor3(struct-S-vf31;i1;) 174 175(param) - 178: 8(S) Load 165(s) - 180: 13(int) Load 170(u) - Store 179(param) 180 - 181: 2 FunctionCall 26(GetColor4(struct-S-vf31;i1;) 178 179(param) - 182: 8(S) Load 165(s) - 184: 13(int) Load 170(u) - Store 183(param) 184 - 185: 2 FunctionCall 30(GetColor5(struct-S-vf31;i1;) 182 183(param) - 186: 8(S) Load 165(s) - 188: 13(int) Load 170(u) - Store 187(param) 188 - 189: 2 FunctionCall 34(GetColor6(struct-S-vf31;i1;) 186 187(param) - 190: 8(S) Load 165(s) - 192: 13(int) Load 170(u) - Store 191(param) 192 - 193: 2 FunctionCall 38(GetColor7(struct-S-vf31;i1;) 190 191(param) - 194: 8(S) Load 165(s) - 196: 13(int) Load 170(u) - Store 195(param) 196 - 197: 2 FunctionCall 42(GetColor8(struct-S-vf31;i1;) 194 195(param) - 198: 8(S) Load 165(s) - 200: 13(int) Load 170(u) - Store 199(param) 200 - 201: 2 FunctionCall 46(GetColor9(struct-S-vf31;i1;) 198 199(param) - 202: 8(S) Load 165(s) - 204: 13(int) Load 170(u) - Store 203(param) 204 - 205: 2 FunctionCall 50(GetColor10(struct-S-vf31;i1;) 202 203(param) - 206: 8(S) Load 165(s) - 208: 13(int) Load 170(u) - Store 207(param) 208 - 209: 2 FunctionCall 54(GetColor11(struct-S-vf31;i1;) 206 207(param) - 210: 8(S) Load 165(s) - 212: 13(int) Load 170(u) - Store 211(param) 212 - 213: 2 FunctionCall 58(GetColor12(struct-S-vf31;i1;) 210 211(param) - 214: 8(S) Load 165(s) - 216: 13(int) Load 170(u) - Store 215(param) 216 - 217: 2 FunctionCall 62(GetColor13(struct-S-vf31;i1;) 214 215(param) - 218: 8(S) Load 165(s) - 220: 13(int) Load 170(u) - Store 219(param) 220 - 221: 2 FunctionCall 66(GetColor14(struct-S-vf31;i1;) 218 219(param) + 171(s): 170(ptr) Variable Function + 177(param): 14(ptr) Variable Function + 181(param): 14(ptr) Variable Function + 185(param): 14(ptr) Variable Function + 189(param): 14(ptr) Variable Function + 193(param): 14(ptr) Variable Function + 197(param): 14(ptr) Variable Function + 201(param): 14(ptr) Variable Function + 205(param): 14(ptr) Variable Function + 209(param): 14(ptr) Variable Function + 213(param): 14(ptr) Variable Function + 217(param): 14(ptr) Variable Function + 221(param): 14(ptr) Variable Function + 225(param): 14(ptr) Variable Function + Store 69(OutColor) 169 + 172: 8(S) Load 171(s) + 173: 2 FunctionCall 11(GetColor1(struct-S-vf31;) 172 + 174: 8(S) Load 171(s) + 178: 13(int) Load 176(u) + Store 177(param) 178 + 179: 2 FunctionCall 18(GetColor2(struct-S-vf31;i1;) 174 177(param) + 180: 8(S) Load 171(s) + 182: 13(int) Load 176(u) + Store 181(param) 182 + 183: 2 FunctionCall 22(GetColor3(struct-S-vf31;i1;) 180 181(param) + 184: 8(S) Load 171(s) + 186: 13(int) Load 176(u) + Store 185(param) 186 + 187: 2 FunctionCall 26(GetColor4(struct-S-vf31;i1;) 184 185(param) + 188: 8(S) Load 171(s) + 190: 13(int) Load 176(u) + Store 189(param) 190 + 191: 2 FunctionCall 30(GetColor5(struct-S-vf31;i1;) 188 189(param) + 192: 8(S) Load 171(s) + 194: 13(int) Load 176(u) + Store 193(param) 194 + 195: 2 FunctionCall 34(GetColor6(struct-S-vf31;i1;) 192 193(param) + 196: 8(S) Load 171(s) + 198: 13(int) Load 176(u) + Store 197(param) 198 + 199: 2 FunctionCall 38(GetColor7(struct-S-vf31;i1;) 196 197(param) + 200: 8(S) Load 171(s) + 202: 13(int) Load 176(u) + Store 201(param) 202 + 203: 2 FunctionCall 42(GetColor8(struct-S-vf31;i1;) 200 201(param) + 204: 8(S) Load 171(s) + 206: 13(int) Load 176(u) + Store 205(param) 206 + 207: 2 FunctionCall 46(GetColor9(struct-S-vf31;i1;) 204 205(param) + 208: 8(S) Load 171(s) + 210: 13(int) Load 176(u) + Store 209(param) 210 + 211: 2 FunctionCall 50(GetColor10(struct-S-vf31;i1;) 208 209(param) + 212: 8(S) Load 171(s) + 214: 13(int) Load 176(u) + Store 213(param) 214 + 215: 2 FunctionCall 54(GetColor11(struct-S-vf31;i1;) 212 213(param) + 216: 8(S) Load 171(s) + 218: 13(int) Load 176(u) + Store 217(param) 218 + 219: 2 FunctionCall 58(GetColor12(struct-S-vf31;i1;) 216 217(param) + 220: 8(S) Load 171(s) + 222: 13(int) Load 176(u) + Store 221(param) 222 + 223: 2 FunctionCall 62(GetColor13(struct-S-vf31;i1;) 220 221(param) + 224: 8(S) Load 171(s) + 226: 13(int) Load 176(u) + Store 225(param) 226 + 227: 2 FunctionCall 66(GetColor14(struct-S-vf31;i1;) 224 225(param) Return FunctionEnd 11(GetColor1(struct-S-vf31;): 2 Function None 9 @@ -254,99 +254,108 @@ spv.accessChain.frag 108: 7(fvec3) Load 69(OutColor) 109: 99(fvec2) VectorShuffle 108 108 0 1 110: 99(fvec2) FAdd 109 107 - 111: 7(fvec3) Load 69(OutColor) - 112: 7(fvec3) VectorShuffle 111 110 3 4 2 - Store 69(OutColor) 112 + 112: 111(ptr) AccessChain 69(OutColor) 72 + 113: 6(float) CompositeExtract 110 0 + Store 112 113 + 115: 111(ptr) AccessChain 69(OutColor) 114 + 116: 6(float) CompositeExtract 110 1 + Store 115 116 Return FunctionEnd 42(GetColor8(struct-S-vf31;i1;): 2 Function None 15 40(i): 8(S) FunctionParameter 41(comp): 14(ptr) FunctionParameter 43: Label - 114: 6(float) CompositeExtract 40(i) 0 2 - 115: 7(fvec3) Load 69(OutColor) - 116: 7(fvec3) CompositeConstruct 114 114 114 - 117: 7(fvec3) FAdd 115 116 - Store 69(OutColor) 117 + 118: 6(float) CompositeExtract 40(i) 0 2 + 119: 7(fvec3) Load 69(OutColor) + 120: 7(fvec3) CompositeConstruct 118 118 118 + 121: 7(fvec3) FAdd 119 120 + Store 69(OutColor) 121 Return FunctionEnd 46(GetColor9(struct-S-vf31;i1;): 2 Function None 15 44(i): 8(S) FunctionParameter 45(comp): 14(ptr) FunctionParameter 47: Label - 118: 7(fvec3) CompositeExtract 44(i) 0 - 119: 7(fvec3) Load 69(OutColor) - 120: 7(fvec3) VectorShuffle 119 119 2 0 1 - 121: 7(fvec3) FAdd 120 118 - 122: 7(fvec3) Load 69(OutColor) - 123: 7(fvec3) VectorShuffle 122 121 4 5 3 - Store 69(OutColor) 123 + 122: 7(fvec3) CompositeExtract 44(i) 0 + 123: 7(fvec3) Load 69(OutColor) + 124: 7(fvec3) VectorShuffle 123 123 2 0 1 + 125: 7(fvec3) FAdd 124 122 + 126: 7(fvec3) Load 69(OutColor) + 127: 7(fvec3) VectorShuffle 126 125 4 5 3 + Store 69(OutColor) 127 Return FunctionEnd 50(GetColor10(struct-S-vf31;i1;): 2 Function None 15 48(i): 8(S) FunctionParameter 49(comp): 14(ptr) FunctionParameter 51: Label - 124: 7(fvec3) CompositeExtract 48(i) 0 - 125: 99(fvec2) VectorShuffle 124 124 0 1 - 126: 7(fvec3) Load 69(OutColor) - 127: 99(fvec2) VectorShuffle 126 126 2 1 - 128: 99(fvec2) FAdd 127 125 - 129: 7(fvec3) Load 69(OutColor) - 130: 7(fvec3) VectorShuffle 129 128 0 4 3 - Store 69(OutColor) 130 + 128: 7(fvec3) CompositeExtract 48(i) 0 + 129: 99(fvec2) VectorShuffle 128 128 0 1 + 130: 7(fvec3) Load 69(OutColor) + 131: 99(fvec2) VectorShuffle 130 130 2 1 + 132: 99(fvec2) FAdd 131 129 + 133: 111(ptr) AccessChain 69(OutColor) 117 + 134: 6(float) CompositeExtract 132 0 + Store 133 134 + 135: 111(ptr) AccessChain 69(OutColor) 114 + 136: 6(float) CompositeExtract 132 1 + Store 135 136 Return FunctionEnd 54(GetColor11(struct-S-vf31;i1;): 2 Function None 15 52(i): 8(S) FunctionParameter 53(comp): 14(ptr) FunctionParameter 55: Label - 131: 7(fvec3) CompositeExtract 52(i) 0 - 132: 99(fvec2) VectorShuffle 131 131 0 1 - 133: 7(fvec3) Load 69(OutColor) - 134: 99(fvec2) VectorShuffle 133 133 0 2 - 135: 99(fvec2) FAdd 134 132 - 136: 7(fvec3) Load 69(OutColor) - 137: 7(fvec3) VectorShuffle 136 135 3 1 4 - Store 69(OutColor) 137 + 137: 7(fvec3) CompositeExtract 52(i) 0 + 138: 99(fvec2) VectorShuffle 137 137 0 1 + 139: 7(fvec3) Load 69(OutColor) + 140: 99(fvec2) VectorShuffle 139 139 0 2 + 141: 99(fvec2) FAdd 140 138 + 142: 111(ptr) AccessChain 69(OutColor) 72 + 143: 6(float) CompositeExtract 141 0 + Store 142 143 + 144: 111(ptr) AccessChain 69(OutColor) 117 + 145: 6(float) CompositeExtract 141 1 + Store 144 145 Return FunctionEnd 58(GetColor12(struct-S-vf31;i1;): 2 Function None 15 56(i): 8(S) FunctionParameter 57(comp): 14(ptr) FunctionParameter 59: Label - 138: 13(int) Load 57(comp) - 139: 6(float) CompositeExtract 56(i) 0 0 - 141: 140(ptr) AccessChain 69(OutColor) 138 - 142: 6(float) Load 141 - 143: 6(float) FAdd 142 139 - 144: 140(ptr) AccessChain 69(OutColor) 138 - Store 144 143 + 146: 13(int) Load 57(comp) + 147: 6(float) CompositeExtract 56(i) 0 0 + 148: 111(ptr) AccessChain 69(OutColor) 146 + 149: 6(float) Load 148 + 150: 6(float) FAdd 149 147 + 151: 111(ptr) AccessChain 69(OutColor) 146 + Store 151 150 Return FunctionEnd 62(GetColor13(struct-S-vf31;i1;): 2 Function None 15 60(i): 8(S) FunctionParameter 61(comp): 14(ptr) FunctionParameter 63: Label - 145: 13(int) Load 61(comp) - 146: 6(float) CompositeExtract 60(i) 0 0 - 150: 71(int) VectorExtractDynamic 149 145 - 151: 140(ptr) AccessChain 69(OutColor) 150 - 152: 6(float) Load 151 - 153: 6(float) FAdd 152 146 - 154: 71(int) VectorExtractDynamic 149 145 - 155: 140(ptr) AccessChain 69(OutColor) 154 - Store 155 153 + 152: 13(int) Load 61(comp) + 153: 6(float) CompositeExtract 60(i) 0 0 + 156: 71(int) VectorExtractDynamic 155 152 + 157: 111(ptr) AccessChain 69(OutColor) 156 + 158: 6(float) Load 157 + 159: 6(float) FAdd 158 153 + 160: 71(int) VectorExtractDynamic 155 152 + 161: 111(ptr) AccessChain 69(OutColor) 160 + Store 161 159 Return FunctionEnd 66(GetColor14(struct-S-vf31;i1;): 2 Function None 15 64(i): 8(S) FunctionParameter 65(comp): 14(ptr) FunctionParameter 67: Label - 156: 13(int) Load 65(comp) - 157: 6(float) CompositeExtract 64(i) 0 0 - 160: 71(int) VectorExtractDynamic 159 156 - 161: 140(ptr) AccessChain 69(OutColor) 160 - Store 161 157 + 162: 13(int) Load 65(comp) + 163: 6(float) CompositeExtract 64(i) 0 0 + 166: 71(int) VectorExtractDynamic 165 162 + 167: 111(ptr) AccessChain 69(OutColor) 166 + Store 167 163 Return FunctionEnd diff --git a/Test/baseResults/spv.bitCast.frag.out b/Test/baseResults/spv.bitCast.frag.out index daf7b1d03c..88b2a09f69 100644 --- a/Test/baseResults/spv.bitCast.frag.out +++ b/Test/baseResults/spv.bitCast.frag.out @@ -1,52 +1,52 @@ spv.bitCast.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 172 +// Id's are bound by 198 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 14 26 37 48 89 98 107 116 122 130 139 148 154 + EntryPoint Fragment 4 "main" 14 26 40 56 103 112 123 136 142 150 161 174 180 ExecutionMode 4 OriginUpperLeft Source GLSL 450 Name 4 "main" Name 9 "idata" Name 14 "f1" Name 26 "f2" - Name 37 "f3" - Name 48 "f4" - Name 55 "udata" - Name 85 "fdata" - Name 89 "i1" - Name 98 "i2" - Name 107 "i3" - Name 116 "i4" - Name 122 "u1" - Name 130 "u2" - Name 139 "u3" - Name 148 "u4" - Name 154 "fragColor" + Name 40 "f3" + Name 56 "f4" + Name 63 "udata" + Name 99 "fdata" + Name 103 "i1" + Name 112 "i2" + Name 123 "i3" + Name 136 "i4" + Name 142 "u1" + Name 150 "u2" + Name 161 "u3" + Name 174 "u4" + Name 180 "fragColor" Decorate 14(f1) Location 8 Decorate 26(f2) Location 9 - Decorate 37(f3) Location 10 - Decorate 48(f4) Location 11 - Decorate 89(i1) Flat - Decorate 89(i1) Location 0 - Decorate 98(i2) Flat - Decorate 98(i2) Location 1 - Decorate 107(i3) Flat - Decorate 107(i3) Location 2 - Decorate 116(i4) Flat - Decorate 116(i4) Location 3 - Decorate 122(u1) Flat - Decorate 122(u1) Location 4 - Decorate 130(u2) Flat - Decorate 130(u2) Location 5 - Decorate 139(u3) Flat - Decorate 139(u3) Location 6 - Decorate 148(u4) Flat - Decorate 148(u4) Location 7 - Decorate 154(fragColor) Location 0 + Decorate 40(f3) Location 10 + Decorate 56(f4) Location 11 + Decorate 103(i1) Flat + Decorate 103(i1) Location 0 + Decorate 112(i2) Flat + Decorate 112(i2) Location 1 + Decorate 123(i3) Flat + Decorate 123(i3) Location 2 + Decorate 136(i4) Flat + Decorate 136(i4) Location 3 + Decorate 142(u1) Flat + Decorate 142(u1) Location 4 + Decorate 150(u2) Flat + Decorate 150(u2) Location 5 + Decorate 161(u3) Flat + Decorate 161(u3) Location 6 + Decorate 174(u4) Flat + Decorate 174(u4) Location 7 + Decorate 180(fragColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -64,51 +64,53 @@ spv.bitCast.frag 25: TypePointer Input 24(fvec2) 26(f2): 25(ptr) Variable Input 28: TypeVector 6(int) 2 - 35: TypeVector 12(float) 3 - 36: TypePointer Input 35(fvec3) - 37(f3): 36(ptr) Variable Input - 39: TypeVector 6(int) 3 - 46: TypeVector 12(float) 4 - 47: TypePointer Input 46(fvec4) - 48(f4): 47(ptr) Variable Input - 53: TypeVector 17(int) 4 - 54: TypePointer Function 53(ivec4) - 56: 53(ivec4) ConstantComposite 18 18 18 18 - 59: TypePointer Function 17(int) - 65: TypeVector 17(int) 2 - 73: TypeVector 17(int) 3 - 84: TypePointer Function 46(fvec4) - 86: 12(float) Constant 0 - 87: 46(fvec4) ConstantComposite 86 86 86 86 - 88: TypePointer Input 6(int) - 89(i1): 88(ptr) Variable Input - 92: TypePointer Function 12(float) - 97: TypePointer Input 28(ivec2) - 98(i2): 97(ptr) Variable Input - 106: TypePointer Input 39(ivec3) - 107(i3): 106(ptr) Variable Input - 115: TypePointer Input 7(ivec4) - 116(i4): 115(ptr) Variable Input - 121: TypePointer Input 17(int) - 122(u1): 121(ptr) Variable Input - 129: TypePointer Input 65(ivec2) - 130(u2): 129(ptr) Variable Input - 138: TypePointer Input 73(ivec3) - 139(u3): 138(ptr) Variable Input - 147: TypePointer Input 53(ivec4) - 148(u4): 147(ptr) Variable Input - 153: TypePointer Output 46(fvec4) - 154(fragColor): 153(ptr) Variable Output - 158: TypeBool - 159: TypeVector 158(bool) 4 - 168: 12(float) Constant 1045220557 - 169: 46(fvec4) ConstantComposite 168 168 168 168 + 35: 17(int) Constant 1 + 38: TypeVector 12(float) 3 + 39: TypePointer Input 38(fvec3) + 40(f3): 39(ptr) Variable Input + 42: TypeVector 6(int) 3 + 51: 17(int) Constant 2 + 54: TypeVector 12(float) 4 + 55: TypePointer Input 54(fvec4) + 56(f4): 55(ptr) Variable Input + 61: TypeVector 17(int) 4 + 62: TypePointer Function 61(ivec4) + 64: 61(ivec4) ConstantComposite 18 18 18 18 + 67: TypePointer Function 17(int) + 73: TypeVector 17(int) 2 + 83: TypeVector 17(int) 3 + 98: TypePointer Function 54(fvec4) + 100: 12(float) Constant 0 + 101: 54(fvec4) ConstantComposite 100 100 100 100 + 102: TypePointer Input 6(int) + 103(i1): 102(ptr) Variable Input + 106: TypePointer Function 12(float) + 111: TypePointer Input 28(ivec2) + 112(i2): 111(ptr) Variable Input + 122: TypePointer Input 42(ivec3) + 123(i3): 122(ptr) Variable Input + 135: TypePointer Input 7(ivec4) + 136(i4): 135(ptr) Variable Input + 141: TypePointer Input 17(int) + 142(u1): 141(ptr) Variable Input + 149: TypePointer Input 73(ivec2) + 150(u2): 149(ptr) Variable Input + 160: TypePointer Input 83(ivec3) + 161(u3): 160(ptr) Variable Input + 173: TypePointer Input 61(ivec4) + 174(u4): 173(ptr) Variable Input + 179: TypePointer Output 54(fvec4) + 180(fragColor): 179(ptr) Variable Output + 184: TypeBool + 185: TypeVector 184(bool) 4 + 194: 12(float) Constant 1045220557 + 195: 54(fvec4) ConstantComposite 194 194 194 194 4(main): 2 Function None 3 5: Label 9(idata): 8(ptr) Variable Function - 55(udata): 54(ptr) Variable Function - 85(fdata): 84(ptr) Variable Function - 162: 84(ptr) Variable Function + 63(udata): 62(ptr) Variable Function + 99(fdata): 98(ptr) Variable Function + 188: 98(ptr) Variable Function Store 9(idata) 11 15: 12(float) Load 14(f1) 16: 6(int) Bitcast 15 @@ -122,126 +124,162 @@ spv.bitCast.frag 30: 7(ivec4) Load 9(idata) 31: 28(ivec2) VectorShuffle 30 30 0 1 32: 28(ivec2) IAdd 31 29 - 33: 7(ivec4) Load 9(idata) - 34: 7(ivec4) VectorShuffle 33 32 4 5 2 3 - Store 9(idata) 34 - 38: 35(fvec3) Load 37(f3) - 40: 39(ivec3) Bitcast 38 - 41: 7(ivec4) Load 9(idata) - 42: 39(ivec3) VectorShuffle 41 41 0 1 2 - 43: 39(ivec3) IAdd 42 40 + 33: 19(ptr) AccessChain 9(idata) 18 + 34: 6(int) CompositeExtract 32 0 + Store 33 34 + 36: 19(ptr) AccessChain 9(idata) 35 + 37: 6(int) CompositeExtract 32 1 + Store 36 37 + 41: 38(fvec3) Load 40(f3) + 43: 42(ivec3) Bitcast 41 44: 7(ivec4) Load 9(idata) - 45: 7(ivec4) VectorShuffle 44 43 4 5 6 3 - Store 9(idata) 45 - 49: 46(fvec4) Load 48(f4) - 50: 7(ivec4) Bitcast 49 - 51: 7(ivec4) Load 9(idata) - 52: 7(ivec4) IAdd 51 50 - Store 9(idata) 52 - Store 55(udata) 56 - 57: 12(float) Load 14(f1) - 58: 17(int) Bitcast 57 - 60: 59(ptr) AccessChain 55(udata) 18 - 61: 17(int) Load 60 - 62: 17(int) IAdd 61 58 - 63: 59(ptr) AccessChain 55(udata) 18 - Store 63 62 - 64: 24(fvec2) Load 26(f2) - 66: 65(ivec2) Bitcast 64 - 67: 53(ivec4) Load 55(udata) - 68: 65(ivec2) VectorShuffle 67 67 0 1 - 69: 65(ivec2) IAdd 68 66 - 70: 53(ivec4) Load 55(udata) - 71: 53(ivec4) VectorShuffle 70 69 4 5 2 3 - Store 55(udata) 71 - 72: 35(fvec3) Load 37(f3) - 74: 73(ivec3) Bitcast 72 - 75: 53(ivec4) Load 55(udata) - 76: 73(ivec3) VectorShuffle 75 75 0 1 2 - 77: 73(ivec3) IAdd 76 74 - 78: 53(ivec4) Load 55(udata) - 79: 53(ivec4) VectorShuffle 78 77 4 5 6 3 - Store 55(udata) 79 - 80: 46(fvec4) Load 48(f4) - 81: 53(ivec4) Bitcast 80 - 82: 53(ivec4) Load 55(udata) - 83: 53(ivec4) IAdd 82 81 - Store 55(udata) 83 - Store 85(fdata) 87 - 90: 6(int) Load 89(i1) - 91: 12(float) Bitcast 90 - 93: 92(ptr) AccessChain 85(fdata) 18 - 94: 12(float) Load 93 - 95: 12(float) FAdd 94 91 - 96: 92(ptr) AccessChain 85(fdata) 18 - Store 96 95 - 99: 28(ivec2) Load 98(i2) - 100: 24(fvec2) Bitcast 99 - 101: 46(fvec4) Load 85(fdata) - 102: 24(fvec2) VectorShuffle 101 101 0 1 - 103: 24(fvec2) FAdd 102 100 - 104: 46(fvec4) Load 85(fdata) - 105: 46(fvec4) VectorShuffle 104 103 4 5 2 3 - Store 85(fdata) 105 - 108: 39(ivec3) Load 107(i3) - 109: 35(fvec3) Bitcast 108 - 110: 46(fvec4) Load 85(fdata) - 111: 35(fvec3) VectorShuffle 110 110 0 1 2 - 112: 35(fvec3) FAdd 111 109 - 113: 46(fvec4) Load 85(fdata) - 114: 46(fvec4) VectorShuffle 113 112 4 5 6 3 - Store 85(fdata) 114 - 117: 7(ivec4) Load 116(i4) - 118: 46(fvec4) Bitcast 117 - 119: 46(fvec4) Load 85(fdata) - 120: 46(fvec4) FAdd 119 118 - Store 85(fdata) 120 - 123: 17(int) Load 122(u1) - 124: 12(float) Bitcast 123 - 125: 92(ptr) AccessChain 85(fdata) 18 - 126: 12(float) Load 125 - 127: 12(float) FAdd 126 124 - 128: 92(ptr) AccessChain 85(fdata) 18 - Store 128 127 - 131: 65(ivec2) Load 130(u2) - 132: 24(fvec2) Bitcast 131 - 133: 46(fvec4) Load 85(fdata) - 134: 24(fvec2) VectorShuffle 133 133 0 1 - 135: 24(fvec2) FAdd 134 132 - 136: 46(fvec4) Load 85(fdata) - 137: 46(fvec4) VectorShuffle 136 135 4 5 2 3 - Store 85(fdata) 137 - 140: 73(ivec3) Load 139(u3) - 141: 35(fvec3) Bitcast 140 - 142: 46(fvec4) Load 85(fdata) - 143: 35(fvec3) VectorShuffle 142 142 0 1 2 - 144: 35(fvec3) FAdd 143 141 - 145: 46(fvec4) Load 85(fdata) - 146: 46(fvec4) VectorShuffle 145 144 4 5 6 3 - Store 85(fdata) 146 - 149: 53(ivec4) Load 148(u4) - 150: 46(fvec4) Bitcast 149 - 151: 46(fvec4) Load 85(fdata) - 152: 46(fvec4) FAdd 151 150 - Store 85(fdata) 152 - 155: 7(ivec4) Load 9(idata) - 156: 53(ivec4) Bitcast 155 - 157: 53(ivec4) Load 55(udata) - 160: 159(bvec4) IEqual 156 157 - 161: 158(bool) All 160 - SelectionMerge 164 None - BranchConditional 161 163 166 - 163: Label - 165: 46(fvec4) Load 85(fdata) - Store 162 165 - Branch 164 - 166: Label - 167: 46(fvec4) Load 85(fdata) - 170: 46(fvec4) FAdd 167 169 - Store 162 170 - Branch 164 - 164: Label - 171: 46(fvec4) Load 162 - Store 154(fragColor) 171 + 45: 42(ivec3) VectorShuffle 44 44 0 1 2 + 46: 42(ivec3) IAdd 45 43 + 47: 19(ptr) AccessChain 9(idata) 18 + 48: 6(int) CompositeExtract 46 0 + Store 47 48 + 49: 19(ptr) AccessChain 9(idata) 35 + 50: 6(int) CompositeExtract 46 1 + Store 49 50 + 52: 19(ptr) AccessChain 9(idata) 51 + 53: 6(int) CompositeExtract 46 2 + Store 52 53 + 57: 54(fvec4) Load 56(f4) + 58: 7(ivec4) Bitcast 57 + 59: 7(ivec4) Load 9(idata) + 60: 7(ivec4) IAdd 59 58 + Store 9(idata) 60 + Store 63(udata) 64 + 65: 12(float) Load 14(f1) + 66: 17(int) Bitcast 65 + 68: 67(ptr) AccessChain 63(udata) 18 + 69: 17(int) Load 68 + 70: 17(int) IAdd 69 66 + 71: 67(ptr) AccessChain 63(udata) 18 + Store 71 70 + 72: 24(fvec2) Load 26(f2) + 74: 73(ivec2) Bitcast 72 + 75: 61(ivec4) Load 63(udata) + 76: 73(ivec2) VectorShuffle 75 75 0 1 + 77: 73(ivec2) IAdd 76 74 + 78: 67(ptr) AccessChain 63(udata) 18 + 79: 17(int) CompositeExtract 77 0 + Store 78 79 + 80: 67(ptr) AccessChain 63(udata) 35 + 81: 17(int) CompositeExtract 77 1 + Store 80 81 + 82: 38(fvec3) Load 40(f3) + 84: 83(ivec3) Bitcast 82 + 85: 61(ivec4) Load 63(udata) + 86: 83(ivec3) VectorShuffle 85 85 0 1 2 + 87: 83(ivec3) IAdd 86 84 + 88: 67(ptr) AccessChain 63(udata) 18 + 89: 17(int) CompositeExtract 87 0 + Store 88 89 + 90: 67(ptr) AccessChain 63(udata) 35 + 91: 17(int) CompositeExtract 87 1 + Store 90 91 + 92: 67(ptr) AccessChain 63(udata) 51 + 93: 17(int) CompositeExtract 87 2 + Store 92 93 + 94: 54(fvec4) Load 56(f4) + 95: 61(ivec4) Bitcast 94 + 96: 61(ivec4) Load 63(udata) + 97: 61(ivec4) IAdd 96 95 + Store 63(udata) 97 + Store 99(fdata) 101 + 104: 6(int) Load 103(i1) + 105: 12(float) Bitcast 104 + 107: 106(ptr) AccessChain 99(fdata) 18 + 108: 12(float) Load 107 + 109: 12(float) FAdd 108 105 + 110: 106(ptr) AccessChain 99(fdata) 18 + Store 110 109 + 113: 28(ivec2) Load 112(i2) + 114: 24(fvec2) Bitcast 113 + 115: 54(fvec4) Load 99(fdata) + 116: 24(fvec2) VectorShuffle 115 115 0 1 + 117: 24(fvec2) FAdd 116 114 + 118: 106(ptr) AccessChain 99(fdata) 18 + 119: 12(float) CompositeExtract 117 0 + Store 118 119 + 120: 106(ptr) AccessChain 99(fdata) 35 + 121: 12(float) CompositeExtract 117 1 + Store 120 121 + 124: 42(ivec3) Load 123(i3) + 125: 38(fvec3) Bitcast 124 + 126: 54(fvec4) Load 99(fdata) + 127: 38(fvec3) VectorShuffle 126 126 0 1 2 + 128: 38(fvec3) FAdd 127 125 + 129: 106(ptr) AccessChain 99(fdata) 18 + 130: 12(float) CompositeExtract 128 0 + Store 129 130 + 131: 106(ptr) AccessChain 99(fdata) 35 + 132: 12(float) CompositeExtract 128 1 + Store 131 132 + 133: 106(ptr) AccessChain 99(fdata) 51 + 134: 12(float) CompositeExtract 128 2 + Store 133 134 + 137: 7(ivec4) Load 136(i4) + 138: 54(fvec4) Bitcast 137 + 139: 54(fvec4) Load 99(fdata) + 140: 54(fvec4) FAdd 139 138 + Store 99(fdata) 140 + 143: 17(int) Load 142(u1) + 144: 12(float) Bitcast 143 + 145: 106(ptr) AccessChain 99(fdata) 18 + 146: 12(float) Load 145 + 147: 12(float) FAdd 146 144 + 148: 106(ptr) AccessChain 99(fdata) 18 + Store 148 147 + 151: 73(ivec2) Load 150(u2) + 152: 24(fvec2) Bitcast 151 + 153: 54(fvec4) Load 99(fdata) + 154: 24(fvec2) VectorShuffle 153 153 0 1 + 155: 24(fvec2) FAdd 154 152 + 156: 106(ptr) AccessChain 99(fdata) 18 + 157: 12(float) CompositeExtract 155 0 + Store 156 157 + 158: 106(ptr) AccessChain 99(fdata) 35 + 159: 12(float) CompositeExtract 155 1 + Store 158 159 + 162: 83(ivec3) Load 161(u3) + 163: 38(fvec3) Bitcast 162 + 164: 54(fvec4) Load 99(fdata) + 165: 38(fvec3) VectorShuffle 164 164 0 1 2 + 166: 38(fvec3) FAdd 165 163 + 167: 106(ptr) AccessChain 99(fdata) 18 + 168: 12(float) CompositeExtract 166 0 + Store 167 168 + 169: 106(ptr) AccessChain 99(fdata) 35 + 170: 12(float) CompositeExtract 166 1 + Store 169 170 + 171: 106(ptr) AccessChain 99(fdata) 51 + 172: 12(float) CompositeExtract 166 2 + Store 171 172 + 175: 61(ivec4) Load 174(u4) + 176: 54(fvec4) Bitcast 175 + 177: 54(fvec4) Load 99(fdata) + 178: 54(fvec4) FAdd 177 176 + Store 99(fdata) 178 + 181: 7(ivec4) Load 9(idata) + 182: 61(ivec4) Bitcast 181 + 183: 61(ivec4) Load 63(udata) + 186: 185(bvec4) IEqual 182 183 + 187: 184(bool) All 186 + SelectionMerge 190 None + BranchConditional 187 189 192 + 189: Label + 191: 54(fvec4) Load 99(fdata) + Store 188 191 + Branch 190 + 192: Label + 193: 54(fvec4) Load 99(fdata) + 196: 54(fvec4) FAdd 193 195 + Store 188 196 + Branch 190 + 190: Label + 197: 54(fvec4) Load 188 + Store 180(fragColor) 197 Return FunctionEnd diff --git a/Test/baseResults/spv.float16.frag.out b/Test/baseResults/spv.float16.frag.out index dd677b4796..8c33a66724 100644 --- a/Test/baseResults/spv.float16.frag.out +++ b/Test/baseResults/spv.float16.frag.out @@ -2,7 +2,7 @@ spv.float16.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 534 +// Id's are bound by 542 Capability Shader Capability Float16 @@ -80,87 +80,87 @@ Validation failed Name 445 "f16v2" Name 463 "f16v" Name 465 "if16v" - Name 514 "S" - MemberName 514(S) 0 "x" - MemberName 514(S) 1 "y" - MemberName 514(S) 2 "z" - Name 516 "B1" - MemberName 516(B1) 0 "a" - MemberName 516(B1) 1 "b" - MemberName 516(B1) 2 "c" - MemberName 516(B1) 3 "d" - MemberName 516(B1) 4 "e" - MemberName 516(B1) 5 "f" - MemberName 516(B1) 6 "g" - MemberName 516(B1) 7 "h" - Name 518 "" - Name 521 "S" - MemberName 521(S) 0 "x" - MemberName 521(S) 1 "y" - MemberName 521(S) 2 "z" - Name 523 "B2" - MemberName 523(B2) 0 "o" - MemberName 523(B2) 1 "p" - MemberName 523(B2) 2 "q" - MemberName 523(B2) 3 "r" - MemberName 523(B2) 4 "s" - MemberName 523(B2) 5 "t" - MemberName 523(B2) 6 "u" - MemberName 523(B2) 7 "v" - Name 525 "" - Name 526 "sf16" - Name 527 "sf" - Name 528 "sd" - Name 529 "f16_to_f" - Name 531 "f16_to_d" - Name 532 "f_to_f16" - Name 533 "d_to_f16" + Name 522 "S" + MemberName 522(S) 0 "x" + MemberName 522(S) 1 "y" + MemberName 522(S) 2 "z" + Name 524 "B1" + MemberName 524(B1) 0 "a" + MemberName 524(B1) 1 "b" + MemberName 524(B1) 2 "c" + MemberName 524(B1) 3 "d" + MemberName 524(B1) 4 "e" + MemberName 524(B1) 5 "f" + MemberName 524(B1) 6 "g" + MemberName 524(B1) 7 "h" + Name 526 "" + Name 529 "S" + MemberName 529(S) 0 "x" + MemberName 529(S) 1 "y" + MemberName 529(S) 2 "z" + Name 531 "B2" + MemberName 531(B2) 0 "o" + MemberName 531(B2) 1 "p" + MemberName 531(B2) 2 "q" + MemberName 531(B2) 3 "r" + MemberName 531(B2) 4 "s" + MemberName 531(B2) 5 "t" + MemberName 531(B2) 6 "u" + MemberName 531(B2) 7 "v" + Name 533 "" + Name 534 "sf16" + Name 535 "sf" + Name 536 "sd" + Name 537 "f16_to_f" + Name 539 "f16_to_d" + Name 540 "f_to_f16" + Name 541 "d_to_f16" Decorate 465(if16v) Location 0 - Decorate 512 ArrayStride 16 - Decorate 513 ArrayStride 32 - MemberDecorate 514(S) 0 Offset 0 - MemberDecorate 514(S) 1 Offset 4 - MemberDecorate 514(S) 2 Offset 8 - Decorate 515 ArrayStride 16 - MemberDecorate 516(B1) 0 Offset 0 - MemberDecorate 516(B1) 1 Offset 4 - MemberDecorate 516(B1) 2 Offset 8 - MemberDecorate 516(B1) 3 Offset 16 - MemberDecorate 516(B1) 4 ColMajor - MemberDecorate 516(B1) 4 Offset 48 - MemberDecorate 516(B1) 4 MatrixStride 16 - MemberDecorate 516(B1) 5 ColMajor - MemberDecorate 516(B1) 5 Offset 80 - MemberDecorate 516(B1) 5 MatrixStride 16 - MemberDecorate 516(B1) 6 Offset 144 - MemberDecorate 516(B1) 7 Offset 160 - Decorate 516(B1) Block - Decorate 518 DescriptorSet 0 - Decorate 518 Binding 0 - Decorate 519 ArrayStride 2 - Decorate 520 ArrayStride 12 - MemberDecorate 521(S) 0 Offset 0 - MemberDecorate 521(S) 1 Offset 4 - MemberDecorate 521(S) 2 Offset 8 - Decorate 522 ArrayStride 16 - MemberDecorate 523(B2) 0 Offset 0 - MemberDecorate 523(B2) 1 Offset 4 - MemberDecorate 523(B2) 2 Offset 8 - MemberDecorate 523(B2) 3 Offset 14 - MemberDecorate 523(B2) 4 RowMajor - MemberDecorate 523(B2) 4 Offset 20 - MemberDecorate 523(B2) 4 MatrixStride 4 - MemberDecorate 523(B2) 5 RowMajor - MemberDecorate 523(B2) 5 Offset 32 - MemberDecorate 523(B2) 5 MatrixStride 4 - MemberDecorate 523(B2) 6 Offset 56 - MemberDecorate 523(B2) 7 Offset 72 - Decorate 523(B2) BufferBlock - Decorate 525 DescriptorSet 0 - Decorate 525 Binding 0 - Decorate 526(sf16) SpecId 100 - Decorate 527(sf) SpecId 101 - Decorate 528(sd) SpecId 102 + Decorate 520 ArrayStride 16 + Decorate 521 ArrayStride 32 + MemberDecorate 522(S) 0 Offset 0 + MemberDecorate 522(S) 1 Offset 4 + MemberDecorate 522(S) 2 Offset 8 + Decorate 523 ArrayStride 16 + MemberDecorate 524(B1) 0 Offset 0 + MemberDecorate 524(B1) 1 Offset 4 + MemberDecorate 524(B1) 2 Offset 8 + MemberDecorate 524(B1) 3 Offset 16 + MemberDecorate 524(B1) 4 ColMajor + MemberDecorate 524(B1) 4 Offset 48 + MemberDecorate 524(B1) 4 MatrixStride 16 + MemberDecorate 524(B1) 5 ColMajor + MemberDecorate 524(B1) 5 Offset 80 + MemberDecorate 524(B1) 5 MatrixStride 16 + MemberDecorate 524(B1) 6 Offset 144 + MemberDecorate 524(B1) 7 Offset 160 + Decorate 524(B1) Block + Decorate 526 DescriptorSet 0 + Decorate 526 Binding 0 + Decorate 527 ArrayStride 2 + Decorate 528 ArrayStride 12 + MemberDecorate 529(S) 0 Offset 0 + MemberDecorate 529(S) 1 Offset 4 + MemberDecorate 529(S) 2 Offset 8 + Decorate 530 ArrayStride 16 + MemberDecorate 531(B2) 0 Offset 0 + MemberDecorate 531(B2) 1 Offset 4 + MemberDecorate 531(B2) 2 Offset 8 + MemberDecorate 531(B2) 3 Offset 14 + MemberDecorate 531(B2) 4 RowMajor + MemberDecorate 531(B2) 4 Offset 20 + MemberDecorate 531(B2) 4 MatrixStride 4 + MemberDecorate 531(B2) 5 RowMajor + MemberDecorate 531(B2) 5 Offset 32 + MemberDecorate 531(B2) 5 MatrixStride 4 + MemberDecorate 531(B2) 6 Offset 56 + MemberDecorate 531(B2) 7 Offset 72 + Decorate 531(B2) BufferBlock + Decorate 533 DescriptorSet 0 + Decorate 533 Binding 0 + Decorate 534(sf16) SpecId 100 + Decorate 535(sf) SpecId 101 + Decorate 536(sd) SpecId 102 2: TypeVoid 3: TypeFunction 2 28: TypeFloat 16 @@ -218,32 +218,32 @@ Validation failed 464: TypePointer Input 151(f16vec3) 465(if16v): 464(ptr) Variable Input 466: TypePointer Input 28(float16_t) - 503: 183(int) Constant 1 - 508:28(float16_t) Constant 14336 - 509: 29(f16vec2) ConstantComposite 508 508 - 511: 33(int) Constant 2 - 512: TypeArray 28(float16_t) 511 - 513: TypeArray 406 511 - 514(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) - 515: TypeArray 514(S) 511 - 516(B1): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 512 406 513 514(S) 515 - 517: TypePointer Uniform 516(B1) - 518: 517(ptr) Variable Uniform - 519: TypeArray 28(float16_t) 511 - 520: TypeArray 406 511 - 521(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) - 522: TypeArray 521(S) 511 - 523(B2): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 519 406 520 521(S) 522 - 524: TypePointer Uniform 523(B2) - 525: 524(ptr) Variable Uniform - 526(sf16):28(float16_t) SpecConstant 12288 - 527(sf): 164(float) SpecConstant 1048576000 - 528(sd):172(float64_t) SpecConstant 0 1071644672 - 529(f16_to_f): 164(float) SpecConstantOp 115 526(sf16) - 530: 164(float) SpecConstantOp 115 526(sf16) - 531(f16_to_d):172(float64_t) SpecConstantOp 115 530 - 532(f_to_f16):28(float16_t) SpecConstantOp 115 527(sf) - 533(d_to_f16):28(float16_t) SpecConstantOp 115 528(sd) + 509: 183(int) Constant 1 + 516:28(float16_t) Constant 14336 + 517: 29(f16vec2) ConstantComposite 516 516 + 519: 33(int) Constant 2 + 520: TypeArray 28(float16_t) 519 + 521: TypeArray 406 519 + 522(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) + 523: TypeArray 522(S) 519 + 524(B1): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 520 406 521 522(S) 523 + 525: TypePointer Uniform 524(B1) + 526: 525(ptr) Variable Uniform + 527: TypeArray 28(float16_t) 519 + 528: TypeArray 406 519 + 529(S): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) + 530: TypeArray 529(S) 519 + 531(B2): TypeStruct 28(float16_t) 29(f16vec2) 151(f16vec3) 527 406 528 529(S) 530 + 532: TypePointer Uniform 531(B2) + 533: 532(ptr) Variable Uniform + 534(sf16):28(float16_t) SpecConstant 12288 + 535(sf): 164(float) SpecConstant 1048576000 + 536(sd):172(float64_t) SpecConstant 0 1071644672 + 537(f16_to_f): 164(float) SpecConstantOp 115 534(sf16) + 538: 164(float) SpecConstantOp 115 534(sf16) + 539(f16_to_d):172(float64_t) SpecConstantOp 115 538 + 540(f_to_f16):28(float16_t) SpecConstantOp 115 535(sf) + 541(d_to_f16):28(float16_t) SpecConstantOp 115 536(sd) 4(main): 2 Function None 3 5: Label Return @@ -801,45 +801,57 @@ Validation failed 475:151(f16vec3) Load 465(if16v) 476: 29(f16vec2) VectorShuffle 475 475 0 1 477: 29(f16vec2) DPdxFine 476 - 478:151(f16vec3) Load 463(f16v) - 479:151(f16vec3) VectorShuffle 478 477 3 4 2 - Store 463(f16v) 479 - 480:151(f16vec3) Load 465(if16v) - 481: 29(f16vec2) VectorShuffle 480 480 0 1 - 482: 29(f16vec2) DPdyFine 481 - 483:151(f16vec3) Load 463(f16v) - 484:151(f16vec3) VectorShuffle 483 482 3 4 2 - Store 463(f16v) 484 - 485:151(f16vec3) Load 465(if16v) - 486:151(f16vec3) DPdxCoarse 485 - Store 463(f16v) 486 - 487:151(f16vec3) Load 465(if16v) - 488:151(f16vec3) DPdxCoarse 487 - Store 463(f16v) 488 - 489: 466(ptr) AccessChain 465(if16v) 34 - 490:28(float16_t) Load 489 - 491:28(float16_t) Fwidth 490 - 492: 35(ptr) AccessChain 463(f16v) 34 - Store 492 491 - 493:151(f16vec3) Load 465(if16v) - 494: 29(f16vec2) VectorShuffle 493 493 0 1 - 495: 29(f16vec2) FwidthFine 494 - 496:151(f16vec3) Load 463(f16v) - 497:151(f16vec3) VectorShuffle 496 495 3 4 2 - Store 463(f16v) 497 - 498:151(f16vec3) Load 465(if16v) - 499:151(f16vec3) FwidthCoarse 498 - Store 463(f16v) 499 - 500: 466(ptr) AccessChain 465(if16v) 34 - 501:28(float16_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 500 - 502: 35(ptr) AccessChain 463(f16v) 34 - Store 502 501 - 504:151(f16vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 465(if16v) 503 - 505: 29(f16vec2) VectorShuffle 504 504 0 1 - 506:151(f16vec3) Load 463(f16v) - 507:151(f16vec3) VectorShuffle 506 505 3 4 2 - Store 463(f16v) 507 - 510:151(f16vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 465(if16v) 509 - Store 463(f16v) 510 + 478: 35(ptr) AccessChain 463(f16v) 34 + 479:28(float16_t) CompositeExtract 477 0 + Store 478 479 + 480: 35(ptr) AccessChain 463(f16v) 90 + 481:28(float16_t) CompositeExtract 477 1 + Store 480 481 + 482:151(f16vec3) Load 465(if16v) + 483: 29(f16vec2) VectorShuffle 482 482 0 1 + 484: 29(f16vec2) DPdyFine 483 + 485: 35(ptr) AccessChain 463(f16v) 34 + 486:28(float16_t) CompositeExtract 484 0 + Store 485 486 + 487: 35(ptr) AccessChain 463(f16v) 90 + 488:28(float16_t) CompositeExtract 484 1 + Store 487 488 + 489:151(f16vec3) Load 465(if16v) + 490:151(f16vec3) DPdxCoarse 489 + Store 463(f16v) 490 + 491:151(f16vec3) Load 465(if16v) + 492:151(f16vec3) DPdxCoarse 491 + Store 463(f16v) 492 + 493: 466(ptr) AccessChain 465(if16v) 34 + 494:28(float16_t) Load 493 + 495:28(float16_t) Fwidth 494 + 496: 35(ptr) AccessChain 463(f16v) 34 + Store 496 495 + 497:151(f16vec3) Load 465(if16v) + 498: 29(f16vec2) VectorShuffle 497 497 0 1 + 499: 29(f16vec2) FwidthFine 498 + 500: 35(ptr) AccessChain 463(f16v) 34 + 501:28(float16_t) CompositeExtract 499 0 + Store 500 501 + 502: 35(ptr) AccessChain 463(f16v) 90 + 503:28(float16_t) CompositeExtract 499 1 + Store 502 503 + 504:151(f16vec3) Load 465(if16v) + 505:151(f16vec3) FwidthCoarse 504 + Store 463(f16v) 505 + 506: 466(ptr) AccessChain 465(if16v) 34 + 507:28(float16_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 506 + 508: 35(ptr) AccessChain 463(f16v) 34 + Store 508 507 + 510:151(f16vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 465(if16v) 509 + 511: 29(f16vec2) VectorShuffle 510 510 0 1 + 512: 35(ptr) AccessChain 463(f16v) 34 + 513:28(float16_t) CompositeExtract 511 0 + Store 512 513 + 514: 35(ptr) AccessChain 463(f16v) 90 + 515:28(float16_t) CompositeExtract 511 1 + Store 514 515 + 518:151(f16vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 465(if16v) 517 + Store 463(f16v) 518 Return FunctionEnd diff --git a/Test/baseResults/spv.float16Fetch.frag.out b/Test/baseResults/spv.float16Fetch.frag.out index 3b2c36fa5a..da4aa4ddbc 100644 --- a/Test/baseResults/spv.float16Fetch.frag.out +++ b/Test/baseResults/spv.float16Fetch.frag.out @@ -2,7 +2,7 @@ spv.float16Fetch.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 5933 +// Id's are bound by 5979 Capability Shader Capability Float16 @@ -29,7 +29,7 @@ Validation failed Extension "SPV_KHR_16bit_storage" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 128 135 137 148 156 169 177 215 251 309 565 572 1393 1401 1409 1417 1425 1433 4267 4274 5923 5932 + EntryPoint Fragment 4 "main" 128 135 137 148 156 169 177 215 251 309 565 572 1393 1401 1409 1417 1425 1433 4311 4318 5969 5978 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_AMD_gpu_shader_half_float" @@ -145,68 +145,68 @@ Validation failed Name 2502 "texel" Name 2530 "texel" Name 2559 "size" - Name 2733 "lod" - Name 2869 "levels" - Name 2938 "samples" - Name 2952 "texel" - Name 2955 "i1D" - Name 2964 "i2D" - Name 2973 "i3D" - Name 2982 "i2DRect" - Name 2991 "iCube" - Name 3000 "iBuffer" - Name 3009 "i1DArray" - Name 3018 "i2DArray" - Name 3027 "iCubeArray" - Name 3036 "i2DMS" - Name 3045 "i2DMSArray" - Name 3099 "texel" - Name 3102 "ResType" - Name 3138 "ResType" - Name 3242 "texel" - Name 3322 "texel" - Name 3412 "texel" - Name 3468 "texel" - Name 3628 "texel" - Name 3742 "texel" - Name 3794 "texel" - Name 3832 "texel" - Name 3950 "texel" - Name 4022 "texel" - Name 4104 "texel" - Name 4156 "texel" - Name 4184 "texel" - Name 4212 "texel" - Name 4264 "texel" - Name 4267 "lodClamp" - Name 4274 "f16lodClamp" - Name 4401 "texel" - Name 4608 "texel" - Name 4684 "texel" - Name 4828 "texel" - Name 4972 "texel" - Name 5198 "texel" - Name 5290 "texel" - Name 5462 "texel" - Name 5464 "t1D" - Name 5468 "s" - Name 5484 "t2D" - Name 5501 "t3D" - Name 5518 "tCube" - Name 5535 "sShadow" - Name 5599 "t1DArray" - Name 5616 "t2DArray" - Name 5633 "tCubeArray" - Name 5691 "t2DRect" - Name 5751 "subpass" - Name 5757 "subpassMS" - Name 5763 "result" - Name 5844 "param" - Name 5923 "fragColor" - Name 5927 "tBuffer" - Name 5929 "t2DMS" - Name 5931 "t2DMSArray" - Name 5932 "bias" + Name 2777 "lod" + Name 2913 "levels" + Name 2982 "samples" + Name 2996 "texel" + Name 2999 "i1D" + Name 3008 "i2D" + Name 3017 "i3D" + Name 3026 "i2DRect" + Name 3035 "iCube" + Name 3044 "iBuffer" + Name 3053 "i1DArray" + Name 3062 "i2DArray" + Name 3071 "iCubeArray" + Name 3080 "i2DMS" + Name 3089 "i2DMSArray" + Name 3143 "texel" + Name 3146 "ResType" + Name 3182 "ResType" + Name 3286 "texel" + Name 3366 "texel" + Name 3456 "texel" + Name 3512 "texel" + Name 3672 "texel" + Name 3786 "texel" + Name 3838 "texel" + Name 3876 "texel" + Name 3994 "texel" + Name 4066 "texel" + Name 4148 "texel" + Name 4200 "texel" + Name 4228 "texel" + Name 4256 "texel" + Name 4308 "texel" + Name 4311 "lodClamp" + Name 4318 "f16lodClamp" + Name 4445 "texel" + Name 4652 "texel" + Name 4728 "texel" + Name 4872 "texel" + Name 5016 "texel" + Name 5242 "texel" + Name 5334 "texel" + Name 5506 "texel" + Name 5508 "t1D" + Name 5512 "s" + Name 5528 "t2D" + Name 5545 "t3D" + Name 5562 "tCube" + Name 5579 "sShadow" + Name 5643 "t1DArray" + Name 5660 "t2DArray" + Name 5677 "tCubeArray" + Name 5735 "t2DRect" + Name 5795 "subpass" + Name 5801 "subpassMS" + Name 5807 "result" + Name 5890 "param" + Name 5969 "fragColor" + Name 5973 "tBuffer" + Name 5975 "t2DMS" + Name 5977 "t2DMSArray" + Name 5978 "bias" Decorate 125(s1D) DescriptorSet 0 Decorate 125(s1D) Binding 0 Decorate 128(c1) Location 0 @@ -261,64 +261,64 @@ Validation failed Decorate 1417(f16dPdxy2) Location 19 Decorate 1425(dPdxy3) Location 10 Decorate 1433(f16dPdxy3) Location 20 - Decorate 2955(i1D) DescriptorSet 1 - Decorate 2955(i1D) Binding 0 - Decorate 2964(i2D) DescriptorSet 1 - Decorate 2964(i2D) Binding 1 - Decorate 2973(i3D) DescriptorSet 1 - Decorate 2973(i3D) Binding 2 - Decorate 2982(i2DRect) DescriptorSet 1 - Decorate 2982(i2DRect) Binding 3 - Decorate 2991(iCube) DescriptorSet 1 - Decorate 2991(iCube) Binding 4 - Decorate 3000(iBuffer) DescriptorSet 1 - Decorate 3000(iBuffer) Binding 8 - Decorate 3009(i1DArray) DescriptorSet 1 - Decorate 3009(i1DArray) Binding 5 - Decorate 3018(i2DArray) DescriptorSet 1 - Decorate 3018(i2DArray) Binding 6 - Decorate 3027(iCubeArray) DescriptorSet 1 - Decorate 3027(iCubeArray) Binding 7 - Decorate 3036(i2DMS) DescriptorSet 1 - Decorate 3036(i2DMS) Binding 9 - Decorate 3045(i2DMSArray) DescriptorSet 1 - Decorate 3045(i2DMSArray) Binding 10 - Decorate 4267(lodClamp) Location 7 - Decorate 4274(f16lodClamp) Location 17 - Decorate 5464(t1D) DescriptorSet 2 - Decorate 5464(t1D) Binding 0 - Decorate 5468(s) DescriptorSet 2 - Decorate 5468(s) Binding 11 - Decorate 5484(t2D) DescriptorSet 2 - Decorate 5484(t2D) Binding 1 - Decorate 5501(t3D) DescriptorSet 2 - Decorate 5501(t3D) Binding 2 - Decorate 5518(tCube) DescriptorSet 2 - Decorate 5518(tCube) Binding 4 - Decorate 5535(sShadow) DescriptorSet 2 - Decorate 5535(sShadow) Binding 12 - Decorate 5599(t1DArray) DescriptorSet 2 - Decorate 5599(t1DArray) Binding 5 - Decorate 5616(t2DArray) DescriptorSet 2 - Decorate 5616(t2DArray) Binding 6 - Decorate 5633(tCubeArray) DescriptorSet 2 - Decorate 5633(tCubeArray) Binding 7 - Decorate 5691(t2DRect) DescriptorSet 2 - Decorate 5691(t2DRect) Binding 3 - Decorate 5751(subpass) DescriptorSet 3 - Decorate 5751(subpass) Binding 0 - Decorate 5751(subpass) InputAttachmentIndex 0 - Decorate 5757(subpassMS) DescriptorSet 3 - Decorate 5757(subpassMS) Binding 1 - Decorate 5757(subpassMS) InputAttachmentIndex 0 - Decorate 5923(fragColor) Location 0 - Decorate 5927(tBuffer) DescriptorSet 2 - Decorate 5927(tBuffer) Binding 8 - Decorate 5929(t2DMS) DescriptorSet 2 - Decorate 5929(t2DMS) Binding 9 - Decorate 5931(t2DMSArray) DescriptorSet 2 - Decorate 5931(t2DMSArray) Binding 10 - Decorate 5932(bias) Location 6 + Decorate 2999(i1D) DescriptorSet 1 + Decorate 2999(i1D) Binding 0 + Decorate 3008(i2D) DescriptorSet 1 + Decorate 3008(i2D) Binding 1 + Decorate 3017(i3D) DescriptorSet 1 + Decorate 3017(i3D) Binding 2 + Decorate 3026(i2DRect) DescriptorSet 1 + Decorate 3026(i2DRect) Binding 3 + Decorate 3035(iCube) DescriptorSet 1 + Decorate 3035(iCube) Binding 4 + Decorate 3044(iBuffer) DescriptorSet 1 + Decorate 3044(iBuffer) Binding 8 + Decorate 3053(i1DArray) DescriptorSet 1 + Decorate 3053(i1DArray) Binding 5 + Decorate 3062(i2DArray) DescriptorSet 1 + Decorate 3062(i2DArray) Binding 6 + Decorate 3071(iCubeArray) DescriptorSet 1 + Decorate 3071(iCubeArray) Binding 7 + Decorate 3080(i2DMS) DescriptorSet 1 + Decorate 3080(i2DMS) Binding 9 + Decorate 3089(i2DMSArray) DescriptorSet 1 + Decorate 3089(i2DMSArray) Binding 10 + Decorate 4311(lodClamp) Location 7 + Decorate 4318(f16lodClamp) Location 17 + Decorate 5508(t1D) DescriptorSet 2 + Decorate 5508(t1D) Binding 0 + Decorate 5512(s) DescriptorSet 2 + Decorate 5512(s) Binding 11 + Decorate 5528(t2D) DescriptorSet 2 + Decorate 5528(t2D) Binding 1 + Decorate 5545(t3D) DescriptorSet 2 + Decorate 5545(t3D) Binding 2 + Decorate 5562(tCube) DescriptorSet 2 + Decorate 5562(tCube) Binding 4 + Decorate 5579(sShadow) DescriptorSet 2 + Decorate 5579(sShadow) Binding 12 + Decorate 5643(t1DArray) DescriptorSet 2 + Decorate 5643(t1DArray) Binding 5 + Decorate 5660(t2DArray) DescriptorSet 2 + Decorate 5660(t2DArray) Binding 6 + Decorate 5677(tCubeArray) DescriptorSet 2 + Decorate 5677(tCubeArray) Binding 7 + Decorate 5735(t2DRect) DescriptorSet 2 + Decorate 5735(t2DRect) Binding 3 + Decorate 5795(subpass) DescriptorSet 3 + Decorate 5795(subpass) Binding 0 + Decorate 5795(subpass) InputAttachmentIndex 0 + Decorate 5801(subpassMS) DescriptorSet 3 + Decorate 5801(subpassMS) Binding 1 + Decorate 5801(subpassMS) InputAttachmentIndex 0 + Decorate 5969(fragColor) Location 0 + Decorate 5973(tBuffer) DescriptorSet 2 + Decorate 5973(tBuffer) Binding 8 + Decorate 5975(t2DMS) DescriptorSet 2 + Decorate 5975(t2DMS) Binding 9 + Decorate 5977(t2DMSArray) DescriptorSet 2 + Decorate 5977(t2DMSArray) Binding 10 + Decorate 5978(bias) Location 6 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 16 @@ -453,306 +453,311 @@ Validation failed 2558: TypePointer Function 48(ivec4) 2560: 48(ivec4) ConstantComposite 2187 2187 2187 2187 2566: TypePointer Function 47(int) - 2732: TypePointer Function 53(fvec2) - 2734: 52(float) Constant 0 - 2735: 53(fvec2) ConstantComposite 2734 2734 - 2953: TypeImage 6(float16_t) 1D nonsampled format:Rgba16f - 2954: TypePointer UniformConstant 2953 - 2955(i1D): 2954(ptr) Variable UniformConstant - 2962: TypeImage 6(float16_t) 2D nonsampled format:Rgba16f - 2963: TypePointer UniformConstant 2962 - 2964(i2D): 2963(ptr) Variable UniformConstant - 2971: TypeImage 6(float16_t) 3D nonsampled format:Rgba16f - 2972: TypePointer UniformConstant 2971 - 2973(i3D): 2972(ptr) Variable UniformConstant - 2980: TypeImage 6(float16_t) Rect nonsampled format:Rgba16f - 2981: TypePointer UniformConstant 2980 - 2982(i2DRect): 2981(ptr) Variable UniformConstant - 2989: TypeImage 6(float16_t) Cube nonsampled format:Rgba16f - 2990: TypePointer UniformConstant 2989 - 2991(iCube): 2990(ptr) Variable UniformConstant - 2998: TypeImage 6(float16_t) Buffer nonsampled format:Rgba16f - 2999: TypePointer UniformConstant 2998 - 3000(iBuffer): 2999(ptr) Variable UniformConstant - 3007: TypeImage 6(float16_t) 1D array nonsampled format:Rgba16f - 3008: TypePointer UniformConstant 3007 - 3009(i1DArray): 3008(ptr) Variable UniformConstant - 3016: TypeImage 6(float16_t) 2D array nonsampled format:Rgba16f - 3017: TypePointer UniformConstant 3016 - 3018(i2DArray): 3017(ptr) Variable UniformConstant - 3025: TypeImage 6(float16_t) Cube array nonsampled format:Rgba16f - 3026: TypePointer UniformConstant 3025 -3027(iCubeArray): 3026(ptr) Variable UniformConstant - 3034: TypeImage 6(float16_t) 2D multi-sampled nonsampled format:Rgba16f - 3035: TypePointer UniformConstant 3034 - 3036(i2DMS): 3035(ptr) Variable UniformConstant - 3043: TypeImage 6(float16_t) 2D array multi-sampled nonsampled format:Rgba16f - 3044: TypePointer UniformConstant 3043 -3045(i2DMSArray): 3044(ptr) Variable UniformConstant - 3102(ResType): TypeStruct 47(int) 7(f16vec4) - 3138(ResType): TypeStruct 47(int) 6(float16_t) - 4025: 721(ivec2) ConstantComposite 709 1326 - 4026: 47(int) Constant 3 - 4027: 47(int) Constant 4 - 4028: 721(ivec2) ConstantComposite 4026 4027 - 4029: 47(int) Constant 15 - 4030: 47(int) Constant 16 - 4031: 721(ivec2) ConstantComposite 4029 4030 - 4032: 47(int) Constant 4294967294 - 4033: 721(ivec2) ConstantComposite 4032 2187 - 4034: 2379 ConstantComposite 4025 4028 4031 4033 - 4267(lodClamp): 127(ptr) Variable Input -4274(f16lodClamp): 134(ptr) Variable Input - 5463: TypePointer UniformConstant 122 - 5464(t1D): 5463(ptr) Variable UniformConstant - 5466: TypeSampler - 5467: TypePointer UniformConstant 5466 - 5468(s): 5467(ptr) Variable UniformConstant - 5483: TypePointer UniformConstant 142 - 5484(t2D): 5483(ptr) Variable UniformConstant - 5500: TypePointer UniformConstant 162 - 5501(t3D): 5500(ptr) Variable UniformConstant - 5517: TypePointer UniformConstant 183 - 5518(tCube): 5517(ptr) Variable UniformConstant - 5535(sShadow): 5467(ptr) Variable UniformConstant - 5598: TypePointer UniformConstant 268 - 5599(t1DArray): 5598(ptr) Variable UniformConstant - 5615: TypePointer UniformConstant 283 - 5616(t2DArray): 5615(ptr) Variable UniformConstant - 5632: TypePointer UniformConstant 298 -5633(tCubeArray): 5632(ptr) Variable UniformConstant - 5690: TypePointer UniformConstant 356 - 5691(t2DRect): 5690(ptr) Variable UniformConstant - 5749: TypeImage 6(float16_t) SubpassData nonsampled format:Unknown - 5750: TypePointer UniformConstant 5749 - 5751(subpass): 5750(ptr) Variable UniformConstant - 5753: 721(ivec2) ConstantComposite 2187 2187 - 5755: TypeImage 6(float16_t) SubpassData multi-sampled nonsampled format:Unknown - 5756: TypePointer UniformConstant 5755 - 5757(subpassMS): 5756(ptr) Variable UniformConstant - 5922: TypePointer Output 249(fvec4) - 5923(fragColor): 5922(ptr) Variable Output - 5926: TypePointer UniformConstant 1297 - 5927(tBuffer): 5926(ptr) Variable UniformConstant - 5928: TypePointer UniformConstant 1308 - 5929(t2DMS): 5928(ptr) Variable UniformConstant - 5930: TypePointer UniformConstant 1319 -5931(t2DMSArray): 5930(ptr) Variable UniformConstant - 5932(bias): 127(ptr) Variable Input + 2581: 206(int) Constant 1 + 2596: 206(int) Constant 2 + 2776: TypePointer Function 53(fvec2) + 2778: 52(float) Constant 0 + 2779: 53(fvec2) ConstantComposite 2778 2778 + 2997: TypeImage 6(float16_t) 1D nonsampled format:Rgba16f + 2998: TypePointer UniformConstant 2997 + 2999(i1D): 2998(ptr) Variable UniformConstant + 3006: TypeImage 6(float16_t) 2D nonsampled format:Rgba16f + 3007: TypePointer UniformConstant 3006 + 3008(i2D): 3007(ptr) Variable UniformConstant + 3015: TypeImage 6(float16_t) 3D nonsampled format:Rgba16f + 3016: TypePointer UniformConstant 3015 + 3017(i3D): 3016(ptr) Variable UniformConstant + 3024: TypeImage 6(float16_t) Rect nonsampled format:Rgba16f + 3025: TypePointer UniformConstant 3024 + 3026(i2DRect): 3025(ptr) Variable UniformConstant + 3033: TypeImage 6(float16_t) Cube nonsampled format:Rgba16f + 3034: TypePointer UniformConstant 3033 + 3035(iCube): 3034(ptr) Variable UniformConstant + 3042: TypeImage 6(float16_t) Buffer nonsampled format:Rgba16f + 3043: TypePointer UniformConstant 3042 + 3044(iBuffer): 3043(ptr) Variable UniformConstant + 3051: TypeImage 6(float16_t) 1D array nonsampled format:Rgba16f + 3052: TypePointer UniformConstant 3051 + 3053(i1DArray): 3052(ptr) Variable UniformConstant + 3060: TypeImage 6(float16_t) 2D array nonsampled format:Rgba16f + 3061: TypePointer UniformConstant 3060 + 3062(i2DArray): 3061(ptr) Variable UniformConstant + 3069: TypeImage 6(float16_t) Cube array nonsampled format:Rgba16f + 3070: TypePointer UniformConstant 3069 +3071(iCubeArray): 3070(ptr) Variable UniformConstant + 3078: TypeImage 6(float16_t) 2D multi-sampled nonsampled format:Rgba16f + 3079: TypePointer UniformConstant 3078 + 3080(i2DMS): 3079(ptr) Variable UniformConstant + 3087: TypeImage 6(float16_t) 2D array multi-sampled nonsampled format:Rgba16f + 3088: TypePointer UniformConstant 3087 +3089(i2DMSArray): 3088(ptr) Variable UniformConstant + 3146(ResType): TypeStruct 47(int) 7(f16vec4) + 3182(ResType): TypeStruct 47(int) 6(float16_t) + 4069: 721(ivec2) ConstantComposite 709 1326 + 4070: 47(int) Constant 3 + 4071: 47(int) Constant 4 + 4072: 721(ivec2) ConstantComposite 4070 4071 + 4073: 47(int) Constant 15 + 4074: 47(int) Constant 16 + 4075: 721(ivec2) ConstantComposite 4073 4074 + 4076: 47(int) Constant 4294967294 + 4077: 721(ivec2) ConstantComposite 4076 2187 + 4078: 2379 ConstantComposite 4069 4072 4075 4077 + 4311(lodClamp): 127(ptr) Variable Input +4318(f16lodClamp): 134(ptr) Variable Input + 5507: TypePointer UniformConstant 122 + 5508(t1D): 5507(ptr) Variable UniformConstant + 5510: TypeSampler + 5511: TypePointer UniformConstant 5510 + 5512(s): 5511(ptr) Variable UniformConstant + 5527: TypePointer UniformConstant 142 + 5528(t2D): 5527(ptr) Variable UniformConstant + 5544: TypePointer UniformConstant 162 + 5545(t3D): 5544(ptr) Variable UniformConstant + 5561: TypePointer UniformConstant 183 + 5562(tCube): 5561(ptr) Variable UniformConstant + 5579(sShadow): 5511(ptr) Variable UniformConstant + 5642: TypePointer UniformConstant 268 + 5643(t1DArray): 5642(ptr) Variable UniformConstant + 5659: TypePointer UniformConstant 283 + 5660(t2DArray): 5659(ptr) Variable UniformConstant + 5676: TypePointer UniformConstant 298 +5677(tCubeArray): 5676(ptr) Variable UniformConstant + 5734: TypePointer UniformConstant 356 + 5735(t2DRect): 5734(ptr) Variable UniformConstant + 5793: TypeImage 6(float16_t) SubpassData nonsampled format:Unknown + 5794: TypePointer UniformConstant 5793 + 5795(subpass): 5794(ptr) Variable UniformConstant + 5797: 721(ivec2) ConstantComposite 2187 2187 + 5799: TypeImage 6(float16_t) SubpassData multi-sampled nonsampled format:Unknown + 5800: TypePointer UniformConstant 5799 + 5801(subpassMS): 5800(ptr) Variable UniformConstant + 5968: TypePointer Output 249(fvec4) + 5969(fragColor): 5968(ptr) Variable Output + 5972: TypePointer UniformConstant 1297 + 5973(tBuffer): 5972(ptr) Variable UniformConstant + 5974: TypePointer UniformConstant 1308 + 5975(t2DMS): 5974(ptr) Variable UniformConstant + 5976: TypePointer UniformConstant 1319 +5977(t2DMSArray): 5976(ptr) Variable UniformConstant + 5978(bias): 127(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 5763(result): 64(ptr) Variable Function - 5844(param): 64(ptr) Variable Function - Store 5763(result) 121 - 5764: 7(f16vec4) FunctionCall 9(testTexture() - 5765: 7(f16vec4) Load 5763(result) - 5766: 7(f16vec4) FAdd 5765 5764 - Store 5763(result) 5766 - 5767: 7(f16vec4) FunctionCall 11(testTextureProj() - 5768: 7(f16vec4) Load 5763(result) - 5769: 7(f16vec4) FAdd 5768 5767 - Store 5763(result) 5769 - 5770: 7(f16vec4) FunctionCall 13(testTextureLod() - 5771: 7(f16vec4) Load 5763(result) - 5772: 7(f16vec4) FAdd 5771 5770 - Store 5763(result) 5772 - 5773: 7(f16vec4) FunctionCall 15(testTextureOffset() - 5774: 7(f16vec4) Load 5763(result) - 5775: 7(f16vec4) FAdd 5774 5773 - Store 5763(result) 5775 - 5776: 7(f16vec4) FunctionCall 19(testTextureLodOffset() - 5777: 7(f16vec4) Load 5763(result) - 5778: 7(f16vec4) FAdd 5777 5776 - Store 5763(result) 5778 - 5779: 7(f16vec4) FunctionCall 21(testTextureProjLodOffset() - 5780: 7(f16vec4) Load 5763(result) - 5781: 7(f16vec4) FAdd 5780 5779 - Store 5763(result) 5781 - 5782: 7(f16vec4) FunctionCall 23(testTexelFetch() - 5783: 7(f16vec4) Load 5763(result) - 5784: 7(f16vec4) FAdd 5783 5782 - Store 5763(result) 5784 - 5785: 7(f16vec4) FunctionCall 25(testTexelFetchOffset() - 5786: 7(f16vec4) Load 5763(result) - 5787: 7(f16vec4) FAdd 5786 5785 - Store 5763(result) 5787 - 5788: 7(f16vec4) FunctionCall 27(testTextureGrad() - 5789: 7(f16vec4) Load 5763(result) - 5790: 7(f16vec4) FAdd 5789 5788 - Store 5763(result) 5790 - 5791: 7(f16vec4) FunctionCall 29(testTextureGradOffset() - 5792: 7(f16vec4) Load 5763(result) - 5793: 7(f16vec4) FAdd 5792 5791 - Store 5763(result) 5793 - 5794: 7(f16vec4) FunctionCall 31(testTextureProjGrad() - 5795: 7(f16vec4) Load 5763(result) - 5796: 7(f16vec4) FAdd 5795 5794 - Store 5763(result) 5796 - 5797: 7(f16vec4) FunctionCall 33(testTextureProjGradoffset() - 5798: 7(f16vec4) Load 5763(result) - 5799: 7(f16vec4) FAdd 5798 5797 - Store 5763(result) 5799 - 5800: 7(f16vec4) FunctionCall 35(testTextureGather() - 5801: 7(f16vec4) Load 5763(result) - 5802: 7(f16vec4) FAdd 5801 5800 - Store 5763(result) 5802 - 5803: 7(f16vec4) FunctionCall 37(testTextureGatherOffset() - 5804: 7(f16vec4) Load 5763(result) - 5805: 7(f16vec4) FAdd 5804 5803 - Store 5763(result) 5805 - 5806: 7(f16vec4) FunctionCall 39(testTextureGatherOffsets() - 5807: 7(f16vec4) Load 5763(result) - 5808: 7(f16vec4) FAdd 5807 5806 - Store 5763(result) 5808 - 5809: 7(f16vec4) FunctionCall 41(testTextureGatherLod() - 5810: 7(f16vec4) Load 5763(result) - 5811: 7(f16vec4) FAdd 5810 5809 - Store 5763(result) 5811 - 5812: 7(f16vec4) FunctionCall 43(testTextureGatherLodOffset() - 5813: 7(f16vec4) Load 5763(result) - 5814: 7(f16vec4) FAdd 5813 5812 - Store 5763(result) 5814 - 5815: 7(f16vec4) FunctionCall 45(testTextureGatherLodOffsets() - 5816: 7(f16vec4) Load 5763(result) - 5817: 7(f16vec4) FAdd 5816 5815 - Store 5763(result) 5817 - 5818: 48(ivec4) FunctionCall 50(testTextureSize() - 5819: 7(f16vec4) ConvertSToF 5818 - 5820: 7(f16vec4) Load 5763(result) - 5821: 7(f16vec4) FAdd 5820 5819 - Store 5763(result) 5821 - 5822: 53(fvec2) FunctionCall 55(testTextureQueryLod() - 5823:154(f16vec2) FConvert 5822 - 5824: 7(f16vec4) Load 5763(result) - 5825:154(f16vec2) VectorShuffle 5824 5824 0 1 - 5826:154(f16vec2) FAdd 5825 5823 - 5827: 7(f16vec4) Load 5763(result) - 5828: 7(f16vec4) VectorShuffle 5827 5826 4 5 2 3 - Store 5763(result) 5828 - 5829: 47(int) FunctionCall 58(testTextureQueryLevels() - 5830:6(float16_t) ConvertSToF 5829 - 5831: 208(ptr) AccessChain 5763(result) 207 - 5832:6(float16_t) Load 5831 - 5833:6(float16_t) FAdd 5832 5830 - 5834: 208(ptr) AccessChain 5763(result) 207 - Store 5834 5833 - 5835: 47(int) FunctionCall 60(testTextureSamples() - 5836:6(float16_t) ConvertSToF 5835 - 5837: 208(ptr) AccessChain 5763(result) 207 - 5838:6(float16_t) Load 5837 - 5839:6(float16_t) FAdd 5838 5836 - 5840: 208(ptr) AccessChain 5763(result) 207 - Store 5840 5839 - 5841: 7(f16vec4) FunctionCall 62(testImageLoad() - 5842: 7(f16vec4) Load 5763(result) + 5807(result): 64(ptr) Variable Function + 5890(param): 64(ptr) Variable Function + Store 5807(result) 121 + 5808: 7(f16vec4) FunctionCall 9(testTexture() + 5809: 7(f16vec4) Load 5807(result) + 5810: 7(f16vec4) FAdd 5809 5808 + Store 5807(result) 5810 + 5811: 7(f16vec4) FunctionCall 11(testTextureProj() + 5812: 7(f16vec4) Load 5807(result) + 5813: 7(f16vec4) FAdd 5812 5811 + Store 5807(result) 5813 + 5814: 7(f16vec4) FunctionCall 13(testTextureLod() + 5815: 7(f16vec4) Load 5807(result) + 5816: 7(f16vec4) FAdd 5815 5814 + Store 5807(result) 5816 + 5817: 7(f16vec4) FunctionCall 15(testTextureOffset() + 5818: 7(f16vec4) Load 5807(result) + 5819: 7(f16vec4) FAdd 5818 5817 + Store 5807(result) 5819 + 5820: 7(f16vec4) FunctionCall 19(testTextureLodOffset() + 5821: 7(f16vec4) Load 5807(result) + 5822: 7(f16vec4) FAdd 5821 5820 + Store 5807(result) 5822 + 5823: 7(f16vec4) FunctionCall 21(testTextureProjLodOffset() + 5824: 7(f16vec4) Load 5807(result) + 5825: 7(f16vec4) FAdd 5824 5823 + Store 5807(result) 5825 + 5826: 7(f16vec4) FunctionCall 23(testTexelFetch() + 5827: 7(f16vec4) Load 5807(result) + 5828: 7(f16vec4) FAdd 5827 5826 + Store 5807(result) 5828 + 5829: 7(f16vec4) FunctionCall 25(testTexelFetchOffset() + 5830: 7(f16vec4) Load 5807(result) + 5831: 7(f16vec4) FAdd 5830 5829 + Store 5807(result) 5831 + 5832: 7(f16vec4) FunctionCall 27(testTextureGrad() + 5833: 7(f16vec4) Load 5807(result) + 5834: 7(f16vec4) FAdd 5833 5832 + Store 5807(result) 5834 + 5835: 7(f16vec4) FunctionCall 29(testTextureGradOffset() + 5836: 7(f16vec4) Load 5807(result) + 5837: 7(f16vec4) FAdd 5836 5835 + Store 5807(result) 5837 + 5838: 7(f16vec4) FunctionCall 31(testTextureProjGrad() + 5839: 7(f16vec4) Load 5807(result) + 5840: 7(f16vec4) FAdd 5839 5838 + Store 5807(result) 5840 + 5841: 7(f16vec4) FunctionCall 33(testTextureProjGradoffset() + 5842: 7(f16vec4) Load 5807(result) 5843: 7(f16vec4) FAdd 5842 5841 - Store 5763(result) 5843 - 5845: 7(f16vec4) Load 5763(result) - Store 5844(param) 5845 - 5846: 2 FunctionCall 67(testImageStore(vf164;) 5844(param) - 5847: 7(f16vec4) FunctionCall 69(testSparseTexture() - 5848: 7(f16vec4) Load 5763(result) + Store 5807(result) 5843 + 5844: 7(f16vec4) FunctionCall 35(testTextureGather() + 5845: 7(f16vec4) Load 5807(result) + 5846: 7(f16vec4) FAdd 5845 5844 + Store 5807(result) 5846 + 5847: 7(f16vec4) FunctionCall 37(testTextureGatherOffset() + 5848: 7(f16vec4) Load 5807(result) 5849: 7(f16vec4) FAdd 5848 5847 - Store 5763(result) 5849 - 5850: 7(f16vec4) FunctionCall 71(testSparseTextureLod() - 5851: 7(f16vec4) Load 5763(result) + Store 5807(result) 5849 + 5850: 7(f16vec4) FunctionCall 39(testTextureGatherOffsets() + 5851: 7(f16vec4) Load 5807(result) 5852: 7(f16vec4) FAdd 5851 5850 - Store 5763(result) 5852 - 5853: 7(f16vec4) FunctionCall 73(testSparseTextureOffset() - 5854: 7(f16vec4) Load 5763(result) + Store 5807(result) 5852 + 5853: 7(f16vec4) FunctionCall 41(testTextureGatherLod() + 5854: 7(f16vec4) Load 5807(result) 5855: 7(f16vec4) FAdd 5854 5853 - Store 5763(result) 5855 - 5856: 7(f16vec4) FunctionCall 75(testSparseTextureLodOffset() - 5857: 7(f16vec4) Load 5763(result) + Store 5807(result) 5855 + 5856: 7(f16vec4) FunctionCall 43(testTextureGatherLodOffset() + 5857: 7(f16vec4) Load 5807(result) 5858: 7(f16vec4) FAdd 5857 5856 - Store 5763(result) 5858 - 5859: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() - 5860: 7(f16vec4) Load 5763(result) + Store 5807(result) 5858 + 5859: 7(f16vec4) FunctionCall 45(testTextureGatherLodOffsets() + 5860: 7(f16vec4) Load 5807(result) 5861: 7(f16vec4) FAdd 5860 5859 - Store 5763(result) 5861 - 5862: 7(f16vec4) FunctionCall 79(testSparseTextureGradOffset() - 5863: 7(f16vec4) Load 5763(result) - 5864: 7(f16vec4) FAdd 5863 5862 - Store 5763(result) 5864 - 5865: 7(f16vec4) FunctionCall 81(testSparseTexelFetch() - 5866: 7(f16vec4) Load 5763(result) - 5867: 7(f16vec4) FAdd 5866 5865 - Store 5763(result) 5867 - 5868: 7(f16vec4) FunctionCall 83(testSparseTexelFetchOffset() - 5869: 7(f16vec4) Load 5763(result) - 5870: 7(f16vec4) FAdd 5869 5868 - Store 5763(result) 5870 - 5871: 7(f16vec4) FunctionCall 85(testSparseTextureGather() - 5872: 7(f16vec4) Load 5763(result) - 5873: 7(f16vec4) FAdd 5872 5871 - Store 5763(result) 5873 - 5874: 7(f16vec4) FunctionCall 87(testSparseTextureGatherOffset() - 5875: 7(f16vec4) Load 5763(result) - 5876: 7(f16vec4) FAdd 5875 5874 - Store 5763(result) 5876 - 5877: 7(f16vec4) FunctionCall 89(testSparseTextureGatherOffsets() - 5878: 7(f16vec4) Load 5763(result) - 5879: 7(f16vec4) FAdd 5878 5877 - Store 5763(result) 5879 - 5880: 7(f16vec4) FunctionCall 91(testSparseTextureGatherLod() - 5881: 7(f16vec4) Load 5763(result) - 5882: 7(f16vec4) FAdd 5881 5880 - Store 5763(result) 5882 - 5883: 7(f16vec4) FunctionCall 93(testSparseTextureGatherLodOffset() - 5884: 7(f16vec4) Load 5763(result) - 5885: 7(f16vec4) FAdd 5884 5883 - Store 5763(result) 5885 - 5886: 7(f16vec4) FunctionCall 95(testSparseTextureGatherLodOffsets() - 5887: 7(f16vec4) Load 5763(result) - 5888: 7(f16vec4) FAdd 5887 5886 - Store 5763(result) 5888 - 5889: 7(f16vec4) FunctionCall 97(testSparseImageLoad() - 5890: 7(f16vec4) Load 5763(result) - 5891: 7(f16vec4) FAdd 5890 5889 - Store 5763(result) 5891 - 5892: 7(f16vec4) FunctionCall 99(testSparseTextureClamp() - 5893: 7(f16vec4) Load 5763(result) - 5894: 7(f16vec4) FAdd 5893 5892 - Store 5763(result) 5894 - 5895: 7(f16vec4) FunctionCall 101(testTextureClamp() - 5896: 7(f16vec4) Load 5763(result) - 5897: 7(f16vec4) FAdd 5896 5895 - Store 5763(result) 5897 - 5898: 7(f16vec4) FunctionCall 103(testSparseTextureOffsetClamp() - 5899: 7(f16vec4) Load 5763(result) - 5900: 7(f16vec4) FAdd 5899 5898 - Store 5763(result) 5900 - 5901: 7(f16vec4) FunctionCall 105(testTextureOffsetClamp() - 5902: 7(f16vec4) Load 5763(result) - 5903: 7(f16vec4) FAdd 5902 5901 - Store 5763(result) 5903 - 5904: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() - 5905: 7(f16vec4) Load 5763(result) - 5906: 7(f16vec4) FAdd 5905 5904 - Store 5763(result) 5906 - 5907: 7(f16vec4) FunctionCall 27(testTextureGrad() - 5908: 7(f16vec4) Load 5763(result) - 5909: 7(f16vec4) FAdd 5908 5907 - Store 5763(result) 5909 - 5910: 7(f16vec4) FunctionCall 111(testSparseTextureGradOffsetClamp() - 5911: 7(f16vec4) Load 5763(result) - 5912: 7(f16vec4) FAdd 5911 5910 - Store 5763(result) 5912 - 5913: 7(f16vec4) FunctionCall 113(testTextureGradOffsetClamp() - 5914: 7(f16vec4) Load 5763(result) - 5915: 7(f16vec4) FAdd 5914 5913 - Store 5763(result) 5915 - 5916: 7(f16vec4) FunctionCall 115(testCombinedTextureSampler() - 5917: 7(f16vec4) Load 5763(result) - 5918: 7(f16vec4) FAdd 5917 5916 - Store 5763(result) 5918 - 5919: 7(f16vec4) FunctionCall 117(testSubpassLoad() - 5920: 7(f16vec4) Load 5763(result) - 5921: 7(f16vec4) FAdd 5920 5919 - Store 5763(result) 5921 - 5924: 7(f16vec4) Load 5763(result) - 5925: 249(fvec4) FConvert 5924 - Store 5923(fragColor) 5925 + Store 5807(result) 5861 + 5862: 48(ivec4) FunctionCall 50(testTextureSize() + 5863: 7(f16vec4) ConvertSToF 5862 + 5864: 7(f16vec4) Load 5807(result) + 5865: 7(f16vec4) FAdd 5864 5863 + Store 5807(result) 5865 + 5866: 53(fvec2) FunctionCall 55(testTextureQueryLod() + 5867:154(f16vec2) FConvert 5866 + 5868: 7(f16vec4) Load 5807(result) + 5869:154(f16vec2) VectorShuffle 5868 5868 0 1 + 5870:154(f16vec2) FAdd 5869 5867 + 5871: 208(ptr) AccessChain 5807(result) 207 + 5872:6(float16_t) CompositeExtract 5870 0 + Store 5871 5872 + 5873: 208(ptr) AccessChain 5807(result) 2581 + 5874:6(float16_t) CompositeExtract 5870 1 + Store 5873 5874 + 5875: 47(int) FunctionCall 58(testTextureQueryLevels() + 5876:6(float16_t) ConvertSToF 5875 + 5877: 208(ptr) AccessChain 5807(result) 207 + 5878:6(float16_t) Load 5877 + 5879:6(float16_t) FAdd 5878 5876 + 5880: 208(ptr) AccessChain 5807(result) 207 + Store 5880 5879 + 5881: 47(int) FunctionCall 60(testTextureSamples() + 5882:6(float16_t) ConvertSToF 5881 + 5883: 208(ptr) AccessChain 5807(result) 207 + 5884:6(float16_t) Load 5883 + 5885:6(float16_t) FAdd 5884 5882 + 5886: 208(ptr) AccessChain 5807(result) 207 + Store 5886 5885 + 5887: 7(f16vec4) FunctionCall 62(testImageLoad() + 5888: 7(f16vec4) Load 5807(result) + 5889: 7(f16vec4) FAdd 5888 5887 + Store 5807(result) 5889 + 5891: 7(f16vec4) Load 5807(result) + Store 5890(param) 5891 + 5892: 2 FunctionCall 67(testImageStore(vf164;) 5890(param) + 5893: 7(f16vec4) FunctionCall 69(testSparseTexture() + 5894: 7(f16vec4) Load 5807(result) + 5895: 7(f16vec4) FAdd 5894 5893 + Store 5807(result) 5895 + 5896: 7(f16vec4) FunctionCall 71(testSparseTextureLod() + 5897: 7(f16vec4) Load 5807(result) + 5898: 7(f16vec4) FAdd 5897 5896 + Store 5807(result) 5898 + 5899: 7(f16vec4) FunctionCall 73(testSparseTextureOffset() + 5900: 7(f16vec4) Load 5807(result) + 5901: 7(f16vec4) FAdd 5900 5899 + Store 5807(result) 5901 + 5902: 7(f16vec4) FunctionCall 75(testSparseTextureLodOffset() + 5903: 7(f16vec4) Load 5807(result) + 5904: 7(f16vec4) FAdd 5903 5902 + Store 5807(result) 5904 + 5905: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() + 5906: 7(f16vec4) Load 5807(result) + 5907: 7(f16vec4) FAdd 5906 5905 + Store 5807(result) 5907 + 5908: 7(f16vec4) FunctionCall 79(testSparseTextureGradOffset() + 5909: 7(f16vec4) Load 5807(result) + 5910: 7(f16vec4) FAdd 5909 5908 + Store 5807(result) 5910 + 5911: 7(f16vec4) FunctionCall 81(testSparseTexelFetch() + 5912: 7(f16vec4) Load 5807(result) + 5913: 7(f16vec4) FAdd 5912 5911 + Store 5807(result) 5913 + 5914: 7(f16vec4) FunctionCall 83(testSparseTexelFetchOffset() + 5915: 7(f16vec4) Load 5807(result) + 5916: 7(f16vec4) FAdd 5915 5914 + Store 5807(result) 5916 + 5917: 7(f16vec4) FunctionCall 85(testSparseTextureGather() + 5918: 7(f16vec4) Load 5807(result) + 5919: 7(f16vec4) FAdd 5918 5917 + Store 5807(result) 5919 + 5920: 7(f16vec4) FunctionCall 87(testSparseTextureGatherOffset() + 5921: 7(f16vec4) Load 5807(result) + 5922: 7(f16vec4) FAdd 5921 5920 + Store 5807(result) 5922 + 5923: 7(f16vec4) FunctionCall 89(testSparseTextureGatherOffsets() + 5924: 7(f16vec4) Load 5807(result) + 5925: 7(f16vec4) FAdd 5924 5923 + Store 5807(result) 5925 + 5926: 7(f16vec4) FunctionCall 91(testSparseTextureGatherLod() + 5927: 7(f16vec4) Load 5807(result) + 5928: 7(f16vec4) FAdd 5927 5926 + Store 5807(result) 5928 + 5929: 7(f16vec4) FunctionCall 93(testSparseTextureGatherLodOffset() + 5930: 7(f16vec4) Load 5807(result) + 5931: 7(f16vec4) FAdd 5930 5929 + Store 5807(result) 5931 + 5932: 7(f16vec4) FunctionCall 95(testSparseTextureGatherLodOffsets() + 5933: 7(f16vec4) Load 5807(result) + 5934: 7(f16vec4) FAdd 5933 5932 + Store 5807(result) 5934 + 5935: 7(f16vec4) FunctionCall 97(testSparseImageLoad() + 5936: 7(f16vec4) Load 5807(result) + 5937: 7(f16vec4) FAdd 5936 5935 + Store 5807(result) 5937 + 5938: 7(f16vec4) FunctionCall 99(testSparseTextureClamp() + 5939: 7(f16vec4) Load 5807(result) + 5940: 7(f16vec4) FAdd 5939 5938 + Store 5807(result) 5940 + 5941: 7(f16vec4) FunctionCall 101(testTextureClamp() + 5942: 7(f16vec4) Load 5807(result) + 5943: 7(f16vec4) FAdd 5942 5941 + Store 5807(result) 5943 + 5944: 7(f16vec4) FunctionCall 103(testSparseTextureOffsetClamp() + 5945: 7(f16vec4) Load 5807(result) + 5946: 7(f16vec4) FAdd 5945 5944 + Store 5807(result) 5946 + 5947: 7(f16vec4) FunctionCall 105(testTextureOffsetClamp() + 5948: 7(f16vec4) Load 5807(result) + 5949: 7(f16vec4) FAdd 5948 5947 + Store 5807(result) 5949 + 5950: 7(f16vec4) FunctionCall 77(testSparseTextureGrad() + 5951: 7(f16vec4) Load 5807(result) + 5952: 7(f16vec4) FAdd 5951 5950 + Store 5807(result) 5952 + 5953: 7(f16vec4) FunctionCall 27(testTextureGrad() + 5954: 7(f16vec4) Load 5807(result) + 5955: 7(f16vec4) FAdd 5954 5953 + Store 5807(result) 5955 + 5956: 7(f16vec4) FunctionCall 111(testSparseTextureGradOffsetClamp() + 5957: 7(f16vec4) Load 5807(result) + 5958: 7(f16vec4) FAdd 5957 5956 + Store 5807(result) 5958 + 5959: 7(f16vec4) FunctionCall 113(testTextureGradOffsetClamp() + 5960: 7(f16vec4) Load 5807(result) + 5961: 7(f16vec4) FAdd 5960 5959 + Store 5807(result) 5961 + 5962: 7(f16vec4) FunctionCall 115(testCombinedTextureSampler() + 5963: 7(f16vec4) Load 5807(result) + 5964: 7(f16vec4) FAdd 5963 5962 + Store 5807(result) 5964 + 5965: 7(f16vec4) FunctionCall 117(testSubpassLoad() + 5966: 7(f16vec4) Load 5807(result) + 5967: 7(f16vec4) FAdd 5966 5965 + Store 5807(result) 5967 + 5970: 7(f16vec4) Load 5807(result) + 5971: 249(fvec4) FConvert 5970 + Store 5969(fragColor) 5971 Return FunctionEnd 9(testTexture(): 7(f16vec4) Function None 8 @@ -3463,3619 +3468,3682 @@ Validation failed 2576: 48(ivec4) Load 2559(size) 2577: 721(ivec2) VectorShuffle 2576 2576 0 1 2578: 721(ivec2) IAdd 2577 2575 - 2579: 48(ivec4) Load 2559(size) - 2580: 48(ivec4) VectorShuffle 2579 2578 4 5 2 3 - Store 2559(size) 2580 - 2581: 163 Load 165(s3D) - 2582: 52(float) Load 565(lod) - 2583: 47(int) ConvertFToS 2582 - 2584: 162 Image 2581 - 2585: 734(ivec3) ImageQuerySizeLod 2584 2583 - 2586: 48(ivec4) Load 2559(size) - 2587: 734(ivec3) VectorShuffle 2586 2586 0 1 2 - 2588: 734(ivec3) IAdd 2587 2585 + 2579: 2566(ptr) AccessChain 2559(size) 207 + 2580: 47(int) CompositeExtract 2578 0 + Store 2579 2580 + 2582: 2566(ptr) AccessChain 2559(size) 2581 + 2583: 47(int) CompositeExtract 2578 1 + Store 2582 2583 + 2584: 163 Load 165(s3D) + 2585: 52(float) Load 565(lod) + 2586: 47(int) ConvertFToS 2585 + 2587: 162 Image 2584 + 2588: 734(ivec3) ImageQuerySizeLod 2587 2586 2589: 48(ivec4) Load 2559(size) - 2590: 48(ivec4) VectorShuffle 2589 2588 4 5 6 3 - Store 2559(size) 2590 - 2591: 184 Load 186(sCube) - 2592: 52(float) Load 565(lod) - 2593: 47(int) ConvertFToS 2592 - 2594: 183 Image 2591 - 2595: 721(ivec2) ImageQuerySizeLod 2594 2593 - 2596: 48(ivec4) Load 2559(size) - 2597: 721(ivec2) VectorShuffle 2596 2596 0 1 - 2598: 721(ivec2) IAdd 2597 2595 - 2599: 48(ivec4) Load 2559(size) - 2600: 48(ivec4) VectorShuffle 2599 2598 4 5 2 3 - Store 2559(size) 2600 - 2601: 199 Load 201(s1DShadow) - 2602: 52(float) Load 565(lod) - 2603: 47(int) ConvertFToS 2602 - 2604: 198 Image 2601 - 2605: 47(int) ImageQuerySizeLod 2604 2603 - 2606: 2566(ptr) AccessChain 2559(size) 207 - 2607: 47(int) Load 2606 - 2608: 47(int) IAdd 2607 2605 - 2609: 2566(ptr) AccessChain 2559(size) 207 - Store 2609 2608 - 2610: 224 Load 226(s2DShadow) - 2611: 52(float) Load 565(lod) - 2612: 47(int) ConvertFToS 2611 - 2613: 223 Image 2610 - 2614: 721(ivec2) ImageQuerySizeLod 2613 2612 - 2615: 48(ivec4) Load 2559(size) - 2616: 721(ivec2) VectorShuffle 2615 2615 0 1 - 2617: 721(ivec2) IAdd 2616 2614 - 2618: 48(ivec4) Load 2559(size) - 2619: 48(ivec4) VectorShuffle 2618 2617 4 5 2 3 - Store 2559(size) 2619 - 2620: 245 Load 247(sCubeShadow) + 2590: 734(ivec3) VectorShuffle 2589 2589 0 1 2 + 2591: 734(ivec3) IAdd 2590 2588 + 2592: 2566(ptr) AccessChain 2559(size) 207 + 2593: 47(int) CompositeExtract 2591 0 + Store 2592 2593 + 2594: 2566(ptr) AccessChain 2559(size) 2581 + 2595: 47(int) CompositeExtract 2591 1 + Store 2594 2595 + 2597: 2566(ptr) AccessChain 2559(size) 2596 + 2598: 47(int) CompositeExtract 2591 2 + Store 2597 2598 + 2599: 184 Load 186(sCube) + 2600: 52(float) Load 565(lod) + 2601: 47(int) ConvertFToS 2600 + 2602: 183 Image 2599 + 2603: 721(ivec2) ImageQuerySizeLod 2602 2601 + 2604: 48(ivec4) Load 2559(size) + 2605: 721(ivec2) VectorShuffle 2604 2604 0 1 + 2606: 721(ivec2) IAdd 2605 2603 + 2607: 2566(ptr) AccessChain 2559(size) 207 + 2608: 47(int) CompositeExtract 2606 0 + Store 2607 2608 + 2609: 2566(ptr) AccessChain 2559(size) 2581 + 2610: 47(int) CompositeExtract 2606 1 + Store 2609 2610 + 2611: 199 Load 201(s1DShadow) + 2612: 52(float) Load 565(lod) + 2613: 47(int) ConvertFToS 2612 + 2614: 198 Image 2611 + 2615: 47(int) ImageQuerySizeLod 2614 2613 + 2616: 2566(ptr) AccessChain 2559(size) 207 + 2617: 47(int) Load 2616 + 2618: 47(int) IAdd 2617 2615 + 2619: 2566(ptr) AccessChain 2559(size) 207 + Store 2619 2618 + 2620: 224 Load 226(s2DShadow) 2621: 52(float) Load 565(lod) 2622: 47(int) ConvertFToS 2621 - 2623: 244 Image 2620 + 2623: 223 Image 2620 2624: 721(ivec2) ImageQuerySizeLod 2623 2622 2625: 48(ivec4) Load 2559(size) 2626: 721(ivec2) VectorShuffle 2625 2625 0 1 2627: 721(ivec2) IAdd 2626 2624 - 2628: 48(ivec4) Load 2559(size) - 2629: 48(ivec4) VectorShuffle 2628 2627 4 5 2 3 - Store 2559(size) 2629 - 2630: 299 Load 301(sCubeArray) - 2631: 52(float) Load 565(lod) - 2632: 47(int) ConvertFToS 2631 - 2633: 298 Image 2630 - 2634: 734(ivec3) ImageQuerySizeLod 2633 2632 - 2635: 48(ivec4) Load 2559(size) - 2636: 734(ivec3) VectorShuffle 2635 2635 0 1 2 - 2637: 734(ivec3) IAdd 2636 2634 - 2638: 48(ivec4) Load 2559(size) - 2639: 48(ivec4) VectorShuffle 2638 2637 4 5 6 3 - Store 2559(size) 2639 - 2640: 391 Load 393(sCubeArrayShadow) - 2641: 52(float) Load 565(lod) - 2642: 47(int) ConvertFToS 2641 - 2643: 390 Image 2640 - 2644: 734(ivec3) ImageQuerySizeLod 2643 2642 - 2645: 48(ivec4) Load 2559(size) - 2646: 734(ivec3) VectorShuffle 2645 2645 0 1 2 - 2647: 734(ivec3) IAdd 2646 2644 - 2648: 48(ivec4) Load 2559(size) - 2649: 48(ivec4) VectorShuffle 2648 2647 4 5 6 3 - Store 2559(size) 2649 - 2650: 357 Load 359(s2DRect) - 2651: 356 Image 2650 - 2652: 721(ivec2) ImageQuerySize 2651 - 2653: 48(ivec4) Load 2559(size) - 2654: 721(ivec2) VectorShuffle 2653 2653 0 1 - 2655: 721(ivec2) IAdd 2654 2652 - 2656: 48(ivec4) Load 2559(size) - 2657: 48(ivec4) VectorShuffle 2656 2655 4 5 2 3 - Store 2559(size) 2657 - 2658: 371 Load 373(s2DRectShadow) - 2659: 370 Image 2658 - 2660: 721(ivec2) ImageQuerySize 2659 - 2661: 48(ivec4) Load 2559(size) - 2662: 721(ivec2) VectorShuffle 2661 2661 0 1 - 2663: 721(ivec2) IAdd 2662 2660 - 2664: 48(ivec4) Load 2559(size) - 2665: 48(ivec4) VectorShuffle 2664 2663 4 5 2 3 - Store 2559(size) 2665 - 2666: 269 Load 271(s1DArray) - 2667: 52(float) Load 565(lod) - 2668: 47(int) ConvertFToS 2667 - 2669: 268 Image 2666 - 2670: 721(ivec2) ImageQuerySizeLod 2669 2668 - 2671: 48(ivec4) Load 2559(size) - 2672: 721(ivec2) VectorShuffle 2671 2671 0 1 - 2673: 721(ivec2) IAdd 2672 2670 - 2674: 48(ivec4) Load 2559(size) - 2675: 48(ivec4) VectorShuffle 2674 2673 4 5 2 3 - Store 2559(size) 2675 - 2676: 284 Load 286(s2DArray) - 2677: 52(float) Load 565(lod) - 2678: 47(int) ConvertFToS 2677 - 2679: 283 Image 2676 - 2680: 734(ivec3) ImageQuerySizeLod 2679 2678 - 2681: 48(ivec4) Load 2559(size) - 2682: 734(ivec3) VectorShuffle 2681 2681 0 1 2 - 2683: 734(ivec3) IAdd 2682 2680 - 2684: 48(ivec4) Load 2559(size) - 2685: 48(ivec4) VectorShuffle 2684 2683 4 5 6 3 - Store 2559(size) 2685 - 2686: 316 Load 318(s1DArrayShadow) - 2687: 52(float) Load 565(lod) - 2688: 47(int) ConvertFToS 2687 - 2689: 315 Image 2686 - 2690: 721(ivec2) ImageQuerySizeLod 2689 2688 - 2691: 48(ivec4) Load 2559(size) - 2692: 721(ivec2) VectorShuffle 2691 2691 0 1 - 2693: 721(ivec2) IAdd 2692 2690 - 2694: 48(ivec4) Load 2559(size) - 2695: 48(ivec4) VectorShuffle 2694 2693 4 5 2 3 - Store 2559(size) 2695 - 2696: 337 Load 339(s2DArrayShadow) - 2697: 52(float) Load 565(lod) - 2698: 47(int) ConvertFToS 2697 - 2699: 336 Image 2696 - 2700: 734(ivec3) ImageQuerySizeLod 2699 2698 - 2701: 48(ivec4) Load 2559(size) - 2702: 734(ivec3) VectorShuffle 2701 2701 0 1 2 - 2703: 734(ivec3) IAdd 2702 2700 - 2704: 48(ivec4) Load 2559(size) - 2705: 48(ivec4) VectorShuffle 2704 2703 4 5 6 3 - Store 2559(size) 2705 - 2706: 1298 Load 1300(sBuffer) - 2707: 1297 Image 2706 - 2708: 47(int) ImageQuerySize 2707 - 2709: 2566(ptr) AccessChain 2559(size) 207 - 2710: 47(int) Load 2709 - 2711: 47(int) IAdd 2710 2708 + 2628: 2566(ptr) AccessChain 2559(size) 207 + 2629: 47(int) CompositeExtract 2627 0 + Store 2628 2629 + 2630: 2566(ptr) AccessChain 2559(size) 2581 + 2631: 47(int) CompositeExtract 2627 1 + Store 2630 2631 + 2632: 245 Load 247(sCubeShadow) + 2633: 52(float) Load 565(lod) + 2634: 47(int) ConvertFToS 2633 + 2635: 244 Image 2632 + 2636: 721(ivec2) ImageQuerySizeLod 2635 2634 + 2637: 48(ivec4) Load 2559(size) + 2638: 721(ivec2) VectorShuffle 2637 2637 0 1 + 2639: 721(ivec2) IAdd 2638 2636 + 2640: 2566(ptr) AccessChain 2559(size) 207 + 2641: 47(int) CompositeExtract 2639 0 + Store 2640 2641 + 2642: 2566(ptr) AccessChain 2559(size) 2581 + 2643: 47(int) CompositeExtract 2639 1 + Store 2642 2643 + 2644: 299 Load 301(sCubeArray) + 2645: 52(float) Load 565(lod) + 2646: 47(int) ConvertFToS 2645 + 2647: 298 Image 2644 + 2648: 734(ivec3) ImageQuerySizeLod 2647 2646 + 2649: 48(ivec4) Load 2559(size) + 2650: 734(ivec3) VectorShuffle 2649 2649 0 1 2 + 2651: 734(ivec3) IAdd 2650 2648 + 2652: 2566(ptr) AccessChain 2559(size) 207 + 2653: 47(int) CompositeExtract 2651 0 + Store 2652 2653 + 2654: 2566(ptr) AccessChain 2559(size) 2581 + 2655: 47(int) CompositeExtract 2651 1 + Store 2654 2655 + 2656: 2566(ptr) AccessChain 2559(size) 2596 + 2657: 47(int) CompositeExtract 2651 2 + Store 2656 2657 + 2658: 391 Load 393(sCubeArrayShadow) + 2659: 52(float) Load 565(lod) + 2660: 47(int) ConvertFToS 2659 + 2661: 390 Image 2658 + 2662: 734(ivec3) ImageQuerySizeLod 2661 2660 + 2663: 48(ivec4) Load 2559(size) + 2664: 734(ivec3) VectorShuffle 2663 2663 0 1 2 + 2665: 734(ivec3) IAdd 2664 2662 + 2666: 2566(ptr) AccessChain 2559(size) 207 + 2667: 47(int) CompositeExtract 2665 0 + Store 2666 2667 + 2668: 2566(ptr) AccessChain 2559(size) 2581 + 2669: 47(int) CompositeExtract 2665 1 + Store 2668 2669 + 2670: 2566(ptr) AccessChain 2559(size) 2596 + 2671: 47(int) CompositeExtract 2665 2 + Store 2670 2671 + 2672: 357 Load 359(s2DRect) + 2673: 356 Image 2672 + 2674: 721(ivec2) ImageQuerySize 2673 + 2675: 48(ivec4) Load 2559(size) + 2676: 721(ivec2) VectorShuffle 2675 2675 0 1 + 2677: 721(ivec2) IAdd 2676 2674 + 2678: 2566(ptr) AccessChain 2559(size) 207 + 2679: 47(int) CompositeExtract 2677 0 + Store 2678 2679 + 2680: 2566(ptr) AccessChain 2559(size) 2581 + 2681: 47(int) CompositeExtract 2677 1 + Store 2680 2681 + 2682: 371 Load 373(s2DRectShadow) + 2683: 370 Image 2682 + 2684: 721(ivec2) ImageQuerySize 2683 + 2685: 48(ivec4) Load 2559(size) + 2686: 721(ivec2) VectorShuffle 2685 2685 0 1 + 2687: 721(ivec2) IAdd 2686 2684 + 2688: 2566(ptr) AccessChain 2559(size) 207 + 2689: 47(int) CompositeExtract 2687 0 + Store 2688 2689 + 2690: 2566(ptr) AccessChain 2559(size) 2581 + 2691: 47(int) CompositeExtract 2687 1 + Store 2690 2691 + 2692: 269 Load 271(s1DArray) + 2693: 52(float) Load 565(lod) + 2694: 47(int) ConvertFToS 2693 + 2695: 268 Image 2692 + 2696: 721(ivec2) ImageQuerySizeLod 2695 2694 + 2697: 48(ivec4) Load 2559(size) + 2698: 721(ivec2) VectorShuffle 2697 2697 0 1 + 2699: 721(ivec2) IAdd 2698 2696 + 2700: 2566(ptr) AccessChain 2559(size) 207 + 2701: 47(int) CompositeExtract 2699 0 + Store 2700 2701 + 2702: 2566(ptr) AccessChain 2559(size) 2581 + 2703: 47(int) CompositeExtract 2699 1 + Store 2702 2703 + 2704: 284 Load 286(s2DArray) + 2705: 52(float) Load 565(lod) + 2706: 47(int) ConvertFToS 2705 + 2707: 283 Image 2704 + 2708: 734(ivec3) ImageQuerySizeLod 2707 2706 + 2709: 48(ivec4) Load 2559(size) + 2710: 734(ivec3) VectorShuffle 2709 2709 0 1 2 + 2711: 734(ivec3) IAdd 2710 2708 2712: 2566(ptr) AccessChain 2559(size) 207 - Store 2712 2711 - 2713: 1309 Load 1311(s2DMS) - 2714: 1308 Image 2713 - 2715: 721(ivec2) ImageQuerySize 2714 - 2716: 48(ivec4) Load 2559(size) - 2717: 721(ivec2) VectorShuffle 2716 2716 0 1 - 2718: 721(ivec2) IAdd 2717 2715 - 2719: 48(ivec4) Load 2559(size) - 2720: 48(ivec4) VectorShuffle 2719 2718 4 5 2 3 - Store 2559(size) 2720 - 2721: 1320 Load 1322(s2DMSArray) - 2722: 1319 Image 2721 - 2723: 734(ivec3) ImageQuerySize 2722 - 2724: 48(ivec4) Load 2559(size) - 2725: 734(ivec3) VectorShuffle 2724 2724 0 1 2 - 2726: 734(ivec3) IAdd 2725 2723 - 2727: 48(ivec4) Load 2559(size) - 2728: 48(ivec4) VectorShuffle 2727 2726 4 5 6 3 - Store 2559(size) 2728 - 2729: 48(ivec4) Load 2559(size) - ReturnValue 2729 + 2713: 47(int) CompositeExtract 2711 0 + Store 2712 2713 + 2714: 2566(ptr) AccessChain 2559(size) 2581 + 2715: 47(int) CompositeExtract 2711 1 + Store 2714 2715 + 2716: 2566(ptr) AccessChain 2559(size) 2596 + 2717: 47(int) CompositeExtract 2711 2 + Store 2716 2717 + 2718: 316 Load 318(s1DArrayShadow) + 2719: 52(float) Load 565(lod) + 2720: 47(int) ConvertFToS 2719 + 2721: 315 Image 2718 + 2722: 721(ivec2) ImageQuerySizeLod 2721 2720 + 2723: 48(ivec4) Load 2559(size) + 2724: 721(ivec2) VectorShuffle 2723 2723 0 1 + 2725: 721(ivec2) IAdd 2724 2722 + 2726: 2566(ptr) AccessChain 2559(size) 207 + 2727: 47(int) CompositeExtract 2725 0 + Store 2726 2727 + 2728: 2566(ptr) AccessChain 2559(size) 2581 + 2729: 47(int) CompositeExtract 2725 1 + Store 2728 2729 + 2730: 337 Load 339(s2DArrayShadow) + 2731: 52(float) Load 565(lod) + 2732: 47(int) ConvertFToS 2731 + 2733: 336 Image 2730 + 2734: 734(ivec3) ImageQuerySizeLod 2733 2732 + 2735: 48(ivec4) Load 2559(size) + 2736: 734(ivec3) VectorShuffle 2735 2735 0 1 2 + 2737: 734(ivec3) IAdd 2736 2734 + 2738: 2566(ptr) AccessChain 2559(size) 207 + 2739: 47(int) CompositeExtract 2737 0 + Store 2738 2739 + 2740: 2566(ptr) AccessChain 2559(size) 2581 + 2741: 47(int) CompositeExtract 2737 1 + Store 2740 2741 + 2742: 2566(ptr) AccessChain 2559(size) 2596 + 2743: 47(int) CompositeExtract 2737 2 + Store 2742 2743 + 2744: 1298 Load 1300(sBuffer) + 2745: 1297 Image 2744 + 2746: 47(int) ImageQuerySize 2745 + 2747: 2566(ptr) AccessChain 2559(size) 207 + 2748: 47(int) Load 2747 + 2749: 47(int) IAdd 2748 2746 + 2750: 2566(ptr) AccessChain 2559(size) 207 + Store 2750 2749 + 2751: 1309 Load 1311(s2DMS) + 2752: 1308 Image 2751 + 2753: 721(ivec2) ImageQuerySize 2752 + 2754: 48(ivec4) Load 2559(size) + 2755: 721(ivec2) VectorShuffle 2754 2754 0 1 + 2756: 721(ivec2) IAdd 2755 2753 + 2757: 2566(ptr) AccessChain 2559(size) 207 + 2758: 47(int) CompositeExtract 2756 0 + Store 2757 2758 + 2759: 2566(ptr) AccessChain 2559(size) 2581 + 2760: 47(int) CompositeExtract 2756 1 + Store 2759 2760 + 2761: 1320 Load 1322(s2DMSArray) + 2762: 1319 Image 2761 + 2763: 734(ivec3) ImageQuerySize 2762 + 2764: 48(ivec4) Load 2559(size) + 2765: 734(ivec3) VectorShuffle 2764 2764 0 1 2 + 2766: 734(ivec3) IAdd 2765 2763 + 2767: 2566(ptr) AccessChain 2559(size) 207 + 2768: 47(int) CompositeExtract 2766 0 + Store 2767 2768 + 2769: 2566(ptr) AccessChain 2559(size) 2581 + 2770: 47(int) CompositeExtract 2766 1 + Store 2769 2770 + 2771: 2566(ptr) AccessChain 2559(size) 2596 + 2772: 47(int) CompositeExtract 2766 2 + Store 2771 2772 + 2773: 48(ivec4) Load 2559(size) + ReturnValue 2773 FunctionEnd 55(testTextureQueryLod(): 53(fvec2) Function None 54 56: Label - 2733(lod): 2732(ptr) Variable Function - Store 2733(lod) 2735 - 2736: 123 Load 125(s1D) - 2737: 52(float) Load 128(c1) - 2738: 53(fvec2) ImageQueryLod 2736 2737 - 2739: 53(fvec2) Load 2733(lod) - 2740: 53(fvec2) FAdd 2739 2738 - Store 2733(lod) 2740 - 2741: 123 Load 125(s1D) - 2742:6(float16_t) Load 135(f16c1) - 2743:154(f16vec2) ImageQueryLod 2741 2742 - 2744: 53(fvec2) Load 2733(lod) - 2745: 53(fvec2) FAdd 2744 2743 - Store 2733(lod) 2745 - 2746: 143 Load 145(s2D) - 2747: 53(fvec2) Load 148(c2) - 2748: 53(fvec2) ImageQueryLod 2746 2747 - 2749: 53(fvec2) Load 2733(lod) - 2750: 53(fvec2) FAdd 2749 2748 - Store 2733(lod) 2750 - 2751: 143 Load 145(s2D) - 2752:154(f16vec2) Load 156(f16c2) - 2753:154(f16vec2) ImageQueryLod 2751 2752 - 2754: 53(fvec2) Load 2733(lod) - 2755: 53(fvec2) FAdd 2754 2753 - Store 2733(lod) 2755 - 2756: 163 Load 165(s3D) - 2757: 167(fvec3) Load 169(c3) - 2758: 53(fvec2) ImageQueryLod 2756 2757 - 2759: 53(fvec2) Load 2733(lod) - 2760: 53(fvec2) FAdd 2759 2758 - Store 2733(lod) 2760 - 2761: 163 Load 165(s3D) - 2762:175(f16vec3) Load 177(f16c3) - 2763:154(f16vec2) ImageQueryLod 2761 2762 - 2764: 53(fvec2) Load 2733(lod) - 2765: 53(fvec2) FAdd 2764 2763 - Store 2733(lod) 2765 - 2766: 184 Load 186(sCube) - 2767: 167(fvec3) Load 169(c3) - 2768: 53(fvec2) ImageQueryLod 2766 2767 - 2769: 53(fvec2) Load 2733(lod) - 2770: 53(fvec2) FAdd 2769 2768 - Store 2733(lod) 2770 - 2771: 184 Load 186(sCube) - 2772:175(f16vec3) Load 177(f16c3) - 2773:154(f16vec2) ImageQueryLod 2771 2772 - 2774: 53(fvec2) Load 2733(lod) - 2775: 53(fvec2) FAdd 2774 2773 - Store 2733(lod) 2775 - 2776: 269 Load 271(s1DArray) - 2777: 52(float) Load 128(c1) - 2778: 53(fvec2) ImageQueryLod 2776 2777 - 2779: 53(fvec2) Load 2733(lod) - 2780: 53(fvec2) FAdd 2779 2778 - Store 2733(lod) 2780 - 2781: 269 Load 271(s1DArray) - 2782:6(float16_t) Load 135(f16c1) - 2783:154(f16vec2) ImageQueryLod 2781 2782 - 2784: 53(fvec2) Load 2733(lod) - 2785: 53(fvec2) FAdd 2784 2783 - Store 2733(lod) 2785 - 2786: 284 Load 286(s2DArray) - 2787: 53(fvec2) Load 148(c2) - 2788: 53(fvec2) ImageQueryLod 2786 2787 - 2789: 53(fvec2) Load 2733(lod) - 2790: 53(fvec2) FAdd 2789 2788 - Store 2733(lod) 2790 - 2791: 284 Load 286(s2DArray) - 2792:154(f16vec2) Load 156(f16c2) - 2793:154(f16vec2) ImageQueryLod 2791 2792 - 2794: 53(fvec2) Load 2733(lod) - 2795: 53(fvec2) FAdd 2794 2793 - Store 2733(lod) 2795 - 2796: 299 Load 301(sCubeArray) - 2797: 167(fvec3) Load 169(c3) - 2798: 53(fvec2) ImageQueryLod 2796 2797 - 2799: 53(fvec2) Load 2733(lod) - 2800: 53(fvec2) FAdd 2799 2798 - Store 2733(lod) 2800 - 2801: 299 Load 301(sCubeArray) - 2802:175(f16vec3) Load 177(f16c3) - 2803:154(f16vec2) ImageQueryLod 2801 2802 - 2804: 53(fvec2) Load 2733(lod) - 2805: 53(fvec2) FAdd 2804 2803 - Store 2733(lod) 2805 - 2806: 199 Load 201(s1DShadow) - 2807: 52(float) Load 128(c1) - 2808: 53(fvec2) ImageQueryLod 2806 2807 - 2809: 53(fvec2) Load 2733(lod) - 2810: 53(fvec2) FAdd 2809 2808 - Store 2733(lod) 2810 - 2811: 199 Load 201(s1DShadow) - 2812:6(float16_t) Load 135(f16c1) - 2813:154(f16vec2) ImageQueryLod 2811 2812 - 2814: 53(fvec2) Load 2733(lod) - 2815: 53(fvec2) FAdd 2814 2813 - Store 2733(lod) 2815 - 2816: 224 Load 226(s2DShadow) - 2817: 53(fvec2) Load 148(c2) - 2818: 53(fvec2) ImageQueryLod 2816 2817 - 2819: 53(fvec2) Load 2733(lod) - 2820: 53(fvec2) FAdd 2819 2818 - Store 2733(lod) 2820 - 2821: 224 Load 226(s2DShadow) - 2822:154(f16vec2) Load 156(f16c2) - 2823:154(f16vec2) ImageQueryLod 2821 2822 - 2824: 53(fvec2) Load 2733(lod) - 2825: 53(fvec2) FAdd 2824 2823 - Store 2733(lod) 2825 - 2826: 391 Load 393(sCubeArrayShadow) - 2827: 167(fvec3) Load 169(c3) - 2828: 53(fvec2) ImageQueryLod 2826 2827 - 2829: 53(fvec2) Load 2733(lod) - 2830: 53(fvec2) FAdd 2829 2828 - Store 2733(lod) 2830 - 2831: 391 Load 393(sCubeArrayShadow) - 2832:175(f16vec3) Load 177(f16c3) - 2833:154(f16vec2) ImageQueryLod 2831 2832 - 2834: 53(fvec2) Load 2733(lod) - 2835: 53(fvec2) FAdd 2834 2833 - Store 2733(lod) 2835 - 2836: 316 Load 318(s1DArrayShadow) - 2837: 52(float) Load 128(c1) - 2838: 53(fvec2) ImageQueryLod 2836 2837 - 2839: 53(fvec2) Load 2733(lod) - 2840: 53(fvec2) FAdd 2839 2838 - Store 2733(lod) 2840 - 2841: 316 Load 318(s1DArrayShadow) - 2842:6(float16_t) Load 135(f16c1) - 2843:154(f16vec2) ImageQueryLod 2841 2842 - 2844: 53(fvec2) Load 2733(lod) - 2845: 53(fvec2) FAdd 2844 2843 - Store 2733(lod) 2845 - 2846: 337 Load 339(s2DArrayShadow) - 2847: 53(fvec2) Load 148(c2) - 2848: 53(fvec2) ImageQueryLod 2846 2847 - 2849: 53(fvec2) Load 2733(lod) - 2850: 53(fvec2) FAdd 2849 2848 - Store 2733(lod) 2850 - 2851: 337 Load 339(s2DArrayShadow) - 2852:154(f16vec2) Load 156(f16c2) - 2853:154(f16vec2) ImageQueryLod 2851 2852 - 2854: 53(fvec2) Load 2733(lod) - 2855: 53(fvec2) FAdd 2854 2853 - Store 2733(lod) 2855 - 2856: 391 Load 393(sCubeArrayShadow) - 2857: 167(fvec3) Load 169(c3) - 2858: 53(fvec2) ImageQueryLod 2856 2857 - 2859: 53(fvec2) Load 2733(lod) - 2860: 53(fvec2) FAdd 2859 2858 - Store 2733(lod) 2860 - 2861: 391 Load 393(sCubeArrayShadow) - 2862:175(f16vec3) Load 177(f16c3) - 2863:154(f16vec2) ImageQueryLod 2861 2862 - 2864: 53(fvec2) Load 2733(lod) - 2865: 53(fvec2) FAdd 2864 2863 - Store 2733(lod) 2865 - 2866: 53(fvec2) Load 2733(lod) - ReturnValue 2866 + 2777(lod): 2776(ptr) Variable Function + Store 2777(lod) 2779 + 2780: 123 Load 125(s1D) + 2781: 52(float) Load 128(c1) + 2782: 53(fvec2) ImageQueryLod 2780 2781 + 2783: 53(fvec2) Load 2777(lod) + 2784: 53(fvec2) FAdd 2783 2782 + Store 2777(lod) 2784 + 2785: 123 Load 125(s1D) + 2786:6(float16_t) Load 135(f16c1) + 2787:154(f16vec2) ImageQueryLod 2785 2786 + 2788: 53(fvec2) Load 2777(lod) + 2789: 53(fvec2) FAdd 2788 2787 + Store 2777(lod) 2789 + 2790: 143 Load 145(s2D) + 2791: 53(fvec2) Load 148(c2) + 2792: 53(fvec2) ImageQueryLod 2790 2791 + 2793: 53(fvec2) Load 2777(lod) + 2794: 53(fvec2) FAdd 2793 2792 + Store 2777(lod) 2794 + 2795: 143 Load 145(s2D) + 2796:154(f16vec2) Load 156(f16c2) + 2797:154(f16vec2) ImageQueryLod 2795 2796 + 2798: 53(fvec2) Load 2777(lod) + 2799: 53(fvec2) FAdd 2798 2797 + Store 2777(lod) 2799 + 2800: 163 Load 165(s3D) + 2801: 167(fvec3) Load 169(c3) + 2802: 53(fvec2) ImageQueryLod 2800 2801 + 2803: 53(fvec2) Load 2777(lod) + 2804: 53(fvec2) FAdd 2803 2802 + Store 2777(lod) 2804 + 2805: 163 Load 165(s3D) + 2806:175(f16vec3) Load 177(f16c3) + 2807:154(f16vec2) ImageQueryLod 2805 2806 + 2808: 53(fvec2) Load 2777(lod) + 2809: 53(fvec2) FAdd 2808 2807 + Store 2777(lod) 2809 + 2810: 184 Load 186(sCube) + 2811: 167(fvec3) Load 169(c3) + 2812: 53(fvec2) ImageQueryLod 2810 2811 + 2813: 53(fvec2) Load 2777(lod) + 2814: 53(fvec2) FAdd 2813 2812 + Store 2777(lod) 2814 + 2815: 184 Load 186(sCube) + 2816:175(f16vec3) Load 177(f16c3) + 2817:154(f16vec2) ImageQueryLod 2815 2816 + 2818: 53(fvec2) Load 2777(lod) + 2819: 53(fvec2) FAdd 2818 2817 + Store 2777(lod) 2819 + 2820: 269 Load 271(s1DArray) + 2821: 52(float) Load 128(c1) + 2822: 53(fvec2) ImageQueryLod 2820 2821 + 2823: 53(fvec2) Load 2777(lod) + 2824: 53(fvec2) FAdd 2823 2822 + Store 2777(lod) 2824 + 2825: 269 Load 271(s1DArray) + 2826:6(float16_t) Load 135(f16c1) + 2827:154(f16vec2) ImageQueryLod 2825 2826 + 2828: 53(fvec2) Load 2777(lod) + 2829: 53(fvec2) FAdd 2828 2827 + Store 2777(lod) 2829 + 2830: 284 Load 286(s2DArray) + 2831: 53(fvec2) Load 148(c2) + 2832: 53(fvec2) ImageQueryLod 2830 2831 + 2833: 53(fvec2) Load 2777(lod) + 2834: 53(fvec2) FAdd 2833 2832 + Store 2777(lod) 2834 + 2835: 284 Load 286(s2DArray) + 2836:154(f16vec2) Load 156(f16c2) + 2837:154(f16vec2) ImageQueryLod 2835 2836 + 2838: 53(fvec2) Load 2777(lod) + 2839: 53(fvec2) FAdd 2838 2837 + Store 2777(lod) 2839 + 2840: 299 Load 301(sCubeArray) + 2841: 167(fvec3) Load 169(c3) + 2842: 53(fvec2) ImageQueryLod 2840 2841 + 2843: 53(fvec2) Load 2777(lod) + 2844: 53(fvec2) FAdd 2843 2842 + Store 2777(lod) 2844 + 2845: 299 Load 301(sCubeArray) + 2846:175(f16vec3) Load 177(f16c3) + 2847:154(f16vec2) ImageQueryLod 2845 2846 + 2848: 53(fvec2) Load 2777(lod) + 2849: 53(fvec2) FAdd 2848 2847 + Store 2777(lod) 2849 + 2850: 199 Load 201(s1DShadow) + 2851: 52(float) Load 128(c1) + 2852: 53(fvec2) ImageQueryLod 2850 2851 + 2853: 53(fvec2) Load 2777(lod) + 2854: 53(fvec2) FAdd 2853 2852 + Store 2777(lod) 2854 + 2855: 199 Load 201(s1DShadow) + 2856:6(float16_t) Load 135(f16c1) + 2857:154(f16vec2) ImageQueryLod 2855 2856 + 2858: 53(fvec2) Load 2777(lod) + 2859: 53(fvec2) FAdd 2858 2857 + Store 2777(lod) 2859 + 2860: 224 Load 226(s2DShadow) + 2861: 53(fvec2) Load 148(c2) + 2862: 53(fvec2) ImageQueryLod 2860 2861 + 2863: 53(fvec2) Load 2777(lod) + 2864: 53(fvec2) FAdd 2863 2862 + Store 2777(lod) 2864 + 2865: 224 Load 226(s2DShadow) + 2866:154(f16vec2) Load 156(f16c2) + 2867:154(f16vec2) ImageQueryLod 2865 2866 + 2868: 53(fvec2) Load 2777(lod) + 2869: 53(fvec2) FAdd 2868 2867 + Store 2777(lod) 2869 + 2870: 391 Load 393(sCubeArrayShadow) + 2871: 167(fvec3) Load 169(c3) + 2872: 53(fvec2) ImageQueryLod 2870 2871 + 2873: 53(fvec2) Load 2777(lod) + 2874: 53(fvec2) FAdd 2873 2872 + Store 2777(lod) 2874 + 2875: 391 Load 393(sCubeArrayShadow) + 2876:175(f16vec3) Load 177(f16c3) + 2877:154(f16vec2) ImageQueryLod 2875 2876 + 2878: 53(fvec2) Load 2777(lod) + 2879: 53(fvec2) FAdd 2878 2877 + Store 2777(lod) 2879 + 2880: 316 Load 318(s1DArrayShadow) + 2881: 52(float) Load 128(c1) + 2882: 53(fvec2) ImageQueryLod 2880 2881 + 2883: 53(fvec2) Load 2777(lod) + 2884: 53(fvec2) FAdd 2883 2882 + Store 2777(lod) 2884 + 2885: 316 Load 318(s1DArrayShadow) + 2886:6(float16_t) Load 135(f16c1) + 2887:154(f16vec2) ImageQueryLod 2885 2886 + 2888: 53(fvec2) Load 2777(lod) + 2889: 53(fvec2) FAdd 2888 2887 + Store 2777(lod) 2889 + 2890: 337 Load 339(s2DArrayShadow) + 2891: 53(fvec2) Load 148(c2) + 2892: 53(fvec2) ImageQueryLod 2890 2891 + 2893: 53(fvec2) Load 2777(lod) + 2894: 53(fvec2) FAdd 2893 2892 + Store 2777(lod) 2894 + 2895: 337 Load 339(s2DArrayShadow) + 2896:154(f16vec2) Load 156(f16c2) + 2897:154(f16vec2) ImageQueryLod 2895 2896 + 2898: 53(fvec2) Load 2777(lod) + 2899: 53(fvec2) FAdd 2898 2897 + Store 2777(lod) 2899 + 2900: 391 Load 393(sCubeArrayShadow) + 2901: 167(fvec3) Load 169(c3) + 2902: 53(fvec2) ImageQueryLod 2900 2901 + 2903: 53(fvec2) Load 2777(lod) + 2904: 53(fvec2) FAdd 2903 2902 + Store 2777(lod) 2904 + 2905: 391 Load 393(sCubeArrayShadow) + 2906:175(f16vec3) Load 177(f16c3) + 2907:154(f16vec2) ImageQueryLod 2905 2906 + 2908: 53(fvec2) Load 2777(lod) + 2909: 53(fvec2) FAdd 2908 2907 + Store 2777(lod) 2909 + 2910: 53(fvec2) Load 2777(lod) + ReturnValue 2910 FunctionEnd 58(testTextureQueryLevels(): 47(int) Function None 57 59: Label - 2869(levels): 2566(ptr) Variable Function - Store 2869(levels) 2187 - 2870: 123 Load 125(s1D) - 2871: 122 Image 2870 - 2872: 47(int) ImageQueryLevels 2871 - 2873: 47(int) Load 2869(levels) - 2874: 47(int) IAdd 2873 2872 - Store 2869(levels) 2874 - 2875: 143 Load 145(s2D) - 2876: 142 Image 2875 - 2877: 47(int) ImageQueryLevels 2876 - 2878: 47(int) Load 2869(levels) - 2879: 47(int) IAdd 2878 2877 - Store 2869(levels) 2879 - 2880: 163 Load 165(s3D) - 2881: 162 Image 2880 - 2882: 47(int) ImageQueryLevels 2881 - 2883: 47(int) Load 2869(levels) - 2884: 47(int) IAdd 2883 2882 - Store 2869(levels) 2884 - 2885: 184 Load 186(sCube) - 2886: 183 Image 2885 - 2887: 47(int) ImageQueryLevels 2886 - 2888: 47(int) Load 2869(levels) - 2889: 47(int) IAdd 2888 2887 - Store 2869(levels) 2889 - 2890: 199 Load 201(s1DShadow) - 2891: 198 Image 2890 - 2892: 47(int) ImageQueryLevels 2891 - 2893: 47(int) Load 2869(levels) - 2894: 47(int) IAdd 2893 2892 - Store 2869(levels) 2894 - 2895: 224 Load 226(s2DShadow) - 2896: 223 Image 2895 - 2897: 47(int) ImageQueryLevels 2896 - 2898: 47(int) Load 2869(levels) - 2899: 47(int) IAdd 2898 2897 - Store 2869(levels) 2899 - 2900: 245 Load 247(sCubeShadow) - 2901: 244 Image 2900 - 2902: 47(int) ImageQueryLevels 2901 - 2903: 47(int) Load 2869(levels) - 2904: 47(int) IAdd 2903 2902 - Store 2869(levels) 2904 - 2905: 299 Load 301(sCubeArray) - 2906: 298 Image 2905 - 2907: 47(int) ImageQueryLevels 2906 - 2908: 47(int) Load 2869(levels) - 2909: 47(int) IAdd 2908 2907 - Store 2869(levels) 2909 - 2910: 391 Load 393(sCubeArrayShadow) - 2911: 390 Image 2910 - 2912: 47(int) ImageQueryLevels 2911 - 2913: 47(int) Load 2869(levels) - 2914: 47(int) IAdd 2913 2912 - Store 2869(levels) 2914 - 2915: 269 Load 271(s1DArray) - 2916: 268 Image 2915 - 2917: 47(int) ImageQueryLevels 2916 - 2918: 47(int) Load 2869(levels) - 2919: 47(int) IAdd 2918 2917 - Store 2869(levels) 2919 - 2920: 284 Load 286(s2DArray) - 2921: 283 Image 2920 - 2922: 47(int) ImageQueryLevels 2921 - 2923: 47(int) Load 2869(levels) - 2924: 47(int) IAdd 2923 2922 - Store 2869(levels) 2924 - 2925: 316 Load 318(s1DArrayShadow) - 2926: 315 Image 2925 - 2927: 47(int) ImageQueryLevels 2926 - 2928: 47(int) Load 2869(levels) - 2929: 47(int) IAdd 2928 2927 - Store 2869(levels) 2929 - 2930: 337 Load 339(s2DArrayShadow) - 2931: 336 Image 2930 - 2932: 47(int) ImageQueryLevels 2931 - 2933: 47(int) Load 2869(levels) - 2934: 47(int) IAdd 2933 2932 - Store 2869(levels) 2934 - 2935: 47(int) Load 2869(levels) - ReturnValue 2935 + 2913(levels): 2566(ptr) Variable Function + Store 2913(levels) 2187 + 2914: 123 Load 125(s1D) + 2915: 122 Image 2914 + 2916: 47(int) ImageQueryLevels 2915 + 2917: 47(int) Load 2913(levels) + 2918: 47(int) IAdd 2917 2916 + Store 2913(levels) 2918 + 2919: 143 Load 145(s2D) + 2920: 142 Image 2919 + 2921: 47(int) ImageQueryLevels 2920 + 2922: 47(int) Load 2913(levels) + 2923: 47(int) IAdd 2922 2921 + Store 2913(levels) 2923 + 2924: 163 Load 165(s3D) + 2925: 162 Image 2924 + 2926: 47(int) ImageQueryLevels 2925 + 2927: 47(int) Load 2913(levels) + 2928: 47(int) IAdd 2927 2926 + Store 2913(levels) 2928 + 2929: 184 Load 186(sCube) + 2930: 183 Image 2929 + 2931: 47(int) ImageQueryLevels 2930 + 2932: 47(int) Load 2913(levels) + 2933: 47(int) IAdd 2932 2931 + Store 2913(levels) 2933 + 2934: 199 Load 201(s1DShadow) + 2935: 198 Image 2934 + 2936: 47(int) ImageQueryLevels 2935 + 2937: 47(int) Load 2913(levels) + 2938: 47(int) IAdd 2937 2936 + Store 2913(levels) 2938 + 2939: 224 Load 226(s2DShadow) + 2940: 223 Image 2939 + 2941: 47(int) ImageQueryLevels 2940 + 2942: 47(int) Load 2913(levels) + 2943: 47(int) IAdd 2942 2941 + Store 2913(levels) 2943 + 2944: 245 Load 247(sCubeShadow) + 2945: 244 Image 2944 + 2946: 47(int) ImageQueryLevels 2945 + 2947: 47(int) Load 2913(levels) + 2948: 47(int) IAdd 2947 2946 + Store 2913(levels) 2948 + 2949: 299 Load 301(sCubeArray) + 2950: 298 Image 2949 + 2951: 47(int) ImageQueryLevels 2950 + 2952: 47(int) Load 2913(levels) + 2953: 47(int) IAdd 2952 2951 + Store 2913(levels) 2953 + 2954: 391 Load 393(sCubeArrayShadow) + 2955: 390 Image 2954 + 2956: 47(int) ImageQueryLevels 2955 + 2957: 47(int) Load 2913(levels) + 2958: 47(int) IAdd 2957 2956 + Store 2913(levels) 2958 + 2959: 269 Load 271(s1DArray) + 2960: 268 Image 2959 + 2961: 47(int) ImageQueryLevels 2960 + 2962: 47(int) Load 2913(levels) + 2963: 47(int) IAdd 2962 2961 + Store 2913(levels) 2963 + 2964: 284 Load 286(s2DArray) + 2965: 283 Image 2964 + 2966: 47(int) ImageQueryLevels 2965 + 2967: 47(int) Load 2913(levels) + 2968: 47(int) IAdd 2967 2966 + Store 2913(levels) 2968 + 2969: 316 Load 318(s1DArrayShadow) + 2970: 315 Image 2969 + 2971: 47(int) ImageQueryLevels 2970 + 2972: 47(int) Load 2913(levels) + 2973: 47(int) IAdd 2972 2971 + Store 2913(levels) 2973 + 2974: 337 Load 339(s2DArrayShadow) + 2975: 336 Image 2974 + 2976: 47(int) ImageQueryLevels 2975 + 2977: 47(int) Load 2913(levels) + 2978: 47(int) IAdd 2977 2976 + Store 2913(levels) 2978 + 2979: 47(int) Load 2913(levels) + ReturnValue 2979 FunctionEnd 60(testTextureSamples(): 47(int) Function None 57 61: Label - 2938(samples): 2566(ptr) Variable Function - Store 2938(samples) 2187 - 2939: 1309 Load 1311(s2DMS) - 2940: 1308 Image 2939 - 2941: 47(int) ImageQuerySamples 2940 - 2942: 47(int) Load 2938(samples) - 2943: 47(int) IAdd 2942 2941 - Store 2938(samples) 2943 - 2944: 1320 Load 1322(s2DMSArray) - 2945: 1319 Image 2944 - 2946: 47(int) ImageQuerySamples 2945 - 2947: 47(int) Load 2938(samples) - 2948: 47(int) IAdd 2947 2946 - Store 2938(samples) 2948 - 2949: 47(int) Load 2938(samples) - ReturnValue 2949 + 2982(samples): 2566(ptr) Variable Function + Store 2982(samples) 2187 + 2983: 1309 Load 1311(s2DMS) + 2984: 1308 Image 2983 + 2985: 47(int) ImageQuerySamples 2984 + 2986: 47(int) Load 2982(samples) + 2987: 47(int) IAdd 2986 2985 + Store 2982(samples) 2987 + 2988: 1320 Load 1322(s2DMSArray) + 2989: 1319 Image 2988 + 2990: 47(int) ImageQuerySamples 2989 + 2991: 47(int) Load 2982(samples) + 2992: 47(int) IAdd 2991 2990 + Store 2982(samples) 2992 + 2993: 47(int) Load 2982(samples) + ReturnValue 2993 FunctionEnd 62(testImageLoad(): 7(f16vec4) Function None 8 63: Label - 2952(texel): 64(ptr) Variable Function - Store 2952(texel) 121 - 2956: 2953 Load 2955(i1D) - 2957: 52(float) Load 128(c1) - 2958: 47(int) ConvertFToS 2957 - 2959: 7(f16vec4) ImageRead 2956 2958 - 2960: 7(f16vec4) Load 2952(texel) - 2961: 7(f16vec4) FAdd 2960 2959 - Store 2952(texel) 2961 - 2965: 2962 Load 2964(i2D) - 2966: 53(fvec2) Load 148(c2) - 2967: 721(ivec2) ConvertFToS 2966 - 2968: 7(f16vec4) ImageRead 2965 2967 - 2969: 7(f16vec4) Load 2952(texel) - 2970: 7(f16vec4) FAdd 2969 2968 - Store 2952(texel) 2970 - 2974: 2971 Load 2973(i3D) - 2975: 167(fvec3) Load 169(c3) - 2976: 734(ivec3) ConvertFToS 2975 - 2977: 7(f16vec4) ImageRead 2974 2976 - 2978: 7(f16vec4) Load 2952(texel) - 2979: 7(f16vec4) FAdd 2978 2977 - Store 2952(texel) 2979 - 2983: 2980 Load 2982(i2DRect) - 2984: 53(fvec2) Load 148(c2) - 2985: 721(ivec2) ConvertFToS 2984 - 2986: 7(f16vec4) ImageRead 2983 2985 - 2987: 7(f16vec4) Load 2952(texel) - 2988: 7(f16vec4) FAdd 2987 2986 - Store 2952(texel) 2988 - 2992: 2989 Load 2991(iCube) - 2993: 167(fvec3) Load 169(c3) - 2994: 734(ivec3) ConvertFToS 2993 - 2995: 7(f16vec4) ImageRead 2992 2994 - 2996: 7(f16vec4) Load 2952(texel) - 2997: 7(f16vec4) FAdd 2996 2995 - Store 2952(texel) 2997 - 3001: 2998 Load 3000(iBuffer) - 3002: 52(float) Load 128(c1) - 3003: 47(int) ConvertFToS 3002 - 3004: 7(f16vec4) ImageRead 3001 3003 - 3005: 7(f16vec4) Load 2952(texel) - 3006: 7(f16vec4) FAdd 3005 3004 - Store 2952(texel) 3006 - 3010: 3007 Load 3009(i1DArray) - 3011: 53(fvec2) Load 148(c2) - 3012: 721(ivec2) ConvertFToS 3011 - 3013: 7(f16vec4) ImageRead 3010 3012 - 3014: 7(f16vec4) Load 2952(texel) - 3015: 7(f16vec4) FAdd 3014 3013 - Store 2952(texel) 3015 - 3019: 3016 Load 3018(i2DArray) - 3020: 167(fvec3) Load 169(c3) - 3021: 734(ivec3) ConvertFToS 3020 - 3022: 7(f16vec4) ImageRead 3019 3021 - 3023: 7(f16vec4) Load 2952(texel) - 3024: 7(f16vec4) FAdd 3023 3022 - Store 2952(texel) 3024 - 3028: 3025 Load 3027(iCubeArray) - 3029: 167(fvec3) Load 169(c3) - 3030: 734(ivec3) ConvertFToS 3029 - 3031: 7(f16vec4) ImageRead 3028 3030 - 3032: 7(f16vec4) Load 2952(texel) - 3033: 7(f16vec4) FAdd 3032 3031 - Store 2952(texel) 3033 - 3037: 3034 Load 3036(i2DMS) - 3038: 53(fvec2) Load 148(c2) - 3039: 721(ivec2) ConvertFToS 3038 - 3040: 7(f16vec4) ImageRead 3037 3039 Sample 709 - 3041: 7(f16vec4) Load 2952(texel) - 3042: 7(f16vec4) FAdd 3041 3040 - Store 2952(texel) 3042 - 3046: 3043 Load 3045(i2DMSArray) - 3047: 167(fvec3) Load 169(c3) - 3048: 734(ivec3) ConvertFToS 3047 - 3049: 7(f16vec4) ImageRead 3046 3048 Sample 709 - 3050: 7(f16vec4) Load 2952(texel) - 3051: 7(f16vec4) FAdd 3050 3049 - Store 2952(texel) 3051 - 3052: 7(f16vec4) Load 2952(texel) - ReturnValue 3052 + 2996(texel): 64(ptr) Variable Function + Store 2996(texel) 121 + 3000: 2997 Load 2999(i1D) + 3001: 52(float) Load 128(c1) + 3002: 47(int) ConvertFToS 3001 + 3003: 7(f16vec4) ImageRead 3000 3002 + 3004: 7(f16vec4) Load 2996(texel) + 3005: 7(f16vec4) FAdd 3004 3003 + Store 2996(texel) 3005 + 3009: 3006 Load 3008(i2D) + 3010: 53(fvec2) Load 148(c2) + 3011: 721(ivec2) ConvertFToS 3010 + 3012: 7(f16vec4) ImageRead 3009 3011 + 3013: 7(f16vec4) Load 2996(texel) + 3014: 7(f16vec4) FAdd 3013 3012 + Store 2996(texel) 3014 + 3018: 3015 Load 3017(i3D) + 3019: 167(fvec3) Load 169(c3) + 3020: 734(ivec3) ConvertFToS 3019 + 3021: 7(f16vec4) ImageRead 3018 3020 + 3022: 7(f16vec4) Load 2996(texel) + 3023: 7(f16vec4) FAdd 3022 3021 + Store 2996(texel) 3023 + 3027: 3024 Load 3026(i2DRect) + 3028: 53(fvec2) Load 148(c2) + 3029: 721(ivec2) ConvertFToS 3028 + 3030: 7(f16vec4) ImageRead 3027 3029 + 3031: 7(f16vec4) Load 2996(texel) + 3032: 7(f16vec4) FAdd 3031 3030 + Store 2996(texel) 3032 + 3036: 3033 Load 3035(iCube) + 3037: 167(fvec3) Load 169(c3) + 3038: 734(ivec3) ConvertFToS 3037 + 3039: 7(f16vec4) ImageRead 3036 3038 + 3040: 7(f16vec4) Load 2996(texel) + 3041: 7(f16vec4) FAdd 3040 3039 + Store 2996(texel) 3041 + 3045: 3042 Load 3044(iBuffer) + 3046: 52(float) Load 128(c1) + 3047: 47(int) ConvertFToS 3046 + 3048: 7(f16vec4) ImageRead 3045 3047 + 3049: 7(f16vec4) Load 2996(texel) + 3050: 7(f16vec4) FAdd 3049 3048 + Store 2996(texel) 3050 + 3054: 3051 Load 3053(i1DArray) + 3055: 53(fvec2) Load 148(c2) + 3056: 721(ivec2) ConvertFToS 3055 + 3057: 7(f16vec4) ImageRead 3054 3056 + 3058: 7(f16vec4) Load 2996(texel) + 3059: 7(f16vec4) FAdd 3058 3057 + Store 2996(texel) 3059 + 3063: 3060 Load 3062(i2DArray) + 3064: 167(fvec3) Load 169(c3) + 3065: 734(ivec3) ConvertFToS 3064 + 3066: 7(f16vec4) ImageRead 3063 3065 + 3067: 7(f16vec4) Load 2996(texel) + 3068: 7(f16vec4) FAdd 3067 3066 + Store 2996(texel) 3068 + 3072: 3069 Load 3071(iCubeArray) + 3073: 167(fvec3) Load 169(c3) + 3074: 734(ivec3) ConvertFToS 3073 + 3075: 7(f16vec4) ImageRead 3072 3074 + 3076: 7(f16vec4) Load 2996(texel) + 3077: 7(f16vec4) FAdd 3076 3075 + Store 2996(texel) 3077 + 3081: 3078 Load 3080(i2DMS) + 3082: 53(fvec2) Load 148(c2) + 3083: 721(ivec2) ConvertFToS 3082 + 3084: 7(f16vec4) ImageRead 3081 3083 Sample 709 + 3085: 7(f16vec4) Load 2996(texel) + 3086: 7(f16vec4) FAdd 3085 3084 + Store 2996(texel) 3086 + 3090: 3087 Load 3089(i2DMSArray) + 3091: 167(fvec3) Load 169(c3) + 3092: 734(ivec3) ConvertFToS 3091 + 3093: 7(f16vec4) ImageRead 3090 3092 Sample 709 + 3094: 7(f16vec4) Load 2996(texel) + 3095: 7(f16vec4) FAdd 3094 3093 + Store 2996(texel) 3095 + 3096: 7(f16vec4) Load 2996(texel) + ReturnValue 3096 FunctionEnd 67(testImageStore(vf164;): 2 Function None 65 66(data): 64(ptr) FunctionParameter 68: Label - 3055: 2953 Load 2955(i1D) - 3056: 52(float) Load 128(c1) - 3057: 47(int) ConvertFToS 3056 - 3058: 7(f16vec4) Load 66(data) - ImageWrite 3055 3057 3058 - 3059: 2962 Load 2964(i2D) - 3060: 53(fvec2) Load 148(c2) - 3061: 721(ivec2) ConvertFToS 3060 - 3062: 7(f16vec4) Load 66(data) - ImageWrite 3059 3061 3062 - 3063: 2971 Load 2973(i3D) - 3064: 167(fvec3) Load 169(c3) - 3065: 734(ivec3) ConvertFToS 3064 - 3066: 7(f16vec4) Load 66(data) - ImageWrite 3063 3065 3066 - 3067: 2980 Load 2982(i2DRect) - 3068: 53(fvec2) Load 148(c2) - 3069: 721(ivec2) ConvertFToS 3068 - 3070: 7(f16vec4) Load 66(data) - ImageWrite 3067 3069 3070 - 3071: 2989 Load 2991(iCube) - 3072: 167(fvec3) Load 169(c3) - 3073: 734(ivec3) ConvertFToS 3072 - 3074: 7(f16vec4) Load 66(data) - ImageWrite 3071 3073 3074 - 3075: 2998 Load 3000(iBuffer) - 3076: 52(float) Load 128(c1) - 3077: 47(int) ConvertFToS 3076 - 3078: 7(f16vec4) Load 66(data) - ImageWrite 3075 3077 3078 - 3079: 3007 Load 3009(i1DArray) - 3080: 53(fvec2) Load 148(c2) - 3081: 721(ivec2) ConvertFToS 3080 - 3082: 7(f16vec4) Load 66(data) - ImageWrite 3079 3081 3082 - 3083: 3016 Load 3018(i2DArray) - 3084: 167(fvec3) Load 169(c3) - 3085: 734(ivec3) ConvertFToS 3084 - 3086: 7(f16vec4) Load 66(data) - ImageWrite 3083 3085 3086 - 3087: 3025 Load 3027(iCubeArray) - 3088: 167(fvec3) Load 169(c3) - 3089: 734(ivec3) ConvertFToS 3088 - 3090: 7(f16vec4) Load 66(data) - ImageWrite 3087 3089 3090 - 3091: 3034 Load 3036(i2DMS) - 3092: 53(fvec2) Load 148(c2) - 3093: 721(ivec2) ConvertFToS 3092 - 3094: 7(f16vec4) Load 66(data) - ImageWrite 3091 3093 3094 Sample 709 - 3095: 3043 Load 3045(i2DMSArray) - 3096: 167(fvec3) Load 169(c3) - 3097: 734(ivec3) ConvertFToS 3096 - 3098: 7(f16vec4) Load 66(data) - ImageWrite 3095 3097 3098 Sample 709 + 3099: 2997 Load 2999(i1D) + 3100: 52(float) Load 128(c1) + 3101: 47(int) ConvertFToS 3100 + 3102: 7(f16vec4) Load 66(data) + ImageWrite 3099 3101 3102 + 3103: 3006 Load 3008(i2D) + 3104: 53(fvec2) Load 148(c2) + 3105: 721(ivec2) ConvertFToS 3104 + 3106: 7(f16vec4) Load 66(data) + ImageWrite 3103 3105 3106 + 3107: 3015 Load 3017(i3D) + 3108: 167(fvec3) Load 169(c3) + 3109: 734(ivec3) ConvertFToS 3108 + 3110: 7(f16vec4) Load 66(data) + ImageWrite 3107 3109 3110 + 3111: 3024 Load 3026(i2DRect) + 3112: 53(fvec2) Load 148(c2) + 3113: 721(ivec2) ConvertFToS 3112 + 3114: 7(f16vec4) Load 66(data) + ImageWrite 3111 3113 3114 + 3115: 3033 Load 3035(iCube) + 3116: 167(fvec3) Load 169(c3) + 3117: 734(ivec3) ConvertFToS 3116 + 3118: 7(f16vec4) Load 66(data) + ImageWrite 3115 3117 3118 + 3119: 3042 Load 3044(iBuffer) + 3120: 52(float) Load 128(c1) + 3121: 47(int) ConvertFToS 3120 + 3122: 7(f16vec4) Load 66(data) + ImageWrite 3119 3121 3122 + 3123: 3051 Load 3053(i1DArray) + 3124: 53(fvec2) Load 148(c2) + 3125: 721(ivec2) ConvertFToS 3124 + 3126: 7(f16vec4) Load 66(data) + ImageWrite 3123 3125 3126 + 3127: 3060 Load 3062(i2DArray) + 3128: 167(fvec3) Load 169(c3) + 3129: 734(ivec3) ConvertFToS 3128 + 3130: 7(f16vec4) Load 66(data) + ImageWrite 3127 3129 3130 + 3131: 3069 Load 3071(iCubeArray) + 3132: 167(fvec3) Load 169(c3) + 3133: 734(ivec3) ConvertFToS 3132 + 3134: 7(f16vec4) Load 66(data) + ImageWrite 3131 3133 3134 + 3135: 3078 Load 3080(i2DMS) + 3136: 53(fvec2) Load 148(c2) + 3137: 721(ivec2) ConvertFToS 3136 + 3138: 7(f16vec4) Load 66(data) + ImageWrite 3135 3137 3138 Sample 709 + 3139: 3087 Load 3089(i2DMSArray) + 3140: 167(fvec3) Load 169(c3) + 3141: 734(ivec3) ConvertFToS 3140 + 3142: 7(f16vec4) Load 66(data) + ImageWrite 3139 3141 3142 Sample 709 Return FunctionEnd 69(testSparseTexture(): 7(f16vec4) Function None 8 70: Label - 3099(texel): 64(ptr) Variable Function - Store 3099(texel) 121 - 3100: 143 Load 145(s2D) - 3101: 53(fvec2) Load 148(c2) - 3103:3102(ResType) ImageSparseSampleImplicitLod 3100 3101 - 3104: 7(f16vec4) CompositeExtract 3103 1 - Store 3099(texel) 3104 - 3105: 47(int) CompositeExtract 3103 0 - 3106: 143 Load 145(s2D) - 3107:154(f16vec2) Load 156(f16c2) - 3108:6(float16_t) Load 137(f16bias) - 3109:3102(ResType) ImageSparseSampleImplicitLod 3106 3107 Bias 3108 - 3110: 7(f16vec4) CompositeExtract 3109 1 - Store 3099(texel) 3110 - 3111: 47(int) CompositeExtract 3109 0 - 3112: 163 Load 165(s3D) - 3113: 167(fvec3) Load 169(c3) - 3114:3102(ResType) ImageSparseSampleImplicitLod 3112 3113 - 3115: 7(f16vec4) CompositeExtract 3114 1 - Store 3099(texel) 3115 - 3116: 47(int) CompositeExtract 3114 0 - 3117: 163 Load 165(s3D) - 3118:175(f16vec3) Load 177(f16c3) - 3119:6(float16_t) Load 137(f16bias) - 3120:3102(ResType) ImageSparseSampleImplicitLod 3117 3118 Bias 3119 - 3121: 7(f16vec4) CompositeExtract 3120 1 - Store 3099(texel) 3121 - 3122: 47(int) CompositeExtract 3120 0 - 3123: 184 Load 186(sCube) - 3124: 167(fvec3) Load 169(c3) - 3125:3102(ResType) ImageSparseSampleImplicitLod 3123 3124 - 3126: 7(f16vec4) CompositeExtract 3125 1 - Store 3099(texel) 3126 - 3127: 47(int) CompositeExtract 3125 0 - 3128: 184 Load 186(sCube) - 3129:175(f16vec3) Load 177(f16c3) - 3130:6(float16_t) Load 137(f16bias) - 3131:3102(ResType) ImageSparseSampleImplicitLod 3128 3129 Bias 3130 - 3132: 7(f16vec4) CompositeExtract 3131 1 - Store 3099(texel) 3132 - 3133: 47(int) CompositeExtract 3131 0 - 3134: 224 Load 226(s2DShadow) - 3135: 167(fvec3) Load 169(c3) - 3136: 208(ptr) AccessChain 3099(texel) 207 - 3137: 52(float) CompositeExtract 3135 2 - 3139:3138(ResType) ImageSparseSampleDrefImplicitLod 3134 3135 3137 - 3140:6(float16_t) CompositeExtract 3139 1 - Store 3136 3140 - 3141: 47(int) CompositeExtract 3139 0 - 3142: 224 Load 226(s2DShadow) - 3143:154(f16vec2) Load 156(f16c2) - 3144: 52(float) Load 215(compare) - 3145: 208(ptr) AccessChain 3099(texel) 207 - 3146:6(float16_t) Load 137(f16bias) - 3147:3138(ResType) ImageSparseSampleDrefImplicitLod 3142 3143 3144 Bias 3146 - 3148:6(float16_t) CompositeExtract 3147 1 - Store 3145 3148 + 3143(texel): 64(ptr) Variable Function + Store 3143(texel) 121 + 3144: 143 Load 145(s2D) + 3145: 53(fvec2) Load 148(c2) + 3147:3146(ResType) ImageSparseSampleImplicitLod 3144 3145 + 3148: 7(f16vec4) CompositeExtract 3147 1 + Store 3143(texel) 3148 3149: 47(int) CompositeExtract 3147 0 - 3150: 245 Load 247(sCubeShadow) - 3151: 249(fvec4) Load 251(c4) - 3152: 208(ptr) AccessChain 3099(texel) 207 - 3153: 52(float) CompositeExtract 3151 3 - 3154:3138(ResType) ImageSparseSampleDrefImplicitLod 3150 3151 3153 - 3155:6(float16_t) CompositeExtract 3154 1 - Store 3152 3155 - 3156: 47(int) CompositeExtract 3154 0 - 3157: 245 Load 247(sCubeShadow) - 3158:175(f16vec3) Load 177(f16c3) - 3159: 52(float) Load 215(compare) - 3160: 208(ptr) AccessChain 3099(texel) 207 - 3161:6(float16_t) Load 137(f16bias) - 3162:3138(ResType) ImageSparseSampleDrefImplicitLod 3157 3158 3159 Bias 3161 - 3163:6(float16_t) CompositeExtract 3162 1 - Store 3160 3163 - 3164: 47(int) CompositeExtract 3162 0 - 3165: 284 Load 286(s2DArray) - 3166: 167(fvec3) Load 169(c3) - 3167:3102(ResType) ImageSparseSampleImplicitLod 3165 3166 - 3168: 7(f16vec4) CompositeExtract 3167 1 - Store 3099(texel) 3168 - 3169: 47(int) CompositeExtract 3167 0 - 3170: 284 Load 286(s2DArray) - 3171:175(f16vec3) Load 177(f16c3) - 3172:6(float16_t) Load 137(f16bias) - 3173:3102(ResType) ImageSparseSampleImplicitLod 3170 3171 Bias 3172 - 3174: 7(f16vec4) CompositeExtract 3173 1 - Store 3099(texel) 3174 - 3175: 47(int) CompositeExtract 3173 0 - 3176: 299 Load 301(sCubeArray) - 3177: 249(fvec4) Load 251(c4) - 3178:3102(ResType) ImageSparseSampleImplicitLod 3176 3177 - 3179: 7(f16vec4) CompositeExtract 3178 1 - Store 3099(texel) 3179 - 3180: 47(int) CompositeExtract 3178 0 - 3181: 299 Load 301(sCubeArray) - 3182: 7(f16vec4) Load 309(f16c4) - 3183:6(float16_t) Load 137(f16bias) - 3184:3102(ResType) ImageSparseSampleImplicitLod 3181 3182 Bias 3183 - 3185: 7(f16vec4) CompositeExtract 3184 1 - Store 3099(texel) 3185 - 3186: 47(int) CompositeExtract 3184 0 - 3187: 337 Load 339(s2DArrayShadow) - 3188: 249(fvec4) Load 251(c4) - 3189: 208(ptr) AccessChain 3099(texel) 207 - 3190: 52(float) CompositeExtract 3188 3 - 3191:3138(ResType) ImageSparseSampleDrefImplicitLod 3187 3188 3190 + 3150: 143 Load 145(s2D) + 3151:154(f16vec2) Load 156(f16c2) + 3152:6(float16_t) Load 137(f16bias) + 3153:3146(ResType) ImageSparseSampleImplicitLod 3150 3151 Bias 3152 + 3154: 7(f16vec4) CompositeExtract 3153 1 + Store 3143(texel) 3154 + 3155: 47(int) CompositeExtract 3153 0 + 3156: 163 Load 165(s3D) + 3157: 167(fvec3) Load 169(c3) + 3158:3146(ResType) ImageSparseSampleImplicitLod 3156 3157 + 3159: 7(f16vec4) CompositeExtract 3158 1 + Store 3143(texel) 3159 + 3160: 47(int) CompositeExtract 3158 0 + 3161: 163 Load 165(s3D) + 3162:175(f16vec3) Load 177(f16c3) + 3163:6(float16_t) Load 137(f16bias) + 3164:3146(ResType) ImageSparseSampleImplicitLod 3161 3162 Bias 3163 + 3165: 7(f16vec4) CompositeExtract 3164 1 + Store 3143(texel) 3165 + 3166: 47(int) CompositeExtract 3164 0 + 3167: 184 Load 186(sCube) + 3168: 167(fvec3) Load 169(c3) + 3169:3146(ResType) ImageSparseSampleImplicitLod 3167 3168 + 3170: 7(f16vec4) CompositeExtract 3169 1 + Store 3143(texel) 3170 + 3171: 47(int) CompositeExtract 3169 0 + 3172: 184 Load 186(sCube) + 3173:175(f16vec3) Load 177(f16c3) + 3174:6(float16_t) Load 137(f16bias) + 3175:3146(ResType) ImageSparseSampleImplicitLod 3172 3173 Bias 3174 + 3176: 7(f16vec4) CompositeExtract 3175 1 + Store 3143(texel) 3176 + 3177: 47(int) CompositeExtract 3175 0 + 3178: 224 Load 226(s2DShadow) + 3179: 167(fvec3) Load 169(c3) + 3180: 208(ptr) AccessChain 3143(texel) 207 + 3181: 52(float) CompositeExtract 3179 2 + 3183:3182(ResType) ImageSparseSampleDrefImplicitLod 3178 3179 3181 + 3184:6(float16_t) CompositeExtract 3183 1 + Store 3180 3184 + 3185: 47(int) CompositeExtract 3183 0 + 3186: 224 Load 226(s2DShadow) + 3187:154(f16vec2) Load 156(f16c2) + 3188: 52(float) Load 215(compare) + 3189: 208(ptr) AccessChain 3143(texel) 207 + 3190:6(float16_t) Load 137(f16bias) + 3191:3182(ResType) ImageSparseSampleDrefImplicitLod 3186 3187 3188 Bias 3190 3192:6(float16_t) CompositeExtract 3191 1 Store 3189 3192 3193: 47(int) CompositeExtract 3191 0 - 3194: 337 Load 339(s2DArrayShadow) - 3195:175(f16vec3) Load 177(f16c3) - 3196: 52(float) Load 215(compare) - 3197: 208(ptr) AccessChain 3099(texel) 207 - 3198:3138(ResType) ImageSparseSampleDrefImplicitLod 3194 3195 3196 + 3194: 245 Load 247(sCubeShadow) + 3195: 249(fvec4) Load 251(c4) + 3196: 208(ptr) AccessChain 3143(texel) 207 + 3197: 52(float) CompositeExtract 3195 3 + 3198:3182(ResType) ImageSparseSampleDrefImplicitLod 3194 3195 3197 3199:6(float16_t) CompositeExtract 3198 1 - Store 3197 3199 + Store 3196 3199 3200: 47(int) CompositeExtract 3198 0 - 3201: 357 Load 359(s2DRect) - 3202: 53(fvec2) Load 148(c2) - 3203:3102(ResType) ImageSparseSampleImplicitLod 3201 3202 - 3204: 7(f16vec4) CompositeExtract 3203 1 - Store 3099(texel) 3204 - 3205: 47(int) CompositeExtract 3203 0 - 3206: 357 Load 359(s2DRect) - 3207:154(f16vec2) Load 156(f16c2) - 3208:3102(ResType) ImageSparseSampleImplicitLod 3206 3207 - 3209: 7(f16vec4) CompositeExtract 3208 1 - Store 3099(texel) 3209 - 3210: 47(int) CompositeExtract 3208 0 - 3211: 371 Load 373(s2DRectShadow) - 3212: 167(fvec3) Load 169(c3) - 3213: 208(ptr) AccessChain 3099(texel) 207 - 3214: 52(float) CompositeExtract 3212 2 - 3215:3138(ResType) ImageSparseSampleDrefImplicitLod 3211 3212 3214 - 3216:6(float16_t) CompositeExtract 3215 1 - Store 3213 3216 - 3217: 47(int) CompositeExtract 3215 0 - 3218: 371 Load 373(s2DRectShadow) - 3219:154(f16vec2) Load 156(f16c2) - 3220: 52(float) Load 215(compare) - 3221: 208(ptr) AccessChain 3099(texel) 207 - 3222:3138(ResType) ImageSparseSampleDrefImplicitLod 3218 3219 3220 - 3223:6(float16_t) CompositeExtract 3222 1 - Store 3221 3223 + 3201: 245 Load 247(sCubeShadow) + 3202:175(f16vec3) Load 177(f16c3) + 3203: 52(float) Load 215(compare) + 3204: 208(ptr) AccessChain 3143(texel) 207 + 3205:6(float16_t) Load 137(f16bias) + 3206:3182(ResType) ImageSparseSampleDrefImplicitLod 3201 3202 3203 Bias 3205 + 3207:6(float16_t) CompositeExtract 3206 1 + Store 3204 3207 + 3208: 47(int) CompositeExtract 3206 0 + 3209: 284 Load 286(s2DArray) + 3210: 167(fvec3) Load 169(c3) + 3211:3146(ResType) ImageSparseSampleImplicitLod 3209 3210 + 3212: 7(f16vec4) CompositeExtract 3211 1 + Store 3143(texel) 3212 + 3213: 47(int) CompositeExtract 3211 0 + 3214: 284 Load 286(s2DArray) + 3215:175(f16vec3) Load 177(f16c3) + 3216:6(float16_t) Load 137(f16bias) + 3217:3146(ResType) ImageSparseSampleImplicitLod 3214 3215 Bias 3216 + 3218: 7(f16vec4) CompositeExtract 3217 1 + Store 3143(texel) 3218 + 3219: 47(int) CompositeExtract 3217 0 + 3220: 299 Load 301(sCubeArray) + 3221: 249(fvec4) Load 251(c4) + 3222:3146(ResType) ImageSparseSampleImplicitLod 3220 3221 + 3223: 7(f16vec4) CompositeExtract 3222 1 + Store 3143(texel) 3223 3224: 47(int) CompositeExtract 3222 0 - 3225: 391 Load 393(sCubeArrayShadow) - 3226: 249(fvec4) Load 251(c4) - 3227: 52(float) Load 215(compare) - 3228: 208(ptr) AccessChain 3099(texel) 207 - 3229:3138(ResType) ImageSparseSampleDrefImplicitLod 3225 3226 3227 - 3230:6(float16_t) CompositeExtract 3229 1 - Store 3228 3230 - 3231: 47(int) CompositeExtract 3229 0 - 3232: 391 Load 393(sCubeArrayShadow) - 3233: 7(f16vec4) Load 309(f16c4) - 3234: 52(float) Load 215(compare) - 3235: 208(ptr) AccessChain 3099(texel) 207 - 3236:3138(ResType) ImageSparseSampleDrefImplicitLod 3232 3233 3234 - 3237:6(float16_t) CompositeExtract 3236 1 - Store 3235 3237 - 3238: 47(int) CompositeExtract 3236 0 - 3239: 7(f16vec4) Load 3099(texel) - ReturnValue 3239 - FunctionEnd -71(testSparseTextureLod(): 7(f16vec4) Function None 8 - 72: Label - 3242(texel): 64(ptr) Variable Function - Store 3242(texel) 121 - 3243: 143 Load 145(s2D) - 3244: 53(fvec2) Load 148(c2) - 3245: 52(float) Load 565(lod) - 3246:3102(ResType) ImageSparseSampleExplicitLod 3243 3244 Lod 3245 - 3247: 7(f16vec4) CompositeExtract 3246 1 - Store 3242(texel) 3247 - 3248: 47(int) CompositeExtract 3246 0 - 3249: 143 Load 145(s2D) - 3250:154(f16vec2) Load 156(f16c2) - 3251:6(float16_t) Load 572(f16lod) - 3252:3102(ResType) ImageSparseSampleExplicitLod 3249 3250 Lod 3251 + 3225: 299 Load 301(sCubeArray) + 3226: 7(f16vec4) Load 309(f16c4) + 3227:6(float16_t) Load 137(f16bias) + 3228:3146(ResType) ImageSparseSampleImplicitLod 3225 3226 Bias 3227 + 3229: 7(f16vec4) CompositeExtract 3228 1 + Store 3143(texel) 3229 + 3230: 47(int) CompositeExtract 3228 0 + 3231: 337 Load 339(s2DArrayShadow) + 3232: 249(fvec4) Load 251(c4) + 3233: 208(ptr) AccessChain 3143(texel) 207 + 3234: 52(float) CompositeExtract 3232 3 + 3235:3182(ResType) ImageSparseSampleDrefImplicitLod 3231 3232 3234 + 3236:6(float16_t) CompositeExtract 3235 1 + Store 3233 3236 + 3237: 47(int) CompositeExtract 3235 0 + 3238: 337 Load 339(s2DArrayShadow) + 3239:175(f16vec3) Load 177(f16c3) + 3240: 52(float) Load 215(compare) + 3241: 208(ptr) AccessChain 3143(texel) 207 + 3242:3182(ResType) ImageSparseSampleDrefImplicitLod 3238 3239 3240 + 3243:6(float16_t) CompositeExtract 3242 1 + Store 3241 3243 + 3244: 47(int) CompositeExtract 3242 0 + 3245: 357 Load 359(s2DRect) + 3246: 53(fvec2) Load 148(c2) + 3247:3146(ResType) ImageSparseSampleImplicitLod 3245 3246 + 3248: 7(f16vec4) CompositeExtract 3247 1 + Store 3143(texel) 3248 + 3249: 47(int) CompositeExtract 3247 0 + 3250: 357 Load 359(s2DRect) + 3251:154(f16vec2) Load 156(f16c2) + 3252:3146(ResType) ImageSparseSampleImplicitLod 3250 3251 3253: 7(f16vec4) CompositeExtract 3252 1 - Store 3242(texel) 3253 + Store 3143(texel) 3253 3254: 47(int) CompositeExtract 3252 0 - 3255: 163 Load 165(s3D) + 3255: 371 Load 373(s2DRectShadow) 3256: 167(fvec3) Load 169(c3) - 3257: 52(float) Load 565(lod) - 3258:3102(ResType) ImageSparseSampleExplicitLod 3255 3256 Lod 3257 - 3259: 7(f16vec4) CompositeExtract 3258 1 - Store 3242(texel) 3259 - 3260: 47(int) CompositeExtract 3258 0 - 3261: 163 Load 165(s3D) - 3262:175(f16vec3) Load 177(f16c3) - 3263:6(float16_t) Load 572(f16lod) - 3264:3102(ResType) ImageSparseSampleExplicitLod 3261 3262 Lod 3263 - 3265: 7(f16vec4) CompositeExtract 3264 1 - Store 3242(texel) 3265 - 3266: 47(int) CompositeExtract 3264 0 - 3267: 184 Load 186(sCube) - 3268: 167(fvec3) Load 169(c3) - 3269: 52(float) Load 565(lod) - 3270:3102(ResType) ImageSparseSampleExplicitLod 3267 3268 Lod 3269 - 3271: 7(f16vec4) CompositeExtract 3270 1 - Store 3242(texel) 3271 - 3272: 47(int) CompositeExtract 3270 0 - 3273: 184 Load 186(sCube) - 3274:175(f16vec3) Load 177(f16c3) - 3275:6(float16_t) Load 572(f16lod) - 3276:3102(ResType) ImageSparseSampleExplicitLod 3273 3274 Lod 3275 - 3277: 7(f16vec4) CompositeExtract 3276 1 - Store 3242(texel) 3277 - 3278: 47(int) CompositeExtract 3276 0 - 3279: 224 Load 226(s2DShadow) - 3280: 167(fvec3) Load 169(c3) - 3281: 52(float) Load 565(lod) - 3282: 208(ptr) AccessChain 3242(texel) 207 - 3283: 52(float) CompositeExtract 3280 2 - 3284:3138(ResType) ImageSparseSampleDrefExplicitLod 3279 3280 3283 Lod 3281 - 3285:6(float16_t) CompositeExtract 3284 1 - Store 3282 3285 - 3286: 47(int) CompositeExtract 3284 0 - 3287: 224 Load 226(s2DShadow) - 3288:154(f16vec2) Load 156(f16c2) - 3289: 52(float) Load 215(compare) - 3290:6(float16_t) Load 572(f16lod) - 3291: 208(ptr) AccessChain 3242(texel) 207 - 3292:3138(ResType) ImageSparseSampleDrefExplicitLod 3287 3288 3289 Lod 3290 - 3293:6(float16_t) CompositeExtract 3292 1 - Store 3291 3293 - 3294: 47(int) CompositeExtract 3292 0 - 3295: 284 Load 286(s2DArray) - 3296: 167(fvec3) Load 169(c3) - 3297: 52(float) Load 565(lod) - 3298:3102(ResType) ImageSparseSampleExplicitLod 3295 3296 Lod 3297 - 3299: 7(f16vec4) CompositeExtract 3298 1 - Store 3242(texel) 3299 - 3300: 47(int) CompositeExtract 3298 0 - 3301: 284 Load 286(s2DArray) - 3302:175(f16vec3) Load 177(f16c3) - 3303:6(float16_t) Load 572(f16lod) - 3304:3102(ResType) ImageSparseSampleExplicitLod 3301 3302 Lod 3303 - 3305: 7(f16vec4) CompositeExtract 3304 1 - Store 3242(texel) 3305 - 3306: 47(int) CompositeExtract 3304 0 - 3307: 299 Load 301(sCubeArray) - 3308: 249(fvec4) Load 251(c4) - 3309: 52(float) Load 565(lod) - 3310:3102(ResType) ImageSparseSampleExplicitLod 3307 3308 Lod 3309 - 3311: 7(f16vec4) CompositeExtract 3310 1 - Store 3242(texel) 3311 - 3312: 47(int) CompositeExtract 3310 0 - 3313: 299 Load 301(sCubeArray) - 3314: 7(f16vec4) Load 309(f16c4) - 3315:6(float16_t) Load 572(f16lod) - 3316:3102(ResType) ImageSparseSampleExplicitLod 3313 3314 Lod 3315 - 3317: 7(f16vec4) CompositeExtract 3316 1 - Store 3242(texel) 3317 - 3318: 47(int) CompositeExtract 3316 0 - 3319: 7(f16vec4) Load 3242(texel) - ReturnValue 3319 + 3257: 208(ptr) AccessChain 3143(texel) 207 + 3258: 52(float) CompositeExtract 3256 2 + 3259:3182(ResType) ImageSparseSampleDrefImplicitLod 3255 3256 3258 + 3260:6(float16_t) CompositeExtract 3259 1 + Store 3257 3260 + 3261: 47(int) CompositeExtract 3259 0 + 3262: 371 Load 373(s2DRectShadow) + 3263:154(f16vec2) Load 156(f16c2) + 3264: 52(float) Load 215(compare) + 3265: 208(ptr) AccessChain 3143(texel) 207 + 3266:3182(ResType) ImageSparseSampleDrefImplicitLod 3262 3263 3264 + 3267:6(float16_t) CompositeExtract 3266 1 + Store 3265 3267 + 3268: 47(int) CompositeExtract 3266 0 + 3269: 391 Load 393(sCubeArrayShadow) + 3270: 249(fvec4) Load 251(c4) + 3271: 52(float) Load 215(compare) + 3272: 208(ptr) AccessChain 3143(texel) 207 + 3273:3182(ResType) ImageSparseSampleDrefImplicitLod 3269 3270 3271 + 3274:6(float16_t) CompositeExtract 3273 1 + Store 3272 3274 + 3275: 47(int) CompositeExtract 3273 0 + 3276: 391 Load 393(sCubeArrayShadow) + 3277: 7(f16vec4) Load 309(f16c4) + 3278: 52(float) Load 215(compare) + 3279: 208(ptr) AccessChain 3143(texel) 207 + 3280:3182(ResType) ImageSparseSampleDrefImplicitLod 3276 3277 3278 + 3281:6(float16_t) CompositeExtract 3280 1 + Store 3279 3281 + 3282: 47(int) CompositeExtract 3280 0 + 3283: 7(f16vec4) Load 3143(texel) + ReturnValue 3283 FunctionEnd -73(testSparseTextureOffset(): 7(f16vec4) Function None 8 - 74: Label - 3322(texel): 64(ptr) Variable Function - Store 3322(texel) 121 - 3323: 143 Load 145(s2D) - 3324: 53(fvec2) Load 148(c2) - 3325:3102(ResType) ImageSparseSampleImplicitLod 3323 3324 ConstOffset 722 - 3326: 7(f16vec4) CompositeExtract 3325 1 - Store 3322(texel) 3326 - 3327: 47(int) CompositeExtract 3325 0 - 3328: 143 Load 145(s2D) - 3329:154(f16vec2) Load 156(f16c2) - 3330:6(float16_t) Load 137(f16bias) - 3331:3102(ResType) ImageSparseSampleImplicitLod 3328 3329 Bias ConstOffset 3330 722 - 3332: 7(f16vec4) CompositeExtract 3331 1 - Store 3322(texel) 3332 - 3333: 47(int) CompositeExtract 3331 0 - 3334: 163 Load 165(s3D) - 3335: 167(fvec3) Load 169(c3) - 3336:3102(ResType) ImageSparseSampleImplicitLod 3334 3335 ConstOffset 735 - 3337: 7(f16vec4) CompositeExtract 3336 1 - Store 3322(texel) 3337 +71(testSparseTextureLod(): 7(f16vec4) Function None 8 + 72: Label + 3286(texel): 64(ptr) Variable Function + Store 3286(texel) 121 + 3287: 143 Load 145(s2D) + 3288: 53(fvec2) Load 148(c2) + 3289: 52(float) Load 565(lod) + 3290:3146(ResType) ImageSparseSampleExplicitLod 3287 3288 Lod 3289 + 3291: 7(f16vec4) CompositeExtract 3290 1 + Store 3286(texel) 3291 + 3292: 47(int) CompositeExtract 3290 0 + 3293: 143 Load 145(s2D) + 3294:154(f16vec2) Load 156(f16c2) + 3295:6(float16_t) Load 572(f16lod) + 3296:3146(ResType) ImageSparseSampleExplicitLod 3293 3294 Lod 3295 + 3297: 7(f16vec4) CompositeExtract 3296 1 + Store 3286(texel) 3297 + 3298: 47(int) CompositeExtract 3296 0 + 3299: 163 Load 165(s3D) + 3300: 167(fvec3) Load 169(c3) + 3301: 52(float) Load 565(lod) + 3302:3146(ResType) ImageSparseSampleExplicitLod 3299 3300 Lod 3301 + 3303: 7(f16vec4) CompositeExtract 3302 1 + Store 3286(texel) 3303 + 3304: 47(int) CompositeExtract 3302 0 + 3305: 163 Load 165(s3D) + 3306:175(f16vec3) Load 177(f16c3) + 3307:6(float16_t) Load 572(f16lod) + 3308:3146(ResType) ImageSparseSampleExplicitLod 3305 3306 Lod 3307 + 3309: 7(f16vec4) CompositeExtract 3308 1 + Store 3286(texel) 3309 + 3310: 47(int) CompositeExtract 3308 0 + 3311: 184 Load 186(sCube) + 3312: 167(fvec3) Load 169(c3) + 3313: 52(float) Load 565(lod) + 3314:3146(ResType) ImageSparseSampleExplicitLod 3311 3312 Lod 3313 + 3315: 7(f16vec4) CompositeExtract 3314 1 + Store 3286(texel) 3315 + 3316: 47(int) CompositeExtract 3314 0 + 3317: 184 Load 186(sCube) + 3318:175(f16vec3) Load 177(f16c3) + 3319:6(float16_t) Load 572(f16lod) + 3320:3146(ResType) ImageSparseSampleExplicitLod 3317 3318 Lod 3319 + 3321: 7(f16vec4) CompositeExtract 3320 1 + Store 3286(texel) 3321 + 3322: 47(int) CompositeExtract 3320 0 + 3323: 224 Load 226(s2DShadow) + 3324: 167(fvec3) Load 169(c3) + 3325: 52(float) Load 565(lod) + 3326: 208(ptr) AccessChain 3286(texel) 207 + 3327: 52(float) CompositeExtract 3324 2 + 3328:3182(ResType) ImageSparseSampleDrefExplicitLod 3323 3324 3327 Lod 3325 + 3329:6(float16_t) CompositeExtract 3328 1 + Store 3326 3329 + 3330: 47(int) CompositeExtract 3328 0 + 3331: 224 Load 226(s2DShadow) + 3332:154(f16vec2) Load 156(f16c2) + 3333: 52(float) Load 215(compare) + 3334:6(float16_t) Load 572(f16lod) + 3335: 208(ptr) AccessChain 3286(texel) 207 + 3336:3182(ResType) ImageSparseSampleDrefExplicitLod 3331 3332 3333 Lod 3334 + 3337:6(float16_t) CompositeExtract 3336 1 + Store 3335 3337 3338: 47(int) CompositeExtract 3336 0 - 3339: 163 Load 165(s3D) - 3340:175(f16vec3) Load 177(f16c3) - 3341:6(float16_t) Load 137(f16bias) - 3342:3102(ResType) ImageSparseSampleImplicitLod 3339 3340 Bias ConstOffset 3341 735 + 3339: 284 Load 286(s2DArray) + 3340: 167(fvec3) Load 169(c3) + 3341: 52(float) Load 565(lod) + 3342:3146(ResType) ImageSparseSampleExplicitLod 3339 3340 Lod 3341 3343: 7(f16vec4) CompositeExtract 3342 1 - Store 3322(texel) 3343 + Store 3286(texel) 3343 3344: 47(int) CompositeExtract 3342 0 - 3345: 357 Load 359(s2DRect) - 3346: 53(fvec2) Load 148(c2) - 3347:3102(ResType) ImageSparseSampleImplicitLod 3345 3346 ConstOffset 722 - 3348: 7(f16vec4) CompositeExtract 3347 1 - Store 3322(texel) 3348 - 3349: 47(int) CompositeExtract 3347 0 - 3350: 357 Load 359(s2DRect) - 3351:154(f16vec2) Load 156(f16c2) - 3352:3102(ResType) ImageSparseSampleImplicitLod 3350 3351 ConstOffset 722 - 3353: 7(f16vec4) CompositeExtract 3352 1 - Store 3322(texel) 3353 - 3354: 47(int) CompositeExtract 3352 0 - 3355: 371 Load 373(s2DRectShadow) - 3356: 167(fvec3) Load 169(c3) - 3357: 208(ptr) AccessChain 3322(texel) 207 - 3358: 52(float) CompositeExtract 3356 2 - 3359:3138(ResType) ImageSparseSampleDrefImplicitLod 3355 3356 3358 ConstOffset 722 - 3360:6(float16_t) CompositeExtract 3359 1 - Store 3357 3360 - 3361: 47(int) CompositeExtract 3359 0 - 3362: 371 Load 373(s2DRectShadow) - 3363:154(f16vec2) Load 156(f16c2) - 3364: 52(float) Load 215(compare) - 3365: 208(ptr) AccessChain 3322(texel) 207 - 3366:3138(ResType) ImageSparseSampleDrefImplicitLod 3362 3363 3364 ConstOffset 722 - 3367:6(float16_t) CompositeExtract 3366 1 - Store 3365 3367 - 3368: 47(int) CompositeExtract 3366 0 - 3369: 224 Load 226(s2DShadow) - 3370: 167(fvec3) Load 169(c3) - 3371: 208(ptr) AccessChain 3322(texel) 207 - 3372: 52(float) CompositeExtract 3370 2 - 3373:3138(ResType) ImageSparseSampleDrefImplicitLod 3369 3370 3372 ConstOffset 722 - 3374:6(float16_t) CompositeExtract 3373 1 - Store 3371 3374 - 3375: 47(int) CompositeExtract 3373 0 - 3376: 224 Load 226(s2DShadow) - 3377:154(f16vec2) Load 156(f16c2) - 3378: 52(float) Load 215(compare) - 3379: 208(ptr) AccessChain 3322(texel) 207 - 3380:6(float16_t) Load 137(f16bias) - 3381:3138(ResType) ImageSparseSampleDrefImplicitLod 3376 3377 3378 Bias ConstOffset 3380 722 - 3382:6(float16_t) CompositeExtract 3381 1 - Store 3379 3382 - 3383: 47(int) CompositeExtract 3381 0 - 3384: 284 Load 286(s2DArray) - 3385: 167(fvec3) Load 169(c3) - 3386:3102(ResType) ImageSparseSampleImplicitLod 3384 3385 ConstOffset 722 + 3345: 284 Load 286(s2DArray) + 3346:175(f16vec3) Load 177(f16c3) + 3347:6(float16_t) Load 572(f16lod) + 3348:3146(ResType) ImageSparseSampleExplicitLod 3345 3346 Lod 3347 + 3349: 7(f16vec4) CompositeExtract 3348 1 + Store 3286(texel) 3349 + 3350: 47(int) CompositeExtract 3348 0 + 3351: 299 Load 301(sCubeArray) + 3352: 249(fvec4) Load 251(c4) + 3353: 52(float) Load 565(lod) + 3354:3146(ResType) ImageSparseSampleExplicitLod 3351 3352 Lod 3353 + 3355: 7(f16vec4) CompositeExtract 3354 1 + Store 3286(texel) 3355 + 3356: 47(int) CompositeExtract 3354 0 + 3357: 299 Load 301(sCubeArray) + 3358: 7(f16vec4) Load 309(f16c4) + 3359:6(float16_t) Load 572(f16lod) + 3360:3146(ResType) ImageSparseSampleExplicitLod 3357 3358 Lod 3359 + 3361: 7(f16vec4) CompositeExtract 3360 1 + Store 3286(texel) 3361 + 3362: 47(int) CompositeExtract 3360 0 + 3363: 7(f16vec4) Load 3286(texel) + ReturnValue 3363 + FunctionEnd +73(testSparseTextureOffset(): 7(f16vec4) Function None 8 + 74: Label + 3366(texel): 64(ptr) Variable Function + Store 3366(texel) 121 + 3367: 143 Load 145(s2D) + 3368: 53(fvec2) Load 148(c2) + 3369:3146(ResType) ImageSparseSampleImplicitLod 3367 3368 ConstOffset 722 + 3370: 7(f16vec4) CompositeExtract 3369 1 + Store 3366(texel) 3370 + 3371: 47(int) CompositeExtract 3369 0 + 3372: 143 Load 145(s2D) + 3373:154(f16vec2) Load 156(f16c2) + 3374:6(float16_t) Load 137(f16bias) + 3375:3146(ResType) ImageSparseSampleImplicitLod 3372 3373 Bias ConstOffset 3374 722 + 3376: 7(f16vec4) CompositeExtract 3375 1 + Store 3366(texel) 3376 + 3377: 47(int) CompositeExtract 3375 0 + 3378: 163 Load 165(s3D) + 3379: 167(fvec3) Load 169(c3) + 3380:3146(ResType) ImageSparseSampleImplicitLod 3378 3379 ConstOffset 735 + 3381: 7(f16vec4) CompositeExtract 3380 1 + Store 3366(texel) 3381 + 3382: 47(int) CompositeExtract 3380 0 + 3383: 163 Load 165(s3D) + 3384:175(f16vec3) Load 177(f16c3) + 3385:6(float16_t) Load 137(f16bias) + 3386:3146(ResType) ImageSparseSampleImplicitLod 3383 3384 Bias ConstOffset 3385 735 3387: 7(f16vec4) CompositeExtract 3386 1 - Store 3322(texel) 3387 + Store 3366(texel) 3387 3388: 47(int) CompositeExtract 3386 0 - 3389: 284 Load 286(s2DArray) - 3390:175(f16vec3) Load 177(f16c3) - 3391:6(float16_t) Load 137(f16bias) - 3392:3102(ResType) ImageSparseSampleImplicitLod 3389 3390 Bias ConstOffset 3391 722 - 3393: 7(f16vec4) CompositeExtract 3392 1 - Store 3322(texel) 3393 - 3394: 47(int) CompositeExtract 3392 0 - 3395: 337 Load 339(s2DArrayShadow) - 3396: 249(fvec4) Load 251(c4) - 3397: 208(ptr) AccessChain 3322(texel) 207 - 3398: 52(float) CompositeExtract 3396 3 - 3399:3138(ResType) ImageSparseSampleDrefImplicitLod 3395 3396 3398 ConstOffset 722 - 3400:6(float16_t) CompositeExtract 3399 1 - Store 3397 3400 - 3401: 47(int) CompositeExtract 3399 0 - 3402: 337 Load 339(s2DArrayShadow) - 3403:175(f16vec3) Load 177(f16c3) - 3404: 52(float) Load 215(compare) - 3405: 208(ptr) AccessChain 3322(texel) 207 - 3406:3138(ResType) ImageSparseSampleDrefImplicitLod 3402 3403 3404 ConstOffset 722 - 3407:6(float16_t) CompositeExtract 3406 1 - Store 3405 3407 - 3408: 47(int) CompositeExtract 3406 0 - 3409: 7(f16vec4) Load 3322(texel) - ReturnValue 3409 - FunctionEnd -75(testSparseTextureLodOffset(): 7(f16vec4) Function None 8 - 76: Label - 3412(texel): 64(ptr) Variable Function - Store 3412(texel) 121 - 3413: 143 Load 145(s2D) - 3414: 53(fvec2) Load 148(c2) - 3415: 52(float) Load 565(lod) - 3416:3102(ResType) ImageSparseSampleExplicitLod 3413 3414 Lod ConstOffset 3415 722 - 3417: 7(f16vec4) CompositeExtract 3416 1 - Store 3412(texel) 3417 - 3418: 47(int) CompositeExtract 3416 0 - 3419: 143 Load 145(s2D) - 3420:154(f16vec2) Load 156(f16c2) - 3421:6(float16_t) Load 572(f16lod) - 3422:3102(ResType) ImageSparseSampleExplicitLod 3419 3420 Lod ConstOffset 3421 722 - 3423: 7(f16vec4) CompositeExtract 3422 1 - Store 3412(texel) 3423 - 3424: 47(int) CompositeExtract 3422 0 - 3425: 163 Load 165(s3D) - 3426: 167(fvec3) Load 169(c3) - 3427: 52(float) Load 565(lod) - 3428:3102(ResType) ImageSparseSampleExplicitLod 3425 3426 Lod ConstOffset 3427 735 - 3429: 7(f16vec4) CompositeExtract 3428 1 - Store 3412(texel) 3429 - 3430: 47(int) CompositeExtract 3428 0 - 3431: 163 Load 165(s3D) - 3432:175(f16vec3) Load 177(f16c3) - 3433:6(float16_t) Load 572(f16lod) - 3434:3102(ResType) ImageSparseSampleExplicitLod 3431 3432 Lod ConstOffset 3433 735 - 3435: 7(f16vec4) CompositeExtract 3434 1 - Store 3412(texel) 3435 - 3436: 47(int) CompositeExtract 3434 0 - 3437: 224 Load 226(s2DShadow) - 3438: 167(fvec3) Load 169(c3) - 3439: 52(float) Load 565(lod) - 3440: 208(ptr) AccessChain 3412(texel) 207 - 3441: 52(float) CompositeExtract 3438 2 - 3442:3138(ResType) ImageSparseSampleDrefExplicitLod 3437 3438 3441 Lod ConstOffset 3439 722 - 3443:6(float16_t) CompositeExtract 3442 1 - Store 3440 3443 - 3444: 47(int) CompositeExtract 3442 0 - 3445: 224 Load 226(s2DShadow) - 3446:154(f16vec2) Load 156(f16c2) - 3447: 52(float) Load 215(compare) - 3448:6(float16_t) Load 572(f16lod) - 3449: 208(ptr) AccessChain 3412(texel) 207 - 3450:3138(ResType) ImageSparseSampleDrefExplicitLod 3445 3446 3447 Lod ConstOffset 3448 722 + 3389: 357 Load 359(s2DRect) + 3390: 53(fvec2) Load 148(c2) + 3391:3146(ResType) ImageSparseSampleImplicitLod 3389 3390 ConstOffset 722 + 3392: 7(f16vec4) CompositeExtract 3391 1 + Store 3366(texel) 3392 + 3393: 47(int) CompositeExtract 3391 0 + 3394: 357 Load 359(s2DRect) + 3395:154(f16vec2) Load 156(f16c2) + 3396:3146(ResType) ImageSparseSampleImplicitLod 3394 3395 ConstOffset 722 + 3397: 7(f16vec4) CompositeExtract 3396 1 + Store 3366(texel) 3397 + 3398: 47(int) CompositeExtract 3396 0 + 3399: 371 Load 373(s2DRectShadow) + 3400: 167(fvec3) Load 169(c3) + 3401: 208(ptr) AccessChain 3366(texel) 207 + 3402: 52(float) CompositeExtract 3400 2 + 3403:3182(ResType) ImageSparseSampleDrefImplicitLod 3399 3400 3402 ConstOffset 722 + 3404:6(float16_t) CompositeExtract 3403 1 + Store 3401 3404 + 3405: 47(int) CompositeExtract 3403 0 + 3406: 371 Load 373(s2DRectShadow) + 3407:154(f16vec2) Load 156(f16c2) + 3408: 52(float) Load 215(compare) + 3409: 208(ptr) AccessChain 3366(texel) 207 + 3410:3182(ResType) ImageSparseSampleDrefImplicitLod 3406 3407 3408 ConstOffset 722 + 3411:6(float16_t) CompositeExtract 3410 1 + Store 3409 3411 + 3412: 47(int) CompositeExtract 3410 0 + 3413: 224 Load 226(s2DShadow) + 3414: 167(fvec3) Load 169(c3) + 3415: 208(ptr) AccessChain 3366(texel) 207 + 3416: 52(float) CompositeExtract 3414 2 + 3417:3182(ResType) ImageSparseSampleDrefImplicitLod 3413 3414 3416 ConstOffset 722 + 3418:6(float16_t) CompositeExtract 3417 1 + Store 3415 3418 + 3419: 47(int) CompositeExtract 3417 0 + 3420: 224 Load 226(s2DShadow) + 3421:154(f16vec2) Load 156(f16c2) + 3422: 52(float) Load 215(compare) + 3423: 208(ptr) AccessChain 3366(texel) 207 + 3424:6(float16_t) Load 137(f16bias) + 3425:3182(ResType) ImageSparseSampleDrefImplicitLod 3420 3421 3422 Bias ConstOffset 3424 722 + 3426:6(float16_t) CompositeExtract 3425 1 + Store 3423 3426 + 3427: 47(int) CompositeExtract 3425 0 + 3428: 284 Load 286(s2DArray) + 3429: 167(fvec3) Load 169(c3) + 3430:3146(ResType) ImageSparseSampleImplicitLod 3428 3429 ConstOffset 722 + 3431: 7(f16vec4) CompositeExtract 3430 1 + Store 3366(texel) 3431 + 3432: 47(int) CompositeExtract 3430 0 + 3433: 284 Load 286(s2DArray) + 3434:175(f16vec3) Load 177(f16c3) + 3435:6(float16_t) Load 137(f16bias) + 3436:3146(ResType) ImageSparseSampleImplicitLod 3433 3434 Bias ConstOffset 3435 722 + 3437: 7(f16vec4) CompositeExtract 3436 1 + Store 3366(texel) 3437 + 3438: 47(int) CompositeExtract 3436 0 + 3439: 337 Load 339(s2DArrayShadow) + 3440: 249(fvec4) Load 251(c4) + 3441: 208(ptr) AccessChain 3366(texel) 207 + 3442: 52(float) CompositeExtract 3440 3 + 3443:3182(ResType) ImageSparseSampleDrefImplicitLod 3439 3440 3442 ConstOffset 722 + 3444:6(float16_t) CompositeExtract 3443 1 + Store 3441 3444 + 3445: 47(int) CompositeExtract 3443 0 + 3446: 337 Load 339(s2DArrayShadow) + 3447:175(f16vec3) Load 177(f16c3) + 3448: 52(float) Load 215(compare) + 3449: 208(ptr) AccessChain 3366(texel) 207 + 3450:3182(ResType) ImageSparseSampleDrefImplicitLod 3446 3447 3448 ConstOffset 722 3451:6(float16_t) CompositeExtract 3450 1 Store 3449 3451 3452: 47(int) CompositeExtract 3450 0 - 3453: 284 Load 286(s2DArray) - 3454: 167(fvec3) Load 169(c3) - 3455: 52(float) Load 565(lod) - 3456:3102(ResType) ImageSparseSampleExplicitLod 3453 3454 Lod ConstOffset 3455 722 - 3457: 7(f16vec4) CompositeExtract 3456 1 - Store 3412(texel) 3457 - 3458: 47(int) CompositeExtract 3456 0 - 3459: 284 Load 286(s2DArray) - 3460:175(f16vec3) Load 177(f16c3) - 3461:6(float16_t) Load 572(f16lod) - 3462:3102(ResType) ImageSparseSampleExplicitLod 3459 3460 Lod ConstOffset 3461 722 - 3463: 7(f16vec4) CompositeExtract 3462 1 - Store 3412(texel) 3463 - 3464: 47(int) CompositeExtract 3462 0 - 3465: 7(f16vec4) Load 3412(texel) - ReturnValue 3465 + 3453: 7(f16vec4) Load 3366(texel) + ReturnValue 3453 FunctionEnd -77(testSparseTextureGrad(): 7(f16vec4) Function None 8 - 78: Label - 3468(texel): 64(ptr) Variable Function - Store 3468(texel) 121 - 3469: 143 Load 145(s2D) - 3470: 53(fvec2) Load 148(c2) - 3471: 53(fvec2) Load 1409(dPdxy2) - 3472: 53(fvec2) Load 1409(dPdxy2) - 3473:3102(ResType) ImageSparseSampleExplicitLod 3469 3470 Grad 3471 3472 - 3474: 7(f16vec4) CompositeExtract 3473 1 - Store 3468(texel) 3474 - 3475: 47(int) CompositeExtract 3473 0 - 3476: 143 Load 145(s2D) - 3477:154(f16vec2) Load 156(f16c2) - 3478:154(f16vec2) Load 1417(f16dPdxy2) - 3479:154(f16vec2) Load 1417(f16dPdxy2) - 3480:3102(ResType) ImageSparseSampleExplicitLod 3476 3477 Grad 3478 3479 - 3481: 7(f16vec4) CompositeExtract 3480 1 - Store 3468(texel) 3481 - 3482: 47(int) CompositeExtract 3480 0 - 3483: 163 Load 165(s3D) - 3484: 167(fvec3) Load 169(c3) - 3485: 167(fvec3) Load 1425(dPdxy3) - 3486: 167(fvec3) Load 1425(dPdxy3) - 3487:3102(ResType) ImageSparseSampleExplicitLod 3483 3484 Grad 3485 3486 - 3488: 7(f16vec4) CompositeExtract 3487 1 - Store 3468(texel) 3488 - 3489: 47(int) CompositeExtract 3487 0 - 3490: 163 Load 165(s3D) - 3491:175(f16vec3) Load 177(f16c3) - 3492:175(f16vec3) Load 1433(f16dPdxy3) - 3493:175(f16vec3) Load 1433(f16dPdxy3) - 3494:3102(ResType) ImageSparseSampleExplicitLod 3490 3491 Grad 3492 3493 - 3495: 7(f16vec4) CompositeExtract 3494 1 - Store 3468(texel) 3495 +75(testSparseTextureLodOffset(): 7(f16vec4) Function None 8 + 76: Label + 3456(texel): 64(ptr) Variable Function + Store 3456(texel) 121 + 3457: 143 Load 145(s2D) + 3458: 53(fvec2) Load 148(c2) + 3459: 52(float) Load 565(lod) + 3460:3146(ResType) ImageSparseSampleExplicitLod 3457 3458 Lod ConstOffset 3459 722 + 3461: 7(f16vec4) CompositeExtract 3460 1 + Store 3456(texel) 3461 + 3462: 47(int) CompositeExtract 3460 0 + 3463: 143 Load 145(s2D) + 3464:154(f16vec2) Load 156(f16c2) + 3465:6(float16_t) Load 572(f16lod) + 3466:3146(ResType) ImageSparseSampleExplicitLod 3463 3464 Lod ConstOffset 3465 722 + 3467: 7(f16vec4) CompositeExtract 3466 1 + Store 3456(texel) 3467 + 3468: 47(int) CompositeExtract 3466 0 + 3469: 163 Load 165(s3D) + 3470: 167(fvec3) Load 169(c3) + 3471: 52(float) Load 565(lod) + 3472:3146(ResType) ImageSparseSampleExplicitLod 3469 3470 Lod ConstOffset 3471 735 + 3473: 7(f16vec4) CompositeExtract 3472 1 + Store 3456(texel) 3473 + 3474: 47(int) CompositeExtract 3472 0 + 3475: 163 Load 165(s3D) + 3476:175(f16vec3) Load 177(f16c3) + 3477:6(float16_t) Load 572(f16lod) + 3478:3146(ResType) ImageSparseSampleExplicitLod 3475 3476 Lod ConstOffset 3477 735 + 3479: 7(f16vec4) CompositeExtract 3478 1 + Store 3456(texel) 3479 + 3480: 47(int) CompositeExtract 3478 0 + 3481: 224 Load 226(s2DShadow) + 3482: 167(fvec3) Load 169(c3) + 3483: 52(float) Load 565(lod) + 3484: 208(ptr) AccessChain 3456(texel) 207 + 3485: 52(float) CompositeExtract 3482 2 + 3486:3182(ResType) ImageSparseSampleDrefExplicitLod 3481 3482 3485 Lod ConstOffset 3483 722 + 3487:6(float16_t) CompositeExtract 3486 1 + Store 3484 3487 + 3488: 47(int) CompositeExtract 3486 0 + 3489: 224 Load 226(s2DShadow) + 3490:154(f16vec2) Load 156(f16c2) + 3491: 52(float) Load 215(compare) + 3492:6(float16_t) Load 572(f16lod) + 3493: 208(ptr) AccessChain 3456(texel) 207 + 3494:3182(ResType) ImageSparseSampleDrefExplicitLod 3489 3490 3491 Lod ConstOffset 3492 722 + 3495:6(float16_t) CompositeExtract 3494 1 + Store 3493 3495 3496: 47(int) CompositeExtract 3494 0 - 3497: 184 Load 186(sCube) + 3497: 284 Load 286(s2DArray) 3498: 167(fvec3) Load 169(c3) - 3499: 167(fvec3) Load 1425(dPdxy3) - 3500: 167(fvec3) Load 1425(dPdxy3) - 3501:3102(ResType) ImageSparseSampleExplicitLod 3497 3498 Grad 3499 3500 - 3502: 7(f16vec4) CompositeExtract 3501 1 - Store 3468(texel) 3502 - 3503: 47(int) CompositeExtract 3501 0 - 3504: 184 Load 186(sCube) - 3505:175(f16vec3) Load 177(f16c3) - 3506:175(f16vec3) Load 1433(f16dPdxy3) - 3507:175(f16vec3) Load 1433(f16dPdxy3) - 3508:3102(ResType) ImageSparseSampleExplicitLod 3504 3505 Grad 3506 3507 - 3509: 7(f16vec4) CompositeExtract 3508 1 - Store 3468(texel) 3509 - 3510: 47(int) CompositeExtract 3508 0 - 3511: 357 Load 359(s2DRect) - 3512: 53(fvec2) Load 148(c2) - 3513: 53(fvec2) Load 1409(dPdxy2) - 3514: 53(fvec2) Load 1409(dPdxy2) - 3515:3102(ResType) ImageSparseSampleExplicitLod 3511 3512 Grad 3513 3514 - 3516: 7(f16vec4) CompositeExtract 3515 1 - Store 3468(texel) 3516 - 3517: 47(int) CompositeExtract 3515 0 - 3518: 357 Load 359(s2DRect) - 3519:154(f16vec2) Load 156(f16c2) - 3520:154(f16vec2) Load 1417(f16dPdxy2) - 3521:154(f16vec2) Load 1417(f16dPdxy2) - 3522:3102(ResType) ImageSparseSampleExplicitLod 3518 3519 Grad 3520 3521 - 3523: 7(f16vec4) CompositeExtract 3522 1 - Store 3468(texel) 3523 - 3524: 47(int) CompositeExtract 3522 0 - 3525: 371 Load 373(s2DRectShadow) - 3526: 167(fvec3) Load 169(c3) - 3527: 53(fvec2) Load 1409(dPdxy2) - 3528: 53(fvec2) Load 1409(dPdxy2) - 3529: 208(ptr) AccessChain 3468(texel) 207 - 3530: 52(float) CompositeExtract 3526 2 - 3531:3138(ResType) ImageSparseSampleDrefExplicitLod 3525 3526 3530 Grad 3527 3528 - 3532:6(float16_t) CompositeExtract 3531 1 - Store 3529 3532 + 3499: 52(float) Load 565(lod) + 3500:3146(ResType) ImageSparseSampleExplicitLod 3497 3498 Lod ConstOffset 3499 722 + 3501: 7(f16vec4) CompositeExtract 3500 1 + Store 3456(texel) 3501 + 3502: 47(int) CompositeExtract 3500 0 + 3503: 284 Load 286(s2DArray) + 3504:175(f16vec3) Load 177(f16c3) + 3505:6(float16_t) Load 572(f16lod) + 3506:3146(ResType) ImageSparseSampleExplicitLod 3503 3504 Lod ConstOffset 3505 722 + 3507: 7(f16vec4) CompositeExtract 3506 1 + Store 3456(texel) 3507 + 3508: 47(int) CompositeExtract 3506 0 + 3509: 7(f16vec4) Load 3456(texel) + ReturnValue 3509 + FunctionEnd +77(testSparseTextureGrad(): 7(f16vec4) Function None 8 + 78: Label + 3512(texel): 64(ptr) Variable Function + Store 3512(texel) 121 + 3513: 143 Load 145(s2D) + 3514: 53(fvec2) Load 148(c2) + 3515: 53(fvec2) Load 1409(dPdxy2) + 3516: 53(fvec2) Load 1409(dPdxy2) + 3517:3146(ResType) ImageSparseSampleExplicitLod 3513 3514 Grad 3515 3516 + 3518: 7(f16vec4) CompositeExtract 3517 1 + Store 3512(texel) 3518 + 3519: 47(int) CompositeExtract 3517 0 + 3520: 143 Load 145(s2D) + 3521:154(f16vec2) Load 156(f16c2) + 3522:154(f16vec2) Load 1417(f16dPdxy2) + 3523:154(f16vec2) Load 1417(f16dPdxy2) + 3524:3146(ResType) ImageSparseSampleExplicitLod 3520 3521 Grad 3522 3523 + 3525: 7(f16vec4) CompositeExtract 3524 1 + Store 3512(texel) 3525 + 3526: 47(int) CompositeExtract 3524 0 + 3527: 163 Load 165(s3D) + 3528: 167(fvec3) Load 169(c3) + 3529: 167(fvec3) Load 1425(dPdxy3) + 3530: 167(fvec3) Load 1425(dPdxy3) + 3531:3146(ResType) ImageSparseSampleExplicitLod 3527 3528 Grad 3529 3530 + 3532: 7(f16vec4) CompositeExtract 3531 1 + Store 3512(texel) 3532 3533: 47(int) CompositeExtract 3531 0 - 3534: 371 Load 373(s2DRectShadow) - 3535:154(f16vec2) Load 156(f16c2) - 3536: 52(float) Load 215(compare) - 3537:154(f16vec2) Load 1417(f16dPdxy2) - 3538:154(f16vec2) Load 1417(f16dPdxy2) - 3539: 208(ptr) AccessChain 3468(texel) 207 - 3540:3138(ResType) ImageSparseSampleDrefExplicitLod 3534 3535 3536 Grad 3537 3538 - 3541:6(float16_t) CompositeExtract 3540 1 - Store 3539 3541 - 3542: 47(int) CompositeExtract 3540 0 - 3543: 224 Load 226(s2DShadow) - 3544: 167(fvec3) Load 169(c3) - 3545: 53(fvec2) Load 1409(dPdxy2) - 3546: 53(fvec2) Load 1409(dPdxy2) - 3547: 208(ptr) AccessChain 3468(texel) 207 - 3548: 52(float) CompositeExtract 3544 2 - 3549:3138(ResType) ImageSparseSampleDrefExplicitLod 3543 3544 3548 Grad 3545 3546 - 3550:6(float16_t) CompositeExtract 3549 1 - Store 3547 3550 - 3551: 47(int) CompositeExtract 3549 0 - 3552: 224 Load 226(s2DShadow) - 3553:154(f16vec2) Load 156(f16c2) - 3554: 52(float) Load 215(compare) - 3555:154(f16vec2) Load 1417(f16dPdxy2) - 3556:154(f16vec2) Load 1417(f16dPdxy2) - 3557: 208(ptr) AccessChain 3468(texel) 207 - 3558:3138(ResType) ImageSparseSampleDrefExplicitLod 3552 3553 3554 Grad 3555 3556 - 3559:6(float16_t) CompositeExtract 3558 1 - Store 3557 3559 - 3560: 47(int) CompositeExtract 3558 0 - 3561: 245 Load 247(sCubeShadow) - 3562: 249(fvec4) Load 251(c4) - 3563: 167(fvec3) Load 1425(dPdxy3) - 3564: 167(fvec3) Load 1425(dPdxy3) - 3565: 208(ptr) AccessChain 3468(texel) 207 - 3566: 52(float) CompositeExtract 3562 3 - 3567:3138(ResType) ImageSparseSampleDrefExplicitLod 3561 3562 3566 Grad 3563 3564 - 3568:6(float16_t) CompositeExtract 3567 1 - Store 3565 3568 - 3569: 47(int) CompositeExtract 3567 0 - 3570: 245 Load 247(sCubeShadow) - 3571:175(f16vec3) Load 177(f16c3) - 3572: 52(float) Load 215(compare) - 3573:175(f16vec3) Load 1433(f16dPdxy3) - 3574:175(f16vec3) Load 1433(f16dPdxy3) - 3575: 208(ptr) AccessChain 3468(texel) 207 - 3576:3138(ResType) ImageSparseSampleDrefExplicitLod 3570 3571 3572 Grad 3573 3574 - 3577:6(float16_t) CompositeExtract 3576 1 - Store 3575 3577 - 3578: 47(int) CompositeExtract 3576 0 - 3579: 284 Load 286(s2DArray) - 3580: 167(fvec3) Load 169(c3) - 3581: 53(fvec2) Load 1409(dPdxy2) - 3582: 53(fvec2) Load 1409(dPdxy2) - 3583:3102(ResType) ImageSparseSampleExplicitLod 3579 3580 Grad 3581 3582 - 3584: 7(f16vec4) CompositeExtract 3583 1 - Store 3468(texel) 3584 - 3585: 47(int) CompositeExtract 3583 0 - 3586: 284 Load 286(s2DArray) - 3587:175(f16vec3) Load 177(f16c3) - 3588:154(f16vec2) Load 1417(f16dPdxy2) - 3589:154(f16vec2) Load 1417(f16dPdxy2) - 3590:3102(ResType) ImageSparseSampleExplicitLod 3586 3587 Grad 3588 3589 - 3591: 7(f16vec4) CompositeExtract 3590 1 - Store 3468(texel) 3591 - 3592: 47(int) CompositeExtract 3590 0 - 3593: 337 Load 339(s2DArrayShadow) - 3594: 249(fvec4) Load 251(c4) - 3595: 53(fvec2) Load 1409(dPdxy2) - 3596: 53(fvec2) Load 1409(dPdxy2) - 3597: 208(ptr) AccessChain 3468(texel) 207 - 3598: 52(float) CompositeExtract 3594 3 - 3599:3138(ResType) ImageSparseSampleDrefExplicitLod 3593 3594 3598 Grad 3595 3596 - 3600:6(float16_t) CompositeExtract 3599 1 - Store 3597 3600 - 3601: 47(int) CompositeExtract 3599 0 - 3602: 337 Load 339(s2DArrayShadow) - 3603:175(f16vec3) Load 177(f16c3) - 3604: 52(float) Load 215(compare) - 3605:154(f16vec2) Load 1417(f16dPdxy2) - 3606:154(f16vec2) Load 1417(f16dPdxy2) - 3607: 208(ptr) AccessChain 3468(texel) 207 - 3608:3138(ResType) ImageSparseSampleDrefExplicitLod 3602 3603 3604 Grad 3605 3606 - 3609:6(float16_t) CompositeExtract 3608 1 - Store 3607 3609 - 3610: 47(int) CompositeExtract 3608 0 - 3611: 299 Load 301(sCubeArray) - 3612: 249(fvec4) Load 251(c4) - 3613: 167(fvec3) Load 1425(dPdxy3) - 3614: 167(fvec3) Load 1425(dPdxy3) - 3615:3102(ResType) ImageSparseSampleExplicitLod 3611 3612 Grad 3613 3614 - 3616: 7(f16vec4) CompositeExtract 3615 1 - Store 3468(texel) 3616 - 3617: 47(int) CompositeExtract 3615 0 - 3618: 299 Load 301(sCubeArray) - 3619: 7(f16vec4) Load 309(f16c4) - 3620:175(f16vec3) Load 1433(f16dPdxy3) - 3621:175(f16vec3) Load 1433(f16dPdxy3) - 3622:3102(ResType) ImageSparseSampleExplicitLod 3618 3619 Grad 3620 3621 - 3623: 7(f16vec4) CompositeExtract 3622 1 - Store 3468(texel) 3623 - 3624: 47(int) CompositeExtract 3622 0 - 3625: 7(f16vec4) Load 3468(texel) - ReturnValue 3625 + 3534: 163 Load 165(s3D) + 3535:175(f16vec3) Load 177(f16c3) + 3536:175(f16vec3) Load 1433(f16dPdxy3) + 3537:175(f16vec3) Load 1433(f16dPdxy3) + 3538:3146(ResType) ImageSparseSampleExplicitLod 3534 3535 Grad 3536 3537 + 3539: 7(f16vec4) CompositeExtract 3538 1 + Store 3512(texel) 3539 + 3540: 47(int) CompositeExtract 3538 0 + 3541: 184 Load 186(sCube) + 3542: 167(fvec3) Load 169(c3) + 3543: 167(fvec3) Load 1425(dPdxy3) + 3544: 167(fvec3) Load 1425(dPdxy3) + 3545:3146(ResType) ImageSparseSampleExplicitLod 3541 3542 Grad 3543 3544 + 3546: 7(f16vec4) CompositeExtract 3545 1 + Store 3512(texel) 3546 + 3547: 47(int) CompositeExtract 3545 0 + 3548: 184 Load 186(sCube) + 3549:175(f16vec3) Load 177(f16c3) + 3550:175(f16vec3) Load 1433(f16dPdxy3) + 3551:175(f16vec3) Load 1433(f16dPdxy3) + 3552:3146(ResType) ImageSparseSampleExplicitLod 3548 3549 Grad 3550 3551 + 3553: 7(f16vec4) CompositeExtract 3552 1 + Store 3512(texel) 3553 + 3554: 47(int) CompositeExtract 3552 0 + 3555: 357 Load 359(s2DRect) + 3556: 53(fvec2) Load 148(c2) + 3557: 53(fvec2) Load 1409(dPdxy2) + 3558: 53(fvec2) Load 1409(dPdxy2) + 3559:3146(ResType) ImageSparseSampleExplicitLod 3555 3556 Grad 3557 3558 + 3560: 7(f16vec4) CompositeExtract 3559 1 + Store 3512(texel) 3560 + 3561: 47(int) CompositeExtract 3559 0 + 3562: 357 Load 359(s2DRect) + 3563:154(f16vec2) Load 156(f16c2) + 3564:154(f16vec2) Load 1417(f16dPdxy2) + 3565:154(f16vec2) Load 1417(f16dPdxy2) + 3566:3146(ResType) ImageSparseSampleExplicitLod 3562 3563 Grad 3564 3565 + 3567: 7(f16vec4) CompositeExtract 3566 1 + Store 3512(texel) 3567 + 3568: 47(int) CompositeExtract 3566 0 + 3569: 371 Load 373(s2DRectShadow) + 3570: 167(fvec3) Load 169(c3) + 3571: 53(fvec2) Load 1409(dPdxy2) + 3572: 53(fvec2) Load 1409(dPdxy2) + 3573: 208(ptr) AccessChain 3512(texel) 207 + 3574: 52(float) CompositeExtract 3570 2 + 3575:3182(ResType) ImageSparseSampleDrefExplicitLod 3569 3570 3574 Grad 3571 3572 + 3576:6(float16_t) CompositeExtract 3575 1 + Store 3573 3576 + 3577: 47(int) CompositeExtract 3575 0 + 3578: 371 Load 373(s2DRectShadow) + 3579:154(f16vec2) Load 156(f16c2) + 3580: 52(float) Load 215(compare) + 3581:154(f16vec2) Load 1417(f16dPdxy2) + 3582:154(f16vec2) Load 1417(f16dPdxy2) + 3583: 208(ptr) AccessChain 3512(texel) 207 + 3584:3182(ResType) ImageSparseSampleDrefExplicitLod 3578 3579 3580 Grad 3581 3582 + 3585:6(float16_t) CompositeExtract 3584 1 + Store 3583 3585 + 3586: 47(int) CompositeExtract 3584 0 + 3587: 224 Load 226(s2DShadow) + 3588: 167(fvec3) Load 169(c3) + 3589: 53(fvec2) Load 1409(dPdxy2) + 3590: 53(fvec2) Load 1409(dPdxy2) + 3591: 208(ptr) AccessChain 3512(texel) 207 + 3592: 52(float) CompositeExtract 3588 2 + 3593:3182(ResType) ImageSparseSampleDrefExplicitLod 3587 3588 3592 Grad 3589 3590 + 3594:6(float16_t) CompositeExtract 3593 1 + Store 3591 3594 + 3595: 47(int) CompositeExtract 3593 0 + 3596: 224 Load 226(s2DShadow) + 3597:154(f16vec2) Load 156(f16c2) + 3598: 52(float) Load 215(compare) + 3599:154(f16vec2) Load 1417(f16dPdxy2) + 3600:154(f16vec2) Load 1417(f16dPdxy2) + 3601: 208(ptr) AccessChain 3512(texel) 207 + 3602:3182(ResType) ImageSparseSampleDrefExplicitLod 3596 3597 3598 Grad 3599 3600 + 3603:6(float16_t) CompositeExtract 3602 1 + Store 3601 3603 + 3604: 47(int) CompositeExtract 3602 0 + 3605: 245 Load 247(sCubeShadow) + 3606: 249(fvec4) Load 251(c4) + 3607: 167(fvec3) Load 1425(dPdxy3) + 3608: 167(fvec3) Load 1425(dPdxy3) + 3609: 208(ptr) AccessChain 3512(texel) 207 + 3610: 52(float) CompositeExtract 3606 3 + 3611:3182(ResType) ImageSparseSampleDrefExplicitLod 3605 3606 3610 Grad 3607 3608 + 3612:6(float16_t) CompositeExtract 3611 1 + Store 3609 3612 + 3613: 47(int) CompositeExtract 3611 0 + 3614: 245 Load 247(sCubeShadow) + 3615:175(f16vec3) Load 177(f16c3) + 3616: 52(float) Load 215(compare) + 3617:175(f16vec3) Load 1433(f16dPdxy3) + 3618:175(f16vec3) Load 1433(f16dPdxy3) + 3619: 208(ptr) AccessChain 3512(texel) 207 + 3620:3182(ResType) ImageSparseSampleDrefExplicitLod 3614 3615 3616 Grad 3617 3618 + 3621:6(float16_t) CompositeExtract 3620 1 + Store 3619 3621 + 3622: 47(int) CompositeExtract 3620 0 + 3623: 284 Load 286(s2DArray) + 3624: 167(fvec3) Load 169(c3) + 3625: 53(fvec2) Load 1409(dPdxy2) + 3626: 53(fvec2) Load 1409(dPdxy2) + 3627:3146(ResType) ImageSparseSampleExplicitLod 3623 3624 Grad 3625 3626 + 3628: 7(f16vec4) CompositeExtract 3627 1 + Store 3512(texel) 3628 + 3629: 47(int) CompositeExtract 3627 0 + 3630: 284 Load 286(s2DArray) + 3631:175(f16vec3) Load 177(f16c3) + 3632:154(f16vec2) Load 1417(f16dPdxy2) + 3633:154(f16vec2) Load 1417(f16dPdxy2) + 3634:3146(ResType) ImageSparseSampleExplicitLod 3630 3631 Grad 3632 3633 + 3635: 7(f16vec4) CompositeExtract 3634 1 + Store 3512(texel) 3635 + 3636: 47(int) CompositeExtract 3634 0 + 3637: 337 Load 339(s2DArrayShadow) + 3638: 249(fvec4) Load 251(c4) + 3639: 53(fvec2) Load 1409(dPdxy2) + 3640: 53(fvec2) Load 1409(dPdxy2) + 3641: 208(ptr) AccessChain 3512(texel) 207 + 3642: 52(float) CompositeExtract 3638 3 + 3643:3182(ResType) ImageSparseSampleDrefExplicitLod 3637 3638 3642 Grad 3639 3640 + 3644:6(float16_t) CompositeExtract 3643 1 + Store 3641 3644 + 3645: 47(int) CompositeExtract 3643 0 + 3646: 337 Load 339(s2DArrayShadow) + 3647:175(f16vec3) Load 177(f16c3) + 3648: 52(float) Load 215(compare) + 3649:154(f16vec2) Load 1417(f16dPdxy2) + 3650:154(f16vec2) Load 1417(f16dPdxy2) + 3651: 208(ptr) AccessChain 3512(texel) 207 + 3652:3182(ResType) ImageSparseSampleDrefExplicitLod 3646 3647 3648 Grad 3649 3650 + 3653:6(float16_t) CompositeExtract 3652 1 + Store 3651 3653 + 3654: 47(int) CompositeExtract 3652 0 + 3655: 299 Load 301(sCubeArray) + 3656: 249(fvec4) Load 251(c4) + 3657: 167(fvec3) Load 1425(dPdxy3) + 3658: 167(fvec3) Load 1425(dPdxy3) + 3659:3146(ResType) ImageSparseSampleExplicitLod 3655 3656 Grad 3657 3658 + 3660: 7(f16vec4) CompositeExtract 3659 1 + Store 3512(texel) 3660 + 3661: 47(int) CompositeExtract 3659 0 + 3662: 299 Load 301(sCubeArray) + 3663: 7(f16vec4) Load 309(f16c4) + 3664:175(f16vec3) Load 1433(f16dPdxy3) + 3665:175(f16vec3) Load 1433(f16dPdxy3) + 3666:3146(ResType) ImageSparseSampleExplicitLod 3662 3663 Grad 3664 3665 + 3667: 7(f16vec4) CompositeExtract 3666 1 + Store 3512(texel) 3667 + 3668: 47(int) CompositeExtract 3666 0 + 3669: 7(f16vec4) Load 3512(texel) + ReturnValue 3669 FunctionEnd 79(testSparseTextureGradOffset(): 7(f16vec4) Function None 8 80: Label - 3628(texel): 64(ptr) Variable Function - Store 3628(texel) 121 - 3629: 143 Load 145(s2D) - 3630: 53(fvec2) Load 148(c2) - 3631: 53(fvec2) Load 1409(dPdxy2) - 3632: 53(fvec2) Load 1409(dPdxy2) - 3633:3102(ResType) ImageSparseSampleExplicitLod 3629 3630 Grad ConstOffset 3631 3632 722 - 3634: 7(f16vec4) CompositeExtract 3633 1 - Store 3628(texel) 3634 - 3635: 47(int) CompositeExtract 3633 0 - 3636: 143 Load 145(s2D) - 3637:154(f16vec2) Load 156(f16c2) - 3638:154(f16vec2) Load 1417(f16dPdxy2) - 3639:154(f16vec2) Load 1417(f16dPdxy2) - 3640:3102(ResType) ImageSparseSampleExplicitLod 3636 3637 Grad ConstOffset 3638 3639 722 - 3641: 7(f16vec4) CompositeExtract 3640 1 - Store 3628(texel) 3641 - 3642: 47(int) CompositeExtract 3640 0 - 3643: 163 Load 165(s3D) - 3644: 167(fvec3) Load 169(c3) - 3645: 167(fvec3) Load 1425(dPdxy3) - 3646: 167(fvec3) Load 1425(dPdxy3) - 3647:3102(ResType) ImageSparseSampleExplicitLod 3643 3644 Grad ConstOffset 3645 3646 735 - 3648: 7(f16vec4) CompositeExtract 3647 1 - Store 3628(texel) 3648 - 3649: 47(int) CompositeExtract 3647 0 - 3650: 163 Load 165(s3D) - 3651:175(f16vec3) Load 177(f16c3) - 3652:175(f16vec3) Load 1433(f16dPdxy3) - 3653:175(f16vec3) Load 1433(f16dPdxy3) - 3654:3102(ResType) ImageSparseSampleExplicitLod 3650 3651 Grad ConstOffset 3652 3653 735 - 3655: 7(f16vec4) CompositeExtract 3654 1 - Store 3628(texel) 3655 - 3656: 47(int) CompositeExtract 3654 0 - 3657: 357 Load 359(s2DRect) - 3658: 53(fvec2) Load 148(c2) - 3659: 53(fvec2) Load 1409(dPdxy2) - 3660: 53(fvec2) Load 1409(dPdxy2) - 3661:3102(ResType) ImageSparseSampleExplicitLod 3657 3658 Grad ConstOffset 3659 3660 722 - 3662: 7(f16vec4) CompositeExtract 3661 1 - Store 3628(texel) 3662 - 3663: 47(int) CompositeExtract 3661 0 - 3664: 357 Load 359(s2DRect) - 3665:154(f16vec2) Load 156(f16c2) - 3666:154(f16vec2) Load 1417(f16dPdxy2) - 3667:154(f16vec2) Load 1417(f16dPdxy2) - 3668:3102(ResType) ImageSparseSampleExplicitLod 3664 3665 Grad ConstOffset 3666 3667 722 - 3669: 7(f16vec4) CompositeExtract 3668 1 - Store 3628(texel) 3669 - 3670: 47(int) CompositeExtract 3668 0 - 3671: 371 Load 373(s2DRectShadow) - 3672: 167(fvec3) Load 169(c3) - 3673: 53(fvec2) Load 1409(dPdxy2) - 3674: 53(fvec2) Load 1409(dPdxy2) - 3675: 208(ptr) AccessChain 3628(texel) 207 - 3676: 52(float) CompositeExtract 3672 2 - 3677:3138(ResType) ImageSparseSampleDrefExplicitLod 3671 3672 3676 Grad ConstOffset 3673 3674 722 - 3678:6(float16_t) CompositeExtract 3677 1 - Store 3675 3678 + 3672(texel): 64(ptr) Variable Function + Store 3672(texel) 121 + 3673: 143 Load 145(s2D) + 3674: 53(fvec2) Load 148(c2) + 3675: 53(fvec2) Load 1409(dPdxy2) + 3676: 53(fvec2) Load 1409(dPdxy2) + 3677:3146(ResType) ImageSparseSampleExplicitLod 3673 3674 Grad ConstOffset 3675 3676 722 + 3678: 7(f16vec4) CompositeExtract 3677 1 + Store 3672(texel) 3678 3679: 47(int) CompositeExtract 3677 0 - 3680: 371 Load 373(s2DRectShadow) + 3680: 143 Load 145(s2D) 3681:154(f16vec2) Load 156(f16c2) - 3682: 52(float) Load 215(compare) + 3682:154(f16vec2) Load 1417(f16dPdxy2) 3683:154(f16vec2) Load 1417(f16dPdxy2) - 3684:154(f16vec2) Load 1417(f16dPdxy2) - 3685: 208(ptr) AccessChain 3628(texel) 207 - 3686:3138(ResType) ImageSparseSampleDrefExplicitLod 3680 3681 3682 Grad ConstOffset 3683 3684 722 - 3687:6(float16_t) CompositeExtract 3686 1 - Store 3685 3687 - 3688: 47(int) CompositeExtract 3686 0 - 3689: 224 Load 226(s2DShadow) - 3690: 167(fvec3) Load 169(c3) - 3691: 53(fvec2) Load 1409(dPdxy2) - 3692: 53(fvec2) Load 1409(dPdxy2) - 3693: 208(ptr) AccessChain 3628(texel) 207 - 3694: 52(float) CompositeExtract 3690 2 - 3695:3138(ResType) ImageSparseSampleDrefExplicitLod 3689 3690 3694 Grad ConstOffset 3691 3692 722 - 3696:6(float16_t) CompositeExtract 3695 1 - Store 3693 3696 - 3697: 47(int) CompositeExtract 3695 0 - 3698: 224 Load 226(s2DShadow) - 3699:154(f16vec2) Load 156(f16c2) - 3700: 52(float) Load 215(compare) - 3701:154(f16vec2) Load 1417(f16dPdxy2) - 3702:154(f16vec2) Load 1417(f16dPdxy2) - 3703: 208(ptr) AccessChain 3628(texel) 207 - 3704:3138(ResType) ImageSparseSampleDrefExplicitLod 3698 3699 3700 Grad ConstOffset 3701 3702 722 - 3705:6(float16_t) CompositeExtract 3704 1 - Store 3703 3705 - 3706: 47(int) CompositeExtract 3704 0 - 3707: 284 Load 286(s2DArray) - 3708: 167(fvec3) Load 169(c3) - 3709: 53(fvec2) Load 1409(dPdxy2) - 3710: 53(fvec2) Load 1409(dPdxy2) - 3711:3102(ResType) ImageSparseSampleExplicitLod 3707 3708 Grad ConstOffset 3709 3710 722 - 3712: 7(f16vec4) CompositeExtract 3711 1 - Store 3628(texel) 3712 - 3713: 47(int) CompositeExtract 3711 0 - 3714: 284 Load 286(s2DArray) - 3715:175(f16vec3) Load 177(f16c3) - 3716:154(f16vec2) Load 1417(f16dPdxy2) - 3717:154(f16vec2) Load 1417(f16dPdxy2) - 3718:3102(ResType) ImageSparseSampleExplicitLod 3714 3715 Grad ConstOffset 3716 3717 722 - 3719: 7(f16vec4) CompositeExtract 3718 1 - Store 3628(texel) 3719 - 3720: 47(int) CompositeExtract 3718 0 - 3721: 337 Load 339(s2DArrayShadow) - 3722: 249(fvec4) Load 251(c4) - 3723: 53(fvec2) Load 1409(dPdxy2) - 3724: 53(fvec2) Load 1409(dPdxy2) - 3725: 208(ptr) AccessChain 3628(texel) 207 - 3726: 52(float) CompositeExtract 3722 3 - 3727:3138(ResType) ImageSparseSampleDrefExplicitLod 3721 3722 3726 Grad ConstOffset 3723 3724 722 - 3728:6(float16_t) CompositeExtract 3727 1 - Store 3725 3728 - 3729: 47(int) CompositeExtract 3727 0 - 3730: 337 Load 339(s2DArrayShadow) - 3731:175(f16vec3) Load 177(f16c3) - 3732: 52(float) Load 215(compare) - 3733:154(f16vec2) Load 1417(f16dPdxy2) - 3734:154(f16vec2) Load 1417(f16dPdxy2) - 3735: 208(ptr) AccessChain 3628(texel) 207 - 3736:3138(ResType) ImageSparseSampleDrefExplicitLod 3730 3731 3732 Grad ConstOffset 3733 3734 722 - 3737:6(float16_t) CompositeExtract 3736 1 - Store 3735 3737 - 3738: 47(int) CompositeExtract 3736 0 - 3739: 7(f16vec4) Load 3628(texel) - ReturnValue 3739 + 3684:3146(ResType) ImageSparseSampleExplicitLod 3680 3681 Grad ConstOffset 3682 3683 722 + 3685: 7(f16vec4) CompositeExtract 3684 1 + Store 3672(texel) 3685 + 3686: 47(int) CompositeExtract 3684 0 + 3687: 163 Load 165(s3D) + 3688: 167(fvec3) Load 169(c3) + 3689: 167(fvec3) Load 1425(dPdxy3) + 3690: 167(fvec3) Load 1425(dPdxy3) + 3691:3146(ResType) ImageSparseSampleExplicitLod 3687 3688 Grad ConstOffset 3689 3690 735 + 3692: 7(f16vec4) CompositeExtract 3691 1 + Store 3672(texel) 3692 + 3693: 47(int) CompositeExtract 3691 0 + 3694: 163 Load 165(s3D) + 3695:175(f16vec3) Load 177(f16c3) + 3696:175(f16vec3) Load 1433(f16dPdxy3) + 3697:175(f16vec3) Load 1433(f16dPdxy3) + 3698:3146(ResType) ImageSparseSampleExplicitLod 3694 3695 Grad ConstOffset 3696 3697 735 + 3699: 7(f16vec4) CompositeExtract 3698 1 + Store 3672(texel) 3699 + 3700: 47(int) CompositeExtract 3698 0 + 3701: 357 Load 359(s2DRect) + 3702: 53(fvec2) Load 148(c2) + 3703: 53(fvec2) Load 1409(dPdxy2) + 3704: 53(fvec2) Load 1409(dPdxy2) + 3705:3146(ResType) ImageSparseSampleExplicitLod 3701 3702 Grad ConstOffset 3703 3704 722 + 3706: 7(f16vec4) CompositeExtract 3705 1 + Store 3672(texel) 3706 + 3707: 47(int) CompositeExtract 3705 0 + 3708: 357 Load 359(s2DRect) + 3709:154(f16vec2) Load 156(f16c2) + 3710:154(f16vec2) Load 1417(f16dPdxy2) + 3711:154(f16vec2) Load 1417(f16dPdxy2) + 3712:3146(ResType) ImageSparseSampleExplicitLod 3708 3709 Grad ConstOffset 3710 3711 722 + 3713: 7(f16vec4) CompositeExtract 3712 1 + Store 3672(texel) 3713 + 3714: 47(int) CompositeExtract 3712 0 + 3715: 371 Load 373(s2DRectShadow) + 3716: 167(fvec3) Load 169(c3) + 3717: 53(fvec2) Load 1409(dPdxy2) + 3718: 53(fvec2) Load 1409(dPdxy2) + 3719: 208(ptr) AccessChain 3672(texel) 207 + 3720: 52(float) CompositeExtract 3716 2 + 3721:3182(ResType) ImageSparseSampleDrefExplicitLod 3715 3716 3720 Grad ConstOffset 3717 3718 722 + 3722:6(float16_t) CompositeExtract 3721 1 + Store 3719 3722 + 3723: 47(int) CompositeExtract 3721 0 + 3724: 371 Load 373(s2DRectShadow) + 3725:154(f16vec2) Load 156(f16c2) + 3726: 52(float) Load 215(compare) + 3727:154(f16vec2) Load 1417(f16dPdxy2) + 3728:154(f16vec2) Load 1417(f16dPdxy2) + 3729: 208(ptr) AccessChain 3672(texel) 207 + 3730:3182(ResType) ImageSparseSampleDrefExplicitLod 3724 3725 3726 Grad ConstOffset 3727 3728 722 + 3731:6(float16_t) CompositeExtract 3730 1 + Store 3729 3731 + 3732: 47(int) CompositeExtract 3730 0 + 3733: 224 Load 226(s2DShadow) + 3734: 167(fvec3) Load 169(c3) + 3735: 53(fvec2) Load 1409(dPdxy2) + 3736: 53(fvec2) Load 1409(dPdxy2) + 3737: 208(ptr) AccessChain 3672(texel) 207 + 3738: 52(float) CompositeExtract 3734 2 + 3739:3182(ResType) ImageSparseSampleDrefExplicitLod 3733 3734 3738 Grad ConstOffset 3735 3736 722 + 3740:6(float16_t) CompositeExtract 3739 1 + Store 3737 3740 + 3741: 47(int) CompositeExtract 3739 0 + 3742: 224 Load 226(s2DShadow) + 3743:154(f16vec2) Load 156(f16c2) + 3744: 52(float) Load 215(compare) + 3745:154(f16vec2) Load 1417(f16dPdxy2) + 3746:154(f16vec2) Load 1417(f16dPdxy2) + 3747: 208(ptr) AccessChain 3672(texel) 207 + 3748:3182(ResType) ImageSparseSampleDrefExplicitLod 3742 3743 3744 Grad ConstOffset 3745 3746 722 + 3749:6(float16_t) CompositeExtract 3748 1 + Store 3747 3749 + 3750: 47(int) CompositeExtract 3748 0 + 3751: 284 Load 286(s2DArray) + 3752: 167(fvec3) Load 169(c3) + 3753: 53(fvec2) Load 1409(dPdxy2) + 3754: 53(fvec2) Load 1409(dPdxy2) + 3755:3146(ResType) ImageSparseSampleExplicitLod 3751 3752 Grad ConstOffset 3753 3754 722 + 3756: 7(f16vec4) CompositeExtract 3755 1 + Store 3672(texel) 3756 + 3757: 47(int) CompositeExtract 3755 0 + 3758: 284 Load 286(s2DArray) + 3759:175(f16vec3) Load 177(f16c3) + 3760:154(f16vec2) Load 1417(f16dPdxy2) + 3761:154(f16vec2) Load 1417(f16dPdxy2) + 3762:3146(ResType) ImageSparseSampleExplicitLod 3758 3759 Grad ConstOffset 3760 3761 722 + 3763: 7(f16vec4) CompositeExtract 3762 1 + Store 3672(texel) 3763 + 3764: 47(int) CompositeExtract 3762 0 + 3765: 337 Load 339(s2DArrayShadow) + 3766: 249(fvec4) Load 251(c4) + 3767: 53(fvec2) Load 1409(dPdxy2) + 3768: 53(fvec2) Load 1409(dPdxy2) + 3769: 208(ptr) AccessChain 3672(texel) 207 + 3770: 52(float) CompositeExtract 3766 3 + 3771:3182(ResType) ImageSparseSampleDrefExplicitLod 3765 3766 3770 Grad ConstOffset 3767 3768 722 + 3772:6(float16_t) CompositeExtract 3771 1 + Store 3769 3772 + 3773: 47(int) CompositeExtract 3771 0 + 3774: 337 Load 339(s2DArrayShadow) + 3775:175(f16vec3) Load 177(f16c3) + 3776: 52(float) Load 215(compare) + 3777:154(f16vec2) Load 1417(f16dPdxy2) + 3778:154(f16vec2) Load 1417(f16dPdxy2) + 3779: 208(ptr) AccessChain 3672(texel) 207 + 3780:3182(ResType) ImageSparseSampleDrefExplicitLod 3774 3775 3776 Grad ConstOffset 3777 3778 722 + 3781:6(float16_t) CompositeExtract 3780 1 + Store 3779 3781 + 3782: 47(int) CompositeExtract 3780 0 + 3783: 7(f16vec4) Load 3672(texel) + ReturnValue 3783 FunctionEnd 81(testSparseTexelFetch(): 7(f16vec4) Function None 8 82: Label - 3742(texel): 64(ptr) Variable Function - Store 3742(texel) 121 - 3743: 143 Load 145(s2D) - 3744: 53(fvec2) Load 148(c2) - 3745: 721(ivec2) ConvertFToS 3744 - 3746: 52(float) Load 565(lod) - 3747: 47(int) ConvertFToS 3746 - 3748: 142 Image 3743 - 3749:3102(ResType) ImageSparseFetch 3748 3745 Lod 3747 - 3750: 7(f16vec4) CompositeExtract 3749 1 - Store 3742(texel) 3750 - 3751: 47(int) CompositeExtract 3749 0 - 3752: 163 Load 165(s3D) - 3753: 167(fvec3) Load 169(c3) - 3754: 734(ivec3) ConvertFToS 3753 - 3755: 52(float) Load 565(lod) - 3756: 47(int) ConvertFToS 3755 - 3757: 162 Image 3752 - 3758:3102(ResType) ImageSparseFetch 3757 3754 Lod 3756 - 3759: 7(f16vec4) CompositeExtract 3758 1 - Store 3742(texel) 3759 - 3760: 47(int) CompositeExtract 3758 0 - 3761: 357 Load 359(s2DRect) - 3762: 53(fvec2) Load 148(c2) - 3763: 721(ivec2) ConvertFToS 3762 - 3764: 356 Image 3761 - 3765:3102(ResType) ImageSparseFetch 3764 3763 - 3766: 7(f16vec4) CompositeExtract 3765 1 - Store 3742(texel) 3766 - 3767: 47(int) CompositeExtract 3765 0 - 3768: 284 Load 286(s2DArray) - 3769: 167(fvec3) Load 169(c3) - 3770: 734(ivec3) ConvertFToS 3769 - 3771: 52(float) Load 565(lod) - 3772: 47(int) ConvertFToS 3771 - 3773: 283 Image 3768 - 3774:3102(ResType) ImageSparseFetch 3773 3770 Lod 3772 - 3775: 7(f16vec4) CompositeExtract 3774 1 - Store 3742(texel) 3775 - 3776: 47(int) CompositeExtract 3774 0 - 3777: 1309 Load 1311(s2DMS) - 3778: 53(fvec2) Load 148(c2) - 3779: 721(ivec2) ConvertFToS 3778 - 3780: 1308 Image 3777 - 3781:3102(ResType) ImageSparseFetch 3780 3779 Sample 709 - 3782: 7(f16vec4) CompositeExtract 3781 1 - Store 3742(texel) 3782 - 3783: 47(int) CompositeExtract 3781 0 - 3784: 1320 Load 1322(s2DMSArray) - 3785: 167(fvec3) Load 169(c3) - 3786: 734(ivec3) ConvertFToS 3785 - 3787: 1319 Image 3784 - 3788:3102(ResType) ImageSparseFetch 3787 3786 Sample 1326 - 3789: 7(f16vec4) CompositeExtract 3788 1 - Store 3742(texel) 3789 - 3790: 47(int) CompositeExtract 3788 0 - 3791: 7(f16vec4) Load 3742(texel) - ReturnValue 3791 + 3786(texel): 64(ptr) Variable Function + Store 3786(texel) 121 + 3787: 143 Load 145(s2D) + 3788: 53(fvec2) Load 148(c2) + 3789: 721(ivec2) ConvertFToS 3788 + 3790: 52(float) Load 565(lod) + 3791: 47(int) ConvertFToS 3790 + 3792: 142 Image 3787 + 3793:3146(ResType) ImageSparseFetch 3792 3789 Lod 3791 + 3794: 7(f16vec4) CompositeExtract 3793 1 + Store 3786(texel) 3794 + 3795: 47(int) CompositeExtract 3793 0 + 3796: 163 Load 165(s3D) + 3797: 167(fvec3) Load 169(c3) + 3798: 734(ivec3) ConvertFToS 3797 + 3799: 52(float) Load 565(lod) + 3800: 47(int) ConvertFToS 3799 + 3801: 162 Image 3796 + 3802:3146(ResType) ImageSparseFetch 3801 3798 Lod 3800 + 3803: 7(f16vec4) CompositeExtract 3802 1 + Store 3786(texel) 3803 + 3804: 47(int) CompositeExtract 3802 0 + 3805: 357 Load 359(s2DRect) + 3806: 53(fvec2) Load 148(c2) + 3807: 721(ivec2) ConvertFToS 3806 + 3808: 356 Image 3805 + 3809:3146(ResType) ImageSparseFetch 3808 3807 + 3810: 7(f16vec4) CompositeExtract 3809 1 + Store 3786(texel) 3810 + 3811: 47(int) CompositeExtract 3809 0 + 3812: 284 Load 286(s2DArray) + 3813: 167(fvec3) Load 169(c3) + 3814: 734(ivec3) ConvertFToS 3813 + 3815: 52(float) Load 565(lod) + 3816: 47(int) ConvertFToS 3815 + 3817: 283 Image 3812 + 3818:3146(ResType) ImageSparseFetch 3817 3814 Lod 3816 + 3819: 7(f16vec4) CompositeExtract 3818 1 + Store 3786(texel) 3819 + 3820: 47(int) CompositeExtract 3818 0 + 3821: 1309 Load 1311(s2DMS) + 3822: 53(fvec2) Load 148(c2) + 3823: 721(ivec2) ConvertFToS 3822 + 3824: 1308 Image 3821 + 3825:3146(ResType) ImageSparseFetch 3824 3823 Sample 709 + 3826: 7(f16vec4) CompositeExtract 3825 1 + Store 3786(texel) 3826 + 3827: 47(int) CompositeExtract 3825 0 + 3828: 1320 Load 1322(s2DMSArray) + 3829: 167(fvec3) Load 169(c3) + 3830: 734(ivec3) ConvertFToS 3829 + 3831: 1319 Image 3828 + 3832:3146(ResType) ImageSparseFetch 3831 3830 Sample 1326 + 3833: 7(f16vec4) CompositeExtract 3832 1 + Store 3786(texel) 3833 + 3834: 47(int) CompositeExtract 3832 0 + 3835: 7(f16vec4) Load 3786(texel) + ReturnValue 3835 FunctionEnd 83(testSparseTexelFetchOffset(): 7(f16vec4) Function None 8 84: Label - 3794(texel): 64(ptr) Variable Function - Store 3794(texel) 121 - 3795: 143 Load 145(s2D) - 3796: 53(fvec2) Load 148(c2) - 3797: 721(ivec2) ConvertFToS 3796 - 3798: 52(float) Load 565(lod) - 3799: 47(int) ConvertFToS 3798 - 3800: 142 Image 3795 - 3801:3102(ResType) ImageSparseFetch 3800 3797 Lod ConstOffset 3799 722 - 3802: 7(f16vec4) CompositeExtract 3801 1 - Store 3794(texel) 3802 - 3803: 47(int) CompositeExtract 3801 0 - 3804: 163 Load 165(s3D) - 3805: 167(fvec3) Load 169(c3) - 3806: 734(ivec3) ConvertFToS 3805 - 3807: 52(float) Load 565(lod) - 3808: 47(int) ConvertFToS 3807 - 3809: 162 Image 3804 - 3810:3102(ResType) ImageSparseFetch 3809 3806 Lod ConstOffset 3808 735 - 3811: 7(f16vec4) CompositeExtract 3810 1 - Store 3794(texel) 3811 - 3812: 47(int) CompositeExtract 3810 0 - 3813: 357 Load 359(s2DRect) - 3814: 53(fvec2) Load 148(c2) - 3815: 721(ivec2) ConvertFToS 3814 - 3816: 356 Image 3813 - 3817:3102(ResType) ImageSparseFetch 3816 3815 ConstOffset 722 - 3818: 7(f16vec4) CompositeExtract 3817 1 - Store 3794(texel) 3818 - 3819: 47(int) CompositeExtract 3817 0 - 3820: 284 Load 286(s2DArray) - 3821: 167(fvec3) Load 169(c3) - 3822: 734(ivec3) ConvertFToS 3821 - 3823: 52(float) Load 565(lod) - 3824: 47(int) ConvertFToS 3823 - 3825: 283 Image 3820 - 3826:3102(ResType) ImageSparseFetch 3825 3822 Lod ConstOffset 3824 722 - 3827: 7(f16vec4) CompositeExtract 3826 1 - Store 3794(texel) 3827 - 3828: 47(int) CompositeExtract 3826 0 - 3829: 7(f16vec4) Load 3794(texel) - ReturnValue 3829 + 3838(texel): 64(ptr) Variable Function + Store 3838(texel) 121 + 3839: 143 Load 145(s2D) + 3840: 53(fvec2) Load 148(c2) + 3841: 721(ivec2) ConvertFToS 3840 + 3842: 52(float) Load 565(lod) + 3843: 47(int) ConvertFToS 3842 + 3844: 142 Image 3839 + 3845:3146(ResType) ImageSparseFetch 3844 3841 Lod ConstOffset 3843 722 + 3846: 7(f16vec4) CompositeExtract 3845 1 + Store 3838(texel) 3846 + 3847: 47(int) CompositeExtract 3845 0 + 3848: 163 Load 165(s3D) + 3849: 167(fvec3) Load 169(c3) + 3850: 734(ivec3) ConvertFToS 3849 + 3851: 52(float) Load 565(lod) + 3852: 47(int) ConvertFToS 3851 + 3853: 162 Image 3848 + 3854:3146(ResType) ImageSparseFetch 3853 3850 Lod ConstOffset 3852 735 + 3855: 7(f16vec4) CompositeExtract 3854 1 + Store 3838(texel) 3855 + 3856: 47(int) CompositeExtract 3854 0 + 3857: 357 Load 359(s2DRect) + 3858: 53(fvec2) Load 148(c2) + 3859: 721(ivec2) ConvertFToS 3858 + 3860: 356 Image 3857 + 3861:3146(ResType) ImageSparseFetch 3860 3859 ConstOffset 722 + 3862: 7(f16vec4) CompositeExtract 3861 1 + Store 3838(texel) 3862 + 3863: 47(int) CompositeExtract 3861 0 + 3864: 284 Load 286(s2DArray) + 3865: 167(fvec3) Load 169(c3) + 3866: 734(ivec3) ConvertFToS 3865 + 3867: 52(float) Load 565(lod) + 3868: 47(int) ConvertFToS 3867 + 3869: 283 Image 3864 + 3870:3146(ResType) ImageSparseFetch 3869 3866 Lod ConstOffset 3868 722 + 3871: 7(f16vec4) CompositeExtract 3870 1 + Store 3838(texel) 3871 + 3872: 47(int) CompositeExtract 3870 0 + 3873: 7(f16vec4) Load 3838(texel) + ReturnValue 3873 FunctionEnd 85(testSparseTextureGather(): 7(f16vec4) Function None 8 86: Label - 3832(texel): 64(ptr) Variable Function - Store 3832(texel) 121 - 3833: 143 Load 145(s2D) - 3834: 53(fvec2) Load 148(c2) - 3835:3102(ResType) ImageSparseGather 3833 3834 2187 - 3836: 7(f16vec4) CompositeExtract 3835 1 - Store 3832(texel) 3836 - 3837: 47(int) CompositeExtract 3835 0 - 3838: 143 Load 145(s2D) - 3839:154(f16vec2) Load 156(f16c2) - 3840:6(float16_t) Load 137(f16bias) - 3841:3102(ResType) ImageSparseGather 3838 3839 2187 Bias 3840 - 3842: 7(f16vec4) CompositeExtract 3841 1 - Store 3832(texel) 3842 - 3843: 47(int) CompositeExtract 3841 0 - 3844: 284 Load 286(s2DArray) - 3845: 167(fvec3) Load 169(c3) - 3846:3102(ResType) ImageSparseGather 3844 3845 2187 - 3847: 7(f16vec4) CompositeExtract 3846 1 - Store 3832(texel) 3847 - 3848: 47(int) CompositeExtract 3846 0 - 3849: 284 Load 286(s2DArray) - 3850:175(f16vec3) Load 177(f16c3) - 3851:6(float16_t) Load 137(f16bias) - 3852:3102(ResType) ImageSparseGather 3849 3850 2187 Bias 3851 - 3853: 7(f16vec4) CompositeExtract 3852 1 - Store 3832(texel) 3853 - 3854: 47(int) CompositeExtract 3852 0 - 3855: 184 Load 186(sCube) - 3856: 167(fvec3) Load 169(c3) - 3857:3102(ResType) ImageSparseGather 3855 3856 2187 - 3858: 7(f16vec4) CompositeExtract 3857 1 - Store 3832(texel) 3858 - 3859: 47(int) CompositeExtract 3857 0 - 3860: 184 Load 186(sCube) - 3861:175(f16vec3) Load 177(f16c3) - 3862:6(float16_t) Load 137(f16bias) - 3863:3102(ResType) ImageSparseGather 3860 3861 2187 Bias 3862 - 3864: 7(f16vec4) CompositeExtract 3863 1 - Store 3832(texel) 3864 - 3865: 47(int) CompositeExtract 3863 0 - 3866: 299 Load 301(sCubeArray) - 3867: 249(fvec4) Load 251(c4) - 3868:3102(ResType) ImageSparseGather 3866 3867 2187 - 3869: 7(f16vec4) CompositeExtract 3868 1 - Store 3832(texel) 3869 - 3870: 47(int) CompositeExtract 3868 0 - 3871: 299 Load 301(sCubeArray) - 3872: 7(f16vec4) Load 309(f16c4) - 3873:6(float16_t) Load 137(f16bias) - 3874:3102(ResType) ImageSparseGather 3871 3872 2187 Bias 3873 - 3875: 7(f16vec4) CompositeExtract 3874 1 - Store 3832(texel) 3875 - 3876: 47(int) CompositeExtract 3874 0 - 3877: 357 Load 359(s2DRect) + 3876(texel): 64(ptr) Variable Function + Store 3876(texel) 121 + 3877: 143 Load 145(s2D) 3878: 53(fvec2) Load 148(c2) - 3879:3102(ResType) ImageSparseGather 3877 3878 2187 + 3879:3146(ResType) ImageSparseGather 3877 3878 2187 3880: 7(f16vec4) CompositeExtract 3879 1 - Store 3832(texel) 3880 + Store 3876(texel) 3880 3881: 47(int) CompositeExtract 3879 0 - 3882: 357 Load 359(s2DRect) + 3882: 143 Load 145(s2D) 3883:154(f16vec2) Load 156(f16c2) - 3884:3102(ResType) ImageSparseGather 3882 3883 2187 - 3885: 7(f16vec4) CompositeExtract 3884 1 - Store 3832(texel) 3885 - 3886: 47(int) CompositeExtract 3884 0 - 3887: 224 Load 226(s2DShadow) - 3888: 53(fvec2) Load 148(c2) - 3889: 52(float) Load 215(compare) - 3890:3102(ResType) ImageSparseDrefGather 3887 3888 3889 + 3884:6(float16_t) Load 137(f16bias) + 3885:3146(ResType) ImageSparseGather 3882 3883 2187 Bias 3884 + 3886: 7(f16vec4) CompositeExtract 3885 1 + Store 3876(texel) 3886 + 3887: 47(int) CompositeExtract 3885 0 + 3888: 284 Load 286(s2DArray) + 3889: 167(fvec3) Load 169(c3) + 3890:3146(ResType) ImageSparseGather 3888 3889 2187 3891: 7(f16vec4) CompositeExtract 3890 1 - Store 3832(texel) 3891 + Store 3876(texel) 3891 3892: 47(int) CompositeExtract 3890 0 - 3893: 224 Load 226(s2DShadow) - 3894:154(f16vec2) Load 156(f16c2) - 3895: 52(float) Load 215(compare) - 3896:3102(ResType) ImageSparseDrefGather 3893 3894 3895 + 3893: 284 Load 286(s2DArray) + 3894:175(f16vec3) Load 177(f16c3) + 3895:6(float16_t) Load 137(f16bias) + 3896:3146(ResType) ImageSparseGather 3893 3894 2187 Bias 3895 3897: 7(f16vec4) CompositeExtract 3896 1 - Store 3832(texel) 3897 + Store 3876(texel) 3897 3898: 47(int) CompositeExtract 3896 0 - 3899: 337 Load 339(s2DArrayShadow) + 3899: 184 Load 186(sCube) 3900: 167(fvec3) Load 169(c3) - 3901: 52(float) Load 215(compare) - 3902:3102(ResType) ImageSparseDrefGather 3899 3900 3901 - 3903: 7(f16vec4) CompositeExtract 3902 1 - Store 3832(texel) 3903 - 3904: 47(int) CompositeExtract 3902 0 - 3905: 337 Load 339(s2DArrayShadow) - 3906:175(f16vec3) Load 177(f16c3) - 3907: 52(float) Load 215(compare) - 3908:3102(ResType) ImageSparseDrefGather 3905 3906 3907 - 3909: 7(f16vec4) CompositeExtract 3908 1 - Store 3832(texel) 3909 - 3910: 47(int) CompositeExtract 3908 0 - 3911: 245 Load 247(sCubeShadow) - 3912: 167(fvec3) Load 169(c3) - 3913: 52(float) Load 215(compare) - 3914:3102(ResType) ImageSparseDrefGather 3911 3912 3913 - 3915: 7(f16vec4) CompositeExtract 3914 1 - Store 3832(texel) 3915 - 3916: 47(int) CompositeExtract 3914 0 - 3917: 245 Load 247(sCubeShadow) - 3918:175(f16vec3) Load 177(f16c3) - 3919: 52(float) Load 215(compare) - 3920:3102(ResType) ImageSparseDrefGather 3917 3918 3919 - 3921: 7(f16vec4) CompositeExtract 3920 1 - Store 3832(texel) 3921 - 3922: 47(int) CompositeExtract 3920 0 - 3923: 391 Load 393(sCubeArrayShadow) - 3924: 249(fvec4) Load 251(c4) - 3925: 52(float) Load 215(compare) - 3926:3102(ResType) ImageSparseDrefGather 3923 3924 3925 - 3927: 7(f16vec4) CompositeExtract 3926 1 - Store 3832(texel) 3927 - 3928: 47(int) CompositeExtract 3926 0 - 3929: 391 Load 393(sCubeArrayShadow) - 3930: 7(f16vec4) Load 309(f16c4) - 3931: 52(float) Load 215(compare) - 3932:3102(ResType) ImageSparseDrefGather 3929 3930 3931 - 3933: 7(f16vec4) CompositeExtract 3932 1 - Store 3832(texel) 3933 - 3934: 47(int) CompositeExtract 3932 0 - 3935: 371 Load 373(s2DRectShadow) - 3936: 53(fvec2) Load 148(c2) - 3937: 52(float) Load 215(compare) - 3938:3102(ResType) ImageSparseDrefGather 3935 3936 3937 - 3939: 7(f16vec4) CompositeExtract 3938 1 - Store 3832(texel) 3939 - 3940: 47(int) CompositeExtract 3938 0 - 3941: 371 Load 373(s2DRectShadow) - 3942:154(f16vec2) Load 156(f16c2) - 3943: 52(float) Load 215(compare) - 3944:3102(ResType) ImageSparseDrefGather 3941 3942 3943 - 3945: 7(f16vec4) CompositeExtract 3944 1 - Store 3832(texel) 3945 - 3946: 47(int) CompositeExtract 3944 0 - 3947: 7(f16vec4) Load 3832(texel) - ReturnValue 3947 - FunctionEnd -87(testSparseTextureGatherOffset(): 7(f16vec4) Function None 8 - 88: Label - 3950(texel): 64(ptr) Variable Function - Store 3950(texel) 121 - 3951: 143 Load 145(s2D) - 3952: 53(fvec2) Load 148(c2) - 3953:3102(ResType) ImageSparseGather 3951 3952 2187 ConstOffset 722 - 3954: 7(f16vec4) CompositeExtract 3953 1 - Store 3950(texel) 3954 - 3955: 47(int) CompositeExtract 3953 0 - 3956: 143 Load 145(s2D) - 3957:154(f16vec2) Load 156(f16c2) - 3958:6(float16_t) Load 137(f16bias) - 3959:3102(ResType) ImageSparseGather 3956 3957 2187 Bias ConstOffset 3958 722 - 3960: 7(f16vec4) CompositeExtract 3959 1 - Store 3950(texel) 3960 - 3961: 47(int) CompositeExtract 3959 0 - 3962: 284 Load 286(s2DArray) - 3963: 167(fvec3) Load 169(c3) - 3964:3102(ResType) ImageSparseGather 3962 3963 2187 ConstOffset 722 + 3901:3146(ResType) ImageSparseGather 3899 3900 2187 + 3902: 7(f16vec4) CompositeExtract 3901 1 + Store 3876(texel) 3902 + 3903: 47(int) CompositeExtract 3901 0 + 3904: 184 Load 186(sCube) + 3905:175(f16vec3) Load 177(f16c3) + 3906:6(float16_t) Load 137(f16bias) + 3907:3146(ResType) ImageSparseGather 3904 3905 2187 Bias 3906 + 3908: 7(f16vec4) CompositeExtract 3907 1 + Store 3876(texel) 3908 + 3909: 47(int) CompositeExtract 3907 0 + 3910: 299 Load 301(sCubeArray) + 3911: 249(fvec4) Load 251(c4) + 3912:3146(ResType) ImageSparseGather 3910 3911 2187 + 3913: 7(f16vec4) CompositeExtract 3912 1 + Store 3876(texel) 3913 + 3914: 47(int) CompositeExtract 3912 0 + 3915: 299 Load 301(sCubeArray) + 3916: 7(f16vec4) Load 309(f16c4) + 3917:6(float16_t) Load 137(f16bias) + 3918:3146(ResType) ImageSparseGather 3915 3916 2187 Bias 3917 + 3919: 7(f16vec4) CompositeExtract 3918 1 + Store 3876(texel) 3919 + 3920: 47(int) CompositeExtract 3918 0 + 3921: 357 Load 359(s2DRect) + 3922: 53(fvec2) Load 148(c2) + 3923:3146(ResType) ImageSparseGather 3921 3922 2187 + 3924: 7(f16vec4) CompositeExtract 3923 1 + Store 3876(texel) 3924 + 3925: 47(int) CompositeExtract 3923 0 + 3926: 357 Load 359(s2DRect) + 3927:154(f16vec2) Load 156(f16c2) + 3928:3146(ResType) ImageSparseGather 3926 3927 2187 + 3929: 7(f16vec4) CompositeExtract 3928 1 + Store 3876(texel) 3929 + 3930: 47(int) CompositeExtract 3928 0 + 3931: 224 Load 226(s2DShadow) + 3932: 53(fvec2) Load 148(c2) + 3933: 52(float) Load 215(compare) + 3934:3146(ResType) ImageSparseDrefGather 3931 3932 3933 + 3935: 7(f16vec4) CompositeExtract 3934 1 + Store 3876(texel) 3935 + 3936: 47(int) CompositeExtract 3934 0 + 3937: 224 Load 226(s2DShadow) + 3938:154(f16vec2) Load 156(f16c2) + 3939: 52(float) Load 215(compare) + 3940:3146(ResType) ImageSparseDrefGather 3937 3938 3939 + 3941: 7(f16vec4) CompositeExtract 3940 1 + Store 3876(texel) 3941 + 3942: 47(int) CompositeExtract 3940 0 + 3943: 337 Load 339(s2DArrayShadow) + 3944: 167(fvec3) Load 169(c3) + 3945: 52(float) Load 215(compare) + 3946:3146(ResType) ImageSparseDrefGather 3943 3944 3945 + 3947: 7(f16vec4) CompositeExtract 3946 1 + Store 3876(texel) 3947 + 3948: 47(int) CompositeExtract 3946 0 + 3949: 337 Load 339(s2DArrayShadow) + 3950:175(f16vec3) Load 177(f16c3) + 3951: 52(float) Load 215(compare) + 3952:3146(ResType) ImageSparseDrefGather 3949 3950 3951 + 3953: 7(f16vec4) CompositeExtract 3952 1 + Store 3876(texel) 3953 + 3954: 47(int) CompositeExtract 3952 0 + 3955: 245 Load 247(sCubeShadow) + 3956: 167(fvec3) Load 169(c3) + 3957: 52(float) Load 215(compare) + 3958:3146(ResType) ImageSparseDrefGather 3955 3956 3957 + 3959: 7(f16vec4) CompositeExtract 3958 1 + Store 3876(texel) 3959 + 3960: 47(int) CompositeExtract 3958 0 + 3961: 245 Load 247(sCubeShadow) + 3962:175(f16vec3) Load 177(f16c3) + 3963: 52(float) Load 215(compare) + 3964:3146(ResType) ImageSparseDrefGather 3961 3962 3963 3965: 7(f16vec4) CompositeExtract 3964 1 - Store 3950(texel) 3965 + Store 3876(texel) 3965 3966: 47(int) CompositeExtract 3964 0 - 3967: 284 Load 286(s2DArray) - 3968:175(f16vec3) Load 177(f16c3) - 3969:6(float16_t) Load 137(f16bias) - 3970:3102(ResType) ImageSparseGather 3967 3968 2187 Bias ConstOffset 3969 722 + 3967: 391 Load 393(sCubeArrayShadow) + 3968: 249(fvec4) Load 251(c4) + 3969: 52(float) Load 215(compare) + 3970:3146(ResType) ImageSparseDrefGather 3967 3968 3969 3971: 7(f16vec4) CompositeExtract 3970 1 - Store 3950(texel) 3971 + Store 3876(texel) 3971 3972: 47(int) CompositeExtract 3970 0 - 3973: 357 Load 359(s2DRect) - 3974: 53(fvec2) Load 148(c2) - 3975:3102(ResType) ImageSparseGather 3973 3974 2187 ConstOffset 722 - 3976: 7(f16vec4) CompositeExtract 3975 1 - Store 3950(texel) 3976 - 3977: 47(int) CompositeExtract 3975 0 - 3978: 357 Load 359(s2DRect) - 3979:154(f16vec2) Load 156(f16c2) - 3980:3102(ResType) ImageSparseGather 3978 3979 2187 ConstOffset 722 - 3981: 7(f16vec4) CompositeExtract 3980 1 - Store 3950(texel) 3981 - 3982: 47(int) CompositeExtract 3980 0 - 3983: 224 Load 226(s2DShadow) - 3984: 53(fvec2) Load 148(c2) - 3985: 52(float) Load 215(compare) - 3986:3102(ResType) ImageSparseDrefGather 3983 3984 3985 ConstOffset 722 - 3987: 7(f16vec4) CompositeExtract 3986 1 - Store 3950(texel) 3987 - 3988: 47(int) CompositeExtract 3986 0 - 3989: 224 Load 226(s2DShadow) - 3990:154(f16vec2) Load 156(f16c2) - 3991: 52(float) Load 215(compare) - 3992:3102(ResType) ImageSparseDrefGather 3989 3990 3991 ConstOffset 722 - 3993: 7(f16vec4) CompositeExtract 3992 1 - Store 3950(texel) 3993 - 3994: 47(int) CompositeExtract 3992 0 - 3995: 337 Load 339(s2DArrayShadow) - 3996: 167(fvec3) Load 169(c3) - 3997: 52(float) Load 215(compare) - 3998:3102(ResType) ImageSparseDrefGather 3995 3996 3997 ConstOffset 722 - 3999: 7(f16vec4) CompositeExtract 3998 1 - Store 3950(texel) 3999 - 4000: 47(int) CompositeExtract 3998 0 - 4001: 337 Load 339(s2DArrayShadow) - 4002:175(f16vec3) Load 177(f16c3) - 4003: 52(float) Load 215(compare) - 4004:3102(ResType) ImageSparseDrefGather 4001 4002 4003 ConstOffset 722 - 4005: 7(f16vec4) CompositeExtract 4004 1 - Store 3950(texel) 4005 - 4006: 47(int) CompositeExtract 4004 0 - 4007: 371 Load 373(s2DRectShadow) - 4008: 53(fvec2) Load 148(c2) - 4009: 52(float) Load 215(compare) - 4010:3102(ResType) ImageSparseDrefGather 4007 4008 4009 ConstOffset 722 - 4011: 7(f16vec4) CompositeExtract 4010 1 - Store 3950(texel) 4011 - 4012: 47(int) CompositeExtract 4010 0 - 4013: 371 Load 373(s2DRectShadow) - 4014:154(f16vec2) Load 156(f16c2) - 4015: 52(float) Load 215(compare) - 4016:3102(ResType) ImageSparseDrefGather 4013 4014 4015 ConstOffset 722 - 4017: 7(f16vec4) CompositeExtract 4016 1 - Store 3950(texel) 4017 - 4018: 47(int) CompositeExtract 4016 0 - 4019: 7(f16vec4) Load 3950(texel) - ReturnValue 4019 + 3973: 391 Load 393(sCubeArrayShadow) + 3974: 7(f16vec4) Load 309(f16c4) + 3975: 52(float) Load 215(compare) + 3976:3146(ResType) ImageSparseDrefGather 3973 3974 3975 + 3977: 7(f16vec4) CompositeExtract 3976 1 + Store 3876(texel) 3977 + 3978: 47(int) CompositeExtract 3976 0 + 3979: 371 Load 373(s2DRectShadow) + 3980: 53(fvec2) Load 148(c2) + 3981: 52(float) Load 215(compare) + 3982:3146(ResType) ImageSparseDrefGather 3979 3980 3981 + 3983: 7(f16vec4) CompositeExtract 3982 1 + Store 3876(texel) 3983 + 3984: 47(int) CompositeExtract 3982 0 + 3985: 371 Load 373(s2DRectShadow) + 3986:154(f16vec2) Load 156(f16c2) + 3987: 52(float) Load 215(compare) + 3988:3146(ResType) ImageSparseDrefGather 3985 3986 3987 + 3989: 7(f16vec4) CompositeExtract 3988 1 + Store 3876(texel) 3989 + 3990: 47(int) CompositeExtract 3988 0 + 3991: 7(f16vec4) Load 3876(texel) + ReturnValue 3991 + FunctionEnd +87(testSparseTextureGatherOffset(): 7(f16vec4) Function None 8 + 88: Label + 3994(texel): 64(ptr) Variable Function + Store 3994(texel) 121 + 3995: 143 Load 145(s2D) + 3996: 53(fvec2) Load 148(c2) + 3997:3146(ResType) ImageSparseGather 3995 3996 2187 ConstOffset 722 + 3998: 7(f16vec4) CompositeExtract 3997 1 + Store 3994(texel) 3998 + 3999: 47(int) CompositeExtract 3997 0 + 4000: 143 Load 145(s2D) + 4001:154(f16vec2) Load 156(f16c2) + 4002:6(float16_t) Load 137(f16bias) + 4003:3146(ResType) ImageSparseGather 4000 4001 2187 Bias ConstOffset 4002 722 + 4004: 7(f16vec4) CompositeExtract 4003 1 + Store 3994(texel) 4004 + 4005: 47(int) CompositeExtract 4003 0 + 4006: 284 Load 286(s2DArray) + 4007: 167(fvec3) Load 169(c3) + 4008:3146(ResType) ImageSparseGather 4006 4007 2187 ConstOffset 722 + 4009: 7(f16vec4) CompositeExtract 4008 1 + Store 3994(texel) 4009 + 4010: 47(int) CompositeExtract 4008 0 + 4011: 284 Load 286(s2DArray) + 4012:175(f16vec3) Load 177(f16c3) + 4013:6(float16_t) Load 137(f16bias) + 4014:3146(ResType) ImageSparseGather 4011 4012 2187 Bias ConstOffset 4013 722 + 4015: 7(f16vec4) CompositeExtract 4014 1 + Store 3994(texel) 4015 + 4016: 47(int) CompositeExtract 4014 0 + 4017: 357 Load 359(s2DRect) + 4018: 53(fvec2) Load 148(c2) + 4019:3146(ResType) ImageSparseGather 4017 4018 2187 ConstOffset 722 + 4020: 7(f16vec4) CompositeExtract 4019 1 + Store 3994(texel) 4020 + 4021: 47(int) CompositeExtract 4019 0 + 4022: 357 Load 359(s2DRect) + 4023:154(f16vec2) Load 156(f16c2) + 4024:3146(ResType) ImageSparseGather 4022 4023 2187 ConstOffset 722 + 4025: 7(f16vec4) CompositeExtract 4024 1 + Store 3994(texel) 4025 + 4026: 47(int) CompositeExtract 4024 0 + 4027: 224 Load 226(s2DShadow) + 4028: 53(fvec2) Load 148(c2) + 4029: 52(float) Load 215(compare) + 4030:3146(ResType) ImageSparseDrefGather 4027 4028 4029 ConstOffset 722 + 4031: 7(f16vec4) CompositeExtract 4030 1 + Store 3994(texel) 4031 + 4032: 47(int) CompositeExtract 4030 0 + 4033: 224 Load 226(s2DShadow) + 4034:154(f16vec2) Load 156(f16c2) + 4035: 52(float) Load 215(compare) + 4036:3146(ResType) ImageSparseDrefGather 4033 4034 4035 ConstOffset 722 + 4037: 7(f16vec4) CompositeExtract 4036 1 + Store 3994(texel) 4037 + 4038: 47(int) CompositeExtract 4036 0 + 4039: 337 Load 339(s2DArrayShadow) + 4040: 167(fvec3) Load 169(c3) + 4041: 52(float) Load 215(compare) + 4042:3146(ResType) ImageSparseDrefGather 4039 4040 4041 ConstOffset 722 + 4043: 7(f16vec4) CompositeExtract 4042 1 + Store 3994(texel) 4043 + 4044: 47(int) CompositeExtract 4042 0 + 4045: 337 Load 339(s2DArrayShadow) + 4046:175(f16vec3) Load 177(f16c3) + 4047: 52(float) Load 215(compare) + 4048:3146(ResType) ImageSparseDrefGather 4045 4046 4047 ConstOffset 722 + 4049: 7(f16vec4) CompositeExtract 4048 1 + Store 3994(texel) 4049 + 4050: 47(int) CompositeExtract 4048 0 + 4051: 371 Load 373(s2DRectShadow) + 4052: 53(fvec2) Load 148(c2) + 4053: 52(float) Load 215(compare) + 4054:3146(ResType) ImageSparseDrefGather 4051 4052 4053 ConstOffset 722 + 4055: 7(f16vec4) CompositeExtract 4054 1 + Store 3994(texel) 4055 + 4056: 47(int) CompositeExtract 4054 0 + 4057: 371 Load 373(s2DRectShadow) + 4058:154(f16vec2) Load 156(f16c2) + 4059: 52(float) Load 215(compare) + 4060:3146(ResType) ImageSparseDrefGather 4057 4058 4059 ConstOffset 722 + 4061: 7(f16vec4) CompositeExtract 4060 1 + Store 3994(texel) 4061 + 4062: 47(int) CompositeExtract 4060 0 + 4063: 7(f16vec4) Load 3994(texel) + ReturnValue 4063 FunctionEnd 89(testSparseTextureGatherOffsets(): 7(f16vec4) Function None 8 90: Label - 4022(texel): 64(ptr) Variable Function - Store 4022(texel) 121 - 4023: 143 Load 145(s2D) - 4024: 53(fvec2) Load 148(c2) - 4035:3102(ResType) ImageSparseGather 4023 4024 2187 ConstOffsets 4034 - 4036: 7(f16vec4) CompositeExtract 4035 1 - Store 4022(texel) 4036 - 4037: 47(int) CompositeExtract 4035 0 - 4038: 143 Load 145(s2D) - 4039:154(f16vec2) Load 156(f16c2) - 4040:6(float16_t) Load 137(f16bias) - 4041:3102(ResType) ImageSparseGather 4038 4039 2187 Bias ConstOffsets 4040 4034 - 4042: 7(f16vec4) CompositeExtract 4041 1 - Store 4022(texel) 4042 - 4043: 47(int) CompositeExtract 4041 0 - 4044: 284 Load 286(s2DArray) - 4045: 167(fvec3) Load 169(c3) - 4046:3102(ResType) ImageSparseGather 4044 4045 2187 ConstOffsets 4034 - 4047: 7(f16vec4) CompositeExtract 4046 1 - Store 4022(texel) 4047 - 4048: 47(int) CompositeExtract 4046 0 - 4049: 284 Load 286(s2DArray) - 4050:175(f16vec3) Load 177(f16c3) - 4051:6(float16_t) Load 137(f16bias) - 4052:3102(ResType) ImageSparseGather 4049 4050 2187 Bias ConstOffsets 4051 4034 - 4053: 7(f16vec4) CompositeExtract 4052 1 - Store 4022(texel) 4053 - 4054: 47(int) CompositeExtract 4052 0 - 4055: 357 Load 359(s2DRect) - 4056: 53(fvec2) Load 148(c2) - 4057:3102(ResType) ImageSparseGather 4055 4056 2187 ConstOffsets 4034 - 4058: 7(f16vec4) CompositeExtract 4057 1 - Store 4022(texel) 4058 - 4059: 47(int) CompositeExtract 4057 0 - 4060: 357 Load 359(s2DRect) - 4061:154(f16vec2) Load 156(f16c2) - 4062:3102(ResType) ImageSparseGather 4060 4061 2187 ConstOffsets 4034 - 4063: 7(f16vec4) CompositeExtract 4062 1 - Store 4022(texel) 4063 - 4064: 47(int) CompositeExtract 4062 0 - 4065: 224 Load 226(s2DShadow) - 4066: 53(fvec2) Load 148(c2) - 4067: 52(float) Load 215(compare) - 4068:3102(ResType) ImageSparseDrefGather 4065 4066 4067 ConstOffsets 4034 - 4069: 7(f16vec4) CompositeExtract 4068 1 - Store 4022(texel) 4069 - 4070: 47(int) CompositeExtract 4068 0 - 4071: 224 Load 226(s2DShadow) - 4072:154(f16vec2) Load 156(f16c2) - 4073: 52(float) Load 215(compare) - 4074:3102(ResType) ImageSparseDrefGather 4071 4072 4073 ConstOffsets 4034 - 4075: 7(f16vec4) CompositeExtract 4074 1 - Store 4022(texel) 4075 - 4076: 47(int) CompositeExtract 4074 0 - 4077: 337 Load 339(s2DArrayShadow) - 4078: 167(fvec3) Load 169(c3) - 4079: 52(float) Load 215(compare) - 4080:3102(ResType) ImageSparseDrefGather 4077 4078 4079 ConstOffsets 4034 - 4081: 7(f16vec4) CompositeExtract 4080 1 - Store 4022(texel) 4081 - 4082: 47(int) CompositeExtract 4080 0 - 4083: 337 Load 339(s2DArrayShadow) - 4084:175(f16vec3) Load 177(f16c3) - 4085: 52(float) Load 215(compare) - 4086:3102(ResType) ImageSparseDrefGather 4083 4084 4085 ConstOffsets 4034 - 4087: 7(f16vec4) CompositeExtract 4086 1 - Store 4022(texel) 4087 - 4088: 47(int) CompositeExtract 4086 0 - 4089: 371 Load 373(s2DRectShadow) - 4090: 53(fvec2) Load 148(c2) - 4091: 52(float) Load 215(compare) - 4092:3102(ResType) ImageSparseDrefGather 4089 4090 4091 ConstOffsets 4034 - 4093: 7(f16vec4) CompositeExtract 4092 1 - Store 4022(texel) 4093 - 4094: 47(int) CompositeExtract 4092 0 - 4095: 371 Load 373(s2DRectShadow) - 4096:154(f16vec2) Load 156(f16c2) - 4097: 52(float) Load 215(compare) - 4098:3102(ResType) ImageSparseDrefGather 4095 4096 4097 ConstOffsets 4034 - 4099: 7(f16vec4) CompositeExtract 4098 1 - Store 4022(texel) 4099 - 4100: 47(int) CompositeExtract 4098 0 - 4101: 7(f16vec4) Load 4022(texel) - ReturnValue 4101 + 4066(texel): 64(ptr) Variable Function + Store 4066(texel) 121 + 4067: 143 Load 145(s2D) + 4068: 53(fvec2) Load 148(c2) + 4079:3146(ResType) ImageSparseGather 4067 4068 2187 ConstOffsets 4078 + 4080: 7(f16vec4) CompositeExtract 4079 1 + Store 4066(texel) 4080 + 4081: 47(int) CompositeExtract 4079 0 + 4082: 143 Load 145(s2D) + 4083:154(f16vec2) Load 156(f16c2) + 4084:6(float16_t) Load 137(f16bias) + 4085:3146(ResType) ImageSparseGather 4082 4083 2187 Bias ConstOffsets 4084 4078 + 4086: 7(f16vec4) CompositeExtract 4085 1 + Store 4066(texel) 4086 + 4087: 47(int) CompositeExtract 4085 0 + 4088: 284 Load 286(s2DArray) + 4089: 167(fvec3) Load 169(c3) + 4090:3146(ResType) ImageSparseGather 4088 4089 2187 ConstOffsets 4078 + 4091: 7(f16vec4) CompositeExtract 4090 1 + Store 4066(texel) 4091 + 4092: 47(int) CompositeExtract 4090 0 + 4093: 284 Load 286(s2DArray) + 4094:175(f16vec3) Load 177(f16c3) + 4095:6(float16_t) Load 137(f16bias) + 4096:3146(ResType) ImageSparseGather 4093 4094 2187 Bias ConstOffsets 4095 4078 + 4097: 7(f16vec4) CompositeExtract 4096 1 + Store 4066(texel) 4097 + 4098: 47(int) CompositeExtract 4096 0 + 4099: 357 Load 359(s2DRect) + 4100: 53(fvec2) Load 148(c2) + 4101:3146(ResType) ImageSparseGather 4099 4100 2187 ConstOffsets 4078 + 4102: 7(f16vec4) CompositeExtract 4101 1 + Store 4066(texel) 4102 + 4103: 47(int) CompositeExtract 4101 0 + 4104: 357 Load 359(s2DRect) + 4105:154(f16vec2) Load 156(f16c2) + 4106:3146(ResType) ImageSparseGather 4104 4105 2187 ConstOffsets 4078 + 4107: 7(f16vec4) CompositeExtract 4106 1 + Store 4066(texel) 4107 + 4108: 47(int) CompositeExtract 4106 0 + 4109: 224 Load 226(s2DShadow) + 4110: 53(fvec2) Load 148(c2) + 4111: 52(float) Load 215(compare) + 4112:3146(ResType) ImageSparseDrefGather 4109 4110 4111 ConstOffsets 4078 + 4113: 7(f16vec4) CompositeExtract 4112 1 + Store 4066(texel) 4113 + 4114: 47(int) CompositeExtract 4112 0 + 4115: 224 Load 226(s2DShadow) + 4116:154(f16vec2) Load 156(f16c2) + 4117: 52(float) Load 215(compare) + 4118:3146(ResType) ImageSparseDrefGather 4115 4116 4117 ConstOffsets 4078 + 4119: 7(f16vec4) CompositeExtract 4118 1 + Store 4066(texel) 4119 + 4120: 47(int) CompositeExtract 4118 0 + 4121: 337 Load 339(s2DArrayShadow) + 4122: 167(fvec3) Load 169(c3) + 4123: 52(float) Load 215(compare) + 4124:3146(ResType) ImageSparseDrefGather 4121 4122 4123 ConstOffsets 4078 + 4125: 7(f16vec4) CompositeExtract 4124 1 + Store 4066(texel) 4125 + 4126: 47(int) CompositeExtract 4124 0 + 4127: 337 Load 339(s2DArrayShadow) + 4128:175(f16vec3) Load 177(f16c3) + 4129: 52(float) Load 215(compare) + 4130:3146(ResType) ImageSparseDrefGather 4127 4128 4129 ConstOffsets 4078 + 4131: 7(f16vec4) CompositeExtract 4130 1 + Store 4066(texel) 4131 + 4132: 47(int) CompositeExtract 4130 0 + 4133: 371 Load 373(s2DRectShadow) + 4134: 53(fvec2) Load 148(c2) + 4135: 52(float) Load 215(compare) + 4136:3146(ResType) ImageSparseDrefGather 4133 4134 4135 ConstOffsets 4078 + 4137: 7(f16vec4) CompositeExtract 4136 1 + Store 4066(texel) 4137 + 4138: 47(int) CompositeExtract 4136 0 + 4139: 371 Load 373(s2DRectShadow) + 4140:154(f16vec2) Load 156(f16c2) + 4141: 52(float) Load 215(compare) + 4142:3146(ResType) ImageSparseDrefGather 4139 4140 4141 ConstOffsets 4078 + 4143: 7(f16vec4) CompositeExtract 4142 1 + Store 4066(texel) 4143 + 4144: 47(int) CompositeExtract 4142 0 + 4145: 7(f16vec4) Load 4066(texel) + ReturnValue 4145 FunctionEnd 91(testSparseTextureGatherLod(): 7(f16vec4) Function None 8 92: Label - 4104(texel): 64(ptr) Variable Function - Store 4104(texel) 121 - 4105: 143 Load 145(s2D) - 4106: 53(fvec2) Load 148(c2) - 4107: 52(float) Load 565(lod) - 4108:3102(ResType) ImageSparseGather 4105 4106 2187 Lod 4107 - 4109: 7(f16vec4) CompositeExtract 4108 1 - Store 4104(texel) 4109 - 4110: 47(int) CompositeExtract 4108 0 - 4111: 143 Load 145(s2D) - 4112:154(f16vec2) Load 156(f16c2) - 4113:6(float16_t) Load 572(f16lod) - 4114:3102(ResType) ImageSparseGather 4111 4112 2187 Lod 4113 - 4115: 7(f16vec4) CompositeExtract 4114 1 - Store 4104(texel) 4115 - 4116: 47(int) CompositeExtract 4114 0 - 4117: 284 Load 286(s2DArray) - 4118: 167(fvec3) Load 169(c3) - 4119: 52(float) Load 565(lod) - 4120:3102(ResType) ImageSparseGather 4117 4118 2187 Lod 4119 - 4121: 7(f16vec4) CompositeExtract 4120 1 - Store 4104(texel) 4121 - 4122: 47(int) CompositeExtract 4120 0 - 4123: 284 Load 286(s2DArray) - 4124:175(f16vec3) Load 177(f16c3) - 4125:6(float16_t) Load 572(f16lod) - 4126:3102(ResType) ImageSparseGather 4123 4124 2187 Lod 4125 - 4127: 7(f16vec4) CompositeExtract 4126 1 - Store 4104(texel) 4127 - 4128: 47(int) CompositeExtract 4126 0 - 4129: 184 Load 186(sCube) - 4130: 167(fvec3) Load 169(c3) - 4131: 52(float) Load 565(lod) - 4132:3102(ResType) ImageSparseGather 4129 4130 2187 Lod 4131 - 4133: 7(f16vec4) CompositeExtract 4132 1 - Store 4104(texel) 4133 - 4134: 47(int) CompositeExtract 4132 0 - 4135: 184 Load 186(sCube) - 4136:175(f16vec3) Load 177(f16c3) - 4137:6(float16_t) Load 572(f16lod) - 4138:3102(ResType) ImageSparseGather 4135 4136 2187 Lod 4137 - 4139: 7(f16vec4) CompositeExtract 4138 1 - Store 4104(texel) 4139 - 4140: 47(int) CompositeExtract 4138 0 - 4141: 299 Load 301(sCubeArray) - 4142: 249(fvec4) Load 251(c4) - 4143: 52(float) Load 565(lod) - 4144:3102(ResType) ImageSparseGather 4141 4142 2187 Lod 4143 - 4145: 7(f16vec4) CompositeExtract 4144 1 - Store 4104(texel) 4145 - 4146: 47(int) CompositeExtract 4144 0 - 4147: 299 Load 301(sCubeArray) - 4148: 7(f16vec4) Load 309(f16c4) - 4149:6(float16_t) Load 572(f16lod) - 4150:3102(ResType) ImageSparseGather 4147 4148 2187 Lod 4149 - 4151: 7(f16vec4) CompositeExtract 4150 1 - Store 4104(texel) 4151 - 4152: 47(int) CompositeExtract 4150 0 - 4153: 7(f16vec4) Load 4104(texel) - ReturnValue 4153 - FunctionEnd -93(testSparseTextureGatherLodOffset(): 7(f16vec4) Function None 8 - 94: Label - 4156(texel): 64(ptr) Variable Function - Store 4156(texel) 121 - 4157: 143 Load 145(s2D) - 4158: 53(fvec2) Load 148(c2) - 4159: 52(float) Load 565(lod) - 4160:3102(ResType) ImageSparseGather 4157 4158 2187 Lod ConstOffset 4159 722 - 4161: 7(f16vec4) CompositeExtract 4160 1 - Store 4156(texel) 4161 - 4162: 47(int) CompositeExtract 4160 0 - 4163: 143 Load 145(s2D) - 4164:154(f16vec2) Load 156(f16c2) - 4165:6(float16_t) Load 572(f16lod) - 4166:3102(ResType) ImageSparseGather 4163 4164 2187 Lod ConstOffset 4165 722 - 4167: 7(f16vec4) CompositeExtract 4166 1 - Store 4156(texel) 4167 - 4168: 47(int) CompositeExtract 4166 0 - 4169: 284 Load 286(s2DArray) - 4170: 167(fvec3) Load 169(c3) - 4171: 52(float) Load 565(lod) - 4172:3102(ResType) ImageSparseGather 4169 4170 2187 Lod ConstOffset 4171 722 - 4173: 7(f16vec4) CompositeExtract 4172 1 - Store 4156(texel) 4173 - 4174: 47(int) CompositeExtract 4172 0 - 4175: 284 Load 286(s2DArray) - 4176:175(f16vec3) Load 177(f16c3) - 4177:6(float16_t) Load 572(f16lod) - 4178:3102(ResType) ImageSparseGather 4175 4176 2187 Lod ConstOffset 4177 722 - 4179: 7(f16vec4) CompositeExtract 4178 1 - Store 4156(texel) 4179 - 4180: 47(int) CompositeExtract 4178 0 - 4181: 7(f16vec4) Load 4156(texel) - ReturnValue 4181 - FunctionEnd -95(testSparseTextureGatherLodOffsets(): 7(f16vec4) Function None 8 - 96: Label - 4184(texel): 64(ptr) Variable Function - Store 4184(texel) 121 - 4185: 143 Load 145(s2D) - 4186: 53(fvec2) Load 148(c2) + 4148(texel): 64(ptr) Variable Function + Store 4148(texel) 121 + 4149: 143 Load 145(s2D) + 4150: 53(fvec2) Load 148(c2) + 4151: 52(float) Load 565(lod) + 4152:3146(ResType) ImageSparseGather 4149 4150 2187 Lod 4151 + 4153: 7(f16vec4) CompositeExtract 4152 1 + Store 4148(texel) 4153 + 4154: 47(int) CompositeExtract 4152 0 + 4155: 143 Load 145(s2D) + 4156:154(f16vec2) Load 156(f16c2) + 4157:6(float16_t) Load 572(f16lod) + 4158:3146(ResType) ImageSparseGather 4155 4156 2187 Lod 4157 + 4159: 7(f16vec4) CompositeExtract 4158 1 + Store 4148(texel) 4159 + 4160: 47(int) CompositeExtract 4158 0 + 4161: 284 Load 286(s2DArray) + 4162: 167(fvec3) Load 169(c3) + 4163: 52(float) Load 565(lod) + 4164:3146(ResType) ImageSparseGather 4161 4162 2187 Lod 4163 + 4165: 7(f16vec4) CompositeExtract 4164 1 + Store 4148(texel) 4165 + 4166: 47(int) CompositeExtract 4164 0 + 4167: 284 Load 286(s2DArray) + 4168:175(f16vec3) Load 177(f16c3) + 4169:6(float16_t) Load 572(f16lod) + 4170:3146(ResType) ImageSparseGather 4167 4168 2187 Lod 4169 + 4171: 7(f16vec4) CompositeExtract 4170 1 + Store 4148(texel) 4171 + 4172: 47(int) CompositeExtract 4170 0 + 4173: 184 Load 186(sCube) + 4174: 167(fvec3) Load 169(c3) + 4175: 52(float) Load 565(lod) + 4176:3146(ResType) ImageSparseGather 4173 4174 2187 Lod 4175 + 4177: 7(f16vec4) CompositeExtract 4176 1 + Store 4148(texel) 4177 + 4178: 47(int) CompositeExtract 4176 0 + 4179: 184 Load 186(sCube) + 4180:175(f16vec3) Load 177(f16c3) + 4181:6(float16_t) Load 572(f16lod) + 4182:3146(ResType) ImageSparseGather 4179 4180 2187 Lod 4181 + 4183: 7(f16vec4) CompositeExtract 4182 1 + Store 4148(texel) 4183 + 4184: 47(int) CompositeExtract 4182 0 + 4185: 299 Load 301(sCubeArray) + 4186: 249(fvec4) Load 251(c4) 4187: 52(float) Load 565(lod) - 4188:3102(ResType) ImageSparseGather 4185 4186 2187 Lod ConstOffsets 4187 2380 + 4188:3146(ResType) ImageSparseGather 4185 4186 2187 Lod 4187 4189: 7(f16vec4) CompositeExtract 4188 1 - Store 4184(texel) 4189 + Store 4148(texel) 4189 4190: 47(int) CompositeExtract 4188 0 - 4191: 143 Load 145(s2D) - 4192:154(f16vec2) Load 156(f16c2) + 4191: 299 Load 301(sCubeArray) + 4192: 7(f16vec4) Load 309(f16c4) 4193:6(float16_t) Load 572(f16lod) - 4194:3102(ResType) ImageSparseGather 4191 4192 2187 Lod ConstOffsets 4193 2380 + 4194:3146(ResType) ImageSparseGather 4191 4192 2187 Lod 4193 4195: 7(f16vec4) CompositeExtract 4194 1 - Store 4184(texel) 4195 + Store 4148(texel) 4195 4196: 47(int) CompositeExtract 4194 0 - 4197: 284 Load 286(s2DArray) - 4198: 167(fvec3) Load 169(c3) - 4199: 52(float) Load 565(lod) - 4200:3102(ResType) ImageSparseGather 4197 4198 2187 Lod ConstOffsets 4199 2380 - 4201: 7(f16vec4) CompositeExtract 4200 1 - Store 4184(texel) 4201 - 4202: 47(int) CompositeExtract 4200 0 - 4203: 284 Load 286(s2DArray) - 4204:175(f16vec3) Load 177(f16c3) - 4205:6(float16_t) Load 572(f16lod) - 4206:3102(ResType) ImageSparseGather 4203 4204 2187 Lod ConstOffsets 4205 2380 - 4207: 7(f16vec4) CompositeExtract 4206 1 - Store 4184(texel) 4207 - 4208: 47(int) CompositeExtract 4206 0 - 4209: 7(f16vec4) Load 4184(texel) - ReturnValue 4209 + 4197: 7(f16vec4) Load 4148(texel) + ReturnValue 4197 FunctionEnd -97(testSparseImageLoad(): 7(f16vec4) Function None 8 - 98: Label - 4212(texel): 64(ptr) Variable Function - Store 4212(texel) 121 - 4213: 2962 Load 2964(i2D) - 4214: 53(fvec2) Load 148(c2) - 4215: 721(ivec2) ConvertFToS 4214 - 4216:3102(ResType) ImageSparseRead 4213 4215 +93(testSparseTextureGatherLodOffset(): 7(f16vec4) Function None 8 + 94: Label + 4200(texel): 64(ptr) Variable Function + Store 4200(texel) 121 + 4201: 143 Load 145(s2D) + 4202: 53(fvec2) Load 148(c2) + 4203: 52(float) Load 565(lod) + 4204:3146(ResType) ImageSparseGather 4201 4202 2187 Lod ConstOffset 4203 722 + 4205: 7(f16vec4) CompositeExtract 4204 1 + Store 4200(texel) 4205 + 4206: 47(int) CompositeExtract 4204 0 + 4207: 143 Load 145(s2D) + 4208:154(f16vec2) Load 156(f16c2) + 4209:6(float16_t) Load 572(f16lod) + 4210:3146(ResType) ImageSparseGather 4207 4208 2187 Lod ConstOffset 4209 722 + 4211: 7(f16vec4) CompositeExtract 4210 1 + Store 4200(texel) 4211 + 4212: 47(int) CompositeExtract 4210 0 + 4213: 284 Load 286(s2DArray) + 4214: 167(fvec3) Load 169(c3) + 4215: 52(float) Load 565(lod) + 4216:3146(ResType) ImageSparseGather 4213 4214 2187 Lod ConstOffset 4215 722 4217: 7(f16vec4) CompositeExtract 4216 1 - Store 4212(texel) 4217 + Store 4200(texel) 4217 4218: 47(int) CompositeExtract 4216 0 - 4219: 2971 Load 2973(i3D) - 4220: 167(fvec3) Load 169(c3) - 4221: 734(ivec3) ConvertFToS 4220 - 4222:3102(ResType) ImageSparseRead 4219 4221 + 4219: 284 Load 286(s2DArray) + 4220:175(f16vec3) Load 177(f16c3) + 4221:6(float16_t) Load 572(f16lod) + 4222:3146(ResType) ImageSparseGather 4219 4220 2187 Lod ConstOffset 4221 722 4223: 7(f16vec4) CompositeExtract 4222 1 - Store 4212(texel) 4223 + Store 4200(texel) 4223 4224: 47(int) CompositeExtract 4222 0 - 4225: 2980 Load 2982(i2DRect) - 4226: 53(fvec2) Load 148(c2) - 4227: 721(ivec2) ConvertFToS 4226 - 4228:3102(ResType) ImageSparseRead 4225 4227 - 4229: 7(f16vec4) CompositeExtract 4228 1 - Store 4212(texel) 4229 - 4230: 47(int) CompositeExtract 4228 0 - 4231: 2989 Load 2991(iCube) - 4232: 167(fvec3) Load 169(c3) - 4233: 734(ivec3) ConvertFToS 4232 - 4234:3102(ResType) ImageSparseRead 4231 4233 - 4235: 7(f16vec4) CompositeExtract 4234 1 - Store 4212(texel) 4235 - 4236: 47(int) CompositeExtract 4234 0 - 4237: 3016 Load 3018(i2DArray) - 4238: 167(fvec3) Load 169(c3) - 4239: 734(ivec3) ConvertFToS 4238 - 4240:3102(ResType) ImageSparseRead 4237 4239 - 4241: 7(f16vec4) CompositeExtract 4240 1 - Store 4212(texel) 4241 - 4242: 47(int) CompositeExtract 4240 0 - 4243: 3025 Load 3027(iCubeArray) - 4244: 167(fvec3) Load 169(c3) - 4245: 734(ivec3) ConvertFToS 4244 - 4246:3102(ResType) ImageSparseRead 4243 4245 - 4247: 7(f16vec4) CompositeExtract 4246 1 - Store 4212(texel) 4247 - 4248: 47(int) CompositeExtract 4246 0 - 4249: 3034 Load 3036(i2DMS) - 4250: 53(fvec2) Load 148(c2) - 4251: 721(ivec2) ConvertFToS 4250 - 4252:3102(ResType) ImageSparseRead 4249 4251 Sample 709 - 4253: 7(f16vec4) CompositeExtract 4252 1 - Store 4212(texel) 4253 - 4254: 47(int) CompositeExtract 4252 0 - 4255: 3043 Load 3045(i2DMSArray) - 4256: 167(fvec3) Load 169(c3) - 4257: 734(ivec3) ConvertFToS 4256 - 4258:3102(ResType) ImageSparseRead 4255 4257 Sample 1326 - 4259: 7(f16vec4) CompositeExtract 4258 1 - Store 4212(texel) 4259 - 4260: 47(int) CompositeExtract 4258 0 - 4261: 7(f16vec4) Load 4212(texel) - ReturnValue 4261 + 4225: 7(f16vec4) Load 4200(texel) + ReturnValue 4225 FunctionEnd -99(testSparseTextureClamp(): 7(f16vec4) Function None 8 - 100: Label - 4264(texel): 64(ptr) Variable Function - Store 4264(texel) 121 - 4265: 143 Load 145(s2D) - 4266: 53(fvec2) Load 148(c2) - 4268: 52(float) Load 4267(lodClamp) - 4269:3102(ResType) ImageSparseSampleImplicitLod 4265 4266 MinLod 4268 - 4270: 7(f16vec4) CompositeExtract 4269 1 - Store 4264(texel) 4270 - 4271: 47(int) CompositeExtract 4269 0 - 4272: 143 Load 145(s2D) - 4273:154(f16vec2) Load 156(f16c2) - 4275:6(float16_t) Load 4274(f16lodClamp) - 4276:6(float16_t) Load 137(f16bias) - 4277:3102(ResType) ImageSparseSampleImplicitLod 4272 4273 Bias MinLod 4276 4275 - 4278: 7(f16vec4) CompositeExtract 4277 1 - Store 4264(texel) 4278 - 4279: 47(int) CompositeExtract 4277 0 - 4280: 163 Load 165(s3D) - 4281: 167(fvec3) Load 169(c3) - 4282: 52(float) Load 4267(lodClamp) - 4283:3102(ResType) ImageSparseSampleImplicitLod 4280 4281 MinLod 4282 - 4284: 7(f16vec4) CompositeExtract 4283 1 - Store 4264(texel) 4284 - 4285: 47(int) CompositeExtract 4283 0 - 4286: 163 Load 165(s3D) - 4287:175(f16vec3) Load 177(f16c3) - 4288:6(float16_t) Load 4274(f16lodClamp) - 4289:6(float16_t) Load 137(f16bias) - 4290:3102(ResType) ImageSparseSampleImplicitLod 4286 4287 Bias MinLod 4289 4288 +95(testSparseTextureGatherLodOffsets(): 7(f16vec4) Function None 8 + 96: Label + 4228(texel): 64(ptr) Variable Function + Store 4228(texel) 121 + 4229: 143 Load 145(s2D) + 4230: 53(fvec2) Load 148(c2) + 4231: 52(float) Load 565(lod) + 4232:3146(ResType) ImageSparseGather 4229 4230 2187 Lod ConstOffsets 4231 2380 + 4233: 7(f16vec4) CompositeExtract 4232 1 + Store 4228(texel) 4233 + 4234: 47(int) CompositeExtract 4232 0 + 4235: 143 Load 145(s2D) + 4236:154(f16vec2) Load 156(f16c2) + 4237:6(float16_t) Load 572(f16lod) + 4238:3146(ResType) ImageSparseGather 4235 4236 2187 Lod ConstOffsets 4237 2380 + 4239: 7(f16vec4) CompositeExtract 4238 1 + Store 4228(texel) 4239 + 4240: 47(int) CompositeExtract 4238 0 + 4241: 284 Load 286(s2DArray) + 4242: 167(fvec3) Load 169(c3) + 4243: 52(float) Load 565(lod) + 4244:3146(ResType) ImageSparseGather 4241 4242 2187 Lod ConstOffsets 4243 2380 + 4245: 7(f16vec4) CompositeExtract 4244 1 + Store 4228(texel) 4245 + 4246: 47(int) CompositeExtract 4244 0 + 4247: 284 Load 286(s2DArray) + 4248:175(f16vec3) Load 177(f16c3) + 4249:6(float16_t) Load 572(f16lod) + 4250:3146(ResType) ImageSparseGather 4247 4248 2187 Lod ConstOffsets 4249 2380 + 4251: 7(f16vec4) CompositeExtract 4250 1 + Store 4228(texel) 4251 + 4252: 47(int) CompositeExtract 4250 0 + 4253: 7(f16vec4) Load 4228(texel) + ReturnValue 4253 + FunctionEnd +97(testSparseImageLoad(): 7(f16vec4) Function None 8 + 98: Label + 4256(texel): 64(ptr) Variable Function + Store 4256(texel) 121 + 4257: 3006 Load 3008(i2D) + 4258: 53(fvec2) Load 148(c2) + 4259: 721(ivec2) ConvertFToS 4258 + 4260:3146(ResType) ImageSparseRead 4257 4259 + 4261: 7(f16vec4) CompositeExtract 4260 1 + Store 4256(texel) 4261 + 4262: 47(int) CompositeExtract 4260 0 + 4263: 3015 Load 3017(i3D) + 4264: 167(fvec3) Load 169(c3) + 4265: 734(ivec3) ConvertFToS 4264 + 4266:3146(ResType) ImageSparseRead 4263 4265 + 4267: 7(f16vec4) CompositeExtract 4266 1 + Store 4256(texel) 4267 + 4268: 47(int) CompositeExtract 4266 0 + 4269: 3024 Load 3026(i2DRect) + 4270: 53(fvec2) Load 148(c2) + 4271: 721(ivec2) ConvertFToS 4270 + 4272:3146(ResType) ImageSparseRead 4269 4271 + 4273: 7(f16vec4) CompositeExtract 4272 1 + Store 4256(texel) 4273 + 4274: 47(int) CompositeExtract 4272 0 + 4275: 3033 Load 3035(iCube) + 4276: 167(fvec3) Load 169(c3) + 4277: 734(ivec3) ConvertFToS 4276 + 4278:3146(ResType) ImageSparseRead 4275 4277 + 4279: 7(f16vec4) CompositeExtract 4278 1 + Store 4256(texel) 4279 + 4280: 47(int) CompositeExtract 4278 0 + 4281: 3060 Load 3062(i2DArray) + 4282: 167(fvec3) Load 169(c3) + 4283: 734(ivec3) ConvertFToS 4282 + 4284:3146(ResType) ImageSparseRead 4281 4283 + 4285: 7(f16vec4) CompositeExtract 4284 1 + Store 4256(texel) 4285 + 4286: 47(int) CompositeExtract 4284 0 + 4287: 3069 Load 3071(iCubeArray) + 4288: 167(fvec3) Load 169(c3) + 4289: 734(ivec3) ConvertFToS 4288 + 4290:3146(ResType) ImageSparseRead 4287 4289 4291: 7(f16vec4) CompositeExtract 4290 1 - Store 4264(texel) 4291 + Store 4256(texel) 4291 4292: 47(int) CompositeExtract 4290 0 - 4293: 184 Load 186(sCube) - 4294: 167(fvec3) Load 169(c3) - 4295: 52(float) Load 4267(lodClamp) - 4296:3102(ResType) ImageSparseSampleImplicitLod 4293 4294 MinLod 4295 + 4293: 3078 Load 3080(i2DMS) + 4294: 53(fvec2) Load 148(c2) + 4295: 721(ivec2) ConvertFToS 4294 + 4296:3146(ResType) ImageSparseRead 4293 4295 Sample 709 4297: 7(f16vec4) CompositeExtract 4296 1 - Store 4264(texel) 4297 + Store 4256(texel) 4297 4298: 47(int) CompositeExtract 4296 0 - 4299: 184 Load 186(sCube) - 4300:175(f16vec3) Load 177(f16c3) - 4301:6(float16_t) Load 4274(f16lodClamp) - 4302:6(float16_t) Load 137(f16bias) - 4303:3102(ResType) ImageSparseSampleImplicitLod 4299 4300 Bias MinLod 4302 4301 - 4304: 7(f16vec4) CompositeExtract 4303 1 - Store 4264(texel) 4304 - 4305: 47(int) CompositeExtract 4303 0 - 4306: 224 Load 226(s2DShadow) - 4307: 167(fvec3) Load 169(c3) - 4308: 52(float) Load 4267(lodClamp) - 4309: 208(ptr) AccessChain 4264(texel) 207 - 4310: 52(float) CompositeExtract 4307 2 - 4311:3138(ResType) ImageSparseSampleDrefImplicitLod 4306 4307 4310 MinLod 4308 - 4312:6(float16_t) CompositeExtract 4311 1 - Store 4309 4312 - 4313: 47(int) CompositeExtract 4311 0 - 4314: 224 Load 226(s2DShadow) - 4315:154(f16vec2) Load 156(f16c2) - 4316: 52(float) Load 215(compare) - 4317:6(float16_t) Load 4274(f16lodClamp) - 4318: 208(ptr) AccessChain 4264(texel) 207 - 4319:6(float16_t) Load 137(f16bias) - 4320:3138(ResType) ImageSparseSampleDrefImplicitLod 4314 4315 4316 Bias MinLod 4319 4317 - 4321:6(float16_t) CompositeExtract 4320 1 - Store 4318 4321 - 4322: 47(int) CompositeExtract 4320 0 - 4323: 245 Load 247(sCubeShadow) - 4324: 249(fvec4) Load 251(c4) - 4325: 52(float) Load 4267(lodClamp) - 4326: 208(ptr) AccessChain 4264(texel) 207 - 4327: 52(float) CompositeExtract 4324 3 - 4328:3138(ResType) ImageSparseSampleDrefImplicitLod 4323 4324 4327 MinLod 4325 - 4329:6(float16_t) CompositeExtract 4328 1 - Store 4326 4329 - 4330: 47(int) CompositeExtract 4328 0 - 4331: 245 Load 247(sCubeShadow) - 4332:175(f16vec3) Load 177(f16c3) - 4333: 52(float) Load 215(compare) - 4334:6(float16_t) Load 4274(f16lodClamp) - 4335: 208(ptr) AccessChain 4264(texel) 207 - 4336:6(float16_t) Load 137(f16bias) - 4337:3138(ResType) ImageSparseSampleDrefImplicitLod 4331 4332 4333 Bias MinLod 4336 4334 - 4338:6(float16_t) CompositeExtract 4337 1 - Store 4335 4338 - 4339: 47(int) CompositeExtract 4337 0 - 4340: 284 Load 286(s2DArray) - 4341: 167(fvec3) Load 169(c3) - 4342: 52(float) Load 4267(lodClamp) - 4343:3102(ResType) ImageSparseSampleImplicitLod 4340 4341 MinLod 4342 - 4344: 7(f16vec4) CompositeExtract 4343 1 - Store 4264(texel) 4344 - 4345: 47(int) CompositeExtract 4343 0 - 4346: 284 Load 286(s2DArray) - 4347:175(f16vec3) Load 177(f16c3) - 4348:6(float16_t) Load 4274(f16lodClamp) - 4349:6(float16_t) Load 137(f16bias) - 4350:3102(ResType) ImageSparseSampleImplicitLod 4346 4347 Bias MinLod 4349 4348 - 4351: 7(f16vec4) CompositeExtract 4350 1 - Store 4264(texel) 4351 - 4352: 47(int) CompositeExtract 4350 0 - 4353: 299 Load 301(sCubeArray) - 4354: 249(fvec4) Load 251(c4) - 4355: 52(float) Load 4267(lodClamp) - 4356:3102(ResType) ImageSparseSampleImplicitLod 4353 4354 MinLod 4355 - 4357: 7(f16vec4) CompositeExtract 4356 1 - Store 4264(texel) 4357 - 4358: 47(int) CompositeExtract 4356 0 - 4359: 299 Load 301(sCubeArray) - 4360: 7(f16vec4) Load 309(f16c4) - 4361:6(float16_t) Load 4274(f16lodClamp) - 4362:6(float16_t) Load 137(f16bias) - 4363:3102(ResType) ImageSparseSampleImplicitLod 4359 4360 Bias MinLod 4362 4361 - 4364: 7(f16vec4) CompositeExtract 4363 1 - Store 4264(texel) 4364 - 4365: 47(int) CompositeExtract 4363 0 - 4366: 337 Load 339(s2DArrayShadow) - 4367: 249(fvec4) Load 251(c4) - 4368: 52(float) Load 4267(lodClamp) - 4369: 208(ptr) AccessChain 4264(texel) 207 - 4370: 52(float) CompositeExtract 4367 3 - 4371:3138(ResType) ImageSparseSampleDrefImplicitLod 4366 4367 4370 MinLod 4368 - 4372:6(float16_t) CompositeExtract 4371 1 - Store 4369 4372 - 4373: 47(int) CompositeExtract 4371 0 - 4374: 337 Load 339(s2DArrayShadow) - 4375:175(f16vec3) Load 177(f16c3) - 4376: 52(float) Load 215(compare) - 4377:6(float16_t) Load 4274(f16lodClamp) - 4378: 208(ptr) AccessChain 4264(texel) 207 - 4379:3138(ResType) ImageSparseSampleDrefImplicitLod 4374 4375 4376 MinLod 4377 - 4380:6(float16_t) CompositeExtract 4379 1 - Store 4378 4380 - 4381: 47(int) CompositeExtract 4379 0 - 4382: 391 Load 393(sCubeArrayShadow) - 4383: 249(fvec4) Load 251(c4) - 4384: 52(float) Load 215(compare) - 4385: 52(float) Load 4267(lodClamp) - 4386: 208(ptr) AccessChain 4264(texel) 207 - 4387:3138(ResType) ImageSparseSampleDrefImplicitLod 4382 4383 4384 MinLod 4385 - 4388:6(float16_t) CompositeExtract 4387 1 - Store 4386 4388 + 4299: 3087 Load 3089(i2DMSArray) + 4300: 167(fvec3) Load 169(c3) + 4301: 734(ivec3) ConvertFToS 4300 + 4302:3146(ResType) ImageSparseRead 4299 4301 Sample 1326 + 4303: 7(f16vec4) CompositeExtract 4302 1 + Store 4256(texel) 4303 + 4304: 47(int) CompositeExtract 4302 0 + 4305: 7(f16vec4) Load 4256(texel) + ReturnValue 4305 + FunctionEnd +99(testSparseTextureClamp(): 7(f16vec4) Function None 8 + 100: Label + 4308(texel): 64(ptr) Variable Function + Store 4308(texel) 121 + 4309: 143 Load 145(s2D) + 4310: 53(fvec2) Load 148(c2) + 4312: 52(float) Load 4311(lodClamp) + 4313:3146(ResType) ImageSparseSampleImplicitLod 4309 4310 MinLod 4312 + 4314: 7(f16vec4) CompositeExtract 4313 1 + Store 4308(texel) 4314 + 4315: 47(int) CompositeExtract 4313 0 + 4316: 143 Load 145(s2D) + 4317:154(f16vec2) Load 156(f16c2) + 4319:6(float16_t) Load 4318(f16lodClamp) + 4320:6(float16_t) Load 137(f16bias) + 4321:3146(ResType) ImageSparseSampleImplicitLod 4316 4317 Bias MinLod 4320 4319 + 4322: 7(f16vec4) CompositeExtract 4321 1 + Store 4308(texel) 4322 + 4323: 47(int) CompositeExtract 4321 0 + 4324: 163 Load 165(s3D) + 4325: 167(fvec3) Load 169(c3) + 4326: 52(float) Load 4311(lodClamp) + 4327:3146(ResType) ImageSparseSampleImplicitLod 4324 4325 MinLod 4326 + 4328: 7(f16vec4) CompositeExtract 4327 1 + Store 4308(texel) 4328 + 4329: 47(int) CompositeExtract 4327 0 + 4330: 163 Load 165(s3D) + 4331:175(f16vec3) Load 177(f16c3) + 4332:6(float16_t) Load 4318(f16lodClamp) + 4333:6(float16_t) Load 137(f16bias) + 4334:3146(ResType) ImageSparseSampleImplicitLod 4330 4331 Bias MinLod 4333 4332 + 4335: 7(f16vec4) CompositeExtract 4334 1 + Store 4308(texel) 4335 + 4336: 47(int) CompositeExtract 4334 0 + 4337: 184 Load 186(sCube) + 4338: 167(fvec3) Load 169(c3) + 4339: 52(float) Load 4311(lodClamp) + 4340:3146(ResType) ImageSparseSampleImplicitLod 4337 4338 MinLod 4339 + 4341: 7(f16vec4) CompositeExtract 4340 1 + Store 4308(texel) 4341 + 4342: 47(int) CompositeExtract 4340 0 + 4343: 184 Load 186(sCube) + 4344:175(f16vec3) Load 177(f16c3) + 4345:6(float16_t) Load 4318(f16lodClamp) + 4346:6(float16_t) Load 137(f16bias) + 4347:3146(ResType) ImageSparseSampleImplicitLod 4343 4344 Bias MinLod 4346 4345 + 4348: 7(f16vec4) CompositeExtract 4347 1 + Store 4308(texel) 4348 + 4349: 47(int) CompositeExtract 4347 0 + 4350: 224 Load 226(s2DShadow) + 4351: 167(fvec3) Load 169(c3) + 4352: 52(float) Load 4311(lodClamp) + 4353: 208(ptr) AccessChain 4308(texel) 207 + 4354: 52(float) CompositeExtract 4351 2 + 4355:3182(ResType) ImageSparseSampleDrefImplicitLod 4350 4351 4354 MinLod 4352 + 4356:6(float16_t) CompositeExtract 4355 1 + Store 4353 4356 + 4357: 47(int) CompositeExtract 4355 0 + 4358: 224 Load 226(s2DShadow) + 4359:154(f16vec2) Load 156(f16c2) + 4360: 52(float) Load 215(compare) + 4361:6(float16_t) Load 4318(f16lodClamp) + 4362: 208(ptr) AccessChain 4308(texel) 207 + 4363:6(float16_t) Load 137(f16bias) + 4364:3182(ResType) ImageSparseSampleDrefImplicitLod 4358 4359 4360 Bias MinLod 4363 4361 + 4365:6(float16_t) CompositeExtract 4364 1 + Store 4362 4365 + 4366: 47(int) CompositeExtract 4364 0 + 4367: 245 Load 247(sCubeShadow) + 4368: 249(fvec4) Load 251(c4) + 4369: 52(float) Load 4311(lodClamp) + 4370: 208(ptr) AccessChain 4308(texel) 207 + 4371: 52(float) CompositeExtract 4368 3 + 4372:3182(ResType) ImageSparseSampleDrefImplicitLod 4367 4368 4371 MinLod 4369 + 4373:6(float16_t) CompositeExtract 4372 1 + Store 4370 4373 + 4374: 47(int) CompositeExtract 4372 0 + 4375: 245 Load 247(sCubeShadow) + 4376:175(f16vec3) Load 177(f16c3) + 4377: 52(float) Load 215(compare) + 4378:6(float16_t) Load 4318(f16lodClamp) + 4379: 208(ptr) AccessChain 4308(texel) 207 + 4380:6(float16_t) Load 137(f16bias) + 4381:3182(ResType) ImageSparseSampleDrefImplicitLod 4375 4376 4377 Bias MinLod 4380 4378 + 4382:6(float16_t) CompositeExtract 4381 1 + Store 4379 4382 + 4383: 47(int) CompositeExtract 4381 0 + 4384: 284 Load 286(s2DArray) + 4385: 167(fvec3) Load 169(c3) + 4386: 52(float) Load 4311(lodClamp) + 4387:3146(ResType) ImageSparseSampleImplicitLod 4384 4385 MinLod 4386 + 4388: 7(f16vec4) CompositeExtract 4387 1 + Store 4308(texel) 4388 4389: 47(int) CompositeExtract 4387 0 - 4390: 391 Load 393(sCubeArrayShadow) - 4391: 7(f16vec4) Load 309(f16c4) - 4392: 52(float) Load 215(compare) - 4393:6(float16_t) Load 4274(f16lodClamp) - 4394: 208(ptr) AccessChain 4264(texel) 207 - 4395:3138(ResType) ImageSparseSampleDrefImplicitLod 4390 4391 4392 MinLod 4393 - 4396:6(float16_t) CompositeExtract 4395 1 - Store 4394 4396 - 4397: 47(int) CompositeExtract 4395 0 - 4398: 7(f16vec4) Load 4264(texel) - ReturnValue 4398 + 4390: 284 Load 286(s2DArray) + 4391:175(f16vec3) Load 177(f16c3) + 4392:6(float16_t) Load 4318(f16lodClamp) + 4393:6(float16_t) Load 137(f16bias) + 4394:3146(ResType) ImageSparseSampleImplicitLod 4390 4391 Bias MinLod 4393 4392 + 4395: 7(f16vec4) CompositeExtract 4394 1 + Store 4308(texel) 4395 + 4396: 47(int) CompositeExtract 4394 0 + 4397: 299 Load 301(sCubeArray) + 4398: 249(fvec4) Load 251(c4) + 4399: 52(float) Load 4311(lodClamp) + 4400:3146(ResType) ImageSparseSampleImplicitLod 4397 4398 MinLod 4399 + 4401: 7(f16vec4) CompositeExtract 4400 1 + Store 4308(texel) 4401 + 4402: 47(int) CompositeExtract 4400 0 + 4403: 299 Load 301(sCubeArray) + 4404: 7(f16vec4) Load 309(f16c4) + 4405:6(float16_t) Load 4318(f16lodClamp) + 4406:6(float16_t) Load 137(f16bias) + 4407:3146(ResType) ImageSparseSampleImplicitLod 4403 4404 Bias MinLod 4406 4405 + 4408: 7(f16vec4) CompositeExtract 4407 1 + Store 4308(texel) 4408 + 4409: 47(int) CompositeExtract 4407 0 + 4410: 337 Load 339(s2DArrayShadow) + 4411: 249(fvec4) Load 251(c4) + 4412: 52(float) Load 4311(lodClamp) + 4413: 208(ptr) AccessChain 4308(texel) 207 + 4414: 52(float) CompositeExtract 4411 3 + 4415:3182(ResType) ImageSparseSampleDrefImplicitLod 4410 4411 4414 MinLod 4412 + 4416:6(float16_t) CompositeExtract 4415 1 + Store 4413 4416 + 4417: 47(int) CompositeExtract 4415 0 + 4418: 337 Load 339(s2DArrayShadow) + 4419:175(f16vec3) Load 177(f16c3) + 4420: 52(float) Load 215(compare) + 4421:6(float16_t) Load 4318(f16lodClamp) + 4422: 208(ptr) AccessChain 4308(texel) 207 + 4423:3182(ResType) ImageSparseSampleDrefImplicitLod 4418 4419 4420 MinLod 4421 + 4424:6(float16_t) CompositeExtract 4423 1 + Store 4422 4424 + 4425: 47(int) CompositeExtract 4423 0 + 4426: 391 Load 393(sCubeArrayShadow) + 4427: 249(fvec4) Load 251(c4) + 4428: 52(float) Load 215(compare) + 4429: 52(float) Load 4311(lodClamp) + 4430: 208(ptr) AccessChain 4308(texel) 207 + 4431:3182(ResType) ImageSparseSampleDrefImplicitLod 4426 4427 4428 MinLod 4429 + 4432:6(float16_t) CompositeExtract 4431 1 + Store 4430 4432 + 4433: 47(int) CompositeExtract 4431 0 + 4434: 391 Load 393(sCubeArrayShadow) + 4435: 7(f16vec4) Load 309(f16c4) + 4436: 52(float) Load 215(compare) + 4437:6(float16_t) Load 4318(f16lodClamp) + 4438: 208(ptr) AccessChain 4308(texel) 207 + 4439:3182(ResType) ImageSparseSampleDrefImplicitLod 4434 4435 4436 MinLod 4437 + 4440:6(float16_t) CompositeExtract 4439 1 + Store 4438 4440 + 4441: 47(int) CompositeExtract 4439 0 + 4442: 7(f16vec4) Load 4308(texel) + ReturnValue 4442 FunctionEnd 101(testTextureClamp(): 7(f16vec4) Function None 8 102: Label - 4401(texel): 64(ptr) Variable Function - Store 4401(texel) 121 - 4402: 123 Load 125(s1D) - 4403: 52(float) Load 128(c1) - 4404: 52(float) Load 4267(lodClamp) - 4405: 7(f16vec4) ImageSampleImplicitLod 4402 4403 MinLod 4404 - 4406: 7(f16vec4) Load 4401(texel) - 4407: 7(f16vec4) FAdd 4406 4405 - Store 4401(texel) 4407 - 4408: 123 Load 125(s1D) - 4409:6(float16_t) Load 135(f16c1) - 4410:6(float16_t) Load 4274(f16lodClamp) - 4411:6(float16_t) Load 137(f16bias) - 4412: 7(f16vec4) ImageSampleImplicitLod 4408 4409 Bias MinLod 4411 4410 - 4413: 7(f16vec4) Load 4401(texel) - 4414: 7(f16vec4) FAdd 4413 4412 - Store 4401(texel) 4414 - 4415: 143 Load 145(s2D) - 4416: 53(fvec2) Load 148(c2) - 4417: 52(float) Load 4267(lodClamp) - 4418: 7(f16vec4) ImageSampleImplicitLod 4415 4416 MinLod 4417 - 4419: 7(f16vec4) Load 4401(texel) - 4420: 7(f16vec4) FAdd 4419 4418 - Store 4401(texel) 4420 - 4421: 143 Load 145(s2D) - 4422:154(f16vec2) Load 156(f16c2) - 4423:6(float16_t) Load 4274(f16lodClamp) - 4424:6(float16_t) Load 137(f16bias) - 4425: 7(f16vec4) ImageSampleImplicitLod 4421 4422 Bias MinLod 4424 4423 - 4426: 7(f16vec4) Load 4401(texel) - 4427: 7(f16vec4) FAdd 4426 4425 - Store 4401(texel) 4427 - 4428: 163 Load 165(s3D) - 4429: 167(fvec3) Load 169(c3) - 4430: 52(float) Load 4267(lodClamp) - 4431: 7(f16vec4) ImageSampleImplicitLod 4428 4429 MinLod 4430 - 4432: 7(f16vec4) Load 4401(texel) - 4433: 7(f16vec4) FAdd 4432 4431 - Store 4401(texel) 4433 - 4434: 163 Load 165(s3D) - 4435:175(f16vec3) Load 177(f16c3) - 4436:6(float16_t) Load 4274(f16lodClamp) - 4437:6(float16_t) Load 137(f16bias) - 4438: 7(f16vec4) ImageSampleImplicitLod 4434 4435 Bias MinLod 4437 4436 - 4439: 7(f16vec4) Load 4401(texel) - 4440: 7(f16vec4) FAdd 4439 4438 - Store 4401(texel) 4440 - 4441: 184 Load 186(sCube) - 4442: 167(fvec3) Load 169(c3) - 4443: 52(float) Load 4267(lodClamp) - 4444: 7(f16vec4) ImageSampleImplicitLod 4441 4442 MinLod 4443 - 4445: 7(f16vec4) Load 4401(texel) - 4446: 7(f16vec4) FAdd 4445 4444 - Store 4401(texel) 4446 - 4447: 184 Load 186(sCube) - 4448:175(f16vec3) Load 177(f16c3) - 4449:6(float16_t) Load 4274(f16lodClamp) - 4450:6(float16_t) Load 137(f16bias) - 4451: 7(f16vec4) ImageSampleImplicitLod 4447 4448 Bias MinLod 4450 4449 - 4452: 7(f16vec4) Load 4401(texel) - 4453: 7(f16vec4) FAdd 4452 4451 - Store 4401(texel) 4453 - 4454: 199 Load 201(s1DShadow) - 4455: 167(fvec3) Load 169(c3) - 4456: 52(float) Load 4267(lodClamp) - 4457: 52(float) CompositeExtract 4455 2 - 4458:6(float16_t) ImageSampleDrefImplicitLod 4454 4455 4457 MinLod 4456 - 4459: 208(ptr) AccessChain 4401(texel) 207 - 4460:6(float16_t) Load 4459 - 4461:6(float16_t) FAdd 4460 4458 - 4462: 208(ptr) AccessChain 4401(texel) 207 - Store 4462 4461 - 4463: 199 Load 201(s1DShadow) - 4464:154(f16vec2) Load 156(f16c2) - 4465: 52(float) Load 215(compare) - 4466:6(float16_t) Load 4274(f16lodClamp) - 4467:6(float16_t) Load 137(f16bias) - 4468:6(float16_t) ImageSampleDrefImplicitLod 4463 4464 4465 Bias MinLod 4467 4466 - 4469: 208(ptr) AccessChain 4401(texel) 207 - 4470:6(float16_t) Load 4469 - 4471:6(float16_t) FAdd 4470 4468 - 4472: 208(ptr) AccessChain 4401(texel) 207 - Store 4472 4471 - 4473: 224 Load 226(s2DShadow) - 4474: 167(fvec3) Load 169(c3) - 4475: 52(float) Load 4267(lodClamp) - 4476: 52(float) CompositeExtract 4474 2 - 4477:6(float16_t) ImageSampleDrefImplicitLod 4473 4474 4476 MinLod 4475 - 4478: 208(ptr) AccessChain 4401(texel) 207 - 4479:6(float16_t) Load 4478 - 4480:6(float16_t) FAdd 4479 4477 - 4481: 208(ptr) AccessChain 4401(texel) 207 - Store 4481 4480 - 4482: 224 Load 226(s2DShadow) - 4483:154(f16vec2) Load 156(f16c2) - 4484: 52(float) Load 215(compare) - 4485:6(float16_t) Load 4274(f16lodClamp) - 4486:6(float16_t) Load 137(f16bias) - 4487:6(float16_t) ImageSampleDrefImplicitLod 4482 4483 4484 Bias MinLod 4486 4485 - 4488: 208(ptr) AccessChain 4401(texel) 207 - 4489:6(float16_t) Load 4488 - 4490:6(float16_t) FAdd 4489 4487 - 4491: 208(ptr) AccessChain 4401(texel) 207 - Store 4491 4490 - 4492: 245 Load 247(sCubeShadow) - 4493: 249(fvec4) Load 251(c4) - 4494: 52(float) Load 4267(lodClamp) - 4495: 52(float) CompositeExtract 4493 3 - 4496:6(float16_t) ImageSampleDrefImplicitLod 4492 4493 4495 MinLod 4494 - 4497: 208(ptr) AccessChain 4401(texel) 207 - 4498:6(float16_t) Load 4497 - 4499:6(float16_t) FAdd 4498 4496 - 4500: 208(ptr) AccessChain 4401(texel) 207 - Store 4500 4499 - 4501: 245 Load 247(sCubeShadow) - 4502:175(f16vec3) Load 177(f16c3) - 4503: 52(float) Load 215(compare) - 4504:6(float16_t) Load 4274(f16lodClamp) - 4505:6(float16_t) Load 137(f16bias) - 4506:6(float16_t) ImageSampleDrefImplicitLod 4501 4502 4503 Bias MinLod 4505 4504 - 4507: 208(ptr) AccessChain 4401(texel) 207 - 4508:6(float16_t) Load 4507 - 4509:6(float16_t) FAdd 4508 4506 - 4510: 208(ptr) AccessChain 4401(texel) 207 - Store 4510 4509 - 4511: 269 Load 271(s1DArray) - 4512: 53(fvec2) Load 148(c2) - 4513: 52(float) Load 4267(lodClamp) - 4514: 7(f16vec4) ImageSampleImplicitLod 4511 4512 MinLod 4513 - 4515: 7(f16vec4) Load 4401(texel) - 4516: 7(f16vec4) FAdd 4515 4514 - Store 4401(texel) 4516 - 4517: 269 Load 271(s1DArray) - 4518:154(f16vec2) Load 156(f16c2) - 4519:6(float16_t) Load 4274(f16lodClamp) - 4520:6(float16_t) Load 137(f16bias) - 4521: 7(f16vec4) ImageSampleImplicitLod 4517 4518 Bias MinLod 4520 4519 - 4522: 7(f16vec4) Load 4401(texel) - 4523: 7(f16vec4) FAdd 4522 4521 - Store 4401(texel) 4523 - 4524: 284 Load 286(s2DArray) - 4525: 167(fvec3) Load 169(c3) - 4526: 52(float) Load 4267(lodClamp) - 4527: 7(f16vec4) ImageSampleImplicitLod 4524 4525 MinLod 4526 - 4528: 7(f16vec4) Load 4401(texel) - 4529: 7(f16vec4) FAdd 4528 4527 - Store 4401(texel) 4529 - 4530: 284 Load 286(s2DArray) - 4531:175(f16vec3) Load 177(f16c3) - 4532:6(float16_t) Load 4274(f16lodClamp) - 4533:6(float16_t) Load 137(f16bias) - 4534: 7(f16vec4) ImageSampleImplicitLod 4530 4531 Bias MinLod 4533 4532 - 4535: 7(f16vec4) Load 4401(texel) - 4536: 7(f16vec4) FAdd 4535 4534 - Store 4401(texel) 4536 - 4537: 299 Load 301(sCubeArray) - 4538: 249(fvec4) Load 251(c4) - 4539: 52(float) Load 4267(lodClamp) - 4540: 7(f16vec4) ImageSampleImplicitLod 4537 4538 MinLod 4539 - 4541: 7(f16vec4) Load 4401(texel) - 4542: 7(f16vec4) FAdd 4541 4540 - Store 4401(texel) 4542 - 4543: 299 Load 301(sCubeArray) - 4544: 7(f16vec4) Load 309(f16c4) - 4545:6(float16_t) Load 4274(f16lodClamp) - 4546:6(float16_t) Load 137(f16bias) - 4547: 7(f16vec4) ImageSampleImplicitLod 4543 4544 Bias MinLod 4546 4545 - 4548: 7(f16vec4) Load 4401(texel) - 4549: 7(f16vec4) FAdd 4548 4547 - Store 4401(texel) 4549 - 4550: 316 Load 318(s1DArrayShadow) - 4551: 167(fvec3) Load 169(c3) - 4552: 52(float) Load 4267(lodClamp) - 4553: 52(float) CompositeExtract 4551 2 - 4554:6(float16_t) ImageSampleDrefImplicitLod 4550 4551 4553 MinLod 4552 - 4555: 208(ptr) AccessChain 4401(texel) 207 - 4556:6(float16_t) Load 4555 - 4557:6(float16_t) FAdd 4556 4554 - 4558: 208(ptr) AccessChain 4401(texel) 207 - Store 4558 4557 - 4559: 316 Load 318(s1DArrayShadow) - 4560:154(f16vec2) Load 156(f16c2) - 4561: 52(float) Load 215(compare) - 4562:6(float16_t) Load 4274(f16lodClamp) - 4563:6(float16_t) Load 137(f16bias) - 4564:6(float16_t) ImageSampleDrefImplicitLod 4559 4560 4561 Bias MinLod 4563 4562 - 4565: 208(ptr) AccessChain 4401(texel) 207 - 4566:6(float16_t) Load 4565 - 4567:6(float16_t) FAdd 4566 4564 - 4568: 208(ptr) AccessChain 4401(texel) 207 - Store 4568 4567 - 4569: 337 Load 339(s2DArrayShadow) - 4570: 249(fvec4) Load 251(c4) - 4571: 52(float) Load 4267(lodClamp) - 4572: 52(float) CompositeExtract 4570 3 - 4573:6(float16_t) ImageSampleDrefImplicitLod 4569 4570 4572 MinLod 4571 - 4574: 208(ptr) AccessChain 4401(texel) 207 - 4575:6(float16_t) Load 4574 - 4576:6(float16_t) FAdd 4575 4573 - 4577: 208(ptr) AccessChain 4401(texel) 207 - Store 4577 4576 - 4578: 337 Load 339(s2DArrayShadow) - 4579:175(f16vec3) Load 177(f16c3) - 4580: 52(float) Load 215(compare) - 4581:6(float16_t) Load 4274(f16lodClamp) - 4582:6(float16_t) ImageSampleDrefImplicitLod 4578 4579 4580 MinLod 4581 - 4583: 208(ptr) AccessChain 4401(texel) 207 - 4584:6(float16_t) Load 4583 - 4585:6(float16_t) FAdd 4584 4582 - 4586: 208(ptr) AccessChain 4401(texel) 207 - Store 4586 4585 - 4587: 391 Load 393(sCubeArrayShadow) - 4588: 249(fvec4) Load 251(c4) - 4589: 52(float) Load 215(compare) - 4590: 52(float) Load 4267(lodClamp) - 4591:6(float16_t) ImageSampleDrefImplicitLod 4587 4588 4589 MinLod 4590 - 4592: 208(ptr) AccessChain 4401(texel) 207 - 4593:6(float16_t) Load 4592 - 4594:6(float16_t) FAdd 4593 4591 - 4595: 208(ptr) AccessChain 4401(texel) 207 - Store 4595 4594 - 4596: 391 Load 393(sCubeArrayShadow) - 4597: 7(f16vec4) Load 309(f16c4) - 4598: 52(float) Load 215(compare) - 4599:6(float16_t) Load 4274(f16lodClamp) - 4600:6(float16_t) ImageSampleDrefImplicitLod 4596 4597 4598 MinLod 4599 - 4601: 208(ptr) AccessChain 4401(texel) 207 - 4602:6(float16_t) Load 4601 - 4603:6(float16_t) FAdd 4602 4600 - 4604: 208(ptr) AccessChain 4401(texel) 207 - Store 4604 4603 - 4605: 7(f16vec4) Load 4401(texel) - ReturnValue 4605 + 4445(texel): 64(ptr) Variable Function + Store 4445(texel) 121 + 4446: 123 Load 125(s1D) + 4447: 52(float) Load 128(c1) + 4448: 52(float) Load 4311(lodClamp) + 4449: 7(f16vec4) ImageSampleImplicitLod 4446 4447 MinLod 4448 + 4450: 7(f16vec4) Load 4445(texel) + 4451: 7(f16vec4) FAdd 4450 4449 + Store 4445(texel) 4451 + 4452: 123 Load 125(s1D) + 4453:6(float16_t) Load 135(f16c1) + 4454:6(float16_t) Load 4318(f16lodClamp) + 4455:6(float16_t) Load 137(f16bias) + 4456: 7(f16vec4) ImageSampleImplicitLod 4452 4453 Bias MinLod 4455 4454 + 4457: 7(f16vec4) Load 4445(texel) + 4458: 7(f16vec4) FAdd 4457 4456 + Store 4445(texel) 4458 + 4459: 143 Load 145(s2D) + 4460: 53(fvec2) Load 148(c2) + 4461: 52(float) Load 4311(lodClamp) + 4462: 7(f16vec4) ImageSampleImplicitLod 4459 4460 MinLod 4461 + 4463: 7(f16vec4) Load 4445(texel) + 4464: 7(f16vec4) FAdd 4463 4462 + Store 4445(texel) 4464 + 4465: 143 Load 145(s2D) + 4466:154(f16vec2) Load 156(f16c2) + 4467:6(float16_t) Load 4318(f16lodClamp) + 4468:6(float16_t) Load 137(f16bias) + 4469: 7(f16vec4) ImageSampleImplicitLod 4465 4466 Bias MinLod 4468 4467 + 4470: 7(f16vec4) Load 4445(texel) + 4471: 7(f16vec4) FAdd 4470 4469 + Store 4445(texel) 4471 + 4472: 163 Load 165(s3D) + 4473: 167(fvec3) Load 169(c3) + 4474: 52(float) Load 4311(lodClamp) + 4475: 7(f16vec4) ImageSampleImplicitLod 4472 4473 MinLod 4474 + 4476: 7(f16vec4) Load 4445(texel) + 4477: 7(f16vec4) FAdd 4476 4475 + Store 4445(texel) 4477 + 4478: 163 Load 165(s3D) + 4479:175(f16vec3) Load 177(f16c3) + 4480:6(float16_t) Load 4318(f16lodClamp) + 4481:6(float16_t) Load 137(f16bias) + 4482: 7(f16vec4) ImageSampleImplicitLod 4478 4479 Bias MinLod 4481 4480 + 4483: 7(f16vec4) Load 4445(texel) + 4484: 7(f16vec4) FAdd 4483 4482 + Store 4445(texel) 4484 + 4485: 184 Load 186(sCube) + 4486: 167(fvec3) Load 169(c3) + 4487: 52(float) Load 4311(lodClamp) + 4488: 7(f16vec4) ImageSampleImplicitLod 4485 4486 MinLod 4487 + 4489: 7(f16vec4) Load 4445(texel) + 4490: 7(f16vec4) FAdd 4489 4488 + Store 4445(texel) 4490 + 4491: 184 Load 186(sCube) + 4492:175(f16vec3) Load 177(f16c3) + 4493:6(float16_t) Load 4318(f16lodClamp) + 4494:6(float16_t) Load 137(f16bias) + 4495: 7(f16vec4) ImageSampleImplicitLod 4491 4492 Bias MinLod 4494 4493 + 4496: 7(f16vec4) Load 4445(texel) + 4497: 7(f16vec4) FAdd 4496 4495 + Store 4445(texel) 4497 + 4498: 199 Load 201(s1DShadow) + 4499: 167(fvec3) Load 169(c3) + 4500: 52(float) Load 4311(lodClamp) + 4501: 52(float) CompositeExtract 4499 2 + 4502:6(float16_t) ImageSampleDrefImplicitLod 4498 4499 4501 MinLod 4500 + 4503: 208(ptr) AccessChain 4445(texel) 207 + 4504:6(float16_t) Load 4503 + 4505:6(float16_t) FAdd 4504 4502 + 4506: 208(ptr) AccessChain 4445(texel) 207 + Store 4506 4505 + 4507: 199 Load 201(s1DShadow) + 4508:154(f16vec2) Load 156(f16c2) + 4509: 52(float) Load 215(compare) + 4510:6(float16_t) Load 4318(f16lodClamp) + 4511:6(float16_t) Load 137(f16bias) + 4512:6(float16_t) ImageSampleDrefImplicitLod 4507 4508 4509 Bias MinLod 4511 4510 + 4513: 208(ptr) AccessChain 4445(texel) 207 + 4514:6(float16_t) Load 4513 + 4515:6(float16_t) FAdd 4514 4512 + 4516: 208(ptr) AccessChain 4445(texel) 207 + Store 4516 4515 + 4517: 224 Load 226(s2DShadow) + 4518: 167(fvec3) Load 169(c3) + 4519: 52(float) Load 4311(lodClamp) + 4520: 52(float) CompositeExtract 4518 2 + 4521:6(float16_t) ImageSampleDrefImplicitLod 4517 4518 4520 MinLod 4519 + 4522: 208(ptr) AccessChain 4445(texel) 207 + 4523:6(float16_t) Load 4522 + 4524:6(float16_t) FAdd 4523 4521 + 4525: 208(ptr) AccessChain 4445(texel) 207 + Store 4525 4524 + 4526: 224 Load 226(s2DShadow) + 4527:154(f16vec2) Load 156(f16c2) + 4528: 52(float) Load 215(compare) + 4529:6(float16_t) Load 4318(f16lodClamp) + 4530:6(float16_t) Load 137(f16bias) + 4531:6(float16_t) ImageSampleDrefImplicitLod 4526 4527 4528 Bias MinLod 4530 4529 + 4532: 208(ptr) AccessChain 4445(texel) 207 + 4533:6(float16_t) Load 4532 + 4534:6(float16_t) FAdd 4533 4531 + 4535: 208(ptr) AccessChain 4445(texel) 207 + Store 4535 4534 + 4536: 245 Load 247(sCubeShadow) + 4537: 249(fvec4) Load 251(c4) + 4538: 52(float) Load 4311(lodClamp) + 4539: 52(float) CompositeExtract 4537 3 + 4540:6(float16_t) ImageSampleDrefImplicitLod 4536 4537 4539 MinLod 4538 + 4541: 208(ptr) AccessChain 4445(texel) 207 + 4542:6(float16_t) Load 4541 + 4543:6(float16_t) FAdd 4542 4540 + 4544: 208(ptr) AccessChain 4445(texel) 207 + Store 4544 4543 + 4545: 245 Load 247(sCubeShadow) + 4546:175(f16vec3) Load 177(f16c3) + 4547: 52(float) Load 215(compare) + 4548:6(float16_t) Load 4318(f16lodClamp) + 4549:6(float16_t) Load 137(f16bias) + 4550:6(float16_t) ImageSampleDrefImplicitLod 4545 4546 4547 Bias MinLod 4549 4548 + 4551: 208(ptr) AccessChain 4445(texel) 207 + 4552:6(float16_t) Load 4551 + 4553:6(float16_t) FAdd 4552 4550 + 4554: 208(ptr) AccessChain 4445(texel) 207 + Store 4554 4553 + 4555: 269 Load 271(s1DArray) + 4556: 53(fvec2) Load 148(c2) + 4557: 52(float) Load 4311(lodClamp) + 4558: 7(f16vec4) ImageSampleImplicitLod 4555 4556 MinLod 4557 + 4559: 7(f16vec4) Load 4445(texel) + 4560: 7(f16vec4) FAdd 4559 4558 + Store 4445(texel) 4560 + 4561: 269 Load 271(s1DArray) + 4562:154(f16vec2) Load 156(f16c2) + 4563:6(float16_t) Load 4318(f16lodClamp) + 4564:6(float16_t) Load 137(f16bias) + 4565: 7(f16vec4) ImageSampleImplicitLod 4561 4562 Bias MinLod 4564 4563 + 4566: 7(f16vec4) Load 4445(texel) + 4567: 7(f16vec4) FAdd 4566 4565 + Store 4445(texel) 4567 + 4568: 284 Load 286(s2DArray) + 4569: 167(fvec3) Load 169(c3) + 4570: 52(float) Load 4311(lodClamp) + 4571: 7(f16vec4) ImageSampleImplicitLod 4568 4569 MinLod 4570 + 4572: 7(f16vec4) Load 4445(texel) + 4573: 7(f16vec4) FAdd 4572 4571 + Store 4445(texel) 4573 + 4574: 284 Load 286(s2DArray) + 4575:175(f16vec3) Load 177(f16c3) + 4576:6(float16_t) Load 4318(f16lodClamp) + 4577:6(float16_t) Load 137(f16bias) + 4578: 7(f16vec4) ImageSampleImplicitLod 4574 4575 Bias MinLod 4577 4576 + 4579: 7(f16vec4) Load 4445(texel) + 4580: 7(f16vec4) FAdd 4579 4578 + Store 4445(texel) 4580 + 4581: 299 Load 301(sCubeArray) + 4582: 249(fvec4) Load 251(c4) + 4583: 52(float) Load 4311(lodClamp) + 4584: 7(f16vec4) ImageSampleImplicitLod 4581 4582 MinLod 4583 + 4585: 7(f16vec4) Load 4445(texel) + 4586: 7(f16vec4) FAdd 4585 4584 + Store 4445(texel) 4586 + 4587: 299 Load 301(sCubeArray) + 4588: 7(f16vec4) Load 309(f16c4) + 4589:6(float16_t) Load 4318(f16lodClamp) + 4590:6(float16_t) Load 137(f16bias) + 4591: 7(f16vec4) ImageSampleImplicitLod 4587 4588 Bias MinLod 4590 4589 + 4592: 7(f16vec4) Load 4445(texel) + 4593: 7(f16vec4) FAdd 4592 4591 + Store 4445(texel) 4593 + 4594: 316 Load 318(s1DArrayShadow) + 4595: 167(fvec3) Load 169(c3) + 4596: 52(float) Load 4311(lodClamp) + 4597: 52(float) CompositeExtract 4595 2 + 4598:6(float16_t) ImageSampleDrefImplicitLod 4594 4595 4597 MinLod 4596 + 4599: 208(ptr) AccessChain 4445(texel) 207 + 4600:6(float16_t) Load 4599 + 4601:6(float16_t) FAdd 4600 4598 + 4602: 208(ptr) AccessChain 4445(texel) 207 + Store 4602 4601 + 4603: 316 Load 318(s1DArrayShadow) + 4604:154(f16vec2) Load 156(f16c2) + 4605: 52(float) Load 215(compare) + 4606:6(float16_t) Load 4318(f16lodClamp) + 4607:6(float16_t) Load 137(f16bias) + 4608:6(float16_t) ImageSampleDrefImplicitLod 4603 4604 4605 Bias MinLod 4607 4606 + 4609: 208(ptr) AccessChain 4445(texel) 207 + 4610:6(float16_t) Load 4609 + 4611:6(float16_t) FAdd 4610 4608 + 4612: 208(ptr) AccessChain 4445(texel) 207 + Store 4612 4611 + 4613: 337 Load 339(s2DArrayShadow) + 4614: 249(fvec4) Load 251(c4) + 4615: 52(float) Load 4311(lodClamp) + 4616: 52(float) CompositeExtract 4614 3 + 4617:6(float16_t) ImageSampleDrefImplicitLod 4613 4614 4616 MinLod 4615 + 4618: 208(ptr) AccessChain 4445(texel) 207 + 4619:6(float16_t) Load 4618 + 4620:6(float16_t) FAdd 4619 4617 + 4621: 208(ptr) AccessChain 4445(texel) 207 + Store 4621 4620 + 4622: 337 Load 339(s2DArrayShadow) + 4623:175(f16vec3) Load 177(f16c3) + 4624: 52(float) Load 215(compare) + 4625:6(float16_t) Load 4318(f16lodClamp) + 4626:6(float16_t) ImageSampleDrefImplicitLod 4622 4623 4624 MinLod 4625 + 4627: 208(ptr) AccessChain 4445(texel) 207 + 4628:6(float16_t) Load 4627 + 4629:6(float16_t) FAdd 4628 4626 + 4630: 208(ptr) AccessChain 4445(texel) 207 + Store 4630 4629 + 4631: 391 Load 393(sCubeArrayShadow) + 4632: 249(fvec4) Load 251(c4) + 4633: 52(float) Load 215(compare) + 4634: 52(float) Load 4311(lodClamp) + 4635:6(float16_t) ImageSampleDrefImplicitLod 4631 4632 4633 MinLod 4634 + 4636: 208(ptr) AccessChain 4445(texel) 207 + 4637:6(float16_t) Load 4636 + 4638:6(float16_t) FAdd 4637 4635 + 4639: 208(ptr) AccessChain 4445(texel) 207 + Store 4639 4638 + 4640: 391 Load 393(sCubeArrayShadow) + 4641: 7(f16vec4) Load 309(f16c4) + 4642: 52(float) Load 215(compare) + 4643:6(float16_t) Load 4318(f16lodClamp) + 4644:6(float16_t) ImageSampleDrefImplicitLod 4640 4641 4642 MinLod 4643 + 4645: 208(ptr) AccessChain 4445(texel) 207 + 4646:6(float16_t) Load 4645 + 4647:6(float16_t) FAdd 4646 4644 + 4648: 208(ptr) AccessChain 4445(texel) 207 + Store 4648 4647 + 4649: 7(f16vec4) Load 4445(texel) + ReturnValue 4649 FunctionEnd 103(testSparseTextureOffsetClamp(): 7(f16vec4) Function None 8 104: Label - 4608(texel): 64(ptr) Variable Function - Store 4608(texel) 121 - 4609: 143 Load 145(s2D) - 4610: 53(fvec2) Load 148(c2) - 4611: 52(float) Load 4267(lodClamp) - 4612:3102(ResType) ImageSparseSampleImplicitLod 4609 4610 ConstOffset MinLod 722 4611 - 4613: 7(f16vec4) CompositeExtract 4612 1 - Store 4608(texel) 4613 - 4614: 47(int) CompositeExtract 4612 0 - 4615: 143 Load 145(s2D) - 4616:154(f16vec2) Load 156(f16c2) - 4617:6(float16_t) Load 4274(f16lodClamp) - 4618:6(float16_t) Load 137(f16bias) - 4619:3102(ResType) ImageSparseSampleImplicitLod 4615 4616 Bias ConstOffset MinLod 4618 722 4617 - 4620: 7(f16vec4) CompositeExtract 4619 1 - Store 4608(texel) 4620 - 4621: 47(int) CompositeExtract 4619 0 - 4622: 163 Load 165(s3D) - 4623: 167(fvec3) Load 169(c3) - 4624: 52(float) Load 4267(lodClamp) - 4625:3102(ResType) ImageSparseSampleImplicitLod 4622 4623 ConstOffset MinLod 735 4624 - 4626: 7(f16vec4) CompositeExtract 4625 1 - Store 4608(texel) 4626 - 4627: 47(int) CompositeExtract 4625 0 - 4628: 163 Load 165(s3D) - 4629:175(f16vec3) Load 177(f16c3) - 4630:6(float16_t) Load 4274(f16lodClamp) - 4631:6(float16_t) Load 137(f16bias) - 4632:3102(ResType) ImageSparseSampleImplicitLod 4628 4629 Bias ConstOffset MinLod 4631 735 4630 - 4633: 7(f16vec4) CompositeExtract 4632 1 - Store 4608(texel) 4633 - 4634: 47(int) CompositeExtract 4632 0 - 4635: 224 Load 226(s2DShadow) - 4636: 167(fvec3) Load 169(c3) - 4637: 52(float) Load 4267(lodClamp) - 4638: 208(ptr) AccessChain 4608(texel) 207 - 4639: 52(float) CompositeExtract 4636 2 - 4640:3138(ResType) ImageSparseSampleDrefImplicitLod 4635 4636 4639 ConstOffset MinLod 722 4637 - 4641:6(float16_t) CompositeExtract 4640 1 - Store 4638 4641 - 4642: 47(int) CompositeExtract 4640 0 - 4643: 224 Load 226(s2DShadow) - 4644:154(f16vec2) Load 156(f16c2) - 4645: 52(float) Load 215(compare) - 4646:6(float16_t) Load 4274(f16lodClamp) - 4647: 208(ptr) AccessChain 4608(texel) 207 - 4648:6(float16_t) Load 137(f16bias) - 4649:3138(ResType) ImageSparseSampleDrefImplicitLod 4643 4644 4645 Bias ConstOffset MinLod 4648 722 4646 - 4650:6(float16_t) CompositeExtract 4649 1 - Store 4647 4650 - 4651: 47(int) CompositeExtract 4649 0 - 4652: 284 Load 286(s2DArray) - 4653: 167(fvec3) Load 169(c3) - 4654: 52(float) Load 4267(lodClamp) - 4655:3102(ResType) ImageSparseSampleImplicitLod 4652 4653 ConstOffset MinLod 722 4654 - 4656: 7(f16vec4) CompositeExtract 4655 1 - Store 4608(texel) 4656 - 4657: 47(int) CompositeExtract 4655 0 - 4658: 284 Load 286(s2DArray) - 4659:175(f16vec3) Load 177(f16c3) - 4660:6(float16_t) Load 4274(f16lodClamp) - 4661:6(float16_t) Load 137(f16bias) - 4662:3102(ResType) ImageSparseSampleImplicitLod 4658 4659 Bias ConstOffset MinLod 4661 722 4660 - 4663: 7(f16vec4) CompositeExtract 4662 1 - Store 4608(texel) 4663 - 4664: 47(int) CompositeExtract 4662 0 - 4665: 337 Load 339(s2DArrayShadow) - 4666: 249(fvec4) Load 251(c4) - 4667: 52(float) Load 4267(lodClamp) - 4668: 208(ptr) AccessChain 4608(texel) 207 - 4669: 52(float) CompositeExtract 4666 3 - 4670:3138(ResType) ImageSparseSampleDrefImplicitLod 4665 4666 4669 ConstOffset MinLod 722 4667 - 4671:6(float16_t) CompositeExtract 4670 1 - Store 4668 4671 - 4672: 47(int) CompositeExtract 4670 0 - 4673: 337 Load 339(s2DArrayShadow) - 4674:175(f16vec3) Load 177(f16c3) - 4675: 52(float) Load 215(compare) - 4676:6(float16_t) Load 4274(f16lodClamp) - 4677: 208(ptr) AccessChain 4608(texel) 207 - 4678:3138(ResType) ImageSparseSampleDrefImplicitLod 4673 4674 4675 ConstOffset MinLod 722 4676 - 4679:6(float16_t) CompositeExtract 4678 1 - Store 4677 4679 - 4680: 47(int) CompositeExtract 4678 0 - 4681: 7(f16vec4) Load 4608(texel) - ReturnValue 4681 + 4652(texel): 64(ptr) Variable Function + Store 4652(texel) 121 + 4653: 143 Load 145(s2D) + 4654: 53(fvec2) Load 148(c2) + 4655: 52(float) Load 4311(lodClamp) + 4656:3146(ResType) ImageSparseSampleImplicitLod 4653 4654 ConstOffset MinLod 722 4655 + 4657: 7(f16vec4) CompositeExtract 4656 1 + Store 4652(texel) 4657 + 4658: 47(int) CompositeExtract 4656 0 + 4659: 143 Load 145(s2D) + 4660:154(f16vec2) Load 156(f16c2) + 4661:6(float16_t) Load 4318(f16lodClamp) + 4662:6(float16_t) Load 137(f16bias) + 4663:3146(ResType) ImageSparseSampleImplicitLod 4659 4660 Bias ConstOffset MinLod 4662 722 4661 + 4664: 7(f16vec4) CompositeExtract 4663 1 + Store 4652(texel) 4664 + 4665: 47(int) CompositeExtract 4663 0 + 4666: 163 Load 165(s3D) + 4667: 167(fvec3) Load 169(c3) + 4668: 52(float) Load 4311(lodClamp) + 4669:3146(ResType) ImageSparseSampleImplicitLod 4666 4667 ConstOffset MinLod 735 4668 + 4670: 7(f16vec4) CompositeExtract 4669 1 + Store 4652(texel) 4670 + 4671: 47(int) CompositeExtract 4669 0 + 4672: 163 Load 165(s3D) + 4673:175(f16vec3) Load 177(f16c3) + 4674:6(float16_t) Load 4318(f16lodClamp) + 4675:6(float16_t) Load 137(f16bias) + 4676:3146(ResType) ImageSparseSampleImplicitLod 4672 4673 Bias ConstOffset MinLod 4675 735 4674 + 4677: 7(f16vec4) CompositeExtract 4676 1 + Store 4652(texel) 4677 + 4678: 47(int) CompositeExtract 4676 0 + 4679: 224 Load 226(s2DShadow) + 4680: 167(fvec3) Load 169(c3) + 4681: 52(float) Load 4311(lodClamp) + 4682: 208(ptr) AccessChain 4652(texel) 207 + 4683: 52(float) CompositeExtract 4680 2 + 4684:3182(ResType) ImageSparseSampleDrefImplicitLod 4679 4680 4683 ConstOffset MinLod 722 4681 + 4685:6(float16_t) CompositeExtract 4684 1 + Store 4682 4685 + 4686: 47(int) CompositeExtract 4684 0 + 4687: 224 Load 226(s2DShadow) + 4688:154(f16vec2) Load 156(f16c2) + 4689: 52(float) Load 215(compare) + 4690:6(float16_t) Load 4318(f16lodClamp) + 4691: 208(ptr) AccessChain 4652(texel) 207 + 4692:6(float16_t) Load 137(f16bias) + 4693:3182(ResType) ImageSparseSampleDrefImplicitLod 4687 4688 4689 Bias ConstOffset MinLod 4692 722 4690 + 4694:6(float16_t) CompositeExtract 4693 1 + Store 4691 4694 + 4695: 47(int) CompositeExtract 4693 0 + 4696: 284 Load 286(s2DArray) + 4697: 167(fvec3) Load 169(c3) + 4698: 52(float) Load 4311(lodClamp) + 4699:3146(ResType) ImageSparseSampleImplicitLod 4696 4697 ConstOffset MinLod 722 4698 + 4700: 7(f16vec4) CompositeExtract 4699 1 + Store 4652(texel) 4700 + 4701: 47(int) CompositeExtract 4699 0 + 4702: 284 Load 286(s2DArray) + 4703:175(f16vec3) Load 177(f16c3) + 4704:6(float16_t) Load 4318(f16lodClamp) + 4705:6(float16_t) Load 137(f16bias) + 4706:3146(ResType) ImageSparseSampleImplicitLod 4702 4703 Bias ConstOffset MinLod 4705 722 4704 + 4707: 7(f16vec4) CompositeExtract 4706 1 + Store 4652(texel) 4707 + 4708: 47(int) CompositeExtract 4706 0 + 4709: 337 Load 339(s2DArrayShadow) + 4710: 249(fvec4) Load 251(c4) + 4711: 52(float) Load 4311(lodClamp) + 4712: 208(ptr) AccessChain 4652(texel) 207 + 4713: 52(float) CompositeExtract 4710 3 + 4714:3182(ResType) ImageSparseSampleDrefImplicitLod 4709 4710 4713 ConstOffset MinLod 722 4711 + 4715:6(float16_t) CompositeExtract 4714 1 + Store 4712 4715 + 4716: 47(int) CompositeExtract 4714 0 + 4717: 337 Load 339(s2DArrayShadow) + 4718:175(f16vec3) Load 177(f16c3) + 4719: 52(float) Load 215(compare) + 4720:6(float16_t) Load 4318(f16lodClamp) + 4721: 208(ptr) AccessChain 4652(texel) 207 + 4722:3182(ResType) ImageSparseSampleDrefImplicitLod 4717 4718 4719 ConstOffset MinLod 722 4720 + 4723:6(float16_t) CompositeExtract 4722 1 + Store 4721 4723 + 4724: 47(int) CompositeExtract 4722 0 + 4725: 7(f16vec4) Load 4652(texel) + ReturnValue 4725 FunctionEnd 105(testTextureOffsetClamp(): 7(f16vec4) Function None 8 106: Label - 4684(texel): 64(ptr) Variable Function - Store 4684(texel) 121 - 4685: 123 Load 125(s1D) - 4686: 52(float) Load 128(c1) - 4687: 52(float) Load 4267(lodClamp) - 4688: 7(f16vec4) ImageSampleImplicitLod 4685 4686 ConstOffset MinLod 709 4687 - 4689: 7(f16vec4) Load 4684(texel) - 4690: 7(f16vec4) FAdd 4689 4688 - Store 4684(texel) 4690 - 4691: 123 Load 125(s1D) - 4692:6(float16_t) Load 135(f16c1) - 4693:6(float16_t) Load 4274(f16lodClamp) - 4694:6(float16_t) Load 137(f16bias) - 4695: 7(f16vec4) ImageSampleImplicitLod 4691 4692 Bias ConstOffset MinLod 4694 709 4693 - 4696: 7(f16vec4) Load 4684(texel) - 4697: 7(f16vec4) FAdd 4696 4695 - Store 4684(texel) 4697 - 4698: 143 Load 145(s2D) - 4699: 53(fvec2) Load 148(c2) - 4700: 52(float) Load 4267(lodClamp) - 4701: 7(f16vec4) ImageSampleImplicitLod 4698 4699 ConstOffset MinLod 722 4700 - 4702: 7(f16vec4) Load 4684(texel) - 4703: 7(f16vec4) FAdd 4702 4701 - Store 4684(texel) 4703 - 4704: 143 Load 145(s2D) - 4705:154(f16vec2) Load 156(f16c2) - 4706:6(float16_t) Load 4274(f16lodClamp) - 4707:6(float16_t) Load 137(f16bias) - 4708: 7(f16vec4) ImageSampleImplicitLod 4704 4705 Bias ConstOffset MinLod 4707 722 4706 - 4709: 7(f16vec4) Load 4684(texel) - 4710: 7(f16vec4) FAdd 4709 4708 - Store 4684(texel) 4710 - 4711: 163 Load 165(s3D) - 4712: 167(fvec3) Load 169(c3) - 4713: 52(float) Load 4267(lodClamp) - 4714: 7(f16vec4) ImageSampleImplicitLod 4711 4712 ConstOffset MinLod 735 4713 - 4715: 7(f16vec4) Load 4684(texel) - 4716: 7(f16vec4) FAdd 4715 4714 - Store 4684(texel) 4716 - 4717: 163 Load 165(s3D) - 4718:175(f16vec3) Load 177(f16c3) - 4719:6(float16_t) Load 4274(f16lodClamp) - 4720:6(float16_t) Load 137(f16bias) - 4721: 7(f16vec4) ImageSampleImplicitLod 4717 4718 Bias ConstOffset MinLod 4720 735 4719 - 4722: 7(f16vec4) Load 4684(texel) - 4723: 7(f16vec4) FAdd 4722 4721 - Store 4684(texel) 4723 - 4724: 199 Load 201(s1DShadow) - 4725: 167(fvec3) Load 169(c3) - 4726: 52(float) Load 4267(lodClamp) - 4727: 52(float) CompositeExtract 4725 2 - 4728:6(float16_t) ImageSampleDrefImplicitLod 4724 4725 4727 ConstOffset MinLod 709 4726 - 4729: 208(ptr) AccessChain 4684(texel) 207 - 4730:6(float16_t) Load 4729 - 4731:6(float16_t) FAdd 4730 4728 - 4732: 208(ptr) AccessChain 4684(texel) 207 - Store 4732 4731 - 4733: 199 Load 201(s1DShadow) - 4734:154(f16vec2) Load 156(f16c2) - 4735: 52(float) Load 215(compare) - 4736:6(float16_t) Load 4274(f16lodClamp) - 4737:6(float16_t) Load 137(f16bias) - 4738:6(float16_t) ImageSampleDrefImplicitLod 4733 4734 4735 Bias ConstOffset MinLod 4737 709 4736 - 4739: 208(ptr) AccessChain 4684(texel) 207 - 4740:6(float16_t) Load 4739 - 4741:6(float16_t) FAdd 4740 4738 - 4742: 208(ptr) AccessChain 4684(texel) 207 - Store 4742 4741 - 4743: 224 Load 226(s2DShadow) - 4744: 167(fvec3) Load 169(c3) - 4745: 52(float) Load 4267(lodClamp) - 4746: 52(float) CompositeExtract 4744 2 - 4747:6(float16_t) ImageSampleDrefImplicitLod 4743 4744 4746 ConstOffset MinLod 722 4745 - 4748: 208(ptr) AccessChain 4684(texel) 207 - 4749:6(float16_t) Load 4748 - 4750:6(float16_t) FAdd 4749 4747 - 4751: 208(ptr) AccessChain 4684(texel) 207 - Store 4751 4750 - 4752: 224 Load 226(s2DShadow) - 4753:154(f16vec2) Load 156(f16c2) - 4754: 52(float) Load 215(compare) - 4755:6(float16_t) Load 4274(f16lodClamp) - 4756:6(float16_t) Load 137(f16bias) - 4757:6(float16_t) ImageSampleDrefImplicitLod 4752 4753 4754 Bias ConstOffset MinLod 4756 722 4755 - 4758: 208(ptr) AccessChain 4684(texel) 207 - 4759:6(float16_t) Load 4758 - 4760:6(float16_t) FAdd 4759 4757 - 4761: 208(ptr) AccessChain 4684(texel) 207 - Store 4761 4760 - 4762: 269 Load 271(s1DArray) - 4763: 53(fvec2) Load 148(c2) - 4764: 52(float) Load 4267(lodClamp) - 4765: 7(f16vec4) ImageSampleImplicitLod 4762 4763 ConstOffset MinLod 709 4764 - 4766: 7(f16vec4) Load 4684(texel) + 4728(texel): 64(ptr) Variable Function + Store 4728(texel) 121 + 4729: 123 Load 125(s1D) + 4730: 52(float) Load 128(c1) + 4731: 52(float) Load 4311(lodClamp) + 4732: 7(f16vec4) ImageSampleImplicitLod 4729 4730 ConstOffset MinLod 709 4731 + 4733: 7(f16vec4) Load 4728(texel) + 4734: 7(f16vec4) FAdd 4733 4732 + Store 4728(texel) 4734 + 4735: 123 Load 125(s1D) + 4736:6(float16_t) Load 135(f16c1) + 4737:6(float16_t) Load 4318(f16lodClamp) + 4738:6(float16_t) Load 137(f16bias) + 4739: 7(f16vec4) ImageSampleImplicitLod 4735 4736 Bias ConstOffset MinLod 4738 709 4737 + 4740: 7(f16vec4) Load 4728(texel) + 4741: 7(f16vec4) FAdd 4740 4739 + Store 4728(texel) 4741 + 4742: 143 Load 145(s2D) + 4743: 53(fvec2) Load 148(c2) + 4744: 52(float) Load 4311(lodClamp) + 4745: 7(f16vec4) ImageSampleImplicitLod 4742 4743 ConstOffset MinLod 722 4744 + 4746: 7(f16vec4) Load 4728(texel) + 4747: 7(f16vec4) FAdd 4746 4745 + Store 4728(texel) 4747 + 4748: 143 Load 145(s2D) + 4749:154(f16vec2) Load 156(f16c2) + 4750:6(float16_t) Load 4318(f16lodClamp) + 4751:6(float16_t) Load 137(f16bias) + 4752: 7(f16vec4) ImageSampleImplicitLod 4748 4749 Bias ConstOffset MinLod 4751 722 4750 + 4753: 7(f16vec4) Load 4728(texel) + 4754: 7(f16vec4) FAdd 4753 4752 + Store 4728(texel) 4754 + 4755: 163 Load 165(s3D) + 4756: 167(fvec3) Load 169(c3) + 4757: 52(float) Load 4311(lodClamp) + 4758: 7(f16vec4) ImageSampleImplicitLod 4755 4756 ConstOffset MinLod 735 4757 + 4759: 7(f16vec4) Load 4728(texel) + 4760: 7(f16vec4) FAdd 4759 4758 + Store 4728(texel) 4760 + 4761: 163 Load 165(s3D) + 4762:175(f16vec3) Load 177(f16c3) + 4763:6(float16_t) Load 4318(f16lodClamp) + 4764:6(float16_t) Load 137(f16bias) + 4765: 7(f16vec4) ImageSampleImplicitLod 4761 4762 Bias ConstOffset MinLod 4764 735 4763 + 4766: 7(f16vec4) Load 4728(texel) 4767: 7(f16vec4) FAdd 4766 4765 - Store 4684(texel) 4767 - 4768: 269 Load 271(s1DArray) - 4769:154(f16vec2) Load 156(f16c2) - 4770:6(float16_t) Load 4274(f16lodClamp) - 4771:6(float16_t) Load 137(f16bias) - 4772: 7(f16vec4) ImageSampleImplicitLod 4768 4769 Bias ConstOffset MinLod 4771 709 4770 - 4773: 7(f16vec4) Load 4684(texel) - 4774: 7(f16vec4) FAdd 4773 4772 - Store 4684(texel) 4774 - 4775: 284 Load 286(s2DArray) - 4776: 167(fvec3) Load 169(c3) - 4777: 52(float) Load 4267(lodClamp) - 4778: 7(f16vec4) ImageSampleImplicitLod 4775 4776 ConstOffset MinLod 722 4777 - 4779: 7(f16vec4) Load 4684(texel) - 4780: 7(f16vec4) FAdd 4779 4778 - Store 4684(texel) 4780 - 4781: 284 Load 286(s2DArray) - 4782:175(f16vec3) Load 177(f16c3) - 4783:6(float16_t) Load 4274(f16lodClamp) - 4784:6(float16_t) Load 137(f16bias) - 4785: 7(f16vec4) ImageSampleImplicitLod 4781 4782 Bias ConstOffset MinLod 4784 722 4783 - 4786: 7(f16vec4) Load 4684(texel) - 4787: 7(f16vec4) FAdd 4786 4785 - Store 4684(texel) 4787 - 4788: 316 Load 318(s1DArrayShadow) - 4789: 167(fvec3) Load 169(c3) - 4790: 52(float) Load 4267(lodClamp) - 4791: 52(float) CompositeExtract 4789 2 - 4792:6(float16_t) ImageSampleDrefImplicitLod 4788 4789 4791 ConstOffset MinLod 709 4790 - 4793: 208(ptr) AccessChain 4684(texel) 207 - 4794:6(float16_t) Load 4793 - 4795:6(float16_t) FAdd 4794 4792 - 4796: 208(ptr) AccessChain 4684(texel) 207 - Store 4796 4795 - 4797: 316 Load 318(s1DArrayShadow) - 4798:154(f16vec2) Load 156(f16c2) - 4799: 52(float) Load 215(compare) - 4800:6(float16_t) Load 4274(f16lodClamp) - 4801:6(float16_t) Load 137(f16bias) - 4802:6(float16_t) ImageSampleDrefImplicitLod 4797 4798 4799 Bias ConstOffset MinLod 4801 709 4800 - 4803: 208(ptr) AccessChain 4684(texel) 207 - 4804:6(float16_t) Load 4803 - 4805:6(float16_t) FAdd 4804 4802 - 4806: 208(ptr) AccessChain 4684(texel) 207 - Store 4806 4805 - 4807: 337 Load 339(s2DArrayShadow) - 4808: 249(fvec4) Load 251(c4) - 4809: 52(float) Load 4267(lodClamp) - 4810: 52(float) CompositeExtract 4808 3 - 4811:6(float16_t) ImageSampleDrefImplicitLod 4807 4808 4810 ConstOffset MinLod 722 4809 - 4812: 208(ptr) AccessChain 4684(texel) 207 - 4813:6(float16_t) Load 4812 - 4814:6(float16_t) FAdd 4813 4811 - 4815: 208(ptr) AccessChain 4684(texel) 207 - Store 4815 4814 - 4816: 337 Load 339(s2DArrayShadow) - 4817:175(f16vec3) Load 177(f16c3) - 4818: 52(float) Load 215(compare) - 4819:6(float16_t) Load 4274(f16lodClamp) - 4820:6(float16_t) ImageSampleDrefImplicitLod 4816 4817 4818 ConstOffset MinLod 722 4819 - 4821: 208(ptr) AccessChain 4684(texel) 207 - 4822:6(float16_t) Load 4821 - 4823:6(float16_t) FAdd 4822 4820 - 4824: 208(ptr) AccessChain 4684(texel) 207 - Store 4824 4823 - 4825: 7(f16vec4) Load 4684(texel) - ReturnValue 4825 + Store 4728(texel) 4767 + 4768: 199 Load 201(s1DShadow) + 4769: 167(fvec3) Load 169(c3) + 4770: 52(float) Load 4311(lodClamp) + 4771: 52(float) CompositeExtract 4769 2 + 4772:6(float16_t) ImageSampleDrefImplicitLod 4768 4769 4771 ConstOffset MinLod 709 4770 + 4773: 208(ptr) AccessChain 4728(texel) 207 + 4774:6(float16_t) Load 4773 + 4775:6(float16_t) FAdd 4774 4772 + 4776: 208(ptr) AccessChain 4728(texel) 207 + Store 4776 4775 + 4777: 199 Load 201(s1DShadow) + 4778:154(f16vec2) Load 156(f16c2) + 4779: 52(float) Load 215(compare) + 4780:6(float16_t) Load 4318(f16lodClamp) + 4781:6(float16_t) Load 137(f16bias) + 4782:6(float16_t) ImageSampleDrefImplicitLod 4777 4778 4779 Bias ConstOffset MinLod 4781 709 4780 + 4783: 208(ptr) AccessChain 4728(texel) 207 + 4784:6(float16_t) Load 4783 + 4785:6(float16_t) FAdd 4784 4782 + 4786: 208(ptr) AccessChain 4728(texel) 207 + Store 4786 4785 + 4787: 224 Load 226(s2DShadow) + 4788: 167(fvec3) Load 169(c3) + 4789: 52(float) Load 4311(lodClamp) + 4790: 52(float) CompositeExtract 4788 2 + 4791:6(float16_t) ImageSampleDrefImplicitLod 4787 4788 4790 ConstOffset MinLod 722 4789 + 4792: 208(ptr) AccessChain 4728(texel) 207 + 4793:6(float16_t) Load 4792 + 4794:6(float16_t) FAdd 4793 4791 + 4795: 208(ptr) AccessChain 4728(texel) 207 + Store 4795 4794 + 4796: 224 Load 226(s2DShadow) + 4797:154(f16vec2) Load 156(f16c2) + 4798: 52(float) Load 215(compare) + 4799:6(float16_t) Load 4318(f16lodClamp) + 4800:6(float16_t) Load 137(f16bias) + 4801:6(float16_t) ImageSampleDrefImplicitLod 4796 4797 4798 Bias ConstOffset MinLod 4800 722 4799 + 4802: 208(ptr) AccessChain 4728(texel) 207 + 4803:6(float16_t) Load 4802 + 4804:6(float16_t) FAdd 4803 4801 + 4805: 208(ptr) AccessChain 4728(texel) 207 + Store 4805 4804 + 4806: 269 Load 271(s1DArray) + 4807: 53(fvec2) Load 148(c2) + 4808: 52(float) Load 4311(lodClamp) + 4809: 7(f16vec4) ImageSampleImplicitLod 4806 4807 ConstOffset MinLod 709 4808 + 4810: 7(f16vec4) Load 4728(texel) + 4811: 7(f16vec4) FAdd 4810 4809 + Store 4728(texel) 4811 + 4812: 269 Load 271(s1DArray) + 4813:154(f16vec2) Load 156(f16c2) + 4814:6(float16_t) Load 4318(f16lodClamp) + 4815:6(float16_t) Load 137(f16bias) + 4816: 7(f16vec4) ImageSampleImplicitLod 4812 4813 Bias ConstOffset MinLod 4815 709 4814 + 4817: 7(f16vec4) Load 4728(texel) + 4818: 7(f16vec4) FAdd 4817 4816 + Store 4728(texel) 4818 + 4819: 284 Load 286(s2DArray) + 4820: 167(fvec3) Load 169(c3) + 4821: 52(float) Load 4311(lodClamp) + 4822: 7(f16vec4) ImageSampleImplicitLod 4819 4820 ConstOffset MinLod 722 4821 + 4823: 7(f16vec4) Load 4728(texel) + 4824: 7(f16vec4) FAdd 4823 4822 + Store 4728(texel) 4824 + 4825: 284 Load 286(s2DArray) + 4826:175(f16vec3) Load 177(f16c3) + 4827:6(float16_t) Load 4318(f16lodClamp) + 4828:6(float16_t) Load 137(f16bias) + 4829: 7(f16vec4) ImageSampleImplicitLod 4825 4826 Bias ConstOffset MinLod 4828 722 4827 + 4830: 7(f16vec4) Load 4728(texel) + 4831: 7(f16vec4) FAdd 4830 4829 + Store 4728(texel) 4831 + 4832: 316 Load 318(s1DArrayShadow) + 4833: 167(fvec3) Load 169(c3) + 4834: 52(float) Load 4311(lodClamp) + 4835: 52(float) CompositeExtract 4833 2 + 4836:6(float16_t) ImageSampleDrefImplicitLod 4832 4833 4835 ConstOffset MinLod 709 4834 + 4837: 208(ptr) AccessChain 4728(texel) 207 + 4838:6(float16_t) Load 4837 + 4839:6(float16_t) FAdd 4838 4836 + 4840: 208(ptr) AccessChain 4728(texel) 207 + Store 4840 4839 + 4841: 316 Load 318(s1DArrayShadow) + 4842:154(f16vec2) Load 156(f16c2) + 4843: 52(float) Load 215(compare) + 4844:6(float16_t) Load 4318(f16lodClamp) + 4845:6(float16_t) Load 137(f16bias) + 4846:6(float16_t) ImageSampleDrefImplicitLod 4841 4842 4843 Bias ConstOffset MinLod 4845 709 4844 + 4847: 208(ptr) AccessChain 4728(texel) 207 + 4848:6(float16_t) Load 4847 + 4849:6(float16_t) FAdd 4848 4846 + 4850: 208(ptr) AccessChain 4728(texel) 207 + Store 4850 4849 + 4851: 337 Load 339(s2DArrayShadow) + 4852: 249(fvec4) Load 251(c4) + 4853: 52(float) Load 4311(lodClamp) + 4854: 52(float) CompositeExtract 4852 3 + 4855:6(float16_t) ImageSampleDrefImplicitLod 4851 4852 4854 ConstOffset MinLod 722 4853 + 4856: 208(ptr) AccessChain 4728(texel) 207 + 4857:6(float16_t) Load 4856 + 4858:6(float16_t) FAdd 4857 4855 + 4859: 208(ptr) AccessChain 4728(texel) 207 + Store 4859 4858 + 4860: 337 Load 339(s2DArrayShadow) + 4861:175(f16vec3) Load 177(f16c3) + 4862: 52(float) Load 215(compare) + 4863:6(float16_t) Load 4318(f16lodClamp) + 4864:6(float16_t) ImageSampleDrefImplicitLod 4860 4861 4862 ConstOffset MinLod 722 4863 + 4865: 208(ptr) AccessChain 4728(texel) 207 + 4866:6(float16_t) Load 4865 + 4867:6(float16_t) FAdd 4866 4864 + 4868: 208(ptr) AccessChain 4728(texel) 207 + Store 4868 4867 + 4869: 7(f16vec4) Load 4728(texel) + ReturnValue 4869 FunctionEnd 107(testSparseTextureGradClamp(): 7(f16vec4) Function None 8 108: Label - 4828(texel): 64(ptr) Variable Function - Store 4828(texel) 121 - 4829: 143 Load 145(s2D) - 4830: 53(fvec2) Load 148(c2) - 4831: 53(fvec2) Load 1409(dPdxy2) - 4832: 53(fvec2) Load 1409(dPdxy2) - 4833: 52(float) Load 4267(lodClamp) - 4834:3102(ResType) ImageSparseSampleExplicitLod 4829 4830 Grad MinLod 4831 4832 4833 - 4835: 7(f16vec4) CompositeExtract 4834 1 - Store 4828(texel) 4835 - 4836: 47(int) CompositeExtract 4834 0 - 4837: 143 Load 145(s2D) - 4838:154(f16vec2) Load 156(f16c2) - 4839:154(f16vec2) Load 1417(f16dPdxy2) - 4840:154(f16vec2) Load 1417(f16dPdxy2) - 4841:6(float16_t) Load 4274(f16lodClamp) - 4842:3102(ResType) ImageSparseSampleExplicitLod 4837 4838 Grad MinLod 4839 4840 4841 - 4843: 7(f16vec4) CompositeExtract 4842 1 - Store 4828(texel) 4843 - 4844: 47(int) CompositeExtract 4842 0 - 4845: 163 Load 165(s3D) - 4846: 167(fvec3) Load 169(c3) - 4847: 167(fvec3) Load 1425(dPdxy3) - 4848: 167(fvec3) Load 1425(dPdxy3) - 4849: 52(float) Load 4267(lodClamp) - 4850:3102(ResType) ImageSparseSampleExplicitLod 4845 4846 Grad MinLod 4847 4848 4849 - 4851: 7(f16vec4) CompositeExtract 4850 1 - Store 4828(texel) 4851 - 4852: 47(int) CompositeExtract 4850 0 - 4853: 163 Load 165(s3D) - 4854:175(f16vec3) Load 177(f16c3) - 4855:175(f16vec3) Load 1433(f16dPdxy3) - 4856:175(f16vec3) Load 1433(f16dPdxy3) - 4857:6(float16_t) Load 4274(f16lodClamp) - 4858:3102(ResType) ImageSparseSampleExplicitLod 4853 4854 Grad MinLod 4855 4856 4857 - 4859: 7(f16vec4) CompositeExtract 4858 1 - Store 4828(texel) 4859 - 4860: 47(int) CompositeExtract 4858 0 - 4861: 184 Load 186(sCube) - 4862: 167(fvec3) Load 169(c3) - 4863: 167(fvec3) Load 1425(dPdxy3) - 4864: 167(fvec3) Load 1425(dPdxy3) - 4865: 52(float) Load 4267(lodClamp) - 4866:3102(ResType) ImageSparseSampleExplicitLod 4861 4862 Grad MinLod 4863 4864 4865 - 4867: 7(f16vec4) CompositeExtract 4866 1 - Store 4828(texel) 4867 - 4868: 47(int) CompositeExtract 4866 0 - 4869: 184 Load 186(sCube) - 4870:175(f16vec3) Load 177(f16c3) - 4871:175(f16vec3) Load 1433(f16dPdxy3) - 4872:175(f16vec3) Load 1433(f16dPdxy3) - 4873:6(float16_t) Load 4274(f16lodClamp) - 4874:3102(ResType) ImageSparseSampleExplicitLod 4869 4870 Grad MinLod 4871 4872 4873 - 4875: 7(f16vec4) CompositeExtract 4874 1 - Store 4828(texel) 4875 - 4876: 47(int) CompositeExtract 4874 0 - 4877: 224 Load 226(s2DShadow) - 4878: 167(fvec3) Load 169(c3) - 4879: 53(fvec2) Load 1409(dPdxy2) - 4880: 53(fvec2) Load 1409(dPdxy2) - 4881: 52(float) Load 4267(lodClamp) - 4882: 208(ptr) AccessChain 4828(texel) 207 - 4883: 52(float) CompositeExtract 4878 2 - 4884:3138(ResType) ImageSparseSampleDrefExplicitLod 4877 4878 4883 Grad MinLod 4879 4880 4881 - 4885:6(float16_t) CompositeExtract 4884 1 - Store 4882 4885 - 4886: 47(int) CompositeExtract 4884 0 - 4887: 224 Load 226(s2DShadow) - 4888:154(f16vec2) Load 156(f16c2) - 4889: 52(float) Load 215(compare) - 4890:154(f16vec2) Load 1417(f16dPdxy2) - 4891:154(f16vec2) Load 1417(f16dPdxy2) - 4892:6(float16_t) Load 4274(f16lodClamp) - 4893: 208(ptr) AccessChain 4828(texel) 207 - 4894:3138(ResType) ImageSparseSampleDrefExplicitLod 4887 4888 4889 Grad MinLod 4890 4891 4892 - 4895:6(float16_t) CompositeExtract 4894 1 - Store 4893 4895 + 4872(texel): 64(ptr) Variable Function + Store 4872(texel) 121 + 4873: 143 Load 145(s2D) + 4874: 53(fvec2) Load 148(c2) + 4875: 53(fvec2) Load 1409(dPdxy2) + 4876: 53(fvec2) Load 1409(dPdxy2) + 4877: 52(float) Load 4311(lodClamp) + 4878:3146(ResType) ImageSparseSampleExplicitLod 4873 4874 Grad MinLod 4875 4876 4877 + 4879: 7(f16vec4) CompositeExtract 4878 1 + Store 4872(texel) 4879 + 4880: 47(int) CompositeExtract 4878 0 + 4881: 143 Load 145(s2D) + 4882:154(f16vec2) Load 156(f16c2) + 4883:154(f16vec2) Load 1417(f16dPdxy2) + 4884:154(f16vec2) Load 1417(f16dPdxy2) + 4885:6(float16_t) Load 4318(f16lodClamp) + 4886:3146(ResType) ImageSparseSampleExplicitLod 4881 4882 Grad MinLod 4883 4884 4885 + 4887: 7(f16vec4) CompositeExtract 4886 1 + Store 4872(texel) 4887 + 4888: 47(int) CompositeExtract 4886 0 + 4889: 163 Load 165(s3D) + 4890: 167(fvec3) Load 169(c3) + 4891: 167(fvec3) Load 1425(dPdxy3) + 4892: 167(fvec3) Load 1425(dPdxy3) + 4893: 52(float) Load 4311(lodClamp) + 4894:3146(ResType) ImageSparseSampleExplicitLod 4889 4890 Grad MinLod 4891 4892 4893 + 4895: 7(f16vec4) CompositeExtract 4894 1 + Store 4872(texel) 4895 4896: 47(int) CompositeExtract 4894 0 - 4897: 245 Load 247(sCubeShadow) - 4898: 249(fvec4) Load 251(c4) - 4899: 167(fvec3) Load 1425(dPdxy3) - 4900: 167(fvec3) Load 1425(dPdxy3) - 4901: 52(float) Load 4267(lodClamp) - 4902: 208(ptr) AccessChain 4828(texel) 207 - 4903: 52(float) CompositeExtract 4898 3 - 4904:3138(ResType) ImageSparseSampleDrefExplicitLod 4897 4898 4903 Grad MinLod 4899 4900 4901 - 4905:6(float16_t) CompositeExtract 4904 1 - Store 4902 4905 - 4906: 47(int) CompositeExtract 4904 0 - 4907: 245 Load 247(sCubeShadow) - 4908:175(f16vec3) Load 177(f16c3) - 4909: 52(float) Load 215(compare) - 4910:175(f16vec3) Load 1433(f16dPdxy3) - 4911:175(f16vec3) Load 1433(f16dPdxy3) - 4912:6(float16_t) Load 4274(f16lodClamp) - 4913: 208(ptr) AccessChain 4828(texel) 207 - 4914:3138(ResType) ImageSparseSampleDrefExplicitLod 4907 4908 4909 Grad MinLod 4910 4911 4912 - 4915:6(float16_t) CompositeExtract 4914 1 - Store 4913 4915 - 4916: 47(int) CompositeExtract 4914 0 - 4917: 284 Load 286(s2DArray) - 4918: 167(fvec3) Load 169(c3) - 4919: 53(fvec2) Load 1409(dPdxy2) - 4920: 53(fvec2) Load 1409(dPdxy2) - 4921: 52(float) Load 4267(lodClamp) - 4922:3102(ResType) ImageSparseSampleExplicitLod 4917 4918 Grad MinLod 4919 4920 4921 - 4923: 7(f16vec4) CompositeExtract 4922 1 - Store 4828(texel) 4923 - 4924: 47(int) CompositeExtract 4922 0 - 4925: 284 Load 286(s2DArray) - 4926:175(f16vec3) Load 177(f16c3) - 4927:154(f16vec2) Load 1417(f16dPdxy2) - 4928:154(f16vec2) Load 1417(f16dPdxy2) - 4929:6(float16_t) Load 4274(f16lodClamp) - 4930:3102(ResType) ImageSparseSampleExplicitLod 4925 4926 Grad MinLod 4927 4928 4929 - 4931: 7(f16vec4) CompositeExtract 4930 1 - Store 4828(texel) 4931 - 4932: 47(int) CompositeExtract 4930 0 - 4933: 337 Load 339(s2DArrayShadow) - 4934: 249(fvec4) Load 251(c4) - 4935: 53(fvec2) Load 1409(dPdxy2) - 4936: 53(fvec2) Load 1409(dPdxy2) - 4937: 52(float) Load 4267(lodClamp) - 4938: 208(ptr) AccessChain 4828(texel) 207 - 4939: 52(float) CompositeExtract 4934 3 - 4940:3138(ResType) ImageSparseSampleDrefExplicitLod 4933 4934 4939 Grad MinLod 4935 4936 4937 - 4941:6(float16_t) CompositeExtract 4940 1 - Store 4938 4941 - 4942: 47(int) CompositeExtract 4940 0 - 4943: 337 Load 339(s2DArrayShadow) - 4944:175(f16vec3) Load 177(f16c3) - 4945: 52(float) Load 215(compare) - 4946:154(f16vec2) Load 1417(f16dPdxy2) - 4947:154(f16vec2) Load 1417(f16dPdxy2) - 4948:6(float16_t) Load 4274(f16lodClamp) - 4949: 208(ptr) AccessChain 4828(texel) 207 - 4950:3138(ResType) ImageSparseSampleDrefExplicitLod 4943 4944 4945 Grad MinLod 4946 4947 4948 - 4951:6(float16_t) CompositeExtract 4950 1 - Store 4949 4951 - 4952: 47(int) CompositeExtract 4950 0 - 4953: 299 Load 301(sCubeArray) - 4954: 249(fvec4) Load 251(c4) - 4955: 167(fvec3) Load 1425(dPdxy3) - 4956: 167(fvec3) Load 1425(dPdxy3) - 4957: 52(float) Load 4267(lodClamp) - 4958:3102(ResType) ImageSparseSampleExplicitLod 4953 4954 Grad MinLod 4955 4956 4957 - 4959: 7(f16vec4) CompositeExtract 4958 1 - Store 4828(texel) 4959 + 4897: 163 Load 165(s3D) + 4898:175(f16vec3) Load 177(f16c3) + 4899:175(f16vec3) Load 1433(f16dPdxy3) + 4900:175(f16vec3) Load 1433(f16dPdxy3) + 4901:6(float16_t) Load 4318(f16lodClamp) + 4902:3146(ResType) ImageSparseSampleExplicitLod 4897 4898 Grad MinLod 4899 4900 4901 + 4903: 7(f16vec4) CompositeExtract 4902 1 + Store 4872(texel) 4903 + 4904: 47(int) CompositeExtract 4902 0 + 4905: 184 Load 186(sCube) + 4906: 167(fvec3) Load 169(c3) + 4907: 167(fvec3) Load 1425(dPdxy3) + 4908: 167(fvec3) Load 1425(dPdxy3) + 4909: 52(float) Load 4311(lodClamp) + 4910:3146(ResType) ImageSparseSampleExplicitLod 4905 4906 Grad MinLod 4907 4908 4909 + 4911: 7(f16vec4) CompositeExtract 4910 1 + Store 4872(texel) 4911 + 4912: 47(int) CompositeExtract 4910 0 + 4913: 184 Load 186(sCube) + 4914:175(f16vec3) Load 177(f16c3) + 4915:175(f16vec3) Load 1433(f16dPdxy3) + 4916:175(f16vec3) Load 1433(f16dPdxy3) + 4917:6(float16_t) Load 4318(f16lodClamp) + 4918:3146(ResType) ImageSparseSampleExplicitLod 4913 4914 Grad MinLod 4915 4916 4917 + 4919: 7(f16vec4) CompositeExtract 4918 1 + Store 4872(texel) 4919 + 4920: 47(int) CompositeExtract 4918 0 + 4921: 224 Load 226(s2DShadow) + 4922: 167(fvec3) Load 169(c3) + 4923: 53(fvec2) Load 1409(dPdxy2) + 4924: 53(fvec2) Load 1409(dPdxy2) + 4925: 52(float) Load 4311(lodClamp) + 4926: 208(ptr) AccessChain 4872(texel) 207 + 4927: 52(float) CompositeExtract 4922 2 + 4928:3182(ResType) ImageSparseSampleDrefExplicitLod 4921 4922 4927 Grad MinLod 4923 4924 4925 + 4929:6(float16_t) CompositeExtract 4928 1 + Store 4926 4929 + 4930: 47(int) CompositeExtract 4928 0 + 4931: 224 Load 226(s2DShadow) + 4932:154(f16vec2) Load 156(f16c2) + 4933: 52(float) Load 215(compare) + 4934:154(f16vec2) Load 1417(f16dPdxy2) + 4935:154(f16vec2) Load 1417(f16dPdxy2) + 4936:6(float16_t) Load 4318(f16lodClamp) + 4937: 208(ptr) AccessChain 4872(texel) 207 + 4938:3182(ResType) ImageSparseSampleDrefExplicitLod 4931 4932 4933 Grad MinLod 4934 4935 4936 + 4939:6(float16_t) CompositeExtract 4938 1 + Store 4937 4939 + 4940: 47(int) CompositeExtract 4938 0 + 4941: 245 Load 247(sCubeShadow) + 4942: 249(fvec4) Load 251(c4) + 4943: 167(fvec3) Load 1425(dPdxy3) + 4944: 167(fvec3) Load 1425(dPdxy3) + 4945: 52(float) Load 4311(lodClamp) + 4946: 208(ptr) AccessChain 4872(texel) 207 + 4947: 52(float) CompositeExtract 4942 3 + 4948:3182(ResType) ImageSparseSampleDrefExplicitLod 4941 4942 4947 Grad MinLod 4943 4944 4945 + 4949:6(float16_t) CompositeExtract 4948 1 + Store 4946 4949 + 4950: 47(int) CompositeExtract 4948 0 + 4951: 245 Load 247(sCubeShadow) + 4952:175(f16vec3) Load 177(f16c3) + 4953: 52(float) Load 215(compare) + 4954:175(f16vec3) Load 1433(f16dPdxy3) + 4955:175(f16vec3) Load 1433(f16dPdxy3) + 4956:6(float16_t) Load 4318(f16lodClamp) + 4957: 208(ptr) AccessChain 4872(texel) 207 + 4958:3182(ResType) ImageSparseSampleDrefExplicitLod 4951 4952 4953 Grad MinLod 4954 4955 4956 + 4959:6(float16_t) CompositeExtract 4958 1 + Store 4957 4959 4960: 47(int) CompositeExtract 4958 0 - 4961: 299 Load 301(sCubeArray) - 4962: 7(f16vec4) Load 309(f16c4) - 4963:175(f16vec3) Load 1433(f16dPdxy3) - 4964:175(f16vec3) Load 1433(f16dPdxy3) - 4965:6(float16_t) Load 4274(f16lodClamp) - 4966:3102(ResType) ImageSparseSampleExplicitLod 4961 4962 Grad MinLod 4963 4964 4965 + 4961: 284 Load 286(s2DArray) + 4962: 167(fvec3) Load 169(c3) + 4963: 53(fvec2) Load 1409(dPdxy2) + 4964: 53(fvec2) Load 1409(dPdxy2) + 4965: 52(float) Load 4311(lodClamp) + 4966:3146(ResType) ImageSparseSampleExplicitLod 4961 4962 Grad MinLod 4963 4964 4965 4967: 7(f16vec4) CompositeExtract 4966 1 - Store 4828(texel) 4967 + Store 4872(texel) 4967 4968: 47(int) CompositeExtract 4966 0 - 4969: 7(f16vec4) Load 4828(texel) - ReturnValue 4969 + 4969: 284 Load 286(s2DArray) + 4970:175(f16vec3) Load 177(f16c3) + 4971:154(f16vec2) Load 1417(f16dPdxy2) + 4972:154(f16vec2) Load 1417(f16dPdxy2) + 4973:6(float16_t) Load 4318(f16lodClamp) + 4974:3146(ResType) ImageSparseSampleExplicitLod 4969 4970 Grad MinLod 4971 4972 4973 + 4975: 7(f16vec4) CompositeExtract 4974 1 + Store 4872(texel) 4975 + 4976: 47(int) CompositeExtract 4974 0 + 4977: 337 Load 339(s2DArrayShadow) + 4978: 249(fvec4) Load 251(c4) + 4979: 53(fvec2) Load 1409(dPdxy2) + 4980: 53(fvec2) Load 1409(dPdxy2) + 4981: 52(float) Load 4311(lodClamp) + 4982: 208(ptr) AccessChain 4872(texel) 207 + 4983: 52(float) CompositeExtract 4978 3 + 4984:3182(ResType) ImageSparseSampleDrefExplicitLod 4977 4978 4983 Grad MinLod 4979 4980 4981 + 4985:6(float16_t) CompositeExtract 4984 1 + Store 4982 4985 + 4986: 47(int) CompositeExtract 4984 0 + 4987: 337 Load 339(s2DArrayShadow) + 4988:175(f16vec3) Load 177(f16c3) + 4989: 52(float) Load 215(compare) + 4990:154(f16vec2) Load 1417(f16dPdxy2) + 4991:154(f16vec2) Load 1417(f16dPdxy2) + 4992:6(float16_t) Load 4318(f16lodClamp) + 4993: 208(ptr) AccessChain 4872(texel) 207 + 4994:3182(ResType) ImageSparseSampleDrefExplicitLod 4987 4988 4989 Grad MinLod 4990 4991 4992 + 4995:6(float16_t) CompositeExtract 4994 1 + Store 4993 4995 + 4996: 47(int) CompositeExtract 4994 0 + 4997: 299 Load 301(sCubeArray) + 4998: 249(fvec4) Load 251(c4) + 4999: 167(fvec3) Load 1425(dPdxy3) + 5000: 167(fvec3) Load 1425(dPdxy3) + 5001: 52(float) Load 4311(lodClamp) + 5002:3146(ResType) ImageSparseSampleExplicitLod 4997 4998 Grad MinLod 4999 5000 5001 + 5003: 7(f16vec4) CompositeExtract 5002 1 + Store 4872(texel) 5003 + 5004: 47(int) CompositeExtract 5002 0 + 5005: 299 Load 301(sCubeArray) + 5006: 7(f16vec4) Load 309(f16c4) + 5007:175(f16vec3) Load 1433(f16dPdxy3) + 5008:175(f16vec3) Load 1433(f16dPdxy3) + 5009:6(float16_t) Load 4318(f16lodClamp) + 5010:3146(ResType) ImageSparseSampleExplicitLod 5005 5006 Grad MinLod 5007 5008 5009 + 5011: 7(f16vec4) CompositeExtract 5010 1 + Store 4872(texel) 5011 + 5012: 47(int) CompositeExtract 5010 0 + 5013: 7(f16vec4) Load 4872(texel) + ReturnValue 5013 FunctionEnd 109(testTextureGradClamp(): 7(f16vec4) Function None 8 110: Label - 4972(texel): 64(ptr) Variable Function - Store 4972(texel) 121 - 4973: 123 Load 125(s1D) - 4974: 52(float) Load 128(c1) - 4975: 52(float) Load 1393(dPdxy1) - 4976: 52(float) Load 1393(dPdxy1) - 4977: 52(float) Load 4267(lodClamp) - 4978: 7(f16vec4) ImageSampleExplicitLod 4973 4974 Grad MinLod 4975 4976 4977 - 4979: 7(f16vec4) Load 4972(texel) - 4980: 7(f16vec4) FAdd 4979 4978 - Store 4972(texel) 4980 - 4981: 123 Load 125(s1D) - 4982:6(float16_t) Load 135(f16c1) - 4983:6(float16_t) Load 1401(f16dPdxy1) - 4984:6(float16_t) Load 1401(f16dPdxy1) - 4985:6(float16_t) Load 4274(f16lodClamp) - 4986: 7(f16vec4) ImageSampleExplicitLod 4981 4982 Grad MinLod 4983 4984 4985 - 4987: 7(f16vec4) Load 4972(texel) - 4988: 7(f16vec4) FAdd 4987 4986 - Store 4972(texel) 4988 - 4989: 143 Load 145(s2D) - 4990: 53(fvec2) Load 148(c2) - 4991: 53(fvec2) Load 1409(dPdxy2) - 4992: 53(fvec2) Load 1409(dPdxy2) - 4993: 52(float) Load 4267(lodClamp) - 4994: 7(f16vec4) ImageSampleExplicitLod 4989 4990 Grad MinLod 4991 4992 4993 - 4995: 7(f16vec4) Load 4972(texel) - 4996: 7(f16vec4) FAdd 4995 4994 - Store 4972(texel) 4996 - 4997: 143 Load 145(s2D) - 4998:154(f16vec2) Load 156(f16c2) - 4999:154(f16vec2) Load 1417(f16dPdxy2) - 5000:154(f16vec2) Load 1417(f16dPdxy2) - 5001:6(float16_t) Load 4274(f16lodClamp) - 5002: 7(f16vec4) ImageSampleExplicitLod 4997 4998 Grad MinLod 4999 5000 5001 - 5003: 7(f16vec4) Load 4972(texel) - 5004: 7(f16vec4) FAdd 5003 5002 - Store 4972(texel) 5004 - 5005: 163 Load 165(s3D) - 5006: 167(fvec3) Load 169(c3) - 5007: 167(fvec3) Load 1425(dPdxy3) - 5008: 167(fvec3) Load 1425(dPdxy3) - 5009: 52(float) Load 4267(lodClamp) - 5010: 7(f16vec4) ImageSampleExplicitLod 5005 5006 Grad MinLod 5007 5008 5009 - 5011: 7(f16vec4) Load 4972(texel) - 5012: 7(f16vec4) FAdd 5011 5010 - Store 4972(texel) 5012 - 5013: 163 Load 165(s3D) - 5014:175(f16vec3) Load 177(f16c3) - 5015:175(f16vec3) Load 1433(f16dPdxy3) - 5016:175(f16vec3) Load 1433(f16dPdxy3) - 5017:6(float16_t) Load 4274(f16lodClamp) - 5018: 7(f16vec4) ImageSampleExplicitLod 5013 5014 Grad MinLod 5015 5016 5017 - 5019: 7(f16vec4) Load 4972(texel) - 5020: 7(f16vec4) FAdd 5019 5018 - Store 4972(texel) 5020 - 5021: 184 Load 186(sCube) - 5022: 167(fvec3) Load 169(c3) - 5023: 167(fvec3) Load 1425(dPdxy3) - 5024: 167(fvec3) Load 1425(dPdxy3) - 5025: 52(float) Load 4267(lodClamp) - 5026: 7(f16vec4) ImageSampleExplicitLod 5021 5022 Grad MinLod 5023 5024 5025 - 5027: 7(f16vec4) Load 4972(texel) - 5028: 7(f16vec4) FAdd 5027 5026 - Store 4972(texel) 5028 - 5029: 184 Load 186(sCube) - 5030:175(f16vec3) Load 177(f16c3) - 5031:175(f16vec3) Load 1433(f16dPdxy3) - 5032:175(f16vec3) Load 1433(f16dPdxy3) - 5033:6(float16_t) Load 4274(f16lodClamp) - 5034: 7(f16vec4) ImageSampleExplicitLod 5029 5030 Grad MinLod 5031 5032 5033 - 5035: 7(f16vec4) Load 4972(texel) - 5036: 7(f16vec4) FAdd 5035 5034 - Store 4972(texel) 5036 - 5037: 199 Load 201(s1DShadow) - 5038: 167(fvec3) Load 169(c3) - 5039: 52(float) Load 1393(dPdxy1) - 5040: 52(float) Load 1393(dPdxy1) - 5041: 52(float) Load 4267(lodClamp) - 5042: 52(float) CompositeExtract 5038 2 - 5043:6(float16_t) ImageSampleDrefExplicitLod 5037 5038 5042 Grad MinLod 5039 5040 5041 - 5044: 208(ptr) AccessChain 4972(texel) 207 - 5045:6(float16_t) Load 5044 - 5046:6(float16_t) FAdd 5045 5043 - 5047: 208(ptr) AccessChain 4972(texel) 207 - Store 5047 5046 - 5048: 199 Load 201(s1DShadow) - 5049:154(f16vec2) Load 156(f16c2) - 5050: 52(float) Load 215(compare) - 5051:6(float16_t) Load 1401(f16dPdxy1) - 5052:6(float16_t) Load 1401(f16dPdxy1) - 5053:6(float16_t) Load 4274(f16lodClamp) - 5054:6(float16_t) ImageSampleDrefExplicitLod 5048 5049 5050 Grad MinLod 5051 5052 5053 - 5055: 208(ptr) AccessChain 4972(texel) 207 - 5056:6(float16_t) Load 5055 - 5057:6(float16_t) FAdd 5056 5054 - 5058: 208(ptr) AccessChain 4972(texel) 207 - Store 5058 5057 - 5059: 224 Load 226(s2DShadow) - 5060: 167(fvec3) Load 169(c3) - 5061: 53(fvec2) Load 1409(dPdxy2) - 5062: 53(fvec2) Load 1409(dPdxy2) - 5063: 52(float) Load 4267(lodClamp) - 5064: 52(float) CompositeExtract 5060 2 - 5065:6(float16_t) ImageSampleDrefExplicitLod 5059 5060 5064 Grad MinLod 5061 5062 5063 - 5066: 208(ptr) AccessChain 4972(texel) 207 - 5067:6(float16_t) Load 5066 - 5068:6(float16_t) FAdd 5067 5065 - 5069: 208(ptr) AccessChain 4972(texel) 207 - Store 5069 5068 - 5070: 224 Load 226(s2DShadow) - 5071:154(f16vec2) Load 156(f16c2) - 5072: 52(float) Load 215(compare) - 5073:154(f16vec2) Load 1417(f16dPdxy2) - 5074:154(f16vec2) Load 1417(f16dPdxy2) - 5075:6(float16_t) Load 4274(f16lodClamp) - 5076:6(float16_t) ImageSampleDrefExplicitLod 5070 5071 5072 Grad MinLod 5073 5074 5075 - 5077: 208(ptr) AccessChain 4972(texel) 207 - 5078:6(float16_t) Load 5077 - 5079:6(float16_t) FAdd 5078 5076 - 5080: 208(ptr) AccessChain 4972(texel) 207 - Store 5080 5079 - 5081: 245 Load 247(sCubeShadow) - 5082: 249(fvec4) Load 251(c4) - 5083: 167(fvec3) Load 1425(dPdxy3) - 5084: 167(fvec3) Load 1425(dPdxy3) - 5085: 52(float) Load 4267(lodClamp) - 5086: 52(float) CompositeExtract 5082 3 + 5016(texel): 64(ptr) Variable Function + Store 5016(texel) 121 + 5017: 123 Load 125(s1D) + 5018: 52(float) Load 128(c1) + 5019: 52(float) Load 1393(dPdxy1) + 5020: 52(float) Load 1393(dPdxy1) + 5021: 52(float) Load 4311(lodClamp) + 5022: 7(f16vec4) ImageSampleExplicitLod 5017 5018 Grad MinLod 5019 5020 5021 + 5023: 7(f16vec4) Load 5016(texel) + 5024: 7(f16vec4) FAdd 5023 5022 + Store 5016(texel) 5024 + 5025: 123 Load 125(s1D) + 5026:6(float16_t) Load 135(f16c1) + 5027:6(float16_t) Load 1401(f16dPdxy1) + 5028:6(float16_t) Load 1401(f16dPdxy1) + 5029:6(float16_t) Load 4318(f16lodClamp) + 5030: 7(f16vec4) ImageSampleExplicitLod 5025 5026 Grad MinLod 5027 5028 5029 + 5031: 7(f16vec4) Load 5016(texel) + 5032: 7(f16vec4) FAdd 5031 5030 + Store 5016(texel) 5032 + 5033: 143 Load 145(s2D) + 5034: 53(fvec2) Load 148(c2) + 5035: 53(fvec2) Load 1409(dPdxy2) + 5036: 53(fvec2) Load 1409(dPdxy2) + 5037: 52(float) Load 4311(lodClamp) + 5038: 7(f16vec4) ImageSampleExplicitLod 5033 5034 Grad MinLod 5035 5036 5037 + 5039: 7(f16vec4) Load 5016(texel) + 5040: 7(f16vec4) FAdd 5039 5038 + Store 5016(texel) 5040 + 5041: 143 Load 145(s2D) + 5042:154(f16vec2) Load 156(f16c2) + 5043:154(f16vec2) Load 1417(f16dPdxy2) + 5044:154(f16vec2) Load 1417(f16dPdxy2) + 5045:6(float16_t) Load 4318(f16lodClamp) + 5046: 7(f16vec4) ImageSampleExplicitLod 5041 5042 Grad MinLod 5043 5044 5045 + 5047: 7(f16vec4) Load 5016(texel) + 5048: 7(f16vec4) FAdd 5047 5046 + Store 5016(texel) 5048 + 5049: 163 Load 165(s3D) + 5050: 167(fvec3) Load 169(c3) + 5051: 167(fvec3) Load 1425(dPdxy3) + 5052: 167(fvec3) Load 1425(dPdxy3) + 5053: 52(float) Load 4311(lodClamp) + 5054: 7(f16vec4) ImageSampleExplicitLod 5049 5050 Grad MinLod 5051 5052 5053 + 5055: 7(f16vec4) Load 5016(texel) + 5056: 7(f16vec4) FAdd 5055 5054 + Store 5016(texel) 5056 + 5057: 163 Load 165(s3D) + 5058:175(f16vec3) Load 177(f16c3) + 5059:175(f16vec3) Load 1433(f16dPdxy3) + 5060:175(f16vec3) Load 1433(f16dPdxy3) + 5061:6(float16_t) Load 4318(f16lodClamp) + 5062: 7(f16vec4) ImageSampleExplicitLod 5057 5058 Grad MinLod 5059 5060 5061 + 5063: 7(f16vec4) Load 5016(texel) + 5064: 7(f16vec4) FAdd 5063 5062 + Store 5016(texel) 5064 + 5065: 184 Load 186(sCube) + 5066: 167(fvec3) Load 169(c3) + 5067: 167(fvec3) Load 1425(dPdxy3) + 5068: 167(fvec3) Load 1425(dPdxy3) + 5069: 52(float) Load 4311(lodClamp) + 5070: 7(f16vec4) ImageSampleExplicitLod 5065 5066 Grad MinLod 5067 5068 5069 + 5071: 7(f16vec4) Load 5016(texel) + 5072: 7(f16vec4) FAdd 5071 5070 + Store 5016(texel) 5072 + 5073: 184 Load 186(sCube) + 5074:175(f16vec3) Load 177(f16c3) + 5075:175(f16vec3) Load 1433(f16dPdxy3) + 5076:175(f16vec3) Load 1433(f16dPdxy3) + 5077:6(float16_t) Load 4318(f16lodClamp) + 5078: 7(f16vec4) ImageSampleExplicitLod 5073 5074 Grad MinLod 5075 5076 5077 + 5079: 7(f16vec4) Load 5016(texel) + 5080: 7(f16vec4) FAdd 5079 5078 + Store 5016(texel) 5080 + 5081: 199 Load 201(s1DShadow) + 5082: 167(fvec3) Load 169(c3) + 5083: 52(float) Load 1393(dPdxy1) + 5084: 52(float) Load 1393(dPdxy1) + 5085: 52(float) Load 4311(lodClamp) + 5086: 52(float) CompositeExtract 5082 2 5087:6(float16_t) ImageSampleDrefExplicitLod 5081 5082 5086 Grad MinLod 5083 5084 5085 - 5088: 208(ptr) AccessChain 4972(texel) 207 + 5088: 208(ptr) AccessChain 5016(texel) 207 5089:6(float16_t) Load 5088 5090:6(float16_t) FAdd 5089 5087 - 5091: 208(ptr) AccessChain 4972(texel) 207 + 5091: 208(ptr) AccessChain 5016(texel) 207 Store 5091 5090 - 5092: 245 Load 247(sCubeShadow) - 5093:175(f16vec3) Load 177(f16c3) + 5092: 199 Load 201(s1DShadow) + 5093:154(f16vec2) Load 156(f16c2) 5094: 52(float) Load 215(compare) - 5095:175(f16vec3) Load 1433(f16dPdxy3) - 5096:175(f16vec3) Load 1433(f16dPdxy3) - 5097:6(float16_t) Load 4274(f16lodClamp) + 5095:6(float16_t) Load 1401(f16dPdxy1) + 5096:6(float16_t) Load 1401(f16dPdxy1) + 5097:6(float16_t) Load 4318(f16lodClamp) 5098:6(float16_t) ImageSampleDrefExplicitLod 5092 5093 5094 Grad MinLod 5095 5096 5097 - 5099: 208(ptr) AccessChain 4972(texel) 207 + 5099: 208(ptr) AccessChain 5016(texel) 207 5100:6(float16_t) Load 5099 5101:6(float16_t) FAdd 5100 5098 - 5102: 208(ptr) AccessChain 4972(texel) 207 + 5102: 208(ptr) AccessChain 5016(texel) 207 Store 5102 5101 - 5103: 269 Load 271(s1DArray) - 5104: 53(fvec2) Load 148(c2) - 5105: 52(float) Load 1393(dPdxy1) - 5106: 52(float) Load 1393(dPdxy1) - 5107: 52(float) Load 4267(lodClamp) - 5108: 7(f16vec4) ImageSampleExplicitLod 5103 5104 Grad MinLod 5105 5106 5107 - 5109: 7(f16vec4) Load 4972(texel) - 5110: 7(f16vec4) FAdd 5109 5108 - Store 4972(texel) 5110 - 5111: 269 Load 271(s1DArray) - 5112:154(f16vec2) Load 156(f16c2) - 5113:6(float16_t) Load 1401(f16dPdxy1) - 5114:6(float16_t) Load 1401(f16dPdxy1) - 5115:6(float16_t) Load 4274(f16lodClamp) - 5116: 7(f16vec4) ImageSampleExplicitLod 5111 5112 Grad MinLod 5113 5114 5115 - 5117: 7(f16vec4) Load 4972(texel) - 5118: 7(f16vec4) FAdd 5117 5116 - Store 4972(texel) 5118 - 5119: 284 Load 286(s2DArray) - 5120: 167(fvec3) Load 169(c3) - 5121: 53(fvec2) Load 1409(dPdxy2) - 5122: 53(fvec2) Load 1409(dPdxy2) - 5123: 52(float) Load 4267(lodClamp) - 5124: 7(f16vec4) ImageSampleExplicitLod 5119 5120 Grad MinLod 5121 5122 5123 - 5125: 7(f16vec4) Load 4972(texel) - 5126: 7(f16vec4) FAdd 5125 5124 - Store 4972(texel) 5126 - 5127: 284 Load 286(s2DArray) - 5128:175(f16vec3) Load 177(f16c3) - 5129:154(f16vec2) Load 1417(f16dPdxy2) - 5130:154(f16vec2) Load 1417(f16dPdxy2) - 5131:6(float16_t) Load 4274(f16lodClamp) - 5132: 7(f16vec4) ImageSampleExplicitLod 5127 5128 Grad MinLod 5129 5130 5131 - 5133: 7(f16vec4) Load 4972(texel) - 5134: 7(f16vec4) FAdd 5133 5132 - Store 4972(texel) 5134 - 5135: 316 Load 318(s1DArrayShadow) - 5136: 167(fvec3) Load 169(c3) - 5137: 52(float) Load 1393(dPdxy1) - 5138: 52(float) Load 1393(dPdxy1) - 5139: 52(float) Load 4267(lodClamp) - 5140: 52(float) CompositeExtract 5136 2 - 5141:6(float16_t) ImageSampleDrefExplicitLod 5135 5136 5140 Grad MinLod 5137 5138 5139 - 5142: 208(ptr) AccessChain 4972(texel) 207 - 5143:6(float16_t) Load 5142 - 5144:6(float16_t) FAdd 5143 5141 - 5145: 208(ptr) AccessChain 4972(texel) 207 - Store 5145 5144 - 5146: 316 Load 318(s1DArrayShadow) - 5147:154(f16vec2) Load 156(f16c2) - 5148: 52(float) Load 215(compare) - 5149:6(float16_t) Load 1401(f16dPdxy1) - 5150:6(float16_t) Load 1401(f16dPdxy1) - 5151:6(float16_t) Load 4274(f16lodClamp) - 5152:6(float16_t) ImageSampleDrefExplicitLod 5146 5147 5148 Grad MinLod 5149 5150 5151 - 5153: 208(ptr) AccessChain 4972(texel) 207 - 5154:6(float16_t) Load 5153 - 5155:6(float16_t) FAdd 5154 5152 - 5156: 208(ptr) AccessChain 4972(texel) 207 - Store 5156 5155 - 5157: 337 Load 339(s2DArrayShadow) - 5158: 249(fvec4) Load 251(c4) - 5159: 53(fvec2) Load 1409(dPdxy2) - 5160: 53(fvec2) Load 1409(dPdxy2) - 5161: 52(float) Load 4267(lodClamp) - 5162: 52(float) CompositeExtract 5158 3 - 5163:6(float16_t) ImageSampleDrefExplicitLod 5157 5158 5162 Grad MinLod 5159 5160 5161 - 5164: 208(ptr) AccessChain 4972(texel) 207 - 5165:6(float16_t) Load 5164 - 5166:6(float16_t) FAdd 5165 5163 - 5167: 208(ptr) AccessChain 4972(texel) 207 - Store 5167 5166 - 5168: 337 Load 339(s2DArrayShadow) - 5169:175(f16vec3) Load 177(f16c3) - 5170: 52(float) Load 215(compare) - 5171:154(f16vec2) Load 1417(f16dPdxy2) - 5172:154(f16vec2) Load 1417(f16dPdxy2) - 5173:6(float16_t) Load 4274(f16lodClamp) - 5174:6(float16_t) ImageSampleDrefExplicitLod 5168 5169 5170 Grad MinLod 5171 5172 5173 - 5175: 208(ptr) AccessChain 4972(texel) 207 - 5176:6(float16_t) Load 5175 - 5177:6(float16_t) FAdd 5176 5174 - 5178: 208(ptr) AccessChain 4972(texel) 207 - Store 5178 5177 - 5179: 299 Load 301(sCubeArray) - 5180: 249(fvec4) Load 251(c4) - 5181: 167(fvec3) Load 1425(dPdxy3) - 5182: 167(fvec3) Load 1425(dPdxy3) - 5183: 52(float) Load 4267(lodClamp) - 5184: 7(f16vec4) ImageSampleExplicitLod 5179 5180 Grad MinLod 5181 5182 5183 - 5185: 7(f16vec4) Load 4972(texel) - 5186: 7(f16vec4) FAdd 5185 5184 - Store 4972(texel) 5186 - 5187: 299 Load 301(sCubeArray) - 5188: 7(f16vec4) Load 309(f16c4) - 5189:175(f16vec3) Load 1433(f16dPdxy3) - 5190:175(f16vec3) Load 1433(f16dPdxy3) - 5191:6(float16_t) Load 4274(f16lodClamp) - 5192: 7(f16vec4) ImageSampleExplicitLod 5187 5188 Grad MinLod 5189 5190 5191 - 5193: 7(f16vec4) Load 4972(texel) - 5194: 7(f16vec4) FAdd 5193 5192 - Store 4972(texel) 5194 - 5195: 7(f16vec4) Load 4972(texel) - ReturnValue 5195 + 5103: 224 Load 226(s2DShadow) + 5104: 167(fvec3) Load 169(c3) + 5105: 53(fvec2) Load 1409(dPdxy2) + 5106: 53(fvec2) Load 1409(dPdxy2) + 5107: 52(float) Load 4311(lodClamp) + 5108: 52(float) CompositeExtract 5104 2 + 5109:6(float16_t) ImageSampleDrefExplicitLod 5103 5104 5108 Grad MinLod 5105 5106 5107 + 5110: 208(ptr) AccessChain 5016(texel) 207 + 5111:6(float16_t) Load 5110 + 5112:6(float16_t) FAdd 5111 5109 + 5113: 208(ptr) AccessChain 5016(texel) 207 + Store 5113 5112 + 5114: 224 Load 226(s2DShadow) + 5115:154(f16vec2) Load 156(f16c2) + 5116: 52(float) Load 215(compare) + 5117:154(f16vec2) Load 1417(f16dPdxy2) + 5118:154(f16vec2) Load 1417(f16dPdxy2) + 5119:6(float16_t) Load 4318(f16lodClamp) + 5120:6(float16_t) ImageSampleDrefExplicitLod 5114 5115 5116 Grad MinLod 5117 5118 5119 + 5121: 208(ptr) AccessChain 5016(texel) 207 + 5122:6(float16_t) Load 5121 + 5123:6(float16_t) FAdd 5122 5120 + 5124: 208(ptr) AccessChain 5016(texel) 207 + Store 5124 5123 + 5125: 245 Load 247(sCubeShadow) + 5126: 249(fvec4) Load 251(c4) + 5127: 167(fvec3) Load 1425(dPdxy3) + 5128: 167(fvec3) Load 1425(dPdxy3) + 5129: 52(float) Load 4311(lodClamp) + 5130: 52(float) CompositeExtract 5126 3 + 5131:6(float16_t) ImageSampleDrefExplicitLod 5125 5126 5130 Grad MinLod 5127 5128 5129 + 5132: 208(ptr) AccessChain 5016(texel) 207 + 5133:6(float16_t) Load 5132 + 5134:6(float16_t) FAdd 5133 5131 + 5135: 208(ptr) AccessChain 5016(texel) 207 + Store 5135 5134 + 5136: 245 Load 247(sCubeShadow) + 5137:175(f16vec3) Load 177(f16c3) + 5138: 52(float) Load 215(compare) + 5139:175(f16vec3) Load 1433(f16dPdxy3) + 5140:175(f16vec3) Load 1433(f16dPdxy3) + 5141:6(float16_t) Load 4318(f16lodClamp) + 5142:6(float16_t) ImageSampleDrefExplicitLod 5136 5137 5138 Grad MinLod 5139 5140 5141 + 5143: 208(ptr) AccessChain 5016(texel) 207 + 5144:6(float16_t) Load 5143 + 5145:6(float16_t) FAdd 5144 5142 + 5146: 208(ptr) AccessChain 5016(texel) 207 + Store 5146 5145 + 5147: 269 Load 271(s1DArray) + 5148: 53(fvec2) Load 148(c2) + 5149: 52(float) Load 1393(dPdxy1) + 5150: 52(float) Load 1393(dPdxy1) + 5151: 52(float) Load 4311(lodClamp) + 5152: 7(f16vec4) ImageSampleExplicitLod 5147 5148 Grad MinLod 5149 5150 5151 + 5153: 7(f16vec4) Load 5016(texel) + 5154: 7(f16vec4) FAdd 5153 5152 + Store 5016(texel) 5154 + 5155: 269 Load 271(s1DArray) + 5156:154(f16vec2) Load 156(f16c2) + 5157:6(float16_t) Load 1401(f16dPdxy1) + 5158:6(float16_t) Load 1401(f16dPdxy1) + 5159:6(float16_t) Load 4318(f16lodClamp) + 5160: 7(f16vec4) ImageSampleExplicitLod 5155 5156 Grad MinLod 5157 5158 5159 + 5161: 7(f16vec4) Load 5016(texel) + 5162: 7(f16vec4) FAdd 5161 5160 + Store 5016(texel) 5162 + 5163: 284 Load 286(s2DArray) + 5164: 167(fvec3) Load 169(c3) + 5165: 53(fvec2) Load 1409(dPdxy2) + 5166: 53(fvec2) Load 1409(dPdxy2) + 5167: 52(float) Load 4311(lodClamp) + 5168: 7(f16vec4) ImageSampleExplicitLod 5163 5164 Grad MinLod 5165 5166 5167 + 5169: 7(f16vec4) Load 5016(texel) + 5170: 7(f16vec4) FAdd 5169 5168 + Store 5016(texel) 5170 + 5171: 284 Load 286(s2DArray) + 5172:175(f16vec3) Load 177(f16c3) + 5173:154(f16vec2) Load 1417(f16dPdxy2) + 5174:154(f16vec2) Load 1417(f16dPdxy2) + 5175:6(float16_t) Load 4318(f16lodClamp) + 5176: 7(f16vec4) ImageSampleExplicitLod 5171 5172 Grad MinLod 5173 5174 5175 + 5177: 7(f16vec4) Load 5016(texel) + 5178: 7(f16vec4) FAdd 5177 5176 + Store 5016(texel) 5178 + 5179: 316 Load 318(s1DArrayShadow) + 5180: 167(fvec3) Load 169(c3) + 5181: 52(float) Load 1393(dPdxy1) + 5182: 52(float) Load 1393(dPdxy1) + 5183: 52(float) Load 4311(lodClamp) + 5184: 52(float) CompositeExtract 5180 2 + 5185:6(float16_t) ImageSampleDrefExplicitLod 5179 5180 5184 Grad MinLod 5181 5182 5183 + 5186: 208(ptr) AccessChain 5016(texel) 207 + 5187:6(float16_t) Load 5186 + 5188:6(float16_t) FAdd 5187 5185 + 5189: 208(ptr) AccessChain 5016(texel) 207 + Store 5189 5188 + 5190: 316 Load 318(s1DArrayShadow) + 5191:154(f16vec2) Load 156(f16c2) + 5192: 52(float) Load 215(compare) + 5193:6(float16_t) Load 1401(f16dPdxy1) + 5194:6(float16_t) Load 1401(f16dPdxy1) + 5195:6(float16_t) Load 4318(f16lodClamp) + 5196:6(float16_t) ImageSampleDrefExplicitLod 5190 5191 5192 Grad MinLod 5193 5194 5195 + 5197: 208(ptr) AccessChain 5016(texel) 207 + 5198:6(float16_t) Load 5197 + 5199:6(float16_t) FAdd 5198 5196 + 5200: 208(ptr) AccessChain 5016(texel) 207 + Store 5200 5199 + 5201: 337 Load 339(s2DArrayShadow) + 5202: 249(fvec4) Load 251(c4) + 5203: 53(fvec2) Load 1409(dPdxy2) + 5204: 53(fvec2) Load 1409(dPdxy2) + 5205: 52(float) Load 4311(lodClamp) + 5206: 52(float) CompositeExtract 5202 3 + 5207:6(float16_t) ImageSampleDrefExplicitLod 5201 5202 5206 Grad MinLod 5203 5204 5205 + 5208: 208(ptr) AccessChain 5016(texel) 207 + 5209:6(float16_t) Load 5208 + 5210:6(float16_t) FAdd 5209 5207 + 5211: 208(ptr) AccessChain 5016(texel) 207 + Store 5211 5210 + 5212: 337 Load 339(s2DArrayShadow) + 5213:175(f16vec3) Load 177(f16c3) + 5214: 52(float) Load 215(compare) + 5215:154(f16vec2) Load 1417(f16dPdxy2) + 5216:154(f16vec2) Load 1417(f16dPdxy2) + 5217:6(float16_t) Load 4318(f16lodClamp) + 5218:6(float16_t) ImageSampleDrefExplicitLod 5212 5213 5214 Grad MinLod 5215 5216 5217 + 5219: 208(ptr) AccessChain 5016(texel) 207 + 5220:6(float16_t) Load 5219 + 5221:6(float16_t) FAdd 5220 5218 + 5222: 208(ptr) AccessChain 5016(texel) 207 + Store 5222 5221 + 5223: 299 Load 301(sCubeArray) + 5224: 249(fvec4) Load 251(c4) + 5225: 167(fvec3) Load 1425(dPdxy3) + 5226: 167(fvec3) Load 1425(dPdxy3) + 5227: 52(float) Load 4311(lodClamp) + 5228: 7(f16vec4) ImageSampleExplicitLod 5223 5224 Grad MinLod 5225 5226 5227 + 5229: 7(f16vec4) Load 5016(texel) + 5230: 7(f16vec4) FAdd 5229 5228 + Store 5016(texel) 5230 + 5231: 299 Load 301(sCubeArray) + 5232: 7(f16vec4) Load 309(f16c4) + 5233:175(f16vec3) Load 1433(f16dPdxy3) + 5234:175(f16vec3) Load 1433(f16dPdxy3) + 5235:6(float16_t) Load 4318(f16lodClamp) + 5236: 7(f16vec4) ImageSampleExplicitLod 5231 5232 Grad MinLod 5233 5234 5235 + 5237: 7(f16vec4) Load 5016(texel) + 5238: 7(f16vec4) FAdd 5237 5236 + Store 5016(texel) 5238 + 5239: 7(f16vec4) Load 5016(texel) + ReturnValue 5239 FunctionEnd 111(testSparseTextureGradOffsetClamp(): 7(f16vec4) Function None 8 112: Label - 5198(texel): 64(ptr) Variable Function - Store 5198(texel) 121 - 5199: 143 Load 145(s2D) - 5200: 53(fvec2) Load 148(c2) - 5201: 53(fvec2) Load 1409(dPdxy2) - 5202: 53(fvec2) Load 1409(dPdxy2) - 5203: 52(float) Load 4267(lodClamp) - 5204:3102(ResType) ImageSparseSampleExplicitLod 5199 5200 Grad ConstOffset MinLod 5201 5202 722 5203 - 5205: 7(f16vec4) CompositeExtract 5204 1 - Store 5198(texel) 5205 - 5206: 47(int) CompositeExtract 5204 0 - 5207: 143 Load 145(s2D) - 5208:154(f16vec2) Load 156(f16c2) - 5209:154(f16vec2) Load 1417(f16dPdxy2) - 5210:154(f16vec2) Load 1417(f16dPdxy2) - 5211:6(float16_t) Load 4274(f16lodClamp) - 5212:3102(ResType) ImageSparseSampleExplicitLod 5207 5208 Grad ConstOffset MinLod 5209 5210 722 5211 - 5213: 7(f16vec4) CompositeExtract 5212 1 - Store 5198(texel) 5213 - 5214: 47(int) CompositeExtract 5212 0 - 5215: 163 Load 165(s3D) - 5216: 167(fvec3) Load 169(c3) - 5217: 167(fvec3) Load 1425(dPdxy3) - 5218: 167(fvec3) Load 1425(dPdxy3) - 5219: 52(float) Load 4267(lodClamp) - 5220:3102(ResType) ImageSparseSampleExplicitLod 5215 5216 Grad ConstOffset MinLod 5217 5218 735 5219 - 5221: 7(f16vec4) CompositeExtract 5220 1 - Store 5198(texel) 5221 - 5222: 47(int) CompositeExtract 5220 0 - 5223: 163 Load 165(s3D) - 5224:175(f16vec3) Load 177(f16c3) - 5225:175(f16vec3) Load 1433(f16dPdxy3) - 5226:175(f16vec3) Load 1433(f16dPdxy3) - 5227:6(float16_t) Load 4274(f16lodClamp) - 5228:3102(ResType) ImageSparseSampleExplicitLod 5223 5224 Grad ConstOffset MinLod 5225 5226 735 5227 - 5229: 7(f16vec4) CompositeExtract 5228 1 - Store 5198(texel) 5229 - 5230: 47(int) CompositeExtract 5228 0 - 5231: 224 Load 226(s2DShadow) - 5232: 167(fvec3) Load 169(c3) - 5233: 53(fvec2) Load 1409(dPdxy2) - 5234: 53(fvec2) Load 1409(dPdxy2) - 5235: 52(float) Load 4267(lodClamp) - 5236: 208(ptr) AccessChain 5198(texel) 207 - 5237: 52(float) CompositeExtract 5232 2 - 5238:3138(ResType) ImageSparseSampleDrefExplicitLod 5231 5232 5237 Grad ConstOffset MinLod 5233 5234 722 5235 - 5239:6(float16_t) CompositeExtract 5238 1 - Store 5236 5239 - 5240: 47(int) CompositeExtract 5238 0 - 5241: 224 Load 226(s2DShadow) - 5242:154(f16vec2) Load 156(f16c2) - 5243: 52(float) Load 215(compare) - 5244:154(f16vec2) Load 1417(f16dPdxy2) - 5245:154(f16vec2) Load 1417(f16dPdxy2) - 5246:6(float16_t) Load 4274(f16lodClamp) - 5247: 208(ptr) AccessChain 5198(texel) 207 - 5248:3138(ResType) ImageSparseSampleDrefExplicitLod 5241 5242 5243 Grad ConstOffset MinLod 5244 5245 722 5246 - 5249:6(float16_t) CompositeExtract 5248 1 - Store 5247 5249 + 5242(texel): 64(ptr) Variable Function + Store 5242(texel) 121 + 5243: 143 Load 145(s2D) + 5244: 53(fvec2) Load 148(c2) + 5245: 53(fvec2) Load 1409(dPdxy2) + 5246: 53(fvec2) Load 1409(dPdxy2) + 5247: 52(float) Load 4311(lodClamp) + 5248:3146(ResType) ImageSparseSampleExplicitLod 5243 5244 Grad ConstOffset MinLod 5245 5246 722 5247 + 5249: 7(f16vec4) CompositeExtract 5248 1 + Store 5242(texel) 5249 5250: 47(int) CompositeExtract 5248 0 - 5251: 284 Load 286(s2DArray) - 5252: 167(fvec3) Load 169(c3) - 5253: 53(fvec2) Load 1409(dPdxy2) - 5254: 53(fvec2) Load 1409(dPdxy2) - 5255: 52(float) Load 4267(lodClamp) - 5256:3102(ResType) ImageSparseSampleExplicitLod 5251 5252 Grad ConstOffset MinLod 5253 5254 722 5255 + 5251: 143 Load 145(s2D) + 5252:154(f16vec2) Load 156(f16c2) + 5253:154(f16vec2) Load 1417(f16dPdxy2) + 5254:154(f16vec2) Load 1417(f16dPdxy2) + 5255:6(float16_t) Load 4318(f16lodClamp) + 5256:3146(ResType) ImageSparseSampleExplicitLod 5251 5252 Grad ConstOffset MinLod 5253 5254 722 5255 5257: 7(f16vec4) CompositeExtract 5256 1 - Store 5198(texel) 5257 + Store 5242(texel) 5257 5258: 47(int) CompositeExtract 5256 0 - 5259: 284 Load 286(s2DArray) - 5260:175(f16vec3) Load 177(f16c3) - 5261:154(f16vec2) Load 1417(f16dPdxy2) - 5262:154(f16vec2) Load 1417(f16dPdxy2) - 5263:6(float16_t) Load 4274(f16lodClamp) - 5264:3102(ResType) ImageSparseSampleExplicitLod 5259 5260 Grad ConstOffset MinLod 5261 5262 722 5263 + 5259: 163 Load 165(s3D) + 5260: 167(fvec3) Load 169(c3) + 5261: 167(fvec3) Load 1425(dPdxy3) + 5262: 167(fvec3) Load 1425(dPdxy3) + 5263: 52(float) Load 4311(lodClamp) + 5264:3146(ResType) ImageSparseSampleExplicitLod 5259 5260 Grad ConstOffset MinLod 5261 5262 735 5263 5265: 7(f16vec4) CompositeExtract 5264 1 - Store 5198(texel) 5265 + Store 5242(texel) 5265 5266: 47(int) CompositeExtract 5264 0 - 5267: 337 Load 339(s2DArrayShadow) - 5268: 249(fvec4) Load 251(c4) - 5269: 53(fvec2) Load 1409(dPdxy2) - 5270: 53(fvec2) Load 1409(dPdxy2) - 5271: 52(float) Load 4267(lodClamp) - 5272: 208(ptr) AccessChain 5198(texel) 207 - 5273: 52(float) CompositeExtract 5268 3 - 5274:3138(ResType) ImageSparseSampleDrefExplicitLod 5267 5268 5273 Grad ConstOffset MinLod 5269 5270 722 5271 - 5275:6(float16_t) CompositeExtract 5274 1 - Store 5272 5275 - 5276: 47(int) CompositeExtract 5274 0 - 5277: 337 Load 339(s2DArrayShadow) - 5278:175(f16vec3) Load 177(f16c3) - 5279: 52(float) Load 215(compare) - 5280:154(f16vec2) Load 1417(f16dPdxy2) - 5281:154(f16vec2) Load 1417(f16dPdxy2) - 5282:6(float16_t) Load 4274(f16lodClamp) - 5283: 208(ptr) AccessChain 5198(texel) 207 - 5284:3138(ResType) ImageSparseSampleDrefExplicitLod 5277 5278 5279 Grad ConstOffset MinLod 5280 5281 722 5282 - 5285:6(float16_t) CompositeExtract 5284 1 - Store 5283 5285 - 5286: 47(int) CompositeExtract 5284 0 - 5287: 7(f16vec4) Load 5198(texel) - ReturnValue 5287 + 5267: 163 Load 165(s3D) + 5268:175(f16vec3) Load 177(f16c3) + 5269:175(f16vec3) Load 1433(f16dPdxy3) + 5270:175(f16vec3) Load 1433(f16dPdxy3) + 5271:6(float16_t) Load 4318(f16lodClamp) + 5272:3146(ResType) ImageSparseSampleExplicitLod 5267 5268 Grad ConstOffset MinLod 5269 5270 735 5271 + 5273: 7(f16vec4) CompositeExtract 5272 1 + Store 5242(texel) 5273 + 5274: 47(int) CompositeExtract 5272 0 + 5275: 224 Load 226(s2DShadow) + 5276: 167(fvec3) Load 169(c3) + 5277: 53(fvec2) Load 1409(dPdxy2) + 5278: 53(fvec2) Load 1409(dPdxy2) + 5279: 52(float) Load 4311(lodClamp) + 5280: 208(ptr) AccessChain 5242(texel) 207 + 5281: 52(float) CompositeExtract 5276 2 + 5282:3182(ResType) ImageSparseSampleDrefExplicitLod 5275 5276 5281 Grad ConstOffset MinLod 5277 5278 722 5279 + 5283:6(float16_t) CompositeExtract 5282 1 + Store 5280 5283 + 5284: 47(int) CompositeExtract 5282 0 + 5285: 224 Load 226(s2DShadow) + 5286:154(f16vec2) Load 156(f16c2) + 5287: 52(float) Load 215(compare) + 5288:154(f16vec2) Load 1417(f16dPdxy2) + 5289:154(f16vec2) Load 1417(f16dPdxy2) + 5290:6(float16_t) Load 4318(f16lodClamp) + 5291: 208(ptr) AccessChain 5242(texel) 207 + 5292:3182(ResType) ImageSparseSampleDrefExplicitLod 5285 5286 5287 Grad ConstOffset MinLod 5288 5289 722 5290 + 5293:6(float16_t) CompositeExtract 5292 1 + Store 5291 5293 + 5294: 47(int) CompositeExtract 5292 0 + 5295: 284 Load 286(s2DArray) + 5296: 167(fvec3) Load 169(c3) + 5297: 53(fvec2) Load 1409(dPdxy2) + 5298: 53(fvec2) Load 1409(dPdxy2) + 5299: 52(float) Load 4311(lodClamp) + 5300:3146(ResType) ImageSparseSampleExplicitLod 5295 5296 Grad ConstOffset MinLod 5297 5298 722 5299 + 5301: 7(f16vec4) CompositeExtract 5300 1 + Store 5242(texel) 5301 + 5302: 47(int) CompositeExtract 5300 0 + 5303: 284 Load 286(s2DArray) + 5304:175(f16vec3) Load 177(f16c3) + 5305:154(f16vec2) Load 1417(f16dPdxy2) + 5306:154(f16vec2) Load 1417(f16dPdxy2) + 5307:6(float16_t) Load 4318(f16lodClamp) + 5308:3146(ResType) ImageSparseSampleExplicitLod 5303 5304 Grad ConstOffset MinLod 5305 5306 722 5307 + 5309: 7(f16vec4) CompositeExtract 5308 1 + Store 5242(texel) 5309 + 5310: 47(int) CompositeExtract 5308 0 + 5311: 337 Load 339(s2DArrayShadow) + 5312: 249(fvec4) Load 251(c4) + 5313: 53(fvec2) Load 1409(dPdxy2) + 5314: 53(fvec2) Load 1409(dPdxy2) + 5315: 52(float) Load 4311(lodClamp) + 5316: 208(ptr) AccessChain 5242(texel) 207 + 5317: 52(float) CompositeExtract 5312 3 + 5318:3182(ResType) ImageSparseSampleDrefExplicitLod 5311 5312 5317 Grad ConstOffset MinLod 5313 5314 722 5315 + 5319:6(float16_t) CompositeExtract 5318 1 + Store 5316 5319 + 5320: 47(int) CompositeExtract 5318 0 + 5321: 337 Load 339(s2DArrayShadow) + 5322:175(f16vec3) Load 177(f16c3) + 5323: 52(float) Load 215(compare) + 5324:154(f16vec2) Load 1417(f16dPdxy2) + 5325:154(f16vec2) Load 1417(f16dPdxy2) + 5326:6(float16_t) Load 4318(f16lodClamp) + 5327: 208(ptr) AccessChain 5242(texel) 207 + 5328:3182(ResType) ImageSparseSampleDrefExplicitLod 5321 5322 5323 Grad ConstOffset MinLod 5324 5325 722 5326 + 5329:6(float16_t) CompositeExtract 5328 1 + Store 5327 5329 + 5330: 47(int) CompositeExtract 5328 0 + 5331: 7(f16vec4) Load 5242(texel) + ReturnValue 5331 FunctionEnd 113(testTextureGradOffsetClamp(): 7(f16vec4) Function None 8 114: Label - 5290(texel): 64(ptr) Variable Function - Store 5290(texel) 121 - 5291: 123 Load 125(s1D) - 5292: 52(float) Load 128(c1) - 5293: 52(float) Load 1393(dPdxy1) - 5294: 52(float) Load 1393(dPdxy1) - 5295: 52(float) Load 4267(lodClamp) - 5296: 7(f16vec4) ImageSampleExplicitLod 5291 5292 Grad ConstOffset MinLod 5293 5294 709 5295 - 5297: 7(f16vec4) Load 5290(texel) - 5298: 7(f16vec4) FAdd 5297 5296 - Store 5290(texel) 5298 - 5299: 123 Load 125(s1D) - 5300:6(float16_t) Load 135(f16c1) - 5301:6(float16_t) Load 1401(f16dPdxy1) - 5302:6(float16_t) Load 1401(f16dPdxy1) - 5303:6(float16_t) Load 4274(f16lodClamp) - 5304: 7(f16vec4) ImageSampleExplicitLod 5299 5300 Grad ConstOffset MinLod 5301 5302 709 5303 - 5305: 7(f16vec4) Load 5290(texel) - 5306: 7(f16vec4) FAdd 5305 5304 - Store 5290(texel) 5306 - 5307: 143 Load 145(s2D) - 5308: 53(fvec2) Load 148(c2) - 5309: 53(fvec2) Load 1409(dPdxy2) - 5310: 53(fvec2) Load 1409(dPdxy2) - 5311: 52(float) Load 4267(lodClamp) - 5312: 7(f16vec4) ImageSampleExplicitLod 5307 5308 Grad ConstOffset MinLod 5309 5310 722 5311 - 5313: 7(f16vec4) Load 5290(texel) - 5314: 7(f16vec4) FAdd 5313 5312 - Store 5290(texel) 5314 - 5315: 143 Load 145(s2D) - 5316:154(f16vec2) Load 156(f16c2) - 5317:154(f16vec2) Load 1417(f16dPdxy2) - 5318:154(f16vec2) Load 1417(f16dPdxy2) - 5319:6(float16_t) Load 4274(f16lodClamp) - 5320: 7(f16vec4) ImageSampleExplicitLod 5315 5316 Grad ConstOffset MinLod 5317 5318 722 5319 - 5321: 7(f16vec4) Load 5290(texel) - 5322: 7(f16vec4) FAdd 5321 5320 - Store 5290(texel) 5322 - 5323: 163 Load 165(s3D) - 5324: 167(fvec3) Load 169(c3) - 5325: 167(fvec3) Load 1425(dPdxy3) - 5326: 167(fvec3) Load 1425(dPdxy3) - 5327: 52(float) Load 4267(lodClamp) - 5328: 7(f16vec4) ImageSampleExplicitLod 5323 5324 Grad ConstOffset MinLod 5325 5326 735 5327 - 5329: 7(f16vec4) Load 5290(texel) - 5330: 7(f16vec4) FAdd 5329 5328 - Store 5290(texel) 5330 - 5331: 163 Load 165(s3D) - 5332:175(f16vec3) Load 177(f16c3) - 5333:175(f16vec3) Load 1433(f16dPdxy3) - 5334:175(f16vec3) Load 1433(f16dPdxy3) - 5335:6(float16_t) Load 4274(f16lodClamp) - 5336: 7(f16vec4) ImageSampleExplicitLod 5331 5332 Grad ConstOffset MinLod 5333 5334 735 5335 - 5337: 7(f16vec4) Load 5290(texel) - 5338: 7(f16vec4) FAdd 5337 5336 - Store 5290(texel) 5338 - 5339: 199 Load 201(s1DShadow) - 5340: 167(fvec3) Load 169(c3) - 5341: 52(float) Load 1393(dPdxy1) - 5342: 52(float) Load 1393(dPdxy1) - 5343: 52(float) Load 4267(lodClamp) - 5344: 52(float) CompositeExtract 5340 2 - 5345:6(float16_t) ImageSampleDrefExplicitLod 5339 5340 5344 Grad ConstOffset MinLod 5341 5342 709 5343 - 5346: 208(ptr) AccessChain 5290(texel) 207 - 5347:6(float16_t) Load 5346 - 5348:6(float16_t) FAdd 5347 5345 - 5349: 208(ptr) AccessChain 5290(texel) 207 - Store 5349 5348 - 5350: 199 Load 201(s1DShadow) - 5351:154(f16vec2) Load 156(f16c2) - 5352: 52(float) Load 215(compare) - 5353:6(float16_t) Load 1401(f16dPdxy1) - 5354:6(float16_t) Load 1401(f16dPdxy1) - 5355:6(float16_t) Load 4274(f16lodClamp) - 5356:6(float16_t) ImageSampleDrefExplicitLod 5350 5351 5352 Grad ConstOffset MinLod 5353 5354 709 5355 - 5357: 208(ptr) AccessChain 5290(texel) 207 - 5358:6(float16_t) Load 5357 - 5359:6(float16_t) FAdd 5358 5356 - 5360: 208(ptr) AccessChain 5290(texel) 207 - Store 5360 5359 - 5361: 224 Load 226(s2DShadow) - 5362: 167(fvec3) Load 169(c3) - 5363: 53(fvec2) Load 1409(dPdxy2) - 5364: 53(fvec2) Load 1409(dPdxy2) - 5365: 52(float) Load 4267(lodClamp) - 5366: 52(float) CompositeExtract 5362 2 - 5367:6(float16_t) ImageSampleDrefExplicitLod 5361 5362 5366 Grad ConstOffset MinLod 5363 5364 722 5365 - 5368: 208(ptr) AccessChain 5290(texel) 207 - 5369:6(float16_t) Load 5368 - 5370:6(float16_t) FAdd 5369 5367 - 5371: 208(ptr) AccessChain 5290(texel) 207 - Store 5371 5370 - 5372: 224 Load 226(s2DShadow) - 5373:154(f16vec2) Load 156(f16c2) - 5374: 52(float) Load 215(compare) - 5375:154(f16vec2) Load 1417(f16dPdxy2) - 5376:154(f16vec2) Load 1417(f16dPdxy2) - 5377:6(float16_t) Load 4274(f16lodClamp) - 5378:6(float16_t) ImageSampleDrefExplicitLod 5372 5373 5374 Grad ConstOffset MinLod 5375 5376 722 5377 - 5379: 208(ptr) AccessChain 5290(texel) 207 - 5380:6(float16_t) Load 5379 - 5381:6(float16_t) FAdd 5380 5378 - 5382: 208(ptr) AccessChain 5290(texel) 207 - Store 5382 5381 - 5383: 269 Load 271(s1DArray) - 5384: 53(fvec2) Load 148(c2) + 5334(texel): 64(ptr) Variable Function + Store 5334(texel) 121 + 5335: 123 Load 125(s1D) + 5336: 52(float) Load 128(c1) + 5337: 52(float) Load 1393(dPdxy1) + 5338: 52(float) Load 1393(dPdxy1) + 5339: 52(float) Load 4311(lodClamp) + 5340: 7(f16vec4) ImageSampleExplicitLod 5335 5336 Grad ConstOffset MinLod 5337 5338 709 5339 + 5341: 7(f16vec4) Load 5334(texel) + 5342: 7(f16vec4) FAdd 5341 5340 + Store 5334(texel) 5342 + 5343: 123 Load 125(s1D) + 5344:6(float16_t) Load 135(f16c1) + 5345:6(float16_t) Load 1401(f16dPdxy1) + 5346:6(float16_t) Load 1401(f16dPdxy1) + 5347:6(float16_t) Load 4318(f16lodClamp) + 5348: 7(f16vec4) ImageSampleExplicitLod 5343 5344 Grad ConstOffset MinLod 5345 5346 709 5347 + 5349: 7(f16vec4) Load 5334(texel) + 5350: 7(f16vec4) FAdd 5349 5348 + Store 5334(texel) 5350 + 5351: 143 Load 145(s2D) + 5352: 53(fvec2) Load 148(c2) + 5353: 53(fvec2) Load 1409(dPdxy2) + 5354: 53(fvec2) Load 1409(dPdxy2) + 5355: 52(float) Load 4311(lodClamp) + 5356: 7(f16vec4) ImageSampleExplicitLod 5351 5352 Grad ConstOffset MinLod 5353 5354 722 5355 + 5357: 7(f16vec4) Load 5334(texel) + 5358: 7(f16vec4) FAdd 5357 5356 + Store 5334(texel) 5358 + 5359: 143 Load 145(s2D) + 5360:154(f16vec2) Load 156(f16c2) + 5361:154(f16vec2) Load 1417(f16dPdxy2) + 5362:154(f16vec2) Load 1417(f16dPdxy2) + 5363:6(float16_t) Load 4318(f16lodClamp) + 5364: 7(f16vec4) ImageSampleExplicitLod 5359 5360 Grad ConstOffset MinLod 5361 5362 722 5363 + 5365: 7(f16vec4) Load 5334(texel) + 5366: 7(f16vec4) FAdd 5365 5364 + Store 5334(texel) 5366 + 5367: 163 Load 165(s3D) + 5368: 167(fvec3) Load 169(c3) + 5369: 167(fvec3) Load 1425(dPdxy3) + 5370: 167(fvec3) Load 1425(dPdxy3) + 5371: 52(float) Load 4311(lodClamp) + 5372: 7(f16vec4) ImageSampleExplicitLod 5367 5368 Grad ConstOffset MinLod 5369 5370 735 5371 + 5373: 7(f16vec4) Load 5334(texel) + 5374: 7(f16vec4) FAdd 5373 5372 + Store 5334(texel) 5374 + 5375: 163 Load 165(s3D) + 5376:175(f16vec3) Load 177(f16c3) + 5377:175(f16vec3) Load 1433(f16dPdxy3) + 5378:175(f16vec3) Load 1433(f16dPdxy3) + 5379:6(float16_t) Load 4318(f16lodClamp) + 5380: 7(f16vec4) ImageSampleExplicitLod 5375 5376 Grad ConstOffset MinLod 5377 5378 735 5379 + 5381: 7(f16vec4) Load 5334(texel) + 5382: 7(f16vec4) FAdd 5381 5380 + Store 5334(texel) 5382 + 5383: 199 Load 201(s1DShadow) + 5384: 167(fvec3) Load 169(c3) 5385: 52(float) Load 1393(dPdxy1) 5386: 52(float) Load 1393(dPdxy1) - 5387: 52(float) Load 4267(lodClamp) - 5388: 7(f16vec4) ImageSampleExplicitLod 5383 5384 Grad ConstOffset MinLod 5385 5386 709 5387 - 5389: 7(f16vec4) Load 5290(texel) - 5390: 7(f16vec4) FAdd 5389 5388 - Store 5290(texel) 5390 - 5391: 269 Load 271(s1DArray) - 5392:154(f16vec2) Load 156(f16c2) - 5393:6(float16_t) Load 1401(f16dPdxy1) - 5394:6(float16_t) Load 1401(f16dPdxy1) - 5395:6(float16_t) Load 4274(f16lodClamp) - 5396: 7(f16vec4) ImageSampleExplicitLod 5391 5392 Grad ConstOffset MinLod 5393 5394 709 5395 - 5397: 7(f16vec4) Load 5290(texel) - 5398: 7(f16vec4) FAdd 5397 5396 - Store 5290(texel) 5398 - 5399: 284 Load 286(s2DArray) - 5400: 167(fvec3) Load 169(c3) - 5401: 53(fvec2) Load 1409(dPdxy2) - 5402: 53(fvec2) Load 1409(dPdxy2) - 5403: 52(float) Load 4267(lodClamp) - 5404: 7(f16vec4) ImageSampleExplicitLod 5399 5400 Grad ConstOffset MinLod 5401 5402 722 5403 - 5405: 7(f16vec4) Load 5290(texel) - 5406: 7(f16vec4) FAdd 5405 5404 - Store 5290(texel) 5406 - 5407: 284 Load 286(s2DArray) - 5408:175(f16vec3) Load 177(f16c3) - 5409:154(f16vec2) Load 1417(f16dPdxy2) - 5410:154(f16vec2) Load 1417(f16dPdxy2) - 5411:6(float16_t) Load 4274(f16lodClamp) - 5412: 7(f16vec4) ImageSampleExplicitLod 5407 5408 Grad ConstOffset MinLod 5409 5410 722 5411 - 5413: 7(f16vec4) Load 5290(texel) - 5414: 7(f16vec4) FAdd 5413 5412 - Store 5290(texel) 5414 - 5415: 316 Load 318(s1DArrayShadow) - 5416: 167(fvec3) Load 169(c3) - 5417: 52(float) Load 1393(dPdxy1) - 5418: 52(float) Load 1393(dPdxy1) - 5419: 52(float) Load 4267(lodClamp) - 5420: 52(float) CompositeExtract 5416 2 - 5421:6(float16_t) ImageSampleDrefExplicitLod 5415 5416 5420 Grad ConstOffset MinLod 5417 5418 709 5419 - 5422: 208(ptr) AccessChain 5290(texel) 207 - 5423:6(float16_t) Load 5422 - 5424:6(float16_t) FAdd 5423 5421 - 5425: 208(ptr) AccessChain 5290(texel) 207 - Store 5425 5424 - 5426: 316 Load 318(s1DArrayShadow) - 5427:154(f16vec2) Load 156(f16c2) - 5428: 52(float) Load 215(compare) - 5429:6(float16_t) Load 1401(f16dPdxy1) - 5430:6(float16_t) Load 1401(f16dPdxy1) - 5431:6(float16_t) Load 4274(f16lodClamp) - 5432:6(float16_t) ImageSampleDrefExplicitLod 5426 5427 5428 Grad ConstOffset MinLod 5429 5430 709 5431 - 5433: 208(ptr) AccessChain 5290(texel) 207 - 5434:6(float16_t) Load 5433 - 5435:6(float16_t) FAdd 5434 5432 - 5436: 208(ptr) AccessChain 5290(texel) 207 - Store 5436 5435 - 5437: 337 Load 339(s2DArrayShadow) - 5438: 249(fvec4) Load 251(c4) - 5439: 53(fvec2) Load 1409(dPdxy2) - 5440: 53(fvec2) Load 1409(dPdxy2) - 5441: 52(float) Load 4267(lodClamp) - 5442: 52(float) CompositeExtract 5438 3 - 5443:6(float16_t) ImageSampleDrefExplicitLod 5437 5438 5442 Grad ConstOffset MinLod 5439 5440 722 5441 - 5444: 208(ptr) AccessChain 5290(texel) 207 - 5445:6(float16_t) Load 5444 - 5446:6(float16_t) FAdd 5445 5443 - 5447: 208(ptr) AccessChain 5290(texel) 207 - Store 5447 5446 - 5448: 337 Load 339(s2DArrayShadow) - 5449:175(f16vec3) Load 177(f16c3) - 5450: 52(float) Load 215(compare) - 5451:154(f16vec2) Load 1417(f16dPdxy2) - 5452:154(f16vec2) Load 1417(f16dPdxy2) - 5453:6(float16_t) Load 4274(f16lodClamp) - 5454:6(float16_t) ImageSampleDrefExplicitLod 5448 5449 5450 Grad ConstOffset MinLod 5451 5452 722 5453 - 5455: 208(ptr) AccessChain 5290(texel) 207 - 5456:6(float16_t) Load 5455 - 5457:6(float16_t) FAdd 5456 5454 - 5458: 208(ptr) AccessChain 5290(texel) 207 - Store 5458 5457 - 5459: 7(f16vec4) Load 5290(texel) - ReturnValue 5459 + 5387: 52(float) Load 4311(lodClamp) + 5388: 52(float) CompositeExtract 5384 2 + 5389:6(float16_t) ImageSampleDrefExplicitLod 5383 5384 5388 Grad ConstOffset MinLod 5385 5386 709 5387 + 5390: 208(ptr) AccessChain 5334(texel) 207 + 5391:6(float16_t) Load 5390 + 5392:6(float16_t) FAdd 5391 5389 + 5393: 208(ptr) AccessChain 5334(texel) 207 + Store 5393 5392 + 5394: 199 Load 201(s1DShadow) + 5395:154(f16vec2) Load 156(f16c2) + 5396: 52(float) Load 215(compare) + 5397:6(float16_t) Load 1401(f16dPdxy1) + 5398:6(float16_t) Load 1401(f16dPdxy1) + 5399:6(float16_t) Load 4318(f16lodClamp) + 5400:6(float16_t) ImageSampleDrefExplicitLod 5394 5395 5396 Grad ConstOffset MinLod 5397 5398 709 5399 + 5401: 208(ptr) AccessChain 5334(texel) 207 + 5402:6(float16_t) Load 5401 + 5403:6(float16_t) FAdd 5402 5400 + 5404: 208(ptr) AccessChain 5334(texel) 207 + Store 5404 5403 + 5405: 224 Load 226(s2DShadow) + 5406: 167(fvec3) Load 169(c3) + 5407: 53(fvec2) Load 1409(dPdxy2) + 5408: 53(fvec2) Load 1409(dPdxy2) + 5409: 52(float) Load 4311(lodClamp) + 5410: 52(float) CompositeExtract 5406 2 + 5411:6(float16_t) ImageSampleDrefExplicitLod 5405 5406 5410 Grad ConstOffset MinLod 5407 5408 722 5409 + 5412: 208(ptr) AccessChain 5334(texel) 207 + 5413:6(float16_t) Load 5412 + 5414:6(float16_t) FAdd 5413 5411 + 5415: 208(ptr) AccessChain 5334(texel) 207 + Store 5415 5414 + 5416: 224 Load 226(s2DShadow) + 5417:154(f16vec2) Load 156(f16c2) + 5418: 52(float) Load 215(compare) + 5419:154(f16vec2) Load 1417(f16dPdxy2) + 5420:154(f16vec2) Load 1417(f16dPdxy2) + 5421:6(float16_t) Load 4318(f16lodClamp) + 5422:6(float16_t) ImageSampleDrefExplicitLod 5416 5417 5418 Grad ConstOffset MinLod 5419 5420 722 5421 + 5423: 208(ptr) AccessChain 5334(texel) 207 + 5424:6(float16_t) Load 5423 + 5425:6(float16_t) FAdd 5424 5422 + 5426: 208(ptr) AccessChain 5334(texel) 207 + Store 5426 5425 + 5427: 269 Load 271(s1DArray) + 5428: 53(fvec2) Load 148(c2) + 5429: 52(float) Load 1393(dPdxy1) + 5430: 52(float) Load 1393(dPdxy1) + 5431: 52(float) Load 4311(lodClamp) + 5432: 7(f16vec4) ImageSampleExplicitLod 5427 5428 Grad ConstOffset MinLod 5429 5430 709 5431 + 5433: 7(f16vec4) Load 5334(texel) + 5434: 7(f16vec4) FAdd 5433 5432 + Store 5334(texel) 5434 + 5435: 269 Load 271(s1DArray) + 5436:154(f16vec2) Load 156(f16c2) + 5437:6(float16_t) Load 1401(f16dPdxy1) + 5438:6(float16_t) Load 1401(f16dPdxy1) + 5439:6(float16_t) Load 4318(f16lodClamp) + 5440: 7(f16vec4) ImageSampleExplicitLod 5435 5436 Grad ConstOffset MinLod 5437 5438 709 5439 + 5441: 7(f16vec4) Load 5334(texel) + 5442: 7(f16vec4) FAdd 5441 5440 + Store 5334(texel) 5442 + 5443: 284 Load 286(s2DArray) + 5444: 167(fvec3) Load 169(c3) + 5445: 53(fvec2) Load 1409(dPdxy2) + 5446: 53(fvec2) Load 1409(dPdxy2) + 5447: 52(float) Load 4311(lodClamp) + 5448: 7(f16vec4) ImageSampleExplicitLod 5443 5444 Grad ConstOffset MinLod 5445 5446 722 5447 + 5449: 7(f16vec4) Load 5334(texel) + 5450: 7(f16vec4) FAdd 5449 5448 + Store 5334(texel) 5450 + 5451: 284 Load 286(s2DArray) + 5452:175(f16vec3) Load 177(f16c3) + 5453:154(f16vec2) Load 1417(f16dPdxy2) + 5454:154(f16vec2) Load 1417(f16dPdxy2) + 5455:6(float16_t) Load 4318(f16lodClamp) + 5456: 7(f16vec4) ImageSampleExplicitLod 5451 5452 Grad ConstOffset MinLod 5453 5454 722 5455 + 5457: 7(f16vec4) Load 5334(texel) + 5458: 7(f16vec4) FAdd 5457 5456 + Store 5334(texel) 5458 + 5459: 316 Load 318(s1DArrayShadow) + 5460: 167(fvec3) Load 169(c3) + 5461: 52(float) Load 1393(dPdxy1) + 5462: 52(float) Load 1393(dPdxy1) + 5463: 52(float) Load 4311(lodClamp) + 5464: 52(float) CompositeExtract 5460 2 + 5465:6(float16_t) ImageSampleDrefExplicitLod 5459 5460 5464 Grad ConstOffset MinLod 5461 5462 709 5463 + 5466: 208(ptr) AccessChain 5334(texel) 207 + 5467:6(float16_t) Load 5466 + 5468:6(float16_t) FAdd 5467 5465 + 5469: 208(ptr) AccessChain 5334(texel) 207 + Store 5469 5468 + 5470: 316 Load 318(s1DArrayShadow) + 5471:154(f16vec2) Load 156(f16c2) + 5472: 52(float) Load 215(compare) + 5473:6(float16_t) Load 1401(f16dPdxy1) + 5474:6(float16_t) Load 1401(f16dPdxy1) + 5475:6(float16_t) Load 4318(f16lodClamp) + 5476:6(float16_t) ImageSampleDrefExplicitLod 5470 5471 5472 Grad ConstOffset MinLod 5473 5474 709 5475 + 5477: 208(ptr) AccessChain 5334(texel) 207 + 5478:6(float16_t) Load 5477 + 5479:6(float16_t) FAdd 5478 5476 + 5480: 208(ptr) AccessChain 5334(texel) 207 + Store 5480 5479 + 5481: 337 Load 339(s2DArrayShadow) + 5482: 249(fvec4) Load 251(c4) + 5483: 53(fvec2) Load 1409(dPdxy2) + 5484: 53(fvec2) Load 1409(dPdxy2) + 5485: 52(float) Load 4311(lodClamp) + 5486: 52(float) CompositeExtract 5482 3 + 5487:6(float16_t) ImageSampleDrefExplicitLod 5481 5482 5486 Grad ConstOffset MinLod 5483 5484 722 5485 + 5488: 208(ptr) AccessChain 5334(texel) 207 + 5489:6(float16_t) Load 5488 + 5490:6(float16_t) FAdd 5489 5487 + 5491: 208(ptr) AccessChain 5334(texel) 207 + Store 5491 5490 + 5492: 337 Load 339(s2DArrayShadow) + 5493:175(f16vec3) Load 177(f16c3) + 5494: 52(float) Load 215(compare) + 5495:154(f16vec2) Load 1417(f16dPdxy2) + 5496:154(f16vec2) Load 1417(f16dPdxy2) + 5497:6(float16_t) Load 4318(f16lodClamp) + 5498:6(float16_t) ImageSampleDrefExplicitLod 5492 5493 5494 Grad ConstOffset MinLod 5495 5496 722 5497 + 5499: 208(ptr) AccessChain 5334(texel) 207 + 5500:6(float16_t) Load 5499 + 5501:6(float16_t) FAdd 5500 5498 + 5502: 208(ptr) AccessChain 5334(texel) 207 + Store 5502 5501 + 5503: 7(f16vec4) Load 5334(texel) + ReturnValue 5503 FunctionEnd 115(testCombinedTextureSampler(): 7(f16vec4) Function None 8 116: Label - 5462(texel): 64(ptr) Variable Function - Store 5462(texel) 121 - 5465: 122 Load 5464(t1D) - 5469: 5466 Load 5468(s) - 5470: 123 SampledImage 5465 5469 - 5471: 52(float) Load 128(c1) - 5472: 7(f16vec4) ImageSampleImplicitLod 5470 5471 - 5473: 7(f16vec4) Load 5462(texel) - 5474: 7(f16vec4) FAdd 5473 5472 - Store 5462(texel) 5474 - 5475: 122 Load 5464(t1D) - 5476: 5466 Load 5468(s) - 5477: 123 SampledImage 5475 5476 - 5478:6(float16_t) Load 135(f16c1) - 5479:6(float16_t) Load 137(f16bias) - 5480: 7(f16vec4) ImageSampleImplicitLod 5477 5478 Bias 5479 - 5481: 7(f16vec4) Load 5462(texel) - 5482: 7(f16vec4) FAdd 5481 5480 - Store 5462(texel) 5482 - 5485: 142 Load 5484(t2D) - 5486: 5466 Load 5468(s) - 5487: 143 SampledImage 5485 5486 - 5488: 53(fvec2) Load 148(c2) - 5489: 7(f16vec4) ImageSampleImplicitLod 5487 5488 - 5490: 7(f16vec4) Load 5462(texel) - 5491: 7(f16vec4) FAdd 5490 5489 - Store 5462(texel) 5491 - 5492: 142 Load 5484(t2D) - 5493: 5466 Load 5468(s) - 5494: 143 SampledImage 5492 5493 - 5495:154(f16vec2) Load 156(f16c2) - 5496:6(float16_t) Load 137(f16bias) - 5497: 7(f16vec4) ImageSampleImplicitLod 5494 5495 Bias 5496 - 5498: 7(f16vec4) Load 5462(texel) - 5499: 7(f16vec4) FAdd 5498 5497 - Store 5462(texel) 5499 - 5502: 162 Load 5501(t3D) - 5503: 5466 Load 5468(s) - 5504: 163 SampledImage 5502 5503 - 5505: 167(fvec3) Load 169(c3) - 5506: 7(f16vec4) ImageSampleImplicitLod 5504 5505 - 5507: 7(f16vec4) Load 5462(texel) - 5508: 7(f16vec4) FAdd 5507 5506 - Store 5462(texel) 5508 - 5509: 162 Load 5501(t3D) - 5510: 5466 Load 5468(s) - 5511: 163 SampledImage 5509 5510 - 5512:175(f16vec3) Load 177(f16c3) - 5513:6(float16_t) Load 137(f16bias) - 5514: 7(f16vec4) ImageSampleImplicitLod 5511 5512 Bias 5513 - 5515: 7(f16vec4) Load 5462(texel) - 5516: 7(f16vec4) FAdd 5515 5514 - Store 5462(texel) 5516 - 5519: 183 Load 5518(tCube) - 5520: 5466 Load 5468(s) - 5521: 184 SampledImage 5519 5520 - 5522: 167(fvec3) Load 169(c3) - 5523: 7(f16vec4) ImageSampleImplicitLod 5521 5522 - 5524: 7(f16vec4) Load 5462(texel) - 5525: 7(f16vec4) FAdd 5524 5523 - Store 5462(texel) 5525 - 5526: 183 Load 5518(tCube) - 5527: 5466 Load 5468(s) - 5528: 184 SampledImage 5526 5527 - 5529:175(f16vec3) Load 177(f16c3) - 5530:6(float16_t) Load 137(f16bias) - 5531: 7(f16vec4) ImageSampleImplicitLod 5528 5529 Bias 5530 - 5532: 7(f16vec4) Load 5462(texel) - 5533: 7(f16vec4) FAdd 5532 5531 - Store 5462(texel) 5533 - 5534: 122 Load 5464(t1D) - 5536: 5466 Load 5535(sShadow) - 5537: 199 SampledImage 5534 5536 - 5538: 167(fvec3) Load 169(c3) - 5539: 52(float) CompositeExtract 5538 2 - 5540:6(float16_t) ImageSampleDrefImplicitLod 5537 5538 5539 - 5541: 208(ptr) AccessChain 5462(texel) 207 - 5542:6(float16_t) Load 5541 - 5543:6(float16_t) FAdd 5542 5540 - 5544: 208(ptr) AccessChain 5462(texel) 207 - Store 5544 5543 - 5545: 122 Load 5464(t1D) - 5546: 5466 Load 5535(sShadow) - 5547: 199 SampledImage 5545 5546 - 5548:154(f16vec2) Load 156(f16c2) - 5549: 52(float) Load 215(compare) - 5550:6(float16_t) Load 137(f16bias) - 5551:6(float16_t) ImageSampleDrefImplicitLod 5547 5548 5549 Bias 5550 - 5552: 208(ptr) AccessChain 5462(texel) 207 - 5553:6(float16_t) Load 5552 - 5554:6(float16_t) FAdd 5553 5551 - 5555: 208(ptr) AccessChain 5462(texel) 207 - Store 5555 5554 - 5556: 142 Load 5484(t2D) - 5557: 5466 Load 5535(sShadow) - 5558: 224 SampledImage 5556 5557 - 5559: 167(fvec3) Load 169(c3) - 5560: 52(float) CompositeExtract 5559 2 - 5561:6(float16_t) ImageSampleDrefImplicitLod 5558 5559 5560 - 5562: 208(ptr) AccessChain 5462(texel) 207 - 5563:6(float16_t) Load 5562 - 5564:6(float16_t) FAdd 5563 5561 - 5565: 208(ptr) AccessChain 5462(texel) 207 - Store 5565 5564 - 5566: 142 Load 5484(t2D) - 5567: 5466 Load 5535(sShadow) - 5568: 224 SampledImage 5566 5567 - 5569:154(f16vec2) Load 156(f16c2) - 5570: 52(float) Load 215(compare) - 5571:6(float16_t) Load 137(f16bias) - 5572:6(float16_t) ImageSampleDrefImplicitLod 5568 5569 5570 Bias 5571 - 5573: 208(ptr) AccessChain 5462(texel) 207 - 5574:6(float16_t) Load 5573 - 5575:6(float16_t) FAdd 5574 5572 - 5576: 208(ptr) AccessChain 5462(texel) 207 - Store 5576 5575 - 5577: 183 Load 5518(tCube) - 5578: 5466 Load 5535(sShadow) - 5579: 245 SampledImage 5577 5578 - 5580: 249(fvec4) Load 251(c4) - 5581: 52(float) CompositeExtract 5580 3 - 5582:6(float16_t) ImageSampleDrefImplicitLod 5579 5580 5581 - 5583: 208(ptr) AccessChain 5462(texel) 207 - 5584:6(float16_t) Load 5583 - 5585:6(float16_t) FAdd 5584 5582 - 5586: 208(ptr) AccessChain 5462(texel) 207 - Store 5586 5585 - 5587: 183 Load 5518(tCube) - 5588: 5466 Load 5535(sShadow) - 5589: 245 SampledImage 5587 5588 - 5590:175(f16vec3) Load 177(f16c3) - 5591: 52(float) Load 215(compare) - 5592:6(float16_t) Load 137(f16bias) - 5593:6(float16_t) ImageSampleDrefImplicitLod 5589 5590 5591 Bias 5592 - 5594: 208(ptr) AccessChain 5462(texel) 207 - 5595:6(float16_t) Load 5594 - 5596:6(float16_t) FAdd 5595 5593 - 5597: 208(ptr) AccessChain 5462(texel) 207 - Store 5597 5596 - 5600: 268 Load 5599(t1DArray) - 5601: 5466 Load 5468(s) - 5602: 269 SampledImage 5600 5601 - 5603: 53(fvec2) Load 148(c2) - 5604: 7(f16vec4) ImageSampleImplicitLod 5602 5603 - 5605: 7(f16vec4) Load 5462(texel) - 5606: 7(f16vec4) FAdd 5605 5604 - Store 5462(texel) 5606 - 5607: 268 Load 5599(t1DArray) - 5608: 5466 Load 5468(s) - 5609: 269 SampledImage 5607 5608 - 5610:154(f16vec2) Load 156(f16c2) - 5611:6(float16_t) Load 137(f16bias) - 5612: 7(f16vec4) ImageSampleImplicitLod 5609 5610 Bias 5611 - 5613: 7(f16vec4) Load 5462(texel) - 5614: 7(f16vec4) FAdd 5613 5612 - Store 5462(texel) 5614 - 5617: 283 Load 5616(t2DArray) - 5618: 5466 Load 5468(s) - 5619: 284 SampledImage 5617 5618 - 5620: 167(fvec3) Load 169(c3) - 5621: 7(f16vec4) ImageSampleImplicitLod 5619 5620 - 5622: 7(f16vec4) Load 5462(texel) - 5623: 7(f16vec4) FAdd 5622 5621 - Store 5462(texel) 5623 - 5624: 283 Load 5616(t2DArray) - 5625: 5466 Load 5468(s) - 5626: 284 SampledImage 5624 5625 - 5627:175(f16vec3) Load 177(f16c3) - 5628:6(float16_t) Load 137(f16bias) - 5629: 7(f16vec4) ImageSampleImplicitLod 5626 5627 Bias 5628 - 5630: 7(f16vec4) Load 5462(texel) - 5631: 7(f16vec4) FAdd 5630 5629 - Store 5462(texel) 5631 - 5634: 298 Load 5633(tCubeArray) - 5635: 5466 Load 5468(s) - 5636: 299 SampledImage 5634 5635 - 5637: 249(fvec4) Load 251(c4) - 5638: 7(f16vec4) ImageSampleImplicitLod 5636 5637 - 5639: 7(f16vec4) Load 5462(texel) - 5640: 7(f16vec4) FAdd 5639 5638 - Store 5462(texel) 5640 - 5641: 298 Load 5633(tCubeArray) - 5642: 5466 Load 5468(s) - 5643: 299 SampledImage 5641 5642 - 5644: 7(f16vec4) Load 309(f16c4) - 5645:6(float16_t) Load 137(f16bias) - 5646: 7(f16vec4) ImageSampleImplicitLod 5643 5644 Bias 5645 - 5647: 7(f16vec4) Load 5462(texel) - 5648: 7(f16vec4) FAdd 5647 5646 - Store 5462(texel) 5648 - 5649: 268 Load 5599(t1DArray) - 5650: 5466 Load 5535(sShadow) - 5651: 316 SampledImage 5649 5650 - 5652: 167(fvec3) Load 169(c3) - 5653: 52(float) CompositeExtract 5652 2 - 5654:6(float16_t) ImageSampleDrefImplicitLod 5651 5652 5653 - 5655: 208(ptr) AccessChain 5462(texel) 207 - 5656:6(float16_t) Load 5655 - 5657:6(float16_t) FAdd 5656 5654 - 5658: 208(ptr) AccessChain 5462(texel) 207 - Store 5658 5657 - 5659: 268 Load 5599(t1DArray) - 5660: 5466 Load 5535(sShadow) - 5661: 316 SampledImage 5659 5660 - 5662:154(f16vec2) Load 156(f16c2) - 5663: 52(float) Load 215(compare) - 5664:6(float16_t) Load 137(f16bias) - 5665:6(float16_t) ImageSampleDrefImplicitLod 5661 5662 5663 Bias 5664 - 5666: 208(ptr) AccessChain 5462(texel) 207 - 5667:6(float16_t) Load 5666 - 5668:6(float16_t) FAdd 5667 5665 - 5669: 208(ptr) AccessChain 5462(texel) 207 - Store 5669 5668 - 5670: 283 Load 5616(t2DArray) - 5671: 5466 Load 5535(sShadow) - 5672: 337 SampledImage 5670 5671 - 5673: 249(fvec4) Load 251(c4) - 5674: 52(float) CompositeExtract 5673 3 - 5675:6(float16_t) ImageSampleDrefImplicitLod 5672 5673 5674 - 5676: 208(ptr) AccessChain 5462(texel) 207 - 5677:6(float16_t) Load 5676 - 5678:6(float16_t) FAdd 5677 5675 - 5679: 208(ptr) AccessChain 5462(texel) 207 - Store 5679 5678 - 5680: 283 Load 5616(t2DArray) - 5681: 5466 Load 5535(sShadow) - 5682: 337 SampledImage 5680 5681 - 5683:175(f16vec3) Load 177(f16c3) - 5684: 52(float) Load 215(compare) - 5685:6(float16_t) ImageSampleDrefImplicitLod 5682 5683 5684 - 5686: 208(ptr) AccessChain 5462(texel) 207 - 5687:6(float16_t) Load 5686 - 5688:6(float16_t) FAdd 5687 5685 - 5689: 208(ptr) AccessChain 5462(texel) 207 - Store 5689 5688 - 5692: 356 Load 5691(t2DRect) - 5693: 5466 Load 5468(s) - 5694: 357 SampledImage 5692 5693 - 5695: 53(fvec2) Load 148(c2) - 5696: 7(f16vec4) ImageSampleImplicitLod 5694 5695 - 5697: 7(f16vec4) Load 5462(texel) - 5698: 7(f16vec4) FAdd 5697 5696 - Store 5462(texel) 5698 - 5699: 356 Load 5691(t2DRect) - 5700: 5466 Load 5468(s) - 5701: 357 SampledImage 5699 5700 - 5702:154(f16vec2) Load 156(f16c2) - 5703: 7(f16vec4) ImageSampleImplicitLod 5701 5702 - 5704: 7(f16vec4) Load 5462(texel) - 5705: 7(f16vec4) FAdd 5704 5703 - Store 5462(texel) 5705 - 5706: 356 Load 5691(t2DRect) - 5707: 5466 Load 5535(sShadow) - 5708: 371 SampledImage 5706 5707 - 5709: 167(fvec3) Load 169(c3) - 5710: 52(float) CompositeExtract 5709 2 - 5711:6(float16_t) ImageSampleDrefImplicitLod 5708 5709 5710 - 5712: 208(ptr) AccessChain 5462(texel) 207 - 5713:6(float16_t) Load 5712 - 5714:6(float16_t) FAdd 5713 5711 - 5715: 208(ptr) AccessChain 5462(texel) 207 - Store 5715 5714 - 5716: 356 Load 5691(t2DRect) - 5717: 5466 Load 5535(sShadow) - 5718: 371 SampledImage 5716 5717 - 5719:154(f16vec2) Load 156(f16c2) - 5720: 52(float) Load 215(compare) - 5721:6(float16_t) ImageSampleDrefImplicitLod 5718 5719 5720 - 5722: 208(ptr) AccessChain 5462(texel) 207 - 5723:6(float16_t) Load 5722 - 5724:6(float16_t) FAdd 5723 5721 - 5725: 208(ptr) AccessChain 5462(texel) 207 - Store 5725 5724 - 5726: 298 Load 5633(tCubeArray) - 5727: 5466 Load 5535(sShadow) - 5728: 391 SampledImage 5726 5727 - 5729: 249(fvec4) Load 251(c4) - 5730: 52(float) Load 215(compare) - 5731:6(float16_t) ImageSampleDrefImplicitLod 5728 5729 5730 - 5732: 208(ptr) AccessChain 5462(texel) 207 - 5733:6(float16_t) Load 5732 - 5734:6(float16_t) FAdd 5733 5731 - 5735: 208(ptr) AccessChain 5462(texel) 207 - Store 5735 5734 - 5736: 298 Load 5633(tCubeArray) - 5737: 5466 Load 5535(sShadow) - 5738: 391 SampledImage 5736 5737 - 5739: 7(f16vec4) Load 309(f16c4) - 5740: 52(float) Load 215(compare) - 5741:6(float16_t) ImageSampleDrefImplicitLod 5738 5739 5740 - 5742: 208(ptr) AccessChain 5462(texel) 207 - 5743:6(float16_t) Load 5742 - 5744:6(float16_t) FAdd 5743 5741 - 5745: 208(ptr) AccessChain 5462(texel) 207 - Store 5745 5744 - 5746: 7(f16vec4) Load 5462(texel) - ReturnValue 5746 + 5506(texel): 64(ptr) Variable Function + Store 5506(texel) 121 + 5509: 122 Load 5508(t1D) + 5513: 5510 Load 5512(s) + 5514: 123 SampledImage 5509 5513 + 5515: 52(float) Load 128(c1) + 5516: 7(f16vec4) ImageSampleImplicitLod 5514 5515 + 5517: 7(f16vec4) Load 5506(texel) + 5518: 7(f16vec4) FAdd 5517 5516 + Store 5506(texel) 5518 + 5519: 122 Load 5508(t1D) + 5520: 5510 Load 5512(s) + 5521: 123 SampledImage 5519 5520 + 5522:6(float16_t) Load 135(f16c1) + 5523:6(float16_t) Load 137(f16bias) + 5524: 7(f16vec4) ImageSampleImplicitLod 5521 5522 Bias 5523 + 5525: 7(f16vec4) Load 5506(texel) + 5526: 7(f16vec4) FAdd 5525 5524 + Store 5506(texel) 5526 + 5529: 142 Load 5528(t2D) + 5530: 5510 Load 5512(s) + 5531: 143 SampledImage 5529 5530 + 5532: 53(fvec2) Load 148(c2) + 5533: 7(f16vec4) ImageSampleImplicitLod 5531 5532 + 5534: 7(f16vec4) Load 5506(texel) + 5535: 7(f16vec4) FAdd 5534 5533 + Store 5506(texel) 5535 + 5536: 142 Load 5528(t2D) + 5537: 5510 Load 5512(s) + 5538: 143 SampledImage 5536 5537 + 5539:154(f16vec2) Load 156(f16c2) + 5540:6(float16_t) Load 137(f16bias) + 5541: 7(f16vec4) ImageSampleImplicitLod 5538 5539 Bias 5540 + 5542: 7(f16vec4) Load 5506(texel) + 5543: 7(f16vec4) FAdd 5542 5541 + Store 5506(texel) 5543 + 5546: 162 Load 5545(t3D) + 5547: 5510 Load 5512(s) + 5548: 163 SampledImage 5546 5547 + 5549: 167(fvec3) Load 169(c3) + 5550: 7(f16vec4) ImageSampleImplicitLod 5548 5549 + 5551: 7(f16vec4) Load 5506(texel) + 5552: 7(f16vec4) FAdd 5551 5550 + Store 5506(texel) 5552 + 5553: 162 Load 5545(t3D) + 5554: 5510 Load 5512(s) + 5555: 163 SampledImage 5553 5554 + 5556:175(f16vec3) Load 177(f16c3) + 5557:6(float16_t) Load 137(f16bias) + 5558: 7(f16vec4) ImageSampleImplicitLod 5555 5556 Bias 5557 + 5559: 7(f16vec4) Load 5506(texel) + 5560: 7(f16vec4) FAdd 5559 5558 + Store 5506(texel) 5560 + 5563: 183 Load 5562(tCube) + 5564: 5510 Load 5512(s) + 5565: 184 SampledImage 5563 5564 + 5566: 167(fvec3) Load 169(c3) + 5567: 7(f16vec4) ImageSampleImplicitLod 5565 5566 + 5568: 7(f16vec4) Load 5506(texel) + 5569: 7(f16vec4) FAdd 5568 5567 + Store 5506(texel) 5569 + 5570: 183 Load 5562(tCube) + 5571: 5510 Load 5512(s) + 5572: 184 SampledImage 5570 5571 + 5573:175(f16vec3) Load 177(f16c3) + 5574:6(float16_t) Load 137(f16bias) + 5575: 7(f16vec4) ImageSampleImplicitLod 5572 5573 Bias 5574 + 5576: 7(f16vec4) Load 5506(texel) + 5577: 7(f16vec4) FAdd 5576 5575 + Store 5506(texel) 5577 + 5578: 122 Load 5508(t1D) + 5580: 5510 Load 5579(sShadow) + 5581: 199 SampledImage 5578 5580 + 5582: 167(fvec3) Load 169(c3) + 5583: 52(float) CompositeExtract 5582 2 + 5584:6(float16_t) ImageSampleDrefImplicitLod 5581 5582 5583 + 5585: 208(ptr) AccessChain 5506(texel) 207 + 5586:6(float16_t) Load 5585 + 5587:6(float16_t) FAdd 5586 5584 + 5588: 208(ptr) AccessChain 5506(texel) 207 + Store 5588 5587 + 5589: 122 Load 5508(t1D) + 5590: 5510 Load 5579(sShadow) + 5591: 199 SampledImage 5589 5590 + 5592:154(f16vec2) Load 156(f16c2) + 5593: 52(float) Load 215(compare) + 5594:6(float16_t) Load 137(f16bias) + 5595:6(float16_t) ImageSampleDrefImplicitLod 5591 5592 5593 Bias 5594 + 5596: 208(ptr) AccessChain 5506(texel) 207 + 5597:6(float16_t) Load 5596 + 5598:6(float16_t) FAdd 5597 5595 + 5599: 208(ptr) AccessChain 5506(texel) 207 + Store 5599 5598 + 5600: 142 Load 5528(t2D) + 5601: 5510 Load 5579(sShadow) + 5602: 224 SampledImage 5600 5601 + 5603: 167(fvec3) Load 169(c3) + 5604: 52(float) CompositeExtract 5603 2 + 5605:6(float16_t) ImageSampleDrefImplicitLod 5602 5603 5604 + 5606: 208(ptr) AccessChain 5506(texel) 207 + 5607:6(float16_t) Load 5606 + 5608:6(float16_t) FAdd 5607 5605 + 5609: 208(ptr) AccessChain 5506(texel) 207 + Store 5609 5608 + 5610: 142 Load 5528(t2D) + 5611: 5510 Load 5579(sShadow) + 5612: 224 SampledImage 5610 5611 + 5613:154(f16vec2) Load 156(f16c2) + 5614: 52(float) Load 215(compare) + 5615:6(float16_t) Load 137(f16bias) + 5616:6(float16_t) ImageSampleDrefImplicitLod 5612 5613 5614 Bias 5615 + 5617: 208(ptr) AccessChain 5506(texel) 207 + 5618:6(float16_t) Load 5617 + 5619:6(float16_t) FAdd 5618 5616 + 5620: 208(ptr) AccessChain 5506(texel) 207 + Store 5620 5619 + 5621: 183 Load 5562(tCube) + 5622: 5510 Load 5579(sShadow) + 5623: 245 SampledImage 5621 5622 + 5624: 249(fvec4) Load 251(c4) + 5625: 52(float) CompositeExtract 5624 3 + 5626:6(float16_t) ImageSampleDrefImplicitLod 5623 5624 5625 + 5627: 208(ptr) AccessChain 5506(texel) 207 + 5628:6(float16_t) Load 5627 + 5629:6(float16_t) FAdd 5628 5626 + 5630: 208(ptr) AccessChain 5506(texel) 207 + Store 5630 5629 + 5631: 183 Load 5562(tCube) + 5632: 5510 Load 5579(sShadow) + 5633: 245 SampledImage 5631 5632 + 5634:175(f16vec3) Load 177(f16c3) + 5635: 52(float) Load 215(compare) + 5636:6(float16_t) Load 137(f16bias) + 5637:6(float16_t) ImageSampleDrefImplicitLod 5633 5634 5635 Bias 5636 + 5638: 208(ptr) AccessChain 5506(texel) 207 + 5639:6(float16_t) Load 5638 + 5640:6(float16_t) FAdd 5639 5637 + 5641: 208(ptr) AccessChain 5506(texel) 207 + Store 5641 5640 + 5644: 268 Load 5643(t1DArray) + 5645: 5510 Load 5512(s) + 5646: 269 SampledImage 5644 5645 + 5647: 53(fvec2) Load 148(c2) + 5648: 7(f16vec4) ImageSampleImplicitLod 5646 5647 + 5649: 7(f16vec4) Load 5506(texel) + 5650: 7(f16vec4) FAdd 5649 5648 + Store 5506(texel) 5650 + 5651: 268 Load 5643(t1DArray) + 5652: 5510 Load 5512(s) + 5653: 269 SampledImage 5651 5652 + 5654:154(f16vec2) Load 156(f16c2) + 5655:6(float16_t) Load 137(f16bias) + 5656: 7(f16vec4) ImageSampleImplicitLod 5653 5654 Bias 5655 + 5657: 7(f16vec4) Load 5506(texel) + 5658: 7(f16vec4) FAdd 5657 5656 + Store 5506(texel) 5658 + 5661: 283 Load 5660(t2DArray) + 5662: 5510 Load 5512(s) + 5663: 284 SampledImage 5661 5662 + 5664: 167(fvec3) Load 169(c3) + 5665: 7(f16vec4) ImageSampleImplicitLod 5663 5664 + 5666: 7(f16vec4) Load 5506(texel) + 5667: 7(f16vec4) FAdd 5666 5665 + Store 5506(texel) 5667 + 5668: 283 Load 5660(t2DArray) + 5669: 5510 Load 5512(s) + 5670: 284 SampledImage 5668 5669 + 5671:175(f16vec3) Load 177(f16c3) + 5672:6(float16_t) Load 137(f16bias) + 5673: 7(f16vec4) ImageSampleImplicitLod 5670 5671 Bias 5672 + 5674: 7(f16vec4) Load 5506(texel) + 5675: 7(f16vec4) FAdd 5674 5673 + Store 5506(texel) 5675 + 5678: 298 Load 5677(tCubeArray) + 5679: 5510 Load 5512(s) + 5680: 299 SampledImage 5678 5679 + 5681: 249(fvec4) Load 251(c4) + 5682: 7(f16vec4) ImageSampleImplicitLod 5680 5681 + 5683: 7(f16vec4) Load 5506(texel) + 5684: 7(f16vec4) FAdd 5683 5682 + Store 5506(texel) 5684 + 5685: 298 Load 5677(tCubeArray) + 5686: 5510 Load 5512(s) + 5687: 299 SampledImage 5685 5686 + 5688: 7(f16vec4) Load 309(f16c4) + 5689:6(float16_t) Load 137(f16bias) + 5690: 7(f16vec4) ImageSampleImplicitLod 5687 5688 Bias 5689 + 5691: 7(f16vec4) Load 5506(texel) + 5692: 7(f16vec4) FAdd 5691 5690 + Store 5506(texel) 5692 + 5693: 268 Load 5643(t1DArray) + 5694: 5510 Load 5579(sShadow) + 5695: 316 SampledImage 5693 5694 + 5696: 167(fvec3) Load 169(c3) + 5697: 52(float) CompositeExtract 5696 2 + 5698:6(float16_t) ImageSampleDrefImplicitLod 5695 5696 5697 + 5699: 208(ptr) AccessChain 5506(texel) 207 + 5700:6(float16_t) Load 5699 + 5701:6(float16_t) FAdd 5700 5698 + 5702: 208(ptr) AccessChain 5506(texel) 207 + Store 5702 5701 + 5703: 268 Load 5643(t1DArray) + 5704: 5510 Load 5579(sShadow) + 5705: 316 SampledImage 5703 5704 + 5706:154(f16vec2) Load 156(f16c2) + 5707: 52(float) Load 215(compare) + 5708:6(float16_t) Load 137(f16bias) + 5709:6(float16_t) ImageSampleDrefImplicitLod 5705 5706 5707 Bias 5708 + 5710: 208(ptr) AccessChain 5506(texel) 207 + 5711:6(float16_t) Load 5710 + 5712:6(float16_t) FAdd 5711 5709 + 5713: 208(ptr) AccessChain 5506(texel) 207 + Store 5713 5712 + 5714: 283 Load 5660(t2DArray) + 5715: 5510 Load 5579(sShadow) + 5716: 337 SampledImage 5714 5715 + 5717: 249(fvec4) Load 251(c4) + 5718: 52(float) CompositeExtract 5717 3 + 5719:6(float16_t) ImageSampleDrefImplicitLod 5716 5717 5718 + 5720: 208(ptr) AccessChain 5506(texel) 207 + 5721:6(float16_t) Load 5720 + 5722:6(float16_t) FAdd 5721 5719 + 5723: 208(ptr) AccessChain 5506(texel) 207 + Store 5723 5722 + 5724: 283 Load 5660(t2DArray) + 5725: 5510 Load 5579(sShadow) + 5726: 337 SampledImage 5724 5725 + 5727:175(f16vec3) Load 177(f16c3) + 5728: 52(float) Load 215(compare) + 5729:6(float16_t) ImageSampleDrefImplicitLod 5726 5727 5728 + 5730: 208(ptr) AccessChain 5506(texel) 207 + 5731:6(float16_t) Load 5730 + 5732:6(float16_t) FAdd 5731 5729 + 5733: 208(ptr) AccessChain 5506(texel) 207 + Store 5733 5732 + 5736: 356 Load 5735(t2DRect) + 5737: 5510 Load 5512(s) + 5738: 357 SampledImage 5736 5737 + 5739: 53(fvec2) Load 148(c2) + 5740: 7(f16vec4) ImageSampleImplicitLod 5738 5739 + 5741: 7(f16vec4) Load 5506(texel) + 5742: 7(f16vec4) FAdd 5741 5740 + Store 5506(texel) 5742 + 5743: 356 Load 5735(t2DRect) + 5744: 5510 Load 5512(s) + 5745: 357 SampledImage 5743 5744 + 5746:154(f16vec2) Load 156(f16c2) + 5747: 7(f16vec4) ImageSampleImplicitLod 5745 5746 + 5748: 7(f16vec4) Load 5506(texel) + 5749: 7(f16vec4) FAdd 5748 5747 + Store 5506(texel) 5749 + 5750: 356 Load 5735(t2DRect) + 5751: 5510 Load 5579(sShadow) + 5752: 371 SampledImage 5750 5751 + 5753: 167(fvec3) Load 169(c3) + 5754: 52(float) CompositeExtract 5753 2 + 5755:6(float16_t) ImageSampleDrefImplicitLod 5752 5753 5754 + 5756: 208(ptr) AccessChain 5506(texel) 207 + 5757:6(float16_t) Load 5756 + 5758:6(float16_t) FAdd 5757 5755 + 5759: 208(ptr) AccessChain 5506(texel) 207 + Store 5759 5758 + 5760: 356 Load 5735(t2DRect) + 5761: 5510 Load 5579(sShadow) + 5762: 371 SampledImage 5760 5761 + 5763:154(f16vec2) Load 156(f16c2) + 5764: 52(float) Load 215(compare) + 5765:6(float16_t) ImageSampleDrefImplicitLod 5762 5763 5764 + 5766: 208(ptr) AccessChain 5506(texel) 207 + 5767:6(float16_t) Load 5766 + 5768:6(float16_t) FAdd 5767 5765 + 5769: 208(ptr) AccessChain 5506(texel) 207 + Store 5769 5768 + 5770: 298 Load 5677(tCubeArray) + 5771: 5510 Load 5579(sShadow) + 5772: 391 SampledImage 5770 5771 + 5773: 249(fvec4) Load 251(c4) + 5774: 52(float) Load 215(compare) + 5775:6(float16_t) ImageSampleDrefImplicitLod 5772 5773 5774 + 5776: 208(ptr) AccessChain 5506(texel) 207 + 5777:6(float16_t) Load 5776 + 5778:6(float16_t) FAdd 5777 5775 + 5779: 208(ptr) AccessChain 5506(texel) 207 + Store 5779 5778 + 5780: 298 Load 5677(tCubeArray) + 5781: 5510 Load 5579(sShadow) + 5782: 391 SampledImage 5780 5781 + 5783: 7(f16vec4) Load 309(f16c4) + 5784: 52(float) Load 215(compare) + 5785:6(float16_t) ImageSampleDrefImplicitLod 5782 5783 5784 + 5786: 208(ptr) AccessChain 5506(texel) 207 + 5787:6(float16_t) Load 5786 + 5788:6(float16_t) FAdd 5787 5785 + 5789: 208(ptr) AccessChain 5506(texel) 207 + Store 5789 5788 + 5790: 7(f16vec4) Load 5506(texel) + ReturnValue 5790 FunctionEnd 117(testSubpassLoad(): 7(f16vec4) Function None 8 118: Label - 5752: 5749 Load 5751(subpass) - 5754: 7(f16vec4) ImageRead 5752 5753 - 5758: 5755 Load 5757(subpassMS) - 5759: 7(f16vec4) ImageRead 5758 5753 Sample 1326 - 5760: 7(f16vec4) FAdd 5754 5759 - ReturnValue 5760 + 5796: 5793 Load 5795(subpass) + 5798: 7(f16vec4) ImageRead 5796 5797 + 5802: 5799 Load 5801(subpassMS) + 5803: 7(f16vec4) ImageRead 5802 5797 Sample 1326 + 5804: 7(f16vec4) FAdd 5798 5803 + ReturnValue 5804 FunctionEnd diff --git a/Test/baseResults/spv.float32.frag.out b/Test/baseResults/spv.float32.frag.out index df734973e6..2ffa2311f0 100644 --- a/Test/baseResults/spv.float32.frag.out +++ b/Test/baseResults/spv.float32.frag.out @@ -1,7 +1,7 @@ spv.float32.frag // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 533 +// Id's are bound by 541 Capability Shader Capability Float16 @@ -83,52 +83,52 @@ spv.float32.frag Name 451 "f32v2" Name 469 "f32v" Name 471 "if32v" - Name 520 "S" - MemberName 520(S) 0 "x" - MemberName 520(S) 1 "y" - MemberName 520(S) 2 "z" - Name 522 "B1" - MemberName 522(B1) 0 "a" - MemberName 522(B1) 1 "b" - MemberName 522(B1) 2 "c" - MemberName 522(B1) 3 "d" - MemberName 522(B1) 4 "e" - MemberName 522(B1) 5 "f" - MemberName 522(B1) 6 "g" - MemberName 522(B1) 7 "h" - Name 524 "" - Name 525 "sf16" - Name 526 "sf" - Name 527 "sd" - Name 528 "f16_to_f" - Name 530 "f16_to_d" - Name 531 "f_to_f16" - Name 532 "d_to_f16" + Name 528 "S" + MemberName 528(S) 0 "x" + MemberName 528(S) 1 "y" + MemberName 528(S) 2 "z" + Name 530 "B1" + MemberName 530(B1) 0 "a" + MemberName 530(B1) 1 "b" + MemberName 530(B1) 2 "c" + MemberName 530(B1) 3 "d" + MemberName 530(B1) 4 "e" + MemberName 530(B1) 5 "f" + MemberName 530(B1) 6 "g" + MemberName 530(B1) 7 "h" + Name 532 "" + Name 533 "sf16" + Name 534 "sf" + Name 535 "sd" + Name 536 "f16_to_f" + Name 538 "f16_to_d" + Name 539 "f_to_f16" + Name 540 "d_to_f16" Decorate 471(if32v) Location 0 - Decorate 518 ArrayStride 16 - Decorate 519 ArrayStride 32 - MemberDecorate 520(S) 0 Offset 0 - MemberDecorate 520(S) 1 Offset 8 - MemberDecorate 520(S) 2 Offset 16 - Decorate 521 ArrayStride 32 - MemberDecorate 522(B1) 0 Offset 0 - MemberDecorate 522(B1) 1 Offset 8 - MemberDecorate 522(B1) 2 Offset 16 - MemberDecorate 522(B1) 3 Offset 32 - MemberDecorate 522(B1) 4 ColMajor - MemberDecorate 522(B1) 4 Offset 64 - MemberDecorate 522(B1) 4 MatrixStride 16 - MemberDecorate 522(B1) 5 ColMajor - MemberDecorate 522(B1) 5 Offset 96 - MemberDecorate 522(B1) 5 MatrixStride 16 - MemberDecorate 522(B1) 6 Offset 160 - MemberDecorate 522(B1) 7 Offset 192 - Decorate 522(B1) Block - Decorate 524 DescriptorSet 0 - Decorate 524 Binding 0 - Decorate 525(sf16) SpecId 100 - Decorate 526(sf) SpecId 101 - Decorate 527(sd) SpecId 102 + Decorate 526 ArrayStride 16 + Decorate 527 ArrayStride 32 + MemberDecorate 528(S) 0 Offset 0 + MemberDecorate 528(S) 1 Offset 8 + MemberDecorate 528(S) 2 Offset 16 + Decorate 529 ArrayStride 32 + MemberDecorate 530(B1) 0 Offset 0 + MemberDecorate 530(B1) 1 Offset 8 + MemberDecorate 530(B1) 2 Offset 16 + MemberDecorate 530(B1) 3 Offset 32 + MemberDecorate 530(B1) 4 ColMajor + MemberDecorate 530(B1) 4 Offset 64 + MemberDecorate 530(B1) 4 MatrixStride 16 + MemberDecorate 530(B1) 5 ColMajor + MemberDecorate 530(B1) 5 Offset 96 + MemberDecorate 530(B1) 5 MatrixStride 16 + MemberDecorate 530(B1) 6 Offset 160 + MemberDecorate 530(B1) 7 Offset 192 + Decorate 530(B1) Block + Decorate 532 DescriptorSet 0 + Decorate 532 Binding 0 + Decorate 533(sf16) SpecId 100 + Decorate 534(sf) SpecId 101 + Decorate 535(sd) SpecId 102 2: TypeVoid 3: TypeFunction 2 26: TypeFloat 32 @@ -197,25 +197,25 @@ spv.float32.frag 470: TypePointer Input 153(fvec3) 471(if32v): 470(ptr) Variable Input 472: TypePointer Input 26(float) - 509: 192(int) Constant 1 - 514: 26(float) Constant 1056964608 - 515: 27(fvec2) ConstantComposite 514 514 - 517: 31(int) Constant 2 - 518: TypeArray 26(float) 517 - 519: TypeArray 412 517 - 520(S): TypeStruct 26(float) 27(fvec2) 153(fvec3) - 521: TypeArray 520(S) 517 - 522(B1): TypeStruct 26(float) 27(fvec2) 153(fvec3) 518 412 519 520(S) 521 - 523: TypePointer Uniform 522(B1) - 524: 523(ptr) Variable Uniform - 525(sf16):172(float16_t) SpecConstant 12288 - 526(sf): 26(float) SpecConstant 1048576000 - 527(sd):149(float64_t) SpecConstant 0 1071644672 - 528(f16_to_f): 26(float) SpecConstantOp 115 525(sf16) - 529: 26(float) SpecConstantOp 115 525(sf16) - 530(f16_to_d):149(float64_t) SpecConstantOp 115 529 - 531(f_to_f16):172(float16_t) SpecConstantOp 115 526(sf) - 532(d_to_f16):172(float16_t) SpecConstantOp 115 527(sd) + 515: 192(int) Constant 1 + 522: 26(float) Constant 1056964608 + 523: 27(fvec2) ConstantComposite 522 522 + 525: 31(int) Constant 2 + 526: TypeArray 26(float) 525 + 527: TypeArray 412 525 + 528(S): TypeStruct 26(float) 27(fvec2) 153(fvec3) + 529: TypeArray 528(S) 525 + 530(B1): TypeStruct 26(float) 27(fvec2) 153(fvec3) 526 412 527 528(S) 529 + 531: TypePointer Uniform 530(B1) + 532: 531(ptr) Variable Uniform + 533(sf16):172(float16_t) SpecConstant 12288 + 534(sf): 26(float) SpecConstant 1048576000 + 535(sd):149(float64_t) SpecConstant 0 1071644672 + 536(f16_to_f): 26(float) SpecConstantOp 115 533(sf16) + 537: 26(float) SpecConstantOp 115 533(sf16) + 538(f16_to_d):149(float64_t) SpecConstantOp 115 537 + 539(f_to_f16):172(float16_t) SpecConstantOp 115 534(sf) + 540(d_to_f16):172(float16_t) SpecConstantOp 115 535(sd) 4(main): 2 Function None 3 5: Label Return @@ -765,45 +765,57 @@ spv.float32.frag 481: 153(fvec3) Load 471(if32v) 482: 27(fvec2) VectorShuffle 481 481 0 1 483: 27(fvec2) DPdxFine 482 - 484: 153(fvec3) Load 469(f32v) - 485: 153(fvec3) VectorShuffle 484 483 3 4 2 - Store 469(f32v) 485 - 486: 153(fvec3) Load 471(if32v) - 487: 27(fvec2) VectorShuffle 486 486 0 1 - 488: 27(fvec2) DPdyFine 487 - 489: 153(fvec3) Load 469(f32v) - 490: 153(fvec3) VectorShuffle 489 488 3 4 2 - Store 469(f32v) 490 - 491: 153(fvec3) Load 471(if32v) - 492: 153(fvec3) DPdxCoarse 491 - Store 469(f32v) 492 - 493: 153(fvec3) Load 471(if32v) - 494: 153(fvec3) DPdxCoarse 493 - Store 469(f32v) 494 - 495: 472(ptr) AccessChain 471(if32v) 32 - 496: 26(float) Load 495 - 497: 26(float) Fwidth 496 - 498: 33(ptr) AccessChain 469(f32v) 32 - Store 498 497 - 499: 153(fvec3) Load 471(if32v) - 500: 27(fvec2) VectorShuffle 499 499 0 1 - 501: 27(fvec2) FwidthFine 500 - 502: 153(fvec3) Load 469(f32v) - 503: 153(fvec3) VectorShuffle 502 501 3 4 2 - Store 469(f32v) 503 - 504: 153(fvec3) Load 471(if32v) - 505: 153(fvec3) FwidthCoarse 504 - Store 469(f32v) 505 - 506: 472(ptr) AccessChain 471(if32v) 32 - 507: 26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 506 - 508: 33(ptr) AccessChain 469(f32v) 32 - Store 508 507 - 510: 153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 471(if32v) 509 - 511: 27(fvec2) VectorShuffle 510 510 0 1 - 512: 153(fvec3) Load 469(f32v) - 513: 153(fvec3) VectorShuffle 512 511 3 4 2 - Store 469(f32v) 513 - 516: 153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 471(if32v) 515 - Store 469(f32v) 516 + 484: 33(ptr) AccessChain 469(f32v) 32 + 485: 26(float) CompositeExtract 483 0 + Store 484 485 + 486: 33(ptr) AccessChain 469(f32v) 88 + 487: 26(float) CompositeExtract 483 1 + Store 486 487 + 488: 153(fvec3) Load 471(if32v) + 489: 27(fvec2) VectorShuffle 488 488 0 1 + 490: 27(fvec2) DPdyFine 489 + 491: 33(ptr) AccessChain 469(f32v) 32 + 492: 26(float) CompositeExtract 490 0 + Store 491 492 + 493: 33(ptr) AccessChain 469(f32v) 88 + 494: 26(float) CompositeExtract 490 1 + Store 493 494 + 495: 153(fvec3) Load 471(if32v) + 496: 153(fvec3) DPdxCoarse 495 + Store 469(f32v) 496 + 497: 153(fvec3) Load 471(if32v) + 498: 153(fvec3) DPdxCoarse 497 + Store 469(f32v) 498 + 499: 472(ptr) AccessChain 471(if32v) 32 + 500: 26(float) Load 499 + 501: 26(float) Fwidth 500 + 502: 33(ptr) AccessChain 469(f32v) 32 + Store 502 501 + 503: 153(fvec3) Load 471(if32v) + 504: 27(fvec2) VectorShuffle 503 503 0 1 + 505: 27(fvec2) FwidthFine 504 + 506: 33(ptr) AccessChain 469(f32v) 32 + 507: 26(float) CompositeExtract 505 0 + Store 506 507 + 508: 33(ptr) AccessChain 469(f32v) 88 + 509: 26(float) CompositeExtract 505 1 + Store 508 509 + 510: 153(fvec3) Load 471(if32v) + 511: 153(fvec3) FwidthCoarse 510 + Store 469(f32v) 511 + 512: 472(ptr) AccessChain 471(if32v) 32 + 513: 26(float) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 512 + 514: 33(ptr) AccessChain 469(f32v) 32 + Store 514 513 + 516: 153(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 471(if32v) 515 + 517: 27(fvec2) VectorShuffle 516 516 0 1 + 518: 33(ptr) AccessChain 469(f32v) 32 + 519: 26(float) CompositeExtract 517 0 + Store 518 519 + 520: 33(ptr) AccessChain 469(f32v) 88 + 521: 26(float) CompositeExtract 517 1 + Store 520 521 + 524: 153(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 471(if32v) 523 + Store 469(f32v) 524 Return FunctionEnd diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out index 8a69367fe5..dfcfc2d772 100644 --- a/Test/baseResults/spv.float64.frag.out +++ b/Test/baseResults/spv.float64.frag.out @@ -2,7 +2,7 @@ spv.float64.frag Validation failed // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 524 +// Id's are bound by 532 Capability Shader Capability Float16 @@ -83,53 +83,53 @@ Validation failed Name 441 "f64v2" Name 459 "f64v" Name 461 "if64v" - Name 510 "S" - MemberName 510(S) 0 "x" - MemberName 510(S) 1 "y" - MemberName 510(S) 2 "z" - Name 512 "B1" - MemberName 512(B1) 0 "a" - MemberName 512(B1) 1 "b" - MemberName 512(B1) 2 "c" - MemberName 512(B1) 3 "d" - MemberName 512(B1) 4 "e" - MemberName 512(B1) 5 "f" - MemberName 512(B1) 6 "g" - MemberName 512(B1) 7 "h" - Name 514 "" - Name 515 "sf16" - Name 517 "sf" - Name 518 "sd" - Name 519 "f16_to_f" - Name 521 "f16_to_d" - Name 522 "f_to_f16" - Name 523 "d_to_f16" + Name 518 "S" + MemberName 518(S) 0 "x" + MemberName 518(S) 1 "y" + MemberName 518(S) 2 "z" + Name 520 "B1" + MemberName 520(B1) 0 "a" + MemberName 520(B1) 1 "b" + MemberName 520(B1) 2 "c" + MemberName 520(B1) 3 "d" + MemberName 520(B1) 4 "e" + MemberName 520(B1) 5 "f" + MemberName 520(B1) 6 "g" + MemberName 520(B1) 7 "h" + Name 522 "" + Name 523 "sf16" + Name 525 "sf" + Name 526 "sd" + Name 527 "f16_to_f" + Name 529 "f16_to_d" + Name 530 "f_to_f16" + Name 531 "d_to_f16" Decorate 461(if64v) Flat Decorate 461(if64v) Location 0 - Decorate 508 ArrayStride 16 - Decorate 509 ArrayStride 64 - MemberDecorate 510(S) 0 Offset 0 - MemberDecorate 510(S) 1 Offset 16 - MemberDecorate 510(S) 2 Offset 32 - Decorate 511 ArrayStride 64 - MemberDecorate 512(B1) 0 Offset 0 - MemberDecorate 512(B1) 1 Offset 16 - MemberDecorate 512(B1) 2 Offset 32 - MemberDecorate 512(B1) 3 Offset 64 - MemberDecorate 512(B1) 4 ColMajor - MemberDecorate 512(B1) 4 Offset 96 - MemberDecorate 512(B1) 4 MatrixStride 32 - MemberDecorate 512(B1) 5 ColMajor - MemberDecorate 512(B1) 5 Offset 160 - MemberDecorate 512(B1) 5 MatrixStride 32 - MemberDecorate 512(B1) 6 Offset 288 - MemberDecorate 512(B1) 7 Offset 352 - Decorate 512(B1) Block - Decorate 514 DescriptorSet 0 - Decorate 514 Binding 0 - Decorate 515(sf16) SpecId 100 - Decorate 517(sf) SpecId 101 - Decorate 518(sd) SpecId 102 + Decorate 516 ArrayStride 16 + Decorate 517 ArrayStride 64 + MemberDecorate 518(S) 0 Offset 0 + MemberDecorate 518(S) 1 Offset 16 + MemberDecorate 518(S) 2 Offset 32 + Decorate 519 ArrayStride 64 + MemberDecorate 520(B1) 0 Offset 0 + MemberDecorate 520(B1) 1 Offset 16 + MemberDecorate 520(B1) 2 Offset 32 + MemberDecorate 520(B1) 3 Offset 64 + MemberDecorate 520(B1) 4 ColMajor + MemberDecorate 520(B1) 4 Offset 96 + MemberDecorate 520(B1) 4 MatrixStride 32 + MemberDecorate 520(B1) 5 ColMajor + MemberDecorate 520(B1) 5 Offset 160 + MemberDecorate 520(B1) 5 MatrixStride 32 + MemberDecorate 520(B1) 6 Offset 288 + MemberDecorate 520(B1) 7 Offset 352 + Decorate 520(B1) Block + Decorate 522 DescriptorSet 0 + Decorate 522 Binding 0 + Decorate 523(sf16) SpecId 100 + Decorate 525(sf) SpecId 101 + Decorate 526(sd) SpecId 102 2: TypeVoid 3: TypeFunction 2 26: TypeFloat 64 @@ -195,26 +195,26 @@ Validation failed 460: TypePointer Input 149(f64vec3) 461(if64v): 460(ptr) Variable Input 462: TypePointer Input 26(float64_t) - 499: 182(int) Constant 1 - 504:26(float64_t) Constant 0 1071644672 - 505: 27(f64vec2) ConstantComposite 504 504 - 507: 31(int) Constant 2 - 508: TypeArray 26(float64_t) 507 - 509: TypeArray 402 507 - 510(S): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) - 511: TypeArray 510(S) 507 - 512(B1): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) 508 402 509 510(S) 511 - 513: TypePointer Uniform 512(B1) - 514: 513(ptr) Variable Uniform - 515(sf16):162(float16_t) SpecConstant 12288 - 516: TypeFloat 32 - 517(sf): 516(float) SpecConstant 1048576000 - 518(sd):26(float64_t) SpecConstant 0 1071644672 - 519(f16_to_f): 516(float) SpecConstantOp 115 515(sf16) - 520: 516(float) SpecConstantOp 115 515(sf16) - 521(f16_to_d):26(float64_t) SpecConstantOp 115 520 - 522(f_to_f16):162(float16_t) SpecConstantOp 115 517(sf) - 523(d_to_f16):162(float16_t) SpecConstantOp 115 518(sd) + 505: 182(int) Constant 1 + 512:26(float64_t) Constant 0 1071644672 + 513: 27(f64vec2) ConstantComposite 512 512 + 515: 31(int) Constant 2 + 516: TypeArray 26(float64_t) 515 + 517: TypeArray 402 515 + 518(S): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) + 519: TypeArray 518(S) 515 + 520(B1): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) 516 402 517 518(S) 519 + 521: TypePointer Uniform 520(B1) + 522: 521(ptr) Variable Uniform + 523(sf16):162(float16_t) SpecConstant 12288 + 524: TypeFloat 32 + 525(sf): 524(float) SpecConstant 1048576000 + 526(sd):26(float64_t) SpecConstant 0 1071644672 + 527(f16_to_f): 524(float) SpecConstantOp 115 523(sf16) + 528: 524(float) SpecConstantOp 115 523(sf16) + 529(f16_to_d):26(float64_t) SpecConstantOp 115 528 + 530(f_to_f16):162(float16_t) SpecConstantOp 115 525(sf) + 531(d_to_f16):162(float16_t) SpecConstantOp 115 526(sd) 4(main): 2 Function None 3 5: Label Return @@ -754,45 +754,57 @@ Validation failed 471:149(f64vec3) Load 461(if64v) 472: 27(f64vec2) VectorShuffle 471 471 0 1 473: 27(f64vec2) DPdxFine 472 - 474:149(f64vec3) Load 459(f64v) - 475:149(f64vec3) VectorShuffle 474 473 3 4 2 - Store 459(f64v) 475 - 476:149(f64vec3) Load 461(if64v) - 477: 27(f64vec2) VectorShuffle 476 476 0 1 - 478: 27(f64vec2) DPdyFine 477 - 479:149(f64vec3) Load 459(f64v) - 480:149(f64vec3) VectorShuffle 479 478 3 4 2 - Store 459(f64v) 480 - 481:149(f64vec3) Load 461(if64v) - 482:149(f64vec3) DPdxCoarse 481 - Store 459(f64v) 482 - 483:149(f64vec3) Load 461(if64v) - 484:149(f64vec3) DPdxCoarse 483 - Store 459(f64v) 484 - 485: 462(ptr) AccessChain 461(if64v) 32 - 486:26(float64_t) Load 485 - 487:26(float64_t) Fwidth 486 - 488: 33(ptr) AccessChain 459(f64v) 32 - Store 488 487 - 489:149(f64vec3) Load 461(if64v) - 490: 27(f64vec2) VectorShuffle 489 489 0 1 - 491: 27(f64vec2) FwidthFine 490 - 492:149(f64vec3) Load 459(f64v) - 493:149(f64vec3) VectorShuffle 492 491 3 4 2 - Store 459(f64v) 493 - 494:149(f64vec3) Load 461(if64v) - 495:149(f64vec3) FwidthCoarse 494 - Store 459(f64v) 495 - 496: 462(ptr) AccessChain 461(if64v) 32 - 497:26(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 496 - 498: 33(ptr) AccessChain 459(f64v) 32 - Store 498 497 - 500:149(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 461(if64v) 499 - 501: 27(f64vec2) VectorShuffle 500 500 0 1 - 502:149(f64vec3) Load 459(f64v) - 503:149(f64vec3) VectorShuffle 502 501 3 4 2 - Store 459(f64v) 503 - 506:149(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 461(if64v) 505 - Store 459(f64v) 506 + 474: 33(ptr) AccessChain 459(f64v) 32 + 475:26(float64_t) CompositeExtract 473 0 + Store 474 475 + 476: 33(ptr) AccessChain 459(f64v) 88 + 477:26(float64_t) CompositeExtract 473 1 + Store 476 477 + 478:149(f64vec3) Load 461(if64v) + 479: 27(f64vec2) VectorShuffle 478 478 0 1 + 480: 27(f64vec2) DPdyFine 479 + 481: 33(ptr) AccessChain 459(f64v) 32 + 482:26(float64_t) CompositeExtract 480 0 + Store 481 482 + 483: 33(ptr) AccessChain 459(f64v) 88 + 484:26(float64_t) CompositeExtract 480 1 + Store 483 484 + 485:149(f64vec3) Load 461(if64v) + 486:149(f64vec3) DPdxCoarse 485 + Store 459(f64v) 486 + 487:149(f64vec3) Load 461(if64v) + 488:149(f64vec3) DPdxCoarse 487 + Store 459(f64v) 488 + 489: 462(ptr) AccessChain 461(if64v) 32 + 490:26(float64_t) Load 489 + 491:26(float64_t) Fwidth 490 + 492: 33(ptr) AccessChain 459(f64v) 32 + Store 492 491 + 493:149(f64vec3) Load 461(if64v) + 494: 27(f64vec2) VectorShuffle 493 493 0 1 + 495: 27(f64vec2) FwidthFine 494 + 496: 33(ptr) AccessChain 459(f64v) 32 + 497:26(float64_t) CompositeExtract 495 0 + Store 496 497 + 498: 33(ptr) AccessChain 459(f64v) 88 + 499:26(float64_t) CompositeExtract 495 1 + Store 498 499 + 500:149(f64vec3) Load 461(if64v) + 501:149(f64vec3) FwidthCoarse 500 + Store 459(f64v) 501 + 502: 462(ptr) AccessChain 461(if64v) 32 + 503:26(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 502 + 504: 33(ptr) AccessChain 459(f64v) 32 + Store 504 503 + 506:149(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 461(if64v) 505 + 507: 27(f64vec2) VectorShuffle 506 506 0 1 + 508: 33(ptr) AccessChain 459(f64v) 32 + 509:26(float64_t) CompositeExtract 507 0 + Store 508 509 + 510: 33(ptr) AccessChain 459(f64v) 88 + 511:26(float64_t) CompositeExtract 507 1 + Store 510 511 + 514:149(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 461(if64v) 513 + Store 459(f64v) 514 Return FunctionEnd diff --git a/Test/baseResults/spv.forLoop.frag.out b/Test/baseResults/spv.forLoop.frag.out index 1aac9a6d35..3a36667776 100644 --- a/Test/baseResults/spv.forLoop.frag.out +++ b/Test/baseResults/spv.forLoop.frag.out @@ -1,12 +1,12 @@ spv.forLoop.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 131 +// Id's are bound by 143 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 11 24 28 36 53 104 + EntryPoint Fragment 4 "main" 11 24 28 36 53 111 ExecutionMode 4 OriginUpperLeft Source GLSL 140 Name 4 "main" @@ -22,9 +22,9 @@ spv.forLoop.frag Name 63 "i" Name 71 "tv4" Name 88 "r" - Name 94 "i" - Name 104 "f" - Name 117 "i" + Name 101 "i" + Name 111 "f" + Name 129 "i" Decorate 11(BaseColor) Location 1 Decorate 24(Count) Flat Decorate 24(Count) Location 3 @@ -32,7 +32,7 @@ spv.forLoop.frag Decorate 36(gl_FragColor) Location 0 Decorate 53(v4) Flat Decorate 53(v4) Location 4 - Decorate 104(f) Location 2 + Decorate 111(f) Location 2 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -60,10 +60,14 @@ spv.forLoop.frag 55: TypePointer Input 50(int) 76: 50(int) Constant 4 89: TypeVector 6(float) 3 - 103: TypePointer Input 6(float) - 104(f): 103(ptr) Variable Input - 106: 50(int) Constant 3 - 124: 13(int) Constant 16 + 92: 50(int) Constant 0 + 95: 50(int) Constant 1 + 98: 50(int) Constant 2 + 110: TypePointer Input 6(float) + 111(f): 110(ptr) Variable Input + 113: 50(int) Constant 3 + 122: TypePointer Output 6(float) + 136: 13(int) Constant 16 4(main): 2 Function None 3 5: Label 9(color): 8(ptr) Variable Function @@ -73,8 +77,8 @@ spv.forLoop.frag 63(i): 14(ptr) Variable Function 71(tv4): 8(ptr) Variable Function 88(r): 8(ptr) Variable Function - 94(i): 14(ptr) Variable Function - 117(i): 14(ptr) Variable Function + 101(i): 14(ptr) Variable Function + 129(i): 14(ptr) Variable Function 12: 7(fvec4) Load 11(BaseColor) Store 9(color) 12 Store 15(i) 16 @@ -160,58 +164,70 @@ spv.forLoop.frag Store 36(gl_FragColor) 87 90: 7(fvec4) Load 11(BaseColor) 91: 89(fvec3) VectorShuffle 90 90 0 1 2 - 92: 7(fvec4) Load 88(r) - 93: 7(fvec4) VectorShuffle 92 91 4 5 6 3 - Store 88(r) 93 - Store 94(i) 16 - Branch 95 - 95: Label - LoopMerge 97 98 None - Branch 99 - 99: Label - 100: 13(int) Load 94(i) - 101: 13(int) Load 24(Count) - 102: 26(bool) SLessThan 100 101 - BranchConditional 102 96 97 - 96: Label - 105: 6(float) Load 104(f) - 107: 38(ptr) AccessChain 88(r) 106 - Store 107 105 - Branch 98 - 98: Label - 108: 13(int) Load 94(i) - 109: 13(int) IAdd 108 33 - Store 94(i) 109 - Branch 95 - 97: Label - 110: 7(fvec4) Load 88(r) - 111: 89(fvec3) VectorShuffle 110 110 0 1 2 - 112: 7(fvec4) Load 36(gl_FragColor) - 113: 89(fvec3) VectorShuffle 112 112 0 1 2 - 114: 89(fvec3) FAdd 113 111 - 115: 7(fvec4) Load 36(gl_FragColor) - 116: 7(fvec4) VectorShuffle 115 114 4 5 6 3 - Store 36(gl_FragColor) 116 - Store 117(i) 16 - Branch 118 - 118: Label - LoopMerge 120 121 None - Branch 122 - 122: Label - 123: 13(int) Load 117(i) - 125: 26(bool) SLessThan 123 124 - BranchConditional 125 119 120 - 119: Label - 126: 6(float) Load 104(f) - 127: 7(fvec4) Load 36(gl_FragColor) - 128: 7(fvec4) VectorTimesScalar 127 126 - Store 36(gl_FragColor) 128 - Branch 121 - 121: Label - 129: 13(int) Load 117(i) - 130: 13(int) IAdd 129 48 - Store 117(i) 130 - Branch 118 - 120: Label + 93: 38(ptr) AccessChain 88(r) 92 + 94: 6(float) CompositeExtract 91 0 + Store 93 94 + 96: 38(ptr) AccessChain 88(r) 95 + 97: 6(float) CompositeExtract 91 1 + Store 96 97 + 99: 38(ptr) AccessChain 88(r) 98 + 100: 6(float) CompositeExtract 91 2 + Store 99 100 + Store 101(i) 16 + Branch 102 + 102: Label + LoopMerge 104 105 None + Branch 106 + 106: Label + 107: 13(int) Load 101(i) + 108: 13(int) Load 24(Count) + 109: 26(bool) SLessThan 107 108 + BranchConditional 109 103 104 + 103: Label + 112: 6(float) Load 111(f) + 114: 38(ptr) AccessChain 88(r) 113 + Store 114 112 + Branch 105 + 105: Label + 115: 13(int) Load 101(i) + 116: 13(int) IAdd 115 33 + Store 101(i) 116 + Branch 102 + 104: Label + 117: 7(fvec4) Load 88(r) + 118: 89(fvec3) VectorShuffle 117 117 0 1 2 + 119: 7(fvec4) Load 36(gl_FragColor) + 120: 89(fvec3) VectorShuffle 119 119 0 1 2 + 121: 89(fvec3) FAdd 120 118 + 123: 122(ptr) AccessChain 36(gl_FragColor) 92 + 124: 6(float) CompositeExtract 121 0 + Store 123 124 + 125: 122(ptr) AccessChain 36(gl_FragColor) 95 + 126: 6(float) CompositeExtract 121 1 + Store 125 126 + 127: 122(ptr) AccessChain 36(gl_FragColor) 98 + 128: 6(float) CompositeExtract 121 2 + Store 127 128 + Store 129(i) 16 + Branch 130 + 130: Label + LoopMerge 132 133 None + Branch 134 + 134: Label + 135: 13(int) Load 129(i) + 137: 26(bool) SLessThan 135 136 + BranchConditional 137 131 132 + 131: Label + 138: 6(float) Load 111(f) + 139: 7(fvec4) Load 36(gl_FragColor) + 140: 7(fvec4) VectorTimesScalar 139 138 + Store 36(gl_FragColor) 140 + Branch 133 + 133: Label + 141: 13(int) Load 129(i) + 142: 13(int) IAdd 141 48 + Store 129(i) 142 + Branch 130 + 132: Label Return FunctionEnd diff --git a/Test/baseResults/spv.image.frag.out b/Test/baseResults/spv.image.frag.out index 3e2096d7a9..5fbb922e12 100644 --- a/Test/baseResults/spv.image.frag.out +++ b/Test/baseResults/spv.image.frag.out @@ -2,7 +2,7 @@ spv.image.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 395 +// Id's are bound by 405 Capability Shader Capability StorageImageMultisample @@ -16,79 +16,79 @@ Validation failed Capability StorageImageWriteWithoutFormat 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 132 142 152 248 381 394 + EntryPoint Fragment 4 "main" 143 153 163 258 391 404 ExecutionMode 4 OriginUpperLeft Source GLSL 450 Name 4 "main" Name 9 "iv" Name 15 "i1D" Name 27 "i2D" - Name 38 "i3D" - Name 45 "iCube" - Name 55 "iCubeArray" - Name 62 "i2DRect" - Name 72 "i1DArray" - Name 82 "i2DArray" - Name 89 "iBuffer" - Name 98 "i2DMS" - Name 108 "i2DMSArray" - Name 127 "v" - Name 132 "ic1D" - Name 142 "ic2D" - Name 152 "ic3D" - Name 229 "ui" - Name 232 "ii1D" - Name 245 "ui2D" - Name 248 "value" - Name 357 "ii2DMS" - Name 367 "ui2DMSArray" - Name 376 "wo2D" - Name 381 "fragData" - Name 394 "ic4D" + Name 41 "i3D" + Name 48 "iCube" + Name 60 "iCubeArray" + Name 67 "i2DRect" + Name 79 "i1DArray" + Name 91 "i2DArray" + Name 98 "iBuffer" + Name 107 "i2DMS" + Name 119 "i2DMSArray" + Name 138 "v" + Name 143 "ic1D" + Name 153 "ic2D" + Name 163 "ic3D" + Name 240 "ui" + Name 243 "ii1D" + Name 255 "ui2D" + Name 258 "value" + Name 367 "ii2DMS" + Name 377 "ui2DMSArray" + Name 386 "wo2D" + Name 391 "fragData" + Name 404 "ic4D" Decorate 15(i1D) DescriptorSet 0 Decorate 15(i1D) Binding 0 Decorate 27(i2D) DescriptorSet 0 Decorate 27(i2D) Binding 1 - Decorate 38(i3D) DescriptorSet 0 - Decorate 38(i3D) Binding 2 - Decorate 45(iCube) DescriptorSet 0 - Decorate 45(iCube) Binding 3 - Decorate 55(iCubeArray) DescriptorSet 0 - Decorate 55(iCubeArray) Binding 4 - Decorate 62(i2DRect) DescriptorSet 0 - Decorate 62(i2DRect) Binding 5 - Decorate 72(i1DArray) DescriptorSet 0 - Decorate 72(i1DArray) Binding 6 - Decorate 82(i2DArray) DescriptorSet 0 - Decorate 82(i2DArray) Binding 7 - Decorate 89(iBuffer) DescriptorSet 0 - Decorate 89(iBuffer) Binding 8 - Decorate 98(i2DMS) DescriptorSet 0 - Decorate 98(i2DMS) Binding 9 - Decorate 108(i2DMSArray) DescriptorSet 0 - Decorate 108(i2DMSArray) Binding 10 - Decorate 132(ic1D) Flat - Decorate 132(ic1D) Location 0 - Decorate 142(ic2D) Flat - Decorate 142(ic2D) Location 1 - Decorate 152(ic3D) Flat - Decorate 152(ic3D) Location 2 - Decorate 232(ii1D) DescriptorSet 0 - Decorate 232(ii1D) Binding 11 - Decorate 245(ui2D) DescriptorSet 0 - Decorate 245(ui2D) Binding 12 - Decorate 248(value) Flat - Decorate 248(value) Location 4 - Decorate 357(ii2DMS) DescriptorSet 0 - Decorate 357(ii2DMS) Binding 13 - Decorate 367(ui2DMSArray) DescriptorSet 0 - Decorate 367(ui2DMSArray) Binding 14 - Decorate 376(wo2D) DescriptorSet 0 - Decorate 376(wo2D) Binding 1 - Decorate 376(wo2D) NonReadable - Decorate 381(fragData) Location 0 - Decorate 394(ic4D) Flat - Decorate 394(ic4D) Location 3 + Decorate 41(i3D) DescriptorSet 0 + Decorate 41(i3D) Binding 2 + Decorate 48(iCube) DescriptorSet 0 + Decorate 48(iCube) Binding 3 + Decorate 60(iCubeArray) DescriptorSet 0 + Decorate 60(iCubeArray) Binding 4 + Decorate 67(i2DRect) DescriptorSet 0 + Decorate 67(i2DRect) Binding 5 + Decorate 79(i1DArray) DescriptorSet 0 + Decorate 79(i1DArray) Binding 6 + Decorate 91(i2DArray) DescriptorSet 0 + Decorate 91(i2DArray) Binding 7 + Decorate 98(iBuffer) DescriptorSet 0 + Decorate 98(iBuffer) Binding 8 + Decorate 107(i2DMS) DescriptorSet 0 + Decorate 107(i2DMS) Binding 9 + Decorate 119(i2DMSArray) DescriptorSet 0 + Decorate 119(i2DMSArray) Binding 10 + Decorate 143(ic1D) Flat + Decorate 143(ic1D) Location 0 + Decorate 153(ic2D) Flat + Decorate 153(ic2D) Location 1 + Decorate 163(ic3D) Flat + Decorate 163(ic3D) Location 2 + Decorate 243(ii1D) DescriptorSet 0 + Decorate 243(ii1D) Binding 11 + Decorate 255(ui2D) DescriptorSet 0 + Decorate 255(ui2D) Binding 12 + Decorate 258(value) Flat + Decorate 258(value) Location 4 + Decorate 367(ii2DMS) DescriptorSet 0 + Decorate 367(ii2DMS) Binding 13 + Decorate 377(ui2DMSArray) DescriptorSet 0 + Decorate 377(ui2DMSArray) Binding 14 + Decorate 386(wo2D) DescriptorSet 0 + Decorate 386(wo2D) Binding 1 + Decorate 386(wo2D) NonReadable + Decorate 391(fragData) Location 0 + Decorate 404(ic4D) Flat + Decorate 404(ic4D) Location 3 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -107,90 +107,90 @@ Validation failed 26: TypePointer UniformConstant 25 27(i2D): 26(ptr) Variable UniformConstant 29: TypeVector 6(int) 2 - 36: TypeImage 12(float) 3D nonsampled format:Rgba32f - 37: TypePointer UniformConstant 36 - 38(i3D): 37(ptr) Variable UniformConstant - 43: TypeImage 12(float) Cube nonsampled format:Rgba32f - 44: TypePointer UniformConstant 43 - 45(iCube): 44(ptr) Variable UniformConstant - 53: TypeImage 12(float) Cube array nonsampled format:Rgba32f - 54: TypePointer UniformConstant 53 - 55(iCubeArray): 54(ptr) Variable UniformConstant - 60: TypeImage 12(float) Rect nonsampled format:Rgba32f - 61: TypePointer UniformConstant 60 - 62(i2DRect): 61(ptr) Variable UniformConstant - 70: TypeImage 12(float) 1D array nonsampled format:Rgba32f - 71: TypePointer UniformConstant 70 - 72(i1DArray): 71(ptr) Variable UniformConstant - 80: TypeImage 12(float) 2D array nonsampled format:Rg16 - 81: TypePointer UniformConstant 80 - 82(i2DArray): 81(ptr) Variable UniformConstant - 87: TypeImage 12(float) Buffer nonsampled format:Rgba32f - 88: TypePointer UniformConstant 87 - 89(iBuffer): 88(ptr) Variable UniformConstant - 96: TypeImage 12(float) 2D multi-sampled nonsampled format:Rgba32f + 36: 18(int) Constant 1 + 39: TypeImage 12(float) 3D nonsampled format:Rgba32f + 40: TypePointer UniformConstant 39 + 41(i3D): 40(ptr) Variable UniformConstant + 46: TypeImage 12(float) Cube nonsampled format:Rgba32f + 47: TypePointer UniformConstant 46 + 48(iCube): 47(ptr) Variable UniformConstant + 58: TypeImage 12(float) Cube array nonsampled format:Rgba32f + 59: TypePointer UniformConstant 58 + 60(iCubeArray): 59(ptr) Variable UniformConstant + 65: TypeImage 12(float) Rect nonsampled format:Rgba32f + 66: TypePointer UniformConstant 65 + 67(i2DRect): 66(ptr) Variable UniformConstant + 77: TypeImage 12(float) 1D array nonsampled format:Rgba32f + 78: TypePointer UniformConstant 77 + 79(i1DArray): 78(ptr) Variable UniformConstant + 89: TypeImage 12(float) 2D array nonsampled format:Rg16 + 90: TypePointer UniformConstant 89 + 91(i2DArray): 90(ptr) Variable UniformConstant + 96: TypeImage 12(float) Buffer nonsampled format:Rgba32f 97: TypePointer UniformConstant 96 - 98(i2DMS): 97(ptr) Variable UniformConstant - 106: TypeImage 12(float) 2D array multi-sampled nonsampled format:Rgba32f - 107: TypePointer UniformConstant 106 - 108(i2DMSArray): 107(ptr) Variable UniformConstant - 125: TypeVector 12(float) 4 - 126: TypePointer Function 125(fvec4) - 128: 12(float) Constant 0 - 129: 125(fvec4) ConstantComposite 128 128 128 128 - 131: TypePointer Input 6(int) - 132(ic1D): 131(ptr) Variable Input - 141: TypePointer Input 29(ivec2) - 142(ic2D): 141(ptr) Variable Input - 151: TypePointer Input 7(ivec3) - 152(ic3D): 151(ptr) Variable Input - 210: 6(int) Constant 1 - 216: 6(int) Constant 2 - 220: 6(int) Constant 3 - 226: 6(int) Constant 4 - 228: TypePointer Function 18(int) - 230: TypeImage 6(int) 1D nonsampled format:R32i - 231: TypePointer UniformConstant 230 - 232(ii1D): 231(ptr) Variable UniformConstant - 234: 6(int) Constant 10 - 235: TypePointer Image 6(int) - 237: 18(int) Constant 1 - 243: TypeImage 18(int) 2D nonsampled format:R32ui - 244: TypePointer UniformConstant 243 - 245(ui2D): 244(ptr) Variable UniformConstant - 247: TypePointer Input 18(int) - 248(value): 247(ptr) Variable Input - 250: TypePointer Image 18(int) - 256: 6(int) Constant 11 - 270: 6(int) Constant 12 - 284: 6(int) Constant 13 - 298: 6(int) Constant 14 - 312: 6(int) Constant 15 - 326: 6(int) Constant 16 - 340: 6(int) Constant 18 - 341: 6(int) Constant 17 - 349: 18(int) Constant 19 - 355: TypeImage 6(int) 2D multi-sampled nonsampled format:R32i - 356: TypePointer UniformConstant 355 - 357(ii2DMS): 356(ptr) Variable UniformConstant - 365: TypeImage 18(int) 2D array multi-sampled nonsampled format:R32ui + 98(iBuffer): 97(ptr) Variable UniformConstant + 105: TypeImage 12(float) 2D multi-sampled nonsampled format:Rgba32f + 106: TypePointer UniformConstant 105 + 107(i2DMS): 106(ptr) Variable UniformConstant + 117: TypeImage 12(float) 2D array multi-sampled nonsampled format:Rgba32f + 118: TypePointer UniformConstant 117 + 119(i2DMSArray): 118(ptr) Variable UniformConstant + 136: TypeVector 12(float) 4 + 137: TypePointer Function 136(fvec4) + 139: 12(float) Constant 0 + 140: 136(fvec4) ConstantComposite 139 139 139 139 + 142: TypePointer Input 6(int) + 143(ic1D): 142(ptr) Variable Input + 152: TypePointer Input 29(ivec2) + 153(ic2D): 152(ptr) Variable Input + 162: TypePointer Input 7(ivec3) + 163(ic3D): 162(ptr) Variable Input + 221: 6(int) Constant 1 + 227: 6(int) Constant 2 + 231: 6(int) Constant 3 + 237: 6(int) Constant 4 + 239: TypePointer Function 18(int) + 241: TypeImage 6(int) 1D nonsampled format:R32i + 242: TypePointer UniformConstant 241 + 243(ii1D): 242(ptr) Variable UniformConstant + 245: 6(int) Constant 10 + 246: TypePointer Image 6(int) + 253: TypeImage 18(int) 2D nonsampled format:R32ui + 254: TypePointer UniformConstant 253 + 255(ui2D): 254(ptr) Variable UniformConstant + 257: TypePointer Input 18(int) + 258(value): 257(ptr) Variable Input + 260: TypePointer Image 18(int) + 266: 6(int) Constant 11 + 280: 6(int) Constant 12 + 294: 6(int) Constant 13 + 308: 6(int) Constant 14 + 322: 6(int) Constant 15 + 336: 6(int) Constant 16 + 350: 6(int) Constant 18 + 351: 6(int) Constant 17 + 359: 18(int) Constant 19 + 365: TypeImage 6(int) 2D multi-sampled nonsampled format:R32i 366: TypePointer UniformConstant 365 -367(ui2DMSArray): 366(ptr) Variable UniformConstant - 374: TypeImage 12(float) 2D nonsampled format:Unknown - 375: TypePointer UniformConstant 374 - 376(wo2D): 375(ptr) Variable UniformConstant - 380: TypePointer Output 125(fvec4) - 381(fragData): 380(ptr) Variable Output - 386: TypeBool - 389: TypeVector 386(bool) 4 - 392: TypeVector 6(int) 4 - 393: TypePointer Input 392(ivec4) - 394(ic4D): 393(ptr) Variable Input + 367(ii2DMS): 366(ptr) Variable UniformConstant + 375: TypeImage 18(int) 2D array multi-sampled nonsampled format:R32ui + 376: TypePointer UniformConstant 375 +377(ui2DMSArray): 376(ptr) Variable UniformConstant + 384: TypeImage 12(float) 2D nonsampled format:Unknown + 385: TypePointer UniformConstant 384 + 386(wo2D): 385(ptr) Variable UniformConstant + 390: TypePointer Output 136(fvec4) + 391(fragData): 390(ptr) Variable Output + 396: TypeBool + 399: TypeVector 396(bool) 4 + 402: TypeVector 6(int) 4 + 403: TypePointer Input 402(ivec4) + 404(ic4D): 403(ptr) Variable Input 4(main): 2 Function None 3 5: Label 9(iv): 8(ptr) Variable Function - 127(v): 126(ptr) Variable Function - 229(ui): 228(ptr) Variable Function + 138(v): 137(ptr) Variable Function + 240(ui): 239(ptr) Variable Function Store 9(iv) 11 16: 13 Load 15(i1D) 17: 6(int) ImageQuerySize 16 @@ -204,341 +204,356 @@ Validation failed 31: 7(ivec3) Load 9(iv) 32: 29(ivec2) VectorShuffle 31 31 0 1 33: 29(ivec2) IAdd 32 30 - 34: 7(ivec3) Load 9(iv) - 35: 7(ivec3) VectorShuffle 34 33 3 4 2 - Store 9(iv) 35 - 39: 36 Load 38(i3D) - 40: 7(ivec3) ImageQuerySize 39 - 41: 7(ivec3) Load 9(iv) - 42: 7(ivec3) IAdd 41 40 - Store 9(iv) 42 - 46: 43 Load 45(iCube) - 47: 29(ivec2) ImageQuerySize 46 - 48: 7(ivec3) Load 9(iv) - 49: 29(ivec2) VectorShuffle 48 48 0 1 - 50: 29(ivec2) IAdd 49 47 + 34: 20(ptr) AccessChain 9(iv) 19 + 35: 6(int) CompositeExtract 33 0 + Store 34 35 + 37: 20(ptr) AccessChain 9(iv) 36 + 38: 6(int) CompositeExtract 33 1 + Store 37 38 + 42: 39 Load 41(i3D) + 43: 7(ivec3) ImageQuerySize 42 + 44: 7(ivec3) Load 9(iv) + 45: 7(ivec3) IAdd 44 43 + Store 9(iv) 45 + 49: 46 Load 48(iCube) + 50: 29(ivec2) ImageQuerySize 49 51: 7(ivec3) Load 9(iv) - 52: 7(ivec3) VectorShuffle 51 50 3 4 2 - Store 9(iv) 52 - 56: 53 Load 55(iCubeArray) - 57: 7(ivec3) ImageQuerySize 56 - 58: 7(ivec3) Load 9(iv) - 59: 7(ivec3) IAdd 58 57 - Store 9(iv) 59 - 63: 60 Load 62(i2DRect) - 64: 29(ivec2) ImageQuerySize 63 - 65: 7(ivec3) Load 9(iv) - 66: 29(ivec2) VectorShuffle 65 65 0 1 - 67: 29(ivec2) IAdd 66 64 - 68: 7(ivec3) Load 9(iv) - 69: 7(ivec3) VectorShuffle 68 67 3 4 2 - Store 9(iv) 69 - 73: 70 Load 72(i1DArray) - 74: 29(ivec2) ImageQuerySize 73 - 75: 7(ivec3) Load 9(iv) - 76: 29(ivec2) VectorShuffle 75 75 0 1 - 77: 29(ivec2) IAdd 76 74 - 78: 7(ivec3) Load 9(iv) - 79: 7(ivec3) VectorShuffle 78 77 3 4 2 - Store 9(iv) 79 - 83: 80 Load 82(i2DArray) - 84: 7(ivec3) ImageQuerySize 83 - 85: 7(ivec3) Load 9(iv) - 86: 7(ivec3) IAdd 85 84 - Store 9(iv) 86 - 90: 87 Load 89(iBuffer) - 91: 6(int) ImageQuerySize 90 - 92: 20(ptr) AccessChain 9(iv) 19 - 93: 6(int) Load 92 - 94: 6(int) IAdd 93 91 - 95: 20(ptr) AccessChain 9(iv) 19 - Store 95 94 - 99: 96 Load 98(i2DMS) - 100: 29(ivec2) ImageQuerySize 99 - 101: 7(ivec3) Load 9(iv) - 102: 29(ivec2) VectorShuffle 101 101 0 1 - 103: 29(ivec2) IAdd 102 100 - 104: 7(ivec3) Load 9(iv) - 105: 7(ivec3) VectorShuffle 104 103 3 4 2 - Store 9(iv) 105 - 109: 106 Load 108(i2DMSArray) - 110: 7(ivec3) ImageQuerySize 109 - 111: 7(ivec3) Load 9(iv) - 112: 7(ivec3) IAdd 111 110 - Store 9(iv) 112 - 113: 96 Load 98(i2DMS) - 114: 6(int) ImageQuerySamples 113 - 115: 20(ptr) AccessChain 9(iv) 19 - 116: 6(int) Load 115 - 117: 6(int) IAdd 116 114 - 118: 20(ptr) AccessChain 9(iv) 19 - Store 118 117 - 119: 106 Load 108(i2DMSArray) - 120: 6(int) ImageQuerySamples 119 - 121: 20(ptr) AccessChain 9(iv) 19 - 122: 6(int) Load 121 - 123: 6(int) IAdd 122 120 - 124: 20(ptr) AccessChain 9(iv) 19 - Store 124 123 - Store 127(v) 129 - 130: 13 Load 15(i1D) - 133: 6(int) Load 132(ic1D) - 134: 125(fvec4) ImageRead 130 133 - 135: 125(fvec4) Load 127(v) - 136: 125(fvec4) FAdd 135 134 - Store 127(v) 136 - 137: 13 Load 15(i1D) - 138: 6(int) Load 132(ic1D) - 139: 125(fvec4) Load 127(v) - ImageWrite 137 138 139 - 140: 25 Load 27(i2D) - 143: 29(ivec2) Load 142(ic2D) - 144: 125(fvec4) ImageRead 140 143 - 145: 125(fvec4) Load 127(v) - 146: 125(fvec4) FAdd 145 144 - Store 127(v) 146 - 147: 25 Load 27(i2D) - 148: 29(ivec2) Load 142(ic2D) - 149: 125(fvec4) Load 127(v) - ImageWrite 147 148 149 - 150: 36 Load 38(i3D) - 153: 7(ivec3) Load 152(ic3D) - 154: 125(fvec4) ImageRead 150 153 - 155: 125(fvec4) Load 127(v) - 156: 125(fvec4) FAdd 155 154 - Store 127(v) 156 - 157: 36 Load 38(i3D) - 158: 7(ivec3) Load 152(ic3D) - 159: 125(fvec4) Load 127(v) - ImageWrite 157 158 159 - 160: 43 Load 45(iCube) - 161: 7(ivec3) Load 152(ic3D) - 162: 125(fvec4) ImageRead 160 161 - 163: 125(fvec4) Load 127(v) - 164: 125(fvec4) FAdd 163 162 - Store 127(v) 164 - 165: 43 Load 45(iCube) - 166: 7(ivec3) Load 152(ic3D) - 167: 125(fvec4) Load 127(v) - ImageWrite 165 166 167 - 168: 53 Load 55(iCubeArray) - 169: 7(ivec3) Load 152(ic3D) - 170: 125(fvec4) ImageRead 168 169 - 171: 125(fvec4) Load 127(v) - 172: 125(fvec4) FAdd 171 170 - Store 127(v) 172 - 173: 53 Load 55(iCubeArray) - 174: 7(ivec3) Load 152(ic3D) - 175: 125(fvec4) Load 127(v) - ImageWrite 173 174 175 - 176: 60 Load 62(i2DRect) - 177: 29(ivec2) Load 142(ic2D) - 178: 125(fvec4) ImageRead 176 177 - 179: 125(fvec4) Load 127(v) - 180: 125(fvec4) FAdd 179 178 - Store 127(v) 180 - 181: 60 Load 62(i2DRect) - 182: 29(ivec2) Load 142(ic2D) - 183: 125(fvec4) Load 127(v) - ImageWrite 181 182 183 - 184: 70 Load 72(i1DArray) - 185: 29(ivec2) Load 142(ic2D) - 186: 125(fvec4) ImageRead 184 185 - 187: 125(fvec4) Load 127(v) - 188: 125(fvec4) FAdd 187 186 - Store 127(v) 188 - 189: 70 Load 72(i1DArray) - 190: 29(ivec2) Load 142(ic2D) - 191: 125(fvec4) Load 127(v) - ImageWrite 189 190 191 - 192: 80 Load 82(i2DArray) - 193: 7(ivec3) Load 152(ic3D) - 194: 125(fvec4) ImageRead 192 193 - 195: 125(fvec4) Load 127(v) - 196: 125(fvec4) FAdd 195 194 - Store 127(v) 196 - 197: 80 Load 82(i2DArray) - 198: 7(ivec3) Load 152(ic3D) - 199: 125(fvec4) Load 127(v) - ImageWrite 197 198 199 - 200: 87 Load 89(iBuffer) - 201: 6(int) Load 132(ic1D) - 202: 125(fvec4) ImageRead 200 201 - 203: 125(fvec4) Load 127(v) - 204: 125(fvec4) FAdd 203 202 - Store 127(v) 204 - 205: 87 Load 89(iBuffer) - 206: 6(int) Load 132(ic1D) - 207: 125(fvec4) Load 127(v) - ImageWrite 205 206 207 - 208: 96 Load 98(i2DMS) - 209: 29(ivec2) Load 142(ic2D) - 211: 125(fvec4) ImageRead 208 209 Sample 210 - 212: 125(fvec4) Load 127(v) - 213: 125(fvec4) FAdd 212 211 - Store 127(v) 213 - 214: 96 Load 98(i2DMS) - 215: 29(ivec2) Load 142(ic2D) - 217: 125(fvec4) Load 127(v) - ImageWrite 214 215 217 Sample 216 - 218: 106 Load 108(i2DMSArray) - 219: 7(ivec3) Load 152(ic3D) - 221: 125(fvec4) ImageRead 218 219 Sample 220 - 222: 125(fvec4) Load 127(v) - 223: 125(fvec4) FAdd 222 221 - Store 127(v) 223 - 224: 106 Load 108(i2DMSArray) - 225: 7(ivec3) Load 152(ic3D) - 227: 125(fvec4) Load 127(v) - ImageWrite 224 225 227 Sample 226 - Store 229(ui) 19 - 233: 6(int) Load 132(ic1D) - 236: 235(ptr) ImageTexelPointer 232(ii1D) 233 19 - 238: 6(int) AtomicIAdd 236 237 19 234 - 239: 20(ptr) AccessChain 9(iv) 19 - 240: 6(int) Load 239 - 241: 6(int) IAdd 240 238 - 242: 20(ptr) AccessChain 9(iv) 19 - Store 242 241 - 246: 29(ivec2) Load 142(ic2D) - 249: 18(int) Load 248(value) - 251: 250(ptr) ImageTexelPointer 245(ui2D) 246 19 - 252: 18(int) AtomicIAdd 251 237 19 249 - 253: 18(int) Load 229(ui) - 254: 18(int) IAdd 253 252 - Store 229(ui) 254 - 255: 6(int) Load 132(ic1D) - 257: 235(ptr) ImageTexelPointer 232(ii1D) 255 19 - 258: 6(int) AtomicSMin 257 237 19 256 - 259: 20(ptr) AccessChain 9(iv) 19 - 260: 6(int) Load 259 - 261: 6(int) IAdd 260 258 - 262: 20(ptr) AccessChain 9(iv) 19 - Store 262 261 - 263: 29(ivec2) Load 142(ic2D) - 264: 18(int) Load 248(value) - 265: 250(ptr) ImageTexelPointer 245(ui2D) 263 19 - 266: 18(int) AtomicUMin 265 237 19 264 - 267: 18(int) Load 229(ui) - 268: 18(int) IAdd 267 266 - Store 229(ui) 268 - 269: 6(int) Load 132(ic1D) - 271: 235(ptr) ImageTexelPointer 232(ii1D) 269 19 - 272: 6(int) AtomicSMax 271 237 19 270 - 273: 20(ptr) AccessChain 9(iv) 19 - 274: 6(int) Load 273 - 275: 6(int) IAdd 274 272 - 276: 20(ptr) AccessChain 9(iv) 19 - Store 276 275 - 277: 29(ivec2) Load 142(ic2D) - 278: 18(int) Load 248(value) - 279: 250(ptr) ImageTexelPointer 245(ui2D) 277 19 - 280: 18(int) AtomicUMax 279 237 19 278 - 281: 18(int) Load 229(ui) - 282: 18(int) IAdd 281 280 - Store 229(ui) 282 - 283: 6(int) Load 132(ic1D) - 285: 235(ptr) ImageTexelPointer 232(ii1D) 283 19 - 286: 6(int) AtomicAnd 285 237 19 284 - 287: 20(ptr) AccessChain 9(iv) 19 - 288: 6(int) Load 287 - 289: 6(int) IAdd 288 286 - 290: 20(ptr) AccessChain 9(iv) 19 - Store 290 289 - 291: 29(ivec2) Load 142(ic2D) - 292: 18(int) Load 248(value) - 293: 250(ptr) ImageTexelPointer 245(ui2D) 291 19 - 294: 18(int) AtomicAnd 293 237 19 292 - 295: 18(int) Load 229(ui) - 296: 18(int) IAdd 295 294 - Store 229(ui) 296 - 297: 6(int) Load 132(ic1D) - 299: 235(ptr) ImageTexelPointer 232(ii1D) 297 19 - 300: 6(int) AtomicOr 299 237 19 298 - 301: 20(ptr) AccessChain 9(iv) 19 - 302: 6(int) Load 301 - 303: 6(int) IAdd 302 300 - 304: 20(ptr) AccessChain 9(iv) 19 - Store 304 303 - 305: 29(ivec2) Load 142(ic2D) - 306: 18(int) Load 248(value) - 307: 250(ptr) ImageTexelPointer 245(ui2D) 305 19 - 308: 18(int) AtomicOr 307 237 19 306 - 309: 18(int) Load 229(ui) - 310: 18(int) IAdd 309 308 - Store 229(ui) 310 - 311: 6(int) Load 132(ic1D) - 313: 235(ptr) ImageTexelPointer 232(ii1D) 311 19 - 314: 6(int) AtomicXor 313 237 19 312 - 315: 20(ptr) AccessChain 9(iv) 19 - 316: 6(int) Load 315 - 317: 6(int) IAdd 316 314 - 318: 20(ptr) AccessChain 9(iv) 19 - Store 318 317 - 319: 29(ivec2) Load 142(ic2D) - 320: 18(int) Load 248(value) - 321: 250(ptr) ImageTexelPointer 245(ui2D) 319 19 - 322: 18(int) AtomicXor 321 237 19 320 - 323: 18(int) Load 229(ui) - 324: 18(int) IAdd 323 322 - Store 229(ui) 324 - 325: 6(int) Load 132(ic1D) - 327: 235(ptr) ImageTexelPointer 232(ii1D) 325 19 - 328: 6(int) AtomicExchange 327 237 19 326 - 329: 20(ptr) AccessChain 9(iv) 19 - 330: 6(int) Load 329 - 331: 6(int) IAdd 330 328 - 332: 20(ptr) AccessChain 9(iv) 19 - Store 332 331 - 333: 29(ivec2) Load 142(ic2D) - 334: 18(int) Load 248(value) - 335: 250(ptr) ImageTexelPointer 245(ui2D) 333 19 - 336: 18(int) AtomicExchange 335 237 19 334 - 337: 18(int) Load 229(ui) - 338: 18(int) IAdd 337 336 - Store 229(ui) 338 - 339: 6(int) Load 132(ic1D) - 342: 235(ptr) ImageTexelPointer 232(ii1D) 339 19 - 343: 6(int) AtomicCompareExchange 342 237 19 19 341 340 - 344: 20(ptr) AccessChain 9(iv) 19 - 345: 6(int) Load 344 - 346: 6(int) IAdd 345 343 - 347: 20(ptr) AccessChain 9(iv) 19 - Store 347 346 - 348: 29(ivec2) Load 142(ic2D) - 350: 18(int) Load 248(value) - 351: 250(ptr) ImageTexelPointer 245(ui2D) 348 19 - 352: 18(int) AtomicCompareExchange 351 237 19 19 350 349 - 353: 18(int) Load 229(ui) - 354: 18(int) IAdd 353 352 - Store 229(ui) 354 - 358: 29(ivec2) Load 142(ic2D) - 359: 235(ptr) ImageTexelPointer 357(ii2DMS) 358 216 - 360: 6(int) AtomicCompareExchange 359 237 19 19 341 340 - 361: 20(ptr) AccessChain 9(iv) 19 - 362: 6(int) Load 361 - 363: 6(int) IAdd 362 360 - 364: 20(ptr) AccessChain 9(iv) 19 - Store 364 363 - 368: 7(ivec3) Load 152(ic3D) - 369: 18(int) Load 248(value) - 370: 250(ptr) ImageTexelPointer 367(ui2DMSArray) 368 220 - 371: 18(int) AtomicCompareExchange 370 237 19 19 369 349 - 372: 18(int) Load 229(ui) - 373: 18(int) IAdd 372 371 - Store 229(ui) 373 - 377: 374 Load 376(wo2D) - 378: 29(ivec2) Load 142(ic2D) - 379: 125(fvec4) Load 127(v) - ImageWrite 377 378 379 - 382: 18(int) Load 229(ui) - 383: 20(ptr) AccessChain 9(iv) 237 - 384: 6(int) Load 383 - 385: 18(int) Bitcast 384 - 387: 386(bool) INotEqual 382 385 - 388: 125(fvec4) Load 127(v) - 390: 389(bvec4) CompositeConstruct 387 387 387 387 - 391: 125(fvec4) Select 390 388 129 - Store 381(fragData) 391 + 52: 29(ivec2) VectorShuffle 51 51 0 1 + 53: 29(ivec2) IAdd 52 50 + 54: 20(ptr) AccessChain 9(iv) 19 + 55: 6(int) CompositeExtract 53 0 + Store 54 55 + 56: 20(ptr) AccessChain 9(iv) 36 + 57: 6(int) CompositeExtract 53 1 + Store 56 57 + 61: 58 Load 60(iCubeArray) + 62: 7(ivec3) ImageQuerySize 61 + 63: 7(ivec3) Load 9(iv) + 64: 7(ivec3) IAdd 63 62 + Store 9(iv) 64 + 68: 65 Load 67(i2DRect) + 69: 29(ivec2) ImageQuerySize 68 + 70: 7(ivec3) Load 9(iv) + 71: 29(ivec2) VectorShuffle 70 70 0 1 + 72: 29(ivec2) IAdd 71 69 + 73: 20(ptr) AccessChain 9(iv) 19 + 74: 6(int) CompositeExtract 72 0 + Store 73 74 + 75: 20(ptr) AccessChain 9(iv) 36 + 76: 6(int) CompositeExtract 72 1 + Store 75 76 + 80: 77 Load 79(i1DArray) + 81: 29(ivec2) ImageQuerySize 80 + 82: 7(ivec3) Load 9(iv) + 83: 29(ivec2) VectorShuffle 82 82 0 1 + 84: 29(ivec2) IAdd 83 81 + 85: 20(ptr) AccessChain 9(iv) 19 + 86: 6(int) CompositeExtract 84 0 + Store 85 86 + 87: 20(ptr) AccessChain 9(iv) 36 + 88: 6(int) CompositeExtract 84 1 + Store 87 88 + 92: 89 Load 91(i2DArray) + 93: 7(ivec3) ImageQuerySize 92 + 94: 7(ivec3) Load 9(iv) + 95: 7(ivec3) IAdd 94 93 + Store 9(iv) 95 + 99: 96 Load 98(iBuffer) + 100: 6(int) ImageQuerySize 99 + 101: 20(ptr) AccessChain 9(iv) 19 + 102: 6(int) Load 101 + 103: 6(int) IAdd 102 100 + 104: 20(ptr) AccessChain 9(iv) 19 + Store 104 103 + 108: 105 Load 107(i2DMS) + 109: 29(ivec2) ImageQuerySize 108 + 110: 7(ivec3) Load 9(iv) + 111: 29(ivec2) VectorShuffle 110 110 0 1 + 112: 29(ivec2) IAdd 111 109 + 113: 20(ptr) AccessChain 9(iv) 19 + 114: 6(int) CompositeExtract 112 0 + Store 113 114 + 115: 20(ptr) AccessChain 9(iv) 36 + 116: 6(int) CompositeExtract 112 1 + Store 115 116 + 120: 117 Load 119(i2DMSArray) + 121: 7(ivec3) ImageQuerySize 120 + 122: 7(ivec3) Load 9(iv) + 123: 7(ivec3) IAdd 122 121 + Store 9(iv) 123 + 124: 105 Load 107(i2DMS) + 125: 6(int) ImageQuerySamples 124 + 126: 20(ptr) AccessChain 9(iv) 19 + 127: 6(int) Load 126 + 128: 6(int) IAdd 127 125 + 129: 20(ptr) AccessChain 9(iv) 19 + Store 129 128 + 130: 117 Load 119(i2DMSArray) + 131: 6(int) ImageQuerySamples 130 + 132: 20(ptr) AccessChain 9(iv) 19 + 133: 6(int) Load 132 + 134: 6(int) IAdd 133 131 + 135: 20(ptr) AccessChain 9(iv) 19 + Store 135 134 + Store 138(v) 140 + 141: 13 Load 15(i1D) + 144: 6(int) Load 143(ic1D) + 145: 136(fvec4) ImageRead 141 144 + 146: 136(fvec4) Load 138(v) + 147: 136(fvec4) FAdd 146 145 + Store 138(v) 147 + 148: 13 Load 15(i1D) + 149: 6(int) Load 143(ic1D) + 150: 136(fvec4) Load 138(v) + ImageWrite 148 149 150 + 151: 25 Load 27(i2D) + 154: 29(ivec2) Load 153(ic2D) + 155: 136(fvec4) ImageRead 151 154 + 156: 136(fvec4) Load 138(v) + 157: 136(fvec4) FAdd 156 155 + Store 138(v) 157 + 158: 25 Load 27(i2D) + 159: 29(ivec2) Load 153(ic2D) + 160: 136(fvec4) Load 138(v) + ImageWrite 158 159 160 + 161: 39 Load 41(i3D) + 164: 7(ivec3) Load 163(ic3D) + 165: 136(fvec4) ImageRead 161 164 + 166: 136(fvec4) Load 138(v) + 167: 136(fvec4) FAdd 166 165 + Store 138(v) 167 + 168: 39 Load 41(i3D) + 169: 7(ivec3) Load 163(ic3D) + 170: 136(fvec4) Load 138(v) + ImageWrite 168 169 170 + 171: 46 Load 48(iCube) + 172: 7(ivec3) Load 163(ic3D) + 173: 136(fvec4) ImageRead 171 172 + 174: 136(fvec4) Load 138(v) + 175: 136(fvec4) FAdd 174 173 + Store 138(v) 175 + 176: 46 Load 48(iCube) + 177: 7(ivec3) Load 163(ic3D) + 178: 136(fvec4) Load 138(v) + ImageWrite 176 177 178 + 179: 58 Load 60(iCubeArray) + 180: 7(ivec3) Load 163(ic3D) + 181: 136(fvec4) ImageRead 179 180 + 182: 136(fvec4) Load 138(v) + 183: 136(fvec4) FAdd 182 181 + Store 138(v) 183 + 184: 58 Load 60(iCubeArray) + 185: 7(ivec3) Load 163(ic3D) + 186: 136(fvec4) Load 138(v) + ImageWrite 184 185 186 + 187: 65 Load 67(i2DRect) + 188: 29(ivec2) Load 153(ic2D) + 189: 136(fvec4) ImageRead 187 188 + 190: 136(fvec4) Load 138(v) + 191: 136(fvec4) FAdd 190 189 + Store 138(v) 191 + 192: 65 Load 67(i2DRect) + 193: 29(ivec2) Load 153(ic2D) + 194: 136(fvec4) Load 138(v) + ImageWrite 192 193 194 + 195: 77 Load 79(i1DArray) + 196: 29(ivec2) Load 153(ic2D) + 197: 136(fvec4) ImageRead 195 196 + 198: 136(fvec4) Load 138(v) + 199: 136(fvec4) FAdd 198 197 + Store 138(v) 199 + 200: 77 Load 79(i1DArray) + 201: 29(ivec2) Load 153(ic2D) + 202: 136(fvec4) Load 138(v) + ImageWrite 200 201 202 + 203: 89 Load 91(i2DArray) + 204: 7(ivec3) Load 163(ic3D) + 205: 136(fvec4) ImageRead 203 204 + 206: 136(fvec4) Load 138(v) + 207: 136(fvec4) FAdd 206 205 + Store 138(v) 207 + 208: 89 Load 91(i2DArray) + 209: 7(ivec3) Load 163(ic3D) + 210: 136(fvec4) Load 138(v) + ImageWrite 208 209 210 + 211: 96 Load 98(iBuffer) + 212: 6(int) Load 143(ic1D) + 213: 136(fvec4) ImageRead 211 212 + 214: 136(fvec4) Load 138(v) + 215: 136(fvec4) FAdd 214 213 + Store 138(v) 215 + 216: 96 Load 98(iBuffer) + 217: 6(int) Load 143(ic1D) + 218: 136(fvec4) Load 138(v) + ImageWrite 216 217 218 + 219: 105 Load 107(i2DMS) + 220: 29(ivec2) Load 153(ic2D) + 222: 136(fvec4) ImageRead 219 220 Sample 221 + 223: 136(fvec4) Load 138(v) + 224: 136(fvec4) FAdd 223 222 + Store 138(v) 224 + 225: 105 Load 107(i2DMS) + 226: 29(ivec2) Load 153(ic2D) + 228: 136(fvec4) Load 138(v) + ImageWrite 225 226 228 Sample 227 + 229: 117 Load 119(i2DMSArray) + 230: 7(ivec3) Load 163(ic3D) + 232: 136(fvec4) ImageRead 229 230 Sample 231 + 233: 136(fvec4) Load 138(v) + 234: 136(fvec4) FAdd 233 232 + Store 138(v) 234 + 235: 117 Load 119(i2DMSArray) + 236: 7(ivec3) Load 163(ic3D) + 238: 136(fvec4) Load 138(v) + ImageWrite 235 236 238 Sample 237 + Store 240(ui) 19 + 244: 6(int) Load 143(ic1D) + 247: 246(ptr) ImageTexelPointer 243(ii1D) 244 19 + 248: 6(int) AtomicIAdd 247 36 19 245 + 249: 20(ptr) AccessChain 9(iv) 19 + 250: 6(int) Load 249 + 251: 6(int) IAdd 250 248 + 252: 20(ptr) AccessChain 9(iv) 19 + Store 252 251 + 256: 29(ivec2) Load 153(ic2D) + 259: 18(int) Load 258(value) + 261: 260(ptr) ImageTexelPointer 255(ui2D) 256 19 + 262: 18(int) AtomicIAdd 261 36 19 259 + 263: 18(int) Load 240(ui) + 264: 18(int) IAdd 263 262 + Store 240(ui) 264 + 265: 6(int) Load 143(ic1D) + 267: 246(ptr) ImageTexelPointer 243(ii1D) 265 19 + 268: 6(int) AtomicSMin 267 36 19 266 + 269: 20(ptr) AccessChain 9(iv) 19 + 270: 6(int) Load 269 + 271: 6(int) IAdd 270 268 + 272: 20(ptr) AccessChain 9(iv) 19 + Store 272 271 + 273: 29(ivec2) Load 153(ic2D) + 274: 18(int) Load 258(value) + 275: 260(ptr) ImageTexelPointer 255(ui2D) 273 19 + 276: 18(int) AtomicUMin 275 36 19 274 + 277: 18(int) Load 240(ui) + 278: 18(int) IAdd 277 276 + Store 240(ui) 278 + 279: 6(int) Load 143(ic1D) + 281: 246(ptr) ImageTexelPointer 243(ii1D) 279 19 + 282: 6(int) AtomicSMax 281 36 19 280 + 283: 20(ptr) AccessChain 9(iv) 19 + 284: 6(int) Load 283 + 285: 6(int) IAdd 284 282 + 286: 20(ptr) AccessChain 9(iv) 19 + Store 286 285 + 287: 29(ivec2) Load 153(ic2D) + 288: 18(int) Load 258(value) + 289: 260(ptr) ImageTexelPointer 255(ui2D) 287 19 + 290: 18(int) AtomicUMax 289 36 19 288 + 291: 18(int) Load 240(ui) + 292: 18(int) IAdd 291 290 + Store 240(ui) 292 + 293: 6(int) Load 143(ic1D) + 295: 246(ptr) ImageTexelPointer 243(ii1D) 293 19 + 296: 6(int) AtomicAnd 295 36 19 294 + 297: 20(ptr) AccessChain 9(iv) 19 + 298: 6(int) Load 297 + 299: 6(int) IAdd 298 296 + 300: 20(ptr) AccessChain 9(iv) 19 + Store 300 299 + 301: 29(ivec2) Load 153(ic2D) + 302: 18(int) Load 258(value) + 303: 260(ptr) ImageTexelPointer 255(ui2D) 301 19 + 304: 18(int) AtomicAnd 303 36 19 302 + 305: 18(int) Load 240(ui) + 306: 18(int) IAdd 305 304 + Store 240(ui) 306 + 307: 6(int) Load 143(ic1D) + 309: 246(ptr) ImageTexelPointer 243(ii1D) 307 19 + 310: 6(int) AtomicOr 309 36 19 308 + 311: 20(ptr) AccessChain 9(iv) 19 + 312: 6(int) Load 311 + 313: 6(int) IAdd 312 310 + 314: 20(ptr) AccessChain 9(iv) 19 + Store 314 313 + 315: 29(ivec2) Load 153(ic2D) + 316: 18(int) Load 258(value) + 317: 260(ptr) ImageTexelPointer 255(ui2D) 315 19 + 318: 18(int) AtomicOr 317 36 19 316 + 319: 18(int) Load 240(ui) + 320: 18(int) IAdd 319 318 + Store 240(ui) 320 + 321: 6(int) Load 143(ic1D) + 323: 246(ptr) ImageTexelPointer 243(ii1D) 321 19 + 324: 6(int) AtomicXor 323 36 19 322 + 325: 20(ptr) AccessChain 9(iv) 19 + 326: 6(int) Load 325 + 327: 6(int) IAdd 326 324 + 328: 20(ptr) AccessChain 9(iv) 19 + Store 328 327 + 329: 29(ivec2) Load 153(ic2D) + 330: 18(int) Load 258(value) + 331: 260(ptr) ImageTexelPointer 255(ui2D) 329 19 + 332: 18(int) AtomicXor 331 36 19 330 + 333: 18(int) Load 240(ui) + 334: 18(int) IAdd 333 332 + Store 240(ui) 334 + 335: 6(int) Load 143(ic1D) + 337: 246(ptr) ImageTexelPointer 243(ii1D) 335 19 + 338: 6(int) AtomicExchange 337 36 19 336 + 339: 20(ptr) AccessChain 9(iv) 19 + 340: 6(int) Load 339 + 341: 6(int) IAdd 340 338 + 342: 20(ptr) AccessChain 9(iv) 19 + Store 342 341 + 343: 29(ivec2) Load 153(ic2D) + 344: 18(int) Load 258(value) + 345: 260(ptr) ImageTexelPointer 255(ui2D) 343 19 + 346: 18(int) AtomicExchange 345 36 19 344 + 347: 18(int) Load 240(ui) + 348: 18(int) IAdd 347 346 + Store 240(ui) 348 + 349: 6(int) Load 143(ic1D) + 352: 246(ptr) ImageTexelPointer 243(ii1D) 349 19 + 353: 6(int) AtomicCompareExchange 352 36 19 19 351 350 + 354: 20(ptr) AccessChain 9(iv) 19 + 355: 6(int) Load 354 + 356: 6(int) IAdd 355 353 + 357: 20(ptr) AccessChain 9(iv) 19 + Store 357 356 + 358: 29(ivec2) Load 153(ic2D) + 360: 18(int) Load 258(value) + 361: 260(ptr) ImageTexelPointer 255(ui2D) 358 19 + 362: 18(int) AtomicCompareExchange 361 36 19 19 360 359 + 363: 18(int) Load 240(ui) + 364: 18(int) IAdd 363 362 + Store 240(ui) 364 + 368: 29(ivec2) Load 153(ic2D) + 369: 246(ptr) ImageTexelPointer 367(ii2DMS) 368 227 + 370: 6(int) AtomicCompareExchange 369 36 19 19 351 350 + 371: 20(ptr) AccessChain 9(iv) 19 + 372: 6(int) Load 371 + 373: 6(int) IAdd 372 370 + 374: 20(ptr) AccessChain 9(iv) 19 + Store 374 373 + 378: 7(ivec3) Load 163(ic3D) + 379: 18(int) Load 258(value) + 380: 260(ptr) ImageTexelPointer 377(ui2DMSArray) 378 231 + 381: 18(int) AtomicCompareExchange 380 36 19 19 379 359 + 382: 18(int) Load 240(ui) + 383: 18(int) IAdd 382 381 + Store 240(ui) 383 + 387: 384 Load 386(wo2D) + 388: 29(ivec2) Load 153(ic2D) + 389: 136(fvec4) Load 138(v) + ImageWrite 387 388 389 + 392: 18(int) Load 240(ui) + 393: 20(ptr) AccessChain 9(iv) 36 + 394: 6(int) Load 393 + 395: 18(int) Bitcast 394 + 397: 396(bool) INotEqual 392 395 + 398: 136(fvec4) Load 138(v) + 400: 399(bvec4) CompositeConstruct 397 397 397 397 + 401: 136(fvec4) Select 400 398 140 + Store 391(fragData) 401 Return FunctionEnd diff --git a/Test/baseResults/spv.int16.amd.frag.out b/Test/baseResults/spv.int16.amd.frag.out index 50dbe6c42b..676d99c1b7 100644 --- a/Test/baseResults/spv.int16.amd.frag.out +++ b/Test/baseResults/spv.int16.amd.frag.out @@ -1,7 +1,7 @@ spv.int16.amd.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 560 +// Id's are bound by 576 Capability Shader Capability Float16 @@ -14,7 +14,7 @@ spv.int16.amd.frag Extension "SPV_KHR_16bit_storage" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 519 521 + EntryPoint Fragment 4 "main" 535 537 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_AMD_gpu_shader_half_float" @@ -54,66 +54,66 @@ spv.int16.amd.frag Name 393 "f16v" Name 396 "exp" Name 397 "ResType" - Name 418 "packi" - Name 423 "packu" - Name 432 "packi64" - Name 441 "packu64" - Name 450 "bv" - Name 515 "Block" - MemberName 515(Block) 0 "i16v" - MemberName 515(Block) 1 "u16" - Name 517 "block" - Name 519 "iu16v" - Name 521 "ii16" - Name 522 "si64" - Name 523 "su64" - Name 524 "si" - Name 525 "su" - Name 526 "sb" - Name 527 "si16" - Name 528 "su16" - Name 529 "i16_to_b" - Name 530 "u16_to_b" - Name 531 "b_to_i16" - Name 532 "b_to_u16" - Name 533 "i16_to_i" - Name 535 "u16_to_i" - Name 536 "i_to_i16" - Name 538 "i_to_u16" - Name 540 "i16_to_u" - Name 541 "u16_to_u" - Name 543 "u_to_i16" - Name 544 "u_to_u16" - Name 545 "i16_to_i64" - Name 548 "u16_to_i64" - Name 549 "i64_to_i16" - Name 551 "i64_to_u16" - Name 553 "i16_to_u64" - Name 554 "u16_to_u64" - Name 556 "u64_to_i16" - Name 557 "u64_to_u16" - Name 558 "i16_to_u16" - Name 559 "u16_to_i16" + Name 420 "packi" + Name 425 "packu" + Name 436 "packi64" + Name 445 "packu64" + Name 454 "bv" + Name 531 "Block" + MemberName 531(Block) 0 "i16v" + MemberName 531(Block) 1 "u16" + Name 533 "block" + Name 535 "iu16v" + Name 537 "ii16" + Name 538 "si64" + Name 539 "su64" + Name 540 "si" + Name 541 "su" + Name 542 "sb" + Name 543 "si16" + Name 544 "su16" + Name 545 "i16_to_b" + Name 546 "u16_to_b" + Name 547 "b_to_i16" + Name 548 "b_to_u16" + Name 549 "i16_to_i" + Name 551 "u16_to_i" + Name 552 "i_to_i16" + Name 554 "i_to_u16" + Name 556 "i16_to_u" + Name 557 "u16_to_u" + Name 559 "u_to_i16" + Name 560 "u_to_u16" + Name 561 "i16_to_i64" + Name 564 "u16_to_i64" + Name 565 "i64_to_i16" + Name 567 "i64_to_u16" + Name 569 "i16_to_u64" + Name 570 "u16_to_u64" + Name 572 "u64_to_i16" + Name 573 "u64_to_u16" + Name 574 "i16_to_u16" + Name 575 "u16_to_i16" MemberDecorate 25(Uniforms) 0 Offset 0 Decorate 25(Uniforms) Block Decorate 27 DescriptorSet 0 Decorate 27 Binding 0 - MemberDecorate 515(Block) 0 Offset 0 - MemberDecorate 515(Block) 1 Offset 6 - Decorate 515(Block) Block - Decorate 517(block) DescriptorSet 0 - Decorate 517(block) Binding 1 - Decorate 519(iu16v) Flat - Decorate 519(iu16v) Location 0 - Decorate 521(ii16) Flat - Decorate 521(ii16) Location 1 - Decorate 522(si64) SpecId 100 - Decorate 523(su64) SpecId 101 - Decorate 524(si) SpecId 102 - Decorate 525(su) SpecId 103 - Decorate 526(sb) SpecId 104 - Decorate 527(si16) SpecId 105 - Decorate 528(su16) SpecId 106 + MemberDecorate 531(Block) 0 Offset 0 + MemberDecorate 531(Block) 1 Offset 6 + Decorate 531(Block) Block + Decorate 533(block) DescriptorSet 0 + Decorate 533(block) Binding 1 + Decorate 535(iu16v) Flat + Decorate 535(iu16v) Location 0 + Decorate 537(ii16) Flat + Decorate 537(ii16) Location 1 + Decorate 538(si64) SpecId 100 + Decorate 539(su64) SpecId 101 + Decorate 540(si) SpecId 102 + Decorate 541(su) SpecId 103 + Decorate 542(sb) SpecId 104 + Decorate 543(si16) SpecId 105 + Decorate 544(su16) SpecId 106 2: TypeVoid 3: TypeFunction 2 14: TypeInt 16 0 @@ -194,62 +194,62 @@ spv.int16.amd.frag 395: TypePointer Function 54(i16vec3) 397(ResType): TypeStruct 391(f16vec3) 54(i16vec3) 407: TypePointer Function 261(float16_t) - 431: TypePointer Function 273(int64_t) - 434: TypeVector 17(int16_t) 4 - 440: TypePointer Function 285(int64_t) - 443: TypeVector 14(int16_t) 4 - 449: TypePointer Function 388(bvec3) - 515(Block): TypeStruct 54(i16vec3) 14(int16_t) - 516: TypePointer Uniform 515(Block) - 517(block): 516(ptr) Variable Uniform - 518: TypePointer Input 49(i16vec3) - 519(iu16v): 518(ptr) Variable Input - 520: TypePointer Input 17(int16_t) - 521(ii16): 520(ptr) Variable Input - 522(si64):273(int64_t) SpecConstant 4294967286 4294967295 - 523(su64):285(int64_t) SpecConstant 20 0 - 524(si): 28(int) SpecConstant 4294967291 - 525(su): 18(int) SpecConstant 4 - 526(sb): 125(bool) SpecConstantTrue - 527(si16): 17(int16_t) SpecConstant 4294967291 - 528(su16): 14(int16_t) SpecConstant 4 - 529(i16_to_b): 125(bool) SpecConstantOp 171 527(si16) 202 - 530(u16_to_b): 125(bool) SpecConstantOp 171 528(su16) 202 - 531(b_to_i16): 17(int16_t) SpecConstantOp 169 526(sb) 53 194 - 532(b_to_u16): 14(int16_t) SpecConstantOp 169 526(sb) 203 202 - 533(i16_to_i): 28(int) SpecConstantOp 114 527(si16) - 534: 18(int) SpecConstantOp 113 528(su16) - 535(u16_to_i): 28(int) SpecConstantOp 128 534 128 - 536(i_to_i16): 17(int16_t) SpecConstantOp 114 524(si) - 537: 17(int16_t) SpecConstantOp 114 524(si) - 538(i_to_u16): 14(int16_t) SpecConstantOp 128 537 202 - 539: 28(int) SpecConstantOp 114 527(si16) - 540(i16_to_u): 18(int) SpecConstantOp 128 539 128 - 541(u16_to_u): 18(int) SpecConstantOp 113 528(su16) - 542: 14(int16_t) SpecConstantOp 113 525(su) - 543(u_to_i16): 17(int16_t) SpecConstantOp 128 542 202 - 544(u_to_u16): 14(int16_t) SpecConstantOp 113 525(su) - 545(i16_to_i64):273(int64_t) SpecConstantOp 114 527(si16) - 546:285(int64_t) SpecConstantOp 113 528(su16) - 547:285(int64_t) Constant 0 0 - 548(u16_to_i64):273(int64_t) SpecConstantOp 128 546 547 - 549(i64_to_i16): 17(int16_t) SpecConstantOp 114 522(si64) - 550: 17(int16_t) SpecConstantOp 114 522(si64) - 551(i64_to_u16): 14(int16_t) SpecConstantOp 128 550 202 - 552:273(int64_t) SpecConstantOp 114 527(si16) - 553(i16_to_u64):285(int64_t) SpecConstantOp 128 552 547 - 554(u16_to_u64):285(int64_t) SpecConstantOp 113 528(su16) - 555: 14(int16_t) SpecConstantOp 113 523(su64) - 556(u64_to_i16): 17(int16_t) SpecConstantOp 128 555 202 - 557(u64_to_u16): 14(int16_t) SpecConstantOp 113 523(su64) - 558(i16_to_u16): 14(int16_t) SpecConstantOp 128 527(si16) 202 - 559(u16_to_i16): 17(int16_t) SpecConstantOp 128 528(su16) 202 + 435: TypePointer Function 273(int64_t) + 438: TypeVector 17(int16_t) 4 + 444: TypePointer Function 285(int64_t) + 447: TypeVector 14(int16_t) 4 + 453: TypePointer Function 388(bvec3) + 531(Block): TypeStruct 54(i16vec3) 14(int16_t) + 532: TypePointer Uniform 531(Block) + 533(block): 532(ptr) Variable Uniform + 534: TypePointer Input 49(i16vec3) + 535(iu16v): 534(ptr) Variable Input + 536: TypePointer Input 17(int16_t) + 537(ii16): 536(ptr) Variable Input + 538(si64):273(int64_t) SpecConstant 4294967286 4294967295 + 539(su64):285(int64_t) SpecConstant 20 0 + 540(si): 28(int) SpecConstant 4294967291 + 541(su): 18(int) SpecConstant 4 + 542(sb): 125(bool) SpecConstantTrue + 543(si16): 17(int16_t) SpecConstant 4294967291 + 544(su16): 14(int16_t) SpecConstant 4 + 545(i16_to_b): 125(bool) SpecConstantOp 171 543(si16) 202 + 546(u16_to_b): 125(bool) SpecConstantOp 171 544(su16) 202 + 547(b_to_i16): 17(int16_t) SpecConstantOp 169 542(sb) 53 194 + 548(b_to_u16): 14(int16_t) SpecConstantOp 169 542(sb) 203 202 + 549(i16_to_i): 28(int) SpecConstantOp 114 543(si16) + 550: 18(int) SpecConstantOp 113 544(su16) + 551(u16_to_i): 28(int) SpecConstantOp 128 550 128 + 552(i_to_i16): 17(int16_t) SpecConstantOp 114 540(si) + 553: 17(int16_t) SpecConstantOp 114 540(si) + 554(i_to_u16): 14(int16_t) SpecConstantOp 128 553 202 + 555: 28(int) SpecConstantOp 114 543(si16) + 556(i16_to_u): 18(int) SpecConstantOp 128 555 128 + 557(u16_to_u): 18(int) SpecConstantOp 113 544(su16) + 558: 14(int16_t) SpecConstantOp 113 541(su) + 559(u_to_i16): 17(int16_t) SpecConstantOp 128 558 202 + 560(u_to_u16): 14(int16_t) SpecConstantOp 113 541(su) + 561(i16_to_i64):273(int64_t) SpecConstantOp 114 543(si16) + 562:285(int64_t) SpecConstantOp 113 544(su16) + 563:285(int64_t) Constant 0 0 + 564(u16_to_i64):273(int64_t) SpecConstantOp 128 562 563 + 565(i64_to_i16): 17(int16_t) SpecConstantOp 114 538(si64) + 566: 17(int16_t) SpecConstantOp 114 538(si64) + 567(i64_to_u16): 14(int16_t) SpecConstantOp 128 566 202 + 568:273(int64_t) SpecConstantOp 114 543(si16) + 569(i16_to_u64):285(int64_t) SpecConstantOp 128 568 563 + 570(u16_to_u64):285(int64_t) SpecConstantOp 113 544(su16) + 571: 14(int16_t) SpecConstantOp 113 539(su64) + 572(u64_to_i16): 17(int16_t) SpecConstantOp 128 571 202 + 573(u64_to_u16): 14(int16_t) SpecConstantOp 113 539(su64) + 574(i16_to_u16): 14(int16_t) SpecConstantOp 128 543(si16) 202 + 575(u16_to_i16): 17(int16_t) SpecConstantOp 128 544(su16) 202 4(main): 2 Function None 3 5: Label - 511: 2 FunctionCall 6(literal() - 512: 2 FunctionCall 8(operators() - 513: 2 FunctionCall 10(typeCast() - 514: 2 FunctionCall 12(builtinFuncs() + 527: 2 FunctionCall 6(literal() + 528: 2 FunctionCall 8(operators() + 529: 2 FunctionCall 10(typeCast() + 530: 2 FunctionCall 12(builtinFuncs() Return FunctionEnd 6(literal(): 2 Function None 3 @@ -568,11 +568,11 @@ spv.int16.amd.frag 321(u16): 15(ptr) Variable Function 393(f16v): 392(ptr) Variable Function 396(exp): 395(ptr) Variable Function - 418(packi): 158(ptr) Variable Function - 423(packu): 147(ptr) Variable Function - 432(packi64): 431(ptr) Variable Function - 441(packu64): 440(ptr) Variable Function - 450(bv): 449(ptr) Variable Function + 420(packi): 158(ptr) Variable Function + 425(packu): 147(ptr) Variable Function + 436(packi64): 435(ptr) Variable Function + 445(packu64): 444(ptr) Variable Function + 454(bv): 453(ptr) Variable Function 306:187(i16vec2) Load 305(i16v) 307:187(i16vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 306 Store 305(i16v) 307 @@ -686,114 +686,138 @@ spv.int16.amd.frag Store 411 410 412:187(i16vec2) Load 305(i16v) 413:262(f16vec2) Bitcast 412 - 414:391(f16vec3) Load 393(f16v) - 415:391(f16vec3) VectorShuffle 414 413 3 4 2 - Store 393(f16v) 415 - 416: 49(i16vec3) Load 319(u16v) - 417:391(f16vec3) Bitcast 416 - Store 393(f16v) 417 - 419:187(i16vec2) Load 305(i16v) - 420: 28(int) Bitcast 419 - Store 418(packi) 420 - 421: 28(int) Load 418(packi) - 422:187(i16vec2) Bitcast 421 - Store 305(i16v) 422 - 424: 49(i16vec3) Load 319(u16v) - 425:198(i16vec2) VectorShuffle 424 424 0 1 - 426: 18(int) Bitcast 425 - Store 423(packu) 426 - 427: 18(int) Load 423(packu) - 428:198(i16vec2) Bitcast 427 - 429: 49(i16vec3) Load 319(u16v) - 430: 49(i16vec3) VectorShuffle 429 428 3 4 2 - Store 319(u16v) 430 - 433: 17(int16_t) Load 311(i16) - 435:434(i16vec4) CompositeConstruct 433 433 433 433 - 436:273(int64_t) Bitcast 435 - Store 432(packi64) 436 - 437:273(int64_t) Load 432(packi64) - 438:434(i16vec4) Bitcast 437 - 439:187(i16vec2) VectorShuffle 438 438 0 1 - Store 305(i16v) 439 - 442: 14(int16_t) Load 321(u16) - 444:443(i16vec4) CompositeConstruct 442 442 442 442 - 445:285(int64_t) Bitcast 444 - Store 441(packu64) 445 - 446:285(int64_t) Load 441(packu64) - 447:443(i16vec4) Bitcast 446 - 448: 49(i16vec3) VectorShuffle 447 447 0 1 2 - Store 319(u16v) 448 - 451: 49(i16vec3) Load 319(u16v) - 452: 14(int16_t) Load 321(u16) - 453: 49(i16vec3) CompositeConstruct 452 452 452 - 454: 388(bvec3) ULessThan 451 453 - Store 450(bv) 454 - 455:187(i16vec2) Load 305(i16v) - 456: 17(int16_t) Load 311(i16) - 457:187(i16vec2) CompositeConstruct 456 456 - 458: 190(bvec2) SLessThan 455 457 - 459: 388(bvec3) Load 450(bv) - 460: 388(bvec3) VectorShuffle 459 458 3 4 2 - Store 450(bv) 460 - 461: 49(i16vec3) Load 319(u16v) - 462: 14(int16_t) Load 321(u16) - 463: 49(i16vec3) CompositeConstruct 462 462 462 - 464: 388(bvec3) ULessThanEqual 461 463 - Store 450(bv) 464 - 465:187(i16vec2) Load 305(i16v) - 466: 17(int16_t) Load 311(i16) - 467:187(i16vec2) CompositeConstruct 466 466 - 468: 190(bvec2) SLessThanEqual 465 467 - 469: 388(bvec3) Load 450(bv) - 470: 388(bvec3) VectorShuffle 469 468 3 4 2 - Store 450(bv) 470 - 471: 49(i16vec3) Load 319(u16v) - 472: 14(int16_t) Load 321(u16) - 473: 49(i16vec3) CompositeConstruct 472 472 472 - 474: 388(bvec3) UGreaterThan 471 473 - Store 450(bv) 474 - 475:187(i16vec2) Load 305(i16v) - 476: 17(int16_t) Load 311(i16) - 477:187(i16vec2) CompositeConstruct 476 476 - 478: 190(bvec2) SGreaterThan 475 477 - 479: 388(bvec3) Load 450(bv) - 480: 388(bvec3) VectorShuffle 479 478 3 4 2 - Store 450(bv) 480 - 481: 49(i16vec3) Load 319(u16v) - 482: 14(int16_t) Load 321(u16) - 483: 49(i16vec3) CompositeConstruct 482 482 482 - 484: 388(bvec3) UGreaterThanEqual 481 483 - Store 450(bv) 484 - 485:187(i16vec2) Load 305(i16v) - 486: 17(int16_t) Load 311(i16) - 487:187(i16vec2) CompositeConstruct 486 486 - 488: 190(bvec2) SGreaterThanEqual 485 487 - 489: 388(bvec3) Load 450(bv) - 490: 388(bvec3) VectorShuffle 489 488 3 4 2 - Store 450(bv) 490 + 414: 407(ptr) AccessChain 393(f16v) 128 + 415:261(float16_t) CompositeExtract 413 0 + Store 414 415 + 416: 407(ptr) AccessChain 393(f16v) 111 + 417:261(float16_t) CompositeExtract 413 1 + Store 416 417 + 418: 49(i16vec3) Load 319(u16v) + 419:391(f16vec3) Bitcast 418 + Store 393(f16v) 419 + 421:187(i16vec2) Load 305(i16v) + 422: 28(int) Bitcast 421 + Store 420(packi) 422 + 423: 28(int) Load 420(packi) + 424:187(i16vec2) Bitcast 423 + Store 305(i16v) 424 + 426: 49(i16vec3) Load 319(u16v) + 427:198(i16vec2) VectorShuffle 426 426 0 1 + 428: 18(int) Bitcast 427 + Store 425(packu) 428 + 429: 18(int) Load 425(packu) + 430:198(i16vec2) Bitcast 429 + 431: 15(ptr) AccessChain 319(u16v) 128 + 432: 14(int16_t) CompositeExtract 430 0 + Store 431 432 + 433: 15(ptr) AccessChain 319(u16v) 111 + 434: 14(int16_t) CompositeExtract 430 1 + Store 433 434 + 437: 17(int16_t) Load 311(i16) + 439:438(i16vec4) CompositeConstruct 437 437 437 437 + 440:273(int64_t) Bitcast 439 + Store 436(packi64) 440 + 441:273(int64_t) Load 436(packi64) + 442:438(i16vec4) Bitcast 441 + 443:187(i16vec2) VectorShuffle 442 442 0 1 + Store 305(i16v) 443 + 446: 14(int16_t) Load 321(u16) + 448:447(i16vec4) CompositeConstruct 446 446 446 446 + 449:285(int64_t) Bitcast 448 + Store 445(packu64) 449 + 450:285(int64_t) Load 445(packu64) + 451:447(i16vec4) Bitcast 450 + 452: 49(i16vec3) VectorShuffle 451 451 0 1 2 + Store 319(u16v) 452 + 455: 49(i16vec3) Load 319(u16v) + 456: 14(int16_t) Load 321(u16) + 457: 49(i16vec3) CompositeConstruct 456 456 456 + 458: 388(bvec3) ULessThan 455 457 + Store 454(bv) 458 + 459:187(i16vec2) Load 305(i16v) + 460: 17(int16_t) Load 311(i16) + 461:187(i16vec2) CompositeConstruct 460 460 + 462: 190(bvec2) SLessThan 459 461 + 463: 126(ptr) AccessChain 454(bv) 128 + 464: 125(bool) CompositeExtract 462 0 + Store 463 464 + 465: 126(ptr) AccessChain 454(bv) 111 + 466: 125(bool) CompositeExtract 462 1 + Store 465 466 + 467: 49(i16vec3) Load 319(u16v) + 468: 14(int16_t) Load 321(u16) + 469: 49(i16vec3) CompositeConstruct 468 468 468 + 470: 388(bvec3) ULessThanEqual 467 469 + Store 454(bv) 470 + 471:187(i16vec2) Load 305(i16v) + 472: 17(int16_t) Load 311(i16) + 473:187(i16vec2) CompositeConstruct 472 472 + 474: 190(bvec2) SLessThanEqual 471 473 + 475: 126(ptr) AccessChain 454(bv) 128 + 476: 125(bool) CompositeExtract 474 0 + Store 475 476 + 477: 126(ptr) AccessChain 454(bv) 111 + 478: 125(bool) CompositeExtract 474 1 + Store 477 478 + 479: 49(i16vec3) Load 319(u16v) + 480: 14(int16_t) Load 321(u16) + 481: 49(i16vec3) CompositeConstruct 480 480 480 + 482: 388(bvec3) UGreaterThan 479 481 + Store 454(bv) 482 + 483:187(i16vec2) Load 305(i16v) + 484: 17(int16_t) Load 311(i16) + 485:187(i16vec2) CompositeConstruct 484 484 + 486: 190(bvec2) SGreaterThan 483 485 + 487: 126(ptr) AccessChain 454(bv) 128 + 488: 125(bool) CompositeExtract 486 0 + Store 487 488 + 489: 126(ptr) AccessChain 454(bv) 111 + 490: 125(bool) CompositeExtract 486 1 + Store 489 490 491: 49(i16vec3) Load 319(u16v) 492: 14(int16_t) Load 321(u16) 493: 49(i16vec3) CompositeConstruct 492 492 492 - 494: 388(bvec3) IEqual 491 493 - Store 450(bv) 494 + 494: 388(bvec3) UGreaterThanEqual 491 493 + Store 454(bv) 494 495:187(i16vec2) Load 305(i16v) 496: 17(int16_t) Load 311(i16) 497:187(i16vec2) CompositeConstruct 496 496 - 498: 190(bvec2) IEqual 495 497 - 499: 388(bvec3) Load 450(bv) - 500: 388(bvec3) VectorShuffle 499 498 3 4 2 - Store 450(bv) 500 - 501: 49(i16vec3) Load 319(u16v) - 502: 14(int16_t) Load 321(u16) - 503: 49(i16vec3) CompositeConstruct 502 502 502 - 504: 388(bvec3) INotEqual 501 503 - Store 450(bv) 504 - 505:187(i16vec2) Load 305(i16v) - 506: 17(int16_t) Load 311(i16) - 507:187(i16vec2) CompositeConstruct 506 506 - 508: 190(bvec2) INotEqual 505 507 - 509: 388(bvec3) Load 450(bv) - 510: 388(bvec3) VectorShuffle 509 508 3 4 2 - Store 450(bv) 510 + 498: 190(bvec2) SGreaterThanEqual 495 497 + 499: 126(ptr) AccessChain 454(bv) 128 + 500: 125(bool) CompositeExtract 498 0 + Store 499 500 + 501: 126(ptr) AccessChain 454(bv) 111 + 502: 125(bool) CompositeExtract 498 1 + Store 501 502 + 503: 49(i16vec3) Load 319(u16v) + 504: 14(int16_t) Load 321(u16) + 505: 49(i16vec3) CompositeConstruct 504 504 504 + 506: 388(bvec3) IEqual 503 505 + Store 454(bv) 506 + 507:187(i16vec2) Load 305(i16v) + 508: 17(int16_t) Load 311(i16) + 509:187(i16vec2) CompositeConstruct 508 508 + 510: 190(bvec2) IEqual 507 509 + 511: 126(ptr) AccessChain 454(bv) 128 + 512: 125(bool) CompositeExtract 510 0 + Store 511 512 + 513: 126(ptr) AccessChain 454(bv) 111 + 514: 125(bool) CompositeExtract 510 1 + Store 513 514 + 515: 49(i16vec3) Load 319(u16v) + 516: 14(int16_t) Load 321(u16) + 517: 49(i16vec3) CompositeConstruct 516 516 516 + 518: 388(bvec3) INotEqual 515 517 + Store 454(bv) 518 + 519:187(i16vec2) Load 305(i16v) + 520: 17(int16_t) Load 311(i16) + 521:187(i16vec2) CompositeConstruct 520 520 + 522: 190(bvec2) INotEqual 519 521 + 523: 126(ptr) AccessChain 454(bv) 128 + 524: 125(bool) CompositeExtract 522 0 + Store 523 524 + 525: 126(ptr) AccessChain 454(bv) 111 + 526: 125(bool) CompositeExtract 522 1 + Store 525 526 Return FunctionEnd diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out index b58e718a1c..43cb09fee0 100644 --- a/Test/baseResults/spv.int16.frag.out +++ b/Test/baseResults/spv.int16.frag.out @@ -1,7 +1,7 @@ spv.int16.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 523 +// Id's are bound by 535 Capability Shader Capability Float16 @@ -66,35 +66,35 @@ spv.int16.frag Name 442 "u64" Name 445 "u16v4" Name 457 "bv" - Name 518 "Block" - MemberName 518(Block) 0 "i16" - MemberName 518(Block) 1 "i16v2" - MemberName 518(Block) 2 "i16v3" - MemberName 518(Block) 3 "i16v4" - MemberName 518(Block) 4 "u16" - MemberName 518(Block) 5 "u16v2" - MemberName 518(Block) 6 "u16v3" - MemberName 518(Block) 7 "u16v4" - Name 520 "block" - Name 521 "si16" - Name 522 "su16" + Name 530 "Block" + MemberName 530(Block) 0 "i16" + MemberName 530(Block) 1 "i16v2" + MemberName 530(Block) 2 "i16v3" + MemberName 530(Block) 3 "i16v4" + MemberName 530(Block) 4 "u16" + MemberName 530(Block) 5 "u16v2" + MemberName 530(Block) 6 "u16v3" + MemberName 530(Block) 7 "u16v4" + Name 532 "block" + Name 533 "si16" + Name 534 "su16" MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block Decorate 26 DescriptorSet 0 Decorate 26 Binding 0 - MemberDecorate 518(Block) 0 Offset 0 - MemberDecorate 518(Block) 1 Offset 4 - MemberDecorate 518(Block) 2 Offset 8 - MemberDecorate 518(Block) 3 Offset 16 - MemberDecorate 518(Block) 4 Offset 24 - MemberDecorate 518(Block) 5 Offset 28 - MemberDecorate 518(Block) 6 Offset 32 - MemberDecorate 518(Block) 7 Offset 40 - Decorate 518(Block) Block - Decorate 520(block) DescriptorSet 0 - Decorate 520(block) Binding 1 - Decorate 521(si16) SpecId 100 - Decorate 522(su16) SpecId 101 + MemberDecorate 530(Block) 0 Offset 0 + MemberDecorate 530(Block) 1 Offset 4 + MemberDecorate 530(Block) 2 Offset 8 + MemberDecorate 530(Block) 3 Offset 16 + MemberDecorate 530(Block) 4 Offset 24 + MemberDecorate 530(Block) 5 Offset 28 + MemberDecorate 530(Block) 6 Offset 32 + MemberDecorate 530(Block) 7 Offset 40 + Decorate 530(Block) Block + Decorate 532(block) DescriptorSet 0 + Decorate 532(block) Binding 1 + Decorate 533(si16) SpecId 100 + Decorate 534(su16) SpecId 101 2: TypeVoid 3: TypeFunction 2 14: TypeInt 16 1 @@ -186,11 +186,11 @@ spv.int16.frag 443: TypeVector 36(int16_t) 4 444: TypePointer Function 443(i16vec4) 456: TypePointer Function 425(bvec3) - 518(Block): TypeStruct 14(int16_t) 52(i16vec2) 197(i16vec3) 432(i16vec4) 36(int16_t) 57(i16vec2) 193(i16vec3) 443(i16vec4) - 519: TypePointer Uniform 518(Block) - 520(block): 519(ptr) Variable Uniform - 521(si16): 14(int16_t) SpecConstant 4294967286 - 522(su16): 36(int16_t) SpecConstant 20 + 530(Block): TypeStruct 14(int16_t) 52(i16vec2) 197(i16vec3) 432(i16vec4) 36(int16_t) 57(i16vec2) 193(i16vec3) 443(i16vec4) + 531: TypePointer Uniform 530(Block) + 532(block): 531(ptr) Variable Uniform + 533(si16): 14(int16_t) SpecConstant 4294967286 + 534(su16): 36(int16_t) SpecConstant 20 4(main): 2 Function None 3 5: Label Return @@ -675,68 +675,86 @@ spv.int16.frag 463: 14(int16_t) Load 346(i16) 464: 52(i16vec2) CompositeConstruct 463 463 465: 174(bvec2) SLessThan 462 464 - 466: 425(bvec3) Load 457(bv) - 467: 425(bvec3) VectorShuffle 466 465 3 4 2 - Store 457(bv) 467 - 468:193(i16vec3) Load 356(u16v) - 469: 36(int16_t) Load 358(u16) - 470:193(i16vec3) CompositeConstruct 469 469 469 - 471: 425(bvec3) ULessThanEqual 468 470 - Store 457(bv) 471 - 472: 52(i16vec2) Load 343(i16v) - 473: 14(int16_t) Load 346(i16) - 474: 52(i16vec2) CompositeConstruct 473 473 - 475: 174(bvec2) SLessThanEqual 472 474 - 476: 425(bvec3) Load 457(bv) - 477: 425(bvec3) VectorShuffle 476 475 3 4 2 - Store 457(bv) 477 - 478:193(i16vec3) Load 356(u16v) - 479: 36(int16_t) Load 358(u16) - 480:193(i16vec3) CompositeConstruct 479 479 479 - 481: 425(bvec3) UGreaterThan 478 480 - Store 457(bv) 481 - 482: 52(i16vec2) Load 343(i16v) - 483: 14(int16_t) Load 346(i16) - 484: 52(i16vec2) CompositeConstruct 483 483 - 485: 174(bvec2) SGreaterThan 482 484 - 486: 425(bvec3) Load 457(bv) - 487: 425(bvec3) VectorShuffle 486 485 3 4 2 - Store 457(bv) 487 - 488:193(i16vec3) Load 356(u16v) - 489: 36(int16_t) Load 358(u16) - 490:193(i16vec3) CompositeConstruct 489 489 489 - 491: 425(bvec3) UGreaterThanEqual 488 490 - Store 457(bv) 491 - 492: 52(i16vec2) Load 343(i16v) - 493: 14(int16_t) Load 346(i16) - 494: 52(i16vec2) CompositeConstruct 493 493 - 495: 174(bvec2) SGreaterThanEqual 492 494 - 496: 425(bvec3) Load 457(bv) - 497: 425(bvec3) VectorShuffle 496 495 3 4 2 + 466: 280(ptr) AccessChain 457(bv) 282 + 467: 173(bool) CompositeExtract 465 0 + Store 466 467 + 468: 280(ptr) AccessChain 457(bv) 264 + 469: 173(bool) CompositeExtract 465 1 + Store 468 469 + 470:193(i16vec3) Load 356(u16v) + 471: 36(int16_t) Load 358(u16) + 472:193(i16vec3) CompositeConstruct 471 471 471 + 473: 425(bvec3) ULessThanEqual 470 472 + Store 457(bv) 473 + 474: 52(i16vec2) Load 343(i16v) + 475: 14(int16_t) Load 346(i16) + 476: 52(i16vec2) CompositeConstruct 475 475 + 477: 174(bvec2) SLessThanEqual 474 476 + 478: 280(ptr) AccessChain 457(bv) 282 + 479: 173(bool) CompositeExtract 477 0 + Store 478 479 + 480: 280(ptr) AccessChain 457(bv) 264 + 481: 173(bool) CompositeExtract 477 1 + Store 480 481 + 482:193(i16vec3) Load 356(u16v) + 483: 36(int16_t) Load 358(u16) + 484:193(i16vec3) CompositeConstruct 483 483 483 + 485: 425(bvec3) UGreaterThan 482 484 + Store 457(bv) 485 + 486: 52(i16vec2) Load 343(i16v) + 487: 14(int16_t) Load 346(i16) + 488: 52(i16vec2) CompositeConstruct 487 487 + 489: 174(bvec2) SGreaterThan 486 488 + 490: 280(ptr) AccessChain 457(bv) 282 + 491: 173(bool) CompositeExtract 489 0 + Store 490 491 + 492: 280(ptr) AccessChain 457(bv) 264 + 493: 173(bool) CompositeExtract 489 1 + Store 492 493 + 494:193(i16vec3) Load 356(u16v) + 495: 36(int16_t) Load 358(u16) + 496:193(i16vec3) CompositeConstruct 495 495 495 + 497: 425(bvec3) UGreaterThanEqual 494 496 Store 457(bv) 497 - 498:193(i16vec3) Load 356(u16v) - 499: 36(int16_t) Load 358(u16) - 500:193(i16vec3) CompositeConstruct 499 499 499 - 501: 425(bvec3) IEqual 498 500 - Store 457(bv) 501 - 502: 52(i16vec2) Load 343(i16v) - 503: 14(int16_t) Load 346(i16) - 504: 52(i16vec2) CompositeConstruct 503 503 - 505: 174(bvec2) IEqual 502 504 - 506: 425(bvec3) Load 457(bv) - 507: 425(bvec3) VectorShuffle 506 505 3 4 2 - Store 457(bv) 507 - 508:193(i16vec3) Load 356(u16v) - 509: 36(int16_t) Load 358(u16) - 510:193(i16vec3) CompositeConstruct 509 509 509 - 511: 425(bvec3) INotEqual 508 510 - Store 457(bv) 511 - 512: 52(i16vec2) Load 343(i16v) - 513: 14(int16_t) Load 346(i16) - 514: 52(i16vec2) CompositeConstruct 513 513 - 515: 174(bvec2) INotEqual 512 514 - 516: 425(bvec3) Load 457(bv) - 517: 425(bvec3) VectorShuffle 516 515 3 4 2 - Store 457(bv) 517 + 498: 52(i16vec2) Load 343(i16v) + 499: 14(int16_t) Load 346(i16) + 500: 52(i16vec2) CompositeConstruct 499 499 + 501: 174(bvec2) SGreaterThanEqual 498 500 + 502: 280(ptr) AccessChain 457(bv) 282 + 503: 173(bool) CompositeExtract 501 0 + Store 502 503 + 504: 280(ptr) AccessChain 457(bv) 264 + 505: 173(bool) CompositeExtract 501 1 + Store 504 505 + 506:193(i16vec3) Load 356(u16v) + 507: 36(int16_t) Load 358(u16) + 508:193(i16vec3) CompositeConstruct 507 507 507 + 509: 425(bvec3) IEqual 506 508 + Store 457(bv) 509 + 510: 52(i16vec2) Load 343(i16v) + 511: 14(int16_t) Load 346(i16) + 512: 52(i16vec2) CompositeConstruct 511 511 + 513: 174(bvec2) IEqual 510 512 + 514: 280(ptr) AccessChain 457(bv) 282 + 515: 173(bool) CompositeExtract 513 0 + Store 514 515 + 516: 280(ptr) AccessChain 457(bv) 264 + 517: 173(bool) CompositeExtract 513 1 + Store 516 517 + 518:193(i16vec3) Load 356(u16v) + 519: 36(int16_t) Load 358(u16) + 520:193(i16vec3) CompositeConstruct 519 519 519 + 521: 425(bvec3) INotEqual 518 520 + Store 457(bv) 521 + 522: 52(i16vec2) Load 343(i16v) + 523: 14(int16_t) Load 346(i16) + 524: 52(i16vec2) CompositeConstruct 523 523 + 525: 174(bvec2) INotEqual 522 524 + 526: 280(ptr) AccessChain 457(bv) 282 + 527: 173(bool) CompositeExtract 525 0 + Store 526 527 + 528: 280(ptr) AccessChain 457(bv) 264 + 529: 173(bool) CompositeExtract 525 1 + Store 528 529 Return FunctionEnd diff --git a/Test/baseResults/spv.int32.frag.out b/Test/baseResults/spv.int32.frag.out index 0ef51e89c2..af232ec3cd 100644 --- a/Test/baseResults/spv.int32.frag.out +++ b/Test/baseResults/spv.int32.frag.out @@ -1,7 +1,7 @@ spv.int32.frag // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 493 +// Id's are bound by 505 Capability Shader Capability Float16 @@ -65,41 +65,41 @@ spv.int32.frag Name 416 "u32v2" Name 418 "u64" Name 422 "bv" - Name 485 "Block" - MemberName 485(Block) 0 "i32" - MemberName 485(Block) 1 "i32v2" - MemberName 485(Block) 2 "i32v3" - MemberName 485(Block) 3 "i32v4" - MemberName 485(Block) 4 "u32" - MemberName 485(Block) 5 "u32v2" - MemberName 485(Block) 6 "u32v3" - MemberName 485(Block) 7 "u32v4" - Name 487 "block" - Name 488 "si32" - Name 489 "su32" - Name 490 "si" - Name 491 "su" - Name 492 "sb" + Name 497 "Block" + MemberName 497(Block) 0 "i32" + MemberName 497(Block) 1 "i32v2" + MemberName 497(Block) 2 "i32v3" + MemberName 497(Block) 3 "i32v4" + MemberName 497(Block) 4 "u32" + MemberName 497(Block) 5 "u32v2" + MemberName 497(Block) 6 "u32v3" + MemberName 497(Block) 7 "u32v4" + Name 499 "block" + Name 500 "si32" + Name 501 "su32" + Name 502 "si" + Name 503 "su" + Name 504 "sb" MemberDecorate 27(Uniforms) 0 Offset 0 Decorate 27(Uniforms) Block Decorate 29 DescriptorSet 0 Decorate 29 Binding 0 - MemberDecorate 485(Block) 0 Offset 0 - MemberDecorate 485(Block) 1 Offset 8 - MemberDecorate 485(Block) 2 Offset 16 - MemberDecorate 485(Block) 3 Offset 32 - MemberDecorate 485(Block) 4 Offset 48 - MemberDecorate 485(Block) 5 Offset 56 - MemberDecorate 485(Block) 6 Offset 64 - MemberDecorate 485(Block) 7 Offset 80 - Decorate 485(Block) Block - Decorate 487(block) DescriptorSet 0 - Decorate 487(block) Binding 1 - Decorate 488(si32) SpecId 100 - Decorate 489(su32) SpecId 101 - Decorate 490(si) SpecId 102 - Decorate 491(su) SpecId 103 - Decorate 492(sb) SpecId 104 + MemberDecorate 497(Block) 0 Offset 0 + MemberDecorate 497(Block) 1 Offset 8 + MemberDecorate 497(Block) 2 Offset 16 + MemberDecorate 497(Block) 3 Offset 32 + MemberDecorate 497(Block) 4 Offset 48 + MemberDecorate 497(Block) 5 Offset 56 + MemberDecorate 497(Block) 6 Offset 64 + MemberDecorate 497(Block) 7 Offset 80 + Decorate 497(Block) Block + Decorate 499(block) DescriptorSet 0 + Decorate 499(block) Binding 1 + Decorate 500(si32) SpecId 100 + Decorate 501(su32) SpecId 101 + Decorate 502(si) SpecId 102 + Decorate 503(su) SpecId 103 + Decorate 504(sb) SpecId 104 2: TypeVoid 3: TypeFunction 2 14: TypeInt 32 0 @@ -185,16 +185,16 @@ spv.int32.frag 406: TypePointer Function 405(i8vec4) 417: TypePointer Function 63(int64_t) 421: TypePointer Function 394(bvec3) - 483: TypeVector 18(int) 4 - 484: TypeVector 14(int) 4 - 485(Block): TypeStruct 18(int) 52(ivec2) 188(ivec3) 483(ivec4) 14(int) 49(ivec2) 184(ivec3) 484(ivec4) - 486: TypePointer Uniform 485(Block) - 487(block): 486(ptr) Variable Uniform - 488(si32): 18(int) SpecConstant 4294967286 - 489(su32): 14(int) SpecConstant 20 - 490(si): 18(int) SpecConstant 4294967291 - 491(su): 14(int) SpecConstant 4 - 492(sb): 165(bool) SpecConstantTrue + 495: TypeVector 18(int) 4 + 496: TypeVector 14(int) 4 + 497(Block): TypeStruct 18(int) 52(ivec2) 188(ivec3) 495(ivec4) 14(int) 49(ivec2) 184(ivec3) 496(ivec4) + 498: TypePointer Uniform 497(Block) + 499(block): 498(ptr) Variable Uniform + 500(si32): 18(int) SpecConstant 4294967286 + 501(su32): 14(int) SpecConstant 20 + 502(si): 18(int) SpecConstant 4294967291 + 503(su): 14(int) SpecConstant 4 + 504(sb): 165(bool) SpecConstantTrue 4(main): 2 Function None 3 5: Label Store 16(u32Max) 17 @@ -645,68 +645,86 @@ spv.int32.frag 428: 18(int) Load 315(i32) 429: 52(ivec2) CompositeConstruct 428 428 430: 166(bvec2) SLessThan 427 429 - 431: 394(bvec3) Load 422(bv) - 432: 394(bvec3) VectorShuffle 431 430 3 4 2 - Store 422(bv) 432 - 433: 184(ivec3) Load 325(u32v) - 434: 14(int) Load 327(u32) - 435: 184(ivec3) CompositeConstruct 434 434 434 - 436: 394(bvec3) ULessThanEqual 433 435 - Store 422(bv) 436 - 437: 52(ivec2) Load 312(i32v) - 438: 18(int) Load 315(i32) - 439: 52(ivec2) CompositeConstruct 438 438 - 440: 166(bvec2) SLessThanEqual 437 439 - 441: 394(bvec3) Load 422(bv) - 442: 394(bvec3) VectorShuffle 441 440 3 4 2 - Store 422(bv) 442 - 443: 184(ivec3) Load 325(u32v) - 444: 14(int) Load 327(u32) - 445: 184(ivec3) CompositeConstruct 444 444 444 - 446: 394(bvec3) UGreaterThan 443 445 - Store 422(bv) 446 - 447: 52(ivec2) Load 312(i32v) - 448: 18(int) Load 315(i32) - 449: 52(ivec2) CompositeConstruct 448 448 - 450: 166(bvec2) SGreaterThan 447 449 - 451: 394(bvec3) Load 422(bv) - 452: 394(bvec3) VectorShuffle 451 450 3 4 2 - Store 422(bv) 452 - 453: 184(ivec3) Load 325(u32v) - 454: 14(int) Load 327(u32) - 455: 184(ivec3) CompositeConstruct 454 454 454 - 456: 394(bvec3) UGreaterThanEqual 453 455 - Store 422(bv) 456 - 457: 52(ivec2) Load 312(i32v) - 458: 18(int) Load 315(i32) - 459: 52(ivec2) CompositeConstruct 458 458 - 460: 166(bvec2) SGreaterThanEqual 457 459 - 461: 394(bvec3) Load 422(bv) - 462: 394(bvec3) VectorShuffle 461 460 3 4 2 + 431: 259(ptr) AccessChain 422(bv) 175 + 432: 165(bool) CompositeExtract 430 0 + Store 431 432 + 433: 259(ptr) AccessChain 422(bv) 176 + 434: 165(bool) CompositeExtract 430 1 + Store 433 434 + 435: 184(ivec3) Load 325(u32v) + 436: 14(int) Load 327(u32) + 437: 184(ivec3) CompositeConstruct 436 436 436 + 438: 394(bvec3) ULessThanEqual 435 437 + Store 422(bv) 438 + 439: 52(ivec2) Load 312(i32v) + 440: 18(int) Load 315(i32) + 441: 52(ivec2) CompositeConstruct 440 440 + 442: 166(bvec2) SLessThanEqual 439 441 + 443: 259(ptr) AccessChain 422(bv) 175 + 444: 165(bool) CompositeExtract 442 0 + Store 443 444 + 445: 259(ptr) AccessChain 422(bv) 176 + 446: 165(bool) CompositeExtract 442 1 + Store 445 446 + 447: 184(ivec3) Load 325(u32v) + 448: 14(int) Load 327(u32) + 449: 184(ivec3) CompositeConstruct 448 448 448 + 450: 394(bvec3) UGreaterThan 447 449 + Store 422(bv) 450 + 451: 52(ivec2) Load 312(i32v) + 452: 18(int) Load 315(i32) + 453: 52(ivec2) CompositeConstruct 452 452 + 454: 166(bvec2) SGreaterThan 451 453 + 455: 259(ptr) AccessChain 422(bv) 175 + 456: 165(bool) CompositeExtract 454 0 + Store 455 456 + 457: 259(ptr) AccessChain 422(bv) 176 + 458: 165(bool) CompositeExtract 454 1 + Store 457 458 + 459: 184(ivec3) Load 325(u32v) + 460: 14(int) Load 327(u32) + 461: 184(ivec3) CompositeConstruct 460 460 460 + 462: 394(bvec3) UGreaterThanEqual 459 461 Store 422(bv) 462 - 463: 184(ivec3) Load 325(u32v) - 464: 14(int) Load 327(u32) - 465: 184(ivec3) CompositeConstruct 464 464 464 - 466: 394(bvec3) IEqual 463 465 - Store 422(bv) 466 - 467: 52(ivec2) Load 312(i32v) - 468: 18(int) Load 315(i32) - 469: 52(ivec2) CompositeConstruct 468 468 - 470: 166(bvec2) IEqual 467 469 - 471: 394(bvec3) Load 422(bv) - 472: 394(bvec3) VectorShuffle 471 470 3 4 2 - Store 422(bv) 472 - 473: 184(ivec3) Load 325(u32v) - 474: 14(int) Load 327(u32) - 475: 184(ivec3) CompositeConstruct 474 474 474 - 476: 394(bvec3) INotEqual 473 475 - Store 422(bv) 476 - 477: 52(ivec2) Load 312(i32v) - 478: 18(int) Load 315(i32) - 479: 52(ivec2) CompositeConstruct 478 478 - 480: 166(bvec2) INotEqual 477 479 - 481: 394(bvec3) Load 422(bv) - 482: 394(bvec3) VectorShuffle 481 480 3 4 2 - Store 422(bv) 482 + 463: 52(ivec2) Load 312(i32v) + 464: 18(int) Load 315(i32) + 465: 52(ivec2) CompositeConstruct 464 464 + 466: 166(bvec2) SGreaterThanEqual 463 465 + 467: 259(ptr) AccessChain 422(bv) 175 + 468: 165(bool) CompositeExtract 466 0 + Store 467 468 + 469: 259(ptr) AccessChain 422(bv) 176 + 470: 165(bool) CompositeExtract 466 1 + Store 469 470 + 471: 184(ivec3) Load 325(u32v) + 472: 14(int) Load 327(u32) + 473: 184(ivec3) CompositeConstruct 472 472 472 + 474: 394(bvec3) IEqual 471 473 + Store 422(bv) 474 + 475: 52(ivec2) Load 312(i32v) + 476: 18(int) Load 315(i32) + 477: 52(ivec2) CompositeConstruct 476 476 + 478: 166(bvec2) IEqual 475 477 + 479: 259(ptr) AccessChain 422(bv) 175 + 480: 165(bool) CompositeExtract 478 0 + Store 479 480 + 481: 259(ptr) AccessChain 422(bv) 176 + 482: 165(bool) CompositeExtract 478 1 + Store 481 482 + 483: 184(ivec3) Load 325(u32v) + 484: 14(int) Load 327(u32) + 485: 184(ivec3) CompositeConstruct 484 484 484 + 486: 394(bvec3) INotEqual 483 485 + Store 422(bv) 486 + 487: 52(ivec2) Load 312(i32v) + 488: 18(int) Load 315(i32) + 489: 52(ivec2) CompositeConstruct 488 488 + 490: 166(bvec2) INotEqual 487 489 + 491: 259(ptr) AccessChain 422(bv) 175 + 492: 165(bool) CompositeExtract 490 0 + Store 491 492 + 493: 259(ptr) AccessChain 422(bv) 176 + 494: 165(bool) CompositeExtract 490 1 + Store 493 494 Return FunctionEnd diff --git a/Test/baseResults/spv.int64.frag.out b/Test/baseResults/spv.int64.frag.out index b7a93a5203..f2fd600f45 100644 --- a/Test/baseResults/spv.int64.frag.out +++ b/Test/baseResults/spv.int64.frag.out @@ -2,7 +2,7 @@ spv.int64.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 499 +// Id's are bound by 513 Capability Shader Capability Float64 @@ -44,48 +44,48 @@ Validation failed Name 299 "u64v" Name 301 "u64" Name 373 "dv" - Name 392 "iv" - Name 397 "uv" - Name 401 "bv" - Name 472 "Block" - MemberName 472(Block) 0 "i64v" - MemberName 472(Block) 1 "u64" - Name 474 "block" - Name 475 "si64" - Name 476 "su64" - Name 477 "si" - Name 478 "su" - Name 479 "sb" - Name 480 "su64inc" - Name 481 "i64_to_b" - Name 482 "u64_to_b" - Name 483 "b_to_i64" - Name 484 "b_to_u64" - Name 485 "i64_to_i" - Name 486 "i_to_i64" - Name 487 "u64_to_u" - Name 488 "u_to_u64" - Name 489 "u64_to_i64" - Name 490 "i64_to_u64" - Name 492 "u64_to_i" - Name 494 "i_to_u64" - Name 496 "i64_to_u" - Name 498 "u_to_i64" + Name 394 "iv" + Name 399 "uv" + Name 403 "bv" + Name 486 "Block" + MemberName 486(Block) 0 "i64v" + MemberName 486(Block) 1 "u64" + Name 488 "block" + Name 489 "si64" + Name 490 "su64" + Name 491 "si" + Name 492 "su" + Name 493 "sb" + Name 494 "su64inc" + Name 495 "i64_to_b" + Name 496 "u64_to_b" + Name 497 "b_to_i64" + Name 498 "b_to_u64" + Name 499 "i64_to_i" + Name 500 "i_to_i64" + Name 501 "u64_to_u" + Name 502 "u_to_u64" + Name 503 "u64_to_i64" + Name 504 "i64_to_u64" + Name 506 "u64_to_i" + Name 508 "i_to_u64" + Name 510 "i64_to_u" + Name 512 "u_to_i64" MemberDecorate 28(Uniforms) 0 Offset 0 Decorate 28(Uniforms) Block Decorate 30 DescriptorSet 0 Decorate 30 Binding 0 - MemberDecorate 472(Block) 0 Offset 0 - MemberDecorate 472(Block) 1 Offset 24 - Decorate 472(Block) Block - Decorate 474(block) DescriptorSet 0 - Decorate 474(block) Binding 1 - Decorate 475(si64) SpecId 100 - Decorate 476(su64) SpecId 101 - Decorate 477(si) SpecId 102 - Decorate 478(su) SpecId 103 - Decorate 479(sb) SpecId 104 - Decorate 480(su64inc) SpecId 105 + MemberDecorate 486(Block) 0 Offset 0 + MemberDecorate 486(Block) 1 Offset 24 + Decorate 486(Block) Block + Decorate 488(block) DescriptorSet 0 + Decorate 488(block) Binding 1 + Decorate 489(si64) SpecId 100 + Decorate 490(su64) SpecId 101 + Decorate 491(si) SpecId 102 + Decorate 492(su) SpecId 103 + Decorate 493(sb) SpecId 104 + Decorate 494(su64inc) SpecId 105 2: TypeVoid 3: TypeFunction 2 14: TypeInt 64 0 @@ -161,38 +161,38 @@ Validation failed 371: TypeVector 94(float64_t) 3 372: TypePointer Function 371(f64vec3) 377: TypePointer Function 94(float64_t) - 388: 31(int) Constant 1 - 389: 31(int) Constant 2 - 390: 74(ivec2) ConstantComposite 388 389 - 395: 81(ivec2) ConstantComposite 217 22 - 400: TypePointer Function 368(bvec3) - 472(Block): TypeStruct 136(i64vec3) 14(int64_t) - 473: TypePointer Uniform 472(Block) - 474(block): 473(ptr) Variable Uniform - 475(si64): 18(int64_t) SpecConstant 4294967286 4294967295 - 476(su64): 14(int64_t) SpecConstant 20 0 - 477(si): 31(int) SpecConstant 4294967291 - 478(su): 21(int) SpecConstant 4 - 479(sb): 55(bool) SpecConstantTrue - 480(su64inc): 14(int64_t) SpecConstantOp 128 476(su64) 70 - 481(i64_to_b): 55(bool) SpecConstantOp 171 475(si64) 69 - 482(u64_to_b): 55(bool) SpecConstantOp 171 476(su64) 69 - 483(b_to_i64): 18(int64_t) SpecConstantOp 169 479(sb) 61 60 - 484(b_to_u64): 14(int64_t) SpecConstantOp 169 479(sb) 70 69 - 485(i64_to_i): 31(int) SpecConstantOp 114 475(si64) - 486(i_to_i64): 18(int64_t) SpecConstantOp 114 477(si) - 487(u64_to_u): 21(int) SpecConstantOp 113 476(su64) - 488(u_to_u64): 14(int64_t) SpecConstantOp 113 478(su) - 489(u64_to_i64): 18(int64_t) SpecConstantOp 128 476(su64) 69 - 490(i64_to_u64): 14(int64_t) SpecConstantOp 128 475(si64) 69 - 491: 21(int) SpecConstantOp 113 476(su64) - 492(u64_to_i): 31(int) SpecConstantOp 128 491 227 - 493: 18(int64_t) SpecConstantOp 114 477(si) - 494(i_to_u64): 14(int64_t) SpecConstantOp 128 493 69 - 495: 31(int) SpecConstantOp 114 475(si64) - 496(i64_to_u): 21(int) SpecConstantOp 128 495 227 - 497: 14(int64_t) SpecConstantOp 113 478(su) - 498(u_to_i64): 18(int64_t) SpecConstantOp 128 497 69 + 390: 31(int) Constant 1 + 391: 31(int) Constant 2 + 392: 74(ivec2) ConstantComposite 390 391 + 397: 81(ivec2) ConstantComposite 217 22 + 402: TypePointer Function 368(bvec3) + 486(Block): TypeStruct 136(i64vec3) 14(int64_t) + 487: TypePointer Uniform 486(Block) + 488(block): 487(ptr) Variable Uniform + 489(si64): 18(int64_t) SpecConstant 4294967286 4294967295 + 490(su64): 14(int64_t) SpecConstant 20 0 + 491(si): 31(int) SpecConstant 4294967291 + 492(su): 21(int) SpecConstant 4 + 493(sb): 55(bool) SpecConstantTrue + 494(su64inc): 14(int64_t) SpecConstantOp 128 490(su64) 70 + 495(i64_to_b): 55(bool) SpecConstantOp 171 489(si64) 69 + 496(u64_to_b): 55(bool) SpecConstantOp 171 490(su64) 69 + 497(b_to_i64): 18(int64_t) SpecConstantOp 169 493(sb) 61 60 + 498(b_to_u64): 14(int64_t) SpecConstantOp 169 493(sb) 70 69 + 499(i64_to_i): 31(int) SpecConstantOp 114 489(si64) + 500(i_to_i64): 18(int64_t) SpecConstantOp 114 491(si) + 501(u64_to_u): 21(int) SpecConstantOp 113 490(su64) + 502(u_to_u64): 14(int64_t) SpecConstantOp 113 492(su) + 503(u64_to_i64): 18(int64_t) SpecConstantOp 128 490(su64) 69 + 504(i64_to_u64): 14(int64_t) SpecConstantOp 128 489(si64) 69 + 505: 21(int) SpecConstantOp 113 490(su64) + 506(u64_to_i): 31(int) SpecConstantOp 128 505 227 + 507: 18(int64_t) SpecConstantOp 114 491(si) + 508(i_to_u64): 14(int64_t) SpecConstantOp 128 507 69 + 509: 31(int) SpecConstantOp 114 489(si64) + 510(i64_to_u): 21(int) SpecConstantOp 128 509 227 + 511: 14(int64_t) SpecConstantOp 113 492(su) + 512(u_to_i64): 18(int64_t) SpecConstantOp 128 511 69 4(main): 2 Function None 3 5: Label Store 16(u64Max) 17 @@ -487,9 +487,9 @@ Validation failed 299(u64v): 133(ptr) Variable Function 301(u64): 40(ptr) Variable Function 373(dv): 372(ptr) Variable Function - 392(iv): 75(ptr) Variable Function - 397(uv): 82(ptr) Variable Function - 401(bv): 400(ptr) Variable Function + 394(iv): 75(ptr) Variable Function + 399(uv): 82(ptr) Variable Function + 403(bv): 402(ptr) Variable Function 287: 52(i64vec2) Load 286(i64v) 288: 52(i64vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 287 Store 286(i64v) 288 @@ -593,107 +593,128 @@ Validation failed Store 381 380 382: 52(i64vec2) Load 286(i64v) 383: 95(f64vec2) Bitcast 382 - 384:371(f64vec3) Load 373(dv) - 385:371(f64vec3) VectorShuffle 384 383 3 4 2 - Store 373(dv) 385 - 386:132(i64vec3) Load 299(u64v) - 387:371(f64vec3) Bitcast 386 - Store 373(dv) 387 - 391: 18(int64_t) Bitcast 390 - Store 289(i64) 391 - 393: 18(int64_t) Load 289(i64) - 394: 74(ivec2) Bitcast 393 - Store 392(iv) 394 - 396: 14(int64_t) Bitcast 395 - Store 301(u64) 396 - 398: 14(int64_t) Load 301(u64) - 399: 81(ivec2) Bitcast 398 - Store 397(uv) 399 - 402:132(i64vec3) Load 299(u64v) - 403: 14(int64_t) Load 301(u64) - 404:132(i64vec3) CompositeConstruct 403 403 403 - 405: 368(bvec3) ULessThan 402 404 - Store 401(bv) 405 - 406: 52(i64vec2) Load 286(i64v) - 407: 18(int64_t) Load 289(i64) - 408: 52(i64vec2) CompositeConstruct 407 407 - 409: 56(bvec2) SLessThan 406 408 - 410: 368(bvec3) Load 401(bv) - 411: 368(bvec3) VectorShuffle 410 409 3 4 2 - Store 401(bv) 411 - 412:132(i64vec3) Load 299(u64v) - 413: 14(int64_t) Load 301(u64) - 414:132(i64vec3) CompositeConstruct 413 413 413 - 415: 368(bvec3) ULessThanEqual 412 414 - Store 401(bv) 415 - 416: 52(i64vec2) Load 286(i64v) - 417: 18(int64_t) Load 289(i64) - 418: 52(i64vec2) CompositeConstruct 417 417 - 419: 56(bvec2) SLessThanEqual 416 418 - 420: 368(bvec3) Load 401(bv) - 421: 368(bvec3) VectorShuffle 420 419 3 4 2 - Store 401(bv) 421 - 422:132(i64vec3) Load 299(u64v) - 423: 14(int64_t) Load 301(u64) - 424:132(i64vec3) CompositeConstruct 423 423 423 - 425: 368(bvec3) UGreaterThan 422 424 - Store 401(bv) 425 - 426: 52(i64vec2) Load 286(i64v) - 427: 18(int64_t) Load 289(i64) - 428: 52(i64vec2) CompositeConstruct 427 427 - 429: 56(bvec2) SGreaterThan 426 428 - 430: 368(bvec3) Load 401(bv) - 431: 368(bvec3) VectorShuffle 430 429 3 4 2 - Store 401(bv) 431 - 432:132(i64vec3) Load 299(u64v) - 433: 14(int64_t) Load 301(u64) - 434:132(i64vec3) CompositeConstruct 433 433 433 - 435: 368(bvec3) UGreaterThanEqual 432 434 - Store 401(bv) 435 - 436: 52(i64vec2) Load 286(i64v) - 437: 18(int64_t) Load 289(i64) - 438: 52(i64vec2) CompositeConstruct 437 437 - 439: 56(bvec2) SGreaterThanEqual 436 438 - 440: 368(bvec3) Load 401(bv) - 441: 368(bvec3) VectorShuffle 440 439 3 4 2 - Store 401(bv) 441 - 442:132(i64vec3) Load 299(u64v) - 443: 14(int64_t) Load 301(u64) - 444:132(i64vec3) CompositeConstruct 443 443 443 - 445: 368(bvec3) IEqual 442 444 - Store 401(bv) 445 - 446: 52(i64vec2) Load 286(i64v) - 447: 18(int64_t) Load 289(i64) - 448: 52(i64vec2) CompositeConstruct 447 447 - 449: 56(bvec2) IEqual 446 448 - 450: 368(bvec3) Load 401(bv) - 451: 368(bvec3) VectorShuffle 450 449 3 4 2 - Store 401(bv) 451 + 384: 377(ptr) AccessChain 373(dv) 227 + 385:94(float64_t) CompositeExtract 383 0 + Store 384 385 + 386: 377(ptr) AccessChain 373(dv) 203 + 387:94(float64_t) CompositeExtract 383 1 + Store 386 387 + 388:132(i64vec3) Load 299(u64v) + 389:371(f64vec3) Bitcast 388 + Store 373(dv) 389 + 393: 18(int64_t) Bitcast 392 + Store 289(i64) 393 + 395: 18(int64_t) Load 289(i64) + 396: 74(ivec2) Bitcast 395 + Store 394(iv) 396 + 398: 14(int64_t) Bitcast 397 + Store 301(u64) 398 + 400: 14(int64_t) Load 301(u64) + 401: 81(ivec2) Bitcast 400 + Store 399(uv) 401 + 404:132(i64vec3) Load 299(u64v) + 405: 14(int64_t) Load 301(u64) + 406:132(i64vec3) CompositeConstruct 405 405 405 + 407: 368(bvec3) ULessThan 404 406 + Store 403(bv) 407 + 408: 52(i64vec2) Load 286(i64v) + 409: 18(int64_t) Load 289(i64) + 410: 52(i64vec2) CompositeConstruct 409 409 + 411: 56(bvec2) SLessThan 408 410 + 412: 225(ptr) AccessChain 403(bv) 227 + 413: 55(bool) CompositeExtract 411 0 + Store 412 413 + 414: 225(ptr) AccessChain 403(bv) 203 + 415: 55(bool) CompositeExtract 411 1 + Store 414 415 + 416:132(i64vec3) Load 299(u64v) + 417: 14(int64_t) Load 301(u64) + 418:132(i64vec3) CompositeConstruct 417 417 417 + 419: 368(bvec3) ULessThanEqual 416 418 + Store 403(bv) 419 + 420: 52(i64vec2) Load 286(i64v) + 421: 18(int64_t) Load 289(i64) + 422: 52(i64vec2) CompositeConstruct 421 421 + 423: 56(bvec2) SLessThanEqual 420 422 + 424: 225(ptr) AccessChain 403(bv) 227 + 425: 55(bool) CompositeExtract 423 0 + Store 424 425 + 426: 225(ptr) AccessChain 403(bv) 203 + 427: 55(bool) CompositeExtract 423 1 + Store 426 427 + 428:132(i64vec3) Load 299(u64v) + 429: 14(int64_t) Load 301(u64) + 430:132(i64vec3) CompositeConstruct 429 429 429 + 431: 368(bvec3) UGreaterThan 428 430 + Store 403(bv) 431 + 432: 52(i64vec2) Load 286(i64v) + 433: 18(int64_t) Load 289(i64) + 434: 52(i64vec2) CompositeConstruct 433 433 + 435: 56(bvec2) SGreaterThan 432 434 + 436: 225(ptr) AccessChain 403(bv) 227 + 437: 55(bool) CompositeExtract 435 0 + Store 436 437 + 438: 225(ptr) AccessChain 403(bv) 203 + 439: 55(bool) CompositeExtract 435 1 + Store 438 439 + 440:132(i64vec3) Load 299(u64v) + 441: 14(int64_t) Load 301(u64) + 442:132(i64vec3) CompositeConstruct 441 441 441 + 443: 368(bvec3) UGreaterThanEqual 440 442 + Store 403(bv) 443 + 444: 52(i64vec2) Load 286(i64v) + 445: 18(int64_t) Load 289(i64) + 446: 52(i64vec2) CompositeConstruct 445 445 + 447: 56(bvec2) SGreaterThanEqual 444 446 + 448: 225(ptr) AccessChain 403(bv) 227 + 449: 55(bool) CompositeExtract 447 0 + Store 448 449 + 450: 225(ptr) AccessChain 403(bv) 203 + 451: 55(bool) CompositeExtract 447 1 + Store 450 451 452:132(i64vec3) Load 299(u64v) 453: 14(int64_t) Load 301(u64) 454:132(i64vec3) CompositeConstruct 453 453 453 - 455: 368(bvec3) INotEqual 452 454 - Store 401(bv) 455 + 455: 368(bvec3) IEqual 452 454 + Store 403(bv) 455 456: 52(i64vec2) Load 286(i64v) 457: 18(int64_t) Load 289(i64) 458: 52(i64vec2) CompositeConstruct 457 457 - 459: 56(bvec2) INotEqual 456 458 - 460: 368(bvec3) Load 401(bv) - 461: 368(bvec3) VectorShuffle 460 459 3 4 2 - Store 401(bv) 461 - 462: 14(int64_t) Load 301(u64) - 463: 18(int64_t) ExtInst 1(GLSL.std.450) 73(FindILsb) 462 - Store 289(i64) 463 - 464: 14(int64_t) Load 301(u64) - 465: 65(i64vec2) CompositeConstruct 464 464 - 466: 52(i64vec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 465 - Store 286(i64v) 466 - 467: 14(int64_t) Load 301(u64) - 468: 18(int64_t) BitCount 467 - Store 289(i64) 468 - 469: 14(int64_t) Load 301(u64) - 470: 65(i64vec2) CompositeConstruct 469 469 - 471: 52(i64vec2) BitCount 470 - Store 286(i64v) 471 + 459: 56(bvec2) IEqual 456 458 + 460: 225(ptr) AccessChain 403(bv) 227 + 461: 55(bool) CompositeExtract 459 0 + Store 460 461 + 462: 225(ptr) AccessChain 403(bv) 203 + 463: 55(bool) CompositeExtract 459 1 + Store 462 463 + 464:132(i64vec3) Load 299(u64v) + 465: 14(int64_t) Load 301(u64) + 466:132(i64vec3) CompositeConstruct 465 465 465 + 467: 368(bvec3) INotEqual 464 466 + Store 403(bv) 467 + 468: 52(i64vec2) Load 286(i64v) + 469: 18(int64_t) Load 289(i64) + 470: 52(i64vec2) CompositeConstruct 469 469 + 471: 56(bvec2) INotEqual 468 470 + 472: 225(ptr) AccessChain 403(bv) 227 + 473: 55(bool) CompositeExtract 471 0 + Store 472 473 + 474: 225(ptr) AccessChain 403(bv) 203 + 475: 55(bool) CompositeExtract 471 1 + Store 474 475 + 476: 14(int64_t) Load 301(u64) + 477: 18(int64_t) ExtInst 1(GLSL.std.450) 73(FindILsb) 476 + Store 289(i64) 477 + 478: 14(int64_t) Load 301(u64) + 479: 65(i64vec2) CompositeConstruct 478 478 + 480: 52(i64vec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 479 + Store 286(i64v) 480 + 481: 14(int64_t) Load 301(u64) + 482: 18(int64_t) BitCount 481 + Store 289(i64) 482 + 483: 14(int64_t) Load 301(u64) + 484: 65(i64vec2) CompositeConstruct 483 483 + 485: 52(i64vec2) BitCount 484 + Store 286(i64v) 485 Return FunctionEnd diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out index e88707d27b..a0da3e99f4 100644 --- a/Test/baseResults/spv.int8.frag.out +++ b/Test/baseResults/spv.int8.frag.out @@ -1,7 +1,7 @@ spv.int8.frag // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 518 +// Id's are bound by 530 Capability Shader Capability Float16 @@ -66,35 +66,35 @@ spv.int8.frag Name 437 "u32" Name 440 "u8v4" Name 452 "bv" - Name 513 "Block" - MemberName 513(Block) 0 "i8" - MemberName 513(Block) 1 "i8v2" - MemberName 513(Block) 2 "i8v3" - MemberName 513(Block) 3 "i8v4" - MemberName 513(Block) 4 "u8" - MemberName 513(Block) 5 "u8v2" - MemberName 513(Block) 6 "u8v3" - MemberName 513(Block) 7 "u8v4" - Name 515 "block" - Name 516 "si8" - Name 517 "su8" + Name 525 "Block" + MemberName 525(Block) 0 "i8" + MemberName 525(Block) 1 "i8v2" + MemberName 525(Block) 2 "i8v3" + MemberName 525(Block) 3 "i8v4" + MemberName 525(Block) 4 "u8" + MemberName 525(Block) 5 "u8v2" + MemberName 525(Block) 6 "u8v3" + MemberName 525(Block) 7 "u8v4" + Name 527 "block" + Name 528 "si8" + Name 529 "su8" MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block Decorate 26 DescriptorSet 0 Decorate 26 Binding 0 - MemberDecorate 513(Block) 0 Offset 0 - MemberDecorate 513(Block) 1 Offset 2 - MemberDecorate 513(Block) 2 Offset 4 - MemberDecorate 513(Block) 3 Offset 8 - MemberDecorate 513(Block) 4 Offset 12 - MemberDecorate 513(Block) 5 Offset 14 - MemberDecorate 513(Block) 6 Offset 16 - MemberDecorate 513(Block) 7 Offset 20 - Decorate 513(Block) Block - Decorate 515(block) DescriptorSet 0 - Decorate 515(block) Binding 1 - Decorate 516(si8) SpecId 100 - Decorate 517(su8) SpecId 101 + MemberDecorate 525(Block) 0 Offset 0 + MemberDecorate 525(Block) 1 Offset 2 + MemberDecorate 525(Block) 2 Offset 4 + MemberDecorate 525(Block) 3 Offset 8 + MemberDecorate 525(Block) 4 Offset 12 + MemberDecorate 525(Block) 5 Offset 14 + MemberDecorate 525(Block) 6 Offset 16 + MemberDecorate 525(Block) 7 Offset 20 + Decorate 525(Block) Block + Decorate 527(block) DescriptorSet 0 + Decorate 527(block) Binding 1 + Decorate 528(si8) SpecId 100 + Decorate 529(su8) SpecId 101 2: TypeVoid 3: TypeFunction 2 14: TypeInt 8 1 @@ -184,11 +184,11 @@ spv.int8.frag 438: TypeVector 36(int8_t) 4 439: TypePointer Function 438(i8vec4) 451: TypePointer Function 420(bvec3) - 513(Block): TypeStruct 14(int8_t) 52(i8vec2) 194(i8vec3) 427(i8vec4) 36(int8_t) 49(i8vec2) 190(i8vec3) 438(i8vec4) - 514: TypePointer Uniform 513(Block) - 515(block): 514(ptr) Variable Uniform - 516(si8): 14(int8_t) SpecConstant 4294967286 - 517(su8): 36(int8_t) SpecConstant 20 + 525(Block): TypeStruct 14(int8_t) 52(i8vec2) 194(i8vec3) 427(i8vec4) 36(int8_t) 49(i8vec2) 190(i8vec3) 438(i8vec4) + 526: TypePointer Uniform 525(Block) + 527(block): 526(ptr) Variable Uniform + 528(si8): 14(int8_t) SpecConstant 4294967286 + 529(su8): 36(int8_t) SpecConstant 20 4(main): 2 Function None 3 5: Label Return @@ -670,68 +670,86 @@ spv.int8.frag 458: 14(int8_t) Load 341(i8) 459: 52(i8vec2) CompositeConstruct 458 458 460: 172(bvec2) SLessThan 457 459 - 461: 420(bvec3) Load 452(bv) - 462: 420(bvec3) VectorShuffle 461 460 3 4 2 - Store 452(bv) 462 - 463: 190(i8vec3) Load 351(u8v) - 464: 36(int8_t) Load 353(u8) - 465: 190(i8vec3) CompositeConstruct 464 464 464 - 466: 420(bvec3) ULessThanEqual 463 465 - Store 452(bv) 466 - 467: 52(i8vec2) Load 338(i8v) - 468: 14(int8_t) Load 341(i8) - 469: 52(i8vec2) CompositeConstruct 468 468 - 470: 172(bvec2) SLessThanEqual 467 469 - 471: 420(bvec3) Load 452(bv) - 472: 420(bvec3) VectorShuffle 471 470 3 4 2 - Store 452(bv) 472 - 473: 190(i8vec3) Load 351(u8v) - 474: 36(int8_t) Load 353(u8) - 475: 190(i8vec3) CompositeConstruct 474 474 474 - 476: 420(bvec3) UGreaterThan 473 475 - Store 452(bv) 476 - 477: 52(i8vec2) Load 338(i8v) - 478: 14(int8_t) Load 341(i8) - 479: 52(i8vec2) CompositeConstruct 478 478 - 480: 172(bvec2) SGreaterThan 477 479 - 481: 420(bvec3) Load 452(bv) - 482: 420(bvec3) VectorShuffle 481 480 3 4 2 - Store 452(bv) 482 - 483: 190(i8vec3) Load 351(u8v) - 484: 36(int8_t) Load 353(u8) - 485: 190(i8vec3) CompositeConstruct 484 484 484 - 486: 420(bvec3) UGreaterThanEqual 483 485 - Store 452(bv) 486 - 487: 52(i8vec2) Load 338(i8v) - 488: 14(int8_t) Load 341(i8) - 489: 52(i8vec2) CompositeConstruct 488 488 - 490: 172(bvec2) SGreaterThanEqual 487 489 - 491: 420(bvec3) Load 452(bv) - 492: 420(bvec3) VectorShuffle 491 490 3 4 2 + 461: 275(ptr) AccessChain 452(bv) 277 + 462: 171(bool) CompositeExtract 460 0 + Store 461 462 + 463: 275(ptr) AccessChain 452(bv) 261 + 464: 171(bool) CompositeExtract 460 1 + Store 463 464 + 465: 190(i8vec3) Load 351(u8v) + 466: 36(int8_t) Load 353(u8) + 467: 190(i8vec3) CompositeConstruct 466 466 466 + 468: 420(bvec3) ULessThanEqual 465 467 + Store 452(bv) 468 + 469: 52(i8vec2) Load 338(i8v) + 470: 14(int8_t) Load 341(i8) + 471: 52(i8vec2) CompositeConstruct 470 470 + 472: 172(bvec2) SLessThanEqual 469 471 + 473: 275(ptr) AccessChain 452(bv) 277 + 474: 171(bool) CompositeExtract 472 0 + Store 473 474 + 475: 275(ptr) AccessChain 452(bv) 261 + 476: 171(bool) CompositeExtract 472 1 + Store 475 476 + 477: 190(i8vec3) Load 351(u8v) + 478: 36(int8_t) Load 353(u8) + 479: 190(i8vec3) CompositeConstruct 478 478 478 + 480: 420(bvec3) UGreaterThan 477 479 + Store 452(bv) 480 + 481: 52(i8vec2) Load 338(i8v) + 482: 14(int8_t) Load 341(i8) + 483: 52(i8vec2) CompositeConstruct 482 482 + 484: 172(bvec2) SGreaterThan 481 483 + 485: 275(ptr) AccessChain 452(bv) 277 + 486: 171(bool) CompositeExtract 484 0 + Store 485 486 + 487: 275(ptr) AccessChain 452(bv) 261 + 488: 171(bool) CompositeExtract 484 1 + Store 487 488 + 489: 190(i8vec3) Load 351(u8v) + 490: 36(int8_t) Load 353(u8) + 491: 190(i8vec3) CompositeConstruct 490 490 490 + 492: 420(bvec3) UGreaterThanEqual 489 491 Store 452(bv) 492 - 493: 190(i8vec3) Load 351(u8v) - 494: 36(int8_t) Load 353(u8) - 495: 190(i8vec3) CompositeConstruct 494 494 494 - 496: 420(bvec3) IEqual 493 495 - Store 452(bv) 496 - 497: 52(i8vec2) Load 338(i8v) - 498: 14(int8_t) Load 341(i8) - 499: 52(i8vec2) CompositeConstruct 498 498 - 500: 172(bvec2) IEqual 497 499 - 501: 420(bvec3) Load 452(bv) - 502: 420(bvec3) VectorShuffle 501 500 3 4 2 - Store 452(bv) 502 - 503: 190(i8vec3) Load 351(u8v) - 504: 36(int8_t) Load 353(u8) - 505: 190(i8vec3) CompositeConstruct 504 504 504 - 506: 420(bvec3) INotEqual 503 505 - Store 452(bv) 506 - 507: 52(i8vec2) Load 338(i8v) - 508: 14(int8_t) Load 341(i8) - 509: 52(i8vec2) CompositeConstruct 508 508 - 510: 172(bvec2) INotEqual 507 509 - 511: 420(bvec3) Load 452(bv) - 512: 420(bvec3) VectorShuffle 511 510 3 4 2 - Store 452(bv) 512 + 493: 52(i8vec2) Load 338(i8v) + 494: 14(int8_t) Load 341(i8) + 495: 52(i8vec2) CompositeConstruct 494 494 + 496: 172(bvec2) SGreaterThanEqual 493 495 + 497: 275(ptr) AccessChain 452(bv) 277 + 498: 171(bool) CompositeExtract 496 0 + Store 497 498 + 499: 275(ptr) AccessChain 452(bv) 261 + 500: 171(bool) CompositeExtract 496 1 + Store 499 500 + 501: 190(i8vec3) Load 351(u8v) + 502: 36(int8_t) Load 353(u8) + 503: 190(i8vec3) CompositeConstruct 502 502 502 + 504: 420(bvec3) IEqual 501 503 + Store 452(bv) 504 + 505: 52(i8vec2) Load 338(i8v) + 506: 14(int8_t) Load 341(i8) + 507: 52(i8vec2) CompositeConstruct 506 506 + 508: 172(bvec2) IEqual 505 507 + 509: 275(ptr) AccessChain 452(bv) 277 + 510: 171(bool) CompositeExtract 508 0 + Store 509 510 + 511: 275(ptr) AccessChain 452(bv) 261 + 512: 171(bool) CompositeExtract 508 1 + Store 511 512 + 513: 190(i8vec3) Load 351(u8v) + 514: 36(int8_t) Load 353(u8) + 515: 190(i8vec3) CompositeConstruct 514 514 514 + 516: 420(bvec3) INotEqual 513 515 + Store 452(bv) 516 + 517: 52(i8vec2) Load 338(i8v) + 518: 14(int8_t) Load 341(i8) + 519: 52(i8vec2) CompositeConstruct 518 518 + 520: 172(bvec2) INotEqual 517 519 + 521: 275(ptr) AccessChain 452(bv) 277 + 522: 171(bool) CompositeExtract 520 0 + Store 521 522 + 523: 275(ptr) AccessChain 452(bv) 261 + 524: 171(bool) CompositeExtract 520 1 + Store 523 524 Return FunctionEnd diff --git a/Test/baseResults/spv.intOps.vert.out b/Test/baseResults/spv.intOps.vert.out index d57c3069bb..b57eac2b5c 100644 --- a/Test/baseResults/spv.intOps.vert.out +++ b/Test/baseResults/spv.intOps.vert.out @@ -1,12 +1,12 @@ spv.intOps.vert // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 268 +// Id's are bound by 302 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 9 15 21 26 47 67 83 100 121 142 146 156 173 182 247 + EntryPoint Vertex 4 "main" 9 15 21 26 53 72 88 105 137 156 160 172 189 202 281 Source ESSL 310 Name 4 "main" Name 9 "iout" @@ -15,44 +15,44 @@ spv.intOps.vert Name 26 "u2" Name 30 "u2out" Name 31 "ResType" - Name 47 "u1" - Name 51 "u1out" - Name 52 "ResType" - Name 67 "u4" - Name 71 "u4outHi" - Name 72 "u4outLow" - Name 73 "ResType" - Name 83 "i4" - Name 87 "i4outHi" - Name 88 "i4outLow" - Name 89 "ResType" - Name 100 "v3" - Name 104 "i3out" - Name 105 "ResType" - Name 121 "v1" - Name 124 "i1out" - Name 125 "ResType" - Name 142 "v2" - Name 146 "i2" - Name 156 "i1" - Name 173 "u3" - Name 182 "i3" - Name 247 "v4" + Name 53 "u1" + Name 57 "u1out" + Name 58 "ResType" + Name 72 "u4" + Name 76 "u4outHi" + Name 77 "u4outLow" + Name 78 "ResType" + Name 88 "i4" + Name 92 "i4outHi" + Name 93 "i4outLow" + Name 94 "ResType" + Name 105 "v3" + Name 109 "i3out" + Name 110 "ResType" + Name 137 "v1" + Name 140 "i1out" + Name 141 "ResType" + Name 156 "v2" + Name 160 "i2" + Name 172 "i1" + Name 189 "u3" + Name 202 "i3" + Name 281 "v4" Decorate 9(iout) Location 1 Decorate 15(uout) Location 0 Decorate 21(fout) Location 2 Decorate 26(u2) Location 1 - Decorate 47(u1) Location 0 - Decorate 67(u4) Location 3 - Decorate 83(i4) Location 11 - Decorate 100(v3) Location 6 - Decorate 121(v1) Location 4 - Decorate 142(v2) Location 5 - Decorate 146(i2) Location 9 - Decorate 156(i1) Location 8 - Decorate 173(u3) Location 2 - Decorate 182(i3) Location 10 - Decorate 247(v4) Location 7 + Decorate 53(u1) Location 0 + Decorate 72(u4) Location 3 + Decorate 88(i4) Location 11 + Decorate 105(v3) Location 6 + Decorate 137(v1) Location 4 + Decorate 156(v2) Location 5 + Decorate 160(i2) Location 9 + Decorate 172(i1) Location 8 + Decorate 189(u3) Location 2 + Decorate 202(i3) Location 10 + Decorate 281(v4) Location 7 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -78,58 +78,60 @@ spv.intOps.vert 26(u2): 25(ptr) Variable Input 29: TypePointer Function 24(ivec2) 31(ResType): TypeStruct 24(ivec2) 24(ivec2) - 46: TypePointer Input 12(int) - 47(u1): 46(ptr) Variable Input - 50: TypePointer Function 12(int) - 52(ResType): TypeStruct 12(int) 12(int) - 56: TypePointer Output 12(int) - 66: TypePointer Input 13(ivec4) - 67(u4): 66(ptr) Variable Input - 70: TypePointer Function 13(ivec4) - 73(ResType): TypeStruct 13(ivec4) 13(ivec4) - 82: TypePointer Input 7(ivec4) - 83(i4): 82(ptr) Variable Input - 86: TypePointer Function 7(ivec4) - 89(ResType): TypeStruct 7(ivec4) 7(ivec4) - 98: TypeVector 18(float) 3 - 99: TypePointer Input 98(fvec3) - 100(v3): 99(ptr) Variable Input - 102: TypeVector 6(int) 3 - 103: TypePointer Function 102(ivec3) - 105(ResType): TypeStruct 98(fvec3) 102(ivec3) - 120: TypePointer Input 18(float) - 121(v1): 120(ptr) Variable Input - 123: TypePointer Function 6(int) - 125(ResType): TypeStruct 18(float) 6(int) - 129: TypePointer Output 18(float) - 135: TypePointer Output 6(int) - 140: TypeVector 18(float) 2 - 141: TypePointer Input 140(fvec2) - 142(v2): 141(ptr) Variable Input - 144: TypeVector 6(int) 2 - 145: TypePointer Input 144(ivec2) - 146(i2): 145(ptr) Variable Input - 155: TypePointer Input 6(int) - 156(i1): 155(ptr) Variable Input - 164: 6(int) Constant 4 - 165: 6(int) Constant 5 - 171: TypeVector 12(int) 3 - 172: TypePointer Input 171(ivec3) - 173(u3): 172(ptr) Variable Input - 181: TypePointer Input 102(ivec3) - 182(i3): 181(ptr) Variable Input - 246: TypePointer Input 19(fvec4) - 247(v4): 246(ptr) Variable Input + 38: TypePointer Output 12(int) + 41: 12(int) Constant 1 + 52: TypePointer Input 12(int) + 53(u1): 52(ptr) Variable Input + 56: TypePointer Function 12(int) + 58(ResType): TypeStruct 12(int) 12(int) + 71: TypePointer Input 13(ivec4) + 72(u4): 71(ptr) Variable Input + 75: TypePointer Function 13(ivec4) + 78(ResType): TypeStruct 13(ivec4) 13(ivec4) + 87: TypePointer Input 7(ivec4) + 88(i4): 87(ptr) Variable Input + 91: TypePointer Function 7(ivec4) + 94(ResType): TypeStruct 7(ivec4) 7(ivec4) + 103: TypeVector 18(float) 3 + 104: TypePointer Input 103(fvec3) + 105(v3): 104(ptr) Variable Input + 107: TypeVector 6(int) 3 + 108: TypePointer Function 107(ivec3) + 110(ResType): TypeStruct 103(fvec3) 107(ivec3) + 117: TypePointer Output 18(float) + 122: 12(int) Constant 2 + 129: TypePointer Output 6(int) + 136: TypePointer Input 18(float) + 137(v1): 136(ptr) Variable Input + 139: TypePointer Function 6(int) + 141(ResType): TypeStruct 18(float) 6(int) + 154: TypeVector 18(float) 2 + 155: TypePointer Input 154(fvec2) + 156(v2): 155(ptr) Variable Input + 158: TypeVector 6(int) 2 + 159: TypePointer Input 158(ivec2) + 160(i2): 159(ptr) Variable Input + 171: TypePointer Input 6(int) + 172(i1): 171(ptr) Variable Input + 180: 6(int) Constant 4 + 181: 6(int) Constant 5 + 187: TypeVector 12(int) 3 + 188: TypePointer Input 187(ivec3) + 189(u3): 188(ptr) Variable Input + 201: TypePointer Input 107(ivec3) + 202(i3): 201(ptr) Variable Input + 280: TypePointer Input 19(fvec4) + 281(v4): 280(ptr) Variable Input 4(main): 2 Function None 3 5: Label 30(u2out): 29(ptr) Variable Function - 51(u1out): 50(ptr) Variable Function - 71(u4outHi): 70(ptr) Variable Function - 72(u4outLow): 70(ptr) Variable Function - 87(i4outHi): 86(ptr) Variable Function - 88(i4outLow): 86(ptr) Variable Function - 104(i3out): 103(ptr) Variable Function - 124(i1out): 123(ptr) Variable Function + 57(u1out): 56(ptr) Variable Function + 76(u4outHi): 75(ptr) Variable Function + 77(u4outLow): 75(ptr) Variable Function + 92(i4outHi): 91(ptr) Variable Function + 93(i4outLow): 91(ptr) Variable Function + 109(i3out): 108(ptr) Variable Function + 140(i1out): 139(ptr) Variable Function Store 9(iout) 11 Store 15(uout) 17 Store 21(fout) 23 @@ -142,221 +144,269 @@ spv.intOps.vert 35: 13(ivec4) Load 15(uout) 36: 24(ivec2) VectorShuffle 35 35 0 1 37: 24(ivec2) IAdd 36 34 - 38: 13(ivec4) Load 15(uout) - 39: 13(ivec4) VectorShuffle 38 37 4 5 2 3 - Store 15(uout) 39 - 40: 24(ivec2) Load 30(u2out) - 41: 13(ivec4) Load 15(uout) - 42: 24(ivec2) VectorShuffle 41 41 0 1 - 43: 24(ivec2) IAdd 42 40 - 44: 13(ivec4) Load 15(uout) - 45: 13(ivec4) VectorShuffle 44 43 4 5 2 3 - Store 15(uout) 45 - 48: 12(int) Load 47(u1) - 49: 12(int) Load 47(u1) - 53: 52(ResType) ISubBorrow 48 49 - 54: 12(int) CompositeExtract 53 1 - Store 51(u1out) 54 - 55: 12(int) CompositeExtract 53 0 - 57: 56(ptr) AccessChain 15(uout) 16 - 58: 12(int) Load 57 - 59: 12(int) IAdd 58 55 - 60: 56(ptr) AccessChain 15(uout) 16 - Store 60 59 - 61: 12(int) Load 51(u1out) - 62: 56(ptr) AccessChain 15(uout) 16 + 39: 38(ptr) AccessChain 15(uout) 16 + 40: 12(int) CompositeExtract 37 0 + Store 39 40 + 42: 38(ptr) AccessChain 15(uout) 41 + 43: 12(int) CompositeExtract 37 1 + Store 42 43 + 44: 24(ivec2) Load 30(u2out) + 45: 13(ivec4) Load 15(uout) + 46: 24(ivec2) VectorShuffle 45 45 0 1 + 47: 24(ivec2) IAdd 46 44 + 48: 38(ptr) AccessChain 15(uout) 16 + 49: 12(int) CompositeExtract 47 0 + Store 48 49 + 50: 38(ptr) AccessChain 15(uout) 41 + 51: 12(int) CompositeExtract 47 1 + Store 50 51 + 54: 12(int) Load 53(u1) + 55: 12(int) Load 53(u1) + 59: 58(ResType) ISubBorrow 54 55 + 60: 12(int) CompositeExtract 59 1 + Store 57(u1out) 60 + 61: 12(int) CompositeExtract 59 0 + 62: 38(ptr) AccessChain 15(uout) 16 63: 12(int) Load 62 64: 12(int) IAdd 63 61 - 65: 56(ptr) AccessChain 15(uout) 16 + 65: 38(ptr) AccessChain 15(uout) 16 Store 65 64 - 68: 13(ivec4) Load 67(u4) - 69: 13(ivec4) Load 67(u4) - 74: 73(ResType) UMulExtended 68 69 - 75: 13(ivec4) CompositeExtract 74 0 - Store 72(u4outLow) 75 - 76: 13(ivec4) CompositeExtract 74 1 - Store 71(u4outHi) 76 - 77: 13(ivec4) Load 71(u4outHi) - 78: 13(ivec4) Load 72(u4outLow) - 79: 13(ivec4) IAdd 77 78 - 80: 13(ivec4) Load 15(uout) - 81: 13(ivec4) IAdd 80 79 - Store 15(uout) 81 - 84: 7(ivec4) Load 83(i4) - 85: 7(ivec4) Load 83(i4) - 90: 89(ResType) SMulExtended 84 85 - 91: 7(ivec4) CompositeExtract 90 0 - Store 88(i4outLow) 91 - 92: 7(ivec4) CompositeExtract 90 1 - Store 87(i4outHi) 92 - 93: 7(ivec4) Load 88(i4outLow) - 94: 7(ivec4) Load 87(i4outHi) - 95: 7(ivec4) IAdd 93 94 - 96: 7(ivec4) Load 9(iout) - 97: 7(ivec4) IAdd 96 95 - Store 9(iout) 97 - 101: 98(fvec3) Load 100(v3) - 106:105(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 101 - 107: 102(ivec3) CompositeExtract 106 1 - Store 104(i3out) 107 - 108: 98(fvec3) CompositeExtract 106 0 - 109: 19(fvec4) Load 21(fout) - 110: 98(fvec3) VectorShuffle 109 109 0 1 2 - 111: 98(fvec3) FAdd 110 108 - 112: 19(fvec4) Load 21(fout) - 113: 19(fvec4) VectorShuffle 112 111 4 5 6 3 - Store 21(fout) 113 - 114: 102(ivec3) Load 104(i3out) - 115: 7(ivec4) Load 9(iout) - 116: 102(ivec3) VectorShuffle 115 115 0 1 2 - 117: 102(ivec3) IAdd 116 114 - 118: 7(ivec4) Load 9(iout) - 119: 7(ivec4) VectorShuffle 118 117 4 5 6 3 - Store 9(iout) 119 - 122: 18(float) Load 121(v1) - 126:125(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 122 - 127: 6(int) CompositeExtract 126 1 - Store 124(i1out) 127 - 128: 18(float) CompositeExtract 126 0 - 130: 129(ptr) AccessChain 21(fout) 16 - 131: 18(float) Load 130 - 132: 18(float) FAdd 131 128 - 133: 129(ptr) AccessChain 21(fout) 16 - Store 133 132 - 134: 6(int) Load 124(i1out) - 136: 135(ptr) AccessChain 9(iout) 16 - 137: 6(int) Load 136 - 138: 6(int) IAdd 137 134 - 139: 135(ptr) AccessChain 9(iout) 16 - Store 139 138 - 143: 140(fvec2) Load 142(v2) - 147: 144(ivec2) Load 146(i2) - 148: 140(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 143 147 - 149: 19(fvec4) Load 21(fout) - 150: 140(fvec2) VectorShuffle 149 149 0 1 - 151: 140(fvec2) FAdd 150 148 - 152: 19(fvec4) Load 21(fout) - 153: 19(fvec4) VectorShuffle 152 151 4 5 2 3 - Store 21(fout) 153 - 154: 18(float) Load 121(v1) - 157: 6(int) Load 156(i1) - 158: 18(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 154 157 - 159: 129(ptr) AccessChain 21(fout) 16 - 160: 18(float) Load 159 - 161: 18(float) FAdd 160 158 - 162: 129(ptr) AccessChain 21(fout) 16 - Store 162 161 - 163: 6(int) Load 156(i1) - 166: 6(int) BitFieldSExtract 163 164 165 - 167: 135(ptr) AccessChain 9(iout) 16 - 168: 6(int) Load 167 - 169: 6(int) IAdd 168 166 - 170: 135(ptr) AccessChain 9(iout) 16 - Store 170 169 - 174: 171(ivec3) Load 173(u3) - 175: 171(ivec3) BitFieldUExtract 174 164 165 - 176: 13(ivec4) Load 15(uout) - 177: 171(ivec3) VectorShuffle 176 176 0 1 2 - 178: 171(ivec3) IAdd 177 175 - 179: 13(ivec4) Load 15(uout) - 180: 13(ivec4) VectorShuffle 179 178 4 5 6 3 - Store 15(uout) 180 - 183: 102(ivec3) Load 182(i3) - 184: 102(ivec3) Load 182(i3) - 185: 102(ivec3) BitFieldInsert 183 184 164 165 - 186: 7(ivec4) Load 9(iout) - 187: 102(ivec3) VectorShuffle 186 186 0 1 2 - 188: 102(ivec3) IAdd 187 185 - 189: 7(ivec4) Load 9(iout) - 190: 7(ivec4) VectorShuffle 189 188 4 5 6 3 - Store 9(iout) 190 - 191: 12(int) Load 47(u1) - 192: 12(int) Load 47(u1) - 193: 12(int) BitFieldInsert 191 192 164 165 - 194: 56(ptr) AccessChain 15(uout) 16 - 195: 12(int) Load 194 - 196: 12(int) IAdd 195 193 - 197: 56(ptr) AccessChain 15(uout) 16 - Store 197 196 - 198: 144(ivec2) Load 146(i2) - 199: 144(ivec2) BitReverse 198 - 200: 7(ivec4) Load 9(iout) - 201: 144(ivec2) VectorShuffle 200 200 0 1 - 202: 144(ivec2) IAdd 201 199 - 203: 7(ivec4) Load 9(iout) - 204: 7(ivec4) VectorShuffle 203 202 4 5 2 3 - Store 9(iout) 204 - 205: 13(ivec4) Load 67(u4) - 206: 13(ivec4) BitReverse 205 - 207: 13(ivec4) Load 15(uout) - 208: 13(ivec4) IAdd 207 206 - Store 15(uout) 208 - 209: 6(int) Load 156(i1) - 210: 6(int) BitCount 209 - 211: 135(ptr) AccessChain 9(iout) 16 - 212: 6(int) Load 211 - 213: 6(int) IAdd 212 210 - 214: 135(ptr) AccessChain 9(iout) 16 - Store 214 213 - 215: 171(ivec3) Load 173(u3) - 216: 102(ivec3) BitCount 215 - 217: 7(ivec4) Load 9(iout) - 218: 102(ivec3) VectorShuffle 217 217 0 1 2 - 219: 102(ivec3) IAdd 218 216 - 220: 7(ivec4) Load 9(iout) - 221: 7(ivec4) VectorShuffle 220 219 4 5 6 3 - Store 9(iout) 221 - 222: 144(ivec2) Load 146(i2) - 223: 144(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 222 + 66: 12(int) Load 57(u1out) + 67: 38(ptr) AccessChain 15(uout) 16 + 68: 12(int) Load 67 + 69: 12(int) IAdd 68 66 + 70: 38(ptr) AccessChain 15(uout) 16 + Store 70 69 + 73: 13(ivec4) Load 72(u4) + 74: 13(ivec4) Load 72(u4) + 79: 78(ResType) UMulExtended 73 74 + 80: 13(ivec4) CompositeExtract 79 0 + Store 77(u4outLow) 80 + 81: 13(ivec4) CompositeExtract 79 1 + Store 76(u4outHi) 81 + 82: 13(ivec4) Load 76(u4outHi) + 83: 13(ivec4) Load 77(u4outLow) + 84: 13(ivec4) IAdd 82 83 + 85: 13(ivec4) Load 15(uout) + 86: 13(ivec4) IAdd 85 84 + Store 15(uout) 86 + 89: 7(ivec4) Load 88(i4) + 90: 7(ivec4) Load 88(i4) + 95: 94(ResType) SMulExtended 89 90 + 96: 7(ivec4) CompositeExtract 95 0 + Store 93(i4outLow) 96 + 97: 7(ivec4) CompositeExtract 95 1 + Store 92(i4outHi) 97 + 98: 7(ivec4) Load 93(i4outLow) + 99: 7(ivec4) Load 92(i4outHi) + 100: 7(ivec4) IAdd 98 99 + 101: 7(ivec4) Load 9(iout) + 102: 7(ivec4) IAdd 101 100 + Store 9(iout) 102 + 106: 103(fvec3) Load 105(v3) + 111:110(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 106 + 112: 107(ivec3) CompositeExtract 111 1 + Store 109(i3out) 112 + 113: 103(fvec3) CompositeExtract 111 0 + 114: 19(fvec4) Load 21(fout) + 115: 103(fvec3) VectorShuffle 114 114 0 1 2 + 116: 103(fvec3) FAdd 115 113 + 118: 117(ptr) AccessChain 21(fout) 16 + 119: 18(float) CompositeExtract 116 0 + Store 118 119 + 120: 117(ptr) AccessChain 21(fout) 41 + 121: 18(float) CompositeExtract 116 1 + Store 120 121 + 123: 117(ptr) AccessChain 21(fout) 122 + 124: 18(float) CompositeExtract 116 2 + Store 123 124 + 125: 107(ivec3) Load 109(i3out) + 126: 7(ivec4) Load 9(iout) + 127: 107(ivec3) VectorShuffle 126 126 0 1 2 + 128: 107(ivec3) IAdd 127 125 + 130: 129(ptr) AccessChain 9(iout) 16 + 131: 6(int) CompositeExtract 128 0 + Store 130 131 + 132: 129(ptr) AccessChain 9(iout) 41 + 133: 6(int) CompositeExtract 128 1 + Store 132 133 + 134: 129(ptr) AccessChain 9(iout) 122 + 135: 6(int) CompositeExtract 128 2 + Store 134 135 + 138: 18(float) Load 137(v1) + 142:141(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 138 + 143: 6(int) CompositeExtract 142 1 + Store 140(i1out) 143 + 144: 18(float) CompositeExtract 142 0 + 145: 117(ptr) AccessChain 21(fout) 16 + 146: 18(float) Load 145 + 147: 18(float) FAdd 146 144 + 148: 117(ptr) AccessChain 21(fout) 16 + Store 148 147 + 149: 6(int) Load 140(i1out) + 150: 129(ptr) AccessChain 9(iout) 16 + 151: 6(int) Load 150 + 152: 6(int) IAdd 151 149 + 153: 129(ptr) AccessChain 9(iout) 16 + Store 153 152 + 157: 154(fvec2) Load 156(v2) + 161: 158(ivec2) Load 160(i2) + 162: 154(fvec2) ExtInst 1(GLSL.std.450) 53(Ldexp) 157 161 + 163: 19(fvec4) Load 21(fout) + 164: 154(fvec2) VectorShuffle 163 163 0 1 + 165: 154(fvec2) FAdd 164 162 + 166: 117(ptr) AccessChain 21(fout) 16 + 167: 18(float) CompositeExtract 165 0 + Store 166 167 + 168: 117(ptr) AccessChain 21(fout) 41 + 169: 18(float) CompositeExtract 165 1 + Store 168 169 + 170: 18(float) Load 137(v1) + 173: 6(int) Load 172(i1) + 174: 18(float) ExtInst 1(GLSL.std.450) 53(Ldexp) 170 173 + 175: 117(ptr) AccessChain 21(fout) 16 + 176: 18(float) Load 175 + 177: 18(float) FAdd 176 174 + 178: 117(ptr) AccessChain 21(fout) 16 + Store 178 177 + 179: 6(int) Load 172(i1) + 182: 6(int) BitFieldSExtract 179 180 181 + 183: 129(ptr) AccessChain 9(iout) 16 + 184: 6(int) Load 183 + 185: 6(int) IAdd 184 182 + 186: 129(ptr) AccessChain 9(iout) 16 + Store 186 185 + 190: 187(ivec3) Load 189(u3) + 191: 187(ivec3) BitFieldUExtract 190 180 181 + 192: 13(ivec4) Load 15(uout) + 193: 187(ivec3) VectorShuffle 192 192 0 1 2 + 194: 187(ivec3) IAdd 193 191 + 195: 38(ptr) AccessChain 15(uout) 16 + 196: 12(int) CompositeExtract 194 0 + Store 195 196 + 197: 38(ptr) AccessChain 15(uout) 41 + 198: 12(int) CompositeExtract 194 1 + Store 197 198 + 199: 38(ptr) AccessChain 15(uout) 122 + 200: 12(int) CompositeExtract 194 2 + Store 199 200 + 203: 107(ivec3) Load 202(i3) + 204: 107(ivec3) Load 202(i3) + 205: 107(ivec3) BitFieldInsert 203 204 180 181 + 206: 7(ivec4) Load 9(iout) + 207: 107(ivec3) VectorShuffle 206 206 0 1 2 + 208: 107(ivec3) IAdd 207 205 + 209: 129(ptr) AccessChain 9(iout) 16 + 210: 6(int) CompositeExtract 208 0 + Store 209 210 + 211: 129(ptr) AccessChain 9(iout) 41 + 212: 6(int) CompositeExtract 208 1 + Store 211 212 + 213: 129(ptr) AccessChain 9(iout) 122 + 214: 6(int) CompositeExtract 208 2 + Store 213 214 + 215: 12(int) Load 53(u1) + 216: 12(int) Load 53(u1) + 217: 12(int) BitFieldInsert 215 216 180 181 + 218: 38(ptr) AccessChain 15(uout) 16 + 219: 12(int) Load 218 + 220: 12(int) IAdd 219 217 + 221: 38(ptr) AccessChain 15(uout) 16 + Store 221 220 + 222: 158(ivec2) Load 160(i2) + 223: 158(ivec2) BitReverse 222 224: 7(ivec4) Load 9(iout) - 225: 144(ivec2) VectorShuffle 224 224 0 1 - 226: 144(ivec2) IAdd 225 223 - 227: 7(ivec4) Load 9(iout) - 228: 7(ivec4) VectorShuffle 227 226 4 5 2 3 - Store 9(iout) 228 - 229: 13(ivec4) Load 67(u4) - 230: 7(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 229 - 231: 7(ivec4) Load 9(iout) - 232: 7(ivec4) IAdd 231 230 - Store 9(iout) 232 - 233: 6(int) Load 156(i1) - 234: 6(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 233 - 235: 135(ptr) AccessChain 9(iout) 16 - 236: 6(int) Load 235 - 237: 6(int) IAdd 236 234 - 238: 135(ptr) AccessChain 9(iout) 16 - Store 238 237 - 239: 24(ivec2) Load 26(u2) - 240: 144(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 239 - 241: 7(ivec4) Load 9(iout) - 242: 144(ivec2) VectorShuffle 241 241 0 1 - 243: 144(ivec2) IAdd 242 240 - 244: 7(ivec4) Load 9(iout) - 245: 7(ivec4) VectorShuffle 244 243 4 5 2 3 - Store 9(iout) 245 - 248: 19(fvec4) Load 247(v4) - 249: 12(int) ExtInst 1(GLSL.std.450) 55(PackUnorm4x8) 248 - 250: 56(ptr) AccessChain 15(uout) 16 - 251: 12(int) Load 250 - 252: 12(int) IAdd 251 249 - 253: 56(ptr) AccessChain 15(uout) 16 - Store 253 252 - 254: 19(fvec4) Load 247(v4) - 255: 12(int) ExtInst 1(GLSL.std.450) 54(PackSnorm4x8) 254 - 256: 56(ptr) AccessChain 15(uout) 16 - 257: 12(int) Load 256 - 258: 12(int) IAdd 257 255 - 259: 56(ptr) AccessChain 15(uout) 16 - Store 259 258 - 260: 12(int) Load 47(u1) - 261: 19(fvec4) ExtInst 1(GLSL.std.450) 64(UnpackUnorm4x8) 260 - 262: 19(fvec4) Load 21(fout) - 263: 19(fvec4) FAdd 262 261 - Store 21(fout) 263 - 264: 12(int) Load 47(u1) - 265: 19(fvec4) ExtInst 1(GLSL.std.450) 63(UnpackSnorm4x8) 264 - 266: 19(fvec4) Load 21(fout) - 267: 19(fvec4) FAdd 266 265 - Store 21(fout) 267 + 225: 158(ivec2) VectorShuffle 224 224 0 1 + 226: 158(ivec2) IAdd 225 223 + 227: 129(ptr) AccessChain 9(iout) 16 + 228: 6(int) CompositeExtract 226 0 + Store 227 228 + 229: 129(ptr) AccessChain 9(iout) 41 + 230: 6(int) CompositeExtract 226 1 + Store 229 230 + 231: 13(ivec4) Load 72(u4) + 232: 13(ivec4) BitReverse 231 + 233: 13(ivec4) Load 15(uout) + 234: 13(ivec4) IAdd 233 232 + Store 15(uout) 234 + 235: 6(int) Load 172(i1) + 236: 6(int) BitCount 235 + 237: 129(ptr) AccessChain 9(iout) 16 + 238: 6(int) Load 237 + 239: 6(int) IAdd 238 236 + 240: 129(ptr) AccessChain 9(iout) 16 + Store 240 239 + 241: 187(ivec3) Load 189(u3) + 242: 107(ivec3) BitCount 241 + 243: 7(ivec4) Load 9(iout) + 244: 107(ivec3) VectorShuffle 243 243 0 1 2 + 245: 107(ivec3) IAdd 244 242 + 246: 129(ptr) AccessChain 9(iout) 16 + 247: 6(int) CompositeExtract 245 0 + Store 246 247 + 248: 129(ptr) AccessChain 9(iout) 41 + 249: 6(int) CompositeExtract 245 1 + Store 248 249 + 250: 129(ptr) AccessChain 9(iout) 122 + 251: 6(int) CompositeExtract 245 2 + Store 250 251 + 252: 158(ivec2) Load 160(i2) + 253: 158(ivec2) ExtInst 1(GLSL.std.450) 73(FindILsb) 252 + 254: 7(ivec4) Load 9(iout) + 255: 158(ivec2) VectorShuffle 254 254 0 1 + 256: 158(ivec2) IAdd 255 253 + 257: 129(ptr) AccessChain 9(iout) 16 + 258: 6(int) CompositeExtract 256 0 + Store 257 258 + 259: 129(ptr) AccessChain 9(iout) 41 + 260: 6(int) CompositeExtract 256 1 + Store 259 260 + 261: 13(ivec4) Load 72(u4) + 262: 7(ivec4) ExtInst 1(GLSL.std.450) 73(FindILsb) 261 + 263: 7(ivec4) Load 9(iout) + 264: 7(ivec4) IAdd 263 262 + Store 9(iout) 264 + 265: 6(int) Load 172(i1) + 266: 6(int) ExtInst 1(GLSL.std.450) 74(FindSMsb) 265 + 267: 129(ptr) AccessChain 9(iout) 16 + 268: 6(int) Load 267 + 269: 6(int) IAdd 268 266 + 270: 129(ptr) AccessChain 9(iout) 16 + Store 270 269 + 271: 24(ivec2) Load 26(u2) + 272: 158(ivec2) ExtInst 1(GLSL.std.450) 75(FindUMsb) 271 + 273: 7(ivec4) Load 9(iout) + 274: 158(ivec2) VectorShuffle 273 273 0 1 + 275: 158(ivec2) IAdd 274 272 + 276: 129(ptr) AccessChain 9(iout) 16 + 277: 6(int) CompositeExtract 275 0 + Store 276 277 + 278: 129(ptr) AccessChain 9(iout) 41 + 279: 6(int) CompositeExtract 275 1 + Store 278 279 + 282: 19(fvec4) Load 281(v4) + 283: 12(int) ExtInst 1(GLSL.std.450) 55(PackUnorm4x8) 282 + 284: 38(ptr) AccessChain 15(uout) 16 + 285: 12(int) Load 284 + 286: 12(int) IAdd 285 283 + 287: 38(ptr) AccessChain 15(uout) 16 + Store 287 286 + 288: 19(fvec4) Load 281(v4) + 289: 12(int) ExtInst 1(GLSL.std.450) 54(PackSnorm4x8) 288 + 290: 38(ptr) AccessChain 15(uout) 16 + 291: 12(int) Load 290 + 292: 12(int) IAdd 291 289 + 293: 38(ptr) AccessChain 15(uout) 16 + Store 293 292 + 294: 12(int) Load 53(u1) + 295: 19(fvec4) ExtInst 1(GLSL.std.450) 64(UnpackUnorm4x8) 294 + 296: 19(fvec4) Load 21(fout) + 297: 19(fvec4) FAdd 296 295 + Store 21(fout) 297 + 298: 12(int) Load 53(u1) + 299: 19(fvec4) ExtInst 1(GLSL.std.450) 63(UnpackSnorm4x8) 298 + 300: 19(fvec4) Load 21(fout) + 301: 19(fvec4) FAdd 300 299 + Store 21(fout) 301 Return FunctionEnd diff --git a/Test/baseResults/spv.interpOps.frag.out b/Test/baseResults/spv.interpOps.frag.out index 6c285e76fa..808c1cdb69 100644 --- a/Test/baseResults/spv.interpOps.frag.out +++ b/Test/baseResults/spv.interpOps.frag.out @@ -1,33 +1,33 @@ spv.interpOps.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 100 +// Id's are bound by 120 Capability Shader Capability InterpolationFunction 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 13 24 33 41 47 72 98 + EntryPoint Fragment 4 "main" 13 24 36 49 55 86 118 ExecutionMode 4 OriginUpperLeft Source GLSL 450 Name 4 "main" Name 9 "f4" Name 13 "if1" Name 24 "if2" - Name 33 "if3" - Name 41 "if4" - Name 47 "samp" - Name 72 "offset" - Name 98 "fragColor" + Name 36 "if3" + Name 49 "if4" + Name 55 "samp" + Name 86 "offset" + Name 118 "fragColor" Decorate 13(if1) Location 0 Decorate 24(if2) Location 1 - Decorate 33(if3) Location 2 - Decorate 41(if4) Location 3 - Decorate 47(samp) Flat - Decorate 47(samp) Location 4 - Decorate 72(offset) Flat - Decorate 72(offset) Location 5 - Decorate 98(fragColor) Location 0 + Decorate 36(if3) Location 2 + Decorate 49(if4) Location 3 + Decorate 55(samp) Flat + Decorate 55(samp) Location 4 + Decorate 86(offset) Flat + Decorate 86(offset) Location 5 + Decorate 118(fragColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -43,17 +43,19 @@ spv.interpOps.frag 22: TypeVector 6(float) 2 23: TypePointer Input 22(fvec2) 24(if2): 23(ptr) Variable Input - 31: TypeVector 6(float) 3 - 32: TypePointer Input 31(fvec3) - 33(if3): 32(ptr) Variable Input - 40: TypePointer Input 7(fvec4) - 41(if4): 40(ptr) Variable Input - 45: TypeInt 32 1 - 46: TypePointer Input 45(int) - 47(samp): 46(ptr) Variable Input - 72(offset): 23(ptr) Variable Input - 97: TypePointer Output 7(fvec4) - 98(fragColor): 97(ptr) Variable Output + 31: 15(int) Constant 1 + 34: TypeVector 6(float) 3 + 35: TypePointer Input 34(fvec3) + 36(if3): 35(ptr) Variable Input + 45: 15(int) Constant 2 + 48: TypePointer Input 7(fvec4) + 49(if4): 48(ptr) Variable Input + 53: TypeInt 32 1 + 54: TypePointer Input 53(int) + 55(samp): 54(ptr) Variable Input + 86(offset): 23(ptr) Variable Input + 117: TypePointer Output 7(fvec4) + 118(fragColor): 117(ptr) Variable Output 4(main): 2 Function None 3 5: Label 9(f4): 8(ptr) Variable Function @@ -68,77 +70,104 @@ spv.interpOps.frag 26: 7(fvec4) Load 9(f4) 27: 22(fvec2) VectorShuffle 26 26 0 1 28: 22(fvec2) FAdd 27 25 - 29: 7(fvec4) Load 9(f4) - 30: 7(fvec4) VectorShuffle 29 28 4 5 2 3 - Store 9(f4) 30 - 34: 31(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 33(if3) - 35: 7(fvec4) Load 9(f4) - 36: 31(fvec3) VectorShuffle 35 35 0 1 2 - 37: 31(fvec3) FAdd 36 34 + 29: 17(ptr) AccessChain 9(f4) 16 + 30: 6(float) CompositeExtract 28 0 + Store 29 30 + 32: 17(ptr) AccessChain 9(f4) 31 + 33: 6(float) CompositeExtract 28 1 + Store 32 33 + 37: 34(fvec3) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 36(if3) 38: 7(fvec4) Load 9(f4) - 39: 7(fvec4) VectorShuffle 38 37 4 5 6 3 - Store 9(f4) 39 - 42: 7(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 41(if4) - 43: 7(fvec4) Load 9(f4) - 44: 7(fvec4) FAdd 43 42 - Store 9(f4) 44 - 48: 45(int) Load 47(samp) - 49: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 13(if1) 48 - 50: 17(ptr) AccessChain 9(f4) 16 - 51: 6(float) Load 50 - 52: 6(float) FAdd 51 49 - 53: 17(ptr) AccessChain 9(f4) 16 - Store 53 52 - 54: 45(int) Load 47(samp) - 55: 22(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 24(if2) 54 - 56: 7(fvec4) Load 9(f4) - 57: 22(fvec2) VectorShuffle 56 56 0 1 - 58: 22(fvec2) FAdd 57 55 - 59: 7(fvec4) Load 9(f4) - 60: 7(fvec4) VectorShuffle 59 58 4 5 2 3 - Store 9(f4) 60 - 61: 45(int) Load 47(samp) - 62: 31(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 33(if3) 61 - 63: 7(fvec4) Load 9(f4) - 64: 31(fvec3) VectorShuffle 63 63 0 1 2 - 65: 31(fvec3) FAdd 64 62 - 66: 7(fvec4) Load 9(f4) - 67: 7(fvec4) VectorShuffle 66 65 4 5 6 3 - Store 9(f4) 67 - 68: 45(int) Load 47(samp) - 69: 7(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 41(if4) 68 - 70: 7(fvec4) Load 9(f4) - 71: 7(fvec4) FAdd 70 69 - Store 9(f4) 71 - 73: 22(fvec2) Load 72(offset) - 74: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 13(if1) 73 - 75: 17(ptr) AccessChain 9(f4) 16 - 76: 6(float) Load 75 - 77: 6(float) FAdd 76 74 - 78: 17(ptr) AccessChain 9(f4) 16 - Store 78 77 - 79: 22(fvec2) Load 72(offset) - 80: 22(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 24(if2) 79 - 81: 7(fvec4) Load 9(f4) - 82: 22(fvec2) VectorShuffle 81 81 0 1 - 83: 22(fvec2) FAdd 82 80 + 39: 34(fvec3) VectorShuffle 38 38 0 1 2 + 40: 34(fvec3) FAdd 39 37 + 41: 17(ptr) AccessChain 9(f4) 16 + 42: 6(float) CompositeExtract 40 0 + Store 41 42 + 43: 17(ptr) AccessChain 9(f4) 31 + 44: 6(float) CompositeExtract 40 1 + Store 43 44 + 46: 17(ptr) AccessChain 9(f4) 45 + 47: 6(float) CompositeExtract 40 2 + Store 46 47 + 50: 7(fvec4) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 49(if4) + 51: 7(fvec4) Load 9(f4) + 52: 7(fvec4) FAdd 51 50 + Store 9(f4) 52 + 56: 53(int) Load 55(samp) + 57: 6(float) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 13(if1) 56 + 58: 17(ptr) AccessChain 9(f4) 16 + 59: 6(float) Load 58 + 60: 6(float) FAdd 59 57 + 61: 17(ptr) AccessChain 9(f4) 16 + Store 61 60 + 62: 53(int) Load 55(samp) + 63: 22(fvec2) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 24(if2) 62 + 64: 7(fvec4) Load 9(f4) + 65: 22(fvec2) VectorShuffle 64 64 0 1 + 66: 22(fvec2) FAdd 65 63 + 67: 17(ptr) AccessChain 9(f4) 16 + 68: 6(float) CompositeExtract 66 0 + Store 67 68 + 69: 17(ptr) AccessChain 9(f4) 31 + 70: 6(float) CompositeExtract 66 1 + Store 69 70 + 71: 53(int) Load 55(samp) + 72: 34(fvec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 36(if3) 71 + 73: 7(fvec4) Load 9(f4) + 74: 34(fvec3) VectorShuffle 73 73 0 1 2 + 75: 34(fvec3) FAdd 74 72 + 76: 17(ptr) AccessChain 9(f4) 16 + 77: 6(float) CompositeExtract 75 0 + Store 76 77 + 78: 17(ptr) AccessChain 9(f4) 31 + 79: 6(float) CompositeExtract 75 1 + Store 78 79 + 80: 17(ptr) AccessChain 9(f4) 45 + 81: 6(float) CompositeExtract 75 2 + Store 80 81 + 82: 53(int) Load 55(samp) + 83: 7(fvec4) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 49(if4) 82 84: 7(fvec4) Load 9(f4) - 85: 7(fvec4) VectorShuffle 84 83 4 5 2 3 + 85: 7(fvec4) FAdd 84 83 Store 9(f4) 85 - 86: 22(fvec2) Load 72(offset) - 87: 31(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 33(if3) 86 - 88: 7(fvec4) Load 9(f4) - 89: 31(fvec3) VectorShuffle 88 88 0 1 2 - 90: 31(fvec3) FAdd 89 87 - 91: 7(fvec4) Load 9(f4) - 92: 7(fvec4) VectorShuffle 91 90 4 5 6 3 - Store 9(f4) 92 - 93: 22(fvec2) Load 72(offset) - 94: 7(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 41(if4) 93 + 87: 22(fvec2) Load 86(offset) + 88: 6(float) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 13(if1) 87 + 89: 17(ptr) AccessChain 9(f4) 16 + 90: 6(float) Load 89 + 91: 6(float) FAdd 90 88 + 92: 17(ptr) AccessChain 9(f4) 16 + Store 92 91 + 93: 22(fvec2) Load 86(offset) + 94: 22(fvec2) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 24(if2) 93 95: 7(fvec4) Load 9(f4) - 96: 7(fvec4) FAdd 95 94 - Store 9(f4) 96 - 99: 7(fvec4) Load 9(f4) - Store 98(fragColor) 99 + 96: 22(fvec2) VectorShuffle 95 95 0 1 + 97: 22(fvec2) FAdd 96 94 + 98: 17(ptr) AccessChain 9(f4) 16 + 99: 6(float) CompositeExtract 97 0 + Store 98 99 + 100: 17(ptr) AccessChain 9(f4) 31 + 101: 6(float) CompositeExtract 97 1 + Store 100 101 + 102: 22(fvec2) Load 86(offset) + 103: 34(fvec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 36(if3) 102 + 104: 7(fvec4) Load 9(f4) + 105: 34(fvec3) VectorShuffle 104 104 0 1 2 + 106: 34(fvec3) FAdd 105 103 + 107: 17(ptr) AccessChain 9(f4) 16 + 108: 6(float) CompositeExtract 106 0 + Store 107 108 + 109: 17(ptr) AccessChain 9(f4) 31 + 110: 6(float) CompositeExtract 106 1 + Store 109 110 + 111: 17(ptr) AccessChain 9(f4) 45 + 112: 6(float) CompositeExtract 106 2 + Store 111 112 + 113: 22(fvec2) Load 86(offset) + 114: 7(fvec4) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 49(if4) 113 + 115: 7(fvec4) Load 9(f4) + 116: 7(fvec4) FAdd 115 114 + Store 9(f4) 116 + 119: 7(fvec4) Load 9(f4) + Store 118(fragColor) 119 Return FunctionEnd diff --git a/Test/baseResults/spv.memoryQualifier.frag.out b/Test/baseResults/spv.memoryQualifier.frag.out index 5f0647b5ef..fce8c9ccd0 100644 --- a/Test/baseResults/spv.memoryQualifier.frag.out +++ b/Test/baseResults/spv.memoryQualifier.frag.out @@ -2,7 +2,7 @@ spv.memoryQualifier.frag Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 97 +// Id's are bound by 105 Capability Shader Capability ImageRect @@ -106,14 +106,16 @@ Validation failed 58: TypePointer Uniform 6(float) 61: TypePointer Function 6(float) 63: TypePointer Uniform 47(fvec2) - 71: 14(int) Constant 2 - 72: TypePointer Uniform 48(fvec3) - 80: 14(int) Constant 5 - 83: TypeInt 32 0 - 84: 83(int) Constant 1 - 88: 83(int) Constant 3 - 93: 14(int) Constant 3 - 95: TypePointer Uniform 7(fvec4) + 69: TypeInt 32 0 + 70: 69(int) Constant 0 + 73: 69(int) Constant 1 + 76: 14(int) Constant 2 + 77: TypePointer Uniform 48(fvec3) + 87: 69(int) Constant 2 + 90: 14(int) Constant 5 + 96: 69(int) Constant 3 + 101: 14(int) Constant 3 + 103: TypePointer Uniform 7(fvec4) 4(main): 2 Function None 3 5: Label 9(texel): 8(ptr) Variable Function @@ -149,29 +151,38 @@ Validation failed 66: 7(fvec4) Load 9(texel) 67: 47(fvec2) VectorShuffle 66 66 0 1 68: 47(fvec2) FAdd 67 65 - 69: 7(fvec4) Load 9(texel) - 70: 7(fvec4) VectorShuffle 69 68 4 5 2 3 - Store 9(texel) 70 - 73: 72(ptr) AccessChain 52 71 - 74: 48(fvec3) Load 73 - 75: 7(fvec4) Load 9(texel) - 76: 48(fvec3) VectorShuffle 75 75 0 1 2 - 77: 48(fvec3) FSub 76 74 - 78: 7(fvec4) Load 9(texel) - 79: 7(fvec4) VectorShuffle 78 77 4 5 6 3 - Store 9(texel) 79 - 81: 58(ptr) AccessChain 52 80 57 - 82: 6(float) Load 81 - 85: 58(ptr) AccessChain 52 80 15 84 - 86: 6(float) Load 85 - 87: 6(float) FAdd 82 86 - 89: 61(ptr) AccessChain 9(texel) 88 - 90: 6(float) Load 89 - 91: 6(float) FAdd 90 87 - 92: 61(ptr) AccessChain 9(texel) 88 - Store 92 91 - 94: 7(fvec4) Load 9(texel) - 96: 95(ptr) AccessChain 52 93 - Store 96 94 + 71: 61(ptr) AccessChain 9(texel) 70 + 72: 6(float) CompositeExtract 68 0 + Store 71 72 + 74: 61(ptr) AccessChain 9(texel) 73 + 75: 6(float) CompositeExtract 68 1 + Store 74 75 + 78: 77(ptr) AccessChain 52 76 + 79: 48(fvec3) Load 78 + 80: 7(fvec4) Load 9(texel) + 81: 48(fvec3) VectorShuffle 80 80 0 1 2 + 82: 48(fvec3) FSub 81 79 + 83: 61(ptr) AccessChain 9(texel) 70 + 84: 6(float) CompositeExtract 82 0 + Store 83 84 + 85: 61(ptr) AccessChain 9(texel) 73 + 86: 6(float) CompositeExtract 82 1 + Store 85 86 + 88: 61(ptr) AccessChain 9(texel) 87 + 89: 6(float) CompositeExtract 82 2 + Store 88 89 + 91: 58(ptr) AccessChain 52 90 57 + 92: 6(float) Load 91 + 93: 58(ptr) AccessChain 52 90 15 73 + 94: 6(float) Load 93 + 95: 6(float) FAdd 92 94 + 97: 61(ptr) AccessChain 9(texel) 96 + 98: 6(float) Load 97 + 99: 6(float) FAdd 98 95 + 100: 61(ptr) AccessChain 9(texel) 96 + Store 100 99 + 102: 7(fvec4) Load 9(texel) + 104: 103(ptr) AccessChain 52 101 + Store 104 102 Return FunctionEnd diff --git a/Test/baseResults/spv.meshShaderUserDefined.mesh.out b/Test/baseResults/spv.meshShaderUserDefined.mesh.out index fc2730cda7..01ee933d0d 100644 --- a/Test/baseResults/spv.meshShaderUserDefined.mesh.out +++ b/Test/baseResults/spv.meshShaderUserDefined.mesh.out @@ -1,13 +1,13 @@ spv.meshShaderUserDefined.mesh // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 138 +// Id's are bound by 141 Capability MeshShadingNV Extension "SPV_NV_mesh_shader" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MeshNV 4 "main" 11 17 34 101 + EntryPoint MeshNV 4 "main" 11 17 34 104 ExecutionMode 4 LocalSize 32 1 1 ExecutionMode 4 OutputVertices 81 ExecutionMode 4 OutputPrimitivesNV 32 @@ -27,11 +27,11 @@ spv.meshShaderUserDefined.mesh MemberName 30(myblock) 4 "m" MemberName 30(myblock) 5 "mArr" Name 34 "blk" - Name 97 "myblock2" - MemberName 97(myblock2) 0 "f" - MemberName 97(myblock2) 1 "pos" - MemberName 97(myblock2) 2 "m" - Name 101 "blk2" + Name 100 "myblock2" + MemberName 100(myblock2) 0 "f" + MemberName 100(myblock2) 1 "pos" + MemberName 100(myblock2) 2 "m" + Name 104 "blk2" Decorate 11(gl_LocalInvocationID) BuiltIn LocalInvocationId Decorate 17(gl_WorkGroupID) BuiltIn WorkgroupId MemberDecorate 30(myblock) 0 PerPrimitiveNV @@ -42,9 +42,9 @@ spv.meshShaderUserDefined.mesh MemberDecorate 30(myblock) 5 PerPrimitiveNV Decorate 30(myblock) Block Decorate 34(blk) Location 0 - Decorate 97(myblock2) Block - Decorate 101(blk2) Location 20 - Decorate 137 BuiltIn WorkgroupSize + Decorate 100(myblock2) Block + Decorate 104(blk2) Location 20 + Decorate 140 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -83,30 +83,30 @@ spv.meshShaderUserDefined.mesh 56: 23(fvec3) ConstantComposite 53 54 55 57: TypePointer Output 23(fvec3) 63: 36(int) Constant 3 - 68: TypePointer Output 24(fvec4) - 74: 36(int) Constant 4 - 75: 20(float) Constant 1098907648 - 76: 24(fvec4) ConstantComposite 55 53 54 75 - 81: 36(int) Constant 5 - 84: 6(int) Constant 3 - 91: 20(float) Constant 1099431936 - 92: 20(float) Constant 1099956224 - 93: 20(float) Constant 1100480512 - 94: 23(fvec3) ConstantComposite 91 92 93 - 96: 6(int) Constant 264 - 97(myblock2): TypeStruct 20(float) 24(fvec4) 26 - 98: 6(int) Constant 81 - 99: TypeArray 97(myblock2) 98 - 100: TypePointer Output 99 - 101(blk2): 100(ptr) Variable Output - 107: 20(float) Constant 1101004800 - 111: 20(float) Constant 1101529088 - 112: 20(float) Constant 1102053376 - 113: 20(float) Constant 1102577664 - 114: 20(float) Constant 1103101952 - 115: 24(fvec4) ConstantComposite 111 112 113 114 - 127: 20(float) Constant 1105723392 - 137: 9(ivec3) ConstantComposite 31 42 42 + 72: 6(int) Constant 3 + 77: 36(int) Constant 4 + 78: 20(float) Constant 1098907648 + 79: 24(fvec4) ConstantComposite 55 53 54 78 + 80: TypePointer Output 24(fvec4) + 85: 36(int) Constant 5 + 94: 20(float) Constant 1099431936 + 95: 20(float) Constant 1099956224 + 96: 20(float) Constant 1100480512 + 97: 23(fvec3) ConstantComposite 94 95 96 + 99: 6(int) Constant 264 + 100(myblock2): TypeStruct 20(float) 24(fvec4) 26 + 101: 6(int) Constant 81 + 102: TypeArray 100(myblock2) 101 + 103: TypePointer Output 102 + 104(blk2): 103(ptr) Variable Output + 110: 20(float) Constant 1101004800 + 114: 20(float) Constant 1101529088 + 115: 20(float) Constant 1102053376 + 116: 20(float) Constant 1102577664 + 117: 20(float) Constant 1103101952 + 118: 24(fvec4) ConstantComposite 114 115 116 117 + 130: 20(float) Constant 1105723392 + 140: 9(ivec3) ConstantComposite 31 42 42 4(main): 2 Function None 3 5: Label 8(iid): 7(ptr) Variable Function @@ -140,64 +140,69 @@ spv.meshShaderUserDefined.mesh 65: 6(int) UDiv 64 28 66: 57(ptr) AccessChain 34(blk) 65 52 67: 23(fvec3) Load 66 - 69: 68(ptr) AccessChain 34(blk) 62 63 44 - 70: 24(fvec4) Load 69 - 71: 24(fvec4) VectorShuffle 70 67 0 4 5 6 - Store 69 71 - 72: 6(int) Load 8(iid) - 73: 6(int) UDiv 72 21 - 77: 68(ptr) AccessChain 34(blk) 73 74 52 - 78: 24(fvec4) Load 77 - 79: 24(fvec4) VectorShuffle 78 76 7 6 5 4 - Store 77 79 - 80: 6(int) Load 8(iid) - 82: 6(int) Load 8(iid) - 83: 6(int) UDiv 82 21 - 85: 39(ptr) AccessChain 34(blk) 83 74 52 84 - 86: 20(float) Load 85 - 87: 39(ptr) AccessChain 34(blk) 80 81 37 44 42 - Store 87 86 - 88: 6(int) Load 8(iid) - 89: 6(int) IMul 88 21 - 90: 6(int) Load 16(gid) - 95: 57(ptr) AccessChain 34(blk) 89 81 44 90 - Store 95 94 - MemoryBarrier 42 96 - ControlBarrier 28 28 96 - 102: 6(int) Load 8(iid) - 103: 6(int) Load 8(iid) - 104: 6(int) ISub 103 42 - 105: 39(ptr) AccessChain 101(blk2) 104 37 - 106: 20(float) Load 105 - 108: 20(float) FAdd 106 107 - 109: 39(ptr) AccessChain 101(blk2) 102 37 - Store 109 108 - 110: 6(int) Load 8(iid) - 116: 68(ptr) AccessChain 101(blk2) 110 44 - Store 116 115 - 117: 6(int) Load 8(iid) - 118: 6(int) IAdd 117 42 - 119: 6(int) Load 16(gid) + 68: 39(ptr) AccessChain 34(blk) 62 63 44 42 + 69: 20(float) CompositeExtract 67 0 + Store 68 69 + 70: 39(ptr) AccessChain 34(blk) 62 63 44 28 + 71: 20(float) CompositeExtract 67 1 + Store 70 71 + 73: 39(ptr) AccessChain 34(blk) 62 63 44 72 + 74: 20(float) CompositeExtract 67 2 + Store 73 74 + 75: 6(int) Load 8(iid) + 76: 6(int) UDiv 75 21 + 81: 80(ptr) AccessChain 34(blk) 76 77 52 + 82: 24(fvec4) Load 81 + 83: 24(fvec4) VectorShuffle 82 79 7 6 5 4 + Store 81 83 + 84: 6(int) Load 8(iid) + 86: 6(int) Load 8(iid) + 87: 6(int) UDiv 86 21 + 88: 39(ptr) AccessChain 34(blk) 87 77 52 72 + 89: 20(float) Load 88 + 90: 39(ptr) AccessChain 34(blk) 84 85 37 44 42 + Store 90 89 + 91: 6(int) Load 8(iid) + 92: 6(int) IMul 91 21 + 93: 6(int) Load 16(gid) + 98: 57(ptr) AccessChain 34(blk) 92 85 44 93 + Store 98 97 + MemoryBarrier 42 99 + ControlBarrier 28 28 99 + 105: 6(int) Load 8(iid) + 106: 6(int) Load 8(iid) + 107: 6(int) ISub 106 42 + 108: 39(ptr) AccessChain 104(blk2) 107 37 + 109: 20(float) Load 108 + 111: 20(float) FAdd 109 110 + 112: 39(ptr) AccessChain 104(blk2) 105 37 + Store 112 111 + 113: 6(int) Load 8(iid) + 119: 80(ptr) AccessChain 104(blk2) 113 44 + Store 119 118 120: 6(int) Load 8(iid) - 121: 68(ptr) AccessChain 101(blk2) 120 44 - 122: 24(fvec4) Load 121 - 123: 68(ptr) AccessChain 101(blk2) 118 52 119 - Store 123 122 - 124: 6(int) Load 8(iid) - 125: 6(int) IAdd 124 42 - 126: 6(int) Load 16(gid) - 128: 39(ptr) AccessChain 101(blk2) 125 52 126 28 - Store 128 127 - 129: 6(int) Load 8(iid) - 130: 6(int) IAdd 129 28 - 131: 6(int) Load 8(iid) - 132: 6(int) IAdd 131 42 - 133: 6(int) Load 16(gid) - 134: 68(ptr) AccessChain 101(blk2) 132 52 133 - 135: 24(fvec4) Load 134 - 136: 68(ptr) AccessChain 101(blk2) 130 52 63 - Store 136 135 - MemoryBarrier 42 96 - ControlBarrier 28 28 96 + 121: 6(int) IAdd 120 42 + 122: 6(int) Load 16(gid) + 123: 6(int) Load 8(iid) + 124: 80(ptr) AccessChain 104(blk2) 123 44 + 125: 24(fvec4) Load 124 + 126: 80(ptr) AccessChain 104(blk2) 121 52 122 + Store 126 125 + 127: 6(int) Load 8(iid) + 128: 6(int) IAdd 127 42 + 129: 6(int) Load 16(gid) + 131: 39(ptr) AccessChain 104(blk2) 128 52 129 28 + Store 131 130 + 132: 6(int) Load 8(iid) + 133: 6(int) IAdd 132 28 + 134: 6(int) Load 8(iid) + 135: 6(int) IAdd 134 42 + 136: 6(int) Load 16(gid) + 137: 80(ptr) AccessChain 104(blk2) 135 52 136 + 138: 24(fvec4) Load 137 + 139: 80(ptr) AccessChain 104(blk2) 133 52 63 + Store 139 138 + MemoryBarrier 42 99 + ControlBarrier 28 28 99 Return FunctionEnd diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out index bdbf10f4c5..93385297da 100644 --- a/Test/baseResults/spv.shaderBallot.comp.out +++ b/Test/baseResults/spv.shaderBallot.comp.out @@ -1,7 +1,7 @@ spv.shaderBallot.comp // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 318 +// Id's are bound by 343 Capability Shader Capability Int64 @@ -42,7 +42,7 @@ spv.shaderBallot.comp Decorate 72(Buffers) BufferBlock Decorate 75(data) DescriptorSet 0 Decorate 75(data) Binding 0 - Decorate 317 BuiltIn WorkgroupSize + Decorate 342 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -77,19 +77,20 @@ spv.shaderBallot.comp 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 + 100: 6(int) Constant 1 + 104: 70(int) Constant 2 + 105: TypeVector 68(float) 3 + 121: 6(int) Constant 2 + 125: 70(int) Constant 3 + 140: TypePointer Uniform 70(int) + 147: TypeVector 70(int) 2 + 148: TypePointer Uniform 71(ivec4) + 163: TypeVector 70(int) 3 + 196: TypePointer Uniform 6(int) + 203: TypePointer Uniform 20(ivec4) + 218: TypeVector 6(int) 3 + 341: 6(int) Constant 8 + 342: 218(ivec3) ConstantComposite 341 341 100 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -137,7 +138,7 @@ spv.shaderBallot.comp 64: 17(int64_t) Bitcast 63 65: 58(bool) IEqual 57 64 SelectionMerge 67 None - BranchConditional 65 66 236 + BranchConditional 65 66 250 66: Label 76: 6(int) Load 8(invocation) 80: 79(ptr) AccessChain 75(data) 77 77 78 @@ -156,237 +157,279 @@ spv.shaderBallot.comp 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) - 143: 142(ptr) AccessChain 75(data) 86 86 - 144: 71(ivec4) Load 143 - 145: 141(ivec2) VectorShuffle 144 144 0 1 + 98: 79(ptr) AccessChain 75(data) 85 77 78 + 99: 68(float) CompositeExtract 97 0 + Store 98 99 + 101: 79(ptr) AccessChain 75(data) 85 77 100 + 102: 68(float) CompositeExtract 97 1 + Store 101 102 + 103: 6(int) Load 8(invocation) + 106: 88(ptr) AccessChain 75(data) 104 77 + 107: 69(fvec4) Load 106 + 108: 105(fvec3) VectorShuffle 107 107 0 1 2 + 109: 6(int) Load 8(invocation) + 110: 68(float) CompositeExtract 108 0 + 111: 68(float) SubgroupReadInvocationKHR 110 109 + 112: 68(float) CompositeExtract 108 1 + 113: 68(float) SubgroupReadInvocationKHR 112 109 + 114: 68(float) CompositeExtract 108 2 + 115: 68(float) SubgroupReadInvocationKHR 114 109 + 116: 105(fvec3) CompositeConstruct 111 113 115 + 117: 79(ptr) AccessChain 75(data) 103 77 78 + 118: 68(float) CompositeExtract 116 0 + Store 117 118 + 119: 79(ptr) AccessChain 75(data) 103 77 100 + 120: 68(float) CompositeExtract 116 1 + Store 119 120 + 122: 79(ptr) AccessChain 75(data) 103 77 121 + 123: 68(float) CompositeExtract 116 2 + Store 122 123 + 124: 6(int) Load 8(invocation) + 126: 88(ptr) AccessChain 75(data) 125 77 + 127: 69(fvec4) Load 126 + 128: 6(int) Load 8(invocation) + 129: 68(float) CompositeExtract 127 0 + 130: 68(float) SubgroupReadInvocationKHR 129 128 + 131: 68(float) CompositeExtract 127 1 + 132: 68(float) SubgroupReadInvocationKHR 131 128 + 133: 68(float) CompositeExtract 127 2 + 134: 68(float) SubgroupReadInvocationKHR 133 128 + 135: 68(float) CompositeExtract 127 3 + 136: 68(float) SubgroupReadInvocationKHR 135 128 + 137: 69(fvec4) CompositeConstruct 130 132 134 136 + 138: 88(ptr) AccessChain 75(data) 124 77 + Store 138 137 + 139: 6(int) Load 8(invocation) + 141: 140(ptr) AccessChain 75(data) 77 86 78 + 142: 70(int) Load 141 + 143: 6(int) Load 8(invocation) + 144: 70(int) SubgroupReadInvocationKHR 142 143 + 145: 140(ptr) AccessChain 75(data) 139 86 78 + Store 145 144 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 + 149: 148(ptr) AccessChain 75(data) 86 86 + 150: 71(ivec4) Load 149 + 151: 147(ivec2) VectorShuffle 150 150 0 1 + 152: 6(int) Load 8(invocation) + 153: 70(int) CompositeExtract 151 0 + 154: 70(int) SubgroupReadInvocationKHR 153 152 + 155: 70(int) CompositeExtract 151 1 + 156: 70(int) SubgroupReadInvocationKHR 155 152 + 157: 147(ivec2) CompositeConstruct 154 156 + 158: 140(ptr) AccessChain 75(data) 146 86 78 + 159: 70(int) CompositeExtract 157 0 + Store 158 159 + 160: 140(ptr) AccessChain 75(data) 146 86 100 + 161: 70(int) CompositeExtract 157 1 + Store 160 161 + 162: 6(int) Load 8(invocation) + 164: 148(ptr) AccessChain 75(data) 104 86 + 165: 71(ivec4) Load 164 + 166: 163(ivec3) VectorShuffle 165 165 0 1 2 + 167: 6(int) Load 8(invocation) + 168: 70(int) CompositeExtract 166 0 + 169: 70(int) SubgroupReadInvocationKHR 168 167 + 170: 70(int) CompositeExtract 166 1 + 171: 70(int) SubgroupReadInvocationKHR 170 167 + 172: 70(int) CompositeExtract 166 2 + 173: 70(int) SubgroupReadInvocationKHR 172 167 + 174: 163(ivec3) CompositeConstruct 169 171 173 + 175: 140(ptr) AccessChain 75(data) 162 86 78 + 176: 70(int) CompositeExtract 174 0 + Store 175 176 + 177: 140(ptr) AccessChain 75(data) 162 86 100 + 178: 70(int) CompositeExtract 174 1 + Store 177 178 + 179: 140(ptr) AccessChain 75(data) 162 86 121 + 180: 70(int) CompositeExtract 174 2 + Store 179 180 + 181: 6(int) Load 8(invocation) + 182: 148(ptr) AccessChain 75(data) 125 86 + 183: 71(ivec4) Load 182 + 184: 6(int) Load 8(invocation) + 185: 70(int) CompositeExtract 183 0 + 186: 70(int) SubgroupReadInvocationKHR 185 184 + 187: 70(int) CompositeExtract 183 1 + 188: 70(int) SubgroupReadInvocationKHR 187 184 + 189: 70(int) CompositeExtract 183 2 + 190: 70(int) SubgroupReadInvocationKHR 189 184 + 191: 70(int) CompositeExtract 183 3 + 192: 70(int) SubgroupReadInvocationKHR 191 184 + 193: 71(ivec4) CompositeConstruct 186 188 190 192 + 194: 148(ptr) AccessChain 75(data) 181 86 + Store 194 193 + 195: 6(int) Load 8(invocation) + 197: 196(ptr) AccessChain 75(data) 77 104 78 + 198: 6(int) Load 197 + 199: 6(int) Load 8(invocation) + 200: 6(int) SubgroupReadInvocationKHR 198 199 + 201: 196(ptr) AccessChain 75(data) 195 104 78 + Store 201 200 + 202: 6(int) Load 8(invocation) + 204: 203(ptr) AccessChain 75(data) 86 104 + 205: 20(ivec4) Load 204 + 206: 26(ivec2) VectorShuffle 205 205 0 1 + 207: 6(int) Load 8(invocation) + 208: 6(int) CompositeExtract 206 0 + 209: 6(int) SubgroupReadInvocationKHR 208 207 + 210: 6(int) CompositeExtract 206 1 + 211: 6(int) SubgroupReadInvocationKHR 210 207 + 212: 26(ivec2) CompositeConstruct 209 211 + 213: 196(ptr) AccessChain 75(data) 202 104 78 + 214: 6(int) CompositeExtract 212 0 + Store 213 214 + 215: 196(ptr) AccessChain 75(data) 202 104 100 + 216: 6(int) CompositeExtract 212 1 + Store 215 216 + 217: 6(int) Load 8(invocation) + 219: 203(ptr) AccessChain 75(data) 104 104 220: 20(ivec4) Load 219 - 221: 20(ivec4) VectorShuffle 220 218 4 5 6 3 - Store 219 221 + 221: 218(ivec3) VectorShuffle 220 220 0 1 2 222: 6(int) Load 8(invocation) - 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 + 223: 6(int) CompositeExtract 221 0 + 224: 6(int) SubgroupReadInvocationKHR 223 222 + 225: 6(int) CompositeExtract 221 1 + 226: 6(int) SubgroupReadInvocationKHR 225 222 + 227: 6(int) CompositeExtract 221 2 + 228: 6(int) SubgroupReadInvocationKHR 227 222 + 229: 218(ivec3) CompositeConstruct 224 226 228 + 230: 196(ptr) AccessChain 75(data) 217 104 78 + 231: 6(int) CompositeExtract 229 0 + Store 230 231 + 232: 196(ptr) AccessChain 75(data) 217 104 100 + 233: 6(int) CompositeExtract 229 1 + Store 232 233 + 234: 196(ptr) AccessChain 75(data) 217 104 121 + 235: 6(int) CompositeExtract 229 2 + Store 234 235 + 236: 6(int) Load 8(invocation) + 237: 203(ptr) AccessChain 75(data) 125 104 + 238: 20(ivec4) Load 237 + 239: 6(int) Load 8(invocation) + 240: 6(int) CompositeExtract 238 0 + 241: 6(int) SubgroupReadInvocationKHR 240 239 + 242: 6(int) CompositeExtract 238 1 + 243: 6(int) SubgroupReadInvocationKHR 242 239 + 244: 6(int) CompositeExtract 238 2 + 245: 6(int) SubgroupReadInvocationKHR 244 239 + 246: 6(int) CompositeExtract 238 3 + 247: 6(int) SubgroupReadInvocationKHR 246 239 + 248: 20(ivec4) CompositeConstruct 241 243 245 247 + 249: 203(ptr) AccessChain 75(data) 236 104 + Store 249 248 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 + 250: Label + 251: 6(int) Load 8(invocation) + 252: 79(ptr) AccessChain 75(data) 77 77 78 + 253: 68(float) Load 252 + 254: 68(float) SubgroupFirstInvocationKHR 253 + 255: 79(ptr) AccessChain 75(data) 251 77 78 + Store 255 254 + 256: 6(int) Load 8(invocation) + 257: 88(ptr) AccessChain 75(data) 86 77 + 258: 69(fvec4) Load 257 + 259: 87(fvec2) VectorShuffle 258 258 0 1 + 260: 87(fvec2) SubgroupFirstInvocationKHR 259 + 261: 79(ptr) AccessChain 75(data) 256 77 78 + 262: 68(float) CompositeExtract 260 0 + Store 261 262 + 263: 79(ptr) AccessChain 75(data) 256 77 100 + 264: 68(float) CompositeExtract 260 1 + Store 263 264 + 265: 6(int) Load 8(invocation) + 266: 88(ptr) AccessChain 75(data) 104 77 + 267: 69(fvec4) Load 266 + 268: 105(fvec3) VectorShuffle 267 267 0 1 2 + 269: 105(fvec3) SubgroupFirstInvocationKHR 268 + 270: 79(ptr) AccessChain 75(data) 265 77 78 + 271: 68(float) CompositeExtract 269 0 + Store 270 271 + 272: 79(ptr) AccessChain 75(data) 265 77 100 + 273: 68(float) CompositeExtract 269 1 + Store 272 273 + 274: 79(ptr) AccessChain 75(data) 265 77 121 + 275: 68(float) CompositeExtract 269 2 + Store 274 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 + 277: 88(ptr) AccessChain 75(data) 125 77 + 278: 69(fvec4) Load 277 + 279: 69(fvec4) SubgroupFirstInvocationKHR 278 + 280: 88(ptr) AccessChain 75(data) 276 77 + Store 280 279 + 281: 6(int) Load 8(invocation) + 282: 140(ptr) AccessChain 75(data) 77 86 78 + 283: 70(int) Load 282 + 284: 70(int) SubgroupFirstInvocationKHR 283 + 285: 140(ptr) AccessChain 75(data) 281 86 78 + Store 285 284 + 286: 6(int) Load 8(invocation) + 287: 148(ptr) AccessChain 75(data) 86 86 + 288: 71(ivec4) Load 287 + 289: 147(ivec2) VectorShuffle 288 288 0 1 + 290: 147(ivec2) SubgroupFirstInvocationKHR 289 + 291: 140(ptr) AccessChain 75(data) 286 86 78 + 292: 70(int) CompositeExtract 290 0 + Store 291 292 + 293: 140(ptr) AccessChain 75(data) 286 86 100 + 294: 70(int) CompositeExtract 290 1 + Store 293 294 + 295: 6(int) Load 8(invocation) + 296: 148(ptr) AccessChain 75(data) 104 86 + 297: 71(ivec4) Load 296 + 298: 163(ivec3) VectorShuffle 297 297 0 1 2 + 299: 163(ivec3) SubgroupFirstInvocationKHR 298 + 300: 140(ptr) AccessChain 75(data) 295 86 78 + 301: 70(int) CompositeExtract 299 0 + Store 300 301 + 302: 140(ptr) AccessChain 75(data) 295 86 100 + 303: 70(int) CompositeExtract 299 1 + Store 302 303 + 304: 140(ptr) AccessChain 75(data) 295 86 121 + 305: 70(int) CompositeExtract 299 2 + Store 304 305 + 306: 6(int) Load 8(invocation) + 307: 148(ptr) AccessChain 75(data) 125 86 + 308: 71(ivec4) Load 307 + 309: 71(ivec4) SubgroupFirstInvocationKHR 308 + 310: 148(ptr) AccessChain 75(data) 306 86 + Store 310 309 + 311: 6(int) Load 8(invocation) + 312: 196(ptr) AccessChain 75(data) 77 104 78 + 313: 6(int) Load 312 + 314: 6(int) SubgroupFirstInvocationKHR 313 + 315: 196(ptr) AccessChain 75(data) 311 104 78 + Store 315 314 + 316: 6(int) Load 8(invocation) + 317: 203(ptr) AccessChain 75(data) 86 104 + 318: 20(ivec4) Load 317 + 319: 26(ivec2) VectorShuffle 318 318 0 1 + 320: 26(ivec2) SubgroupFirstInvocationKHR 319 + 321: 196(ptr) AccessChain 75(data) 316 104 78 + 322: 6(int) CompositeExtract 320 0 + Store 321 322 + 323: 196(ptr) AccessChain 75(data) 316 104 100 + 324: 6(int) CompositeExtract 320 1 + Store 323 324 + 325: 6(int) Load 8(invocation) + 326: 203(ptr) AccessChain 75(data) 104 104 + 327: 20(ivec4) Load 326 + 328: 218(ivec3) VectorShuffle 327 327 0 1 2 + 329: 218(ivec3) SubgroupFirstInvocationKHR 328 + 330: 196(ptr) AccessChain 75(data) 325 104 78 + 331: 6(int) CompositeExtract 329 0 + Store 330 331 + 332: 196(ptr) AccessChain 75(data) 325 104 100 + 333: 6(int) CompositeExtract 329 1 + Store 332 333 + 334: 196(ptr) AccessChain 75(data) 325 104 121 + 335: 6(int) CompositeExtract 329 2 + Store 334 335 + 336: 6(int) Load 8(invocation) + 337: 203(ptr) AccessChain 75(data) 125 104 + 338: 20(ivec4) Load 337 + 339: 20(ivec4) SubgroupFirstInvocationKHR 338 + 340: 203(ptr) AccessChain 75(data) 336 104 + Store 340 339 Branch 67 67: Label Return diff --git a/Test/baseResults/spv.subgroupArithmetic.comp.out b/Test/baseResults/spv.subgroupArithmetic.comp.out index e531f6fdf7..87bfa3115d 100644 --- a/Test/baseResults/spv.subgroupArithmetic.comp.out +++ b/Test/baseResults/spv.subgroupArithmetic.comp.out @@ -1,7 +1,7 @@ spv.subgroupArithmetic.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 2085 +// Id's are bound by 2386 Capability Shader Capability Float64 @@ -39,7 +39,7 @@ spv.subgroupArithmetic.comp Decorate 24(Buffers) Block Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 - Decorate 2084 BuiltIn WorkgroupSize + Decorate 2385 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -66,34 +66,35 @@ spv.subgroupArithmetic.comp 38: 19(int) Constant 1 39: TypeVector 17(float) 2 40: TypePointer StorageBuffer 18(fvec4) - 49: 19(int) Constant 2 - 50: TypeVector 17(float) 3 - 59: 19(int) Constant 3 - 65: TypePointer StorageBuffer 19(int) - 71: TypeVector 19(int) 2 - 72: TypePointer StorageBuffer 20(ivec4) - 81: TypeVector 19(int) 3 - 95: TypePointer StorageBuffer 6(int) - 101: TypeVector 6(int) 2 - 102: TypePointer StorageBuffer 21(ivec4) - 111: TypeVector 6(int) 3 - 125: TypePointer StorageBuffer 22(float64_t) - 131: TypeVector 22(float64_t) 2 - 132: TypePointer StorageBuffer 23(f64vec4) - 141: TypeVector 22(float64_t) 3 - 521: TypeBool - 530: 71(ivec2) ConstantComposite 29 29 - 531: TypeVector 521(bool) 2 - 534: 71(ivec2) ConstantComposite 38 38 - 543: 81(ivec3) ConstantComposite 29 29 29 - 544: TypeVector 521(bool) 3 - 547: 81(ivec3) ConstantComposite 38 38 38 - 555: 20(ivec4) ConstantComposite 29 29 29 29 - 556: TypeVector 521(bool) 4 - 559: 20(ivec4) ConstantComposite 38 38 38 38 - 2082: 6(int) Constant 8 - 2083: 6(int) Constant 1 - 2084: 111(ivec3) ConstantComposite 2082 2083 2083 + 47: 6(int) Constant 1 + 51: 19(int) Constant 2 + 52: TypeVector 17(float) 3 + 61: 6(int) Constant 2 + 65: 19(int) Constant 3 + 71: TypePointer StorageBuffer 19(int) + 77: TypeVector 19(int) 2 + 78: TypePointer StorageBuffer 20(ivec4) + 88: TypeVector 19(int) 3 + 105: TypePointer StorageBuffer 6(int) + 111: TypeVector 6(int) 2 + 112: TypePointer StorageBuffer 21(ivec4) + 122: TypeVector 6(int) 3 + 139: TypePointer StorageBuffer 22(float64_t) + 145: TypeVector 22(float64_t) 2 + 146: TypePointer StorageBuffer 23(f64vec4) + 156: TypeVector 22(float64_t) 3 + 595: TypeBool + 604: 77(ivec2) ConstantComposite 29 29 + 605: TypeVector 595(bool) 2 + 608: 77(ivec2) ConstantComposite 38 38 + 618: 88(ivec3) ConstantComposite 29 29 29 + 619: TypeVector 595(bool) 3 + 622: 88(ivec3) ConstantComposite 38 38 38 + 633: 20(ivec4) ConstantComposite 29 29 29 29 + 634: TypeVector 595(bool) 4 + 637: 20(ivec4) ConstantComposite 38 38 38 38 + 2384: 6(int) Constant 8 + 2385: 122(ivec3) ConstantComposite 2384 47 47 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -113,2316 +114,2841 @@ spv.subgroupArithmetic.comp 42: 18(fvec4) Load 41 43: 39(fvec2) VectorShuffle 42 42 0 1 44: 39(fvec2) GroupNonUniformFAdd 34 Reduce 43 - 45: 40(ptr) AccessChain 27(data) 37 29 - 46: 18(fvec4) Load 45 - 47: 18(fvec4) VectorShuffle 46 44 4 5 2 3 - Store 45 47 - 48: 6(int) Load 8(invocation) - 51: 40(ptr) AccessChain 27(data) 49 29 - 52: 18(fvec4) Load 51 - 53: 50(fvec3) VectorShuffle 52 52 0 1 2 - 54: 50(fvec3) GroupNonUniformFAdd 34 Reduce 53 - 55: 40(ptr) AccessChain 27(data) 48 29 - 56: 18(fvec4) Load 55 - 57: 18(fvec4) VectorShuffle 56 54 4 5 6 3 - Store 55 57 - 58: 6(int) Load 8(invocation) - 60: 40(ptr) AccessChain 27(data) 59 29 - 61: 18(fvec4) Load 60 - 62: 18(fvec4) GroupNonUniformFAdd 34 Reduce 61 - 63: 40(ptr) AccessChain 27(data) 58 29 - Store 63 62 + 45: 31(ptr) AccessChain 27(data) 37 29 30 + 46: 17(float) CompositeExtract 44 0 + Store 45 46 + 48: 31(ptr) AccessChain 27(data) 37 29 47 + 49: 17(float) CompositeExtract 44 1 + Store 48 49 + 50: 6(int) Load 8(invocation) + 53: 40(ptr) AccessChain 27(data) 51 29 + 54: 18(fvec4) Load 53 + 55: 52(fvec3) VectorShuffle 54 54 0 1 2 + 56: 52(fvec3) GroupNonUniformFAdd 34 Reduce 55 + 57: 31(ptr) AccessChain 27(data) 50 29 30 + 58: 17(float) CompositeExtract 56 0 + Store 57 58 + 59: 31(ptr) AccessChain 27(data) 50 29 47 + 60: 17(float) CompositeExtract 56 1 + Store 59 60 + 62: 31(ptr) AccessChain 27(data) 50 29 61 + 63: 17(float) CompositeExtract 56 2 + Store 62 63 64: 6(int) Load 8(invocation) - 66: 65(ptr) AccessChain 27(data) 29 38 30 - 67: 19(int) Load 66 - 68: 19(int) GroupNonUniformIAdd 34 Reduce 67 - 69: 65(ptr) AccessChain 27(data) 64 38 30 + 66: 40(ptr) AccessChain 27(data) 65 29 + 67: 18(fvec4) Load 66 + 68: 18(fvec4) GroupNonUniformFAdd 34 Reduce 67 + 69: 40(ptr) AccessChain 27(data) 64 29 Store 69 68 70: 6(int) Load 8(invocation) - 73: 72(ptr) AccessChain 27(data) 38 38 - 74: 20(ivec4) Load 73 - 75: 71(ivec2) VectorShuffle 74 74 0 1 - 76: 71(ivec2) GroupNonUniformIAdd 34 Reduce 75 - 77: 72(ptr) AccessChain 27(data) 70 38 - 78: 20(ivec4) Load 77 - 79: 20(ivec4) VectorShuffle 78 76 4 5 2 3 - Store 77 79 - 80: 6(int) Load 8(invocation) - 82: 72(ptr) AccessChain 27(data) 49 38 - 83: 20(ivec4) Load 82 - 84: 81(ivec3) VectorShuffle 83 83 0 1 2 - 85: 81(ivec3) GroupNonUniformIAdd 34 Reduce 84 - 86: 72(ptr) AccessChain 27(data) 80 38 - 87: 20(ivec4) Load 86 - 88: 20(ivec4) VectorShuffle 87 85 4 5 6 3 - Store 86 88 - 89: 6(int) Load 8(invocation) - 90: 72(ptr) AccessChain 27(data) 59 38 - 91: 20(ivec4) Load 90 - 92: 20(ivec4) GroupNonUniformIAdd 34 Reduce 91 - 93: 72(ptr) AccessChain 27(data) 89 38 - Store 93 92 - 94: 6(int) Load 8(invocation) - 96: 95(ptr) AccessChain 27(data) 29 49 30 - 97: 6(int) Load 96 - 98: 6(int) GroupNonUniformIAdd 34 Reduce 97 - 99: 95(ptr) AccessChain 27(data) 94 49 30 - Store 99 98 - 100: 6(int) Load 8(invocation) - 103: 102(ptr) AccessChain 27(data) 38 49 - 104: 21(ivec4) Load 103 - 105: 101(ivec2) VectorShuffle 104 104 0 1 - 106: 101(ivec2) GroupNonUniformIAdd 34 Reduce 105 - 107: 102(ptr) AccessChain 27(data) 100 49 - 108: 21(ivec4) Load 107 - 109: 21(ivec4) VectorShuffle 108 106 4 5 2 3 - Store 107 109 + 72: 71(ptr) AccessChain 27(data) 29 38 30 + 73: 19(int) Load 72 + 74: 19(int) GroupNonUniformIAdd 34 Reduce 73 + 75: 71(ptr) AccessChain 27(data) 70 38 30 + Store 75 74 + 76: 6(int) Load 8(invocation) + 79: 78(ptr) AccessChain 27(data) 38 38 + 80: 20(ivec4) Load 79 + 81: 77(ivec2) VectorShuffle 80 80 0 1 + 82: 77(ivec2) GroupNonUniformIAdd 34 Reduce 81 + 83: 71(ptr) AccessChain 27(data) 76 38 30 + 84: 19(int) CompositeExtract 82 0 + Store 83 84 + 85: 71(ptr) AccessChain 27(data) 76 38 47 + 86: 19(int) CompositeExtract 82 1 + Store 85 86 + 87: 6(int) Load 8(invocation) + 89: 78(ptr) AccessChain 27(data) 51 38 + 90: 20(ivec4) Load 89 + 91: 88(ivec3) VectorShuffle 90 90 0 1 2 + 92: 88(ivec3) GroupNonUniformIAdd 34 Reduce 91 + 93: 71(ptr) AccessChain 27(data) 87 38 30 + 94: 19(int) CompositeExtract 92 0 + Store 93 94 + 95: 71(ptr) AccessChain 27(data) 87 38 47 + 96: 19(int) CompositeExtract 92 1 + Store 95 96 + 97: 71(ptr) AccessChain 27(data) 87 38 61 + 98: 19(int) CompositeExtract 92 2 + Store 97 98 + 99: 6(int) Load 8(invocation) + 100: 78(ptr) AccessChain 27(data) 65 38 + 101: 20(ivec4) Load 100 + 102: 20(ivec4) GroupNonUniformIAdd 34 Reduce 101 + 103: 78(ptr) AccessChain 27(data) 99 38 + Store 103 102 + 104: 6(int) Load 8(invocation) + 106: 105(ptr) AccessChain 27(data) 29 51 30 + 107: 6(int) Load 106 + 108: 6(int) GroupNonUniformIAdd 34 Reduce 107 + 109: 105(ptr) AccessChain 27(data) 104 51 30 + Store 109 108 110: 6(int) Load 8(invocation) - 112: 102(ptr) AccessChain 27(data) 49 49 - 113: 21(ivec4) Load 112 - 114: 111(ivec3) VectorShuffle 113 113 0 1 2 - 115: 111(ivec3) GroupNonUniformIAdd 34 Reduce 114 - 116: 102(ptr) AccessChain 27(data) 110 49 - 117: 21(ivec4) Load 116 - 118: 21(ivec4) VectorShuffle 117 115 4 5 6 3 - Store 116 118 - 119: 6(int) Load 8(invocation) - 120: 102(ptr) AccessChain 27(data) 59 49 - 121: 21(ivec4) Load 120 - 122: 21(ivec4) GroupNonUniformIAdd 34 Reduce 121 - 123: 102(ptr) AccessChain 27(data) 119 49 - Store 123 122 - 124: 6(int) Load 8(invocation) - 126: 125(ptr) AccessChain 27(data) 29 59 30 - 127:22(float64_t) Load 126 - 128:22(float64_t) GroupNonUniformFAdd 34 Reduce 127 - 129: 125(ptr) AccessChain 27(data) 124 59 30 - Store 129 128 - 130: 6(int) Load 8(invocation) - 133: 132(ptr) AccessChain 27(data) 38 59 - 134: 23(f64vec4) Load 133 - 135:131(f64vec2) VectorShuffle 134 134 0 1 - 136:131(f64vec2) GroupNonUniformFAdd 34 Reduce 135 - 137: 132(ptr) AccessChain 27(data) 130 59 - 138: 23(f64vec4) Load 137 - 139: 23(f64vec4) VectorShuffle 138 136 4 5 2 3 - Store 137 139 - 140: 6(int) Load 8(invocation) - 142: 132(ptr) AccessChain 27(data) 49 59 - 143: 23(f64vec4) Load 142 - 144:141(f64vec3) VectorShuffle 143 143 0 1 2 - 145:141(f64vec3) GroupNonUniformFAdd 34 Reduce 144 - 146: 132(ptr) AccessChain 27(data) 140 59 - 147: 23(f64vec4) Load 146 - 148: 23(f64vec4) VectorShuffle 147 145 4 5 6 3 - Store 146 148 - 149: 6(int) Load 8(invocation) - 150: 132(ptr) AccessChain 27(data) 59 59 - 151: 23(f64vec4) Load 150 - 152: 23(f64vec4) GroupNonUniformFAdd 34 Reduce 151 - 153: 132(ptr) AccessChain 27(data) 149 59 - Store 153 152 - 154: 6(int) Load 8(invocation) - 155: 31(ptr) AccessChain 27(data) 29 29 30 - 156: 17(float) Load 155 - 157: 17(float) GroupNonUniformFMul 34 Reduce 156 - 158: 31(ptr) AccessChain 27(data) 154 29 30 - Store 158 157 - 159: 6(int) Load 8(invocation) - 160: 40(ptr) AccessChain 27(data) 38 29 - 161: 18(fvec4) Load 160 - 162: 39(fvec2) VectorShuffle 161 161 0 1 - 163: 39(fvec2) GroupNonUniformFMul 34 Reduce 162 - 164: 40(ptr) AccessChain 27(data) 159 29 - 165: 18(fvec4) Load 164 - 166: 18(fvec4) VectorShuffle 165 163 4 5 2 3 - Store 164 166 + 113: 112(ptr) AccessChain 27(data) 38 51 + 114: 21(ivec4) Load 113 + 115: 111(ivec2) VectorShuffle 114 114 0 1 + 116: 111(ivec2) GroupNonUniformIAdd 34 Reduce 115 + 117: 105(ptr) AccessChain 27(data) 110 51 30 + 118: 6(int) CompositeExtract 116 0 + Store 117 118 + 119: 105(ptr) AccessChain 27(data) 110 51 47 + 120: 6(int) CompositeExtract 116 1 + Store 119 120 + 121: 6(int) Load 8(invocation) + 123: 112(ptr) AccessChain 27(data) 51 51 + 124: 21(ivec4) Load 123 + 125: 122(ivec3) VectorShuffle 124 124 0 1 2 + 126: 122(ivec3) GroupNonUniformIAdd 34 Reduce 125 + 127: 105(ptr) AccessChain 27(data) 121 51 30 + 128: 6(int) CompositeExtract 126 0 + Store 127 128 + 129: 105(ptr) AccessChain 27(data) 121 51 47 + 130: 6(int) CompositeExtract 126 1 + Store 129 130 + 131: 105(ptr) AccessChain 27(data) 121 51 61 + 132: 6(int) CompositeExtract 126 2 + Store 131 132 + 133: 6(int) Load 8(invocation) + 134: 112(ptr) AccessChain 27(data) 65 51 + 135: 21(ivec4) Load 134 + 136: 21(ivec4) GroupNonUniformIAdd 34 Reduce 135 + 137: 112(ptr) AccessChain 27(data) 133 51 + Store 137 136 + 138: 6(int) Load 8(invocation) + 140: 139(ptr) AccessChain 27(data) 29 65 30 + 141:22(float64_t) Load 140 + 142:22(float64_t) GroupNonUniformFAdd 34 Reduce 141 + 143: 139(ptr) AccessChain 27(data) 138 65 30 + Store 143 142 + 144: 6(int) Load 8(invocation) + 147: 146(ptr) AccessChain 27(data) 38 65 + 148: 23(f64vec4) Load 147 + 149:145(f64vec2) VectorShuffle 148 148 0 1 + 150:145(f64vec2) GroupNonUniformFAdd 34 Reduce 149 + 151: 139(ptr) AccessChain 27(data) 144 65 30 + 152:22(float64_t) CompositeExtract 150 0 + Store 151 152 + 153: 139(ptr) AccessChain 27(data) 144 65 47 + 154:22(float64_t) CompositeExtract 150 1 + Store 153 154 + 155: 6(int) Load 8(invocation) + 157: 146(ptr) AccessChain 27(data) 51 65 + 158: 23(f64vec4) Load 157 + 159:156(f64vec3) VectorShuffle 158 158 0 1 2 + 160:156(f64vec3) GroupNonUniformFAdd 34 Reduce 159 + 161: 139(ptr) AccessChain 27(data) 155 65 30 + 162:22(float64_t) CompositeExtract 160 0 + Store 161 162 + 163: 139(ptr) AccessChain 27(data) 155 65 47 + 164:22(float64_t) CompositeExtract 160 1 + Store 163 164 + 165: 139(ptr) AccessChain 27(data) 155 65 61 + 166:22(float64_t) CompositeExtract 160 2 + Store 165 166 167: 6(int) Load 8(invocation) - 168: 40(ptr) AccessChain 27(data) 49 29 - 169: 18(fvec4) Load 168 - 170: 50(fvec3) VectorShuffle 169 169 0 1 2 - 171: 50(fvec3) GroupNonUniformFMul 34 Reduce 170 - 172: 40(ptr) AccessChain 27(data) 167 29 - 173: 18(fvec4) Load 172 - 174: 18(fvec4) VectorShuffle 173 171 4 5 6 3 - Store 172 174 - 175: 6(int) Load 8(invocation) - 176: 40(ptr) AccessChain 27(data) 59 29 - 177: 18(fvec4) Load 176 - 178: 18(fvec4) GroupNonUniformFMul 34 Reduce 177 - 179: 40(ptr) AccessChain 27(data) 175 29 - Store 179 178 - 180: 6(int) Load 8(invocation) - 181: 65(ptr) AccessChain 27(data) 29 38 30 - 182: 19(int) Load 181 - 183: 19(int) GroupNonUniformIMul 34 Reduce 182 - 184: 65(ptr) AccessChain 27(data) 180 38 30 - Store 184 183 - 185: 6(int) Load 8(invocation) - 186: 72(ptr) AccessChain 27(data) 38 38 - 187: 20(ivec4) Load 186 - 188: 71(ivec2) VectorShuffle 187 187 0 1 - 189: 71(ivec2) GroupNonUniformIMul 34 Reduce 188 - 190: 72(ptr) AccessChain 27(data) 185 38 - 191: 20(ivec4) Load 190 - 192: 20(ivec4) VectorShuffle 191 189 4 5 2 3 - Store 190 192 - 193: 6(int) Load 8(invocation) - 194: 72(ptr) AccessChain 27(data) 49 38 - 195: 20(ivec4) Load 194 - 196: 81(ivec3) VectorShuffle 195 195 0 1 2 - 197: 81(ivec3) GroupNonUniformIMul 34 Reduce 196 - 198: 72(ptr) AccessChain 27(data) 193 38 - 199: 20(ivec4) Load 198 - 200: 20(ivec4) VectorShuffle 199 197 4 5 6 3 - Store 198 200 - 201: 6(int) Load 8(invocation) - 202: 72(ptr) AccessChain 27(data) 59 38 - 203: 20(ivec4) Load 202 - 204: 20(ivec4) GroupNonUniformIMul 34 Reduce 203 - 205: 72(ptr) AccessChain 27(data) 201 38 - Store 205 204 - 206: 6(int) Load 8(invocation) - 207: 95(ptr) AccessChain 27(data) 29 49 30 - 208: 6(int) Load 207 - 209: 6(int) GroupNonUniformIMul 34 Reduce 208 - 210: 95(ptr) AccessChain 27(data) 206 49 30 - Store 210 209 - 211: 6(int) Load 8(invocation) - 212: 102(ptr) AccessChain 27(data) 38 49 - 213: 21(ivec4) Load 212 - 214: 101(ivec2) VectorShuffle 213 213 0 1 - 215: 101(ivec2) GroupNonUniformIMul 34 Reduce 214 - 216: 102(ptr) AccessChain 27(data) 211 49 - 217: 21(ivec4) Load 216 - 218: 21(ivec4) VectorShuffle 217 215 4 5 2 3 - Store 216 218 - 219: 6(int) Load 8(invocation) - 220: 102(ptr) AccessChain 27(data) 49 49 - 221: 21(ivec4) Load 220 - 222: 111(ivec3) VectorShuffle 221 221 0 1 2 - 223: 111(ivec3) GroupNonUniformIMul 34 Reduce 222 - 224: 102(ptr) AccessChain 27(data) 219 49 - 225: 21(ivec4) Load 224 - 226: 21(ivec4) VectorShuffle 225 223 4 5 6 3 - Store 224 226 + 168: 146(ptr) AccessChain 27(data) 65 65 + 169: 23(f64vec4) Load 168 + 170: 23(f64vec4) GroupNonUniformFAdd 34 Reduce 169 + 171: 146(ptr) AccessChain 27(data) 167 65 + Store 171 170 + 172: 6(int) Load 8(invocation) + 173: 31(ptr) AccessChain 27(data) 29 29 30 + 174: 17(float) Load 173 + 175: 17(float) GroupNonUniformFMul 34 Reduce 174 + 176: 31(ptr) AccessChain 27(data) 172 29 30 + Store 176 175 + 177: 6(int) Load 8(invocation) + 178: 40(ptr) AccessChain 27(data) 38 29 + 179: 18(fvec4) Load 178 + 180: 39(fvec2) VectorShuffle 179 179 0 1 + 181: 39(fvec2) GroupNonUniformFMul 34 Reduce 180 + 182: 31(ptr) AccessChain 27(data) 177 29 30 + 183: 17(float) CompositeExtract 181 0 + Store 182 183 + 184: 31(ptr) AccessChain 27(data) 177 29 47 + 185: 17(float) CompositeExtract 181 1 + Store 184 185 + 186: 6(int) Load 8(invocation) + 187: 40(ptr) AccessChain 27(data) 51 29 + 188: 18(fvec4) Load 187 + 189: 52(fvec3) VectorShuffle 188 188 0 1 2 + 190: 52(fvec3) GroupNonUniformFMul 34 Reduce 189 + 191: 31(ptr) AccessChain 27(data) 186 29 30 + 192: 17(float) CompositeExtract 190 0 + Store 191 192 + 193: 31(ptr) AccessChain 27(data) 186 29 47 + 194: 17(float) CompositeExtract 190 1 + Store 193 194 + 195: 31(ptr) AccessChain 27(data) 186 29 61 + 196: 17(float) CompositeExtract 190 2 + Store 195 196 + 197: 6(int) Load 8(invocation) + 198: 40(ptr) AccessChain 27(data) 65 29 + 199: 18(fvec4) Load 198 + 200: 18(fvec4) GroupNonUniformFMul 34 Reduce 199 + 201: 40(ptr) AccessChain 27(data) 197 29 + Store 201 200 + 202: 6(int) Load 8(invocation) + 203: 71(ptr) AccessChain 27(data) 29 38 30 + 204: 19(int) Load 203 + 205: 19(int) GroupNonUniformIMul 34 Reduce 204 + 206: 71(ptr) AccessChain 27(data) 202 38 30 + Store 206 205 + 207: 6(int) Load 8(invocation) + 208: 78(ptr) AccessChain 27(data) 38 38 + 209: 20(ivec4) Load 208 + 210: 77(ivec2) VectorShuffle 209 209 0 1 + 211: 77(ivec2) GroupNonUniformIMul 34 Reduce 210 + 212: 71(ptr) AccessChain 27(data) 207 38 30 + 213: 19(int) CompositeExtract 211 0 + Store 212 213 + 214: 71(ptr) AccessChain 27(data) 207 38 47 + 215: 19(int) CompositeExtract 211 1 + Store 214 215 + 216: 6(int) Load 8(invocation) + 217: 78(ptr) AccessChain 27(data) 51 38 + 218: 20(ivec4) Load 217 + 219: 88(ivec3) VectorShuffle 218 218 0 1 2 + 220: 88(ivec3) GroupNonUniformIMul 34 Reduce 219 + 221: 71(ptr) AccessChain 27(data) 216 38 30 + 222: 19(int) CompositeExtract 220 0 + Store 221 222 + 223: 71(ptr) AccessChain 27(data) 216 38 47 + 224: 19(int) CompositeExtract 220 1 + Store 223 224 + 225: 71(ptr) AccessChain 27(data) 216 38 61 + 226: 19(int) CompositeExtract 220 2 + Store 225 226 227: 6(int) Load 8(invocation) - 228: 102(ptr) AccessChain 27(data) 59 49 - 229: 21(ivec4) Load 228 - 230: 21(ivec4) GroupNonUniformIMul 34 Reduce 229 - 231: 102(ptr) AccessChain 27(data) 227 49 + 228: 78(ptr) AccessChain 27(data) 65 38 + 229: 20(ivec4) Load 228 + 230: 20(ivec4) GroupNonUniformIMul 34 Reduce 229 + 231: 78(ptr) AccessChain 27(data) 227 38 Store 231 230 232: 6(int) Load 8(invocation) - 233: 125(ptr) AccessChain 27(data) 29 59 30 - 234:22(float64_t) Load 233 - 235:22(float64_t) GroupNonUniformFMul 34 Reduce 234 - 236: 125(ptr) AccessChain 27(data) 232 59 30 + 233: 105(ptr) AccessChain 27(data) 29 51 30 + 234: 6(int) Load 233 + 235: 6(int) GroupNonUniformIMul 34 Reduce 234 + 236: 105(ptr) AccessChain 27(data) 232 51 30 Store 236 235 237: 6(int) Load 8(invocation) - 238: 132(ptr) AccessChain 27(data) 38 59 - 239: 23(f64vec4) Load 238 - 240:131(f64vec2) VectorShuffle 239 239 0 1 - 241:131(f64vec2) GroupNonUniformFMul 34 Reduce 240 - 242: 132(ptr) AccessChain 27(data) 237 59 - 243: 23(f64vec4) Load 242 - 244: 23(f64vec4) VectorShuffle 243 241 4 5 2 3 - Store 242 244 - 245: 6(int) Load 8(invocation) - 246: 132(ptr) AccessChain 27(data) 49 59 - 247: 23(f64vec4) Load 246 - 248:141(f64vec3) VectorShuffle 247 247 0 1 2 - 249:141(f64vec3) GroupNonUniformFMul 34 Reduce 248 - 250: 132(ptr) AccessChain 27(data) 245 59 - 251: 23(f64vec4) Load 250 - 252: 23(f64vec4) VectorShuffle 251 249 4 5 6 3 - Store 250 252 - 253: 6(int) Load 8(invocation) - 254: 132(ptr) AccessChain 27(data) 59 59 - 255: 23(f64vec4) Load 254 - 256: 23(f64vec4) GroupNonUniformFMul 34 Reduce 255 - 257: 132(ptr) AccessChain 27(data) 253 59 - Store 257 256 - 258: 6(int) Load 8(invocation) - 259: 31(ptr) AccessChain 27(data) 29 29 30 - 260: 17(float) Load 259 - 261: 17(float) GroupNonUniformFMin 34 Reduce 260 - 262: 31(ptr) AccessChain 27(data) 258 29 30 - Store 262 261 - 263: 6(int) Load 8(invocation) - 264: 40(ptr) AccessChain 27(data) 38 29 - 265: 18(fvec4) Load 264 - 266: 39(fvec2) VectorShuffle 265 265 0 1 - 267: 39(fvec2) GroupNonUniformFMin 34 Reduce 266 - 268: 40(ptr) AccessChain 27(data) 263 29 - 269: 18(fvec4) Load 268 - 270: 18(fvec4) VectorShuffle 269 267 4 5 2 3 - Store 268 270 - 271: 6(int) Load 8(invocation) - 272: 40(ptr) AccessChain 27(data) 49 29 - 273: 18(fvec4) Load 272 - 274: 50(fvec3) VectorShuffle 273 273 0 1 2 - 275: 50(fvec3) GroupNonUniformFMin 34 Reduce 274 - 276: 40(ptr) AccessChain 27(data) 271 29 - 277: 18(fvec4) Load 276 - 278: 18(fvec4) VectorShuffle 277 275 4 5 6 3 - Store 276 278 - 279: 6(int) Load 8(invocation) - 280: 40(ptr) AccessChain 27(data) 59 29 - 281: 18(fvec4) Load 280 - 282: 18(fvec4) GroupNonUniformFMin 34 Reduce 281 - 283: 40(ptr) AccessChain 27(data) 279 29 - Store 283 282 - 284: 6(int) Load 8(invocation) - 285: 65(ptr) AccessChain 27(data) 29 38 30 - 286: 19(int) Load 285 - 287: 19(int) GroupNonUniformSMin 34 Reduce 286 - 288: 65(ptr) AccessChain 27(data) 284 38 30 - Store 288 287 - 289: 6(int) Load 8(invocation) - 290: 72(ptr) AccessChain 27(data) 38 38 - 291: 20(ivec4) Load 290 - 292: 71(ivec2) VectorShuffle 291 291 0 1 - 293: 71(ivec2) GroupNonUniformSMin 34 Reduce 292 - 294: 72(ptr) AccessChain 27(data) 289 38 - 295: 20(ivec4) Load 294 - 296: 20(ivec4) VectorShuffle 295 293 4 5 2 3 - Store 294 296 + 238: 112(ptr) AccessChain 27(data) 38 51 + 239: 21(ivec4) Load 238 + 240: 111(ivec2) VectorShuffle 239 239 0 1 + 241: 111(ivec2) GroupNonUniformIMul 34 Reduce 240 + 242: 105(ptr) AccessChain 27(data) 237 51 30 + 243: 6(int) CompositeExtract 241 0 + Store 242 243 + 244: 105(ptr) AccessChain 27(data) 237 51 47 + 245: 6(int) CompositeExtract 241 1 + Store 244 245 + 246: 6(int) Load 8(invocation) + 247: 112(ptr) AccessChain 27(data) 51 51 + 248: 21(ivec4) Load 247 + 249: 122(ivec3) VectorShuffle 248 248 0 1 2 + 250: 122(ivec3) GroupNonUniformIMul 34 Reduce 249 + 251: 105(ptr) AccessChain 27(data) 246 51 30 + 252: 6(int) CompositeExtract 250 0 + Store 251 252 + 253: 105(ptr) AccessChain 27(data) 246 51 47 + 254: 6(int) CompositeExtract 250 1 + Store 253 254 + 255: 105(ptr) AccessChain 27(data) 246 51 61 + 256: 6(int) CompositeExtract 250 2 + Store 255 256 + 257: 6(int) Load 8(invocation) + 258: 112(ptr) AccessChain 27(data) 65 51 + 259: 21(ivec4) Load 258 + 260: 21(ivec4) GroupNonUniformIMul 34 Reduce 259 + 261: 112(ptr) AccessChain 27(data) 257 51 + Store 261 260 + 262: 6(int) Load 8(invocation) + 263: 139(ptr) AccessChain 27(data) 29 65 30 + 264:22(float64_t) Load 263 + 265:22(float64_t) GroupNonUniformFMul 34 Reduce 264 + 266: 139(ptr) AccessChain 27(data) 262 65 30 + Store 266 265 + 267: 6(int) Load 8(invocation) + 268: 146(ptr) AccessChain 27(data) 38 65 + 269: 23(f64vec4) Load 268 + 270:145(f64vec2) VectorShuffle 269 269 0 1 + 271:145(f64vec2) GroupNonUniformFMul 34 Reduce 270 + 272: 139(ptr) AccessChain 27(data) 267 65 30 + 273:22(float64_t) CompositeExtract 271 0 + Store 272 273 + 274: 139(ptr) AccessChain 27(data) 267 65 47 + 275:22(float64_t) CompositeExtract 271 1 + Store 274 275 + 276: 6(int) Load 8(invocation) + 277: 146(ptr) AccessChain 27(data) 51 65 + 278: 23(f64vec4) Load 277 + 279:156(f64vec3) VectorShuffle 278 278 0 1 2 + 280:156(f64vec3) GroupNonUniformFMul 34 Reduce 279 + 281: 139(ptr) AccessChain 27(data) 276 65 30 + 282:22(float64_t) CompositeExtract 280 0 + Store 281 282 + 283: 139(ptr) AccessChain 27(data) 276 65 47 + 284:22(float64_t) CompositeExtract 280 1 + Store 283 284 + 285: 139(ptr) AccessChain 27(data) 276 65 61 + 286:22(float64_t) CompositeExtract 280 2 + Store 285 286 + 287: 6(int) Load 8(invocation) + 288: 146(ptr) AccessChain 27(data) 65 65 + 289: 23(f64vec4) Load 288 + 290: 23(f64vec4) GroupNonUniformFMul 34 Reduce 289 + 291: 146(ptr) AccessChain 27(data) 287 65 + Store 291 290 + 292: 6(int) Load 8(invocation) + 293: 31(ptr) AccessChain 27(data) 29 29 30 + 294: 17(float) Load 293 + 295: 17(float) GroupNonUniformFMin 34 Reduce 294 + 296: 31(ptr) AccessChain 27(data) 292 29 30 + Store 296 295 297: 6(int) Load 8(invocation) - 298: 72(ptr) AccessChain 27(data) 49 38 - 299: 20(ivec4) Load 298 - 300: 81(ivec3) VectorShuffle 299 299 0 1 2 - 301: 81(ivec3) GroupNonUniformSMin 34 Reduce 300 - 302: 72(ptr) AccessChain 27(data) 297 38 - 303: 20(ivec4) Load 302 - 304: 20(ivec4) VectorShuffle 303 301 4 5 6 3 - Store 302 304 - 305: 6(int) Load 8(invocation) - 306: 72(ptr) AccessChain 27(data) 59 38 - 307: 20(ivec4) Load 306 - 308: 20(ivec4) GroupNonUniformSMin 34 Reduce 307 - 309: 72(ptr) AccessChain 27(data) 305 38 - Store 309 308 - 310: 6(int) Load 8(invocation) - 311: 95(ptr) AccessChain 27(data) 29 49 30 - 312: 6(int) Load 311 - 313: 6(int) GroupNonUniformUMin 34 Reduce 312 - 314: 95(ptr) AccessChain 27(data) 310 49 30 - Store 314 313 - 315: 6(int) Load 8(invocation) - 316: 102(ptr) AccessChain 27(data) 38 49 - 317: 21(ivec4) Load 316 - 318: 101(ivec2) VectorShuffle 317 317 0 1 - 319: 101(ivec2) GroupNonUniformUMin 34 Reduce 318 - 320: 102(ptr) AccessChain 27(data) 315 49 - 321: 21(ivec4) Load 320 - 322: 21(ivec4) VectorShuffle 321 319 4 5 2 3 - Store 320 322 - 323: 6(int) Load 8(invocation) - 324: 102(ptr) AccessChain 27(data) 49 49 - 325: 21(ivec4) Load 324 - 326: 111(ivec3) VectorShuffle 325 325 0 1 2 - 327: 111(ivec3) GroupNonUniformUMin 34 Reduce 326 - 328: 102(ptr) AccessChain 27(data) 323 49 - 329: 21(ivec4) Load 328 - 330: 21(ivec4) VectorShuffle 329 327 4 5 6 3 - Store 328 330 - 331: 6(int) Load 8(invocation) - 332: 102(ptr) AccessChain 27(data) 59 49 - 333: 21(ivec4) Load 332 - 334: 21(ivec4) GroupNonUniformUMin 34 Reduce 333 - 335: 102(ptr) AccessChain 27(data) 331 49 - Store 335 334 + 298: 40(ptr) AccessChain 27(data) 38 29 + 299: 18(fvec4) Load 298 + 300: 39(fvec2) VectorShuffle 299 299 0 1 + 301: 39(fvec2) GroupNonUniformFMin 34 Reduce 300 + 302: 31(ptr) AccessChain 27(data) 297 29 30 + 303: 17(float) CompositeExtract 301 0 + Store 302 303 + 304: 31(ptr) AccessChain 27(data) 297 29 47 + 305: 17(float) CompositeExtract 301 1 + Store 304 305 + 306: 6(int) Load 8(invocation) + 307: 40(ptr) AccessChain 27(data) 51 29 + 308: 18(fvec4) Load 307 + 309: 52(fvec3) VectorShuffle 308 308 0 1 2 + 310: 52(fvec3) GroupNonUniformFMin 34 Reduce 309 + 311: 31(ptr) AccessChain 27(data) 306 29 30 + 312: 17(float) CompositeExtract 310 0 + Store 311 312 + 313: 31(ptr) AccessChain 27(data) 306 29 47 + 314: 17(float) CompositeExtract 310 1 + Store 313 314 + 315: 31(ptr) AccessChain 27(data) 306 29 61 + 316: 17(float) CompositeExtract 310 2 + Store 315 316 + 317: 6(int) Load 8(invocation) + 318: 40(ptr) AccessChain 27(data) 65 29 + 319: 18(fvec4) Load 318 + 320: 18(fvec4) GroupNonUniformFMin 34 Reduce 319 + 321: 40(ptr) AccessChain 27(data) 317 29 + Store 321 320 + 322: 6(int) Load 8(invocation) + 323: 71(ptr) AccessChain 27(data) 29 38 30 + 324: 19(int) Load 323 + 325: 19(int) GroupNonUniformSMin 34 Reduce 324 + 326: 71(ptr) AccessChain 27(data) 322 38 30 + Store 326 325 + 327: 6(int) Load 8(invocation) + 328: 78(ptr) AccessChain 27(data) 38 38 + 329: 20(ivec4) Load 328 + 330: 77(ivec2) VectorShuffle 329 329 0 1 + 331: 77(ivec2) GroupNonUniformSMin 34 Reduce 330 + 332: 71(ptr) AccessChain 27(data) 327 38 30 + 333: 19(int) CompositeExtract 331 0 + Store 332 333 + 334: 71(ptr) AccessChain 27(data) 327 38 47 + 335: 19(int) CompositeExtract 331 1 + Store 334 335 336: 6(int) Load 8(invocation) - 337: 125(ptr) AccessChain 27(data) 29 59 30 - 338:22(float64_t) Load 337 - 339:22(float64_t) GroupNonUniformFMin 34 Reduce 338 - 340: 125(ptr) AccessChain 27(data) 336 59 30 - Store 340 339 - 341: 6(int) Load 8(invocation) - 342: 132(ptr) AccessChain 27(data) 38 59 - 343: 23(f64vec4) Load 342 - 344:131(f64vec2) VectorShuffle 343 343 0 1 - 345:131(f64vec2) GroupNonUniformFMin 34 Reduce 344 - 346: 132(ptr) AccessChain 27(data) 341 59 - 347: 23(f64vec4) Load 346 - 348: 23(f64vec4) VectorShuffle 347 345 4 5 2 3 - Store 346 348 - 349: 6(int) Load 8(invocation) - 350: 132(ptr) AccessChain 27(data) 49 59 - 351: 23(f64vec4) Load 350 - 352:141(f64vec3) VectorShuffle 351 351 0 1 2 - 353:141(f64vec3) GroupNonUniformFMin 34 Reduce 352 - 354: 132(ptr) AccessChain 27(data) 349 59 - 355: 23(f64vec4) Load 354 - 356: 23(f64vec4) VectorShuffle 355 353 4 5 6 3 - Store 354 356 + 337: 78(ptr) AccessChain 27(data) 51 38 + 338: 20(ivec4) Load 337 + 339: 88(ivec3) VectorShuffle 338 338 0 1 2 + 340: 88(ivec3) GroupNonUniformSMin 34 Reduce 339 + 341: 71(ptr) AccessChain 27(data) 336 38 30 + 342: 19(int) CompositeExtract 340 0 + Store 341 342 + 343: 71(ptr) AccessChain 27(data) 336 38 47 + 344: 19(int) CompositeExtract 340 1 + Store 343 344 + 345: 71(ptr) AccessChain 27(data) 336 38 61 + 346: 19(int) CompositeExtract 340 2 + Store 345 346 + 347: 6(int) Load 8(invocation) + 348: 78(ptr) AccessChain 27(data) 65 38 + 349: 20(ivec4) Load 348 + 350: 20(ivec4) GroupNonUniformSMin 34 Reduce 349 + 351: 78(ptr) AccessChain 27(data) 347 38 + Store 351 350 + 352: 6(int) Load 8(invocation) + 353: 105(ptr) AccessChain 27(data) 29 51 30 + 354: 6(int) Load 353 + 355: 6(int) GroupNonUniformUMin 34 Reduce 354 + 356: 105(ptr) AccessChain 27(data) 352 51 30 + Store 356 355 357: 6(int) Load 8(invocation) - 358: 132(ptr) AccessChain 27(data) 59 59 - 359: 23(f64vec4) Load 358 - 360: 23(f64vec4) GroupNonUniformFMin 34 Reduce 359 - 361: 132(ptr) AccessChain 27(data) 357 59 - Store 361 360 - 362: 6(int) Load 8(invocation) - 363: 31(ptr) AccessChain 27(data) 29 29 30 - 364: 17(float) Load 363 - 365: 17(float) GroupNonUniformFMax 34 Reduce 364 - 366: 31(ptr) AccessChain 27(data) 362 29 30 - Store 366 365 - 367: 6(int) Load 8(invocation) - 368: 40(ptr) AccessChain 27(data) 38 29 - 369: 18(fvec4) Load 368 - 370: 39(fvec2) VectorShuffle 369 369 0 1 - 371: 39(fvec2) GroupNonUniformFMax 34 Reduce 370 - 372: 40(ptr) AccessChain 27(data) 367 29 - 373: 18(fvec4) Load 372 - 374: 18(fvec4) VectorShuffle 373 371 4 5 2 3 - Store 372 374 - 375: 6(int) Load 8(invocation) - 376: 40(ptr) AccessChain 27(data) 49 29 - 377: 18(fvec4) Load 376 - 378: 50(fvec3) VectorShuffle 377 377 0 1 2 - 379: 50(fvec3) GroupNonUniformFMax 34 Reduce 378 - 380: 40(ptr) AccessChain 27(data) 375 29 - 381: 18(fvec4) Load 380 - 382: 18(fvec4) VectorShuffle 381 379 4 5 6 3 - Store 380 382 - 383: 6(int) Load 8(invocation) - 384: 40(ptr) AccessChain 27(data) 59 29 - 385: 18(fvec4) Load 384 - 386: 18(fvec4) GroupNonUniformFMax 34 Reduce 385 - 387: 40(ptr) AccessChain 27(data) 383 29 - Store 387 386 - 388: 6(int) Load 8(invocation) - 389: 65(ptr) AccessChain 27(data) 29 38 30 - 390: 19(int) Load 389 - 391: 19(int) GroupNonUniformSMax 34 Reduce 390 - 392: 65(ptr) AccessChain 27(data) 388 38 30 - Store 392 391 - 393: 6(int) Load 8(invocation) - 394: 72(ptr) AccessChain 27(data) 38 38 - 395: 20(ivec4) Load 394 - 396: 71(ivec2) VectorShuffle 395 395 0 1 - 397: 71(ivec2) GroupNonUniformSMax 34 Reduce 396 - 398: 72(ptr) AccessChain 27(data) 393 38 - 399: 20(ivec4) Load 398 - 400: 20(ivec4) VectorShuffle 399 397 4 5 2 3 - Store 398 400 - 401: 6(int) Load 8(invocation) - 402: 72(ptr) AccessChain 27(data) 49 38 - 403: 20(ivec4) Load 402 - 404: 81(ivec3) VectorShuffle 403 403 0 1 2 - 405: 81(ivec3) GroupNonUniformSMax 34 Reduce 404 - 406: 72(ptr) AccessChain 27(data) 401 38 - 407: 20(ivec4) Load 406 - 408: 20(ivec4) VectorShuffle 407 405 4 5 6 3 - Store 406 408 - 409: 6(int) Load 8(invocation) - 410: 72(ptr) AccessChain 27(data) 59 38 - 411: 20(ivec4) Load 410 - 412: 20(ivec4) GroupNonUniformSMax 34 Reduce 411 - 413: 72(ptr) AccessChain 27(data) 409 38 - Store 413 412 - 414: 6(int) Load 8(invocation) - 415: 95(ptr) AccessChain 27(data) 29 49 30 - 416: 6(int) Load 415 - 417: 6(int) GroupNonUniformUMax 34 Reduce 416 - 418: 95(ptr) AccessChain 27(data) 414 49 30 - Store 418 417 - 419: 6(int) Load 8(invocation) - 420: 102(ptr) AccessChain 27(data) 38 49 - 421: 21(ivec4) Load 420 - 422: 101(ivec2) VectorShuffle 421 421 0 1 - 423: 101(ivec2) GroupNonUniformUMax 34 Reduce 422 - 424: 102(ptr) AccessChain 27(data) 419 49 - 425: 21(ivec4) Load 424 - 426: 21(ivec4) VectorShuffle 425 423 4 5 2 3 - Store 424 426 - 427: 6(int) Load 8(invocation) - 428: 102(ptr) AccessChain 27(data) 49 49 - 429: 21(ivec4) Load 428 - 430: 111(ivec3) VectorShuffle 429 429 0 1 2 - 431: 111(ivec3) GroupNonUniformUMax 34 Reduce 430 - 432: 102(ptr) AccessChain 27(data) 427 49 - 433: 21(ivec4) Load 432 - 434: 21(ivec4) VectorShuffle 433 431 4 5 6 3 - Store 432 434 - 435: 6(int) Load 8(invocation) - 436: 102(ptr) AccessChain 27(data) 59 49 - 437: 21(ivec4) Load 436 - 438: 21(ivec4) GroupNonUniformUMax 34 Reduce 437 - 439: 102(ptr) AccessChain 27(data) 435 49 - Store 439 438 - 440: 6(int) Load 8(invocation) - 441: 125(ptr) AccessChain 27(data) 29 59 30 - 442:22(float64_t) Load 441 - 443:22(float64_t) GroupNonUniformFMax 34 Reduce 442 - 444: 125(ptr) AccessChain 27(data) 440 59 30 - Store 444 443 - 445: 6(int) Load 8(invocation) - 446: 132(ptr) AccessChain 27(data) 38 59 - 447: 23(f64vec4) Load 446 - 448:131(f64vec2) VectorShuffle 447 447 0 1 - 449:131(f64vec2) GroupNonUniformFMax 34 Reduce 448 - 450: 132(ptr) AccessChain 27(data) 445 59 - 451: 23(f64vec4) Load 450 - 452: 23(f64vec4) VectorShuffle 451 449 4 5 2 3 - Store 450 452 - 453: 6(int) Load 8(invocation) - 454: 132(ptr) AccessChain 27(data) 49 59 - 455: 23(f64vec4) Load 454 - 456:141(f64vec3) VectorShuffle 455 455 0 1 2 - 457:141(f64vec3) GroupNonUniformFMax 34 Reduce 456 - 458: 132(ptr) AccessChain 27(data) 453 59 - 459: 23(f64vec4) Load 458 - 460: 23(f64vec4) VectorShuffle 459 457 4 5 6 3 - Store 458 460 - 461: 6(int) Load 8(invocation) - 462: 132(ptr) AccessChain 27(data) 59 59 - 463: 23(f64vec4) Load 462 - 464: 23(f64vec4) GroupNonUniformFMax 34 Reduce 463 - 465: 132(ptr) AccessChain 27(data) 461 59 - Store 465 464 - 466: 6(int) Load 8(invocation) - 467: 65(ptr) AccessChain 27(data) 29 38 30 - 468: 19(int) Load 467 - 469: 19(int) GroupNonUniformBitwiseAnd 34 Reduce 468 - 470: 65(ptr) AccessChain 27(data) 466 38 30 - Store 470 469 - 471: 6(int) Load 8(invocation) - 472: 72(ptr) AccessChain 27(data) 38 38 - 473: 20(ivec4) Load 472 - 474: 71(ivec2) VectorShuffle 473 473 0 1 - 475: 71(ivec2) GroupNonUniformBitwiseAnd 34 Reduce 474 - 476: 72(ptr) AccessChain 27(data) 471 38 - 477: 20(ivec4) Load 476 - 478: 20(ivec4) VectorShuffle 477 475 4 5 2 3 - Store 476 478 - 479: 6(int) Load 8(invocation) - 480: 72(ptr) AccessChain 27(data) 49 38 - 481: 20(ivec4) Load 480 - 482: 81(ivec3) VectorShuffle 481 481 0 1 2 - 483: 81(ivec3) GroupNonUniformBitwiseAnd 34 Reduce 482 - 484: 72(ptr) AccessChain 27(data) 479 38 - 485: 20(ivec4) Load 484 - 486: 20(ivec4) VectorShuffle 485 483 4 5 6 3 - Store 484 486 - 487: 6(int) Load 8(invocation) - 488: 72(ptr) AccessChain 27(data) 59 38 - 489: 20(ivec4) Load 488 - 490: 20(ivec4) GroupNonUniformBitwiseAnd 34 Reduce 489 - 491: 72(ptr) AccessChain 27(data) 487 38 - Store 491 490 - 492: 6(int) Load 8(invocation) - 493: 95(ptr) AccessChain 27(data) 29 49 30 - 494: 6(int) Load 493 - 495: 6(int) GroupNonUniformBitwiseAnd 34 Reduce 494 - 496: 95(ptr) AccessChain 27(data) 492 49 30 - Store 496 495 + 358: 112(ptr) AccessChain 27(data) 38 51 + 359: 21(ivec4) Load 358 + 360: 111(ivec2) VectorShuffle 359 359 0 1 + 361: 111(ivec2) GroupNonUniformUMin 34 Reduce 360 + 362: 105(ptr) AccessChain 27(data) 357 51 30 + 363: 6(int) CompositeExtract 361 0 + Store 362 363 + 364: 105(ptr) AccessChain 27(data) 357 51 47 + 365: 6(int) CompositeExtract 361 1 + Store 364 365 + 366: 6(int) Load 8(invocation) + 367: 112(ptr) AccessChain 27(data) 51 51 + 368: 21(ivec4) Load 367 + 369: 122(ivec3) VectorShuffle 368 368 0 1 2 + 370: 122(ivec3) GroupNonUniformUMin 34 Reduce 369 + 371: 105(ptr) AccessChain 27(data) 366 51 30 + 372: 6(int) CompositeExtract 370 0 + Store 371 372 + 373: 105(ptr) AccessChain 27(data) 366 51 47 + 374: 6(int) CompositeExtract 370 1 + Store 373 374 + 375: 105(ptr) AccessChain 27(data) 366 51 61 + 376: 6(int) CompositeExtract 370 2 + Store 375 376 + 377: 6(int) Load 8(invocation) + 378: 112(ptr) AccessChain 27(data) 65 51 + 379: 21(ivec4) Load 378 + 380: 21(ivec4) GroupNonUniformUMin 34 Reduce 379 + 381: 112(ptr) AccessChain 27(data) 377 51 + Store 381 380 + 382: 6(int) Load 8(invocation) + 383: 139(ptr) AccessChain 27(data) 29 65 30 + 384:22(float64_t) Load 383 + 385:22(float64_t) GroupNonUniformFMin 34 Reduce 384 + 386: 139(ptr) AccessChain 27(data) 382 65 30 + Store 386 385 + 387: 6(int) Load 8(invocation) + 388: 146(ptr) AccessChain 27(data) 38 65 + 389: 23(f64vec4) Load 388 + 390:145(f64vec2) VectorShuffle 389 389 0 1 + 391:145(f64vec2) GroupNonUniformFMin 34 Reduce 390 + 392: 139(ptr) AccessChain 27(data) 387 65 30 + 393:22(float64_t) CompositeExtract 391 0 + Store 392 393 + 394: 139(ptr) AccessChain 27(data) 387 65 47 + 395:22(float64_t) CompositeExtract 391 1 + Store 394 395 + 396: 6(int) Load 8(invocation) + 397: 146(ptr) AccessChain 27(data) 51 65 + 398: 23(f64vec4) Load 397 + 399:156(f64vec3) VectorShuffle 398 398 0 1 2 + 400:156(f64vec3) GroupNonUniformFMin 34 Reduce 399 + 401: 139(ptr) AccessChain 27(data) 396 65 30 + 402:22(float64_t) CompositeExtract 400 0 + Store 401 402 + 403: 139(ptr) AccessChain 27(data) 396 65 47 + 404:22(float64_t) CompositeExtract 400 1 + Store 403 404 + 405: 139(ptr) AccessChain 27(data) 396 65 61 + 406:22(float64_t) CompositeExtract 400 2 + Store 405 406 + 407: 6(int) Load 8(invocation) + 408: 146(ptr) AccessChain 27(data) 65 65 + 409: 23(f64vec4) Load 408 + 410: 23(f64vec4) GroupNonUniformFMin 34 Reduce 409 + 411: 146(ptr) AccessChain 27(data) 407 65 + Store 411 410 + 412: 6(int) Load 8(invocation) + 413: 31(ptr) AccessChain 27(data) 29 29 30 + 414: 17(float) Load 413 + 415: 17(float) GroupNonUniformFMax 34 Reduce 414 + 416: 31(ptr) AccessChain 27(data) 412 29 30 + Store 416 415 + 417: 6(int) Load 8(invocation) + 418: 40(ptr) AccessChain 27(data) 38 29 + 419: 18(fvec4) Load 418 + 420: 39(fvec2) VectorShuffle 419 419 0 1 + 421: 39(fvec2) GroupNonUniformFMax 34 Reduce 420 + 422: 31(ptr) AccessChain 27(data) 417 29 30 + 423: 17(float) CompositeExtract 421 0 + Store 422 423 + 424: 31(ptr) AccessChain 27(data) 417 29 47 + 425: 17(float) CompositeExtract 421 1 + Store 424 425 + 426: 6(int) Load 8(invocation) + 427: 40(ptr) AccessChain 27(data) 51 29 + 428: 18(fvec4) Load 427 + 429: 52(fvec3) VectorShuffle 428 428 0 1 2 + 430: 52(fvec3) GroupNonUniformFMax 34 Reduce 429 + 431: 31(ptr) AccessChain 27(data) 426 29 30 + 432: 17(float) CompositeExtract 430 0 + Store 431 432 + 433: 31(ptr) AccessChain 27(data) 426 29 47 + 434: 17(float) CompositeExtract 430 1 + Store 433 434 + 435: 31(ptr) AccessChain 27(data) 426 29 61 + 436: 17(float) CompositeExtract 430 2 + Store 435 436 + 437: 6(int) Load 8(invocation) + 438: 40(ptr) AccessChain 27(data) 65 29 + 439: 18(fvec4) Load 438 + 440: 18(fvec4) GroupNonUniformFMax 34 Reduce 439 + 441: 40(ptr) AccessChain 27(data) 437 29 + Store 441 440 + 442: 6(int) Load 8(invocation) + 443: 71(ptr) AccessChain 27(data) 29 38 30 + 444: 19(int) Load 443 + 445: 19(int) GroupNonUniformSMax 34 Reduce 444 + 446: 71(ptr) AccessChain 27(data) 442 38 30 + Store 446 445 + 447: 6(int) Load 8(invocation) + 448: 78(ptr) AccessChain 27(data) 38 38 + 449: 20(ivec4) Load 448 + 450: 77(ivec2) VectorShuffle 449 449 0 1 + 451: 77(ivec2) GroupNonUniformSMax 34 Reduce 450 + 452: 71(ptr) AccessChain 27(data) 447 38 30 + 453: 19(int) CompositeExtract 451 0 + Store 452 453 + 454: 71(ptr) AccessChain 27(data) 447 38 47 + 455: 19(int) CompositeExtract 451 1 + Store 454 455 + 456: 6(int) Load 8(invocation) + 457: 78(ptr) AccessChain 27(data) 51 38 + 458: 20(ivec4) Load 457 + 459: 88(ivec3) VectorShuffle 458 458 0 1 2 + 460: 88(ivec3) GroupNonUniformSMax 34 Reduce 459 + 461: 71(ptr) AccessChain 27(data) 456 38 30 + 462: 19(int) CompositeExtract 460 0 + Store 461 462 + 463: 71(ptr) AccessChain 27(data) 456 38 47 + 464: 19(int) CompositeExtract 460 1 + Store 463 464 + 465: 71(ptr) AccessChain 27(data) 456 38 61 + 466: 19(int) CompositeExtract 460 2 + Store 465 466 + 467: 6(int) Load 8(invocation) + 468: 78(ptr) AccessChain 27(data) 65 38 + 469: 20(ivec4) Load 468 + 470: 20(ivec4) GroupNonUniformSMax 34 Reduce 469 + 471: 78(ptr) AccessChain 27(data) 467 38 + Store 471 470 + 472: 6(int) Load 8(invocation) + 473: 105(ptr) AccessChain 27(data) 29 51 30 + 474: 6(int) Load 473 + 475: 6(int) GroupNonUniformUMax 34 Reduce 474 + 476: 105(ptr) AccessChain 27(data) 472 51 30 + Store 476 475 + 477: 6(int) Load 8(invocation) + 478: 112(ptr) AccessChain 27(data) 38 51 + 479: 21(ivec4) Load 478 + 480: 111(ivec2) VectorShuffle 479 479 0 1 + 481: 111(ivec2) GroupNonUniformUMax 34 Reduce 480 + 482: 105(ptr) AccessChain 27(data) 477 51 30 + 483: 6(int) CompositeExtract 481 0 + Store 482 483 + 484: 105(ptr) AccessChain 27(data) 477 51 47 + 485: 6(int) CompositeExtract 481 1 + Store 484 485 + 486: 6(int) Load 8(invocation) + 487: 112(ptr) AccessChain 27(data) 51 51 + 488: 21(ivec4) Load 487 + 489: 122(ivec3) VectorShuffle 488 488 0 1 2 + 490: 122(ivec3) GroupNonUniformUMax 34 Reduce 489 + 491: 105(ptr) AccessChain 27(data) 486 51 30 + 492: 6(int) CompositeExtract 490 0 + Store 491 492 + 493: 105(ptr) AccessChain 27(data) 486 51 47 + 494: 6(int) CompositeExtract 490 1 + Store 493 494 + 495: 105(ptr) AccessChain 27(data) 486 51 61 + 496: 6(int) CompositeExtract 490 2 + Store 495 496 497: 6(int) Load 8(invocation) - 498: 102(ptr) AccessChain 27(data) 38 49 + 498: 112(ptr) AccessChain 27(data) 65 51 499: 21(ivec4) Load 498 - 500: 101(ivec2) VectorShuffle 499 499 0 1 - 501: 101(ivec2) GroupNonUniformBitwiseAnd 34 Reduce 500 - 502: 102(ptr) AccessChain 27(data) 497 49 - 503: 21(ivec4) Load 502 - 504: 21(ivec4) VectorShuffle 503 501 4 5 2 3 - Store 502 504 - 505: 6(int) Load 8(invocation) - 506: 102(ptr) AccessChain 27(data) 49 49 - 507: 21(ivec4) Load 506 - 508: 111(ivec3) VectorShuffle 507 507 0 1 2 - 509: 111(ivec3) GroupNonUniformBitwiseAnd 34 Reduce 508 - 510: 102(ptr) AccessChain 27(data) 505 49 - 511: 21(ivec4) Load 510 - 512: 21(ivec4) VectorShuffle 511 509 4 5 6 3 - Store 510 512 - 513: 6(int) Load 8(invocation) - 514: 102(ptr) AccessChain 27(data) 59 49 - 515: 21(ivec4) Load 514 - 516: 21(ivec4) GroupNonUniformBitwiseAnd 34 Reduce 515 - 517: 102(ptr) AccessChain 27(data) 513 49 - Store 517 516 - 518: 6(int) Load 8(invocation) - 519: 65(ptr) AccessChain 27(data) 29 38 30 - 520: 19(int) Load 519 - 522: 521(bool) SLessThan 520 29 - 523: 521(bool) GroupNonUniformLogicalAnd 34 Reduce 522 - 524: 19(int) Select 523 38 29 - 525: 65(ptr) AccessChain 27(data) 518 38 30 - Store 525 524 - 526: 6(int) Load 8(invocation) - 527: 72(ptr) AccessChain 27(data) 38 38 - 528: 20(ivec4) Load 527 - 529: 71(ivec2) VectorShuffle 528 528 0 1 - 532: 531(bvec2) SLessThan 529 530 - 533: 531(bvec2) GroupNonUniformLogicalAnd 34 Reduce 532 - 535: 71(ivec2) Select 533 534 530 - 536: 72(ptr) AccessChain 27(data) 526 38 - 537: 20(ivec4) Load 536 - 538: 20(ivec4) VectorShuffle 537 535 4 5 2 3 - Store 536 538 - 539: 6(int) Load 8(invocation) - 540: 72(ptr) AccessChain 27(data) 38 38 - 541: 20(ivec4) Load 540 - 542: 81(ivec3) VectorShuffle 541 541 0 1 2 - 545: 544(bvec3) SLessThan 542 543 - 546: 544(bvec3) GroupNonUniformLogicalAnd 34 Reduce 545 - 548: 81(ivec3) Select 546 547 543 - 549: 72(ptr) AccessChain 27(data) 539 38 - 550: 20(ivec4) Load 549 - 551: 20(ivec4) VectorShuffle 550 548 4 5 6 3 - Store 549 551 - 552: 6(int) Load 8(invocation) - 553: 72(ptr) AccessChain 27(data) 38 38 - 554: 20(ivec4) Load 553 - 557: 556(bvec4) SLessThan 554 555 - 558: 556(bvec4) GroupNonUniformLogicalAnd 34 Reduce 557 - 560: 20(ivec4) Select 558 559 555 - 561: 72(ptr) AccessChain 27(data) 552 38 + 500: 21(ivec4) GroupNonUniformUMax 34 Reduce 499 + 501: 112(ptr) AccessChain 27(data) 497 51 + Store 501 500 + 502: 6(int) Load 8(invocation) + 503: 139(ptr) AccessChain 27(data) 29 65 30 + 504:22(float64_t) Load 503 + 505:22(float64_t) GroupNonUniformFMax 34 Reduce 504 + 506: 139(ptr) AccessChain 27(data) 502 65 30 + Store 506 505 + 507: 6(int) Load 8(invocation) + 508: 146(ptr) AccessChain 27(data) 38 65 + 509: 23(f64vec4) Load 508 + 510:145(f64vec2) VectorShuffle 509 509 0 1 + 511:145(f64vec2) GroupNonUniformFMax 34 Reduce 510 + 512: 139(ptr) AccessChain 27(data) 507 65 30 + 513:22(float64_t) CompositeExtract 511 0 + Store 512 513 + 514: 139(ptr) AccessChain 27(data) 507 65 47 + 515:22(float64_t) CompositeExtract 511 1 + Store 514 515 + 516: 6(int) Load 8(invocation) + 517: 146(ptr) AccessChain 27(data) 51 65 + 518: 23(f64vec4) Load 517 + 519:156(f64vec3) VectorShuffle 518 518 0 1 2 + 520:156(f64vec3) GroupNonUniformFMax 34 Reduce 519 + 521: 139(ptr) AccessChain 27(data) 516 65 30 + 522:22(float64_t) CompositeExtract 520 0 + Store 521 522 + 523: 139(ptr) AccessChain 27(data) 516 65 47 + 524:22(float64_t) CompositeExtract 520 1 + Store 523 524 + 525: 139(ptr) AccessChain 27(data) 516 65 61 + 526:22(float64_t) CompositeExtract 520 2 + Store 525 526 + 527: 6(int) Load 8(invocation) + 528: 146(ptr) AccessChain 27(data) 65 65 + 529: 23(f64vec4) Load 528 + 530: 23(f64vec4) GroupNonUniformFMax 34 Reduce 529 + 531: 146(ptr) AccessChain 27(data) 527 65 + Store 531 530 + 532: 6(int) Load 8(invocation) + 533: 71(ptr) AccessChain 27(data) 29 38 30 + 534: 19(int) Load 533 + 535: 19(int) GroupNonUniformBitwiseAnd 34 Reduce 534 + 536: 71(ptr) AccessChain 27(data) 532 38 30 + Store 536 535 + 537: 6(int) Load 8(invocation) + 538: 78(ptr) AccessChain 27(data) 38 38 + 539: 20(ivec4) Load 538 + 540: 77(ivec2) VectorShuffle 539 539 0 1 + 541: 77(ivec2) GroupNonUniformBitwiseAnd 34 Reduce 540 + 542: 71(ptr) AccessChain 27(data) 537 38 30 + 543: 19(int) CompositeExtract 541 0 + Store 542 543 + 544: 71(ptr) AccessChain 27(data) 537 38 47 + 545: 19(int) CompositeExtract 541 1 + Store 544 545 + 546: 6(int) Load 8(invocation) + 547: 78(ptr) AccessChain 27(data) 51 38 + 548: 20(ivec4) Load 547 + 549: 88(ivec3) VectorShuffle 548 548 0 1 2 + 550: 88(ivec3) GroupNonUniformBitwiseAnd 34 Reduce 549 + 551: 71(ptr) AccessChain 27(data) 546 38 30 + 552: 19(int) CompositeExtract 550 0 + Store 551 552 + 553: 71(ptr) AccessChain 27(data) 546 38 47 + 554: 19(int) CompositeExtract 550 1 + Store 553 554 + 555: 71(ptr) AccessChain 27(data) 546 38 61 + 556: 19(int) CompositeExtract 550 2 + Store 555 556 + 557: 6(int) Load 8(invocation) + 558: 78(ptr) AccessChain 27(data) 65 38 + 559: 20(ivec4) Load 558 + 560: 20(ivec4) GroupNonUniformBitwiseAnd 34 Reduce 559 + 561: 78(ptr) AccessChain 27(data) 557 38 Store 561 560 562: 6(int) Load 8(invocation) - 563: 65(ptr) AccessChain 27(data) 29 38 30 - 564: 19(int) Load 563 - 565: 19(int) GroupNonUniformBitwiseOr 34 Reduce 564 - 566: 65(ptr) AccessChain 27(data) 562 38 30 + 563: 105(ptr) AccessChain 27(data) 29 51 30 + 564: 6(int) Load 563 + 565: 6(int) GroupNonUniformBitwiseAnd 34 Reduce 564 + 566: 105(ptr) AccessChain 27(data) 562 51 30 Store 566 565 567: 6(int) Load 8(invocation) - 568: 72(ptr) AccessChain 27(data) 38 38 - 569: 20(ivec4) Load 568 - 570: 71(ivec2) VectorShuffle 569 569 0 1 - 571: 71(ivec2) GroupNonUniformBitwiseOr 34 Reduce 570 - 572: 72(ptr) AccessChain 27(data) 567 38 - 573: 20(ivec4) Load 572 - 574: 20(ivec4) VectorShuffle 573 571 4 5 2 3 - Store 572 574 - 575: 6(int) Load 8(invocation) - 576: 72(ptr) AccessChain 27(data) 49 38 - 577: 20(ivec4) Load 576 - 578: 81(ivec3) VectorShuffle 577 577 0 1 2 - 579: 81(ivec3) GroupNonUniformBitwiseOr 34 Reduce 578 - 580: 72(ptr) AccessChain 27(data) 575 38 - 581: 20(ivec4) Load 580 - 582: 20(ivec4) VectorShuffle 581 579 4 5 6 3 - Store 580 582 - 583: 6(int) Load 8(invocation) - 584: 72(ptr) AccessChain 27(data) 59 38 - 585: 20(ivec4) Load 584 - 586: 20(ivec4) GroupNonUniformBitwiseOr 34 Reduce 585 - 587: 72(ptr) AccessChain 27(data) 583 38 - Store 587 586 - 588: 6(int) Load 8(invocation) - 589: 95(ptr) AccessChain 27(data) 29 49 30 - 590: 6(int) Load 589 - 591: 6(int) GroupNonUniformBitwiseOr 34 Reduce 590 - 592: 95(ptr) AccessChain 27(data) 588 49 30 - Store 592 591 - 593: 6(int) Load 8(invocation) - 594: 102(ptr) AccessChain 27(data) 38 49 - 595: 21(ivec4) Load 594 - 596: 101(ivec2) VectorShuffle 595 595 0 1 - 597: 101(ivec2) GroupNonUniformBitwiseOr 34 Reduce 596 - 598: 102(ptr) AccessChain 27(data) 593 49 - 599: 21(ivec4) Load 598 - 600: 21(ivec4) VectorShuffle 599 597 4 5 2 3 - Store 598 600 - 601: 6(int) Load 8(invocation) - 602: 102(ptr) AccessChain 27(data) 49 49 - 603: 21(ivec4) Load 602 - 604: 111(ivec3) VectorShuffle 603 603 0 1 2 - 605: 111(ivec3) GroupNonUniformBitwiseOr 34 Reduce 604 - 606: 102(ptr) AccessChain 27(data) 601 49 - 607: 21(ivec4) Load 606 - 608: 21(ivec4) VectorShuffle 607 605 4 5 6 3 - Store 606 608 - 609: 6(int) Load 8(invocation) - 610: 102(ptr) AccessChain 27(data) 59 49 - 611: 21(ivec4) Load 610 - 612: 21(ivec4) GroupNonUniformBitwiseOr 34 Reduce 611 - 613: 102(ptr) AccessChain 27(data) 609 49 - Store 613 612 + 568: 112(ptr) AccessChain 27(data) 38 51 + 569: 21(ivec4) Load 568 + 570: 111(ivec2) VectorShuffle 569 569 0 1 + 571: 111(ivec2) GroupNonUniformBitwiseAnd 34 Reduce 570 + 572: 105(ptr) AccessChain 27(data) 567 51 30 + 573: 6(int) CompositeExtract 571 0 + Store 572 573 + 574: 105(ptr) AccessChain 27(data) 567 51 47 + 575: 6(int) CompositeExtract 571 1 + Store 574 575 + 576: 6(int) Load 8(invocation) + 577: 112(ptr) AccessChain 27(data) 51 51 + 578: 21(ivec4) Load 577 + 579: 122(ivec3) VectorShuffle 578 578 0 1 2 + 580: 122(ivec3) GroupNonUniformBitwiseAnd 34 Reduce 579 + 581: 105(ptr) AccessChain 27(data) 576 51 30 + 582: 6(int) CompositeExtract 580 0 + Store 581 582 + 583: 105(ptr) AccessChain 27(data) 576 51 47 + 584: 6(int) CompositeExtract 580 1 + Store 583 584 + 585: 105(ptr) AccessChain 27(data) 576 51 61 + 586: 6(int) CompositeExtract 580 2 + Store 585 586 + 587: 6(int) Load 8(invocation) + 588: 112(ptr) AccessChain 27(data) 65 51 + 589: 21(ivec4) Load 588 + 590: 21(ivec4) GroupNonUniformBitwiseAnd 34 Reduce 589 + 591: 112(ptr) AccessChain 27(data) 587 51 + Store 591 590 + 592: 6(int) Load 8(invocation) + 593: 71(ptr) AccessChain 27(data) 29 38 30 + 594: 19(int) Load 593 + 596: 595(bool) SLessThan 594 29 + 597: 595(bool) GroupNonUniformLogicalAnd 34 Reduce 596 + 598: 19(int) Select 597 38 29 + 599: 71(ptr) AccessChain 27(data) 592 38 30 + Store 599 598 + 600: 6(int) Load 8(invocation) + 601: 78(ptr) AccessChain 27(data) 38 38 + 602: 20(ivec4) Load 601 + 603: 77(ivec2) VectorShuffle 602 602 0 1 + 606: 605(bvec2) SLessThan 603 604 + 607: 605(bvec2) GroupNonUniformLogicalAnd 34 Reduce 606 + 609: 77(ivec2) Select 607 608 604 + 610: 71(ptr) AccessChain 27(data) 600 38 30 + 611: 19(int) CompositeExtract 609 0 + Store 610 611 + 612: 71(ptr) AccessChain 27(data) 600 38 47 + 613: 19(int) CompositeExtract 609 1 + Store 612 613 614: 6(int) Load 8(invocation) - 615: 65(ptr) AccessChain 27(data) 29 38 30 - 616: 19(int) Load 615 - 617: 521(bool) SLessThan 616 29 - 618: 521(bool) GroupNonUniformLogicalOr 34 Reduce 617 - 619: 19(int) Select 618 38 29 - 620: 65(ptr) AccessChain 27(data) 614 38 30 - Store 620 619 - 621: 6(int) Load 8(invocation) - 622: 72(ptr) AccessChain 27(data) 38 38 - 623: 20(ivec4) Load 622 - 624: 71(ivec2) VectorShuffle 623 623 0 1 - 625: 531(bvec2) SLessThan 624 530 - 626: 531(bvec2) GroupNonUniformLogicalOr 34 Reduce 625 - 627: 71(ivec2) Select 626 534 530 - 628: 72(ptr) AccessChain 27(data) 621 38 - 629: 20(ivec4) Load 628 - 630: 20(ivec4) VectorShuffle 629 627 4 5 2 3 - Store 628 630 - 631: 6(int) Load 8(invocation) - 632: 72(ptr) AccessChain 27(data) 38 38 - 633: 20(ivec4) Load 632 - 634: 81(ivec3) VectorShuffle 633 633 0 1 2 - 635: 544(bvec3) SLessThan 634 543 - 636: 544(bvec3) GroupNonUniformLogicalOr 34 Reduce 635 - 637: 81(ivec3) Select 636 547 543 - 638: 72(ptr) AccessChain 27(data) 631 38 - 639: 20(ivec4) Load 638 - 640: 20(ivec4) VectorShuffle 639 637 4 5 6 3 - Store 638 640 - 641: 6(int) Load 8(invocation) - 642: 72(ptr) AccessChain 27(data) 38 38 - 643: 20(ivec4) Load 642 - 644: 556(bvec4) SLessThan 643 555 - 645: 556(bvec4) GroupNonUniformLogicalOr 34 Reduce 644 - 646: 20(ivec4) Select 645 559 555 - 647: 72(ptr) AccessChain 27(data) 641 38 - Store 647 646 - 648: 6(int) Load 8(invocation) - 649: 65(ptr) AccessChain 27(data) 29 38 30 - 650: 19(int) Load 649 - 651: 19(int) GroupNonUniformBitwiseXor 34 Reduce 650 - 652: 65(ptr) AccessChain 27(data) 648 38 30 - Store 652 651 - 653: 6(int) Load 8(invocation) - 654: 72(ptr) AccessChain 27(data) 38 38 - 655: 20(ivec4) Load 654 - 656: 71(ivec2) VectorShuffle 655 655 0 1 - 657: 71(ivec2) GroupNonUniformBitwiseXor 34 Reduce 656 - 658: 72(ptr) AccessChain 27(data) 653 38 - 659: 20(ivec4) Load 658 - 660: 20(ivec4) VectorShuffle 659 657 4 5 2 3 - Store 658 660 - 661: 6(int) Load 8(invocation) - 662: 72(ptr) AccessChain 27(data) 49 38 - 663: 20(ivec4) Load 662 - 664: 81(ivec3) VectorShuffle 663 663 0 1 2 - 665: 81(ivec3) GroupNonUniformBitwiseXor 34 Reduce 664 - 666: 72(ptr) AccessChain 27(data) 661 38 + 615: 78(ptr) AccessChain 27(data) 38 38 + 616: 20(ivec4) Load 615 + 617: 88(ivec3) VectorShuffle 616 616 0 1 2 + 620: 619(bvec3) SLessThan 617 618 + 621: 619(bvec3) GroupNonUniformLogicalAnd 34 Reduce 620 + 623: 88(ivec3) Select 621 622 618 + 624: 71(ptr) AccessChain 27(data) 614 38 30 + 625: 19(int) CompositeExtract 623 0 + Store 624 625 + 626: 71(ptr) AccessChain 27(data) 614 38 47 + 627: 19(int) CompositeExtract 623 1 + Store 626 627 + 628: 71(ptr) AccessChain 27(data) 614 38 61 + 629: 19(int) CompositeExtract 623 2 + Store 628 629 + 630: 6(int) Load 8(invocation) + 631: 78(ptr) AccessChain 27(data) 38 38 + 632: 20(ivec4) Load 631 + 635: 634(bvec4) SLessThan 632 633 + 636: 634(bvec4) GroupNonUniformLogicalAnd 34 Reduce 635 + 638: 20(ivec4) Select 636 637 633 + 639: 78(ptr) AccessChain 27(data) 630 38 + Store 639 638 + 640: 6(int) Load 8(invocation) + 641: 71(ptr) AccessChain 27(data) 29 38 30 + 642: 19(int) Load 641 + 643: 19(int) GroupNonUniformBitwiseOr 34 Reduce 642 + 644: 71(ptr) AccessChain 27(data) 640 38 30 + Store 644 643 + 645: 6(int) Load 8(invocation) + 646: 78(ptr) AccessChain 27(data) 38 38 + 647: 20(ivec4) Load 646 + 648: 77(ivec2) VectorShuffle 647 647 0 1 + 649: 77(ivec2) GroupNonUniformBitwiseOr 34 Reduce 648 + 650: 71(ptr) AccessChain 27(data) 645 38 30 + 651: 19(int) CompositeExtract 649 0 + Store 650 651 + 652: 71(ptr) AccessChain 27(data) 645 38 47 + 653: 19(int) CompositeExtract 649 1 + Store 652 653 + 654: 6(int) Load 8(invocation) + 655: 78(ptr) AccessChain 27(data) 51 38 + 656: 20(ivec4) Load 655 + 657: 88(ivec3) VectorShuffle 656 656 0 1 2 + 658: 88(ivec3) GroupNonUniformBitwiseOr 34 Reduce 657 + 659: 71(ptr) AccessChain 27(data) 654 38 30 + 660: 19(int) CompositeExtract 658 0 + Store 659 660 + 661: 71(ptr) AccessChain 27(data) 654 38 47 + 662: 19(int) CompositeExtract 658 1 + Store 661 662 + 663: 71(ptr) AccessChain 27(data) 654 38 61 + 664: 19(int) CompositeExtract 658 2 + Store 663 664 + 665: 6(int) Load 8(invocation) + 666: 78(ptr) AccessChain 27(data) 65 38 667: 20(ivec4) Load 666 - 668: 20(ivec4) VectorShuffle 667 665 4 5 6 3 - Store 666 668 - 669: 6(int) Load 8(invocation) - 670: 72(ptr) AccessChain 27(data) 59 38 - 671: 20(ivec4) Load 670 - 672: 20(ivec4) GroupNonUniformBitwiseXor 34 Reduce 671 - 673: 72(ptr) AccessChain 27(data) 669 38 - Store 673 672 - 674: 6(int) Load 8(invocation) - 675: 95(ptr) AccessChain 27(data) 29 49 30 - 676: 6(int) Load 675 - 677: 6(int) GroupNonUniformBitwiseXor 34 Reduce 676 - 678: 95(ptr) AccessChain 27(data) 674 49 30 - Store 678 677 - 679: 6(int) Load 8(invocation) - 680: 102(ptr) AccessChain 27(data) 38 49 - 681: 21(ivec4) Load 680 - 682: 101(ivec2) VectorShuffle 681 681 0 1 - 683: 101(ivec2) GroupNonUniformBitwiseXor 34 Reduce 682 - 684: 102(ptr) AccessChain 27(data) 679 49 - 685: 21(ivec4) Load 684 - 686: 21(ivec4) VectorShuffle 685 683 4 5 2 3 - Store 684 686 - 687: 6(int) Load 8(invocation) - 688: 102(ptr) AccessChain 27(data) 49 49 - 689: 21(ivec4) Load 688 - 690: 111(ivec3) VectorShuffle 689 689 0 1 2 - 691: 111(ivec3) GroupNonUniformBitwiseXor 34 Reduce 690 - 692: 102(ptr) AccessChain 27(data) 687 49 - 693: 21(ivec4) Load 692 - 694: 21(ivec4) VectorShuffle 693 691 4 5 6 3 - Store 692 694 + 668: 20(ivec4) GroupNonUniformBitwiseOr 34 Reduce 667 + 669: 78(ptr) AccessChain 27(data) 665 38 + Store 669 668 + 670: 6(int) Load 8(invocation) + 671: 105(ptr) AccessChain 27(data) 29 51 30 + 672: 6(int) Load 671 + 673: 6(int) GroupNonUniformBitwiseOr 34 Reduce 672 + 674: 105(ptr) AccessChain 27(data) 670 51 30 + Store 674 673 + 675: 6(int) Load 8(invocation) + 676: 112(ptr) AccessChain 27(data) 38 51 + 677: 21(ivec4) Load 676 + 678: 111(ivec2) VectorShuffle 677 677 0 1 + 679: 111(ivec2) GroupNonUniformBitwiseOr 34 Reduce 678 + 680: 105(ptr) AccessChain 27(data) 675 51 30 + 681: 6(int) CompositeExtract 679 0 + Store 680 681 + 682: 105(ptr) AccessChain 27(data) 675 51 47 + 683: 6(int) CompositeExtract 679 1 + Store 682 683 + 684: 6(int) Load 8(invocation) + 685: 112(ptr) AccessChain 27(data) 51 51 + 686: 21(ivec4) Load 685 + 687: 122(ivec3) VectorShuffle 686 686 0 1 2 + 688: 122(ivec3) GroupNonUniformBitwiseOr 34 Reduce 687 + 689: 105(ptr) AccessChain 27(data) 684 51 30 + 690: 6(int) CompositeExtract 688 0 + Store 689 690 + 691: 105(ptr) AccessChain 27(data) 684 51 47 + 692: 6(int) CompositeExtract 688 1 + Store 691 692 + 693: 105(ptr) AccessChain 27(data) 684 51 61 + 694: 6(int) CompositeExtract 688 2 + Store 693 694 695: 6(int) Load 8(invocation) - 696: 102(ptr) AccessChain 27(data) 59 49 + 696: 112(ptr) AccessChain 27(data) 65 51 697: 21(ivec4) Load 696 - 698: 21(ivec4) GroupNonUniformBitwiseXor 34 Reduce 697 - 699: 102(ptr) AccessChain 27(data) 695 49 + 698: 21(ivec4) GroupNonUniformBitwiseOr 34 Reduce 697 + 699: 112(ptr) AccessChain 27(data) 695 51 Store 699 698 700: 6(int) Load 8(invocation) - 701: 65(ptr) AccessChain 27(data) 29 38 30 + 701: 71(ptr) AccessChain 27(data) 29 38 30 702: 19(int) Load 701 - 703: 521(bool) SLessThan 702 29 - 704: 521(bool) GroupNonUniformLogicalXor 34 Reduce 703 + 703: 595(bool) SLessThan 702 29 + 704: 595(bool) GroupNonUniformLogicalOr 34 Reduce 703 705: 19(int) Select 704 38 29 - 706: 65(ptr) AccessChain 27(data) 700 38 30 + 706: 71(ptr) AccessChain 27(data) 700 38 30 Store 706 705 707: 6(int) Load 8(invocation) - 708: 72(ptr) AccessChain 27(data) 38 38 + 708: 78(ptr) AccessChain 27(data) 38 38 709: 20(ivec4) Load 708 - 710: 71(ivec2) VectorShuffle 709 709 0 1 - 711: 531(bvec2) SLessThan 710 530 - 712: 531(bvec2) GroupNonUniformLogicalXor 34 Reduce 711 - 713: 71(ivec2) Select 712 534 530 - 714: 72(ptr) AccessChain 27(data) 707 38 - 715: 20(ivec4) Load 714 - 716: 20(ivec4) VectorShuffle 715 713 4 5 2 3 - Store 714 716 - 717: 6(int) Load 8(invocation) - 718: 72(ptr) AccessChain 27(data) 38 38 - 719: 20(ivec4) Load 718 - 720: 81(ivec3) VectorShuffle 719 719 0 1 2 - 721: 544(bvec3) SLessThan 720 543 - 722: 544(bvec3) GroupNonUniformLogicalXor 34 Reduce 721 - 723: 81(ivec3) Select 722 547 543 - 724: 72(ptr) AccessChain 27(data) 717 38 - 725: 20(ivec4) Load 724 - 726: 20(ivec4) VectorShuffle 725 723 4 5 6 3 - Store 724 726 - 727: 6(int) Load 8(invocation) - 728: 72(ptr) AccessChain 27(data) 38 38 - 729: 20(ivec4) Load 728 - 730: 556(bvec4) SLessThan 729 555 - 731: 556(bvec4) GroupNonUniformLogicalXor 34 Reduce 730 - 732: 20(ivec4) Select 731 559 555 - 733: 72(ptr) AccessChain 27(data) 727 38 - Store 733 732 - 734: 6(int) Load 8(invocation) - 735: 31(ptr) AccessChain 27(data) 29 29 30 - 736: 17(float) Load 735 - 737: 17(float) GroupNonUniformFAdd 34 InclusiveScan 736 - 738: 31(ptr) AccessChain 27(data) 734 29 30 - Store 738 737 - 739: 6(int) Load 8(invocation) - 740: 40(ptr) AccessChain 27(data) 38 29 - 741: 18(fvec4) Load 740 - 742: 39(fvec2) VectorShuffle 741 741 0 1 - 743: 39(fvec2) GroupNonUniformFAdd 34 InclusiveScan 742 - 744: 40(ptr) AccessChain 27(data) 739 29 - 745: 18(fvec4) Load 744 - 746: 18(fvec4) VectorShuffle 745 743 4 5 2 3 - Store 744 746 - 747: 6(int) Load 8(invocation) - 748: 40(ptr) AccessChain 27(data) 49 29 - 749: 18(fvec4) Load 748 - 750: 50(fvec3) VectorShuffle 749 749 0 1 2 - 751: 50(fvec3) GroupNonUniformFAdd 34 InclusiveScan 750 - 752: 40(ptr) AccessChain 27(data) 747 29 - 753: 18(fvec4) Load 752 - 754: 18(fvec4) VectorShuffle 753 751 4 5 6 3 - Store 752 754 - 755: 6(int) Load 8(invocation) - 756: 40(ptr) AccessChain 27(data) 59 29 - 757: 18(fvec4) Load 756 - 758: 18(fvec4) GroupNonUniformFAdd 34 InclusiveScan 757 - 759: 40(ptr) AccessChain 27(data) 755 29 - Store 759 758 - 760: 6(int) Load 8(invocation) - 761: 65(ptr) AccessChain 27(data) 29 38 30 - 762: 19(int) Load 761 - 763: 19(int) GroupNonUniformIAdd 34 InclusiveScan 762 - 764: 65(ptr) AccessChain 27(data) 760 38 30 - Store 764 763 - 765: 6(int) Load 8(invocation) - 766: 72(ptr) AccessChain 27(data) 38 38 - 767: 20(ivec4) Load 766 - 768: 71(ivec2) VectorShuffle 767 767 0 1 - 769: 71(ivec2) GroupNonUniformIAdd 34 InclusiveScan 768 - 770: 72(ptr) AccessChain 27(data) 765 38 - 771: 20(ivec4) Load 770 - 772: 20(ivec4) VectorShuffle 771 769 4 5 2 3 - Store 770 772 + 710: 77(ivec2) VectorShuffle 709 709 0 1 + 711: 605(bvec2) SLessThan 710 604 + 712: 605(bvec2) GroupNonUniformLogicalOr 34 Reduce 711 + 713: 77(ivec2) Select 712 608 604 + 714: 71(ptr) AccessChain 27(data) 707 38 30 + 715: 19(int) CompositeExtract 713 0 + Store 714 715 + 716: 71(ptr) AccessChain 27(data) 707 38 47 + 717: 19(int) CompositeExtract 713 1 + Store 716 717 + 718: 6(int) Load 8(invocation) + 719: 78(ptr) AccessChain 27(data) 38 38 + 720: 20(ivec4) Load 719 + 721: 88(ivec3) VectorShuffle 720 720 0 1 2 + 722: 619(bvec3) SLessThan 721 618 + 723: 619(bvec3) GroupNonUniformLogicalOr 34 Reduce 722 + 724: 88(ivec3) Select 723 622 618 + 725: 71(ptr) AccessChain 27(data) 718 38 30 + 726: 19(int) CompositeExtract 724 0 + Store 725 726 + 727: 71(ptr) AccessChain 27(data) 718 38 47 + 728: 19(int) CompositeExtract 724 1 + Store 727 728 + 729: 71(ptr) AccessChain 27(data) 718 38 61 + 730: 19(int) CompositeExtract 724 2 + Store 729 730 + 731: 6(int) Load 8(invocation) + 732: 78(ptr) AccessChain 27(data) 38 38 + 733: 20(ivec4) Load 732 + 734: 634(bvec4) SLessThan 733 633 + 735: 634(bvec4) GroupNonUniformLogicalOr 34 Reduce 734 + 736: 20(ivec4) Select 735 637 633 + 737: 78(ptr) AccessChain 27(data) 731 38 + Store 737 736 + 738: 6(int) Load 8(invocation) + 739: 71(ptr) AccessChain 27(data) 29 38 30 + 740: 19(int) Load 739 + 741: 19(int) GroupNonUniformBitwiseXor 34 Reduce 740 + 742: 71(ptr) AccessChain 27(data) 738 38 30 + Store 742 741 + 743: 6(int) Load 8(invocation) + 744: 78(ptr) AccessChain 27(data) 38 38 + 745: 20(ivec4) Load 744 + 746: 77(ivec2) VectorShuffle 745 745 0 1 + 747: 77(ivec2) GroupNonUniformBitwiseXor 34 Reduce 746 + 748: 71(ptr) AccessChain 27(data) 743 38 30 + 749: 19(int) CompositeExtract 747 0 + Store 748 749 + 750: 71(ptr) AccessChain 27(data) 743 38 47 + 751: 19(int) CompositeExtract 747 1 + Store 750 751 + 752: 6(int) Load 8(invocation) + 753: 78(ptr) AccessChain 27(data) 51 38 + 754: 20(ivec4) Load 753 + 755: 88(ivec3) VectorShuffle 754 754 0 1 2 + 756: 88(ivec3) GroupNonUniformBitwiseXor 34 Reduce 755 + 757: 71(ptr) AccessChain 27(data) 752 38 30 + 758: 19(int) CompositeExtract 756 0 + Store 757 758 + 759: 71(ptr) AccessChain 27(data) 752 38 47 + 760: 19(int) CompositeExtract 756 1 + Store 759 760 + 761: 71(ptr) AccessChain 27(data) 752 38 61 + 762: 19(int) CompositeExtract 756 2 + Store 761 762 + 763: 6(int) Load 8(invocation) + 764: 78(ptr) AccessChain 27(data) 65 38 + 765: 20(ivec4) Load 764 + 766: 20(ivec4) GroupNonUniformBitwiseXor 34 Reduce 765 + 767: 78(ptr) AccessChain 27(data) 763 38 + Store 767 766 + 768: 6(int) Load 8(invocation) + 769: 105(ptr) AccessChain 27(data) 29 51 30 + 770: 6(int) Load 769 + 771: 6(int) GroupNonUniformBitwiseXor 34 Reduce 770 + 772: 105(ptr) AccessChain 27(data) 768 51 30 + Store 772 771 773: 6(int) Load 8(invocation) - 774: 72(ptr) AccessChain 27(data) 49 38 - 775: 20(ivec4) Load 774 - 776: 81(ivec3) VectorShuffle 775 775 0 1 2 - 777: 81(ivec3) GroupNonUniformIAdd 34 InclusiveScan 776 - 778: 72(ptr) AccessChain 27(data) 773 38 - 779: 20(ivec4) Load 778 - 780: 20(ivec4) VectorShuffle 779 777 4 5 6 3 - Store 778 780 - 781: 6(int) Load 8(invocation) - 782: 72(ptr) AccessChain 27(data) 59 38 - 783: 20(ivec4) Load 782 - 784: 20(ivec4) GroupNonUniformIAdd 34 InclusiveScan 783 - 785: 72(ptr) AccessChain 27(data) 781 38 - Store 785 784 - 786: 6(int) Load 8(invocation) - 787: 95(ptr) AccessChain 27(data) 29 49 30 - 788: 6(int) Load 787 - 789: 6(int) GroupNonUniformIAdd 34 InclusiveScan 788 - 790: 95(ptr) AccessChain 27(data) 786 49 30 - Store 790 789 - 791: 6(int) Load 8(invocation) - 792: 102(ptr) AccessChain 27(data) 38 49 - 793: 21(ivec4) Load 792 - 794: 101(ivec2) VectorShuffle 793 793 0 1 - 795: 101(ivec2) GroupNonUniformIAdd 34 InclusiveScan 794 - 796: 102(ptr) AccessChain 27(data) 791 49 - 797: 21(ivec4) Load 796 - 798: 21(ivec4) VectorShuffle 797 795 4 5 2 3 - Store 796 798 - 799: 6(int) Load 8(invocation) - 800: 102(ptr) AccessChain 27(data) 49 49 - 801: 21(ivec4) Load 800 - 802: 111(ivec3) VectorShuffle 801 801 0 1 2 - 803: 111(ivec3) GroupNonUniformIAdd 34 InclusiveScan 802 - 804: 102(ptr) AccessChain 27(data) 799 49 - 805: 21(ivec4) Load 804 - 806: 21(ivec4) VectorShuffle 805 803 4 5 6 3 - Store 804 806 - 807: 6(int) Load 8(invocation) - 808: 102(ptr) AccessChain 27(data) 59 49 - 809: 21(ivec4) Load 808 - 810: 21(ivec4) GroupNonUniformIAdd 34 InclusiveScan 809 - 811: 102(ptr) AccessChain 27(data) 807 49 - Store 811 810 - 812: 6(int) Load 8(invocation) - 813: 125(ptr) AccessChain 27(data) 29 59 30 - 814:22(float64_t) Load 813 - 815:22(float64_t) GroupNonUniformFAdd 34 InclusiveScan 814 - 816: 125(ptr) AccessChain 27(data) 812 59 30 - Store 816 815 - 817: 6(int) Load 8(invocation) - 818: 132(ptr) AccessChain 27(data) 38 59 - 819: 23(f64vec4) Load 818 - 820:131(f64vec2) VectorShuffle 819 819 0 1 - 821:131(f64vec2) GroupNonUniformFAdd 34 InclusiveScan 820 - 822: 132(ptr) AccessChain 27(data) 817 59 - 823: 23(f64vec4) Load 822 - 824: 23(f64vec4) VectorShuffle 823 821 4 5 2 3 - Store 822 824 - 825: 6(int) Load 8(invocation) - 826: 132(ptr) AccessChain 27(data) 49 59 - 827: 23(f64vec4) Load 826 - 828:141(f64vec3) VectorShuffle 827 827 0 1 2 - 829:141(f64vec3) GroupNonUniformFAdd 34 InclusiveScan 828 - 830: 132(ptr) AccessChain 27(data) 825 59 - 831: 23(f64vec4) Load 830 - 832: 23(f64vec4) VectorShuffle 831 829 4 5 6 3 - Store 830 832 - 833: 6(int) Load 8(invocation) - 834: 132(ptr) AccessChain 27(data) 59 59 - 835: 23(f64vec4) Load 834 - 836: 23(f64vec4) GroupNonUniformFAdd 34 InclusiveScan 835 - 837: 132(ptr) AccessChain 27(data) 833 59 - Store 837 836 - 838: 6(int) Load 8(invocation) - 839: 31(ptr) AccessChain 27(data) 29 29 30 - 840: 17(float) Load 839 - 841: 17(float) GroupNonUniformFMul 34 InclusiveScan 840 - 842: 31(ptr) AccessChain 27(data) 838 29 30 - Store 842 841 - 843: 6(int) Load 8(invocation) - 844: 40(ptr) AccessChain 27(data) 38 29 - 845: 18(fvec4) Load 844 - 846: 39(fvec2) VectorShuffle 845 845 0 1 - 847: 39(fvec2) GroupNonUniformFMul 34 InclusiveScan 846 - 848: 40(ptr) AccessChain 27(data) 843 29 - 849: 18(fvec4) Load 848 - 850: 18(fvec4) VectorShuffle 849 847 4 5 2 3 - Store 848 850 - 851: 6(int) Load 8(invocation) - 852: 40(ptr) AccessChain 27(data) 49 29 - 853: 18(fvec4) Load 852 - 854: 50(fvec3) VectorShuffle 853 853 0 1 2 - 855: 50(fvec3) GroupNonUniformFMul 34 InclusiveScan 854 - 856: 40(ptr) AccessChain 27(data) 851 29 - 857: 18(fvec4) Load 856 - 858: 18(fvec4) VectorShuffle 857 855 4 5 6 3 - Store 856 858 - 859: 6(int) Load 8(invocation) - 860: 40(ptr) AccessChain 27(data) 59 29 - 861: 18(fvec4) Load 860 - 862: 18(fvec4) GroupNonUniformFMul 34 InclusiveScan 861 - 863: 40(ptr) AccessChain 27(data) 859 29 - Store 863 862 - 864: 6(int) Load 8(invocation) - 865: 65(ptr) AccessChain 27(data) 29 38 30 - 866: 19(int) Load 865 - 867: 19(int) GroupNonUniformIMul 34 InclusiveScan 866 - 868: 65(ptr) AccessChain 27(data) 864 38 30 - Store 868 867 - 869: 6(int) Load 8(invocation) - 870: 72(ptr) AccessChain 27(data) 38 38 - 871: 20(ivec4) Load 870 - 872: 71(ivec2) VectorShuffle 871 871 0 1 - 873: 71(ivec2) GroupNonUniformIMul 34 InclusiveScan 872 - 874: 72(ptr) AccessChain 27(data) 869 38 - 875: 20(ivec4) Load 874 - 876: 20(ivec4) VectorShuffle 875 873 4 5 2 3 - Store 874 876 - 877: 6(int) Load 8(invocation) - 878: 72(ptr) AccessChain 27(data) 49 38 - 879: 20(ivec4) Load 878 - 880: 81(ivec3) VectorShuffle 879 879 0 1 2 - 881: 81(ivec3) GroupNonUniformIMul 34 InclusiveScan 880 - 882: 72(ptr) AccessChain 27(data) 877 38 - 883: 20(ivec4) Load 882 - 884: 20(ivec4) VectorShuffle 883 881 4 5 6 3 - Store 882 884 - 885: 6(int) Load 8(invocation) - 886: 72(ptr) AccessChain 27(data) 59 38 - 887: 20(ivec4) Load 886 - 888: 20(ivec4) GroupNonUniformIMul 34 InclusiveScan 887 - 889: 72(ptr) AccessChain 27(data) 885 38 - Store 889 888 - 890: 6(int) Load 8(invocation) - 891: 95(ptr) AccessChain 27(data) 29 49 30 - 892: 6(int) Load 891 - 893: 6(int) GroupNonUniformIMul 34 InclusiveScan 892 - 894: 95(ptr) AccessChain 27(data) 890 49 30 - Store 894 893 - 895: 6(int) Load 8(invocation) - 896: 102(ptr) AccessChain 27(data) 38 49 - 897: 21(ivec4) Load 896 - 898: 101(ivec2) VectorShuffle 897 897 0 1 - 899: 101(ivec2) GroupNonUniformIMul 34 InclusiveScan 898 - 900: 102(ptr) AccessChain 27(data) 895 49 - 901: 21(ivec4) Load 900 - 902: 21(ivec4) VectorShuffle 901 899 4 5 2 3 - Store 900 902 - 903: 6(int) Load 8(invocation) - 904: 102(ptr) AccessChain 27(data) 49 49 - 905: 21(ivec4) Load 904 - 906: 111(ivec3) VectorShuffle 905 905 0 1 2 - 907: 111(ivec3) GroupNonUniformIMul 34 InclusiveScan 906 - 908: 102(ptr) AccessChain 27(data) 903 49 - 909: 21(ivec4) Load 908 - 910: 21(ivec4) VectorShuffle 909 907 4 5 6 3 - Store 908 910 - 911: 6(int) Load 8(invocation) - 912: 102(ptr) AccessChain 27(data) 59 49 - 913: 21(ivec4) Load 912 - 914: 21(ivec4) GroupNonUniformIMul 34 InclusiveScan 913 - 915: 102(ptr) AccessChain 27(data) 911 49 - Store 915 914 - 916: 6(int) Load 8(invocation) - 917: 125(ptr) AccessChain 27(data) 29 59 30 - 918:22(float64_t) Load 917 - 919:22(float64_t) GroupNonUniformFMul 34 InclusiveScan 918 - 920: 125(ptr) AccessChain 27(data) 916 59 30 - Store 920 919 + 774: 112(ptr) AccessChain 27(data) 38 51 + 775: 21(ivec4) Load 774 + 776: 111(ivec2) VectorShuffle 775 775 0 1 + 777: 111(ivec2) GroupNonUniformBitwiseXor 34 Reduce 776 + 778: 105(ptr) AccessChain 27(data) 773 51 30 + 779: 6(int) CompositeExtract 777 0 + Store 778 779 + 780: 105(ptr) AccessChain 27(data) 773 51 47 + 781: 6(int) CompositeExtract 777 1 + Store 780 781 + 782: 6(int) Load 8(invocation) + 783: 112(ptr) AccessChain 27(data) 51 51 + 784: 21(ivec4) Load 783 + 785: 122(ivec3) VectorShuffle 784 784 0 1 2 + 786: 122(ivec3) GroupNonUniformBitwiseXor 34 Reduce 785 + 787: 105(ptr) AccessChain 27(data) 782 51 30 + 788: 6(int) CompositeExtract 786 0 + Store 787 788 + 789: 105(ptr) AccessChain 27(data) 782 51 47 + 790: 6(int) CompositeExtract 786 1 + Store 789 790 + 791: 105(ptr) AccessChain 27(data) 782 51 61 + 792: 6(int) CompositeExtract 786 2 + Store 791 792 + 793: 6(int) Load 8(invocation) + 794: 112(ptr) AccessChain 27(data) 65 51 + 795: 21(ivec4) Load 794 + 796: 21(ivec4) GroupNonUniformBitwiseXor 34 Reduce 795 + 797: 112(ptr) AccessChain 27(data) 793 51 + Store 797 796 + 798: 6(int) Load 8(invocation) + 799: 71(ptr) AccessChain 27(data) 29 38 30 + 800: 19(int) Load 799 + 801: 595(bool) SLessThan 800 29 + 802: 595(bool) GroupNonUniformLogicalXor 34 Reduce 801 + 803: 19(int) Select 802 38 29 + 804: 71(ptr) AccessChain 27(data) 798 38 30 + Store 804 803 + 805: 6(int) Load 8(invocation) + 806: 78(ptr) AccessChain 27(data) 38 38 + 807: 20(ivec4) Load 806 + 808: 77(ivec2) VectorShuffle 807 807 0 1 + 809: 605(bvec2) SLessThan 808 604 + 810: 605(bvec2) GroupNonUniformLogicalXor 34 Reduce 809 + 811: 77(ivec2) Select 810 608 604 + 812: 71(ptr) AccessChain 27(data) 805 38 30 + 813: 19(int) CompositeExtract 811 0 + Store 812 813 + 814: 71(ptr) AccessChain 27(data) 805 38 47 + 815: 19(int) CompositeExtract 811 1 + Store 814 815 + 816: 6(int) Load 8(invocation) + 817: 78(ptr) AccessChain 27(data) 38 38 + 818: 20(ivec4) Load 817 + 819: 88(ivec3) VectorShuffle 818 818 0 1 2 + 820: 619(bvec3) SLessThan 819 618 + 821: 619(bvec3) GroupNonUniformLogicalXor 34 Reduce 820 + 822: 88(ivec3) Select 821 622 618 + 823: 71(ptr) AccessChain 27(data) 816 38 30 + 824: 19(int) CompositeExtract 822 0 + Store 823 824 + 825: 71(ptr) AccessChain 27(data) 816 38 47 + 826: 19(int) CompositeExtract 822 1 + Store 825 826 + 827: 71(ptr) AccessChain 27(data) 816 38 61 + 828: 19(int) CompositeExtract 822 2 + Store 827 828 + 829: 6(int) Load 8(invocation) + 830: 78(ptr) AccessChain 27(data) 38 38 + 831: 20(ivec4) Load 830 + 832: 634(bvec4) SLessThan 831 633 + 833: 634(bvec4) GroupNonUniformLogicalXor 34 Reduce 832 + 834: 20(ivec4) Select 833 637 633 + 835: 78(ptr) AccessChain 27(data) 829 38 + Store 835 834 + 836: 6(int) Load 8(invocation) + 837: 31(ptr) AccessChain 27(data) 29 29 30 + 838: 17(float) Load 837 + 839: 17(float) GroupNonUniformFAdd 34 InclusiveScan 838 + 840: 31(ptr) AccessChain 27(data) 836 29 30 + Store 840 839 + 841: 6(int) Load 8(invocation) + 842: 40(ptr) AccessChain 27(data) 38 29 + 843: 18(fvec4) Load 842 + 844: 39(fvec2) VectorShuffle 843 843 0 1 + 845: 39(fvec2) GroupNonUniformFAdd 34 InclusiveScan 844 + 846: 31(ptr) AccessChain 27(data) 841 29 30 + 847: 17(float) CompositeExtract 845 0 + Store 846 847 + 848: 31(ptr) AccessChain 27(data) 841 29 47 + 849: 17(float) CompositeExtract 845 1 + Store 848 849 + 850: 6(int) Load 8(invocation) + 851: 40(ptr) AccessChain 27(data) 51 29 + 852: 18(fvec4) Load 851 + 853: 52(fvec3) VectorShuffle 852 852 0 1 2 + 854: 52(fvec3) GroupNonUniformFAdd 34 InclusiveScan 853 + 855: 31(ptr) AccessChain 27(data) 850 29 30 + 856: 17(float) CompositeExtract 854 0 + Store 855 856 + 857: 31(ptr) AccessChain 27(data) 850 29 47 + 858: 17(float) CompositeExtract 854 1 + Store 857 858 + 859: 31(ptr) AccessChain 27(data) 850 29 61 + 860: 17(float) CompositeExtract 854 2 + Store 859 860 + 861: 6(int) Load 8(invocation) + 862: 40(ptr) AccessChain 27(data) 65 29 + 863: 18(fvec4) Load 862 + 864: 18(fvec4) GroupNonUniformFAdd 34 InclusiveScan 863 + 865: 40(ptr) AccessChain 27(data) 861 29 + Store 865 864 + 866: 6(int) Load 8(invocation) + 867: 71(ptr) AccessChain 27(data) 29 38 30 + 868: 19(int) Load 867 + 869: 19(int) GroupNonUniformIAdd 34 InclusiveScan 868 + 870: 71(ptr) AccessChain 27(data) 866 38 30 + Store 870 869 + 871: 6(int) Load 8(invocation) + 872: 78(ptr) AccessChain 27(data) 38 38 + 873: 20(ivec4) Load 872 + 874: 77(ivec2) VectorShuffle 873 873 0 1 + 875: 77(ivec2) GroupNonUniformIAdd 34 InclusiveScan 874 + 876: 71(ptr) AccessChain 27(data) 871 38 30 + 877: 19(int) CompositeExtract 875 0 + Store 876 877 + 878: 71(ptr) AccessChain 27(data) 871 38 47 + 879: 19(int) CompositeExtract 875 1 + Store 878 879 + 880: 6(int) Load 8(invocation) + 881: 78(ptr) AccessChain 27(data) 51 38 + 882: 20(ivec4) Load 881 + 883: 88(ivec3) VectorShuffle 882 882 0 1 2 + 884: 88(ivec3) GroupNonUniformIAdd 34 InclusiveScan 883 + 885: 71(ptr) AccessChain 27(data) 880 38 30 + 886: 19(int) CompositeExtract 884 0 + Store 885 886 + 887: 71(ptr) AccessChain 27(data) 880 38 47 + 888: 19(int) CompositeExtract 884 1 + Store 887 888 + 889: 71(ptr) AccessChain 27(data) 880 38 61 + 890: 19(int) CompositeExtract 884 2 + Store 889 890 + 891: 6(int) Load 8(invocation) + 892: 78(ptr) AccessChain 27(data) 65 38 + 893: 20(ivec4) Load 892 + 894: 20(ivec4) GroupNonUniformIAdd 34 InclusiveScan 893 + 895: 78(ptr) AccessChain 27(data) 891 38 + Store 895 894 + 896: 6(int) Load 8(invocation) + 897: 105(ptr) AccessChain 27(data) 29 51 30 + 898: 6(int) Load 897 + 899: 6(int) GroupNonUniformIAdd 34 InclusiveScan 898 + 900: 105(ptr) AccessChain 27(data) 896 51 30 + Store 900 899 + 901: 6(int) Load 8(invocation) + 902: 112(ptr) AccessChain 27(data) 38 51 + 903: 21(ivec4) Load 902 + 904: 111(ivec2) VectorShuffle 903 903 0 1 + 905: 111(ivec2) GroupNonUniformIAdd 34 InclusiveScan 904 + 906: 105(ptr) AccessChain 27(data) 901 51 30 + 907: 6(int) CompositeExtract 905 0 + Store 906 907 + 908: 105(ptr) AccessChain 27(data) 901 51 47 + 909: 6(int) CompositeExtract 905 1 + Store 908 909 + 910: 6(int) Load 8(invocation) + 911: 112(ptr) AccessChain 27(data) 51 51 + 912: 21(ivec4) Load 911 + 913: 122(ivec3) VectorShuffle 912 912 0 1 2 + 914: 122(ivec3) GroupNonUniformIAdd 34 InclusiveScan 913 + 915: 105(ptr) AccessChain 27(data) 910 51 30 + 916: 6(int) CompositeExtract 914 0 + Store 915 916 + 917: 105(ptr) AccessChain 27(data) 910 51 47 + 918: 6(int) CompositeExtract 914 1 + Store 917 918 + 919: 105(ptr) AccessChain 27(data) 910 51 61 + 920: 6(int) CompositeExtract 914 2 + Store 919 920 921: 6(int) Load 8(invocation) - 922: 132(ptr) AccessChain 27(data) 38 59 - 923: 23(f64vec4) Load 922 - 924:131(f64vec2) VectorShuffle 923 923 0 1 - 925:131(f64vec2) GroupNonUniformFMul 34 InclusiveScan 924 - 926: 132(ptr) AccessChain 27(data) 921 59 - 927: 23(f64vec4) Load 926 - 928: 23(f64vec4) VectorShuffle 927 925 4 5 2 3 - Store 926 928 - 929: 6(int) Load 8(invocation) - 930: 132(ptr) AccessChain 27(data) 49 59 - 931: 23(f64vec4) Load 930 - 932:141(f64vec3) VectorShuffle 931 931 0 1 2 - 933:141(f64vec3) GroupNonUniformFMul 34 InclusiveScan 932 - 934: 132(ptr) AccessChain 27(data) 929 59 - 935: 23(f64vec4) Load 934 - 936: 23(f64vec4) VectorShuffle 935 933 4 5 6 3 - Store 934 936 - 937: 6(int) Load 8(invocation) - 938: 132(ptr) AccessChain 27(data) 59 59 - 939: 23(f64vec4) Load 938 - 940: 23(f64vec4) GroupNonUniformFMul 34 InclusiveScan 939 - 941: 132(ptr) AccessChain 27(data) 937 59 - Store 941 940 - 942: 6(int) Load 8(invocation) - 943: 31(ptr) AccessChain 27(data) 29 29 30 - 944: 17(float) Load 943 - 945: 17(float) GroupNonUniformFMin 34 InclusiveScan 944 - 946: 31(ptr) AccessChain 27(data) 942 29 30 - Store 946 945 - 947: 6(int) Load 8(invocation) - 948: 40(ptr) AccessChain 27(data) 38 29 - 949: 18(fvec4) Load 948 - 950: 39(fvec2) VectorShuffle 949 949 0 1 - 951: 39(fvec2) GroupNonUniformFMin 34 InclusiveScan 950 - 952: 40(ptr) AccessChain 27(data) 947 29 - 953: 18(fvec4) Load 952 - 954: 18(fvec4) VectorShuffle 953 951 4 5 2 3 - Store 952 954 - 955: 6(int) Load 8(invocation) - 956: 40(ptr) AccessChain 27(data) 49 29 - 957: 18(fvec4) Load 956 - 958: 50(fvec3) VectorShuffle 957 957 0 1 2 - 959: 50(fvec3) GroupNonUniformFMin 34 InclusiveScan 958 - 960: 40(ptr) AccessChain 27(data) 955 29 - 961: 18(fvec4) Load 960 - 962: 18(fvec4) VectorShuffle 961 959 4 5 6 3 - Store 960 962 - 963: 6(int) Load 8(invocation) - 964: 40(ptr) AccessChain 27(data) 59 29 - 965: 18(fvec4) Load 964 - 966: 18(fvec4) GroupNonUniformFMin 34 InclusiveScan 965 - 967: 40(ptr) AccessChain 27(data) 963 29 - Store 967 966 - 968: 6(int) Load 8(invocation) - 969: 65(ptr) AccessChain 27(data) 29 38 30 - 970: 19(int) Load 969 - 971: 19(int) GroupNonUniformSMin 34 InclusiveScan 970 - 972: 65(ptr) AccessChain 27(data) 968 38 30 - Store 972 971 - 973: 6(int) Load 8(invocation) - 974: 72(ptr) AccessChain 27(data) 38 38 - 975: 20(ivec4) Load 974 - 976: 71(ivec2) VectorShuffle 975 975 0 1 - 977: 71(ivec2) GroupNonUniformSMin 34 InclusiveScan 976 - 978: 72(ptr) AccessChain 27(data) 973 38 - 979: 20(ivec4) Load 978 - 980: 20(ivec4) VectorShuffle 979 977 4 5 2 3 - Store 978 980 + 922: 112(ptr) AccessChain 27(data) 65 51 + 923: 21(ivec4) Load 922 + 924: 21(ivec4) GroupNonUniformIAdd 34 InclusiveScan 923 + 925: 112(ptr) AccessChain 27(data) 921 51 + Store 925 924 + 926: 6(int) Load 8(invocation) + 927: 139(ptr) AccessChain 27(data) 29 65 30 + 928:22(float64_t) Load 927 + 929:22(float64_t) GroupNonUniformFAdd 34 InclusiveScan 928 + 930: 139(ptr) AccessChain 27(data) 926 65 30 + Store 930 929 + 931: 6(int) Load 8(invocation) + 932: 146(ptr) AccessChain 27(data) 38 65 + 933: 23(f64vec4) Load 932 + 934:145(f64vec2) VectorShuffle 933 933 0 1 + 935:145(f64vec2) GroupNonUniformFAdd 34 InclusiveScan 934 + 936: 139(ptr) AccessChain 27(data) 931 65 30 + 937:22(float64_t) CompositeExtract 935 0 + Store 936 937 + 938: 139(ptr) AccessChain 27(data) 931 65 47 + 939:22(float64_t) CompositeExtract 935 1 + Store 938 939 + 940: 6(int) Load 8(invocation) + 941: 146(ptr) AccessChain 27(data) 51 65 + 942: 23(f64vec4) Load 941 + 943:156(f64vec3) VectorShuffle 942 942 0 1 2 + 944:156(f64vec3) GroupNonUniformFAdd 34 InclusiveScan 943 + 945: 139(ptr) AccessChain 27(data) 940 65 30 + 946:22(float64_t) CompositeExtract 944 0 + Store 945 946 + 947: 139(ptr) AccessChain 27(data) 940 65 47 + 948:22(float64_t) CompositeExtract 944 1 + Store 947 948 + 949: 139(ptr) AccessChain 27(data) 940 65 61 + 950:22(float64_t) CompositeExtract 944 2 + Store 949 950 + 951: 6(int) Load 8(invocation) + 952: 146(ptr) AccessChain 27(data) 65 65 + 953: 23(f64vec4) Load 952 + 954: 23(f64vec4) GroupNonUniformFAdd 34 InclusiveScan 953 + 955: 146(ptr) AccessChain 27(data) 951 65 + Store 955 954 + 956: 6(int) Load 8(invocation) + 957: 31(ptr) AccessChain 27(data) 29 29 30 + 958: 17(float) Load 957 + 959: 17(float) GroupNonUniformFMul 34 InclusiveScan 958 + 960: 31(ptr) AccessChain 27(data) 956 29 30 + Store 960 959 + 961: 6(int) Load 8(invocation) + 962: 40(ptr) AccessChain 27(data) 38 29 + 963: 18(fvec4) Load 962 + 964: 39(fvec2) VectorShuffle 963 963 0 1 + 965: 39(fvec2) GroupNonUniformFMul 34 InclusiveScan 964 + 966: 31(ptr) AccessChain 27(data) 961 29 30 + 967: 17(float) CompositeExtract 965 0 + Store 966 967 + 968: 31(ptr) AccessChain 27(data) 961 29 47 + 969: 17(float) CompositeExtract 965 1 + Store 968 969 + 970: 6(int) Load 8(invocation) + 971: 40(ptr) AccessChain 27(data) 51 29 + 972: 18(fvec4) Load 971 + 973: 52(fvec3) VectorShuffle 972 972 0 1 2 + 974: 52(fvec3) GroupNonUniformFMul 34 InclusiveScan 973 + 975: 31(ptr) AccessChain 27(data) 970 29 30 + 976: 17(float) CompositeExtract 974 0 + Store 975 976 + 977: 31(ptr) AccessChain 27(data) 970 29 47 + 978: 17(float) CompositeExtract 974 1 + Store 977 978 + 979: 31(ptr) AccessChain 27(data) 970 29 61 + 980: 17(float) CompositeExtract 974 2 + Store 979 980 981: 6(int) Load 8(invocation) - 982: 72(ptr) AccessChain 27(data) 49 38 - 983: 20(ivec4) Load 982 - 984: 81(ivec3) VectorShuffle 983 983 0 1 2 - 985: 81(ivec3) GroupNonUniformSMin 34 InclusiveScan 984 - 986: 72(ptr) AccessChain 27(data) 981 38 - 987: 20(ivec4) Load 986 - 988: 20(ivec4) VectorShuffle 987 985 4 5 6 3 - Store 986 988 - 989: 6(int) Load 8(invocation) - 990: 72(ptr) AccessChain 27(data) 59 38 - 991: 20(ivec4) Load 990 - 992: 20(ivec4) GroupNonUniformSMin 34 InclusiveScan 991 - 993: 72(ptr) AccessChain 27(data) 989 38 - Store 993 992 - 994: 6(int) Load 8(invocation) - 995: 95(ptr) AccessChain 27(data) 29 49 30 - 996: 6(int) Load 995 - 997: 6(int) GroupNonUniformUMin 34 InclusiveScan 996 - 998: 95(ptr) AccessChain 27(data) 994 49 30 - Store 998 997 - 999: 6(int) Load 8(invocation) - 1000: 102(ptr) AccessChain 27(data) 38 49 - 1001: 21(ivec4) Load 1000 - 1002: 101(ivec2) VectorShuffle 1001 1001 0 1 - 1003: 101(ivec2) GroupNonUniformUMin 34 InclusiveScan 1002 - 1004: 102(ptr) AccessChain 27(data) 999 49 - 1005: 21(ivec4) Load 1004 - 1006: 21(ivec4) VectorShuffle 1005 1003 4 5 2 3 - Store 1004 1006 - 1007: 6(int) Load 8(invocation) - 1008: 102(ptr) AccessChain 27(data) 49 49 - 1009: 21(ivec4) Load 1008 - 1010: 111(ivec3) VectorShuffle 1009 1009 0 1 2 - 1011: 111(ivec3) GroupNonUniformUMin 34 InclusiveScan 1010 - 1012: 102(ptr) AccessChain 27(data) 1007 49 - 1013: 21(ivec4) Load 1012 - 1014: 21(ivec4) VectorShuffle 1013 1011 4 5 6 3 - Store 1012 1014 - 1015: 6(int) Load 8(invocation) - 1016: 102(ptr) AccessChain 27(data) 59 49 - 1017: 21(ivec4) Load 1016 - 1018: 21(ivec4) GroupNonUniformUMin 34 InclusiveScan 1017 - 1019: 102(ptr) AccessChain 27(data) 1015 49 - Store 1019 1018 - 1020: 6(int) Load 8(invocation) - 1021: 125(ptr) AccessChain 27(data) 29 59 30 - 1022:22(float64_t) Load 1021 - 1023:22(float64_t) GroupNonUniformFMin 34 InclusiveScan 1022 - 1024: 125(ptr) AccessChain 27(data) 1020 59 30 - Store 1024 1023 - 1025: 6(int) Load 8(invocation) - 1026: 132(ptr) AccessChain 27(data) 38 59 - 1027: 23(f64vec4) Load 1026 - 1028:131(f64vec2) VectorShuffle 1027 1027 0 1 - 1029:131(f64vec2) GroupNonUniformFMin 34 InclusiveScan 1028 - 1030: 132(ptr) AccessChain 27(data) 1025 59 - 1031: 23(f64vec4) Load 1030 - 1032: 23(f64vec4) VectorShuffle 1031 1029 4 5 2 3 - Store 1030 1032 - 1033: 6(int) Load 8(invocation) - 1034: 132(ptr) AccessChain 27(data) 49 59 - 1035: 23(f64vec4) Load 1034 - 1036:141(f64vec3) VectorShuffle 1035 1035 0 1 2 - 1037:141(f64vec3) GroupNonUniformFMin 34 InclusiveScan 1036 - 1038: 132(ptr) AccessChain 27(data) 1033 59 - 1039: 23(f64vec4) Load 1038 - 1040: 23(f64vec4) VectorShuffle 1039 1037 4 5 6 3 - Store 1038 1040 + 982: 40(ptr) AccessChain 27(data) 65 29 + 983: 18(fvec4) Load 982 + 984: 18(fvec4) GroupNonUniformFMul 34 InclusiveScan 983 + 985: 40(ptr) AccessChain 27(data) 981 29 + Store 985 984 + 986: 6(int) Load 8(invocation) + 987: 71(ptr) AccessChain 27(data) 29 38 30 + 988: 19(int) Load 987 + 989: 19(int) GroupNonUniformIMul 34 InclusiveScan 988 + 990: 71(ptr) AccessChain 27(data) 986 38 30 + Store 990 989 + 991: 6(int) Load 8(invocation) + 992: 78(ptr) AccessChain 27(data) 38 38 + 993: 20(ivec4) Load 992 + 994: 77(ivec2) VectorShuffle 993 993 0 1 + 995: 77(ivec2) GroupNonUniformIMul 34 InclusiveScan 994 + 996: 71(ptr) AccessChain 27(data) 991 38 30 + 997: 19(int) CompositeExtract 995 0 + Store 996 997 + 998: 71(ptr) AccessChain 27(data) 991 38 47 + 999: 19(int) CompositeExtract 995 1 + Store 998 999 + 1000: 6(int) Load 8(invocation) + 1001: 78(ptr) AccessChain 27(data) 51 38 + 1002: 20(ivec4) Load 1001 + 1003: 88(ivec3) VectorShuffle 1002 1002 0 1 2 + 1004: 88(ivec3) GroupNonUniformIMul 34 InclusiveScan 1003 + 1005: 71(ptr) AccessChain 27(data) 1000 38 30 + 1006: 19(int) CompositeExtract 1004 0 + Store 1005 1006 + 1007: 71(ptr) AccessChain 27(data) 1000 38 47 + 1008: 19(int) CompositeExtract 1004 1 + Store 1007 1008 + 1009: 71(ptr) AccessChain 27(data) 1000 38 61 + 1010: 19(int) CompositeExtract 1004 2 + Store 1009 1010 + 1011: 6(int) Load 8(invocation) + 1012: 78(ptr) AccessChain 27(data) 65 38 + 1013: 20(ivec4) Load 1012 + 1014: 20(ivec4) GroupNonUniformIMul 34 InclusiveScan 1013 + 1015: 78(ptr) AccessChain 27(data) 1011 38 + Store 1015 1014 + 1016: 6(int) Load 8(invocation) + 1017: 105(ptr) AccessChain 27(data) 29 51 30 + 1018: 6(int) Load 1017 + 1019: 6(int) GroupNonUniformIMul 34 InclusiveScan 1018 + 1020: 105(ptr) AccessChain 27(data) 1016 51 30 + Store 1020 1019 + 1021: 6(int) Load 8(invocation) + 1022: 112(ptr) AccessChain 27(data) 38 51 + 1023: 21(ivec4) Load 1022 + 1024: 111(ivec2) VectorShuffle 1023 1023 0 1 + 1025: 111(ivec2) GroupNonUniformIMul 34 InclusiveScan 1024 + 1026: 105(ptr) AccessChain 27(data) 1021 51 30 + 1027: 6(int) CompositeExtract 1025 0 + Store 1026 1027 + 1028: 105(ptr) AccessChain 27(data) 1021 51 47 + 1029: 6(int) CompositeExtract 1025 1 + Store 1028 1029 + 1030: 6(int) Load 8(invocation) + 1031: 112(ptr) AccessChain 27(data) 51 51 + 1032: 21(ivec4) Load 1031 + 1033: 122(ivec3) VectorShuffle 1032 1032 0 1 2 + 1034: 122(ivec3) GroupNonUniformIMul 34 InclusiveScan 1033 + 1035: 105(ptr) AccessChain 27(data) 1030 51 30 + 1036: 6(int) CompositeExtract 1034 0 + Store 1035 1036 + 1037: 105(ptr) AccessChain 27(data) 1030 51 47 + 1038: 6(int) CompositeExtract 1034 1 + Store 1037 1038 + 1039: 105(ptr) AccessChain 27(data) 1030 51 61 + 1040: 6(int) CompositeExtract 1034 2 + Store 1039 1040 1041: 6(int) Load 8(invocation) - 1042: 132(ptr) AccessChain 27(data) 59 59 - 1043: 23(f64vec4) Load 1042 - 1044: 23(f64vec4) GroupNonUniformFMin 34 InclusiveScan 1043 - 1045: 132(ptr) AccessChain 27(data) 1041 59 + 1042: 112(ptr) AccessChain 27(data) 65 51 + 1043: 21(ivec4) Load 1042 + 1044: 21(ivec4) GroupNonUniformIMul 34 InclusiveScan 1043 + 1045: 112(ptr) AccessChain 27(data) 1041 51 Store 1045 1044 1046: 6(int) Load 8(invocation) - 1047: 31(ptr) AccessChain 27(data) 29 29 30 - 1048: 17(float) Load 1047 - 1049: 17(float) GroupNonUniformFMax 34 InclusiveScan 1048 - 1050: 31(ptr) AccessChain 27(data) 1046 29 30 + 1047: 139(ptr) AccessChain 27(data) 29 65 30 + 1048:22(float64_t) Load 1047 + 1049:22(float64_t) GroupNonUniformFMul 34 InclusiveScan 1048 + 1050: 139(ptr) AccessChain 27(data) 1046 65 30 Store 1050 1049 1051: 6(int) Load 8(invocation) - 1052: 40(ptr) AccessChain 27(data) 38 29 - 1053: 18(fvec4) Load 1052 - 1054: 39(fvec2) VectorShuffle 1053 1053 0 1 - 1055: 39(fvec2) GroupNonUniformFMax 34 InclusiveScan 1054 - 1056: 40(ptr) AccessChain 27(data) 1051 29 - 1057: 18(fvec4) Load 1056 - 1058: 18(fvec4) VectorShuffle 1057 1055 4 5 2 3 - Store 1056 1058 - 1059: 6(int) Load 8(invocation) - 1060: 40(ptr) AccessChain 27(data) 49 29 - 1061: 18(fvec4) Load 1060 - 1062: 50(fvec3) VectorShuffle 1061 1061 0 1 2 - 1063: 50(fvec3) GroupNonUniformFMax 34 InclusiveScan 1062 - 1064: 40(ptr) AccessChain 27(data) 1059 29 - 1065: 18(fvec4) Load 1064 - 1066: 18(fvec4) VectorShuffle 1065 1063 4 5 6 3 - Store 1064 1066 - 1067: 6(int) Load 8(invocation) - 1068: 40(ptr) AccessChain 27(data) 59 29 - 1069: 18(fvec4) Load 1068 - 1070: 18(fvec4) GroupNonUniformFMax 34 InclusiveScan 1069 - 1071: 40(ptr) AccessChain 27(data) 1067 29 - Store 1071 1070 - 1072: 6(int) Load 8(invocation) - 1073: 65(ptr) AccessChain 27(data) 29 38 30 - 1074: 19(int) Load 1073 - 1075: 19(int) GroupNonUniformSMax 34 InclusiveScan 1074 - 1076: 65(ptr) AccessChain 27(data) 1072 38 30 - Store 1076 1075 - 1077: 6(int) Load 8(invocation) - 1078: 72(ptr) AccessChain 27(data) 38 38 - 1079: 20(ivec4) Load 1078 - 1080: 71(ivec2) VectorShuffle 1079 1079 0 1 - 1081: 71(ivec2) GroupNonUniformSMax 34 InclusiveScan 1080 - 1082: 72(ptr) AccessChain 27(data) 1077 38 - 1083: 20(ivec4) Load 1082 - 1084: 20(ivec4) VectorShuffle 1083 1081 4 5 2 3 - Store 1082 1084 - 1085: 6(int) Load 8(invocation) - 1086: 72(ptr) AccessChain 27(data) 49 38 - 1087: 20(ivec4) Load 1086 - 1088: 81(ivec3) VectorShuffle 1087 1087 0 1 2 - 1089: 81(ivec3) GroupNonUniformSMax 34 InclusiveScan 1088 - 1090: 72(ptr) AccessChain 27(data) 1085 38 - 1091: 20(ivec4) Load 1090 - 1092: 20(ivec4) VectorShuffle 1091 1089 4 5 6 3 - Store 1090 1092 - 1093: 6(int) Load 8(invocation) - 1094: 72(ptr) AccessChain 27(data) 59 38 - 1095: 20(ivec4) Load 1094 - 1096: 20(ivec4) GroupNonUniformSMax 34 InclusiveScan 1095 - 1097: 72(ptr) AccessChain 27(data) 1093 38 - Store 1097 1096 - 1098: 6(int) Load 8(invocation) - 1099: 95(ptr) AccessChain 27(data) 29 49 30 - 1100: 6(int) Load 1099 - 1101: 6(int) GroupNonUniformUMax 34 InclusiveScan 1100 - 1102: 95(ptr) AccessChain 27(data) 1098 49 30 - Store 1102 1101 - 1103: 6(int) Load 8(invocation) - 1104: 102(ptr) AccessChain 27(data) 38 49 - 1105: 21(ivec4) Load 1104 - 1106: 101(ivec2) VectorShuffle 1105 1105 0 1 - 1107: 101(ivec2) GroupNonUniformUMax 34 InclusiveScan 1106 - 1108: 102(ptr) AccessChain 27(data) 1103 49 - 1109: 21(ivec4) Load 1108 - 1110: 21(ivec4) VectorShuffle 1109 1107 4 5 2 3 - Store 1108 1110 + 1052: 146(ptr) AccessChain 27(data) 38 65 + 1053: 23(f64vec4) Load 1052 + 1054:145(f64vec2) VectorShuffle 1053 1053 0 1 + 1055:145(f64vec2) GroupNonUniformFMul 34 InclusiveScan 1054 + 1056: 139(ptr) AccessChain 27(data) 1051 65 30 + 1057:22(float64_t) CompositeExtract 1055 0 + Store 1056 1057 + 1058: 139(ptr) AccessChain 27(data) 1051 65 47 + 1059:22(float64_t) CompositeExtract 1055 1 + Store 1058 1059 + 1060: 6(int) Load 8(invocation) + 1061: 146(ptr) AccessChain 27(data) 51 65 + 1062: 23(f64vec4) Load 1061 + 1063:156(f64vec3) VectorShuffle 1062 1062 0 1 2 + 1064:156(f64vec3) GroupNonUniformFMul 34 InclusiveScan 1063 + 1065: 139(ptr) AccessChain 27(data) 1060 65 30 + 1066:22(float64_t) CompositeExtract 1064 0 + Store 1065 1066 + 1067: 139(ptr) AccessChain 27(data) 1060 65 47 + 1068:22(float64_t) CompositeExtract 1064 1 + Store 1067 1068 + 1069: 139(ptr) AccessChain 27(data) 1060 65 61 + 1070:22(float64_t) CompositeExtract 1064 2 + Store 1069 1070 + 1071: 6(int) Load 8(invocation) + 1072: 146(ptr) AccessChain 27(data) 65 65 + 1073: 23(f64vec4) Load 1072 + 1074: 23(f64vec4) GroupNonUniformFMul 34 InclusiveScan 1073 + 1075: 146(ptr) AccessChain 27(data) 1071 65 + Store 1075 1074 + 1076: 6(int) Load 8(invocation) + 1077: 31(ptr) AccessChain 27(data) 29 29 30 + 1078: 17(float) Load 1077 + 1079: 17(float) GroupNonUniformFMin 34 InclusiveScan 1078 + 1080: 31(ptr) AccessChain 27(data) 1076 29 30 + Store 1080 1079 + 1081: 6(int) Load 8(invocation) + 1082: 40(ptr) AccessChain 27(data) 38 29 + 1083: 18(fvec4) Load 1082 + 1084: 39(fvec2) VectorShuffle 1083 1083 0 1 + 1085: 39(fvec2) GroupNonUniformFMin 34 InclusiveScan 1084 + 1086: 31(ptr) AccessChain 27(data) 1081 29 30 + 1087: 17(float) CompositeExtract 1085 0 + Store 1086 1087 + 1088: 31(ptr) AccessChain 27(data) 1081 29 47 + 1089: 17(float) CompositeExtract 1085 1 + Store 1088 1089 + 1090: 6(int) Load 8(invocation) + 1091: 40(ptr) AccessChain 27(data) 51 29 + 1092: 18(fvec4) Load 1091 + 1093: 52(fvec3) VectorShuffle 1092 1092 0 1 2 + 1094: 52(fvec3) GroupNonUniformFMin 34 InclusiveScan 1093 + 1095: 31(ptr) AccessChain 27(data) 1090 29 30 + 1096: 17(float) CompositeExtract 1094 0 + Store 1095 1096 + 1097: 31(ptr) AccessChain 27(data) 1090 29 47 + 1098: 17(float) CompositeExtract 1094 1 + Store 1097 1098 + 1099: 31(ptr) AccessChain 27(data) 1090 29 61 + 1100: 17(float) CompositeExtract 1094 2 + Store 1099 1100 + 1101: 6(int) Load 8(invocation) + 1102: 40(ptr) AccessChain 27(data) 65 29 + 1103: 18(fvec4) Load 1102 + 1104: 18(fvec4) GroupNonUniformFMin 34 InclusiveScan 1103 + 1105: 40(ptr) AccessChain 27(data) 1101 29 + Store 1105 1104 + 1106: 6(int) Load 8(invocation) + 1107: 71(ptr) AccessChain 27(data) 29 38 30 + 1108: 19(int) Load 1107 + 1109: 19(int) GroupNonUniformSMin 34 InclusiveScan 1108 + 1110: 71(ptr) AccessChain 27(data) 1106 38 30 + Store 1110 1109 1111: 6(int) Load 8(invocation) - 1112: 102(ptr) AccessChain 27(data) 49 49 - 1113: 21(ivec4) Load 1112 - 1114: 111(ivec3) VectorShuffle 1113 1113 0 1 2 - 1115: 111(ivec3) GroupNonUniformUMax 34 InclusiveScan 1114 - 1116: 102(ptr) AccessChain 27(data) 1111 49 - 1117: 21(ivec4) Load 1116 - 1118: 21(ivec4) VectorShuffle 1117 1115 4 5 6 3 - Store 1116 1118 - 1119: 6(int) Load 8(invocation) - 1120: 102(ptr) AccessChain 27(data) 59 49 - 1121: 21(ivec4) Load 1120 - 1122: 21(ivec4) GroupNonUniformUMax 34 InclusiveScan 1121 - 1123: 102(ptr) AccessChain 27(data) 1119 49 - Store 1123 1122 - 1124: 6(int) Load 8(invocation) - 1125: 125(ptr) AccessChain 27(data) 29 59 30 - 1126:22(float64_t) Load 1125 - 1127:22(float64_t) GroupNonUniformFMax 34 InclusiveScan 1126 - 1128: 125(ptr) AccessChain 27(data) 1124 59 30 - Store 1128 1127 - 1129: 6(int) Load 8(invocation) - 1130: 132(ptr) AccessChain 27(data) 38 59 - 1131: 23(f64vec4) Load 1130 - 1132:131(f64vec2) VectorShuffle 1131 1131 0 1 - 1133:131(f64vec2) GroupNonUniformFMax 34 InclusiveScan 1132 - 1134: 132(ptr) AccessChain 27(data) 1129 59 - 1135: 23(f64vec4) Load 1134 - 1136: 23(f64vec4) VectorShuffle 1135 1133 4 5 2 3 - Store 1134 1136 - 1137: 6(int) Load 8(invocation) - 1138: 132(ptr) AccessChain 27(data) 49 59 - 1139: 23(f64vec4) Load 1138 - 1140:141(f64vec3) VectorShuffle 1139 1139 0 1 2 - 1141:141(f64vec3) GroupNonUniformFMax 34 InclusiveScan 1140 - 1142: 132(ptr) AccessChain 27(data) 1137 59 - 1143: 23(f64vec4) Load 1142 - 1144: 23(f64vec4) VectorShuffle 1143 1141 4 5 6 3 - Store 1142 1144 - 1145: 6(int) Load 8(invocation) - 1146: 132(ptr) AccessChain 27(data) 59 59 - 1147: 23(f64vec4) Load 1146 - 1148: 23(f64vec4) GroupNonUniformFMax 34 InclusiveScan 1147 - 1149: 132(ptr) AccessChain 27(data) 1145 59 - Store 1149 1148 + 1112: 78(ptr) AccessChain 27(data) 38 38 + 1113: 20(ivec4) Load 1112 + 1114: 77(ivec2) VectorShuffle 1113 1113 0 1 + 1115: 77(ivec2) GroupNonUniformSMin 34 InclusiveScan 1114 + 1116: 71(ptr) AccessChain 27(data) 1111 38 30 + 1117: 19(int) CompositeExtract 1115 0 + Store 1116 1117 + 1118: 71(ptr) AccessChain 27(data) 1111 38 47 + 1119: 19(int) CompositeExtract 1115 1 + Store 1118 1119 + 1120: 6(int) Load 8(invocation) + 1121: 78(ptr) AccessChain 27(data) 51 38 + 1122: 20(ivec4) Load 1121 + 1123: 88(ivec3) VectorShuffle 1122 1122 0 1 2 + 1124: 88(ivec3) GroupNonUniformSMin 34 InclusiveScan 1123 + 1125: 71(ptr) AccessChain 27(data) 1120 38 30 + 1126: 19(int) CompositeExtract 1124 0 + Store 1125 1126 + 1127: 71(ptr) AccessChain 27(data) 1120 38 47 + 1128: 19(int) CompositeExtract 1124 1 + Store 1127 1128 + 1129: 71(ptr) AccessChain 27(data) 1120 38 61 + 1130: 19(int) CompositeExtract 1124 2 + Store 1129 1130 + 1131: 6(int) Load 8(invocation) + 1132: 78(ptr) AccessChain 27(data) 65 38 + 1133: 20(ivec4) Load 1132 + 1134: 20(ivec4) GroupNonUniformSMin 34 InclusiveScan 1133 + 1135: 78(ptr) AccessChain 27(data) 1131 38 + Store 1135 1134 + 1136: 6(int) Load 8(invocation) + 1137: 105(ptr) AccessChain 27(data) 29 51 30 + 1138: 6(int) Load 1137 + 1139: 6(int) GroupNonUniformUMin 34 InclusiveScan 1138 + 1140: 105(ptr) AccessChain 27(data) 1136 51 30 + Store 1140 1139 + 1141: 6(int) Load 8(invocation) + 1142: 112(ptr) AccessChain 27(data) 38 51 + 1143: 21(ivec4) Load 1142 + 1144: 111(ivec2) VectorShuffle 1143 1143 0 1 + 1145: 111(ivec2) GroupNonUniformUMin 34 InclusiveScan 1144 + 1146: 105(ptr) AccessChain 27(data) 1141 51 30 + 1147: 6(int) CompositeExtract 1145 0 + Store 1146 1147 + 1148: 105(ptr) AccessChain 27(data) 1141 51 47 + 1149: 6(int) CompositeExtract 1145 1 + Store 1148 1149 1150: 6(int) Load 8(invocation) - 1151: 65(ptr) AccessChain 27(data) 29 38 30 - 1152: 19(int) Load 1151 - 1153: 19(int) GroupNonUniformBitwiseAnd 34 InclusiveScan 1152 - 1154: 65(ptr) AccessChain 27(data) 1150 38 30 - Store 1154 1153 - 1155: 6(int) Load 8(invocation) - 1156: 72(ptr) AccessChain 27(data) 38 38 - 1157: 20(ivec4) Load 1156 - 1158: 71(ivec2) VectorShuffle 1157 1157 0 1 - 1159: 71(ivec2) GroupNonUniformBitwiseAnd 34 InclusiveScan 1158 - 1160: 72(ptr) AccessChain 27(data) 1155 38 - 1161: 20(ivec4) Load 1160 - 1162: 20(ivec4) VectorShuffle 1161 1159 4 5 2 3 - Store 1160 1162 - 1163: 6(int) Load 8(invocation) - 1164: 72(ptr) AccessChain 27(data) 49 38 - 1165: 20(ivec4) Load 1164 - 1166: 81(ivec3) VectorShuffle 1165 1165 0 1 2 - 1167: 81(ivec3) GroupNonUniformBitwiseAnd 34 InclusiveScan 1166 - 1168: 72(ptr) AccessChain 27(data) 1163 38 - 1169: 20(ivec4) Load 1168 - 1170: 20(ivec4) VectorShuffle 1169 1167 4 5 6 3 - Store 1168 1170 + 1151: 112(ptr) AccessChain 27(data) 51 51 + 1152: 21(ivec4) Load 1151 + 1153: 122(ivec3) VectorShuffle 1152 1152 0 1 2 + 1154: 122(ivec3) GroupNonUniformUMin 34 InclusiveScan 1153 + 1155: 105(ptr) AccessChain 27(data) 1150 51 30 + 1156: 6(int) CompositeExtract 1154 0 + Store 1155 1156 + 1157: 105(ptr) AccessChain 27(data) 1150 51 47 + 1158: 6(int) CompositeExtract 1154 1 + Store 1157 1158 + 1159: 105(ptr) AccessChain 27(data) 1150 51 61 + 1160: 6(int) CompositeExtract 1154 2 + Store 1159 1160 + 1161: 6(int) Load 8(invocation) + 1162: 112(ptr) AccessChain 27(data) 65 51 + 1163: 21(ivec4) Load 1162 + 1164: 21(ivec4) GroupNonUniformUMin 34 InclusiveScan 1163 + 1165: 112(ptr) AccessChain 27(data) 1161 51 + Store 1165 1164 + 1166: 6(int) Load 8(invocation) + 1167: 139(ptr) AccessChain 27(data) 29 65 30 + 1168:22(float64_t) Load 1167 + 1169:22(float64_t) GroupNonUniformFMin 34 InclusiveScan 1168 + 1170: 139(ptr) AccessChain 27(data) 1166 65 30 + Store 1170 1169 1171: 6(int) Load 8(invocation) - 1172: 72(ptr) AccessChain 27(data) 59 38 - 1173: 20(ivec4) Load 1172 - 1174: 20(ivec4) GroupNonUniformBitwiseAnd 34 InclusiveScan 1173 - 1175: 72(ptr) AccessChain 27(data) 1171 38 - Store 1175 1174 - 1176: 6(int) Load 8(invocation) - 1177: 95(ptr) AccessChain 27(data) 29 49 30 - 1178: 6(int) Load 1177 - 1179: 6(int) GroupNonUniformBitwiseAnd 34 InclusiveScan 1178 - 1180: 95(ptr) AccessChain 27(data) 1176 49 30 - Store 1180 1179 - 1181: 6(int) Load 8(invocation) - 1182: 102(ptr) AccessChain 27(data) 38 49 - 1183: 21(ivec4) Load 1182 - 1184: 101(ivec2) VectorShuffle 1183 1183 0 1 - 1185: 101(ivec2) GroupNonUniformBitwiseAnd 34 InclusiveScan 1184 - 1186: 102(ptr) AccessChain 27(data) 1181 49 - 1187: 21(ivec4) Load 1186 - 1188: 21(ivec4) VectorShuffle 1187 1185 4 5 2 3 - Store 1186 1188 - 1189: 6(int) Load 8(invocation) - 1190: 102(ptr) AccessChain 27(data) 49 49 - 1191: 21(ivec4) Load 1190 - 1192: 111(ivec3) VectorShuffle 1191 1191 0 1 2 - 1193: 111(ivec3) GroupNonUniformBitwiseAnd 34 InclusiveScan 1192 - 1194: 102(ptr) AccessChain 27(data) 1189 49 - 1195: 21(ivec4) Load 1194 - 1196: 21(ivec4) VectorShuffle 1195 1193 4 5 6 3 - Store 1194 1196 - 1197: 6(int) Load 8(invocation) - 1198: 102(ptr) AccessChain 27(data) 59 49 - 1199: 21(ivec4) Load 1198 - 1200: 21(ivec4) GroupNonUniformBitwiseAnd 34 InclusiveScan 1199 - 1201: 102(ptr) AccessChain 27(data) 1197 49 - Store 1201 1200 - 1202: 6(int) Load 8(invocation) - 1203: 65(ptr) AccessChain 27(data) 29 38 30 - 1204: 19(int) Load 1203 - 1205: 521(bool) SLessThan 1204 29 - 1206: 521(bool) GroupNonUniformLogicalAnd 34 InclusiveScan 1205 - 1207: 19(int) Select 1206 38 29 - 1208: 65(ptr) AccessChain 27(data) 1202 38 30 - Store 1208 1207 - 1209: 6(int) Load 8(invocation) - 1210: 72(ptr) AccessChain 27(data) 38 38 - 1211: 20(ivec4) Load 1210 - 1212: 71(ivec2) VectorShuffle 1211 1211 0 1 - 1213: 531(bvec2) SLessThan 1212 530 - 1214: 531(bvec2) GroupNonUniformLogicalAnd 34 InclusiveScan 1213 - 1215: 71(ivec2) Select 1214 534 530 - 1216: 72(ptr) AccessChain 27(data) 1209 38 - 1217: 20(ivec4) Load 1216 - 1218: 20(ivec4) VectorShuffle 1217 1215 4 5 2 3 - Store 1216 1218 - 1219: 6(int) Load 8(invocation) - 1220: 72(ptr) AccessChain 27(data) 38 38 - 1221: 20(ivec4) Load 1220 - 1222: 81(ivec3) VectorShuffle 1221 1221 0 1 2 - 1223: 544(bvec3) SLessThan 1222 543 - 1224: 544(bvec3) GroupNonUniformLogicalAnd 34 InclusiveScan 1223 - 1225: 81(ivec3) Select 1224 547 543 - 1226: 72(ptr) AccessChain 27(data) 1219 38 - 1227: 20(ivec4) Load 1226 - 1228: 20(ivec4) VectorShuffle 1227 1225 4 5 6 3 - Store 1226 1228 - 1229: 6(int) Load 8(invocation) - 1230: 72(ptr) AccessChain 27(data) 38 38 - 1231: 20(ivec4) Load 1230 - 1232: 556(bvec4) SLessThan 1231 555 - 1233: 556(bvec4) GroupNonUniformLogicalAnd 34 InclusiveScan 1232 - 1234: 20(ivec4) Select 1233 559 555 - 1235: 72(ptr) AccessChain 27(data) 1229 38 - Store 1235 1234 - 1236: 6(int) Load 8(invocation) - 1237: 65(ptr) AccessChain 27(data) 29 38 30 - 1238: 19(int) Load 1237 - 1239: 19(int) GroupNonUniformBitwiseOr 34 InclusiveScan 1238 - 1240: 65(ptr) AccessChain 27(data) 1236 38 30 - Store 1240 1239 - 1241: 6(int) Load 8(invocation) - 1242: 72(ptr) AccessChain 27(data) 38 38 - 1243: 20(ivec4) Load 1242 - 1244: 71(ivec2) VectorShuffle 1243 1243 0 1 - 1245: 71(ivec2) GroupNonUniformBitwiseOr 34 InclusiveScan 1244 - 1246: 72(ptr) AccessChain 27(data) 1241 38 - 1247: 20(ivec4) Load 1246 - 1248: 20(ivec4) VectorShuffle 1247 1245 4 5 2 3 - Store 1246 1248 - 1249: 6(int) Load 8(invocation) - 1250: 72(ptr) AccessChain 27(data) 49 38 - 1251: 20(ivec4) Load 1250 - 1252: 81(ivec3) VectorShuffle 1251 1251 0 1 2 - 1253: 81(ivec3) GroupNonUniformBitwiseOr 34 InclusiveScan 1252 - 1254: 72(ptr) AccessChain 27(data) 1249 38 - 1255: 20(ivec4) Load 1254 - 1256: 20(ivec4) VectorShuffle 1255 1253 4 5 6 3 - Store 1254 1256 - 1257: 6(int) Load 8(invocation) - 1258: 72(ptr) AccessChain 27(data) 59 38 - 1259: 20(ivec4) Load 1258 - 1260: 20(ivec4) GroupNonUniformBitwiseOr 34 InclusiveScan 1259 - 1261: 72(ptr) AccessChain 27(data) 1257 38 - Store 1261 1260 - 1262: 6(int) Load 8(invocation) - 1263: 95(ptr) AccessChain 27(data) 29 49 30 - 1264: 6(int) Load 1263 - 1265: 6(int) GroupNonUniformBitwiseOr 34 InclusiveScan 1264 - 1266: 95(ptr) AccessChain 27(data) 1262 49 30 - Store 1266 1265 - 1267: 6(int) Load 8(invocation) - 1268: 102(ptr) AccessChain 27(data) 38 49 - 1269: 21(ivec4) Load 1268 - 1270: 101(ivec2) VectorShuffle 1269 1269 0 1 - 1271: 101(ivec2) GroupNonUniformBitwiseOr 34 InclusiveScan 1270 - 1272: 102(ptr) AccessChain 27(data) 1267 49 - 1273: 21(ivec4) Load 1272 - 1274: 21(ivec4) VectorShuffle 1273 1271 4 5 2 3 - Store 1272 1274 - 1275: 6(int) Load 8(invocation) - 1276: 102(ptr) AccessChain 27(data) 49 49 - 1277: 21(ivec4) Load 1276 - 1278: 111(ivec3) VectorShuffle 1277 1277 0 1 2 - 1279: 111(ivec3) GroupNonUniformBitwiseOr 34 InclusiveScan 1278 - 1280: 102(ptr) AccessChain 27(data) 1275 49 - 1281: 21(ivec4) Load 1280 - 1282: 21(ivec4) VectorShuffle 1281 1279 4 5 6 3 - Store 1280 1282 - 1283: 6(int) Load 8(invocation) - 1284: 102(ptr) AccessChain 27(data) 59 49 - 1285: 21(ivec4) Load 1284 - 1286: 21(ivec4) GroupNonUniformBitwiseOr 34 InclusiveScan 1285 - 1287: 102(ptr) AccessChain 27(data) 1283 49 - Store 1287 1286 - 1288: 6(int) Load 8(invocation) - 1289: 65(ptr) AccessChain 27(data) 29 38 30 - 1290: 19(int) Load 1289 - 1291: 521(bool) SLessThan 1290 29 - 1292: 521(bool) GroupNonUniformLogicalOr 34 InclusiveScan 1291 - 1293: 19(int) Select 1292 38 29 - 1294: 65(ptr) AccessChain 27(data) 1288 38 30 - Store 1294 1293 - 1295: 6(int) Load 8(invocation) - 1296: 72(ptr) AccessChain 27(data) 38 38 - 1297: 20(ivec4) Load 1296 - 1298: 71(ivec2) VectorShuffle 1297 1297 0 1 - 1299: 531(bvec2) SLessThan 1298 530 - 1300: 531(bvec2) GroupNonUniformLogicalOr 34 InclusiveScan 1299 - 1301: 71(ivec2) Select 1300 534 530 - 1302: 72(ptr) AccessChain 27(data) 1295 38 - 1303: 20(ivec4) Load 1302 - 1304: 20(ivec4) VectorShuffle 1303 1301 4 5 2 3 - Store 1302 1304 - 1305: 6(int) Load 8(invocation) - 1306: 72(ptr) AccessChain 27(data) 38 38 - 1307: 20(ivec4) Load 1306 - 1308: 81(ivec3) VectorShuffle 1307 1307 0 1 2 - 1309: 544(bvec3) SLessThan 1308 543 - 1310: 544(bvec3) GroupNonUniformLogicalOr 34 InclusiveScan 1309 - 1311: 81(ivec3) Select 1310 547 543 - 1312: 72(ptr) AccessChain 27(data) 1305 38 - 1313: 20(ivec4) Load 1312 - 1314: 20(ivec4) VectorShuffle 1313 1311 4 5 6 3 - Store 1312 1314 - 1315: 6(int) Load 8(invocation) - 1316: 72(ptr) AccessChain 27(data) 38 38 - 1317: 20(ivec4) Load 1316 - 1318: 556(bvec4) SLessThan 1317 555 - 1319: 556(bvec4) GroupNonUniformLogicalOr 34 InclusiveScan 1318 - 1320: 20(ivec4) Select 1319 559 555 - 1321: 72(ptr) AccessChain 27(data) 1315 38 - Store 1321 1320 - 1322: 6(int) Load 8(invocation) - 1323: 65(ptr) AccessChain 27(data) 29 38 30 - 1324: 19(int) Load 1323 - 1325: 19(int) GroupNonUniformBitwiseXor 34 InclusiveScan 1324 - 1326: 65(ptr) AccessChain 27(data) 1322 38 30 - Store 1326 1325 - 1327: 6(int) Load 8(invocation) - 1328: 72(ptr) AccessChain 27(data) 38 38 - 1329: 20(ivec4) Load 1328 - 1330: 71(ivec2) VectorShuffle 1329 1329 0 1 - 1331: 71(ivec2) GroupNonUniformBitwiseXor 34 InclusiveScan 1330 - 1332: 72(ptr) AccessChain 27(data) 1327 38 - 1333: 20(ivec4) Load 1332 - 1334: 20(ivec4) VectorShuffle 1333 1331 4 5 2 3 - Store 1332 1334 - 1335: 6(int) Load 8(invocation) - 1336: 72(ptr) AccessChain 27(data) 49 38 - 1337: 20(ivec4) Load 1336 - 1338: 81(ivec3) VectorShuffle 1337 1337 0 1 2 - 1339: 81(ivec3) GroupNonUniformBitwiseXor 34 InclusiveScan 1338 - 1340: 72(ptr) AccessChain 27(data) 1335 38 - 1341: 20(ivec4) Load 1340 - 1342: 20(ivec4) VectorShuffle 1341 1339 4 5 6 3 - Store 1340 1342 - 1343: 6(int) Load 8(invocation) - 1344: 72(ptr) AccessChain 27(data) 59 38 - 1345: 20(ivec4) Load 1344 - 1346: 20(ivec4) GroupNonUniformBitwiseXor 34 InclusiveScan 1345 - 1347: 72(ptr) AccessChain 27(data) 1343 38 - Store 1347 1346 - 1348: 6(int) Load 8(invocation) - 1349: 95(ptr) AccessChain 27(data) 29 49 30 - 1350: 6(int) Load 1349 - 1351: 6(int) GroupNonUniformBitwiseXor 34 InclusiveScan 1350 - 1352: 95(ptr) AccessChain 27(data) 1348 49 30 - Store 1352 1351 - 1353: 6(int) Load 8(invocation) - 1354: 102(ptr) AccessChain 27(data) 38 49 - 1355: 21(ivec4) Load 1354 - 1356: 101(ivec2) VectorShuffle 1355 1355 0 1 - 1357: 101(ivec2) GroupNonUniformBitwiseXor 34 InclusiveScan 1356 - 1358: 102(ptr) AccessChain 27(data) 1353 49 - 1359: 21(ivec4) Load 1358 - 1360: 21(ivec4) VectorShuffle 1359 1357 4 5 2 3 - Store 1358 1360 - 1361: 6(int) Load 8(invocation) - 1362: 102(ptr) AccessChain 27(data) 49 49 - 1363: 21(ivec4) Load 1362 - 1364: 111(ivec3) VectorShuffle 1363 1363 0 1 2 - 1365: 111(ivec3) GroupNonUniformBitwiseXor 34 InclusiveScan 1364 - 1366: 102(ptr) AccessChain 27(data) 1361 49 - 1367: 21(ivec4) Load 1366 - 1368: 21(ivec4) VectorShuffle 1367 1365 4 5 6 3 - Store 1366 1368 - 1369: 6(int) Load 8(invocation) - 1370: 102(ptr) AccessChain 27(data) 59 49 - 1371: 21(ivec4) Load 1370 - 1372: 21(ivec4) GroupNonUniformBitwiseXor 34 InclusiveScan 1371 - 1373: 102(ptr) AccessChain 27(data) 1369 49 - Store 1373 1372 - 1374: 6(int) Load 8(invocation) - 1375: 65(ptr) AccessChain 27(data) 29 38 30 - 1376: 19(int) Load 1375 - 1377: 521(bool) SLessThan 1376 29 - 1378: 521(bool) GroupNonUniformLogicalXor 34 InclusiveScan 1377 - 1379: 19(int) Select 1378 38 29 - 1380: 65(ptr) AccessChain 27(data) 1374 38 30 - Store 1380 1379 - 1381: 6(int) Load 8(invocation) - 1382: 72(ptr) AccessChain 27(data) 38 38 - 1383: 20(ivec4) Load 1382 - 1384: 71(ivec2) VectorShuffle 1383 1383 0 1 - 1385: 531(bvec2) SLessThan 1384 530 - 1386: 531(bvec2) GroupNonUniformLogicalXor 34 InclusiveScan 1385 - 1387: 71(ivec2) Select 1386 534 530 - 1388: 72(ptr) AccessChain 27(data) 1381 38 - 1389: 20(ivec4) Load 1388 - 1390: 20(ivec4) VectorShuffle 1389 1387 4 5 2 3 - Store 1388 1390 - 1391: 6(int) Load 8(invocation) - 1392: 72(ptr) AccessChain 27(data) 38 38 - 1393: 20(ivec4) Load 1392 - 1394: 81(ivec3) VectorShuffle 1393 1393 0 1 2 - 1395: 544(bvec3) SLessThan 1394 543 - 1396: 544(bvec3) GroupNonUniformLogicalXor 34 InclusiveScan 1395 - 1397: 81(ivec3) Select 1396 547 543 - 1398: 72(ptr) AccessChain 27(data) 1391 38 - 1399: 20(ivec4) Load 1398 - 1400: 20(ivec4) VectorShuffle 1399 1397 4 5 6 3 - Store 1398 1400 - 1401: 6(int) Load 8(invocation) - 1402: 72(ptr) AccessChain 27(data) 38 38 - 1403: 20(ivec4) Load 1402 - 1404: 556(bvec4) SLessThan 1403 555 - 1405: 556(bvec4) GroupNonUniformLogicalXor 34 InclusiveScan 1404 - 1406: 20(ivec4) Select 1405 559 555 - 1407: 72(ptr) AccessChain 27(data) 1401 38 - Store 1407 1406 - 1408: 6(int) Load 8(invocation) - 1409: 31(ptr) AccessChain 27(data) 29 29 30 - 1410: 17(float) Load 1409 - 1411: 17(float) GroupNonUniformFAdd 34 ExclusiveScan 1410 - 1412: 31(ptr) AccessChain 27(data) 1408 29 30 - Store 1412 1411 - 1413: 6(int) Load 8(invocation) - 1414: 40(ptr) AccessChain 27(data) 38 29 - 1415: 18(fvec4) Load 1414 - 1416: 39(fvec2) VectorShuffle 1415 1415 0 1 - 1417: 39(fvec2) GroupNonUniformFAdd 34 ExclusiveScan 1416 - 1418: 40(ptr) AccessChain 27(data) 1413 29 - 1419: 18(fvec4) Load 1418 - 1420: 18(fvec4) VectorShuffle 1419 1417 4 5 2 3 - Store 1418 1420 - 1421: 6(int) Load 8(invocation) - 1422: 40(ptr) AccessChain 27(data) 49 29 - 1423: 18(fvec4) Load 1422 - 1424: 50(fvec3) VectorShuffle 1423 1423 0 1 2 - 1425: 50(fvec3) GroupNonUniformFAdd 34 ExclusiveScan 1424 - 1426: 40(ptr) AccessChain 27(data) 1421 29 - 1427: 18(fvec4) Load 1426 - 1428: 18(fvec4) VectorShuffle 1427 1425 4 5 6 3 - Store 1426 1428 - 1429: 6(int) Load 8(invocation) - 1430: 40(ptr) AccessChain 27(data) 59 29 - 1431: 18(fvec4) Load 1430 - 1432: 18(fvec4) GroupNonUniformFAdd 34 ExclusiveScan 1431 - 1433: 40(ptr) AccessChain 27(data) 1429 29 - Store 1433 1432 - 1434: 6(int) Load 8(invocation) - 1435: 65(ptr) AccessChain 27(data) 29 38 30 - 1436: 19(int) Load 1435 - 1437: 19(int) GroupNonUniformIAdd 34 ExclusiveScan 1436 - 1438: 65(ptr) AccessChain 27(data) 1434 38 30 - Store 1438 1437 + 1172: 146(ptr) AccessChain 27(data) 38 65 + 1173: 23(f64vec4) Load 1172 + 1174:145(f64vec2) VectorShuffle 1173 1173 0 1 + 1175:145(f64vec2) GroupNonUniformFMin 34 InclusiveScan 1174 + 1176: 139(ptr) AccessChain 27(data) 1171 65 30 + 1177:22(float64_t) CompositeExtract 1175 0 + Store 1176 1177 + 1178: 139(ptr) AccessChain 27(data) 1171 65 47 + 1179:22(float64_t) CompositeExtract 1175 1 + Store 1178 1179 + 1180: 6(int) Load 8(invocation) + 1181: 146(ptr) AccessChain 27(data) 51 65 + 1182: 23(f64vec4) Load 1181 + 1183:156(f64vec3) VectorShuffle 1182 1182 0 1 2 + 1184:156(f64vec3) GroupNonUniformFMin 34 InclusiveScan 1183 + 1185: 139(ptr) AccessChain 27(data) 1180 65 30 + 1186:22(float64_t) CompositeExtract 1184 0 + Store 1185 1186 + 1187: 139(ptr) AccessChain 27(data) 1180 65 47 + 1188:22(float64_t) CompositeExtract 1184 1 + Store 1187 1188 + 1189: 139(ptr) AccessChain 27(data) 1180 65 61 + 1190:22(float64_t) CompositeExtract 1184 2 + Store 1189 1190 + 1191: 6(int) Load 8(invocation) + 1192: 146(ptr) AccessChain 27(data) 65 65 + 1193: 23(f64vec4) Load 1192 + 1194: 23(f64vec4) GroupNonUniformFMin 34 InclusiveScan 1193 + 1195: 146(ptr) AccessChain 27(data) 1191 65 + Store 1195 1194 + 1196: 6(int) Load 8(invocation) + 1197: 31(ptr) AccessChain 27(data) 29 29 30 + 1198: 17(float) Load 1197 + 1199: 17(float) GroupNonUniformFMax 34 InclusiveScan 1198 + 1200: 31(ptr) AccessChain 27(data) 1196 29 30 + Store 1200 1199 + 1201: 6(int) Load 8(invocation) + 1202: 40(ptr) AccessChain 27(data) 38 29 + 1203: 18(fvec4) Load 1202 + 1204: 39(fvec2) VectorShuffle 1203 1203 0 1 + 1205: 39(fvec2) GroupNonUniformFMax 34 InclusiveScan 1204 + 1206: 31(ptr) AccessChain 27(data) 1201 29 30 + 1207: 17(float) CompositeExtract 1205 0 + Store 1206 1207 + 1208: 31(ptr) AccessChain 27(data) 1201 29 47 + 1209: 17(float) CompositeExtract 1205 1 + Store 1208 1209 + 1210: 6(int) Load 8(invocation) + 1211: 40(ptr) AccessChain 27(data) 51 29 + 1212: 18(fvec4) Load 1211 + 1213: 52(fvec3) VectorShuffle 1212 1212 0 1 2 + 1214: 52(fvec3) GroupNonUniformFMax 34 InclusiveScan 1213 + 1215: 31(ptr) AccessChain 27(data) 1210 29 30 + 1216: 17(float) CompositeExtract 1214 0 + Store 1215 1216 + 1217: 31(ptr) AccessChain 27(data) 1210 29 47 + 1218: 17(float) CompositeExtract 1214 1 + Store 1217 1218 + 1219: 31(ptr) AccessChain 27(data) 1210 29 61 + 1220: 17(float) CompositeExtract 1214 2 + Store 1219 1220 + 1221: 6(int) Load 8(invocation) + 1222: 40(ptr) AccessChain 27(data) 65 29 + 1223: 18(fvec4) Load 1222 + 1224: 18(fvec4) GroupNonUniformFMax 34 InclusiveScan 1223 + 1225: 40(ptr) AccessChain 27(data) 1221 29 + Store 1225 1224 + 1226: 6(int) Load 8(invocation) + 1227: 71(ptr) AccessChain 27(data) 29 38 30 + 1228: 19(int) Load 1227 + 1229: 19(int) GroupNonUniformSMax 34 InclusiveScan 1228 + 1230: 71(ptr) AccessChain 27(data) 1226 38 30 + Store 1230 1229 + 1231: 6(int) Load 8(invocation) + 1232: 78(ptr) AccessChain 27(data) 38 38 + 1233: 20(ivec4) Load 1232 + 1234: 77(ivec2) VectorShuffle 1233 1233 0 1 + 1235: 77(ivec2) GroupNonUniformSMax 34 InclusiveScan 1234 + 1236: 71(ptr) AccessChain 27(data) 1231 38 30 + 1237: 19(int) CompositeExtract 1235 0 + Store 1236 1237 + 1238: 71(ptr) AccessChain 27(data) 1231 38 47 + 1239: 19(int) CompositeExtract 1235 1 + Store 1238 1239 + 1240: 6(int) Load 8(invocation) + 1241: 78(ptr) AccessChain 27(data) 51 38 + 1242: 20(ivec4) Load 1241 + 1243: 88(ivec3) VectorShuffle 1242 1242 0 1 2 + 1244: 88(ivec3) GroupNonUniformSMax 34 InclusiveScan 1243 + 1245: 71(ptr) AccessChain 27(data) 1240 38 30 + 1246: 19(int) CompositeExtract 1244 0 + Store 1245 1246 + 1247: 71(ptr) AccessChain 27(data) 1240 38 47 + 1248: 19(int) CompositeExtract 1244 1 + Store 1247 1248 + 1249: 71(ptr) AccessChain 27(data) 1240 38 61 + 1250: 19(int) CompositeExtract 1244 2 + Store 1249 1250 + 1251: 6(int) Load 8(invocation) + 1252: 78(ptr) AccessChain 27(data) 65 38 + 1253: 20(ivec4) Load 1252 + 1254: 20(ivec4) GroupNonUniformSMax 34 InclusiveScan 1253 + 1255: 78(ptr) AccessChain 27(data) 1251 38 + Store 1255 1254 + 1256: 6(int) Load 8(invocation) + 1257: 105(ptr) AccessChain 27(data) 29 51 30 + 1258: 6(int) Load 1257 + 1259: 6(int) GroupNonUniformUMax 34 InclusiveScan 1258 + 1260: 105(ptr) AccessChain 27(data) 1256 51 30 + Store 1260 1259 + 1261: 6(int) Load 8(invocation) + 1262: 112(ptr) AccessChain 27(data) 38 51 + 1263: 21(ivec4) Load 1262 + 1264: 111(ivec2) VectorShuffle 1263 1263 0 1 + 1265: 111(ivec2) GroupNonUniformUMax 34 InclusiveScan 1264 + 1266: 105(ptr) AccessChain 27(data) 1261 51 30 + 1267: 6(int) CompositeExtract 1265 0 + Store 1266 1267 + 1268: 105(ptr) AccessChain 27(data) 1261 51 47 + 1269: 6(int) CompositeExtract 1265 1 + Store 1268 1269 + 1270: 6(int) Load 8(invocation) + 1271: 112(ptr) AccessChain 27(data) 51 51 + 1272: 21(ivec4) Load 1271 + 1273: 122(ivec3) VectorShuffle 1272 1272 0 1 2 + 1274: 122(ivec3) GroupNonUniformUMax 34 InclusiveScan 1273 + 1275: 105(ptr) AccessChain 27(data) 1270 51 30 + 1276: 6(int) CompositeExtract 1274 0 + Store 1275 1276 + 1277: 105(ptr) AccessChain 27(data) 1270 51 47 + 1278: 6(int) CompositeExtract 1274 1 + Store 1277 1278 + 1279: 105(ptr) AccessChain 27(data) 1270 51 61 + 1280: 6(int) CompositeExtract 1274 2 + Store 1279 1280 + 1281: 6(int) Load 8(invocation) + 1282: 112(ptr) AccessChain 27(data) 65 51 + 1283: 21(ivec4) Load 1282 + 1284: 21(ivec4) GroupNonUniformUMax 34 InclusiveScan 1283 + 1285: 112(ptr) AccessChain 27(data) 1281 51 + Store 1285 1284 + 1286: 6(int) Load 8(invocation) + 1287: 139(ptr) AccessChain 27(data) 29 65 30 + 1288:22(float64_t) Load 1287 + 1289:22(float64_t) GroupNonUniformFMax 34 InclusiveScan 1288 + 1290: 139(ptr) AccessChain 27(data) 1286 65 30 + Store 1290 1289 + 1291: 6(int) Load 8(invocation) + 1292: 146(ptr) AccessChain 27(data) 38 65 + 1293: 23(f64vec4) Load 1292 + 1294:145(f64vec2) VectorShuffle 1293 1293 0 1 + 1295:145(f64vec2) GroupNonUniformFMax 34 InclusiveScan 1294 + 1296: 139(ptr) AccessChain 27(data) 1291 65 30 + 1297:22(float64_t) CompositeExtract 1295 0 + Store 1296 1297 + 1298: 139(ptr) AccessChain 27(data) 1291 65 47 + 1299:22(float64_t) CompositeExtract 1295 1 + Store 1298 1299 + 1300: 6(int) Load 8(invocation) + 1301: 146(ptr) AccessChain 27(data) 51 65 + 1302: 23(f64vec4) Load 1301 + 1303:156(f64vec3) VectorShuffle 1302 1302 0 1 2 + 1304:156(f64vec3) GroupNonUniformFMax 34 InclusiveScan 1303 + 1305: 139(ptr) AccessChain 27(data) 1300 65 30 + 1306:22(float64_t) CompositeExtract 1304 0 + Store 1305 1306 + 1307: 139(ptr) AccessChain 27(data) 1300 65 47 + 1308:22(float64_t) CompositeExtract 1304 1 + Store 1307 1308 + 1309: 139(ptr) AccessChain 27(data) 1300 65 61 + 1310:22(float64_t) CompositeExtract 1304 2 + Store 1309 1310 + 1311: 6(int) Load 8(invocation) + 1312: 146(ptr) AccessChain 27(data) 65 65 + 1313: 23(f64vec4) Load 1312 + 1314: 23(f64vec4) GroupNonUniformFMax 34 InclusiveScan 1313 + 1315: 146(ptr) AccessChain 27(data) 1311 65 + Store 1315 1314 + 1316: 6(int) Load 8(invocation) + 1317: 71(ptr) AccessChain 27(data) 29 38 30 + 1318: 19(int) Load 1317 + 1319: 19(int) GroupNonUniformBitwiseAnd 34 InclusiveScan 1318 + 1320: 71(ptr) AccessChain 27(data) 1316 38 30 + Store 1320 1319 + 1321: 6(int) Load 8(invocation) + 1322: 78(ptr) AccessChain 27(data) 38 38 + 1323: 20(ivec4) Load 1322 + 1324: 77(ivec2) VectorShuffle 1323 1323 0 1 + 1325: 77(ivec2) GroupNonUniformBitwiseAnd 34 InclusiveScan 1324 + 1326: 71(ptr) AccessChain 27(data) 1321 38 30 + 1327: 19(int) CompositeExtract 1325 0 + Store 1326 1327 + 1328: 71(ptr) AccessChain 27(data) 1321 38 47 + 1329: 19(int) CompositeExtract 1325 1 + Store 1328 1329 + 1330: 6(int) Load 8(invocation) + 1331: 78(ptr) AccessChain 27(data) 51 38 + 1332: 20(ivec4) Load 1331 + 1333: 88(ivec3) VectorShuffle 1332 1332 0 1 2 + 1334: 88(ivec3) GroupNonUniformBitwiseAnd 34 InclusiveScan 1333 + 1335: 71(ptr) AccessChain 27(data) 1330 38 30 + 1336: 19(int) CompositeExtract 1334 0 + Store 1335 1336 + 1337: 71(ptr) AccessChain 27(data) 1330 38 47 + 1338: 19(int) CompositeExtract 1334 1 + Store 1337 1338 + 1339: 71(ptr) AccessChain 27(data) 1330 38 61 + 1340: 19(int) CompositeExtract 1334 2 + Store 1339 1340 + 1341: 6(int) Load 8(invocation) + 1342: 78(ptr) AccessChain 27(data) 65 38 + 1343: 20(ivec4) Load 1342 + 1344: 20(ivec4) GroupNonUniformBitwiseAnd 34 InclusiveScan 1343 + 1345: 78(ptr) AccessChain 27(data) 1341 38 + Store 1345 1344 + 1346: 6(int) Load 8(invocation) + 1347: 105(ptr) AccessChain 27(data) 29 51 30 + 1348: 6(int) Load 1347 + 1349: 6(int) GroupNonUniformBitwiseAnd 34 InclusiveScan 1348 + 1350: 105(ptr) AccessChain 27(data) 1346 51 30 + Store 1350 1349 + 1351: 6(int) Load 8(invocation) + 1352: 112(ptr) AccessChain 27(data) 38 51 + 1353: 21(ivec4) Load 1352 + 1354: 111(ivec2) VectorShuffle 1353 1353 0 1 + 1355: 111(ivec2) GroupNonUniformBitwiseAnd 34 InclusiveScan 1354 + 1356: 105(ptr) AccessChain 27(data) 1351 51 30 + 1357: 6(int) CompositeExtract 1355 0 + Store 1356 1357 + 1358: 105(ptr) AccessChain 27(data) 1351 51 47 + 1359: 6(int) CompositeExtract 1355 1 + Store 1358 1359 + 1360: 6(int) Load 8(invocation) + 1361: 112(ptr) AccessChain 27(data) 51 51 + 1362: 21(ivec4) Load 1361 + 1363: 122(ivec3) VectorShuffle 1362 1362 0 1 2 + 1364: 122(ivec3) GroupNonUniformBitwiseAnd 34 InclusiveScan 1363 + 1365: 105(ptr) AccessChain 27(data) 1360 51 30 + 1366: 6(int) CompositeExtract 1364 0 + Store 1365 1366 + 1367: 105(ptr) AccessChain 27(data) 1360 51 47 + 1368: 6(int) CompositeExtract 1364 1 + Store 1367 1368 + 1369: 105(ptr) AccessChain 27(data) 1360 51 61 + 1370: 6(int) CompositeExtract 1364 2 + Store 1369 1370 + 1371: 6(int) Load 8(invocation) + 1372: 112(ptr) AccessChain 27(data) 65 51 + 1373: 21(ivec4) Load 1372 + 1374: 21(ivec4) GroupNonUniformBitwiseAnd 34 InclusiveScan 1373 + 1375: 112(ptr) AccessChain 27(data) 1371 51 + Store 1375 1374 + 1376: 6(int) Load 8(invocation) + 1377: 71(ptr) AccessChain 27(data) 29 38 30 + 1378: 19(int) Load 1377 + 1379: 595(bool) SLessThan 1378 29 + 1380: 595(bool) GroupNonUniformLogicalAnd 34 InclusiveScan 1379 + 1381: 19(int) Select 1380 38 29 + 1382: 71(ptr) AccessChain 27(data) 1376 38 30 + Store 1382 1381 + 1383: 6(int) Load 8(invocation) + 1384: 78(ptr) AccessChain 27(data) 38 38 + 1385: 20(ivec4) Load 1384 + 1386: 77(ivec2) VectorShuffle 1385 1385 0 1 + 1387: 605(bvec2) SLessThan 1386 604 + 1388: 605(bvec2) GroupNonUniformLogicalAnd 34 InclusiveScan 1387 + 1389: 77(ivec2) Select 1388 608 604 + 1390: 71(ptr) AccessChain 27(data) 1383 38 30 + 1391: 19(int) CompositeExtract 1389 0 + Store 1390 1391 + 1392: 71(ptr) AccessChain 27(data) 1383 38 47 + 1393: 19(int) CompositeExtract 1389 1 + Store 1392 1393 + 1394: 6(int) Load 8(invocation) + 1395: 78(ptr) AccessChain 27(data) 38 38 + 1396: 20(ivec4) Load 1395 + 1397: 88(ivec3) VectorShuffle 1396 1396 0 1 2 + 1398: 619(bvec3) SLessThan 1397 618 + 1399: 619(bvec3) GroupNonUniformLogicalAnd 34 InclusiveScan 1398 + 1400: 88(ivec3) Select 1399 622 618 + 1401: 71(ptr) AccessChain 27(data) 1394 38 30 + 1402: 19(int) CompositeExtract 1400 0 + Store 1401 1402 + 1403: 71(ptr) AccessChain 27(data) 1394 38 47 + 1404: 19(int) CompositeExtract 1400 1 + Store 1403 1404 + 1405: 71(ptr) AccessChain 27(data) 1394 38 61 + 1406: 19(int) CompositeExtract 1400 2 + Store 1405 1406 + 1407: 6(int) Load 8(invocation) + 1408: 78(ptr) AccessChain 27(data) 38 38 + 1409: 20(ivec4) Load 1408 + 1410: 634(bvec4) SLessThan 1409 633 + 1411: 634(bvec4) GroupNonUniformLogicalAnd 34 InclusiveScan 1410 + 1412: 20(ivec4) Select 1411 637 633 + 1413: 78(ptr) AccessChain 27(data) 1407 38 + Store 1413 1412 + 1414: 6(int) Load 8(invocation) + 1415: 71(ptr) AccessChain 27(data) 29 38 30 + 1416: 19(int) Load 1415 + 1417: 19(int) GroupNonUniformBitwiseOr 34 InclusiveScan 1416 + 1418: 71(ptr) AccessChain 27(data) 1414 38 30 + Store 1418 1417 + 1419: 6(int) Load 8(invocation) + 1420: 78(ptr) AccessChain 27(data) 38 38 + 1421: 20(ivec4) Load 1420 + 1422: 77(ivec2) VectorShuffle 1421 1421 0 1 + 1423: 77(ivec2) GroupNonUniformBitwiseOr 34 InclusiveScan 1422 + 1424: 71(ptr) AccessChain 27(data) 1419 38 30 + 1425: 19(int) CompositeExtract 1423 0 + Store 1424 1425 + 1426: 71(ptr) AccessChain 27(data) 1419 38 47 + 1427: 19(int) CompositeExtract 1423 1 + Store 1426 1427 + 1428: 6(int) Load 8(invocation) + 1429: 78(ptr) AccessChain 27(data) 51 38 + 1430: 20(ivec4) Load 1429 + 1431: 88(ivec3) VectorShuffle 1430 1430 0 1 2 + 1432: 88(ivec3) GroupNonUniformBitwiseOr 34 InclusiveScan 1431 + 1433: 71(ptr) AccessChain 27(data) 1428 38 30 + 1434: 19(int) CompositeExtract 1432 0 + Store 1433 1434 + 1435: 71(ptr) AccessChain 27(data) 1428 38 47 + 1436: 19(int) CompositeExtract 1432 1 + Store 1435 1436 + 1437: 71(ptr) AccessChain 27(data) 1428 38 61 + 1438: 19(int) CompositeExtract 1432 2 + Store 1437 1438 1439: 6(int) Load 8(invocation) - 1440: 72(ptr) AccessChain 27(data) 38 38 + 1440: 78(ptr) AccessChain 27(data) 65 38 1441: 20(ivec4) Load 1440 - 1442: 71(ivec2) VectorShuffle 1441 1441 0 1 - 1443: 71(ivec2) GroupNonUniformIAdd 34 ExclusiveScan 1442 - 1444: 72(ptr) AccessChain 27(data) 1439 38 - 1445: 20(ivec4) Load 1444 - 1446: 20(ivec4) VectorShuffle 1445 1443 4 5 2 3 - Store 1444 1446 - 1447: 6(int) Load 8(invocation) - 1448: 72(ptr) AccessChain 27(data) 49 38 - 1449: 20(ivec4) Load 1448 - 1450: 81(ivec3) VectorShuffle 1449 1449 0 1 2 - 1451: 81(ivec3) GroupNonUniformIAdd 34 ExclusiveScan 1450 - 1452: 72(ptr) AccessChain 27(data) 1447 38 - 1453: 20(ivec4) Load 1452 - 1454: 20(ivec4) VectorShuffle 1453 1451 4 5 6 3 - Store 1452 1454 - 1455: 6(int) Load 8(invocation) - 1456: 72(ptr) AccessChain 27(data) 59 38 - 1457: 20(ivec4) Load 1456 - 1458: 20(ivec4) GroupNonUniformIAdd 34 ExclusiveScan 1457 - 1459: 72(ptr) AccessChain 27(data) 1455 38 - Store 1459 1458 - 1460: 6(int) Load 8(invocation) - 1461: 95(ptr) AccessChain 27(data) 29 49 30 - 1462: 6(int) Load 1461 - 1463: 6(int) GroupNonUniformIAdd 34 ExclusiveScan 1462 - 1464: 95(ptr) AccessChain 27(data) 1460 49 30 - Store 1464 1463 - 1465: 6(int) Load 8(invocation) - 1466: 102(ptr) AccessChain 27(data) 38 49 - 1467: 21(ivec4) Load 1466 - 1468: 101(ivec2) VectorShuffle 1467 1467 0 1 - 1469: 101(ivec2) GroupNonUniformIAdd 34 ExclusiveScan 1468 - 1470: 102(ptr) AccessChain 27(data) 1465 49 + 1442: 20(ivec4) GroupNonUniformBitwiseOr 34 InclusiveScan 1441 + 1443: 78(ptr) AccessChain 27(data) 1439 38 + Store 1443 1442 + 1444: 6(int) Load 8(invocation) + 1445: 105(ptr) AccessChain 27(data) 29 51 30 + 1446: 6(int) Load 1445 + 1447: 6(int) GroupNonUniformBitwiseOr 34 InclusiveScan 1446 + 1448: 105(ptr) AccessChain 27(data) 1444 51 30 + Store 1448 1447 + 1449: 6(int) Load 8(invocation) + 1450: 112(ptr) AccessChain 27(data) 38 51 + 1451: 21(ivec4) Load 1450 + 1452: 111(ivec2) VectorShuffle 1451 1451 0 1 + 1453: 111(ivec2) GroupNonUniformBitwiseOr 34 InclusiveScan 1452 + 1454: 105(ptr) AccessChain 27(data) 1449 51 30 + 1455: 6(int) CompositeExtract 1453 0 + Store 1454 1455 + 1456: 105(ptr) AccessChain 27(data) 1449 51 47 + 1457: 6(int) CompositeExtract 1453 1 + Store 1456 1457 + 1458: 6(int) Load 8(invocation) + 1459: 112(ptr) AccessChain 27(data) 51 51 + 1460: 21(ivec4) Load 1459 + 1461: 122(ivec3) VectorShuffle 1460 1460 0 1 2 + 1462: 122(ivec3) GroupNonUniformBitwiseOr 34 InclusiveScan 1461 + 1463: 105(ptr) AccessChain 27(data) 1458 51 30 + 1464: 6(int) CompositeExtract 1462 0 + Store 1463 1464 + 1465: 105(ptr) AccessChain 27(data) 1458 51 47 + 1466: 6(int) CompositeExtract 1462 1 + Store 1465 1466 + 1467: 105(ptr) AccessChain 27(data) 1458 51 61 + 1468: 6(int) CompositeExtract 1462 2 + Store 1467 1468 + 1469: 6(int) Load 8(invocation) + 1470: 112(ptr) AccessChain 27(data) 65 51 1471: 21(ivec4) Load 1470 - 1472: 21(ivec4) VectorShuffle 1471 1469 4 5 2 3 - Store 1470 1472 - 1473: 6(int) Load 8(invocation) - 1474: 102(ptr) AccessChain 27(data) 49 49 - 1475: 21(ivec4) Load 1474 - 1476: 111(ivec3) VectorShuffle 1475 1475 0 1 2 - 1477: 111(ivec3) GroupNonUniformIAdd 34 ExclusiveScan 1476 - 1478: 102(ptr) AccessChain 27(data) 1473 49 - 1479: 21(ivec4) Load 1478 - 1480: 21(ivec4) VectorShuffle 1479 1477 4 5 6 3 - Store 1478 1480 + 1472: 21(ivec4) GroupNonUniformBitwiseOr 34 InclusiveScan 1471 + 1473: 112(ptr) AccessChain 27(data) 1469 51 + Store 1473 1472 + 1474: 6(int) Load 8(invocation) + 1475: 71(ptr) AccessChain 27(data) 29 38 30 + 1476: 19(int) Load 1475 + 1477: 595(bool) SLessThan 1476 29 + 1478: 595(bool) GroupNonUniformLogicalOr 34 InclusiveScan 1477 + 1479: 19(int) Select 1478 38 29 + 1480: 71(ptr) AccessChain 27(data) 1474 38 30 + Store 1480 1479 1481: 6(int) Load 8(invocation) - 1482: 102(ptr) AccessChain 27(data) 59 49 - 1483: 21(ivec4) Load 1482 - 1484: 21(ivec4) GroupNonUniformIAdd 34 ExclusiveScan 1483 - 1485: 102(ptr) AccessChain 27(data) 1481 49 - Store 1485 1484 - 1486: 6(int) Load 8(invocation) - 1487: 125(ptr) AccessChain 27(data) 29 59 30 - 1488:22(float64_t) Load 1487 - 1489:22(float64_t) GroupNonUniformFAdd 34 ExclusiveScan 1488 - 1490: 125(ptr) AccessChain 27(data) 1486 59 30 - Store 1490 1489 - 1491: 6(int) Load 8(invocation) - 1492: 132(ptr) AccessChain 27(data) 38 59 - 1493: 23(f64vec4) Load 1492 - 1494:131(f64vec2) VectorShuffle 1493 1493 0 1 - 1495:131(f64vec2) GroupNonUniformFAdd 34 ExclusiveScan 1494 - 1496: 132(ptr) AccessChain 27(data) 1491 59 - 1497: 23(f64vec4) Load 1496 - 1498: 23(f64vec4) VectorShuffle 1497 1495 4 5 2 3 - Store 1496 1498 - 1499: 6(int) Load 8(invocation) - 1500: 132(ptr) AccessChain 27(data) 49 59 - 1501: 23(f64vec4) Load 1500 - 1502:141(f64vec3) VectorShuffle 1501 1501 0 1 2 - 1503:141(f64vec3) GroupNonUniformFAdd 34 ExclusiveScan 1502 - 1504: 132(ptr) AccessChain 27(data) 1499 59 - 1505: 23(f64vec4) Load 1504 - 1506: 23(f64vec4) VectorShuffle 1505 1503 4 5 6 3 - Store 1504 1506 - 1507: 6(int) Load 8(invocation) - 1508: 132(ptr) AccessChain 27(data) 59 59 - 1509: 23(f64vec4) Load 1508 - 1510: 23(f64vec4) GroupNonUniformFAdd 34 ExclusiveScan 1509 - 1511: 132(ptr) AccessChain 27(data) 1507 59 + 1482: 78(ptr) AccessChain 27(data) 38 38 + 1483: 20(ivec4) Load 1482 + 1484: 77(ivec2) VectorShuffle 1483 1483 0 1 + 1485: 605(bvec2) SLessThan 1484 604 + 1486: 605(bvec2) GroupNonUniformLogicalOr 34 InclusiveScan 1485 + 1487: 77(ivec2) Select 1486 608 604 + 1488: 71(ptr) AccessChain 27(data) 1481 38 30 + 1489: 19(int) CompositeExtract 1487 0 + Store 1488 1489 + 1490: 71(ptr) AccessChain 27(data) 1481 38 47 + 1491: 19(int) CompositeExtract 1487 1 + Store 1490 1491 + 1492: 6(int) Load 8(invocation) + 1493: 78(ptr) AccessChain 27(data) 38 38 + 1494: 20(ivec4) Load 1493 + 1495: 88(ivec3) VectorShuffle 1494 1494 0 1 2 + 1496: 619(bvec3) SLessThan 1495 618 + 1497: 619(bvec3) GroupNonUniformLogicalOr 34 InclusiveScan 1496 + 1498: 88(ivec3) Select 1497 622 618 + 1499: 71(ptr) AccessChain 27(data) 1492 38 30 + 1500: 19(int) CompositeExtract 1498 0 + Store 1499 1500 + 1501: 71(ptr) AccessChain 27(data) 1492 38 47 + 1502: 19(int) CompositeExtract 1498 1 + Store 1501 1502 + 1503: 71(ptr) AccessChain 27(data) 1492 38 61 + 1504: 19(int) CompositeExtract 1498 2 + Store 1503 1504 + 1505: 6(int) Load 8(invocation) + 1506: 78(ptr) AccessChain 27(data) 38 38 + 1507: 20(ivec4) Load 1506 + 1508: 634(bvec4) SLessThan 1507 633 + 1509: 634(bvec4) GroupNonUniformLogicalOr 34 InclusiveScan 1508 + 1510: 20(ivec4) Select 1509 637 633 + 1511: 78(ptr) AccessChain 27(data) 1505 38 Store 1511 1510 1512: 6(int) Load 8(invocation) - 1513: 31(ptr) AccessChain 27(data) 29 29 30 - 1514: 17(float) Load 1513 - 1515: 17(float) GroupNonUniformFMul 34 ExclusiveScan 1514 - 1516: 31(ptr) AccessChain 27(data) 1512 29 30 + 1513: 71(ptr) AccessChain 27(data) 29 38 30 + 1514: 19(int) Load 1513 + 1515: 19(int) GroupNonUniformBitwiseXor 34 InclusiveScan 1514 + 1516: 71(ptr) AccessChain 27(data) 1512 38 30 Store 1516 1515 1517: 6(int) Load 8(invocation) - 1518: 40(ptr) AccessChain 27(data) 38 29 - 1519: 18(fvec4) Load 1518 - 1520: 39(fvec2) VectorShuffle 1519 1519 0 1 - 1521: 39(fvec2) GroupNonUniformFMul 34 ExclusiveScan 1520 - 1522: 40(ptr) AccessChain 27(data) 1517 29 - 1523: 18(fvec4) Load 1522 - 1524: 18(fvec4) VectorShuffle 1523 1521 4 5 2 3 - Store 1522 1524 - 1525: 6(int) Load 8(invocation) - 1526: 40(ptr) AccessChain 27(data) 49 29 - 1527: 18(fvec4) Load 1526 - 1528: 50(fvec3) VectorShuffle 1527 1527 0 1 2 - 1529: 50(fvec3) GroupNonUniformFMul 34 ExclusiveScan 1528 - 1530: 40(ptr) AccessChain 27(data) 1525 29 - 1531: 18(fvec4) Load 1530 - 1532: 18(fvec4) VectorShuffle 1531 1529 4 5 6 3 - Store 1530 1532 - 1533: 6(int) Load 8(invocation) - 1534: 40(ptr) AccessChain 27(data) 59 29 - 1535: 18(fvec4) Load 1534 - 1536: 18(fvec4) GroupNonUniformFMul 34 ExclusiveScan 1535 - 1537: 40(ptr) AccessChain 27(data) 1533 29 - Store 1537 1536 - 1538: 6(int) Load 8(invocation) - 1539: 65(ptr) AccessChain 27(data) 29 38 30 - 1540: 19(int) Load 1539 - 1541: 19(int) GroupNonUniformIMul 34 ExclusiveScan 1540 - 1542: 65(ptr) AccessChain 27(data) 1538 38 30 - Store 1542 1541 - 1543: 6(int) Load 8(invocation) - 1544: 72(ptr) AccessChain 27(data) 38 38 - 1545: 20(ivec4) Load 1544 - 1546: 71(ivec2) VectorShuffle 1545 1545 0 1 - 1547: 71(ivec2) GroupNonUniformIMul 34 ExclusiveScan 1546 - 1548: 72(ptr) AccessChain 27(data) 1543 38 - 1549: 20(ivec4) Load 1548 - 1550: 20(ivec4) VectorShuffle 1549 1547 4 5 2 3 - Store 1548 1550 - 1551: 6(int) Load 8(invocation) - 1552: 72(ptr) AccessChain 27(data) 49 38 - 1553: 20(ivec4) Load 1552 - 1554: 81(ivec3) VectorShuffle 1553 1553 0 1 2 - 1555: 81(ivec3) GroupNonUniformIMul 34 ExclusiveScan 1554 - 1556: 72(ptr) AccessChain 27(data) 1551 38 - 1557: 20(ivec4) Load 1556 - 1558: 20(ivec4) VectorShuffle 1557 1555 4 5 6 3 - Store 1556 1558 - 1559: 6(int) Load 8(invocation) - 1560: 72(ptr) AccessChain 27(data) 59 38 - 1561: 20(ivec4) Load 1560 - 1562: 20(ivec4) GroupNonUniformIMul 34 ExclusiveScan 1561 - 1563: 72(ptr) AccessChain 27(data) 1559 38 - Store 1563 1562 - 1564: 6(int) Load 8(invocation) - 1565: 95(ptr) AccessChain 27(data) 29 49 30 - 1566: 6(int) Load 1565 - 1567: 6(int) GroupNonUniformIMul 34 ExclusiveScan 1566 - 1568: 95(ptr) AccessChain 27(data) 1564 49 30 - Store 1568 1567 - 1569: 6(int) Load 8(invocation) - 1570: 102(ptr) AccessChain 27(data) 38 49 - 1571: 21(ivec4) Load 1570 - 1572: 101(ivec2) VectorShuffle 1571 1571 0 1 - 1573: 101(ivec2) GroupNonUniformIMul 34 ExclusiveScan 1572 - 1574: 102(ptr) AccessChain 27(data) 1569 49 - 1575: 21(ivec4) Load 1574 - 1576: 21(ivec4) VectorShuffle 1575 1573 4 5 2 3 - Store 1574 1576 - 1577: 6(int) Load 8(invocation) - 1578: 102(ptr) AccessChain 27(data) 49 49 - 1579: 21(ivec4) Load 1578 - 1580: 111(ivec3) VectorShuffle 1579 1579 0 1 2 - 1581: 111(ivec3) GroupNonUniformIMul 34 ExclusiveScan 1580 - 1582: 102(ptr) AccessChain 27(data) 1577 49 - 1583: 21(ivec4) Load 1582 - 1584: 21(ivec4) VectorShuffle 1583 1581 4 5 6 3 - Store 1582 1584 - 1585: 6(int) Load 8(invocation) - 1586: 102(ptr) AccessChain 27(data) 59 49 - 1587: 21(ivec4) Load 1586 - 1588: 21(ivec4) GroupNonUniformIMul 34 ExclusiveScan 1587 - 1589: 102(ptr) AccessChain 27(data) 1585 49 - Store 1589 1588 + 1518: 78(ptr) AccessChain 27(data) 38 38 + 1519: 20(ivec4) Load 1518 + 1520: 77(ivec2) VectorShuffle 1519 1519 0 1 + 1521: 77(ivec2) GroupNonUniformBitwiseXor 34 InclusiveScan 1520 + 1522: 71(ptr) AccessChain 27(data) 1517 38 30 + 1523: 19(int) CompositeExtract 1521 0 + Store 1522 1523 + 1524: 71(ptr) AccessChain 27(data) 1517 38 47 + 1525: 19(int) CompositeExtract 1521 1 + Store 1524 1525 + 1526: 6(int) Load 8(invocation) + 1527: 78(ptr) AccessChain 27(data) 51 38 + 1528: 20(ivec4) Load 1527 + 1529: 88(ivec3) VectorShuffle 1528 1528 0 1 2 + 1530: 88(ivec3) GroupNonUniformBitwiseXor 34 InclusiveScan 1529 + 1531: 71(ptr) AccessChain 27(data) 1526 38 30 + 1532: 19(int) CompositeExtract 1530 0 + Store 1531 1532 + 1533: 71(ptr) AccessChain 27(data) 1526 38 47 + 1534: 19(int) CompositeExtract 1530 1 + Store 1533 1534 + 1535: 71(ptr) AccessChain 27(data) 1526 38 61 + 1536: 19(int) CompositeExtract 1530 2 + Store 1535 1536 + 1537: 6(int) Load 8(invocation) + 1538: 78(ptr) AccessChain 27(data) 65 38 + 1539: 20(ivec4) Load 1538 + 1540: 20(ivec4) GroupNonUniformBitwiseXor 34 InclusiveScan 1539 + 1541: 78(ptr) AccessChain 27(data) 1537 38 + Store 1541 1540 + 1542: 6(int) Load 8(invocation) + 1543: 105(ptr) AccessChain 27(data) 29 51 30 + 1544: 6(int) Load 1543 + 1545: 6(int) GroupNonUniformBitwiseXor 34 InclusiveScan 1544 + 1546: 105(ptr) AccessChain 27(data) 1542 51 30 + Store 1546 1545 + 1547: 6(int) Load 8(invocation) + 1548: 112(ptr) AccessChain 27(data) 38 51 + 1549: 21(ivec4) Load 1548 + 1550: 111(ivec2) VectorShuffle 1549 1549 0 1 + 1551: 111(ivec2) GroupNonUniformBitwiseXor 34 InclusiveScan 1550 + 1552: 105(ptr) AccessChain 27(data) 1547 51 30 + 1553: 6(int) CompositeExtract 1551 0 + Store 1552 1553 + 1554: 105(ptr) AccessChain 27(data) 1547 51 47 + 1555: 6(int) CompositeExtract 1551 1 + Store 1554 1555 + 1556: 6(int) Load 8(invocation) + 1557: 112(ptr) AccessChain 27(data) 51 51 + 1558: 21(ivec4) Load 1557 + 1559: 122(ivec3) VectorShuffle 1558 1558 0 1 2 + 1560: 122(ivec3) GroupNonUniformBitwiseXor 34 InclusiveScan 1559 + 1561: 105(ptr) AccessChain 27(data) 1556 51 30 + 1562: 6(int) CompositeExtract 1560 0 + Store 1561 1562 + 1563: 105(ptr) AccessChain 27(data) 1556 51 47 + 1564: 6(int) CompositeExtract 1560 1 + Store 1563 1564 + 1565: 105(ptr) AccessChain 27(data) 1556 51 61 + 1566: 6(int) CompositeExtract 1560 2 + Store 1565 1566 + 1567: 6(int) Load 8(invocation) + 1568: 112(ptr) AccessChain 27(data) 65 51 + 1569: 21(ivec4) Load 1568 + 1570: 21(ivec4) GroupNonUniformBitwiseXor 34 InclusiveScan 1569 + 1571: 112(ptr) AccessChain 27(data) 1567 51 + Store 1571 1570 + 1572: 6(int) Load 8(invocation) + 1573: 71(ptr) AccessChain 27(data) 29 38 30 + 1574: 19(int) Load 1573 + 1575: 595(bool) SLessThan 1574 29 + 1576: 595(bool) GroupNonUniformLogicalXor 34 InclusiveScan 1575 + 1577: 19(int) Select 1576 38 29 + 1578: 71(ptr) AccessChain 27(data) 1572 38 30 + Store 1578 1577 + 1579: 6(int) Load 8(invocation) + 1580: 78(ptr) AccessChain 27(data) 38 38 + 1581: 20(ivec4) Load 1580 + 1582: 77(ivec2) VectorShuffle 1581 1581 0 1 + 1583: 605(bvec2) SLessThan 1582 604 + 1584: 605(bvec2) GroupNonUniformLogicalXor 34 InclusiveScan 1583 + 1585: 77(ivec2) Select 1584 608 604 + 1586: 71(ptr) AccessChain 27(data) 1579 38 30 + 1587: 19(int) CompositeExtract 1585 0 + Store 1586 1587 + 1588: 71(ptr) AccessChain 27(data) 1579 38 47 + 1589: 19(int) CompositeExtract 1585 1 + Store 1588 1589 1590: 6(int) Load 8(invocation) - 1591: 125(ptr) AccessChain 27(data) 29 59 30 - 1592:22(float64_t) Load 1591 - 1593:22(float64_t) GroupNonUniformFMul 34 ExclusiveScan 1592 - 1594: 125(ptr) AccessChain 27(data) 1590 59 30 - Store 1594 1593 - 1595: 6(int) Load 8(invocation) - 1596: 132(ptr) AccessChain 27(data) 38 59 - 1597: 23(f64vec4) Load 1596 - 1598:131(f64vec2) VectorShuffle 1597 1597 0 1 - 1599:131(f64vec2) GroupNonUniformFMul 34 ExclusiveScan 1598 - 1600: 132(ptr) AccessChain 27(data) 1595 59 - 1601: 23(f64vec4) Load 1600 - 1602: 23(f64vec4) VectorShuffle 1601 1599 4 5 2 3 - Store 1600 1602 + 1591: 78(ptr) AccessChain 27(data) 38 38 + 1592: 20(ivec4) Load 1591 + 1593: 88(ivec3) VectorShuffle 1592 1592 0 1 2 + 1594: 619(bvec3) SLessThan 1593 618 + 1595: 619(bvec3) GroupNonUniformLogicalXor 34 InclusiveScan 1594 + 1596: 88(ivec3) Select 1595 622 618 + 1597: 71(ptr) AccessChain 27(data) 1590 38 30 + 1598: 19(int) CompositeExtract 1596 0 + Store 1597 1598 + 1599: 71(ptr) AccessChain 27(data) 1590 38 47 + 1600: 19(int) CompositeExtract 1596 1 + Store 1599 1600 + 1601: 71(ptr) AccessChain 27(data) 1590 38 61 + 1602: 19(int) CompositeExtract 1596 2 + Store 1601 1602 1603: 6(int) Load 8(invocation) - 1604: 132(ptr) AccessChain 27(data) 49 59 - 1605: 23(f64vec4) Load 1604 - 1606:141(f64vec3) VectorShuffle 1605 1605 0 1 2 - 1607:141(f64vec3) GroupNonUniformFMul 34 ExclusiveScan 1606 - 1608: 132(ptr) AccessChain 27(data) 1603 59 - 1609: 23(f64vec4) Load 1608 - 1610: 23(f64vec4) VectorShuffle 1609 1607 4 5 6 3 - Store 1608 1610 - 1611: 6(int) Load 8(invocation) - 1612: 132(ptr) AccessChain 27(data) 59 59 - 1613: 23(f64vec4) Load 1612 - 1614: 23(f64vec4) GroupNonUniformFMul 34 ExclusiveScan 1613 - 1615: 132(ptr) AccessChain 27(data) 1611 59 - Store 1615 1614 - 1616: 6(int) Load 8(invocation) - 1617: 31(ptr) AccessChain 27(data) 29 29 30 - 1618: 17(float) Load 1617 - 1619: 17(float) GroupNonUniformFMin 34 ExclusiveScan 1618 - 1620: 31(ptr) AccessChain 27(data) 1616 29 30 - Store 1620 1619 - 1621: 6(int) Load 8(invocation) - 1622: 40(ptr) AccessChain 27(data) 38 29 - 1623: 18(fvec4) Load 1622 - 1624: 39(fvec2) VectorShuffle 1623 1623 0 1 - 1625: 39(fvec2) GroupNonUniformFMin 34 ExclusiveScan 1624 - 1626: 40(ptr) AccessChain 27(data) 1621 29 - 1627: 18(fvec4) Load 1626 - 1628: 18(fvec4) VectorShuffle 1627 1625 4 5 2 3 - Store 1626 1628 - 1629: 6(int) Load 8(invocation) - 1630: 40(ptr) AccessChain 27(data) 49 29 - 1631: 18(fvec4) Load 1630 - 1632: 50(fvec3) VectorShuffle 1631 1631 0 1 2 - 1633: 50(fvec3) GroupNonUniformFMin 34 ExclusiveScan 1632 - 1634: 40(ptr) AccessChain 27(data) 1629 29 - 1635: 18(fvec4) Load 1634 - 1636: 18(fvec4) VectorShuffle 1635 1633 4 5 6 3 - Store 1634 1636 - 1637: 6(int) Load 8(invocation) - 1638: 40(ptr) AccessChain 27(data) 59 29 - 1639: 18(fvec4) Load 1638 - 1640: 18(fvec4) GroupNonUniformFMin 34 ExclusiveScan 1639 - 1641: 40(ptr) AccessChain 27(data) 1637 29 - Store 1641 1640 - 1642: 6(int) Load 8(invocation) - 1643: 65(ptr) AccessChain 27(data) 29 38 30 - 1644: 19(int) Load 1643 - 1645: 19(int) GroupNonUniformSMin 34 ExclusiveScan 1644 - 1646: 65(ptr) AccessChain 27(data) 1642 38 30 - Store 1646 1645 - 1647: 6(int) Load 8(invocation) - 1648: 72(ptr) AccessChain 27(data) 38 38 - 1649: 20(ivec4) Load 1648 - 1650: 71(ivec2) VectorShuffle 1649 1649 0 1 - 1651: 71(ivec2) GroupNonUniformSMin 34 ExclusiveScan 1650 - 1652: 72(ptr) AccessChain 27(data) 1647 38 - 1653: 20(ivec4) Load 1652 - 1654: 20(ivec4) VectorShuffle 1653 1651 4 5 2 3 - Store 1652 1654 - 1655: 6(int) Load 8(invocation) - 1656: 72(ptr) AccessChain 27(data) 49 38 - 1657: 20(ivec4) Load 1656 - 1658: 81(ivec3) VectorShuffle 1657 1657 0 1 2 - 1659: 81(ivec3) GroupNonUniformSMin 34 ExclusiveScan 1658 - 1660: 72(ptr) AccessChain 27(data) 1655 38 - 1661: 20(ivec4) Load 1660 - 1662: 20(ivec4) VectorShuffle 1661 1659 4 5 6 3 - Store 1660 1662 - 1663: 6(int) Load 8(invocation) - 1664: 72(ptr) AccessChain 27(data) 59 38 - 1665: 20(ivec4) Load 1664 - 1666: 20(ivec4) GroupNonUniformSMin 34 ExclusiveScan 1665 - 1667: 72(ptr) AccessChain 27(data) 1663 38 - Store 1667 1666 - 1668: 6(int) Load 8(invocation) - 1669: 95(ptr) AccessChain 27(data) 29 49 30 - 1670: 6(int) Load 1669 - 1671: 6(int) GroupNonUniformUMin 34 ExclusiveScan 1670 - 1672: 95(ptr) AccessChain 27(data) 1668 49 30 - Store 1672 1671 - 1673: 6(int) Load 8(invocation) - 1674: 102(ptr) AccessChain 27(data) 38 49 - 1675: 21(ivec4) Load 1674 - 1676: 101(ivec2) VectorShuffle 1675 1675 0 1 - 1677: 101(ivec2) GroupNonUniformUMin 34 ExclusiveScan 1676 - 1678: 102(ptr) AccessChain 27(data) 1673 49 - 1679: 21(ivec4) Load 1678 - 1680: 21(ivec4) VectorShuffle 1679 1677 4 5 2 3 - Store 1678 1680 - 1681: 6(int) Load 8(invocation) - 1682: 102(ptr) AccessChain 27(data) 49 49 - 1683: 21(ivec4) Load 1682 - 1684: 111(ivec3) VectorShuffle 1683 1683 0 1 2 - 1685: 111(ivec3) GroupNonUniformUMin 34 ExclusiveScan 1684 - 1686: 102(ptr) AccessChain 27(data) 1681 49 - 1687: 21(ivec4) Load 1686 - 1688: 21(ivec4) VectorShuffle 1687 1685 4 5 6 3 - Store 1686 1688 - 1689: 6(int) Load 8(invocation) - 1690: 102(ptr) AccessChain 27(data) 59 49 - 1691: 21(ivec4) Load 1690 - 1692: 21(ivec4) GroupNonUniformUMin 34 ExclusiveScan 1691 - 1693: 102(ptr) AccessChain 27(data) 1689 49 - Store 1693 1692 - 1694: 6(int) Load 8(invocation) - 1695: 125(ptr) AccessChain 27(data) 29 59 30 - 1696:22(float64_t) Load 1695 - 1697:22(float64_t) GroupNonUniformFMin 34 ExclusiveScan 1696 - 1698: 125(ptr) AccessChain 27(data) 1694 59 30 - Store 1698 1697 - 1699: 6(int) Load 8(invocation) - 1700: 132(ptr) AccessChain 27(data) 38 59 - 1701: 23(f64vec4) Load 1700 - 1702:131(f64vec2) VectorShuffle 1701 1701 0 1 - 1703:131(f64vec2) GroupNonUniformFMin 34 ExclusiveScan 1702 - 1704: 132(ptr) AccessChain 27(data) 1699 59 - 1705: 23(f64vec4) Load 1704 - 1706: 23(f64vec4) VectorShuffle 1705 1703 4 5 2 3 - Store 1704 1706 - 1707: 6(int) Load 8(invocation) - 1708: 132(ptr) AccessChain 27(data) 49 59 - 1709: 23(f64vec4) Load 1708 - 1710:141(f64vec3) VectorShuffle 1709 1709 0 1 2 - 1711:141(f64vec3) GroupNonUniformFMin 34 ExclusiveScan 1710 - 1712: 132(ptr) AccessChain 27(data) 1707 59 - 1713: 23(f64vec4) Load 1712 - 1714: 23(f64vec4) VectorShuffle 1713 1711 4 5 6 3 - Store 1712 1714 - 1715: 6(int) Load 8(invocation) - 1716: 132(ptr) AccessChain 27(data) 59 59 - 1717: 23(f64vec4) Load 1716 - 1718: 23(f64vec4) GroupNonUniformFMin 34 ExclusiveScan 1717 - 1719: 132(ptr) AccessChain 27(data) 1715 59 - Store 1719 1718 - 1720: 6(int) Load 8(invocation) - 1721: 31(ptr) AccessChain 27(data) 29 29 30 - 1722: 17(float) Load 1721 - 1723: 17(float) GroupNonUniformFMax 34 ExclusiveScan 1722 - 1724: 31(ptr) AccessChain 27(data) 1720 29 30 - Store 1724 1723 + 1604: 78(ptr) AccessChain 27(data) 38 38 + 1605: 20(ivec4) Load 1604 + 1606: 634(bvec4) SLessThan 1605 633 + 1607: 634(bvec4) GroupNonUniformLogicalXor 34 InclusiveScan 1606 + 1608: 20(ivec4) Select 1607 637 633 + 1609: 78(ptr) AccessChain 27(data) 1603 38 + Store 1609 1608 + 1610: 6(int) Load 8(invocation) + 1611: 31(ptr) AccessChain 27(data) 29 29 30 + 1612: 17(float) Load 1611 + 1613: 17(float) GroupNonUniformFAdd 34 ExclusiveScan 1612 + 1614: 31(ptr) AccessChain 27(data) 1610 29 30 + Store 1614 1613 + 1615: 6(int) Load 8(invocation) + 1616: 40(ptr) AccessChain 27(data) 38 29 + 1617: 18(fvec4) Load 1616 + 1618: 39(fvec2) VectorShuffle 1617 1617 0 1 + 1619: 39(fvec2) GroupNonUniformFAdd 34 ExclusiveScan 1618 + 1620: 31(ptr) AccessChain 27(data) 1615 29 30 + 1621: 17(float) CompositeExtract 1619 0 + Store 1620 1621 + 1622: 31(ptr) AccessChain 27(data) 1615 29 47 + 1623: 17(float) CompositeExtract 1619 1 + Store 1622 1623 + 1624: 6(int) Load 8(invocation) + 1625: 40(ptr) AccessChain 27(data) 51 29 + 1626: 18(fvec4) Load 1625 + 1627: 52(fvec3) VectorShuffle 1626 1626 0 1 2 + 1628: 52(fvec3) GroupNonUniformFAdd 34 ExclusiveScan 1627 + 1629: 31(ptr) AccessChain 27(data) 1624 29 30 + 1630: 17(float) CompositeExtract 1628 0 + Store 1629 1630 + 1631: 31(ptr) AccessChain 27(data) 1624 29 47 + 1632: 17(float) CompositeExtract 1628 1 + Store 1631 1632 + 1633: 31(ptr) AccessChain 27(data) 1624 29 61 + 1634: 17(float) CompositeExtract 1628 2 + Store 1633 1634 + 1635: 6(int) Load 8(invocation) + 1636: 40(ptr) AccessChain 27(data) 65 29 + 1637: 18(fvec4) Load 1636 + 1638: 18(fvec4) GroupNonUniformFAdd 34 ExclusiveScan 1637 + 1639: 40(ptr) AccessChain 27(data) 1635 29 + Store 1639 1638 + 1640: 6(int) Load 8(invocation) + 1641: 71(ptr) AccessChain 27(data) 29 38 30 + 1642: 19(int) Load 1641 + 1643: 19(int) GroupNonUniformIAdd 34 ExclusiveScan 1642 + 1644: 71(ptr) AccessChain 27(data) 1640 38 30 + Store 1644 1643 + 1645: 6(int) Load 8(invocation) + 1646: 78(ptr) AccessChain 27(data) 38 38 + 1647: 20(ivec4) Load 1646 + 1648: 77(ivec2) VectorShuffle 1647 1647 0 1 + 1649: 77(ivec2) GroupNonUniformIAdd 34 ExclusiveScan 1648 + 1650: 71(ptr) AccessChain 27(data) 1645 38 30 + 1651: 19(int) CompositeExtract 1649 0 + Store 1650 1651 + 1652: 71(ptr) AccessChain 27(data) 1645 38 47 + 1653: 19(int) CompositeExtract 1649 1 + Store 1652 1653 + 1654: 6(int) Load 8(invocation) + 1655: 78(ptr) AccessChain 27(data) 51 38 + 1656: 20(ivec4) Load 1655 + 1657: 88(ivec3) VectorShuffle 1656 1656 0 1 2 + 1658: 88(ivec3) GroupNonUniformIAdd 34 ExclusiveScan 1657 + 1659: 71(ptr) AccessChain 27(data) 1654 38 30 + 1660: 19(int) CompositeExtract 1658 0 + Store 1659 1660 + 1661: 71(ptr) AccessChain 27(data) 1654 38 47 + 1662: 19(int) CompositeExtract 1658 1 + Store 1661 1662 + 1663: 71(ptr) AccessChain 27(data) 1654 38 61 + 1664: 19(int) CompositeExtract 1658 2 + Store 1663 1664 + 1665: 6(int) Load 8(invocation) + 1666: 78(ptr) AccessChain 27(data) 65 38 + 1667: 20(ivec4) Load 1666 + 1668: 20(ivec4) GroupNonUniformIAdd 34 ExclusiveScan 1667 + 1669: 78(ptr) AccessChain 27(data) 1665 38 + Store 1669 1668 + 1670: 6(int) Load 8(invocation) + 1671: 105(ptr) AccessChain 27(data) 29 51 30 + 1672: 6(int) Load 1671 + 1673: 6(int) GroupNonUniformIAdd 34 ExclusiveScan 1672 + 1674: 105(ptr) AccessChain 27(data) 1670 51 30 + Store 1674 1673 + 1675: 6(int) Load 8(invocation) + 1676: 112(ptr) AccessChain 27(data) 38 51 + 1677: 21(ivec4) Load 1676 + 1678: 111(ivec2) VectorShuffle 1677 1677 0 1 + 1679: 111(ivec2) GroupNonUniformIAdd 34 ExclusiveScan 1678 + 1680: 105(ptr) AccessChain 27(data) 1675 51 30 + 1681: 6(int) CompositeExtract 1679 0 + Store 1680 1681 + 1682: 105(ptr) AccessChain 27(data) 1675 51 47 + 1683: 6(int) CompositeExtract 1679 1 + Store 1682 1683 + 1684: 6(int) Load 8(invocation) + 1685: 112(ptr) AccessChain 27(data) 51 51 + 1686: 21(ivec4) Load 1685 + 1687: 122(ivec3) VectorShuffle 1686 1686 0 1 2 + 1688: 122(ivec3) GroupNonUniformIAdd 34 ExclusiveScan 1687 + 1689: 105(ptr) AccessChain 27(data) 1684 51 30 + 1690: 6(int) CompositeExtract 1688 0 + Store 1689 1690 + 1691: 105(ptr) AccessChain 27(data) 1684 51 47 + 1692: 6(int) CompositeExtract 1688 1 + Store 1691 1692 + 1693: 105(ptr) AccessChain 27(data) 1684 51 61 + 1694: 6(int) CompositeExtract 1688 2 + Store 1693 1694 + 1695: 6(int) Load 8(invocation) + 1696: 112(ptr) AccessChain 27(data) 65 51 + 1697: 21(ivec4) Load 1696 + 1698: 21(ivec4) GroupNonUniformIAdd 34 ExclusiveScan 1697 + 1699: 112(ptr) AccessChain 27(data) 1695 51 + Store 1699 1698 + 1700: 6(int) Load 8(invocation) + 1701: 139(ptr) AccessChain 27(data) 29 65 30 + 1702:22(float64_t) Load 1701 + 1703:22(float64_t) GroupNonUniformFAdd 34 ExclusiveScan 1702 + 1704: 139(ptr) AccessChain 27(data) 1700 65 30 + Store 1704 1703 + 1705: 6(int) Load 8(invocation) + 1706: 146(ptr) AccessChain 27(data) 38 65 + 1707: 23(f64vec4) Load 1706 + 1708:145(f64vec2) VectorShuffle 1707 1707 0 1 + 1709:145(f64vec2) GroupNonUniformFAdd 34 ExclusiveScan 1708 + 1710: 139(ptr) AccessChain 27(data) 1705 65 30 + 1711:22(float64_t) CompositeExtract 1709 0 + Store 1710 1711 + 1712: 139(ptr) AccessChain 27(data) 1705 65 47 + 1713:22(float64_t) CompositeExtract 1709 1 + Store 1712 1713 + 1714: 6(int) Load 8(invocation) + 1715: 146(ptr) AccessChain 27(data) 51 65 + 1716: 23(f64vec4) Load 1715 + 1717:156(f64vec3) VectorShuffle 1716 1716 0 1 2 + 1718:156(f64vec3) GroupNonUniformFAdd 34 ExclusiveScan 1717 + 1719: 139(ptr) AccessChain 27(data) 1714 65 30 + 1720:22(float64_t) CompositeExtract 1718 0 + Store 1719 1720 + 1721: 139(ptr) AccessChain 27(data) 1714 65 47 + 1722:22(float64_t) CompositeExtract 1718 1 + Store 1721 1722 + 1723: 139(ptr) AccessChain 27(data) 1714 65 61 + 1724:22(float64_t) CompositeExtract 1718 2 + Store 1723 1724 1725: 6(int) Load 8(invocation) - 1726: 40(ptr) AccessChain 27(data) 38 29 - 1727: 18(fvec4) Load 1726 - 1728: 39(fvec2) VectorShuffle 1727 1727 0 1 - 1729: 39(fvec2) GroupNonUniformFMax 34 ExclusiveScan 1728 - 1730: 40(ptr) AccessChain 27(data) 1725 29 - 1731: 18(fvec4) Load 1730 - 1732: 18(fvec4) VectorShuffle 1731 1729 4 5 2 3 - Store 1730 1732 - 1733: 6(int) Load 8(invocation) - 1734: 40(ptr) AccessChain 27(data) 49 29 - 1735: 18(fvec4) Load 1734 - 1736: 50(fvec3) VectorShuffle 1735 1735 0 1 2 - 1737: 50(fvec3) GroupNonUniformFMax 34 ExclusiveScan 1736 - 1738: 40(ptr) AccessChain 27(data) 1733 29 - 1739: 18(fvec4) Load 1738 - 1740: 18(fvec4) VectorShuffle 1739 1737 4 5 6 3 - Store 1738 1740 - 1741: 6(int) Load 8(invocation) - 1742: 40(ptr) AccessChain 27(data) 59 29 - 1743: 18(fvec4) Load 1742 - 1744: 18(fvec4) GroupNonUniformFMax 34 ExclusiveScan 1743 - 1745: 40(ptr) AccessChain 27(data) 1741 29 - Store 1745 1744 - 1746: 6(int) Load 8(invocation) - 1747: 65(ptr) AccessChain 27(data) 29 38 30 - 1748: 19(int) Load 1747 - 1749: 19(int) GroupNonUniformSMax 34 ExclusiveScan 1748 - 1750: 65(ptr) AccessChain 27(data) 1746 38 30 - Store 1750 1749 - 1751: 6(int) Load 8(invocation) - 1752: 72(ptr) AccessChain 27(data) 38 38 - 1753: 20(ivec4) Load 1752 - 1754: 71(ivec2) VectorShuffle 1753 1753 0 1 - 1755: 71(ivec2) GroupNonUniformSMax 34 ExclusiveScan 1754 - 1756: 72(ptr) AccessChain 27(data) 1751 38 - 1757: 20(ivec4) Load 1756 - 1758: 20(ivec4) VectorShuffle 1757 1755 4 5 2 3 - Store 1756 1758 - 1759: 6(int) Load 8(invocation) - 1760: 72(ptr) AccessChain 27(data) 49 38 - 1761: 20(ivec4) Load 1760 - 1762: 81(ivec3) VectorShuffle 1761 1761 0 1 2 - 1763: 81(ivec3) GroupNonUniformSMax 34 ExclusiveScan 1762 - 1764: 72(ptr) AccessChain 27(data) 1759 38 - 1765: 20(ivec4) Load 1764 - 1766: 20(ivec4) VectorShuffle 1765 1763 4 5 6 3 - Store 1764 1766 - 1767: 6(int) Load 8(invocation) - 1768: 72(ptr) AccessChain 27(data) 59 38 - 1769: 20(ivec4) Load 1768 - 1770: 20(ivec4) GroupNonUniformSMax 34 ExclusiveScan 1769 - 1771: 72(ptr) AccessChain 27(data) 1767 38 - Store 1771 1770 - 1772: 6(int) Load 8(invocation) - 1773: 95(ptr) AccessChain 27(data) 29 49 30 - 1774: 6(int) Load 1773 - 1775: 6(int) GroupNonUniformUMax 34 ExclusiveScan 1774 - 1776: 95(ptr) AccessChain 27(data) 1772 49 30 - Store 1776 1775 - 1777: 6(int) Load 8(invocation) - 1778: 102(ptr) AccessChain 27(data) 38 49 - 1779: 21(ivec4) Load 1778 - 1780: 101(ivec2) VectorShuffle 1779 1779 0 1 - 1781: 101(ivec2) GroupNonUniformUMax 34 ExclusiveScan 1780 - 1782: 102(ptr) AccessChain 27(data) 1777 49 - 1783: 21(ivec4) Load 1782 - 1784: 21(ivec4) VectorShuffle 1783 1781 4 5 2 3 - Store 1782 1784 + 1726: 146(ptr) AccessChain 27(data) 65 65 + 1727: 23(f64vec4) Load 1726 + 1728: 23(f64vec4) GroupNonUniformFAdd 34 ExclusiveScan 1727 + 1729: 146(ptr) AccessChain 27(data) 1725 65 + Store 1729 1728 + 1730: 6(int) Load 8(invocation) + 1731: 31(ptr) AccessChain 27(data) 29 29 30 + 1732: 17(float) Load 1731 + 1733: 17(float) GroupNonUniformFMul 34 ExclusiveScan 1732 + 1734: 31(ptr) AccessChain 27(data) 1730 29 30 + Store 1734 1733 + 1735: 6(int) Load 8(invocation) + 1736: 40(ptr) AccessChain 27(data) 38 29 + 1737: 18(fvec4) Load 1736 + 1738: 39(fvec2) VectorShuffle 1737 1737 0 1 + 1739: 39(fvec2) GroupNonUniformFMul 34 ExclusiveScan 1738 + 1740: 31(ptr) AccessChain 27(data) 1735 29 30 + 1741: 17(float) CompositeExtract 1739 0 + Store 1740 1741 + 1742: 31(ptr) AccessChain 27(data) 1735 29 47 + 1743: 17(float) CompositeExtract 1739 1 + Store 1742 1743 + 1744: 6(int) Load 8(invocation) + 1745: 40(ptr) AccessChain 27(data) 51 29 + 1746: 18(fvec4) Load 1745 + 1747: 52(fvec3) VectorShuffle 1746 1746 0 1 2 + 1748: 52(fvec3) GroupNonUniformFMul 34 ExclusiveScan 1747 + 1749: 31(ptr) AccessChain 27(data) 1744 29 30 + 1750: 17(float) CompositeExtract 1748 0 + Store 1749 1750 + 1751: 31(ptr) AccessChain 27(data) 1744 29 47 + 1752: 17(float) CompositeExtract 1748 1 + Store 1751 1752 + 1753: 31(ptr) AccessChain 27(data) 1744 29 61 + 1754: 17(float) CompositeExtract 1748 2 + Store 1753 1754 + 1755: 6(int) Load 8(invocation) + 1756: 40(ptr) AccessChain 27(data) 65 29 + 1757: 18(fvec4) Load 1756 + 1758: 18(fvec4) GroupNonUniformFMul 34 ExclusiveScan 1757 + 1759: 40(ptr) AccessChain 27(data) 1755 29 + Store 1759 1758 + 1760: 6(int) Load 8(invocation) + 1761: 71(ptr) AccessChain 27(data) 29 38 30 + 1762: 19(int) Load 1761 + 1763: 19(int) GroupNonUniformIMul 34 ExclusiveScan 1762 + 1764: 71(ptr) AccessChain 27(data) 1760 38 30 + Store 1764 1763 + 1765: 6(int) Load 8(invocation) + 1766: 78(ptr) AccessChain 27(data) 38 38 + 1767: 20(ivec4) Load 1766 + 1768: 77(ivec2) VectorShuffle 1767 1767 0 1 + 1769: 77(ivec2) GroupNonUniformIMul 34 ExclusiveScan 1768 + 1770: 71(ptr) AccessChain 27(data) 1765 38 30 + 1771: 19(int) CompositeExtract 1769 0 + Store 1770 1771 + 1772: 71(ptr) AccessChain 27(data) 1765 38 47 + 1773: 19(int) CompositeExtract 1769 1 + Store 1772 1773 + 1774: 6(int) Load 8(invocation) + 1775: 78(ptr) AccessChain 27(data) 51 38 + 1776: 20(ivec4) Load 1775 + 1777: 88(ivec3) VectorShuffle 1776 1776 0 1 2 + 1778: 88(ivec3) GroupNonUniformIMul 34 ExclusiveScan 1777 + 1779: 71(ptr) AccessChain 27(data) 1774 38 30 + 1780: 19(int) CompositeExtract 1778 0 + Store 1779 1780 + 1781: 71(ptr) AccessChain 27(data) 1774 38 47 + 1782: 19(int) CompositeExtract 1778 1 + Store 1781 1782 + 1783: 71(ptr) AccessChain 27(data) 1774 38 61 + 1784: 19(int) CompositeExtract 1778 2 + Store 1783 1784 1785: 6(int) Load 8(invocation) - 1786: 102(ptr) AccessChain 27(data) 49 49 - 1787: 21(ivec4) Load 1786 - 1788: 111(ivec3) VectorShuffle 1787 1787 0 1 2 - 1789: 111(ivec3) GroupNonUniformUMax 34 ExclusiveScan 1788 - 1790: 102(ptr) AccessChain 27(data) 1785 49 - 1791: 21(ivec4) Load 1790 - 1792: 21(ivec4) VectorShuffle 1791 1789 4 5 6 3 - Store 1790 1792 - 1793: 6(int) Load 8(invocation) - 1794: 102(ptr) AccessChain 27(data) 59 49 - 1795: 21(ivec4) Load 1794 - 1796: 21(ivec4) GroupNonUniformUMax 34 ExclusiveScan 1795 - 1797: 102(ptr) AccessChain 27(data) 1793 49 - Store 1797 1796 - 1798: 6(int) Load 8(invocation) - 1799: 125(ptr) AccessChain 27(data) 29 59 30 - 1800:22(float64_t) Load 1799 - 1801:22(float64_t) GroupNonUniformFMax 34 ExclusiveScan 1800 - 1802: 125(ptr) AccessChain 27(data) 1798 59 30 - Store 1802 1801 - 1803: 6(int) Load 8(invocation) - 1804: 132(ptr) AccessChain 27(data) 38 59 - 1805: 23(f64vec4) Load 1804 - 1806:131(f64vec2) VectorShuffle 1805 1805 0 1 - 1807:131(f64vec2) GroupNonUniformFMax 34 ExclusiveScan 1806 - 1808: 132(ptr) AccessChain 27(data) 1803 59 - 1809: 23(f64vec4) Load 1808 - 1810: 23(f64vec4) VectorShuffle 1809 1807 4 5 2 3 - Store 1808 1810 - 1811: 6(int) Load 8(invocation) - 1812: 132(ptr) AccessChain 27(data) 49 59 - 1813: 23(f64vec4) Load 1812 - 1814:141(f64vec3) VectorShuffle 1813 1813 0 1 2 - 1815:141(f64vec3) GroupNonUniformFMax 34 ExclusiveScan 1814 - 1816: 132(ptr) AccessChain 27(data) 1811 59 - 1817: 23(f64vec4) Load 1816 - 1818: 23(f64vec4) VectorShuffle 1817 1815 4 5 6 3 - Store 1816 1818 - 1819: 6(int) Load 8(invocation) - 1820: 132(ptr) AccessChain 27(data) 59 59 - 1821: 23(f64vec4) Load 1820 - 1822: 23(f64vec4) GroupNonUniformFMax 34 ExclusiveScan 1821 - 1823: 132(ptr) AccessChain 27(data) 1819 59 - Store 1823 1822 - 1824: 6(int) Load 8(invocation) - 1825: 65(ptr) AccessChain 27(data) 29 38 30 - 1826: 19(int) Load 1825 - 1827: 19(int) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1826 - 1828: 65(ptr) AccessChain 27(data) 1824 38 30 - Store 1828 1827 - 1829: 6(int) Load 8(invocation) - 1830: 72(ptr) AccessChain 27(data) 38 38 - 1831: 20(ivec4) Load 1830 - 1832: 71(ivec2) VectorShuffle 1831 1831 0 1 - 1833: 71(ivec2) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1832 - 1834: 72(ptr) AccessChain 27(data) 1829 38 - 1835: 20(ivec4) Load 1834 - 1836: 20(ivec4) VectorShuffle 1835 1833 4 5 2 3 - Store 1834 1836 - 1837: 6(int) Load 8(invocation) - 1838: 72(ptr) AccessChain 27(data) 49 38 - 1839: 20(ivec4) Load 1838 - 1840: 81(ivec3) VectorShuffle 1839 1839 0 1 2 - 1841: 81(ivec3) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1840 - 1842: 72(ptr) AccessChain 27(data) 1837 38 - 1843: 20(ivec4) Load 1842 - 1844: 20(ivec4) VectorShuffle 1843 1841 4 5 6 3 - Store 1842 1844 + 1786: 78(ptr) AccessChain 27(data) 65 38 + 1787: 20(ivec4) Load 1786 + 1788: 20(ivec4) GroupNonUniformIMul 34 ExclusiveScan 1787 + 1789: 78(ptr) AccessChain 27(data) 1785 38 + Store 1789 1788 + 1790: 6(int) Load 8(invocation) + 1791: 105(ptr) AccessChain 27(data) 29 51 30 + 1792: 6(int) Load 1791 + 1793: 6(int) GroupNonUniformIMul 34 ExclusiveScan 1792 + 1794: 105(ptr) AccessChain 27(data) 1790 51 30 + Store 1794 1793 + 1795: 6(int) Load 8(invocation) + 1796: 112(ptr) AccessChain 27(data) 38 51 + 1797: 21(ivec4) Load 1796 + 1798: 111(ivec2) VectorShuffle 1797 1797 0 1 + 1799: 111(ivec2) GroupNonUniformIMul 34 ExclusiveScan 1798 + 1800: 105(ptr) AccessChain 27(data) 1795 51 30 + 1801: 6(int) CompositeExtract 1799 0 + Store 1800 1801 + 1802: 105(ptr) AccessChain 27(data) 1795 51 47 + 1803: 6(int) CompositeExtract 1799 1 + Store 1802 1803 + 1804: 6(int) Load 8(invocation) + 1805: 112(ptr) AccessChain 27(data) 51 51 + 1806: 21(ivec4) Load 1805 + 1807: 122(ivec3) VectorShuffle 1806 1806 0 1 2 + 1808: 122(ivec3) GroupNonUniformIMul 34 ExclusiveScan 1807 + 1809: 105(ptr) AccessChain 27(data) 1804 51 30 + 1810: 6(int) CompositeExtract 1808 0 + Store 1809 1810 + 1811: 105(ptr) AccessChain 27(data) 1804 51 47 + 1812: 6(int) CompositeExtract 1808 1 + Store 1811 1812 + 1813: 105(ptr) AccessChain 27(data) 1804 51 61 + 1814: 6(int) CompositeExtract 1808 2 + Store 1813 1814 + 1815: 6(int) Load 8(invocation) + 1816: 112(ptr) AccessChain 27(data) 65 51 + 1817: 21(ivec4) Load 1816 + 1818: 21(ivec4) GroupNonUniformIMul 34 ExclusiveScan 1817 + 1819: 112(ptr) AccessChain 27(data) 1815 51 + Store 1819 1818 + 1820: 6(int) Load 8(invocation) + 1821: 139(ptr) AccessChain 27(data) 29 65 30 + 1822:22(float64_t) Load 1821 + 1823:22(float64_t) GroupNonUniformFMul 34 ExclusiveScan 1822 + 1824: 139(ptr) AccessChain 27(data) 1820 65 30 + Store 1824 1823 + 1825: 6(int) Load 8(invocation) + 1826: 146(ptr) AccessChain 27(data) 38 65 + 1827: 23(f64vec4) Load 1826 + 1828:145(f64vec2) VectorShuffle 1827 1827 0 1 + 1829:145(f64vec2) GroupNonUniformFMul 34 ExclusiveScan 1828 + 1830: 139(ptr) AccessChain 27(data) 1825 65 30 + 1831:22(float64_t) CompositeExtract 1829 0 + Store 1830 1831 + 1832: 139(ptr) AccessChain 27(data) 1825 65 47 + 1833:22(float64_t) CompositeExtract 1829 1 + Store 1832 1833 + 1834: 6(int) Load 8(invocation) + 1835: 146(ptr) AccessChain 27(data) 51 65 + 1836: 23(f64vec4) Load 1835 + 1837:156(f64vec3) VectorShuffle 1836 1836 0 1 2 + 1838:156(f64vec3) GroupNonUniformFMul 34 ExclusiveScan 1837 + 1839: 139(ptr) AccessChain 27(data) 1834 65 30 + 1840:22(float64_t) CompositeExtract 1838 0 + Store 1839 1840 + 1841: 139(ptr) AccessChain 27(data) 1834 65 47 + 1842:22(float64_t) CompositeExtract 1838 1 + Store 1841 1842 + 1843: 139(ptr) AccessChain 27(data) 1834 65 61 + 1844:22(float64_t) CompositeExtract 1838 2 + Store 1843 1844 1845: 6(int) Load 8(invocation) - 1846: 72(ptr) AccessChain 27(data) 59 38 - 1847: 20(ivec4) Load 1846 - 1848: 20(ivec4) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1847 - 1849: 72(ptr) AccessChain 27(data) 1845 38 + 1846: 146(ptr) AccessChain 27(data) 65 65 + 1847: 23(f64vec4) Load 1846 + 1848: 23(f64vec4) GroupNonUniformFMul 34 ExclusiveScan 1847 + 1849: 146(ptr) AccessChain 27(data) 1845 65 Store 1849 1848 1850: 6(int) Load 8(invocation) - 1851: 95(ptr) AccessChain 27(data) 29 49 30 - 1852: 6(int) Load 1851 - 1853: 6(int) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1852 - 1854: 95(ptr) AccessChain 27(data) 1850 49 30 + 1851: 31(ptr) AccessChain 27(data) 29 29 30 + 1852: 17(float) Load 1851 + 1853: 17(float) GroupNonUniformFMin 34 ExclusiveScan 1852 + 1854: 31(ptr) AccessChain 27(data) 1850 29 30 Store 1854 1853 1855: 6(int) Load 8(invocation) - 1856: 102(ptr) AccessChain 27(data) 38 49 - 1857: 21(ivec4) Load 1856 - 1858: 101(ivec2) VectorShuffle 1857 1857 0 1 - 1859: 101(ivec2) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1858 - 1860: 102(ptr) AccessChain 27(data) 1855 49 - 1861: 21(ivec4) Load 1860 - 1862: 21(ivec4) VectorShuffle 1861 1859 4 5 2 3 - Store 1860 1862 - 1863: 6(int) Load 8(invocation) - 1864: 102(ptr) AccessChain 27(data) 49 49 - 1865: 21(ivec4) Load 1864 - 1866: 111(ivec3) VectorShuffle 1865 1865 0 1 2 - 1867: 111(ivec3) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1866 - 1868: 102(ptr) AccessChain 27(data) 1863 49 - 1869: 21(ivec4) Load 1868 - 1870: 21(ivec4) VectorShuffle 1869 1867 4 5 6 3 - Store 1868 1870 - 1871: 6(int) Load 8(invocation) - 1872: 102(ptr) AccessChain 27(data) 59 49 - 1873: 21(ivec4) Load 1872 - 1874: 21(ivec4) GroupNonUniformBitwiseAnd 34 ExclusiveScan 1873 - 1875: 102(ptr) AccessChain 27(data) 1871 49 - Store 1875 1874 - 1876: 6(int) Load 8(invocation) - 1877: 65(ptr) AccessChain 27(data) 29 38 30 - 1878: 19(int) Load 1877 - 1879: 521(bool) SLessThan 1878 29 - 1880: 521(bool) GroupNonUniformLogicalAnd 34 ExclusiveScan 1879 - 1881: 19(int) Select 1880 38 29 - 1882: 65(ptr) AccessChain 27(data) 1876 38 30 - Store 1882 1881 - 1883: 6(int) Load 8(invocation) - 1884: 72(ptr) AccessChain 27(data) 38 38 - 1885: 20(ivec4) Load 1884 - 1886: 71(ivec2) VectorShuffle 1885 1885 0 1 - 1887: 531(bvec2) SLessThan 1886 530 - 1888: 531(bvec2) GroupNonUniformLogicalAnd 34 ExclusiveScan 1887 - 1889: 71(ivec2) Select 1888 534 530 - 1890: 72(ptr) AccessChain 27(data) 1883 38 - 1891: 20(ivec4) Load 1890 - 1892: 20(ivec4) VectorShuffle 1891 1889 4 5 2 3 - Store 1890 1892 - 1893: 6(int) Load 8(invocation) - 1894: 72(ptr) AccessChain 27(data) 38 38 - 1895: 20(ivec4) Load 1894 - 1896: 81(ivec3) VectorShuffle 1895 1895 0 1 2 - 1897: 544(bvec3) SLessThan 1896 543 - 1898: 544(bvec3) GroupNonUniformLogicalAnd 34 ExclusiveScan 1897 - 1899: 81(ivec3) Select 1898 547 543 - 1900: 72(ptr) AccessChain 27(data) 1893 38 - 1901: 20(ivec4) Load 1900 - 1902: 20(ivec4) VectorShuffle 1901 1899 4 5 6 3 - Store 1900 1902 - 1903: 6(int) Load 8(invocation) - 1904: 72(ptr) AccessChain 27(data) 38 38 - 1905: 20(ivec4) Load 1904 - 1906: 556(bvec4) SLessThan 1905 555 - 1907: 556(bvec4) GroupNonUniformLogicalAnd 34 ExclusiveScan 1906 - 1908: 20(ivec4) Select 1907 559 555 - 1909: 72(ptr) AccessChain 27(data) 1903 38 + 1856: 40(ptr) AccessChain 27(data) 38 29 + 1857: 18(fvec4) Load 1856 + 1858: 39(fvec2) VectorShuffle 1857 1857 0 1 + 1859: 39(fvec2) GroupNonUniformFMin 34 ExclusiveScan 1858 + 1860: 31(ptr) AccessChain 27(data) 1855 29 30 + 1861: 17(float) CompositeExtract 1859 0 + Store 1860 1861 + 1862: 31(ptr) AccessChain 27(data) 1855 29 47 + 1863: 17(float) CompositeExtract 1859 1 + Store 1862 1863 + 1864: 6(int) Load 8(invocation) + 1865: 40(ptr) AccessChain 27(data) 51 29 + 1866: 18(fvec4) Load 1865 + 1867: 52(fvec3) VectorShuffle 1866 1866 0 1 2 + 1868: 52(fvec3) GroupNonUniformFMin 34 ExclusiveScan 1867 + 1869: 31(ptr) AccessChain 27(data) 1864 29 30 + 1870: 17(float) CompositeExtract 1868 0 + Store 1869 1870 + 1871: 31(ptr) AccessChain 27(data) 1864 29 47 + 1872: 17(float) CompositeExtract 1868 1 + Store 1871 1872 + 1873: 31(ptr) AccessChain 27(data) 1864 29 61 + 1874: 17(float) CompositeExtract 1868 2 + Store 1873 1874 + 1875: 6(int) Load 8(invocation) + 1876: 40(ptr) AccessChain 27(data) 65 29 + 1877: 18(fvec4) Load 1876 + 1878: 18(fvec4) GroupNonUniformFMin 34 ExclusiveScan 1877 + 1879: 40(ptr) AccessChain 27(data) 1875 29 + Store 1879 1878 + 1880: 6(int) Load 8(invocation) + 1881: 71(ptr) AccessChain 27(data) 29 38 30 + 1882: 19(int) Load 1881 + 1883: 19(int) GroupNonUniformSMin 34 ExclusiveScan 1882 + 1884: 71(ptr) AccessChain 27(data) 1880 38 30 + Store 1884 1883 + 1885: 6(int) Load 8(invocation) + 1886: 78(ptr) AccessChain 27(data) 38 38 + 1887: 20(ivec4) Load 1886 + 1888: 77(ivec2) VectorShuffle 1887 1887 0 1 + 1889: 77(ivec2) GroupNonUniformSMin 34 ExclusiveScan 1888 + 1890: 71(ptr) AccessChain 27(data) 1885 38 30 + 1891: 19(int) CompositeExtract 1889 0 + Store 1890 1891 + 1892: 71(ptr) AccessChain 27(data) 1885 38 47 + 1893: 19(int) CompositeExtract 1889 1 + Store 1892 1893 + 1894: 6(int) Load 8(invocation) + 1895: 78(ptr) AccessChain 27(data) 51 38 + 1896: 20(ivec4) Load 1895 + 1897: 88(ivec3) VectorShuffle 1896 1896 0 1 2 + 1898: 88(ivec3) GroupNonUniformSMin 34 ExclusiveScan 1897 + 1899: 71(ptr) AccessChain 27(data) 1894 38 30 + 1900: 19(int) CompositeExtract 1898 0 + Store 1899 1900 + 1901: 71(ptr) AccessChain 27(data) 1894 38 47 + 1902: 19(int) CompositeExtract 1898 1 + Store 1901 1902 + 1903: 71(ptr) AccessChain 27(data) 1894 38 61 + 1904: 19(int) CompositeExtract 1898 2 + Store 1903 1904 + 1905: 6(int) Load 8(invocation) + 1906: 78(ptr) AccessChain 27(data) 65 38 + 1907: 20(ivec4) Load 1906 + 1908: 20(ivec4) GroupNonUniformSMin 34 ExclusiveScan 1907 + 1909: 78(ptr) AccessChain 27(data) 1905 38 Store 1909 1908 1910: 6(int) Load 8(invocation) - 1911: 65(ptr) AccessChain 27(data) 29 38 30 - 1912: 19(int) Load 1911 - 1913: 19(int) GroupNonUniformBitwiseOr 34 ExclusiveScan 1912 - 1914: 65(ptr) AccessChain 27(data) 1910 38 30 + 1911: 105(ptr) AccessChain 27(data) 29 51 30 + 1912: 6(int) Load 1911 + 1913: 6(int) GroupNonUniformUMin 34 ExclusiveScan 1912 + 1914: 105(ptr) AccessChain 27(data) 1910 51 30 Store 1914 1913 1915: 6(int) Load 8(invocation) - 1916: 72(ptr) AccessChain 27(data) 38 38 - 1917: 20(ivec4) Load 1916 - 1918: 71(ivec2) VectorShuffle 1917 1917 0 1 - 1919: 71(ivec2) GroupNonUniformBitwiseOr 34 ExclusiveScan 1918 - 1920: 72(ptr) AccessChain 27(data) 1915 38 - 1921: 20(ivec4) Load 1920 - 1922: 20(ivec4) VectorShuffle 1921 1919 4 5 2 3 - Store 1920 1922 - 1923: 6(int) Load 8(invocation) - 1924: 72(ptr) AccessChain 27(data) 49 38 - 1925: 20(ivec4) Load 1924 - 1926: 81(ivec3) VectorShuffle 1925 1925 0 1 2 - 1927: 81(ivec3) GroupNonUniformBitwiseOr 34 ExclusiveScan 1926 - 1928: 72(ptr) AccessChain 27(data) 1923 38 - 1929: 20(ivec4) Load 1928 - 1930: 20(ivec4) VectorShuffle 1929 1927 4 5 6 3 - Store 1928 1930 - 1931: 6(int) Load 8(invocation) - 1932: 72(ptr) AccessChain 27(data) 59 38 - 1933: 20(ivec4) Load 1932 - 1934: 20(ivec4) GroupNonUniformBitwiseOr 34 ExclusiveScan 1933 - 1935: 72(ptr) AccessChain 27(data) 1931 38 - Store 1935 1934 - 1936: 6(int) Load 8(invocation) - 1937: 95(ptr) AccessChain 27(data) 29 49 30 - 1938: 6(int) Load 1937 - 1939: 6(int) GroupNonUniformBitwiseOr 34 ExclusiveScan 1938 - 1940: 95(ptr) AccessChain 27(data) 1936 49 30 - Store 1940 1939 - 1941: 6(int) Load 8(invocation) - 1942: 102(ptr) AccessChain 27(data) 38 49 - 1943: 21(ivec4) Load 1942 - 1944: 101(ivec2) VectorShuffle 1943 1943 0 1 - 1945: 101(ivec2) GroupNonUniformBitwiseOr 34 ExclusiveScan 1944 - 1946: 102(ptr) AccessChain 27(data) 1941 49 - 1947: 21(ivec4) Load 1946 - 1948: 21(ivec4) VectorShuffle 1947 1945 4 5 2 3 - Store 1946 1948 - 1949: 6(int) Load 8(invocation) - 1950: 102(ptr) AccessChain 27(data) 49 49 - 1951: 21(ivec4) Load 1950 - 1952: 111(ivec3) VectorShuffle 1951 1951 0 1 2 - 1953: 111(ivec3) GroupNonUniformBitwiseOr 34 ExclusiveScan 1952 - 1954: 102(ptr) AccessChain 27(data) 1949 49 - 1955: 21(ivec4) Load 1954 - 1956: 21(ivec4) VectorShuffle 1955 1953 4 5 6 3 - Store 1954 1956 - 1957: 6(int) Load 8(invocation) - 1958: 102(ptr) AccessChain 27(data) 59 49 - 1959: 21(ivec4) Load 1958 - 1960: 21(ivec4) GroupNonUniformBitwiseOr 34 ExclusiveScan 1959 - 1961: 102(ptr) AccessChain 27(data) 1957 49 - Store 1961 1960 - 1962: 6(int) Load 8(invocation) - 1963: 65(ptr) AccessChain 27(data) 29 38 30 - 1964: 19(int) Load 1963 - 1965: 521(bool) SLessThan 1964 29 - 1966: 521(bool) GroupNonUniformLogicalOr 34 ExclusiveScan 1965 - 1967: 19(int) Select 1966 38 29 - 1968: 65(ptr) AccessChain 27(data) 1962 38 30 - Store 1968 1967 - 1969: 6(int) Load 8(invocation) - 1970: 72(ptr) AccessChain 27(data) 38 38 - 1971: 20(ivec4) Load 1970 - 1972: 71(ivec2) VectorShuffle 1971 1971 0 1 - 1973: 531(bvec2) SLessThan 1972 530 - 1974: 531(bvec2) GroupNonUniformLogicalOr 34 ExclusiveScan 1973 - 1975: 71(ivec2) Select 1974 534 530 - 1976: 72(ptr) AccessChain 27(data) 1969 38 - 1977: 20(ivec4) Load 1976 - 1978: 20(ivec4) VectorShuffle 1977 1975 4 5 2 3 - Store 1976 1978 - 1979: 6(int) Load 8(invocation) - 1980: 72(ptr) AccessChain 27(data) 38 38 - 1981: 20(ivec4) Load 1980 - 1982: 81(ivec3) VectorShuffle 1981 1981 0 1 2 - 1983: 544(bvec3) SLessThan 1982 543 - 1984: 544(bvec3) GroupNonUniformLogicalOr 34 ExclusiveScan 1983 - 1985: 81(ivec3) Select 1984 547 543 - 1986: 72(ptr) AccessChain 27(data) 1979 38 - 1987: 20(ivec4) Load 1986 - 1988: 20(ivec4) VectorShuffle 1987 1985 4 5 6 3 - Store 1986 1988 - 1989: 6(int) Load 8(invocation) - 1990: 72(ptr) AccessChain 27(data) 38 38 - 1991: 20(ivec4) Load 1990 - 1992: 556(bvec4) SLessThan 1991 555 - 1993: 556(bvec4) GroupNonUniformLogicalOr 34 ExclusiveScan 1992 - 1994: 20(ivec4) Select 1993 559 555 - 1995: 72(ptr) AccessChain 27(data) 1989 38 - Store 1995 1994 - 1996: 6(int) Load 8(invocation) - 1997: 65(ptr) AccessChain 27(data) 29 38 30 - 1998: 19(int) Load 1997 - 1999: 19(int) GroupNonUniformBitwiseXor 34 ExclusiveScan 1998 - 2000: 65(ptr) AccessChain 27(data) 1996 38 30 - Store 2000 1999 - 2001: 6(int) Load 8(invocation) - 2002: 72(ptr) AccessChain 27(data) 38 38 - 2003: 20(ivec4) Load 2002 - 2004: 71(ivec2) VectorShuffle 2003 2003 0 1 - 2005: 71(ivec2) GroupNonUniformBitwiseXor 34 ExclusiveScan 2004 - 2006: 72(ptr) AccessChain 27(data) 2001 38 + 1916: 112(ptr) AccessChain 27(data) 38 51 + 1917: 21(ivec4) Load 1916 + 1918: 111(ivec2) VectorShuffle 1917 1917 0 1 + 1919: 111(ivec2) GroupNonUniformUMin 34 ExclusiveScan 1918 + 1920: 105(ptr) AccessChain 27(data) 1915 51 30 + 1921: 6(int) CompositeExtract 1919 0 + Store 1920 1921 + 1922: 105(ptr) AccessChain 27(data) 1915 51 47 + 1923: 6(int) CompositeExtract 1919 1 + Store 1922 1923 + 1924: 6(int) Load 8(invocation) + 1925: 112(ptr) AccessChain 27(data) 51 51 + 1926: 21(ivec4) Load 1925 + 1927: 122(ivec3) VectorShuffle 1926 1926 0 1 2 + 1928: 122(ivec3) GroupNonUniformUMin 34 ExclusiveScan 1927 + 1929: 105(ptr) AccessChain 27(data) 1924 51 30 + 1930: 6(int) CompositeExtract 1928 0 + Store 1929 1930 + 1931: 105(ptr) AccessChain 27(data) 1924 51 47 + 1932: 6(int) CompositeExtract 1928 1 + Store 1931 1932 + 1933: 105(ptr) AccessChain 27(data) 1924 51 61 + 1934: 6(int) CompositeExtract 1928 2 + Store 1933 1934 + 1935: 6(int) Load 8(invocation) + 1936: 112(ptr) AccessChain 27(data) 65 51 + 1937: 21(ivec4) Load 1936 + 1938: 21(ivec4) GroupNonUniformUMin 34 ExclusiveScan 1937 + 1939: 112(ptr) AccessChain 27(data) 1935 51 + Store 1939 1938 + 1940: 6(int) Load 8(invocation) + 1941: 139(ptr) AccessChain 27(data) 29 65 30 + 1942:22(float64_t) Load 1941 + 1943:22(float64_t) GroupNonUniformFMin 34 ExclusiveScan 1942 + 1944: 139(ptr) AccessChain 27(data) 1940 65 30 + Store 1944 1943 + 1945: 6(int) Load 8(invocation) + 1946: 146(ptr) AccessChain 27(data) 38 65 + 1947: 23(f64vec4) Load 1946 + 1948:145(f64vec2) VectorShuffle 1947 1947 0 1 + 1949:145(f64vec2) GroupNonUniformFMin 34 ExclusiveScan 1948 + 1950: 139(ptr) AccessChain 27(data) 1945 65 30 + 1951:22(float64_t) CompositeExtract 1949 0 + Store 1950 1951 + 1952: 139(ptr) AccessChain 27(data) 1945 65 47 + 1953:22(float64_t) CompositeExtract 1949 1 + Store 1952 1953 + 1954: 6(int) Load 8(invocation) + 1955: 146(ptr) AccessChain 27(data) 51 65 + 1956: 23(f64vec4) Load 1955 + 1957:156(f64vec3) VectorShuffle 1956 1956 0 1 2 + 1958:156(f64vec3) GroupNonUniformFMin 34 ExclusiveScan 1957 + 1959: 139(ptr) AccessChain 27(data) 1954 65 30 + 1960:22(float64_t) CompositeExtract 1958 0 + Store 1959 1960 + 1961: 139(ptr) AccessChain 27(data) 1954 65 47 + 1962:22(float64_t) CompositeExtract 1958 1 + Store 1961 1962 + 1963: 139(ptr) AccessChain 27(data) 1954 65 61 + 1964:22(float64_t) CompositeExtract 1958 2 + Store 1963 1964 + 1965: 6(int) Load 8(invocation) + 1966: 146(ptr) AccessChain 27(data) 65 65 + 1967: 23(f64vec4) Load 1966 + 1968: 23(f64vec4) GroupNonUniformFMin 34 ExclusiveScan 1967 + 1969: 146(ptr) AccessChain 27(data) 1965 65 + Store 1969 1968 + 1970: 6(int) Load 8(invocation) + 1971: 31(ptr) AccessChain 27(data) 29 29 30 + 1972: 17(float) Load 1971 + 1973: 17(float) GroupNonUniformFMax 34 ExclusiveScan 1972 + 1974: 31(ptr) AccessChain 27(data) 1970 29 30 + Store 1974 1973 + 1975: 6(int) Load 8(invocation) + 1976: 40(ptr) AccessChain 27(data) 38 29 + 1977: 18(fvec4) Load 1976 + 1978: 39(fvec2) VectorShuffle 1977 1977 0 1 + 1979: 39(fvec2) GroupNonUniformFMax 34 ExclusiveScan 1978 + 1980: 31(ptr) AccessChain 27(data) 1975 29 30 + 1981: 17(float) CompositeExtract 1979 0 + Store 1980 1981 + 1982: 31(ptr) AccessChain 27(data) 1975 29 47 + 1983: 17(float) CompositeExtract 1979 1 + Store 1982 1983 + 1984: 6(int) Load 8(invocation) + 1985: 40(ptr) AccessChain 27(data) 51 29 + 1986: 18(fvec4) Load 1985 + 1987: 52(fvec3) VectorShuffle 1986 1986 0 1 2 + 1988: 52(fvec3) GroupNonUniformFMax 34 ExclusiveScan 1987 + 1989: 31(ptr) AccessChain 27(data) 1984 29 30 + 1990: 17(float) CompositeExtract 1988 0 + Store 1989 1990 + 1991: 31(ptr) AccessChain 27(data) 1984 29 47 + 1992: 17(float) CompositeExtract 1988 1 + Store 1991 1992 + 1993: 31(ptr) AccessChain 27(data) 1984 29 61 + 1994: 17(float) CompositeExtract 1988 2 + Store 1993 1994 + 1995: 6(int) Load 8(invocation) + 1996: 40(ptr) AccessChain 27(data) 65 29 + 1997: 18(fvec4) Load 1996 + 1998: 18(fvec4) GroupNonUniformFMax 34 ExclusiveScan 1997 + 1999: 40(ptr) AccessChain 27(data) 1995 29 + Store 1999 1998 + 2000: 6(int) Load 8(invocation) + 2001: 71(ptr) AccessChain 27(data) 29 38 30 + 2002: 19(int) Load 2001 + 2003: 19(int) GroupNonUniformSMax 34 ExclusiveScan 2002 + 2004: 71(ptr) AccessChain 27(data) 2000 38 30 + Store 2004 2003 + 2005: 6(int) Load 8(invocation) + 2006: 78(ptr) AccessChain 27(data) 38 38 2007: 20(ivec4) Load 2006 - 2008: 20(ivec4) VectorShuffle 2007 2005 4 5 2 3 - Store 2006 2008 - 2009: 6(int) Load 8(invocation) - 2010: 72(ptr) AccessChain 27(data) 49 38 - 2011: 20(ivec4) Load 2010 - 2012: 81(ivec3) VectorShuffle 2011 2011 0 1 2 - 2013: 81(ivec3) GroupNonUniformBitwiseXor 34 ExclusiveScan 2012 - 2014: 72(ptr) AccessChain 27(data) 2009 38 - 2015: 20(ivec4) Load 2014 - 2016: 20(ivec4) VectorShuffle 2015 2013 4 5 6 3 - Store 2014 2016 - 2017: 6(int) Load 8(invocation) - 2018: 72(ptr) AccessChain 27(data) 59 38 - 2019: 20(ivec4) Load 2018 - 2020: 20(ivec4) GroupNonUniformBitwiseXor 34 ExclusiveScan 2019 - 2021: 72(ptr) AccessChain 27(data) 2017 38 - Store 2021 2020 - 2022: 6(int) Load 8(invocation) - 2023: 95(ptr) AccessChain 27(data) 29 49 30 - 2024: 6(int) Load 2023 - 2025: 6(int) GroupNonUniformBitwiseXor 34 ExclusiveScan 2024 - 2026: 95(ptr) AccessChain 27(data) 2022 49 30 - Store 2026 2025 - 2027: 6(int) Load 8(invocation) - 2028: 102(ptr) AccessChain 27(data) 38 49 - 2029: 21(ivec4) Load 2028 - 2030: 101(ivec2) VectorShuffle 2029 2029 0 1 - 2031: 101(ivec2) GroupNonUniformBitwiseXor 34 ExclusiveScan 2030 - 2032: 102(ptr) AccessChain 27(data) 2027 49 - 2033: 21(ivec4) Load 2032 - 2034: 21(ivec4) VectorShuffle 2033 2031 4 5 2 3 - Store 2032 2034 + 2008: 77(ivec2) VectorShuffle 2007 2007 0 1 + 2009: 77(ivec2) GroupNonUniformSMax 34 ExclusiveScan 2008 + 2010: 71(ptr) AccessChain 27(data) 2005 38 30 + 2011: 19(int) CompositeExtract 2009 0 + Store 2010 2011 + 2012: 71(ptr) AccessChain 27(data) 2005 38 47 + 2013: 19(int) CompositeExtract 2009 1 + Store 2012 2013 + 2014: 6(int) Load 8(invocation) + 2015: 78(ptr) AccessChain 27(data) 51 38 + 2016: 20(ivec4) Load 2015 + 2017: 88(ivec3) VectorShuffle 2016 2016 0 1 2 + 2018: 88(ivec3) GroupNonUniformSMax 34 ExclusiveScan 2017 + 2019: 71(ptr) AccessChain 27(data) 2014 38 30 + 2020: 19(int) CompositeExtract 2018 0 + Store 2019 2020 + 2021: 71(ptr) AccessChain 27(data) 2014 38 47 + 2022: 19(int) CompositeExtract 2018 1 + Store 2021 2022 + 2023: 71(ptr) AccessChain 27(data) 2014 38 61 + 2024: 19(int) CompositeExtract 2018 2 + Store 2023 2024 + 2025: 6(int) Load 8(invocation) + 2026: 78(ptr) AccessChain 27(data) 65 38 + 2027: 20(ivec4) Load 2026 + 2028: 20(ivec4) GroupNonUniformSMax 34 ExclusiveScan 2027 + 2029: 78(ptr) AccessChain 27(data) 2025 38 + Store 2029 2028 + 2030: 6(int) Load 8(invocation) + 2031: 105(ptr) AccessChain 27(data) 29 51 30 + 2032: 6(int) Load 2031 + 2033: 6(int) GroupNonUniformUMax 34 ExclusiveScan 2032 + 2034: 105(ptr) AccessChain 27(data) 2030 51 30 + Store 2034 2033 2035: 6(int) Load 8(invocation) - 2036: 102(ptr) AccessChain 27(data) 49 49 + 2036: 112(ptr) AccessChain 27(data) 38 51 2037: 21(ivec4) Load 2036 - 2038: 111(ivec3) VectorShuffle 2037 2037 0 1 2 - 2039: 111(ivec3) GroupNonUniformBitwiseXor 34 ExclusiveScan 2038 - 2040: 102(ptr) AccessChain 27(data) 2035 49 - 2041: 21(ivec4) Load 2040 - 2042: 21(ivec4) VectorShuffle 2041 2039 4 5 6 3 - Store 2040 2042 - 2043: 6(int) Load 8(invocation) - 2044: 102(ptr) AccessChain 27(data) 59 49 - 2045: 21(ivec4) Load 2044 - 2046: 21(ivec4) GroupNonUniformBitwiseXor 34 ExclusiveScan 2045 - 2047: 102(ptr) AccessChain 27(data) 2043 49 - Store 2047 2046 - 2048: 6(int) Load 8(invocation) - 2049: 65(ptr) AccessChain 27(data) 29 38 30 - 2050: 19(int) Load 2049 - 2051: 521(bool) SLessThan 2050 29 - 2052: 521(bool) GroupNonUniformLogicalXor 34 ExclusiveScan 2051 - 2053: 19(int) Select 2052 38 29 - 2054: 65(ptr) AccessChain 27(data) 2048 38 30 - Store 2054 2053 + 2038: 111(ivec2) VectorShuffle 2037 2037 0 1 + 2039: 111(ivec2) GroupNonUniformUMax 34 ExclusiveScan 2038 + 2040: 105(ptr) AccessChain 27(data) 2035 51 30 + 2041: 6(int) CompositeExtract 2039 0 + Store 2040 2041 + 2042: 105(ptr) AccessChain 27(data) 2035 51 47 + 2043: 6(int) CompositeExtract 2039 1 + Store 2042 2043 + 2044: 6(int) Load 8(invocation) + 2045: 112(ptr) AccessChain 27(data) 51 51 + 2046: 21(ivec4) Load 2045 + 2047: 122(ivec3) VectorShuffle 2046 2046 0 1 2 + 2048: 122(ivec3) GroupNonUniformUMax 34 ExclusiveScan 2047 + 2049: 105(ptr) AccessChain 27(data) 2044 51 30 + 2050: 6(int) CompositeExtract 2048 0 + Store 2049 2050 + 2051: 105(ptr) AccessChain 27(data) 2044 51 47 + 2052: 6(int) CompositeExtract 2048 1 + Store 2051 2052 + 2053: 105(ptr) AccessChain 27(data) 2044 51 61 + 2054: 6(int) CompositeExtract 2048 2 + Store 2053 2054 2055: 6(int) Load 8(invocation) - 2056: 72(ptr) AccessChain 27(data) 38 38 - 2057: 20(ivec4) Load 2056 - 2058: 71(ivec2) VectorShuffle 2057 2057 0 1 - 2059: 531(bvec2) SLessThan 2058 530 - 2060: 531(bvec2) GroupNonUniformLogicalXor 34 ExclusiveScan 2059 - 2061: 71(ivec2) Select 2060 534 530 - 2062: 72(ptr) AccessChain 27(data) 2055 38 - 2063: 20(ivec4) Load 2062 - 2064: 20(ivec4) VectorShuffle 2063 2061 4 5 2 3 - Store 2062 2064 + 2056: 112(ptr) AccessChain 27(data) 65 51 + 2057: 21(ivec4) Load 2056 + 2058: 21(ivec4) GroupNonUniformUMax 34 ExclusiveScan 2057 + 2059: 112(ptr) AccessChain 27(data) 2055 51 + Store 2059 2058 + 2060: 6(int) Load 8(invocation) + 2061: 139(ptr) AccessChain 27(data) 29 65 30 + 2062:22(float64_t) Load 2061 + 2063:22(float64_t) GroupNonUniformFMax 34 ExclusiveScan 2062 + 2064: 139(ptr) AccessChain 27(data) 2060 65 30 + Store 2064 2063 2065: 6(int) Load 8(invocation) - 2066: 72(ptr) AccessChain 27(data) 38 38 - 2067: 20(ivec4) Load 2066 - 2068: 81(ivec3) VectorShuffle 2067 2067 0 1 2 - 2069: 544(bvec3) SLessThan 2068 543 - 2070: 544(bvec3) GroupNonUniformLogicalXor 34 ExclusiveScan 2069 - 2071: 81(ivec3) Select 2070 547 543 - 2072: 72(ptr) AccessChain 27(data) 2065 38 - 2073: 20(ivec4) Load 2072 - 2074: 20(ivec4) VectorShuffle 2073 2071 4 5 6 3 - Store 2072 2074 - 2075: 6(int) Load 8(invocation) - 2076: 72(ptr) AccessChain 27(data) 38 38 - 2077: 20(ivec4) Load 2076 - 2078: 556(bvec4) SLessThan 2077 555 - 2079: 556(bvec4) GroupNonUniformLogicalXor 34 ExclusiveScan 2078 - 2080: 20(ivec4) Select 2079 559 555 - 2081: 72(ptr) AccessChain 27(data) 2075 38 - Store 2081 2080 + 2066: 146(ptr) AccessChain 27(data) 38 65 + 2067: 23(f64vec4) Load 2066 + 2068:145(f64vec2) VectorShuffle 2067 2067 0 1 + 2069:145(f64vec2) GroupNonUniformFMax 34 ExclusiveScan 2068 + 2070: 139(ptr) AccessChain 27(data) 2065 65 30 + 2071:22(float64_t) CompositeExtract 2069 0 + Store 2070 2071 + 2072: 139(ptr) AccessChain 27(data) 2065 65 47 + 2073:22(float64_t) CompositeExtract 2069 1 + Store 2072 2073 + 2074: 6(int) Load 8(invocation) + 2075: 146(ptr) AccessChain 27(data) 51 65 + 2076: 23(f64vec4) Load 2075 + 2077:156(f64vec3) VectorShuffle 2076 2076 0 1 2 + 2078:156(f64vec3) GroupNonUniformFMax 34 ExclusiveScan 2077 + 2079: 139(ptr) AccessChain 27(data) 2074 65 30 + 2080:22(float64_t) CompositeExtract 2078 0 + Store 2079 2080 + 2081: 139(ptr) AccessChain 27(data) 2074 65 47 + 2082:22(float64_t) CompositeExtract 2078 1 + Store 2081 2082 + 2083: 139(ptr) AccessChain 27(data) 2074 65 61 + 2084:22(float64_t) CompositeExtract 2078 2 + Store 2083 2084 + 2085: 6(int) Load 8(invocation) + 2086: 146(ptr) AccessChain 27(data) 65 65 + 2087: 23(f64vec4) Load 2086 + 2088: 23(f64vec4) GroupNonUniformFMax 34 ExclusiveScan 2087 + 2089: 146(ptr) AccessChain 27(data) 2085 65 + Store 2089 2088 + 2090: 6(int) Load 8(invocation) + 2091: 71(ptr) AccessChain 27(data) 29 38 30 + 2092: 19(int) Load 2091 + 2093: 19(int) GroupNonUniformBitwiseAnd 34 ExclusiveScan 2092 + 2094: 71(ptr) AccessChain 27(data) 2090 38 30 + Store 2094 2093 + 2095: 6(int) Load 8(invocation) + 2096: 78(ptr) AccessChain 27(data) 38 38 + 2097: 20(ivec4) Load 2096 + 2098: 77(ivec2) VectorShuffle 2097 2097 0 1 + 2099: 77(ivec2) GroupNonUniformBitwiseAnd 34 ExclusiveScan 2098 + 2100: 71(ptr) AccessChain 27(data) 2095 38 30 + 2101: 19(int) CompositeExtract 2099 0 + Store 2100 2101 + 2102: 71(ptr) AccessChain 27(data) 2095 38 47 + 2103: 19(int) CompositeExtract 2099 1 + Store 2102 2103 + 2104: 6(int) Load 8(invocation) + 2105: 78(ptr) AccessChain 27(data) 51 38 + 2106: 20(ivec4) Load 2105 + 2107: 88(ivec3) VectorShuffle 2106 2106 0 1 2 + 2108: 88(ivec3) GroupNonUniformBitwiseAnd 34 ExclusiveScan 2107 + 2109: 71(ptr) AccessChain 27(data) 2104 38 30 + 2110: 19(int) CompositeExtract 2108 0 + Store 2109 2110 + 2111: 71(ptr) AccessChain 27(data) 2104 38 47 + 2112: 19(int) CompositeExtract 2108 1 + Store 2111 2112 + 2113: 71(ptr) AccessChain 27(data) 2104 38 61 + 2114: 19(int) CompositeExtract 2108 2 + Store 2113 2114 + 2115: 6(int) Load 8(invocation) + 2116: 78(ptr) AccessChain 27(data) 65 38 + 2117: 20(ivec4) Load 2116 + 2118: 20(ivec4) GroupNonUniformBitwiseAnd 34 ExclusiveScan 2117 + 2119: 78(ptr) AccessChain 27(data) 2115 38 + Store 2119 2118 + 2120: 6(int) Load 8(invocation) + 2121: 105(ptr) AccessChain 27(data) 29 51 30 + 2122: 6(int) Load 2121 + 2123: 6(int) GroupNonUniformBitwiseAnd 34 ExclusiveScan 2122 + 2124: 105(ptr) AccessChain 27(data) 2120 51 30 + Store 2124 2123 + 2125: 6(int) Load 8(invocation) + 2126: 112(ptr) AccessChain 27(data) 38 51 + 2127: 21(ivec4) Load 2126 + 2128: 111(ivec2) VectorShuffle 2127 2127 0 1 + 2129: 111(ivec2) GroupNonUniformBitwiseAnd 34 ExclusiveScan 2128 + 2130: 105(ptr) AccessChain 27(data) 2125 51 30 + 2131: 6(int) CompositeExtract 2129 0 + Store 2130 2131 + 2132: 105(ptr) AccessChain 27(data) 2125 51 47 + 2133: 6(int) CompositeExtract 2129 1 + Store 2132 2133 + 2134: 6(int) Load 8(invocation) + 2135: 112(ptr) AccessChain 27(data) 51 51 + 2136: 21(ivec4) Load 2135 + 2137: 122(ivec3) VectorShuffle 2136 2136 0 1 2 + 2138: 122(ivec3) GroupNonUniformBitwiseAnd 34 ExclusiveScan 2137 + 2139: 105(ptr) AccessChain 27(data) 2134 51 30 + 2140: 6(int) CompositeExtract 2138 0 + Store 2139 2140 + 2141: 105(ptr) AccessChain 27(data) 2134 51 47 + 2142: 6(int) CompositeExtract 2138 1 + Store 2141 2142 + 2143: 105(ptr) AccessChain 27(data) 2134 51 61 + 2144: 6(int) CompositeExtract 2138 2 + Store 2143 2144 + 2145: 6(int) Load 8(invocation) + 2146: 112(ptr) AccessChain 27(data) 65 51 + 2147: 21(ivec4) Load 2146 + 2148: 21(ivec4) GroupNonUniformBitwiseAnd 34 ExclusiveScan 2147 + 2149: 112(ptr) AccessChain 27(data) 2145 51 + Store 2149 2148 + 2150: 6(int) Load 8(invocation) + 2151: 71(ptr) AccessChain 27(data) 29 38 30 + 2152: 19(int) Load 2151 + 2153: 595(bool) SLessThan 2152 29 + 2154: 595(bool) GroupNonUniformLogicalAnd 34 ExclusiveScan 2153 + 2155: 19(int) Select 2154 38 29 + 2156: 71(ptr) AccessChain 27(data) 2150 38 30 + Store 2156 2155 + 2157: 6(int) Load 8(invocation) + 2158: 78(ptr) AccessChain 27(data) 38 38 + 2159: 20(ivec4) Load 2158 + 2160: 77(ivec2) VectorShuffle 2159 2159 0 1 + 2161: 605(bvec2) SLessThan 2160 604 + 2162: 605(bvec2) GroupNonUniformLogicalAnd 34 ExclusiveScan 2161 + 2163: 77(ivec2) Select 2162 608 604 + 2164: 71(ptr) AccessChain 27(data) 2157 38 30 + 2165: 19(int) CompositeExtract 2163 0 + Store 2164 2165 + 2166: 71(ptr) AccessChain 27(data) 2157 38 47 + 2167: 19(int) CompositeExtract 2163 1 + Store 2166 2167 + 2168: 6(int) Load 8(invocation) + 2169: 78(ptr) AccessChain 27(data) 38 38 + 2170: 20(ivec4) Load 2169 + 2171: 88(ivec3) VectorShuffle 2170 2170 0 1 2 + 2172: 619(bvec3) SLessThan 2171 618 + 2173: 619(bvec3) GroupNonUniformLogicalAnd 34 ExclusiveScan 2172 + 2174: 88(ivec3) Select 2173 622 618 + 2175: 71(ptr) AccessChain 27(data) 2168 38 30 + 2176: 19(int) CompositeExtract 2174 0 + Store 2175 2176 + 2177: 71(ptr) AccessChain 27(data) 2168 38 47 + 2178: 19(int) CompositeExtract 2174 1 + Store 2177 2178 + 2179: 71(ptr) AccessChain 27(data) 2168 38 61 + 2180: 19(int) CompositeExtract 2174 2 + Store 2179 2180 + 2181: 6(int) Load 8(invocation) + 2182: 78(ptr) AccessChain 27(data) 38 38 + 2183: 20(ivec4) Load 2182 + 2184: 634(bvec4) SLessThan 2183 633 + 2185: 634(bvec4) GroupNonUniformLogicalAnd 34 ExclusiveScan 2184 + 2186: 20(ivec4) Select 2185 637 633 + 2187: 78(ptr) AccessChain 27(data) 2181 38 + Store 2187 2186 + 2188: 6(int) Load 8(invocation) + 2189: 71(ptr) AccessChain 27(data) 29 38 30 + 2190: 19(int) Load 2189 + 2191: 19(int) GroupNonUniformBitwiseOr 34 ExclusiveScan 2190 + 2192: 71(ptr) AccessChain 27(data) 2188 38 30 + Store 2192 2191 + 2193: 6(int) Load 8(invocation) + 2194: 78(ptr) AccessChain 27(data) 38 38 + 2195: 20(ivec4) Load 2194 + 2196: 77(ivec2) VectorShuffle 2195 2195 0 1 + 2197: 77(ivec2) GroupNonUniformBitwiseOr 34 ExclusiveScan 2196 + 2198: 71(ptr) AccessChain 27(data) 2193 38 30 + 2199: 19(int) CompositeExtract 2197 0 + Store 2198 2199 + 2200: 71(ptr) AccessChain 27(data) 2193 38 47 + 2201: 19(int) CompositeExtract 2197 1 + Store 2200 2201 + 2202: 6(int) Load 8(invocation) + 2203: 78(ptr) AccessChain 27(data) 51 38 + 2204: 20(ivec4) Load 2203 + 2205: 88(ivec3) VectorShuffle 2204 2204 0 1 2 + 2206: 88(ivec3) GroupNonUniformBitwiseOr 34 ExclusiveScan 2205 + 2207: 71(ptr) AccessChain 27(data) 2202 38 30 + 2208: 19(int) CompositeExtract 2206 0 + Store 2207 2208 + 2209: 71(ptr) AccessChain 27(data) 2202 38 47 + 2210: 19(int) CompositeExtract 2206 1 + Store 2209 2210 + 2211: 71(ptr) AccessChain 27(data) 2202 38 61 + 2212: 19(int) CompositeExtract 2206 2 + Store 2211 2212 + 2213: 6(int) Load 8(invocation) + 2214: 78(ptr) AccessChain 27(data) 65 38 + 2215: 20(ivec4) Load 2214 + 2216: 20(ivec4) GroupNonUniformBitwiseOr 34 ExclusiveScan 2215 + 2217: 78(ptr) AccessChain 27(data) 2213 38 + Store 2217 2216 + 2218: 6(int) Load 8(invocation) + 2219: 105(ptr) AccessChain 27(data) 29 51 30 + 2220: 6(int) Load 2219 + 2221: 6(int) GroupNonUniformBitwiseOr 34 ExclusiveScan 2220 + 2222: 105(ptr) AccessChain 27(data) 2218 51 30 + Store 2222 2221 + 2223: 6(int) Load 8(invocation) + 2224: 112(ptr) AccessChain 27(data) 38 51 + 2225: 21(ivec4) Load 2224 + 2226: 111(ivec2) VectorShuffle 2225 2225 0 1 + 2227: 111(ivec2) GroupNonUniformBitwiseOr 34 ExclusiveScan 2226 + 2228: 105(ptr) AccessChain 27(data) 2223 51 30 + 2229: 6(int) CompositeExtract 2227 0 + Store 2228 2229 + 2230: 105(ptr) AccessChain 27(data) 2223 51 47 + 2231: 6(int) CompositeExtract 2227 1 + Store 2230 2231 + 2232: 6(int) Load 8(invocation) + 2233: 112(ptr) AccessChain 27(data) 51 51 + 2234: 21(ivec4) Load 2233 + 2235: 122(ivec3) VectorShuffle 2234 2234 0 1 2 + 2236: 122(ivec3) GroupNonUniformBitwiseOr 34 ExclusiveScan 2235 + 2237: 105(ptr) AccessChain 27(data) 2232 51 30 + 2238: 6(int) CompositeExtract 2236 0 + Store 2237 2238 + 2239: 105(ptr) AccessChain 27(data) 2232 51 47 + 2240: 6(int) CompositeExtract 2236 1 + Store 2239 2240 + 2241: 105(ptr) AccessChain 27(data) 2232 51 61 + 2242: 6(int) CompositeExtract 2236 2 + Store 2241 2242 + 2243: 6(int) Load 8(invocation) + 2244: 112(ptr) AccessChain 27(data) 65 51 + 2245: 21(ivec4) Load 2244 + 2246: 21(ivec4) GroupNonUniformBitwiseOr 34 ExclusiveScan 2245 + 2247: 112(ptr) AccessChain 27(data) 2243 51 + Store 2247 2246 + 2248: 6(int) Load 8(invocation) + 2249: 71(ptr) AccessChain 27(data) 29 38 30 + 2250: 19(int) Load 2249 + 2251: 595(bool) SLessThan 2250 29 + 2252: 595(bool) GroupNonUniformLogicalOr 34 ExclusiveScan 2251 + 2253: 19(int) Select 2252 38 29 + 2254: 71(ptr) AccessChain 27(data) 2248 38 30 + Store 2254 2253 + 2255: 6(int) Load 8(invocation) + 2256: 78(ptr) AccessChain 27(data) 38 38 + 2257: 20(ivec4) Load 2256 + 2258: 77(ivec2) VectorShuffle 2257 2257 0 1 + 2259: 605(bvec2) SLessThan 2258 604 + 2260: 605(bvec2) GroupNonUniformLogicalOr 34 ExclusiveScan 2259 + 2261: 77(ivec2) Select 2260 608 604 + 2262: 71(ptr) AccessChain 27(data) 2255 38 30 + 2263: 19(int) CompositeExtract 2261 0 + Store 2262 2263 + 2264: 71(ptr) AccessChain 27(data) 2255 38 47 + 2265: 19(int) CompositeExtract 2261 1 + Store 2264 2265 + 2266: 6(int) Load 8(invocation) + 2267: 78(ptr) AccessChain 27(data) 38 38 + 2268: 20(ivec4) Load 2267 + 2269: 88(ivec3) VectorShuffle 2268 2268 0 1 2 + 2270: 619(bvec3) SLessThan 2269 618 + 2271: 619(bvec3) GroupNonUniformLogicalOr 34 ExclusiveScan 2270 + 2272: 88(ivec3) Select 2271 622 618 + 2273: 71(ptr) AccessChain 27(data) 2266 38 30 + 2274: 19(int) CompositeExtract 2272 0 + Store 2273 2274 + 2275: 71(ptr) AccessChain 27(data) 2266 38 47 + 2276: 19(int) CompositeExtract 2272 1 + Store 2275 2276 + 2277: 71(ptr) AccessChain 27(data) 2266 38 61 + 2278: 19(int) CompositeExtract 2272 2 + Store 2277 2278 + 2279: 6(int) Load 8(invocation) + 2280: 78(ptr) AccessChain 27(data) 38 38 + 2281: 20(ivec4) Load 2280 + 2282: 634(bvec4) SLessThan 2281 633 + 2283: 634(bvec4) GroupNonUniformLogicalOr 34 ExclusiveScan 2282 + 2284: 20(ivec4) Select 2283 637 633 + 2285: 78(ptr) AccessChain 27(data) 2279 38 + Store 2285 2284 + 2286: 6(int) Load 8(invocation) + 2287: 71(ptr) AccessChain 27(data) 29 38 30 + 2288: 19(int) Load 2287 + 2289: 19(int) GroupNonUniformBitwiseXor 34 ExclusiveScan 2288 + 2290: 71(ptr) AccessChain 27(data) 2286 38 30 + Store 2290 2289 + 2291: 6(int) Load 8(invocation) + 2292: 78(ptr) AccessChain 27(data) 38 38 + 2293: 20(ivec4) Load 2292 + 2294: 77(ivec2) VectorShuffle 2293 2293 0 1 + 2295: 77(ivec2) GroupNonUniformBitwiseXor 34 ExclusiveScan 2294 + 2296: 71(ptr) AccessChain 27(data) 2291 38 30 + 2297: 19(int) CompositeExtract 2295 0 + Store 2296 2297 + 2298: 71(ptr) AccessChain 27(data) 2291 38 47 + 2299: 19(int) CompositeExtract 2295 1 + Store 2298 2299 + 2300: 6(int) Load 8(invocation) + 2301: 78(ptr) AccessChain 27(data) 51 38 + 2302: 20(ivec4) Load 2301 + 2303: 88(ivec3) VectorShuffle 2302 2302 0 1 2 + 2304: 88(ivec3) GroupNonUniformBitwiseXor 34 ExclusiveScan 2303 + 2305: 71(ptr) AccessChain 27(data) 2300 38 30 + 2306: 19(int) CompositeExtract 2304 0 + Store 2305 2306 + 2307: 71(ptr) AccessChain 27(data) 2300 38 47 + 2308: 19(int) CompositeExtract 2304 1 + Store 2307 2308 + 2309: 71(ptr) AccessChain 27(data) 2300 38 61 + 2310: 19(int) CompositeExtract 2304 2 + Store 2309 2310 + 2311: 6(int) Load 8(invocation) + 2312: 78(ptr) AccessChain 27(data) 65 38 + 2313: 20(ivec4) Load 2312 + 2314: 20(ivec4) GroupNonUniformBitwiseXor 34 ExclusiveScan 2313 + 2315: 78(ptr) AccessChain 27(data) 2311 38 + Store 2315 2314 + 2316: 6(int) Load 8(invocation) + 2317: 105(ptr) AccessChain 27(data) 29 51 30 + 2318: 6(int) Load 2317 + 2319: 6(int) GroupNonUniformBitwiseXor 34 ExclusiveScan 2318 + 2320: 105(ptr) AccessChain 27(data) 2316 51 30 + Store 2320 2319 + 2321: 6(int) Load 8(invocation) + 2322: 112(ptr) AccessChain 27(data) 38 51 + 2323: 21(ivec4) Load 2322 + 2324: 111(ivec2) VectorShuffle 2323 2323 0 1 + 2325: 111(ivec2) GroupNonUniformBitwiseXor 34 ExclusiveScan 2324 + 2326: 105(ptr) AccessChain 27(data) 2321 51 30 + 2327: 6(int) CompositeExtract 2325 0 + Store 2326 2327 + 2328: 105(ptr) AccessChain 27(data) 2321 51 47 + 2329: 6(int) CompositeExtract 2325 1 + Store 2328 2329 + 2330: 6(int) Load 8(invocation) + 2331: 112(ptr) AccessChain 27(data) 51 51 + 2332: 21(ivec4) Load 2331 + 2333: 122(ivec3) VectorShuffle 2332 2332 0 1 2 + 2334: 122(ivec3) GroupNonUniformBitwiseXor 34 ExclusiveScan 2333 + 2335: 105(ptr) AccessChain 27(data) 2330 51 30 + 2336: 6(int) CompositeExtract 2334 0 + Store 2335 2336 + 2337: 105(ptr) AccessChain 27(data) 2330 51 47 + 2338: 6(int) CompositeExtract 2334 1 + Store 2337 2338 + 2339: 105(ptr) AccessChain 27(data) 2330 51 61 + 2340: 6(int) CompositeExtract 2334 2 + Store 2339 2340 + 2341: 6(int) Load 8(invocation) + 2342: 112(ptr) AccessChain 27(data) 65 51 + 2343: 21(ivec4) Load 2342 + 2344: 21(ivec4) GroupNonUniformBitwiseXor 34 ExclusiveScan 2343 + 2345: 112(ptr) AccessChain 27(data) 2341 51 + Store 2345 2344 + 2346: 6(int) Load 8(invocation) + 2347: 71(ptr) AccessChain 27(data) 29 38 30 + 2348: 19(int) Load 2347 + 2349: 595(bool) SLessThan 2348 29 + 2350: 595(bool) GroupNonUniformLogicalXor 34 ExclusiveScan 2349 + 2351: 19(int) Select 2350 38 29 + 2352: 71(ptr) AccessChain 27(data) 2346 38 30 + Store 2352 2351 + 2353: 6(int) Load 8(invocation) + 2354: 78(ptr) AccessChain 27(data) 38 38 + 2355: 20(ivec4) Load 2354 + 2356: 77(ivec2) VectorShuffle 2355 2355 0 1 + 2357: 605(bvec2) SLessThan 2356 604 + 2358: 605(bvec2) GroupNonUniformLogicalXor 34 ExclusiveScan 2357 + 2359: 77(ivec2) Select 2358 608 604 + 2360: 71(ptr) AccessChain 27(data) 2353 38 30 + 2361: 19(int) CompositeExtract 2359 0 + Store 2360 2361 + 2362: 71(ptr) AccessChain 27(data) 2353 38 47 + 2363: 19(int) CompositeExtract 2359 1 + Store 2362 2363 + 2364: 6(int) Load 8(invocation) + 2365: 78(ptr) AccessChain 27(data) 38 38 + 2366: 20(ivec4) Load 2365 + 2367: 88(ivec3) VectorShuffle 2366 2366 0 1 2 + 2368: 619(bvec3) SLessThan 2367 618 + 2369: 619(bvec3) GroupNonUniformLogicalXor 34 ExclusiveScan 2368 + 2370: 88(ivec3) Select 2369 622 618 + 2371: 71(ptr) AccessChain 27(data) 2364 38 30 + 2372: 19(int) CompositeExtract 2370 0 + Store 2371 2372 + 2373: 71(ptr) AccessChain 27(data) 2364 38 47 + 2374: 19(int) CompositeExtract 2370 1 + Store 2373 2374 + 2375: 71(ptr) AccessChain 27(data) 2364 38 61 + 2376: 19(int) CompositeExtract 2370 2 + Store 2375 2376 + 2377: 6(int) Load 8(invocation) + 2378: 78(ptr) AccessChain 27(data) 38 38 + 2379: 20(ivec4) Load 2378 + 2380: 634(bvec4) SLessThan 2379 633 + 2381: 634(bvec4) GroupNonUniformLogicalXor 34 ExclusiveScan 2380 + 2382: 20(ivec4) Select 2381 637 633 + 2383: 78(ptr) AccessChain 27(data) 2377 38 + Store 2383 2382 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupBallot.comp.out b/Test/baseResults/spv.subgroupBallot.comp.out index 0e837738af..65cfa7a464 100644 --- a/Test/baseResults/spv.subgroupBallot.comp.out +++ b/Test/baseResults/spv.subgroupBallot.comp.out @@ -1,7 +1,7 @@ spv.subgroupBallot.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 397 +// Id's are bound by 437 Capability Shader Capability Float64 @@ -51,7 +51,7 @@ spv.subgroupBallot.comp Decorate 46(Buffers) Block Decorate 49(data) DescriptorSet 0 Decorate 49(data) Binding 0 - Decorate 396 BuiltIn WorkgroupSize + Decorate 436 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -93,28 +93,28 @@ spv.subgroupBallot.comp 96: TypePointer StorageBuffer 40(float) 102: TypeVector 40(float) 2 103: TypePointer StorageBuffer 41(fvec4) - 112: TypeVector 40(float) 3 - 121: 42(int) Constant 3 - 127: TypePointer StorageBuffer 42(int) - 133: TypeVector 42(int) 2 - 134: TypePointer StorageBuffer 43(ivec4) - 143: TypeVector 42(int) 3 - 162: TypeVector 6(int) 2 - 171: TypeVector 6(int) 3 - 185: TypePointer StorageBuffer 44(float64_t) - 191: TypeVector 44(float64_t) 2 - 192: TypePointer StorageBuffer 45(f64vec4) - 201: TypeVector 44(float64_t) 3 - 225: 133(ivec2) ConstantComposite 61 61 - 226: TypeVector 36(bool) 2 - 229: 133(ivec2) ConstantComposite 60 60 - 238: 143(ivec3) ConstantComposite 61 61 61 - 239: TypeVector 36(bool) 3 - 242: 143(ivec3) ConstantComposite 60 60 60 - 250: 43(ivec4) ConstantComposite 61 61 61 61 - 253: 43(ivec4) ConstantComposite 60 60 60 60 - 395: 6(int) Constant 8 - 396: 171(ivec3) ConstantComposite 395 395 64 + 113: TypeVector 40(float) 3 + 125: 42(int) Constant 3 + 131: TypePointer StorageBuffer 42(int) + 137: TypeVector 42(int) 2 + 138: TypePointer StorageBuffer 43(ivec4) + 148: TypeVector 42(int) 3 + 170: TypeVector 6(int) 2 + 180: TypeVector 6(int) 3 + 197: TypePointer StorageBuffer 44(float64_t) + 203: TypeVector 44(float64_t) 2 + 204: TypePointer StorageBuffer 45(f64vec4) + 214: TypeVector 44(float64_t) 3 + 241: 137(ivec2) ConstantComposite 61 61 + 242: TypeVector 36(bool) 2 + 245: 137(ivec2) ConstantComposite 60 60 + 255: 148(ivec3) ConstantComposite 61 61 61 + 256: TypeVector 36(bool) 3 + 259: 148(ivec3) ConstantComposite 60 60 60 + 270: 43(ivec4) ConstantComposite 61 61 61 61 + 273: 43(ivec4) ConstantComposite 60 60 60 60 + 435: 6(int) Constant 8 + 436: 180(ivec3) ConstantComposite 435 435 64 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -179,7 +179,7 @@ spv.subgroupBallot.comp 87: Label 92: 36(bool) Phi 85 5 91 86 SelectionMerge 94 None - BranchConditional 92 93 256 + BranchConditional 92 93 276 93: Label 95: 6(int) Load 8(invocation) 97: 96(ptr) AccessChain 49(data) 61 61 54 @@ -192,313 +192,383 @@ spv.subgroupBallot.comp 105: 41(fvec4) Load 104 106: 102(fvec2) VectorShuffle 105 105 0 1 107: 102(fvec2) GroupNonUniformBroadcast 38 106 38 - 108: 103(ptr) AccessChain 49(data) 101 61 - 109: 41(fvec4) Load 108 - 110: 41(fvec4) VectorShuffle 109 107 4 5 2 3 - Store 108 110 - 111: 6(int) Load 8(invocation) - 113: 103(ptr) AccessChain 49(data) 51 61 - 114: 41(fvec4) Load 113 - 115: 112(fvec3) VectorShuffle 114 114 0 1 2 - 116: 112(fvec3) GroupNonUniformBroadcast 38 115 38 - 117: 103(ptr) AccessChain 49(data) 111 61 - 118: 41(fvec4) Load 117 - 119: 41(fvec4) VectorShuffle 118 116 4 5 6 3 - Store 117 119 - 120: 6(int) Load 8(invocation) - 122: 103(ptr) AccessChain 49(data) 121 61 - 123: 41(fvec4) Load 122 - 124: 41(fvec4) GroupNonUniformBroadcast 38 123 38 - 125: 103(ptr) AccessChain 49(data) 120 61 - Store 125 124 - 126: 6(int) Load 8(invocation) - 128: 127(ptr) AccessChain 49(data) 61 60 54 - 129: 42(int) Load 128 - 130: 42(int) GroupNonUniformBroadcast 38 129 72 - 131: 127(ptr) AccessChain 49(data) 126 60 54 - Store 131 130 - 132: 6(int) Load 8(invocation) - 135: 134(ptr) AccessChain 49(data) 60 60 - 136: 43(ivec4) Load 135 - 137: 133(ivec2) VectorShuffle 136 136 0 1 - 138: 133(ivec2) GroupNonUniformBroadcast 38 137 72 - 139: 134(ptr) AccessChain 49(data) 132 60 + 108: 96(ptr) AccessChain 49(data) 101 61 54 + 109: 40(float) CompositeExtract 107 0 + Store 108 109 + 110: 96(ptr) AccessChain 49(data) 101 61 64 + 111: 40(float) CompositeExtract 107 1 + Store 110 111 + 112: 6(int) Load 8(invocation) + 114: 103(ptr) AccessChain 49(data) 51 61 + 115: 41(fvec4) Load 114 + 116: 113(fvec3) VectorShuffle 115 115 0 1 2 + 117: 113(fvec3) GroupNonUniformBroadcast 38 116 38 + 118: 96(ptr) AccessChain 49(data) 112 61 54 + 119: 40(float) CompositeExtract 117 0 + Store 118 119 + 120: 96(ptr) AccessChain 49(data) 112 61 64 + 121: 40(float) CompositeExtract 117 1 + Store 120 121 + 122: 96(ptr) AccessChain 49(data) 112 61 72 + 123: 40(float) CompositeExtract 117 2 + Store 122 123 + 124: 6(int) Load 8(invocation) + 126: 103(ptr) AccessChain 49(data) 125 61 + 127: 41(fvec4) Load 126 + 128: 41(fvec4) GroupNonUniformBroadcast 38 127 38 + 129: 103(ptr) AccessChain 49(data) 124 61 + Store 129 128 + 130: 6(int) Load 8(invocation) + 132: 131(ptr) AccessChain 49(data) 61 60 54 + 133: 42(int) Load 132 + 134: 42(int) GroupNonUniformBroadcast 38 133 72 + 135: 131(ptr) AccessChain 49(data) 130 60 54 + Store 135 134 + 136: 6(int) Load 8(invocation) + 139: 138(ptr) AccessChain 49(data) 60 60 140: 43(ivec4) Load 139 - 141: 43(ivec4) VectorShuffle 140 138 4 5 2 3 - Store 139 141 - 142: 6(int) Load 8(invocation) - 144: 134(ptr) AccessChain 49(data) 51 60 - 145: 43(ivec4) Load 144 - 146: 143(ivec3) VectorShuffle 145 145 0 1 2 - 147: 143(ivec3) GroupNonUniformBroadcast 38 146 72 - 148: 134(ptr) AccessChain 49(data) 142 60 - 149: 43(ivec4) Load 148 - 150: 43(ivec4) VectorShuffle 149 147 4 5 6 3 - Store 148 150 - 151: 6(int) Load 8(invocation) - 152: 134(ptr) AccessChain 49(data) 121 60 - 153: 43(ivec4) Load 152 - 154: 43(ivec4) GroupNonUniformBroadcast 38 153 72 - 155: 134(ptr) AccessChain 49(data) 151 60 - Store 155 154 - 156: 6(int) Load 8(invocation) - 157: 55(ptr) AccessChain 49(data) 61 51 54 - 158: 6(int) Load 157 - 159: 6(int) GroupNonUniformBroadcast 38 158 64 - 160: 55(ptr) AccessChain 49(data) 156 51 54 - Store 160 159 - 161: 6(int) Load 8(invocation) - 163: 88(ptr) AccessChain 49(data) 60 51 - 164: 17(ivec4) Load 163 - 165: 162(ivec2) VectorShuffle 164 164 0 1 - 166: 162(ivec2) GroupNonUniformBroadcast 38 165 64 - 167: 88(ptr) AccessChain 49(data) 161 51 - 168: 17(ivec4) Load 167 - 169: 17(ivec4) VectorShuffle 168 166 4 5 2 3 - Store 167 169 - 170: 6(int) Load 8(invocation) - 172: 88(ptr) AccessChain 49(data) 51 51 - 173: 17(ivec4) Load 172 - 174: 171(ivec3) VectorShuffle 173 173 0 1 2 - 175: 171(ivec3) GroupNonUniformBroadcast 38 174 64 - 176: 88(ptr) AccessChain 49(data) 170 51 - 177: 17(ivec4) Load 176 - 178: 17(ivec4) VectorShuffle 177 175 4 5 6 3 - Store 176 178 + 141: 137(ivec2) VectorShuffle 140 140 0 1 + 142: 137(ivec2) GroupNonUniformBroadcast 38 141 72 + 143: 131(ptr) AccessChain 49(data) 136 60 54 + 144: 42(int) CompositeExtract 142 0 + Store 143 144 + 145: 131(ptr) AccessChain 49(data) 136 60 64 + 146: 42(int) CompositeExtract 142 1 + Store 145 146 + 147: 6(int) Load 8(invocation) + 149: 138(ptr) AccessChain 49(data) 51 60 + 150: 43(ivec4) Load 149 + 151: 148(ivec3) VectorShuffle 150 150 0 1 2 + 152: 148(ivec3) GroupNonUniformBroadcast 38 151 72 + 153: 131(ptr) AccessChain 49(data) 147 60 54 + 154: 42(int) CompositeExtract 152 0 + Store 153 154 + 155: 131(ptr) AccessChain 49(data) 147 60 64 + 156: 42(int) CompositeExtract 152 1 + Store 155 156 + 157: 131(ptr) AccessChain 49(data) 147 60 72 + 158: 42(int) CompositeExtract 152 2 + Store 157 158 + 159: 6(int) Load 8(invocation) + 160: 138(ptr) AccessChain 49(data) 125 60 + 161: 43(ivec4) Load 160 + 162: 43(ivec4) GroupNonUniformBroadcast 38 161 72 + 163: 138(ptr) AccessChain 49(data) 159 60 + Store 163 162 + 164: 6(int) Load 8(invocation) + 165: 55(ptr) AccessChain 49(data) 61 51 54 + 166: 6(int) Load 165 + 167: 6(int) GroupNonUniformBroadcast 38 166 64 + 168: 55(ptr) AccessChain 49(data) 164 51 54 + Store 168 167 + 169: 6(int) Load 8(invocation) + 171: 88(ptr) AccessChain 49(data) 60 51 + 172: 17(ivec4) Load 171 + 173: 170(ivec2) VectorShuffle 172 172 0 1 + 174: 170(ivec2) GroupNonUniformBroadcast 38 173 64 + 175: 55(ptr) AccessChain 49(data) 169 51 54 + 176: 6(int) CompositeExtract 174 0 + Store 175 176 + 177: 55(ptr) AccessChain 49(data) 169 51 64 + 178: 6(int) CompositeExtract 174 1 + Store 177 178 179: 6(int) Load 8(invocation) - 180: 88(ptr) AccessChain 49(data) 121 51 - 181: 17(ivec4) Load 180 - 182: 17(ivec4) GroupNonUniformBroadcast 38 181 64 - 183: 88(ptr) AccessChain 49(data) 179 51 - Store 183 182 - 184: 6(int) Load 8(invocation) - 186: 185(ptr) AccessChain 49(data) 61 121 54 - 187:44(float64_t) Load 186 - 188:44(float64_t) GroupNonUniformBroadcast 38 187 54 - 189: 185(ptr) AccessChain 49(data) 184 121 54 - Store 189 188 - 190: 6(int) Load 8(invocation) - 193: 192(ptr) AccessChain 49(data) 60 121 - 194: 45(f64vec4) Load 193 - 195:191(f64vec2) VectorShuffle 194 194 0 1 - 196:191(f64vec2) GroupNonUniformBroadcast 38 195 54 - 197: 192(ptr) AccessChain 49(data) 190 121 - 198: 45(f64vec4) Load 197 - 199: 45(f64vec4) VectorShuffle 198 196 4 5 2 3 - Store 197 199 - 200: 6(int) Load 8(invocation) - 202: 192(ptr) AccessChain 49(data) 51 121 - 203: 45(f64vec4) Load 202 - 204:201(f64vec3) VectorShuffle 203 203 0 1 2 - 205:201(f64vec3) GroupNonUniformBroadcast 38 204 54 - 206: 192(ptr) AccessChain 49(data) 200 121 - 207: 45(f64vec4) Load 206 - 208: 45(f64vec4) VectorShuffle 207 205 4 5 6 3 - Store 206 208 - 209: 6(int) Load 8(invocation) - 210: 192(ptr) AccessChain 49(data) 121 121 - 211: 45(f64vec4) Load 210 - 212: 45(f64vec4) GroupNonUniformBroadcast 38 211 54 - 213: 192(ptr) AccessChain 49(data) 209 121 - Store 213 212 - 214: 6(int) Load 8(invocation) - 215: 127(ptr) AccessChain 49(data) 61 60 54 - 216: 42(int) Load 215 - 217: 36(bool) SLessThan 216 61 - 218: 36(bool) GroupNonUniformBroadcast 38 217 64 - 219: 42(int) Select 218 60 61 - 220: 127(ptr) AccessChain 49(data) 214 60 54 - Store 220 219 - 221: 6(int) Load 8(invocation) - 222: 134(ptr) AccessChain 49(data) 60 60 - 223: 43(ivec4) Load 222 - 224: 133(ivec2) VectorShuffle 223 223 0 1 - 227: 226(bvec2) SLessThan 224 225 - 228: 226(bvec2) GroupNonUniformBroadcast 38 227 64 - 230: 133(ivec2) Select 228 229 225 - 231: 134(ptr) AccessChain 49(data) 221 60 - 232: 43(ivec4) Load 231 - 233: 43(ivec4) VectorShuffle 232 230 4 5 2 3 - Store 231 233 - 234: 6(int) Load 8(invocation) - 235: 134(ptr) AccessChain 49(data) 60 60 - 236: 43(ivec4) Load 235 - 237: 143(ivec3) VectorShuffle 236 236 0 1 2 - 240: 239(bvec3) SLessThan 237 238 - 241: 239(bvec3) GroupNonUniformBroadcast 38 240 64 - 243: 143(ivec3) Select 241 242 238 - 244: 134(ptr) AccessChain 49(data) 234 60 - 245: 43(ivec4) Load 244 - 246: 43(ivec4) VectorShuffle 245 243 4 5 6 3 - Store 244 246 - 247: 6(int) Load 8(invocation) - 248: 134(ptr) AccessChain 49(data) 60 60 - 249: 43(ivec4) Load 248 - 251: 83(bvec4) SLessThan 249 250 - 252: 83(bvec4) GroupNonUniformBroadcast 38 251 64 - 254: 43(ivec4) Select 252 253 250 - 255: 134(ptr) AccessChain 49(data) 247 60 - Store 255 254 + 181: 88(ptr) AccessChain 49(data) 51 51 + 182: 17(ivec4) Load 181 + 183: 180(ivec3) VectorShuffle 182 182 0 1 2 + 184: 180(ivec3) GroupNonUniformBroadcast 38 183 64 + 185: 55(ptr) AccessChain 49(data) 179 51 54 + 186: 6(int) CompositeExtract 184 0 + Store 185 186 + 187: 55(ptr) AccessChain 49(data) 179 51 64 + 188: 6(int) CompositeExtract 184 1 + Store 187 188 + 189: 55(ptr) AccessChain 49(data) 179 51 72 + 190: 6(int) CompositeExtract 184 2 + Store 189 190 + 191: 6(int) Load 8(invocation) + 192: 88(ptr) AccessChain 49(data) 125 51 + 193: 17(ivec4) Load 192 + 194: 17(ivec4) GroupNonUniformBroadcast 38 193 64 + 195: 88(ptr) AccessChain 49(data) 191 51 + Store 195 194 + 196: 6(int) Load 8(invocation) + 198: 197(ptr) AccessChain 49(data) 61 125 54 + 199:44(float64_t) Load 198 + 200:44(float64_t) GroupNonUniformBroadcast 38 199 54 + 201: 197(ptr) AccessChain 49(data) 196 125 54 + Store 201 200 + 202: 6(int) Load 8(invocation) + 205: 204(ptr) AccessChain 49(data) 60 125 + 206: 45(f64vec4) Load 205 + 207:203(f64vec2) VectorShuffle 206 206 0 1 + 208:203(f64vec2) GroupNonUniformBroadcast 38 207 54 + 209: 197(ptr) AccessChain 49(data) 202 125 54 + 210:44(float64_t) CompositeExtract 208 0 + Store 209 210 + 211: 197(ptr) AccessChain 49(data) 202 125 64 + 212:44(float64_t) CompositeExtract 208 1 + Store 211 212 + 213: 6(int) Load 8(invocation) + 215: 204(ptr) AccessChain 49(data) 51 125 + 216: 45(f64vec4) Load 215 + 217:214(f64vec3) VectorShuffle 216 216 0 1 2 + 218:214(f64vec3) GroupNonUniformBroadcast 38 217 54 + 219: 197(ptr) AccessChain 49(data) 213 125 54 + 220:44(float64_t) CompositeExtract 218 0 + Store 219 220 + 221: 197(ptr) AccessChain 49(data) 213 125 64 + 222:44(float64_t) CompositeExtract 218 1 + Store 221 222 + 223: 197(ptr) AccessChain 49(data) 213 125 72 + 224:44(float64_t) CompositeExtract 218 2 + Store 223 224 + 225: 6(int) Load 8(invocation) + 226: 204(ptr) AccessChain 49(data) 125 125 + 227: 45(f64vec4) Load 226 + 228: 45(f64vec4) GroupNonUniformBroadcast 38 227 54 + 229: 204(ptr) AccessChain 49(data) 225 125 + Store 229 228 + 230: 6(int) Load 8(invocation) + 231: 131(ptr) AccessChain 49(data) 61 60 54 + 232: 42(int) Load 231 + 233: 36(bool) SLessThan 232 61 + 234: 36(bool) GroupNonUniformBroadcast 38 233 64 + 235: 42(int) Select 234 60 61 + 236: 131(ptr) AccessChain 49(data) 230 60 54 + Store 236 235 + 237: 6(int) Load 8(invocation) + 238: 138(ptr) AccessChain 49(data) 60 60 + 239: 43(ivec4) Load 238 + 240: 137(ivec2) VectorShuffle 239 239 0 1 + 243: 242(bvec2) SLessThan 240 241 + 244: 242(bvec2) GroupNonUniformBroadcast 38 243 64 + 246: 137(ivec2) Select 244 245 241 + 247: 131(ptr) AccessChain 49(data) 237 60 54 + 248: 42(int) CompositeExtract 246 0 + Store 247 248 + 249: 131(ptr) AccessChain 49(data) 237 60 64 + 250: 42(int) CompositeExtract 246 1 + Store 249 250 + 251: 6(int) Load 8(invocation) + 252: 138(ptr) AccessChain 49(data) 60 60 + 253: 43(ivec4) Load 252 + 254: 148(ivec3) VectorShuffle 253 253 0 1 2 + 257: 256(bvec3) SLessThan 254 255 + 258: 256(bvec3) GroupNonUniformBroadcast 38 257 64 + 260: 148(ivec3) Select 258 259 255 + 261: 131(ptr) AccessChain 49(data) 251 60 54 + 262: 42(int) CompositeExtract 260 0 + Store 261 262 + 263: 131(ptr) AccessChain 49(data) 251 60 64 + 264: 42(int) CompositeExtract 260 1 + Store 263 264 + 265: 131(ptr) AccessChain 49(data) 251 60 72 + 266: 42(int) CompositeExtract 260 2 + Store 265 266 + 267: 6(int) Load 8(invocation) + 268: 138(ptr) AccessChain 49(data) 60 60 + 269: 43(ivec4) Load 268 + 271: 83(bvec4) SLessThan 269 270 + 272: 83(bvec4) GroupNonUniformBroadcast 38 271 64 + 274: 43(ivec4) Select 272 273 270 + 275: 138(ptr) AccessChain 49(data) 267 60 + Store 275 274 Branch 94 - 256: Label - 257: 6(int) Load 8(invocation) - 258: 96(ptr) AccessChain 49(data) 61 61 54 - 259: 40(float) Load 258 - 260: 40(float) GroupNonUniformBroadcastFirst 38 259 - 261: 96(ptr) AccessChain 49(data) 257 61 54 - Store 261 260 - 262: 6(int) Load 8(invocation) - 263: 103(ptr) AccessChain 49(data) 60 61 - 264: 41(fvec4) Load 263 - 265: 102(fvec2) VectorShuffle 264 264 0 1 - 266: 102(fvec2) GroupNonUniformBroadcastFirst 38 265 - 267: 103(ptr) AccessChain 49(data) 262 61 - 268: 41(fvec4) Load 267 - 269: 41(fvec4) VectorShuffle 268 266 4 5 2 3 - Store 267 269 - 270: 6(int) Load 8(invocation) - 271: 103(ptr) AccessChain 49(data) 51 61 - 272: 41(fvec4) Load 271 - 273: 112(fvec3) VectorShuffle 272 272 0 1 2 - 274: 112(fvec3) GroupNonUniformBroadcastFirst 38 273 - 275: 103(ptr) AccessChain 49(data) 270 61 - 276: 41(fvec4) Load 275 - 277: 41(fvec4) VectorShuffle 276 274 4 5 6 3 - Store 275 277 - 278: 6(int) Load 8(invocation) - 279: 103(ptr) AccessChain 49(data) 121 61 - 280: 41(fvec4) Load 279 - 281: 41(fvec4) GroupNonUniformBroadcastFirst 38 280 - 282: 103(ptr) AccessChain 49(data) 278 61 - Store 282 281 - 283: 6(int) Load 8(invocation) - 284: 127(ptr) AccessChain 49(data) 61 60 54 - 285: 42(int) Load 284 - 286: 42(int) GroupNonUniformBroadcastFirst 38 285 - 287: 127(ptr) AccessChain 49(data) 283 60 54 - Store 287 286 - 288: 6(int) Load 8(invocation) - 289: 134(ptr) AccessChain 49(data) 60 60 - 290: 43(ivec4) Load 289 - 291: 133(ivec2) VectorShuffle 290 290 0 1 - 292: 133(ivec2) GroupNonUniformBroadcastFirst 38 291 - 293: 134(ptr) AccessChain 49(data) 288 60 - 294: 43(ivec4) Load 293 - 295: 43(ivec4) VectorShuffle 294 292 4 5 2 3 - Store 293 295 - 296: 6(int) Load 8(invocation) - 297: 134(ptr) AccessChain 49(data) 51 60 - 298: 43(ivec4) Load 297 - 299: 143(ivec3) VectorShuffle 298 298 0 1 2 - 300: 143(ivec3) GroupNonUniformBroadcastFirst 38 299 - 301: 134(ptr) AccessChain 49(data) 296 60 - 302: 43(ivec4) Load 301 - 303: 43(ivec4) VectorShuffle 302 300 4 5 6 3 - Store 301 303 - 304: 6(int) Load 8(invocation) - 305: 134(ptr) AccessChain 49(data) 121 60 - 306: 43(ivec4) Load 305 - 307: 43(ivec4) GroupNonUniformBroadcastFirst 38 306 - 308: 134(ptr) AccessChain 49(data) 304 60 - Store 308 307 - 309: 6(int) Load 8(invocation) - 310: 55(ptr) AccessChain 49(data) 61 51 54 - 311: 6(int) Load 310 - 312: 6(int) GroupNonUniformBroadcastFirst 38 311 - 313: 55(ptr) AccessChain 49(data) 309 51 54 - Store 313 312 - 314: 6(int) Load 8(invocation) - 315: 88(ptr) AccessChain 49(data) 60 51 - 316: 17(ivec4) Load 315 - 317: 162(ivec2) VectorShuffle 316 316 0 1 - 318: 162(ivec2) GroupNonUniformBroadcastFirst 38 317 - 319: 88(ptr) AccessChain 49(data) 314 51 - 320: 17(ivec4) Load 319 - 321: 17(ivec4) VectorShuffle 320 318 4 5 2 3 - Store 319 321 - 322: 6(int) Load 8(invocation) - 323: 88(ptr) AccessChain 49(data) 51 51 - 324: 17(ivec4) Load 323 - 325: 171(ivec3) VectorShuffle 324 324 0 1 2 - 326: 171(ivec3) GroupNonUniformBroadcastFirst 38 325 - 327: 88(ptr) AccessChain 49(data) 322 51 - 328: 17(ivec4) Load 327 - 329: 17(ivec4) VectorShuffle 328 326 4 5 6 3 - Store 327 329 - 330: 6(int) Load 8(invocation) - 331: 88(ptr) AccessChain 49(data) 121 51 - 332: 17(ivec4) Load 331 - 333: 17(ivec4) GroupNonUniformBroadcastFirst 38 332 - 334: 88(ptr) AccessChain 49(data) 330 51 - Store 334 333 - 335: 6(int) Load 8(invocation) - 336: 185(ptr) AccessChain 49(data) 61 121 54 - 337:44(float64_t) Load 336 - 338:44(float64_t) GroupNonUniformBroadcastFirst 38 337 - 339: 185(ptr) AccessChain 49(data) 335 121 54 - Store 339 338 - 340: 6(int) Load 8(invocation) - 341: 192(ptr) AccessChain 49(data) 60 121 - 342: 45(f64vec4) Load 341 - 343:191(f64vec2) VectorShuffle 342 342 0 1 - 344:191(f64vec2) GroupNonUniformBroadcastFirst 38 343 - 345: 192(ptr) AccessChain 49(data) 340 121 - 346: 45(f64vec4) Load 345 - 347: 45(f64vec4) VectorShuffle 346 344 4 5 2 3 - Store 345 347 - 348: 6(int) Load 8(invocation) - 349: 192(ptr) AccessChain 49(data) 51 121 - 350: 45(f64vec4) Load 349 - 351:201(f64vec3) VectorShuffle 350 350 0 1 2 - 352:201(f64vec3) GroupNonUniformBroadcastFirst 38 351 - 353: 192(ptr) AccessChain 49(data) 348 121 - 354: 45(f64vec4) Load 353 - 355: 45(f64vec4) VectorShuffle 354 352 4 5 6 3 - Store 353 355 - 356: 6(int) Load 8(invocation) - 357: 192(ptr) AccessChain 49(data) 121 121 - 358: 45(f64vec4) Load 357 - 359: 45(f64vec4) GroupNonUniformBroadcastFirst 38 358 - 360: 192(ptr) AccessChain 49(data) 356 121 - Store 360 359 - 361: 6(int) Load 8(invocation) - 362: 127(ptr) AccessChain 49(data) 61 60 54 - 363: 42(int) Load 362 - 364: 36(bool) SLessThan 363 61 - 365: 36(bool) GroupNonUniformBroadcastFirst 38 364 - 366: 42(int) Select 365 60 61 - 367: 127(ptr) AccessChain 49(data) 361 60 54 - Store 367 366 - 368: 6(int) Load 8(invocation) - 369: 134(ptr) AccessChain 49(data) 60 60 - 370: 43(ivec4) Load 369 - 371: 133(ivec2) VectorShuffle 370 370 0 1 - 372: 226(bvec2) SLessThan 371 225 - 373: 226(bvec2) GroupNonUniformBroadcastFirst 38 372 - 374: 133(ivec2) Select 373 229 225 - 375: 134(ptr) AccessChain 49(data) 368 60 - 376: 43(ivec4) Load 375 - 377: 43(ivec4) VectorShuffle 376 374 4 5 2 3 - Store 375 377 - 378: 6(int) Load 8(invocation) - 379: 134(ptr) AccessChain 49(data) 60 60 - 380: 43(ivec4) Load 379 - 381: 143(ivec3) VectorShuffle 380 380 0 1 2 - 382: 239(bvec3) SLessThan 381 238 - 383: 239(bvec3) GroupNonUniformBroadcastFirst 38 382 - 384: 143(ivec3) Select 383 242 238 - 385: 134(ptr) AccessChain 49(data) 378 60 - 386: 43(ivec4) Load 385 - 387: 43(ivec4) VectorShuffle 386 384 4 5 6 3 - Store 385 387 - 388: 6(int) Load 8(invocation) - 389: 134(ptr) AccessChain 49(data) 60 60 - 390: 43(ivec4) Load 389 - 391: 83(bvec4) SLessThan 390 250 - 392: 83(bvec4) GroupNonUniformBroadcastFirst 38 391 - 393: 43(ivec4) Select 392 253 250 - 394: 134(ptr) AccessChain 49(data) 388 60 - Store 394 393 + 276: Label + 277: 6(int) Load 8(invocation) + 278: 96(ptr) AccessChain 49(data) 61 61 54 + 279: 40(float) Load 278 + 280: 40(float) GroupNonUniformBroadcastFirst 38 279 + 281: 96(ptr) AccessChain 49(data) 277 61 54 + Store 281 280 + 282: 6(int) Load 8(invocation) + 283: 103(ptr) AccessChain 49(data) 60 61 + 284: 41(fvec4) Load 283 + 285: 102(fvec2) VectorShuffle 284 284 0 1 + 286: 102(fvec2) GroupNonUniformBroadcastFirst 38 285 + 287: 96(ptr) AccessChain 49(data) 282 61 54 + 288: 40(float) CompositeExtract 286 0 + Store 287 288 + 289: 96(ptr) AccessChain 49(data) 282 61 64 + 290: 40(float) CompositeExtract 286 1 + Store 289 290 + 291: 6(int) Load 8(invocation) + 292: 103(ptr) AccessChain 49(data) 51 61 + 293: 41(fvec4) Load 292 + 294: 113(fvec3) VectorShuffle 293 293 0 1 2 + 295: 113(fvec3) GroupNonUniformBroadcastFirst 38 294 + 296: 96(ptr) AccessChain 49(data) 291 61 54 + 297: 40(float) CompositeExtract 295 0 + Store 296 297 + 298: 96(ptr) AccessChain 49(data) 291 61 64 + 299: 40(float) CompositeExtract 295 1 + Store 298 299 + 300: 96(ptr) AccessChain 49(data) 291 61 72 + 301: 40(float) CompositeExtract 295 2 + Store 300 301 + 302: 6(int) Load 8(invocation) + 303: 103(ptr) AccessChain 49(data) 125 61 + 304: 41(fvec4) Load 303 + 305: 41(fvec4) GroupNonUniformBroadcastFirst 38 304 + 306: 103(ptr) AccessChain 49(data) 302 61 + Store 306 305 + 307: 6(int) Load 8(invocation) + 308: 131(ptr) AccessChain 49(data) 61 60 54 + 309: 42(int) Load 308 + 310: 42(int) GroupNonUniformBroadcastFirst 38 309 + 311: 131(ptr) AccessChain 49(data) 307 60 54 + Store 311 310 + 312: 6(int) Load 8(invocation) + 313: 138(ptr) AccessChain 49(data) 60 60 + 314: 43(ivec4) Load 313 + 315: 137(ivec2) VectorShuffle 314 314 0 1 + 316: 137(ivec2) GroupNonUniformBroadcastFirst 38 315 + 317: 131(ptr) AccessChain 49(data) 312 60 54 + 318: 42(int) CompositeExtract 316 0 + Store 317 318 + 319: 131(ptr) AccessChain 49(data) 312 60 64 + 320: 42(int) CompositeExtract 316 1 + Store 319 320 + 321: 6(int) Load 8(invocation) + 322: 138(ptr) AccessChain 49(data) 51 60 + 323: 43(ivec4) Load 322 + 324: 148(ivec3) VectorShuffle 323 323 0 1 2 + 325: 148(ivec3) GroupNonUniformBroadcastFirst 38 324 + 326: 131(ptr) AccessChain 49(data) 321 60 54 + 327: 42(int) CompositeExtract 325 0 + Store 326 327 + 328: 131(ptr) AccessChain 49(data) 321 60 64 + 329: 42(int) CompositeExtract 325 1 + Store 328 329 + 330: 131(ptr) AccessChain 49(data) 321 60 72 + 331: 42(int) CompositeExtract 325 2 + Store 330 331 + 332: 6(int) Load 8(invocation) + 333: 138(ptr) AccessChain 49(data) 125 60 + 334: 43(ivec4) Load 333 + 335: 43(ivec4) GroupNonUniformBroadcastFirst 38 334 + 336: 138(ptr) AccessChain 49(data) 332 60 + Store 336 335 + 337: 6(int) Load 8(invocation) + 338: 55(ptr) AccessChain 49(data) 61 51 54 + 339: 6(int) Load 338 + 340: 6(int) GroupNonUniformBroadcastFirst 38 339 + 341: 55(ptr) AccessChain 49(data) 337 51 54 + Store 341 340 + 342: 6(int) Load 8(invocation) + 343: 88(ptr) AccessChain 49(data) 60 51 + 344: 17(ivec4) Load 343 + 345: 170(ivec2) VectorShuffle 344 344 0 1 + 346: 170(ivec2) GroupNonUniformBroadcastFirst 38 345 + 347: 55(ptr) AccessChain 49(data) 342 51 54 + 348: 6(int) CompositeExtract 346 0 + Store 347 348 + 349: 55(ptr) AccessChain 49(data) 342 51 64 + 350: 6(int) CompositeExtract 346 1 + Store 349 350 + 351: 6(int) Load 8(invocation) + 352: 88(ptr) AccessChain 49(data) 51 51 + 353: 17(ivec4) Load 352 + 354: 180(ivec3) VectorShuffle 353 353 0 1 2 + 355: 180(ivec3) GroupNonUniformBroadcastFirst 38 354 + 356: 55(ptr) AccessChain 49(data) 351 51 54 + 357: 6(int) CompositeExtract 355 0 + Store 356 357 + 358: 55(ptr) AccessChain 49(data) 351 51 64 + 359: 6(int) CompositeExtract 355 1 + Store 358 359 + 360: 55(ptr) AccessChain 49(data) 351 51 72 + 361: 6(int) CompositeExtract 355 2 + Store 360 361 + 362: 6(int) Load 8(invocation) + 363: 88(ptr) AccessChain 49(data) 125 51 + 364: 17(ivec4) Load 363 + 365: 17(ivec4) GroupNonUniformBroadcastFirst 38 364 + 366: 88(ptr) AccessChain 49(data) 362 51 + Store 366 365 + 367: 6(int) Load 8(invocation) + 368: 197(ptr) AccessChain 49(data) 61 125 54 + 369:44(float64_t) Load 368 + 370:44(float64_t) GroupNonUniformBroadcastFirst 38 369 + 371: 197(ptr) AccessChain 49(data) 367 125 54 + Store 371 370 + 372: 6(int) Load 8(invocation) + 373: 204(ptr) AccessChain 49(data) 60 125 + 374: 45(f64vec4) Load 373 + 375:203(f64vec2) VectorShuffle 374 374 0 1 + 376:203(f64vec2) GroupNonUniformBroadcastFirst 38 375 + 377: 197(ptr) AccessChain 49(data) 372 125 54 + 378:44(float64_t) CompositeExtract 376 0 + Store 377 378 + 379: 197(ptr) AccessChain 49(data) 372 125 64 + 380:44(float64_t) CompositeExtract 376 1 + Store 379 380 + 381: 6(int) Load 8(invocation) + 382: 204(ptr) AccessChain 49(data) 51 125 + 383: 45(f64vec4) Load 382 + 384:214(f64vec3) VectorShuffle 383 383 0 1 2 + 385:214(f64vec3) GroupNonUniformBroadcastFirst 38 384 + 386: 197(ptr) AccessChain 49(data) 381 125 54 + 387:44(float64_t) CompositeExtract 385 0 + Store 386 387 + 388: 197(ptr) AccessChain 49(data) 381 125 64 + 389:44(float64_t) CompositeExtract 385 1 + Store 388 389 + 390: 197(ptr) AccessChain 49(data) 381 125 72 + 391:44(float64_t) CompositeExtract 385 2 + Store 390 391 + 392: 6(int) Load 8(invocation) + 393: 204(ptr) AccessChain 49(data) 125 125 + 394: 45(f64vec4) Load 393 + 395: 45(f64vec4) GroupNonUniformBroadcastFirst 38 394 + 396: 204(ptr) AccessChain 49(data) 392 125 + Store 396 395 + 397: 6(int) Load 8(invocation) + 398: 131(ptr) AccessChain 49(data) 61 60 54 + 399: 42(int) Load 398 + 400: 36(bool) SLessThan 399 61 + 401: 36(bool) GroupNonUniformBroadcastFirst 38 400 + 402: 42(int) Select 401 60 61 + 403: 131(ptr) AccessChain 49(data) 397 60 54 + Store 403 402 + 404: 6(int) Load 8(invocation) + 405: 138(ptr) AccessChain 49(data) 60 60 + 406: 43(ivec4) Load 405 + 407: 137(ivec2) VectorShuffle 406 406 0 1 + 408: 242(bvec2) SLessThan 407 241 + 409: 242(bvec2) GroupNonUniformBroadcastFirst 38 408 + 410: 137(ivec2) Select 409 245 241 + 411: 131(ptr) AccessChain 49(data) 404 60 54 + 412: 42(int) CompositeExtract 410 0 + Store 411 412 + 413: 131(ptr) AccessChain 49(data) 404 60 64 + 414: 42(int) CompositeExtract 410 1 + Store 413 414 + 415: 6(int) Load 8(invocation) + 416: 138(ptr) AccessChain 49(data) 60 60 + 417: 43(ivec4) Load 416 + 418: 148(ivec3) VectorShuffle 417 417 0 1 2 + 419: 256(bvec3) SLessThan 418 255 + 420: 256(bvec3) GroupNonUniformBroadcastFirst 38 419 + 421: 148(ivec3) Select 420 259 255 + 422: 131(ptr) AccessChain 49(data) 415 60 54 + 423: 42(int) CompositeExtract 421 0 + Store 422 423 + 424: 131(ptr) AccessChain 49(data) 415 60 64 + 425: 42(int) CompositeExtract 421 1 + Store 424 425 + 426: 131(ptr) AccessChain 49(data) 415 60 72 + 427: 42(int) CompositeExtract 421 2 + Store 426 427 + 428: 6(int) Load 8(invocation) + 429: 138(ptr) AccessChain 49(data) 60 60 + 430: 43(ivec4) Load 429 + 431: 83(bvec4) SLessThan 430 270 + 432: 83(bvec4) GroupNonUniformBroadcastFirst 38 431 + 433: 43(ivec4) Select 432 273 270 + 434: 138(ptr) AccessChain 49(data) 428 60 + Store 434 433 Branch 94 94: Label Return diff --git a/Test/baseResults/spv.subgroupClustered.comp.out b/Test/baseResults/spv.subgroupClustered.comp.out index 297fcec783..a2e486dd68 100644 --- a/Test/baseResults/spv.subgroupClustered.comp.out +++ b/Test/baseResults/spv.subgroupClustered.comp.out @@ -1,7 +1,7 @@ spv.subgroupClustered.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 737 +// Id's are bound by 838 Capability Shader Capability Float64 @@ -39,7 +39,7 @@ spv.subgroupClustered.comp Decorate 24(Buffers) Block Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 - Decorate 736 BuiltIn WorkgroupSize + Decorate 837 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -67,33 +67,34 @@ spv.subgroupClustered.comp 39: 19(int) Constant 1 40: TypeVector 17(float) 2 41: TypePointer StorageBuffer 18(fvec4) - 50: 19(int) Constant 2 - 51: TypeVector 17(float) 3 - 60: 19(int) Constant 3 - 66: TypePointer StorageBuffer 19(int) - 72: TypeVector 19(int) 2 - 73: TypePointer StorageBuffer 20(ivec4) - 82: TypeVector 19(int) 3 - 96: TypePointer StorageBuffer 6(int) - 102: TypeVector 6(int) 2 - 103: TypePointer StorageBuffer 21(ivec4) - 112: TypeVector 6(int) 3 - 126: TypePointer StorageBuffer 22(float64_t) - 132: TypeVector 22(float64_t) 2 - 133: TypePointer StorageBuffer 23(f64vec4) - 142: TypeVector 22(float64_t) 3 - 522: TypeBool - 531: 72(ivec2) ConstantComposite 29 29 - 532: TypeVector 522(bool) 2 - 535: 72(ivec2) ConstantComposite 39 39 - 544: 82(ivec3) ConstantComposite 29 29 29 - 545: TypeVector 522(bool) 3 - 548: 82(ivec3) ConstantComposite 39 39 39 - 556: 20(ivec4) ConstantComposite 29 29 29 29 - 557: TypeVector 522(bool) 4 - 560: 20(ivec4) ConstantComposite 39 39 39 39 - 735: 6(int) Constant 8 - 736: 112(ivec3) ConstantComposite 735 34 34 + 51: 19(int) Constant 2 + 52: TypeVector 17(float) 3 + 61: 6(int) Constant 2 + 65: 19(int) Constant 3 + 71: TypePointer StorageBuffer 19(int) + 77: TypeVector 19(int) 2 + 78: TypePointer StorageBuffer 20(ivec4) + 88: TypeVector 19(int) 3 + 105: TypePointer StorageBuffer 6(int) + 111: TypeVector 6(int) 2 + 112: TypePointer StorageBuffer 21(ivec4) + 122: TypeVector 6(int) 3 + 139: TypePointer StorageBuffer 22(float64_t) + 145: TypeVector 22(float64_t) 2 + 146: TypePointer StorageBuffer 23(f64vec4) + 156: TypeVector 22(float64_t) 3 + 595: TypeBool + 604: 77(ivec2) ConstantComposite 29 29 + 605: TypeVector 595(bool) 2 + 608: 77(ivec2) ConstantComposite 39 39 + 618: 88(ivec3) ConstantComposite 29 29 29 + 619: TypeVector 595(bool) 3 + 622: 88(ivec3) ConstantComposite 39 39 39 + 633: 20(ivec4) ConstantComposite 29 29 29 29 + 634: TypeVector 595(bool) 4 + 637: 20(ivec4) ConstantComposite 39 39 39 39 + 836: 6(int) Constant 8 + 837: 122(ivec3) ConstantComposite 836 34 34 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -113,768 +114,943 @@ spv.subgroupClustered.comp 43: 18(fvec4) Load 42 44: 40(fvec2) VectorShuffle 43 43 0 1 45: 40(fvec2) GroupNonUniformFAdd 35 ClusteredReduce 44 34 - 46: 41(ptr) AccessChain 27(data) 38 29 - 47: 18(fvec4) Load 46 - 48: 18(fvec4) VectorShuffle 47 45 4 5 2 3 - Store 46 48 - 49: 6(int) Load 8(invocation) - 52: 41(ptr) AccessChain 27(data) 50 29 - 53: 18(fvec4) Load 52 - 54: 51(fvec3) VectorShuffle 53 53 0 1 2 - 55: 51(fvec3) GroupNonUniformFAdd 35 ClusteredReduce 54 34 - 56: 41(ptr) AccessChain 27(data) 49 29 - 57: 18(fvec4) Load 56 - 58: 18(fvec4) VectorShuffle 57 55 4 5 6 3 - Store 56 58 - 59: 6(int) Load 8(invocation) - 61: 41(ptr) AccessChain 27(data) 60 29 - 62: 18(fvec4) Load 61 - 63: 18(fvec4) GroupNonUniformFAdd 35 ClusteredReduce 62 34 - 64: 41(ptr) AccessChain 27(data) 59 29 - Store 64 63 - 65: 6(int) Load 8(invocation) - 67: 66(ptr) AccessChain 27(data) 29 39 30 - 68: 19(int) Load 67 - 69: 19(int) GroupNonUniformIAdd 35 ClusteredReduce 68 34 - 70: 66(ptr) AccessChain 27(data) 65 39 30 - Store 70 69 - 71: 6(int) Load 8(invocation) - 74: 73(ptr) AccessChain 27(data) 39 39 - 75: 20(ivec4) Load 74 - 76: 72(ivec2) VectorShuffle 75 75 0 1 - 77: 72(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 76 34 - 78: 73(ptr) AccessChain 27(data) 71 39 - 79: 20(ivec4) Load 78 - 80: 20(ivec4) VectorShuffle 79 77 4 5 2 3 - Store 78 80 - 81: 6(int) Load 8(invocation) - 83: 73(ptr) AccessChain 27(data) 50 39 - 84: 20(ivec4) Load 83 - 85: 82(ivec3) VectorShuffle 84 84 0 1 2 - 86: 82(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 85 34 - 87: 73(ptr) AccessChain 27(data) 81 39 - 88: 20(ivec4) Load 87 - 89: 20(ivec4) VectorShuffle 88 86 4 5 6 3 - Store 87 89 - 90: 6(int) Load 8(invocation) - 91: 73(ptr) AccessChain 27(data) 60 39 - 92: 20(ivec4) Load 91 - 93: 20(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 92 34 - 94: 73(ptr) AccessChain 27(data) 90 39 - Store 94 93 - 95: 6(int) Load 8(invocation) - 97: 96(ptr) AccessChain 27(data) 29 50 30 - 98: 6(int) Load 97 - 99: 6(int) GroupNonUniformIAdd 35 ClusteredReduce 98 34 - 100: 96(ptr) AccessChain 27(data) 95 50 30 - Store 100 99 - 101: 6(int) Load 8(invocation) - 104: 103(ptr) AccessChain 27(data) 39 50 - 105: 21(ivec4) Load 104 - 106: 102(ivec2) VectorShuffle 105 105 0 1 - 107: 102(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 106 34 - 108: 103(ptr) AccessChain 27(data) 101 50 - 109: 21(ivec4) Load 108 - 110: 21(ivec4) VectorShuffle 109 107 4 5 2 3 - Store 108 110 - 111: 6(int) Load 8(invocation) - 113: 103(ptr) AccessChain 27(data) 50 50 + 46: 31(ptr) AccessChain 27(data) 38 29 30 + 47: 17(float) CompositeExtract 45 0 + Store 46 47 + 48: 31(ptr) AccessChain 27(data) 38 29 34 + 49: 17(float) CompositeExtract 45 1 + Store 48 49 + 50: 6(int) Load 8(invocation) + 53: 41(ptr) AccessChain 27(data) 51 29 + 54: 18(fvec4) Load 53 + 55: 52(fvec3) VectorShuffle 54 54 0 1 2 + 56: 52(fvec3) GroupNonUniformFAdd 35 ClusteredReduce 55 34 + 57: 31(ptr) AccessChain 27(data) 50 29 30 + 58: 17(float) CompositeExtract 56 0 + Store 57 58 + 59: 31(ptr) AccessChain 27(data) 50 29 34 + 60: 17(float) CompositeExtract 56 1 + Store 59 60 + 62: 31(ptr) AccessChain 27(data) 50 29 61 + 63: 17(float) CompositeExtract 56 2 + Store 62 63 + 64: 6(int) Load 8(invocation) + 66: 41(ptr) AccessChain 27(data) 65 29 + 67: 18(fvec4) Load 66 + 68: 18(fvec4) GroupNonUniformFAdd 35 ClusteredReduce 67 34 + 69: 41(ptr) AccessChain 27(data) 64 29 + Store 69 68 + 70: 6(int) Load 8(invocation) + 72: 71(ptr) AccessChain 27(data) 29 39 30 + 73: 19(int) Load 72 + 74: 19(int) GroupNonUniformIAdd 35 ClusteredReduce 73 34 + 75: 71(ptr) AccessChain 27(data) 70 39 30 + Store 75 74 + 76: 6(int) Load 8(invocation) + 79: 78(ptr) AccessChain 27(data) 39 39 + 80: 20(ivec4) Load 79 + 81: 77(ivec2) VectorShuffle 80 80 0 1 + 82: 77(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 81 34 + 83: 71(ptr) AccessChain 27(data) 76 39 30 + 84: 19(int) CompositeExtract 82 0 + Store 83 84 + 85: 71(ptr) AccessChain 27(data) 76 39 34 + 86: 19(int) CompositeExtract 82 1 + Store 85 86 + 87: 6(int) Load 8(invocation) + 89: 78(ptr) AccessChain 27(data) 51 39 + 90: 20(ivec4) Load 89 + 91: 88(ivec3) VectorShuffle 90 90 0 1 2 + 92: 88(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 91 34 + 93: 71(ptr) AccessChain 27(data) 87 39 30 + 94: 19(int) CompositeExtract 92 0 + Store 93 94 + 95: 71(ptr) AccessChain 27(data) 87 39 34 + 96: 19(int) CompositeExtract 92 1 + Store 95 96 + 97: 71(ptr) AccessChain 27(data) 87 39 61 + 98: 19(int) CompositeExtract 92 2 + Store 97 98 + 99: 6(int) Load 8(invocation) + 100: 78(ptr) AccessChain 27(data) 65 39 + 101: 20(ivec4) Load 100 + 102: 20(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 101 34 + 103: 78(ptr) AccessChain 27(data) 99 39 + Store 103 102 + 104: 6(int) Load 8(invocation) + 106: 105(ptr) AccessChain 27(data) 29 51 30 + 107: 6(int) Load 106 + 108: 6(int) GroupNonUniformIAdd 35 ClusteredReduce 107 34 + 109: 105(ptr) AccessChain 27(data) 104 51 30 + Store 109 108 + 110: 6(int) Load 8(invocation) + 113: 112(ptr) AccessChain 27(data) 39 51 114: 21(ivec4) Load 113 - 115: 112(ivec3) VectorShuffle 114 114 0 1 2 - 116: 112(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 115 34 - 117: 103(ptr) AccessChain 27(data) 111 50 - 118: 21(ivec4) Load 117 - 119: 21(ivec4) VectorShuffle 118 116 4 5 6 3 - Store 117 119 - 120: 6(int) Load 8(invocation) - 121: 103(ptr) AccessChain 27(data) 60 50 - 122: 21(ivec4) Load 121 - 123: 21(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 122 34 - 124: 103(ptr) AccessChain 27(data) 120 50 - Store 124 123 - 125: 6(int) Load 8(invocation) - 127: 126(ptr) AccessChain 27(data) 29 60 30 - 128:22(float64_t) Load 127 - 129:22(float64_t) GroupNonUniformFAdd 35 ClusteredReduce 128 34 - 130: 126(ptr) AccessChain 27(data) 125 60 30 - Store 130 129 - 131: 6(int) Load 8(invocation) - 134: 133(ptr) AccessChain 27(data) 39 60 - 135: 23(f64vec4) Load 134 - 136:132(f64vec2) VectorShuffle 135 135 0 1 - 137:132(f64vec2) GroupNonUniformFAdd 35 ClusteredReduce 136 34 - 138: 133(ptr) AccessChain 27(data) 131 60 - 139: 23(f64vec4) Load 138 - 140: 23(f64vec4) VectorShuffle 139 137 4 5 2 3 - Store 138 140 - 141: 6(int) Load 8(invocation) - 143: 133(ptr) AccessChain 27(data) 50 60 - 144: 23(f64vec4) Load 143 - 145:142(f64vec3) VectorShuffle 144 144 0 1 2 - 146:142(f64vec3) GroupNonUniformFAdd 35 ClusteredReduce 145 34 - 147: 133(ptr) AccessChain 27(data) 141 60 + 115: 111(ivec2) VectorShuffle 114 114 0 1 + 116: 111(ivec2) GroupNonUniformIAdd 35 ClusteredReduce 115 34 + 117: 105(ptr) AccessChain 27(data) 110 51 30 + 118: 6(int) CompositeExtract 116 0 + Store 117 118 + 119: 105(ptr) AccessChain 27(data) 110 51 34 + 120: 6(int) CompositeExtract 116 1 + Store 119 120 + 121: 6(int) Load 8(invocation) + 123: 112(ptr) AccessChain 27(data) 51 51 + 124: 21(ivec4) Load 123 + 125: 122(ivec3) VectorShuffle 124 124 0 1 2 + 126: 122(ivec3) GroupNonUniformIAdd 35 ClusteredReduce 125 34 + 127: 105(ptr) AccessChain 27(data) 121 51 30 + 128: 6(int) CompositeExtract 126 0 + Store 127 128 + 129: 105(ptr) AccessChain 27(data) 121 51 34 + 130: 6(int) CompositeExtract 126 1 + Store 129 130 + 131: 105(ptr) AccessChain 27(data) 121 51 61 + 132: 6(int) CompositeExtract 126 2 + Store 131 132 + 133: 6(int) Load 8(invocation) + 134: 112(ptr) AccessChain 27(data) 65 51 + 135: 21(ivec4) Load 134 + 136: 21(ivec4) GroupNonUniformIAdd 35 ClusteredReduce 135 34 + 137: 112(ptr) AccessChain 27(data) 133 51 + Store 137 136 + 138: 6(int) Load 8(invocation) + 140: 139(ptr) AccessChain 27(data) 29 65 30 + 141:22(float64_t) Load 140 + 142:22(float64_t) GroupNonUniformFAdd 35 ClusteredReduce 141 34 + 143: 139(ptr) AccessChain 27(data) 138 65 30 + Store 143 142 + 144: 6(int) Load 8(invocation) + 147: 146(ptr) AccessChain 27(data) 39 65 148: 23(f64vec4) Load 147 - 149: 23(f64vec4) VectorShuffle 148 146 4 5 6 3 - Store 147 149 - 150: 6(int) Load 8(invocation) - 151: 133(ptr) AccessChain 27(data) 60 60 - 152: 23(f64vec4) Load 151 - 153: 23(f64vec4) GroupNonUniformFAdd 35 ClusteredReduce 152 34 - 154: 133(ptr) AccessChain 27(data) 150 60 - Store 154 153 + 149:145(f64vec2) VectorShuffle 148 148 0 1 + 150:145(f64vec2) GroupNonUniformFAdd 35 ClusteredReduce 149 34 + 151: 139(ptr) AccessChain 27(data) 144 65 30 + 152:22(float64_t) CompositeExtract 150 0 + Store 151 152 + 153: 139(ptr) AccessChain 27(data) 144 65 34 + 154:22(float64_t) CompositeExtract 150 1 + Store 153 154 155: 6(int) Load 8(invocation) - 156: 31(ptr) AccessChain 27(data) 29 29 30 - 157: 17(float) Load 156 - 158: 17(float) GroupNonUniformFMul 35 ClusteredReduce 157 34 - 159: 31(ptr) AccessChain 27(data) 155 29 30 - Store 159 158 - 160: 6(int) Load 8(invocation) - 161: 41(ptr) AccessChain 27(data) 39 29 - 162: 18(fvec4) Load 161 - 163: 40(fvec2) VectorShuffle 162 162 0 1 - 164: 40(fvec2) GroupNonUniformFMul 35 ClusteredReduce 163 34 - 165: 41(ptr) AccessChain 27(data) 160 29 - 166: 18(fvec4) Load 165 - 167: 18(fvec4) VectorShuffle 166 164 4 5 2 3 - Store 165 167 - 168: 6(int) Load 8(invocation) - 169: 41(ptr) AccessChain 27(data) 50 29 - 170: 18(fvec4) Load 169 - 171: 51(fvec3) VectorShuffle 170 170 0 1 2 - 172: 51(fvec3) GroupNonUniformFMul 35 ClusteredReduce 171 34 - 173: 41(ptr) AccessChain 27(data) 168 29 - 174: 18(fvec4) Load 173 - 175: 18(fvec4) VectorShuffle 174 172 4 5 6 3 - Store 173 175 - 176: 6(int) Load 8(invocation) - 177: 41(ptr) AccessChain 27(data) 60 29 - 178: 18(fvec4) Load 177 - 179: 18(fvec4) GroupNonUniformFMul 35 ClusteredReduce 178 34 - 180: 41(ptr) AccessChain 27(data) 176 29 - Store 180 179 - 181: 6(int) Load 8(invocation) - 182: 66(ptr) AccessChain 27(data) 29 39 30 - 183: 19(int) Load 182 - 184: 19(int) GroupNonUniformIMul 35 ClusteredReduce 183 34 - 185: 66(ptr) AccessChain 27(data) 181 39 30 - Store 185 184 + 157: 146(ptr) AccessChain 27(data) 51 65 + 158: 23(f64vec4) Load 157 + 159:156(f64vec3) VectorShuffle 158 158 0 1 2 + 160:156(f64vec3) GroupNonUniformFAdd 35 ClusteredReduce 159 34 + 161: 139(ptr) AccessChain 27(data) 155 65 30 + 162:22(float64_t) CompositeExtract 160 0 + Store 161 162 + 163: 139(ptr) AccessChain 27(data) 155 65 34 + 164:22(float64_t) CompositeExtract 160 1 + Store 163 164 + 165: 139(ptr) AccessChain 27(data) 155 65 61 + 166:22(float64_t) CompositeExtract 160 2 + Store 165 166 + 167: 6(int) Load 8(invocation) + 168: 146(ptr) AccessChain 27(data) 65 65 + 169: 23(f64vec4) Load 168 + 170: 23(f64vec4) GroupNonUniformFAdd 35 ClusteredReduce 169 34 + 171: 146(ptr) AccessChain 27(data) 167 65 + Store 171 170 + 172: 6(int) Load 8(invocation) + 173: 31(ptr) AccessChain 27(data) 29 29 30 + 174: 17(float) Load 173 + 175: 17(float) GroupNonUniformFMul 35 ClusteredReduce 174 34 + 176: 31(ptr) AccessChain 27(data) 172 29 30 + Store 176 175 + 177: 6(int) Load 8(invocation) + 178: 41(ptr) AccessChain 27(data) 39 29 + 179: 18(fvec4) Load 178 + 180: 40(fvec2) VectorShuffle 179 179 0 1 + 181: 40(fvec2) GroupNonUniformFMul 35 ClusteredReduce 180 34 + 182: 31(ptr) AccessChain 27(data) 177 29 30 + 183: 17(float) CompositeExtract 181 0 + Store 182 183 + 184: 31(ptr) AccessChain 27(data) 177 29 34 + 185: 17(float) CompositeExtract 181 1 + Store 184 185 186: 6(int) Load 8(invocation) - 187: 73(ptr) AccessChain 27(data) 39 39 - 188: 20(ivec4) Load 187 - 189: 72(ivec2) VectorShuffle 188 188 0 1 - 190: 72(ivec2) GroupNonUniformIMul 35 ClusteredReduce 189 34 - 191: 73(ptr) AccessChain 27(data) 186 39 - 192: 20(ivec4) Load 191 - 193: 20(ivec4) VectorShuffle 192 190 4 5 2 3 - Store 191 193 - 194: 6(int) Load 8(invocation) - 195: 73(ptr) AccessChain 27(data) 50 39 - 196: 20(ivec4) Load 195 - 197: 82(ivec3) VectorShuffle 196 196 0 1 2 - 198: 82(ivec3) GroupNonUniformIMul 35 ClusteredReduce 197 34 - 199: 73(ptr) AccessChain 27(data) 194 39 - 200: 20(ivec4) Load 199 - 201: 20(ivec4) VectorShuffle 200 198 4 5 6 3 - Store 199 201 + 187: 41(ptr) AccessChain 27(data) 51 29 + 188: 18(fvec4) Load 187 + 189: 52(fvec3) VectorShuffle 188 188 0 1 2 + 190: 52(fvec3) GroupNonUniformFMul 35 ClusteredReduce 189 34 + 191: 31(ptr) AccessChain 27(data) 186 29 30 + 192: 17(float) CompositeExtract 190 0 + Store 191 192 + 193: 31(ptr) AccessChain 27(data) 186 29 34 + 194: 17(float) CompositeExtract 190 1 + Store 193 194 + 195: 31(ptr) AccessChain 27(data) 186 29 61 + 196: 17(float) CompositeExtract 190 2 + Store 195 196 + 197: 6(int) Load 8(invocation) + 198: 41(ptr) AccessChain 27(data) 65 29 + 199: 18(fvec4) Load 198 + 200: 18(fvec4) GroupNonUniformFMul 35 ClusteredReduce 199 34 + 201: 41(ptr) AccessChain 27(data) 197 29 + Store 201 200 202: 6(int) Load 8(invocation) - 203: 73(ptr) AccessChain 27(data) 60 39 - 204: 20(ivec4) Load 203 - 205: 20(ivec4) GroupNonUniformIMul 35 ClusteredReduce 204 34 - 206: 73(ptr) AccessChain 27(data) 202 39 + 203: 71(ptr) AccessChain 27(data) 29 39 30 + 204: 19(int) Load 203 + 205: 19(int) GroupNonUniformIMul 35 ClusteredReduce 204 34 + 206: 71(ptr) AccessChain 27(data) 202 39 30 Store 206 205 207: 6(int) Load 8(invocation) - 208: 96(ptr) AccessChain 27(data) 29 50 30 - 209: 6(int) Load 208 - 210: 6(int) GroupNonUniformIMul 35 ClusteredReduce 209 34 - 211: 96(ptr) AccessChain 27(data) 207 50 30 - Store 211 210 - 212: 6(int) Load 8(invocation) - 213: 103(ptr) AccessChain 27(data) 39 50 - 214: 21(ivec4) Load 213 - 215: 102(ivec2) VectorShuffle 214 214 0 1 - 216: 102(ivec2) GroupNonUniformIMul 35 ClusteredReduce 215 34 - 217: 103(ptr) AccessChain 27(data) 212 50 - 218: 21(ivec4) Load 217 - 219: 21(ivec4) VectorShuffle 218 216 4 5 2 3 - Store 217 219 - 220: 6(int) Load 8(invocation) - 221: 103(ptr) AccessChain 27(data) 50 50 - 222: 21(ivec4) Load 221 - 223: 112(ivec3) VectorShuffle 222 222 0 1 2 - 224: 112(ivec3) GroupNonUniformIMul 35 ClusteredReduce 223 34 - 225: 103(ptr) AccessChain 27(data) 220 50 - 226: 21(ivec4) Load 225 - 227: 21(ivec4) VectorShuffle 226 224 4 5 6 3 - Store 225 227 - 228: 6(int) Load 8(invocation) - 229: 103(ptr) AccessChain 27(data) 60 50 - 230: 21(ivec4) Load 229 - 231: 21(ivec4) GroupNonUniformIMul 35 ClusteredReduce 230 34 - 232: 103(ptr) AccessChain 27(data) 228 50 - Store 232 231 - 233: 6(int) Load 8(invocation) - 234: 126(ptr) AccessChain 27(data) 29 60 30 - 235:22(float64_t) Load 234 - 236:22(float64_t) GroupNonUniformFMul 35 ClusteredReduce 235 34 - 237: 126(ptr) AccessChain 27(data) 233 60 30 - Store 237 236 - 238: 6(int) Load 8(invocation) - 239: 133(ptr) AccessChain 27(data) 39 60 - 240: 23(f64vec4) Load 239 - 241:132(f64vec2) VectorShuffle 240 240 0 1 - 242:132(f64vec2) GroupNonUniformFMul 35 ClusteredReduce 241 34 - 243: 133(ptr) AccessChain 27(data) 238 60 - 244: 23(f64vec4) Load 243 - 245: 23(f64vec4) VectorShuffle 244 242 4 5 2 3 - Store 243 245 + 208: 78(ptr) AccessChain 27(data) 39 39 + 209: 20(ivec4) Load 208 + 210: 77(ivec2) VectorShuffle 209 209 0 1 + 211: 77(ivec2) GroupNonUniformIMul 35 ClusteredReduce 210 34 + 212: 71(ptr) AccessChain 27(data) 207 39 30 + 213: 19(int) CompositeExtract 211 0 + Store 212 213 + 214: 71(ptr) AccessChain 27(data) 207 39 34 + 215: 19(int) CompositeExtract 211 1 + Store 214 215 + 216: 6(int) Load 8(invocation) + 217: 78(ptr) AccessChain 27(data) 51 39 + 218: 20(ivec4) Load 217 + 219: 88(ivec3) VectorShuffle 218 218 0 1 2 + 220: 88(ivec3) GroupNonUniformIMul 35 ClusteredReduce 219 34 + 221: 71(ptr) AccessChain 27(data) 216 39 30 + 222: 19(int) CompositeExtract 220 0 + Store 221 222 + 223: 71(ptr) AccessChain 27(data) 216 39 34 + 224: 19(int) CompositeExtract 220 1 + Store 223 224 + 225: 71(ptr) AccessChain 27(data) 216 39 61 + 226: 19(int) CompositeExtract 220 2 + Store 225 226 + 227: 6(int) Load 8(invocation) + 228: 78(ptr) AccessChain 27(data) 65 39 + 229: 20(ivec4) Load 228 + 230: 20(ivec4) GroupNonUniformIMul 35 ClusteredReduce 229 34 + 231: 78(ptr) AccessChain 27(data) 227 39 + Store 231 230 + 232: 6(int) Load 8(invocation) + 233: 105(ptr) AccessChain 27(data) 29 51 30 + 234: 6(int) Load 233 + 235: 6(int) GroupNonUniformIMul 35 ClusteredReduce 234 34 + 236: 105(ptr) AccessChain 27(data) 232 51 30 + Store 236 235 + 237: 6(int) Load 8(invocation) + 238: 112(ptr) AccessChain 27(data) 39 51 + 239: 21(ivec4) Load 238 + 240: 111(ivec2) VectorShuffle 239 239 0 1 + 241: 111(ivec2) GroupNonUniformIMul 35 ClusteredReduce 240 34 + 242: 105(ptr) AccessChain 27(data) 237 51 30 + 243: 6(int) CompositeExtract 241 0 + Store 242 243 + 244: 105(ptr) AccessChain 27(data) 237 51 34 + 245: 6(int) CompositeExtract 241 1 + Store 244 245 246: 6(int) Load 8(invocation) - 247: 133(ptr) AccessChain 27(data) 50 60 - 248: 23(f64vec4) Load 247 - 249:142(f64vec3) VectorShuffle 248 248 0 1 2 - 250:142(f64vec3) GroupNonUniformFMul 35 ClusteredReduce 249 34 - 251: 133(ptr) AccessChain 27(data) 246 60 - 252: 23(f64vec4) Load 251 - 253: 23(f64vec4) VectorShuffle 252 250 4 5 6 3 - Store 251 253 - 254: 6(int) Load 8(invocation) - 255: 133(ptr) AccessChain 27(data) 60 60 - 256: 23(f64vec4) Load 255 - 257: 23(f64vec4) GroupNonUniformFMul 35 ClusteredReduce 256 34 - 258: 133(ptr) AccessChain 27(data) 254 60 - Store 258 257 - 259: 6(int) Load 8(invocation) - 260: 31(ptr) AccessChain 27(data) 29 29 30 - 261: 17(float) Load 260 - 262: 17(float) GroupNonUniformFMin 35 ClusteredReduce 261 34 - 263: 31(ptr) AccessChain 27(data) 259 29 30 - Store 263 262 - 264: 6(int) Load 8(invocation) - 265: 41(ptr) AccessChain 27(data) 39 29 - 266: 18(fvec4) Load 265 - 267: 40(fvec2) VectorShuffle 266 266 0 1 - 268: 40(fvec2) GroupNonUniformFMin 35 ClusteredReduce 267 34 - 269: 41(ptr) AccessChain 27(data) 264 29 - 270: 18(fvec4) Load 269 - 271: 18(fvec4) VectorShuffle 270 268 4 5 2 3 - Store 269 271 - 272: 6(int) Load 8(invocation) - 273: 41(ptr) AccessChain 27(data) 50 29 - 274: 18(fvec4) Load 273 - 275: 51(fvec3) VectorShuffle 274 274 0 1 2 - 276: 51(fvec3) GroupNonUniformFMin 35 ClusteredReduce 275 34 - 277: 41(ptr) AccessChain 27(data) 272 29 - 278: 18(fvec4) Load 277 - 279: 18(fvec4) VectorShuffle 278 276 4 5 6 3 - Store 277 279 - 280: 6(int) Load 8(invocation) - 281: 41(ptr) AccessChain 27(data) 60 29 - 282: 18(fvec4) Load 281 - 283: 18(fvec4) GroupNonUniformFMin 35 ClusteredReduce 282 34 - 284: 41(ptr) AccessChain 27(data) 280 29 - Store 284 283 - 285: 6(int) Load 8(invocation) - 286: 66(ptr) AccessChain 27(data) 29 39 30 - 287: 19(int) Load 286 - 288: 19(int) GroupNonUniformSMin 35 ClusteredReduce 287 34 - 289: 66(ptr) AccessChain 27(data) 285 39 30 - Store 289 288 - 290: 6(int) Load 8(invocation) - 291: 73(ptr) AccessChain 27(data) 39 39 - 292: 20(ivec4) Load 291 - 293: 72(ivec2) VectorShuffle 292 292 0 1 - 294: 72(ivec2) GroupNonUniformSMin 35 ClusteredReduce 293 34 - 295: 73(ptr) AccessChain 27(data) 290 39 - 296: 20(ivec4) Load 295 - 297: 20(ivec4) VectorShuffle 296 294 4 5 2 3 - Store 295 297 - 298: 6(int) Load 8(invocation) - 299: 73(ptr) AccessChain 27(data) 50 39 - 300: 20(ivec4) Load 299 - 301: 82(ivec3) VectorShuffle 300 300 0 1 2 - 302: 82(ivec3) GroupNonUniformSMin 35 ClusteredReduce 301 34 - 303: 73(ptr) AccessChain 27(data) 298 39 - 304: 20(ivec4) Load 303 - 305: 20(ivec4) VectorShuffle 304 302 4 5 6 3 - Store 303 305 + 247: 112(ptr) AccessChain 27(data) 51 51 + 248: 21(ivec4) Load 247 + 249: 122(ivec3) VectorShuffle 248 248 0 1 2 + 250: 122(ivec3) GroupNonUniformIMul 35 ClusteredReduce 249 34 + 251: 105(ptr) AccessChain 27(data) 246 51 30 + 252: 6(int) CompositeExtract 250 0 + Store 251 252 + 253: 105(ptr) AccessChain 27(data) 246 51 34 + 254: 6(int) CompositeExtract 250 1 + Store 253 254 + 255: 105(ptr) AccessChain 27(data) 246 51 61 + 256: 6(int) CompositeExtract 250 2 + Store 255 256 + 257: 6(int) Load 8(invocation) + 258: 112(ptr) AccessChain 27(data) 65 51 + 259: 21(ivec4) Load 258 + 260: 21(ivec4) GroupNonUniformIMul 35 ClusteredReduce 259 34 + 261: 112(ptr) AccessChain 27(data) 257 51 + Store 261 260 + 262: 6(int) Load 8(invocation) + 263: 139(ptr) AccessChain 27(data) 29 65 30 + 264:22(float64_t) Load 263 + 265:22(float64_t) GroupNonUniformFMul 35 ClusteredReduce 264 34 + 266: 139(ptr) AccessChain 27(data) 262 65 30 + Store 266 265 + 267: 6(int) Load 8(invocation) + 268: 146(ptr) AccessChain 27(data) 39 65 + 269: 23(f64vec4) Load 268 + 270:145(f64vec2) VectorShuffle 269 269 0 1 + 271:145(f64vec2) GroupNonUniformFMul 35 ClusteredReduce 270 34 + 272: 139(ptr) AccessChain 27(data) 267 65 30 + 273:22(float64_t) CompositeExtract 271 0 + Store 272 273 + 274: 139(ptr) AccessChain 27(data) 267 65 34 + 275:22(float64_t) CompositeExtract 271 1 + Store 274 275 + 276: 6(int) Load 8(invocation) + 277: 146(ptr) AccessChain 27(data) 51 65 + 278: 23(f64vec4) Load 277 + 279:156(f64vec3) VectorShuffle 278 278 0 1 2 + 280:156(f64vec3) GroupNonUniformFMul 35 ClusteredReduce 279 34 + 281: 139(ptr) AccessChain 27(data) 276 65 30 + 282:22(float64_t) CompositeExtract 280 0 + Store 281 282 + 283: 139(ptr) AccessChain 27(data) 276 65 34 + 284:22(float64_t) CompositeExtract 280 1 + Store 283 284 + 285: 139(ptr) AccessChain 27(data) 276 65 61 + 286:22(float64_t) CompositeExtract 280 2 + Store 285 286 + 287: 6(int) Load 8(invocation) + 288: 146(ptr) AccessChain 27(data) 65 65 + 289: 23(f64vec4) Load 288 + 290: 23(f64vec4) GroupNonUniformFMul 35 ClusteredReduce 289 34 + 291: 146(ptr) AccessChain 27(data) 287 65 + Store 291 290 + 292: 6(int) Load 8(invocation) + 293: 31(ptr) AccessChain 27(data) 29 29 30 + 294: 17(float) Load 293 + 295: 17(float) GroupNonUniformFMin 35 ClusteredReduce 294 34 + 296: 31(ptr) AccessChain 27(data) 292 29 30 + Store 296 295 + 297: 6(int) Load 8(invocation) + 298: 41(ptr) AccessChain 27(data) 39 29 + 299: 18(fvec4) Load 298 + 300: 40(fvec2) VectorShuffle 299 299 0 1 + 301: 40(fvec2) GroupNonUniformFMin 35 ClusteredReduce 300 34 + 302: 31(ptr) AccessChain 27(data) 297 29 30 + 303: 17(float) CompositeExtract 301 0 + Store 302 303 + 304: 31(ptr) AccessChain 27(data) 297 29 34 + 305: 17(float) CompositeExtract 301 1 + Store 304 305 306: 6(int) Load 8(invocation) - 307: 73(ptr) AccessChain 27(data) 60 39 - 308: 20(ivec4) Load 307 - 309: 20(ivec4) GroupNonUniformSMin 35 ClusteredReduce 308 34 - 310: 73(ptr) AccessChain 27(data) 306 39 - Store 310 309 - 311: 6(int) Load 8(invocation) - 312: 96(ptr) AccessChain 27(data) 29 50 30 - 313: 6(int) Load 312 - 314: 6(int) GroupNonUniformUMin 35 ClusteredReduce 313 34 - 315: 96(ptr) AccessChain 27(data) 311 50 30 - Store 315 314 - 316: 6(int) Load 8(invocation) - 317: 103(ptr) AccessChain 27(data) 39 50 - 318: 21(ivec4) Load 317 - 319: 102(ivec2) VectorShuffle 318 318 0 1 - 320: 102(ivec2) GroupNonUniformUMin 35 ClusteredReduce 319 34 - 321: 103(ptr) AccessChain 27(data) 316 50 - 322: 21(ivec4) Load 321 - 323: 21(ivec4) VectorShuffle 322 320 4 5 2 3 - Store 321 323 - 324: 6(int) Load 8(invocation) - 325: 103(ptr) AccessChain 27(data) 50 50 - 326: 21(ivec4) Load 325 - 327: 112(ivec3) VectorShuffle 326 326 0 1 2 - 328: 112(ivec3) GroupNonUniformUMin 35 ClusteredReduce 327 34 - 329: 103(ptr) AccessChain 27(data) 324 50 - 330: 21(ivec4) Load 329 - 331: 21(ivec4) VectorShuffle 330 328 4 5 6 3 - Store 329 331 - 332: 6(int) Load 8(invocation) - 333: 103(ptr) AccessChain 27(data) 60 50 - 334: 21(ivec4) Load 333 - 335: 21(ivec4) GroupNonUniformUMin 35 ClusteredReduce 334 34 - 336: 103(ptr) AccessChain 27(data) 332 50 - Store 336 335 - 337: 6(int) Load 8(invocation) - 338: 126(ptr) AccessChain 27(data) 29 60 30 - 339:22(float64_t) Load 338 - 340:22(float64_t) GroupNonUniformFMin 35 ClusteredReduce 339 34 - 341: 126(ptr) AccessChain 27(data) 337 60 30 - Store 341 340 - 342: 6(int) Load 8(invocation) - 343: 133(ptr) AccessChain 27(data) 39 60 - 344: 23(f64vec4) Load 343 - 345:132(f64vec2) VectorShuffle 344 344 0 1 - 346:132(f64vec2) GroupNonUniformFMin 35 ClusteredReduce 345 34 - 347: 133(ptr) AccessChain 27(data) 342 60 - 348: 23(f64vec4) Load 347 - 349: 23(f64vec4) VectorShuffle 348 346 4 5 2 3 - Store 347 349 - 350: 6(int) Load 8(invocation) - 351: 133(ptr) AccessChain 27(data) 50 60 - 352: 23(f64vec4) Load 351 - 353:142(f64vec3) VectorShuffle 352 352 0 1 2 - 354:142(f64vec3) GroupNonUniformFMin 35 ClusteredReduce 353 34 - 355: 133(ptr) AccessChain 27(data) 350 60 - 356: 23(f64vec4) Load 355 - 357: 23(f64vec4) VectorShuffle 356 354 4 5 6 3 - Store 355 357 - 358: 6(int) Load 8(invocation) - 359: 133(ptr) AccessChain 27(data) 60 60 - 360: 23(f64vec4) Load 359 - 361: 23(f64vec4) GroupNonUniformFMin 35 ClusteredReduce 360 34 - 362: 133(ptr) AccessChain 27(data) 358 60 - Store 362 361 - 363: 6(int) Load 8(invocation) - 364: 31(ptr) AccessChain 27(data) 29 29 30 - 365: 17(float) Load 364 - 366: 17(float) GroupNonUniformFMax 35 ClusteredReduce 365 34 - 367: 31(ptr) AccessChain 27(data) 363 29 30 - Store 367 366 - 368: 6(int) Load 8(invocation) - 369: 41(ptr) AccessChain 27(data) 39 29 - 370: 18(fvec4) Load 369 - 371: 40(fvec2) VectorShuffle 370 370 0 1 - 372: 40(fvec2) GroupNonUniformFMax 35 ClusteredReduce 371 34 - 373: 41(ptr) AccessChain 27(data) 368 29 - 374: 18(fvec4) Load 373 - 375: 18(fvec4) VectorShuffle 374 372 4 5 2 3 - Store 373 375 - 376: 6(int) Load 8(invocation) - 377: 41(ptr) AccessChain 27(data) 50 29 - 378: 18(fvec4) Load 377 - 379: 51(fvec3) VectorShuffle 378 378 0 1 2 - 380: 51(fvec3) GroupNonUniformFMax 35 ClusteredReduce 379 34 - 381: 41(ptr) AccessChain 27(data) 376 29 - 382: 18(fvec4) Load 381 - 383: 18(fvec4) VectorShuffle 382 380 4 5 6 3 - Store 381 383 - 384: 6(int) Load 8(invocation) - 385: 41(ptr) AccessChain 27(data) 60 29 - 386: 18(fvec4) Load 385 - 387: 18(fvec4) GroupNonUniformFMax 35 ClusteredReduce 386 34 - 388: 41(ptr) AccessChain 27(data) 384 29 - Store 388 387 - 389: 6(int) Load 8(invocation) - 390: 66(ptr) AccessChain 27(data) 29 39 30 - 391: 19(int) Load 390 - 392: 19(int) GroupNonUniformSMax 35 ClusteredReduce 391 34 - 393: 66(ptr) AccessChain 27(data) 389 39 30 - Store 393 392 - 394: 6(int) Load 8(invocation) - 395: 73(ptr) AccessChain 27(data) 39 39 - 396: 20(ivec4) Load 395 - 397: 72(ivec2) VectorShuffle 396 396 0 1 - 398: 72(ivec2) GroupNonUniformSMax 35 ClusteredReduce 397 34 - 399: 73(ptr) AccessChain 27(data) 394 39 - 400: 20(ivec4) Load 399 - 401: 20(ivec4) VectorShuffle 400 398 4 5 2 3 - Store 399 401 - 402: 6(int) Load 8(invocation) - 403: 73(ptr) AccessChain 27(data) 50 39 - 404: 20(ivec4) Load 403 - 405: 82(ivec3) VectorShuffle 404 404 0 1 2 - 406: 82(ivec3) GroupNonUniformSMax 35 ClusteredReduce 405 34 - 407: 73(ptr) AccessChain 27(data) 402 39 - 408: 20(ivec4) Load 407 - 409: 20(ivec4) VectorShuffle 408 406 4 5 6 3 - Store 407 409 - 410: 6(int) Load 8(invocation) - 411: 73(ptr) AccessChain 27(data) 60 39 - 412: 20(ivec4) Load 411 - 413: 20(ivec4) GroupNonUniformSMax 35 ClusteredReduce 412 34 - 414: 73(ptr) AccessChain 27(data) 410 39 - Store 414 413 - 415: 6(int) Load 8(invocation) - 416: 96(ptr) AccessChain 27(data) 29 50 30 - 417: 6(int) Load 416 - 418: 6(int) GroupNonUniformUMax 35 ClusteredReduce 417 34 - 419: 96(ptr) AccessChain 27(data) 415 50 30 - Store 419 418 - 420: 6(int) Load 8(invocation) - 421: 103(ptr) AccessChain 27(data) 39 50 - 422: 21(ivec4) Load 421 - 423: 102(ivec2) VectorShuffle 422 422 0 1 - 424: 102(ivec2) GroupNonUniformUMax 35 ClusteredReduce 423 34 - 425: 103(ptr) AccessChain 27(data) 420 50 - 426: 21(ivec4) Load 425 - 427: 21(ivec4) VectorShuffle 426 424 4 5 2 3 - Store 425 427 - 428: 6(int) Load 8(invocation) - 429: 103(ptr) AccessChain 27(data) 50 50 - 430: 21(ivec4) Load 429 - 431: 112(ivec3) VectorShuffle 430 430 0 1 2 - 432: 112(ivec3) GroupNonUniformUMax 35 ClusteredReduce 431 34 - 433: 103(ptr) AccessChain 27(data) 428 50 - 434: 21(ivec4) Load 433 - 435: 21(ivec4) VectorShuffle 434 432 4 5 6 3 - Store 433 435 - 436: 6(int) Load 8(invocation) - 437: 103(ptr) AccessChain 27(data) 60 50 - 438: 21(ivec4) Load 437 - 439: 21(ivec4) GroupNonUniformUMax 35 ClusteredReduce 438 34 - 440: 103(ptr) AccessChain 27(data) 436 50 - Store 440 439 - 441: 6(int) Load 8(invocation) - 442: 126(ptr) AccessChain 27(data) 29 60 30 - 443:22(float64_t) Load 442 - 444:22(float64_t) GroupNonUniformFMax 35 ClusteredReduce 443 34 - 445: 126(ptr) AccessChain 27(data) 441 60 30 - Store 445 444 - 446: 6(int) Load 8(invocation) - 447: 133(ptr) AccessChain 27(data) 39 60 - 448: 23(f64vec4) Load 447 - 449:132(f64vec2) VectorShuffle 448 448 0 1 - 450:132(f64vec2) GroupNonUniformFMax 35 ClusteredReduce 449 34 - 451: 133(ptr) AccessChain 27(data) 446 60 - 452: 23(f64vec4) Load 451 - 453: 23(f64vec4) VectorShuffle 452 450 4 5 2 3 - Store 451 453 - 454: 6(int) Load 8(invocation) - 455: 133(ptr) AccessChain 27(data) 50 60 - 456: 23(f64vec4) Load 455 - 457:142(f64vec3) VectorShuffle 456 456 0 1 2 - 458:142(f64vec3) GroupNonUniformFMax 35 ClusteredReduce 457 34 - 459: 133(ptr) AccessChain 27(data) 454 60 - 460: 23(f64vec4) Load 459 - 461: 23(f64vec4) VectorShuffle 460 458 4 5 6 3 - Store 459 461 - 462: 6(int) Load 8(invocation) - 463: 133(ptr) AccessChain 27(data) 60 60 - 464: 23(f64vec4) Load 463 - 465: 23(f64vec4) GroupNonUniformFMax 35 ClusteredReduce 464 34 - 466: 133(ptr) AccessChain 27(data) 462 60 - Store 466 465 + 307: 41(ptr) AccessChain 27(data) 51 29 + 308: 18(fvec4) Load 307 + 309: 52(fvec3) VectorShuffle 308 308 0 1 2 + 310: 52(fvec3) GroupNonUniformFMin 35 ClusteredReduce 309 34 + 311: 31(ptr) AccessChain 27(data) 306 29 30 + 312: 17(float) CompositeExtract 310 0 + Store 311 312 + 313: 31(ptr) AccessChain 27(data) 306 29 34 + 314: 17(float) CompositeExtract 310 1 + Store 313 314 + 315: 31(ptr) AccessChain 27(data) 306 29 61 + 316: 17(float) CompositeExtract 310 2 + Store 315 316 + 317: 6(int) Load 8(invocation) + 318: 41(ptr) AccessChain 27(data) 65 29 + 319: 18(fvec4) Load 318 + 320: 18(fvec4) GroupNonUniformFMin 35 ClusteredReduce 319 34 + 321: 41(ptr) AccessChain 27(data) 317 29 + Store 321 320 + 322: 6(int) Load 8(invocation) + 323: 71(ptr) AccessChain 27(data) 29 39 30 + 324: 19(int) Load 323 + 325: 19(int) GroupNonUniformSMin 35 ClusteredReduce 324 34 + 326: 71(ptr) AccessChain 27(data) 322 39 30 + Store 326 325 + 327: 6(int) Load 8(invocation) + 328: 78(ptr) AccessChain 27(data) 39 39 + 329: 20(ivec4) Load 328 + 330: 77(ivec2) VectorShuffle 329 329 0 1 + 331: 77(ivec2) GroupNonUniformSMin 35 ClusteredReduce 330 34 + 332: 71(ptr) AccessChain 27(data) 327 39 30 + 333: 19(int) CompositeExtract 331 0 + Store 332 333 + 334: 71(ptr) AccessChain 27(data) 327 39 34 + 335: 19(int) CompositeExtract 331 1 + Store 334 335 + 336: 6(int) Load 8(invocation) + 337: 78(ptr) AccessChain 27(data) 51 39 + 338: 20(ivec4) Load 337 + 339: 88(ivec3) VectorShuffle 338 338 0 1 2 + 340: 88(ivec3) GroupNonUniformSMin 35 ClusteredReduce 339 34 + 341: 71(ptr) AccessChain 27(data) 336 39 30 + 342: 19(int) CompositeExtract 340 0 + Store 341 342 + 343: 71(ptr) AccessChain 27(data) 336 39 34 + 344: 19(int) CompositeExtract 340 1 + Store 343 344 + 345: 71(ptr) AccessChain 27(data) 336 39 61 + 346: 19(int) CompositeExtract 340 2 + Store 345 346 + 347: 6(int) Load 8(invocation) + 348: 78(ptr) AccessChain 27(data) 65 39 + 349: 20(ivec4) Load 348 + 350: 20(ivec4) GroupNonUniformSMin 35 ClusteredReduce 349 34 + 351: 78(ptr) AccessChain 27(data) 347 39 + Store 351 350 + 352: 6(int) Load 8(invocation) + 353: 105(ptr) AccessChain 27(data) 29 51 30 + 354: 6(int) Load 353 + 355: 6(int) GroupNonUniformUMin 35 ClusteredReduce 354 34 + 356: 105(ptr) AccessChain 27(data) 352 51 30 + Store 356 355 + 357: 6(int) Load 8(invocation) + 358: 112(ptr) AccessChain 27(data) 39 51 + 359: 21(ivec4) Load 358 + 360: 111(ivec2) VectorShuffle 359 359 0 1 + 361: 111(ivec2) GroupNonUniformUMin 35 ClusteredReduce 360 34 + 362: 105(ptr) AccessChain 27(data) 357 51 30 + 363: 6(int) CompositeExtract 361 0 + Store 362 363 + 364: 105(ptr) AccessChain 27(data) 357 51 34 + 365: 6(int) CompositeExtract 361 1 + Store 364 365 + 366: 6(int) Load 8(invocation) + 367: 112(ptr) AccessChain 27(data) 51 51 + 368: 21(ivec4) Load 367 + 369: 122(ivec3) VectorShuffle 368 368 0 1 2 + 370: 122(ivec3) GroupNonUniformUMin 35 ClusteredReduce 369 34 + 371: 105(ptr) AccessChain 27(data) 366 51 30 + 372: 6(int) CompositeExtract 370 0 + Store 371 372 + 373: 105(ptr) AccessChain 27(data) 366 51 34 + 374: 6(int) CompositeExtract 370 1 + Store 373 374 + 375: 105(ptr) AccessChain 27(data) 366 51 61 + 376: 6(int) CompositeExtract 370 2 + Store 375 376 + 377: 6(int) Load 8(invocation) + 378: 112(ptr) AccessChain 27(data) 65 51 + 379: 21(ivec4) Load 378 + 380: 21(ivec4) GroupNonUniformUMin 35 ClusteredReduce 379 34 + 381: 112(ptr) AccessChain 27(data) 377 51 + Store 381 380 + 382: 6(int) Load 8(invocation) + 383: 139(ptr) AccessChain 27(data) 29 65 30 + 384:22(float64_t) Load 383 + 385:22(float64_t) GroupNonUniformFMin 35 ClusteredReduce 384 34 + 386: 139(ptr) AccessChain 27(data) 382 65 30 + Store 386 385 + 387: 6(int) Load 8(invocation) + 388: 146(ptr) AccessChain 27(data) 39 65 + 389: 23(f64vec4) Load 388 + 390:145(f64vec2) VectorShuffle 389 389 0 1 + 391:145(f64vec2) GroupNonUniformFMin 35 ClusteredReduce 390 34 + 392: 139(ptr) AccessChain 27(data) 387 65 30 + 393:22(float64_t) CompositeExtract 391 0 + Store 392 393 + 394: 139(ptr) AccessChain 27(data) 387 65 34 + 395:22(float64_t) CompositeExtract 391 1 + Store 394 395 + 396: 6(int) Load 8(invocation) + 397: 146(ptr) AccessChain 27(data) 51 65 + 398: 23(f64vec4) Load 397 + 399:156(f64vec3) VectorShuffle 398 398 0 1 2 + 400:156(f64vec3) GroupNonUniformFMin 35 ClusteredReduce 399 34 + 401: 139(ptr) AccessChain 27(data) 396 65 30 + 402:22(float64_t) CompositeExtract 400 0 + Store 401 402 + 403: 139(ptr) AccessChain 27(data) 396 65 34 + 404:22(float64_t) CompositeExtract 400 1 + Store 403 404 + 405: 139(ptr) AccessChain 27(data) 396 65 61 + 406:22(float64_t) CompositeExtract 400 2 + Store 405 406 + 407: 6(int) Load 8(invocation) + 408: 146(ptr) AccessChain 27(data) 65 65 + 409: 23(f64vec4) Load 408 + 410: 23(f64vec4) GroupNonUniformFMin 35 ClusteredReduce 409 34 + 411: 146(ptr) AccessChain 27(data) 407 65 + Store 411 410 + 412: 6(int) Load 8(invocation) + 413: 31(ptr) AccessChain 27(data) 29 29 30 + 414: 17(float) Load 413 + 415: 17(float) GroupNonUniformFMax 35 ClusteredReduce 414 34 + 416: 31(ptr) AccessChain 27(data) 412 29 30 + Store 416 415 + 417: 6(int) Load 8(invocation) + 418: 41(ptr) AccessChain 27(data) 39 29 + 419: 18(fvec4) Load 418 + 420: 40(fvec2) VectorShuffle 419 419 0 1 + 421: 40(fvec2) GroupNonUniformFMax 35 ClusteredReduce 420 34 + 422: 31(ptr) AccessChain 27(data) 417 29 30 + 423: 17(float) CompositeExtract 421 0 + Store 422 423 + 424: 31(ptr) AccessChain 27(data) 417 29 34 + 425: 17(float) CompositeExtract 421 1 + Store 424 425 + 426: 6(int) Load 8(invocation) + 427: 41(ptr) AccessChain 27(data) 51 29 + 428: 18(fvec4) Load 427 + 429: 52(fvec3) VectorShuffle 428 428 0 1 2 + 430: 52(fvec3) GroupNonUniformFMax 35 ClusteredReduce 429 34 + 431: 31(ptr) AccessChain 27(data) 426 29 30 + 432: 17(float) CompositeExtract 430 0 + Store 431 432 + 433: 31(ptr) AccessChain 27(data) 426 29 34 + 434: 17(float) CompositeExtract 430 1 + Store 433 434 + 435: 31(ptr) AccessChain 27(data) 426 29 61 + 436: 17(float) CompositeExtract 430 2 + Store 435 436 + 437: 6(int) Load 8(invocation) + 438: 41(ptr) AccessChain 27(data) 65 29 + 439: 18(fvec4) Load 438 + 440: 18(fvec4) GroupNonUniformFMax 35 ClusteredReduce 439 34 + 441: 41(ptr) AccessChain 27(data) 437 29 + Store 441 440 + 442: 6(int) Load 8(invocation) + 443: 71(ptr) AccessChain 27(data) 29 39 30 + 444: 19(int) Load 443 + 445: 19(int) GroupNonUniformSMax 35 ClusteredReduce 444 34 + 446: 71(ptr) AccessChain 27(data) 442 39 30 + Store 446 445 + 447: 6(int) Load 8(invocation) + 448: 78(ptr) AccessChain 27(data) 39 39 + 449: 20(ivec4) Load 448 + 450: 77(ivec2) VectorShuffle 449 449 0 1 + 451: 77(ivec2) GroupNonUniformSMax 35 ClusteredReduce 450 34 + 452: 71(ptr) AccessChain 27(data) 447 39 30 + 453: 19(int) CompositeExtract 451 0 + Store 452 453 + 454: 71(ptr) AccessChain 27(data) 447 39 34 + 455: 19(int) CompositeExtract 451 1 + Store 454 455 + 456: 6(int) Load 8(invocation) + 457: 78(ptr) AccessChain 27(data) 51 39 + 458: 20(ivec4) Load 457 + 459: 88(ivec3) VectorShuffle 458 458 0 1 2 + 460: 88(ivec3) GroupNonUniformSMax 35 ClusteredReduce 459 34 + 461: 71(ptr) AccessChain 27(data) 456 39 30 + 462: 19(int) CompositeExtract 460 0 + Store 461 462 + 463: 71(ptr) AccessChain 27(data) 456 39 34 + 464: 19(int) CompositeExtract 460 1 + Store 463 464 + 465: 71(ptr) AccessChain 27(data) 456 39 61 + 466: 19(int) CompositeExtract 460 2 + Store 465 466 467: 6(int) Load 8(invocation) - 468: 66(ptr) AccessChain 27(data) 29 39 30 - 469: 19(int) Load 468 - 470: 19(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 469 34 - 471: 66(ptr) AccessChain 27(data) 467 39 30 + 468: 78(ptr) AccessChain 27(data) 65 39 + 469: 20(ivec4) Load 468 + 470: 20(ivec4) GroupNonUniformSMax 35 ClusteredReduce 469 34 + 471: 78(ptr) AccessChain 27(data) 467 39 Store 471 470 472: 6(int) Load 8(invocation) - 473: 73(ptr) AccessChain 27(data) 39 39 - 474: 20(ivec4) Load 473 - 475: 72(ivec2) VectorShuffle 474 474 0 1 - 476: 72(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 475 34 - 477: 73(ptr) AccessChain 27(data) 472 39 - 478: 20(ivec4) Load 477 - 479: 20(ivec4) VectorShuffle 478 476 4 5 2 3 - Store 477 479 - 480: 6(int) Load 8(invocation) - 481: 73(ptr) AccessChain 27(data) 50 39 - 482: 20(ivec4) Load 481 - 483: 82(ivec3) VectorShuffle 482 482 0 1 2 - 484: 82(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 483 34 - 485: 73(ptr) AccessChain 27(data) 480 39 - 486: 20(ivec4) Load 485 - 487: 20(ivec4) VectorShuffle 486 484 4 5 6 3 - Store 485 487 - 488: 6(int) Load 8(invocation) - 489: 73(ptr) AccessChain 27(data) 60 39 - 490: 20(ivec4) Load 489 - 491: 20(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 490 34 - 492: 73(ptr) AccessChain 27(data) 488 39 - Store 492 491 - 493: 6(int) Load 8(invocation) - 494: 96(ptr) AccessChain 27(data) 29 50 30 - 495: 6(int) Load 494 - 496: 6(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 495 34 - 497: 96(ptr) AccessChain 27(data) 493 50 30 - Store 497 496 - 498: 6(int) Load 8(invocation) - 499: 103(ptr) AccessChain 27(data) 39 50 - 500: 21(ivec4) Load 499 - 501: 102(ivec2) VectorShuffle 500 500 0 1 - 502: 102(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 501 34 - 503: 103(ptr) AccessChain 27(data) 498 50 - 504: 21(ivec4) Load 503 - 505: 21(ivec4) VectorShuffle 504 502 4 5 2 3 - Store 503 505 - 506: 6(int) Load 8(invocation) - 507: 103(ptr) AccessChain 27(data) 50 50 - 508: 21(ivec4) Load 507 - 509: 112(ivec3) VectorShuffle 508 508 0 1 2 - 510: 112(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 509 34 - 511: 103(ptr) AccessChain 27(data) 506 50 - 512: 21(ivec4) Load 511 - 513: 21(ivec4) VectorShuffle 512 510 4 5 6 3 - Store 511 513 - 514: 6(int) Load 8(invocation) - 515: 103(ptr) AccessChain 27(data) 60 50 - 516: 21(ivec4) Load 515 - 517: 21(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 516 34 - 518: 103(ptr) AccessChain 27(data) 514 50 - Store 518 517 - 519: 6(int) Load 8(invocation) - 520: 66(ptr) AccessChain 27(data) 29 39 30 - 521: 19(int) Load 520 - 523: 522(bool) SLessThan 521 29 - 524: 522(bool) GroupNonUniformLogicalAnd 35 ClusteredReduce 523 34 - 525: 19(int) Select 524 39 29 - 526: 66(ptr) AccessChain 27(data) 519 39 30 - Store 526 525 + 473: 105(ptr) AccessChain 27(data) 29 51 30 + 474: 6(int) Load 473 + 475: 6(int) GroupNonUniformUMax 35 ClusteredReduce 474 34 + 476: 105(ptr) AccessChain 27(data) 472 51 30 + Store 476 475 + 477: 6(int) Load 8(invocation) + 478: 112(ptr) AccessChain 27(data) 39 51 + 479: 21(ivec4) Load 478 + 480: 111(ivec2) VectorShuffle 479 479 0 1 + 481: 111(ivec2) GroupNonUniformUMax 35 ClusteredReduce 480 34 + 482: 105(ptr) AccessChain 27(data) 477 51 30 + 483: 6(int) CompositeExtract 481 0 + Store 482 483 + 484: 105(ptr) AccessChain 27(data) 477 51 34 + 485: 6(int) CompositeExtract 481 1 + Store 484 485 + 486: 6(int) Load 8(invocation) + 487: 112(ptr) AccessChain 27(data) 51 51 + 488: 21(ivec4) Load 487 + 489: 122(ivec3) VectorShuffle 488 488 0 1 2 + 490: 122(ivec3) GroupNonUniformUMax 35 ClusteredReduce 489 34 + 491: 105(ptr) AccessChain 27(data) 486 51 30 + 492: 6(int) CompositeExtract 490 0 + Store 491 492 + 493: 105(ptr) AccessChain 27(data) 486 51 34 + 494: 6(int) CompositeExtract 490 1 + Store 493 494 + 495: 105(ptr) AccessChain 27(data) 486 51 61 + 496: 6(int) CompositeExtract 490 2 + Store 495 496 + 497: 6(int) Load 8(invocation) + 498: 112(ptr) AccessChain 27(data) 65 51 + 499: 21(ivec4) Load 498 + 500: 21(ivec4) GroupNonUniformUMax 35 ClusteredReduce 499 34 + 501: 112(ptr) AccessChain 27(data) 497 51 + Store 501 500 + 502: 6(int) Load 8(invocation) + 503: 139(ptr) AccessChain 27(data) 29 65 30 + 504:22(float64_t) Load 503 + 505:22(float64_t) GroupNonUniformFMax 35 ClusteredReduce 504 34 + 506: 139(ptr) AccessChain 27(data) 502 65 30 + Store 506 505 + 507: 6(int) Load 8(invocation) + 508: 146(ptr) AccessChain 27(data) 39 65 + 509: 23(f64vec4) Load 508 + 510:145(f64vec2) VectorShuffle 509 509 0 1 + 511:145(f64vec2) GroupNonUniformFMax 35 ClusteredReduce 510 34 + 512: 139(ptr) AccessChain 27(data) 507 65 30 + 513:22(float64_t) CompositeExtract 511 0 + Store 512 513 + 514: 139(ptr) AccessChain 27(data) 507 65 34 + 515:22(float64_t) CompositeExtract 511 1 + Store 514 515 + 516: 6(int) Load 8(invocation) + 517: 146(ptr) AccessChain 27(data) 51 65 + 518: 23(f64vec4) Load 517 + 519:156(f64vec3) VectorShuffle 518 518 0 1 2 + 520:156(f64vec3) GroupNonUniformFMax 35 ClusteredReduce 519 34 + 521: 139(ptr) AccessChain 27(data) 516 65 30 + 522:22(float64_t) CompositeExtract 520 0 + Store 521 522 + 523: 139(ptr) AccessChain 27(data) 516 65 34 + 524:22(float64_t) CompositeExtract 520 1 + Store 523 524 + 525: 139(ptr) AccessChain 27(data) 516 65 61 + 526:22(float64_t) CompositeExtract 520 2 + Store 525 526 527: 6(int) Load 8(invocation) - 528: 73(ptr) AccessChain 27(data) 39 39 - 529: 20(ivec4) Load 528 - 530: 72(ivec2) VectorShuffle 529 529 0 1 - 533: 532(bvec2) SLessThan 530 531 - 534: 532(bvec2) GroupNonUniformLogicalAnd 35 ClusteredReduce 533 34 - 536: 72(ivec2) Select 534 535 531 - 537: 73(ptr) AccessChain 27(data) 527 39 - 538: 20(ivec4) Load 537 - 539: 20(ivec4) VectorShuffle 538 536 4 5 2 3 - Store 537 539 - 540: 6(int) Load 8(invocation) - 541: 73(ptr) AccessChain 27(data) 39 39 - 542: 20(ivec4) Load 541 - 543: 82(ivec3) VectorShuffle 542 542 0 1 2 - 546: 545(bvec3) SLessThan 543 544 - 547: 545(bvec3) GroupNonUniformLogicalAnd 35 ClusteredReduce 546 34 - 549: 82(ivec3) Select 547 548 544 - 550: 73(ptr) AccessChain 27(data) 540 39 - 551: 20(ivec4) Load 550 - 552: 20(ivec4) VectorShuffle 551 549 4 5 6 3 - Store 550 552 - 553: 6(int) Load 8(invocation) - 554: 73(ptr) AccessChain 27(data) 39 39 - 555: 20(ivec4) Load 554 - 558: 557(bvec4) SLessThan 555 556 - 559: 557(bvec4) GroupNonUniformLogicalAnd 35 ClusteredReduce 558 34 - 561: 20(ivec4) Select 559 560 556 - 562: 73(ptr) AccessChain 27(data) 553 39 - Store 562 561 - 563: 6(int) Load 8(invocation) - 564: 66(ptr) AccessChain 27(data) 29 39 30 - 565: 19(int) Load 564 - 566: 19(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 565 34 - 567: 66(ptr) AccessChain 27(data) 563 39 30 - Store 567 566 - 568: 6(int) Load 8(invocation) - 569: 73(ptr) AccessChain 27(data) 39 39 - 570: 20(ivec4) Load 569 - 571: 72(ivec2) VectorShuffle 570 570 0 1 - 572: 72(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 571 34 - 573: 73(ptr) AccessChain 27(data) 568 39 - 574: 20(ivec4) Load 573 - 575: 20(ivec4) VectorShuffle 574 572 4 5 2 3 - Store 573 575 + 528: 146(ptr) AccessChain 27(data) 65 65 + 529: 23(f64vec4) Load 528 + 530: 23(f64vec4) GroupNonUniformFMax 35 ClusteredReduce 529 34 + 531: 146(ptr) AccessChain 27(data) 527 65 + Store 531 530 + 532: 6(int) Load 8(invocation) + 533: 71(ptr) AccessChain 27(data) 29 39 30 + 534: 19(int) Load 533 + 535: 19(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 534 34 + 536: 71(ptr) AccessChain 27(data) 532 39 30 + Store 536 535 + 537: 6(int) Load 8(invocation) + 538: 78(ptr) AccessChain 27(data) 39 39 + 539: 20(ivec4) Load 538 + 540: 77(ivec2) VectorShuffle 539 539 0 1 + 541: 77(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 540 34 + 542: 71(ptr) AccessChain 27(data) 537 39 30 + 543: 19(int) CompositeExtract 541 0 + Store 542 543 + 544: 71(ptr) AccessChain 27(data) 537 39 34 + 545: 19(int) CompositeExtract 541 1 + Store 544 545 + 546: 6(int) Load 8(invocation) + 547: 78(ptr) AccessChain 27(data) 51 39 + 548: 20(ivec4) Load 547 + 549: 88(ivec3) VectorShuffle 548 548 0 1 2 + 550: 88(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 549 34 + 551: 71(ptr) AccessChain 27(data) 546 39 30 + 552: 19(int) CompositeExtract 550 0 + Store 551 552 + 553: 71(ptr) AccessChain 27(data) 546 39 34 + 554: 19(int) CompositeExtract 550 1 + Store 553 554 + 555: 71(ptr) AccessChain 27(data) 546 39 61 + 556: 19(int) CompositeExtract 550 2 + Store 555 556 + 557: 6(int) Load 8(invocation) + 558: 78(ptr) AccessChain 27(data) 65 39 + 559: 20(ivec4) Load 558 + 560: 20(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 559 34 + 561: 78(ptr) AccessChain 27(data) 557 39 + Store 561 560 + 562: 6(int) Load 8(invocation) + 563: 105(ptr) AccessChain 27(data) 29 51 30 + 564: 6(int) Load 563 + 565: 6(int) GroupNonUniformBitwiseAnd 35 ClusteredReduce 564 34 + 566: 105(ptr) AccessChain 27(data) 562 51 30 + Store 566 565 + 567: 6(int) Load 8(invocation) + 568: 112(ptr) AccessChain 27(data) 39 51 + 569: 21(ivec4) Load 568 + 570: 111(ivec2) VectorShuffle 569 569 0 1 + 571: 111(ivec2) GroupNonUniformBitwiseAnd 35 ClusteredReduce 570 34 + 572: 105(ptr) AccessChain 27(data) 567 51 30 + 573: 6(int) CompositeExtract 571 0 + Store 572 573 + 574: 105(ptr) AccessChain 27(data) 567 51 34 + 575: 6(int) CompositeExtract 571 1 + Store 574 575 576: 6(int) Load 8(invocation) - 577: 73(ptr) AccessChain 27(data) 50 39 - 578: 20(ivec4) Load 577 - 579: 82(ivec3) VectorShuffle 578 578 0 1 2 - 580: 82(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 579 34 - 581: 73(ptr) AccessChain 27(data) 576 39 - 582: 20(ivec4) Load 581 - 583: 20(ivec4) VectorShuffle 582 580 4 5 6 3 - Store 581 583 - 584: 6(int) Load 8(invocation) - 585: 73(ptr) AccessChain 27(data) 60 39 - 586: 20(ivec4) Load 585 - 587: 20(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 586 34 - 588: 73(ptr) AccessChain 27(data) 584 39 - Store 588 587 - 589: 6(int) Load 8(invocation) - 590: 96(ptr) AccessChain 27(data) 29 50 30 - 591: 6(int) Load 590 - 592: 6(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 591 34 - 593: 96(ptr) AccessChain 27(data) 589 50 30 - Store 593 592 - 594: 6(int) Load 8(invocation) - 595: 103(ptr) AccessChain 27(data) 39 50 - 596: 21(ivec4) Load 595 - 597: 102(ivec2) VectorShuffle 596 596 0 1 - 598: 102(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 597 34 - 599: 103(ptr) AccessChain 27(data) 594 50 - 600: 21(ivec4) Load 599 - 601: 21(ivec4) VectorShuffle 600 598 4 5 2 3 - Store 599 601 - 602: 6(int) Load 8(invocation) - 603: 103(ptr) AccessChain 27(data) 50 50 - 604: 21(ivec4) Load 603 - 605: 112(ivec3) VectorShuffle 604 604 0 1 2 - 606: 112(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 605 34 - 607: 103(ptr) AccessChain 27(data) 602 50 - 608: 21(ivec4) Load 607 - 609: 21(ivec4) VectorShuffle 608 606 4 5 6 3 - Store 607 609 - 610: 6(int) Load 8(invocation) - 611: 103(ptr) AccessChain 27(data) 60 50 - 612: 21(ivec4) Load 611 - 613: 21(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 612 34 - 614: 103(ptr) AccessChain 27(data) 610 50 - Store 614 613 - 615: 6(int) Load 8(invocation) - 616: 66(ptr) AccessChain 27(data) 29 39 30 - 617: 19(int) Load 616 - 618: 522(bool) SLessThan 617 29 - 619: 522(bool) GroupNonUniformLogicalOr 35 ClusteredReduce 618 34 - 620: 19(int) Select 619 39 29 - 621: 66(ptr) AccessChain 27(data) 615 39 30 - Store 621 620 - 622: 6(int) Load 8(invocation) - 623: 73(ptr) AccessChain 27(data) 39 39 - 624: 20(ivec4) Load 623 - 625: 72(ivec2) VectorShuffle 624 624 0 1 - 626: 532(bvec2) SLessThan 625 531 - 627: 532(bvec2) GroupNonUniformLogicalOr 35 ClusteredReduce 626 34 - 628: 72(ivec2) Select 627 535 531 - 629: 73(ptr) AccessChain 27(data) 622 39 - 630: 20(ivec4) Load 629 - 631: 20(ivec4) VectorShuffle 630 628 4 5 2 3 - Store 629 631 - 632: 6(int) Load 8(invocation) - 633: 73(ptr) AccessChain 27(data) 39 39 - 634: 20(ivec4) Load 633 - 635: 82(ivec3) VectorShuffle 634 634 0 1 2 - 636: 545(bvec3) SLessThan 635 544 - 637: 545(bvec3) GroupNonUniformLogicalOr 35 ClusteredReduce 636 34 - 638: 82(ivec3) Select 637 548 544 - 639: 73(ptr) AccessChain 27(data) 632 39 - 640: 20(ivec4) Load 639 - 641: 20(ivec4) VectorShuffle 640 638 4 5 6 3 - Store 639 641 - 642: 6(int) Load 8(invocation) - 643: 73(ptr) AccessChain 27(data) 39 39 - 644: 20(ivec4) Load 643 - 645: 557(bvec4) SLessThan 644 556 - 646: 557(bvec4) GroupNonUniformLogicalOr 35 ClusteredReduce 645 34 - 647: 20(ivec4) Select 646 560 556 - 648: 73(ptr) AccessChain 27(data) 642 39 - Store 648 647 - 649: 6(int) Load 8(invocation) - 650: 66(ptr) AccessChain 27(data) 29 39 30 - 651: 19(int) Load 650 - 652: 19(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 651 34 - 653: 66(ptr) AccessChain 27(data) 649 39 30 - Store 653 652 + 577: 112(ptr) AccessChain 27(data) 51 51 + 578: 21(ivec4) Load 577 + 579: 122(ivec3) VectorShuffle 578 578 0 1 2 + 580: 122(ivec3) GroupNonUniformBitwiseAnd 35 ClusteredReduce 579 34 + 581: 105(ptr) AccessChain 27(data) 576 51 30 + 582: 6(int) CompositeExtract 580 0 + Store 581 582 + 583: 105(ptr) AccessChain 27(data) 576 51 34 + 584: 6(int) CompositeExtract 580 1 + Store 583 584 + 585: 105(ptr) AccessChain 27(data) 576 51 61 + 586: 6(int) CompositeExtract 580 2 + Store 585 586 + 587: 6(int) Load 8(invocation) + 588: 112(ptr) AccessChain 27(data) 65 51 + 589: 21(ivec4) Load 588 + 590: 21(ivec4) GroupNonUniformBitwiseAnd 35 ClusteredReduce 589 34 + 591: 112(ptr) AccessChain 27(data) 587 51 + Store 591 590 + 592: 6(int) Load 8(invocation) + 593: 71(ptr) AccessChain 27(data) 29 39 30 + 594: 19(int) Load 593 + 596: 595(bool) SLessThan 594 29 + 597: 595(bool) GroupNonUniformLogicalAnd 35 ClusteredReduce 596 34 + 598: 19(int) Select 597 39 29 + 599: 71(ptr) AccessChain 27(data) 592 39 30 + Store 599 598 + 600: 6(int) Load 8(invocation) + 601: 78(ptr) AccessChain 27(data) 39 39 + 602: 20(ivec4) Load 601 + 603: 77(ivec2) VectorShuffle 602 602 0 1 + 606: 605(bvec2) SLessThan 603 604 + 607: 605(bvec2) GroupNonUniformLogicalAnd 35 ClusteredReduce 606 34 + 609: 77(ivec2) Select 607 608 604 + 610: 71(ptr) AccessChain 27(data) 600 39 30 + 611: 19(int) CompositeExtract 609 0 + Store 610 611 + 612: 71(ptr) AccessChain 27(data) 600 39 34 + 613: 19(int) CompositeExtract 609 1 + Store 612 613 + 614: 6(int) Load 8(invocation) + 615: 78(ptr) AccessChain 27(data) 39 39 + 616: 20(ivec4) Load 615 + 617: 88(ivec3) VectorShuffle 616 616 0 1 2 + 620: 619(bvec3) SLessThan 617 618 + 621: 619(bvec3) GroupNonUniformLogicalAnd 35 ClusteredReduce 620 34 + 623: 88(ivec3) Select 621 622 618 + 624: 71(ptr) AccessChain 27(data) 614 39 30 + 625: 19(int) CompositeExtract 623 0 + Store 624 625 + 626: 71(ptr) AccessChain 27(data) 614 39 34 + 627: 19(int) CompositeExtract 623 1 + Store 626 627 + 628: 71(ptr) AccessChain 27(data) 614 39 61 + 629: 19(int) CompositeExtract 623 2 + Store 628 629 + 630: 6(int) Load 8(invocation) + 631: 78(ptr) AccessChain 27(data) 39 39 + 632: 20(ivec4) Load 631 + 635: 634(bvec4) SLessThan 632 633 + 636: 634(bvec4) GroupNonUniformLogicalAnd 35 ClusteredReduce 635 34 + 638: 20(ivec4) Select 636 637 633 + 639: 78(ptr) AccessChain 27(data) 630 39 + Store 639 638 + 640: 6(int) Load 8(invocation) + 641: 71(ptr) AccessChain 27(data) 29 39 30 + 642: 19(int) Load 641 + 643: 19(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 642 34 + 644: 71(ptr) AccessChain 27(data) 640 39 30 + Store 644 643 + 645: 6(int) Load 8(invocation) + 646: 78(ptr) AccessChain 27(data) 39 39 + 647: 20(ivec4) Load 646 + 648: 77(ivec2) VectorShuffle 647 647 0 1 + 649: 77(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 648 34 + 650: 71(ptr) AccessChain 27(data) 645 39 30 + 651: 19(int) CompositeExtract 649 0 + Store 650 651 + 652: 71(ptr) AccessChain 27(data) 645 39 34 + 653: 19(int) CompositeExtract 649 1 + Store 652 653 654: 6(int) Load 8(invocation) - 655: 73(ptr) AccessChain 27(data) 39 39 + 655: 78(ptr) AccessChain 27(data) 51 39 656: 20(ivec4) Load 655 - 657: 72(ivec2) VectorShuffle 656 656 0 1 - 658: 72(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 657 34 - 659: 73(ptr) AccessChain 27(data) 654 39 - 660: 20(ivec4) Load 659 - 661: 20(ivec4) VectorShuffle 660 658 4 5 2 3 - Store 659 661 - 662: 6(int) Load 8(invocation) - 663: 73(ptr) AccessChain 27(data) 50 39 - 664: 20(ivec4) Load 663 - 665: 82(ivec3) VectorShuffle 664 664 0 1 2 - 666: 82(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 665 34 - 667: 73(ptr) AccessChain 27(data) 662 39 - 668: 20(ivec4) Load 667 - 669: 20(ivec4) VectorShuffle 668 666 4 5 6 3 - Store 667 669 + 657: 88(ivec3) VectorShuffle 656 656 0 1 2 + 658: 88(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 657 34 + 659: 71(ptr) AccessChain 27(data) 654 39 30 + 660: 19(int) CompositeExtract 658 0 + Store 659 660 + 661: 71(ptr) AccessChain 27(data) 654 39 34 + 662: 19(int) CompositeExtract 658 1 + Store 661 662 + 663: 71(ptr) AccessChain 27(data) 654 39 61 + 664: 19(int) CompositeExtract 658 2 + Store 663 664 + 665: 6(int) Load 8(invocation) + 666: 78(ptr) AccessChain 27(data) 65 39 + 667: 20(ivec4) Load 666 + 668: 20(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 667 34 + 669: 78(ptr) AccessChain 27(data) 665 39 + Store 669 668 670: 6(int) Load 8(invocation) - 671: 73(ptr) AccessChain 27(data) 60 39 - 672: 20(ivec4) Load 671 - 673: 20(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 672 34 - 674: 73(ptr) AccessChain 27(data) 670 39 + 671: 105(ptr) AccessChain 27(data) 29 51 30 + 672: 6(int) Load 671 + 673: 6(int) GroupNonUniformBitwiseOr 35 ClusteredReduce 672 34 + 674: 105(ptr) AccessChain 27(data) 670 51 30 Store 674 673 675: 6(int) Load 8(invocation) - 676: 96(ptr) AccessChain 27(data) 29 50 30 - 677: 6(int) Load 676 - 678: 6(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 677 34 - 679: 96(ptr) AccessChain 27(data) 675 50 30 - Store 679 678 - 680: 6(int) Load 8(invocation) - 681: 103(ptr) AccessChain 27(data) 39 50 - 682: 21(ivec4) Load 681 - 683: 102(ivec2) VectorShuffle 682 682 0 1 - 684: 102(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 683 34 - 685: 103(ptr) AccessChain 27(data) 680 50 + 676: 112(ptr) AccessChain 27(data) 39 51 + 677: 21(ivec4) Load 676 + 678: 111(ivec2) VectorShuffle 677 677 0 1 + 679: 111(ivec2) GroupNonUniformBitwiseOr 35 ClusteredReduce 678 34 + 680: 105(ptr) AccessChain 27(data) 675 51 30 + 681: 6(int) CompositeExtract 679 0 + Store 680 681 + 682: 105(ptr) AccessChain 27(data) 675 51 34 + 683: 6(int) CompositeExtract 679 1 + Store 682 683 + 684: 6(int) Load 8(invocation) + 685: 112(ptr) AccessChain 27(data) 51 51 686: 21(ivec4) Load 685 - 687: 21(ivec4) VectorShuffle 686 684 4 5 2 3 - Store 685 687 - 688: 6(int) Load 8(invocation) - 689: 103(ptr) AccessChain 27(data) 50 50 - 690: 21(ivec4) Load 689 - 691: 112(ivec3) VectorShuffle 690 690 0 1 2 - 692: 112(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 691 34 - 693: 103(ptr) AccessChain 27(data) 688 50 - 694: 21(ivec4) Load 693 - 695: 21(ivec4) VectorShuffle 694 692 4 5 6 3 - Store 693 695 - 696: 6(int) Load 8(invocation) - 697: 103(ptr) AccessChain 27(data) 60 50 - 698: 21(ivec4) Load 697 - 699: 21(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 698 34 - 700: 103(ptr) AccessChain 27(data) 696 50 - Store 700 699 - 701: 6(int) Load 8(invocation) - 702: 66(ptr) AccessChain 27(data) 29 39 30 - 703: 19(int) Load 702 - 704: 522(bool) SLessThan 703 29 - 705: 522(bool) GroupNonUniformLogicalXor 35 ClusteredReduce 704 34 - 706: 19(int) Select 705 39 29 - 707: 66(ptr) AccessChain 27(data) 701 39 30 - Store 707 706 - 708: 6(int) Load 8(invocation) - 709: 73(ptr) AccessChain 27(data) 39 39 - 710: 20(ivec4) Load 709 - 711: 72(ivec2) VectorShuffle 710 710 0 1 - 712: 532(bvec2) SLessThan 711 531 - 713: 532(bvec2) GroupNonUniformLogicalXor 35 ClusteredReduce 712 34 - 714: 72(ivec2) Select 713 535 531 - 715: 73(ptr) AccessChain 27(data) 708 39 - 716: 20(ivec4) Load 715 - 717: 20(ivec4) VectorShuffle 716 714 4 5 2 3 - Store 715 717 + 687: 122(ivec3) VectorShuffle 686 686 0 1 2 + 688: 122(ivec3) GroupNonUniformBitwiseOr 35 ClusteredReduce 687 34 + 689: 105(ptr) AccessChain 27(data) 684 51 30 + 690: 6(int) CompositeExtract 688 0 + Store 689 690 + 691: 105(ptr) AccessChain 27(data) 684 51 34 + 692: 6(int) CompositeExtract 688 1 + Store 691 692 + 693: 105(ptr) AccessChain 27(data) 684 51 61 + 694: 6(int) CompositeExtract 688 2 + Store 693 694 + 695: 6(int) Load 8(invocation) + 696: 112(ptr) AccessChain 27(data) 65 51 + 697: 21(ivec4) Load 696 + 698: 21(ivec4) GroupNonUniformBitwiseOr 35 ClusteredReduce 697 34 + 699: 112(ptr) AccessChain 27(data) 695 51 + Store 699 698 + 700: 6(int) Load 8(invocation) + 701: 71(ptr) AccessChain 27(data) 29 39 30 + 702: 19(int) Load 701 + 703: 595(bool) SLessThan 702 29 + 704: 595(bool) GroupNonUniformLogicalOr 35 ClusteredReduce 703 34 + 705: 19(int) Select 704 39 29 + 706: 71(ptr) AccessChain 27(data) 700 39 30 + Store 706 705 + 707: 6(int) Load 8(invocation) + 708: 78(ptr) AccessChain 27(data) 39 39 + 709: 20(ivec4) Load 708 + 710: 77(ivec2) VectorShuffle 709 709 0 1 + 711: 605(bvec2) SLessThan 710 604 + 712: 605(bvec2) GroupNonUniformLogicalOr 35 ClusteredReduce 711 34 + 713: 77(ivec2) Select 712 608 604 + 714: 71(ptr) AccessChain 27(data) 707 39 30 + 715: 19(int) CompositeExtract 713 0 + Store 714 715 + 716: 71(ptr) AccessChain 27(data) 707 39 34 + 717: 19(int) CompositeExtract 713 1 + Store 716 717 718: 6(int) Load 8(invocation) - 719: 73(ptr) AccessChain 27(data) 39 39 + 719: 78(ptr) AccessChain 27(data) 39 39 720: 20(ivec4) Load 719 - 721: 82(ivec3) VectorShuffle 720 720 0 1 2 - 722: 545(bvec3) SLessThan 721 544 - 723: 545(bvec3) GroupNonUniformLogicalXor 35 ClusteredReduce 722 34 - 724: 82(ivec3) Select 723 548 544 - 725: 73(ptr) AccessChain 27(data) 718 39 - 726: 20(ivec4) Load 725 - 727: 20(ivec4) VectorShuffle 726 724 4 5 6 3 - Store 725 727 - 728: 6(int) Load 8(invocation) - 729: 73(ptr) AccessChain 27(data) 39 39 - 730: 20(ivec4) Load 729 - 731: 557(bvec4) SLessThan 730 556 - 732: 557(bvec4) GroupNonUniformLogicalXor 35 ClusteredReduce 731 34 - 733: 20(ivec4) Select 732 560 556 - 734: 73(ptr) AccessChain 27(data) 728 39 - Store 734 733 + 721: 88(ivec3) VectorShuffle 720 720 0 1 2 + 722: 619(bvec3) SLessThan 721 618 + 723: 619(bvec3) GroupNonUniformLogicalOr 35 ClusteredReduce 722 34 + 724: 88(ivec3) Select 723 622 618 + 725: 71(ptr) AccessChain 27(data) 718 39 30 + 726: 19(int) CompositeExtract 724 0 + Store 725 726 + 727: 71(ptr) AccessChain 27(data) 718 39 34 + 728: 19(int) CompositeExtract 724 1 + Store 727 728 + 729: 71(ptr) AccessChain 27(data) 718 39 61 + 730: 19(int) CompositeExtract 724 2 + Store 729 730 + 731: 6(int) Load 8(invocation) + 732: 78(ptr) AccessChain 27(data) 39 39 + 733: 20(ivec4) Load 732 + 734: 634(bvec4) SLessThan 733 633 + 735: 634(bvec4) GroupNonUniformLogicalOr 35 ClusteredReduce 734 34 + 736: 20(ivec4) Select 735 637 633 + 737: 78(ptr) AccessChain 27(data) 731 39 + Store 737 736 + 738: 6(int) Load 8(invocation) + 739: 71(ptr) AccessChain 27(data) 29 39 30 + 740: 19(int) Load 739 + 741: 19(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 740 34 + 742: 71(ptr) AccessChain 27(data) 738 39 30 + Store 742 741 + 743: 6(int) Load 8(invocation) + 744: 78(ptr) AccessChain 27(data) 39 39 + 745: 20(ivec4) Load 744 + 746: 77(ivec2) VectorShuffle 745 745 0 1 + 747: 77(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 746 34 + 748: 71(ptr) AccessChain 27(data) 743 39 30 + 749: 19(int) CompositeExtract 747 0 + Store 748 749 + 750: 71(ptr) AccessChain 27(data) 743 39 34 + 751: 19(int) CompositeExtract 747 1 + Store 750 751 + 752: 6(int) Load 8(invocation) + 753: 78(ptr) AccessChain 27(data) 51 39 + 754: 20(ivec4) Load 753 + 755: 88(ivec3) VectorShuffle 754 754 0 1 2 + 756: 88(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 755 34 + 757: 71(ptr) AccessChain 27(data) 752 39 30 + 758: 19(int) CompositeExtract 756 0 + Store 757 758 + 759: 71(ptr) AccessChain 27(data) 752 39 34 + 760: 19(int) CompositeExtract 756 1 + Store 759 760 + 761: 71(ptr) AccessChain 27(data) 752 39 61 + 762: 19(int) CompositeExtract 756 2 + Store 761 762 + 763: 6(int) Load 8(invocation) + 764: 78(ptr) AccessChain 27(data) 65 39 + 765: 20(ivec4) Load 764 + 766: 20(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 765 34 + 767: 78(ptr) AccessChain 27(data) 763 39 + Store 767 766 + 768: 6(int) Load 8(invocation) + 769: 105(ptr) AccessChain 27(data) 29 51 30 + 770: 6(int) Load 769 + 771: 6(int) GroupNonUniformBitwiseXor 35 ClusteredReduce 770 34 + 772: 105(ptr) AccessChain 27(data) 768 51 30 + Store 772 771 + 773: 6(int) Load 8(invocation) + 774: 112(ptr) AccessChain 27(data) 39 51 + 775: 21(ivec4) Load 774 + 776: 111(ivec2) VectorShuffle 775 775 0 1 + 777: 111(ivec2) GroupNonUniformBitwiseXor 35 ClusteredReduce 776 34 + 778: 105(ptr) AccessChain 27(data) 773 51 30 + 779: 6(int) CompositeExtract 777 0 + Store 778 779 + 780: 105(ptr) AccessChain 27(data) 773 51 34 + 781: 6(int) CompositeExtract 777 1 + Store 780 781 + 782: 6(int) Load 8(invocation) + 783: 112(ptr) AccessChain 27(data) 51 51 + 784: 21(ivec4) Load 783 + 785: 122(ivec3) VectorShuffle 784 784 0 1 2 + 786: 122(ivec3) GroupNonUniformBitwiseXor 35 ClusteredReduce 785 34 + 787: 105(ptr) AccessChain 27(data) 782 51 30 + 788: 6(int) CompositeExtract 786 0 + Store 787 788 + 789: 105(ptr) AccessChain 27(data) 782 51 34 + 790: 6(int) CompositeExtract 786 1 + Store 789 790 + 791: 105(ptr) AccessChain 27(data) 782 51 61 + 792: 6(int) CompositeExtract 786 2 + Store 791 792 + 793: 6(int) Load 8(invocation) + 794: 112(ptr) AccessChain 27(data) 65 51 + 795: 21(ivec4) Load 794 + 796: 21(ivec4) GroupNonUniformBitwiseXor 35 ClusteredReduce 795 34 + 797: 112(ptr) AccessChain 27(data) 793 51 + Store 797 796 + 798: 6(int) Load 8(invocation) + 799: 71(ptr) AccessChain 27(data) 29 39 30 + 800: 19(int) Load 799 + 801: 595(bool) SLessThan 800 29 + 802: 595(bool) GroupNonUniformLogicalXor 35 ClusteredReduce 801 34 + 803: 19(int) Select 802 39 29 + 804: 71(ptr) AccessChain 27(data) 798 39 30 + Store 804 803 + 805: 6(int) Load 8(invocation) + 806: 78(ptr) AccessChain 27(data) 39 39 + 807: 20(ivec4) Load 806 + 808: 77(ivec2) VectorShuffle 807 807 0 1 + 809: 605(bvec2) SLessThan 808 604 + 810: 605(bvec2) GroupNonUniformLogicalXor 35 ClusteredReduce 809 34 + 811: 77(ivec2) Select 810 608 604 + 812: 71(ptr) AccessChain 27(data) 805 39 30 + 813: 19(int) CompositeExtract 811 0 + Store 812 813 + 814: 71(ptr) AccessChain 27(data) 805 39 34 + 815: 19(int) CompositeExtract 811 1 + Store 814 815 + 816: 6(int) Load 8(invocation) + 817: 78(ptr) AccessChain 27(data) 39 39 + 818: 20(ivec4) Load 817 + 819: 88(ivec3) VectorShuffle 818 818 0 1 2 + 820: 619(bvec3) SLessThan 819 618 + 821: 619(bvec3) GroupNonUniformLogicalXor 35 ClusteredReduce 820 34 + 822: 88(ivec3) Select 821 622 618 + 823: 71(ptr) AccessChain 27(data) 816 39 30 + 824: 19(int) CompositeExtract 822 0 + Store 823 824 + 825: 71(ptr) AccessChain 27(data) 816 39 34 + 826: 19(int) CompositeExtract 822 1 + Store 825 826 + 827: 71(ptr) AccessChain 27(data) 816 39 61 + 828: 19(int) CompositeExtract 822 2 + Store 827 828 + 829: 6(int) Load 8(invocation) + 830: 78(ptr) AccessChain 27(data) 39 39 + 831: 20(ivec4) Load 830 + 832: 634(bvec4) SLessThan 831 633 + 833: 634(bvec4) GroupNonUniformLogicalXor 35 ClusteredReduce 832 34 + 834: 20(ivec4) Select 833 637 633 + 835: 78(ptr) AccessChain 27(data) 829 39 + Store 835 834 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out index 1406bd14f4..828ce61636 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesArithmetic.comp.out @@ -1,7 +1,7 @@ spv.subgroupExtendedTypesArithmetic.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 3665 +// Id's are bound by 4218 Capability Shader Capability Float16 @@ -59,7 +59,7 @@ spv.subgroupExtendedTypesArithmetic.comp Decorate 31(Buffers) Block Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 - Decorate 3664 BuiltIn WorkgroupSize + Decorate 4217 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -94,40 +94,41 @@ spv.subgroupExtendedTypesArithmetic.comp 46: 36(int) Constant 1 47: TypeVector 17(int8_t) 2 48: TypePointer StorageBuffer 18(i8vec4) - 57: 36(int) Constant 2 - 58: TypeVector 17(int8_t) 3 - 67: 36(int) Constant 3 - 593: TypePointer StorageBuffer 19(int8_t) - 599: TypeVector 19(int8_t) 2 - 600: TypePointer StorageBuffer 20(i8vec4) - 609: TypeVector 19(int8_t) 3 - 1143: TypePointer StorageBuffer 21(int16_t) - 1149: TypeVector 21(int16_t) 2 - 1150: TypePointer StorageBuffer 22(i16vec4) - 1159: TypeVector 21(int16_t) 3 - 1693: TypePointer StorageBuffer 23(int16_t) - 1699: TypeVector 23(int16_t) 2 - 1700: TypePointer StorageBuffer 24(i16vec4) - 1709: TypeVector 23(int16_t) 3 - 2243: 36(int) Constant 4 - 2244: TypePointer StorageBuffer 25(int64_t) - 2250: TypeVector 25(int64_t) 2 - 2251: TypePointer StorageBuffer 26(i64vec4) - 2260: TypeVector 25(int64_t) 3 - 2794: 36(int) Constant 5 - 2795: TypePointer StorageBuffer 27(int64_t) - 2801: TypeVector 27(int64_t) 2 - 2802: TypePointer StorageBuffer 28(i64vec4) - 2811: TypeVector 27(int64_t) 3 - 3345: 36(int) Constant 6 - 3346: TypePointer StorageBuffer 29(float16_t) - 3352: TypeVector 29(float16_t) 2 - 3353: TypePointer StorageBuffer 30(f16vec4) - 3362: TypeVector 29(float16_t) 3 - 3661: TypeVector 6(int) 3 - 3662: 6(int) Constant 8 - 3663: 6(int) Constant 1 - 3664: 3661(ivec3) ConstantComposite 3662 3663 3663 + 55: 6(int) Constant 1 + 59: 36(int) Constant 2 + 60: TypeVector 17(int8_t) 3 + 69: 6(int) Constant 2 + 73: 36(int) Constant 3 + 679: TypePointer StorageBuffer 19(int8_t) + 685: TypeVector 19(int8_t) 2 + 686: TypePointer StorageBuffer 20(i8vec4) + 696: TypeVector 19(int8_t) 3 + 1313: TypePointer StorageBuffer 21(int16_t) + 1319: TypeVector 21(int16_t) 2 + 1320: TypePointer StorageBuffer 22(i16vec4) + 1330: TypeVector 21(int16_t) 3 + 1947: TypePointer StorageBuffer 23(int16_t) + 1953: TypeVector 23(int16_t) 2 + 1954: TypePointer StorageBuffer 24(i16vec4) + 1964: TypeVector 23(int16_t) 3 + 2581: 36(int) Constant 4 + 2582: TypePointer StorageBuffer 25(int64_t) + 2588: TypeVector 25(int64_t) 2 + 2589: TypePointer StorageBuffer 26(i64vec4) + 2599: TypeVector 25(int64_t) 3 + 3216: 36(int) Constant 5 + 3217: TypePointer StorageBuffer 27(int64_t) + 3223: TypeVector 27(int64_t) 2 + 3224: TypePointer StorageBuffer 28(i64vec4) + 3234: TypeVector 27(int64_t) 3 + 3851: 36(int) Constant 6 + 3852: TypePointer StorageBuffer 29(float16_t) + 3858: TypeVector 29(float16_t) 2 + 3859: TypePointer StorageBuffer 30(f16vec4) + 3869: TypeVector 29(float16_t) 3 + 4215: TypeVector 6(int) 3 + 4216: 6(int) Constant 8 + 4217: 4215(ivec3) ConstantComposite 4216 55 55 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -147,4134 +148,5100 @@ spv.subgroupExtendedTypesArithmetic.comp 50: 18(i8vec4) Load 49 51: 47(i8vec2) VectorShuffle 50 50 0 1 52: 47(i8vec2) GroupNonUniformIAdd 42 Reduce 51 - 53: 48(ptr) AccessChain 34(data) 45 37 - 54: 18(i8vec4) Load 53 - 55: 18(i8vec4) VectorShuffle 54 52 4 5 2 3 - Store 53 55 - 56: 6(int) Load 8(invocation) - 59: 48(ptr) AccessChain 34(data) 57 37 - 60: 18(i8vec4) Load 59 - 61: 58(i8vec3) VectorShuffle 60 60 0 1 2 - 62: 58(i8vec3) GroupNonUniformIAdd 42 Reduce 61 - 63: 48(ptr) AccessChain 34(data) 56 37 - 64: 18(i8vec4) Load 63 - 65: 18(i8vec4) VectorShuffle 64 62 4 5 6 3 - Store 63 65 - 66: 6(int) Load 8(invocation) - 68: 48(ptr) AccessChain 34(data) 67 37 - 69: 18(i8vec4) Load 68 - 70: 18(i8vec4) GroupNonUniformIAdd 42 Reduce 69 - 71: 48(ptr) AccessChain 34(data) 66 37 - Store 71 70 + 53: 39(ptr) AccessChain 34(data) 45 37 38 + 54: 17(int8_t) CompositeExtract 52 0 + Store 53 54 + 56: 39(ptr) AccessChain 34(data) 45 37 55 + 57: 17(int8_t) CompositeExtract 52 1 + Store 56 57 + 58: 6(int) Load 8(invocation) + 61: 48(ptr) AccessChain 34(data) 59 37 + 62: 18(i8vec4) Load 61 + 63: 60(i8vec3) VectorShuffle 62 62 0 1 2 + 64: 60(i8vec3) GroupNonUniformIAdd 42 Reduce 63 + 65: 39(ptr) AccessChain 34(data) 58 37 38 + 66: 17(int8_t) CompositeExtract 64 0 + Store 65 66 + 67: 39(ptr) AccessChain 34(data) 58 37 55 + 68: 17(int8_t) CompositeExtract 64 1 + Store 67 68 + 70: 39(ptr) AccessChain 34(data) 58 37 69 + 71: 17(int8_t) CompositeExtract 64 2 + Store 70 71 72: 6(int) Load 8(invocation) - 73: 39(ptr) AccessChain 34(data) 37 37 38 - 74: 17(int8_t) Load 73 - 75: 17(int8_t) GroupNonUniformIMul 42 Reduce 74 - 76: 39(ptr) AccessChain 34(data) 72 37 38 - Store 76 75 - 77: 6(int) Load 8(invocation) - 78: 48(ptr) AccessChain 34(data) 46 37 - 79: 18(i8vec4) Load 78 - 80: 47(i8vec2) VectorShuffle 79 79 0 1 - 81: 47(i8vec2) GroupNonUniformIMul 42 Reduce 80 - 82: 48(ptr) AccessChain 34(data) 77 37 - 83: 18(i8vec4) Load 82 - 84: 18(i8vec4) VectorShuffle 83 81 4 5 2 3 - Store 82 84 - 85: 6(int) Load 8(invocation) - 86: 48(ptr) AccessChain 34(data) 57 37 - 87: 18(i8vec4) Load 86 - 88: 58(i8vec3) VectorShuffle 87 87 0 1 2 - 89: 58(i8vec3) GroupNonUniformIMul 42 Reduce 88 - 90: 48(ptr) AccessChain 34(data) 85 37 - 91: 18(i8vec4) Load 90 - 92: 18(i8vec4) VectorShuffle 91 89 4 5 6 3 - Store 90 92 - 93: 6(int) Load 8(invocation) - 94: 48(ptr) AccessChain 34(data) 67 37 - 95: 18(i8vec4) Load 94 - 96: 18(i8vec4) GroupNonUniformIMul 42 Reduce 95 - 97: 48(ptr) AccessChain 34(data) 93 37 - Store 97 96 - 98: 6(int) Load 8(invocation) - 99: 39(ptr) AccessChain 34(data) 37 37 38 - 100: 17(int8_t) Load 99 - 101: 17(int8_t) GroupNonUniformSMin 42 Reduce 100 - 102: 39(ptr) AccessChain 34(data) 98 37 38 - Store 102 101 + 74: 48(ptr) AccessChain 34(data) 73 37 + 75: 18(i8vec4) Load 74 + 76: 18(i8vec4) GroupNonUniformIAdd 42 Reduce 75 + 77: 48(ptr) AccessChain 34(data) 72 37 + Store 77 76 + 78: 6(int) Load 8(invocation) + 79: 39(ptr) AccessChain 34(data) 37 37 38 + 80: 17(int8_t) Load 79 + 81: 17(int8_t) GroupNonUniformIMul 42 Reduce 80 + 82: 39(ptr) AccessChain 34(data) 78 37 38 + Store 82 81 + 83: 6(int) Load 8(invocation) + 84: 48(ptr) AccessChain 34(data) 46 37 + 85: 18(i8vec4) Load 84 + 86: 47(i8vec2) VectorShuffle 85 85 0 1 + 87: 47(i8vec2) GroupNonUniformIMul 42 Reduce 86 + 88: 39(ptr) AccessChain 34(data) 83 37 38 + 89: 17(int8_t) CompositeExtract 87 0 + Store 88 89 + 90: 39(ptr) AccessChain 34(data) 83 37 55 + 91: 17(int8_t) CompositeExtract 87 1 + Store 90 91 + 92: 6(int) Load 8(invocation) + 93: 48(ptr) AccessChain 34(data) 59 37 + 94: 18(i8vec4) Load 93 + 95: 60(i8vec3) VectorShuffle 94 94 0 1 2 + 96: 60(i8vec3) GroupNonUniformIMul 42 Reduce 95 + 97: 39(ptr) AccessChain 34(data) 92 37 38 + 98: 17(int8_t) CompositeExtract 96 0 + Store 97 98 + 99: 39(ptr) AccessChain 34(data) 92 37 55 + 100: 17(int8_t) CompositeExtract 96 1 + Store 99 100 + 101: 39(ptr) AccessChain 34(data) 92 37 69 + 102: 17(int8_t) CompositeExtract 96 2 + Store 101 102 103: 6(int) Load 8(invocation) - 104: 48(ptr) AccessChain 34(data) 46 37 + 104: 48(ptr) AccessChain 34(data) 73 37 105: 18(i8vec4) Load 104 - 106: 47(i8vec2) VectorShuffle 105 105 0 1 - 107: 47(i8vec2) GroupNonUniformSMin 42 Reduce 106 - 108: 48(ptr) AccessChain 34(data) 103 37 - 109: 18(i8vec4) Load 108 - 110: 18(i8vec4) VectorShuffle 109 107 4 5 2 3 - Store 108 110 - 111: 6(int) Load 8(invocation) - 112: 48(ptr) AccessChain 34(data) 57 37 - 113: 18(i8vec4) Load 112 - 114: 58(i8vec3) VectorShuffle 113 113 0 1 2 - 115: 58(i8vec3) GroupNonUniformSMin 42 Reduce 114 - 116: 48(ptr) AccessChain 34(data) 111 37 - 117: 18(i8vec4) Load 116 - 118: 18(i8vec4) VectorShuffle 117 115 4 5 6 3 - Store 116 118 - 119: 6(int) Load 8(invocation) - 120: 48(ptr) AccessChain 34(data) 67 37 - 121: 18(i8vec4) Load 120 - 122: 18(i8vec4) GroupNonUniformSMin 42 Reduce 121 - 123: 48(ptr) AccessChain 34(data) 119 37 - Store 123 122 - 124: 6(int) Load 8(invocation) - 125: 39(ptr) AccessChain 34(data) 37 37 38 - 126: 17(int8_t) Load 125 - 127: 17(int8_t) GroupNonUniformSMax 42 Reduce 126 - 128: 39(ptr) AccessChain 34(data) 124 37 38 - Store 128 127 - 129: 6(int) Load 8(invocation) - 130: 48(ptr) AccessChain 34(data) 46 37 - 131: 18(i8vec4) Load 130 - 132: 47(i8vec2) VectorShuffle 131 131 0 1 - 133: 47(i8vec2) GroupNonUniformSMax 42 Reduce 132 - 134: 48(ptr) AccessChain 34(data) 129 37 + 106: 18(i8vec4) GroupNonUniformIMul 42 Reduce 105 + 107: 48(ptr) AccessChain 34(data) 103 37 + Store 107 106 + 108: 6(int) Load 8(invocation) + 109: 39(ptr) AccessChain 34(data) 37 37 38 + 110: 17(int8_t) Load 109 + 111: 17(int8_t) GroupNonUniformSMin 42 Reduce 110 + 112: 39(ptr) AccessChain 34(data) 108 37 38 + Store 112 111 + 113: 6(int) Load 8(invocation) + 114: 48(ptr) AccessChain 34(data) 46 37 + 115: 18(i8vec4) Load 114 + 116: 47(i8vec2) VectorShuffle 115 115 0 1 + 117: 47(i8vec2) GroupNonUniformSMin 42 Reduce 116 + 118: 39(ptr) AccessChain 34(data) 113 37 38 + 119: 17(int8_t) CompositeExtract 117 0 + Store 118 119 + 120: 39(ptr) AccessChain 34(data) 113 37 55 + 121: 17(int8_t) CompositeExtract 117 1 + Store 120 121 + 122: 6(int) Load 8(invocation) + 123: 48(ptr) AccessChain 34(data) 59 37 + 124: 18(i8vec4) Load 123 + 125: 60(i8vec3) VectorShuffle 124 124 0 1 2 + 126: 60(i8vec3) GroupNonUniformSMin 42 Reduce 125 + 127: 39(ptr) AccessChain 34(data) 122 37 38 + 128: 17(int8_t) CompositeExtract 126 0 + Store 127 128 + 129: 39(ptr) AccessChain 34(data) 122 37 55 + 130: 17(int8_t) CompositeExtract 126 1 + Store 129 130 + 131: 39(ptr) AccessChain 34(data) 122 37 69 + 132: 17(int8_t) CompositeExtract 126 2 + Store 131 132 + 133: 6(int) Load 8(invocation) + 134: 48(ptr) AccessChain 34(data) 73 37 135: 18(i8vec4) Load 134 - 136: 18(i8vec4) VectorShuffle 135 133 4 5 2 3 - Store 134 136 - 137: 6(int) Load 8(invocation) - 138: 48(ptr) AccessChain 34(data) 57 37 - 139: 18(i8vec4) Load 138 - 140: 58(i8vec3) VectorShuffle 139 139 0 1 2 - 141: 58(i8vec3) GroupNonUniformSMax 42 Reduce 140 - 142: 48(ptr) AccessChain 34(data) 137 37 - 143: 18(i8vec4) Load 142 - 144: 18(i8vec4) VectorShuffle 143 141 4 5 6 3 - Store 142 144 - 145: 6(int) Load 8(invocation) - 146: 48(ptr) AccessChain 34(data) 67 37 - 147: 18(i8vec4) Load 146 - 148: 18(i8vec4) GroupNonUniformSMax 42 Reduce 147 - 149: 48(ptr) AccessChain 34(data) 145 37 - Store 149 148 - 150: 6(int) Load 8(invocation) - 151: 39(ptr) AccessChain 34(data) 37 37 38 - 152: 17(int8_t) Load 151 - 153: 17(int8_t) GroupNonUniformBitwiseAnd 42 Reduce 152 - 154: 39(ptr) AccessChain 34(data) 150 37 38 - Store 154 153 - 155: 6(int) Load 8(invocation) - 156: 48(ptr) AccessChain 34(data) 46 37 - 157: 18(i8vec4) Load 156 - 158: 47(i8vec2) VectorShuffle 157 157 0 1 - 159: 47(i8vec2) GroupNonUniformBitwiseAnd 42 Reduce 158 - 160: 48(ptr) AccessChain 34(data) 155 37 - 161: 18(i8vec4) Load 160 - 162: 18(i8vec4) VectorShuffle 161 159 4 5 2 3 - Store 160 162 + 136: 18(i8vec4) GroupNonUniformSMin 42 Reduce 135 + 137: 48(ptr) AccessChain 34(data) 133 37 + Store 137 136 + 138: 6(int) Load 8(invocation) + 139: 39(ptr) AccessChain 34(data) 37 37 38 + 140: 17(int8_t) Load 139 + 141: 17(int8_t) GroupNonUniformSMax 42 Reduce 140 + 142: 39(ptr) AccessChain 34(data) 138 37 38 + Store 142 141 + 143: 6(int) Load 8(invocation) + 144: 48(ptr) AccessChain 34(data) 46 37 + 145: 18(i8vec4) Load 144 + 146: 47(i8vec2) VectorShuffle 145 145 0 1 + 147: 47(i8vec2) GroupNonUniformSMax 42 Reduce 146 + 148: 39(ptr) AccessChain 34(data) 143 37 38 + 149: 17(int8_t) CompositeExtract 147 0 + Store 148 149 + 150: 39(ptr) AccessChain 34(data) 143 37 55 + 151: 17(int8_t) CompositeExtract 147 1 + Store 150 151 + 152: 6(int) Load 8(invocation) + 153: 48(ptr) AccessChain 34(data) 59 37 + 154: 18(i8vec4) Load 153 + 155: 60(i8vec3) VectorShuffle 154 154 0 1 2 + 156: 60(i8vec3) GroupNonUniformSMax 42 Reduce 155 + 157: 39(ptr) AccessChain 34(data) 152 37 38 + 158: 17(int8_t) CompositeExtract 156 0 + Store 157 158 + 159: 39(ptr) AccessChain 34(data) 152 37 55 + 160: 17(int8_t) CompositeExtract 156 1 + Store 159 160 + 161: 39(ptr) AccessChain 34(data) 152 37 69 + 162: 17(int8_t) CompositeExtract 156 2 + Store 161 162 163: 6(int) Load 8(invocation) - 164: 48(ptr) AccessChain 34(data) 57 37 + 164: 48(ptr) AccessChain 34(data) 73 37 165: 18(i8vec4) Load 164 - 166: 58(i8vec3) VectorShuffle 165 165 0 1 2 - 167: 58(i8vec3) GroupNonUniformBitwiseAnd 42 Reduce 166 - 168: 48(ptr) AccessChain 34(data) 163 37 - 169: 18(i8vec4) Load 168 - 170: 18(i8vec4) VectorShuffle 169 167 4 5 6 3 - Store 168 170 - 171: 6(int) Load 8(invocation) - 172: 48(ptr) AccessChain 34(data) 67 37 - 173: 18(i8vec4) Load 172 - 174: 18(i8vec4) GroupNonUniformBitwiseAnd 42 Reduce 173 - 175: 48(ptr) AccessChain 34(data) 171 37 - Store 175 174 - 176: 6(int) Load 8(invocation) - 177: 39(ptr) AccessChain 34(data) 37 37 38 - 178: 17(int8_t) Load 177 - 179: 17(int8_t) GroupNonUniformBitwiseOr 42 Reduce 178 - 180: 39(ptr) AccessChain 34(data) 176 37 38 - Store 180 179 - 181: 6(int) Load 8(invocation) - 182: 48(ptr) AccessChain 34(data) 46 37 - 183: 18(i8vec4) Load 182 - 184: 47(i8vec2) VectorShuffle 183 183 0 1 - 185: 47(i8vec2) GroupNonUniformBitwiseOr 42 Reduce 184 - 186: 48(ptr) AccessChain 34(data) 181 37 - 187: 18(i8vec4) Load 186 - 188: 18(i8vec4) VectorShuffle 187 185 4 5 2 3 - Store 186 188 - 189: 6(int) Load 8(invocation) - 190: 48(ptr) AccessChain 34(data) 57 37 - 191: 18(i8vec4) Load 190 - 192: 58(i8vec3) VectorShuffle 191 191 0 1 2 - 193: 58(i8vec3) GroupNonUniformBitwiseOr 42 Reduce 192 - 194: 48(ptr) AccessChain 34(data) 189 37 + 166: 18(i8vec4) GroupNonUniformSMax 42 Reduce 165 + 167: 48(ptr) AccessChain 34(data) 163 37 + Store 167 166 + 168: 6(int) Load 8(invocation) + 169: 39(ptr) AccessChain 34(data) 37 37 38 + 170: 17(int8_t) Load 169 + 171: 17(int8_t) GroupNonUniformBitwiseAnd 42 Reduce 170 + 172: 39(ptr) AccessChain 34(data) 168 37 38 + Store 172 171 + 173: 6(int) Load 8(invocation) + 174: 48(ptr) AccessChain 34(data) 46 37 + 175: 18(i8vec4) Load 174 + 176: 47(i8vec2) VectorShuffle 175 175 0 1 + 177: 47(i8vec2) GroupNonUniformBitwiseAnd 42 Reduce 176 + 178: 39(ptr) AccessChain 34(data) 173 37 38 + 179: 17(int8_t) CompositeExtract 177 0 + Store 178 179 + 180: 39(ptr) AccessChain 34(data) 173 37 55 + 181: 17(int8_t) CompositeExtract 177 1 + Store 180 181 + 182: 6(int) Load 8(invocation) + 183: 48(ptr) AccessChain 34(data) 59 37 + 184: 18(i8vec4) Load 183 + 185: 60(i8vec3) VectorShuffle 184 184 0 1 2 + 186: 60(i8vec3) GroupNonUniformBitwiseAnd 42 Reduce 185 + 187: 39(ptr) AccessChain 34(data) 182 37 38 + 188: 17(int8_t) CompositeExtract 186 0 + Store 187 188 + 189: 39(ptr) AccessChain 34(data) 182 37 55 + 190: 17(int8_t) CompositeExtract 186 1 + Store 189 190 + 191: 39(ptr) AccessChain 34(data) 182 37 69 + 192: 17(int8_t) CompositeExtract 186 2 + Store 191 192 + 193: 6(int) Load 8(invocation) + 194: 48(ptr) AccessChain 34(data) 73 37 195: 18(i8vec4) Load 194 - 196: 18(i8vec4) VectorShuffle 195 193 4 5 6 3 - Store 194 196 - 197: 6(int) Load 8(invocation) - 198: 48(ptr) AccessChain 34(data) 67 37 - 199: 18(i8vec4) Load 198 - 200: 18(i8vec4) GroupNonUniformBitwiseOr 42 Reduce 199 - 201: 48(ptr) AccessChain 34(data) 197 37 - Store 201 200 - 202: 6(int) Load 8(invocation) - 203: 39(ptr) AccessChain 34(data) 37 37 38 - 204: 17(int8_t) Load 203 - 205: 17(int8_t) GroupNonUniformBitwiseXor 42 Reduce 204 - 206: 39(ptr) AccessChain 34(data) 202 37 38 - Store 206 205 - 207: 6(int) Load 8(invocation) - 208: 48(ptr) AccessChain 34(data) 46 37 - 209: 18(i8vec4) Load 208 - 210: 47(i8vec2) VectorShuffle 209 209 0 1 - 211: 47(i8vec2) GroupNonUniformBitwiseXor 42 Reduce 210 - 212: 48(ptr) AccessChain 34(data) 207 37 - 213: 18(i8vec4) Load 212 - 214: 18(i8vec4) VectorShuffle 213 211 4 5 2 3 - Store 212 214 - 215: 6(int) Load 8(invocation) - 216: 48(ptr) AccessChain 34(data) 57 37 - 217: 18(i8vec4) Load 216 - 218: 58(i8vec3) VectorShuffle 217 217 0 1 2 - 219: 58(i8vec3) GroupNonUniformBitwiseXor 42 Reduce 218 - 220: 48(ptr) AccessChain 34(data) 215 37 - 221: 18(i8vec4) Load 220 - 222: 18(i8vec4) VectorShuffle 221 219 4 5 6 3 - Store 220 222 + 196: 18(i8vec4) GroupNonUniformBitwiseAnd 42 Reduce 195 + 197: 48(ptr) AccessChain 34(data) 193 37 + Store 197 196 + 198: 6(int) Load 8(invocation) + 199: 39(ptr) AccessChain 34(data) 37 37 38 + 200: 17(int8_t) Load 199 + 201: 17(int8_t) GroupNonUniformBitwiseOr 42 Reduce 200 + 202: 39(ptr) AccessChain 34(data) 198 37 38 + Store 202 201 + 203: 6(int) Load 8(invocation) + 204: 48(ptr) AccessChain 34(data) 46 37 + 205: 18(i8vec4) Load 204 + 206: 47(i8vec2) VectorShuffle 205 205 0 1 + 207: 47(i8vec2) GroupNonUniformBitwiseOr 42 Reduce 206 + 208: 39(ptr) AccessChain 34(data) 203 37 38 + 209: 17(int8_t) CompositeExtract 207 0 + Store 208 209 + 210: 39(ptr) AccessChain 34(data) 203 37 55 + 211: 17(int8_t) CompositeExtract 207 1 + Store 210 211 + 212: 6(int) Load 8(invocation) + 213: 48(ptr) AccessChain 34(data) 59 37 + 214: 18(i8vec4) Load 213 + 215: 60(i8vec3) VectorShuffle 214 214 0 1 2 + 216: 60(i8vec3) GroupNonUniformBitwiseOr 42 Reduce 215 + 217: 39(ptr) AccessChain 34(data) 212 37 38 + 218: 17(int8_t) CompositeExtract 216 0 + Store 217 218 + 219: 39(ptr) AccessChain 34(data) 212 37 55 + 220: 17(int8_t) CompositeExtract 216 1 + Store 219 220 + 221: 39(ptr) AccessChain 34(data) 212 37 69 + 222: 17(int8_t) CompositeExtract 216 2 + Store 221 222 223: 6(int) Load 8(invocation) - 224: 48(ptr) AccessChain 34(data) 67 37 + 224: 48(ptr) AccessChain 34(data) 73 37 225: 18(i8vec4) Load 224 - 226: 18(i8vec4) GroupNonUniformBitwiseXor 42 Reduce 225 + 226: 18(i8vec4) GroupNonUniformBitwiseOr 42 Reduce 225 227: 48(ptr) AccessChain 34(data) 223 37 Store 227 226 228: 6(int) Load 8(invocation) 229: 39(ptr) AccessChain 34(data) 37 37 38 230: 17(int8_t) Load 229 - 231: 17(int8_t) GroupNonUniformIAdd 42 InclusiveScan 230 + 231: 17(int8_t) GroupNonUniformBitwiseXor 42 Reduce 230 232: 39(ptr) AccessChain 34(data) 228 37 38 Store 232 231 233: 6(int) Load 8(invocation) 234: 48(ptr) AccessChain 34(data) 46 37 235: 18(i8vec4) Load 234 236: 47(i8vec2) VectorShuffle 235 235 0 1 - 237: 47(i8vec2) GroupNonUniformIAdd 42 InclusiveScan 236 - 238: 48(ptr) AccessChain 34(data) 233 37 - 239: 18(i8vec4) Load 238 - 240: 18(i8vec4) VectorShuffle 239 237 4 5 2 3 - Store 238 240 - 241: 6(int) Load 8(invocation) - 242: 48(ptr) AccessChain 34(data) 57 37 - 243: 18(i8vec4) Load 242 - 244: 58(i8vec3) VectorShuffle 243 243 0 1 2 - 245: 58(i8vec3) GroupNonUniformIAdd 42 InclusiveScan 244 - 246: 48(ptr) AccessChain 34(data) 241 37 - 247: 18(i8vec4) Load 246 - 248: 18(i8vec4) VectorShuffle 247 245 4 5 6 3 - Store 246 248 - 249: 6(int) Load 8(invocation) - 250: 48(ptr) AccessChain 34(data) 67 37 - 251: 18(i8vec4) Load 250 - 252: 18(i8vec4) GroupNonUniformIAdd 42 InclusiveScan 251 - 253: 48(ptr) AccessChain 34(data) 249 37 - Store 253 252 - 254: 6(int) Load 8(invocation) - 255: 39(ptr) AccessChain 34(data) 37 37 38 - 256: 17(int8_t) Load 255 - 257: 17(int8_t) GroupNonUniformIMul 42 InclusiveScan 256 - 258: 39(ptr) AccessChain 34(data) 254 37 38 - Store 258 257 - 259: 6(int) Load 8(invocation) - 260: 48(ptr) AccessChain 34(data) 46 37 - 261: 18(i8vec4) Load 260 - 262: 47(i8vec2) VectorShuffle 261 261 0 1 - 263: 47(i8vec2) GroupNonUniformIMul 42 InclusiveScan 262 - 264: 48(ptr) AccessChain 34(data) 259 37 + 237: 47(i8vec2) GroupNonUniformBitwiseXor 42 Reduce 236 + 238: 39(ptr) AccessChain 34(data) 233 37 38 + 239: 17(int8_t) CompositeExtract 237 0 + Store 238 239 + 240: 39(ptr) AccessChain 34(data) 233 37 55 + 241: 17(int8_t) CompositeExtract 237 1 + Store 240 241 + 242: 6(int) Load 8(invocation) + 243: 48(ptr) AccessChain 34(data) 59 37 + 244: 18(i8vec4) Load 243 + 245: 60(i8vec3) VectorShuffle 244 244 0 1 2 + 246: 60(i8vec3) GroupNonUniformBitwiseXor 42 Reduce 245 + 247: 39(ptr) AccessChain 34(data) 242 37 38 + 248: 17(int8_t) CompositeExtract 246 0 + Store 247 248 + 249: 39(ptr) AccessChain 34(data) 242 37 55 + 250: 17(int8_t) CompositeExtract 246 1 + Store 249 250 + 251: 39(ptr) AccessChain 34(data) 242 37 69 + 252: 17(int8_t) CompositeExtract 246 2 + Store 251 252 + 253: 6(int) Load 8(invocation) + 254: 48(ptr) AccessChain 34(data) 73 37 + 255: 18(i8vec4) Load 254 + 256: 18(i8vec4) GroupNonUniformBitwiseXor 42 Reduce 255 + 257: 48(ptr) AccessChain 34(data) 253 37 + Store 257 256 + 258: 6(int) Load 8(invocation) + 259: 39(ptr) AccessChain 34(data) 37 37 38 + 260: 17(int8_t) Load 259 + 261: 17(int8_t) GroupNonUniformIAdd 42 InclusiveScan 260 + 262: 39(ptr) AccessChain 34(data) 258 37 38 + Store 262 261 + 263: 6(int) Load 8(invocation) + 264: 48(ptr) AccessChain 34(data) 46 37 265: 18(i8vec4) Load 264 - 266: 18(i8vec4) VectorShuffle 265 263 4 5 2 3 - Store 264 266 - 267: 6(int) Load 8(invocation) - 268: 48(ptr) AccessChain 34(data) 57 37 - 269: 18(i8vec4) Load 268 - 270: 58(i8vec3) VectorShuffle 269 269 0 1 2 - 271: 58(i8vec3) GroupNonUniformIMul 42 InclusiveScan 270 - 272: 48(ptr) AccessChain 34(data) 267 37 - 273: 18(i8vec4) Load 272 - 274: 18(i8vec4) VectorShuffle 273 271 4 5 6 3 - Store 272 274 - 275: 6(int) Load 8(invocation) - 276: 48(ptr) AccessChain 34(data) 67 37 - 277: 18(i8vec4) Load 276 - 278: 18(i8vec4) GroupNonUniformIMul 42 InclusiveScan 277 - 279: 48(ptr) AccessChain 34(data) 275 37 - Store 279 278 - 280: 6(int) Load 8(invocation) - 281: 39(ptr) AccessChain 34(data) 37 37 38 - 282: 17(int8_t) Load 281 - 283: 17(int8_t) GroupNonUniformSMin 42 InclusiveScan 282 - 284: 39(ptr) AccessChain 34(data) 280 37 38 - Store 284 283 - 285: 6(int) Load 8(invocation) - 286: 48(ptr) AccessChain 34(data) 46 37 - 287: 18(i8vec4) Load 286 - 288: 47(i8vec2) VectorShuffle 287 287 0 1 - 289: 47(i8vec2) GroupNonUniformSMin 42 InclusiveScan 288 - 290: 48(ptr) AccessChain 34(data) 285 37 - 291: 18(i8vec4) Load 290 - 292: 18(i8vec4) VectorShuffle 291 289 4 5 2 3 - Store 290 292 + 266: 47(i8vec2) VectorShuffle 265 265 0 1 + 267: 47(i8vec2) GroupNonUniformIAdd 42 InclusiveScan 266 + 268: 39(ptr) AccessChain 34(data) 263 37 38 + 269: 17(int8_t) CompositeExtract 267 0 + Store 268 269 + 270: 39(ptr) AccessChain 34(data) 263 37 55 + 271: 17(int8_t) CompositeExtract 267 1 + Store 270 271 + 272: 6(int) Load 8(invocation) + 273: 48(ptr) AccessChain 34(data) 59 37 + 274: 18(i8vec4) Load 273 + 275: 60(i8vec3) VectorShuffle 274 274 0 1 2 + 276: 60(i8vec3) GroupNonUniformIAdd 42 InclusiveScan 275 + 277: 39(ptr) AccessChain 34(data) 272 37 38 + 278: 17(int8_t) CompositeExtract 276 0 + Store 277 278 + 279: 39(ptr) AccessChain 34(data) 272 37 55 + 280: 17(int8_t) CompositeExtract 276 1 + Store 279 280 + 281: 39(ptr) AccessChain 34(data) 272 37 69 + 282: 17(int8_t) CompositeExtract 276 2 + Store 281 282 + 283: 6(int) Load 8(invocation) + 284: 48(ptr) AccessChain 34(data) 73 37 + 285: 18(i8vec4) Load 284 + 286: 18(i8vec4) GroupNonUniformIAdd 42 InclusiveScan 285 + 287: 48(ptr) AccessChain 34(data) 283 37 + Store 287 286 + 288: 6(int) Load 8(invocation) + 289: 39(ptr) AccessChain 34(data) 37 37 38 + 290: 17(int8_t) Load 289 + 291: 17(int8_t) GroupNonUniformIMul 42 InclusiveScan 290 + 292: 39(ptr) AccessChain 34(data) 288 37 38 + Store 292 291 293: 6(int) Load 8(invocation) - 294: 48(ptr) AccessChain 34(data) 57 37 + 294: 48(ptr) AccessChain 34(data) 46 37 295: 18(i8vec4) Load 294 - 296: 58(i8vec3) VectorShuffle 295 295 0 1 2 - 297: 58(i8vec3) GroupNonUniformSMin 42 InclusiveScan 296 - 298: 48(ptr) AccessChain 34(data) 293 37 - 299: 18(i8vec4) Load 298 - 300: 18(i8vec4) VectorShuffle 299 297 4 5 6 3 - Store 298 300 - 301: 6(int) Load 8(invocation) - 302: 48(ptr) AccessChain 34(data) 67 37 - 303: 18(i8vec4) Load 302 - 304: 18(i8vec4) GroupNonUniformSMin 42 InclusiveScan 303 - 305: 48(ptr) AccessChain 34(data) 301 37 - Store 305 304 - 306: 6(int) Load 8(invocation) - 307: 39(ptr) AccessChain 34(data) 37 37 38 - 308: 17(int8_t) Load 307 - 309: 17(int8_t) GroupNonUniformSMax 42 InclusiveScan 308 - 310: 39(ptr) AccessChain 34(data) 306 37 38 - Store 310 309 - 311: 6(int) Load 8(invocation) - 312: 48(ptr) AccessChain 34(data) 46 37 - 313: 18(i8vec4) Load 312 - 314: 47(i8vec2) VectorShuffle 313 313 0 1 - 315: 47(i8vec2) GroupNonUniformSMax 42 InclusiveScan 314 - 316: 48(ptr) AccessChain 34(data) 311 37 - 317: 18(i8vec4) Load 316 - 318: 18(i8vec4) VectorShuffle 317 315 4 5 2 3 - Store 316 318 - 319: 6(int) Load 8(invocation) - 320: 48(ptr) AccessChain 34(data) 57 37 - 321: 18(i8vec4) Load 320 - 322: 58(i8vec3) VectorShuffle 321 321 0 1 2 - 323: 58(i8vec3) GroupNonUniformSMax 42 InclusiveScan 322 - 324: 48(ptr) AccessChain 34(data) 319 37 + 296: 47(i8vec2) VectorShuffle 295 295 0 1 + 297: 47(i8vec2) GroupNonUniformIMul 42 InclusiveScan 296 + 298: 39(ptr) AccessChain 34(data) 293 37 38 + 299: 17(int8_t) CompositeExtract 297 0 + Store 298 299 + 300: 39(ptr) AccessChain 34(data) 293 37 55 + 301: 17(int8_t) CompositeExtract 297 1 + Store 300 301 + 302: 6(int) Load 8(invocation) + 303: 48(ptr) AccessChain 34(data) 59 37 + 304: 18(i8vec4) Load 303 + 305: 60(i8vec3) VectorShuffle 304 304 0 1 2 + 306: 60(i8vec3) GroupNonUniformIMul 42 InclusiveScan 305 + 307: 39(ptr) AccessChain 34(data) 302 37 38 + 308: 17(int8_t) CompositeExtract 306 0 + Store 307 308 + 309: 39(ptr) AccessChain 34(data) 302 37 55 + 310: 17(int8_t) CompositeExtract 306 1 + Store 309 310 + 311: 39(ptr) AccessChain 34(data) 302 37 69 + 312: 17(int8_t) CompositeExtract 306 2 + Store 311 312 + 313: 6(int) Load 8(invocation) + 314: 48(ptr) AccessChain 34(data) 73 37 + 315: 18(i8vec4) Load 314 + 316: 18(i8vec4) GroupNonUniformIMul 42 InclusiveScan 315 + 317: 48(ptr) AccessChain 34(data) 313 37 + Store 317 316 + 318: 6(int) Load 8(invocation) + 319: 39(ptr) AccessChain 34(data) 37 37 38 + 320: 17(int8_t) Load 319 + 321: 17(int8_t) GroupNonUniformSMin 42 InclusiveScan 320 + 322: 39(ptr) AccessChain 34(data) 318 37 38 + Store 322 321 + 323: 6(int) Load 8(invocation) + 324: 48(ptr) AccessChain 34(data) 46 37 325: 18(i8vec4) Load 324 - 326: 18(i8vec4) VectorShuffle 325 323 4 5 6 3 - Store 324 326 - 327: 6(int) Load 8(invocation) - 328: 48(ptr) AccessChain 34(data) 67 37 - 329: 18(i8vec4) Load 328 - 330: 18(i8vec4) GroupNonUniformSMax 42 InclusiveScan 329 - 331: 48(ptr) AccessChain 34(data) 327 37 - Store 331 330 + 326: 47(i8vec2) VectorShuffle 325 325 0 1 + 327: 47(i8vec2) GroupNonUniformSMin 42 InclusiveScan 326 + 328: 39(ptr) AccessChain 34(data) 323 37 38 + 329: 17(int8_t) CompositeExtract 327 0 + Store 328 329 + 330: 39(ptr) AccessChain 34(data) 323 37 55 + 331: 17(int8_t) CompositeExtract 327 1 + Store 330 331 332: 6(int) Load 8(invocation) - 333: 39(ptr) AccessChain 34(data) 37 37 38 - 334: 17(int8_t) Load 333 - 335: 17(int8_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 334 - 336: 39(ptr) AccessChain 34(data) 332 37 38 - Store 336 335 - 337: 6(int) Load 8(invocation) - 338: 48(ptr) AccessChain 34(data) 46 37 - 339: 18(i8vec4) Load 338 - 340: 47(i8vec2) VectorShuffle 339 339 0 1 - 341: 47(i8vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 340 - 342: 48(ptr) AccessChain 34(data) 337 37 - 343: 18(i8vec4) Load 342 - 344: 18(i8vec4) VectorShuffle 343 341 4 5 2 3 - Store 342 344 - 345: 6(int) Load 8(invocation) - 346: 48(ptr) AccessChain 34(data) 57 37 - 347: 18(i8vec4) Load 346 - 348: 58(i8vec3) VectorShuffle 347 347 0 1 2 - 349: 58(i8vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 348 - 350: 48(ptr) AccessChain 34(data) 345 37 - 351: 18(i8vec4) Load 350 - 352: 18(i8vec4) VectorShuffle 351 349 4 5 6 3 - Store 350 352 + 333: 48(ptr) AccessChain 34(data) 59 37 + 334: 18(i8vec4) Load 333 + 335: 60(i8vec3) VectorShuffle 334 334 0 1 2 + 336: 60(i8vec3) GroupNonUniformSMin 42 InclusiveScan 335 + 337: 39(ptr) AccessChain 34(data) 332 37 38 + 338: 17(int8_t) CompositeExtract 336 0 + Store 337 338 + 339: 39(ptr) AccessChain 34(data) 332 37 55 + 340: 17(int8_t) CompositeExtract 336 1 + Store 339 340 + 341: 39(ptr) AccessChain 34(data) 332 37 69 + 342: 17(int8_t) CompositeExtract 336 2 + Store 341 342 + 343: 6(int) Load 8(invocation) + 344: 48(ptr) AccessChain 34(data) 73 37 + 345: 18(i8vec4) Load 344 + 346: 18(i8vec4) GroupNonUniformSMin 42 InclusiveScan 345 + 347: 48(ptr) AccessChain 34(data) 343 37 + Store 347 346 + 348: 6(int) Load 8(invocation) + 349: 39(ptr) AccessChain 34(data) 37 37 38 + 350: 17(int8_t) Load 349 + 351: 17(int8_t) GroupNonUniformSMax 42 InclusiveScan 350 + 352: 39(ptr) AccessChain 34(data) 348 37 38 + Store 352 351 353: 6(int) Load 8(invocation) - 354: 48(ptr) AccessChain 34(data) 67 37 + 354: 48(ptr) AccessChain 34(data) 46 37 355: 18(i8vec4) Load 354 - 356: 18(i8vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 355 - 357: 48(ptr) AccessChain 34(data) 353 37 - Store 357 356 - 358: 6(int) Load 8(invocation) - 359: 39(ptr) AccessChain 34(data) 37 37 38 - 360: 17(int8_t) Load 359 - 361: 17(int8_t) GroupNonUniformBitwiseOr 42 InclusiveScan 360 - 362: 39(ptr) AccessChain 34(data) 358 37 38 - Store 362 361 - 363: 6(int) Load 8(invocation) - 364: 48(ptr) AccessChain 34(data) 46 37 - 365: 18(i8vec4) Load 364 - 366: 47(i8vec2) VectorShuffle 365 365 0 1 - 367: 47(i8vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 366 - 368: 48(ptr) AccessChain 34(data) 363 37 - 369: 18(i8vec4) Load 368 - 370: 18(i8vec4) VectorShuffle 369 367 4 5 2 3 - Store 368 370 - 371: 6(int) Load 8(invocation) - 372: 48(ptr) AccessChain 34(data) 57 37 - 373: 18(i8vec4) Load 372 - 374: 58(i8vec3) VectorShuffle 373 373 0 1 2 - 375: 58(i8vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 374 - 376: 48(ptr) AccessChain 34(data) 371 37 - 377: 18(i8vec4) Load 376 - 378: 18(i8vec4) VectorShuffle 377 375 4 5 6 3 - Store 376 378 - 379: 6(int) Load 8(invocation) - 380: 48(ptr) AccessChain 34(data) 67 37 - 381: 18(i8vec4) Load 380 - 382: 18(i8vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 381 - 383: 48(ptr) AccessChain 34(data) 379 37 - Store 383 382 - 384: 6(int) Load 8(invocation) - 385: 39(ptr) AccessChain 34(data) 37 37 38 - 386: 17(int8_t) Load 385 - 387: 17(int8_t) GroupNonUniformBitwiseXor 42 InclusiveScan 386 - 388: 39(ptr) AccessChain 34(data) 384 37 38 - Store 388 387 - 389: 6(int) Load 8(invocation) - 390: 48(ptr) AccessChain 34(data) 46 37 - 391: 18(i8vec4) Load 390 - 392: 47(i8vec2) VectorShuffle 391 391 0 1 - 393: 47(i8vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 392 - 394: 48(ptr) AccessChain 34(data) 389 37 - 395: 18(i8vec4) Load 394 - 396: 18(i8vec4) VectorShuffle 395 393 4 5 2 3 - Store 394 396 - 397: 6(int) Load 8(invocation) - 398: 48(ptr) AccessChain 34(data) 57 37 - 399: 18(i8vec4) Load 398 - 400: 58(i8vec3) VectorShuffle 399 399 0 1 2 - 401: 58(i8vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 400 - 402: 48(ptr) AccessChain 34(data) 397 37 - 403: 18(i8vec4) Load 402 - 404: 18(i8vec4) VectorShuffle 403 401 4 5 6 3 - Store 402 404 - 405: 6(int) Load 8(invocation) - 406: 48(ptr) AccessChain 34(data) 67 37 - 407: 18(i8vec4) Load 406 - 408: 18(i8vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 407 - 409: 48(ptr) AccessChain 34(data) 405 37 - Store 409 408 - 410: 6(int) Load 8(invocation) - 411: 39(ptr) AccessChain 34(data) 37 37 38 - 412: 17(int8_t) Load 411 - 413: 17(int8_t) GroupNonUniformIAdd 42 ExclusiveScan 412 - 414: 39(ptr) AccessChain 34(data) 410 37 38 - Store 414 413 - 415: 6(int) Load 8(invocation) - 416: 48(ptr) AccessChain 34(data) 46 37 - 417: 18(i8vec4) Load 416 - 418: 47(i8vec2) VectorShuffle 417 417 0 1 - 419: 47(i8vec2) GroupNonUniformIAdd 42 ExclusiveScan 418 - 420: 48(ptr) AccessChain 34(data) 415 37 - 421: 18(i8vec4) Load 420 - 422: 18(i8vec4) VectorShuffle 421 419 4 5 2 3 - Store 420 422 - 423: 6(int) Load 8(invocation) - 424: 48(ptr) AccessChain 34(data) 57 37 - 425: 18(i8vec4) Load 424 - 426: 58(i8vec3) VectorShuffle 425 425 0 1 2 - 427: 58(i8vec3) GroupNonUniformIAdd 42 ExclusiveScan 426 - 428: 48(ptr) AccessChain 34(data) 423 37 - 429: 18(i8vec4) Load 428 - 430: 18(i8vec4) VectorShuffle 429 427 4 5 6 3 - Store 428 430 - 431: 6(int) Load 8(invocation) - 432: 48(ptr) AccessChain 34(data) 67 37 - 433: 18(i8vec4) Load 432 - 434: 18(i8vec4) GroupNonUniformIAdd 42 ExclusiveScan 433 - 435: 48(ptr) AccessChain 34(data) 431 37 - Store 435 434 - 436: 6(int) Load 8(invocation) - 437: 39(ptr) AccessChain 34(data) 37 37 38 - 438: 17(int8_t) Load 437 - 439: 17(int8_t) GroupNonUniformIMul 42 ExclusiveScan 438 - 440: 39(ptr) AccessChain 34(data) 436 37 38 - Store 440 439 - 441: 6(int) Load 8(invocation) - 442: 48(ptr) AccessChain 34(data) 46 37 - 443: 18(i8vec4) Load 442 - 444: 47(i8vec2) VectorShuffle 443 443 0 1 - 445: 47(i8vec2) GroupNonUniformIMul 42 ExclusiveScan 444 - 446: 48(ptr) AccessChain 34(data) 441 37 - 447: 18(i8vec4) Load 446 - 448: 18(i8vec4) VectorShuffle 447 445 4 5 2 3 - Store 446 448 - 449: 6(int) Load 8(invocation) - 450: 48(ptr) AccessChain 34(data) 57 37 - 451: 18(i8vec4) Load 450 - 452: 58(i8vec3) VectorShuffle 451 451 0 1 2 - 453: 58(i8vec3) GroupNonUniformIMul 42 ExclusiveScan 452 - 454: 48(ptr) AccessChain 34(data) 449 37 - 455: 18(i8vec4) Load 454 - 456: 18(i8vec4) VectorShuffle 455 453 4 5 6 3 - Store 454 456 - 457: 6(int) Load 8(invocation) - 458: 48(ptr) AccessChain 34(data) 67 37 - 459: 18(i8vec4) Load 458 - 460: 18(i8vec4) GroupNonUniformIMul 42 ExclusiveScan 459 - 461: 48(ptr) AccessChain 34(data) 457 37 - Store 461 460 - 462: 6(int) Load 8(invocation) - 463: 39(ptr) AccessChain 34(data) 37 37 38 - 464: 17(int8_t) Load 463 - 465: 17(int8_t) GroupNonUniformSMin 42 ExclusiveScan 464 - 466: 39(ptr) AccessChain 34(data) 462 37 38 - Store 466 465 - 467: 6(int) Load 8(invocation) - 468: 48(ptr) AccessChain 34(data) 46 37 - 469: 18(i8vec4) Load 468 - 470: 47(i8vec2) VectorShuffle 469 469 0 1 - 471: 47(i8vec2) GroupNonUniformSMin 42 ExclusiveScan 470 - 472: 48(ptr) AccessChain 34(data) 467 37 - 473: 18(i8vec4) Load 472 - 474: 18(i8vec4) VectorShuffle 473 471 4 5 2 3 - Store 472 474 - 475: 6(int) Load 8(invocation) - 476: 48(ptr) AccessChain 34(data) 57 37 - 477: 18(i8vec4) Load 476 - 478: 58(i8vec3) VectorShuffle 477 477 0 1 2 - 479: 58(i8vec3) GroupNonUniformSMin 42 ExclusiveScan 478 - 480: 48(ptr) AccessChain 34(data) 475 37 - 481: 18(i8vec4) Load 480 - 482: 18(i8vec4) VectorShuffle 481 479 4 5 6 3 - Store 480 482 - 483: 6(int) Load 8(invocation) - 484: 48(ptr) AccessChain 34(data) 67 37 - 485: 18(i8vec4) Load 484 - 486: 18(i8vec4) GroupNonUniformSMin 42 ExclusiveScan 485 - 487: 48(ptr) AccessChain 34(data) 483 37 - Store 487 486 - 488: 6(int) Load 8(invocation) - 489: 39(ptr) AccessChain 34(data) 37 37 38 - 490: 17(int8_t) Load 489 - 491: 17(int8_t) GroupNonUniformSMax 42 ExclusiveScan 490 - 492: 39(ptr) AccessChain 34(data) 488 37 38 - Store 492 491 + 356: 47(i8vec2) VectorShuffle 355 355 0 1 + 357: 47(i8vec2) GroupNonUniformSMax 42 InclusiveScan 356 + 358: 39(ptr) AccessChain 34(data) 353 37 38 + 359: 17(int8_t) CompositeExtract 357 0 + Store 358 359 + 360: 39(ptr) AccessChain 34(data) 353 37 55 + 361: 17(int8_t) CompositeExtract 357 1 + Store 360 361 + 362: 6(int) Load 8(invocation) + 363: 48(ptr) AccessChain 34(data) 59 37 + 364: 18(i8vec4) Load 363 + 365: 60(i8vec3) VectorShuffle 364 364 0 1 2 + 366: 60(i8vec3) GroupNonUniformSMax 42 InclusiveScan 365 + 367: 39(ptr) AccessChain 34(data) 362 37 38 + 368: 17(int8_t) CompositeExtract 366 0 + Store 367 368 + 369: 39(ptr) AccessChain 34(data) 362 37 55 + 370: 17(int8_t) CompositeExtract 366 1 + Store 369 370 + 371: 39(ptr) AccessChain 34(data) 362 37 69 + 372: 17(int8_t) CompositeExtract 366 2 + Store 371 372 + 373: 6(int) Load 8(invocation) + 374: 48(ptr) AccessChain 34(data) 73 37 + 375: 18(i8vec4) Load 374 + 376: 18(i8vec4) GroupNonUniformSMax 42 InclusiveScan 375 + 377: 48(ptr) AccessChain 34(data) 373 37 + Store 377 376 + 378: 6(int) Load 8(invocation) + 379: 39(ptr) AccessChain 34(data) 37 37 38 + 380: 17(int8_t) Load 379 + 381: 17(int8_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 380 + 382: 39(ptr) AccessChain 34(data) 378 37 38 + Store 382 381 + 383: 6(int) Load 8(invocation) + 384: 48(ptr) AccessChain 34(data) 46 37 + 385: 18(i8vec4) Load 384 + 386: 47(i8vec2) VectorShuffle 385 385 0 1 + 387: 47(i8vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 386 + 388: 39(ptr) AccessChain 34(data) 383 37 38 + 389: 17(int8_t) CompositeExtract 387 0 + Store 388 389 + 390: 39(ptr) AccessChain 34(data) 383 37 55 + 391: 17(int8_t) CompositeExtract 387 1 + Store 390 391 + 392: 6(int) Load 8(invocation) + 393: 48(ptr) AccessChain 34(data) 59 37 + 394: 18(i8vec4) Load 393 + 395: 60(i8vec3) VectorShuffle 394 394 0 1 2 + 396: 60(i8vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 395 + 397: 39(ptr) AccessChain 34(data) 392 37 38 + 398: 17(int8_t) CompositeExtract 396 0 + Store 397 398 + 399: 39(ptr) AccessChain 34(data) 392 37 55 + 400: 17(int8_t) CompositeExtract 396 1 + Store 399 400 + 401: 39(ptr) AccessChain 34(data) 392 37 69 + 402: 17(int8_t) CompositeExtract 396 2 + Store 401 402 + 403: 6(int) Load 8(invocation) + 404: 48(ptr) AccessChain 34(data) 73 37 + 405: 18(i8vec4) Load 404 + 406: 18(i8vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 405 + 407: 48(ptr) AccessChain 34(data) 403 37 + Store 407 406 + 408: 6(int) Load 8(invocation) + 409: 39(ptr) AccessChain 34(data) 37 37 38 + 410: 17(int8_t) Load 409 + 411: 17(int8_t) GroupNonUniformBitwiseOr 42 InclusiveScan 410 + 412: 39(ptr) AccessChain 34(data) 408 37 38 + Store 412 411 + 413: 6(int) Load 8(invocation) + 414: 48(ptr) AccessChain 34(data) 46 37 + 415: 18(i8vec4) Load 414 + 416: 47(i8vec2) VectorShuffle 415 415 0 1 + 417: 47(i8vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 416 + 418: 39(ptr) AccessChain 34(data) 413 37 38 + 419: 17(int8_t) CompositeExtract 417 0 + Store 418 419 + 420: 39(ptr) AccessChain 34(data) 413 37 55 + 421: 17(int8_t) CompositeExtract 417 1 + Store 420 421 + 422: 6(int) Load 8(invocation) + 423: 48(ptr) AccessChain 34(data) 59 37 + 424: 18(i8vec4) Load 423 + 425: 60(i8vec3) VectorShuffle 424 424 0 1 2 + 426: 60(i8vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 425 + 427: 39(ptr) AccessChain 34(data) 422 37 38 + 428: 17(int8_t) CompositeExtract 426 0 + Store 427 428 + 429: 39(ptr) AccessChain 34(data) 422 37 55 + 430: 17(int8_t) CompositeExtract 426 1 + Store 429 430 + 431: 39(ptr) AccessChain 34(data) 422 37 69 + 432: 17(int8_t) CompositeExtract 426 2 + Store 431 432 + 433: 6(int) Load 8(invocation) + 434: 48(ptr) AccessChain 34(data) 73 37 + 435: 18(i8vec4) Load 434 + 436: 18(i8vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 435 + 437: 48(ptr) AccessChain 34(data) 433 37 + Store 437 436 + 438: 6(int) Load 8(invocation) + 439: 39(ptr) AccessChain 34(data) 37 37 38 + 440: 17(int8_t) Load 439 + 441: 17(int8_t) GroupNonUniformBitwiseXor 42 InclusiveScan 440 + 442: 39(ptr) AccessChain 34(data) 438 37 38 + Store 442 441 + 443: 6(int) Load 8(invocation) + 444: 48(ptr) AccessChain 34(data) 46 37 + 445: 18(i8vec4) Load 444 + 446: 47(i8vec2) VectorShuffle 445 445 0 1 + 447: 47(i8vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 446 + 448: 39(ptr) AccessChain 34(data) 443 37 38 + 449: 17(int8_t) CompositeExtract 447 0 + Store 448 449 + 450: 39(ptr) AccessChain 34(data) 443 37 55 + 451: 17(int8_t) CompositeExtract 447 1 + Store 450 451 + 452: 6(int) Load 8(invocation) + 453: 48(ptr) AccessChain 34(data) 59 37 + 454: 18(i8vec4) Load 453 + 455: 60(i8vec3) VectorShuffle 454 454 0 1 2 + 456: 60(i8vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 455 + 457: 39(ptr) AccessChain 34(data) 452 37 38 + 458: 17(int8_t) CompositeExtract 456 0 + Store 457 458 + 459: 39(ptr) AccessChain 34(data) 452 37 55 + 460: 17(int8_t) CompositeExtract 456 1 + Store 459 460 + 461: 39(ptr) AccessChain 34(data) 452 37 69 + 462: 17(int8_t) CompositeExtract 456 2 + Store 461 462 + 463: 6(int) Load 8(invocation) + 464: 48(ptr) AccessChain 34(data) 73 37 + 465: 18(i8vec4) Load 464 + 466: 18(i8vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 465 + 467: 48(ptr) AccessChain 34(data) 463 37 + Store 467 466 + 468: 6(int) Load 8(invocation) + 469: 39(ptr) AccessChain 34(data) 37 37 38 + 470: 17(int8_t) Load 469 + 471: 17(int8_t) GroupNonUniformIAdd 42 ExclusiveScan 470 + 472: 39(ptr) AccessChain 34(data) 468 37 38 + Store 472 471 + 473: 6(int) Load 8(invocation) + 474: 48(ptr) AccessChain 34(data) 46 37 + 475: 18(i8vec4) Load 474 + 476: 47(i8vec2) VectorShuffle 475 475 0 1 + 477: 47(i8vec2) GroupNonUniformIAdd 42 ExclusiveScan 476 + 478: 39(ptr) AccessChain 34(data) 473 37 38 + 479: 17(int8_t) CompositeExtract 477 0 + Store 478 479 + 480: 39(ptr) AccessChain 34(data) 473 37 55 + 481: 17(int8_t) CompositeExtract 477 1 + Store 480 481 + 482: 6(int) Load 8(invocation) + 483: 48(ptr) AccessChain 34(data) 59 37 + 484: 18(i8vec4) Load 483 + 485: 60(i8vec3) VectorShuffle 484 484 0 1 2 + 486: 60(i8vec3) GroupNonUniformIAdd 42 ExclusiveScan 485 + 487: 39(ptr) AccessChain 34(data) 482 37 38 + 488: 17(int8_t) CompositeExtract 486 0 + Store 487 488 + 489: 39(ptr) AccessChain 34(data) 482 37 55 + 490: 17(int8_t) CompositeExtract 486 1 + Store 489 490 + 491: 39(ptr) AccessChain 34(data) 482 37 69 + 492: 17(int8_t) CompositeExtract 486 2 + Store 491 492 493: 6(int) Load 8(invocation) - 494: 48(ptr) AccessChain 34(data) 46 37 + 494: 48(ptr) AccessChain 34(data) 73 37 495: 18(i8vec4) Load 494 - 496: 47(i8vec2) VectorShuffle 495 495 0 1 - 497: 47(i8vec2) GroupNonUniformSMax 42 ExclusiveScan 496 - 498: 48(ptr) AccessChain 34(data) 493 37 - 499: 18(i8vec4) Load 498 - 500: 18(i8vec4) VectorShuffle 499 497 4 5 2 3 - Store 498 500 - 501: 6(int) Load 8(invocation) - 502: 48(ptr) AccessChain 34(data) 57 37 - 503: 18(i8vec4) Load 502 - 504: 58(i8vec3) VectorShuffle 503 503 0 1 2 - 505: 58(i8vec3) GroupNonUniformSMax 42 ExclusiveScan 504 - 506: 48(ptr) AccessChain 34(data) 501 37 - 507: 18(i8vec4) Load 506 - 508: 18(i8vec4) VectorShuffle 507 505 4 5 6 3 - Store 506 508 - 509: 6(int) Load 8(invocation) - 510: 48(ptr) AccessChain 34(data) 67 37 - 511: 18(i8vec4) Load 510 - 512: 18(i8vec4) GroupNonUniformSMax 42 ExclusiveScan 511 - 513: 48(ptr) AccessChain 34(data) 509 37 - Store 513 512 - 514: 6(int) Load 8(invocation) - 515: 39(ptr) AccessChain 34(data) 37 37 38 - 516: 17(int8_t) Load 515 - 517: 17(int8_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 516 - 518: 39(ptr) AccessChain 34(data) 514 37 38 - Store 518 517 - 519: 6(int) Load 8(invocation) - 520: 48(ptr) AccessChain 34(data) 46 37 - 521: 18(i8vec4) Load 520 - 522: 47(i8vec2) VectorShuffle 521 521 0 1 - 523: 47(i8vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 522 - 524: 48(ptr) AccessChain 34(data) 519 37 + 496: 18(i8vec4) GroupNonUniformIAdd 42 ExclusiveScan 495 + 497: 48(ptr) AccessChain 34(data) 493 37 + Store 497 496 + 498: 6(int) Load 8(invocation) + 499: 39(ptr) AccessChain 34(data) 37 37 38 + 500: 17(int8_t) Load 499 + 501: 17(int8_t) GroupNonUniformIMul 42 ExclusiveScan 500 + 502: 39(ptr) AccessChain 34(data) 498 37 38 + Store 502 501 + 503: 6(int) Load 8(invocation) + 504: 48(ptr) AccessChain 34(data) 46 37 + 505: 18(i8vec4) Load 504 + 506: 47(i8vec2) VectorShuffle 505 505 0 1 + 507: 47(i8vec2) GroupNonUniformIMul 42 ExclusiveScan 506 + 508: 39(ptr) AccessChain 34(data) 503 37 38 + 509: 17(int8_t) CompositeExtract 507 0 + Store 508 509 + 510: 39(ptr) AccessChain 34(data) 503 37 55 + 511: 17(int8_t) CompositeExtract 507 1 + Store 510 511 + 512: 6(int) Load 8(invocation) + 513: 48(ptr) AccessChain 34(data) 59 37 + 514: 18(i8vec4) Load 513 + 515: 60(i8vec3) VectorShuffle 514 514 0 1 2 + 516: 60(i8vec3) GroupNonUniformIMul 42 ExclusiveScan 515 + 517: 39(ptr) AccessChain 34(data) 512 37 38 + 518: 17(int8_t) CompositeExtract 516 0 + Store 517 518 + 519: 39(ptr) AccessChain 34(data) 512 37 55 + 520: 17(int8_t) CompositeExtract 516 1 + Store 519 520 + 521: 39(ptr) AccessChain 34(data) 512 37 69 + 522: 17(int8_t) CompositeExtract 516 2 + Store 521 522 + 523: 6(int) Load 8(invocation) + 524: 48(ptr) AccessChain 34(data) 73 37 525: 18(i8vec4) Load 524 - 526: 18(i8vec4) VectorShuffle 525 523 4 5 2 3 - Store 524 526 - 527: 6(int) Load 8(invocation) - 528: 48(ptr) AccessChain 34(data) 57 37 - 529: 18(i8vec4) Load 528 - 530: 58(i8vec3) VectorShuffle 529 529 0 1 2 - 531: 58(i8vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 530 - 532: 48(ptr) AccessChain 34(data) 527 37 - 533: 18(i8vec4) Load 532 - 534: 18(i8vec4) VectorShuffle 533 531 4 5 6 3 - Store 532 534 - 535: 6(int) Load 8(invocation) - 536: 48(ptr) AccessChain 34(data) 67 37 - 537: 18(i8vec4) Load 536 - 538: 18(i8vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 537 - 539: 48(ptr) AccessChain 34(data) 535 37 - Store 539 538 - 540: 6(int) Load 8(invocation) - 541: 39(ptr) AccessChain 34(data) 37 37 38 - 542: 17(int8_t) Load 541 - 543: 17(int8_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 542 - 544: 39(ptr) AccessChain 34(data) 540 37 38 - Store 544 543 - 545: 6(int) Load 8(invocation) - 546: 48(ptr) AccessChain 34(data) 46 37 - 547: 18(i8vec4) Load 546 - 548: 47(i8vec2) VectorShuffle 547 547 0 1 - 549: 47(i8vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 548 - 550: 48(ptr) AccessChain 34(data) 545 37 - 551: 18(i8vec4) Load 550 - 552: 18(i8vec4) VectorShuffle 551 549 4 5 2 3 - Store 550 552 + 526: 18(i8vec4) GroupNonUniformIMul 42 ExclusiveScan 525 + 527: 48(ptr) AccessChain 34(data) 523 37 + Store 527 526 + 528: 6(int) Load 8(invocation) + 529: 39(ptr) AccessChain 34(data) 37 37 38 + 530: 17(int8_t) Load 529 + 531: 17(int8_t) GroupNonUniformSMin 42 ExclusiveScan 530 + 532: 39(ptr) AccessChain 34(data) 528 37 38 + Store 532 531 + 533: 6(int) Load 8(invocation) + 534: 48(ptr) AccessChain 34(data) 46 37 + 535: 18(i8vec4) Load 534 + 536: 47(i8vec2) VectorShuffle 535 535 0 1 + 537: 47(i8vec2) GroupNonUniformSMin 42 ExclusiveScan 536 + 538: 39(ptr) AccessChain 34(data) 533 37 38 + 539: 17(int8_t) CompositeExtract 537 0 + Store 538 539 + 540: 39(ptr) AccessChain 34(data) 533 37 55 + 541: 17(int8_t) CompositeExtract 537 1 + Store 540 541 + 542: 6(int) Load 8(invocation) + 543: 48(ptr) AccessChain 34(data) 59 37 + 544: 18(i8vec4) Load 543 + 545: 60(i8vec3) VectorShuffle 544 544 0 1 2 + 546: 60(i8vec3) GroupNonUniformSMin 42 ExclusiveScan 545 + 547: 39(ptr) AccessChain 34(data) 542 37 38 + 548: 17(int8_t) CompositeExtract 546 0 + Store 547 548 + 549: 39(ptr) AccessChain 34(data) 542 37 55 + 550: 17(int8_t) CompositeExtract 546 1 + Store 549 550 + 551: 39(ptr) AccessChain 34(data) 542 37 69 + 552: 17(int8_t) CompositeExtract 546 2 + Store 551 552 553: 6(int) Load 8(invocation) - 554: 48(ptr) AccessChain 34(data) 57 37 + 554: 48(ptr) AccessChain 34(data) 73 37 555: 18(i8vec4) Load 554 - 556: 58(i8vec3) VectorShuffle 555 555 0 1 2 - 557: 58(i8vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 556 - 558: 48(ptr) AccessChain 34(data) 553 37 - 559: 18(i8vec4) Load 558 - 560: 18(i8vec4) VectorShuffle 559 557 4 5 6 3 - Store 558 560 - 561: 6(int) Load 8(invocation) - 562: 48(ptr) AccessChain 34(data) 67 37 - 563: 18(i8vec4) Load 562 - 564: 18(i8vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 563 - 565: 48(ptr) AccessChain 34(data) 561 37 - Store 565 564 - 566: 6(int) Load 8(invocation) - 567: 39(ptr) AccessChain 34(data) 37 37 38 - 568: 17(int8_t) Load 567 - 569: 17(int8_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 568 - 570: 39(ptr) AccessChain 34(data) 566 37 38 - Store 570 569 - 571: 6(int) Load 8(invocation) - 572: 48(ptr) AccessChain 34(data) 46 37 - 573: 18(i8vec4) Load 572 - 574: 47(i8vec2) VectorShuffle 573 573 0 1 - 575: 47(i8vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 574 - 576: 48(ptr) AccessChain 34(data) 571 37 - 577: 18(i8vec4) Load 576 - 578: 18(i8vec4) VectorShuffle 577 575 4 5 2 3 - Store 576 578 - 579: 6(int) Load 8(invocation) - 580: 48(ptr) AccessChain 34(data) 57 37 - 581: 18(i8vec4) Load 580 - 582: 58(i8vec3) VectorShuffle 581 581 0 1 2 - 583: 58(i8vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 582 - 584: 48(ptr) AccessChain 34(data) 579 37 + 556: 18(i8vec4) GroupNonUniformSMin 42 ExclusiveScan 555 + 557: 48(ptr) AccessChain 34(data) 553 37 + Store 557 556 + 558: 6(int) Load 8(invocation) + 559: 39(ptr) AccessChain 34(data) 37 37 38 + 560: 17(int8_t) Load 559 + 561: 17(int8_t) GroupNonUniformSMax 42 ExclusiveScan 560 + 562: 39(ptr) AccessChain 34(data) 558 37 38 + Store 562 561 + 563: 6(int) Load 8(invocation) + 564: 48(ptr) AccessChain 34(data) 46 37 + 565: 18(i8vec4) Load 564 + 566: 47(i8vec2) VectorShuffle 565 565 0 1 + 567: 47(i8vec2) GroupNonUniformSMax 42 ExclusiveScan 566 + 568: 39(ptr) AccessChain 34(data) 563 37 38 + 569: 17(int8_t) CompositeExtract 567 0 + Store 568 569 + 570: 39(ptr) AccessChain 34(data) 563 37 55 + 571: 17(int8_t) CompositeExtract 567 1 + Store 570 571 + 572: 6(int) Load 8(invocation) + 573: 48(ptr) AccessChain 34(data) 59 37 + 574: 18(i8vec4) Load 573 + 575: 60(i8vec3) VectorShuffle 574 574 0 1 2 + 576: 60(i8vec3) GroupNonUniformSMax 42 ExclusiveScan 575 + 577: 39(ptr) AccessChain 34(data) 572 37 38 + 578: 17(int8_t) CompositeExtract 576 0 + Store 577 578 + 579: 39(ptr) AccessChain 34(data) 572 37 55 + 580: 17(int8_t) CompositeExtract 576 1 + Store 579 580 + 581: 39(ptr) AccessChain 34(data) 572 37 69 + 582: 17(int8_t) CompositeExtract 576 2 + Store 581 582 + 583: 6(int) Load 8(invocation) + 584: 48(ptr) AccessChain 34(data) 73 37 585: 18(i8vec4) Load 584 - 586: 18(i8vec4) VectorShuffle 585 583 4 5 6 3 - Store 584 586 - 587: 6(int) Load 8(invocation) - 588: 48(ptr) AccessChain 34(data) 67 37 - 589: 18(i8vec4) Load 588 - 590: 18(i8vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 589 - 591: 48(ptr) AccessChain 34(data) 587 37 - Store 591 590 - 592: 6(int) Load 8(invocation) - 594: 593(ptr) AccessChain 34(data) 37 46 38 - 595: 19(int8_t) Load 594 - 596: 19(int8_t) GroupNonUniformIAdd 42 Reduce 595 - 597: 593(ptr) AccessChain 34(data) 592 46 38 - Store 597 596 - 598: 6(int) Load 8(invocation) - 601: 600(ptr) AccessChain 34(data) 46 46 - 602: 20(i8vec4) Load 601 - 603: 599(i8vec2) VectorShuffle 602 602 0 1 - 604: 599(i8vec2) GroupNonUniformIAdd 42 Reduce 603 - 605: 600(ptr) AccessChain 34(data) 598 46 - 606: 20(i8vec4) Load 605 - 607: 20(i8vec4) VectorShuffle 606 604 4 5 2 3 - Store 605 607 - 608: 6(int) Load 8(invocation) - 610: 600(ptr) AccessChain 34(data) 57 46 - 611: 20(i8vec4) Load 610 - 612: 609(i8vec3) VectorShuffle 611 611 0 1 2 - 613: 609(i8vec3) GroupNonUniformIAdd 42 Reduce 612 - 614: 600(ptr) AccessChain 34(data) 608 46 - 615: 20(i8vec4) Load 614 - 616: 20(i8vec4) VectorShuffle 615 613 4 5 6 3 - Store 614 616 - 617: 6(int) Load 8(invocation) - 618: 600(ptr) AccessChain 34(data) 67 46 - 619: 20(i8vec4) Load 618 - 620: 20(i8vec4) GroupNonUniformIAdd 42 Reduce 619 - 621: 600(ptr) AccessChain 34(data) 617 46 - Store 621 620 - 622: 6(int) Load 8(invocation) - 623: 593(ptr) AccessChain 34(data) 37 46 38 - 624: 19(int8_t) Load 623 - 625: 19(int8_t) GroupNonUniformIMul 42 Reduce 624 - 626: 593(ptr) AccessChain 34(data) 622 46 38 - Store 626 625 - 627: 6(int) Load 8(invocation) - 628: 600(ptr) AccessChain 34(data) 46 46 - 629: 20(i8vec4) Load 628 - 630: 599(i8vec2) VectorShuffle 629 629 0 1 - 631: 599(i8vec2) GroupNonUniformIMul 42 Reduce 630 - 632: 600(ptr) AccessChain 34(data) 627 46 - 633: 20(i8vec4) Load 632 - 634: 20(i8vec4) VectorShuffle 633 631 4 5 2 3 - Store 632 634 - 635: 6(int) Load 8(invocation) - 636: 600(ptr) AccessChain 34(data) 57 46 - 637: 20(i8vec4) Load 636 - 638: 609(i8vec3) VectorShuffle 637 637 0 1 2 - 639: 609(i8vec3) GroupNonUniformIMul 42 Reduce 638 - 640: 600(ptr) AccessChain 34(data) 635 46 - 641: 20(i8vec4) Load 640 - 642: 20(i8vec4) VectorShuffle 641 639 4 5 6 3 - Store 640 642 + 586: 18(i8vec4) GroupNonUniformSMax 42 ExclusiveScan 585 + 587: 48(ptr) AccessChain 34(data) 583 37 + Store 587 586 + 588: 6(int) Load 8(invocation) + 589: 39(ptr) AccessChain 34(data) 37 37 38 + 590: 17(int8_t) Load 589 + 591: 17(int8_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 590 + 592: 39(ptr) AccessChain 34(data) 588 37 38 + Store 592 591 + 593: 6(int) Load 8(invocation) + 594: 48(ptr) AccessChain 34(data) 46 37 + 595: 18(i8vec4) Load 594 + 596: 47(i8vec2) VectorShuffle 595 595 0 1 + 597: 47(i8vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 596 + 598: 39(ptr) AccessChain 34(data) 593 37 38 + 599: 17(int8_t) CompositeExtract 597 0 + Store 598 599 + 600: 39(ptr) AccessChain 34(data) 593 37 55 + 601: 17(int8_t) CompositeExtract 597 1 + Store 600 601 + 602: 6(int) Load 8(invocation) + 603: 48(ptr) AccessChain 34(data) 59 37 + 604: 18(i8vec4) Load 603 + 605: 60(i8vec3) VectorShuffle 604 604 0 1 2 + 606: 60(i8vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 605 + 607: 39(ptr) AccessChain 34(data) 602 37 38 + 608: 17(int8_t) CompositeExtract 606 0 + Store 607 608 + 609: 39(ptr) AccessChain 34(data) 602 37 55 + 610: 17(int8_t) CompositeExtract 606 1 + Store 609 610 + 611: 39(ptr) AccessChain 34(data) 602 37 69 + 612: 17(int8_t) CompositeExtract 606 2 + Store 611 612 + 613: 6(int) Load 8(invocation) + 614: 48(ptr) AccessChain 34(data) 73 37 + 615: 18(i8vec4) Load 614 + 616: 18(i8vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 615 + 617: 48(ptr) AccessChain 34(data) 613 37 + Store 617 616 + 618: 6(int) Load 8(invocation) + 619: 39(ptr) AccessChain 34(data) 37 37 38 + 620: 17(int8_t) Load 619 + 621: 17(int8_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 620 + 622: 39(ptr) AccessChain 34(data) 618 37 38 + Store 622 621 + 623: 6(int) Load 8(invocation) + 624: 48(ptr) AccessChain 34(data) 46 37 + 625: 18(i8vec4) Load 624 + 626: 47(i8vec2) VectorShuffle 625 625 0 1 + 627: 47(i8vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 626 + 628: 39(ptr) AccessChain 34(data) 623 37 38 + 629: 17(int8_t) CompositeExtract 627 0 + Store 628 629 + 630: 39(ptr) AccessChain 34(data) 623 37 55 + 631: 17(int8_t) CompositeExtract 627 1 + Store 630 631 + 632: 6(int) Load 8(invocation) + 633: 48(ptr) AccessChain 34(data) 59 37 + 634: 18(i8vec4) Load 633 + 635: 60(i8vec3) VectorShuffle 634 634 0 1 2 + 636: 60(i8vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 635 + 637: 39(ptr) AccessChain 34(data) 632 37 38 + 638: 17(int8_t) CompositeExtract 636 0 + Store 637 638 + 639: 39(ptr) AccessChain 34(data) 632 37 55 + 640: 17(int8_t) CompositeExtract 636 1 + Store 639 640 + 641: 39(ptr) AccessChain 34(data) 632 37 69 + 642: 17(int8_t) CompositeExtract 636 2 + Store 641 642 643: 6(int) Load 8(invocation) - 644: 600(ptr) AccessChain 34(data) 67 46 - 645: 20(i8vec4) Load 644 - 646: 20(i8vec4) GroupNonUniformIMul 42 Reduce 645 - 647: 600(ptr) AccessChain 34(data) 643 46 + 644: 48(ptr) AccessChain 34(data) 73 37 + 645: 18(i8vec4) Load 644 + 646: 18(i8vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 645 + 647: 48(ptr) AccessChain 34(data) 643 37 Store 647 646 648: 6(int) Load 8(invocation) - 649: 593(ptr) AccessChain 34(data) 37 46 38 - 650: 19(int8_t) Load 649 - 651: 19(int8_t) GroupNonUniformUMin 42 Reduce 650 - 652: 593(ptr) AccessChain 34(data) 648 46 38 + 649: 39(ptr) AccessChain 34(data) 37 37 38 + 650: 17(int8_t) Load 649 + 651: 17(int8_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 650 + 652: 39(ptr) AccessChain 34(data) 648 37 38 Store 652 651 653: 6(int) Load 8(invocation) - 654: 600(ptr) AccessChain 34(data) 46 46 - 655: 20(i8vec4) Load 654 - 656: 599(i8vec2) VectorShuffle 655 655 0 1 - 657: 599(i8vec2) GroupNonUniformUMin 42 Reduce 656 - 658: 600(ptr) AccessChain 34(data) 653 46 - 659: 20(i8vec4) Load 658 - 660: 20(i8vec4) VectorShuffle 659 657 4 5 2 3 - Store 658 660 - 661: 6(int) Load 8(invocation) - 662: 600(ptr) AccessChain 34(data) 57 46 - 663: 20(i8vec4) Load 662 - 664: 609(i8vec3) VectorShuffle 663 663 0 1 2 - 665: 609(i8vec3) GroupNonUniformUMin 42 Reduce 664 - 666: 600(ptr) AccessChain 34(data) 661 46 - 667: 20(i8vec4) Load 666 - 668: 20(i8vec4) VectorShuffle 667 665 4 5 6 3 - Store 666 668 - 669: 6(int) Load 8(invocation) - 670: 600(ptr) AccessChain 34(data) 67 46 - 671: 20(i8vec4) Load 670 - 672: 20(i8vec4) GroupNonUniformUMin 42 Reduce 671 - 673: 600(ptr) AccessChain 34(data) 669 46 - Store 673 672 - 674: 6(int) Load 8(invocation) - 675: 593(ptr) AccessChain 34(data) 37 46 38 - 676: 19(int8_t) Load 675 - 677: 19(int8_t) GroupNonUniformUMax 42 Reduce 676 - 678: 593(ptr) AccessChain 34(data) 674 46 38 - Store 678 677 - 679: 6(int) Load 8(invocation) - 680: 600(ptr) AccessChain 34(data) 46 46 - 681: 20(i8vec4) Load 680 - 682: 599(i8vec2) VectorShuffle 681 681 0 1 - 683: 599(i8vec2) GroupNonUniformUMax 42 Reduce 682 - 684: 600(ptr) AccessChain 34(data) 679 46 - 685: 20(i8vec4) Load 684 - 686: 20(i8vec4) VectorShuffle 685 683 4 5 2 3 - Store 684 686 - 687: 6(int) Load 8(invocation) - 688: 600(ptr) AccessChain 34(data) 57 46 - 689: 20(i8vec4) Load 688 - 690: 609(i8vec3) VectorShuffle 689 689 0 1 2 - 691: 609(i8vec3) GroupNonUniformUMax 42 Reduce 690 - 692: 600(ptr) AccessChain 34(data) 687 46 - 693: 20(i8vec4) Load 692 - 694: 20(i8vec4) VectorShuffle 693 691 4 5 6 3 - Store 692 694 + 654: 48(ptr) AccessChain 34(data) 46 37 + 655: 18(i8vec4) Load 654 + 656: 47(i8vec2) VectorShuffle 655 655 0 1 + 657: 47(i8vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 656 + 658: 39(ptr) AccessChain 34(data) 653 37 38 + 659: 17(int8_t) CompositeExtract 657 0 + Store 658 659 + 660: 39(ptr) AccessChain 34(data) 653 37 55 + 661: 17(int8_t) CompositeExtract 657 1 + Store 660 661 + 662: 6(int) Load 8(invocation) + 663: 48(ptr) AccessChain 34(data) 59 37 + 664: 18(i8vec4) Load 663 + 665: 60(i8vec3) VectorShuffle 664 664 0 1 2 + 666: 60(i8vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 665 + 667: 39(ptr) AccessChain 34(data) 662 37 38 + 668: 17(int8_t) CompositeExtract 666 0 + Store 667 668 + 669: 39(ptr) AccessChain 34(data) 662 37 55 + 670: 17(int8_t) CompositeExtract 666 1 + Store 669 670 + 671: 39(ptr) AccessChain 34(data) 662 37 69 + 672: 17(int8_t) CompositeExtract 666 2 + Store 671 672 + 673: 6(int) Load 8(invocation) + 674: 48(ptr) AccessChain 34(data) 73 37 + 675: 18(i8vec4) Load 674 + 676: 18(i8vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 675 + 677: 48(ptr) AccessChain 34(data) 673 37 + Store 677 676 + 678: 6(int) Load 8(invocation) + 680: 679(ptr) AccessChain 34(data) 37 46 38 + 681: 19(int8_t) Load 680 + 682: 19(int8_t) GroupNonUniformIAdd 42 Reduce 681 + 683: 679(ptr) AccessChain 34(data) 678 46 38 + Store 683 682 + 684: 6(int) Load 8(invocation) + 687: 686(ptr) AccessChain 34(data) 46 46 + 688: 20(i8vec4) Load 687 + 689: 685(i8vec2) VectorShuffle 688 688 0 1 + 690: 685(i8vec2) GroupNonUniformIAdd 42 Reduce 689 + 691: 679(ptr) AccessChain 34(data) 684 46 38 + 692: 19(int8_t) CompositeExtract 690 0 + Store 691 692 + 693: 679(ptr) AccessChain 34(data) 684 46 55 + 694: 19(int8_t) CompositeExtract 690 1 + Store 693 694 695: 6(int) Load 8(invocation) - 696: 600(ptr) AccessChain 34(data) 67 46 - 697: 20(i8vec4) Load 696 - 698: 20(i8vec4) GroupNonUniformUMax 42 Reduce 697 - 699: 600(ptr) AccessChain 34(data) 695 46 - Store 699 698 - 700: 6(int) Load 8(invocation) - 701: 593(ptr) AccessChain 34(data) 37 46 38 - 702: 19(int8_t) Load 701 - 703: 19(int8_t) GroupNonUniformBitwiseAnd 42 Reduce 702 - 704: 593(ptr) AccessChain 34(data) 700 46 38 - Store 704 703 - 705: 6(int) Load 8(invocation) - 706: 600(ptr) AccessChain 34(data) 46 46 - 707: 20(i8vec4) Load 706 - 708: 599(i8vec2) VectorShuffle 707 707 0 1 - 709: 599(i8vec2) GroupNonUniformBitwiseAnd 42 Reduce 708 - 710: 600(ptr) AccessChain 34(data) 705 46 - 711: 20(i8vec4) Load 710 - 712: 20(i8vec4) VectorShuffle 711 709 4 5 2 3 - Store 710 712 - 713: 6(int) Load 8(invocation) - 714: 600(ptr) AccessChain 34(data) 57 46 - 715: 20(i8vec4) Load 714 - 716: 609(i8vec3) VectorShuffle 715 715 0 1 2 - 717: 609(i8vec3) GroupNonUniformBitwiseAnd 42 Reduce 716 - 718: 600(ptr) AccessChain 34(data) 713 46 + 697: 686(ptr) AccessChain 34(data) 59 46 + 698: 20(i8vec4) Load 697 + 699: 696(i8vec3) VectorShuffle 698 698 0 1 2 + 700: 696(i8vec3) GroupNonUniformIAdd 42 Reduce 699 + 701: 679(ptr) AccessChain 34(data) 695 46 38 + 702: 19(int8_t) CompositeExtract 700 0 + Store 701 702 + 703: 679(ptr) AccessChain 34(data) 695 46 55 + 704: 19(int8_t) CompositeExtract 700 1 + Store 703 704 + 705: 679(ptr) AccessChain 34(data) 695 46 69 + 706: 19(int8_t) CompositeExtract 700 2 + Store 705 706 + 707: 6(int) Load 8(invocation) + 708: 686(ptr) AccessChain 34(data) 73 46 + 709: 20(i8vec4) Load 708 + 710: 20(i8vec4) GroupNonUniformIAdd 42 Reduce 709 + 711: 686(ptr) AccessChain 34(data) 707 46 + Store 711 710 + 712: 6(int) Load 8(invocation) + 713: 679(ptr) AccessChain 34(data) 37 46 38 + 714: 19(int8_t) Load 713 + 715: 19(int8_t) GroupNonUniformIMul 42 Reduce 714 + 716: 679(ptr) AccessChain 34(data) 712 46 38 + Store 716 715 + 717: 6(int) Load 8(invocation) + 718: 686(ptr) AccessChain 34(data) 46 46 719: 20(i8vec4) Load 718 - 720: 20(i8vec4) VectorShuffle 719 717 4 5 6 3 - Store 718 720 - 721: 6(int) Load 8(invocation) - 722: 600(ptr) AccessChain 34(data) 67 46 - 723: 20(i8vec4) Load 722 - 724: 20(i8vec4) GroupNonUniformBitwiseAnd 42 Reduce 723 - 725: 600(ptr) AccessChain 34(data) 721 46 - Store 725 724 + 720: 685(i8vec2) VectorShuffle 719 719 0 1 + 721: 685(i8vec2) GroupNonUniformIMul 42 Reduce 720 + 722: 679(ptr) AccessChain 34(data) 717 46 38 + 723: 19(int8_t) CompositeExtract 721 0 + Store 722 723 + 724: 679(ptr) AccessChain 34(data) 717 46 55 + 725: 19(int8_t) CompositeExtract 721 1 + Store 724 725 726: 6(int) Load 8(invocation) - 727: 593(ptr) AccessChain 34(data) 37 46 38 - 728: 19(int8_t) Load 727 - 729: 19(int8_t) GroupNonUniformBitwiseOr 42 Reduce 728 - 730: 593(ptr) AccessChain 34(data) 726 46 38 - Store 730 729 - 731: 6(int) Load 8(invocation) - 732: 600(ptr) AccessChain 34(data) 46 46 - 733: 20(i8vec4) Load 732 - 734: 599(i8vec2) VectorShuffle 733 733 0 1 - 735: 599(i8vec2) GroupNonUniformBitwiseOr 42 Reduce 734 - 736: 600(ptr) AccessChain 34(data) 731 46 - 737: 20(i8vec4) Load 736 - 738: 20(i8vec4) VectorShuffle 737 735 4 5 2 3 - Store 736 738 - 739: 6(int) Load 8(invocation) - 740: 600(ptr) AccessChain 34(data) 57 46 - 741: 20(i8vec4) Load 740 - 742: 609(i8vec3) VectorShuffle 741 741 0 1 2 - 743: 609(i8vec3) GroupNonUniformBitwiseOr 42 Reduce 742 - 744: 600(ptr) AccessChain 34(data) 739 46 - 745: 20(i8vec4) Load 744 - 746: 20(i8vec4) VectorShuffle 745 743 4 5 6 3 - Store 744 746 + 727: 686(ptr) AccessChain 34(data) 59 46 + 728: 20(i8vec4) Load 727 + 729: 696(i8vec3) VectorShuffle 728 728 0 1 2 + 730: 696(i8vec3) GroupNonUniformIMul 42 Reduce 729 + 731: 679(ptr) AccessChain 34(data) 726 46 38 + 732: 19(int8_t) CompositeExtract 730 0 + Store 731 732 + 733: 679(ptr) AccessChain 34(data) 726 46 55 + 734: 19(int8_t) CompositeExtract 730 1 + Store 733 734 + 735: 679(ptr) AccessChain 34(data) 726 46 69 + 736: 19(int8_t) CompositeExtract 730 2 + Store 735 736 + 737: 6(int) Load 8(invocation) + 738: 686(ptr) AccessChain 34(data) 73 46 + 739: 20(i8vec4) Load 738 + 740: 20(i8vec4) GroupNonUniformIMul 42 Reduce 739 + 741: 686(ptr) AccessChain 34(data) 737 46 + Store 741 740 + 742: 6(int) Load 8(invocation) + 743: 679(ptr) AccessChain 34(data) 37 46 38 + 744: 19(int8_t) Load 743 + 745: 19(int8_t) GroupNonUniformUMin 42 Reduce 744 + 746: 679(ptr) AccessChain 34(data) 742 46 38 + Store 746 745 747: 6(int) Load 8(invocation) - 748: 600(ptr) AccessChain 34(data) 67 46 + 748: 686(ptr) AccessChain 34(data) 46 46 749: 20(i8vec4) Load 748 - 750: 20(i8vec4) GroupNonUniformBitwiseOr 42 Reduce 749 - 751: 600(ptr) AccessChain 34(data) 747 46 - Store 751 750 - 752: 6(int) Load 8(invocation) - 753: 593(ptr) AccessChain 34(data) 37 46 38 - 754: 19(int8_t) Load 753 - 755: 19(int8_t) GroupNonUniformBitwiseXor 42 Reduce 754 - 756: 593(ptr) AccessChain 34(data) 752 46 38 - Store 756 755 - 757: 6(int) Load 8(invocation) - 758: 600(ptr) AccessChain 34(data) 46 46 - 759: 20(i8vec4) Load 758 - 760: 599(i8vec2) VectorShuffle 759 759 0 1 - 761: 599(i8vec2) GroupNonUniformBitwiseXor 42 Reduce 760 - 762: 600(ptr) AccessChain 34(data) 757 46 - 763: 20(i8vec4) Load 762 - 764: 20(i8vec4) VectorShuffle 763 761 4 5 2 3 - Store 762 764 - 765: 6(int) Load 8(invocation) - 766: 600(ptr) AccessChain 34(data) 57 46 - 767: 20(i8vec4) Load 766 - 768: 609(i8vec3) VectorShuffle 767 767 0 1 2 - 769: 609(i8vec3) GroupNonUniformBitwiseXor 42 Reduce 768 - 770: 600(ptr) AccessChain 34(data) 765 46 - 771: 20(i8vec4) Load 770 - 772: 20(i8vec4) VectorShuffle 771 769 4 5 6 3 - Store 770 772 - 773: 6(int) Load 8(invocation) - 774: 600(ptr) AccessChain 34(data) 67 46 - 775: 20(i8vec4) Load 774 - 776: 20(i8vec4) GroupNonUniformBitwiseXor 42 Reduce 775 - 777: 600(ptr) AccessChain 34(data) 773 46 - Store 777 776 - 778: 6(int) Load 8(invocation) - 779: 593(ptr) AccessChain 34(data) 37 46 38 - 780: 19(int8_t) Load 779 - 781: 19(int8_t) GroupNonUniformIAdd 42 InclusiveScan 780 - 782: 593(ptr) AccessChain 34(data) 778 46 38 - Store 782 781 - 783: 6(int) Load 8(invocation) - 784: 600(ptr) AccessChain 34(data) 46 46 - 785: 20(i8vec4) Load 784 - 786: 599(i8vec2) VectorShuffle 785 785 0 1 - 787: 599(i8vec2) GroupNonUniformIAdd 42 InclusiveScan 786 - 788: 600(ptr) AccessChain 34(data) 783 46 - 789: 20(i8vec4) Load 788 - 790: 20(i8vec4) VectorShuffle 789 787 4 5 2 3 - Store 788 790 - 791: 6(int) Load 8(invocation) - 792: 600(ptr) AccessChain 34(data) 57 46 - 793: 20(i8vec4) Load 792 - 794: 609(i8vec3) VectorShuffle 793 793 0 1 2 - 795: 609(i8vec3) GroupNonUniformIAdd 42 InclusiveScan 794 - 796: 600(ptr) AccessChain 34(data) 791 46 - 797: 20(i8vec4) Load 796 - 798: 20(i8vec4) VectorShuffle 797 795 4 5 6 3 - Store 796 798 - 799: 6(int) Load 8(invocation) - 800: 600(ptr) AccessChain 34(data) 67 46 - 801: 20(i8vec4) Load 800 - 802: 20(i8vec4) GroupNonUniformIAdd 42 InclusiveScan 801 - 803: 600(ptr) AccessChain 34(data) 799 46 - Store 803 802 - 804: 6(int) Load 8(invocation) - 805: 593(ptr) AccessChain 34(data) 37 46 38 - 806: 19(int8_t) Load 805 - 807: 19(int8_t) GroupNonUniformIMul 42 InclusiveScan 806 - 808: 593(ptr) AccessChain 34(data) 804 46 38 - Store 808 807 - 809: 6(int) Load 8(invocation) - 810: 600(ptr) AccessChain 34(data) 46 46 - 811: 20(i8vec4) Load 810 - 812: 599(i8vec2) VectorShuffle 811 811 0 1 - 813: 599(i8vec2) GroupNonUniformIMul 42 InclusiveScan 812 - 814: 600(ptr) AccessChain 34(data) 809 46 - 815: 20(i8vec4) Load 814 - 816: 20(i8vec4) VectorShuffle 815 813 4 5 2 3 - Store 814 816 - 817: 6(int) Load 8(invocation) - 818: 600(ptr) AccessChain 34(data) 57 46 - 819: 20(i8vec4) Load 818 - 820: 609(i8vec3) VectorShuffle 819 819 0 1 2 - 821: 609(i8vec3) GroupNonUniformIMul 42 InclusiveScan 820 - 822: 600(ptr) AccessChain 34(data) 817 46 - 823: 20(i8vec4) Load 822 - 824: 20(i8vec4) VectorShuffle 823 821 4 5 6 3 - Store 822 824 - 825: 6(int) Load 8(invocation) - 826: 600(ptr) AccessChain 34(data) 67 46 - 827: 20(i8vec4) Load 826 - 828: 20(i8vec4) GroupNonUniformIMul 42 InclusiveScan 827 - 829: 600(ptr) AccessChain 34(data) 825 46 - Store 829 828 - 830: 6(int) Load 8(invocation) - 831: 593(ptr) AccessChain 34(data) 37 46 38 - 832: 19(int8_t) Load 831 - 833: 19(int8_t) GroupNonUniformUMin 42 InclusiveScan 832 - 834: 593(ptr) AccessChain 34(data) 830 46 38 - Store 834 833 - 835: 6(int) Load 8(invocation) - 836: 600(ptr) AccessChain 34(data) 46 46 - 837: 20(i8vec4) Load 836 - 838: 599(i8vec2) VectorShuffle 837 837 0 1 - 839: 599(i8vec2) GroupNonUniformUMin 42 InclusiveScan 838 - 840: 600(ptr) AccessChain 34(data) 835 46 - 841: 20(i8vec4) Load 840 - 842: 20(i8vec4) VectorShuffle 841 839 4 5 2 3 - Store 840 842 - 843: 6(int) Load 8(invocation) - 844: 600(ptr) AccessChain 34(data) 57 46 - 845: 20(i8vec4) Load 844 - 846: 609(i8vec3) VectorShuffle 845 845 0 1 2 - 847: 609(i8vec3) GroupNonUniformUMin 42 InclusiveScan 846 - 848: 600(ptr) AccessChain 34(data) 843 46 - 849: 20(i8vec4) Load 848 - 850: 20(i8vec4) VectorShuffle 849 847 4 5 6 3 - Store 848 850 - 851: 6(int) Load 8(invocation) - 852: 600(ptr) AccessChain 34(data) 67 46 - 853: 20(i8vec4) Load 852 - 854: 20(i8vec4) GroupNonUniformUMin 42 InclusiveScan 853 - 855: 600(ptr) AccessChain 34(data) 851 46 - Store 855 854 - 856: 6(int) Load 8(invocation) - 857: 593(ptr) AccessChain 34(data) 37 46 38 - 858: 19(int8_t) Load 857 - 859: 19(int8_t) GroupNonUniformUMax 42 InclusiveScan 858 - 860: 593(ptr) AccessChain 34(data) 856 46 38 - Store 860 859 - 861: 6(int) Load 8(invocation) - 862: 600(ptr) AccessChain 34(data) 46 46 - 863: 20(i8vec4) Load 862 - 864: 599(i8vec2) VectorShuffle 863 863 0 1 - 865: 599(i8vec2) GroupNonUniformUMax 42 InclusiveScan 864 - 866: 600(ptr) AccessChain 34(data) 861 46 - 867: 20(i8vec4) Load 866 - 868: 20(i8vec4) VectorShuffle 867 865 4 5 2 3 - Store 866 868 - 869: 6(int) Load 8(invocation) - 870: 600(ptr) AccessChain 34(data) 57 46 - 871: 20(i8vec4) Load 870 - 872: 609(i8vec3) VectorShuffle 871 871 0 1 2 - 873: 609(i8vec3) GroupNonUniformUMax 42 InclusiveScan 872 - 874: 600(ptr) AccessChain 34(data) 869 46 - 875: 20(i8vec4) Load 874 - 876: 20(i8vec4) VectorShuffle 875 873 4 5 6 3 - Store 874 876 - 877: 6(int) Load 8(invocation) - 878: 600(ptr) AccessChain 34(data) 67 46 - 879: 20(i8vec4) Load 878 - 880: 20(i8vec4) GroupNonUniformUMax 42 InclusiveScan 879 - 881: 600(ptr) AccessChain 34(data) 877 46 - Store 881 880 - 882: 6(int) Load 8(invocation) - 883: 593(ptr) AccessChain 34(data) 37 46 38 - 884: 19(int8_t) Load 883 - 885: 19(int8_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 884 - 886: 593(ptr) AccessChain 34(data) 882 46 38 - Store 886 885 + 750: 685(i8vec2) VectorShuffle 749 749 0 1 + 751: 685(i8vec2) GroupNonUniformUMin 42 Reduce 750 + 752: 679(ptr) AccessChain 34(data) 747 46 38 + 753: 19(int8_t) CompositeExtract 751 0 + Store 752 753 + 754: 679(ptr) AccessChain 34(data) 747 46 55 + 755: 19(int8_t) CompositeExtract 751 1 + Store 754 755 + 756: 6(int) Load 8(invocation) + 757: 686(ptr) AccessChain 34(data) 59 46 + 758: 20(i8vec4) Load 757 + 759: 696(i8vec3) VectorShuffle 758 758 0 1 2 + 760: 696(i8vec3) GroupNonUniformUMin 42 Reduce 759 + 761: 679(ptr) AccessChain 34(data) 756 46 38 + 762: 19(int8_t) CompositeExtract 760 0 + Store 761 762 + 763: 679(ptr) AccessChain 34(data) 756 46 55 + 764: 19(int8_t) CompositeExtract 760 1 + Store 763 764 + 765: 679(ptr) AccessChain 34(data) 756 46 69 + 766: 19(int8_t) CompositeExtract 760 2 + Store 765 766 + 767: 6(int) Load 8(invocation) + 768: 686(ptr) AccessChain 34(data) 73 46 + 769: 20(i8vec4) Load 768 + 770: 20(i8vec4) GroupNonUniformUMin 42 Reduce 769 + 771: 686(ptr) AccessChain 34(data) 767 46 + Store 771 770 + 772: 6(int) Load 8(invocation) + 773: 679(ptr) AccessChain 34(data) 37 46 38 + 774: 19(int8_t) Load 773 + 775: 19(int8_t) GroupNonUniformUMax 42 Reduce 774 + 776: 679(ptr) AccessChain 34(data) 772 46 38 + Store 776 775 + 777: 6(int) Load 8(invocation) + 778: 686(ptr) AccessChain 34(data) 46 46 + 779: 20(i8vec4) Load 778 + 780: 685(i8vec2) VectorShuffle 779 779 0 1 + 781: 685(i8vec2) GroupNonUniformUMax 42 Reduce 780 + 782: 679(ptr) AccessChain 34(data) 777 46 38 + 783: 19(int8_t) CompositeExtract 781 0 + Store 782 783 + 784: 679(ptr) AccessChain 34(data) 777 46 55 + 785: 19(int8_t) CompositeExtract 781 1 + Store 784 785 + 786: 6(int) Load 8(invocation) + 787: 686(ptr) AccessChain 34(data) 59 46 + 788: 20(i8vec4) Load 787 + 789: 696(i8vec3) VectorShuffle 788 788 0 1 2 + 790: 696(i8vec3) GroupNonUniformUMax 42 Reduce 789 + 791: 679(ptr) AccessChain 34(data) 786 46 38 + 792: 19(int8_t) CompositeExtract 790 0 + Store 791 792 + 793: 679(ptr) AccessChain 34(data) 786 46 55 + 794: 19(int8_t) CompositeExtract 790 1 + Store 793 794 + 795: 679(ptr) AccessChain 34(data) 786 46 69 + 796: 19(int8_t) CompositeExtract 790 2 + Store 795 796 + 797: 6(int) Load 8(invocation) + 798: 686(ptr) AccessChain 34(data) 73 46 + 799: 20(i8vec4) Load 798 + 800: 20(i8vec4) GroupNonUniformUMax 42 Reduce 799 + 801: 686(ptr) AccessChain 34(data) 797 46 + Store 801 800 + 802: 6(int) Load 8(invocation) + 803: 679(ptr) AccessChain 34(data) 37 46 38 + 804: 19(int8_t) Load 803 + 805: 19(int8_t) GroupNonUniformBitwiseAnd 42 Reduce 804 + 806: 679(ptr) AccessChain 34(data) 802 46 38 + Store 806 805 + 807: 6(int) Load 8(invocation) + 808: 686(ptr) AccessChain 34(data) 46 46 + 809: 20(i8vec4) Load 808 + 810: 685(i8vec2) VectorShuffle 809 809 0 1 + 811: 685(i8vec2) GroupNonUniformBitwiseAnd 42 Reduce 810 + 812: 679(ptr) AccessChain 34(data) 807 46 38 + 813: 19(int8_t) CompositeExtract 811 0 + Store 812 813 + 814: 679(ptr) AccessChain 34(data) 807 46 55 + 815: 19(int8_t) CompositeExtract 811 1 + Store 814 815 + 816: 6(int) Load 8(invocation) + 817: 686(ptr) AccessChain 34(data) 59 46 + 818: 20(i8vec4) Load 817 + 819: 696(i8vec3) VectorShuffle 818 818 0 1 2 + 820: 696(i8vec3) GroupNonUniformBitwiseAnd 42 Reduce 819 + 821: 679(ptr) AccessChain 34(data) 816 46 38 + 822: 19(int8_t) CompositeExtract 820 0 + Store 821 822 + 823: 679(ptr) AccessChain 34(data) 816 46 55 + 824: 19(int8_t) CompositeExtract 820 1 + Store 823 824 + 825: 679(ptr) AccessChain 34(data) 816 46 69 + 826: 19(int8_t) CompositeExtract 820 2 + Store 825 826 + 827: 6(int) Load 8(invocation) + 828: 686(ptr) AccessChain 34(data) 73 46 + 829: 20(i8vec4) Load 828 + 830: 20(i8vec4) GroupNonUniformBitwiseAnd 42 Reduce 829 + 831: 686(ptr) AccessChain 34(data) 827 46 + Store 831 830 + 832: 6(int) Load 8(invocation) + 833: 679(ptr) AccessChain 34(data) 37 46 38 + 834: 19(int8_t) Load 833 + 835: 19(int8_t) GroupNonUniformBitwiseOr 42 Reduce 834 + 836: 679(ptr) AccessChain 34(data) 832 46 38 + Store 836 835 + 837: 6(int) Load 8(invocation) + 838: 686(ptr) AccessChain 34(data) 46 46 + 839: 20(i8vec4) Load 838 + 840: 685(i8vec2) VectorShuffle 839 839 0 1 + 841: 685(i8vec2) GroupNonUniformBitwiseOr 42 Reduce 840 + 842: 679(ptr) AccessChain 34(data) 837 46 38 + 843: 19(int8_t) CompositeExtract 841 0 + Store 842 843 + 844: 679(ptr) AccessChain 34(data) 837 46 55 + 845: 19(int8_t) CompositeExtract 841 1 + Store 844 845 + 846: 6(int) Load 8(invocation) + 847: 686(ptr) AccessChain 34(data) 59 46 + 848: 20(i8vec4) Load 847 + 849: 696(i8vec3) VectorShuffle 848 848 0 1 2 + 850: 696(i8vec3) GroupNonUniformBitwiseOr 42 Reduce 849 + 851: 679(ptr) AccessChain 34(data) 846 46 38 + 852: 19(int8_t) CompositeExtract 850 0 + Store 851 852 + 853: 679(ptr) AccessChain 34(data) 846 46 55 + 854: 19(int8_t) CompositeExtract 850 1 + Store 853 854 + 855: 679(ptr) AccessChain 34(data) 846 46 69 + 856: 19(int8_t) CompositeExtract 850 2 + Store 855 856 + 857: 6(int) Load 8(invocation) + 858: 686(ptr) AccessChain 34(data) 73 46 + 859: 20(i8vec4) Load 858 + 860: 20(i8vec4) GroupNonUniformBitwiseOr 42 Reduce 859 + 861: 686(ptr) AccessChain 34(data) 857 46 + Store 861 860 + 862: 6(int) Load 8(invocation) + 863: 679(ptr) AccessChain 34(data) 37 46 38 + 864: 19(int8_t) Load 863 + 865: 19(int8_t) GroupNonUniformBitwiseXor 42 Reduce 864 + 866: 679(ptr) AccessChain 34(data) 862 46 38 + Store 866 865 + 867: 6(int) Load 8(invocation) + 868: 686(ptr) AccessChain 34(data) 46 46 + 869: 20(i8vec4) Load 868 + 870: 685(i8vec2) VectorShuffle 869 869 0 1 + 871: 685(i8vec2) GroupNonUniformBitwiseXor 42 Reduce 870 + 872: 679(ptr) AccessChain 34(data) 867 46 38 + 873: 19(int8_t) CompositeExtract 871 0 + Store 872 873 + 874: 679(ptr) AccessChain 34(data) 867 46 55 + 875: 19(int8_t) CompositeExtract 871 1 + Store 874 875 + 876: 6(int) Load 8(invocation) + 877: 686(ptr) AccessChain 34(data) 59 46 + 878: 20(i8vec4) Load 877 + 879: 696(i8vec3) VectorShuffle 878 878 0 1 2 + 880: 696(i8vec3) GroupNonUniformBitwiseXor 42 Reduce 879 + 881: 679(ptr) AccessChain 34(data) 876 46 38 + 882: 19(int8_t) CompositeExtract 880 0 + Store 881 882 + 883: 679(ptr) AccessChain 34(data) 876 46 55 + 884: 19(int8_t) CompositeExtract 880 1 + Store 883 884 + 885: 679(ptr) AccessChain 34(data) 876 46 69 + 886: 19(int8_t) CompositeExtract 880 2 + Store 885 886 887: 6(int) Load 8(invocation) - 888: 600(ptr) AccessChain 34(data) 46 46 + 888: 686(ptr) AccessChain 34(data) 73 46 889: 20(i8vec4) Load 888 - 890: 599(i8vec2) VectorShuffle 889 889 0 1 - 891: 599(i8vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 890 - 892: 600(ptr) AccessChain 34(data) 887 46 - 893: 20(i8vec4) Load 892 - 894: 20(i8vec4) VectorShuffle 893 891 4 5 2 3 - Store 892 894 - 895: 6(int) Load 8(invocation) - 896: 600(ptr) AccessChain 34(data) 57 46 - 897: 20(i8vec4) Load 896 - 898: 609(i8vec3) VectorShuffle 897 897 0 1 2 - 899: 609(i8vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 898 - 900: 600(ptr) AccessChain 34(data) 895 46 - 901: 20(i8vec4) Load 900 - 902: 20(i8vec4) VectorShuffle 901 899 4 5 6 3 - Store 900 902 - 903: 6(int) Load 8(invocation) - 904: 600(ptr) AccessChain 34(data) 67 46 - 905: 20(i8vec4) Load 904 - 906: 20(i8vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 905 - 907: 600(ptr) AccessChain 34(data) 903 46 - Store 907 906 - 908: 6(int) Load 8(invocation) - 909: 593(ptr) AccessChain 34(data) 37 46 38 - 910: 19(int8_t) Load 909 - 911: 19(int8_t) GroupNonUniformBitwiseOr 42 InclusiveScan 910 - 912: 593(ptr) AccessChain 34(data) 908 46 38 - Store 912 911 - 913: 6(int) Load 8(invocation) - 914: 600(ptr) AccessChain 34(data) 46 46 - 915: 20(i8vec4) Load 914 - 916: 599(i8vec2) VectorShuffle 915 915 0 1 - 917: 599(i8vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 916 - 918: 600(ptr) AccessChain 34(data) 913 46 + 890: 20(i8vec4) GroupNonUniformBitwiseXor 42 Reduce 889 + 891: 686(ptr) AccessChain 34(data) 887 46 + Store 891 890 + 892: 6(int) Load 8(invocation) + 893: 679(ptr) AccessChain 34(data) 37 46 38 + 894: 19(int8_t) Load 893 + 895: 19(int8_t) GroupNonUniformIAdd 42 InclusiveScan 894 + 896: 679(ptr) AccessChain 34(data) 892 46 38 + Store 896 895 + 897: 6(int) Load 8(invocation) + 898: 686(ptr) AccessChain 34(data) 46 46 + 899: 20(i8vec4) Load 898 + 900: 685(i8vec2) VectorShuffle 899 899 0 1 + 901: 685(i8vec2) GroupNonUniformIAdd 42 InclusiveScan 900 + 902: 679(ptr) AccessChain 34(data) 897 46 38 + 903: 19(int8_t) CompositeExtract 901 0 + Store 902 903 + 904: 679(ptr) AccessChain 34(data) 897 46 55 + 905: 19(int8_t) CompositeExtract 901 1 + Store 904 905 + 906: 6(int) Load 8(invocation) + 907: 686(ptr) AccessChain 34(data) 59 46 + 908: 20(i8vec4) Load 907 + 909: 696(i8vec3) VectorShuffle 908 908 0 1 2 + 910: 696(i8vec3) GroupNonUniformIAdd 42 InclusiveScan 909 + 911: 679(ptr) AccessChain 34(data) 906 46 38 + 912: 19(int8_t) CompositeExtract 910 0 + Store 911 912 + 913: 679(ptr) AccessChain 34(data) 906 46 55 + 914: 19(int8_t) CompositeExtract 910 1 + Store 913 914 + 915: 679(ptr) AccessChain 34(data) 906 46 69 + 916: 19(int8_t) CompositeExtract 910 2 + Store 915 916 + 917: 6(int) Load 8(invocation) + 918: 686(ptr) AccessChain 34(data) 73 46 919: 20(i8vec4) Load 918 - 920: 20(i8vec4) VectorShuffle 919 917 4 5 2 3 - Store 918 920 - 921: 6(int) Load 8(invocation) - 922: 600(ptr) AccessChain 34(data) 57 46 - 923: 20(i8vec4) Load 922 - 924: 609(i8vec3) VectorShuffle 923 923 0 1 2 - 925: 609(i8vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 924 - 926: 600(ptr) AccessChain 34(data) 921 46 - 927: 20(i8vec4) Load 926 - 928: 20(i8vec4) VectorShuffle 927 925 4 5 6 3 - Store 926 928 - 929: 6(int) Load 8(invocation) - 930: 600(ptr) AccessChain 34(data) 67 46 - 931: 20(i8vec4) Load 930 - 932: 20(i8vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 931 - 933: 600(ptr) AccessChain 34(data) 929 46 - Store 933 932 - 934: 6(int) Load 8(invocation) - 935: 593(ptr) AccessChain 34(data) 37 46 38 - 936: 19(int8_t) Load 935 - 937: 19(int8_t) GroupNonUniformBitwiseXor 42 InclusiveScan 936 - 938: 593(ptr) AccessChain 34(data) 934 46 38 - Store 938 937 - 939: 6(int) Load 8(invocation) - 940: 600(ptr) AccessChain 34(data) 46 46 - 941: 20(i8vec4) Load 940 - 942: 599(i8vec2) VectorShuffle 941 941 0 1 - 943: 599(i8vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 942 - 944: 600(ptr) AccessChain 34(data) 939 46 - 945: 20(i8vec4) Load 944 - 946: 20(i8vec4) VectorShuffle 945 943 4 5 2 3 - Store 944 946 + 920: 20(i8vec4) GroupNonUniformIAdd 42 InclusiveScan 919 + 921: 686(ptr) AccessChain 34(data) 917 46 + Store 921 920 + 922: 6(int) Load 8(invocation) + 923: 679(ptr) AccessChain 34(data) 37 46 38 + 924: 19(int8_t) Load 923 + 925: 19(int8_t) GroupNonUniformIMul 42 InclusiveScan 924 + 926: 679(ptr) AccessChain 34(data) 922 46 38 + Store 926 925 + 927: 6(int) Load 8(invocation) + 928: 686(ptr) AccessChain 34(data) 46 46 + 929: 20(i8vec4) Load 928 + 930: 685(i8vec2) VectorShuffle 929 929 0 1 + 931: 685(i8vec2) GroupNonUniformIMul 42 InclusiveScan 930 + 932: 679(ptr) AccessChain 34(data) 927 46 38 + 933: 19(int8_t) CompositeExtract 931 0 + Store 932 933 + 934: 679(ptr) AccessChain 34(data) 927 46 55 + 935: 19(int8_t) CompositeExtract 931 1 + Store 934 935 + 936: 6(int) Load 8(invocation) + 937: 686(ptr) AccessChain 34(data) 59 46 + 938: 20(i8vec4) Load 937 + 939: 696(i8vec3) VectorShuffle 938 938 0 1 2 + 940: 696(i8vec3) GroupNonUniformIMul 42 InclusiveScan 939 + 941: 679(ptr) AccessChain 34(data) 936 46 38 + 942: 19(int8_t) CompositeExtract 940 0 + Store 941 942 + 943: 679(ptr) AccessChain 34(data) 936 46 55 + 944: 19(int8_t) CompositeExtract 940 1 + Store 943 944 + 945: 679(ptr) AccessChain 34(data) 936 46 69 + 946: 19(int8_t) CompositeExtract 940 2 + Store 945 946 947: 6(int) Load 8(invocation) - 948: 600(ptr) AccessChain 34(data) 57 46 + 948: 686(ptr) AccessChain 34(data) 73 46 949: 20(i8vec4) Load 948 - 950: 609(i8vec3) VectorShuffle 949 949 0 1 2 - 951: 609(i8vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 950 - 952: 600(ptr) AccessChain 34(data) 947 46 - 953: 20(i8vec4) Load 952 - 954: 20(i8vec4) VectorShuffle 953 951 4 5 6 3 - Store 952 954 - 955: 6(int) Load 8(invocation) - 956: 600(ptr) AccessChain 34(data) 67 46 - 957: 20(i8vec4) Load 956 - 958: 20(i8vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 957 - 959: 600(ptr) AccessChain 34(data) 955 46 - Store 959 958 - 960: 6(int) Load 8(invocation) - 961: 593(ptr) AccessChain 34(data) 37 46 38 - 962: 19(int8_t) Load 961 - 963: 19(int8_t) GroupNonUniformIAdd 42 ExclusiveScan 962 - 964: 593(ptr) AccessChain 34(data) 960 46 38 - Store 964 963 - 965: 6(int) Load 8(invocation) - 966: 600(ptr) AccessChain 34(data) 46 46 - 967: 20(i8vec4) Load 966 - 968: 599(i8vec2) VectorShuffle 967 967 0 1 - 969: 599(i8vec2) GroupNonUniformIAdd 42 ExclusiveScan 968 - 970: 600(ptr) AccessChain 34(data) 965 46 - 971: 20(i8vec4) Load 970 - 972: 20(i8vec4) VectorShuffle 971 969 4 5 2 3 - Store 970 972 - 973: 6(int) Load 8(invocation) - 974: 600(ptr) AccessChain 34(data) 57 46 - 975: 20(i8vec4) Load 974 - 976: 609(i8vec3) VectorShuffle 975 975 0 1 2 - 977: 609(i8vec3) GroupNonUniformIAdd 42 ExclusiveScan 976 - 978: 600(ptr) AccessChain 34(data) 973 46 + 950: 20(i8vec4) GroupNonUniformIMul 42 InclusiveScan 949 + 951: 686(ptr) AccessChain 34(data) 947 46 + Store 951 950 + 952: 6(int) Load 8(invocation) + 953: 679(ptr) AccessChain 34(data) 37 46 38 + 954: 19(int8_t) Load 953 + 955: 19(int8_t) GroupNonUniformUMin 42 InclusiveScan 954 + 956: 679(ptr) AccessChain 34(data) 952 46 38 + Store 956 955 + 957: 6(int) Load 8(invocation) + 958: 686(ptr) AccessChain 34(data) 46 46 + 959: 20(i8vec4) Load 958 + 960: 685(i8vec2) VectorShuffle 959 959 0 1 + 961: 685(i8vec2) GroupNonUniformUMin 42 InclusiveScan 960 + 962: 679(ptr) AccessChain 34(data) 957 46 38 + 963: 19(int8_t) CompositeExtract 961 0 + Store 962 963 + 964: 679(ptr) AccessChain 34(data) 957 46 55 + 965: 19(int8_t) CompositeExtract 961 1 + Store 964 965 + 966: 6(int) Load 8(invocation) + 967: 686(ptr) AccessChain 34(data) 59 46 + 968: 20(i8vec4) Load 967 + 969: 696(i8vec3) VectorShuffle 968 968 0 1 2 + 970: 696(i8vec3) GroupNonUniformUMin 42 InclusiveScan 969 + 971: 679(ptr) AccessChain 34(data) 966 46 38 + 972: 19(int8_t) CompositeExtract 970 0 + Store 971 972 + 973: 679(ptr) AccessChain 34(data) 966 46 55 + 974: 19(int8_t) CompositeExtract 970 1 + Store 973 974 + 975: 679(ptr) AccessChain 34(data) 966 46 69 + 976: 19(int8_t) CompositeExtract 970 2 + Store 975 976 + 977: 6(int) Load 8(invocation) + 978: 686(ptr) AccessChain 34(data) 73 46 979: 20(i8vec4) Load 978 - 980: 20(i8vec4) VectorShuffle 979 977 4 5 6 3 - Store 978 980 - 981: 6(int) Load 8(invocation) - 982: 600(ptr) AccessChain 34(data) 67 46 - 983: 20(i8vec4) Load 982 - 984: 20(i8vec4) GroupNonUniformIAdd 42 ExclusiveScan 983 - 985: 600(ptr) AccessChain 34(data) 981 46 - Store 985 984 - 986: 6(int) Load 8(invocation) - 987: 593(ptr) AccessChain 34(data) 37 46 38 - 988: 19(int8_t) Load 987 - 989: 19(int8_t) GroupNonUniformIMul 42 ExclusiveScan 988 - 990: 593(ptr) AccessChain 34(data) 986 46 38 - Store 990 989 - 991: 6(int) Load 8(invocation) - 992: 600(ptr) AccessChain 34(data) 46 46 - 993: 20(i8vec4) Load 992 - 994: 599(i8vec2) VectorShuffle 993 993 0 1 - 995: 599(i8vec2) GroupNonUniformIMul 42 ExclusiveScan 994 - 996: 600(ptr) AccessChain 34(data) 991 46 - 997: 20(i8vec4) Load 996 - 998: 20(i8vec4) VectorShuffle 997 995 4 5 2 3 - Store 996 998 - 999: 6(int) Load 8(invocation) - 1000: 600(ptr) AccessChain 34(data) 57 46 - 1001: 20(i8vec4) Load 1000 - 1002: 609(i8vec3) VectorShuffle 1001 1001 0 1 2 - 1003: 609(i8vec3) GroupNonUniformIMul 42 ExclusiveScan 1002 - 1004: 600(ptr) AccessChain 34(data) 999 46 - 1005: 20(i8vec4) Load 1004 - 1006: 20(i8vec4) VectorShuffle 1005 1003 4 5 6 3 - Store 1004 1006 + 980: 20(i8vec4) GroupNonUniformUMin 42 InclusiveScan 979 + 981: 686(ptr) AccessChain 34(data) 977 46 + Store 981 980 + 982: 6(int) Load 8(invocation) + 983: 679(ptr) AccessChain 34(data) 37 46 38 + 984: 19(int8_t) Load 983 + 985: 19(int8_t) GroupNonUniformUMax 42 InclusiveScan 984 + 986: 679(ptr) AccessChain 34(data) 982 46 38 + Store 986 985 + 987: 6(int) Load 8(invocation) + 988: 686(ptr) AccessChain 34(data) 46 46 + 989: 20(i8vec4) Load 988 + 990: 685(i8vec2) VectorShuffle 989 989 0 1 + 991: 685(i8vec2) GroupNonUniformUMax 42 InclusiveScan 990 + 992: 679(ptr) AccessChain 34(data) 987 46 38 + 993: 19(int8_t) CompositeExtract 991 0 + Store 992 993 + 994: 679(ptr) AccessChain 34(data) 987 46 55 + 995: 19(int8_t) CompositeExtract 991 1 + Store 994 995 + 996: 6(int) Load 8(invocation) + 997: 686(ptr) AccessChain 34(data) 59 46 + 998: 20(i8vec4) Load 997 + 999: 696(i8vec3) VectorShuffle 998 998 0 1 2 + 1000: 696(i8vec3) GroupNonUniformUMax 42 InclusiveScan 999 + 1001: 679(ptr) AccessChain 34(data) 996 46 38 + 1002: 19(int8_t) CompositeExtract 1000 0 + Store 1001 1002 + 1003: 679(ptr) AccessChain 34(data) 996 46 55 + 1004: 19(int8_t) CompositeExtract 1000 1 + Store 1003 1004 + 1005: 679(ptr) AccessChain 34(data) 996 46 69 + 1006: 19(int8_t) CompositeExtract 1000 2 + Store 1005 1006 1007: 6(int) Load 8(invocation) - 1008: 600(ptr) AccessChain 34(data) 67 46 + 1008: 686(ptr) AccessChain 34(data) 73 46 1009: 20(i8vec4) Load 1008 - 1010: 20(i8vec4) GroupNonUniformIMul 42 ExclusiveScan 1009 - 1011: 600(ptr) AccessChain 34(data) 1007 46 + 1010: 20(i8vec4) GroupNonUniformUMax 42 InclusiveScan 1009 + 1011: 686(ptr) AccessChain 34(data) 1007 46 Store 1011 1010 1012: 6(int) Load 8(invocation) - 1013: 593(ptr) AccessChain 34(data) 37 46 38 + 1013: 679(ptr) AccessChain 34(data) 37 46 38 1014: 19(int8_t) Load 1013 - 1015: 19(int8_t) GroupNonUniformUMin 42 ExclusiveScan 1014 - 1016: 593(ptr) AccessChain 34(data) 1012 46 38 + 1015: 19(int8_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 1014 + 1016: 679(ptr) AccessChain 34(data) 1012 46 38 Store 1016 1015 1017: 6(int) Load 8(invocation) - 1018: 600(ptr) AccessChain 34(data) 46 46 + 1018: 686(ptr) AccessChain 34(data) 46 46 1019: 20(i8vec4) Load 1018 - 1020: 599(i8vec2) VectorShuffle 1019 1019 0 1 - 1021: 599(i8vec2) GroupNonUniformUMin 42 ExclusiveScan 1020 - 1022: 600(ptr) AccessChain 34(data) 1017 46 - 1023: 20(i8vec4) Load 1022 - 1024: 20(i8vec4) VectorShuffle 1023 1021 4 5 2 3 - Store 1022 1024 - 1025: 6(int) Load 8(invocation) - 1026: 600(ptr) AccessChain 34(data) 57 46 - 1027: 20(i8vec4) Load 1026 - 1028: 609(i8vec3) VectorShuffle 1027 1027 0 1 2 - 1029: 609(i8vec3) GroupNonUniformUMin 42 ExclusiveScan 1028 - 1030: 600(ptr) AccessChain 34(data) 1025 46 - 1031: 20(i8vec4) Load 1030 - 1032: 20(i8vec4) VectorShuffle 1031 1029 4 5 6 3 - Store 1030 1032 - 1033: 6(int) Load 8(invocation) - 1034: 600(ptr) AccessChain 34(data) 67 46 - 1035: 20(i8vec4) Load 1034 - 1036: 20(i8vec4) GroupNonUniformUMin 42 ExclusiveScan 1035 - 1037: 600(ptr) AccessChain 34(data) 1033 46 - Store 1037 1036 - 1038: 6(int) Load 8(invocation) - 1039: 593(ptr) AccessChain 34(data) 37 46 38 - 1040: 19(int8_t) Load 1039 - 1041: 19(int8_t) GroupNonUniformUMax 42 ExclusiveScan 1040 - 1042: 593(ptr) AccessChain 34(data) 1038 46 38 - Store 1042 1041 - 1043: 6(int) Load 8(invocation) - 1044: 600(ptr) AccessChain 34(data) 46 46 - 1045: 20(i8vec4) Load 1044 - 1046: 599(i8vec2) VectorShuffle 1045 1045 0 1 - 1047: 599(i8vec2) GroupNonUniformUMax 42 ExclusiveScan 1046 - 1048: 600(ptr) AccessChain 34(data) 1043 46 + 1020: 685(i8vec2) VectorShuffle 1019 1019 0 1 + 1021: 685(i8vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 1020 + 1022: 679(ptr) AccessChain 34(data) 1017 46 38 + 1023: 19(int8_t) CompositeExtract 1021 0 + Store 1022 1023 + 1024: 679(ptr) AccessChain 34(data) 1017 46 55 + 1025: 19(int8_t) CompositeExtract 1021 1 + Store 1024 1025 + 1026: 6(int) Load 8(invocation) + 1027: 686(ptr) AccessChain 34(data) 59 46 + 1028: 20(i8vec4) Load 1027 + 1029: 696(i8vec3) VectorShuffle 1028 1028 0 1 2 + 1030: 696(i8vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 1029 + 1031: 679(ptr) AccessChain 34(data) 1026 46 38 + 1032: 19(int8_t) CompositeExtract 1030 0 + Store 1031 1032 + 1033: 679(ptr) AccessChain 34(data) 1026 46 55 + 1034: 19(int8_t) CompositeExtract 1030 1 + Store 1033 1034 + 1035: 679(ptr) AccessChain 34(data) 1026 46 69 + 1036: 19(int8_t) CompositeExtract 1030 2 + Store 1035 1036 + 1037: 6(int) Load 8(invocation) + 1038: 686(ptr) AccessChain 34(data) 73 46 + 1039: 20(i8vec4) Load 1038 + 1040: 20(i8vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 1039 + 1041: 686(ptr) AccessChain 34(data) 1037 46 + Store 1041 1040 + 1042: 6(int) Load 8(invocation) + 1043: 679(ptr) AccessChain 34(data) 37 46 38 + 1044: 19(int8_t) Load 1043 + 1045: 19(int8_t) GroupNonUniformBitwiseOr 42 InclusiveScan 1044 + 1046: 679(ptr) AccessChain 34(data) 1042 46 38 + Store 1046 1045 + 1047: 6(int) Load 8(invocation) + 1048: 686(ptr) AccessChain 34(data) 46 46 1049: 20(i8vec4) Load 1048 - 1050: 20(i8vec4) VectorShuffle 1049 1047 4 5 2 3 - Store 1048 1050 - 1051: 6(int) Load 8(invocation) - 1052: 600(ptr) AccessChain 34(data) 57 46 - 1053: 20(i8vec4) Load 1052 - 1054: 609(i8vec3) VectorShuffle 1053 1053 0 1 2 - 1055: 609(i8vec3) GroupNonUniformUMax 42 ExclusiveScan 1054 - 1056: 600(ptr) AccessChain 34(data) 1051 46 - 1057: 20(i8vec4) Load 1056 - 1058: 20(i8vec4) VectorShuffle 1057 1055 4 5 6 3 - Store 1056 1058 - 1059: 6(int) Load 8(invocation) - 1060: 600(ptr) AccessChain 34(data) 67 46 - 1061: 20(i8vec4) Load 1060 - 1062: 20(i8vec4) GroupNonUniformUMax 42 ExclusiveScan 1061 - 1063: 600(ptr) AccessChain 34(data) 1059 46 - Store 1063 1062 - 1064: 6(int) Load 8(invocation) - 1065: 593(ptr) AccessChain 34(data) 37 46 38 - 1066: 19(int8_t) Load 1065 - 1067: 19(int8_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1066 - 1068: 593(ptr) AccessChain 34(data) 1064 46 38 - Store 1068 1067 - 1069: 6(int) Load 8(invocation) - 1070: 600(ptr) AccessChain 34(data) 46 46 - 1071: 20(i8vec4) Load 1070 - 1072: 599(i8vec2) VectorShuffle 1071 1071 0 1 - 1073: 599(i8vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1072 - 1074: 600(ptr) AccessChain 34(data) 1069 46 - 1075: 20(i8vec4) Load 1074 - 1076: 20(i8vec4) VectorShuffle 1075 1073 4 5 2 3 - Store 1074 1076 + 1050: 685(i8vec2) VectorShuffle 1049 1049 0 1 + 1051: 685(i8vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 1050 + 1052: 679(ptr) AccessChain 34(data) 1047 46 38 + 1053: 19(int8_t) CompositeExtract 1051 0 + Store 1052 1053 + 1054: 679(ptr) AccessChain 34(data) 1047 46 55 + 1055: 19(int8_t) CompositeExtract 1051 1 + Store 1054 1055 + 1056: 6(int) Load 8(invocation) + 1057: 686(ptr) AccessChain 34(data) 59 46 + 1058: 20(i8vec4) Load 1057 + 1059: 696(i8vec3) VectorShuffle 1058 1058 0 1 2 + 1060: 696(i8vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 1059 + 1061: 679(ptr) AccessChain 34(data) 1056 46 38 + 1062: 19(int8_t) CompositeExtract 1060 0 + Store 1061 1062 + 1063: 679(ptr) AccessChain 34(data) 1056 46 55 + 1064: 19(int8_t) CompositeExtract 1060 1 + Store 1063 1064 + 1065: 679(ptr) AccessChain 34(data) 1056 46 69 + 1066: 19(int8_t) CompositeExtract 1060 2 + Store 1065 1066 + 1067: 6(int) Load 8(invocation) + 1068: 686(ptr) AccessChain 34(data) 73 46 + 1069: 20(i8vec4) Load 1068 + 1070: 20(i8vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 1069 + 1071: 686(ptr) AccessChain 34(data) 1067 46 + Store 1071 1070 + 1072: 6(int) Load 8(invocation) + 1073: 679(ptr) AccessChain 34(data) 37 46 38 + 1074: 19(int8_t) Load 1073 + 1075: 19(int8_t) GroupNonUniformBitwiseXor 42 InclusiveScan 1074 + 1076: 679(ptr) AccessChain 34(data) 1072 46 38 + Store 1076 1075 1077: 6(int) Load 8(invocation) - 1078: 600(ptr) AccessChain 34(data) 57 46 + 1078: 686(ptr) AccessChain 34(data) 46 46 1079: 20(i8vec4) Load 1078 - 1080: 609(i8vec3) VectorShuffle 1079 1079 0 1 2 - 1081: 609(i8vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1080 - 1082: 600(ptr) AccessChain 34(data) 1077 46 - 1083: 20(i8vec4) Load 1082 - 1084: 20(i8vec4) VectorShuffle 1083 1081 4 5 6 3 - Store 1082 1084 - 1085: 6(int) Load 8(invocation) - 1086: 600(ptr) AccessChain 34(data) 67 46 - 1087: 20(i8vec4) Load 1086 - 1088: 20(i8vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1087 - 1089: 600(ptr) AccessChain 34(data) 1085 46 - Store 1089 1088 - 1090: 6(int) Load 8(invocation) - 1091: 593(ptr) AccessChain 34(data) 37 46 38 - 1092: 19(int8_t) Load 1091 - 1093: 19(int8_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 1092 - 1094: 593(ptr) AccessChain 34(data) 1090 46 38 - Store 1094 1093 - 1095: 6(int) Load 8(invocation) - 1096: 600(ptr) AccessChain 34(data) 46 46 - 1097: 20(i8vec4) Load 1096 - 1098: 599(i8vec2) VectorShuffle 1097 1097 0 1 - 1099: 599(i8vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 1098 - 1100: 600(ptr) AccessChain 34(data) 1095 46 - 1101: 20(i8vec4) Load 1100 - 1102: 20(i8vec4) VectorShuffle 1101 1099 4 5 2 3 - Store 1100 1102 - 1103: 6(int) Load 8(invocation) - 1104: 600(ptr) AccessChain 34(data) 57 46 - 1105: 20(i8vec4) Load 1104 - 1106: 609(i8vec3) VectorShuffle 1105 1105 0 1 2 - 1107: 609(i8vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 1106 - 1108: 600(ptr) AccessChain 34(data) 1103 46 + 1080: 685(i8vec2) VectorShuffle 1079 1079 0 1 + 1081: 685(i8vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 1080 + 1082: 679(ptr) AccessChain 34(data) 1077 46 38 + 1083: 19(int8_t) CompositeExtract 1081 0 + Store 1082 1083 + 1084: 679(ptr) AccessChain 34(data) 1077 46 55 + 1085: 19(int8_t) CompositeExtract 1081 1 + Store 1084 1085 + 1086: 6(int) Load 8(invocation) + 1087: 686(ptr) AccessChain 34(data) 59 46 + 1088: 20(i8vec4) Load 1087 + 1089: 696(i8vec3) VectorShuffle 1088 1088 0 1 2 + 1090: 696(i8vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 1089 + 1091: 679(ptr) AccessChain 34(data) 1086 46 38 + 1092: 19(int8_t) CompositeExtract 1090 0 + Store 1091 1092 + 1093: 679(ptr) AccessChain 34(data) 1086 46 55 + 1094: 19(int8_t) CompositeExtract 1090 1 + Store 1093 1094 + 1095: 679(ptr) AccessChain 34(data) 1086 46 69 + 1096: 19(int8_t) CompositeExtract 1090 2 + Store 1095 1096 + 1097: 6(int) Load 8(invocation) + 1098: 686(ptr) AccessChain 34(data) 73 46 + 1099: 20(i8vec4) Load 1098 + 1100: 20(i8vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 1099 + 1101: 686(ptr) AccessChain 34(data) 1097 46 + Store 1101 1100 + 1102: 6(int) Load 8(invocation) + 1103: 679(ptr) AccessChain 34(data) 37 46 38 + 1104: 19(int8_t) Load 1103 + 1105: 19(int8_t) GroupNonUniformIAdd 42 ExclusiveScan 1104 + 1106: 679(ptr) AccessChain 34(data) 1102 46 38 + Store 1106 1105 + 1107: 6(int) Load 8(invocation) + 1108: 686(ptr) AccessChain 34(data) 46 46 1109: 20(i8vec4) Load 1108 - 1110: 20(i8vec4) VectorShuffle 1109 1107 4 5 6 3 - Store 1108 1110 - 1111: 6(int) Load 8(invocation) - 1112: 600(ptr) AccessChain 34(data) 67 46 - 1113: 20(i8vec4) Load 1112 - 1114: 20(i8vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 1113 - 1115: 600(ptr) AccessChain 34(data) 1111 46 - Store 1115 1114 + 1110: 685(i8vec2) VectorShuffle 1109 1109 0 1 + 1111: 685(i8vec2) GroupNonUniformIAdd 42 ExclusiveScan 1110 + 1112: 679(ptr) AccessChain 34(data) 1107 46 38 + 1113: 19(int8_t) CompositeExtract 1111 0 + Store 1112 1113 + 1114: 679(ptr) AccessChain 34(data) 1107 46 55 + 1115: 19(int8_t) CompositeExtract 1111 1 + Store 1114 1115 1116: 6(int) Load 8(invocation) - 1117: 593(ptr) AccessChain 34(data) 37 46 38 - 1118: 19(int8_t) Load 1117 - 1119: 19(int8_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 1118 - 1120: 593(ptr) AccessChain 34(data) 1116 46 38 - Store 1120 1119 - 1121: 6(int) Load 8(invocation) - 1122: 600(ptr) AccessChain 34(data) 46 46 - 1123: 20(i8vec4) Load 1122 - 1124: 599(i8vec2) VectorShuffle 1123 1123 0 1 - 1125: 599(i8vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 1124 - 1126: 600(ptr) AccessChain 34(data) 1121 46 - 1127: 20(i8vec4) Load 1126 - 1128: 20(i8vec4) VectorShuffle 1127 1125 4 5 2 3 - Store 1126 1128 - 1129: 6(int) Load 8(invocation) - 1130: 600(ptr) AccessChain 34(data) 57 46 - 1131: 20(i8vec4) Load 1130 - 1132: 609(i8vec3) VectorShuffle 1131 1131 0 1 2 - 1133: 609(i8vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 1132 - 1134: 600(ptr) AccessChain 34(data) 1129 46 - 1135: 20(i8vec4) Load 1134 - 1136: 20(i8vec4) VectorShuffle 1135 1133 4 5 6 3 - Store 1134 1136 + 1117: 686(ptr) AccessChain 34(data) 59 46 + 1118: 20(i8vec4) Load 1117 + 1119: 696(i8vec3) VectorShuffle 1118 1118 0 1 2 + 1120: 696(i8vec3) GroupNonUniformIAdd 42 ExclusiveScan 1119 + 1121: 679(ptr) AccessChain 34(data) 1116 46 38 + 1122: 19(int8_t) CompositeExtract 1120 0 + Store 1121 1122 + 1123: 679(ptr) AccessChain 34(data) 1116 46 55 + 1124: 19(int8_t) CompositeExtract 1120 1 + Store 1123 1124 + 1125: 679(ptr) AccessChain 34(data) 1116 46 69 + 1126: 19(int8_t) CompositeExtract 1120 2 + Store 1125 1126 + 1127: 6(int) Load 8(invocation) + 1128: 686(ptr) AccessChain 34(data) 73 46 + 1129: 20(i8vec4) Load 1128 + 1130: 20(i8vec4) GroupNonUniformIAdd 42 ExclusiveScan 1129 + 1131: 686(ptr) AccessChain 34(data) 1127 46 + Store 1131 1130 + 1132: 6(int) Load 8(invocation) + 1133: 679(ptr) AccessChain 34(data) 37 46 38 + 1134: 19(int8_t) Load 1133 + 1135: 19(int8_t) GroupNonUniformIMul 42 ExclusiveScan 1134 + 1136: 679(ptr) AccessChain 34(data) 1132 46 38 + Store 1136 1135 1137: 6(int) Load 8(invocation) - 1138: 600(ptr) AccessChain 34(data) 67 46 + 1138: 686(ptr) AccessChain 34(data) 46 46 1139: 20(i8vec4) Load 1138 - 1140: 20(i8vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 1139 - 1141: 600(ptr) AccessChain 34(data) 1137 46 - Store 1141 1140 - 1142: 6(int) Load 8(invocation) - 1144: 1143(ptr) AccessChain 34(data) 37 57 38 - 1145: 21(int16_t) Load 1144 - 1146: 21(int16_t) GroupNonUniformIAdd 42 Reduce 1145 - 1147: 1143(ptr) AccessChain 34(data) 1142 57 38 - Store 1147 1146 - 1148: 6(int) Load 8(invocation) - 1151: 1150(ptr) AccessChain 34(data) 46 57 - 1152: 22(i16vec4) Load 1151 - 1153:1149(i16vec2) VectorShuffle 1152 1152 0 1 - 1154:1149(i16vec2) GroupNonUniformIAdd 42 Reduce 1153 - 1155: 1150(ptr) AccessChain 34(data) 1148 57 - 1156: 22(i16vec4) Load 1155 - 1157: 22(i16vec4) VectorShuffle 1156 1154 4 5 2 3 - Store 1155 1157 - 1158: 6(int) Load 8(invocation) - 1160: 1150(ptr) AccessChain 34(data) 57 57 - 1161: 22(i16vec4) Load 1160 - 1162:1159(i16vec3) VectorShuffle 1161 1161 0 1 2 - 1163:1159(i16vec3) GroupNonUniformIAdd 42 Reduce 1162 - 1164: 1150(ptr) AccessChain 34(data) 1158 57 - 1165: 22(i16vec4) Load 1164 - 1166: 22(i16vec4) VectorShuffle 1165 1163 4 5 6 3 - Store 1164 1166 + 1140: 685(i8vec2) VectorShuffle 1139 1139 0 1 + 1141: 685(i8vec2) GroupNonUniformIMul 42 ExclusiveScan 1140 + 1142: 679(ptr) AccessChain 34(data) 1137 46 38 + 1143: 19(int8_t) CompositeExtract 1141 0 + Store 1142 1143 + 1144: 679(ptr) AccessChain 34(data) 1137 46 55 + 1145: 19(int8_t) CompositeExtract 1141 1 + Store 1144 1145 + 1146: 6(int) Load 8(invocation) + 1147: 686(ptr) AccessChain 34(data) 59 46 + 1148: 20(i8vec4) Load 1147 + 1149: 696(i8vec3) VectorShuffle 1148 1148 0 1 2 + 1150: 696(i8vec3) GroupNonUniformIMul 42 ExclusiveScan 1149 + 1151: 679(ptr) AccessChain 34(data) 1146 46 38 + 1152: 19(int8_t) CompositeExtract 1150 0 + Store 1151 1152 + 1153: 679(ptr) AccessChain 34(data) 1146 46 55 + 1154: 19(int8_t) CompositeExtract 1150 1 + Store 1153 1154 + 1155: 679(ptr) AccessChain 34(data) 1146 46 69 + 1156: 19(int8_t) CompositeExtract 1150 2 + Store 1155 1156 + 1157: 6(int) Load 8(invocation) + 1158: 686(ptr) AccessChain 34(data) 73 46 + 1159: 20(i8vec4) Load 1158 + 1160: 20(i8vec4) GroupNonUniformIMul 42 ExclusiveScan 1159 + 1161: 686(ptr) AccessChain 34(data) 1157 46 + Store 1161 1160 + 1162: 6(int) Load 8(invocation) + 1163: 679(ptr) AccessChain 34(data) 37 46 38 + 1164: 19(int8_t) Load 1163 + 1165: 19(int8_t) GroupNonUniformUMin 42 ExclusiveScan 1164 + 1166: 679(ptr) AccessChain 34(data) 1162 46 38 + Store 1166 1165 1167: 6(int) Load 8(invocation) - 1168: 1150(ptr) AccessChain 34(data) 67 57 - 1169: 22(i16vec4) Load 1168 - 1170: 22(i16vec4) GroupNonUniformIAdd 42 Reduce 1169 - 1171: 1150(ptr) AccessChain 34(data) 1167 57 - Store 1171 1170 - 1172: 6(int) Load 8(invocation) - 1173: 1143(ptr) AccessChain 34(data) 37 57 38 - 1174: 21(int16_t) Load 1173 - 1175: 21(int16_t) GroupNonUniformIMul 42 Reduce 1174 - 1176: 1143(ptr) AccessChain 34(data) 1172 57 38 - Store 1176 1175 - 1177: 6(int) Load 8(invocation) - 1178: 1150(ptr) AccessChain 34(data) 46 57 - 1179: 22(i16vec4) Load 1178 - 1180:1149(i16vec2) VectorShuffle 1179 1179 0 1 - 1181:1149(i16vec2) GroupNonUniformIMul 42 Reduce 1180 - 1182: 1150(ptr) AccessChain 34(data) 1177 57 - 1183: 22(i16vec4) Load 1182 - 1184: 22(i16vec4) VectorShuffle 1183 1181 4 5 2 3 - Store 1182 1184 - 1185: 6(int) Load 8(invocation) - 1186: 1150(ptr) AccessChain 34(data) 57 57 - 1187: 22(i16vec4) Load 1186 - 1188:1159(i16vec3) VectorShuffle 1187 1187 0 1 2 - 1189:1159(i16vec3) GroupNonUniformIMul 42 Reduce 1188 - 1190: 1150(ptr) AccessChain 34(data) 1185 57 - 1191: 22(i16vec4) Load 1190 - 1192: 22(i16vec4) VectorShuffle 1191 1189 4 5 6 3 - Store 1190 1192 - 1193: 6(int) Load 8(invocation) - 1194: 1150(ptr) AccessChain 34(data) 67 57 - 1195: 22(i16vec4) Load 1194 - 1196: 22(i16vec4) GroupNonUniformIMul 42 Reduce 1195 - 1197: 1150(ptr) AccessChain 34(data) 1193 57 - Store 1197 1196 - 1198: 6(int) Load 8(invocation) - 1199: 1143(ptr) AccessChain 34(data) 37 57 38 - 1200: 21(int16_t) Load 1199 - 1201: 21(int16_t) GroupNonUniformSMin 42 Reduce 1200 - 1202: 1143(ptr) AccessChain 34(data) 1198 57 38 - Store 1202 1201 - 1203: 6(int) Load 8(invocation) - 1204: 1150(ptr) AccessChain 34(data) 46 57 - 1205: 22(i16vec4) Load 1204 - 1206:1149(i16vec2) VectorShuffle 1205 1205 0 1 - 1207:1149(i16vec2) GroupNonUniformSMin 42 Reduce 1206 - 1208: 1150(ptr) AccessChain 34(data) 1203 57 - 1209: 22(i16vec4) Load 1208 - 1210: 22(i16vec4) VectorShuffle 1209 1207 4 5 2 3 - Store 1208 1210 - 1211: 6(int) Load 8(invocation) - 1212: 1150(ptr) AccessChain 34(data) 57 57 - 1213: 22(i16vec4) Load 1212 - 1214:1159(i16vec3) VectorShuffle 1213 1213 0 1 2 - 1215:1159(i16vec3) GroupNonUniformSMin 42 Reduce 1214 - 1216: 1150(ptr) AccessChain 34(data) 1211 57 - 1217: 22(i16vec4) Load 1216 - 1218: 22(i16vec4) VectorShuffle 1217 1215 4 5 6 3 - Store 1216 1218 - 1219: 6(int) Load 8(invocation) - 1220: 1150(ptr) AccessChain 34(data) 67 57 - 1221: 22(i16vec4) Load 1220 - 1222: 22(i16vec4) GroupNonUniformSMin 42 Reduce 1221 - 1223: 1150(ptr) AccessChain 34(data) 1219 57 - Store 1223 1222 - 1224: 6(int) Load 8(invocation) - 1225: 1143(ptr) AccessChain 34(data) 37 57 38 - 1226: 21(int16_t) Load 1225 - 1227: 21(int16_t) GroupNonUniformSMax 42 Reduce 1226 - 1228: 1143(ptr) AccessChain 34(data) 1224 57 38 - Store 1228 1227 - 1229: 6(int) Load 8(invocation) - 1230: 1150(ptr) AccessChain 34(data) 46 57 - 1231: 22(i16vec4) Load 1230 - 1232:1149(i16vec2) VectorShuffle 1231 1231 0 1 - 1233:1149(i16vec2) GroupNonUniformSMax 42 Reduce 1232 - 1234: 1150(ptr) AccessChain 34(data) 1229 57 - 1235: 22(i16vec4) Load 1234 - 1236: 22(i16vec4) VectorShuffle 1235 1233 4 5 2 3 - Store 1234 1236 - 1237: 6(int) Load 8(invocation) - 1238: 1150(ptr) AccessChain 34(data) 57 57 - 1239: 22(i16vec4) Load 1238 - 1240:1159(i16vec3) VectorShuffle 1239 1239 0 1 2 - 1241:1159(i16vec3) GroupNonUniformSMax 42 Reduce 1240 - 1242: 1150(ptr) AccessChain 34(data) 1237 57 - 1243: 22(i16vec4) Load 1242 - 1244: 22(i16vec4) VectorShuffle 1243 1241 4 5 6 3 - Store 1242 1244 - 1245: 6(int) Load 8(invocation) - 1246: 1150(ptr) AccessChain 34(data) 67 57 - 1247: 22(i16vec4) Load 1246 - 1248: 22(i16vec4) GroupNonUniformSMax 42 Reduce 1247 - 1249: 1150(ptr) AccessChain 34(data) 1245 57 - Store 1249 1248 - 1250: 6(int) Load 8(invocation) - 1251: 1143(ptr) AccessChain 34(data) 37 57 38 - 1252: 21(int16_t) Load 1251 - 1253: 21(int16_t) GroupNonUniformBitwiseAnd 42 Reduce 1252 - 1254: 1143(ptr) AccessChain 34(data) 1250 57 38 - Store 1254 1253 - 1255: 6(int) Load 8(invocation) - 1256: 1150(ptr) AccessChain 34(data) 46 57 - 1257: 22(i16vec4) Load 1256 - 1258:1149(i16vec2) VectorShuffle 1257 1257 0 1 - 1259:1149(i16vec2) GroupNonUniformBitwiseAnd 42 Reduce 1258 - 1260: 1150(ptr) AccessChain 34(data) 1255 57 - 1261: 22(i16vec4) Load 1260 - 1262: 22(i16vec4) VectorShuffle 1261 1259 4 5 2 3 - Store 1260 1262 - 1263: 6(int) Load 8(invocation) - 1264: 1150(ptr) AccessChain 34(data) 57 57 - 1265: 22(i16vec4) Load 1264 - 1266:1159(i16vec3) VectorShuffle 1265 1265 0 1 2 - 1267:1159(i16vec3) GroupNonUniformBitwiseAnd 42 Reduce 1266 - 1268: 1150(ptr) AccessChain 34(data) 1263 57 - 1269: 22(i16vec4) Load 1268 - 1270: 22(i16vec4) VectorShuffle 1269 1267 4 5 6 3 - Store 1268 1270 - 1271: 6(int) Load 8(invocation) - 1272: 1150(ptr) AccessChain 34(data) 67 57 - 1273: 22(i16vec4) Load 1272 - 1274: 22(i16vec4) GroupNonUniformBitwiseAnd 42 Reduce 1273 - 1275: 1150(ptr) AccessChain 34(data) 1271 57 - Store 1275 1274 - 1276: 6(int) Load 8(invocation) - 1277: 1143(ptr) AccessChain 34(data) 37 57 38 - 1278: 21(int16_t) Load 1277 - 1279: 21(int16_t) GroupNonUniformBitwiseOr 42 Reduce 1278 - 1280: 1143(ptr) AccessChain 34(data) 1276 57 38 - Store 1280 1279 - 1281: 6(int) Load 8(invocation) - 1282: 1150(ptr) AccessChain 34(data) 46 57 - 1283: 22(i16vec4) Load 1282 - 1284:1149(i16vec2) VectorShuffle 1283 1283 0 1 - 1285:1149(i16vec2) GroupNonUniformBitwiseOr 42 Reduce 1284 - 1286: 1150(ptr) AccessChain 34(data) 1281 57 - 1287: 22(i16vec4) Load 1286 - 1288: 22(i16vec4) VectorShuffle 1287 1285 4 5 2 3 - Store 1286 1288 - 1289: 6(int) Load 8(invocation) - 1290: 1150(ptr) AccessChain 34(data) 57 57 - 1291: 22(i16vec4) Load 1290 - 1292:1159(i16vec3) VectorShuffle 1291 1291 0 1 2 - 1293:1159(i16vec3) GroupNonUniformBitwiseOr 42 Reduce 1292 - 1294: 1150(ptr) AccessChain 34(data) 1289 57 - 1295: 22(i16vec4) Load 1294 - 1296: 22(i16vec4) VectorShuffle 1295 1293 4 5 6 3 - Store 1294 1296 - 1297: 6(int) Load 8(invocation) - 1298: 1150(ptr) AccessChain 34(data) 67 57 - 1299: 22(i16vec4) Load 1298 - 1300: 22(i16vec4) GroupNonUniformBitwiseOr 42 Reduce 1299 - 1301: 1150(ptr) AccessChain 34(data) 1297 57 - Store 1301 1300 - 1302: 6(int) Load 8(invocation) - 1303: 1143(ptr) AccessChain 34(data) 37 57 38 - 1304: 21(int16_t) Load 1303 - 1305: 21(int16_t) GroupNonUniformBitwiseXor 42 Reduce 1304 - 1306: 1143(ptr) AccessChain 34(data) 1302 57 38 - Store 1306 1305 + 1168: 686(ptr) AccessChain 34(data) 46 46 + 1169: 20(i8vec4) Load 1168 + 1170: 685(i8vec2) VectorShuffle 1169 1169 0 1 + 1171: 685(i8vec2) GroupNonUniformUMin 42 ExclusiveScan 1170 + 1172: 679(ptr) AccessChain 34(data) 1167 46 38 + 1173: 19(int8_t) CompositeExtract 1171 0 + Store 1172 1173 + 1174: 679(ptr) AccessChain 34(data) 1167 46 55 + 1175: 19(int8_t) CompositeExtract 1171 1 + Store 1174 1175 + 1176: 6(int) Load 8(invocation) + 1177: 686(ptr) AccessChain 34(data) 59 46 + 1178: 20(i8vec4) Load 1177 + 1179: 696(i8vec3) VectorShuffle 1178 1178 0 1 2 + 1180: 696(i8vec3) GroupNonUniformUMin 42 ExclusiveScan 1179 + 1181: 679(ptr) AccessChain 34(data) 1176 46 38 + 1182: 19(int8_t) CompositeExtract 1180 0 + Store 1181 1182 + 1183: 679(ptr) AccessChain 34(data) 1176 46 55 + 1184: 19(int8_t) CompositeExtract 1180 1 + Store 1183 1184 + 1185: 679(ptr) AccessChain 34(data) 1176 46 69 + 1186: 19(int8_t) CompositeExtract 1180 2 + Store 1185 1186 + 1187: 6(int) Load 8(invocation) + 1188: 686(ptr) AccessChain 34(data) 73 46 + 1189: 20(i8vec4) Load 1188 + 1190: 20(i8vec4) GroupNonUniformUMin 42 ExclusiveScan 1189 + 1191: 686(ptr) AccessChain 34(data) 1187 46 + Store 1191 1190 + 1192: 6(int) Load 8(invocation) + 1193: 679(ptr) AccessChain 34(data) 37 46 38 + 1194: 19(int8_t) Load 1193 + 1195: 19(int8_t) GroupNonUniformUMax 42 ExclusiveScan 1194 + 1196: 679(ptr) AccessChain 34(data) 1192 46 38 + Store 1196 1195 + 1197: 6(int) Load 8(invocation) + 1198: 686(ptr) AccessChain 34(data) 46 46 + 1199: 20(i8vec4) Load 1198 + 1200: 685(i8vec2) VectorShuffle 1199 1199 0 1 + 1201: 685(i8vec2) GroupNonUniformUMax 42 ExclusiveScan 1200 + 1202: 679(ptr) AccessChain 34(data) 1197 46 38 + 1203: 19(int8_t) CompositeExtract 1201 0 + Store 1202 1203 + 1204: 679(ptr) AccessChain 34(data) 1197 46 55 + 1205: 19(int8_t) CompositeExtract 1201 1 + Store 1204 1205 + 1206: 6(int) Load 8(invocation) + 1207: 686(ptr) AccessChain 34(data) 59 46 + 1208: 20(i8vec4) Load 1207 + 1209: 696(i8vec3) VectorShuffle 1208 1208 0 1 2 + 1210: 696(i8vec3) GroupNonUniformUMax 42 ExclusiveScan 1209 + 1211: 679(ptr) AccessChain 34(data) 1206 46 38 + 1212: 19(int8_t) CompositeExtract 1210 0 + Store 1211 1212 + 1213: 679(ptr) AccessChain 34(data) 1206 46 55 + 1214: 19(int8_t) CompositeExtract 1210 1 + Store 1213 1214 + 1215: 679(ptr) AccessChain 34(data) 1206 46 69 + 1216: 19(int8_t) CompositeExtract 1210 2 + Store 1215 1216 + 1217: 6(int) Load 8(invocation) + 1218: 686(ptr) AccessChain 34(data) 73 46 + 1219: 20(i8vec4) Load 1218 + 1220: 20(i8vec4) GroupNonUniformUMax 42 ExclusiveScan 1219 + 1221: 686(ptr) AccessChain 34(data) 1217 46 + Store 1221 1220 + 1222: 6(int) Load 8(invocation) + 1223: 679(ptr) AccessChain 34(data) 37 46 38 + 1224: 19(int8_t) Load 1223 + 1225: 19(int8_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1224 + 1226: 679(ptr) AccessChain 34(data) 1222 46 38 + Store 1226 1225 + 1227: 6(int) Load 8(invocation) + 1228: 686(ptr) AccessChain 34(data) 46 46 + 1229: 20(i8vec4) Load 1228 + 1230: 685(i8vec2) VectorShuffle 1229 1229 0 1 + 1231: 685(i8vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1230 + 1232: 679(ptr) AccessChain 34(data) 1227 46 38 + 1233: 19(int8_t) CompositeExtract 1231 0 + Store 1232 1233 + 1234: 679(ptr) AccessChain 34(data) 1227 46 55 + 1235: 19(int8_t) CompositeExtract 1231 1 + Store 1234 1235 + 1236: 6(int) Load 8(invocation) + 1237: 686(ptr) AccessChain 34(data) 59 46 + 1238: 20(i8vec4) Load 1237 + 1239: 696(i8vec3) VectorShuffle 1238 1238 0 1 2 + 1240: 696(i8vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1239 + 1241: 679(ptr) AccessChain 34(data) 1236 46 38 + 1242: 19(int8_t) CompositeExtract 1240 0 + Store 1241 1242 + 1243: 679(ptr) AccessChain 34(data) 1236 46 55 + 1244: 19(int8_t) CompositeExtract 1240 1 + Store 1243 1244 + 1245: 679(ptr) AccessChain 34(data) 1236 46 69 + 1246: 19(int8_t) CompositeExtract 1240 2 + Store 1245 1246 + 1247: 6(int) Load 8(invocation) + 1248: 686(ptr) AccessChain 34(data) 73 46 + 1249: 20(i8vec4) Load 1248 + 1250: 20(i8vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1249 + 1251: 686(ptr) AccessChain 34(data) 1247 46 + Store 1251 1250 + 1252: 6(int) Load 8(invocation) + 1253: 679(ptr) AccessChain 34(data) 37 46 38 + 1254: 19(int8_t) Load 1253 + 1255: 19(int8_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 1254 + 1256: 679(ptr) AccessChain 34(data) 1252 46 38 + Store 1256 1255 + 1257: 6(int) Load 8(invocation) + 1258: 686(ptr) AccessChain 34(data) 46 46 + 1259: 20(i8vec4) Load 1258 + 1260: 685(i8vec2) VectorShuffle 1259 1259 0 1 + 1261: 685(i8vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 1260 + 1262: 679(ptr) AccessChain 34(data) 1257 46 38 + 1263: 19(int8_t) CompositeExtract 1261 0 + Store 1262 1263 + 1264: 679(ptr) AccessChain 34(data) 1257 46 55 + 1265: 19(int8_t) CompositeExtract 1261 1 + Store 1264 1265 + 1266: 6(int) Load 8(invocation) + 1267: 686(ptr) AccessChain 34(data) 59 46 + 1268: 20(i8vec4) Load 1267 + 1269: 696(i8vec3) VectorShuffle 1268 1268 0 1 2 + 1270: 696(i8vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 1269 + 1271: 679(ptr) AccessChain 34(data) 1266 46 38 + 1272: 19(int8_t) CompositeExtract 1270 0 + Store 1271 1272 + 1273: 679(ptr) AccessChain 34(data) 1266 46 55 + 1274: 19(int8_t) CompositeExtract 1270 1 + Store 1273 1274 + 1275: 679(ptr) AccessChain 34(data) 1266 46 69 + 1276: 19(int8_t) CompositeExtract 1270 2 + Store 1275 1276 + 1277: 6(int) Load 8(invocation) + 1278: 686(ptr) AccessChain 34(data) 73 46 + 1279: 20(i8vec4) Load 1278 + 1280: 20(i8vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 1279 + 1281: 686(ptr) AccessChain 34(data) 1277 46 + Store 1281 1280 + 1282: 6(int) Load 8(invocation) + 1283: 679(ptr) AccessChain 34(data) 37 46 38 + 1284: 19(int8_t) Load 1283 + 1285: 19(int8_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 1284 + 1286: 679(ptr) AccessChain 34(data) 1282 46 38 + Store 1286 1285 + 1287: 6(int) Load 8(invocation) + 1288: 686(ptr) AccessChain 34(data) 46 46 + 1289: 20(i8vec4) Load 1288 + 1290: 685(i8vec2) VectorShuffle 1289 1289 0 1 + 1291: 685(i8vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 1290 + 1292: 679(ptr) AccessChain 34(data) 1287 46 38 + 1293: 19(int8_t) CompositeExtract 1291 0 + Store 1292 1293 + 1294: 679(ptr) AccessChain 34(data) 1287 46 55 + 1295: 19(int8_t) CompositeExtract 1291 1 + Store 1294 1295 + 1296: 6(int) Load 8(invocation) + 1297: 686(ptr) AccessChain 34(data) 59 46 + 1298: 20(i8vec4) Load 1297 + 1299: 696(i8vec3) VectorShuffle 1298 1298 0 1 2 + 1300: 696(i8vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 1299 + 1301: 679(ptr) AccessChain 34(data) 1296 46 38 + 1302: 19(int8_t) CompositeExtract 1300 0 + Store 1301 1302 + 1303: 679(ptr) AccessChain 34(data) 1296 46 55 + 1304: 19(int8_t) CompositeExtract 1300 1 + Store 1303 1304 + 1305: 679(ptr) AccessChain 34(data) 1296 46 69 + 1306: 19(int8_t) CompositeExtract 1300 2 + Store 1305 1306 1307: 6(int) Load 8(invocation) - 1308: 1150(ptr) AccessChain 34(data) 46 57 - 1309: 22(i16vec4) Load 1308 - 1310:1149(i16vec2) VectorShuffle 1309 1309 0 1 - 1311:1149(i16vec2) GroupNonUniformBitwiseXor 42 Reduce 1310 - 1312: 1150(ptr) AccessChain 34(data) 1307 57 - 1313: 22(i16vec4) Load 1312 - 1314: 22(i16vec4) VectorShuffle 1313 1311 4 5 2 3 - Store 1312 1314 - 1315: 6(int) Load 8(invocation) - 1316: 1150(ptr) AccessChain 34(data) 57 57 - 1317: 22(i16vec4) Load 1316 - 1318:1159(i16vec3) VectorShuffle 1317 1317 0 1 2 - 1319:1159(i16vec3) GroupNonUniformBitwiseXor 42 Reduce 1318 - 1320: 1150(ptr) AccessChain 34(data) 1315 57 - 1321: 22(i16vec4) Load 1320 - 1322: 22(i16vec4) VectorShuffle 1321 1319 4 5 6 3 - Store 1320 1322 - 1323: 6(int) Load 8(invocation) - 1324: 1150(ptr) AccessChain 34(data) 67 57 - 1325: 22(i16vec4) Load 1324 - 1326: 22(i16vec4) GroupNonUniformBitwiseXor 42 Reduce 1325 - 1327: 1150(ptr) AccessChain 34(data) 1323 57 - Store 1327 1326 - 1328: 6(int) Load 8(invocation) - 1329: 1143(ptr) AccessChain 34(data) 37 57 38 - 1330: 21(int16_t) Load 1329 - 1331: 21(int16_t) GroupNonUniformIAdd 42 InclusiveScan 1330 - 1332: 1143(ptr) AccessChain 34(data) 1328 57 38 - Store 1332 1331 - 1333: 6(int) Load 8(invocation) - 1334: 1150(ptr) AccessChain 34(data) 46 57 - 1335: 22(i16vec4) Load 1334 - 1336:1149(i16vec2) VectorShuffle 1335 1335 0 1 - 1337:1149(i16vec2) GroupNonUniformIAdd 42 InclusiveScan 1336 - 1338: 1150(ptr) AccessChain 34(data) 1333 57 - 1339: 22(i16vec4) Load 1338 - 1340: 22(i16vec4) VectorShuffle 1339 1337 4 5 2 3 - Store 1338 1340 + 1308: 686(ptr) AccessChain 34(data) 73 46 + 1309: 20(i8vec4) Load 1308 + 1310: 20(i8vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 1309 + 1311: 686(ptr) AccessChain 34(data) 1307 46 + Store 1311 1310 + 1312: 6(int) Load 8(invocation) + 1314: 1313(ptr) AccessChain 34(data) 37 59 38 + 1315: 21(int16_t) Load 1314 + 1316: 21(int16_t) GroupNonUniformIAdd 42 Reduce 1315 + 1317: 1313(ptr) AccessChain 34(data) 1312 59 38 + Store 1317 1316 + 1318: 6(int) Load 8(invocation) + 1321: 1320(ptr) AccessChain 34(data) 46 59 + 1322: 22(i16vec4) Load 1321 + 1323:1319(i16vec2) VectorShuffle 1322 1322 0 1 + 1324:1319(i16vec2) GroupNonUniformIAdd 42 Reduce 1323 + 1325: 1313(ptr) AccessChain 34(data) 1318 59 38 + 1326: 21(int16_t) CompositeExtract 1324 0 + Store 1325 1326 + 1327: 1313(ptr) AccessChain 34(data) 1318 59 55 + 1328: 21(int16_t) CompositeExtract 1324 1 + Store 1327 1328 + 1329: 6(int) Load 8(invocation) + 1331: 1320(ptr) AccessChain 34(data) 59 59 + 1332: 22(i16vec4) Load 1331 + 1333:1330(i16vec3) VectorShuffle 1332 1332 0 1 2 + 1334:1330(i16vec3) GroupNonUniformIAdd 42 Reduce 1333 + 1335: 1313(ptr) AccessChain 34(data) 1329 59 38 + 1336: 21(int16_t) CompositeExtract 1334 0 + Store 1335 1336 + 1337: 1313(ptr) AccessChain 34(data) 1329 59 55 + 1338: 21(int16_t) CompositeExtract 1334 1 + Store 1337 1338 + 1339: 1313(ptr) AccessChain 34(data) 1329 59 69 + 1340: 21(int16_t) CompositeExtract 1334 2 + Store 1339 1340 1341: 6(int) Load 8(invocation) - 1342: 1150(ptr) AccessChain 34(data) 57 57 + 1342: 1320(ptr) AccessChain 34(data) 73 59 1343: 22(i16vec4) Load 1342 - 1344:1159(i16vec3) VectorShuffle 1343 1343 0 1 2 - 1345:1159(i16vec3) GroupNonUniformIAdd 42 InclusiveScan 1344 - 1346: 1150(ptr) AccessChain 34(data) 1341 57 - 1347: 22(i16vec4) Load 1346 - 1348: 22(i16vec4) VectorShuffle 1347 1345 4 5 6 3 - Store 1346 1348 - 1349: 6(int) Load 8(invocation) - 1350: 1150(ptr) AccessChain 34(data) 67 57 - 1351: 22(i16vec4) Load 1350 - 1352: 22(i16vec4) GroupNonUniformIAdd 42 InclusiveScan 1351 - 1353: 1150(ptr) AccessChain 34(data) 1349 57 - Store 1353 1352 - 1354: 6(int) Load 8(invocation) - 1355: 1143(ptr) AccessChain 34(data) 37 57 38 - 1356: 21(int16_t) Load 1355 - 1357: 21(int16_t) GroupNonUniformIMul 42 InclusiveScan 1356 - 1358: 1143(ptr) AccessChain 34(data) 1354 57 38 - Store 1358 1357 - 1359: 6(int) Load 8(invocation) - 1360: 1150(ptr) AccessChain 34(data) 46 57 - 1361: 22(i16vec4) Load 1360 - 1362:1149(i16vec2) VectorShuffle 1361 1361 0 1 - 1363:1149(i16vec2) GroupNonUniformIMul 42 InclusiveScan 1362 - 1364: 1150(ptr) AccessChain 34(data) 1359 57 - 1365: 22(i16vec4) Load 1364 - 1366: 22(i16vec4) VectorShuffle 1365 1363 4 5 2 3 - Store 1364 1366 - 1367: 6(int) Load 8(invocation) - 1368: 1150(ptr) AccessChain 34(data) 57 57 - 1369: 22(i16vec4) Load 1368 - 1370:1159(i16vec3) VectorShuffle 1369 1369 0 1 2 - 1371:1159(i16vec3) GroupNonUniformIMul 42 InclusiveScan 1370 - 1372: 1150(ptr) AccessChain 34(data) 1367 57 + 1344: 22(i16vec4) GroupNonUniformIAdd 42 Reduce 1343 + 1345: 1320(ptr) AccessChain 34(data) 1341 59 + Store 1345 1344 + 1346: 6(int) Load 8(invocation) + 1347: 1313(ptr) AccessChain 34(data) 37 59 38 + 1348: 21(int16_t) Load 1347 + 1349: 21(int16_t) GroupNonUniformIMul 42 Reduce 1348 + 1350: 1313(ptr) AccessChain 34(data) 1346 59 38 + Store 1350 1349 + 1351: 6(int) Load 8(invocation) + 1352: 1320(ptr) AccessChain 34(data) 46 59 + 1353: 22(i16vec4) Load 1352 + 1354:1319(i16vec2) VectorShuffle 1353 1353 0 1 + 1355:1319(i16vec2) GroupNonUniformIMul 42 Reduce 1354 + 1356: 1313(ptr) AccessChain 34(data) 1351 59 38 + 1357: 21(int16_t) CompositeExtract 1355 0 + Store 1356 1357 + 1358: 1313(ptr) AccessChain 34(data) 1351 59 55 + 1359: 21(int16_t) CompositeExtract 1355 1 + Store 1358 1359 + 1360: 6(int) Load 8(invocation) + 1361: 1320(ptr) AccessChain 34(data) 59 59 + 1362: 22(i16vec4) Load 1361 + 1363:1330(i16vec3) VectorShuffle 1362 1362 0 1 2 + 1364:1330(i16vec3) GroupNonUniformIMul 42 Reduce 1363 + 1365: 1313(ptr) AccessChain 34(data) 1360 59 38 + 1366: 21(int16_t) CompositeExtract 1364 0 + Store 1365 1366 + 1367: 1313(ptr) AccessChain 34(data) 1360 59 55 + 1368: 21(int16_t) CompositeExtract 1364 1 + Store 1367 1368 + 1369: 1313(ptr) AccessChain 34(data) 1360 59 69 + 1370: 21(int16_t) CompositeExtract 1364 2 + Store 1369 1370 + 1371: 6(int) Load 8(invocation) + 1372: 1320(ptr) AccessChain 34(data) 73 59 1373: 22(i16vec4) Load 1372 - 1374: 22(i16vec4) VectorShuffle 1373 1371 4 5 6 3 - Store 1372 1374 - 1375: 6(int) Load 8(invocation) - 1376: 1150(ptr) AccessChain 34(data) 67 57 - 1377: 22(i16vec4) Load 1376 - 1378: 22(i16vec4) GroupNonUniformIMul 42 InclusiveScan 1377 - 1379: 1150(ptr) AccessChain 34(data) 1375 57 - Store 1379 1378 - 1380: 6(int) Load 8(invocation) - 1381: 1143(ptr) AccessChain 34(data) 37 57 38 - 1382: 21(int16_t) Load 1381 - 1383: 21(int16_t) GroupNonUniformSMin 42 InclusiveScan 1382 - 1384: 1143(ptr) AccessChain 34(data) 1380 57 38 - Store 1384 1383 - 1385: 6(int) Load 8(invocation) - 1386: 1150(ptr) AccessChain 34(data) 46 57 - 1387: 22(i16vec4) Load 1386 - 1388:1149(i16vec2) VectorShuffle 1387 1387 0 1 - 1389:1149(i16vec2) GroupNonUniformSMin 42 InclusiveScan 1388 - 1390: 1150(ptr) AccessChain 34(data) 1385 57 - 1391: 22(i16vec4) Load 1390 - 1392: 22(i16vec4) VectorShuffle 1391 1389 4 5 2 3 - Store 1390 1392 - 1393: 6(int) Load 8(invocation) - 1394: 1150(ptr) AccessChain 34(data) 57 57 - 1395: 22(i16vec4) Load 1394 - 1396:1159(i16vec3) VectorShuffle 1395 1395 0 1 2 - 1397:1159(i16vec3) GroupNonUniformSMin 42 InclusiveScan 1396 - 1398: 1150(ptr) AccessChain 34(data) 1393 57 - 1399: 22(i16vec4) Load 1398 - 1400: 22(i16vec4) VectorShuffle 1399 1397 4 5 6 3 - Store 1398 1400 + 1374: 22(i16vec4) GroupNonUniformIMul 42 Reduce 1373 + 1375: 1320(ptr) AccessChain 34(data) 1371 59 + Store 1375 1374 + 1376: 6(int) Load 8(invocation) + 1377: 1313(ptr) AccessChain 34(data) 37 59 38 + 1378: 21(int16_t) Load 1377 + 1379: 21(int16_t) GroupNonUniformSMin 42 Reduce 1378 + 1380: 1313(ptr) AccessChain 34(data) 1376 59 38 + Store 1380 1379 + 1381: 6(int) Load 8(invocation) + 1382: 1320(ptr) AccessChain 34(data) 46 59 + 1383: 22(i16vec4) Load 1382 + 1384:1319(i16vec2) VectorShuffle 1383 1383 0 1 + 1385:1319(i16vec2) GroupNonUniformSMin 42 Reduce 1384 + 1386: 1313(ptr) AccessChain 34(data) 1381 59 38 + 1387: 21(int16_t) CompositeExtract 1385 0 + Store 1386 1387 + 1388: 1313(ptr) AccessChain 34(data) 1381 59 55 + 1389: 21(int16_t) CompositeExtract 1385 1 + Store 1388 1389 + 1390: 6(int) Load 8(invocation) + 1391: 1320(ptr) AccessChain 34(data) 59 59 + 1392: 22(i16vec4) Load 1391 + 1393:1330(i16vec3) VectorShuffle 1392 1392 0 1 2 + 1394:1330(i16vec3) GroupNonUniformSMin 42 Reduce 1393 + 1395: 1313(ptr) AccessChain 34(data) 1390 59 38 + 1396: 21(int16_t) CompositeExtract 1394 0 + Store 1395 1396 + 1397: 1313(ptr) AccessChain 34(data) 1390 59 55 + 1398: 21(int16_t) CompositeExtract 1394 1 + Store 1397 1398 + 1399: 1313(ptr) AccessChain 34(data) 1390 59 69 + 1400: 21(int16_t) CompositeExtract 1394 2 + Store 1399 1400 1401: 6(int) Load 8(invocation) - 1402: 1150(ptr) AccessChain 34(data) 67 57 + 1402: 1320(ptr) AccessChain 34(data) 73 59 1403: 22(i16vec4) Load 1402 - 1404: 22(i16vec4) GroupNonUniformSMin 42 InclusiveScan 1403 - 1405: 1150(ptr) AccessChain 34(data) 1401 57 + 1404: 22(i16vec4) GroupNonUniformSMin 42 Reduce 1403 + 1405: 1320(ptr) AccessChain 34(data) 1401 59 Store 1405 1404 1406: 6(int) Load 8(invocation) - 1407: 1143(ptr) AccessChain 34(data) 37 57 38 + 1407: 1313(ptr) AccessChain 34(data) 37 59 38 1408: 21(int16_t) Load 1407 - 1409: 21(int16_t) GroupNonUniformSMax 42 InclusiveScan 1408 - 1410: 1143(ptr) AccessChain 34(data) 1406 57 38 + 1409: 21(int16_t) GroupNonUniformSMax 42 Reduce 1408 + 1410: 1313(ptr) AccessChain 34(data) 1406 59 38 Store 1410 1409 1411: 6(int) Load 8(invocation) - 1412: 1150(ptr) AccessChain 34(data) 46 57 + 1412: 1320(ptr) AccessChain 34(data) 46 59 1413: 22(i16vec4) Load 1412 - 1414:1149(i16vec2) VectorShuffle 1413 1413 0 1 - 1415:1149(i16vec2) GroupNonUniformSMax 42 InclusiveScan 1414 - 1416: 1150(ptr) AccessChain 34(data) 1411 57 - 1417: 22(i16vec4) Load 1416 - 1418: 22(i16vec4) VectorShuffle 1417 1415 4 5 2 3 - Store 1416 1418 - 1419: 6(int) Load 8(invocation) - 1420: 1150(ptr) AccessChain 34(data) 57 57 - 1421: 22(i16vec4) Load 1420 - 1422:1159(i16vec3) VectorShuffle 1421 1421 0 1 2 - 1423:1159(i16vec3) GroupNonUniformSMax 42 InclusiveScan 1422 - 1424: 1150(ptr) AccessChain 34(data) 1419 57 - 1425: 22(i16vec4) Load 1424 - 1426: 22(i16vec4) VectorShuffle 1425 1423 4 5 6 3 - Store 1424 1426 - 1427: 6(int) Load 8(invocation) - 1428: 1150(ptr) AccessChain 34(data) 67 57 - 1429: 22(i16vec4) Load 1428 - 1430: 22(i16vec4) GroupNonUniformSMax 42 InclusiveScan 1429 - 1431: 1150(ptr) AccessChain 34(data) 1427 57 - Store 1431 1430 - 1432: 6(int) Load 8(invocation) - 1433: 1143(ptr) AccessChain 34(data) 37 57 38 - 1434: 21(int16_t) Load 1433 - 1435: 21(int16_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 1434 - 1436: 1143(ptr) AccessChain 34(data) 1432 57 38 - Store 1436 1435 - 1437: 6(int) Load 8(invocation) - 1438: 1150(ptr) AccessChain 34(data) 46 57 - 1439: 22(i16vec4) Load 1438 - 1440:1149(i16vec2) VectorShuffle 1439 1439 0 1 - 1441:1149(i16vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 1440 - 1442: 1150(ptr) AccessChain 34(data) 1437 57 + 1414:1319(i16vec2) VectorShuffle 1413 1413 0 1 + 1415:1319(i16vec2) GroupNonUniformSMax 42 Reduce 1414 + 1416: 1313(ptr) AccessChain 34(data) 1411 59 38 + 1417: 21(int16_t) CompositeExtract 1415 0 + Store 1416 1417 + 1418: 1313(ptr) AccessChain 34(data) 1411 59 55 + 1419: 21(int16_t) CompositeExtract 1415 1 + Store 1418 1419 + 1420: 6(int) Load 8(invocation) + 1421: 1320(ptr) AccessChain 34(data) 59 59 + 1422: 22(i16vec4) Load 1421 + 1423:1330(i16vec3) VectorShuffle 1422 1422 0 1 2 + 1424:1330(i16vec3) GroupNonUniformSMax 42 Reduce 1423 + 1425: 1313(ptr) AccessChain 34(data) 1420 59 38 + 1426: 21(int16_t) CompositeExtract 1424 0 + Store 1425 1426 + 1427: 1313(ptr) AccessChain 34(data) 1420 59 55 + 1428: 21(int16_t) CompositeExtract 1424 1 + Store 1427 1428 + 1429: 1313(ptr) AccessChain 34(data) 1420 59 69 + 1430: 21(int16_t) CompositeExtract 1424 2 + Store 1429 1430 + 1431: 6(int) Load 8(invocation) + 1432: 1320(ptr) AccessChain 34(data) 73 59 + 1433: 22(i16vec4) Load 1432 + 1434: 22(i16vec4) GroupNonUniformSMax 42 Reduce 1433 + 1435: 1320(ptr) AccessChain 34(data) 1431 59 + Store 1435 1434 + 1436: 6(int) Load 8(invocation) + 1437: 1313(ptr) AccessChain 34(data) 37 59 38 + 1438: 21(int16_t) Load 1437 + 1439: 21(int16_t) GroupNonUniformBitwiseAnd 42 Reduce 1438 + 1440: 1313(ptr) AccessChain 34(data) 1436 59 38 + Store 1440 1439 + 1441: 6(int) Load 8(invocation) + 1442: 1320(ptr) AccessChain 34(data) 46 59 1443: 22(i16vec4) Load 1442 - 1444: 22(i16vec4) VectorShuffle 1443 1441 4 5 2 3 - Store 1442 1444 - 1445: 6(int) Load 8(invocation) - 1446: 1150(ptr) AccessChain 34(data) 57 57 - 1447: 22(i16vec4) Load 1446 - 1448:1159(i16vec3) VectorShuffle 1447 1447 0 1 2 - 1449:1159(i16vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 1448 - 1450: 1150(ptr) AccessChain 34(data) 1445 57 - 1451: 22(i16vec4) Load 1450 - 1452: 22(i16vec4) VectorShuffle 1451 1449 4 5 6 3 - Store 1450 1452 - 1453: 6(int) Load 8(invocation) - 1454: 1150(ptr) AccessChain 34(data) 67 57 - 1455: 22(i16vec4) Load 1454 - 1456: 22(i16vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 1455 - 1457: 1150(ptr) AccessChain 34(data) 1453 57 - Store 1457 1456 - 1458: 6(int) Load 8(invocation) - 1459: 1143(ptr) AccessChain 34(data) 37 57 38 - 1460: 21(int16_t) Load 1459 - 1461: 21(int16_t) GroupNonUniformBitwiseOr 42 InclusiveScan 1460 - 1462: 1143(ptr) AccessChain 34(data) 1458 57 38 - Store 1462 1461 - 1463: 6(int) Load 8(invocation) - 1464: 1150(ptr) AccessChain 34(data) 46 57 - 1465: 22(i16vec4) Load 1464 - 1466:1149(i16vec2) VectorShuffle 1465 1465 0 1 - 1467:1149(i16vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 1466 - 1468: 1150(ptr) AccessChain 34(data) 1463 57 - 1469: 22(i16vec4) Load 1468 - 1470: 22(i16vec4) VectorShuffle 1469 1467 4 5 2 3 - Store 1468 1470 + 1444:1319(i16vec2) VectorShuffle 1443 1443 0 1 + 1445:1319(i16vec2) GroupNonUniformBitwiseAnd 42 Reduce 1444 + 1446: 1313(ptr) AccessChain 34(data) 1441 59 38 + 1447: 21(int16_t) CompositeExtract 1445 0 + Store 1446 1447 + 1448: 1313(ptr) AccessChain 34(data) 1441 59 55 + 1449: 21(int16_t) CompositeExtract 1445 1 + Store 1448 1449 + 1450: 6(int) Load 8(invocation) + 1451: 1320(ptr) AccessChain 34(data) 59 59 + 1452: 22(i16vec4) Load 1451 + 1453:1330(i16vec3) VectorShuffle 1452 1452 0 1 2 + 1454:1330(i16vec3) GroupNonUniformBitwiseAnd 42 Reduce 1453 + 1455: 1313(ptr) AccessChain 34(data) 1450 59 38 + 1456: 21(int16_t) CompositeExtract 1454 0 + Store 1455 1456 + 1457: 1313(ptr) AccessChain 34(data) 1450 59 55 + 1458: 21(int16_t) CompositeExtract 1454 1 + Store 1457 1458 + 1459: 1313(ptr) AccessChain 34(data) 1450 59 69 + 1460: 21(int16_t) CompositeExtract 1454 2 + Store 1459 1460 + 1461: 6(int) Load 8(invocation) + 1462: 1320(ptr) AccessChain 34(data) 73 59 + 1463: 22(i16vec4) Load 1462 + 1464: 22(i16vec4) GroupNonUniformBitwiseAnd 42 Reduce 1463 + 1465: 1320(ptr) AccessChain 34(data) 1461 59 + Store 1465 1464 + 1466: 6(int) Load 8(invocation) + 1467: 1313(ptr) AccessChain 34(data) 37 59 38 + 1468: 21(int16_t) Load 1467 + 1469: 21(int16_t) GroupNonUniformBitwiseOr 42 Reduce 1468 + 1470: 1313(ptr) AccessChain 34(data) 1466 59 38 + Store 1470 1469 1471: 6(int) Load 8(invocation) - 1472: 1150(ptr) AccessChain 34(data) 57 57 + 1472: 1320(ptr) AccessChain 34(data) 46 59 1473: 22(i16vec4) Load 1472 - 1474:1159(i16vec3) VectorShuffle 1473 1473 0 1 2 - 1475:1159(i16vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 1474 - 1476: 1150(ptr) AccessChain 34(data) 1471 57 - 1477: 22(i16vec4) Load 1476 - 1478: 22(i16vec4) VectorShuffle 1477 1475 4 5 6 3 - Store 1476 1478 - 1479: 6(int) Load 8(invocation) - 1480: 1150(ptr) AccessChain 34(data) 67 57 - 1481: 22(i16vec4) Load 1480 - 1482: 22(i16vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 1481 - 1483: 1150(ptr) AccessChain 34(data) 1479 57 - Store 1483 1482 - 1484: 6(int) Load 8(invocation) - 1485: 1143(ptr) AccessChain 34(data) 37 57 38 - 1486: 21(int16_t) Load 1485 - 1487: 21(int16_t) GroupNonUniformBitwiseXor 42 InclusiveScan 1486 - 1488: 1143(ptr) AccessChain 34(data) 1484 57 38 - Store 1488 1487 - 1489: 6(int) Load 8(invocation) - 1490: 1150(ptr) AccessChain 34(data) 46 57 - 1491: 22(i16vec4) Load 1490 - 1492:1149(i16vec2) VectorShuffle 1491 1491 0 1 - 1493:1149(i16vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 1492 - 1494: 1150(ptr) AccessChain 34(data) 1489 57 - 1495: 22(i16vec4) Load 1494 - 1496: 22(i16vec4) VectorShuffle 1495 1493 4 5 2 3 - Store 1494 1496 - 1497: 6(int) Load 8(invocation) - 1498: 1150(ptr) AccessChain 34(data) 57 57 - 1499: 22(i16vec4) Load 1498 - 1500:1159(i16vec3) VectorShuffle 1499 1499 0 1 2 - 1501:1159(i16vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 1500 - 1502: 1150(ptr) AccessChain 34(data) 1497 57 + 1474:1319(i16vec2) VectorShuffle 1473 1473 0 1 + 1475:1319(i16vec2) GroupNonUniformBitwiseOr 42 Reduce 1474 + 1476: 1313(ptr) AccessChain 34(data) 1471 59 38 + 1477: 21(int16_t) CompositeExtract 1475 0 + Store 1476 1477 + 1478: 1313(ptr) AccessChain 34(data) 1471 59 55 + 1479: 21(int16_t) CompositeExtract 1475 1 + Store 1478 1479 + 1480: 6(int) Load 8(invocation) + 1481: 1320(ptr) AccessChain 34(data) 59 59 + 1482: 22(i16vec4) Load 1481 + 1483:1330(i16vec3) VectorShuffle 1482 1482 0 1 2 + 1484:1330(i16vec3) GroupNonUniformBitwiseOr 42 Reduce 1483 + 1485: 1313(ptr) AccessChain 34(data) 1480 59 38 + 1486: 21(int16_t) CompositeExtract 1484 0 + Store 1485 1486 + 1487: 1313(ptr) AccessChain 34(data) 1480 59 55 + 1488: 21(int16_t) CompositeExtract 1484 1 + Store 1487 1488 + 1489: 1313(ptr) AccessChain 34(data) 1480 59 69 + 1490: 21(int16_t) CompositeExtract 1484 2 + Store 1489 1490 + 1491: 6(int) Load 8(invocation) + 1492: 1320(ptr) AccessChain 34(data) 73 59 + 1493: 22(i16vec4) Load 1492 + 1494: 22(i16vec4) GroupNonUniformBitwiseOr 42 Reduce 1493 + 1495: 1320(ptr) AccessChain 34(data) 1491 59 + Store 1495 1494 + 1496: 6(int) Load 8(invocation) + 1497: 1313(ptr) AccessChain 34(data) 37 59 38 + 1498: 21(int16_t) Load 1497 + 1499: 21(int16_t) GroupNonUniformBitwiseXor 42 Reduce 1498 + 1500: 1313(ptr) AccessChain 34(data) 1496 59 38 + Store 1500 1499 + 1501: 6(int) Load 8(invocation) + 1502: 1320(ptr) AccessChain 34(data) 46 59 1503: 22(i16vec4) Load 1502 - 1504: 22(i16vec4) VectorShuffle 1503 1501 4 5 6 3 - Store 1502 1504 - 1505: 6(int) Load 8(invocation) - 1506: 1150(ptr) AccessChain 34(data) 67 57 - 1507: 22(i16vec4) Load 1506 - 1508: 22(i16vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 1507 - 1509: 1150(ptr) AccessChain 34(data) 1505 57 - Store 1509 1508 + 1504:1319(i16vec2) VectorShuffle 1503 1503 0 1 + 1505:1319(i16vec2) GroupNonUniformBitwiseXor 42 Reduce 1504 + 1506: 1313(ptr) AccessChain 34(data) 1501 59 38 + 1507: 21(int16_t) CompositeExtract 1505 0 + Store 1506 1507 + 1508: 1313(ptr) AccessChain 34(data) 1501 59 55 + 1509: 21(int16_t) CompositeExtract 1505 1 + Store 1508 1509 1510: 6(int) Load 8(invocation) - 1511: 1143(ptr) AccessChain 34(data) 37 57 38 - 1512: 21(int16_t) Load 1511 - 1513: 21(int16_t) GroupNonUniformIAdd 42 ExclusiveScan 1512 - 1514: 1143(ptr) AccessChain 34(data) 1510 57 38 - Store 1514 1513 - 1515: 6(int) Load 8(invocation) - 1516: 1150(ptr) AccessChain 34(data) 46 57 - 1517: 22(i16vec4) Load 1516 - 1518:1149(i16vec2) VectorShuffle 1517 1517 0 1 - 1519:1149(i16vec2) GroupNonUniformIAdd 42 ExclusiveScan 1518 - 1520: 1150(ptr) AccessChain 34(data) 1515 57 - 1521: 22(i16vec4) Load 1520 - 1522: 22(i16vec4) VectorShuffle 1521 1519 4 5 2 3 - Store 1520 1522 - 1523: 6(int) Load 8(invocation) - 1524: 1150(ptr) AccessChain 34(data) 57 57 - 1525: 22(i16vec4) Load 1524 - 1526:1159(i16vec3) VectorShuffle 1525 1525 0 1 2 - 1527:1159(i16vec3) GroupNonUniformIAdd 42 ExclusiveScan 1526 - 1528: 1150(ptr) AccessChain 34(data) 1523 57 - 1529: 22(i16vec4) Load 1528 - 1530: 22(i16vec4) VectorShuffle 1529 1527 4 5 6 3 - Store 1528 1530 + 1511: 1320(ptr) AccessChain 34(data) 59 59 + 1512: 22(i16vec4) Load 1511 + 1513:1330(i16vec3) VectorShuffle 1512 1512 0 1 2 + 1514:1330(i16vec3) GroupNonUniformBitwiseXor 42 Reduce 1513 + 1515: 1313(ptr) AccessChain 34(data) 1510 59 38 + 1516: 21(int16_t) CompositeExtract 1514 0 + Store 1515 1516 + 1517: 1313(ptr) AccessChain 34(data) 1510 59 55 + 1518: 21(int16_t) CompositeExtract 1514 1 + Store 1517 1518 + 1519: 1313(ptr) AccessChain 34(data) 1510 59 69 + 1520: 21(int16_t) CompositeExtract 1514 2 + Store 1519 1520 + 1521: 6(int) Load 8(invocation) + 1522: 1320(ptr) AccessChain 34(data) 73 59 + 1523: 22(i16vec4) Load 1522 + 1524: 22(i16vec4) GroupNonUniformBitwiseXor 42 Reduce 1523 + 1525: 1320(ptr) AccessChain 34(data) 1521 59 + Store 1525 1524 + 1526: 6(int) Load 8(invocation) + 1527: 1313(ptr) AccessChain 34(data) 37 59 38 + 1528: 21(int16_t) Load 1527 + 1529: 21(int16_t) GroupNonUniformIAdd 42 InclusiveScan 1528 + 1530: 1313(ptr) AccessChain 34(data) 1526 59 38 + Store 1530 1529 1531: 6(int) Load 8(invocation) - 1532: 1150(ptr) AccessChain 34(data) 67 57 + 1532: 1320(ptr) AccessChain 34(data) 46 59 1533: 22(i16vec4) Load 1532 - 1534: 22(i16vec4) GroupNonUniformIAdd 42 ExclusiveScan 1533 - 1535: 1150(ptr) AccessChain 34(data) 1531 57 - Store 1535 1534 - 1536: 6(int) Load 8(invocation) - 1537: 1143(ptr) AccessChain 34(data) 37 57 38 - 1538: 21(int16_t) Load 1537 - 1539: 21(int16_t) GroupNonUniformIMul 42 ExclusiveScan 1538 - 1540: 1143(ptr) AccessChain 34(data) 1536 57 38 - Store 1540 1539 - 1541: 6(int) Load 8(invocation) - 1542: 1150(ptr) AccessChain 34(data) 46 57 - 1543: 22(i16vec4) Load 1542 - 1544:1149(i16vec2) VectorShuffle 1543 1543 0 1 - 1545:1149(i16vec2) GroupNonUniformIMul 42 ExclusiveScan 1544 - 1546: 1150(ptr) AccessChain 34(data) 1541 57 - 1547: 22(i16vec4) Load 1546 - 1548: 22(i16vec4) VectorShuffle 1547 1545 4 5 2 3 - Store 1546 1548 - 1549: 6(int) Load 8(invocation) - 1550: 1150(ptr) AccessChain 34(data) 57 57 - 1551: 22(i16vec4) Load 1550 - 1552:1159(i16vec3) VectorShuffle 1551 1551 0 1 2 - 1553:1159(i16vec3) GroupNonUniformIMul 42 ExclusiveScan 1552 - 1554: 1150(ptr) AccessChain 34(data) 1549 57 - 1555: 22(i16vec4) Load 1554 - 1556: 22(i16vec4) VectorShuffle 1555 1553 4 5 6 3 - Store 1554 1556 - 1557: 6(int) Load 8(invocation) - 1558: 1150(ptr) AccessChain 34(data) 67 57 - 1559: 22(i16vec4) Load 1558 - 1560: 22(i16vec4) GroupNonUniformIMul 42 ExclusiveScan 1559 - 1561: 1150(ptr) AccessChain 34(data) 1557 57 - Store 1561 1560 - 1562: 6(int) Load 8(invocation) - 1563: 1143(ptr) AccessChain 34(data) 37 57 38 - 1564: 21(int16_t) Load 1563 - 1565: 21(int16_t) GroupNonUniformSMin 42 ExclusiveScan 1564 - 1566: 1143(ptr) AccessChain 34(data) 1562 57 38 - Store 1566 1565 - 1567: 6(int) Load 8(invocation) - 1568: 1150(ptr) AccessChain 34(data) 46 57 - 1569: 22(i16vec4) Load 1568 - 1570:1149(i16vec2) VectorShuffle 1569 1569 0 1 - 1571:1149(i16vec2) GroupNonUniformSMin 42 ExclusiveScan 1570 - 1572: 1150(ptr) AccessChain 34(data) 1567 57 - 1573: 22(i16vec4) Load 1572 - 1574: 22(i16vec4) VectorShuffle 1573 1571 4 5 2 3 - Store 1572 1574 - 1575: 6(int) Load 8(invocation) - 1576: 1150(ptr) AccessChain 34(data) 57 57 - 1577: 22(i16vec4) Load 1576 - 1578:1159(i16vec3) VectorShuffle 1577 1577 0 1 2 - 1579:1159(i16vec3) GroupNonUniformSMin 42 ExclusiveScan 1578 - 1580: 1150(ptr) AccessChain 34(data) 1575 57 - 1581: 22(i16vec4) Load 1580 - 1582: 22(i16vec4) VectorShuffle 1581 1579 4 5 6 3 - Store 1580 1582 - 1583: 6(int) Load 8(invocation) - 1584: 1150(ptr) AccessChain 34(data) 67 57 - 1585: 22(i16vec4) Load 1584 - 1586: 22(i16vec4) GroupNonUniformSMin 42 ExclusiveScan 1585 - 1587: 1150(ptr) AccessChain 34(data) 1583 57 - Store 1587 1586 - 1588: 6(int) Load 8(invocation) - 1589: 1143(ptr) AccessChain 34(data) 37 57 38 - 1590: 21(int16_t) Load 1589 - 1591: 21(int16_t) GroupNonUniformSMax 42 ExclusiveScan 1590 - 1592: 1143(ptr) AccessChain 34(data) 1588 57 38 - Store 1592 1591 - 1593: 6(int) Load 8(invocation) - 1594: 1150(ptr) AccessChain 34(data) 46 57 - 1595: 22(i16vec4) Load 1594 - 1596:1149(i16vec2) VectorShuffle 1595 1595 0 1 - 1597:1149(i16vec2) GroupNonUniformSMax 42 ExclusiveScan 1596 - 1598: 1150(ptr) AccessChain 34(data) 1593 57 - 1599: 22(i16vec4) Load 1598 - 1600: 22(i16vec4) VectorShuffle 1599 1597 4 5 2 3 - Store 1598 1600 - 1601: 6(int) Load 8(invocation) - 1602: 1150(ptr) AccessChain 34(data) 57 57 - 1603: 22(i16vec4) Load 1602 - 1604:1159(i16vec3) VectorShuffle 1603 1603 0 1 2 - 1605:1159(i16vec3) GroupNonUniformSMax 42 ExclusiveScan 1604 - 1606: 1150(ptr) AccessChain 34(data) 1601 57 - 1607: 22(i16vec4) Load 1606 - 1608: 22(i16vec4) VectorShuffle 1607 1605 4 5 6 3 - Store 1606 1608 - 1609: 6(int) Load 8(invocation) - 1610: 1150(ptr) AccessChain 34(data) 67 57 - 1611: 22(i16vec4) Load 1610 - 1612: 22(i16vec4) GroupNonUniformSMax 42 ExclusiveScan 1611 - 1613: 1150(ptr) AccessChain 34(data) 1609 57 - Store 1613 1612 - 1614: 6(int) Load 8(invocation) - 1615: 1143(ptr) AccessChain 34(data) 37 57 38 - 1616: 21(int16_t) Load 1615 - 1617: 21(int16_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1616 - 1618: 1143(ptr) AccessChain 34(data) 1614 57 38 - Store 1618 1617 - 1619: 6(int) Load 8(invocation) - 1620: 1150(ptr) AccessChain 34(data) 46 57 - 1621: 22(i16vec4) Load 1620 - 1622:1149(i16vec2) VectorShuffle 1621 1621 0 1 - 1623:1149(i16vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1622 - 1624: 1150(ptr) AccessChain 34(data) 1619 57 - 1625: 22(i16vec4) Load 1624 - 1626: 22(i16vec4) VectorShuffle 1625 1623 4 5 2 3 - Store 1624 1626 - 1627: 6(int) Load 8(invocation) - 1628: 1150(ptr) AccessChain 34(data) 57 57 - 1629: 22(i16vec4) Load 1628 - 1630:1159(i16vec3) VectorShuffle 1629 1629 0 1 2 - 1631:1159(i16vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1630 - 1632: 1150(ptr) AccessChain 34(data) 1627 57 - 1633: 22(i16vec4) Load 1632 - 1634: 22(i16vec4) VectorShuffle 1633 1631 4 5 6 3 - Store 1632 1634 - 1635: 6(int) Load 8(invocation) - 1636: 1150(ptr) AccessChain 34(data) 67 57 - 1637: 22(i16vec4) Load 1636 - 1638: 22(i16vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1637 - 1639: 1150(ptr) AccessChain 34(data) 1635 57 - Store 1639 1638 - 1640: 6(int) Load 8(invocation) - 1641: 1143(ptr) AccessChain 34(data) 37 57 38 - 1642: 21(int16_t) Load 1641 - 1643: 21(int16_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 1642 - 1644: 1143(ptr) AccessChain 34(data) 1640 57 38 - Store 1644 1643 - 1645: 6(int) Load 8(invocation) - 1646: 1150(ptr) AccessChain 34(data) 46 57 - 1647: 22(i16vec4) Load 1646 - 1648:1149(i16vec2) VectorShuffle 1647 1647 0 1 - 1649:1149(i16vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 1648 - 1650: 1150(ptr) AccessChain 34(data) 1645 57 - 1651: 22(i16vec4) Load 1650 - 1652: 22(i16vec4) VectorShuffle 1651 1649 4 5 2 3 - Store 1650 1652 - 1653: 6(int) Load 8(invocation) - 1654: 1150(ptr) AccessChain 34(data) 57 57 - 1655: 22(i16vec4) Load 1654 - 1656:1159(i16vec3) VectorShuffle 1655 1655 0 1 2 - 1657:1159(i16vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 1656 - 1658: 1150(ptr) AccessChain 34(data) 1653 57 - 1659: 22(i16vec4) Load 1658 - 1660: 22(i16vec4) VectorShuffle 1659 1657 4 5 6 3 - Store 1658 1660 - 1661: 6(int) Load 8(invocation) - 1662: 1150(ptr) AccessChain 34(data) 67 57 - 1663: 22(i16vec4) Load 1662 - 1664: 22(i16vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 1663 - 1665: 1150(ptr) AccessChain 34(data) 1661 57 - Store 1665 1664 - 1666: 6(int) Load 8(invocation) - 1667: 1143(ptr) AccessChain 34(data) 37 57 38 - 1668: 21(int16_t) Load 1667 - 1669: 21(int16_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 1668 - 1670: 1143(ptr) AccessChain 34(data) 1666 57 38 - Store 1670 1669 + 1534:1319(i16vec2) VectorShuffle 1533 1533 0 1 + 1535:1319(i16vec2) GroupNonUniformIAdd 42 InclusiveScan 1534 + 1536: 1313(ptr) AccessChain 34(data) 1531 59 38 + 1537: 21(int16_t) CompositeExtract 1535 0 + Store 1536 1537 + 1538: 1313(ptr) AccessChain 34(data) 1531 59 55 + 1539: 21(int16_t) CompositeExtract 1535 1 + Store 1538 1539 + 1540: 6(int) Load 8(invocation) + 1541: 1320(ptr) AccessChain 34(data) 59 59 + 1542: 22(i16vec4) Load 1541 + 1543:1330(i16vec3) VectorShuffle 1542 1542 0 1 2 + 1544:1330(i16vec3) GroupNonUniformIAdd 42 InclusiveScan 1543 + 1545: 1313(ptr) AccessChain 34(data) 1540 59 38 + 1546: 21(int16_t) CompositeExtract 1544 0 + Store 1545 1546 + 1547: 1313(ptr) AccessChain 34(data) 1540 59 55 + 1548: 21(int16_t) CompositeExtract 1544 1 + Store 1547 1548 + 1549: 1313(ptr) AccessChain 34(data) 1540 59 69 + 1550: 21(int16_t) CompositeExtract 1544 2 + Store 1549 1550 + 1551: 6(int) Load 8(invocation) + 1552: 1320(ptr) AccessChain 34(data) 73 59 + 1553: 22(i16vec4) Load 1552 + 1554: 22(i16vec4) GroupNonUniformIAdd 42 InclusiveScan 1553 + 1555: 1320(ptr) AccessChain 34(data) 1551 59 + Store 1555 1554 + 1556: 6(int) Load 8(invocation) + 1557: 1313(ptr) AccessChain 34(data) 37 59 38 + 1558: 21(int16_t) Load 1557 + 1559: 21(int16_t) GroupNonUniformIMul 42 InclusiveScan 1558 + 1560: 1313(ptr) AccessChain 34(data) 1556 59 38 + Store 1560 1559 + 1561: 6(int) Load 8(invocation) + 1562: 1320(ptr) AccessChain 34(data) 46 59 + 1563: 22(i16vec4) Load 1562 + 1564:1319(i16vec2) VectorShuffle 1563 1563 0 1 + 1565:1319(i16vec2) GroupNonUniformIMul 42 InclusiveScan 1564 + 1566: 1313(ptr) AccessChain 34(data) 1561 59 38 + 1567: 21(int16_t) CompositeExtract 1565 0 + Store 1566 1567 + 1568: 1313(ptr) AccessChain 34(data) 1561 59 55 + 1569: 21(int16_t) CompositeExtract 1565 1 + Store 1568 1569 + 1570: 6(int) Load 8(invocation) + 1571: 1320(ptr) AccessChain 34(data) 59 59 + 1572: 22(i16vec4) Load 1571 + 1573:1330(i16vec3) VectorShuffle 1572 1572 0 1 2 + 1574:1330(i16vec3) GroupNonUniformIMul 42 InclusiveScan 1573 + 1575: 1313(ptr) AccessChain 34(data) 1570 59 38 + 1576: 21(int16_t) CompositeExtract 1574 0 + Store 1575 1576 + 1577: 1313(ptr) AccessChain 34(data) 1570 59 55 + 1578: 21(int16_t) CompositeExtract 1574 1 + Store 1577 1578 + 1579: 1313(ptr) AccessChain 34(data) 1570 59 69 + 1580: 21(int16_t) CompositeExtract 1574 2 + Store 1579 1580 + 1581: 6(int) Load 8(invocation) + 1582: 1320(ptr) AccessChain 34(data) 73 59 + 1583: 22(i16vec4) Load 1582 + 1584: 22(i16vec4) GroupNonUniformIMul 42 InclusiveScan 1583 + 1585: 1320(ptr) AccessChain 34(data) 1581 59 + Store 1585 1584 + 1586: 6(int) Load 8(invocation) + 1587: 1313(ptr) AccessChain 34(data) 37 59 38 + 1588: 21(int16_t) Load 1587 + 1589: 21(int16_t) GroupNonUniformSMin 42 InclusiveScan 1588 + 1590: 1313(ptr) AccessChain 34(data) 1586 59 38 + Store 1590 1589 + 1591: 6(int) Load 8(invocation) + 1592: 1320(ptr) AccessChain 34(data) 46 59 + 1593: 22(i16vec4) Load 1592 + 1594:1319(i16vec2) VectorShuffle 1593 1593 0 1 + 1595:1319(i16vec2) GroupNonUniformSMin 42 InclusiveScan 1594 + 1596: 1313(ptr) AccessChain 34(data) 1591 59 38 + 1597: 21(int16_t) CompositeExtract 1595 0 + Store 1596 1597 + 1598: 1313(ptr) AccessChain 34(data) 1591 59 55 + 1599: 21(int16_t) CompositeExtract 1595 1 + Store 1598 1599 + 1600: 6(int) Load 8(invocation) + 1601: 1320(ptr) AccessChain 34(data) 59 59 + 1602: 22(i16vec4) Load 1601 + 1603:1330(i16vec3) VectorShuffle 1602 1602 0 1 2 + 1604:1330(i16vec3) GroupNonUniformSMin 42 InclusiveScan 1603 + 1605: 1313(ptr) AccessChain 34(data) 1600 59 38 + 1606: 21(int16_t) CompositeExtract 1604 0 + Store 1605 1606 + 1607: 1313(ptr) AccessChain 34(data) 1600 59 55 + 1608: 21(int16_t) CompositeExtract 1604 1 + Store 1607 1608 + 1609: 1313(ptr) AccessChain 34(data) 1600 59 69 + 1610: 21(int16_t) CompositeExtract 1604 2 + Store 1609 1610 + 1611: 6(int) Load 8(invocation) + 1612: 1320(ptr) AccessChain 34(data) 73 59 + 1613: 22(i16vec4) Load 1612 + 1614: 22(i16vec4) GroupNonUniformSMin 42 InclusiveScan 1613 + 1615: 1320(ptr) AccessChain 34(data) 1611 59 + Store 1615 1614 + 1616: 6(int) Load 8(invocation) + 1617: 1313(ptr) AccessChain 34(data) 37 59 38 + 1618: 21(int16_t) Load 1617 + 1619: 21(int16_t) GroupNonUniformSMax 42 InclusiveScan 1618 + 1620: 1313(ptr) AccessChain 34(data) 1616 59 38 + Store 1620 1619 + 1621: 6(int) Load 8(invocation) + 1622: 1320(ptr) AccessChain 34(data) 46 59 + 1623: 22(i16vec4) Load 1622 + 1624:1319(i16vec2) VectorShuffle 1623 1623 0 1 + 1625:1319(i16vec2) GroupNonUniformSMax 42 InclusiveScan 1624 + 1626: 1313(ptr) AccessChain 34(data) 1621 59 38 + 1627: 21(int16_t) CompositeExtract 1625 0 + Store 1626 1627 + 1628: 1313(ptr) AccessChain 34(data) 1621 59 55 + 1629: 21(int16_t) CompositeExtract 1625 1 + Store 1628 1629 + 1630: 6(int) Load 8(invocation) + 1631: 1320(ptr) AccessChain 34(data) 59 59 + 1632: 22(i16vec4) Load 1631 + 1633:1330(i16vec3) VectorShuffle 1632 1632 0 1 2 + 1634:1330(i16vec3) GroupNonUniformSMax 42 InclusiveScan 1633 + 1635: 1313(ptr) AccessChain 34(data) 1630 59 38 + 1636: 21(int16_t) CompositeExtract 1634 0 + Store 1635 1636 + 1637: 1313(ptr) AccessChain 34(data) 1630 59 55 + 1638: 21(int16_t) CompositeExtract 1634 1 + Store 1637 1638 + 1639: 1313(ptr) AccessChain 34(data) 1630 59 69 + 1640: 21(int16_t) CompositeExtract 1634 2 + Store 1639 1640 + 1641: 6(int) Load 8(invocation) + 1642: 1320(ptr) AccessChain 34(data) 73 59 + 1643: 22(i16vec4) Load 1642 + 1644: 22(i16vec4) GroupNonUniformSMax 42 InclusiveScan 1643 + 1645: 1320(ptr) AccessChain 34(data) 1641 59 + Store 1645 1644 + 1646: 6(int) Load 8(invocation) + 1647: 1313(ptr) AccessChain 34(data) 37 59 38 + 1648: 21(int16_t) Load 1647 + 1649: 21(int16_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 1648 + 1650: 1313(ptr) AccessChain 34(data) 1646 59 38 + Store 1650 1649 + 1651: 6(int) Load 8(invocation) + 1652: 1320(ptr) AccessChain 34(data) 46 59 + 1653: 22(i16vec4) Load 1652 + 1654:1319(i16vec2) VectorShuffle 1653 1653 0 1 + 1655:1319(i16vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 1654 + 1656: 1313(ptr) AccessChain 34(data) 1651 59 38 + 1657: 21(int16_t) CompositeExtract 1655 0 + Store 1656 1657 + 1658: 1313(ptr) AccessChain 34(data) 1651 59 55 + 1659: 21(int16_t) CompositeExtract 1655 1 + Store 1658 1659 + 1660: 6(int) Load 8(invocation) + 1661: 1320(ptr) AccessChain 34(data) 59 59 + 1662: 22(i16vec4) Load 1661 + 1663:1330(i16vec3) VectorShuffle 1662 1662 0 1 2 + 1664:1330(i16vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 1663 + 1665: 1313(ptr) AccessChain 34(data) 1660 59 38 + 1666: 21(int16_t) CompositeExtract 1664 0 + Store 1665 1666 + 1667: 1313(ptr) AccessChain 34(data) 1660 59 55 + 1668: 21(int16_t) CompositeExtract 1664 1 + Store 1667 1668 + 1669: 1313(ptr) AccessChain 34(data) 1660 59 69 + 1670: 21(int16_t) CompositeExtract 1664 2 + Store 1669 1670 1671: 6(int) Load 8(invocation) - 1672: 1150(ptr) AccessChain 34(data) 46 57 + 1672: 1320(ptr) AccessChain 34(data) 73 59 1673: 22(i16vec4) Load 1672 - 1674:1149(i16vec2) VectorShuffle 1673 1673 0 1 - 1675:1149(i16vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 1674 - 1676: 1150(ptr) AccessChain 34(data) 1671 57 - 1677: 22(i16vec4) Load 1676 - 1678: 22(i16vec4) VectorShuffle 1677 1675 4 5 2 3 - Store 1676 1678 - 1679: 6(int) Load 8(invocation) - 1680: 1150(ptr) AccessChain 34(data) 57 57 - 1681: 22(i16vec4) Load 1680 - 1682:1159(i16vec3) VectorShuffle 1681 1681 0 1 2 - 1683:1159(i16vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 1682 - 1684: 1150(ptr) AccessChain 34(data) 1679 57 - 1685: 22(i16vec4) Load 1684 - 1686: 22(i16vec4) VectorShuffle 1685 1683 4 5 6 3 - Store 1684 1686 - 1687: 6(int) Load 8(invocation) - 1688: 1150(ptr) AccessChain 34(data) 67 57 - 1689: 22(i16vec4) Load 1688 - 1690: 22(i16vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 1689 - 1691: 1150(ptr) AccessChain 34(data) 1687 57 - Store 1691 1690 - 1692: 6(int) Load 8(invocation) - 1694: 1693(ptr) AccessChain 34(data) 37 67 38 - 1695: 23(int16_t) Load 1694 - 1696: 23(int16_t) GroupNonUniformIAdd 42 Reduce 1695 - 1697: 1693(ptr) AccessChain 34(data) 1692 67 38 - Store 1697 1696 - 1698: 6(int) Load 8(invocation) - 1701: 1700(ptr) AccessChain 34(data) 46 67 - 1702: 24(i16vec4) Load 1701 - 1703:1699(i16vec2) VectorShuffle 1702 1702 0 1 - 1704:1699(i16vec2) GroupNonUniformIAdd 42 Reduce 1703 - 1705: 1700(ptr) AccessChain 34(data) 1698 67 - 1706: 24(i16vec4) Load 1705 - 1707: 24(i16vec4) VectorShuffle 1706 1704 4 5 2 3 - Store 1705 1707 - 1708: 6(int) Load 8(invocation) - 1710: 1700(ptr) AccessChain 34(data) 57 67 - 1711: 24(i16vec4) Load 1710 - 1712:1709(i16vec3) VectorShuffle 1711 1711 0 1 2 - 1713:1709(i16vec3) GroupNonUniformIAdd 42 Reduce 1712 - 1714: 1700(ptr) AccessChain 34(data) 1708 67 - 1715: 24(i16vec4) Load 1714 - 1716: 24(i16vec4) VectorShuffle 1715 1713 4 5 6 3 - Store 1714 1716 - 1717: 6(int) Load 8(invocation) - 1718: 1700(ptr) AccessChain 34(data) 67 67 - 1719: 24(i16vec4) Load 1718 - 1720: 24(i16vec4) GroupNonUniformIAdd 42 Reduce 1719 - 1721: 1700(ptr) AccessChain 34(data) 1717 67 - Store 1721 1720 - 1722: 6(int) Load 8(invocation) - 1723: 1693(ptr) AccessChain 34(data) 37 67 38 - 1724: 23(int16_t) Load 1723 - 1725: 23(int16_t) GroupNonUniformIMul 42 Reduce 1724 - 1726: 1693(ptr) AccessChain 34(data) 1722 67 38 - Store 1726 1725 - 1727: 6(int) Load 8(invocation) - 1728: 1700(ptr) AccessChain 34(data) 46 67 - 1729: 24(i16vec4) Load 1728 - 1730:1699(i16vec2) VectorShuffle 1729 1729 0 1 - 1731:1699(i16vec2) GroupNonUniformIMul 42 Reduce 1730 - 1732: 1700(ptr) AccessChain 34(data) 1727 67 - 1733: 24(i16vec4) Load 1732 - 1734: 24(i16vec4) VectorShuffle 1733 1731 4 5 2 3 - Store 1732 1734 - 1735: 6(int) Load 8(invocation) - 1736: 1700(ptr) AccessChain 34(data) 57 67 - 1737: 24(i16vec4) Load 1736 - 1738:1709(i16vec3) VectorShuffle 1737 1737 0 1 2 - 1739:1709(i16vec3) GroupNonUniformIMul 42 Reduce 1738 - 1740: 1700(ptr) AccessChain 34(data) 1735 67 - 1741: 24(i16vec4) Load 1740 - 1742: 24(i16vec4) VectorShuffle 1741 1739 4 5 6 3 - Store 1740 1742 - 1743: 6(int) Load 8(invocation) - 1744: 1700(ptr) AccessChain 34(data) 67 67 - 1745: 24(i16vec4) Load 1744 - 1746: 24(i16vec4) GroupNonUniformIMul 42 Reduce 1745 - 1747: 1700(ptr) AccessChain 34(data) 1743 67 - Store 1747 1746 - 1748: 6(int) Load 8(invocation) - 1749: 1693(ptr) AccessChain 34(data) 37 67 38 - 1750: 23(int16_t) Load 1749 - 1751: 23(int16_t) GroupNonUniformUMin 42 Reduce 1750 - 1752: 1693(ptr) AccessChain 34(data) 1748 67 38 - Store 1752 1751 - 1753: 6(int) Load 8(invocation) - 1754: 1700(ptr) AccessChain 34(data) 46 67 - 1755: 24(i16vec4) Load 1754 - 1756:1699(i16vec2) VectorShuffle 1755 1755 0 1 - 1757:1699(i16vec2) GroupNonUniformUMin 42 Reduce 1756 - 1758: 1700(ptr) AccessChain 34(data) 1753 67 - 1759: 24(i16vec4) Load 1758 - 1760: 24(i16vec4) VectorShuffle 1759 1757 4 5 2 3 - Store 1758 1760 + 1674: 22(i16vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 1673 + 1675: 1320(ptr) AccessChain 34(data) 1671 59 + Store 1675 1674 + 1676: 6(int) Load 8(invocation) + 1677: 1313(ptr) AccessChain 34(data) 37 59 38 + 1678: 21(int16_t) Load 1677 + 1679: 21(int16_t) GroupNonUniformBitwiseOr 42 InclusiveScan 1678 + 1680: 1313(ptr) AccessChain 34(data) 1676 59 38 + Store 1680 1679 + 1681: 6(int) Load 8(invocation) + 1682: 1320(ptr) AccessChain 34(data) 46 59 + 1683: 22(i16vec4) Load 1682 + 1684:1319(i16vec2) VectorShuffle 1683 1683 0 1 + 1685:1319(i16vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 1684 + 1686: 1313(ptr) AccessChain 34(data) 1681 59 38 + 1687: 21(int16_t) CompositeExtract 1685 0 + Store 1686 1687 + 1688: 1313(ptr) AccessChain 34(data) 1681 59 55 + 1689: 21(int16_t) CompositeExtract 1685 1 + Store 1688 1689 + 1690: 6(int) Load 8(invocation) + 1691: 1320(ptr) AccessChain 34(data) 59 59 + 1692: 22(i16vec4) Load 1691 + 1693:1330(i16vec3) VectorShuffle 1692 1692 0 1 2 + 1694:1330(i16vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 1693 + 1695: 1313(ptr) AccessChain 34(data) 1690 59 38 + 1696: 21(int16_t) CompositeExtract 1694 0 + Store 1695 1696 + 1697: 1313(ptr) AccessChain 34(data) 1690 59 55 + 1698: 21(int16_t) CompositeExtract 1694 1 + Store 1697 1698 + 1699: 1313(ptr) AccessChain 34(data) 1690 59 69 + 1700: 21(int16_t) CompositeExtract 1694 2 + Store 1699 1700 + 1701: 6(int) Load 8(invocation) + 1702: 1320(ptr) AccessChain 34(data) 73 59 + 1703: 22(i16vec4) Load 1702 + 1704: 22(i16vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 1703 + 1705: 1320(ptr) AccessChain 34(data) 1701 59 + Store 1705 1704 + 1706: 6(int) Load 8(invocation) + 1707: 1313(ptr) AccessChain 34(data) 37 59 38 + 1708: 21(int16_t) Load 1707 + 1709: 21(int16_t) GroupNonUniformBitwiseXor 42 InclusiveScan 1708 + 1710: 1313(ptr) AccessChain 34(data) 1706 59 38 + Store 1710 1709 + 1711: 6(int) Load 8(invocation) + 1712: 1320(ptr) AccessChain 34(data) 46 59 + 1713: 22(i16vec4) Load 1712 + 1714:1319(i16vec2) VectorShuffle 1713 1713 0 1 + 1715:1319(i16vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 1714 + 1716: 1313(ptr) AccessChain 34(data) 1711 59 38 + 1717: 21(int16_t) CompositeExtract 1715 0 + Store 1716 1717 + 1718: 1313(ptr) AccessChain 34(data) 1711 59 55 + 1719: 21(int16_t) CompositeExtract 1715 1 + Store 1718 1719 + 1720: 6(int) Load 8(invocation) + 1721: 1320(ptr) AccessChain 34(data) 59 59 + 1722: 22(i16vec4) Load 1721 + 1723:1330(i16vec3) VectorShuffle 1722 1722 0 1 2 + 1724:1330(i16vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 1723 + 1725: 1313(ptr) AccessChain 34(data) 1720 59 38 + 1726: 21(int16_t) CompositeExtract 1724 0 + Store 1725 1726 + 1727: 1313(ptr) AccessChain 34(data) 1720 59 55 + 1728: 21(int16_t) CompositeExtract 1724 1 + Store 1727 1728 + 1729: 1313(ptr) AccessChain 34(data) 1720 59 69 + 1730: 21(int16_t) CompositeExtract 1724 2 + Store 1729 1730 + 1731: 6(int) Load 8(invocation) + 1732: 1320(ptr) AccessChain 34(data) 73 59 + 1733: 22(i16vec4) Load 1732 + 1734: 22(i16vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 1733 + 1735: 1320(ptr) AccessChain 34(data) 1731 59 + Store 1735 1734 + 1736: 6(int) Load 8(invocation) + 1737: 1313(ptr) AccessChain 34(data) 37 59 38 + 1738: 21(int16_t) Load 1737 + 1739: 21(int16_t) GroupNonUniformIAdd 42 ExclusiveScan 1738 + 1740: 1313(ptr) AccessChain 34(data) 1736 59 38 + Store 1740 1739 + 1741: 6(int) Load 8(invocation) + 1742: 1320(ptr) AccessChain 34(data) 46 59 + 1743: 22(i16vec4) Load 1742 + 1744:1319(i16vec2) VectorShuffle 1743 1743 0 1 + 1745:1319(i16vec2) GroupNonUniformIAdd 42 ExclusiveScan 1744 + 1746: 1313(ptr) AccessChain 34(data) 1741 59 38 + 1747: 21(int16_t) CompositeExtract 1745 0 + Store 1746 1747 + 1748: 1313(ptr) AccessChain 34(data) 1741 59 55 + 1749: 21(int16_t) CompositeExtract 1745 1 + Store 1748 1749 + 1750: 6(int) Load 8(invocation) + 1751: 1320(ptr) AccessChain 34(data) 59 59 + 1752: 22(i16vec4) Load 1751 + 1753:1330(i16vec3) VectorShuffle 1752 1752 0 1 2 + 1754:1330(i16vec3) GroupNonUniformIAdd 42 ExclusiveScan 1753 + 1755: 1313(ptr) AccessChain 34(data) 1750 59 38 + 1756: 21(int16_t) CompositeExtract 1754 0 + Store 1755 1756 + 1757: 1313(ptr) AccessChain 34(data) 1750 59 55 + 1758: 21(int16_t) CompositeExtract 1754 1 + Store 1757 1758 + 1759: 1313(ptr) AccessChain 34(data) 1750 59 69 + 1760: 21(int16_t) CompositeExtract 1754 2 + Store 1759 1760 1761: 6(int) Load 8(invocation) - 1762: 1700(ptr) AccessChain 34(data) 57 67 - 1763: 24(i16vec4) Load 1762 - 1764:1709(i16vec3) VectorShuffle 1763 1763 0 1 2 - 1765:1709(i16vec3) GroupNonUniformUMin 42 Reduce 1764 - 1766: 1700(ptr) AccessChain 34(data) 1761 67 - 1767: 24(i16vec4) Load 1766 - 1768: 24(i16vec4) VectorShuffle 1767 1765 4 5 6 3 - Store 1766 1768 - 1769: 6(int) Load 8(invocation) - 1770: 1700(ptr) AccessChain 34(data) 67 67 - 1771: 24(i16vec4) Load 1770 - 1772: 24(i16vec4) GroupNonUniformUMin 42 Reduce 1771 - 1773: 1700(ptr) AccessChain 34(data) 1769 67 - Store 1773 1772 - 1774: 6(int) Load 8(invocation) - 1775: 1693(ptr) AccessChain 34(data) 37 67 38 - 1776: 23(int16_t) Load 1775 - 1777: 23(int16_t) GroupNonUniformUMax 42 Reduce 1776 - 1778: 1693(ptr) AccessChain 34(data) 1774 67 38 - Store 1778 1777 - 1779: 6(int) Load 8(invocation) - 1780: 1700(ptr) AccessChain 34(data) 46 67 - 1781: 24(i16vec4) Load 1780 - 1782:1699(i16vec2) VectorShuffle 1781 1781 0 1 - 1783:1699(i16vec2) GroupNonUniformUMax 42 Reduce 1782 - 1784: 1700(ptr) AccessChain 34(data) 1779 67 - 1785: 24(i16vec4) Load 1784 - 1786: 24(i16vec4) VectorShuffle 1785 1783 4 5 2 3 - Store 1784 1786 - 1787: 6(int) Load 8(invocation) - 1788: 1700(ptr) AccessChain 34(data) 57 67 - 1789: 24(i16vec4) Load 1788 - 1790:1709(i16vec3) VectorShuffle 1789 1789 0 1 2 - 1791:1709(i16vec3) GroupNonUniformUMax 42 Reduce 1790 - 1792: 1700(ptr) AccessChain 34(data) 1787 67 - 1793: 24(i16vec4) Load 1792 - 1794: 24(i16vec4) VectorShuffle 1793 1791 4 5 6 3 - Store 1792 1794 - 1795: 6(int) Load 8(invocation) - 1796: 1700(ptr) AccessChain 34(data) 67 67 - 1797: 24(i16vec4) Load 1796 - 1798: 24(i16vec4) GroupNonUniformUMax 42 Reduce 1797 - 1799: 1700(ptr) AccessChain 34(data) 1795 67 - Store 1799 1798 - 1800: 6(int) Load 8(invocation) - 1801: 1693(ptr) AccessChain 34(data) 37 67 38 - 1802: 23(int16_t) Load 1801 - 1803: 23(int16_t) GroupNonUniformBitwiseAnd 42 Reduce 1802 - 1804: 1693(ptr) AccessChain 34(data) 1800 67 38 - Store 1804 1803 - 1805: 6(int) Load 8(invocation) - 1806: 1700(ptr) AccessChain 34(data) 46 67 - 1807: 24(i16vec4) Load 1806 - 1808:1699(i16vec2) VectorShuffle 1807 1807 0 1 - 1809:1699(i16vec2) GroupNonUniformBitwiseAnd 42 Reduce 1808 - 1810: 1700(ptr) AccessChain 34(data) 1805 67 - 1811: 24(i16vec4) Load 1810 - 1812: 24(i16vec4) VectorShuffle 1811 1809 4 5 2 3 - Store 1810 1812 - 1813: 6(int) Load 8(invocation) - 1814: 1700(ptr) AccessChain 34(data) 57 67 - 1815: 24(i16vec4) Load 1814 - 1816:1709(i16vec3) VectorShuffle 1815 1815 0 1 2 - 1817:1709(i16vec3) GroupNonUniformBitwiseAnd 42 Reduce 1816 - 1818: 1700(ptr) AccessChain 34(data) 1813 67 - 1819: 24(i16vec4) Load 1818 - 1820: 24(i16vec4) VectorShuffle 1819 1817 4 5 6 3 - Store 1818 1820 + 1762: 1320(ptr) AccessChain 34(data) 73 59 + 1763: 22(i16vec4) Load 1762 + 1764: 22(i16vec4) GroupNonUniformIAdd 42 ExclusiveScan 1763 + 1765: 1320(ptr) AccessChain 34(data) 1761 59 + Store 1765 1764 + 1766: 6(int) Load 8(invocation) + 1767: 1313(ptr) AccessChain 34(data) 37 59 38 + 1768: 21(int16_t) Load 1767 + 1769: 21(int16_t) GroupNonUniformIMul 42 ExclusiveScan 1768 + 1770: 1313(ptr) AccessChain 34(data) 1766 59 38 + Store 1770 1769 + 1771: 6(int) Load 8(invocation) + 1772: 1320(ptr) AccessChain 34(data) 46 59 + 1773: 22(i16vec4) Load 1772 + 1774:1319(i16vec2) VectorShuffle 1773 1773 0 1 + 1775:1319(i16vec2) GroupNonUniformIMul 42 ExclusiveScan 1774 + 1776: 1313(ptr) AccessChain 34(data) 1771 59 38 + 1777: 21(int16_t) CompositeExtract 1775 0 + Store 1776 1777 + 1778: 1313(ptr) AccessChain 34(data) 1771 59 55 + 1779: 21(int16_t) CompositeExtract 1775 1 + Store 1778 1779 + 1780: 6(int) Load 8(invocation) + 1781: 1320(ptr) AccessChain 34(data) 59 59 + 1782: 22(i16vec4) Load 1781 + 1783:1330(i16vec3) VectorShuffle 1782 1782 0 1 2 + 1784:1330(i16vec3) GroupNonUniformIMul 42 ExclusiveScan 1783 + 1785: 1313(ptr) AccessChain 34(data) 1780 59 38 + 1786: 21(int16_t) CompositeExtract 1784 0 + Store 1785 1786 + 1787: 1313(ptr) AccessChain 34(data) 1780 59 55 + 1788: 21(int16_t) CompositeExtract 1784 1 + Store 1787 1788 + 1789: 1313(ptr) AccessChain 34(data) 1780 59 69 + 1790: 21(int16_t) CompositeExtract 1784 2 + Store 1789 1790 + 1791: 6(int) Load 8(invocation) + 1792: 1320(ptr) AccessChain 34(data) 73 59 + 1793: 22(i16vec4) Load 1792 + 1794: 22(i16vec4) GroupNonUniformIMul 42 ExclusiveScan 1793 + 1795: 1320(ptr) AccessChain 34(data) 1791 59 + Store 1795 1794 + 1796: 6(int) Load 8(invocation) + 1797: 1313(ptr) AccessChain 34(data) 37 59 38 + 1798: 21(int16_t) Load 1797 + 1799: 21(int16_t) GroupNonUniformSMin 42 ExclusiveScan 1798 + 1800: 1313(ptr) AccessChain 34(data) 1796 59 38 + Store 1800 1799 + 1801: 6(int) Load 8(invocation) + 1802: 1320(ptr) AccessChain 34(data) 46 59 + 1803: 22(i16vec4) Load 1802 + 1804:1319(i16vec2) VectorShuffle 1803 1803 0 1 + 1805:1319(i16vec2) GroupNonUniformSMin 42 ExclusiveScan 1804 + 1806: 1313(ptr) AccessChain 34(data) 1801 59 38 + 1807: 21(int16_t) CompositeExtract 1805 0 + Store 1806 1807 + 1808: 1313(ptr) AccessChain 34(data) 1801 59 55 + 1809: 21(int16_t) CompositeExtract 1805 1 + Store 1808 1809 + 1810: 6(int) Load 8(invocation) + 1811: 1320(ptr) AccessChain 34(data) 59 59 + 1812: 22(i16vec4) Load 1811 + 1813:1330(i16vec3) VectorShuffle 1812 1812 0 1 2 + 1814:1330(i16vec3) GroupNonUniformSMin 42 ExclusiveScan 1813 + 1815: 1313(ptr) AccessChain 34(data) 1810 59 38 + 1816: 21(int16_t) CompositeExtract 1814 0 + Store 1815 1816 + 1817: 1313(ptr) AccessChain 34(data) 1810 59 55 + 1818: 21(int16_t) CompositeExtract 1814 1 + Store 1817 1818 + 1819: 1313(ptr) AccessChain 34(data) 1810 59 69 + 1820: 21(int16_t) CompositeExtract 1814 2 + Store 1819 1820 1821: 6(int) Load 8(invocation) - 1822: 1700(ptr) AccessChain 34(data) 67 67 - 1823: 24(i16vec4) Load 1822 - 1824: 24(i16vec4) GroupNonUniformBitwiseAnd 42 Reduce 1823 - 1825: 1700(ptr) AccessChain 34(data) 1821 67 + 1822: 1320(ptr) AccessChain 34(data) 73 59 + 1823: 22(i16vec4) Load 1822 + 1824: 22(i16vec4) GroupNonUniformSMin 42 ExclusiveScan 1823 + 1825: 1320(ptr) AccessChain 34(data) 1821 59 Store 1825 1824 1826: 6(int) Load 8(invocation) - 1827: 1693(ptr) AccessChain 34(data) 37 67 38 - 1828: 23(int16_t) Load 1827 - 1829: 23(int16_t) GroupNonUniformBitwiseOr 42 Reduce 1828 - 1830: 1693(ptr) AccessChain 34(data) 1826 67 38 + 1827: 1313(ptr) AccessChain 34(data) 37 59 38 + 1828: 21(int16_t) Load 1827 + 1829: 21(int16_t) GroupNonUniformSMax 42 ExclusiveScan 1828 + 1830: 1313(ptr) AccessChain 34(data) 1826 59 38 Store 1830 1829 1831: 6(int) Load 8(invocation) - 1832: 1700(ptr) AccessChain 34(data) 46 67 - 1833: 24(i16vec4) Load 1832 - 1834:1699(i16vec2) VectorShuffle 1833 1833 0 1 - 1835:1699(i16vec2) GroupNonUniformBitwiseOr 42 Reduce 1834 - 1836: 1700(ptr) AccessChain 34(data) 1831 67 - 1837: 24(i16vec4) Load 1836 - 1838: 24(i16vec4) VectorShuffle 1837 1835 4 5 2 3 - Store 1836 1838 - 1839: 6(int) Load 8(invocation) - 1840: 1700(ptr) AccessChain 34(data) 57 67 - 1841: 24(i16vec4) Load 1840 - 1842:1709(i16vec3) VectorShuffle 1841 1841 0 1 2 - 1843:1709(i16vec3) GroupNonUniformBitwiseOr 42 Reduce 1842 - 1844: 1700(ptr) AccessChain 34(data) 1839 67 - 1845: 24(i16vec4) Load 1844 - 1846: 24(i16vec4) VectorShuffle 1845 1843 4 5 6 3 - Store 1844 1846 - 1847: 6(int) Load 8(invocation) - 1848: 1700(ptr) AccessChain 34(data) 67 67 - 1849: 24(i16vec4) Load 1848 - 1850: 24(i16vec4) GroupNonUniformBitwiseOr 42 Reduce 1849 - 1851: 1700(ptr) AccessChain 34(data) 1847 67 - Store 1851 1850 - 1852: 6(int) Load 8(invocation) - 1853: 1693(ptr) AccessChain 34(data) 37 67 38 - 1854: 23(int16_t) Load 1853 - 1855: 23(int16_t) GroupNonUniformBitwiseXor 42 Reduce 1854 - 1856: 1693(ptr) AccessChain 34(data) 1852 67 38 - Store 1856 1855 - 1857: 6(int) Load 8(invocation) - 1858: 1700(ptr) AccessChain 34(data) 46 67 - 1859: 24(i16vec4) Load 1858 - 1860:1699(i16vec2) VectorShuffle 1859 1859 0 1 - 1861:1699(i16vec2) GroupNonUniformBitwiseXor 42 Reduce 1860 - 1862: 1700(ptr) AccessChain 34(data) 1857 67 - 1863: 24(i16vec4) Load 1862 - 1864: 24(i16vec4) VectorShuffle 1863 1861 4 5 2 3 - Store 1862 1864 - 1865: 6(int) Load 8(invocation) - 1866: 1700(ptr) AccessChain 34(data) 57 67 - 1867: 24(i16vec4) Load 1866 - 1868:1709(i16vec3) VectorShuffle 1867 1867 0 1 2 - 1869:1709(i16vec3) GroupNonUniformBitwiseXor 42 Reduce 1868 - 1870: 1700(ptr) AccessChain 34(data) 1865 67 - 1871: 24(i16vec4) Load 1870 - 1872: 24(i16vec4) VectorShuffle 1871 1869 4 5 6 3 - Store 1870 1872 - 1873: 6(int) Load 8(invocation) - 1874: 1700(ptr) AccessChain 34(data) 67 67 - 1875: 24(i16vec4) Load 1874 - 1876: 24(i16vec4) GroupNonUniformBitwiseXor 42 Reduce 1875 - 1877: 1700(ptr) AccessChain 34(data) 1873 67 - Store 1877 1876 - 1878: 6(int) Load 8(invocation) - 1879: 1693(ptr) AccessChain 34(data) 37 67 38 - 1880: 23(int16_t) Load 1879 - 1881: 23(int16_t) GroupNonUniformIAdd 42 InclusiveScan 1880 - 1882: 1693(ptr) AccessChain 34(data) 1878 67 38 - Store 1882 1881 - 1883: 6(int) Load 8(invocation) - 1884: 1700(ptr) AccessChain 34(data) 46 67 - 1885: 24(i16vec4) Load 1884 - 1886:1699(i16vec2) VectorShuffle 1885 1885 0 1 - 1887:1699(i16vec2) GroupNonUniformIAdd 42 InclusiveScan 1886 - 1888: 1700(ptr) AccessChain 34(data) 1883 67 - 1889: 24(i16vec4) Load 1888 - 1890: 24(i16vec4) VectorShuffle 1889 1887 4 5 2 3 - Store 1888 1890 + 1832: 1320(ptr) AccessChain 34(data) 46 59 + 1833: 22(i16vec4) Load 1832 + 1834:1319(i16vec2) VectorShuffle 1833 1833 0 1 + 1835:1319(i16vec2) GroupNonUniformSMax 42 ExclusiveScan 1834 + 1836: 1313(ptr) AccessChain 34(data) 1831 59 38 + 1837: 21(int16_t) CompositeExtract 1835 0 + Store 1836 1837 + 1838: 1313(ptr) AccessChain 34(data) 1831 59 55 + 1839: 21(int16_t) CompositeExtract 1835 1 + Store 1838 1839 + 1840: 6(int) Load 8(invocation) + 1841: 1320(ptr) AccessChain 34(data) 59 59 + 1842: 22(i16vec4) Load 1841 + 1843:1330(i16vec3) VectorShuffle 1842 1842 0 1 2 + 1844:1330(i16vec3) GroupNonUniformSMax 42 ExclusiveScan 1843 + 1845: 1313(ptr) AccessChain 34(data) 1840 59 38 + 1846: 21(int16_t) CompositeExtract 1844 0 + Store 1845 1846 + 1847: 1313(ptr) AccessChain 34(data) 1840 59 55 + 1848: 21(int16_t) CompositeExtract 1844 1 + Store 1847 1848 + 1849: 1313(ptr) AccessChain 34(data) 1840 59 69 + 1850: 21(int16_t) CompositeExtract 1844 2 + Store 1849 1850 + 1851: 6(int) Load 8(invocation) + 1852: 1320(ptr) AccessChain 34(data) 73 59 + 1853: 22(i16vec4) Load 1852 + 1854: 22(i16vec4) GroupNonUniformSMax 42 ExclusiveScan 1853 + 1855: 1320(ptr) AccessChain 34(data) 1851 59 + Store 1855 1854 + 1856: 6(int) Load 8(invocation) + 1857: 1313(ptr) AccessChain 34(data) 37 59 38 + 1858: 21(int16_t) Load 1857 + 1859: 21(int16_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1858 + 1860: 1313(ptr) AccessChain 34(data) 1856 59 38 + Store 1860 1859 + 1861: 6(int) Load 8(invocation) + 1862: 1320(ptr) AccessChain 34(data) 46 59 + 1863: 22(i16vec4) Load 1862 + 1864:1319(i16vec2) VectorShuffle 1863 1863 0 1 + 1865:1319(i16vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1864 + 1866: 1313(ptr) AccessChain 34(data) 1861 59 38 + 1867: 21(int16_t) CompositeExtract 1865 0 + Store 1866 1867 + 1868: 1313(ptr) AccessChain 34(data) 1861 59 55 + 1869: 21(int16_t) CompositeExtract 1865 1 + Store 1868 1869 + 1870: 6(int) Load 8(invocation) + 1871: 1320(ptr) AccessChain 34(data) 59 59 + 1872: 22(i16vec4) Load 1871 + 1873:1330(i16vec3) VectorShuffle 1872 1872 0 1 2 + 1874:1330(i16vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1873 + 1875: 1313(ptr) AccessChain 34(data) 1870 59 38 + 1876: 21(int16_t) CompositeExtract 1874 0 + Store 1875 1876 + 1877: 1313(ptr) AccessChain 34(data) 1870 59 55 + 1878: 21(int16_t) CompositeExtract 1874 1 + Store 1877 1878 + 1879: 1313(ptr) AccessChain 34(data) 1870 59 69 + 1880: 21(int16_t) CompositeExtract 1874 2 + Store 1879 1880 + 1881: 6(int) Load 8(invocation) + 1882: 1320(ptr) AccessChain 34(data) 73 59 + 1883: 22(i16vec4) Load 1882 + 1884: 22(i16vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 1883 + 1885: 1320(ptr) AccessChain 34(data) 1881 59 + Store 1885 1884 + 1886: 6(int) Load 8(invocation) + 1887: 1313(ptr) AccessChain 34(data) 37 59 38 + 1888: 21(int16_t) Load 1887 + 1889: 21(int16_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 1888 + 1890: 1313(ptr) AccessChain 34(data) 1886 59 38 + Store 1890 1889 1891: 6(int) Load 8(invocation) - 1892: 1700(ptr) AccessChain 34(data) 57 67 - 1893: 24(i16vec4) Load 1892 - 1894:1709(i16vec3) VectorShuffle 1893 1893 0 1 2 - 1895:1709(i16vec3) GroupNonUniformIAdd 42 InclusiveScan 1894 - 1896: 1700(ptr) AccessChain 34(data) 1891 67 - 1897: 24(i16vec4) Load 1896 - 1898: 24(i16vec4) VectorShuffle 1897 1895 4 5 6 3 - Store 1896 1898 - 1899: 6(int) Load 8(invocation) - 1900: 1700(ptr) AccessChain 34(data) 67 67 - 1901: 24(i16vec4) Load 1900 - 1902: 24(i16vec4) GroupNonUniformIAdd 42 InclusiveScan 1901 - 1903: 1700(ptr) AccessChain 34(data) 1899 67 - Store 1903 1902 - 1904: 6(int) Load 8(invocation) - 1905: 1693(ptr) AccessChain 34(data) 37 67 38 - 1906: 23(int16_t) Load 1905 - 1907: 23(int16_t) GroupNonUniformIMul 42 InclusiveScan 1906 - 1908: 1693(ptr) AccessChain 34(data) 1904 67 38 - Store 1908 1907 - 1909: 6(int) Load 8(invocation) - 1910: 1700(ptr) AccessChain 34(data) 46 67 - 1911: 24(i16vec4) Load 1910 - 1912:1699(i16vec2) VectorShuffle 1911 1911 0 1 - 1913:1699(i16vec2) GroupNonUniformIMul 42 InclusiveScan 1912 - 1914: 1700(ptr) AccessChain 34(data) 1909 67 - 1915: 24(i16vec4) Load 1914 - 1916: 24(i16vec4) VectorShuffle 1915 1913 4 5 2 3 - Store 1914 1916 - 1917: 6(int) Load 8(invocation) - 1918: 1700(ptr) AccessChain 34(data) 57 67 - 1919: 24(i16vec4) Load 1918 - 1920:1709(i16vec3) VectorShuffle 1919 1919 0 1 2 - 1921:1709(i16vec3) GroupNonUniformIMul 42 InclusiveScan 1920 - 1922: 1700(ptr) AccessChain 34(data) 1917 67 - 1923: 24(i16vec4) Load 1922 - 1924: 24(i16vec4) VectorShuffle 1923 1921 4 5 6 3 - Store 1922 1924 - 1925: 6(int) Load 8(invocation) - 1926: 1700(ptr) AccessChain 34(data) 67 67 - 1927: 24(i16vec4) Load 1926 - 1928: 24(i16vec4) GroupNonUniformIMul 42 InclusiveScan 1927 - 1929: 1700(ptr) AccessChain 34(data) 1925 67 - Store 1929 1928 + 1892: 1320(ptr) AccessChain 34(data) 46 59 + 1893: 22(i16vec4) Load 1892 + 1894:1319(i16vec2) VectorShuffle 1893 1893 0 1 + 1895:1319(i16vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 1894 + 1896: 1313(ptr) AccessChain 34(data) 1891 59 38 + 1897: 21(int16_t) CompositeExtract 1895 0 + Store 1896 1897 + 1898: 1313(ptr) AccessChain 34(data) 1891 59 55 + 1899: 21(int16_t) CompositeExtract 1895 1 + Store 1898 1899 + 1900: 6(int) Load 8(invocation) + 1901: 1320(ptr) AccessChain 34(data) 59 59 + 1902: 22(i16vec4) Load 1901 + 1903:1330(i16vec3) VectorShuffle 1902 1902 0 1 2 + 1904:1330(i16vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 1903 + 1905: 1313(ptr) AccessChain 34(data) 1900 59 38 + 1906: 21(int16_t) CompositeExtract 1904 0 + Store 1905 1906 + 1907: 1313(ptr) AccessChain 34(data) 1900 59 55 + 1908: 21(int16_t) CompositeExtract 1904 1 + Store 1907 1908 + 1909: 1313(ptr) AccessChain 34(data) 1900 59 69 + 1910: 21(int16_t) CompositeExtract 1904 2 + Store 1909 1910 + 1911: 6(int) Load 8(invocation) + 1912: 1320(ptr) AccessChain 34(data) 73 59 + 1913: 22(i16vec4) Load 1912 + 1914: 22(i16vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 1913 + 1915: 1320(ptr) AccessChain 34(data) 1911 59 + Store 1915 1914 + 1916: 6(int) Load 8(invocation) + 1917: 1313(ptr) AccessChain 34(data) 37 59 38 + 1918: 21(int16_t) Load 1917 + 1919: 21(int16_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 1918 + 1920: 1313(ptr) AccessChain 34(data) 1916 59 38 + Store 1920 1919 + 1921: 6(int) Load 8(invocation) + 1922: 1320(ptr) AccessChain 34(data) 46 59 + 1923: 22(i16vec4) Load 1922 + 1924:1319(i16vec2) VectorShuffle 1923 1923 0 1 + 1925:1319(i16vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 1924 + 1926: 1313(ptr) AccessChain 34(data) 1921 59 38 + 1927: 21(int16_t) CompositeExtract 1925 0 + Store 1926 1927 + 1928: 1313(ptr) AccessChain 34(data) 1921 59 55 + 1929: 21(int16_t) CompositeExtract 1925 1 + Store 1928 1929 1930: 6(int) Load 8(invocation) - 1931: 1693(ptr) AccessChain 34(data) 37 67 38 - 1932: 23(int16_t) Load 1931 - 1933: 23(int16_t) GroupNonUniformUMin 42 InclusiveScan 1932 - 1934: 1693(ptr) AccessChain 34(data) 1930 67 38 - Store 1934 1933 - 1935: 6(int) Load 8(invocation) - 1936: 1700(ptr) AccessChain 34(data) 46 67 - 1937: 24(i16vec4) Load 1936 - 1938:1699(i16vec2) VectorShuffle 1937 1937 0 1 - 1939:1699(i16vec2) GroupNonUniformUMin 42 InclusiveScan 1938 - 1940: 1700(ptr) AccessChain 34(data) 1935 67 - 1941: 24(i16vec4) Load 1940 - 1942: 24(i16vec4) VectorShuffle 1941 1939 4 5 2 3 - Store 1940 1942 - 1943: 6(int) Load 8(invocation) - 1944: 1700(ptr) AccessChain 34(data) 57 67 - 1945: 24(i16vec4) Load 1944 - 1946:1709(i16vec3) VectorShuffle 1945 1945 0 1 2 - 1947:1709(i16vec3) GroupNonUniformUMin 42 InclusiveScan 1946 - 1948: 1700(ptr) AccessChain 34(data) 1943 67 - 1949: 24(i16vec4) Load 1948 - 1950: 24(i16vec4) VectorShuffle 1949 1947 4 5 6 3 - Store 1948 1950 - 1951: 6(int) Load 8(invocation) - 1952: 1700(ptr) AccessChain 34(data) 67 67 - 1953: 24(i16vec4) Load 1952 - 1954: 24(i16vec4) GroupNonUniformUMin 42 InclusiveScan 1953 - 1955: 1700(ptr) AccessChain 34(data) 1951 67 - Store 1955 1954 - 1956: 6(int) Load 8(invocation) - 1957: 1693(ptr) AccessChain 34(data) 37 67 38 - 1958: 23(int16_t) Load 1957 - 1959: 23(int16_t) GroupNonUniformUMax 42 InclusiveScan 1958 - 1960: 1693(ptr) AccessChain 34(data) 1956 67 38 - Store 1960 1959 - 1961: 6(int) Load 8(invocation) - 1962: 1700(ptr) AccessChain 34(data) 46 67 - 1963: 24(i16vec4) Load 1962 - 1964:1699(i16vec2) VectorShuffle 1963 1963 0 1 - 1965:1699(i16vec2) GroupNonUniformUMax 42 InclusiveScan 1964 - 1966: 1700(ptr) AccessChain 34(data) 1961 67 - 1967: 24(i16vec4) Load 1966 - 1968: 24(i16vec4) VectorShuffle 1967 1965 4 5 2 3 - Store 1966 1968 - 1969: 6(int) Load 8(invocation) - 1970: 1700(ptr) AccessChain 34(data) 57 67 - 1971: 24(i16vec4) Load 1970 - 1972:1709(i16vec3) VectorShuffle 1971 1971 0 1 2 - 1973:1709(i16vec3) GroupNonUniformUMax 42 InclusiveScan 1972 - 1974: 1700(ptr) AccessChain 34(data) 1969 67 - 1975: 24(i16vec4) Load 1974 - 1976: 24(i16vec4) VectorShuffle 1975 1973 4 5 6 3 - Store 1974 1976 - 1977: 6(int) Load 8(invocation) - 1978: 1700(ptr) AccessChain 34(data) 67 67 - 1979: 24(i16vec4) Load 1978 - 1980: 24(i16vec4) GroupNonUniformUMax 42 InclusiveScan 1979 - 1981: 1700(ptr) AccessChain 34(data) 1977 67 - Store 1981 1980 - 1982: 6(int) Load 8(invocation) - 1983: 1693(ptr) AccessChain 34(data) 37 67 38 - 1984: 23(int16_t) Load 1983 - 1985: 23(int16_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 1984 - 1986: 1693(ptr) AccessChain 34(data) 1982 67 38 - Store 1986 1985 - 1987: 6(int) Load 8(invocation) - 1988: 1700(ptr) AccessChain 34(data) 46 67 - 1989: 24(i16vec4) Load 1988 - 1990:1699(i16vec2) VectorShuffle 1989 1989 0 1 - 1991:1699(i16vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 1990 - 1992: 1700(ptr) AccessChain 34(data) 1987 67 - 1993: 24(i16vec4) Load 1992 - 1994: 24(i16vec4) VectorShuffle 1993 1991 4 5 2 3 - Store 1992 1994 - 1995: 6(int) Load 8(invocation) - 1996: 1700(ptr) AccessChain 34(data) 57 67 - 1997: 24(i16vec4) Load 1996 - 1998:1709(i16vec3) VectorShuffle 1997 1997 0 1 2 - 1999:1709(i16vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 1998 - 2000: 1700(ptr) AccessChain 34(data) 1995 67 - 2001: 24(i16vec4) Load 2000 - 2002: 24(i16vec4) VectorShuffle 2001 1999 4 5 6 3 - Store 2000 2002 - 2003: 6(int) Load 8(invocation) - 2004: 1700(ptr) AccessChain 34(data) 67 67 - 2005: 24(i16vec4) Load 2004 - 2006: 24(i16vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 2005 - 2007: 1700(ptr) AccessChain 34(data) 2003 67 - Store 2007 2006 - 2008: 6(int) Load 8(invocation) - 2009: 1693(ptr) AccessChain 34(data) 37 67 38 - 2010: 23(int16_t) Load 2009 - 2011: 23(int16_t) GroupNonUniformBitwiseOr 42 InclusiveScan 2010 - 2012: 1693(ptr) AccessChain 34(data) 2008 67 38 - Store 2012 2011 - 2013: 6(int) Load 8(invocation) - 2014: 1700(ptr) AccessChain 34(data) 46 67 - 2015: 24(i16vec4) Load 2014 - 2016:1699(i16vec2) VectorShuffle 2015 2015 0 1 - 2017:1699(i16vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 2016 - 2018: 1700(ptr) AccessChain 34(data) 2013 67 - 2019: 24(i16vec4) Load 2018 - 2020: 24(i16vec4) VectorShuffle 2019 2017 4 5 2 3 - Store 2018 2020 - 2021: 6(int) Load 8(invocation) - 2022: 1700(ptr) AccessChain 34(data) 57 67 - 2023: 24(i16vec4) Load 2022 - 2024:1709(i16vec3) VectorShuffle 2023 2023 0 1 2 - 2025:1709(i16vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 2024 - 2026: 1700(ptr) AccessChain 34(data) 2021 67 - 2027: 24(i16vec4) Load 2026 - 2028: 24(i16vec4) VectorShuffle 2027 2025 4 5 6 3 - Store 2026 2028 - 2029: 6(int) Load 8(invocation) - 2030: 1700(ptr) AccessChain 34(data) 67 67 - 2031: 24(i16vec4) Load 2030 - 2032: 24(i16vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 2031 - 2033: 1700(ptr) AccessChain 34(data) 2029 67 - Store 2033 2032 - 2034: 6(int) Load 8(invocation) - 2035: 1693(ptr) AccessChain 34(data) 37 67 38 - 2036: 23(int16_t) Load 2035 - 2037: 23(int16_t) GroupNonUniformBitwiseXor 42 InclusiveScan 2036 - 2038: 1693(ptr) AccessChain 34(data) 2034 67 38 - Store 2038 2037 - 2039: 6(int) Load 8(invocation) - 2040: 1700(ptr) AccessChain 34(data) 46 67 - 2041: 24(i16vec4) Load 2040 - 2042:1699(i16vec2) VectorShuffle 2041 2041 0 1 - 2043:1699(i16vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 2042 - 2044: 1700(ptr) AccessChain 34(data) 2039 67 - 2045: 24(i16vec4) Load 2044 - 2046: 24(i16vec4) VectorShuffle 2045 2043 4 5 2 3 - Store 2044 2046 - 2047: 6(int) Load 8(invocation) - 2048: 1700(ptr) AccessChain 34(data) 57 67 - 2049: 24(i16vec4) Load 2048 - 2050:1709(i16vec3) VectorShuffle 2049 2049 0 1 2 - 2051:1709(i16vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 2050 - 2052: 1700(ptr) AccessChain 34(data) 2047 67 - 2053: 24(i16vec4) Load 2052 - 2054: 24(i16vec4) VectorShuffle 2053 2051 4 5 6 3 - Store 2052 2054 - 2055: 6(int) Load 8(invocation) - 2056: 1700(ptr) AccessChain 34(data) 67 67 - 2057: 24(i16vec4) Load 2056 - 2058: 24(i16vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 2057 - 2059: 1700(ptr) AccessChain 34(data) 2055 67 - Store 2059 2058 - 2060: 6(int) Load 8(invocation) - 2061: 1693(ptr) AccessChain 34(data) 37 67 38 - 2062: 23(int16_t) Load 2061 - 2063: 23(int16_t) GroupNonUniformIAdd 42 ExclusiveScan 2062 - 2064: 1693(ptr) AccessChain 34(data) 2060 67 38 - Store 2064 2063 + 1931: 1320(ptr) AccessChain 34(data) 59 59 + 1932: 22(i16vec4) Load 1931 + 1933:1330(i16vec3) VectorShuffle 1932 1932 0 1 2 + 1934:1330(i16vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 1933 + 1935: 1313(ptr) AccessChain 34(data) 1930 59 38 + 1936: 21(int16_t) CompositeExtract 1934 0 + Store 1935 1936 + 1937: 1313(ptr) AccessChain 34(data) 1930 59 55 + 1938: 21(int16_t) CompositeExtract 1934 1 + Store 1937 1938 + 1939: 1313(ptr) AccessChain 34(data) 1930 59 69 + 1940: 21(int16_t) CompositeExtract 1934 2 + Store 1939 1940 + 1941: 6(int) Load 8(invocation) + 1942: 1320(ptr) AccessChain 34(data) 73 59 + 1943: 22(i16vec4) Load 1942 + 1944: 22(i16vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 1943 + 1945: 1320(ptr) AccessChain 34(data) 1941 59 + Store 1945 1944 + 1946: 6(int) Load 8(invocation) + 1948: 1947(ptr) AccessChain 34(data) 37 73 38 + 1949: 23(int16_t) Load 1948 + 1950: 23(int16_t) GroupNonUniformIAdd 42 Reduce 1949 + 1951: 1947(ptr) AccessChain 34(data) 1946 73 38 + Store 1951 1950 + 1952: 6(int) Load 8(invocation) + 1955: 1954(ptr) AccessChain 34(data) 46 73 + 1956: 24(i16vec4) Load 1955 + 1957:1953(i16vec2) VectorShuffle 1956 1956 0 1 + 1958:1953(i16vec2) GroupNonUniformIAdd 42 Reduce 1957 + 1959: 1947(ptr) AccessChain 34(data) 1952 73 38 + 1960: 23(int16_t) CompositeExtract 1958 0 + Store 1959 1960 + 1961: 1947(ptr) AccessChain 34(data) 1952 73 55 + 1962: 23(int16_t) CompositeExtract 1958 1 + Store 1961 1962 + 1963: 6(int) Load 8(invocation) + 1965: 1954(ptr) AccessChain 34(data) 59 73 + 1966: 24(i16vec4) Load 1965 + 1967:1964(i16vec3) VectorShuffle 1966 1966 0 1 2 + 1968:1964(i16vec3) GroupNonUniformIAdd 42 Reduce 1967 + 1969: 1947(ptr) AccessChain 34(data) 1963 73 38 + 1970: 23(int16_t) CompositeExtract 1968 0 + Store 1969 1970 + 1971: 1947(ptr) AccessChain 34(data) 1963 73 55 + 1972: 23(int16_t) CompositeExtract 1968 1 + Store 1971 1972 + 1973: 1947(ptr) AccessChain 34(data) 1963 73 69 + 1974: 23(int16_t) CompositeExtract 1968 2 + Store 1973 1974 + 1975: 6(int) Load 8(invocation) + 1976: 1954(ptr) AccessChain 34(data) 73 73 + 1977: 24(i16vec4) Load 1976 + 1978: 24(i16vec4) GroupNonUniformIAdd 42 Reduce 1977 + 1979: 1954(ptr) AccessChain 34(data) 1975 73 + Store 1979 1978 + 1980: 6(int) Load 8(invocation) + 1981: 1947(ptr) AccessChain 34(data) 37 73 38 + 1982: 23(int16_t) Load 1981 + 1983: 23(int16_t) GroupNonUniformIMul 42 Reduce 1982 + 1984: 1947(ptr) AccessChain 34(data) 1980 73 38 + Store 1984 1983 + 1985: 6(int) Load 8(invocation) + 1986: 1954(ptr) AccessChain 34(data) 46 73 + 1987: 24(i16vec4) Load 1986 + 1988:1953(i16vec2) VectorShuffle 1987 1987 0 1 + 1989:1953(i16vec2) GroupNonUniformIMul 42 Reduce 1988 + 1990: 1947(ptr) AccessChain 34(data) 1985 73 38 + 1991: 23(int16_t) CompositeExtract 1989 0 + Store 1990 1991 + 1992: 1947(ptr) AccessChain 34(data) 1985 73 55 + 1993: 23(int16_t) CompositeExtract 1989 1 + Store 1992 1993 + 1994: 6(int) Load 8(invocation) + 1995: 1954(ptr) AccessChain 34(data) 59 73 + 1996: 24(i16vec4) Load 1995 + 1997:1964(i16vec3) VectorShuffle 1996 1996 0 1 2 + 1998:1964(i16vec3) GroupNonUniformIMul 42 Reduce 1997 + 1999: 1947(ptr) AccessChain 34(data) 1994 73 38 + 2000: 23(int16_t) CompositeExtract 1998 0 + Store 1999 2000 + 2001: 1947(ptr) AccessChain 34(data) 1994 73 55 + 2002: 23(int16_t) CompositeExtract 1998 1 + Store 2001 2002 + 2003: 1947(ptr) AccessChain 34(data) 1994 73 69 + 2004: 23(int16_t) CompositeExtract 1998 2 + Store 2003 2004 + 2005: 6(int) Load 8(invocation) + 2006: 1954(ptr) AccessChain 34(data) 73 73 + 2007: 24(i16vec4) Load 2006 + 2008: 24(i16vec4) GroupNonUniformIMul 42 Reduce 2007 + 2009: 1954(ptr) AccessChain 34(data) 2005 73 + Store 2009 2008 + 2010: 6(int) Load 8(invocation) + 2011: 1947(ptr) AccessChain 34(data) 37 73 38 + 2012: 23(int16_t) Load 2011 + 2013: 23(int16_t) GroupNonUniformUMin 42 Reduce 2012 + 2014: 1947(ptr) AccessChain 34(data) 2010 73 38 + Store 2014 2013 + 2015: 6(int) Load 8(invocation) + 2016: 1954(ptr) AccessChain 34(data) 46 73 + 2017: 24(i16vec4) Load 2016 + 2018:1953(i16vec2) VectorShuffle 2017 2017 0 1 + 2019:1953(i16vec2) GroupNonUniformUMin 42 Reduce 2018 + 2020: 1947(ptr) AccessChain 34(data) 2015 73 38 + 2021: 23(int16_t) CompositeExtract 2019 0 + Store 2020 2021 + 2022: 1947(ptr) AccessChain 34(data) 2015 73 55 + 2023: 23(int16_t) CompositeExtract 2019 1 + Store 2022 2023 + 2024: 6(int) Load 8(invocation) + 2025: 1954(ptr) AccessChain 34(data) 59 73 + 2026: 24(i16vec4) Load 2025 + 2027:1964(i16vec3) VectorShuffle 2026 2026 0 1 2 + 2028:1964(i16vec3) GroupNonUniformUMin 42 Reduce 2027 + 2029: 1947(ptr) AccessChain 34(data) 2024 73 38 + 2030: 23(int16_t) CompositeExtract 2028 0 + Store 2029 2030 + 2031: 1947(ptr) AccessChain 34(data) 2024 73 55 + 2032: 23(int16_t) CompositeExtract 2028 1 + Store 2031 2032 + 2033: 1947(ptr) AccessChain 34(data) 2024 73 69 + 2034: 23(int16_t) CompositeExtract 2028 2 + Store 2033 2034 + 2035: 6(int) Load 8(invocation) + 2036: 1954(ptr) AccessChain 34(data) 73 73 + 2037: 24(i16vec4) Load 2036 + 2038: 24(i16vec4) GroupNonUniformUMin 42 Reduce 2037 + 2039: 1954(ptr) AccessChain 34(data) 2035 73 + Store 2039 2038 + 2040: 6(int) Load 8(invocation) + 2041: 1947(ptr) AccessChain 34(data) 37 73 38 + 2042: 23(int16_t) Load 2041 + 2043: 23(int16_t) GroupNonUniformUMax 42 Reduce 2042 + 2044: 1947(ptr) AccessChain 34(data) 2040 73 38 + Store 2044 2043 + 2045: 6(int) Load 8(invocation) + 2046: 1954(ptr) AccessChain 34(data) 46 73 + 2047: 24(i16vec4) Load 2046 + 2048:1953(i16vec2) VectorShuffle 2047 2047 0 1 + 2049:1953(i16vec2) GroupNonUniformUMax 42 Reduce 2048 + 2050: 1947(ptr) AccessChain 34(data) 2045 73 38 + 2051: 23(int16_t) CompositeExtract 2049 0 + Store 2050 2051 + 2052: 1947(ptr) AccessChain 34(data) 2045 73 55 + 2053: 23(int16_t) CompositeExtract 2049 1 + Store 2052 2053 + 2054: 6(int) Load 8(invocation) + 2055: 1954(ptr) AccessChain 34(data) 59 73 + 2056: 24(i16vec4) Load 2055 + 2057:1964(i16vec3) VectorShuffle 2056 2056 0 1 2 + 2058:1964(i16vec3) GroupNonUniformUMax 42 Reduce 2057 + 2059: 1947(ptr) AccessChain 34(data) 2054 73 38 + 2060: 23(int16_t) CompositeExtract 2058 0 + Store 2059 2060 + 2061: 1947(ptr) AccessChain 34(data) 2054 73 55 + 2062: 23(int16_t) CompositeExtract 2058 1 + Store 2061 2062 + 2063: 1947(ptr) AccessChain 34(data) 2054 73 69 + 2064: 23(int16_t) CompositeExtract 2058 2 + Store 2063 2064 2065: 6(int) Load 8(invocation) - 2066: 1700(ptr) AccessChain 34(data) 46 67 + 2066: 1954(ptr) AccessChain 34(data) 73 73 2067: 24(i16vec4) Load 2066 - 2068:1699(i16vec2) VectorShuffle 2067 2067 0 1 - 2069:1699(i16vec2) GroupNonUniformIAdd 42 ExclusiveScan 2068 - 2070: 1700(ptr) AccessChain 34(data) 2065 67 - 2071: 24(i16vec4) Load 2070 - 2072: 24(i16vec4) VectorShuffle 2071 2069 4 5 2 3 - Store 2070 2072 - 2073: 6(int) Load 8(invocation) - 2074: 1700(ptr) AccessChain 34(data) 57 67 - 2075: 24(i16vec4) Load 2074 - 2076:1709(i16vec3) VectorShuffle 2075 2075 0 1 2 - 2077:1709(i16vec3) GroupNonUniformIAdd 42 ExclusiveScan 2076 - 2078: 1700(ptr) AccessChain 34(data) 2073 67 - 2079: 24(i16vec4) Load 2078 - 2080: 24(i16vec4) VectorShuffle 2079 2077 4 5 6 3 - Store 2078 2080 - 2081: 6(int) Load 8(invocation) - 2082: 1700(ptr) AccessChain 34(data) 67 67 - 2083: 24(i16vec4) Load 2082 - 2084: 24(i16vec4) GroupNonUniformIAdd 42 ExclusiveScan 2083 - 2085: 1700(ptr) AccessChain 34(data) 2081 67 - Store 2085 2084 - 2086: 6(int) Load 8(invocation) - 2087: 1693(ptr) AccessChain 34(data) 37 67 38 - 2088: 23(int16_t) Load 2087 - 2089: 23(int16_t) GroupNonUniformIMul 42 ExclusiveScan 2088 - 2090: 1693(ptr) AccessChain 34(data) 2086 67 38 - Store 2090 2089 - 2091: 6(int) Load 8(invocation) - 2092: 1700(ptr) AccessChain 34(data) 46 67 - 2093: 24(i16vec4) Load 2092 - 2094:1699(i16vec2) VectorShuffle 2093 2093 0 1 - 2095:1699(i16vec2) GroupNonUniformIMul 42 ExclusiveScan 2094 - 2096: 1700(ptr) AccessChain 34(data) 2091 67 + 2068: 24(i16vec4) GroupNonUniformUMax 42 Reduce 2067 + 2069: 1954(ptr) AccessChain 34(data) 2065 73 + Store 2069 2068 + 2070: 6(int) Load 8(invocation) + 2071: 1947(ptr) AccessChain 34(data) 37 73 38 + 2072: 23(int16_t) Load 2071 + 2073: 23(int16_t) GroupNonUniformBitwiseAnd 42 Reduce 2072 + 2074: 1947(ptr) AccessChain 34(data) 2070 73 38 + Store 2074 2073 + 2075: 6(int) Load 8(invocation) + 2076: 1954(ptr) AccessChain 34(data) 46 73 + 2077: 24(i16vec4) Load 2076 + 2078:1953(i16vec2) VectorShuffle 2077 2077 0 1 + 2079:1953(i16vec2) GroupNonUniformBitwiseAnd 42 Reduce 2078 + 2080: 1947(ptr) AccessChain 34(data) 2075 73 38 + 2081: 23(int16_t) CompositeExtract 2079 0 + Store 2080 2081 + 2082: 1947(ptr) AccessChain 34(data) 2075 73 55 + 2083: 23(int16_t) CompositeExtract 2079 1 + Store 2082 2083 + 2084: 6(int) Load 8(invocation) + 2085: 1954(ptr) AccessChain 34(data) 59 73 + 2086: 24(i16vec4) Load 2085 + 2087:1964(i16vec3) VectorShuffle 2086 2086 0 1 2 + 2088:1964(i16vec3) GroupNonUniformBitwiseAnd 42 Reduce 2087 + 2089: 1947(ptr) AccessChain 34(data) 2084 73 38 + 2090: 23(int16_t) CompositeExtract 2088 0 + Store 2089 2090 + 2091: 1947(ptr) AccessChain 34(data) 2084 73 55 + 2092: 23(int16_t) CompositeExtract 2088 1 + Store 2091 2092 + 2093: 1947(ptr) AccessChain 34(data) 2084 73 69 + 2094: 23(int16_t) CompositeExtract 2088 2 + Store 2093 2094 + 2095: 6(int) Load 8(invocation) + 2096: 1954(ptr) AccessChain 34(data) 73 73 2097: 24(i16vec4) Load 2096 - 2098: 24(i16vec4) VectorShuffle 2097 2095 4 5 2 3 - Store 2096 2098 - 2099: 6(int) Load 8(invocation) - 2100: 1700(ptr) AccessChain 34(data) 57 67 - 2101: 24(i16vec4) Load 2100 - 2102:1709(i16vec3) VectorShuffle 2101 2101 0 1 2 - 2103:1709(i16vec3) GroupNonUniformIMul 42 ExclusiveScan 2102 - 2104: 1700(ptr) AccessChain 34(data) 2099 67 - 2105: 24(i16vec4) Load 2104 - 2106: 24(i16vec4) VectorShuffle 2105 2103 4 5 6 3 - Store 2104 2106 - 2107: 6(int) Load 8(invocation) - 2108: 1700(ptr) AccessChain 34(data) 67 67 - 2109: 24(i16vec4) Load 2108 - 2110: 24(i16vec4) GroupNonUniformIMul 42 ExclusiveScan 2109 - 2111: 1700(ptr) AccessChain 34(data) 2107 67 - Store 2111 2110 - 2112: 6(int) Load 8(invocation) - 2113: 1693(ptr) AccessChain 34(data) 37 67 38 - 2114: 23(int16_t) Load 2113 - 2115: 23(int16_t) GroupNonUniformUMin 42 ExclusiveScan 2114 - 2116: 1693(ptr) AccessChain 34(data) 2112 67 38 - Store 2116 2115 - 2117: 6(int) Load 8(invocation) - 2118: 1700(ptr) AccessChain 34(data) 46 67 - 2119: 24(i16vec4) Load 2118 - 2120:1699(i16vec2) VectorShuffle 2119 2119 0 1 - 2121:1699(i16vec2) GroupNonUniformUMin 42 ExclusiveScan 2120 - 2122: 1700(ptr) AccessChain 34(data) 2117 67 - 2123: 24(i16vec4) Load 2122 - 2124: 24(i16vec4) VectorShuffle 2123 2121 4 5 2 3 - Store 2122 2124 + 2098: 24(i16vec4) GroupNonUniformBitwiseAnd 42 Reduce 2097 + 2099: 1954(ptr) AccessChain 34(data) 2095 73 + Store 2099 2098 + 2100: 6(int) Load 8(invocation) + 2101: 1947(ptr) AccessChain 34(data) 37 73 38 + 2102: 23(int16_t) Load 2101 + 2103: 23(int16_t) GroupNonUniformBitwiseOr 42 Reduce 2102 + 2104: 1947(ptr) AccessChain 34(data) 2100 73 38 + Store 2104 2103 + 2105: 6(int) Load 8(invocation) + 2106: 1954(ptr) AccessChain 34(data) 46 73 + 2107: 24(i16vec4) Load 2106 + 2108:1953(i16vec2) VectorShuffle 2107 2107 0 1 + 2109:1953(i16vec2) GroupNonUniformBitwiseOr 42 Reduce 2108 + 2110: 1947(ptr) AccessChain 34(data) 2105 73 38 + 2111: 23(int16_t) CompositeExtract 2109 0 + Store 2110 2111 + 2112: 1947(ptr) AccessChain 34(data) 2105 73 55 + 2113: 23(int16_t) CompositeExtract 2109 1 + Store 2112 2113 + 2114: 6(int) Load 8(invocation) + 2115: 1954(ptr) AccessChain 34(data) 59 73 + 2116: 24(i16vec4) Load 2115 + 2117:1964(i16vec3) VectorShuffle 2116 2116 0 1 2 + 2118:1964(i16vec3) GroupNonUniformBitwiseOr 42 Reduce 2117 + 2119: 1947(ptr) AccessChain 34(data) 2114 73 38 + 2120: 23(int16_t) CompositeExtract 2118 0 + Store 2119 2120 + 2121: 1947(ptr) AccessChain 34(data) 2114 73 55 + 2122: 23(int16_t) CompositeExtract 2118 1 + Store 2121 2122 + 2123: 1947(ptr) AccessChain 34(data) 2114 73 69 + 2124: 23(int16_t) CompositeExtract 2118 2 + Store 2123 2124 2125: 6(int) Load 8(invocation) - 2126: 1700(ptr) AccessChain 34(data) 57 67 + 2126: 1954(ptr) AccessChain 34(data) 73 73 2127: 24(i16vec4) Load 2126 - 2128:1709(i16vec3) VectorShuffle 2127 2127 0 1 2 - 2129:1709(i16vec3) GroupNonUniformUMin 42 ExclusiveScan 2128 - 2130: 1700(ptr) AccessChain 34(data) 2125 67 - 2131: 24(i16vec4) Load 2130 - 2132: 24(i16vec4) VectorShuffle 2131 2129 4 5 6 3 - Store 2130 2132 - 2133: 6(int) Load 8(invocation) - 2134: 1700(ptr) AccessChain 34(data) 67 67 - 2135: 24(i16vec4) Load 2134 - 2136: 24(i16vec4) GroupNonUniformUMin 42 ExclusiveScan 2135 - 2137: 1700(ptr) AccessChain 34(data) 2133 67 - Store 2137 2136 - 2138: 6(int) Load 8(invocation) - 2139: 1693(ptr) AccessChain 34(data) 37 67 38 - 2140: 23(int16_t) Load 2139 - 2141: 23(int16_t) GroupNonUniformUMax 42 ExclusiveScan 2140 - 2142: 1693(ptr) AccessChain 34(data) 2138 67 38 - Store 2142 2141 - 2143: 6(int) Load 8(invocation) - 2144: 1700(ptr) AccessChain 34(data) 46 67 - 2145: 24(i16vec4) Load 2144 - 2146:1699(i16vec2) VectorShuffle 2145 2145 0 1 - 2147:1699(i16vec2) GroupNonUniformUMax 42 ExclusiveScan 2146 - 2148: 1700(ptr) AccessChain 34(data) 2143 67 - 2149: 24(i16vec4) Load 2148 - 2150: 24(i16vec4) VectorShuffle 2149 2147 4 5 2 3 - Store 2148 2150 - 2151: 6(int) Load 8(invocation) - 2152: 1700(ptr) AccessChain 34(data) 57 67 - 2153: 24(i16vec4) Load 2152 - 2154:1709(i16vec3) VectorShuffle 2153 2153 0 1 2 - 2155:1709(i16vec3) GroupNonUniformUMax 42 ExclusiveScan 2154 - 2156: 1700(ptr) AccessChain 34(data) 2151 67 + 2128: 24(i16vec4) GroupNonUniformBitwiseOr 42 Reduce 2127 + 2129: 1954(ptr) AccessChain 34(data) 2125 73 + Store 2129 2128 + 2130: 6(int) Load 8(invocation) + 2131: 1947(ptr) AccessChain 34(data) 37 73 38 + 2132: 23(int16_t) Load 2131 + 2133: 23(int16_t) GroupNonUniformBitwiseXor 42 Reduce 2132 + 2134: 1947(ptr) AccessChain 34(data) 2130 73 38 + Store 2134 2133 + 2135: 6(int) Load 8(invocation) + 2136: 1954(ptr) AccessChain 34(data) 46 73 + 2137: 24(i16vec4) Load 2136 + 2138:1953(i16vec2) VectorShuffle 2137 2137 0 1 + 2139:1953(i16vec2) GroupNonUniformBitwiseXor 42 Reduce 2138 + 2140: 1947(ptr) AccessChain 34(data) 2135 73 38 + 2141: 23(int16_t) CompositeExtract 2139 0 + Store 2140 2141 + 2142: 1947(ptr) AccessChain 34(data) 2135 73 55 + 2143: 23(int16_t) CompositeExtract 2139 1 + Store 2142 2143 + 2144: 6(int) Load 8(invocation) + 2145: 1954(ptr) AccessChain 34(data) 59 73 + 2146: 24(i16vec4) Load 2145 + 2147:1964(i16vec3) VectorShuffle 2146 2146 0 1 2 + 2148:1964(i16vec3) GroupNonUniformBitwiseXor 42 Reduce 2147 + 2149: 1947(ptr) AccessChain 34(data) 2144 73 38 + 2150: 23(int16_t) CompositeExtract 2148 0 + Store 2149 2150 + 2151: 1947(ptr) AccessChain 34(data) 2144 73 55 + 2152: 23(int16_t) CompositeExtract 2148 1 + Store 2151 2152 + 2153: 1947(ptr) AccessChain 34(data) 2144 73 69 + 2154: 23(int16_t) CompositeExtract 2148 2 + Store 2153 2154 + 2155: 6(int) Load 8(invocation) + 2156: 1954(ptr) AccessChain 34(data) 73 73 2157: 24(i16vec4) Load 2156 - 2158: 24(i16vec4) VectorShuffle 2157 2155 4 5 6 3 - Store 2156 2158 - 2159: 6(int) Load 8(invocation) - 2160: 1700(ptr) AccessChain 34(data) 67 67 - 2161: 24(i16vec4) Load 2160 - 2162: 24(i16vec4) GroupNonUniformUMax 42 ExclusiveScan 2161 - 2163: 1700(ptr) AccessChain 34(data) 2159 67 - Store 2163 2162 - 2164: 6(int) Load 8(invocation) - 2165: 1693(ptr) AccessChain 34(data) 37 67 38 - 2166: 23(int16_t) Load 2165 - 2167: 23(int16_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2166 - 2168: 1693(ptr) AccessChain 34(data) 2164 67 38 - Store 2168 2167 - 2169: 6(int) Load 8(invocation) - 2170: 1700(ptr) AccessChain 34(data) 46 67 - 2171: 24(i16vec4) Load 2170 - 2172:1699(i16vec2) VectorShuffle 2171 2171 0 1 - 2173:1699(i16vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2172 - 2174: 1700(ptr) AccessChain 34(data) 2169 67 - 2175: 24(i16vec4) Load 2174 - 2176: 24(i16vec4) VectorShuffle 2175 2173 4 5 2 3 - Store 2174 2176 - 2177: 6(int) Load 8(invocation) - 2178: 1700(ptr) AccessChain 34(data) 57 67 - 2179: 24(i16vec4) Load 2178 - 2180:1709(i16vec3) VectorShuffle 2179 2179 0 1 2 - 2181:1709(i16vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2180 - 2182: 1700(ptr) AccessChain 34(data) 2177 67 - 2183: 24(i16vec4) Load 2182 - 2184: 24(i16vec4) VectorShuffle 2183 2181 4 5 6 3 - Store 2182 2184 + 2158: 24(i16vec4) GroupNonUniformBitwiseXor 42 Reduce 2157 + 2159: 1954(ptr) AccessChain 34(data) 2155 73 + Store 2159 2158 + 2160: 6(int) Load 8(invocation) + 2161: 1947(ptr) AccessChain 34(data) 37 73 38 + 2162: 23(int16_t) Load 2161 + 2163: 23(int16_t) GroupNonUniformIAdd 42 InclusiveScan 2162 + 2164: 1947(ptr) AccessChain 34(data) 2160 73 38 + Store 2164 2163 + 2165: 6(int) Load 8(invocation) + 2166: 1954(ptr) AccessChain 34(data) 46 73 + 2167: 24(i16vec4) Load 2166 + 2168:1953(i16vec2) VectorShuffle 2167 2167 0 1 + 2169:1953(i16vec2) GroupNonUniformIAdd 42 InclusiveScan 2168 + 2170: 1947(ptr) AccessChain 34(data) 2165 73 38 + 2171: 23(int16_t) CompositeExtract 2169 0 + Store 2170 2171 + 2172: 1947(ptr) AccessChain 34(data) 2165 73 55 + 2173: 23(int16_t) CompositeExtract 2169 1 + Store 2172 2173 + 2174: 6(int) Load 8(invocation) + 2175: 1954(ptr) AccessChain 34(data) 59 73 + 2176: 24(i16vec4) Load 2175 + 2177:1964(i16vec3) VectorShuffle 2176 2176 0 1 2 + 2178:1964(i16vec3) GroupNonUniformIAdd 42 InclusiveScan 2177 + 2179: 1947(ptr) AccessChain 34(data) 2174 73 38 + 2180: 23(int16_t) CompositeExtract 2178 0 + Store 2179 2180 + 2181: 1947(ptr) AccessChain 34(data) 2174 73 55 + 2182: 23(int16_t) CompositeExtract 2178 1 + Store 2181 2182 + 2183: 1947(ptr) AccessChain 34(data) 2174 73 69 + 2184: 23(int16_t) CompositeExtract 2178 2 + Store 2183 2184 2185: 6(int) Load 8(invocation) - 2186: 1700(ptr) AccessChain 34(data) 67 67 + 2186: 1954(ptr) AccessChain 34(data) 73 73 2187: 24(i16vec4) Load 2186 - 2188: 24(i16vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2187 - 2189: 1700(ptr) AccessChain 34(data) 2185 67 + 2188: 24(i16vec4) GroupNonUniformIAdd 42 InclusiveScan 2187 + 2189: 1954(ptr) AccessChain 34(data) 2185 73 Store 2189 2188 2190: 6(int) Load 8(invocation) - 2191: 1693(ptr) AccessChain 34(data) 37 67 38 + 2191: 1947(ptr) AccessChain 34(data) 37 73 38 2192: 23(int16_t) Load 2191 - 2193: 23(int16_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 2192 - 2194: 1693(ptr) AccessChain 34(data) 2190 67 38 + 2193: 23(int16_t) GroupNonUniformIMul 42 InclusiveScan 2192 + 2194: 1947(ptr) AccessChain 34(data) 2190 73 38 Store 2194 2193 2195: 6(int) Load 8(invocation) - 2196: 1700(ptr) AccessChain 34(data) 46 67 + 2196: 1954(ptr) AccessChain 34(data) 46 73 2197: 24(i16vec4) Load 2196 - 2198:1699(i16vec2) VectorShuffle 2197 2197 0 1 - 2199:1699(i16vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 2198 - 2200: 1700(ptr) AccessChain 34(data) 2195 67 - 2201: 24(i16vec4) Load 2200 - 2202: 24(i16vec4) VectorShuffle 2201 2199 4 5 2 3 - Store 2200 2202 - 2203: 6(int) Load 8(invocation) - 2204: 1700(ptr) AccessChain 34(data) 57 67 - 2205: 24(i16vec4) Load 2204 - 2206:1709(i16vec3) VectorShuffle 2205 2205 0 1 2 - 2207:1709(i16vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 2206 - 2208: 1700(ptr) AccessChain 34(data) 2203 67 - 2209: 24(i16vec4) Load 2208 - 2210: 24(i16vec4) VectorShuffle 2209 2207 4 5 6 3 - Store 2208 2210 - 2211: 6(int) Load 8(invocation) - 2212: 1700(ptr) AccessChain 34(data) 67 67 - 2213: 24(i16vec4) Load 2212 - 2214: 24(i16vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 2213 - 2215: 1700(ptr) AccessChain 34(data) 2211 67 - Store 2215 2214 - 2216: 6(int) Load 8(invocation) - 2217: 1693(ptr) AccessChain 34(data) 37 67 38 - 2218: 23(int16_t) Load 2217 - 2219: 23(int16_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 2218 - 2220: 1693(ptr) AccessChain 34(data) 2216 67 38 - Store 2220 2219 - 2221: 6(int) Load 8(invocation) - 2222: 1700(ptr) AccessChain 34(data) 46 67 - 2223: 24(i16vec4) Load 2222 - 2224:1699(i16vec2) VectorShuffle 2223 2223 0 1 - 2225:1699(i16vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 2224 - 2226: 1700(ptr) AccessChain 34(data) 2221 67 + 2198:1953(i16vec2) VectorShuffle 2197 2197 0 1 + 2199:1953(i16vec2) GroupNonUniformIMul 42 InclusiveScan 2198 + 2200: 1947(ptr) AccessChain 34(data) 2195 73 38 + 2201: 23(int16_t) CompositeExtract 2199 0 + Store 2200 2201 + 2202: 1947(ptr) AccessChain 34(data) 2195 73 55 + 2203: 23(int16_t) CompositeExtract 2199 1 + Store 2202 2203 + 2204: 6(int) Load 8(invocation) + 2205: 1954(ptr) AccessChain 34(data) 59 73 + 2206: 24(i16vec4) Load 2205 + 2207:1964(i16vec3) VectorShuffle 2206 2206 0 1 2 + 2208:1964(i16vec3) GroupNonUniformIMul 42 InclusiveScan 2207 + 2209: 1947(ptr) AccessChain 34(data) 2204 73 38 + 2210: 23(int16_t) CompositeExtract 2208 0 + Store 2209 2210 + 2211: 1947(ptr) AccessChain 34(data) 2204 73 55 + 2212: 23(int16_t) CompositeExtract 2208 1 + Store 2211 2212 + 2213: 1947(ptr) AccessChain 34(data) 2204 73 69 + 2214: 23(int16_t) CompositeExtract 2208 2 + Store 2213 2214 + 2215: 6(int) Load 8(invocation) + 2216: 1954(ptr) AccessChain 34(data) 73 73 + 2217: 24(i16vec4) Load 2216 + 2218: 24(i16vec4) GroupNonUniformIMul 42 InclusiveScan 2217 + 2219: 1954(ptr) AccessChain 34(data) 2215 73 + Store 2219 2218 + 2220: 6(int) Load 8(invocation) + 2221: 1947(ptr) AccessChain 34(data) 37 73 38 + 2222: 23(int16_t) Load 2221 + 2223: 23(int16_t) GroupNonUniformUMin 42 InclusiveScan 2222 + 2224: 1947(ptr) AccessChain 34(data) 2220 73 38 + Store 2224 2223 + 2225: 6(int) Load 8(invocation) + 2226: 1954(ptr) AccessChain 34(data) 46 73 2227: 24(i16vec4) Load 2226 - 2228: 24(i16vec4) VectorShuffle 2227 2225 4 5 2 3 - Store 2226 2228 - 2229: 6(int) Load 8(invocation) - 2230: 1700(ptr) AccessChain 34(data) 57 67 - 2231: 24(i16vec4) Load 2230 - 2232:1709(i16vec3) VectorShuffle 2231 2231 0 1 2 - 2233:1709(i16vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 2232 - 2234: 1700(ptr) AccessChain 34(data) 2229 67 - 2235: 24(i16vec4) Load 2234 - 2236: 24(i16vec4) VectorShuffle 2235 2233 4 5 6 3 - Store 2234 2236 - 2237: 6(int) Load 8(invocation) - 2238: 1700(ptr) AccessChain 34(data) 67 67 - 2239: 24(i16vec4) Load 2238 - 2240: 24(i16vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 2239 - 2241: 1700(ptr) AccessChain 34(data) 2237 67 - Store 2241 2240 - 2242: 6(int) Load 8(invocation) - 2245: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2246: 25(int64_t) Load 2245 - 2247: 25(int64_t) GroupNonUniformIAdd 42 Reduce 2246 - 2248: 2244(ptr) AccessChain 34(data) 2242 2243 38 - Store 2248 2247 - 2249: 6(int) Load 8(invocation) - 2252: 2251(ptr) AccessChain 34(data) 46 2243 - 2253: 26(i64vec4) Load 2252 - 2254:2250(i64vec2) VectorShuffle 2253 2253 0 1 - 2255:2250(i64vec2) GroupNonUniformIAdd 42 Reduce 2254 - 2256: 2251(ptr) AccessChain 34(data) 2249 2243 - 2257: 26(i64vec4) Load 2256 - 2258: 26(i64vec4) VectorShuffle 2257 2255 4 5 2 3 - Store 2256 2258 - 2259: 6(int) Load 8(invocation) - 2261: 2251(ptr) AccessChain 34(data) 57 2243 - 2262: 26(i64vec4) Load 2261 - 2263:2260(i64vec3) VectorShuffle 2262 2262 0 1 2 - 2264:2260(i64vec3) GroupNonUniformIAdd 42 Reduce 2263 - 2265: 2251(ptr) AccessChain 34(data) 2259 2243 - 2266: 26(i64vec4) Load 2265 - 2267: 26(i64vec4) VectorShuffle 2266 2264 4 5 6 3 - Store 2265 2267 - 2268: 6(int) Load 8(invocation) - 2269: 2251(ptr) AccessChain 34(data) 67 2243 - 2270: 26(i64vec4) Load 2269 - 2271: 26(i64vec4) GroupNonUniformIAdd 42 Reduce 2270 - 2272: 2251(ptr) AccessChain 34(data) 2268 2243 - Store 2272 2271 - 2273: 6(int) Load 8(invocation) - 2274: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2275: 25(int64_t) Load 2274 - 2276: 25(int64_t) GroupNonUniformIMul 42 Reduce 2275 - 2277: 2244(ptr) AccessChain 34(data) 2273 2243 38 - Store 2277 2276 - 2278: 6(int) Load 8(invocation) - 2279: 2251(ptr) AccessChain 34(data) 46 2243 - 2280: 26(i64vec4) Load 2279 - 2281:2250(i64vec2) VectorShuffle 2280 2280 0 1 - 2282:2250(i64vec2) GroupNonUniformIMul 42 Reduce 2281 - 2283: 2251(ptr) AccessChain 34(data) 2278 2243 - 2284: 26(i64vec4) Load 2283 - 2285: 26(i64vec4) VectorShuffle 2284 2282 4 5 2 3 - Store 2283 2285 - 2286: 6(int) Load 8(invocation) - 2287: 2251(ptr) AccessChain 34(data) 57 2243 - 2288: 26(i64vec4) Load 2287 - 2289:2260(i64vec3) VectorShuffle 2288 2288 0 1 2 - 2290:2260(i64vec3) GroupNonUniformIMul 42 Reduce 2289 - 2291: 2251(ptr) AccessChain 34(data) 2286 2243 - 2292: 26(i64vec4) Load 2291 - 2293: 26(i64vec4) VectorShuffle 2292 2290 4 5 6 3 - Store 2291 2293 + 2228:1953(i16vec2) VectorShuffle 2227 2227 0 1 + 2229:1953(i16vec2) GroupNonUniformUMin 42 InclusiveScan 2228 + 2230: 1947(ptr) AccessChain 34(data) 2225 73 38 + 2231: 23(int16_t) CompositeExtract 2229 0 + Store 2230 2231 + 2232: 1947(ptr) AccessChain 34(data) 2225 73 55 + 2233: 23(int16_t) CompositeExtract 2229 1 + Store 2232 2233 + 2234: 6(int) Load 8(invocation) + 2235: 1954(ptr) AccessChain 34(data) 59 73 + 2236: 24(i16vec4) Load 2235 + 2237:1964(i16vec3) VectorShuffle 2236 2236 0 1 2 + 2238:1964(i16vec3) GroupNonUniformUMin 42 InclusiveScan 2237 + 2239: 1947(ptr) AccessChain 34(data) 2234 73 38 + 2240: 23(int16_t) CompositeExtract 2238 0 + Store 2239 2240 + 2241: 1947(ptr) AccessChain 34(data) 2234 73 55 + 2242: 23(int16_t) CompositeExtract 2238 1 + Store 2241 2242 + 2243: 1947(ptr) AccessChain 34(data) 2234 73 69 + 2244: 23(int16_t) CompositeExtract 2238 2 + Store 2243 2244 + 2245: 6(int) Load 8(invocation) + 2246: 1954(ptr) AccessChain 34(data) 73 73 + 2247: 24(i16vec4) Load 2246 + 2248: 24(i16vec4) GroupNonUniformUMin 42 InclusiveScan 2247 + 2249: 1954(ptr) AccessChain 34(data) 2245 73 + Store 2249 2248 + 2250: 6(int) Load 8(invocation) + 2251: 1947(ptr) AccessChain 34(data) 37 73 38 + 2252: 23(int16_t) Load 2251 + 2253: 23(int16_t) GroupNonUniformUMax 42 InclusiveScan 2252 + 2254: 1947(ptr) AccessChain 34(data) 2250 73 38 + Store 2254 2253 + 2255: 6(int) Load 8(invocation) + 2256: 1954(ptr) AccessChain 34(data) 46 73 + 2257: 24(i16vec4) Load 2256 + 2258:1953(i16vec2) VectorShuffle 2257 2257 0 1 + 2259:1953(i16vec2) GroupNonUniformUMax 42 InclusiveScan 2258 + 2260: 1947(ptr) AccessChain 34(data) 2255 73 38 + 2261: 23(int16_t) CompositeExtract 2259 0 + Store 2260 2261 + 2262: 1947(ptr) AccessChain 34(data) 2255 73 55 + 2263: 23(int16_t) CompositeExtract 2259 1 + Store 2262 2263 + 2264: 6(int) Load 8(invocation) + 2265: 1954(ptr) AccessChain 34(data) 59 73 + 2266: 24(i16vec4) Load 2265 + 2267:1964(i16vec3) VectorShuffle 2266 2266 0 1 2 + 2268:1964(i16vec3) GroupNonUniformUMax 42 InclusiveScan 2267 + 2269: 1947(ptr) AccessChain 34(data) 2264 73 38 + 2270: 23(int16_t) CompositeExtract 2268 0 + Store 2269 2270 + 2271: 1947(ptr) AccessChain 34(data) 2264 73 55 + 2272: 23(int16_t) CompositeExtract 2268 1 + Store 2271 2272 + 2273: 1947(ptr) AccessChain 34(data) 2264 73 69 + 2274: 23(int16_t) CompositeExtract 2268 2 + Store 2273 2274 + 2275: 6(int) Load 8(invocation) + 2276: 1954(ptr) AccessChain 34(data) 73 73 + 2277: 24(i16vec4) Load 2276 + 2278: 24(i16vec4) GroupNonUniformUMax 42 InclusiveScan 2277 + 2279: 1954(ptr) AccessChain 34(data) 2275 73 + Store 2279 2278 + 2280: 6(int) Load 8(invocation) + 2281: 1947(ptr) AccessChain 34(data) 37 73 38 + 2282: 23(int16_t) Load 2281 + 2283: 23(int16_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 2282 + 2284: 1947(ptr) AccessChain 34(data) 2280 73 38 + Store 2284 2283 + 2285: 6(int) Load 8(invocation) + 2286: 1954(ptr) AccessChain 34(data) 46 73 + 2287: 24(i16vec4) Load 2286 + 2288:1953(i16vec2) VectorShuffle 2287 2287 0 1 + 2289:1953(i16vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 2288 + 2290: 1947(ptr) AccessChain 34(data) 2285 73 38 + 2291: 23(int16_t) CompositeExtract 2289 0 + Store 2290 2291 + 2292: 1947(ptr) AccessChain 34(data) 2285 73 55 + 2293: 23(int16_t) CompositeExtract 2289 1 + Store 2292 2293 2294: 6(int) Load 8(invocation) - 2295: 2251(ptr) AccessChain 34(data) 67 2243 - 2296: 26(i64vec4) Load 2295 - 2297: 26(i64vec4) GroupNonUniformIMul 42 Reduce 2296 - 2298: 2251(ptr) AccessChain 34(data) 2294 2243 - Store 2298 2297 - 2299: 6(int) Load 8(invocation) - 2300: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2301: 25(int64_t) Load 2300 - 2302: 25(int64_t) GroupNonUniformSMin 42 Reduce 2301 - 2303: 2244(ptr) AccessChain 34(data) 2299 2243 38 - Store 2303 2302 - 2304: 6(int) Load 8(invocation) - 2305: 2251(ptr) AccessChain 34(data) 46 2243 - 2306: 26(i64vec4) Load 2305 - 2307:2250(i64vec2) VectorShuffle 2306 2306 0 1 - 2308:2250(i64vec2) GroupNonUniformSMin 42 Reduce 2307 - 2309: 2251(ptr) AccessChain 34(data) 2304 2243 - 2310: 26(i64vec4) Load 2309 - 2311: 26(i64vec4) VectorShuffle 2310 2308 4 5 2 3 - Store 2309 2311 - 2312: 6(int) Load 8(invocation) - 2313: 2251(ptr) AccessChain 34(data) 57 2243 - 2314: 26(i64vec4) Load 2313 - 2315:2260(i64vec3) VectorShuffle 2314 2314 0 1 2 - 2316:2260(i64vec3) GroupNonUniformSMin 42 Reduce 2315 - 2317: 2251(ptr) AccessChain 34(data) 2312 2243 - 2318: 26(i64vec4) Load 2317 - 2319: 26(i64vec4) VectorShuffle 2318 2316 4 5 6 3 - Store 2317 2319 - 2320: 6(int) Load 8(invocation) - 2321: 2251(ptr) AccessChain 34(data) 67 2243 - 2322: 26(i64vec4) Load 2321 - 2323: 26(i64vec4) GroupNonUniformSMin 42 Reduce 2322 - 2324: 2251(ptr) AccessChain 34(data) 2320 2243 - Store 2324 2323 - 2325: 6(int) Load 8(invocation) - 2326: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2327: 25(int64_t) Load 2326 - 2328: 25(int64_t) GroupNonUniformSMax 42 Reduce 2327 - 2329: 2244(ptr) AccessChain 34(data) 2325 2243 38 - Store 2329 2328 - 2330: 6(int) Load 8(invocation) - 2331: 2251(ptr) AccessChain 34(data) 46 2243 - 2332: 26(i64vec4) Load 2331 - 2333:2250(i64vec2) VectorShuffle 2332 2332 0 1 - 2334:2250(i64vec2) GroupNonUniformSMax 42 Reduce 2333 - 2335: 2251(ptr) AccessChain 34(data) 2330 2243 - 2336: 26(i64vec4) Load 2335 - 2337: 26(i64vec4) VectorShuffle 2336 2334 4 5 2 3 - Store 2335 2337 - 2338: 6(int) Load 8(invocation) - 2339: 2251(ptr) AccessChain 34(data) 57 2243 - 2340: 26(i64vec4) Load 2339 - 2341:2260(i64vec3) VectorShuffle 2340 2340 0 1 2 - 2342:2260(i64vec3) GroupNonUniformSMax 42 Reduce 2341 - 2343: 2251(ptr) AccessChain 34(data) 2338 2243 - 2344: 26(i64vec4) Load 2343 - 2345: 26(i64vec4) VectorShuffle 2344 2342 4 5 6 3 - Store 2343 2345 - 2346: 6(int) Load 8(invocation) - 2347: 2251(ptr) AccessChain 34(data) 67 2243 - 2348: 26(i64vec4) Load 2347 - 2349: 26(i64vec4) GroupNonUniformSMax 42 Reduce 2348 - 2350: 2251(ptr) AccessChain 34(data) 2346 2243 - Store 2350 2349 - 2351: 6(int) Load 8(invocation) - 2352: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2353: 25(int64_t) Load 2352 - 2354: 25(int64_t) GroupNonUniformBitwiseAnd 42 Reduce 2353 - 2355: 2244(ptr) AccessChain 34(data) 2351 2243 38 - Store 2355 2354 - 2356: 6(int) Load 8(invocation) - 2357: 2251(ptr) AccessChain 34(data) 46 2243 - 2358: 26(i64vec4) Load 2357 - 2359:2250(i64vec2) VectorShuffle 2358 2358 0 1 - 2360:2250(i64vec2) GroupNonUniformBitwiseAnd 42 Reduce 2359 - 2361: 2251(ptr) AccessChain 34(data) 2356 2243 - 2362: 26(i64vec4) Load 2361 - 2363: 26(i64vec4) VectorShuffle 2362 2360 4 5 2 3 - Store 2361 2363 - 2364: 6(int) Load 8(invocation) - 2365: 2251(ptr) AccessChain 34(data) 57 2243 - 2366: 26(i64vec4) Load 2365 - 2367:2260(i64vec3) VectorShuffle 2366 2366 0 1 2 - 2368:2260(i64vec3) GroupNonUniformBitwiseAnd 42 Reduce 2367 - 2369: 2251(ptr) AccessChain 34(data) 2364 2243 - 2370: 26(i64vec4) Load 2369 - 2371: 26(i64vec4) VectorShuffle 2370 2368 4 5 6 3 - Store 2369 2371 - 2372: 6(int) Load 8(invocation) - 2373: 2251(ptr) AccessChain 34(data) 67 2243 - 2374: 26(i64vec4) Load 2373 - 2375: 26(i64vec4) GroupNonUniformBitwiseAnd 42 Reduce 2374 - 2376: 2251(ptr) AccessChain 34(data) 2372 2243 - Store 2376 2375 - 2377: 6(int) Load 8(invocation) - 2378: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2379: 25(int64_t) Load 2378 - 2380: 25(int64_t) GroupNonUniformBitwiseOr 42 Reduce 2379 - 2381: 2244(ptr) AccessChain 34(data) 2377 2243 38 - Store 2381 2380 - 2382: 6(int) Load 8(invocation) - 2383: 2251(ptr) AccessChain 34(data) 46 2243 - 2384: 26(i64vec4) Load 2383 - 2385:2250(i64vec2) VectorShuffle 2384 2384 0 1 - 2386:2250(i64vec2) GroupNonUniformBitwiseOr 42 Reduce 2385 - 2387: 2251(ptr) AccessChain 34(data) 2382 2243 - 2388: 26(i64vec4) Load 2387 - 2389: 26(i64vec4) VectorShuffle 2388 2386 4 5 2 3 - Store 2387 2389 - 2390: 6(int) Load 8(invocation) - 2391: 2251(ptr) AccessChain 34(data) 57 2243 - 2392: 26(i64vec4) Load 2391 - 2393:2260(i64vec3) VectorShuffle 2392 2392 0 1 2 - 2394:2260(i64vec3) GroupNonUniformBitwiseOr 42 Reduce 2393 - 2395: 2251(ptr) AccessChain 34(data) 2390 2243 - 2396: 26(i64vec4) Load 2395 - 2397: 26(i64vec4) VectorShuffle 2396 2394 4 5 6 3 - Store 2395 2397 - 2398: 6(int) Load 8(invocation) - 2399: 2251(ptr) AccessChain 34(data) 67 2243 - 2400: 26(i64vec4) Load 2399 - 2401: 26(i64vec4) GroupNonUniformBitwiseOr 42 Reduce 2400 - 2402: 2251(ptr) AccessChain 34(data) 2398 2243 - Store 2402 2401 - 2403: 6(int) Load 8(invocation) - 2404: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2405: 25(int64_t) Load 2404 - 2406: 25(int64_t) GroupNonUniformBitwiseXor 42 Reduce 2405 - 2407: 2244(ptr) AccessChain 34(data) 2403 2243 38 - Store 2407 2406 - 2408: 6(int) Load 8(invocation) - 2409: 2251(ptr) AccessChain 34(data) 46 2243 - 2410: 26(i64vec4) Load 2409 - 2411:2250(i64vec2) VectorShuffle 2410 2410 0 1 - 2412:2250(i64vec2) GroupNonUniformBitwiseXor 42 Reduce 2411 - 2413: 2251(ptr) AccessChain 34(data) 2408 2243 - 2414: 26(i64vec4) Load 2413 - 2415: 26(i64vec4) VectorShuffle 2414 2412 4 5 2 3 - Store 2413 2415 - 2416: 6(int) Load 8(invocation) - 2417: 2251(ptr) AccessChain 34(data) 57 2243 - 2418: 26(i64vec4) Load 2417 - 2419:2260(i64vec3) VectorShuffle 2418 2418 0 1 2 - 2420:2260(i64vec3) GroupNonUniformBitwiseXor 42 Reduce 2419 - 2421: 2251(ptr) AccessChain 34(data) 2416 2243 - 2422: 26(i64vec4) Load 2421 - 2423: 26(i64vec4) VectorShuffle 2422 2420 4 5 6 3 - Store 2421 2423 - 2424: 6(int) Load 8(invocation) - 2425: 2251(ptr) AccessChain 34(data) 67 2243 - 2426: 26(i64vec4) Load 2425 - 2427: 26(i64vec4) GroupNonUniformBitwiseXor 42 Reduce 2426 - 2428: 2251(ptr) AccessChain 34(data) 2424 2243 - Store 2428 2427 - 2429: 6(int) Load 8(invocation) - 2430: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2431: 25(int64_t) Load 2430 - 2432: 25(int64_t) GroupNonUniformIAdd 42 InclusiveScan 2431 - 2433: 2244(ptr) AccessChain 34(data) 2429 2243 38 - Store 2433 2432 - 2434: 6(int) Load 8(invocation) - 2435: 2251(ptr) AccessChain 34(data) 46 2243 - 2436: 26(i64vec4) Load 2435 - 2437:2250(i64vec2) VectorShuffle 2436 2436 0 1 - 2438:2250(i64vec2) GroupNonUniformIAdd 42 InclusiveScan 2437 - 2439: 2251(ptr) AccessChain 34(data) 2434 2243 - 2440: 26(i64vec4) Load 2439 - 2441: 26(i64vec4) VectorShuffle 2440 2438 4 5 2 3 - Store 2439 2441 - 2442: 6(int) Load 8(invocation) - 2443: 2251(ptr) AccessChain 34(data) 57 2243 - 2444: 26(i64vec4) Load 2443 - 2445:2260(i64vec3) VectorShuffle 2444 2444 0 1 2 - 2446:2260(i64vec3) GroupNonUniformIAdd 42 InclusiveScan 2445 - 2447: 2251(ptr) AccessChain 34(data) 2442 2243 - 2448: 26(i64vec4) Load 2447 - 2449: 26(i64vec4) VectorShuffle 2448 2446 4 5 6 3 - Store 2447 2449 - 2450: 6(int) Load 8(invocation) - 2451: 2251(ptr) AccessChain 34(data) 67 2243 - 2452: 26(i64vec4) Load 2451 - 2453: 26(i64vec4) GroupNonUniformIAdd 42 InclusiveScan 2452 - 2454: 2251(ptr) AccessChain 34(data) 2450 2243 - Store 2454 2453 + 2295: 1954(ptr) AccessChain 34(data) 59 73 + 2296: 24(i16vec4) Load 2295 + 2297:1964(i16vec3) VectorShuffle 2296 2296 0 1 2 + 2298:1964(i16vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 2297 + 2299: 1947(ptr) AccessChain 34(data) 2294 73 38 + 2300: 23(int16_t) CompositeExtract 2298 0 + Store 2299 2300 + 2301: 1947(ptr) AccessChain 34(data) 2294 73 55 + 2302: 23(int16_t) CompositeExtract 2298 1 + Store 2301 2302 + 2303: 1947(ptr) AccessChain 34(data) 2294 73 69 + 2304: 23(int16_t) CompositeExtract 2298 2 + Store 2303 2304 + 2305: 6(int) Load 8(invocation) + 2306: 1954(ptr) AccessChain 34(data) 73 73 + 2307: 24(i16vec4) Load 2306 + 2308: 24(i16vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 2307 + 2309: 1954(ptr) AccessChain 34(data) 2305 73 + Store 2309 2308 + 2310: 6(int) Load 8(invocation) + 2311: 1947(ptr) AccessChain 34(data) 37 73 38 + 2312: 23(int16_t) Load 2311 + 2313: 23(int16_t) GroupNonUniformBitwiseOr 42 InclusiveScan 2312 + 2314: 1947(ptr) AccessChain 34(data) 2310 73 38 + Store 2314 2313 + 2315: 6(int) Load 8(invocation) + 2316: 1954(ptr) AccessChain 34(data) 46 73 + 2317: 24(i16vec4) Load 2316 + 2318:1953(i16vec2) VectorShuffle 2317 2317 0 1 + 2319:1953(i16vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 2318 + 2320: 1947(ptr) AccessChain 34(data) 2315 73 38 + 2321: 23(int16_t) CompositeExtract 2319 0 + Store 2320 2321 + 2322: 1947(ptr) AccessChain 34(data) 2315 73 55 + 2323: 23(int16_t) CompositeExtract 2319 1 + Store 2322 2323 + 2324: 6(int) Load 8(invocation) + 2325: 1954(ptr) AccessChain 34(data) 59 73 + 2326: 24(i16vec4) Load 2325 + 2327:1964(i16vec3) VectorShuffle 2326 2326 0 1 2 + 2328:1964(i16vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 2327 + 2329: 1947(ptr) AccessChain 34(data) 2324 73 38 + 2330: 23(int16_t) CompositeExtract 2328 0 + Store 2329 2330 + 2331: 1947(ptr) AccessChain 34(data) 2324 73 55 + 2332: 23(int16_t) CompositeExtract 2328 1 + Store 2331 2332 + 2333: 1947(ptr) AccessChain 34(data) 2324 73 69 + 2334: 23(int16_t) CompositeExtract 2328 2 + Store 2333 2334 + 2335: 6(int) Load 8(invocation) + 2336: 1954(ptr) AccessChain 34(data) 73 73 + 2337: 24(i16vec4) Load 2336 + 2338: 24(i16vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 2337 + 2339: 1954(ptr) AccessChain 34(data) 2335 73 + Store 2339 2338 + 2340: 6(int) Load 8(invocation) + 2341: 1947(ptr) AccessChain 34(data) 37 73 38 + 2342: 23(int16_t) Load 2341 + 2343: 23(int16_t) GroupNonUniformBitwiseXor 42 InclusiveScan 2342 + 2344: 1947(ptr) AccessChain 34(data) 2340 73 38 + Store 2344 2343 + 2345: 6(int) Load 8(invocation) + 2346: 1954(ptr) AccessChain 34(data) 46 73 + 2347: 24(i16vec4) Load 2346 + 2348:1953(i16vec2) VectorShuffle 2347 2347 0 1 + 2349:1953(i16vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 2348 + 2350: 1947(ptr) AccessChain 34(data) 2345 73 38 + 2351: 23(int16_t) CompositeExtract 2349 0 + Store 2350 2351 + 2352: 1947(ptr) AccessChain 34(data) 2345 73 55 + 2353: 23(int16_t) CompositeExtract 2349 1 + Store 2352 2353 + 2354: 6(int) Load 8(invocation) + 2355: 1954(ptr) AccessChain 34(data) 59 73 + 2356: 24(i16vec4) Load 2355 + 2357:1964(i16vec3) VectorShuffle 2356 2356 0 1 2 + 2358:1964(i16vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 2357 + 2359: 1947(ptr) AccessChain 34(data) 2354 73 38 + 2360: 23(int16_t) CompositeExtract 2358 0 + Store 2359 2360 + 2361: 1947(ptr) AccessChain 34(data) 2354 73 55 + 2362: 23(int16_t) CompositeExtract 2358 1 + Store 2361 2362 + 2363: 1947(ptr) AccessChain 34(data) 2354 73 69 + 2364: 23(int16_t) CompositeExtract 2358 2 + Store 2363 2364 + 2365: 6(int) Load 8(invocation) + 2366: 1954(ptr) AccessChain 34(data) 73 73 + 2367: 24(i16vec4) Load 2366 + 2368: 24(i16vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 2367 + 2369: 1954(ptr) AccessChain 34(data) 2365 73 + Store 2369 2368 + 2370: 6(int) Load 8(invocation) + 2371: 1947(ptr) AccessChain 34(data) 37 73 38 + 2372: 23(int16_t) Load 2371 + 2373: 23(int16_t) GroupNonUniformIAdd 42 ExclusiveScan 2372 + 2374: 1947(ptr) AccessChain 34(data) 2370 73 38 + Store 2374 2373 + 2375: 6(int) Load 8(invocation) + 2376: 1954(ptr) AccessChain 34(data) 46 73 + 2377: 24(i16vec4) Load 2376 + 2378:1953(i16vec2) VectorShuffle 2377 2377 0 1 + 2379:1953(i16vec2) GroupNonUniformIAdd 42 ExclusiveScan 2378 + 2380: 1947(ptr) AccessChain 34(data) 2375 73 38 + 2381: 23(int16_t) CompositeExtract 2379 0 + Store 2380 2381 + 2382: 1947(ptr) AccessChain 34(data) 2375 73 55 + 2383: 23(int16_t) CompositeExtract 2379 1 + Store 2382 2383 + 2384: 6(int) Load 8(invocation) + 2385: 1954(ptr) AccessChain 34(data) 59 73 + 2386: 24(i16vec4) Load 2385 + 2387:1964(i16vec3) VectorShuffle 2386 2386 0 1 2 + 2388:1964(i16vec3) GroupNonUniformIAdd 42 ExclusiveScan 2387 + 2389: 1947(ptr) AccessChain 34(data) 2384 73 38 + 2390: 23(int16_t) CompositeExtract 2388 0 + Store 2389 2390 + 2391: 1947(ptr) AccessChain 34(data) 2384 73 55 + 2392: 23(int16_t) CompositeExtract 2388 1 + Store 2391 2392 + 2393: 1947(ptr) AccessChain 34(data) 2384 73 69 + 2394: 23(int16_t) CompositeExtract 2388 2 + Store 2393 2394 + 2395: 6(int) Load 8(invocation) + 2396: 1954(ptr) AccessChain 34(data) 73 73 + 2397: 24(i16vec4) Load 2396 + 2398: 24(i16vec4) GroupNonUniformIAdd 42 ExclusiveScan 2397 + 2399: 1954(ptr) AccessChain 34(data) 2395 73 + Store 2399 2398 + 2400: 6(int) Load 8(invocation) + 2401: 1947(ptr) AccessChain 34(data) 37 73 38 + 2402: 23(int16_t) Load 2401 + 2403: 23(int16_t) GroupNonUniformIMul 42 ExclusiveScan 2402 + 2404: 1947(ptr) AccessChain 34(data) 2400 73 38 + Store 2404 2403 + 2405: 6(int) Load 8(invocation) + 2406: 1954(ptr) AccessChain 34(data) 46 73 + 2407: 24(i16vec4) Load 2406 + 2408:1953(i16vec2) VectorShuffle 2407 2407 0 1 + 2409:1953(i16vec2) GroupNonUniformIMul 42 ExclusiveScan 2408 + 2410: 1947(ptr) AccessChain 34(data) 2405 73 38 + 2411: 23(int16_t) CompositeExtract 2409 0 + Store 2410 2411 + 2412: 1947(ptr) AccessChain 34(data) 2405 73 55 + 2413: 23(int16_t) CompositeExtract 2409 1 + Store 2412 2413 + 2414: 6(int) Load 8(invocation) + 2415: 1954(ptr) AccessChain 34(data) 59 73 + 2416: 24(i16vec4) Load 2415 + 2417:1964(i16vec3) VectorShuffle 2416 2416 0 1 2 + 2418:1964(i16vec3) GroupNonUniformIMul 42 ExclusiveScan 2417 + 2419: 1947(ptr) AccessChain 34(data) 2414 73 38 + 2420: 23(int16_t) CompositeExtract 2418 0 + Store 2419 2420 + 2421: 1947(ptr) AccessChain 34(data) 2414 73 55 + 2422: 23(int16_t) CompositeExtract 2418 1 + Store 2421 2422 + 2423: 1947(ptr) AccessChain 34(data) 2414 73 69 + 2424: 23(int16_t) CompositeExtract 2418 2 + Store 2423 2424 + 2425: 6(int) Load 8(invocation) + 2426: 1954(ptr) AccessChain 34(data) 73 73 + 2427: 24(i16vec4) Load 2426 + 2428: 24(i16vec4) GroupNonUniformIMul 42 ExclusiveScan 2427 + 2429: 1954(ptr) AccessChain 34(data) 2425 73 + Store 2429 2428 + 2430: 6(int) Load 8(invocation) + 2431: 1947(ptr) AccessChain 34(data) 37 73 38 + 2432: 23(int16_t) Load 2431 + 2433: 23(int16_t) GroupNonUniformUMin 42 ExclusiveScan 2432 + 2434: 1947(ptr) AccessChain 34(data) 2430 73 38 + Store 2434 2433 + 2435: 6(int) Load 8(invocation) + 2436: 1954(ptr) AccessChain 34(data) 46 73 + 2437: 24(i16vec4) Load 2436 + 2438:1953(i16vec2) VectorShuffle 2437 2437 0 1 + 2439:1953(i16vec2) GroupNonUniformUMin 42 ExclusiveScan 2438 + 2440: 1947(ptr) AccessChain 34(data) 2435 73 38 + 2441: 23(int16_t) CompositeExtract 2439 0 + Store 2440 2441 + 2442: 1947(ptr) AccessChain 34(data) 2435 73 55 + 2443: 23(int16_t) CompositeExtract 2439 1 + Store 2442 2443 + 2444: 6(int) Load 8(invocation) + 2445: 1954(ptr) AccessChain 34(data) 59 73 + 2446: 24(i16vec4) Load 2445 + 2447:1964(i16vec3) VectorShuffle 2446 2446 0 1 2 + 2448:1964(i16vec3) GroupNonUniformUMin 42 ExclusiveScan 2447 + 2449: 1947(ptr) AccessChain 34(data) 2444 73 38 + 2450: 23(int16_t) CompositeExtract 2448 0 + Store 2449 2450 + 2451: 1947(ptr) AccessChain 34(data) 2444 73 55 + 2452: 23(int16_t) CompositeExtract 2448 1 + Store 2451 2452 + 2453: 1947(ptr) AccessChain 34(data) 2444 73 69 + 2454: 23(int16_t) CompositeExtract 2448 2 + Store 2453 2454 2455: 6(int) Load 8(invocation) - 2456: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2457: 25(int64_t) Load 2456 - 2458: 25(int64_t) GroupNonUniformIMul 42 InclusiveScan 2457 - 2459: 2244(ptr) AccessChain 34(data) 2455 2243 38 + 2456: 1954(ptr) AccessChain 34(data) 73 73 + 2457: 24(i16vec4) Load 2456 + 2458: 24(i16vec4) GroupNonUniformUMin 42 ExclusiveScan 2457 + 2459: 1954(ptr) AccessChain 34(data) 2455 73 Store 2459 2458 2460: 6(int) Load 8(invocation) - 2461: 2251(ptr) AccessChain 34(data) 46 2243 - 2462: 26(i64vec4) Load 2461 - 2463:2250(i64vec2) VectorShuffle 2462 2462 0 1 - 2464:2250(i64vec2) GroupNonUniformIMul 42 InclusiveScan 2463 - 2465: 2251(ptr) AccessChain 34(data) 2460 2243 - 2466: 26(i64vec4) Load 2465 - 2467: 26(i64vec4) VectorShuffle 2466 2464 4 5 2 3 - Store 2465 2467 - 2468: 6(int) Load 8(invocation) - 2469: 2251(ptr) AccessChain 34(data) 57 2243 - 2470: 26(i64vec4) Load 2469 - 2471:2260(i64vec3) VectorShuffle 2470 2470 0 1 2 - 2472:2260(i64vec3) GroupNonUniformIMul 42 InclusiveScan 2471 - 2473: 2251(ptr) AccessChain 34(data) 2468 2243 - 2474: 26(i64vec4) Load 2473 - 2475: 26(i64vec4) VectorShuffle 2474 2472 4 5 6 3 - Store 2473 2475 - 2476: 6(int) Load 8(invocation) - 2477: 2251(ptr) AccessChain 34(data) 67 2243 - 2478: 26(i64vec4) Load 2477 - 2479: 26(i64vec4) GroupNonUniformIMul 42 InclusiveScan 2478 - 2480: 2251(ptr) AccessChain 34(data) 2476 2243 - Store 2480 2479 - 2481: 6(int) Load 8(invocation) - 2482: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2483: 25(int64_t) Load 2482 - 2484: 25(int64_t) GroupNonUniformSMin 42 InclusiveScan 2483 - 2485: 2244(ptr) AccessChain 34(data) 2481 2243 38 - Store 2485 2484 - 2486: 6(int) Load 8(invocation) - 2487: 2251(ptr) AccessChain 34(data) 46 2243 - 2488: 26(i64vec4) Load 2487 - 2489:2250(i64vec2) VectorShuffle 2488 2488 0 1 - 2490:2250(i64vec2) GroupNonUniformSMin 42 InclusiveScan 2489 - 2491: 2251(ptr) AccessChain 34(data) 2486 2243 - 2492: 26(i64vec4) Load 2491 - 2493: 26(i64vec4) VectorShuffle 2492 2490 4 5 2 3 - Store 2491 2493 - 2494: 6(int) Load 8(invocation) - 2495: 2251(ptr) AccessChain 34(data) 57 2243 - 2496: 26(i64vec4) Load 2495 - 2497:2260(i64vec3) VectorShuffle 2496 2496 0 1 2 - 2498:2260(i64vec3) GroupNonUniformSMin 42 InclusiveScan 2497 - 2499: 2251(ptr) AccessChain 34(data) 2494 2243 - 2500: 26(i64vec4) Load 2499 - 2501: 26(i64vec4) VectorShuffle 2500 2498 4 5 6 3 - Store 2499 2501 - 2502: 6(int) Load 8(invocation) - 2503: 2251(ptr) AccessChain 34(data) 67 2243 - 2504: 26(i64vec4) Load 2503 - 2505: 26(i64vec4) GroupNonUniformSMin 42 InclusiveScan 2504 - 2506: 2251(ptr) AccessChain 34(data) 2502 2243 - Store 2506 2505 - 2507: 6(int) Load 8(invocation) - 2508: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2509: 25(int64_t) Load 2508 - 2510: 25(int64_t) GroupNonUniformSMax 42 InclusiveScan 2509 - 2511: 2244(ptr) AccessChain 34(data) 2507 2243 38 - Store 2511 2510 - 2512: 6(int) Load 8(invocation) - 2513: 2251(ptr) AccessChain 34(data) 46 2243 - 2514: 26(i64vec4) Load 2513 - 2515:2250(i64vec2) VectorShuffle 2514 2514 0 1 - 2516:2250(i64vec2) GroupNonUniformSMax 42 InclusiveScan 2515 - 2517: 2251(ptr) AccessChain 34(data) 2512 2243 - 2518: 26(i64vec4) Load 2517 - 2519: 26(i64vec4) VectorShuffle 2518 2516 4 5 2 3 - Store 2517 2519 + 2461: 1947(ptr) AccessChain 34(data) 37 73 38 + 2462: 23(int16_t) Load 2461 + 2463: 23(int16_t) GroupNonUniformUMax 42 ExclusiveScan 2462 + 2464: 1947(ptr) AccessChain 34(data) 2460 73 38 + Store 2464 2463 + 2465: 6(int) Load 8(invocation) + 2466: 1954(ptr) AccessChain 34(data) 46 73 + 2467: 24(i16vec4) Load 2466 + 2468:1953(i16vec2) VectorShuffle 2467 2467 0 1 + 2469:1953(i16vec2) GroupNonUniformUMax 42 ExclusiveScan 2468 + 2470: 1947(ptr) AccessChain 34(data) 2465 73 38 + 2471: 23(int16_t) CompositeExtract 2469 0 + Store 2470 2471 + 2472: 1947(ptr) AccessChain 34(data) 2465 73 55 + 2473: 23(int16_t) CompositeExtract 2469 1 + Store 2472 2473 + 2474: 6(int) Load 8(invocation) + 2475: 1954(ptr) AccessChain 34(data) 59 73 + 2476: 24(i16vec4) Load 2475 + 2477:1964(i16vec3) VectorShuffle 2476 2476 0 1 2 + 2478:1964(i16vec3) GroupNonUniformUMax 42 ExclusiveScan 2477 + 2479: 1947(ptr) AccessChain 34(data) 2474 73 38 + 2480: 23(int16_t) CompositeExtract 2478 0 + Store 2479 2480 + 2481: 1947(ptr) AccessChain 34(data) 2474 73 55 + 2482: 23(int16_t) CompositeExtract 2478 1 + Store 2481 2482 + 2483: 1947(ptr) AccessChain 34(data) 2474 73 69 + 2484: 23(int16_t) CompositeExtract 2478 2 + Store 2483 2484 + 2485: 6(int) Load 8(invocation) + 2486: 1954(ptr) AccessChain 34(data) 73 73 + 2487: 24(i16vec4) Load 2486 + 2488: 24(i16vec4) GroupNonUniformUMax 42 ExclusiveScan 2487 + 2489: 1954(ptr) AccessChain 34(data) 2485 73 + Store 2489 2488 + 2490: 6(int) Load 8(invocation) + 2491: 1947(ptr) AccessChain 34(data) 37 73 38 + 2492: 23(int16_t) Load 2491 + 2493: 23(int16_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2492 + 2494: 1947(ptr) AccessChain 34(data) 2490 73 38 + Store 2494 2493 + 2495: 6(int) Load 8(invocation) + 2496: 1954(ptr) AccessChain 34(data) 46 73 + 2497: 24(i16vec4) Load 2496 + 2498:1953(i16vec2) VectorShuffle 2497 2497 0 1 + 2499:1953(i16vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2498 + 2500: 1947(ptr) AccessChain 34(data) 2495 73 38 + 2501: 23(int16_t) CompositeExtract 2499 0 + Store 2500 2501 + 2502: 1947(ptr) AccessChain 34(data) 2495 73 55 + 2503: 23(int16_t) CompositeExtract 2499 1 + Store 2502 2503 + 2504: 6(int) Load 8(invocation) + 2505: 1954(ptr) AccessChain 34(data) 59 73 + 2506: 24(i16vec4) Load 2505 + 2507:1964(i16vec3) VectorShuffle 2506 2506 0 1 2 + 2508:1964(i16vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2507 + 2509: 1947(ptr) AccessChain 34(data) 2504 73 38 + 2510: 23(int16_t) CompositeExtract 2508 0 + Store 2509 2510 + 2511: 1947(ptr) AccessChain 34(data) 2504 73 55 + 2512: 23(int16_t) CompositeExtract 2508 1 + Store 2511 2512 + 2513: 1947(ptr) AccessChain 34(data) 2504 73 69 + 2514: 23(int16_t) CompositeExtract 2508 2 + Store 2513 2514 + 2515: 6(int) Load 8(invocation) + 2516: 1954(ptr) AccessChain 34(data) 73 73 + 2517: 24(i16vec4) Load 2516 + 2518: 24(i16vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2517 + 2519: 1954(ptr) AccessChain 34(data) 2515 73 + Store 2519 2518 2520: 6(int) Load 8(invocation) - 2521: 2251(ptr) AccessChain 34(data) 57 2243 - 2522: 26(i64vec4) Load 2521 - 2523:2260(i64vec3) VectorShuffle 2522 2522 0 1 2 - 2524:2260(i64vec3) GroupNonUniformSMax 42 InclusiveScan 2523 - 2525: 2251(ptr) AccessChain 34(data) 2520 2243 - 2526: 26(i64vec4) Load 2525 - 2527: 26(i64vec4) VectorShuffle 2526 2524 4 5 6 3 - Store 2525 2527 - 2528: 6(int) Load 8(invocation) - 2529: 2251(ptr) AccessChain 34(data) 67 2243 - 2530: 26(i64vec4) Load 2529 - 2531: 26(i64vec4) GroupNonUniformSMax 42 InclusiveScan 2530 - 2532: 2251(ptr) AccessChain 34(data) 2528 2243 - Store 2532 2531 - 2533: 6(int) Load 8(invocation) - 2534: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2535: 25(int64_t) Load 2534 - 2536: 25(int64_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 2535 - 2537: 2244(ptr) AccessChain 34(data) 2533 2243 38 - Store 2537 2536 - 2538: 6(int) Load 8(invocation) - 2539: 2251(ptr) AccessChain 34(data) 46 2243 - 2540: 26(i64vec4) Load 2539 - 2541:2250(i64vec2) VectorShuffle 2540 2540 0 1 - 2542:2250(i64vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 2541 - 2543: 2251(ptr) AccessChain 34(data) 2538 2243 - 2544: 26(i64vec4) Load 2543 - 2545: 26(i64vec4) VectorShuffle 2544 2542 4 5 2 3 - Store 2543 2545 - 2546: 6(int) Load 8(invocation) - 2547: 2251(ptr) AccessChain 34(data) 57 2243 - 2548: 26(i64vec4) Load 2547 - 2549:2260(i64vec3) VectorShuffle 2548 2548 0 1 2 - 2550:2260(i64vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 2549 - 2551: 2251(ptr) AccessChain 34(data) 2546 2243 - 2552: 26(i64vec4) Load 2551 - 2553: 26(i64vec4) VectorShuffle 2552 2550 4 5 6 3 - Store 2551 2553 - 2554: 6(int) Load 8(invocation) - 2555: 2251(ptr) AccessChain 34(data) 67 2243 - 2556: 26(i64vec4) Load 2555 - 2557: 26(i64vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 2556 - 2558: 2251(ptr) AccessChain 34(data) 2554 2243 - Store 2558 2557 - 2559: 6(int) Load 8(invocation) - 2560: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2561: 25(int64_t) Load 2560 - 2562: 25(int64_t) GroupNonUniformBitwiseOr 42 InclusiveScan 2561 - 2563: 2244(ptr) AccessChain 34(data) 2559 2243 38 - Store 2563 2562 + 2521: 1947(ptr) AccessChain 34(data) 37 73 38 + 2522: 23(int16_t) Load 2521 + 2523: 23(int16_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 2522 + 2524: 1947(ptr) AccessChain 34(data) 2520 73 38 + Store 2524 2523 + 2525: 6(int) Load 8(invocation) + 2526: 1954(ptr) AccessChain 34(data) 46 73 + 2527: 24(i16vec4) Load 2526 + 2528:1953(i16vec2) VectorShuffle 2527 2527 0 1 + 2529:1953(i16vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 2528 + 2530: 1947(ptr) AccessChain 34(data) 2525 73 38 + 2531: 23(int16_t) CompositeExtract 2529 0 + Store 2530 2531 + 2532: 1947(ptr) AccessChain 34(data) 2525 73 55 + 2533: 23(int16_t) CompositeExtract 2529 1 + Store 2532 2533 + 2534: 6(int) Load 8(invocation) + 2535: 1954(ptr) AccessChain 34(data) 59 73 + 2536: 24(i16vec4) Load 2535 + 2537:1964(i16vec3) VectorShuffle 2536 2536 0 1 2 + 2538:1964(i16vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 2537 + 2539: 1947(ptr) AccessChain 34(data) 2534 73 38 + 2540: 23(int16_t) CompositeExtract 2538 0 + Store 2539 2540 + 2541: 1947(ptr) AccessChain 34(data) 2534 73 55 + 2542: 23(int16_t) CompositeExtract 2538 1 + Store 2541 2542 + 2543: 1947(ptr) AccessChain 34(data) 2534 73 69 + 2544: 23(int16_t) CompositeExtract 2538 2 + Store 2543 2544 + 2545: 6(int) Load 8(invocation) + 2546: 1954(ptr) AccessChain 34(data) 73 73 + 2547: 24(i16vec4) Load 2546 + 2548: 24(i16vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 2547 + 2549: 1954(ptr) AccessChain 34(data) 2545 73 + Store 2549 2548 + 2550: 6(int) Load 8(invocation) + 2551: 1947(ptr) AccessChain 34(data) 37 73 38 + 2552: 23(int16_t) Load 2551 + 2553: 23(int16_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 2552 + 2554: 1947(ptr) AccessChain 34(data) 2550 73 38 + Store 2554 2553 + 2555: 6(int) Load 8(invocation) + 2556: 1954(ptr) AccessChain 34(data) 46 73 + 2557: 24(i16vec4) Load 2556 + 2558:1953(i16vec2) VectorShuffle 2557 2557 0 1 + 2559:1953(i16vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 2558 + 2560: 1947(ptr) AccessChain 34(data) 2555 73 38 + 2561: 23(int16_t) CompositeExtract 2559 0 + Store 2560 2561 + 2562: 1947(ptr) AccessChain 34(data) 2555 73 55 + 2563: 23(int16_t) CompositeExtract 2559 1 + Store 2562 2563 2564: 6(int) Load 8(invocation) - 2565: 2251(ptr) AccessChain 34(data) 46 2243 - 2566: 26(i64vec4) Load 2565 - 2567:2250(i64vec2) VectorShuffle 2566 2566 0 1 - 2568:2250(i64vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 2567 - 2569: 2251(ptr) AccessChain 34(data) 2564 2243 - 2570: 26(i64vec4) Load 2569 - 2571: 26(i64vec4) VectorShuffle 2570 2568 4 5 2 3 - Store 2569 2571 - 2572: 6(int) Load 8(invocation) - 2573: 2251(ptr) AccessChain 34(data) 57 2243 - 2574: 26(i64vec4) Load 2573 - 2575:2260(i64vec3) VectorShuffle 2574 2574 0 1 2 - 2576:2260(i64vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 2575 - 2577: 2251(ptr) AccessChain 34(data) 2572 2243 - 2578: 26(i64vec4) Load 2577 - 2579: 26(i64vec4) VectorShuffle 2578 2576 4 5 6 3 - Store 2577 2579 + 2565: 1954(ptr) AccessChain 34(data) 59 73 + 2566: 24(i16vec4) Load 2565 + 2567:1964(i16vec3) VectorShuffle 2566 2566 0 1 2 + 2568:1964(i16vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 2567 + 2569: 1947(ptr) AccessChain 34(data) 2564 73 38 + 2570: 23(int16_t) CompositeExtract 2568 0 + Store 2569 2570 + 2571: 1947(ptr) AccessChain 34(data) 2564 73 55 + 2572: 23(int16_t) CompositeExtract 2568 1 + Store 2571 2572 + 2573: 1947(ptr) AccessChain 34(data) 2564 73 69 + 2574: 23(int16_t) CompositeExtract 2568 2 + Store 2573 2574 + 2575: 6(int) Load 8(invocation) + 2576: 1954(ptr) AccessChain 34(data) 73 73 + 2577: 24(i16vec4) Load 2576 + 2578: 24(i16vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 2577 + 2579: 1954(ptr) AccessChain 34(data) 2575 73 + Store 2579 2578 2580: 6(int) Load 8(invocation) - 2581: 2251(ptr) AccessChain 34(data) 67 2243 - 2582: 26(i64vec4) Load 2581 - 2583: 26(i64vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 2582 - 2584: 2251(ptr) AccessChain 34(data) 2580 2243 - Store 2584 2583 - 2585: 6(int) Load 8(invocation) - 2586: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2587: 25(int64_t) Load 2586 - 2588: 25(int64_t) GroupNonUniformBitwiseXor 42 InclusiveScan 2587 - 2589: 2244(ptr) AccessChain 34(data) 2585 2243 38 - Store 2589 2588 - 2590: 6(int) Load 8(invocation) - 2591: 2251(ptr) AccessChain 34(data) 46 2243 - 2592: 26(i64vec4) Load 2591 - 2593:2250(i64vec2) VectorShuffle 2592 2592 0 1 - 2594:2250(i64vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 2593 - 2595: 2251(ptr) AccessChain 34(data) 2590 2243 - 2596: 26(i64vec4) Load 2595 - 2597: 26(i64vec4) VectorShuffle 2596 2594 4 5 2 3 - Store 2595 2597 + 2583: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2584: 25(int64_t) Load 2583 + 2585: 25(int64_t) GroupNonUniformIAdd 42 Reduce 2584 + 2586: 2582(ptr) AccessChain 34(data) 2580 2581 38 + Store 2586 2585 + 2587: 6(int) Load 8(invocation) + 2590: 2589(ptr) AccessChain 34(data) 46 2581 + 2591: 26(i64vec4) Load 2590 + 2592:2588(i64vec2) VectorShuffle 2591 2591 0 1 + 2593:2588(i64vec2) GroupNonUniformIAdd 42 Reduce 2592 + 2594: 2582(ptr) AccessChain 34(data) 2587 2581 38 + 2595: 25(int64_t) CompositeExtract 2593 0 + Store 2594 2595 + 2596: 2582(ptr) AccessChain 34(data) 2587 2581 55 + 2597: 25(int64_t) CompositeExtract 2593 1 + Store 2596 2597 2598: 6(int) Load 8(invocation) - 2599: 2251(ptr) AccessChain 34(data) 57 2243 - 2600: 26(i64vec4) Load 2599 - 2601:2260(i64vec3) VectorShuffle 2600 2600 0 1 2 - 2602:2260(i64vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 2601 - 2603: 2251(ptr) AccessChain 34(data) 2598 2243 - 2604: 26(i64vec4) Load 2603 - 2605: 26(i64vec4) VectorShuffle 2604 2602 4 5 6 3 - Store 2603 2605 - 2606: 6(int) Load 8(invocation) - 2607: 2251(ptr) AccessChain 34(data) 67 2243 - 2608: 26(i64vec4) Load 2607 - 2609: 26(i64vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 2608 - 2610: 2251(ptr) AccessChain 34(data) 2606 2243 - Store 2610 2609 - 2611: 6(int) Load 8(invocation) - 2612: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2613: 25(int64_t) Load 2612 - 2614: 25(int64_t) GroupNonUniformIAdd 42 ExclusiveScan 2613 - 2615: 2244(ptr) AccessChain 34(data) 2611 2243 38 - Store 2615 2614 - 2616: 6(int) Load 8(invocation) - 2617: 2251(ptr) AccessChain 34(data) 46 2243 - 2618: 26(i64vec4) Load 2617 - 2619:2250(i64vec2) VectorShuffle 2618 2618 0 1 - 2620:2250(i64vec2) GroupNonUniformIAdd 42 ExclusiveScan 2619 - 2621: 2251(ptr) AccessChain 34(data) 2616 2243 + 2600: 2589(ptr) AccessChain 34(data) 59 2581 + 2601: 26(i64vec4) Load 2600 + 2602:2599(i64vec3) VectorShuffle 2601 2601 0 1 2 + 2603:2599(i64vec3) GroupNonUniformIAdd 42 Reduce 2602 + 2604: 2582(ptr) AccessChain 34(data) 2598 2581 38 + 2605: 25(int64_t) CompositeExtract 2603 0 + Store 2604 2605 + 2606: 2582(ptr) AccessChain 34(data) 2598 2581 55 + 2607: 25(int64_t) CompositeExtract 2603 1 + Store 2606 2607 + 2608: 2582(ptr) AccessChain 34(data) 2598 2581 69 + 2609: 25(int64_t) CompositeExtract 2603 2 + Store 2608 2609 + 2610: 6(int) Load 8(invocation) + 2611: 2589(ptr) AccessChain 34(data) 73 2581 + 2612: 26(i64vec4) Load 2611 + 2613: 26(i64vec4) GroupNonUniformIAdd 42 Reduce 2612 + 2614: 2589(ptr) AccessChain 34(data) 2610 2581 + Store 2614 2613 + 2615: 6(int) Load 8(invocation) + 2616: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2617: 25(int64_t) Load 2616 + 2618: 25(int64_t) GroupNonUniformIMul 42 Reduce 2617 + 2619: 2582(ptr) AccessChain 34(data) 2615 2581 38 + Store 2619 2618 + 2620: 6(int) Load 8(invocation) + 2621: 2589(ptr) AccessChain 34(data) 46 2581 2622: 26(i64vec4) Load 2621 - 2623: 26(i64vec4) VectorShuffle 2622 2620 4 5 2 3 - Store 2621 2623 - 2624: 6(int) Load 8(invocation) - 2625: 2251(ptr) AccessChain 34(data) 57 2243 - 2626: 26(i64vec4) Load 2625 - 2627:2260(i64vec3) VectorShuffle 2626 2626 0 1 2 - 2628:2260(i64vec3) GroupNonUniformIAdd 42 ExclusiveScan 2627 - 2629: 2251(ptr) AccessChain 34(data) 2624 2243 - 2630: 26(i64vec4) Load 2629 - 2631: 26(i64vec4) VectorShuffle 2630 2628 4 5 6 3 - Store 2629 2631 - 2632: 6(int) Load 8(invocation) - 2633: 2251(ptr) AccessChain 34(data) 67 2243 - 2634: 26(i64vec4) Load 2633 - 2635: 26(i64vec4) GroupNonUniformIAdd 42 ExclusiveScan 2634 - 2636: 2251(ptr) AccessChain 34(data) 2632 2243 - Store 2636 2635 - 2637: 6(int) Load 8(invocation) - 2638: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2639: 25(int64_t) Load 2638 - 2640: 25(int64_t) GroupNonUniformIMul 42 ExclusiveScan 2639 - 2641: 2244(ptr) AccessChain 34(data) 2637 2243 38 - Store 2641 2640 - 2642: 6(int) Load 8(invocation) - 2643: 2251(ptr) AccessChain 34(data) 46 2243 - 2644: 26(i64vec4) Load 2643 - 2645:2250(i64vec2) VectorShuffle 2644 2644 0 1 - 2646:2250(i64vec2) GroupNonUniformIMul 42 ExclusiveScan 2645 - 2647: 2251(ptr) AccessChain 34(data) 2642 2243 - 2648: 26(i64vec4) Load 2647 - 2649: 26(i64vec4) VectorShuffle 2648 2646 4 5 2 3 - Store 2647 2649 + 2623:2588(i64vec2) VectorShuffle 2622 2622 0 1 + 2624:2588(i64vec2) GroupNonUniformIMul 42 Reduce 2623 + 2625: 2582(ptr) AccessChain 34(data) 2620 2581 38 + 2626: 25(int64_t) CompositeExtract 2624 0 + Store 2625 2626 + 2627: 2582(ptr) AccessChain 34(data) 2620 2581 55 + 2628: 25(int64_t) CompositeExtract 2624 1 + Store 2627 2628 + 2629: 6(int) Load 8(invocation) + 2630: 2589(ptr) AccessChain 34(data) 59 2581 + 2631: 26(i64vec4) Load 2630 + 2632:2599(i64vec3) VectorShuffle 2631 2631 0 1 2 + 2633:2599(i64vec3) GroupNonUniformIMul 42 Reduce 2632 + 2634: 2582(ptr) AccessChain 34(data) 2629 2581 38 + 2635: 25(int64_t) CompositeExtract 2633 0 + Store 2634 2635 + 2636: 2582(ptr) AccessChain 34(data) 2629 2581 55 + 2637: 25(int64_t) CompositeExtract 2633 1 + Store 2636 2637 + 2638: 2582(ptr) AccessChain 34(data) 2629 2581 69 + 2639: 25(int64_t) CompositeExtract 2633 2 + Store 2638 2639 + 2640: 6(int) Load 8(invocation) + 2641: 2589(ptr) AccessChain 34(data) 73 2581 + 2642: 26(i64vec4) Load 2641 + 2643: 26(i64vec4) GroupNonUniformIMul 42 Reduce 2642 + 2644: 2589(ptr) AccessChain 34(data) 2640 2581 + Store 2644 2643 + 2645: 6(int) Load 8(invocation) + 2646: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2647: 25(int64_t) Load 2646 + 2648: 25(int64_t) GroupNonUniformSMin 42 Reduce 2647 + 2649: 2582(ptr) AccessChain 34(data) 2645 2581 38 + Store 2649 2648 2650: 6(int) Load 8(invocation) - 2651: 2251(ptr) AccessChain 34(data) 57 2243 + 2651: 2589(ptr) AccessChain 34(data) 46 2581 2652: 26(i64vec4) Load 2651 - 2653:2260(i64vec3) VectorShuffle 2652 2652 0 1 2 - 2654:2260(i64vec3) GroupNonUniformIMul 42 ExclusiveScan 2653 - 2655: 2251(ptr) AccessChain 34(data) 2650 2243 - 2656: 26(i64vec4) Load 2655 - 2657: 26(i64vec4) VectorShuffle 2656 2654 4 5 6 3 - Store 2655 2657 - 2658: 6(int) Load 8(invocation) - 2659: 2251(ptr) AccessChain 34(data) 67 2243 - 2660: 26(i64vec4) Load 2659 - 2661: 26(i64vec4) GroupNonUniformIMul 42 ExclusiveScan 2660 - 2662: 2251(ptr) AccessChain 34(data) 2658 2243 - Store 2662 2661 - 2663: 6(int) Load 8(invocation) - 2664: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2665: 25(int64_t) Load 2664 - 2666: 25(int64_t) GroupNonUniformSMin 42 ExclusiveScan 2665 - 2667: 2244(ptr) AccessChain 34(data) 2663 2243 38 - Store 2667 2666 - 2668: 6(int) Load 8(invocation) - 2669: 2251(ptr) AccessChain 34(data) 46 2243 - 2670: 26(i64vec4) Load 2669 - 2671:2250(i64vec2) VectorShuffle 2670 2670 0 1 - 2672:2250(i64vec2) GroupNonUniformSMin 42 ExclusiveScan 2671 - 2673: 2251(ptr) AccessChain 34(data) 2668 2243 - 2674: 26(i64vec4) Load 2673 - 2675: 26(i64vec4) VectorShuffle 2674 2672 4 5 2 3 - Store 2673 2675 - 2676: 6(int) Load 8(invocation) - 2677: 2251(ptr) AccessChain 34(data) 57 2243 - 2678: 26(i64vec4) Load 2677 - 2679:2260(i64vec3) VectorShuffle 2678 2678 0 1 2 - 2680:2260(i64vec3) GroupNonUniformSMin 42 ExclusiveScan 2679 - 2681: 2251(ptr) AccessChain 34(data) 2676 2243 + 2653:2588(i64vec2) VectorShuffle 2652 2652 0 1 + 2654:2588(i64vec2) GroupNonUniformSMin 42 Reduce 2653 + 2655: 2582(ptr) AccessChain 34(data) 2650 2581 38 + 2656: 25(int64_t) CompositeExtract 2654 0 + Store 2655 2656 + 2657: 2582(ptr) AccessChain 34(data) 2650 2581 55 + 2658: 25(int64_t) CompositeExtract 2654 1 + Store 2657 2658 + 2659: 6(int) Load 8(invocation) + 2660: 2589(ptr) AccessChain 34(data) 59 2581 + 2661: 26(i64vec4) Load 2660 + 2662:2599(i64vec3) VectorShuffle 2661 2661 0 1 2 + 2663:2599(i64vec3) GroupNonUniformSMin 42 Reduce 2662 + 2664: 2582(ptr) AccessChain 34(data) 2659 2581 38 + 2665: 25(int64_t) CompositeExtract 2663 0 + Store 2664 2665 + 2666: 2582(ptr) AccessChain 34(data) 2659 2581 55 + 2667: 25(int64_t) CompositeExtract 2663 1 + Store 2666 2667 + 2668: 2582(ptr) AccessChain 34(data) 2659 2581 69 + 2669: 25(int64_t) CompositeExtract 2663 2 + Store 2668 2669 + 2670: 6(int) Load 8(invocation) + 2671: 2589(ptr) AccessChain 34(data) 73 2581 + 2672: 26(i64vec4) Load 2671 + 2673: 26(i64vec4) GroupNonUniformSMin 42 Reduce 2672 + 2674: 2589(ptr) AccessChain 34(data) 2670 2581 + Store 2674 2673 + 2675: 6(int) Load 8(invocation) + 2676: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2677: 25(int64_t) Load 2676 + 2678: 25(int64_t) GroupNonUniformSMax 42 Reduce 2677 + 2679: 2582(ptr) AccessChain 34(data) 2675 2581 38 + Store 2679 2678 + 2680: 6(int) Load 8(invocation) + 2681: 2589(ptr) AccessChain 34(data) 46 2581 2682: 26(i64vec4) Load 2681 - 2683: 26(i64vec4) VectorShuffle 2682 2680 4 5 6 3 - Store 2681 2683 - 2684: 6(int) Load 8(invocation) - 2685: 2251(ptr) AccessChain 34(data) 67 2243 - 2686: 26(i64vec4) Load 2685 - 2687: 26(i64vec4) GroupNonUniformSMin 42 ExclusiveScan 2686 - 2688: 2251(ptr) AccessChain 34(data) 2684 2243 - Store 2688 2687 + 2683:2588(i64vec2) VectorShuffle 2682 2682 0 1 + 2684:2588(i64vec2) GroupNonUniformSMax 42 Reduce 2683 + 2685: 2582(ptr) AccessChain 34(data) 2680 2581 38 + 2686: 25(int64_t) CompositeExtract 2684 0 + Store 2685 2686 + 2687: 2582(ptr) AccessChain 34(data) 2680 2581 55 + 2688: 25(int64_t) CompositeExtract 2684 1 + Store 2687 2688 2689: 6(int) Load 8(invocation) - 2690: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2691: 25(int64_t) Load 2690 - 2692: 25(int64_t) GroupNonUniformSMax 42 ExclusiveScan 2691 - 2693: 2244(ptr) AccessChain 34(data) 2689 2243 38 - Store 2693 2692 - 2694: 6(int) Load 8(invocation) - 2695: 2251(ptr) AccessChain 34(data) 46 2243 - 2696: 26(i64vec4) Load 2695 - 2697:2250(i64vec2) VectorShuffle 2696 2696 0 1 - 2698:2250(i64vec2) GroupNonUniformSMax 42 ExclusiveScan 2697 - 2699: 2251(ptr) AccessChain 34(data) 2694 2243 - 2700: 26(i64vec4) Load 2699 - 2701: 26(i64vec4) VectorShuffle 2700 2698 4 5 2 3 - Store 2699 2701 - 2702: 6(int) Load 8(invocation) - 2703: 2251(ptr) AccessChain 34(data) 57 2243 - 2704: 26(i64vec4) Load 2703 - 2705:2260(i64vec3) VectorShuffle 2704 2704 0 1 2 - 2706:2260(i64vec3) GroupNonUniformSMax 42 ExclusiveScan 2705 - 2707: 2251(ptr) AccessChain 34(data) 2702 2243 - 2708: 26(i64vec4) Load 2707 - 2709: 26(i64vec4) VectorShuffle 2708 2706 4 5 6 3 - Store 2707 2709 + 2690: 2589(ptr) AccessChain 34(data) 59 2581 + 2691: 26(i64vec4) Load 2690 + 2692:2599(i64vec3) VectorShuffle 2691 2691 0 1 2 + 2693:2599(i64vec3) GroupNonUniformSMax 42 Reduce 2692 + 2694: 2582(ptr) AccessChain 34(data) 2689 2581 38 + 2695: 25(int64_t) CompositeExtract 2693 0 + Store 2694 2695 + 2696: 2582(ptr) AccessChain 34(data) 2689 2581 55 + 2697: 25(int64_t) CompositeExtract 2693 1 + Store 2696 2697 + 2698: 2582(ptr) AccessChain 34(data) 2689 2581 69 + 2699: 25(int64_t) CompositeExtract 2693 2 + Store 2698 2699 + 2700: 6(int) Load 8(invocation) + 2701: 2589(ptr) AccessChain 34(data) 73 2581 + 2702: 26(i64vec4) Load 2701 + 2703: 26(i64vec4) GroupNonUniformSMax 42 Reduce 2702 + 2704: 2589(ptr) AccessChain 34(data) 2700 2581 + Store 2704 2703 + 2705: 6(int) Load 8(invocation) + 2706: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2707: 25(int64_t) Load 2706 + 2708: 25(int64_t) GroupNonUniformBitwiseAnd 42 Reduce 2707 + 2709: 2582(ptr) AccessChain 34(data) 2705 2581 38 + Store 2709 2708 2710: 6(int) Load 8(invocation) - 2711: 2251(ptr) AccessChain 34(data) 67 2243 + 2711: 2589(ptr) AccessChain 34(data) 46 2581 2712: 26(i64vec4) Load 2711 - 2713: 26(i64vec4) GroupNonUniformSMax 42 ExclusiveScan 2712 - 2714: 2251(ptr) AccessChain 34(data) 2710 2243 - Store 2714 2713 - 2715: 6(int) Load 8(invocation) - 2716: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2717: 25(int64_t) Load 2716 - 2718: 25(int64_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2717 - 2719: 2244(ptr) AccessChain 34(data) 2715 2243 38 - Store 2719 2718 - 2720: 6(int) Load 8(invocation) - 2721: 2251(ptr) AccessChain 34(data) 46 2243 - 2722: 26(i64vec4) Load 2721 - 2723:2250(i64vec2) VectorShuffle 2722 2722 0 1 - 2724:2250(i64vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2723 - 2725: 2251(ptr) AccessChain 34(data) 2720 2243 - 2726: 26(i64vec4) Load 2725 - 2727: 26(i64vec4) VectorShuffle 2726 2724 4 5 2 3 - Store 2725 2727 - 2728: 6(int) Load 8(invocation) - 2729: 2251(ptr) AccessChain 34(data) 57 2243 - 2730: 26(i64vec4) Load 2729 - 2731:2260(i64vec3) VectorShuffle 2730 2730 0 1 2 - 2732:2260(i64vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2731 - 2733: 2251(ptr) AccessChain 34(data) 2728 2243 - 2734: 26(i64vec4) Load 2733 - 2735: 26(i64vec4) VectorShuffle 2734 2732 4 5 6 3 - Store 2733 2735 - 2736: 6(int) Load 8(invocation) - 2737: 2251(ptr) AccessChain 34(data) 67 2243 - 2738: 26(i64vec4) Load 2737 - 2739: 26(i64vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 2738 - 2740: 2251(ptr) AccessChain 34(data) 2736 2243 - Store 2740 2739 - 2741: 6(int) Load 8(invocation) - 2742: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2743: 25(int64_t) Load 2742 - 2744: 25(int64_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 2743 - 2745: 2244(ptr) AccessChain 34(data) 2741 2243 38 - Store 2745 2744 - 2746: 6(int) Load 8(invocation) - 2747: 2251(ptr) AccessChain 34(data) 46 2243 - 2748: 26(i64vec4) Load 2747 - 2749:2250(i64vec2) VectorShuffle 2748 2748 0 1 - 2750:2250(i64vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 2749 - 2751: 2251(ptr) AccessChain 34(data) 2746 2243 - 2752: 26(i64vec4) Load 2751 - 2753: 26(i64vec4) VectorShuffle 2752 2750 4 5 2 3 - Store 2751 2753 - 2754: 6(int) Load 8(invocation) - 2755: 2251(ptr) AccessChain 34(data) 57 2243 - 2756: 26(i64vec4) Load 2755 - 2757:2260(i64vec3) VectorShuffle 2756 2756 0 1 2 - 2758:2260(i64vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 2757 - 2759: 2251(ptr) AccessChain 34(data) 2754 2243 - 2760: 26(i64vec4) Load 2759 - 2761: 26(i64vec4) VectorShuffle 2760 2758 4 5 6 3 - Store 2759 2761 - 2762: 6(int) Load 8(invocation) - 2763: 2251(ptr) AccessChain 34(data) 67 2243 - 2764: 26(i64vec4) Load 2763 - 2765: 26(i64vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 2764 - 2766: 2251(ptr) AccessChain 34(data) 2762 2243 - Store 2766 2765 - 2767: 6(int) Load 8(invocation) - 2768: 2244(ptr) AccessChain 34(data) 37 2243 38 - 2769: 25(int64_t) Load 2768 - 2770: 25(int64_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 2769 - 2771: 2244(ptr) AccessChain 34(data) 2767 2243 38 - Store 2771 2770 - 2772: 6(int) Load 8(invocation) - 2773: 2251(ptr) AccessChain 34(data) 46 2243 - 2774: 26(i64vec4) Load 2773 - 2775:2250(i64vec2) VectorShuffle 2774 2774 0 1 - 2776:2250(i64vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 2775 - 2777: 2251(ptr) AccessChain 34(data) 2772 2243 - 2778: 26(i64vec4) Load 2777 - 2779: 26(i64vec4) VectorShuffle 2778 2776 4 5 2 3 - Store 2777 2779 - 2780: 6(int) Load 8(invocation) - 2781: 2251(ptr) AccessChain 34(data) 57 2243 - 2782: 26(i64vec4) Load 2781 - 2783:2260(i64vec3) VectorShuffle 2782 2782 0 1 2 - 2784:2260(i64vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 2783 - 2785: 2251(ptr) AccessChain 34(data) 2780 2243 - 2786: 26(i64vec4) Load 2785 - 2787: 26(i64vec4) VectorShuffle 2786 2784 4 5 6 3 - Store 2785 2787 - 2788: 6(int) Load 8(invocation) - 2789: 2251(ptr) AccessChain 34(data) 67 2243 - 2790: 26(i64vec4) Load 2789 - 2791: 26(i64vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 2790 - 2792: 2251(ptr) AccessChain 34(data) 2788 2243 - Store 2792 2791 - 2793: 6(int) Load 8(invocation) - 2796: 2795(ptr) AccessChain 34(data) 37 2794 38 - 2797: 27(int64_t) Load 2796 - 2798: 27(int64_t) GroupNonUniformIAdd 42 Reduce 2797 - 2799: 2795(ptr) AccessChain 34(data) 2793 2794 38 + 2713:2588(i64vec2) VectorShuffle 2712 2712 0 1 + 2714:2588(i64vec2) GroupNonUniformBitwiseAnd 42 Reduce 2713 + 2715: 2582(ptr) AccessChain 34(data) 2710 2581 38 + 2716: 25(int64_t) CompositeExtract 2714 0 + Store 2715 2716 + 2717: 2582(ptr) AccessChain 34(data) 2710 2581 55 + 2718: 25(int64_t) CompositeExtract 2714 1 + Store 2717 2718 + 2719: 6(int) Load 8(invocation) + 2720: 2589(ptr) AccessChain 34(data) 59 2581 + 2721: 26(i64vec4) Load 2720 + 2722:2599(i64vec3) VectorShuffle 2721 2721 0 1 2 + 2723:2599(i64vec3) GroupNonUniformBitwiseAnd 42 Reduce 2722 + 2724: 2582(ptr) AccessChain 34(data) 2719 2581 38 + 2725: 25(int64_t) CompositeExtract 2723 0 + Store 2724 2725 + 2726: 2582(ptr) AccessChain 34(data) 2719 2581 55 + 2727: 25(int64_t) CompositeExtract 2723 1 + Store 2726 2727 + 2728: 2582(ptr) AccessChain 34(data) 2719 2581 69 + 2729: 25(int64_t) CompositeExtract 2723 2 + Store 2728 2729 + 2730: 6(int) Load 8(invocation) + 2731: 2589(ptr) AccessChain 34(data) 73 2581 + 2732: 26(i64vec4) Load 2731 + 2733: 26(i64vec4) GroupNonUniformBitwiseAnd 42 Reduce 2732 + 2734: 2589(ptr) AccessChain 34(data) 2730 2581 + Store 2734 2733 + 2735: 6(int) Load 8(invocation) + 2736: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2737: 25(int64_t) Load 2736 + 2738: 25(int64_t) GroupNonUniformBitwiseOr 42 Reduce 2737 + 2739: 2582(ptr) AccessChain 34(data) 2735 2581 38 + Store 2739 2738 + 2740: 6(int) Load 8(invocation) + 2741: 2589(ptr) AccessChain 34(data) 46 2581 + 2742: 26(i64vec4) Load 2741 + 2743:2588(i64vec2) VectorShuffle 2742 2742 0 1 + 2744:2588(i64vec2) GroupNonUniformBitwiseOr 42 Reduce 2743 + 2745: 2582(ptr) AccessChain 34(data) 2740 2581 38 + 2746: 25(int64_t) CompositeExtract 2744 0 + Store 2745 2746 + 2747: 2582(ptr) AccessChain 34(data) 2740 2581 55 + 2748: 25(int64_t) CompositeExtract 2744 1 + Store 2747 2748 + 2749: 6(int) Load 8(invocation) + 2750: 2589(ptr) AccessChain 34(data) 59 2581 + 2751: 26(i64vec4) Load 2750 + 2752:2599(i64vec3) VectorShuffle 2751 2751 0 1 2 + 2753:2599(i64vec3) GroupNonUniformBitwiseOr 42 Reduce 2752 + 2754: 2582(ptr) AccessChain 34(data) 2749 2581 38 + 2755: 25(int64_t) CompositeExtract 2753 0 + Store 2754 2755 + 2756: 2582(ptr) AccessChain 34(data) 2749 2581 55 + 2757: 25(int64_t) CompositeExtract 2753 1 + Store 2756 2757 + 2758: 2582(ptr) AccessChain 34(data) 2749 2581 69 + 2759: 25(int64_t) CompositeExtract 2753 2 + Store 2758 2759 + 2760: 6(int) Load 8(invocation) + 2761: 2589(ptr) AccessChain 34(data) 73 2581 + 2762: 26(i64vec4) Load 2761 + 2763: 26(i64vec4) GroupNonUniformBitwiseOr 42 Reduce 2762 + 2764: 2589(ptr) AccessChain 34(data) 2760 2581 + Store 2764 2763 + 2765: 6(int) Load 8(invocation) + 2766: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2767: 25(int64_t) Load 2766 + 2768: 25(int64_t) GroupNonUniformBitwiseXor 42 Reduce 2767 + 2769: 2582(ptr) AccessChain 34(data) 2765 2581 38 + Store 2769 2768 + 2770: 6(int) Load 8(invocation) + 2771: 2589(ptr) AccessChain 34(data) 46 2581 + 2772: 26(i64vec4) Load 2771 + 2773:2588(i64vec2) VectorShuffle 2772 2772 0 1 + 2774:2588(i64vec2) GroupNonUniformBitwiseXor 42 Reduce 2773 + 2775: 2582(ptr) AccessChain 34(data) 2770 2581 38 + 2776: 25(int64_t) CompositeExtract 2774 0 + Store 2775 2776 + 2777: 2582(ptr) AccessChain 34(data) 2770 2581 55 + 2778: 25(int64_t) CompositeExtract 2774 1 + Store 2777 2778 + 2779: 6(int) Load 8(invocation) + 2780: 2589(ptr) AccessChain 34(data) 59 2581 + 2781: 26(i64vec4) Load 2780 + 2782:2599(i64vec3) VectorShuffle 2781 2781 0 1 2 + 2783:2599(i64vec3) GroupNonUniformBitwiseXor 42 Reduce 2782 + 2784: 2582(ptr) AccessChain 34(data) 2779 2581 38 + 2785: 25(int64_t) CompositeExtract 2783 0 + Store 2784 2785 + 2786: 2582(ptr) AccessChain 34(data) 2779 2581 55 + 2787: 25(int64_t) CompositeExtract 2783 1 + Store 2786 2787 + 2788: 2582(ptr) AccessChain 34(data) 2779 2581 69 + 2789: 25(int64_t) CompositeExtract 2783 2 + Store 2788 2789 + 2790: 6(int) Load 8(invocation) + 2791: 2589(ptr) AccessChain 34(data) 73 2581 + 2792: 26(i64vec4) Load 2791 + 2793: 26(i64vec4) GroupNonUniformBitwiseXor 42 Reduce 2792 + 2794: 2589(ptr) AccessChain 34(data) 2790 2581 + Store 2794 2793 + 2795: 6(int) Load 8(invocation) + 2796: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2797: 25(int64_t) Load 2796 + 2798: 25(int64_t) GroupNonUniformIAdd 42 InclusiveScan 2797 + 2799: 2582(ptr) AccessChain 34(data) 2795 2581 38 Store 2799 2798 2800: 6(int) Load 8(invocation) - 2803: 2802(ptr) AccessChain 34(data) 46 2794 - 2804: 28(i64vec4) Load 2803 - 2805:2801(i64vec2) VectorShuffle 2804 2804 0 1 - 2806:2801(i64vec2) GroupNonUniformIAdd 42 Reduce 2805 - 2807: 2802(ptr) AccessChain 34(data) 2800 2794 - 2808: 28(i64vec4) Load 2807 - 2809: 28(i64vec4) VectorShuffle 2808 2806 4 5 2 3 - Store 2807 2809 - 2810: 6(int) Load 8(invocation) - 2812: 2802(ptr) AccessChain 34(data) 57 2794 - 2813: 28(i64vec4) Load 2812 - 2814:2811(i64vec3) VectorShuffle 2813 2813 0 1 2 - 2815:2811(i64vec3) GroupNonUniformIAdd 42 Reduce 2814 - 2816: 2802(ptr) AccessChain 34(data) 2810 2794 - 2817: 28(i64vec4) Load 2816 - 2818: 28(i64vec4) VectorShuffle 2817 2815 4 5 6 3 - Store 2816 2818 - 2819: 6(int) Load 8(invocation) - 2820: 2802(ptr) AccessChain 34(data) 67 2794 - 2821: 28(i64vec4) Load 2820 - 2822: 28(i64vec4) GroupNonUniformIAdd 42 Reduce 2821 - 2823: 2802(ptr) AccessChain 34(data) 2819 2794 - Store 2823 2822 - 2824: 6(int) Load 8(invocation) - 2825: 2795(ptr) AccessChain 34(data) 37 2794 38 - 2826: 27(int64_t) Load 2825 - 2827: 27(int64_t) GroupNonUniformIMul 42 Reduce 2826 - 2828: 2795(ptr) AccessChain 34(data) 2824 2794 38 - Store 2828 2827 - 2829: 6(int) Load 8(invocation) - 2830: 2802(ptr) AccessChain 34(data) 46 2794 - 2831: 28(i64vec4) Load 2830 - 2832:2801(i64vec2) VectorShuffle 2831 2831 0 1 - 2833:2801(i64vec2) GroupNonUniformIMul 42 Reduce 2832 - 2834: 2802(ptr) AccessChain 34(data) 2829 2794 - 2835: 28(i64vec4) Load 2834 - 2836: 28(i64vec4) VectorShuffle 2835 2833 4 5 2 3 - Store 2834 2836 - 2837: 6(int) Load 8(invocation) - 2838: 2802(ptr) AccessChain 34(data) 57 2794 - 2839: 28(i64vec4) Load 2838 - 2840:2811(i64vec3) VectorShuffle 2839 2839 0 1 2 - 2841:2811(i64vec3) GroupNonUniformIMul 42 Reduce 2840 - 2842: 2802(ptr) AccessChain 34(data) 2837 2794 - 2843: 28(i64vec4) Load 2842 - 2844: 28(i64vec4) VectorShuffle 2843 2841 4 5 6 3 - Store 2842 2844 - 2845: 6(int) Load 8(invocation) - 2846: 2802(ptr) AccessChain 34(data) 67 2794 - 2847: 28(i64vec4) Load 2846 - 2848: 28(i64vec4) GroupNonUniformIMul 42 Reduce 2847 - 2849: 2802(ptr) AccessChain 34(data) 2845 2794 - Store 2849 2848 + 2801: 2589(ptr) AccessChain 34(data) 46 2581 + 2802: 26(i64vec4) Load 2801 + 2803:2588(i64vec2) VectorShuffle 2802 2802 0 1 + 2804:2588(i64vec2) GroupNonUniformIAdd 42 InclusiveScan 2803 + 2805: 2582(ptr) AccessChain 34(data) 2800 2581 38 + 2806: 25(int64_t) CompositeExtract 2804 0 + Store 2805 2806 + 2807: 2582(ptr) AccessChain 34(data) 2800 2581 55 + 2808: 25(int64_t) CompositeExtract 2804 1 + Store 2807 2808 + 2809: 6(int) Load 8(invocation) + 2810: 2589(ptr) AccessChain 34(data) 59 2581 + 2811: 26(i64vec4) Load 2810 + 2812:2599(i64vec3) VectorShuffle 2811 2811 0 1 2 + 2813:2599(i64vec3) GroupNonUniformIAdd 42 InclusiveScan 2812 + 2814: 2582(ptr) AccessChain 34(data) 2809 2581 38 + 2815: 25(int64_t) CompositeExtract 2813 0 + Store 2814 2815 + 2816: 2582(ptr) AccessChain 34(data) 2809 2581 55 + 2817: 25(int64_t) CompositeExtract 2813 1 + Store 2816 2817 + 2818: 2582(ptr) AccessChain 34(data) 2809 2581 69 + 2819: 25(int64_t) CompositeExtract 2813 2 + Store 2818 2819 + 2820: 6(int) Load 8(invocation) + 2821: 2589(ptr) AccessChain 34(data) 73 2581 + 2822: 26(i64vec4) Load 2821 + 2823: 26(i64vec4) GroupNonUniformIAdd 42 InclusiveScan 2822 + 2824: 2589(ptr) AccessChain 34(data) 2820 2581 + Store 2824 2823 + 2825: 6(int) Load 8(invocation) + 2826: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2827: 25(int64_t) Load 2826 + 2828: 25(int64_t) GroupNonUniformIMul 42 InclusiveScan 2827 + 2829: 2582(ptr) AccessChain 34(data) 2825 2581 38 + Store 2829 2828 + 2830: 6(int) Load 8(invocation) + 2831: 2589(ptr) AccessChain 34(data) 46 2581 + 2832: 26(i64vec4) Load 2831 + 2833:2588(i64vec2) VectorShuffle 2832 2832 0 1 + 2834:2588(i64vec2) GroupNonUniformIMul 42 InclusiveScan 2833 + 2835: 2582(ptr) AccessChain 34(data) 2830 2581 38 + 2836: 25(int64_t) CompositeExtract 2834 0 + Store 2835 2836 + 2837: 2582(ptr) AccessChain 34(data) 2830 2581 55 + 2838: 25(int64_t) CompositeExtract 2834 1 + Store 2837 2838 + 2839: 6(int) Load 8(invocation) + 2840: 2589(ptr) AccessChain 34(data) 59 2581 + 2841: 26(i64vec4) Load 2840 + 2842:2599(i64vec3) VectorShuffle 2841 2841 0 1 2 + 2843:2599(i64vec3) GroupNonUniformIMul 42 InclusiveScan 2842 + 2844: 2582(ptr) AccessChain 34(data) 2839 2581 38 + 2845: 25(int64_t) CompositeExtract 2843 0 + Store 2844 2845 + 2846: 2582(ptr) AccessChain 34(data) 2839 2581 55 + 2847: 25(int64_t) CompositeExtract 2843 1 + Store 2846 2847 + 2848: 2582(ptr) AccessChain 34(data) 2839 2581 69 + 2849: 25(int64_t) CompositeExtract 2843 2 + Store 2848 2849 2850: 6(int) Load 8(invocation) - 2851: 2795(ptr) AccessChain 34(data) 37 2794 38 - 2852: 27(int64_t) Load 2851 - 2853: 27(int64_t) GroupNonUniformUMin 42 Reduce 2852 - 2854: 2795(ptr) AccessChain 34(data) 2850 2794 38 + 2851: 2589(ptr) AccessChain 34(data) 73 2581 + 2852: 26(i64vec4) Load 2851 + 2853: 26(i64vec4) GroupNonUniformIMul 42 InclusiveScan 2852 + 2854: 2589(ptr) AccessChain 34(data) 2850 2581 Store 2854 2853 2855: 6(int) Load 8(invocation) - 2856: 2802(ptr) AccessChain 34(data) 46 2794 - 2857: 28(i64vec4) Load 2856 - 2858:2801(i64vec2) VectorShuffle 2857 2857 0 1 - 2859:2801(i64vec2) GroupNonUniformUMin 42 Reduce 2858 - 2860: 2802(ptr) AccessChain 34(data) 2855 2794 - 2861: 28(i64vec4) Load 2860 - 2862: 28(i64vec4) VectorShuffle 2861 2859 4 5 2 3 - Store 2860 2862 - 2863: 6(int) Load 8(invocation) - 2864: 2802(ptr) AccessChain 34(data) 57 2794 - 2865: 28(i64vec4) Load 2864 - 2866:2811(i64vec3) VectorShuffle 2865 2865 0 1 2 - 2867:2811(i64vec3) GroupNonUniformUMin 42 Reduce 2866 - 2868: 2802(ptr) AccessChain 34(data) 2863 2794 - 2869: 28(i64vec4) Load 2868 - 2870: 28(i64vec4) VectorShuffle 2869 2867 4 5 6 3 - Store 2868 2870 - 2871: 6(int) Load 8(invocation) - 2872: 2802(ptr) AccessChain 34(data) 67 2794 - 2873: 28(i64vec4) Load 2872 - 2874: 28(i64vec4) GroupNonUniformUMin 42 Reduce 2873 - 2875: 2802(ptr) AccessChain 34(data) 2871 2794 - Store 2875 2874 - 2876: 6(int) Load 8(invocation) - 2877: 2795(ptr) AccessChain 34(data) 37 2794 38 - 2878: 27(int64_t) Load 2877 - 2879: 27(int64_t) GroupNonUniformUMax 42 Reduce 2878 - 2880: 2795(ptr) AccessChain 34(data) 2876 2794 38 - Store 2880 2879 - 2881: 6(int) Load 8(invocation) - 2882: 2802(ptr) AccessChain 34(data) 46 2794 - 2883: 28(i64vec4) Load 2882 - 2884:2801(i64vec2) VectorShuffle 2883 2883 0 1 - 2885:2801(i64vec2) GroupNonUniformUMax 42 Reduce 2884 - 2886: 2802(ptr) AccessChain 34(data) 2881 2794 - 2887: 28(i64vec4) Load 2886 - 2888: 28(i64vec4) VectorShuffle 2887 2885 4 5 2 3 - Store 2886 2888 - 2889: 6(int) Load 8(invocation) - 2890: 2802(ptr) AccessChain 34(data) 57 2794 - 2891: 28(i64vec4) Load 2890 - 2892:2811(i64vec3) VectorShuffle 2891 2891 0 1 2 - 2893:2811(i64vec3) GroupNonUniformUMax 42 Reduce 2892 - 2894: 2802(ptr) AccessChain 34(data) 2889 2794 - 2895: 28(i64vec4) Load 2894 - 2896: 28(i64vec4) VectorShuffle 2895 2893 4 5 6 3 - Store 2894 2896 - 2897: 6(int) Load 8(invocation) - 2898: 2802(ptr) AccessChain 34(data) 67 2794 - 2899: 28(i64vec4) Load 2898 - 2900: 28(i64vec4) GroupNonUniformUMax 42 Reduce 2899 - 2901: 2802(ptr) AccessChain 34(data) 2897 2794 - Store 2901 2900 - 2902: 6(int) Load 8(invocation) - 2903: 2795(ptr) AccessChain 34(data) 37 2794 38 - 2904: 27(int64_t) Load 2903 - 2905: 27(int64_t) GroupNonUniformBitwiseAnd 42 Reduce 2904 - 2906: 2795(ptr) AccessChain 34(data) 2902 2794 38 - Store 2906 2905 - 2907: 6(int) Load 8(invocation) - 2908: 2802(ptr) AccessChain 34(data) 46 2794 - 2909: 28(i64vec4) Load 2908 - 2910:2801(i64vec2) VectorShuffle 2909 2909 0 1 - 2911:2801(i64vec2) GroupNonUniformBitwiseAnd 42 Reduce 2910 - 2912: 2802(ptr) AccessChain 34(data) 2907 2794 - 2913: 28(i64vec4) Load 2912 - 2914: 28(i64vec4) VectorShuffle 2913 2911 4 5 2 3 - Store 2912 2914 + 2856: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2857: 25(int64_t) Load 2856 + 2858: 25(int64_t) GroupNonUniformSMin 42 InclusiveScan 2857 + 2859: 2582(ptr) AccessChain 34(data) 2855 2581 38 + Store 2859 2858 + 2860: 6(int) Load 8(invocation) + 2861: 2589(ptr) AccessChain 34(data) 46 2581 + 2862: 26(i64vec4) Load 2861 + 2863:2588(i64vec2) VectorShuffle 2862 2862 0 1 + 2864:2588(i64vec2) GroupNonUniformSMin 42 InclusiveScan 2863 + 2865: 2582(ptr) AccessChain 34(data) 2860 2581 38 + 2866: 25(int64_t) CompositeExtract 2864 0 + Store 2865 2866 + 2867: 2582(ptr) AccessChain 34(data) 2860 2581 55 + 2868: 25(int64_t) CompositeExtract 2864 1 + Store 2867 2868 + 2869: 6(int) Load 8(invocation) + 2870: 2589(ptr) AccessChain 34(data) 59 2581 + 2871: 26(i64vec4) Load 2870 + 2872:2599(i64vec3) VectorShuffle 2871 2871 0 1 2 + 2873:2599(i64vec3) GroupNonUniformSMin 42 InclusiveScan 2872 + 2874: 2582(ptr) AccessChain 34(data) 2869 2581 38 + 2875: 25(int64_t) CompositeExtract 2873 0 + Store 2874 2875 + 2876: 2582(ptr) AccessChain 34(data) 2869 2581 55 + 2877: 25(int64_t) CompositeExtract 2873 1 + Store 2876 2877 + 2878: 2582(ptr) AccessChain 34(data) 2869 2581 69 + 2879: 25(int64_t) CompositeExtract 2873 2 + Store 2878 2879 + 2880: 6(int) Load 8(invocation) + 2881: 2589(ptr) AccessChain 34(data) 73 2581 + 2882: 26(i64vec4) Load 2881 + 2883: 26(i64vec4) GroupNonUniformSMin 42 InclusiveScan 2882 + 2884: 2589(ptr) AccessChain 34(data) 2880 2581 + Store 2884 2883 + 2885: 6(int) Load 8(invocation) + 2886: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2887: 25(int64_t) Load 2886 + 2888: 25(int64_t) GroupNonUniformSMax 42 InclusiveScan 2887 + 2889: 2582(ptr) AccessChain 34(data) 2885 2581 38 + Store 2889 2888 + 2890: 6(int) Load 8(invocation) + 2891: 2589(ptr) AccessChain 34(data) 46 2581 + 2892: 26(i64vec4) Load 2891 + 2893:2588(i64vec2) VectorShuffle 2892 2892 0 1 + 2894:2588(i64vec2) GroupNonUniformSMax 42 InclusiveScan 2893 + 2895: 2582(ptr) AccessChain 34(data) 2890 2581 38 + 2896: 25(int64_t) CompositeExtract 2894 0 + Store 2895 2896 + 2897: 2582(ptr) AccessChain 34(data) 2890 2581 55 + 2898: 25(int64_t) CompositeExtract 2894 1 + Store 2897 2898 + 2899: 6(int) Load 8(invocation) + 2900: 2589(ptr) AccessChain 34(data) 59 2581 + 2901: 26(i64vec4) Load 2900 + 2902:2599(i64vec3) VectorShuffle 2901 2901 0 1 2 + 2903:2599(i64vec3) GroupNonUniformSMax 42 InclusiveScan 2902 + 2904: 2582(ptr) AccessChain 34(data) 2899 2581 38 + 2905: 25(int64_t) CompositeExtract 2903 0 + Store 2904 2905 + 2906: 2582(ptr) AccessChain 34(data) 2899 2581 55 + 2907: 25(int64_t) CompositeExtract 2903 1 + Store 2906 2907 + 2908: 2582(ptr) AccessChain 34(data) 2899 2581 69 + 2909: 25(int64_t) CompositeExtract 2903 2 + Store 2908 2909 + 2910: 6(int) Load 8(invocation) + 2911: 2589(ptr) AccessChain 34(data) 73 2581 + 2912: 26(i64vec4) Load 2911 + 2913: 26(i64vec4) GroupNonUniformSMax 42 InclusiveScan 2912 + 2914: 2589(ptr) AccessChain 34(data) 2910 2581 + Store 2914 2913 2915: 6(int) Load 8(invocation) - 2916: 2802(ptr) AccessChain 34(data) 57 2794 - 2917: 28(i64vec4) Load 2916 - 2918:2811(i64vec3) VectorShuffle 2917 2917 0 1 2 - 2919:2811(i64vec3) GroupNonUniformBitwiseAnd 42 Reduce 2918 - 2920: 2802(ptr) AccessChain 34(data) 2915 2794 - 2921: 28(i64vec4) Load 2920 - 2922: 28(i64vec4) VectorShuffle 2921 2919 4 5 6 3 - Store 2920 2922 - 2923: 6(int) Load 8(invocation) - 2924: 2802(ptr) AccessChain 34(data) 67 2794 - 2925: 28(i64vec4) Load 2924 - 2926: 28(i64vec4) GroupNonUniformBitwiseAnd 42 Reduce 2925 - 2927: 2802(ptr) AccessChain 34(data) 2923 2794 - Store 2927 2926 - 2928: 6(int) Load 8(invocation) - 2929: 2795(ptr) AccessChain 34(data) 37 2794 38 - 2930: 27(int64_t) Load 2929 - 2931: 27(int64_t) GroupNonUniformBitwiseOr 42 Reduce 2930 - 2932: 2795(ptr) AccessChain 34(data) 2928 2794 38 - Store 2932 2931 - 2933: 6(int) Load 8(invocation) - 2934: 2802(ptr) AccessChain 34(data) 46 2794 - 2935: 28(i64vec4) Load 2934 - 2936:2801(i64vec2) VectorShuffle 2935 2935 0 1 - 2937:2801(i64vec2) GroupNonUniformBitwiseOr 42 Reduce 2936 - 2938: 2802(ptr) AccessChain 34(data) 2933 2794 - 2939: 28(i64vec4) Load 2938 - 2940: 28(i64vec4) VectorShuffle 2939 2937 4 5 2 3 - Store 2938 2940 - 2941: 6(int) Load 8(invocation) - 2942: 2802(ptr) AccessChain 34(data) 57 2794 - 2943: 28(i64vec4) Load 2942 - 2944:2811(i64vec3) VectorShuffle 2943 2943 0 1 2 - 2945:2811(i64vec3) GroupNonUniformBitwiseOr 42 Reduce 2944 - 2946: 2802(ptr) AccessChain 34(data) 2941 2794 - 2947: 28(i64vec4) Load 2946 - 2948: 28(i64vec4) VectorShuffle 2947 2945 4 5 6 3 - Store 2946 2948 - 2949: 6(int) Load 8(invocation) - 2950: 2802(ptr) AccessChain 34(data) 67 2794 - 2951: 28(i64vec4) Load 2950 - 2952: 28(i64vec4) GroupNonUniformBitwiseOr 42 Reduce 2951 - 2953: 2802(ptr) AccessChain 34(data) 2949 2794 - Store 2953 2952 - 2954: 6(int) Load 8(invocation) - 2955: 2795(ptr) AccessChain 34(data) 37 2794 38 - 2956: 27(int64_t) Load 2955 - 2957: 27(int64_t) GroupNonUniformBitwiseXor 42 Reduce 2956 - 2958: 2795(ptr) AccessChain 34(data) 2954 2794 38 - Store 2958 2957 + 2916: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2917: 25(int64_t) Load 2916 + 2918: 25(int64_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 2917 + 2919: 2582(ptr) AccessChain 34(data) 2915 2581 38 + Store 2919 2918 + 2920: 6(int) Load 8(invocation) + 2921: 2589(ptr) AccessChain 34(data) 46 2581 + 2922: 26(i64vec4) Load 2921 + 2923:2588(i64vec2) VectorShuffle 2922 2922 0 1 + 2924:2588(i64vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 2923 + 2925: 2582(ptr) AccessChain 34(data) 2920 2581 38 + 2926: 25(int64_t) CompositeExtract 2924 0 + Store 2925 2926 + 2927: 2582(ptr) AccessChain 34(data) 2920 2581 55 + 2928: 25(int64_t) CompositeExtract 2924 1 + Store 2927 2928 + 2929: 6(int) Load 8(invocation) + 2930: 2589(ptr) AccessChain 34(data) 59 2581 + 2931: 26(i64vec4) Load 2930 + 2932:2599(i64vec3) VectorShuffle 2931 2931 0 1 2 + 2933:2599(i64vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 2932 + 2934: 2582(ptr) AccessChain 34(data) 2929 2581 38 + 2935: 25(int64_t) CompositeExtract 2933 0 + Store 2934 2935 + 2936: 2582(ptr) AccessChain 34(data) 2929 2581 55 + 2937: 25(int64_t) CompositeExtract 2933 1 + Store 2936 2937 + 2938: 2582(ptr) AccessChain 34(data) 2929 2581 69 + 2939: 25(int64_t) CompositeExtract 2933 2 + Store 2938 2939 + 2940: 6(int) Load 8(invocation) + 2941: 2589(ptr) AccessChain 34(data) 73 2581 + 2942: 26(i64vec4) Load 2941 + 2943: 26(i64vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 2942 + 2944: 2589(ptr) AccessChain 34(data) 2940 2581 + Store 2944 2943 + 2945: 6(int) Load 8(invocation) + 2946: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2947: 25(int64_t) Load 2946 + 2948: 25(int64_t) GroupNonUniformBitwiseOr 42 InclusiveScan 2947 + 2949: 2582(ptr) AccessChain 34(data) 2945 2581 38 + Store 2949 2948 + 2950: 6(int) Load 8(invocation) + 2951: 2589(ptr) AccessChain 34(data) 46 2581 + 2952: 26(i64vec4) Load 2951 + 2953:2588(i64vec2) VectorShuffle 2952 2952 0 1 + 2954:2588(i64vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 2953 + 2955: 2582(ptr) AccessChain 34(data) 2950 2581 38 + 2956: 25(int64_t) CompositeExtract 2954 0 + Store 2955 2956 + 2957: 2582(ptr) AccessChain 34(data) 2950 2581 55 + 2958: 25(int64_t) CompositeExtract 2954 1 + Store 2957 2958 2959: 6(int) Load 8(invocation) - 2960: 2802(ptr) AccessChain 34(data) 46 2794 - 2961: 28(i64vec4) Load 2960 - 2962:2801(i64vec2) VectorShuffle 2961 2961 0 1 - 2963:2801(i64vec2) GroupNonUniformBitwiseXor 42 Reduce 2962 - 2964: 2802(ptr) AccessChain 34(data) 2959 2794 - 2965: 28(i64vec4) Load 2964 - 2966: 28(i64vec4) VectorShuffle 2965 2963 4 5 2 3 - Store 2964 2966 - 2967: 6(int) Load 8(invocation) - 2968: 2802(ptr) AccessChain 34(data) 57 2794 - 2969: 28(i64vec4) Load 2968 - 2970:2811(i64vec3) VectorShuffle 2969 2969 0 1 2 - 2971:2811(i64vec3) GroupNonUniformBitwiseXor 42 Reduce 2970 - 2972: 2802(ptr) AccessChain 34(data) 2967 2794 - 2973: 28(i64vec4) Load 2972 - 2974: 28(i64vec4) VectorShuffle 2973 2971 4 5 6 3 - Store 2972 2974 + 2960: 2589(ptr) AccessChain 34(data) 59 2581 + 2961: 26(i64vec4) Load 2960 + 2962:2599(i64vec3) VectorShuffle 2961 2961 0 1 2 + 2963:2599(i64vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 2962 + 2964: 2582(ptr) AccessChain 34(data) 2959 2581 38 + 2965: 25(int64_t) CompositeExtract 2963 0 + Store 2964 2965 + 2966: 2582(ptr) AccessChain 34(data) 2959 2581 55 + 2967: 25(int64_t) CompositeExtract 2963 1 + Store 2966 2967 + 2968: 2582(ptr) AccessChain 34(data) 2959 2581 69 + 2969: 25(int64_t) CompositeExtract 2963 2 + Store 2968 2969 + 2970: 6(int) Load 8(invocation) + 2971: 2589(ptr) AccessChain 34(data) 73 2581 + 2972: 26(i64vec4) Load 2971 + 2973: 26(i64vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 2972 + 2974: 2589(ptr) AccessChain 34(data) 2970 2581 + Store 2974 2973 2975: 6(int) Load 8(invocation) - 2976: 2802(ptr) AccessChain 34(data) 67 2794 - 2977: 28(i64vec4) Load 2976 - 2978: 28(i64vec4) GroupNonUniformBitwiseXor 42 Reduce 2977 - 2979: 2802(ptr) AccessChain 34(data) 2975 2794 + 2976: 2582(ptr) AccessChain 34(data) 37 2581 38 + 2977: 25(int64_t) Load 2976 + 2978: 25(int64_t) GroupNonUniformBitwiseXor 42 InclusiveScan 2977 + 2979: 2582(ptr) AccessChain 34(data) 2975 2581 38 Store 2979 2978 2980: 6(int) Load 8(invocation) - 2981: 2795(ptr) AccessChain 34(data) 37 2794 38 - 2982: 27(int64_t) Load 2981 - 2983: 27(int64_t) GroupNonUniformIAdd 42 InclusiveScan 2982 - 2984: 2795(ptr) AccessChain 34(data) 2980 2794 38 - Store 2984 2983 - 2985: 6(int) Load 8(invocation) - 2986: 2802(ptr) AccessChain 34(data) 46 2794 - 2987: 28(i64vec4) Load 2986 - 2988:2801(i64vec2) VectorShuffle 2987 2987 0 1 - 2989:2801(i64vec2) GroupNonUniformIAdd 42 InclusiveScan 2988 - 2990: 2802(ptr) AccessChain 34(data) 2985 2794 - 2991: 28(i64vec4) Load 2990 - 2992: 28(i64vec4) VectorShuffle 2991 2989 4 5 2 3 - Store 2990 2992 - 2993: 6(int) Load 8(invocation) - 2994: 2802(ptr) AccessChain 34(data) 57 2794 - 2995: 28(i64vec4) Load 2994 - 2996:2811(i64vec3) VectorShuffle 2995 2995 0 1 2 - 2997:2811(i64vec3) GroupNonUniformIAdd 42 InclusiveScan 2996 - 2998: 2802(ptr) AccessChain 34(data) 2993 2794 - 2999: 28(i64vec4) Load 2998 - 3000: 28(i64vec4) VectorShuffle 2999 2997 4 5 6 3 - Store 2998 3000 - 3001: 6(int) Load 8(invocation) - 3002: 2802(ptr) AccessChain 34(data) 67 2794 - 3003: 28(i64vec4) Load 3002 - 3004: 28(i64vec4) GroupNonUniformIAdd 42 InclusiveScan 3003 - 3005: 2802(ptr) AccessChain 34(data) 3001 2794 - Store 3005 3004 - 3006: 6(int) Load 8(invocation) - 3007: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3008: 27(int64_t) Load 3007 - 3009: 27(int64_t) GroupNonUniformIMul 42 InclusiveScan 3008 - 3010: 2795(ptr) AccessChain 34(data) 3006 2794 38 - Store 3010 3009 - 3011: 6(int) Load 8(invocation) - 3012: 2802(ptr) AccessChain 34(data) 46 2794 - 3013: 28(i64vec4) Load 3012 - 3014:2801(i64vec2) VectorShuffle 3013 3013 0 1 - 3015:2801(i64vec2) GroupNonUniformIMul 42 InclusiveScan 3014 - 3016: 2802(ptr) AccessChain 34(data) 3011 2794 - 3017: 28(i64vec4) Load 3016 - 3018: 28(i64vec4) VectorShuffle 3017 3015 4 5 2 3 - Store 3016 3018 + 2981: 2589(ptr) AccessChain 34(data) 46 2581 + 2982: 26(i64vec4) Load 2981 + 2983:2588(i64vec2) VectorShuffle 2982 2982 0 1 + 2984:2588(i64vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 2983 + 2985: 2582(ptr) AccessChain 34(data) 2980 2581 38 + 2986: 25(int64_t) CompositeExtract 2984 0 + Store 2985 2986 + 2987: 2582(ptr) AccessChain 34(data) 2980 2581 55 + 2988: 25(int64_t) CompositeExtract 2984 1 + Store 2987 2988 + 2989: 6(int) Load 8(invocation) + 2990: 2589(ptr) AccessChain 34(data) 59 2581 + 2991: 26(i64vec4) Load 2990 + 2992:2599(i64vec3) VectorShuffle 2991 2991 0 1 2 + 2993:2599(i64vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 2992 + 2994: 2582(ptr) AccessChain 34(data) 2989 2581 38 + 2995: 25(int64_t) CompositeExtract 2993 0 + Store 2994 2995 + 2996: 2582(ptr) AccessChain 34(data) 2989 2581 55 + 2997: 25(int64_t) CompositeExtract 2993 1 + Store 2996 2997 + 2998: 2582(ptr) AccessChain 34(data) 2989 2581 69 + 2999: 25(int64_t) CompositeExtract 2993 2 + Store 2998 2999 + 3000: 6(int) Load 8(invocation) + 3001: 2589(ptr) AccessChain 34(data) 73 2581 + 3002: 26(i64vec4) Load 3001 + 3003: 26(i64vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 3002 + 3004: 2589(ptr) AccessChain 34(data) 3000 2581 + Store 3004 3003 + 3005: 6(int) Load 8(invocation) + 3006: 2582(ptr) AccessChain 34(data) 37 2581 38 + 3007: 25(int64_t) Load 3006 + 3008: 25(int64_t) GroupNonUniformIAdd 42 ExclusiveScan 3007 + 3009: 2582(ptr) AccessChain 34(data) 3005 2581 38 + Store 3009 3008 + 3010: 6(int) Load 8(invocation) + 3011: 2589(ptr) AccessChain 34(data) 46 2581 + 3012: 26(i64vec4) Load 3011 + 3013:2588(i64vec2) VectorShuffle 3012 3012 0 1 + 3014:2588(i64vec2) GroupNonUniformIAdd 42 ExclusiveScan 3013 + 3015: 2582(ptr) AccessChain 34(data) 3010 2581 38 + 3016: 25(int64_t) CompositeExtract 3014 0 + Store 3015 3016 + 3017: 2582(ptr) AccessChain 34(data) 3010 2581 55 + 3018: 25(int64_t) CompositeExtract 3014 1 + Store 3017 3018 3019: 6(int) Load 8(invocation) - 3020: 2802(ptr) AccessChain 34(data) 57 2794 - 3021: 28(i64vec4) Load 3020 - 3022:2811(i64vec3) VectorShuffle 3021 3021 0 1 2 - 3023:2811(i64vec3) GroupNonUniformIMul 42 InclusiveScan 3022 - 3024: 2802(ptr) AccessChain 34(data) 3019 2794 - 3025: 28(i64vec4) Load 3024 - 3026: 28(i64vec4) VectorShuffle 3025 3023 4 5 6 3 - Store 3024 3026 - 3027: 6(int) Load 8(invocation) - 3028: 2802(ptr) AccessChain 34(data) 67 2794 - 3029: 28(i64vec4) Load 3028 - 3030: 28(i64vec4) GroupNonUniformIMul 42 InclusiveScan 3029 - 3031: 2802(ptr) AccessChain 34(data) 3027 2794 - Store 3031 3030 - 3032: 6(int) Load 8(invocation) - 3033: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3034: 27(int64_t) Load 3033 - 3035: 27(int64_t) GroupNonUniformUMin 42 InclusiveScan 3034 - 3036: 2795(ptr) AccessChain 34(data) 3032 2794 38 - Store 3036 3035 - 3037: 6(int) Load 8(invocation) - 3038: 2802(ptr) AccessChain 34(data) 46 2794 - 3039: 28(i64vec4) Load 3038 - 3040:2801(i64vec2) VectorShuffle 3039 3039 0 1 - 3041:2801(i64vec2) GroupNonUniformUMin 42 InclusiveScan 3040 - 3042: 2802(ptr) AccessChain 34(data) 3037 2794 - 3043: 28(i64vec4) Load 3042 - 3044: 28(i64vec4) VectorShuffle 3043 3041 4 5 2 3 - Store 3042 3044 - 3045: 6(int) Load 8(invocation) - 3046: 2802(ptr) AccessChain 34(data) 57 2794 - 3047: 28(i64vec4) Load 3046 - 3048:2811(i64vec3) VectorShuffle 3047 3047 0 1 2 - 3049:2811(i64vec3) GroupNonUniformUMin 42 InclusiveScan 3048 - 3050: 2802(ptr) AccessChain 34(data) 3045 2794 - 3051: 28(i64vec4) Load 3050 - 3052: 28(i64vec4) VectorShuffle 3051 3049 4 5 6 3 - Store 3050 3052 - 3053: 6(int) Load 8(invocation) - 3054: 2802(ptr) AccessChain 34(data) 67 2794 - 3055: 28(i64vec4) Load 3054 - 3056: 28(i64vec4) GroupNonUniformUMin 42 InclusiveScan 3055 - 3057: 2802(ptr) AccessChain 34(data) 3053 2794 - Store 3057 3056 - 3058: 6(int) Load 8(invocation) - 3059: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3060: 27(int64_t) Load 3059 - 3061: 27(int64_t) GroupNonUniformUMax 42 InclusiveScan 3060 - 3062: 2795(ptr) AccessChain 34(data) 3058 2794 38 - Store 3062 3061 - 3063: 6(int) Load 8(invocation) - 3064: 2802(ptr) AccessChain 34(data) 46 2794 - 3065: 28(i64vec4) Load 3064 - 3066:2801(i64vec2) VectorShuffle 3065 3065 0 1 - 3067:2801(i64vec2) GroupNonUniformUMax 42 InclusiveScan 3066 - 3068: 2802(ptr) AccessChain 34(data) 3063 2794 - 3069: 28(i64vec4) Load 3068 - 3070: 28(i64vec4) VectorShuffle 3069 3067 4 5 2 3 - Store 3068 3070 - 3071: 6(int) Load 8(invocation) - 3072: 2802(ptr) AccessChain 34(data) 57 2794 - 3073: 28(i64vec4) Load 3072 - 3074:2811(i64vec3) VectorShuffle 3073 3073 0 1 2 - 3075:2811(i64vec3) GroupNonUniformUMax 42 InclusiveScan 3074 - 3076: 2802(ptr) AccessChain 34(data) 3071 2794 - 3077: 28(i64vec4) Load 3076 - 3078: 28(i64vec4) VectorShuffle 3077 3075 4 5 6 3 - Store 3076 3078 + 3020: 2589(ptr) AccessChain 34(data) 59 2581 + 3021: 26(i64vec4) Load 3020 + 3022:2599(i64vec3) VectorShuffle 3021 3021 0 1 2 + 3023:2599(i64vec3) GroupNonUniformIAdd 42 ExclusiveScan 3022 + 3024: 2582(ptr) AccessChain 34(data) 3019 2581 38 + 3025: 25(int64_t) CompositeExtract 3023 0 + Store 3024 3025 + 3026: 2582(ptr) AccessChain 34(data) 3019 2581 55 + 3027: 25(int64_t) CompositeExtract 3023 1 + Store 3026 3027 + 3028: 2582(ptr) AccessChain 34(data) 3019 2581 69 + 3029: 25(int64_t) CompositeExtract 3023 2 + Store 3028 3029 + 3030: 6(int) Load 8(invocation) + 3031: 2589(ptr) AccessChain 34(data) 73 2581 + 3032: 26(i64vec4) Load 3031 + 3033: 26(i64vec4) GroupNonUniformIAdd 42 ExclusiveScan 3032 + 3034: 2589(ptr) AccessChain 34(data) 3030 2581 + Store 3034 3033 + 3035: 6(int) Load 8(invocation) + 3036: 2582(ptr) AccessChain 34(data) 37 2581 38 + 3037: 25(int64_t) Load 3036 + 3038: 25(int64_t) GroupNonUniformIMul 42 ExclusiveScan 3037 + 3039: 2582(ptr) AccessChain 34(data) 3035 2581 38 + Store 3039 3038 + 3040: 6(int) Load 8(invocation) + 3041: 2589(ptr) AccessChain 34(data) 46 2581 + 3042: 26(i64vec4) Load 3041 + 3043:2588(i64vec2) VectorShuffle 3042 3042 0 1 + 3044:2588(i64vec2) GroupNonUniformIMul 42 ExclusiveScan 3043 + 3045: 2582(ptr) AccessChain 34(data) 3040 2581 38 + 3046: 25(int64_t) CompositeExtract 3044 0 + Store 3045 3046 + 3047: 2582(ptr) AccessChain 34(data) 3040 2581 55 + 3048: 25(int64_t) CompositeExtract 3044 1 + Store 3047 3048 + 3049: 6(int) Load 8(invocation) + 3050: 2589(ptr) AccessChain 34(data) 59 2581 + 3051: 26(i64vec4) Load 3050 + 3052:2599(i64vec3) VectorShuffle 3051 3051 0 1 2 + 3053:2599(i64vec3) GroupNonUniformIMul 42 ExclusiveScan 3052 + 3054: 2582(ptr) AccessChain 34(data) 3049 2581 38 + 3055: 25(int64_t) CompositeExtract 3053 0 + Store 3054 3055 + 3056: 2582(ptr) AccessChain 34(data) 3049 2581 55 + 3057: 25(int64_t) CompositeExtract 3053 1 + Store 3056 3057 + 3058: 2582(ptr) AccessChain 34(data) 3049 2581 69 + 3059: 25(int64_t) CompositeExtract 3053 2 + Store 3058 3059 + 3060: 6(int) Load 8(invocation) + 3061: 2589(ptr) AccessChain 34(data) 73 2581 + 3062: 26(i64vec4) Load 3061 + 3063: 26(i64vec4) GroupNonUniformIMul 42 ExclusiveScan 3062 + 3064: 2589(ptr) AccessChain 34(data) 3060 2581 + Store 3064 3063 + 3065: 6(int) Load 8(invocation) + 3066: 2582(ptr) AccessChain 34(data) 37 2581 38 + 3067: 25(int64_t) Load 3066 + 3068: 25(int64_t) GroupNonUniformSMin 42 ExclusiveScan 3067 + 3069: 2582(ptr) AccessChain 34(data) 3065 2581 38 + Store 3069 3068 + 3070: 6(int) Load 8(invocation) + 3071: 2589(ptr) AccessChain 34(data) 46 2581 + 3072: 26(i64vec4) Load 3071 + 3073:2588(i64vec2) VectorShuffle 3072 3072 0 1 + 3074:2588(i64vec2) GroupNonUniformSMin 42 ExclusiveScan 3073 + 3075: 2582(ptr) AccessChain 34(data) 3070 2581 38 + 3076: 25(int64_t) CompositeExtract 3074 0 + Store 3075 3076 + 3077: 2582(ptr) AccessChain 34(data) 3070 2581 55 + 3078: 25(int64_t) CompositeExtract 3074 1 + Store 3077 3078 3079: 6(int) Load 8(invocation) - 3080: 2802(ptr) AccessChain 34(data) 67 2794 - 3081: 28(i64vec4) Load 3080 - 3082: 28(i64vec4) GroupNonUniformUMax 42 InclusiveScan 3081 - 3083: 2802(ptr) AccessChain 34(data) 3079 2794 - Store 3083 3082 - 3084: 6(int) Load 8(invocation) - 3085: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3086: 27(int64_t) Load 3085 - 3087: 27(int64_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 3086 - 3088: 2795(ptr) AccessChain 34(data) 3084 2794 38 - Store 3088 3087 - 3089: 6(int) Load 8(invocation) - 3090: 2802(ptr) AccessChain 34(data) 46 2794 - 3091: 28(i64vec4) Load 3090 - 3092:2801(i64vec2) VectorShuffle 3091 3091 0 1 - 3093:2801(i64vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 3092 - 3094: 2802(ptr) AccessChain 34(data) 3089 2794 - 3095: 28(i64vec4) Load 3094 - 3096: 28(i64vec4) VectorShuffle 3095 3093 4 5 2 3 - Store 3094 3096 - 3097: 6(int) Load 8(invocation) - 3098: 2802(ptr) AccessChain 34(data) 57 2794 - 3099: 28(i64vec4) Load 3098 - 3100:2811(i64vec3) VectorShuffle 3099 3099 0 1 2 - 3101:2811(i64vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 3100 - 3102: 2802(ptr) AccessChain 34(data) 3097 2794 - 3103: 28(i64vec4) Load 3102 - 3104: 28(i64vec4) VectorShuffle 3103 3101 4 5 6 3 - Store 3102 3104 - 3105: 6(int) Load 8(invocation) - 3106: 2802(ptr) AccessChain 34(data) 67 2794 - 3107: 28(i64vec4) Load 3106 - 3108: 28(i64vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 3107 - 3109: 2802(ptr) AccessChain 34(data) 3105 2794 - Store 3109 3108 - 3110: 6(int) Load 8(invocation) - 3111: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3112: 27(int64_t) Load 3111 - 3113: 27(int64_t) GroupNonUniformBitwiseOr 42 InclusiveScan 3112 - 3114: 2795(ptr) AccessChain 34(data) 3110 2794 38 - Store 3114 3113 - 3115: 6(int) Load 8(invocation) - 3116: 2802(ptr) AccessChain 34(data) 46 2794 - 3117: 28(i64vec4) Load 3116 - 3118:2801(i64vec2) VectorShuffle 3117 3117 0 1 - 3119:2801(i64vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 3118 - 3120: 2802(ptr) AccessChain 34(data) 3115 2794 - 3121: 28(i64vec4) Load 3120 - 3122: 28(i64vec4) VectorShuffle 3121 3119 4 5 2 3 - Store 3120 3122 - 3123: 6(int) Load 8(invocation) - 3124: 2802(ptr) AccessChain 34(data) 57 2794 - 3125: 28(i64vec4) Load 3124 - 3126:2811(i64vec3) VectorShuffle 3125 3125 0 1 2 - 3127:2811(i64vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 3126 - 3128: 2802(ptr) AccessChain 34(data) 3123 2794 - 3129: 28(i64vec4) Load 3128 - 3130: 28(i64vec4) VectorShuffle 3129 3127 4 5 6 3 - Store 3128 3130 - 3131: 6(int) Load 8(invocation) - 3132: 2802(ptr) AccessChain 34(data) 67 2794 - 3133: 28(i64vec4) Load 3132 - 3134: 28(i64vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 3133 - 3135: 2802(ptr) AccessChain 34(data) 3131 2794 - Store 3135 3134 - 3136: 6(int) Load 8(invocation) - 3137: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3138: 27(int64_t) Load 3137 - 3139: 27(int64_t) GroupNonUniformBitwiseXor 42 InclusiveScan 3138 - 3140: 2795(ptr) AccessChain 34(data) 3136 2794 38 - Store 3140 3139 - 3141: 6(int) Load 8(invocation) - 3142: 2802(ptr) AccessChain 34(data) 46 2794 - 3143: 28(i64vec4) Load 3142 - 3144:2801(i64vec2) VectorShuffle 3143 3143 0 1 - 3145:2801(i64vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 3144 - 3146: 2802(ptr) AccessChain 34(data) 3141 2794 - 3147: 28(i64vec4) Load 3146 - 3148: 28(i64vec4) VectorShuffle 3147 3145 4 5 2 3 - Store 3146 3148 - 3149: 6(int) Load 8(invocation) - 3150: 2802(ptr) AccessChain 34(data) 57 2794 - 3151: 28(i64vec4) Load 3150 - 3152:2811(i64vec3) VectorShuffle 3151 3151 0 1 2 - 3153:2811(i64vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 3152 - 3154: 2802(ptr) AccessChain 34(data) 3149 2794 - 3155: 28(i64vec4) Load 3154 - 3156: 28(i64vec4) VectorShuffle 3155 3153 4 5 6 3 - Store 3154 3156 - 3157: 6(int) Load 8(invocation) - 3158: 2802(ptr) AccessChain 34(data) 67 2794 - 3159: 28(i64vec4) Load 3158 - 3160: 28(i64vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 3159 - 3161: 2802(ptr) AccessChain 34(data) 3157 2794 - Store 3161 3160 - 3162: 6(int) Load 8(invocation) - 3163: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3164: 27(int64_t) Load 3163 - 3165: 27(int64_t) GroupNonUniformIAdd 42 ExclusiveScan 3164 - 3166: 2795(ptr) AccessChain 34(data) 3162 2794 38 - Store 3166 3165 - 3167: 6(int) Load 8(invocation) - 3168: 2802(ptr) AccessChain 34(data) 46 2794 - 3169: 28(i64vec4) Load 3168 - 3170:2801(i64vec2) VectorShuffle 3169 3169 0 1 - 3171:2801(i64vec2) GroupNonUniformIAdd 42 ExclusiveScan 3170 - 3172: 2802(ptr) AccessChain 34(data) 3167 2794 - 3173: 28(i64vec4) Load 3172 - 3174: 28(i64vec4) VectorShuffle 3173 3171 4 5 2 3 - Store 3172 3174 - 3175: 6(int) Load 8(invocation) - 3176: 2802(ptr) AccessChain 34(data) 57 2794 - 3177: 28(i64vec4) Load 3176 - 3178:2811(i64vec3) VectorShuffle 3177 3177 0 1 2 - 3179:2811(i64vec3) GroupNonUniformIAdd 42 ExclusiveScan 3178 - 3180: 2802(ptr) AccessChain 34(data) 3175 2794 - 3181: 28(i64vec4) Load 3180 - 3182: 28(i64vec4) VectorShuffle 3181 3179 4 5 6 3 - Store 3180 3182 - 3183: 6(int) Load 8(invocation) - 3184: 2802(ptr) AccessChain 34(data) 67 2794 - 3185: 28(i64vec4) Load 3184 - 3186: 28(i64vec4) GroupNonUniformIAdd 42 ExclusiveScan 3185 - 3187: 2802(ptr) AccessChain 34(data) 3183 2794 - Store 3187 3186 - 3188: 6(int) Load 8(invocation) - 3189: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3190: 27(int64_t) Load 3189 - 3191: 27(int64_t) GroupNonUniformIMul 42 ExclusiveScan 3190 - 3192: 2795(ptr) AccessChain 34(data) 3188 2794 38 - Store 3192 3191 - 3193: 6(int) Load 8(invocation) - 3194: 2802(ptr) AccessChain 34(data) 46 2794 - 3195: 28(i64vec4) Load 3194 - 3196:2801(i64vec2) VectorShuffle 3195 3195 0 1 - 3197:2801(i64vec2) GroupNonUniformIMul 42 ExclusiveScan 3196 - 3198: 2802(ptr) AccessChain 34(data) 3193 2794 - 3199: 28(i64vec4) Load 3198 - 3200: 28(i64vec4) VectorShuffle 3199 3197 4 5 2 3 - Store 3198 3200 - 3201: 6(int) Load 8(invocation) - 3202: 2802(ptr) AccessChain 34(data) 57 2794 - 3203: 28(i64vec4) Load 3202 - 3204:2811(i64vec3) VectorShuffle 3203 3203 0 1 2 - 3205:2811(i64vec3) GroupNonUniformIMul 42 ExclusiveScan 3204 - 3206: 2802(ptr) AccessChain 34(data) 3201 2794 - 3207: 28(i64vec4) Load 3206 - 3208: 28(i64vec4) VectorShuffle 3207 3205 4 5 6 3 - Store 3206 3208 - 3209: 6(int) Load 8(invocation) - 3210: 2802(ptr) AccessChain 34(data) 67 2794 - 3211: 28(i64vec4) Load 3210 - 3212: 28(i64vec4) GroupNonUniformIMul 42 ExclusiveScan 3211 - 3213: 2802(ptr) AccessChain 34(data) 3209 2794 - Store 3213 3212 - 3214: 6(int) Load 8(invocation) - 3215: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3216: 27(int64_t) Load 3215 - 3217: 27(int64_t) GroupNonUniformUMin 42 ExclusiveScan 3216 - 3218: 2795(ptr) AccessChain 34(data) 3214 2794 38 - Store 3218 3217 - 3219: 6(int) Load 8(invocation) - 3220: 2802(ptr) AccessChain 34(data) 46 2794 - 3221: 28(i64vec4) Load 3220 - 3222:2801(i64vec2) VectorShuffle 3221 3221 0 1 - 3223:2801(i64vec2) GroupNonUniformUMin 42 ExclusiveScan 3222 - 3224: 2802(ptr) AccessChain 34(data) 3219 2794 - 3225: 28(i64vec4) Load 3224 - 3226: 28(i64vec4) VectorShuffle 3225 3223 4 5 2 3 - Store 3224 3226 - 3227: 6(int) Load 8(invocation) - 3228: 2802(ptr) AccessChain 34(data) 57 2794 - 3229: 28(i64vec4) Load 3228 - 3230:2811(i64vec3) VectorShuffle 3229 3229 0 1 2 - 3231:2811(i64vec3) GroupNonUniformUMin 42 ExclusiveScan 3230 - 3232: 2802(ptr) AccessChain 34(data) 3227 2794 - 3233: 28(i64vec4) Load 3232 - 3234: 28(i64vec4) VectorShuffle 3233 3231 4 5 6 3 - Store 3232 3234 - 3235: 6(int) Load 8(invocation) - 3236: 2802(ptr) AccessChain 34(data) 67 2794 - 3237: 28(i64vec4) Load 3236 - 3238: 28(i64vec4) GroupNonUniformUMin 42 ExclusiveScan 3237 - 3239: 2802(ptr) AccessChain 34(data) 3235 2794 - Store 3239 3238 - 3240: 6(int) Load 8(invocation) - 3241: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3242: 27(int64_t) Load 3241 - 3243: 27(int64_t) GroupNonUniformUMax 42 ExclusiveScan 3242 - 3244: 2795(ptr) AccessChain 34(data) 3240 2794 38 - Store 3244 3243 + 3080: 2589(ptr) AccessChain 34(data) 59 2581 + 3081: 26(i64vec4) Load 3080 + 3082:2599(i64vec3) VectorShuffle 3081 3081 0 1 2 + 3083:2599(i64vec3) GroupNonUniformSMin 42 ExclusiveScan 3082 + 3084: 2582(ptr) AccessChain 34(data) 3079 2581 38 + 3085: 25(int64_t) CompositeExtract 3083 0 + Store 3084 3085 + 3086: 2582(ptr) AccessChain 34(data) 3079 2581 55 + 3087: 25(int64_t) CompositeExtract 3083 1 + Store 3086 3087 + 3088: 2582(ptr) AccessChain 34(data) 3079 2581 69 + 3089: 25(int64_t) CompositeExtract 3083 2 + Store 3088 3089 + 3090: 6(int) Load 8(invocation) + 3091: 2589(ptr) AccessChain 34(data) 73 2581 + 3092: 26(i64vec4) Load 3091 + 3093: 26(i64vec4) GroupNonUniformSMin 42 ExclusiveScan 3092 + 3094: 2589(ptr) AccessChain 34(data) 3090 2581 + Store 3094 3093 + 3095: 6(int) Load 8(invocation) + 3096: 2582(ptr) AccessChain 34(data) 37 2581 38 + 3097: 25(int64_t) Load 3096 + 3098: 25(int64_t) GroupNonUniformSMax 42 ExclusiveScan 3097 + 3099: 2582(ptr) AccessChain 34(data) 3095 2581 38 + Store 3099 3098 + 3100: 6(int) Load 8(invocation) + 3101: 2589(ptr) AccessChain 34(data) 46 2581 + 3102: 26(i64vec4) Load 3101 + 3103:2588(i64vec2) VectorShuffle 3102 3102 0 1 + 3104:2588(i64vec2) GroupNonUniformSMax 42 ExclusiveScan 3103 + 3105: 2582(ptr) AccessChain 34(data) 3100 2581 38 + 3106: 25(int64_t) CompositeExtract 3104 0 + Store 3105 3106 + 3107: 2582(ptr) AccessChain 34(data) 3100 2581 55 + 3108: 25(int64_t) CompositeExtract 3104 1 + Store 3107 3108 + 3109: 6(int) Load 8(invocation) + 3110: 2589(ptr) AccessChain 34(data) 59 2581 + 3111: 26(i64vec4) Load 3110 + 3112:2599(i64vec3) VectorShuffle 3111 3111 0 1 2 + 3113:2599(i64vec3) GroupNonUniformSMax 42 ExclusiveScan 3112 + 3114: 2582(ptr) AccessChain 34(data) 3109 2581 38 + 3115: 25(int64_t) CompositeExtract 3113 0 + Store 3114 3115 + 3116: 2582(ptr) AccessChain 34(data) 3109 2581 55 + 3117: 25(int64_t) CompositeExtract 3113 1 + Store 3116 3117 + 3118: 2582(ptr) AccessChain 34(data) 3109 2581 69 + 3119: 25(int64_t) CompositeExtract 3113 2 + Store 3118 3119 + 3120: 6(int) Load 8(invocation) + 3121: 2589(ptr) AccessChain 34(data) 73 2581 + 3122: 26(i64vec4) Load 3121 + 3123: 26(i64vec4) GroupNonUniformSMax 42 ExclusiveScan 3122 + 3124: 2589(ptr) AccessChain 34(data) 3120 2581 + Store 3124 3123 + 3125: 6(int) Load 8(invocation) + 3126: 2582(ptr) AccessChain 34(data) 37 2581 38 + 3127: 25(int64_t) Load 3126 + 3128: 25(int64_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3127 + 3129: 2582(ptr) AccessChain 34(data) 3125 2581 38 + Store 3129 3128 + 3130: 6(int) Load 8(invocation) + 3131: 2589(ptr) AccessChain 34(data) 46 2581 + 3132: 26(i64vec4) Load 3131 + 3133:2588(i64vec2) VectorShuffle 3132 3132 0 1 + 3134:2588(i64vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3133 + 3135: 2582(ptr) AccessChain 34(data) 3130 2581 38 + 3136: 25(int64_t) CompositeExtract 3134 0 + Store 3135 3136 + 3137: 2582(ptr) AccessChain 34(data) 3130 2581 55 + 3138: 25(int64_t) CompositeExtract 3134 1 + Store 3137 3138 + 3139: 6(int) Load 8(invocation) + 3140: 2589(ptr) AccessChain 34(data) 59 2581 + 3141: 26(i64vec4) Load 3140 + 3142:2599(i64vec3) VectorShuffle 3141 3141 0 1 2 + 3143:2599(i64vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3142 + 3144: 2582(ptr) AccessChain 34(data) 3139 2581 38 + 3145: 25(int64_t) CompositeExtract 3143 0 + Store 3144 3145 + 3146: 2582(ptr) AccessChain 34(data) 3139 2581 55 + 3147: 25(int64_t) CompositeExtract 3143 1 + Store 3146 3147 + 3148: 2582(ptr) AccessChain 34(data) 3139 2581 69 + 3149: 25(int64_t) CompositeExtract 3143 2 + Store 3148 3149 + 3150: 6(int) Load 8(invocation) + 3151: 2589(ptr) AccessChain 34(data) 73 2581 + 3152: 26(i64vec4) Load 3151 + 3153: 26(i64vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3152 + 3154: 2589(ptr) AccessChain 34(data) 3150 2581 + Store 3154 3153 + 3155: 6(int) Load 8(invocation) + 3156: 2582(ptr) AccessChain 34(data) 37 2581 38 + 3157: 25(int64_t) Load 3156 + 3158: 25(int64_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 3157 + 3159: 2582(ptr) AccessChain 34(data) 3155 2581 38 + Store 3159 3158 + 3160: 6(int) Load 8(invocation) + 3161: 2589(ptr) AccessChain 34(data) 46 2581 + 3162: 26(i64vec4) Load 3161 + 3163:2588(i64vec2) VectorShuffle 3162 3162 0 1 + 3164:2588(i64vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 3163 + 3165: 2582(ptr) AccessChain 34(data) 3160 2581 38 + 3166: 25(int64_t) CompositeExtract 3164 0 + Store 3165 3166 + 3167: 2582(ptr) AccessChain 34(data) 3160 2581 55 + 3168: 25(int64_t) CompositeExtract 3164 1 + Store 3167 3168 + 3169: 6(int) Load 8(invocation) + 3170: 2589(ptr) AccessChain 34(data) 59 2581 + 3171: 26(i64vec4) Load 3170 + 3172:2599(i64vec3) VectorShuffle 3171 3171 0 1 2 + 3173:2599(i64vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 3172 + 3174: 2582(ptr) AccessChain 34(data) 3169 2581 38 + 3175: 25(int64_t) CompositeExtract 3173 0 + Store 3174 3175 + 3176: 2582(ptr) AccessChain 34(data) 3169 2581 55 + 3177: 25(int64_t) CompositeExtract 3173 1 + Store 3176 3177 + 3178: 2582(ptr) AccessChain 34(data) 3169 2581 69 + 3179: 25(int64_t) CompositeExtract 3173 2 + Store 3178 3179 + 3180: 6(int) Load 8(invocation) + 3181: 2589(ptr) AccessChain 34(data) 73 2581 + 3182: 26(i64vec4) Load 3181 + 3183: 26(i64vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 3182 + 3184: 2589(ptr) AccessChain 34(data) 3180 2581 + Store 3184 3183 + 3185: 6(int) Load 8(invocation) + 3186: 2582(ptr) AccessChain 34(data) 37 2581 38 + 3187: 25(int64_t) Load 3186 + 3188: 25(int64_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 3187 + 3189: 2582(ptr) AccessChain 34(data) 3185 2581 38 + Store 3189 3188 + 3190: 6(int) Load 8(invocation) + 3191: 2589(ptr) AccessChain 34(data) 46 2581 + 3192: 26(i64vec4) Load 3191 + 3193:2588(i64vec2) VectorShuffle 3192 3192 0 1 + 3194:2588(i64vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 3193 + 3195: 2582(ptr) AccessChain 34(data) 3190 2581 38 + 3196: 25(int64_t) CompositeExtract 3194 0 + Store 3195 3196 + 3197: 2582(ptr) AccessChain 34(data) 3190 2581 55 + 3198: 25(int64_t) CompositeExtract 3194 1 + Store 3197 3198 + 3199: 6(int) Load 8(invocation) + 3200: 2589(ptr) AccessChain 34(data) 59 2581 + 3201: 26(i64vec4) Load 3200 + 3202:2599(i64vec3) VectorShuffle 3201 3201 0 1 2 + 3203:2599(i64vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 3202 + 3204: 2582(ptr) AccessChain 34(data) 3199 2581 38 + 3205: 25(int64_t) CompositeExtract 3203 0 + Store 3204 3205 + 3206: 2582(ptr) AccessChain 34(data) 3199 2581 55 + 3207: 25(int64_t) CompositeExtract 3203 1 + Store 3206 3207 + 3208: 2582(ptr) AccessChain 34(data) 3199 2581 69 + 3209: 25(int64_t) CompositeExtract 3203 2 + Store 3208 3209 + 3210: 6(int) Load 8(invocation) + 3211: 2589(ptr) AccessChain 34(data) 73 2581 + 3212: 26(i64vec4) Load 3211 + 3213: 26(i64vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 3212 + 3214: 2589(ptr) AccessChain 34(data) 3210 2581 + Store 3214 3213 + 3215: 6(int) Load 8(invocation) + 3218: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3219: 27(int64_t) Load 3218 + 3220: 27(int64_t) GroupNonUniformIAdd 42 Reduce 3219 + 3221: 3217(ptr) AccessChain 34(data) 3215 3216 38 + Store 3221 3220 + 3222: 6(int) Load 8(invocation) + 3225: 3224(ptr) AccessChain 34(data) 46 3216 + 3226: 28(i64vec4) Load 3225 + 3227:3223(i64vec2) VectorShuffle 3226 3226 0 1 + 3228:3223(i64vec2) GroupNonUniformIAdd 42 Reduce 3227 + 3229: 3217(ptr) AccessChain 34(data) 3222 3216 38 + 3230: 27(int64_t) CompositeExtract 3228 0 + Store 3229 3230 + 3231: 3217(ptr) AccessChain 34(data) 3222 3216 55 + 3232: 27(int64_t) CompositeExtract 3228 1 + Store 3231 3232 + 3233: 6(int) Load 8(invocation) + 3235: 3224(ptr) AccessChain 34(data) 59 3216 + 3236: 28(i64vec4) Load 3235 + 3237:3234(i64vec3) VectorShuffle 3236 3236 0 1 2 + 3238:3234(i64vec3) GroupNonUniformIAdd 42 Reduce 3237 + 3239: 3217(ptr) AccessChain 34(data) 3233 3216 38 + 3240: 27(int64_t) CompositeExtract 3238 0 + Store 3239 3240 + 3241: 3217(ptr) AccessChain 34(data) 3233 3216 55 + 3242: 27(int64_t) CompositeExtract 3238 1 + Store 3241 3242 + 3243: 3217(ptr) AccessChain 34(data) 3233 3216 69 + 3244: 27(int64_t) CompositeExtract 3238 2 + Store 3243 3244 3245: 6(int) Load 8(invocation) - 3246: 2802(ptr) AccessChain 34(data) 46 2794 + 3246: 3224(ptr) AccessChain 34(data) 73 3216 3247: 28(i64vec4) Load 3246 - 3248:2801(i64vec2) VectorShuffle 3247 3247 0 1 - 3249:2801(i64vec2) GroupNonUniformUMax 42 ExclusiveScan 3248 - 3250: 2802(ptr) AccessChain 34(data) 3245 2794 - 3251: 28(i64vec4) Load 3250 - 3252: 28(i64vec4) VectorShuffle 3251 3249 4 5 2 3 - Store 3250 3252 - 3253: 6(int) Load 8(invocation) - 3254: 2802(ptr) AccessChain 34(data) 57 2794 - 3255: 28(i64vec4) Load 3254 - 3256:2811(i64vec3) VectorShuffle 3255 3255 0 1 2 - 3257:2811(i64vec3) GroupNonUniformUMax 42 ExclusiveScan 3256 - 3258: 2802(ptr) AccessChain 34(data) 3253 2794 - 3259: 28(i64vec4) Load 3258 - 3260: 28(i64vec4) VectorShuffle 3259 3257 4 5 6 3 - Store 3258 3260 - 3261: 6(int) Load 8(invocation) - 3262: 2802(ptr) AccessChain 34(data) 67 2794 - 3263: 28(i64vec4) Load 3262 - 3264: 28(i64vec4) GroupNonUniformUMax 42 ExclusiveScan 3263 - 3265: 2802(ptr) AccessChain 34(data) 3261 2794 - Store 3265 3264 - 3266: 6(int) Load 8(invocation) - 3267: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3268: 27(int64_t) Load 3267 - 3269: 27(int64_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3268 - 3270: 2795(ptr) AccessChain 34(data) 3266 2794 38 - Store 3270 3269 - 3271: 6(int) Load 8(invocation) - 3272: 2802(ptr) AccessChain 34(data) 46 2794 - 3273: 28(i64vec4) Load 3272 - 3274:2801(i64vec2) VectorShuffle 3273 3273 0 1 - 3275:2801(i64vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3274 - 3276: 2802(ptr) AccessChain 34(data) 3271 2794 + 3248: 28(i64vec4) GroupNonUniformIAdd 42 Reduce 3247 + 3249: 3224(ptr) AccessChain 34(data) 3245 3216 + Store 3249 3248 + 3250: 6(int) Load 8(invocation) + 3251: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3252: 27(int64_t) Load 3251 + 3253: 27(int64_t) GroupNonUniformIMul 42 Reduce 3252 + 3254: 3217(ptr) AccessChain 34(data) 3250 3216 38 + Store 3254 3253 + 3255: 6(int) Load 8(invocation) + 3256: 3224(ptr) AccessChain 34(data) 46 3216 + 3257: 28(i64vec4) Load 3256 + 3258:3223(i64vec2) VectorShuffle 3257 3257 0 1 + 3259:3223(i64vec2) GroupNonUniformIMul 42 Reduce 3258 + 3260: 3217(ptr) AccessChain 34(data) 3255 3216 38 + 3261: 27(int64_t) CompositeExtract 3259 0 + Store 3260 3261 + 3262: 3217(ptr) AccessChain 34(data) 3255 3216 55 + 3263: 27(int64_t) CompositeExtract 3259 1 + Store 3262 3263 + 3264: 6(int) Load 8(invocation) + 3265: 3224(ptr) AccessChain 34(data) 59 3216 + 3266: 28(i64vec4) Load 3265 + 3267:3234(i64vec3) VectorShuffle 3266 3266 0 1 2 + 3268:3234(i64vec3) GroupNonUniformIMul 42 Reduce 3267 + 3269: 3217(ptr) AccessChain 34(data) 3264 3216 38 + 3270: 27(int64_t) CompositeExtract 3268 0 + Store 3269 3270 + 3271: 3217(ptr) AccessChain 34(data) 3264 3216 55 + 3272: 27(int64_t) CompositeExtract 3268 1 + Store 3271 3272 + 3273: 3217(ptr) AccessChain 34(data) 3264 3216 69 + 3274: 27(int64_t) CompositeExtract 3268 2 + Store 3273 3274 + 3275: 6(int) Load 8(invocation) + 3276: 3224(ptr) AccessChain 34(data) 73 3216 3277: 28(i64vec4) Load 3276 - 3278: 28(i64vec4) VectorShuffle 3277 3275 4 5 2 3 - Store 3276 3278 - 3279: 6(int) Load 8(invocation) - 3280: 2802(ptr) AccessChain 34(data) 57 2794 - 3281: 28(i64vec4) Load 3280 - 3282:2811(i64vec3) VectorShuffle 3281 3281 0 1 2 - 3283:2811(i64vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3282 - 3284: 2802(ptr) AccessChain 34(data) 3279 2794 - 3285: 28(i64vec4) Load 3284 - 3286: 28(i64vec4) VectorShuffle 3285 3283 4 5 6 3 - Store 3284 3286 - 3287: 6(int) Load 8(invocation) - 3288: 2802(ptr) AccessChain 34(data) 67 2794 - 3289: 28(i64vec4) Load 3288 - 3290: 28(i64vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3289 - 3291: 2802(ptr) AccessChain 34(data) 3287 2794 - Store 3291 3290 - 3292: 6(int) Load 8(invocation) - 3293: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3294: 27(int64_t) Load 3293 - 3295: 27(int64_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 3294 - 3296: 2795(ptr) AccessChain 34(data) 3292 2794 38 - Store 3296 3295 - 3297: 6(int) Load 8(invocation) - 3298: 2802(ptr) AccessChain 34(data) 46 2794 - 3299: 28(i64vec4) Load 3298 - 3300:2801(i64vec2) VectorShuffle 3299 3299 0 1 - 3301:2801(i64vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 3300 - 3302: 2802(ptr) AccessChain 34(data) 3297 2794 - 3303: 28(i64vec4) Load 3302 - 3304: 28(i64vec4) VectorShuffle 3303 3301 4 5 2 3 - Store 3302 3304 + 3278: 28(i64vec4) GroupNonUniformIMul 42 Reduce 3277 + 3279: 3224(ptr) AccessChain 34(data) 3275 3216 + Store 3279 3278 + 3280: 6(int) Load 8(invocation) + 3281: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3282: 27(int64_t) Load 3281 + 3283: 27(int64_t) GroupNonUniformUMin 42 Reduce 3282 + 3284: 3217(ptr) AccessChain 34(data) 3280 3216 38 + Store 3284 3283 + 3285: 6(int) Load 8(invocation) + 3286: 3224(ptr) AccessChain 34(data) 46 3216 + 3287: 28(i64vec4) Load 3286 + 3288:3223(i64vec2) VectorShuffle 3287 3287 0 1 + 3289:3223(i64vec2) GroupNonUniformUMin 42 Reduce 3288 + 3290: 3217(ptr) AccessChain 34(data) 3285 3216 38 + 3291: 27(int64_t) CompositeExtract 3289 0 + Store 3290 3291 + 3292: 3217(ptr) AccessChain 34(data) 3285 3216 55 + 3293: 27(int64_t) CompositeExtract 3289 1 + Store 3292 3293 + 3294: 6(int) Load 8(invocation) + 3295: 3224(ptr) AccessChain 34(data) 59 3216 + 3296: 28(i64vec4) Load 3295 + 3297:3234(i64vec3) VectorShuffle 3296 3296 0 1 2 + 3298:3234(i64vec3) GroupNonUniformUMin 42 Reduce 3297 + 3299: 3217(ptr) AccessChain 34(data) 3294 3216 38 + 3300: 27(int64_t) CompositeExtract 3298 0 + Store 3299 3300 + 3301: 3217(ptr) AccessChain 34(data) 3294 3216 55 + 3302: 27(int64_t) CompositeExtract 3298 1 + Store 3301 3302 + 3303: 3217(ptr) AccessChain 34(data) 3294 3216 69 + 3304: 27(int64_t) CompositeExtract 3298 2 + Store 3303 3304 3305: 6(int) Load 8(invocation) - 3306: 2802(ptr) AccessChain 34(data) 57 2794 + 3306: 3224(ptr) AccessChain 34(data) 73 3216 3307: 28(i64vec4) Load 3306 - 3308:2811(i64vec3) VectorShuffle 3307 3307 0 1 2 - 3309:2811(i64vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 3308 - 3310: 2802(ptr) AccessChain 34(data) 3305 2794 - 3311: 28(i64vec4) Load 3310 - 3312: 28(i64vec4) VectorShuffle 3311 3309 4 5 6 3 - Store 3310 3312 - 3313: 6(int) Load 8(invocation) - 3314: 2802(ptr) AccessChain 34(data) 67 2794 - 3315: 28(i64vec4) Load 3314 - 3316: 28(i64vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 3315 - 3317: 2802(ptr) AccessChain 34(data) 3313 2794 - Store 3317 3316 - 3318: 6(int) Load 8(invocation) - 3319: 2795(ptr) AccessChain 34(data) 37 2794 38 - 3320: 27(int64_t) Load 3319 - 3321: 27(int64_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 3320 - 3322: 2795(ptr) AccessChain 34(data) 3318 2794 38 - Store 3322 3321 - 3323: 6(int) Load 8(invocation) - 3324: 2802(ptr) AccessChain 34(data) 46 2794 - 3325: 28(i64vec4) Load 3324 - 3326:2801(i64vec2) VectorShuffle 3325 3325 0 1 - 3327:2801(i64vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 3326 - 3328: 2802(ptr) AccessChain 34(data) 3323 2794 - 3329: 28(i64vec4) Load 3328 - 3330: 28(i64vec4) VectorShuffle 3329 3327 4 5 2 3 - Store 3328 3330 - 3331: 6(int) Load 8(invocation) - 3332: 2802(ptr) AccessChain 34(data) 57 2794 - 3333: 28(i64vec4) Load 3332 - 3334:2811(i64vec3) VectorShuffle 3333 3333 0 1 2 - 3335:2811(i64vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 3334 - 3336: 2802(ptr) AccessChain 34(data) 3331 2794 + 3308: 28(i64vec4) GroupNonUniformUMin 42 Reduce 3307 + 3309: 3224(ptr) AccessChain 34(data) 3305 3216 + Store 3309 3308 + 3310: 6(int) Load 8(invocation) + 3311: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3312: 27(int64_t) Load 3311 + 3313: 27(int64_t) GroupNonUniformUMax 42 Reduce 3312 + 3314: 3217(ptr) AccessChain 34(data) 3310 3216 38 + Store 3314 3313 + 3315: 6(int) Load 8(invocation) + 3316: 3224(ptr) AccessChain 34(data) 46 3216 + 3317: 28(i64vec4) Load 3316 + 3318:3223(i64vec2) VectorShuffle 3317 3317 0 1 + 3319:3223(i64vec2) GroupNonUniformUMax 42 Reduce 3318 + 3320: 3217(ptr) AccessChain 34(data) 3315 3216 38 + 3321: 27(int64_t) CompositeExtract 3319 0 + Store 3320 3321 + 3322: 3217(ptr) AccessChain 34(data) 3315 3216 55 + 3323: 27(int64_t) CompositeExtract 3319 1 + Store 3322 3323 + 3324: 6(int) Load 8(invocation) + 3325: 3224(ptr) AccessChain 34(data) 59 3216 + 3326: 28(i64vec4) Load 3325 + 3327:3234(i64vec3) VectorShuffle 3326 3326 0 1 2 + 3328:3234(i64vec3) GroupNonUniformUMax 42 Reduce 3327 + 3329: 3217(ptr) AccessChain 34(data) 3324 3216 38 + 3330: 27(int64_t) CompositeExtract 3328 0 + Store 3329 3330 + 3331: 3217(ptr) AccessChain 34(data) 3324 3216 55 + 3332: 27(int64_t) CompositeExtract 3328 1 + Store 3331 3332 + 3333: 3217(ptr) AccessChain 34(data) 3324 3216 69 + 3334: 27(int64_t) CompositeExtract 3328 2 + Store 3333 3334 + 3335: 6(int) Load 8(invocation) + 3336: 3224(ptr) AccessChain 34(data) 73 3216 3337: 28(i64vec4) Load 3336 - 3338: 28(i64vec4) VectorShuffle 3337 3335 4 5 6 3 - Store 3336 3338 - 3339: 6(int) Load 8(invocation) - 3340: 2802(ptr) AccessChain 34(data) 67 2794 - 3341: 28(i64vec4) Load 3340 - 3342: 28(i64vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 3341 - 3343: 2802(ptr) AccessChain 34(data) 3339 2794 - Store 3343 3342 - 3344: 6(int) Load 8(invocation) - 3347: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3348:29(float16_t) Load 3347 - 3349:29(float16_t) GroupNonUniformFAdd 42 Reduce 3348 - 3350: 3346(ptr) AccessChain 34(data) 3344 3345 38 - Store 3350 3349 - 3351: 6(int) Load 8(invocation) - 3354: 3353(ptr) AccessChain 34(data) 46 3345 - 3355: 30(f16vec4) Load 3354 - 3356:3352(f16vec2) VectorShuffle 3355 3355 0 1 - 3357:3352(f16vec2) GroupNonUniformFAdd 42 Reduce 3356 - 3358: 3353(ptr) AccessChain 34(data) 3351 3345 - 3359: 30(f16vec4) Load 3358 - 3360: 30(f16vec4) VectorShuffle 3359 3357 4 5 2 3 - Store 3358 3360 - 3361: 6(int) Load 8(invocation) - 3363: 3353(ptr) AccessChain 34(data) 57 3345 - 3364: 30(f16vec4) Load 3363 - 3365:3362(f16vec3) VectorShuffle 3364 3364 0 1 2 - 3366:3362(f16vec3) GroupNonUniformFAdd 42 Reduce 3365 - 3367: 3353(ptr) AccessChain 34(data) 3361 3345 - 3368: 30(f16vec4) Load 3367 - 3369: 30(f16vec4) VectorShuffle 3368 3366 4 5 6 3 - Store 3367 3369 + 3338: 28(i64vec4) GroupNonUniformUMax 42 Reduce 3337 + 3339: 3224(ptr) AccessChain 34(data) 3335 3216 + Store 3339 3338 + 3340: 6(int) Load 8(invocation) + 3341: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3342: 27(int64_t) Load 3341 + 3343: 27(int64_t) GroupNonUniformBitwiseAnd 42 Reduce 3342 + 3344: 3217(ptr) AccessChain 34(data) 3340 3216 38 + Store 3344 3343 + 3345: 6(int) Load 8(invocation) + 3346: 3224(ptr) AccessChain 34(data) 46 3216 + 3347: 28(i64vec4) Load 3346 + 3348:3223(i64vec2) VectorShuffle 3347 3347 0 1 + 3349:3223(i64vec2) GroupNonUniformBitwiseAnd 42 Reduce 3348 + 3350: 3217(ptr) AccessChain 34(data) 3345 3216 38 + 3351: 27(int64_t) CompositeExtract 3349 0 + Store 3350 3351 + 3352: 3217(ptr) AccessChain 34(data) 3345 3216 55 + 3353: 27(int64_t) CompositeExtract 3349 1 + Store 3352 3353 + 3354: 6(int) Load 8(invocation) + 3355: 3224(ptr) AccessChain 34(data) 59 3216 + 3356: 28(i64vec4) Load 3355 + 3357:3234(i64vec3) VectorShuffle 3356 3356 0 1 2 + 3358:3234(i64vec3) GroupNonUniformBitwiseAnd 42 Reduce 3357 + 3359: 3217(ptr) AccessChain 34(data) 3354 3216 38 + 3360: 27(int64_t) CompositeExtract 3358 0 + Store 3359 3360 + 3361: 3217(ptr) AccessChain 34(data) 3354 3216 55 + 3362: 27(int64_t) CompositeExtract 3358 1 + Store 3361 3362 + 3363: 3217(ptr) AccessChain 34(data) 3354 3216 69 + 3364: 27(int64_t) CompositeExtract 3358 2 + Store 3363 3364 + 3365: 6(int) Load 8(invocation) + 3366: 3224(ptr) AccessChain 34(data) 73 3216 + 3367: 28(i64vec4) Load 3366 + 3368: 28(i64vec4) GroupNonUniformBitwiseAnd 42 Reduce 3367 + 3369: 3224(ptr) AccessChain 34(data) 3365 3216 + Store 3369 3368 3370: 6(int) Load 8(invocation) - 3371: 3353(ptr) AccessChain 34(data) 67 3345 - 3372: 30(f16vec4) Load 3371 - 3373: 30(f16vec4) GroupNonUniformFAdd 42 Reduce 3372 - 3374: 3353(ptr) AccessChain 34(data) 3370 3345 + 3371: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3372: 27(int64_t) Load 3371 + 3373: 27(int64_t) GroupNonUniformBitwiseOr 42 Reduce 3372 + 3374: 3217(ptr) AccessChain 34(data) 3370 3216 38 Store 3374 3373 3375: 6(int) Load 8(invocation) - 3376: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3377:29(float16_t) Load 3376 - 3378:29(float16_t) GroupNonUniformFMul 42 Reduce 3377 - 3379: 3346(ptr) AccessChain 34(data) 3375 3345 38 - Store 3379 3378 - 3380: 6(int) Load 8(invocation) - 3381: 3353(ptr) AccessChain 34(data) 46 3345 - 3382: 30(f16vec4) Load 3381 - 3383:3352(f16vec2) VectorShuffle 3382 3382 0 1 - 3384:3352(f16vec2) GroupNonUniformFMul 42 Reduce 3383 - 3385: 3353(ptr) AccessChain 34(data) 3380 3345 - 3386: 30(f16vec4) Load 3385 - 3387: 30(f16vec4) VectorShuffle 3386 3384 4 5 2 3 - Store 3385 3387 - 3388: 6(int) Load 8(invocation) - 3389: 3353(ptr) AccessChain 34(data) 57 3345 - 3390: 30(f16vec4) Load 3389 - 3391:3362(f16vec3) VectorShuffle 3390 3390 0 1 2 - 3392:3362(f16vec3) GroupNonUniformFMul 42 Reduce 3391 - 3393: 3353(ptr) AccessChain 34(data) 3388 3345 - 3394: 30(f16vec4) Load 3393 - 3395: 30(f16vec4) VectorShuffle 3394 3392 4 5 6 3 - Store 3393 3395 - 3396: 6(int) Load 8(invocation) - 3397: 3353(ptr) AccessChain 34(data) 67 3345 - 3398: 30(f16vec4) Load 3397 - 3399: 30(f16vec4) GroupNonUniformFMul 42 Reduce 3398 - 3400: 3353(ptr) AccessChain 34(data) 3396 3345 - Store 3400 3399 - 3401: 6(int) Load 8(invocation) - 3402: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3403:29(float16_t) Load 3402 - 3404:29(float16_t) GroupNonUniformFMin 42 Reduce 3403 - 3405: 3346(ptr) AccessChain 34(data) 3401 3345 38 - Store 3405 3404 - 3406: 6(int) Load 8(invocation) - 3407: 3353(ptr) AccessChain 34(data) 46 3345 - 3408: 30(f16vec4) Load 3407 - 3409:3352(f16vec2) VectorShuffle 3408 3408 0 1 - 3410:3352(f16vec2) GroupNonUniformFMin 42 Reduce 3409 - 3411: 3353(ptr) AccessChain 34(data) 3406 3345 - 3412: 30(f16vec4) Load 3411 - 3413: 30(f16vec4) VectorShuffle 3412 3410 4 5 2 3 - Store 3411 3413 + 3376: 3224(ptr) AccessChain 34(data) 46 3216 + 3377: 28(i64vec4) Load 3376 + 3378:3223(i64vec2) VectorShuffle 3377 3377 0 1 + 3379:3223(i64vec2) GroupNonUniformBitwiseOr 42 Reduce 3378 + 3380: 3217(ptr) AccessChain 34(data) 3375 3216 38 + 3381: 27(int64_t) CompositeExtract 3379 0 + Store 3380 3381 + 3382: 3217(ptr) AccessChain 34(data) 3375 3216 55 + 3383: 27(int64_t) CompositeExtract 3379 1 + Store 3382 3383 + 3384: 6(int) Load 8(invocation) + 3385: 3224(ptr) AccessChain 34(data) 59 3216 + 3386: 28(i64vec4) Load 3385 + 3387:3234(i64vec3) VectorShuffle 3386 3386 0 1 2 + 3388:3234(i64vec3) GroupNonUniformBitwiseOr 42 Reduce 3387 + 3389: 3217(ptr) AccessChain 34(data) 3384 3216 38 + 3390: 27(int64_t) CompositeExtract 3388 0 + Store 3389 3390 + 3391: 3217(ptr) AccessChain 34(data) 3384 3216 55 + 3392: 27(int64_t) CompositeExtract 3388 1 + Store 3391 3392 + 3393: 3217(ptr) AccessChain 34(data) 3384 3216 69 + 3394: 27(int64_t) CompositeExtract 3388 2 + Store 3393 3394 + 3395: 6(int) Load 8(invocation) + 3396: 3224(ptr) AccessChain 34(data) 73 3216 + 3397: 28(i64vec4) Load 3396 + 3398: 28(i64vec4) GroupNonUniformBitwiseOr 42 Reduce 3397 + 3399: 3224(ptr) AccessChain 34(data) 3395 3216 + Store 3399 3398 + 3400: 6(int) Load 8(invocation) + 3401: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3402: 27(int64_t) Load 3401 + 3403: 27(int64_t) GroupNonUniformBitwiseXor 42 Reduce 3402 + 3404: 3217(ptr) AccessChain 34(data) 3400 3216 38 + Store 3404 3403 + 3405: 6(int) Load 8(invocation) + 3406: 3224(ptr) AccessChain 34(data) 46 3216 + 3407: 28(i64vec4) Load 3406 + 3408:3223(i64vec2) VectorShuffle 3407 3407 0 1 + 3409:3223(i64vec2) GroupNonUniformBitwiseXor 42 Reduce 3408 + 3410: 3217(ptr) AccessChain 34(data) 3405 3216 38 + 3411: 27(int64_t) CompositeExtract 3409 0 + Store 3410 3411 + 3412: 3217(ptr) AccessChain 34(data) 3405 3216 55 + 3413: 27(int64_t) CompositeExtract 3409 1 + Store 3412 3413 3414: 6(int) Load 8(invocation) - 3415: 3353(ptr) AccessChain 34(data) 57 3345 - 3416: 30(f16vec4) Load 3415 - 3417:3362(f16vec3) VectorShuffle 3416 3416 0 1 2 - 3418:3362(f16vec3) GroupNonUniformFMin 42 Reduce 3417 - 3419: 3353(ptr) AccessChain 34(data) 3414 3345 - 3420: 30(f16vec4) Load 3419 - 3421: 30(f16vec4) VectorShuffle 3420 3418 4 5 6 3 - Store 3419 3421 - 3422: 6(int) Load 8(invocation) - 3423: 3353(ptr) AccessChain 34(data) 67 3345 - 3424: 30(f16vec4) Load 3423 - 3425: 30(f16vec4) GroupNonUniformFMin 42 Reduce 3424 - 3426: 3353(ptr) AccessChain 34(data) 3422 3345 - Store 3426 3425 - 3427: 6(int) Load 8(invocation) - 3428: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3429:29(float16_t) Load 3428 - 3430:29(float16_t) GroupNonUniformFMax 42 Reduce 3429 - 3431: 3346(ptr) AccessChain 34(data) 3427 3345 38 - Store 3431 3430 - 3432: 6(int) Load 8(invocation) - 3433: 3353(ptr) AccessChain 34(data) 46 3345 - 3434: 30(f16vec4) Load 3433 - 3435:3352(f16vec2) VectorShuffle 3434 3434 0 1 - 3436:3352(f16vec2) GroupNonUniformFMax 42 Reduce 3435 - 3437: 3353(ptr) AccessChain 34(data) 3432 3345 - 3438: 30(f16vec4) Load 3437 - 3439: 30(f16vec4) VectorShuffle 3438 3436 4 5 2 3 - Store 3437 3439 - 3440: 6(int) Load 8(invocation) - 3441: 3353(ptr) AccessChain 34(data) 57 3345 - 3442: 30(f16vec4) Load 3441 - 3443:3362(f16vec3) VectorShuffle 3442 3442 0 1 2 - 3444:3362(f16vec3) GroupNonUniformFMax 42 Reduce 3443 - 3445: 3353(ptr) AccessChain 34(data) 3440 3345 - 3446: 30(f16vec4) Load 3445 - 3447: 30(f16vec4) VectorShuffle 3446 3444 4 5 6 3 - Store 3445 3447 - 3448: 6(int) Load 8(invocation) - 3449: 3353(ptr) AccessChain 34(data) 67 3345 - 3450: 30(f16vec4) Load 3449 - 3451: 30(f16vec4) GroupNonUniformFMax 42 Reduce 3450 - 3452: 3353(ptr) AccessChain 34(data) 3448 3345 - Store 3452 3451 - 3453: 6(int) Load 8(invocation) - 3454: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3455:29(float16_t) Load 3454 - 3456:29(float16_t) GroupNonUniformFAdd 42 InclusiveScan 3455 - 3457: 3346(ptr) AccessChain 34(data) 3453 3345 38 - Store 3457 3456 - 3458: 6(int) Load 8(invocation) - 3459: 3353(ptr) AccessChain 34(data) 46 3345 - 3460: 30(f16vec4) Load 3459 - 3461:3352(f16vec2) VectorShuffle 3460 3460 0 1 - 3462:3352(f16vec2) GroupNonUniformFAdd 42 InclusiveScan 3461 - 3463: 3353(ptr) AccessChain 34(data) 3458 3345 - 3464: 30(f16vec4) Load 3463 - 3465: 30(f16vec4) VectorShuffle 3464 3462 4 5 2 3 - Store 3463 3465 - 3466: 6(int) Load 8(invocation) - 3467: 3353(ptr) AccessChain 34(data) 57 3345 - 3468: 30(f16vec4) Load 3467 - 3469:3362(f16vec3) VectorShuffle 3468 3468 0 1 2 - 3470:3362(f16vec3) GroupNonUniformFAdd 42 InclusiveScan 3469 - 3471: 3353(ptr) AccessChain 34(data) 3466 3345 - 3472: 30(f16vec4) Load 3471 - 3473: 30(f16vec4) VectorShuffle 3472 3470 4 5 6 3 - Store 3471 3473 + 3415: 3224(ptr) AccessChain 34(data) 59 3216 + 3416: 28(i64vec4) Load 3415 + 3417:3234(i64vec3) VectorShuffle 3416 3416 0 1 2 + 3418:3234(i64vec3) GroupNonUniformBitwiseXor 42 Reduce 3417 + 3419: 3217(ptr) AccessChain 34(data) 3414 3216 38 + 3420: 27(int64_t) CompositeExtract 3418 0 + Store 3419 3420 + 3421: 3217(ptr) AccessChain 34(data) 3414 3216 55 + 3422: 27(int64_t) CompositeExtract 3418 1 + Store 3421 3422 + 3423: 3217(ptr) AccessChain 34(data) 3414 3216 69 + 3424: 27(int64_t) CompositeExtract 3418 2 + Store 3423 3424 + 3425: 6(int) Load 8(invocation) + 3426: 3224(ptr) AccessChain 34(data) 73 3216 + 3427: 28(i64vec4) Load 3426 + 3428: 28(i64vec4) GroupNonUniformBitwiseXor 42 Reduce 3427 + 3429: 3224(ptr) AccessChain 34(data) 3425 3216 + Store 3429 3428 + 3430: 6(int) Load 8(invocation) + 3431: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3432: 27(int64_t) Load 3431 + 3433: 27(int64_t) GroupNonUniformIAdd 42 InclusiveScan 3432 + 3434: 3217(ptr) AccessChain 34(data) 3430 3216 38 + Store 3434 3433 + 3435: 6(int) Load 8(invocation) + 3436: 3224(ptr) AccessChain 34(data) 46 3216 + 3437: 28(i64vec4) Load 3436 + 3438:3223(i64vec2) VectorShuffle 3437 3437 0 1 + 3439:3223(i64vec2) GroupNonUniformIAdd 42 InclusiveScan 3438 + 3440: 3217(ptr) AccessChain 34(data) 3435 3216 38 + 3441: 27(int64_t) CompositeExtract 3439 0 + Store 3440 3441 + 3442: 3217(ptr) AccessChain 34(data) 3435 3216 55 + 3443: 27(int64_t) CompositeExtract 3439 1 + Store 3442 3443 + 3444: 6(int) Load 8(invocation) + 3445: 3224(ptr) AccessChain 34(data) 59 3216 + 3446: 28(i64vec4) Load 3445 + 3447:3234(i64vec3) VectorShuffle 3446 3446 0 1 2 + 3448:3234(i64vec3) GroupNonUniformIAdd 42 InclusiveScan 3447 + 3449: 3217(ptr) AccessChain 34(data) 3444 3216 38 + 3450: 27(int64_t) CompositeExtract 3448 0 + Store 3449 3450 + 3451: 3217(ptr) AccessChain 34(data) 3444 3216 55 + 3452: 27(int64_t) CompositeExtract 3448 1 + Store 3451 3452 + 3453: 3217(ptr) AccessChain 34(data) 3444 3216 69 + 3454: 27(int64_t) CompositeExtract 3448 2 + Store 3453 3454 + 3455: 6(int) Load 8(invocation) + 3456: 3224(ptr) AccessChain 34(data) 73 3216 + 3457: 28(i64vec4) Load 3456 + 3458: 28(i64vec4) GroupNonUniformIAdd 42 InclusiveScan 3457 + 3459: 3224(ptr) AccessChain 34(data) 3455 3216 + Store 3459 3458 + 3460: 6(int) Load 8(invocation) + 3461: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3462: 27(int64_t) Load 3461 + 3463: 27(int64_t) GroupNonUniformIMul 42 InclusiveScan 3462 + 3464: 3217(ptr) AccessChain 34(data) 3460 3216 38 + Store 3464 3463 + 3465: 6(int) Load 8(invocation) + 3466: 3224(ptr) AccessChain 34(data) 46 3216 + 3467: 28(i64vec4) Load 3466 + 3468:3223(i64vec2) VectorShuffle 3467 3467 0 1 + 3469:3223(i64vec2) GroupNonUniformIMul 42 InclusiveScan 3468 + 3470: 3217(ptr) AccessChain 34(data) 3465 3216 38 + 3471: 27(int64_t) CompositeExtract 3469 0 + Store 3470 3471 + 3472: 3217(ptr) AccessChain 34(data) 3465 3216 55 + 3473: 27(int64_t) CompositeExtract 3469 1 + Store 3472 3473 3474: 6(int) Load 8(invocation) - 3475: 3353(ptr) AccessChain 34(data) 67 3345 - 3476: 30(f16vec4) Load 3475 - 3477: 30(f16vec4) GroupNonUniformFAdd 42 InclusiveScan 3476 - 3478: 3353(ptr) AccessChain 34(data) 3474 3345 - Store 3478 3477 - 3479: 6(int) Load 8(invocation) - 3480: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3481:29(float16_t) Load 3480 - 3482:29(float16_t) GroupNonUniformFMul 42 InclusiveScan 3481 - 3483: 3346(ptr) AccessChain 34(data) 3479 3345 38 - Store 3483 3482 - 3484: 6(int) Load 8(invocation) - 3485: 3353(ptr) AccessChain 34(data) 46 3345 - 3486: 30(f16vec4) Load 3485 - 3487:3352(f16vec2) VectorShuffle 3486 3486 0 1 - 3488:3352(f16vec2) GroupNonUniformFMul 42 InclusiveScan 3487 - 3489: 3353(ptr) AccessChain 34(data) 3484 3345 - 3490: 30(f16vec4) Load 3489 - 3491: 30(f16vec4) VectorShuffle 3490 3488 4 5 2 3 - Store 3489 3491 - 3492: 6(int) Load 8(invocation) - 3493: 3353(ptr) AccessChain 34(data) 57 3345 - 3494: 30(f16vec4) Load 3493 - 3495:3362(f16vec3) VectorShuffle 3494 3494 0 1 2 - 3496:3362(f16vec3) GroupNonUniformFMul 42 InclusiveScan 3495 - 3497: 3353(ptr) AccessChain 34(data) 3492 3345 - 3498: 30(f16vec4) Load 3497 - 3499: 30(f16vec4) VectorShuffle 3498 3496 4 5 6 3 - Store 3497 3499 - 3500: 6(int) Load 8(invocation) - 3501: 3353(ptr) AccessChain 34(data) 67 3345 - 3502: 30(f16vec4) Load 3501 - 3503: 30(f16vec4) GroupNonUniformFMul 42 InclusiveScan 3502 - 3504: 3353(ptr) AccessChain 34(data) 3500 3345 - Store 3504 3503 - 3505: 6(int) Load 8(invocation) - 3506: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3507:29(float16_t) Load 3506 - 3508:29(float16_t) GroupNonUniformFMin 42 InclusiveScan 3507 - 3509: 3346(ptr) AccessChain 34(data) 3505 3345 38 - Store 3509 3508 - 3510: 6(int) Load 8(invocation) - 3511: 3353(ptr) AccessChain 34(data) 46 3345 - 3512: 30(f16vec4) Load 3511 - 3513:3352(f16vec2) VectorShuffle 3512 3512 0 1 - 3514:3352(f16vec2) GroupNonUniformFMin 42 InclusiveScan 3513 - 3515: 3353(ptr) AccessChain 34(data) 3510 3345 - 3516: 30(f16vec4) Load 3515 - 3517: 30(f16vec4) VectorShuffle 3516 3514 4 5 2 3 - Store 3515 3517 - 3518: 6(int) Load 8(invocation) - 3519: 3353(ptr) AccessChain 34(data) 57 3345 - 3520: 30(f16vec4) Load 3519 - 3521:3362(f16vec3) VectorShuffle 3520 3520 0 1 2 - 3522:3362(f16vec3) GroupNonUniformFMin 42 InclusiveScan 3521 - 3523: 3353(ptr) AccessChain 34(data) 3518 3345 - 3524: 30(f16vec4) Load 3523 - 3525: 30(f16vec4) VectorShuffle 3524 3522 4 5 6 3 - Store 3523 3525 - 3526: 6(int) Load 8(invocation) - 3527: 3353(ptr) AccessChain 34(data) 67 3345 - 3528: 30(f16vec4) Load 3527 - 3529: 30(f16vec4) GroupNonUniformFMin 42 InclusiveScan 3528 - 3530: 3353(ptr) AccessChain 34(data) 3526 3345 - Store 3530 3529 - 3531: 6(int) Load 8(invocation) - 3532: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3533:29(float16_t) Load 3532 - 3534:29(float16_t) GroupNonUniformFMax 42 InclusiveScan 3533 - 3535: 3346(ptr) AccessChain 34(data) 3531 3345 38 - Store 3535 3534 - 3536: 6(int) Load 8(invocation) - 3537: 3353(ptr) AccessChain 34(data) 46 3345 - 3538: 30(f16vec4) Load 3537 - 3539:3352(f16vec2) VectorShuffle 3538 3538 0 1 - 3540:3352(f16vec2) GroupNonUniformFMax 42 InclusiveScan 3539 - 3541: 3353(ptr) AccessChain 34(data) 3536 3345 - 3542: 30(f16vec4) Load 3541 - 3543: 30(f16vec4) VectorShuffle 3542 3540 4 5 2 3 - Store 3541 3543 - 3544: 6(int) Load 8(invocation) - 3545: 3353(ptr) AccessChain 34(data) 57 3345 - 3546: 30(f16vec4) Load 3545 - 3547:3362(f16vec3) VectorShuffle 3546 3546 0 1 2 - 3548:3362(f16vec3) GroupNonUniformFMax 42 InclusiveScan 3547 - 3549: 3353(ptr) AccessChain 34(data) 3544 3345 - 3550: 30(f16vec4) Load 3549 - 3551: 30(f16vec4) VectorShuffle 3550 3548 4 5 6 3 - Store 3549 3551 - 3552: 6(int) Load 8(invocation) - 3553: 3353(ptr) AccessChain 34(data) 67 3345 - 3554: 30(f16vec4) Load 3553 - 3555: 30(f16vec4) GroupNonUniformFMax 42 InclusiveScan 3554 - 3556: 3353(ptr) AccessChain 34(data) 3552 3345 - Store 3556 3555 - 3557: 6(int) Load 8(invocation) - 3558: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3559:29(float16_t) Load 3558 - 3560:29(float16_t) GroupNonUniformFAdd 42 ExclusiveScan 3559 - 3561: 3346(ptr) AccessChain 34(data) 3557 3345 38 - Store 3561 3560 - 3562: 6(int) Load 8(invocation) - 3563: 3353(ptr) AccessChain 34(data) 46 3345 - 3564: 30(f16vec4) Load 3563 - 3565:3352(f16vec2) VectorShuffle 3564 3564 0 1 - 3566:3352(f16vec2) GroupNonUniformFAdd 42 ExclusiveScan 3565 - 3567: 3353(ptr) AccessChain 34(data) 3562 3345 - 3568: 30(f16vec4) Load 3567 - 3569: 30(f16vec4) VectorShuffle 3568 3566 4 5 2 3 - Store 3567 3569 - 3570: 6(int) Load 8(invocation) - 3571: 3353(ptr) AccessChain 34(data) 57 3345 - 3572: 30(f16vec4) Load 3571 - 3573:3362(f16vec3) VectorShuffle 3572 3572 0 1 2 - 3574:3362(f16vec3) GroupNonUniformFAdd 42 ExclusiveScan 3573 - 3575: 3353(ptr) AccessChain 34(data) 3570 3345 - 3576: 30(f16vec4) Load 3575 - 3577: 30(f16vec4) VectorShuffle 3576 3574 4 5 6 3 - Store 3575 3577 - 3578: 6(int) Load 8(invocation) - 3579: 3353(ptr) AccessChain 34(data) 67 3345 - 3580: 30(f16vec4) Load 3579 - 3581: 30(f16vec4) GroupNonUniformFAdd 42 ExclusiveScan 3580 - 3582: 3353(ptr) AccessChain 34(data) 3578 3345 - Store 3582 3581 - 3583: 6(int) Load 8(invocation) - 3584: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3585:29(float16_t) Load 3584 - 3586:29(float16_t) GroupNonUniformFMul 42 ExclusiveScan 3585 - 3587: 3346(ptr) AccessChain 34(data) 3583 3345 38 - Store 3587 3586 - 3588: 6(int) Load 8(invocation) - 3589: 3353(ptr) AccessChain 34(data) 46 3345 - 3590: 30(f16vec4) Load 3589 - 3591:3352(f16vec2) VectorShuffle 3590 3590 0 1 - 3592:3352(f16vec2) GroupNonUniformFMul 42 ExclusiveScan 3591 - 3593: 3353(ptr) AccessChain 34(data) 3588 3345 - 3594: 30(f16vec4) Load 3593 - 3595: 30(f16vec4) VectorShuffle 3594 3592 4 5 2 3 - Store 3593 3595 - 3596: 6(int) Load 8(invocation) - 3597: 3353(ptr) AccessChain 34(data) 57 3345 - 3598: 30(f16vec4) Load 3597 - 3599:3362(f16vec3) VectorShuffle 3598 3598 0 1 2 - 3600:3362(f16vec3) GroupNonUniformFMul 42 ExclusiveScan 3599 - 3601: 3353(ptr) AccessChain 34(data) 3596 3345 - 3602: 30(f16vec4) Load 3601 - 3603: 30(f16vec4) VectorShuffle 3602 3600 4 5 6 3 - Store 3601 3603 - 3604: 6(int) Load 8(invocation) - 3605: 3353(ptr) AccessChain 34(data) 67 3345 - 3606: 30(f16vec4) Load 3605 - 3607: 30(f16vec4) GroupNonUniformFMul 42 ExclusiveScan 3606 - 3608: 3353(ptr) AccessChain 34(data) 3604 3345 - Store 3608 3607 - 3609: 6(int) Load 8(invocation) - 3610: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3611:29(float16_t) Load 3610 - 3612:29(float16_t) GroupNonUniformFMin 42 ExclusiveScan 3611 - 3613: 3346(ptr) AccessChain 34(data) 3609 3345 38 - Store 3613 3612 - 3614: 6(int) Load 8(invocation) - 3615: 3353(ptr) AccessChain 34(data) 46 3345 - 3616: 30(f16vec4) Load 3615 - 3617:3352(f16vec2) VectorShuffle 3616 3616 0 1 - 3618:3352(f16vec2) GroupNonUniformFMin 42 ExclusiveScan 3617 - 3619: 3353(ptr) AccessChain 34(data) 3614 3345 - 3620: 30(f16vec4) Load 3619 - 3621: 30(f16vec4) VectorShuffle 3620 3618 4 5 2 3 - Store 3619 3621 - 3622: 6(int) Load 8(invocation) - 3623: 3353(ptr) AccessChain 34(data) 57 3345 - 3624: 30(f16vec4) Load 3623 - 3625:3362(f16vec3) VectorShuffle 3624 3624 0 1 2 - 3626:3362(f16vec3) GroupNonUniformFMin 42 ExclusiveScan 3625 - 3627: 3353(ptr) AccessChain 34(data) 3622 3345 - 3628: 30(f16vec4) Load 3627 - 3629: 30(f16vec4) VectorShuffle 3628 3626 4 5 6 3 - Store 3627 3629 - 3630: 6(int) Load 8(invocation) - 3631: 3353(ptr) AccessChain 34(data) 67 3345 - 3632: 30(f16vec4) Load 3631 - 3633: 30(f16vec4) GroupNonUniformFMin 42 ExclusiveScan 3632 - 3634: 3353(ptr) AccessChain 34(data) 3630 3345 - Store 3634 3633 + 3475: 3224(ptr) AccessChain 34(data) 59 3216 + 3476: 28(i64vec4) Load 3475 + 3477:3234(i64vec3) VectorShuffle 3476 3476 0 1 2 + 3478:3234(i64vec3) GroupNonUniformIMul 42 InclusiveScan 3477 + 3479: 3217(ptr) AccessChain 34(data) 3474 3216 38 + 3480: 27(int64_t) CompositeExtract 3478 0 + Store 3479 3480 + 3481: 3217(ptr) AccessChain 34(data) 3474 3216 55 + 3482: 27(int64_t) CompositeExtract 3478 1 + Store 3481 3482 + 3483: 3217(ptr) AccessChain 34(data) 3474 3216 69 + 3484: 27(int64_t) CompositeExtract 3478 2 + Store 3483 3484 + 3485: 6(int) Load 8(invocation) + 3486: 3224(ptr) AccessChain 34(data) 73 3216 + 3487: 28(i64vec4) Load 3486 + 3488: 28(i64vec4) GroupNonUniformIMul 42 InclusiveScan 3487 + 3489: 3224(ptr) AccessChain 34(data) 3485 3216 + Store 3489 3488 + 3490: 6(int) Load 8(invocation) + 3491: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3492: 27(int64_t) Load 3491 + 3493: 27(int64_t) GroupNonUniformUMin 42 InclusiveScan 3492 + 3494: 3217(ptr) AccessChain 34(data) 3490 3216 38 + Store 3494 3493 + 3495: 6(int) Load 8(invocation) + 3496: 3224(ptr) AccessChain 34(data) 46 3216 + 3497: 28(i64vec4) Load 3496 + 3498:3223(i64vec2) VectorShuffle 3497 3497 0 1 + 3499:3223(i64vec2) GroupNonUniformUMin 42 InclusiveScan 3498 + 3500: 3217(ptr) AccessChain 34(data) 3495 3216 38 + 3501: 27(int64_t) CompositeExtract 3499 0 + Store 3500 3501 + 3502: 3217(ptr) AccessChain 34(data) 3495 3216 55 + 3503: 27(int64_t) CompositeExtract 3499 1 + Store 3502 3503 + 3504: 6(int) Load 8(invocation) + 3505: 3224(ptr) AccessChain 34(data) 59 3216 + 3506: 28(i64vec4) Load 3505 + 3507:3234(i64vec3) VectorShuffle 3506 3506 0 1 2 + 3508:3234(i64vec3) GroupNonUniformUMin 42 InclusiveScan 3507 + 3509: 3217(ptr) AccessChain 34(data) 3504 3216 38 + 3510: 27(int64_t) CompositeExtract 3508 0 + Store 3509 3510 + 3511: 3217(ptr) AccessChain 34(data) 3504 3216 55 + 3512: 27(int64_t) CompositeExtract 3508 1 + Store 3511 3512 + 3513: 3217(ptr) AccessChain 34(data) 3504 3216 69 + 3514: 27(int64_t) CompositeExtract 3508 2 + Store 3513 3514 + 3515: 6(int) Load 8(invocation) + 3516: 3224(ptr) AccessChain 34(data) 73 3216 + 3517: 28(i64vec4) Load 3516 + 3518: 28(i64vec4) GroupNonUniformUMin 42 InclusiveScan 3517 + 3519: 3224(ptr) AccessChain 34(data) 3515 3216 + Store 3519 3518 + 3520: 6(int) Load 8(invocation) + 3521: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3522: 27(int64_t) Load 3521 + 3523: 27(int64_t) GroupNonUniformUMax 42 InclusiveScan 3522 + 3524: 3217(ptr) AccessChain 34(data) 3520 3216 38 + Store 3524 3523 + 3525: 6(int) Load 8(invocation) + 3526: 3224(ptr) AccessChain 34(data) 46 3216 + 3527: 28(i64vec4) Load 3526 + 3528:3223(i64vec2) VectorShuffle 3527 3527 0 1 + 3529:3223(i64vec2) GroupNonUniformUMax 42 InclusiveScan 3528 + 3530: 3217(ptr) AccessChain 34(data) 3525 3216 38 + 3531: 27(int64_t) CompositeExtract 3529 0 + Store 3530 3531 + 3532: 3217(ptr) AccessChain 34(data) 3525 3216 55 + 3533: 27(int64_t) CompositeExtract 3529 1 + Store 3532 3533 + 3534: 6(int) Load 8(invocation) + 3535: 3224(ptr) AccessChain 34(data) 59 3216 + 3536: 28(i64vec4) Load 3535 + 3537:3234(i64vec3) VectorShuffle 3536 3536 0 1 2 + 3538:3234(i64vec3) GroupNonUniformUMax 42 InclusiveScan 3537 + 3539: 3217(ptr) AccessChain 34(data) 3534 3216 38 + 3540: 27(int64_t) CompositeExtract 3538 0 + Store 3539 3540 + 3541: 3217(ptr) AccessChain 34(data) 3534 3216 55 + 3542: 27(int64_t) CompositeExtract 3538 1 + Store 3541 3542 + 3543: 3217(ptr) AccessChain 34(data) 3534 3216 69 + 3544: 27(int64_t) CompositeExtract 3538 2 + Store 3543 3544 + 3545: 6(int) Load 8(invocation) + 3546: 3224(ptr) AccessChain 34(data) 73 3216 + 3547: 28(i64vec4) Load 3546 + 3548: 28(i64vec4) GroupNonUniformUMax 42 InclusiveScan 3547 + 3549: 3224(ptr) AccessChain 34(data) 3545 3216 + Store 3549 3548 + 3550: 6(int) Load 8(invocation) + 3551: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3552: 27(int64_t) Load 3551 + 3553: 27(int64_t) GroupNonUniformBitwiseAnd 42 InclusiveScan 3552 + 3554: 3217(ptr) AccessChain 34(data) 3550 3216 38 + Store 3554 3553 + 3555: 6(int) Load 8(invocation) + 3556: 3224(ptr) AccessChain 34(data) 46 3216 + 3557: 28(i64vec4) Load 3556 + 3558:3223(i64vec2) VectorShuffle 3557 3557 0 1 + 3559:3223(i64vec2) GroupNonUniformBitwiseAnd 42 InclusiveScan 3558 + 3560: 3217(ptr) AccessChain 34(data) 3555 3216 38 + 3561: 27(int64_t) CompositeExtract 3559 0 + Store 3560 3561 + 3562: 3217(ptr) AccessChain 34(data) 3555 3216 55 + 3563: 27(int64_t) CompositeExtract 3559 1 + Store 3562 3563 + 3564: 6(int) Load 8(invocation) + 3565: 3224(ptr) AccessChain 34(data) 59 3216 + 3566: 28(i64vec4) Load 3565 + 3567:3234(i64vec3) VectorShuffle 3566 3566 0 1 2 + 3568:3234(i64vec3) GroupNonUniformBitwiseAnd 42 InclusiveScan 3567 + 3569: 3217(ptr) AccessChain 34(data) 3564 3216 38 + 3570: 27(int64_t) CompositeExtract 3568 0 + Store 3569 3570 + 3571: 3217(ptr) AccessChain 34(data) 3564 3216 55 + 3572: 27(int64_t) CompositeExtract 3568 1 + Store 3571 3572 + 3573: 3217(ptr) AccessChain 34(data) 3564 3216 69 + 3574: 27(int64_t) CompositeExtract 3568 2 + Store 3573 3574 + 3575: 6(int) Load 8(invocation) + 3576: 3224(ptr) AccessChain 34(data) 73 3216 + 3577: 28(i64vec4) Load 3576 + 3578: 28(i64vec4) GroupNonUniformBitwiseAnd 42 InclusiveScan 3577 + 3579: 3224(ptr) AccessChain 34(data) 3575 3216 + Store 3579 3578 + 3580: 6(int) Load 8(invocation) + 3581: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3582: 27(int64_t) Load 3581 + 3583: 27(int64_t) GroupNonUniformBitwiseOr 42 InclusiveScan 3582 + 3584: 3217(ptr) AccessChain 34(data) 3580 3216 38 + Store 3584 3583 + 3585: 6(int) Load 8(invocation) + 3586: 3224(ptr) AccessChain 34(data) 46 3216 + 3587: 28(i64vec4) Load 3586 + 3588:3223(i64vec2) VectorShuffle 3587 3587 0 1 + 3589:3223(i64vec2) GroupNonUniformBitwiseOr 42 InclusiveScan 3588 + 3590: 3217(ptr) AccessChain 34(data) 3585 3216 38 + 3591: 27(int64_t) CompositeExtract 3589 0 + Store 3590 3591 + 3592: 3217(ptr) AccessChain 34(data) 3585 3216 55 + 3593: 27(int64_t) CompositeExtract 3589 1 + Store 3592 3593 + 3594: 6(int) Load 8(invocation) + 3595: 3224(ptr) AccessChain 34(data) 59 3216 + 3596: 28(i64vec4) Load 3595 + 3597:3234(i64vec3) VectorShuffle 3596 3596 0 1 2 + 3598:3234(i64vec3) GroupNonUniformBitwiseOr 42 InclusiveScan 3597 + 3599: 3217(ptr) AccessChain 34(data) 3594 3216 38 + 3600: 27(int64_t) CompositeExtract 3598 0 + Store 3599 3600 + 3601: 3217(ptr) AccessChain 34(data) 3594 3216 55 + 3602: 27(int64_t) CompositeExtract 3598 1 + Store 3601 3602 + 3603: 3217(ptr) AccessChain 34(data) 3594 3216 69 + 3604: 27(int64_t) CompositeExtract 3598 2 + Store 3603 3604 + 3605: 6(int) Load 8(invocation) + 3606: 3224(ptr) AccessChain 34(data) 73 3216 + 3607: 28(i64vec4) Load 3606 + 3608: 28(i64vec4) GroupNonUniformBitwiseOr 42 InclusiveScan 3607 + 3609: 3224(ptr) AccessChain 34(data) 3605 3216 + Store 3609 3608 + 3610: 6(int) Load 8(invocation) + 3611: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3612: 27(int64_t) Load 3611 + 3613: 27(int64_t) GroupNonUniformBitwiseXor 42 InclusiveScan 3612 + 3614: 3217(ptr) AccessChain 34(data) 3610 3216 38 + Store 3614 3613 + 3615: 6(int) Load 8(invocation) + 3616: 3224(ptr) AccessChain 34(data) 46 3216 + 3617: 28(i64vec4) Load 3616 + 3618:3223(i64vec2) VectorShuffle 3617 3617 0 1 + 3619:3223(i64vec2) GroupNonUniformBitwiseXor 42 InclusiveScan 3618 + 3620: 3217(ptr) AccessChain 34(data) 3615 3216 38 + 3621: 27(int64_t) CompositeExtract 3619 0 + Store 3620 3621 + 3622: 3217(ptr) AccessChain 34(data) 3615 3216 55 + 3623: 27(int64_t) CompositeExtract 3619 1 + Store 3622 3623 + 3624: 6(int) Load 8(invocation) + 3625: 3224(ptr) AccessChain 34(data) 59 3216 + 3626: 28(i64vec4) Load 3625 + 3627:3234(i64vec3) VectorShuffle 3626 3626 0 1 2 + 3628:3234(i64vec3) GroupNonUniformBitwiseXor 42 InclusiveScan 3627 + 3629: 3217(ptr) AccessChain 34(data) 3624 3216 38 + 3630: 27(int64_t) CompositeExtract 3628 0 + Store 3629 3630 + 3631: 3217(ptr) AccessChain 34(data) 3624 3216 55 + 3632: 27(int64_t) CompositeExtract 3628 1 + Store 3631 3632 + 3633: 3217(ptr) AccessChain 34(data) 3624 3216 69 + 3634: 27(int64_t) CompositeExtract 3628 2 + Store 3633 3634 3635: 6(int) Load 8(invocation) - 3636: 3346(ptr) AccessChain 34(data) 37 3345 38 - 3637:29(float16_t) Load 3636 - 3638:29(float16_t) GroupNonUniformFMax 42 ExclusiveScan 3637 - 3639: 3346(ptr) AccessChain 34(data) 3635 3345 38 + 3636: 3224(ptr) AccessChain 34(data) 73 3216 + 3637: 28(i64vec4) Load 3636 + 3638: 28(i64vec4) GroupNonUniformBitwiseXor 42 InclusiveScan 3637 + 3639: 3224(ptr) AccessChain 34(data) 3635 3216 Store 3639 3638 3640: 6(int) Load 8(invocation) - 3641: 3353(ptr) AccessChain 34(data) 46 3345 - 3642: 30(f16vec4) Load 3641 - 3643:3352(f16vec2) VectorShuffle 3642 3642 0 1 - 3644:3352(f16vec2) GroupNonUniformFMax 42 ExclusiveScan 3643 - 3645: 3353(ptr) AccessChain 34(data) 3640 3345 - 3646: 30(f16vec4) Load 3645 - 3647: 30(f16vec4) VectorShuffle 3646 3644 4 5 2 3 - Store 3645 3647 - 3648: 6(int) Load 8(invocation) - 3649: 3353(ptr) AccessChain 34(data) 57 3345 - 3650: 30(f16vec4) Load 3649 - 3651:3362(f16vec3) VectorShuffle 3650 3650 0 1 2 - 3652:3362(f16vec3) GroupNonUniformFMax 42 ExclusiveScan 3651 - 3653: 3353(ptr) AccessChain 34(data) 3648 3345 - 3654: 30(f16vec4) Load 3653 - 3655: 30(f16vec4) VectorShuffle 3654 3652 4 5 6 3 - Store 3653 3655 - 3656: 6(int) Load 8(invocation) - 3657: 3353(ptr) AccessChain 34(data) 67 3345 - 3658: 30(f16vec4) Load 3657 - 3659: 30(f16vec4) GroupNonUniformFMax 42 ExclusiveScan 3658 - 3660: 3353(ptr) AccessChain 34(data) 3656 3345 - Store 3660 3659 + 3641: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3642: 27(int64_t) Load 3641 + 3643: 27(int64_t) GroupNonUniformIAdd 42 ExclusiveScan 3642 + 3644: 3217(ptr) AccessChain 34(data) 3640 3216 38 + Store 3644 3643 + 3645: 6(int) Load 8(invocation) + 3646: 3224(ptr) AccessChain 34(data) 46 3216 + 3647: 28(i64vec4) Load 3646 + 3648:3223(i64vec2) VectorShuffle 3647 3647 0 1 + 3649:3223(i64vec2) GroupNonUniformIAdd 42 ExclusiveScan 3648 + 3650: 3217(ptr) AccessChain 34(data) 3645 3216 38 + 3651: 27(int64_t) CompositeExtract 3649 0 + Store 3650 3651 + 3652: 3217(ptr) AccessChain 34(data) 3645 3216 55 + 3653: 27(int64_t) CompositeExtract 3649 1 + Store 3652 3653 + 3654: 6(int) Load 8(invocation) + 3655: 3224(ptr) AccessChain 34(data) 59 3216 + 3656: 28(i64vec4) Load 3655 + 3657:3234(i64vec3) VectorShuffle 3656 3656 0 1 2 + 3658:3234(i64vec3) GroupNonUniformIAdd 42 ExclusiveScan 3657 + 3659: 3217(ptr) AccessChain 34(data) 3654 3216 38 + 3660: 27(int64_t) CompositeExtract 3658 0 + Store 3659 3660 + 3661: 3217(ptr) AccessChain 34(data) 3654 3216 55 + 3662: 27(int64_t) CompositeExtract 3658 1 + Store 3661 3662 + 3663: 3217(ptr) AccessChain 34(data) 3654 3216 69 + 3664: 27(int64_t) CompositeExtract 3658 2 + Store 3663 3664 + 3665: 6(int) Load 8(invocation) + 3666: 3224(ptr) AccessChain 34(data) 73 3216 + 3667: 28(i64vec4) Load 3666 + 3668: 28(i64vec4) GroupNonUniformIAdd 42 ExclusiveScan 3667 + 3669: 3224(ptr) AccessChain 34(data) 3665 3216 + Store 3669 3668 + 3670: 6(int) Load 8(invocation) + 3671: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3672: 27(int64_t) Load 3671 + 3673: 27(int64_t) GroupNonUniformIMul 42 ExclusiveScan 3672 + 3674: 3217(ptr) AccessChain 34(data) 3670 3216 38 + Store 3674 3673 + 3675: 6(int) Load 8(invocation) + 3676: 3224(ptr) AccessChain 34(data) 46 3216 + 3677: 28(i64vec4) Load 3676 + 3678:3223(i64vec2) VectorShuffle 3677 3677 0 1 + 3679:3223(i64vec2) GroupNonUniformIMul 42 ExclusiveScan 3678 + 3680: 3217(ptr) AccessChain 34(data) 3675 3216 38 + 3681: 27(int64_t) CompositeExtract 3679 0 + Store 3680 3681 + 3682: 3217(ptr) AccessChain 34(data) 3675 3216 55 + 3683: 27(int64_t) CompositeExtract 3679 1 + Store 3682 3683 + 3684: 6(int) Load 8(invocation) + 3685: 3224(ptr) AccessChain 34(data) 59 3216 + 3686: 28(i64vec4) Load 3685 + 3687:3234(i64vec3) VectorShuffle 3686 3686 0 1 2 + 3688:3234(i64vec3) GroupNonUniformIMul 42 ExclusiveScan 3687 + 3689: 3217(ptr) AccessChain 34(data) 3684 3216 38 + 3690: 27(int64_t) CompositeExtract 3688 0 + Store 3689 3690 + 3691: 3217(ptr) AccessChain 34(data) 3684 3216 55 + 3692: 27(int64_t) CompositeExtract 3688 1 + Store 3691 3692 + 3693: 3217(ptr) AccessChain 34(data) 3684 3216 69 + 3694: 27(int64_t) CompositeExtract 3688 2 + Store 3693 3694 + 3695: 6(int) Load 8(invocation) + 3696: 3224(ptr) AccessChain 34(data) 73 3216 + 3697: 28(i64vec4) Load 3696 + 3698: 28(i64vec4) GroupNonUniformIMul 42 ExclusiveScan 3697 + 3699: 3224(ptr) AccessChain 34(data) 3695 3216 + Store 3699 3698 + 3700: 6(int) Load 8(invocation) + 3701: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3702: 27(int64_t) Load 3701 + 3703: 27(int64_t) GroupNonUniformUMin 42 ExclusiveScan 3702 + 3704: 3217(ptr) AccessChain 34(data) 3700 3216 38 + Store 3704 3703 + 3705: 6(int) Load 8(invocation) + 3706: 3224(ptr) AccessChain 34(data) 46 3216 + 3707: 28(i64vec4) Load 3706 + 3708:3223(i64vec2) VectorShuffle 3707 3707 0 1 + 3709:3223(i64vec2) GroupNonUniformUMin 42 ExclusiveScan 3708 + 3710: 3217(ptr) AccessChain 34(data) 3705 3216 38 + 3711: 27(int64_t) CompositeExtract 3709 0 + Store 3710 3711 + 3712: 3217(ptr) AccessChain 34(data) 3705 3216 55 + 3713: 27(int64_t) CompositeExtract 3709 1 + Store 3712 3713 + 3714: 6(int) Load 8(invocation) + 3715: 3224(ptr) AccessChain 34(data) 59 3216 + 3716: 28(i64vec4) Load 3715 + 3717:3234(i64vec3) VectorShuffle 3716 3716 0 1 2 + 3718:3234(i64vec3) GroupNonUniformUMin 42 ExclusiveScan 3717 + 3719: 3217(ptr) AccessChain 34(data) 3714 3216 38 + 3720: 27(int64_t) CompositeExtract 3718 0 + Store 3719 3720 + 3721: 3217(ptr) AccessChain 34(data) 3714 3216 55 + 3722: 27(int64_t) CompositeExtract 3718 1 + Store 3721 3722 + 3723: 3217(ptr) AccessChain 34(data) 3714 3216 69 + 3724: 27(int64_t) CompositeExtract 3718 2 + Store 3723 3724 + 3725: 6(int) Load 8(invocation) + 3726: 3224(ptr) AccessChain 34(data) 73 3216 + 3727: 28(i64vec4) Load 3726 + 3728: 28(i64vec4) GroupNonUniformUMin 42 ExclusiveScan 3727 + 3729: 3224(ptr) AccessChain 34(data) 3725 3216 + Store 3729 3728 + 3730: 6(int) Load 8(invocation) + 3731: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3732: 27(int64_t) Load 3731 + 3733: 27(int64_t) GroupNonUniformUMax 42 ExclusiveScan 3732 + 3734: 3217(ptr) AccessChain 34(data) 3730 3216 38 + Store 3734 3733 + 3735: 6(int) Load 8(invocation) + 3736: 3224(ptr) AccessChain 34(data) 46 3216 + 3737: 28(i64vec4) Load 3736 + 3738:3223(i64vec2) VectorShuffle 3737 3737 0 1 + 3739:3223(i64vec2) GroupNonUniformUMax 42 ExclusiveScan 3738 + 3740: 3217(ptr) AccessChain 34(data) 3735 3216 38 + 3741: 27(int64_t) CompositeExtract 3739 0 + Store 3740 3741 + 3742: 3217(ptr) AccessChain 34(data) 3735 3216 55 + 3743: 27(int64_t) CompositeExtract 3739 1 + Store 3742 3743 + 3744: 6(int) Load 8(invocation) + 3745: 3224(ptr) AccessChain 34(data) 59 3216 + 3746: 28(i64vec4) Load 3745 + 3747:3234(i64vec3) VectorShuffle 3746 3746 0 1 2 + 3748:3234(i64vec3) GroupNonUniformUMax 42 ExclusiveScan 3747 + 3749: 3217(ptr) AccessChain 34(data) 3744 3216 38 + 3750: 27(int64_t) CompositeExtract 3748 0 + Store 3749 3750 + 3751: 3217(ptr) AccessChain 34(data) 3744 3216 55 + 3752: 27(int64_t) CompositeExtract 3748 1 + Store 3751 3752 + 3753: 3217(ptr) AccessChain 34(data) 3744 3216 69 + 3754: 27(int64_t) CompositeExtract 3748 2 + Store 3753 3754 + 3755: 6(int) Load 8(invocation) + 3756: 3224(ptr) AccessChain 34(data) 73 3216 + 3757: 28(i64vec4) Load 3756 + 3758: 28(i64vec4) GroupNonUniformUMax 42 ExclusiveScan 3757 + 3759: 3224(ptr) AccessChain 34(data) 3755 3216 + Store 3759 3758 + 3760: 6(int) Load 8(invocation) + 3761: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3762: 27(int64_t) Load 3761 + 3763: 27(int64_t) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3762 + 3764: 3217(ptr) AccessChain 34(data) 3760 3216 38 + Store 3764 3763 + 3765: 6(int) Load 8(invocation) + 3766: 3224(ptr) AccessChain 34(data) 46 3216 + 3767: 28(i64vec4) Load 3766 + 3768:3223(i64vec2) VectorShuffle 3767 3767 0 1 + 3769:3223(i64vec2) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3768 + 3770: 3217(ptr) AccessChain 34(data) 3765 3216 38 + 3771: 27(int64_t) CompositeExtract 3769 0 + Store 3770 3771 + 3772: 3217(ptr) AccessChain 34(data) 3765 3216 55 + 3773: 27(int64_t) CompositeExtract 3769 1 + Store 3772 3773 + 3774: 6(int) Load 8(invocation) + 3775: 3224(ptr) AccessChain 34(data) 59 3216 + 3776: 28(i64vec4) Load 3775 + 3777:3234(i64vec3) VectorShuffle 3776 3776 0 1 2 + 3778:3234(i64vec3) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3777 + 3779: 3217(ptr) AccessChain 34(data) 3774 3216 38 + 3780: 27(int64_t) CompositeExtract 3778 0 + Store 3779 3780 + 3781: 3217(ptr) AccessChain 34(data) 3774 3216 55 + 3782: 27(int64_t) CompositeExtract 3778 1 + Store 3781 3782 + 3783: 3217(ptr) AccessChain 34(data) 3774 3216 69 + 3784: 27(int64_t) CompositeExtract 3778 2 + Store 3783 3784 + 3785: 6(int) Load 8(invocation) + 3786: 3224(ptr) AccessChain 34(data) 73 3216 + 3787: 28(i64vec4) Load 3786 + 3788: 28(i64vec4) GroupNonUniformBitwiseAnd 42 ExclusiveScan 3787 + 3789: 3224(ptr) AccessChain 34(data) 3785 3216 + Store 3789 3788 + 3790: 6(int) Load 8(invocation) + 3791: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3792: 27(int64_t) Load 3791 + 3793: 27(int64_t) GroupNonUniformBitwiseOr 42 ExclusiveScan 3792 + 3794: 3217(ptr) AccessChain 34(data) 3790 3216 38 + Store 3794 3793 + 3795: 6(int) Load 8(invocation) + 3796: 3224(ptr) AccessChain 34(data) 46 3216 + 3797: 28(i64vec4) Load 3796 + 3798:3223(i64vec2) VectorShuffle 3797 3797 0 1 + 3799:3223(i64vec2) GroupNonUniformBitwiseOr 42 ExclusiveScan 3798 + 3800: 3217(ptr) AccessChain 34(data) 3795 3216 38 + 3801: 27(int64_t) CompositeExtract 3799 0 + Store 3800 3801 + 3802: 3217(ptr) AccessChain 34(data) 3795 3216 55 + 3803: 27(int64_t) CompositeExtract 3799 1 + Store 3802 3803 + 3804: 6(int) Load 8(invocation) + 3805: 3224(ptr) AccessChain 34(data) 59 3216 + 3806: 28(i64vec4) Load 3805 + 3807:3234(i64vec3) VectorShuffle 3806 3806 0 1 2 + 3808:3234(i64vec3) GroupNonUniformBitwiseOr 42 ExclusiveScan 3807 + 3809: 3217(ptr) AccessChain 34(data) 3804 3216 38 + 3810: 27(int64_t) CompositeExtract 3808 0 + Store 3809 3810 + 3811: 3217(ptr) AccessChain 34(data) 3804 3216 55 + 3812: 27(int64_t) CompositeExtract 3808 1 + Store 3811 3812 + 3813: 3217(ptr) AccessChain 34(data) 3804 3216 69 + 3814: 27(int64_t) CompositeExtract 3808 2 + Store 3813 3814 + 3815: 6(int) Load 8(invocation) + 3816: 3224(ptr) AccessChain 34(data) 73 3216 + 3817: 28(i64vec4) Load 3816 + 3818: 28(i64vec4) GroupNonUniformBitwiseOr 42 ExclusiveScan 3817 + 3819: 3224(ptr) AccessChain 34(data) 3815 3216 + Store 3819 3818 + 3820: 6(int) Load 8(invocation) + 3821: 3217(ptr) AccessChain 34(data) 37 3216 38 + 3822: 27(int64_t) Load 3821 + 3823: 27(int64_t) GroupNonUniformBitwiseXor 42 ExclusiveScan 3822 + 3824: 3217(ptr) AccessChain 34(data) 3820 3216 38 + Store 3824 3823 + 3825: 6(int) Load 8(invocation) + 3826: 3224(ptr) AccessChain 34(data) 46 3216 + 3827: 28(i64vec4) Load 3826 + 3828:3223(i64vec2) VectorShuffle 3827 3827 0 1 + 3829:3223(i64vec2) GroupNonUniformBitwiseXor 42 ExclusiveScan 3828 + 3830: 3217(ptr) AccessChain 34(data) 3825 3216 38 + 3831: 27(int64_t) CompositeExtract 3829 0 + Store 3830 3831 + 3832: 3217(ptr) AccessChain 34(data) 3825 3216 55 + 3833: 27(int64_t) CompositeExtract 3829 1 + Store 3832 3833 + 3834: 6(int) Load 8(invocation) + 3835: 3224(ptr) AccessChain 34(data) 59 3216 + 3836: 28(i64vec4) Load 3835 + 3837:3234(i64vec3) VectorShuffle 3836 3836 0 1 2 + 3838:3234(i64vec3) GroupNonUniformBitwiseXor 42 ExclusiveScan 3837 + 3839: 3217(ptr) AccessChain 34(data) 3834 3216 38 + 3840: 27(int64_t) CompositeExtract 3838 0 + Store 3839 3840 + 3841: 3217(ptr) AccessChain 34(data) 3834 3216 55 + 3842: 27(int64_t) CompositeExtract 3838 1 + Store 3841 3842 + 3843: 3217(ptr) AccessChain 34(data) 3834 3216 69 + 3844: 27(int64_t) CompositeExtract 3838 2 + Store 3843 3844 + 3845: 6(int) Load 8(invocation) + 3846: 3224(ptr) AccessChain 34(data) 73 3216 + 3847: 28(i64vec4) Load 3846 + 3848: 28(i64vec4) GroupNonUniformBitwiseXor 42 ExclusiveScan 3847 + 3849: 3224(ptr) AccessChain 34(data) 3845 3216 + Store 3849 3848 + 3850: 6(int) Load 8(invocation) + 3853: 3852(ptr) AccessChain 34(data) 37 3851 38 + 3854:29(float16_t) Load 3853 + 3855:29(float16_t) GroupNonUniformFAdd 42 Reduce 3854 + 3856: 3852(ptr) AccessChain 34(data) 3850 3851 38 + Store 3856 3855 + 3857: 6(int) Load 8(invocation) + 3860: 3859(ptr) AccessChain 34(data) 46 3851 + 3861: 30(f16vec4) Load 3860 + 3862:3858(f16vec2) VectorShuffle 3861 3861 0 1 + 3863:3858(f16vec2) GroupNonUniformFAdd 42 Reduce 3862 + 3864: 3852(ptr) AccessChain 34(data) 3857 3851 38 + 3865:29(float16_t) CompositeExtract 3863 0 + Store 3864 3865 + 3866: 3852(ptr) AccessChain 34(data) 3857 3851 55 + 3867:29(float16_t) CompositeExtract 3863 1 + Store 3866 3867 + 3868: 6(int) Load 8(invocation) + 3870: 3859(ptr) AccessChain 34(data) 59 3851 + 3871: 30(f16vec4) Load 3870 + 3872:3869(f16vec3) VectorShuffle 3871 3871 0 1 2 + 3873:3869(f16vec3) GroupNonUniformFAdd 42 Reduce 3872 + 3874: 3852(ptr) AccessChain 34(data) 3868 3851 38 + 3875:29(float16_t) CompositeExtract 3873 0 + Store 3874 3875 + 3876: 3852(ptr) AccessChain 34(data) 3868 3851 55 + 3877:29(float16_t) CompositeExtract 3873 1 + Store 3876 3877 + 3878: 3852(ptr) AccessChain 34(data) 3868 3851 69 + 3879:29(float16_t) CompositeExtract 3873 2 + Store 3878 3879 + 3880: 6(int) Load 8(invocation) + 3881: 3859(ptr) AccessChain 34(data) 73 3851 + 3882: 30(f16vec4) Load 3881 + 3883: 30(f16vec4) GroupNonUniformFAdd 42 Reduce 3882 + 3884: 3859(ptr) AccessChain 34(data) 3880 3851 + Store 3884 3883 + 3885: 6(int) Load 8(invocation) + 3886: 3852(ptr) AccessChain 34(data) 37 3851 38 + 3887:29(float16_t) Load 3886 + 3888:29(float16_t) GroupNonUniformFMul 42 Reduce 3887 + 3889: 3852(ptr) AccessChain 34(data) 3885 3851 38 + Store 3889 3888 + 3890: 6(int) Load 8(invocation) + 3891: 3859(ptr) AccessChain 34(data) 46 3851 + 3892: 30(f16vec4) Load 3891 + 3893:3858(f16vec2) VectorShuffle 3892 3892 0 1 + 3894:3858(f16vec2) GroupNonUniformFMul 42 Reduce 3893 + 3895: 3852(ptr) AccessChain 34(data) 3890 3851 38 + 3896:29(float16_t) CompositeExtract 3894 0 + Store 3895 3896 + 3897: 3852(ptr) AccessChain 34(data) 3890 3851 55 + 3898:29(float16_t) CompositeExtract 3894 1 + Store 3897 3898 + 3899: 6(int) Load 8(invocation) + 3900: 3859(ptr) AccessChain 34(data) 59 3851 + 3901: 30(f16vec4) Load 3900 + 3902:3869(f16vec3) VectorShuffle 3901 3901 0 1 2 + 3903:3869(f16vec3) GroupNonUniformFMul 42 Reduce 3902 + 3904: 3852(ptr) AccessChain 34(data) 3899 3851 38 + 3905:29(float16_t) CompositeExtract 3903 0 + Store 3904 3905 + 3906: 3852(ptr) AccessChain 34(data) 3899 3851 55 + 3907:29(float16_t) CompositeExtract 3903 1 + Store 3906 3907 + 3908: 3852(ptr) AccessChain 34(data) 3899 3851 69 + 3909:29(float16_t) CompositeExtract 3903 2 + Store 3908 3909 + 3910: 6(int) Load 8(invocation) + 3911: 3859(ptr) AccessChain 34(data) 73 3851 + 3912: 30(f16vec4) Load 3911 + 3913: 30(f16vec4) GroupNonUniformFMul 42 Reduce 3912 + 3914: 3859(ptr) AccessChain 34(data) 3910 3851 + Store 3914 3913 + 3915: 6(int) Load 8(invocation) + 3916: 3852(ptr) AccessChain 34(data) 37 3851 38 + 3917:29(float16_t) Load 3916 + 3918:29(float16_t) GroupNonUniformFMin 42 Reduce 3917 + 3919: 3852(ptr) AccessChain 34(data) 3915 3851 38 + Store 3919 3918 + 3920: 6(int) Load 8(invocation) + 3921: 3859(ptr) AccessChain 34(data) 46 3851 + 3922: 30(f16vec4) Load 3921 + 3923:3858(f16vec2) VectorShuffle 3922 3922 0 1 + 3924:3858(f16vec2) GroupNonUniformFMin 42 Reduce 3923 + 3925: 3852(ptr) AccessChain 34(data) 3920 3851 38 + 3926:29(float16_t) CompositeExtract 3924 0 + Store 3925 3926 + 3927: 3852(ptr) AccessChain 34(data) 3920 3851 55 + 3928:29(float16_t) CompositeExtract 3924 1 + Store 3927 3928 + 3929: 6(int) Load 8(invocation) + 3930: 3859(ptr) AccessChain 34(data) 59 3851 + 3931: 30(f16vec4) Load 3930 + 3932:3869(f16vec3) VectorShuffle 3931 3931 0 1 2 + 3933:3869(f16vec3) GroupNonUniformFMin 42 Reduce 3932 + 3934: 3852(ptr) AccessChain 34(data) 3929 3851 38 + 3935:29(float16_t) CompositeExtract 3933 0 + Store 3934 3935 + 3936: 3852(ptr) AccessChain 34(data) 3929 3851 55 + 3937:29(float16_t) CompositeExtract 3933 1 + Store 3936 3937 + 3938: 3852(ptr) AccessChain 34(data) 3929 3851 69 + 3939:29(float16_t) CompositeExtract 3933 2 + Store 3938 3939 + 3940: 6(int) Load 8(invocation) + 3941: 3859(ptr) AccessChain 34(data) 73 3851 + 3942: 30(f16vec4) Load 3941 + 3943: 30(f16vec4) GroupNonUniformFMin 42 Reduce 3942 + 3944: 3859(ptr) AccessChain 34(data) 3940 3851 + Store 3944 3943 + 3945: 6(int) Load 8(invocation) + 3946: 3852(ptr) AccessChain 34(data) 37 3851 38 + 3947:29(float16_t) Load 3946 + 3948:29(float16_t) GroupNonUniformFMax 42 Reduce 3947 + 3949: 3852(ptr) AccessChain 34(data) 3945 3851 38 + Store 3949 3948 + 3950: 6(int) Load 8(invocation) + 3951: 3859(ptr) AccessChain 34(data) 46 3851 + 3952: 30(f16vec4) Load 3951 + 3953:3858(f16vec2) VectorShuffle 3952 3952 0 1 + 3954:3858(f16vec2) GroupNonUniformFMax 42 Reduce 3953 + 3955: 3852(ptr) AccessChain 34(data) 3950 3851 38 + 3956:29(float16_t) CompositeExtract 3954 0 + Store 3955 3956 + 3957: 3852(ptr) AccessChain 34(data) 3950 3851 55 + 3958:29(float16_t) CompositeExtract 3954 1 + Store 3957 3958 + 3959: 6(int) Load 8(invocation) + 3960: 3859(ptr) AccessChain 34(data) 59 3851 + 3961: 30(f16vec4) Load 3960 + 3962:3869(f16vec3) VectorShuffle 3961 3961 0 1 2 + 3963:3869(f16vec3) GroupNonUniformFMax 42 Reduce 3962 + 3964: 3852(ptr) AccessChain 34(data) 3959 3851 38 + 3965:29(float16_t) CompositeExtract 3963 0 + Store 3964 3965 + 3966: 3852(ptr) AccessChain 34(data) 3959 3851 55 + 3967:29(float16_t) CompositeExtract 3963 1 + Store 3966 3967 + 3968: 3852(ptr) AccessChain 34(data) 3959 3851 69 + 3969:29(float16_t) CompositeExtract 3963 2 + Store 3968 3969 + 3970: 6(int) Load 8(invocation) + 3971: 3859(ptr) AccessChain 34(data) 73 3851 + 3972: 30(f16vec4) Load 3971 + 3973: 30(f16vec4) GroupNonUniformFMax 42 Reduce 3972 + 3974: 3859(ptr) AccessChain 34(data) 3970 3851 + Store 3974 3973 + 3975: 6(int) Load 8(invocation) + 3976: 3852(ptr) AccessChain 34(data) 37 3851 38 + 3977:29(float16_t) Load 3976 + 3978:29(float16_t) GroupNonUniformFAdd 42 InclusiveScan 3977 + 3979: 3852(ptr) AccessChain 34(data) 3975 3851 38 + Store 3979 3978 + 3980: 6(int) Load 8(invocation) + 3981: 3859(ptr) AccessChain 34(data) 46 3851 + 3982: 30(f16vec4) Load 3981 + 3983:3858(f16vec2) VectorShuffle 3982 3982 0 1 + 3984:3858(f16vec2) GroupNonUniformFAdd 42 InclusiveScan 3983 + 3985: 3852(ptr) AccessChain 34(data) 3980 3851 38 + 3986:29(float16_t) CompositeExtract 3984 0 + Store 3985 3986 + 3987: 3852(ptr) AccessChain 34(data) 3980 3851 55 + 3988:29(float16_t) CompositeExtract 3984 1 + Store 3987 3988 + 3989: 6(int) Load 8(invocation) + 3990: 3859(ptr) AccessChain 34(data) 59 3851 + 3991: 30(f16vec4) Load 3990 + 3992:3869(f16vec3) VectorShuffle 3991 3991 0 1 2 + 3993:3869(f16vec3) GroupNonUniformFAdd 42 InclusiveScan 3992 + 3994: 3852(ptr) AccessChain 34(data) 3989 3851 38 + 3995:29(float16_t) CompositeExtract 3993 0 + Store 3994 3995 + 3996: 3852(ptr) AccessChain 34(data) 3989 3851 55 + 3997:29(float16_t) CompositeExtract 3993 1 + Store 3996 3997 + 3998: 3852(ptr) AccessChain 34(data) 3989 3851 69 + 3999:29(float16_t) CompositeExtract 3993 2 + Store 3998 3999 + 4000: 6(int) Load 8(invocation) + 4001: 3859(ptr) AccessChain 34(data) 73 3851 + 4002: 30(f16vec4) Load 4001 + 4003: 30(f16vec4) GroupNonUniformFAdd 42 InclusiveScan 4002 + 4004: 3859(ptr) AccessChain 34(data) 4000 3851 + Store 4004 4003 + 4005: 6(int) Load 8(invocation) + 4006: 3852(ptr) AccessChain 34(data) 37 3851 38 + 4007:29(float16_t) Load 4006 + 4008:29(float16_t) GroupNonUniformFMul 42 InclusiveScan 4007 + 4009: 3852(ptr) AccessChain 34(data) 4005 3851 38 + Store 4009 4008 + 4010: 6(int) Load 8(invocation) + 4011: 3859(ptr) AccessChain 34(data) 46 3851 + 4012: 30(f16vec4) Load 4011 + 4013:3858(f16vec2) VectorShuffle 4012 4012 0 1 + 4014:3858(f16vec2) GroupNonUniformFMul 42 InclusiveScan 4013 + 4015: 3852(ptr) AccessChain 34(data) 4010 3851 38 + 4016:29(float16_t) CompositeExtract 4014 0 + Store 4015 4016 + 4017: 3852(ptr) AccessChain 34(data) 4010 3851 55 + 4018:29(float16_t) CompositeExtract 4014 1 + Store 4017 4018 + 4019: 6(int) Load 8(invocation) + 4020: 3859(ptr) AccessChain 34(data) 59 3851 + 4021: 30(f16vec4) Load 4020 + 4022:3869(f16vec3) VectorShuffle 4021 4021 0 1 2 + 4023:3869(f16vec3) GroupNonUniformFMul 42 InclusiveScan 4022 + 4024: 3852(ptr) AccessChain 34(data) 4019 3851 38 + 4025:29(float16_t) CompositeExtract 4023 0 + Store 4024 4025 + 4026: 3852(ptr) AccessChain 34(data) 4019 3851 55 + 4027:29(float16_t) CompositeExtract 4023 1 + Store 4026 4027 + 4028: 3852(ptr) AccessChain 34(data) 4019 3851 69 + 4029:29(float16_t) CompositeExtract 4023 2 + Store 4028 4029 + 4030: 6(int) Load 8(invocation) + 4031: 3859(ptr) AccessChain 34(data) 73 3851 + 4032: 30(f16vec4) Load 4031 + 4033: 30(f16vec4) GroupNonUniformFMul 42 InclusiveScan 4032 + 4034: 3859(ptr) AccessChain 34(data) 4030 3851 + Store 4034 4033 + 4035: 6(int) Load 8(invocation) + 4036: 3852(ptr) AccessChain 34(data) 37 3851 38 + 4037:29(float16_t) Load 4036 + 4038:29(float16_t) GroupNonUniformFMin 42 InclusiveScan 4037 + 4039: 3852(ptr) AccessChain 34(data) 4035 3851 38 + Store 4039 4038 + 4040: 6(int) Load 8(invocation) + 4041: 3859(ptr) AccessChain 34(data) 46 3851 + 4042: 30(f16vec4) Load 4041 + 4043:3858(f16vec2) VectorShuffle 4042 4042 0 1 + 4044:3858(f16vec2) GroupNonUniformFMin 42 InclusiveScan 4043 + 4045: 3852(ptr) AccessChain 34(data) 4040 3851 38 + 4046:29(float16_t) CompositeExtract 4044 0 + Store 4045 4046 + 4047: 3852(ptr) AccessChain 34(data) 4040 3851 55 + 4048:29(float16_t) CompositeExtract 4044 1 + Store 4047 4048 + 4049: 6(int) Load 8(invocation) + 4050: 3859(ptr) AccessChain 34(data) 59 3851 + 4051: 30(f16vec4) Load 4050 + 4052:3869(f16vec3) VectorShuffle 4051 4051 0 1 2 + 4053:3869(f16vec3) GroupNonUniformFMin 42 InclusiveScan 4052 + 4054: 3852(ptr) AccessChain 34(data) 4049 3851 38 + 4055:29(float16_t) CompositeExtract 4053 0 + Store 4054 4055 + 4056: 3852(ptr) AccessChain 34(data) 4049 3851 55 + 4057:29(float16_t) CompositeExtract 4053 1 + Store 4056 4057 + 4058: 3852(ptr) AccessChain 34(data) 4049 3851 69 + 4059:29(float16_t) CompositeExtract 4053 2 + Store 4058 4059 + 4060: 6(int) Load 8(invocation) + 4061: 3859(ptr) AccessChain 34(data) 73 3851 + 4062: 30(f16vec4) Load 4061 + 4063: 30(f16vec4) GroupNonUniformFMin 42 InclusiveScan 4062 + 4064: 3859(ptr) AccessChain 34(data) 4060 3851 + Store 4064 4063 + 4065: 6(int) Load 8(invocation) + 4066: 3852(ptr) AccessChain 34(data) 37 3851 38 + 4067:29(float16_t) Load 4066 + 4068:29(float16_t) GroupNonUniformFMax 42 InclusiveScan 4067 + 4069: 3852(ptr) AccessChain 34(data) 4065 3851 38 + Store 4069 4068 + 4070: 6(int) Load 8(invocation) + 4071: 3859(ptr) AccessChain 34(data) 46 3851 + 4072: 30(f16vec4) Load 4071 + 4073:3858(f16vec2) VectorShuffle 4072 4072 0 1 + 4074:3858(f16vec2) GroupNonUniformFMax 42 InclusiveScan 4073 + 4075: 3852(ptr) AccessChain 34(data) 4070 3851 38 + 4076:29(float16_t) CompositeExtract 4074 0 + Store 4075 4076 + 4077: 3852(ptr) AccessChain 34(data) 4070 3851 55 + 4078:29(float16_t) CompositeExtract 4074 1 + Store 4077 4078 + 4079: 6(int) Load 8(invocation) + 4080: 3859(ptr) AccessChain 34(data) 59 3851 + 4081: 30(f16vec4) Load 4080 + 4082:3869(f16vec3) VectorShuffle 4081 4081 0 1 2 + 4083:3869(f16vec3) GroupNonUniformFMax 42 InclusiveScan 4082 + 4084: 3852(ptr) AccessChain 34(data) 4079 3851 38 + 4085:29(float16_t) CompositeExtract 4083 0 + Store 4084 4085 + 4086: 3852(ptr) AccessChain 34(data) 4079 3851 55 + 4087:29(float16_t) CompositeExtract 4083 1 + Store 4086 4087 + 4088: 3852(ptr) AccessChain 34(data) 4079 3851 69 + 4089:29(float16_t) CompositeExtract 4083 2 + Store 4088 4089 + 4090: 6(int) Load 8(invocation) + 4091: 3859(ptr) AccessChain 34(data) 73 3851 + 4092: 30(f16vec4) Load 4091 + 4093: 30(f16vec4) GroupNonUniformFMax 42 InclusiveScan 4092 + 4094: 3859(ptr) AccessChain 34(data) 4090 3851 + Store 4094 4093 + 4095: 6(int) Load 8(invocation) + 4096: 3852(ptr) AccessChain 34(data) 37 3851 38 + 4097:29(float16_t) Load 4096 + 4098:29(float16_t) GroupNonUniformFAdd 42 ExclusiveScan 4097 + 4099: 3852(ptr) AccessChain 34(data) 4095 3851 38 + Store 4099 4098 + 4100: 6(int) Load 8(invocation) + 4101: 3859(ptr) AccessChain 34(data) 46 3851 + 4102: 30(f16vec4) Load 4101 + 4103:3858(f16vec2) VectorShuffle 4102 4102 0 1 + 4104:3858(f16vec2) GroupNonUniformFAdd 42 ExclusiveScan 4103 + 4105: 3852(ptr) AccessChain 34(data) 4100 3851 38 + 4106:29(float16_t) CompositeExtract 4104 0 + Store 4105 4106 + 4107: 3852(ptr) AccessChain 34(data) 4100 3851 55 + 4108:29(float16_t) CompositeExtract 4104 1 + Store 4107 4108 + 4109: 6(int) Load 8(invocation) + 4110: 3859(ptr) AccessChain 34(data) 59 3851 + 4111: 30(f16vec4) Load 4110 + 4112:3869(f16vec3) VectorShuffle 4111 4111 0 1 2 + 4113:3869(f16vec3) GroupNonUniformFAdd 42 ExclusiveScan 4112 + 4114: 3852(ptr) AccessChain 34(data) 4109 3851 38 + 4115:29(float16_t) CompositeExtract 4113 0 + Store 4114 4115 + 4116: 3852(ptr) AccessChain 34(data) 4109 3851 55 + 4117:29(float16_t) CompositeExtract 4113 1 + Store 4116 4117 + 4118: 3852(ptr) AccessChain 34(data) 4109 3851 69 + 4119:29(float16_t) CompositeExtract 4113 2 + Store 4118 4119 + 4120: 6(int) Load 8(invocation) + 4121: 3859(ptr) AccessChain 34(data) 73 3851 + 4122: 30(f16vec4) Load 4121 + 4123: 30(f16vec4) GroupNonUniformFAdd 42 ExclusiveScan 4122 + 4124: 3859(ptr) AccessChain 34(data) 4120 3851 + Store 4124 4123 + 4125: 6(int) Load 8(invocation) + 4126: 3852(ptr) AccessChain 34(data) 37 3851 38 + 4127:29(float16_t) Load 4126 + 4128:29(float16_t) GroupNonUniformFMul 42 ExclusiveScan 4127 + 4129: 3852(ptr) AccessChain 34(data) 4125 3851 38 + Store 4129 4128 + 4130: 6(int) Load 8(invocation) + 4131: 3859(ptr) AccessChain 34(data) 46 3851 + 4132: 30(f16vec4) Load 4131 + 4133:3858(f16vec2) VectorShuffle 4132 4132 0 1 + 4134:3858(f16vec2) GroupNonUniformFMul 42 ExclusiveScan 4133 + 4135: 3852(ptr) AccessChain 34(data) 4130 3851 38 + 4136:29(float16_t) CompositeExtract 4134 0 + Store 4135 4136 + 4137: 3852(ptr) AccessChain 34(data) 4130 3851 55 + 4138:29(float16_t) CompositeExtract 4134 1 + Store 4137 4138 + 4139: 6(int) Load 8(invocation) + 4140: 3859(ptr) AccessChain 34(data) 59 3851 + 4141: 30(f16vec4) Load 4140 + 4142:3869(f16vec3) VectorShuffle 4141 4141 0 1 2 + 4143:3869(f16vec3) GroupNonUniformFMul 42 ExclusiveScan 4142 + 4144: 3852(ptr) AccessChain 34(data) 4139 3851 38 + 4145:29(float16_t) CompositeExtract 4143 0 + Store 4144 4145 + 4146: 3852(ptr) AccessChain 34(data) 4139 3851 55 + 4147:29(float16_t) CompositeExtract 4143 1 + Store 4146 4147 + 4148: 3852(ptr) AccessChain 34(data) 4139 3851 69 + 4149:29(float16_t) CompositeExtract 4143 2 + Store 4148 4149 + 4150: 6(int) Load 8(invocation) + 4151: 3859(ptr) AccessChain 34(data) 73 3851 + 4152: 30(f16vec4) Load 4151 + 4153: 30(f16vec4) GroupNonUniformFMul 42 ExclusiveScan 4152 + 4154: 3859(ptr) AccessChain 34(data) 4150 3851 + Store 4154 4153 + 4155: 6(int) Load 8(invocation) + 4156: 3852(ptr) AccessChain 34(data) 37 3851 38 + 4157:29(float16_t) Load 4156 + 4158:29(float16_t) GroupNonUniformFMin 42 ExclusiveScan 4157 + 4159: 3852(ptr) AccessChain 34(data) 4155 3851 38 + Store 4159 4158 + 4160: 6(int) Load 8(invocation) + 4161: 3859(ptr) AccessChain 34(data) 46 3851 + 4162: 30(f16vec4) Load 4161 + 4163:3858(f16vec2) VectorShuffle 4162 4162 0 1 + 4164:3858(f16vec2) GroupNonUniformFMin 42 ExclusiveScan 4163 + 4165: 3852(ptr) AccessChain 34(data) 4160 3851 38 + 4166:29(float16_t) CompositeExtract 4164 0 + Store 4165 4166 + 4167: 3852(ptr) AccessChain 34(data) 4160 3851 55 + 4168:29(float16_t) CompositeExtract 4164 1 + Store 4167 4168 + 4169: 6(int) Load 8(invocation) + 4170: 3859(ptr) AccessChain 34(data) 59 3851 + 4171: 30(f16vec4) Load 4170 + 4172:3869(f16vec3) VectorShuffle 4171 4171 0 1 2 + 4173:3869(f16vec3) GroupNonUniformFMin 42 ExclusiveScan 4172 + 4174: 3852(ptr) AccessChain 34(data) 4169 3851 38 + 4175:29(float16_t) CompositeExtract 4173 0 + Store 4174 4175 + 4176: 3852(ptr) AccessChain 34(data) 4169 3851 55 + 4177:29(float16_t) CompositeExtract 4173 1 + Store 4176 4177 + 4178: 3852(ptr) AccessChain 34(data) 4169 3851 69 + 4179:29(float16_t) CompositeExtract 4173 2 + Store 4178 4179 + 4180: 6(int) Load 8(invocation) + 4181: 3859(ptr) AccessChain 34(data) 73 3851 + 4182: 30(f16vec4) Load 4181 + 4183: 30(f16vec4) GroupNonUniformFMin 42 ExclusiveScan 4182 + 4184: 3859(ptr) AccessChain 34(data) 4180 3851 + Store 4184 4183 + 4185: 6(int) Load 8(invocation) + 4186: 3852(ptr) AccessChain 34(data) 37 3851 38 + 4187:29(float16_t) Load 4186 + 4188:29(float16_t) GroupNonUniformFMax 42 ExclusiveScan 4187 + 4189: 3852(ptr) AccessChain 34(data) 4185 3851 38 + Store 4189 4188 + 4190: 6(int) Load 8(invocation) + 4191: 3859(ptr) AccessChain 34(data) 46 3851 + 4192: 30(f16vec4) Load 4191 + 4193:3858(f16vec2) VectorShuffle 4192 4192 0 1 + 4194:3858(f16vec2) GroupNonUniformFMax 42 ExclusiveScan 4193 + 4195: 3852(ptr) AccessChain 34(data) 4190 3851 38 + 4196:29(float16_t) CompositeExtract 4194 0 + Store 4195 4196 + 4197: 3852(ptr) AccessChain 34(data) 4190 3851 55 + 4198:29(float16_t) CompositeExtract 4194 1 + Store 4197 4198 + 4199: 6(int) Load 8(invocation) + 4200: 3859(ptr) AccessChain 34(data) 59 3851 + 4201: 30(f16vec4) Load 4200 + 4202:3869(f16vec3) VectorShuffle 4201 4201 0 1 2 + 4203:3869(f16vec3) GroupNonUniformFMax 42 ExclusiveScan 4202 + 4204: 3852(ptr) AccessChain 34(data) 4199 3851 38 + 4205:29(float16_t) CompositeExtract 4203 0 + Store 4204 4205 + 4206: 3852(ptr) AccessChain 34(data) 4199 3851 55 + 4207:29(float16_t) CompositeExtract 4203 1 + Store 4206 4207 + 4208: 3852(ptr) AccessChain 34(data) 4199 3851 69 + 4209:29(float16_t) CompositeExtract 4203 2 + Store 4208 4209 + 4210: 6(int) Load 8(invocation) + 4211: 3859(ptr) AccessChain 34(data) 73 3851 + 4212: 30(f16vec4) Load 4211 + 4213: 30(f16vec4) GroupNonUniformFMax 42 ExclusiveScan 4212 + 4214: 3859(ptr) AccessChain 34(data) 4210 3851 + Store 4214 4213 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out index f503f8c721..60f01bccf1 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesBallot.comp.out @@ -1,7 +1,7 @@ spv.subgroupExtendedTypesBallot.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 441 +// Id's are bound by 498 Capability Shader Capability Float16 @@ -59,7 +59,7 @@ spv.subgroupExtendedTypesBallot.comp Decorate 31(Buffers) Block Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 - Decorate 440 BuiltIn WorkgroupSize + Decorate 497 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -94,40 +94,41 @@ spv.subgroupExtendedTypesBallot.comp 46: 36(int) Constant 1 47: TypeVector 17(int8_t) 2 48: TypePointer StorageBuffer 18(i8vec4) - 57: 36(int) Constant 2 - 58: TypeVector 17(int8_t) 3 - 67: 36(int) Constant 3 - 99: TypePointer StorageBuffer 19(int8_t) - 105: TypeVector 19(int8_t) 2 - 106: TypePointer StorageBuffer 20(i8vec4) - 115: TypeVector 19(int8_t) 3 - 155: TypePointer StorageBuffer 21(int16_t) - 161: TypeVector 21(int16_t) 2 - 162: TypePointer StorageBuffer 22(i16vec4) - 171: TypeVector 21(int16_t) 3 - 211: TypePointer StorageBuffer 23(int16_t) - 217: TypeVector 23(int16_t) 2 - 218: TypePointer StorageBuffer 24(i16vec4) - 227: TypeVector 23(int16_t) 3 - 267: 36(int) Constant 4 - 268: TypePointer StorageBuffer 25(int64_t) - 274: TypeVector 25(int64_t) 2 - 275: TypePointer StorageBuffer 26(i64vec4) - 284: TypeVector 25(int64_t) 3 - 324: 36(int) Constant 5 - 325: TypePointer StorageBuffer 27(int64_t) - 331: TypeVector 27(int64_t) 2 - 332: TypePointer StorageBuffer 28(i64vec4) - 341: TypeVector 27(int64_t) 3 - 381: 36(int) Constant 6 - 382: TypePointer StorageBuffer 29(float16_t) - 388: TypeVector 29(float16_t) 2 - 389: TypePointer StorageBuffer 30(f16vec4) - 398: TypeVector 29(float16_t) 3 - 437: TypeVector 6(int) 3 - 438: 6(int) Constant 8 - 439: 6(int) Constant 1 - 440: 437(ivec3) ConstantComposite 438 439 439 + 55: 6(int) Constant 1 + 59: 36(int) Constant 2 + 60: TypeVector 17(int8_t) 3 + 69: 6(int) Constant 2 + 73: 36(int) Constant 3 + 109: TypePointer StorageBuffer 19(int8_t) + 115: TypeVector 19(int8_t) 2 + 116: TypePointer StorageBuffer 20(i8vec4) + 126: TypeVector 19(int8_t) 3 + 173: TypePointer StorageBuffer 21(int16_t) + 179: TypeVector 21(int16_t) 2 + 180: TypePointer StorageBuffer 22(i16vec4) + 190: TypeVector 21(int16_t) 3 + 237: TypePointer StorageBuffer 23(int16_t) + 243: TypeVector 23(int16_t) 2 + 244: TypePointer StorageBuffer 24(i16vec4) + 254: TypeVector 23(int16_t) 3 + 301: 36(int) Constant 4 + 302: TypePointer StorageBuffer 25(int64_t) + 308: TypeVector 25(int64_t) 2 + 309: TypePointer StorageBuffer 26(i64vec4) + 319: TypeVector 25(int64_t) 3 + 366: 36(int) Constant 5 + 367: TypePointer StorageBuffer 27(int64_t) + 373: TypeVector 27(int64_t) 2 + 374: TypePointer StorageBuffer 28(i64vec4) + 384: TypeVector 27(int64_t) 3 + 431: 36(int) Constant 6 + 432: TypePointer StorageBuffer 29(float16_t) + 438: TypeVector 29(float16_t) 2 + 439: TypePointer StorageBuffer 30(f16vec4) + 449: TypeVector 29(float16_t) 3 + 495: TypeVector 6(int) 3 + 496: 6(int) Constant 8 + 497: 495(ivec3) ConstantComposite 496 55 55 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -147,414 +148,512 @@ spv.subgroupExtendedTypesBallot.comp 50: 18(i8vec4) Load 49 51: 47(i8vec2) VectorShuffle 50 50 0 1 52: 47(i8vec2) GroupNonUniformBroadcast 42 51 42 - 53: 48(ptr) AccessChain 34(data) 45 37 - 54: 18(i8vec4) Load 53 - 55: 18(i8vec4) VectorShuffle 54 52 4 5 2 3 - Store 53 55 - 56: 6(int) Load 8(invocation) - 59: 48(ptr) AccessChain 34(data) 57 37 - 60: 18(i8vec4) Load 59 - 61: 58(i8vec3) VectorShuffle 60 60 0 1 2 - 62: 58(i8vec3) GroupNonUniformBroadcast 42 61 42 - 63: 48(ptr) AccessChain 34(data) 56 37 - 64: 18(i8vec4) Load 63 - 65: 18(i8vec4) VectorShuffle 64 62 4 5 6 3 - Store 63 65 - 66: 6(int) Load 8(invocation) - 68: 48(ptr) AccessChain 34(data) 67 37 - 69: 18(i8vec4) Load 68 - 70: 18(i8vec4) GroupNonUniformBroadcast 42 69 42 - 71: 48(ptr) AccessChain 34(data) 66 37 - Store 71 70 + 53: 39(ptr) AccessChain 34(data) 45 37 38 + 54: 17(int8_t) CompositeExtract 52 0 + Store 53 54 + 56: 39(ptr) AccessChain 34(data) 45 37 55 + 57: 17(int8_t) CompositeExtract 52 1 + Store 56 57 + 58: 6(int) Load 8(invocation) + 61: 48(ptr) AccessChain 34(data) 59 37 + 62: 18(i8vec4) Load 61 + 63: 60(i8vec3) VectorShuffle 62 62 0 1 2 + 64: 60(i8vec3) GroupNonUniformBroadcast 42 63 42 + 65: 39(ptr) AccessChain 34(data) 58 37 38 + 66: 17(int8_t) CompositeExtract 64 0 + Store 65 66 + 67: 39(ptr) AccessChain 34(data) 58 37 55 + 68: 17(int8_t) CompositeExtract 64 1 + Store 67 68 + 70: 39(ptr) AccessChain 34(data) 58 37 69 + 71: 17(int8_t) CompositeExtract 64 2 + Store 70 71 72: 6(int) Load 8(invocation) - 73: 39(ptr) AccessChain 34(data) 37 37 38 - 74: 17(int8_t) Load 73 - 75: 17(int8_t) GroupNonUniformBroadcastFirst 42 74 - 76: 39(ptr) AccessChain 34(data) 72 37 38 - Store 76 75 - 77: 6(int) Load 8(invocation) - 78: 48(ptr) AccessChain 34(data) 46 37 - 79: 18(i8vec4) Load 78 - 80: 47(i8vec2) VectorShuffle 79 79 0 1 - 81: 47(i8vec2) GroupNonUniformBroadcastFirst 42 80 - 82: 48(ptr) AccessChain 34(data) 77 37 - 83: 18(i8vec4) Load 82 - 84: 18(i8vec4) VectorShuffle 83 81 4 5 2 3 - Store 82 84 - 85: 6(int) Load 8(invocation) - 86: 48(ptr) AccessChain 34(data) 57 37 - 87: 18(i8vec4) Load 86 - 88: 58(i8vec3) VectorShuffle 87 87 0 1 2 - 89: 58(i8vec3) GroupNonUniformBroadcastFirst 42 88 - 90: 48(ptr) AccessChain 34(data) 85 37 - 91: 18(i8vec4) Load 90 - 92: 18(i8vec4) VectorShuffle 91 89 4 5 6 3 - Store 90 92 - 93: 6(int) Load 8(invocation) - 94: 48(ptr) AccessChain 34(data) 67 37 - 95: 18(i8vec4) Load 94 - 96: 18(i8vec4) GroupNonUniformBroadcastFirst 42 95 - 97: 48(ptr) AccessChain 34(data) 93 37 - Store 97 96 - 98: 6(int) Load 8(invocation) - 100: 99(ptr) AccessChain 34(data) 37 46 38 - 101: 19(int8_t) Load 100 - 102: 19(int8_t) GroupNonUniformBroadcast 42 101 42 - 103: 99(ptr) AccessChain 34(data) 98 46 38 - Store 103 102 - 104: 6(int) Load 8(invocation) - 107: 106(ptr) AccessChain 34(data) 46 46 - 108: 20(i8vec4) Load 107 - 109: 105(i8vec2) VectorShuffle 108 108 0 1 - 110: 105(i8vec2) GroupNonUniformBroadcast 42 109 42 - 111: 106(ptr) AccessChain 34(data) 104 46 - 112: 20(i8vec4) Load 111 - 113: 20(i8vec4) VectorShuffle 112 110 4 5 2 3 - Store 111 113 + 74: 48(ptr) AccessChain 34(data) 73 37 + 75: 18(i8vec4) Load 74 + 76: 18(i8vec4) GroupNonUniformBroadcast 42 75 42 + 77: 48(ptr) AccessChain 34(data) 72 37 + Store 77 76 + 78: 6(int) Load 8(invocation) + 79: 39(ptr) AccessChain 34(data) 37 37 38 + 80: 17(int8_t) Load 79 + 81: 17(int8_t) GroupNonUniformBroadcastFirst 42 80 + 82: 39(ptr) AccessChain 34(data) 78 37 38 + Store 82 81 + 83: 6(int) Load 8(invocation) + 84: 48(ptr) AccessChain 34(data) 46 37 + 85: 18(i8vec4) Load 84 + 86: 47(i8vec2) VectorShuffle 85 85 0 1 + 87: 47(i8vec2) GroupNonUniformBroadcastFirst 42 86 + 88: 39(ptr) AccessChain 34(data) 83 37 38 + 89: 17(int8_t) CompositeExtract 87 0 + Store 88 89 + 90: 39(ptr) AccessChain 34(data) 83 37 55 + 91: 17(int8_t) CompositeExtract 87 1 + Store 90 91 + 92: 6(int) Load 8(invocation) + 93: 48(ptr) AccessChain 34(data) 59 37 + 94: 18(i8vec4) Load 93 + 95: 60(i8vec3) VectorShuffle 94 94 0 1 2 + 96: 60(i8vec3) GroupNonUniformBroadcastFirst 42 95 + 97: 39(ptr) AccessChain 34(data) 92 37 38 + 98: 17(int8_t) CompositeExtract 96 0 + Store 97 98 + 99: 39(ptr) AccessChain 34(data) 92 37 55 + 100: 17(int8_t) CompositeExtract 96 1 + Store 99 100 + 101: 39(ptr) AccessChain 34(data) 92 37 69 + 102: 17(int8_t) CompositeExtract 96 2 + Store 101 102 + 103: 6(int) Load 8(invocation) + 104: 48(ptr) AccessChain 34(data) 73 37 + 105: 18(i8vec4) Load 104 + 106: 18(i8vec4) GroupNonUniformBroadcastFirst 42 105 + 107: 48(ptr) AccessChain 34(data) 103 37 + Store 107 106 + 108: 6(int) Load 8(invocation) + 110: 109(ptr) AccessChain 34(data) 37 46 38 + 111: 19(int8_t) Load 110 + 112: 19(int8_t) GroupNonUniformBroadcast 42 111 42 + 113: 109(ptr) AccessChain 34(data) 108 46 38 + Store 113 112 114: 6(int) Load 8(invocation) - 116: 106(ptr) AccessChain 34(data) 57 46 - 117: 20(i8vec4) Load 116 - 118: 115(i8vec3) VectorShuffle 117 117 0 1 2 - 119: 115(i8vec3) GroupNonUniformBroadcast 42 118 42 - 120: 106(ptr) AccessChain 34(data) 114 46 - 121: 20(i8vec4) Load 120 - 122: 20(i8vec4) VectorShuffle 121 119 4 5 6 3 - Store 120 122 - 123: 6(int) Load 8(invocation) - 124: 106(ptr) AccessChain 34(data) 67 46 - 125: 20(i8vec4) Load 124 - 126: 20(i8vec4) GroupNonUniformBroadcast 42 125 42 - 127: 106(ptr) AccessChain 34(data) 123 46 - Store 127 126 - 128: 6(int) Load 8(invocation) - 129: 99(ptr) AccessChain 34(data) 37 46 38 - 130: 19(int8_t) Load 129 - 131: 19(int8_t) GroupNonUniformBroadcastFirst 42 130 - 132: 99(ptr) AccessChain 34(data) 128 46 38 - Store 132 131 - 133: 6(int) Load 8(invocation) - 134: 106(ptr) AccessChain 34(data) 46 46 - 135: 20(i8vec4) Load 134 - 136: 105(i8vec2) VectorShuffle 135 135 0 1 - 137: 105(i8vec2) GroupNonUniformBroadcastFirst 42 136 - 138: 106(ptr) AccessChain 34(data) 133 46 + 117: 116(ptr) AccessChain 34(data) 46 46 + 118: 20(i8vec4) Load 117 + 119: 115(i8vec2) VectorShuffle 118 118 0 1 + 120: 115(i8vec2) GroupNonUniformBroadcast 42 119 42 + 121: 109(ptr) AccessChain 34(data) 114 46 38 + 122: 19(int8_t) CompositeExtract 120 0 + Store 121 122 + 123: 109(ptr) AccessChain 34(data) 114 46 55 + 124: 19(int8_t) CompositeExtract 120 1 + Store 123 124 + 125: 6(int) Load 8(invocation) + 127: 116(ptr) AccessChain 34(data) 59 46 + 128: 20(i8vec4) Load 127 + 129: 126(i8vec3) VectorShuffle 128 128 0 1 2 + 130: 126(i8vec3) GroupNonUniformBroadcast 42 129 42 + 131: 109(ptr) AccessChain 34(data) 125 46 38 + 132: 19(int8_t) CompositeExtract 130 0 + Store 131 132 + 133: 109(ptr) AccessChain 34(data) 125 46 55 + 134: 19(int8_t) CompositeExtract 130 1 + Store 133 134 + 135: 109(ptr) AccessChain 34(data) 125 46 69 + 136: 19(int8_t) CompositeExtract 130 2 + Store 135 136 + 137: 6(int) Load 8(invocation) + 138: 116(ptr) AccessChain 34(data) 73 46 139: 20(i8vec4) Load 138 - 140: 20(i8vec4) VectorShuffle 139 137 4 5 2 3 - Store 138 140 - 141: 6(int) Load 8(invocation) - 142: 106(ptr) AccessChain 34(data) 57 46 - 143: 20(i8vec4) Load 142 - 144: 115(i8vec3) VectorShuffle 143 143 0 1 2 - 145: 115(i8vec3) GroupNonUniformBroadcastFirst 42 144 - 146: 106(ptr) AccessChain 34(data) 141 46 - 147: 20(i8vec4) Load 146 - 148: 20(i8vec4) VectorShuffle 147 145 4 5 6 3 - Store 146 148 - 149: 6(int) Load 8(invocation) - 150: 106(ptr) AccessChain 34(data) 67 46 - 151: 20(i8vec4) Load 150 - 152: 20(i8vec4) GroupNonUniformBroadcastFirst 42 151 - 153: 106(ptr) AccessChain 34(data) 149 46 - Store 153 152 - 154: 6(int) Load 8(invocation) - 156: 155(ptr) AccessChain 34(data) 37 57 38 - 157: 21(int16_t) Load 156 - 158: 21(int16_t) GroupNonUniformBroadcast 42 157 42 - 159: 155(ptr) AccessChain 34(data) 154 57 38 - Store 159 158 - 160: 6(int) Load 8(invocation) - 163: 162(ptr) AccessChain 34(data) 46 57 - 164: 22(i16vec4) Load 163 - 165:161(i16vec2) VectorShuffle 164 164 0 1 - 166:161(i16vec2) GroupNonUniformBroadcast 42 165 42 - 167: 162(ptr) AccessChain 34(data) 160 57 - 168: 22(i16vec4) Load 167 - 169: 22(i16vec4) VectorShuffle 168 166 4 5 2 3 - Store 167 169 - 170: 6(int) Load 8(invocation) - 172: 162(ptr) AccessChain 34(data) 57 57 - 173: 22(i16vec4) Load 172 - 174:171(i16vec3) VectorShuffle 173 173 0 1 2 - 175:171(i16vec3) GroupNonUniformBroadcast 42 174 42 - 176: 162(ptr) AccessChain 34(data) 170 57 - 177: 22(i16vec4) Load 176 - 178: 22(i16vec4) VectorShuffle 177 175 4 5 6 3 - Store 176 178 - 179: 6(int) Load 8(invocation) - 180: 162(ptr) AccessChain 34(data) 67 57 - 181: 22(i16vec4) Load 180 - 182: 22(i16vec4) GroupNonUniformBroadcast 42 181 42 - 183: 162(ptr) AccessChain 34(data) 179 57 - Store 183 182 - 184: 6(int) Load 8(invocation) - 185: 155(ptr) AccessChain 34(data) 37 57 38 - 186: 21(int16_t) Load 185 - 187: 21(int16_t) GroupNonUniformBroadcastFirst 42 186 - 188: 155(ptr) AccessChain 34(data) 184 57 38 - Store 188 187 + 140: 20(i8vec4) GroupNonUniformBroadcast 42 139 42 + 141: 116(ptr) AccessChain 34(data) 137 46 + Store 141 140 + 142: 6(int) Load 8(invocation) + 143: 109(ptr) AccessChain 34(data) 37 46 38 + 144: 19(int8_t) Load 143 + 145: 19(int8_t) GroupNonUniformBroadcastFirst 42 144 + 146: 109(ptr) AccessChain 34(data) 142 46 38 + Store 146 145 + 147: 6(int) Load 8(invocation) + 148: 116(ptr) AccessChain 34(data) 46 46 + 149: 20(i8vec4) Load 148 + 150: 115(i8vec2) VectorShuffle 149 149 0 1 + 151: 115(i8vec2) GroupNonUniformBroadcastFirst 42 150 + 152: 109(ptr) AccessChain 34(data) 147 46 38 + 153: 19(int8_t) CompositeExtract 151 0 + Store 152 153 + 154: 109(ptr) AccessChain 34(data) 147 46 55 + 155: 19(int8_t) CompositeExtract 151 1 + Store 154 155 + 156: 6(int) Load 8(invocation) + 157: 116(ptr) AccessChain 34(data) 59 46 + 158: 20(i8vec4) Load 157 + 159: 126(i8vec3) VectorShuffle 158 158 0 1 2 + 160: 126(i8vec3) GroupNonUniformBroadcastFirst 42 159 + 161: 109(ptr) AccessChain 34(data) 156 46 38 + 162: 19(int8_t) CompositeExtract 160 0 + Store 161 162 + 163: 109(ptr) AccessChain 34(data) 156 46 55 + 164: 19(int8_t) CompositeExtract 160 1 + Store 163 164 + 165: 109(ptr) AccessChain 34(data) 156 46 69 + 166: 19(int8_t) CompositeExtract 160 2 + Store 165 166 + 167: 6(int) Load 8(invocation) + 168: 116(ptr) AccessChain 34(data) 73 46 + 169: 20(i8vec4) Load 168 + 170: 20(i8vec4) GroupNonUniformBroadcastFirst 42 169 + 171: 116(ptr) AccessChain 34(data) 167 46 + Store 171 170 + 172: 6(int) Load 8(invocation) + 174: 173(ptr) AccessChain 34(data) 37 59 38 + 175: 21(int16_t) Load 174 + 176: 21(int16_t) GroupNonUniformBroadcast 42 175 42 + 177: 173(ptr) AccessChain 34(data) 172 59 38 + Store 177 176 + 178: 6(int) Load 8(invocation) + 181: 180(ptr) AccessChain 34(data) 46 59 + 182: 22(i16vec4) Load 181 + 183:179(i16vec2) VectorShuffle 182 182 0 1 + 184:179(i16vec2) GroupNonUniformBroadcast 42 183 42 + 185: 173(ptr) AccessChain 34(data) 178 59 38 + 186: 21(int16_t) CompositeExtract 184 0 + Store 185 186 + 187: 173(ptr) AccessChain 34(data) 178 59 55 + 188: 21(int16_t) CompositeExtract 184 1 + Store 187 188 189: 6(int) Load 8(invocation) - 190: 162(ptr) AccessChain 34(data) 46 57 - 191: 22(i16vec4) Load 190 - 192:161(i16vec2) VectorShuffle 191 191 0 1 - 193:161(i16vec2) GroupNonUniformBroadcastFirst 42 192 - 194: 162(ptr) AccessChain 34(data) 189 57 - 195: 22(i16vec4) Load 194 - 196: 22(i16vec4) VectorShuffle 195 193 4 5 2 3 - Store 194 196 - 197: 6(int) Load 8(invocation) - 198: 162(ptr) AccessChain 34(data) 57 57 - 199: 22(i16vec4) Load 198 - 200:171(i16vec3) VectorShuffle 199 199 0 1 2 - 201:171(i16vec3) GroupNonUniformBroadcastFirst 42 200 - 202: 162(ptr) AccessChain 34(data) 197 57 + 191: 180(ptr) AccessChain 34(data) 59 59 + 192: 22(i16vec4) Load 191 + 193:190(i16vec3) VectorShuffle 192 192 0 1 2 + 194:190(i16vec3) GroupNonUniformBroadcast 42 193 42 + 195: 173(ptr) AccessChain 34(data) 189 59 38 + 196: 21(int16_t) CompositeExtract 194 0 + Store 195 196 + 197: 173(ptr) AccessChain 34(data) 189 59 55 + 198: 21(int16_t) CompositeExtract 194 1 + Store 197 198 + 199: 173(ptr) AccessChain 34(data) 189 59 69 + 200: 21(int16_t) CompositeExtract 194 2 + Store 199 200 + 201: 6(int) Load 8(invocation) + 202: 180(ptr) AccessChain 34(data) 73 59 203: 22(i16vec4) Load 202 - 204: 22(i16vec4) VectorShuffle 203 201 4 5 6 3 - Store 202 204 - 205: 6(int) Load 8(invocation) - 206: 162(ptr) AccessChain 34(data) 67 57 - 207: 22(i16vec4) Load 206 - 208: 22(i16vec4) GroupNonUniformBroadcastFirst 42 207 - 209: 162(ptr) AccessChain 34(data) 205 57 - Store 209 208 - 210: 6(int) Load 8(invocation) - 212: 211(ptr) AccessChain 34(data) 37 67 38 - 213: 23(int16_t) Load 212 - 214: 23(int16_t) GroupNonUniformBroadcast 42 213 42 - 215: 211(ptr) AccessChain 34(data) 210 67 38 - Store 215 214 - 216: 6(int) Load 8(invocation) - 219: 218(ptr) AccessChain 34(data) 46 67 - 220: 24(i16vec4) Load 219 - 221:217(i16vec2) VectorShuffle 220 220 0 1 - 222:217(i16vec2) GroupNonUniformBroadcast 42 221 42 - 223: 218(ptr) AccessChain 34(data) 216 67 - 224: 24(i16vec4) Load 223 - 225: 24(i16vec4) VectorShuffle 224 222 4 5 2 3 - Store 223 225 - 226: 6(int) Load 8(invocation) - 228: 218(ptr) AccessChain 34(data) 57 67 - 229: 24(i16vec4) Load 228 - 230:227(i16vec3) VectorShuffle 229 229 0 1 2 - 231:227(i16vec3) GroupNonUniformBroadcast 42 230 42 - 232: 218(ptr) AccessChain 34(data) 226 67 - 233: 24(i16vec4) Load 232 - 234: 24(i16vec4) VectorShuffle 233 231 4 5 6 3 - Store 232 234 - 235: 6(int) Load 8(invocation) - 236: 218(ptr) AccessChain 34(data) 67 67 - 237: 24(i16vec4) Load 236 - 238: 24(i16vec4) GroupNonUniformBroadcast 42 237 42 - 239: 218(ptr) AccessChain 34(data) 235 67 - Store 239 238 - 240: 6(int) Load 8(invocation) - 241: 211(ptr) AccessChain 34(data) 37 67 38 - 242: 23(int16_t) Load 241 - 243: 23(int16_t) GroupNonUniformBroadcastFirst 42 242 - 244: 211(ptr) AccessChain 34(data) 240 67 38 - Store 244 243 - 245: 6(int) Load 8(invocation) - 246: 218(ptr) AccessChain 34(data) 46 67 - 247: 24(i16vec4) Load 246 - 248:217(i16vec2) VectorShuffle 247 247 0 1 - 249:217(i16vec2) GroupNonUniformBroadcastFirst 42 248 - 250: 218(ptr) AccessChain 34(data) 245 67 - 251: 24(i16vec4) Load 250 - 252: 24(i16vec4) VectorShuffle 251 249 4 5 2 3 - Store 250 252 + 204: 22(i16vec4) GroupNonUniformBroadcast 42 203 42 + 205: 180(ptr) AccessChain 34(data) 201 59 + Store 205 204 + 206: 6(int) Load 8(invocation) + 207: 173(ptr) AccessChain 34(data) 37 59 38 + 208: 21(int16_t) Load 207 + 209: 21(int16_t) GroupNonUniformBroadcastFirst 42 208 + 210: 173(ptr) AccessChain 34(data) 206 59 38 + Store 210 209 + 211: 6(int) Load 8(invocation) + 212: 180(ptr) AccessChain 34(data) 46 59 + 213: 22(i16vec4) Load 212 + 214:179(i16vec2) VectorShuffle 213 213 0 1 + 215:179(i16vec2) GroupNonUniformBroadcastFirst 42 214 + 216: 173(ptr) AccessChain 34(data) 211 59 38 + 217: 21(int16_t) CompositeExtract 215 0 + Store 216 217 + 218: 173(ptr) AccessChain 34(data) 211 59 55 + 219: 21(int16_t) CompositeExtract 215 1 + Store 218 219 + 220: 6(int) Load 8(invocation) + 221: 180(ptr) AccessChain 34(data) 59 59 + 222: 22(i16vec4) Load 221 + 223:190(i16vec3) VectorShuffle 222 222 0 1 2 + 224:190(i16vec3) GroupNonUniformBroadcastFirst 42 223 + 225: 173(ptr) AccessChain 34(data) 220 59 38 + 226: 21(int16_t) CompositeExtract 224 0 + Store 225 226 + 227: 173(ptr) AccessChain 34(data) 220 59 55 + 228: 21(int16_t) CompositeExtract 224 1 + Store 227 228 + 229: 173(ptr) AccessChain 34(data) 220 59 69 + 230: 21(int16_t) CompositeExtract 224 2 + Store 229 230 + 231: 6(int) Load 8(invocation) + 232: 180(ptr) AccessChain 34(data) 73 59 + 233: 22(i16vec4) Load 232 + 234: 22(i16vec4) GroupNonUniformBroadcastFirst 42 233 + 235: 180(ptr) AccessChain 34(data) 231 59 + Store 235 234 + 236: 6(int) Load 8(invocation) + 238: 237(ptr) AccessChain 34(data) 37 73 38 + 239: 23(int16_t) Load 238 + 240: 23(int16_t) GroupNonUniformBroadcast 42 239 42 + 241: 237(ptr) AccessChain 34(data) 236 73 38 + Store 241 240 + 242: 6(int) Load 8(invocation) + 245: 244(ptr) AccessChain 34(data) 46 73 + 246: 24(i16vec4) Load 245 + 247:243(i16vec2) VectorShuffle 246 246 0 1 + 248:243(i16vec2) GroupNonUniformBroadcast 42 247 42 + 249: 237(ptr) AccessChain 34(data) 242 73 38 + 250: 23(int16_t) CompositeExtract 248 0 + Store 249 250 + 251: 237(ptr) AccessChain 34(data) 242 73 55 + 252: 23(int16_t) CompositeExtract 248 1 + Store 251 252 253: 6(int) Load 8(invocation) - 254: 218(ptr) AccessChain 34(data) 57 67 - 255: 24(i16vec4) Load 254 - 256:227(i16vec3) VectorShuffle 255 255 0 1 2 - 257:227(i16vec3) GroupNonUniformBroadcastFirst 42 256 - 258: 218(ptr) AccessChain 34(data) 253 67 - 259: 24(i16vec4) Load 258 - 260: 24(i16vec4) VectorShuffle 259 257 4 5 6 3 - Store 258 260 - 261: 6(int) Load 8(invocation) - 262: 218(ptr) AccessChain 34(data) 67 67 - 263: 24(i16vec4) Load 262 - 264: 24(i16vec4) GroupNonUniformBroadcastFirst 42 263 - 265: 218(ptr) AccessChain 34(data) 261 67 - Store 265 264 - 266: 6(int) Load 8(invocation) - 269: 268(ptr) AccessChain 34(data) 37 267 38 - 270: 25(int64_t) Load 269 - 271: 25(int64_t) GroupNonUniformBroadcast 42 270 42 - 272: 268(ptr) AccessChain 34(data) 266 267 38 - Store 272 271 - 273: 6(int) Load 8(invocation) - 276: 275(ptr) AccessChain 34(data) 46 267 - 277: 26(i64vec4) Load 276 - 278:274(i64vec2) VectorShuffle 277 277 0 1 - 279:274(i64vec2) GroupNonUniformBroadcast 42 278 42 - 280: 275(ptr) AccessChain 34(data) 273 267 - 281: 26(i64vec4) Load 280 - 282: 26(i64vec4) VectorShuffle 281 279 4 5 2 3 - Store 280 282 - 283: 6(int) Load 8(invocation) - 285: 275(ptr) AccessChain 34(data) 57 267 - 286: 26(i64vec4) Load 285 - 287:284(i64vec3) VectorShuffle 286 286 0 1 2 - 288:284(i64vec3) GroupNonUniformBroadcast 42 287 42 - 289: 275(ptr) AccessChain 34(data) 283 267 - 290: 26(i64vec4) Load 289 - 291: 26(i64vec4) VectorShuffle 290 288 4 5 6 3 - Store 289 291 - 292: 6(int) Load 8(invocation) - 293: 275(ptr) AccessChain 34(data) 67 267 - 294: 26(i64vec4) Load 293 - 295: 26(i64vec4) GroupNonUniformBroadcast 42 294 42 - 296: 275(ptr) AccessChain 34(data) 292 267 - Store 296 295 - 297: 6(int) Load 8(invocation) - 298: 268(ptr) AccessChain 34(data) 37 267 38 - 299: 25(int64_t) Load 298 - 300: 25(int64_t) GroupNonUniformBroadcastFirst 42 299 - 301: 268(ptr) AccessChain 34(data) 297 267 38 - Store 301 300 - 302: 6(int) Load 8(invocation) - 303: 275(ptr) AccessChain 34(data) 46 267 - 304: 26(i64vec4) Load 303 - 305:274(i64vec2) VectorShuffle 304 304 0 1 - 306:274(i64vec2) GroupNonUniformBroadcastFirst 42 305 - 307: 275(ptr) AccessChain 34(data) 302 267 - 308: 26(i64vec4) Load 307 - 309: 26(i64vec4) VectorShuffle 308 306 4 5 2 3 - Store 307 309 - 310: 6(int) Load 8(invocation) - 311: 275(ptr) AccessChain 34(data) 57 267 - 312: 26(i64vec4) Load 311 - 313:284(i64vec3) VectorShuffle 312 312 0 1 2 - 314:284(i64vec3) GroupNonUniformBroadcastFirst 42 313 - 315: 275(ptr) AccessChain 34(data) 310 267 - 316: 26(i64vec4) Load 315 - 317: 26(i64vec4) VectorShuffle 316 314 4 5 6 3 - Store 315 317 + 255: 244(ptr) AccessChain 34(data) 59 73 + 256: 24(i16vec4) Load 255 + 257:254(i16vec3) VectorShuffle 256 256 0 1 2 + 258:254(i16vec3) GroupNonUniformBroadcast 42 257 42 + 259: 237(ptr) AccessChain 34(data) 253 73 38 + 260: 23(int16_t) CompositeExtract 258 0 + Store 259 260 + 261: 237(ptr) AccessChain 34(data) 253 73 55 + 262: 23(int16_t) CompositeExtract 258 1 + Store 261 262 + 263: 237(ptr) AccessChain 34(data) 253 73 69 + 264: 23(int16_t) CompositeExtract 258 2 + Store 263 264 + 265: 6(int) Load 8(invocation) + 266: 244(ptr) AccessChain 34(data) 73 73 + 267: 24(i16vec4) Load 266 + 268: 24(i16vec4) GroupNonUniformBroadcast 42 267 42 + 269: 244(ptr) AccessChain 34(data) 265 73 + Store 269 268 + 270: 6(int) Load 8(invocation) + 271: 237(ptr) AccessChain 34(data) 37 73 38 + 272: 23(int16_t) Load 271 + 273: 23(int16_t) GroupNonUniformBroadcastFirst 42 272 + 274: 237(ptr) AccessChain 34(data) 270 73 38 + Store 274 273 + 275: 6(int) Load 8(invocation) + 276: 244(ptr) AccessChain 34(data) 46 73 + 277: 24(i16vec4) Load 276 + 278:243(i16vec2) VectorShuffle 277 277 0 1 + 279:243(i16vec2) GroupNonUniformBroadcastFirst 42 278 + 280: 237(ptr) AccessChain 34(data) 275 73 38 + 281: 23(int16_t) CompositeExtract 279 0 + Store 280 281 + 282: 237(ptr) AccessChain 34(data) 275 73 55 + 283: 23(int16_t) CompositeExtract 279 1 + Store 282 283 + 284: 6(int) Load 8(invocation) + 285: 244(ptr) AccessChain 34(data) 59 73 + 286: 24(i16vec4) Load 285 + 287:254(i16vec3) VectorShuffle 286 286 0 1 2 + 288:254(i16vec3) GroupNonUniformBroadcastFirst 42 287 + 289: 237(ptr) AccessChain 34(data) 284 73 38 + 290: 23(int16_t) CompositeExtract 288 0 + Store 289 290 + 291: 237(ptr) AccessChain 34(data) 284 73 55 + 292: 23(int16_t) CompositeExtract 288 1 + Store 291 292 + 293: 237(ptr) AccessChain 34(data) 284 73 69 + 294: 23(int16_t) CompositeExtract 288 2 + Store 293 294 + 295: 6(int) Load 8(invocation) + 296: 244(ptr) AccessChain 34(data) 73 73 + 297: 24(i16vec4) Load 296 + 298: 24(i16vec4) GroupNonUniformBroadcastFirst 42 297 + 299: 244(ptr) AccessChain 34(data) 295 73 + Store 299 298 + 300: 6(int) Load 8(invocation) + 303: 302(ptr) AccessChain 34(data) 37 301 38 + 304: 25(int64_t) Load 303 + 305: 25(int64_t) GroupNonUniformBroadcast 42 304 42 + 306: 302(ptr) AccessChain 34(data) 300 301 38 + Store 306 305 + 307: 6(int) Load 8(invocation) + 310: 309(ptr) AccessChain 34(data) 46 301 + 311: 26(i64vec4) Load 310 + 312:308(i64vec2) VectorShuffle 311 311 0 1 + 313:308(i64vec2) GroupNonUniformBroadcast 42 312 42 + 314: 302(ptr) AccessChain 34(data) 307 301 38 + 315: 25(int64_t) CompositeExtract 313 0 + Store 314 315 + 316: 302(ptr) AccessChain 34(data) 307 301 55 + 317: 25(int64_t) CompositeExtract 313 1 + Store 316 317 318: 6(int) Load 8(invocation) - 319: 275(ptr) AccessChain 34(data) 67 267 - 320: 26(i64vec4) Load 319 - 321: 26(i64vec4) GroupNonUniformBroadcastFirst 42 320 - 322: 275(ptr) AccessChain 34(data) 318 267 - Store 322 321 - 323: 6(int) Load 8(invocation) - 326: 325(ptr) AccessChain 34(data) 37 324 38 - 327: 27(int64_t) Load 326 - 328: 27(int64_t) GroupNonUniformBroadcast 42 327 42 - 329: 325(ptr) AccessChain 34(data) 323 324 38 - Store 329 328 + 320: 309(ptr) AccessChain 34(data) 59 301 + 321: 26(i64vec4) Load 320 + 322:319(i64vec3) VectorShuffle 321 321 0 1 2 + 323:319(i64vec3) GroupNonUniformBroadcast 42 322 42 + 324: 302(ptr) AccessChain 34(data) 318 301 38 + 325: 25(int64_t) CompositeExtract 323 0 + Store 324 325 + 326: 302(ptr) AccessChain 34(data) 318 301 55 + 327: 25(int64_t) CompositeExtract 323 1 + Store 326 327 + 328: 302(ptr) AccessChain 34(data) 318 301 69 + 329: 25(int64_t) CompositeExtract 323 2 + Store 328 329 330: 6(int) Load 8(invocation) - 333: 332(ptr) AccessChain 34(data) 46 324 - 334: 28(i64vec4) Load 333 - 335:331(i64vec2) VectorShuffle 334 334 0 1 - 336:331(i64vec2) GroupNonUniformBroadcast 42 335 42 - 337: 332(ptr) AccessChain 34(data) 330 324 - 338: 28(i64vec4) Load 337 - 339: 28(i64vec4) VectorShuffle 338 336 4 5 2 3 - Store 337 339 + 331: 309(ptr) AccessChain 34(data) 73 301 + 332: 26(i64vec4) Load 331 + 333: 26(i64vec4) GroupNonUniformBroadcast 42 332 42 + 334: 309(ptr) AccessChain 34(data) 330 301 + Store 334 333 + 335: 6(int) Load 8(invocation) + 336: 302(ptr) AccessChain 34(data) 37 301 38 + 337: 25(int64_t) Load 336 + 338: 25(int64_t) GroupNonUniformBroadcastFirst 42 337 + 339: 302(ptr) AccessChain 34(data) 335 301 38 + Store 339 338 340: 6(int) Load 8(invocation) - 342: 332(ptr) AccessChain 34(data) 57 324 - 343: 28(i64vec4) Load 342 - 344:341(i64vec3) VectorShuffle 343 343 0 1 2 - 345:341(i64vec3) GroupNonUniformBroadcast 42 344 42 - 346: 332(ptr) AccessChain 34(data) 340 324 - 347: 28(i64vec4) Load 346 - 348: 28(i64vec4) VectorShuffle 347 345 4 5 6 3 - Store 346 348 + 341: 309(ptr) AccessChain 34(data) 46 301 + 342: 26(i64vec4) Load 341 + 343:308(i64vec2) VectorShuffle 342 342 0 1 + 344:308(i64vec2) GroupNonUniformBroadcastFirst 42 343 + 345: 302(ptr) AccessChain 34(data) 340 301 38 + 346: 25(int64_t) CompositeExtract 344 0 + Store 345 346 + 347: 302(ptr) AccessChain 34(data) 340 301 55 + 348: 25(int64_t) CompositeExtract 344 1 + Store 347 348 349: 6(int) Load 8(invocation) - 350: 332(ptr) AccessChain 34(data) 67 324 - 351: 28(i64vec4) Load 350 - 352: 28(i64vec4) GroupNonUniformBroadcast 42 351 42 - 353: 332(ptr) AccessChain 34(data) 349 324 - Store 353 352 - 354: 6(int) Load 8(invocation) - 355: 325(ptr) AccessChain 34(data) 37 324 38 - 356: 27(int64_t) Load 355 - 357: 27(int64_t) GroupNonUniformBroadcastFirst 42 356 - 358: 325(ptr) AccessChain 34(data) 354 324 38 - Store 358 357 - 359: 6(int) Load 8(invocation) - 360: 332(ptr) AccessChain 34(data) 46 324 - 361: 28(i64vec4) Load 360 - 362:331(i64vec2) VectorShuffle 361 361 0 1 - 363:331(i64vec2) GroupNonUniformBroadcastFirst 42 362 - 364: 332(ptr) AccessChain 34(data) 359 324 - 365: 28(i64vec4) Load 364 - 366: 28(i64vec4) VectorShuffle 365 363 4 5 2 3 - Store 364 366 - 367: 6(int) Load 8(invocation) - 368: 332(ptr) AccessChain 34(data) 57 324 - 369: 28(i64vec4) Load 368 - 370:341(i64vec3) VectorShuffle 369 369 0 1 2 - 371:341(i64vec3) GroupNonUniformBroadcastFirst 42 370 - 372: 332(ptr) AccessChain 34(data) 367 324 - 373: 28(i64vec4) Load 372 - 374: 28(i64vec4) VectorShuffle 373 371 4 5 6 3 - Store 372 374 - 375: 6(int) Load 8(invocation) - 376: 332(ptr) AccessChain 34(data) 67 324 - 377: 28(i64vec4) Load 376 - 378: 28(i64vec4) GroupNonUniformBroadcastFirst 42 377 - 379: 332(ptr) AccessChain 34(data) 375 324 - Store 379 378 - 380: 6(int) Load 8(invocation) - 383: 382(ptr) AccessChain 34(data) 37 381 38 - 384:29(float16_t) Load 383 - 385:29(float16_t) GroupNonUniformBroadcast 42 384 42 - 386: 382(ptr) AccessChain 34(data) 380 381 38 - Store 386 385 - 387: 6(int) Load 8(invocation) - 390: 389(ptr) AccessChain 34(data) 46 381 - 391: 30(f16vec4) Load 390 - 392:388(f16vec2) VectorShuffle 391 391 0 1 - 393:388(f16vec2) GroupNonUniformBroadcast 42 392 42 - 394: 389(ptr) AccessChain 34(data) 387 381 - 395: 30(f16vec4) Load 394 - 396: 30(f16vec4) VectorShuffle 395 393 4 5 2 3 - Store 394 396 - 397: 6(int) Load 8(invocation) - 399: 389(ptr) AccessChain 34(data) 57 381 - 400: 30(f16vec4) Load 399 - 401:398(f16vec3) VectorShuffle 400 400 0 1 2 - 402:398(f16vec3) GroupNonUniformBroadcast 42 401 42 - 403: 389(ptr) AccessChain 34(data) 397 381 - 404: 30(f16vec4) Load 403 - 405: 30(f16vec4) VectorShuffle 404 402 4 5 6 3 - Store 403 405 - 406: 6(int) Load 8(invocation) - 407: 389(ptr) AccessChain 34(data) 67 381 - 408: 30(f16vec4) Load 407 - 409: 30(f16vec4) GroupNonUniformBroadcast 42 408 42 - 410: 389(ptr) AccessChain 34(data) 406 381 - Store 410 409 - 411: 6(int) Load 8(invocation) - 412: 382(ptr) AccessChain 34(data) 37 381 38 - 413:29(float16_t) Load 412 - 414:29(float16_t) GroupNonUniformBroadcastFirst 42 413 - 415: 382(ptr) AccessChain 34(data) 411 381 38 - Store 415 414 - 416: 6(int) Load 8(invocation) - 417: 389(ptr) AccessChain 34(data) 46 381 - 418: 30(f16vec4) Load 417 - 419:388(f16vec2) VectorShuffle 418 418 0 1 - 420:388(f16vec2) GroupNonUniformBroadcastFirst 42 419 - 421: 389(ptr) AccessChain 34(data) 416 381 - 422: 30(f16vec4) Load 421 - 423: 30(f16vec4) VectorShuffle 422 420 4 5 2 3 - Store 421 423 - 424: 6(int) Load 8(invocation) - 425: 389(ptr) AccessChain 34(data) 57 381 - 426: 30(f16vec4) Load 425 - 427:398(f16vec3) VectorShuffle 426 426 0 1 2 - 428:398(f16vec3) GroupNonUniformBroadcastFirst 42 427 - 429: 389(ptr) AccessChain 34(data) 424 381 - 430: 30(f16vec4) Load 429 - 431: 30(f16vec4) VectorShuffle 430 428 4 5 6 3 - Store 429 431 - 432: 6(int) Load 8(invocation) - 433: 389(ptr) AccessChain 34(data) 67 381 - 434: 30(f16vec4) Load 433 - 435: 30(f16vec4) GroupNonUniformBroadcastFirst 42 434 - 436: 389(ptr) AccessChain 34(data) 432 381 + 350: 309(ptr) AccessChain 34(data) 59 301 + 351: 26(i64vec4) Load 350 + 352:319(i64vec3) VectorShuffle 351 351 0 1 2 + 353:319(i64vec3) GroupNonUniformBroadcastFirst 42 352 + 354: 302(ptr) AccessChain 34(data) 349 301 38 + 355: 25(int64_t) CompositeExtract 353 0 + Store 354 355 + 356: 302(ptr) AccessChain 34(data) 349 301 55 + 357: 25(int64_t) CompositeExtract 353 1 + Store 356 357 + 358: 302(ptr) AccessChain 34(data) 349 301 69 + 359: 25(int64_t) CompositeExtract 353 2 + Store 358 359 + 360: 6(int) Load 8(invocation) + 361: 309(ptr) AccessChain 34(data) 73 301 + 362: 26(i64vec4) Load 361 + 363: 26(i64vec4) GroupNonUniformBroadcastFirst 42 362 + 364: 309(ptr) AccessChain 34(data) 360 301 + Store 364 363 + 365: 6(int) Load 8(invocation) + 368: 367(ptr) AccessChain 34(data) 37 366 38 + 369: 27(int64_t) Load 368 + 370: 27(int64_t) GroupNonUniformBroadcast 42 369 42 + 371: 367(ptr) AccessChain 34(data) 365 366 38 + Store 371 370 + 372: 6(int) Load 8(invocation) + 375: 374(ptr) AccessChain 34(data) 46 366 + 376: 28(i64vec4) Load 375 + 377:373(i64vec2) VectorShuffle 376 376 0 1 + 378:373(i64vec2) GroupNonUniformBroadcast 42 377 42 + 379: 367(ptr) AccessChain 34(data) 372 366 38 + 380: 27(int64_t) CompositeExtract 378 0 + Store 379 380 + 381: 367(ptr) AccessChain 34(data) 372 366 55 + 382: 27(int64_t) CompositeExtract 378 1 + Store 381 382 + 383: 6(int) Load 8(invocation) + 385: 374(ptr) AccessChain 34(data) 59 366 + 386: 28(i64vec4) Load 385 + 387:384(i64vec3) VectorShuffle 386 386 0 1 2 + 388:384(i64vec3) GroupNonUniformBroadcast 42 387 42 + 389: 367(ptr) AccessChain 34(data) 383 366 38 + 390: 27(int64_t) CompositeExtract 388 0 + Store 389 390 + 391: 367(ptr) AccessChain 34(data) 383 366 55 + 392: 27(int64_t) CompositeExtract 388 1 + Store 391 392 + 393: 367(ptr) AccessChain 34(data) 383 366 69 + 394: 27(int64_t) CompositeExtract 388 2 + Store 393 394 + 395: 6(int) Load 8(invocation) + 396: 374(ptr) AccessChain 34(data) 73 366 + 397: 28(i64vec4) Load 396 + 398: 28(i64vec4) GroupNonUniformBroadcast 42 397 42 + 399: 374(ptr) AccessChain 34(data) 395 366 + Store 399 398 + 400: 6(int) Load 8(invocation) + 401: 367(ptr) AccessChain 34(data) 37 366 38 + 402: 27(int64_t) Load 401 + 403: 27(int64_t) GroupNonUniformBroadcastFirst 42 402 + 404: 367(ptr) AccessChain 34(data) 400 366 38 + Store 404 403 + 405: 6(int) Load 8(invocation) + 406: 374(ptr) AccessChain 34(data) 46 366 + 407: 28(i64vec4) Load 406 + 408:373(i64vec2) VectorShuffle 407 407 0 1 + 409:373(i64vec2) GroupNonUniformBroadcastFirst 42 408 + 410: 367(ptr) AccessChain 34(data) 405 366 38 + 411: 27(int64_t) CompositeExtract 409 0 + Store 410 411 + 412: 367(ptr) AccessChain 34(data) 405 366 55 + 413: 27(int64_t) CompositeExtract 409 1 + Store 412 413 + 414: 6(int) Load 8(invocation) + 415: 374(ptr) AccessChain 34(data) 59 366 + 416: 28(i64vec4) Load 415 + 417:384(i64vec3) VectorShuffle 416 416 0 1 2 + 418:384(i64vec3) GroupNonUniformBroadcastFirst 42 417 + 419: 367(ptr) AccessChain 34(data) 414 366 38 + 420: 27(int64_t) CompositeExtract 418 0 + Store 419 420 + 421: 367(ptr) AccessChain 34(data) 414 366 55 + 422: 27(int64_t) CompositeExtract 418 1 + Store 421 422 + 423: 367(ptr) AccessChain 34(data) 414 366 69 + 424: 27(int64_t) CompositeExtract 418 2 + Store 423 424 + 425: 6(int) Load 8(invocation) + 426: 374(ptr) AccessChain 34(data) 73 366 + 427: 28(i64vec4) Load 426 + 428: 28(i64vec4) GroupNonUniformBroadcastFirst 42 427 + 429: 374(ptr) AccessChain 34(data) 425 366 + Store 429 428 + 430: 6(int) Load 8(invocation) + 433: 432(ptr) AccessChain 34(data) 37 431 38 + 434:29(float16_t) Load 433 + 435:29(float16_t) GroupNonUniformBroadcast 42 434 42 + 436: 432(ptr) AccessChain 34(data) 430 431 38 Store 436 435 + 437: 6(int) Load 8(invocation) + 440: 439(ptr) AccessChain 34(data) 46 431 + 441: 30(f16vec4) Load 440 + 442:438(f16vec2) VectorShuffle 441 441 0 1 + 443:438(f16vec2) GroupNonUniformBroadcast 42 442 42 + 444: 432(ptr) AccessChain 34(data) 437 431 38 + 445:29(float16_t) CompositeExtract 443 0 + Store 444 445 + 446: 432(ptr) AccessChain 34(data) 437 431 55 + 447:29(float16_t) CompositeExtract 443 1 + Store 446 447 + 448: 6(int) Load 8(invocation) + 450: 439(ptr) AccessChain 34(data) 59 431 + 451: 30(f16vec4) Load 450 + 452:449(f16vec3) VectorShuffle 451 451 0 1 2 + 453:449(f16vec3) GroupNonUniformBroadcast 42 452 42 + 454: 432(ptr) AccessChain 34(data) 448 431 38 + 455:29(float16_t) CompositeExtract 453 0 + Store 454 455 + 456: 432(ptr) AccessChain 34(data) 448 431 55 + 457:29(float16_t) CompositeExtract 453 1 + Store 456 457 + 458: 432(ptr) AccessChain 34(data) 448 431 69 + 459:29(float16_t) CompositeExtract 453 2 + Store 458 459 + 460: 6(int) Load 8(invocation) + 461: 439(ptr) AccessChain 34(data) 73 431 + 462: 30(f16vec4) Load 461 + 463: 30(f16vec4) GroupNonUniformBroadcast 42 462 42 + 464: 439(ptr) AccessChain 34(data) 460 431 + Store 464 463 + 465: 6(int) Load 8(invocation) + 466: 432(ptr) AccessChain 34(data) 37 431 38 + 467:29(float16_t) Load 466 + 468:29(float16_t) GroupNonUniformBroadcastFirst 42 467 + 469: 432(ptr) AccessChain 34(data) 465 431 38 + Store 469 468 + 470: 6(int) Load 8(invocation) + 471: 439(ptr) AccessChain 34(data) 46 431 + 472: 30(f16vec4) Load 471 + 473:438(f16vec2) VectorShuffle 472 472 0 1 + 474:438(f16vec2) GroupNonUniformBroadcastFirst 42 473 + 475: 432(ptr) AccessChain 34(data) 470 431 38 + 476:29(float16_t) CompositeExtract 474 0 + Store 475 476 + 477: 432(ptr) AccessChain 34(data) 470 431 55 + 478:29(float16_t) CompositeExtract 474 1 + Store 477 478 + 479: 6(int) Load 8(invocation) + 480: 439(ptr) AccessChain 34(data) 59 431 + 481: 30(f16vec4) Load 480 + 482:449(f16vec3) VectorShuffle 481 481 0 1 2 + 483:449(f16vec3) GroupNonUniformBroadcastFirst 42 482 + 484: 432(ptr) AccessChain 34(data) 479 431 38 + 485:29(float16_t) CompositeExtract 483 0 + Store 484 485 + 486: 432(ptr) AccessChain 34(data) 479 431 55 + 487:29(float16_t) CompositeExtract 483 1 + Store 486 487 + 488: 432(ptr) AccessChain 34(data) 479 431 69 + 489:29(float16_t) CompositeExtract 483 2 + Store 488 489 + 490: 6(int) Load 8(invocation) + 491: 439(ptr) AccessChain 34(data) 73 431 + 492: 30(f16vec4) Load 491 + 493: 30(f16vec4) GroupNonUniformBroadcastFirst 42 492 + 494: 439(ptr) AccessChain 34(data) 490 431 + Store 494 493 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out index 2f4393ae1f..98a7a89011 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesClustered.comp.out @@ -1,7 +1,7 @@ spv.subgroupExtendedTypesClustered.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 1273 +// Id's are bound by 1458 Capability Shader Capability Float16 @@ -59,7 +59,7 @@ spv.subgroupExtendedTypesClustered.comp Decorate 31(Buffers) Block Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 - Decorate 1272 BuiltIn WorkgroupSize + Decorate 1457 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -95,39 +95,40 @@ spv.subgroupExtendedTypesClustered.comp 47: 36(int) Constant 1 48: TypeVector 17(int8_t) 2 49: TypePointer StorageBuffer 18(i8vec4) - 58: 36(int) Constant 2 - 59: TypeVector 17(int8_t) 3 - 68: 36(int) Constant 3 - 230: TypePointer StorageBuffer 19(int8_t) - 236: TypeVector 19(int8_t) 2 - 237: TypePointer StorageBuffer 20(i8vec4) - 246: TypeVector 19(int8_t) 3 - 416: TypePointer StorageBuffer 21(int16_t) - 422: TypeVector 21(int16_t) 2 - 423: TypePointer StorageBuffer 22(i16vec4) - 432: TypeVector 21(int16_t) 3 - 602: TypePointer StorageBuffer 23(int16_t) - 608: TypeVector 23(int16_t) 2 - 609: TypePointer StorageBuffer 24(i16vec4) - 618: TypeVector 23(int16_t) 3 - 788: 36(int) Constant 4 - 789: TypePointer StorageBuffer 25(int64_t) - 795: TypeVector 25(int64_t) 2 - 796: TypePointer StorageBuffer 26(i64vec4) - 805: TypeVector 25(int64_t) 3 - 975: 36(int) Constant 5 - 976: TypePointer StorageBuffer 27(int64_t) - 982: TypeVector 27(int64_t) 2 - 983: TypePointer StorageBuffer 28(i64vec4) - 992: TypeVector 27(int64_t) 3 - 1162: 36(int) Constant 6 - 1163: TypePointer StorageBuffer 29(float16_t) - 1169: TypeVector 29(float16_t) 2 - 1170: TypePointer StorageBuffer 30(f16vec4) - 1179: TypeVector 29(float16_t) 3 - 1270: TypeVector 6(int) 3 - 1271: 6(int) Constant 8 - 1272: 1270(ivec3) ConstantComposite 1271 42 42 + 59: 36(int) Constant 2 + 60: TypeVector 17(int8_t) 3 + 69: 6(int) Constant 2 + 73: 36(int) Constant 3 + 259: TypePointer StorageBuffer 19(int8_t) + 265: TypeVector 19(int8_t) 2 + 266: TypePointer StorageBuffer 20(i8vec4) + 276: TypeVector 19(int8_t) 3 + 473: TypePointer StorageBuffer 21(int16_t) + 479: TypeVector 21(int16_t) 2 + 480: TypePointer StorageBuffer 22(i16vec4) + 490: TypeVector 21(int16_t) 3 + 687: TypePointer StorageBuffer 23(int16_t) + 693: TypeVector 23(int16_t) 2 + 694: TypePointer StorageBuffer 24(i16vec4) + 704: TypeVector 23(int16_t) 3 + 901: 36(int) Constant 4 + 902: TypePointer StorageBuffer 25(int64_t) + 908: TypeVector 25(int64_t) 2 + 909: TypePointer StorageBuffer 26(i64vec4) + 919: TypeVector 25(int64_t) 3 + 1116: 36(int) Constant 5 + 1117: TypePointer StorageBuffer 27(int64_t) + 1123: TypeVector 27(int64_t) 2 + 1124: TypePointer StorageBuffer 28(i64vec4) + 1134: TypeVector 27(int64_t) 3 + 1331: 36(int) Constant 6 + 1332: TypePointer StorageBuffer 29(float16_t) + 1338: TypeVector 29(float16_t) 2 + 1339: TypePointer StorageBuffer 30(f16vec4) + 1349: TypeVector 29(float16_t) 3 + 1455: TypeVector 6(int) 3 + 1456: 6(int) Constant 8 + 1457: 1455(ivec3) ConstantComposite 1456 42 42 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -147,1374 +148,1696 @@ spv.subgroupExtendedTypesClustered.comp 51: 18(i8vec4) Load 50 52: 48(i8vec2) VectorShuffle 51 51 0 1 53: 48(i8vec2) GroupNonUniformIAdd 43 ClusteredReduce 52 42 - 54: 49(ptr) AccessChain 34(data) 46 37 - 55: 18(i8vec4) Load 54 - 56: 18(i8vec4) VectorShuffle 55 53 4 5 2 3 - Store 54 56 - 57: 6(int) Load 8(invocation) - 60: 49(ptr) AccessChain 34(data) 58 37 - 61: 18(i8vec4) Load 60 - 62: 59(i8vec3) VectorShuffle 61 61 0 1 2 - 63: 59(i8vec3) GroupNonUniformIAdd 43 ClusteredReduce 62 42 - 64: 49(ptr) AccessChain 34(data) 57 37 - 65: 18(i8vec4) Load 64 - 66: 18(i8vec4) VectorShuffle 65 63 4 5 6 3 - Store 64 66 - 67: 6(int) Load 8(invocation) - 69: 49(ptr) AccessChain 34(data) 68 37 - 70: 18(i8vec4) Load 69 - 71: 18(i8vec4) GroupNonUniformIAdd 43 ClusteredReduce 70 42 - 72: 49(ptr) AccessChain 34(data) 67 37 - Store 72 71 - 73: 6(int) Load 8(invocation) - 74: 39(ptr) AccessChain 34(data) 37 37 38 - 75: 17(int8_t) Load 74 - 76: 17(int8_t) GroupNonUniformIMul 43 ClusteredReduce 75 42 - 77: 39(ptr) AccessChain 34(data) 73 37 38 + 54: 39(ptr) AccessChain 34(data) 46 37 38 + 55: 17(int8_t) CompositeExtract 53 0 + Store 54 55 + 56: 39(ptr) AccessChain 34(data) 46 37 42 + 57: 17(int8_t) CompositeExtract 53 1 + Store 56 57 + 58: 6(int) Load 8(invocation) + 61: 49(ptr) AccessChain 34(data) 59 37 + 62: 18(i8vec4) Load 61 + 63: 60(i8vec3) VectorShuffle 62 62 0 1 2 + 64: 60(i8vec3) GroupNonUniformIAdd 43 ClusteredReduce 63 42 + 65: 39(ptr) AccessChain 34(data) 58 37 38 + 66: 17(int8_t) CompositeExtract 64 0 + Store 65 66 + 67: 39(ptr) AccessChain 34(data) 58 37 42 + 68: 17(int8_t) CompositeExtract 64 1 + Store 67 68 + 70: 39(ptr) AccessChain 34(data) 58 37 69 + 71: 17(int8_t) CompositeExtract 64 2 + Store 70 71 + 72: 6(int) Load 8(invocation) + 74: 49(ptr) AccessChain 34(data) 73 37 + 75: 18(i8vec4) Load 74 + 76: 18(i8vec4) GroupNonUniformIAdd 43 ClusteredReduce 75 42 + 77: 49(ptr) AccessChain 34(data) 72 37 Store 77 76 78: 6(int) Load 8(invocation) - 79: 49(ptr) AccessChain 34(data) 47 37 - 80: 18(i8vec4) Load 79 - 81: 48(i8vec2) VectorShuffle 80 80 0 1 - 82: 48(i8vec2) GroupNonUniformIMul 43 ClusteredReduce 81 42 - 83: 49(ptr) AccessChain 34(data) 78 37 - 84: 18(i8vec4) Load 83 - 85: 18(i8vec4) VectorShuffle 84 82 4 5 2 3 - Store 83 85 - 86: 6(int) Load 8(invocation) - 87: 49(ptr) AccessChain 34(data) 58 37 - 88: 18(i8vec4) Load 87 - 89: 59(i8vec3) VectorShuffle 88 88 0 1 2 - 90: 59(i8vec3) GroupNonUniformIMul 43 ClusteredReduce 89 42 - 91: 49(ptr) AccessChain 34(data) 86 37 - 92: 18(i8vec4) Load 91 - 93: 18(i8vec4) VectorShuffle 92 90 4 5 6 3 - Store 91 93 - 94: 6(int) Load 8(invocation) - 95: 49(ptr) AccessChain 34(data) 68 37 - 96: 18(i8vec4) Load 95 - 97: 18(i8vec4) GroupNonUniformIMul 43 ClusteredReduce 96 42 - 98: 49(ptr) AccessChain 34(data) 94 37 - Store 98 97 - 99: 6(int) Load 8(invocation) - 100: 39(ptr) AccessChain 34(data) 37 37 38 - 101: 17(int8_t) Load 100 - 102: 17(int8_t) GroupNonUniformSMin 43 ClusteredReduce 101 42 - 103: 39(ptr) AccessChain 34(data) 99 37 38 - Store 103 102 - 104: 6(int) Load 8(invocation) - 105: 49(ptr) AccessChain 34(data) 47 37 - 106: 18(i8vec4) Load 105 - 107: 48(i8vec2) VectorShuffle 106 106 0 1 - 108: 48(i8vec2) GroupNonUniformSMin 43 ClusteredReduce 107 42 - 109: 49(ptr) AccessChain 34(data) 104 37 - 110: 18(i8vec4) Load 109 - 111: 18(i8vec4) VectorShuffle 110 108 4 5 2 3 - Store 109 111 - 112: 6(int) Load 8(invocation) - 113: 49(ptr) AccessChain 34(data) 58 37 - 114: 18(i8vec4) Load 113 - 115: 59(i8vec3) VectorShuffle 114 114 0 1 2 - 116: 59(i8vec3) GroupNonUniformSMin 43 ClusteredReduce 115 42 - 117: 49(ptr) AccessChain 34(data) 112 37 - 118: 18(i8vec4) Load 117 - 119: 18(i8vec4) VectorShuffle 118 116 4 5 6 3 - Store 117 119 - 120: 6(int) Load 8(invocation) - 121: 49(ptr) AccessChain 34(data) 68 37 - 122: 18(i8vec4) Load 121 - 123: 18(i8vec4) GroupNonUniformSMin 43 ClusteredReduce 122 42 - 124: 49(ptr) AccessChain 34(data) 120 37 - Store 124 123 - 125: 6(int) Load 8(invocation) - 126: 39(ptr) AccessChain 34(data) 37 37 38 - 127: 17(int8_t) Load 126 - 128: 17(int8_t) GroupNonUniformSMax 43 ClusteredReduce 127 42 - 129: 39(ptr) AccessChain 34(data) 125 37 38 - Store 129 128 - 130: 6(int) Load 8(invocation) - 131: 49(ptr) AccessChain 34(data) 47 37 - 132: 18(i8vec4) Load 131 - 133: 48(i8vec2) VectorShuffle 132 132 0 1 - 134: 48(i8vec2) GroupNonUniformSMax 43 ClusteredReduce 133 42 - 135: 49(ptr) AccessChain 34(data) 130 37 - 136: 18(i8vec4) Load 135 - 137: 18(i8vec4) VectorShuffle 136 134 4 5 2 3 - Store 135 137 + 79: 39(ptr) AccessChain 34(data) 37 37 38 + 80: 17(int8_t) Load 79 + 81: 17(int8_t) GroupNonUniformIMul 43 ClusteredReduce 80 42 + 82: 39(ptr) AccessChain 34(data) 78 37 38 + Store 82 81 + 83: 6(int) Load 8(invocation) + 84: 49(ptr) AccessChain 34(data) 47 37 + 85: 18(i8vec4) Load 84 + 86: 48(i8vec2) VectorShuffle 85 85 0 1 + 87: 48(i8vec2) GroupNonUniformIMul 43 ClusteredReduce 86 42 + 88: 39(ptr) AccessChain 34(data) 83 37 38 + 89: 17(int8_t) CompositeExtract 87 0 + Store 88 89 + 90: 39(ptr) AccessChain 34(data) 83 37 42 + 91: 17(int8_t) CompositeExtract 87 1 + Store 90 91 + 92: 6(int) Load 8(invocation) + 93: 49(ptr) AccessChain 34(data) 59 37 + 94: 18(i8vec4) Load 93 + 95: 60(i8vec3) VectorShuffle 94 94 0 1 2 + 96: 60(i8vec3) GroupNonUniformIMul 43 ClusteredReduce 95 42 + 97: 39(ptr) AccessChain 34(data) 92 37 38 + 98: 17(int8_t) CompositeExtract 96 0 + Store 97 98 + 99: 39(ptr) AccessChain 34(data) 92 37 42 + 100: 17(int8_t) CompositeExtract 96 1 + Store 99 100 + 101: 39(ptr) AccessChain 34(data) 92 37 69 + 102: 17(int8_t) CompositeExtract 96 2 + Store 101 102 + 103: 6(int) Load 8(invocation) + 104: 49(ptr) AccessChain 34(data) 73 37 + 105: 18(i8vec4) Load 104 + 106: 18(i8vec4) GroupNonUniformIMul 43 ClusteredReduce 105 42 + 107: 49(ptr) AccessChain 34(data) 103 37 + Store 107 106 + 108: 6(int) Load 8(invocation) + 109: 39(ptr) AccessChain 34(data) 37 37 38 + 110: 17(int8_t) Load 109 + 111: 17(int8_t) GroupNonUniformSMin 43 ClusteredReduce 110 42 + 112: 39(ptr) AccessChain 34(data) 108 37 38 + Store 112 111 + 113: 6(int) Load 8(invocation) + 114: 49(ptr) AccessChain 34(data) 47 37 + 115: 18(i8vec4) Load 114 + 116: 48(i8vec2) VectorShuffle 115 115 0 1 + 117: 48(i8vec2) GroupNonUniformSMin 43 ClusteredReduce 116 42 + 118: 39(ptr) AccessChain 34(data) 113 37 38 + 119: 17(int8_t) CompositeExtract 117 0 + Store 118 119 + 120: 39(ptr) AccessChain 34(data) 113 37 42 + 121: 17(int8_t) CompositeExtract 117 1 + Store 120 121 + 122: 6(int) Load 8(invocation) + 123: 49(ptr) AccessChain 34(data) 59 37 + 124: 18(i8vec4) Load 123 + 125: 60(i8vec3) VectorShuffle 124 124 0 1 2 + 126: 60(i8vec3) GroupNonUniformSMin 43 ClusteredReduce 125 42 + 127: 39(ptr) AccessChain 34(data) 122 37 38 + 128: 17(int8_t) CompositeExtract 126 0 + Store 127 128 + 129: 39(ptr) AccessChain 34(data) 122 37 42 + 130: 17(int8_t) CompositeExtract 126 1 + Store 129 130 + 131: 39(ptr) AccessChain 34(data) 122 37 69 + 132: 17(int8_t) CompositeExtract 126 2 + Store 131 132 + 133: 6(int) Load 8(invocation) + 134: 49(ptr) AccessChain 34(data) 73 37 + 135: 18(i8vec4) Load 134 + 136: 18(i8vec4) GroupNonUniformSMin 43 ClusteredReduce 135 42 + 137: 49(ptr) AccessChain 34(data) 133 37 + Store 137 136 138: 6(int) Load 8(invocation) - 139: 49(ptr) AccessChain 34(data) 58 37 - 140: 18(i8vec4) Load 139 - 141: 59(i8vec3) VectorShuffle 140 140 0 1 2 - 142: 59(i8vec3) GroupNonUniformSMax 43 ClusteredReduce 141 42 - 143: 49(ptr) AccessChain 34(data) 138 37 - 144: 18(i8vec4) Load 143 - 145: 18(i8vec4) VectorShuffle 144 142 4 5 6 3 - Store 143 145 - 146: 6(int) Load 8(invocation) - 147: 49(ptr) AccessChain 34(data) 68 37 - 148: 18(i8vec4) Load 147 - 149: 18(i8vec4) GroupNonUniformSMax 43 ClusteredReduce 148 42 - 150: 49(ptr) AccessChain 34(data) 146 37 - Store 150 149 - 151: 6(int) Load 8(invocation) - 152: 39(ptr) AccessChain 34(data) 37 37 38 - 153: 17(int8_t) Load 152 - 154: 17(int8_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 153 42 - 155: 39(ptr) AccessChain 34(data) 151 37 38 - Store 155 154 - 156: 6(int) Load 8(invocation) - 157: 49(ptr) AccessChain 34(data) 47 37 - 158: 18(i8vec4) Load 157 - 159: 48(i8vec2) VectorShuffle 158 158 0 1 - 160: 48(i8vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 159 42 - 161: 49(ptr) AccessChain 34(data) 156 37 - 162: 18(i8vec4) Load 161 - 163: 18(i8vec4) VectorShuffle 162 160 4 5 2 3 - Store 161 163 - 164: 6(int) Load 8(invocation) - 165: 49(ptr) AccessChain 34(data) 58 37 - 166: 18(i8vec4) Load 165 - 167: 59(i8vec3) VectorShuffle 166 166 0 1 2 - 168: 59(i8vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 167 42 - 169: 49(ptr) AccessChain 34(data) 164 37 - 170: 18(i8vec4) Load 169 - 171: 18(i8vec4) VectorShuffle 170 168 4 5 6 3 - Store 169 171 - 172: 6(int) Load 8(invocation) - 173: 49(ptr) AccessChain 34(data) 68 37 - 174: 18(i8vec4) Load 173 - 175: 18(i8vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 174 42 - 176: 49(ptr) AccessChain 34(data) 172 37 - Store 176 175 - 177: 6(int) Load 8(invocation) - 178: 39(ptr) AccessChain 34(data) 37 37 38 - 179: 17(int8_t) Load 178 - 180: 17(int8_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 179 42 - 181: 39(ptr) AccessChain 34(data) 177 37 38 - Store 181 180 + 139: 39(ptr) AccessChain 34(data) 37 37 38 + 140: 17(int8_t) Load 139 + 141: 17(int8_t) GroupNonUniformSMax 43 ClusteredReduce 140 42 + 142: 39(ptr) AccessChain 34(data) 138 37 38 + Store 142 141 + 143: 6(int) Load 8(invocation) + 144: 49(ptr) AccessChain 34(data) 47 37 + 145: 18(i8vec4) Load 144 + 146: 48(i8vec2) VectorShuffle 145 145 0 1 + 147: 48(i8vec2) GroupNonUniformSMax 43 ClusteredReduce 146 42 + 148: 39(ptr) AccessChain 34(data) 143 37 38 + 149: 17(int8_t) CompositeExtract 147 0 + Store 148 149 + 150: 39(ptr) AccessChain 34(data) 143 37 42 + 151: 17(int8_t) CompositeExtract 147 1 + Store 150 151 + 152: 6(int) Load 8(invocation) + 153: 49(ptr) AccessChain 34(data) 59 37 + 154: 18(i8vec4) Load 153 + 155: 60(i8vec3) VectorShuffle 154 154 0 1 2 + 156: 60(i8vec3) GroupNonUniformSMax 43 ClusteredReduce 155 42 + 157: 39(ptr) AccessChain 34(data) 152 37 38 + 158: 17(int8_t) CompositeExtract 156 0 + Store 157 158 + 159: 39(ptr) AccessChain 34(data) 152 37 42 + 160: 17(int8_t) CompositeExtract 156 1 + Store 159 160 + 161: 39(ptr) AccessChain 34(data) 152 37 69 + 162: 17(int8_t) CompositeExtract 156 2 + Store 161 162 + 163: 6(int) Load 8(invocation) + 164: 49(ptr) AccessChain 34(data) 73 37 + 165: 18(i8vec4) Load 164 + 166: 18(i8vec4) GroupNonUniformSMax 43 ClusteredReduce 165 42 + 167: 49(ptr) AccessChain 34(data) 163 37 + Store 167 166 + 168: 6(int) Load 8(invocation) + 169: 39(ptr) AccessChain 34(data) 37 37 38 + 170: 17(int8_t) Load 169 + 171: 17(int8_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 170 42 + 172: 39(ptr) AccessChain 34(data) 168 37 38 + Store 172 171 + 173: 6(int) Load 8(invocation) + 174: 49(ptr) AccessChain 34(data) 47 37 + 175: 18(i8vec4) Load 174 + 176: 48(i8vec2) VectorShuffle 175 175 0 1 + 177: 48(i8vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 176 42 + 178: 39(ptr) AccessChain 34(data) 173 37 38 + 179: 17(int8_t) CompositeExtract 177 0 + Store 178 179 + 180: 39(ptr) AccessChain 34(data) 173 37 42 + 181: 17(int8_t) CompositeExtract 177 1 + Store 180 181 182: 6(int) Load 8(invocation) - 183: 49(ptr) AccessChain 34(data) 47 37 + 183: 49(ptr) AccessChain 34(data) 59 37 184: 18(i8vec4) Load 183 - 185: 48(i8vec2) VectorShuffle 184 184 0 1 - 186: 48(i8vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 185 42 - 187: 49(ptr) AccessChain 34(data) 182 37 - 188: 18(i8vec4) Load 187 - 189: 18(i8vec4) VectorShuffle 188 186 4 5 2 3 - Store 187 189 - 190: 6(int) Load 8(invocation) - 191: 49(ptr) AccessChain 34(data) 58 37 - 192: 18(i8vec4) Load 191 - 193: 59(i8vec3) VectorShuffle 192 192 0 1 2 - 194: 59(i8vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 193 42 - 195: 49(ptr) AccessChain 34(data) 190 37 - 196: 18(i8vec4) Load 195 - 197: 18(i8vec4) VectorShuffle 196 194 4 5 6 3 - Store 195 197 + 185: 60(i8vec3) VectorShuffle 184 184 0 1 2 + 186: 60(i8vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 185 42 + 187: 39(ptr) AccessChain 34(data) 182 37 38 + 188: 17(int8_t) CompositeExtract 186 0 + Store 187 188 + 189: 39(ptr) AccessChain 34(data) 182 37 42 + 190: 17(int8_t) CompositeExtract 186 1 + Store 189 190 + 191: 39(ptr) AccessChain 34(data) 182 37 69 + 192: 17(int8_t) CompositeExtract 186 2 + Store 191 192 + 193: 6(int) Load 8(invocation) + 194: 49(ptr) AccessChain 34(data) 73 37 + 195: 18(i8vec4) Load 194 + 196: 18(i8vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 195 42 + 197: 49(ptr) AccessChain 34(data) 193 37 + Store 197 196 198: 6(int) Load 8(invocation) - 199: 49(ptr) AccessChain 34(data) 68 37 - 200: 18(i8vec4) Load 199 - 201: 18(i8vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 200 42 - 202: 49(ptr) AccessChain 34(data) 198 37 + 199: 39(ptr) AccessChain 34(data) 37 37 38 + 200: 17(int8_t) Load 199 + 201: 17(int8_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 200 42 + 202: 39(ptr) AccessChain 34(data) 198 37 38 Store 202 201 203: 6(int) Load 8(invocation) - 204: 39(ptr) AccessChain 34(data) 37 37 38 - 205: 17(int8_t) Load 204 - 206: 17(int8_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 205 42 - 207: 39(ptr) AccessChain 34(data) 203 37 38 - Store 207 206 - 208: 6(int) Load 8(invocation) - 209: 49(ptr) AccessChain 34(data) 47 37 - 210: 18(i8vec4) Load 209 - 211: 48(i8vec2) VectorShuffle 210 210 0 1 - 212: 48(i8vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 211 42 - 213: 49(ptr) AccessChain 34(data) 208 37 + 204: 49(ptr) AccessChain 34(data) 47 37 + 205: 18(i8vec4) Load 204 + 206: 48(i8vec2) VectorShuffle 205 205 0 1 + 207: 48(i8vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 206 42 + 208: 39(ptr) AccessChain 34(data) 203 37 38 + 209: 17(int8_t) CompositeExtract 207 0 + Store 208 209 + 210: 39(ptr) AccessChain 34(data) 203 37 42 + 211: 17(int8_t) CompositeExtract 207 1 + Store 210 211 + 212: 6(int) Load 8(invocation) + 213: 49(ptr) AccessChain 34(data) 59 37 214: 18(i8vec4) Load 213 - 215: 18(i8vec4) VectorShuffle 214 212 4 5 2 3 - Store 213 215 - 216: 6(int) Load 8(invocation) - 217: 49(ptr) AccessChain 34(data) 58 37 - 218: 18(i8vec4) Load 217 - 219: 59(i8vec3) VectorShuffle 218 218 0 1 2 - 220: 59(i8vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 219 42 - 221: 49(ptr) AccessChain 34(data) 216 37 - 222: 18(i8vec4) Load 221 - 223: 18(i8vec4) VectorShuffle 222 220 4 5 6 3 - Store 221 223 - 224: 6(int) Load 8(invocation) - 225: 49(ptr) AccessChain 34(data) 68 37 - 226: 18(i8vec4) Load 225 - 227: 18(i8vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 226 42 - 228: 49(ptr) AccessChain 34(data) 224 37 - Store 228 227 - 229: 6(int) Load 8(invocation) - 231: 230(ptr) AccessChain 34(data) 37 47 38 - 232: 19(int8_t) Load 231 - 233: 19(int8_t) GroupNonUniformIAdd 43 ClusteredReduce 232 42 - 234: 230(ptr) AccessChain 34(data) 229 47 38 - Store 234 233 - 235: 6(int) Load 8(invocation) - 238: 237(ptr) AccessChain 34(data) 47 47 - 239: 20(i8vec4) Load 238 - 240: 236(i8vec2) VectorShuffle 239 239 0 1 - 241: 236(i8vec2) GroupNonUniformIAdd 43 ClusteredReduce 240 42 - 242: 237(ptr) AccessChain 34(data) 235 47 - 243: 20(i8vec4) Load 242 - 244: 20(i8vec4) VectorShuffle 243 241 4 5 2 3 - Store 242 244 - 245: 6(int) Load 8(invocation) - 247: 237(ptr) AccessChain 34(data) 58 47 - 248: 20(i8vec4) Load 247 - 249: 246(i8vec3) VectorShuffle 248 248 0 1 2 - 250: 246(i8vec3) GroupNonUniformIAdd 43 ClusteredReduce 249 42 - 251: 237(ptr) AccessChain 34(data) 245 47 - 252: 20(i8vec4) Load 251 - 253: 20(i8vec4) VectorShuffle 252 250 4 5 6 3 - Store 251 253 - 254: 6(int) Load 8(invocation) - 255: 237(ptr) AccessChain 34(data) 68 47 - 256: 20(i8vec4) Load 255 - 257: 20(i8vec4) GroupNonUniformIAdd 43 ClusteredReduce 256 42 - 258: 237(ptr) AccessChain 34(data) 254 47 - Store 258 257 - 259: 6(int) Load 8(invocation) - 260: 230(ptr) AccessChain 34(data) 37 47 38 + 215: 60(i8vec3) VectorShuffle 214 214 0 1 2 + 216: 60(i8vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 215 42 + 217: 39(ptr) AccessChain 34(data) 212 37 38 + 218: 17(int8_t) CompositeExtract 216 0 + Store 217 218 + 219: 39(ptr) AccessChain 34(data) 212 37 42 + 220: 17(int8_t) CompositeExtract 216 1 + Store 219 220 + 221: 39(ptr) AccessChain 34(data) 212 37 69 + 222: 17(int8_t) CompositeExtract 216 2 + Store 221 222 + 223: 6(int) Load 8(invocation) + 224: 49(ptr) AccessChain 34(data) 73 37 + 225: 18(i8vec4) Load 224 + 226: 18(i8vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 225 42 + 227: 49(ptr) AccessChain 34(data) 223 37 + Store 227 226 + 228: 6(int) Load 8(invocation) + 229: 39(ptr) AccessChain 34(data) 37 37 38 + 230: 17(int8_t) Load 229 + 231: 17(int8_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 230 42 + 232: 39(ptr) AccessChain 34(data) 228 37 38 + Store 232 231 + 233: 6(int) Load 8(invocation) + 234: 49(ptr) AccessChain 34(data) 47 37 + 235: 18(i8vec4) Load 234 + 236: 48(i8vec2) VectorShuffle 235 235 0 1 + 237: 48(i8vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 236 42 + 238: 39(ptr) AccessChain 34(data) 233 37 38 + 239: 17(int8_t) CompositeExtract 237 0 + Store 238 239 + 240: 39(ptr) AccessChain 34(data) 233 37 42 + 241: 17(int8_t) CompositeExtract 237 1 + Store 240 241 + 242: 6(int) Load 8(invocation) + 243: 49(ptr) AccessChain 34(data) 59 37 + 244: 18(i8vec4) Load 243 + 245: 60(i8vec3) VectorShuffle 244 244 0 1 2 + 246: 60(i8vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 245 42 + 247: 39(ptr) AccessChain 34(data) 242 37 38 + 248: 17(int8_t) CompositeExtract 246 0 + Store 247 248 + 249: 39(ptr) AccessChain 34(data) 242 37 42 + 250: 17(int8_t) CompositeExtract 246 1 + Store 249 250 + 251: 39(ptr) AccessChain 34(data) 242 37 69 + 252: 17(int8_t) CompositeExtract 246 2 + Store 251 252 + 253: 6(int) Load 8(invocation) + 254: 49(ptr) AccessChain 34(data) 73 37 + 255: 18(i8vec4) Load 254 + 256: 18(i8vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 255 42 + 257: 49(ptr) AccessChain 34(data) 253 37 + Store 257 256 + 258: 6(int) Load 8(invocation) + 260: 259(ptr) AccessChain 34(data) 37 47 38 261: 19(int8_t) Load 260 - 262: 19(int8_t) GroupNonUniformIMul 43 ClusteredReduce 261 42 - 263: 230(ptr) AccessChain 34(data) 259 47 38 + 262: 19(int8_t) GroupNonUniformIAdd 43 ClusteredReduce 261 42 + 263: 259(ptr) AccessChain 34(data) 258 47 38 Store 263 262 264: 6(int) Load 8(invocation) - 265: 237(ptr) AccessChain 34(data) 47 47 - 266: 20(i8vec4) Load 265 - 267: 236(i8vec2) VectorShuffle 266 266 0 1 - 268: 236(i8vec2) GroupNonUniformIMul 43 ClusteredReduce 267 42 - 269: 237(ptr) AccessChain 34(data) 264 47 - 270: 20(i8vec4) Load 269 - 271: 20(i8vec4) VectorShuffle 270 268 4 5 2 3 - Store 269 271 - 272: 6(int) Load 8(invocation) - 273: 237(ptr) AccessChain 34(data) 58 47 - 274: 20(i8vec4) Load 273 - 275: 246(i8vec3) VectorShuffle 274 274 0 1 2 - 276: 246(i8vec3) GroupNonUniformIMul 43 ClusteredReduce 275 42 - 277: 237(ptr) AccessChain 34(data) 272 47 + 267: 266(ptr) AccessChain 34(data) 47 47 + 268: 20(i8vec4) Load 267 + 269: 265(i8vec2) VectorShuffle 268 268 0 1 + 270: 265(i8vec2) GroupNonUniformIAdd 43 ClusteredReduce 269 42 + 271: 259(ptr) AccessChain 34(data) 264 47 38 + 272: 19(int8_t) CompositeExtract 270 0 + Store 271 272 + 273: 259(ptr) AccessChain 34(data) 264 47 42 + 274: 19(int8_t) CompositeExtract 270 1 + Store 273 274 + 275: 6(int) Load 8(invocation) + 277: 266(ptr) AccessChain 34(data) 59 47 278: 20(i8vec4) Load 277 - 279: 20(i8vec4) VectorShuffle 278 276 4 5 6 3 - Store 277 279 - 280: 6(int) Load 8(invocation) - 281: 237(ptr) AccessChain 34(data) 68 47 - 282: 20(i8vec4) Load 281 - 283: 20(i8vec4) GroupNonUniformIMul 43 ClusteredReduce 282 42 - 284: 237(ptr) AccessChain 34(data) 280 47 - Store 284 283 - 285: 6(int) Load 8(invocation) - 286: 230(ptr) AccessChain 34(data) 37 47 38 - 287: 19(int8_t) Load 286 - 288: 19(int8_t) GroupNonUniformUMin 43 ClusteredReduce 287 42 - 289: 230(ptr) AccessChain 34(data) 285 47 38 - Store 289 288 - 290: 6(int) Load 8(invocation) - 291: 237(ptr) AccessChain 34(data) 47 47 - 292: 20(i8vec4) Load 291 - 293: 236(i8vec2) VectorShuffle 292 292 0 1 - 294: 236(i8vec2) GroupNonUniformUMin 43 ClusteredReduce 293 42 - 295: 237(ptr) AccessChain 34(data) 290 47 - 296: 20(i8vec4) Load 295 - 297: 20(i8vec4) VectorShuffle 296 294 4 5 2 3 - Store 295 297 - 298: 6(int) Load 8(invocation) - 299: 237(ptr) AccessChain 34(data) 58 47 - 300: 20(i8vec4) Load 299 - 301: 246(i8vec3) VectorShuffle 300 300 0 1 2 - 302: 246(i8vec3) GroupNonUniformUMin 43 ClusteredReduce 301 42 - 303: 237(ptr) AccessChain 34(data) 298 47 - 304: 20(i8vec4) Load 303 - 305: 20(i8vec4) VectorShuffle 304 302 4 5 6 3 - Store 303 305 + 279: 276(i8vec3) VectorShuffle 278 278 0 1 2 + 280: 276(i8vec3) GroupNonUniformIAdd 43 ClusteredReduce 279 42 + 281: 259(ptr) AccessChain 34(data) 275 47 38 + 282: 19(int8_t) CompositeExtract 280 0 + Store 281 282 + 283: 259(ptr) AccessChain 34(data) 275 47 42 + 284: 19(int8_t) CompositeExtract 280 1 + Store 283 284 + 285: 259(ptr) AccessChain 34(data) 275 47 69 + 286: 19(int8_t) CompositeExtract 280 2 + Store 285 286 + 287: 6(int) Load 8(invocation) + 288: 266(ptr) AccessChain 34(data) 73 47 + 289: 20(i8vec4) Load 288 + 290: 20(i8vec4) GroupNonUniformIAdd 43 ClusteredReduce 289 42 + 291: 266(ptr) AccessChain 34(data) 287 47 + Store 291 290 + 292: 6(int) Load 8(invocation) + 293: 259(ptr) AccessChain 34(data) 37 47 38 + 294: 19(int8_t) Load 293 + 295: 19(int8_t) GroupNonUniformIMul 43 ClusteredReduce 294 42 + 296: 259(ptr) AccessChain 34(data) 292 47 38 + Store 296 295 + 297: 6(int) Load 8(invocation) + 298: 266(ptr) AccessChain 34(data) 47 47 + 299: 20(i8vec4) Load 298 + 300: 265(i8vec2) VectorShuffle 299 299 0 1 + 301: 265(i8vec2) GroupNonUniformIMul 43 ClusteredReduce 300 42 + 302: 259(ptr) AccessChain 34(data) 297 47 38 + 303: 19(int8_t) CompositeExtract 301 0 + Store 302 303 + 304: 259(ptr) AccessChain 34(data) 297 47 42 + 305: 19(int8_t) CompositeExtract 301 1 + Store 304 305 306: 6(int) Load 8(invocation) - 307: 237(ptr) AccessChain 34(data) 68 47 + 307: 266(ptr) AccessChain 34(data) 59 47 308: 20(i8vec4) Load 307 - 309: 20(i8vec4) GroupNonUniformUMin 43 ClusteredReduce 308 42 - 310: 237(ptr) AccessChain 34(data) 306 47 - Store 310 309 - 311: 6(int) Load 8(invocation) - 312: 230(ptr) AccessChain 34(data) 37 47 38 - 313: 19(int8_t) Load 312 - 314: 19(int8_t) GroupNonUniformUMax 43 ClusteredReduce 313 42 - 315: 230(ptr) AccessChain 34(data) 311 47 38 - Store 315 314 - 316: 6(int) Load 8(invocation) - 317: 237(ptr) AccessChain 34(data) 47 47 - 318: 20(i8vec4) Load 317 - 319: 236(i8vec2) VectorShuffle 318 318 0 1 - 320: 236(i8vec2) GroupNonUniformUMax 43 ClusteredReduce 319 42 - 321: 237(ptr) AccessChain 34(data) 316 47 - 322: 20(i8vec4) Load 321 - 323: 20(i8vec4) VectorShuffle 322 320 4 5 2 3 - Store 321 323 - 324: 6(int) Load 8(invocation) - 325: 237(ptr) AccessChain 34(data) 58 47 - 326: 20(i8vec4) Load 325 - 327: 246(i8vec3) VectorShuffle 326 326 0 1 2 - 328: 246(i8vec3) GroupNonUniformUMax 43 ClusteredReduce 327 42 - 329: 237(ptr) AccessChain 34(data) 324 47 - 330: 20(i8vec4) Load 329 - 331: 20(i8vec4) VectorShuffle 330 328 4 5 6 3 - Store 329 331 - 332: 6(int) Load 8(invocation) - 333: 237(ptr) AccessChain 34(data) 68 47 - 334: 20(i8vec4) Load 333 - 335: 20(i8vec4) GroupNonUniformUMax 43 ClusteredReduce 334 42 - 336: 237(ptr) AccessChain 34(data) 332 47 - Store 336 335 - 337: 6(int) Load 8(invocation) - 338: 230(ptr) AccessChain 34(data) 37 47 38 - 339: 19(int8_t) Load 338 - 340: 19(int8_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 339 42 - 341: 230(ptr) AccessChain 34(data) 337 47 38 - Store 341 340 - 342: 6(int) Load 8(invocation) - 343: 237(ptr) AccessChain 34(data) 47 47 - 344: 20(i8vec4) Load 343 - 345: 236(i8vec2) VectorShuffle 344 344 0 1 - 346: 236(i8vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 345 42 - 347: 237(ptr) AccessChain 34(data) 342 47 - 348: 20(i8vec4) Load 347 - 349: 20(i8vec4) VectorShuffle 348 346 4 5 2 3 - Store 347 349 - 350: 6(int) Load 8(invocation) - 351: 237(ptr) AccessChain 34(data) 58 47 - 352: 20(i8vec4) Load 351 - 353: 246(i8vec3) VectorShuffle 352 352 0 1 2 - 354: 246(i8vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 353 42 - 355: 237(ptr) AccessChain 34(data) 350 47 - 356: 20(i8vec4) Load 355 - 357: 20(i8vec4) VectorShuffle 356 354 4 5 6 3 - Store 355 357 - 358: 6(int) Load 8(invocation) - 359: 237(ptr) AccessChain 34(data) 68 47 - 360: 20(i8vec4) Load 359 - 361: 20(i8vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 360 42 - 362: 237(ptr) AccessChain 34(data) 358 47 - Store 362 361 - 363: 6(int) Load 8(invocation) - 364: 230(ptr) AccessChain 34(data) 37 47 38 - 365: 19(int8_t) Load 364 - 366: 19(int8_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 365 42 - 367: 230(ptr) AccessChain 34(data) 363 47 38 - Store 367 366 - 368: 6(int) Load 8(invocation) - 369: 237(ptr) AccessChain 34(data) 47 47 - 370: 20(i8vec4) Load 369 - 371: 236(i8vec2) VectorShuffle 370 370 0 1 - 372: 236(i8vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 371 42 - 373: 237(ptr) AccessChain 34(data) 368 47 - 374: 20(i8vec4) Load 373 - 375: 20(i8vec4) VectorShuffle 374 372 4 5 2 3 - Store 373 375 - 376: 6(int) Load 8(invocation) - 377: 237(ptr) AccessChain 34(data) 58 47 - 378: 20(i8vec4) Load 377 - 379: 246(i8vec3) VectorShuffle 378 378 0 1 2 - 380: 246(i8vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 379 42 - 381: 237(ptr) AccessChain 34(data) 376 47 - 382: 20(i8vec4) Load 381 - 383: 20(i8vec4) VectorShuffle 382 380 4 5 6 3 - Store 381 383 - 384: 6(int) Load 8(invocation) - 385: 237(ptr) AccessChain 34(data) 68 47 - 386: 20(i8vec4) Load 385 - 387: 20(i8vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 386 42 - 388: 237(ptr) AccessChain 34(data) 384 47 - Store 388 387 - 389: 6(int) Load 8(invocation) - 390: 230(ptr) AccessChain 34(data) 37 47 38 - 391: 19(int8_t) Load 390 - 392: 19(int8_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 391 42 - 393: 230(ptr) AccessChain 34(data) 389 47 38 - Store 393 392 - 394: 6(int) Load 8(invocation) - 395: 237(ptr) AccessChain 34(data) 47 47 - 396: 20(i8vec4) Load 395 - 397: 236(i8vec2) VectorShuffle 396 396 0 1 - 398: 236(i8vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 397 42 - 399: 237(ptr) AccessChain 34(data) 394 47 - 400: 20(i8vec4) Load 399 - 401: 20(i8vec4) VectorShuffle 400 398 4 5 2 3 - Store 399 401 - 402: 6(int) Load 8(invocation) - 403: 237(ptr) AccessChain 34(data) 58 47 - 404: 20(i8vec4) Load 403 - 405: 246(i8vec3) VectorShuffle 404 404 0 1 2 - 406: 246(i8vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 405 42 - 407: 237(ptr) AccessChain 34(data) 402 47 - 408: 20(i8vec4) Load 407 - 409: 20(i8vec4) VectorShuffle 408 406 4 5 6 3 - Store 407 409 - 410: 6(int) Load 8(invocation) - 411: 237(ptr) AccessChain 34(data) 68 47 - 412: 20(i8vec4) Load 411 - 413: 20(i8vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 412 42 - 414: 237(ptr) AccessChain 34(data) 410 47 - Store 414 413 - 415: 6(int) Load 8(invocation) - 417: 416(ptr) AccessChain 34(data) 37 58 38 - 418: 21(int16_t) Load 417 - 419: 21(int16_t) GroupNonUniformIAdd 43 ClusteredReduce 418 42 - 420: 416(ptr) AccessChain 34(data) 415 58 38 - Store 420 419 - 421: 6(int) Load 8(invocation) - 424: 423(ptr) AccessChain 34(data) 47 58 - 425: 22(i16vec4) Load 424 - 426:422(i16vec2) VectorShuffle 425 425 0 1 - 427:422(i16vec2) GroupNonUniformIAdd 43 ClusteredReduce 426 42 - 428: 423(ptr) AccessChain 34(data) 421 58 - 429: 22(i16vec4) Load 428 - 430: 22(i16vec4) VectorShuffle 429 427 4 5 2 3 - Store 428 430 - 431: 6(int) Load 8(invocation) - 433: 423(ptr) AccessChain 34(data) 58 58 - 434: 22(i16vec4) Load 433 - 435:432(i16vec3) VectorShuffle 434 434 0 1 2 - 436:432(i16vec3) GroupNonUniformIAdd 43 ClusteredReduce 435 42 - 437: 423(ptr) AccessChain 34(data) 431 58 - 438: 22(i16vec4) Load 437 - 439: 22(i16vec4) VectorShuffle 438 436 4 5 6 3 - Store 437 439 - 440: 6(int) Load 8(invocation) - 441: 423(ptr) AccessChain 34(data) 68 58 - 442: 22(i16vec4) Load 441 - 443: 22(i16vec4) GroupNonUniformIAdd 43 ClusteredReduce 442 42 - 444: 423(ptr) AccessChain 34(data) 440 58 - Store 444 443 - 445: 6(int) Load 8(invocation) - 446: 416(ptr) AccessChain 34(data) 37 58 38 - 447: 21(int16_t) Load 446 - 448: 21(int16_t) GroupNonUniformIMul 43 ClusteredReduce 447 42 - 449: 416(ptr) AccessChain 34(data) 445 58 38 - Store 449 448 - 450: 6(int) Load 8(invocation) - 451: 423(ptr) AccessChain 34(data) 47 58 - 452: 22(i16vec4) Load 451 - 453:422(i16vec2) VectorShuffle 452 452 0 1 - 454:422(i16vec2) GroupNonUniformIMul 43 ClusteredReduce 453 42 - 455: 423(ptr) AccessChain 34(data) 450 58 - 456: 22(i16vec4) Load 455 - 457: 22(i16vec4) VectorShuffle 456 454 4 5 2 3 - Store 455 457 - 458: 6(int) Load 8(invocation) - 459: 423(ptr) AccessChain 34(data) 58 58 - 460: 22(i16vec4) Load 459 - 461:432(i16vec3) VectorShuffle 460 460 0 1 2 - 462:432(i16vec3) GroupNonUniformIMul 43 ClusteredReduce 461 42 - 463: 423(ptr) AccessChain 34(data) 458 58 - 464: 22(i16vec4) Load 463 - 465: 22(i16vec4) VectorShuffle 464 462 4 5 6 3 - Store 463 465 - 466: 6(int) Load 8(invocation) - 467: 423(ptr) AccessChain 34(data) 68 58 - 468: 22(i16vec4) Load 467 - 469: 22(i16vec4) GroupNonUniformIMul 43 ClusteredReduce 468 42 - 470: 423(ptr) AccessChain 34(data) 466 58 - Store 470 469 - 471: 6(int) Load 8(invocation) - 472: 416(ptr) AccessChain 34(data) 37 58 38 - 473: 21(int16_t) Load 472 - 474: 21(int16_t) GroupNonUniformSMin 43 ClusteredReduce 473 42 - 475: 416(ptr) AccessChain 34(data) 471 58 38 - Store 475 474 - 476: 6(int) Load 8(invocation) - 477: 423(ptr) AccessChain 34(data) 47 58 - 478: 22(i16vec4) Load 477 - 479:422(i16vec2) VectorShuffle 478 478 0 1 - 480:422(i16vec2) GroupNonUniformSMin 43 ClusteredReduce 479 42 - 481: 423(ptr) AccessChain 34(data) 476 58 + 309: 276(i8vec3) VectorShuffle 308 308 0 1 2 + 310: 276(i8vec3) GroupNonUniformIMul 43 ClusteredReduce 309 42 + 311: 259(ptr) AccessChain 34(data) 306 47 38 + 312: 19(int8_t) CompositeExtract 310 0 + Store 311 312 + 313: 259(ptr) AccessChain 34(data) 306 47 42 + 314: 19(int8_t) CompositeExtract 310 1 + Store 313 314 + 315: 259(ptr) AccessChain 34(data) 306 47 69 + 316: 19(int8_t) CompositeExtract 310 2 + Store 315 316 + 317: 6(int) Load 8(invocation) + 318: 266(ptr) AccessChain 34(data) 73 47 + 319: 20(i8vec4) Load 318 + 320: 20(i8vec4) GroupNonUniformIMul 43 ClusteredReduce 319 42 + 321: 266(ptr) AccessChain 34(data) 317 47 + Store 321 320 + 322: 6(int) Load 8(invocation) + 323: 259(ptr) AccessChain 34(data) 37 47 38 + 324: 19(int8_t) Load 323 + 325: 19(int8_t) GroupNonUniformUMin 43 ClusteredReduce 324 42 + 326: 259(ptr) AccessChain 34(data) 322 47 38 + Store 326 325 + 327: 6(int) Load 8(invocation) + 328: 266(ptr) AccessChain 34(data) 47 47 + 329: 20(i8vec4) Load 328 + 330: 265(i8vec2) VectorShuffle 329 329 0 1 + 331: 265(i8vec2) GroupNonUniformUMin 43 ClusteredReduce 330 42 + 332: 259(ptr) AccessChain 34(data) 327 47 38 + 333: 19(int8_t) CompositeExtract 331 0 + Store 332 333 + 334: 259(ptr) AccessChain 34(data) 327 47 42 + 335: 19(int8_t) CompositeExtract 331 1 + Store 334 335 + 336: 6(int) Load 8(invocation) + 337: 266(ptr) AccessChain 34(data) 59 47 + 338: 20(i8vec4) Load 337 + 339: 276(i8vec3) VectorShuffle 338 338 0 1 2 + 340: 276(i8vec3) GroupNonUniformUMin 43 ClusteredReduce 339 42 + 341: 259(ptr) AccessChain 34(data) 336 47 38 + 342: 19(int8_t) CompositeExtract 340 0 + Store 341 342 + 343: 259(ptr) AccessChain 34(data) 336 47 42 + 344: 19(int8_t) CompositeExtract 340 1 + Store 343 344 + 345: 259(ptr) AccessChain 34(data) 336 47 69 + 346: 19(int8_t) CompositeExtract 340 2 + Store 345 346 + 347: 6(int) Load 8(invocation) + 348: 266(ptr) AccessChain 34(data) 73 47 + 349: 20(i8vec4) Load 348 + 350: 20(i8vec4) GroupNonUniformUMin 43 ClusteredReduce 349 42 + 351: 266(ptr) AccessChain 34(data) 347 47 + Store 351 350 + 352: 6(int) Load 8(invocation) + 353: 259(ptr) AccessChain 34(data) 37 47 38 + 354: 19(int8_t) Load 353 + 355: 19(int8_t) GroupNonUniformUMax 43 ClusteredReduce 354 42 + 356: 259(ptr) AccessChain 34(data) 352 47 38 + Store 356 355 + 357: 6(int) Load 8(invocation) + 358: 266(ptr) AccessChain 34(data) 47 47 + 359: 20(i8vec4) Load 358 + 360: 265(i8vec2) VectorShuffle 359 359 0 1 + 361: 265(i8vec2) GroupNonUniformUMax 43 ClusteredReduce 360 42 + 362: 259(ptr) AccessChain 34(data) 357 47 38 + 363: 19(int8_t) CompositeExtract 361 0 + Store 362 363 + 364: 259(ptr) AccessChain 34(data) 357 47 42 + 365: 19(int8_t) CompositeExtract 361 1 + Store 364 365 + 366: 6(int) Load 8(invocation) + 367: 266(ptr) AccessChain 34(data) 59 47 + 368: 20(i8vec4) Load 367 + 369: 276(i8vec3) VectorShuffle 368 368 0 1 2 + 370: 276(i8vec3) GroupNonUniformUMax 43 ClusteredReduce 369 42 + 371: 259(ptr) AccessChain 34(data) 366 47 38 + 372: 19(int8_t) CompositeExtract 370 0 + Store 371 372 + 373: 259(ptr) AccessChain 34(data) 366 47 42 + 374: 19(int8_t) CompositeExtract 370 1 + Store 373 374 + 375: 259(ptr) AccessChain 34(data) 366 47 69 + 376: 19(int8_t) CompositeExtract 370 2 + Store 375 376 + 377: 6(int) Load 8(invocation) + 378: 266(ptr) AccessChain 34(data) 73 47 + 379: 20(i8vec4) Load 378 + 380: 20(i8vec4) GroupNonUniformUMax 43 ClusteredReduce 379 42 + 381: 266(ptr) AccessChain 34(data) 377 47 + Store 381 380 + 382: 6(int) Load 8(invocation) + 383: 259(ptr) AccessChain 34(data) 37 47 38 + 384: 19(int8_t) Load 383 + 385: 19(int8_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 384 42 + 386: 259(ptr) AccessChain 34(data) 382 47 38 + Store 386 385 + 387: 6(int) Load 8(invocation) + 388: 266(ptr) AccessChain 34(data) 47 47 + 389: 20(i8vec4) Load 388 + 390: 265(i8vec2) VectorShuffle 389 389 0 1 + 391: 265(i8vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 390 42 + 392: 259(ptr) AccessChain 34(data) 387 47 38 + 393: 19(int8_t) CompositeExtract 391 0 + Store 392 393 + 394: 259(ptr) AccessChain 34(data) 387 47 42 + 395: 19(int8_t) CompositeExtract 391 1 + Store 394 395 + 396: 6(int) Load 8(invocation) + 397: 266(ptr) AccessChain 34(data) 59 47 + 398: 20(i8vec4) Load 397 + 399: 276(i8vec3) VectorShuffle 398 398 0 1 2 + 400: 276(i8vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 399 42 + 401: 259(ptr) AccessChain 34(data) 396 47 38 + 402: 19(int8_t) CompositeExtract 400 0 + Store 401 402 + 403: 259(ptr) AccessChain 34(data) 396 47 42 + 404: 19(int8_t) CompositeExtract 400 1 + Store 403 404 + 405: 259(ptr) AccessChain 34(data) 396 47 69 + 406: 19(int8_t) CompositeExtract 400 2 + Store 405 406 + 407: 6(int) Load 8(invocation) + 408: 266(ptr) AccessChain 34(data) 73 47 + 409: 20(i8vec4) Load 408 + 410: 20(i8vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 409 42 + 411: 266(ptr) AccessChain 34(data) 407 47 + Store 411 410 + 412: 6(int) Load 8(invocation) + 413: 259(ptr) AccessChain 34(data) 37 47 38 + 414: 19(int8_t) Load 413 + 415: 19(int8_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 414 42 + 416: 259(ptr) AccessChain 34(data) 412 47 38 + Store 416 415 + 417: 6(int) Load 8(invocation) + 418: 266(ptr) AccessChain 34(data) 47 47 + 419: 20(i8vec4) Load 418 + 420: 265(i8vec2) VectorShuffle 419 419 0 1 + 421: 265(i8vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 420 42 + 422: 259(ptr) AccessChain 34(data) 417 47 38 + 423: 19(int8_t) CompositeExtract 421 0 + Store 422 423 + 424: 259(ptr) AccessChain 34(data) 417 47 42 + 425: 19(int8_t) CompositeExtract 421 1 + Store 424 425 + 426: 6(int) Load 8(invocation) + 427: 266(ptr) AccessChain 34(data) 59 47 + 428: 20(i8vec4) Load 427 + 429: 276(i8vec3) VectorShuffle 428 428 0 1 2 + 430: 276(i8vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 429 42 + 431: 259(ptr) AccessChain 34(data) 426 47 38 + 432: 19(int8_t) CompositeExtract 430 0 + Store 431 432 + 433: 259(ptr) AccessChain 34(data) 426 47 42 + 434: 19(int8_t) CompositeExtract 430 1 + Store 433 434 + 435: 259(ptr) AccessChain 34(data) 426 47 69 + 436: 19(int8_t) CompositeExtract 430 2 + Store 435 436 + 437: 6(int) Load 8(invocation) + 438: 266(ptr) AccessChain 34(data) 73 47 + 439: 20(i8vec4) Load 438 + 440: 20(i8vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 439 42 + 441: 266(ptr) AccessChain 34(data) 437 47 + Store 441 440 + 442: 6(int) Load 8(invocation) + 443: 259(ptr) AccessChain 34(data) 37 47 38 + 444: 19(int8_t) Load 443 + 445: 19(int8_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 444 42 + 446: 259(ptr) AccessChain 34(data) 442 47 38 + Store 446 445 + 447: 6(int) Load 8(invocation) + 448: 266(ptr) AccessChain 34(data) 47 47 + 449: 20(i8vec4) Load 448 + 450: 265(i8vec2) VectorShuffle 449 449 0 1 + 451: 265(i8vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 450 42 + 452: 259(ptr) AccessChain 34(data) 447 47 38 + 453: 19(int8_t) CompositeExtract 451 0 + Store 452 453 + 454: 259(ptr) AccessChain 34(data) 447 47 42 + 455: 19(int8_t) CompositeExtract 451 1 + Store 454 455 + 456: 6(int) Load 8(invocation) + 457: 266(ptr) AccessChain 34(data) 59 47 + 458: 20(i8vec4) Load 457 + 459: 276(i8vec3) VectorShuffle 458 458 0 1 2 + 460: 276(i8vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 459 42 + 461: 259(ptr) AccessChain 34(data) 456 47 38 + 462: 19(int8_t) CompositeExtract 460 0 + Store 461 462 + 463: 259(ptr) AccessChain 34(data) 456 47 42 + 464: 19(int8_t) CompositeExtract 460 1 + Store 463 464 + 465: 259(ptr) AccessChain 34(data) 456 47 69 + 466: 19(int8_t) CompositeExtract 460 2 + Store 465 466 + 467: 6(int) Load 8(invocation) + 468: 266(ptr) AccessChain 34(data) 73 47 + 469: 20(i8vec4) Load 468 + 470: 20(i8vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 469 42 + 471: 266(ptr) AccessChain 34(data) 467 47 + Store 471 470 + 472: 6(int) Load 8(invocation) + 474: 473(ptr) AccessChain 34(data) 37 59 38 + 475: 21(int16_t) Load 474 + 476: 21(int16_t) GroupNonUniformIAdd 43 ClusteredReduce 475 42 + 477: 473(ptr) AccessChain 34(data) 472 59 38 + Store 477 476 + 478: 6(int) Load 8(invocation) + 481: 480(ptr) AccessChain 34(data) 47 59 482: 22(i16vec4) Load 481 - 483: 22(i16vec4) VectorShuffle 482 480 4 5 2 3 - Store 481 483 - 484: 6(int) Load 8(invocation) - 485: 423(ptr) AccessChain 34(data) 58 58 - 486: 22(i16vec4) Load 485 - 487:432(i16vec3) VectorShuffle 486 486 0 1 2 - 488:432(i16vec3) GroupNonUniformSMin 43 ClusteredReduce 487 42 - 489: 423(ptr) AccessChain 34(data) 484 58 - 490: 22(i16vec4) Load 489 - 491: 22(i16vec4) VectorShuffle 490 488 4 5 6 3 - Store 489 491 - 492: 6(int) Load 8(invocation) - 493: 423(ptr) AccessChain 34(data) 68 58 - 494: 22(i16vec4) Load 493 - 495: 22(i16vec4) GroupNonUniformSMin 43 ClusteredReduce 494 42 - 496: 423(ptr) AccessChain 34(data) 492 58 - Store 496 495 - 497: 6(int) Load 8(invocation) - 498: 416(ptr) AccessChain 34(data) 37 58 38 - 499: 21(int16_t) Load 498 - 500: 21(int16_t) GroupNonUniformSMax 43 ClusteredReduce 499 42 - 501: 416(ptr) AccessChain 34(data) 497 58 38 - Store 501 500 - 502: 6(int) Load 8(invocation) - 503: 423(ptr) AccessChain 34(data) 47 58 - 504: 22(i16vec4) Load 503 - 505:422(i16vec2) VectorShuffle 504 504 0 1 - 506:422(i16vec2) GroupNonUniformSMax 43 ClusteredReduce 505 42 - 507: 423(ptr) AccessChain 34(data) 502 58 - 508: 22(i16vec4) Load 507 - 509: 22(i16vec4) VectorShuffle 508 506 4 5 2 3 - Store 507 509 - 510: 6(int) Load 8(invocation) - 511: 423(ptr) AccessChain 34(data) 58 58 - 512: 22(i16vec4) Load 511 - 513:432(i16vec3) VectorShuffle 512 512 0 1 2 - 514:432(i16vec3) GroupNonUniformSMax 43 ClusteredReduce 513 42 - 515: 423(ptr) AccessChain 34(data) 510 58 - 516: 22(i16vec4) Load 515 - 517: 22(i16vec4) VectorShuffle 516 514 4 5 6 3 - Store 515 517 - 518: 6(int) Load 8(invocation) - 519: 423(ptr) AccessChain 34(data) 68 58 - 520: 22(i16vec4) Load 519 - 521: 22(i16vec4) GroupNonUniformSMax 43 ClusteredReduce 520 42 - 522: 423(ptr) AccessChain 34(data) 518 58 - Store 522 521 - 523: 6(int) Load 8(invocation) - 524: 416(ptr) AccessChain 34(data) 37 58 38 - 525: 21(int16_t) Load 524 - 526: 21(int16_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 525 42 - 527: 416(ptr) AccessChain 34(data) 523 58 38 - Store 527 526 - 528: 6(int) Load 8(invocation) - 529: 423(ptr) AccessChain 34(data) 47 58 - 530: 22(i16vec4) Load 529 - 531:422(i16vec2) VectorShuffle 530 530 0 1 - 532:422(i16vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 531 42 - 533: 423(ptr) AccessChain 34(data) 528 58 - 534: 22(i16vec4) Load 533 - 535: 22(i16vec4) VectorShuffle 534 532 4 5 2 3 - Store 533 535 + 483:479(i16vec2) VectorShuffle 482 482 0 1 + 484:479(i16vec2) GroupNonUniformIAdd 43 ClusteredReduce 483 42 + 485: 473(ptr) AccessChain 34(data) 478 59 38 + 486: 21(int16_t) CompositeExtract 484 0 + Store 485 486 + 487: 473(ptr) AccessChain 34(data) 478 59 42 + 488: 21(int16_t) CompositeExtract 484 1 + Store 487 488 + 489: 6(int) Load 8(invocation) + 491: 480(ptr) AccessChain 34(data) 59 59 + 492: 22(i16vec4) Load 491 + 493:490(i16vec3) VectorShuffle 492 492 0 1 2 + 494:490(i16vec3) GroupNonUniformIAdd 43 ClusteredReduce 493 42 + 495: 473(ptr) AccessChain 34(data) 489 59 38 + 496: 21(int16_t) CompositeExtract 494 0 + Store 495 496 + 497: 473(ptr) AccessChain 34(data) 489 59 42 + 498: 21(int16_t) CompositeExtract 494 1 + Store 497 498 + 499: 473(ptr) AccessChain 34(data) 489 59 69 + 500: 21(int16_t) CompositeExtract 494 2 + Store 499 500 + 501: 6(int) Load 8(invocation) + 502: 480(ptr) AccessChain 34(data) 73 59 + 503: 22(i16vec4) Load 502 + 504: 22(i16vec4) GroupNonUniformIAdd 43 ClusteredReduce 503 42 + 505: 480(ptr) AccessChain 34(data) 501 59 + Store 505 504 + 506: 6(int) Load 8(invocation) + 507: 473(ptr) AccessChain 34(data) 37 59 38 + 508: 21(int16_t) Load 507 + 509: 21(int16_t) GroupNonUniformIMul 43 ClusteredReduce 508 42 + 510: 473(ptr) AccessChain 34(data) 506 59 38 + Store 510 509 + 511: 6(int) Load 8(invocation) + 512: 480(ptr) AccessChain 34(data) 47 59 + 513: 22(i16vec4) Load 512 + 514:479(i16vec2) VectorShuffle 513 513 0 1 + 515:479(i16vec2) GroupNonUniformIMul 43 ClusteredReduce 514 42 + 516: 473(ptr) AccessChain 34(data) 511 59 38 + 517: 21(int16_t) CompositeExtract 515 0 + Store 516 517 + 518: 473(ptr) AccessChain 34(data) 511 59 42 + 519: 21(int16_t) CompositeExtract 515 1 + Store 518 519 + 520: 6(int) Load 8(invocation) + 521: 480(ptr) AccessChain 34(data) 59 59 + 522: 22(i16vec4) Load 521 + 523:490(i16vec3) VectorShuffle 522 522 0 1 2 + 524:490(i16vec3) GroupNonUniformIMul 43 ClusteredReduce 523 42 + 525: 473(ptr) AccessChain 34(data) 520 59 38 + 526: 21(int16_t) CompositeExtract 524 0 + Store 525 526 + 527: 473(ptr) AccessChain 34(data) 520 59 42 + 528: 21(int16_t) CompositeExtract 524 1 + Store 527 528 + 529: 473(ptr) AccessChain 34(data) 520 59 69 + 530: 21(int16_t) CompositeExtract 524 2 + Store 529 530 + 531: 6(int) Load 8(invocation) + 532: 480(ptr) AccessChain 34(data) 73 59 + 533: 22(i16vec4) Load 532 + 534: 22(i16vec4) GroupNonUniformIMul 43 ClusteredReduce 533 42 + 535: 480(ptr) AccessChain 34(data) 531 59 + Store 535 534 536: 6(int) Load 8(invocation) - 537: 423(ptr) AccessChain 34(data) 58 58 - 538: 22(i16vec4) Load 537 - 539:432(i16vec3) VectorShuffle 538 538 0 1 2 - 540:432(i16vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 539 42 - 541: 423(ptr) AccessChain 34(data) 536 58 - 542: 22(i16vec4) Load 541 - 543: 22(i16vec4) VectorShuffle 542 540 4 5 6 3 - Store 541 543 - 544: 6(int) Load 8(invocation) - 545: 423(ptr) AccessChain 34(data) 68 58 - 546: 22(i16vec4) Load 545 - 547: 22(i16vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 546 42 - 548: 423(ptr) AccessChain 34(data) 544 58 - Store 548 547 - 549: 6(int) Load 8(invocation) - 550: 416(ptr) AccessChain 34(data) 37 58 38 - 551: 21(int16_t) Load 550 - 552: 21(int16_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 551 42 - 553: 416(ptr) AccessChain 34(data) 549 58 38 - Store 553 552 - 554: 6(int) Load 8(invocation) - 555: 423(ptr) AccessChain 34(data) 47 58 - 556: 22(i16vec4) Load 555 - 557:422(i16vec2) VectorShuffle 556 556 0 1 - 558:422(i16vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 557 42 - 559: 423(ptr) AccessChain 34(data) 554 58 - 560: 22(i16vec4) Load 559 - 561: 22(i16vec4) VectorShuffle 560 558 4 5 2 3 - Store 559 561 - 562: 6(int) Load 8(invocation) - 563: 423(ptr) AccessChain 34(data) 58 58 - 564: 22(i16vec4) Load 563 - 565:432(i16vec3) VectorShuffle 564 564 0 1 2 - 566:432(i16vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 565 42 - 567: 423(ptr) AccessChain 34(data) 562 58 - 568: 22(i16vec4) Load 567 - 569: 22(i16vec4) VectorShuffle 568 566 4 5 6 3 - Store 567 569 - 570: 6(int) Load 8(invocation) - 571: 423(ptr) AccessChain 34(data) 68 58 - 572: 22(i16vec4) Load 571 - 573: 22(i16vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 572 42 - 574: 423(ptr) AccessChain 34(data) 570 58 - Store 574 573 - 575: 6(int) Load 8(invocation) - 576: 416(ptr) AccessChain 34(data) 37 58 38 - 577: 21(int16_t) Load 576 - 578: 21(int16_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 577 42 - 579: 416(ptr) AccessChain 34(data) 575 58 38 - Store 579 578 + 537: 473(ptr) AccessChain 34(data) 37 59 38 + 538: 21(int16_t) Load 537 + 539: 21(int16_t) GroupNonUniformSMin 43 ClusteredReduce 538 42 + 540: 473(ptr) AccessChain 34(data) 536 59 38 + Store 540 539 + 541: 6(int) Load 8(invocation) + 542: 480(ptr) AccessChain 34(data) 47 59 + 543: 22(i16vec4) Load 542 + 544:479(i16vec2) VectorShuffle 543 543 0 1 + 545:479(i16vec2) GroupNonUniformSMin 43 ClusteredReduce 544 42 + 546: 473(ptr) AccessChain 34(data) 541 59 38 + 547: 21(int16_t) CompositeExtract 545 0 + Store 546 547 + 548: 473(ptr) AccessChain 34(data) 541 59 42 + 549: 21(int16_t) CompositeExtract 545 1 + Store 548 549 + 550: 6(int) Load 8(invocation) + 551: 480(ptr) AccessChain 34(data) 59 59 + 552: 22(i16vec4) Load 551 + 553:490(i16vec3) VectorShuffle 552 552 0 1 2 + 554:490(i16vec3) GroupNonUniformSMin 43 ClusteredReduce 553 42 + 555: 473(ptr) AccessChain 34(data) 550 59 38 + 556: 21(int16_t) CompositeExtract 554 0 + Store 555 556 + 557: 473(ptr) AccessChain 34(data) 550 59 42 + 558: 21(int16_t) CompositeExtract 554 1 + Store 557 558 + 559: 473(ptr) AccessChain 34(data) 550 59 69 + 560: 21(int16_t) CompositeExtract 554 2 + Store 559 560 + 561: 6(int) Load 8(invocation) + 562: 480(ptr) AccessChain 34(data) 73 59 + 563: 22(i16vec4) Load 562 + 564: 22(i16vec4) GroupNonUniformSMin 43 ClusteredReduce 563 42 + 565: 480(ptr) AccessChain 34(data) 561 59 + Store 565 564 + 566: 6(int) Load 8(invocation) + 567: 473(ptr) AccessChain 34(data) 37 59 38 + 568: 21(int16_t) Load 567 + 569: 21(int16_t) GroupNonUniformSMax 43 ClusteredReduce 568 42 + 570: 473(ptr) AccessChain 34(data) 566 59 38 + Store 570 569 + 571: 6(int) Load 8(invocation) + 572: 480(ptr) AccessChain 34(data) 47 59 + 573: 22(i16vec4) Load 572 + 574:479(i16vec2) VectorShuffle 573 573 0 1 + 575:479(i16vec2) GroupNonUniformSMax 43 ClusteredReduce 574 42 + 576: 473(ptr) AccessChain 34(data) 571 59 38 + 577: 21(int16_t) CompositeExtract 575 0 + Store 576 577 + 578: 473(ptr) AccessChain 34(data) 571 59 42 + 579: 21(int16_t) CompositeExtract 575 1 + Store 578 579 580: 6(int) Load 8(invocation) - 581: 423(ptr) AccessChain 34(data) 47 58 + 581: 480(ptr) AccessChain 34(data) 59 59 582: 22(i16vec4) Load 581 - 583:422(i16vec2) VectorShuffle 582 582 0 1 - 584:422(i16vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 583 42 - 585: 423(ptr) AccessChain 34(data) 580 58 - 586: 22(i16vec4) Load 585 - 587: 22(i16vec4) VectorShuffle 586 584 4 5 2 3 - Store 585 587 - 588: 6(int) Load 8(invocation) - 589: 423(ptr) AccessChain 34(data) 58 58 - 590: 22(i16vec4) Load 589 - 591:432(i16vec3) VectorShuffle 590 590 0 1 2 - 592:432(i16vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 591 42 - 593: 423(ptr) AccessChain 34(data) 588 58 - 594: 22(i16vec4) Load 593 - 595: 22(i16vec4) VectorShuffle 594 592 4 5 6 3 - Store 593 595 + 583:490(i16vec3) VectorShuffle 582 582 0 1 2 + 584:490(i16vec3) GroupNonUniformSMax 43 ClusteredReduce 583 42 + 585: 473(ptr) AccessChain 34(data) 580 59 38 + 586: 21(int16_t) CompositeExtract 584 0 + Store 585 586 + 587: 473(ptr) AccessChain 34(data) 580 59 42 + 588: 21(int16_t) CompositeExtract 584 1 + Store 587 588 + 589: 473(ptr) AccessChain 34(data) 580 59 69 + 590: 21(int16_t) CompositeExtract 584 2 + Store 589 590 + 591: 6(int) Load 8(invocation) + 592: 480(ptr) AccessChain 34(data) 73 59 + 593: 22(i16vec4) Load 592 + 594: 22(i16vec4) GroupNonUniformSMax 43 ClusteredReduce 593 42 + 595: 480(ptr) AccessChain 34(data) 591 59 + Store 595 594 596: 6(int) Load 8(invocation) - 597: 423(ptr) AccessChain 34(data) 68 58 - 598: 22(i16vec4) Load 597 - 599: 22(i16vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 598 42 - 600: 423(ptr) AccessChain 34(data) 596 58 + 597: 473(ptr) AccessChain 34(data) 37 59 38 + 598: 21(int16_t) Load 597 + 599: 21(int16_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 598 42 + 600: 473(ptr) AccessChain 34(data) 596 59 38 Store 600 599 601: 6(int) Load 8(invocation) - 603: 602(ptr) AccessChain 34(data) 37 68 38 - 604: 23(int16_t) Load 603 - 605: 23(int16_t) GroupNonUniformIAdd 43 ClusteredReduce 604 42 - 606: 602(ptr) AccessChain 34(data) 601 68 38 - Store 606 605 - 607: 6(int) Load 8(invocation) - 610: 609(ptr) AccessChain 34(data) 47 68 - 611: 24(i16vec4) Load 610 - 612:608(i16vec2) VectorShuffle 611 611 0 1 - 613:608(i16vec2) GroupNonUniformIAdd 43 ClusteredReduce 612 42 - 614: 609(ptr) AccessChain 34(data) 607 68 - 615: 24(i16vec4) Load 614 - 616: 24(i16vec4) VectorShuffle 615 613 4 5 2 3 - Store 614 616 - 617: 6(int) Load 8(invocation) - 619: 609(ptr) AccessChain 34(data) 58 68 - 620: 24(i16vec4) Load 619 - 621:618(i16vec3) VectorShuffle 620 620 0 1 2 - 622:618(i16vec3) GroupNonUniformIAdd 43 ClusteredReduce 621 42 - 623: 609(ptr) AccessChain 34(data) 617 68 - 624: 24(i16vec4) Load 623 - 625: 24(i16vec4) VectorShuffle 624 622 4 5 6 3 - Store 623 625 + 602: 480(ptr) AccessChain 34(data) 47 59 + 603: 22(i16vec4) Load 602 + 604:479(i16vec2) VectorShuffle 603 603 0 1 + 605:479(i16vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 604 42 + 606: 473(ptr) AccessChain 34(data) 601 59 38 + 607: 21(int16_t) CompositeExtract 605 0 + Store 606 607 + 608: 473(ptr) AccessChain 34(data) 601 59 42 + 609: 21(int16_t) CompositeExtract 605 1 + Store 608 609 + 610: 6(int) Load 8(invocation) + 611: 480(ptr) AccessChain 34(data) 59 59 + 612: 22(i16vec4) Load 611 + 613:490(i16vec3) VectorShuffle 612 612 0 1 2 + 614:490(i16vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 613 42 + 615: 473(ptr) AccessChain 34(data) 610 59 38 + 616: 21(int16_t) CompositeExtract 614 0 + Store 615 616 + 617: 473(ptr) AccessChain 34(data) 610 59 42 + 618: 21(int16_t) CompositeExtract 614 1 + Store 617 618 + 619: 473(ptr) AccessChain 34(data) 610 59 69 + 620: 21(int16_t) CompositeExtract 614 2 + Store 619 620 + 621: 6(int) Load 8(invocation) + 622: 480(ptr) AccessChain 34(data) 73 59 + 623: 22(i16vec4) Load 622 + 624: 22(i16vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 623 42 + 625: 480(ptr) AccessChain 34(data) 621 59 + Store 625 624 626: 6(int) Load 8(invocation) - 627: 609(ptr) AccessChain 34(data) 68 68 - 628: 24(i16vec4) Load 627 - 629: 24(i16vec4) GroupNonUniformIAdd 43 ClusteredReduce 628 42 - 630: 609(ptr) AccessChain 34(data) 626 68 + 627: 473(ptr) AccessChain 34(data) 37 59 38 + 628: 21(int16_t) Load 627 + 629: 21(int16_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 628 42 + 630: 473(ptr) AccessChain 34(data) 626 59 38 Store 630 629 631: 6(int) Load 8(invocation) - 632: 602(ptr) AccessChain 34(data) 37 68 38 - 633: 23(int16_t) Load 632 - 634: 23(int16_t) GroupNonUniformIMul 43 ClusteredReduce 633 42 - 635: 602(ptr) AccessChain 34(data) 631 68 38 - Store 635 634 - 636: 6(int) Load 8(invocation) - 637: 609(ptr) AccessChain 34(data) 47 68 - 638: 24(i16vec4) Load 637 - 639:608(i16vec2) VectorShuffle 638 638 0 1 - 640:608(i16vec2) GroupNonUniformIMul 43 ClusteredReduce 639 42 - 641: 609(ptr) AccessChain 34(data) 636 68 - 642: 24(i16vec4) Load 641 - 643: 24(i16vec4) VectorShuffle 642 640 4 5 2 3 - Store 641 643 - 644: 6(int) Load 8(invocation) - 645: 609(ptr) AccessChain 34(data) 58 68 - 646: 24(i16vec4) Load 645 - 647:618(i16vec3) VectorShuffle 646 646 0 1 2 - 648:618(i16vec3) GroupNonUniformIMul 43 ClusteredReduce 647 42 - 649: 609(ptr) AccessChain 34(data) 644 68 - 650: 24(i16vec4) Load 649 - 651: 24(i16vec4) VectorShuffle 650 648 4 5 6 3 - Store 649 651 - 652: 6(int) Load 8(invocation) - 653: 609(ptr) AccessChain 34(data) 68 68 - 654: 24(i16vec4) Load 653 - 655: 24(i16vec4) GroupNonUniformIMul 43 ClusteredReduce 654 42 - 656: 609(ptr) AccessChain 34(data) 652 68 - Store 656 655 - 657: 6(int) Load 8(invocation) - 658: 602(ptr) AccessChain 34(data) 37 68 38 - 659: 23(int16_t) Load 658 - 660: 23(int16_t) GroupNonUniformUMin 43 ClusteredReduce 659 42 - 661: 602(ptr) AccessChain 34(data) 657 68 38 - Store 661 660 - 662: 6(int) Load 8(invocation) - 663: 609(ptr) AccessChain 34(data) 47 68 - 664: 24(i16vec4) Load 663 - 665:608(i16vec2) VectorShuffle 664 664 0 1 - 666:608(i16vec2) GroupNonUniformUMin 43 ClusteredReduce 665 42 - 667: 609(ptr) AccessChain 34(data) 662 68 - 668: 24(i16vec4) Load 667 - 669: 24(i16vec4) VectorShuffle 668 666 4 5 2 3 - Store 667 669 + 632: 480(ptr) AccessChain 34(data) 47 59 + 633: 22(i16vec4) Load 632 + 634:479(i16vec2) VectorShuffle 633 633 0 1 + 635:479(i16vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 634 42 + 636: 473(ptr) AccessChain 34(data) 631 59 38 + 637: 21(int16_t) CompositeExtract 635 0 + Store 636 637 + 638: 473(ptr) AccessChain 34(data) 631 59 42 + 639: 21(int16_t) CompositeExtract 635 1 + Store 638 639 + 640: 6(int) Load 8(invocation) + 641: 480(ptr) AccessChain 34(data) 59 59 + 642: 22(i16vec4) Load 641 + 643:490(i16vec3) VectorShuffle 642 642 0 1 2 + 644:490(i16vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 643 42 + 645: 473(ptr) AccessChain 34(data) 640 59 38 + 646: 21(int16_t) CompositeExtract 644 0 + Store 645 646 + 647: 473(ptr) AccessChain 34(data) 640 59 42 + 648: 21(int16_t) CompositeExtract 644 1 + Store 647 648 + 649: 473(ptr) AccessChain 34(data) 640 59 69 + 650: 21(int16_t) CompositeExtract 644 2 + Store 649 650 + 651: 6(int) Load 8(invocation) + 652: 480(ptr) AccessChain 34(data) 73 59 + 653: 22(i16vec4) Load 652 + 654: 22(i16vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 653 42 + 655: 480(ptr) AccessChain 34(data) 651 59 + Store 655 654 + 656: 6(int) Load 8(invocation) + 657: 473(ptr) AccessChain 34(data) 37 59 38 + 658: 21(int16_t) Load 657 + 659: 21(int16_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 658 42 + 660: 473(ptr) AccessChain 34(data) 656 59 38 + Store 660 659 + 661: 6(int) Load 8(invocation) + 662: 480(ptr) AccessChain 34(data) 47 59 + 663: 22(i16vec4) Load 662 + 664:479(i16vec2) VectorShuffle 663 663 0 1 + 665:479(i16vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 664 42 + 666: 473(ptr) AccessChain 34(data) 661 59 38 + 667: 21(int16_t) CompositeExtract 665 0 + Store 666 667 + 668: 473(ptr) AccessChain 34(data) 661 59 42 + 669: 21(int16_t) CompositeExtract 665 1 + Store 668 669 670: 6(int) Load 8(invocation) - 671: 609(ptr) AccessChain 34(data) 58 68 - 672: 24(i16vec4) Load 671 - 673:618(i16vec3) VectorShuffle 672 672 0 1 2 - 674:618(i16vec3) GroupNonUniformUMin 43 ClusteredReduce 673 42 - 675: 609(ptr) AccessChain 34(data) 670 68 - 676: 24(i16vec4) Load 675 - 677: 24(i16vec4) VectorShuffle 676 674 4 5 6 3 - Store 675 677 - 678: 6(int) Load 8(invocation) - 679: 609(ptr) AccessChain 34(data) 68 68 - 680: 24(i16vec4) Load 679 - 681: 24(i16vec4) GroupNonUniformUMin 43 ClusteredReduce 680 42 - 682: 609(ptr) AccessChain 34(data) 678 68 - Store 682 681 - 683: 6(int) Load 8(invocation) - 684: 602(ptr) AccessChain 34(data) 37 68 38 - 685: 23(int16_t) Load 684 - 686: 23(int16_t) GroupNonUniformUMax 43 ClusteredReduce 685 42 - 687: 602(ptr) AccessChain 34(data) 683 68 38 - Store 687 686 - 688: 6(int) Load 8(invocation) - 689: 609(ptr) AccessChain 34(data) 47 68 - 690: 24(i16vec4) Load 689 - 691:608(i16vec2) VectorShuffle 690 690 0 1 - 692:608(i16vec2) GroupNonUniformUMax 43 ClusteredReduce 691 42 - 693: 609(ptr) AccessChain 34(data) 688 68 - 694: 24(i16vec4) Load 693 - 695: 24(i16vec4) VectorShuffle 694 692 4 5 2 3 - Store 693 695 - 696: 6(int) Load 8(invocation) - 697: 609(ptr) AccessChain 34(data) 58 68 - 698: 24(i16vec4) Load 697 - 699:618(i16vec3) VectorShuffle 698 698 0 1 2 - 700:618(i16vec3) GroupNonUniformUMax 43 ClusteredReduce 699 42 - 701: 609(ptr) AccessChain 34(data) 696 68 - 702: 24(i16vec4) Load 701 - 703: 24(i16vec4) VectorShuffle 702 700 4 5 6 3 - Store 701 703 - 704: 6(int) Load 8(invocation) - 705: 609(ptr) AccessChain 34(data) 68 68 + 671: 480(ptr) AccessChain 34(data) 59 59 + 672: 22(i16vec4) Load 671 + 673:490(i16vec3) VectorShuffle 672 672 0 1 2 + 674:490(i16vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 673 42 + 675: 473(ptr) AccessChain 34(data) 670 59 38 + 676: 21(int16_t) CompositeExtract 674 0 + Store 675 676 + 677: 473(ptr) AccessChain 34(data) 670 59 42 + 678: 21(int16_t) CompositeExtract 674 1 + Store 677 678 + 679: 473(ptr) AccessChain 34(data) 670 59 69 + 680: 21(int16_t) CompositeExtract 674 2 + Store 679 680 + 681: 6(int) Load 8(invocation) + 682: 480(ptr) AccessChain 34(data) 73 59 + 683: 22(i16vec4) Load 682 + 684: 22(i16vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 683 42 + 685: 480(ptr) AccessChain 34(data) 681 59 + Store 685 684 + 686: 6(int) Load 8(invocation) + 688: 687(ptr) AccessChain 34(data) 37 73 38 + 689: 23(int16_t) Load 688 + 690: 23(int16_t) GroupNonUniformIAdd 43 ClusteredReduce 689 42 + 691: 687(ptr) AccessChain 34(data) 686 73 38 + Store 691 690 + 692: 6(int) Load 8(invocation) + 695: 694(ptr) AccessChain 34(data) 47 73 + 696: 24(i16vec4) Load 695 + 697:693(i16vec2) VectorShuffle 696 696 0 1 + 698:693(i16vec2) GroupNonUniformIAdd 43 ClusteredReduce 697 42 + 699: 687(ptr) AccessChain 34(data) 692 73 38 + 700: 23(int16_t) CompositeExtract 698 0 + Store 699 700 + 701: 687(ptr) AccessChain 34(data) 692 73 42 + 702: 23(int16_t) CompositeExtract 698 1 + Store 701 702 + 703: 6(int) Load 8(invocation) + 705: 694(ptr) AccessChain 34(data) 59 73 706: 24(i16vec4) Load 705 - 707: 24(i16vec4) GroupNonUniformUMax 43 ClusteredReduce 706 42 - 708: 609(ptr) AccessChain 34(data) 704 68 - Store 708 707 - 709: 6(int) Load 8(invocation) - 710: 602(ptr) AccessChain 34(data) 37 68 38 - 711: 23(int16_t) Load 710 - 712: 23(int16_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 711 42 - 713: 602(ptr) AccessChain 34(data) 709 68 38 - Store 713 712 - 714: 6(int) Load 8(invocation) - 715: 609(ptr) AccessChain 34(data) 47 68 - 716: 24(i16vec4) Load 715 - 717:608(i16vec2) VectorShuffle 716 716 0 1 - 718:608(i16vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 717 42 - 719: 609(ptr) AccessChain 34(data) 714 68 - 720: 24(i16vec4) Load 719 - 721: 24(i16vec4) VectorShuffle 720 718 4 5 2 3 - Store 719 721 - 722: 6(int) Load 8(invocation) - 723: 609(ptr) AccessChain 34(data) 58 68 - 724: 24(i16vec4) Load 723 - 725:618(i16vec3) VectorShuffle 724 724 0 1 2 - 726:618(i16vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 725 42 - 727: 609(ptr) AccessChain 34(data) 722 68 - 728: 24(i16vec4) Load 727 - 729: 24(i16vec4) VectorShuffle 728 726 4 5 6 3 - Store 727 729 - 730: 6(int) Load 8(invocation) - 731: 609(ptr) AccessChain 34(data) 68 68 - 732: 24(i16vec4) Load 731 - 733: 24(i16vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 732 42 - 734: 609(ptr) AccessChain 34(data) 730 68 - Store 734 733 - 735: 6(int) Load 8(invocation) - 736: 602(ptr) AccessChain 34(data) 37 68 38 - 737: 23(int16_t) Load 736 - 738: 23(int16_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 737 42 - 739: 602(ptr) AccessChain 34(data) 735 68 38 - Store 739 738 - 740: 6(int) Load 8(invocation) - 741: 609(ptr) AccessChain 34(data) 47 68 - 742: 24(i16vec4) Load 741 - 743:608(i16vec2) VectorShuffle 742 742 0 1 - 744:608(i16vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 743 42 - 745: 609(ptr) AccessChain 34(data) 740 68 - 746: 24(i16vec4) Load 745 - 747: 24(i16vec4) VectorShuffle 746 744 4 5 2 3 - Store 745 747 - 748: 6(int) Load 8(invocation) - 749: 609(ptr) AccessChain 34(data) 58 68 - 750: 24(i16vec4) Load 749 - 751:618(i16vec3) VectorShuffle 750 750 0 1 2 - 752:618(i16vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 751 42 - 753: 609(ptr) AccessChain 34(data) 748 68 - 754: 24(i16vec4) Load 753 - 755: 24(i16vec4) VectorShuffle 754 752 4 5 6 3 - Store 753 755 - 756: 6(int) Load 8(invocation) - 757: 609(ptr) AccessChain 34(data) 68 68 - 758: 24(i16vec4) Load 757 - 759: 24(i16vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 758 42 - 760: 609(ptr) AccessChain 34(data) 756 68 - Store 760 759 - 761: 6(int) Load 8(invocation) - 762: 602(ptr) AccessChain 34(data) 37 68 38 - 763: 23(int16_t) Load 762 - 764: 23(int16_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 763 42 - 765: 602(ptr) AccessChain 34(data) 761 68 38 - Store 765 764 - 766: 6(int) Load 8(invocation) - 767: 609(ptr) AccessChain 34(data) 47 68 - 768: 24(i16vec4) Load 767 - 769:608(i16vec2) VectorShuffle 768 768 0 1 - 770:608(i16vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 769 42 - 771: 609(ptr) AccessChain 34(data) 766 68 - 772: 24(i16vec4) Load 771 - 773: 24(i16vec4) VectorShuffle 772 770 4 5 2 3 - Store 771 773 - 774: 6(int) Load 8(invocation) - 775: 609(ptr) AccessChain 34(data) 58 68 - 776: 24(i16vec4) Load 775 - 777:618(i16vec3) VectorShuffle 776 776 0 1 2 - 778:618(i16vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 777 42 - 779: 609(ptr) AccessChain 34(data) 774 68 - 780: 24(i16vec4) Load 779 - 781: 24(i16vec4) VectorShuffle 780 778 4 5 6 3 - Store 779 781 - 782: 6(int) Load 8(invocation) - 783: 609(ptr) AccessChain 34(data) 68 68 - 784: 24(i16vec4) Load 783 - 785: 24(i16vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 784 42 - 786: 609(ptr) AccessChain 34(data) 782 68 - Store 786 785 - 787: 6(int) Load 8(invocation) - 790: 789(ptr) AccessChain 34(data) 37 788 38 - 791: 25(int64_t) Load 790 - 792: 25(int64_t) GroupNonUniformIAdd 43 ClusteredReduce 791 42 - 793: 789(ptr) AccessChain 34(data) 787 788 38 - Store 793 792 + 707:704(i16vec3) VectorShuffle 706 706 0 1 2 + 708:704(i16vec3) GroupNonUniformIAdd 43 ClusteredReduce 707 42 + 709: 687(ptr) AccessChain 34(data) 703 73 38 + 710: 23(int16_t) CompositeExtract 708 0 + Store 709 710 + 711: 687(ptr) AccessChain 34(data) 703 73 42 + 712: 23(int16_t) CompositeExtract 708 1 + Store 711 712 + 713: 687(ptr) AccessChain 34(data) 703 73 69 + 714: 23(int16_t) CompositeExtract 708 2 + Store 713 714 + 715: 6(int) Load 8(invocation) + 716: 694(ptr) AccessChain 34(data) 73 73 + 717: 24(i16vec4) Load 716 + 718: 24(i16vec4) GroupNonUniformIAdd 43 ClusteredReduce 717 42 + 719: 694(ptr) AccessChain 34(data) 715 73 + Store 719 718 + 720: 6(int) Load 8(invocation) + 721: 687(ptr) AccessChain 34(data) 37 73 38 + 722: 23(int16_t) Load 721 + 723: 23(int16_t) GroupNonUniformIMul 43 ClusteredReduce 722 42 + 724: 687(ptr) AccessChain 34(data) 720 73 38 + Store 724 723 + 725: 6(int) Load 8(invocation) + 726: 694(ptr) AccessChain 34(data) 47 73 + 727: 24(i16vec4) Load 726 + 728:693(i16vec2) VectorShuffle 727 727 0 1 + 729:693(i16vec2) GroupNonUniformIMul 43 ClusteredReduce 728 42 + 730: 687(ptr) AccessChain 34(data) 725 73 38 + 731: 23(int16_t) CompositeExtract 729 0 + Store 730 731 + 732: 687(ptr) AccessChain 34(data) 725 73 42 + 733: 23(int16_t) CompositeExtract 729 1 + Store 732 733 + 734: 6(int) Load 8(invocation) + 735: 694(ptr) AccessChain 34(data) 59 73 + 736: 24(i16vec4) Load 735 + 737:704(i16vec3) VectorShuffle 736 736 0 1 2 + 738:704(i16vec3) GroupNonUniformIMul 43 ClusteredReduce 737 42 + 739: 687(ptr) AccessChain 34(data) 734 73 38 + 740: 23(int16_t) CompositeExtract 738 0 + Store 739 740 + 741: 687(ptr) AccessChain 34(data) 734 73 42 + 742: 23(int16_t) CompositeExtract 738 1 + Store 741 742 + 743: 687(ptr) AccessChain 34(data) 734 73 69 + 744: 23(int16_t) CompositeExtract 738 2 + Store 743 744 + 745: 6(int) Load 8(invocation) + 746: 694(ptr) AccessChain 34(data) 73 73 + 747: 24(i16vec4) Load 746 + 748: 24(i16vec4) GroupNonUniformIMul 43 ClusteredReduce 747 42 + 749: 694(ptr) AccessChain 34(data) 745 73 + Store 749 748 + 750: 6(int) Load 8(invocation) + 751: 687(ptr) AccessChain 34(data) 37 73 38 + 752: 23(int16_t) Load 751 + 753: 23(int16_t) GroupNonUniformUMin 43 ClusteredReduce 752 42 + 754: 687(ptr) AccessChain 34(data) 750 73 38 + Store 754 753 + 755: 6(int) Load 8(invocation) + 756: 694(ptr) AccessChain 34(data) 47 73 + 757: 24(i16vec4) Load 756 + 758:693(i16vec2) VectorShuffle 757 757 0 1 + 759:693(i16vec2) GroupNonUniformUMin 43 ClusteredReduce 758 42 + 760: 687(ptr) AccessChain 34(data) 755 73 38 + 761: 23(int16_t) CompositeExtract 759 0 + Store 760 761 + 762: 687(ptr) AccessChain 34(data) 755 73 42 + 763: 23(int16_t) CompositeExtract 759 1 + Store 762 763 + 764: 6(int) Load 8(invocation) + 765: 694(ptr) AccessChain 34(data) 59 73 + 766: 24(i16vec4) Load 765 + 767:704(i16vec3) VectorShuffle 766 766 0 1 2 + 768:704(i16vec3) GroupNonUniformUMin 43 ClusteredReduce 767 42 + 769: 687(ptr) AccessChain 34(data) 764 73 38 + 770: 23(int16_t) CompositeExtract 768 0 + Store 769 770 + 771: 687(ptr) AccessChain 34(data) 764 73 42 + 772: 23(int16_t) CompositeExtract 768 1 + Store 771 772 + 773: 687(ptr) AccessChain 34(data) 764 73 69 + 774: 23(int16_t) CompositeExtract 768 2 + Store 773 774 + 775: 6(int) Load 8(invocation) + 776: 694(ptr) AccessChain 34(data) 73 73 + 777: 24(i16vec4) Load 776 + 778: 24(i16vec4) GroupNonUniformUMin 43 ClusteredReduce 777 42 + 779: 694(ptr) AccessChain 34(data) 775 73 + Store 779 778 + 780: 6(int) Load 8(invocation) + 781: 687(ptr) AccessChain 34(data) 37 73 38 + 782: 23(int16_t) Load 781 + 783: 23(int16_t) GroupNonUniformUMax 43 ClusteredReduce 782 42 + 784: 687(ptr) AccessChain 34(data) 780 73 38 + Store 784 783 + 785: 6(int) Load 8(invocation) + 786: 694(ptr) AccessChain 34(data) 47 73 + 787: 24(i16vec4) Load 786 + 788:693(i16vec2) VectorShuffle 787 787 0 1 + 789:693(i16vec2) GroupNonUniformUMax 43 ClusteredReduce 788 42 + 790: 687(ptr) AccessChain 34(data) 785 73 38 + 791: 23(int16_t) CompositeExtract 789 0 + Store 790 791 + 792: 687(ptr) AccessChain 34(data) 785 73 42 + 793: 23(int16_t) CompositeExtract 789 1 + Store 792 793 794: 6(int) Load 8(invocation) - 797: 796(ptr) AccessChain 34(data) 47 788 - 798: 26(i64vec4) Load 797 - 799:795(i64vec2) VectorShuffle 798 798 0 1 - 800:795(i64vec2) GroupNonUniformIAdd 43 ClusteredReduce 799 42 - 801: 796(ptr) AccessChain 34(data) 794 788 - 802: 26(i64vec4) Load 801 - 803: 26(i64vec4) VectorShuffle 802 800 4 5 2 3 - Store 801 803 - 804: 6(int) Load 8(invocation) - 806: 796(ptr) AccessChain 34(data) 58 788 - 807: 26(i64vec4) Load 806 - 808:805(i64vec3) VectorShuffle 807 807 0 1 2 - 809:805(i64vec3) GroupNonUniformIAdd 43 ClusteredReduce 808 42 - 810: 796(ptr) AccessChain 34(data) 804 788 - 811: 26(i64vec4) Load 810 - 812: 26(i64vec4) VectorShuffle 811 809 4 5 6 3 - Store 810 812 - 813: 6(int) Load 8(invocation) - 814: 796(ptr) AccessChain 34(data) 68 788 - 815: 26(i64vec4) Load 814 - 816: 26(i64vec4) GroupNonUniformIAdd 43 ClusteredReduce 815 42 - 817: 796(ptr) AccessChain 34(data) 813 788 - Store 817 816 - 818: 6(int) Load 8(invocation) - 819: 789(ptr) AccessChain 34(data) 37 788 38 - 820: 25(int64_t) Load 819 - 821: 25(int64_t) GroupNonUniformIMul 43 ClusteredReduce 820 42 - 822: 789(ptr) AccessChain 34(data) 818 788 38 - Store 822 821 - 823: 6(int) Load 8(invocation) - 824: 796(ptr) AccessChain 34(data) 47 788 - 825: 26(i64vec4) Load 824 - 826:795(i64vec2) VectorShuffle 825 825 0 1 - 827:795(i64vec2) GroupNonUniformIMul 43 ClusteredReduce 826 42 - 828: 796(ptr) AccessChain 34(data) 823 788 - 829: 26(i64vec4) Load 828 - 830: 26(i64vec4) VectorShuffle 829 827 4 5 2 3 - Store 828 830 - 831: 6(int) Load 8(invocation) - 832: 796(ptr) AccessChain 34(data) 58 788 - 833: 26(i64vec4) Load 832 - 834:805(i64vec3) VectorShuffle 833 833 0 1 2 - 835:805(i64vec3) GroupNonUniformIMul 43 ClusteredReduce 834 42 - 836: 796(ptr) AccessChain 34(data) 831 788 - 837: 26(i64vec4) Load 836 - 838: 26(i64vec4) VectorShuffle 837 835 4 5 6 3 - Store 836 838 - 839: 6(int) Load 8(invocation) - 840: 796(ptr) AccessChain 34(data) 68 788 - 841: 26(i64vec4) Load 840 - 842: 26(i64vec4) GroupNonUniformIMul 43 ClusteredReduce 841 42 - 843: 796(ptr) AccessChain 34(data) 839 788 - Store 843 842 - 844: 6(int) Load 8(invocation) - 845: 789(ptr) AccessChain 34(data) 37 788 38 - 846: 25(int64_t) Load 845 - 847: 25(int64_t) GroupNonUniformSMin 43 ClusteredReduce 846 42 - 848: 789(ptr) AccessChain 34(data) 844 788 38 - Store 848 847 - 849: 6(int) Load 8(invocation) - 850: 796(ptr) AccessChain 34(data) 47 788 - 851: 26(i64vec4) Load 850 - 852:795(i64vec2) VectorShuffle 851 851 0 1 - 853:795(i64vec2) GroupNonUniformSMin 43 ClusteredReduce 852 42 - 854: 796(ptr) AccessChain 34(data) 849 788 - 855: 26(i64vec4) Load 854 - 856: 26(i64vec4) VectorShuffle 855 853 4 5 2 3 - Store 854 856 - 857: 6(int) Load 8(invocation) - 858: 796(ptr) AccessChain 34(data) 58 788 - 859: 26(i64vec4) Load 858 - 860:805(i64vec3) VectorShuffle 859 859 0 1 2 - 861:805(i64vec3) GroupNonUniformSMin 43 ClusteredReduce 860 42 - 862: 796(ptr) AccessChain 34(data) 857 788 - 863: 26(i64vec4) Load 862 - 864: 26(i64vec4) VectorShuffle 863 861 4 5 6 3 - Store 862 864 + 795: 694(ptr) AccessChain 34(data) 59 73 + 796: 24(i16vec4) Load 795 + 797:704(i16vec3) VectorShuffle 796 796 0 1 2 + 798:704(i16vec3) GroupNonUniformUMax 43 ClusteredReduce 797 42 + 799: 687(ptr) AccessChain 34(data) 794 73 38 + 800: 23(int16_t) CompositeExtract 798 0 + Store 799 800 + 801: 687(ptr) AccessChain 34(data) 794 73 42 + 802: 23(int16_t) CompositeExtract 798 1 + Store 801 802 + 803: 687(ptr) AccessChain 34(data) 794 73 69 + 804: 23(int16_t) CompositeExtract 798 2 + Store 803 804 + 805: 6(int) Load 8(invocation) + 806: 694(ptr) AccessChain 34(data) 73 73 + 807: 24(i16vec4) Load 806 + 808: 24(i16vec4) GroupNonUniformUMax 43 ClusteredReduce 807 42 + 809: 694(ptr) AccessChain 34(data) 805 73 + Store 809 808 + 810: 6(int) Load 8(invocation) + 811: 687(ptr) AccessChain 34(data) 37 73 38 + 812: 23(int16_t) Load 811 + 813: 23(int16_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 812 42 + 814: 687(ptr) AccessChain 34(data) 810 73 38 + Store 814 813 + 815: 6(int) Load 8(invocation) + 816: 694(ptr) AccessChain 34(data) 47 73 + 817: 24(i16vec4) Load 816 + 818:693(i16vec2) VectorShuffle 817 817 0 1 + 819:693(i16vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 818 42 + 820: 687(ptr) AccessChain 34(data) 815 73 38 + 821: 23(int16_t) CompositeExtract 819 0 + Store 820 821 + 822: 687(ptr) AccessChain 34(data) 815 73 42 + 823: 23(int16_t) CompositeExtract 819 1 + Store 822 823 + 824: 6(int) Load 8(invocation) + 825: 694(ptr) AccessChain 34(data) 59 73 + 826: 24(i16vec4) Load 825 + 827:704(i16vec3) VectorShuffle 826 826 0 1 2 + 828:704(i16vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 827 42 + 829: 687(ptr) AccessChain 34(data) 824 73 38 + 830: 23(int16_t) CompositeExtract 828 0 + Store 829 830 + 831: 687(ptr) AccessChain 34(data) 824 73 42 + 832: 23(int16_t) CompositeExtract 828 1 + Store 831 832 + 833: 687(ptr) AccessChain 34(data) 824 73 69 + 834: 23(int16_t) CompositeExtract 828 2 + Store 833 834 + 835: 6(int) Load 8(invocation) + 836: 694(ptr) AccessChain 34(data) 73 73 + 837: 24(i16vec4) Load 836 + 838: 24(i16vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 837 42 + 839: 694(ptr) AccessChain 34(data) 835 73 + Store 839 838 + 840: 6(int) Load 8(invocation) + 841: 687(ptr) AccessChain 34(data) 37 73 38 + 842: 23(int16_t) Load 841 + 843: 23(int16_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 842 42 + 844: 687(ptr) AccessChain 34(data) 840 73 38 + Store 844 843 + 845: 6(int) Load 8(invocation) + 846: 694(ptr) AccessChain 34(data) 47 73 + 847: 24(i16vec4) Load 846 + 848:693(i16vec2) VectorShuffle 847 847 0 1 + 849:693(i16vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 848 42 + 850: 687(ptr) AccessChain 34(data) 845 73 38 + 851: 23(int16_t) CompositeExtract 849 0 + Store 850 851 + 852: 687(ptr) AccessChain 34(data) 845 73 42 + 853: 23(int16_t) CompositeExtract 849 1 + Store 852 853 + 854: 6(int) Load 8(invocation) + 855: 694(ptr) AccessChain 34(data) 59 73 + 856: 24(i16vec4) Load 855 + 857:704(i16vec3) VectorShuffle 856 856 0 1 2 + 858:704(i16vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 857 42 + 859: 687(ptr) AccessChain 34(data) 854 73 38 + 860: 23(int16_t) CompositeExtract 858 0 + Store 859 860 + 861: 687(ptr) AccessChain 34(data) 854 73 42 + 862: 23(int16_t) CompositeExtract 858 1 + Store 861 862 + 863: 687(ptr) AccessChain 34(data) 854 73 69 + 864: 23(int16_t) CompositeExtract 858 2 + Store 863 864 865: 6(int) Load 8(invocation) - 866: 796(ptr) AccessChain 34(data) 68 788 - 867: 26(i64vec4) Load 866 - 868: 26(i64vec4) GroupNonUniformSMin 43 ClusteredReduce 867 42 - 869: 796(ptr) AccessChain 34(data) 865 788 + 866: 694(ptr) AccessChain 34(data) 73 73 + 867: 24(i16vec4) Load 866 + 868: 24(i16vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 867 42 + 869: 694(ptr) AccessChain 34(data) 865 73 Store 869 868 870: 6(int) Load 8(invocation) - 871: 789(ptr) AccessChain 34(data) 37 788 38 - 872: 25(int64_t) Load 871 - 873: 25(int64_t) GroupNonUniformSMax 43 ClusteredReduce 872 42 - 874: 789(ptr) AccessChain 34(data) 870 788 38 + 871: 687(ptr) AccessChain 34(data) 37 73 38 + 872: 23(int16_t) Load 871 + 873: 23(int16_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 872 42 + 874: 687(ptr) AccessChain 34(data) 870 73 38 Store 874 873 875: 6(int) Load 8(invocation) - 876: 796(ptr) AccessChain 34(data) 47 788 - 877: 26(i64vec4) Load 876 - 878:795(i64vec2) VectorShuffle 877 877 0 1 - 879:795(i64vec2) GroupNonUniformSMax 43 ClusteredReduce 878 42 - 880: 796(ptr) AccessChain 34(data) 875 788 - 881: 26(i64vec4) Load 880 - 882: 26(i64vec4) VectorShuffle 881 879 4 5 2 3 - Store 880 882 - 883: 6(int) Load 8(invocation) - 884: 796(ptr) AccessChain 34(data) 58 788 - 885: 26(i64vec4) Load 884 - 886:805(i64vec3) VectorShuffle 885 885 0 1 2 - 887:805(i64vec3) GroupNonUniformSMax 43 ClusteredReduce 886 42 - 888: 796(ptr) AccessChain 34(data) 883 788 - 889: 26(i64vec4) Load 888 - 890: 26(i64vec4) VectorShuffle 889 887 4 5 6 3 - Store 888 890 - 891: 6(int) Load 8(invocation) - 892: 796(ptr) AccessChain 34(data) 68 788 - 893: 26(i64vec4) Load 892 - 894: 26(i64vec4) GroupNonUniformSMax 43 ClusteredReduce 893 42 - 895: 796(ptr) AccessChain 34(data) 891 788 - Store 895 894 - 896: 6(int) Load 8(invocation) - 897: 789(ptr) AccessChain 34(data) 37 788 38 - 898: 25(int64_t) Load 897 - 899: 25(int64_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 898 42 - 900: 789(ptr) AccessChain 34(data) 896 788 38 - Store 900 899 - 901: 6(int) Load 8(invocation) - 902: 796(ptr) AccessChain 34(data) 47 788 - 903: 26(i64vec4) Load 902 - 904:795(i64vec2) VectorShuffle 903 903 0 1 - 905:795(i64vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 904 42 - 906: 796(ptr) AccessChain 34(data) 901 788 - 907: 26(i64vec4) Load 906 - 908: 26(i64vec4) VectorShuffle 907 905 4 5 2 3 - Store 906 908 - 909: 6(int) Load 8(invocation) - 910: 796(ptr) AccessChain 34(data) 58 788 + 876: 694(ptr) AccessChain 34(data) 47 73 + 877: 24(i16vec4) Load 876 + 878:693(i16vec2) VectorShuffle 877 877 0 1 + 879:693(i16vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 878 42 + 880: 687(ptr) AccessChain 34(data) 875 73 38 + 881: 23(int16_t) CompositeExtract 879 0 + Store 880 881 + 882: 687(ptr) AccessChain 34(data) 875 73 42 + 883: 23(int16_t) CompositeExtract 879 1 + Store 882 883 + 884: 6(int) Load 8(invocation) + 885: 694(ptr) AccessChain 34(data) 59 73 + 886: 24(i16vec4) Load 885 + 887:704(i16vec3) VectorShuffle 886 886 0 1 2 + 888:704(i16vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 887 42 + 889: 687(ptr) AccessChain 34(data) 884 73 38 + 890: 23(int16_t) CompositeExtract 888 0 + Store 889 890 + 891: 687(ptr) AccessChain 34(data) 884 73 42 + 892: 23(int16_t) CompositeExtract 888 1 + Store 891 892 + 893: 687(ptr) AccessChain 34(data) 884 73 69 + 894: 23(int16_t) CompositeExtract 888 2 + Store 893 894 + 895: 6(int) Load 8(invocation) + 896: 694(ptr) AccessChain 34(data) 73 73 + 897: 24(i16vec4) Load 896 + 898: 24(i16vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 897 42 + 899: 694(ptr) AccessChain 34(data) 895 73 + Store 899 898 + 900: 6(int) Load 8(invocation) + 903: 902(ptr) AccessChain 34(data) 37 901 38 + 904: 25(int64_t) Load 903 + 905: 25(int64_t) GroupNonUniformIAdd 43 ClusteredReduce 904 42 + 906: 902(ptr) AccessChain 34(data) 900 901 38 + Store 906 905 + 907: 6(int) Load 8(invocation) + 910: 909(ptr) AccessChain 34(data) 47 901 911: 26(i64vec4) Load 910 - 912:805(i64vec3) VectorShuffle 911 911 0 1 2 - 913:805(i64vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 912 42 - 914: 796(ptr) AccessChain 34(data) 909 788 - 915: 26(i64vec4) Load 914 - 916: 26(i64vec4) VectorShuffle 915 913 4 5 6 3 - Store 914 916 - 917: 6(int) Load 8(invocation) - 918: 796(ptr) AccessChain 34(data) 68 788 - 919: 26(i64vec4) Load 918 - 920: 26(i64vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 919 42 - 921: 796(ptr) AccessChain 34(data) 917 788 - Store 921 920 - 922: 6(int) Load 8(invocation) - 923: 789(ptr) AccessChain 34(data) 37 788 38 - 924: 25(int64_t) Load 923 - 925: 25(int64_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 924 42 - 926: 789(ptr) AccessChain 34(data) 922 788 38 - Store 926 925 - 927: 6(int) Load 8(invocation) - 928: 796(ptr) AccessChain 34(data) 47 788 - 929: 26(i64vec4) Load 928 - 930:795(i64vec2) VectorShuffle 929 929 0 1 - 931:795(i64vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 930 42 - 932: 796(ptr) AccessChain 34(data) 927 788 - 933: 26(i64vec4) Load 932 - 934: 26(i64vec4) VectorShuffle 933 931 4 5 2 3 - Store 932 934 + 912:908(i64vec2) VectorShuffle 911 911 0 1 + 913:908(i64vec2) GroupNonUniformIAdd 43 ClusteredReduce 912 42 + 914: 902(ptr) AccessChain 34(data) 907 901 38 + 915: 25(int64_t) CompositeExtract 913 0 + Store 914 915 + 916: 902(ptr) AccessChain 34(data) 907 901 42 + 917: 25(int64_t) CompositeExtract 913 1 + Store 916 917 + 918: 6(int) Load 8(invocation) + 920: 909(ptr) AccessChain 34(data) 59 901 + 921: 26(i64vec4) Load 920 + 922:919(i64vec3) VectorShuffle 921 921 0 1 2 + 923:919(i64vec3) GroupNonUniformIAdd 43 ClusteredReduce 922 42 + 924: 902(ptr) AccessChain 34(data) 918 901 38 + 925: 25(int64_t) CompositeExtract 923 0 + Store 924 925 + 926: 902(ptr) AccessChain 34(data) 918 901 42 + 927: 25(int64_t) CompositeExtract 923 1 + Store 926 927 + 928: 902(ptr) AccessChain 34(data) 918 901 69 + 929: 25(int64_t) CompositeExtract 923 2 + Store 928 929 + 930: 6(int) Load 8(invocation) + 931: 909(ptr) AccessChain 34(data) 73 901 + 932: 26(i64vec4) Load 931 + 933: 26(i64vec4) GroupNonUniformIAdd 43 ClusteredReduce 932 42 + 934: 909(ptr) AccessChain 34(data) 930 901 + Store 934 933 935: 6(int) Load 8(invocation) - 936: 796(ptr) AccessChain 34(data) 58 788 - 937: 26(i64vec4) Load 936 - 938:805(i64vec3) VectorShuffle 937 937 0 1 2 - 939:805(i64vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 938 42 - 940: 796(ptr) AccessChain 34(data) 935 788 - 941: 26(i64vec4) Load 940 - 942: 26(i64vec4) VectorShuffle 941 939 4 5 6 3 - Store 940 942 - 943: 6(int) Load 8(invocation) - 944: 796(ptr) AccessChain 34(data) 68 788 - 945: 26(i64vec4) Load 944 - 946: 26(i64vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 945 42 - 947: 796(ptr) AccessChain 34(data) 943 788 - Store 947 946 - 948: 6(int) Load 8(invocation) - 949: 789(ptr) AccessChain 34(data) 37 788 38 - 950: 25(int64_t) Load 949 - 951: 25(int64_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 950 42 - 952: 789(ptr) AccessChain 34(data) 948 788 38 - Store 952 951 - 953: 6(int) Load 8(invocation) - 954: 796(ptr) AccessChain 34(data) 47 788 - 955: 26(i64vec4) Load 954 - 956:795(i64vec2) VectorShuffle 955 955 0 1 - 957:795(i64vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 956 42 - 958: 796(ptr) AccessChain 34(data) 953 788 - 959: 26(i64vec4) Load 958 - 960: 26(i64vec4) VectorShuffle 959 957 4 5 2 3 - Store 958 960 - 961: 6(int) Load 8(invocation) - 962: 796(ptr) AccessChain 34(data) 58 788 - 963: 26(i64vec4) Load 962 - 964:805(i64vec3) VectorShuffle 963 963 0 1 2 - 965:805(i64vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 964 42 - 966: 796(ptr) AccessChain 34(data) 961 788 - 967: 26(i64vec4) Load 966 - 968: 26(i64vec4) VectorShuffle 967 965 4 5 6 3 - Store 966 968 - 969: 6(int) Load 8(invocation) - 970: 796(ptr) AccessChain 34(data) 68 788 - 971: 26(i64vec4) Load 970 - 972: 26(i64vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 971 42 - 973: 796(ptr) AccessChain 34(data) 969 788 - Store 973 972 - 974: 6(int) Load 8(invocation) - 977: 976(ptr) AccessChain 34(data) 37 975 38 - 978: 27(int64_t) Load 977 - 979: 27(int64_t) GroupNonUniformIAdd 43 ClusteredReduce 978 42 - 980: 976(ptr) AccessChain 34(data) 974 975 38 - Store 980 979 - 981: 6(int) Load 8(invocation) - 984: 983(ptr) AccessChain 34(data) 47 975 - 985: 28(i64vec4) Load 984 - 986:982(i64vec2) VectorShuffle 985 985 0 1 - 987:982(i64vec2) GroupNonUniformIAdd 43 ClusteredReduce 986 42 - 988: 983(ptr) AccessChain 34(data) 981 975 - 989: 28(i64vec4) Load 988 - 990: 28(i64vec4) VectorShuffle 989 987 4 5 2 3 - Store 988 990 - 991: 6(int) Load 8(invocation) - 993: 983(ptr) AccessChain 34(data) 58 975 - 994: 28(i64vec4) Load 993 - 995:992(i64vec3) VectorShuffle 994 994 0 1 2 - 996:992(i64vec3) GroupNonUniformIAdd 43 ClusteredReduce 995 42 - 997: 983(ptr) AccessChain 34(data) 991 975 - 998: 28(i64vec4) Load 997 - 999: 28(i64vec4) VectorShuffle 998 996 4 5 6 3 - Store 997 999 + 936: 902(ptr) AccessChain 34(data) 37 901 38 + 937: 25(int64_t) Load 936 + 938: 25(int64_t) GroupNonUniformIMul 43 ClusteredReduce 937 42 + 939: 902(ptr) AccessChain 34(data) 935 901 38 + Store 939 938 + 940: 6(int) Load 8(invocation) + 941: 909(ptr) AccessChain 34(data) 47 901 + 942: 26(i64vec4) Load 941 + 943:908(i64vec2) VectorShuffle 942 942 0 1 + 944:908(i64vec2) GroupNonUniformIMul 43 ClusteredReduce 943 42 + 945: 902(ptr) AccessChain 34(data) 940 901 38 + 946: 25(int64_t) CompositeExtract 944 0 + Store 945 946 + 947: 902(ptr) AccessChain 34(data) 940 901 42 + 948: 25(int64_t) CompositeExtract 944 1 + Store 947 948 + 949: 6(int) Load 8(invocation) + 950: 909(ptr) AccessChain 34(data) 59 901 + 951: 26(i64vec4) Load 950 + 952:919(i64vec3) VectorShuffle 951 951 0 1 2 + 953:919(i64vec3) GroupNonUniformIMul 43 ClusteredReduce 952 42 + 954: 902(ptr) AccessChain 34(data) 949 901 38 + 955: 25(int64_t) CompositeExtract 953 0 + Store 954 955 + 956: 902(ptr) AccessChain 34(data) 949 901 42 + 957: 25(int64_t) CompositeExtract 953 1 + Store 956 957 + 958: 902(ptr) AccessChain 34(data) 949 901 69 + 959: 25(int64_t) CompositeExtract 953 2 + Store 958 959 + 960: 6(int) Load 8(invocation) + 961: 909(ptr) AccessChain 34(data) 73 901 + 962: 26(i64vec4) Load 961 + 963: 26(i64vec4) GroupNonUniformIMul 43 ClusteredReduce 962 42 + 964: 909(ptr) AccessChain 34(data) 960 901 + Store 964 963 + 965: 6(int) Load 8(invocation) + 966: 902(ptr) AccessChain 34(data) 37 901 38 + 967: 25(int64_t) Load 966 + 968: 25(int64_t) GroupNonUniformSMin 43 ClusteredReduce 967 42 + 969: 902(ptr) AccessChain 34(data) 965 901 38 + Store 969 968 + 970: 6(int) Load 8(invocation) + 971: 909(ptr) AccessChain 34(data) 47 901 + 972: 26(i64vec4) Load 971 + 973:908(i64vec2) VectorShuffle 972 972 0 1 + 974:908(i64vec2) GroupNonUniformSMin 43 ClusteredReduce 973 42 + 975: 902(ptr) AccessChain 34(data) 970 901 38 + 976: 25(int64_t) CompositeExtract 974 0 + Store 975 976 + 977: 902(ptr) AccessChain 34(data) 970 901 42 + 978: 25(int64_t) CompositeExtract 974 1 + Store 977 978 + 979: 6(int) Load 8(invocation) + 980: 909(ptr) AccessChain 34(data) 59 901 + 981: 26(i64vec4) Load 980 + 982:919(i64vec3) VectorShuffle 981 981 0 1 2 + 983:919(i64vec3) GroupNonUniformSMin 43 ClusteredReduce 982 42 + 984: 902(ptr) AccessChain 34(data) 979 901 38 + 985: 25(int64_t) CompositeExtract 983 0 + Store 984 985 + 986: 902(ptr) AccessChain 34(data) 979 901 42 + 987: 25(int64_t) CompositeExtract 983 1 + Store 986 987 + 988: 902(ptr) AccessChain 34(data) 979 901 69 + 989: 25(int64_t) CompositeExtract 983 2 + Store 988 989 + 990: 6(int) Load 8(invocation) + 991: 909(ptr) AccessChain 34(data) 73 901 + 992: 26(i64vec4) Load 991 + 993: 26(i64vec4) GroupNonUniformSMin 43 ClusteredReduce 992 42 + 994: 909(ptr) AccessChain 34(data) 990 901 + Store 994 993 + 995: 6(int) Load 8(invocation) + 996: 902(ptr) AccessChain 34(data) 37 901 38 + 997: 25(int64_t) Load 996 + 998: 25(int64_t) GroupNonUniformSMax 43 ClusteredReduce 997 42 + 999: 902(ptr) AccessChain 34(data) 995 901 38 + Store 999 998 1000: 6(int) Load 8(invocation) - 1001: 983(ptr) AccessChain 34(data) 68 975 - 1002: 28(i64vec4) Load 1001 - 1003: 28(i64vec4) GroupNonUniformIAdd 43 ClusteredReduce 1002 42 - 1004: 983(ptr) AccessChain 34(data) 1000 975 - Store 1004 1003 - 1005: 6(int) Load 8(invocation) - 1006: 976(ptr) AccessChain 34(data) 37 975 38 - 1007: 27(int64_t) Load 1006 - 1008: 27(int64_t) GroupNonUniformIMul 43 ClusteredReduce 1007 42 - 1009: 976(ptr) AccessChain 34(data) 1005 975 38 - Store 1009 1008 - 1010: 6(int) Load 8(invocation) - 1011: 983(ptr) AccessChain 34(data) 47 975 - 1012: 28(i64vec4) Load 1011 - 1013:982(i64vec2) VectorShuffle 1012 1012 0 1 - 1014:982(i64vec2) GroupNonUniformIMul 43 ClusteredReduce 1013 42 - 1015: 983(ptr) AccessChain 34(data) 1010 975 - 1016: 28(i64vec4) Load 1015 - 1017: 28(i64vec4) VectorShuffle 1016 1014 4 5 2 3 - Store 1015 1017 - 1018: 6(int) Load 8(invocation) - 1019: 983(ptr) AccessChain 34(data) 58 975 - 1020: 28(i64vec4) Load 1019 - 1021:992(i64vec3) VectorShuffle 1020 1020 0 1 2 - 1022:992(i64vec3) GroupNonUniformIMul 43 ClusteredReduce 1021 42 - 1023: 983(ptr) AccessChain 34(data) 1018 975 - 1024: 28(i64vec4) Load 1023 - 1025: 28(i64vec4) VectorShuffle 1024 1022 4 5 6 3 - Store 1023 1025 - 1026: 6(int) Load 8(invocation) - 1027: 983(ptr) AccessChain 34(data) 68 975 - 1028: 28(i64vec4) Load 1027 - 1029: 28(i64vec4) GroupNonUniformIMul 43 ClusteredReduce 1028 42 - 1030: 983(ptr) AccessChain 34(data) 1026 975 - Store 1030 1029 - 1031: 6(int) Load 8(invocation) - 1032: 976(ptr) AccessChain 34(data) 37 975 38 - 1033: 27(int64_t) Load 1032 - 1034: 27(int64_t) GroupNonUniformUMin 43 ClusteredReduce 1033 42 - 1035: 976(ptr) AccessChain 34(data) 1031 975 38 - Store 1035 1034 - 1036: 6(int) Load 8(invocation) - 1037: 983(ptr) AccessChain 34(data) 47 975 - 1038: 28(i64vec4) Load 1037 - 1039:982(i64vec2) VectorShuffle 1038 1038 0 1 - 1040:982(i64vec2) GroupNonUniformUMin 43 ClusteredReduce 1039 42 - 1041: 983(ptr) AccessChain 34(data) 1036 975 - 1042: 28(i64vec4) Load 1041 - 1043: 28(i64vec4) VectorShuffle 1042 1040 4 5 2 3 - Store 1041 1043 - 1044: 6(int) Load 8(invocation) - 1045: 983(ptr) AccessChain 34(data) 58 975 - 1046: 28(i64vec4) Load 1045 - 1047:992(i64vec3) VectorShuffle 1046 1046 0 1 2 - 1048:992(i64vec3) GroupNonUniformUMin 43 ClusteredReduce 1047 42 - 1049: 983(ptr) AccessChain 34(data) 1044 975 - 1050: 28(i64vec4) Load 1049 - 1051: 28(i64vec4) VectorShuffle 1050 1048 4 5 6 3 - Store 1049 1051 - 1052: 6(int) Load 8(invocation) - 1053: 983(ptr) AccessChain 34(data) 68 975 - 1054: 28(i64vec4) Load 1053 - 1055: 28(i64vec4) GroupNonUniformUMin 43 ClusteredReduce 1054 42 - 1056: 983(ptr) AccessChain 34(data) 1052 975 - Store 1056 1055 - 1057: 6(int) Load 8(invocation) - 1058: 976(ptr) AccessChain 34(data) 37 975 38 - 1059: 27(int64_t) Load 1058 - 1060: 27(int64_t) GroupNonUniformUMax 43 ClusteredReduce 1059 42 - 1061: 976(ptr) AccessChain 34(data) 1057 975 38 - Store 1061 1060 - 1062: 6(int) Load 8(invocation) - 1063: 983(ptr) AccessChain 34(data) 47 975 - 1064: 28(i64vec4) Load 1063 - 1065:982(i64vec2) VectorShuffle 1064 1064 0 1 - 1066:982(i64vec2) GroupNonUniformUMax 43 ClusteredReduce 1065 42 - 1067: 983(ptr) AccessChain 34(data) 1062 975 - 1068: 28(i64vec4) Load 1067 - 1069: 28(i64vec4) VectorShuffle 1068 1066 4 5 2 3 - Store 1067 1069 - 1070: 6(int) Load 8(invocation) - 1071: 983(ptr) AccessChain 34(data) 58 975 - 1072: 28(i64vec4) Load 1071 - 1073:992(i64vec3) VectorShuffle 1072 1072 0 1 2 - 1074:992(i64vec3) GroupNonUniformUMax 43 ClusteredReduce 1073 42 - 1075: 983(ptr) AccessChain 34(data) 1070 975 - 1076: 28(i64vec4) Load 1075 - 1077: 28(i64vec4) VectorShuffle 1076 1074 4 5 6 3 - Store 1075 1077 - 1078: 6(int) Load 8(invocation) - 1079: 983(ptr) AccessChain 34(data) 68 975 - 1080: 28(i64vec4) Load 1079 - 1081: 28(i64vec4) GroupNonUniformUMax 43 ClusteredReduce 1080 42 - 1082: 983(ptr) AccessChain 34(data) 1078 975 - Store 1082 1081 - 1083: 6(int) Load 8(invocation) - 1084: 976(ptr) AccessChain 34(data) 37 975 38 - 1085: 27(int64_t) Load 1084 - 1086: 27(int64_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1085 42 - 1087: 976(ptr) AccessChain 34(data) 1083 975 38 - Store 1087 1086 - 1088: 6(int) Load 8(invocation) - 1089: 983(ptr) AccessChain 34(data) 47 975 - 1090: 28(i64vec4) Load 1089 - 1091:982(i64vec2) VectorShuffle 1090 1090 0 1 - 1092:982(i64vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1091 42 - 1093: 983(ptr) AccessChain 34(data) 1088 975 - 1094: 28(i64vec4) Load 1093 - 1095: 28(i64vec4) VectorShuffle 1094 1092 4 5 2 3 - Store 1093 1095 - 1096: 6(int) Load 8(invocation) - 1097: 983(ptr) AccessChain 34(data) 58 975 - 1098: 28(i64vec4) Load 1097 - 1099:992(i64vec3) VectorShuffle 1098 1098 0 1 2 - 1100:992(i64vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1099 42 - 1101: 983(ptr) AccessChain 34(data) 1096 975 - 1102: 28(i64vec4) Load 1101 - 1103: 28(i64vec4) VectorShuffle 1102 1100 4 5 6 3 - Store 1101 1103 - 1104: 6(int) Load 8(invocation) - 1105: 983(ptr) AccessChain 34(data) 68 975 - 1106: 28(i64vec4) Load 1105 - 1107: 28(i64vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1106 42 - 1108: 983(ptr) AccessChain 34(data) 1104 975 - Store 1108 1107 - 1109: 6(int) Load 8(invocation) - 1110: 976(ptr) AccessChain 34(data) 37 975 38 - 1111: 27(int64_t) Load 1110 - 1112: 27(int64_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 1111 42 - 1113: 976(ptr) AccessChain 34(data) 1109 975 38 - Store 1113 1112 - 1114: 6(int) Load 8(invocation) - 1115: 983(ptr) AccessChain 34(data) 47 975 - 1116: 28(i64vec4) Load 1115 - 1117:982(i64vec2) VectorShuffle 1116 1116 0 1 - 1118:982(i64vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 1117 42 - 1119: 983(ptr) AccessChain 34(data) 1114 975 - 1120: 28(i64vec4) Load 1119 - 1121: 28(i64vec4) VectorShuffle 1120 1118 4 5 2 3 - Store 1119 1121 + 1001: 909(ptr) AccessChain 34(data) 47 901 + 1002: 26(i64vec4) Load 1001 + 1003:908(i64vec2) VectorShuffle 1002 1002 0 1 + 1004:908(i64vec2) GroupNonUniformSMax 43 ClusteredReduce 1003 42 + 1005: 902(ptr) AccessChain 34(data) 1000 901 38 + 1006: 25(int64_t) CompositeExtract 1004 0 + Store 1005 1006 + 1007: 902(ptr) AccessChain 34(data) 1000 901 42 + 1008: 25(int64_t) CompositeExtract 1004 1 + Store 1007 1008 + 1009: 6(int) Load 8(invocation) + 1010: 909(ptr) AccessChain 34(data) 59 901 + 1011: 26(i64vec4) Load 1010 + 1012:919(i64vec3) VectorShuffle 1011 1011 0 1 2 + 1013:919(i64vec3) GroupNonUniformSMax 43 ClusteredReduce 1012 42 + 1014: 902(ptr) AccessChain 34(data) 1009 901 38 + 1015: 25(int64_t) CompositeExtract 1013 0 + Store 1014 1015 + 1016: 902(ptr) AccessChain 34(data) 1009 901 42 + 1017: 25(int64_t) CompositeExtract 1013 1 + Store 1016 1017 + 1018: 902(ptr) AccessChain 34(data) 1009 901 69 + 1019: 25(int64_t) CompositeExtract 1013 2 + Store 1018 1019 + 1020: 6(int) Load 8(invocation) + 1021: 909(ptr) AccessChain 34(data) 73 901 + 1022: 26(i64vec4) Load 1021 + 1023: 26(i64vec4) GroupNonUniformSMax 43 ClusteredReduce 1022 42 + 1024: 909(ptr) AccessChain 34(data) 1020 901 + Store 1024 1023 + 1025: 6(int) Load 8(invocation) + 1026: 902(ptr) AccessChain 34(data) 37 901 38 + 1027: 25(int64_t) Load 1026 + 1028: 25(int64_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1027 42 + 1029: 902(ptr) AccessChain 34(data) 1025 901 38 + Store 1029 1028 + 1030: 6(int) Load 8(invocation) + 1031: 909(ptr) AccessChain 34(data) 47 901 + 1032: 26(i64vec4) Load 1031 + 1033:908(i64vec2) VectorShuffle 1032 1032 0 1 + 1034:908(i64vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1033 42 + 1035: 902(ptr) AccessChain 34(data) 1030 901 38 + 1036: 25(int64_t) CompositeExtract 1034 0 + Store 1035 1036 + 1037: 902(ptr) AccessChain 34(data) 1030 901 42 + 1038: 25(int64_t) CompositeExtract 1034 1 + Store 1037 1038 + 1039: 6(int) Load 8(invocation) + 1040: 909(ptr) AccessChain 34(data) 59 901 + 1041: 26(i64vec4) Load 1040 + 1042:919(i64vec3) VectorShuffle 1041 1041 0 1 2 + 1043:919(i64vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1042 42 + 1044: 902(ptr) AccessChain 34(data) 1039 901 38 + 1045: 25(int64_t) CompositeExtract 1043 0 + Store 1044 1045 + 1046: 902(ptr) AccessChain 34(data) 1039 901 42 + 1047: 25(int64_t) CompositeExtract 1043 1 + Store 1046 1047 + 1048: 902(ptr) AccessChain 34(data) 1039 901 69 + 1049: 25(int64_t) CompositeExtract 1043 2 + Store 1048 1049 + 1050: 6(int) Load 8(invocation) + 1051: 909(ptr) AccessChain 34(data) 73 901 + 1052: 26(i64vec4) Load 1051 + 1053: 26(i64vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1052 42 + 1054: 909(ptr) AccessChain 34(data) 1050 901 + Store 1054 1053 + 1055: 6(int) Load 8(invocation) + 1056: 902(ptr) AccessChain 34(data) 37 901 38 + 1057: 25(int64_t) Load 1056 + 1058: 25(int64_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 1057 42 + 1059: 902(ptr) AccessChain 34(data) 1055 901 38 + Store 1059 1058 + 1060: 6(int) Load 8(invocation) + 1061: 909(ptr) AccessChain 34(data) 47 901 + 1062: 26(i64vec4) Load 1061 + 1063:908(i64vec2) VectorShuffle 1062 1062 0 1 + 1064:908(i64vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 1063 42 + 1065: 902(ptr) AccessChain 34(data) 1060 901 38 + 1066: 25(int64_t) CompositeExtract 1064 0 + Store 1065 1066 + 1067: 902(ptr) AccessChain 34(data) 1060 901 42 + 1068: 25(int64_t) CompositeExtract 1064 1 + Store 1067 1068 + 1069: 6(int) Load 8(invocation) + 1070: 909(ptr) AccessChain 34(data) 59 901 + 1071: 26(i64vec4) Load 1070 + 1072:919(i64vec3) VectorShuffle 1071 1071 0 1 2 + 1073:919(i64vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 1072 42 + 1074: 902(ptr) AccessChain 34(data) 1069 901 38 + 1075: 25(int64_t) CompositeExtract 1073 0 + Store 1074 1075 + 1076: 902(ptr) AccessChain 34(data) 1069 901 42 + 1077: 25(int64_t) CompositeExtract 1073 1 + Store 1076 1077 + 1078: 902(ptr) AccessChain 34(data) 1069 901 69 + 1079: 25(int64_t) CompositeExtract 1073 2 + Store 1078 1079 + 1080: 6(int) Load 8(invocation) + 1081: 909(ptr) AccessChain 34(data) 73 901 + 1082: 26(i64vec4) Load 1081 + 1083: 26(i64vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 1082 42 + 1084: 909(ptr) AccessChain 34(data) 1080 901 + Store 1084 1083 + 1085: 6(int) Load 8(invocation) + 1086: 902(ptr) AccessChain 34(data) 37 901 38 + 1087: 25(int64_t) Load 1086 + 1088: 25(int64_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 1087 42 + 1089: 902(ptr) AccessChain 34(data) 1085 901 38 + Store 1089 1088 + 1090: 6(int) Load 8(invocation) + 1091: 909(ptr) AccessChain 34(data) 47 901 + 1092: 26(i64vec4) Load 1091 + 1093:908(i64vec2) VectorShuffle 1092 1092 0 1 + 1094:908(i64vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 1093 42 + 1095: 902(ptr) AccessChain 34(data) 1090 901 38 + 1096: 25(int64_t) CompositeExtract 1094 0 + Store 1095 1096 + 1097: 902(ptr) AccessChain 34(data) 1090 901 42 + 1098: 25(int64_t) CompositeExtract 1094 1 + Store 1097 1098 + 1099: 6(int) Load 8(invocation) + 1100: 909(ptr) AccessChain 34(data) 59 901 + 1101: 26(i64vec4) Load 1100 + 1102:919(i64vec3) VectorShuffle 1101 1101 0 1 2 + 1103:919(i64vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 1102 42 + 1104: 902(ptr) AccessChain 34(data) 1099 901 38 + 1105: 25(int64_t) CompositeExtract 1103 0 + Store 1104 1105 + 1106: 902(ptr) AccessChain 34(data) 1099 901 42 + 1107: 25(int64_t) CompositeExtract 1103 1 + Store 1106 1107 + 1108: 902(ptr) AccessChain 34(data) 1099 901 69 + 1109: 25(int64_t) CompositeExtract 1103 2 + Store 1108 1109 + 1110: 6(int) Load 8(invocation) + 1111: 909(ptr) AccessChain 34(data) 73 901 + 1112: 26(i64vec4) Load 1111 + 1113: 26(i64vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 1112 42 + 1114: 909(ptr) AccessChain 34(data) 1110 901 + Store 1114 1113 + 1115: 6(int) Load 8(invocation) + 1118: 1117(ptr) AccessChain 34(data) 37 1116 38 + 1119: 27(int64_t) Load 1118 + 1120: 27(int64_t) GroupNonUniformIAdd 43 ClusteredReduce 1119 42 + 1121: 1117(ptr) AccessChain 34(data) 1115 1116 38 + Store 1121 1120 1122: 6(int) Load 8(invocation) - 1123: 983(ptr) AccessChain 34(data) 58 975 - 1124: 28(i64vec4) Load 1123 - 1125:992(i64vec3) VectorShuffle 1124 1124 0 1 2 - 1126:992(i64vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 1125 42 - 1127: 983(ptr) AccessChain 34(data) 1122 975 - 1128: 28(i64vec4) Load 1127 - 1129: 28(i64vec4) VectorShuffle 1128 1126 4 5 6 3 - Store 1127 1129 - 1130: 6(int) Load 8(invocation) - 1131: 983(ptr) AccessChain 34(data) 68 975 - 1132: 28(i64vec4) Load 1131 - 1133: 28(i64vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 1132 42 - 1134: 983(ptr) AccessChain 34(data) 1130 975 - Store 1134 1133 - 1135: 6(int) Load 8(invocation) - 1136: 976(ptr) AccessChain 34(data) 37 975 38 - 1137: 27(int64_t) Load 1136 - 1138: 27(int64_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 1137 42 - 1139: 976(ptr) AccessChain 34(data) 1135 975 38 - Store 1139 1138 - 1140: 6(int) Load 8(invocation) - 1141: 983(ptr) AccessChain 34(data) 47 975 - 1142: 28(i64vec4) Load 1141 - 1143:982(i64vec2) VectorShuffle 1142 1142 0 1 - 1144:982(i64vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 1143 42 - 1145: 983(ptr) AccessChain 34(data) 1140 975 - 1146: 28(i64vec4) Load 1145 - 1147: 28(i64vec4) VectorShuffle 1146 1144 4 5 2 3 - Store 1145 1147 - 1148: 6(int) Load 8(invocation) - 1149: 983(ptr) AccessChain 34(data) 58 975 - 1150: 28(i64vec4) Load 1149 - 1151:992(i64vec3) VectorShuffle 1150 1150 0 1 2 - 1152:992(i64vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 1151 42 - 1153: 983(ptr) AccessChain 34(data) 1148 975 - 1154: 28(i64vec4) Load 1153 - 1155: 28(i64vec4) VectorShuffle 1154 1152 4 5 6 3 - Store 1153 1155 - 1156: 6(int) Load 8(invocation) - 1157: 983(ptr) AccessChain 34(data) 68 975 - 1158: 28(i64vec4) Load 1157 - 1159: 28(i64vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 1158 42 - 1160: 983(ptr) AccessChain 34(data) 1156 975 - Store 1160 1159 - 1161: 6(int) Load 8(invocation) - 1164: 1163(ptr) AccessChain 34(data) 37 1162 38 - 1165:29(float16_t) Load 1164 - 1166:29(float16_t) GroupNonUniformFAdd 43 ClusteredReduce 1165 42 - 1167: 1163(ptr) AccessChain 34(data) 1161 1162 38 - Store 1167 1166 - 1168: 6(int) Load 8(invocation) - 1171: 1170(ptr) AccessChain 34(data) 47 1162 - 1172: 30(f16vec4) Load 1171 - 1173:1169(f16vec2) VectorShuffle 1172 1172 0 1 - 1174:1169(f16vec2) GroupNonUniformFAdd 43 ClusteredReduce 1173 42 - 1175: 1170(ptr) AccessChain 34(data) 1168 1162 - 1176: 30(f16vec4) Load 1175 - 1177: 30(f16vec4) VectorShuffle 1176 1174 4 5 2 3 - Store 1175 1177 - 1178: 6(int) Load 8(invocation) - 1180: 1170(ptr) AccessChain 34(data) 58 1162 - 1181: 30(f16vec4) Load 1180 - 1182:1179(f16vec3) VectorShuffle 1181 1181 0 1 2 - 1183:1179(f16vec3) GroupNonUniformFAdd 43 ClusteredReduce 1182 42 - 1184: 1170(ptr) AccessChain 34(data) 1178 1162 - 1185: 30(f16vec4) Load 1184 - 1186: 30(f16vec4) VectorShuffle 1185 1183 4 5 6 3 - Store 1184 1186 - 1187: 6(int) Load 8(invocation) - 1188: 1170(ptr) AccessChain 34(data) 68 1162 - 1189: 30(f16vec4) Load 1188 - 1190: 30(f16vec4) GroupNonUniformFAdd 43 ClusteredReduce 1189 42 - 1191: 1170(ptr) AccessChain 34(data) 1187 1162 - Store 1191 1190 - 1192: 6(int) Load 8(invocation) - 1193: 1163(ptr) AccessChain 34(data) 37 1162 38 - 1194:29(float16_t) Load 1193 - 1195:29(float16_t) GroupNonUniformFMul 43 ClusteredReduce 1194 42 - 1196: 1163(ptr) AccessChain 34(data) 1192 1162 38 - Store 1196 1195 - 1197: 6(int) Load 8(invocation) - 1198: 1170(ptr) AccessChain 34(data) 47 1162 - 1199: 30(f16vec4) Load 1198 - 1200:1169(f16vec2) VectorShuffle 1199 1199 0 1 - 1201:1169(f16vec2) GroupNonUniformFMul 43 ClusteredReduce 1200 42 - 1202: 1170(ptr) AccessChain 34(data) 1197 1162 - 1203: 30(f16vec4) Load 1202 - 1204: 30(f16vec4) VectorShuffle 1203 1201 4 5 2 3 - Store 1202 1204 + 1125: 1124(ptr) AccessChain 34(data) 47 1116 + 1126: 28(i64vec4) Load 1125 + 1127:1123(i64vec2) VectorShuffle 1126 1126 0 1 + 1128:1123(i64vec2) GroupNonUniformIAdd 43 ClusteredReduce 1127 42 + 1129: 1117(ptr) AccessChain 34(data) 1122 1116 38 + 1130: 27(int64_t) CompositeExtract 1128 0 + Store 1129 1130 + 1131: 1117(ptr) AccessChain 34(data) 1122 1116 42 + 1132: 27(int64_t) CompositeExtract 1128 1 + Store 1131 1132 + 1133: 6(int) Load 8(invocation) + 1135: 1124(ptr) AccessChain 34(data) 59 1116 + 1136: 28(i64vec4) Load 1135 + 1137:1134(i64vec3) VectorShuffle 1136 1136 0 1 2 + 1138:1134(i64vec3) GroupNonUniformIAdd 43 ClusteredReduce 1137 42 + 1139: 1117(ptr) AccessChain 34(data) 1133 1116 38 + 1140: 27(int64_t) CompositeExtract 1138 0 + Store 1139 1140 + 1141: 1117(ptr) AccessChain 34(data) 1133 1116 42 + 1142: 27(int64_t) CompositeExtract 1138 1 + Store 1141 1142 + 1143: 1117(ptr) AccessChain 34(data) 1133 1116 69 + 1144: 27(int64_t) CompositeExtract 1138 2 + Store 1143 1144 + 1145: 6(int) Load 8(invocation) + 1146: 1124(ptr) AccessChain 34(data) 73 1116 + 1147: 28(i64vec4) Load 1146 + 1148: 28(i64vec4) GroupNonUniformIAdd 43 ClusteredReduce 1147 42 + 1149: 1124(ptr) AccessChain 34(data) 1145 1116 + Store 1149 1148 + 1150: 6(int) Load 8(invocation) + 1151: 1117(ptr) AccessChain 34(data) 37 1116 38 + 1152: 27(int64_t) Load 1151 + 1153: 27(int64_t) GroupNonUniformIMul 43 ClusteredReduce 1152 42 + 1154: 1117(ptr) AccessChain 34(data) 1150 1116 38 + Store 1154 1153 + 1155: 6(int) Load 8(invocation) + 1156: 1124(ptr) AccessChain 34(data) 47 1116 + 1157: 28(i64vec4) Load 1156 + 1158:1123(i64vec2) VectorShuffle 1157 1157 0 1 + 1159:1123(i64vec2) GroupNonUniformIMul 43 ClusteredReduce 1158 42 + 1160: 1117(ptr) AccessChain 34(data) 1155 1116 38 + 1161: 27(int64_t) CompositeExtract 1159 0 + Store 1160 1161 + 1162: 1117(ptr) AccessChain 34(data) 1155 1116 42 + 1163: 27(int64_t) CompositeExtract 1159 1 + Store 1162 1163 + 1164: 6(int) Load 8(invocation) + 1165: 1124(ptr) AccessChain 34(data) 59 1116 + 1166: 28(i64vec4) Load 1165 + 1167:1134(i64vec3) VectorShuffle 1166 1166 0 1 2 + 1168:1134(i64vec3) GroupNonUniformIMul 43 ClusteredReduce 1167 42 + 1169: 1117(ptr) AccessChain 34(data) 1164 1116 38 + 1170: 27(int64_t) CompositeExtract 1168 0 + Store 1169 1170 + 1171: 1117(ptr) AccessChain 34(data) 1164 1116 42 + 1172: 27(int64_t) CompositeExtract 1168 1 + Store 1171 1172 + 1173: 1117(ptr) AccessChain 34(data) 1164 1116 69 + 1174: 27(int64_t) CompositeExtract 1168 2 + Store 1173 1174 + 1175: 6(int) Load 8(invocation) + 1176: 1124(ptr) AccessChain 34(data) 73 1116 + 1177: 28(i64vec4) Load 1176 + 1178: 28(i64vec4) GroupNonUniformIMul 43 ClusteredReduce 1177 42 + 1179: 1124(ptr) AccessChain 34(data) 1175 1116 + Store 1179 1178 + 1180: 6(int) Load 8(invocation) + 1181: 1117(ptr) AccessChain 34(data) 37 1116 38 + 1182: 27(int64_t) Load 1181 + 1183: 27(int64_t) GroupNonUniformUMin 43 ClusteredReduce 1182 42 + 1184: 1117(ptr) AccessChain 34(data) 1180 1116 38 + Store 1184 1183 + 1185: 6(int) Load 8(invocation) + 1186: 1124(ptr) AccessChain 34(data) 47 1116 + 1187: 28(i64vec4) Load 1186 + 1188:1123(i64vec2) VectorShuffle 1187 1187 0 1 + 1189:1123(i64vec2) GroupNonUniformUMin 43 ClusteredReduce 1188 42 + 1190: 1117(ptr) AccessChain 34(data) 1185 1116 38 + 1191: 27(int64_t) CompositeExtract 1189 0 + Store 1190 1191 + 1192: 1117(ptr) AccessChain 34(data) 1185 1116 42 + 1193: 27(int64_t) CompositeExtract 1189 1 + Store 1192 1193 + 1194: 6(int) Load 8(invocation) + 1195: 1124(ptr) AccessChain 34(data) 59 1116 + 1196: 28(i64vec4) Load 1195 + 1197:1134(i64vec3) VectorShuffle 1196 1196 0 1 2 + 1198:1134(i64vec3) GroupNonUniformUMin 43 ClusteredReduce 1197 42 + 1199: 1117(ptr) AccessChain 34(data) 1194 1116 38 + 1200: 27(int64_t) CompositeExtract 1198 0 + Store 1199 1200 + 1201: 1117(ptr) AccessChain 34(data) 1194 1116 42 + 1202: 27(int64_t) CompositeExtract 1198 1 + Store 1201 1202 + 1203: 1117(ptr) AccessChain 34(data) 1194 1116 69 + 1204: 27(int64_t) CompositeExtract 1198 2 + Store 1203 1204 1205: 6(int) Load 8(invocation) - 1206: 1170(ptr) AccessChain 34(data) 58 1162 - 1207: 30(f16vec4) Load 1206 - 1208:1179(f16vec3) VectorShuffle 1207 1207 0 1 2 - 1209:1179(f16vec3) GroupNonUniformFMul 43 ClusteredReduce 1208 42 - 1210: 1170(ptr) AccessChain 34(data) 1205 1162 - 1211: 30(f16vec4) Load 1210 - 1212: 30(f16vec4) VectorShuffle 1211 1209 4 5 6 3 - Store 1210 1212 - 1213: 6(int) Load 8(invocation) - 1214: 1170(ptr) AccessChain 34(data) 68 1162 - 1215: 30(f16vec4) Load 1214 - 1216: 30(f16vec4) GroupNonUniformFMul 43 ClusteredReduce 1215 42 - 1217: 1170(ptr) AccessChain 34(data) 1213 1162 - Store 1217 1216 - 1218: 6(int) Load 8(invocation) - 1219: 1163(ptr) AccessChain 34(data) 37 1162 38 - 1220:29(float16_t) Load 1219 - 1221:29(float16_t) GroupNonUniformFMin 43 ClusteredReduce 1220 42 - 1222: 1163(ptr) AccessChain 34(data) 1218 1162 38 - Store 1222 1221 - 1223: 6(int) Load 8(invocation) - 1224: 1170(ptr) AccessChain 34(data) 47 1162 - 1225: 30(f16vec4) Load 1224 - 1226:1169(f16vec2) VectorShuffle 1225 1225 0 1 - 1227:1169(f16vec2) GroupNonUniformFMin 43 ClusteredReduce 1226 42 - 1228: 1170(ptr) AccessChain 34(data) 1223 1162 - 1229: 30(f16vec4) Load 1228 - 1230: 30(f16vec4) VectorShuffle 1229 1227 4 5 2 3 - Store 1228 1230 - 1231: 6(int) Load 8(invocation) - 1232: 1170(ptr) AccessChain 34(data) 58 1162 - 1233: 30(f16vec4) Load 1232 - 1234:1179(f16vec3) VectorShuffle 1233 1233 0 1 2 - 1235:1179(f16vec3) GroupNonUniformFMin 43 ClusteredReduce 1234 42 - 1236: 1170(ptr) AccessChain 34(data) 1231 1162 - 1237: 30(f16vec4) Load 1236 - 1238: 30(f16vec4) VectorShuffle 1237 1235 4 5 6 3 - Store 1236 1238 - 1239: 6(int) Load 8(invocation) - 1240: 1170(ptr) AccessChain 34(data) 68 1162 - 1241: 30(f16vec4) Load 1240 - 1242: 30(f16vec4) GroupNonUniformFMin 43 ClusteredReduce 1241 42 - 1243: 1170(ptr) AccessChain 34(data) 1239 1162 - Store 1243 1242 - 1244: 6(int) Load 8(invocation) - 1245: 1163(ptr) AccessChain 34(data) 37 1162 38 - 1246:29(float16_t) Load 1245 - 1247:29(float16_t) GroupNonUniformFMax 43 ClusteredReduce 1246 42 - 1248: 1163(ptr) AccessChain 34(data) 1244 1162 38 - Store 1248 1247 - 1249: 6(int) Load 8(invocation) - 1250: 1170(ptr) AccessChain 34(data) 47 1162 - 1251: 30(f16vec4) Load 1250 - 1252:1169(f16vec2) VectorShuffle 1251 1251 0 1 - 1253:1169(f16vec2) GroupNonUniformFMax 43 ClusteredReduce 1252 42 - 1254: 1170(ptr) AccessChain 34(data) 1249 1162 - 1255: 30(f16vec4) Load 1254 - 1256: 30(f16vec4) VectorShuffle 1255 1253 4 5 2 3 - Store 1254 1256 - 1257: 6(int) Load 8(invocation) - 1258: 1170(ptr) AccessChain 34(data) 58 1162 - 1259: 30(f16vec4) Load 1258 - 1260:1179(f16vec3) VectorShuffle 1259 1259 0 1 2 - 1261:1179(f16vec3) GroupNonUniformFMax 43 ClusteredReduce 1260 42 - 1262: 1170(ptr) AccessChain 34(data) 1257 1162 - 1263: 30(f16vec4) Load 1262 - 1264: 30(f16vec4) VectorShuffle 1263 1261 4 5 6 3 - Store 1262 1264 + 1206: 1124(ptr) AccessChain 34(data) 73 1116 + 1207: 28(i64vec4) Load 1206 + 1208: 28(i64vec4) GroupNonUniformUMin 43 ClusteredReduce 1207 42 + 1209: 1124(ptr) AccessChain 34(data) 1205 1116 + Store 1209 1208 + 1210: 6(int) Load 8(invocation) + 1211: 1117(ptr) AccessChain 34(data) 37 1116 38 + 1212: 27(int64_t) Load 1211 + 1213: 27(int64_t) GroupNonUniformUMax 43 ClusteredReduce 1212 42 + 1214: 1117(ptr) AccessChain 34(data) 1210 1116 38 + Store 1214 1213 + 1215: 6(int) Load 8(invocation) + 1216: 1124(ptr) AccessChain 34(data) 47 1116 + 1217: 28(i64vec4) Load 1216 + 1218:1123(i64vec2) VectorShuffle 1217 1217 0 1 + 1219:1123(i64vec2) GroupNonUniformUMax 43 ClusteredReduce 1218 42 + 1220: 1117(ptr) AccessChain 34(data) 1215 1116 38 + 1221: 27(int64_t) CompositeExtract 1219 0 + Store 1220 1221 + 1222: 1117(ptr) AccessChain 34(data) 1215 1116 42 + 1223: 27(int64_t) CompositeExtract 1219 1 + Store 1222 1223 + 1224: 6(int) Load 8(invocation) + 1225: 1124(ptr) AccessChain 34(data) 59 1116 + 1226: 28(i64vec4) Load 1225 + 1227:1134(i64vec3) VectorShuffle 1226 1226 0 1 2 + 1228:1134(i64vec3) GroupNonUniformUMax 43 ClusteredReduce 1227 42 + 1229: 1117(ptr) AccessChain 34(data) 1224 1116 38 + 1230: 27(int64_t) CompositeExtract 1228 0 + Store 1229 1230 + 1231: 1117(ptr) AccessChain 34(data) 1224 1116 42 + 1232: 27(int64_t) CompositeExtract 1228 1 + Store 1231 1232 + 1233: 1117(ptr) AccessChain 34(data) 1224 1116 69 + 1234: 27(int64_t) CompositeExtract 1228 2 + Store 1233 1234 + 1235: 6(int) Load 8(invocation) + 1236: 1124(ptr) AccessChain 34(data) 73 1116 + 1237: 28(i64vec4) Load 1236 + 1238: 28(i64vec4) GroupNonUniformUMax 43 ClusteredReduce 1237 42 + 1239: 1124(ptr) AccessChain 34(data) 1235 1116 + Store 1239 1238 + 1240: 6(int) Load 8(invocation) + 1241: 1117(ptr) AccessChain 34(data) 37 1116 38 + 1242: 27(int64_t) Load 1241 + 1243: 27(int64_t) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1242 42 + 1244: 1117(ptr) AccessChain 34(data) 1240 1116 38 + Store 1244 1243 + 1245: 6(int) Load 8(invocation) + 1246: 1124(ptr) AccessChain 34(data) 47 1116 + 1247: 28(i64vec4) Load 1246 + 1248:1123(i64vec2) VectorShuffle 1247 1247 0 1 + 1249:1123(i64vec2) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1248 42 + 1250: 1117(ptr) AccessChain 34(data) 1245 1116 38 + 1251: 27(int64_t) CompositeExtract 1249 0 + Store 1250 1251 + 1252: 1117(ptr) AccessChain 34(data) 1245 1116 42 + 1253: 27(int64_t) CompositeExtract 1249 1 + Store 1252 1253 + 1254: 6(int) Load 8(invocation) + 1255: 1124(ptr) AccessChain 34(data) 59 1116 + 1256: 28(i64vec4) Load 1255 + 1257:1134(i64vec3) VectorShuffle 1256 1256 0 1 2 + 1258:1134(i64vec3) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1257 42 + 1259: 1117(ptr) AccessChain 34(data) 1254 1116 38 + 1260: 27(int64_t) CompositeExtract 1258 0 + Store 1259 1260 + 1261: 1117(ptr) AccessChain 34(data) 1254 1116 42 + 1262: 27(int64_t) CompositeExtract 1258 1 + Store 1261 1262 + 1263: 1117(ptr) AccessChain 34(data) 1254 1116 69 + 1264: 27(int64_t) CompositeExtract 1258 2 + Store 1263 1264 1265: 6(int) Load 8(invocation) - 1266: 1170(ptr) AccessChain 34(data) 68 1162 - 1267: 30(f16vec4) Load 1266 - 1268: 30(f16vec4) GroupNonUniformFMax 43 ClusteredReduce 1267 42 - 1269: 1170(ptr) AccessChain 34(data) 1265 1162 + 1266: 1124(ptr) AccessChain 34(data) 73 1116 + 1267: 28(i64vec4) Load 1266 + 1268: 28(i64vec4) GroupNonUniformBitwiseAnd 43 ClusteredReduce 1267 42 + 1269: 1124(ptr) AccessChain 34(data) 1265 1116 Store 1269 1268 + 1270: 6(int) Load 8(invocation) + 1271: 1117(ptr) AccessChain 34(data) 37 1116 38 + 1272: 27(int64_t) Load 1271 + 1273: 27(int64_t) GroupNonUniformBitwiseOr 43 ClusteredReduce 1272 42 + 1274: 1117(ptr) AccessChain 34(data) 1270 1116 38 + Store 1274 1273 + 1275: 6(int) Load 8(invocation) + 1276: 1124(ptr) AccessChain 34(data) 47 1116 + 1277: 28(i64vec4) Load 1276 + 1278:1123(i64vec2) VectorShuffle 1277 1277 0 1 + 1279:1123(i64vec2) GroupNonUniformBitwiseOr 43 ClusteredReduce 1278 42 + 1280: 1117(ptr) AccessChain 34(data) 1275 1116 38 + 1281: 27(int64_t) CompositeExtract 1279 0 + Store 1280 1281 + 1282: 1117(ptr) AccessChain 34(data) 1275 1116 42 + 1283: 27(int64_t) CompositeExtract 1279 1 + Store 1282 1283 + 1284: 6(int) Load 8(invocation) + 1285: 1124(ptr) AccessChain 34(data) 59 1116 + 1286: 28(i64vec4) Load 1285 + 1287:1134(i64vec3) VectorShuffle 1286 1286 0 1 2 + 1288:1134(i64vec3) GroupNonUniformBitwiseOr 43 ClusteredReduce 1287 42 + 1289: 1117(ptr) AccessChain 34(data) 1284 1116 38 + 1290: 27(int64_t) CompositeExtract 1288 0 + Store 1289 1290 + 1291: 1117(ptr) AccessChain 34(data) 1284 1116 42 + 1292: 27(int64_t) CompositeExtract 1288 1 + Store 1291 1292 + 1293: 1117(ptr) AccessChain 34(data) 1284 1116 69 + 1294: 27(int64_t) CompositeExtract 1288 2 + Store 1293 1294 + 1295: 6(int) Load 8(invocation) + 1296: 1124(ptr) AccessChain 34(data) 73 1116 + 1297: 28(i64vec4) Load 1296 + 1298: 28(i64vec4) GroupNonUniformBitwiseOr 43 ClusteredReduce 1297 42 + 1299: 1124(ptr) AccessChain 34(data) 1295 1116 + Store 1299 1298 + 1300: 6(int) Load 8(invocation) + 1301: 1117(ptr) AccessChain 34(data) 37 1116 38 + 1302: 27(int64_t) Load 1301 + 1303: 27(int64_t) GroupNonUniformBitwiseXor 43 ClusteredReduce 1302 42 + 1304: 1117(ptr) AccessChain 34(data) 1300 1116 38 + Store 1304 1303 + 1305: 6(int) Load 8(invocation) + 1306: 1124(ptr) AccessChain 34(data) 47 1116 + 1307: 28(i64vec4) Load 1306 + 1308:1123(i64vec2) VectorShuffle 1307 1307 0 1 + 1309:1123(i64vec2) GroupNonUniformBitwiseXor 43 ClusteredReduce 1308 42 + 1310: 1117(ptr) AccessChain 34(data) 1305 1116 38 + 1311: 27(int64_t) CompositeExtract 1309 0 + Store 1310 1311 + 1312: 1117(ptr) AccessChain 34(data) 1305 1116 42 + 1313: 27(int64_t) CompositeExtract 1309 1 + Store 1312 1313 + 1314: 6(int) Load 8(invocation) + 1315: 1124(ptr) AccessChain 34(data) 59 1116 + 1316: 28(i64vec4) Load 1315 + 1317:1134(i64vec3) VectorShuffle 1316 1316 0 1 2 + 1318:1134(i64vec3) GroupNonUniformBitwiseXor 43 ClusteredReduce 1317 42 + 1319: 1117(ptr) AccessChain 34(data) 1314 1116 38 + 1320: 27(int64_t) CompositeExtract 1318 0 + Store 1319 1320 + 1321: 1117(ptr) AccessChain 34(data) 1314 1116 42 + 1322: 27(int64_t) CompositeExtract 1318 1 + Store 1321 1322 + 1323: 1117(ptr) AccessChain 34(data) 1314 1116 69 + 1324: 27(int64_t) CompositeExtract 1318 2 + Store 1323 1324 + 1325: 6(int) Load 8(invocation) + 1326: 1124(ptr) AccessChain 34(data) 73 1116 + 1327: 28(i64vec4) Load 1326 + 1328: 28(i64vec4) GroupNonUniformBitwiseXor 43 ClusteredReduce 1327 42 + 1329: 1124(ptr) AccessChain 34(data) 1325 1116 + Store 1329 1328 + 1330: 6(int) Load 8(invocation) + 1333: 1332(ptr) AccessChain 34(data) 37 1331 38 + 1334:29(float16_t) Load 1333 + 1335:29(float16_t) GroupNonUniformFAdd 43 ClusteredReduce 1334 42 + 1336: 1332(ptr) AccessChain 34(data) 1330 1331 38 + Store 1336 1335 + 1337: 6(int) Load 8(invocation) + 1340: 1339(ptr) AccessChain 34(data) 47 1331 + 1341: 30(f16vec4) Load 1340 + 1342:1338(f16vec2) VectorShuffle 1341 1341 0 1 + 1343:1338(f16vec2) GroupNonUniformFAdd 43 ClusteredReduce 1342 42 + 1344: 1332(ptr) AccessChain 34(data) 1337 1331 38 + 1345:29(float16_t) CompositeExtract 1343 0 + Store 1344 1345 + 1346: 1332(ptr) AccessChain 34(data) 1337 1331 42 + 1347:29(float16_t) CompositeExtract 1343 1 + Store 1346 1347 + 1348: 6(int) Load 8(invocation) + 1350: 1339(ptr) AccessChain 34(data) 59 1331 + 1351: 30(f16vec4) Load 1350 + 1352:1349(f16vec3) VectorShuffle 1351 1351 0 1 2 + 1353:1349(f16vec3) GroupNonUniformFAdd 43 ClusteredReduce 1352 42 + 1354: 1332(ptr) AccessChain 34(data) 1348 1331 38 + 1355:29(float16_t) CompositeExtract 1353 0 + Store 1354 1355 + 1356: 1332(ptr) AccessChain 34(data) 1348 1331 42 + 1357:29(float16_t) CompositeExtract 1353 1 + Store 1356 1357 + 1358: 1332(ptr) AccessChain 34(data) 1348 1331 69 + 1359:29(float16_t) CompositeExtract 1353 2 + Store 1358 1359 + 1360: 6(int) Load 8(invocation) + 1361: 1339(ptr) AccessChain 34(data) 73 1331 + 1362: 30(f16vec4) Load 1361 + 1363: 30(f16vec4) GroupNonUniformFAdd 43 ClusteredReduce 1362 42 + 1364: 1339(ptr) AccessChain 34(data) 1360 1331 + Store 1364 1363 + 1365: 6(int) Load 8(invocation) + 1366: 1332(ptr) AccessChain 34(data) 37 1331 38 + 1367:29(float16_t) Load 1366 + 1368:29(float16_t) GroupNonUniformFMul 43 ClusteredReduce 1367 42 + 1369: 1332(ptr) AccessChain 34(data) 1365 1331 38 + Store 1369 1368 + 1370: 6(int) Load 8(invocation) + 1371: 1339(ptr) AccessChain 34(data) 47 1331 + 1372: 30(f16vec4) Load 1371 + 1373:1338(f16vec2) VectorShuffle 1372 1372 0 1 + 1374:1338(f16vec2) GroupNonUniformFMul 43 ClusteredReduce 1373 42 + 1375: 1332(ptr) AccessChain 34(data) 1370 1331 38 + 1376:29(float16_t) CompositeExtract 1374 0 + Store 1375 1376 + 1377: 1332(ptr) AccessChain 34(data) 1370 1331 42 + 1378:29(float16_t) CompositeExtract 1374 1 + Store 1377 1378 + 1379: 6(int) Load 8(invocation) + 1380: 1339(ptr) AccessChain 34(data) 59 1331 + 1381: 30(f16vec4) Load 1380 + 1382:1349(f16vec3) VectorShuffle 1381 1381 0 1 2 + 1383:1349(f16vec3) GroupNonUniformFMul 43 ClusteredReduce 1382 42 + 1384: 1332(ptr) AccessChain 34(data) 1379 1331 38 + 1385:29(float16_t) CompositeExtract 1383 0 + Store 1384 1385 + 1386: 1332(ptr) AccessChain 34(data) 1379 1331 42 + 1387:29(float16_t) CompositeExtract 1383 1 + Store 1386 1387 + 1388: 1332(ptr) AccessChain 34(data) 1379 1331 69 + 1389:29(float16_t) CompositeExtract 1383 2 + Store 1388 1389 + 1390: 6(int) Load 8(invocation) + 1391: 1339(ptr) AccessChain 34(data) 73 1331 + 1392: 30(f16vec4) Load 1391 + 1393: 30(f16vec4) GroupNonUniformFMul 43 ClusteredReduce 1392 42 + 1394: 1339(ptr) AccessChain 34(data) 1390 1331 + Store 1394 1393 + 1395: 6(int) Load 8(invocation) + 1396: 1332(ptr) AccessChain 34(data) 37 1331 38 + 1397:29(float16_t) Load 1396 + 1398:29(float16_t) GroupNonUniformFMin 43 ClusteredReduce 1397 42 + 1399: 1332(ptr) AccessChain 34(data) 1395 1331 38 + Store 1399 1398 + 1400: 6(int) Load 8(invocation) + 1401: 1339(ptr) AccessChain 34(data) 47 1331 + 1402: 30(f16vec4) Load 1401 + 1403:1338(f16vec2) VectorShuffle 1402 1402 0 1 + 1404:1338(f16vec2) GroupNonUniformFMin 43 ClusteredReduce 1403 42 + 1405: 1332(ptr) AccessChain 34(data) 1400 1331 38 + 1406:29(float16_t) CompositeExtract 1404 0 + Store 1405 1406 + 1407: 1332(ptr) AccessChain 34(data) 1400 1331 42 + 1408:29(float16_t) CompositeExtract 1404 1 + Store 1407 1408 + 1409: 6(int) Load 8(invocation) + 1410: 1339(ptr) AccessChain 34(data) 59 1331 + 1411: 30(f16vec4) Load 1410 + 1412:1349(f16vec3) VectorShuffle 1411 1411 0 1 2 + 1413:1349(f16vec3) GroupNonUniformFMin 43 ClusteredReduce 1412 42 + 1414: 1332(ptr) AccessChain 34(data) 1409 1331 38 + 1415:29(float16_t) CompositeExtract 1413 0 + Store 1414 1415 + 1416: 1332(ptr) AccessChain 34(data) 1409 1331 42 + 1417:29(float16_t) CompositeExtract 1413 1 + Store 1416 1417 + 1418: 1332(ptr) AccessChain 34(data) 1409 1331 69 + 1419:29(float16_t) CompositeExtract 1413 2 + Store 1418 1419 + 1420: 6(int) Load 8(invocation) + 1421: 1339(ptr) AccessChain 34(data) 73 1331 + 1422: 30(f16vec4) Load 1421 + 1423: 30(f16vec4) GroupNonUniformFMin 43 ClusteredReduce 1422 42 + 1424: 1339(ptr) AccessChain 34(data) 1420 1331 + Store 1424 1423 + 1425: 6(int) Load 8(invocation) + 1426: 1332(ptr) AccessChain 34(data) 37 1331 38 + 1427:29(float16_t) Load 1426 + 1428:29(float16_t) GroupNonUniformFMax 43 ClusteredReduce 1427 42 + 1429: 1332(ptr) AccessChain 34(data) 1425 1331 38 + Store 1429 1428 + 1430: 6(int) Load 8(invocation) + 1431: 1339(ptr) AccessChain 34(data) 47 1331 + 1432: 30(f16vec4) Load 1431 + 1433:1338(f16vec2) VectorShuffle 1432 1432 0 1 + 1434:1338(f16vec2) GroupNonUniformFMax 43 ClusteredReduce 1433 42 + 1435: 1332(ptr) AccessChain 34(data) 1430 1331 38 + 1436:29(float16_t) CompositeExtract 1434 0 + Store 1435 1436 + 1437: 1332(ptr) AccessChain 34(data) 1430 1331 42 + 1438:29(float16_t) CompositeExtract 1434 1 + Store 1437 1438 + 1439: 6(int) Load 8(invocation) + 1440: 1339(ptr) AccessChain 34(data) 59 1331 + 1441: 30(f16vec4) Load 1440 + 1442:1349(f16vec3) VectorShuffle 1441 1441 0 1 2 + 1443:1349(f16vec3) GroupNonUniformFMax 43 ClusteredReduce 1442 42 + 1444: 1332(ptr) AccessChain 34(data) 1439 1331 38 + 1445:29(float16_t) CompositeExtract 1443 0 + Store 1444 1445 + 1446: 1332(ptr) AccessChain 34(data) 1439 1331 42 + 1447:29(float16_t) CompositeExtract 1443 1 + Store 1446 1447 + 1448: 1332(ptr) AccessChain 34(data) 1439 1331 69 + 1449:29(float16_t) CompositeExtract 1443 2 + Store 1448 1449 + 1450: 6(int) Load 8(invocation) + 1451: 1339(ptr) AccessChain 34(data) 73 1331 + 1452: 30(f16vec4) Load 1451 + 1453: 30(f16vec4) GroupNonUniformFMax 43 ClusteredReduce 1452 42 + 1454: 1339(ptr) AccessChain 34(data) 1450 1331 + Store 1454 1453 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out index ccfbacc3a8..47576d9f7f 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesPartitioned.comp.out @@ -1,7 +1,7 @@ spv.subgroupExtendedTypesPartitioned.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 1558 +// Id's are bound by 1743 Capability Shader Capability Float16 @@ -61,7 +61,7 @@ spv.subgroupExtendedTypesPartitioned.comp Decorate 34(Buffers) Block Decorate 37(data) DescriptorSet 0 Decorate 37(data) Binding 0 - Decorate 1557 BuiltIn WorkgroupSize + Decorate 1742 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -128,10 +128,11 @@ spv.subgroupExtendedTypesPartitioned.comp 160: TypePointer StorageBuffer 33(f16vec4) 165: TypeVector 32(float16_t) 3 177: 6(int) Constant 3 - 1554: TypeVector 6(int) 3 - 1555: 6(int) Constant 8 - 1556: 6(int) Constant 1 - 1557: 1554(ivec3) ConstantComposite 1555 1556 1556 + 188: 6(int) Constant 1 + 201: 6(int) Constant 2 + 1740: TypeVector 6(int) 3 + 1741: 6(int) Constant 8 + 1742: 1740(ivec3) ConstantComposite 1741 188 188 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -280,270 +281,285 @@ spv.subgroupExtendedTypesPartitioned.comp 183: 46(i8vec2) VectorShuffle 182 182 0 1 184: 17(ivec4) Load 19(ballot) 185: 46(i8vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 183 184 - 186: 47(ptr) AccessChain 37(data) 180 39 - 187: 21(i8vec4) Load 186 - 188: 21(i8vec4) VectorShuffle 187 185 4 5 2 3 - Store 186 188 - 189: 6(int) Load 8(invocation) - 190: 47(ptr) AccessChain 37(data) 52 39 - 191: 21(i8vec4) Load 190 - 192: 53(i8vec3) VectorShuffle 191 191 0 1 2 - 193: 17(ivec4) Load 19(ballot) - 194: 53(i8vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 192 193 - 195: 47(ptr) AccessChain 37(data) 189 39 - 196: 21(i8vec4) Load 195 - 197: 21(i8vec4) VectorShuffle 196 194 4 5 6 3 - Store 195 197 - 198: 6(int) Load 8(invocation) - 199: 47(ptr) AccessChain 37(data) 58 39 - 200: 21(i8vec4) Load 199 - 201: 17(ivec4) Load 19(ballot) - 202: 21(i8vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 200 201 - 203: 47(ptr) AccessChain 37(data) 198 39 - Store 203 202 + 186: 41(ptr) AccessChain 37(data) 180 39 40 + 187: 20(int8_t) CompositeExtract 185 0 + Store 186 187 + 189: 41(ptr) AccessChain 37(data) 180 39 188 + 190: 20(int8_t) CompositeExtract 185 1 + Store 189 190 + 191: 6(int) Load 8(invocation) + 192: 47(ptr) AccessChain 37(data) 52 39 + 193: 21(i8vec4) Load 192 + 194: 53(i8vec3) VectorShuffle 193 193 0 1 2 + 195: 17(ivec4) Load 19(ballot) + 196: 53(i8vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 194 195 + 197: 41(ptr) AccessChain 37(data) 191 39 40 + 198: 20(int8_t) CompositeExtract 196 0 + Store 197 198 + 199: 41(ptr) AccessChain 37(data) 191 39 188 + 200: 20(int8_t) CompositeExtract 196 1 + Store 199 200 + 202: 41(ptr) AccessChain 37(data) 191 39 201 + 203: 20(int8_t) CompositeExtract 196 2 + Store 202 203 204: 6(int) Load 8(invocation) - 205: 41(ptr) AccessChain 37(data) 39 39 40 - 206: 20(int8_t) Load 205 + 205: 47(ptr) AccessChain 37(data) 58 39 + 206: 21(i8vec4) Load 205 207: 17(ivec4) Load 19(ballot) - 208: 20(int8_t) GroupNonUniformIMul 177 PartitionedReduceNV 206 207 - 209: 41(ptr) AccessChain 37(data) 204 39 40 + 208: 21(i8vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 206 207 + 209: 47(ptr) AccessChain 37(data) 204 39 Store 209 208 210: 6(int) Load 8(invocation) - 211: 47(ptr) AccessChain 37(data) 45 39 - 212: 21(i8vec4) Load 211 - 213: 46(i8vec2) VectorShuffle 212 212 0 1 - 214: 17(ivec4) Load 19(ballot) - 215: 46(i8vec2) GroupNonUniformIMul 177 PartitionedReduceNV 213 214 - 216: 47(ptr) AccessChain 37(data) 210 39 - 217: 21(i8vec4) Load 216 - 218: 21(i8vec4) VectorShuffle 217 215 4 5 2 3 - Store 216 218 - 219: 6(int) Load 8(invocation) - 220: 47(ptr) AccessChain 37(data) 52 39 - 221: 21(i8vec4) Load 220 - 222: 53(i8vec3) VectorShuffle 221 221 0 1 2 - 223: 17(ivec4) Load 19(ballot) - 224: 53(i8vec3) GroupNonUniformIMul 177 PartitionedReduceNV 222 223 - 225: 47(ptr) AccessChain 37(data) 219 39 - 226: 21(i8vec4) Load 225 - 227: 21(i8vec4) VectorShuffle 226 224 4 5 6 3 - Store 225 227 - 228: 6(int) Load 8(invocation) - 229: 47(ptr) AccessChain 37(data) 58 39 - 230: 21(i8vec4) Load 229 - 231: 17(ivec4) Load 19(ballot) - 232: 21(i8vec4) GroupNonUniformIMul 177 PartitionedReduceNV 230 231 - 233: 47(ptr) AccessChain 37(data) 228 39 - Store 233 232 - 234: 6(int) Load 8(invocation) - 235: 41(ptr) AccessChain 37(data) 39 39 40 - 236: 20(int8_t) Load 235 - 237: 17(ivec4) Load 19(ballot) - 238: 20(int8_t) GroupNonUniformSMin 177 PartitionedReduceNV 236 237 - 239: 41(ptr) AccessChain 37(data) 234 39 40 - Store 239 238 - 240: 6(int) Load 8(invocation) - 241: 47(ptr) AccessChain 37(data) 45 39 - 242: 21(i8vec4) Load 241 - 243: 46(i8vec2) VectorShuffle 242 242 0 1 - 244: 17(ivec4) Load 19(ballot) - 245: 46(i8vec2) GroupNonUniformSMin 177 PartitionedReduceNV 243 244 - 246: 47(ptr) AccessChain 37(data) 240 39 - 247: 21(i8vec4) Load 246 - 248: 21(i8vec4) VectorShuffle 247 245 4 5 2 3 - Store 246 248 - 249: 6(int) Load 8(invocation) - 250: 47(ptr) AccessChain 37(data) 52 39 - 251: 21(i8vec4) Load 250 - 252: 53(i8vec3) VectorShuffle 251 251 0 1 2 - 253: 17(ivec4) Load 19(ballot) - 254: 53(i8vec3) GroupNonUniformSMin 177 PartitionedReduceNV 252 253 - 255: 47(ptr) AccessChain 37(data) 249 39 - 256: 21(i8vec4) Load 255 - 257: 21(i8vec4) VectorShuffle 256 254 4 5 6 3 - Store 255 257 - 258: 6(int) Load 8(invocation) - 259: 47(ptr) AccessChain 37(data) 58 39 - 260: 21(i8vec4) Load 259 - 261: 17(ivec4) Load 19(ballot) - 262: 21(i8vec4) GroupNonUniformSMin 177 PartitionedReduceNV 260 261 - 263: 47(ptr) AccessChain 37(data) 258 39 - Store 263 262 - 264: 6(int) Load 8(invocation) - 265: 41(ptr) AccessChain 37(data) 39 39 40 - 266: 20(int8_t) Load 265 - 267: 17(ivec4) Load 19(ballot) - 268: 20(int8_t) GroupNonUniformSMax 177 PartitionedReduceNV 266 267 - 269: 41(ptr) AccessChain 37(data) 264 39 40 - Store 269 268 - 270: 6(int) Load 8(invocation) - 271: 47(ptr) AccessChain 37(data) 45 39 - 272: 21(i8vec4) Load 271 - 273: 46(i8vec2) VectorShuffle 272 272 0 1 - 274: 17(ivec4) Load 19(ballot) - 275: 46(i8vec2) GroupNonUniformSMax 177 PartitionedReduceNV 273 274 - 276: 47(ptr) AccessChain 37(data) 270 39 - 277: 21(i8vec4) Load 276 - 278: 21(i8vec4) VectorShuffle 277 275 4 5 2 3 - Store 276 278 - 279: 6(int) Load 8(invocation) - 280: 47(ptr) AccessChain 37(data) 52 39 - 281: 21(i8vec4) Load 280 - 282: 53(i8vec3) VectorShuffle 281 281 0 1 2 - 283: 17(ivec4) Load 19(ballot) - 284: 53(i8vec3) GroupNonUniformSMax 177 PartitionedReduceNV 282 283 - 285: 47(ptr) AccessChain 37(data) 279 39 + 211: 41(ptr) AccessChain 37(data) 39 39 40 + 212: 20(int8_t) Load 211 + 213: 17(ivec4) Load 19(ballot) + 214: 20(int8_t) GroupNonUniformIMul 177 PartitionedReduceNV 212 213 + 215: 41(ptr) AccessChain 37(data) 210 39 40 + Store 215 214 + 216: 6(int) Load 8(invocation) + 217: 47(ptr) AccessChain 37(data) 45 39 + 218: 21(i8vec4) Load 217 + 219: 46(i8vec2) VectorShuffle 218 218 0 1 + 220: 17(ivec4) Load 19(ballot) + 221: 46(i8vec2) GroupNonUniformIMul 177 PartitionedReduceNV 219 220 + 222: 41(ptr) AccessChain 37(data) 216 39 40 + 223: 20(int8_t) CompositeExtract 221 0 + Store 222 223 + 224: 41(ptr) AccessChain 37(data) 216 39 188 + 225: 20(int8_t) CompositeExtract 221 1 + Store 224 225 + 226: 6(int) Load 8(invocation) + 227: 47(ptr) AccessChain 37(data) 52 39 + 228: 21(i8vec4) Load 227 + 229: 53(i8vec3) VectorShuffle 228 228 0 1 2 + 230: 17(ivec4) Load 19(ballot) + 231: 53(i8vec3) GroupNonUniformIMul 177 PartitionedReduceNV 229 230 + 232: 41(ptr) AccessChain 37(data) 226 39 40 + 233: 20(int8_t) CompositeExtract 231 0 + Store 232 233 + 234: 41(ptr) AccessChain 37(data) 226 39 188 + 235: 20(int8_t) CompositeExtract 231 1 + Store 234 235 + 236: 41(ptr) AccessChain 37(data) 226 39 201 + 237: 20(int8_t) CompositeExtract 231 2 + Store 236 237 + 238: 6(int) Load 8(invocation) + 239: 47(ptr) AccessChain 37(data) 58 39 + 240: 21(i8vec4) Load 239 + 241: 17(ivec4) Load 19(ballot) + 242: 21(i8vec4) GroupNonUniformIMul 177 PartitionedReduceNV 240 241 + 243: 47(ptr) AccessChain 37(data) 238 39 + Store 243 242 + 244: 6(int) Load 8(invocation) + 245: 41(ptr) AccessChain 37(data) 39 39 40 + 246: 20(int8_t) Load 245 + 247: 17(ivec4) Load 19(ballot) + 248: 20(int8_t) GroupNonUniformSMin 177 PartitionedReduceNV 246 247 + 249: 41(ptr) AccessChain 37(data) 244 39 40 + Store 249 248 + 250: 6(int) Load 8(invocation) + 251: 47(ptr) AccessChain 37(data) 45 39 + 252: 21(i8vec4) Load 251 + 253: 46(i8vec2) VectorShuffle 252 252 0 1 + 254: 17(ivec4) Load 19(ballot) + 255: 46(i8vec2) GroupNonUniformSMin 177 PartitionedReduceNV 253 254 + 256: 41(ptr) AccessChain 37(data) 250 39 40 + 257: 20(int8_t) CompositeExtract 255 0 + Store 256 257 + 258: 41(ptr) AccessChain 37(data) 250 39 188 + 259: 20(int8_t) CompositeExtract 255 1 + Store 258 259 + 260: 6(int) Load 8(invocation) + 261: 47(ptr) AccessChain 37(data) 52 39 + 262: 21(i8vec4) Load 261 + 263: 53(i8vec3) VectorShuffle 262 262 0 1 2 + 264: 17(ivec4) Load 19(ballot) + 265: 53(i8vec3) GroupNonUniformSMin 177 PartitionedReduceNV 263 264 + 266: 41(ptr) AccessChain 37(data) 260 39 40 + 267: 20(int8_t) CompositeExtract 265 0 + Store 266 267 + 268: 41(ptr) AccessChain 37(data) 260 39 188 + 269: 20(int8_t) CompositeExtract 265 1 + Store 268 269 + 270: 41(ptr) AccessChain 37(data) 260 39 201 + 271: 20(int8_t) CompositeExtract 265 2 + Store 270 271 + 272: 6(int) Load 8(invocation) + 273: 47(ptr) AccessChain 37(data) 58 39 + 274: 21(i8vec4) Load 273 + 275: 17(ivec4) Load 19(ballot) + 276: 21(i8vec4) GroupNonUniformSMin 177 PartitionedReduceNV 274 275 + 277: 47(ptr) AccessChain 37(data) 272 39 + Store 277 276 + 278: 6(int) Load 8(invocation) + 279: 41(ptr) AccessChain 37(data) 39 39 40 + 280: 20(int8_t) Load 279 + 281: 17(ivec4) Load 19(ballot) + 282: 20(int8_t) GroupNonUniformSMax 177 PartitionedReduceNV 280 281 + 283: 41(ptr) AccessChain 37(data) 278 39 40 + Store 283 282 + 284: 6(int) Load 8(invocation) + 285: 47(ptr) AccessChain 37(data) 45 39 286: 21(i8vec4) Load 285 - 287: 21(i8vec4) VectorShuffle 286 284 4 5 6 3 - Store 285 287 - 288: 6(int) Load 8(invocation) - 289: 47(ptr) AccessChain 37(data) 58 39 - 290: 21(i8vec4) Load 289 - 291: 17(ivec4) Load 19(ballot) - 292: 21(i8vec4) GroupNonUniformSMax 177 PartitionedReduceNV 290 291 - 293: 47(ptr) AccessChain 37(data) 288 39 - Store 293 292 + 287: 46(i8vec2) VectorShuffle 286 286 0 1 + 288: 17(ivec4) Load 19(ballot) + 289: 46(i8vec2) GroupNonUniformSMax 177 PartitionedReduceNV 287 288 + 290: 41(ptr) AccessChain 37(data) 284 39 40 + 291: 20(int8_t) CompositeExtract 289 0 + Store 290 291 + 292: 41(ptr) AccessChain 37(data) 284 39 188 + 293: 20(int8_t) CompositeExtract 289 1 + Store 292 293 294: 6(int) Load 8(invocation) - 295: 41(ptr) AccessChain 37(data) 39 39 40 - 296: 20(int8_t) Load 295 - 297: 17(ivec4) Load 19(ballot) - 298: 20(int8_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 296 297 - 299: 41(ptr) AccessChain 37(data) 294 39 40 - Store 299 298 - 300: 6(int) Load 8(invocation) - 301: 47(ptr) AccessChain 37(data) 45 39 - 302: 21(i8vec4) Load 301 - 303: 46(i8vec2) VectorShuffle 302 302 0 1 - 304: 17(ivec4) Load 19(ballot) - 305: 46(i8vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 303 304 - 306: 47(ptr) AccessChain 37(data) 300 39 - 307: 21(i8vec4) Load 306 - 308: 21(i8vec4) VectorShuffle 307 305 4 5 2 3 - Store 306 308 - 309: 6(int) Load 8(invocation) - 310: 47(ptr) AccessChain 37(data) 52 39 - 311: 21(i8vec4) Load 310 - 312: 53(i8vec3) VectorShuffle 311 311 0 1 2 - 313: 17(ivec4) Load 19(ballot) - 314: 53(i8vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 312 313 - 315: 47(ptr) AccessChain 37(data) 309 39 - 316: 21(i8vec4) Load 315 - 317: 21(i8vec4) VectorShuffle 316 314 4 5 6 3 - Store 315 317 + 295: 47(ptr) AccessChain 37(data) 52 39 + 296: 21(i8vec4) Load 295 + 297: 53(i8vec3) VectorShuffle 296 296 0 1 2 + 298: 17(ivec4) Load 19(ballot) + 299: 53(i8vec3) GroupNonUniformSMax 177 PartitionedReduceNV 297 298 + 300: 41(ptr) AccessChain 37(data) 294 39 40 + 301: 20(int8_t) CompositeExtract 299 0 + Store 300 301 + 302: 41(ptr) AccessChain 37(data) 294 39 188 + 303: 20(int8_t) CompositeExtract 299 1 + Store 302 303 + 304: 41(ptr) AccessChain 37(data) 294 39 201 + 305: 20(int8_t) CompositeExtract 299 2 + Store 304 305 + 306: 6(int) Load 8(invocation) + 307: 47(ptr) AccessChain 37(data) 58 39 + 308: 21(i8vec4) Load 307 + 309: 17(ivec4) Load 19(ballot) + 310: 21(i8vec4) GroupNonUniformSMax 177 PartitionedReduceNV 308 309 + 311: 47(ptr) AccessChain 37(data) 306 39 + Store 311 310 + 312: 6(int) Load 8(invocation) + 313: 41(ptr) AccessChain 37(data) 39 39 40 + 314: 20(int8_t) Load 313 + 315: 17(ivec4) Load 19(ballot) + 316: 20(int8_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 314 315 + 317: 41(ptr) AccessChain 37(data) 312 39 40 + Store 317 316 318: 6(int) Load 8(invocation) - 319: 47(ptr) AccessChain 37(data) 58 39 + 319: 47(ptr) AccessChain 37(data) 45 39 320: 21(i8vec4) Load 319 - 321: 17(ivec4) Load 19(ballot) - 322: 21(i8vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 320 321 - 323: 47(ptr) AccessChain 37(data) 318 39 - Store 323 322 - 324: 6(int) Load 8(invocation) - 325: 41(ptr) AccessChain 37(data) 39 39 40 - 326: 20(int8_t) Load 325 - 327: 17(ivec4) Load 19(ballot) - 328: 20(int8_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 326 327 - 329: 41(ptr) AccessChain 37(data) 324 39 40 - Store 329 328 - 330: 6(int) Load 8(invocation) - 331: 47(ptr) AccessChain 37(data) 45 39 - 332: 21(i8vec4) Load 331 - 333: 46(i8vec2) VectorShuffle 332 332 0 1 - 334: 17(ivec4) Load 19(ballot) - 335: 46(i8vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 333 334 - 336: 47(ptr) AccessChain 37(data) 330 39 - 337: 21(i8vec4) Load 336 - 338: 21(i8vec4) VectorShuffle 337 335 4 5 2 3 - Store 336 338 - 339: 6(int) Load 8(invocation) - 340: 47(ptr) AccessChain 37(data) 52 39 - 341: 21(i8vec4) Load 340 - 342: 53(i8vec3) VectorShuffle 341 341 0 1 2 + 321: 46(i8vec2) VectorShuffle 320 320 0 1 + 322: 17(ivec4) Load 19(ballot) + 323: 46(i8vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 321 322 + 324: 41(ptr) AccessChain 37(data) 318 39 40 + 325: 20(int8_t) CompositeExtract 323 0 + Store 324 325 + 326: 41(ptr) AccessChain 37(data) 318 39 188 + 327: 20(int8_t) CompositeExtract 323 1 + Store 326 327 + 328: 6(int) Load 8(invocation) + 329: 47(ptr) AccessChain 37(data) 52 39 + 330: 21(i8vec4) Load 329 + 331: 53(i8vec3) VectorShuffle 330 330 0 1 2 + 332: 17(ivec4) Load 19(ballot) + 333: 53(i8vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 331 332 + 334: 41(ptr) AccessChain 37(data) 328 39 40 + 335: 20(int8_t) CompositeExtract 333 0 + Store 334 335 + 336: 41(ptr) AccessChain 37(data) 328 39 188 + 337: 20(int8_t) CompositeExtract 333 1 + Store 336 337 + 338: 41(ptr) AccessChain 37(data) 328 39 201 + 339: 20(int8_t) CompositeExtract 333 2 + Store 338 339 + 340: 6(int) Load 8(invocation) + 341: 47(ptr) AccessChain 37(data) 58 39 + 342: 21(i8vec4) Load 341 343: 17(ivec4) Load 19(ballot) - 344: 53(i8vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 342 343 - 345: 47(ptr) AccessChain 37(data) 339 39 - 346: 21(i8vec4) Load 345 - 347: 21(i8vec4) VectorShuffle 346 344 4 5 6 3 - Store 345 347 - 348: 6(int) Load 8(invocation) - 349: 47(ptr) AccessChain 37(data) 58 39 - 350: 21(i8vec4) Load 349 - 351: 17(ivec4) Load 19(ballot) - 352: 21(i8vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 350 351 - 353: 47(ptr) AccessChain 37(data) 348 39 - Store 353 352 - 354: 6(int) Load 8(invocation) - 355: 41(ptr) AccessChain 37(data) 39 39 40 - 356: 20(int8_t) Load 355 - 357: 17(ivec4) Load 19(ballot) - 358: 20(int8_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 356 357 - 359: 41(ptr) AccessChain 37(data) 354 39 40 - Store 359 358 - 360: 6(int) Load 8(invocation) - 361: 47(ptr) AccessChain 37(data) 45 39 - 362: 21(i8vec4) Load 361 - 363: 46(i8vec2) VectorShuffle 362 362 0 1 - 364: 17(ivec4) Load 19(ballot) - 365: 46(i8vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 363 364 - 366: 47(ptr) AccessChain 37(data) 360 39 - 367: 21(i8vec4) Load 366 - 368: 21(i8vec4) VectorShuffle 367 365 4 5 2 3 - Store 366 368 - 369: 6(int) Load 8(invocation) - 370: 47(ptr) AccessChain 37(data) 52 39 - 371: 21(i8vec4) Load 370 - 372: 53(i8vec3) VectorShuffle 371 371 0 1 2 - 373: 17(ivec4) Load 19(ballot) - 374: 53(i8vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 372 373 - 375: 47(ptr) AccessChain 37(data) 369 39 + 344: 21(i8vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 342 343 + 345: 47(ptr) AccessChain 37(data) 340 39 + Store 345 344 + 346: 6(int) Load 8(invocation) + 347: 41(ptr) AccessChain 37(data) 39 39 40 + 348: 20(int8_t) Load 347 + 349: 17(ivec4) Load 19(ballot) + 350: 20(int8_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 348 349 + 351: 41(ptr) AccessChain 37(data) 346 39 40 + Store 351 350 + 352: 6(int) Load 8(invocation) + 353: 47(ptr) AccessChain 37(data) 45 39 + 354: 21(i8vec4) Load 353 + 355: 46(i8vec2) VectorShuffle 354 354 0 1 + 356: 17(ivec4) Load 19(ballot) + 357: 46(i8vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 355 356 + 358: 41(ptr) AccessChain 37(data) 352 39 40 + 359: 20(int8_t) CompositeExtract 357 0 + Store 358 359 + 360: 41(ptr) AccessChain 37(data) 352 39 188 + 361: 20(int8_t) CompositeExtract 357 1 + Store 360 361 + 362: 6(int) Load 8(invocation) + 363: 47(ptr) AccessChain 37(data) 52 39 + 364: 21(i8vec4) Load 363 + 365: 53(i8vec3) VectorShuffle 364 364 0 1 2 + 366: 17(ivec4) Load 19(ballot) + 367: 53(i8vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 365 366 + 368: 41(ptr) AccessChain 37(data) 362 39 40 + 369: 20(int8_t) CompositeExtract 367 0 + Store 368 369 + 370: 41(ptr) AccessChain 37(data) 362 39 188 + 371: 20(int8_t) CompositeExtract 367 1 + Store 370 371 + 372: 41(ptr) AccessChain 37(data) 362 39 201 + 373: 20(int8_t) CompositeExtract 367 2 + Store 372 373 + 374: 6(int) Load 8(invocation) + 375: 47(ptr) AccessChain 37(data) 58 39 376: 21(i8vec4) Load 375 - 377: 21(i8vec4) VectorShuffle 376 374 4 5 6 3 - Store 375 377 - 378: 6(int) Load 8(invocation) - 379: 47(ptr) AccessChain 37(data) 58 39 - 380: 21(i8vec4) Load 379 - 381: 17(ivec4) Load 19(ballot) - 382: 21(i8vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 380 381 - 383: 47(ptr) AccessChain 37(data) 378 39 - Store 383 382 - 384: 6(int) Load 8(invocation) - 385: 62(ptr) AccessChain 37(data) 39 45 40 - 386: 22(int8_t) Load 385 - 387: 17(ivec4) Load 19(ballot) - 388: 22(int8_t) GroupNonUniformIAdd 177 PartitionedReduceNV 386 387 - 389: 62(ptr) AccessChain 37(data) 384 45 40 - Store 389 388 - 390: 6(int) Load 8(invocation) - 391: 67(ptr) AccessChain 37(data) 45 45 - 392: 23(i8vec4) Load 391 - 393: 66(i8vec2) VectorShuffle 392 392 0 1 - 394: 17(ivec4) Load 19(ballot) - 395: 66(i8vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 393 394 - 396: 67(ptr) AccessChain 37(data) 390 45 - 397: 23(i8vec4) Load 396 - 398: 23(i8vec4) VectorShuffle 397 395 4 5 2 3 - Store 396 398 - 399: 6(int) Load 8(invocation) - 400: 67(ptr) AccessChain 37(data) 52 45 - 401: 23(i8vec4) Load 400 - 402: 72(i8vec3) VectorShuffle 401 401 0 1 2 - 403: 17(ivec4) Load 19(ballot) - 404: 72(i8vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 402 403 - 405: 67(ptr) AccessChain 37(data) 399 45 - 406: 23(i8vec4) Load 405 - 407: 23(i8vec4) VectorShuffle 406 404 4 5 6 3 - Store 405 407 + 377: 17(ivec4) Load 19(ballot) + 378: 21(i8vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 376 377 + 379: 47(ptr) AccessChain 37(data) 374 39 + Store 379 378 + 380: 6(int) Load 8(invocation) + 381: 41(ptr) AccessChain 37(data) 39 39 40 + 382: 20(int8_t) Load 381 + 383: 17(ivec4) Load 19(ballot) + 384: 20(int8_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 382 383 + 385: 41(ptr) AccessChain 37(data) 380 39 40 + Store 385 384 + 386: 6(int) Load 8(invocation) + 387: 47(ptr) AccessChain 37(data) 45 39 + 388: 21(i8vec4) Load 387 + 389: 46(i8vec2) VectorShuffle 388 388 0 1 + 390: 17(ivec4) Load 19(ballot) + 391: 46(i8vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 389 390 + 392: 41(ptr) AccessChain 37(data) 386 39 40 + 393: 20(int8_t) CompositeExtract 391 0 + Store 392 393 + 394: 41(ptr) AccessChain 37(data) 386 39 188 + 395: 20(int8_t) CompositeExtract 391 1 + Store 394 395 + 396: 6(int) Load 8(invocation) + 397: 47(ptr) AccessChain 37(data) 52 39 + 398: 21(i8vec4) Load 397 + 399: 53(i8vec3) VectorShuffle 398 398 0 1 2 + 400: 17(ivec4) Load 19(ballot) + 401: 53(i8vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 399 400 + 402: 41(ptr) AccessChain 37(data) 396 39 40 + 403: 20(int8_t) CompositeExtract 401 0 + Store 402 403 + 404: 41(ptr) AccessChain 37(data) 396 39 188 + 405: 20(int8_t) CompositeExtract 401 1 + Store 404 405 + 406: 41(ptr) AccessChain 37(data) 396 39 201 + 407: 20(int8_t) CompositeExtract 401 2 + Store 406 407 408: 6(int) Load 8(invocation) - 409: 67(ptr) AccessChain 37(data) 58 45 - 410: 23(i8vec4) Load 409 + 409: 47(ptr) AccessChain 37(data) 58 39 + 410: 21(i8vec4) Load 409 411: 17(ivec4) Load 19(ballot) - 412: 23(i8vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 410 411 - 413: 67(ptr) AccessChain 37(data) 408 45 + 412: 21(i8vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 410 411 + 413: 47(ptr) AccessChain 37(data) 408 39 Store 413 412 414: 6(int) Load 8(invocation) 415: 62(ptr) AccessChain 37(data) 39 45 40 416: 22(int8_t) Load 415 417: 17(ivec4) Load 19(ballot) - 418: 22(int8_t) GroupNonUniformIMul 177 PartitionedReduceNV 416 417 + 418: 22(int8_t) GroupNonUniformIAdd 177 PartitionedReduceNV 416 417 419: 62(ptr) AccessChain 37(data) 414 45 40 Store 419 418 420: 6(int) Load 8(invocation) @@ -551,577 +567,614 @@ spv.subgroupExtendedTypesPartitioned.comp 422: 23(i8vec4) Load 421 423: 66(i8vec2) VectorShuffle 422 422 0 1 424: 17(ivec4) Load 19(ballot) - 425: 66(i8vec2) GroupNonUniformIMul 177 PartitionedReduceNV 423 424 - 426: 67(ptr) AccessChain 37(data) 420 45 - 427: 23(i8vec4) Load 426 - 428: 23(i8vec4) VectorShuffle 427 425 4 5 2 3 - Store 426 428 - 429: 6(int) Load 8(invocation) - 430: 67(ptr) AccessChain 37(data) 52 45 - 431: 23(i8vec4) Load 430 - 432: 72(i8vec3) VectorShuffle 431 431 0 1 2 - 433: 17(ivec4) Load 19(ballot) - 434: 72(i8vec3) GroupNonUniformIMul 177 PartitionedReduceNV 432 433 - 435: 67(ptr) AccessChain 37(data) 429 45 - 436: 23(i8vec4) Load 435 - 437: 23(i8vec4) VectorShuffle 436 434 4 5 6 3 - Store 435 437 - 438: 6(int) Load 8(invocation) - 439: 67(ptr) AccessChain 37(data) 58 45 - 440: 23(i8vec4) Load 439 - 441: 17(ivec4) Load 19(ballot) - 442: 23(i8vec4) GroupNonUniformIMul 177 PartitionedReduceNV 440 441 - 443: 67(ptr) AccessChain 37(data) 438 45 - Store 443 442 - 444: 6(int) Load 8(invocation) - 445: 62(ptr) AccessChain 37(data) 39 45 40 - 446: 22(int8_t) Load 445 - 447: 17(ivec4) Load 19(ballot) - 448: 22(int8_t) GroupNonUniformUMin 177 PartitionedReduceNV 446 447 - 449: 62(ptr) AccessChain 37(data) 444 45 40 - Store 449 448 - 450: 6(int) Load 8(invocation) - 451: 67(ptr) AccessChain 37(data) 45 45 - 452: 23(i8vec4) Load 451 - 453: 66(i8vec2) VectorShuffle 452 452 0 1 - 454: 17(ivec4) Load 19(ballot) - 455: 66(i8vec2) GroupNonUniformUMin 177 PartitionedReduceNV 453 454 - 456: 67(ptr) AccessChain 37(data) 450 45 - 457: 23(i8vec4) Load 456 - 458: 23(i8vec4) VectorShuffle 457 455 4 5 2 3 - Store 456 458 - 459: 6(int) Load 8(invocation) - 460: 67(ptr) AccessChain 37(data) 52 45 - 461: 23(i8vec4) Load 460 - 462: 72(i8vec3) VectorShuffle 461 461 0 1 2 - 463: 17(ivec4) Load 19(ballot) - 464: 72(i8vec3) GroupNonUniformUMin 177 PartitionedReduceNV 462 463 - 465: 67(ptr) AccessChain 37(data) 459 45 + 425: 66(i8vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 423 424 + 426: 62(ptr) AccessChain 37(data) 420 45 40 + 427: 22(int8_t) CompositeExtract 425 0 + Store 426 427 + 428: 62(ptr) AccessChain 37(data) 420 45 188 + 429: 22(int8_t) CompositeExtract 425 1 + Store 428 429 + 430: 6(int) Load 8(invocation) + 431: 67(ptr) AccessChain 37(data) 52 45 + 432: 23(i8vec4) Load 431 + 433: 72(i8vec3) VectorShuffle 432 432 0 1 2 + 434: 17(ivec4) Load 19(ballot) + 435: 72(i8vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 433 434 + 436: 62(ptr) AccessChain 37(data) 430 45 40 + 437: 22(int8_t) CompositeExtract 435 0 + Store 436 437 + 438: 62(ptr) AccessChain 37(data) 430 45 188 + 439: 22(int8_t) CompositeExtract 435 1 + Store 438 439 + 440: 62(ptr) AccessChain 37(data) 430 45 201 + 441: 22(int8_t) CompositeExtract 435 2 + Store 440 441 + 442: 6(int) Load 8(invocation) + 443: 67(ptr) AccessChain 37(data) 58 45 + 444: 23(i8vec4) Load 443 + 445: 17(ivec4) Load 19(ballot) + 446: 23(i8vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 444 445 + 447: 67(ptr) AccessChain 37(data) 442 45 + Store 447 446 + 448: 6(int) Load 8(invocation) + 449: 62(ptr) AccessChain 37(data) 39 45 40 + 450: 22(int8_t) Load 449 + 451: 17(ivec4) Load 19(ballot) + 452: 22(int8_t) GroupNonUniformIMul 177 PartitionedReduceNV 450 451 + 453: 62(ptr) AccessChain 37(data) 448 45 40 + Store 453 452 + 454: 6(int) Load 8(invocation) + 455: 67(ptr) AccessChain 37(data) 45 45 + 456: 23(i8vec4) Load 455 + 457: 66(i8vec2) VectorShuffle 456 456 0 1 + 458: 17(ivec4) Load 19(ballot) + 459: 66(i8vec2) GroupNonUniformIMul 177 PartitionedReduceNV 457 458 + 460: 62(ptr) AccessChain 37(data) 454 45 40 + 461: 22(int8_t) CompositeExtract 459 0 + Store 460 461 + 462: 62(ptr) AccessChain 37(data) 454 45 188 + 463: 22(int8_t) CompositeExtract 459 1 + Store 462 463 + 464: 6(int) Load 8(invocation) + 465: 67(ptr) AccessChain 37(data) 52 45 466: 23(i8vec4) Load 465 - 467: 23(i8vec4) VectorShuffle 466 464 4 5 6 3 - Store 465 467 - 468: 6(int) Load 8(invocation) - 469: 67(ptr) AccessChain 37(data) 58 45 - 470: 23(i8vec4) Load 469 - 471: 17(ivec4) Load 19(ballot) - 472: 23(i8vec4) GroupNonUniformUMin 177 PartitionedReduceNV 470 471 - 473: 67(ptr) AccessChain 37(data) 468 45 - Store 473 472 - 474: 6(int) Load 8(invocation) - 475: 62(ptr) AccessChain 37(data) 39 45 40 - 476: 22(int8_t) Load 475 - 477: 17(ivec4) Load 19(ballot) - 478: 22(int8_t) GroupNonUniformUMax 177 PartitionedReduceNV 476 477 - 479: 62(ptr) AccessChain 37(data) 474 45 40 - Store 479 478 - 480: 6(int) Load 8(invocation) - 481: 67(ptr) AccessChain 37(data) 45 45 - 482: 23(i8vec4) Load 481 - 483: 66(i8vec2) VectorShuffle 482 482 0 1 - 484: 17(ivec4) Load 19(ballot) - 485: 66(i8vec2) GroupNonUniformUMax 177 PartitionedReduceNV 483 484 - 486: 67(ptr) AccessChain 37(data) 480 45 - 487: 23(i8vec4) Load 486 - 488: 23(i8vec4) VectorShuffle 487 485 4 5 2 3 - Store 486 488 - 489: 6(int) Load 8(invocation) - 490: 67(ptr) AccessChain 37(data) 52 45 - 491: 23(i8vec4) Load 490 - 492: 72(i8vec3) VectorShuffle 491 491 0 1 2 - 493: 17(ivec4) Load 19(ballot) - 494: 72(i8vec3) GroupNonUniformUMax 177 PartitionedReduceNV 492 493 - 495: 67(ptr) AccessChain 37(data) 489 45 - 496: 23(i8vec4) Load 495 - 497: 23(i8vec4) VectorShuffle 496 494 4 5 6 3 - Store 495 497 + 467: 72(i8vec3) VectorShuffle 466 466 0 1 2 + 468: 17(ivec4) Load 19(ballot) + 469: 72(i8vec3) GroupNonUniformIMul 177 PartitionedReduceNV 467 468 + 470: 62(ptr) AccessChain 37(data) 464 45 40 + 471: 22(int8_t) CompositeExtract 469 0 + Store 470 471 + 472: 62(ptr) AccessChain 37(data) 464 45 188 + 473: 22(int8_t) CompositeExtract 469 1 + Store 472 473 + 474: 62(ptr) AccessChain 37(data) 464 45 201 + 475: 22(int8_t) CompositeExtract 469 2 + Store 474 475 + 476: 6(int) Load 8(invocation) + 477: 67(ptr) AccessChain 37(data) 58 45 + 478: 23(i8vec4) Load 477 + 479: 17(ivec4) Load 19(ballot) + 480: 23(i8vec4) GroupNonUniformIMul 177 PartitionedReduceNV 478 479 + 481: 67(ptr) AccessChain 37(data) 476 45 + Store 481 480 + 482: 6(int) Load 8(invocation) + 483: 62(ptr) AccessChain 37(data) 39 45 40 + 484: 22(int8_t) Load 483 + 485: 17(ivec4) Load 19(ballot) + 486: 22(int8_t) GroupNonUniformUMin 177 PartitionedReduceNV 484 485 + 487: 62(ptr) AccessChain 37(data) 482 45 40 + Store 487 486 + 488: 6(int) Load 8(invocation) + 489: 67(ptr) AccessChain 37(data) 45 45 + 490: 23(i8vec4) Load 489 + 491: 66(i8vec2) VectorShuffle 490 490 0 1 + 492: 17(ivec4) Load 19(ballot) + 493: 66(i8vec2) GroupNonUniformUMin 177 PartitionedReduceNV 491 492 + 494: 62(ptr) AccessChain 37(data) 488 45 40 + 495: 22(int8_t) CompositeExtract 493 0 + Store 494 495 + 496: 62(ptr) AccessChain 37(data) 488 45 188 + 497: 22(int8_t) CompositeExtract 493 1 + Store 496 497 498: 6(int) Load 8(invocation) - 499: 67(ptr) AccessChain 37(data) 58 45 + 499: 67(ptr) AccessChain 37(data) 52 45 500: 23(i8vec4) Load 499 - 501: 17(ivec4) Load 19(ballot) - 502: 23(i8vec4) GroupNonUniformUMax 177 PartitionedReduceNV 500 501 - 503: 67(ptr) AccessChain 37(data) 498 45 - Store 503 502 - 504: 6(int) Load 8(invocation) - 505: 62(ptr) AccessChain 37(data) 39 45 40 - 506: 22(int8_t) Load 505 - 507: 17(ivec4) Load 19(ballot) - 508: 22(int8_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 506 507 - 509: 62(ptr) AccessChain 37(data) 504 45 40 - Store 509 508 + 501: 72(i8vec3) VectorShuffle 500 500 0 1 2 + 502: 17(ivec4) Load 19(ballot) + 503: 72(i8vec3) GroupNonUniformUMin 177 PartitionedReduceNV 501 502 + 504: 62(ptr) AccessChain 37(data) 498 45 40 + 505: 22(int8_t) CompositeExtract 503 0 + Store 504 505 + 506: 62(ptr) AccessChain 37(data) 498 45 188 + 507: 22(int8_t) CompositeExtract 503 1 + Store 506 507 + 508: 62(ptr) AccessChain 37(data) 498 45 201 + 509: 22(int8_t) CompositeExtract 503 2 + Store 508 509 510: 6(int) Load 8(invocation) - 511: 67(ptr) AccessChain 37(data) 45 45 + 511: 67(ptr) AccessChain 37(data) 58 45 512: 23(i8vec4) Load 511 - 513: 66(i8vec2) VectorShuffle 512 512 0 1 - 514: 17(ivec4) Load 19(ballot) - 515: 66(i8vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 513 514 - 516: 67(ptr) AccessChain 37(data) 510 45 - 517: 23(i8vec4) Load 516 - 518: 23(i8vec4) VectorShuffle 517 515 4 5 2 3 - Store 516 518 - 519: 6(int) Load 8(invocation) - 520: 67(ptr) AccessChain 37(data) 52 45 - 521: 23(i8vec4) Load 520 - 522: 72(i8vec3) VectorShuffle 521 521 0 1 2 - 523: 17(ivec4) Load 19(ballot) - 524: 72(i8vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 522 523 - 525: 67(ptr) AccessChain 37(data) 519 45 - 526: 23(i8vec4) Load 525 - 527: 23(i8vec4) VectorShuffle 526 524 4 5 6 3 - Store 525 527 - 528: 6(int) Load 8(invocation) - 529: 67(ptr) AccessChain 37(data) 58 45 - 530: 23(i8vec4) Load 529 - 531: 17(ivec4) Load 19(ballot) - 532: 23(i8vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 530 531 - 533: 67(ptr) AccessChain 37(data) 528 45 - Store 533 532 - 534: 6(int) Load 8(invocation) - 535: 62(ptr) AccessChain 37(data) 39 45 40 - 536: 22(int8_t) Load 535 - 537: 17(ivec4) Load 19(ballot) - 538: 22(int8_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 536 537 - 539: 62(ptr) AccessChain 37(data) 534 45 40 - Store 539 538 - 540: 6(int) Load 8(invocation) - 541: 67(ptr) AccessChain 37(data) 45 45 - 542: 23(i8vec4) Load 541 - 543: 66(i8vec2) VectorShuffle 542 542 0 1 - 544: 17(ivec4) Load 19(ballot) - 545: 66(i8vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 543 544 - 546: 67(ptr) AccessChain 37(data) 540 45 - 547: 23(i8vec4) Load 546 - 548: 23(i8vec4) VectorShuffle 547 545 4 5 2 3 - Store 546 548 - 549: 6(int) Load 8(invocation) - 550: 67(ptr) AccessChain 37(data) 52 45 - 551: 23(i8vec4) Load 550 - 552: 72(i8vec3) VectorShuffle 551 551 0 1 2 + 513: 17(ivec4) Load 19(ballot) + 514: 23(i8vec4) GroupNonUniformUMin 177 PartitionedReduceNV 512 513 + 515: 67(ptr) AccessChain 37(data) 510 45 + Store 515 514 + 516: 6(int) Load 8(invocation) + 517: 62(ptr) AccessChain 37(data) 39 45 40 + 518: 22(int8_t) Load 517 + 519: 17(ivec4) Load 19(ballot) + 520: 22(int8_t) GroupNonUniformUMax 177 PartitionedReduceNV 518 519 + 521: 62(ptr) AccessChain 37(data) 516 45 40 + Store 521 520 + 522: 6(int) Load 8(invocation) + 523: 67(ptr) AccessChain 37(data) 45 45 + 524: 23(i8vec4) Load 523 + 525: 66(i8vec2) VectorShuffle 524 524 0 1 + 526: 17(ivec4) Load 19(ballot) + 527: 66(i8vec2) GroupNonUniformUMax 177 PartitionedReduceNV 525 526 + 528: 62(ptr) AccessChain 37(data) 522 45 40 + 529: 22(int8_t) CompositeExtract 527 0 + Store 528 529 + 530: 62(ptr) AccessChain 37(data) 522 45 188 + 531: 22(int8_t) CompositeExtract 527 1 + Store 530 531 + 532: 6(int) Load 8(invocation) + 533: 67(ptr) AccessChain 37(data) 52 45 + 534: 23(i8vec4) Load 533 + 535: 72(i8vec3) VectorShuffle 534 534 0 1 2 + 536: 17(ivec4) Load 19(ballot) + 537: 72(i8vec3) GroupNonUniformUMax 177 PartitionedReduceNV 535 536 + 538: 62(ptr) AccessChain 37(data) 532 45 40 + 539: 22(int8_t) CompositeExtract 537 0 + Store 538 539 + 540: 62(ptr) AccessChain 37(data) 532 45 188 + 541: 22(int8_t) CompositeExtract 537 1 + Store 540 541 + 542: 62(ptr) AccessChain 37(data) 532 45 201 + 543: 22(int8_t) CompositeExtract 537 2 + Store 542 543 + 544: 6(int) Load 8(invocation) + 545: 67(ptr) AccessChain 37(data) 58 45 + 546: 23(i8vec4) Load 545 + 547: 17(ivec4) Load 19(ballot) + 548: 23(i8vec4) GroupNonUniformUMax 177 PartitionedReduceNV 546 547 + 549: 67(ptr) AccessChain 37(data) 544 45 + Store 549 548 + 550: 6(int) Load 8(invocation) + 551: 62(ptr) AccessChain 37(data) 39 45 40 + 552: 22(int8_t) Load 551 553: 17(ivec4) Load 19(ballot) - 554: 72(i8vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 552 553 - 555: 67(ptr) AccessChain 37(data) 549 45 - 556: 23(i8vec4) Load 555 - 557: 23(i8vec4) VectorShuffle 556 554 4 5 6 3 - Store 555 557 - 558: 6(int) Load 8(invocation) - 559: 67(ptr) AccessChain 37(data) 58 45 - 560: 23(i8vec4) Load 559 - 561: 17(ivec4) Load 19(ballot) - 562: 23(i8vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 560 561 - 563: 67(ptr) AccessChain 37(data) 558 45 - Store 563 562 - 564: 6(int) Load 8(invocation) - 565: 62(ptr) AccessChain 37(data) 39 45 40 - 566: 22(int8_t) Load 565 - 567: 17(ivec4) Load 19(ballot) - 568: 22(int8_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 566 567 - 569: 62(ptr) AccessChain 37(data) 564 45 40 - Store 569 568 - 570: 6(int) Load 8(invocation) - 571: 67(ptr) AccessChain 37(data) 45 45 - 572: 23(i8vec4) Load 571 - 573: 66(i8vec2) VectorShuffle 572 572 0 1 - 574: 17(ivec4) Load 19(ballot) - 575: 66(i8vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 573 574 - 576: 67(ptr) AccessChain 37(data) 570 45 - 577: 23(i8vec4) Load 576 - 578: 23(i8vec4) VectorShuffle 577 575 4 5 2 3 - Store 576 578 - 579: 6(int) Load 8(invocation) - 580: 67(ptr) AccessChain 37(data) 52 45 - 581: 23(i8vec4) Load 580 - 582: 72(i8vec3) VectorShuffle 581 581 0 1 2 - 583: 17(ivec4) Load 19(ballot) - 584: 72(i8vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 582 583 - 585: 67(ptr) AccessChain 37(data) 579 45 - 586: 23(i8vec4) Load 585 - 587: 23(i8vec4) VectorShuffle 586 584 4 5 6 3 - Store 585 587 - 588: 6(int) Load 8(invocation) - 589: 67(ptr) AccessChain 37(data) 58 45 - 590: 23(i8vec4) Load 589 - 591: 17(ivec4) Load 19(ballot) - 592: 23(i8vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 590 591 - 593: 67(ptr) AccessChain 37(data) 588 45 - Store 593 592 - 594: 6(int) Load 8(invocation) - 595: 80(ptr) AccessChain 37(data) 39 52 40 - 596: 24(int16_t) Load 595 - 597: 17(ivec4) Load 19(ballot) - 598: 24(int16_t) GroupNonUniformIAdd 177 PartitionedReduceNV 596 597 - 599: 80(ptr) AccessChain 37(data) 594 52 40 - Store 599 598 + 554: 22(int8_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 552 553 + 555: 62(ptr) AccessChain 37(data) 550 45 40 + Store 555 554 + 556: 6(int) Load 8(invocation) + 557: 67(ptr) AccessChain 37(data) 45 45 + 558: 23(i8vec4) Load 557 + 559: 66(i8vec2) VectorShuffle 558 558 0 1 + 560: 17(ivec4) Load 19(ballot) + 561: 66(i8vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 559 560 + 562: 62(ptr) AccessChain 37(data) 556 45 40 + 563: 22(int8_t) CompositeExtract 561 0 + Store 562 563 + 564: 62(ptr) AccessChain 37(data) 556 45 188 + 565: 22(int8_t) CompositeExtract 561 1 + Store 564 565 + 566: 6(int) Load 8(invocation) + 567: 67(ptr) AccessChain 37(data) 52 45 + 568: 23(i8vec4) Load 567 + 569: 72(i8vec3) VectorShuffle 568 568 0 1 2 + 570: 17(ivec4) Load 19(ballot) + 571: 72(i8vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 569 570 + 572: 62(ptr) AccessChain 37(data) 566 45 40 + 573: 22(int8_t) CompositeExtract 571 0 + Store 572 573 + 574: 62(ptr) AccessChain 37(data) 566 45 188 + 575: 22(int8_t) CompositeExtract 571 1 + Store 574 575 + 576: 62(ptr) AccessChain 37(data) 566 45 201 + 577: 22(int8_t) CompositeExtract 571 2 + Store 576 577 + 578: 6(int) Load 8(invocation) + 579: 67(ptr) AccessChain 37(data) 58 45 + 580: 23(i8vec4) Load 579 + 581: 17(ivec4) Load 19(ballot) + 582: 23(i8vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 580 581 + 583: 67(ptr) AccessChain 37(data) 578 45 + Store 583 582 + 584: 6(int) Load 8(invocation) + 585: 62(ptr) AccessChain 37(data) 39 45 40 + 586: 22(int8_t) Load 585 + 587: 17(ivec4) Load 19(ballot) + 588: 22(int8_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 586 587 + 589: 62(ptr) AccessChain 37(data) 584 45 40 + Store 589 588 + 590: 6(int) Load 8(invocation) + 591: 67(ptr) AccessChain 37(data) 45 45 + 592: 23(i8vec4) Load 591 + 593: 66(i8vec2) VectorShuffle 592 592 0 1 + 594: 17(ivec4) Load 19(ballot) + 595: 66(i8vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 593 594 + 596: 62(ptr) AccessChain 37(data) 590 45 40 + 597: 22(int8_t) CompositeExtract 595 0 + Store 596 597 + 598: 62(ptr) AccessChain 37(data) 590 45 188 + 599: 22(int8_t) CompositeExtract 595 1 + Store 598 599 600: 6(int) Load 8(invocation) - 601: 85(ptr) AccessChain 37(data) 45 52 - 602: 25(i16vec4) Load 601 - 603: 84(i16vec2) VectorShuffle 602 602 0 1 + 601: 67(ptr) AccessChain 37(data) 52 45 + 602: 23(i8vec4) Load 601 + 603: 72(i8vec3) VectorShuffle 602 602 0 1 2 604: 17(ivec4) Load 19(ballot) - 605: 84(i16vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 603 604 - 606: 85(ptr) AccessChain 37(data) 600 52 - 607: 25(i16vec4) Load 606 - 608: 25(i16vec4) VectorShuffle 607 605 4 5 2 3 - Store 606 608 - 609: 6(int) Load 8(invocation) - 610: 85(ptr) AccessChain 37(data) 52 52 - 611: 25(i16vec4) Load 610 - 612: 90(i16vec3) VectorShuffle 611 611 0 1 2 - 613: 17(ivec4) Load 19(ballot) - 614: 90(i16vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 612 613 - 615: 85(ptr) AccessChain 37(data) 609 52 - 616: 25(i16vec4) Load 615 - 617: 25(i16vec4) VectorShuffle 616 614 4 5 6 3 - Store 615 617 + 605: 72(i8vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 603 604 + 606: 62(ptr) AccessChain 37(data) 600 45 40 + 607: 22(int8_t) CompositeExtract 605 0 + Store 606 607 + 608: 62(ptr) AccessChain 37(data) 600 45 188 + 609: 22(int8_t) CompositeExtract 605 1 + Store 608 609 + 610: 62(ptr) AccessChain 37(data) 600 45 201 + 611: 22(int8_t) CompositeExtract 605 2 + Store 610 611 + 612: 6(int) Load 8(invocation) + 613: 67(ptr) AccessChain 37(data) 58 45 + 614: 23(i8vec4) Load 613 + 615: 17(ivec4) Load 19(ballot) + 616: 23(i8vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 614 615 + 617: 67(ptr) AccessChain 37(data) 612 45 + Store 617 616 618: 6(int) Load 8(invocation) - 619: 85(ptr) AccessChain 37(data) 58 52 - 620: 25(i16vec4) Load 619 + 619: 62(ptr) AccessChain 37(data) 39 45 40 + 620: 22(int8_t) Load 619 621: 17(ivec4) Load 19(ballot) - 622: 25(i16vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 620 621 - 623: 85(ptr) AccessChain 37(data) 618 52 + 622: 22(int8_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 620 621 + 623: 62(ptr) AccessChain 37(data) 618 45 40 Store 623 622 624: 6(int) Load 8(invocation) - 625: 80(ptr) AccessChain 37(data) 39 52 40 - 626: 24(int16_t) Load 625 - 627: 17(ivec4) Load 19(ballot) - 628: 24(int16_t) GroupNonUniformIMul 177 PartitionedReduceNV 626 627 - 629: 80(ptr) AccessChain 37(data) 624 52 40 - Store 629 628 - 630: 6(int) Load 8(invocation) - 631: 85(ptr) AccessChain 37(data) 45 52 - 632: 25(i16vec4) Load 631 - 633: 84(i16vec2) VectorShuffle 632 632 0 1 - 634: 17(ivec4) Load 19(ballot) - 635: 84(i16vec2) GroupNonUniformIMul 177 PartitionedReduceNV 633 634 - 636: 85(ptr) AccessChain 37(data) 630 52 - 637: 25(i16vec4) Load 636 - 638: 25(i16vec4) VectorShuffle 637 635 4 5 2 3 - Store 636 638 - 639: 6(int) Load 8(invocation) - 640: 85(ptr) AccessChain 37(data) 52 52 - 641: 25(i16vec4) Load 640 - 642: 90(i16vec3) VectorShuffle 641 641 0 1 2 - 643: 17(ivec4) Load 19(ballot) - 644: 90(i16vec3) GroupNonUniformIMul 177 PartitionedReduceNV 642 643 - 645: 85(ptr) AccessChain 37(data) 639 52 - 646: 25(i16vec4) Load 645 - 647: 25(i16vec4) VectorShuffle 646 644 4 5 6 3 - Store 645 647 - 648: 6(int) Load 8(invocation) - 649: 85(ptr) AccessChain 37(data) 58 52 - 650: 25(i16vec4) Load 649 - 651: 17(ivec4) Load 19(ballot) - 652: 25(i16vec4) GroupNonUniformIMul 177 PartitionedReduceNV 650 651 - 653: 85(ptr) AccessChain 37(data) 648 52 - Store 653 652 - 654: 6(int) Load 8(invocation) - 655: 80(ptr) AccessChain 37(data) 39 52 40 - 656: 24(int16_t) Load 655 - 657: 17(ivec4) Load 19(ballot) - 658: 24(int16_t) GroupNonUniformSMin 177 PartitionedReduceNV 656 657 - 659: 80(ptr) AccessChain 37(data) 654 52 40 - Store 659 658 - 660: 6(int) Load 8(invocation) - 661: 85(ptr) AccessChain 37(data) 45 52 - 662: 25(i16vec4) Load 661 - 663: 84(i16vec2) VectorShuffle 662 662 0 1 - 664: 17(ivec4) Load 19(ballot) - 665: 84(i16vec2) GroupNonUniformSMin 177 PartitionedReduceNV 663 664 - 666: 85(ptr) AccessChain 37(data) 660 52 - 667: 25(i16vec4) Load 666 - 668: 25(i16vec4) VectorShuffle 667 665 4 5 2 3 - Store 666 668 - 669: 6(int) Load 8(invocation) - 670: 85(ptr) AccessChain 37(data) 52 52 - 671: 25(i16vec4) Load 670 - 672: 90(i16vec3) VectorShuffle 671 671 0 1 2 - 673: 17(ivec4) Load 19(ballot) - 674: 90(i16vec3) GroupNonUniformSMin 177 PartitionedReduceNV 672 673 - 675: 85(ptr) AccessChain 37(data) 669 52 - 676: 25(i16vec4) Load 675 - 677: 25(i16vec4) VectorShuffle 676 674 4 5 6 3 - Store 675 677 - 678: 6(int) Load 8(invocation) - 679: 85(ptr) AccessChain 37(data) 58 52 - 680: 25(i16vec4) Load 679 - 681: 17(ivec4) Load 19(ballot) - 682: 25(i16vec4) GroupNonUniformSMin 177 PartitionedReduceNV 680 681 - 683: 85(ptr) AccessChain 37(data) 678 52 - Store 683 682 - 684: 6(int) Load 8(invocation) - 685: 80(ptr) AccessChain 37(data) 39 52 40 - 686: 24(int16_t) Load 685 - 687: 17(ivec4) Load 19(ballot) - 688: 24(int16_t) GroupNonUniformSMax 177 PartitionedReduceNV 686 687 - 689: 80(ptr) AccessChain 37(data) 684 52 40 - Store 689 688 - 690: 6(int) Load 8(invocation) - 691: 85(ptr) AccessChain 37(data) 45 52 - 692: 25(i16vec4) Load 691 - 693: 84(i16vec2) VectorShuffle 692 692 0 1 - 694: 17(ivec4) Load 19(ballot) - 695: 84(i16vec2) GroupNonUniformSMax 177 PartitionedReduceNV 693 694 - 696: 85(ptr) AccessChain 37(data) 690 52 - 697: 25(i16vec4) Load 696 - 698: 25(i16vec4) VectorShuffle 697 695 4 5 2 3 - Store 696 698 - 699: 6(int) Load 8(invocation) - 700: 85(ptr) AccessChain 37(data) 52 52 - 701: 25(i16vec4) Load 700 - 702: 90(i16vec3) VectorShuffle 701 701 0 1 2 - 703: 17(ivec4) Load 19(ballot) - 704: 90(i16vec3) GroupNonUniformSMax 177 PartitionedReduceNV 702 703 - 705: 85(ptr) AccessChain 37(data) 699 52 - 706: 25(i16vec4) Load 705 - 707: 25(i16vec4) VectorShuffle 706 704 4 5 6 3 - Store 705 707 - 708: 6(int) Load 8(invocation) - 709: 85(ptr) AccessChain 37(data) 58 52 - 710: 25(i16vec4) Load 709 - 711: 17(ivec4) Load 19(ballot) - 712: 25(i16vec4) GroupNonUniformSMax 177 PartitionedReduceNV 710 711 - 713: 85(ptr) AccessChain 37(data) 708 52 - Store 713 712 + 625: 67(ptr) AccessChain 37(data) 45 45 + 626: 23(i8vec4) Load 625 + 627: 66(i8vec2) VectorShuffle 626 626 0 1 + 628: 17(ivec4) Load 19(ballot) + 629: 66(i8vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 627 628 + 630: 62(ptr) AccessChain 37(data) 624 45 40 + 631: 22(int8_t) CompositeExtract 629 0 + Store 630 631 + 632: 62(ptr) AccessChain 37(data) 624 45 188 + 633: 22(int8_t) CompositeExtract 629 1 + Store 632 633 + 634: 6(int) Load 8(invocation) + 635: 67(ptr) AccessChain 37(data) 52 45 + 636: 23(i8vec4) Load 635 + 637: 72(i8vec3) VectorShuffle 636 636 0 1 2 + 638: 17(ivec4) Load 19(ballot) + 639: 72(i8vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 637 638 + 640: 62(ptr) AccessChain 37(data) 634 45 40 + 641: 22(int8_t) CompositeExtract 639 0 + Store 640 641 + 642: 62(ptr) AccessChain 37(data) 634 45 188 + 643: 22(int8_t) CompositeExtract 639 1 + Store 642 643 + 644: 62(ptr) AccessChain 37(data) 634 45 201 + 645: 22(int8_t) CompositeExtract 639 2 + Store 644 645 + 646: 6(int) Load 8(invocation) + 647: 67(ptr) AccessChain 37(data) 58 45 + 648: 23(i8vec4) Load 647 + 649: 17(ivec4) Load 19(ballot) + 650: 23(i8vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 648 649 + 651: 67(ptr) AccessChain 37(data) 646 45 + Store 651 650 + 652: 6(int) Load 8(invocation) + 653: 80(ptr) AccessChain 37(data) 39 52 40 + 654: 24(int16_t) Load 653 + 655: 17(ivec4) Load 19(ballot) + 656: 24(int16_t) GroupNonUniformIAdd 177 PartitionedReduceNV 654 655 + 657: 80(ptr) AccessChain 37(data) 652 52 40 + Store 657 656 + 658: 6(int) Load 8(invocation) + 659: 85(ptr) AccessChain 37(data) 45 52 + 660: 25(i16vec4) Load 659 + 661: 84(i16vec2) VectorShuffle 660 660 0 1 + 662: 17(ivec4) Load 19(ballot) + 663: 84(i16vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 661 662 + 664: 80(ptr) AccessChain 37(data) 658 52 40 + 665: 24(int16_t) CompositeExtract 663 0 + Store 664 665 + 666: 80(ptr) AccessChain 37(data) 658 52 188 + 667: 24(int16_t) CompositeExtract 663 1 + Store 666 667 + 668: 6(int) Load 8(invocation) + 669: 85(ptr) AccessChain 37(data) 52 52 + 670: 25(i16vec4) Load 669 + 671: 90(i16vec3) VectorShuffle 670 670 0 1 2 + 672: 17(ivec4) Load 19(ballot) + 673: 90(i16vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 671 672 + 674: 80(ptr) AccessChain 37(data) 668 52 40 + 675: 24(int16_t) CompositeExtract 673 0 + Store 674 675 + 676: 80(ptr) AccessChain 37(data) 668 52 188 + 677: 24(int16_t) CompositeExtract 673 1 + Store 676 677 + 678: 80(ptr) AccessChain 37(data) 668 52 201 + 679: 24(int16_t) CompositeExtract 673 2 + Store 678 679 + 680: 6(int) Load 8(invocation) + 681: 85(ptr) AccessChain 37(data) 58 52 + 682: 25(i16vec4) Load 681 + 683: 17(ivec4) Load 19(ballot) + 684: 25(i16vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 682 683 + 685: 85(ptr) AccessChain 37(data) 680 52 + Store 685 684 + 686: 6(int) Load 8(invocation) + 687: 80(ptr) AccessChain 37(data) 39 52 40 + 688: 24(int16_t) Load 687 + 689: 17(ivec4) Load 19(ballot) + 690: 24(int16_t) GroupNonUniformIMul 177 PartitionedReduceNV 688 689 + 691: 80(ptr) AccessChain 37(data) 686 52 40 + Store 691 690 + 692: 6(int) Load 8(invocation) + 693: 85(ptr) AccessChain 37(data) 45 52 + 694: 25(i16vec4) Load 693 + 695: 84(i16vec2) VectorShuffle 694 694 0 1 + 696: 17(ivec4) Load 19(ballot) + 697: 84(i16vec2) GroupNonUniformIMul 177 PartitionedReduceNV 695 696 + 698: 80(ptr) AccessChain 37(data) 692 52 40 + 699: 24(int16_t) CompositeExtract 697 0 + Store 698 699 + 700: 80(ptr) AccessChain 37(data) 692 52 188 + 701: 24(int16_t) CompositeExtract 697 1 + Store 700 701 + 702: 6(int) Load 8(invocation) + 703: 85(ptr) AccessChain 37(data) 52 52 + 704: 25(i16vec4) Load 703 + 705: 90(i16vec3) VectorShuffle 704 704 0 1 2 + 706: 17(ivec4) Load 19(ballot) + 707: 90(i16vec3) GroupNonUniformIMul 177 PartitionedReduceNV 705 706 + 708: 80(ptr) AccessChain 37(data) 702 52 40 + 709: 24(int16_t) CompositeExtract 707 0 + Store 708 709 + 710: 80(ptr) AccessChain 37(data) 702 52 188 + 711: 24(int16_t) CompositeExtract 707 1 + Store 710 711 + 712: 80(ptr) AccessChain 37(data) 702 52 201 + 713: 24(int16_t) CompositeExtract 707 2 + Store 712 713 714: 6(int) Load 8(invocation) - 715: 80(ptr) AccessChain 37(data) 39 52 40 - 716: 24(int16_t) Load 715 + 715: 85(ptr) AccessChain 37(data) 58 52 + 716: 25(i16vec4) Load 715 717: 17(ivec4) Load 19(ballot) - 718: 24(int16_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 716 717 - 719: 80(ptr) AccessChain 37(data) 714 52 40 + 718: 25(i16vec4) GroupNonUniformIMul 177 PartitionedReduceNV 716 717 + 719: 85(ptr) AccessChain 37(data) 714 52 Store 719 718 720: 6(int) Load 8(invocation) - 721: 85(ptr) AccessChain 37(data) 45 52 - 722: 25(i16vec4) Load 721 - 723: 84(i16vec2) VectorShuffle 722 722 0 1 - 724: 17(ivec4) Load 19(ballot) - 725: 84(i16vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 723 724 - 726: 85(ptr) AccessChain 37(data) 720 52 - 727: 25(i16vec4) Load 726 - 728: 25(i16vec4) VectorShuffle 727 725 4 5 2 3 - Store 726 728 - 729: 6(int) Load 8(invocation) - 730: 85(ptr) AccessChain 37(data) 52 52 - 731: 25(i16vec4) Load 730 - 732: 90(i16vec3) VectorShuffle 731 731 0 1 2 - 733: 17(ivec4) Load 19(ballot) - 734: 90(i16vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 732 733 - 735: 85(ptr) AccessChain 37(data) 729 52 - 736: 25(i16vec4) Load 735 - 737: 25(i16vec4) VectorShuffle 736 734 4 5 6 3 - Store 735 737 - 738: 6(int) Load 8(invocation) - 739: 85(ptr) AccessChain 37(data) 58 52 - 740: 25(i16vec4) Load 739 - 741: 17(ivec4) Load 19(ballot) - 742: 25(i16vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 740 741 - 743: 85(ptr) AccessChain 37(data) 738 52 - Store 743 742 - 744: 6(int) Load 8(invocation) - 745: 80(ptr) AccessChain 37(data) 39 52 40 - 746: 24(int16_t) Load 745 - 747: 17(ivec4) Load 19(ballot) - 748: 24(int16_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 746 747 - 749: 80(ptr) AccessChain 37(data) 744 52 40 - Store 749 748 - 750: 6(int) Load 8(invocation) - 751: 85(ptr) AccessChain 37(data) 45 52 - 752: 25(i16vec4) Load 751 - 753: 84(i16vec2) VectorShuffle 752 752 0 1 - 754: 17(ivec4) Load 19(ballot) - 755: 84(i16vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 753 754 - 756: 85(ptr) AccessChain 37(data) 750 52 - 757: 25(i16vec4) Load 756 - 758: 25(i16vec4) VectorShuffle 757 755 4 5 2 3 - Store 756 758 - 759: 6(int) Load 8(invocation) - 760: 85(ptr) AccessChain 37(data) 52 52 - 761: 25(i16vec4) Load 760 - 762: 90(i16vec3) VectorShuffle 761 761 0 1 2 - 763: 17(ivec4) Load 19(ballot) - 764: 90(i16vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 762 763 - 765: 85(ptr) AccessChain 37(data) 759 52 - 766: 25(i16vec4) Load 765 - 767: 25(i16vec4) VectorShuffle 766 764 4 5 6 3 - Store 765 767 - 768: 6(int) Load 8(invocation) - 769: 85(ptr) AccessChain 37(data) 58 52 - 770: 25(i16vec4) Load 769 - 771: 17(ivec4) Load 19(ballot) - 772: 25(i16vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 770 771 - 773: 85(ptr) AccessChain 37(data) 768 52 - Store 773 772 - 774: 6(int) Load 8(invocation) - 775: 80(ptr) AccessChain 37(data) 39 52 40 - 776: 24(int16_t) Load 775 - 777: 17(ivec4) Load 19(ballot) - 778: 24(int16_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 776 777 - 779: 80(ptr) AccessChain 37(data) 774 52 40 - Store 779 778 - 780: 6(int) Load 8(invocation) - 781: 85(ptr) AccessChain 37(data) 45 52 - 782: 25(i16vec4) Load 781 - 783: 84(i16vec2) VectorShuffle 782 782 0 1 - 784: 17(ivec4) Load 19(ballot) - 785: 84(i16vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 783 784 - 786: 85(ptr) AccessChain 37(data) 780 52 - 787: 25(i16vec4) Load 786 - 788: 25(i16vec4) VectorShuffle 787 785 4 5 2 3 - Store 786 788 - 789: 6(int) Load 8(invocation) - 790: 85(ptr) AccessChain 37(data) 52 52 - 791: 25(i16vec4) Load 790 - 792: 90(i16vec3) VectorShuffle 791 791 0 1 2 - 793: 17(ivec4) Load 19(ballot) - 794: 90(i16vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 792 793 - 795: 85(ptr) AccessChain 37(data) 789 52 + 721: 80(ptr) AccessChain 37(data) 39 52 40 + 722: 24(int16_t) Load 721 + 723: 17(ivec4) Load 19(ballot) + 724: 24(int16_t) GroupNonUniformSMin 177 PartitionedReduceNV 722 723 + 725: 80(ptr) AccessChain 37(data) 720 52 40 + Store 725 724 + 726: 6(int) Load 8(invocation) + 727: 85(ptr) AccessChain 37(data) 45 52 + 728: 25(i16vec4) Load 727 + 729: 84(i16vec2) VectorShuffle 728 728 0 1 + 730: 17(ivec4) Load 19(ballot) + 731: 84(i16vec2) GroupNonUniformSMin 177 PartitionedReduceNV 729 730 + 732: 80(ptr) AccessChain 37(data) 726 52 40 + 733: 24(int16_t) CompositeExtract 731 0 + Store 732 733 + 734: 80(ptr) AccessChain 37(data) 726 52 188 + 735: 24(int16_t) CompositeExtract 731 1 + Store 734 735 + 736: 6(int) Load 8(invocation) + 737: 85(ptr) AccessChain 37(data) 52 52 + 738: 25(i16vec4) Load 737 + 739: 90(i16vec3) VectorShuffle 738 738 0 1 2 + 740: 17(ivec4) Load 19(ballot) + 741: 90(i16vec3) GroupNonUniformSMin 177 PartitionedReduceNV 739 740 + 742: 80(ptr) AccessChain 37(data) 736 52 40 + 743: 24(int16_t) CompositeExtract 741 0 + Store 742 743 + 744: 80(ptr) AccessChain 37(data) 736 52 188 + 745: 24(int16_t) CompositeExtract 741 1 + Store 744 745 + 746: 80(ptr) AccessChain 37(data) 736 52 201 + 747: 24(int16_t) CompositeExtract 741 2 + Store 746 747 + 748: 6(int) Load 8(invocation) + 749: 85(ptr) AccessChain 37(data) 58 52 + 750: 25(i16vec4) Load 749 + 751: 17(ivec4) Load 19(ballot) + 752: 25(i16vec4) GroupNonUniformSMin 177 PartitionedReduceNV 750 751 + 753: 85(ptr) AccessChain 37(data) 748 52 + Store 753 752 + 754: 6(int) Load 8(invocation) + 755: 80(ptr) AccessChain 37(data) 39 52 40 + 756: 24(int16_t) Load 755 + 757: 17(ivec4) Load 19(ballot) + 758: 24(int16_t) GroupNonUniformSMax 177 PartitionedReduceNV 756 757 + 759: 80(ptr) AccessChain 37(data) 754 52 40 + Store 759 758 + 760: 6(int) Load 8(invocation) + 761: 85(ptr) AccessChain 37(data) 45 52 + 762: 25(i16vec4) Load 761 + 763: 84(i16vec2) VectorShuffle 762 762 0 1 + 764: 17(ivec4) Load 19(ballot) + 765: 84(i16vec2) GroupNonUniformSMax 177 PartitionedReduceNV 763 764 + 766: 80(ptr) AccessChain 37(data) 760 52 40 + 767: 24(int16_t) CompositeExtract 765 0 + Store 766 767 + 768: 80(ptr) AccessChain 37(data) 760 52 188 + 769: 24(int16_t) CompositeExtract 765 1 + Store 768 769 + 770: 6(int) Load 8(invocation) + 771: 85(ptr) AccessChain 37(data) 52 52 + 772: 25(i16vec4) Load 771 + 773: 90(i16vec3) VectorShuffle 772 772 0 1 2 + 774: 17(ivec4) Load 19(ballot) + 775: 90(i16vec3) GroupNonUniformSMax 177 PartitionedReduceNV 773 774 + 776: 80(ptr) AccessChain 37(data) 770 52 40 + 777: 24(int16_t) CompositeExtract 775 0 + Store 776 777 + 778: 80(ptr) AccessChain 37(data) 770 52 188 + 779: 24(int16_t) CompositeExtract 775 1 + Store 778 779 + 780: 80(ptr) AccessChain 37(data) 770 52 201 + 781: 24(int16_t) CompositeExtract 775 2 + Store 780 781 + 782: 6(int) Load 8(invocation) + 783: 85(ptr) AccessChain 37(data) 58 52 + 784: 25(i16vec4) Load 783 + 785: 17(ivec4) Load 19(ballot) + 786: 25(i16vec4) GroupNonUniformSMax 177 PartitionedReduceNV 784 785 + 787: 85(ptr) AccessChain 37(data) 782 52 + Store 787 786 + 788: 6(int) Load 8(invocation) + 789: 80(ptr) AccessChain 37(data) 39 52 40 + 790: 24(int16_t) Load 789 + 791: 17(ivec4) Load 19(ballot) + 792: 24(int16_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 790 791 + 793: 80(ptr) AccessChain 37(data) 788 52 40 + Store 793 792 + 794: 6(int) Load 8(invocation) + 795: 85(ptr) AccessChain 37(data) 45 52 796: 25(i16vec4) Load 795 - 797: 25(i16vec4) VectorShuffle 796 794 4 5 6 3 - Store 795 797 - 798: 6(int) Load 8(invocation) - 799: 85(ptr) AccessChain 37(data) 58 52 - 800: 25(i16vec4) Load 799 - 801: 17(ivec4) Load 19(ballot) - 802: 25(i16vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 800 801 - 803: 85(ptr) AccessChain 37(data) 798 52 - Store 803 802 + 797: 84(i16vec2) VectorShuffle 796 796 0 1 + 798: 17(ivec4) Load 19(ballot) + 799: 84(i16vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 797 798 + 800: 80(ptr) AccessChain 37(data) 794 52 40 + 801: 24(int16_t) CompositeExtract 799 0 + Store 800 801 + 802: 80(ptr) AccessChain 37(data) 794 52 188 + 803: 24(int16_t) CompositeExtract 799 1 + Store 802 803 804: 6(int) Load 8(invocation) - 805: 98(ptr) AccessChain 37(data) 39 58 40 - 806: 26(int16_t) Load 805 - 807: 17(ivec4) Load 19(ballot) - 808: 26(int16_t) GroupNonUniformIAdd 177 PartitionedReduceNV 806 807 - 809: 98(ptr) AccessChain 37(data) 804 58 40 - Store 809 808 - 810: 6(int) Load 8(invocation) - 811: 103(ptr) AccessChain 37(data) 45 58 - 812: 27(i16vec4) Load 811 - 813:102(i16vec2) VectorShuffle 812 812 0 1 - 814: 17(ivec4) Load 19(ballot) - 815:102(i16vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 813 814 - 816: 103(ptr) AccessChain 37(data) 810 58 - 817: 27(i16vec4) Load 816 - 818: 27(i16vec4) VectorShuffle 817 815 4 5 2 3 - Store 816 818 - 819: 6(int) Load 8(invocation) - 820: 103(ptr) AccessChain 37(data) 52 58 - 821: 27(i16vec4) Load 820 - 822:108(i16vec3) VectorShuffle 821 821 0 1 2 - 823: 17(ivec4) Load 19(ballot) - 824:108(i16vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 822 823 - 825: 103(ptr) AccessChain 37(data) 819 58 - 826: 27(i16vec4) Load 825 - 827: 27(i16vec4) VectorShuffle 826 824 4 5 6 3 - Store 825 827 + 805: 85(ptr) AccessChain 37(data) 52 52 + 806: 25(i16vec4) Load 805 + 807: 90(i16vec3) VectorShuffle 806 806 0 1 2 + 808: 17(ivec4) Load 19(ballot) + 809: 90(i16vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 807 808 + 810: 80(ptr) AccessChain 37(data) 804 52 40 + 811: 24(int16_t) CompositeExtract 809 0 + Store 810 811 + 812: 80(ptr) AccessChain 37(data) 804 52 188 + 813: 24(int16_t) CompositeExtract 809 1 + Store 812 813 + 814: 80(ptr) AccessChain 37(data) 804 52 201 + 815: 24(int16_t) CompositeExtract 809 2 + Store 814 815 + 816: 6(int) Load 8(invocation) + 817: 85(ptr) AccessChain 37(data) 58 52 + 818: 25(i16vec4) Load 817 + 819: 17(ivec4) Load 19(ballot) + 820: 25(i16vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 818 819 + 821: 85(ptr) AccessChain 37(data) 816 52 + Store 821 820 + 822: 6(int) Load 8(invocation) + 823: 80(ptr) AccessChain 37(data) 39 52 40 + 824: 24(int16_t) Load 823 + 825: 17(ivec4) Load 19(ballot) + 826: 24(int16_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 824 825 + 827: 80(ptr) AccessChain 37(data) 822 52 40 + Store 827 826 828: 6(int) Load 8(invocation) - 829: 103(ptr) AccessChain 37(data) 58 58 - 830: 27(i16vec4) Load 829 - 831: 17(ivec4) Load 19(ballot) - 832: 27(i16vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 830 831 - 833: 103(ptr) AccessChain 37(data) 828 58 - Store 833 832 - 834: 6(int) Load 8(invocation) - 835: 98(ptr) AccessChain 37(data) 39 58 40 - 836: 26(int16_t) Load 835 - 837: 17(ivec4) Load 19(ballot) - 838: 26(int16_t) GroupNonUniformIMul 177 PartitionedReduceNV 836 837 - 839: 98(ptr) AccessChain 37(data) 834 58 40 - Store 839 838 - 840: 6(int) Load 8(invocation) - 841: 103(ptr) AccessChain 37(data) 45 58 - 842: 27(i16vec4) Load 841 - 843:102(i16vec2) VectorShuffle 842 842 0 1 - 844: 17(ivec4) Load 19(ballot) - 845:102(i16vec2) GroupNonUniformIMul 177 PartitionedReduceNV 843 844 - 846: 103(ptr) AccessChain 37(data) 840 58 - 847: 27(i16vec4) Load 846 - 848: 27(i16vec4) VectorShuffle 847 845 4 5 2 3 - Store 846 848 - 849: 6(int) Load 8(invocation) - 850: 103(ptr) AccessChain 37(data) 52 58 - 851: 27(i16vec4) Load 850 - 852:108(i16vec3) VectorShuffle 851 851 0 1 2 + 829: 85(ptr) AccessChain 37(data) 45 52 + 830: 25(i16vec4) Load 829 + 831: 84(i16vec2) VectorShuffle 830 830 0 1 + 832: 17(ivec4) Load 19(ballot) + 833: 84(i16vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 831 832 + 834: 80(ptr) AccessChain 37(data) 828 52 40 + 835: 24(int16_t) CompositeExtract 833 0 + Store 834 835 + 836: 80(ptr) AccessChain 37(data) 828 52 188 + 837: 24(int16_t) CompositeExtract 833 1 + Store 836 837 + 838: 6(int) Load 8(invocation) + 839: 85(ptr) AccessChain 37(data) 52 52 + 840: 25(i16vec4) Load 839 + 841: 90(i16vec3) VectorShuffle 840 840 0 1 2 + 842: 17(ivec4) Load 19(ballot) + 843: 90(i16vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 841 842 + 844: 80(ptr) AccessChain 37(data) 838 52 40 + 845: 24(int16_t) CompositeExtract 843 0 + Store 844 845 + 846: 80(ptr) AccessChain 37(data) 838 52 188 + 847: 24(int16_t) CompositeExtract 843 1 + Store 846 847 + 848: 80(ptr) AccessChain 37(data) 838 52 201 + 849: 24(int16_t) CompositeExtract 843 2 + Store 848 849 + 850: 6(int) Load 8(invocation) + 851: 85(ptr) AccessChain 37(data) 58 52 + 852: 25(i16vec4) Load 851 853: 17(ivec4) Load 19(ballot) - 854:108(i16vec3) GroupNonUniformIMul 177 PartitionedReduceNV 852 853 - 855: 103(ptr) AccessChain 37(data) 849 58 - 856: 27(i16vec4) Load 855 - 857: 27(i16vec4) VectorShuffle 856 854 4 5 6 3 - Store 855 857 - 858: 6(int) Load 8(invocation) - 859: 103(ptr) AccessChain 37(data) 58 58 - 860: 27(i16vec4) Load 859 - 861: 17(ivec4) Load 19(ballot) - 862: 27(i16vec4) GroupNonUniformIMul 177 PartitionedReduceNV 860 861 - 863: 103(ptr) AccessChain 37(data) 858 58 - Store 863 862 - 864: 6(int) Load 8(invocation) - 865: 98(ptr) AccessChain 37(data) 39 58 40 - 866: 26(int16_t) Load 865 - 867: 17(ivec4) Load 19(ballot) - 868: 26(int16_t) GroupNonUniformUMin 177 PartitionedReduceNV 866 867 - 869: 98(ptr) AccessChain 37(data) 864 58 40 - Store 869 868 - 870: 6(int) Load 8(invocation) - 871: 103(ptr) AccessChain 37(data) 45 58 - 872: 27(i16vec4) Load 871 - 873:102(i16vec2) VectorShuffle 872 872 0 1 - 874: 17(ivec4) Load 19(ballot) - 875:102(i16vec2) GroupNonUniformUMin 177 PartitionedReduceNV 873 874 - 876: 103(ptr) AccessChain 37(data) 870 58 - 877: 27(i16vec4) Load 876 - 878: 27(i16vec4) VectorShuffle 877 875 4 5 2 3 - Store 876 878 - 879: 6(int) Load 8(invocation) - 880: 103(ptr) AccessChain 37(data) 52 58 - 881: 27(i16vec4) Load 880 - 882:108(i16vec3) VectorShuffle 881 881 0 1 2 - 883: 17(ivec4) Load 19(ballot) - 884:108(i16vec3) GroupNonUniformUMin 177 PartitionedReduceNV 882 883 - 885: 103(ptr) AccessChain 37(data) 879 58 - 886: 27(i16vec4) Load 885 - 887: 27(i16vec4) VectorShuffle 886 884 4 5 6 3 - Store 885 887 - 888: 6(int) Load 8(invocation) - 889: 103(ptr) AccessChain 37(data) 58 58 - 890: 27(i16vec4) Load 889 - 891: 17(ivec4) Load 19(ballot) - 892: 27(i16vec4) GroupNonUniformUMin 177 PartitionedReduceNV 890 891 - 893: 103(ptr) AccessChain 37(data) 888 58 - Store 893 892 - 894: 6(int) Load 8(invocation) - 895: 98(ptr) AccessChain 37(data) 39 58 40 - 896: 26(int16_t) Load 895 - 897: 17(ivec4) Load 19(ballot) - 898: 26(int16_t) GroupNonUniformUMax 177 PartitionedReduceNV 896 897 - 899: 98(ptr) AccessChain 37(data) 894 58 40 - Store 899 898 - 900: 6(int) Load 8(invocation) - 901: 103(ptr) AccessChain 37(data) 45 58 - 902: 27(i16vec4) Load 901 - 903:102(i16vec2) VectorShuffle 902 902 0 1 - 904: 17(ivec4) Load 19(ballot) - 905:102(i16vec2) GroupNonUniformUMax 177 PartitionedReduceNV 903 904 - 906: 103(ptr) AccessChain 37(data) 900 58 - 907: 27(i16vec4) Load 906 - 908: 27(i16vec4) VectorShuffle 907 905 4 5 2 3 - Store 906 908 - 909: 6(int) Load 8(invocation) - 910: 103(ptr) AccessChain 37(data) 52 58 - 911: 27(i16vec4) Load 910 - 912:108(i16vec3) VectorShuffle 911 911 0 1 2 - 913: 17(ivec4) Load 19(ballot) - 914:108(i16vec3) GroupNonUniformUMax 177 PartitionedReduceNV 912 913 - 915: 103(ptr) AccessChain 37(data) 909 58 - 916: 27(i16vec4) Load 915 - 917: 27(i16vec4) VectorShuffle 916 914 4 5 6 3 - Store 915 917 + 854: 25(i16vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 852 853 + 855: 85(ptr) AccessChain 37(data) 850 52 + Store 855 854 + 856: 6(int) Load 8(invocation) + 857: 80(ptr) AccessChain 37(data) 39 52 40 + 858: 24(int16_t) Load 857 + 859: 17(ivec4) Load 19(ballot) + 860: 24(int16_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 858 859 + 861: 80(ptr) AccessChain 37(data) 856 52 40 + Store 861 860 + 862: 6(int) Load 8(invocation) + 863: 85(ptr) AccessChain 37(data) 45 52 + 864: 25(i16vec4) Load 863 + 865: 84(i16vec2) VectorShuffle 864 864 0 1 + 866: 17(ivec4) Load 19(ballot) + 867: 84(i16vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 865 866 + 868: 80(ptr) AccessChain 37(data) 862 52 40 + 869: 24(int16_t) CompositeExtract 867 0 + Store 868 869 + 870: 80(ptr) AccessChain 37(data) 862 52 188 + 871: 24(int16_t) CompositeExtract 867 1 + Store 870 871 + 872: 6(int) Load 8(invocation) + 873: 85(ptr) AccessChain 37(data) 52 52 + 874: 25(i16vec4) Load 873 + 875: 90(i16vec3) VectorShuffle 874 874 0 1 2 + 876: 17(ivec4) Load 19(ballot) + 877: 90(i16vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 875 876 + 878: 80(ptr) AccessChain 37(data) 872 52 40 + 879: 24(int16_t) CompositeExtract 877 0 + Store 878 879 + 880: 80(ptr) AccessChain 37(data) 872 52 188 + 881: 24(int16_t) CompositeExtract 877 1 + Store 880 881 + 882: 80(ptr) AccessChain 37(data) 872 52 201 + 883: 24(int16_t) CompositeExtract 877 2 + Store 882 883 + 884: 6(int) Load 8(invocation) + 885: 85(ptr) AccessChain 37(data) 58 52 + 886: 25(i16vec4) Load 885 + 887: 17(ivec4) Load 19(ballot) + 888: 25(i16vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 886 887 + 889: 85(ptr) AccessChain 37(data) 884 52 + Store 889 888 + 890: 6(int) Load 8(invocation) + 891: 98(ptr) AccessChain 37(data) 39 58 40 + 892: 26(int16_t) Load 891 + 893: 17(ivec4) Load 19(ballot) + 894: 26(int16_t) GroupNonUniformIAdd 177 PartitionedReduceNV 892 893 + 895: 98(ptr) AccessChain 37(data) 890 58 40 + Store 895 894 + 896: 6(int) Load 8(invocation) + 897: 103(ptr) AccessChain 37(data) 45 58 + 898: 27(i16vec4) Load 897 + 899:102(i16vec2) VectorShuffle 898 898 0 1 + 900: 17(ivec4) Load 19(ballot) + 901:102(i16vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 899 900 + 902: 98(ptr) AccessChain 37(data) 896 58 40 + 903: 26(int16_t) CompositeExtract 901 0 + Store 902 903 + 904: 98(ptr) AccessChain 37(data) 896 58 188 + 905: 26(int16_t) CompositeExtract 901 1 + Store 904 905 + 906: 6(int) Load 8(invocation) + 907: 103(ptr) AccessChain 37(data) 52 58 + 908: 27(i16vec4) Load 907 + 909:108(i16vec3) VectorShuffle 908 908 0 1 2 + 910: 17(ivec4) Load 19(ballot) + 911:108(i16vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 909 910 + 912: 98(ptr) AccessChain 37(data) 906 58 40 + 913: 26(int16_t) CompositeExtract 911 0 + Store 912 913 + 914: 98(ptr) AccessChain 37(data) 906 58 188 + 915: 26(int16_t) CompositeExtract 911 1 + Store 914 915 + 916: 98(ptr) AccessChain 37(data) 906 58 201 + 917: 26(int16_t) CompositeExtract 911 2 + Store 916 917 918: 6(int) Load 8(invocation) 919: 103(ptr) AccessChain 37(data) 58 58 920: 27(i16vec4) Load 919 921: 17(ivec4) Load 19(ballot) - 922: 27(i16vec4) GroupNonUniformUMax 177 PartitionedReduceNV 920 921 + 922: 27(i16vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 920 921 923: 103(ptr) AccessChain 37(data) 918 58 Store 923 922 924: 6(int) Load 8(invocation) 925: 98(ptr) AccessChain 37(data) 39 58 40 926: 26(int16_t) Load 925 927: 17(ivec4) Load 19(ballot) - 928: 26(int16_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 926 927 + 928: 26(int16_t) GroupNonUniformIMul 177 PartitionedReduceNV 926 927 929: 98(ptr) AccessChain 37(data) 924 58 40 Store 929 928 930: 6(int) Load 8(invocation) @@ -1129,707 +1182,977 @@ spv.subgroupExtendedTypesPartitioned.comp 932: 27(i16vec4) Load 931 933:102(i16vec2) VectorShuffle 932 932 0 1 934: 17(ivec4) Load 19(ballot) - 935:102(i16vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 933 934 - 936: 103(ptr) AccessChain 37(data) 930 58 - 937: 27(i16vec4) Load 936 - 938: 27(i16vec4) VectorShuffle 937 935 4 5 2 3 - Store 936 938 - 939: 6(int) Load 8(invocation) - 940: 103(ptr) AccessChain 37(data) 52 58 - 941: 27(i16vec4) Load 940 - 942:108(i16vec3) VectorShuffle 941 941 0 1 2 - 943: 17(ivec4) Load 19(ballot) - 944:108(i16vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 942 943 - 945: 103(ptr) AccessChain 37(data) 939 58 - 946: 27(i16vec4) Load 945 - 947: 27(i16vec4) VectorShuffle 946 944 4 5 6 3 - Store 945 947 - 948: 6(int) Load 8(invocation) - 949: 103(ptr) AccessChain 37(data) 58 58 - 950: 27(i16vec4) Load 949 - 951: 17(ivec4) Load 19(ballot) - 952: 27(i16vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 950 951 - 953: 103(ptr) AccessChain 37(data) 948 58 - Store 953 952 - 954: 6(int) Load 8(invocation) - 955: 98(ptr) AccessChain 37(data) 39 58 40 - 956: 26(int16_t) Load 955 - 957: 17(ivec4) Load 19(ballot) - 958: 26(int16_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 956 957 - 959: 98(ptr) AccessChain 37(data) 954 58 40 - Store 959 958 - 960: 6(int) Load 8(invocation) - 961: 103(ptr) AccessChain 37(data) 45 58 - 962: 27(i16vec4) Load 961 - 963:102(i16vec2) VectorShuffle 962 962 0 1 - 964: 17(ivec4) Load 19(ballot) - 965:102(i16vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 963 964 - 966: 103(ptr) AccessChain 37(data) 960 58 - 967: 27(i16vec4) Load 966 - 968: 27(i16vec4) VectorShuffle 967 965 4 5 2 3 - Store 966 968 - 969: 6(int) Load 8(invocation) - 970: 103(ptr) AccessChain 37(data) 52 58 - 971: 27(i16vec4) Load 970 - 972:108(i16vec3) VectorShuffle 971 971 0 1 2 - 973: 17(ivec4) Load 19(ballot) - 974:108(i16vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 972 973 - 975: 103(ptr) AccessChain 37(data) 969 58 + 935:102(i16vec2) GroupNonUniformIMul 177 PartitionedReduceNV 933 934 + 936: 98(ptr) AccessChain 37(data) 930 58 40 + 937: 26(int16_t) CompositeExtract 935 0 + Store 936 937 + 938: 98(ptr) AccessChain 37(data) 930 58 188 + 939: 26(int16_t) CompositeExtract 935 1 + Store 938 939 + 940: 6(int) Load 8(invocation) + 941: 103(ptr) AccessChain 37(data) 52 58 + 942: 27(i16vec4) Load 941 + 943:108(i16vec3) VectorShuffle 942 942 0 1 2 + 944: 17(ivec4) Load 19(ballot) + 945:108(i16vec3) GroupNonUniformIMul 177 PartitionedReduceNV 943 944 + 946: 98(ptr) AccessChain 37(data) 940 58 40 + 947: 26(int16_t) CompositeExtract 945 0 + Store 946 947 + 948: 98(ptr) AccessChain 37(data) 940 58 188 + 949: 26(int16_t) CompositeExtract 945 1 + Store 948 949 + 950: 98(ptr) AccessChain 37(data) 940 58 201 + 951: 26(int16_t) CompositeExtract 945 2 + Store 950 951 + 952: 6(int) Load 8(invocation) + 953: 103(ptr) AccessChain 37(data) 58 58 + 954: 27(i16vec4) Load 953 + 955: 17(ivec4) Load 19(ballot) + 956: 27(i16vec4) GroupNonUniformIMul 177 PartitionedReduceNV 954 955 + 957: 103(ptr) AccessChain 37(data) 952 58 + Store 957 956 + 958: 6(int) Load 8(invocation) + 959: 98(ptr) AccessChain 37(data) 39 58 40 + 960: 26(int16_t) Load 959 + 961: 17(ivec4) Load 19(ballot) + 962: 26(int16_t) GroupNonUniformUMin 177 PartitionedReduceNV 960 961 + 963: 98(ptr) AccessChain 37(data) 958 58 40 + Store 963 962 + 964: 6(int) Load 8(invocation) + 965: 103(ptr) AccessChain 37(data) 45 58 + 966: 27(i16vec4) Load 965 + 967:102(i16vec2) VectorShuffle 966 966 0 1 + 968: 17(ivec4) Load 19(ballot) + 969:102(i16vec2) GroupNonUniformUMin 177 PartitionedReduceNV 967 968 + 970: 98(ptr) AccessChain 37(data) 964 58 40 + 971: 26(int16_t) CompositeExtract 969 0 + Store 970 971 + 972: 98(ptr) AccessChain 37(data) 964 58 188 + 973: 26(int16_t) CompositeExtract 969 1 + Store 972 973 + 974: 6(int) Load 8(invocation) + 975: 103(ptr) AccessChain 37(data) 52 58 976: 27(i16vec4) Load 975 - 977: 27(i16vec4) VectorShuffle 976 974 4 5 6 3 - Store 975 977 - 978: 6(int) Load 8(invocation) - 979: 103(ptr) AccessChain 37(data) 58 58 - 980: 27(i16vec4) Load 979 - 981: 17(ivec4) Load 19(ballot) - 982: 27(i16vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 980 981 - 983: 103(ptr) AccessChain 37(data) 978 58 - Store 983 982 - 984: 6(int) Load 8(invocation) - 985: 98(ptr) AccessChain 37(data) 39 58 40 - 986: 26(int16_t) Load 985 - 987: 17(ivec4) Load 19(ballot) - 988: 26(int16_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 986 987 - 989: 98(ptr) AccessChain 37(data) 984 58 40 - Store 989 988 - 990: 6(int) Load 8(invocation) - 991: 103(ptr) AccessChain 37(data) 45 58 - 992: 27(i16vec4) Load 991 - 993:102(i16vec2) VectorShuffle 992 992 0 1 - 994: 17(ivec4) Load 19(ballot) - 995:102(i16vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 993 994 - 996: 103(ptr) AccessChain 37(data) 990 58 - 997: 27(i16vec4) Load 996 - 998: 27(i16vec4) VectorShuffle 997 995 4 5 2 3 - Store 996 998 - 999: 6(int) Load 8(invocation) - 1000: 103(ptr) AccessChain 37(data) 52 58 - 1001: 27(i16vec4) Load 1000 - 1002:108(i16vec3) VectorShuffle 1001 1001 0 1 2 - 1003: 17(ivec4) Load 19(ballot) - 1004:108(i16vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1002 1003 - 1005: 103(ptr) AccessChain 37(data) 999 58 - 1006: 27(i16vec4) Load 1005 - 1007: 27(i16vec4) VectorShuffle 1006 1004 4 5 6 3 - Store 1005 1007 + 977:108(i16vec3) VectorShuffle 976 976 0 1 2 + 978: 17(ivec4) Load 19(ballot) + 979:108(i16vec3) GroupNonUniformUMin 177 PartitionedReduceNV 977 978 + 980: 98(ptr) AccessChain 37(data) 974 58 40 + 981: 26(int16_t) CompositeExtract 979 0 + Store 980 981 + 982: 98(ptr) AccessChain 37(data) 974 58 188 + 983: 26(int16_t) CompositeExtract 979 1 + Store 982 983 + 984: 98(ptr) AccessChain 37(data) 974 58 201 + 985: 26(int16_t) CompositeExtract 979 2 + Store 984 985 + 986: 6(int) Load 8(invocation) + 987: 103(ptr) AccessChain 37(data) 58 58 + 988: 27(i16vec4) Load 987 + 989: 17(ivec4) Load 19(ballot) + 990: 27(i16vec4) GroupNonUniformUMin 177 PartitionedReduceNV 988 989 + 991: 103(ptr) AccessChain 37(data) 986 58 + Store 991 990 + 992: 6(int) Load 8(invocation) + 993: 98(ptr) AccessChain 37(data) 39 58 40 + 994: 26(int16_t) Load 993 + 995: 17(ivec4) Load 19(ballot) + 996: 26(int16_t) GroupNonUniformUMax 177 PartitionedReduceNV 994 995 + 997: 98(ptr) AccessChain 37(data) 992 58 40 + Store 997 996 + 998: 6(int) Load 8(invocation) + 999: 103(ptr) AccessChain 37(data) 45 58 + 1000: 27(i16vec4) Load 999 + 1001:102(i16vec2) VectorShuffle 1000 1000 0 1 + 1002: 17(ivec4) Load 19(ballot) + 1003:102(i16vec2) GroupNonUniformUMax 177 PartitionedReduceNV 1001 1002 + 1004: 98(ptr) AccessChain 37(data) 998 58 40 + 1005: 26(int16_t) CompositeExtract 1003 0 + Store 1004 1005 + 1006: 98(ptr) AccessChain 37(data) 998 58 188 + 1007: 26(int16_t) CompositeExtract 1003 1 + Store 1006 1007 1008: 6(int) Load 8(invocation) - 1009: 103(ptr) AccessChain 37(data) 58 58 + 1009: 103(ptr) AccessChain 37(data) 52 58 1010: 27(i16vec4) Load 1009 - 1011: 17(ivec4) Load 19(ballot) - 1012: 27(i16vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1010 1011 - 1013: 103(ptr) AccessChain 37(data) 1008 58 - Store 1013 1012 - 1014: 6(int) Load 8(invocation) - 1015: 117(ptr) AccessChain 37(data) 39 116 40 - 1016: 28(int64_t) Load 1015 - 1017: 17(ivec4) Load 19(ballot) - 1018: 28(int64_t) GroupNonUniformIAdd 177 PartitionedReduceNV 1016 1017 - 1019: 117(ptr) AccessChain 37(data) 1014 116 40 - Store 1019 1018 + 1011:108(i16vec3) VectorShuffle 1010 1010 0 1 2 + 1012: 17(ivec4) Load 19(ballot) + 1013:108(i16vec3) GroupNonUniformUMax 177 PartitionedReduceNV 1011 1012 + 1014: 98(ptr) AccessChain 37(data) 1008 58 40 + 1015: 26(int16_t) CompositeExtract 1013 0 + Store 1014 1015 + 1016: 98(ptr) AccessChain 37(data) 1008 58 188 + 1017: 26(int16_t) CompositeExtract 1013 1 + Store 1016 1017 + 1018: 98(ptr) AccessChain 37(data) 1008 58 201 + 1019: 26(int16_t) CompositeExtract 1013 2 + Store 1018 1019 1020: 6(int) Load 8(invocation) - 1021: 122(ptr) AccessChain 37(data) 45 116 - 1022: 29(i64vec4) Load 1021 - 1023:121(i64vec2) VectorShuffle 1022 1022 0 1 - 1024: 17(ivec4) Load 19(ballot) - 1025:121(i64vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 1023 1024 - 1026: 122(ptr) AccessChain 37(data) 1020 116 - 1027: 29(i64vec4) Load 1026 - 1028: 29(i64vec4) VectorShuffle 1027 1025 4 5 2 3 - Store 1026 1028 - 1029: 6(int) Load 8(invocation) - 1030: 122(ptr) AccessChain 37(data) 52 116 - 1031: 29(i64vec4) Load 1030 - 1032:127(i64vec3) VectorShuffle 1031 1031 0 1 2 - 1033: 17(ivec4) Load 19(ballot) - 1034:127(i64vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 1032 1033 - 1035: 122(ptr) AccessChain 37(data) 1029 116 - 1036: 29(i64vec4) Load 1035 - 1037: 29(i64vec4) VectorShuffle 1036 1034 4 5 6 3 - Store 1035 1037 - 1038: 6(int) Load 8(invocation) - 1039: 122(ptr) AccessChain 37(data) 58 116 - 1040: 29(i64vec4) Load 1039 - 1041: 17(ivec4) Load 19(ballot) - 1042: 29(i64vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 1040 1041 - 1043: 122(ptr) AccessChain 37(data) 1038 116 - Store 1043 1042 - 1044: 6(int) Load 8(invocation) - 1045: 117(ptr) AccessChain 37(data) 39 116 40 - 1046: 28(int64_t) Load 1045 - 1047: 17(ivec4) Load 19(ballot) - 1048: 28(int64_t) GroupNonUniformIMul 177 PartitionedReduceNV 1046 1047 - 1049: 117(ptr) AccessChain 37(data) 1044 116 40 - Store 1049 1048 - 1050: 6(int) Load 8(invocation) - 1051: 122(ptr) AccessChain 37(data) 45 116 - 1052: 29(i64vec4) Load 1051 - 1053:121(i64vec2) VectorShuffle 1052 1052 0 1 - 1054: 17(ivec4) Load 19(ballot) - 1055:121(i64vec2) GroupNonUniformIMul 177 PartitionedReduceNV 1053 1054 - 1056: 122(ptr) AccessChain 37(data) 1050 116 - 1057: 29(i64vec4) Load 1056 - 1058: 29(i64vec4) VectorShuffle 1057 1055 4 5 2 3 - Store 1056 1058 - 1059: 6(int) Load 8(invocation) - 1060: 122(ptr) AccessChain 37(data) 52 116 - 1061: 29(i64vec4) Load 1060 - 1062:127(i64vec3) VectorShuffle 1061 1061 0 1 2 + 1021: 103(ptr) AccessChain 37(data) 58 58 + 1022: 27(i16vec4) Load 1021 + 1023: 17(ivec4) Load 19(ballot) + 1024: 27(i16vec4) GroupNonUniformUMax 177 PartitionedReduceNV 1022 1023 + 1025: 103(ptr) AccessChain 37(data) 1020 58 + Store 1025 1024 + 1026: 6(int) Load 8(invocation) + 1027: 98(ptr) AccessChain 37(data) 39 58 40 + 1028: 26(int16_t) Load 1027 + 1029: 17(ivec4) Load 19(ballot) + 1030: 26(int16_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1028 1029 + 1031: 98(ptr) AccessChain 37(data) 1026 58 40 + Store 1031 1030 + 1032: 6(int) Load 8(invocation) + 1033: 103(ptr) AccessChain 37(data) 45 58 + 1034: 27(i16vec4) Load 1033 + 1035:102(i16vec2) VectorShuffle 1034 1034 0 1 + 1036: 17(ivec4) Load 19(ballot) + 1037:102(i16vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1035 1036 + 1038: 98(ptr) AccessChain 37(data) 1032 58 40 + 1039: 26(int16_t) CompositeExtract 1037 0 + Store 1038 1039 + 1040: 98(ptr) AccessChain 37(data) 1032 58 188 + 1041: 26(int16_t) CompositeExtract 1037 1 + Store 1040 1041 + 1042: 6(int) Load 8(invocation) + 1043: 103(ptr) AccessChain 37(data) 52 58 + 1044: 27(i16vec4) Load 1043 + 1045:108(i16vec3) VectorShuffle 1044 1044 0 1 2 + 1046: 17(ivec4) Load 19(ballot) + 1047:108(i16vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1045 1046 + 1048: 98(ptr) AccessChain 37(data) 1042 58 40 + 1049: 26(int16_t) CompositeExtract 1047 0 + Store 1048 1049 + 1050: 98(ptr) AccessChain 37(data) 1042 58 188 + 1051: 26(int16_t) CompositeExtract 1047 1 + Store 1050 1051 + 1052: 98(ptr) AccessChain 37(data) 1042 58 201 + 1053: 26(int16_t) CompositeExtract 1047 2 + Store 1052 1053 + 1054: 6(int) Load 8(invocation) + 1055: 103(ptr) AccessChain 37(data) 58 58 + 1056: 27(i16vec4) Load 1055 + 1057: 17(ivec4) Load 19(ballot) + 1058: 27(i16vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1056 1057 + 1059: 103(ptr) AccessChain 37(data) 1054 58 + Store 1059 1058 + 1060: 6(int) Load 8(invocation) + 1061: 98(ptr) AccessChain 37(data) 39 58 40 + 1062: 26(int16_t) Load 1061 1063: 17(ivec4) Load 19(ballot) - 1064:127(i64vec3) GroupNonUniformIMul 177 PartitionedReduceNV 1062 1063 - 1065: 122(ptr) AccessChain 37(data) 1059 116 - 1066: 29(i64vec4) Load 1065 - 1067: 29(i64vec4) VectorShuffle 1066 1064 4 5 6 3 - Store 1065 1067 - 1068: 6(int) Load 8(invocation) - 1069: 122(ptr) AccessChain 37(data) 58 116 - 1070: 29(i64vec4) Load 1069 - 1071: 17(ivec4) Load 19(ballot) - 1072: 29(i64vec4) GroupNonUniformIMul 177 PartitionedReduceNV 1070 1071 - 1073: 122(ptr) AccessChain 37(data) 1068 116 - Store 1073 1072 - 1074: 6(int) Load 8(invocation) - 1075: 117(ptr) AccessChain 37(data) 39 116 40 - 1076: 28(int64_t) Load 1075 - 1077: 17(ivec4) Load 19(ballot) - 1078: 28(int64_t) GroupNonUniformSMin 177 PartitionedReduceNV 1076 1077 - 1079: 117(ptr) AccessChain 37(data) 1074 116 40 - Store 1079 1078 - 1080: 6(int) Load 8(invocation) - 1081: 122(ptr) AccessChain 37(data) 45 116 - 1082: 29(i64vec4) Load 1081 - 1083:121(i64vec2) VectorShuffle 1082 1082 0 1 - 1084: 17(ivec4) Load 19(ballot) - 1085:121(i64vec2) GroupNonUniformSMin 177 PartitionedReduceNV 1083 1084 - 1086: 122(ptr) AccessChain 37(data) 1080 116 - 1087: 29(i64vec4) Load 1086 - 1088: 29(i64vec4) VectorShuffle 1087 1085 4 5 2 3 - Store 1086 1088 - 1089: 6(int) Load 8(invocation) - 1090: 122(ptr) AccessChain 37(data) 52 116 - 1091: 29(i64vec4) Load 1090 - 1092:127(i64vec3) VectorShuffle 1091 1091 0 1 2 - 1093: 17(ivec4) Load 19(ballot) - 1094:127(i64vec3) GroupNonUniformSMin 177 PartitionedReduceNV 1092 1093 - 1095: 122(ptr) AccessChain 37(data) 1089 116 - 1096: 29(i64vec4) Load 1095 - 1097: 29(i64vec4) VectorShuffle 1096 1094 4 5 6 3 - Store 1095 1097 - 1098: 6(int) Load 8(invocation) - 1099: 122(ptr) AccessChain 37(data) 58 116 - 1100: 29(i64vec4) Load 1099 - 1101: 17(ivec4) Load 19(ballot) - 1102: 29(i64vec4) GroupNonUniformSMin 177 PartitionedReduceNV 1100 1101 - 1103: 122(ptr) AccessChain 37(data) 1098 116 - Store 1103 1102 - 1104: 6(int) Load 8(invocation) - 1105: 117(ptr) AccessChain 37(data) 39 116 40 - 1106: 28(int64_t) Load 1105 - 1107: 17(ivec4) Load 19(ballot) - 1108: 28(int64_t) GroupNonUniformSMax 177 PartitionedReduceNV 1106 1107 - 1109: 117(ptr) AccessChain 37(data) 1104 116 40 - Store 1109 1108 + 1064: 26(int16_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1062 1063 + 1065: 98(ptr) AccessChain 37(data) 1060 58 40 + Store 1065 1064 + 1066: 6(int) Load 8(invocation) + 1067: 103(ptr) AccessChain 37(data) 45 58 + 1068: 27(i16vec4) Load 1067 + 1069:102(i16vec2) VectorShuffle 1068 1068 0 1 + 1070: 17(ivec4) Load 19(ballot) + 1071:102(i16vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1069 1070 + 1072: 98(ptr) AccessChain 37(data) 1066 58 40 + 1073: 26(int16_t) CompositeExtract 1071 0 + Store 1072 1073 + 1074: 98(ptr) AccessChain 37(data) 1066 58 188 + 1075: 26(int16_t) CompositeExtract 1071 1 + Store 1074 1075 + 1076: 6(int) Load 8(invocation) + 1077: 103(ptr) AccessChain 37(data) 52 58 + 1078: 27(i16vec4) Load 1077 + 1079:108(i16vec3) VectorShuffle 1078 1078 0 1 2 + 1080: 17(ivec4) Load 19(ballot) + 1081:108(i16vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1079 1080 + 1082: 98(ptr) AccessChain 37(data) 1076 58 40 + 1083: 26(int16_t) CompositeExtract 1081 0 + Store 1082 1083 + 1084: 98(ptr) AccessChain 37(data) 1076 58 188 + 1085: 26(int16_t) CompositeExtract 1081 1 + Store 1084 1085 + 1086: 98(ptr) AccessChain 37(data) 1076 58 201 + 1087: 26(int16_t) CompositeExtract 1081 2 + Store 1086 1087 + 1088: 6(int) Load 8(invocation) + 1089: 103(ptr) AccessChain 37(data) 58 58 + 1090: 27(i16vec4) Load 1089 + 1091: 17(ivec4) Load 19(ballot) + 1092: 27(i16vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1090 1091 + 1093: 103(ptr) AccessChain 37(data) 1088 58 + Store 1093 1092 + 1094: 6(int) Load 8(invocation) + 1095: 98(ptr) AccessChain 37(data) 39 58 40 + 1096: 26(int16_t) Load 1095 + 1097: 17(ivec4) Load 19(ballot) + 1098: 26(int16_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1096 1097 + 1099: 98(ptr) AccessChain 37(data) 1094 58 40 + Store 1099 1098 + 1100: 6(int) Load 8(invocation) + 1101: 103(ptr) AccessChain 37(data) 45 58 + 1102: 27(i16vec4) Load 1101 + 1103:102(i16vec2) VectorShuffle 1102 1102 0 1 + 1104: 17(ivec4) Load 19(ballot) + 1105:102(i16vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1103 1104 + 1106: 98(ptr) AccessChain 37(data) 1100 58 40 + 1107: 26(int16_t) CompositeExtract 1105 0 + Store 1106 1107 + 1108: 98(ptr) AccessChain 37(data) 1100 58 188 + 1109: 26(int16_t) CompositeExtract 1105 1 + Store 1108 1109 1110: 6(int) Load 8(invocation) - 1111: 122(ptr) AccessChain 37(data) 45 116 - 1112: 29(i64vec4) Load 1111 - 1113:121(i64vec2) VectorShuffle 1112 1112 0 1 + 1111: 103(ptr) AccessChain 37(data) 52 58 + 1112: 27(i16vec4) Load 1111 + 1113:108(i16vec3) VectorShuffle 1112 1112 0 1 2 1114: 17(ivec4) Load 19(ballot) - 1115:121(i64vec2) GroupNonUniformSMax 177 PartitionedReduceNV 1113 1114 - 1116: 122(ptr) AccessChain 37(data) 1110 116 - 1117: 29(i64vec4) Load 1116 - 1118: 29(i64vec4) VectorShuffle 1117 1115 4 5 2 3 - Store 1116 1118 - 1119: 6(int) Load 8(invocation) - 1120: 122(ptr) AccessChain 37(data) 52 116 - 1121: 29(i64vec4) Load 1120 - 1122:127(i64vec3) VectorShuffle 1121 1121 0 1 2 - 1123: 17(ivec4) Load 19(ballot) - 1124:127(i64vec3) GroupNonUniformSMax 177 PartitionedReduceNV 1122 1123 - 1125: 122(ptr) AccessChain 37(data) 1119 116 - 1126: 29(i64vec4) Load 1125 - 1127: 29(i64vec4) VectorShuffle 1126 1124 4 5 6 3 - Store 1125 1127 + 1115:108(i16vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1113 1114 + 1116: 98(ptr) AccessChain 37(data) 1110 58 40 + 1117: 26(int16_t) CompositeExtract 1115 0 + Store 1116 1117 + 1118: 98(ptr) AccessChain 37(data) 1110 58 188 + 1119: 26(int16_t) CompositeExtract 1115 1 + Store 1118 1119 + 1120: 98(ptr) AccessChain 37(data) 1110 58 201 + 1121: 26(int16_t) CompositeExtract 1115 2 + Store 1120 1121 + 1122: 6(int) Load 8(invocation) + 1123: 103(ptr) AccessChain 37(data) 58 58 + 1124: 27(i16vec4) Load 1123 + 1125: 17(ivec4) Load 19(ballot) + 1126: 27(i16vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1124 1125 + 1127: 103(ptr) AccessChain 37(data) 1122 58 + Store 1127 1126 1128: 6(int) Load 8(invocation) - 1129: 122(ptr) AccessChain 37(data) 58 116 - 1130: 29(i64vec4) Load 1129 + 1129: 117(ptr) AccessChain 37(data) 39 116 40 + 1130: 28(int64_t) Load 1129 1131: 17(ivec4) Load 19(ballot) - 1132: 29(i64vec4) GroupNonUniformSMax 177 PartitionedReduceNV 1130 1131 - 1133: 122(ptr) AccessChain 37(data) 1128 116 + 1132: 28(int64_t) GroupNonUniformIAdd 177 PartitionedReduceNV 1130 1131 + 1133: 117(ptr) AccessChain 37(data) 1128 116 40 Store 1133 1132 1134: 6(int) Load 8(invocation) - 1135: 117(ptr) AccessChain 37(data) 39 116 40 - 1136: 28(int64_t) Load 1135 - 1137: 17(ivec4) Load 19(ballot) - 1138: 28(int64_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1136 1137 - 1139: 117(ptr) AccessChain 37(data) 1134 116 40 - Store 1139 1138 - 1140: 6(int) Load 8(invocation) - 1141: 122(ptr) AccessChain 37(data) 45 116 - 1142: 29(i64vec4) Load 1141 - 1143:121(i64vec2) VectorShuffle 1142 1142 0 1 - 1144: 17(ivec4) Load 19(ballot) - 1145:121(i64vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1143 1144 - 1146: 122(ptr) AccessChain 37(data) 1140 116 - 1147: 29(i64vec4) Load 1146 - 1148: 29(i64vec4) VectorShuffle 1147 1145 4 5 2 3 - Store 1146 1148 - 1149: 6(int) Load 8(invocation) - 1150: 122(ptr) AccessChain 37(data) 52 116 - 1151: 29(i64vec4) Load 1150 - 1152:127(i64vec3) VectorShuffle 1151 1151 0 1 2 - 1153: 17(ivec4) Load 19(ballot) - 1154:127(i64vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1152 1153 - 1155: 122(ptr) AccessChain 37(data) 1149 116 - 1156: 29(i64vec4) Load 1155 - 1157: 29(i64vec4) VectorShuffle 1156 1154 4 5 6 3 - Store 1155 1157 - 1158: 6(int) Load 8(invocation) - 1159: 122(ptr) AccessChain 37(data) 58 116 - 1160: 29(i64vec4) Load 1159 - 1161: 17(ivec4) Load 19(ballot) - 1162: 29(i64vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1160 1161 - 1163: 122(ptr) AccessChain 37(data) 1158 116 - Store 1163 1162 - 1164: 6(int) Load 8(invocation) - 1165: 117(ptr) AccessChain 37(data) 39 116 40 - 1166: 28(int64_t) Load 1165 - 1167: 17(ivec4) Load 19(ballot) - 1168: 28(int64_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1166 1167 - 1169: 117(ptr) AccessChain 37(data) 1164 116 40 - Store 1169 1168 - 1170: 6(int) Load 8(invocation) - 1171: 122(ptr) AccessChain 37(data) 45 116 - 1172: 29(i64vec4) Load 1171 - 1173:121(i64vec2) VectorShuffle 1172 1172 0 1 - 1174: 17(ivec4) Load 19(ballot) - 1175:121(i64vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1173 1174 - 1176: 122(ptr) AccessChain 37(data) 1170 116 - 1177: 29(i64vec4) Load 1176 - 1178: 29(i64vec4) VectorShuffle 1177 1175 4 5 2 3 - Store 1176 1178 - 1179: 6(int) Load 8(invocation) - 1180: 122(ptr) AccessChain 37(data) 52 116 - 1181: 29(i64vec4) Load 1180 - 1182:127(i64vec3) VectorShuffle 1181 1181 0 1 2 - 1183: 17(ivec4) Load 19(ballot) - 1184:127(i64vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1182 1183 - 1185: 122(ptr) AccessChain 37(data) 1179 116 - 1186: 29(i64vec4) Load 1185 - 1187: 29(i64vec4) VectorShuffle 1186 1184 4 5 6 3 - Store 1185 1187 - 1188: 6(int) Load 8(invocation) - 1189: 122(ptr) AccessChain 37(data) 58 116 - 1190: 29(i64vec4) Load 1189 - 1191: 17(ivec4) Load 19(ballot) - 1192: 29(i64vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1190 1191 - 1193: 122(ptr) AccessChain 37(data) 1188 116 - Store 1193 1192 - 1194: 6(int) Load 8(invocation) - 1195: 117(ptr) AccessChain 37(data) 39 116 40 - 1196: 28(int64_t) Load 1195 - 1197: 17(ivec4) Load 19(ballot) - 1198: 28(int64_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1196 1197 - 1199: 117(ptr) AccessChain 37(data) 1194 116 40 - Store 1199 1198 - 1200: 6(int) Load 8(invocation) - 1201: 122(ptr) AccessChain 37(data) 45 116 - 1202: 29(i64vec4) Load 1201 - 1203:121(i64vec2) VectorShuffle 1202 1202 0 1 - 1204: 17(ivec4) Load 19(ballot) - 1205:121(i64vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1203 1204 - 1206: 122(ptr) AccessChain 37(data) 1200 116 - 1207: 29(i64vec4) Load 1206 - 1208: 29(i64vec4) VectorShuffle 1207 1205 4 5 2 3 - Store 1206 1208 - 1209: 6(int) Load 8(invocation) - 1210: 122(ptr) AccessChain 37(data) 52 116 - 1211: 29(i64vec4) Load 1210 - 1212:127(i64vec3) VectorShuffle 1211 1211 0 1 2 - 1213: 17(ivec4) Load 19(ballot) - 1214:127(i64vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1212 1213 - 1215: 122(ptr) AccessChain 37(data) 1209 116 - 1216: 29(i64vec4) Load 1215 - 1217: 29(i64vec4) VectorShuffle 1216 1214 4 5 6 3 - Store 1215 1217 - 1218: 6(int) Load 8(invocation) - 1219: 122(ptr) AccessChain 37(data) 58 116 - 1220: 29(i64vec4) Load 1219 - 1221: 17(ivec4) Load 19(ballot) - 1222: 29(i64vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1220 1221 - 1223: 122(ptr) AccessChain 37(data) 1218 116 - Store 1223 1222 + 1135: 122(ptr) AccessChain 37(data) 45 116 + 1136: 29(i64vec4) Load 1135 + 1137:121(i64vec2) VectorShuffle 1136 1136 0 1 + 1138: 17(ivec4) Load 19(ballot) + 1139:121(i64vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 1137 1138 + 1140: 117(ptr) AccessChain 37(data) 1134 116 40 + 1141: 28(int64_t) CompositeExtract 1139 0 + Store 1140 1141 + 1142: 117(ptr) AccessChain 37(data) 1134 116 188 + 1143: 28(int64_t) CompositeExtract 1139 1 + Store 1142 1143 + 1144: 6(int) Load 8(invocation) + 1145: 122(ptr) AccessChain 37(data) 52 116 + 1146: 29(i64vec4) Load 1145 + 1147:127(i64vec3) VectorShuffle 1146 1146 0 1 2 + 1148: 17(ivec4) Load 19(ballot) + 1149:127(i64vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 1147 1148 + 1150: 117(ptr) AccessChain 37(data) 1144 116 40 + 1151: 28(int64_t) CompositeExtract 1149 0 + Store 1150 1151 + 1152: 117(ptr) AccessChain 37(data) 1144 116 188 + 1153: 28(int64_t) CompositeExtract 1149 1 + Store 1152 1153 + 1154: 117(ptr) AccessChain 37(data) 1144 116 201 + 1155: 28(int64_t) CompositeExtract 1149 2 + Store 1154 1155 + 1156: 6(int) Load 8(invocation) + 1157: 122(ptr) AccessChain 37(data) 58 116 + 1158: 29(i64vec4) Load 1157 + 1159: 17(ivec4) Load 19(ballot) + 1160: 29(i64vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 1158 1159 + 1161: 122(ptr) AccessChain 37(data) 1156 116 + Store 1161 1160 + 1162: 6(int) Load 8(invocation) + 1163: 117(ptr) AccessChain 37(data) 39 116 40 + 1164: 28(int64_t) Load 1163 + 1165: 17(ivec4) Load 19(ballot) + 1166: 28(int64_t) GroupNonUniformIMul 177 PartitionedReduceNV 1164 1165 + 1167: 117(ptr) AccessChain 37(data) 1162 116 40 + Store 1167 1166 + 1168: 6(int) Load 8(invocation) + 1169: 122(ptr) AccessChain 37(data) 45 116 + 1170: 29(i64vec4) Load 1169 + 1171:121(i64vec2) VectorShuffle 1170 1170 0 1 + 1172: 17(ivec4) Load 19(ballot) + 1173:121(i64vec2) GroupNonUniformIMul 177 PartitionedReduceNV 1171 1172 + 1174: 117(ptr) AccessChain 37(data) 1168 116 40 + 1175: 28(int64_t) CompositeExtract 1173 0 + Store 1174 1175 + 1176: 117(ptr) AccessChain 37(data) 1168 116 188 + 1177: 28(int64_t) CompositeExtract 1173 1 + Store 1176 1177 + 1178: 6(int) Load 8(invocation) + 1179: 122(ptr) AccessChain 37(data) 52 116 + 1180: 29(i64vec4) Load 1179 + 1181:127(i64vec3) VectorShuffle 1180 1180 0 1 2 + 1182: 17(ivec4) Load 19(ballot) + 1183:127(i64vec3) GroupNonUniformIMul 177 PartitionedReduceNV 1181 1182 + 1184: 117(ptr) AccessChain 37(data) 1178 116 40 + 1185: 28(int64_t) CompositeExtract 1183 0 + Store 1184 1185 + 1186: 117(ptr) AccessChain 37(data) 1178 116 188 + 1187: 28(int64_t) CompositeExtract 1183 1 + Store 1186 1187 + 1188: 117(ptr) AccessChain 37(data) 1178 116 201 + 1189: 28(int64_t) CompositeExtract 1183 2 + Store 1188 1189 + 1190: 6(int) Load 8(invocation) + 1191: 122(ptr) AccessChain 37(data) 58 116 + 1192: 29(i64vec4) Load 1191 + 1193: 17(ivec4) Load 19(ballot) + 1194: 29(i64vec4) GroupNonUniformIMul 177 PartitionedReduceNV 1192 1193 + 1195: 122(ptr) AccessChain 37(data) 1190 116 + Store 1195 1194 + 1196: 6(int) Load 8(invocation) + 1197: 117(ptr) AccessChain 37(data) 39 116 40 + 1198: 28(int64_t) Load 1197 + 1199: 17(ivec4) Load 19(ballot) + 1200: 28(int64_t) GroupNonUniformSMin 177 PartitionedReduceNV 1198 1199 + 1201: 117(ptr) AccessChain 37(data) 1196 116 40 + Store 1201 1200 + 1202: 6(int) Load 8(invocation) + 1203: 122(ptr) AccessChain 37(data) 45 116 + 1204: 29(i64vec4) Load 1203 + 1205:121(i64vec2) VectorShuffle 1204 1204 0 1 + 1206: 17(ivec4) Load 19(ballot) + 1207:121(i64vec2) GroupNonUniformSMin 177 PartitionedReduceNV 1205 1206 + 1208: 117(ptr) AccessChain 37(data) 1202 116 40 + 1209: 28(int64_t) CompositeExtract 1207 0 + Store 1208 1209 + 1210: 117(ptr) AccessChain 37(data) 1202 116 188 + 1211: 28(int64_t) CompositeExtract 1207 1 + Store 1210 1211 + 1212: 6(int) Load 8(invocation) + 1213: 122(ptr) AccessChain 37(data) 52 116 + 1214: 29(i64vec4) Load 1213 + 1215:127(i64vec3) VectorShuffle 1214 1214 0 1 2 + 1216: 17(ivec4) Load 19(ballot) + 1217:127(i64vec3) GroupNonUniformSMin 177 PartitionedReduceNV 1215 1216 + 1218: 117(ptr) AccessChain 37(data) 1212 116 40 + 1219: 28(int64_t) CompositeExtract 1217 0 + Store 1218 1219 + 1220: 117(ptr) AccessChain 37(data) 1212 116 188 + 1221: 28(int64_t) CompositeExtract 1217 1 + Store 1220 1221 + 1222: 117(ptr) AccessChain 37(data) 1212 116 201 + 1223: 28(int64_t) CompositeExtract 1217 2 + Store 1222 1223 1224: 6(int) Load 8(invocation) - 1225: 136(ptr) AccessChain 37(data) 39 135 40 - 1226: 30(int64_t) Load 1225 + 1225: 122(ptr) AccessChain 37(data) 58 116 + 1226: 29(i64vec4) Load 1225 1227: 17(ivec4) Load 19(ballot) - 1228: 30(int64_t) GroupNonUniformIAdd 177 PartitionedReduceNV 1226 1227 - 1229: 136(ptr) AccessChain 37(data) 1224 135 40 + 1228: 29(i64vec4) GroupNonUniformSMin 177 PartitionedReduceNV 1226 1227 + 1229: 122(ptr) AccessChain 37(data) 1224 116 Store 1229 1228 1230: 6(int) Load 8(invocation) - 1231: 141(ptr) AccessChain 37(data) 45 135 - 1232: 31(i64vec4) Load 1231 - 1233:140(i64vec2) VectorShuffle 1232 1232 0 1 - 1234: 17(ivec4) Load 19(ballot) - 1235:140(i64vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 1233 1234 - 1236: 141(ptr) AccessChain 37(data) 1230 135 - 1237: 31(i64vec4) Load 1236 - 1238: 31(i64vec4) VectorShuffle 1237 1235 4 5 2 3 - Store 1236 1238 - 1239: 6(int) Load 8(invocation) - 1240: 141(ptr) AccessChain 37(data) 52 135 - 1241: 31(i64vec4) Load 1240 - 1242:146(i64vec3) VectorShuffle 1241 1241 0 1 2 - 1243: 17(ivec4) Load 19(ballot) - 1244:146(i64vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 1242 1243 - 1245: 141(ptr) AccessChain 37(data) 1239 135 - 1246: 31(i64vec4) Load 1245 - 1247: 31(i64vec4) VectorShuffle 1246 1244 4 5 6 3 - Store 1245 1247 - 1248: 6(int) Load 8(invocation) - 1249: 141(ptr) AccessChain 37(data) 58 135 - 1250: 31(i64vec4) Load 1249 - 1251: 17(ivec4) Load 19(ballot) - 1252: 31(i64vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 1250 1251 - 1253: 141(ptr) AccessChain 37(data) 1248 135 - Store 1253 1252 - 1254: 6(int) Load 8(invocation) - 1255: 136(ptr) AccessChain 37(data) 39 135 40 - 1256: 30(int64_t) Load 1255 - 1257: 17(ivec4) Load 19(ballot) - 1258: 30(int64_t) GroupNonUniformIMul 177 PartitionedReduceNV 1256 1257 - 1259: 136(ptr) AccessChain 37(data) 1254 135 40 - Store 1259 1258 - 1260: 6(int) Load 8(invocation) - 1261: 141(ptr) AccessChain 37(data) 45 135 - 1262: 31(i64vec4) Load 1261 - 1263:140(i64vec2) VectorShuffle 1262 1262 0 1 - 1264: 17(ivec4) Load 19(ballot) - 1265:140(i64vec2) GroupNonUniformIMul 177 PartitionedReduceNV 1263 1264 - 1266: 141(ptr) AccessChain 37(data) 1260 135 - 1267: 31(i64vec4) Load 1266 - 1268: 31(i64vec4) VectorShuffle 1267 1265 4 5 2 3 - Store 1266 1268 - 1269: 6(int) Load 8(invocation) - 1270: 141(ptr) AccessChain 37(data) 52 135 - 1271: 31(i64vec4) Load 1270 - 1272:146(i64vec3) VectorShuffle 1271 1271 0 1 2 - 1273: 17(ivec4) Load 19(ballot) - 1274:146(i64vec3) GroupNonUniformIMul 177 PartitionedReduceNV 1272 1273 - 1275: 141(ptr) AccessChain 37(data) 1269 135 - 1276: 31(i64vec4) Load 1275 - 1277: 31(i64vec4) VectorShuffle 1276 1274 4 5 6 3 - Store 1275 1277 - 1278: 6(int) Load 8(invocation) - 1279: 141(ptr) AccessChain 37(data) 58 135 - 1280: 31(i64vec4) Load 1279 - 1281: 17(ivec4) Load 19(ballot) - 1282: 31(i64vec4) GroupNonUniformIMul 177 PartitionedReduceNV 1280 1281 - 1283: 141(ptr) AccessChain 37(data) 1278 135 - Store 1283 1282 - 1284: 6(int) Load 8(invocation) - 1285: 136(ptr) AccessChain 37(data) 39 135 40 - 1286: 30(int64_t) Load 1285 - 1287: 17(ivec4) Load 19(ballot) - 1288: 30(int64_t) GroupNonUniformUMin 177 PartitionedReduceNV 1286 1287 - 1289: 136(ptr) AccessChain 37(data) 1284 135 40 - Store 1289 1288 - 1290: 6(int) Load 8(invocation) - 1291: 141(ptr) AccessChain 37(data) 45 135 - 1292: 31(i64vec4) Load 1291 - 1293:140(i64vec2) VectorShuffle 1292 1292 0 1 - 1294: 17(ivec4) Load 19(ballot) - 1295:140(i64vec2) GroupNonUniformUMin 177 PartitionedReduceNV 1293 1294 - 1296: 141(ptr) AccessChain 37(data) 1290 135 - 1297: 31(i64vec4) Load 1296 - 1298: 31(i64vec4) VectorShuffle 1297 1295 4 5 2 3 - Store 1296 1298 - 1299: 6(int) Load 8(invocation) - 1300: 141(ptr) AccessChain 37(data) 52 135 - 1301: 31(i64vec4) Load 1300 - 1302:146(i64vec3) VectorShuffle 1301 1301 0 1 2 - 1303: 17(ivec4) Load 19(ballot) - 1304:146(i64vec3) GroupNonUniformUMin 177 PartitionedReduceNV 1302 1303 - 1305: 141(ptr) AccessChain 37(data) 1299 135 - 1306: 31(i64vec4) Load 1305 - 1307: 31(i64vec4) VectorShuffle 1306 1304 4 5 6 3 - Store 1305 1307 - 1308: 6(int) Load 8(invocation) - 1309: 141(ptr) AccessChain 37(data) 58 135 - 1310: 31(i64vec4) Load 1309 - 1311: 17(ivec4) Load 19(ballot) - 1312: 31(i64vec4) GroupNonUniformUMin 177 PartitionedReduceNV 1310 1311 - 1313: 141(ptr) AccessChain 37(data) 1308 135 - Store 1313 1312 + 1231: 117(ptr) AccessChain 37(data) 39 116 40 + 1232: 28(int64_t) Load 1231 + 1233: 17(ivec4) Load 19(ballot) + 1234: 28(int64_t) GroupNonUniformSMax 177 PartitionedReduceNV 1232 1233 + 1235: 117(ptr) AccessChain 37(data) 1230 116 40 + Store 1235 1234 + 1236: 6(int) Load 8(invocation) + 1237: 122(ptr) AccessChain 37(data) 45 116 + 1238: 29(i64vec4) Load 1237 + 1239:121(i64vec2) VectorShuffle 1238 1238 0 1 + 1240: 17(ivec4) Load 19(ballot) + 1241:121(i64vec2) GroupNonUniformSMax 177 PartitionedReduceNV 1239 1240 + 1242: 117(ptr) AccessChain 37(data) 1236 116 40 + 1243: 28(int64_t) CompositeExtract 1241 0 + Store 1242 1243 + 1244: 117(ptr) AccessChain 37(data) 1236 116 188 + 1245: 28(int64_t) CompositeExtract 1241 1 + Store 1244 1245 + 1246: 6(int) Load 8(invocation) + 1247: 122(ptr) AccessChain 37(data) 52 116 + 1248: 29(i64vec4) Load 1247 + 1249:127(i64vec3) VectorShuffle 1248 1248 0 1 2 + 1250: 17(ivec4) Load 19(ballot) + 1251:127(i64vec3) GroupNonUniformSMax 177 PartitionedReduceNV 1249 1250 + 1252: 117(ptr) AccessChain 37(data) 1246 116 40 + 1253: 28(int64_t) CompositeExtract 1251 0 + Store 1252 1253 + 1254: 117(ptr) AccessChain 37(data) 1246 116 188 + 1255: 28(int64_t) CompositeExtract 1251 1 + Store 1254 1255 + 1256: 117(ptr) AccessChain 37(data) 1246 116 201 + 1257: 28(int64_t) CompositeExtract 1251 2 + Store 1256 1257 + 1258: 6(int) Load 8(invocation) + 1259: 122(ptr) AccessChain 37(data) 58 116 + 1260: 29(i64vec4) Load 1259 + 1261: 17(ivec4) Load 19(ballot) + 1262: 29(i64vec4) GroupNonUniformSMax 177 PartitionedReduceNV 1260 1261 + 1263: 122(ptr) AccessChain 37(data) 1258 116 + Store 1263 1262 + 1264: 6(int) Load 8(invocation) + 1265: 117(ptr) AccessChain 37(data) 39 116 40 + 1266: 28(int64_t) Load 1265 + 1267: 17(ivec4) Load 19(ballot) + 1268: 28(int64_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1266 1267 + 1269: 117(ptr) AccessChain 37(data) 1264 116 40 + Store 1269 1268 + 1270: 6(int) Load 8(invocation) + 1271: 122(ptr) AccessChain 37(data) 45 116 + 1272: 29(i64vec4) Load 1271 + 1273:121(i64vec2) VectorShuffle 1272 1272 0 1 + 1274: 17(ivec4) Load 19(ballot) + 1275:121(i64vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1273 1274 + 1276: 117(ptr) AccessChain 37(data) 1270 116 40 + 1277: 28(int64_t) CompositeExtract 1275 0 + Store 1276 1277 + 1278: 117(ptr) AccessChain 37(data) 1270 116 188 + 1279: 28(int64_t) CompositeExtract 1275 1 + Store 1278 1279 + 1280: 6(int) Load 8(invocation) + 1281: 122(ptr) AccessChain 37(data) 52 116 + 1282: 29(i64vec4) Load 1281 + 1283:127(i64vec3) VectorShuffle 1282 1282 0 1 2 + 1284: 17(ivec4) Load 19(ballot) + 1285:127(i64vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1283 1284 + 1286: 117(ptr) AccessChain 37(data) 1280 116 40 + 1287: 28(int64_t) CompositeExtract 1285 0 + Store 1286 1287 + 1288: 117(ptr) AccessChain 37(data) 1280 116 188 + 1289: 28(int64_t) CompositeExtract 1285 1 + Store 1288 1289 + 1290: 117(ptr) AccessChain 37(data) 1280 116 201 + 1291: 28(int64_t) CompositeExtract 1285 2 + Store 1290 1291 + 1292: 6(int) Load 8(invocation) + 1293: 122(ptr) AccessChain 37(data) 58 116 + 1294: 29(i64vec4) Load 1293 + 1295: 17(ivec4) Load 19(ballot) + 1296: 29(i64vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1294 1295 + 1297: 122(ptr) AccessChain 37(data) 1292 116 + Store 1297 1296 + 1298: 6(int) Load 8(invocation) + 1299: 117(ptr) AccessChain 37(data) 39 116 40 + 1300: 28(int64_t) Load 1299 + 1301: 17(ivec4) Load 19(ballot) + 1302: 28(int64_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1300 1301 + 1303: 117(ptr) AccessChain 37(data) 1298 116 40 + Store 1303 1302 + 1304: 6(int) Load 8(invocation) + 1305: 122(ptr) AccessChain 37(data) 45 116 + 1306: 29(i64vec4) Load 1305 + 1307:121(i64vec2) VectorShuffle 1306 1306 0 1 + 1308: 17(ivec4) Load 19(ballot) + 1309:121(i64vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1307 1308 + 1310: 117(ptr) AccessChain 37(data) 1304 116 40 + 1311: 28(int64_t) CompositeExtract 1309 0 + Store 1310 1311 + 1312: 117(ptr) AccessChain 37(data) 1304 116 188 + 1313: 28(int64_t) CompositeExtract 1309 1 + Store 1312 1313 1314: 6(int) Load 8(invocation) - 1315: 136(ptr) AccessChain 37(data) 39 135 40 - 1316: 30(int64_t) Load 1315 - 1317: 17(ivec4) Load 19(ballot) - 1318: 30(int64_t) GroupNonUniformUMax 177 PartitionedReduceNV 1316 1317 - 1319: 136(ptr) AccessChain 37(data) 1314 135 40 - Store 1319 1318 - 1320: 6(int) Load 8(invocation) - 1321: 141(ptr) AccessChain 37(data) 45 135 - 1322: 31(i64vec4) Load 1321 - 1323:140(i64vec2) VectorShuffle 1322 1322 0 1 - 1324: 17(ivec4) Load 19(ballot) - 1325:140(i64vec2) GroupNonUniformUMax 177 PartitionedReduceNV 1323 1324 - 1326: 141(ptr) AccessChain 37(data) 1320 135 - 1327: 31(i64vec4) Load 1326 - 1328: 31(i64vec4) VectorShuffle 1327 1325 4 5 2 3 - Store 1326 1328 - 1329: 6(int) Load 8(invocation) - 1330: 141(ptr) AccessChain 37(data) 52 135 - 1331: 31(i64vec4) Load 1330 - 1332:146(i64vec3) VectorShuffle 1331 1331 0 1 2 - 1333: 17(ivec4) Load 19(ballot) - 1334:146(i64vec3) GroupNonUniformUMax 177 PartitionedReduceNV 1332 1333 - 1335: 141(ptr) AccessChain 37(data) 1329 135 - 1336: 31(i64vec4) Load 1335 - 1337: 31(i64vec4) VectorShuffle 1336 1334 4 5 6 3 - Store 1335 1337 + 1315: 122(ptr) AccessChain 37(data) 52 116 + 1316: 29(i64vec4) Load 1315 + 1317:127(i64vec3) VectorShuffle 1316 1316 0 1 2 + 1318: 17(ivec4) Load 19(ballot) + 1319:127(i64vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1317 1318 + 1320: 117(ptr) AccessChain 37(data) 1314 116 40 + 1321: 28(int64_t) CompositeExtract 1319 0 + Store 1320 1321 + 1322: 117(ptr) AccessChain 37(data) 1314 116 188 + 1323: 28(int64_t) CompositeExtract 1319 1 + Store 1322 1323 + 1324: 117(ptr) AccessChain 37(data) 1314 116 201 + 1325: 28(int64_t) CompositeExtract 1319 2 + Store 1324 1325 + 1326: 6(int) Load 8(invocation) + 1327: 122(ptr) AccessChain 37(data) 58 116 + 1328: 29(i64vec4) Load 1327 + 1329: 17(ivec4) Load 19(ballot) + 1330: 29(i64vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1328 1329 + 1331: 122(ptr) AccessChain 37(data) 1326 116 + Store 1331 1330 + 1332: 6(int) Load 8(invocation) + 1333: 117(ptr) AccessChain 37(data) 39 116 40 + 1334: 28(int64_t) Load 1333 + 1335: 17(ivec4) Load 19(ballot) + 1336: 28(int64_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1334 1335 + 1337: 117(ptr) AccessChain 37(data) 1332 116 40 + Store 1337 1336 1338: 6(int) Load 8(invocation) - 1339: 141(ptr) AccessChain 37(data) 58 135 - 1340: 31(i64vec4) Load 1339 - 1341: 17(ivec4) Load 19(ballot) - 1342: 31(i64vec4) GroupNonUniformUMax 177 PartitionedReduceNV 1340 1341 - 1343: 141(ptr) AccessChain 37(data) 1338 135 - Store 1343 1342 - 1344: 6(int) Load 8(invocation) - 1345: 136(ptr) AccessChain 37(data) 39 135 40 - 1346: 30(int64_t) Load 1345 - 1347: 17(ivec4) Load 19(ballot) - 1348: 30(int64_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1346 1347 - 1349: 136(ptr) AccessChain 37(data) 1344 135 40 - Store 1349 1348 - 1350: 6(int) Load 8(invocation) - 1351: 141(ptr) AccessChain 37(data) 45 135 - 1352: 31(i64vec4) Load 1351 - 1353:140(i64vec2) VectorShuffle 1352 1352 0 1 - 1354: 17(ivec4) Load 19(ballot) - 1355:140(i64vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1353 1354 - 1356: 141(ptr) AccessChain 37(data) 1350 135 - 1357: 31(i64vec4) Load 1356 - 1358: 31(i64vec4) VectorShuffle 1357 1355 4 5 2 3 - Store 1356 1358 - 1359: 6(int) Load 8(invocation) - 1360: 141(ptr) AccessChain 37(data) 52 135 - 1361: 31(i64vec4) Load 1360 - 1362:146(i64vec3) VectorShuffle 1361 1361 0 1 2 + 1339: 122(ptr) AccessChain 37(data) 45 116 + 1340: 29(i64vec4) Load 1339 + 1341:121(i64vec2) VectorShuffle 1340 1340 0 1 + 1342: 17(ivec4) Load 19(ballot) + 1343:121(i64vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1341 1342 + 1344: 117(ptr) AccessChain 37(data) 1338 116 40 + 1345: 28(int64_t) CompositeExtract 1343 0 + Store 1344 1345 + 1346: 117(ptr) AccessChain 37(data) 1338 116 188 + 1347: 28(int64_t) CompositeExtract 1343 1 + Store 1346 1347 + 1348: 6(int) Load 8(invocation) + 1349: 122(ptr) AccessChain 37(data) 52 116 + 1350: 29(i64vec4) Load 1349 + 1351:127(i64vec3) VectorShuffle 1350 1350 0 1 2 + 1352: 17(ivec4) Load 19(ballot) + 1353:127(i64vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1351 1352 + 1354: 117(ptr) AccessChain 37(data) 1348 116 40 + 1355: 28(int64_t) CompositeExtract 1353 0 + Store 1354 1355 + 1356: 117(ptr) AccessChain 37(data) 1348 116 188 + 1357: 28(int64_t) CompositeExtract 1353 1 + Store 1356 1357 + 1358: 117(ptr) AccessChain 37(data) 1348 116 201 + 1359: 28(int64_t) CompositeExtract 1353 2 + Store 1358 1359 + 1360: 6(int) Load 8(invocation) + 1361: 122(ptr) AccessChain 37(data) 58 116 + 1362: 29(i64vec4) Load 1361 1363: 17(ivec4) Load 19(ballot) - 1364:146(i64vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1362 1363 - 1365: 141(ptr) AccessChain 37(data) 1359 135 - 1366: 31(i64vec4) Load 1365 - 1367: 31(i64vec4) VectorShuffle 1366 1364 4 5 6 3 - Store 1365 1367 - 1368: 6(int) Load 8(invocation) - 1369: 141(ptr) AccessChain 37(data) 58 135 - 1370: 31(i64vec4) Load 1369 - 1371: 17(ivec4) Load 19(ballot) - 1372: 31(i64vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1370 1371 - 1373: 141(ptr) AccessChain 37(data) 1368 135 - Store 1373 1372 - 1374: 6(int) Load 8(invocation) - 1375: 136(ptr) AccessChain 37(data) 39 135 40 - 1376: 30(int64_t) Load 1375 - 1377: 17(ivec4) Load 19(ballot) - 1378: 30(int64_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1376 1377 - 1379: 136(ptr) AccessChain 37(data) 1374 135 40 - Store 1379 1378 - 1380: 6(int) Load 8(invocation) - 1381: 141(ptr) AccessChain 37(data) 45 135 - 1382: 31(i64vec4) Load 1381 - 1383:140(i64vec2) VectorShuffle 1382 1382 0 1 - 1384: 17(ivec4) Load 19(ballot) - 1385:140(i64vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1383 1384 - 1386: 141(ptr) AccessChain 37(data) 1380 135 - 1387: 31(i64vec4) Load 1386 - 1388: 31(i64vec4) VectorShuffle 1387 1385 4 5 2 3 - Store 1386 1388 - 1389: 6(int) Load 8(invocation) - 1390: 141(ptr) AccessChain 37(data) 52 135 - 1391: 31(i64vec4) Load 1390 - 1392:146(i64vec3) VectorShuffle 1391 1391 0 1 2 - 1393: 17(ivec4) Load 19(ballot) - 1394:146(i64vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1392 1393 - 1395: 141(ptr) AccessChain 37(data) 1389 135 + 1364: 29(i64vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1362 1363 + 1365: 122(ptr) AccessChain 37(data) 1360 116 + Store 1365 1364 + 1366: 6(int) Load 8(invocation) + 1367: 136(ptr) AccessChain 37(data) 39 135 40 + 1368: 30(int64_t) Load 1367 + 1369: 17(ivec4) Load 19(ballot) + 1370: 30(int64_t) GroupNonUniformIAdd 177 PartitionedReduceNV 1368 1369 + 1371: 136(ptr) AccessChain 37(data) 1366 135 40 + Store 1371 1370 + 1372: 6(int) Load 8(invocation) + 1373: 141(ptr) AccessChain 37(data) 45 135 + 1374: 31(i64vec4) Load 1373 + 1375:140(i64vec2) VectorShuffle 1374 1374 0 1 + 1376: 17(ivec4) Load 19(ballot) + 1377:140(i64vec2) GroupNonUniformIAdd 177 PartitionedReduceNV 1375 1376 + 1378: 136(ptr) AccessChain 37(data) 1372 135 40 + 1379: 30(int64_t) CompositeExtract 1377 0 + Store 1378 1379 + 1380: 136(ptr) AccessChain 37(data) 1372 135 188 + 1381: 30(int64_t) CompositeExtract 1377 1 + Store 1380 1381 + 1382: 6(int) Load 8(invocation) + 1383: 141(ptr) AccessChain 37(data) 52 135 + 1384: 31(i64vec4) Load 1383 + 1385:146(i64vec3) VectorShuffle 1384 1384 0 1 2 + 1386: 17(ivec4) Load 19(ballot) + 1387:146(i64vec3) GroupNonUniformIAdd 177 PartitionedReduceNV 1385 1386 + 1388: 136(ptr) AccessChain 37(data) 1382 135 40 + 1389: 30(int64_t) CompositeExtract 1387 0 + Store 1388 1389 + 1390: 136(ptr) AccessChain 37(data) 1382 135 188 + 1391: 30(int64_t) CompositeExtract 1387 1 + Store 1390 1391 + 1392: 136(ptr) AccessChain 37(data) 1382 135 201 + 1393: 30(int64_t) CompositeExtract 1387 2 + Store 1392 1393 + 1394: 6(int) Load 8(invocation) + 1395: 141(ptr) AccessChain 37(data) 58 135 1396: 31(i64vec4) Load 1395 - 1397: 31(i64vec4) VectorShuffle 1396 1394 4 5 6 3 - Store 1395 1397 - 1398: 6(int) Load 8(invocation) - 1399: 141(ptr) AccessChain 37(data) 58 135 - 1400: 31(i64vec4) Load 1399 - 1401: 17(ivec4) Load 19(ballot) - 1402: 31(i64vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1400 1401 - 1403: 141(ptr) AccessChain 37(data) 1398 135 - Store 1403 1402 - 1404: 6(int) Load 8(invocation) - 1405: 136(ptr) AccessChain 37(data) 39 135 40 - 1406: 30(int64_t) Load 1405 - 1407: 17(ivec4) Load 19(ballot) - 1408: 30(int64_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1406 1407 - 1409: 136(ptr) AccessChain 37(data) 1404 135 40 - Store 1409 1408 - 1410: 6(int) Load 8(invocation) - 1411: 141(ptr) AccessChain 37(data) 45 135 - 1412: 31(i64vec4) Load 1411 - 1413:140(i64vec2) VectorShuffle 1412 1412 0 1 - 1414: 17(ivec4) Load 19(ballot) - 1415:140(i64vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1413 1414 - 1416: 141(ptr) AccessChain 37(data) 1410 135 - 1417: 31(i64vec4) Load 1416 - 1418: 31(i64vec4) VectorShuffle 1417 1415 4 5 2 3 - Store 1416 1418 - 1419: 6(int) Load 8(invocation) - 1420: 141(ptr) AccessChain 37(data) 52 135 - 1421: 31(i64vec4) Load 1420 - 1422:146(i64vec3) VectorShuffle 1421 1421 0 1 2 - 1423: 17(ivec4) Load 19(ballot) - 1424:146(i64vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1422 1423 - 1425: 141(ptr) AccessChain 37(data) 1419 135 - 1426: 31(i64vec4) Load 1425 - 1427: 31(i64vec4) VectorShuffle 1426 1424 4 5 6 3 - Store 1425 1427 + 1397: 17(ivec4) Load 19(ballot) + 1398: 31(i64vec4) GroupNonUniformIAdd 177 PartitionedReduceNV 1396 1397 + 1399: 141(ptr) AccessChain 37(data) 1394 135 + Store 1399 1398 + 1400: 6(int) Load 8(invocation) + 1401: 136(ptr) AccessChain 37(data) 39 135 40 + 1402: 30(int64_t) Load 1401 + 1403: 17(ivec4) Load 19(ballot) + 1404: 30(int64_t) GroupNonUniformIMul 177 PartitionedReduceNV 1402 1403 + 1405: 136(ptr) AccessChain 37(data) 1400 135 40 + Store 1405 1404 + 1406: 6(int) Load 8(invocation) + 1407: 141(ptr) AccessChain 37(data) 45 135 + 1408: 31(i64vec4) Load 1407 + 1409:140(i64vec2) VectorShuffle 1408 1408 0 1 + 1410: 17(ivec4) Load 19(ballot) + 1411:140(i64vec2) GroupNonUniformIMul 177 PartitionedReduceNV 1409 1410 + 1412: 136(ptr) AccessChain 37(data) 1406 135 40 + 1413: 30(int64_t) CompositeExtract 1411 0 + Store 1412 1413 + 1414: 136(ptr) AccessChain 37(data) 1406 135 188 + 1415: 30(int64_t) CompositeExtract 1411 1 + Store 1414 1415 + 1416: 6(int) Load 8(invocation) + 1417: 141(ptr) AccessChain 37(data) 52 135 + 1418: 31(i64vec4) Load 1417 + 1419:146(i64vec3) VectorShuffle 1418 1418 0 1 2 + 1420: 17(ivec4) Load 19(ballot) + 1421:146(i64vec3) GroupNonUniformIMul 177 PartitionedReduceNV 1419 1420 + 1422: 136(ptr) AccessChain 37(data) 1416 135 40 + 1423: 30(int64_t) CompositeExtract 1421 0 + Store 1422 1423 + 1424: 136(ptr) AccessChain 37(data) 1416 135 188 + 1425: 30(int64_t) CompositeExtract 1421 1 + Store 1424 1425 + 1426: 136(ptr) AccessChain 37(data) 1416 135 201 + 1427: 30(int64_t) CompositeExtract 1421 2 + Store 1426 1427 1428: 6(int) Load 8(invocation) 1429: 141(ptr) AccessChain 37(data) 58 135 1430: 31(i64vec4) Load 1429 1431: 17(ivec4) Load 19(ballot) - 1432: 31(i64vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1430 1431 + 1432: 31(i64vec4) GroupNonUniformIMul 177 PartitionedReduceNV 1430 1431 1433: 141(ptr) AccessChain 37(data) 1428 135 Store 1433 1432 1434: 6(int) Load 8(invocation) - 1435: 155(ptr) AccessChain 37(data) 39 154 40 - 1436:32(float16_t) Load 1435 + 1435: 136(ptr) AccessChain 37(data) 39 135 40 + 1436: 30(int64_t) Load 1435 1437: 17(ivec4) Load 19(ballot) - 1438:32(float16_t) GroupNonUniformFAdd 177 PartitionedReduceNV 1436 1437 - 1439: 155(ptr) AccessChain 37(data) 1434 154 40 + 1438: 30(int64_t) GroupNonUniformUMin 177 PartitionedReduceNV 1436 1437 + 1439: 136(ptr) AccessChain 37(data) 1434 135 40 Store 1439 1438 1440: 6(int) Load 8(invocation) - 1441: 160(ptr) AccessChain 37(data) 45 154 - 1442: 33(f16vec4) Load 1441 - 1443:159(f16vec2) VectorShuffle 1442 1442 0 1 + 1441: 141(ptr) AccessChain 37(data) 45 135 + 1442: 31(i64vec4) Load 1441 + 1443:140(i64vec2) VectorShuffle 1442 1442 0 1 1444: 17(ivec4) Load 19(ballot) - 1445:159(f16vec2) GroupNonUniformFAdd 177 PartitionedReduceNV 1443 1444 - 1446: 160(ptr) AccessChain 37(data) 1440 154 - 1447: 33(f16vec4) Load 1446 - 1448: 33(f16vec4) VectorShuffle 1447 1445 4 5 2 3 - Store 1446 1448 - 1449: 6(int) Load 8(invocation) - 1450: 160(ptr) AccessChain 37(data) 52 154 - 1451: 33(f16vec4) Load 1450 - 1452:165(f16vec3) VectorShuffle 1451 1451 0 1 2 - 1453: 17(ivec4) Load 19(ballot) - 1454:165(f16vec3) GroupNonUniformFAdd 177 PartitionedReduceNV 1452 1453 - 1455: 160(ptr) AccessChain 37(data) 1449 154 - 1456: 33(f16vec4) Load 1455 - 1457: 33(f16vec4) VectorShuffle 1456 1454 4 5 6 3 - Store 1455 1457 - 1458: 6(int) Load 8(invocation) - 1459: 160(ptr) AccessChain 37(data) 58 154 - 1460: 33(f16vec4) Load 1459 - 1461: 17(ivec4) Load 19(ballot) - 1462: 33(f16vec4) GroupNonUniformFAdd 177 PartitionedReduceNV 1460 1461 - 1463: 160(ptr) AccessChain 37(data) 1458 154 - Store 1463 1462 - 1464: 6(int) Load 8(invocation) - 1465: 155(ptr) AccessChain 37(data) 39 154 40 - 1466:32(float16_t) Load 1465 - 1467: 17(ivec4) Load 19(ballot) - 1468:32(float16_t) GroupNonUniformFMul 177 PartitionedReduceNV 1466 1467 - 1469: 155(ptr) AccessChain 37(data) 1464 154 40 - Store 1469 1468 - 1470: 6(int) Load 8(invocation) - 1471: 160(ptr) AccessChain 37(data) 45 154 - 1472: 33(f16vec4) Load 1471 - 1473:159(f16vec2) VectorShuffle 1472 1472 0 1 - 1474: 17(ivec4) Load 19(ballot) - 1475:159(f16vec2) GroupNonUniformFMul 177 PartitionedReduceNV 1473 1474 - 1476: 160(ptr) AccessChain 37(data) 1470 154 - 1477: 33(f16vec4) Load 1476 - 1478: 33(f16vec4) VectorShuffle 1477 1475 4 5 2 3 - Store 1476 1478 - 1479: 6(int) Load 8(invocation) - 1480: 160(ptr) AccessChain 37(data) 52 154 - 1481: 33(f16vec4) Load 1480 - 1482:165(f16vec3) VectorShuffle 1481 1481 0 1 2 - 1483: 17(ivec4) Load 19(ballot) - 1484:165(f16vec3) GroupNonUniformFMul 177 PartitionedReduceNV 1482 1483 - 1485: 160(ptr) AccessChain 37(data) 1479 154 - 1486: 33(f16vec4) Load 1485 - 1487: 33(f16vec4) VectorShuffle 1486 1484 4 5 6 3 - Store 1485 1487 - 1488: 6(int) Load 8(invocation) - 1489: 160(ptr) AccessChain 37(data) 58 154 - 1490: 33(f16vec4) Load 1489 - 1491: 17(ivec4) Load 19(ballot) - 1492: 33(f16vec4) GroupNonUniformFMul 177 PartitionedReduceNV 1490 1491 - 1493: 160(ptr) AccessChain 37(data) 1488 154 - Store 1493 1492 - 1494: 6(int) Load 8(invocation) - 1495: 155(ptr) AccessChain 37(data) 39 154 40 - 1496:32(float16_t) Load 1495 - 1497: 17(ivec4) Load 19(ballot) - 1498:32(float16_t) GroupNonUniformFMin 177 PartitionedReduceNV 1496 1497 - 1499: 155(ptr) AccessChain 37(data) 1494 154 40 - Store 1499 1498 - 1500: 6(int) Load 8(invocation) - 1501: 160(ptr) AccessChain 37(data) 45 154 - 1502: 33(f16vec4) Load 1501 - 1503:159(f16vec2) VectorShuffle 1502 1502 0 1 - 1504: 17(ivec4) Load 19(ballot) - 1505:159(f16vec2) GroupNonUniformFMin 177 PartitionedReduceNV 1503 1504 - 1506: 160(ptr) AccessChain 37(data) 1500 154 - 1507: 33(f16vec4) Load 1506 - 1508: 33(f16vec4) VectorShuffle 1507 1505 4 5 2 3 - Store 1506 1508 - 1509: 6(int) Load 8(invocation) - 1510: 160(ptr) AccessChain 37(data) 52 154 - 1511: 33(f16vec4) Load 1510 - 1512:165(f16vec3) VectorShuffle 1511 1511 0 1 2 - 1513: 17(ivec4) Load 19(ballot) - 1514:165(f16vec3) GroupNonUniformFMin 177 PartitionedReduceNV 1512 1513 - 1515: 160(ptr) AccessChain 37(data) 1509 154 - 1516: 33(f16vec4) Load 1515 - 1517: 33(f16vec4) VectorShuffle 1516 1514 4 5 6 3 - Store 1515 1517 + 1445:140(i64vec2) GroupNonUniformUMin 177 PartitionedReduceNV 1443 1444 + 1446: 136(ptr) AccessChain 37(data) 1440 135 40 + 1447: 30(int64_t) CompositeExtract 1445 0 + Store 1446 1447 + 1448: 136(ptr) AccessChain 37(data) 1440 135 188 + 1449: 30(int64_t) CompositeExtract 1445 1 + Store 1448 1449 + 1450: 6(int) Load 8(invocation) + 1451: 141(ptr) AccessChain 37(data) 52 135 + 1452: 31(i64vec4) Load 1451 + 1453:146(i64vec3) VectorShuffle 1452 1452 0 1 2 + 1454: 17(ivec4) Load 19(ballot) + 1455:146(i64vec3) GroupNonUniformUMin 177 PartitionedReduceNV 1453 1454 + 1456: 136(ptr) AccessChain 37(data) 1450 135 40 + 1457: 30(int64_t) CompositeExtract 1455 0 + Store 1456 1457 + 1458: 136(ptr) AccessChain 37(data) 1450 135 188 + 1459: 30(int64_t) CompositeExtract 1455 1 + Store 1458 1459 + 1460: 136(ptr) AccessChain 37(data) 1450 135 201 + 1461: 30(int64_t) CompositeExtract 1455 2 + Store 1460 1461 + 1462: 6(int) Load 8(invocation) + 1463: 141(ptr) AccessChain 37(data) 58 135 + 1464: 31(i64vec4) Load 1463 + 1465: 17(ivec4) Load 19(ballot) + 1466: 31(i64vec4) GroupNonUniformUMin 177 PartitionedReduceNV 1464 1465 + 1467: 141(ptr) AccessChain 37(data) 1462 135 + Store 1467 1466 + 1468: 6(int) Load 8(invocation) + 1469: 136(ptr) AccessChain 37(data) 39 135 40 + 1470: 30(int64_t) Load 1469 + 1471: 17(ivec4) Load 19(ballot) + 1472: 30(int64_t) GroupNonUniformUMax 177 PartitionedReduceNV 1470 1471 + 1473: 136(ptr) AccessChain 37(data) 1468 135 40 + Store 1473 1472 + 1474: 6(int) Load 8(invocation) + 1475: 141(ptr) AccessChain 37(data) 45 135 + 1476: 31(i64vec4) Load 1475 + 1477:140(i64vec2) VectorShuffle 1476 1476 0 1 + 1478: 17(ivec4) Load 19(ballot) + 1479:140(i64vec2) GroupNonUniformUMax 177 PartitionedReduceNV 1477 1478 + 1480: 136(ptr) AccessChain 37(data) 1474 135 40 + 1481: 30(int64_t) CompositeExtract 1479 0 + Store 1480 1481 + 1482: 136(ptr) AccessChain 37(data) 1474 135 188 + 1483: 30(int64_t) CompositeExtract 1479 1 + Store 1482 1483 + 1484: 6(int) Load 8(invocation) + 1485: 141(ptr) AccessChain 37(data) 52 135 + 1486: 31(i64vec4) Load 1485 + 1487:146(i64vec3) VectorShuffle 1486 1486 0 1 2 + 1488: 17(ivec4) Load 19(ballot) + 1489:146(i64vec3) GroupNonUniformUMax 177 PartitionedReduceNV 1487 1488 + 1490: 136(ptr) AccessChain 37(data) 1484 135 40 + 1491: 30(int64_t) CompositeExtract 1489 0 + Store 1490 1491 + 1492: 136(ptr) AccessChain 37(data) 1484 135 188 + 1493: 30(int64_t) CompositeExtract 1489 1 + Store 1492 1493 + 1494: 136(ptr) AccessChain 37(data) 1484 135 201 + 1495: 30(int64_t) CompositeExtract 1489 2 + Store 1494 1495 + 1496: 6(int) Load 8(invocation) + 1497: 141(ptr) AccessChain 37(data) 58 135 + 1498: 31(i64vec4) Load 1497 + 1499: 17(ivec4) Load 19(ballot) + 1500: 31(i64vec4) GroupNonUniformUMax 177 PartitionedReduceNV 1498 1499 + 1501: 141(ptr) AccessChain 37(data) 1496 135 + Store 1501 1500 + 1502: 6(int) Load 8(invocation) + 1503: 136(ptr) AccessChain 37(data) 39 135 40 + 1504: 30(int64_t) Load 1503 + 1505: 17(ivec4) Load 19(ballot) + 1506: 30(int64_t) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1504 1505 + 1507: 136(ptr) AccessChain 37(data) 1502 135 40 + Store 1507 1506 + 1508: 6(int) Load 8(invocation) + 1509: 141(ptr) AccessChain 37(data) 45 135 + 1510: 31(i64vec4) Load 1509 + 1511:140(i64vec2) VectorShuffle 1510 1510 0 1 + 1512: 17(ivec4) Load 19(ballot) + 1513:140(i64vec2) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1511 1512 + 1514: 136(ptr) AccessChain 37(data) 1508 135 40 + 1515: 30(int64_t) CompositeExtract 1513 0 + Store 1514 1515 + 1516: 136(ptr) AccessChain 37(data) 1508 135 188 + 1517: 30(int64_t) CompositeExtract 1513 1 + Store 1516 1517 1518: 6(int) Load 8(invocation) - 1519: 160(ptr) AccessChain 37(data) 58 154 - 1520: 33(f16vec4) Load 1519 - 1521: 17(ivec4) Load 19(ballot) - 1522: 33(f16vec4) GroupNonUniformFMin 177 PartitionedReduceNV 1520 1521 - 1523: 160(ptr) AccessChain 37(data) 1518 154 - Store 1523 1522 - 1524: 6(int) Load 8(invocation) - 1525: 155(ptr) AccessChain 37(data) 39 154 40 - 1526:32(float16_t) Load 1525 - 1527: 17(ivec4) Load 19(ballot) - 1528:32(float16_t) GroupNonUniformFMax 177 PartitionedReduceNV 1526 1527 - 1529: 155(ptr) AccessChain 37(data) 1524 154 40 - Store 1529 1528 + 1519: 141(ptr) AccessChain 37(data) 52 135 + 1520: 31(i64vec4) Load 1519 + 1521:146(i64vec3) VectorShuffle 1520 1520 0 1 2 + 1522: 17(ivec4) Load 19(ballot) + 1523:146(i64vec3) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1521 1522 + 1524: 136(ptr) AccessChain 37(data) 1518 135 40 + 1525: 30(int64_t) CompositeExtract 1523 0 + Store 1524 1525 + 1526: 136(ptr) AccessChain 37(data) 1518 135 188 + 1527: 30(int64_t) CompositeExtract 1523 1 + Store 1526 1527 + 1528: 136(ptr) AccessChain 37(data) 1518 135 201 + 1529: 30(int64_t) CompositeExtract 1523 2 + Store 1528 1529 1530: 6(int) Load 8(invocation) - 1531: 160(ptr) AccessChain 37(data) 45 154 - 1532: 33(f16vec4) Load 1531 - 1533:159(f16vec2) VectorShuffle 1532 1532 0 1 - 1534: 17(ivec4) Load 19(ballot) - 1535:159(f16vec2) GroupNonUniformFMax 177 PartitionedReduceNV 1533 1534 - 1536: 160(ptr) AccessChain 37(data) 1530 154 - 1537: 33(f16vec4) Load 1536 - 1538: 33(f16vec4) VectorShuffle 1537 1535 4 5 2 3 - Store 1536 1538 - 1539: 6(int) Load 8(invocation) - 1540: 160(ptr) AccessChain 37(data) 52 154 - 1541: 33(f16vec4) Load 1540 - 1542:165(f16vec3) VectorShuffle 1541 1541 0 1 2 - 1543: 17(ivec4) Load 19(ballot) - 1544:165(f16vec3) GroupNonUniformFMax 177 PartitionedReduceNV 1542 1543 - 1545: 160(ptr) AccessChain 37(data) 1539 154 - 1546: 33(f16vec4) Load 1545 - 1547: 33(f16vec4) VectorShuffle 1546 1544 4 5 6 3 - Store 1545 1547 - 1548: 6(int) Load 8(invocation) - 1549: 160(ptr) AccessChain 37(data) 58 154 - 1550: 33(f16vec4) Load 1549 - 1551: 17(ivec4) Load 19(ballot) - 1552: 33(f16vec4) GroupNonUniformFMax 177 PartitionedReduceNV 1550 1551 - 1553: 160(ptr) AccessChain 37(data) 1548 154 - Store 1553 1552 + 1531: 141(ptr) AccessChain 37(data) 58 135 + 1532: 31(i64vec4) Load 1531 + 1533: 17(ivec4) Load 19(ballot) + 1534: 31(i64vec4) GroupNonUniformBitwiseAnd 177 PartitionedReduceNV 1532 1533 + 1535: 141(ptr) AccessChain 37(data) 1530 135 + Store 1535 1534 + 1536: 6(int) Load 8(invocation) + 1537: 136(ptr) AccessChain 37(data) 39 135 40 + 1538: 30(int64_t) Load 1537 + 1539: 17(ivec4) Load 19(ballot) + 1540: 30(int64_t) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1538 1539 + 1541: 136(ptr) AccessChain 37(data) 1536 135 40 + Store 1541 1540 + 1542: 6(int) Load 8(invocation) + 1543: 141(ptr) AccessChain 37(data) 45 135 + 1544: 31(i64vec4) Load 1543 + 1545:140(i64vec2) VectorShuffle 1544 1544 0 1 + 1546: 17(ivec4) Load 19(ballot) + 1547:140(i64vec2) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1545 1546 + 1548: 136(ptr) AccessChain 37(data) 1542 135 40 + 1549: 30(int64_t) CompositeExtract 1547 0 + Store 1548 1549 + 1550: 136(ptr) AccessChain 37(data) 1542 135 188 + 1551: 30(int64_t) CompositeExtract 1547 1 + Store 1550 1551 + 1552: 6(int) Load 8(invocation) + 1553: 141(ptr) AccessChain 37(data) 52 135 + 1554: 31(i64vec4) Load 1553 + 1555:146(i64vec3) VectorShuffle 1554 1554 0 1 2 + 1556: 17(ivec4) Load 19(ballot) + 1557:146(i64vec3) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1555 1556 + 1558: 136(ptr) AccessChain 37(data) 1552 135 40 + 1559: 30(int64_t) CompositeExtract 1557 0 + Store 1558 1559 + 1560: 136(ptr) AccessChain 37(data) 1552 135 188 + 1561: 30(int64_t) CompositeExtract 1557 1 + Store 1560 1561 + 1562: 136(ptr) AccessChain 37(data) 1552 135 201 + 1563: 30(int64_t) CompositeExtract 1557 2 + Store 1562 1563 + 1564: 6(int) Load 8(invocation) + 1565: 141(ptr) AccessChain 37(data) 58 135 + 1566: 31(i64vec4) Load 1565 + 1567: 17(ivec4) Load 19(ballot) + 1568: 31(i64vec4) GroupNonUniformBitwiseOr 177 PartitionedReduceNV 1566 1567 + 1569: 141(ptr) AccessChain 37(data) 1564 135 + Store 1569 1568 + 1570: 6(int) Load 8(invocation) + 1571: 136(ptr) AccessChain 37(data) 39 135 40 + 1572: 30(int64_t) Load 1571 + 1573: 17(ivec4) Load 19(ballot) + 1574: 30(int64_t) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1572 1573 + 1575: 136(ptr) AccessChain 37(data) 1570 135 40 + Store 1575 1574 + 1576: 6(int) Load 8(invocation) + 1577: 141(ptr) AccessChain 37(data) 45 135 + 1578: 31(i64vec4) Load 1577 + 1579:140(i64vec2) VectorShuffle 1578 1578 0 1 + 1580: 17(ivec4) Load 19(ballot) + 1581:140(i64vec2) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1579 1580 + 1582: 136(ptr) AccessChain 37(data) 1576 135 40 + 1583: 30(int64_t) CompositeExtract 1581 0 + Store 1582 1583 + 1584: 136(ptr) AccessChain 37(data) 1576 135 188 + 1585: 30(int64_t) CompositeExtract 1581 1 + Store 1584 1585 + 1586: 6(int) Load 8(invocation) + 1587: 141(ptr) AccessChain 37(data) 52 135 + 1588: 31(i64vec4) Load 1587 + 1589:146(i64vec3) VectorShuffle 1588 1588 0 1 2 + 1590: 17(ivec4) Load 19(ballot) + 1591:146(i64vec3) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1589 1590 + 1592: 136(ptr) AccessChain 37(data) 1586 135 40 + 1593: 30(int64_t) CompositeExtract 1591 0 + Store 1592 1593 + 1594: 136(ptr) AccessChain 37(data) 1586 135 188 + 1595: 30(int64_t) CompositeExtract 1591 1 + Store 1594 1595 + 1596: 136(ptr) AccessChain 37(data) 1586 135 201 + 1597: 30(int64_t) CompositeExtract 1591 2 + Store 1596 1597 + 1598: 6(int) Load 8(invocation) + 1599: 141(ptr) AccessChain 37(data) 58 135 + 1600: 31(i64vec4) Load 1599 + 1601: 17(ivec4) Load 19(ballot) + 1602: 31(i64vec4) GroupNonUniformBitwiseXor 177 PartitionedReduceNV 1600 1601 + 1603: 141(ptr) AccessChain 37(data) 1598 135 + Store 1603 1602 + 1604: 6(int) Load 8(invocation) + 1605: 155(ptr) AccessChain 37(data) 39 154 40 + 1606:32(float16_t) Load 1605 + 1607: 17(ivec4) Load 19(ballot) + 1608:32(float16_t) GroupNonUniformFAdd 177 PartitionedReduceNV 1606 1607 + 1609: 155(ptr) AccessChain 37(data) 1604 154 40 + Store 1609 1608 + 1610: 6(int) Load 8(invocation) + 1611: 160(ptr) AccessChain 37(data) 45 154 + 1612: 33(f16vec4) Load 1611 + 1613:159(f16vec2) VectorShuffle 1612 1612 0 1 + 1614: 17(ivec4) Load 19(ballot) + 1615:159(f16vec2) GroupNonUniformFAdd 177 PartitionedReduceNV 1613 1614 + 1616: 155(ptr) AccessChain 37(data) 1610 154 40 + 1617:32(float16_t) CompositeExtract 1615 0 + Store 1616 1617 + 1618: 155(ptr) AccessChain 37(data) 1610 154 188 + 1619:32(float16_t) CompositeExtract 1615 1 + Store 1618 1619 + 1620: 6(int) Load 8(invocation) + 1621: 160(ptr) AccessChain 37(data) 52 154 + 1622: 33(f16vec4) Load 1621 + 1623:165(f16vec3) VectorShuffle 1622 1622 0 1 2 + 1624: 17(ivec4) Load 19(ballot) + 1625:165(f16vec3) GroupNonUniformFAdd 177 PartitionedReduceNV 1623 1624 + 1626: 155(ptr) AccessChain 37(data) 1620 154 40 + 1627:32(float16_t) CompositeExtract 1625 0 + Store 1626 1627 + 1628: 155(ptr) AccessChain 37(data) 1620 154 188 + 1629:32(float16_t) CompositeExtract 1625 1 + Store 1628 1629 + 1630: 155(ptr) AccessChain 37(data) 1620 154 201 + 1631:32(float16_t) CompositeExtract 1625 2 + Store 1630 1631 + 1632: 6(int) Load 8(invocation) + 1633: 160(ptr) AccessChain 37(data) 58 154 + 1634: 33(f16vec4) Load 1633 + 1635: 17(ivec4) Load 19(ballot) + 1636: 33(f16vec4) GroupNonUniformFAdd 177 PartitionedReduceNV 1634 1635 + 1637: 160(ptr) AccessChain 37(data) 1632 154 + Store 1637 1636 + 1638: 6(int) Load 8(invocation) + 1639: 155(ptr) AccessChain 37(data) 39 154 40 + 1640:32(float16_t) Load 1639 + 1641: 17(ivec4) Load 19(ballot) + 1642:32(float16_t) GroupNonUniformFMul 177 PartitionedReduceNV 1640 1641 + 1643: 155(ptr) AccessChain 37(data) 1638 154 40 + Store 1643 1642 + 1644: 6(int) Load 8(invocation) + 1645: 160(ptr) AccessChain 37(data) 45 154 + 1646: 33(f16vec4) Load 1645 + 1647:159(f16vec2) VectorShuffle 1646 1646 0 1 + 1648: 17(ivec4) Load 19(ballot) + 1649:159(f16vec2) GroupNonUniformFMul 177 PartitionedReduceNV 1647 1648 + 1650: 155(ptr) AccessChain 37(data) 1644 154 40 + 1651:32(float16_t) CompositeExtract 1649 0 + Store 1650 1651 + 1652: 155(ptr) AccessChain 37(data) 1644 154 188 + 1653:32(float16_t) CompositeExtract 1649 1 + Store 1652 1653 + 1654: 6(int) Load 8(invocation) + 1655: 160(ptr) AccessChain 37(data) 52 154 + 1656: 33(f16vec4) Load 1655 + 1657:165(f16vec3) VectorShuffle 1656 1656 0 1 2 + 1658: 17(ivec4) Load 19(ballot) + 1659:165(f16vec3) GroupNonUniformFMul 177 PartitionedReduceNV 1657 1658 + 1660: 155(ptr) AccessChain 37(data) 1654 154 40 + 1661:32(float16_t) CompositeExtract 1659 0 + Store 1660 1661 + 1662: 155(ptr) AccessChain 37(data) 1654 154 188 + 1663:32(float16_t) CompositeExtract 1659 1 + Store 1662 1663 + 1664: 155(ptr) AccessChain 37(data) 1654 154 201 + 1665:32(float16_t) CompositeExtract 1659 2 + Store 1664 1665 + 1666: 6(int) Load 8(invocation) + 1667: 160(ptr) AccessChain 37(data) 58 154 + 1668: 33(f16vec4) Load 1667 + 1669: 17(ivec4) Load 19(ballot) + 1670: 33(f16vec4) GroupNonUniformFMul 177 PartitionedReduceNV 1668 1669 + 1671: 160(ptr) AccessChain 37(data) 1666 154 + Store 1671 1670 + 1672: 6(int) Load 8(invocation) + 1673: 155(ptr) AccessChain 37(data) 39 154 40 + 1674:32(float16_t) Load 1673 + 1675: 17(ivec4) Load 19(ballot) + 1676:32(float16_t) GroupNonUniformFMin 177 PartitionedReduceNV 1674 1675 + 1677: 155(ptr) AccessChain 37(data) 1672 154 40 + Store 1677 1676 + 1678: 6(int) Load 8(invocation) + 1679: 160(ptr) AccessChain 37(data) 45 154 + 1680: 33(f16vec4) Load 1679 + 1681:159(f16vec2) VectorShuffle 1680 1680 0 1 + 1682: 17(ivec4) Load 19(ballot) + 1683:159(f16vec2) GroupNonUniformFMin 177 PartitionedReduceNV 1681 1682 + 1684: 155(ptr) AccessChain 37(data) 1678 154 40 + 1685:32(float16_t) CompositeExtract 1683 0 + Store 1684 1685 + 1686: 155(ptr) AccessChain 37(data) 1678 154 188 + 1687:32(float16_t) CompositeExtract 1683 1 + Store 1686 1687 + 1688: 6(int) Load 8(invocation) + 1689: 160(ptr) AccessChain 37(data) 52 154 + 1690: 33(f16vec4) Load 1689 + 1691:165(f16vec3) VectorShuffle 1690 1690 0 1 2 + 1692: 17(ivec4) Load 19(ballot) + 1693:165(f16vec3) GroupNonUniformFMin 177 PartitionedReduceNV 1691 1692 + 1694: 155(ptr) AccessChain 37(data) 1688 154 40 + 1695:32(float16_t) CompositeExtract 1693 0 + Store 1694 1695 + 1696: 155(ptr) AccessChain 37(data) 1688 154 188 + 1697:32(float16_t) CompositeExtract 1693 1 + Store 1696 1697 + 1698: 155(ptr) AccessChain 37(data) 1688 154 201 + 1699:32(float16_t) CompositeExtract 1693 2 + Store 1698 1699 + 1700: 6(int) Load 8(invocation) + 1701: 160(ptr) AccessChain 37(data) 58 154 + 1702: 33(f16vec4) Load 1701 + 1703: 17(ivec4) Load 19(ballot) + 1704: 33(f16vec4) GroupNonUniformFMin 177 PartitionedReduceNV 1702 1703 + 1705: 160(ptr) AccessChain 37(data) 1700 154 + Store 1705 1704 + 1706: 6(int) Load 8(invocation) + 1707: 155(ptr) AccessChain 37(data) 39 154 40 + 1708:32(float16_t) Load 1707 + 1709: 17(ivec4) Load 19(ballot) + 1710:32(float16_t) GroupNonUniformFMax 177 PartitionedReduceNV 1708 1709 + 1711: 155(ptr) AccessChain 37(data) 1706 154 40 + Store 1711 1710 + 1712: 6(int) Load 8(invocation) + 1713: 160(ptr) AccessChain 37(data) 45 154 + 1714: 33(f16vec4) Load 1713 + 1715:159(f16vec2) VectorShuffle 1714 1714 0 1 + 1716: 17(ivec4) Load 19(ballot) + 1717:159(f16vec2) GroupNonUniformFMax 177 PartitionedReduceNV 1715 1716 + 1718: 155(ptr) AccessChain 37(data) 1712 154 40 + 1719:32(float16_t) CompositeExtract 1717 0 + Store 1718 1719 + 1720: 155(ptr) AccessChain 37(data) 1712 154 188 + 1721:32(float16_t) CompositeExtract 1717 1 + Store 1720 1721 + 1722: 6(int) Load 8(invocation) + 1723: 160(ptr) AccessChain 37(data) 52 154 + 1724: 33(f16vec4) Load 1723 + 1725:165(f16vec3) VectorShuffle 1724 1724 0 1 2 + 1726: 17(ivec4) Load 19(ballot) + 1727:165(f16vec3) GroupNonUniformFMax 177 PartitionedReduceNV 1725 1726 + 1728: 155(ptr) AccessChain 37(data) 1722 154 40 + 1729:32(float16_t) CompositeExtract 1727 0 + Store 1728 1729 + 1730: 155(ptr) AccessChain 37(data) 1722 154 188 + 1731:32(float16_t) CompositeExtract 1727 1 + Store 1730 1731 + 1732: 155(ptr) AccessChain 37(data) 1722 154 201 + 1733:32(float16_t) CompositeExtract 1727 2 + Store 1732 1733 + 1734: 6(int) Load 8(invocation) + 1735: 160(ptr) AccessChain 37(data) 58 154 + 1736: 33(f16vec4) Load 1735 + 1737: 17(ivec4) Load 19(ballot) + 1738: 33(f16vec4) GroupNonUniformFMax 177 PartitionedReduceNV 1736 1737 + 1739: 160(ptr) AccessChain 37(data) 1734 154 + Store 1739 1738 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out index beec1ac7b0..f385545e63 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesQuad.comp.out @@ -1,7 +1,7 @@ spv.subgroupExtendedTypesQuad.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 806 +// Id's are bound by 918 Capability Shader Capability Float16 @@ -59,7 +59,7 @@ spv.subgroupExtendedTypesQuad.comp Decorate 31(Buffers) Block Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 - Decorate 805 BuiltIn WorkgroupSize + Decorate 917 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -95,40 +95,40 @@ spv.subgroupExtendedTypesQuad.comp 47: 36(int) Constant 1 48: TypeVector 17(int8_t) 2 49: TypePointer StorageBuffer 18(i8vec4) - 58: 36(int) Constant 2 - 59: TypeVector 17(int8_t) 3 - 68: 36(int) Constant 3 - 128: 6(int) Constant 2 - 153: TypePointer StorageBuffer 19(int8_t) - 159: TypeVector 19(int8_t) 2 - 160: TypePointer StorageBuffer 20(i8vec4) - 169: TypeVector 19(int8_t) 3 - 261: TypePointer StorageBuffer 21(int16_t) - 267: TypeVector 21(int16_t) 2 - 268: TypePointer StorageBuffer 22(i16vec4) - 277: TypeVector 21(int16_t) 3 - 369: TypePointer StorageBuffer 23(int16_t) - 375: TypeVector 23(int16_t) 2 - 376: TypePointer StorageBuffer 24(i16vec4) - 385: TypeVector 23(int16_t) 3 - 477: 36(int) Constant 4 - 478: TypePointer StorageBuffer 25(int64_t) - 484: TypeVector 25(int64_t) 2 - 485: TypePointer StorageBuffer 26(i64vec4) - 494: TypeVector 25(int64_t) 3 - 586: 36(int) Constant 5 - 587: TypePointer StorageBuffer 27(int64_t) - 593: TypeVector 27(int64_t) 2 - 594: TypePointer StorageBuffer 28(i64vec4) - 603: TypeVector 27(int64_t) 3 - 695: 36(int) Constant 6 - 696: TypePointer StorageBuffer 29(float16_t) - 702: TypeVector 29(float16_t) 2 - 703: TypePointer StorageBuffer 30(f16vec4) - 712: TypeVector 29(float16_t) 3 - 803: TypeVector 6(int) 3 - 804: 6(int) Constant 8 - 805: 803(ivec3) ConstantComposite 804 42 42 + 59: 36(int) Constant 2 + 60: TypeVector 17(int8_t) 3 + 69: 6(int) Constant 2 + 73: 36(int) Constant 3 + 169: TypePointer StorageBuffer 19(int8_t) + 175: TypeVector 19(int8_t) 2 + 176: TypePointer StorageBuffer 20(i8vec4) + 186: TypeVector 19(int8_t) 3 + 293: TypePointer StorageBuffer 21(int16_t) + 299: TypeVector 21(int16_t) 2 + 300: TypePointer StorageBuffer 22(i16vec4) + 310: TypeVector 21(int16_t) 3 + 417: TypePointer StorageBuffer 23(int16_t) + 423: TypeVector 23(int16_t) 2 + 424: TypePointer StorageBuffer 24(i16vec4) + 434: TypeVector 23(int16_t) 3 + 541: 36(int) Constant 4 + 542: TypePointer StorageBuffer 25(int64_t) + 548: TypeVector 25(int64_t) 2 + 549: TypePointer StorageBuffer 26(i64vec4) + 559: TypeVector 25(int64_t) 3 + 666: 36(int) Constant 5 + 667: TypePointer StorageBuffer 27(int64_t) + 673: TypeVector 27(int64_t) 2 + 674: TypePointer StorageBuffer 28(i64vec4) + 684: TypeVector 27(int64_t) 3 + 791: 36(int) Constant 6 + 792: TypePointer StorageBuffer 29(float16_t) + 798: TypeVector 29(float16_t) 2 + 799: TypePointer StorageBuffer 30(f16vec4) + 809: TypeVector 29(float16_t) 3 + 915: TypeVector 6(int) 3 + 916: 6(int) Constant 8 + 917: 915(ivec3) ConstantComposite 916 42 42 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -148,834 +148,1030 @@ spv.subgroupExtendedTypesQuad.comp 51: 18(i8vec4) Load 50 52: 48(i8vec2) VectorShuffle 51 51 0 1 53: 48(i8vec2) GroupNonUniformQuadBroadcast 43 52 42 - 54: 49(ptr) AccessChain 34(data) 46 37 - 55: 18(i8vec4) Load 54 - 56: 18(i8vec4) VectorShuffle 55 53 4 5 2 3 - Store 54 56 - 57: 6(int) Load 8(invocation) - 60: 49(ptr) AccessChain 34(data) 58 37 - 61: 18(i8vec4) Load 60 - 62: 59(i8vec3) VectorShuffle 61 61 0 1 2 - 63: 59(i8vec3) GroupNonUniformQuadBroadcast 43 62 42 - 64: 49(ptr) AccessChain 34(data) 57 37 - 65: 18(i8vec4) Load 64 - 66: 18(i8vec4) VectorShuffle 65 63 4 5 6 3 - Store 64 66 - 67: 6(int) Load 8(invocation) - 69: 49(ptr) AccessChain 34(data) 68 37 - 70: 18(i8vec4) Load 69 - 71: 18(i8vec4) GroupNonUniformQuadBroadcast 43 70 42 - 72: 49(ptr) AccessChain 34(data) 67 37 - Store 72 71 - 73: 6(int) Load 8(invocation) - 74: 39(ptr) AccessChain 34(data) 37 37 38 - 75: 17(int8_t) Load 74 - 76: 17(int8_t) GroupNonUniformQuadSwap 43 75 38 - 77: 39(ptr) AccessChain 34(data) 73 37 38 + 54: 39(ptr) AccessChain 34(data) 46 37 38 + 55: 17(int8_t) CompositeExtract 53 0 + Store 54 55 + 56: 39(ptr) AccessChain 34(data) 46 37 42 + 57: 17(int8_t) CompositeExtract 53 1 + Store 56 57 + 58: 6(int) Load 8(invocation) + 61: 49(ptr) AccessChain 34(data) 59 37 + 62: 18(i8vec4) Load 61 + 63: 60(i8vec3) VectorShuffle 62 62 0 1 2 + 64: 60(i8vec3) GroupNonUniformQuadBroadcast 43 63 42 + 65: 39(ptr) AccessChain 34(data) 58 37 38 + 66: 17(int8_t) CompositeExtract 64 0 + Store 65 66 + 67: 39(ptr) AccessChain 34(data) 58 37 42 + 68: 17(int8_t) CompositeExtract 64 1 + Store 67 68 + 70: 39(ptr) AccessChain 34(data) 58 37 69 + 71: 17(int8_t) CompositeExtract 64 2 + Store 70 71 + 72: 6(int) Load 8(invocation) + 74: 49(ptr) AccessChain 34(data) 73 37 + 75: 18(i8vec4) Load 74 + 76: 18(i8vec4) GroupNonUniformQuadBroadcast 43 75 42 + 77: 49(ptr) AccessChain 34(data) 72 37 Store 77 76 78: 6(int) Load 8(invocation) - 79: 49(ptr) AccessChain 34(data) 47 37 - 80: 18(i8vec4) Load 79 - 81: 48(i8vec2) VectorShuffle 80 80 0 1 - 82: 48(i8vec2) GroupNonUniformQuadSwap 43 81 38 - 83: 49(ptr) AccessChain 34(data) 78 37 - 84: 18(i8vec4) Load 83 - 85: 18(i8vec4) VectorShuffle 84 82 4 5 2 3 - Store 83 85 - 86: 6(int) Load 8(invocation) - 87: 49(ptr) AccessChain 34(data) 58 37 - 88: 18(i8vec4) Load 87 - 89: 59(i8vec3) VectorShuffle 88 88 0 1 2 - 90: 59(i8vec3) GroupNonUniformQuadSwap 43 89 38 - 91: 49(ptr) AccessChain 34(data) 86 37 - 92: 18(i8vec4) Load 91 - 93: 18(i8vec4) VectorShuffle 92 90 4 5 6 3 - Store 91 93 - 94: 6(int) Load 8(invocation) - 95: 49(ptr) AccessChain 34(data) 68 37 - 96: 18(i8vec4) Load 95 - 97: 18(i8vec4) GroupNonUniformQuadSwap 43 96 38 - 98: 49(ptr) AccessChain 34(data) 94 37 - Store 98 97 - 99: 6(int) Load 8(invocation) - 100: 39(ptr) AccessChain 34(data) 37 37 38 - 101: 17(int8_t) Load 100 - 102: 17(int8_t) GroupNonUniformQuadSwap 43 101 42 - 103: 39(ptr) AccessChain 34(data) 99 37 38 - Store 103 102 - 104: 6(int) Load 8(invocation) - 105: 49(ptr) AccessChain 34(data) 47 37 - 106: 18(i8vec4) Load 105 - 107: 48(i8vec2) VectorShuffle 106 106 0 1 - 108: 48(i8vec2) GroupNonUniformQuadSwap 43 107 42 - 109: 49(ptr) AccessChain 34(data) 104 37 - 110: 18(i8vec4) Load 109 - 111: 18(i8vec4) VectorShuffle 110 108 4 5 2 3 - Store 109 111 - 112: 6(int) Load 8(invocation) - 113: 49(ptr) AccessChain 34(data) 58 37 - 114: 18(i8vec4) Load 113 - 115: 59(i8vec3) VectorShuffle 114 114 0 1 2 - 116: 59(i8vec3) GroupNonUniformQuadSwap 43 115 42 - 117: 49(ptr) AccessChain 34(data) 112 37 - 118: 18(i8vec4) Load 117 - 119: 18(i8vec4) VectorShuffle 118 116 4 5 6 3 - Store 117 119 - 120: 6(int) Load 8(invocation) - 121: 49(ptr) AccessChain 34(data) 68 37 - 122: 18(i8vec4) Load 121 - 123: 18(i8vec4) GroupNonUniformQuadSwap 43 122 42 - 124: 49(ptr) AccessChain 34(data) 120 37 - Store 124 123 - 125: 6(int) Load 8(invocation) - 126: 39(ptr) AccessChain 34(data) 37 37 38 - 127: 17(int8_t) Load 126 - 129: 17(int8_t) GroupNonUniformQuadSwap 43 127 128 - 130: 39(ptr) AccessChain 34(data) 125 37 38 - Store 130 129 - 131: 6(int) Load 8(invocation) - 132: 49(ptr) AccessChain 34(data) 47 37 - 133: 18(i8vec4) Load 132 - 134: 48(i8vec2) VectorShuffle 133 133 0 1 - 135: 48(i8vec2) GroupNonUniformQuadSwap 43 134 128 - 136: 49(ptr) AccessChain 34(data) 131 37 - 137: 18(i8vec4) Load 136 - 138: 18(i8vec4) VectorShuffle 137 135 4 5 2 3 - Store 136 138 - 139: 6(int) Load 8(invocation) - 140: 49(ptr) AccessChain 34(data) 58 37 - 141: 18(i8vec4) Load 140 - 142: 59(i8vec3) VectorShuffle 141 141 0 1 2 - 143: 59(i8vec3) GroupNonUniformQuadSwap 43 142 128 - 144: 49(ptr) AccessChain 34(data) 139 37 + 79: 39(ptr) AccessChain 34(data) 37 37 38 + 80: 17(int8_t) Load 79 + 81: 17(int8_t) GroupNonUniformQuadSwap 43 80 38 + 82: 39(ptr) AccessChain 34(data) 78 37 38 + Store 82 81 + 83: 6(int) Load 8(invocation) + 84: 49(ptr) AccessChain 34(data) 47 37 + 85: 18(i8vec4) Load 84 + 86: 48(i8vec2) VectorShuffle 85 85 0 1 + 87: 48(i8vec2) GroupNonUniformQuadSwap 43 86 38 + 88: 39(ptr) AccessChain 34(data) 83 37 38 + 89: 17(int8_t) CompositeExtract 87 0 + Store 88 89 + 90: 39(ptr) AccessChain 34(data) 83 37 42 + 91: 17(int8_t) CompositeExtract 87 1 + Store 90 91 + 92: 6(int) Load 8(invocation) + 93: 49(ptr) AccessChain 34(data) 59 37 + 94: 18(i8vec4) Load 93 + 95: 60(i8vec3) VectorShuffle 94 94 0 1 2 + 96: 60(i8vec3) GroupNonUniformQuadSwap 43 95 38 + 97: 39(ptr) AccessChain 34(data) 92 37 38 + 98: 17(int8_t) CompositeExtract 96 0 + Store 97 98 + 99: 39(ptr) AccessChain 34(data) 92 37 42 + 100: 17(int8_t) CompositeExtract 96 1 + Store 99 100 + 101: 39(ptr) AccessChain 34(data) 92 37 69 + 102: 17(int8_t) CompositeExtract 96 2 + Store 101 102 + 103: 6(int) Load 8(invocation) + 104: 49(ptr) AccessChain 34(data) 73 37 + 105: 18(i8vec4) Load 104 + 106: 18(i8vec4) GroupNonUniformQuadSwap 43 105 38 + 107: 49(ptr) AccessChain 34(data) 103 37 + Store 107 106 + 108: 6(int) Load 8(invocation) + 109: 39(ptr) AccessChain 34(data) 37 37 38 + 110: 17(int8_t) Load 109 + 111: 17(int8_t) GroupNonUniformQuadSwap 43 110 42 + 112: 39(ptr) AccessChain 34(data) 108 37 38 + Store 112 111 + 113: 6(int) Load 8(invocation) + 114: 49(ptr) AccessChain 34(data) 47 37 + 115: 18(i8vec4) Load 114 + 116: 48(i8vec2) VectorShuffle 115 115 0 1 + 117: 48(i8vec2) GroupNonUniformQuadSwap 43 116 42 + 118: 39(ptr) AccessChain 34(data) 113 37 38 + 119: 17(int8_t) CompositeExtract 117 0 + Store 118 119 + 120: 39(ptr) AccessChain 34(data) 113 37 42 + 121: 17(int8_t) CompositeExtract 117 1 + Store 120 121 + 122: 6(int) Load 8(invocation) + 123: 49(ptr) AccessChain 34(data) 59 37 + 124: 18(i8vec4) Load 123 + 125: 60(i8vec3) VectorShuffle 124 124 0 1 2 + 126: 60(i8vec3) GroupNonUniformQuadSwap 43 125 42 + 127: 39(ptr) AccessChain 34(data) 122 37 38 + 128: 17(int8_t) CompositeExtract 126 0 + Store 127 128 + 129: 39(ptr) AccessChain 34(data) 122 37 42 + 130: 17(int8_t) CompositeExtract 126 1 + Store 129 130 + 131: 39(ptr) AccessChain 34(data) 122 37 69 + 132: 17(int8_t) CompositeExtract 126 2 + Store 131 132 + 133: 6(int) Load 8(invocation) + 134: 49(ptr) AccessChain 34(data) 73 37 + 135: 18(i8vec4) Load 134 + 136: 18(i8vec4) GroupNonUniformQuadSwap 43 135 42 + 137: 49(ptr) AccessChain 34(data) 133 37 + Store 137 136 + 138: 6(int) Load 8(invocation) + 139: 39(ptr) AccessChain 34(data) 37 37 38 + 140: 17(int8_t) Load 139 + 141: 17(int8_t) GroupNonUniformQuadSwap 43 140 69 + 142: 39(ptr) AccessChain 34(data) 138 37 38 + Store 142 141 + 143: 6(int) Load 8(invocation) + 144: 49(ptr) AccessChain 34(data) 47 37 145: 18(i8vec4) Load 144 - 146: 18(i8vec4) VectorShuffle 145 143 4 5 6 3 - Store 144 146 - 147: 6(int) Load 8(invocation) - 148: 49(ptr) AccessChain 34(data) 68 37 - 149: 18(i8vec4) Load 148 - 150: 18(i8vec4) GroupNonUniformQuadSwap 43 149 128 - 151: 49(ptr) AccessChain 34(data) 147 37 - Store 151 150 + 146: 48(i8vec2) VectorShuffle 145 145 0 1 + 147: 48(i8vec2) GroupNonUniformQuadSwap 43 146 69 + 148: 39(ptr) AccessChain 34(data) 143 37 38 + 149: 17(int8_t) CompositeExtract 147 0 + Store 148 149 + 150: 39(ptr) AccessChain 34(data) 143 37 42 + 151: 17(int8_t) CompositeExtract 147 1 + Store 150 151 152: 6(int) Load 8(invocation) - 154: 153(ptr) AccessChain 34(data) 37 47 38 - 155: 19(int8_t) Load 154 - 156: 19(int8_t) GroupNonUniformQuadBroadcast 43 155 42 - 157: 153(ptr) AccessChain 34(data) 152 47 38 - Store 157 156 - 158: 6(int) Load 8(invocation) - 161: 160(ptr) AccessChain 34(data) 47 47 - 162: 20(i8vec4) Load 161 - 163: 159(i8vec2) VectorShuffle 162 162 0 1 - 164: 159(i8vec2) GroupNonUniformQuadBroadcast 43 163 42 - 165: 160(ptr) AccessChain 34(data) 158 47 - 166: 20(i8vec4) Load 165 - 167: 20(i8vec4) VectorShuffle 166 164 4 5 2 3 - Store 165 167 + 153: 49(ptr) AccessChain 34(data) 59 37 + 154: 18(i8vec4) Load 153 + 155: 60(i8vec3) VectorShuffle 154 154 0 1 2 + 156: 60(i8vec3) GroupNonUniformQuadSwap 43 155 69 + 157: 39(ptr) AccessChain 34(data) 152 37 38 + 158: 17(int8_t) CompositeExtract 156 0 + Store 157 158 + 159: 39(ptr) AccessChain 34(data) 152 37 42 + 160: 17(int8_t) CompositeExtract 156 1 + Store 159 160 + 161: 39(ptr) AccessChain 34(data) 152 37 69 + 162: 17(int8_t) CompositeExtract 156 2 + Store 161 162 + 163: 6(int) Load 8(invocation) + 164: 49(ptr) AccessChain 34(data) 73 37 + 165: 18(i8vec4) Load 164 + 166: 18(i8vec4) GroupNonUniformQuadSwap 43 165 69 + 167: 49(ptr) AccessChain 34(data) 163 37 + Store 167 166 168: 6(int) Load 8(invocation) - 170: 160(ptr) AccessChain 34(data) 58 47 - 171: 20(i8vec4) Load 170 - 172: 169(i8vec3) VectorShuffle 171 171 0 1 2 - 173: 169(i8vec3) GroupNonUniformQuadBroadcast 43 172 42 - 174: 160(ptr) AccessChain 34(data) 168 47 - 175: 20(i8vec4) Load 174 - 176: 20(i8vec4) VectorShuffle 175 173 4 5 6 3 - Store 174 176 - 177: 6(int) Load 8(invocation) - 178: 160(ptr) AccessChain 34(data) 68 47 - 179: 20(i8vec4) Load 178 - 180: 20(i8vec4) GroupNonUniformQuadBroadcast 43 179 42 - 181: 160(ptr) AccessChain 34(data) 177 47 - Store 181 180 - 182: 6(int) Load 8(invocation) - 183: 153(ptr) AccessChain 34(data) 37 47 38 - 184: 19(int8_t) Load 183 - 185: 19(int8_t) GroupNonUniformQuadSwap 43 184 38 - 186: 153(ptr) AccessChain 34(data) 182 47 38 - Store 186 185 - 187: 6(int) Load 8(invocation) - 188: 160(ptr) AccessChain 34(data) 47 47 - 189: 20(i8vec4) Load 188 - 190: 159(i8vec2) VectorShuffle 189 189 0 1 - 191: 159(i8vec2) GroupNonUniformQuadSwap 43 190 38 - 192: 160(ptr) AccessChain 34(data) 187 47 - 193: 20(i8vec4) Load 192 - 194: 20(i8vec4) VectorShuffle 193 191 4 5 2 3 - Store 192 194 - 195: 6(int) Load 8(invocation) - 196: 160(ptr) AccessChain 34(data) 58 47 - 197: 20(i8vec4) Load 196 - 198: 169(i8vec3) VectorShuffle 197 197 0 1 2 - 199: 169(i8vec3) GroupNonUniformQuadSwap 43 198 38 - 200: 160(ptr) AccessChain 34(data) 195 47 - 201: 20(i8vec4) Load 200 - 202: 20(i8vec4) VectorShuffle 201 199 4 5 6 3 - Store 200 202 - 203: 6(int) Load 8(invocation) - 204: 160(ptr) AccessChain 34(data) 68 47 - 205: 20(i8vec4) Load 204 - 206: 20(i8vec4) GroupNonUniformQuadSwap 43 205 38 - 207: 160(ptr) AccessChain 34(data) 203 47 - Store 207 206 - 208: 6(int) Load 8(invocation) - 209: 153(ptr) AccessChain 34(data) 37 47 38 - 210: 19(int8_t) Load 209 - 211: 19(int8_t) GroupNonUniformQuadSwap 43 210 42 - 212: 153(ptr) AccessChain 34(data) 208 47 38 - Store 212 211 - 213: 6(int) Load 8(invocation) - 214: 160(ptr) AccessChain 34(data) 47 47 - 215: 20(i8vec4) Load 214 - 216: 159(i8vec2) VectorShuffle 215 215 0 1 - 217: 159(i8vec2) GroupNonUniformQuadSwap 43 216 42 - 218: 160(ptr) AccessChain 34(data) 213 47 - 219: 20(i8vec4) Load 218 - 220: 20(i8vec4) VectorShuffle 219 217 4 5 2 3 - Store 218 220 - 221: 6(int) Load 8(invocation) - 222: 160(ptr) AccessChain 34(data) 58 47 - 223: 20(i8vec4) Load 222 - 224: 169(i8vec3) VectorShuffle 223 223 0 1 2 - 225: 169(i8vec3) GroupNonUniformQuadSwap 43 224 42 - 226: 160(ptr) AccessChain 34(data) 221 47 - 227: 20(i8vec4) Load 226 - 228: 20(i8vec4) VectorShuffle 227 225 4 5 6 3 - Store 226 228 - 229: 6(int) Load 8(invocation) - 230: 160(ptr) AccessChain 34(data) 68 47 - 231: 20(i8vec4) Load 230 - 232: 20(i8vec4) GroupNonUniformQuadSwap 43 231 42 - 233: 160(ptr) AccessChain 34(data) 229 47 - Store 233 232 - 234: 6(int) Load 8(invocation) - 235: 153(ptr) AccessChain 34(data) 37 47 38 - 236: 19(int8_t) Load 235 - 237: 19(int8_t) GroupNonUniformQuadSwap 43 236 128 - 238: 153(ptr) AccessChain 34(data) 234 47 38 - Store 238 237 - 239: 6(int) Load 8(invocation) - 240: 160(ptr) AccessChain 34(data) 47 47 - 241: 20(i8vec4) Load 240 - 242: 159(i8vec2) VectorShuffle 241 241 0 1 - 243: 159(i8vec2) GroupNonUniformQuadSwap 43 242 128 - 244: 160(ptr) AccessChain 34(data) 239 47 - 245: 20(i8vec4) Load 244 - 246: 20(i8vec4) VectorShuffle 245 243 4 5 2 3 - Store 244 246 - 247: 6(int) Load 8(invocation) - 248: 160(ptr) AccessChain 34(data) 58 47 - 249: 20(i8vec4) Load 248 - 250: 169(i8vec3) VectorShuffle 249 249 0 1 2 - 251: 169(i8vec3) GroupNonUniformQuadSwap 43 250 128 - 252: 160(ptr) AccessChain 34(data) 247 47 - 253: 20(i8vec4) Load 252 - 254: 20(i8vec4) VectorShuffle 253 251 4 5 6 3 - Store 252 254 - 255: 6(int) Load 8(invocation) - 256: 160(ptr) AccessChain 34(data) 68 47 - 257: 20(i8vec4) Load 256 - 258: 20(i8vec4) GroupNonUniformQuadSwap 43 257 128 - 259: 160(ptr) AccessChain 34(data) 255 47 - Store 259 258 - 260: 6(int) Load 8(invocation) - 262: 261(ptr) AccessChain 34(data) 37 58 38 - 263: 21(int16_t) Load 262 - 264: 21(int16_t) GroupNonUniformQuadBroadcast 43 263 42 - 265: 261(ptr) AccessChain 34(data) 260 58 38 - Store 265 264 - 266: 6(int) Load 8(invocation) - 269: 268(ptr) AccessChain 34(data) 47 58 - 270: 22(i16vec4) Load 269 - 271:267(i16vec2) VectorShuffle 270 270 0 1 - 272:267(i16vec2) GroupNonUniformQuadBroadcast 43 271 42 - 273: 268(ptr) AccessChain 34(data) 266 58 - 274: 22(i16vec4) Load 273 - 275: 22(i16vec4) VectorShuffle 274 272 4 5 2 3 - Store 273 275 + 170: 169(ptr) AccessChain 34(data) 37 47 38 + 171: 19(int8_t) Load 170 + 172: 19(int8_t) GroupNonUniformQuadBroadcast 43 171 42 + 173: 169(ptr) AccessChain 34(data) 168 47 38 + Store 173 172 + 174: 6(int) Load 8(invocation) + 177: 176(ptr) AccessChain 34(data) 47 47 + 178: 20(i8vec4) Load 177 + 179: 175(i8vec2) VectorShuffle 178 178 0 1 + 180: 175(i8vec2) GroupNonUniformQuadBroadcast 43 179 42 + 181: 169(ptr) AccessChain 34(data) 174 47 38 + 182: 19(int8_t) CompositeExtract 180 0 + Store 181 182 + 183: 169(ptr) AccessChain 34(data) 174 47 42 + 184: 19(int8_t) CompositeExtract 180 1 + Store 183 184 + 185: 6(int) Load 8(invocation) + 187: 176(ptr) AccessChain 34(data) 59 47 + 188: 20(i8vec4) Load 187 + 189: 186(i8vec3) VectorShuffle 188 188 0 1 2 + 190: 186(i8vec3) GroupNonUniformQuadBroadcast 43 189 42 + 191: 169(ptr) AccessChain 34(data) 185 47 38 + 192: 19(int8_t) CompositeExtract 190 0 + Store 191 192 + 193: 169(ptr) AccessChain 34(data) 185 47 42 + 194: 19(int8_t) CompositeExtract 190 1 + Store 193 194 + 195: 169(ptr) AccessChain 34(data) 185 47 69 + 196: 19(int8_t) CompositeExtract 190 2 + Store 195 196 + 197: 6(int) Load 8(invocation) + 198: 176(ptr) AccessChain 34(data) 73 47 + 199: 20(i8vec4) Load 198 + 200: 20(i8vec4) GroupNonUniformQuadBroadcast 43 199 42 + 201: 176(ptr) AccessChain 34(data) 197 47 + Store 201 200 + 202: 6(int) Load 8(invocation) + 203: 169(ptr) AccessChain 34(data) 37 47 38 + 204: 19(int8_t) Load 203 + 205: 19(int8_t) GroupNonUniformQuadSwap 43 204 38 + 206: 169(ptr) AccessChain 34(data) 202 47 38 + Store 206 205 + 207: 6(int) Load 8(invocation) + 208: 176(ptr) AccessChain 34(data) 47 47 + 209: 20(i8vec4) Load 208 + 210: 175(i8vec2) VectorShuffle 209 209 0 1 + 211: 175(i8vec2) GroupNonUniformQuadSwap 43 210 38 + 212: 169(ptr) AccessChain 34(data) 207 47 38 + 213: 19(int8_t) CompositeExtract 211 0 + Store 212 213 + 214: 169(ptr) AccessChain 34(data) 207 47 42 + 215: 19(int8_t) CompositeExtract 211 1 + Store 214 215 + 216: 6(int) Load 8(invocation) + 217: 176(ptr) AccessChain 34(data) 59 47 + 218: 20(i8vec4) Load 217 + 219: 186(i8vec3) VectorShuffle 218 218 0 1 2 + 220: 186(i8vec3) GroupNonUniformQuadSwap 43 219 38 + 221: 169(ptr) AccessChain 34(data) 216 47 38 + 222: 19(int8_t) CompositeExtract 220 0 + Store 221 222 + 223: 169(ptr) AccessChain 34(data) 216 47 42 + 224: 19(int8_t) CompositeExtract 220 1 + Store 223 224 + 225: 169(ptr) AccessChain 34(data) 216 47 69 + 226: 19(int8_t) CompositeExtract 220 2 + Store 225 226 + 227: 6(int) Load 8(invocation) + 228: 176(ptr) AccessChain 34(data) 73 47 + 229: 20(i8vec4) Load 228 + 230: 20(i8vec4) GroupNonUniformQuadSwap 43 229 38 + 231: 176(ptr) AccessChain 34(data) 227 47 + Store 231 230 + 232: 6(int) Load 8(invocation) + 233: 169(ptr) AccessChain 34(data) 37 47 38 + 234: 19(int8_t) Load 233 + 235: 19(int8_t) GroupNonUniformQuadSwap 43 234 42 + 236: 169(ptr) AccessChain 34(data) 232 47 38 + Store 236 235 + 237: 6(int) Load 8(invocation) + 238: 176(ptr) AccessChain 34(data) 47 47 + 239: 20(i8vec4) Load 238 + 240: 175(i8vec2) VectorShuffle 239 239 0 1 + 241: 175(i8vec2) GroupNonUniformQuadSwap 43 240 42 + 242: 169(ptr) AccessChain 34(data) 237 47 38 + 243: 19(int8_t) CompositeExtract 241 0 + Store 242 243 + 244: 169(ptr) AccessChain 34(data) 237 47 42 + 245: 19(int8_t) CompositeExtract 241 1 + Store 244 245 + 246: 6(int) Load 8(invocation) + 247: 176(ptr) AccessChain 34(data) 59 47 + 248: 20(i8vec4) Load 247 + 249: 186(i8vec3) VectorShuffle 248 248 0 1 2 + 250: 186(i8vec3) GroupNonUniformQuadSwap 43 249 42 + 251: 169(ptr) AccessChain 34(data) 246 47 38 + 252: 19(int8_t) CompositeExtract 250 0 + Store 251 252 + 253: 169(ptr) AccessChain 34(data) 246 47 42 + 254: 19(int8_t) CompositeExtract 250 1 + Store 253 254 + 255: 169(ptr) AccessChain 34(data) 246 47 69 + 256: 19(int8_t) CompositeExtract 250 2 + Store 255 256 + 257: 6(int) Load 8(invocation) + 258: 176(ptr) AccessChain 34(data) 73 47 + 259: 20(i8vec4) Load 258 + 260: 20(i8vec4) GroupNonUniformQuadSwap 43 259 42 + 261: 176(ptr) AccessChain 34(data) 257 47 + Store 261 260 + 262: 6(int) Load 8(invocation) + 263: 169(ptr) AccessChain 34(data) 37 47 38 + 264: 19(int8_t) Load 263 + 265: 19(int8_t) GroupNonUniformQuadSwap 43 264 69 + 266: 169(ptr) AccessChain 34(data) 262 47 38 + Store 266 265 + 267: 6(int) Load 8(invocation) + 268: 176(ptr) AccessChain 34(data) 47 47 + 269: 20(i8vec4) Load 268 + 270: 175(i8vec2) VectorShuffle 269 269 0 1 + 271: 175(i8vec2) GroupNonUniformQuadSwap 43 270 69 + 272: 169(ptr) AccessChain 34(data) 267 47 38 + 273: 19(int8_t) CompositeExtract 271 0 + Store 272 273 + 274: 169(ptr) AccessChain 34(data) 267 47 42 + 275: 19(int8_t) CompositeExtract 271 1 + Store 274 275 276: 6(int) Load 8(invocation) - 278: 268(ptr) AccessChain 34(data) 58 58 - 279: 22(i16vec4) Load 278 - 280:277(i16vec3) VectorShuffle 279 279 0 1 2 - 281:277(i16vec3) GroupNonUniformQuadBroadcast 43 280 42 - 282: 268(ptr) AccessChain 34(data) 276 58 - 283: 22(i16vec4) Load 282 - 284: 22(i16vec4) VectorShuffle 283 281 4 5 6 3 - Store 282 284 - 285: 6(int) Load 8(invocation) - 286: 268(ptr) AccessChain 34(data) 68 58 - 287: 22(i16vec4) Load 286 - 288: 22(i16vec4) GroupNonUniformQuadBroadcast 43 287 42 - 289: 268(ptr) AccessChain 34(data) 285 58 - Store 289 288 - 290: 6(int) Load 8(invocation) - 291: 261(ptr) AccessChain 34(data) 37 58 38 - 292: 21(int16_t) Load 291 - 293: 21(int16_t) GroupNonUniformQuadSwap 43 292 38 - 294: 261(ptr) AccessChain 34(data) 290 58 38 - Store 294 293 - 295: 6(int) Load 8(invocation) - 296: 268(ptr) AccessChain 34(data) 47 58 - 297: 22(i16vec4) Load 296 - 298:267(i16vec2) VectorShuffle 297 297 0 1 - 299:267(i16vec2) GroupNonUniformQuadSwap 43 298 38 - 300: 268(ptr) AccessChain 34(data) 295 58 - 301: 22(i16vec4) Load 300 - 302: 22(i16vec4) VectorShuffle 301 299 4 5 2 3 - Store 300 302 - 303: 6(int) Load 8(invocation) - 304: 268(ptr) AccessChain 34(data) 58 58 - 305: 22(i16vec4) Load 304 - 306:277(i16vec3) VectorShuffle 305 305 0 1 2 - 307:277(i16vec3) GroupNonUniformQuadSwap 43 306 38 - 308: 268(ptr) AccessChain 34(data) 303 58 - 309: 22(i16vec4) Load 308 - 310: 22(i16vec4) VectorShuffle 309 307 4 5 6 3 - Store 308 310 - 311: 6(int) Load 8(invocation) - 312: 268(ptr) AccessChain 34(data) 68 58 - 313: 22(i16vec4) Load 312 - 314: 22(i16vec4) GroupNonUniformQuadSwap 43 313 38 - 315: 268(ptr) AccessChain 34(data) 311 58 - Store 315 314 - 316: 6(int) Load 8(invocation) - 317: 261(ptr) AccessChain 34(data) 37 58 38 - 318: 21(int16_t) Load 317 - 319: 21(int16_t) GroupNonUniformQuadSwap 43 318 42 - 320: 261(ptr) AccessChain 34(data) 316 58 38 - Store 320 319 + 277: 176(ptr) AccessChain 34(data) 59 47 + 278: 20(i8vec4) Load 277 + 279: 186(i8vec3) VectorShuffle 278 278 0 1 2 + 280: 186(i8vec3) GroupNonUniformQuadSwap 43 279 69 + 281: 169(ptr) AccessChain 34(data) 276 47 38 + 282: 19(int8_t) CompositeExtract 280 0 + Store 281 282 + 283: 169(ptr) AccessChain 34(data) 276 47 42 + 284: 19(int8_t) CompositeExtract 280 1 + Store 283 284 + 285: 169(ptr) AccessChain 34(data) 276 47 69 + 286: 19(int8_t) CompositeExtract 280 2 + Store 285 286 + 287: 6(int) Load 8(invocation) + 288: 176(ptr) AccessChain 34(data) 73 47 + 289: 20(i8vec4) Load 288 + 290: 20(i8vec4) GroupNonUniformQuadSwap 43 289 69 + 291: 176(ptr) AccessChain 34(data) 287 47 + Store 291 290 + 292: 6(int) Load 8(invocation) + 294: 293(ptr) AccessChain 34(data) 37 59 38 + 295: 21(int16_t) Load 294 + 296: 21(int16_t) GroupNonUniformQuadBroadcast 43 295 42 + 297: 293(ptr) AccessChain 34(data) 292 59 38 + Store 297 296 + 298: 6(int) Load 8(invocation) + 301: 300(ptr) AccessChain 34(data) 47 59 + 302: 22(i16vec4) Load 301 + 303:299(i16vec2) VectorShuffle 302 302 0 1 + 304:299(i16vec2) GroupNonUniformQuadBroadcast 43 303 42 + 305: 293(ptr) AccessChain 34(data) 298 59 38 + 306: 21(int16_t) CompositeExtract 304 0 + Store 305 306 + 307: 293(ptr) AccessChain 34(data) 298 59 42 + 308: 21(int16_t) CompositeExtract 304 1 + Store 307 308 + 309: 6(int) Load 8(invocation) + 311: 300(ptr) AccessChain 34(data) 59 59 + 312: 22(i16vec4) Load 311 + 313:310(i16vec3) VectorShuffle 312 312 0 1 2 + 314:310(i16vec3) GroupNonUniformQuadBroadcast 43 313 42 + 315: 293(ptr) AccessChain 34(data) 309 59 38 + 316: 21(int16_t) CompositeExtract 314 0 + Store 315 316 + 317: 293(ptr) AccessChain 34(data) 309 59 42 + 318: 21(int16_t) CompositeExtract 314 1 + Store 317 318 + 319: 293(ptr) AccessChain 34(data) 309 59 69 + 320: 21(int16_t) CompositeExtract 314 2 + Store 319 320 321: 6(int) Load 8(invocation) - 322: 268(ptr) AccessChain 34(data) 47 58 + 322: 300(ptr) AccessChain 34(data) 73 59 323: 22(i16vec4) Load 322 - 324:267(i16vec2) VectorShuffle 323 323 0 1 - 325:267(i16vec2) GroupNonUniformQuadSwap 43 324 42 - 326: 268(ptr) AccessChain 34(data) 321 58 - 327: 22(i16vec4) Load 326 - 328: 22(i16vec4) VectorShuffle 327 325 4 5 2 3 - Store 326 328 - 329: 6(int) Load 8(invocation) - 330: 268(ptr) AccessChain 34(data) 58 58 - 331: 22(i16vec4) Load 330 - 332:277(i16vec3) VectorShuffle 331 331 0 1 2 - 333:277(i16vec3) GroupNonUniformQuadSwap 43 332 42 - 334: 268(ptr) AccessChain 34(data) 329 58 - 335: 22(i16vec4) Load 334 - 336: 22(i16vec4) VectorShuffle 335 333 4 5 6 3 - Store 334 336 - 337: 6(int) Load 8(invocation) - 338: 268(ptr) AccessChain 34(data) 68 58 - 339: 22(i16vec4) Load 338 - 340: 22(i16vec4) GroupNonUniformQuadSwap 43 339 42 - 341: 268(ptr) AccessChain 34(data) 337 58 - Store 341 340 - 342: 6(int) Load 8(invocation) - 343: 261(ptr) AccessChain 34(data) 37 58 38 - 344: 21(int16_t) Load 343 - 345: 21(int16_t) GroupNonUniformQuadSwap 43 344 128 - 346: 261(ptr) AccessChain 34(data) 342 58 38 - Store 346 345 - 347: 6(int) Load 8(invocation) - 348: 268(ptr) AccessChain 34(data) 47 58 - 349: 22(i16vec4) Load 348 - 350:267(i16vec2) VectorShuffle 349 349 0 1 - 351:267(i16vec2) GroupNonUniformQuadSwap 43 350 128 - 352: 268(ptr) AccessChain 34(data) 347 58 + 324: 22(i16vec4) GroupNonUniformQuadBroadcast 43 323 42 + 325: 300(ptr) AccessChain 34(data) 321 59 + Store 325 324 + 326: 6(int) Load 8(invocation) + 327: 293(ptr) AccessChain 34(data) 37 59 38 + 328: 21(int16_t) Load 327 + 329: 21(int16_t) GroupNonUniformQuadSwap 43 328 38 + 330: 293(ptr) AccessChain 34(data) 326 59 38 + Store 330 329 + 331: 6(int) Load 8(invocation) + 332: 300(ptr) AccessChain 34(data) 47 59 + 333: 22(i16vec4) Load 332 + 334:299(i16vec2) VectorShuffle 333 333 0 1 + 335:299(i16vec2) GroupNonUniformQuadSwap 43 334 38 + 336: 293(ptr) AccessChain 34(data) 331 59 38 + 337: 21(int16_t) CompositeExtract 335 0 + Store 336 337 + 338: 293(ptr) AccessChain 34(data) 331 59 42 + 339: 21(int16_t) CompositeExtract 335 1 + Store 338 339 + 340: 6(int) Load 8(invocation) + 341: 300(ptr) AccessChain 34(data) 59 59 + 342: 22(i16vec4) Load 341 + 343:310(i16vec3) VectorShuffle 342 342 0 1 2 + 344:310(i16vec3) GroupNonUniformQuadSwap 43 343 38 + 345: 293(ptr) AccessChain 34(data) 340 59 38 + 346: 21(int16_t) CompositeExtract 344 0 + Store 345 346 + 347: 293(ptr) AccessChain 34(data) 340 59 42 + 348: 21(int16_t) CompositeExtract 344 1 + Store 347 348 + 349: 293(ptr) AccessChain 34(data) 340 59 69 + 350: 21(int16_t) CompositeExtract 344 2 + Store 349 350 + 351: 6(int) Load 8(invocation) + 352: 300(ptr) AccessChain 34(data) 73 59 353: 22(i16vec4) Load 352 - 354: 22(i16vec4) VectorShuffle 353 351 4 5 2 3 - Store 352 354 - 355: 6(int) Load 8(invocation) - 356: 268(ptr) AccessChain 34(data) 58 58 - 357: 22(i16vec4) Load 356 - 358:277(i16vec3) VectorShuffle 357 357 0 1 2 - 359:277(i16vec3) GroupNonUniformQuadSwap 43 358 128 - 360: 268(ptr) AccessChain 34(data) 355 58 - 361: 22(i16vec4) Load 360 - 362: 22(i16vec4) VectorShuffle 361 359 4 5 6 3 - Store 360 362 - 363: 6(int) Load 8(invocation) - 364: 268(ptr) AccessChain 34(data) 68 58 - 365: 22(i16vec4) Load 364 - 366: 22(i16vec4) GroupNonUniformQuadSwap 43 365 128 - 367: 268(ptr) AccessChain 34(data) 363 58 - Store 367 366 - 368: 6(int) Load 8(invocation) - 370: 369(ptr) AccessChain 34(data) 37 68 38 - 371: 23(int16_t) Load 370 - 372: 23(int16_t) GroupNonUniformQuadBroadcast 43 371 42 - 373: 369(ptr) AccessChain 34(data) 368 68 38 - Store 373 372 - 374: 6(int) Load 8(invocation) - 377: 376(ptr) AccessChain 34(data) 47 68 - 378: 24(i16vec4) Load 377 - 379:375(i16vec2) VectorShuffle 378 378 0 1 - 380:375(i16vec2) GroupNonUniformQuadBroadcast 43 379 42 - 381: 376(ptr) AccessChain 34(data) 374 68 - 382: 24(i16vec4) Load 381 - 383: 24(i16vec4) VectorShuffle 382 380 4 5 2 3 - Store 381 383 - 384: 6(int) Load 8(invocation) - 386: 376(ptr) AccessChain 34(data) 58 68 - 387: 24(i16vec4) Load 386 - 388:385(i16vec3) VectorShuffle 387 387 0 1 2 - 389:385(i16vec3) GroupNonUniformQuadBroadcast 43 388 42 - 390: 376(ptr) AccessChain 34(data) 384 68 - 391: 24(i16vec4) Load 390 - 392: 24(i16vec4) VectorShuffle 391 389 4 5 6 3 - Store 390 392 - 393: 6(int) Load 8(invocation) - 394: 376(ptr) AccessChain 34(data) 68 68 - 395: 24(i16vec4) Load 394 - 396: 24(i16vec4) GroupNonUniformQuadBroadcast 43 395 42 - 397: 376(ptr) AccessChain 34(data) 393 68 - Store 397 396 - 398: 6(int) Load 8(invocation) - 399: 369(ptr) AccessChain 34(data) 37 68 38 - 400: 23(int16_t) Load 399 - 401: 23(int16_t) GroupNonUniformQuadSwap 43 400 38 - 402: 369(ptr) AccessChain 34(data) 398 68 38 - Store 402 401 - 403: 6(int) Load 8(invocation) - 404: 376(ptr) AccessChain 34(data) 47 68 - 405: 24(i16vec4) Load 404 - 406:375(i16vec2) VectorShuffle 405 405 0 1 - 407:375(i16vec2) GroupNonUniformQuadSwap 43 406 38 - 408: 376(ptr) AccessChain 34(data) 403 68 - 409: 24(i16vec4) Load 408 - 410: 24(i16vec4) VectorShuffle 409 407 4 5 2 3 - Store 408 410 + 354: 22(i16vec4) GroupNonUniformQuadSwap 43 353 38 + 355: 300(ptr) AccessChain 34(data) 351 59 + Store 355 354 + 356: 6(int) Load 8(invocation) + 357: 293(ptr) AccessChain 34(data) 37 59 38 + 358: 21(int16_t) Load 357 + 359: 21(int16_t) GroupNonUniformQuadSwap 43 358 42 + 360: 293(ptr) AccessChain 34(data) 356 59 38 + Store 360 359 + 361: 6(int) Load 8(invocation) + 362: 300(ptr) AccessChain 34(data) 47 59 + 363: 22(i16vec4) Load 362 + 364:299(i16vec2) VectorShuffle 363 363 0 1 + 365:299(i16vec2) GroupNonUniformQuadSwap 43 364 42 + 366: 293(ptr) AccessChain 34(data) 361 59 38 + 367: 21(int16_t) CompositeExtract 365 0 + Store 366 367 + 368: 293(ptr) AccessChain 34(data) 361 59 42 + 369: 21(int16_t) CompositeExtract 365 1 + Store 368 369 + 370: 6(int) Load 8(invocation) + 371: 300(ptr) AccessChain 34(data) 59 59 + 372: 22(i16vec4) Load 371 + 373:310(i16vec3) VectorShuffle 372 372 0 1 2 + 374:310(i16vec3) GroupNonUniformQuadSwap 43 373 42 + 375: 293(ptr) AccessChain 34(data) 370 59 38 + 376: 21(int16_t) CompositeExtract 374 0 + Store 375 376 + 377: 293(ptr) AccessChain 34(data) 370 59 42 + 378: 21(int16_t) CompositeExtract 374 1 + Store 377 378 + 379: 293(ptr) AccessChain 34(data) 370 59 69 + 380: 21(int16_t) CompositeExtract 374 2 + Store 379 380 + 381: 6(int) Load 8(invocation) + 382: 300(ptr) AccessChain 34(data) 73 59 + 383: 22(i16vec4) Load 382 + 384: 22(i16vec4) GroupNonUniformQuadSwap 43 383 42 + 385: 300(ptr) AccessChain 34(data) 381 59 + Store 385 384 + 386: 6(int) Load 8(invocation) + 387: 293(ptr) AccessChain 34(data) 37 59 38 + 388: 21(int16_t) Load 387 + 389: 21(int16_t) GroupNonUniformQuadSwap 43 388 69 + 390: 293(ptr) AccessChain 34(data) 386 59 38 + Store 390 389 + 391: 6(int) Load 8(invocation) + 392: 300(ptr) AccessChain 34(data) 47 59 + 393: 22(i16vec4) Load 392 + 394:299(i16vec2) VectorShuffle 393 393 0 1 + 395:299(i16vec2) GroupNonUniformQuadSwap 43 394 69 + 396: 293(ptr) AccessChain 34(data) 391 59 38 + 397: 21(int16_t) CompositeExtract 395 0 + Store 396 397 + 398: 293(ptr) AccessChain 34(data) 391 59 42 + 399: 21(int16_t) CompositeExtract 395 1 + Store 398 399 + 400: 6(int) Load 8(invocation) + 401: 300(ptr) AccessChain 34(data) 59 59 + 402: 22(i16vec4) Load 401 + 403:310(i16vec3) VectorShuffle 402 402 0 1 2 + 404:310(i16vec3) GroupNonUniformQuadSwap 43 403 69 + 405: 293(ptr) AccessChain 34(data) 400 59 38 + 406: 21(int16_t) CompositeExtract 404 0 + Store 405 406 + 407: 293(ptr) AccessChain 34(data) 400 59 42 + 408: 21(int16_t) CompositeExtract 404 1 + Store 407 408 + 409: 293(ptr) AccessChain 34(data) 400 59 69 + 410: 21(int16_t) CompositeExtract 404 2 + Store 409 410 411: 6(int) Load 8(invocation) - 412: 376(ptr) AccessChain 34(data) 58 68 - 413: 24(i16vec4) Load 412 - 414:385(i16vec3) VectorShuffle 413 413 0 1 2 - 415:385(i16vec3) GroupNonUniformQuadSwap 43 414 38 - 416: 376(ptr) AccessChain 34(data) 411 68 - 417: 24(i16vec4) Load 416 - 418: 24(i16vec4) VectorShuffle 417 415 4 5 6 3 - Store 416 418 - 419: 6(int) Load 8(invocation) - 420: 376(ptr) AccessChain 34(data) 68 68 - 421: 24(i16vec4) Load 420 - 422: 24(i16vec4) GroupNonUniformQuadSwap 43 421 38 - 423: 376(ptr) AccessChain 34(data) 419 68 - Store 423 422 - 424: 6(int) Load 8(invocation) - 425: 369(ptr) AccessChain 34(data) 37 68 38 - 426: 23(int16_t) Load 425 - 427: 23(int16_t) GroupNonUniformQuadSwap 43 426 42 - 428: 369(ptr) AccessChain 34(data) 424 68 38 - Store 428 427 - 429: 6(int) Load 8(invocation) - 430: 376(ptr) AccessChain 34(data) 47 68 - 431: 24(i16vec4) Load 430 - 432:375(i16vec2) VectorShuffle 431 431 0 1 - 433:375(i16vec2) GroupNonUniformQuadSwap 43 432 42 - 434: 376(ptr) AccessChain 34(data) 429 68 - 435: 24(i16vec4) Load 434 - 436: 24(i16vec4) VectorShuffle 435 433 4 5 2 3 - Store 434 436 - 437: 6(int) Load 8(invocation) - 438: 376(ptr) AccessChain 34(data) 58 68 - 439: 24(i16vec4) Load 438 - 440:385(i16vec3) VectorShuffle 439 439 0 1 2 - 441:385(i16vec3) GroupNonUniformQuadSwap 43 440 42 - 442: 376(ptr) AccessChain 34(data) 437 68 - 443: 24(i16vec4) Load 442 - 444: 24(i16vec4) VectorShuffle 443 441 4 5 6 3 - Store 442 444 + 412: 300(ptr) AccessChain 34(data) 73 59 + 413: 22(i16vec4) Load 412 + 414: 22(i16vec4) GroupNonUniformQuadSwap 43 413 69 + 415: 300(ptr) AccessChain 34(data) 411 59 + Store 415 414 + 416: 6(int) Load 8(invocation) + 418: 417(ptr) AccessChain 34(data) 37 73 38 + 419: 23(int16_t) Load 418 + 420: 23(int16_t) GroupNonUniformQuadBroadcast 43 419 42 + 421: 417(ptr) AccessChain 34(data) 416 73 38 + Store 421 420 + 422: 6(int) Load 8(invocation) + 425: 424(ptr) AccessChain 34(data) 47 73 + 426: 24(i16vec4) Load 425 + 427:423(i16vec2) VectorShuffle 426 426 0 1 + 428:423(i16vec2) GroupNonUniformQuadBroadcast 43 427 42 + 429: 417(ptr) AccessChain 34(data) 422 73 38 + 430: 23(int16_t) CompositeExtract 428 0 + Store 429 430 + 431: 417(ptr) AccessChain 34(data) 422 73 42 + 432: 23(int16_t) CompositeExtract 428 1 + Store 431 432 + 433: 6(int) Load 8(invocation) + 435: 424(ptr) AccessChain 34(data) 59 73 + 436: 24(i16vec4) Load 435 + 437:434(i16vec3) VectorShuffle 436 436 0 1 2 + 438:434(i16vec3) GroupNonUniformQuadBroadcast 43 437 42 + 439: 417(ptr) AccessChain 34(data) 433 73 38 + 440: 23(int16_t) CompositeExtract 438 0 + Store 439 440 + 441: 417(ptr) AccessChain 34(data) 433 73 42 + 442: 23(int16_t) CompositeExtract 438 1 + Store 441 442 + 443: 417(ptr) AccessChain 34(data) 433 73 69 + 444: 23(int16_t) CompositeExtract 438 2 + Store 443 444 445: 6(int) Load 8(invocation) - 446: 376(ptr) AccessChain 34(data) 68 68 + 446: 424(ptr) AccessChain 34(data) 73 73 447: 24(i16vec4) Load 446 - 448: 24(i16vec4) GroupNonUniformQuadSwap 43 447 42 - 449: 376(ptr) AccessChain 34(data) 445 68 + 448: 24(i16vec4) GroupNonUniformQuadBroadcast 43 447 42 + 449: 424(ptr) AccessChain 34(data) 445 73 Store 449 448 450: 6(int) Load 8(invocation) - 451: 369(ptr) AccessChain 34(data) 37 68 38 + 451: 417(ptr) AccessChain 34(data) 37 73 38 452: 23(int16_t) Load 451 - 453: 23(int16_t) GroupNonUniformQuadSwap 43 452 128 - 454: 369(ptr) AccessChain 34(data) 450 68 38 + 453: 23(int16_t) GroupNonUniformQuadSwap 43 452 38 + 454: 417(ptr) AccessChain 34(data) 450 73 38 Store 454 453 455: 6(int) Load 8(invocation) - 456: 376(ptr) AccessChain 34(data) 47 68 + 456: 424(ptr) AccessChain 34(data) 47 73 457: 24(i16vec4) Load 456 - 458:375(i16vec2) VectorShuffle 457 457 0 1 - 459:375(i16vec2) GroupNonUniformQuadSwap 43 458 128 - 460: 376(ptr) AccessChain 34(data) 455 68 - 461: 24(i16vec4) Load 460 - 462: 24(i16vec4) VectorShuffle 461 459 4 5 2 3 - Store 460 462 - 463: 6(int) Load 8(invocation) - 464: 376(ptr) AccessChain 34(data) 58 68 - 465: 24(i16vec4) Load 464 - 466:385(i16vec3) VectorShuffle 465 465 0 1 2 - 467:385(i16vec3) GroupNonUniformQuadSwap 43 466 128 - 468: 376(ptr) AccessChain 34(data) 463 68 - 469: 24(i16vec4) Load 468 - 470: 24(i16vec4) VectorShuffle 469 467 4 5 6 3 - Store 468 470 - 471: 6(int) Load 8(invocation) - 472: 376(ptr) AccessChain 34(data) 68 68 - 473: 24(i16vec4) Load 472 - 474: 24(i16vec4) GroupNonUniformQuadSwap 43 473 128 - 475: 376(ptr) AccessChain 34(data) 471 68 - Store 475 474 - 476: 6(int) Load 8(invocation) - 479: 478(ptr) AccessChain 34(data) 37 477 38 - 480: 25(int64_t) Load 479 - 481: 25(int64_t) GroupNonUniformQuadBroadcast 43 480 42 - 482: 478(ptr) AccessChain 34(data) 476 477 38 - Store 482 481 - 483: 6(int) Load 8(invocation) - 486: 485(ptr) AccessChain 34(data) 47 477 - 487: 26(i64vec4) Load 486 - 488:484(i64vec2) VectorShuffle 487 487 0 1 - 489:484(i64vec2) GroupNonUniformQuadBroadcast 43 488 42 - 490: 485(ptr) AccessChain 34(data) 483 477 - 491: 26(i64vec4) Load 490 - 492: 26(i64vec4) VectorShuffle 491 489 4 5 2 3 - Store 490 492 - 493: 6(int) Load 8(invocation) - 495: 485(ptr) AccessChain 34(data) 58 477 - 496: 26(i64vec4) Load 495 - 497:494(i64vec3) VectorShuffle 496 496 0 1 2 - 498:494(i64vec3) GroupNonUniformQuadBroadcast 43 497 42 - 499: 485(ptr) AccessChain 34(data) 493 477 - 500: 26(i64vec4) Load 499 - 501: 26(i64vec4) VectorShuffle 500 498 4 5 6 3 - Store 499 501 - 502: 6(int) Load 8(invocation) - 503: 485(ptr) AccessChain 34(data) 68 477 - 504: 26(i64vec4) Load 503 - 505: 26(i64vec4) GroupNonUniformQuadBroadcast 43 504 42 - 506: 485(ptr) AccessChain 34(data) 502 477 - Store 506 505 - 507: 6(int) Load 8(invocation) - 508: 478(ptr) AccessChain 34(data) 37 477 38 - 509: 25(int64_t) Load 508 - 510: 25(int64_t) GroupNonUniformQuadSwap 43 509 38 - 511: 478(ptr) AccessChain 34(data) 507 477 38 - Store 511 510 - 512: 6(int) Load 8(invocation) - 513: 485(ptr) AccessChain 34(data) 47 477 - 514: 26(i64vec4) Load 513 - 515:484(i64vec2) VectorShuffle 514 514 0 1 - 516:484(i64vec2) GroupNonUniformQuadSwap 43 515 38 - 517: 485(ptr) AccessChain 34(data) 512 477 - 518: 26(i64vec4) Load 517 - 519: 26(i64vec4) VectorShuffle 518 516 4 5 2 3 - Store 517 519 - 520: 6(int) Load 8(invocation) - 521: 485(ptr) AccessChain 34(data) 58 477 - 522: 26(i64vec4) Load 521 - 523:494(i64vec3) VectorShuffle 522 522 0 1 2 - 524:494(i64vec3) GroupNonUniformQuadSwap 43 523 38 - 525: 485(ptr) AccessChain 34(data) 520 477 - 526: 26(i64vec4) Load 525 - 527: 26(i64vec4) VectorShuffle 526 524 4 5 6 3 - Store 525 527 - 528: 6(int) Load 8(invocation) - 529: 485(ptr) AccessChain 34(data) 68 477 - 530: 26(i64vec4) Load 529 - 531: 26(i64vec4) GroupNonUniformQuadSwap 43 530 38 - 532: 485(ptr) AccessChain 34(data) 528 477 - Store 532 531 - 533: 6(int) Load 8(invocation) - 534: 478(ptr) AccessChain 34(data) 37 477 38 - 535: 25(int64_t) Load 534 - 536: 25(int64_t) GroupNonUniformQuadSwap 43 535 42 - 537: 478(ptr) AccessChain 34(data) 533 477 38 - Store 537 536 - 538: 6(int) Load 8(invocation) - 539: 485(ptr) AccessChain 34(data) 47 477 - 540: 26(i64vec4) Load 539 - 541:484(i64vec2) VectorShuffle 540 540 0 1 - 542:484(i64vec2) GroupNonUniformQuadSwap 43 541 42 - 543: 485(ptr) AccessChain 34(data) 538 477 - 544: 26(i64vec4) Load 543 - 545: 26(i64vec4) VectorShuffle 544 542 4 5 2 3 - Store 543 545 - 546: 6(int) Load 8(invocation) - 547: 485(ptr) AccessChain 34(data) 58 477 - 548: 26(i64vec4) Load 547 - 549:494(i64vec3) VectorShuffle 548 548 0 1 2 - 550:494(i64vec3) GroupNonUniformQuadSwap 43 549 42 - 551: 485(ptr) AccessChain 34(data) 546 477 - 552: 26(i64vec4) Load 551 - 553: 26(i64vec4) VectorShuffle 552 550 4 5 6 3 - Store 551 553 - 554: 6(int) Load 8(invocation) - 555: 485(ptr) AccessChain 34(data) 68 477 - 556: 26(i64vec4) Load 555 - 557: 26(i64vec4) GroupNonUniformQuadSwap 43 556 42 - 558: 485(ptr) AccessChain 34(data) 554 477 - Store 558 557 - 559: 6(int) Load 8(invocation) - 560: 478(ptr) AccessChain 34(data) 37 477 38 - 561: 25(int64_t) Load 560 - 562: 25(int64_t) GroupNonUniformQuadSwap 43 561 128 - 563: 478(ptr) AccessChain 34(data) 559 477 38 - Store 563 562 - 564: 6(int) Load 8(invocation) - 565: 485(ptr) AccessChain 34(data) 47 477 - 566: 26(i64vec4) Load 565 - 567:484(i64vec2) VectorShuffle 566 566 0 1 - 568:484(i64vec2) GroupNonUniformQuadSwap 43 567 128 - 569: 485(ptr) AccessChain 34(data) 564 477 - 570: 26(i64vec4) Load 569 - 571: 26(i64vec4) VectorShuffle 570 568 4 5 2 3 - Store 569 571 - 572: 6(int) Load 8(invocation) - 573: 485(ptr) AccessChain 34(data) 58 477 - 574: 26(i64vec4) Load 573 - 575:494(i64vec3) VectorShuffle 574 574 0 1 2 - 576:494(i64vec3) GroupNonUniformQuadSwap 43 575 128 - 577: 485(ptr) AccessChain 34(data) 572 477 - 578: 26(i64vec4) Load 577 - 579: 26(i64vec4) VectorShuffle 578 576 4 5 6 3 - Store 577 579 + 458:423(i16vec2) VectorShuffle 457 457 0 1 + 459:423(i16vec2) GroupNonUniformQuadSwap 43 458 38 + 460: 417(ptr) AccessChain 34(data) 455 73 38 + 461: 23(int16_t) CompositeExtract 459 0 + Store 460 461 + 462: 417(ptr) AccessChain 34(data) 455 73 42 + 463: 23(int16_t) CompositeExtract 459 1 + Store 462 463 + 464: 6(int) Load 8(invocation) + 465: 424(ptr) AccessChain 34(data) 59 73 + 466: 24(i16vec4) Load 465 + 467:434(i16vec3) VectorShuffle 466 466 0 1 2 + 468:434(i16vec3) GroupNonUniformQuadSwap 43 467 38 + 469: 417(ptr) AccessChain 34(data) 464 73 38 + 470: 23(int16_t) CompositeExtract 468 0 + Store 469 470 + 471: 417(ptr) AccessChain 34(data) 464 73 42 + 472: 23(int16_t) CompositeExtract 468 1 + Store 471 472 + 473: 417(ptr) AccessChain 34(data) 464 73 69 + 474: 23(int16_t) CompositeExtract 468 2 + Store 473 474 + 475: 6(int) Load 8(invocation) + 476: 424(ptr) AccessChain 34(data) 73 73 + 477: 24(i16vec4) Load 476 + 478: 24(i16vec4) GroupNonUniformQuadSwap 43 477 38 + 479: 424(ptr) AccessChain 34(data) 475 73 + Store 479 478 + 480: 6(int) Load 8(invocation) + 481: 417(ptr) AccessChain 34(data) 37 73 38 + 482: 23(int16_t) Load 481 + 483: 23(int16_t) GroupNonUniformQuadSwap 43 482 42 + 484: 417(ptr) AccessChain 34(data) 480 73 38 + Store 484 483 + 485: 6(int) Load 8(invocation) + 486: 424(ptr) AccessChain 34(data) 47 73 + 487: 24(i16vec4) Load 486 + 488:423(i16vec2) VectorShuffle 487 487 0 1 + 489:423(i16vec2) GroupNonUniformQuadSwap 43 488 42 + 490: 417(ptr) AccessChain 34(data) 485 73 38 + 491: 23(int16_t) CompositeExtract 489 0 + Store 490 491 + 492: 417(ptr) AccessChain 34(data) 485 73 42 + 493: 23(int16_t) CompositeExtract 489 1 + Store 492 493 + 494: 6(int) Load 8(invocation) + 495: 424(ptr) AccessChain 34(data) 59 73 + 496: 24(i16vec4) Load 495 + 497:434(i16vec3) VectorShuffle 496 496 0 1 2 + 498:434(i16vec3) GroupNonUniformQuadSwap 43 497 42 + 499: 417(ptr) AccessChain 34(data) 494 73 38 + 500: 23(int16_t) CompositeExtract 498 0 + Store 499 500 + 501: 417(ptr) AccessChain 34(data) 494 73 42 + 502: 23(int16_t) CompositeExtract 498 1 + Store 501 502 + 503: 417(ptr) AccessChain 34(data) 494 73 69 + 504: 23(int16_t) CompositeExtract 498 2 + Store 503 504 + 505: 6(int) Load 8(invocation) + 506: 424(ptr) AccessChain 34(data) 73 73 + 507: 24(i16vec4) Load 506 + 508: 24(i16vec4) GroupNonUniformQuadSwap 43 507 42 + 509: 424(ptr) AccessChain 34(data) 505 73 + Store 509 508 + 510: 6(int) Load 8(invocation) + 511: 417(ptr) AccessChain 34(data) 37 73 38 + 512: 23(int16_t) Load 511 + 513: 23(int16_t) GroupNonUniformQuadSwap 43 512 69 + 514: 417(ptr) AccessChain 34(data) 510 73 38 + Store 514 513 + 515: 6(int) Load 8(invocation) + 516: 424(ptr) AccessChain 34(data) 47 73 + 517: 24(i16vec4) Load 516 + 518:423(i16vec2) VectorShuffle 517 517 0 1 + 519:423(i16vec2) GroupNonUniformQuadSwap 43 518 69 + 520: 417(ptr) AccessChain 34(data) 515 73 38 + 521: 23(int16_t) CompositeExtract 519 0 + Store 520 521 + 522: 417(ptr) AccessChain 34(data) 515 73 42 + 523: 23(int16_t) CompositeExtract 519 1 + Store 522 523 + 524: 6(int) Load 8(invocation) + 525: 424(ptr) AccessChain 34(data) 59 73 + 526: 24(i16vec4) Load 525 + 527:434(i16vec3) VectorShuffle 526 526 0 1 2 + 528:434(i16vec3) GroupNonUniformQuadSwap 43 527 69 + 529: 417(ptr) AccessChain 34(data) 524 73 38 + 530: 23(int16_t) CompositeExtract 528 0 + Store 529 530 + 531: 417(ptr) AccessChain 34(data) 524 73 42 + 532: 23(int16_t) CompositeExtract 528 1 + Store 531 532 + 533: 417(ptr) AccessChain 34(data) 524 73 69 + 534: 23(int16_t) CompositeExtract 528 2 + Store 533 534 + 535: 6(int) Load 8(invocation) + 536: 424(ptr) AccessChain 34(data) 73 73 + 537: 24(i16vec4) Load 536 + 538: 24(i16vec4) GroupNonUniformQuadSwap 43 537 69 + 539: 424(ptr) AccessChain 34(data) 535 73 + Store 539 538 + 540: 6(int) Load 8(invocation) + 543: 542(ptr) AccessChain 34(data) 37 541 38 + 544: 25(int64_t) Load 543 + 545: 25(int64_t) GroupNonUniformQuadBroadcast 43 544 42 + 546: 542(ptr) AccessChain 34(data) 540 541 38 + Store 546 545 + 547: 6(int) Load 8(invocation) + 550: 549(ptr) AccessChain 34(data) 47 541 + 551: 26(i64vec4) Load 550 + 552:548(i64vec2) VectorShuffle 551 551 0 1 + 553:548(i64vec2) GroupNonUniformQuadBroadcast 43 552 42 + 554: 542(ptr) AccessChain 34(data) 547 541 38 + 555: 25(int64_t) CompositeExtract 553 0 + Store 554 555 + 556: 542(ptr) AccessChain 34(data) 547 541 42 + 557: 25(int64_t) CompositeExtract 553 1 + Store 556 557 + 558: 6(int) Load 8(invocation) + 560: 549(ptr) AccessChain 34(data) 59 541 + 561: 26(i64vec4) Load 560 + 562:559(i64vec3) VectorShuffle 561 561 0 1 2 + 563:559(i64vec3) GroupNonUniformQuadBroadcast 43 562 42 + 564: 542(ptr) AccessChain 34(data) 558 541 38 + 565: 25(int64_t) CompositeExtract 563 0 + Store 564 565 + 566: 542(ptr) AccessChain 34(data) 558 541 42 + 567: 25(int64_t) CompositeExtract 563 1 + Store 566 567 + 568: 542(ptr) AccessChain 34(data) 558 541 69 + 569: 25(int64_t) CompositeExtract 563 2 + Store 568 569 + 570: 6(int) Load 8(invocation) + 571: 549(ptr) AccessChain 34(data) 73 541 + 572: 26(i64vec4) Load 571 + 573: 26(i64vec4) GroupNonUniformQuadBroadcast 43 572 42 + 574: 549(ptr) AccessChain 34(data) 570 541 + Store 574 573 + 575: 6(int) Load 8(invocation) + 576: 542(ptr) AccessChain 34(data) 37 541 38 + 577: 25(int64_t) Load 576 + 578: 25(int64_t) GroupNonUniformQuadSwap 43 577 38 + 579: 542(ptr) AccessChain 34(data) 575 541 38 + Store 579 578 580: 6(int) Load 8(invocation) - 581: 485(ptr) AccessChain 34(data) 68 477 + 581: 549(ptr) AccessChain 34(data) 47 541 582: 26(i64vec4) Load 581 - 583: 26(i64vec4) GroupNonUniformQuadSwap 43 582 128 - 584: 485(ptr) AccessChain 34(data) 580 477 - Store 584 583 - 585: 6(int) Load 8(invocation) - 588: 587(ptr) AccessChain 34(data) 37 586 38 - 589: 27(int64_t) Load 588 - 590: 27(int64_t) GroupNonUniformQuadBroadcast 43 589 42 - 591: 587(ptr) AccessChain 34(data) 585 586 38 - Store 591 590 - 592: 6(int) Load 8(invocation) - 595: 594(ptr) AccessChain 34(data) 47 586 - 596: 28(i64vec4) Load 595 - 597:593(i64vec2) VectorShuffle 596 596 0 1 - 598:593(i64vec2) GroupNonUniformQuadBroadcast 43 597 42 - 599: 594(ptr) AccessChain 34(data) 592 586 - 600: 28(i64vec4) Load 599 - 601: 28(i64vec4) VectorShuffle 600 598 4 5 2 3 - Store 599 601 - 602: 6(int) Load 8(invocation) - 604: 594(ptr) AccessChain 34(data) 58 586 - 605: 28(i64vec4) Load 604 - 606:603(i64vec3) VectorShuffle 605 605 0 1 2 - 607:603(i64vec3) GroupNonUniformQuadBroadcast 43 606 42 - 608: 594(ptr) AccessChain 34(data) 602 586 - 609: 28(i64vec4) Load 608 - 610: 28(i64vec4) VectorShuffle 609 607 4 5 6 3 - Store 608 610 - 611: 6(int) Load 8(invocation) - 612: 594(ptr) AccessChain 34(data) 68 586 - 613: 28(i64vec4) Load 612 - 614: 28(i64vec4) GroupNonUniformQuadBroadcast 43 613 42 - 615: 594(ptr) AccessChain 34(data) 611 586 - Store 615 614 - 616: 6(int) Load 8(invocation) - 617: 587(ptr) AccessChain 34(data) 37 586 38 - 618: 27(int64_t) Load 617 - 619: 27(int64_t) GroupNonUniformQuadSwap 43 618 38 - 620: 587(ptr) AccessChain 34(data) 616 586 38 - Store 620 619 - 621: 6(int) Load 8(invocation) - 622: 594(ptr) AccessChain 34(data) 47 586 - 623: 28(i64vec4) Load 622 - 624:593(i64vec2) VectorShuffle 623 623 0 1 - 625:593(i64vec2) GroupNonUniformQuadSwap 43 624 38 - 626: 594(ptr) AccessChain 34(data) 621 586 - 627: 28(i64vec4) Load 626 - 628: 28(i64vec4) VectorShuffle 627 625 4 5 2 3 - Store 626 628 - 629: 6(int) Load 8(invocation) - 630: 594(ptr) AccessChain 34(data) 58 586 - 631: 28(i64vec4) Load 630 - 632:603(i64vec3) VectorShuffle 631 631 0 1 2 - 633:603(i64vec3) GroupNonUniformQuadSwap 43 632 38 - 634: 594(ptr) AccessChain 34(data) 629 586 - 635: 28(i64vec4) Load 634 - 636: 28(i64vec4) VectorShuffle 635 633 4 5 6 3 - Store 634 636 - 637: 6(int) Load 8(invocation) - 638: 594(ptr) AccessChain 34(data) 68 586 - 639: 28(i64vec4) Load 638 - 640: 28(i64vec4) GroupNonUniformQuadSwap 43 639 38 - 641: 594(ptr) AccessChain 34(data) 637 586 - Store 641 640 - 642: 6(int) Load 8(invocation) - 643: 587(ptr) AccessChain 34(data) 37 586 38 - 644: 27(int64_t) Load 643 - 645: 27(int64_t) GroupNonUniformQuadSwap 43 644 42 - 646: 587(ptr) AccessChain 34(data) 642 586 38 - Store 646 645 - 647: 6(int) Load 8(invocation) - 648: 594(ptr) AccessChain 34(data) 47 586 - 649: 28(i64vec4) Load 648 - 650:593(i64vec2) VectorShuffle 649 649 0 1 - 651:593(i64vec2) GroupNonUniformQuadSwap 43 650 42 - 652: 594(ptr) AccessChain 34(data) 647 586 - 653: 28(i64vec4) Load 652 - 654: 28(i64vec4) VectorShuffle 653 651 4 5 2 3 - Store 652 654 - 655: 6(int) Load 8(invocation) - 656: 594(ptr) AccessChain 34(data) 58 586 - 657: 28(i64vec4) Load 656 - 658:603(i64vec3) VectorShuffle 657 657 0 1 2 - 659:603(i64vec3) GroupNonUniformQuadSwap 43 658 42 - 660: 594(ptr) AccessChain 34(data) 655 586 - 661: 28(i64vec4) Load 660 - 662: 28(i64vec4) VectorShuffle 661 659 4 5 6 3 - Store 660 662 - 663: 6(int) Load 8(invocation) - 664: 594(ptr) AccessChain 34(data) 68 586 - 665: 28(i64vec4) Load 664 - 666: 28(i64vec4) GroupNonUniformQuadSwap 43 665 42 - 667: 594(ptr) AccessChain 34(data) 663 586 - Store 667 666 - 668: 6(int) Load 8(invocation) - 669: 587(ptr) AccessChain 34(data) 37 586 38 - 670: 27(int64_t) Load 669 - 671: 27(int64_t) GroupNonUniformQuadSwap 43 670 128 - 672: 587(ptr) AccessChain 34(data) 668 586 38 - Store 672 671 - 673: 6(int) Load 8(invocation) - 674: 594(ptr) AccessChain 34(data) 47 586 - 675: 28(i64vec4) Load 674 - 676:593(i64vec2) VectorShuffle 675 675 0 1 - 677:593(i64vec2) GroupNonUniformQuadSwap 43 676 128 - 678: 594(ptr) AccessChain 34(data) 673 586 - 679: 28(i64vec4) Load 678 - 680: 28(i64vec4) VectorShuffle 679 677 4 5 2 3 - Store 678 680 - 681: 6(int) Load 8(invocation) - 682: 594(ptr) AccessChain 34(data) 58 586 - 683: 28(i64vec4) Load 682 - 684:603(i64vec3) VectorShuffle 683 683 0 1 2 - 685:603(i64vec3) GroupNonUniformQuadSwap 43 684 128 - 686: 594(ptr) AccessChain 34(data) 681 586 - 687: 28(i64vec4) Load 686 - 688: 28(i64vec4) VectorShuffle 687 685 4 5 6 3 - Store 686 688 - 689: 6(int) Load 8(invocation) - 690: 594(ptr) AccessChain 34(data) 68 586 - 691: 28(i64vec4) Load 690 - 692: 28(i64vec4) GroupNonUniformQuadSwap 43 691 128 - 693: 594(ptr) AccessChain 34(data) 689 586 - Store 693 692 - 694: 6(int) Load 8(invocation) - 697: 696(ptr) AccessChain 34(data) 37 695 38 - 698:29(float16_t) Load 697 - 699:29(float16_t) GroupNonUniformQuadBroadcast 43 698 42 - 700: 696(ptr) AccessChain 34(data) 694 695 38 - Store 700 699 - 701: 6(int) Load 8(invocation) - 704: 703(ptr) AccessChain 34(data) 47 695 - 705: 30(f16vec4) Load 704 - 706:702(f16vec2) VectorShuffle 705 705 0 1 - 707:702(f16vec2) GroupNonUniformQuadBroadcast 43 706 42 - 708: 703(ptr) AccessChain 34(data) 701 695 - 709: 30(f16vec4) Load 708 - 710: 30(f16vec4) VectorShuffle 709 707 4 5 2 3 - Store 708 710 - 711: 6(int) Load 8(invocation) - 713: 703(ptr) AccessChain 34(data) 58 695 - 714: 30(f16vec4) Load 713 - 715:712(f16vec3) VectorShuffle 714 714 0 1 2 - 716:712(f16vec3) GroupNonUniformQuadBroadcast 43 715 42 - 717: 703(ptr) AccessChain 34(data) 711 695 - 718: 30(f16vec4) Load 717 - 719: 30(f16vec4) VectorShuffle 718 716 4 5 6 3 - Store 717 719 - 720: 6(int) Load 8(invocation) - 721: 703(ptr) AccessChain 34(data) 68 695 - 722: 30(f16vec4) Load 721 - 723: 30(f16vec4) GroupNonUniformQuadBroadcast 43 722 42 - 724: 703(ptr) AccessChain 34(data) 720 695 - Store 724 723 + 583:548(i64vec2) VectorShuffle 582 582 0 1 + 584:548(i64vec2) GroupNonUniformQuadSwap 43 583 38 + 585: 542(ptr) AccessChain 34(data) 580 541 38 + 586: 25(int64_t) CompositeExtract 584 0 + Store 585 586 + 587: 542(ptr) AccessChain 34(data) 580 541 42 + 588: 25(int64_t) CompositeExtract 584 1 + Store 587 588 + 589: 6(int) Load 8(invocation) + 590: 549(ptr) AccessChain 34(data) 59 541 + 591: 26(i64vec4) Load 590 + 592:559(i64vec3) VectorShuffle 591 591 0 1 2 + 593:559(i64vec3) GroupNonUniformQuadSwap 43 592 38 + 594: 542(ptr) AccessChain 34(data) 589 541 38 + 595: 25(int64_t) CompositeExtract 593 0 + Store 594 595 + 596: 542(ptr) AccessChain 34(data) 589 541 42 + 597: 25(int64_t) CompositeExtract 593 1 + Store 596 597 + 598: 542(ptr) AccessChain 34(data) 589 541 69 + 599: 25(int64_t) CompositeExtract 593 2 + Store 598 599 + 600: 6(int) Load 8(invocation) + 601: 549(ptr) AccessChain 34(data) 73 541 + 602: 26(i64vec4) Load 601 + 603: 26(i64vec4) GroupNonUniformQuadSwap 43 602 38 + 604: 549(ptr) AccessChain 34(data) 600 541 + Store 604 603 + 605: 6(int) Load 8(invocation) + 606: 542(ptr) AccessChain 34(data) 37 541 38 + 607: 25(int64_t) Load 606 + 608: 25(int64_t) GroupNonUniformQuadSwap 43 607 42 + 609: 542(ptr) AccessChain 34(data) 605 541 38 + Store 609 608 + 610: 6(int) Load 8(invocation) + 611: 549(ptr) AccessChain 34(data) 47 541 + 612: 26(i64vec4) Load 611 + 613:548(i64vec2) VectorShuffle 612 612 0 1 + 614:548(i64vec2) GroupNonUniformQuadSwap 43 613 42 + 615: 542(ptr) AccessChain 34(data) 610 541 38 + 616: 25(int64_t) CompositeExtract 614 0 + Store 615 616 + 617: 542(ptr) AccessChain 34(data) 610 541 42 + 618: 25(int64_t) CompositeExtract 614 1 + Store 617 618 + 619: 6(int) Load 8(invocation) + 620: 549(ptr) AccessChain 34(data) 59 541 + 621: 26(i64vec4) Load 620 + 622:559(i64vec3) VectorShuffle 621 621 0 1 2 + 623:559(i64vec3) GroupNonUniformQuadSwap 43 622 42 + 624: 542(ptr) AccessChain 34(data) 619 541 38 + 625: 25(int64_t) CompositeExtract 623 0 + Store 624 625 + 626: 542(ptr) AccessChain 34(data) 619 541 42 + 627: 25(int64_t) CompositeExtract 623 1 + Store 626 627 + 628: 542(ptr) AccessChain 34(data) 619 541 69 + 629: 25(int64_t) CompositeExtract 623 2 + Store 628 629 + 630: 6(int) Load 8(invocation) + 631: 549(ptr) AccessChain 34(data) 73 541 + 632: 26(i64vec4) Load 631 + 633: 26(i64vec4) GroupNonUniformQuadSwap 43 632 42 + 634: 549(ptr) AccessChain 34(data) 630 541 + Store 634 633 + 635: 6(int) Load 8(invocation) + 636: 542(ptr) AccessChain 34(data) 37 541 38 + 637: 25(int64_t) Load 636 + 638: 25(int64_t) GroupNonUniformQuadSwap 43 637 69 + 639: 542(ptr) AccessChain 34(data) 635 541 38 + Store 639 638 + 640: 6(int) Load 8(invocation) + 641: 549(ptr) AccessChain 34(data) 47 541 + 642: 26(i64vec4) Load 641 + 643:548(i64vec2) VectorShuffle 642 642 0 1 + 644:548(i64vec2) GroupNonUniformQuadSwap 43 643 69 + 645: 542(ptr) AccessChain 34(data) 640 541 38 + 646: 25(int64_t) CompositeExtract 644 0 + Store 645 646 + 647: 542(ptr) AccessChain 34(data) 640 541 42 + 648: 25(int64_t) CompositeExtract 644 1 + Store 647 648 + 649: 6(int) Load 8(invocation) + 650: 549(ptr) AccessChain 34(data) 59 541 + 651: 26(i64vec4) Load 650 + 652:559(i64vec3) VectorShuffle 651 651 0 1 2 + 653:559(i64vec3) GroupNonUniformQuadSwap 43 652 69 + 654: 542(ptr) AccessChain 34(data) 649 541 38 + 655: 25(int64_t) CompositeExtract 653 0 + Store 654 655 + 656: 542(ptr) AccessChain 34(data) 649 541 42 + 657: 25(int64_t) CompositeExtract 653 1 + Store 656 657 + 658: 542(ptr) AccessChain 34(data) 649 541 69 + 659: 25(int64_t) CompositeExtract 653 2 + Store 658 659 + 660: 6(int) Load 8(invocation) + 661: 549(ptr) AccessChain 34(data) 73 541 + 662: 26(i64vec4) Load 661 + 663: 26(i64vec4) GroupNonUniformQuadSwap 43 662 69 + 664: 549(ptr) AccessChain 34(data) 660 541 + Store 664 663 + 665: 6(int) Load 8(invocation) + 668: 667(ptr) AccessChain 34(data) 37 666 38 + 669: 27(int64_t) Load 668 + 670: 27(int64_t) GroupNonUniformQuadBroadcast 43 669 42 + 671: 667(ptr) AccessChain 34(data) 665 666 38 + Store 671 670 + 672: 6(int) Load 8(invocation) + 675: 674(ptr) AccessChain 34(data) 47 666 + 676: 28(i64vec4) Load 675 + 677:673(i64vec2) VectorShuffle 676 676 0 1 + 678:673(i64vec2) GroupNonUniformQuadBroadcast 43 677 42 + 679: 667(ptr) AccessChain 34(data) 672 666 38 + 680: 27(int64_t) CompositeExtract 678 0 + Store 679 680 + 681: 667(ptr) AccessChain 34(data) 672 666 42 + 682: 27(int64_t) CompositeExtract 678 1 + Store 681 682 + 683: 6(int) Load 8(invocation) + 685: 674(ptr) AccessChain 34(data) 59 666 + 686: 28(i64vec4) Load 685 + 687:684(i64vec3) VectorShuffle 686 686 0 1 2 + 688:684(i64vec3) GroupNonUniformQuadBroadcast 43 687 42 + 689: 667(ptr) AccessChain 34(data) 683 666 38 + 690: 27(int64_t) CompositeExtract 688 0 + Store 689 690 + 691: 667(ptr) AccessChain 34(data) 683 666 42 + 692: 27(int64_t) CompositeExtract 688 1 + Store 691 692 + 693: 667(ptr) AccessChain 34(data) 683 666 69 + 694: 27(int64_t) CompositeExtract 688 2 + Store 693 694 + 695: 6(int) Load 8(invocation) + 696: 674(ptr) AccessChain 34(data) 73 666 + 697: 28(i64vec4) Load 696 + 698: 28(i64vec4) GroupNonUniformQuadBroadcast 43 697 42 + 699: 674(ptr) AccessChain 34(data) 695 666 + Store 699 698 + 700: 6(int) Load 8(invocation) + 701: 667(ptr) AccessChain 34(data) 37 666 38 + 702: 27(int64_t) Load 701 + 703: 27(int64_t) GroupNonUniformQuadSwap 43 702 38 + 704: 667(ptr) AccessChain 34(data) 700 666 38 + Store 704 703 + 705: 6(int) Load 8(invocation) + 706: 674(ptr) AccessChain 34(data) 47 666 + 707: 28(i64vec4) Load 706 + 708:673(i64vec2) VectorShuffle 707 707 0 1 + 709:673(i64vec2) GroupNonUniformQuadSwap 43 708 38 + 710: 667(ptr) AccessChain 34(data) 705 666 38 + 711: 27(int64_t) CompositeExtract 709 0 + Store 710 711 + 712: 667(ptr) AccessChain 34(data) 705 666 42 + 713: 27(int64_t) CompositeExtract 709 1 + Store 712 713 + 714: 6(int) Load 8(invocation) + 715: 674(ptr) AccessChain 34(data) 59 666 + 716: 28(i64vec4) Load 715 + 717:684(i64vec3) VectorShuffle 716 716 0 1 2 + 718:684(i64vec3) GroupNonUniformQuadSwap 43 717 38 + 719: 667(ptr) AccessChain 34(data) 714 666 38 + 720: 27(int64_t) CompositeExtract 718 0 + Store 719 720 + 721: 667(ptr) AccessChain 34(data) 714 666 42 + 722: 27(int64_t) CompositeExtract 718 1 + Store 721 722 + 723: 667(ptr) AccessChain 34(data) 714 666 69 + 724: 27(int64_t) CompositeExtract 718 2 + Store 723 724 725: 6(int) Load 8(invocation) - 726: 696(ptr) AccessChain 34(data) 37 695 38 - 727:29(float16_t) Load 726 - 728:29(float16_t) GroupNonUniformQuadSwap 43 727 38 - 729: 696(ptr) AccessChain 34(data) 725 695 38 + 726: 674(ptr) AccessChain 34(data) 73 666 + 727: 28(i64vec4) Load 726 + 728: 28(i64vec4) GroupNonUniformQuadSwap 43 727 38 + 729: 674(ptr) AccessChain 34(data) 725 666 Store 729 728 730: 6(int) Load 8(invocation) - 731: 703(ptr) AccessChain 34(data) 47 695 - 732: 30(f16vec4) Load 731 - 733:702(f16vec2) VectorShuffle 732 732 0 1 - 734:702(f16vec2) GroupNonUniformQuadSwap 43 733 38 - 735: 703(ptr) AccessChain 34(data) 730 695 - 736: 30(f16vec4) Load 735 - 737: 30(f16vec4) VectorShuffle 736 734 4 5 2 3 - Store 735 737 - 738: 6(int) Load 8(invocation) - 739: 703(ptr) AccessChain 34(data) 58 695 - 740: 30(f16vec4) Load 739 - 741:712(f16vec3) VectorShuffle 740 740 0 1 2 - 742:712(f16vec3) GroupNonUniformQuadSwap 43 741 38 - 743: 703(ptr) AccessChain 34(data) 738 695 - 744: 30(f16vec4) Load 743 - 745: 30(f16vec4) VectorShuffle 744 742 4 5 6 3 - Store 743 745 - 746: 6(int) Load 8(invocation) - 747: 703(ptr) AccessChain 34(data) 68 695 - 748: 30(f16vec4) Load 747 - 749: 30(f16vec4) GroupNonUniformQuadSwap 43 748 38 - 750: 703(ptr) AccessChain 34(data) 746 695 - Store 750 749 - 751: 6(int) Load 8(invocation) - 752: 696(ptr) AccessChain 34(data) 37 695 38 - 753:29(float16_t) Load 752 - 754:29(float16_t) GroupNonUniformQuadSwap 43 753 42 - 755: 696(ptr) AccessChain 34(data) 751 695 38 - Store 755 754 - 756: 6(int) Load 8(invocation) - 757: 703(ptr) AccessChain 34(data) 47 695 - 758: 30(f16vec4) Load 757 - 759:702(f16vec2) VectorShuffle 758 758 0 1 - 760:702(f16vec2) GroupNonUniformQuadSwap 43 759 42 - 761: 703(ptr) AccessChain 34(data) 756 695 - 762: 30(f16vec4) Load 761 - 763: 30(f16vec4) VectorShuffle 762 760 4 5 2 3 - Store 761 763 - 764: 6(int) Load 8(invocation) - 765: 703(ptr) AccessChain 34(data) 58 695 - 766: 30(f16vec4) Load 765 - 767:712(f16vec3) VectorShuffle 766 766 0 1 2 - 768:712(f16vec3) GroupNonUniformQuadSwap 43 767 42 - 769: 703(ptr) AccessChain 34(data) 764 695 - 770: 30(f16vec4) Load 769 - 771: 30(f16vec4) VectorShuffle 770 768 4 5 6 3 - Store 769 771 - 772: 6(int) Load 8(invocation) - 773: 703(ptr) AccessChain 34(data) 68 695 - 774: 30(f16vec4) Load 773 - 775: 30(f16vec4) GroupNonUniformQuadSwap 43 774 42 - 776: 703(ptr) AccessChain 34(data) 772 695 - Store 776 775 - 777: 6(int) Load 8(invocation) - 778: 696(ptr) AccessChain 34(data) 37 695 38 - 779:29(float16_t) Load 778 - 780:29(float16_t) GroupNonUniformQuadSwap 43 779 128 - 781: 696(ptr) AccessChain 34(data) 777 695 38 - Store 781 780 - 782: 6(int) Load 8(invocation) - 783: 703(ptr) AccessChain 34(data) 47 695 - 784: 30(f16vec4) Load 783 - 785:702(f16vec2) VectorShuffle 784 784 0 1 - 786:702(f16vec2) GroupNonUniformQuadSwap 43 785 128 - 787: 703(ptr) AccessChain 34(data) 782 695 - 788: 30(f16vec4) Load 787 - 789: 30(f16vec4) VectorShuffle 788 786 4 5 2 3 - Store 787 789 + 731: 667(ptr) AccessChain 34(data) 37 666 38 + 732: 27(int64_t) Load 731 + 733: 27(int64_t) GroupNonUniformQuadSwap 43 732 42 + 734: 667(ptr) AccessChain 34(data) 730 666 38 + Store 734 733 + 735: 6(int) Load 8(invocation) + 736: 674(ptr) AccessChain 34(data) 47 666 + 737: 28(i64vec4) Load 736 + 738:673(i64vec2) VectorShuffle 737 737 0 1 + 739:673(i64vec2) GroupNonUniformQuadSwap 43 738 42 + 740: 667(ptr) AccessChain 34(data) 735 666 38 + 741: 27(int64_t) CompositeExtract 739 0 + Store 740 741 + 742: 667(ptr) AccessChain 34(data) 735 666 42 + 743: 27(int64_t) CompositeExtract 739 1 + Store 742 743 + 744: 6(int) Load 8(invocation) + 745: 674(ptr) AccessChain 34(data) 59 666 + 746: 28(i64vec4) Load 745 + 747:684(i64vec3) VectorShuffle 746 746 0 1 2 + 748:684(i64vec3) GroupNonUniformQuadSwap 43 747 42 + 749: 667(ptr) AccessChain 34(data) 744 666 38 + 750: 27(int64_t) CompositeExtract 748 0 + Store 749 750 + 751: 667(ptr) AccessChain 34(data) 744 666 42 + 752: 27(int64_t) CompositeExtract 748 1 + Store 751 752 + 753: 667(ptr) AccessChain 34(data) 744 666 69 + 754: 27(int64_t) CompositeExtract 748 2 + Store 753 754 + 755: 6(int) Load 8(invocation) + 756: 674(ptr) AccessChain 34(data) 73 666 + 757: 28(i64vec4) Load 756 + 758: 28(i64vec4) GroupNonUniformQuadSwap 43 757 42 + 759: 674(ptr) AccessChain 34(data) 755 666 + Store 759 758 + 760: 6(int) Load 8(invocation) + 761: 667(ptr) AccessChain 34(data) 37 666 38 + 762: 27(int64_t) Load 761 + 763: 27(int64_t) GroupNonUniformQuadSwap 43 762 69 + 764: 667(ptr) AccessChain 34(data) 760 666 38 + Store 764 763 + 765: 6(int) Load 8(invocation) + 766: 674(ptr) AccessChain 34(data) 47 666 + 767: 28(i64vec4) Load 766 + 768:673(i64vec2) VectorShuffle 767 767 0 1 + 769:673(i64vec2) GroupNonUniformQuadSwap 43 768 69 + 770: 667(ptr) AccessChain 34(data) 765 666 38 + 771: 27(int64_t) CompositeExtract 769 0 + Store 770 771 + 772: 667(ptr) AccessChain 34(data) 765 666 42 + 773: 27(int64_t) CompositeExtract 769 1 + Store 772 773 + 774: 6(int) Load 8(invocation) + 775: 674(ptr) AccessChain 34(data) 59 666 + 776: 28(i64vec4) Load 775 + 777:684(i64vec3) VectorShuffle 776 776 0 1 2 + 778:684(i64vec3) GroupNonUniformQuadSwap 43 777 69 + 779: 667(ptr) AccessChain 34(data) 774 666 38 + 780: 27(int64_t) CompositeExtract 778 0 + Store 779 780 + 781: 667(ptr) AccessChain 34(data) 774 666 42 + 782: 27(int64_t) CompositeExtract 778 1 + Store 781 782 + 783: 667(ptr) AccessChain 34(data) 774 666 69 + 784: 27(int64_t) CompositeExtract 778 2 + Store 783 784 + 785: 6(int) Load 8(invocation) + 786: 674(ptr) AccessChain 34(data) 73 666 + 787: 28(i64vec4) Load 786 + 788: 28(i64vec4) GroupNonUniformQuadSwap 43 787 69 + 789: 674(ptr) AccessChain 34(data) 785 666 + Store 789 788 790: 6(int) Load 8(invocation) - 791: 703(ptr) AccessChain 34(data) 58 695 - 792: 30(f16vec4) Load 791 - 793:712(f16vec3) VectorShuffle 792 792 0 1 2 - 794:712(f16vec3) GroupNonUniformQuadSwap 43 793 128 - 795: 703(ptr) AccessChain 34(data) 790 695 - 796: 30(f16vec4) Load 795 - 797: 30(f16vec4) VectorShuffle 796 794 4 5 6 3 - Store 795 797 - 798: 6(int) Load 8(invocation) - 799: 703(ptr) AccessChain 34(data) 68 695 - 800: 30(f16vec4) Load 799 - 801: 30(f16vec4) GroupNonUniformQuadSwap 43 800 128 - 802: 703(ptr) AccessChain 34(data) 798 695 - Store 802 801 + 793: 792(ptr) AccessChain 34(data) 37 791 38 + 794:29(float16_t) Load 793 + 795:29(float16_t) GroupNonUniformQuadBroadcast 43 794 42 + 796: 792(ptr) AccessChain 34(data) 790 791 38 + Store 796 795 + 797: 6(int) Load 8(invocation) + 800: 799(ptr) AccessChain 34(data) 47 791 + 801: 30(f16vec4) Load 800 + 802:798(f16vec2) VectorShuffle 801 801 0 1 + 803:798(f16vec2) GroupNonUniformQuadBroadcast 43 802 42 + 804: 792(ptr) AccessChain 34(data) 797 791 38 + 805:29(float16_t) CompositeExtract 803 0 + Store 804 805 + 806: 792(ptr) AccessChain 34(data) 797 791 42 + 807:29(float16_t) CompositeExtract 803 1 + Store 806 807 + 808: 6(int) Load 8(invocation) + 810: 799(ptr) AccessChain 34(data) 59 791 + 811: 30(f16vec4) Load 810 + 812:809(f16vec3) VectorShuffle 811 811 0 1 2 + 813:809(f16vec3) GroupNonUniformQuadBroadcast 43 812 42 + 814: 792(ptr) AccessChain 34(data) 808 791 38 + 815:29(float16_t) CompositeExtract 813 0 + Store 814 815 + 816: 792(ptr) AccessChain 34(data) 808 791 42 + 817:29(float16_t) CompositeExtract 813 1 + Store 816 817 + 818: 792(ptr) AccessChain 34(data) 808 791 69 + 819:29(float16_t) CompositeExtract 813 2 + Store 818 819 + 820: 6(int) Load 8(invocation) + 821: 799(ptr) AccessChain 34(data) 73 791 + 822: 30(f16vec4) Load 821 + 823: 30(f16vec4) GroupNonUniformQuadBroadcast 43 822 42 + 824: 799(ptr) AccessChain 34(data) 820 791 + Store 824 823 + 825: 6(int) Load 8(invocation) + 826: 792(ptr) AccessChain 34(data) 37 791 38 + 827:29(float16_t) Load 826 + 828:29(float16_t) GroupNonUniformQuadSwap 43 827 38 + 829: 792(ptr) AccessChain 34(data) 825 791 38 + Store 829 828 + 830: 6(int) Load 8(invocation) + 831: 799(ptr) AccessChain 34(data) 47 791 + 832: 30(f16vec4) Load 831 + 833:798(f16vec2) VectorShuffle 832 832 0 1 + 834:798(f16vec2) GroupNonUniformQuadSwap 43 833 38 + 835: 792(ptr) AccessChain 34(data) 830 791 38 + 836:29(float16_t) CompositeExtract 834 0 + Store 835 836 + 837: 792(ptr) AccessChain 34(data) 830 791 42 + 838:29(float16_t) CompositeExtract 834 1 + Store 837 838 + 839: 6(int) Load 8(invocation) + 840: 799(ptr) AccessChain 34(data) 59 791 + 841: 30(f16vec4) Load 840 + 842:809(f16vec3) VectorShuffle 841 841 0 1 2 + 843:809(f16vec3) GroupNonUniformQuadSwap 43 842 38 + 844: 792(ptr) AccessChain 34(data) 839 791 38 + 845:29(float16_t) CompositeExtract 843 0 + Store 844 845 + 846: 792(ptr) AccessChain 34(data) 839 791 42 + 847:29(float16_t) CompositeExtract 843 1 + Store 846 847 + 848: 792(ptr) AccessChain 34(data) 839 791 69 + 849:29(float16_t) CompositeExtract 843 2 + Store 848 849 + 850: 6(int) Load 8(invocation) + 851: 799(ptr) AccessChain 34(data) 73 791 + 852: 30(f16vec4) Load 851 + 853: 30(f16vec4) GroupNonUniformQuadSwap 43 852 38 + 854: 799(ptr) AccessChain 34(data) 850 791 + Store 854 853 + 855: 6(int) Load 8(invocation) + 856: 792(ptr) AccessChain 34(data) 37 791 38 + 857:29(float16_t) Load 856 + 858:29(float16_t) GroupNonUniformQuadSwap 43 857 42 + 859: 792(ptr) AccessChain 34(data) 855 791 38 + Store 859 858 + 860: 6(int) Load 8(invocation) + 861: 799(ptr) AccessChain 34(data) 47 791 + 862: 30(f16vec4) Load 861 + 863:798(f16vec2) VectorShuffle 862 862 0 1 + 864:798(f16vec2) GroupNonUniformQuadSwap 43 863 42 + 865: 792(ptr) AccessChain 34(data) 860 791 38 + 866:29(float16_t) CompositeExtract 864 0 + Store 865 866 + 867: 792(ptr) AccessChain 34(data) 860 791 42 + 868:29(float16_t) CompositeExtract 864 1 + Store 867 868 + 869: 6(int) Load 8(invocation) + 870: 799(ptr) AccessChain 34(data) 59 791 + 871: 30(f16vec4) Load 870 + 872:809(f16vec3) VectorShuffle 871 871 0 1 2 + 873:809(f16vec3) GroupNonUniformQuadSwap 43 872 42 + 874: 792(ptr) AccessChain 34(data) 869 791 38 + 875:29(float16_t) CompositeExtract 873 0 + Store 874 875 + 876: 792(ptr) AccessChain 34(data) 869 791 42 + 877:29(float16_t) CompositeExtract 873 1 + Store 876 877 + 878: 792(ptr) AccessChain 34(data) 869 791 69 + 879:29(float16_t) CompositeExtract 873 2 + Store 878 879 + 880: 6(int) Load 8(invocation) + 881: 799(ptr) AccessChain 34(data) 73 791 + 882: 30(f16vec4) Load 881 + 883: 30(f16vec4) GroupNonUniformQuadSwap 43 882 42 + 884: 799(ptr) AccessChain 34(data) 880 791 + Store 884 883 + 885: 6(int) Load 8(invocation) + 886: 792(ptr) AccessChain 34(data) 37 791 38 + 887:29(float16_t) Load 886 + 888:29(float16_t) GroupNonUniformQuadSwap 43 887 69 + 889: 792(ptr) AccessChain 34(data) 885 791 38 + Store 889 888 + 890: 6(int) Load 8(invocation) + 891: 799(ptr) AccessChain 34(data) 47 791 + 892: 30(f16vec4) Load 891 + 893:798(f16vec2) VectorShuffle 892 892 0 1 + 894:798(f16vec2) GroupNonUniformQuadSwap 43 893 69 + 895: 792(ptr) AccessChain 34(data) 890 791 38 + 896:29(float16_t) CompositeExtract 894 0 + Store 895 896 + 897: 792(ptr) AccessChain 34(data) 890 791 42 + 898:29(float16_t) CompositeExtract 894 1 + Store 897 898 + 899: 6(int) Load 8(invocation) + 900: 799(ptr) AccessChain 34(data) 59 791 + 901: 30(f16vec4) Load 900 + 902:809(f16vec3) VectorShuffle 901 901 0 1 2 + 903:809(f16vec3) GroupNonUniformQuadSwap 43 902 69 + 904: 792(ptr) AccessChain 34(data) 899 791 38 + 905:29(float16_t) CompositeExtract 903 0 + Store 904 905 + 906: 792(ptr) AccessChain 34(data) 899 791 42 + 907:29(float16_t) CompositeExtract 903 1 + Store 906 907 + 908: 792(ptr) AccessChain 34(data) 899 791 69 + 909:29(float16_t) CompositeExtract 903 2 + Store 908 909 + 910: 6(int) Load 8(invocation) + 911: 799(ptr) AccessChain 34(data) 73 791 + 912: 30(f16vec4) Load 911 + 913: 30(f16vec4) GroupNonUniformQuadSwap 43 912 69 + 914: 799(ptr) AccessChain 34(data) 910 791 + Store 914 913 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out index b798bae213..eaea708bcd 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesShuffle.comp.out @@ -1,7 +1,7 @@ spv.subgroupExtendedTypesShuffle.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 497 +// Id's are bound by 554 Capability Shader Capability Float16 @@ -59,7 +59,7 @@ spv.subgroupExtendedTypesShuffle.comp Decorate 31(Buffers) Block Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 - Decorate 496 BuiltIn WorkgroupSize + Decorate 553 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -94,40 +94,41 @@ spv.subgroupExtendedTypesShuffle.comp 47: 36(int) Constant 1 48: TypeVector 17(int8_t) 2 49: TypePointer StorageBuffer 18(i8vec4) - 59: 36(int) Constant 2 - 60: TypeVector 17(int8_t) 3 - 70: 36(int) Constant 3 - 107: TypePointer StorageBuffer 19(int8_t) - 114: TypeVector 19(int8_t) 2 - 115: TypePointer StorageBuffer 20(i8vec4) - 125: TypeVector 19(int8_t) 3 - 171: TypePointer StorageBuffer 21(int16_t) - 178: TypeVector 21(int16_t) 2 - 179: TypePointer StorageBuffer 22(i16vec4) - 189: TypeVector 21(int16_t) 3 - 235: TypePointer StorageBuffer 23(int16_t) - 242: TypeVector 23(int16_t) 2 - 243: TypePointer StorageBuffer 24(i16vec4) - 253: TypeVector 23(int16_t) 3 - 299: 36(int) Constant 4 - 300: TypePointer StorageBuffer 25(int64_t) - 307: TypeVector 25(int64_t) 2 - 308: TypePointer StorageBuffer 26(i64vec4) - 318: TypeVector 25(int64_t) 3 - 364: 36(int) Constant 5 - 365: TypePointer StorageBuffer 27(int64_t) - 372: TypeVector 27(int64_t) 2 - 373: TypePointer StorageBuffer 28(i64vec4) - 383: TypeVector 27(int64_t) 3 - 429: 36(int) Constant 6 - 430: TypePointer StorageBuffer 29(float16_t) - 437: TypeVector 29(float16_t) 2 - 438: TypePointer StorageBuffer 30(f16vec4) - 448: TypeVector 29(float16_t) 3 - 493: TypeVector 6(int) 3 - 494: 6(int) Constant 8 - 495: 6(int) Constant 1 - 496: 493(ivec3) ConstantComposite 494 495 495 + 57: 6(int) Constant 1 + 61: 36(int) Constant 2 + 62: TypeVector 17(int8_t) 3 + 72: 6(int) Constant 2 + 76: 36(int) Constant 3 + 117: TypePointer StorageBuffer 19(int8_t) + 124: TypeVector 19(int8_t) 2 + 125: TypePointer StorageBuffer 20(i8vec4) + 136: TypeVector 19(int8_t) 3 + 189: TypePointer StorageBuffer 21(int16_t) + 196: TypeVector 21(int16_t) 2 + 197: TypePointer StorageBuffer 22(i16vec4) + 208: TypeVector 21(int16_t) 3 + 261: TypePointer StorageBuffer 23(int16_t) + 268: TypeVector 23(int16_t) 2 + 269: TypePointer StorageBuffer 24(i16vec4) + 280: TypeVector 23(int16_t) 3 + 333: 36(int) Constant 4 + 334: TypePointer StorageBuffer 25(int64_t) + 341: TypeVector 25(int64_t) 2 + 342: TypePointer StorageBuffer 26(i64vec4) + 353: TypeVector 25(int64_t) 3 + 406: 36(int) Constant 5 + 407: TypePointer StorageBuffer 27(int64_t) + 414: TypeVector 27(int64_t) 2 + 415: TypePointer StorageBuffer 28(i64vec4) + 426: TypeVector 27(int64_t) 3 + 479: 36(int) Constant 6 + 480: TypePointer StorageBuffer 29(float16_t) + 487: TypeVector 29(float16_t) 2 + 488: TypePointer StorageBuffer 30(f16vec4) + 499: TypeVector 29(float16_t) 3 + 551: TypeVector 6(int) 3 + 552: 6(int) Constant 8 + 553: 551(ivec3) ConstantComposite 552 57 57 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -149,468 +150,566 @@ spv.subgroupExtendedTypesShuffle.comp 52: 48(i8vec2) VectorShuffle 51 51 0 1 53: 6(int) Load 8(invocation) 54: 48(i8vec2) GroupNonUniformShuffle 43 52 53 - 55: 49(ptr) AccessChain 34(data) 46 37 - 56: 18(i8vec4) Load 55 - 57: 18(i8vec4) VectorShuffle 56 54 4 5 2 3 - Store 55 57 - 58: 6(int) Load 8(invocation) - 61: 49(ptr) AccessChain 34(data) 59 37 - 62: 18(i8vec4) Load 61 - 63: 60(i8vec3) VectorShuffle 62 62 0 1 2 - 64: 6(int) Load 8(invocation) - 65: 60(i8vec3) GroupNonUniformShuffle 43 63 64 - 66: 49(ptr) AccessChain 34(data) 58 37 - 67: 18(i8vec4) Load 66 - 68: 18(i8vec4) VectorShuffle 67 65 4 5 6 3 - Store 66 68 - 69: 6(int) Load 8(invocation) - 71: 49(ptr) AccessChain 34(data) 70 37 - 72: 18(i8vec4) Load 71 - 73: 6(int) Load 8(invocation) - 74: 18(i8vec4) GroupNonUniformShuffle 43 72 73 - 75: 49(ptr) AccessChain 34(data) 69 37 - Store 75 74 - 76: 6(int) Load 8(invocation) - 77: 39(ptr) AccessChain 34(data) 37 37 38 - 78: 17(int8_t) Load 77 + 55: 39(ptr) AccessChain 34(data) 46 37 38 + 56: 17(int8_t) CompositeExtract 54 0 + Store 55 56 + 58: 39(ptr) AccessChain 34(data) 46 37 57 + 59: 17(int8_t) CompositeExtract 54 1 + Store 58 59 + 60: 6(int) Load 8(invocation) + 63: 49(ptr) AccessChain 34(data) 61 37 + 64: 18(i8vec4) Load 63 + 65: 62(i8vec3) VectorShuffle 64 64 0 1 2 + 66: 6(int) Load 8(invocation) + 67: 62(i8vec3) GroupNonUniformShuffle 43 65 66 + 68: 39(ptr) AccessChain 34(data) 60 37 38 + 69: 17(int8_t) CompositeExtract 67 0 + Store 68 69 + 70: 39(ptr) AccessChain 34(data) 60 37 57 + 71: 17(int8_t) CompositeExtract 67 1 + Store 70 71 + 73: 39(ptr) AccessChain 34(data) 60 37 72 + 74: 17(int8_t) CompositeExtract 67 2 + Store 73 74 + 75: 6(int) Load 8(invocation) + 77: 49(ptr) AccessChain 34(data) 76 37 + 78: 18(i8vec4) Load 77 79: 6(int) Load 8(invocation) - 80: 17(int8_t) GroupNonUniformShuffleXor 43 78 79 - 81: 39(ptr) AccessChain 34(data) 76 37 38 + 80: 18(i8vec4) GroupNonUniformShuffle 43 78 79 + 81: 49(ptr) AccessChain 34(data) 75 37 Store 81 80 82: 6(int) Load 8(invocation) - 83: 49(ptr) AccessChain 34(data) 47 37 - 84: 18(i8vec4) Load 83 - 85: 48(i8vec2) VectorShuffle 84 84 0 1 - 86: 6(int) Load 8(invocation) - 87: 48(i8vec2) GroupNonUniformShuffleXor 43 85 86 - 88: 49(ptr) AccessChain 34(data) 82 37 - 89: 18(i8vec4) Load 88 - 90: 18(i8vec4) VectorShuffle 89 87 4 5 2 3 - Store 88 90 - 91: 6(int) Load 8(invocation) - 92: 49(ptr) AccessChain 34(data) 59 37 - 93: 18(i8vec4) Load 92 - 94: 60(i8vec3) VectorShuffle 93 93 0 1 2 - 95: 6(int) Load 8(invocation) - 96: 60(i8vec3) GroupNonUniformShuffleXor 43 94 95 - 97: 49(ptr) AccessChain 34(data) 91 37 - 98: 18(i8vec4) Load 97 - 99: 18(i8vec4) VectorShuffle 98 96 4 5 6 3 - Store 97 99 - 100: 6(int) Load 8(invocation) - 101: 49(ptr) AccessChain 34(data) 70 37 - 102: 18(i8vec4) Load 101 - 103: 6(int) Load 8(invocation) - 104: 18(i8vec4) GroupNonUniformShuffleXor 43 102 103 - 105: 49(ptr) AccessChain 34(data) 100 37 - Store 105 104 - 106: 6(int) Load 8(invocation) - 108: 107(ptr) AccessChain 34(data) 37 47 38 - 109: 19(int8_t) Load 108 + 83: 39(ptr) AccessChain 34(data) 37 37 38 + 84: 17(int8_t) Load 83 + 85: 6(int) Load 8(invocation) + 86: 17(int8_t) GroupNonUniformShuffleXor 43 84 85 + 87: 39(ptr) AccessChain 34(data) 82 37 38 + Store 87 86 + 88: 6(int) Load 8(invocation) + 89: 49(ptr) AccessChain 34(data) 47 37 + 90: 18(i8vec4) Load 89 + 91: 48(i8vec2) VectorShuffle 90 90 0 1 + 92: 6(int) Load 8(invocation) + 93: 48(i8vec2) GroupNonUniformShuffleXor 43 91 92 + 94: 39(ptr) AccessChain 34(data) 88 37 38 + 95: 17(int8_t) CompositeExtract 93 0 + Store 94 95 + 96: 39(ptr) AccessChain 34(data) 88 37 57 + 97: 17(int8_t) CompositeExtract 93 1 + Store 96 97 + 98: 6(int) Load 8(invocation) + 99: 49(ptr) AccessChain 34(data) 61 37 + 100: 18(i8vec4) Load 99 + 101: 62(i8vec3) VectorShuffle 100 100 0 1 2 + 102: 6(int) Load 8(invocation) + 103: 62(i8vec3) GroupNonUniformShuffleXor 43 101 102 + 104: 39(ptr) AccessChain 34(data) 98 37 38 + 105: 17(int8_t) CompositeExtract 103 0 + Store 104 105 + 106: 39(ptr) AccessChain 34(data) 98 37 57 + 107: 17(int8_t) CompositeExtract 103 1 + Store 106 107 + 108: 39(ptr) AccessChain 34(data) 98 37 72 + 109: 17(int8_t) CompositeExtract 103 2 + Store 108 109 110: 6(int) Load 8(invocation) - 111: 19(int8_t) GroupNonUniformShuffle 43 109 110 - 112: 107(ptr) AccessChain 34(data) 106 47 38 - Store 112 111 + 111: 49(ptr) AccessChain 34(data) 76 37 + 112: 18(i8vec4) Load 111 113: 6(int) Load 8(invocation) - 116: 115(ptr) AccessChain 34(data) 47 47 - 117: 20(i8vec4) Load 116 - 118: 114(i8vec2) VectorShuffle 117 117 0 1 - 119: 6(int) Load 8(invocation) - 120: 114(i8vec2) GroupNonUniformShuffle 43 118 119 - 121: 115(ptr) AccessChain 34(data) 113 47 - 122: 20(i8vec4) Load 121 - 123: 20(i8vec4) VectorShuffle 122 120 4 5 2 3 - Store 121 123 - 124: 6(int) Load 8(invocation) - 126: 115(ptr) AccessChain 34(data) 59 47 + 114: 18(i8vec4) GroupNonUniformShuffleXor 43 112 113 + 115: 49(ptr) AccessChain 34(data) 110 37 + Store 115 114 + 116: 6(int) Load 8(invocation) + 118: 117(ptr) AccessChain 34(data) 37 47 38 + 119: 19(int8_t) Load 118 + 120: 6(int) Load 8(invocation) + 121: 19(int8_t) GroupNonUniformShuffle 43 119 120 + 122: 117(ptr) AccessChain 34(data) 116 47 38 + Store 122 121 + 123: 6(int) Load 8(invocation) + 126: 125(ptr) AccessChain 34(data) 47 47 127: 20(i8vec4) Load 126 - 128: 125(i8vec3) VectorShuffle 127 127 0 1 2 + 128: 124(i8vec2) VectorShuffle 127 127 0 1 129: 6(int) Load 8(invocation) - 130: 125(i8vec3) GroupNonUniformShuffle 43 128 129 - 131: 115(ptr) AccessChain 34(data) 124 47 - 132: 20(i8vec4) Load 131 - 133: 20(i8vec4) VectorShuffle 132 130 4 5 6 3 - Store 131 133 - 134: 6(int) Load 8(invocation) - 135: 115(ptr) AccessChain 34(data) 70 47 - 136: 20(i8vec4) Load 135 - 137: 6(int) Load 8(invocation) - 138: 20(i8vec4) GroupNonUniformShuffle 43 136 137 - 139: 115(ptr) AccessChain 34(data) 134 47 - Store 139 138 + 130: 124(i8vec2) GroupNonUniformShuffle 43 128 129 + 131: 117(ptr) AccessChain 34(data) 123 47 38 + 132: 19(int8_t) CompositeExtract 130 0 + Store 131 132 + 133: 117(ptr) AccessChain 34(data) 123 47 57 + 134: 19(int8_t) CompositeExtract 130 1 + Store 133 134 + 135: 6(int) Load 8(invocation) + 137: 125(ptr) AccessChain 34(data) 61 47 + 138: 20(i8vec4) Load 137 + 139: 136(i8vec3) VectorShuffle 138 138 0 1 2 140: 6(int) Load 8(invocation) - 141: 107(ptr) AccessChain 34(data) 37 47 38 - 142: 19(int8_t) Load 141 - 143: 6(int) Load 8(invocation) - 144: 19(int8_t) GroupNonUniformShuffleXor 43 142 143 - 145: 107(ptr) AccessChain 34(data) 140 47 38 - Store 145 144 - 146: 6(int) Load 8(invocation) - 147: 115(ptr) AccessChain 34(data) 47 47 - 148: 20(i8vec4) Load 147 - 149: 114(i8vec2) VectorShuffle 148 148 0 1 - 150: 6(int) Load 8(invocation) - 151: 114(i8vec2) GroupNonUniformShuffleXor 43 149 150 - 152: 115(ptr) AccessChain 34(data) 146 47 - 153: 20(i8vec4) Load 152 - 154: 20(i8vec4) VectorShuffle 153 151 4 5 2 3 - Store 152 154 - 155: 6(int) Load 8(invocation) - 156: 115(ptr) AccessChain 34(data) 59 47 - 157: 20(i8vec4) Load 156 - 158: 125(i8vec3) VectorShuffle 157 157 0 1 2 - 159: 6(int) Load 8(invocation) - 160: 125(i8vec3) GroupNonUniformShuffleXor 43 158 159 - 161: 115(ptr) AccessChain 34(data) 155 47 + 141: 136(i8vec3) GroupNonUniformShuffle 43 139 140 + 142: 117(ptr) AccessChain 34(data) 135 47 38 + 143: 19(int8_t) CompositeExtract 141 0 + Store 142 143 + 144: 117(ptr) AccessChain 34(data) 135 47 57 + 145: 19(int8_t) CompositeExtract 141 1 + Store 144 145 + 146: 117(ptr) AccessChain 34(data) 135 47 72 + 147: 19(int8_t) CompositeExtract 141 2 + Store 146 147 + 148: 6(int) Load 8(invocation) + 149: 125(ptr) AccessChain 34(data) 76 47 + 150: 20(i8vec4) Load 149 + 151: 6(int) Load 8(invocation) + 152: 20(i8vec4) GroupNonUniformShuffle 43 150 151 + 153: 125(ptr) AccessChain 34(data) 148 47 + Store 153 152 + 154: 6(int) Load 8(invocation) + 155: 117(ptr) AccessChain 34(data) 37 47 38 + 156: 19(int8_t) Load 155 + 157: 6(int) Load 8(invocation) + 158: 19(int8_t) GroupNonUniformShuffleXor 43 156 157 + 159: 117(ptr) AccessChain 34(data) 154 47 38 + Store 159 158 + 160: 6(int) Load 8(invocation) + 161: 125(ptr) AccessChain 34(data) 47 47 162: 20(i8vec4) Load 161 - 163: 20(i8vec4) VectorShuffle 162 160 4 5 6 3 - Store 161 163 + 163: 124(i8vec2) VectorShuffle 162 162 0 1 164: 6(int) Load 8(invocation) - 165: 115(ptr) AccessChain 34(data) 70 47 - 166: 20(i8vec4) Load 165 - 167: 6(int) Load 8(invocation) - 168: 20(i8vec4) GroupNonUniformShuffleXor 43 166 167 - 169: 115(ptr) AccessChain 34(data) 164 47 - Store 169 168 + 165: 124(i8vec2) GroupNonUniformShuffleXor 43 163 164 + 166: 117(ptr) AccessChain 34(data) 160 47 38 + 167: 19(int8_t) CompositeExtract 165 0 + Store 166 167 + 168: 117(ptr) AccessChain 34(data) 160 47 57 + 169: 19(int8_t) CompositeExtract 165 1 + Store 168 169 170: 6(int) Load 8(invocation) - 172: 171(ptr) AccessChain 34(data) 37 59 38 - 173: 21(int16_t) Load 172 + 171: 125(ptr) AccessChain 34(data) 61 47 + 172: 20(i8vec4) Load 171 + 173: 136(i8vec3) VectorShuffle 172 172 0 1 2 174: 6(int) Load 8(invocation) - 175: 21(int16_t) GroupNonUniformShuffle 43 173 174 - 176: 171(ptr) AccessChain 34(data) 170 59 38 - Store 176 175 - 177: 6(int) Load 8(invocation) - 180: 179(ptr) AccessChain 34(data) 47 59 - 181: 22(i16vec4) Load 180 - 182:178(i16vec2) VectorShuffle 181 181 0 1 - 183: 6(int) Load 8(invocation) - 184:178(i16vec2) GroupNonUniformShuffle 43 182 183 - 185: 179(ptr) AccessChain 34(data) 177 59 - 186: 22(i16vec4) Load 185 - 187: 22(i16vec4) VectorShuffle 186 184 4 5 2 3 - Store 185 187 + 175: 136(i8vec3) GroupNonUniformShuffleXor 43 173 174 + 176: 117(ptr) AccessChain 34(data) 170 47 38 + 177: 19(int8_t) CompositeExtract 175 0 + Store 176 177 + 178: 117(ptr) AccessChain 34(data) 170 47 57 + 179: 19(int8_t) CompositeExtract 175 1 + Store 178 179 + 180: 117(ptr) AccessChain 34(data) 170 47 72 + 181: 19(int8_t) CompositeExtract 175 2 + Store 180 181 + 182: 6(int) Load 8(invocation) + 183: 125(ptr) AccessChain 34(data) 76 47 + 184: 20(i8vec4) Load 183 + 185: 6(int) Load 8(invocation) + 186: 20(i8vec4) GroupNonUniformShuffleXor 43 184 185 + 187: 125(ptr) AccessChain 34(data) 182 47 + Store 187 186 188: 6(int) Load 8(invocation) - 190: 179(ptr) AccessChain 34(data) 59 59 - 191: 22(i16vec4) Load 190 - 192:189(i16vec3) VectorShuffle 191 191 0 1 2 - 193: 6(int) Load 8(invocation) - 194:189(i16vec3) GroupNonUniformShuffle 43 192 193 - 195: 179(ptr) AccessChain 34(data) 188 59 - 196: 22(i16vec4) Load 195 - 197: 22(i16vec4) VectorShuffle 196 194 4 5 6 3 - Store 195 197 - 198: 6(int) Load 8(invocation) - 199: 179(ptr) AccessChain 34(data) 70 59 - 200: 22(i16vec4) Load 199 + 190: 189(ptr) AccessChain 34(data) 37 61 38 + 191: 21(int16_t) Load 190 + 192: 6(int) Load 8(invocation) + 193: 21(int16_t) GroupNonUniformShuffle 43 191 192 + 194: 189(ptr) AccessChain 34(data) 188 61 38 + Store 194 193 + 195: 6(int) Load 8(invocation) + 198: 197(ptr) AccessChain 34(data) 47 61 + 199: 22(i16vec4) Load 198 + 200:196(i16vec2) VectorShuffle 199 199 0 1 201: 6(int) Load 8(invocation) - 202: 22(i16vec4) GroupNonUniformShuffle 43 200 201 - 203: 179(ptr) AccessChain 34(data) 198 59 - Store 203 202 - 204: 6(int) Load 8(invocation) - 205: 171(ptr) AccessChain 34(data) 37 59 38 - 206: 21(int16_t) Load 205 + 202:196(i16vec2) GroupNonUniformShuffle 43 200 201 + 203: 189(ptr) AccessChain 34(data) 195 61 38 + 204: 21(int16_t) CompositeExtract 202 0 + Store 203 204 + 205: 189(ptr) AccessChain 34(data) 195 61 57 + 206: 21(int16_t) CompositeExtract 202 1 + Store 205 206 207: 6(int) Load 8(invocation) - 208: 21(int16_t) GroupNonUniformShuffleXor 43 206 207 - 209: 171(ptr) AccessChain 34(data) 204 59 38 - Store 209 208 - 210: 6(int) Load 8(invocation) - 211: 179(ptr) AccessChain 34(data) 47 59 - 212: 22(i16vec4) Load 211 - 213:178(i16vec2) VectorShuffle 212 212 0 1 - 214: 6(int) Load 8(invocation) - 215:178(i16vec2) GroupNonUniformShuffleXor 43 213 214 - 216: 179(ptr) AccessChain 34(data) 210 59 - 217: 22(i16vec4) Load 216 - 218: 22(i16vec4) VectorShuffle 217 215 4 5 2 3 - Store 216 218 - 219: 6(int) Load 8(invocation) - 220: 179(ptr) AccessChain 34(data) 59 59 - 221: 22(i16vec4) Load 220 - 222:189(i16vec3) VectorShuffle 221 221 0 1 2 + 209: 197(ptr) AccessChain 34(data) 61 61 + 210: 22(i16vec4) Load 209 + 211:208(i16vec3) VectorShuffle 210 210 0 1 2 + 212: 6(int) Load 8(invocation) + 213:208(i16vec3) GroupNonUniformShuffle 43 211 212 + 214: 189(ptr) AccessChain 34(data) 207 61 38 + 215: 21(int16_t) CompositeExtract 213 0 + Store 214 215 + 216: 189(ptr) AccessChain 34(data) 207 61 57 + 217: 21(int16_t) CompositeExtract 213 1 + Store 216 217 + 218: 189(ptr) AccessChain 34(data) 207 61 72 + 219: 21(int16_t) CompositeExtract 213 2 + Store 218 219 + 220: 6(int) Load 8(invocation) + 221: 197(ptr) AccessChain 34(data) 76 61 + 222: 22(i16vec4) Load 221 223: 6(int) Load 8(invocation) - 224:189(i16vec3) GroupNonUniformShuffleXor 43 222 223 - 225: 179(ptr) AccessChain 34(data) 219 59 - 226: 22(i16vec4) Load 225 - 227: 22(i16vec4) VectorShuffle 226 224 4 5 6 3 - Store 225 227 - 228: 6(int) Load 8(invocation) - 229: 179(ptr) AccessChain 34(data) 70 59 - 230: 22(i16vec4) Load 229 - 231: 6(int) Load 8(invocation) - 232: 22(i16vec4) GroupNonUniformShuffleXor 43 230 231 - 233: 179(ptr) AccessChain 34(data) 228 59 - Store 233 232 - 234: 6(int) Load 8(invocation) - 236: 235(ptr) AccessChain 34(data) 37 70 38 - 237: 23(int16_t) Load 236 - 238: 6(int) Load 8(invocation) - 239: 23(int16_t) GroupNonUniformShuffle 43 237 238 - 240: 235(ptr) AccessChain 34(data) 234 70 38 - Store 240 239 - 241: 6(int) Load 8(invocation) - 244: 243(ptr) AccessChain 34(data) 47 70 - 245: 24(i16vec4) Load 244 - 246:242(i16vec2) VectorShuffle 245 245 0 1 - 247: 6(int) Load 8(invocation) - 248:242(i16vec2) GroupNonUniformShuffle 43 246 247 - 249: 243(ptr) AccessChain 34(data) 241 70 - 250: 24(i16vec4) Load 249 - 251: 24(i16vec4) VectorShuffle 250 248 4 5 2 3 - Store 249 251 - 252: 6(int) Load 8(invocation) - 254: 243(ptr) AccessChain 34(data) 59 70 - 255: 24(i16vec4) Load 254 - 256:253(i16vec3) VectorShuffle 255 255 0 1 2 + 224: 22(i16vec4) GroupNonUniformShuffle 43 222 223 + 225: 197(ptr) AccessChain 34(data) 220 61 + Store 225 224 + 226: 6(int) Load 8(invocation) + 227: 189(ptr) AccessChain 34(data) 37 61 38 + 228: 21(int16_t) Load 227 + 229: 6(int) Load 8(invocation) + 230: 21(int16_t) GroupNonUniformShuffleXor 43 228 229 + 231: 189(ptr) AccessChain 34(data) 226 61 38 + Store 231 230 + 232: 6(int) Load 8(invocation) + 233: 197(ptr) AccessChain 34(data) 47 61 + 234: 22(i16vec4) Load 233 + 235:196(i16vec2) VectorShuffle 234 234 0 1 + 236: 6(int) Load 8(invocation) + 237:196(i16vec2) GroupNonUniformShuffleXor 43 235 236 + 238: 189(ptr) AccessChain 34(data) 232 61 38 + 239: 21(int16_t) CompositeExtract 237 0 + Store 238 239 + 240: 189(ptr) AccessChain 34(data) 232 61 57 + 241: 21(int16_t) CompositeExtract 237 1 + Store 240 241 + 242: 6(int) Load 8(invocation) + 243: 197(ptr) AccessChain 34(data) 61 61 + 244: 22(i16vec4) Load 243 + 245:208(i16vec3) VectorShuffle 244 244 0 1 2 + 246: 6(int) Load 8(invocation) + 247:208(i16vec3) GroupNonUniformShuffleXor 43 245 246 + 248: 189(ptr) AccessChain 34(data) 242 61 38 + 249: 21(int16_t) CompositeExtract 247 0 + Store 248 249 + 250: 189(ptr) AccessChain 34(data) 242 61 57 + 251: 21(int16_t) CompositeExtract 247 1 + Store 250 251 + 252: 189(ptr) AccessChain 34(data) 242 61 72 + 253: 21(int16_t) CompositeExtract 247 2 + Store 252 253 + 254: 6(int) Load 8(invocation) + 255: 197(ptr) AccessChain 34(data) 76 61 + 256: 22(i16vec4) Load 255 257: 6(int) Load 8(invocation) - 258:253(i16vec3) GroupNonUniformShuffle 43 256 257 - 259: 243(ptr) AccessChain 34(data) 252 70 - 260: 24(i16vec4) Load 259 - 261: 24(i16vec4) VectorShuffle 260 258 4 5 6 3 - Store 259 261 - 262: 6(int) Load 8(invocation) - 263: 243(ptr) AccessChain 34(data) 70 70 - 264: 24(i16vec4) Load 263 - 265: 6(int) Load 8(invocation) - 266: 24(i16vec4) GroupNonUniformShuffle 43 264 265 - 267: 243(ptr) AccessChain 34(data) 262 70 - Store 267 266 - 268: 6(int) Load 8(invocation) - 269: 235(ptr) AccessChain 34(data) 37 70 38 - 270: 23(int16_t) Load 269 - 271: 6(int) Load 8(invocation) - 272: 23(int16_t) GroupNonUniformShuffleXor 43 270 271 - 273: 235(ptr) AccessChain 34(data) 268 70 38 - Store 273 272 - 274: 6(int) Load 8(invocation) - 275: 243(ptr) AccessChain 34(data) 47 70 - 276: 24(i16vec4) Load 275 - 277:242(i16vec2) VectorShuffle 276 276 0 1 - 278: 6(int) Load 8(invocation) - 279:242(i16vec2) GroupNonUniformShuffleXor 43 277 278 - 280: 243(ptr) AccessChain 34(data) 274 70 - 281: 24(i16vec4) Load 280 - 282: 24(i16vec4) VectorShuffle 281 279 4 5 2 3 - Store 280 282 - 283: 6(int) Load 8(invocation) - 284: 243(ptr) AccessChain 34(data) 59 70 - 285: 24(i16vec4) Load 284 - 286:253(i16vec3) VectorShuffle 285 285 0 1 2 - 287: 6(int) Load 8(invocation) - 288:253(i16vec3) GroupNonUniformShuffleXor 43 286 287 - 289: 243(ptr) AccessChain 34(data) 283 70 - 290: 24(i16vec4) Load 289 - 291: 24(i16vec4) VectorShuffle 290 288 4 5 6 3 - Store 289 291 + 258: 22(i16vec4) GroupNonUniformShuffleXor 43 256 257 + 259: 197(ptr) AccessChain 34(data) 254 61 + Store 259 258 + 260: 6(int) Load 8(invocation) + 262: 261(ptr) AccessChain 34(data) 37 76 38 + 263: 23(int16_t) Load 262 + 264: 6(int) Load 8(invocation) + 265: 23(int16_t) GroupNonUniformShuffle 43 263 264 + 266: 261(ptr) AccessChain 34(data) 260 76 38 + Store 266 265 + 267: 6(int) Load 8(invocation) + 270: 269(ptr) AccessChain 34(data) 47 76 + 271: 24(i16vec4) Load 270 + 272:268(i16vec2) VectorShuffle 271 271 0 1 + 273: 6(int) Load 8(invocation) + 274:268(i16vec2) GroupNonUniformShuffle 43 272 273 + 275: 261(ptr) AccessChain 34(data) 267 76 38 + 276: 23(int16_t) CompositeExtract 274 0 + Store 275 276 + 277: 261(ptr) AccessChain 34(data) 267 76 57 + 278: 23(int16_t) CompositeExtract 274 1 + Store 277 278 + 279: 6(int) Load 8(invocation) + 281: 269(ptr) AccessChain 34(data) 61 76 + 282: 24(i16vec4) Load 281 + 283:280(i16vec3) VectorShuffle 282 282 0 1 2 + 284: 6(int) Load 8(invocation) + 285:280(i16vec3) GroupNonUniformShuffle 43 283 284 + 286: 261(ptr) AccessChain 34(data) 279 76 38 + 287: 23(int16_t) CompositeExtract 285 0 + Store 286 287 + 288: 261(ptr) AccessChain 34(data) 279 76 57 + 289: 23(int16_t) CompositeExtract 285 1 + Store 288 289 + 290: 261(ptr) AccessChain 34(data) 279 76 72 + 291: 23(int16_t) CompositeExtract 285 2 + Store 290 291 292: 6(int) Load 8(invocation) - 293: 243(ptr) AccessChain 34(data) 70 70 + 293: 269(ptr) AccessChain 34(data) 76 76 294: 24(i16vec4) Load 293 295: 6(int) Load 8(invocation) - 296: 24(i16vec4) GroupNonUniformShuffleXor 43 294 295 - 297: 243(ptr) AccessChain 34(data) 292 70 + 296: 24(i16vec4) GroupNonUniformShuffle 43 294 295 + 297: 269(ptr) AccessChain 34(data) 292 76 Store 297 296 298: 6(int) Load 8(invocation) - 301: 300(ptr) AccessChain 34(data) 37 299 38 - 302: 25(int64_t) Load 301 - 303: 6(int) Load 8(invocation) - 304: 25(int64_t) GroupNonUniformShuffle 43 302 303 - 305: 300(ptr) AccessChain 34(data) 298 299 38 - Store 305 304 - 306: 6(int) Load 8(invocation) - 309: 308(ptr) AccessChain 34(data) 47 299 - 310: 26(i64vec4) Load 309 - 311:307(i64vec2) VectorShuffle 310 310 0 1 - 312: 6(int) Load 8(invocation) - 313:307(i64vec2) GroupNonUniformShuffle 43 311 312 - 314: 308(ptr) AccessChain 34(data) 306 299 - 315: 26(i64vec4) Load 314 - 316: 26(i64vec4) VectorShuffle 315 313 4 5 2 3 - Store 314 316 - 317: 6(int) Load 8(invocation) - 319: 308(ptr) AccessChain 34(data) 59 299 - 320: 26(i64vec4) Load 319 - 321:318(i64vec3) VectorShuffle 320 320 0 1 2 - 322: 6(int) Load 8(invocation) - 323:318(i64vec3) GroupNonUniformShuffle 43 321 322 - 324: 308(ptr) AccessChain 34(data) 317 299 - 325: 26(i64vec4) Load 324 - 326: 26(i64vec4) VectorShuffle 325 323 4 5 6 3 - Store 324 326 - 327: 6(int) Load 8(invocation) - 328: 308(ptr) AccessChain 34(data) 70 299 - 329: 26(i64vec4) Load 328 - 330: 6(int) Load 8(invocation) - 331: 26(i64vec4) GroupNonUniformShuffle 43 329 330 - 332: 308(ptr) AccessChain 34(data) 327 299 - Store 332 331 - 333: 6(int) Load 8(invocation) - 334: 300(ptr) AccessChain 34(data) 37 299 38 - 335: 25(int64_t) Load 334 - 336: 6(int) Load 8(invocation) - 337: 25(int64_t) GroupNonUniformShuffleXor 43 335 336 - 338: 300(ptr) AccessChain 34(data) 333 299 38 - Store 338 337 - 339: 6(int) Load 8(invocation) - 340: 308(ptr) AccessChain 34(data) 47 299 - 341: 26(i64vec4) Load 340 - 342:307(i64vec2) VectorShuffle 341 341 0 1 - 343: 6(int) Load 8(invocation) - 344:307(i64vec2) GroupNonUniformShuffleXor 43 342 343 - 345: 308(ptr) AccessChain 34(data) 339 299 - 346: 26(i64vec4) Load 345 - 347: 26(i64vec4) VectorShuffle 346 344 4 5 2 3 - Store 345 347 - 348: 6(int) Load 8(invocation) - 349: 308(ptr) AccessChain 34(data) 59 299 - 350: 26(i64vec4) Load 349 - 351:318(i64vec3) VectorShuffle 350 350 0 1 2 + 299: 261(ptr) AccessChain 34(data) 37 76 38 + 300: 23(int16_t) Load 299 + 301: 6(int) Load 8(invocation) + 302: 23(int16_t) GroupNonUniformShuffleXor 43 300 301 + 303: 261(ptr) AccessChain 34(data) 298 76 38 + Store 303 302 + 304: 6(int) Load 8(invocation) + 305: 269(ptr) AccessChain 34(data) 47 76 + 306: 24(i16vec4) Load 305 + 307:268(i16vec2) VectorShuffle 306 306 0 1 + 308: 6(int) Load 8(invocation) + 309:268(i16vec2) GroupNonUniformShuffleXor 43 307 308 + 310: 261(ptr) AccessChain 34(data) 304 76 38 + 311: 23(int16_t) CompositeExtract 309 0 + Store 310 311 + 312: 261(ptr) AccessChain 34(data) 304 76 57 + 313: 23(int16_t) CompositeExtract 309 1 + Store 312 313 + 314: 6(int) Load 8(invocation) + 315: 269(ptr) AccessChain 34(data) 61 76 + 316: 24(i16vec4) Load 315 + 317:280(i16vec3) VectorShuffle 316 316 0 1 2 + 318: 6(int) Load 8(invocation) + 319:280(i16vec3) GroupNonUniformShuffleXor 43 317 318 + 320: 261(ptr) AccessChain 34(data) 314 76 38 + 321: 23(int16_t) CompositeExtract 319 0 + Store 320 321 + 322: 261(ptr) AccessChain 34(data) 314 76 57 + 323: 23(int16_t) CompositeExtract 319 1 + Store 322 323 + 324: 261(ptr) AccessChain 34(data) 314 76 72 + 325: 23(int16_t) CompositeExtract 319 2 + Store 324 325 + 326: 6(int) Load 8(invocation) + 327: 269(ptr) AccessChain 34(data) 76 76 + 328: 24(i16vec4) Load 327 + 329: 6(int) Load 8(invocation) + 330: 24(i16vec4) GroupNonUniformShuffleXor 43 328 329 + 331: 269(ptr) AccessChain 34(data) 326 76 + Store 331 330 + 332: 6(int) Load 8(invocation) + 335: 334(ptr) AccessChain 34(data) 37 333 38 + 336: 25(int64_t) Load 335 + 337: 6(int) Load 8(invocation) + 338: 25(int64_t) GroupNonUniformShuffle 43 336 337 + 339: 334(ptr) AccessChain 34(data) 332 333 38 + Store 339 338 + 340: 6(int) Load 8(invocation) + 343: 342(ptr) AccessChain 34(data) 47 333 + 344: 26(i64vec4) Load 343 + 345:341(i64vec2) VectorShuffle 344 344 0 1 + 346: 6(int) Load 8(invocation) + 347:341(i64vec2) GroupNonUniformShuffle 43 345 346 + 348: 334(ptr) AccessChain 34(data) 340 333 38 + 349: 25(int64_t) CompositeExtract 347 0 + Store 348 349 + 350: 334(ptr) AccessChain 34(data) 340 333 57 + 351: 25(int64_t) CompositeExtract 347 1 + Store 350 351 352: 6(int) Load 8(invocation) - 353:318(i64vec3) GroupNonUniformShuffleXor 43 351 352 - 354: 308(ptr) AccessChain 34(data) 348 299 + 354: 342(ptr) AccessChain 34(data) 61 333 355: 26(i64vec4) Load 354 - 356: 26(i64vec4) VectorShuffle 355 353 4 5 6 3 - Store 354 356 + 356:353(i64vec3) VectorShuffle 355 355 0 1 2 357: 6(int) Load 8(invocation) - 358: 308(ptr) AccessChain 34(data) 70 299 - 359: 26(i64vec4) Load 358 - 360: 6(int) Load 8(invocation) - 361: 26(i64vec4) GroupNonUniformShuffleXor 43 359 360 - 362: 308(ptr) AccessChain 34(data) 357 299 - Store 362 361 - 363: 6(int) Load 8(invocation) - 366: 365(ptr) AccessChain 34(data) 37 364 38 - 367: 27(int64_t) Load 366 + 358:353(i64vec3) GroupNonUniformShuffle 43 356 357 + 359: 334(ptr) AccessChain 34(data) 352 333 38 + 360: 25(int64_t) CompositeExtract 358 0 + Store 359 360 + 361: 334(ptr) AccessChain 34(data) 352 333 57 + 362: 25(int64_t) CompositeExtract 358 1 + Store 361 362 + 363: 334(ptr) AccessChain 34(data) 352 333 72 + 364: 25(int64_t) CompositeExtract 358 2 + Store 363 364 + 365: 6(int) Load 8(invocation) + 366: 342(ptr) AccessChain 34(data) 76 333 + 367: 26(i64vec4) Load 366 368: 6(int) Load 8(invocation) - 369: 27(int64_t) GroupNonUniformShuffle 43 367 368 - 370: 365(ptr) AccessChain 34(data) 363 364 38 + 369: 26(i64vec4) GroupNonUniformShuffle 43 367 368 + 370: 342(ptr) AccessChain 34(data) 365 333 Store 370 369 371: 6(int) Load 8(invocation) - 374: 373(ptr) AccessChain 34(data) 47 364 - 375: 28(i64vec4) Load 374 - 376:372(i64vec2) VectorShuffle 375 375 0 1 + 372: 334(ptr) AccessChain 34(data) 37 333 38 + 373: 25(int64_t) Load 372 + 374: 6(int) Load 8(invocation) + 375: 25(int64_t) GroupNonUniformShuffleXor 43 373 374 + 376: 334(ptr) AccessChain 34(data) 371 333 38 + Store 376 375 377: 6(int) Load 8(invocation) - 378:372(i64vec2) GroupNonUniformShuffle 43 376 377 - 379: 373(ptr) AccessChain 34(data) 371 364 - 380: 28(i64vec4) Load 379 - 381: 28(i64vec4) VectorShuffle 380 378 4 5 2 3 - Store 379 381 - 382: 6(int) Load 8(invocation) - 384: 373(ptr) AccessChain 34(data) 59 364 - 385: 28(i64vec4) Load 384 - 386:383(i64vec3) VectorShuffle 385 385 0 1 2 + 378: 342(ptr) AccessChain 34(data) 47 333 + 379: 26(i64vec4) Load 378 + 380:341(i64vec2) VectorShuffle 379 379 0 1 + 381: 6(int) Load 8(invocation) + 382:341(i64vec2) GroupNonUniformShuffleXor 43 380 381 + 383: 334(ptr) AccessChain 34(data) 377 333 38 + 384: 25(int64_t) CompositeExtract 382 0 + Store 383 384 + 385: 334(ptr) AccessChain 34(data) 377 333 57 + 386: 25(int64_t) CompositeExtract 382 1 + Store 385 386 387: 6(int) Load 8(invocation) - 388:383(i64vec3) GroupNonUniformShuffle 43 386 387 - 389: 373(ptr) AccessChain 34(data) 382 364 - 390: 28(i64vec4) Load 389 - 391: 28(i64vec4) VectorShuffle 390 388 4 5 6 3 - Store 389 391 - 392: 6(int) Load 8(invocation) - 393: 373(ptr) AccessChain 34(data) 70 364 - 394: 28(i64vec4) Load 393 - 395: 6(int) Load 8(invocation) - 396: 28(i64vec4) GroupNonUniformShuffle 43 394 395 - 397: 373(ptr) AccessChain 34(data) 392 364 - Store 397 396 - 398: 6(int) Load 8(invocation) - 399: 365(ptr) AccessChain 34(data) 37 364 38 - 400: 27(int64_t) Load 399 - 401: 6(int) Load 8(invocation) - 402: 27(int64_t) GroupNonUniformShuffleXor 43 400 401 - 403: 365(ptr) AccessChain 34(data) 398 364 38 - Store 403 402 - 404: 6(int) Load 8(invocation) - 405: 373(ptr) AccessChain 34(data) 47 364 - 406: 28(i64vec4) Load 405 - 407:372(i64vec2) VectorShuffle 406 406 0 1 - 408: 6(int) Load 8(invocation) - 409:372(i64vec2) GroupNonUniformShuffleXor 43 407 408 - 410: 373(ptr) AccessChain 34(data) 404 364 - 411: 28(i64vec4) Load 410 - 412: 28(i64vec4) VectorShuffle 411 409 4 5 2 3 - Store 410 412 + 388: 342(ptr) AccessChain 34(data) 61 333 + 389: 26(i64vec4) Load 388 + 390:353(i64vec3) VectorShuffle 389 389 0 1 2 + 391: 6(int) Load 8(invocation) + 392:353(i64vec3) GroupNonUniformShuffleXor 43 390 391 + 393: 334(ptr) AccessChain 34(data) 387 333 38 + 394: 25(int64_t) CompositeExtract 392 0 + Store 393 394 + 395: 334(ptr) AccessChain 34(data) 387 333 57 + 396: 25(int64_t) CompositeExtract 392 1 + Store 395 396 + 397: 334(ptr) AccessChain 34(data) 387 333 72 + 398: 25(int64_t) CompositeExtract 392 2 + Store 397 398 + 399: 6(int) Load 8(invocation) + 400: 342(ptr) AccessChain 34(data) 76 333 + 401: 26(i64vec4) Load 400 + 402: 6(int) Load 8(invocation) + 403: 26(i64vec4) GroupNonUniformShuffleXor 43 401 402 + 404: 342(ptr) AccessChain 34(data) 399 333 + Store 404 403 + 405: 6(int) Load 8(invocation) + 408: 407(ptr) AccessChain 34(data) 37 406 38 + 409: 27(int64_t) Load 408 + 410: 6(int) Load 8(invocation) + 411: 27(int64_t) GroupNonUniformShuffle 43 409 410 + 412: 407(ptr) AccessChain 34(data) 405 406 38 + Store 412 411 413: 6(int) Load 8(invocation) - 414: 373(ptr) AccessChain 34(data) 59 364 - 415: 28(i64vec4) Load 414 - 416:383(i64vec3) VectorShuffle 415 415 0 1 2 - 417: 6(int) Load 8(invocation) - 418:383(i64vec3) GroupNonUniformShuffleXor 43 416 417 - 419: 373(ptr) AccessChain 34(data) 413 364 - 420: 28(i64vec4) Load 419 - 421: 28(i64vec4) VectorShuffle 420 418 4 5 6 3 - Store 419 421 - 422: 6(int) Load 8(invocation) - 423: 373(ptr) AccessChain 34(data) 70 364 - 424: 28(i64vec4) Load 423 + 416: 415(ptr) AccessChain 34(data) 47 406 + 417: 28(i64vec4) Load 416 + 418:414(i64vec2) VectorShuffle 417 417 0 1 + 419: 6(int) Load 8(invocation) + 420:414(i64vec2) GroupNonUniformShuffle 43 418 419 + 421: 407(ptr) AccessChain 34(data) 413 406 38 + 422: 27(int64_t) CompositeExtract 420 0 + Store 421 422 + 423: 407(ptr) AccessChain 34(data) 413 406 57 + 424: 27(int64_t) CompositeExtract 420 1 + Store 423 424 425: 6(int) Load 8(invocation) - 426: 28(i64vec4) GroupNonUniformShuffleXor 43 424 425 - 427: 373(ptr) AccessChain 34(data) 422 364 - Store 427 426 - 428: 6(int) Load 8(invocation) - 431: 430(ptr) AccessChain 34(data) 37 429 38 - 432:29(float16_t) Load 431 - 433: 6(int) Load 8(invocation) - 434:29(float16_t) GroupNonUniformShuffle 43 432 433 - 435: 430(ptr) AccessChain 34(data) 428 429 38 - Store 435 434 - 436: 6(int) Load 8(invocation) - 439: 438(ptr) AccessChain 34(data) 47 429 - 440: 30(f16vec4) Load 439 - 441:437(f16vec2) VectorShuffle 440 440 0 1 - 442: 6(int) Load 8(invocation) - 443:437(f16vec2) GroupNonUniformShuffle 43 441 442 - 444: 438(ptr) AccessChain 34(data) 436 429 - 445: 30(f16vec4) Load 444 - 446: 30(f16vec4) VectorShuffle 445 443 4 5 2 3 - Store 444 446 + 427: 415(ptr) AccessChain 34(data) 61 406 + 428: 28(i64vec4) Load 427 + 429:426(i64vec3) VectorShuffle 428 428 0 1 2 + 430: 6(int) Load 8(invocation) + 431:426(i64vec3) GroupNonUniformShuffle 43 429 430 + 432: 407(ptr) AccessChain 34(data) 425 406 38 + 433: 27(int64_t) CompositeExtract 431 0 + Store 432 433 + 434: 407(ptr) AccessChain 34(data) 425 406 57 + 435: 27(int64_t) CompositeExtract 431 1 + Store 434 435 + 436: 407(ptr) AccessChain 34(data) 425 406 72 + 437: 27(int64_t) CompositeExtract 431 2 + Store 436 437 + 438: 6(int) Load 8(invocation) + 439: 415(ptr) AccessChain 34(data) 76 406 + 440: 28(i64vec4) Load 439 + 441: 6(int) Load 8(invocation) + 442: 28(i64vec4) GroupNonUniformShuffle 43 440 441 + 443: 415(ptr) AccessChain 34(data) 438 406 + Store 443 442 + 444: 6(int) Load 8(invocation) + 445: 407(ptr) AccessChain 34(data) 37 406 38 + 446: 27(int64_t) Load 445 447: 6(int) Load 8(invocation) - 449: 438(ptr) AccessChain 34(data) 59 429 - 450: 30(f16vec4) Load 449 - 451:448(f16vec3) VectorShuffle 450 450 0 1 2 - 452: 6(int) Load 8(invocation) - 453:448(f16vec3) GroupNonUniformShuffle 43 451 452 - 454: 438(ptr) AccessChain 34(data) 447 429 - 455: 30(f16vec4) Load 454 - 456: 30(f16vec4) VectorShuffle 455 453 4 5 6 3 - Store 454 456 - 457: 6(int) Load 8(invocation) - 458: 438(ptr) AccessChain 34(data) 70 429 - 459: 30(f16vec4) Load 458 + 448: 27(int64_t) GroupNonUniformShuffleXor 43 446 447 + 449: 407(ptr) AccessChain 34(data) 444 406 38 + Store 449 448 + 450: 6(int) Load 8(invocation) + 451: 415(ptr) AccessChain 34(data) 47 406 + 452: 28(i64vec4) Load 451 + 453:414(i64vec2) VectorShuffle 452 452 0 1 + 454: 6(int) Load 8(invocation) + 455:414(i64vec2) GroupNonUniformShuffleXor 43 453 454 + 456: 407(ptr) AccessChain 34(data) 450 406 38 + 457: 27(int64_t) CompositeExtract 455 0 + Store 456 457 + 458: 407(ptr) AccessChain 34(data) 450 406 57 + 459: 27(int64_t) CompositeExtract 455 1 + Store 458 459 460: 6(int) Load 8(invocation) - 461: 30(f16vec4) GroupNonUniformShuffle 43 459 460 - 462: 438(ptr) AccessChain 34(data) 457 429 - Store 462 461 - 463: 6(int) Load 8(invocation) - 464: 430(ptr) AccessChain 34(data) 37 429 38 - 465:29(float16_t) Load 464 - 466: 6(int) Load 8(invocation) - 467:29(float16_t) GroupNonUniformShuffleXor 43 465 466 - 468: 430(ptr) AccessChain 34(data) 463 429 38 - Store 468 467 - 469: 6(int) Load 8(invocation) - 470: 438(ptr) AccessChain 34(data) 47 429 - 471: 30(f16vec4) Load 470 - 472:437(f16vec2) VectorShuffle 471 471 0 1 - 473: 6(int) Load 8(invocation) - 474:437(f16vec2) GroupNonUniformShuffleXor 43 472 473 - 475: 438(ptr) AccessChain 34(data) 469 429 - 476: 30(f16vec4) Load 475 - 477: 30(f16vec4) VectorShuffle 476 474 4 5 2 3 - Store 475 477 + 461: 415(ptr) AccessChain 34(data) 61 406 + 462: 28(i64vec4) Load 461 + 463:426(i64vec3) VectorShuffle 462 462 0 1 2 + 464: 6(int) Load 8(invocation) + 465:426(i64vec3) GroupNonUniformShuffleXor 43 463 464 + 466: 407(ptr) AccessChain 34(data) 460 406 38 + 467: 27(int64_t) CompositeExtract 465 0 + Store 466 467 + 468: 407(ptr) AccessChain 34(data) 460 406 57 + 469: 27(int64_t) CompositeExtract 465 1 + Store 468 469 + 470: 407(ptr) AccessChain 34(data) 460 406 72 + 471: 27(int64_t) CompositeExtract 465 2 + Store 470 471 + 472: 6(int) Load 8(invocation) + 473: 415(ptr) AccessChain 34(data) 76 406 + 474: 28(i64vec4) Load 473 + 475: 6(int) Load 8(invocation) + 476: 28(i64vec4) GroupNonUniformShuffleXor 43 474 475 + 477: 415(ptr) AccessChain 34(data) 472 406 + Store 477 476 478: 6(int) Load 8(invocation) - 479: 438(ptr) AccessChain 34(data) 59 429 - 480: 30(f16vec4) Load 479 - 481:448(f16vec3) VectorShuffle 480 480 0 1 2 - 482: 6(int) Load 8(invocation) - 483:448(f16vec3) GroupNonUniformShuffleXor 43 481 482 - 484: 438(ptr) AccessChain 34(data) 478 429 - 485: 30(f16vec4) Load 484 - 486: 30(f16vec4) VectorShuffle 485 483 4 5 6 3 - Store 484 486 - 487: 6(int) Load 8(invocation) - 488: 438(ptr) AccessChain 34(data) 70 429 - 489: 30(f16vec4) Load 488 - 490: 6(int) Load 8(invocation) - 491: 30(f16vec4) GroupNonUniformShuffleXor 43 489 490 - 492: 438(ptr) AccessChain 34(data) 487 429 - Store 492 491 + 481: 480(ptr) AccessChain 34(data) 37 479 38 + 482:29(float16_t) Load 481 + 483: 6(int) Load 8(invocation) + 484:29(float16_t) GroupNonUniformShuffle 43 482 483 + 485: 480(ptr) AccessChain 34(data) 478 479 38 + Store 485 484 + 486: 6(int) Load 8(invocation) + 489: 488(ptr) AccessChain 34(data) 47 479 + 490: 30(f16vec4) Load 489 + 491:487(f16vec2) VectorShuffle 490 490 0 1 + 492: 6(int) Load 8(invocation) + 493:487(f16vec2) GroupNonUniformShuffle 43 491 492 + 494: 480(ptr) AccessChain 34(data) 486 479 38 + 495:29(float16_t) CompositeExtract 493 0 + Store 494 495 + 496: 480(ptr) AccessChain 34(data) 486 479 57 + 497:29(float16_t) CompositeExtract 493 1 + Store 496 497 + 498: 6(int) Load 8(invocation) + 500: 488(ptr) AccessChain 34(data) 61 479 + 501: 30(f16vec4) Load 500 + 502:499(f16vec3) VectorShuffle 501 501 0 1 2 + 503: 6(int) Load 8(invocation) + 504:499(f16vec3) GroupNonUniformShuffle 43 502 503 + 505: 480(ptr) AccessChain 34(data) 498 479 38 + 506:29(float16_t) CompositeExtract 504 0 + Store 505 506 + 507: 480(ptr) AccessChain 34(data) 498 479 57 + 508:29(float16_t) CompositeExtract 504 1 + Store 507 508 + 509: 480(ptr) AccessChain 34(data) 498 479 72 + 510:29(float16_t) CompositeExtract 504 2 + Store 509 510 + 511: 6(int) Load 8(invocation) + 512: 488(ptr) AccessChain 34(data) 76 479 + 513: 30(f16vec4) Load 512 + 514: 6(int) Load 8(invocation) + 515: 30(f16vec4) GroupNonUniformShuffle 43 513 514 + 516: 488(ptr) AccessChain 34(data) 511 479 + Store 516 515 + 517: 6(int) Load 8(invocation) + 518: 480(ptr) AccessChain 34(data) 37 479 38 + 519:29(float16_t) Load 518 + 520: 6(int) Load 8(invocation) + 521:29(float16_t) GroupNonUniformShuffleXor 43 519 520 + 522: 480(ptr) AccessChain 34(data) 517 479 38 + Store 522 521 + 523: 6(int) Load 8(invocation) + 524: 488(ptr) AccessChain 34(data) 47 479 + 525: 30(f16vec4) Load 524 + 526:487(f16vec2) VectorShuffle 525 525 0 1 + 527: 6(int) Load 8(invocation) + 528:487(f16vec2) GroupNonUniformShuffleXor 43 526 527 + 529: 480(ptr) AccessChain 34(data) 523 479 38 + 530:29(float16_t) CompositeExtract 528 0 + Store 529 530 + 531: 480(ptr) AccessChain 34(data) 523 479 57 + 532:29(float16_t) CompositeExtract 528 1 + Store 531 532 + 533: 6(int) Load 8(invocation) + 534: 488(ptr) AccessChain 34(data) 61 479 + 535: 30(f16vec4) Load 534 + 536:499(f16vec3) VectorShuffle 535 535 0 1 2 + 537: 6(int) Load 8(invocation) + 538:499(f16vec3) GroupNonUniformShuffleXor 43 536 537 + 539: 480(ptr) AccessChain 34(data) 533 479 38 + 540:29(float16_t) CompositeExtract 538 0 + Store 539 540 + 541: 480(ptr) AccessChain 34(data) 533 479 57 + 542:29(float16_t) CompositeExtract 538 1 + Store 541 542 + 543: 480(ptr) AccessChain 34(data) 533 479 72 + 544:29(float16_t) CompositeExtract 538 2 + Store 543 544 + 545: 6(int) Load 8(invocation) + 546: 488(ptr) AccessChain 34(data) 76 479 + 547: 30(f16vec4) Load 546 + 548: 6(int) Load 8(invocation) + 549: 30(f16vec4) GroupNonUniformShuffleXor 43 547 548 + 550: 488(ptr) AccessChain 34(data) 545 479 + Store 550 549 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out index d847be5196..8665c46c26 100644 --- a/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out +++ b/Test/baseResults/spv.subgroupExtendedTypesShuffleRelative.comp.out @@ -1,7 +1,7 @@ spv.subgroupExtendedTypesShuffleRelative.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 497 +// Id's are bound by 554 Capability Shader Capability Float16 @@ -59,7 +59,7 @@ spv.subgroupExtendedTypesShuffleRelative.comp Decorate 31(Buffers) Block Decorate 34(data) DescriptorSet 0 Decorate 34(data) Binding 0 - Decorate 496 BuiltIn WorkgroupSize + Decorate 553 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -94,40 +94,41 @@ spv.subgroupExtendedTypesShuffleRelative.comp 47: 36(int) Constant 1 48: TypeVector 17(int8_t) 2 49: TypePointer StorageBuffer 18(i8vec4) - 59: 36(int) Constant 2 - 60: TypeVector 17(int8_t) 3 - 70: 36(int) Constant 3 - 107: TypePointer StorageBuffer 19(int8_t) - 114: TypeVector 19(int8_t) 2 - 115: TypePointer StorageBuffer 20(i8vec4) - 125: TypeVector 19(int8_t) 3 - 171: TypePointer StorageBuffer 21(int16_t) - 178: TypeVector 21(int16_t) 2 - 179: TypePointer StorageBuffer 22(i16vec4) - 189: TypeVector 21(int16_t) 3 - 235: TypePointer StorageBuffer 23(int16_t) - 242: TypeVector 23(int16_t) 2 - 243: TypePointer StorageBuffer 24(i16vec4) - 253: TypeVector 23(int16_t) 3 - 299: 36(int) Constant 4 - 300: TypePointer StorageBuffer 25(int64_t) - 307: TypeVector 25(int64_t) 2 - 308: TypePointer StorageBuffer 26(i64vec4) - 318: TypeVector 25(int64_t) 3 - 364: 36(int) Constant 5 - 365: TypePointer StorageBuffer 27(int64_t) - 372: TypeVector 27(int64_t) 2 - 373: TypePointer StorageBuffer 28(i64vec4) - 383: TypeVector 27(int64_t) 3 - 429: 36(int) Constant 6 - 430: TypePointer StorageBuffer 29(float16_t) - 437: TypeVector 29(float16_t) 2 - 438: TypePointer StorageBuffer 30(f16vec4) - 448: TypeVector 29(float16_t) 3 - 493: TypeVector 6(int) 3 - 494: 6(int) Constant 8 - 495: 6(int) Constant 1 - 496: 493(ivec3) ConstantComposite 494 495 495 + 57: 6(int) Constant 1 + 61: 36(int) Constant 2 + 62: TypeVector 17(int8_t) 3 + 72: 6(int) Constant 2 + 76: 36(int) Constant 3 + 117: TypePointer StorageBuffer 19(int8_t) + 124: TypeVector 19(int8_t) 2 + 125: TypePointer StorageBuffer 20(i8vec4) + 136: TypeVector 19(int8_t) 3 + 189: TypePointer StorageBuffer 21(int16_t) + 196: TypeVector 21(int16_t) 2 + 197: TypePointer StorageBuffer 22(i16vec4) + 208: TypeVector 21(int16_t) 3 + 261: TypePointer StorageBuffer 23(int16_t) + 268: TypeVector 23(int16_t) 2 + 269: TypePointer StorageBuffer 24(i16vec4) + 280: TypeVector 23(int16_t) 3 + 333: 36(int) Constant 4 + 334: TypePointer StorageBuffer 25(int64_t) + 341: TypeVector 25(int64_t) 2 + 342: TypePointer StorageBuffer 26(i64vec4) + 353: TypeVector 25(int64_t) 3 + 406: 36(int) Constant 5 + 407: TypePointer StorageBuffer 27(int64_t) + 414: TypeVector 27(int64_t) 2 + 415: TypePointer StorageBuffer 28(i64vec4) + 426: TypeVector 27(int64_t) 3 + 479: 36(int) Constant 6 + 480: TypePointer StorageBuffer 29(float16_t) + 487: TypeVector 29(float16_t) 2 + 488: TypePointer StorageBuffer 30(f16vec4) + 499: TypeVector 29(float16_t) 3 + 551: TypeVector 6(int) 3 + 552: 6(int) Constant 8 + 553: 551(ivec3) ConstantComposite 552 57 57 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -149,468 +150,566 @@ spv.subgroupExtendedTypesShuffleRelative.comp 52: 48(i8vec2) VectorShuffle 51 51 0 1 53: 6(int) Load 8(invocation) 54: 48(i8vec2) GroupNonUniformShuffleUp 43 52 53 - 55: 49(ptr) AccessChain 34(data) 46 37 - 56: 18(i8vec4) Load 55 - 57: 18(i8vec4) VectorShuffle 56 54 4 5 2 3 - Store 55 57 - 58: 6(int) Load 8(invocation) - 61: 49(ptr) AccessChain 34(data) 59 37 - 62: 18(i8vec4) Load 61 - 63: 60(i8vec3) VectorShuffle 62 62 0 1 2 - 64: 6(int) Load 8(invocation) - 65: 60(i8vec3) GroupNonUniformShuffleUp 43 63 64 - 66: 49(ptr) AccessChain 34(data) 58 37 - 67: 18(i8vec4) Load 66 - 68: 18(i8vec4) VectorShuffle 67 65 4 5 6 3 - Store 66 68 - 69: 6(int) Load 8(invocation) - 71: 49(ptr) AccessChain 34(data) 70 37 - 72: 18(i8vec4) Load 71 - 73: 6(int) Load 8(invocation) - 74: 18(i8vec4) GroupNonUniformShuffleUp 43 72 73 - 75: 49(ptr) AccessChain 34(data) 69 37 - Store 75 74 - 76: 6(int) Load 8(invocation) - 77: 39(ptr) AccessChain 34(data) 37 37 38 - 78: 17(int8_t) Load 77 + 55: 39(ptr) AccessChain 34(data) 46 37 38 + 56: 17(int8_t) CompositeExtract 54 0 + Store 55 56 + 58: 39(ptr) AccessChain 34(data) 46 37 57 + 59: 17(int8_t) CompositeExtract 54 1 + Store 58 59 + 60: 6(int) Load 8(invocation) + 63: 49(ptr) AccessChain 34(data) 61 37 + 64: 18(i8vec4) Load 63 + 65: 62(i8vec3) VectorShuffle 64 64 0 1 2 + 66: 6(int) Load 8(invocation) + 67: 62(i8vec3) GroupNonUniformShuffleUp 43 65 66 + 68: 39(ptr) AccessChain 34(data) 60 37 38 + 69: 17(int8_t) CompositeExtract 67 0 + Store 68 69 + 70: 39(ptr) AccessChain 34(data) 60 37 57 + 71: 17(int8_t) CompositeExtract 67 1 + Store 70 71 + 73: 39(ptr) AccessChain 34(data) 60 37 72 + 74: 17(int8_t) CompositeExtract 67 2 + Store 73 74 + 75: 6(int) Load 8(invocation) + 77: 49(ptr) AccessChain 34(data) 76 37 + 78: 18(i8vec4) Load 77 79: 6(int) Load 8(invocation) - 80: 17(int8_t) GroupNonUniformShuffleDown 43 78 79 - 81: 39(ptr) AccessChain 34(data) 76 37 38 + 80: 18(i8vec4) GroupNonUniformShuffleUp 43 78 79 + 81: 49(ptr) AccessChain 34(data) 75 37 Store 81 80 82: 6(int) Load 8(invocation) - 83: 49(ptr) AccessChain 34(data) 47 37 - 84: 18(i8vec4) Load 83 - 85: 48(i8vec2) VectorShuffle 84 84 0 1 - 86: 6(int) Load 8(invocation) - 87: 48(i8vec2) GroupNonUniformShuffleDown 43 85 86 - 88: 49(ptr) AccessChain 34(data) 82 37 - 89: 18(i8vec4) Load 88 - 90: 18(i8vec4) VectorShuffle 89 87 4 5 2 3 - Store 88 90 - 91: 6(int) Load 8(invocation) - 92: 49(ptr) AccessChain 34(data) 59 37 - 93: 18(i8vec4) Load 92 - 94: 60(i8vec3) VectorShuffle 93 93 0 1 2 - 95: 6(int) Load 8(invocation) - 96: 60(i8vec3) GroupNonUniformShuffleDown 43 94 95 - 97: 49(ptr) AccessChain 34(data) 91 37 - 98: 18(i8vec4) Load 97 - 99: 18(i8vec4) VectorShuffle 98 96 4 5 6 3 - Store 97 99 - 100: 6(int) Load 8(invocation) - 101: 49(ptr) AccessChain 34(data) 70 37 - 102: 18(i8vec4) Load 101 - 103: 6(int) Load 8(invocation) - 104: 18(i8vec4) GroupNonUniformShuffleDown 43 102 103 - 105: 49(ptr) AccessChain 34(data) 100 37 - Store 105 104 - 106: 6(int) Load 8(invocation) - 108: 107(ptr) AccessChain 34(data) 37 47 38 - 109: 19(int8_t) Load 108 + 83: 39(ptr) AccessChain 34(data) 37 37 38 + 84: 17(int8_t) Load 83 + 85: 6(int) Load 8(invocation) + 86: 17(int8_t) GroupNonUniformShuffleDown 43 84 85 + 87: 39(ptr) AccessChain 34(data) 82 37 38 + Store 87 86 + 88: 6(int) Load 8(invocation) + 89: 49(ptr) AccessChain 34(data) 47 37 + 90: 18(i8vec4) Load 89 + 91: 48(i8vec2) VectorShuffle 90 90 0 1 + 92: 6(int) Load 8(invocation) + 93: 48(i8vec2) GroupNonUniformShuffleDown 43 91 92 + 94: 39(ptr) AccessChain 34(data) 88 37 38 + 95: 17(int8_t) CompositeExtract 93 0 + Store 94 95 + 96: 39(ptr) AccessChain 34(data) 88 37 57 + 97: 17(int8_t) CompositeExtract 93 1 + Store 96 97 + 98: 6(int) Load 8(invocation) + 99: 49(ptr) AccessChain 34(data) 61 37 + 100: 18(i8vec4) Load 99 + 101: 62(i8vec3) VectorShuffle 100 100 0 1 2 + 102: 6(int) Load 8(invocation) + 103: 62(i8vec3) GroupNonUniformShuffleDown 43 101 102 + 104: 39(ptr) AccessChain 34(data) 98 37 38 + 105: 17(int8_t) CompositeExtract 103 0 + Store 104 105 + 106: 39(ptr) AccessChain 34(data) 98 37 57 + 107: 17(int8_t) CompositeExtract 103 1 + Store 106 107 + 108: 39(ptr) AccessChain 34(data) 98 37 72 + 109: 17(int8_t) CompositeExtract 103 2 + Store 108 109 110: 6(int) Load 8(invocation) - 111: 19(int8_t) GroupNonUniformShuffleUp 43 109 110 - 112: 107(ptr) AccessChain 34(data) 106 47 38 - Store 112 111 + 111: 49(ptr) AccessChain 34(data) 76 37 + 112: 18(i8vec4) Load 111 113: 6(int) Load 8(invocation) - 116: 115(ptr) AccessChain 34(data) 47 47 - 117: 20(i8vec4) Load 116 - 118: 114(i8vec2) VectorShuffle 117 117 0 1 - 119: 6(int) Load 8(invocation) - 120: 114(i8vec2) GroupNonUniformShuffleUp 43 118 119 - 121: 115(ptr) AccessChain 34(data) 113 47 - 122: 20(i8vec4) Load 121 - 123: 20(i8vec4) VectorShuffle 122 120 4 5 2 3 - Store 121 123 - 124: 6(int) Load 8(invocation) - 126: 115(ptr) AccessChain 34(data) 59 47 + 114: 18(i8vec4) GroupNonUniformShuffleDown 43 112 113 + 115: 49(ptr) AccessChain 34(data) 110 37 + Store 115 114 + 116: 6(int) Load 8(invocation) + 118: 117(ptr) AccessChain 34(data) 37 47 38 + 119: 19(int8_t) Load 118 + 120: 6(int) Load 8(invocation) + 121: 19(int8_t) GroupNonUniformShuffleUp 43 119 120 + 122: 117(ptr) AccessChain 34(data) 116 47 38 + Store 122 121 + 123: 6(int) Load 8(invocation) + 126: 125(ptr) AccessChain 34(data) 47 47 127: 20(i8vec4) Load 126 - 128: 125(i8vec3) VectorShuffle 127 127 0 1 2 + 128: 124(i8vec2) VectorShuffle 127 127 0 1 129: 6(int) Load 8(invocation) - 130: 125(i8vec3) GroupNonUniformShuffleUp 43 128 129 - 131: 115(ptr) AccessChain 34(data) 124 47 - 132: 20(i8vec4) Load 131 - 133: 20(i8vec4) VectorShuffle 132 130 4 5 6 3 - Store 131 133 - 134: 6(int) Load 8(invocation) - 135: 115(ptr) AccessChain 34(data) 70 47 - 136: 20(i8vec4) Load 135 - 137: 6(int) Load 8(invocation) - 138: 20(i8vec4) GroupNonUniformShuffleUp 43 136 137 - 139: 115(ptr) AccessChain 34(data) 134 47 - Store 139 138 + 130: 124(i8vec2) GroupNonUniformShuffleUp 43 128 129 + 131: 117(ptr) AccessChain 34(data) 123 47 38 + 132: 19(int8_t) CompositeExtract 130 0 + Store 131 132 + 133: 117(ptr) AccessChain 34(data) 123 47 57 + 134: 19(int8_t) CompositeExtract 130 1 + Store 133 134 + 135: 6(int) Load 8(invocation) + 137: 125(ptr) AccessChain 34(data) 61 47 + 138: 20(i8vec4) Load 137 + 139: 136(i8vec3) VectorShuffle 138 138 0 1 2 140: 6(int) Load 8(invocation) - 141: 107(ptr) AccessChain 34(data) 37 47 38 - 142: 19(int8_t) Load 141 - 143: 6(int) Load 8(invocation) - 144: 19(int8_t) GroupNonUniformShuffleDown 43 142 143 - 145: 107(ptr) AccessChain 34(data) 140 47 38 - Store 145 144 - 146: 6(int) Load 8(invocation) - 147: 115(ptr) AccessChain 34(data) 47 47 - 148: 20(i8vec4) Load 147 - 149: 114(i8vec2) VectorShuffle 148 148 0 1 - 150: 6(int) Load 8(invocation) - 151: 114(i8vec2) GroupNonUniformShuffleDown 43 149 150 - 152: 115(ptr) AccessChain 34(data) 146 47 - 153: 20(i8vec4) Load 152 - 154: 20(i8vec4) VectorShuffle 153 151 4 5 2 3 - Store 152 154 - 155: 6(int) Load 8(invocation) - 156: 115(ptr) AccessChain 34(data) 59 47 - 157: 20(i8vec4) Load 156 - 158: 125(i8vec3) VectorShuffle 157 157 0 1 2 - 159: 6(int) Load 8(invocation) - 160: 125(i8vec3) GroupNonUniformShuffleDown 43 158 159 - 161: 115(ptr) AccessChain 34(data) 155 47 + 141: 136(i8vec3) GroupNonUniformShuffleUp 43 139 140 + 142: 117(ptr) AccessChain 34(data) 135 47 38 + 143: 19(int8_t) CompositeExtract 141 0 + Store 142 143 + 144: 117(ptr) AccessChain 34(data) 135 47 57 + 145: 19(int8_t) CompositeExtract 141 1 + Store 144 145 + 146: 117(ptr) AccessChain 34(data) 135 47 72 + 147: 19(int8_t) CompositeExtract 141 2 + Store 146 147 + 148: 6(int) Load 8(invocation) + 149: 125(ptr) AccessChain 34(data) 76 47 + 150: 20(i8vec4) Load 149 + 151: 6(int) Load 8(invocation) + 152: 20(i8vec4) GroupNonUniformShuffleUp 43 150 151 + 153: 125(ptr) AccessChain 34(data) 148 47 + Store 153 152 + 154: 6(int) Load 8(invocation) + 155: 117(ptr) AccessChain 34(data) 37 47 38 + 156: 19(int8_t) Load 155 + 157: 6(int) Load 8(invocation) + 158: 19(int8_t) GroupNonUniformShuffleDown 43 156 157 + 159: 117(ptr) AccessChain 34(data) 154 47 38 + Store 159 158 + 160: 6(int) Load 8(invocation) + 161: 125(ptr) AccessChain 34(data) 47 47 162: 20(i8vec4) Load 161 - 163: 20(i8vec4) VectorShuffle 162 160 4 5 6 3 - Store 161 163 + 163: 124(i8vec2) VectorShuffle 162 162 0 1 164: 6(int) Load 8(invocation) - 165: 115(ptr) AccessChain 34(data) 70 47 - 166: 20(i8vec4) Load 165 - 167: 6(int) Load 8(invocation) - 168: 20(i8vec4) GroupNonUniformShuffleDown 43 166 167 - 169: 115(ptr) AccessChain 34(data) 164 47 - Store 169 168 + 165: 124(i8vec2) GroupNonUniformShuffleDown 43 163 164 + 166: 117(ptr) AccessChain 34(data) 160 47 38 + 167: 19(int8_t) CompositeExtract 165 0 + Store 166 167 + 168: 117(ptr) AccessChain 34(data) 160 47 57 + 169: 19(int8_t) CompositeExtract 165 1 + Store 168 169 170: 6(int) Load 8(invocation) - 172: 171(ptr) AccessChain 34(data) 37 59 38 - 173: 21(int16_t) Load 172 + 171: 125(ptr) AccessChain 34(data) 61 47 + 172: 20(i8vec4) Load 171 + 173: 136(i8vec3) VectorShuffle 172 172 0 1 2 174: 6(int) Load 8(invocation) - 175: 21(int16_t) GroupNonUniformShuffleUp 43 173 174 - 176: 171(ptr) AccessChain 34(data) 170 59 38 - Store 176 175 - 177: 6(int) Load 8(invocation) - 180: 179(ptr) AccessChain 34(data) 47 59 - 181: 22(i16vec4) Load 180 - 182:178(i16vec2) VectorShuffle 181 181 0 1 - 183: 6(int) Load 8(invocation) - 184:178(i16vec2) GroupNonUniformShuffleUp 43 182 183 - 185: 179(ptr) AccessChain 34(data) 177 59 - 186: 22(i16vec4) Load 185 - 187: 22(i16vec4) VectorShuffle 186 184 4 5 2 3 - Store 185 187 + 175: 136(i8vec3) GroupNonUniformShuffleDown 43 173 174 + 176: 117(ptr) AccessChain 34(data) 170 47 38 + 177: 19(int8_t) CompositeExtract 175 0 + Store 176 177 + 178: 117(ptr) AccessChain 34(data) 170 47 57 + 179: 19(int8_t) CompositeExtract 175 1 + Store 178 179 + 180: 117(ptr) AccessChain 34(data) 170 47 72 + 181: 19(int8_t) CompositeExtract 175 2 + Store 180 181 + 182: 6(int) Load 8(invocation) + 183: 125(ptr) AccessChain 34(data) 76 47 + 184: 20(i8vec4) Load 183 + 185: 6(int) Load 8(invocation) + 186: 20(i8vec4) GroupNonUniformShuffleDown 43 184 185 + 187: 125(ptr) AccessChain 34(data) 182 47 + Store 187 186 188: 6(int) Load 8(invocation) - 190: 179(ptr) AccessChain 34(data) 59 59 - 191: 22(i16vec4) Load 190 - 192:189(i16vec3) VectorShuffle 191 191 0 1 2 - 193: 6(int) Load 8(invocation) - 194:189(i16vec3) GroupNonUniformShuffleUp 43 192 193 - 195: 179(ptr) AccessChain 34(data) 188 59 - 196: 22(i16vec4) Load 195 - 197: 22(i16vec4) VectorShuffle 196 194 4 5 6 3 - Store 195 197 - 198: 6(int) Load 8(invocation) - 199: 179(ptr) AccessChain 34(data) 70 59 - 200: 22(i16vec4) Load 199 + 190: 189(ptr) AccessChain 34(data) 37 61 38 + 191: 21(int16_t) Load 190 + 192: 6(int) Load 8(invocation) + 193: 21(int16_t) GroupNonUniformShuffleUp 43 191 192 + 194: 189(ptr) AccessChain 34(data) 188 61 38 + Store 194 193 + 195: 6(int) Load 8(invocation) + 198: 197(ptr) AccessChain 34(data) 47 61 + 199: 22(i16vec4) Load 198 + 200:196(i16vec2) VectorShuffle 199 199 0 1 201: 6(int) Load 8(invocation) - 202: 22(i16vec4) GroupNonUniformShuffleUp 43 200 201 - 203: 179(ptr) AccessChain 34(data) 198 59 - Store 203 202 - 204: 6(int) Load 8(invocation) - 205: 171(ptr) AccessChain 34(data) 37 59 38 - 206: 21(int16_t) Load 205 + 202:196(i16vec2) GroupNonUniformShuffleUp 43 200 201 + 203: 189(ptr) AccessChain 34(data) 195 61 38 + 204: 21(int16_t) CompositeExtract 202 0 + Store 203 204 + 205: 189(ptr) AccessChain 34(data) 195 61 57 + 206: 21(int16_t) CompositeExtract 202 1 + Store 205 206 207: 6(int) Load 8(invocation) - 208: 21(int16_t) GroupNonUniformShuffleDown 43 206 207 - 209: 171(ptr) AccessChain 34(data) 204 59 38 - Store 209 208 - 210: 6(int) Load 8(invocation) - 211: 179(ptr) AccessChain 34(data) 47 59 - 212: 22(i16vec4) Load 211 - 213:178(i16vec2) VectorShuffle 212 212 0 1 - 214: 6(int) Load 8(invocation) - 215:178(i16vec2) GroupNonUniformShuffleDown 43 213 214 - 216: 179(ptr) AccessChain 34(data) 210 59 - 217: 22(i16vec4) Load 216 - 218: 22(i16vec4) VectorShuffle 217 215 4 5 2 3 - Store 216 218 - 219: 6(int) Load 8(invocation) - 220: 179(ptr) AccessChain 34(data) 59 59 - 221: 22(i16vec4) Load 220 - 222:189(i16vec3) VectorShuffle 221 221 0 1 2 + 209: 197(ptr) AccessChain 34(data) 61 61 + 210: 22(i16vec4) Load 209 + 211:208(i16vec3) VectorShuffle 210 210 0 1 2 + 212: 6(int) Load 8(invocation) + 213:208(i16vec3) GroupNonUniformShuffleUp 43 211 212 + 214: 189(ptr) AccessChain 34(data) 207 61 38 + 215: 21(int16_t) CompositeExtract 213 0 + Store 214 215 + 216: 189(ptr) AccessChain 34(data) 207 61 57 + 217: 21(int16_t) CompositeExtract 213 1 + Store 216 217 + 218: 189(ptr) AccessChain 34(data) 207 61 72 + 219: 21(int16_t) CompositeExtract 213 2 + Store 218 219 + 220: 6(int) Load 8(invocation) + 221: 197(ptr) AccessChain 34(data) 76 61 + 222: 22(i16vec4) Load 221 223: 6(int) Load 8(invocation) - 224:189(i16vec3) GroupNonUniformShuffleDown 43 222 223 - 225: 179(ptr) AccessChain 34(data) 219 59 - 226: 22(i16vec4) Load 225 - 227: 22(i16vec4) VectorShuffle 226 224 4 5 6 3 - Store 225 227 - 228: 6(int) Load 8(invocation) - 229: 179(ptr) AccessChain 34(data) 70 59 - 230: 22(i16vec4) Load 229 - 231: 6(int) Load 8(invocation) - 232: 22(i16vec4) GroupNonUniformShuffleDown 43 230 231 - 233: 179(ptr) AccessChain 34(data) 228 59 - Store 233 232 - 234: 6(int) Load 8(invocation) - 236: 235(ptr) AccessChain 34(data) 37 70 38 - 237: 23(int16_t) Load 236 - 238: 6(int) Load 8(invocation) - 239: 23(int16_t) GroupNonUniformShuffleUp 43 237 238 - 240: 235(ptr) AccessChain 34(data) 234 70 38 - Store 240 239 - 241: 6(int) Load 8(invocation) - 244: 243(ptr) AccessChain 34(data) 47 70 - 245: 24(i16vec4) Load 244 - 246:242(i16vec2) VectorShuffle 245 245 0 1 - 247: 6(int) Load 8(invocation) - 248:242(i16vec2) GroupNonUniformShuffleUp 43 246 247 - 249: 243(ptr) AccessChain 34(data) 241 70 - 250: 24(i16vec4) Load 249 - 251: 24(i16vec4) VectorShuffle 250 248 4 5 2 3 - Store 249 251 - 252: 6(int) Load 8(invocation) - 254: 243(ptr) AccessChain 34(data) 59 70 - 255: 24(i16vec4) Load 254 - 256:253(i16vec3) VectorShuffle 255 255 0 1 2 + 224: 22(i16vec4) GroupNonUniformShuffleUp 43 222 223 + 225: 197(ptr) AccessChain 34(data) 220 61 + Store 225 224 + 226: 6(int) Load 8(invocation) + 227: 189(ptr) AccessChain 34(data) 37 61 38 + 228: 21(int16_t) Load 227 + 229: 6(int) Load 8(invocation) + 230: 21(int16_t) GroupNonUniformShuffleDown 43 228 229 + 231: 189(ptr) AccessChain 34(data) 226 61 38 + Store 231 230 + 232: 6(int) Load 8(invocation) + 233: 197(ptr) AccessChain 34(data) 47 61 + 234: 22(i16vec4) Load 233 + 235:196(i16vec2) VectorShuffle 234 234 0 1 + 236: 6(int) Load 8(invocation) + 237:196(i16vec2) GroupNonUniformShuffleDown 43 235 236 + 238: 189(ptr) AccessChain 34(data) 232 61 38 + 239: 21(int16_t) CompositeExtract 237 0 + Store 238 239 + 240: 189(ptr) AccessChain 34(data) 232 61 57 + 241: 21(int16_t) CompositeExtract 237 1 + Store 240 241 + 242: 6(int) Load 8(invocation) + 243: 197(ptr) AccessChain 34(data) 61 61 + 244: 22(i16vec4) Load 243 + 245:208(i16vec3) VectorShuffle 244 244 0 1 2 + 246: 6(int) Load 8(invocation) + 247:208(i16vec3) GroupNonUniformShuffleDown 43 245 246 + 248: 189(ptr) AccessChain 34(data) 242 61 38 + 249: 21(int16_t) CompositeExtract 247 0 + Store 248 249 + 250: 189(ptr) AccessChain 34(data) 242 61 57 + 251: 21(int16_t) CompositeExtract 247 1 + Store 250 251 + 252: 189(ptr) AccessChain 34(data) 242 61 72 + 253: 21(int16_t) CompositeExtract 247 2 + Store 252 253 + 254: 6(int) Load 8(invocation) + 255: 197(ptr) AccessChain 34(data) 76 61 + 256: 22(i16vec4) Load 255 257: 6(int) Load 8(invocation) - 258:253(i16vec3) GroupNonUniformShuffleUp 43 256 257 - 259: 243(ptr) AccessChain 34(data) 252 70 - 260: 24(i16vec4) Load 259 - 261: 24(i16vec4) VectorShuffle 260 258 4 5 6 3 - Store 259 261 - 262: 6(int) Load 8(invocation) - 263: 243(ptr) AccessChain 34(data) 70 70 - 264: 24(i16vec4) Load 263 - 265: 6(int) Load 8(invocation) - 266: 24(i16vec4) GroupNonUniformShuffleUp 43 264 265 - 267: 243(ptr) AccessChain 34(data) 262 70 - Store 267 266 - 268: 6(int) Load 8(invocation) - 269: 235(ptr) AccessChain 34(data) 37 70 38 - 270: 23(int16_t) Load 269 - 271: 6(int) Load 8(invocation) - 272: 23(int16_t) GroupNonUniformShuffleDown 43 270 271 - 273: 235(ptr) AccessChain 34(data) 268 70 38 - Store 273 272 - 274: 6(int) Load 8(invocation) - 275: 243(ptr) AccessChain 34(data) 47 70 - 276: 24(i16vec4) Load 275 - 277:242(i16vec2) VectorShuffle 276 276 0 1 - 278: 6(int) Load 8(invocation) - 279:242(i16vec2) GroupNonUniformShuffleDown 43 277 278 - 280: 243(ptr) AccessChain 34(data) 274 70 - 281: 24(i16vec4) Load 280 - 282: 24(i16vec4) VectorShuffle 281 279 4 5 2 3 - Store 280 282 - 283: 6(int) Load 8(invocation) - 284: 243(ptr) AccessChain 34(data) 59 70 - 285: 24(i16vec4) Load 284 - 286:253(i16vec3) VectorShuffle 285 285 0 1 2 - 287: 6(int) Load 8(invocation) - 288:253(i16vec3) GroupNonUniformShuffleDown 43 286 287 - 289: 243(ptr) AccessChain 34(data) 283 70 - 290: 24(i16vec4) Load 289 - 291: 24(i16vec4) VectorShuffle 290 288 4 5 6 3 - Store 289 291 + 258: 22(i16vec4) GroupNonUniformShuffleDown 43 256 257 + 259: 197(ptr) AccessChain 34(data) 254 61 + Store 259 258 + 260: 6(int) Load 8(invocation) + 262: 261(ptr) AccessChain 34(data) 37 76 38 + 263: 23(int16_t) Load 262 + 264: 6(int) Load 8(invocation) + 265: 23(int16_t) GroupNonUniformShuffleUp 43 263 264 + 266: 261(ptr) AccessChain 34(data) 260 76 38 + Store 266 265 + 267: 6(int) Load 8(invocation) + 270: 269(ptr) AccessChain 34(data) 47 76 + 271: 24(i16vec4) Load 270 + 272:268(i16vec2) VectorShuffle 271 271 0 1 + 273: 6(int) Load 8(invocation) + 274:268(i16vec2) GroupNonUniformShuffleUp 43 272 273 + 275: 261(ptr) AccessChain 34(data) 267 76 38 + 276: 23(int16_t) CompositeExtract 274 0 + Store 275 276 + 277: 261(ptr) AccessChain 34(data) 267 76 57 + 278: 23(int16_t) CompositeExtract 274 1 + Store 277 278 + 279: 6(int) Load 8(invocation) + 281: 269(ptr) AccessChain 34(data) 61 76 + 282: 24(i16vec4) Load 281 + 283:280(i16vec3) VectorShuffle 282 282 0 1 2 + 284: 6(int) Load 8(invocation) + 285:280(i16vec3) GroupNonUniformShuffleUp 43 283 284 + 286: 261(ptr) AccessChain 34(data) 279 76 38 + 287: 23(int16_t) CompositeExtract 285 0 + Store 286 287 + 288: 261(ptr) AccessChain 34(data) 279 76 57 + 289: 23(int16_t) CompositeExtract 285 1 + Store 288 289 + 290: 261(ptr) AccessChain 34(data) 279 76 72 + 291: 23(int16_t) CompositeExtract 285 2 + Store 290 291 292: 6(int) Load 8(invocation) - 293: 243(ptr) AccessChain 34(data) 70 70 + 293: 269(ptr) AccessChain 34(data) 76 76 294: 24(i16vec4) Load 293 295: 6(int) Load 8(invocation) - 296: 24(i16vec4) GroupNonUniformShuffleDown 43 294 295 - 297: 243(ptr) AccessChain 34(data) 292 70 + 296: 24(i16vec4) GroupNonUniformShuffleUp 43 294 295 + 297: 269(ptr) AccessChain 34(data) 292 76 Store 297 296 298: 6(int) Load 8(invocation) - 301: 300(ptr) AccessChain 34(data) 37 299 38 - 302: 25(int64_t) Load 301 - 303: 6(int) Load 8(invocation) - 304: 25(int64_t) GroupNonUniformShuffleUp 43 302 303 - 305: 300(ptr) AccessChain 34(data) 298 299 38 - Store 305 304 - 306: 6(int) Load 8(invocation) - 309: 308(ptr) AccessChain 34(data) 47 299 - 310: 26(i64vec4) Load 309 - 311:307(i64vec2) VectorShuffle 310 310 0 1 - 312: 6(int) Load 8(invocation) - 313:307(i64vec2) GroupNonUniformShuffleUp 43 311 312 - 314: 308(ptr) AccessChain 34(data) 306 299 - 315: 26(i64vec4) Load 314 - 316: 26(i64vec4) VectorShuffle 315 313 4 5 2 3 - Store 314 316 - 317: 6(int) Load 8(invocation) - 319: 308(ptr) AccessChain 34(data) 59 299 - 320: 26(i64vec4) Load 319 - 321:318(i64vec3) VectorShuffle 320 320 0 1 2 - 322: 6(int) Load 8(invocation) - 323:318(i64vec3) GroupNonUniformShuffleUp 43 321 322 - 324: 308(ptr) AccessChain 34(data) 317 299 - 325: 26(i64vec4) Load 324 - 326: 26(i64vec4) VectorShuffle 325 323 4 5 6 3 - Store 324 326 - 327: 6(int) Load 8(invocation) - 328: 308(ptr) AccessChain 34(data) 70 299 - 329: 26(i64vec4) Load 328 - 330: 6(int) Load 8(invocation) - 331: 26(i64vec4) GroupNonUniformShuffleUp 43 329 330 - 332: 308(ptr) AccessChain 34(data) 327 299 - Store 332 331 - 333: 6(int) Load 8(invocation) - 334: 300(ptr) AccessChain 34(data) 37 299 38 - 335: 25(int64_t) Load 334 - 336: 6(int) Load 8(invocation) - 337: 25(int64_t) GroupNonUniformShuffleDown 43 335 336 - 338: 300(ptr) AccessChain 34(data) 333 299 38 - Store 338 337 - 339: 6(int) Load 8(invocation) - 340: 308(ptr) AccessChain 34(data) 47 299 - 341: 26(i64vec4) Load 340 - 342:307(i64vec2) VectorShuffle 341 341 0 1 - 343: 6(int) Load 8(invocation) - 344:307(i64vec2) GroupNonUniformShuffleDown 43 342 343 - 345: 308(ptr) AccessChain 34(data) 339 299 - 346: 26(i64vec4) Load 345 - 347: 26(i64vec4) VectorShuffle 346 344 4 5 2 3 - Store 345 347 - 348: 6(int) Load 8(invocation) - 349: 308(ptr) AccessChain 34(data) 59 299 - 350: 26(i64vec4) Load 349 - 351:318(i64vec3) VectorShuffle 350 350 0 1 2 + 299: 261(ptr) AccessChain 34(data) 37 76 38 + 300: 23(int16_t) Load 299 + 301: 6(int) Load 8(invocation) + 302: 23(int16_t) GroupNonUniformShuffleDown 43 300 301 + 303: 261(ptr) AccessChain 34(data) 298 76 38 + Store 303 302 + 304: 6(int) Load 8(invocation) + 305: 269(ptr) AccessChain 34(data) 47 76 + 306: 24(i16vec4) Load 305 + 307:268(i16vec2) VectorShuffle 306 306 0 1 + 308: 6(int) Load 8(invocation) + 309:268(i16vec2) GroupNonUniformShuffleDown 43 307 308 + 310: 261(ptr) AccessChain 34(data) 304 76 38 + 311: 23(int16_t) CompositeExtract 309 0 + Store 310 311 + 312: 261(ptr) AccessChain 34(data) 304 76 57 + 313: 23(int16_t) CompositeExtract 309 1 + Store 312 313 + 314: 6(int) Load 8(invocation) + 315: 269(ptr) AccessChain 34(data) 61 76 + 316: 24(i16vec4) Load 315 + 317:280(i16vec3) VectorShuffle 316 316 0 1 2 + 318: 6(int) Load 8(invocation) + 319:280(i16vec3) GroupNonUniformShuffleDown 43 317 318 + 320: 261(ptr) AccessChain 34(data) 314 76 38 + 321: 23(int16_t) CompositeExtract 319 0 + Store 320 321 + 322: 261(ptr) AccessChain 34(data) 314 76 57 + 323: 23(int16_t) CompositeExtract 319 1 + Store 322 323 + 324: 261(ptr) AccessChain 34(data) 314 76 72 + 325: 23(int16_t) CompositeExtract 319 2 + Store 324 325 + 326: 6(int) Load 8(invocation) + 327: 269(ptr) AccessChain 34(data) 76 76 + 328: 24(i16vec4) Load 327 + 329: 6(int) Load 8(invocation) + 330: 24(i16vec4) GroupNonUniformShuffleDown 43 328 329 + 331: 269(ptr) AccessChain 34(data) 326 76 + Store 331 330 + 332: 6(int) Load 8(invocation) + 335: 334(ptr) AccessChain 34(data) 37 333 38 + 336: 25(int64_t) Load 335 + 337: 6(int) Load 8(invocation) + 338: 25(int64_t) GroupNonUniformShuffleUp 43 336 337 + 339: 334(ptr) AccessChain 34(data) 332 333 38 + Store 339 338 + 340: 6(int) Load 8(invocation) + 343: 342(ptr) AccessChain 34(data) 47 333 + 344: 26(i64vec4) Load 343 + 345:341(i64vec2) VectorShuffle 344 344 0 1 + 346: 6(int) Load 8(invocation) + 347:341(i64vec2) GroupNonUniformShuffleUp 43 345 346 + 348: 334(ptr) AccessChain 34(data) 340 333 38 + 349: 25(int64_t) CompositeExtract 347 0 + Store 348 349 + 350: 334(ptr) AccessChain 34(data) 340 333 57 + 351: 25(int64_t) CompositeExtract 347 1 + Store 350 351 352: 6(int) Load 8(invocation) - 353:318(i64vec3) GroupNonUniformShuffleDown 43 351 352 - 354: 308(ptr) AccessChain 34(data) 348 299 + 354: 342(ptr) AccessChain 34(data) 61 333 355: 26(i64vec4) Load 354 - 356: 26(i64vec4) VectorShuffle 355 353 4 5 6 3 - Store 354 356 + 356:353(i64vec3) VectorShuffle 355 355 0 1 2 357: 6(int) Load 8(invocation) - 358: 308(ptr) AccessChain 34(data) 70 299 - 359: 26(i64vec4) Load 358 - 360: 6(int) Load 8(invocation) - 361: 26(i64vec4) GroupNonUniformShuffleDown 43 359 360 - 362: 308(ptr) AccessChain 34(data) 357 299 - Store 362 361 - 363: 6(int) Load 8(invocation) - 366: 365(ptr) AccessChain 34(data) 37 364 38 - 367: 27(int64_t) Load 366 + 358:353(i64vec3) GroupNonUniformShuffleUp 43 356 357 + 359: 334(ptr) AccessChain 34(data) 352 333 38 + 360: 25(int64_t) CompositeExtract 358 0 + Store 359 360 + 361: 334(ptr) AccessChain 34(data) 352 333 57 + 362: 25(int64_t) CompositeExtract 358 1 + Store 361 362 + 363: 334(ptr) AccessChain 34(data) 352 333 72 + 364: 25(int64_t) CompositeExtract 358 2 + Store 363 364 + 365: 6(int) Load 8(invocation) + 366: 342(ptr) AccessChain 34(data) 76 333 + 367: 26(i64vec4) Load 366 368: 6(int) Load 8(invocation) - 369: 27(int64_t) GroupNonUniformShuffleUp 43 367 368 - 370: 365(ptr) AccessChain 34(data) 363 364 38 + 369: 26(i64vec4) GroupNonUniformShuffleUp 43 367 368 + 370: 342(ptr) AccessChain 34(data) 365 333 Store 370 369 371: 6(int) Load 8(invocation) - 374: 373(ptr) AccessChain 34(data) 47 364 - 375: 28(i64vec4) Load 374 - 376:372(i64vec2) VectorShuffle 375 375 0 1 + 372: 334(ptr) AccessChain 34(data) 37 333 38 + 373: 25(int64_t) Load 372 + 374: 6(int) Load 8(invocation) + 375: 25(int64_t) GroupNonUniformShuffleDown 43 373 374 + 376: 334(ptr) AccessChain 34(data) 371 333 38 + Store 376 375 377: 6(int) Load 8(invocation) - 378:372(i64vec2) GroupNonUniformShuffleUp 43 376 377 - 379: 373(ptr) AccessChain 34(data) 371 364 - 380: 28(i64vec4) Load 379 - 381: 28(i64vec4) VectorShuffle 380 378 4 5 2 3 - Store 379 381 - 382: 6(int) Load 8(invocation) - 384: 373(ptr) AccessChain 34(data) 59 364 - 385: 28(i64vec4) Load 384 - 386:383(i64vec3) VectorShuffle 385 385 0 1 2 + 378: 342(ptr) AccessChain 34(data) 47 333 + 379: 26(i64vec4) Load 378 + 380:341(i64vec2) VectorShuffle 379 379 0 1 + 381: 6(int) Load 8(invocation) + 382:341(i64vec2) GroupNonUniformShuffleDown 43 380 381 + 383: 334(ptr) AccessChain 34(data) 377 333 38 + 384: 25(int64_t) CompositeExtract 382 0 + Store 383 384 + 385: 334(ptr) AccessChain 34(data) 377 333 57 + 386: 25(int64_t) CompositeExtract 382 1 + Store 385 386 387: 6(int) Load 8(invocation) - 388:383(i64vec3) GroupNonUniformShuffleUp 43 386 387 - 389: 373(ptr) AccessChain 34(data) 382 364 - 390: 28(i64vec4) Load 389 - 391: 28(i64vec4) VectorShuffle 390 388 4 5 6 3 - Store 389 391 - 392: 6(int) Load 8(invocation) - 393: 373(ptr) AccessChain 34(data) 70 364 - 394: 28(i64vec4) Load 393 - 395: 6(int) Load 8(invocation) - 396: 28(i64vec4) GroupNonUniformShuffleUp 43 394 395 - 397: 373(ptr) AccessChain 34(data) 392 364 - Store 397 396 - 398: 6(int) Load 8(invocation) - 399: 365(ptr) AccessChain 34(data) 37 364 38 - 400: 27(int64_t) Load 399 - 401: 6(int) Load 8(invocation) - 402: 27(int64_t) GroupNonUniformShuffleDown 43 400 401 - 403: 365(ptr) AccessChain 34(data) 398 364 38 - Store 403 402 - 404: 6(int) Load 8(invocation) - 405: 373(ptr) AccessChain 34(data) 47 364 - 406: 28(i64vec4) Load 405 - 407:372(i64vec2) VectorShuffle 406 406 0 1 - 408: 6(int) Load 8(invocation) - 409:372(i64vec2) GroupNonUniformShuffleDown 43 407 408 - 410: 373(ptr) AccessChain 34(data) 404 364 - 411: 28(i64vec4) Load 410 - 412: 28(i64vec4) VectorShuffle 411 409 4 5 2 3 - Store 410 412 + 388: 342(ptr) AccessChain 34(data) 61 333 + 389: 26(i64vec4) Load 388 + 390:353(i64vec3) VectorShuffle 389 389 0 1 2 + 391: 6(int) Load 8(invocation) + 392:353(i64vec3) GroupNonUniformShuffleDown 43 390 391 + 393: 334(ptr) AccessChain 34(data) 387 333 38 + 394: 25(int64_t) CompositeExtract 392 0 + Store 393 394 + 395: 334(ptr) AccessChain 34(data) 387 333 57 + 396: 25(int64_t) CompositeExtract 392 1 + Store 395 396 + 397: 334(ptr) AccessChain 34(data) 387 333 72 + 398: 25(int64_t) CompositeExtract 392 2 + Store 397 398 + 399: 6(int) Load 8(invocation) + 400: 342(ptr) AccessChain 34(data) 76 333 + 401: 26(i64vec4) Load 400 + 402: 6(int) Load 8(invocation) + 403: 26(i64vec4) GroupNonUniformShuffleDown 43 401 402 + 404: 342(ptr) AccessChain 34(data) 399 333 + Store 404 403 + 405: 6(int) Load 8(invocation) + 408: 407(ptr) AccessChain 34(data) 37 406 38 + 409: 27(int64_t) Load 408 + 410: 6(int) Load 8(invocation) + 411: 27(int64_t) GroupNonUniformShuffleUp 43 409 410 + 412: 407(ptr) AccessChain 34(data) 405 406 38 + Store 412 411 413: 6(int) Load 8(invocation) - 414: 373(ptr) AccessChain 34(data) 59 364 - 415: 28(i64vec4) Load 414 - 416:383(i64vec3) VectorShuffle 415 415 0 1 2 - 417: 6(int) Load 8(invocation) - 418:383(i64vec3) GroupNonUniformShuffleDown 43 416 417 - 419: 373(ptr) AccessChain 34(data) 413 364 - 420: 28(i64vec4) Load 419 - 421: 28(i64vec4) VectorShuffle 420 418 4 5 6 3 - Store 419 421 - 422: 6(int) Load 8(invocation) - 423: 373(ptr) AccessChain 34(data) 70 364 - 424: 28(i64vec4) Load 423 + 416: 415(ptr) AccessChain 34(data) 47 406 + 417: 28(i64vec4) Load 416 + 418:414(i64vec2) VectorShuffle 417 417 0 1 + 419: 6(int) Load 8(invocation) + 420:414(i64vec2) GroupNonUniformShuffleUp 43 418 419 + 421: 407(ptr) AccessChain 34(data) 413 406 38 + 422: 27(int64_t) CompositeExtract 420 0 + Store 421 422 + 423: 407(ptr) AccessChain 34(data) 413 406 57 + 424: 27(int64_t) CompositeExtract 420 1 + Store 423 424 425: 6(int) Load 8(invocation) - 426: 28(i64vec4) GroupNonUniformShuffleDown 43 424 425 - 427: 373(ptr) AccessChain 34(data) 422 364 - Store 427 426 - 428: 6(int) Load 8(invocation) - 431: 430(ptr) AccessChain 34(data) 37 429 38 - 432:29(float16_t) Load 431 - 433: 6(int) Load 8(invocation) - 434:29(float16_t) GroupNonUniformShuffleUp 43 432 433 - 435: 430(ptr) AccessChain 34(data) 428 429 38 - Store 435 434 - 436: 6(int) Load 8(invocation) - 439: 438(ptr) AccessChain 34(data) 47 429 - 440: 30(f16vec4) Load 439 - 441:437(f16vec2) VectorShuffle 440 440 0 1 - 442: 6(int) Load 8(invocation) - 443:437(f16vec2) GroupNonUniformShuffleUp 43 441 442 - 444: 438(ptr) AccessChain 34(data) 436 429 - 445: 30(f16vec4) Load 444 - 446: 30(f16vec4) VectorShuffle 445 443 4 5 2 3 - Store 444 446 + 427: 415(ptr) AccessChain 34(data) 61 406 + 428: 28(i64vec4) Load 427 + 429:426(i64vec3) VectorShuffle 428 428 0 1 2 + 430: 6(int) Load 8(invocation) + 431:426(i64vec3) GroupNonUniformShuffleUp 43 429 430 + 432: 407(ptr) AccessChain 34(data) 425 406 38 + 433: 27(int64_t) CompositeExtract 431 0 + Store 432 433 + 434: 407(ptr) AccessChain 34(data) 425 406 57 + 435: 27(int64_t) CompositeExtract 431 1 + Store 434 435 + 436: 407(ptr) AccessChain 34(data) 425 406 72 + 437: 27(int64_t) CompositeExtract 431 2 + Store 436 437 + 438: 6(int) Load 8(invocation) + 439: 415(ptr) AccessChain 34(data) 76 406 + 440: 28(i64vec4) Load 439 + 441: 6(int) Load 8(invocation) + 442: 28(i64vec4) GroupNonUniformShuffleUp 43 440 441 + 443: 415(ptr) AccessChain 34(data) 438 406 + Store 443 442 + 444: 6(int) Load 8(invocation) + 445: 407(ptr) AccessChain 34(data) 37 406 38 + 446: 27(int64_t) Load 445 447: 6(int) Load 8(invocation) - 449: 438(ptr) AccessChain 34(data) 59 429 - 450: 30(f16vec4) Load 449 - 451:448(f16vec3) VectorShuffle 450 450 0 1 2 - 452: 6(int) Load 8(invocation) - 453:448(f16vec3) GroupNonUniformShuffleUp 43 451 452 - 454: 438(ptr) AccessChain 34(data) 447 429 - 455: 30(f16vec4) Load 454 - 456: 30(f16vec4) VectorShuffle 455 453 4 5 6 3 - Store 454 456 - 457: 6(int) Load 8(invocation) - 458: 438(ptr) AccessChain 34(data) 70 429 - 459: 30(f16vec4) Load 458 + 448: 27(int64_t) GroupNonUniformShuffleDown 43 446 447 + 449: 407(ptr) AccessChain 34(data) 444 406 38 + Store 449 448 + 450: 6(int) Load 8(invocation) + 451: 415(ptr) AccessChain 34(data) 47 406 + 452: 28(i64vec4) Load 451 + 453:414(i64vec2) VectorShuffle 452 452 0 1 + 454: 6(int) Load 8(invocation) + 455:414(i64vec2) GroupNonUniformShuffleDown 43 453 454 + 456: 407(ptr) AccessChain 34(data) 450 406 38 + 457: 27(int64_t) CompositeExtract 455 0 + Store 456 457 + 458: 407(ptr) AccessChain 34(data) 450 406 57 + 459: 27(int64_t) CompositeExtract 455 1 + Store 458 459 460: 6(int) Load 8(invocation) - 461: 30(f16vec4) GroupNonUniformShuffleUp 43 459 460 - 462: 438(ptr) AccessChain 34(data) 457 429 - Store 462 461 - 463: 6(int) Load 8(invocation) - 464: 430(ptr) AccessChain 34(data) 37 429 38 - 465:29(float16_t) Load 464 - 466: 6(int) Load 8(invocation) - 467:29(float16_t) GroupNonUniformShuffleDown 43 465 466 - 468: 430(ptr) AccessChain 34(data) 463 429 38 - Store 468 467 - 469: 6(int) Load 8(invocation) - 470: 438(ptr) AccessChain 34(data) 47 429 - 471: 30(f16vec4) Load 470 - 472:437(f16vec2) VectorShuffle 471 471 0 1 - 473: 6(int) Load 8(invocation) - 474:437(f16vec2) GroupNonUniformShuffleDown 43 472 473 - 475: 438(ptr) AccessChain 34(data) 469 429 - 476: 30(f16vec4) Load 475 - 477: 30(f16vec4) VectorShuffle 476 474 4 5 2 3 - Store 475 477 + 461: 415(ptr) AccessChain 34(data) 61 406 + 462: 28(i64vec4) Load 461 + 463:426(i64vec3) VectorShuffle 462 462 0 1 2 + 464: 6(int) Load 8(invocation) + 465:426(i64vec3) GroupNonUniformShuffleDown 43 463 464 + 466: 407(ptr) AccessChain 34(data) 460 406 38 + 467: 27(int64_t) CompositeExtract 465 0 + Store 466 467 + 468: 407(ptr) AccessChain 34(data) 460 406 57 + 469: 27(int64_t) CompositeExtract 465 1 + Store 468 469 + 470: 407(ptr) AccessChain 34(data) 460 406 72 + 471: 27(int64_t) CompositeExtract 465 2 + Store 470 471 + 472: 6(int) Load 8(invocation) + 473: 415(ptr) AccessChain 34(data) 76 406 + 474: 28(i64vec4) Load 473 + 475: 6(int) Load 8(invocation) + 476: 28(i64vec4) GroupNonUniformShuffleDown 43 474 475 + 477: 415(ptr) AccessChain 34(data) 472 406 + Store 477 476 478: 6(int) Load 8(invocation) - 479: 438(ptr) AccessChain 34(data) 59 429 - 480: 30(f16vec4) Load 479 - 481:448(f16vec3) VectorShuffle 480 480 0 1 2 - 482: 6(int) Load 8(invocation) - 483:448(f16vec3) GroupNonUniformShuffleDown 43 481 482 - 484: 438(ptr) AccessChain 34(data) 478 429 - 485: 30(f16vec4) Load 484 - 486: 30(f16vec4) VectorShuffle 485 483 4 5 6 3 - Store 484 486 - 487: 6(int) Load 8(invocation) - 488: 438(ptr) AccessChain 34(data) 70 429 - 489: 30(f16vec4) Load 488 - 490: 6(int) Load 8(invocation) - 491: 30(f16vec4) GroupNonUniformShuffleDown 43 489 490 - 492: 438(ptr) AccessChain 34(data) 487 429 - Store 492 491 + 481: 480(ptr) AccessChain 34(data) 37 479 38 + 482:29(float16_t) Load 481 + 483: 6(int) Load 8(invocation) + 484:29(float16_t) GroupNonUniformShuffleUp 43 482 483 + 485: 480(ptr) AccessChain 34(data) 478 479 38 + Store 485 484 + 486: 6(int) Load 8(invocation) + 489: 488(ptr) AccessChain 34(data) 47 479 + 490: 30(f16vec4) Load 489 + 491:487(f16vec2) VectorShuffle 490 490 0 1 + 492: 6(int) Load 8(invocation) + 493:487(f16vec2) GroupNonUniformShuffleUp 43 491 492 + 494: 480(ptr) AccessChain 34(data) 486 479 38 + 495:29(float16_t) CompositeExtract 493 0 + Store 494 495 + 496: 480(ptr) AccessChain 34(data) 486 479 57 + 497:29(float16_t) CompositeExtract 493 1 + Store 496 497 + 498: 6(int) Load 8(invocation) + 500: 488(ptr) AccessChain 34(data) 61 479 + 501: 30(f16vec4) Load 500 + 502:499(f16vec3) VectorShuffle 501 501 0 1 2 + 503: 6(int) Load 8(invocation) + 504:499(f16vec3) GroupNonUniformShuffleUp 43 502 503 + 505: 480(ptr) AccessChain 34(data) 498 479 38 + 506:29(float16_t) CompositeExtract 504 0 + Store 505 506 + 507: 480(ptr) AccessChain 34(data) 498 479 57 + 508:29(float16_t) CompositeExtract 504 1 + Store 507 508 + 509: 480(ptr) AccessChain 34(data) 498 479 72 + 510:29(float16_t) CompositeExtract 504 2 + Store 509 510 + 511: 6(int) Load 8(invocation) + 512: 488(ptr) AccessChain 34(data) 76 479 + 513: 30(f16vec4) Load 512 + 514: 6(int) Load 8(invocation) + 515: 30(f16vec4) GroupNonUniformShuffleUp 43 513 514 + 516: 488(ptr) AccessChain 34(data) 511 479 + Store 516 515 + 517: 6(int) Load 8(invocation) + 518: 480(ptr) AccessChain 34(data) 37 479 38 + 519:29(float16_t) Load 518 + 520: 6(int) Load 8(invocation) + 521:29(float16_t) GroupNonUniformShuffleDown 43 519 520 + 522: 480(ptr) AccessChain 34(data) 517 479 38 + Store 522 521 + 523: 6(int) Load 8(invocation) + 524: 488(ptr) AccessChain 34(data) 47 479 + 525: 30(f16vec4) Load 524 + 526:487(f16vec2) VectorShuffle 525 525 0 1 + 527: 6(int) Load 8(invocation) + 528:487(f16vec2) GroupNonUniformShuffleDown 43 526 527 + 529: 480(ptr) AccessChain 34(data) 523 479 38 + 530:29(float16_t) CompositeExtract 528 0 + Store 529 530 + 531: 480(ptr) AccessChain 34(data) 523 479 57 + 532:29(float16_t) CompositeExtract 528 1 + Store 531 532 + 533: 6(int) Load 8(invocation) + 534: 488(ptr) AccessChain 34(data) 61 479 + 535: 30(f16vec4) Load 534 + 536:499(f16vec3) VectorShuffle 535 535 0 1 2 + 537: 6(int) Load 8(invocation) + 538:499(f16vec3) GroupNonUniformShuffleDown 43 536 537 + 539: 480(ptr) AccessChain 34(data) 533 479 38 + 540:29(float16_t) CompositeExtract 538 0 + Store 539 540 + 541: 480(ptr) AccessChain 34(data) 533 479 57 + 542:29(float16_t) CompositeExtract 538 1 + Store 541 542 + 543: 480(ptr) AccessChain 34(data) 533 479 72 + 544:29(float16_t) CompositeExtract 538 2 + Store 543 544 + 545: 6(int) Load 8(invocation) + 546: 488(ptr) AccessChain 34(data) 76 479 + 547: 30(f16vec4) Load 546 + 548: 6(int) Load 8(invocation) + 549: 30(f16vec4) GroupNonUniformShuffleDown 43 547 548 + 550: 488(ptr) AccessChain 34(data) 545 479 + Store 550 549 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupPartitioned.comp.out b/Test/baseResults/spv.subgroupPartitioned.comp.out index 7c7a0f949f..0e7b7ef294 100644 --- a/Test/baseResults/spv.subgroupPartitioned.comp.out +++ b/Test/baseResults/spv.subgroupPartitioned.comp.out @@ -1,7 +1,7 @@ spv.subgroupPartitioned.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 2506 +// Id's are bound by 2807 Capability Shader Capability Float64 @@ -41,7 +41,7 @@ spv.subgroupPartitioned.comp Decorate 28(Buffers) Block Decorate 31(data) DescriptorSet 0 Decorate 31(data) Binding 0 - Decorate 2505 BuiltIn WorkgroupSize + Decorate 2806 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -91,15 +91,16 @@ spv.subgroupPartitioned.comp 169: TypeVector 144(bool) 4 170: 17(ivec4) ConstantComposite 35 35 35 35 178: 6(int) Constant 3 - 727: 70(ivec2) ConstantComposite 34 34 - 731: 70(ivec2) ConstantComposite 63 63 - 740: 78(ivec3) ConstantComposite 34 34 34 - 744: 78(ivec3) ConstantComposite 63 63 63 - 752: 25(ivec4) ConstantComposite 34 34 34 34 - 756: 25(ivec4) ConstantComposite 63 63 63 63 - 2503: 6(int) Constant 8 - 2504: 6(int) Constant 1 - 2505: 103(ivec3) ConstantComposite 2503 2504 2504 + 189: 6(int) Constant 1 + 202: 6(int) Constant 2 + 801: 70(ivec2) ConstantComposite 34 34 + 805: 70(ivec2) ConstantComposite 63 63 + 815: 78(ivec3) ConstantComposite 34 34 34 + 819: 78(ivec3) ConstantComposite 63 63 63 + 830: 25(ivec4) ConstantComposite 34 34 34 34 + 834: 25(ivec4) ConstantComposite 63 63 63 63 + 2805: 6(int) Constant 8 + 2806: 103(ivec3) ConstantComposite 2805 189 189 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -259,2614 +260,3139 @@ spv.subgroupPartitioned.comp 184: 43(fvec2) VectorShuffle 183 183 0 1 185: 17(ivec4) Load 19(ballot) 186: 43(fvec2) GroupNonUniformFAdd 178 PartitionedReduceNV 184 185 - 187: 44(ptr) AccessChain 31(data) 181 34 - 188: 23(fvec4) Load 187 - 189: 23(fvec4) VectorShuffle 188 186 4 5 2 3 - Store 187 189 - 190: 6(int) Load 8(invocation) - 191: 44(ptr) AccessChain 31(data) 33 34 - 192: 23(fvec4) Load 191 - 193: 51(fvec3) VectorShuffle 192 192 0 1 2 - 194: 17(ivec4) Load 19(ballot) - 195: 51(fvec3) GroupNonUniformFAdd 178 PartitionedReduceNV 193 194 - 196: 44(ptr) AccessChain 31(data) 190 34 - 197: 23(fvec4) Load 196 - 198: 23(fvec4) VectorShuffle 197 195 4 5 6 3 - Store 196 198 - 199: 6(int) Load 8(invocation) - 200: 44(ptr) AccessChain 31(data) 115 34 - 201: 23(fvec4) Load 200 - 202: 17(ivec4) Load 19(ballot) - 203: 23(fvec4) GroupNonUniformFAdd 178 PartitionedReduceNV 201 202 - 204: 44(ptr) AccessChain 31(data) 199 34 - Store 204 203 + 187: 36(ptr) AccessChain 31(data) 181 34 35 + 188: 22(float) CompositeExtract 186 0 + Store 187 188 + 190: 36(ptr) AccessChain 31(data) 181 34 189 + 191: 22(float) CompositeExtract 186 1 + Store 190 191 + 192: 6(int) Load 8(invocation) + 193: 44(ptr) AccessChain 31(data) 33 34 + 194: 23(fvec4) Load 193 + 195: 51(fvec3) VectorShuffle 194 194 0 1 2 + 196: 17(ivec4) Load 19(ballot) + 197: 51(fvec3) GroupNonUniformFAdd 178 PartitionedReduceNV 195 196 + 198: 36(ptr) AccessChain 31(data) 192 34 35 + 199: 22(float) CompositeExtract 197 0 + Store 198 199 + 200: 36(ptr) AccessChain 31(data) 192 34 189 + 201: 22(float) CompositeExtract 197 1 + Store 200 201 + 203: 36(ptr) AccessChain 31(data) 192 34 202 + 204: 22(float) CompositeExtract 197 2 + Store 203 204 205: 6(int) Load 8(invocation) - 206: 64(ptr) AccessChain 31(data) 34 63 35 - 207: 24(int) Load 206 + 206: 44(ptr) AccessChain 31(data) 115 34 + 207: 23(fvec4) Load 206 208: 17(ivec4) Load 19(ballot) - 209: 24(int) GroupNonUniformIAdd 178 PartitionedReduceNV 207 208 - 210: 64(ptr) AccessChain 31(data) 205 63 35 + 209: 23(fvec4) GroupNonUniformFAdd 178 PartitionedReduceNV 207 208 + 210: 44(ptr) AccessChain 31(data) 205 34 Store 210 209 211: 6(int) Load 8(invocation) - 212: 71(ptr) AccessChain 31(data) 63 63 - 213: 25(ivec4) Load 212 - 214: 70(ivec2) VectorShuffle 213 213 0 1 - 215: 17(ivec4) Load 19(ballot) - 216: 70(ivec2) GroupNonUniformIAdd 178 PartitionedReduceNV 214 215 - 217: 71(ptr) AccessChain 31(data) 211 63 - 218: 25(ivec4) Load 217 - 219: 25(ivec4) VectorShuffle 218 216 4 5 2 3 - Store 217 219 - 220: 6(int) Load 8(invocation) - 221: 71(ptr) AccessChain 31(data) 33 63 - 222: 25(ivec4) Load 221 - 223: 78(ivec3) VectorShuffle 222 222 0 1 2 - 224: 17(ivec4) Load 19(ballot) - 225: 78(ivec3) GroupNonUniformIAdd 178 PartitionedReduceNV 223 224 - 226: 71(ptr) AccessChain 31(data) 220 63 - 227: 25(ivec4) Load 226 - 228: 25(ivec4) VectorShuffle 227 225 4 5 6 3 - Store 226 228 - 229: 6(int) Load 8(invocation) - 230: 71(ptr) AccessChain 31(data) 115 63 - 231: 25(ivec4) Load 230 - 232: 17(ivec4) Load 19(ballot) - 233: 25(ivec4) GroupNonUniformIAdd 178 PartitionedReduceNV 231 232 - 234: 71(ptr) AccessChain 31(data) 229 63 - Store 234 233 - 235: 6(int) Load 8(invocation) - 236: 90(ptr) AccessChain 31(data) 34 33 35 - 237: 6(int) Load 236 - 238: 17(ivec4) Load 19(ballot) - 239: 6(int) GroupNonUniformIAdd 178 PartitionedReduceNV 237 238 - 240: 90(ptr) AccessChain 31(data) 235 33 35 - Store 240 239 - 241: 6(int) Load 8(invocation) - 242: 40(ptr) AccessChain 31(data) 63 33 - 243: 17(ivec4) Load 242 - 244: 96(ivec2) VectorShuffle 243 243 0 1 - 245: 17(ivec4) Load 19(ballot) - 246: 96(ivec2) GroupNonUniformIAdd 178 PartitionedReduceNV 244 245 - 247: 40(ptr) AccessChain 31(data) 241 33 - 248: 17(ivec4) Load 247 - 249: 17(ivec4) VectorShuffle 248 246 4 5 2 3 - Store 247 249 - 250: 6(int) Load 8(invocation) - 251: 40(ptr) AccessChain 31(data) 33 33 - 252: 17(ivec4) Load 251 - 253: 103(ivec3) VectorShuffle 252 252 0 1 2 - 254: 17(ivec4) Load 19(ballot) - 255: 103(ivec3) GroupNonUniformIAdd 178 PartitionedReduceNV 253 254 - 256: 40(ptr) AccessChain 31(data) 250 33 - 257: 17(ivec4) Load 256 - 258: 17(ivec4) VectorShuffle 257 255 4 5 6 3 - Store 256 258 - 259: 6(int) Load 8(invocation) - 260: 40(ptr) AccessChain 31(data) 115 33 - 261: 17(ivec4) Load 260 - 262: 17(ivec4) Load 19(ballot) - 263: 17(ivec4) GroupNonUniformIAdd 178 PartitionedReduceNV 261 262 - 264: 40(ptr) AccessChain 31(data) 259 33 - Store 264 263 - 265: 6(int) Load 8(invocation) - 266: 116(ptr) AccessChain 31(data) 34 115 35 - 267:26(float64_t) Load 266 - 268: 17(ivec4) Load 19(ballot) - 269:26(float64_t) GroupNonUniformFAdd 178 PartitionedReduceNV 267 268 - 270: 116(ptr) AccessChain 31(data) 265 115 35 - Store 270 269 - 271: 6(int) Load 8(invocation) - 272: 123(ptr) AccessChain 31(data) 63 115 - 273: 27(f64vec4) Load 272 - 274:122(f64vec2) VectorShuffle 273 273 0 1 - 275: 17(ivec4) Load 19(ballot) - 276:122(f64vec2) GroupNonUniformFAdd 178 PartitionedReduceNV 274 275 - 277: 123(ptr) AccessChain 31(data) 271 115 - 278: 27(f64vec4) Load 277 - 279: 27(f64vec4) VectorShuffle 278 276 4 5 2 3 - Store 277 279 - 280: 6(int) Load 8(invocation) - 281: 123(ptr) AccessChain 31(data) 33 115 - 282: 27(f64vec4) Load 281 - 283:130(f64vec3) VectorShuffle 282 282 0 1 2 - 284: 17(ivec4) Load 19(ballot) - 285:130(f64vec3) GroupNonUniformFAdd 178 PartitionedReduceNV 283 284 - 286: 123(ptr) AccessChain 31(data) 280 115 + 212: 64(ptr) AccessChain 31(data) 34 63 35 + 213: 24(int) Load 212 + 214: 17(ivec4) Load 19(ballot) + 215: 24(int) GroupNonUniformIAdd 178 PartitionedReduceNV 213 214 + 216: 64(ptr) AccessChain 31(data) 211 63 35 + Store 216 215 + 217: 6(int) Load 8(invocation) + 218: 71(ptr) AccessChain 31(data) 63 63 + 219: 25(ivec4) Load 218 + 220: 70(ivec2) VectorShuffle 219 219 0 1 + 221: 17(ivec4) Load 19(ballot) + 222: 70(ivec2) GroupNonUniformIAdd 178 PartitionedReduceNV 220 221 + 223: 64(ptr) AccessChain 31(data) 217 63 35 + 224: 24(int) CompositeExtract 222 0 + Store 223 224 + 225: 64(ptr) AccessChain 31(data) 217 63 189 + 226: 24(int) CompositeExtract 222 1 + Store 225 226 + 227: 6(int) Load 8(invocation) + 228: 71(ptr) AccessChain 31(data) 33 63 + 229: 25(ivec4) Load 228 + 230: 78(ivec3) VectorShuffle 229 229 0 1 2 + 231: 17(ivec4) Load 19(ballot) + 232: 78(ivec3) GroupNonUniformIAdd 178 PartitionedReduceNV 230 231 + 233: 64(ptr) AccessChain 31(data) 227 63 35 + 234: 24(int) CompositeExtract 232 0 + Store 233 234 + 235: 64(ptr) AccessChain 31(data) 227 63 189 + 236: 24(int) CompositeExtract 232 1 + Store 235 236 + 237: 64(ptr) AccessChain 31(data) 227 63 202 + 238: 24(int) CompositeExtract 232 2 + Store 237 238 + 239: 6(int) Load 8(invocation) + 240: 71(ptr) AccessChain 31(data) 115 63 + 241: 25(ivec4) Load 240 + 242: 17(ivec4) Load 19(ballot) + 243: 25(ivec4) GroupNonUniformIAdd 178 PartitionedReduceNV 241 242 + 244: 71(ptr) AccessChain 31(data) 239 63 + Store 244 243 + 245: 6(int) Load 8(invocation) + 246: 90(ptr) AccessChain 31(data) 34 33 35 + 247: 6(int) Load 246 + 248: 17(ivec4) Load 19(ballot) + 249: 6(int) GroupNonUniformIAdd 178 PartitionedReduceNV 247 248 + 250: 90(ptr) AccessChain 31(data) 245 33 35 + Store 250 249 + 251: 6(int) Load 8(invocation) + 252: 40(ptr) AccessChain 31(data) 63 33 + 253: 17(ivec4) Load 252 + 254: 96(ivec2) VectorShuffle 253 253 0 1 + 255: 17(ivec4) Load 19(ballot) + 256: 96(ivec2) GroupNonUniformIAdd 178 PartitionedReduceNV 254 255 + 257: 90(ptr) AccessChain 31(data) 251 33 35 + 258: 6(int) CompositeExtract 256 0 + Store 257 258 + 259: 90(ptr) AccessChain 31(data) 251 33 189 + 260: 6(int) CompositeExtract 256 1 + Store 259 260 + 261: 6(int) Load 8(invocation) + 262: 40(ptr) AccessChain 31(data) 33 33 + 263: 17(ivec4) Load 262 + 264: 103(ivec3) VectorShuffle 263 263 0 1 2 + 265: 17(ivec4) Load 19(ballot) + 266: 103(ivec3) GroupNonUniformIAdd 178 PartitionedReduceNV 264 265 + 267: 90(ptr) AccessChain 31(data) 261 33 35 + 268: 6(int) CompositeExtract 266 0 + Store 267 268 + 269: 90(ptr) AccessChain 31(data) 261 33 189 + 270: 6(int) CompositeExtract 266 1 + Store 269 270 + 271: 90(ptr) AccessChain 31(data) 261 33 202 + 272: 6(int) CompositeExtract 266 2 + Store 271 272 + 273: 6(int) Load 8(invocation) + 274: 40(ptr) AccessChain 31(data) 115 33 + 275: 17(ivec4) Load 274 + 276: 17(ivec4) Load 19(ballot) + 277: 17(ivec4) GroupNonUniformIAdd 178 PartitionedReduceNV 275 276 + 278: 40(ptr) AccessChain 31(data) 273 33 + Store 278 277 + 279: 6(int) Load 8(invocation) + 280: 116(ptr) AccessChain 31(data) 34 115 35 + 281:26(float64_t) Load 280 + 282: 17(ivec4) Load 19(ballot) + 283:26(float64_t) GroupNonUniformFAdd 178 PartitionedReduceNV 281 282 + 284: 116(ptr) AccessChain 31(data) 279 115 35 + Store 284 283 + 285: 6(int) Load 8(invocation) + 286: 123(ptr) AccessChain 31(data) 63 115 287: 27(f64vec4) Load 286 - 288: 27(f64vec4) VectorShuffle 287 285 4 5 6 3 - Store 286 288 - 289: 6(int) Load 8(invocation) - 290: 123(ptr) AccessChain 31(data) 115 115 - 291: 27(f64vec4) Load 290 - 292: 17(ivec4) Load 19(ballot) - 293: 27(f64vec4) GroupNonUniformFAdd 178 PartitionedReduceNV 291 292 - 294: 123(ptr) AccessChain 31(data) 289 115 - Store 294 293 + 288:122(f64vec2) VectorShuffle 287 287 0 1 + 289: 17(ivec4) Load 19(ballot) + 290:122(f64vec2) GroupNonUniformFAdd 178 PartitionedReduceNV 288 289 + 291: 116(ptr) AccessChain 31(data) 285 115 35 + 292:26(float64_t) CompositeExtract 290 0 + Store 291 292 + 293: 116(ptr) AccessChain 31(data) 285 115 189 + 294:26(float64_t) CompositeExtract 290 1 + Store 293 294 295: 6(int) Load 8(invocation) - 296: 36(ptr) AccessChain 31(data) 34 34 35 - 297: 22(float) Load 296 - 298: 17(ivec4) Load 19(ballot) - 299: 22(float) GroupNonUniformFMul 178 PartitionedReduceNV 297 298 - 300: 36(ptr) AccessChain 31(data) 295 34 35 - Store 300 299 - 301: 6(int) Load 8(invocation) - 302: 44(ptr) AccessChain 31(data) 63 34 - 303: 23(fvec4) Load 302 - 304: 43(fvec2) VectorShuffle 303 303 0 1 - 305: 17(ivec4) Load 19(ballot) - 306: 43(fvec2) GroupNonUniformFMul 178 PartitionedReduceNV 304 305 - 307: 44(ptr) AccessChain 31(data) 301 34 - 308: 23(fvec4) Load 307 - 309: 23(fvec4) VectorShuffle 308 306 4 5 2 3 - Store 307 309 - 310: 6(int) Load 8(invocation) - 311: 44(ptr) AccessChain 31(data) 33 34 - 312: 23(fvec4) Load 311 - 313: 51(fvec3) VectorShuffle 312 312 0 1 2 - 314: 17(ivec4) Load 19(ballot) - 315: 51(fvec3) GroupNonUniformFMul 178 PartitionedReduceNV 313 314 - 316: 44(ptr) AccessChain 31(data) 310 34 - 317: 23(fvec4) Load 316 - 318: 23(fvec4) VectorShuffle 317 315 4 5 6 3 - Store 316 318 + 296: 123(ptr) AccessChain 31(data) 33 115 + 297: 27(f64vec4) Load 296 + 298:130(f64vec3) VectorShuffle 297 297 0 1 2 + 299: 17(ivec4) Load 19(ballot) + 300:130(f64vec3) GroupNonUniformFAdd 178 PartitionedReduceNV 298 299 + 301: 116(ptr) AccessChain 31(data) 295 115 35 + 302:26(float64_t) CompositeExtract 300 0 + Store 301 302 + 303: 116(ptr) AccessChain 31(data) 295 115 189 + 304:26(float64_t) CompositeExtract 300 1 + Store 303 304 + 305: 116(ptr) AccessChain 31(data) 295 115 202 + 306:26(float64_t) CompositeExtract 300 2 + Store 305 306 + 307: 6(int) Load 8(invocation) + 308: 123(ptr) AccessChain 31(data) 115 115 + 309: 27(f64vec4) Load 308 + 310: 17(ivec4) Load 19(ballot) + 311: 27(f64vec4) GroupNonUniformFAdd 178 PartitionedReduceNV 309 310 + 312: 123(ptr) AccessChain 31(data) 307 115 + Store 312 311 + 313: 6(int) Load 8(invocation) + 314: 36(ptr) AccessChain 31(data) 34 34 35 + 315: 22(float) Load 314 + 316: 17(ivec4) Load 19(ballot) + 317: 22(float) GroupNonUniformFMul 178 PartitionedReduceNV 315 316 + 318: 36(ptr) AccessChain 31(data) 313 34 35 + Store 318 317 319: 6(int) Load 8(invocation) - 320: 44(ptr) AccessChain 31(data) 115 34 + 320: 44(ptr) AccessChain 31(data) 63 34 321: 23(fvec4) Load 320 - 322: 17(ivec4) Load 19(ballot) - 323: 23(fvec4) GroupNonUniformFMul 178 PartitionedReduceNV 321 322 - 324: 44(ptr) AccessChain 31(data) 319 34 - Store 324 323 - 325: 6(int) Load 8(invocation) - 326: 64(ptr) AccessChain 31(data) 34 63 35 - 327: 24(int) Load 326 - 328: 17(ivec4) Load 19(ballot) - 329: 24(int) GroupNonUniformIMul 178 PartitionedReduceNV 327 328 - 330: 64(ptr) AccessChain 31(data) 325 63 35 - Store 330 329 - 331: 6(int) Load 8(invocation) - 332: 71(ptr) AccessChain 31(data) 63 63 - 333: 25(ivec4) Load 332 - 334: 70(ivec2) VectorShuffle 333 333 0 1 - 335: 17(ivec4) Load 19(ballot) - 336: 70(ivec2) GroupNonUniformIMul 178 PartitionedReduceNV 334 335 - 337: 71(ptr) AccessChain 31(data) 331 63 - 338: 25(ivec4) Load 337 - 339: 25(ivec4) VectorShuffle 338 336 4 5 2 3 - Store 337 339 - 340: 6(int) Load 8(invocation) - 341: 71(ptr) AccessChain 31(data) 33 63 - 342: 25(ivec4) Load 341 - 343: 78(ivec3) VectorShuffle 342 342 0 1 2 + 322: 43(fvec2) VectorShuffle 321 321 0 1 + 323: 17(ivec4) Load 19(ballot) + 324: 43(fvec2) GroupNonUniformFMul 178 PartitionedReduceNV 322 323 + 325: 36(ptr) AccessChain 31(data) 319 34 35 + 326: 22(float) CompositeExtract 324 0 + Store 325 326 + 327: 36(ptr) AccessChain 31(data) 319 34 189 + 328: 22(float) CompositeExtract 324 1 + Store 327 328 + 329: 6(int) Load 8(invocation) + 330: 44(ptr) AccessChain 31(data) 33 34 + 331: 23(fvec4) Load 330 + 332: 51(fvec3) VectorShuffle 331 331 0 1 2 + 333: 17(ivec4) Load 19(ballot) + 334: 51(fvec3) GroupNonUniformFMul 178 PartitionedReduceNV 332 333 + 335: 36(ptr) AccessChain 31(data) 329 34 35 + 336: 22(float) CompositeExtract 334 0 + Store 335 336 + 337: 36(ptr) AccessChain 31(data) 329 34 189 + 338: 22(float) CompositeExtract 334 1 + Store 337 338 + 339: 36(ptr) AccessChain 31(data) 329 34 202 + 340: 22(float) CompositeExtract 334 2 + Store 339 340 + 341: 6(int) Load 8(invocation) + 342: 44(ptr) AccessChain 31(data) 115 34 + 343: 23(fvec4) Load 342 344: 17(ivec4) Load 19(ballot) - 345: 78(ivec3) GroupNonUniformIMul 178 PartitionedReduceNV 343 344 - 346: 71(ptr) AccessChain 31(data) 340 63 - 347: 25(ivec4) Load 346 - 348: 25(ivec4) VectorShuffle 347 345 4 5 6 3 - Store 346 348 - 349: 6(int) Load 8(invocation) - 350: 71(ptr) AccessChain 31(data) 115 63 - 351: 25(ivec4) Load 350 - 352: 17(ivec4) Load 19(ballot) - 353: 25(ivec4) GroupNonUniformIMul 178 PartitionedReduceNV 351 352 - 354: 71(ptr) AccessChain 31(data) 349 63 - Store 354 353 - 355: 6(int) Load 8(invocation) - 356: 90(ptr) AccessChain 31(data) 34 33 35 - 357: 6(int) Load 356 - 358: 17(ivec4) Load 19(ballot) - 359: 6(int) GroupNonUniformIMul 178 PartitionedReduceNV 357 358 - 360: 90(ptr) AccessChain 31(data) 355 33 35 - Store 360 359 - 361: 6(int) Load 8(invocation) - 362: 40(ptr) AccessChain 31(data) 63 33 - 363: 17(ivec4) Load 362 - 364: 96(ivec2) VectorShuffle 363 363 0 1 - 365: 17(ivec4) Load 19(ballot) - 366: 96(ivec2) GroupNonUniformIMul 178 PartitionedReduceNV 364 365 - 367: 40(ptr) AccessChain 31(data) 361 33 - 368: 17(ivec4) Load 367 - 369: 17(ivec4) VectorShuffle 368 366 4 5 2 3 - Store 367 369 - 370: 6(int) Load 8(invocation) - 371: 40(ptr) AccessChain 31(data) 33 33 - 372: 17(ivec4) Load 371 - 373: 103(ivec3) VectorShuffle 372 372 0 1 2 - 374: 17(ivec4) Load 19(ballot) - 375: 103(ivec3) GroupNonUniformIMul 178 PartitionedReduceNV 373 374 - 376: 40(ptr) AccessChain 31(data) 370 33 - 377: 17(ivec4) Load 376 - 378: 17(ivec4) VectorShuffle 377 375 4 5 6 3 - Store 376 378 - 379: 6(int) Load 8(invocation) - 380: 40(ptr) AccessChain 31(data) 115 33 - 381: 17(ivec4) Load 380 - 382: 17(ivec4) Load 19(ballot) - 383: 17(ivec4) GroupNonUniformIMul 178 PartitionedReduceNV 381 382 - 384: 40(ptr) AccessChain 31(data) 379 33 - Store 384 383 - 385: 6(int) Load 8(invocation) - 386: 116(ptr) AccessChain 31(data) 34 115 35 - 387:26(float64_t) Load 386 - 388: 17(ivec4) Load 19(ballot) - 389:26(float64_t) GroupNonUniformFMul 178 PartitionedReduceNV 387 388 - 390: 116(ptr) AccessChain 31(data) 385 115 35 - Store 390 389 - 391: 6(int) Load 8(invocation) - 392: 123(ptr) AccessChain 31(data) 63 115 - 393: 27(f64vec4) Load 392 - 394:122(f64vec2) VectorShuffle 393 393 0 1 - 395: 17(ivec4) Load 19(ballot) - 396:122(f64vec2) GroupNonUniformFMul 178 PartitionedReduceNV 394 395 - 397: 123(ptr) AccessChain 31(data) 391 115 - 398: 27(f64vec4) Load 397 - 399: 27(f64vec4) VectorShuffle 398 396 4 5 2 3 - Store 397 399 - 400: 6(int) Load 8(invocation) - 401: 123(ptr) AccessChain 31(data) 33 115 - 402: 27(f64vec4) Load 401 - 403:130(f64vec3) VectorShuffle 402 402 0 1 2 - 404: 17(ivec4) Load 19(ballot) - 405:130(f64vec3) GroupNonUniformFMul 178 PartitionedReduceNV 403 404 - 406: 123(ptr) AccessChain 31(data) 400 115 - 407: 27(f64vec4) Load 406 - 408: 27(f64vec4) VectorShuffle 407 405 4 5 6 3 - Store 406 408 + 345: 23(fvec4) GroupNonUniformFMul 178 PartitionedReduceNV 343 344 + 346: 44(ptr) AccessChain 31(data) 341 34 + Store 346 345 + 347: 6(int) Load 8(invocation) + 348: 64(ptr) AccessChain 31(data) 34 63 35 + 349: 24(int) Load 348 + 350: 17(ivec4) Load 19(ballot) + 351: 24(int) GroupNonUniformIMul 178 PartitionedReduceNV 349 350 + 352: 64(ptr) AccessChain 31(data) 347 63 35 + Store 352 351 + 353: 6(int) Load 8(invocation) + 354: 71(ptr) AccessChain 31(data) 63 63 + 355: 25(ivec4) Load 354 + 356: 70(ivec2) VectorShuffle 355 355 0 1 + 357: 17(ivec4) Load 19(ballot) + 358: 70(ivec2) GroupNonUniformIMul 178 PartitionedReduceNV 356 357 + 359: 64(ptr) AccessChain 31(data) 353 63 35 + 360: 24(int) CompositeExtract 358 0 + Store 359 360 + 361: 64(ptr) AccessChain 31(data) 353 63 189 + 362: 24(int) CompositeExtract 358 1 + Store 361 362 + 363: 6(int) Load 8(invocation) + 364: 71(ptr) AccessChain 31(data) 33 63 + 365: 25(ivec4) Load 364 + 366: 78(ivec3) VectorShuffle 365 365 0 1 2 + 367: 17(ivec4) Load 19(ballot) + 368: 78(ivec3) GroupNonUniformIMul 178 PartitionedReduceNV 366 367 + 369: 64(ptr) AccessChain 31(data) 363 63 35 + 370: 24(int) CompositeExtract 368 0 + Store 369 370 + 371: 64(ptr) AccessChain 31(data) 363 63 189 + 372: 24(int) CompositeExtract 368 1 + Store 371 372 + 373: 64(ptr) AccessChain 31(data) 363 63 202 + 374: 24(int) CompositeExtract 368 2 + Store 373 374 + 375: 6(int) Load 8(invocation) + 376: 71(ptr) AccessChain 31(data) 115 63 + 377: 25(ivec4) Load 376 + 378: 17(ivec4) Load 19(ballot) + 379: 25(ivec4) GroupNonUniformIMul 178 PartitionedReduceNV 377 378 + 380: 71(ptr) AccessChain 31(data) 375 63 + Store 380 379 + 381: 6(int) Load 8(invocation) + 382: 90(ptr) AccessChain 31(data) 34 33 35 + 383: 6(int) Load 382 + 384: 17(ivec4) Load 19(ballot) + 385: 6(int) GroupNonUniformIMul 178 PartitionedReduceNV 383 384 + 386: 90(ptr) AccessChain 31(data) 381 33 35 + Store 386 385 + 387: 6(int) Load 8(invocation) + 388: 40(ptr) AccessChain 31(data) 63 33 + 389: 17(ivec4) Load 388 + 390: 96(ivec2) VectorShuffle 389 389 0 1 + 391: 17(ivec4) Load 19(ballot) + 392: 96(ivec2) GroupNonUniformIMul 178 PartitionedReduceNV 390 391 + 393: 90(ptr) AccessChain 31(data) 387 33 35 + 394: 6(int) CompositeExtract 392 0 + Store 393 394 + 395: 90(ptr) AccessChain 31(data) 387 33 189 + 396: 6(int) CompositeExtract 392 1 + Store 395 396 + 397: 6(int) Load 8(invocation) + 398: 40(ptr) AccessChain 31(data) 33 33 + 399: 17(ivec4) Load 398 + 400: 103(ivec3) VectorShuffle 399 399 0 1 2 + 401: 17(ivec4) Load 19(ballot) + 402: 103(ivec3) GroupNonUniformIMul 178 PartitionedReduceNV 400 401 + 403: 90(ptr) AccessChain 31(data) 397 33 35 + 404: 6(int) CompositeExtract 402 0 + Store 403 404 + 405: 90(ptr) AccessChain 31(data) 397 33 189 + 406: 6(int) CompositeExtract 402 1 + Store 405 406 + 407: 90(ptr) AccessChain 31(data) 397 33 202 + 408: 6(int) CompositeExtract 402 2 + Store 407 408 409: 6(int) Load 8(invocation) - 410: 123(ptr) AccessChain 31(data) 115 115 - 411: 27(f64vec4) Load 410 + 410: 40(ptr) AccessChain 31(data) 115 33 + 411: 17(ivec4) Load 410 412: 17(ivec4) Load 19(ballot) - 413: 27(f64vec4) GroupNonUniformFMul 178 PartitionedReduceNV 411 412 - 414: 123(ptr) AccessChain 31(data) 409 115 + 413: 17(ivec4) GroupNonUniformIMul 178 PartitionedReduceNV 411 412 + 414: 40(ptr) AccessChain 31(data) 409 33 Store 414 413 415: 6(int) Load 8(invocation) - 416: 36(ptr) AccessChain 31(data) 34 34 35 - 417: 22(float) Load 416 + 416: 116(ptr) AccessChain 31(data) 34 115 35 + 417:26(float64_t) Load 416 418: 17(ivec4) Load 19(ballot) - 419: 22(float) GroupNonUniformFMin 178 PartitionedReduceNV 417 418 - 420: 36(ptr) AccessChain 31(data) 415 34 35 + 419:26(float64_t) GroupNonUniformFMul 178 PartitionedReduceNV 417 418 + 420: 116(ptr) AccessChain 31(data) 415 115 35 Store 420 419 421: 6(int) Load 8(invocation) - 422: 44(ptr) AccessChain 31(data) 63 34 - 423: 23(fvec4) Load 422 - 424: 43(fvec2) VectorShuffle 423 423 0 1 + 422: 123(ptr) AccessChain 31(data) 63 115 + 423: 27(f64vec4) Load 422 + 424:122(f64vec2) VectorShuffle 423 423 0 1 425: 17(ivec4) Load 19(ballot) - 426: 43(fvec2) GroupNonUniformFMin 178 PartitionedReduceNV 424 425 - 427: 44(ptr) AccessChain 31(data) 421 34 - 428: 23(fvec4) Load 427 - 429: 23(fvec4) VectorShuffle 428 426 4 5 2 3 - Store 427 429 - 430: 6(int) Load 8(invocation) - 431: 44(ptr) AccessChain 31(data) 33 34 - 432: 23(fvec4) Load 431 - 433: 51(fvec3) VectorShuffle 432 432 0 1 2 - 434: 17(ivec4) Load 19(ballot) - 435: 51(fvec3) GroupNonUniformFMin 178 PartitionedReduceNV 433 434 - 436: 44(ptr) AccessChain 31(data) 430 34 - 437: 23(fvec4) Load 436 - 438: 23(fvec4) VectorShuffle 437 435 4 5 6 3 - Store 436 438 - 439: 6(int) Load 8(invocation) - 440: 44(ptr) AccessChain 31(data) 115 34 - 441: 23(fvec4) Load 440 - 442: 17(ivec4) Load 19(ballot) - 443: 23(fvec4) GroupNonUniformFMin 178 PartitionedReduceNV 441 442 - 444: 44(ptr) AccessChain 31(data) 439 34 - Store 444 443 - 445: 6(int) Load 8(invocation) - 446: 64(ptr) AccessChain 31(data) 34 63 35 - 447: 24(int) Load 446 - 448: 17(ivec4) Load 19(ballot) - 449: 24(int) GroupNonUniformSMin 178 PartitionedReduceNV 447 448 - 450: 64(ptr) AccessChain 31(data) 445 63 35 - Store 450 449 - 451: 6(int) Load 8(invocation) - 452: 71(ptr) AccessChain 31(data) 63 63 - 453: 25(ivec4) Load 452 - 454: 70(ivec2) VectorShuffle 453 453 0 1 - 455: 17(ivec4) Load 19(ballot) - 456: 70(ivec2) GroupNonUniformSMin 178 PartitionedReduceNV 454 455 - 457: 71(ptr) AccessChain 31(data) 451 63 - 458: 25(ivec4) Load 457 - 459: 25(ivec4) VectorShuffle 458 456 4 5 2 3 - Store 457 459 - 460: 6(int) Load 8(invocation) - 461: 71(ptr) AccessChain 31(data) 33 63 - 462: 25(ivec4) Load 461 - 463: 78(ivec3) VectorShuffle 462 462 0 1 2 - 464: 17(ivec4) Load 19(ballot) - 465: 78(ivec3) GroupNonUniformSMin 178 PartitionedReduceNV 463 464 - 466: 71(ptr) AccessChain 31(data) 460 63 - 467: 25(ivec4) Load 466 - 468: 25(ivec4) VectorShuffle 467 465 4 5 6 3 - Store 466 468 - 469: 6(int) Load 8(invocation) - 470: 71(ptr) AccessChain 31(data) 115 63 - 471: 25(ivec4) Load 470 - 472: 17(ivec4) Load 19(ballot) - 473: 25(ivec4) GroupNonUniformSMin 178 PartitionedReduceNV 471 472 - 474: 71(ptr) AccessChain 31(data) 469 63 - Store 474 473 - 475: 6(int) Load 8(invocation) - 476: 90(ptr) AccessChain 31(data) 34 33 35 - 477: 6(int) Load 476 - 478: 17(ivec4) Load 19(ballot) - 479: 6(int) GroupNonUniformUMin 178 PartitionedReduceNV 477 478 - 480: 90(ptr) AccessChain 31(data) 475 33 35 - Store 480 479 - 481: 6(int) Load 8(invocation) - 482: 40(ptr) AccessChain 31(data) 63 33 - 483: 17(ivec4) Load 482 - 484: 96(ivec2) VectorShuffle 483 483 0 1 - 485: 17(ivec4) Load 19(ballot) - 486: 96(ivec2) GroupNonUniformUMin 178 PartitionedReduceNV 484 485 - 487: 40(ptr) AccessChain 31(data) 481 33 - 488: 17(ivec4) Load 487 - 489: 17(ivec4) VectorShuffle 488 486 4 5 2 3 - Store 487 489 - 490: 6(int) Load 8(invocation) - 491: 40(ptr) AccessChain 31(data) 33 33 - 492: 17(ivec4) Load 491 - 493: 103(ivec3) VectorShuffle 492 492 0 1 2 - 494: 17(ivec4) Load 19(ballot) - 495: 103(ivec3) GroupNonUniformUMin 178 PartitionedReduceNV 493 494 - 496: 40(ptr) AccessChain 31(data) 490 33 - 497: 17(ivec4) Load 496 - 498: 17(ivec4) VectorShuffle 497 495 4 5 6 3 - Store 496 498 + 426:122(f64vec2) GroupNonUniformFMul 178 PartitionedReduceNV 424 425 + 427: 116(ptr) AccessChain 31(data) 421 115 35 + 428:26(float64_t) CompositeExtract 426 0 + Store 427 428 + 429: 116(ptr) AccessChain 31(data) 421 115 189 + 430:26(float64_t) CompositeExtract 426 1 + Store 429 430 + 431: 6(int) Load 8(invocation) + 432: 123(ptr) AccessChain 31(data) 33 115 + 433: 27(f64vec4) Load 432 + 434:130(f64vec3) VectorShuffle 433 433 0 1 2 + 435: 17(ivec4) Load 19(ballot) + 436:130(f64vec3) GroupNonUniformFMul 178 PartitionedReduceNV 434 435 + 437: 116(ptr) AccessChain 31(data) 431 115 35 + 438:26(float64_t) CompositeExtract 436 0 + Store 437 438 + 439: 116(ptr) AccessChain 31(data) 431 115 189 + 440:26(float64_t) CompositeExtract 436 1 + Store 439 440 + 441: 116(ptr) AccessChain 31(data) 431 115 202 + 442:26(float64_t) CompositeExtract 436 2 + Store 441 442 + 443: 6(int) Load 8(invocation) + 444: 123(ptr) AccessChain 31(data) 115 115 + 445: 27(f64vec4) Load 444 + 446: 17(ivec4) Load 19(ballot) + 447: 27(f64vec4) GroupNonUniformFMul 178 PartitionedReduceNV 445 446 + 448: 123(ptr) AccessChain 31(data) 443 115 + Store 448 447 + 449: 6(int) Load 8(invocation) + 450: 36(ptr) AccessChain 31(data) 34 34 35 + 451: 22(float) Load 450 + 452: 17(ivec4) Load 19(ballot) + 453: 22(float) GroupNonUniformFMin 178 PartitionedReduceNV 451 452 + 454: 36(ptr) AccessChain 31(data) 449 34 35 + Store 454 453 + 455: 6(int) Load 8(invocation) + 456: 44(ptr) AccessChain 31(data) 63 34 + 457: 23(fvec4) Load 456 + 458: 43(fvec2) VectorShuffle 457 457 0 1 + 459: 17(ivec4) Load 19(ballot) + 460: 43(fvec2) GroupNonUniformFMin 178 PartitionedReduceNV 458 459 + 461: 36(ptr) AccessChain 31(data) 455 34 35 + 462: 22(float) CompositeExtract 460 0 + Store 461 462 + 463: 36(ptr) AccessChain 31(data) 455 34 189 + 464: 22(float) CompositeExtract 460 1 + Store 463 464 + 465: 6(int) Load 8(invocation) + 466: 44(ptr) AccessChain 31(data) 33 34 + 467: 23(fvec4) Load 466 + 468: 51(fvec3) VectorShuffle 467 467 0 1 2 + 469: 17(ivec4) Load 19(ballot) + 470: 51(fvec3) GroupNonUniformFMin 178 PartitionedReduceNV 468 469 + 471: 36(ptr) AccessChain 31(data) 465 34 35 + 472: 22(float) CompositeExtract 470 0 + Store 471 472 + 473: 36(ptr) AccessChain 31(data) 465 34 189 + 474: 22(float) CompositeExtract 470 1 + Store 473 474 + 475: 36(ptr) AccessChain 31(data) 465 34 202 + 476: 22(float) CompositeExtract 470 2 + Store 475 476 + 477: 6(int) Load 8(invocation) + 478: 44(ptr) AccessChain 31(data) 115 34 + 479: 23(fvec4) Load 478 + 480: 17(ivec4) Load 19(ballot) + 481: 23(fvec4) GroupNonUniformFMin 178 PartitionedReduceNV 479 480 + 482: 44(ptr) AccessChain 31(data) 477 34 + Store 482 481 + 483: 6(int) Load 8(invocation) + 484: 64(ptr) AccessChain 31(data) 34 63 35 + 485: 24(int) Load 484 + 486: 17(ivec4) Load 19(ballot) + 487: 24(int) GroupNonUniformSMin 178 PartitionedReduceNV 485 486 + 488: 64(ptr) AccessChain 31(data) 483 63 35 + Store 488 487 + 489: 6(int) Load 8(invocation) + 490: 71(ptr) AccessChain 31(data) 63 63 + 491: 25(ivec4) Load 490 + 492: 70(ivec2) VectorShuffle 491 491 0 1 + 493: 17(ivec4) Load 19(ballot) + 494: 70(ivec2) GroupNonUniformSMin 178 PartitionedReduceNV 492 493 + 495: 64(ptr) AccessChain 31(data) 489 63 35 + 496: 24(int) CompositeExtract 494 0 + Store 495 496 + 497: 64(ptr) AccessChain 31(data) 489 63 189 + 498: 24(int) CompositeExtract 494 1 + Store 497 498 499: 6(int) Load 8(invocation) - 500: 40(ptr) AccessChain 31(data) 115 33 - 501: 17(ivec4) Load 500 - 502: 17(ivec4) Load 19(ballot) - 503: 17(ivec4) GroupNonUniformUMin 178 PartitionedReduceNV 501 502 - 504: 40(ptr) AccessChain 31(data) 499 33 - Store 504 503 - 505: 6(int) Load 8(invocation) - 506: 116(ptr) AccessChain 31(data) 34 115 35 - 507:26(float64_t) Load 506 - 508: 17(ivec4) Load 19(ballot) - 509:26(float64_t) GroupNonUniformFMin 178 PartitionedReduceNV 507 508 - 510: 116(ptr) AccessChain 31(data) 505 115 35 - Store 510 509 + 500: 71(ptr) AccessChain 31(data) 33 63 + 501: 25(ivec4) Load 500 + 502: 78(ivec3) VectorShuffle 501 501 0 1 2 + 503: 17(ivec4) Load 19(ballot) + 504: 78(ivec3) GroupNonUniformSMin 178 PartitionedReduceNV 502 503 + 505: 64(ptr) AccessChain 31(data) 499 63 35 + 506: 24(int) CompositeExtract 504 0 + Store 505 506 + 507: 64(ptr) AccessChain 31(data) 499 63 189 + 508: 24(int) CompositeExtract 504 1 + Store 507 508 + 509: 64(ptr) AccessChain 31(data) 499 63 202 + 510: 24(int) CompositeExtract 504 2 + Store 509 510 511: 6(int) Load 8(invocation) - 512: 123(ptr) AccessChain 31(data) 63 115 - 513: 27(f64vec4) Load 512 - 514:122(f64vec2) VectorShuffle 513 513 0 1 - 515: 17(ivec4) Load 19(ballot) - 516:122(f64vec2) GroupNonUniformFMin 178 PartitionedReduceNV 514 515 - 517: 123(ptr) AccessChain 31(data) 511 115 - 518: 27(f64vec4) Load 517 - 519: 27(f64vec4) VectorShuffle 518 516 4 5 2 3 - Store 517 519 - 520: 6(int) Load 8(invocation) - 521: 123(ptr) AccessChain 31(data) 33 115 - 522: 27(f64vec4) Load 521 - 523:130(f64vec3) VectorShuffle 522 522 0 1 2 - 524: 17(ivec4) Load 19(ballot) - 525:130(f64vec3) GroupNonUniformFMin 178 PartitionedReduceNV 523 524 - 526: 123(ptr) AccessChain 31(data) 520 115 - 527: 27(f64vec4) Load 526 - 528: 27(f64vec4) VectorShuffle 527 525 4 5 6 3 - Store 526 528 - 529: 6(int) Load 8(invocation) - 530: 123(ptr) AccessChain 31(data) 115 115 - 531: 27(f64vec4) Load 530 - 532: 17(ivec4) Load 19(ballot) - 533: 27(f64vec4) GroupNonUniformFMin 178 PartitionedReduceNV 531 532 - 534: 123(ptr) AccessChain 31(data) 529 115 - Store 534 533 - 535: 6(int) Load 8(invocation) - 536: 36(ptr) AccessChain 31(data) 34 34 35 - 537: 22(float) Load 536 - 538: 17(ivec4) Load 19(ballot) - 539: 22(float) GroupNonUniformFMax 178 PartitionedReduceNV 537 538 - 540: 36(ptr) AccessChain 31(data) 535 34 35 - Store 540 539 - 541: 6(int) Load 8(invocation) - 542: 44(ptr) AccessChain 31(data) 63 34 - 543: 23(fvec4) Load 542 - 544: 43(fvec2) VectorShuffle 543 543 0 1 - 545: 17(ivec4) Load 19(ballot) - 546: 43(fvec2) GroupNonUniformFMax 178 PartitionedReduceNV 544 545 - 547: 44(ptr) AccessChain 31(data) 541 34 - 548: 23(fvec4) Load 547 - 549: 23(fvec4) VectorShuffle 548 546 4 5 2 3 - Store 547 549 - 550: 6(int) Load 8(invocation) - 551: 44(ptr) AccessChain 31(data) 33 34 - 552: 23(fvec4) Load 551 - 553: 51(fvec3) VectorShuffle 552 552 0 1 2 + 512: 71(ptr) AccessChain 31(data) 115 63 + 513: 25(ivec4) Load 512 + 514: 17(ivec4) Load 19(ballot) + 515: 25(ivec4) GroupNonUniformSMin 178 PartitionedReduceNV 513 514 + 516: 71(ptr) AccessChain 31(data) 511 63 + Store 516 515 + 517: 6(int) Load 8(invocation) + 518: 90(ptr) AccessChain 31(data) 34 33 35 + 519: 6(int) Load 518 + 520: 17(ivec4) Load 19(ballot) + 521: 6(int) GroupNonUniformUMin 178 PartitionedReduceNV 519 520 + 522: 90(ptr) AccessChain 31(data) 517 33 35 + Store 522 521 + 523: 6(int) Load 8(invocation) + 524: 40(ptr) AccessChain 31(data) 63 33 + 525: 17(ivec4) Load 524 + 526: 96(ivec2) VectorShuffle 525 525 0 1 + 527: 17(ivec4) Load 19(ballot) + 528: 96(ivec2) GroupNonUniformUMin 178 PartitionedReduceNV 526 527 + 529: 90(ptr) AccessChain 31(data) 523 33 35 + 530: 6(int) CompositeExtract 528 0 + Store 529 530 + 531: 90(ptr) AccessChain 31(data) 523 33 189 + 532: 6(int) CompositeExtract 528 1 + Store 531 532 + 533: 6(int) Load 8(invocation) + 534: 40(ptr) AccessChain 31(data) 33 33 + 535: 17(ivec4) Load 534 + 536: 103(ivec3) VectorShuffle 535 535 0 1 2 + 537: 17(ivec4) Load 19(ballot) + 538: 103(ivec3) GroupNonUniformUMin 178 PartitionedReduceNV 536 537 + 539: 90(ptr) AccessChain 31(data) 533 33 35 + 540: 6(int) CompositeExtract 538 0 + Store 539 540 + 541: 90(ptr) AccessChain 31(data) 533 33 189 + 542: 6(int) CompositeExtract 538 1 + Store 541 542 + 543: 90(ptr) AccessChain 31(data) 533 33 202 + 544: 6(int) CompositeExtract 538 2 + Store 543 544 + 545: 6(int) Load 8(invocation) + 546: 40(ptr) AccessChain 31(data) 115 33 + 547: 17(ivec4) Load 546 + 548: 17(ivec4) Load 19(ballot) + 549: 17(ivec4) GroupNonUniformUMin 178 PartitionedReduceNV 547 548 + 550: 40(ptr) AccessChain 31(data) 545 33 + Store 550 549 + 551: 6(int) Load 8(invocation) + 552: 116(ptr) AccessChain 31(data) 34 115 35 + 553:26(float64_t) Load 552 554: 17(ivec4) Load 19(ballot) - 555: 51(fvec3) GroupNonUniformFMax 178 PartitionedReduceNV 553 554 - 556: 44(ptr) AccessChain 31(data) 550 34 - 557: 23(fvec4) Load 556 - 558: 23(fvec4) VectorShuffle 557 555 4 5 6 3 - Store 556 558 - 559: 6(int) Load 8(invocation) - 560: 44(ptr) AccessChain 31(data) 115 34 - 561: 23(fvec4) Load 560 - 562: 17(ivec4) Load 19(ballot) - 563: 23(fvec4) GroupNonUniformFMax 178 PartitionedReduceNV 561 562 - 564: 44(ptr) AccessChain 31(data) 559 34 - Store 564 563 - 565: 6(int) Load 8(invocation) - 566: 64(ptr) AccessChain 31(data) 34 63 35 - 567: 24(int) Load 566 - 568: 17(ivec4) Load 19(ballot) - 569: 24(int) GroupNonUniformSMax 178 PartitionedReduceNV 567 568 - 570: 64(ptr) AccessChain 31(data) 565 63 35 - Store 570 569 - 571: 6(int) Load 8(invocation) - 572: 71(ptr) AccessChain 31(data) 63 63 - 573: 25(ivec4) Load 572 - 574: 70(ivec2) VectorShuffle 573 573 0 1 - 575: 17(ivec4) Load 19(ballot) - 576: 70(ivec2) GroupNonUniformSMax 178 PartitionedReduceNV 574 575 - 577: 71(ptr) AccessChain 31(data) 571 63 - 578: 25(ivec4) Load 577 - 579: 25(ivec4) VectorShuffle 578 576 4 5 2 3 - Store 577 579 - 580: 6(int) Load 8(invocation) - 581: 71(ptr) AccessChain 31(data) 33 63 - 582: 25(ivec4) Load 581 - 583: 78(ivec3) VectorShuffle 582 582 0 1 2 - 584: 17(ivec4) Load 19(ballot) - 585: 78(ivec3) GroupNonUniformSMax 178 PartitionedReduceNV 583 584 - 586: 71(ptr) AccessChain 31(data) 580 63 - 587: 25(ivec4) Load 586 - 588: 25(ivec4) VectorShuffle 587 585 4 5 6 3 - Store 586 588 - 589: 6(int) Load 8(invocation) - 590: 71(ptr) AccessChain 31(data) 115 63 - 591: 25(ivec4) Load 590 - 592: 17(ivec4) Load 19(ballot) - 593: 25(ivec4) GroupNonUniformSMax 178 PartitionedReduceNV 591 592 - 594: 71(ptr) AccessChain 31(data) 589 63 - Store 594 593 - 595: 6(int) Load 8(invocation) - 596: 90(ptr) AccessChain 31(data) 34 33 35 - 597: 6(int) Load 596 - 598: 17(ivec4) Load 19(ballot) - 599: 6(int) GroupNonUniformUMax 178 PartitionedReduceNV 597 598 - 600: 90(ptr) AccessChain 31(data) 595 33 35 - Store 600 599 + 555:26(float64_t) GroupNonUniformFMin 178 PartitionedReduceNV 553 554 + 556: 116(ptr) AccessChain 31(data) 551 115 35 + Store 556 555 + 557: 6(int) Load 8(invocation) + 558: 123(ptr) AccessChain 31(data) 63 115 + 559: 27(f64vec4) Load 558 + 560:122(f64vec2) VectorShuffle 559 559 0 1 + 561: 17(ivec4) Load 19(ballot) + 562:122(f64vec2) GroupNonUniformFMin 178 PartitionedReduceNV 560 561 + 563: 116(ptr) AccessChain 31(data) 557 115 35 + 564:26(float64_t) CompositeExtract 562 0 + Store 563 564 + 565: 116(ptr) AccessChain 31(data) 557 115 189 + 566:26(float64_t) CompositeExtract 562 1 + Store 565 566 + 567: 6(int) Load 8(invocation) + 568: 123(ptr) AccessChain 31(data) 33 115 + 569: 27(f64vec4) Load 568 + 570:130(f64vec3) VectorShuffle 569 569 0 1 2 + 571: 17(ivec4) Load 19(ballot) + 572:130(f64vec3) GroupNonUniformFMin 178 PartitionedReduceNV 570 571 + 573: 116(ptr) AccessChain 31(data) 567 115 35 + 574:26(float64_t) CompositeExtract 572 0 + Store 573 574 + 575: 116(ptr) AccessChain 31(data) 567 115 189 + 576:26(float64_t) CompositeExtract 572 1 + Store 575 576 + 577: 116(ptr) AccessChain 31(data) 567 115 202 + 578:26(float64_t) CompositeExtract 572 2 + Store 577 578 + 579: 6(int) Load 8(invocation) + 580: 123(ptr) AccessChain 31(data) 115 115 + 581: 27(f64vec4) Load 580 + 582: 17(ivec4) Load 19(ballot) + 583: 27(f64vec4) GroupNonUniformFMin 178 PartitionedReduceNV 581 582 + 584: 123(ptr) AccessChain 31(data) 579 115 + Store 584 583 + 585: 6(int) Load 8(invocation) + 586: 36(ptr) AccessChain 31(data) 34 34 35 + 587: 22(float) Load 586 + 588: 17(ivec4) Load 19(ballot) + 589: 22(float) GroupNonUniformFMax 178 PartitionedReduceNV 587 588 + 590: 36(ptr) AccessChain 31(data) 585 34 35 + Store 590 589 + 591: 6(int) Load 8(invocation) + 592: 44(ptr) AccessChain 31(data) 63 34 + 593: 23(fvec4) Load 592 + 594: 43(fvec2) VectorShuffle 593 593 0 1 + 595: 17(ivec4) Load 19(ballot) + 596: 43(fvec2) GroupNonUniformFMax 178 PartitionedReduceNV 594 595 + 597: 36(ptr) AccessChain 31(data) 591 34 35 + 598: 22(float) CompositeExtract 596 0 + Store 597 598 + 599: 36(ptr) AccessChain 31(data) 591 34 189 + 600: 22(float) CompositeExtract 596 1 + Store 599 600 601: 6(int) Load 8(invocation) - 602: 40(ptr) AccessChain 31(data) 63 33 - 603: 17(ivec4) Load 602 - 604: 96(ivec2) VectorShuffle 603 603 0 1 + 602: 44(ptr) AccessChain 31(data) 33 34 + 603: 23(fvec4) Load 602 + 604: 51(fvec3) VectorShuffle 603 603 0 1 2 605: 17(ivec4) Load 19(ballot) - 606: 96(ivec2) GroupNonUniformUMax 178 PartitionedReduceNV 604 605 - 607: 40(ptr) AccessChain 31(data) 601 33 - 608: 17(ivec4) Load 607 - 609: 17(ivec4) VectorShuffle 608 606 4 5 2 3 - Store 607 609 - 610: 6(int) Load 8(invocation) - 611: 40(ptr) AccessChain 31(data) 33 33 - 612: 17(ivec4) Load 611 - 613: 103(ivec3) VectorShuffle 612 612 0 1 2 - 614: 17(ivec4) Load 19(ballot) - 615: 103(ivec3) GroupNonUniformUMax 178 PartitionedReduceNV 613 614 - 616: 40(ptr) AccessChain 31(data) 610 33 - 617: 17(ivec4) Load 616 - 618: 17(ivec4) VectorShuffle 617 615 4 5 6 3 - Store 616 618 + 606: 51(fvec3) GroupNonUniformFMax 178 PartitionedReduceNV 604 605 + 607: 36(ptr) AccessChain 31(data) 601 34 35 + 608: 22(float) CompositeExtract 606 0 + Store 607 608 + 609: 36(ptr) AccessChain 31(data) 601 34 189 + 610: 22(float) CompositeExtract 606 1 + Store 609 610 + 611: 36(ptr) AccessChain 31(data) 601 34 202 + 612: 22(float) CompositeExtract 606 2 + Store 611 612 + 613: 6(int) Load 8(invocation) + 614: 44(ptr) AccessChain 31(data) 115 34 + 615: 23(fvec4) Load 614 + 616: 17(ivec4) Load 19(ballot) + 617: 23(fvec4) GroupNonUniformFMax 178 PartitionedReduceNV 615 616 + 618: 44(ptr) AccessChain 31(data) 613 34 + Store 618 617 619: 6(int) Load 8(invocation) - 620: 40(ptr) AccessChain 31(data) 115 33 - 621: 17(ivec4) Load 620 + 620: 64(ptr) AccessChain 31(data) 34 63 35 + 621: 24(int) Load 620 622: 17(ivec4) Load 19(ballot) - 623: 17(ivec4) GroupNonUniformUMax 178 PartitionedReduceNV 621 622 - 624: 40(ptr) AccessChain 31(data) 619 33 + 623: 24(int) GroupNonUniformSMax 178 PartitionedReduceNV 621 622 + 624: 64(ptr) AccessChain 31(data) 619 63 35 Store 624 623 625: 6(int) Load 8(invocation) - 626: 116(ptr) AccessChain 31(data) 34 115 35 - 627:26(float64_t) Load 626 - 628: 17(ivec4) Load 19(ballot) - 629:26(float64_t) GroupNonUniformFMax 178 PartitionedReduceNV 627 628 - 630: 116(ptr) AccessChain 31(data) 625 115 35 - Store 630 629 - 631: 6(int) Load 8(invocation) - 632: 123(ptr) AccessChain 31(data) 63 115 - 633: 27(f64vec4) Load 632 - 634:122(f64vec2) VectorShuffle 633 633 0 1 - 635: 17(ivec4) Load 19(ballot) - 636:122(f64vec2) GroupNonUniformFMax 178 PartitionedReduceNV 634 635 - 637: 123(ptr) AccessChain 31(data) 631 115 - 638: 27(f64vec4) Load 637 - 639: 27(f64vec4) VectorShuffle 638 636 4 5 2 3 - Store 637 639 - 640: 6(int) Load 8(invocation) - 641: 123(ptr) AccessChain 31(data) 33 115 - 642: 27(f64vec4) Load 641 - 643:130(f64vec3) VectorShuffle 642 642 0 1 2 - 644: 17(ivec4) Load 19(ballot) - 645:130(f64vec3) GroupNonUniformFMax 178 PartitionedReduceNV 643 644 - 646: 123(ptr) AccessChain 31(data) 640 115 - 647: 27(f64vec4) Load 646 - 648: 27(f64vec4) VectorShuffle 647 645 4 5 6 3 - Store 646 648 - 649: 6(int) Load 8(invocation) - 650: 123(ptr) AccessChain 31(data) 115 115 - 651: 27(f64vec4) Load 650 - 652: 17(ivec4) Load 19(ballot) - 653: 27(f64vec4) GroupNonUniformFMax 178 PartitionedReduceNV 651 652 - 654: 123(ptr) AccessChain 31(data) 649 115 - Store 654 653 - 655: 6(int) Load 8(invocation) - 656: 64(ptr) AccessChain 31(data) 34 63 35 - 657: 24(int) Load 656 - 658: 17(ivec4) Load 19(ballot) - 659: 24(int) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 657 658 - 660: 64(ptr) AccessChain 31(data) 655 63 35 - Store 660 659 - 661: 6(int) Load 8(invocation) - 662: 71(ptr) AccessChain 31(data) 63 63 - 663: 25(ivec4) Load 662 - 664: 70(ivec2) VectorShuffle 663 663 0 1 - 665: 17(ivec4) Load 19(ballot) - 666: 70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 664 665 - 667: 71(ptr) AccessChain 31(data) 661 63 - 668: 25(ivec4) Load 667 - 669: 25(ivec4) VectorShuffle 668 666 4 5 2 3 - Store 667 669 - 670: 6(int) Load 8(invocation) - 671: 71(ptr) AccessChain 31(data) 33 63 - 672: 25(ivec4) Load 671 - 673: 78(ivec3) VectorShuffle 672 672 0 1 2 - 674: 17(ivec4) Load 19(ballot) - 675: 78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 673 674 - 676: 71(ptr) AccessChain 31(data) 670 63 - 677: 25(ivec4) Load 676 - 678: 25(ivec4) VectorShuffle 677 675 4 5 6 3 - Store 676 678 - 679: 6(int) Load 8(invocation) - 680: 71(ptr) AccessChain 31(data) 115 63 - 681: 25(ivec4) Load 680 - 682: 17(ivec4) Load 19(ballot) - 683: 25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 681 682 - 684: 71(ptr) AccessChain 31(data) 679 63 - Store 684 683 - 685: 6(int) Load 8(invocation) - 686: 90(ptr) AccessChain 31(data) 34 33 35 - 687: 6(int) Load 686 - 688: 17(ivec4) Load 19(ballot) - 689: 6(int) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 687 688 - 690: 90(ptr) AccessChain 31(data) 685 33 35 - Store 690 689 - 691: 6(int) Load 8(invocation) - 692: 40(ptr) AccessChain 31(data) 63 33 - 693: 17(ivec4) Load 692 - 694: 96(ivec2) VectorShuffle 693 693 0 1 - 695: 17(ivec4) Load 19(ballot) - 696: 96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 694 695 - 697: 40(ptr) AccessChain 31(data) 691 33 - 698: 17(ivec4) Load 697 - 699: 17(ivec4) VectorShuffle 698 696 4 5 2 3 - Store 697 699 - 700: 6(int) Load 8(invocation) - 701: 40(ptr) AccessChain 31(data) 33 33 - 702: 17(ivec4) Load 701 - 703: 103(ivec3) VectorShuffle 702 702 0 1 2 - 704: 17(ivec4) Load 19(ballot) - 705: 103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 703 704 - 706: 40(ptr) AccessChain 31(data) 700 33 - 707: 17(ivec4) Load 706 - 708: 17(ivec4) VectorShuffle 707 705 4 5 6 3 - Store 706 708 - 709: 6(int) Load 8(invocation) - 710: 40(ptr) AccessChain 31(data) 115 33 - 711: 17(ivec4) Load 710 - 712: 17(ivec4) Load 19(ballot) - 713: 17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 711 712 - 714: 40(ptr) AccessChain 31(data) 709 33 - Store 714 713 + 626: 71(ptr) AccessChain 31(data) 63 63 + 627: 25(ivec4) Load 626 + 628: 70(ivec2) VectorShuffle 627 627 0 1 + 629: 17(ivec4) Load 19(ballot) + 630: 70(ivec2) GroupNonUniformSMax 178 PartitionedReduceNV 628 629 + 631: 64(ptr) AccessChain 31(data) 625 63 35 + 632: 24(int) CompositeExtract 630 0 + Store 631 632 + 633: 64(ptr) AccessChain 31(data) 625 63 189 + 634: 24(int) CompositeExtract 630 1 + Store 633 634 + 635: 6(int) Load 8(invocation) + 636: 71(ptr) AccessChain 31(data) 33 63 + 637: 25(ivec4) Load 636 + 638: 78(ivec3) VectorShuffle 637 637 0 1 2 + 639: 17(ivec4) Load 19(ballot) + 640: 78(ivec3) GroupNonUniformSMax 178 PartitionedReduceNV 638 639 + 641: 64(ptr) AccessChain 31(data) 635 63 35 + 642: 24(int) CompositeExtract 640 0 + Store 641 642 + 643: 64(ptr) AccessChain 31(data) 635 63 189 + 644: 24(int) CompositeExtract 640 1 + Store 643 644 + 645: 64(ptr) AccessChain 31(data) 635 63 202 + 646: 24(int) CompositeExtract 640 2 + Store 645 646 + 647: 6(int) Load 8(invocation) + 648: 71(ptr) AccessChain 31(data) 115 63 + 649: 25(ivec4) Load 648 + 650: 17(ivec4) Load 19(ballot) + 651: 25(ivec4) GroupNonUniformSMax 178 PartitionedReduceNV 649 650 + 652: 71(ptr) AccessChain 31(data) 647 63 + Store 652 651 + 653: 6(int) Load 8(invocation) + 654: 90(ptr) AccessChain 31(data) 34 33 35 + 655: 6(int) Load 654 + 656: 17(ivec4) Load 19(ballot) + 657: 6(int) GroupNonUniformUMax 178 PartitionedReduceNV 655 656 + 658: 90(ptr) AccessChain 31(data) 653 33 35 + Store 658 657 + 659: 6(int) Load 8(invocation) + 660: 40(ptr) AccessChain 31(data) 63 33 + 661: 17(ivec4) Load 660 + 662: 96(ivec2) VectorShuffle 661 661 0 1 + 663: 17(ivec4) Load 19(ballot) + 664: 96(ivec2) GroupNonUniformUMax 178 PartitionedReduceNV 662 663 + 665: 90(ptr) AccessChain 31(data) 659 33 35 + 666: 6(int) CompositeExtract 664 0 + Store 665 666 + 667: 90(ptr) AccessChain 31(data) 659 33 189 + 668: 6(int) CompositeExtract 664 1 + Store 667 668 + 669: 6(int) Load 8(invocation) + 670: 40(ptr) AccessChain 31(data) 33 33 + 671: 17(ivec4) Load 670 + 672: 103(ivec3) VectorShuffle 671 671 0 1 2 + 673: 17(ivec4) Load 19(ballot) + 674: 103(ivec3) GroupNonUniformUMax 178 PartitionedReduceNV 672 673 + 675: 90(ptr) AccessChain 31(data) 669 33 35 + 676: 6(int) CompositeExtract 674 0 + Store 675 676 + 677: 90(ptr) AccessChain 31(data) 669 33 189 + 678: 6(int) CompositeExtract 674 1 + Store 677 678 + 679: 90(ptr) AccessChain 31(data) 669 33 202 + 680: 6(int) CompositeExtract 674 2 + Store 679 680 + 681: 6(int) Load 8(invocation) + 682: 40(ptr) AccessChain 31(data) 115 33 + 683: 17(ivec4) Load 682 + 684: 17(ivec4) Load 19(ballot) + 685: 17(ivec4) GroupNonUniformUMax 178 PartitionedReduceNV 683 684 + 686: 40(ptr) AccessChain 31(data) 681 33 + Store 686 685 + 687: 6(int) Load 8(invocation) + 688: 116(ptr) AccessChain 31(data) 34 115 35 + 689:26(float64_t) Load 688 + 690: 17(ivec4) Load 19(ballot) + 691:26(float64_t) GroupNonUniformFMax 178 PartitionedReduceNV 689 690 + 692: 116(ptr) AccessChain 31(data) 687 115 35 + Store 692 691 + 693: 6(int) Load 8(invocation) + 694: 123(ptr) AccessChain 31(data) 63 115 + 695: 27(f64vec4) Load 694 + 696:122(f64vec2) VectorShuffle 695 695 0 1 + 697: 17(ivec4) Load 19(ballot) + 698:122(f64vec2) GroupNonUniformFMax 178 PartitionedReduceNV 696 697 + 699: 116(ptr) AccessChain 31(data) 693 115 35 + 700:26(float64_t) CompositeExtract 698 0 + Store 699 700 + 701: 116(ptr) AccessChain 31(data) 693 115 189 + 702:26(float64_t) CompositeExtract 698 1 + Store 701 702 + 703: 6(int) Load 8(invocation) + 704: 123(ptr) AccessChain 31(data) 33 115 + 705: 27(f64vec4) Load 704 + 706:130(f64vec3) VectorShuffle 705 705 0 1 2 + 707: 17(ivec4) Load 19(ballot) + 708:130(f64vec3) GroupNonUniformFMax 178 PartitionedReduceNV 706 707 + 709: 116(ptr) AccessChain 31(data) 703 115 35 + 710:26(float64_t) CompositeExtract 708 0 + Store 709 710 + 711: 116(ptr) AccessChain 31(data) 703 115 189 + 712:26(float64_t) CompositeExtract 708 1 + Store 711 712 + 713: 116(ptr) AccessChain 31(data) 703 115 202 + 714:26(float64_t) CompositeExtract 708 2 + Store 713 714 715: 6(int) Load 8(invocation) - 716: 64(ptr) AccessChain 31(data) 34 63 35 - 717: 24(int) Load 716 - 718: 144(bool) SLessThan 717 34 - 719: 17(ivec4) Load 19(ballot) - 720: 144(bool) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 718 719 - 721: 24(int) Select 720 63 34 - 722: 64(ptr) AccessChain 31(data) 715 63 35 - Store 722 721 - 723: 6(int) Load 8(invocation) - 724: 71(ptr) AccessChain 31(data) 63 63 - 725: 25(ivec4) Load 724 - 726: 70(ivec2) VectorShuffle 725 725 0 1 - 728: 152(bvec2) SLessThan 726 727 - 729: 17(ivec4) Load 19(ballot) - 730: 152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 728 729 - 732: 70(ivec2) Select 730 731 727 - 733: 71(ptr) AccessChain 31(data) 723 63 - 734: 25(ivec4) Load 733 - 735: 25(ivec4) VectorShuffle 734 732 4 5 2 3 - Store 733 735 - 736: 6(int) Load 8(invocation) - 737: 71(ptr) AccessChain 31(data) 63 63 - 738: 25(ivec4) Load 737 - 739: 78(ivec3) VectorShuffle 738 738 0 1 2 - 741: 161(bvec3) SLessThan 739 740 - 742: 17(ivec4) Load 19(ballot) - 743: 161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 741 742 - 745: 78(ivec3) Select 743 744 740 - 746: 71(ptr) AccessChain 31(data) 736 63 - 747: 25(ivec4) Load 746 - 748: 25(ivec4) VectorShuffle 747 745 4 5 6 3 - Store 746 748 + 716: 123(ptr) AccessChain 31(data) 115 115 + 717: 27(f64vec4) Load 716 + 718: 17(ivec4) Load 19(ballot) + 719: 27(f64vec4) GroupNonUniformFMax 178 PartitionedReduceNV 717 718 + 720: 123(ptr) AccessChain 31(data) 715 115 + Store 720 719 + 721: 6(int) Load 8(invocation) + 722: 64(ptr) AccessChain 31(data) 34 63 35 + 723: 24(int) Load 722 + 724: 17(ivec4) Load 19(ballot) + 725: 24(int) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 723 724 + 726: 64(ptr) AccessChain 31(data) 721 63 35 + Store 726 725 + 727: 6(int) Load 8(invocation) + 728: 71(ptr) AccessChain 31(data) 63 63 + 729: 25(ivec4) Load 728 + 730: 70(ivec2) VectorShuffle 729 729 0 1 + 731: 17(ivec4) Load 19(ballot) + 732: 70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 730 731 + 733: 64(ptr) AccessChain 31(data) 727 63 35 + 734: 24(int) CompositeExtract 732 0 + Store 733 734 + 735: 64(ptr) AccessChain 31(data) 727 63 189 + 736: 24(int) CompositeExtract 732 1 + Store 735 736 + 737: 6(int) Load 8(invocation) + 738: 71(ptr) AccessChain 31(data) 33 63 + 739: 25(ivec4) Load 738 + 740: 78(ivec3) VectorShuffle 739 739 0 1 2 + 741: 17(ivec4) Load 19(ballot) + 742: 78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 740 741 + 743: 64(ptr) AccessChain 31(data) 737 63 35 + 744: 24(int) CompositeExtract 742 0 + Store 743 744 + 745: 64(ptr) AccessChain 31(data) 737 63 189 + 746: 24(int) CompositeExtract 742 1 + Store 745 746 + 747: 64(ptr) AccessChain 31(data) 737 63 202 + 748: 24(int) CompositeExtract 742 2 + Store 747 748 749: 6(int) Load 8(invocation) - 750: 71(ptr) AccessChain 31(data) 63 63 + 750: 71(ptr) AccessChain 31(data) 115 63 751: 25(ivec4) Load 750 - 753: 169(bvec4) SLessThan 751 752 - 754: 17(ivec4) Load 19(ballot) - 755: 169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 753 754 - 757: 25(ivec4) Select 755 756 752 - 758: 71(ptr) AccessChain 31(data) 749 63 - Store 758 757 - 759: 6(int) Load 8(invocation) - 760: 64(ptr) AccessChain 31(data) 34 63 35 - 761: 24(int) Load 760 - 762: 17(ivec4) Load 19(ballot) - 763: 24(int) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 761 762 - 764: 64(ptr) AccessChain 31(data) 759 63 35 - Store 764 763 - 765: 6(int) Load 8(invocation) - 766: 71(ptr) AccessChain 31(data) 63 63 - 767: 25(ivec4) Load 766 - 768: 70(ivec2) VectorShuffle 767 767 0 1 - 769: 17(ivec4) Load 19(ballot) - 770: 70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 768 769 - 771: 71(ptr) AccessChain 31(data) 765 63 - 772: 25(ivec4) Load 771 - 773: 25(ivec4) VectorShuffle 772 770 4 5 2 3 - Store 771 773 - 774: 6(int) Load 8(invocation) - 775: 71(ptr) AccessChain 31(data) 33 63 - 776: 25(ivec4) Load 775 - 777: 78(ivec3) VectorShuffle 776 776 0 1 2 - 778: 17(ivec4) Load 19(ballot) - 779: 78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 777 778 - 780: 71(ptr) AccessChain 31(data) 774 63 - 781: 25(ivec4) Load 780 - 782: 25(ivec4) VectorShuffle 781 779 4 5 6 3 - Store 780 782 + 752: 17(ivec4) Load 19(ballot) + 753: 25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 751 752 + 754: 71(ptr) AccessChain 31(data) 749 63 + Store 754 753 + 755: 6(int) Load 8(invocation) + 756: 90(ptr) AccessChain 31(data) 34 33 35 + 757: 6(int) Load 756 + 758: 17(ivec4) Load 19(ballot) + 759: 6(int) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 757 758 + 760: 90(ptr) AccessChain 31(data) 755 33 35 + Store 760 759 + 761: 6(int) Load 8(invocation) + 762: 40(ptr) AccessChain 31(data) 63 33 + 763: 17(ivec4) Load 762 + 764: 96(ivec2) VectorShuffle 763 763 0 1 + 765: 17(ivec4) Load 19(ballot) + 766: 96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 764 765 + 767: 90(ptr) AccessChain 31(data) 761 33 35 + 768: 6(int) CompositeExtract 766 0 + Store 767 768 + 769: 90(ptr) AccessChain 31(data) 761 33 189 + 770: 6(int) CompositeExtract 766 1 + Store 769 770 + 771: 6(int) Load 8(invocation) + 772: 40(ptr) AccessChain 31(data) 33 33 + 773: 17(ivec4) Load 772 + 774: 103(ivec3) VectorShuffle 773 773 0 1 2 + 775: 17(ivec4) Load 19(ballot) + 776: 103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 774 775 + 777: 90(ptr) AccessChain 31(data) 771 33 35 + 778: 6(int) CompositeExtract 776 0 + Store 777 778 + 779: 90(ptr) AccessChain 31(data) 771 33 189 + 780: 6(int) CompositeExtract 776 1 + Store 779 780 + 781: 90(ptr) AccessChain 31(data) 771 33 202 + 782: 6(int) CompositeExtract 776 2 + Store 781 782 783: 6(int) Load 8(invocation) - 784: 71(ptr) AccessChain 31(data) 115 63 - 785: 25(ivec4) Load 784 + 784: 40(ptr) AccessChain 31(data) 115 33 + 785: 17(ivec4) Load 784 786: 17(ivec4) Load 19(ballot) - 787: 25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 785 786 - 788: 71(ptr) AccessChain 31(data) 783 63 + 787: 17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedReduceNV 785 786 + 788: 40(ptr) AccessChain 31(data) 783 33 Store 788 787 789: 6(int) Load 8(invocation) - 790: 90(ptr) AccessChain 31(data) 34 33 35 - 791: 6(int) Load 790 - 792: 17(ivec4) Load 19(ballot) - 793: 6(int) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 791 792 - 794: 90(ptr) AccessChain 31(data) 789 33 35 - Store 794 793 - 795: 6(int) Load 8(invocation) - 796: 40(ptr) AccessChain 31(data) 63 33 - 797: 17(ivec4) Load 796 - 798: 96(ivec2) VectorShuffle 797 797 0 1 - 799: 17(ivec4) Load 19(ballot) - 800: 96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 798 799 - 801: 40(ptr) AccessChain 31(data) 795 33 - 802: 17(ivec4) Load 801 - 803: 17(ivec4) VectorShuffle 802 800 4 5 2 3 - Store 801 803 - 804: 6(int) Load 8(invocation) - 805: 40(ptr) AccessChain 31(data) 33 33 - 806: 17(ivec4) Load 805 - 807: 103(ivec3) VectorShuffle 806 806 0 1 2 - 808: 17(ivec4) Load 19(ballot) - 809: 103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 807 808 - 810: 40(ptr) AccessChain 31(data) 804 33 - 811: 17(ivec4) Load 810 - 812: 17(ivec4) VectorShuffle 811 809 4 5 6 3 - Store 810 812 - 813: 6(int) Load 8(invocation) - 814: 40(ptr) AccessChain 31(data) 115 33 - 815: 17(ivec4) Load 814 - 816: 17(ivec4) Load 19(ballot) - 817: 17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 815 816 - 818: 40(ptr) AccessChain 31(data) 813 33 - Store 818 817 - 819: 6(int) Load 8(invocation) - 820: 64(ptr) AccessChain 31(data) 34 63 35 - 821: 24(int) Load 820 - 822: 144(bool) SLessThan 821 34 - 823: 17(ivec4) Load 19(ballot) - 824: 144(bool) GroupNonUniformLogicalOr 178 PartitionedReduceNV 822 823 - 825: 24(int) Select 824 63 34 - 826: 64(ptr) AccessChain 31(data) 819 63 35 - Store 826 825 + 790: 64(ptr) AccessChain 31(data) 34 63 35 + 791: 24(int) Load 790 + 792: 144(bool) SLessThan 791 34 + 793: 17(ivec4) Load 19(ballot) + 794: 144(bool) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 792 793 + 795: 24(int) Select 794 63 34 + 796: 64(ptr) AccessChain 31(data) 789 63 35 + Store 796 795 + 797: 6(int) Load 8(invocation) + 798: 71(ptr) AccessChain 31(data) 63 63 + 799: 25(ivec4) Load 798 + 800: 70(ivec2) VectorShuffle 799 799 0 1 + 802: 152(bvec2) SLessThan 800 801 + 803: 17(ivec4) Load 19(ballot) + 804: 152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 802 803 + 806: 70(ivec2) Select 804 805 801 + 807: 64(ptr) AccessChain 31(data) 797 63 35 + 808: 24(int) CompositeExtract 806 0 + Store 807 808 + 809: 64(ptr) AccessChain 31(data) 797 63 189 + 810: 24(int) CompositeExtract 806 1 + Store 809 810 + 811: 6(int) Load 8(invocation) + 812: 71(ptr) AccessChain 31(data) 63 63 + 813: 25(ivec4) Load 812 + 814: 78(ivec3) VectorShuffle 813 813 0 1 2 + 816: 161(bvec3) SLessThan 814 815 + 817: 17(ivec4) Load 19(ballot) + 818: 161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 816 817 + 820: 78(ivec3) Select 818 819 815 + 821: 64(ptr) AccessChain 31(data) 811 63 35 + 822: 24(int) CompositeExtract 820 0 + Store 821 822 + 823: 64(ptr) AccessChain 31(data) 811 63 189 + 824: 24(int) CompositeExtract 820 1 + Store 823 824 + 825: 64(ptr) AccessChain 31(data) 811 63 202 + 826: 24(int) CompositeExtract 820 2 + Store 825 826 827: 6(int) Load 8(invocation) 828: 71(ptr) AccessChain 31(data) 63 63 829: 25(ivec4) Load 828 - 830: 70(ivec2) VectorShuffle 829 829 0 1 - 831: 152(bvec2) SLessThan 830 727 + 831: 169(bvec4) SLessThan 829 830 832: 17(ivec4) Load 19(ballot) - 833: 152(bvec2) GroupNonUniformLogicalOr 178 PartitionedReduceNV 831 832 - 834: 70(ivec2) Select 833 731 727 - 835: 71(ptr) AccessChain 31(data) 827 63 - 836: 25(ivec4) Load 835 - 837: 25(ivec4) VectorShuffle 836 834 4 5 2 3 - Store 835 837 - 838: 6(int) Load 8(invocation) - 839: 71(ptr) AccessChain 31(data) 63 63 - 840: 25(ivec4) Load 839 - 841: 78(ivec3) VectorShuffle 840 840 0 1 2 - 842: 161(bvec3) SLessThan 841 740 - 843: 17(ivec4) Load 19(ballot) - 844: 161(bvec3) GroupNonUniformLogicalOr 178 PartitionedReduceNV 842 843 - 845: 78(ivec3) Select 844 744 740 - 846: 71(ptr) AccessChain 31(data) 838 63 - 847: 25(ivec4) Load 846 - 848: 25(ivec4) VectorShuffle 847 845 4 5 6 3 - Store 846 848 - 849: 6(int) Load 8(invocation) - 850: 71(ptr) AccessChain 31(data) 63 63 - 851: 25(ivec4) Load 850 - 852: 169(bvec4) SLessThan 851 752 - 853: 17(ivec4) Load 19(ballot) - 854: 169(bvec4) GroupNonUniformLogicalOr 178 PartitionedReduceNV 852 853 - 855: 25(ivec4) Select 854 756 752 - 856: 71(ptr) AccessChain 31(data) 849 63 - Store 856 855 - 857: 6(int) Load 8(invocation) - 858: 64(ptr) AccessChain 31(data) 34 63 35 - 859: 24(int) Load 858 - 860: 17(ivec4) Load 19(ballot) - 861: 24(int) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 859 860 - 862: 64(ptr) AccessChain 31(data) 857 63 35 - Store 862 861 - 863: 6(int) Load 8(invocation) - 864: 71(ptr) AccessChain 31(data) 63 63 - 865: 25(ivec4) Load 864 - 866: 70(ivec2) VectorShuffle 865 865 0 1 - 867: 17(ivec4) Load 19(ballot) - 868: 70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 866 867 - 869: 71(ptr) AccessChain 31(data) 863 63 - 870: 25(ivec4) Load 869 - 871: 25(ivec4) VectorShuffle 870 868 4 5 2 3 - Store 869 871 - 872: 6(int) Load 8(invocation) - 873: 71(ptr) AccessChain 31(data) 33 63 - 874: 25(ivec4) Load 873 - 875: 78(ivec3) VectorShuffle 874 874 0 1 2 - 876: 17(ivec4) Load 19(ballot) - 877: 78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 875 876 - 878: 71(ptr) AccessChain 31(data) 872 63 - 879: 25(ivec4) Load 878 - 880: 25(ivec4) VectorShuffle 879 877 4 5 6 3 - Store 878 880 - 881: 6(int) Load 8(invocation) - 882: 71(ptr) AccessChain 31(data) 115 63 - 883: 25(ivec4) Load 882 - 884: 17(ivec4) Load 19(ballot) - 885: 25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 883 884 - 886: 71(ptr) AccessChain 31(data) 881 63 - Store 886 885 + 833: 169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedReduceNV 831 832 + 835: 25(ivec4) Select 833 834 830 + 836: 71(ptr) AccessChain 31(data) 827 63 + Store 836 835 + 837: 6(int) Load 8(invocation) + 838: 64(ptr) AccessChain 31(data) 34 63 35 + 839: 24(int) Load 838 + 840: 17(ivec4) Load 19(ballot) + 841: 24(int) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 839 840 + 842: 64(ptr) AccessChain 31(data) 837 63 35 + Store 842 841 + 843: 6(int) Load 8(invocation) + 844: 71(ptr) AccessChain 31(data) 63 63 + 845: 25(ivec4) Load 844 + 846: 70(ivec2) VectorShuffle 845 845 0 1 + 847: 17(ivec4) Load 19(ballot) + 848: 70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 846 847 + 849: 64(ptr) AccessChain 31(data) 843 63 35 + 850: 24(int) CompositeExtract 848 0 + Store 849 850 + 851: 64(ptr) AccessChain 31(data) 843 63 189 + 852: 24(int) CompositeExtract 848 1 + Store 851 852 + 853: 6(int) Load 8(invocation) + 854: 71(ptr) AccessChain 31(data) 33 63 + 855: 25(ivec4) Load 854 + 856: 78(ivec3) VectorShuffle 855 855 0 1 2 + 857: 17(ivec4) Load 19(ballot) + 858: 78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 856 857 + 859: 64(ptr) AccessChain 31(data) 853 63 35 + 860: 24(int) CompositeExtract 858 0 + Store 859 860 + 861: 64(ptr) AccessChain 31(data) 853 63 189 + 862: 24(int) CompositeExtract 858 1 + Store 861 862 + 863: 64(ptr) AccessChain 31(data) 853 63 202 + 864: 24(int) CompositeExtract 858 2 + Store 863 864 + 865: 6(int) Load 8(invocation) + 866: 71(ptr) AccessChain 31(data) 115 63 + 867: 25(ivec4) Load 866 + 868: 17(ivec4) Load 19(ballot) + 869: 25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 867 868 + 870: 71(ptr) AccessChain 31(data) 865 63 + Store 870 869 + 871: 6(int) Load 8(invocation) + 872: 90(ptr) AccessChain 31(data) 34 33 35 + 873: 6(int) Load 872 + 874: 17(ivec4) Load 19(ballot) + 875: 6(int) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 873 874 + 876: 90(ptr) AccessChain 31(data) 871 33 35 + Store 876 875 + 877: 6(int) Load 8(invocation) + 878: 40(ptr) AccessChain 31(data) 63 33 + 879: 17(ivec4) Load 878 + 880: 96(ivec2) VectorShuffle 879 879 0 1 + 881: 17(ivec4) Load 19(ballot) + 882: 96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 880 881 + 883: 90(ptr) AccessChain 31(data) 877 33 35 + 884: 6(int) CompositeExtract 882 0 + Store 883 884 + 885: 90(ptr) AccessChain 31(data) 877 33 189 + 886: 6(int) CompositeExtract 882 1 + Store 885 886 887: 6(int) Load 8(invocation) - 888: 90(ptr) AccessChain 31(data) 34 33 35 - 889: 6(int) Load 888 - 890: 17(ivec4) Load 19(ballot) - 891: 6(int) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 889 890 - 892: 90(ptr) AccessChain 31(data) 887 33 35 - Store 892 891 - 893: 6(int) Load 8(invocation) - 894: 40(ptr) AccessChain 31(data) 63 33 - 895: 17(ivec4) Load 894 - 896: 96(ivec2) VectorShuffle 895 895 0 1 - 897: 17(ivec4) Load 19(ballot) - 898: 96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 896 897 - 899: 40(ptr) AccessChain 31(data) 893 33 - 900: 17(ivec4) Load 899 - 901: 17(ivec4) VectorShuffle 900 898 4 5 2 3 - Store 899 901 - 902: 6(int) Load 8(invocation) - 903: 40(ptr) AccessChain 31(data) 33 33 - 904: 17(ivec4) Load 903 - 905: 103(ivec3) VectorShuffle 904 904 0 1 2 - 906: 17(ivec4) Load 19(ballot) - 907: 103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 905 906 - 908: 40(ptr) AccessChain 31(data) 902 33 - 909: 17(ivec4) Load 908 - 910: 17(ivec4) VectorShuffle 909 907 4 5 6 3 - Store 908 910 - 911: 6(int) Load 8(invocation) - 912: 40(ptr) AccessChain 31(data) 115 33 - 913: 17(ivec4) Load 912 - 914: 17(ivec4) Load 19(ballot) - 915: 17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 913 914 - 916: 40(ptr) AccessChain 31(data) 911 33 - Store 916 915 - 917: 6(int) Load 8(invocation) - 918: 64(ptr) AccessChain 31(data) 34 63 35 - 919: 24(int) Load 918 - 920: 144(bool) SLessThan 919 34 - 921: 17(ivec4) Load 19(ballot) - 922: 144(bool) GroupNonUniformLogicalXor 178 PartitionedReduceNV 920 921 - 923: 24(int) Select 922 63 34 - 924: 64(ptr) AccessChain 31(data) 917 63 35 - Store 924 923 + 888: 40(ptr) AccessChain 31(data) 33 33 + 889: 17(ivec4) Load 888 + 890: 103(ivec3) VectorShuffle 889 889 0 1 2 + 891: 17(ivec4) Load 19(ballot) + 892: 103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 890 891 + 893: 90(ptr) AccessChain 31(data) 887 33 35 + 894: 6(int) CompositeExtract 892 0 + Store 893 894 + 895: 90(ptr) AccessChain 31(data) 887 33 189 + 896: 6(int) CompositeExtract 892 1 + Store 895 896 + 897: 90(ptr) AccessChain 31(data) 887 33 202 + 898: 6(int) CompositeExtract 892 2 + Store 897 898 + 899: 6(int) Load 8(invocation) + 900: 40(ptr) AccessChain 31(data) 115 33 + 901: 17(ivec4) Load 900 + 902: 17(ivec4) Load 19(ballot) + 903: 17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedReduceNV 901 902 + 904: 40(ptr) AccessChain 31(data) 899 33 + Store 904 903 + 905: 6(int) Load 8(invocation) + 906: 64(ptr) AccessChain 31(data) 34 63 35 + 907: 24(int) Load 906 + 908: 144(bool) SLessThan 907 34 + 909: 17(ivec4) Load 19(ballot) + 910: 144(bool) GroupNonUniformLogicalOr 178 PartitionedReduceNV 908 909 + 911: 24(int) Select 910 63 34 + 912: 64(ptr) AccessChain 31(data) 905 63 35 + Store 912 911 + 913: 6(int) Load 8(invocation) + 914: 71(ptr) AccessChain 31(data) 63 63 + 915: 25(ivec4) Load 914 + 916: 70(ivec2) VectorShuffle 915 915 0 1 + 917: 152(bvec2) SLessThan 916 801 + 918: 17(ivec4) Load 19(ballot) + 919: 152(bvec2) GroupNonUniformLogicalOr 178 PartitionedReduceNV 917 918 + 920: 70(ivec2) Select 919 805 801 + 921: 64(ptr) AccessChain 31(data) 913 63 35 + 922: 24(int) CompositeExtract 920 0 + Store 921 922 + 923: 64(ptr) AccessChain 31(data) 913 63 189 + 924: 24(int) CompositeExtract 920 1 + Store 923 924 925: 6(int) Load 8(invocation) 926: 71(ptr) AccessChain 31(data) 63 63 927: 25(ivec4) Load 926 - 928: 70(ivec2) VectorShuffle 927 927 0 1 - 929: 152(bvec2) SLessThan 928 727 + 928: 78(ivec3) VectorShuffle 927 927 0 1 2 + 929: 161(bvec3) SLessThan 928 815 930: 17(ivec4) Load 19(ballot) - 931: 152(bvec2) GroupNonUniformLogicalXor 178 PartitionedReduceNV 929 930 - 932: 70(ivec2) Select 931 731 727 - 933: 71(ptr) AccessChain 31(data) 925 63 - 934: 25(ivec4) Load 933 - 935: 25(ivec4) VectorShuffle 934 932 4 5 2 3 - Store 933 935 - 936: 6(int) Load 8(invocation) - 937: 71(ptr) AccessChain 31(data) 63 63 - 938: 25(ivec4) Load 937 - 939: 78(ivec3) VectorShuffle 938 938 0 1 2 - 940: 161(bvec3) SLessThan 939 740 - 941: 17(ivec4) Load 19(ballot) - 942: 161(bvec3) GroupNonUniformLogicalXor 178 PartitionedReduceNV 940 941 - 943: 78(ivec3) Select 942 744 740 - 944: 71(ptr) AccessChain 31(data) 936 63 - 945: 25(ivec4) Load 944 - 946: 25(ivec4) VectorShuffle 945 943 4 5 6 3 - Store 944 946 + 931: 161(bvec3) GroupNonUniformLogicalOr 178 PartitionedReduceNV 929 930 + 932: 78(ivec3) Select 931 819 815 + 933: 64(ptr) AccessChain 31(data) 925 63 35 + 934: 24(int) CompositeExtract 932 0 + Store 933 934 + 935: 64(ptr) AccessChain 31(data) 925 63 189 + 936: 24(int) CompositeExtract 932 1 + Store 935 936 + 937: 64(ptr) AccessChain 31(data) 925 63 202 + 938: 24(int) CompositeExtract 932 2 + Store 937 938 + 939: 6(int) Load 8(invocation) + 940: 71(ptr) AccessChain 31(data) 63 63 + 941: 25(ivec4) Load 940 + 942: 169(bvec4) SLessThan 941 830 + 943: 17(ivec4) Load 19(ballot) + 944: 169(bvec4) GroupNonUniformLogicalOr 178 PartitionedReduceNV 942 943 + 945: 25(ivec4) Select 944 834 830 + 946: 71(ptr) AccessChain 31(data) 939 63 + Store 946 945 947: 6(int) Load 8(invocation) - 948: 71(ptr) AccessChain 31(data) 63 63 - 949: 25(ivec4) Load 948 - 950: 169(bvec4) SLessThan 949 752 - 951: 17(ivec4) Load 19(ballot) - 952: 169(bvec4) GroupNonUniformLogicalXor 178 PartitionedReduceNV 950 951 - 953: 25(ivec4) Select 952 756 752 - 954: 71(ptr) AccessChain 31(data) 947 63 - Store 954 953 - 955: 6(int) Load 8(invocation) - 956: 36(ptr) AccessChain 31(data) 34 34 35 - 957: 22(float) Load 956 - 958: 17(ivec4) Load 19(ballot) - 959: 22(float) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 957 958 - 960: 36(ptr) AccessChain 31(data) 955 34 35 - Store 960 959 - 961: 6(int) Load 8(invocation) - 962: 44(ptr) AccessChain 31(data) 63 34 - 963: 23(fvec4) Load 962 - 964: 43(fvec2) VectorShuffle 963 963 0 1 - 965: 17(ivec4) Load 19(ballot) - 966: 43(fvec2) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 964 965 - 967: 44(ptr) AccessChain 31(data) 961 34 - 968: 23(fvec4) Load 967 - 969: 23(fvec4) VectorShuffle 968 966 4 5 2 3 - Store 967 969 - 970: 6(int) Load 8(invocation) - 971: 44(ptr) AccessChain 31(data) 33 34 - 972: 23(fvec4) Load 971 - 973: 51(fvec3) VectorShuffle 972 972 0 1 2 - 974: 17(ivec4) Load 19(ballot) - 975: 51(fvec3) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 973 974 - 976: 44(ptr) AccessChain 31(data) 970 34 - 977: 23(fvec4) Load 976 - 978: 23(fvec4) VectorShuffle 977 975 4 5 6 3 - Store 976 978 - 979: 6(int) Load 8(invocation) - 980: 44(ptr) AccessChain 31(data) 115 34 - 981: 23(fvec4) Load 980 - 982: 17(ivec4) Load 19(ballot) - 983: 23(fvec4) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 981 982 - 984: 44(ptr) AccessChain 31(data) 979 34 - Store 984 983 - 985: 6(int) Load 8(invocation) - 986: 64(ptr) AccessChain 31(data) 34 63 35 - 987: 24(int) Load 986 - 988: 17(ivec4) Load 19(ballot) - 989: 24(int) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 987 988 - 990: 64(ptr) AccessChain 31(data) 985 63 35 - Store 990 989 - 991: 6(int) Load 8(invocation) - 992: 71(ptr) AccessChain 31(data) 63 63 - 993: 25(ivec4) Load 992 - 994: 70(ivec2) VectorShuffle 993 993 0 1 - 995: 17(ivec4) Load 19(ballot) - 996: 70(ivec2) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 994 995 - 997: 71(ptr) AccessChain 31(data) 991 63 - 998: 25(ivec4) Load 997 - 999: 25(ivec4) VectorShuffle 998 996 4 5 2 3 - Store 997 999 - 1000: 6(int) Load 8(invocation) - 1001: 71(ptr) AccessChain 31(data) 33 63 - 1002: 25(ivec4) Load 1001 - 1003: 78(ivec3) VectorShuffle 1002 1002 0 1 2 - 1004: 17(ivec4) Load 19(ballot) - 1005: 78(ivec3) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1003 1004 - 1006: 71(ptr) AccessChain 31(data) 1000 63 - 1007: 25(ivec4) Load 1006 - 1008: 25(ivec4) VectorShuffle 1007 1005 4 5 6 3 - Store 1006 1008 + 948: 64(ptr) AccessChain 31(data) 34 63 35 + 949: 24(int) Load 948 + 950: 17(ivec4) Load 19(ballot) + 951: 24(int) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 949 950 + 952: 64(ptr) AccessChain 31(data) 947 63 35 + Store 952 951 + 953: 6(int) Load 8(invocation) + 954: 71(ptr) AccessChain 31(data) 63 63 + 955: 25(ivec4) Load 954 + 956: 70(ivec2) VectorShuffle 955 955 0 1 + 957: 17(ivec4) Load 19(ballot) + 958: 70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 956 957 + 959: 64(ptr) AccessChain 31(data) 953 63 35 + 960: 24(int) CompositeExtract 958 0 + Store 959 960 + 961: 64(ptr) AccessChain 31(data) 953 63 189 + 962: 24(int) CompositeExtract 958 1 + Store 961 962 + 963: 6(int) Load 8(invocation) + 964: 71(ptr) AccessChain 31(data) 33 63 + 965: 25(ivec4) Load 964 + 966: 78(ivec3) VectorShuffle 965 965 0 1 2 + 967: 17(ivec4) Load 19(ballot) + 968: 78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 966 967 + 969: 64(ptr) AccessChain 31(data) 963 63 35 + 970: 24(int) CompositeExtract 968 0 + Store 969 970 + 971: 64(ptr) AccessChain 31(data) 963 63 189 + 972: 24(int) CompositeExtract 968 1 + Store 971 972 + 973: 64(ptr) AccessChain 31(data) 963 63 202 + 974: 24(int) CompositeExtract 968 2 + Store 973 974 + 975: 6(int) Load 8(invocation) + 976: 71(ptr) AccessChain 31(data) 115 63 + 977: 25(ivec4) Load 976 + 978: 17(ivec4) Load 19(ballot) + 979: 25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 977 978 + 980: 71(ptr) AccessChain 31(data) 975 63 + Store 980 979 + 981: 6(int) Load 8(invocation) + 982: 90(ptr) AccessChain 31(data) 34 33 35 + 983: 6(int) Load 982 + 984: 17(ivec4) Load 19(ballot) + 985: 6(int) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 983 984 + 986: 90(ptr) AccessChain 31(data) 981 33 35 + Store 986 985 + 987: 6(int) Load 8(invocation) + 988: 40(ptr) AccessChain 31(data) 63 33 + 989: 17(ivec4) Load 988 + 990: 96(ivec2) VectorShuffle 989 989 0 1 + 991: 17(ivec4) Load 19(ballot) + 992: 96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 990 991 + 993: 90(ptr) AccessChain 31(data) 987 33 35 + 994: 6(int) CompositeExtract 992 0 + Store 993 994 + 995: 90(ptr) AccessChain 31(data) 987 33 189 + 996: 6(int) CompositeExtract 992 1 + Store 995 996 + 997: 6(int) Load 8(invocation) + 998: 40(ptr) AccessChain 31(data) 33 33 + 999: 17(ivec4) Load 998 + 1000: 103(ivec3) VectorShuffle 999 999 0 1 2 + 1001: 17(ivec4) Load 19(ballot) + 1002: 103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 1000 1001 + 1003: 90(ptr) AccessChain 31(data) 997 33 35 + 1004: 6(int) CompositeExtract 1002 0 + Store 1003 1004 + 1005: 90(ptr) AccessChain 31(data) 997 33 189 + 1006: 6(int) CompositeExtract 1002 1 + Store 1005 1006 + 1007: 90(ptr) AccessChain 31(data) 997 33 202 + 1008: 6(int) CompositeExtract 1002 2 + Store 1007 1008 1009: 6(int) Load 8(invocation) - 1010: 71(ptr) AccessChain 31(data) 115 63 - 1011: 25(ivec4) Load 1010 + 1010: 40(ptr) AccessChain 31(data) 115 33 + 1011: 17(ivec4) Load 1010 1012: 17(ivec4) Load 19(ballot) - 1013: 25(ivec4) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1011 1012 - 1014: 71(ptr) AccessChain 31(data) 1009 63 + 1013: 17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedReduceNV 1011 1012 + 1014: 40(ptr) AccessChain 31(data) 1009 33 Store 1014 1013 1015: 6(int) Load 8(invocation) - 1016: 90(ptr) AccessChain 31(data) 34 33 35 - 1017: 6(int) Load 1016 - 1018: 17(ivec4) Load 19(ballot) - 1019: 6(int) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1017 1018 - 1020: 90(ptr) AccessChain 31(data) 1015 33 35 - Store 1020 1019 - 1021: 6(int) Load 8(invocation) - 1022: 40(ptr) AccessChain 31(data) 63 33 - 1023: 17(ivec4) Load 1022 - 1024: 96(ivec2) VectorShuffle 1023 1023 0 1 - 1025: 17(ivec4) Load 19(ballot) - 1026: 96(ivec2) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1024 1025 - 1027: 40(ptr) AccessChain 31(data) 1021 33 - 1028: 17(ivec4) Load 1027 - 1029: 17(ivec4) VectorShuffle 1028 1026 4 5 2 3 - Store 1027 1029 - 1030: 6(int) Load 8(invocation) - 1031: 40(ptr) AccessChain 31(data) 33 33 - 1032: 17(ivec4) Load 1031 - 1033: 103(ivec3) VectorShuffle 1032 1032 0 1 2 - 1034: 17(ivec4) Load 19(ballot) - 1035: 103(ivec3) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1033 1034 - 1036: 40(ptr) AccessChain 31(data) 1030 33 - 1037: 17(ivec4) Load 1036 - 1038: 17(ivec4) VectorShuffle 1037 1035 4 5 6 3 - Store 1036 1038 - 1039: 6(int) Load 8(invocation) - 1040: 40(ptr) AccessChain 31(data) 115 33 - 1041: 17(ivec4) Load 1040 - 1042: 17(ivec4) Load 19(ballot) - 1043: 17(ivec4) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1041 1042 - 1044: 40(ptr) AccessChain 31(data) 1039 33 - Store 1044 1043 - 1045: 6(int) Load 8(invocation) - 1046: 116(ptr) AccessChain 31(data) 34 115 35 - 1047:26(float64_t) Load 1046 - 1048: 17(ivec4) Load 19(ballot) - 1049:26(float64_t) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1047 1048 - 1050: 116(ptr) AccessChain 31(data) 1045 115 35 - Store 1050 1049 - 1051: 6(int) Load 8(invocation) - 1052: 123(ptr) AccessChain 31(data) 63 115 - 1053: 27(f64vec4) Load 1052 - 1054:122(f64vec2) VectorShuffle 1053 1053 0 1 - 1055: 17(ivec4) Load 19(ballot) - 1056:122(f64vec2) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1054 1055 - 1057: 123(ptr) AccessChain 31(data) 1051 115 - 1058: 27(f64vec4) Load 1057 - 1059: 27(f64vec4) VectorShuffle 1058 1056 4 5 2 3 - Store 1057 1059 - 1060: 6(int) Load 8(invocation) - 1061: 123(ptr) AccessChain 31(data) 33 115 - 1062: 27(f64vec4) Load 1061 - 1063:130(f64vec3) VectorShuffle 1062 1062 0 1 2 - 1064: 17(ivec4) Load 19(ballot) - 1065:130(f64vec3) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1063 1064 - 1066: 123(ptr) AccessChain 31(data) 1060 115 - 1067: 27(f64vec4) Load 1066 - 1068: 27(f64vec4) VectorShuffle 1067 1065 4 5 6 3 - Store 1066 1068 - 1069: 6(int) Load 8(invocation) - 1070: 123(ptr) AccessChain 31(data) 115 115 - 1071: 27(f64vec4) Load 1070 - 1072: 17(ivec4) Load 19(ballot) - 1073: 27(f64vec4) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1071 1072 - 1074: 123(ptr) AccessChain 31(data) 1069 115 - Store 1074 1073 - 1075: 6(int) Load 8(invocation) - 1076: 36(ptr) AccessChain 31(data) 34 34 35 - 1077: 22(float) Load 1076 - 1078: 17(ivec4) Load 19(ballot) - 1079: 22(float) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1077 1078 - 1080: 36(ptr) AccessChain 31(data) 1075 34 35 - Store 1080 1079 - 1081: 6(int) Load 8(invocation) - 1082: 44(ptr) AccessChain 31(data) 63 34 - 1083: 23(fvec4) Load 1082 - 1084: 43(fvec2) VectorShuffle 1083 1083 0 1 - 1085: 17(ivec4) Load 19(ballot) - 1086: 43(fvec2) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1084 1085 - 1087: 44(ptr) AccessChain 31(data) 1081 34 - 1088: 23(fvec4) Load 1087 - 1089: 23(fvec4) VectorShuffle 1088 1086 4 5 2 3 - Store 1087 1089 - 1090: 6(int) Load 8(invocation) - 1091: 44(ptr) AccessChain 31(data) 33 34 - 1092: 23(fvec4) Load 1091 - 1093: 51(fvec3) VectorShuffle 1092 1092 0 1 2 + 1016: 64(ptr) AccessChain 31(data) 34 63 35 + 1017: 24(int) Load 1016 + 1018: 144(bool) SLessThan 1017 34 + 1019: 17(ivec4) Load 19(ballot) + 1020: 144(bool) GroupNonUniformLogicalXor 178 PartitionedReduceNV 1018 1019 + 1021: 24(int) Select 1020 63 34 + 1022: 64(ptr) AccessChain 31(data) 1015 63 35 + Store 1022 1021 + 1023: 6(int) Load 8(invocation) + 1024: 71(ptr) AccessChain 31(data) 63 63 + 1025: 25(ivec4) Load 1024 + 1026: 70(ivec2) VectorShuffle 1025 1025 0 1 + 1027: 152(bvec2) SLessThan 1026 801 + 1028: 17(ivec4) Load 19(ballot) + 1029: 152(bvec2) GroupNonUniformLogicalXor 178 PartitionedReduceNV 1027 1028 + 1030: 70(ivec2) Select 1029 805 801 + 1031: 64(ptr) AccessChain 31(data) 1023 63 35 + 1032: 24(int) CompositeExtract 1030 0 + Store 1031 1032 + 1033: 64(ptr) AccessChain 31(data) 1023 63 189 + 1034: 24(int) CompositeExtract 1030 1 + Store 1033 1034 + 1035: 6(int) Load 8(invocation) + 1036: 71(ptr) AccessChain 31(data) 63 63 + 1037: 25(ivec4) Load 1036 + 1038: 78(ivec3) VectorShuffle 1037 1037 0 1 2 + 1039: 161(bvec3) SLessThan 1038 815 + 1040: 17(ivec4) Load 19(ballot) + 1041: 161(bvec3) GroupNonUniformLogicalXor 178 PartitionedReduceNV 1039 1040 + 1042: 78(ivec3) Select 1041 819 815 + 1043: 64(ptr) AccessChain 31(data) 1035 63 35 + 1044: 24(int) CompositeExtract 1042 0 + Store 1043 1044 + 1045: 64(ptr) AccessChain 31(data) 1035 63 189 + 1046: 24(int) CompositeExtract 1042 1 + Store 1045 1046 + 1047: 64(ptr) AccessChain 31(data) 1035 63 202 + 1048: 24(int) CompositeExtract 1042 2 + Store 1047 1048 + 1049: 6(int) Load 8(invocation) + 1050: 71(ptr) AccessChain 31(data) 63 63 + 1051: 25(ivec4) Load 1050 + 1052: 169(bvec4) SLessThan 1051 830 + 1053: 17(ivec4) Load 19(ballot) + 1054: 169(bvec4) GroupNonUniformLogicalXor 178 PartitionedReduceNV 1052 1053 + 1055: 25(ivec4) Select 1054 834 830 + 1056: 71(ptr) AccessChain 31(data) 1049 63 + Store 1056 1055 + 1057: 6(int) Load 8(invocation) + 1058: 36(ptr) AccessChain 31(data) 34 34 35 + 1059: 22(float) Load 1058 + 1060: 17(ivec4) Load 19(ballot) + 1061: 22(float) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1059 1060 + 1062: 36(ptr) AccessChain 31(data) 1057 34 35 + Store 1062 1061 + 1063: 6(int) Load 8(invocation) + 1064: 44(ptr) AccessChain 31(data) 63 34 + 1065: 23(fvec4) Load 1064 + 1066: 43(fvec2) VectorShuffle 1065 1065 0 1 + 1067: 17(ivec4) Load 19(ballot) + 1068: 43(fvec2) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1066 1067 + 1069: 36(ptr) AccessChain 31(data) 1063 34 35 + 1070: 22(float) CompositeExtract 1068 0 + Store 1069 1070 + 1071: 36(ptr) AccessChain 31(data) 1063 34 189 + 1072: 22(float) CompositeExtract 1068 1 + Store 1071 1072 + 1073: 6(int) Load 8(invocation) + 1074: 44(ptr) AccessChain 31(data) 33 34 + 1075: 23(fvec4) Load 1074 + 1076: 51(fvec3) VectorShuffle 1075 1075 0 1 2 + 1077: 17(ivec4) Load 19(ballot) + 1078: 51(fvec3) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1076 1077 + 1079: 36(ptr) AccessChain 31(data) 1073 34 35 + 1080: 22(float) CompositeExtract 1078 0 + Store 1079 1080 + 1081: 36(ptr) AccessChain 31(data) 1073 34 189 + 1082: 22(float) CompositeExtract 1078 1 + Store 1081 1082 + 1083: 36(ptr) AccessChain 31(data) 1073 34 202 + 1084: 22(float) CompositeExtract 1078 2 + Store 1083 1084 + 1085: 6(int) Load 8(invocation) + 1086: 44(ptr) AccessChain 31(data) 115 34 + 1087: 23(fvec4) Load 1086 + 1088: 17(ivec4) Load 19(ballot) + 1089: 23(fvec4) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1087 1088 + 1090: 44(ptr) AccessChain 31(data) 1085 34 + Store 1090 1089 + 1091: 6(int) Load 8(invocation) + 1092: 64(ptr) AccessChain 31(data) 34 63 35 + 1093: 24(int) Load 1092 1094: 17(ivec4) Load 19(ballot) - 1095: 51(fvec3) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1093 1094 - 1096: 44(ptr) AccessChain 31(data) 1090 34 - 1097: 23(fvec4) Load 1096 - 1098: 23(fvec4) VectorShuffle 1097 1095 4 5 6 3 - Store 1096 1098 - 1099: 6(int) Load 8(invocation) - 1100: 44(ptr) AccessChain 31(data) 115 34 - 1101: 23(fvec4) Load 1100 - 1102: 17(ivec4) Load 19(ballot) - 1103: 23(fvec4) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1101 1102 - 1104: 44(ptr) AccessChain 31(data) 1099 34 - Store 1104 1103 - 1105: 6(int) Load 8(invocation) - 1106: 64(ptr) AccessChain 31(data) 34 63 35 - 1107: 24(int) Load 1106 - 1108: 17(ivec4) Load 19(ballot) - 1109: 24(int) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1107 1108 - 1110: 64(ptr) AccessChain 31(data) 1105 63 35 - Store 1110 1109 - 1111: 6(int) Load 8(invocation) - 1112: 71(ptr) AccessChain 31(data) 63 63 - 1113: 25(ivec4) Load 1112 - 1114: 70(ivec2) VectorShuffle 1113 1113 0 1 - 1115: 17(ivec4) Load 19(ballot) - 1116: 70(ivec2) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1114 1115 - 1117: 71(ptr) AccessChain 31(data) 1111 63 - 1118: 25(ivec4) Load 1117 - 1119: 25(ivec4) VectorShuffle 1118 1116 4 5 2 3 - Store 1117 1119 - 1120: 6(int) Load 8(invocation) - 1121: 71(ptr) AccessChain 31(data) 33 63 - 1122: 25(ivec4) Load 1121 - 1123: 78(ivec3) VectorShuffle 1122 1122 0 1 2 - 1124: 17(ivec4) Load 19(ballot) - 1125: 78(ivec3) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1123 1124 - 1126: 71(ptr) AccessChain 31(data) 1120 63 - 1127: 25(ivec4) Load 1126 - 1128: 25(ivec4) VectorShuffle 1127 1125 4 5 6 3 - Store 1126 1128 - 1129: 6(int) Load 8(invocation) - 1130: 71(ptr) AccessChain 31(data) 115 63 - 1131: 25(ivec4) Load 1130 - 1132: 17(ivec4) Load 19(ballot) - 1133: 25(ivec4) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1131 1132 - 1134: 71(ptr) AccessChain 31(data) 1129 63 - Store 1134 1133 - 1135: 6(int) Load 8(invocation) - 1136: 90(ptr) AccessChain 31(data) 34 33 35 - 1137: 6(int) Load 1136 - 1138: 17(ivec4) Load 19(ballot) - 1139: 6(int) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1137 1138 - 1140: 90(ptr) AccessChain 31(data) 1135 33 35 - Store 1140 1139 + 1095: 24(int) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1093 1094 + 1096: 64(ptr) AccessChain 31(data) 1091 63 35 + Store 1096 1095 + 1097: 6(int) Load 8(invocation) + 1098: 71(ptr) AccessChain 31(data) 63 63 + 1099: 25(ivec4) Load 1098 + 1100: 70(ivec2) VectorShuffle 1099 1099 0 1 + 1101: 17(ivec4) Load 19(ballot) + 1102: 70(ivec2) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1100 1101 + 1103: 64(ptr) AccessChain 31(data) 1097 63 35 + 1104: 24(int) CompositeExtract 1102 0 + Store 1103 1104 + 1105: 64(ptr) AccessChain 31(data) 1097 63 189 + 1106: 24(int) CompositeExtract 1102 1 + Store 1105 1106 + 1107: 6(int) Load 8(invocation) + 1108: 71(ptr) AccessChain 31(data) 33 63 + 1109: 25(ivec4) Load 1108 + 1110: 78(ivec3) VectorShuffle 1109 1109 0 1 2 + 1111: 17(ivec4) Load 19(ballot) + 1112: 78(ivec3) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1110 1111 + 1113: 64(ptr) AccessChain 31(data) 1107 63 35 + 1114: 24(int) CompositeExtract 1112 0 + Store 1113 1114 + 1115: 64(ptr) AccessChain 31(data) 1107 63 189 + 1116: 24(int) CompositeExtract 1112 1 + Store 1115 1116 + 1117: 64(ptr) AccessChain 31(data) 1107 63 202 + 1118: 24(int) CompositeExtract 1112 2 + Store 1117 1118 + 1119: 6(int) Load 8(invocation) + 1120: 71(ptr) AccessChain 31(data) 115 63 + 1121: 25(ivec4) Load 1120 + 1122: 17(ivec4) Load 19(ballot) + 1123: 25(ivec4) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1121 1122 + 1124: 71(ptr) AccessChain 31(data) 1119 63 + Store 1124 1123 + 1125: 6(int) Load 8(invocation) + 1126: 90(ptr) AccessChain 31(data) 34 33 35 + 1127: 6(int) Load 1126 + 1128: 17(ivec4) Load 19(ballot) + 1129: 6(int) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1127 1128 + 1130: 90(ptr) AccessChain 31(data) 1125 33 35 + Store 1130 1129 + 1131: 6(int) Load 8(invocation) + 1132: 40(ptr) AccessChain 31(data) 63 33 + 1133: 17(ivec4) Load 1132 + 1134: 96(ivec2) VectorShuffle 1133 1133 0 1 + 1135: 17(ivec4) Load 19(ballot) + 1136: 96(ivec2) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1134 1135 + 1137: 90(ptr) AccessChain 31(data) 1131 33 35 + 1138: 6(int) CompositeExtract 1136 0 + Store 1137 1138 + 1139: 90(ptr) AccessChain 31(data) 1131 33 189 + 1140: 6(int) CompositeExtract 1136 1 + Store 1139 1140 1141: 6(int) Load 8(invocation) - 1142: 40(ptr) AccessChain 31(data) 63 33 + 1142: 40(ptr) AccessChain 31(data) 33 33 1143: 17(ivec4) Load 1142 - 1144: 96(ivec2) VectorShuffle 1143 1143 0 1 + 1144: 103(ivec3) VectorShuffle 1143 1143 0 1 2 1145: 17(ivec4) Load 19(ballot) - 1146: 96(ivec2) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1144 1145 - 1147: 40(ptr) AccessChain 31(data) 1141 33 - 1148: 17(ivec4) Load 1147 - 1149: 17(ivec4) VectorShuffle 1148 1146 4 5 2 3 - Store 1147 1149 - 1150: 6(int) Load 8(invocation) - 1151: 40(ptr) AccessChain 31(data) 33 33 - 1152: 17(ivec4) Load 1151 - 1153: 103(ivec3) VectorShuffle 1152 1152 0 1 2 - 1154: 17(ivec4) Load 19(ballot) - 1155: 103(ivec3) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1153 1154 - 1156: 40(ptr) AccessChain 31(data) 1150 33 - 1157: 17(ivec4) Load 1156 - 1158: 17(ivec4) VectorShuffle 1157 1155 4 5 6 3 - Store 1156 1158 + 1146: 103(ivec3) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1144 1145 + 1147: 90(ptr) AccessChain 31(data) 1141 33 35 + 1148: 6(int) CompositeExtract 1146 0 + Store 1147 1148 + 1149: 90(ptr) AccessChain 31(data) 1141 33 189 + 1150: 6(int) CompositeExtract 1146 1 + Store 1149 1150 + 1151: 90(ptr) AccessChain 31(data) 1141 33 202 + 1152: 6(int) CompositeExtract 1146 2 + Store 1151 1152 + 1153: 6(int) Load 8(invocation) + 1154: 40(ptr) AccessChain 31(data) 115 33 + 1155: 17(ivec4) Load 1154 + 1156: 17(ivec4) Load 19(ballot) + 1157: 17(ivec4) GroupNonUniformIAdd 178 PartitionedInclusiveScanNV 1155 1156 + 1158: 40(ptr) AccessChain 31(data) 1153 33 + Store 1158 1157 1159: 6(int) Load 8(invocation) - 1160: 40(ptr) AccessChain 31(data) 115 33 - 1161: 17(ivec4) Load 1160 + 1160: 116(ptr) AccessChain 31(data) 34 115 35 + 1161:26(float64_t) Load 1160 1162: 17(ivec4) Load 19(ballot) - 1163: 17(ivec4) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1161 1162 - 1164: 40(ptr) AccessChain 31(data) 1159 33 + 1163:26(float64_t) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1161 1162 + 1164: 116(ptr) AccessChain 31(data) 1159 115 35 Store 1164 1163 1165: 6(int) Load 8(invocation) - 1166: 116(ptr) AccessChain 31(data) 34 115 35 - 1167:26(float64_t) Load 1166 - 1168: 17(ivec4) Load 19(ballot) - 1169:26(float64_t) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1167 1168 - 1170: 116(ptr) AccessChain 31(data) 1165 115 35 - Store 1170 1169 - 1171: 6(int) Load 8(invocation) - 1172: 123(ptr) AccessChain 31(data) 63 115 - 1173: 27(f64vec4) Load 1172 - 1174:122(f64vec2) VectorShuffle 1173 1173 0 1 - 1175: 17(ivec4) Load 19(ballot) - 1176:122(f64vec2) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1174 1175 - 1177: 123(ptr) AccessChain 31(data) 1171 115 - 1178: 27(f64vec4) Load 1177 - 1179: 27(f64vec4) VectorShuffle 1178 1176 4 5 2 3 - Store 1177 1179 - 1180: 6(int) Load 8(invocation) - 1181: 123(ptr) AccessChain 31(data) 33 115 - 1182: 27(f64vec4) Load 1181 - 1183:130(f64vec3) VectorShuffle 1182 1182 0 1 2 - 1184: 17(ivec4) Load 19(ballot) - 1185:130(f64vec3) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1183 1184 - 1186: 123(ptr) AccessChain 31(data) 1180 115 - 1187: 27(f64vec4) Load 1186 - 1188: 27(f64vec4) VectorShuffle 1187 1185 4 5 6 3 - Store 1186 1188 - 1189: 6(int) Load 8(invocation) - 1190: 123(ptr) AccessChain 31(data) 115 115 - 1191: 27(f64vec4) Load 1190 - 1192: 17(ivec4) Load 19(ballot) - 1193: 27(f64vec4) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1191 1192 - 1194: 123(ptr) AccessChain 31(data) 1189 115 - Store 1194 1193 - 1195: 6(int) Load 8(invocation) - 1196: 36(ptr) AccessChain 31(data) 34 34 35 - 1197: 22(float) Load 1196 - 1198: 17(ivec4) Load 19(ballot) - 1199: 22(float) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1197 1198 - 1200: 36(ptr) AccessChain 31(data) 1195 34 35 - Store 1200 1199 - 1201: 6(int) Load 8(invocation) - 1202: 44(ptr) AccessChain 31(data) 63 34 - 1203: 23(fvec4) Load 1202 - 1204: 43(fvec2) VectorShuffle 1203 1203 0 1 - 1205: 17(ivec4) Load 19(ballot) - 1206: 43(fvec2) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1204 1205 - 1207: 44(ptr) AccessChain 31(data) 1201 34 - 1208: 23(fvec4) Load 1207 - 1209: 23(fvec4) VectorShuffle 1208 1206 4 5 2 3 - Store 1207 1209 - 1210: 6(int) Load 8(invocation) - 1211: 44(ptr) AccessChain 31(data) 33 34 - 1212: 23(fvec4) Load 1211 - 1213: 51(fvec3) VectorShuffle 1212 1212 0 1 2 - 1214: 17(ivec4) Load 19(ballot) - 1215: 51(fvec3) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1213 1214 - 1216: 44(ptr) AccessChain 31(data) 1210 34 - 1217: 23(fvec4) Load 1216 - 1218: 23(fvec4) VectorShuffle 1217 1215 4 5 6 3 - Store 1216 1218 - 1219: 6(int) Load 8(invocation) - 1220: 44(ptr) AccessChain 31(data) 115 34 - 1221: 23(fvec4) Load 1220 - 1222: 17(ivec4) Load 19(ballot) - 1223: 23(fvec4) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1221 1222 - 1224: 44(ptr) AccessChain 31(data) 1219 34 - Store 1224 1223 - 1225: 6(int) Load 8(invocation) - 1226: 64(ptr) AccessChain 31(data) 34 63 35 - 1227: 24(int) Load 1226 - 1228: 17(ivec4) Load 19(ballot) - 1229: 24(int) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1227 1228 - 1230: 64(ptr) AccessChain 31(data) 1225 63 35 - Store 1230 1229 - 1231: 6(int) Load 8(invocation) - 1232: 71(ptr) AccessChain 31(data) 63 63 - 1233: 25(ivec4) Load 1232 - 1234: 70(ivec2) VectorShuffle 1233 1233 0 1 - 1235: 17(ivec4) Load 19(ballot) - 1236: 70(ivec2) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1234 1235 - 1237: 71(ptr) AccessChain 31(data) 1231 63 - 1238: 25(ivec4) Load 1237 - 1239: 25(ivec4) VectorShuffle 1238 1236 4 5 2 3 - Store 1237 1239 - 1240: 6(int) Load 8(invocation) - 1241: 71(ptr) AccessChain 31(data) 33 63 - 1242: 25(ivec4) Load 1241 - 1243: 78(ivec3) VectorShuffle 1242 1242 0 1 2 - 1244: 17(ivec4) Load 19(ballot) - 1245: 78(ivec3) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1243 1244 - 1246: 71(ptr) AccessChain 31(data) 1240 63 - 1247: 25(ivec4) Load 1246 - 1248: 25(ivec4) VectorShuffle 1247 1245 4 5 6 3 - Store 1246 1248 - 1249: 6(int) Load 8(invocation) - 1250: 71(ptr) AccessChain 31(data) 115 63 - 1251: 25(ivec4) Load 1250 - 1252: 17(ivec4) Load 19(ballot) - 1253: 25(ivec4) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1251 1252 - 1254: 71(ptr) AccessChain 31(data) 1249 63 - Store 1254 1253 + 1166: 123(ptr) AccessChain 31(data) 63 115 + 1167: 27(f64vec4) Load 1166 + 1168:122(f64vec2) VectorShuffle 1167 1167 0 1 + 1169: 17(ivec4) Load 19(ballot) + 1170:122(f64vec2) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1168 1169 + 1171: 116(ptr) AccessChain 31(data) 1165 115 35 + 1172:26(float64_t) CompositeExtract 1170 0 + Store 1171 1172 + 1173: 116(ptr) AccessChain 31(data) 1165 115 189 + 1174:26(float64_t) CompositeExtract 1170 1 + Store 1173 1174 + 1175: 6(int) Load 8(invocation) + 1176: 123(ptr) AccessChain 31(data) 33 115 + 1177: 27(f64vec4) Load 1176 + 1178:130(f64vec3) VectorShuffle 1177 1177 0 1 2 + 1179: 17(ivec4) Load 19(ballot) + 1180:130(f64vec3) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1178 1179 + 1181: 116(ptr) AccessChain 31(data) 1175 115 35 + 1182:26(float64_t) CompositeExtract 1180 0 + Store 1181 1182 + 1183: 116(ptr) AccessChain 31(data) 1175 115 189 + 1184:26(float64_t) CompositeExtract 1180 1 + Store 1183 1184 + 1185: 116(ptr) AccessChain 31(data) 1175 115 202 + 1186:26(float64_t) CompositeExtract 1180 2 + Store 1185 1186 + 1187: 6(int) Load 8(invocation) + 1188: 123(ptr) AccessChain 31(data) 115 115 + 1189: 27(f64vec4) Load 1188 + 1190: 17(ivec4) Load 19(ballot) + 1191: 27(f64vec4) GroupNonUniformFAdd 178 PartitionedInclusiveScanNV 1189 1190 + 1192: 123(ptr) AccessChain 31(data) 1187 115 + Store 1192 1191 + 1193: 6(int) Load 8(invocation) + 1194: 36(ptr) AccessChain 31(data) 34 34 35 + 1195: 22(float) Load 1194 + 1196: 17(ivec4) Load 19(ballot) + 1197: 22(float) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1195 1196 + 1198: 36(ptr) AccessChain 31(data) 1193 34 35 + Store 1198 1197 + 1199: 6(int) Load 8(invocation) + 1200: 44(ptr) AccessChain 31(data) 63 34 + 1201: 23(fvec4) Load 1200 + 1202: 43(fvec2) VectorShuffle 1201 1201 0 1 + 1203: 17(ivec4) Load 19(ballot) + 1204: 43(fvec2) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1202 1203 + 1205: 36(ptr) AccessChain 31(data) 1199 34 35 + 1206: 22(float) CompositeExtract 1204 0 + Store 1205 1206 + 1207: 36(ptr) AccessChain 31(data) 1199 34 189 + 1208: 22(float) CompositeExtract 1204 1 + Store 1207 1208 + 1209: 6(int) Load 8(invocation) + 1210: 44(ptr) AccessChain 31(data) 33 34 + 1211: 23(fvec4) Load 1210 + 1212: 51(fvec3) VectorShuffle 1211 1211 0 1 2 + 1213: 17(ivec4) Load 19(ballot) + 1214: 51(fvec3) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1212 1213 + 1215: 36(ptr) AccessChain 31(data) 1209 34 35 + 1216: 22(float) CompositeExtract 1214 0 + Store 1215 1216 + 1217: 36(ptr) AccessChain 31(data) 1209 34 189 + 1218: 22(float) CompositeExtract 1214 1 + Store 1217 1218 + 1219: 36(ptr) AccessChain 31(data) 1209 34 202 + 1220: 22(float) CompositeExtract 1214 2 + Store 1219 1220 + 1221: 6(int) Load 8(invocation) + 1222: 44(ptr) AccessChain 31(data) 115 34 + 1223: 23(fvec4) Load 1222 + 1224: 17(ivec4) Load 19(ballot) + 1225: 23(fvec4) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1223 1224 + 1226: 44(ptr) AccessChain 31(data) 1221 34 + Store 1226 1225 + 1227: 6(int) Load 8(invocation) + 1228: 64(ptr) AccessChain 31(data) 34 63 35 + 1229: 24(int) Load 1228 + 1230: 17(ivec4) Load 19(ballot) + 1231: 24(int) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1229 1230 + 1232: 64(ptr) AccessChain 31(data) 1227 63 35 + Store 1232 1231 + 1233: 6(int) Load 8(invocation) + 1234: 71(ptr) AccessChain 31(data) 63 63 + 1235: 25(ivec4) Load 1234 + 1236: 70(ivec2) VectorShuffle 1235 1235 0 1 + 1237: 17(ivec4) Load 19(ballot) + 1238: 70(ivec2) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1236 1237 + 1239: 64(ptr) AccessChain 31(data) 1233 63 35 + 1240: 24(int) CompositeExtract 1238 0 + Store 1239 1240 + 1241: 64(ptr) AccessChain 31(data) 1233 63 189 + 1242: 24(int) CompositeExtract 1238 1 + Store 1241 1242 + 1243: 6(int) Load 8(invocation) + 1244: 71(ptr) AccessChain 31(data) 33 63 + 1245: 25(ivec4) Load 1244 + 1246: 78(ivec3) VectorShuffle 1245 1245 0 1 2 + 1247: 17(ivec4) Load 19(ballot) + 1248: 78(ivec3) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1246 1247 + 1249: 64(ptr) AccessChain 31(data) 1243 63 35 + 1250: 24(int) CompositeExtract 1248 0 + Store 1249 1250 + 1251: 64(ptr) AccessChain 31(data) 1243 63 189 + 1252: 24(int) CompositeExtract 1248 1 + Store 1251 1252 + 1253: 64(ptr) AccessChain 31(data) 1243 63 202 + 1254: 24(int) CompositeExtract 1248 2 + Store 1253 1254 1255: 6(int) Load 8(invocation) - 1256: 90(ptr) AccessChain 31(data) 34 33 35 - 1257: 6(int) Load 1256 + 1256: 71(ptr) AccessChain 31(data) 115 63 + 1257: 25(ivec4) Load 1256 1258: 17(ivec4) Load 19(ballot) - 1259: 6(int) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1257 1258 - 1260: 90(ptr) AccessChain 31(data) 1255 33 35 + 1259: 25(ivec4) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1257 1258 + 1260: 71(ptr) AccessChain 31(data) 1255 63 Store 1260 1259 1261: 6(int) Load 8(invocation) - 1262: 40(ptr) AccessChain 31(data) 63 33 - 1263: 17(ivec4) Load 1262 - 1264: 96(ivec2) VectorShuffle 1263 1263 0 1 - 1265: 17(ivec4) Load 19(ballot) - 1266: 96(ivec2) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1264 1265 - 1267: 40(ptr) AccessChain 31(data) 1261 33 - 1268: 17(ivec4) Load 1267 - 1269: 17(ivec4) VectorShuffle 1268 1266 4 5 2 3 - Store 1267 1269 - 1270: 6(int) Load 8(invocation) - 1271: 40(ptr) AccessChain 31(data) 33 33 - 1272: 17(ivec4) Load 1271 - 1273: 103(ivec3) VectorShuffle 1272 1272 0 1 2 - 1274: 17(ivec4) Load 19(ballot) - 1275: 103(ivec3) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1273 1274 - 1276: 40(ptr) AccessChain 31(data) 1270 33 - 1277: 17(ivec4) Load 1276 - 1278: 17(ivec4) VectorShuffle 1277 1275 4 5 6 3 - Store 1276 1278 - 1279: 6(int) Load 8(invocation) - 1280: 40(ptr) AccessChain 31(data) 115 33 - 1281: 17(ivec4) Load 1280 - 1282: 17(ivec4) Load 19(ballot) - 1283: 17(ivec4) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1281 1282 - 1284: 40(ptr) AccessChain 31(data) 1279 33 - Store 1284 1283 - 1285: 6(int) Load 8(invocation) - 1286: 116(ptr) AccessChain 31(data) 34 115 35 - 1287:26(float64_t) Load 1286 - 1288: 17(ivec4) Load 19(ballot) - 1289:26(float64_t) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1287 1288 - 1290: 116(ptr) AccessChain 31(data) 1285 115 35 - Store 1290 1289 - 1291: 6(int) Load 8(invocation) - 1292: 123(ptr) AccessChain 31(data) 63 115 - 1293: 27(f64vec4) Load 1292 - 1294:122(f64vec2) VectorShuffle 1293 1293 0 1 - 1295: 17(ivec4) Load 19(ballot) - 1296:122(f64vec2) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1294 1295 - 1297: 123(ptr) AccessChain 31(data) 1291 115 - 1298: 27(f64vec4) Load 1297 - 1299: 27(f64vec4) VectorShuffle 1298 1296 4 5 2 3 - Store 1297 1299 - 1300: 6(int) Load 8(invocation) - 1301: 123(ptr) AccessChain 31(data) 33 115 - 1302: 27(f64vec4) Load 1301 - 1303:130(f64vec3) VectorShuffle 1302 1302 0 1 2 - 1304: 17(ivec4) Load 19(ballot) - 1305:130(f64vec3) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1303 1304 - 1306: 123(ptr) AccessChain 31(data) 1300 115 - 1307: 27(f64vec4) Load 1306 - 1308: 27(f64vec4) VectorShuffle 1307 1305 4 5 6 3 - Store 1306 1308 - 1309: 6(int) Load 8(invocation) - 1310: 123(ptr) AccessChain 31(data) 115 115 - 1311: 27(f64vec4) Load 1310 - 1312: 17(ivec4) Load 19(ballot) - 1313: 27(f64vec4) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1311 1312 - 1314: 123(ptr) AccessChain 31(data) 1309 115 - Store 1314 1313 - 1315: 6(int) Load 8(invocation) - 1316: 36(ptr) AccessChain 31(data) 34 34 35 - 1317: 22(float) Load 1316 - 1318: 17(ivec4) Load 19(ballot) - 1319: 22(float) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1317 1318 - 1320: 36(ptr) AccessChain 31(data) 1315 34 35 - Store 1320 1319 - 1321: 6(int) Load 8(invocation) - 1322: 44(ptr) AccessChain 31(data) 63 34 - 1323: 23(fvec4) Load 1322 - 1324: 43(fvec2) VectorShuffle 1323 1323 0 1 - 1325: 17(ivec4) Load 19(ballot) - 1326: 43(fvec2) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1324 1325 - 1327: 44(ptr) AccessChain 31(data) 1321 34 - 1328: 23(fvec4) Load 1327 - 1329: 23(fvec4) VectorShuffle 1328 1326 4 5 2 3 - Store 1327 1329 - 1330: 6(int) Load 8(invocation) - 1331: 44(ptr) AccessChain 31(data) 33 34 - 1332: 23(fvec4) Load 1331 - 1333: 51(fvec3) VectorShuffle 1332 1332 0 1 2 - 1334: 17(ivec4) Load 19(ballot) - 1335: 51(fvec3) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1333 1334 - 1336: 44(ptr) AccessChain 31(data) 1330 34 + 1262: 90(ptr) AccessChain 31(data) 34 33 35 + 1263: 6(int) Load 1262 + 1264: 17(ivec4) Load 19(ballot) + 1265: 6(int) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1263 1264 + 1266: 90(ptr) AccessChain 31(data) 1261 33 35 + Store 1266 1265 + 1267: 6(int) Load 8(invocation) + 1268: 40(ptr) AccessChain 31(data) 63 33 + 1269: 17(ivec4) Load 1268 + 1270: 96(ivec2) VectorShuffle 1269 1269 0 1 + 1271: 17(ivec4) Load 19(ballot) + 1272: 96(ivec2) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1270 1271 + 1273: 90(ptr) AccessChain 31(data) 1267 33 35 + 1274: 6(int) CompositeExtract 1272 0 + Store 1273 1274 + 1275: 90(ptr) AccessChain 31(data) 1267 33 189 + 1276: 6(int) CompositeExtract 1272 1 + Store 1275 1276 + 1277: 6(int) Load 8(invocation) + 1278: 40(ptr) AccessChain 31(data) 33 33 + 1279: 17(ivec4) Load 1278 + 1280: 103(ivec3) VectorShuffle 1279 1279 0 1 2 + 1281: 17(ivec4) Load 19(ballot) + 1282: 103(ivec3) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1280 1281 + 1283: 90(ptr) AccessChain 31(data) 1277 33 35 + 1284: 6(int) CompositeExtract 1282 0 + Store 1283 1284 + 1285: 90(ptr) AccessChain 31(data) 1277 33 189 + 1286: 6(int) CompositeExtract 1282 1 + Store 1285 1286 + 1287: 90(ptr) AccessChain 31(data) 1277 33 202 + 1288: 6(int) CompositeExtract 1282 2 + Store 1287 1288 + 1289: 6(int) Load 8(invocation) + 1290: 40(ptr) AccessChain 31(data) 115 33 + 1291: 17(ivec4) Load 1290 + 1292: 17(ivec4) Load 19(ballot) + 1293: 17(ivec4) GroupNonUniformIMul 178 PartitionedInclusiveScanNV 1291 1292 + 1294: 40(ptr) AccessChain 31(data) 1289 33 + Store 1294 1293 + 1295: 6(int) Load 8(invocation) + 1296: 116(ptr) AccessChain 31(data) 34 115 35 + 1297:26(float64_t) Load 1296 + 1298: 17(ivec4) Load 19(ballot) + 1299:26(float64_t) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1297 1298 + 1300: 116(ptr) AccessChain 31(data) 1295 115 35 + Store 1300 1299 + 1301: 6(int) Load 8(invocation) + 1302: 123(ptr) AccessChain 31(data) 63 115 + 1303: 27(f64vec4) Load 1302 + 1304:122(f64vec2) VectorShuffle 1303 1303 0 1 + 1305: 17(ivec4) Load 19(ballot) + 1306:122(f64vec2) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1304 1305 + 1307: 116(ptr) AccessChain 31(data) 1301 115 35 + 1308:26(float64_t) CompositeExtract 1306 0 + Store 1307 1308 + 1309: 116(ptr) AccessChain 31(data) 1301 115 189 + 1310:26(float64_t) CompositeExtract 1306 1 + Store 1309 1310 + 1311: 6(int) Load 8(invocation) + 1312: 123(ptr) AccessChain 31(data) 33 115 + 1313: 27(f64vec4) Load 1312 + 1314:130(f64vec3) VectorShuffle 1313 1313 0 1 2 + 1315: 17(ivec4) Load 19(ballot) + 1316:130(f64vec3) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1314 1315 + 1317: 116(ptr) AccessChain 31(data) 1311 115 35 + 1318:26(float64_t) CompositeExtract 1316 0 + Store 1317 1318 + 1319: 116(ptr) AccessChain 31(data) 1311 115 189 + 1320:26(float64_t) CompositeExtract 1316 1 + Store 1319 1320 + 1321: 116(ptr) AccessChain 31(data) 1311 115 202 + 1322:26(float64_t) CompositeExtract 1316 2 + Store 1321 1322 + 1323: 6(int) Load 8(invocation) + 1324: 123(ptr) AccessChain 31(data) 115 115 + 1325: 27(f64vec4) Load 1324 + 1326: 17(ivec4) Load 19(ballot) + 1327: 27(f64vec4) GroupNonUniformFMul 178 PartitionedInclusiveScanNV 1325 1326 + 1328: 123(ptr) AccessChain 31(data) 1323 115 + Store 1328 1327 + 1329: 6(int) Load 8(invocation) + 1330: 36(ptr) AccessChain 31(data) 34 34 35 + 1331: 22(float) Load 1330 + 1332: 17(ivec4) Load 19(ballot) + 1333: 22(float) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1331 1332 + 1334: 36(ptr) AccessChain 31(data) 1329 34 35 + Store 1334 1333 + 1335: 6(int) Load 8(invocation) + 1336: 44(ptr) AccessChain 31(data) 63 34 1337: 23(fvec4) Load 1336 - 1338: 23(fvec4) VectorShuffle 1337 1335 4 5 6 3 - Store 1336 1338 - 1339: 6(int) Load 8(invocation) - 1340: 44(ptr) AccessChain 31(data) 115 34 - 1341: 23(fvec4) Load 1340 - 1342: 17(ivec4) Load 19(ballot) - 1343: 23(fvec4) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1341 1342 - 1344: 44(ptr) AccessChain 31(data) 1339 34 - Store 1344 1343 + 1338: 43(fvec2) VectorShuffle 1337 1337 0 1 + 1339: 17(ivec4) Load 19(ballot) + 1340: 43(fvec2) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1338 1339 + 1341: 36(ptr) AccessChain 31(data) 1335 34 35 + 1342: 22(float) CompositeExtract 1340 0 + Store 1341 1342 + 1343: 36(ptr) AccessChain 31(data) 1335 34 189 + 1344: 22(float) CompositeExtract 1340 1 + Store 1343 1344 1345: 6(int) Load 8(invocation) - 1346: 64(ptr) AccessChain 31(data) 34 63 35 - 1347: 24(int) Load 1346 - 1348: 17(ivec4) Load 19(ballot) - 1349: 24(int) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1347 1348 - 1350: 64(ptr) AccessChain 31(data) 1345 63 35 - Store 1350 1349 - 1351: 6(int) Load 8(invocation) - 1352: 71(ptr) AccessChain 31(data) 63 63 - 1353: 25(ivec4) Load 1352 - 1354: 70(ivec2) VectorShuffle 1353 1353 0 1 - 1355: 17(ivec4) Load 19(ballot) - 1356: 70(ivec2) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1354 1355 - 1357: 71(ptr) AccessChain 31(data) 1351 63 - 1358: 25(ivec4) Load 1357 - 1359: 25(ivec4) VectorShuffle 1358 1356 4 5 2 3 - Store 1357 1359 - 1360: 6(int) Load 8(invocation) - 1361: 71(ptr) AccessChain 31(data) 33 63 - 1362: 25(ivec4) Load 1361 - 1363: 78(ivec3) VectorShuffle 1362 1362 0 1 2 - 1364: 17(ivec4) Load 19(ballot) - 1365: 78(ivec3) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1363 1364 - 1366: 71(ptr) AccessChain 31(data) 1360 63 - 1367: 25(ivec4) Load 1366 - 1368: 25(ivec4) VectorShuffle 1367 1365 4 5 6 3 - Store 1366 1368 + 1346: 44(ptr) AccessChain 31(data) 33 34 + 1347: 23(fvec4) Load 1346 + 1348: 51(fvec3) VectorShuffle 1347 1347 0 1 2 + 1349: 17(ivec4) Load 19(ballot) + 1350: 51(fvec3) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1348 1349 + 1351: 36(ptr) AccessChain 31(data) 1345 34 35 + 1352: 22(float) CompositeExtract 1350 0 + Store 1351 1352 + 1353: 36(ptr) AccessChain 31(data) 1345 34 189 + 1354: 22(float) CompositeExtract 1350 1 + Store 1353 1354 + 1355: 36(ptr) AccessChain 31(data) 1345 34 202 + 1356: 22(float) CompositeExtract 1350 2 + Store 1355 1356 + 1357: 6(int) Load 8(invocation) + 1358: 44(ptr) AccessChain 31(data) 115 34 + 1359: 23(fvec4) Load 1358 + 1360: 17(ivec4) Load 19(ballot) + 1361: 23(fvec4) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1359 1360 + 1362: 44(ptr) AccessChain 31(data) 1357 34 + Store 1362 1361 + 1363: 6(int) Load 8(invocation) + 1364: 64(ptr) AccessChain 31(data) 34 63 35 + 1365: 24(int) Load 1364 + 1366: 17(ivec4) Load 19(ballot) + 1367: 24(int) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1365 1366 + 1368: 64(ptr) AccessChain 31(data) 1363 63 35 + Store 1368 1367 1369: 6(int) Load 8(invocation) - 1370: 71(ptr) AccessChain 31(data) 115 63 + 1370: 71(ptr) AccessChain 31(data) 63 63 1371: 25(ivec4) Load 1370 - 1372: 17(ivec4) Load 19(ballot) - 1373: 25(ivec4) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1371 1372 - 1374: 71(ptr) AccessChain 31(data) 1369 63 - Store 1374 1373 - 1375: 6(int) Load 8(invocation) - 1376: 90(ptr) AccessChain 31(data) 34 33 35 - 1377: 6(int) Load 1376 - 1378: 17(ivec4) Load 19(ballot) - 1379: 6(int) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1377 1378 - 1380: 90(ptr) AccessChain 31(data) 1375 33 35 - Store 1380 1379 - 1381: 6(int) Load 8(invocation) - 1382: 40(ptr) AccessChain 31(data) 63 33 - 1383: 17(ivec4) Load 1382 - 1384: 96(ivec2) VectorShuffle 1383 1383 0 1 - 1385: 17(ivec4) Load 19(ballot) - 1386: 96(ivec2) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1384 1385 - 1387: 40(ptr) AccessChain 31(data) 1381 33 - 1388: 17(ivec4) Load 1387 - 1389: 17(ivec4) VectorShuffle 1388 1386 4 5 2 3 - Store 1387 1389 - 1390: 6(int) Load 8(invocation) - 1391: 40(ptr) AccessChain 31(data) 33 33 - 1392: 17(ivec4) Load 1391 - 1393: 103(ivec3) VectorShuffle 1392 1392 0 1 2 + 1372: 70(ivec2) VectorShuffle 1371 1371 0 1 + 1373: 17(ivec4) Load 19(ballot) + 1374: 70(ivec2) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1372 1373 + 1375: 64(ptr) AccessChain 31(data) 1369 63 35 + 1376: 24(int) CompositeExtract 1374 0 + Store 1375 1376 + 1377: 64(ptr) AccessChain 31(data) 1369 63 189 + 1378: 24(int) CompositeExtract 1374 1 + Store 1377 1378 + 1379: 6(int) Load 8(invocation) + 1380: 71(ptr) AccessChain 31(data) 33 63 + 1381: 25(ivec4) Load 1380 + 1382: 78(ivec3) VectorShuffle 1381 1381 0 1 2 + 1383: 17(ivec4) Load 19(ballot) + 1384: 78(ivec3) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1382 1383 + 1385: 64(ptr) AccessChain 31(data) 1379 63 35 + 1386: 24(int) CompositeExtract 1384 0 + Store 1385 1386 + 1387: 64(ptr) AccessChain 31(data) 1379 63 189 + 1388: 24(int) CompositeExtract 1384 1 + Store 1387 1388 + 1389: 64(ptr) AccessChain 31(data) 1379 63 202 + 1390: 24(int) CompositeExtract 1384 2 + Store 1389 1390 + 1391: 6(int) Load 8(invocation) + 1392: 71(ptr) AccessChain 31(data) 115 63 + 1393: 25(ivec4) Load 1392 1394: 17(ivec4) Load 19(ballot) - 1395: 103(ivec3) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1393 1394 - 1396: 40(ptr) AccessChain 31(data) 1390 33 - 1397: 17(ivec4) Load 1396 - 1398: 17(ivec4) VectorShuffle 1397 1395 4 5 6 3 - Store 1396 1398 - 1399: 6(int) Load 8(invocation) - 1400: 40(ptr) AccessChain 31(data) 115 33 - 1401: 17(ivec4) Load 1400 - 1402: 17(ivec4) Load 19(ballot) - 1403: 17(ivec4) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1401 1402 - 1404: 40(ptr) AccessChain 31(data) 1399 33 - Store 1404 1403 - 1405: 6(int) Load 8(invocation) - 1406: 116(ptr) AccessChain 31(data) 34 115 35 - 1407:26(float64_t) Load 1406 - 1408: 17(ivec4) Load 19(ballot) - 1409:26(float64_t) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1407 1408 - 1410: 116(ptr) AccessChain 31(data) 1405 115 35 - Store 1410 1409 - 1411: 6(int) Load 8(invocation) - 1412: 123(ptr) AccessChain 31(data) 63 115 - 1413: 27(f64vec4) Load 1412 - 1414:122(f64vec2) VectorShuffle 1413 1413 0 1 - 1415: 17(ivec4) Load 19(ballot) - 1416:122(f64vec2) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1414 1415 - 1417: 123(ptr) AccessChain 31(data) 1411 115 - 1418: 27(f64vec4) Load 1417 - 1419: 27(f64vec4) VectorShuffle 1418 1416 4 5 2 3 - Store 1417 1419 - 1420: 6(int) Load 8(invocation) - 1421: 123(ptr) AccessChain 31(data) 33 115 - 1422: 27(f64vec4) Load 1421 - 1423:130(f64vec3) VectorShuffle 1422 1422 0 1 2 - 1424: 17(ivec4) Load 19(ballot) - 1425:130(f64vec3) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1423 1424 - 1426: 123(ptr) AccessChain 31(data) 1420 115 - 1427: 27(f64vec4) Load 1426 - 1428: 27(f64vec4) VectorShuffle 1427 1425 4 5 6 3 - Store 1426 1428 - 1429: 6(int) Load 8(invocation) - 1430: 123(ptr) AccessChain 31(data) 115 115 - 1431: 27(f64vec4) Load 1430 - 1432: 17(ivec4) Load 19(ballot) - 1433: 27(f64vec4) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1431 1432 - 1434: 123(ptr) AccessChain 31(data) 1429 115 - Store 1434 1433 - 1435: 6(int) Load 8(invocation) - 1436: 64(ptr) AccessChain 31(data) 34 63 35 - 1437: 24(int) Load 1436 - 1438: 17(ivec4) Load 19(ballot) - 1439: 24(int) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1437 1438 - 1440: 64(ptr) AccessChain 31(data) 1435 63 35 - Store 1440 1439 - 1441: 6(int) Load 8(invocation) - 1442: 71(ptr) AccessChain 31(data) 63 63 - 1443: 25(ivec4) Load 1442 - 1444: 70(ivec2) VectorShuffle 1443 1443 0 1 - 1445: 17(ivec4) Load 19(ballot) - 1446: 70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1444 1445 - 1447: 71(ptr) AccessChain 31(data) 1441 63 - 1448: 25(ivec4) Load 1447 - 1449: 25(ivec4) VectorShuffle 1448 1446 4 5 2 3 - Store 1447 1449 - 1450: 6(int) Load 8(invocation) - 1451: 71(ptr) AccessChain 31(data) 33 63 - 1452: 25(ivec4) Load 1451 - 1453: 78(ivec3) VectorShuffle 1452 1452 0 1 2 - 1454: 17(ivec4) Load 19(ballot) - 1455: 78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1453 1454 - 1456: 71(ptr) AccessChain 31(data) 1450 63 - 1457: 25(ivec4) Load 1456 - 1458: 25(ivec4) VectorShuffle 1457 1455 4 5 6 3 - Store 1456 1458 + 1395: 25(ivec4) GroupNonUniformSMin 178 PartitionedInclusiveScanNV 1393 1394 + 1396: 71(ptr) AccessChain 31(data) 1391 63 + Store 1396 1395 + 1397: 6(int) Load 8(invocation) + 1398: 90(ptr) AccessChain 31(data) 34 33 35 + 1399: 6(int) Load 1398 + 1400: 17(ivec4) Load 19(ballot) + 1401: 6(int) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1399 1400 + 1402: 90(ptr) AccessChain 31(data) 1397 33 35 + Store 1402 1401 + 1403: 6(int) Load 8(invocation) + 1404: 40(ptr) AccessChain 31(data) 63 33 + 1405: 17(ivec4) Load 1404 + 1406: 96(ivec2) VectorShuffle 1405 1405 0 1 + 1407: 17(ivec4) Load 19(ballot) + 1408: 96(ivec2) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1406 1407 + 1409: 90(ptr) AccessChain 31(data) 1403 33 35 + 1410: 6(int) CompositeExtract 1408 0 + Store 1409 1410 + 1411: 90(ptr) AccessChain 31(data) 1403 33 189 + 1412: 6(int) CompositeExtract 1408 1 + Store 1411 1412 + 1413: 6(int) Load 8(invocation) + 1414: 40(ptr) AccessChain 31(data) 33 33 + 1415: 17(ivec4) Load 1414 + 1416: 103(ivec3) VectorShuffle 1415 1415 0 1 2 + 1417: 17(ivec4) Load 19(ballot) + 1418: 103(ivec3) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1416 1417 + 1419: 90(ptr) AccessChain 31(data) 1413 33 35 + 1420: 6(int) CompositeExtract 1418 0 + Store 1419 1420 + 1421: 90(ptr) AccessChain 31(data) 1413 33 189 + 1422: 6(int) CompositeExtract 1418 1 + Store 1421 1422 + 1423: 90(ptr) AccessChain 31(data) 1413 33 202 + 1424: 6(int) CompositeExtract 1418 2 + Store 1423 1424 + 1425: 6(int) Load 8(invocation) + 1426: 40(ptr) AccessChain 31(data) 115 33 + 1427: 17(ivec4) Load 1426 + 1428: 17(ivec4) Load 19(ballot) + 1429: 17(ivec4) GroupNonUniformUMin 178 PartitionedInclusiveScanNV 1427 1428 + 1430: 40(ptr) AccessChain 31(data) 1425 33 + Store 1430 1429 + 1431: 6(int) Load 8(invocation) + 1432: 116(ptr) AccessChain 31(data) 34 115 35 + 1433:26(float64_t) Load 1432 + 1434: 17(ivec4) Load 19(ballot) + 1435:26(float64_t) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1433 1434 + 1436: 116(ptr) AccessChain 31(data) 1431 115 35 + Store 1436 1435 + 1437: 6(int) Load 8(invocation) + 1438: 123(ptr) AccessChain 31(data) 63 115 + 1439: 27(f64vec4) Load 1438 + 1440:122(f64vec2) VectorShuffle 1439 1439 0 1 + 1441: 17(ivec4) Load 19(ballot) + 1442:122(f64vec2) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1440 1441 + 1443: 116(ptr) AccessChain 31(data) 1437 115 35 + 1444:26(float64_t) CompositeExtract 1442 0 + Store 1443 1444 + 1445: 116(ptr) AccessChain 31(data) 1437 115 189 + 1446:26(float64_t) CompositeExtract 1442 1 + Store 1445 1446 + 1447: 6(int) Load 8(invocation) + 1448: 123(ptr) AccessChain 31(data) 33 115 + 1449: 27(f64vec4) Load 1448 + 1450:130(f64vec3) VectorShuffle 1449 1449 0 1 2 + 1451: 17(ivec4) Load 19(ballot) + 1452:130(f64vec3) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1450 1451 + 1453: 116(ptr) AccessChain 31(data) 1447 115 35 + 1454:26(float64_t) CompositeExtract 1452 0 + Store 1453 1454 + 1455: 116(ptr) AccessChain 31(data) 1447 115 189 + 1456:26(float64_t) CompositeExtract 1452 1 + Store 1455 1456 + 1457: 116(ptr) AccessChain 31(data) 1447 115 202 + 1458:26(float64_t) CompositeExtract 1452 2 + Store 1457 1458 1459: 6(int) Load 8(invocation) - 1460: 71(ptr) AccessChain 31(data) 115 63 - 1461: 25(ivec4) Load 1460 + 1460: 123(ptr) AccessChain 31(data) 115 115 + 1461: 27(f64vec4) Load 1460 1462: 17(ivec4) Load 19(ballot) - 1463: 25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1461 1462 - 1464: 71(ptr) AccessChain 31(data) 1459 63 + 1463: 27(f64vec4) GroupNonUniformFMin 178 PartitionedInclusiveScanNV 1461 1462 + 1464: 123(ptr) AccessChain 31(data) 1459 115 Store 1464 1463 1465: 6(int) Load 8(invocation) - 1466: 90(ptr) AccessChain 31(data) 34 33 35 - 1467: 6(int) Load 1466 + 1466: 36(ptr) AccessChain 31(data) 34 34 35 + 1467: 22(float) Load 1466 1468: 17(ivec4) Load 19(ballot) - 1469: 6(int) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1467 1468 - 1470: 90(ptr) AccessChain 31(data) 1465 33 35 + 1469: 22(float) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1467 1468 + 1470: 36(ptr) AccessChain 31(data) 1465 34 35 Store 1470 1469 1471: 6(int) Load 8(invocation) - 1472: 40(ptr) AccessChain 31(data) 63 33 - 1473: 17(ivec4) Load 1472 - 1474: 96(ivec2) VectorShuffle 1473 1473 0 1 + 1472: 44(ptr) AccessChain 31(data) 63 34 + 1473: 23(fvec4) Load 1472 + 1474: 43(fvec2) VectorShuffle 1473 1473 0 1 1475: 17(ivec4) Load 19(ballot) - 1476: 96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1474 1475 - 1477: 40(ptr) AccessChain 31(data) 1471 33 - 1478: 17(ivec4) Load 1477 - 1479: 17(ivec4) VectorShuffle 1478 1476 4 5 2 3 - Store 1477 1479 - 1480: 6(int) Load 8(invocation) - 1481: 40(ptr) AccessChain 31(data) 33 33 - 1482: 17(ivec4) Load 1481 - 1483: 103(ivec3) VectorShuffle 1482 1482 0 1 2 - 1484: 17(ivec4) Load 19(ballot) - 1485: 103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1483 1484 - 1486: 40(ptr) AccessChain 31(data) 1480 33 - 1487: 17(ivec4) Load 1486 - 1488: 17(ivec4) VectorShuffle 1487 1485 4 5 6 3 - Store 1486 1488 - 1489: 6(int) Load 8(invocation) - 1490: 40(ptr) AccessChain 31(data) 115 33 - 1491: 17(ivec4) Load 1490 - 1492: 17(ivec4) Load 19(ballot) - 1493: 17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1491 1492 - 1494: 40(ptr) AccessChain 31(data) 1489 33 - Store 1494 1493 - 1495: 6(int) Load 8(invocation) - 1496: 64(ptr) AccessChain 31(data) 34 63 35 - 1497: 24(int) Load 1496 - 1498: 144(bool) SLessThan 1497 34 - 1499: 17(ivec4) Load 19(ballot) - 1500: 144(bool) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1498 1499 - 1501: 24(int) Select 1500 63 34 - 1502: 64(ptr) AccessChain 31(data) 1495 63 35 - Store 1502 1501 - 1503: 6(int) Load 8(invocation) - 1504: 71(ptr) AccessChain 31(data) 63 63 - 1505: 25(ivec4) Load 1504 - 1506: 70(ivec2) VectorShuffle 1505 1505 0 1 - 1507: 152(bvec2) SLessThan 1506 727 - 1508: 17(ivec4) Load 19(ballot) - 1509: 152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1507 1508 - 1510: 70(ivec2) Select 1509 731 727 - 1511: 71(ptr) AccessChain 31(data) 1503 63 - 1512: 25(ivec4) Load 1511 - 1513: 25(ivec4) VectorShuffle 1512 1510 4 5 2 3 - Store 1511 1513 - 1514: 6(int) Load 8(invocation) - 1515: 71(ptr) AccessChain 31(data) 63 63 - 1516: 25(ivec4) Load 1515 - 1517: 78(ivec3) VectorShuffle 1516 1516 0 1 2 - 1518: 161(bvec3) SLessThan 1517 740 + 1476: 43(fvec2) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1474 1475 + 1477: 36(ptr) AccessChain 31(data) 1471 34 35 + 1478: 22(float) CompositeExtract 1476 0 + Store 1477 1478 + 1479: 36(ptr) AccessChain 31(data) 1471 34 189 + 1480: 22(float) CompositeExtract 1476 1 + Store 1479 1480 + 1481: 6(int) Load 8(invocation) + 1482: 44(ptr) AccessChain 31(data) 33 34 + 1483: 23(fvec4) Load 1482 + 1484: 51(fvec3) VectorShuffle 1483 1483 0 1 2 + 1485: 17(ivec4) Load 19(ballot) + 1486: 51(fvec3) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1484 1485 + 1487: 36(ptr) AccessChain 31(data) 1481 34 35 + 1488: 22(float) CompositeExtract 1486 0 + Store 1487 1488 + 1489: 36(ptr) AccessChain 31(data) 1481 34 189 + 1490: 22(float) CompositeExtract 1486 1 + Store 1489 1490 + 1491: 36(ptr) AccessChain 31(data) 1481 34 202 + 1492: 22(float) CompositeExtract 1486 2 + Store 1491 1492 + 1493: 6(int) Load 8(invocation) + 1494: 44(ptr) AccessChain 31(data) 115 34 + 1495: 23(fvec4) Load 1494 + 1496: 17(ivec4) Load 19(ballot) + 1497: 23(fvec4) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1495 1496 + 1498: 44(ptr) AccessChain 31(data) 1493 34 + Store 1498 1497 + 1499: 6(int) Load 8(invocation) + 1500: 64(ptr) AccessChain 31(data) 34 63 35 + 1501: 24(int) Load 1500 + 1502: 17(ivec4) Load 19(ballot) + 1503: 24(int) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1501 1502 + 1504: 64(ptr) AccessChain 31(data) 1499 63 35 + Store 1504 1503 + 1505: 6(int) Load 8(invocation) + 1506: 71(ptr) AccessChain 31(data) 63 63 + 1507: 25(ivec4) Load 1506 + 1508: 70(ivec2) VectorShuffle 1507 1507 0 1 + 1509: 17(ivec4) Load 19(ballot) + 1510: 70(ivec2) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1508 1509 + 1511: 64(ptr) AccessChain 31(data) 1505 63 35 + 1512: 24(int) CompositeExtract 1510 0 + Store 1511 1512 + 1513: 64(ptr) AccessChain 31(data) 1505 63 189 + 1514: 24(int) CompositeExtract 1510 1 + Store 1513 1514 + 1515: 6(int) Load 8(invocation) + 1516: 71(ptr) AccessChain 31(data) 33 63 + 1517: 25(ivec4) Load 1516 + 1518: 78(ivec3) VectorShuffle 1517 1517 0 1 2 1519: 17(ivec4) Load 19(ballot) - 1520: 161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1518 1519 - 1521: 78(ivec3) Select 1520 744 740 - 1522: 71(ptr) AccessChain 31(data) 1514 63 - 1523: 25(ivec4) Load 1522 - 1524: 25(ivec4) VectorShuffle 1523 1521 4 5 6 3 - Store 1522 1524 - 1525: 6(int) Load 8(invocation) - 1526: 71(ptr) AccessChain 31(data) 63 63 - 1527: 25(ivec4) Load 1526 - 1528: 169(bvec4) SLessThan 1527 752 - 1529: 17(ivec4) Load 19(ballot) - 1530: 169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1528 1529 - 1531: 25(ivec4) Select 1530 756 752 - 1532: 71(ptr) AccessChain 31(data) 1525 63 + 1520: 78(ivec3) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1518 1519 + 1521: 64(ptr) AccessChain 31(data) 1515 63 35 + 1522: 24(int) CompositeExtract 1520 0 + Store 1521 1522 + 1523: 64(ptr) AccessChain 31(data) 1515 63 189 + 1524: 24(int) CompositeExtract 1520 1 + Store 1523 1524 + 1525: 64(ptr) AccessChain 31(data) 1515 63 202 + 1526: 24(int) CompositeExtract 1520 2 + Store 1525 1526 + 1527: 6(int) Load 8(invocation) + 1528: 71(ptr) AccessChain 31(data) 115 63 + 1529: 25(ivec4) Load 1528 + 1530: 17(ivec4) Load 19(ballot) + 1531: 25(ivec4) GroupNonUniformSMax 178 PartitionedInclusiveScanNV 1529 1530 + 1532: 71(ptr) AccessChain 31(data) 1527 63 Store 1532 1531 1533: 6(int) Load 8(invocation) - 1534: 64(ptr) AccessChain 31(data) 34 63 35 - 1535: 24(int) Load 1534 + 1534: 90(ptr) AccessChain 31(data) 34 33 35 + 1535: 6(int) Load 1534 1536: 17(ivec4) Load 19(ballot) - 1537: 24(int) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1535 1536 - 1538: 64(ptr) AccessChain 31(data) 1533 63 35 + 1537: 6(int) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1535 1536 + 1538: 90(ptr) AccessChain 31(data) 1533 33 35 Store 1538 1537 1539: 6(int) Load 8(invocation) - 1540: 71(ptr) AccessChain 31(data) 63 63 - 1541: 25(ivec4) Load 1540 - 1542: 70(ivec2) VectorShuffle 1541 1541 0 1 + 1540: 40(ptr) AccessChain 31(data) 63 33 + 1541: 17(ivec4) Load 1540 + 1542: 96(ivec2) VectorShuffle 1541 1541 0 1 1543: 17(ivec4) Load 19(ballot) - 1544: 70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1542 1543 - 1545: 71(ptr) AccessChain 31(data) 1539 63 - 1546: 25(ivec4) Load 1545 - 1547: 25(ivec4) VectorShuffle 1546 1544 4 5 2 3 - Store 1545 1547 - 1548: 6(int) Load 8(invocation) - 1549: 71(ptr) AccessChain 31(data) 33 63 - 1550: 25(ivec4) Load 1549 - 1551: 78(ivec3) VectorShuffle 1550 1550 0 1 2 - 1552: 17(ivec4) Load 19(ballot) - 1553: 78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1551 1552 - 1554: 71(ptr) AccessChain 31(data) 1548 63 - 1555: 25(ivec4) Load 1554 - 1556: 25(ivec4) VectorShuffle 1555 1553 4 5 6 3 - Store 1554 1556 - 1557: 6(int) Load 8(invocation) - 1558: 71(ptr) AccessChain 31(data) 115 63 - 1559: 25(ivec4) Load 1558 - 1560: 17(ivec4) Load 19(ballot) - 1561: 25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1559 1560 - 1562: 71(ptr) AccessChain 31(data) 1557 63 - Store 1562 1561 - 1563: 6(int) Load 8(invocation) - 1564: 90(ptr) AccessChain 31(data) 34 33 35 - 1565: 6(int) Load 1564 - 1566: 17(ivec4) Load 19(ballot) - 1567: 6(int) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1565 1566 - 1568: 90(ptr) AccessChain 31(data) 1563 33 35 - Store 1568 1567 - 1569: 6(int) Load 8(invocation) - 1570: 40(ptr) AccessChain 31(data) 63 33 - 1571: 17(ivec4) Load 1570 - 1572: 96(ivec2) VectorShuffle 1571 1571 0 1 - 1573: 17(ivec4) Load 19(ballot) - 1574: 96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1572 1573 - 1575: 40(ptr) AccessChain 31(data) 1569 33 - 1576: 17(ivec4) Load 1575 - 1577: 17(ivec4) VectorShuffle 1576 1574 4 5 2 3 - Store 1575 1577 - 1578: 6(int) Load 8(invocation) - 1579: 40(ptr) AccessChain 31(data) 33 33 - 1580: 17(ivec4) Load 1579 - 1581: 103(ivec3) VectorShuffle 1580 1580 0 1 2 - 1582: 17(ivec4) Load 19(ballot) - 1583: 103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1581 1582 - 1584: 40(ptr) AccessChain 31(data) 1578 33 - 1585: 17(ivec4) Load 1584 - 1586: 17(ivec4) VectorShuffle 1585 1583 4 5 6 3 - Store 1584 1586 - 1587: 6(int) Load 8(invocation) - 1588: 40(ptr) AccessChain 31(data) 115 33 - 1589: 17(ivec4) Load 1588 - 1590: 17(ivec4) Load 19(ballot) - 1591: 17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1589 1590 - 1592: 40(ptr) AccessChain 31(data) 1587 33 - Store 1592 1591 - 1593: 6(int) Load 8(invocation) - 1594: 64(ptr) AccessChain 31(data) 34 63 35 - 1595: 24(int) Load 1594 - 1596: 144(bool) SLessThan 1595 34 - 1597: 17(ivec4) Load 19(ballot) - 1598: 144(bool) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1596 1597 - 1599: 24(int) Select 1598 63 34 - 1600: 64(ptr) AccessChain 31(data) 1593 63 35 + 1544: 96(ivec2) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1542 1543 + 1545: 90(ptr) AccessChain 31(data) 1539 33 35 + 1546: 6(int) CompositeExtract 1544 0 + Store 1545 1546 + 1547: 90(ptr) AccessChain 31(data) 1539 33 189 + 1548: 6(int) CompositeExtract 1544 1 + Store 1547 1548 + 1549: 6(int) Load 8(invocation) + 1550: 40(ptr) AccessChain 31(data) 33 33 + 1551: 17(ivec4) Load 1550 + 1552: 103(ivec3) VectorShuffle 1551 1551 0 1 2 + 1553: 17(ivec4) Load 19(ballot) + 1554: 103(ivec3) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1552 1553 + 1555: 90(ptr) AccessChain 31(data) 1549 33 35 + 1556: 6(int) CompositeExtract 1554 0 + Store 1555 1556 + 1557: 90(ptr) AccessChain 31(data) 1549 33 189 + 1558: 6(int) CompositeExtract 1554 1 + Store 1557 1558 + 1559: 90(ptr) AccessChain 31(data) 1549 33 202 + 1560: 6(int) CompositeExtract 1554 2 + Store 1559 1560 + 1561: 6(int) Load 8(invocation) + 1562: 40(ptr) AccessChain 31(data) 115 33 + 1563: 17(ivec4) Load 1562 + 1564: 17(ivec4) Load 19(ballot) + 1565: 17(ivec4) GroupNonUniformUMax 178 PartitionedInclusiveScanNV 1563 1564 + 1566: 40(ptr) AccessChain 31(data) 1561 33 + Store 1566 1565 + 1567: 6(int) Load 8(invocation) + 1568: 116(ptr) AccessChain 31(data) 34 115 35 + 1569:26(float64_t) Load 1568 + 1570: 17(ivec4) Load 19(ballot) + 1571:26(float64_t) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1569 1570 + 1572: 116(ptr) AccessChain 31(data) 1567 115 35 + Store 1572 1571 + 1573: 6(int) Load 8(invocation) + 1574: 123(ptr) AccessChain 31(data) 63 115 + 1575: 27(f64vec4) Load 1574 + 1576:122(f64vec2) VectorShuffle 1575 1575 0 1 + 1577: 17(ivec4) Load 19(ballot) + 1578:122(f64vec2) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1576 1577 + 1579: 116(ptr) AccessChain 31(data) 1573 115 35 + 1580:26(float64_t) CompositeExtract 1578 0 + Store 1579 1580 + 1581: 116(ptr) AccessChain 31(data) 1573 115 189 + 1582:26(float64_t) CompositeExtract 1578 1 + Store 1581 1582 + 1583: 6(int) Load 8(invocation) + 1584: 123(ptr) AccessChain 31(data) 33 115 + 1585: 27(f64vec4) Load 1584 + 1586:130(f64vec3) VectorShuffle 1585 1585 0 1 2 + 1587: 17(ivec4) Load 19(ballot) + 1588:130(f64vec3) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1586 1587 + 1589: 116(ptr) AccessChain 31(data) 1583 115 35 + 1590:26(float64_t) CompositeExtract 1588 0 + Store 1589 1590 + 1591: 116(ptr) AccessChain 31(data) 1583 115 189 + 1592:26(float64_t) CompositeExtract 1588 1 + Store 1591 1592 + 1593: 116(ptr) AccessChain 31(data) 1583 115 202 + 1594:26(float64_t) CompositeExtract 1588 2 + Store 1593 1594 + 1595: 6(int) Load 8(invocation) + 1596: 123(ptr) AccessChain 31(data) 115 115 + 1597: 27(f64vec4) Load 1596 + 1598: 17(ivec4) Load 19(ballot) + 1599: 27(f64vec4) GroupNonUniformFMax 178 PartitionedInclusiveScanNV 1597 1598 + 1600: 123(ptr) AccessChain 31(data) 1595 115 Store 1600 1599 1601: 6(int) Load 8(invocation) - 1602: 71(ptr) AccessChain 31(data) 63 63 - 1603: 25(ivec4) Load 1602 - 1604: 70(ivec2) VectorShuffle 1603 1603 0 1 - 1605: 152(bvec2) SLessThan 1604 727 - 1606: 17(ivec4) Load 19(ballot) - 1607: 152(bvec2) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1605 1606 - 1608: 70(ivec2) Select 1607 731 727 - 1609: 71(ptr) AccessChain 31(data) 1601 63 - 1610: 25(ivec4) Load 1609 - 1611: 25(ivec4) VectorShuffle 1610 1608 4 5 2 3 - Store 1609 1611 - 1612: 6(int) Load 8(invocation) - 1613: 71(ptr) AccessChain 31(data) 63 63 - 1614: 25(ivec4) Load 1613 - 1615: 78(ivec3) VectorShuffle 1614 1614 0 1 2 - 1616: 161(bvec3) SLessThan 1615 740 - 1617: 17(ivec4) Load 19(ballot) - 1618: 161(bvec3) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1616 1617 - 1619: 78(ivec3) Select 1618 744 740 - 1620: 71(ptr) AccessChain 31(data) 1612 63 - 1621: 25(ivec4) Load 1620 - 1622: 25(ivec4) VectorShuffle 1621 1619 4 5 6 3 - Store 1620 1622 - 1623: 6(int) Load 8(invocation) - 1624: 71(ptr) AccessChain 31(data) 63 63 - 1625: 25(ivec4) Load 1624 - 1626: 169(bvec4) SLessThan 1625 752 - 1627: 17(ivec4) Load 19(ballot) - 1628: 169(bvec4) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1626 1627 - 1629: 25(ivec4) Select 1628 756 752 - 1630: 71(ptr) AccessChain 31(data) 1623 63 - Store 1630 1629 - 1631: 6(int) Load 8(invocation) - 1632: 64(ptr) AccessChain 31(data) 34 63 35 - 1633: 24(int) Load 1632 - 1634: 17(ivec4) Load 19(ballot) - 1635: 24(int) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1633 1634 - 1636: 64(ptr) AccessChain 31(data) 1631 63 35 - Store 1636 1635 - 1637: 6(int) Load 8(invocation) - 1638: 71(ptr) AccessChain 31(data) 63 63 - 1639: 25(ivec4) Load 1638 - 1640: 70(ivec2) VectorShuffle 1639 1639 0 1 - 1641: 17(ivec4) Load 19(ballot) - 1642: 70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1640 1641 - 1643: 71(ptr) AccessChain 31(data) 1637 63 - 1644: 25(ivec4) Load 1643 - 1645: 25(ivec4) VectorShuffle 1644 1642 4 5 2 3 - Store 1643 1645 - 1646: 6(int) Load 8(invocation) - 1647: 71(ptr) AccessChain 31(data) 33 63 - 1648: 25(ivec4) Load 1647 - 1649: 78(ivec3) VectorShuffle 1648 1648 0 1 2 - 1650: 17(ivec4) Load 19(ballot) - 1651: 78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1649 1650 - 1652: 71(ptr) AccessChain 31(data) 1646 63 - 1653: 25(ivec4) Load 1652 - 1654: 25(ivec4) VectorShuffle 1653 1651 4 5 6 3 - Store 1652 1654 - 1655: 6(int) Load 8(invocation) - 1656: 71(ptr) AccessChain 31(data) 115 63 - 1657: 25(ivec4) Load 1656 - 1658: 17(ivec4) Load 19(ballot) - 1659: 25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1657 1658 - 1660: 71(ptr) AccessChain 31(data) 1655 63 - Store 1660 1659 - 1661: 6(int) Load 8(invocation) - 1662: 90(ptr) AccessChain 31(data) 34 33 35 - 1663: 6(int) Load 1662 - 1664: 17(ivec4) Load 19(ballot) - 1665: 6(int) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1663 1664 - 1666: 90(ptr) AccessChain 31(data) 1661 33 35 - Store 1666 1665 - 1667: 6(int) Load 8(invocation) - 1668: 40(ptr) AccessChain 31(data) 63 33 - 1669: 17(ivec4) Load 1668 - 1670: 96(ivec2) VectorShuffle 1669 1669 0 1 - 1671: 17(ivec4) Load 19(ballot) - 1672: 96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1670 1671 - 1673: 40(ptr) AccessChain 31(data) 1667 33 - 1674: 17(ivec4) Load 1673 - 1675: 17(ivec4) VectorShuffle 1674 1672 4 5 2 3 - Store 1673 1675 - 1676: 6(int) Load 8(invocation) - 1677: 40(ptr) AccessChain 31(data) 33 33 - 1678: 17(ivec4) Load 1677 - 1679: 103(ivec3) VectorShuffle 1678 1678 0 1 2 - 1680: 17(ivec4) Load 19(ballot) - 1681: 103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1679 1680 - 1682: 40(ptr) AccessChain 31(data) 1676 33 - 1683: 17(ivec4) Load 1682 - 1684: 17(ivec4) VectorShuffle 1683 1681 4 5 6 3 - Store 1682 1684 - 1685: 6(int) Load 8(invocation) - 1686: 40(ptr) AccessChain 31(data) 115 33 - 1687: 17(ivec4) Load 1686 - 1688: 17(ivec4) Load 19(ballot) - 1689: 17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1687 1688 - 1690: 40(ptr) AccessChain 31(data) 1685 33 - Store 1690 1689 - 1691: 6(int) Load 8(invocation) - 1692: 64(ptr) AccessChain 31(data) 34 63 35 - 1693: 24(int) Load 1692 - 1694: 144(bool) SLessThan 1693 34 - 1695: 17(ivec4) Load 19(ballot) - 1696: 144(bool) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1694 1695 - 1697: 24(int) Select 1696 63 34 - 1698: 64(ptr) AccessChain 31(data) 1691 63 35 - Store 1698 1697 - 1699: 6(int) Load 8(invocation) - 1700: 71(ptr) AccessChain 31(data) 63 63 - 1701: 25(ivec4) Load 1700 - 1702: 70(ivec2) VectorShuffle 1701 1701 0 1 - 1703: 152(bvec2) SLessThan 1702 727 - 1704: 17(ivec4) Load 19(ballot) - 1705: 152(bvec2) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1703 1704 - 1706: 70(ivec2) Select 1705 731 727 - 1707: 71(ptr) AccessChain 31(data) 1699 63 - 1708: 25(ivec4) Load 1707 - 1709: 25(ivec4) VectorShuffle 1708 1706 4 5 2 3 - Store 1707 1709 - 1710: 6(int) Load 8(invocation) - 1711: 71(ptr) AccessChain 31(data) 63 63 - 1712: 25(ivec4) Load 1711 - 1713: 78(ivec3) VectorShuffle 1712 1712 0 1 2 - 1714: 161(bvec3) SLessThan 1713 740 - 1715: 17(ivec4) Load 19(ballot) - 1716: 161(bvec3) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1714 1715 - 1717: 78(ivec3) Select 1716 744 740 - 1718: 71(ptr) AccessChain 31(data) 1710 63 + 1602: 64(ptr) AccessChain 31(data) 34 63 35 + 1603: 24(int) Load 1602 + 1604: 17(ivec4) Load 19(ballot) + 1605: 24(int) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1603 1604 + 1606: 64(ptr) AccessChain 31(data) 1601 63 35 + Store 1606 1605 + 1607: 6(int) Load 8(invocation) + 1608: 71(ptr) AccessChain 31(data) 63 63 + 1609: 25(ivec4) Load 1608 + 1610: 70(ivec2) VectorShuffle 1609 1609 0 1 + 1611: 17(ivec4) Load 19(ballot) + 1612: 70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1610 1611 + 1613: 64(ptr) AccessChain 31(data) 1607 63 35 + 1614: 24(int) CompositeExtract 1612 0 + Store 1613 1614 + 1615: 64(ptr) AccessChain 31(data) 1607 63 189 + 1616: 24(int) CompositeExtract 1612 1 + Store 1615 1616 + 1617: 6(int) Load 8(invocation) + 1618: 71(ptr) AccessChain 31(data) 33 63 + 1619: 25(ivec4) Load 1618 + 1620: 78(ivec3) VectorShuffle 1619 1619 0 1 2 + 1621: 17(ivec4) Load 19(ballot) + 1622: 78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1620 1621 + 1623: 64(ptr) AccessChain 31(data) 1617 63 35 + 1624: 24(int) CompositeExtract 1622 0 + Store 1623 1624 + 1625: 64(ptr) AccessChain 31(data) 1617 63 189 + 1626: 24(int) CompositeExtract 1622 1 + Store 1625 1626 + 1627: 64(ptr) AccessChain 31(data) 1617 63 202 + 1628: 24(int) CompositeExtract 1622 2 + Store 1627 1628 + 1629: 6(int) Load 8(invocation) + 1630: 71(ptr) AccessChain 31(data) 115 63 + 1631: 25(ivec4) Load 1630 + 1632: 17(ivec4) Load 19(ballot) + 1633: 25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1631 1632 + 1634: 71(ptr) AccessChain 31(data) 1629 63 + Store 1634 1633 + 1635: 6(int) Load 8(invocation) + 1636: 90(ptr) AccessChain 31(data) 34 33 35 + 1637: 6(int) Load 1636 + 1638: 17(ivec4) Load 19(ballot) + 1639: 6(int) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1637 1638 + 1640: 90(ptr) AccessChain 31(data) 1635 33 35 + Store 1640 1639 + 1641: 6(int) Load 8(invocation) + 1642: 40(ptr) AccessChain 31(data) 63 33 + 1643: 17(ivec4) Load 1642 + 1644: 96(ivec2) VectorShuffle 1643 1643 0 1 + 1645: 17(ivec4) Load 19(ballot) + 1646: 96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1644 1645 + 1647: 90(ptr) AccessChain 31(data) 1641 33 35 + 1648: 6(int) CompositeExtract 1646 0 + Store 1647 1648 + 1649: 90(ptr) AccessChain 31(data) 1641 33 189 + 1650: 6(int) CompositeExtract 1646 1 + Store 1649 1650 + 1651: 6(int) Load 8(invocation) + 1652: 40(ptr) AccessChain 31(data) 33 33 + 1653: 17(ivec4) Load 1652 + 1654: 103(ivec3) VectorShuffle 1653 1653 0 1 2 + 1655: 17(ivec4) Load 19(ballot) + 1656: 103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1654 1655 + 1657: 90(ptr) AccessChain 31(data) 1651 33 35 + 1658: 6(int) CompositeExtract 1656 0 + Store 1657 1658 + 1659: 90(ptr) AccessChain 31(data) 1651 33 189 + 1660: 6(int) CompositeExtract 1656 1 + Store 1659 1660 + 1661: 90(ptr) AccessChain 31(data) 1651 33 202 + 1662: 6(int) CompositeExtract 1656 2 + Store 1661 1662 + 1663: 6(int) Load 8(invocation) + 1664: 40(ptr) AccessChain 31(data) 115 33 + 1665: 17(ivec4) Load 1664 + 1666: 17(ivec4) Load 19(ballot) + 1667: 17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedInclusiveScanNV 1665 1666 + 1668: 40(ptr) AccessChain 31(data) 1663 33 + Store 1668 1667 + 1669: 6(int) Load 8(invocation) + 1670: 64(ptr) AccessChain 31(data) 34 63 35 + 1671: 24(int) Load 1670 + 1672: 144(bool) SLessThan 1671 34 + 1673: 17(ivec4) Load 19(ballot) + 1674: 144(bool) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1672 1673 + 1675: 24(int) Select 1674 63 34 + 1676: 64(ptr) AccessChain 31(data) 1669 63 35 + Store 1676 1675 + 1677: 6(int) Load 8(invocation) + 1678: 71(ptr) AccessChain 31(data) 63 63 + 1679: 25(ivec4) Load 1678 + 1680: 70(ivec2) VectorShuffle 1679 1679 0 1 + 1681: 152(bvec2) SLessThan 1680 801 + 1682: 17(ivec4) Load 19(ballot) + 1683: 152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1681 1682 + 1684: 70(ivec2) Select 1683 805 801 + 1685: 64(ptr) AccessChain 31(data) 1677 63 35 + 1686: 24(int) CompositeExtract 1684 0 + Store 1685 1686 + 1687: 64(ptr) AccessChain 31(data) 1677 63 189 + 1688: 24(int) CompositeExtract 1684 1 + Store 1687 1688 + 1689: 6(int) Load 8(invocation) + 1690: 71(ptr) AccessChain 31(data) 63 63 + 1691: 25(ivec4) Load 1690 + 1692: 78(ivec3) VectorShuffle 1691 1691 0 1 2 + 1693: 161(bvec3) SLessThan 1692 815 + 1694: 17(ivec4) Load 19(ballot) + 1695: 161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1693 1694 + 1696: 78(ivec3) Select 1695 819 815 + 1697: 64(ptr) AccessChain 31(data) 1689 63 35 + 1698: 24(int) CompositeExtract 1696 0 + Store 1697 1698 + 1699: 64(ptr) AccessChain 31(data) 1689 63 189 + 1700: 24(int) CompositeExtract 1696 1 + Store 1699 1700 + 1701: 64(ptr) AccessChain 31(data) 1689 63 202 + 1702: 24(int) CompositeExtract 1696 2 + Store 1701 1702 + 1703: 6(int) Load 8(invocation) + 1704: 71(ptr) AccessChain 31(data) 63 63 + 1705: 25(ivec4) Load 1704 + 1706: 169(bvec4) SLessThan 1705 830 + 1707: 17(ivec4) Load 19(ballot) + 1708: 169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedInclusiveScanNV 1706 1707 + 1709: 25(ivec4) Select 1708 834 830 + 1710: 71(ptr) AccessChain 31(data) 1703 63 + Store 1710 1709 + 1711: 6(int) Load 8(invocation) + 1712: 64(ptr) AccessChain 31(data) 34 63 35 + 1713: 24(int) Load 1712 + 1714: 17(ivec4) Load 19(ballot) + 1715: 24(int) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1713 1714 + 1716: 64(ptr) AccessChain 31(data) 1711 63 35 + Store 1716 1715 + 1717: 6(int) Load 8(invocation) + 1718: 71(ptr) AccessChain 31(data) 63 63 1719: 25(ivec4) Load 1718 - 1720: 25(ivec4) VectorShuffle 1719 1717 4 5 6 3 - Store 1718 1720 - 1721: 6(int) Load 8(invocation) - 1722: 71(ptr) AccessChain 31(data) 63 63 - 1723: 25(ivec4) Load 1722 - 1724: 169(bvec4) SLessThan 1723 752 - 1725: 17(ivec4) Load 19(ballot) - 1726: 169(bvec4) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1724 1725 - 1727: 25(ivec4) Select 1726 756 752 - 1728: 71(ptr) AccessChain 31(data) 1721 63 - Store 1728 1727 - 1729: 6(int) Load 8(invocation) - 1730: 36(ptr) AccessChain 31(data) 34 34 35 - 1731: 22(float) Load 1730 - 1732: 17(ivec4) Load 19(ballot) - 1733: 22(float) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1731 1732 - 1734: 36(ptr) AccessChain 31(data) 1729 34 35 - Store 1734 1733 - 1735: 6(int) Load 8(invocation) - 1736: 44(ptr) AccessChain 31(data) 63 34 - 1737: 23(fvec4) Load 1736 - 1738: 43(fvec2) VectorShuffle 1737 1737 0 1 - 1739: 17(ivec4) Load 19(ballot) - 1740: 43(fvec2) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1738 1739 - 1741: 44(ptr) AccessChain 31(data) 1735 34 - 1742: 23(fvec4) Load 1741 - 1743: 23(fvec4) VectorShuffle 1742 1740 4 5 2 3 - Store 1741 1743 - 1744: 6(int) Load 8(invocation) - 1745: 44(ptr) AccessChain 31(data) 33 34 - 1746: 23(fvec4) Load 1745 - 1747: 51(fvec3) VectorShuffle 1746 1746 0 1 2 + 1720: 70(ivec2) VectorShuffle 1719 1719 0 1 + 1721: 17(ivec4) Load 19(ballot) + 1722: 70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1720 1721 + 1723: 64(ptr) AccessChain 31(data) 1717 63 35 + 1724: 24(int) CompositeExtract 1722 0 + Store 1723 1724 + 1725: 64(ptr) AccessChain 31(data) 1717 63 189 + 1726: 24(int) CompositeExtract 1722 1 + Store 1725 1726 + 1727: 6(int) Load 8(invocation) + 1728: 71(ptr) AccessChain 31(data) 33 63 + 1729: 25(ivec4) Load 1728 + 1730: 78(ivec3) VectorShuffle 1729 1729 0 1 2 + 1731: 17(ivec4) Load 19(ballot) + 1732: 78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1730 1731 + 1733: 64(ptr) AccessChain 31(data) 1727 63 35 + 1734: 24(int) CompositeExtract 1732 0 + Store 1733 1734 + 1735: 64(ptr) AccessChain 31(data) 1727 63 189 + 1736: 24(int) CompositeExtract 1732 1 + Store 1735 1736 + 1737: 64(ptr) AccessChain 31(data) 1727 63 202 + 1738: 24(int) CompositeExtract 1732 2 + Store 1737 1738 + 1739: 6(int) Load 8(invocation) + 1740: 71(ptr) AccessChain 31(data) 115 63 + 1741: 25(ivec4) Load 1740 + 1742: 17(ivec4) Load 19(ballot) + 1743: 25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1741 1742 + 1744: 71(ptr) AccessChain 31(data) 1739 63 + Store 1744 1743 + 1745: 6(int) Load 8(invocation) + 1746: 90(ptr) AccessChain 31(data) 34 33 35 + 1747: 6(int) Load 1746 1748: 17(ivec4) Load 19(ballot) - 1749: 51(fvec3) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1747 1748 - 1750: 44(ptr) AccessChain 31(data) 1744 34 - 1751: 23(fvec4) Load 1750 - 1752: 23(fvec4) VectorShuffle 1751 1749 4 5 6 3 - Store 1750 1752 - 1753: 6(int) Load 8(invocation) - 1754: 44(ptr) AccessChain 31(data) 115 34 - 1755: 23(fvec4) Load 1754 - 1756: 17(ivec4) Load 19(ballot) - 1757: 23(fvec4) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1755 1756 - 1758: 44(ptr) AccessChain 31(data) 1753 34 - Store 1758 1757 - 1759: 6(int) Load 8(invocation) - 1760: 64(ptr) AccessChain 31(data) 34 63 35 - 1761: 24(int) Load 1760 - 1762: 17(ivec4) Load 19(ballot) - 1763: 24(int) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1761 1762 - 1764: 64(ptr) AccessChain 31(data) 1759 63 35 - Store 1764 1763 - 1765: 6(int) Load 8(invocation) - 1766: 71(ptr) AccessChain 31(data) 63 63 - 1767: 25(ivec4) Load 1766 - 1768: 70(ivec2) VectorShuffle 1767 1767 0 1 - 1769: 17(ivec4) Load 19(ballot) - 1770: 70(ivec2) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1768 1769 - 1771: 71(ptr) AccessChain 31(data) 1765 63 - 1772: 25(ivec4) Load 1771 - 1773: 25(ivec4) VectorShuffle 1772 1770 4 5 2 3 - Store 1771 1773 - 1774: 6(int) Load 8(invocation) - 1775: 71(ptr) AccessChain 31(data) 33 63 - 1776: 25(ivec4) Load 1775 - 1777: 78(ivec3) VectorShuffle 1776 1776 0 1 2 - 1778: 17(ivec4) Load 19(ballot) - 1779: 78(ivec3) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1777 1778 - 1780: 71(ptr) AccessChain 31(data) 1774 63 - 1781: 25(ivec4) Load 1780 - 1782: 25(ivec4) VectorShuffle 1781 1779 4 5 6 3 - Store 1780 1782 - 1783: 6(int) Load 8(invocation) - 1784: 71(ptr) AccessChain 31(data) 115 63 - 1785: 25(ivec4) Load 1784 - 1786: 17(ivec4) Load 19(ballot) - 1787: 25(ivec4) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1785 1786 - 1788: 71(ptr) AccessChain 31(data) 1783 63 - Store 1788 1787 - 1789: 6(int) Load 8(invocation) - 1790: 90(ptr) AccessChain 31(data) 34 33 35 - 1791: 6(int) Load 1790 + 1749: 6(int) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1747 1748 + 1750: 90(ptr) AccessChain 31(data) 1745 33 35 + Store 1750 1749 + 1751: 6(int) Load 8(invocation) + 1752: 40(ptr) AccessChain 31(data) 63 33 + 1753: 17(ivec4) Load 1752 + 1754: 96(ivec2) VectorShuffle 1753 1753 0 1 + 1755: 17(ivec4) Load 19(ballot) + 1756: 96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1754 1755 + 1757: 90(ptr) AccessChain 31(data) 1751 33 35 + 1758: 6(int) CompositeExtract 1756 0 + Store 1757 1758 + 1759: 90(ptr) AccessChain 31(data) 1751 33 189 + 1760: 6(int) CompositeExtract 1756 1 + Store 1759 1760 + 1761: 6(int) Load 8(invocation) + 1762: 40(ptr) AccessChain 31(data) 33 33 + 1763: 17(ivec4) Load 1762 + 1764: 103(ivec3) VectorShuffle 1763 1763 0 1 2 + 1765: 17(ivec4) Load 19(ballot) + 1766: 103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1764 1765 + 1767: 90(ptr) AccessChain 31(data) 1761 33 35 + 1768: 6(int) CompositeExtract 1766 0 + Store 1767 1768 + 1769: 90(ptr) AccessChain 31(data) 1761 33 189 + 1770: 6(int) CompositeExtract 1766 1 + Store 1769 1770 + 1771: 90(ptr) AccessChain 31(data) 1761 33 202 + 1772: 6(int) CompositeExtract 1766 2 + Store 1771 1772 + 1773: 6(int) Load 8(invocation) + 1774: 40(ptr) AccessChain 31(data) 115 33 + 1775: 17(ivec4) Load 1774 + 1776: 17(ivec4) Load 19(ballot) + 1777: 17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedInclusiveScanNV 1775 1776 + 1778: 40(ptr) AccessChain 31(data) 1773 33 + Store 1778 1777 + 1779: 6(int) Load 8(invocation) + 1780: 64(ptr) AccessChain 31(data) 34 63 35 + 1781: 24(int) Load 1780 + 1782: 144(bool) SLessThan 1781 34 + 1783: 17(ivec4) Load 19(ballot) + 1784: 144(bool) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1782 1783 + 1785: 24(int) Select 1784 63 34 + 1786: 64(ptr) AccessChain 31(data) 1779 63 35 + Store 1786 1785 + 1787: 6(int) Load 8(invocation) + 1788: 71(ptr) AccessChain 31(data) 63 63 + 1789: 25(ivec4) Load 1788 + 1790: 70(ivec2) VectorShuffle 1789 1789 0 1 + 1791: 152(bvec2) SLessThan 1790 801 1792: 17(ivec4) Load 19(ballot) - 1793: 6(int) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1791 1792 - 1794: 90(ptr) AccessChain 31(data) 1789 33 35 - Store 1794 1793 - 1795: 6(int) Load 8(invocation) - 1796: 40(ptr) AccessChain 31(data) 63 33 - 1797: 17(ivec4) Load 1796 - 1798: 96(ivec2) VectorShuffle 1797 1797 0 1 - 1799: 17(ivec4) Load 19(ballot) - 1800: 96(ivec2) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1798 1799 - 1801: 40(ptr) AccessChain 31(data) 1795 33 - 1802: 17(ivec4) Load 1801 - 1803: 17(ivec4) VectorShuffle 1802 1800 4 5 2 3 - Store 1801 1803 - 1804: 6(int) Load 8(invocation) - 1805: 40(ptr) AccessChain 31(data) 33 33 - 1806: 17(ivec4) Load 1805 - 1807: 103(ivec3) VectorShuffle 1806 1806 0 1 2 - 1808: 17(ivec4) Load 19(ballot) - 1809: 103(ivec3) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1807 1808 - 1810: 40(ptr) AccessChain 31(data) 1804 33 - 1811: 17(ivec4) Load 1810 - 1812: 17(ivec4) VectorShuffle 1811 1809 4 5 6 3 - Store 1810 1812 + 1793: 152(bvec2) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1791 1792 + 1794: 70(ivec2) Select 1793 805 801 + 1795: 64(ptr) AccessChain 31(data) 1787 63 35 + 1796: 24(int) CompositeExtract 1794 0 + Store 1795 1796 + 1797: 64(ptr) AccessChain 31(data) 1787 63 189 + 1798: 24(int) CompositeExtract 1794 1 + Store 1797 1798 + 1799: 6(int) Load 8(invocation) + 1800: 71(ptr) AccessChain 31(data) 63 63 + 1801: 25(ivec4) Load 1800 + 1802: 78(ivec3) VectorShuffle 1801 1801 0 1 2 + 1803: 161(bvec3) SLessThan 1802 815 + 1804: 17(ivec4) Load 19(ballot) + 1805: 161(bvec3) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1803 1804 + 1806: 78(ivec3) Select 1805 819 815 + 1807: 64(ptr) AccessChain 31(data) 1799 63 35 + 1808: 24(int) CompositeExtract 1806 0 + Store 1807 1808 + 1809: 64(ptr) AccessChain 31(data) 1799 63 189 + 1810: 24(int) CompositeExtract 1806 1 + Store 1809 1810 + 1811: 64(ptr) AccessChain 31(data) 1799 63 202 + 1812: 24(int) CompositeExtract 1806 2 + Store 1811 1812 1813: 6(int) Load 8(invocation) - 1814: 40(ptr) AccessChain 31(data) 115 33 - 1815: 17(ivec4) Load 1814 - 1816: 17(ivec4) Load 19(ballot) - 1817: 17(ivec4) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1815 1816 - 1818: 40(ptr) AccessChain 31(data) 1813 33 - Store 1818 1817 - 1819: 6(int) Load 8(invocation) - 1820: 116(ptr) AccessChain 31(data) 34 115 35 - 1821:26(float64_t) Load 1820 - 1822: 17(ivec4) Load 19(ballot) - 1823:26(float64_t) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1821 1822 - 1824: 116(ptr) AccessChain 31(data) 1819 115 35 - Store 1824 1823 - 1825: 6(int) Load 8(invocation) - 1826: 123(ptr) AccessChain 31(data) 63 115 - 1827: 27(f64vec4) Load 1826 - 1828:122(f64vec2) VectorShuffle 1827 1827 0 1 - 1829: 17(ivec4) Load 19(ballot) - 1830:122(f64vec2) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1828 1829 - 1831: 123(ptr) AccessChain 31(data) 1825 115 - 1832: 27(f64vec4) Load 1831 - 1833: 27(f64vec4) VectorShuffle 1832 1830 4 5 2 3 - Store 1831 1833 - 1834: 6(int) Load 8(invocation) - 1835: 123(ptr) AccessChain 31(data) 33 115 - 1836: 27(f64vec4) Load 1835 - 1837:130(f64vec3) VectorShuffle 1836 1836 0 1 2 - 1838: 17(ivec4) Load 19(ballot) - 1839:130(f64vec3) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1837 1838 - 1840: 123(ptr) AccessChain 31(data) 1834 115 - 1841: 27(f64vec4) Load 1840 - 1842: 27(f64vec4) VectorShuffle 1841 1839 4 5 6 3 - Store 1840 1842 - 1843: 6(int) Load 8(invocation) - 1844: 123(ptr) AccessChain 31(data) 115 115 - 1845: 27(f64vec4) Load 1844 - 1846: 17(ivec4) Load 19(ballot) - 1847: 27(f64vec4) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1845 1846 - 1848: 123(ptr) AccessChain 31(data) 1843 115 - Store 1848 1847 + 1814: 71(ptr) AccessChain 31(data) 63 63 + 1815: 25(ivec4) Load 1814 + 1816: 169(bvec4) SLessThan 1815 830 + 1817: 17(ivec4) Load 19(ballot) + 1818: 169(bvec4) GroupNonUniformLogicalOr 178 PartitionedInclusiveScanNV 1816 1817 + 1819: 25(ivec4) Select 1818 834 830 + 1820: 71(ptr) AccessChain 31(data) 1813 63 + Store 1820 1819 + 1821: 6(int) Load 8(invocation) + 1822: 64(ptr) AccessChain 31(data) 34 63 35 + 1823: 24(int) Load 1822 + 1824: 17(ivec4) Load 19(ballot) + 1825: 24(int) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1823 1824 + 1826: 64(ptr) AccessChain 31(data) 1821 63 35 + Store 1826 1825 + 1827: 6(int) Load 8(invocation) + 1828: 71(ptr) AccessChain 31(data) 63 63 + 1829: 25(ivec4) Load 1828 + 1830: 70(ivec2) VectorShuffle 1829 1829 0 1 + 1831: 17(ivec4) Load 19(ballot) + 1832: 70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1830 1831 + 1833: 64(ptr) AccessChain 31(data) 1827 63 35 + 1834: 24(int) CompositeExtract 1832 0 + Store 1833 1834 + 1835: 64(ptr) AccessChain 31(data) 1827 63 189 + 1836: 24(int) CompositeExtract 1832 1 + Store 1835 1836 + 1837: 6(int) Load 8(invocation) + 1838: 71(ptr) AccessChain 31(data) 33 63 + 1839: 25(ivec4) Load 1838 + 1840: 78(ivec3) VectorShuffle 1839 1839 0 1 2 + 1841: 17(ivec4) Load 19(ballot) + 1842: 78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1840 1841 + 1843: 64(ptr) AccessChain 31(data) 1837 63 35 + 1844: 24(int) CompositeExtract 1842 0 + Store 1843 1844 + 1845: 64(ptr) AccessChain 31(data) 1837 63 189 + 1846: 24(int) CompositeExtract 1842 1 + Store 1845 1846 + 1847: 64(ptr) AccessChain 31(data) 1837 63 202 + 1848: 24(int) CompositeExtract 1842 2 + Store 1847 1848 1849: 6(int) Load 8(invocation) - 1850: 36(ptr) AccessChain 31(data) 34 34 35 - 1851: 22(float) Load 1850 + 1850: 71(ptr) AccessChain 31(data) 115 63 + 1851: 25(ivec4) Load 1850 1852: 17(ivec4) Load 19(ballot) - 1853: 22(float) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1851 1852 - 1854: 36(ptr) AccessChain 31(data) 1849 34 35 + 1853: 25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1851 1852 + 1854: 71(ptr) AccessChain 31(data) 1849 63 Store 1854 1853 1855: 6(int) Load 8(invocation) - 1856: 44(ptr) AccessChain 31(data) 63 34 - 1857: 23(fvec4) Load 1856 - 1858: 43(fvec2) VectorShuffle 1857 1857 0 1 - 1859: 17(ivec4) Load 19(ballot) - 1860: 43(fvec2) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1858 1859 - 1861: 44(ptr) AccessChain 31(data) 1855 34 - 1862: 23(fvec4) Load 1861 - 1863: 23(fvec4) VectorShuffle 1862 1860 4 5 2 3 - Store 1861 1863 - 1864: 6(int) Load 8(invocation) - 1865: 44(ptr) AccessChain 31(data) 33 34 - 1866: 23(fvec4) Load 1865 - 1867: 51(fvec3) VectorShuffle 1866 1866 0 1 2 - 1868: 17(ivec4) Load 19(ballot) - 1869: 51(fvec3) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1867 1868 - 1870: 44(ptr) AccessChain 31(data) 1864 34 - 1871: 23(fvec4) Load 1870 - 1872: 23(fvec4) VectorShuffle 1871 1869 4 5 6 3 - Store 1870 1872 - 1873: 6(int) Load 8(invocation) - 1874: 44(ptr) AccessChain 31(data) 115 34 - 1875: 23(fvec4) Load 1874 - 1876: 17(ivec4) Load 19(ballot) - 1877: 23(fvec4) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1875 1876 - 1878: 44(ptr) AccessChain 31(data) 1873 34 - Store 1878 1877 - 1879: 6(int) Load 8(invocation) - 1880: 64(ptr) AccessChain 31(data) 34 63 35 - 1881: 24(int) Load 1880 - 1882: 17(ivec4) Load 19(ballot) - 1883: 24(int) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1881 1882 - 1884: 64(ptr) AccessChain 31(data) 1879 63 35 - Store 1884 1883 - 1885: 6(int) Load 8(invocation) - 1886: 71(ptr) AccessChain 31(data) 63 63 - 1887: 25(ivec4) Load 1886 - 1888: 70(ivec2) VectorShuffle 1887 1887 0 1 - 1889: 17(ivec4) Load 19(ballot) - 1890: 70(ivec2) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1888 1889 - 1891: 71(ptr) AccessChain 31(data) 1885 63 - 1892: 25(ivec4) Load 1891 - 1893: 25(ivec4) VectorShuffle 1892 1890 4 5 2 3 - Store 1891 1893 - 1894: 6(int) Load 8(invocation) - 1895: 71(ptr) AccessChain 31(data) 33 63 - 1896: 25(ivec4) Load 1895 - 1897: 78(ivec3) VectorShuffle 1896 1896 0 1 2 - 1898: 17(ivec4) Load 19(ballot) - 1899: 78(ivec3) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1897 1898 - 1900: 71(ptr) AccessChain 31(data) 1894 63 - 1901: 25(ivec4) Load 1900 - 1902: 25(ivec4) VectorShuffle 1901 1899 4 5 6 3 - Store 1900 1902 - 1903: 6(int) Load 8(invocation) - 1904: 71(ptr) AccessChain 31(data) 115 63 - 1905: 25(ivec4) Load 1904 - 1906: 17(ivec4) Load 19(ballot) - 1907: 25(ivec4) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1905 1906 - 1908: 71(ptr) AccessChain 31(data) 1903 63 - Store 1908 1907 + 1856: 90(ptr) AccessChain 31(data) 34 33 35 + 1857: 6(int) Load 1856 + 1858: 17(ivec4) Load 19(ballot) + 1859: 6(int) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1857 1858 + 1860: 90(ptr) AccessChain 31(data) 1855 33 35 + Store 1860 1859 + 1861: 6(int) Load 8(invocation) + 1862: 40(ptr) AccessChain 31(data) 63 33 + 1863: 17(ivec4) Load 1862 + 1864: 96(ivec2) VectorShuffle 1863 1863 0 1 + 1865: 17(ivec4) Load 19(ballot) + 1866: 96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1864 1865 + 1867: 90(ptr) AccessChain 31(data) 1861 33 35 + 1868: 6(int) CompositeExtract 1866 0 + Store 1867 1868 + 1869: 90(ptr) AccessChain 31(data) 1861 33 189 + 1870: 6(int) CompositeExtract 1866 1 + Store 1869 1870 + 1871: 6(int) Load 8(invocation) + 1872: 40(ptr) AccessChain 31(data) 33 33 + 1873: 17(ivec4) Load 1872 + 1874: 103(ivec3) VectorShuffle 1873 1873 0 1 2 + 1875: 17(ivec4) Load 19(ballot) + 1876: 103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1874 1875 + 1877: 90(ptr) AccessChain 31(data) 1871 33 35 + 1878: 6(int) CompositeExtract 1876 0 + Store 1877 1878 + 1879: 90(ptr) AccessChain 31(data) 1871 33 189 + 1880: 6(int) CompositeExtract 1876 1 + Store 1879 1880 + 1881: 90(ptr) AccessChain 31(data) 1871 33 202 + 1882: 6(int) CompositeExtract 1876 2 + Store 1881 1882 + 1883: 6(int) Load 8(invocation) + 1884: 40(ptr) AccessChain 31(data) 115 33 + 1885: 17(ivec4) Load 1884 + 1886: 17(ivec4) Load 19(ballot) + 1887: 17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedInclusiveScanNV 1885 1886 + 1888: 40(ptr) AccessChain 31(data) 1883 33 + Store 1888 1887 + 1889: 6(int) Load 8(invocation) + 1890: 64(ptr) AccessChain 31(data) 34 63 35 + 1891: 24(int) Load 1890 + 1892: 144(bool) SLessThan 1891 34 + 1893: 17(ivec4) Load 19(ballot) + 1894: 144(bool) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1892 1893 + 1895: 24(int) Select 1894 63 34 + 1896: 64(ptr) AccessChain 31(data) 1889 63 35 + Store 1896 1895 + 1897: 6(int) Load 8(invocation) + 1898: 71(ptr) AccessChain 31(data) 63 63 + 1899: 25(ivec4) Load 1898 + 1900: 70(ivec2) VectorShuffle 1899 1899 0 1 + 1901: 152(bvec2) SLessThan 1900 801 + 1902: 17(ivec4) Load 19(ballot) + 1903: 152(bvec2) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1901 1902 + 1904: 70(ivec2) Select 1903 805 801 + 1905: 64(ptr) AccessChain 31(data) 1897 63 35 + 1906: 24(int) CompositeExtract 1904 0 + Store 1905 1906 + 1907: 64(ptr) AccessChain 31(data) 1897 63 189 + 1908: 24(int) CompositeExtract 1904 1 + Store 1907 1908 1909: 6(int) Load 8(invocation) - 1910: 90(ptr) AccessChain 31(data) 34 33 35 - 1911: 6(int) Load 1910 - 1912: 17(ivec4) Load 19(ballot) - 1913: 6(int) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1911 1912 - 1914: 90(ptr) AccessChain 31(data) 1909 33 35 - Store 1914 1913 - 1915: 6(int) Load 8(invocation) - 1916: 40(ptr) AccessChain 31(data) 63 33 - 1917: 17(ivec4) Load 1916 - 1918: 96(ivec2) VectorShuffle 1917 1917 0 1 - 1919: 17(ivec4) Load 19(ballot) - 1920: 96(ivec2) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1918 1919 - 1921: 40(ptr) AccessChain 31(data) 1915 33 - 1922: 17(ivec4) Load 1921 - 1923: 17(ivec4) VectorShuffle 1922 1920 4 5 2 3 - Store 1921 1923 - 1924: 6(int) Load 8(invocation) - 1925: 40(ptr) AccessChain 31(data) 33 33 - 1926: 17(ivec4) Load 1925 - 1927: 103(ivec3) VectorShuffle 1926 1926 0 1 2 - 1928: 17(ivec4) Load 19(ballot) - 1929: 103(ivec3) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1927 1928 - 1930: 40(ptr) AccessChain 31(data) 1924 33 - 1931: 17(ivec4) Load 1930 - 1932: 17(ivec4) VectorShuffle 1931 1929 4 5 6 3 - Store 1930 1932 - 1933: 6(int) Load 8(invocation) - 1934: 40(ptr) AccessChain 31(data) 115 33 - 1935: 17(ivec4) Load 1934 - 1936: 17(ivec4) Load 19(ballot) - 1937: 17(ivec4) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 1935 1936 - 1938: 40(ptr) AccessChain 31(data) 1933 33 - Store 1938 1937 - 1939: 6(int) Load 8(invocation) - 1940: 116(ptr) AccessChain 31(data) 34 115 35 - 1941:26(float64_t) Load 1940 - 1942: 17(ivec4) Load 19(ballot) - 1943:26(float64_t) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1941 1942 - 1944: 116(ptr) AccessChain 31(data) 1939 115 35 - Store 1944 1943 - 1945: 6(int) Load 8(invocation) - 1946: 123(ptr) AccessChain 31(data) 63 115 - 1947: 27(f64vec4) Load 1946 - 1948:122(f64vec2) VectorShuffle 1947 1947 0 1 - 1949: 17(ivec4) Load 19(ballot) - 1950:122(f64vec2) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1948 1949 - 1951: 123(ptr) AccessChain 31(data) 1945 115 - 1952: 27(f64vec4) Load 1951 - 1953: 27(f64vec4) VectorShuffle 1952 1950 4 5 2 3 - Store 1951 1953 - 1954: 6(int) Load 8(invocation) - 1955: 123(ptr) AccessChain 31(data) 33 115 - 1956: 27(f64vec4) Load 1955 - 1957:130(f64vec3) VectorShuffle 1956 1956 0 1 2 - 1958: 17(ivec4) Load 19(ballot) - 1959:130(f64vec3) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1957 1958 - 1960: 123(ptr) AccessChain 31(data) 1954 115 - 1961: 27(f64vec4) Load 1960 - 1962: 27(f64vec4) VectorShuffle 1961 1959 4 5 6 3 - Store 1960 1962 - 1963: 6(int) Load 8(invocation) - 1964: 123(ptr) AccessChain 31(data) 115 115 - 1965: 27(f64vec4) Load 1964 - 1966: 17(ivec4) Load 19(ballot) - 1967: 27(f64vec4) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 1965 1966 - 1968: 123(ptr) AccessChain 31(data) 1963 115 - Store 1968 1967 - 1969: 6(int) Load 8(invocation) - 1970: 36(ptr) AccessChain 31(data) 34 34 35 - 1971: 22(float) Load 1970 - 1972: 17(ivec4) Load 19(ballot) - 1973: 22(float) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1971 1972 - 1974: 36(ptr) AccessChain 31(data) 1969 34 35 - Store 1974 1973 - 1975: 6(int) Load 8(invocation) - 1976: 44(ptr) AccessChain 31(data) 63 34 - 1977: 23(fvec4) Load 1976 - 1978: 43(fvec2) VectorShuffle 1977 1977 0 1 - 1979: 17(ivec4) Load 19(ballot) - 1980: 43(fvec2) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1978 1979 - 1981: 44(ptr) AccessChain 31(data) 1975 34 - 1982: 23(fvec4) Load 1981 - 1983: 23(fvec4) VectorShuffle 1982 1980 4 5 2 3 - Store 1981 1983 - 1984: 6(int) Load 8(invocation) - 1985: 44(ptr) AccessChain 31(data) 33 34 - 1986: 23(fvec4) Load 1985 - 1987: 51(fvec3) VectorShuffle 1986 1986 0 1 2 - 1988: 17(ivec4) Load 19(ballot) - 1989: 51(fvec3) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1987 1988 - 1990: 44(ptr) AccessChain 31(data) 1984 34 - 1991: 23(fvec4) Load 1990 - 1992: 23(fvec4) VectorShuffle 1991 1989 4 5 6 3 - Store 1990 1992 + 1910: 71(ptr) AccessChain 31(data) 63 63 + 1911: 25(ivec4) Load 1910 + 1912: 78(ivec3) VectorShuffle 1911 1911 0 1 2 + 1913: 161(bvec3) SLessThan 1912 815 + 1914: 17(ivec4) Load 19(ballot) + 1915: 161(bvec3) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1913 1914 + 1916: 78(ivec3) Select 1915 819 815 + 1917: 64(ptr) AccessChain 31(data) 1909 63 35 + 1918: 24(int) CompositeExtract 1916 0 + Store 1917 1918 + 1919: 64(ptr) AccessChain 31(data) 1909 63 189 + 1920: 24(int) CompositeExtract 1916 1 + Store 1919 1920 + 1921: 64(ptr) AccessChain 31(data) 1909 63 202 + 1922: 24(int) CompositeExtract 1916 2 + Store 1921 1922 + 1923: 6(int) Load 8(invocation) + 1924: 71(ptr) AccessChain 31(data) 63 63 + 1925: 25(ivec4) Load 1924 + 1926: 169(bvec4) SLessThan 1925 830 + 1927: 17(ivec4) Load 19(ballot) + 1928: 169(bvec4) GroupNonUniformLogicalXor 178 PartitionedInclusiveScanNV 1926 1927 + 1929: 25(ivec4) Select 1928 834 830 + 1930: 71(ptr) AccessChain 31(data) 1923 63 + Store 1930 1929 + 1931: 6(int) Load 8(invocation) + 1932: 36(ptr) AccessChain 31(data) 34 34 35 + 1933: 22(float) Load 1932 + 1934: 17(ivec4) Load 19(ballot) + 1935: 22(float) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1933 1934 + 1936: 36(ptr) AccessChain 31(data) 1931 34 35 + Store 1936 1935 + 1937: 6(int) Load 8(invocation) + 1938: 44(ptr) AccessChain 31(data) 63 34 + 1939: 23(fvec4) Load 1938 + 1940: 43(fvec2) VectorShuffle 1939 1939 0 1 + 1941: 17(ivec4) Load 19(ballot) + 1942: 43(fvec2) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1940 1941 + 1943: 36(ptr) AccessChain 31(data) 1937 34 35 + 1944: 22(float) CompositeExtract 1942 0 + Store 1943 1944 + 1945: 36(ptr) AccessChain 31(data) 1937 34 189 + 1946: 22(float) CompositeExtract 1942 1 + Store 1945 1946 + 1947: 6(int) Load 8(invocation) + 1948: 44(ptr) AccessChain 31(data) 33 34 + 1949: 23(fvec4) Load 1948 + 1950: 51(fvec3) VectorShuffle 1949 1949 0 1 2 + 1951: 17(ivec4) Load 19(ballot) + 1952: 51(fvec3) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1950 1951 + 1953: 36(ptr) AccessChain 31(data) 1947 34 35 + 1954: 22(float) CompositeExtract 1952 0 + Store 1953 1954 + 1955: 36(ptr) AccessChain 31(data) 1947 34 189 + 1956: 22(float) CompositeExtract 1952 1 + Store 1955 1956 + 1957: 36(ptr) AccessChain 31(data) 1947 34 202 + 1958: 22(float) CompositeExtract 1952 2 + Store 1957 1958 + 1959: 6(int) Load 8(invocation) + 1960: 44(ptr) AccessChain 31(data) 115 34 + 1961: 23(fvec4) Load 1960 + 1962: 17(ivec4) Load 19(ballot) + 1963: 23(fvec4) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 1961 1962 + 1964: 44(ptr) AccessChain 31(data) 1959 34 + Store 1964 1963 + 1965: 6(int) Load 8(invocation) + 1966: 64(ptr) AccessChain 31(data) 34 63 35 + 1967: 24(int) Load 1966 + 1968: 17(ivec4) Load 19(ballot) + 1969: 24(int) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1967 1968 + 1970: 64(ptr) AccessChain 31(data) 1965 63 35 + Store 1970 1969 + 1971: 6(int) Load 8(invocation) + 1972: 71(ptr) AccessChain 31(data) 63 63 + 1973: 25(ivec4) Load 1972 + 1974: 70(ivec2) VectorShuffle 1973 1973 0 1 + 1975: 17(ivec4) Load 19(ballot) + 1976: 70(ivec2) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1974 1975 + 1977: 64(ptr) AccessChain 31(data) 1971 63 35 + 1978: 24(int) CompositeExtract 1976 0 + Store 1977 1978 + 1979: 64(ptr) AccessChain 31(data) 1971 63 189 + 1980: 24(int) CompositeExtract 1976 1 + Store 1979 1980 + 1981: 6(int) Load 8(invocation) + 1982: 71(ptr) AccessChain 31(data) 33 63 + 1983: 25(ivec4) Load 1982 + 1984: 78(ivec3) VectorShuffle 1983 1983 0 1 2 + 1985: 17(ivec4) Load 19(ballot) + 1986: 78(ivec3) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1984 1985 + 1987: 64(ptr) AccessChain 31(data) 1981 63 35 + 1988: 24(int) CompositeExtract 1986 0 + Store 1987 1988 + 1989: 64(ptr) AccessChain 31(data) 1981 63 189 + 1990: 24(int) CompositeExtract 1986 1 + Store 1989 1990 + 1991: 64(ptr) AccessChain 31(data) 1981 63 202 + 1992: 24(int) CompositeExtract 1986 2 + Store 1991 1992 1993: 6(int) Load 8(invocation) - 1994: 44(ptr) AccessChain 31(data) 115 34 - 1995: 23(fvec4) Load 1994 + 1994: 71(ptr) AccessChain 31(data) 115 63 + 1995: 25(ivec4) Load 1994 1996: 17(ivec4) Load 19(ballot) - 1997: 23(fvec4) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 1995 1996 - 1998: 44(ptr) AccessChain 31(data) 1993 34 + 1997: 25(ivec4) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 1995 1996 + 1998: 71(ptr) AccessChain 31(data) 1993 63 Store 1998 1997 1999: 6(int) Load 8(invocation) - 2000: 64(ptr) AccessChain 31(data) 34 63 35 - 2001: 24(int) Load 2000 + 2000: 90(ptr) AccessChain 31(data) 34 33 35 + 2001: 6(int) Load 2000 2002: 17(ivec4) Load 19(ballot) - 2003: 24(int) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2001 2002 - 2004: 64(ptr) AccessChain 31(data) 1999 63 35 + 2003: 6(int) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 2001 2002 + 2004: 90(ptr) AccessChain 31(data) 1999 33 35 Store 2004 2003 2005: 6(int) Load 8(invocation) - 2006: 71(ptr) AccessChain 31(data) 63 63 - 2007: 25(ivec4) Load 2006 - 2008: 70(ivec2) VectorShuffle 2007 2007 0 1 + 2006: 40(ptr) AccessChain 31(data) 63 33 + 2007: 17(ivec4) Load 2006 + 2008: 96(ivec2) VectorShuffle 2007 2007 0 1 2009: 17(ivec4) Load 19(ballot) - 2010: 70(ivec2) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2008 2009 - 2011: 71(ptr) AccessChain 31(data) 2005 63 - 2012: 25(ivec4) Load 2011 - 2013: 25(ivec4) VectorShuffle 2012 2010 4 5 2 3 - Store 2011 2013 - 2014: 6(int) Load 8(invocation) - 2015: 71(ptr) AccessChain 31(data) 33 63 - 2016: 25(ivec4) Load 2015 - 2017: 78(ivec3) VectorShuffle 2016 2016 0 1 2 - 2018: 17(ivec4) Load 19(ballot) - 2019: 78(ivec3) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2017 2018 - 2020: 71(ptr) AccessChain 31(data) 2014 63 - 2021: 25(ivec4) Load 2020 - 2022: 25(ivec4) VectorShuffle 2021 2019 4 5 6 3 - Store 2020 2022 - 2023: 6(int) Load 8(invocation) - 2024: 71(ptr) AccessChain 31(data) 115 63 - 2025: 25(ivec4) Load 2024 - 2026: 17(ivec4) Load 19(ballot) - 2027: 25(ivec4) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2025 2026 - 2028: 71(ptr) AccessChain 31(data) 2023 63 - Store 2028 2027 - 2029: 6(int) Load 8(invocation) - 2030: 90(ptr) AccessChain 31(data) 34 33 35 - 2031: 6(int) Load 2030 - 2032: 17(ivec4) Load 19(ballot) - 2033: 6(int) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2031 2032 - 2034: 90(ptr) AccessChain 31(data) 2029 33 35 - Store 2034 2033 - 2035: 6(int) Load 8(invocation) - 2036: 40(ptr) AccessChain 31(data) 63 33 - 2037: 17(ivec4) Load 2036 - 2038: 96(ivec2) VectorShuffle 2037 2037 0 1 - 2039: 17(ivec4) Load 19(ballot) - 2040: 96(ivec2) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2038 2039 - 2041: 40(ptr) AccessChain 31(data) 2035 33 - 2042: 17(ivec4) Load 2041 - 2043: 17(ivec4) VectorShuffle 2042 2040 4 5 2 3 - Store 2041 2043 - 2044: 6(int) Load 8(invocation) - 2045: 40(ptr) AccessChain 31(data) 33 33 - 2046: 17(ivec4) Load 2045 - 2047: 103(ivec3) VectorShuffle 2046 2046 0 1 2 - 2048: 17(ivec4) Load 19(ballot) - 2049: 103(ivec3) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2047 2048 - 2050: 40(ptr) AccessChain 31(data) 2044 33 - 2051: 17(ivec4) Load 2050 - 2052: 17(ivec4) VectorShuffle 2051 2049 4 5 6 3 - Store 2050 2052 - 2053: 6(int) Load 8(invocation) - 2054: 40(ptr) AccessChain 31(data) 115 33 - 2055: 17(ivec4) Load 2054 - 2056: 17(ivec4) Load 19(ballot) - 2057: 17(ivec4) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2055 2056 - 2058: 40(ptr) AccessChain 31(data) 2053 33 - Store 2058 2057 - 2059: 6(int) Load 8(invocation) - 2060: 116(ptr) AccessChain 31(data) 34 115 35 - 2061:26(float64_t) Load 2060 - 2062: 17(ivec4) Load 19(ballot) - 2063:26(float64_t) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2061 2062 - 2064: 116(ptr) AccessChain 31(data) 2059 115 35 - Store 2064 2063 - 2065: 6(int) Load 8(invocation) - 2066: 123(ptr) AccessChain 31(data) 63 115 - 2067: 27(f64vec4) Load 2066 - 2068:122(f64vec2) VectorShuffle 2067 2067 0 1 - 2069: 17(ivec4) Load 19(ballot) - 2070:122(f64vec2) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2068 2069 - 2071: 123(ptr) AccessChain 31(data) 2065 115 - 2072: 27(f64vec4) Load 2071 - 2073: 27(f64vec4) VectorShuffle 2072 2070 4 5 2 3 - Store 2071 2073 - 2074: 6(int) Load 8(invocation) - 2075: 123(ptr) AccessChain 31(data) 33 115 - 2076: 27(f64vec4) Load 2075 - 2077:130(f64vec3) VectorShuffle 2076 2076 0 1 2 - 2078: 17(ivec4) Load 19(ballot) - 2079:130(f64vec3) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2077 2078 - 2080: 123(ptr) AccessChain 31(data) 2074 115 - 2081: 27(f64vec4) Load 2080 - 2082: 27(f64vec4) VectorShuffle 2081 2079 4 5 6 3 - Store 2080 2082 + 2010: 96(ivec2) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 2008 2009 + 2011: 90(ptr) AccessChain 31(data) 2005 33 35 + 2012: 6(int) CompositeExtract 2010 0 + Store 2011 2012 + 2013: 90(ptr) AccessChain 31(data) 2005 33 189 + 2014: 6(int) CompositeExtract 2010 1 + Store 2013 2014 + 2015: 6(int) Load 8(invocation) + 2016: 40(ptr) AccessChain 31(data) 33 33 + 2017: 17(ivec4) Load 2016 + 2018: 103(ivec3) VectorShuffle 2017 2017 0 1 2 + 2019: 17(ivec4) Load 19(ballot) + 2020: 103(ivec3) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 2018 2019 + 2021: 90(ptr) AccessChain 31(data) 2015 33 35 + 2022: 6(int) CompositeExtract 2020 0 + Store 2021 2022 + 2023: 90(ptr) AccessChain 31(data) 2015 33 189 + 2024: 6(int) CompositeExtract 2020 1 + Store 2023 2024 + 2025: 90(ptr) AccessChain 31(data) 2015 33 202 + 2026: 6(int) CompositeExtract 2020 2 + Store 2025 2026 + 2027: 6(int) Load 8(invocation) + 2028: 40(ptr) AccessChain 31(data) 115 33 + 2029: 17(ivec4) Load 2028 + 2030: 17(ivec4) Load 19(ballot) + 2031: 17(ivec4) GroupNonUniformIAdd 178 PartitionedExclusiveScanNV 2029 2030 + 2032: 40(ptr) AccessChain 31(data) 2027 33 + Store 2032 2031 + 2033: 6(int) Load 8(invocation) + 2034: 116(ptr) AccessChain 31(data) 34 115 35 + 2035:26(float64_t) Load 2034 + 2036: 17(ivec4) Load 19(ballot) + 2037:26(float64_t) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 2035 2036 + 2038: 116(ptr) AccessChain 31(data) 2033 115 35 + Store 2038 2037 + 2039: 6(int) Load 8(invocation) + 2040: 123(ptr) AccessChain 31(data) 63 115 + 2041: 27(f64vec4) Load 2040 + 2042:122(f64vec2) VectorShuffle 2041 2041 0 1 + 2043: 17(ivec4) Load 19(ballot) + 2044:122(f64vec2) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 2042 2043 + 2045: 116(ptr) AccessChain 31(data) 2039 115 35 + 2046:26(float64_t) CompositeExtract 2044 0 + Store 2045 2046 + 2047: 116(ptr) AccessChain 31(data) 2039 115 189 + 2048:26(float64_t) CompositeExtract 2044 1 + Store 2047 2048 + 2049: 6(int) Load 8(invocation) + 2050: 123(ptr) AccessChain 31(data) 33 115 + 2051: 27(f64vec4) Load 2050 + 2052:130(f64vec3) VectorShuffle 2051 2051 0 1 2 + 2053: 17(ivec4) Load 19(ballot) + 2054:130(f64vec3) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 2052 2053 + 2055: 116(ptr) AccessChain 31(data) 2049 115 35 + 2056:26(float64_t) CompositeExtract 2054 0 + Store 2055 2056 + 2057: 116(ptr) AccessChain 31(data) 2049 115 189 + 2058:26(float64_t) CompositeExtract 2054 1 + Store 2057 2058 + 2059: 116(ptr) AccessChain 31(data) 2049 115 202 + 2060:26(float64_t) CompositeExtract 2054 2 + Store 2059 2060 + 2061: 6(int) Load 8(invocation) + 2062: 123(ptr) AccessChain 31(data) 115 115 + 2063: 27(f64vec4) Load 2062 + 2064: 17(ivec4) Load 19(ballot) + 2065: 27(f64vec4) GroupNonUniformFAdd 178 PartitionedExclusiveScanNV 2063 2064 + 2066: 123(ptr) AccessChain 31(data) 2061 115 + Store 2066 2065 + 2067: 6(int) Load 8(invocation) + 2068: 36(ptr) AccessChain 31(data) 34 34 35 + 2069: 22(float) Load 2068 + 2070: 17(ivec4) Load 19(ballot) + 2071: 22(float) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 2069 2070 + 2072: 36(ptr) AccessChain 31(data) 2067 34 35 + Store 2072 2071 + 2073: 6(int) Load 8(invocation) + 2074: 44(ptr) AccessChain 31(data) 63 34 + 2075: 23(fvec4) Load 2074 + 2076: 43(fvec2) VectorShuffle 2075 2075 0 1 + 2077: 17(ivec4) Load 19(ballot) + 2078: 43(fvec2) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 2076 2077 + 2079: 36(ptr) AccessChain 31(data) 2073 34 35 + 2080: 22(float) CompositeExtract 2078 0 + Store 2079 2080 + 2081: 36(ptr) AccessChain 31(data) 2073 34 189 + 2082: 22(float) CompositeExtract 2078 1 + Store 2081 2082 2083: 6(int) Load 8(invocation) - 2084: 123(ptr) AccessChain 31(data) 115 115 - 2085: 27(f64vec4) Load 2084 - 2086: 17(ivec4) Load 19(ballot) - 2087: 27(f64vec4) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2085 2086 - 2088: 123(ptr) AccessChain 31(data) 2083 115 - Store 2088 2087 - 2089: 6(int) Load 8(invocation) - 2090: 36(ptr) AccessChain 31(data) 34 34 35 - 2091: 22(float) Load 2090 - 2092: 17(ivec4) Load 19(ballot) - 2093: 22(float) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2091 2092 - 2094: 36(ptr) AccessChain 31(data) 2089 34 35 - Store 2094 2093 + 2084: 44(ptr) AccessChain 31(data) 33 34 + 2085: 23(fvec4) Load 2084 + 2086: 51(fvec3) VectorShuffle 2085 2085 0 1 2 + 2087: 17(ivec4) Load 19(ballot) + 2088: 51(fvec3) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 2086 2087 + 2089: 36(ptr) AccessChain 31(data) 2083 34 35 + 2090: 22(float) CompositeExtract 2088 0 + Store 2089 2090 + 2091: 36(ptr) AccessChain 31(data) 2083 34 189 + 2092: 22(float) CompositeExtract 2088 1 + Store 2091 2092 + 2093: 36(ptr) AccessChain 31(data) 2083 34 202 + 2094: 22(float) CompositeExtract 2088 2 + Store 2093 2094 2095: 6(int) Load 8(invocation) - 2096: 44(ptr) AccessChain 31(data) 63 34 + 2096: 44(ptr) AccessChain 31(data) 115 34 2097: 23(fvec4) Load 2096 - 2098: 43(fvec2) VectorShuffle 2097 2097 0 1 - 2099: 17(ivec4) Load 19(ballot) - 2100: 43(fvec2) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2098 2099 - 2101: 44(ptr) AccessChain 31(data) 2095 34 - 2102: 23(fvec4) Load 2101 - 2103: 23(fvec4) VectorShuffle 2102 2100 4 5 2 3 - Store 2101 2103 - 2104: 6(int) Load 8(invocation) - 2105: 44(ptr) AccessChain 31(data) 33 34 - 2106: 23(fvec4) Load 2105 - 2107: 51(fvec3) VectorShuffle 2106 2106 0 1 2 - 2108: 17(ivec4) Load 19(ballot) - 2109: 51(fvec3) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2107 2108 - 2110: 44(ptr) AccessChain 31(data) 2104 34 - 2111: 23(fvec4) Load 2110 - 2112: 23(fvec4) VectorShuffle 2111 2109 4 5 6 3 - Store 2110 2112 - 2113: 6(int) Load 8(invocation) - 2114: 44(ptr) AccessChain 31(data) 115 34 - 2115: 23(fvec4) Load 2114 - 2116: 17(ivec4) Load 19(ballot) - 2117: 23(fvec4) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2115 2116 - 2118: 44(ptr) AccessChain 31(data) 2113 34 - Store 2118 2117 - 2119: 6(int) Load 8(invocation) - 2120: 64(ptr) AccessChain 31(data) 34 63 35 - 2121: 24(int) Load 2120 - 2122: 17(ivec4) Load 19(ballot) - 2123: 24(int) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2121 2122 - 2124: 64(ptr) AccessChain 31(data) 2119 63 35 - Store 2124 2123 - 2125: 6(int) Load 8(invocation) - 2126: 71(ptr) AccessChain 31(data) 63 63 - 2127: 25(ivec4) Load 2126 - 2128: 70(ivec2) VectorShuffle 2127 2127 0 1 - 2129: 17(ivec4) Load 19(ballot) - 2130: 70(ivec2) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2128 2129 - 2131: 71(ptr) AccessChain 31(data) 2125 63 - 2132: 25(ivec4) Load 2131 - 2133: 25(ivec4) VectorShuffle 2132 2130 4 5 2 3 - Store 2131 2133 - 2134: 6(int) Load 8(invocation) - 2135: 71(ptr) AccessChain 31(data) 33 63 - 2136: 25(ivec4) Load 2135 - 2137: 78(ivec3) VectorShuffle 2136 2136 0 1 2 + 2098: 17(ivec4) Load 19(ballot) + 2099: 23(fvec4) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 2097 2098 + 2100: 44(ptr) AccessChain 31(data) 2095 34 + Store 2100 2099 + 2101: 6(int) Load 8(invocation) + 2102: 64(ptr) AccessChain 31(data) 34 63 35 + 2103: 24(int) Load 2102 + 2104: 17(ivec4) Load 19(ballot) + 2105: 24(int) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 2103 2104 + 2106: 64(ptr) AccessChain 31(data) 2101 63 35 + Store 2106 2105 + 2107: 6(int) Load 8(invocation) + 2108: 71(ptr) AccessChain 31(data) 63 63 + 2109: 25(ivec4) Load 2108 + 2110: 70(ivec2) VectorShuffle 2109 2109 0 1 + 2111: 17(ivec4) Load 19(ballot) + 2112: 70(ivec2) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 2110 2111 + 2113: 64(ptr) AccessChain 31(data) 2107 63 35 + 2114: 24(int) CompositeExtract 2112 0 + Store 2113 2114 + 2115: 64(ptr) AccessChain 31(data) 2107 63 189 + 2116: 24(int) CompositeExtract 2112 1 + Store 2115 2116 + 2117: 6(int) Load 8(invocation) + 2118: 71(ptr) AccessChain 31(data) 33 63 + 2119: 25(ivec4) Load 2118 + 2120: 78(ivec3) VectorShuffle 2119 2119 0 1 2 + 2121: 17(ivec4) Load 19(ballot) + 2122: 78(ivec3) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 2120 2121 + 2123: 64(ptr) AccessChain 31(data) 2117 63 35 + 2124: 24(int) CompositeExtract 2122 0 + Store 2123 2124 + 2125: 64(ptr) AccessChain 31(data) 2117 63 189 + 2126: 24(int) CompositeExtract 2122 1 + Store 2125 2126 + 2127: 64(ptr) AccessChain 31(data) 2117 63 202 + 2128: 24(int) CompositeExtract 2122 2 + Store 2127 2128 + 2129: 6(int) Load 8(invocation) + 2130: 71(ptr) AccessChain 31(data) 115 63 + 2131: 25(ivec4) Load 2130 + 2132: 17(ivec4) Load 19(ballot) + 2133: 25(ivec4) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 2131 2132 + 2134: 71(ptr) AccessChain 31(data) 2129 63 + Store 2134 2133 + 2135: 6(int) Load 8(invocation) + 2136: 90(ptr) AccessChain 31(data) 34 33 35 + 2137: 6(int) Load 2136 2138: 17(ivec4) Load 19(ballot) - 2139: 78(ivec3) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2137 2138 - 2140: 71(ptr) AccessChain 31(data) 2134 63 - 2141: 25(ivec4) Load 2140 - 2142: 25(ivec4) VectorShuffle 2141 2139 4 5 6 3 - Store 2140 2142 - 2143: 6(int) Load 8(invocation) - 2144: 71(ptr) AccessChain 31(data) 115 63 - 2145: 25(ivec4) Load 2144 - 2146: 17(ivec4) Load 19(ballot) - 2147: 25(ivec4) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2145 2146 - 2148: 71(ptr) AccessChain 31(data) 2143 63 - Store 2148 2147 - 2149: 6(int) Load 8(invocation) - 2150: 90(ptr) AccessChain 31(data) 34 33 35 - 2151: 6(int) Load 2150 - 2152: 17(ivec4) Load 19(ballot) - 2153: 6(int) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2151 2152 - 2154: 90(ptr) AccessChain 31(data) 2149 33 35 - Store 2154 2153 - 2155: 6(int) Load 8(invocation) - 2156: 40(ptr) AccessChain 31(data) 63 33 - 2157: 17(ivec4) Load 2156 - 2158: 96(ivec2) VectorShuffle 2157 2157 0 1 - 2159: 17(ivec4) Load 19(ballot) - 2160: 96(ivec2) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2158 2159 - 2161: 40(ptr) AccessChain 31(data) 2155 33 - 2162: 17(ivec4) Load 2161 - 2163: 17(ivec4) VectorShuffle 2162 2160 4 5 2 3 - Store 2161 2163 - 2164: 6(int) Load 8(invocation) - 2165: 40(ptr) AccessChain 31(data) 33 33 - 2166: 17(ivec4) Load 2165 - 2167: 103(ivec3) VectorShuffle 2166 2166 0 1 2 - 2168: 17(ivec4) Load 19(ballot) - 2169: 103(ivec3) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2167 2168 - 2170: 40(ptr) AccessChain 31(data) 2164 33 - 2171: 17(ivec4) Load 2170 - 2172: 17(ivec4) VectorShuffle 2171 2169 4 5 6 3 - Store 2170 2172 - 2173: 6(int) Load 8(invocation) - 2174: 40(ptr) AccessChain 31(data) 115 33 - 2175: 17(ivec4) Load 2174 - 2176: 17(ivec4) Load 19(ballot) - 2177: 17(ivec4) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2175 2176 - 2178: 40(ptr) AccessChain 31(data) 2173 33 - Store 2178 2177 - 2179: 6(int) Load 8(invocation) - 2180: 116(ptr) AccessChain 31(data) 34 115 35 - 2181:26(float64_t) Load 2180 - 2182: 17(ivec4) Load 19(ballot) - 2183:26(float64_t) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2181 2182 - 2184: 116(ptr) AccessChain 31(data) 2179 115 35 - Store 2184 2183 + 2139: 6(int) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 2137 2138 + 2140: 90(ptr) AccessChain 31(data) 2135 33 35 + Store 2140 2139 + 2141: 6(int) Load 8(invocation) + 2142: 40(ptr) AccessChain 31(data) 63 33 + 2143: 17(ivec4) Load 2142 + 2144: 96(ivec2) VectorShuffle 2143 2143 0 1 + 2145: 17(ivec4) Load 19(ballot) + 2146: 96(ivec2) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 2144 2145 + 2147: 90(ptr) AccessChain 31(data) 2141 33 35 + 2148: 6(int) CompositeExtract 2146 0 + Store 2147 2148 + 2149: 90(ptr) AccessChain 31(data) 2141 33 189 + 2150: 6(int) CompositeExtract 2146 1 + Store 2149 2150 + 2151: 6(int) Load 8(invocation) + 2152: 40(ptr) AccessChain 31(data) 33 33 + 2153: 17(ivec4) Load 2152 + 2154: 103(ivec3) VectorShuffle 2153 2153 0 1 2 + 2155: 17(ivec4) Load 19(ballot) + 2156: 103(ivec3) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 2154 2155 + 2157: 90(ptr) AccessChain 31(data) 2151 33 35 + 2158: 6(int) CompositeExtract 2156 0 + Store 2157 2158 + 2159: 90(ptr) AccessChain 31(data) 2151 33 189 + 2160: 6(int) CompositeExtract 2156 1 + Store 2159 2160 + 2161: 90(ptr) AccessChain 31(data) 2151 33 202 + 2162: 6(int) CompositeExtract 2156 2 + Store 2161 2162 + 2163: 6(int) Load 8(invocation) + 2164: 40(ptr) AccessChain 31(data) 115 33 + 2165: 17(ivec4) Load 2164 + 2166: 17(ivec4) Load 19(ballot) + 2167: 17(ivec4) GroupNonUniformIMul 178 PartitionedExclusiveScanNV 2165 2166 + 2168: 40(ptr) AccessChain 31(data) 2163 33 + Store 2168 2167 + 2169: 6(int) Load 8(invocation) + 2170: 116(ptr) AccessChain 31(data) 34 115 35 + 2171:26(float64_t) Load 2170 + 2172: 17(ivec4) Load 19(ballot) + 2173:26(float64_t) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 2171 2172 + 2174: 116(ptr) AccessChain 31(data) 2169 115 35 + Store 2174 2173 + 2175: 6(int) Load 8(invocation) + 2176: 123(ptr) AccessChain 31(data) 63 115 + 2177: 27(f64vec4) Load 2176 + 2178:122(f64vec2) VectorShuffle 2177 2177 0 1 + 2179: 17(ivec4) Load 19(ballot) + 2180:122(f64vec2) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 2178 2179 + 2181: 116(ptr) AccessChain 31(data) 2175 115 35 + 2182:26(float64_t) CompositeExtract 2180 0 + Store 2181 2182 + 2183: 116(ptr) AccessChain 31(data) 2175 115 189 + 2184:26(float64_t) CompositeExtract 2180 1 + Store 2183 2184 2185: 6(int) Load 8(invocation) - 2186: 123(ptr) AccessChain 31(data) 63 115 + 2186: 123(ptr) AccessChain 31(data) 33 115 2187: 27(f64vec4) Load 2186 - 2188:122(f64vec2) VectorShuffle 2187 2187 0 1 + 2188:130(f64vec3) VectorShuffle 2187 2187 0 1 2 2189: 17(ivec4) Load 19(ballot) - 2190:122(f64vec2) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2188 2189 - 2191: 123(ptr) AccessChain 31(data) 2185 115 - 2192: 27(f64vec4) Load 2191 - 2193: 27(f64vec4) VectorShuffle 2192 2190 4 5 2 3 - Store 2191 2193 - 2194: 6(int) Load 8(invocation) - 2195: 123(ptr) AccessChain 31(data) 33 115 - 2196: 27(f64vec4) Load 2195 - 2197:130(f64vec3) VectorShuffle 2196 2196 0 1 2 - 2198: 17(ivec4) Load 19(ballot) - 2199:130(f64vec3) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2197 2198 - 2200: 123(ptr) AccessChain 31(data) 2194 115 - 2201: 27(f64vec4) Load 2200 - 2202: 27(f64vec4) VectorShuffle 2201 2199 4 5 6 3 - Store 2200 2202 + 2190:130(f64vec3) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 2188 2189 + 2191: 116(ptr) AccessChain 31(data) 2185 115 35 + 2192:26(float64_t) CompositeExtract 2190 0 + Store 2191 2192 + 2193: 116(ptr) AccessChain 31(data) 2185 115 189 + 2194:26(float64_t) CompositeExtract 2190 1 + Store 2193 2194 + 2195: 116(ptr) AccessChain 31(data) 2185 115 202 + 2196:26(float64_t) CompositeExtract 2190 2 + Store 2195 2196 + 2197: 6(int) Load 8(invocation) + 2198: 123(ptr) AccessChain 31(data) 115 115 + 2199: 27(f64vec4) Load 2198 + 2200: 17(ivec4) Load 19(ballot) + 2201: 27(f64vec4) GroupNonUniformFMul 178 PartitionedExclusiveScanNV 2199 2200 + 2202: 123(ptr) AccessChain 31(data) 2197 115 + Store 2202 2201 2203: 6(int) Load 8(invocation) - 2204: 123(ptr) AccessChain 31(data) 115 115 - 2205: 27(f64vec4) Load 2204 + 2204: 36(ptr) AccessChain 31(data) 34 34 35 + 2205: 22(float) Load 2204 2206: 17(ivec4) Load 19(ballot) - 2207: 27(f64vec4) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2205 2206 - 2208: 123(ptr) AccessChain 31(data) 2203 115 + 2207: 22(float) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2205 2206 + 2208: 36(ptr) AccessChain 31(data) 2203 34 35 Store 2208 2207 2209: 6(int) Load 8(invocation) - 2210: 64(ptr) AccessChain 31(data) 34 63 35 - 2211: 24(int) Load 2210 - 2212: 17(ivec4) Load 19(ballot) - 2213: 24(int) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2211 2212 - 2214: 64(ptr) AccessChain 31(data) 2209 63 35 - Store 2214 2213 - 2215: 6(int) Load 8(invocation) - 2216: 71(ptr) AccessChain 31(data) 63 63 - 2217: 25(ivec4) Load 2216 - 2218: 70(ivec2) VectorShuffle 2217 2217 0 1 - 2219: 17(ivec4) Load 19(ballot) - 2220: 70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2218 2219 - 2221: 71(ptr) AccessChain 31(data) 2215 63 - 2222: 25(ivec4) Load 2221 - 2223: 25(ivec4) VectorShuffle 2222 2220 4 5 2 3 - Store 2221 2223 - 2224: 6(int) Load 8(invocation) - 2225: 71(ptr) AccessChain 31(data) 33 63 - 2226: 25(ivec4) Load 2225 - 2227: 78(ivec3) VectorShuffle 2226 2226 0 1 2 - 2228: 17(ivec4) Load 19(ballot) - 2229: 78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2227 2228 - 2230: 71(ptr) AccessChain 31(data) 2224 63 - 2231: 25(ivec4) Load 2230 - 2232: 25(ivec4) VectorShuffle 2231 2229 4 5 6 3 - Store 2230 2232 - 2233: 6(int) Load 8(invocation) - 2234: 71(ptr) AccessChain 31(data) 115 63 - 2235: 25(ivec4) Load 2234 - 2236: 17(ivec4) Load 19(ballot) - 2237: 25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2235 2236 - 2238: 71(ptr) AccessChain 31(data) 2233 63 - Store 2238 2237 - 2239: 6(int) Load 8(invocation) - 2240: 90(ptr) AccessChain 31(data) 34 33 35 - 2241: 6(int) Load 2240 - 2242: 17(ivec4) Load 19(ballot) - 2243: 6(int) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2241 2242 - 2244: 90(ptr) AccessChain 31(data) 2239 33 35 - Store 2244 2243 - 2245: 6(int) Load 8(invocation) - 2246: 40(ptr) AccessChain 31(data) 63 33 - 2247: 17(ivec4) Load 2246 - 2248: 96(ivec2) VectorShuffle 2247 2247 0 1 - 2249: 17(ivec4) Load 19(ballot) - 2250: 96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2248 2249 - 2251: 40(ptr) AccessChain 31(data) 2245 33 - 2252: 17(ivec4) Load 2251 - 2253: 17(ivec4) VectorShuffle 2252 2250 4 5 2 3 - Store 2251 2253 - 2254: 6(int) Load 8(invocation) - 2255: 40(ptr) AccessChain 31(data) 33 33 - 2256: 17(ivec4) Load 2255 - 2257: 103(ivec3) VectorShuffle 2256 2256 0 1 2 - 2258: 17(ivec4) Load 19(ballot) - 2259: 103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2257 2258 - 2260: 40(ptr) AccessChain 31(data) 2254 33 - 2261: 17(ivec4) Load 2260 - 2262: 17(ivec4) VectorShuffle 2261 2259 4 5 6 3 - Store 2260 2262 - 2263: 6(int) Load 8(invocation) - 2264: 40(ptr) AccessChain 31(data) 115 33 - 2265: 17(ivec4) Load 2264 - 2266: 17(ivec4) Load 19(ballot) - 2267: 17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2265 2266 - 2268: 40(ptr) AccessChain 31(data) 2263 33 - Store 2268 2267 - 2269: 6(int) Load 8(invocation) - 2270: 64(ptr) AccessChain 31(data) 34 63 35 - 2271: 24(int) Load 2270 - 2272: 144(bool) SLessThan 2271 34 - 2273: 17(ivec4) Load 19(ballot) - 2274: 144(bool) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2272 2273 - 2275: 24(int) Select 2274 63 34 - 2276: 64(ptr) AccessChain 31(data) 2269 63 35 + 2210: 44(ptr) AccessChain 31(data) 63 34 + 2211: 23(fvec4) Load 2210 + 2212: 43(fvec2) VectorShuffle 2211 2211 0 1 + 2213: 17(ivec4) Load 19(ballot) + 2214: 43(fvec2) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2212 2213 + 2215: 36(ptr) AccessChain 31(data) 2209 34 35 + 2216: 22(float) CompositeExtract 2214 0 + Store 2215 2216 + 2217: 36(ptr) AccessChain 31(data) 2209 34 189 + 2218: 22(float) CompositeExtract 2214 1 + Store 2217 2218 + 2219: 6(int) Load 8(invocation) + 2220: 44(ptr) AccessChain 31(data) 33 34 + 2221: 23(fvec4) Load 2220 + 2222: 51(fvec3) VectorShuffle 2221 2221 0 1 2 + 2223: 17(ivec4) Load 19(ballot) + 2224: 51(fvec3) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2222 2223 + 2225: 36(ptr) AccessChain 31(data) 2219 34 35 + 2226: 22(float) CompositeExtract 2224 0 + Store 2225 2226 + 2227: 36(ptr) AccessChain 31(data) 2219 34 189 + 2228: 22(float) CompositeExtract 2224 1 + Store 2227 2228 + 2229: 36(ptr) AccessChain 31(data) 2219 34 202 + 2230: 22(float) CompositeExtract 2224 2 + Store 2229 2230 + 2231: 6(int) Load 8(invocation) + 2232: 44(ptr) AccessChain 31(data) 115 34 + 2233: 23(fvec4) Load 2232 + 2234: 17(ivec4) Load 19(ballot) + 2235: 23(fvec4) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2233 2234 + 2236: 44(ptr) AccessChain 31(data) 2231 34 + Store 2236 2235 + 2237: 6(int) Load 8(invocation) + 2238: 64(ptr) AccessChain 31(data) 34 63 35 + 2239: 24(int) Load 2238 + 2240: 17(ivec4) Load 19(ballot) + 2241: 24(int) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2239 2240 + 2242: 64(ptr) AccessChain 31(data) 2237 63 35 + Store 2242 2241 + 2243: 6(int) Load 8(invocation) + 2244: 71(ptr) AccessChain 31(data) 63 63 + 2245: 25(ivec4) Load 2244 + 2246: 70(ivec2) VectorShuffle 2245 2245 0 1 + 2247: 17(ivec4) Load 19(ballot) + 2248: 70(ivec2) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2246 2247 + 2249: 64(ptr) AccessChain 31(data) 2243 63 35 + 2250: 24(int) CompositeExtract 2248 0 + Store 2249 2250 + 2251: 64(ptr) AccessChain 31(data) 2243 63 189 + 2252: 24(int) CompositeExtract 2248 1 + Store 2251 2252 + 2253: 6(int) Load 8(invocation) + 2254: 71(ptr) AccessChain 31(data) 33 63 + 2255: 25(ivec4) Load 2254 + 2256: 78(ivec3) VectorShuffle 2255 2255 0 1 2 + 2257: 17(ivec4) Load 19(ballot) + 2258: 78(ivec3) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2256 2257 + 2259: 64(ptr) AccessChain 31(data) 2253 63 35 + 2260: 24(int) CompositeExtract 2258 0 + Store 2259 2260 + 2261: 64(ptr) AccessChain 31(data) 2253 63 189 + 2262: 24(int) CompositeExtract 2258 1 + Store 2261 2262 + 2263: 64(ptr) AccessChain 31(data) 2253 63 202 + 2264: 24(int) CompositeExtract 2258 2 + Store 2263 2264 + 2265: 6(int) Load 8(invocation) + 2266: 71(ptr) AccessChain 31(data) 115 63 + 2267: 25(ivec4) Load 2266 + 2268: 17(ivec4) Load 19(ballot) + 2269: 25(ivec4) GroupNonUniformSMin 178 PartitionedExclusiveScanNV 2267 2268 + 2270: 71(ptr) AccessChain 31(data) 2265 63 + Store 2270 2269 + 2271: 6(int) Load 8(invocation) + 2272: 90(ptr) AccessChain 31(data) 34 33 35 + 2273: 6(int) Load 2272 + 2274: 17(ivec4) Load 19(ballot) + 2275: 6(int) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2273 2274 + 2276: 90(ptr) AccessChain 31(data) 2271 33 35 Store 2276 2275 2277: 6(int) Load 8(invocation) - 2278: 71(ptr) AccessChain 31(data) 63 63 - 2279: 25(ivec4) Load 2278 - 2280: 70(ivec2) VectorShuffle 2279 2279 0 1 - 2281: 152(bvec2) SLessThan 2280 727 - 2282: 17(ivec4) Load 19(ballot) - 2283: 152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2281 2282 - 2284: 70(ivec2) Select 2283 731 727 - 2285: 71(ptr) AccessChain 31(data) 2277 63 - 2286: 25(ivec4) Load 2285 - 2287: 25(ivec4) VectorShuffle 2286 2284 4 5 2 3 - Store 2285 2287 - 2288: 6(int) Load 8(invocation) - 2289: 71(ptr) AccessChain 31(data) 63 63 - 2290: 25(ivec4) Load 2289 - 2291: 78(ivec3) VectorShuffle 2290 2290 0 1 2 - 2292: 161(bvec3) SLessThan 2291 740 - 2293: 17(ivec4) Load 19(ballot) - 2294: 161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2292 2293 - 2295: 78(ivec3) Select 2294 744 740 - 2296: 71(ptr) AccessChain 31(data) 2288 63 - 2297: 25(ivec4) Load 2296 - 2298: 25(ivec4) VectorShuffle 2297 2295 4 5 6 3 - Store 2296 2298 + 2278: 40(ptr) AccessChain 31(data) 63 33 + 2279: 17(ivec4) Load 2278 + 2280: 96(ivec2) VectorShuffle 2279 2279 0 1 + 2281: 17(ivec4) Load 19(ballot) + 2282: 96(ivec2) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2280 2281 + 2283: 90(ptr) AccessChain 31(data) 2277 33 35 + 2284: 6(int) CompositeExtract 2282 0 + Store 2283 2284 + 2285: 90(ptr) AccessChain 31(data) 2277 33 189 + 2286: 6(int) CompositeExtract 2282 1 + Store 2285 2286 + 2287: 6(int) Load 8(invocation) + 2288: 40(ptr) AccessChain 31(data) 33 33 + 2289: 17(ivec4) Load 2288 + 2290: 103(ivec3) VectorShuffle 2289 2289 0 1 2 + 2291: 17(ivec4) Load 19(ballot) + 2292: 103(ivec3) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2290 2291 + 2293: 90(ptr) AccessChain 31(data) 2287 33 35 + 2294: 6(int) CompositeExtract 2292 0 + Store 2293 2294 + 2295: 90(ptr) AccessChain 31(data) 2287 33 189 + 2296: 6(int) CompositeExtract 2292 1 + Store 2295 2296 + 2297: 90(ptr) AccessChain 31(data) 2287 33 202 + 2298: 6(int) CompositeExtract 2292 2 + Store 2297 2298 2299: 6(int) Load 8(invocation) - 2300: 71(ptr) AccessChain 31(data) 63 63 - 2301: 25(ivec4) Load 2300 - 2302: 169(bvec4) SLessThan 2301 752 - 2303: 17(ivec4) Load 19(ballot) - 2304: 169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2302 2303 - 2305: 25(ivec4) Select 2304 756 752 - 2306: 71(ptr) AccessChain 31(data) 2299 63 - Store 2306 2305 - 2307: 6(int) Load 8(invocation) - 2308: 64(ptr) AccessChain 31(data) 34 63 35 - 2309: 24(int) Load 2308 - 2310: 17(ivec4) Load 19(ballot) - 2311: 24(int) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2309 2310 - 2312: 64(ptr) AccessChain 31(data) 2307 63 35 - Store 2312 2311 - 2313: 6(int) Load 8(invocation) - 2314: 71(ptr) AccessChain 31(data) 63 63 - 2315: 25(ivec4) Load 2314 - 2316: 70(ivec2) VectorShuffle 2315 2315 0 1 - 2317: 17(ivec4) Load 19(ballot) - 2318: 70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2316 2317 - 2319: 71(ptr) AccessChain 31(data) 2313 63 - 2320: 25(ivec4) Load 2319 - 2321: 25(ivec4) VectorShuffle 2320 2318 4 5 2 3 - Store 2319 2321 - 2322: 6(int) Load 8(invocation) - 2323: 71(ptr) AccessChain 31(data) 33 63 - 2324: 25(ivec4) Load 2323 - 2325: 78(ivec3) VectorShuffle 2324 2324 0 1 2 - 2326: 17(ivec4) Load 19(ballot) - 2327: 78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2325 2326 - 2328: 71(ptr) AccessChain 31(data) 2322 63 - 2329: 25(ivec4) Load 2328 - 2330: 25(ivec4) VectorShuffle 2329 2327 4 5 6 3 - Store 2328 2330 - 2331: 6(int) Load 8(invocation) - 2332: 71(ptr) AccessChain 31(data) 115 63 - 2333: 25(ivec4) Load 2332 - 2334: 17(ivec4) Load 19(ballot) - 2335: 25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2333 2334 - 2336: 71(ptr) AccessChain 31(data) 2331 63 - Store 2336 2335 - 2337: 6(int) Load 8(invocation) - 2338: 90(ptr) AccessChain 31(data) 34 33 35 - 2339: 6(int) Load 2338 - 2340: 17(ivec4) Load 19(ballot) - 2341: 6(int) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2339 2340 - 2342: 90(ptr) AccessChain 31(data) 2337 33 35 - Store 2342 2341 - 2343: 6(int) Load 8(invocation) - 2344: 40(ptr) AccessChain 31(data) 63 33 - 2345: 17(ivec4) Load 2344 - 2346: 96(ivec2) VectorShuffle 2345 2345 0 1 - 2347: 17(ivec4) Load 19(ballot) - 2348: 96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2346 2347 - 2349: 40(ptr) AccessChain 31(data) 2343 33 - 2350: 17(ivec4) Load 2349 - 2351: 17(ivec4) VectorShuffle 2350 2348 4 5 2 3 - Store 2349 2351 - 2352: 6(int) Load 8(invocation) - 2353: 40(ptr) AccessChain 31(data) 33 33 - 2354: 17(ivec4) Load 2353 - 2355: 103(ivec3) VectorShuffle 2354 2354 0 1 2 - 2356: 17(ivec4) Load 19(ballot) - 2357: 103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2355 2356 - 2358: 40(ptr) AccessChain 31(data) 2352 33 - 2359: 17(ivec4) Load 2358 - 2360: 17(ivec4) VectorShuffle 2359 2357 4 5 6 3 - Store 2358 2360 - 2361: 6(int) Load 8(invocation) - 2362: 40(ptr) AccessChain 31(data) 115 33 - 2363: 17(ivec4) Load 2362 - 2364: 17(ivec4) Load 19(ballot) - 2365: 17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2363 2364 - 2366: 40(ptr) AccessChain 31(data) 2361 33 - Store 2366 2365 + 2300: 40(ptr) AccessChain 31(data) 115 33 + 2301: 17(ivec4) Load 2300 + 2302: 17(ivec4) Load 19(ballot) + 2303: 17(ivec4) GroupNonUniformUMin 178 PartitionedExclusiveScanNV 2301 2302 + 2304: 40(ptr) AccessChain 31(data) 2299 33 + Store 2304 2303 + 2305: 6(int) Load 8(invocation) + 2306: 116(ptr) AccessChain 31(data) 34 115 35 + 2307:26(float64_t) Load 2306 + 2308: 17(ivec4) Load 19(ballot) + 2309:26(float64_t) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2307 2308 + 2310: 116(ptr) AccessChain 31(data) 2305 115 35 + Store 2310 2309 + 2311: 6(int) Load 8(invocation) + 2312: 123(ptr) AccessChain 31(data) 63 115 + 2313: 27(f64vec4) Load 2312 + 2314:122(f64vec2) VectorShuffle 2313 2313 0 1 + 2315: 17(ivec4) Load 19(ballot) + 2316:122(f64vec2) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2314 2315 + 2317: 116(ptr) AccessChain 31(data) 2311 115 35 + 2318:26(float64_t) CompositeExtract 2316 0 + Store 2317 2318 + 2319: 116(ptr) AccessChain 31(data) 2311 115 189 + 2320:26(float64_t) CompositeExtract 2316 1 + Store 2319 2320 + 2321: 6(int) Load 8(invocation) + 2322: 123(ptr) AccessChain 31(data) 33 115 + 2323: 27(f64vec4) Load 2322 + 2324:130(f64vec3) VectorShuffle 2323 2323 0 1 2 + 2325: 17(ivec4) Load 19(ballot) + 2326:130(f64vec3) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2324 2325 + 2327: 116(ptr) AccessChain 31(data) 2321 115 35 + 2328:26(float64_t) CompositeExtract 2326 0 + Store 2327 2328 + 2329: 116(ptr) AccessChain 31(data) 2321 115 189 + 2330:26(float64_t) CompositeExtract 2326 1 + Store 2329 2330 + 2331: 116(ptr) AccessChain 31(data) 2321 115 202 + 2332:26(float64_t) CompositeExtract 2326 2 + Store 2331 2332 + 2333: 6(int) Load 8(invocation) + 2334: 123(ptr) AccessChain 31(data) 115 115 + 2335: 27(f64vec4) Load 2334 + 2336: 17(ivec4) Load 19(ballot) + 2337: 27(f64vec4) GroupNonUniformFMin 178 PartitionedExclusiveScanNV 2335 2336 + 2338: 123(ptr) AccessChain 31(data) 2333 115 + Store 2338 2337 + 2339: 6(int) Load 8(invocation) + 2340: 36(ptr) AccessChain 31(data) 34 34 35 + 2341: 22(float) Load 2340 + 2342: 17(ivec4) Load 19(ballot) + 2343: 22(float) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2341 2342 + 2344: 36(ptr) AccessChain 31(data) 2339 34 35 + Store 2344 2343 + 2345: 6(int) Load 8(invocation) + 2346: 44(ptr) AccessChain 31(data) 63 34 + 2347: 23(fvec4) Load 2346 + 2348: 43(fvec2) VectorShuffle 2347 2347 0 1 + 2349: 17(ivec4) Load 19(ballot) + 2350: 43(fvec2) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2348 2349 + 2351: 36(ptr) AccessChain 31(data) 2345 34 35 + 2352: 22(float) CompositeExtract 2350 0 + Store 2351 2352 + 2353: 36(ptr) AccessChain 31(data) 2345 34 189 + 2354: 22(float) CompositeExtract 2350 1 + Store 2353 2354 + 2355: 6(int) Load 8(invocation) + 2356: 44(ptr) AccessChain 31(data) 33 34 + 2357: 23(fvec4) Load 2356 + 2358: 51(fvec3) VectorShuffle 2357 2357 0 1 2 + 2359: 17(ivec4) Load 19(ballot) + 2360: 51(fvec3) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2358 2359 + 2361: 36(ptr) AccessChain 31(data) 2355 34 35 + 2362: 22(float) CompositeExtract 2360 0 + Store 2361 2362 + 2363: 36(ptr) AccessChain 31(data) 2355 34 189 + 2364: 22(float) CompositeExtract 2360 1 + Store 2363 2364 + 2365: 36(ptr) AccessChain 31(data) 2355 34 202 + 2366: 22(float) CompositeExtract 2360 2 + Store 2365 2366 2367: 6(int) Load 8(invocation) - 2368: 64(ptr) AccessChain 31(data) 34 63 35 - 2369: 24(int) Load 2368 - 2370: 144(bool) SLessThan 2369 34 - 2371: 17(ivec4) Load 19(ballot) - 2372: 144(bool) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2370 2371 - 2373: 24(int) Select 2372 63 34 - 2374: 64(ptr) AccessChain 31(data) 2367 63 35 - Store 2374 2373 - 2375: 6(int) Load 8(invocation) - 2376: 71(ptr) AccessChain 31(data) 63 63 - 2377: 25(ivec4) Load 2376 - 2378: 70(ivec2) VectorShuffle 2377 2377 0 1 - 2379: 152(bvec2) SLessThan 2378 727 - 2380: 17(ivec4) Load 19(ballot) - 2381: 152(bvec2) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2379 2380 - 2382: 70(ivec2) Select 2381 731 727 - 2383: 71(ptr) AccessChain 31(data) 2375 63 - 2384: 25(ivec4) Load 2383 - 2385: 25(ivec4) VectorShuffle 2384 2382 4 5 2 3 - Store 2383 2385 - 2386: 6(int) Load 8(invocation) - 2387: 71(ptr) AccessChain 31(data) 63 63 - 2388: 25(ivec4) Load 2387 - 2389: 78(ivec3) VectorShuffle 2388 2388 0 1 2 - 2390: 161(bvec3) SLessThan 2389 740 - 2391: 17(ivec4) Load 19(ballot) - 2392: 161(bvec3) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2390 2391 - 2393: 78(ivec3) Select 2392 744 740 - 2394: 71(ptr) AccessChain 31(data) 2386 63 - 2395: 25(ivec4) Load 2394 - 2396: 25(ivec4) VectorShuffle 2395 2393 4 5 6 3 - Store 2394 2396 - 2397: 6(int) Load 8(invocation) - 2398: 71(ptr) AccessChain 31(data) 63 63 - 2399: 25(ivec4) Load 2398 - 2400: 169(bvec4) SLessThan 2399 752 - 2401: 17(ivec4) Load 19(ballot) - 2402: 169(bvec4) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2400 2401 - 2403: 25(ivec4) Select 2402 756 752 - 2404: 71(ptr) AccessChain 31(data) 2397 63 - Store 2404 2403 - 2405: 6(int) Load 8(invocation) - 2406: 64(ptr) AccessChain 31(data) 34 63 35 - 2407: 24(int) Load 2406 - 2408: 17(ivec4) Load 19(ballot) - 2409: 24(int) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2407 2408 - 2410: 64(ptr) AccessChain 31(data) 2405 63 35 - Store 2410 2409 - 2411: 6(int) Load 8(invocation) - 2412: 71(ptr) AccessChain 31(data) 63 63 - 2413: 25(ivec4) Load 2412 - 2414: 70(ivec2) VectorShuffle 2413 2413 0 1 - 2415: 17(ivec4) Load 19(ballot) - 2416: 70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2414 2415 - 2417: 71(ptr) AccessChain 31(data) 2411 63 - 2418: 25(ivec4) Load 2417 - 2419: 25(ivec4) VectorShuffle 2418 2416 4 5 2 3 - Store 2417 2419 - 2420: 6(int) Load 8(invocation) - 2421: 71(ptr) AccessChain 31(data) 33 63 - 2422: 25(ivec4) Load 2421 - 2423: 78(ivec3) VectorShuffle 2422 2422 0 1 2 - 2424: 17(ivec4) Load 19(ballot) - 2425: 78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2423 2424 - 2426: 71(ptr) AccessChain 31(data) 2420 63 - 2427: 25(ivec4) Load 2426 - 2428: 25(ivec4) VectorShuffle 2427 2425 4 5 6 3 - Store 2426 2428 - 2429: 6(int) Load 8(invocation) - 2430: 71(ptr) AccessChain 31(data) 115 63 - 2431: 25(ivec4) Load 2430 - 2432: 17(ivec4) Load 19(ballot) - 2433: 25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2431 2432 - 2434: 71(ptr) AccessChain 31(data) 2429 63 - Store 2434 2433 + 2368: 44(ptr) AccessChain 31(data) 115 34 + 2369: 23(fvec4) Load 2368 + 2370: 17(ivec4) Load 19(ballot) + 2371: 23(fvec4) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2369 2370 + 2372: 44(ptr) AccessChain 31(data) 2367 34 + Store 2372 2371 + 2373: 6(int) Load 8(invocation) + 2374: 64(ptr) AccessChain 31(data) 34 63 35 + 2375: 24(int) Load 2374 + 2376: 17(ivec4) Load 19(ballot) + 2377: 24(int) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2375 2376 + 2378: 64(ptr) AccessChain 31(data) 2373 63 35 + Store 2378 2377 + 2379: 6(int) Load 8(invocation) + 2380: 71(ptr) AccessChain 31(data) 63 63 + 2381: 25(ivec4) Load 2380 + 2382: 70(ivec2) VectorShuffle 2381 2381 0 1 + 2383: 17(ivec4) Load 19(ballot) + 2384: 70(ivec2) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2382 2383 + 2385: 64(ptr) AccessChain 31(data) 2379 63 35 + 2386: 24(int) CompositeExtract 2384 0 + Store 2385 2386 + 2387: 64(ptr) AccessChain 31(data) 2379 63 189 + 2388: 24(int) CompositeExtract 2384 1 + Store 2387 2388 + 2389: 6(int) Load 8(invocation) + 2390: 71(ptr) AccessChain 31(data) 33 63 + 2391: 25(ivec4) Load 2390 + 2392: 78(ivec3) VectorShuffle 2391 2391 0 1 2 + 2393: 17(ivec4) Load 19(ballot) + 2394: 78(ivec3) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2392 2393 + 2395: 64(ptr) AccessChain 31(data) 2389 63 35 + 2396: 24(int) CompositeExtract 2394 0 + Store 2395 2396 + 2397: 64(ptr) AccessChain 31(data) 2389 63 189 + 2398: 24(int) CompositeExtract 2394 1 + Store 2397 2398 + 2399: 64(ptr) AccessChain 31(data) 2389 63 202 + 2400: 24(int) CompositeExtract 2394 2 + Store 2399 2400 + 2401: 6(int) Load 8(invocation) + 2402: 71(ptr) AccessChain 31(data) 115 63 + 2403: 25(ivec4) Load 2402 + 2404: 17(ivec4) Load 19(ballot) + 2405: 25(ivec4) GroupNonUniformSMax 178 PartitionedExclusiveScanNV 2403 2404 + 2406: 71(ptr) AccessChain 31(data) 2401 63 + Store 2406 2405 + 2407: 6(int) Load 8(invocation) + 2408: 90(ptr) AccessChain 31(data) 34 33 35 + 2409: 6(int) Load 2408 + 2410: 17(ivec4) Load 19(ballot) + 2411: 6(int) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2409 2410 + 2412: 90(ptr) AccessChain 31(data) 2407 33 35 + Store 2412 2411 + 2413: 6(int) Load 8(invocation) + 2414: 40(ptr) AccessChain 31(data) 63 33 + 2415: 17(ivec4) Load 2414 + 2416: 96(ivec2) VectorShuffle 2415 2415 0 1 + 2417: 17(ivec4) Load 19(ballot) + 2418: 96(ivec2) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2416 2417 + 2419: 90(ptr) AccessChain 31(data) 2413 33 35 + 2420: 6(int) CompositeExtract 2418 0 + Store 2419 2420 + 2421: 90(ptr) AccessChain 31(data) 2413 33 189 + 2422: 6(int) CompositeExtract 2418 1 + Store 2421 2422 + 2423: 6(int) Load 8(invocation) + 2424: 40(ptr) AccessChain 31(data) 33 33 + 2425: 17(ivec4) Load 2424 + 2426: 103(ivec3) VectorShuffle 2425 2425 0 1 2 + 2427: 17(ivec4) Load 19(ballot) + 2428: 103(ivec3) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2426 2427 + 2429: 90(ptr) AccessChain 31(data) 2423 33 35 + 2430: 6(int) CompositeExtract 2428 0 + Store 2429 2430 + 2431: 90(ptr) AccessChain 31(data) 2423 33 189 + 2432: 6(int) CompositeExtract 2428 1 + Store 2431 2432 + 2433: 90(ptr) AccessChain 31(data) 2423 33 202 + 2434: 6(int) CompositeExtract 2428 2 + Store 2433 2434 2435: 6(int) Load 8(invocation) - 2436: 90(ptr) AccessChain 31(data) 34 33 35 - 2437: 6(int) Load 2436 + 2436: 40(ptr) AccessChain 31(data) 115 33 + 2437: 17(ivec4) Load 2436 2438: 17(ivec4) Load 19(ballot) - 2439: 6(int) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2437 2438 - 2440: 90(ptr) AccessChain 31(data) 2435 33 35 + 2439: 17(ivec4) GroupNonUniformUMax 178 PartitionedExclusiveScanNV 2437 2438 + 2440: 40(ptr) AccessChain 31(data) 2435 33 Store 2440 2439 2441: 6(int) Load 8(invocation) - 2442: 40(ptr) AccessChain 31(data) 63 33 - 2443: 17(ivec4) Load 2442 - 2444: 96(ivec2) VectorShuffle 2443 2443 0 1 - 2445: 17(ivec4) Load 19(ballot) - 2446: 96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2444 2445 - 2447: 40(ptr) AccessChain 31(data) 2441 33 - 2448: 17(ivec4) Load 2447 - 2449: 17(ivec4) VectorShuffle 2448 2446 4 5 2 3 - Store 2447 2449 - 2450: 6(int) Load 8(invocation) - 2451: 40(ptr) AccessChain 31(data) 33 33 - 2452: 17(ivec4) Load 2451 - 2453: 103(ivec3) VectorShuffle 2452 2452 0 1 2 - 2454: 17(ivec4) Load 19(ballot) - 2455: 103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2453 2454 - 2456: 40(ptr) AccessChain 31(data) 2450 33 - 2457: 17(ivec4) Load 2456 - 2458: 17(ivec4) VectorShuffle 2457 2455 4 5 6 3 - Store 2456 2458 - 2459: 6(int) Load 8(invocation) - 2460: 40(ptr) AccessChain 31(data) 115 33 - 2461: 17(ivec4) Load 2460 - 2462: 17(ivec4) Load 19(ballot) - 2463: 17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2461 2462 - 2464: 40(ptr) AccessChain 31(data) 2459 33 - Store 2464 2463 - 2465: 6(int) Load 8(invocation) - 2466: 64(ptr) AccessChain 31(data) 34 63 35 - 2467: 24(int) Load 2466 - 2468: 144(bool) SLessThan 2467 34 - 2469: 17(ivec4) Load 19(ballot) - 2470: 144(bool) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2468 2469 - 2471: 24(int) Select 2470 63 34 - 2472: 64(ptr) AccessChain 31(data) 2465 63 35 - Store 2472 2471 - 2473: 6(int) Load 8(invocation) - 2474: 71(ptr) AccessChain 31(data) 63 63 - 2475: 25(ivec4) Load 2474 - 2476: 70(ivec2) VectorShuffle 2475 2475 0 1 - 2477: 152(bvec2) SLessThan 2476 727 + 2442: 116(ptr) AccessChain 31(data) 34 115 35 + 2443:26(float64_t) Load 2442 + 2444: 17(ivec4) Load 19(ballot) + 2445:26(float64_t) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2443 2444 + 2446: 116(ptr) AccessChain 31(data) 2441 115 35 + Store 2446 2445 + 2447: 6(int) Load 8(invocation) + 2448: 123(ptr) AccessChain 31(data) 63 115 + 2449: 27(f64vec4) Load 2448 + 2450:122(f64vec2) VectorShuffle 2449 2449 0 1 + 2451: 17(ivec4) Load 19(ballot) + 2452:122(f64vec2) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2450 2451 + 2453: 116(ptr) AccessChain 31(data) 2447 115 35 + 2454:26(float64_t) CompositeExtract 2452 0 + Store 2453 2454 + 2455: 116(ptr) AccessChain 31(data) 2447 115 189 + 2456:26(float64_t) CompositeExtract 2452 1 + Store 2455 2456 + 2457: 6(int) Load 8(invocation) + 2458: 123(ptr) AccessChain 31(data) 33 115 + 2459: 27(f64vec4) Load 2458 + 2460:130(f64vec3) VectorShuffle 2459 2459 0 1 2 + 2461: 17(ivec4) Load 19(ballot) + 2462:130(f64vec3) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2460 2461 + 2463: 116(ptr) AccessChain 31(data) 2457 115 35 + 2464:26(float64_t) CompositeExtract 2462 0 + Store 2463 2464 + 2465: 116(ptr) AccessChain 31(data) 2457 115 189 + 2466:26(float64_t) CompositeExtract 2462 1 + Store 2465 2466 + 2467: 116(ptr) AccessChain 31(data) 2457 115 202 + 2468:26(float64_t) CompositeExtract 2462 2 + Store 2467 2468 + 2469: 6(int) Load 8(invocation) + 2470: 123(ptr) AccessChain 31(data) 115 115 + 2471: 27(f64vec4) Load 2470 + 2472: 17(ivec4) Load 19(ballot) + 2473: 27(f64vec4) GroupNonUniformFMax 178 PartitionedExclusiveScanNV 2471 2472 + 2474: 123(ptr) AccessChain 31(data) 2469 115 + Store 2474 2473 + 2475: 6(int) Load 8(invocation) + 2476: 64(ptr) AccessChain 31(data) 34 63 35 + 2477: 24(int) Load 2476 2478: 17(ivec4) Load 19(ballot) - 2479: 152(bvec2) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2477 2478 - 2480: 70(ivec2) Select 2479 731 727 - 2481: 71(ptr) AccessChain 31(data) 2473 63 - 2482: 25(ivec4) Load 2481 - 2483: 25(ivec4) VectorShuffle 2482 2480 4 5 2 3 - Store 2481 2483 - 2484: 6(int) Load 8(invocation) - 2485: 71(ptr) AccessChain 31(data) 63 63 - 2486: 25(ivec4) Load 2485 - 2487: 78(ivec3) VectorShuffle 2486 2486 0 1 2 - 2488: 161(bvec3) SLessThan 2487 740 - 2489: 17(ivec4) Load 19(ballot) - 2490: 161(bvec3) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2488 2489 - 2491: 78(ivec3) Select 2490 744 740 - 2492: 71(ptr) AccessChain 31(data) 2484 63 + 2479: 24(int) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2477 2478 + 2480: 64(ptr) AccessChain 31(data) 2475 63 35 + Store 2480 2479 + 2481: 6(int) Load 8(invocation) + 2482: 71(ptr) AccessChain 31(data) 63 63 + 2483: 25(ivec4) Load 2482 + 2484: 70(ivec2) VectorShuffle 2483 2483 0 1 + 2485: 17(ivec4) Load 19(ballot) + 2486: 70(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2484 2485 + 2487: 64(ptr) AccessChain 31(data) 2481 63 35 + 2488: 24(int) CompositeExtract 2486 0 + Store 2487 2488 + 2489: 64(ptr) AccessChain 31(data) 2481 63 189 + 2490: 24(int) CompositeExtract 2486 1 + Store 2489 2490 + 2491: 6(int) Load 8(invocation) + 2492: 71(ptr) AccessChain 31(data) 33 63 2493: 25(ivec4) Load 2492 - 2494: 25(ivec4) VectorShuffle 2493 2491 4 5 6 3 - Store 2492 2494 - 2495: 6(int) Load 8(invocation) - 2496: 71(ptr) AccessChain 31(data) 63 63 - 2497: 25(ivec4) Load 2496 - 2498: 169(bvec4) SLessThan 2497 752 - 2499: 17(ivec4) Load 19(ballot) - 2500: 169(bvec4) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2498 2499 - 2501: 25(ivec4) Select 2500 756 752 - 2502: 71(ptr) AccessChain 31(data) 2495 63 - Store 2502 2501 + 2494: 78(ivec3) VectorShuffle 2493 2493 0 1 2 + 2495: 17(ivec4) Load 19(ballot) + 2496: 78(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2494 2495 + 2497: 64(ptr) AccessChain 31(data) 2491 63 35 + 2498: 24(int) CompositeExtract 2496 0 + Store 2497 2498 + 2499: 64(ptr) AccessChain 31(data) 2491 63 189 + 2500: 24(int) CompositeExtract 2496 1 + Store 2499 2500 + 2501: 64(ptr) AccessChain 31(data) 2491 63 202 + 2502: 24(int) CompositeExtract 2496 2 + Store 2501 2502 + 2503: 6(int) Load 8(invocation) + 2504: 71(ptr) AccessChain 31(data) 115 63 + 2505: 25(ivec4) Load 2504 + 2506: 17(ivec4) Load 19(ballot) + 2507: 25(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2505 2506 + 2508: 71(ptr) AccessChain 31(data) 2503 63 + Store 2508 2507 + 2509: 6(int) Load 8(invocation) + 2510: 90(ptr) AccessChain 31(data) 34 33 35 + 2511: 6(int) Load 2510 + 2512: 17(ivec4) Load 19(ballot) + 2513: 6(int) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2511 2512 + 2514: 90(ptr) AccessChain 31(data) 2509 33 35 + Store 2514 2513 + 2515: 6(int) Load 8(invocation) + 2516: 40(ptr) AccessChain 31(data) 63 33 + 2517: 17(ivec4) Load 2516 + 2518: 96(ivec2) VectorShuffle 2517 2517 0 1 + 2519: 17(ivec4) Load 19(ballot) + 2520: 96(ivec2) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2518 2519 + 2521: 90(ptr) AccessChain 31(data) 2515 33 35 + 2522: 6(int) CompositeExtract 2520 0 + Store 2521 2522 + 2523: 90(ptr) AccessChain 31(data) 2515 33 189 + 2524: 6(int) CompositeExtract 2520 1 + Store 2523 2524 + 2525: 6(int) Load 8(invocation) + 2526: 40(ptr) AccessChain 31(data) 33 33 + 2527: 17(ivec4) Load 2526 + 2528: 103(ivec3) VectorShuffle 2527 2527 0 1 2 + 2529: 17(ivec4) Load 19(ballot) + 2530: 103(ivec3) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2528 2529 + 2531: 90(ptr) AccessChain 31(data) 2525 33 35 + 2532: 6(int) CompositeExtract 2530 0 + Store 2531 2532 + 2533: 90(ptr) AccessChain 31(data) 2525 33 189 + 2534: 6(int) CompositeExtract 2530 1 + Store 2533 2534 + 2535: 90(ptr) AccessChain 31(data) 2525 33 202 + 2536: 6(int) CompositeExtract 2530 2 + Store 2535 2536 + 2537: 6(int) Load 8(invocation) + 2538: 40(ptr) AccessChain 31(data) 115 33 + 2539: 17(ivec4) Load 2538 + 2540: 17(ivec4) Load 19(ballot) + 2541: 17(ivec4) GroupNonUniformBitwiseAnd 178 PartitionedExclusiveScanNV 2539 2540 + 2542: 40(ptr) AccessChain 31(data) 2537 33 + Store 2542 2541 + 2543: 6(int) Load 8(invocation) + 2544: 64(ptr) AccessChain 31(data) 34 63 35 + 2545: 24(int) Load 2544 + 2546: 144(bool) SLessThan 2545 34 + 2547: 17(ivec4) Load 19(ballot) + 2548: 144(bool) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2546 2547 + 2549: 24(int) Select 2548 63 34 + 2550: 64(ptr) AccessChain 31(data) 2543 63 35 + Store 2550 2549 + 2551: 6(int) Load 8(invocation) + 2552: 71(ptr) AccessChain 31(data) 63 63 + 2553: 25(ivec4) Load 2552 + 2554: 70(ivec2) VectorShuffle 2553 2553 0 1 + 2555: 152(bvec2) SLessThan 2554 801 + 2556: 17(ivec4) Load 19(ballot) + 2557: 152(bvec2) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2555 2556 + 2558: 70(ivec2) Select 2557 805 801 + 2559: 64(ptr) AccessChain 31(data) 2551 63 35 + 2560: 24(int) CompositeExtract 2558 0 + Store 2559 2560 + 2561: 64(ptr) AccessChain 31(data) 2551 63 189 + 2562: 24(int) CompositeExtract 2558 1 + Store 2561 2562 + 2563: 6(int) Load 8(invocation) + 2564: 71(ptr) AccessChain 31(data) 63 63 + 2565: 25(ivec4) Load 2564 + 2566: 78(ivec3) VectorShuffle 2565 2565 0 1 2 + 2567: 161(bvec3) SLessThan 2566 815 + 2568: 17(ivec4) Load 19(ballot) + 2569: 161(bvec3) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2567 2568 + 2570: 78(ivec3) Select 2569 819 815 + 2571: 64(ptr) AccessChain 31(data) 2563 63 35 + 2572: 24(int) CompositeExtract 2570 0 + Store 2571 2572 + 2573: 64(ptr) AccessChain 31(data) 2563 63 189 + 2574: 24(int) CompositeExtract 2570 1 + Store 2573 2574 + 2575: 64(ptr) AccessChain 31(data) 2563 63 202 + 2576: 24(int) CompositeExtract 2570 2 + Store 2575 2576 + 2577: 6(int) Load 8(invocation) + 2578: 71(ptr) AccessChain 31(data) 63 63 + 2579: 25(ivec4) Load 2578 + 2580: 169(bvec4) SLessThan 2579 830 + 2581: 17(ivec4) Load 19(ballot) + 2582: 169(bvec4) GroupNonUniformLogicalAnd 178 PartitionedExclusiveScanNV 2580 2581 + 2583: 25(ivec4) Select 2582 834 830 + 2584: 71(ptr) AccessChain 31(data) 2577 63 + Store 2584 2583 + 2585: 6(int) Load 8(invocation) + 2586: 64(ptr) AccessChain 31(data) 34 63 35 + 2587: 24(int) Load 2586 + 2588: 17(ivec4) Load 19(ballot) + 2589: 24(int) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2587 2588 + 2590: 64(ptr) AccessChain 31(data) 2585 63 35 + Store 2590 2589 + 2591: 6(int) Load 8(invocation) + 2592: 71(ptr) AccessChain 31(data) 63 63 + 2593: 25(ivec4) Load 2592 + 2594: 70(ivec2) VectorShuffle 2593 2593 0 1 + 2595: 17(ivec4) Load 19(ballot) + 2596: 70(ivec2) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2594 2595 + 2597: 64(ptr) AccessChain 31(data) 2591 63 35 + 2598: 24(int) CompositeExtract 2596 0 + Store 2597 2598 + 2599: 64(ptr) AccessChain 31(data) 2591 63 189 + 2600: 24(int) CompositeExtract 2596 1 + Store 2599 2600 + 2601: 6(int) Load 8(invocation) + 2602: 71(ptr) AccessChain 31(data) 33 63 + 2603: 25(ivec4) Load 2602 + 2604: 78(ivec3) VectorShuffle 2603 2603 0 1 2 + 2605: 17(ivec4) Load 19(ballot) + 2606: 78(ivec3) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2604 2605 + 2607: 64(ptr) AccessChain 31(data) 2601 63 35 + 2608: 24(int) CompositeExtract 2606 0 + Store 2607 2608 + 2609: 64(ptr) AccessChain 31(data) 2601 63 189 + 2610: 24(int) CompositeExtract 2606 1 + Store 2609 2610 + 2611: 64(ptr) AccessChain 31(data) 2601 63 202 + 2612: 24(int) CompositeExtract 2606 2 + Store 2611 2612 + 2613: 6(int) Load 8(invocation) + 2614: 71(ptr) AccessChain 31(data) 115 63 + 2615: 25(ivec4) Load 2614 + 2616: 17(ivec4) Load 19(ballot) + 2617: 25(ivec4) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2615 2616 + 2618: 71(ptr) AccessChain 31(data) 2613 63 + Store 2618 2617 + 2619: 6(int) Load 8(invocation) + 2620: 90(ptr) AccessChain 31(data) 34 33 35 + 2621: 6(int) Load 2620 + 2622: 17(ivec4) Load 19(ballot) + 2623: 6(int) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2621 2622 + 2624: 90(ptr) AccessChain 31(data) 2619 33 35 + Store 2624 2623 + 2625: 6(int) Load 8(invocation) + 2626: 40(ptr) AccessChain 31(data) 63 33 + 2627: 17(ivec4) Load 2626 + 2628: 96(ivec2) VectorShuffle 2627 2627 0 1 + 2629: 17(ivec4) Load 19(ballot) + 2630: 96(ivec2) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2628 2629 + 2631: 90(ptr) AccessChain 31(data) 2625 33 35 + 2632: 6(int) CompositeExtract 2630 0 + Store 2631 2632 + 2633: 90(ptr) AccessChain 31(data) 2625 33 189 + 2634: 6(int) CompositeExtract 2630 1 + Store 2633 2634 + 2635: 6(int) Load 8(invocation) + 2636: 40(ptr) AccessChain 31(data) 33 33 + 2637: 17(ivec4) Load 2636 + 2638: 103(ivec3) VectorShuffle 2637 2637 0 1 2 + 2639: 17(ivec4) Load 19(ballot) + 2640: 103(ivec3) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2638 2639 + 2641: 90(ptr) AccessChain 31(data) 2635 33 35 + 2642: 6(int) CompositeExtract 2640 0 + Store 2641 2642 + 2643: 90(ptr) AccessChain 31(data) 2635 33 189 + 2644: 6(int) CompositeExtract 2640 1 + Store 2643 2644 + 2645: 90(ptr) AccessChain 31(data) 2635 33 202 + 2646: 6(int) CompositeExtract 2640 2 + Store 2645 2646 + 2647: 6(int) Load 8(invocation) + 2648: 40(ptr) AccessChain 31(data) 115 33 + 2649: 17(ivec4) Load 2648 + 2650: 17(ivec4) Load 19(ballot) + 2651: 17(ivec4) GroupNonUniformBitwiseOr 178 PartitionedExclusiveScanNV 2649 2650 + 2652: 40(ptr) AccessChain 31(data) 2647 33 + Store 2652 2651 + 2653: 6(int) Load 8(invocation) + 2654: 64(ptr) AccessChain 31(data) 34 63 35 + 2655: 24(int) Load 2654 + 2656: 144(bool) SLessThan 2655 34 + 2657: 17(ivec4) Load 19(ballot) + 2658: 144(bool) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2656 2657 + 2659: 24(int) Select 2658 63 34 + 2660: 64(ptr) AccessChain 31(data) 2653 63 35 + Store 2660 2659 + 2661: 6(int) Load 8(invocation) + 2662: 71(ptr) AccessChain 31(data) 63 63 + 2663: 25(ivec4) Load 2662 + 2664: 70(ivec2) VectorShuffle 2663 2663 0 1 + 2665: 152(bvec2) SLessThan 2664 801 + 2666: 17(ivec4) Load 19(ballot) + 2667: 152(bvec2) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2665 2666 + 2668: 70(ivec2) Select 2667 805 801 + 2669: 64(ptr) AccessChain 31(data) 2661 63 35 + 2670: 24(int) CompositeExtract 2668 0 + Store 2669 2670 + 2671: 64(ptr) AccessChain 31(data) 2661 63 189 + 2672: 24(int) CompositeExtract 2668 1 + Store 2671 2672 + 2673: 6(int) Load 8(invocation) + 2674: 71(ptr) AccessChain 31(data) 63 63 + 2675: 25(ivec4) Load 2674 + 2676: 78(ivec3) VectorShuffle 2675 2675 0 1 2 + 2677: 161(bvec3) SLessThan 2676 815 + 2678: 17(ivec4) Load 19(ballot) + 2679: 161(bvec3) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2677 2678 + 2680: 78(ivec3) Select 2679 819 815 + 2681: 64(ptr) AccessChain 31(data) 2673 63 35 + 2682: 24(int) CompositeExtract 2680 0 + Store 2681 2682 + 2683: 64(ptr) AccessChain 31(data) 2673 63 189 + 2684: 24(int) CompositeExtract 2680 1 + Store 2683 2684 + 2685: 64(ptr) AccessChain 31(data) 2673 63 202 + 2686: 24(int) CompositeExtract 2680 2 + Store 2685 2686 + 2687: 6(int) Load 8(invocation) + 2688: 71(ptr) AccessChain 31(data) 63 63 + 2689: 25(ivec4) Load 2688 + 2690: 169(bvec4) SLessThan 2689 830 + 2691: 17(ivec4) Load 19(ballot) + 2692: 169(bvec4) GroupNonUniformLogicalOr 178 PartitionedExclusiveScanNV 2690 2691 + 2693: 25(ivec4) Select 2692 834 830 + 2694: 71(ptr) AccessChain 31(data) 2687 63 + Store 2694 2693 + 2695: 6(int) Load 8(invocation) + 2696: 64(ptr) AccessChain 31(data) 34 63 35 + 2697: 24(int) Load 2696 + 2698: 17(ivec4) Load 19(ballot) + 2699: 24(int) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2697 2698 + 2700: 64(ptr) AccessChain 31(data) 2695 63 35 + Store 2700 2699 + 2701: 6(int) Load 8(invocation) + 2702: 71(ptr) AccessChain 31(data) 63 63 + 2703: 25(ivec4) Load 2702 + 2704: 70(ivec2) VectorShuffle 2703 2703 0 1 + 2705: 17(ivec4) Load 19(ballot) + 2706: 70(ivec2) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2704 2705 + 2707: 64(ptr) AccessChain 31(data) 2701 63 35 + 2708: 24(int) CompositeExtract 2706 0 + Store 2707 2708 + 2709: 64(ptr) AccessChain 31(data) 2701 63 189 + 2710: 24(int) CompositeExtract 2706 1 + Store 2709 2710 + 2711: 6(int) Load 8(invocation) + 2712: 71(ptr) AccessChain 31(data) 33 63 + 2713: 25(ivec4) Load 2712 + 2714: 78(ivec3) VectorShuffle 2713 2713 0 1 2 + 2715: 17(ivec4) Load 19(ballot) + 2716: 78(ivec3) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2714 2715 + 2717: 64(ptr) AccessChain 31(data) 2711 63 35 + 2718: 24(int) CompositeExtract 2716 0 + Store 2717 2718 + 2719: 64(ptr) AccessChain 31(data) 2711 63 189 + 2720: 24(int) CompositeExtract 2716 1 + Store 2719 2720 + 2721: 64(ptr) AccessChain 31(data) 2711 63 202 + 2722: 24(int) CompositeExtract 2716 2 + Store 2721 2722 + 2723: 6(int) Load 8(invocation) + 2724: 71(ptr) AccessChain 31(data) 115 63 + 2725: 25(ivec4) Load 2724 + 2726: 17(ivec4) Load 19(ballot) + 2727: 25(ivec4) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2725 2726 + 2728: 71(ptr) AccessChain 31(data) 2723 63 + Store 2728 2727 + 2729: 6(int) Load 8(invocation) + 2730: 90(ptr) AccessChain 31(data) 34 33 35 + 2731: 6(int) Load 2730 + 2732: 17(ivec4) Load 19(ballot) + 2733: 6(int) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2731 2732 + 2734: 90(ptr) AccessChain 31(data) 2729 33 35 + Store 2734 2733 + 2735: 6(int) Load 8(invocation) + 2736: 40(ptr) AccessChain 31(data) 63 33 + 2737: 17(ivec4) Load 2736 + 2738: 96(ivec2) VectorShuffle 2737 2737 0 1 + 2739: 17(ivec4) Load 19(ballot) + 2740: 96(ivec2) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2738 2739 + 2741: 90(ptr) AccessChain 31(data) 2735 33 35 + 2742: 6(int) CompositeExtract 2740 0 + Store 2741 2742 + 2743: 90(ptr) AccessChain 31(data) 2735 33 189 + 2744: 6(int) CompositeExtract 2740 1 + Store 2743 2744 + 2745: 6(int) Load 8(invocation) + 2746: 40(ptr) AccessChain 31(data) 33 33 + 2747: 17(ivec4) Load 2746 + 2748: 103(ivec3) VectorShuffle 2747 2747 0 1 2 + 2749: 17(ivec4) Load 19(ballot) + 2750: 103(ivec3) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2748 2749 + 2751: 90(ptr) AccessChain 31(data) 2745 33 35 + 2752: 6(int) CompositeExtract 2750 0 + Store 2751 2752 + 2753: 90(ptr) AccessChain 31(data) 2745 33 189 + 2754: 6(int) CompositeExtract 2750 1 + Store 2753 2754 + 2755: 90(ptr) AccessChain 31(data) 2745 33 202 + 2756: 6(int) CompositeExtract 2750 2 + Store 2755 2756 + 2757: 6(int) Load 8(invocation) + 2758: 40(ptr) AccessChain 31(data) 115 33 + 2759: 17(ivec4) Load 2758 + 2760: 17(ivec4) Load 19(ballot) + 2761: 17(ivec4) GroupNonUniformBitwiseXor 178 PartitionedExclusiveScanNV 2759 2760 + 2762: 40(ptr) AccessChain 31(data) 2757 33 + Store 2762 2761 + 2763: 6(int) Load 8(invocation) + 2764: 64(ptr) AccessChain 31(data) 34 63 35 + 2765: 24(int) Load 2764 + 2766: 144(bool) SLessThan 2765 34 + 2767: 17(ivec4) Load 19(ballot) + 2768: 144(bool) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2766 2767 + 2769: 24(int) Select 2768 63 34 + 2770: 64(ptr) AccessChain 31(data) 2763 63 35 + Store 2770 2769 + 2771: 6(int) Load 8(invocation) + 2772: 71(ptr) AccessChain 31(data) 63 63 + 2773: 25(ivec4) Load 2772 + 2774: 70(ivec2) VectorShuffle 2773 2773 0 1 + 2775: 152(bvec2) SLessThan 2774 801 + 2776: 17(ivec4) Load 19(ballot) + 2777: 152(bvec2) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2775 2776 + 2778: 70(ivec2) Select 2777 805 801 + 2779: 64(ptr) AccessChain 31(data) 2771 63 35 + 2780: 24(int) CompositeExtract 2778 0 + Store 2779 2780 + 2781: 64(ptr) AccessChain 31(data) 2771 63 189 + 2782: 24(int) CompositeExtract 2778 1 + Store 2781 2782 + 2783: 6(int) Load 8(invocation) + 2784: 71(ptr) AccessChain 31(data) 63 63 + 2785: 25(ivec4) Load 2784 + 2786: 78(ivec3) VectorShuffle 2785 2785 0 1 2 + 2787: 161(bvec3) SLessThan 2786 815 + 2788: 17(ivec4) Load 19(ballot) + 2789: 161(bvec3) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2787 2788 + 2790: 78(ivec3) Select 2789 819 815 + 2791: 64(ptr) AccessChain 31(data) 2783 63 35 + 2792: 24(int) CompositeExtract 2790 0 + Store 2791 2792 + 2793: 64(ptr) AccessChain 31(data) 2783 63 189 + 2794: 24(int) CompositeExtract 2790 1 + Store 2793 2794 + 2795: 64(ptr) AccessChain 31(data) 2783 63 202 + 2796: 24(int) CompositeExtract 2790 2 + Store 2795 2796 + 2797: 6(int) Load 8(invocation) + 2798: 71(ptr) AccessChain 31(data) 63 63 + 2799: 25(ivec4) Load 2798 + 2800: 169(bvec4) SLessThan 2799 830 + 2801: 17(ivec4) Load 19(ballot) + 2802: 169(bvec4) GroupNonUniformLogicalXor 178 PartitionedExclusiveScanNV 2800 2801 + 2803: 25(ivec4) Select 2802 834 830 + 2804: 71(ptr) AccessChain 31(data) 2797 63 + Store 2804 2803 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupQuad.comp.out b/Test/baseResults/spv.subgroupQuad.comp.out index 644fa72e28..143d01d779 100644 --- a/Test/baseResults/spv.subgroupQuad.comp.out +++ b/Test/baseResults/spv.subgroupQuad.comp.out @@ -1,7 +1,7 @@ spv.subgroupQuad.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 616 +// Id's are bound by 696 Capability Shader Capability Float64 @@ -39,7 +39,7 @@ spv.subgroupQuad.comp Decorate 24(Buffers) Block Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 - Decorate 615 BuiltIn WorkgroupSize + Decorate 695 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -67,34 +67,34 @@ spv.subgroupQuad.comp 39: 19(int) Constant 1 40: TypeVector 17(float) 2 41: TypePointer StorageBuffer 18(fvec4) - 50: 19(int) Constant 2 - 51: TypeVector 17(float) 3 - 60: 19(int) Constant 3 - 66: TypePointer StorageBuffer 19(int) - 72: TypeVector 19(int) 2 - 73: TypePointer StorageBuffer 20(ivec4) - 82: TypeVector 19(int) 3 - 96: TypePointer StorageBuffer 6(int) - 102: TypeVector 6(int) 2 - 103: TypePointer StorageBuffer 21(ivec4) - 112: TypeVector 6(int) 3 - 126: TypePointer StorageBuffer 22(float64_t) - 132: TypeVector 22(float64_t) 2 - 133: TypePointer StorageBuffer 23(f64vec4) - 142: TypeVector 22(float64_t) 3 - 158: TypeBool - 167: 72(ivec2) ConstantComposite 29 29 - 168: TypeVector 158(bool) 2 - 171: 72(ivec2) ConstantComposite 39 39 - 180: 82(ivec3) ConstantComposite 29 29 29 - 181: TypeVector 158(bool) 3 - 184: 82(ivec3) ConstantComposite 39 39 39 - 192: 20(ivec4) ConstantComposite 29 29 29 29 - 193: TypeVector 158(bool) 4 - 196: 20(ivec4) ConstantComposite 39 39 39 39 - 478: 6(int) Constant 2 - 614: 6(int) Constant 8 - 615: 112(ivec3) ConstantComposite 614 34 34 + 51: 19(int) Constant 2 + 52: TypeVector 17(float) 3 + 61: 6(int) Constant 2 + 65: 19(int) Constant 3 + 71: TypePointer StorageBuffer 19(int) + 77: TypeVector 19(int) 2 + 78: TypePointer StorageBuffer 20(ivec4) + 88: TypeVector 19(int) 3 + 105: TypePointer StorageBuffer 6(int) + 111: TypeVector 6(int) 2 + 112: TypePointer StorageBuffer 21(ivec4) + 122: TypeVector 6(int) 3 + 139: TypePointer StorageBuffer 22(float64_t) + 145: TypeVector 22(float64_t) 2 + 146: TypePointer StorageBuffer 23(f64vec4) + 156: TypeVector 22(float64_t) 3 + 175: TypeBool + 184: 77(ivec2) ConstantComposite 29 29 + 185: TypeVector 175(bool) 2 + 188: 77(ivec2) ConstantComposite 39 39 + 198: 88(ivec3) ConstantComposite 29 29 29 + 199: TypeVector 175(bool) 3 + 202: 88(ivec3) ConstantComposite 39 39 39 + 213: 20(ivec4) ConstantComposite 29 29 29 29 + 214: TypeVector 175(bool) 4 + 217: 20(ivec4) ConstantComposite 39 39 39 39 + 694: 6(int) Constant 8 + 695: 122(ivec3) ConstantComposite 694 34 34 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -114,626 +114,766 @@ spv.subgroupQuad.comp 43: 18(fvec4) Load 42 44: 40(fvec2) VectorShuffle 43 43 0 1 45: 40(fvec2) GroupNonUniformQuadBroadcast 35 44 34 - 46: 41(ptr) AccessChain 27(data) 38 29 - 47: 18(fvec4) Load 46 - 48: 18(fvec4) VectorShuffle 47 45 4 5 2 3 - Store 46 48 - 49: 6(int) Load 8(invocation) - 52: 41(ptr) AccessChain 27(data) 50 29 - 53: 18(fvec4) Load 52 - 54: 51(fvec3) VectorShuffle 53 53 0 1 2 - 55: 51(fvec3) GroupNonUniformQuadBroadcast 35 54 34 - 56: 41(ptr) AccessChain 27(data) 49 29 - 57: 18(fvec4) Load 56 - 58: 18(fvec4) VectorShuffle 57 55 4 5 6 3 - Store 56 58 - 59: 6(int) Load 8(invocation) - 61: 41(ptr) AccessChain 27(data) 60 29 - 62: 18(fvec4) Load 61 - 63: 18(fvec4) GroupNonUniformQuadBroadcast 35 62 34 - 64: 41(ptr) AccessChain 27(data) 59 29 - Store 64 63 - 65: 6(int) Load 8(invocation) - 67: 66(ptr) AccessChain 27(data) 29 39 30 - 68: 19(int) Load 67 - 69: 19(int) GroupNonUniformQuadBroadcast 35 68 34 - 70: 66(ptr) AccessChain 27(data) 65 39 30 - Store 70 69 - 71: 6(int) Load 8(invocation) - 74: 73(ptr) AccessChain 27(data) 39 39 - 75: 20(ivec4) Load 74 - 76: 72(ivec2) VectorShuffle 75 75 0 1 - 77: 72(ivec2) GroupNonUniformQuadBroadcast 35 76 34 - 78: 73(ptr) AccessChain 27(data) 71 39 - 79: 20(ivec4) Load 78 - 80: 20(ivec4) VectorShuffle 79 77 4 5 2 3 - Store 78 80 - 81: 6(int) Load 8(invocation) - 83: 73(ptr) AccessChain 27(data) 50 39 - 84: 20(ivec4) Load 83 - 85: 82(ivec3) VectorShuffle 84 84 0 1 2 - 86: 82(ivec3) GroupNonUniformQuadBroadcast 35 85 34 - 87: 73(ptr) AccessChain 27(data) 81 39 - 88: 20(ivec4) Load 87 - 89: 20(ivec4) VectorShuffle 88 86 4 5 6 3 - Store 87 89 - 90: 6(int) Load 8(invocation) - 91: 73(ptr) AccessChain 27(data) 60 39 - 92: 20(ivec4) Load 91 - 93: 20(ivec4) GroupNonUniformQuadBroadcast 35 92 34 - 94: 73(ptr) AccessChain 27(data) 90 39 - Store 94 93 - 95: 6(int) Load 8(invocation) - 97: 96(ptr) AccessChain 27(data) 29 50 30 - 98: 6(int) Load 97 - 99: 6(int) GroupNonUniformQuadBroadcast 35 98 34 - 100: 96(ptr) AccessChain 27(data) 95 50 30 - Store 100 99 - 101: 6(int) Load 8(invocation) - 104: 103(ptr) AccessChain 27(data) 39 50 - 105: 21(ivec4) Load 104 - 106: 102(ivec2) VectorShuffle 105 105 0 1 - 107: 102(ivec2) GroupNonUniformQuadBroadcast 35 106 34 - 108: 103(ptr) AccessChain 27(data) 101 50 - 109: 21(ivec4) Load 108 - 110: 21(ivec4) VectorShuffle 109 107 4 5 2 3 - Store 108 110 - 111: 6(int) Load 8(invocation) - 113: 103(ptr) AccessChain 27(data) 50 50 + 46: 31(ptr) AccessChain 27(data) 38 29 30 + 47: 17(float) CompositeExtract 45 0 + Store 46 47 + 48: 31(ptr) AccessChain 27(data) 38 29 34 + 49: 17(float) CompositeExtract 45 1 + Store 48 49 + 50: 6(int) Load 8(invocation) + 53: 41(ptr) AccessChain 27(data) 51 29 + 54: 18(fvec4) Load 53 + 55: 52(fvec3) VectorShuffle 54 54 0 1 2 + 56: 52(fvec3) GroupNonUniformQuadBroadcast 35 55 34 + 57: 31(ptr) AccessChain 27(data) 50 29 30 + 58: 17(float) CompositeExtract 56 0 + Store 57 58 + 59: 31(ptr) AccessChain 27(data) 50 29 34 + 60: 17(float) CompositeExtract 56 1 + Store 59 60 + 62: 31(ptr) AccessChain 27(data) 50 29 61 + 63: 17(float) CompositeExtract 56 2 + Store 62 63 + 64: 6(int) Load 8(invocation) + 66: 41(ptr) AccessChain 27(data) 65 29 + 67: 18(fvec4) Load 66 + 68: 18(fvec4) GroupNonUniformQuadBroadcast 35 67 34 + 69: 41(ptr) AccessChain 27(data) 64 29 + Store 69 68 + 70: 6(int) Load 8(invocation) + 72: 71(ptr) AccessChain 27(data) 29 39 30 + 73: 19(int) Load 72 + 74: 19(int) GroupNonUniformQuadBroadcast 35 73 34 + 75: 71(ptr) AccessChain 27(data) 70 39 30 + Store 75 74 + 76: 6(int) Load 8(invocation) + 79: 78(ptr) AccessChain 27(data) 39 39 + 80: 20(ivec4) Load 79 + 81: 77(ivec2) VectorShuffle 80 80 0 1 + 82: 77(ivec2) GroupNonUniformQuadBroadcast 35 81 34 + 83: 71(ptr) AccessChain 27(data) 76 39 30 + 84: 19(int) CompositeExtract 82 0 + Store 83 84 + 85: 71(ptr) AccessChain 27(data) 76 39 34 + 86: 19(int) CompositeExtract 82 1 + Store 85 86 + 87: 6(int) Load 8(invocation) + 89: 78(ptr) AccessChain 27(data) 51 39 + 90: 20(ivec4) Load 89 + 91: 88(ivec3) VectorShuffle 90 90 0 1 2 + 92: 88(ivec3) GroupNonUniformQuadBroadcast 35 91 34 + 93: 71(ptr) AccessChain 27(data) 87 39 30 + 94: 19(int) CompositeExtract 92 0 + Store 93 94 + 95: 71(ptr) AccessChain 27(data) 87 39 34 + 96: 19(int) CompositeExtract 92 1 + Store 95 96 + 97: 71(ptr) AccessChain 27(data) 87 39 61 + 98: 19(int) CompositeExtract 92 2 + Store 97 98 + 99: 6(int) Load 8(invocation) + 100: 78(ptr) AccessChain 27(data) 65 39 + 101: 20(ivec4) Load 100 + 102: 20(ivec4) GroupNonUniformQuadBroadcast 35 101 34 + 103: 78(ptr) AccessChain 27(data) 99 39 + Store 103 102 + 104: 6(int) Load 8(invocation) + 106: 105(ptr) AccessChain 27(data) 29 51 30 + 107: 6(int) Load 106 + 108: 6(int) GroupNonUniformQuadBroadcast 35 107 34 + 109: 105(ptr) AccessChain 27(data) 104 51 30 + Store 109 108 + 110: 6(int) Load 8(invocation) + 113: 112(ptr) AccessChain 27(data) 39 51 114: 21(ivec4) Load 113 - 115: 112(ivec3) VectorShuffle 114 114 0 1 2 - 116: 112(ivec3) GroupNonUniformQuadBroadcast 35 115 34 - 117: 103(ptr) AccessChain 27(data) 111 50 - 118: 21(ivec4) Load 117 - 119: 21(ivec4) VectorShuffle 118 116 4 5 6 3 - Store 117 119 - 120: 6(int) Load 8(invocation) - 121: 103(ptr) AccessChain 27(data) 60 50 - 122: 21(ivec4) Load 121 - 123: 21(ivec4) GroupNonUniformQuadBroadcast 35 122 34 - 124: 103(ptr) AccessChain 27(data) 120 50 - Store 124 123 - 125: 6(int) Load 8(invocation) - 127: 126(ptr) AccessChain 27(data) 29 60 30 - 128:22(float64_t) Load 127 - 129:22(float64_t) GroupNonUniformQuadBroadcast 35 128 34 - 130: 126(ptr) AccessChain 27(data) 125 60 30 - Store 130 129 - 131: 6(int) Load 8(invocation) - 134: 133(ptr) AccessChain 27(data) 39 60 - 135: 23(f64vec4) Load 134 - 136:132(f64vec2) VectorShuffle 135 135 0 1 - 137:132(f64vec2) GroupNonUniformQuadBroadcast 35 136 34 - 138: 133(ptr) AccessChain 27(data) 131 60 - 139: 23(f64vec4) Load 138 - 140: 23(f64vec4) VectorShuffle 139 137 4 5 2 3 - Store 138 140 - 141: 6(int) Load 8(invocation) - 143: 133(ptr) AccessChain 27(data) 50 60 - 144: 23(f64vec4) Load 143 - 145:142(f64vec3) VectorShuffle 144 144 0 1 2 - 146:142(f64vec3) GroupNonUniformQuadBroadcast 35 145 34 - 147: 133(ptr) AccessChain 27(data) 141 60 + 115: 111(ivec2) VectorShuffle 114 114 0 1 + 116: 111(ivec2) GroupNonUniformQuadBroadcast 35 115 34 + 117: 105(ptr) AccessChain 27(data) 110 51 30 + 118: 6(int) CompositeExtract 116 0 + Store 117 118 + 119: 105(ptr) AccessChain 27(data) 110 51 34 + 120: 6(int) CompositeExtract 116 1 + Store 119 120 + 121: 6(int) Load 8(invocation) + 123: 112(ptr) AccessChain 27(data) 51 51 + 124: 21(ivec4) Load 123 + 125: 122(ivec3) VectorShuffle 124 124 0 1 2 + 126: 122(ivec3) GroupNonUniformQuadBroadcast 35 125 34 + 127: 105(ptr) AccessChain 27(data) 121 51 30 + 128: 6(int) CompositeExtract 126 0 + Store 127 128 + 129: 105(ptr) AccessChain 27(data) 121 51 34 + 130: 6(int) CompositeExtract 126 1 + Store 129 130 + 131: 105(ptr) AccessChain 27(data) 121 51 61 + 132: 6(int) CompositeExtract 126 2 + Store 131 132 + 133: 6(int) Load 8(invocation) + 134: 112(ptr) AccessChain 27(data) 65 51 + 135: 21(ivec4) Load 134 + 136: 21(ivec4) GroupNonUniformQuadBroadcast 35 135 34 + 137: 112(ptr) AccessChain 27(data) 133 51 + Store 137 136 + 138: 6(int) Load 8(invocation) + 140: 139(ptr) AccessChain 27(data) 29 65 30 + 141:22(float64_t) Load 140 + 142:22(float64_t) GroupNonUniformQuadBroadcast 35 141 34 + 143: 139(ptr) AccessChain 27(data) 138 65 30 + Store 143 142 + 144: 6(int) Load 8(invocation) + 147: 146(ptr) AccessChain 27(data) 39 65 148: 23(f64vec4) Load 147 - 149: 23(f64vec4) VectorShuffle 148 146 4 5 6 3 - Store 147 149 - 150: 6(int) Load 8(invocation) - 151: 133(ptr) AccessChain 27(data) 60 60 - 152: 23(f64vec4) Load 151 - 153: 23(f64vec4) GroupNonUniformQuadBroadcast 35 152 34 - 154: 133(ptr) AccessChain 27(data) 150 60 - Store 154 153 + 149:145(f64vec2) VectorShuffle 148 148 0 1 + 150:145(f64vec2) GroupNonUniformQuadBroadcast 35 149 34 + 151: 139(ptr) AccessChain 27(data) 144 65 30 + 152:22(float64_t) CompositeExtract 150 0 + Store 151 152 + 153: 139(ptr) AccessChain 27(data) 144 65 34 + 154:22(float64_t) CompositeExtract 150 1 + Store 153 154 155: 6(int) Load 8(invocation) - 156: 66(ptr) AccessChain 27(data) 29 39 30 - 157: 19(int) Load 156 - 159: 158(bool) SLessThan 157 29 - 160: 158(bool) GroupNonUniformQuadBroadcast 35 159 34 - 161: 19(int) Select 160 39 29 - 162: 66(ptr) AccessChain 27(data) 155 39 30 - Store 162 161 - 163: 6(int) Load 8(invocation) - 164: 73(ptr) AccessChain 27(data) 39 39 - 165: 20(ivec4) Load 164 - 166: 72(ivec2) VectorShuffle 165 165 0 1 - 169: 168(bvec2) SLessThan 166 167 - 170: 168(bvec2) GroupNonUniformQuadBroadcast 35 169 34 - 172: 72(ivec2) Select 170 171 167 - 173: 73(ptr) AccessChain 27(data) 163 39 - 174: 20(ivec4) Load 173 - 175: 20(ivec4) VectorShuffle 174 172 4 5 2 3 - Store 173 175 - 176: 6(int) Load 8(invocation) - 177: 73(ptr) AccessChain 27(data) 39 39 - 178: 20(ivec4) Load 177 - 179: 82(ivec3) VectorShuffle 178 178 0 1 2 - 182: 181(bvec3) SLessThan 179 180 - 183: 181(bvec3) GroupNonUniformQuadBroadcast 35 182 34 - 185: 82(ivec3) Select 183 184 180 - 186: 73(ptr) AccessChain 27(data) 176 39 - 187: 20(ivec4) Load 186 - 188: 20(ivec4) VectorShuffle 187 185 4 5 6 3 - Store 186 188 - 189: 6(int) Load 8(invocation) - 190: 73(ptr) AccessChain 27(data) 39 39 - 191: 20(ivec4) Load 190 - 194: 193(bvec4) SLessThan 191 192 - 195: 193(bvec4) GroupNonUniformQuadBroadcast 35 194 34 - 197: 20(ivec4) Select 195 196 192 - 198: 73(ptr) AccessChain 27(data) 189 39 - Store 198 197 - 199: 6(int) Load 8(invocation) - 200: 31(ptr) AccessChain 27(data) 29 29 30 - 201: 17(float) Load 200 - 202: 17(float) GroupNonUniformQuadSwap 35 201 30 - 203: 31(ptr) AccessChain 27(data) 199 29 30 - Store 203 202 - 204: 6(int) Load 8(invocation) - 205: 41(ptr) AccessChain 27(data) 39 29 - 206: 18(fvec4) Load 205 - 207: 40(fvec2) VectorShuffle 206 206 0 1 - 208: 40(fvec2) GroupNonUniformQuadSwap 35 207 30 - 209: 41(ptr) AccessChain 27(data) 204 29 - 210: 18(fvec4) Load 209 - 211: 18(fvec4) VectorShuffle 210 208 4 5 2 3 - Store 209 211 - 212: 6(int) Load 8(invocation) - 213: 41(ptr) AccessChain 27(data) 50 29 - 214: 18(fvec4) Load 213 - 215: 51(fvec3) VectorShuffle 214 214 0 1 2 - 216: 51(fvec3) GroupNonUniformQuadSwap 35 215 30 - 217: 41(ptr) AccessChain 27(data) 212 29 - 218: 18(fvec4) Load 217 - 219: 18(fvec4) VectorShuffle 218 216 4 5 6 3 - Store 217 219 + 157: 146(ptr) AccessChain 27(data) 51 65 + 158: 23(f64vec4) Load 157 + 159:156(f64vec3) VectorShuffle 158 158 0 1 2 + 160:156(f64vec3) GroupNonUniformQuadBroadcast 35 159 34 + 161: 139(ptr) AccessChain 27(data) 155 65 30 + 162:22(float64_t) CompositeExtract 160 0 + Store 161 162 + 163: 139(ptr) AccessChain 27(data) 155 65 34 + 164:22(float64_t) CompositeExtract 160 1 + Store 163 164 + 165: 139(ptr) AccessChain 27(data) 155 65 61 + 166:22(float64_t) CompositeExtract 160 2 + Store 165 166 + 167: 6(int) Load 8(invocation) + 168: 146(ptr) AccessChain 27(data) 65 65 + 169: 23(f64vec4) Load 168 + 170: 23(f64vec4) GroupNonUniformQuadBroadcast 35 169 34 + 171: 146(ptr) AccessChain 27(data) 167 65 + Store 171 170 + 172: 6(int) Load 8(invocation) + 173: 71(ptr) AccessChain 27(data) 29 39 30 + 174: 19(int) Load 173 + 176: 175(bool) SLessThan 174 29 + 177: 175(bool) GroupNonUniformQuadBroadcast 35 176 34 + 178: 19(int) Select 177 39 29 + 179: 71(ptr) AccessChain 27(data) 172 39 30 + Store 179 178 + 180: 6(int) Load 8(invocation) + 181: 78(ptr) AccessChain 27(data) 39 39 + 182: 20(ivec4) Load 181 + 183: 77(ivec2) VectorShuffle 182 182 0 1 + 186: 185(bvec2) SLessThan 183 184 + 187: 185(bvec2) GroupNonUniformQuadBroadcast 35 186 34 + 189: 77(ivec2) Select 187 188 184 + 190: 71(ptr) AccessChain 27(data) 180 39 30 + 191: 19(int) CompositeExtract 189 0 + Store 190 191 + 192: 71(ptr) AccessChain 27(data) 180 39 34 + 193: 19(int) CompositeExtract 189 1 + Store 192 193 + 194: 6(int) Load 8(invocation) + 195: 78(ptr) AccessChain 27(data) 39 39 + 196: 20(ivec4) Load 195 + 197: 88(ivec3) VectorShuffle 196 196 0 1 2 + 200: 199(bvec3) SLessThan 197 198 + 201: 199(bvec3) GroupNonUniformQuadBroadcast 35 200 34 + 203: 88(ivec3) Select 201 202 198 + 204: 71(ptr) AccessChain 27(data) 194 39 30 + 205: 19(int) CompositeExtract 203 0 + Store 204 205 + 206: 71(ptr) AccessChain 27(data) 194 39 34 + 207: 19(int) CompositeExtract 203 1 + Store 206 207 + 208: 71(ptr) AccessChain 27(data) 194 39 61 + 209: 19(int) CompositeExtract 203 2 + Store 208 209 + 210: 6(int) Load 8(invocation) + 211: 78(ptr) AccessChain 27(data) 39 39 + 212: 20(ivec4) Load 211 + 215: 214(bvec4) SLessThan 212 213 + 216: 214(bvec4) GroupNonUniformQuadBroadcast 35 215 34 + 218: 20(ivec4) Select 216 217 213 + 219: 78(ptr) AccessChain 27(data) 210 39 + Store 219 218 220: 6(int) Load 8(invocation) - 221: 41(ptr) AccessChain 27(data) 60 29 - 222: 18(fvec4) Load 221 - 223: 18(fvec4) GroupNonUniformQuadSwap 35 222 30 - 224: 41(ptr) AccessChain 27(data) 220 29 + 221: 31(ptr) AccessChain 27(data) 29 29 30 + 222: 17(float) Load 221 + 223: 17(float) GroupNonUniformQuadSwap 35 222 30 + 224: 31(ptr) AccessChain 27(data) 220 29 30 Store 224 223 225: 6(int) Load 8(invocation) - 226: 66(ptr) AccessChain 27(data) 29 39 30 - 227: 19(int) Load 226 - 228: 19(int) GroupNonUniformQuadSwap 35 227 30 - 229: 66(ptr) AccessChain 27(data) 225 39 30 - Store 229 228 - 230: 6(int) Load 8(invocation) - 231: 73(ptr) AccessChain 27(data) 39 39 - 232: 20(ivec4) Load 231 - 233: 72(ivec2) VectorShuffle 232 232 0 1 - 234: 72(ivec2) GroupNonUniformQuadSwap 35 233 30 - 235: 73(ptr) AccessChain 27(data) 230 39 - 236: 20(ivec4) Load 235 - 237: 20(ivec4) VectorShuffle 236 234 4 5 2 3 - Store 235 237 - 238: 6(int) Load 8(invocation) - 239: 73(ptr) AccessChain 27(data) 50 39 - 240: 20(ivec4) Load 239 - 241: 82(ivec3) VectorShuffle 240 240 0 1 2 - 242: 82(ivec3) GroupNonUniformQuadSwap 35 241 30 - 243: 73(ptr) AccessChain 27(data) 238 39 - 244: 20(ivec4) Load 243 - 245: 20(ivec4) VectorShuffle 244 242 4 5 6 3 - Store 243 245 - 246: 6(int) Load 8(invocation) - 247: 73(ptr) AccessChain 27(data) 60 39 - 248: 20(ivec4) Load 247 - 249: 20(ivec4) GroupNonUniformQuadSwap 35 248 30 - 250: 73(ptr) AccessChain 27(data) 246 39 - Store 250 249 - 251: 6(int) Load 8(invocation) - 252: 96(ptr) AccessChain 27(data) 29 50 30 - 253: 6(int) Load 252 - 254: 6(int) GroupNonUniformQuadSwap 35 253 30 - 255: 96(ptr) AccessChain 27(data) 251 50 30 - Store 255 254 - 256: 6(int) Load 8(invocation) - 257: 103(ptr) AccessChain 27(data) 39 50 - 258: 21(ivec4) Load 257 - 259: 102(ivec2) VectorShuffle 258 258 0 1 - 260: 102(ivec2) GroupNonUniformQuadSwap 35 259 30 - 261: 103(ptr) AccessChain 27(data) 256 50 - 262: 21(ivec4) Load 261 - 263: 21(ivec4) VectorShuffle 262 260 4 5 2 3 - Store 261 263 + 226: 41(ptr) AccessChain 27(data) 39 29 + 227: 18(fvec4) Load 226 + 228: 40(fvec2) VectorShuffle 227 227 0 1 + 229: 40(fvec2) GroupNonUniformQuadSwap 35 228 30 + 230: 31(ptr) AccessChain 27(data) 225 29 30 + 231: 17(float) CompositeExtract 229 0 + Store 230 231 + 232: 31(ptr) AccessChain 27(data) 225 29 34 + 233: 17(float) CompositeExtract 229 1 + Store 232 233 + 234: 6(int) Load 8(invocation) + 235: 41(ptr) AccessChain 27(data) 51 29 + 236: 18(fvec4) Load 235 + 237: 52(fvec3) VectorShuffle 236 236 0 1 2 + 238: 52(fvec3) GroupNonUniformQuadSwap 35 237 30 + 239: 31(ptr) AccessChain 27(data) 234 29 30 + 240: 17(float) CompositeExtract 238 0 + Store 239 240 + 241: 31(ptr) AccessChain 27(data) 234 29 34 + 242: 17(float) CompositeExtract 238 1 + Store 241 242 + 243: 31(ptr) AccessChain 27(data) 234 29 61 + 244: 17(float) CompositeExtract 238 2 + Store 243 244 + 245: 6(int) Load 8(invocation) + 246: 41(ptr) AccessChain 27(data) 65 29 + 247: 18(fvec4) Load 246 + 248: 18(fvec4) GroupNonUniformQuadSwap 35 247 30 + 249: 41(ptr) AccessChain 27(data) 245 29 + Store 249 248 + 250: 6(int) Load 8(invocation) + 251: 71(ptr) AccessChain 27(data) 29 39 30 + 252: 19(int) Load 251 + 253: 19(int) GroupNonUniformQuadSwap 35 252 30 + 254: 71(ptr) AccessChain 27(data) 250 39 30 + Store 254 253 + 255: 6(int) Load 8(invocation) + 256: 78(ptr) AccessChain 27(data) 39 39 + 257: 20(ivec4) Load 256 + 258: 77(ivec2) VectorShuffle 257 257 0 1 + 259: 77(ivec2) GroupNonUniformQuadSwap 35 258 30 + 260: 71(ptr) AccessChain 27(data) 255 39 30 + 261: 19(int) CompositeExtract 259 0 + Store 260 261 + 262: 71(ptr) AccessChain 27(data) 255 39 34 + 263: 19(int) CompositeExtract 259 1 + Store 262 263 264: 6(int) Load 8(invocation) - 265: 103(ptr) AccessChain 27(data) 50 50 - 266: 21(ivec4) Load 265 - 267: 112(ivec3) VectorShuffle 266 266 0 1 2 - 268: 112(ivec3) GroupNonUniformQuadSwap 35 267 30 - 269: 103(ptr) AccessChain 27(data) 264 50 - 270: 21(ivec4) Load 269 - 271: 21(ivec4) VectorShuffle 270 268 4 5 6 3 - Store 269 271 - 272: 6(int) Load 8(invocation) - 273: 103(ptr) AccessChain 27(data) 60 50 - 274: 21(ivec4) Load 273 - 275: 21(ivec4) GroupNonUniformQuadSwap 35 274 30 - 276: 103(ptr) AccessChain 27(data) 272 50 - Store 276 275 - 277: 6(int) Load 8(invocation) - 278: 126(ptr) AccessChain 27(data) 29 60 30 - 279:22(float64_t) Load 278 - 280:22(float64_t) GroupNonUniformQuadSwap 35 279 30 - 281: 126(ptr) AccessChain 27(data) 277 60 30 - Store 281 280 - 282: 6(int) Load 8(invocation) - 283: 133(ptr) AccessChain 27(data) 39 60 - 284: 23(f64vec4) Load 283 - 285:132(f64vec2) VectorShuffle 284 284 0 1 - 286:132(f64vec2) GroupNonUniformQuadSwap 35 285 30 - 287: 133(ptr) AccessChain 27(data) 282 60 - 288: 23(f64vec4) Load 287 - 289: 23(f64vec4) VectorShuffle 288 286 4 5 2 3 - Store 287 289 - 290: 6(int) Load 8(invocation) - 291: 133(ptr) AccessChain 27(data) 50 60 - 292: 23(f64vec4) Load 291 - 293:142(f64vec3) VectorShuffle 292 292 0 1 2 - 294:142(f64vec3) GroupNonUniformQuadSwap 35 293 30 - 295: 133(ptr) AccessChain 27(data) 290 60 - 296: 23(f64vec4) Load 295 - 297: 23(f64vec4) VectorShuffle 296 294 4 5 6 3 - Store 295 297 - 298: 6(int) Load 8(invocation) - 299: 133(ptr) AccessChain 27(data) 60 60 - 300: 23(f64vec4) Load 299 - 301: 23(f64vec4) GroupNonUniformQuadSwap 35 300 30 - 302: 133(ptr) AccessChain 27(data) 298 60 - Store 302 301 - 303: 6(int) Load 8(invocation) - 304: 66(ptr) AccessChain 27(data) 29 39 30 - 305: 19(int) Load 304 - 306: 158(bool) SLessThan 305 29 - 307: 158(bool) GroupNonUniformQuadSwap 35 306 30 - 308: 19(int) Select 307 39 29 - 309: 66(ptr) AccessChain 27(data) 303 39 30 + 265: 78(ptr) AccessChain 27(data) 51 39 + 266: 20(ivec4) Load 265 + 267: 88(ivec3) VectorShuffle 266 266 0 1 2 + 268: 88(ivec3) GroupNonUniformQuadSwap 35 267 30 + 269: 71(ptr) AccessChain 27(data) 264 39 30 + 270: 19(int) CompositeExtract 268 0 + Store 269 270 + 271: 71(ptr) AccessChain 27(data) 264 39 34 + 272: 19(int) CompositeExtract 268 1 + Store 271 272 + 273: 71(ptr) AccessChain 27(data) 264 39 61 + 274: 19(int) CompositeExtract 268 2 + Store 273 274 + 275: 6(int) Load 8(invocation) + 276: 78(ptr) AccessChain 27(data) 65 39 + 277: 20(ivec4) Load 276 + 278: 20(ivec4) GroupNonUniformQuadSwap 35 277 30 + 279: 78(ptr) AccessChain 27(data) 275 39 + Store 279 278 + 280: 6(int) Load 8(invocation) + 281: 105(ptr) AccessChain 27(data) 29 51 30 + 282: 6(int) Load 281 + 283: 6(int) GroupNonUniformQuadSwap 35 282 30 + 284: 105(ptr) AccessChain 27(data) 280 51 30 + Store 284 283 + 285: 6(int) Load 8(invocation) + 286: 112(ptr) AccessChain 27(data) 39 51 + 287: 21(ivec4) Load 286 + 288: 111(ivec2) VectorShuffle 287 287 0 1 + 289: 111(ivec2) GroupNonUniformQuadSwap 35 288 30 + 290: 105(ptr) AccessChain 27(data) 285 51 30 + 291: 6(int) CompositeExtract 289 0 + Store 290 291 + 292: 105(ptr) AccessChain 27(data) 285 51 34 + 293: 6(int) CompositeExtract 289 1 + Store 292 293 + 294: 6(int) Load 8(invocation) + 295: 112(ptr) AccessChain 27(data) 51 51 + 296: 21(ivec4) Load 295 + 297: 122(ivec3) VectorShuffle 296 296 0 1 2 + 298: 122(ivec3) GroupNonUniformQuadSwap 35 297 30 + 299: 105(ptr) AccessChain 27(data) 294 51 30 + 300: 6(int) CompositeExtract 298 0 + Store 299 300 + 301: 105(ptr) AccessChain 27(data) 294 51 34 + 302: 6(int) CompositeExtract 298 1 + Store 301 302 + 303: 105(ptr) AccessChain 27(data) 294 51 61 + 304: 6(int) CompositeExtract 298 2 + Store 303 304 + 305: 6(int) Load 8(invocation) + 306: 112(ptr) AccessChain 27(data) 65 51 + 307: 21(ivec4) Load 306 + 308: 21(ivec4) GroupNonUniformQuadSwap 35 307 30 + 309: 112(ptr) AccessChain 27(data) 305 51 Store 309 308 310: 6(int) Load 8(invocation) - 311: 73(ptr) AccessChain 27(data) 39 39 - 312: 20(ivec4) Load 311 - 313: 72(ivec2) VectorShuffle 312 312 0 1 - 314: 168(bvec2) SLessThan 313 167 - 315: 168(bvec2) GroupNonUniformQuadSwap 35 314 30 - 316: 72(ivec2) Select 315 171 167 - 317: 73(ptr) AccessChain 27(data) 310 39 - 318: 20(ivec4) Load 317 - 319: 20(ivec4) VectorShuffle 318 316 4 5 2 3 - Store 317 319 - 320: 6(int) Load 8(invocation) - 321: 73(ptr) AccessChain 27(data) 39 39 - 322: 20(ivec4) Load 321 - 323: 82(ivec3) VectorShuffle 322 322 0 1 2 - 324: 181(bvec3) SLessThan 323 180 - 325: 181(bvec3) GroupNonUniformQuadSwap 35 324 30 - 326: 82(ivec3) Select 325 184 180 - 327: 73(ptr) AccessChain 27(data) 320 39 - 328: 20(ivec4) Load 327 - 329: 20(ivec4) VectorShuffle 328 326 4 5 6 3 - Store 327 329 - 330: 6(int) Load 8(invocation) - 331: 73(ptr) AccessChain 27(data) 39 39 - 332: 20(ivec4) Load 331 - 333: 193(bvec4) SLessThan 332 192 - 334: 193(bvec4) GroupNonUniformQuadSwap 35 333 30 - 335: 20(ivec4) Select 334 196 192 - 336: 73(ptr) AccessChain 27(data) 330 39 - Store 336 335 - 337: 6(int) Load 8(invocation) - 338: 31(ptr) AccessChain 27(data) 29 29 30 - 339: 17(float) Load 338 - 340: 17(float) GroupNonUniformQuadSwap 35 339 34 - 341: 31(ptr) AccessChain 27(data) 337 29 30 - Store 341 340 - 342: 6(int) Load 8(invocation) - 343: 41(ptr) AccessChain 27(data) 39 29 - 344: 18(fvec4) Load 343 - 345: 40(fvec2) VectorShuffle 344 344 0 1 - 346: 40(fvec2) GroupNonUniformQuadSwap 35 345 34 - 347: 41(ptr) AccessChain 27(data) 342 29 - 348: 18(fvec4) Load 347 - 349: 18(fvec4) VectorShuffle 348 346 4 5 2 3 - Store 347 349 - 350: 6(int) Load 8(invocation) - 351: 41(ptr) AccessChain 27(data) 50 29 - 352: 18(fvec4) Load 351 - 353: 51(fvec3) VectorShuffle 352 352 0 1 2 - 354: 51(fvec3) GroupNonUniformQuadSwap 35 353 34 - 355: 41(ptr) AccessChain 27(data) 350 29 - 356: 18(fvec4) Load 355 - 357: 18(fvec4) VectorShuffle 356 354 4 5 6 3 - Store 355 357 + 311: 139(ptr) AccessChain 27(data) 29 65 30 + 312:22(float64_t) Load 311 + 313:22(float64_t) GroupNonUniformQuadSwap 35 312 30 + 314: 139(ptr) AccessChain 27(data) 310 65 30 + Store 314 313 + 315: 6(int) Load 8(invocation) + 316: 146(ptr) AccessChain 27(data) 39 65 + 317: 23(f64vec4) Load 316 + 318:145(f64vec2) VectorShuffle 317 317 0 1 + 319:145(f64vec2) GroupNonUniformQuadSwap 35 318 30 + 320: 139(ptr) AccessChain 27(data) 315 65 30 + 321:22(float64_t) CompositeExtract 319 0 + Store 320 321 + 322: 139(ptr) AccessChain 27(data) 315 65 34 + 323:22(float64_t) CompositeExtract 319 1 + Store 322 323 + 324: 6(int) Load 8(invocation) + 325: 146(ptr) AccessChain 27(data) 51 65 + 326: 23(f64vec4) Load 325 + 327:156(f64vec3) VectorShuffle 326 326 0 1 2 + 328:156(f64vec3) GroupNonUniformQuadSwap 35 327 30 + 329: 139(ptr) AccessChain 27(data) 324 65 30 + 330:22(float64_t) CompositeExtract 328 0 + Store 329 330 + 331: 139(ptr) AccessChain 27(data) 324 65 34 + 332:22(float64_t) CompositeExtract 328 1 + Store 331 332 + 333: 139(ptr) AccessChain 27(data) 324 65 61 + 334:22(float64_t) CompositeExtract 328 2 + Store 333 334 + 335: 6(int) Load 8(invocation) + 336: 146(ptr) AccessChain 27(data) 65 65 + 337: 23(f64vec4) Load 336 + 338: 23(f64vec4) GroupNonUniformQuadSwap 35 337 30 + 339: 146(ptr) AccessChain 27(data) 335 65 + Store 339 338 + 340: 6(int) Load 8(invocation) + 341: 71(ptr) AccessChain 27(data) 29 39 30 + 342: 19(int) Load 341 + 343: 175(bool) SLessThan 342 29 + 344: 175(bool) GroupNonUniformQuadSwap 35 343 30 + 345: 19(int) Select 344 39 29 + 346: 71(ptr) AccessChain 27(data) 340 39 30 + Store 346 345 + 347: 6(int) Load 8(invocation) + 348: 78(ptr) AccessChain 27(data) 39 39 + 349: 20(ivec4) Load 348 + 350: 77(ivec2) VectorShuffle 349 349 0 1 + 351: 185(bvec2) SLessThan 350 184 + 352: 185(bvec2) GroupNonUniformQuadSwap 35 351 30 + 353: 77(ivec2) Select 352 188 184 + 354: 71(ptr) AccessChain 27(data) 347 39 30 + 355: 19(int) CompositeExtract 353 0 + Store 354 355 + 356: 71(ptr) AccessChain 27(data) 347 39 34 + 357: 19(int) CompositeExtract 353 1 + Store 356 357 358: 6(int) Load 8(invocation) - 359: 41(ptr) AccessChain 27(data) 60 29 - 360: 18(fvec4) Load 359 - 361: 18(fvec4) GroupNonUniformQuadSwap 35 360 34 - 362: 41(ptr) AccessChain 27(data) 358 29 - Store 362 361 - 363: 6(int) Load 8(invocation) - 364: 66(ptr) AccessChain 27(data) 29 39 30 - 365: 19(int) Load 364 - 366: 19(int) GroupNonUniformQuadSwap 35 365 34 - 367: 66(ptr) AccessChain 27(data) 363 39 30 - Store 367 366 - 368: 6(int) Load 8(invocation) - 369: 73(ptr) AccessChain 27(data) 39 39 - 370: 20(ivec4) Load 369 - 371: 72(ivec2) VectorShuffle 370 370 0 1 - 372: 72(ivec2) GroupNonUniformQuadSwap 35 371 34 - 373: 73(ptr) AccessChain 27(data) 368 39 - 374: 20(ivec4) Load 373 - 375: 20(ivec4) VectorShuffle 374 372 4 5 2 3 - Store 373 375 - 376: 6(int) Load 8(invocation) - 377: 73(ptr) AccessChain 27(data) 50 39 - 378: 20(ivec4) Load 377 - 379: 82(ivec3) VectorShuffle 378 378 0 1 2 - 380: 82(ivec3) GroupNonUniformQuadSwap 35 379 34 - 381: 73(ptr) AccessChain 27(data) 376 39 - 382: 20(ivec4) Load 381 - 383: 20(ivec4) VectorShuffle 382 380 4 5 6 3 - Store 381 383 - 384: 6(int) Load 8(invocation) - 385: 73(ptr) AccessChain 27(data) 60 39 - 386: 20(ivec4) Load 385 - 387: 20(ivec4) GroupNonUniformQuadSwap 35 386 34 - 388: 73(ptr) AccessChain 27(data) 384 39 - Store 388 387 - 389: 6(int) Load 8(invocation) - 390: 96(ptr) AccessChain 27(data) 29 50 30 - 391: 6(int) Load 390 - 392: 6(int) GroupNonUniformQuadSwap 35 391 34 - 393: 96(ptr) AccessChain 27(data) 389 50 30 - Store 393 392 - 394: 6(int) Load 8(invocation) - 395: 103(ptr) AccessChain 27(data) 39 50 - 396: 21(ivec4) Load 395 - 397: 102(ivec2) VectorShuffle 396 396 0 1 - 398: 102(ivec2) GroupNonUniformQuadSwap 35 397 34 - 399: 103(ptr) AccessChain 27(data) 394 50 - 400: 21(ivec4) Load 399 - 401: 21(ivec4) VectorShuffle 400 398 4 5 2 3 - Store 399 401 - 402: 6(int) Load 8(invocation) - 403: 103(ptr) AccessChain 27(data) 50 50 - 404: 21(ivec4) Load 403 - 405: 112(ivec3) VectorShuffle 404 404 0 1 2 - 406: 112(ivec3) GroupNonUniformQuadSwap 35 405 34 - 407: 103(ptr) AccessChain 27(data) 402 50 - 408: 21(ivec4) Load 407 - 409: 21(ivec4) VectorShuffle 408 406 4 5 6 3 - Store 407 409 - 410: 6(int) Load 8(invocation) - 411: 103(ptr) AccessChain 27(data) 60 50 - 412: 21(ivec4) Load 411 - 413: 21(ivec4) GroupNonUniformQuadSwap 35 412 34 - 414: 103(ptr) AccessChain 27(data) 410 50 - Store 414 413 - 415: 6(int) Load 8(invocation) - 416: 126(ptr) AccessChain 27(data) 29 60 30 - 417:22(float64_t) Load 416 - 418:22(float64_t) GroupNonUniformQuadSwap 35 417 34 - 419: 126(ptr) AccessChain 27(data) 415 60 30 - Store 419 418 - 420: 6(int) Load 8(invocation) - 421: 133(ptr) AccessChain 27(data) 39 60 - 422: 23(f64vec4) Load 421 - 423:132(f64vec2) VectorShuffle 422 422 0 1 - 424:132(f64vec2) GroupNonUniformQuadSwap 35 423 34 - 425: 133(ptr) AccessChain 27(data) 420 60 - 426: 23(f64vec4) Load 425 - 427: 23(f64vec4) VectorShuffle 426 424 4 5 2 3 - Store 425 427 - 428: 6(int) Load 8(invocation) - 429: 133(ptr) AccessChain 27(data) 50 60 - 430: 23(f64vec4) Load 429 - 431:142(f64vec3) VectorShuffle 430 430 0 1 2 - 432:142(f64vec3) GroupNonUniformQuadSwap 35 431 34 - 433: 133(ptr) AccessChain 27(data) 428 60 - 434: 23(f64vec4) Load 433 - 435: 23(f64vec4) VectorShuffle 434 432 4 5 6 3 - Store 433 435 - 436: 6(int) Load 8(invocation) - 437: 133(ptr) AccessChain 27(data) 60 60 - 438: 23(f64vec4) Load 437 - 439: 23(f64vec4) GroupNonUniformQuadSwap 35 438 34 - 440: 133(ptr) AccessChain 27(data) 436 60 - Store 440 439 - 441: 6(int) Load 8(invocation) - 442: 66(ptr) AccessChain 27(data) 29 39 30 - 443: 19(int) Load 442 - 444: 158(bool) SLessThan 443 29 - 445: 158(bool) GroupNonUniformQuadSwap 35 444 34 - 446: 19(int) Select 445 39 29 - 447: 66(ptr) AccessChain 27(data) 441 39 30 - Store 447 446 - 448: 6(int) Load 8(invocation) - 449: 73(ptr) AccessChain 27(data) 39 39 - 450: 20(ivec4) Load 449 - 451: 72(ivec2) VectorShuffle 450 450 0 1 - 452: 168(bvec2) SLessThan 451 167 - 453: 168(bvec2) GroupNonUniformQuadSwap 35 452 34 - 454: 72(ivec2) Select 453 171 167 - 455: 73(ptr) AccessChain 27(data) 448 39 - 456: 20(ivec4) Load 455 - 457: 20(ivec4) VectorShuffle 456 454 4 5 2 3 - Store 455 457 - 458: 6(int) Load 8(invocation) - 459: 73(ptr) AccessChain 27(data) 39 39 - 460: 20(ivec4) Load 459 - 461: 82(ivec3) VectorShuffle 460 460 0 1 2 - 462: 181(bvec3) SLessThan 461 180 - 463: 181(bvec3) GroupNonUniformQuadSwap 35 462 34 - 464: 82(ivec3) Select 463 184 180 - 465: 73(ptr) AccessChain 27(data) 458 39 - 466: 20(ivec4) Load 465 - 467: 20(ivec4) VectorShuffle 466 464 4 5 6 3 - Store 465 467 + 359: 78(ptr) AccessChain 27(data) 39 39 + 360: 20(ivec4) Load 359 + 361: 88(ivec3) VectorShuffle 360 360 0 1 2 + 362: 199(bvec3) SLessThan 361 198 + 363: 199(bvec3) GroupNonUniformQuadSwap 35 362 30 + 364: 88(ivec3) Select 363 202 198 + 365: 71(ptr) AccessChain 27(data) 358 39 30 + 366: 19(int) CompositeExtract 364 0 + Store 365 366 + 367: 71(ptr) AccessChain 27(data) 358 39 34 + 368: 19(int) CompositeExtract 364 1 + Store 367 368 + 369: 71(ptr) AccessChain 27(data) 358 39 61 + 370: 19(int) CompositeExtract 364 2 + Store 369 370 + 371: 6(int) Load 8(invocation) + 372: 78(ptr) AccessChain 27(data) 39 39 + 373: 20(ivec4) Load 372 + 374: 214(bvec4) SLessThan 373 213 + 375: 214(bvec4) GroupNonUniformQuadSwap 35 374 30 + 376: 20(ivec4) Select 375 217 213 + 377: 78(ptr) AccessChain 27(data) 371 39 + Store 377 376 + 378: 6(int) Load 8(invocation) + 379: 31(ptr) AccessChain 27(data) 29 29 30 + 380: 17(float) Load 379 + 381: 17(float) GroupNonUniformQuadSwap 35 380 34 + 382: 31(ptr) AccessChain 27(data) 378 29 30 + Store 382 381 + 383: 6(int) Load 8(invocation) + 384: 41(ptr) AccessChain 27(data) 39 29 + 385: 18(fvec4) Load 384 + 386: 40(fvec2) VectorShuffle 385 385 0 1 + 387: 40(fvec2) GroupNonUniformQuadSwap 35 386 34 + 388: 31(ptr) AccessChain 27(data) 383 29 30 + 389: 17(float) CompositeExtract 387 0 + Store 388 389 + 390: 31(ptr) AccessChain 27(data) 383 29 34 + 391: 17(float) CompositeExtract 387 1 + Store 390 391 + 392: 6(int) Load 8(invocation) + 393: 41(ptr) AccessChain 27(data) 51 29 + 394: 18(fvec4) Load 393 + 395: 52(fvec3) VectorShuffle 394 394 0 1 2 + 396: 52(fvec3) GroupNonUniformQuadSwap 35 395 34 + 397: 31(ptr) AccessChain 27(data) 392 29 30 + 398: 17(float) CompositeExtract 396 0 + Store 397 398 + 399: 31(ptr) AccessChain 27(data) 392 29 34 + 400: 17(float) CompositeExtract 396 1 + Store 399 400 + 401: 31(ptr) AccessChain 27(data) 392 29 61 + 402: 17(float) CompositeExtract 396 2 + Store 401 402 + 403: 6(int) Load 8(invocation) + 404: 41(ptr) AccessChain 27(data) 65 29 + 405: 18(fvec4) Load 404 + 406: 18(fvec4) GroupNonUniformQuadSwap 35 405 34 + 407: 41(ptr) AccessChain 27(data) 403 29 + Store 407 406 + 408: 6(int) Load 8(invocation) + 409: 71(ptr) AccessChain 27(data) 29 39 30 + 410: 19(int) Load 409 + 411: 19(int) GroupNonUniformQuadSwap 35 410 34 + 412: 71(ptr) AccessChain 27(data) 408 39 30 + Store 412 411 + 413: 6(int) Load 8(invocation) + 414: 78(ptr) AccessChain 27(data) 39 39 + 415: 20(ivec4) Load 414 + 416: 77(ivec2) VectorShuffle 415 415 0 1 + 417: 77(ivec2) GroupNonUniformQuadSwap 35 416 34 + 418: 71(ptr) AccessChain 27(data) 413 39 30 + 419: 19(int) CompositeExtract 417 0 + Store 418 419 + 420: 71(ptr) AccessChain 27(data) 413 39 34 + 421: 19(int) CompositeExtract 417 1 + Store 420 421 + 422: 6(int) Load 8(invocation) + 423: 78(ptr) AccessChain 27(data) 51 39 + 424: 20(ivec4) Load 423 + 425: 88(ivec3) VectorShuffle 424 424 0 1 2 + 426: 88(ivec3) GroupNonUniformQuadSwap 35 425 34 + 427: 71(ptr) AccessChain 27(data) 422 39 30 + 428: 19(int) CompositeExtract 426 0 + Store 427 428 + 429: 71(ptr) AccessChain 27(data) 422 39 34 + 430: 19(int) CompositeExtract 426 1 + Store 429 430 + 431: 71(ptr) AccessChain 27(data) 422 39 61 + 432: 19(int) CompositeExtract 426 2 + Store 431 432 + 433: 6(int) Load 8(invocation) + 434: 78(ptr) AccessChain 27(data) 65 39 + 435: 20(ivec4) Load 434 + 436: 20(ivec4) GroupNonUniformQuadSwap 35 435 34 + 437: 78(ptr) AccessChain 27(data) 433 39 + Store 437 436 + 438: 6(int) Load 8(invocation) + 439: 105(ptr) AccessChain 27(data) 29 51 30 + 440: 6(int) Load 439 + 441: 6(int) GroupNonUniformQuadSwap 35 440 34 + 442: 105(ptr) AccessChain 27(data) 438 51 30 + Store 442 441 + 443: 6(int) Load 8(invocation) + 444: 112(ptr) AccessChain 27(data) 39 51 + 445: 21(ivec4) Load 444 + 446: 111(ivec2) VectorShuffle 445 445 0 1 + 447: 111(ivec2) GroupNonUniformQuadSwap 35 446 34 + 448: 105(ptr) AccessChain 27(data) 443 51 30 + 449: 6(int) CompositeExtract 447 0 + Store 448 449 + 450: 105(ptr) AccessChain 27(data) 443 51 34 + 451: 6(int) CompositeExtract 447 1 + Store 450 451 + 452: 6(int) Load 8(invocation) + 453: 112(ptr) AccessChain 27(data) 51 51 + 454: 21(ivec4) Load 453 + 455: 122(ivec3) VectorShuffle 454 454 0 1 2 + 456: 122(ivec3) GroupNonUniformQuadSwap 35 455 34 + 457: 105(ptr) AccessChain 27(data) 452 51 30 + 458: 6(int) CompositeExtract 456 0 + Store 457 458 + 459: 105(ptr) AccessChain 27(data) 452 51 34 + 460: 6(int) CompositeExtract 456 1 + Store 459 460 + 461: 105(ptr) AccessChain 27(data) 452 51 61 + 462: 6(int) CompositeExtract 456 2 + Store 461 462 + 463: 6(int) Load 8(invocation) + 464: 112(ptr) AccessChain 27(data) 65 51 + 465: 21(ivec4) Load 464 + 466: 21(ivec4) GroupNonUniformQuadSwap 35 465 34 + 467: 112(ptr) AccessChain 27(data) 463 51 + Store 467 466 468: 6(int) Load 8(invocation) - 469: 73(ptr) AccessChain 27(data) 39 39 - 470: 20(ivec4) Load 469 - 471: 193(bvec4) SLessThan 470 192 - 472: 193(bvec4) GroupNonUniformQuadSwap 35 471 34 - 473: 20(ivec4) Select 472 196 192 - 474: 73(ptr) AccessChain 27(data) 468 39 - Store 474 473 - 475: 6(int) Load 8(invocation) - 476: 31(ptr) AccessChain 27(data) 29 29 30 - 477: 17(float) Load 476 - 479: 17(float) GroupNonUniformQuadSwap 35 477 478 - 480: 31(ptr) AccessChain 27(data) 475 29 30 - Store 480 479 - 481: 6(int) Load 8(invocation) - 482: 41(ptr) AccessChain 27(data) 39 29 - 483: 18(fvec4) Load 482 - 484: 40(fvec2) VectorShuffle 483 483 0 1 - 485: 40(fvec2) GroupNonUniformQuadSwap 35 484 478 - 486: 41(ptr) AccessChain 27(data) 481 29 - 487: 18(fvec4) Load 486 - 488: 18(fvec4) VectorShuffle 487 485 4 5 2 3 - Store 486 488 - 489: 6(int) Load 8(invocation) - 490: 41(ptr) AccessChain 27(data) 50 29 - 491: 18(fvec4) Load 490 - 492: 51(fvec3) VectorShuffle 491 491 0 1 2 - 493: 51(fvec3) GroupNonUniformQuadSwap 35 492 478 - 494: 41(ptr) AccessChain 27(data) 489 29 - 495: 18(fvec4) Load 494 - 496: 18(fvec4) VectorShuffle 495 493 4 5 6 3 - Store 494 496 - 497: 6(int) Load 8(invocation) - 498: 41(ptr) AccessChain 27(data) 60 29 - 499: 18(fvec4) Load 498 - 500: 18(fvec4) GroupNonUniformQuadSwap 35 499 478 - 501: 41(ptr) AccessChain 27(data) 497 29 - Store 501 500 - 502: 6(int) Load 8(invocation) - 503: 66(ptr) AccessChain 27(data) 29 39 30 - 504: 19(int) Load 503 - 505: 19(int) GroupNonUniformQuadSwap 35 504 478 - 506: 66(ptr) AccessChain 27(data) 502 39 30 - Store 506 505 - 507: 6(int) Load 8(invocation) - 508: 73(ptr) AccessChain 27(data) 39 39 - 509: 20(ivec4) Load 508 - 510: 72(ivec2) VectorShuffle 509 509 0 1 - 511: 72(ivec2) GroupNonUniformQuadSwap 35 510 478 - 512: 73(ptr) AccessChain 27(data) 507 39 - 513: 20(ivec4) Load 512 - 514: 20(ivec4) VectorShuffle 513 511 4 5 2 3 - Store 512 514 - 515: 6(int) Load 8(invocation) - 516: 73(ptr) AccessChain 27(data) 50 39 - 517: 20(ivec4) Load 516 - 518: 82(ivec3) VectorShuffle 517 517 0 1 2 - 519: 82(ivec3) GroupNonUniformQuadSwap 35 518 478 - 520: 73(ptr) AccessChain 27(data) 515 39 - 521: 20(ivec4) Load 520 - 522: 20(ivec4) VectorShuffle 521 519 4 5 6 3 - Store 520 522 - 523: 6(int) Load 8(invocation) - 524: 73(ptr) AccessChain 27(data) 60 39 - 525: 20(ivec4) Load 524 - 526: 20(ivec4) GroupNonUniformQuadSwap 35 525 478 - 527: 73(ptr) AccessChain 27(data) 523 39 - Store 527 526 - 528: 6(int) Load 8(invocation) - 529: 96(ptr) AccessChain 27(data) 29 50 30 - 530: 6(int) Load 529 - 531: 6(int) GroupNonUniformQuadSwap 35 530 478 - 532: 96(ptr) AccessChain 27(data) 528 50 30 - Store 532 531 - 533: 6(int) Load 8(invocation) - 534: 103(ptr) AccessChain 27(data) 39 50 - 535: 21(ivec4) Load 534 - 536: 102(ivec2) VectorShuffle 535 535 0 1 - 537: 102(ivec2) GroupNonUniformQuadSwap 35 536 478 - 538: 103(ptr) AccessChain 27(data) 533 50 - 539: 21(ivec4) Load 538 - 540: 21(ivec4) VectorShuffle 539 537 4 5 2 3 - Store 538 540 + 469: 139(ptr) AccessChain 27(data) 29 65 30 + 470:22(float64_t) Load 469 + 471:22(float64_t) GroupNonUniformQuadSwap 35 470 34 + 472: 139(ptr) AccessChain 27(data) 468 65 30 + Store 472 471 + 473: 6(int) Load 8(invocation) + 474: 146(ptr) AccessChain 27(data) 39 65 + 475: 23(f64vec4) Load 474 + 476:145(f64vec2) VectorShuffle 475 475 0 1 + 477:145(f64vec2) GroupNonUniformQuadSwap 35 476 34 + 478: 139(ptr) AccessChain 27(data) 473 65 30 + 479:22(float64_t) CompositeExtract 477 0 + Store 478 479 + 480: 139(ptr) AccessChain 27(data) 473 65 34 + 481:22(float64_t) CompositeExtract 477 1 + Store 480 481 + 482: 6(int) Load 8(invocation) + 483: 146(ptr) AccessChain 27(data) 51 65 + 484: 23(f64vec4) Load 483 + 485:156(f64vec3) VectorShuffle 484 484 0 1 2 + 486:156(f64vec3) GroupNonUniformQuadSwap 35 485 34 + 487: 139(ptr) AccessChain 27(data) 482 65 30 + 488:22(float64_t) CompositeExtract 486 0 + Store 487 488 + 489: 139(ptr) AccessChain 27(data) 482 65 34 + 490:22(float64_t) CompositeExtract 486 1 + Store 489 490 + 491: 139(ptr) AccessChain 27(data) 482 65 61 + 492:22(float64_t) CompositeExtract 486 2 + Store 491 492 + 493: 6(int) Load 8(invocation) + 494: 146(ptr) AccessChain 27(data) 65 65 + 495: 23(f64vec4) Load 494 + 496: 23(f64vec4) GroupNonUniformQuadSwap 35 495 34 + 497: 146(ptr) AccessChain 27(data) 493 65 + Store 497 496 + 498: 6(int) Load 8(invocation) + 499: 71(ptr) AccessChain 27(data) 29 39 30 + 500: 19(int) Load 499 + 501: 175(bool) SLessThan 500 29 + 502: 175(bool) GroupNonUniformQuadSwap 35 501 34 + 503: 19(int) Select 502 39 29 + 504: 71(ptr) AccessChain 27(data) 498 39 30 + Store 504 503 + 505: 6(int) Load 8(invocation) + 506: 78(ptr) AccessChain 27(data) 39 39 + 507: 20(ivec4) Load 506 + 508: 77(ivec2) VectorShuffle 507 507 0 1 + 509: 185(bvec2) SLessThan 508 184 + 510: 185(bvec2) GroupNonUniformQuadSwap 35 509 34 + 511: 77(ivec2) Select 510 188 184 + 512: 71(ptr) AccessChain 27(data) 505 39 30 + 513: 19(int) CompositeExtract 511 0 + Store 512 513 + 514: 71(ptr) AccessChain 27(data) 505 39 34 + 515: 19(int) CompositeExtract 511 1 + Store 514 515 + 516: 6(int) Load 8(invocation) + 517: 78(ptr) AccessChain 27(data) 39 39 + 518: 20(ivec4) Load 517 + 519: 88(ivec3) VectorShuffle 518 518 0 1 2 + 520: 199(bvec3) SLessThan 519 198 + 521: 199(bvec3) GroupNonUniformQuadSwap 35 520 34 + 522: 88(ivec3) Select 521 202 198 + 523: 71(ptr) AccessChain 27(data) 516 39 30 + 524: 19(int) CompositeExtract 522 0 + Store 523 524 + 525: 71(ptr) AccessChain 27(data) 516 39 34 + 526: 19(int) CompositeExtract 522 1 + Store 525 526 + 527: 71(ptr) AccessChain 27(data) 516 39 61 + 528: 19(int) CompositeExtract 522 2 + Store 527 528 + 529: 6(int) Load 8(invocation) + 530: 78(ptr) AccessChain 27(data) 39 39 + 531: 20(ivec4) Load 530 + 532: 214(bvec4) SLessThan 531 213 + 533: 214(bvec4) GroupNonUniformQuadSwap 35 532 34 + 534: 20(ivec4) Select 533 217 213 + 535: 78(ptr) AccessChain 27(data) 529 39 + Store 535 534 + 536: 6(int) Load 8(invocation) + 537: 31(ptr) AccessChain 27(data) 29 29 30 + 538: 17(float) Load 537 + 539: 17(float) GroupNonUniformQuadSwap 35 538 61 + 540: 31(ptr) AccessChain 27(data) 536 29 30 + Store 540 539 541: 6(int) Load 8(invocation) - 542: 103(ptr) AccessChain 27(data) 50 50 - 543: 21(ivec4) Load 542 - 544: 112(ivec3) VectorShuffle 543 543 0 1 2 - 545: 112(ivec3) GroupNonUniformQuadSwap 35 544 478 - 546: 103(ptr) AccessChain 27(data) 541 50 - 547: 21(ivec4) Load 546 - 548: 21(ivec4) VectorShuffle 547 545 4 5 6 3 - Store 546 548 - 549: 6(int) Load 8(invocation) - 550: 103(ptr) AccessChain 27(data) 60 50 - 551: 21(ivec4) Load 550 - 552: 21(ivec4) GroupNonUniformQuadSwap 35 551 478 - 553: 103(ptr) AccessChain 27(data) 549 50 - Store 553 552 - 554: 6(int) Load 8(invocation) - 555: 126(ptr) AccessChain 27(data) 29 60 30 - 556:22(float64_t) Load 555 - 557:22(float64_t) GroupNonUniformQuadSwap 35 556 478 - 558: 126(ptr) AccessChain 27(data) 554 60 30 - Store 558 557 - 559: 6(int) Load 8(invocation) - 560: 133(ptr) AccessChain 27(data) 39 60 - 561: 23(f64vec4) Load 560 - 562:132(f64vec2) VectorShuffle 561 561 0 1 - 563:132(f64vec2) GroupNonUniformQuadSwap 35 562 478 - 564: 133(ptr) AccessChain 27(data) 559 60 - 565: 23(f64vec4) Load 564 - 566: 23(f64vec4) VectorShuffle 565 563 4 5 2 3 - Store 564 566 - 567: 6(int) Load 8(invocation) - 568: 133(ptr) AccessChain 27(data) 50 60 - 569: 23(f64vec4) Load 568 - 570:142(f64vec3) VectorShuffle 569 569 0 1 2 - 571:142(f64vec3) GroupNonUniformQuadSwap 35 570 478 - 572: 133(ptr) AccessChain 27(data) 567 60 - 573: 23(f64vec4) Load 572 - 574: 23(f64vec4) VectorShuffle 573 571 4 5 6 3 - Store 572 574 - 575: 6(int) Load 8(invocation) - 576: 133(ptr) AccessChain 27(data) 60 60 - 577: 23(f64vec4) Load 576 - 578: 23(f64vec4) GroupNonUniformQuadSwap 35 577 478 - 579: 133(ptr) AccessChain 27(data) 575 60 - Store 579 578 + 542: 41(ptr) AccessChain 27(data) 39 29 + 543: 18(fvec4) Load 542 + 544: 40(fvec2) VectorShuffle 543 543 0 1 + 545: 40(fvec2) GroupNonUniformQuadSwap 35 544 61 + 546: 31(ptr) AccessChain 27(data) 541 29 30 + 547: 17(float) CompositeExtract 545 0 + Store 546 547 + 548: 31(ptr) AccessChain 27(data) 541 29 34 + 549: 17(float) CompositeExtract 545 1 + Store 548 549 + 550: 6(int) Load 8(invocation) + 551: 41(ptr) AccessChain 27(data) 51 29 + 552: 18(fvec4) Load 551 + 553: 52(fvec3) VectorShuffle 552 552 0 1 2 + 554: 52(fvec3) GroupNonUniformQuadSwap 35 553 61 + 555: 31(ptr) AccessChain 27(data) 550 29 30 + 556: 17(float) CompositeExtract 554 0 + Store 555 556 + 557: 31(ptr) AccessChain 27(data) 550 29 34 + 558: 17(float) CompositeExtract 554 1 + Store 557 558 + 559: 31(ptr) AccessChain 27(data) 550 29 61 + 560: 17(float) CompositeExtract 554 2 + Store 559 560 + 561: 6(int) Load 8(invocation) + 562: 41(ptr) AccessChain 27(data) 65 29 + 563: 18(fvec4) Load 562 + 564: 18(fvec4) GroupNonUniformQuadSwap 35 563 61 + 565: 41(ptr) AccessChain 27(data) 561 29 + Store 565 564 + 566: 6(int) Load 8(invocation) + 567: 71(ptr) AccessChain 27(data) 29 39 30 + 568: 19(int) Load 567 + 569: 19(int) GroupNonUniformQuadSwap 35 568 61 + 570: 71(ptr) AccessChain 27(data) 566 39 30 + Store 570 569 + 571: 6(int) Load 8(invocation) + 572: 78(ptr) AccessChain 27(data) 39 39 + 573: 20(ivec4) Load 572 + 574: 77(ivec2) VectorShuffle 573 573 0 1 + 575: 77(ivec2) GroupNonUniformQuadSwap 35 574 61 + 576: 71(ptr) AccessChain 27(data) 571 39 30 + 577: 19(int) CompositeExtract 575 0 + Store 576 577 + 578: 71(ptr) AccessChain 27(data) 571 39 34 + 579: 19(int) CompositeExtract 575 1 + Store 578 579 580: 6(int) Load 8(invocation) - 581: 66(ptr) AccessChain 27(data) 29 39 30 - 582: 19(int) Load 581 - 583: 158(bool) SLessThan 582 29 - 584: 158(bool) GroupNonUniformQuadSwap 35 583 478 - 585: 19(int) Select 584 39 29 - 586: 66(ptr) AccessChain 27(data) 580 39 30 - Store 586 585 - 587: 6(int) Load 8(invocation) - 588: 73(ptr) AccessChain 27(data) 39 39 - 589: 20(ivec4) Load 588 - 590: 72(ivec2) VectorShuffle 589 589 0 1 - 591: 168(bvec2) SLessThan 590 167 - 592: 168(bvec2) GroupNonUniformQuadSwap 35 591 478 - 593: 72(ivec2) Select 592 171 167 - 594: 73(ptr) AccessChain 27(data) 587 39 - 595: 20(ivec4) Load 594 - 596: 20(ivec4) VectorShuffle 595 593 4 5 2 3 - Store 594 596 - 597: 6(int) Load 8(invocation) - 598: 73(ptr) AccessChain 27(data) 39 39 - 599: 20(ivec4) Load 598 - 600: 82(ivec3) VectorShuffle 599 599 0 1 2 - 601: 181(bvec3) SLessThan 600 180 - 602: 181(bvec3) GroupNonUniformQuadSwap 35 601 478 - 603: 82(ivec3) Select 602 184 180 - 604: 73(ptr) AccessChain 27(data) 597 39 - 605: 20(ivec4) Load 604 - 606: 20(ivec4) VectorShuffle 605 603 4 5 6 3 - Store 604 606 - 607: 6(int) Load 8(invocation) - 608: 73(ptr) AccessChain 27(data) 39 39 - 609: 20(ivec4) Load 608 - 610: 193(bvec4) SLessThan 609 192 - 611: 193(bvec4) GroupNonUniformQuadSwap 35 610 478 - 612: 20(ivec4) Select 611 196 192 - 613: 73(ptr) AccessChain 27(data) 607 39 - Store 613 612 + 581: 78(ptr) AccessChain 27(data) 51 39 + 582: 20(ivec4) Load 581 + 583: 88(ivec3) VectorShuffle 582 582 0 1 2 + 584: 88(ivec3) GroupNonUniformQuadSwap 35 583 61 + 585: 71(ptr) AccessChain 27(data) 580 39 30 + 586: 19(int) CompositeExtract 584 0 + Store 585 586 + 587: 71(ptr) AccessChain 27(data) 580 39 34 + 588: 19(int) CompositeExtract 584 1 + Store 587 588 + 589: 71(ptr) AccessChain 27(data) 580 39 61 + 590: 19(int) CompositeExtract 584 2 + Store 589 590 + 591: 6(int) Load 8(invocation) + 592: 78(ptr) AccessChain 27(data) 65 39 + 593: 20(ivec4) Load 592 + 594: 20(ivec4) GroupNonUniformQuadSwap 35 593 61 + 595: 78(ptr) AccessChain 27(data) 591 39 + Store 595 594 + 596: 6(int) Load 8(invocation) + 597: 105(ptr) AccessChain 27(data) 29 51 30 + 598: 6(int) Load 597 + 599: 6(int) GroupNonUniformQuadSwap 35 598 61 + 600: 105(ptr) AccessChain 27(data) 596 51 30 + Store 600 599 + 601: 6(int) Load 8(invocation) + 602: 112(ptr) AccessChain 27(data) 39 51 + 603: 21(ivec4) Load 602 + 604: 111(ivec2) VectorShuffle 603 603 0 1 + 605: 111(ivec2) GroupNonUniformQuadSwap 35 604 61 + 606: 105(ptr) AccessChain 27(data) 601 51 30 + 607: 6(int) CompositeExtract 605 0 + Store 606 607 + 608: 105(ptr) AccessChain 27(data) 601 51 34 + 609: 6(int) CompositeExtract 605 1 + Store 608 609 + 610: 6(int) Load 8(invocation) + 611: 112(ptr) AccessChain 27(data) 51 51 + 612: 21(ivec4) Load 611 + 613: 122(ivec3) VectorShuffle 612 612 0 1 2 + 614: 122(ivec3) GroupNonUniformQuadSwap 35 613 61 + 615: 105(ptr) AccessChain 27(data) 610 51 30 + 616: 6(int) CompositeExtract 614 0 + Store 615 616 + 617: 105(ptr) AccessChain 27(data) 610 51 34 + 618: 6(int) CompositeExtract 614 1 + Store 617 618 + 619: 105(ptr) AccessChain 27(data) 610 51 61 + 620: 6(int) CompositeExtract 614 2 + Store 619 620 + 621: 6(int) Load 8(invocation) + 622: 112(ptr) AccessChain 27(data) 65 51 + 623: 21(ivec4) Load 622 + 624: 21(ivec4) GroupNonUniformQuadSwap 35 623 61 + 625: 112(ptr) AccessChain 27(data) 621 51 + Store 625 624 + 626: 6(int) Load 8(invocation) + 627: 139(ptr) AccessChain 27(data) 29 65 30 + 628:22(float64_t) Load 627 + 629:22(float64_t) GroupNonUniformQuadSwap 35 628 61 + 630: 139(ptr) AccessChain 27(data) 626 65 30 + Store 630 629 + 631: 6(int) Load 8(invocation) + 632: 146(ptr) AccessChain 27(data) 39 65 + 633: 23(f64vec4) Load 632 + 634:145(f64vec2) VectorShuffle 633 633 0 1 + 635:145(f64vec2) GroupNonUniformQuadSwap 35 634 61 + 636: 139(ptr) AccessChain 27(data) 631 65 30 + 637:22(float64_t) CompositeExtract 635 0 + Store 636 637 + 638: 139(ptr) AccessChain 27(data) 631 65 34 + 639:22(float64_t) CompositeExtract 635 1 + Store 638 639 + 640: 6(int) Load 8(invocation) + 641: 146(ptr) AccessChain 27(data) 51 65 + 642: 23(f64vec4) Load 641 + 643:156(f64vec3) VectorShuffle 642 642 0 1 2 + 644:156(f64vec3) GroupNonUniformQuadSwap 35 643 61 + 645: 139(ptr) AccessChain 27(data) 640 65 30 + 646:22(float64_t) CompositeExtract 644 0 + Store 645 646 + 647: 139(ptr) AccessChain 27(data) 640 65 34 + 648:22(float64_t) CompositeExtract 644 1 + Store 647 648 + 649: 139(ptr) AccessChain 27(data) 640 65 61 + 650:22(float64_t) CompositeExtract 644 2 + Store 649 650 + 651: 6(int) Load 8(invocation) + 652: 146(ptr) AccessChain 27(data) 65 65 + 653: 23(f64vec4) Load 652 + 654: 23(f64vec4) GroupNonUniformQuadSwap 35 653 61 + 655: 146(ptr) AccessChain 27(data) 651 65 + Store 655 654 + 656: 6(int) Load 8(invocation) + 657: 71(ptr) AccessChain 27(data) 29 39 30 + 658: 19(int) Load 657 + 659: 175(bool) SLessThan 658 29 + 660: 175(bool) GroupNonUniformQuadSwap 35 659 61 + 661: 19(int) Select 660 39 29 + 662: 71(ptr) AccessChain 27(data) 656 39 30 + Store 662 661 + 663: 6(int) Load 8(invocation) + 664: 78(ptr) AccessChain 27(data) 39 39 + 665: 20(ivec4) Load 664 + 666: 77(ivec2) VectorShuffle 665 665 0 1 + 667: 185(bvec2) SLessThan 666 184 + 668: 185(bvec2) GroupNonUniformQuadSwap 35 667 61 + 669: 77(ivec2) Select 668 188 184 + 670: 71(ptr) AccessChain 27(data) 663 39 30 + 671: 19(int) CompositeExtract 669 0 + Store 670 671 + 672: 71(ptr) AccessChain 27(data) 663 39 34 + 673: 19(int) CompositeExtract 669 1 + Store 672 673 + 674: 6(int) Load 8(invocation) + 675: 78(ptr) AccessChain 27(data) 39 39 + 676: 20(ivec4) Load 675 + 677: 88(ivec3) VectorShuffle 676 676 0 1 2 + 678: 199(bvec3) SLessThan 677 198 + 679: 199(bvec3) GroupNonUniformQuadSwap 35 678 61 + 680: 88(ivec3) Select 679 202 198 + 681: 71(ptr) AccessChain 27(data) 674 39 30 + 682: 19(int) CompositeExtract 680 0 + Store 681 682 + 683: 71(ptr) AccessChain 27(data) 674 39 34 + 684: 19(int) CompositeExtract 680 1 + Store 683 684 + 685: 71(ptr) AccessChain 27(data) 674 39 61 + 686: 19(int) CompositeExtract 680 2 + Store 685 686 + 687: 6(int) Load 8(invocation) + 688: 78(ptr) AccessChain 27(data) 39 39 + 689: 20(ivec4) Load 688 + 690: 214(bvec4) SLessThan 689 213 + 691: 214(bvec4) GroupNonUniformQuadSwap 35 690 61 + 692: 20(ivec4) Select 691 217 213 + 693: 78(ptr) AccessChain 27(data) 687 39 + Store 693 692 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupShuffle.comp.out b/Test/baseResults/spv.subgroupShuffle.comp.out index b160c5f615..02cf89f8bf 100644 --- a/Test/baseResults/spv.subgroupShuffle.comp.out +++ b/Test/baseResults/spv.subgroupShuffle.comp.out @@ -1,7 +1,7 @@ spv.subgroupShuffle.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 379 +// Id's are bound by 420 Capability Shader Capability Float64 @@ -39,7 +39,7 @@ spv.subgroupShuffle.comp Decorate 24(Buffers) Block Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 - Decorate 378 BuiltIn WorkgroupSize + Decorate 419 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -66,34 +66,35 @@ spv.subgroupShuffle.comp 39: 19(int) Constant 1 40: TypeVector 17(float) 2 41: TypePointer StorageBuffer 18(fvec4) - 51: 19(int) Constant 2 - 52: TypeVector 17(float) 3 - 62: 19(int) Constant 3 - 69: TypePointer StorageBuffer 19(int) - 76: TypeVector 19(int) 2 - 77: TypePointer StorageBuffer 20(ivec4) - 87: TypeVector 19(int) 3 - 103: TypePointer StorageBuffer 6(int) - 110: TypeVector 6(int) 2 - 111: TypePointer StorageBuffer 21(ivec4) - 121: TypeVector 6(int) 3 - 137: TypePointer StorageBuffer 22(float64_t) - 144: TypeVector 22(float64_t) 2 - 145: TypePointer StorageBuffer 23(f64vec4) - 155: TypeVector 22(float64_t) 3 - 173: TypeBool - 183: 76(ivec2) ConstantComposite 29 29 - 184: TypeVector 173(bool) 2 - 188: 76(ivec2) ConstantComposite 39 39 - 197: 87(ivec3) ConstantComposite 29 29 29 - 198: TypeVector 173(bool) 3 - 202: 87(ivec3) ConstantComposite 39 39 39 - 210: 20(ivec4) ConstantComposite 29 29 29 29 - 211: TypeVector 173(bool) 4 - 215: 20(ivec4) ConstantComposite 39 39 39 39 - 376: 6(int) Constant 8 - 377: 6(int) Constant 1 - 378: 121(ivec3) ConstantComposite 376 376 377 + 49: 6(int) Constant 1 + 53: 19(int) Constant 2 + 54: TypeVector 17(float) 3 + 64: 6(int) Constant 2 + 68: 19(int) Constant 3 + 75: TypePointer StorageBuffer 19(int) + 82: TypeVector 19(int) 2 + 83: TypePointer StorageBuffer 20(ivec4) + 94: TypeVector 19(int) 3 + 113: TypePointer StorageBuffer 6(int) + 120: TypeVector 6(int) 2 + 121: TypePointer StorageBuffer 21(ivec4) + 132: TypeVector 6(int) 3 + 151: TypePointer StorageBuffer 22(float64_t) + 158: TypeVector 22(float64_t) 2 + 159: TypePointer StorageBuffer 23(f64vec4) + 170: TypeVector 22(float64_t) 3 + 191: TypeBool + 201: 82(ivec2) ConstantComposite 29 29 + 202: TypeVector 191(bool) 2 + 206: 82(ivec2) ConstantComposite 39 39 + 216: 94(ivec3) ConstantComposite 29 29 29 + 217: TypeVector 191(bool) 3 + 221: 94(ivec3) ConstantComposite 39 39 39 + 232: 20(ivec4) ConstantComposite 29 29 29 29 + 233: TypeVector 191(bool) 4 + 237: 20(ivec4) ConstantComposite 39 39 39 39 + 418: 6(int) Constant 8 + 419: 132(ivec3) ConstantComposite 418 418 49 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -115,348 +116,418 @@ spv.subgroupShuffle.comp 44: 40(fvec2) VectorShuffle 43 43 0 1 45: 6(int) Load 8(invocation) 46: 40(fvec2) GroupNonUniformShuffle 35 44 45 - 47: 41(ptr) AccessChain 27(data) 38 29 - 48: 18(fvec4) Load 47 - 49: 18(fvec4) VectorShuffle 48 46 4 5 2 3 - Store 47 49 - 50: 6(int) Load 8(invocation) - 53: 41(ptr) AccessChain 27(data) 51 29 - 54: 18(fvec4) Load 53 - 55: 52(fvec3) VectorShuffle 54 54 0 1 2 - 56: 6(int) Load 8(invocation) - 57: 52(fvec3) GroupNonUniformShuffle 35 55 56 - 58: 41(ptr) AccessChain 27(data) 50 29 - 59: 18(fvec4) Load 58 - 60: 18(fvec4) VectorShuffle 59 57 4 5 6 3 - Store 58 60 - 61: 6(int) Load 8(invocation) - 63: 41(ptr) AccessChain 27(data) 62 29 - 64: 18(fvec4) Load 63 - 65: 6(int) Load 8(invocation) - 66: 18(fvec4) GroupNonUniformShuffle 35 64 65 - 67: 41(ptr) AccessChain 27(data) 61 29 - Store 67 66 - 68: 6(int) Load 8(invocation) - 70: 69(ptr) AccessChain 27(data) 29 39 30 - 71: 19(int) Load 70 - 72: 6(int) Load 8(invocation) - 73: 19(int) GroupNonUniformShuffle 35 71 72 - 74: 69(ptr) AccessChain 27(data) 68 39 30 - Store 74 73 - 75: 6(int) Load 8(invocation) - 78: 77(ptr) AccessChain 27(data) 39 39 - 79: 20(ivec4) Load 78 - 80: 76(ivec2) VectorShuffle 79 79 0 1 + 47: 31(ptr) AccessChain 27(data) 38 29 30 + 48: 17(float) CompositeExtract 46 0 + Store 47 48 + 50: 31(ptr) AccessChain 27(data) 38 29 49 + 51: 17(float) CompositeExtract 46 1 + Store 50 51 + 52: 6(int) Load 8(invocation) + 55: 41(ptr) AccessChain 27(data) 53 29 + 56: 18(fvec4) Load 55 + 57: 54(fvec3) VectorShuffle 56 56 0 1 2 + 58: 6(int) Load 8(invocation) + 59: 54(fvec3) GroupNonUniformShuffle 35 57 58 + 60: 31(ptr) AccessChain 27(data) 52 29 30 + 61: 17(float) CompositeExtract 59 0 + Store 60 61 + 62: 31(ptr) AccessChain 27(data) 52 29 49 + 63: 17(float) CompositeExtract 59 1 + Store 62 63 + 65: 31(ptr) AccessChain 27(data) 52 29 64 + 66: 17(float) CompositeExtract 59 2 + Store 65 66 + 67: 6(int) Load 8(invocation) + 69: 41(ptr) AccessChain 27(data) 68 29 + 70: 18(fvec4) Load 69 + 71: 6(int) Load 8(invocation) + 72: 18(fvec4) GroupNonUniformShuffle 35 70 71 + 73: 41(ptr) AccessChain 27(data) 67 29 + Store 73 72 + 74: 6(int) Load 8(invocation) + 76: 75(ptr) AccessChain 27(data) 29 39 30 + 77: 19(int) Load 76 + 78: 6(int) Load 8(invocation) + 79: 19(int) GroupNonUniformShuffle 35 77 78 + 80: 75(ptr) AccessChain 27(data) 74 39 30 + Store 80 79 81: 6(int) Load 8(invocation) - 82: 76(ivec2) GroupNonUniformShuffle 35 80 81 - 83: 77(ptr) AccessChain 27(data) 75 39 - 84: 20(ivec4) Load 83 - 85: 20(ivec4) VectorShuffle 84 82 4 5 2 3 - Store 83 85 - 86: 6(int) Load 8(invocation) - 88: 77(ptr) AccessChain 27(data) 51 39 - 89: 20(ivec4) Load 88 - 90: 87(ivec3) VectorShuffle 89 89 0 1 2 - 91: 6(int) Load 8(invocation) - 92: 87(ivec3) GroupNonUniformShuffle 35 90 91 - 93: 77(ptr) AccessChain 27(data) 86 39 - 94: 20(ivec4) Load 93 - 95: 20(ivec4) VectorShuffle 94 92 4 5 6 3 - Store 93 95 - 96: 6(int) Load 8(invocation) - 97: 77(ptr) AccessChain 27(data) 62 39 - 98: 20(ivec4) Load 97 - 99: 6(int) Load 8(invocation) - 100: 20(ivec4) GroupNonUniformShuffle 35 98 99 - 101: 77(ptr) AccessChain 27(data) 96 39 - Store 101 100 - 102: 6(int) Load 8(invocation) - 104: 103(ptr) AccessChain 27(data) 29 51 30 - 105: 6(int) Load 104 + 84: 83(ptr) AccessChain 27(data) 39 39 + 85: 20(ivec4) Load 84 + 86: 82(ivec2) VectorShuffle 85 85 0 1 + 87: 6(int) Load 8(invocation) + 88: 82(ivec2) GroupNonUniformShuffle 35 86 87 + 89: 75(ptr) AccessChain 27(data) 81 39 30 + 90: 19(int) CompositeExtract 88 0 + Store 89 90 + 91: 75(ptr) AccessChain 27(data) 81 39 49 + 92: 19(int) CompositeExtract 88 1 + Store 91 92 + 93: 6(int) Load 8(invocation) + 95: 83(ptr) AccessChain 27(data) 53 39 + 96: 20(ivec4) Load 95 + 97: 94(ivec3) VectorShuffle 96 96 0 1 2 + 98: 6(int) Load 8(invocation) + 99: 94(ivec3) GroupNonUniformShuffle 35 97 98 + 100: 75(ptr) AccessChain 27(data) 93 39 30 + 101: 19(int) CompositeExtract 99 0 + Store 100 101 + 102: 75(ptr) AccessChain 27(data) 93 39 49 + 103: 19(int) CompositeExtract 99 1 + Store 102 103 + 104: 75(ptr) AccessChain 27(data) 93 39 64 + 105: 19(int) CompositeExtract 99 2 + Store 104 105 106: 6(int) Load 8(invocation) - 107: 6(int) GroupNonUniformShuffle 35 105 106 - 108: 103(ptr) AccessChain 27(data) 102 51 30 - Store 108 107 + 107: 83(ptr) AccessChain 27(data) 68 39 + 108: 20(ivec4) Load 107 109: 6(int) Load 8(invocation) - 112: 111(ptr) AccessChain 27(data) 39 51 - 113: 21(ivec4) Load 112 - 114: 110(ivec2) VectorShuffle 113 113 0 1 - 115: 6(int) Load 8(invocation) - 116: 110(ivec2) GroupNonUniformShuffle 35 114 115 - 117: 111(ptr) AccessChain 27(data) 109 51 - 118: 21(ivec4) Load 117 - 119: 21(ivec4) VectorShuffle 118 116 4 5 2 3 - Store 117 119 - 120: 6(int) Load 8(invocation) - 122: 111(ptr) AccessChain 27(data) 51 51 + 110: 20(ivec4) GroupNonUniformShuffle 35 108 109 + 111: 83(ptr) AccessChain 27(data) 106 39 + Store 111 110 + 112: 6(int) Load 8(invocation) + 114: 113(ptr) AccessChain 27(data) 29 53 30 + 115: 6(int) Load 114 + 116: 6(int) Load 8(invocation) + 117: 6(int) GroupNonUniformShuffle 35 115 116 + 118: 113(ptr) AccessChain 27(data) 112 53 30 + Store 118 117 + 119: 6(int) Load 8(invocation) + 122: 121(ptr) AccessChain 27(data) 39 53 123: 21(ivec4) Load 122 - 124: 121(ivec3) VectorShuffle 123 123 0 1 2 + 124: 120(ivec2) VectorShuffle 123 123 0 1 125: 6(int) Load 8(invocation) - 126: 121(ivec3) GroupNonUniformShuffle 35 124 125 - 127: 111(ptr) AccessChain 27(data) 120 51 - 128: 21(ivec4) Load 127 - 129: 21(ivec4) VectorShuffle 128 126 4 5 6 3 - Store 127 129 - 130: 6(int) Load 8(invocation) - 131: 111(ptr) AccessChain 27(data) 62 51 - 132: 21(ivec4) Load 131 - 133: 6(int) Load 8(invocation) - 134: 21(ivec4) GroupNonUniformShuffle 35 132 133 - 135: 111(ptr) AccessChain 27(data) 130 51 - Store 135 134 + 126: 120(ivec2) GroupNonUniformShuffle 35 124 125 + 127: 113(ptr) AccessChain 27(data) 119 53 30 + 128: 6(int) CompositeExtract 126 0 + Store 127 128 + 129: 113(ptr) AccessChain 27(data) 119 53 49 + 130: 6(int) CompositeExtract 126 1 + Store 129 130 + 131: 6(int) Load 8(invocation) + 133: 121(ptr) AccessChain 27(data) 53 53 + 134: 21(ivec4) Load 133 + 135: 132(ivec3) VectorShuffle 134 134 0 1 2 136: 6(int) Load 8(invocation) - 138: 137(ptr) AccessChain 27(data) 29 62 30 - 139:22(float64_t) Load 138 - 140: 6(int) Load 8(invocation) - 141:22(float64_t) GroupNonUniformShuffle 35 139 140 - 142: 137(ptr) AccessChain 27(data) 136 62 30 - Store 142 141 - 143: 6(int) Load 8(invocation) - 146: 145(ptr) AccessChain 27(data) 39 62 - 147: 23(f64vec4) Load 146 - 148:144(f64vec2) VectorShuffle 147 147 0 1 - 149: 6(int) Load 8(invocation) - 150:144(f64vec2) GroupNonUniformShuffle 35 148 149 - 151: 145(ptr) AccessChain 27(data) 143 62 - 152: 23(f64vec4) Load 151 - 153: 23(f64vec4) VectorShuffle 152 150 4 5 2 3 - Store 151 153 + 137: 132(ivec3) GroupNonUniformShuffle 35 135 136 + 138: 113(ptr) AccessChain 27(data) 131 53 30 + 139: 6(int) CompositeExtract 137 0 + Store 138 139 + 140: 113(ptr) AccessChain 27(data) 131 53 49 + 141: 6(int) CompositeExtract 137 1 + Store 140 141 + 142: 113(ptr) AccessChain 27(data) 131 53 64 + 143: 6(int) CompositeExtract 137 2 + Store 142 143 + 144: 6(int) Load 8(invocation) + 145: 121(ptr) AccessChain 27(data) 68 53 + 146: 21(ivec4) Load 145 + 147: 6(int) Load 8(invocation) + 148: 21(ivec4) GroupNonUniformShuffle 35 146 147 + 149: 121(ptr) AccessChain 27(data) 144 53 + Store 149 148 + 150: 6(int) Load 8(invocation) + 152: 151(ptr) AccessChain 27(data) 29 68 30 + 153:22(float64_t) Load 152 154: 6(int) Load 8(invocation) - 156: 145(ptr) AccessChain 27(data) 51 62 - 157: 23(f64vec4) Load 156 - 158:155(f64vec3) VectorShuffle 157 157 0 1 2 - 159: 6(int) Load 8(invocation) - 160:155(f64vec3) GroupNonUniformShuffle 35 158 159 - 161: 145(ptr) AccessChain 27(data) 154 62 - 162: 23(f64vec4) Load 161 - 163: 23(f64vec4) VectorShuffle 162 160 4 5 6 3 - Store 161 163 - 164: 6(int) Load 8(invocation) - 165: 145(ptr) AccessChain 27(data) 62 62 - 166: 23(f64vec4) Load 165 - 167: 6(int) Load 8(invocation) - 168: 23(f64vec4) GroupNonUniformShuffle 35 166 167 - 169: 145(ptr) AccessChain 27(data) 164 62 - Store 169 168 - 170: 6(int) Load 8(invocation) - 171: 69(ptr) AccessChain 27(data) 29 39 30 - 172: 19(int) Load 171 - 174: 173(bool) SLessThan 172 29 - 175: 6(int) Load 8(invocation) - 176: 173(bool) GroupNonUniformShuffle 35 174 175 - 177: 19(int) Select 176 39 29 - 178: 69(ptr) AccessChain 27(data) 170 39 30 - Store 178 177 - 179: 6(int) Load 8(invocation) - 180: 77(ptr) AccessChain 27(data) 39 39 - 181: 20(ivec4) Load 180 - 182: 76(ivec2) VectorShuffle 181 181 0 1 - 185: 184(bvec2) SLessThan 182 183 - 186: 6(int) Load 8(invocation) - 187: 184(bvec2) GroupNonUniformShuffle 35 185 186 - 189: 76(ivec2) Select 187 188 183 - 190: 77(ptr) AccessChain 27(data) 179 39 - 191: 20(ivec4) Load 190 - 192: 20(ivec4) VectorShuffle 191 189 4 5 2 3 - Store 190 192 + 155:22(float64_t) GroupNonUniformShuffle 35 153 154 + 156: 151(ptr) AccessChain 27(data) 150 68 30 + Store 156 155 + 157: 6(int) Load 8(invocation) + 160: 159(ptr) AccessChain 27(data) 39 68 + 161: 23(f64vec4) Load 160 + 162:158(f64vec2) VectorShuffle 161 161 0 1 + 163: 6(int) Load 8(invocation) + 164:158(f64vec2) GroupNonUniformShuffle 35 162 163 + 165: 151(ptr) AccessChain 27(data) 157 68 30 + 166:22(float64_t) CompositeExtract 164 0 + Store 165 166 + 167: 151(ptr) AccessChain 27(data) 157 68 49 + 168:22(float64_t) CompositeExtract 164 1 + Store 167 168 + 169: 6(int) Load 8(invocation) + 171: 159(ptr) AccessChain 27(data) 53 68 + 172: 23(f64vec4) Load 171 + 173:170(f64vec3) VectorShuffle 172 172 0 1 2 + 174: 6(int) Load 8(invocation) + 175:170(f64vec3) GroupNonUniformShuffle 35 173 174 + 176: 151(ptr) AccessChain 27(data) 169 68 30 + 177:22(float64_t) CompositeExtract 175 0 + Store 176 177 + 178: 151(ptr) AccessChain 27(data) 169 68 49 + 179:22(float64_t) CompositeExtract 175 1 + Store 178 179 + 180: 151(ptr) AccessChain 27(data) 169 68 64 + 181:22(float64_t) CompositeExtract 175 2 + Store 180 181 + 182: 6(int) Load 8(invocation) + 183: 159(ptr) AccessChain 27(data) 68 68 + 184: 23(f64vec4) Load 183 + 185: 6(int) Load 8(invocation) + 186: 23(f64vec4) GroupNonUniformShuffle 35 184 185 + 187: 159(ptr) AccessChain 27(data) 182 68 + Store 187 186 + 188: 6(int) Load 8(invocation) + 189: 75(ptr) AccessChain 27(data) 29 39 30 + 190: 19(int) Load 189 + 192: 191(bool) SLessThan 190 29 193: 6(int) Load 8(invocation) - 194: 77(ptr) AccessChain 27(data) 39 39 - 195: 20(ivec4) Load 194 - 196: 87(ivec3) VectorShuffle 195 195 0 1 2 - 199: 198(bvec3) SLessThan 196 197 - 200: 6(int) Load 8(invocation) - 201: 198(bvec3) GroupNonUniformShuffle 35 199 200 - 203: 87(ivec3) Select 201 202 197 - 204: 77(ptr) AccessChain 27(data) 193 39 - 205: 20(ivec4) Load 204 - 206: 20(ivec4) VectorShuffle 205 203 4 5 6 3 - Store 204 206 - 207: 6(int) Load 8(invocation) - 208: 77(ptr) AccessChain 27(data) 39 39 - 209: 20(ivec4) Load 208 - 212: 211(bvec4) SLessThan 209 210 - 213: 6(int) Load 8(invocation) - 214: 211(bvec4) GroupNonUniformShuffle 35 212 213 - 216: 20(ivec4) Select 214 215 210 - 217: 77(ptr) AccessChain 27(data) 207 39 - Store 217 216 - 218: 6(int) Load 8(invocation) - 219: 31(ptr) AccessChain 27(data) 29 29 30 - 220: 17(float) Load 219 - 221: 6(int) Load 8(invocation) - 222: 17(float) GroupNonUniformShuffleXor 35 220 221 - 223: 31(ptr) AccessChain 27(data) 218 29 30 - Store 223 222 - 224: 6(int) Load 8(invocation) - 225: 41(ptr) AccessChain 27(data) 39 29 - 226: 18(fvec4) Load 225 - 227: 40(fvec2) VectorShuffle 226 226 0 1 - 228: 6(int) Load 8(invocation) - 229: 40(fvec2) GroupNonUniformShuffleXor 35 227 228 - 230: 41(ptr) AccessChain 27(data) 224 29 - 231: 18(fvec4) Load 230 - 232: 18(fvec4) VectorShuffle 231 229 4 5 2 3 - Store 230 232 - 233: 6(int) Load 8(invocation) - 234: 41(ptr) AccessChain 27(data) 51 29 - 235: 18(fvec4) Load 234 - 236: 52(fvec3) VectorShuffle 235 235 0 1 2 - 237: 6(int) Load 8(invocation) - 238: 52(fvec3) GroupNonUniformShuffleXor 35 236 237 - 239: 41(ptr) AccessChain 27(data) 233 29 - 240: 18(fvec4) Load 239 - 241: 18(fvec4) VectorShuffle 240 238 4 5 6 3 - Store 239 241 - 242: 6(int) Load 8(invocation) - 243: 41(ptr) AccessChain 27(data) 62 29 - 244: 18(fvec4) Load 243 - 245: 6(int) Load 8(invocation) - 246: 18(fvec4) GroupNonUniformShuffleXor 35 244 245 - 247: 41(ptr) AccessChain 27(data) 242 29 - Store 247 246 - 248: 6(int) Load 8(invocation) - 249: 69(ptr) AccessChain 27(data) 29 39 30 - 250: 19(int) Load 249 - 251: 6(int) Load 8(invocation) - 252: 19(int) GroupNonUniformShuffleXor 35 250 251 - 253: 69(ptr) AccessChain 27(data) 248 39 30 - Store 253 252 - 254: 6(int) Load 8(invocation) - 255: 77(ptr) AccessChain 27(data) 39 39 - 256: 20(ivec4) Load 255 - 257: 76(ivec2) VectorShuffle 256 256 0 1 - 258: 6(int) Load 8(invocation) - 259: 76(ivec2) GroupNonUniformShuffleXor 35 257 258 - 260: 77(ptr) AccessChain 27(data) 254 39 - 261: 20(ivec4) Load 260 - 262: 20(ivec4) VectorShuffle 261 259 4 5 2 3 - Store 260 262 - 263: 6(int) Load 8(invocation) - 264: 77(ptr) AccessChain 27(data) 51 39 - 265: 20(ivec4) Load 264 - 266: 87(ivec3) VectorShuffle 265 265 0 1 2 - 267: 6(int) Load 8(invocation) - 268: 87(ivec3) GroupNonUniformShuffleXor 35 266 267 - 269: 77(ptr) AccessChain 27(data) 263 39 - 270: 20(ivec4) Load 269 - 271: 20(ivec4) VectorShuffle 270 268 4 5 6 3 - Store 269 271 - 272: 6(int) Load 8(invocation) - 273: 77(ptr) AccessChain 27(data) 62 39 - 274: 20(ivec4) Load 273 - 275: 6(int) Load 8(invocation) - 276: 20(ivec4) GroupNonUniformShuffleXor 35 274 275 - 277: 77(ptr) AccessChain 27(data) 272 39 - Store 277 276 - 278: 6(int) Load 8(invocation) - 279: 103(ptr) AccessChain 27(data) 29 51 30 - 280: 6(int) Load 279 - 281: 6(int) Load 8(invocation) - 282: 6(int) GroupNonUniformShuffleXor 35 280 281 - 283: 103(ptr) AccessChain 27(data) 278 51 30 - Store 283 282 + 194: 191(bool) GroupNonUniformShuffle 35 192 193 + 195: 19(int) Select 194 39 29 + 196: 75(ptr) AccessChain 27(data) 188 39 30 + Store 196 195 + 197: 6(int) Load 8(invocation) + 198: 83(ptr) AccessChain 27(data) 39 39 + 199: 20(ivec4) Load 198 + 200: 82(ivec2) VectorShuffle 199 199 0 1 + 203: 202(bvec2) SLessThan 200 201 + 204: 6(int) Load 8(invocation) + 205: 202(bvec2) GroupNonUniformShuffle 35 203 204 + 207: 82(ivec2) Select 205 206 201 + 208: 75(ptr) AccessChain 27(data) 197 39 30 + 209: 19(int) CompositeExtract 207 0 + Store 208 209 + 210: 75(ptr) AccessChain 27(data) 197 39 49 + 211: 19(int) CompositeExtract 207 1 + Store 210 211 + 212: 6(int) Load 8(invocation) + 213: 83(ptr) AccessChain 27(data) 39 39 + 214: 20(ivec4) Load 213 + 215: 94(ivec3) VectorShuffle 214 214 0 1 2 + 218: 217(bvec3) SLessThan 215 216 + 219: 6(int) Load 8(invocation) + 220: 217(bvec3) GroupNonUniformShuffle 35 218 219 + 222: 94(ivec3) Select 220 221 216 + 223: 75(ptr) AccessChain 27(data) 212 39 30 + 224: 19(int) CompositeExtract 222 0 + Store 223 224 + 225: 75(ptr) AccessChain 27(data) 212 39 49 + 226: 19(int) CompositeExtract 222 1 + Store 225 226 + 227: 75(ptr) AccessChain 27(data) 212 39 64 + 228: 19(int) CompositeExtract 222 2 + Store 227 228 + 229: 6(int) Load 8(invocation) + 230: 83(ptr) AccessChain 27(data) 39 39 + 231: 20(ivec4) Load 230 + 234: 233(bvec4) SLessThan 231 232 + 235: 6(int) Load 8(invocation) + 236: 233(bvec4) GroupNonUniformShuffle 35 234 235 + 238: 20(ivec4) Select 236 237 232 + 239: 83(ptr) AccessChain 27(data) 229 39 + Store 239 238 + 240: 6(int) Load 8(invocation) + 241: 31(ptr) AccessChain 27(data) 29 29 30 + 242: 17(float) Load 241 + 243: 6(int) Load 8(invocation) + 244: 17(float) GroupNonUniformShuffleXor 35 242 243 + 245: 31(ptr) AccessChain 27(data) 240 29 30 + Store 245 244 + 246: 6(int) Load 8(invocation) + 247: 41(ptr) AccessChain 27(data) 39 29 + 248: 18(fvec4) Load 247 + 249: 40(fvec2) VectorShuffle 248 248 0 1 + 250: 6(int) Load 8(invocation) + 251: 40(fvec2) GroupNonUniformShuffleXor 35 249 250 + 252: 31(ptr) AccessChain 27(data) 246 29 30 + 253: 17(float) CompositeExtract 251 0 + Store 252 253 + 254: 31(ptr) AccessChain 27(data) 246 29 49 + 255: 17(float) CompositeExtract 251 1 + Store 254 255 + 256: 6(int) Load 8(invocation) + 257: 41(ptr) AccessChain 27(data) 53 29 + 258: 18(fvec4) Load 257 + 259: 54(fvec3) VectorShuffle 258 258 0 1 2 + 260: 6(int) Load 8(invocation) + 261: 54(fvec3) GroupNonUniformShuffleXor 35 259 260 + 262: 31(ptr) AccessChain 27(data) 256 29 30 + 263: 17(float) CompositeExtract 261 0 + Store 262 263 + 264: 31(ptr) AccessChain 27(data) 256 29 49 + 265: 17(float) CompositeExtract 261 1 + Store 264 265 + 266: 31(ptr) AccessChain 27(data) 256 29 64 + 267: 17(float) CompositeExtract 261 2 + Store 266 267 + 268: 6(int) Load 8(invocation) + 269: 41(ptr) AccessChain 27(data) 68 29 + 270: 18(fvec4) Load 269 + 271: 6(int) Load 8(invocation) + 272: 18(fvec4) GroupNonUniformShuffleXor 35 270 271 + 273: 41(ptr) AccessChain 27(data) 268 29 + Store 273 272 + 274: 6(int) Load 8(invocation) + 275: 75(ptr) AccessChain 27(data) 29 39 30 + 276: 19(int) Load 275 + 277: 6(int) Load 8(invocation) + 278: 19(int) GroupNonUniformShuffleXor 35 276 277 + 279: 75(ptr) AccessChain 27(data) 274 39 30 + Store 279 278 + 280: 6(int) Load 8(invocation) + 281: 83(ptr) AccessChain 27(data) 39 39 + 282: 20(ivec4) Load 281 + 283: 82(ivec2) VectorShuffle 282 282 0 1 284: 6(int) Load 8(invocation) - 285: 111(ptr) AccessChain 27(data) 39 51 - 286: 21(ivec4) Load 285 - 287: 110(ivec2) VectorShuffle 286 286 0 1 - 288: 6(int) Load 8(invocation) - 289: 110(ivec2) GroupNonUniformShuffleXor 35 287 288 - 290: 111(ptr) AccessChain 27(data) 284 51 - 291: 21(ivec4) Load 290 - 292: 21(ivec4) VectorShuffle 291 289 4 5 2 3 - Store 290 292 - 293: 6(int) Load 8(invocation) - 294: 111(ptr) AccessChain 27(data) 51 51 - 295: 21(ivec4) Load 294 - 296: 121(ivec3) VectorShuffle 295 295 0 1 2 - 297: 6(int) Load 8(invocation) - 298: 121(ivec3) GroupNonUniformShuffleXor 35 296 297 - 299: 111(ptr) AccessChain 27(data) 293 51 - 300: 21(ivec4) Load 299 - 301: 21(ivec4) VectorShuffle 300 298 4 5 6 3 - Store 299 301 + 285: 82(ivec2) GroupNonUniformShuffleXor 35 283 284 + 286: 75(ptr) AccessChain 27(data) 280 39 30 + 287: 19(int) CompositeExtract 285 0 + Store 286 287 + 288: 75(ptr) AccessChain 27(data) 280 39 49 + 289: 19(int) CompositeExtract 285 1 + Store 288 289 + 290: 6(int) Load 8(invocation) + 291: 83(ptr) AccessChain 27(data) 53 39 + 292: 20(ivec4) Load 291 + 293: 94(ivec3) VectorShuffle 292 292 0 1 2 + 294: 6(int) Load 8(invocation) + 295: 94(ivec3) GroupNonUniformShuffleXor 35 293 294 + 296: 75(ptr) AccessChain 27(data) 290 39 30 + 297: 19(int) CompositeExtract 295 0 + Store 296 297 + 298: 75(ptr) AccessChain 27(data) 290 39 49 + 299: 19(int) CompositeExtract 295 1 + Store 298 299 + 300: 75(ptr) AccessChain 27(data) 290 39 64 + 301: 19(int) CompositeExtract 295 2 + Store 300 301 302: 6(int) Load 8(invocation) - 303: 111(ptr) AccessChain 27(data) 62 51 - 304: 21(ivec4) Load 303 + 303: 83(ptr) AccessChain 27(data) 68 39 + 304: 20(ivec4) Load 303 305: 6(int) Load 8(invocation) - 306: 21(ivec4) GroupNonUniformShuffleXor 35 304 305 - 307: 111(ptr) AccessChain 27(data) 302 51 + 306: 20(ivec4) GroupNonUniformShuffleXor 35 304 305 + 307: 83(ptr) AccessChain 27(data) 302 39 Store 307 306 308: 6(int) Load 8(invocation) - 309: 137(ptr) AccessChain 27(data) 29 62 30 - 310:22(float64_t) Load 309 + 309: 113(ptr) AccessChain 27(data) 29 53 30 + 310: 6(int) Load 309 311: 6(int) Load 8(invocation) - 312:22(float64_t) GroupNonUniformShuffleXor 35 310 311 - 313: 137(ptr) AccessChain 27(data) 308 62 30 + 312: 6(int) GroupNonUniformShuffleXor 35 310 311 + 313: 113(ptr) AccessChain 27(data) 308 53 30 Store 313 312 314: 6(int) Load 8(invocation) - 315: 145(ptr) AccessChain 27(data) 39 62 - 316: 23(f64vec4) Load 315 - 317:144(f64vec2) VectorShuffle 316 316 0 1 + 315: 121(ptr) AccessChain 27(data) 39 53 + 316: 21(ivec4) Load 315 + 317: 120(ivec2) VectorShuffle 316 316 0 1 318: 6(int) Load 8(invocation) - 319:144(f64vec2) GroupNonUniformShuffleXor 35 317 318 - 320: 145(ptr) AccessChain 27(data) 314 62 - 321: 23(f64vec4) Load 320 - 322: 23(f64vec4) VectorShuffle 321 319 4 5 2 3 - Store 320 322 - 323: 6(int) Load 8(invocation) - 324: 145(ptr) AccessChain 27(data) 51 62 - 325: 23(f64vec4) Load 324 - 326:155(f64vec3) VectorShuffle 325 325 0 1 2 - 327: 6(int) Load 8(invocation) - 328:155(f64vec3) GroupNonUniformShuffleXor 35 326 327 - 329: 145(ptr) AccessChain 27(data) 323 62 - 330: 23(f64vec4) Load 329 - 331: 23(f64vec4) VectorShuffle 330 328 4 5 6 3 - Store 329 331 - 332: 6(int) Load 8(invocation) - 333: 145(ptr) AccessChain 27(data) 62 62 - 334: 23(f64vec4) Load 333 - 335: 6(int) Load 8(invocation) - 336: 23(f64vec4) GroupNonUniformShuffleXor 35 334 335 - 337: 145(ptr) AccessChain 27(data) 332 62 - Store 337 336 - 338: 6(int) Load 8(invocation) - 339: 69(ptr) AccessChain 27(data) 29 39 30 - 340: 19(int) Load 339 - 341: 173(bool) SLessThan 340 29 + 319: 120(ivec2) GroupNonUniformShuffleXor 35 317 318 + 320: 113(ptr) AccessChain 27(data) 314 53 30 + 321: 6(int) CompositeExtract 319 0 + Store 320 321 + 322: 113(ptr) AccessChain 27(data) 314 53 49 + 323: 6(int) CompositeExtract 319 1 + Store 322 323 + 324: 6(int) Load 8(invocation) + 325: 121(ptr) AccessChain 27(data) 53 53 + 326: 21(ivec4) Load 325 + 327: 132(ivec3) VectorShuffle 326 326 0 1 2 + 328: 6(int) Load 8(invocation) + 329: 132(ivec3) GroupNonUniformShuffleXor 35 327 328 + 330: 113(ptr) AccessChain 27(data) 324 53 30 + 331: 6(int) CompositeExtract 329 0 + Store 330 331 + 332: 113(ptr) AccessChain 27(data) 324 53 49 + 333: 6(int) CompositeExtract 329 1 + Store 332 333 + 334: 113(ptr) AccessChain 27(data) 324 53 64 + 335: 6(int) CompositeExtract 329 2 + Store 334 335 + 336: 6(int) Load 8(invocation) + 337: 121(ptr) AccessChain 27(data) 68 53 + 338: 21(ivec4) Load 337 + 339: 6(int) Load 8(invocation) + 340: 21(ivec4) GroupNonUniformShuffleXor 35 338 339 + 341: 121(ptr) AccessChain 27(data) 336 53 + Store 341 340 342: 6(int) Load 8(invocation) - 343: 173(bool) GroupNonUniformShuffleXor 35 341 342 - 344: 19(int) Select 343 39 29 - 345: 69(ptr) AccessChain 27(data) 338 39 30 - Store 345 344 - 346: 6(int) Load 8(invocation) - 347: 77(ptr) AccessChain 27(data) 39 39 - 348: 20(ivec4) Load 347 - 349: 76(ivec2) VectorShuffle 348 348 0 1 - 350: 184(bvec2) SLessThan 349 183 - 351: 6(int) Load 8(invocation) - 352: 184(bvec2) GroupNonUniformShuffleXor 35 350 351 - 353: 76(ivec2) Select 352 188 183 - 354: 77(ptr) AccessChain 27(data) 346 39 - 355: 20(ivec4) Load 354 - 356: 20(ivec4) VectorShuffle 355 353 4 5 2 3 - Store 354 356 - 357: 6(int) Load 8(invocation) - 358: 77(ptr) AccessChain 27(data) 39 39 - 359: 20(ivec4) Load 358 - 360: 87(ivec3) VectorShuffle 359 359 0 1 2 - 361: 198(bvec3) SLessThan 360 197 + 343: 151(ptr) AccessChain 27(data) 29 68 30 + 344:22(float64_t) Load 343 + 345: 6(int) Load 8(invocation) + 346:22(float64_t) GroupNonUniformShuffleXor 35 344 345 + 347: 151(ptr) AccessChain 27(data) 342 68 30 + Store 347 346 + 348: 6(int) Load 8(invocation) + 349: 159(ptr) AccessChain 27(data) 39 68 + 350: 23(f64vec4) Load 349 + 351:158(f64vec2) VectorShuffle 350 350 0 1 + 352: 6(int) Load 8(invocation) + 353:158(f64vec2) GroupNonUniformShuffleXor 35 351 352 + 354: 151(ptr) AccessChain 27(data) 348 68 30 + 355:22(float64_t) CompositeExtract 353 0 + Store 354 355 + 356: 151(ptr) AccessChain 27(data) 348 68 49 + 357:22(float64_t) CompositeExtract 353 1 + Store 356 357 + 358: 6(int) Load 8(invocation) + 359: 159(ptr) AccessChain 27(data) 53 68 + 360: 23(f64vec4) Load 359 + 361:170(f64vec3) VectorShuffle 360 360 0 1 2 362: 6(int) Load 8(invocation) - 363: 198(bvec3) GroupNonUniformShuffleXor 35 361 362 - 364: 87(ivec3) Select 363 202 197 - 365: 77(ptr) AccessChain 27(data) 357 39 - 366: 20(ivec4) Load 365 - 367: 20(ivec4) VectorShuffle 366 364 4 5 6 3 - Store 365 367 - 368: 6(int) Load 8(invocation) - 369: 77(ptr) AccessChain 27(data) 39 39 - 370: 20(ivec4) Load 369 - 371: 211(bvec4) SLessThan 370 210 - 372: 6(int) Load 8(invocation) - 373: 211(bvec4) GroupNonUniformShuffleXor 35 371 372 - 374: 20(ivec4) Select 373 215 210 - 375: 77(ptr) AccessChain 27(data) 368 39 + 363:170(f64vec3) GroupNonUniformShuffleXor 35 361 362 + 364: 151(ptr) AccessChain 27(data) 358 68 30 + 365:22(float64_t) CompositeExtract 363 0 + Store 364 365 + 366: 151(ptr) AccessChain 27(data) 358 68 49 + 367:22(float64_t) CompositeExtract 363 1 + Store 366 367 + 368: 151(ptr) AccessChain 27(data) 358 68 64 + 369:22(float64_t) CompositeExtract 363 2 + Store 368 369 + 370: 6(int) Load 8(invocation) + 371: 159(ptr) AccessChain 27(data) 68 68 + 372: 23(f64vec4) Load 371 + 373: 6(int) Load 8(invocation) + 374: 23(f64vec4) GroupNonUniformShuffleXor 35 372 373 + 375: 159(ptr) AccessChain 27(data) 370 68 Store 375 374 + 376: 6(int) Load 8(invocation) + 377: 75(ptr) AccessChain 27(data) 29 39 30 + 378: 19(int) Load 377 + 379: 191(bool) SLessThan 378 29 + 380: 6(int) Load 8(invocation) + 381: 191(bool) GroupNonUniformShuffleXor 35 379 380 + 382: 19(int) Select 381 39 29 + 383: 75(ptr) AccessChain 27(data) 376 39 30 + Store 383 382 + 384: 6(int) Load 8(invocation) + 385: 83(ptr) AccessChain 27(data) 39 39 + 386: 20(ivec4) Load 385 + 387: 82(ivec2) VectorShuffle 386 386 0 1 + 388: 202(bvec2) SLessThan 387 201 + 389: 6(int) Load 8(invocation) + 390: 202(bvec2) GroupNonUniformShuffleXor 35 388 389 + 391: 82(ivec2) Select 390 206 201 + 392: 75(ptr) AccessChain 27(data) 384 39 30 + 393: 19(int) CompositeExtract 391 0 + Store 392 393 + 394: 75(ptr) AccessChain 27(data) 384 39 49 + 395: 19(int) CompositeExtract 391 1 + Store 394 395 + 396: 6(int) Load 8(invocation) + 397: 83(ptr) AccessChain 27(data) 39 39 + 398: 20(ivec4) Load 397 + 399: 94(ivec3) VectorShuffle 398 398 0 1 2 + 400: 217(bvec3) SLessThan 399 216 + 401: 6(int) Load 8(invocation) + 402: 217(bvec3) GroupNonUniformShuffleXor 35 400 401 + 403: 94(ivec3) Select 402 221 216 + 404: 75(ptr) AccessChain 27(data) 396 39 30 + 405: 19(int) CompositeExtract 403 0 + Store 404 405 + 406: 75(ptr) AccessChain 27(data) 396 39 49 + 407: 19(int) CompositeExtract 403 1 + Store 406 407 + 408: 75(ptr) AccessChain 27(data) 396 39 64 + 409: 19(int) CompositeExtract 403 2 + Store 408 409 + 410: 6(int) Load 8(invocation) + 411: 83(ptr) AccessChain 27(data) 39 39 + 412: 20(ivec4) Load 411 + 413: 233(bvec4) SLessThan 412 232 + 414: 6(int) Load 8(invocation) + 415: 233(bvec4) GroupNonUniformShuffleXor 35 413 414 + 416: 20(ivec4) Select 415 237 232 + 417: 83(ptr) AccessChain 27(data) 410 39 + Store 417 416 Return FunctionEnd diff --git a/Test/baseResults/spv.subgroupShuffleRelative.comp.out b/Test/baseResults/spv.subgroupShuffleRelative.comp.out index 68cd101512..e8486b660e 100644 --- a/Test/baseResults/spv.subgroupShuffleRelative.comp.out +++ b/Test/baseResults/spv.subgroupShuffleRelative.comp.out @@ -1,7 +1,7 @@ spv.subgroupShuffleRelative.comp // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 379 +// Id's are bound by 420 Capability Shader Capability Float64 @@ -39,7 +39,7 @@ spv.subgroupShuffleRelative.comp Decorate 24(Buffers) Block Decorate 27(data) DescriptorSet 0 Decorate 27(data) Binding 0 - Decorate 378 BuiltIn WorkgroupSize + Decorate 419 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -66,34 +66,35 @@ spv.subgroupShuffleRelative.comp 39: 19(int) Constant 1 40: TypeVector 17(float) 2 41: TypePointer StorageBuffer 18(fvec4) - 51: 19(int) Constant 2 - 52: TypeVector 17(float) 3 - 62: 19(int) Constant 3 - 69: TypePointer StorageBuffer 19(int) - 76: TypeVector 19(int) 2 - 77: TypePointer StorageBuffer 20(ivec4) - 87: TypeVector 19(int) 3 - 103: TypePointer StorageBuffer 6(int) - 110: TypeVector 6(int) 2 - 111: TypePointer StorageBuffer 21(ivec4) - 121: TypeVector 6(int) 3 - 137: TypePointer StorageBuffer 22(float64_t) - 144: TypeVector 22(float64_t) 2 - 145: TypePointer StorageBuffer 23(f64vec4) - 155: TypeVector 22(float64_t) 3 - 173: TypeBool - 183: 76(ivec2) ConstantComposite 29 29 - 184: TypeVector 173(bool) 2 - 188: 76(ivec2) ConstantComposite 39 39 - 197: 87(ivec3) ConstantComposite 29 29 29 - 198: TypeVector 173(bool) 3 - 202: 87(ivec3) ConstantComposite 39 39 39 - 210: 20(ivec4) ConstantComposite 29 29 29 29 - 211: TypeVector 173(bool) 4 - 215: 20(ivec4) ConstantComposite 39 39 39 39 - 376: 6(int) Constant 8 - 377: 6(int) Constant 1 - 378: 121(ivec3) ConstantComposite 376 376 377 + 49: 6(int) Constant 1 + 53: 19(int) Constant 2 + 54: TypeVector 17(float) 3 + 64: 6(int) Constant 2 + 68: 19(int) Constant 3 + 75: TypePointer StorageBuffer 19(int) + 82: TypeVector 19(int) 2 + 83: TypePointer StorageBuffer 20(ivec4) + 94: TypeVector 19(int) 3 + 113: TypePointer StorageBuffer 6(int) + 120: TypeVector 6(int) 2 + 121: TypePointer StorageBuffer 21(ivec4) + 132: TypeVector 6(int) 3 + 151: TypePointer StorageBuffer 22(float64_t) + 158: TypeVector 22(float64_t) 2 + 159: TypePointer StorageBuffer 23(f64vec4) + 170: TypeVector 22(float64_t) 3 + 191: TypeBool + 201: 82(ivec2) ConstantComposite 29 29 + 202: TypeVector 191(bool) 2 + 206: 82(ivec2) ConstantComposite 39 39 + 216: 94(ivec3) ConstantComposite 29 29 29 + 217: TypeVector 191(bool) 3 + 221: 94(ivec3) ConstantComposite 39 39 39 + 232: 20(ivec4) ConstantComposite 29 29 29 29 + 233: TypeVector 191(bool) 4 + 237: 20(ivec4) ConstantComposite 39 39 39 39 + 418: 6(int) Constant 8 + 419: 132(ivec3) ConstantComposite 418 418 49 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -115,348 +116,418 @@ spv.subgroupShuffleRelative.comp 44: 40(fvec2) VectorShuffle 43 43 0 1 45: 6(int) Load 8(invocation) 46: 40(fvec2) GroupNonUniformShuffleUp 35 44 45 - 47: 41(ptr) AccessChain 27(data) 38 29 - 48: 18(fvec4) Load 47 - 49: 18(fvec4) VectorShuffle 48 46 4 5 2 3 - Store 47 49 - 50: 6(int) Load 8(invocation) - 53: 41(ptr) AccessChain 27(data) 51 29 - 54: 18(fvec4) Load 53 - 55: 52(fvec3) VectorShuffle 54 54 0 1 2 - 56: 6(int) Load 8(invocation) - 57: 52(fvec3) GroupNonUniformShuffleUp 35 55 56 - 58: 41(ptr) AccessChain 27(data) 50 29 - 59: 18(fvec4) Load 58 - 60: 18(fvec4) VectorShuffle 59 57 4 5 6 3 - Store 58 60 - 61: 6(int) Load 8(invocation) - 63: 41(ptr) AccessChain 27(data) 62 29 - 64: 18(fvec4) Load 63 - 65: 6(int) Load 8(invocation) - 66: 18(fvec4) GroupNonUniformShuffleUp 35 64 65 - 67: 41(ptr) AccessChain 27(data) 61 29 - Store 67 66 - 68: 6(int) Load 8(invocation) - 70: 69(ptr) AccessChain 27(data) 29 39 30 - 71: 19(int) Load 70 - 72: 6(int) Load 8(invocation) - 73: 19(int) GroupNonUniformShuffleUp 35 71 72 - 74: 69(ptr) AccessChain 27(data) 68 39 30 - Store 74 73 - 75: 6(int) Load 8(invocation) - 78: 77(ptr) AccessChain 27(data) 39 39 - 79: 20(ivec4) Load 78 - 80: 76(ivec2) VectorShuffle 79 79 0 1 + 47: 31(ptr) AccessChain 27(data) 38 29 30 + 48: 17(float) CompositeExtract 46 0 + Store 47 48 + 50: 31(ptr) AccessChain 27(data) 38 29 49 + 51: 17(float) CompositeExtract 46 1 + Store 50 51 + 52: 6(int) Load 8(invocation) + 55: 41(ptr) AccessChain 27(data) 53 29 + 56: 18(fvec4) Load 55 + 57: 54(fvec3) VectorShuffle 56 56 0 1 2 + 58: 6(int) Load 8(invocation) + 59: 54(fvec3) GroupNonUniformShuffleUp 35 57 58 + 60: 31(ptr) AccessChain 27(data) 52 29 30 + 61: 17(float) CompositeExtract 59 0 + Store 60 61 + 62: 31(ptr) AccessChain 27(data) 52 29 49 + 63: 17(float) CompositeExtract 59 1 + Store 62 63 + 65: 31(ptr) AccessChain 27(data) 52 29 64 + 66: 17(float) CompositeExtract 59 2 + Store 65 66 + 67: 6(int) Load 8(invocation) + 69: 41(ptr) AccessChain 27(data) 68 29 + 70: 18(fvec4) Load 69 + 71: 6(int) Load 8(invocation) + 72: 18(fvec4) GroupNonUniformShuffleUp 35 70 71 + 73: 41(ptr) AccessChain 27(data) 67 29 + Store 73 72 + 74: 6(int) Load 8(invocation) + 76: 75(ptr) AccessChain 27(data) 29 39 30 + 77: 19(int) Load 76 + 78: 6(int) Load 8(invocation) + 79: 19(int) GroupNonUniformShuffleUp 35 77 78 + 80: 75(ptr) AccessChain 27(data) 74 39 30 + Store 80 79 81: 6(int) Load 8(invocation) - 82: 76(ivec2) GroupNonUniformShuffleUp 35 80 81 - 83: 77(ptr) AccessChain 27(data) 75 39 - 84: 20(ivec4) Load 83 - 85: 20(ivec4) VectorShuffle 84 82 4 5 2 3 - Store 83 85 - 86: 6(int) Load 8(invocation) - 88: 77(ptr) AccessChain 27(data) 51 39 - 89: 20(ivec4) Load 88 - 90: 87(ivec3) VectorShuffle 89 89 0 1 2 - 91: 6(int) Load 8(invocation) - 92: 87(ivec3) GroupNonUniformShuffleUp 35 90 91 - 93: 77(ptr) AccessChain 27(data) 86 39 - 94: 20(ivec4) Load 93 - 95: 20(ivec4) VectorShuffle 94 92 4 5 6 3 - Store 93 95 - 96: 6(int) Load 8(invocation) - 97: 77(ptr) AccessChain 27(data) 62 39 - 98: 20(ivec4) Load 97 - 99: 6(int) Load 8(invocation) - 100: 20(ivec4) GroupNonUniformShuffleUp 35 98 99 - 101: 77(ptr) AccessChain 27(data) 96 39 - Store 101 100 - 102: 6(int) Load 8(invocation) - 104: 103(ptr) AccessChain 27(data) 29 51 30 - 105: 6(int) Load 104 + 84: 83(ptr) AccessChain 27(data) 39 39 + 85: 20(ivec4) Load 84 + 86: 82(ivec2) VectorShuffle 85 85 0 1 + 87: 6(int) Load 8(invocation) + 88: 82(ivec2) GroupNonUniformShuffleUp 35 86 87 + 89: 75(ptr) AccessChain 27(data) 81 39 30 + 90: 19(int) CompositeExtract 88 0 + Store 89 90 + 91: 75(ptr) AccessChain 27(data) 81 39 49 + 92: 19(int) CompositeExtract 88 1 + Store 91 92 + 93: 6(int) Load 8(invocation) + 95: 83(ptr) AccessChain 27(data) 53 39 + 96: 20(ivec4) Load 95 + 97: 94(ivec3) VectorShuffle 96 96 0 1 2 + 98: 6(int) Load 8(invocation) + 99: 94(ivec3) GroupNonUniformShuffleUp 35 97 98 + 100: 75(ptr) AccessChain 27(data) 93 39 30 + 101: 19(int) CompositeExtract 99 0 + Store 100 101 + 102: 75(ptr) AccessChain 27(data) 93 39 49 + 103: 19(int) CompositeExtract 99 1 + Store 102 103 + 104: 75(ptr) AccessChain 27(data) 93 39 64 + 105: 19(int) CompositeExtract 99 2 + Store 104 105 106: 6(int) Load 8(invocation) - 107: 6(int) GroupNonUniformShuffleUp 35 105 106 - 108: 103(ptr) AccessChain 27(data) 102 51 30 - Store 108 107 + 107: 83(ptr) AccessChain 27(data) 68 39 + 108: 20(ivec4) Load 107 109: 6(int) Load 8(invocation) - 112: 111(ptr) AccessChain 27(data) 39 51 - 113: 21(ivec4) Load 112 - 114: 110(ivec2) VectorShuffle 113 113 0 1 - 115: 6(int) Load 8(invocation) - 116: 110(ivec2) GroupNonUniformShuffleUp 35 114 115 - 117: 111(ptr) AccessChain 27(data) 109 51 - 118: 21(ivec4) Load 117 - 119: 21(ivec4) VectorShuffle 118 116 4 5 2 3 - Store 117 119 - 120: 6(int) Load 8(invocation) - 122: 111(ptr) AccessChain 27(data) 51 51 + 110: 20(ivec4) GroupNonUniformShuffleUp 35 108 109 + 111: 83(ptr) AccessChain 27(data) 106 39 + Store 111 110 + 112: 6(int) Load 8(invocation) + 114: 113(ptr) AccessChain 27(data) 29 53 30 + 115: 6(int) Load 114 + 116: 6(int) Load 8(invocation) + 117: 6(int) GroupNonUniformShuffleUp 35 115 116 + 118: 113(ptr) AccessChain 27(data) 112 53 30 + Store 118 117 + 119: 6(int) Load 8(invocation) + 122: 121(ptr) AccessChain 27(data) 39 53 123: 21(ivec4) Load 122 - 124: 121(ivec3) VectorShuffle 123 123 0 1 2 + 124: 120(ivec2) VectorShuffle 123 123 0 1 125: 6(int) Load 8(invocation) - 126: 121(ivec3) GroupNonUniformShuffleUp 35 124 125 - 127: 111(ptr) AccessChain 27(data) 120 51 - 128: 21(ivec4) Load 127 - 129: 21(ivec4) VectorShuffle 128 126 4 5 6 3 - Store 127 129 - 130: 6(int) Load 8(invocation) - 131: 111(ptr) AccessChain 27(data) 62 51 - 132: 21(ivec4) Load 131 - 133: 6(int) Load 8(invocation) - 134: 21(ivec4) GroupNonUniformShuffleUp 35 132 133 - 135: 111(ptr) AccessChain 27(data) 130 51 - Store 135 134 + 126: 120(ivec2) GroupNonUniformShuffleUp 35 124 125 + 127: 113(ptr) AccessChain 27(data) 119 53 30 + 128: 6(int) CompositeExtract 126 0 + Store 127 128 + 129: 113(ptr) AccessChain 27(data) 119 53 49 + 130: 6(int) CompositeExtract 126 1 + Store 129 130 + 131: 6(int) Load 8(invocation) + 133: 121(ptr) AccessChain 27(data) 53 53 + 134: 21(ivec4) Load 133 + 135: 132(ivec3) VectorShuffle 134 134 0 1 2 136: 6(int) Load 8(invocation) - 138: 137(ptr) AccessChain 27(data) 29 62 30 - 139:22(float64_t) Load 138 - 140: 6(int) Load 8(invocation) - 141:22(float64_t) GroupNonUniformShuffleUp 35 139 140 - 142: 137(ptr) AccessChain 27(data) 136 62 30 - Store 142 141 - 143: 6(int) Load 8(invocation) - 146: 145(ptr) AccessChain 27(data) 39 62 - 147: 23(f64vec4) Load 146 - 148:144(f64vec2) VectorShuffle 147 147 0 1 - 149: 6(int) Load 8(invocation) - 150:144(f64vec2) GroupNonUniformShuffleUp 35 148 149 - 151: 145(ptr) AccessChain 27(data) 143 62 - 152: 23(f64vec4) Load 151 - 153: 23(f64vec4) VectorShuffle 152 150 4 5 2 3 - Store 151 153 + 137: 132(ivec3) GroupNonUniformShuffleUp 35 135 136 + 138: 113(ptr) AccessChain 27(data) 131 53 30 + 139: 6(int) CompositeExtract 137 0 + Store 138 139 + 140: 113(ptr) AccessChain 27(data) 131 53 49 + 141: 6(int) CompositeExtract 137 1 + Store 140 141 + 142: 113(ptr) AccessChain 27(data) 131 53 64 + 143: 6(int) CompositeExtract 137 2 + Store 142 143 + 144: 6(int) Load 8(invocation) + 145: 121(ptr) AccessChain 27(data) 68 53 + 146: 21(ivec4) Load 145 + 147: 6(int) Load 8(invocation) + 148: 21(ivec4) GroupNonUniformShuffleUp 35 146 147 + 149: 121(ptr) AccessChain 27(data) 144 53 + Store 149 148 + 150: 6(int) Load 8(invocation) + 152: 151(ptr) AccessChain 27(data) 29 68 30 + 153:22(float64_t) Load 152 154: 6(int) Load 8(invocation) - 156: 145(ptr) AccessChain 27(data) 51 62 - 157: 23(f64vec4) Load 156 - 158:155(f64vec3) VectorShuffle 157 157 0 1 2 - 159: 6(int) Load 8(invocation) - 160:155(f64vec3) GroupNonUniformShuffleUp 35 158 159 - 161: 145(ptr) AccessChain 27(data) 154 62 - 162: 23(f64vec4) Load 161 - 163: 23(f64vec4) VectorShuffle 162 160 4 5 6 3 - Store 161 163 - 164: 6(int) Load 8(invocation) - 165: 145(ptr) AccessChain 27(data) 62 62 - 166: 23(f64vec4) Load 165 - 167: 6(int) Load 8(invocation) - 168: 23(f64vec4) GroupNonUniformShuffleUp 35 166 167 - 169: 145(ptr) AccessChain 27(data) 164 62 - Store 169 168 - 170: 6(int) Load 8(invocation) - 171: 69(ptr) AccessChain 27(data) 29 39 30 - 172: 19(int) Load 171 - 174: 173(bool) SLessThan 172 29 - 175: 6(int) Load 8(invocation) - 176: 173(bool) GroupNonUniformShuffleUp 35 174 175 - 177: 19(int) Select 176 39 29 - 178: 69(ptr) AccessChain 27(data) 170 39 30 - Store 178 177 - 179: 6(int) Load 8(invocation) - 180: 77(ptr) AccessChain 27(data) 39 39 - 181: 20(ivec4) Load 180 - 182: 76(ivec2) VectorShuffle 181 181 0 1 - 185: 184(bvec2) SLessThan 182 183 - 186: 6(int) Load 8(invocation) - 187: 184(bvec2) GroupNonUniformShuffleUp 35 185 186 - 189: 76(ivec2) Select 187 188 183 - 190: 77(ptr) AccessChain 27(data) 179 39 - 191: 20(ivec4) Load 190 - 192: 20(ivec4) VectorShuffle 191 189 4 5 2 3 - Store 190 192 + 155:22(float64_t) GroupNonUniformShuffleUp 35 153 154 + 156: 151(ptr) AccessChain 27(data) 150 68 30 + Store 156 155 + 157: 6(int) Load 8(invocation) + 160: 159(ptr) AccessChain 27(data) 39 68 + 161: 23(f64vec4) Load 160 + 162:158(f64vec2) VectorShuffle 161 161 0 1 + 163: 6(int) Load 8(invocation) + 164:158(f64vec2) GroupNonUniformShuffleUp 35 162 163 + 165: 151(ptr) AccessChain 27(data) 157 68 30 + 166:22(float64_t) CompositeExtract 164 0 + Store 165 166 + 167: 151(ptr) AccessChain 27(data) 157 68 49 + 168:22(float64_t) CompositeExtract 164 1 + Store 167 168 + 169: 6(int) Load 8(invocation) + 171: 159(ptr) AccessChain 27(data) 53 68 + 172: 23(f64vec4) Load 171 + 173:170(f64vec3) VectorShuffle 172 172 0 1 2 + 174: 6(int) Load 8(invocation) + 175:170(f64vec3) GroupNonUniformShuffleUp 35 173 174 + 176: 151(ptr) AccessChain 27(data) 169 68 30 + 177:22(float64_t) CompositeExtract 175 0 + Store 176 177 + 178: 151(ptr) AccessChain 27(data) 169 68 49 + 179:22(float64_t) CompositeExtract 175 1 + Store 178 179 + 180: 151(ptr) AccessChain 27(data) 169 68 64 + 181:22(float64_t) CompositeExtract 175 2 + Store 180 181 + 182: 6(int) Load 8(invocation) + 183: 159(ptr) AccessChain 27(data) 68 68 + 184: 23(f64vec4) Load 183 + 185: 6(int) Load 8(invocation) + 186: 23(f64vec4) GroupNonUniformShuffleUp 35 184 185 + 187: 159(ptr) AccessChain 27(data) 182 68 + Store 187 186 + 188: 6(int) Load 8(invocation) + 189: 75(ptr) AccessChain 27(data) 29 39 30 + 190: 19(int) Load 189 + 192: 191(bool) SLessThan 190 29 193: 6(int) Load 8(invocation) - 194: 77(ptr) AccessChain 27(data) 39 39 - 195: 20(ivec4) Load 194 - 196: 87(ivec3) VectorShuffle 195 195 0 1 2 - 199: 198(bvec3) SLessThan 196 197 - 200: 6(int) Load 8(invocation) - 201: 198(bvec3) GroupNonUniformShuffleUp 35 199 200 - 203: 87(ivec3) Select 201 202 197 - 204: 77(ptr) AccessChain 27(data) 193 39 - 205: 20(ivec4) Load 204 - 206: 20(ivec4) VectorShuffle 205 203 4 5 6 3 - Store 204 206 - 207: 6(int) Load 8(invocation) - 208: 77(ptr) AccessChain 27(data) 39 39 - 209: 20(ivec4) Load 208 - 212: 211(bvec4) SLessThan 209 210 - 213: 6(int) Load 8(invocation) - 214: 211(bvec4) GroupNonUniformShuffleUp 35 212 213 - 216: 20(ivec4) Select 214 215 210 - 217: 77(ptr) AccessChain 27(data) 207 39 - Store 217 216 - 218: 6(int) Load 8(invocation) - 219: 31(ptr) AccessChain 27(data) 29 29 30 - 220: 17(float) Load 219 - 221: 6(int) Load 8(invocation) - 222: 17(float) GroupNonUniformShuffleDown 35 220 221 - 223: 31(ptr) AccessChain 27(data) 218 29 30 - Store 223 222 - 224: 6(int) Load 8(invocation) - 225: 41(ptr) AccessChain 27(data) 39 29 - 226: 18(fvec4) Load 225 - 227: 40(fvec2) VectorShuffle 226 226 0 1 - 228: 6(int) Load 8(invocation) - 229: 40(fvec2) GroupNonUniformShuffleDown 35 227 228 - 230: 41(ptr) AccessChain 27(data) 224 29 - 231: 18(fvec4) Load 230 - 232: 18(fvec4) VectorShuffle 231 229 4 5 2 3 - Store 230 232 - 233: 6(int) Load 8(invocation) - 234: 41(ptr) AccessChain 27(data) 51 29 - 235: 18(fvec4) Load 234 - 236: 52(fvec3) VectorShuffle 235 235 0 1 2 - 237: 6(int) Load 8(invocation) - 238: 52(fvec3) GroupNonUniformShuffleDown 35 236 237 - 239: 41(ptr) AccessChain 27(data) 233 29 - 240: 18(fvec4) Load 239 - 241: 18(fvec4) VectorShuffle 240 238 4 5 6 3 - Store 239 241 - 242: 6(int) Load 8(invocation) - 243: 41(ptr) AccessChain 27(data) 62 29 - 244: 18(fvec4) Load 243 - 245: 6(int) Load 8(invocation) - 246: 18(fvec4) GroupNonUniformShuffleDown 35 244 245 - 247: 41(ptr) AccessChain 27(data) 242 29 - Store 247 246 - 248: 6(int) Load 8(invocation) - 249: 69(ptr) AccessChain 27(data) 29 39 30 - 250: 19(int) Load 249 - 251: 6(int) Load 8(invocation) - 252: 19(int) GroupNonUniformShuffleDown 35 250 251 - 253: 69(ptr) AccessChain 27(data) 248 39 30 - Store 253 252 - 254: 6(int) Load 8(invocation) - 255: 77(ptr) AccessChain 27(data) 39 39 - 256: 20(ivec4) Load 255 - 257: 76(ivec2) VectorShuffle 256 256 0 1 - 258: 6(int) Load 8(invocation) - 259: 76(ivec2) GroupNonUniformShuffleDown 35 257 258 - 260: 77(ptr) AccessChain 27(data) 254 39 - 261: 20(ivec4) Load 260 - 262: 20(ivec4) VectorShuffle 261 259 4 5 2 3 - Store 260 262 - 263: 6(int) Load 8(invocation) - 264: 77(ptr) AccessChain 27(data) 51 39 - 265: 20(ivec4) Load 264 - 266: 87(ivec3) VectorShuffle 265 265 0 1 2 - 267: 6(int) Load 8(invocation) - 268: 87(ivec3) GroupNonUniformShuffleDown 35 266 267 - 269: 77(ptr) AccessChain 27(data) 263 39 - 270: 20(ivec4) Load 269 - 271: 20(ivec4) VectorShuffle 270 268 4 5 6 3 - Store 269 271 - 272: 6(int) Load 8(invocation) - 273: 77(ptr) AccessChain 27(data) 62 39 - 274: 20(ivec4) Load 273 - 275: 6(int) Load 8(invocation) - 276: 20(ivec4) GroupNonUniformShuffleDown 35 274 275 - 277: 77(ptr) AccessChain 27(data) 272 39 - Store 277 276 - 278: 6(int) Load 8(invocation) - 279: 103(ptr) AccessChain 27(data) 29 51 30 - 280: 6(int) Load 279 - 281: 6(int) Load 8(invocation) - 282: 6(int) GroupNonUniformShuffleDown 35 280 281 - 283: 103(ptr) AccessChain 27(data) 278 51 30 - Store 283 282 + 194: 191(bool) GroupNonUniformShuffleUp 35 192 193 + 195: 19(int) Select 194 39 29 + 196: 75(ptr) AccessChain 27(data) 188 39 30 + Store 196 195 + 197: 6(int) Load 8(invocation) + 198: 83(ptr) AccessChain 27(data) 39 39 + 199: 20(ivec4) Load 198 + 200: 82(ivec2) VectorShuffle 199 199 0 1 + 203: 202(bvec2) SLessThan 200 201 + 204: 6(int) Load 8(invocation) + 205: 202(bvec2) GroupNonUniformShuffleUp 35 203 204 + 207: 82(ivec2) Select 205 206 201 + 208: 75(ptr) AccessChain 27(data) 197 39 30 + 209: 19(int) CompositeExtract 207 0 + Store 208 209 + 210: 75(ptr) AccessChain 27(data) 197 39 49 + 211: 19(int) CompositeExtract 207 1 + Store 210 211 + 212: 6(int) Load 8(invocation) + 213: 83(ptr) AccessChain 27(data) 39 39 + 214: 20(ivec4) Load 213 + 215: 94(ivec3) VectorShuffle 214 214 0 1 2 + 218: 217(bvec3) SLessThan 215 216 + 219: 6(int) Load 8(invocation) + 220: 217(bvec3) GroupNonUniformShuffleUp 35 218 219 + 222: 94(ivec3) Select 220 221 216 + 223: 75(ptr) AccessChain 27(data) 212 39 30 + 224: 19(int) CompositeExtract 222 0 + Store 223 224 + 225: 75(ptr) AccessChain 27(data) 212 39 49 + 226: 19(int) CompositeExtract 222 1 + Store 225 226 + 227: 75(ptr) AccessChain 27(data) 212 39 64 + 228: 19(int) CompositeExtract 222 2 + Store 227 228 + 229: 6(int) Load 8(invocation) + 230: 83(ptr) AccessChain 27(data) 39 39 + 231: 20(ivec4) Load 230 + 234: 233(bvec4) SLessThan 231 232 + 235: 6(int) Load 8(invocation) + 236: 233(bvec4) GroupNonUniformShuffleUp 35 234 235 + 238: 20(ivec4) Select 236 237 232 + 239: 83(ptr) AccessChain 27(data) 229 39 + Store 239 238 + 240: 6(int) Load 8(invocation) + 241: 31(ptr) AccessChain 27(data) 29 29 30 + 242: 17(float) Load 241 + 243: 6(int) Load 8(invocation) + 244: 17(float) GroupNonUniformShuffleDown 35 242 243 + 245: 31(ptr) AccessChain 27(data) 240 29 30 + Store 245 244 + 246: 6(int) Load 8(invocation) + 247: 41(ptr) AccessChain 27(data) 39 29 + 248: 18(fvec4) Load 247 + 249: 40(fvec2) VectorShuffle 248 248 0 1 + 250: 6(int) Load 8(invocation) + 251: 40(fvec2) GroupNonUniformShuffleDown 35 249 250 + 252: 31(ptr) AccessChain 27(data) 246 29 30 + 253: 17(float) CompositeExtract 251 0 + Store 252 253 + 254: 31(ptr) AccessChain 27(data) 246 29 49 + 255: 17(float) CompositeExtract 251 1 + Store 254 255 + 256: 6(int) Load 8(invocation) + 257: 41(ptr) AccessChain 27(data) 53 29 + 258: 18(fvec4) Load 257 + 259: 54(fvec3) VectorShuffle 258 258 0 1 2 + 260: 6(int) Load 8(invocation) + 261: 54(fvec3) GroupNonUniformShuffleDown 35 259 260 + 262: 31(ptr) AccessChain 27(data) 256 29 30 + 263: 17(float) CompositeExtract 261 0 + Store 262 263 + 264: 31(ptr) AccessChain 27(data) 256 29 49 + 265: 17(float) CompositeExtract 261 1 + Store 264 265 + 266: 31(ptr) AccessChain 27(data) 256 29 64 + 267: 17(float) CompositeExtract 261 2 + Store 266 267 + 268: 6(int) Load 8(invocation) + 269: 41(ptr) AccessChain 27(data) 68 29 + 270: 18(fvec4) Load 269 + 271: 6(int) Load 8(invocation) + 272: 18(fvec4) GroupNonUniformShuffleDown 35 270 271 + 273: 41(ptr) AccessChain 27(data) 268 29 + Store 273 272 + 274: 6(int) Load 8(invocation) + 275: 75(ptr) AccessChain 27(data) 29 39 30 + 276: 19(int) Load 275 + 277: 6(int) Load 8(invocation) + 278: 19(int) GroupNonUniformShuffleDown 35 276 277 + 279: 75(ptr) AccessChain 27(data) 274 39 30 + Store 279 278 + 280: 6(int) Load 8(invocation) + 281: 83(ptr) AccessChain 27(data) 39 39 + 282: 20(ivec4) Load 281 + 283: 82(ivec2) VectorShuffle 282 282 0 1 284: 6(int) Load 8(invocation) - 285: 111(ptr) AccessChain 27(data) 39 51 - 286: 21(ivec4) Load 285 - 287: 110(ivec2) VectorShuffle 286 286 0 1 - 288: 6(int) Load 8(invocation) - 289: 110(ivec2) GroupNonUniformShuffleDown 35 287 288 - 290: 111(ptr) AccessChain 27(data) 284 51 - 291: 21(ivec4) Load 290 - 292: 21(ivec4) VectorShuffle 291 289 4 5 2 3 - Store 290 292 - 293: 6(int) Load 8(invocation) - 294: 111(ptr) AccessChain 27(data) 51 51 - 295: 21(ivec4) Load 294 - 296: 121(ivec3) VectorShuffle 295 295 0 1 2 - 297: 6(int) Load 8(invocation) - 298: 121(ivec3) GroupNonUniformShuffleDown 35 296 297 - 299: 111(ptr) AccessChain 27(data) 293 51 - 300: 21(ivec4) Load 299 - 301: 21(ivec4) VectorShuffle 300 298 4 5 6 3 - Store 299 301 + 285: 82(ivec2) GroupNonUniformShuffleDown 35 283 284 + 286: 75(ptr) AccessChain 27(data) 280 39 30 + 287: 19(int) CompositeExtract 285 0 + Store 286 287 + 288: 75(ptr) AccessChain 27(data) 280 39 49 + 289: 19(int) CompositeExtract 285 1 + Store 288 289 + 290: 6(int) Load 8(invocation) + 291: 83(ptr) AccessChain 27(data) 53 39 + 292: 20(ivec4) Load 291 + 293: 94(ivec3) VectorShuffle 292 292 0 1 2 + 294: 6(int) Load 8(invocation) + 295: 94(ivec3) GroupNonUniformShuffleDown 35 293 294 + 296: 75(ptr) AccessChain 27(data) 290 39 30 + 297: 19(int) CompositeExtract 295 0 + Store 296 297 + 298: 75(ptr) AccessChain 27(data) 290 39 49 + 299: 19(int) CompositeExtract 295 1 + Store 298 299 + 300: 75(ptr) AccessChain 27(data) 290 39 64 + 301: 19(int) CompositeExtract 295 2 + Store 300 301 302: 6(int) Load 8(invocation) - 303: 111(ptr) AccessChain 27(data) 62 51 - 304: 21(ivec4) Load 303 + 303: 83(ptr) AccessChain 27(data) 68 39 + 304: 20(ivec4) Load 303 305: 6(int) Load 8(invocation) - 306: 21(ivec4) GroupNonUniformShuffleDown 35 304 305 - 307: 111(ptr) AccessChain 27(data) 302 51 + 306: 20(ivec4) GroupNonUniformShuffleDown 35 304 305 + 307: 83(ptr) AccessChain 27(data) 302 39 Store 307 306 308: 6(int) Load 8(invocation) - 309: 137(ptr) AccessChain 27(data) 29 62 30 - 310:22(float64_t) Load 309 + 309: 113(ptr) AccessChain 27(data) 29 53 30 + 310: 6(int) Load 309 311: 6(int) Load 8(invocation) - 312:22(float64_t) GroupNonUniformShuffleDown 35 310 311 - 313: 137(ptr) AccessChain 27(data) 308 62 30 + 312: 6(int) GroupNonUniformShuffleDown 35 310 311 + 313: 113(ptr) AccessChain 27(data) 308 53 30 Store 313 312 314: 6(int) Load 8(invocation) - 315: 145(ptr) AccessChain 27(data) 39 62 - 316: 23(f64vec4) Load 315 - 317:144(f64vec2) VectorShuffle 316 316 0 1 + 315: 121(ptr) AccessChain 27(data) 39 53 + 316: 21(ivec4) Load 315 + 317: 120(ivec2) VectorShuffle 316 316 0 1 318: 6(int) Load 8(invocation) - 319:144(f64vec2) GroupNonUniformShuffleDown 35 317 318 - 320: 145(ptr) AccessChain 27(data) 314 62 - 321: 23(f64vec4) Load 320 - 322: 23(f64vec4) VectorShuffle 321 319 4 5 2 3 - Store 320 322 - 323: 6(int) Load 8(invocation) - 324: 145(ptr) AccessChain 27(data) 51 62 - 325: 23(f64vec4) Load 324 - 326:155(f64vec3) VectorShuffle 325 325 0 1 2 - 327: 6(int) Load 8(invocation) - 328:155(f64vec3) GroupNonUniformShuffleDown 35 326 327 - 329: 145(ptr) AccessChain 27(data) 323 62 - 330: 23(f64vec4) Load 329 - 331: 23(f64vec4) VectorShuffle 330 328 4 5 6 3 - Store 329 331 - 332: 6(int) Load 8(invocation) - 333: 145(ptr) AccessChain 27(data) 62 62 - 334: 23(f64vec4) Load 333 - 335: 6(int) Load 8(invocation) - 336: 23(f64vec4) GroupNonUniformShuffleDown 35 334 335 - 337: 145(ptr) AccessChain 27(data) 332 62 - Store 337 336 - 338: 6(int) Load 8(invocation) - 339: 69(ptr) AccessChain 27(data) 29 39 30 - 340: 19(int) Load 339 - 341: 173(bool) SLessThan 340 29 + 319: 120(ivec2) GroupNonUniformShuffleDown 35 317 318 + 320: 113(ptr) AccessChain 27(data) 314 53 30 + 321: 6(int) CompositeExtract 319 0 + Store 320 321 + 322: 113(ptr) AccessChain 27(data) 314 53 49 + 323: 6(int) CompositeExtract 319 1 + Store 322 323 + 324: 6(int) Load 8(invocation) + 325: 121(ptr) AccessChain 27(data) 53 53 + 326: 21(ivec4) Load 325 + 327: 132(ivec3) VectorShuffle 326 326 0 1 2 + 328: 6(int) Load 8(invocation) + 329: 132(ivec3) GroupNonUniformShuffleDown 35 327 328 + 330: 113(ptr) AccessChain 27(data) 324 53 30 + 331: 6(int) CompositeExtract 329 0 + Store 330 331 + 332: 113(ptr) AccessChain 27(data) 324 53 49 + 333: 6(int) CompositeExtract 329 1 + Store 332 333 + 334: 113(ptr) AccessChain 27(data) 324 53 64 + 335: 6(int) CompositeExtract 329 2 + Store 334 335 + 336: 6(int) Load 8(invocation) + 337: 121(ptr) AccessChain 27(data) 68 53 + 338: 21(ivec4) Load 337 + 339: 6(int) Load 8(invocation) + 340: 21(ivec4) GroupNonUniformShuffleDown 35 338 339 + 341: 121(ptr) AccessChain 27(data) 336 53 + Store 341 340 342: 6(int) Load 8(invocation) - 343: 173(bool) GroupNonUniformShuffleDown 35 341 342 - 344: 19(int) Select 343 39 29 - 345: 69(ptr) AccessChain 27(data) 338 39 30 - Store 345 344 - 346: 6(int) Load 8(invocation) - 347: 77(ptr) AccessChain 27(data) 39 39 - 348: 20(ivec4) Load 347 - 349: 76(ivec2) VectorShuffle 348 348 0 1 - 350: 184(bvec2) SLessThan 349 183 - 351: 6(int) Load 8(invocation) - 352: 184(bvec2) GroupNonUniformShuffleDown 35 350 351 - 353: 76(ivec2) Select 352 188 183 - 354: 77(ptr) AccessChain 27(data) 346 39 - 355: 20(ivec4) Load 354 - 356: 20(ivec4) VectorShuffle 355 353 4 5 2 3 - Store 354 356 - 357: 6(int) Load 8(invocation) - 358: 77(ptr) AccessChain 27(data) 39 39 - 359: 20(ivec4) Load 358 - 360: 87(ivec3) VectorShuffle 359 359 0 1 2 - 361: 198(bvec3) SLessThan 360 197 + 343: 151(ptr) AccessChain 27(data) 29 68 30 + 344:22(float64_t) Load 343 + 345: 6(int) Load 8(invocation) + 346:22(float64_t) GroupNonUniformShuffleDown 35 344 345 + 347: 151(ptr) AccessChain 27(data) 342 68 30 + Store 347 346 + 348: 6(int) Load 8(invocation) + 349: 159(ptr) AccessChain 27(data) 39 68 + 350: 23(f64vec4) Load 349 + 351:158(f64vec2) VectorShuffle 350 350 0 1 + 352: 6(int) Load 8(invocation) + 353:158(f64vec2) GroupNonUniformShuffleDown 35 351 352 + 354: 151(ptr) AccessChain 27(data) 348 68 30 + 355:22(float64_t) CompositeExtract 353 0 + Store 354 355 + 356: 151(ptr) AccessChain 27(data) 348 68 49 + 357:22(float64_t) CompositeExtract 353 1 + Store 356 357 + 358: 6(int) Load 8(invocation) + 359: 159(ptr) AccessChain 27(data) 53 68 + 360: 23(f64vec4) Load 359 + 361:170(f64vec3) VectorShuffle 360 360 0 1 2 362: 6(int) Load 8(invocation) - 363: 198(bvec3) GroupNonUniformShuffleDown 35 361 362 - 364: 87(ivec3) Select 363 202 197 - 365: 77(ptr) AccessChain 27(data) 357 39 - 366: 20(ivec4) Load 365 - 367: 20(ivec4) VectorShuffle 366 364 4 5 6 3 - Store 365 367 - 368: 6(int) Load 8(invocation) - 369: 77(ptr) AccessChain 27(data) 39 39 - 370: 20(ivec4) Load 369 - 371: 211(bvec4) SLessThan 370 210 - 372: 6(int) Load 8(invocation) - 373: 211(bvec4) GroupNonUniformShuffleDown 35 371 372 - 374: 20(ivec4) Select 373 215 210 - 375: 77(ptr) AccessChain 27(data) 368 39 + 363:170(f64vec3) GroupNonUniformShuffleDown 35 361 362 + 364: 151(ptr) AccessChain 27(data) 358 68 30 + 365:22(float64_t) CompositeExtract 363 0 + Store 364 365 + 366: 151(ptr) AccessChain 27(data) 358 68 49 + 367:22(float64_t) CompositeExtract 363 1 + Store 366 367 + 368: 151(ptr) AccessChain 27(data) 358 68 64 + 369:22(float64_t) CompositeExtract 363 2 + Store 368 369 + 370: 6(int) Load 8(invocation) + 371: 159(ptr) AccessChain 27(data) 68 68 + 372: 23(f64vec4) Load 371 + 373: 6(int) Load 8(invocation) + 374: 23(f64vec4) GroupNonUniformShuffleDown 35 372 373 + 375: 159(ptr) AccessChain 27(data) 370 68 Store 375 374 + 376: 6(int) Load 8(invocation) + 377: 75(ptr) AccessChain 27(data) 29 39 30 + 378: 19(int) Load 377 + 379: 191(bool) SLessThan 378 29 + 380: 6(int) Load 8(invocation) + 381: 191(bool) GroupNonUniformShuffleDown 35 379 380 + 382: 19(int) Select 381 39 29 + 383: 75(ptr) AccessChain 27(data) 376 39 30 + Store 383 382 + 384: 6(int) Load 8(invocation) + 385: 83(ptr) AccessChain 27(data) 39 39 + 386: 20(ivec4) Load 385 + 387: 82(ivec2) VectorShuffle 386 386 0 1 + 388: 202(bvec2) SLessThan 387 201 + 389: 6(int) Load 8(invocation) + 390: 202(bvec2) GroupNonUniformShuffleDown 35 388 389 + 391: 82(ivec2) Select 390 206 201 + 392: 75(ptr) AccessChain 27(data) 384 39 30 + 393: 19(int) CompositeExtract 391 0 + Store 392 393 + 394: 75(ptr) AccessChain 27(data) 384 39 49 + 395: 19(int) CompositeExtract 391 1 + Store 394 395 + 396: 6(int) Load 8(invocation) + 397: 83(ptr) AccessChain 27(data) 39 39 + 398: 20(ivec4) Load 397 + 399: 94(ivec3) VectorShuffle 398 398 0 1 2 + 400: 217(bvec3) SLessThan 399 216 + 401: 6(int) Load 8(invocation) + 402: 217(bvec3) GroupNonUniformShuffleDown 35 400 401 + 403: 94(ivec3) Select 402 221 216 + 404: 75(ptr) AccessChain 27(data) 396 39 30 + 405: 19(int) CompositeExtract 403 0 + Store 404 405 + 406: 75(ptr) AccessChain 27(data) 396 39 49 + 407: 19(int) CompositeExtract 403 1 + Store 406 407 + 408: 75(ptr) AccessChain 27(data) 396 39 64 + 409: 19(int) CompositeExtract 403 2 + Store 408 409 + 410: 6(int) Load 8(invocation) + 411: 83(ptr) AccessChain 27(data) 39 39 + 412: 20(ivec4) Load 411 + 413: 233(bvec4) SLessThan 412 232 + 414: 6(int) Load 8(invocation) + 415: 233(bvec4) GroupNonUniformShuffleDown 35 413 414 + 416: 20(ivec4) Select 415 237 232 + 417: 83(ptr) AccessChain 27(data) 410 39 + Store 417 416 Return FunctionEnd diff --git a/Test/baseResults/spv.swizzle.frag.out b/Test/baseResults/spv.swizzle.frag.out index 7e42c3e8d6..2aa31e8c7b 100644 --- a/Test/baseResults/spv.swizzle.frag.out +++ b/Test/baseResults/spv.swizzle.frag.out @@ -1,12 +1,12 @@ spv.swizzle.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 108 +// Id's are bound by 117 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 14 30 69 107 + EntryPoint Fragment 4 "main" 14 30 78 116 ExecutionMode 4 OriginUpperLeft Source GLSL 140 Name 4 "main" @@ -18,16 +18,16 @@ spv.swizzle.frag Name 20 "w2" Name 22 "w_flow" Name 30 "t" - Name 49 "w_undef" - Name 56 "p" - Name 69 "gl_FragColor" - Name 81 "c" - Name 83 "rep" - Name 107 "blend" + Name 56 "w_undef" + Name 65 "p" + Name 78 "gl_FragColor" + Name 90 "c" + Name 92 "rep" + Name 116 "blend" Decorate 14(u) Location 1 Decorate 30(t) Location 2 - Decorate 69(gl_FragColor) Location 0 - Decorate 107(blend) Location 0 + Decorate 78(gl_FragColor) Location 0 + Decorate 116(blend) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -42,21 +42,22 @@ spv.swizzle.frag 28: TypeVector 6(float) 2 29: TypePointer Input 28(fvec2) 30(t): 29(ptr) Variable Input - 35: 25(int) Constant 0 - 40: 25(int) Constant 1 - 54: TypeBool - 55: TypePointer Private 54(bool) - 56(p): 55(ptr) Variable Private - 60: TypePointer Input 6(float) - 68: TypePointer Output 10(fvec4) -69(gl_FragColor): 68(ptr) Variable Output - 80: TypePointer Function 28(fvec2) - 84: 6(float) Constant 0 - 85: 6(float) Constant 1065353216 - 86: 10(fvec4) ConstantComposite 84 84 84 85 - 92: 6(float) Constant 3212836864 - 102: 6(float) Constant 1079613850 - 107(blend): 60(ptr) Variable Input + 32: 25(int) Constant 3 + 35: 25(int) Constant 1 + 39: 25(int) Constant 0 + 63: TypeBool + 64: TypePointer Private 63(bool) + 65(p): 64(ptr) Variable Private + 69: TypePointer Input 6(float) + 77: TypePointer Output 10(fvec4) +78(gl_FragColor): 77(ptr) Variable Output + 89: TypePointer Function 28(fvec2) + 93: 6(float) Constant 0 + 94: 6(float) Constant 1065353216 + 95: 10(fvec4) ConstantComposite 93 93 93 94 + 101: 6(float) Constant 3212836864 + 111: 6(float) Constant 1079613850 + 116(blend): 69(ptr) Variable Input 4(main): 2 Function None 3 5: Label 8(blendscale): 7(ptr) Variable Function @@ -65,9 +66,9 @@ spv.swizzle.frag 18(w_reorder): 11(ptr) Variable Function 20(w2): 11(ptr) Variable Function 22(w_flow): 11(ptr) Variable Function - 49(w_undef): 11(ptr) Variable Function - 81(c): 80(ptr) Variable Function - 83(rep): 11(ptr) Variable Function + 56(w_undef): 11(ptr) Variable Function + 90(c): 89(ptr) Variable Function + 92(rep): 11(ptr) Variable Function Store 8(blendscale) 9 15: 10(fvec4) Load 14(u) Store 12(w) 15 @@ -83,88 +84,100 @@ spv.swizzle.frag 27: 7(ptr) AccessChain 18(w_reorder) 26 Store 27 24 31: 28(fvec2) Load 30(t) - 32: 10(fvec4) Load 12(w) - 33: 10(fvec4) VectorShuffle 32 31 0 5 2 4 - Store 12(w) 33 - 34: 6(float) Load 8(blendscale) - 36: 7(ptr) AccessChain 18(w_reorder) 35 - Store 36 34 - 37: 10(fvec4) Load 14(u) - 38: 10(fvec4) VectorShuffle 37 37 2 3 0 1 - Store 20(w2) 38 - 39: 6(float) Load 8(blendscale) - 41: 7(ptr) AccessChain 18(w_reorder) 40 - Store 41 39 - 42: 10(fvec4) Load 20(w2) - 43: 28(fvec2) VectorShuffle 42 42 0 2 - 44: 10(fvec4) Load 16(w_dep) - 45: 10(fvec4) VectorShuffle 44 43 4 5 2 3 - Store 16(w_dep) 45 - 46: 28(fvec2) Load 30(t) - 47: 10(fvec4) Load 16(w_dep) - 48: 10(fvec4) VectorShuffle 47 46 0 1 4 5 - Store 16(w_dep) 48 - 50: 10(fvec4) Load 14(u) - 51: 28(fvec2) VectorShuffle 50 50 2 3 - 52: 10(fvec4) Load 49(w_undef) - 53: 10(fvec4) VectorShuffle 52 51 4 5 2 3 - Store 49(w_undef) 53 - 57: 54(bool) Load 56(p) - SelectionMerge 59 None - BranchConditional 57 58 64 - 58: Label - 61: 60(ptr) AccessChain 30(t) 35 - 62: 6(float) Load 61 - 63: 7(ptr) AccessChain 22(w_flow) 35 - Store 63 62 - Branch 59 - 64: Label - 65: 60(ptr) AccessChain 30(t) 40 - 66: 6(float) Load 65 - 67: 7(ptr) AccessChain 22(w_flow) 35 - Store 67 66 - Branch 59 - 59: Label - 70: 10(fvec4) Load 18(w_reorder) - 71: 10(fvec4) Load 49(w_undef) - 72: 10(fvec4) Load 12(w) - 73: 10(fvec4) Load 20(w2) - 74: 10(fvec4) FMul 72 73 - 75: 10(fvec4) Load 16(w_dep) - 76: 10(fvec4) FMul 74 75 - 77: 10(fvec4) Load 22(w_flow) - 78: 10(fvec4) FMul 76 77 - 79: 10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 70 71 78 - Store 69(gl_FragColor) 79 - 82: 28(fvec2) Load 30(t) - Store 81(c) 82 - Store 83(rep) 86 - 87: 7(ptr) AccessChain 81(c) 35 - 88: 6(float) Load 87 - 89: 54(bool) FOrdLessThan 88 84 - SelectionMerge 91 None - BranchConditional 89 90 91 - 90: Label - 93: 7(ptr) AccessChain 81(c) 35 - 94: 6(float) Load 93 - 95: 6(float) FMul 94 92 - 96: 7(ptr) AccessChain 81(c) 35 - Store 96 95 - Branch 91 - 91: Label - 97: 7(ptr) AccessChain 81(c) 35 - 98: 6(float) Load 97 - 99: 54(bool) FOrdLessThanEqual 98 85 - SelectionMerge 101 None - BranchConditional 99 100 101 - 100: Label - 103: 7(ptr) AccessChain 83(rep) 35 - Store 103 102 - Branch 101 - 101: Label - 104: 10(fvec4) Load 83(rep) - 105: 10(fvec4) Load 69(gl_FragColor) - 106: 10(fvec4) FAdd 105 104 - Store 69(gl_FragColor) 106 + 33: 7(ptr) AccessChain 12(w) 32 + 34: 6(float) CompositeExtract 31 0 + Store 33 34 + 36: 7(ptr) AccessChain 12(w) 35 + 37: 6(float) CompositeExtract 31 1 + Store 36 37 + 38: 6(float) Load 8(blendscale) + 40: 7(ptr) AccessChain 18(w_reorder) 39 + Store 40 38 + 41: 10(fvec4) Load 14(u) + 42: 10(fvec4) VectorShuffle 41 41 2 3 0 1 + Store 20(w2) 42 + 43: 6(float) Load 8(blendscale) + 44: 7(ptr) AccessChain 18(w_reorder) 35 + Store 44 43 + 45: 10(fvec4) Load 20(w2) + 46: 28(fvec2) VectorShuffle 45 45 0 2 + 47: 7(ptr) AccessChain 16(w_dep) 39 + 48: 6(float) CompositeExtract 46 0 + Store 47 48 + 49: 7(ptr) AccessChain 16(w_dep) 35 + 50: 6(float) CompositeExtract 46 1 + Store 49 50 + 51: 28(fvec2) Load 30(t) + 52: 7(ptr) AccessChain 16(w_dep) 26 + 53: 6(float) CompositeExtract 51 0 + Store 52 53 + 54: 7(ptr) AccessChain 16(w_dep) 32 + 55: 6(float) CompositeExtract 51 1 + Store 54 55 + 57: 10(fvec4) Load 14(u) + 58: 28(fvec2) VectorShuffle 57 57 2 3 + 59: 7(ptr) AccessChain 56(w_undef) 39 + 60: 6(float) CompositeExtract 58 0 + Store 59 60 + 61: 7(ptr) AccessChain 56(w_undef) 35 + 62: 6(float) CompositeExtract 58 1 + Store 61 62 + 66: 63(bool) Load 65(p) + SelectionMerge 68 None + BranchConditional 66 67 73 + 67: Label + 70: 69(ptr) AccessChain 30(t) 39 + 71: 6(float) Load 70 + 72: 7(ptr) AccessChain 22(w_flow) 39 + Store 72 71 + Branch 68 + 73: Label + 74: 69(ptr) AccessChain 30(t) 35 + 75: 6(float) Load 74 + 76: 7(ptr) AccessChain 22(w_flow) 39 + Store 76 75 + Branch 68 + 68: Label + 79: 10(fvec4) Load 18(w_reorder) + 80: 10(fvec4) Load 56(w_undef) + 81: 10(fvec4) Load 12(w) + 82: 10(fvec4) Load 20(w2) + 83: 10(fvec4) FMul 81 82 + 84: 10(fvec4) Load 16(w_dep) + 85: 10(fvec4) FMul 83 84 + 86: 10(fvec4) Load 22(w_flow) + 87: 10(fvec4) FMul 85 86 + 88: 10(fvec4) ExtInst 1(GLSL.std.450) 46(FMix) 79 80 87 + Store 78(gl_FragColor) 88 + 91: 28(fvec2) Load 30(t) + Store 90(c) 91 + Store 92(rep) 95 + 96: 7(ptr) AccessChain 90(c) 39 + 97: 6(float) Load 96 + 98: 63(bool) FOrdLessThan 97 93 + SelectionMerge 100 None + BranchConditional 98 99 100 + 99: Label + 102: 7(ptr) AccessChain 90(c) 39 + 103: 6(float) Load 102 + 104: 6(float) FMul 103 101 + 105: 7(ptr) AccessChain 90(c) 39 + Store 105 104 + Branch 100 + 100: Label + 106: 7(ptr) AccessChain 90(c) 39 + 107: 6(float) Load 106 + 108: 63(bool) FOrdLessThanEqual 107 94 + SelectionMerge 110 None + BranchConditional 108 109 110 + 109: Label + 112: 7(ptr) AccessChain 92(rep) 39 + Store 112 111 + Branch 110 + 110: Label + 113: 10(fvec4) Load 92(rep) + 114: 10(fvec4) Load 78(gl_FragColor) + 115: 10(fvec4) FAdd 114 113 + Store 78(gl_FragColor) 115 Return FunctionEnd diff --git a/Test/baseResults/spv.uniformArray.frag.out b/Test/baseResults/spv.uniformArray.frag.out index 81343834dc..fa66f2bbb4 100644 --- a/Test/baseResults/spv.uniformArray.frag.out +++ b/Test/baseResults/spv.uniformArray.frag.out @@ -1,27 +1,27 @@ spv.uniformArray.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 53 +// Id's are bound by 60 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 14 25 35 47 + EntryPoint Fragment 4 "main" 14 25 43 54 ExecutionMode 4 OriginUpperLeft Source GLSL 140 Name 4 "main" Name 9 "texColor" Name 14 "color" Name 25 "inColor" - Name 35 "alpha" - Name 47 "gl_FragColor" - Name 52 "texSampler2D" + Name 43 "alpha" + Name 54 "gl_FragColor" + Name 59 "texSampler2D" Decorate 14(color) Location 1 Decorate 25(inColor) Location 0 - Decorate 35(alpha) Location 7 - Decorate 47(gl_FragColor) Location 0 - Decorate 52(texSampler2D) DescriptorSet 0 - Decorate 52(texSampler2D) Binding 0 + Decorate 43(alpha) Location 7 + Decorate 54(gl_FragColor) Location 0 + Decorate 59(texSampler2D) DescriptorSet 0 + Decorate 59(texSampler2D) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -38,20 +38,23 @@ spv.uniformArray.frag 23: TypeVector 6(float) 3 24: TypePointer Input 23(fvec3) 25(inColor): 24(ptr) Variable Input - 32: 10(int) Constant 16 - 33: TypeArray 6(float) 32 - 34: TypePointer Input 33 - 35(alpha): 34(ptr) Variable Input - 36: 15(int) Constant 12 - 37: TypePointer Input 6(float) - 40: 10(int) Constant 3 - 41: TypePointer Function 6(float) - 46: TypePointer Output 7(fvec4) -47(gl_FragColor): 46(ptr) Variable Output - 49: TypeImage 6(float) 2D sampled format:Unknown - 50: TypeSampledImage 49 - 51: TypePointer UniformConstant 50 -52(texSampler2D): 51(ptr) Variable UniformConstant + 30: 10(int) Constant 0 + 31: TypePointer Function 6(float) + 34: 10(int) Constant 1 + 37: 10(int) Constant 2 + 40: 10(int) Constant 16 + 41: TypeArray 6(float) 40 + 42: TypePointer Input 41 + 43(alpha): 42(ptr) Variable Input + 44: 15(int) Constant 12 + 45: TypePointer Input 6(float) + 48: 10(int) Constant 3 + 53: TypePointer Output 7(fvec4) +54(gl_FragColor): 53(ptr) Variable Output + 56: TypeImage 6(float) 2D sampled format:Unknown + 57: TypeSampledImage 56 + 58: TypePointer UniformConstant 57 +59(texSampler2D): 58(ptr) Variable UniformConstant 4(main): 2 Function None 3 5: Label 9(texColor): 8(ptr) Variable Function @@ -65,17 +68,23 @@ spv.uniformArray.frag 27: 7(fvec4) Load 9(texColor) 28: 23(fvec3) VectorShuffle 27 27 0 1 2 29: 23(fvec3) FAdd 28 26 - 30: 7(fvec4) Load 9(texColor) - 31: 7(fvec4) VectorShuffle 30 29 4 5 6 3 - Store 9(texColor) 31 - 38: 37(ptr) AccessChain 35(alpha) 36 - 39: 6(float) Load 38 - 42: 41(ptr) AccessChain 9(texColor) 40 - 43: 6(float) Load 42 - 44: 6(float) FAdd 43 39 - 45: 41(ptr) AccessChain 9(texColor) 40 - Store 45 44 - 48: 7(fvec4) Load 9(texColor) - Store 47(gl_FragColor) 48 + 32: 31(ptr) AccessChain 9(texColor) 30 + 33: 6(float) CompositeExtract 29 0 + Store 32 33 + 35: 31(ptr) AccessChain 9(texColor) 34 + 36: 6(float) CompositeExtract 29 1 + Store 35 36 + 38: 31(ptr) AccessChain 9(texColor) 37 + 39: 6(float) CompositeExtract 29 2 + Store 38 39 + 46: 45(ptr) AccessChain 43(alpha) 44 + 47: 6(float) Load 46 + 49: 31(ptr) AccessChain 9(texColor) 48 + 50: 6(float) Load 49 + 51: 6(float) FAdd 50 47 + 52: 31(ptr) AccessChain 9(texColor) 48 + Store 52 51 + 55: 7(fvec4) Load 9(texColor) + Store 54(gl_FragColor) 55 Return FunctionEnd diff --git a/Test/baseResults/spv.vulkan110.int16.frag.out b/Test/baseResults/spv.vulkan110.int16.frag.out index 39b36cb460..47388a2bc0 100644 --- a/Test/baseResults/spv.vulkan110.int16.frag.out +++ b/Test/baseResults/spv.vulkan110.int16.frag.out @@ -1,7 +1,7 @@ spv.vulkan110.int16.frag // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 523 +// Id's are bound by 535 Capability Shader Capability Float16 @@ -65,35 +65,35 @@ spv.vulkan110.int16.frag Name 442 "u64" Name 445 "u16v4" Name 457 "bv" - Name 518 "Block" - MemberName 518(Block) 0 "i16" - MemberName 518(Block) 1 "i16v2" - MemberName 518(Block) 2 "i16v3" - MemberName 518(Block) 3 "i16v4" - MemberName 518(Block) 4 "u16" - MemberName 518(Block) 5 "u16v2" - MemberName 518(Block) 6 "u16v3" - MemberName 518(Block) 7 "u16v4" - Name 520 "block" - Name 521 "si16" - Name 522 "su16" + Name 530 "Block" + MemberName 530(Block) 0 "i16" + MemberName 530(Block) 1 "i16v2" + MemberName 530(Block) 2 "i16v3" + MemberName 530(Block) 3 "i16v4" + MemberName 530(Block) 4 "u16" + MemberName 530(Block) 5 "u16v2" + MemberName 530(Block) 6 "u16v3" + MemberName 530(Block) 7 "u16v4" + Name 532 "block" + Name 533 "si16" + Name 534 "su16" MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block Decorate 26 DescriptorSet 0 Decorate 26 Binding 0 - MemberDecorate 518(Block) 0 Offset 0 - MemberDecorate 518(Block) 1 Offset 4 - MemberDecorate 518(Block) 2 Offset 8 - MemberDecorate 518(Block) 3 Offset 16 - MemberDecorate 518(Block) 4 Offset 24 - MemberDecorate 518(Block) 5 Offset 28 - MemberDecorate 518(Block) 6 Offset 32 - MemberDecorate 518(Block) 7 Offset 40 - Decorate 518(Block) Block - Decorate 520(block) DescriptorSet 0 - Decorate 520(block) Binding 1 - Decorate 521(si16) SpecId 100 - Decorate 522(su16) SpecId 101 + MemberDecorate 530(Block) 0 Offset 0 + MemberDecorate 530(Block) 1 Offset 4 + MemberDecorate 530(Block) 2 Offset 8 + MemberDecorate 530(Block) 3 Offset 16 + MemberDecorate 530(Block) 4 Offset 24 + MemberDecorate 530(Block) 5 Offset 28 + MemberDecorate 530(Block) 6 Offset 32 + MemberDecorate 530(Block) 7 Offset 40 + Decorate 530(Block) Block + Decorate 532(block) DescriptorSet 0 + Decorate 532(block) Binding 1 + Decorate 533(si16) SpecId 100 + Decorate 534(su16) SpecId 101 2: TypeVoid 3: TypeFunction 2 14: TypeInt 16 1 @@ -185,11 +185,11 @@ spv.vulkan110.int16.frag 443: TypeVector 36(int16_t) 4 444: TypePointer Function 443(i16vec4) 456: TypePointer Function 425(bvec3) - 518(Block): TypeStruct 14(int16_t) 52(i16vec2) 197(i16vec3) 432(i16vec4) 36(int16_t) 57(i16vec2) 193(i16vec3) 443(i16vec4) - 519: TypePointer Uniform 518(Block) - 520(block): 519(ptr) Variable Uniform - 521(si16): 14(int16_t) SpecConstant 4294967286 - 522(su16): 36(int16_t) SpecConstant 20 + 530(Block): TypeStruct 14(int16_t) 52(i16vec2) 197(i16vec3) 432(i16vec4) 36(int16_t) 57(i16vec2) 193(i16vec3) 443(i16vec4) + 531: TypePointer Uniform 530(Block) + 532(block): 531(ptr) Variable Uniform + 533(si16): 14(int16_t) SpecConstant 4294967286 + 534(su16): 36(int16_t) SpecConstant 20 4(main): 2 Function None 3 5: Label Return @@ -674,68 +674,86 @@ spv.vulkan110.int16.frag 463: 14(int16_t) Load 346(i16) 464: 52(i16vec2) CompositeConstruct 463 463 465: 174(bvec2) SLessThan 462 464 - 466: 425(bvec3) Load 457(bv) - 467: 425(bvec3) VectorShuffle 466 465 3 4 2 - Store 457(bv) 467 - 468:193(i16vec3) Load 356(u16v) - 469: 36(int16_t) Load 358(u16) - 470:193(i16vec3) CompositeConstruct 469 469 469 - 471: 425(bvec3) ULessThanEqual 468 470 - Store 457(bv) 471 - 472: 52(i16vec2) Load 343(i16v) - 473: 14(int16_t) Load 346(i16) - 474: 52(i16vec2) CompositeConstruct 473 473 - 475: 174(bvec2) SLessThanEqual 472 474 - 476: 425(bvec3) Load 457(bv) - 477: 425(bvec3) VectorShuffle 476 475 3 4 2 - Store 457(bv) 477 - 478:193(i16vec3) Load 356(u16v) - 479: 36(int16_t) Load 358(u16) - 480:193(i16vec3) CompositeConstruct 479 479 479 - 481: 425(bvec3) UGreaterThan 478 480 - Store 457(bv) 481 - 482: 52(i16vec2) Load 343(i16v) - 483: 14(int16_t) Load 346(i16) - 484: 52(i16vec2) CompositeConstruct 483 483 - 485: 174(bvec2) SGreaterThan 482 484 - 486: 425(bvec3) Load 457(bv) - 487: 425(bvec3) VectorShuffle 486 485 3 4 2 - Store 457(bv) 487 - 488:193(i16vec3) Load 356(u16v) - 489: 36(int16_t) Load 358(u16) - 490:193(i16vec3) CompositeConstruct 489 489 489 - 491: 425(bvec3) UGreaterThanEqual 488 490 - Store 457(bv) 491 - 492: 52(i16vec2) Load 343(i16v) - 493: 14(int16_t) Load 346(i16) - 494: 52(i16vec2) CompositeConstruct 493 493 - 495: 174(bvec2) SGreaterThanEqual 492 494 - 496: 425(bvec3) Load 457(bv) - 497: 425(bvec3) VectorShuffle 496 495 3 4 2 + 466: 280(ptr) AccessChain 457(bv) 282 + 467: 173(bool) CompositeExtract 465 0 + Store 466 467 + 468: 280(ptr) AccessChain 457(bv) 264 + 469: 173(bool) CompositeExtract 465 1 + Store 468 469 + 470:193(i16vec3) Load 356(u16v) + 471: 36(int16_t) Load 358(u16) + 472:193(i16vec3) CompositeConstruct 471 471 471 + 473: 425(bvec3) ULessThanEqual 470 472 + Store 457(bv) 473 + 474: 52(i16vec2) Load 343(i16v) + 475: 14(int16_t) Load 346(i16) + 476: 52(i16vec2) CompositeConstruct 475 475 + 477: 174(bvec2) SLessThanEqual 474 476 + 478: 280(ptr) AccessChain 457(bv) 282 + 479: 173(bool) CompositeExtract 477 0 + Store 478 479 + 480: 280(ptr) AccessChain 457(bv) 264 + 481: 173(bool) CompositeExtract 477 1 + Store 480 481 + 482:193(i16vec3) Load 356(u16v) + 483: 36(int16_t) Load 358(u16) + 484:193(i16vec3) CompositeConstruct 483 483 483 + 485: 425(bvec3) UGreaterThan 482 484 + Store 457(bv) 485 + 486: 52(i16vec2) Load 343(i16v) + 487: 14(int16_t) Load 346(i16) + 488: 52(i16vec2) CompositeConstruct 487 487 + 489: 174(bvec2) SGreaterThan 486 488 + 490: 280(ptr) AccessChain 457(bv) 282 + 491: 173(bool) CompositeExtract 489 0 + Store 490 491 + 492: 280(ptr) AccessChain 457(bv) 264 + 493: 173(bool) CompositeExtract 489 1 + Store 492 493 + 494:193(i16vec3) Load 356(u16v) + 495: 36(int16_t) Load 358(u16) + 496:193(i16vec3) CompositeConstruct 495 495 495 + 497: 425(bvec3) UGreaterThanEqual 494 496 Store 457(bv) 497 - 498:193(i16vec3) Load 356(u16v) - 499: 36(int16_t) Load 358(u16) - 500:193(i16vec3) CompositeConstruct 499 499 499 - 501: 425(bvec3) IEqual 498 500 - Store 457(bv) 501 - 502: 52(i16vec2) Load 343(i16v) - 503: 14(int16_t) Load 346(i16) - 504: 52(i16vec2) CompositeConstruct 503 503 - 505: 174(bvec2) IEqual 502 504 - 506: 425(bvec3) Load 457(bv) - 507: 425(bvec3) VectorShuffle 506 505 3 4 2 - Store 457(bv) 507 - 508:193(i16vec3) Load 356(u16v) - 509: 36(int16_t) Load 358(u16) - 510:193(i16vec3) CompositeConstruct 509 509 509 - 511: 425(bvec3) INotEqual 508 510 - Store 457(bv) 511 - 512: 52(i16vec2) Load 343(i16v) - 513: 14(int16_t) Load 346(i16) - 514: 52(i16vec2) CompositeConstruct 513 513 - 515: 174(bvec2) INotEqual 512 514 - 516: 425(bvec3) Load 457(bv) - 517: 425(bvec3) VectorShuffle 516 515 3 4 2 - Store 457(bv) 517 + 498: 52(i16vec2) Load 343(i16v) + 499: 14(int16_t) Load 346(i16) + 500: 52(i16vec2) CompositeConstruct 499 499 + 501: 174(bvec2) SGreaterThanEqual 498 500 + 502: 280(ptr) AccessChain 457(bv) 282 + 503: 173(bool) CompositeExtract 501 0 + Store 502 503 + 504: 280(ptr) AccessChain 457(bv) 264 + 505: 173(bool) CompositeExtract 501 1 + Store 504 505 + 506:193(i16vec3) Load 356(u16v) + 507: 36(int16_t) Load 358(u16) + 508:193(i16vec3) CompositeConstruct 507 507 507 + 509: 425(bvec3) IEqual 506 508 + Store 457(bv) 509 + 510: 52(i16vec2) Load 343(i16v) + 511: 14(int16_t) Load 346(i16) + 512: 52(i16vec2) CompositeConstruct 511 511 + 513: 174(bvec2) IEqual 510 512 + 514: 280(ptr) AccessChain 457(bv) 282 + 515: 173(bool) CompositeExtract 513 0 + Store 514 515 + 516: 280(ptr) AccessChain 457(bv) 264 + 517: 173(bool) CompositeExtract 513 1 + Store 516 517 + 518:193(i16vec3) Load 356(u16v) + 519: 36(int16_t) Load 358(u16) + 520:193(i16vec3) CompositeConstruct 519 519 519 + 521: 425(bvec3) INotEqual 518 520 + Store 457(bv) 521 + 522: 52(i16vec2) Load 343(i16v) + 523: 14(int16_t) Load 346(i16) + 524: 52(i16vec2) CompositeConstruct 523 523 + 525: 174(bvec2) INotEqual 522 524 + 526: 280(ptr) AccessChain 457(bv) 282 + 527: 173(bool) CompositeExtract 525 0 + Store 526 527 + 528: 280(ptr) AccessChain 457(bv) 264 + 529: 173(bool) CompositeExtract 525 1 + Store 528 529 Return FunctionEnd From 0784c41300d1c66196788dbc0f216115304c68b5 Mon Sep 17 00:00:00 2001 From: "andrei.malashkin" Date: Fri, 30 Jul 2021 09:12:45 +0200 Subject: [PATCH 200/365] correct ident --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 5fb6c958d0..2d29062278 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -138,7 +138,7 @@ endif(ENABLE_GLSLANG_WEBMIN) if(WIN32) set(CMAKE_DEBUG_POSTFIX "d") - option(OVERRIDE_MSVCCRT "Overrides runtime of MSVC " ON) + option(OVERRIDE_MSVCCRT "Overrides runtime of MSVC " ON) if(MSVC AND OVERRIDE_MSVCCRT) include(ChooseMSVCCRT.cmake) endif(MSVC) From 27384e04f60add37a6da961d05caf4b6b7ec6b2a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 30 Jul 2021 11:11:16 -0600 Subject: [PATCH 201/365] Allow layout(std430) uniform with GL_EXT_scalar_block_layout --- Test/spv.scalarlayout.frag | 2 ++ glslang/MachineIndependent/ParseHelper.cpp | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/Test/spv.scalarlayout.frag b/Test/spv.scalarlayout.frag index c7ecf5025b..e0e1b18d1b 100644 --- a/Test/spv.scalarlayout.frag +++ b/Test/spv.scalarlayout.frag @@ -27,6 +27,8 @@ layout(column_major, scalar) uniform B1 S i[2]; // offset = 160 (aligned to multiple of 8) stride = 48 }; +layout (std430) uniform; + void main() { } diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index d2ad355f56..d84bc8da68 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -3675,7 +3675,7 @@ void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& q if (blockName == nullptr && qualifier.layoutPacking == ElpStd430) { - error(loc, "it is invalid to declare std430 qualifier on uniform", "", ""); + requireExtensions(loc, 1, &E_GL_EXT_scalar_block_layout, "default std430 layout for uniform"); } break; default: From 715f5c6cf11d88859699481de265784da0778e45 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 29 Jul 2021 14:58:10 -0600 Subject: [PATCH 202/365] Add support for pragma STDGL invariant(all) Fixes #2689 --- Test/baseResults/spv.invariantAll.vert.out | 55 +++++++++++++++++++ Test/spv.invariantAll.vert | 10 ++++ glslang/MachineIndependent/ParseHelper.cpp | 39 ++++++++++++- glslang/MachineIndependent/ParseHelper.h | 2 + glslang/MachineIndependent/linkValidate.cpp | 1 + .../MachineIndependent/localintermediate.h | 4 ++ gtests/Spv.FromFile.cpp | 1 + 7 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 Test/baseResults/spv.invariantAll.vert.out create mode 100644 Test/spv.invariantAll.vert diff --git a/Test/baseResults/spv.invariantAll.vert.out b/Test/baseResults/spv.invariantAll.vert.out new file mode 100644 index 0000000000..ec5ad30aca --- /dev/null +++ b/Test/baseResults/spv.invariantAll.vert.out @@ -0,0 +1,55 @@ +spv.invariantAll.vert +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 25 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 13 17 + Source GLSL 450 + Name 4 "main" + Name 11 "gl_PerVertex" + MemberName 11(gl_PerVertex) 0 "gl_Position" + MemberName 11(gl_PerVertex) 1 "gl_PointSize" + MemberName 11(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 11(gl_PerVertex) 3 "gl_CullDistance" + Name 13 "" + Name 17 "v" + MemberDecorate 11(gl_PerVertex) 0 Invariant + MemberDecorate 11(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 11(gl_PerVertex) 1 Invariant + MemberDecorate 11(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 11(gl_PerVertex) 2 Invariant + MemberDecorate 11(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 11(gl_PerVertex) 3 Invariant + MemberDecorate 11(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 11(gl_PerVertex) Block + Decorate 17(v) Location 0 + Decorate 17(v) Invariant + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeInt 32 0 + 9: 8(int) Constant 1 + 10: TypeArray 6(float) 9 +11(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 10 10 + 12: TypePointer Output 11(gl_PerVertex) + 13: 12(ptr) Variable Output + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypePointer Output 6(float) + 17(v): 16(ptr) Variable Output + 20: 6(float) Constant 0 + 21: 6(float) Constant 1065353216 + 23: TypePointer Output 7(fvec4) + 4(main): 2 Function None 3 + 5: Label + 18: 6(float) Load 17(v) + 19: 6(float) Load 17(v) + 22: 7(fvec4) CompositeConstruct 18 19 20 21 + 24: 23(ptr) AccessChain 13 15 + Store 24 22 + Return + FunctionEnd diff --git a/Test/spv.invariantAll.vert b/Test/spv.invariantAll.vert new file mode 100644 index 0000000000..e094aa0773 --- /dev/null +++ b/Test/spv.invariantAll.vert @@ -0,0 +1,10 @@ +#version 450 core +#pragma STDGL invariant(all) + +layout(location=0) out highp float v; + +void main() +{ + gl_Position = vec4(v, v, 0, 1); +} + diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index c2b9edcf69..f1c7d84806 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -327,6 +327,16 @@ void TParseContext::setAtomicCounterBlockDefaults(TType& block) const block.getQualifier().layoutMatrix = ElmRowMajor; } +void TParseContext::setInvariant(const TSourceLoc& loc, const char* builtin) { + TSymbol* symbol = symbolTable.find(builtin); + if (symbol && symbol->getType().getQualifier().isPipeOutput()) { + if (intermediate.inIoAccessed(builtin)) + warn(loc, "changing qualification after use", "invariant", builtin); + TSymbol* csymbol = symbolTable.copyUp(symbol); + csymbol->getWritableType().getQualifier().invariant = true; + } +} + void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& tokens) { #ifndef GLSLANG_WEB @@ -404,8 +414,33 @@ void TParseContext::handlePragma(const TSourceLoc& loc, const TVector& intermediate.setUseVariablePointers(); } else if (tokens[0].compare("once") == 0) { warn(loc, "not implemented", "#pragma once", ""); - } else if (tokens[0].compare("glslang_binary_double_output") == 0) + } else if (tokens[0].compare("glslang_binary_double_output") == 0) { intermediate.setBinaryDoubleOutput(); + } else if (spvVersion.spv > 0 && tokens[0].compare("STDGL") == 0 && + tokens[1].compare("invariant") == 0 && tokens[3].compare("all") == 0) { + intermediate.setInvariantAll(); + // Set all builtin out variables invariant if declared + setInvariant(loc, "gl_Position"); + setInvariant(loc, "gl_PointSize"); + setInvariant(loc, "gl_ClipDistance"); + setInvariant(loc, "gl_CullDistance"); + setInvariant(loc, "gl_TessLevelOuter"); + setInvariant(loc, "gl_TessLevelInner"); + setInvariant(loc, "gl_PrimitiveID"); + setInvariant(loc, "gl_Layer"); + setInvariant(loc, "gl_ViewportIndex"); + setInvariant(loc, "gl_FragDepth"); + setInvariant(loc, "gl_SampleMask"); + setInvariant(loc, "gl_ClipVertex"); + setInvariant(loc, "gl_FrontColor"); + setInvariant(loc, "gl_BackColor"); + setInvariant(loc, "gl_FrontSecondaryColor"); + setInvariant(loc, "gl_BackSecondaryColor"); + setInvariant(loc, "gl_TexCoord"); + setInvariant(loc, "gl_FogFragCoord"); + setInvariant(loc, "gl_FragColor"); + setInvariant(loc, "gl_FragData"); + } #endif } @@ -3651,6 +3686,8 @@ void TParseContext::globalQualifierFixCheck(const TSourceLoc& loc, TQualifier& q profileRequires(loc, ENoProfile, 130, nullptr, "out for stage outputs"); profileRequires(loc, EEsProfile, 300, nullptr, "out for stage outputs"); qualifier.storage = EvqVaryingOut; + if (intermediate.isInvariantAll()) + qualifier.invariant = true; break; case EvqInOut: qualifier.storage = EvqVaryingIn; diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index c9e633420f..de44884653 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -241,6 +241,7 @@ class TParseContextBase : public TParseVersions { // override this to set the language-specific name virtual const char* getAtomicCounterBlockName() const { return ""; } virtual void setAtomicCounterBlockDefaults(TType&) const {} + virtual void setInvariant(const TSourceLoc& loc, const char* builtin) {} virtual void finalizeAtomicCounterBlockLayout(TVariable&) {} bool isAtomicCounterBlock(const TSymbol& symbol) { const TVariable* var = symbol.getAsVariable(); @@ -511,6 +512,7 @@ class TParseContext : public TParseContextBase { virtual const char* getAtomicCounterBlockName() const override; virtual void finalizeAtomicCounterBlockLayout(TVariable&) override; virtual void setAtomicCounterBlockDefaults(TType& block) const override; + virtual void setInvariant(const TSourceLoc& loc, const char* builtin) override; public: // diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 42b416dbae..9656e2e7e0 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -316,6 +316,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_TRUE(useUnknownFormat); MERGE_TRUE(hlslOffsets); MERGE_TRUE(useStorageBuffer); + MERGE_TRUE(invariantAll); MERGE_TRUE(hlslIoMapping); // TODO: sourceFile diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 5cc9930acb..9e8af3898a 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -291,6 +291,7 @@ class TIntermediate { numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false), invertY(false), useStorageBuffer(false), + invariantAll(false), nanMinMaxClamp(false), depthReplacing(false), uniqueId(0), @@ -560,6 +561,8 @@ class TIntermediate { void setUseStorageBuffer() { useStorageBuffer = true; } bool usingStorageBuffer() const { return useStorageBuffer; } + void setInvariantAll() { invariantAll = true; } + bool isInvariantAll() const { return invariantAll; } void setDepthReplacing() { depthReplacing = true; } bool isDepthReplacing() const { return depthReplacing; } bool setLocalSize(int dim, int size) @@ -1063,6 +1066,7 @@ class TIntermediate { bool recursive; bool invertY; bool useStorageBuffer; + bool invariantAll; bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN bool depthReplacing; int localSize[3]; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 20683a686b..3746557fd9 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -363,6 +363,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.intrinsicsSpirvLiteral.vert", "spv.intrinsicsSpirvStorageClass.rchit", "spv.intrinsicsSpirvType.rgen", + "spv.invariantAll.vert", "spv.layer.tese", "spv.layoutNested.vert", "spv.length.frag", From bf567735170ff148cd292d3a58527110437a5063 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Thu, 8 Jul 2021 11:12:05 +0800 Subject: [PATCH 203/365] Support Extension GL_ARB_shader_atomic_counter_ops and relative intrisic functions. refs: https://www.khronos.org/registry/OpenGL/extensions/ARB/ARB_shader_atomic_counter_ops.txt Signed-off-by: ZhiqianXia --- Test/atomicCounterARBOps.vert | 28 +++ Test/baseResults/atomicCounterARBOps.vert.out | 201 ++++++++++++++++++ glslang/MachineIndependent/Initialize.cpp | 41 ++++ glslang/MachineIndependent/Versions.cpp | 1 + glslang/MachineIndependent/Versions.h | 1 + gtests/AST.FromFile.cpp | 1 + 6 files changed, 273 insertions(+) create mode 100644 Test/atomicCounterARBOps.vert create mode 100644 Test/baseResults/atomicCounterARBOps.vert.out diff --git a/Test/atomicCounterARBOps.vert b/Test/atomicCounterARBOps.vert new file mode 100644 index 0000000000..5eb6637148 --- /dev/null +++ b/Test/atomicCounterARBOps.vert @@ -0,0 +1,28 @@ +#version 450 core +#extension GL_ARB_shader_atomic_counters: enable +#extension GL_ARB_shader_atomic_counter_ops:enable + +layout(binding = 0) uniform atomic_uint counter; + +out highp vec4 vsColor; + +void main(){ + vec4 outColor = vec4(1.0); + uint ret; + + ret = atomicCounterAddARB(counter, 4u); + ret = atomicCounterSubtractARB(counter, 4u); + ret = atomicCounterMinARB(counter, 4u); + ret = atomicCounterMaxARB(counter, 4u); + ret = atomicCounterAndARB(counter, 4u); + ret = atomicCounterOrARB(counter, 4u); + ret = atomicCounterXorARB(counter, 4u); + ret = atomicCounterExchangeARB(counter, 4u); + ret = atomicCounterCompSwapARB(counter, 4u, 4u); + + uint after = atomicCounter(counter); + if (after == ret) + outColor = vec4(0.0); + + vsColor = outColor; +} \ No newline at end of file diff --git a/Test/baseResults/atomicCounterARBOps.vert.out b/Test/baseResults/atomicCounterARBOps.vert.out new file mode 100644 index 0000000000..ebb4411fb0 --- /dev/null +++ b/Test/baseResults/atomicCounterARBOps.vert.out @@ -0,0 +1,201 @@ +atomicCounterARBOps.vert +Shader version: 450 +Requested GL_ARB_shader_atomic_counter_ops +Requested GL_ARB_shader_atomic_counters +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:10 Sequence +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'outColor' ( temp 4-component vector of float) +0:10 Constant: +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:13 move second child to first child ( temp uint) +0:13 'ret' ( temp uint) +0:13 AtomicCounterAdd ( global uint) +0:13 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:13 Constant: +0:13 4 (const uint) +0:14 move second child to first child ( temp uint) +0:14 'ret' ( temp uint) +0:14 AtomicCounterSubtract ( global uint) +0:14 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:14 Constant: +0:14 4 (const uint) +0:15 move second child to first child ( temp uint) +0:15 'ret' ( temp uint) +0:15 AtomicCounterMin ( global uint) +0:15 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:15 Constant: +0:15 4 (const uint) +0:16 move second child to first child ( temp uint) +0:16 'ret' ( temp uint) +0:16 AtomicCounterMax ( global uint) +0:16 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:16 Constant: +0:16 4 (const uint) +0:17 move second child to first child ( temp uint) +0:17 'ret' ( temp uint) +0:17 AtomicCounterAnd ( global uint) +0:17 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:17 Constant: +0:17 4 (const uint) +0:18 move second child to first child ( temp uint) +0:18 'ret' ( temp uint) +0:18 AtomicCounterOr ( global uint) +0:18 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:18 Constant: +0:18 4 (const uint) +0:19 move second child to first child ( temp uint) +0:19 'ret' ( temp uint) +0:19 AtomicCounterXor ( global uint) +0:19 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:19 Constant: +0:19 4 (const uint) +0:20 move second child to first child ( temp uint) +0:20 'ret' ( temp uint) +0:20 AtomicCounterExchange ( global uint) +0:20 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:20 Constant: +0:20 4 (const uint) +0:21 move second child to first child ( temp uint) +0:21 'ret' ( temp uint) +0:21 AtomicCounterCompSwap ( global uint) +0:21 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:21 Constant: +0:21 4 (const uint) +0:21 Constant: +0:21 4 (const uint) +0:23 Sequence +0:23 move second child to first child ( temp uint) +0:23 'after' ( temp uint) +0:23 AtomicCounter ( global uint) +0:23 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:24 Test condition and select ( temp void) +0:24 Condition +0:24 Compare Equal ( temp bool) +0:24 'after' ( temp uint) +0:24 'ret' ( temp uint) +0:24 true case +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'outColor' ( temp 4-component vector of float) +0:25 Constant: +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'vsColor' ( smooth out 4-component vector of float) +0:27 'outColor' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:? 'vsColor' ( smooth out 4-component vector of float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 450 +Requested GL_ARB_shader_atomic_counter_ops +Requested GL_ARB_shader_atomic_counters +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:10 Sequence +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'outColor' ( temp 4-component vector of float) +0:10 Constant: +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:13 move second child to first child ( temp uint) +0:13 'ret' ( temp uint) +0:13 AtomicCounterAdd ( global uint) +0:13 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:13 Constant: +0:13 4 (const uint) +0:14 move second child to first child ( temp uint) +0:14 'ret' ( temp uint) +0:14 AtomicCounterSubtract ( global uint) +0:14 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:14 Constant: +0:14 4 (const uint) +0:15 move second child to first child ( temp uint) +0:15 'ret' ( temp uint) +0:15 AtomicCounterMin ( global uint) +0:15 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:15 Constant: +0:15 4 (const uint) +0:16 move second child to first child ( temp uint) +0:16 'ret' ( temp uint) +0:16 AtomicCounterMax ( global uint) +0:16 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:16 Constant: +0:16 4 (const uint) +0:17 move second child to first child ( temp uint) +0:17 'ret' ( temp uint) +0:17 AtomicCounterAnd ( global uint) +0:17 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:17 Constant: +0:17 4 (const uint) +0:18 move second child to first child ( temp uint) +0:18 'ret' ( temp uint) +0:18 AtomicCounterOr ( global uint) +0:18 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:18 Constant: +0:18 4 (const uint) +0:19 move second child to first child ( temp uint) +0:19 'ret' ( temp uint) +0:19 AtomicCounterXor ( global uint) +0:19 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:19 Constant: +0:19 4 (const uint) +0:20 move second child to first child ( temp uint) +0:20 'ret' ( temp uint) +0:20 AtomicCounterExchange ( global uint) +0:20 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:20 Constant: +0:20 4 (const uint) +0:21 move second child to first child ( temp uint) +0:21 'ret' ( temp uint) +0:21 AtomicCounterCompSwap ( global uint) +0:21 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:21 Constant: +0:21 4 (const uint) +0:21 Constant: +0:21 4 (const uint) +0:23 Sequence +0:23 move second child to first child ( temp uint) +0:23 'after' ( temp uint) +0:23 AtomicCounter ( global uint) +0:23 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:24 Test condition and select ( temp void) +0:24 Condition +0:24 Compare Equal ( temp bool) +0:24 'after' ( temp uint) +0:24 'ret' ( temp uint) +0:24 true case +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'outColor' ( temp 4-component vector of float) +0:25 Constant: +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:25 0.000000 +0:27 move second child to first child ( temp 4-component vector of float) +0:27 'vsColor' ( smooth out 4-component vector of float) +0:27 'outColor' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'counter' (layout( binding=0 offset=0) uniform atomic_uint) +0:? 'vsColor' ( smooth out 4-component vector of float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index a79925d3e5..d461ad33a0 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -1864,6 +1864,22 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } + if (profile != EEsProfile && version == 450) { + commonBuiltins.append( + "uint atomicCounterAddARB(atomic_uint, uint);" + "uint atomicCounterSubtractARB(atomic_uint, uint);" + "uint atomicCounterMinARB(atomic_uint, uint);" + "uint atomicCounterMaxARB(atomic_uint, uint);" + "uint atomicCounterAndARB(atomic_uint, uint);" + "uint atomicCounterOrARB(atomic_uint, uint);" + "uint atomicCounterXorARB(atomic_uint, uint);" + "uint atomicCounterExchangeARB(atomic_uint, uint);" + "uint atomicCounterCompSwapARB(atomic_uint, uint, uint);" + + "\n"); + } + + if (profile != EEsProfile && version >= 460) { commonBuiltins.append( "uint atomicCounterAdd(atomic_uint, uint);" @@ -8261,6 +8277,19 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setFunctionExtensions("atomicCounter" , 1, &E_GL_ARB_shader_atomic_counters); } + // E_GL_ARB_shader_atomic_counter_ops + if (profile != EEsProfile && version == 450) { + symbolTable.setFunctionExtensions("atomicCounterAddARB" , 1, &E_GL_ARB_shader_atomic_counter_ops); + symbolTable.setFunctionExtensions("atomicCounterSubtractARB", 1, &E_GL_ARB_shader_atomic_counter_ops); + symbolTable.setFunctionExtensions("atomicCounterMinARB" , 1, &E_GL_ARB_shader_atomic_counter_ops); + symbolTable.setFunctionExtensions("atomicCounterMaxARB" , 1, &E_GL_ARB_shader_atomic_counter_ops); + symbolTable.setFunctionExtensions("atomicCounterAndARB" , 1, &E_GL_ARB_shader_atomic_counter_ops); + symbolTable.setFunctionExtensions("atomicCounterOrARB" , 1, &E_GL_ARB_shader_atomic_counter_ops); + symbolTable.setFunctionExtensions("atomicCounterXorARB" , 1, &E_GL_ARB_shader_atomic_counter_ops); + symbolTable.setFunctionExtensions("atomicCounterExchangeARB", 1, &E_GL_ARB_shader_atomic_counter_ops); + symbolTable.setFunctionExtensions("atomicCounterCompSwapARB", 1, &E_GL_ARB_shader_atomic_counter_ops); + } + // E_GL_ARB_derivative_control if (profile != EEsProfile && version < 450) { symbolTable.setFunctionExtensions("dFdxFine", 1, &E_GL_ARB_derivative_control); @@ -9261,6 +9290,18 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.relateToOperator("clockRealtimeEXT", EOpReadClockDeviceKHR); symbolTable.relateToOperator("clockRealtime2x32EXT", EOpReadClockDeviceKHR); + if (profile != EEsProfile && version == 450) { + symbolTable.relateToOperator("atomicCounterAddARB", EOpAtomicCounterAdd); + symbolTable.relateToOperator("atomicCounterSubtractARB", EOpAtomicCounterSubtract); + symbolTable.relateToOperator("atomicCounterMinARB", EOpAtomicCounterMin); + symbolTable.relateToOperator("atomicCounterMaxARB", EOpAtomicCounterMax); + symbolTable.relateToOperator("atomicCounterAndARB", EOpAtomicCounterAnd); + symbolTable.relateToOperator("atomicCounterOrARB", EOpAtomicCounterOr); + symbolTable.relateToOperator("atomicCounterXorARB", EOpAtomicCounterXor); + symbolTable.relateToOperator("atomicCounterExchangeARB", EOpAtomicCounterExchange); + symbolTable.relateToOperator("atomicCounterCompSwapARB", EOpAtomicCounterCompSwap); + } + 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 2698dd9177..b33e980805 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -198,6 +198,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_explicit_uniform_location] = EBhDisable; extensionBehavior[E_GL_ARB_shader_image_load_store] = EBhDisable; extensionBehavior[E_GL_ARB_shader_atomic_counters] = EBhDisable; + extensionBehavior[E_GL_ARB_shader_atomic_counter_ops] = EBhDisable; extensionBehavior[E_GL_ARB_shader_draw_parameters] = EBhDisable; extensionBehavior[E_GL_ARB_shader_group_vote] = EBhDisable; extensionBehavior[E_GL_ARB_derivative_control] = EBhDisable; diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 2e8cc29893..326a132310 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -136,6 +136,7 @@ const char* const E_GL_ARB_explicit_attrib_location = "GL_ARB_explicit_attri const char* const E_GL_ARB_explicit_uniform_location = "GL_ARB_explicit_uniform_location"; const char* const E_GL_ARB_shader_image_load_store = "GL_ARB_shader_image_load_store"; const char* const E_GL_ARB_shader_atomic_counters = "GL_ARB_shader_atomic_counters"; +const char* const E_GL_ARB_shader_atomic_counter_ops = "GL_ARB_shader_atomic_counter_ops"; const char* const E_GL_ARB_shader_draw_parameters = "GL_ARB_shader_draw_parameters"; const char* const E_GL_ARB_shader_group_vote = "GL_ARB_shader_group_vote"; const char* const E_GL_ARB_derivative_control = "GL_ARB_derivative_control"; diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index b63825b68b..6e7a659e8c 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -284,6 +284,7 @@ INSTANTIATE_TEST_SUITE_P( "textureoffset_sampler2darrayshadow.vert", "atomicAdd.comp", "GL_ARB_gpu_shader5.u2i.vert", + "atomicCounterARBOps.vert" })), FileNameAsCustomTestSuffix ); From 78de10954ea71cda96dbb96ba7f9afb2cda769e7 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Mon, 2 Aug 2021 16:20:02 +0800 Subject: [PATCH 204/365] Support the textureQueryLOD at #extension GL_ARB_texture_query_lod. Signed-off-by: ZhiqianXia --- Test/150.frag | 34 +++---- Test/baseResults/150.frag.out | 8 +- Test/baseResults/textureQueryLOD.frag.out | 115 ++++++++++++++++++++++ Test/textureQueryLOD.frag | 39 ++++++++ glslang/MachineIndependent/Initialize.cpp | 59 ++++++----- gtests/AST.FromFile.cpp | 1 + 6 files changed, 209 insertions(+), 47 deletions(-) create mode 100644 Test/baseResults/textureQueryLOD.frag.out create mode 100644 Test/textureQueryLOD.frag diff --git a/Test/150.frag b/Test/150.frag index 228e4f0d38..90b1e2740b 100644 --- a/Test/150.frag +++ b/Test/150.frag @@ -111,8 +111,8 @@ void qlodFail() vec2 pf2; vec3 pf3; - lod = textureQueryLod(samp1D, pf); // ERROR, extension GL_ARB_texture_query_lod needed - lod = textureQueryLod(samp2Ds, pf2); // ERROR, extension GL_ARB_texture_query_lod needed + lod = textureQueryLOD(samp1D, pf); // ERROR, extension GL_ARB_texture_query_lod needed + lod = textureQueryLOD(samp2Ds, pf2); // ERROR, extension GL_ARB_texture_query_lod needed } #extension GL_ARB_texture_query_lod : enable @@ -138,21 +138,21 @@ void qlodPass() vec2 pf2; vec3 pf3; - lod = textureQueryLod(samp1D, pf); - lod = textureQueryLod(isamp2D, pf2); - lod = textureQueryLod(usamp3D, pf3); - lod = textureQueryLod(sampCube, pf3); - lod = textureQueryLod(isamp1DA, pf); - lod = textureQueryLod(usamp2DA, pf2); - - lod = textureQueryLod(samp1Ds, pf); - lod = textureQueryLod(samp2Ds, pf2); - lod = textureQueryLod(sampCubes, pf3); - lod = textureQueryLod(samp1DAs, pf); - lod = textureQueryLod(samp2DAs, pf2); - - lod = textureQueryLod(sampBuf, pf); // ERROR - lod = textureQueryLod(sampRect, pf2); // ERROR + lod = textureQueryLOD(samp1D, pf); + lod = textureQueryLOD(isamp2D, pf2); + lod = textureQueryLOD(usamp3D, pf3); + lod = textureQueryLOD(sampCube, pf3); + lod = textureQueryLOD(isamp1DA, pf); + lod = textureQueryLOD(usamp2DA, pf2); + + lod = textureQueryLOD(samp1Ds, pf); + lod = textureQueryLOD(samp2Ds, pf2); + lod = textureQueryLOD(sampCubes, pf3); + lod = textureQueryLOD(samp1DAs, pf); + lod = textureQueryLOD(samp2DAs, pf2); + + lod = textureQueryLOD(sampBuf, pf); // ERROR + lod = textureQueryLOD(sampRect, pf2); // ERROR } // Test extension GL_EXT_shader_integer_mix diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out index 2192e14aab..3e666586de 100644 --- a/Test/baseResults/150.frag.out +++ b/Test/baseResults/150.frag.out @@ -10,11 +10,11 @@ ERROR: 0:53: 'double' : must be qualified as flat in ERROR: 0:57: '=' : cannot convert from ' global double' to ' global int' ERROR: 0:80: 'floatBitsToInt' : required extension not requested: GL_ARB_shader_bit_encoding ERROR: 0:100: 'packSnorm2x16' : required extension not requested: GL_ARB_shading_language_packing -ERROR: 0:114: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod -ERROR: 0:115: 'textureQueryLod' : required extension not requested: GL_ARB_texture_query_lod -ERROR: 0:154: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:114: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod +ERROR: 0:115: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod +ERROR: 0:154: 'textureQueryLOD' : no matching overloaded function found ERROR: 0:154: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' -ERROR: 0:155: 'textureQueryLod' : no matching overloaded function found +ERROR: 0:155: 'textureQueryLOD' : no matching overloaded function found ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix ERROR: 18 compilation errors. No code generated. diff --git a/Test/baseResults/textureQueryLOD.frag.out b/Test/baseResults/textureQueryLOD.frag.out new file mode 100644 index 0000000000..b565a00552 --- /dev/null +++ b/Test/baseResults/textureQueryLOD.frag.out @@ -0,0 +1,115 @@ +textureQueryLOD.frag +WARNING: 0:7: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5 + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +Requested GL_ARB_texture_query_lod +0:? Sequence +0:24 Function Definition: main( ( global void) +0:24 Function Parameters: +0:26 Sequence +0:26 switch +0:26 condition +0:26 'funct' ( uniform int) +0:26 body +0:26 Sequence +0:28 case: with expression +0:28 Constant: +0:28 0 (const int) +0:? Sequence +0:29 Sequence +0:29 move second child to first child ( temp 2-component vector of int) +0:29 'iv2' ( temp 2-component vector of int) +0:29 textureSize ( global 2-component vector of int) +0:29 'sampler' ( uniform sampler2DShadow) +0:29 Constant: +0:29 0 (const int) +0:31 Sequence +0:31 move second child to first child ( temp 2-component vector of float) +0:31 'fv2' ( temp 2-component vector of float) +0:31 textureQueryLod ( global 2-component vector of float) +0:31 'sampler' ( uniform sampler2DShadow) +0:31 Constant: +0:31 0.000000 +0:31 0.000000 +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'color' ( out 4-component vector of float) +0:33 Construct vec4 ( temp 4-component vector of float) +0:33 Convert int to float ( temp 2-component vector of float) +0:33 'iv2' ( temp 2-component vector of int) +0:33 'fv2' ( temp 2-component vector of float) +0:34 Branch: Break +0:35 default: +0:? Sequence +0:36 move second child to first child ( temp 4-component vector of float) +0:36 'color' ( out 4-component vector of float) +0:36 Constant: +0:36 1.000000 +0:36 1.000000 +0:36 1.000000 +0:36 1.000000 +0:37 Branch: Break +0:? Linker Objects +0:? 'vUV' ( smooth in 2-component vector of float) +0:? 'color' ( out 4-component vector of float) +0:? 'sampler' ( uniform sampler2DShadow) +0:? 'funct' ( uniform int) + + +Linked fragment stage: + + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +Requested GL_ARB_texture_query_lod +0:? Sequence +0:24 Function Definition: main( ( global void) +0:24 Function Parameters: +0:26 Sequence +0:26 switch +0:26 condition +0:26 'funct' ( uniform int) +0:26 body +0:26 Sequence +0:28 case: with expression +0:28 Constant: +0:28 0 (const int) +0:? Sequence +0:29 Sequence +0:29 move second child to first child ( temp 2-component vector of int) +0:29 'iv2' ( temp 2-component vector of int) +0:29 textureSize ( global 2-component vector of int) +0:29 'sampler' ( uniform sampler2DShadow) +0:29 Constant: +0:29 0 (const int) +0:31 Sequence +0:31 move second child to first child ( temp 2-component vector of float) +0:31 'fv2' ( temp 2-component vector of float) +0:31 textureQueryLod ( global 2-component vector of float) +0:31 'sampler' ( uniform sampler2DShadow) +0:31 Constant: +0:31 0.000000 +0:31 0.000000 +0:33 move second child to first child ( temp 4-component vector of float) +0:33 'color' ( out 4-component vector of float) +0:33 Construct vec4 ( temp 4-component vector of float) +0:33 Convert int to float ( temp 2-component vector of float) +0:33 'iv2' ( temp 2-component vector of int) +0:33 'fv2' ( temp 2-component vector of float) +0:34 Branch: Break +0:35 default: +0:? Sequence +0:36 move second child to first child ( temp 4-component vector of float) +0:36 'color' ( out 4-component vector of float) +0:36 Constant: +0:36 1.000000 +0:36 1.000000 +0:36 1.000000 +0:36 1.000000 +0:37 Branch: Break +0:? Linker Objects +0:? 'vUV' ( smooth in 2-component vector of float) +0:? 'color' ( out 4-component vector of float) +0:? 'sampler' ( uniform sampler2DShadow) +0:? 'funct' ( uniform int) + diff --git a/Test/textureQueryLOD.frag b/Test/textureQueryLOD.frag new file mode 100644 index 0000000000..0d0ae3c760 --- /dev/null +++ b/Test/textureQueryLOD.frag @@ -0,0 +1,39 @@ +#version 150 + +#ifdef GL_ARB_texture_query_lod +#extension GL_ARB_texture_query_lod : enable +#endif +#ifdef GL_ARB_gpu_shader5 +#extension GL_ARB_gpu_shader5 : enable +#endif + +#ifdef GL_ES +precision highp float; +#endif + +in vec2 vUV; // vert->frag +out vec4 color; // frag->fb +#define UV vUV + +#define bias 1.5 +#define TEX 128.0 +#define offset ivec2(1,1) +uniform highp sampler2DShadow sampler; +uniform int funct; + +void main (void) +{ + switch (funct) + { + case 0: + ivec2 iv2 = textureSize(sampler, 0); +#ifdef GL_ARB_texture_query_lod + vec2 fv2 = textureQueryLOD(sampler, vec2(0.0, 0.0)); +#endif + color = vec4(iv2,fv2); + break; + default: + color = vec4(1.0, 1.0, 1.0, 1.0); + break; + } +} diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index a79925d3e5..71321ce3f0 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -316,6 +316,7 @@ const CustomFunction CustomFunctions[] = { { EOpTextureQuerySize, "textureSize", nullptr }, { EOpTextureQueryLod, "textureQueryLod", nullptr }, + { EOpTextureQueryLod, "textureQueryLOD", nullptr }, // extension GL_ARB_texture_query_lod { EOpTextureQueryLevels, "textureQueryLevels", nullptr }, { EOpTextureQuerySamples, "textureSamples", nullptr }, { EOpTexture, "texture", nullptr }, @@ -6307,38 +6308,44 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int // // textureQueryLod(), fragment stage only // Also enabled with extension GL_ARB_texture_query_lod + // Extension GL_ARB_texture_query_lod says that textureQueryLOD() also exist at extension. if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect && ! sampler.isMultiSample() && ! sampler.isBuffer()) { - for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) { - if (f16TexAddr && sampler.type != EbtFloat16) - continue; - stageBuiltins[EShLangFragment].append("vec2 textureQueryLod("); - stageBuiltins[EShLangFragment].append(typeName); + + const TString funcName[2] = {"vec2 textureQueryLod(", "vec2 textureQueryLOD("}; + + for (int i = 0; i < 2; ++i){ + for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) { + if (f16TexAddr && sampler.type != EbtFloat16) + continue; + stageBuiltins[EShLangFragment].append(funcName[i]); + stageBuiltins[EShLangFragment].append(typeName); + if (dimMap[sampler.dim] == 1) + if (f16TexAddr) + stageBuiltins[EShLangFragment].append(", float16_t"); + else + stageBuiltins[EShLangFragment].append(", float"); + else { + if (f16TexAddr) + stageBuiltins[EShLangFragment].append(", f16vec"); + else + stageBuiltins[EShLangFragment].append(", vec"); + stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]); + } + stageBuiltins[EShLangFragment].append(");\n"); + } + + stageBuiltins[EShLangCompute].append(funcName[i]); + stageBuiltins[EShLangCompute].append(typeName); if (dimMap[sampler.dim] == 1) - if (f16TexAddr) - stageBuiltins[EShLangFragment].append(", float16_t"); - else - stageBuiltins[EShLangFragment].append(", float"); + stageBuiltins[EShLangCompute].append(", float"); else { - if (f16TexAddr) - stageBuiltins[EShLangFragment].append(", f16vec"); - else - stageBuiltins[EShLangFragment].append(", vec"); - stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]); + stageBuiltins[EShLangCompute].append(", vec"); + stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]); } - stageBuiltins[EShLangFragment].append(");\n"); - } - - stageBuiltins[EShLangCompute].append("vec2 textureQueryLod("); - stageBuiltins[EShLangCompute].append(typeName); - if (dimMap[sampler.dim] == 1) - stageBuiltins[EShLangCompute].append(", float"); - else { - stageBuiltins[EShLangCompute].append(", vec"); - stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]); + stageBuiltins[EShLangCompute].append(");\n"); } - stageBuiltins[EShLangCompute].append(");\n"); } // @@ -8118,7 +8125,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } if (profile != EEsProfile && version < 400) { - symbolTable.setFunctionExtensions("textureQueryLod", 1, &E_GL_ARB_texture_query_lod); + symbolTable.setFunctionExtensions("textureQueryLOD", 1, &E_GL_ARB_texture_query_lod); } if (profile != EEsProfile && version >= 460) { diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index b63825b68b..7737627f08 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -284,6 +284,7 @@ INSTANTIATE_TEST_SUITE_P( "textureoffset_sampler2darrayshadow.vert", "atomicAdd.comp", "GL_ARB_gpu_shader5.u2i.vert", + "textureQueryLOD.frag", })), FileNameAsCustomTestSuffix ); From 48937f931a85578fd7511c394d9715fa62f95399 Mon Sep 17 00:00:00 2001 From: Alastair Cota Date: Sun, 8 Aug 2021 17:00:26 +0100 Subject: [PATCH 205/365] Update CMakeLists.txt Checked REGEX REPLACE for consistency failure --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 2d29062278..c318eef9aa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -198,7 +198,7 @@ elseif(MSVC) if(ENABLE_EXCEPTIONS) add_compile_options(/EHsc) # Enable Exceptions else() - string(REGEX REPLACE /EHsc "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS}) # Try to remove default /EHsc cxx_flag + string(REGEX REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") # Try to remove default /EHsc cxx_flag add_compile_options(/D_HAS_EXCEPTIONS=0) endif() endif() From 9f18258e41f119b3b7df80f5313c1e1fa248546f Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 9 Aug 2021 17:52:40 -0600 Subject: [PATCH 206/365] Fix seperate stores to swizzled lvalue. Seen with += and ++ ops on swizzled lvalues. Was using stale access chain. Fixes 2725. --- SPIRV/SpvBuilder.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 6751dec215..e83306ebcb 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -2812,6 +2812,7 @@ void Builder::accessChainStore(Id rvalue, Decoration nonUniform, spv::MemoryAcce accessChain.component == NoResult) { for (unsigned int i = 0; i < accessChain.swizzle.size(); ++i) { accessChain.indexChain.push_back(makeUintConstant(accessChain.swizzle[i])); + accessChain.instr = NoResult; Id base = collapseAccessChain(); addDecoration(base, nonUniform); From fc60f77aa255d03e0bd760066599ad067cda2175 Mon Sep 17 00:00:00 2001 From: alelenv Date: Tue, 10 Aug 2021 10:40:28 -0700 Subject: [PATCH 207/365] Add support for GL_NV_ray_tracing_motion_blur. --- SPIRV/GLSL.ext.NV.h | 3 + SPIRV/GlslangToSpv.cpp | 16 +++- SPIRV/doc.cpp | 17 ++++ SPIRV/spirv.hpp | 6 ++ .../spv.AnyHitShaderMotion.rahit.out | 33 ++++++++ .../spv.ClosestHitShaderMotion.rchit.out | 59 ++++++++++++++ .../spv.IntersectShaderMotion.rint.out | 33 ++++++++ .../spv.MissShaderMotion.rmiss.out | 59 ++++++++++++++ .../spv.RayGenShaderMotion.rgen.out | 81 +++++++++++++++++++ Test/spv.AnyHitShaderMotion.rahit | 6 ++ Test/spv.ClosestHitShaderMotion.rchit | 10 +++ Test/spv.IntersectShaderMotion.rint | 6 ++ Test/spv.MissShaderMotion.rmiss | 10 +++ Test/spv.RayGenShaderMotion.rgen | 13 +++ glslang/Include/BaseTypes.h | 2 + glslang/Include/intermediate.h | 1 + glslang/MachineIndependent/Initialize.cpp | 12 ++- glslang/MachineIndependent/ParseHelper.cpp | 4 + glslang/MachineIndependent/Versions.cpp | 6 +- glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/intermOut.cpp | 1 + gtests/Spv.FromFile.cpp | 19 +++++ 22 files changed, 394 insertions(+), 4 deletions(-) create mode 100644 Test/baseResults/spv.AnyHitShaderMotion.rahit.out create mode 100644 Test/baseResults/spv.ClosestHitShaderMotion.rchit.out create mode 100644 Test/baseResults/spv.IntersectShaderMotion.rint.out create mode 100644 Test/baseResults/spv.MissShaderMotion.rmiss.out create mode 100644 Test/baseResults/spv.RayGenShaderMotion.rgen.out create mode 100644 Test/spv.AnyHitShaderMotion.rahit create mode 100644 Test/spv.ClosestHitShaderMotion.rchit create mode 100644 Test/spv.IntersectShaderMotion.rint create mode 100644 Test/spv.MissShaderMotion.rmiss create mode 100644 Test/spv.RayGenShaderMotion.rgen diff --git a/SPIRV/GLSL.ext.NV.h b/SPIRV/GLSL.ext.NV.h index 50146da104..93c98bf626 100644 --- a/SPIRV/GLSL.ext.NV.h +++ b/SPIRV/GLSL.ext.NV.h @@ -69,6 +69,9 @@ const char* const E_SPV_NV_mesh_shader = "SPV_NV_mesh_shader"; //SPV_NV_raytracing const char* const E_SPV_NV_ray_tracing = "SPV_NV_ray_tracing"; +//SPV_NV_ray_tracing_motion_blur +const char* const E_SPV_NV_ray_tracing_motion_blur = "SPV_NV_ray_tracing_motion_blur"; + //SPV_NV_shading_rate const char* const E_SPV_NV_shading_rate = "SPV_NV_shading_rate"; diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index c8a73a6b28..c323bcdb09 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1033,6 +1033,10 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI return spv::BuiltInIncomingRayFlagsKHR; case glslang::EbvGeometryIndex: return spv::BuiltInRayGeometryIndexKHR; + case glslang::EbvCurrentRayTimeNV: + builder.addExtension(spv::E_SPV_NV_ray_tracing_motion_blur); + builder.addCapability(spv::CapabilityRayTracingMotionBlurNV); + return spv::BuiltInCurrentRayTimeNV; // barycentrics case glslang::EbvBaryCoordNV: @@ -3018,6 +3022,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt case glslang::EOpIgnoreIntersectionNV: case glslang::EOpTerminateRayNV: case glslang::EOpTraceNV: + case glslang::EOpTraceRayMotionNV: case glslang::EOpTraceKHR: case glslang::EOpExecuteCallableNV: case glslang::EOpExecuteCallableKHR: @@ -3317,9 +3322,11 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt bool cond = glslangOperands[arg]->getAsConstantUnion()->getConstArray()[0].getBConst(); operands.push_back(builder.makeIntConstant(cond ? 1 : 0)); } else if ((arg == 10 && glslangOp == glslang::EOpTraceKHR) || + (arg == 11 && glslangOp == glslang::EOpTraceRayMotionNV) || (arg == 1 && glslangOp == glslang::EOpExecuteCallableKHR)) { - const int opdNum = glslangOp == glslang::EOpTraceKHR ? 10 : 1; - const int set = glslangOp == glslang::EOpTraceKHR ? 0 : 1; + const int opdNum = glslangOp == glslang::EOpTraceKHR ? 10 : (glslangOp == glslang::EOpTraceRayMotionNV ? 11 : 1); + const int set = glslangOp == glslang::EOpExecuteCallableKHR ? 1 : 0; + const int location = glslangOperands[opdNum]->getAsConstantUnion()->getConstArray()[0].getUConst(); auto itNode = locationToSymbol[set].find(location); visitSymbol(itNode->second); @@ -8322,6 +8329,11 @@ spv::Id TGlslangToSpvTraverser::createMiscOperation(glslang::TOperator op, spv:: case glslang::EOpTraceNV: builder.createNoResultOp(spv::OpTraceNV, operands); return 0; + case glslang::EOpTraceRayMotionNV: + builder.addExtension(spv::E_SPV_NV_ray_tracing_motion_blur); + builder.addCapability(spv::CapabilityRayTracingMotionBlurNV); + builder.createNoResultOp(spv::OpTraceRayMotionNV, operands); + return 0; case glslang::EOpTraceKHR: builder.createNoResultOp(spv::OpTraceRayKHR, operands); return 0; diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 31b20a1f24..dbdf7077a6 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -426,6 +426,7 @@ const char* BuiltInString(int builtIn) case BuiltInSMCountNV: return "SMCountNV"; case BuiltInWarpIDNV: return "WarpIDNV"; case BuiltInSMIDNV: return "SMIDNV"; + case BuiltInCurrentRayTimeNV: return "CurrentRayTimeNV"; default: return "Bad"; } @@ -916,6 +917,7 @@ const char* CapabilityString(int info) case CapabilityPerViewAttributesNV: return "PerViewAttributesNV"; case CapabilityGroupNonUniformPartitionedNV: return "GroupNonUniformPartitionedNV"; case CapabilityRayTracingNV: return "RayTracingNV"; + case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; case CapabilityRayTracingKHR: return "RayTracingKHR"; case CapabilityRayQueryKHR: return "RayQueryKHR"; case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; @@ -1382,6 +1384,7 @@ const char* OpcodeString(int op) case OpTerminateRayNV: return "OpTerminateRayNV"; case OpTerminateRayKHR: return "OpTerminateRayKHR"; case OpTraceNV: return "OpTraceNV"; + case OpTraceRayMotionNV: return "OpTraceRayMotionNV"; case OpTraceRayKHR: return "OpTraceRayKHR"; case OpTypeAccelerationStructureKHR: return "OpTypeAccelerationStructureKHR"; case OpExecuteCallableNV: return "OpExecuteCallableNV"; @@ -2812,6 +2815,20 @@ void Parameterize() InstructionDesc[OpTraceNV].operands.push(OperandId, "'Payload'"); InstructionDesc[OpTraceNV].setResultAndType(false, false); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Acceleration Structure'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Flags'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Cull Mask'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Offset'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'SBT Record Stride'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Miss Index'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Origin'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMin'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Ray Direction'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'TMax'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Time'"); + InstructionDesc[OpTraceRayMotionNV].operands.push(OperandId, "'Payload'"); + InstructionDesc[OpTraceRayMotionNV].setResultAndType(false, false); + InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Acceleration Structure'"); InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Ray Flags'"); InstructionDesc[OpTraceRayKHR].operands.push(OperandId, "'Cull Mask'"); diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 317db81f17..e0fe24980d 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -652,6 +652,7 @@ enum BuiltIn { BuiltInHitTNV = 5332, BuiltInHitKindKHR = 5333, BuiltInHitKindNV = 5333, + BuiltInCurrentRayTimeNV = 5334, BuiltInIncomingRayFlagsKHR = 5351, BuiltInIncomingRayFlagsNV = 5351, BuiltInRayGeometryIndexKHR = 5352, @@ -988,6 +989,7 @@ enum Capability { CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, CapabilityRayTracingNV = 5340, + CapabilityRayTracingMotionBlurNV = 5341, CapabilityVulkanMemoryModel = 5345, CapabilityVulkanMemoryModelKHR = 5345, CapabilityVulkanMemoryModelDeviceScope = 5346, @@ -1503,6 +1505,8 @@ enum Op { OpIgnoreIntersectionNV = 5335, OpTerminateRayNV = 5336, OpTraceNV = 5337, + OpTraceMotionNV = 5338, + OpTraceRayMotionNV = 5339, OpTypeAccelerationStructureKHR = 5341, OpTypeAccelerationStructureNV = 5341, OpExecuteCallableNV = 5344, @@ -2090,6 +2094,8 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; case OpTraceNV: *hasResult = false; *hasResultType = false; break; + case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; + case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; diff --git a/Test/baseResults/spv.AnyHitShaderMotion.rahit.out b/Test/baseResults/spv.AnyHitShaderMotion.rahit.out new file mode 100644 index 0000000000..f9e1e1b959 --- /dev/null +++ b/Test/baseResults/spv.AnyHitShaderMotion.rahit.out @@ -0,0 +1,33 @@ +spv.AnyHitShaderMotion.rahit +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 14 + + Capability RayTracingKHR + Capability RayTracingMotionBlurNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_ray_tracing_motion_blur" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint AnyHitKHR 4 "main" 10 + Source GLSL 460 + SourceExtension "GL_NV_ray_tracing_motion_blur" + Name 4 "main" + Name 8 "time" + Name 10 "gl_CurrentRayTimeNV" + Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: TypePointer Input 6(float) +10(gl_CurrentRayTimeNV): 9(ptr) Variable Input + 12: 6(float) Constant 1056964608 + 4(main): 2 Function None 3 + 5: Label + 8(time): 7(ptr) Variable Function + 11: 6(float) Load 10(gl_CurrentRayTimeNV) + 13: 6(float) FAdd 11 12 + Store 8(time) 13 + Return + FunctionEnd diff --git a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out new file mode 100644 index 0000000000..e89abb45f7 --- /dev/null +++ b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out @@ -0,0 +1,59 @@ +spv.ClosestHitShaderMotion.rchit +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 33 + + Capability RayTracingKHR + Capability RayTracingMotionBlurNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_ray_tracing_motion_blur" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint ClosestHitKHR 4 "main" 10 16 32 + Source GLSL 460 + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_NV_ray_tracing_motion_blur" + Name 4 "main" + Name 8 "time" + Name 10 "gl_CurrentRayTimeNV" + Name 16 "accEXT" + Name 32 "incomingPayloadEXT" + Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV + Decorate 16(accEXT) DescriptorSet 0 + Decorate 16(accEXT) Binding 0 + Decorate 32(incomingPayloadEXT) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: TypePointer Input 6(float) +10(gl_CurrentRayTimeNV): 9(ptr) Variable Input + 12: 6(float) Constant 1056964608 + 14: TypeAccelerationStructureKHR + 15: TypePointer UniformConstant 14 + 16(accEXT): 15(ptr) Variable UniformConstant + 18: TypeInt 32 0 + 19: 18(int) Constant 0 + 20: 18(int) Constant 1 + 21: 18(int) Constant 2 + 22: 18(int) Constant 3 + 23: TypeVector 6(float) 3 + 24: 23(fvec3) ConstantComposite 12 12 12 + 25: 6(float) Constant 1065353216 + 26: 23(fvec3) ConstantComposite 25 25 25 + 27: 6(float) Constant 1061158912 + 28: TypeInt 32 1 + 29: 28(int) Constant 0 + 30: TypeVector 6(float) 4 + 31: TypePointer IncomingRayPayloadKHR 30(fvec4) +32(incomingPayloadEXT): 31(ptr) Variable IncomingRayPayloadKHR + 4(main): 2 Function None 3 + 5: Label + 8(time): 7(ptr) Variable Function + 11: 6(float) Load 10(gl_CurrentRayTimeNV) + 13: 6(float) FAdd 11 12 + Store 8(time) 13 + 17: 14 Load 16(accEXT) + TraceRayMotionNV 17 19 20 21 22 19 24 12 26 27 25 32(incomingPayloadEXT) + Return + FunctionEnd diff --git a/Test/baseResults/spv.IntersectShaderMotion.rint.out b/Test/baseResults/spv.IntersectShaderMotion.rint.out new file mode 100644 index 0000000000..f77c9a81a1 --- /dev/null +++ b/Test/baseResults/spv.IntersectShaderMotion.rint.out @@ -0,0 +1,33 @@ +spv.IntersectShaderMotion.rint +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 14 + + Capability RayTracingKHR + Capability RayTracingMotionBlurNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_ray_tracing_motion_blur" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint IntersectionKHR 4 "main" 10 + Source GLSL 460 + SourceExtension "GL_NV_ray_tracing_motion_blur" + Name 4 "main" + Name 8 "time" + Name 10 "gl_CurrentRayTimeNV" + Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: TypePointer Input 6(float) +10(gl_CurrentRayTimeNV): 9(ptr) Variable Input + 12: 6(float) Constant 1056964608 + 4(main): 2 Function None 3 + 5: Label + 8(time): 7(ptr) Variable Function + 11: 6(float) Load 10(gl_CurrentRayTimeNV) + 13: 6(float) FAdd 11 12 + Store 8(time) 13 + Return + FunctionEnd diff --git a/Test/baseResults/spv.MissShaderMotion.rmiss.out b/Test/baseResults/spv.MissShaderMotion.rmiss.out new file mode 100644 index 0000000000..2f1833812f --- /dev/null +++ b/Test/baseResults/spv.MissShaderMotion.rmiss.out @@ -0,0 +1,59 @@ +spv.MissShaderMotion.rmiss +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 33 + + Capability RayTracingKHR + Capability RayTracingMotionBlurNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_ray_tracing_motion_blur" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint MissKHR 4 "main" 10 16 32 + Source GLSL 460 + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_NV_ray_tracing_motion_blur" + Name 4 "main" + Name 8 "time" + Name 10 "gl_CurrentRayTimeNV" + Name 16 "accEXT" + Name 32 "localPayloadEXT" + Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV + Decorate 16(accEXT) DescriptorSet 0 + Decorate 16(accEXT) Binding 0 + Decorate 32(localPayloadEXT) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 9: TypePointer Input 6(float) +10(gl_CurrentRayTimeNV): 9(ptr) Variable Input + 12: 6(float) Constant 1056964608 + 14: TypeAccelerationStructureKHR + 15: TypePointer UniformConstant 14 + 16(accEXT): 15(ptr) Variable UniformConstant + 18: TypeInt 32 0 + 19: 18(int) Constant 0 + 20: 18(int) Constant 1 + 21: 18(int) Constant 2 + 22: 18(int) Constant 3 + 23: TypeVector 6(float) 3 + 24: 23(fvec3) ConstantComposite 12 12 12 + 25: 6(float) Constant 1065353216 + 26: 23(fvec3) ConstantComposite 25 25 25 + 27: 6(float) Constant 1061158912 + 28: TypeInt 32 1 + 29: 28(int) Constant 0 + 30: TypeVector 6(float) 4 + 31: TypePointer RayPayloadKHR 30(fvec4) +32(localPayloadEXT): 31(ptr) Variable RayPayloadKHR + 4(main): 2 Function None 3 + 5: Label + 8(time): 7(ptr) Variable Function + 11: 6(float) Load 10(gl_CurrentRayTimeNV) + 13: 6(float) FAdd 11 12 + Store 8(time) 13 + 17: 14 Load 16(accEXT) + TraceRayMotionNV 17 19 20 21 22 19 24 12 26 27 25 32(localPayloadEXT) + Return + FunctionEnd diff --git a/Test/baseResults/spv.RayGenShaderMotion.rgen.out b/Test/baseResults/spv.RayGenShaderMotion.rgen.out new file mode 100644 index 0000000000..f9b9fa5f26 --- /dev/null +++ b/Test/baseResults/spv.RayGenShaderMotion.rgen.out @@ -0,0 +1,81 @@ +spv.RayGenShaderMotion.rgen +// Module Version 10400 +// Generated by (magic number): 8000a +// Id's are bound by 47 + + Capability RayTracingKHR + Capability RayTracingMotionBlurNV + Extension "SPV_KHR_ray_tracing" + Extension "SPV_NV_ray_tracing_motion_blur" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint RayGenerationKHR 4 "main" 11 21 29 46 + Source GLSL 460 + SourceExtension "GL_EXT_ray_tracing" + SourceExtension "GL_NV_ray_tracing_motion_blur" + Name 4 "main" + Name 8 "lx" + Name 11 "gl_LaunchIDEXT" + Name 16 "ly" + Name 20 "sx" + Name 21 "gl_LaunchSizeEXT" + Name 24 "sy" + Name 29 "accEXT" + Name 46 "payloadEXT" + Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR + Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR + Decorate 29(accEXT) DescriptorSet 0 + Decorate 29(accEXT) Binding 0 + Decorate 46(payloadEXT) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: TypePointer Function 6(int) + 9: TypeVector 6(int) 3 + 10: TypePointer Input 9(ivec3) +11(gl_LaunchIDEXT): 10(ptr) Variable Input + 12: 6(int) Constant 0 + 13: TypePointer Input 6(int) + 17: 6(int) Constant 1 +21(gl_LaunchSizeEXT): 10(ptr) Variable Input + 27: TypeAccelerationStructureKHR + 28: TypePointer UniformConstant 27 + 29(accEXT): 28(ptr) Variable UniformConstant + 35: TypeFloat 32 + 36: TypeVector 35(float) 3 + 37: 35(float) Constant 1056964608 + 38: 36(fvec3) ConstantComposite 37 37 37 + 39: 35(float) Constant 1065353216 + 40: 36(fvec3) ConstantComposite 39 39 39 + 41: 35(float) Constant 1061158912 + 42: TypeInt 32 1 + 43: 42(int) Constant 0 + 44: TypeVector 35(float) 4 + 45: TypePointer RayPayloadKHR 44(fvec4) + 46(payloadEXT): 45(ptr) Variable RayPayloadKHR + 4(main): 2 Function None 3 + 5: Label + 8(lx): 7(ptr) Variable Function + 16(ly): 7(ptr) Variable Function + 20(sx): 7(ptr) Variable Function + 24(sy): 7(ptr) Variable Function + 14: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 12 + 15: 6(int) Load 14 + Store 8(lx) 15 + 18: 13(ptr) AccessChain 11(gl_LaunchIDEXT) 17 + 19: 6(int) Load 18 + Store 16(ly) 19 + 22: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 12 + 23: 6(int) Load 22 + Store 20(sx) 23 + 25: 13(ptr) AccessChain 21(gl_LaunchSizeEXT) 17 + 26: 6(int) Load 25 + Store 24(sy) 26 + 30: 27 Load 29(accEXT) + 31: 6(int) Load 8(lx) + 32: 6(int) Load 16(ly) + 33: 6(int) Load 20(sx) + 34: 6(int) Load 24(sy) + TraceRayMotionNV 30 31 32 33 34 12 38 37 40 41 37 46(payloadEXT) + Return + FunctionEnd diff --git a/Test/spv.AnyHitShaderMotion.rahit b/Test/spv.AnyHitShaderMotion.rahit new file mode 100644 index 0000000000..6972577a49 --- /dev/null +++ b/Test/spv.AnyHitShaderMotion.rahit @@ -0,0 +1,6 @@ +#version 460 +#extension GL_NV_ray_tracing_motion_blur : enable +void main() +{ + float time = gl_CurrentRayTimeNV + 0.5f; +} diff --git a/Test/spv.ClosestHitShaderMotion.rchit b/Test/spv.ClosestHitShaderMotion.rchit new file mode 100644 index 0000000000..42a18382e5 --- /dev/null +++ b/Test/spv.ClosestHitShaderMotion.rchit @@ -0,0 +1,10 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_NV_ray_tracing_motion_blur : enable +layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; +layout(location = 0) rayPayloadInEXT vec4 incomingPayloadEXT; +void main() +{ + float time = gl_CurrentRayTimeNV + 0.5f; + traceRayMotionNV(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1.0, 0); +} diff --git a/Test/spv.IntersectShaderMotion.rint b/Test/spv.IntersectShaderMotion.rint new file mode 100644 index 0000000000..6972577a49 --- /dev/null +++ b/Test/spv.IntersectShaderMotion.rint @@ -0,0 +1,6 @@ +#version 460 +#extension GL_NV_ray_tracing_motion_blur : enable +void main() +{ + float time = gl_CurrentRayTimeNV + 0.5f; +} diff --git a/Test/spv.MissShaderMotion.rmiss b/Test/spv.MissShaderMotion.rmiss new file mode 100644 index 0000000000..3a3dcb1635 --- /dev/null +++ b/Test/spv.MissShaderMotion.rmiss @@ -0,0 +1,10 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_NV_ray_tracing_motion_blur : enable +layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; +layout(location = 0) rayPayloadEXT vec4 localPayloadEXT; +void main() +{ + float time = gl_CurrentRayTimeNV + 0.5f; + traceRayMotionNV(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1.0f, 0); +} diff --git a/Test/spv.RayGenShaderMotion.rgen b/Test/spv.RayGenShaderMotion.rgen new file mode 100644 index 0000000000..c38fffe5c6 --- /dev/null +++ b/Test/spv.RayGenShaderMotion.rgen @@ -0,0 +1,13 @@ +#version 460 +#extension GL_EXT_ray_tracing : enable +#extension GL_NV_ray_tracing_motion_blur : enable +layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; +layout(location = 0) rayPayloadEXT vec4 payloadEXT; +void main() +{ + uint lx = gl_LaunchIDEXT.x; + uint ly = gl_LaunchIDEXT.y; + uint sx = gl_LaunchSizeEXT.x; + uint sy = gl_LaunchSizeEXT.y; + traceRayMotionNV(accEXT, lx, ly, sx, sy, 0u, vec3(0.5), 0.5f, vec3(1.0), 0.75f, 0.5, 0); +} diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index 1d9da12d6f..c8203c2232 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -270,6 +270,7 @@ enum TBuiltInVariable { EbvWorldToObject, EbvWorldToObject3x4, EbvIncomingRayFlags, + EbvCurrentRayTimeNV, // barycentrics EbvBaryCoordNV, EbvBaryCoordNoPerspNV, @@ -475,6 +476,7 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvIncomingRayFlags: return "IncomingRayFlagsNV"; case EbvObjectToWorld: return "ObjectToWorldNV"; case EbvWorldToObject: return "WorldToObjectNV"; + case EbvCurrentRayTimeNV: return "CurrentRayTimeNV"; case EbvBaryCoordNV: return "BaryCoordNV"; case EbvBaryCoordNoPerspNV: return "BaryCoordNoPerspNV"; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 172c09cf35..1e6ab4aa7a 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -926,6 +926,7 @@ enum TOperator { EOpMul32x16, EOpTraceNV, + EOpTraceRayMotionNV, EOpTraceKHR, EOpReportIntersection, EOpIgnoreIntersectionNV, diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index a79925d3e5..08d0dc7c2d 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -4661,7 +4661,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } - // Builtins for GL_NV_ray_tracing/GL_EXT_ray_tracing/GL_EXT_ray_query + // Builtins for GL_NV_ray_tracing/GL_NV_ray_tracing_motion_blur/GL_EXT_ray_tracing/GL_EXT_ray_query if (profile != EEsProfile && version >= 460) { commonBuiltins.append("void rayQueryInitializeEXT(rayQueryEXT, accelerationStructureEXT, uint, uint, vec3, float, vec3, float);" "void rayQueryTerminateEXT(rayQueryEXT);" @@ -4690,6 +4690,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangRayGen].append( "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" + "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);" "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" "void executeCallableNV(uint, int);" "void executeCallableEXT(uint, int);" @@ -4704,12 +4705,14 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); stageBuiltins[EShLangClosestHit].append( "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" + "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);" "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" "void executeCallableNV(uint, int);" "void executeCallableEXT(uint, int);" "\n"); stageBuiltins[EShLangMiss].append( "void traceNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" + "void traceRayMotionNV(accelerationStructureNV,uint,uint,uint,uint,uint,vec3,float,vec3,float,float,int);" "void traceRayEXT(accelerationStructureEXT,uint,uint,uint,uint,uint,vec3,float,vec3,float,int);" "void executeCallableNV(uint, int);" "void executeCallableEXT(uint, int);" @@ -5918,6 +5921,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in mat3x4 gl_WorldToObject3x4EXT;" "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" + "in float gl_CurrentRayTimeNV;" "\n"; const char *hitDecls = "in uvec3 gl_LaunchIDNV;" @@ -5953,6 +5957,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in mat3x4 gl_WorldToObject3x4EXT;" "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" + "in float gl_CurrentRayTimeNV;" "\n"; const char *missDecls = "in uvec3 gl_LaunchIDNV;" @@ -5971,6 +5976,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in float gl_RayTmaxEXT;" "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" + "in float gl_CurrentRayTimeNV;" "\n"; const char *callableDecls = @@ -8789,11 +8795,13 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_WorldToObject3x4EXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setVariableExtensions("gl_IncomingRayFlagsNV", 1, &E_GL_NV_ray_tracing); symbolTable.setVariableExtensions("gl_IncomingRayFlagsEXT", 1, &E_GL_EXT_ray_tracing); + symbolTable.setVariableExtensions("gl_CurrentRayTimeNV", 1, &E_GL_NV_ray_tracing_motion_blur); symbolTable.setVariableExtensions("gl_DeviceIndex", 1, &E_GL_EXT_device_group); symbolTable.setFunctionExtensions("traceNV", 1, &E_GL_NV_ray_tracing); + symbolTable.setFunctionExtensions("traceRayMotionNV", 1, &E_GL_NV_ray_tracing_motion_blur); symbolTable.setFunctionExtensions("traceRayEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setFunctionExtensions("reportIntersectionNV", 1, &E_GL_NV_ray_tracing); symbolTable.setFunctionExtensions("reportIntersectionEXT", 1, &E_GL_EXT_ray_tracing); @@ -8837,6 +8845,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_IncomingRayFlagsNV", EbvIncomingRayFlags, symbolTable); BuiltInVariable("gl_IncomingRayFlagsEXT", EbvIncomingRayFlags, symbolTable); BuiltInVariable("gl_DeviceIndex", EbvDeviceIndex, symbolTable); + BuiltInVariable("gl_CurrentRayTimeNV", EbvCurrentRayTimeNV, symbolTable); // GL_ARB_shader_ballot symbolTable.setVariableExtensions("gl_SubGroupSizeARB", 1, &E_GL_ARB_shader_ballot); @@ -9668,6 +9677,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion case EShLangMiss: if (profile != EEsProfile && version >= 460) { symbolTable.relateToOperator("traceNV", EOpTraceNV); + symbolTable.relateToOperator("traceRayMotionNV", EOpTraceRayMotionNV); symbolTable.relateToOperator("traceRayEXT", EOpTraceKHR); symbolTable.relateToOperator("executeCallableNV", EOpExecuteCallableNV); symbolTable.relateToOperator("executeCallableEXT", EOpExecuteCallableKHR); diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 35a53e425d..b957bb87ca 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2308,6 +2308,10 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan if (!(*argp)[10]->getAsConstantUnion()) error(loc, "argument must be compile-time constant", "payload number", "a"); break; + case EOpTraceRayMotionNV: + if (!(*argp)[11]->getAsConstantUnion()) + error(loc, "argument must be compile-time constant", "payload number", "a"); + break; case EOpTraceKHR: if (!(*argp)[10]->getAsConstantUnion()) error(loc, "argument must be compile-time constant", "payload number", "a"); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 2698dd9177..832fb7a593 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -165,7 +165,9 @@ void TParseVersions::initializeExtensionBehavior() EShTargetLanguageVersion minSpvVersion; } extensionData; - const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4} }; + const extensionData exts[] = { {E_GL_EXT_ray_tracing, EShTargetSpv_1_4}, + {E_GL_NV_ray_tracing_motion_blur, EShTargetSpv_1_4} + }; for (size_t ii = 0; ii < sizeof(exts) / sizeof(exts[0]); ii++) { // Add only extensions which require > spv1.0 to save space in map @@ -281,6 +283,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_NV_shader_subgroup_partitioned] = EBhDisable; extensionBehavior[E_GL_NV_shading_rate_image] = EBhDisable; extensionBehavior[E_GL_NV_ray_tracing] = EBhDisable; + extensionBehavior[E_GL_NV_ray_tracing_motion_blur] = EBhDisable; extensionBehavior[E_GL_NV_fragment_shader_barycentric] = EBhDisable; extensionBehavior[E_GL_NV_compute_shader_derivatives] = EBhDisable; extensionBehavior[E_GL_NV_shader_texture_footprint] = EBhDisable; @@ -518,6 +521,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_NV_shader_subgroup_partitioned 1\n" "#define GL_NV_shading_rate_image 1\n" "#define GL_NV_ray_tracing 1\n" + "#define GL_NV_ray_tracing_motion_blur 1\n" "#define GL_NV_fragment_shader_barycentric 1\n" "#define GL_NV_compute_shader_derivatives 1\n" "#define GL_NV_shader_texture_footprint 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 2e8cc29893..878c6f8f3f 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -247,6 +247,7 @@ const char* const E_GL_NV_shader_noperspective_interpolation = "GL_NV_shader_ const char* const E_GL_NV_shader_subgroup_partitioned = "GL_NV_shader_subgroup_partitioned"; const char* const E_GL_NV_shading_rate_image = "GL_NV_shading_rate_image"; const char* const E_GL_NV_ray_tracing = "GL_NV_ray_tracing"; +const char* const E_GL_NV_ray_tracing_motion_blur = "GL_NV_ray_tracing_motion_blur"; const char* const E_GL_NV_fragment_shader_barycentric = "GL_NV_fragment_shader_barycentric"; const char* const E_GL_NV_compute_shader_derivatives = "GL_NV_compute_shader_derivatives"; const char* const E_GL_NV_shader_texture_footprint = "GL_NV_shader_texture_footprint"; diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index 105adc480e..a0fade16c0 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -1089,6 +1089,7 @@ bool TOutputTraverser::visitAggregate(TVisit /* visit */, TIntermAggregate* node case EOpSubpassLoadMS: out.debug << "subpassLoadMS"; break; case EOpTraceNV: out.debug << "traceNV"; break; + case EOpTraceRayMotionNV: out.debug << "traceRayMotionNV"; break; case EOpTraceKHR: out.debug << "traceRayKHR"; break; case EOpReportIntersection: out.debug << "reportIntersectionNV"; break; case EOpIgnoreIntersectionNV: out.debug << "ignoreIntersectionNV"; break; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index a7e1a3efad..29740f31b9 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -77,6 +77,7 @@ using HlslIoMap = GlslangTest<::testing::TestWithParam>; using GlslIoMap = GlslangTest<::testing::TestWithParam>; using CompileVulkanToSpirvTestAMD = GlslangTest<::testing::TestWithParam>; using CompileVulkanToSpirvTestNV = GlslangTest<::testing::TestWithParam>; +using CompileVulkanToSpirv14TestNV = GlslangTest<::testing::TestWithParam>; using CompileUpgradeTextureToSampledTextureAndDropSamplersTest = GlslangTest<::testing::TestWithParam>; // Compiling GLSL to SPIR-V under Vulkan semantics. Expected to successfully @@ -204,6 +205,13 @@ TEST_P(CompileVulkanToSpirvTestNV, FromFile) Target::Spv); } +TEST_P(CompileVulkanToSpirv14TestNV, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_1, glslang::EShTargetSpv_1_4, + Target::Spv); +} + TEST_P(CompileUpgradeTextureToSampledTextureAndDropSamplersTest, FromFile) { loadCompileUpgradeTextureToSampledTextureAndDropSamplersAndCheck(GlobalTestSettings.testRoot, @@ -765,6 +773,17 @@ INSTANTIATE_TEST_SUITE_P( FileNameAsCustomTestSuffix ); +INSTANTIATE_TEST_SUITE_P( + Glsl, CompileVulkanToSpirv14TestNV, + ::testing::ValuesIn(std::vector({ + "spv.RayGenShaderMotion.rgen", + "spv.IntersectShaderMotion.rint", + "spv.AnyHitShaderMotion.rahit", + "spv.ClosestHitShaderMotion.rchit", + "spv.MissShaderMotion.rmiss", +})), +FileNameAsCustomTestSuffix +); INSTANTIATE_TEST_SUITE_P( Glsl, CompileUpgradeTextureToSampledTextureAndDropSamplersTest, ::testing::ValuesIn(std::vector({ From 35af9ea58e5dee716a3ec1a6b8cbaa6bb324ceec Mon Sep 17 00:00:00 2001 From: alelenv Date: Thu, 12 Aug 2021 09:57:22 -0700 Subject: [PATCH 208/365] Update known_good for SPV_NV_ray_tracing_motion_blur. --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index c6fd4ff4ee..d40b91c5dc 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "5dd2f76918bb2d0d67628e338f60f724f3e02e13" + "commit" : "54524ffa6a1b5ab173ebff89fb31e4a21d365477" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "07f259e68af3a540038fa32df522554e74f53ed5" + "commit" : "4cce109bcdb7fbb028d21230f07ea292a684bea1" } ] } From e49ae91c9d56d11631eb7048272bd660071e392e Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 25 Aug 2021 13:32:27 -0600 Subject: [PATCH 209/365] Update known goods and CHANGES for 11.6.0 --- CHANGES.md | 11 +++++++++++ known_good.json | 4 ++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 27b002e842..ad4fa40085 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,17 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.6.0 2021-08-25 + +### Other changes +* Atomic memory function only for shader storage block member or shared variable +* Add support for gl_MaxVaryingVectors for ogl +* Fix loading bool arrays from interface blocks +* Generate separate stores for partially swizzled memory stores +* Allow layout(std430) uniform with GL_EXT_scalar_block_layout +* Support for pragma STDGL invariant(all) +* Support for GL_NV_ray_tracing_motion_blur + ## 11.5.0 2021-06-23 ### Other changes diff --git a/known_good.json b/known_good.json index d40b91c5dc..e1c2ce81b8 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "54524ffa6a1b5ab173ebff89fb31e4a21d365477" + "commit" : "1fbed83c8aab8517d821fcb4164c08567951938f" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "4cce109bcdb7fbb028d21230f07ea292a684bea1" + "commit" : "449bc986ba6f4c5e10e32828783f9daef2a77644" } ] } From 012436d6800882309463f4804dd54e35805bd2c4 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Mon, 9 Aug 2021 14:41:50 -0600 Subject: [PATCH 210/365] Fix GCC warnings Fix -Wsign-compare warnings. Fix -Wunused-parameter warnings. --- SPIRV/GlslangToSpv.cpp | 2 +- glslang/MachineIndependent/Constant.cpp | 2 +- glslang/MachineIndependent/ParseHelper.h | 4 ++-- glslang/MachineIndependent/attribute.cpp | 2 +- glslang/MachineIndependent/glslang.m4 | 8 ++++---- glslang/MachineIndependent/glslang.y | 8 ++++---- glslang/MachineIndependent/glslang_tab.cpp | 8 ++++---- 7 files changed, 17 insertions(+), 17 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index c323bcdb09..71b00d7216 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3384,7 +3384,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt const auto& spirvInst = node->getSpirvInstruction(); if (spirvInst.set == "") { std::vector idImmOps; - for (int i = 0; i < glslangOperands.size(); ++i) { + for (unsigned int i = 0; i < glslangOperands.size(); ++i) { if (glslangOperands[i]->getAsTyped()->getQualifier().isSpirvLiteral()) { // Translate the constant to a literal value std::vector literals; diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 4629cc2da5..7f5d4c4f24 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -531,7 +531,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break; // Note: avoid UBSAN error regarding negating 0x80000000 case EbtInt: newConstArray[i].setIConst( - unionArray[i].getIConst() == 0x80000000 + static_cast(unionArray[i].getIConst()) == 0x80000000 ? -0x7FFFFFFF - 1 : -unionArray[i].getIConst()); break; diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index de44884653..442741d6d4 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -241,7 +241,7 @@ class TParseContextBase : public TParseVersions { // override this to set the language-specific name virtual const char* getAtomicCounterBlockName() const { return ""; } virtual void setAtomicCounterBlockDefaults(TType&) const {} - virtual void setInvariant(const TSourceLoc& loc, const char* builtin) {} + virtual void setInvariant(const TSourceLoc&, const char*) {} virtual void finalizeAtomicCounterBlockLayout(TVariable&) {} bool isAtomicCounterBlock(const TSymbol& symbol) { const TVariable* var = symbol.getAsVariable(); @@ -472,7 +472,7 @@ class TParseContext : public TParseContextBase { // Determine loop control from attributes void handleLoopAttributes(const TAttributes& attributes, TIntermNode*); // Function attributes - void handleFunctionAttributes(const TSourceLoc&, const TAttributes&, TFunction*); + void handleFunctionAttributes(const TSourceLoc&, const TAttributes&); // GL_EXT_spirv_intrinsics TSpirvRequirement* makeSpirvRequirement(const TSourceLoc& loc, const TString& name, diff --git a/glslang/MachineIndependent/attribute.cpp b/glslang/MachineIndependent/attribute.cpp index 8a92f6ae09..df7fdc2a60 100644 --- a/glslang/MachineIndependent/attribute.cpp +++ b/glslang/MachineIndependent/attribute.cpp @@ -347,7 +347,7 @@ void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermN // // Function attributes // -void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttributes& attributes, TFunction* function) +void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttributes& attributes) { for (auto it = attributes.begin(); it != attributes.end(); ++it) { if (it->size() > 0) { diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 93041ce39e..b30c734eba 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -983,20 +983,20 @@ function_prototype $$.function = $1; $$.loc = $2.loc; parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($2.loc, *$3, $$.function); + parseContext.handleFunctionAttributes($2.loc, *$3); } | attribute function_declarator RIGHT_PAREN { $$.function = $2; $$.loc = $3.loc; parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($3.loc, *$1, $$.function); + parseContext.handleFunctionAttributes($3.loc, *$1); } | attribute function_declarator RIGHT_PAREN attribute { $$.function = $2; $$.loc = $3.loc; parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($3.loc, *$1, $$.function); - parseContext.handleFunctionAttributes($3.loc, *$4, $$.function); + parseContext.handleFunctionAttributes($3.loc, *$1); + parseContext.handleFunctionAttributes($3.loc, *$4); } ; diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index b77f4617be..c535ecc237 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -983,20 +983,20 @@ function_prototype $$.function = $1; $$.loc = $2.loc; parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($2.loc, *$3, $$.function); + parseContext.handleFunctionAttributes($2.loc, *$3); } | attribute function_declarator RIGHT_PAREN { $$.function = $2; $$.loc = $3.loc; parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($3.loc, *$1, $$.function); + parseContext.handleFunctionAttributes($3.loc, *$1); } | attribute function_declarator RIGHT_PAREN attribute { $$.function = $2; $$.loc = $3.loc; parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes($3.loc, *$1, $$.function); - parseContext.handleFunctionAttributes($3.loc, *$4, $$.function); + parseContext.handleFunctionAttributes($3.loc, *$1); + parseContext.handleFunctionAttributes($3.loc, *$4); } ; diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index dba06aefef..648bc37002 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -6204,7 +6204,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-2].interm.function); (yyval.interm).loc = (yyvsp[-1].lex).loc; parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes), (yyval.interm).function); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } #line 6210 "MachineIndependent/glslang_tab.cpp" break; @@ -6215,7 +6215,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes), (yyval.interm).function); + parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes)); } #line 6221 "MachineIndependent/glslang_tab.cpp" break; @@ -6226,8 +6226,8 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-2].interm.function); (yyval.interm).loc = (yyvsp[-1].lex).loc; parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); - parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes), (yyval.interm).function); - parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes), (yyval.interm).function); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes)); + parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } #line 6233 "MachineIndependent/glslang_tab.cpp" break; From 8ef6a4cb4d348aa2b2f3895f0beaf9208a2f8d34 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 2 Sep 2021 10:49:46 -0600 Subject: [PATCH 211/365] Perform update_precision on constructors and converts Fixes #2740 --- Test/baseResults/300block.frag.out | 20 +++---- Test/baseResults/310.comp.out | 6 +-- Test/baseResults/310.frag.out | 6 +-- Test/baseResults/310.vert.out | 8 +-- Test/baseResults/320.frag.out | 4 +- Test/baseResults/320.vert.out | 4 +- Test/baseResults/glsl.es320.subgroup.geom.out | 4 +- Test/baseResults/glsl.es320.subgroup.tesc.out | 4 +- Test/baseResults/glsl.es320.subgroup.tese.out | 4 +- Test/baseResults/glsl.es320.subgroup.vert.out | 4 +- .../spv.ext.AnyHitShader.rahit.out | 1 + ...pv.ext.ClosestHitShader_Subgroup.rchit.out | 11 ++++ Test/baseResults/spv.precise.tese.out | 4 -- Test/baseResults/spv.subgroup.frag.out | 1 + Test/baseResults/spv.subgroup.geom.out | 1 + Test/baseResults/spv.subgroup.tesc.out | 1 + Test/baseResults/spv.subgroup.tese.out | 1 + Test/baseResults/spv.subgroup.vert.out | 1 + Test/baseResults/spv.uint.frag.out | 1 + Test/baseResults/uint.frag.out | 4 +- Test/baseResults/vulkan.ast.vert.out | 40 +++++++------- glslang/Include/intermediate.h | 1 + glslang/MachineIndependent/Intermediate.cpp | 54 ++++++++++++++----- glslang/MachineIndependent/ParseHelper.cpp | 8 ++- 24 files changed, 120 insertions(+), 73 deletions(-) diff --git a/Test/baseResults/300block.frag.out b/Test/baseResults/300block.frag.out index e5b07dd9e2..1a5bd9b695 100644 --- a/Test/baseResults/300block.frag.out +++ b/Test/baseResults/300block.frag.out @@ -24,18 +24,18 @@ ERROR: node is still EOpNull! 0:42 Function Definition: main( ( global void) 0:42 Function Parameters: 0:44 Sequence -0:44 texture ( global lowp 4-component vector of int) +0:44 texture ( global lowp 4-component vector of int, operation at mediump) 0:44 sampler: direct index for structure ( global lowp isampler3D) 0:44 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) 0:44 Constant: 0:44 2 (const int) -0:44 Construct vec3 ( temp lowp 3-component vector of float) -0:44 Convert int to float ( temp lowp float) +0:44 Construct vec3 ( temp mediump 3-component vector of float) +0:44 Convert int to float ( temp mediump float) 0:44 ni: direct index for structure (layout( column_major shared) uniform mediump int) 0:44 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) 0:44 Constant: 0:44 1 (const int) -0:44 Convert uint to float ( temp lowp float) +0:44 Convert uint to float ( temp mediump float) 0:44 direct index ( temp mediump uint) 0:44 bv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint) 0:44 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, layout( column_major) global structure{ global mediump int a} t} fbs}) @@ -43,7 +43,7 @@ ERROR: node is still EOpNull! 0:44 0 (const uint) 0:44 Constant: 0:44 1 (const int) -0:44 Convert uint to float ( temp lowp float) +0:44 Convert uint to float ( temp mediump float) 0:44 direct index ( temp mediump uint) 0:44 nbv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint) 0:44 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) @@ -92,18 +92,18 @@ ERROR: node is still EOpNull! 0:42 Function Definition: main( ( global void) 0:42 Function Parameters: 0:44 Sequence -0:44 texture ( global lowp 4-component vector of int) +0:44 texture ( global lowp 4-component vector of int, operation at mediump) 0:44 sampler: direct index for structure ( global lowp isampler3D) 0:44 's' ( uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, global structure{ global mediump int a} t}) 0:44 Constant: 0:44 2 (const int) -0:44 Construct vec3 ( temp lowp 3-component vector of float) -0:44 Convert int to float ( temp lowp float) +0:44 Construct vec3 ( temp mediump 3-component vector of float) +0:44 Convert int to float ( temp mediump float) 0:44 ni: direct index for structure (layout( column_major shared) uniform mediump int) 0:44 'inst' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) 0:44 Constant: 0:44 1 (const int) -0:44 Convert uint to float ( temp lowp float) +0:44 Convert uint to float ( temp mediump float) 0:44 direct index ( temp mediump uint) 0:44 bv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint) 0:44 'anon@0' (layout( column_major shared) uniform block{layout( column_major shared) uniform mediump 4-component vector of uint bv, layout( column_major shared) uniform mediump 2X2 matrix of float bm2, layout( column_major shared) uniform lowp isampler2D sampler, layout( column_major shared) uniform structure{ global mediump int a} t, layout( column_major shared) uniform structure{ global mediump 4-component vector of float u, global mediump 4-component vector of uint v, global lowp isampler3D sampler, global mediump 3-component vector of float w, layout( column_major) global structure{ global mediump int a} t} fbs}) @@ -111,7 +111,7 @@ ERROR: node is still EOpNull! 0:44 0 (const uint) 0:44 Constant: 0:44 1 (const int) -0:44 Convert uint to float ( temp lowp float) +0:44 Convert uint to float ( temp mediump float) 0:44 direct index ( temp mediump uint) 0:44 nbv: direct index for structure (layout( column_major shared) uniform mediump 4-component vector of uint) 0:44 direct index (layout( column_major shared) temp block{layout( column_major shared) uniform mediump 4-component vector of uint nbv, layout( column_major shared) uniform mediump int ni}) diff --git a/Test/baseResults/310.comp.out b/Test/baseResults/310.comp.out index 85b01161ea..ac76cbdf5e 100644 --- a/Test/baseResults/310.comp.out +++ b/Test/baseResults/310.comp.out @@ -180,7 +180,7 @@ ERROR: node is still EOpNull! 0:91 'i' ( temp highp int) 0:92 imageStore ( global highp void) 0:92 'ii2da' ( writeonly uniform highp iimage2DArray) -0:92 Construct ivec3 ( temp 3-component vector of int) +0:92 Construct ivec3 ( temp highp 3-component vector of int) 0:92 'i' ( temp highp int) 0:92 'i' ( temp highp int) 0:92 'i' ( temp highp int) @@ -189,9 +189,9 @@ ERROR: node is still EOpNull! 0:92 0 (const int) 0:92 0 (const int) 0:92 0 (const int) -0:93 imageLoad ( global mediump 4-component vector of float) +0:93 imageLoad ( global mediump 4-component vector of float, operation at highp) 0:93 'img2Drgba' (layout( rgba32f) readonly uniform mediump image2D) -0:93 Construct ivec2 ( temp mediump 2-component vector of int) +0:93 Construct ivec2 ( temp highp 2-component vector of int) 0:93 'i' ( temp highp int) 0:93 'i' ( temp highp int) 0:94 imageLoad ( global highp 4-component vector of int) diff --git a/Test/baseResults/310.frag.out b/Test/baseResults/310.frag.out index 9f73c6751c..e43a887c6d 100644 --- a/Test/baseResults/310.frag.out +++ b/Test/baseResults/310.frag.out @@ -270,7 +270,7 @@ ERROR: node is still EOpNull! 0:42 Constant: 0:42 0.000000 0:42 0.000000 -0:42 Convert float to int ( temp highp 2-component vector of int) +0:42 Convert float to int ( temp mediump 2-component vector of int) 0:42 'c2D' ( smooth in mediump 2-component vector of float) 0:43 textureProjGradOffset ( global highp 4-component vector of uint) 0:43 'usamp2d' ( uniform highp usampler2D) @@ -471,7 +471,7 @@ ERROR: node is still EOpNull! 0:211 Constant: 0:211 0.100000 0:211 0.100000 -0:211 Convert float to int ( temp highp 2-component vector of int) +0:211 Convert float to int ( temp mediump 2-component vector of int) 0:211 'inf' ( smooth in mediump 2-component vector of float) 0:212 textureGatherOffsets ( global highp 4-component vector of float) 0:212 direct index ( temp highp sampler2D) @@ -507,7 +507,7 @@ ERROR: node is still EOpNull! 0:221 Constant: 0:221 0.100000 0:221 0.100000 -0:221 Convert float to int ( temp highp 2-component vector of int) +0:221 Convert float to int ( temp mediump 2-component vector of int) 0:221 'inf' ( smooth in mediump 2-component vector of float) 0:222 textureGatherOffsets ( global highp 4-component vector of float) 0:222 direct index ( temp highp sampler2D) diff --git a/Test/baseResults/310.vert.out b/Test/baseResults/310.vert.out index 1d2152dd14..13a88dff26 100644 --- a/Test/baseResults/310.vert.out +++ b/Test/baseResults/310.vert.out @@ -330,7 +330,7 @@ ERROR: node is still EOpNull! 0:164 'sIndex' ( uniform highp int) 0:164 Constant: 0:164 2 (const int) -0:165 textureGatherOffset ( global lowp 4-component vector of float) +0:165 textureGatherOffset ( global lowp 4-component vector of float, operation at highp) 0:165 direct index ( temp lowp sampler2D) 0:165 'sArray' ( uniform 4-element array of lowp sampler2D) 0:165 Constant: @@ -338,7 +338,7 @@ ERROR: node is still EOpNull! 0:165 Constant: 0:165 0.100000 0:165 0.100000 -0:165 Convert float to int ( temp lowp 2-component vector of int) +0:165 Convert float to int ( temp highp 2-component vector of int) 0:165 'inf' ( in highp 2-component vector of float) 0:166 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp) 0:166 direct index ( temp lowp sampler2D) @@ -394,7 +394,7 @@ ERROR: node is still EOpNull! 0:179 'sIndex' ( uniform highp int) 0:179 Constant: 0:179 2 (const int) -0:180 textureGatherOffset ( global lowp 4-component vector of float) +0:180 textureGatherOffset ( global lowp 4-component vector of float, operation at highp) 0:180 direct index ( temp lowp sampler2D) 0:180 'sArray' ( uniform 4-element array of lowp sampler2D) 0:180 Constant: @@ -402,7 +402,7 @@ ERROR: node is still EOpNull! 0:180 Constant: 0:180 0.100000 0:180 0.100000 -0:180 Convert float to int ( temp lowp 2-component vector of int) +0:180 Convert float to int ( temp highp 2-component vector of int) 0:180 'inf' ( in highp 2-component vector of float) 0:181 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp) 0:181 direct index ( temp lowp sampler2D) diff --git a/Test/baseResults/320.frag.out b/Test/baseResults/320.frag.out index 002aa7f67b..9f4a817b01 100644 --- a/Test/baseResults/320.frag.out +++ b/Test/baseResults/320.frag.out @@ -121,7 +121,7 @@ ERROR: node is still EOpNull! 0:76 'inf' ( smooth in mediump 2-component vector of float) 0:76 'ing' ( smooth in mediump 2-component vector of float) 0:76 'h' ( noContraction temp mediump 2-component vector of float) -0:77 textureGatherOffset ( global lowp 4-component vector of float) +0:77 textureGatherOffset ( global lowp 4-component vector of float, operation at mediump) 0:77 direct index ( temp lowp sampler2D) 0:77 'sArray' ( uniform 4-element array of lowp sampler2D) 0:77 Constant: @@ -129,7 +129,7 @@ ERROR: node is still EOpNull! 0:77 Constant: 0:77 0.100000 0:77 0.100000 -0:77 Convert float to int ( temp lowp 2-component vector of int) +0:77 Convert float to int ( temp mediump 2-component vector of int) 0:77 'inf' ( smooth in mediump 2-component vector of float) 0:78 textureGatherOffsets ( global lowp 4-component vector of float, operation at mediump) 0:78 direct index ( temp lowp sampler2D) diff --git a/Test/baseResults/320.vert.out b/Test/baseResults/320.vert.out index 0313b619e5..5e80d141a3 100644 --- a/Test/baseResults/320.vert.out +++ b/Test/baseResults/320.vert.out @@ -99,7 +99,7 @@ ERROR: node is still EOpNull! 0:70 'sIndex' ( uniform highp int) 0:70 Constant: 0:70 2 (const int) -0:71 textureGatherOffset ( global lowp 4-component vector of float) +0:71 textureGatherOffset ( global lowp 4-component vector of float, operation at highp) 0:71 direct index ( temp lowp sampler2D) 0:71 'sArray' ( uniform 4-element array of lowp sampler2D) 0:71 Constant: @@ -107,7 +107,7 @@ ERROR: node is still EOpNull! 0:71 Constant: 0:71 0.100000 0:71 0.100000 -0:71 Convert float to int ( temp lowp 2-component vector of int) +0:71 Convert float to int ( temp highp 2-component vector of int) 0:71 'inf' ( in highp 2-component vector of float) 0:72 textureGatherOffsets ( global lowp 4-component vector of float, operation at highp) 0:72 direct index ( temp lowp sampler2D) diff --git a/Test/baseResults/glsl.es320.subgroup.geom.out b/Test/baseResults/glsl.es320.subgroup.geom.out index 5d18d30a1d..eab5454220 100644 --- a/Test/baseResults/glsl.es320.subgroup.geom.out +++ b/Test/baseResults/glsl.es320.subgroup.geom.out @@ -16,7 +16,7 @@ output primitive = points 0:12 Constant: 0:12 0 (const uint) 0:12 'gl_PrimitiveIDIn' ( in highp int PrimitiveID) -0:12 Construct uvec4 ( temp highp 4-component vector of uint) +0:12 Construct uvec4 ( temp mediump 4-component vector of uint) 0:12 'gl_SubgroupSize' ( in mediump uint SubgroupSize) 0:12 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID) 0:12 Constant: @@ -47,7 +47,7 @@ output primitive = points 0:12 Constant: 0:12 0 (const uint) 0:12 'gl_PrimitiveIDIn' ( in highp int PrimitiveID) -0:12 Construct uvec4 ( temp highp 4-component vector of uint) +0:12 Construct uvec4 ( temp mediump 4-component vector of uint) 0:12 'gl_SubgroupSize' ( in mediump uint SubgroupSize) 0:12 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID) 0:12 Constant: diff --git a/Test/baseResults/glsl.es320.subgroup.tesc.out b/Test/baseResults/glsl.es320.subgroup.tesc.out index 9512bc531d..431a3c3f70 100644 --- a/Test/baseResults/glsl.es320.subgroup.tesc.out +++ b/Test/baseResults/glsl.es320.subgroup.tesc.out @@ -13,7 +13,7 @@ vertices = 1 0:11 Constant: 0:11 0 (const uint) 0:11 'gl_PrimitiveID' ( in highp int PrimitiveID) -0:11 Construct uvec4 ( temp highp 4-component vector of uint) +0:11 Construct uvec4 ( temp mediump 4-component vector of uint) 0:11 'gl_SubgroupSize' ( in mediump uint SubgroupSize) 0:11 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID) 0:11 Constant: @@ -41,7 +41,7 @@ vertices = 1 0:11 Constant: 0:11 0 (const uint) 0:11 'gl_PrimitiveID' ( in highp int PrimitiveID) -0:11 Construct uvec4 ( temp highp 4-component vector of uint) +0:11 Construct uvec4 ( temp mediump 4-component vector of uint) 0:11 'gl_SubgroupSize' ( in mediump uint SubgroupSize) 0:11 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID) 0:11 Constant: diff --git a/Test/baseResults/glsl.es320.subgroup.tese.out b/Test/baseResults/glsl.es320.subgroup.tese.out index 29f7b73c1a..198a757a33 100644 --- a/Test/baseResults/glsl.es320.subgroup.tese.out +++ b/Test/baseResults/glsl.es320.subgroup.tese.out @@ -15,7 +15,7 @@ triangle order = none 0:11 Constant: 0:11 0 (const uint) 0:11 'gl_PrimitiveID' ( in highp int PrimitiveID) -0:11 Construct uvec4 ( temp highp 4-component vector of uint) +0:11 Construct uvec4 ( temp mediump 4-component vector of uint) 0:11 'gl_SubgroupSize' ( in mediump uint SubgroupSize) 0:11 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID) 0:11 Constant: @@ -45,7 +45,7 @@ triangle order = ccw 0:11 Constant: 0:11 0 (const uint) 0:11 'gl_PrimitiveID' ( in highp int PrimitiveID) -0:11 Construct uvec4 ( temp highp 4-component vector of uint) +0:11 Construct uvec4 ( temp mediump 4-component vector of uint) 0:11 'gl_SubgroupSize' ( in mediump uint SubgroupSize) 0:11 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID) 0:11 Constant: diff --git a/Test/baseResults/glsl.es320.subgroup.vert.out b/Test/baseResults/glsl.es320.subgroup.vert.out index bf1da49253..e1a6bea750 100644 --- a/Test/baseResults/glsl.es320.subgroup.vert.out +++ b/Test/baseResults/glsl.es320.subgroup.vert.out @@ -12,7 +12,7 @@ Requested GL_KHR_shader_subgroup_basic 0:10 Constant: 0:10 0 (const uint) 0:10 'gl_VertexID' ( gl_VertexId highp int VertexId) -0:10 Construct uvec4 ( temp highp 4-component vector of uint) +0:10 Construct uvec4 ( temp mediump 4-component vector of uint) 0:10 'gl_SubgroupSize' ( in mediump uint SubgroupSize) 0:10 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID) 0:10 Constant: @@ -41,7 +41,7 @@ Requested GL_KHR_shader_subgroup_basic 0:10 Constant: 0:10 0 (const uint) 0:10 'gl_VertexID' ( gl_VertexId highp int VertexId) -0:10 Construct uvec4 ( temp highp 4-component vector of uint) +0:10 Construct uvec4 ( temp mediump 4-component vector of uint) 0:10 'gl_SubgroupSize' ( in mediump uint SubgroupSize) 0:10 'gl_SubgroupInvocationID' ( in mediump uint SubgroupInvocationID) 0:10 Constant: diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index 7bcf8120eb..880be33932 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -73,6 +73,7 @@ spv.ext.AnyHitShader.rahit Decorate 98(gl_SubgroupSize) RelaxedPrecision Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize Decorate 99 RelaxedPrecision + Decorate 100 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out index 14ec09b8a9..7f5af89d10 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out @@ -38,10 +38,21 @@ spv.ext.ClosestHitShader_Subgroup.rchit Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 29 RelaxedPrecision + Decorate 30 RelaxedPrecision Decorate 34(gl_SubGroupGeMaskARB) BuiltIn SubgroupGeMaskKHR + Decorate 41 RelaxedPrecision + Decorate 42 RelaxedPrecision Decorate 43(gl_SubgroupGtMask) BuiltIn SubgroupGtMaskKHR + Decorate 46 RelaxedPrecision + Decorate 46 RelaxedPrecision + Decorate 47 RelaxedPrecision Decorate 48(gl_SubgroupLeMask) BuiltIn SubgroupLeMaskKHR + Decorate 51 RelaxedPrecision + Decorate 51 RelaxedPrecision + Decorate 52 RelaxedPrecision Decorate 53(gl_SubGroupLtMaskARB) BuiltIn SubgroupLtMaskKHR + Decorate 59 RelaxedPrecision + Decorate 60 RelaxedPrecision Decorate 61(gl_SMIDNV) BuiltIn SMIDNV 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.precise.tese.out b/Test/baseResults/spv.precise.tese.out index a23b0739bf..7db4ed0141 100644 --- a/Test/baseResults/spv.precise.tese.out +++ b/Test/baseResults/spv.precise.tese.out @@ -36,10 +36,6 @@ spv.precise.tese Decorate 43 NoContraction Decorate 62(in_f_color) RelaxedPrecision Decorate 62(in_f_color) Location 0 - Decorate 67 RelaxedPrecision - Decorate 68 RelaxedPrecision - Decorate 69 RelaxedPrecision - Decorate 70 RelaxedPrecision Decorate 97 NoContraction Decorate 99 NoContraction Decorate 101 NoContraction diff --git a/Test/baseResults/spv.subgroup.frag.out b/Test/baseResults/spv.subgroup.frag.out index ad1158639b..a3e427f0cf 100644 --- a/Test/baseResults/spv.subgroup.frag.out +++ b/Test/baseResults/spv.subgroup.frag.out @@ -24,6 +24,7 @@ spv.subgroup.frag Decorate 13(gl_SubgroupInvocationID) Flat Decorate 13(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 14 RelaxedPrecision + Decorate 16 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.subgroup.geom.out b/Test/baseResults/spv.subgroup.geom.out index c866f8eca8..27f05b2f9e 100644 --- a/Test/baseResults/spv.subgroup.geom.out +++ b/Test/baseResults/spv.subgroup.geom.out @@ -33,6 +33,7 @@ spv.subgroup.geom Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 21 RelaxedPrecision + Decorate 23 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.subgroup.tesc.out b/Test/baseResults/spv.subgroup.tesc.out index ed6b5c1ed0..8322a4a165 100644 --- a/Test/baseResults/spv.subgroup.tesc.out +++ b/Test/baseResults/spv.subgroup.tesc.out @@ -30,6 +30,7 @@ spv.subgroup.tesc Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 21 RelaxedPrecision + Decorate 23 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.subgroup.tese.out b/Test/baseResults/spv.subgroup.tese.out index 70cdc962fc..360f98bef7 100644 --- a/Test/baseResults/spv.subgroup.tese.out +++ b/Test/baseResults/spv.subgroup.tese.out @@ -32,6 +32,7 @@ spv.subgroup.tese Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 21 RelaxedPrecision + Decorate 23 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.subgroup.vert.out b/Test/baseResults/spv.subgroup.vert.out index 34b090d4d0..6de8a0ae01 100644 --- a/Test/baseResults/spv.subgroup.vert.out +++ b/Test/baseResults/spv.subgroup.vert.out @@ -29,6 +29,7 @@ spv.subgroup.vert Decorate 20(gl_SubgroupInvocationID) RelaxedPrecision Decorate 20(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 21 RelaxedPrecision + Decorate 23 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.uint.frag.out b/Test/baseResults/spv.uint.frag.out index c19064d4e0..7dbc3b3774 100644 --- a/Test/baseResults/spv.uint.frag.out +++ b/Test/baseResults/spv.uint.frag.out @@ -75,6 +75,7 @@ spv.uint.frag Decorate 90 RelaxedPrecision Decorate 91 RelaxedPrecision Decorate 92 RelaxedPrecision + Decorate 93 RelaxedPrecision Decorate 97 RelaxedPrecision Decorate 98 RelaxedPrecision Decorate 101 RelaxedPrecision diff --git a/Test/baseResults/uint.frag.out b/Test/baseResults/uint.frag.out index 3a12d6b7cb..ce6d02d37e 100644 --- a/Test/baseResults/uint.frag.out +++ b/Test/baseResults/uint.frag.out @@ -134,7 +134,7 @@ ERROR: node is still EOpNull! 0:59 Condition 0:59 Compare Equal ( temp bool) 0:59 'shiftedii' ( temp mediump int) -0:59 Convert uint to int ( temp int) +0:59 Convert uint to int ( temp mediump int) 0:59 'shiftedui' ( temp mediump uint) 0:59 true case 0:60 move second child to first child ( temp mediump 4-component vector of uint) @@ -433,7 +433,7 @@ ERROR: node is still EOpNull! 0:59 Condition 0:59 Compare Equal ( temp bool) 0:59 'shiftedii' ( temp mediump int) -0:59 Convert uint to int ( temp int) +0:59 Convert uint to int ( temp mediump int) 0:59 'shiftedui' ( temp mediump uint) 0:59 true case 0:60 move second child to first child ( temp mediump 4-component vector of uint) diff --git a/Test/baseResults/vulkan.ast.vert.out b/Test/baseResults/vulkan.ast.vert.out index 05a635532f..68e892b4ac 100644 --- a/Test/baseResults/vulkan.ast.vert.out +++ b/Test/baseResults/vulkan.ast.vert.out @@ -19,10 +19,10 @@ Shader version: 450 0:14 Convert bool to float ( temp float) 0:14 'scbt' ( specialization-constant const bool) 0:14 true (const bool) -0:15 Convert int to float ( temp float) +0:15 Convert int to float ( temp highp float) 0:15 'sci2' ( specialization-constant const highp int) 0:15 2 (const int) -0:17 Convert float to int ( temp int) +0:17 Convert float to int ( temp highp int) 0:17 'scf1' ( specialization-constant const highp float) 0:17 1.000000 0:18 Convert bool to int ( specialization-constant const int) @@ -86,34 +86,34 @@ Shader version: 450 0:35 2 (const int) 0:35 'sci2' ( specialization-constant const highp int) 0:35 2 (const int) -0:37 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:37 Construct ivec2 ( specialization-constant const highp 2-component vector of int) 0:37 'sci2' ( specialization-constant const highp int) 0:37 2 (const int) 0:37 'sci2' ( specialization-constant const highp int) 0:37 2 (const int) -0:38 Construct ivec2 ( temp 2-element array of 2-component vector of int) -0:38 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:38 Construct ivec2 ( temp 2-element array of highp 2-component vector of int) +0:38 Construct ivec2 ( specialization-constant const highp 2-component vector of int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) -0:38 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:38 Construct ivec2 ( specialization-constant const highp 2-component vector of int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) -0:40 Construct vec2 ( specialization-constant const 2-component vector of float) +0:40 Construct vec2 ( specialization-constant const highp 2-component vector of float) 0:40 'scf1' ( specialization-constant const highp float) 0:40 1.000000 0:40 'scf1' ( specialization-constant const highp float) 0:40 1.000000 -0:41 Construct vec2 ( temp 2-element array of 2-component vector of float) -0:41 Construct vec2 ( specialization-constant const 2-component vector of float) +0:41 Construct vec2 ( temp 2-element array of highp 2-component vector of float) +0:41 Construct vec2 ( specialization-constant const highp 2-component vector of float) 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 -0:41 Construct vec2 ( specialization-constant const 2-component vector of float) +0:41 Construct vec2 ( specialization-constant const highp 2-component vector of float) 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 0:41 'scf1' ( specialization-constant const highp float) @@ -150,10 +150,10 @@ Shader version: 450 0:14 Convert bool to float ( temp float) 0:14 'scbt' ( specialization-constant const bool) 0:14 true (const bool) -0:15 Convert int to float ( temp float) +0:15 Convert int to float ( temp highp float) 0:15 'sci2' ( specialization-constant const highp int) 0:15 2 (const int) -0:17 Convert float to int ( temp int) +0:17 Convert float to int ( temp highp int) 0:17 'scf1' ( specialization-constant const highp float) 0:17 1.000000 0:18 Convert bool to int ( specialization-constant const int) @@ -217,34 +217,34 @@ Shader version: 450 0:35 2 (const int) 0:35 'sci2' ( specialization-constant const highp int) 0:35 2 (const int) -0:37 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:37 Construct ivec2 ( specialization-constant const highp 2-component vector of int) 0:37 'sci2' ( specialization-constant const highp int) 0:37 2 (const int) 0:37 'sci2' ( specialization-constant const highp int) 0:37 2 (const int) -0:38 Construct ivec2 ( temp 2-element array of 2-component vector of int) -0:38 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:38 Construct ivec2 ( temp 2-element array of highp 2-component vector of int) +0:38 Construct ivec2 ( specialization-constant const highp 2-component vector of int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) -0:38 Construct ivec2 ( specialization-constant const 2-component vector of int) +0:38 Construct ivec2 ( specialization-constant const highp 2-component vector of int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) 0:38 'sci2' ( specialization-constant const highp int) 0:38 2 (const int) -0:40 Construct vec2 ( specialization-constant const 2-component vector of float) +0:40 Construct vec2 ( specialization-constant const highp 2-component vector of float) 0:40 'scf1' ( specialization-constant const highp float) 0:40 1.000000 0:40 'scf1' ( specialization-constant const highp float) 0:40 1.000000 -0:41 Construct vec2 ( temp 2-element array of 2-component vector of float) -0:41 Construct vec2 ( specialization-constant const 2-component vector of float) +0:41 Construct vec2 ( temp 2-element array of highp 2-component vector of float) +0:41 Construct vec2 ( specialization-constant const highp 2-component vector of float) 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 -0:41 Construct vec2 ( specialization-constant const 2-component vector of float) +0:41 Construct vec2 ( specialization-constant const highp 2-component vector of float) 0:41 'scf1' ( specialization-constant const highp float) 0:41 1.000000 0:41 'scf1' ( specialization-constant const highp float) diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 1e6ab4aa7a..595bd623db 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1643,6 +1643,7 @@ class TIntermAggregate : public TIntermOperator { ~TIntermAggregate() { delete pragmaTable; } virtual TIntermAggregate* getAsAggregate() { return this; } virtual const TIntermAggregate* getAsAggregate() const { return this; } + virtual void updatePrecision(); virtual void setOperator(TOperator o) { op = o; } virtual TIntermSequence& getSequence() { return sequence; } virtual const TIntermSequence& getSequence() const { return sequence; } diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 0278445969..1283f44939 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -416,20 +416,24 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child, // TODO: but, did this bypass constant folding? // switch (op) { - case EOpConstructInt8: - case EOpConstructUint8: - case EOpConstructInt16: - case EOpConstructUint16: - case EOpConstructInt: - case EOpConstructUint: - case EOpConstructInt64: - case EOpConstructUint64: - case EOpConstructBool: - case EOpConstructFloat: - case EOpConstructDouble: - case EOpConstructFloat16: - return child; - default: break; // some compilers want this + case EOpConstructInt8: + case EOpConstructUint8: + case EOpConstructInt16: + case EOpConstructUint16: + case EOpConstructInt: + case EOpConstructUint: + case EOpConstructInt64: + case EOpConstructUint64: + case EOpConstructBool: + case EOpConstructFloat: + case EOpConstructDouble: + case EOpConstructFloat16: { + TIntermUnary* unary_node = child->getAsUnaryNode(); + if (unary_node != nullptr) + unary_node->updatePrecision(); + return child; + } + default: break; // some compilers want this } // @@ -3776,6 +3780,28 @@ bool TIntermediate::promoteAggregate(TIntermAggregate& node) return false; } +// Propagate precision qualifiers *up* from children to parent, and then +// back *down* again to the children's subtrees. +void TIntermAggregate::updatePrecision() +{ + if (getBasicType() == EbtInt || getBasicType() == EbtUint || + getBasicType() == EbtFloat || getBasicType() == EbtFloat16) { + TPrecisionQualifier maxPrecision = EpqNone; + TIntermSequence operands = getSequence(); + for (unsigned int i = 0; i < operands.size(); ++i) { + TIntermTyped* typedNode = operands[i]->getAsTyped(); + assert(typedNode); + maxPrecision = std::max(maxPrecision, typedNode->getQualifier().precision); + } + getQualifier().precision = maxPrecision; + for (unsigned int i = 0; i < operands.size(); ++i) { + TIntermTyped* typedNode = operands[i]->getAsTyped(); + assert(typedNode); + typedNode->propagatePrecision(maxPrecision); + } + } +} + // Propagate precision qualifiers *up* from children to parent, and then // back *down* again to the children's subtrees. void TIntermBinary::updatePrecision() diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index b957bb87ca..a2dd5a6575 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -7691,7 +7691,13 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* return nullptr; } - return intermediate.setAggregateOperator(aggrNode, op, type, loc); + TIntermTyped *ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc); + + TIntermAggregate *agg_node = ret_node->getAsAggregate(); + if (agg_node && agg_node->isVector()) + agg_node->updatePrecision(); + + return ret_node; } // Function for constructor implementation. Calls addUnaryMath with appropriate EOp value From 12e27e17deb3102f1f6f08ec19caf5e32becb3f8 Mon Sep 17 00:00:00 2001 From: InsertAReallyCreativeNameHere Date: Thu, 9 Sep 2021 06:43:23 +1000 Subject: [PATCH 212/365] Change MINGW_HAS_SECURE_API checks. MINGW_HAS_SECURE_API can be defined as 0, but this will be ignored here without this change. Without these *_s "safe" functions, this code will also build on Windows XP. --- glslang/Include/Common.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index 1e47239a7a..e7b5e072b3 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -61,7 +61,7 @@ std::string to_string(const T& val) { } #endif -#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API +#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || MINGW_HAS_SECURE_API #include #ifndef snprintf #define snprintf sprintf_s @@ -213,7 +213,7 @@ template T Max(const T a, const T b) { return a > b ? a : b; } // // Create a TString object from an integer. // -#if defined _MSC_VER || defined MINGW_HAS_SECURE_API +#if defined _MSC_VER || MINGW_HAS_SECURE_API inline const TString String(const int i, const int base = 10) { char text[16]; // 32 bit ints are at most 10 digits in base 10 From 62ed14518fdfb5e264b5efecf0a182a069acff84 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 14 Sep 2021 12:17:58 -0600 Subject: [PATCH 213/365] Run update_precision() on array and matrix constructors. --- glslang/MachineIndependent/ParseHelper.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index a2dd5a6575..b2b187b4fd 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -7694,7 +7694,7 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode* TIntermTyped *ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc); TIntermAggregate *agg_node = ret_node->getAsAggregate(); - if (agg_node && agg_node->isVector()) + if (agg_node && (agg_node->isVector() || agg_node->isArray() || agg_node->isMatrix())) agg_node->updatePrecision(); return ret_node; From d3bff63caedced00e022ca046b547598f5d1c25d Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Wed, 15 Sep 2021 23:39:02 -0400 Subject: [PATCH 214/365] avoid growing the global uniform block with duplicates When using GL_EXT_vulkan_glsl_relaxed, check to see if a uniform already exists in the block uniform block, and if so, ensure they are the same type. Otherwise, avoid growing the block with a duplicate. --- glslang/MachineIndependent/ParseContextBase.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index 02cca409e1..1da50d62f9 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -622,6 +622,19 @@ void TParseContextBase::growGlobalUniformBlock(const TSourceLoc& loc, TType& mem globalUniformBlock->getWritableType().getQualifier().layoutBinding = globalUniformBinding; globalUniformBlock->getWritableType().getQualifier().layoutSet = globalUniformSet; + // Check for declarations of this default uniform that already exist due to other compilation units. + TSymbol* symbol = symbolTable.find(memberName); + if (symbol) { + if (memberType != symbol->getType()) { + TString err; + err += "\"" + memberType.getCompleteString() + "\""; + err += " versus "; + err += "\"" + symbol->getType().getCompleteString() + "\""; + error(loc, "Types must match:", memberType.getFieldName().c_str(), err.c_str()); + } + return; + } + // Add the requested member as a member to the global block. TType* type = new TType; type->shallowCopy(memberType); From 05794b46a73add190282014443dff92fd4c179bc Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Thu, 16 Sep 2021 17:40:49 -0400 Subject: [PATCH 215/365] GL_EXT_vulkan_glsl_relaxed - retarget gl_VertexID to gl_VertexIndex instead of allowing for multiple declarations of the variable in the resulting SPIR-V, instead use a retargeted mechanism to cause references to gl_VertexID and gl_InstanceID to use the gl_VertexIndex and gl_InstanceIndex symbol. --- .../baseResults/vk.relaxed.changeSet.vert.out | 20 ++--- .../vk.relaxed.errorcheck.vert.out | 8 +- .../baseResults/vk.relaxed.stagelink.vert.out | 82 +++++++++++-------- Test/vk.relaxed.stagelink.vert | 6 +- glslang/MachineIndependent/Initialize.cpp | 9 +- glslang/MachineIndependent/SymbolTable.cpp | 38 ++++++++- glslang/MachineIndependent/SymbolTable.h | 29 ++++++- 7 files changed, 133 insertions(+), 59 deletions(-) diff --git a/Test/baseResults/vk.relaxed.changeSet.vert.out b/Test/baseResults/vk.relaxed.changeSet.vert.out index f6bce292ba..d2beff93d9 100755 --- a/Test/baseResults/vk.relaxed.changeSet.vert.out +++ b/Test/baseResults/vk.relaxed.changeSet.vert.out @@ -34,8 +34,8 @@ Shader version: 460 0:? 'Color' ( smooth out highp 4-component vector of float) 0:? 'UV' ( smooth out highp 2-component vector of float) 0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) vk.relaxed.changeSet.frag Shader version: 460 @@ -108,8 +108,8 @@ Shader version: 460 0:? 'Color' ( smooth out highp 4-component vector of float) 0:? 'UV' ( smooth out highp 2-component vector of float) 0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) Shader version: 460 gl_FragCoord origin is upper left 0:? Sequence @@ -162,8 +162,8 @@ gl_FragCoord origin is upper left MemberName 28(gl_DefaultUniformBlock) 0 "projectionMatrix" Name 30 "" Name 34 "aPos" - Name 44 "gl_VertexID" - Name 45 "gl_InstanceID" + Name 44 "gl_VertexIndex" + Name 45 "gl_InstanceIndex" Decorate 9(Color) Location 0 Decorate 11(aColor) Location 2 Decorate 15(UV) Location 1 @@ -180,8 +180,8 @@ gl_FragCoord origin is upper left Decorate 30 DescriptorSet 0 Decorate 30 Binding 0 Decorate 34(aPos) Location 0 - Decorate 44(gl_VertexID) BuiltIn VertexIndex - Decorate 45(gl_InstanceID) BuiltIn InstanceIndex + Decorate 44(gl_VertexIndex) BuiltIn VertexIndex + Decorate 45(gl_InstanceIndex) BuiltIn InstanceIndex 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -212,8 +212,8 @@ gl_FragCoord origin is upper left 36: 6(float) Constant 0 37: 6(float) Constant 1065353216 43: TypePointer Input 25(int) - 44(gl_VertexID): 43(ptr) Variable Input -45(gl_InstanceID): 43(ptr) Variable Input +44(gl_VertexIndex): 43(ptr) Variable Input +45(gl_InstanceIndex): 43(ptr) Variable Input 4(main): 2 Function None 3 5: Label 12: 7(fvec4) Load 11(aColor) diff --git a/Test/baseResults/vk.relaxed.errorcheck.vert.out b/Test/baseResults/vk.relaxed.errorcheck.vert.out index f19eae6407..5c6ecf92c1 100644 --- a/Test/baseResults/vk.relaxed.errorcheck.vert.out +++ b/Test/baseResults/vk.relaxed.errorcheck.vert.out @@ -28,8 +28,8 @@ Shader version: 460 0:? Linker Objects 0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) 0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) vk.relaxed.errorcheck.frag Shader version: 460 @@ -94,8 +94,8 @@ Shader version: 460 0:? Linker Objects 0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) 0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 2-component vector of float a}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) Shader version: 460 gl_FragCoord origin is upper left 0:? Sequence diff --git a/Test/baseResults/vk.relaxed.stagelink.vert.out b/Test/baseResults/vk.relaxed.stagelink.vert.out index a63f10c353..b9173f249c 100644 --- a/Test/baseResults/vk.relaxed.stagelink.vert.out +++ b/Test/baseResults/vk.relaxed.stagelink.vert.out @@ -93,7 +93,9 @@ Shader version: 460 0:28 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) 0:28 Constant: 0:28 5 (const uint) -0:28 'gl_VertexID' ( in int VertexIndex) +0:28 subtract ( temp int) +0:28 'gl_VertexIndex' ( in int VertexIndex) +0:28 'gl_VertexIndex' ( in int VertexIndex) 0:29 move second child to first child ( temp highp float) 0:29 direct index ( temp highp float) 0:29 'v' ( temp highp 4-component vector of float) @@ -105,7 +107,9 @@ Shader version: 460 0:29 Constant: 0:29 0 (const int) 0:29 Convert int to float ( temp highp float) -0:29 'gl_InstanceID' ( in highp int InstanceIndex) +0:29 subtract ( temp highp int) +0:29 'gl_InstanceIndex' ( in highp int InstanceIndex) +0:29 'gl_InstanceIndex' ( in highp int InstanceIndex) 0:30 move second child to first child ( temp highp 4-component vector of float) 0:30 'io' (layout( location=0) smooth out highp 4-component vector of float) 0:30 'v' ( temp highp 4-component vector of float) @@ -113,8 +117,8 @@ Shader version: 460 0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) 0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) 0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) vk.relaxed.stagelink.frag Shader version: 460 @@ -311,7 +315,9 @@ Shader version: 460 0:28 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) 0:28 Constant: 0:28 5 (const uint) -0:28 'gl_VertexID' ( in int VertexIndex) +0:28 subtract ( temp int) +0:28 'gl_VertexIndex' ( in int VertexIndex) +0:28 'gl_VertexIndex' ( in int VertexIndex) 0:29 move second child to first child ( temp highp float) 0:29 direct index ( temp highp float) 0:29 'v' ( temp highp 4-component vector of float) @@ -323,7 +329,9 @@ Shader version: 460 0:29 Constant: 0:29 0 (const int) 0:29 Convert int to float ( temp highp float) -0:29 'gl_InstanceID' ( in highp int InstanceIndex) +0:29 subtract ( temp highp int) +0:29 'gl_InstanceIndex' ( in highp int InstanceIndex) +0:29 'gl_InstanceIndex' ( in highp int InstanceIndex) 0:30 move second child to first child ( temp highp 4-component vector of float) 0:30 'io' (layout( location=0) smooth out highp 4-component vector of float) 0:30 'v' ( temp highp 4-component vector of float) @@ -331,8 +339,8 @@ Shader version: 460 0:? 'io' (layout( location=0) smooth out highp 4-component vector of float) 0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp 4-component vector of float a, uniform highp 2-component vector of float b2, uniform highp 2-component vector of float b1, uniform highp 4-component vector of float c2, uniform highp 4-component vector of float d, uniform 4-element array of highp 4-component vector of float s}) 0:? 'anon@1' (layout( column_major std430) buffer block{ coherent volatile buffer highp uint counter3, coherent volatile buffer highp uint counter2}) -0:? 'gl_VertexID' ( in int VertexIndex) -0:? 'gl_InstanceID' ( in int InstanceIndex) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) Shader version: 460 gl_FragCoord origin is upper left 0:? Sequence @@ -428,12 +436,12 @@ gl_FragCoord origin is upper left // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 88 +// Id's are bound by 92 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 72 80 86 + EntryPoint Vertex 4 "main" 72 82 90 Source GLSL 460 Name 4 "main" Name 9 "foo(" @@ -454,9 +462,9 @@ gl_FragCoord origin is upper left MemberName 35(gl_DefaultUniformBlock) 6 "c1" Name 37 "" Name 67 "v" - Name 72 "gl_VertexID" - Name 80 "gl_InstanceID" - Name 86 "io" + Name 72 "gl_VertexIndex" + Name 82 "gl_InstanceIndex" + Name 90 "io" MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Volatile MemberDecorate 14(gl_AtomicCounterBlock_0) 0 Coherent @@ -483,9 +491,9 @@ gl_FragCoord origin is upper left Decorate 35(gl_DefaultUniformBlock) Block Decorate 37 DescriptorSet 0 Decorate 37 Binding 0 - Decorate 72(gl_VertexID) BuiltIn VertexIndex - Decorate 80(gl_InstanceID) BuiltIn InstanceIndex - Decorate 86(io) Location 0 + Decorate 72(gl_VertexIndex) BuiltIn VertexIndex + Decorate 82(gl_InstanceIndex) BuiltIn InstanceIndex + Decorate 90(io) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 @@ -517,31 +525,35 @@ gl_FragCoord origin is upper left 57: 17(int) Constant 4 70: 17(int) Constant 5 71: TypePointer Input 17(int) - 72(gl_VertexID): 71(ptr) Variable Input - 77: TypePointer Function 6(float) -80(gl_InstanceID): 71(ptr) Variable Input - 85: TypePointer Output 7(fvec4) - 86(io): 85(ptr) Variable Output +72(gl_VertexIndex): 71(ptr) Variable Input + 79: TypePointer Function 6(float) +82(gl_InstanceIndex): 71(ptr) Variable Input + 89: TypePointer Output 7(fvec4) + 90(io): 89(ptr) Variable Output 4(main): 2 Function None 3 5: Label 67(v): 30(ptr) Variable Function 68: 7(fvec4) FunctionCall 9(foo() Store 67(v) 68 69: 7(fvec4) Load 67(v) - 73: 17(int) Load 72(gl_VertexID) - 74: 38(ptr) AccessChain 37 70 73 - 75: 7(fvec4) Load 74 - 76: 7(fvec4) FAdd 69 75 - Store 67(v) 76 - 78: 77(ptr) AccessChain 67(v) 22 - 79: 6(float) Load 78 - 81: 17(int) Load 80(gl_InstanceID) - 82: 6(float) ConvertSToF 81 - 83: 6(float) FSub 79 82 - 84: 77(ptr) AccessChain 67(v) 22 - Store 84 83 - 87: 7(fvec4) Load 67(v) - Store 86(io) 87 + 73: 17(int) Load 72(gl_VertexIndex) + 74: 17(int) Load 72(gl_VertexIndex) + 75: 17(int) ISub 73 74 + 76: 38(ptr) AccessChain 37 70 75 + 77: 7(fvec4) Load 76 + 78: 7(fvec4) FAdd 69 77 + Store 67(v) 78 + 80: 79(ptr) AccessChain 67(v) 22 + 81: 6(float) Load 80 + 83: 17(int) Load 82(gl_InstanceIndex) + 84: 17(int) Load 82(gl_InstanceIndex) + 85: 17(int) ISub 83 84 + 86: 6(float) ConvertSToF 85 + 87: 6(float) FSub 81 86 + 88: 79(ptr) AccessChain 67(v) 22 + Store 88 87 + 91: 7(fvec4) Load 67(v) + Store 90(io) 91 Return FunctionEnd 9(foo(): 7(fvec4) Function None 8 diff --git a/Test/vk.relaxed.stagelink.vert b/Test/vk.relaxed.stagelink.vert index 52396ac523..d2ac6af600 100644 --- a/Test/vk.relaxed.stagelink.vert +++ b/Test/vk.relaxed.stagelink.vert @@ -25,7 +25,7 @@ vec4 foo() { void main() { vec4 v = foo(); - v = v + s[gl_VertexID]; - v.x = v.x - float(gl_InstanceID); + v = v + s[gl_VertexID - gl_VertexIndex]; + v.x = v.x - float(gl_InstanceID - gl_InstanceIndex); io = v; -} \ No newline at end of file +} diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 823406c18d..ee4e2cab56 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -7701,6 +7701,11 @@ static void BuiltInVariable(const char* name, TBuiltInVariable builtIn, TSymbolT symQualifier.builtIn = builtIn; } +static void RetargetVariable(const char* from, const char* to, TSymbolTable& symbolTable) +{ + symbolTable.retargetSymbol(from, to); +} + // // For built-in variables inside a named block. // SpecialQualifier() won't ever go inside a block; their member's qualifier come @@ -7768,8 +7773,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) { // treat these built-ins as aliases of VertexIndex and InstanceIndex - BuiltInVariable("gl_VertexID", EbvVertexIndex, symbolTable); - BuiltInVariable("gl_InstanceID", EbvInstanceIndex, symbolTable); + RetargetVariable("gl_InstanceID", "gl_InstanceIndex", symbolTable); + RetargetVariable("gl_VertexID", "gl_VertexIndex", symbolTable); } if (profile != EEsProfile) { diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index 747b43666d..5b7e27fa26 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -279,8 +279,14 @@ TFunction::~TFunction() // TSymbolTableLevel::~TSymbolTableLevel() { - for (tLevel::iterator it = level.begin(); it != level.end(); ++it) - delete (*it).second; + for (tLevel::iterator it = level.begin(); it != level.end(); ++it) { + const TString& name = it->first; + auto retargetIter = std::find_if(retargetedSymbols.begin(), retargetedSymbols.end(), + [&name](const std::pair& i) { return i.first == name; }); + if (retargetIter == retargetedSymbols.end()) + delete (*it).second; + } + delete [] defaultPrecision; } @@ -418,6 +424,15 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const TSymbolTableLevel *symTableLevel = new TSymbolTableLevel(); symTableLevel->anonId = anonId; symTableLevel->thisLevel = thisLevel; + symTableLevel->retargetedSymbols.clear(); + for (auto &s : retargetedSymbols) { + // Extra constructions to make sure they use the correct allocator pool + TString newFrom; + newFrom = s.first; + TString newTo; + newTo = s.second; + symTableLevel->retargetedSymbols.push_back({std::move(newFrom), std::move(newTo)}); + } std::vector containerCopied(anonId, false); tLevel::const_iterator iter; for (iter = level.begin(); iter != level.end(); ++iter) { @@ -433,8 +448,25 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const symTableLevel->insert(*container, false); containerCopied[anon->getAnonId()] = true; } - } else + } else { + const TString& name = iter->first; + auto retargetIter = std::find_if(retargetedSymbols.begin(), retargetedSymbols.end(), + [&name](const std::pair& i) { return i.first == name; }); + if (retargetIter != retargetedSymbols.end()) + continue; symTableLevel->insert(*iter->second->clone(), false); + } + } + // Now point retargeted symbols to the newly created versions of them + for (auto &s : retargetedSymbols) { + TSymbol* sym = symTableLevel->find(s.second); + if (!sym) + continue; + + // Need to declare and assign so newS is using the correct pool allocator + TString newS; + newS = s.first; + symTableLevel->insert(newS, sym); } return symTableLevel; diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 2196093073..720999a36a 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -413,13 +413,20 @@ class TSymbolTableLevel { TSymbolTableLevel() : defaultPrecision(0), anonId(0), thisLevel(false) { } ~TSymbolTableLevel(); - bool insert(TSymbol& symbol, bool separateNameSpaces) + bool insert(const TString& name, TSymbol* symbol) { + return level.insert(tLevelPair(name, symbol)).second; + } + + bool insert(TSymbol& symbol, bool separateNameSpaces, const TString& forcedKeyName = TString()) { // // returning true means symbol was added to the table with no semantic errors // const TString& name = symbol.getName(); - if (name == "") { + if (forcedKeyName.length()) { + return level.insert(tLevelPair(forcedKeyName, &symbol)).second; + } + else if (name == "") { symbol.getAsVariable()->setAnonId(anonId++); // An empty name means an anonymous container, exposing its members to the external scope. // Give it a name and insert its members in the symbol table, pointing to the container. @@ -471,6 +478,16 @@ class TSymbolTableLevel { return true; } + void retargetSymbol(const TString& from, const TString& to) { + tLevel::const_iterator fromIt = level.find(from); + tLevel::const_iterator toIt = level.find(to); + if (fromIt == level.end() || toIt == level.end()) + return; + delete fromIt->second; + level[from] = toIt->second; + retargetedSymbols.push_back({from, to}); + } + TSymbol* find(const TString& name) const { tLevel::const_iterator it = level.find(name); @@ -583,6 +600,8 @@ class TSymbolTableLevel { tLevel level; // named mappings TPrecisionQualifier *defaultPrecision; + // pair + TVector> retargetedSymbols; int anonId; bool thisLevel; // True if this level of the symbol table is a structure scope containing member function // that are supposed to see anonymous access to member variables. @@ -788,6 +807,12 @@ class TSymbolTable { return symbol; } + void retargetSymbol(const TString& from, const TString& to) { + int level = currentLevel(); + table[level]->retargetSymbol(from, to); + } + + // Find of a symbol that returns how many layers deep of nested // structures-with-member-functions ('this' scopes) deep the symbol was // found in. From 8b87b840011b724cf76afc7241d5c4c26901910a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 17 Sep 2021 17:14:36 -0600 Subject: [PATCH 216/365] Fix SPIR-V for SampleBias Fixes #2757 --- .../hlsl.samplebias.offset.dx10.frag.out | 135 +++++++++--------- .../hlsl.samplebias.offsetarray.dx10.frag.out | 91 ++++++------ glslang/HLSL/hlslParseHelper.cpp | 6 +- glslang/HLSL/hlslParseables.cpp | 4 +- 4 files changed, 117 insertions(+), 119 deletions(-) diff --git a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out index 478091db57..291f62489c 100644 --- a/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.offset.dx10.frag.out @@ -16,9 +16,9 @@ using depth_any 0:31 Constant: 0:31 0.100000 0:31 Constant: -0:31 0.500000 -0:31 Constant: 0:31 1 (const int) +0:31 Constant: +0:31 0.500000 0:32 Sequence 0:32 move second child to first child ( temp 4-component vector of int) 0:32 'txval11' ( temp 4-component vector of int) @@ -29,9 +29,9 @@ using depth_any 0:32 Constant: 0:32 0.200000 0:32 Constant: -0:32 0.500000 -0:32 Constant: 0:32 1 (const int) +0:32 Constant: +0:32 0.500000 0:33 Sequence 0:33 move second child to first child ( temp 4-component vector of uint) 0:33 'txval12' ( temp 4-component vector of uint) @@ -42,9 +42,9 @@ using depth_any 0:33 Constant: 0:33 0.300000 0:33 Constant: -0:33 0.500000 -0:33 Constant: 0:33 1 (const int) +0:33 Constant: +0:33 0.500000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of float) 0:35 'txval20' ( temp 4-component vector of float) @@ -56,10 +56,10 @@ using depth_any 0:35 0.100000 0:35 0.200000 0:35 Constant: -0:35 0.500000 -0:35 Constant: 0:35 1 (const int) 0:35 0 (const int) +0:35 Constant: +0:35 0.500000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -71,10 +71,10 @@ using depth_any 0:36 0.300000 0:36 0.400000 0:36 Constant: -0:36 0.500000 -0:36 Constant: 0:36 1 (const int) 0:36 1 (const int) +0:36 Constant: +0:36 0.500000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -86,10 +86,10 @@ using depth_any 0:37 0.500000 0:37 0.600000 0:37 Constant: -0:37 0.500000 -0:37 Constant: 0:37 1 (const int) 0:37 -1 (const int) +0:37 Constant: +0:37 0.500000 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -102,11 +102,11 @@ using depth_any 0:39 0.200000 0:39 0.300000 0:39 Constant: -0:39 0.500000 -0:39 Constant: 0:39 1 (const int) 0:39 0 (const int) 0:39 1 (const int) +0:39 Constant: +0:39 0.500000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -119,11 +119,11 @@ using depth_any 0:40 0.500000 0:40 0.600000 0:40 Constant: -0:40 0.500000 -0:40 Constant: 0:40 1 (const int) 0:40 1 (const int) 0:40 1 (const int) +0:40 Constant: +0:40 0.500000 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -136,11 +136,11 @@ using depth_any 0:41 0.800000 0:41 0.900000 0:41 Constant: -0:41 0.500000 -0:41 Constant: 0:41 1 (const int) 0:41 0 (const int) 0:41 -1 (const int) +0:41 Constant: +0:41 0.500000 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -218,9 +218,9 @@ using depth_any 0:31 Constant: 0:31 0.100000 0:31 Constant: -0:31 0.500000 -0:31 Constant: 0:31 1 (const int) +0:31 Constant: +0:31 0.500000 0:32 Sequence 0:32 move second child to first child ( temp 4-component vector of int) 0:32 'txval11' ( temp 4-component vector of int) @@ -231,9 +231,9 @@ using depth_any 0:32 Constant: 0:32 0.200000 0:32 Constant: -0:32 0.500000 -0:32 Constant: 0:32 1 (const int) +0:32 Constant: +0:32 0.500000 0:33 Sequence 0:33 move second child to first child ( temp 4-component vector of uint) 0:33 'txval12' ( temp 4-component vector of uint) @@ -244,9 +244,9 @@ using depth_any 0:33 Constant: 0:33 0.300000 0:33 Constant: -0:33 0.500000 -0:33 Constant: 0:33 1 (const int) +0:33 Constant: +0:33 0.500000 0:35 Sequence 0:35 move second child to first child ( temp 4-component vector of float) 0:35 'txval20' ( temp 4-component vector of float) @@ -258,10 +258,10 @@ using depth_any 0:35 0.100000 0:35 0.200000 0:35 Constant: -0:35 0.500000 -0:35 Constant: 0:35 1 (const int) 0:35 0 (const int) +0:35 Constant: +0:35 0.500000 0:36 Sequence 0:36 move second child to first child ( temp 4-component vector of int) 0:36 'txval21' ( temp 4-component vector of int) @@ -273,10 +273,10 @@ using depth_any 0:36 0.300000 0:36 0.400000 0:36 Constant: -0:36 0.500000 -0:36 Constant: 0:36 1 (const int) 0:36 1 (const int) +0:36 Constant: +0:36 0.500000 0:37 Sequence 0:37 move second child to first child ( temp 4-component vector of uint) 0:37 'txval22' ( temp 4-component vector of uint) @@ -288,10 +288,10 @@ using depth_any 0:37 0.500000 0:37 0.600000 0:37 Constant: -0:37 0.500000 -0:37 Constant: 0:37 1 (const int) 0:37 -1 (const int) +0:37 Constant: +0:37 0.500000 0:39 Sequence 0:39 move second child to first child ( temp 4-component vector of float) 0:39 'txval30' ( temp 4-component vector of float) @@ -304,11 +304,11 @@ using depth_any 0:39 0.200000 0:39 0.300000 0:39 Constant: -0:39 0.500000 -0:39 Constant: 0:39 1 (const int) 0:39 0 (const int) 0:39 1 (const int) +0:39 Constant: +0:39 0.500000 0:40 Sequence 0:40 move second child to first child ( temp 4-component vector of int) 0:40 'txval31' ( temp 4-component vector of int) @@ -321,11 +321,11 @@ using depth_any 0:40 0.500000 0:40 0.600000 0:40 Constant: -0:40 0.500000 -0:40 Constant: 0:40 1 (const int) 0:40 1 (const int) 0:40 1 (const int) +0:40 Constant: +0:40 0.500000 0:41 Sequence 0:41 move second child to first child ( temp 4-component vector of uint) 0:41 'txval32' ( temp 4-component vector of uint) @@ -338,11 +338,11 @@ using depth_any 0:41 0.800000 0:41 0.900000 0:41 Constant: -0:41 0.500000 -0:41 Constant: 0:41 1 (const int) 0:41 0 (const int) 0:41 -1 (const int) +0:41 Constant: +0:41 0.500000 0:45 move second child to first child ( temp 4-component vector of float) 0:45 Color: direct index for structure ( temp 4-component vector of float) 0:45 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -399,7 +399,6 @@ using depth_any 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 161 @@ -489,12 +488,12 @@ Validation failed 20(g_sSamp): 19(ptr) Variable UniformConstant 22: TypeSampledImage 14 24: 6(float) Constant 1036831949 - 25: 6(float) Constant 1056964608 - 26: TypeInt 32 1 - 27: 26(int) Constant 1 - 29: TypeVector 26(int) 4 + 25: TypeInt 32 1 + 26: 25(int) Constant 1 + 27: 6(float) Constant 1056964608 + 29: TypeVector 25(int) 4 30: TypePointer Function 29(ivec4) - 32: TypeImage 26(int) 1D sampled format:Unknown + 32: TypeImage 25(int) 1D sampled format:Unknown 33: TypePointer UniformConstant 32 34(g_tTex1di4): 33(ptr) Variable UniformConstant 37: TypeSampledImage 32 @@ -513,38 +512,38 @@ Validation failed 60: TypeSampledImage 55 62: TypeVector 6(float) 2 63: 62(fvec2) ConstantComposite 24 39 - 64: TypeVector 26(int) 2 - 65: 26(int) Constant 0 - 66: 64(ivec2) ConstantComposite 27 65 - 69: TypeImage 26(int) 2D sampled format:Unknown + 64: TypeVector 25(int) 2 + 65: 25(int) Constant 0 + 66: 64(ivec2) ConstantComposite 26 65 + 69: TypeImage 25(int) 2D sampled format:Unknown 70: TypePointer UniformConstant 69 71(g_tTex2di4): 70(ptr) Variable UniformConstant 74: TypeSampledImage 69 76: 6(float) Constant 1053609165 77: 62(fvec2) ConstantComposite 52 76 - 78: 64(ivec2) ConstantComposite 27 27 + 78: 64(ivec2) ConstantComposite 26 26 81: TypeImage 41(int) 2D sampled format:Unknown 82: TypePointer UniformConstant 81 83(g_tTex2du4): 82(ptr) Variable UniformConstant 86: TypeSampledImage 81 88: 6(float) Constant 1058642330 - 89: 62(fvec2) ConstantComposite 25 88 - 90: 26(int) Constant 4294967295 - 91: 64(ivec2) ConstantComposite 27 90 + 89: 62(fvec2) ConstantComposite 27 88 + 90: 25(int) Constant 4294967295 + 91: 64(ivec2) ConstantComposite 26 90 94: TypeImage 6(float) 3D sampled format:Unknown 95: TypePointer UniformConstant 94 96(g_tTex3df4): 95(ptr) Variable UniformConstant 99: TypeSampledImage 94 101: TypeVector 6(float) 3 102: 101(fvec3) ConstantComposite 24 39 52 - 103: TypeVector 26(int) 3 - 104: 103(ivec3) ConstantComposite 27 65 27 - 107: TypeImage 26(int) 3D sampled format:Unknown + 103: TypeVector 25(int) 3 + 104: 103(ivec3) ConstantComposite 26 65 26 + 107: TypeImage 25(int) 3D sampled format:Unknown 108: TypePointer UniformConstant 107 109(g_tTex3di4): 108(ptr) Variable UniformConstant 112: TypeSampledImage 107 - 114: 101(fvec3) ConstantComposite 76 25 88 - 115: 103(ivec3) ConstantComposite 27 27 27 + 114: 101(fvec3) ConstantComposite 76 27 88 + 115: 103(ivec3) ConstantComposite 26 26 26 118: TypeImage 41(int) 3D sampled format:Unknown 119: TypePointer UniformConstant 118 120(g_tTex3du4): 119(ptr) Variable UniformConstant @@ -553,7 +552,7 @@ Validation failed 126: 6(float) Constant 1061997773 127: 6(float) Constant 1063675494 128: 101(fvec3) ConstantComposite 125 126 127 - 129: 103(ivec3) ConstantComposite 27 65 90 + 129: 103(ivec3) ConstantComposite 26 65 90 131: TypePointer Function 8(PS_OUTPUT) 133: 6(float) Constant 1065353216 134: 7(fvec4) ConstantComposite 133 133 133 133 @@ -566,7 +565,7 @@ Validation failed 152: TypeImage 6(float) Cube sampled format:Unknown 153: TypePointer UniformConstant 152 154(g_tTexcdf4): 153(ptr) Variable UniformConstant - 155: TypeImage 26(int) Cube sampled format:Unknown + 155: TypeImage 25(int) Cube sampled format:Unknown 156: TypePointer UniformConstant 155 157(g_tTexcdi4): 156(ptr) Variable UniformConstant 158: TypeImage 41(int) Cube sampled format:Unknown @@ -580,7 +579,7 @@ Validation failed 145: 12(ptr) AccessChain 141(flattenTemp) 65 146: 7(fvec4) Load 145 Store 144(@entryPointOutput.Color) 146 - 149: 136(ptr) AccessChain 141(flattenTemp) 27 + 149: 136(ptr) AccessChain 141(flattenTemp) 26 150: 6(float) Load 149 Store 148(@entryPointOutput.Depth) 150 Return @@ -600,51 +599,51 @@ Validation failed 17: 14 Load 16(g_tTex1df4) 21: 18 Load 20(g_sSamp) 23: 22 SampledImage 17 21 - 28: 7(fvec4) ImageSampleImplicitLod 23 24 Bias ConstOffset 27 25 + 28: 7(fvec4) ImageSampleImplicitLod 23 24 Bias ConstOffset 27 26 Store 13(txval10) 28 35: 32 Load 34(g_tTex1di4) 36: 18 Load 20(g_sSamp) 38: 37 SampledImage 35 36 - 40: 29(ivec4) ImageSampleImplicitLod 38 39 Bias ConstOffset 27 25 + 40: 29(ivec4) ImageSampleImplicitLod 38 39 Bias ConstOffset 27 26 Store 31(txval11) 40 48: 45 Load 47(g_tTex1du4) 49: 18 Load 20(g_sSamp) 51: 50 SampledImage 48 49 - 53: 42(ivec4) ImageSampleImplicitLod 51 52 Bias ConstOffset 27 25 + 53: 42(ivec4) ImageSampleImplicitLod 51 52 Bias ConstOffset 27 26 Store 44(txval12) 53 58: 55 Load 57(g_tTex2df4) 59: 18 Load 20(g_sSamp) 61: 60 SampledImage 58 59 - 67: 7(fvec4) ImageSampleImplicitLod 61 63 Bias ConstOffset 66 25 + 67: 7(fvec4) ImageSampleImplicitLod 61 63 Bias ConstOffset 27 66 Store 54(txval20) 67 72: 69 Load 71(g_tTex2di4) 73: 18 Load 20(g_sSamp) 75: 74 SampledImage 72 73 - 79: 29(ivec4) ImageSampleImplicitLod 75 77 Bias ConstOffset 78 25 + 79: 29(ivec4) ImageSampleImplicitLod 75 77 Bias ConstOffset 27 78 Store 68(txval21) 79 84: 81 Load 83(g_tTex2du4) 85: 18 Load 20(g_sSamp) 87: 86 SampledImage 84 85 - 92: 42(ivec4) ImageSampleImplicitLod 87 89 Bias ConstOffset 91 25 + 92: 42(ivec4) ImageSampleImplicitLod 87 89 Bias ConstOffset 27 91 Store 80(txval22) 92 97: 94 Load 96(g_tTex3df4) 98: 18 Load 20(g_sSamp) 100: 99 SampledImage 97 98 - 105: 7(fvec4) ImageSampleImplicitLod 100 102 Bias ConstOffset 104 25 + 105: 7(fvec4) ImageSampleImplicitLod 100 102 Bias ConstOffset 27 104 Store 93(txval30) 105 110: 107 Load 109(g_tTex3di4) 111: 18 Load 20(g_sSamp) 113: 112 SampledImage 110 111 - 116: 29(ivec4) ImageSampleImplicitLod 113 114 Bias ConstOffset 115 25 + 116: 29(ivec4) ImageSampleImplicitLod 113 114 Bias ConstOffset 27 115 Store 106(txval31) 116 121: 118 Load 120(g_tTex3du4) 122: 18 Load 20(g_sSamp) 124: 123 SampledImage 121 122 - 130: 42(ivec4) ImageSampleImplicitLod 124 128 Bias ConstOffset 129 25 + 130: 42(ivec4) ImageSampleImplicitLod 124 128 Bias ConstOffset 27 129 Store 117(txval32) 130 135: 12(ptr) AccessChain 132(psout) 65 Store 135 134 - 137: 136(ptr) AccessChain 132(psout) 27 + 137: 136(ptr) AccessChain 132(psout) 26 Store 137 133 138:8(PS_OUTPUT) Load 132(psout) ReturnValue 138 diff --git a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out index f5aff67f01..a5bb613970 100644 --- a/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out +++ b/Test/baseResults/hlsl.samplebias.offsetarray.dx10.frag.out @@ -17,9 +17,9 @@ using depth_any 0:23 0.100000 0:23 0.200000 0:23 Constant: -0:23 0.500000 -0:23 Constant: 0:23 0 (const int) +0:23 Constant: +0:23 0.500000 0:24 Sequence 0:24 move second child to first child ( temp 4-component vector of int) 0:24 'txval11' ( temp 4-component vector of int) @@ -31,9 +31,9 @@ using depth_any 0:24 0.200000 0:24 0.300000 0:24 Constant: -0:24 0.500000 -0:24 Constant: 0:24 1 (const int) +0:24 Constant: +0:24 0.500000 0:25 Sequence 0:25 move second child to first child ( temp 4-component vector of uint) 0:25 'txval12' ( temp 4-component vector of uint) @@ -45,9 +45,9 @@ using depth_any 0:25 0.300000 0:25 0.400000 0:25 Constant: -0:25 0.500000 -0:25 Constant: 0:25 2 (const int) +0:25 Constant: +0:25 0.500000 0:27 Sequence 0:27 move second child to first child ( temp 4-component vector of float) 0:27 'txval20' ( temp 4-component vector of float) @@ -60,10 +60,10 @@ using depth_any 0:27 0.200000 0:27 0.300000 0:27 Constant: -0:27 0.500000 -0:27 Constant: 0:27 0 (const int) 0:27 0 (const int) +0:27 Constant: +0:27 0.500000 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval21' ( temp 4-component vector of int) @@ -76,10 +76,10 @@ using depth_any 0:28 0.400000 0:28 0.500000 0:28 Constant: -0:28 0.500000 -0:28 Constant: 0:28 0 (const int) 0:28 0 (const int) +0:28 Constant: +0:28 0.500000 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval22' ( temp 4-component vector of uint) @@ -92,10 +92,10 @@ using depth_any 0:29 0.600000 0:29 0.700000 0:29 Constant: -0:29 0.500000 -0:29 Constant: 0:29 0 (const int) 0:29 1 (const int) +0:29 Constant: +0:29 0.500000 0:33 move second child to first child ( temp 4-component vector of float) 0:33 Color: direct index for structure ( temp 4-component vector of float) 0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -168,9 +168,9 @@ using depth_any 0:23 0.100000 0:23 0.200000 0:23 Constant: -0:23 0.500000 -0:23 Constant: 0:23 0 (const int) +0:23 Constant: +0:23 0.500000 0:24 Sequence 0:24 move second child to first child ( temp 4-component vector of int) 0:24 'txval11' ( temp 4-component vector of int) @@ -182,9 +182,9 @@ using depth_any 0:24 0.200000 0:24 0.300000 0:24 Constant: -0:24 0.500000 -0:24 Constant: 0:24 1 (const int) +0:24 Constant: +0:24 0.500000 0:25 Sequence 0:25 move second child to first child ( temp 4-component vector of uint) 0:25 'txval12' ( temp 4-component vector of uint) @@ -196,9 +196,9 @@ using depth_any 0:25 0.300000 0:25 0.400000 0:25 Constant: -0:25 0.500000 -0:25 Constant: 0:25 2 (const int) +0:25 Constant: +0:25 0.500000 0:27 Sequence 0:27 move second child to first child ( temp 4-component vector of float) 0:27 'txval20' ( temp 4-component vector of float) @@ -211,10 +211,10 @@ using depth_any 0:27 0.200000 0:27 0.300000 0:27 Constant: -0:27 0.500000 -0:27 Constant: 0:27 0 (const int) 0:27 0 (const int) +0:27 Constant: +0:27 0.500000 0:28 Sequence 0:28 move second child to first child ( temp 4-component vector of int) 0:28 'txval21' ( temp 4-component vector of int) @@ -227,10 +227,10 @@ using depth_any 0:28 0.400000 0:28 0.500000 0:28 Constant: -0:28 0.500000 -0:28 Constant: 0:28 0 (const int) 0:28 0 (const int) +0:28 Constant: +0:28 0.500000 0:29 Sequence 0:29 move second child to first child ( temp 4-component vector of uint) 0:29 'txval22' ( temp 4-component vector of uint) @@ -243,10 +243,10 @@ using depth_any 0:29 0.600000 0:29 0.700000 0:29 Constant: -0:29 0.500000 -0:29 Constant: 0:29 0 (const int) 0:29 1 (const int) +0:29 Constant: +0:29 0.500000 0:33 move second child to first child ( temp 4-component vector of float) 0:33 Color: direct index for structure ( temp 4-component vector of float) 0:33 'psout' ( temp structure{ temp 4-component vector of float Color, temp float Depth}) @@ -297,7 +297,6 @@ using depth_any 0:? '@entryPointOutput.Depth' ( out float FragDepth) 0:? '@entryPointOutput.Color' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 118 @@ -369,18 +368,18 @@ Validation failed 25: 6(float) Constant 1036831949 26: 6(float) Constant 1045220557 27: 24(fvec2) ConstantComposite 25 26 - 28: 6(float) Constant 1056964608 - 29: TypeInt 32 1 - 30: 29(int) Constant 0 - 32: TypeVector 29(int) 4 + 28: TypeInt 32 1 + 29: 28(int) Constant 0 + 30: 6(float) Constant 1056964608 + 32: TypeVector 28(int) 4 33: TypePointer Function 32(ivec4) - 35: TypeImage 29(int) 1D array sampled format:Unknown + 35: TypeImage 28(int) 1D array sampled format:Unknown 36: TypePointer UniformConstant 35 37(g_tTex1di4): 36(ptr) Variable UniformConstant 40: TypeSampledImage 35 42: 6(float) Constant 1050253722 43: 24(fvec2) ConstantComposite 26 42 - 44: 29(int) Constant 1 + 44: 28(int) Constant 1 46: TypeInt 32 0 47: TypeVector 46(int) 4 48: TypePointer Function 47(ivec4) @@ -390,28 +389,28 @@ Validation failed 55: TypeSampledImage 50 57: 6(float) Constant 1053609165 58: 24(fvec2) ConstantComposite 42 57 - 59: 29(int) Constant 2 + 59: 28(int) Constant 2 62: TypeImage 6(float) 2D array sampled format:Unknown 63: TypePointer UniformConstant 62 64(g_tTex2df4): 63(ptr) Variable UniformConstant 67: TypeSampledImage 62 69: TypeVector 6(float) 3 70: 69(fvec3) ConstantComposite 25 26 42 - 71: TypeVector 29(int) 2 - 72: 71(ivec2) ConstantComposite 30 30 - 75: TypeImage 29(int) 2D array sampled format:Unknown + 71: TypeVector 28(int) 2 + 72: 71(ivec2) ConstantComposite 29 29 + 75: TypeImage 28(int) 2D array sampled format:Unknown 76: TypePointer UniformConstant 75 77(g_tTex2di4): 76(ptr) Variable UniformConstant 80: TypeSampledImage 75 - 82: 69(fvec3) ConstantComposite 42 57 28 + 82: 69(fvec3) ConstantComposite 42 57 30 85: TypeImage 46(int) 2D array sampled format:Unknown 86: TypePointer UniformConstant 85 87(g_tTex2du4): 86(ptr) Variable UniformConstant 90: TypeSampledImage 85 92: 6(float) Constant 1058642330 93: 6(float) Constant 1060320051 - 94: 69(fvec3) ConstantComposite 28 92 93 - 95: 71(ivec2) ConstantComposite 30 44 + 94: 69(fvec3) ConstantComposite 30 92 93 + 95: 71(ivec2) ConstantComposite 29 44 97: TypePointer Function 8(PS_OUTPUT) 99: 6(float) Constant 1065353216 100: 7(fvec4) ConstantComposite 99 99 99 99 @@ -426,7 +425,7 @@ Validation failed 107(flattenTemp): 97(ptr) Variable Function 108:8(PS_OUTPUT) FunctionCall 10(@main() Store 107(flattenTemp) 108 - 111: 12(ptr) AccessChain 107(flattenTemp) 30 + 111: 12(ptr) AccessChain 107(flattenTemp) 29 112: 7(fvec4) Load 111 Store 110(@entryPointOutput.Color) 112 115: 102(ptr) AccessChain 107(flattenTemp) 44 @@ -446,34 +445,34 @@ Validation failed 17: 14 Load 16(g_tTex1df4) 21: 18 Load 20(g_sSamp) 23: 22 SampledImage 17 21 - 31: 7(fvec4) ImageSampleImplicitLod 23 27 Bias ConstOffset 30 28 + 31: 7(fvec4) ImageSampleImplicitLod 23 27 Bias ConstOffset 30 29 Store 13(txval10) 31 38: 35 Load 37(g_tTex1di4) 39: 18 Load 20(g_sSamp) 41: 40 SampledImage 38 39 - 45: 32(ivec4) ImageSampleImplicitLod 41 43 Bias ConstOffset 44 28 + 45: 32(ivec4) ImageSampleImplicitLod 41 43 Bias ConstOffset 30 44 Store 34(txval11) 45 53: 50 Load 52(g_tTex1du4) 54: 18 Load 20(g_sSamp) 56: 55 SampledImage 53 54 - 60: 47(ivec4) ImageSampleImplicitLod 56 58 Bias ConstOffset 59 28 + 60: 47(ivec4) ImageSampleImplicitLod 56 58 Bias ConstOffset 30 59 Store 49(txval12) 60 65: 62 Load 64(g_tTex2df4) 66: 18 Load 20(g_sSamp) 68: 67 SampledImage 65 66 - 73: 7(fvec4) ImageSampleImplicitLod 68 70 Bias ConstOffset 72 28 + 73: 7(fvec4) ImageSampleImplicitLod 68 70 Bias ConstOffset 30 72 Store 61(txval20) 73 78: 75 Load 77(g_tTex2di4) 79: 18 Load 20(g_sSamp) 81: 80 SampledImage 78 79 - 83: 32(ivec4) ImageSampleImplicitLod 81 82 Bias ConstOffset 72 28 + 83: 32(ivec4) ImageSampleImplicitLod 81 82 Bias ConstOffset 30 72 Store 74(txval21) 83 88: 85 Load 87(g_tTex2du4) 89: 18 Load 20(g_sSamp) 91: 90 SampledImage 88 89 - 96: 47(ivec4) ImageSampleImplicitLod 91 94 Bias ConstOffset 95 28 + 96: 47(ivec4) ImageSampleImplicitLod 91 94 Bias ConstOffset 30 95 Store 84(txval22) 96 - 101: 12(ptr) AccessChain 98(psout) 30 + 101: 12(ptr) AccessChain 98(psout) 29 Store 101 100 103: 102(ptr) AccessChain 98(psout) 44 Store 103 99 diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index 02aac3c69e..39b3ecac9f 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -4017,12 +4017,12 @@ void HlslParseContext::decomposeSampleMethods(const TSourceLoc& loc, TIntermType txsample->getSequence().push_back(txcombine); txsample->getSequence().push_back(argCoord); - if (argBias != nullptr) - txsample->getSequence().push_back(argBias); - if (argOffset != nullptr) txsample->getSequence().push_back(argOffset); + if (argBias != nullptr) + txsample->getSequence().push_back(argBias); + node = convertReturn(txsample, sampler); break; diff --git a/glslang/HLSL/hlslParseables.cpp b/glslang/HLSL/hlslParseables.cpp index 4673b46011..15918dc376 100644 --- a/glslang/HLSL/hlslParseables.cpp +++ b/glslang/HLSL/hlslParseables.cpp @@ -665,8 +665,8 @@ void TBuiltInParseablesHlsl::initialize(int /*version*/, EProfile /*profile*/, c { "Sample", /*!O*/ "V4", nullptr, "%@,S,V", "FIU,S,F", EShLangPS, true }, { "Sample", /* O*/ "V4", nullptr, "%@,S,V,", "FIU,S,F,I", EShLangPS, true }, - { "SampleBias", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,S,F,", EShLangPS, true }, - { "SampleBias", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,S,F,,I", EShLangPS, true }, + { "SampleBias", /*!O*/ "V4", nullptr, "%@,S,V,S", "FIU,S,F,F", EShLangPS, true }, + { "SampleBias", /* O*/ "V4", nullptr, "%@,S,V,S,V", "FIU,S,F,F,I", EShLangPS, true }, // TODO: FXC accepts int/uint samplers here. unclear what that means. { "SampleCmp", /*!O*/ "S", "F", "%@,S,V,S", "FIU,s,F,", EShLangPS, true }, From 3f04389a1806c74355236ecd0a2493d701b19d87 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Wed, 22 Sep 2021 13:41:10 -0400 Subject: [PATCH 217/365] Auto push constant blocks (#2764) * add ability to upgrade uniform block to push constants assuming it fits within the size limit imposed by the caller * allow selecting the packing for the auto push constants * check the size using the potential layout packing of the push constants --- glslang/Include/Types.h | 10 +++++++ glslang/MachineIndependent/iomapper.cpp | 31 +++++++++++++++++++++ glslang/MachineIndependent/iomapper.h | 16 ++++++++++- glslang/MachineIndependent/linkValidate.cpp | 2 +- 4 files changed, 57 insertions(+), 2 deletions(-) diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index a6bf191d75..f4f3f341d1 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -741,6 +741,16 @@ class TQualifier { } } + bool isUniform() const + { + switch (storage) { + case EvqUniform: + return true; + default: + return false; + } + } + bool isIo() const { switch (storage) { diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 7e12864f36..3486ea6d05 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -1633,6 +1633,37 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second); }); resolver->endResolve(EShLangCount); + if (autoPushConstantBlockName.length()) { + bool upgraded = false; + for (size_t stage = 0; stage < EShLangCount; stage++) { + if (intermediates[stage] != nullptr) { + TVarLiveMap** pUniformVarMap = uniformResolve.uniformVarMap; + auto at = pUniformVarMap[stage]->find(autoPushConstantBlockName); + if (at == pUniformVarMap[stage]->end()) + continue; + TQualifier& qualifier = at->second.symbol->getQualifier(); + if (!qualifier.isUniform()) + continue; + TType& t = at->second.symbol->getWritableType(); + int size, stride; + TIntermediate::getBaseAlignment(t, size, stride, autoPushConstantBlockPacking, + qualifier.layoutMatrix == ElmRowMajor); + if (size <= int(autoPushConstantMaxSize)) { + qualifier.setBlockStorage(EbsPushConstant); + qualifier.layoutPacking = autoPushConstantBlockPacking; + upgraded = true; + } + } + } + // If it's been upgraded to push_constant, then remove it from the uniformVector + // so it doesn't get a set/binding assigned to it. + if (upgraded) { + auto at = std::find_if(uniformVector.begin(), uniformVector.end(), + [this](const TVarLivePair& p) { return p.first == autoPushConstantBlockName; }); + if (at != uniformVector.end()) + uniformVector.erase(at); + } + } for (size_t stage = 0; stage < EShLangCount; stage++) { if (intermediates[stage] != nullptr) { // traverse each stage, set new location to each input/output and unifom symbol, set new binding to diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 07357c2ef4..843ea73c01 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -291,7 +291,7 @@ class TIoMapper { bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; } }; -// I/O mapper for OpenGL +// I/O mapper for GLSL class TGlslIoMapper : public TIoMapper { public: TGlslIoMapper() { @@ -301,6 +301,8 @@ class TGlslIoMapper : public TIoMapper { memset(intermediates, 0, sizeof(TIntermediate*) * (EShLangCount + 1)); profile = ENoProfile; version = 0; + autoPushConstantMaxSize = 128; + autoPushConstantBlockPacking = ElpStd430; } virtual ~TGlslIoMapper() { for (size_t stage = 0; stage < EShLangCount; stage++) { @@ -319,6 +321,13 @@ class TGlslIoMapper : public TIoMapper { if (intermediates[stage] != nullptr) intermediates[stage] = nullptr; } + } + // If set, the uniform block with the given name will be changed to be backed by + // push_constant if it's size is <= maxSize + void setAutoPushConstantBlock(const char* name, unsigned int maxSize, TLayoutPacking packing) { + autoPushConstantBlockName = name; + autoPushConstantMaxSize = maxSize; + autoPushConstantBlockPacking = packing; } // grow the reflection stage by stage bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*) override; @@ -329,6 +338,11 @@ class TGlslIoMapper : public TIoMapper { bool hadError = false; EProfile profile; int version; + +private: + TString autoPushConstantBlockName; + unsigned int autoPushConstantMaxSize; + TLayoutPacking autoPushConstantBlockPacking; }; } // end namespace glslang diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 4a68130a44..4edd2a9052 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -1934,7 +1934,7 @@ int TIntermediate::getBaseAlignment(const TType& type, int& size, int& stride, T } // rule 9 - if (type.getBasicType() == EbtStruct) { + if (type.getBasicType() == EbtStruct || type.getBasicType() == EbtBlock) { const TTypeList& memberList = *type.getStruct(); size = 0; From 4ea41b650d2f2465b64e169e42e27e20928bbcad Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 22 Sep 2021 15:12:49 -0600 Subject: [PATCH 218/365] Fix unreachable code in getSampledType() Fixed #2763 --- SPIRV/GlslangToSpv.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 71b00d7216..421e650e86 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -3940,12 +3940,14 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler) builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch); builder.addCapability(spv::CapabilityFloat16ImageAMD); return builder.makeFloatType(16); - case glslang::EbtInt64: return builder.makeIntType(64); + case glslang::EbtInt64: builder.addExtension(spv::E_SPV_EXT_shader_image_int64); - builder.addCapability(spv::CapabilityFloat16ImageAMD); - case glslang::EbtUint64: return builder.makeUintType(64); + builder.addCapability(spv::CapabilityInt64ImageEXT); + return builder.makeIntType(64); + case glslang::EbtUint64: builder.addExtension(spv::E_SPV_EXT_shader_image_int64); - builder.addCapability(spv::CapabilityFloat16ImageAMD); + builder.addCapability(spv::CapabilityInt64ImageEXT); + return builder.makeUintType(64); #endif default: assert(0); From 3d03b7822e88cdd78512598560378ed589abe428 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 23 Sep 2021 10:40:43 -0600 Subject: [PATCH 219/365] Scalarize vector readFirstInvocationARB (#2766) Fixes #2761 --- SPIRV/GlslangToSpv.cpp | 6 +- Test/baseResults/spv.shaderBallot.comp.out | 258 +++++++++++++-------- 2 files changed, 161 insertions(+), 103 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 71b00d7216..1117470960 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -7506,6 +7506,8 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op break; case glslang::EOpReadFirstInvocation: opCode = spv::OpSubgroupFirstInvocationKHR; + if (builder.isVectorType(typeId)) + return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands); break; case glslang::EOpBallot: { @@ -7630,7 +7632,7 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin || op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax || op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast || - op == spv::OpSubgroupReadInvocationKHR || + op == spv::OpSubgroupReadInvocationKHR || op == spv::OpSubgroupFirstInvocationKHR || op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD || op == spv::OpGroupSMinNonUniformAMD || op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD || @@ -7659,6 +7661,8 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv spvGroupOperands.push_back(scalar); spv::IdImmediate operand = { true, operands[1] }; spvGroupOperands.push_back(operand); + } else if (op == spv::OpSubgroupFirstInvocationKHR) { + spvGroupOperands.push_back(scalar); } else if (op == spv::OpGroupBroadcast) { spv::IdImmediate scope = { true, builder.makeUintConstant(spv::ScopeSubgroup) }; spvGroupOperands.push_back(scope); diff --git a/Test/baseResults/spv.shaderBallot.comp.out b/Test/baseResults/spv.shaderBallot.comp.out index 93385297da..2a0106e661 100644 --- a/Test/baseResults/spv.shaderBallot.comp.out +++ b/Test/baseResults/spv.shaderBallot.comp.out @@ -1,7 +1,7 @@ spv.shaderBallot.comp // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 343 +// Id's are bound by 397 Capability Shader Capability Int64 @@ -42,7 +42,7 @@ spv.shaderBallot.comp Decorate 72(Buffers) BufferBlock Decorate 75(data) DescriptorSet 0 Decorate 75(data) Binding 0 - Decorate 342 BuiltIn WorkgroupSize + Decorate 396 BuiltIn WorkgroupSize 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -89,8 +89,8 @@ spv.shaderBallot.comp 196: TypePointer Uniform 6(int) 203: TypePointer Uniform 20(ivec4) 218: TypeVector 6(int) 3 - 341: 6(int) Constant 8 - 342: 218(ivec3) ConstantComposite 341 341 100 + 395: 6(int) Constant 8 + 396: 218(ivec3) ConstantComposite 395 395 100 4(main): 2 Function None 3 5: Label 8(invocation): 7(ptr) Variable Function @@ -329,107 +329,161 @@ spv.shaderBallot.comp 257: 88(ptr) AccessChain 75(data) 86 77 258: 69(fvec4) Load 257 259: 87(fvec2) VectorShuffle 258 258 0 1 - 260: 87(fvec2) SubgroupFirstInvocationKHR 259 - 261: 79(ptr) AccessChain 75(data) 256 77 78 - 262: 68(float) CompositeExtract 260 0 - Store 261 262 - 263: 79(ptr) AccessChain 75(data) 256 77 100 - 264: 68(float) CompositeExtract 260 1 - Store 263 264 - 265: 6(int) Load 8(invocation) - 266: 88(ptr) AccessChain 75(data) 104 77 - 267: 69(fvec4) Load 266 - 268: 105(fvec3) VectorShuffle 267 267 0 1 2 - 269: 105(fvec3) SubgroupFirstInvocationKHR 268 - 270: 79(ptr) AccessChain 75(data) 265 77 78 - 271: 68(float) CompositeExtract 269 0 - Store 270 271 - 272: 79(ptr) AccessChain 75(data) 265 77 100 - 273: 68(float) CompositeExtract 269 1 - Store 272 273 - 274: 79(ptr) AccessChain 75(data) 265 77 121 - 275: 68(float) CompositeExtract 269 2 - Store 274 275 - 276: 6(int) Load 8(invocation) - 277: 88(ptr) AccessChain 75(data) 125 77 - 278: 69(fvec4) Load 277 - 279: 69(fvec4) SubgroupFirstInvocationKHR 278 - 280: 88(ptr) AccessChain 75(data) 276 77 - Store 280 279 - 281: 6(int) Load 8(invocation) - 282: 140(ptr) AccessChain 75(data) 77 86 78 - 283: 70(int) Load 282 - 284: 70(int) SubgroupFirstInvocationKHR 283 - 285: 140(ptr) AccessChain 75(data) 281 86 78 - Store 285 284 + 260: 68(float) CompositeExtract 259 0 + 261: 68(float) SubgroupFirstInvocationKHR 260 + 262: 68(float) CompositeExtract 259 1 + 263: 68(float) SubgroupFirstInvocationKHR 262 + 264: 87(fvec2) CompositeConstruct 261 263 + 265: 79(ptr) AccessChain 75(data) 256 77 78 + 266: 68(float) CompositeExtract 264 0 + Store 265 266 + 267: 79(ptr) AccessChain 75(data) 256 77 100 + 268: 68(float) CompositeExtract 264 1 + Store 267 268 + 269: 6(int) Load 8(invocation) + 270: 88(ptr) AccessChain 75(data) 104 77 + 271: 69(fvec4) Load 270 + 272: 105(fvec3) VectorShuffle 271 271 0 1 2 + 273: 68(float) CompositeExtract 272 0 + 274: 68(float) SubgroupFirstInvocationKHR 273 + 275: 68(float) CompositeExtract 272 1 + 276: 68(float) SubgroupFirstInvocationKHR 275 + 277: 68(float) CompositeExtract 272 2 + 278: 68(float) SubgroupFirstInvocationKHR 277 + 279: 105(fvec3) CompositeConstruct 274 276 278 + 280: 79(ptr) AccessChain 75(data) 269 77 78 + 281: 68(float) CompositeExtract 279 0 + Store 280 281 + 282: 79(ptr) AccessChain 75(data) 269 77 100 + 283: 68(float) CompositeExtract 279 1 + Store 282 283 + 284: 79(ptr) AccessChain 75(data) 269 77 121 + 285: 68(float) CompositeExtract 279 2 + Store 284 285 286: 6(int) Load 8(invocation) - 287: 148(ptr) AccessChain 75(data) 86 86 - 288: 71(ivec4) Load 287 - 289: 147(ivec2) VectorShuffle 288 288 0 1 - 290: 147(ivec2) SubgroupFirstInvocationKHR 289 - 291: 140(ptr) AccessChain 75(data) 286 86 78 - 292: 70(int) CompositeExtract 290 0 - Store 291 292 - 293: 140(ptr) AccessChain 75(data) 286 86 100 - 294: 70(int) CompositeExtract 290 1 - Store 293 294 - 295: 6(int) Load 8(invocation) - 296: 148(ptr) AccessChain 75(data) 104 86 - 297: 71(ivec4) Load 296 - 298: 163(ivec3) VectorShuffle 297 297 0 1 2 - 299: 163(ivec3) SubgroupFirstInvocationKHR 298 - 300: 140(ptr) AccessChain 75(data) 295 86 78 - 301: 70(int) CompositeExtract 299 0 - Store 300 301 - 302: 140(ptr) AccessChain 75(data) 295 86 100 - 303: 70(int) CompositeExtract 299 1 - Store 302 303 - 304: 140(ptr) AccessChain 75(data) 295 86 121 - 305: 70(int) CompositeExtract 299 2 - Store 304 305 - 306: 6(int) Load 8(invocation) - 307: 148(ptr) AccessChain 75(data) 125 86 - 308: 71(ivec4) Load 307 - 309: 71(ivec4) SubgroupFirstInvocationKHR 308 - 310: 148(ptr) AccessChain 75(data) 306 86 - Store 310 309 - 311: 6(int) Load 8(invocation) - 312: 196(ptr) AccessChain 75(data) 77 104 78 - 313: 6(int) Load 312 - 314: 6(int) SubgroupFirstInvocationKHR 313 - 315: 196(ptr) AccessChain 75(data) 311 104 78 - Store 315 314 - 316: 6(int) Load 8(invocation) - 317: 203(ptr) AccessChain 75(data) 86 104 - 318: 20(ivec4) Load 317 - 319: 26(ivec2) VectorShuffle 318 318 0 1 - 320: 26(ivec2) SubgroupFirstInvocationKHR 319 - 321: 196(ptr) AccessChain 75(data) 316 104 78 - 322: 6(int) CompositeExtract 320 0 - Store 321 322 - 323: 196(ptr) AccessChain 75(data) 316 104 100 - 324: 6(int) CompositeExtract 320 1 - Store 323 324 - 325: 6(int) Load 8(invocation) - 326: 203(ptr) AccessChain 75(data) 104 104 - 327: 20(ivec4) Load 326 - 328: 218(ivec3) VectorShuffle 327 327 0 1 2 - 329: 218(ivec3) SubgroupFirstInvocationKHR 328 - 330: 196(ptr) AccessChain 75(data) 325 104 78 - 331: 6(int) CompositeExtract 329 0 + 287: 88(ptr) AccessChain 75(data) 125 77 + 288: 69(fvec4) Load 287 + 289: 68(float) CompositeExtract 288 0 + 290: 68(float) SubgroupFirstInvocationKHR 289 + 291: 68(float) CompositeExtract 288 1 + 292: 68(float) SubgroupFirstInvocationKHR 291 + 293: 68(float) CompositeExtract 288 2 + 294: 68(float) SubgroupFirstInvocationKHR 293 + 295: 68(float) CompositeExtract 288 3 + 296: 68(float) SubgroupFirstInvocationKHR 295 + 297: 69(fvec4) CompositeConstruct 290 292 294 296 + 298: 88(ptr) AccessChain 75(data) 286 77 + Store 298 297 + 299: 6(int) Load 8(invocation) + 300: 140(ptr) AccessChain 75(data) 77 86 78 + 301: 70(int) Load 300 + 302: 70(int) SubgroupFirstInvocationKHR 301 + 303: 140(ptr) AccessChain 75(data) 299 86 78 + Store 303 302 + 304: 6(int) Load 8(invocation) + 305: 148(ptr) AccessChain 75(data) 86 86 + 306: 71(ivec4) Load 305 + 307: 147(ivec2) VectorShuffle 306 306 0 1 + 308: 70(int) CompositeExtract 307 0 + 309: 70(int) SubgroupFirstInvocationKHR 308 + 310: 70(int) CompositeExtract 307 1 + 311: 70(int) SubgroupFirstInvocationKHR 310 + 312: 147(ivec2) CompositeConstruct 309 311 + 313: 140(ptr) AccessChain 75(data) 304 86 78 + 314: 70(int) CompositeExtract 312 0 + Store 313 314 + 315: 140(ptr) AccessChain 75(data) 304 86 100 + 316: 70(int) CompositeExtract 312 1 + Store 315 316 + 317: 6(int) Load 8(invocation) + 318: 148(ptr) AccessChain 75(data) 104 86 + 319: 71(ivec4) Load 318 + 320: 163(ivec3) VectorShuffle 319 319 0 1 2 + 321: 70(int) CompositeExtract 320 0 + 322: 70(int) SubgroupFirstInvocationKHR 321 + 323: 70(int) CompositeExtract 320 1 + 324: 70(int) SubgroupFirstInvocationKHR 323 + 325: 70(int) CompositeExtract 320 2 + 326: 70(int) SubgroupFirstInvocationKHR 325 + 327: 163(ivec3) CompositeConstruct 322 324 326 + 328: 140(ptr) AccessChain 75(data) 317 86 78 + 329: 70(int) CompositeExtract 327 0 + Store 328 329 + 330: 140(ptr) AccessChain 75(data) 317 86 100 + 331: 70(int) CompositeExtract 327 1 Store 330 331 - 332: 196(ptr) AccessChain 75(data) 325 104 100 - 333: 6(int) CompositeExtract 329 1 + 332: 140(ptr) AccessChain 75(data) 317 86 121 + 333: 70(int) CompositeExtract 327 2 Store 332 333 - 334: 196(ptr) AccessChain 75(data) 325 104 121 - 335: 6(int) CompositeExtract 329 2 - Store 334 335 - 336: 6(int) Load 8(invocation) - 337: 203(ptr) AccessChain 75(data) 125 104 - 338: 20(ivec4) Load 337 - 339: 20(ivec4) SubgroupFirstInvocationKHR 338 - 340: 203(ptr) AccessChain 75(data) 336 104 - Store 340 339 + 334: 6(int) Load 8(invocation) + 335: 148(ptr) AccessChain 75(data) 125 86 + 336: 71(ivec4) Load 335 + 337: 70(int) CompositeExtract 336 0 + 338: 70(int) SubgroupFirstInvocationKHR 337 + 339: 70(int) CompositeExtract 336 1 + 340: 70(int) SubgroupFirstInvocationKHR 339 + 341: 70(int) CompositeExtract 336 2 + 342: 70(int) SubgroupFirstInvocationKHR 341 + 343: 70(int) CompositeExtract 336 3 + 344: 70(int) SubgroupFirstInvocationKHR 343 + 345: 71(ivec4) CompositeConstruct 338 340 342 344 + 346: 148(ptr) AccessChain 75(data) 334 86 + Store 346 345 + 347: 6(int) Load 8(invocation) + 348: 196(ptr) AccessChain 75(data) 77 104 78 + 349: 6(int) Load 348 + 350: 6(int) SubgroupFirstInvocationKHR 349 + 351: 196(ptr) AccessChain 75(data) 347 104 78 + Store 351 350 + 352: 6(int) Load 8(invocation) + 353: 203(ptr) AccessChain 75(data) 86 104 + 354: 20(ivec4) Load 353 + 355: 26(ivec2) VectorShuffle 354 354 0 1 + 356: 6(int) CompositeExtract 355 0 + 357: 6(int) SubgroupFirstInvocationKHR 356 + 358: 6(int) CompositeExtract 355 1 + 359: 6(int) SubgroupFirstInvocationKHR 358 + 360: 26(ivec2) CompositeConstruct 357 359 + 361: 196(ptr) AccessChain 75(data) 352 104 78 + 362: 6(int) CompositeExtract 360 0 + Store 361 362 + 363: 196(ptr) AccessChain 75(data) 352 104 100 + 364: 6(int) CompositeExtract 360 1 + Store 363 364 + 365: 6(int) Load 8(invocation) + 366: 203(ptr) AccessChain 75(data) 104 104 + 367: 20(ivec4) Load 366 + 368: 218(ivec3) VectorShuffle 367 367 0 1 2 + 369: 6(int) CompositeExtract 368 0 + 370: 6(int) SubgroupFirstInvocationKHR 369 + 371: 6(int) CompositeExtract 368 1 + 372: 6(int) SubgroupFirstInvocationKHR 371 + 373: 6(int) CompositeExtract 368 2 + 374: 6(int) SubgroupFirstInvocationKHR 373 + 375: 218(ivec3) CompositeConstruct 370 372 374 + 376: 196(ptr) AccessChain 75(data) 365 104 78 + 377: 6(int) CompositeExtract 375 0 + Store 376 377 + 378: 196(ptr) AccessChain 75(data) 365 104 100 + 379: 6(int) CompositeExtract 375 1 + Store 378 379 + 380: 196(ptr) AccessChain 75(data) 365 104 121 + 381: 6(int) CompositeExtract 375 2 + Store 380 381 + 382: 6(int) Load 8(invocation) + 383: 203(ptr) AccessChain 75(data) 125 104 + 384: 20(ivec4) Load 383 + 385: 6(int) CompositeExtract 384 0 + 386: 6(int) SubgroupFirstInvocationKHR 385 + 387: 6(int) CompositeExtract 384 1 + 388: 6(int) SubgroupFirstInvocationKHR 387 + 389: 6(int) CompositeExtract 384 2 + 390: 6(int) SubgroupFirstInvocationKHR 389 + 391: 6(int) CompositeExtract 384 3 + 392: 6(int) SubgroupFirstInvocationKHR 391 + 393: 20(ivec4) CompositeConstruct 386 388 390 392 + 394: 203(ptr) AccessChain 75(data) 382 104 + Store 394 393 Branch 67 67: Label Return From 994987bc90c2231079bdab983675bac2e69df3b6 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 24 Sep 2021 10:12:37 -0600 Subject: [PATCH 220/365] Fix variable scoping of do-while Fixes #2744 --- glslang/MachineIndependent/glslang.m4 | 2 + glslang/MachineIndependent/glslang.y | 2 + glslang/MachineIndependent/glslang_tab.cpp | 370 +++++++++++---------- 3 files changed, 190 insertions(+), 184 deletions(-) diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index b30c734eba..3626502972 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -3926,6 +3926,7 @@ iteration_statement_nonattributed --parseContext.controlFlowNestingLevel; } | DO { + parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; @@ -3937,6 +3938,7 @@ iteration_statement_nonattributed parseContext.boolCheck($8.loc, $6); $$ = parseContext.intermediate.addLoop($3, $6, 0, false, $4.loc); + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.loopNestingLevel; --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index c535ecc237..ad48386341 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -3926,6 +3926,7 @@ iteration_statement_nonattributed --parseContext.controlFlowNestingLevel; } | DO { + parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; @@ -3937,6 +3938,7 @@ iteration_statement_nonattributed parseContext.boolCheck($8.loc, $6); $$ = parseContext.intermediate.addLoop($3, $6, 0, false, $4.loc); + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.loopNestingLevel; --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 648bc37002..33b8a92417 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1197,15 +1197,15 @@ static const yytype_int16 yyrline[] = 3732, 3739, 3739, 3753, 3756, 3764, 3772, 3783, 3784, 3788, 3792, 3800, 3807, 3811, 3819, 3823, 3836, 3840, 3848, 3848, 3868, 3871, 3877, 3889, 3901, 3905, 3913, 3913, 3928, 3928, - 3944, 3944, 3965, 3968, 3974, 3977, 3983, 3987, 3994, 3999, - 4004, 4011, 4014, 4018, 4023, 4027, 4037, 4041, 4050, 4053, - 4057, 4066, 4066, 4108, 4113, 4116, 4121, 4124, 4131, 4134, - 4139, 4142, 4147, 4150, 4155, 4158, 4163, 4167, 4172, 4176, - 4181, 4185, 4192, 4195, 4200, 4203, 4206, 4209, 4212, 4217, - 4226, 4237, 4242, 4250, 4254, 4259, 4263, 4268, 4272, 4277, - 4281, 4288, 4291, 4296, 4299, 4302, 4305, 4310, 4318, 4328, - 4332, 4337, 4341, 4346, 4350, 4357, 4360, 4365, 4368, 4373, - 4376, 4382, 4385, 4390, 4393 + 3946, 3946, 3967, 3970, 3976, 3979, 3985, 3989, 3996, 4001, + 4006, 4013, 4016, 4020, 4025, 4029, 4039, 4043, 4052, 4055, + 4059, 4068, 4068, 4110, 4115, 4118, 4123, 4126, 4133, 4136, + 4141, 4144, 4149, 4152, 4157, 4160, 4165, 4169, 4174, 4178, + 4183, 4187, 4194, 4197, 4202, 4205, 4208, 4211, 4214, 4219, + 4228, 4239, 4244, 4252, 4256, 4261, 4265, 4270, 4274, 4279, + 4283, 4290, 4293, 4298, 4301, 4304, 4307, 4312, 4320, 4330, + 4334, 4339, 4343, 4348, 4352, 4359, 4362, 4367, 4370, 4375, + 4378, 4384, 4387, 4392, 4395 }; #endif @@ -11387,15 +11387,16 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); case 598: /* $@11: %empty */ #line 3928 "MachineIndependent/glslang.y" { + parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11395 "MachineIndependent/glslang_tab.cpp" +#line 11396 "MachineIndependent/glslang_tab.cpp" break; case 599: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 3933 "MachineIndependent/glslang.y" +#line 3934 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -11403,26 +11404,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.boolCheck((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode)); (yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[-5].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, false, (yyvsp[-4].lex).loc); + parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.loopNestingLevel; --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11411 "MachineIndependent/glslang_tab.cpp" +#line 11413 "MachineIndependent/glslang_tab.cpp" break; case 600: /* $@12: %empty */ -#line 3944 "MachineIndependent/glslang.y" +#line 3946 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11422 "MachineIndependent/glslang_tab.cpp" +#line 11424 "MachineIndependent/glslang_tab.cpp" break; case 601: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 3950 "MachineIndependent/glslang.y" +#line 3952 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -11435,81 +11437,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11439 "MachineIndependent/glslang_tab.cpp" +#line 11441 "MachineIndependent/glslang_tab.cpp" break; case 602: /* for_init_statement: expression_statement */ -#line 3965 "MachineIndependent/glslang.y" +#line 3967 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11447 "MachineIndependent/glslang_tab.cpp" +#line 11449 "MachineIndependent/glslang_tab.cpp" break; case 603: /* for_init_statement: declaration_statement */ -#line 3968 "MachineIndependent/glslang.y" +#line 3970 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11455 "MachineIndependent/glslang_tab.cpp" +#line 11457 "MachineIndependent/glslang_tab.cpp" break; case 604: /* conditionopt: condition */ -#line 3974 "MachineIndependent/glslang.y" +#line 3976 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 11463 "MachineIndependent/glslang_tab.cpp" +#line 11465 "MachineIndependent/glslang_tab.cpp" break; case 605: /* conditionopt: %empty */ -#line 3977 "MachineIndependent/glslang.y" +#line 3979 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 11471 "MachineIndependent/glslang_tab.cpp" +#line 11473 "MachineIndependent/glslang_tab.cpp" break; case 606: /* for_rest_statement: conditionopt SEMICOLON */ -#line 3983 "MachineIndependent/glslang.y" +#line 3985 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 11480 "MachineIndependent/glslang_tab.cpp" +#line 11482 "MachineIndependent/glslang_tab.cpp" break; case 607: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 3987 "MachineIndependent/glslang.y" +#line 3989 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 11489 "MachineIndependent/glslang_tab.cpp" +#line 11491 "MachineIndependent/glslang_tab.cpp" break; case 608: /* jump_statement: CONTINUE SEMICOLON */ -#line 3994 "MachineIndependent/glslang.y" +#line 3996 "MachineIndependent/glslang.y" { 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 11499 "MachineIndependent/glslang_tab.cpp" +#line 11501 "MachineIndependent/glslang_tab.cpp" break; case 609: /* jump_statement: BREAK SEMICOLON */ -#line 3999 "MachineIndependent/glslang.y" +#line 4001 "MachineIndependent/glslang.y" { 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 11509 "MachineIndependent/glslang_tab.cpp" +#line 11511 "MachineIndependent/glslang_tab.cpp" break; case 610: /* jump_statement: RETURN SEMICOLON */ -#line 4004 "MachineIndependent/glslang.y" +#line 4006 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -11517,101 +11519,101 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 11521 "MachineIndependent/glslang_tab.cpp" +#line 11523 "MachineIndependent/glslang_tab.cpp" break; case 611: /* jump_statement: RETURN expression SEMICOLON */ -#line 4011 "MachineIndependent/glslang.y" +#line 4013 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 11529 "MachineIndependent/glslang_tab.cpp" +#line 11531 "MachineIndependent/glslang_tab.cpp" break; case 612: /* jump_statement: DISCARD SEMICOLON */ -#line 4014 "MachineIndependent/glslang.y" +#line 4016 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 11538 "MachineIndependent/glslang_tab.cpp" +#line 11540 "MachineIndependent/glslang_tab.cpp" break; case 613: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 4018 "MachineIndependent/glslang.y" +#line 4020 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 11547 "MachineIndependent/glslang_tab.cpp" +#line 11549 "MachineIndependent/glslang_tab.cpp" break; case 614: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 4023 "MachineIndependent/glslang.y" +#line 4025 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); } -#line 11556 "MachineIndependent/glslang_tab.cpp" +#line 11558 "MachineIndependent/glslang_tab.cpp" break; case 615: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 4027 "MachineIndependent/glslang.y" +#line 4029 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); } -#line 11565 "MachineIndependent/glslang_tab.cpp" +#line 11567 "MachineIndependent/glslang_tab.cpp" break; case 616: /* translation_unit: external_declaration */ -#line 4037 "MachineIndependent/glslang.y" +#line 4039 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 11574 "MachineIndependent/glslang_tab.cpp" +#line 11576 "MachineIndependent/glslang_tab.cpp" break; case 617: /* translation_unit: translation_unit external_declaration */ -#line 4041 "MachineIndependent/glslang.y" +#line 4043 "MachineIndependent/glslang.y" { 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 11585 "MachineIndependent/glslang_tab.cpp" +#line 11587 "MachineIndependent/glslang_tab.cpp" break; case 618: /* external_declaration: function_definition */ -#line 4050 "MachineIndependent/glslang.y" +#line 4052 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11593 "MachineIndependent/glslang_tab.cpp" +#line 11595 "MachineIndependent/glslang_tab.cpp" break; case 619: /* external_declaration: declaration */ -#line 4053 "MachineIndependent/glslang.y" +#line 4055 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11601 "MachineIndependent/glslang_tab.cpp" +#line 11603 "MachineIndependent/glslang_tab.cpp" break; case 620: /* external_declaration: SEMICOLON */ -#line 4057 "MachineIndependent/glslang.y" +#line 4059 "MachineIndependent/glslang.y" { 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 11611 "MachineIndependent/glslang_tab.cpp" +#line 11613 "MachineIndependent/glslang_tab.cpp" break; case 621: /* $@13: %empty */ -#line 4066 "MachineIndependent/glslang.y" +#line 4068 "MachineIndependent/glslang.y" { (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); @@ -11624,11 +11626,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 11628 "MachineIndependent/glslang_tab.cpp" +#line 11630 "MachineIndependent/glslang_tab.cpp" break; case 622: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 4078 "MachineIndependent/glslang.y" +#line 4080 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -11655,228 +11657,228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 11659 "MachineIndependent/glslang_tab.cpp" +#line 11661 "MachineIndependent/glslang_tab.cpp" break; case 623: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4108 "MachineIndependent/glslang.y" +#line 4110 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); } -#line 11667 "MachineIndependent/glslang_tab.cpp" +#line 11669 "MachineIndependent/glslang_tab.cpp" break; case 624: /* attribute_list: single_attribute */ -#line 4113 "MachineIndependent/glslang.y" +#line 4115 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 11675 "MachineIndependent/glslang_tab.cpp" +#line 11677 "MachineIndependent/glslang_tab.cpp" break; case 625: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4116 "MachineIndependent/glslang.y" +#line 4118 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 11683 "MachineIndependent/glslang_tab.cpp" +#line 11685 "MachineIndependent/glslang_tab.cpp" break; case 626: /* single_attribute: IDENTIFIER */ -#line 4121 "MachineIndependent/glslang.y" +#line 4123 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 11691 "MachineIndependent/glslang_tab.cpp" +#line 11693 "MachineIndependent/glslang_tab.cpp" break; case 627: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4124 "MachineIndependent/glslang.y" +#line 4126 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 11699 "MachineIndependent/glslang_tab.cpp" +#line 11701 "MachineIndependent/glslang_tab.cpp" break; case 628: /* spirv_requirements_list: spirv_requirements_parameter */ -#line 4131 "MachineIndependent/glslang.y" +#line 4133 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq); } -#line 11707 "MachineIndependent/glslang_tab.cpp" +#line 11709 "MachineIndependent/glslang_tab.cpp" break; case 629: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ -#line 4134 "MachineIndependent/glslang.y" +#line 4136 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq)); } -#line 11715 "MachineIndependent/glslang_tab.cpp" +#line 11717 "MachineIndependent/glslang_tab.cpp" break; case 630: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ -#line 4139 "MachineIndependent/glslang.y" +#line 4141 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr); } -#line 11723 "MachineIndependent/glslang_tab.cpp" +#line 11725 "MachineIndependent/glslang_tab.cpp" break; case 631: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ -#line 4142 "MachineIndependent/glslang.y" +#line 4144 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11731 "MachineIndependent/glslang_tab.cpp" +#line 11733 "MachineIndependent/glslang_tab.cpp" break; case 632: /* spirv_extension_list: STRING_LITERAL */ -#line 4147 "MachineIndependent/glslang.y" +#line 4149 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 11739 "MachineIndependent/glslang_tab.cpp" +#line 11741 "MachineIndependent/glslang_tab.cpp" break; case 633: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ -#line 4150 "MachineIndependent/glslang.y" +#line 4152 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 11747 "MachineIndependent/glslang_tab.cpp" +#line 11749 "MachineIndependent/glslang_tab.cpp" break; case 634: /* spirv_capability_list: INTCONSTANT */ -#line 4155 "MachineIndependent/glslang.y" +#line 4157 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); } -#line 11755 "MachineIndependent/glslang_tab.cpp" +#line 11757 "MachineIndependent/glslang_tab.cpp" break; case 635: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ -#line 4158 "MachineIndependent/glslang.y" +#line 4160 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); } -#line 11763 "MachineIndependent/glslang_tab.cpp" +#line 11765 "MachineIndependent/glslang_tab.cpp" break; case 636: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4163 "MachineIndependent/glslang.y" +#line 4165 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 11772 "MachineIndependent/glslang_tab.cpp" +#line 11774 "MachineIndependent/glslang_tab.cpp" break; case 637: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4167 "MachineIndependent/glslang.y" +#line 4169 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 11782 "MachineIndependent/glslang_tab.cpp" +#line 11784 "MachineIndependent/glslang_tab.cpp" break; case 638: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4172 "MachineIndependent/glslang.y" +#line 4174 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11791 "MachineIndependent/glslang_tab.cpp" +#line 11793 "MachineIndependent/glslang_tab.cpp" break; case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4176 "MachineIndependent/glslang.y" +#line 4178 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11801 "MachineIndependent/glslang_tab.cpp" +#line 11803 "MachineIndependent/glslang_tab.cpp" break; case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4181 "MachineIndependent/glslang.y" +#line 4183 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11810 "MachineIndependent/glslang_tab.cpp" +#line 11812 "MachineIndependent/glslang_tab.cpp" break; case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4185 "MachineIndependent/glslang.y" +#line 4187 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11820 "MachineIndependent/glslang_tab.cpp" +#line 11822 "MachineIndependent/glslang_tab.cpp" break; case 642: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ -#line 4192 "MachineIndependent/glslang.y" +#line 4194 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 11828 "MachineIndependent/glslang_tab.cpp" +#line 11830 "MachineIndependent/glslang_tab.cpp" break; case 643: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ -#line 4195 "MachineIndependent/glslang.y" +#line 4197 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 11836 "MachineIndependent/glslang_tab.cpp" +#line 11838 "MachineIndependent/glslang_tab.cpp" break; case 644: /* spirv_execution_mode_parameter: FLOATCONSTANT */ -#line 4200 "MachineIndependent/glslang.y" +#line 4202 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 11844 "MachineIndependent/glslang_tab.cpp" +#line 11846 "MachineIndependent/glslang_tab.cpp" break; case 645: /* spirv_execution_mode_parameter: INTCONSTANT */ -#line 4203 "MachineIndependent/glslang.y" +#line 4205 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 11852 "MachineIndependent/glslang_tab.cpp" +#line 11854 "MachineIndependent/glslang_tab.cpp" break; case 646: /* spirv_execution_mode_parameter: UINTCONSTANT */ -#line 4206 "MachineIndependent/glslang.y" +#line 4208 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 11860 "MachineIndependent/glslang_tab.cpp" +#line 11862 "MachineIndependent/glslang_tab.cpp" break; case 647: /* spirv_execution_mode_parameter: BOOLCONSTANT */ -#line 4209 "MachineIndependent/glslang.y" +#line 4211 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 11868 "MachineIndependent/glslang_tab.cpp" +#line 11870 "MachineIndependent/glslang_tab.cpp" break; case 648: /* spirv_execution_mode_parameter: STRING_LITERAL */ -#line 4212 "MachineIndependent/glslang.y" +#line 4214 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 11876 "MachineIndependent/glslang_tab.cpp" +#line 11878 "MachineIndependent/glslang_tab.cpp" break; case 649: /* spirv_execution_mode_id_parameter_list: constant_expression */ -#line 4217 "MachineIndependent/glslang.y" +#line 4219 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -11886,11 +11888,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode)); } -#line 11890 "MachineIndependent/glslang_tab.cpp" +#line 11892 "MachineIndependent/glslang_tab.cpp" break; case 650: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ -#line 4226 "MachineIndependent/glslang.y" +#line 4228 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -11900,156 +11902,156 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode)); } -#line 11904 "MachineIndependent/glslang_tab.cpp" +#line 11906 "MachineIndependent/glslang_tab.cpp" break; case 651: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4237 "MachineIndependent/glslang.y" +#line 4239 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc); (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass; (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i; } -#line 11914 "MachineIndependent/glslang_tab.cpp" +#line 11916 "MachineIndependent/glslang_tab.cpp" break; case 652: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4242 "MachineIndependent/glslang.y" +#line 4244 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass; (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i; } -#line 11925 "MachineIndependent/glslang_tab.cpp" +#line 11927 "MachineIndependent/glslang_tab.cpp" break; case 653: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4250 "MachineIndependent/glslang.y" +#line 4252 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); } -#line 11934 "MachineIndependent/glslang_tab.cpp" +#line 11936 "MachineIndependent/glslang_tab.cpp" break; case 654: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4254 "MachineIndependent/glslang.y" +#line 4256 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); } -#line 11944 "MachineIndependent/glslang_tab.cpp" +#line 11946 "MachineIndependent/glslang_tab.cpp" break; case 655: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4259 "MachineIndependent/glslang.y" +#line 4261 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11953 "MachineIndependent/glslang_tab.cpp" +#line 11955 "MachineIndependent/glslang_tab.cpp" break; case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4263 "MachineIndependent/glslang.y" +#line 4265 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11963 "MachineIndependent/glslang_tab.cpp" +#line 11965 "MachineIndependent/glslang_tab.cpp" break; case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4268 "MachineIndependent/glslang.y" +#line 4270 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11972 "MachineIndependent/glslang_tab.cpp" +#line 11974 "MachineIndependent/glslang_tab.cpp" break; case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4272 "MachineIndependent/glslang.y" +#line 4274 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11982 "MachineIndependent/glslang_tab.cpp" +#line 11984 "MachineIndependent/glslang_tab.cpp" break; case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4277 "MachineIndependent/glslang.y" +#line 4279 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11991 "MachineIndependent/glslang_tab.cpp" +#line 11993 "MachineIndependent/glslang_tab.cpp" break; case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4281 "MachineIndependent/glslang.y" +#line 4283 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 12001 "MachineIndependent/glslang_tab.cpp" +#line 12003 "MachineIndependent/glslang_tab.cpp" break; case 661: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ -#line 4288 "MachineIndependent/glslang.y" +#line 4290 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12009 "MachineIndependent/glslang_tab.cpp" +#line 12011 "MachineIndependent/glslang_tab.cpp" break; case 662: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ -#line 4291 "MachineIndependent/glslang.y" +#line 4293 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12017 "MachineIndependent/glslang_tab.cpp" +#line 12019 "MachineIndependent/glslang_tab.cpp" break; case 663: /* spirv_decorate_parameter: FLOATCONSTANT */ -#line 4296 "MachineIndependent/glslang.y" +#line 4298 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12025 "MachineIndependent/glslang_tab.cpp" +#line 12027 "MachineIndependent/glslang_tab.cpp" break; case 664: /* spirv_decorate_parameter: INTCONSTANT */ -#line 4299 "MachineIndependent/glslang.y" +#line 4301 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12033 "MachineIndependent/glslang_tab.cpp" +#line 12035 "MachineIndependent/glslang_tab.cpp" break; case 665: /* spirv_decorate_parameter: UINTCONSTANT */ -#line 4302 "MachineIndependent/glslang.y" +#line 4304 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12041 "MachineIndependent/glslang_tab.cpp" +#line 12043 "MachineIndependent/glslang_tab.cpp" break; case 666: /* spirv_decorate_parameter: BOOLCONSTANT */ -#line 4305 "MachineIndependent/glslang.y" +#line 4307 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12049 "MachineIndependent/glslang_tab.cpp" +#line 12051 "MachineIndependent/glslang_tab.cpp" break; case 667: /* spirv_decorate_id_parameter_list: constant_expression */ -#line 4310 "MachineIndependent/glslang.y" +#line 4312 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -12058,11 +12060,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode)); } -#line 12062 "MachineIndependent/glslang_tab.cpp" +#line 12064 "MachineIndependent/glslang_tab.cpp" break; case 668: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression */ -#line 4318 "MachineIndependent/glslang.y" +#line 4320 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -12071,147 +12073,147 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode)); } -#line 12075 "MachineIndependent/glslang_tab.cpp" +#line 12077 "MachineIndependent/glslang_tab.cpp" break; case 669: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ -#line 4328 "MachineIndependent/glslang.y" +#line 4330 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate( parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12084 "MachineIndependent/glslang_tab.cpp" +#line 12086 "MachineIndependent/glslang_tab.cpp" break; case 670: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ -#line 4332 "MachineIndependent/glslang.y" +#line 4334 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12092 "MachineIndependent/glslang_tab.cpp" +#line 12094 "MachineIndependent/glslang_tab.cpp" break; case 671: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4337 "MachineIndependent/glslang.y" +#line 4339 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams)); } -#line 12101 "MachineIndependent/glslang_tab.cpp" +#line 12103 "MachineIndependent/glslang_tab.cpp" break; case 672: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4341 "MachineIndependent/glslang.y" +#line 4343 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams)); } -#line 12111 "MachineIndependent/glslang_tab.cpp" +#line 12113 "MachineIndependent/glslang_tab.cpp" break; case 673: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4346 "MachineIndependent/glslang.y" +#line 4348 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); } -#line 12120 "MachineIndependent/glslang_tab.cpp" +#line 12122 "MachineIndependent/glslang_tab.cpp" break; case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4350 "MachineIndependent/glslang.y" +#line 4352 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); } -#line 12130 "MachineIndependent/glslang_tab.cpp" +#line 12132 "MachineIndependent/glslang_tab.cpp" break; case 675: /* spirv_type_parameter_list: spirv_type_parameter */ -#line 4357 "MachineIndependent/glslang.y" +#line 4359 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams); } -#line 12138 "MachineIndependent/glslang_tab.cpp" +#line 12140 "MachineIndependent/glslang_tab.cpp" break; case 676: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ -#line 4360 "MachineIndependent/glslang.y" +#line 4362 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams)); } -#line 12146 "MachineIndependent/glslang_tab.cpp" +#line 12148 "MachineIndependent/glslang_tab.cpp" break; case 677: /* spirv_type_parameter: constant_expression */ -#line 4365 "MachineIndependent/glslang.y" +#line 4367 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion()); } -#line 12154 "MachineIndependent/glslang_tab.cpp" +#line 12156 "MachineIndependent/glslang_tab.cpp" break; case 678: /* spirv_type_parameter: type_specifier */ -#line 4368 "MachineIndependent/glslang.y" +#line 4370 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type)); } -#line 12162 "MachineIndependent/glslang_tab.cpp" +#line 12164 "MachineIndependent/glslang_tab.cpp" break; case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4373 "MachineIndependent/glslang.y" +#line 4375 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12170 "MachineIndependent/glslang_tab.cpp" +#line 12172 "MachineIndependent/glslang_tab.cpp" break; case 680: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4376 "MachineIndependent/glslang.y" +#line 4378 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12179 "MachineIndependent/glslang_tab.cpp" +#line 12181 "MachineIndependent/glslang_tab.cpp" break; case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ -#line 4382 "MachineIndependent/glslang.y" +#line 4384 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst); } -#line 12187 "MachineIndependent/glslang_tab.cpp" +#line 12189 "MachineIndependent/glslang_tab.cpp" break; case 682: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ -#line 4385 "MachineIndependent/glslang.y" +#line 4387 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst)); } -#line 12195 "MachineIndependent/glslang_tab.cpp" +#line 12197 "MachineIndependent/glslang_tab.cpp" break; case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ -#line 4390 "MachineIndependent/glslang.y" +#line 4392 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string); } -#line 12203 "MachineIndependent/glslang_tab.cpp" +#line 12205 "MachineIndependent/glslang_tab.cpp" break; case 684: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ -#line 4393 "MachineIndependent/glslang.y" +#line 4395 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i); } -#line 12211 "MachineIndependent/glslang_tab.cpp" +#line 12213 "MachineIndependent/glslang_tab.cpp" break; -#line 12215 "MachineIndependent/glslang_tab.cpp" +#line 12217 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -12436,5 +12438,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4398 "MachineIndependent/glslang.y" +#line 4400 "MachineIndependent/glslang.y" From 7b57c6e32a09cf297f228adf18988782b7f8cf03 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Wed, 29 Sep 2021 15:31:28 -0400 Subject: [PATCH 221/365] rename member variable for clarity it's a little strange how the resolver takes an arbitrary intermediate in it's constructor. Really this should be an 'options' object that holds the various resolve/remapping options which are read from this intermediate. At least for now rename it so it's more clear it's used differently from other intermediates that are accessed in the resolver (such as the per stage ones). --- glslang/MachineIndependent/iomapper.cpp | 28 ++++++++++++------------- glslang/MachineIndependent/iomapper.h | 6 +++--- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 3486ea6d05..a1db5c135f 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -748,7 +748,7 @@ struct TSlotCollector { }; TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate) - : intermediate(intermediate) + : referenceIntermediate(intermediate) , nextUniformLocation(intermediate.getUniformLocationBase()) , nextInputLocation(0) , nextOutputLocation(0) @@ -760,17 +760,17 @@ TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate int TDefaultIoResolverBase::getBaseBinding(EShLanguage stage, TResourceType res, unsigned int set) const { return stageIntermediates[stage] ? selectBaseBinding(stageIntermediates[stage]->getShiftBinding(res), stageIntermediates[stage]->getShiftBindingForSet(res, set)) - : selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set)); + : selectBaseBinding(referenceIntermediate.getShiftBinding(res), referenceIntermediate.getShiftBindingForSet(res, set)); } const std::vector& TDefaultIoResolverBase::getResourceSetBinding(EShLanguage stage) const { return stageIntermediates[stage] ? stageIntermediates[stage]->getResourceSetBinding() - : intermediate.getResourceSetBinding(); + : referenceIntermediate.getResourceSetBinding(); } -bool TDefaultIoResolverBase::doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); } +bool TDefaultIoResolverBase::doAutoBindingMapping() const { return referenceIntermediate.getAutoMapBindings(); } -bool TDefaultIoResolverBase::doAutoLocationMapping() const { return intermediate.getAutoMapLocations(); } +bool TDefaultIoResolverBase::doAutoLocationMapping() const { return referenceIntermediate.getAutoMapLocations(); } TDefaultIoResolverBase::TSlotSet::iterator TDefaultIoResolverBase::findSlot(int set, int slot) { return std::lower_bound(slots[set].begin(), slots[set].end(), slot); @@ -827,7 +827,7 @@ int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEn } // no locations added if already present, a built-in variable, a block, or an opaque if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock || - type.isAtomic() || (type.containsOpaque() && intermediate.getSpv().openGl == 0)) { + type.isAtomic() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) { return ent.newLocation = -1; } // no locations on blocks of built-in variables @@ -839,7 +839,7 @@ int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEn return ent.newLocation = -1; } } - int location = intermediate.getUniformLocationOverride(name); + int location = referenceIntermediate.getUniformLocationOverride(name); if (location != -1) { return ent.newLocation = location; } @@ -1024,7 +1024,7 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn } else { // no locations added if already present, a built-in variable, a block, or an opaque if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock || - type.isAtomic() || (type.containsOpaque() && intermediate.getSpv().openGl == 0)) { + type.isAtomic() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) { return ent.newLocation = -1; } // no locations on blocks of built-in variables @@ -1037,7 +1037,7 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn } } } - int location = intermediate.getUniformLocationOverride(name.c_str()); + int location = referenceIntermediate.getUniformLocationOverride(name.c_str()); if (location != -1) { return ent.newLocation = location; } @@ -1086,7 +1086,7 @@ int TDefaultGlslIoResolver::resolveBinding(EShLanguage stage, TVarEntryInfo& ent const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); // On OpenGL arrays of opaque types take a separate binding for each element - int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; + int numBindings = referenceIntermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; TResourceType resource = getResourceType(type); // don't need to handle uniform symbol, it will be handled in resolveUniformLocation if (resource == EResUbo && type.getBasicType() != EbtBlock) { @@ -1095,7 +1095,7 @@ int TDefaultGlslIoResolver::resolveBinding(EShLanguage stage, TVarEntryInfo& ent // There is no 'set' qualifier in OpenGL shading language, each resource has its own // binding name space, so remap the 'set' to resource type which make each resource // binding is valid from 0 to MAX_XXRESOURCE_BINDINGS - int set = intermediate.getSpv().openGl != 0 ? resource : ent.newSet; + int set = referenceIntermediate.getSpv().openGl != 0 ? resource : ent.newSet; int resourceKey = set; if (resource < EResCount) { if (type.getQualifier().hasBinding()) { @@ -1223,7 +1223,7 @@ void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& const TType& type = ent.symbol->getType(); const TString& name = ent.symbol->getAccessName(); TResourceType resource = getResourceType(type); - int set = intermediate.getSpv().openGl != 0 ? resource : resolveSet(ent.stage, ent); + int set = referenceIntermediate.getSpv().openGl != 0 ? resource : resolveSet(ent.stage, ent); int resourceKey = set; if (type.getQualifier().hasBinding()) { @@ -1233,7 +1233,7 @@ void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink& if (iter == varSlotMap.end()) { // Reserve the slots for the ubo, ssbo and opaques who has explicit binding - int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; + int numBindings = referenceIntermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; varSlotMap[name] = binding; reserveSlot(resourceKey, binding, numBindings); } else { @@ -1288,7 +1288,7 @@ struct TDefaultIoResolver : public TDefaultIoResolverBase { const TType& type = ent.symbol->getType(); const int set = getLayoutSet(type); // On OpenGL arrays of opaque types take a seperate binding for each element - int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; + int numBindings = referenceIntermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1; TResourceType resource = getResourceType(type); if (resource < EResCount) { if (type.getQualifier().hasBinding()) { diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index 843ea73c01..c43864e3aa 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -165,7 +165,7 @@ struct TDefaultIoResolverBase : public glslang::TIoMapResolver { protected: TDefaultIoResolverBase(TDefaultIoResolverBase&); TDefaultIoResolverBase& operator=(TDefaultIoResolverBase&); - const TIntermediate& intermediate; + const TIntermediate& referenceIntermediate; int nextUniformLocation; int nextInputLocation; int nextOutputLocation; @@ -322,8 +322,8 @@ class TGlslIoMapper : public TIoMapper { intermediates[stage] = nullptr; } } - // If set, the uniform block with the given name will be changed to be backed by - // push_constant if it's size is <= maxSize + // If set, the uniform block with the given name will be changed to be backed by + // push_constant if it's size is <= maxSize void setAutoPushConstantBlock(const char* name, unsigned int maxSize, TLayoutPacking packing) { autoPushConstantBlockName = name; autoPushConstantMaxSize = maxSize; From c8ef4f8a9f8a8b76a380f46dd043cfb800d81ca7 Mon Sep 17 00:00:00 2001 From: Nathaniel Cesario Date: Tue, 28 Sep 2021 17:01:21 -0600 Subject: [PATCH 222/365] cmake: Remove "conditions" from endif See https://cmake.org/cmake/help/latest/command/endif.html and https://cmake.org/cmake/help/latest/command/if.html. If the else/endif condition does not match the if condition verbatim, an error is produced on some versions of cmake. This change removes these "legacy conditions." --- CMakeLists.txt | 22 +++++++++++----------- SPIRV/CMakeLists.txt | 6 +++--- StandAlone/CMakeLists.txt | 8 ++++---- glslang/CMakeLists.txt | 12 ++++++------ glslang/OSDependent/Unix/CMakeLists.txt | 2 +- glslang/OSDependent/Web/CMakeLists.txt | 6 +++--- glslang/OSDependent/Windows/CMakeLists.txt | 4 ++-- gtests/CMakeLists.txt | 6 +++--- hlsl/CMakeLists.txt | 2 +- 9 files changed, 34 insertions(+), 34 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c318eef9aa..d5b727ac52 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -118,7 +118,7 @@ if(USE_CCACHE) find_program(CCACHE_FOUND ccache) if(CCACHE_FOUND) set_property(GLOBAL PROPERTY RULE_LAUNCH_COMPILE ccache) - endif(CCACHE_FOUND) + endif() endif() if(ENABLE_CTEST) @@ -127,27 +127,27 @@ endif() if(ENABLE_HLSL) add_definitions(-DENABLE_HLSL) -endif(ENABLE_HLSL) +endif() if(ENABLE_GLSLANG_WEBMIN) add_definitions(-DGLSLANG_WEB) if(ENABLE_GLSLANG_WEBMIN_DEVEL) add_definitions(-DGLSLANG_WEB_DEVEL) - endif(ENABLE_GLSLANG_WEBMIN_DEVEL) -endif(ENABLE_GLSLANG_WEBMIN) + endif() +endif() if(WIN32) set(CMAKE_DEBUG_POSTFIX "d") option(OVERRIDE_MSVCCRT "Overrides runtime of MSVC " ON) if(MSVC AND OVERRIDE_MSVCCRT) include(ChooseMSVCCRT.cmake) - endif(MSVC) + endif() add_definitions(-DGLSLANG_OSINCLUDE_WIN32) elseif(UNIX) add_definitions(-DGLSLANG_OSINCLUDE_UNIX) -else(WIN32) +else() message("unknown platform") -endif(WIN32) +endif() if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") add_compile_options(-Wall -Wmaybe-uninitialized -Wuninitialized -Wunused -Wunused-local-typedefs @@ -213,7 +213,7 @@ if(ENABLE_GLSLANG_JS) add_compile_options(-Wno-unused-variable -Wno-unused-const-variable) endif() endif() -endif(ENABLE_GLSLANG_JS) +endif() # Request C++11 if(${CMAKE_VERSION} VERSION_LESS 3.1) @@ -329,7 +329,7 @@ endif() add_subdirectory(SPIRV) if(ENABLE_HLSL) add_subdirectory(hlsl) -endif(ENABLE_HLSL) +endif() if(ENABLE_CTEST) add_subdirectory(gtests) endif() @@ -346,11 +346,11 @@ if(ENABLE_CTEST AND BUILD_TESTING) set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/$/localResults) set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$/glslangValidator) set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/$/spirv-remap) - else(CMAKE_CONFIGURATION_TYPES) + else() set(RESULTS_PATH ${CMAKE_CURRENT_BINARY_DIR}/localResults) set(VALIDATOR_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/glslangValidator) set(REMAP_PATH ${CMAKE_CURRENT_BINARY_DIR}/StandAlone/spirv-remap) - endif(CMAKE_CONFIGURATION_TYPES) + endif() add_test(NAME glslang-testsuite COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH} diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt index d699daddb6..22f767d7dc 100644 --- a/SPIRV/CMakeLists.txt +++ b/SPIRV/CMakeLists.txt @@ -101,12 +101,12 @@ if(ENABLE_OPT) $) else() target_link_libraries(SPIRV PRIVATE MachineIndependent) -endif(ENABLE_OPT) +endif() if(WIN32) source_group("Source" FILES ${SOURCES} ${HEADERS}) source_group("Source" FILES ${SPVREMAP_SOURCES} ${SPVREMAP_HEADERS}) -endif(WIN32) +endif() if(ENABLE_GLSLANG_INSTALL) if(BUILD_SHARED_LIBS) @@ -135,4 +135,4 @@ if(ENABLE_GLSLANG_INSTALL) install(EXPORT SPIRVTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/) -endif(ENABLE_GLSLANG_INSTALL) +endif() diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 751d1cd715..91bec6ccbb 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -62,7 +62,7 @@ elseif(UNIX) if(NOT ANDROID) set(LIBRARIES ${LIBRARIES} pthread) endif() -endif(WIN32) +endif() target_link_libraries(glslangValidator ${LIBRARIES}) target_include_directories(glslangValidator PUBLIC @@ -73,7 +73,7 @@ if(ENABLE_OPT) target_include_directories(glslangValidator PRIVATE ${spirv-tools_SOURCE_DIR}/include ) -endif(ENABLE_OPT) +endif() if(ENABLE_SPVREMAPPER) set(REMAPPER_SOURCES spirv-remap.cpp) @@ -85,7 +85,7 @@ endif() if(WIN32) source_group("Source" FILES ${SOURCES}) -endif(WIN32) +endif() if(ENABLE_GLSLANG_INSTALL) install(TARGETS glslangValidator EXPORT glslangValidatorTargets @@ -108,4 +108,4 @@ if(ENABLE_GLSLANG_INSTALL) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif(ENABLE_GLSLANG_INSTALL) +endif() diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt index dab5f8bf2f..d0394c865e 100644 --- a/glslang/CMakeLists.txt +++ b/glslang/CMakeLists.txt @@ -35,14 +35,14 @@ if(WIN32) add_subdirectory(OSDependent/Windows) elseif(UNIX OR "${CMAKE_SYSTEM_NAME}" STREQUAL "Fuchsia") add_subdirectory(OSDependent/Unix) -else(WIN32) +else() message("unknown platform") -endif(WIN32) +endif() if(EMSCRIPTEN OR ENABLE_GLSLANG_JS) # May be enabled on non-Emscripten builds for binary-size testing. add_subdirectory(OSDependent/Web) -endif(EMSCRIPTEN OR ENABLE_GLSLANG_JS) +endif() ################################################################################ # GenericCodeGen @@ -129,7 +129,7 @@ if(ENABLE_HLSL) HLSL/hlslTokenStream.h HLSL/hlslGrammar.h HLSL/hlslParseables.h) -endif(ENABLE_HLSL) +endif() add_library(MachineIndependent STATIC ${MACHINEINDEPENDENT_SOURCES} ${MACHINEINDEPENDENT_HEADERS}) set_property(TARGET MachineIndependent PROPERTY POSITION_INDEPENDENT_CODE ON) @@ -194,7 +194,7 @@ if(WIN32) source_group("MachineIndependent\\Preprocessor" REGULAR_EXPRESSION "MachineIndependent/preprocessor/*") source_group("HLSL" REGULAR_EXPRESSION "HLSL/*") source_group("CInterface" REGULAR_EXPRESSION "CInterface/*") -endif(WIN32) +endif() ################################################################################ # install @@ -225,4 +225,4 @@ if(ENABLE_GLSLANG_INSTALL) install(FILES ${GLSLANG_BUILD_INFO_H} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang) -endif(ENABLE_GLSLANG_INSTALL) +endif() diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt index 354a3e9772..d521da170a 100644 --- a/glslang/OSDependent/Unix/CMakeLists.txt +++ b/glslang/OSDependent/Unix/CMakeLists.txt @@ -56,4 +56,4 @@ if(ENABLE_GLSLANG_INSTALL) install(TARGETS OSDependent EXPORT OSDependentTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif(ENABLE_GLSLANG_INSTALL) +endif() diff --git a/glslang/OSDependent/Web/CMakeLists.txt b/glslang/OSDependent/Web/CMakeLists.txt index 0f60dbcc13..5bfbed415c 100644 --- a/glslang/OSDependent/Web/CMakeLists.txt +++ b/glslang/OSDependent/Web/CMakeLists.txt @@ -55,7 +55,7 @@ if(ENABLE_GLSLANG_JS) if(ENABLE_EMSCRIPTEN_SINGLE_FILE) target_link_libraries(glslang.js "-s SINGLE_FILE=1") - endif(ENABLE_EMSCRIPTEN_SINGLE_FILE) + endif() if(ENABLE_EMSCRIPTEN_ENVIRONMENT_NODE) target_link_libraries(glslang.js "-s ENVIRONMENT=node -s BINARYEN_ASYNC_COMPILATION=0") @@ -67,5 +67,5 @@ if(ENABLE_GLSLANG_JS) add_custom_command(TARGET glslang.js POST_BUILD COMMAND cat ${CMAKE_CURRENT_SOURCE_DIR}/glslang.after.js >> ${CMAKE_CURRENT_BINARY_DIR}/glslang.js) endif() - endif(EMSCRIPTEN) -endif(ENABLE_GLSLANG_JS) + endif() +endif() diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt index 9cf1b7fba3..21d603e72c 100644 --- a/glslang/OSDependent/Windows/CMakeLists.txt +++ b/glslang/OSDependent/Windows/CMakeLists.txt @@ -45,10 +45,10 @@ endif() if(WIN32) source_group("Source" FILES ${SOURCES}) -endif(WIN32) +endif() if(ENABLE_GLSLANG_INSTALL) install(TARGETS OSDependent EXPORT OSDependentTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif(ENABLE_GLSLANG_INSTALL) +endif() diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index befe240ed6..c8f02828cd 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -72,7 +72,7 @@ if(BUILD_TESTING) install(TARGETS glslangtests EXPORT glslangtestsTargets RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) install(EXPORT glslangtestsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) - endif(ENABLE_GLSLANG_INSTALL) + endif() set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test") # Supply a default test root directory, so that manual testing @@ -90,7 +90,7 @@ if(BUILD_TESTING) target_include_directories(glslangtests PRIVATE ${spirv-tools_SOURCE_DIR}/include ) - endif(ENABLE_OPT) + endif() set(LIBRARIES glslang OSDependent OGLCompiler glslang @@ -102,7 +102,7 @@ if(BUILD_TESTING) if(ENABLE_HLSL) set(LIBRARIES ${LIBRARIES} HLSL) - endif(ENABLE_HLSL) + endif() target_link_libraries(glslangtests PRIVATE ${LIBRARIES} gmock) add_test(NAME glslang-gtests diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt index 62faa19576..7d5bc152ac 100644 --- a/hlsl/CMakeLists.txt +++ b/hlsl/CMakeLists.txt @@ -56,4 +56,4 @@ if(ENABLE_GLSLANG_INSTALL) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() install(EXPORT HLSLTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif(ENABLE_GLSLANG_INSTALL) +endif() From d3567231ebc216925ef411a3379ab629948c6184 Mon Sep 17 00:00:00 2001 From: Kevin McCullough Date: Wed, 13 Oct 2021 14:57:06 -0700 Subject: [PATCH 223/365] Fix cross-stage check to allow subsequent stage to use previous stage's binding --- glslang/MachineIndependent/linkValidate.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 4edd2a9052..a790f93f8b 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -954,10 +954,10 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy // current implementation only has one offset. if (symbol.getQualifier().layoutMatrix != unitSymbol.getQualifier().layoutMatrix || symbol.getQualifier().layoutPacking != unitSymbol.getQualifier().layoutPacking || - symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation || + (symbol.getQualifier().hasLocation() && unitSymbol.getQualifier().hasLocation() && symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation) || symbol.getQualifier().layoutComponent != unitSymbol.getQualifier().layoutComponent || symbol.getQualifier().layoutIndex != unitSymbol.getQualifier().layoutIndex || - symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding || + (symbol.getQualifier().hasBinding() && unitSymbol.getQualifier().hasBinding() && symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding) || (symbol.getQualifier().hasBinding() && (symbol.getQualifier().layoutOffset != unitSymbol.getQualifier().layoutOffset))) { error(infoSink, "Layout qualification must match:"); writeTypeComparison = true; From dd097e5adb500785dc45bb6c7dcbb3eee4e269ca Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Thu, 14 Oct 2021 08:41:16 -0700 Subject: [PATCH 224/365] Untangle use of core glslang version enums in SpvPostProcess This is the only thing requiring GlslangToSpv.h to be included here. Change-Id: I72e9e278aa1e6d717e83f9dbf11e089aafe2eb0e --- SPIRV/SpvPostProcess.cpp | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp index 23d7b5a461..d283febef4 100644 --- a/SPIRV/SpvPostProcess.cpp +++ b/SPIRV/SpvPostProcess.cpp @@ -44,10 +44,8 @@ #include #include "SpvBuilder.h" - #include "spirv.hpp" -#include "GlslangToSpv.h" -#include "SpvBuilder.h" + namespace spv { #include "GLSL.std.450.h" #include "GLSL.ext.KHR.h" @@ -161,13 +159,13 @@ void Builder::postProcessType(const Instruction& inst, Id typeId) switch (inst.getImmediateOperand(1)) { case GLSLstd450Frexp: case GLSLstd450FrexpStruct: - if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeInt, 16)) + if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeInt, 16)) addExtension(spv::E_SPV_AMD_gpu_shader_int16); break; case GLSLstd450InterpolateAtCentroid: case GLSLstd450InterpolateAtSample: case GLSLstd450InterpolateAtOffset: - if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeFloat, 16)) + if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeFloat, 16)) addExtension(spv::E_SPV_AMD_gpu_shader_half_float); break; default: From 07aec25f82e32254a63dc5dda20eb0da74c01c87 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Wed, 13 Oct 2021 14:12:47 +0800 Subject: [PATCH 225/365] Make modifications of GL_EXT_spirv_intrinsics 1. spirv_execution_mode_id and spirv_decorate_id could support specialization constants. The original implementation always assume only normal frontend constants are valid. It is not true. 2. spirv_type donesn't support type_specifier as an option of spirv_type_parameter. At present, only constant_expression is the valid option. --- SPIRV/GlslangToSpv.cpp | 108 +- .../spv.intrinsicsSpecConst.vert.out | 35 + Test/spv.intrinsicsSpecConst.vert | 14 + glslang/Include/SpirvIntrinsics.h | 18 +- glslang/MachineIndependent/ParseHelper.h | 1 - .../MachineIndependent/SpirvIntrinsics.cpp | 33 +- glslang/MachineIndependent/glslang.m4 | 3 - glslang/MachineIndependent/glslang.y | 3 - glslang/MachineIndependent/glslang_tab.cpp | 4172 ++++++++--------- gtests/Spv.FromFile.cpp | 1 + 10 files changed, 2200 insertions(+), 2188 deletions(-) create mode 100644 Test/baseResults/spv.intrinsicsSpecConst.vert.out create mode 100644 Test/spv.intrinsicsSpecConst.vert diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 63932c2b1a..43aba9cb41 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1830,10 +1830,10 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, std::vector operandIds; assert(!modeId.second.empty()); for (auto extraOperand : modeId.second) { - int nextConst = 0; - spv::Id operandId = createSpvConstantFromConstUnionArray( - extraOperand->getType(), extraOperand->getConstArray(), nextConst, false); - operandIds.push_back(operandId); + if (extraOperand->getType().getQualifier().isSpecConstant()) + operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode())); + else + operandIds.push_back(createSpvConstant(*extraOperand)); } builder.addExecutionModeId(shaderEntry, static_cast(modeId.first), operandIds); } @@ -4150,58 +4150,48 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty std::vector operands; for (const auto& typeParam : spirvType.typeParams) { - if (typeParam.isConstant) { - // Constant expression - if (typeParam.constant->isLiteral()) { - if (typeParam.constant->getBasicType() == glslang::EbtFloat) { - float floatValue = static_cast(typeParam.constant->getConstArray()[0].getDConst()); - unsigned literal = *reinterpret_cast(&floatValue); - operands.push_back(literal); - } else if (typeParam.constant->getBasicType() == glslang::EbtInt) { - unsigned literal = typeParam.constant->getConstArray()[0].getIConst(); - operands.push_back(literal); - } else if (typeParam.constant->getBasicType() == glslang::EbtUint) { - unsigned literal = typeParam.constant->getConstArray()[0].getUConst(); - operands.push_back(literal); - } else if (typeParam.constant->getBasicType() == glslang::EbtBool) { - unsigned literal = typeParam.constant->getConstArray()[0].getBConst(); - operands.push_back(literal); - } else if (typeParam.constant->getBasicType() == glslang::EbtString) { - auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str(); - unsigned literal = 0; - char* literalPtr = reinterpret_cast(&literal); - unsigned charCount = 0; - char ch = 0; - do { - ch = *(str++); - *(literalPtr++) = ch; - ++charCount; - if (charCount == 4) { - operands.push_back(literal); - literalPtr = reinterpret_cast(&literal); - charCount = 0; - } - } while (ch != 0); - - // Partial literal is padded with 0 - if (charCount > 0) { - for (; charCount < 4; ++charCount) - *(literalPtr++) = 0; + // Constant expression + if (typeParam.constant->isLiteral()) { + if (typeParam.constant->getBasicType() == glslang::EbtFloat) { + float floatValue = static_cast(typeParam.constant->getConstArray()[0].getDConst()); + unsigned literal = *reinterpret_cast(&floatValue); + operands.push_back(literal); + } else if (typeParam.constant->getBasicType() == glslang::EbtInt) { + unsigned literal = typeParam.constant->getConstArray()[0].getIConst(); + operands.push_back(literal); + } else if (typeParam.constant->getBasicType() == glslang::EbtUint) { + unsigned literal = typeParam.constant->getConstArray()[0].getUConst(); + operands.push_back(literal); + } else if (typeParam.constant->getBasicType() == glslang::EbtBool) { + unsigned literal = typeParam.constant->getConstArray()[0].getBConst(); + operands.push_back(literal); + } else if (typeParam.constant->getBasicType() == glslang::EbtString) { + auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str(); + unsigned literal = 0; + char* literalPtr = reinterpret_cast(&literal); + unsigned charCount = 0; + char ch = 0; + do { + ch = *(str++); + *(literalPtr++) = ch; + ++charCount; + if (charCount == 4) { operands.push_back(literal); + literalPtr = reinterpret_cast(&literal); + charCount = 0; } - } else - assert(0); // Unexpected type - } else { - int nextConst = 0; - spv::Id constant = createSpvConstantFromConstUnionArray( - typeParam.constant->getType(), typeParam.constant->getConstArray(), nextConst, false); - operands.push_back(constant); - } - } else { - // Type specifier - spv::Id typeId = convertGlslangToSpvType(*typeParam.type); - operands.push_back(typeId); - } + } while (ch != 0); + + // Partial literal is padded with 0 + if (charCount > 0) { + for (; charCount < 4; ++charCount) + *(literalPtr++) = 0; + operands.push_back(literal); + } + } else + assert(0); // Unexpected type + } else + operands.push_back(createSpvConstant(*typeParam.constant)); } if (spirvInst.set == "") @@ -8847,12 +8837,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol std::vector operandIds; assert(!decorateId.second.empty()); for (auto extraOperand : decorateId.second) { - int nextConst = 0; - spv::Id operandId = createSpvConstantFromConstUnionArray( - extraOperand->getType(), extraOperand->getConstArray(), nextConst, false); - operandIds.push_back(operandId); + if (extraOperand->getQualifier().isSpecConstant()) + operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode())); + else + operandIds.push_back(createSpvConstant(*extraOperand)); } - builder.addDecoration(id, static_cast(decorateId.first), operandIds); + builder.addDecorationId(id, static_cast(decorateId.first), operandIds); } // Add spirv_decorate_string diff --git a/Test/baseResults/spv.intrinsicsSpecConst.vert.out b/Test/baseResults/spv.intrinsicsSpecConst.vert.out new file mode 100644 index 0000000000..11751d6405 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpecConst.vert.out @@ -0,0 +1,35 @@ +spv.intrinsicsSpecConst.vert +Validation failed +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 13 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 10 + ExecutionModeId 4 DenormFlushToZero 7 + Source GLSL 450 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 7 "targetWidth" + Name 10 "pointSize" + Name 11 "builtIn" + Decorate 7(targetWidth) SpecId 5 + Decorate 10(pointSize) Location 0 + Decorate 11(builtIn) SpecId 6 + DecorateId 10(pointSize) BuiltIn 11(builtIn) + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7(targetWidth): 6(int) SpecConstant 32 + 8: TypeFloat 32 + 9: TypePointer Output 8(float) + 10(pointSize): 9(ptr) Variable Output + 11(builtIn): 6(int) SpecConstant 1 + 12: 8(float) Constant 1082130432 + 4(main): 2 Function None 3 + 5: Label + Store 10(pointSize) 12 + Return + FunctionEnd diff --git a/Test/spv.intrinsicsSpecConst.vert b/Test/spv.intrinsicsSpecConst.vert new file mode 100644 index 0000000000..19cc5ef4fe --- /dev/null +++ b/Test/spv.intrinsicsSpecConst.vert @@ -0,0 +1,14 @@ +#version 450 core + +#extension GL_EXT_spirv_intrinsics: enable + +layout(constant_id = 5) const uint targetWidth = 32; +spirv_execution_mode_id(4460/*=DenormFlushToZero*/, targetWidth); + +layout(constant_id = 6) const uint builtIn = 1; +spirv_decorate_id(11/*=BuiltIn*/, builtIn) out float pointSize; + +void main() +{ + pointSize = 4.0; +} diff --git a/glslang/Include/SpirvIntrinsics.h b/glslang/Include/SpirvIntrinsics.h index e7a999d408..3c7d72ce97 100644 --- a/glslang/Include/SpirvIntrinsics.h +++ b/glslang/Include/SpirvIntrinsics.h @@ -65,7 +65,7 @@ struct TSpirvExecutionMode { // spirv_execution_mode TMap> modes; // spirv_execution_mode_id - TMap > modeIds; + TMap > modeIds; }; // SPIR-V decorations @@ -75,7 +75,7 @@ struct TSpirvDecorate { // spirv_decorate TMap > decorates; // spirv_decorate_id - TMap > decorateIds; + TMap> decorateIds; // spirv_decorate_string TMap > decorateStrings; }; @@ -98,20 +98,12 @@ struct TSpirvInstruction { struct TSpirvTypeParameter { POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - TSpirvTypeParameter(const TIntermConstantUnion* arg) { isConstant = true; constant = arg; } - TSpirvTypeParameter(const TType* arg) { isConstant = false; type = arg; } + TSpirvTypeParameter(const TIntermConstantUnion* arg) { constant = arg; } - bool operator==(const TSpirvTypeParameter& rhs) const - { - return isConstant == rhs.isConstant && ((isConstant && constant == rhs.constant) || (!isConstant && type == rhs.type)); - } + bool operator==(const TSpirvTypeParameter& rhs) const { return constant == rhs.constant; } bool operator!=(const TSpirvTypeParameter& rhs) const { return !operator==(rhs); } - bool isConstant; - union { - const TIntermConstantUnion* constant; - const TType* type; - }; + const TIntermConstantUnion* constant; }; typedef TVector TSpirvTypeParameters; diff --git a/glslang/MachineIndependent/ParseHelper.h b/glslang/MachineIndependent/ParseHelper.h index 442741d6d4..885fd90810 100644 --- a/glslang/MachineIndependent/ParseHelper.h +++ b/glslang/MachineIndependent/ParseHelper.h @@ -480,7 +480,6 @@ class TParseContext : public TParseContextBase { TSpirvRequirement* mergeSpirvRequirements(const TSourceLoc& loc, TSpirvRequirement* spirvReq1, TSpirvRequirement* spirvReq2); TSpirvTypeParameters* makeSpirvTypeParameters(const TSourceLoc& loc, const TIntermConstantUnion* constant); - TSpirvTypeParameters* makeSpirvTypeParameters(const TPublicType& type); TSpirvTypeParameters* mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, TSpirvTypeParameters* spirvTypeParams2); TSpirvInstruction* makeSpirvInstruction(const TSourceLoc& loc, const TString& name, const TString& value); diff --git a/glslang/MachineIndependent/SpirvIntrinsics.cpp b/glslang/MachineIndependent/SpirvIntrinsics.cpp index 38094eaaf7..6650f7d9ee 100644 --- a/glslang/MachineIndependent/SpirvIntrinsics.cpp +++ b/glslang/MachineIndependent/SpirvIntrinsics.cpp @@ -130,11 +130,11 @@ void TIntermediate::insertSpirvExecutionModeId(int executionMode, const TIntermA spirvExecutionMode = new TSpirvExecutionMode; assert(args); - TVector extraOperands; + TVector extraOperands; for (auto arg : args->getSequence()) { - auto extraOperand = arg->getAsConstantUnion(); - assert(extraOperand != nullptr); + auto extraOperand = arg->getAsTyped(); + assert(extraOperand != nullptr && extraOperand->getQualifier().isConstant()); extraOperands.push_back(extraOperand); } spirvExecutionMode->modeIds[executionMode] = extraOperands; @@ -165,10 +165,10 @@ void TQualifier::setSpirvDecorateId(int decoration, const TIntermAggregate* args spirvDecorate = new TSpirvDecorate; assert(args); - TVector extraOperands; + TVector extraOperands; for (auto arg : args->getSequence()) { - auto extraOperand = arg->getAsConstantUnion(); - assert(extraOperand != nullptr); + auto extraOperand = arg->getAsTyped(); + assert(extraOperand != nullptr && extraOperand->getQualifier().isConstant()); extraOperands.push_back(extraOperand); } spirvDecorate->decorateIds[decoration] = extraOperands; @@ -201,25 +201,27 @@ TString TQualifier::getSpirvDecorateQualifierString() const const auto appendBool = [&](bool b) { qualifierString.append(std::to_string(b).c_str()); }; const auto appendStr = [&](const char* s) { qualifierString.append(s); }; - const auto appendDecorate = [&](const TIntermConstantUnion* constant) { + const auto appendDecorate = [&](const TIntermTyped* constant) { + auto& constArray = constant->getAsConstantUnion() != nullptr ? constant->getAsConstantUnion()->getConstArray() + : constant->getAsSymbolNode()->getConstArray(); if (constant->getBasicType() == EbtFloat) { - float value = static_cast(constant->getConstArray()[0].getDConst()); + float value = static_cast(constArray[0].getDConst()); appendFloat(value); } else if (constant->getBasicType() == EbtInt) { - int value = constant->getConstArray()[0].getIConst(); + int value = constArray[0].getIConst(); appendInt(value); } else if (constant->getBasicType() == EbtUint) { - unsigned value = constant->getConstArray()[0].getUConst(); + unsigned value = constArray[0].getUConst(); appendUint(value); } else if (constant->getBasicType() == EbtBool) { - bool value = constant->getConstArray()[0].getBConst(); + bool value = constArray[0].getBConst(); appendBool(value); } else if (constant->getBasicType() == EbtString) { - const TString* value = constant->getConstArray()[0].getSConst(); + const TString* value = constArray[0].getSConst(); appendStr(value->c_str()); } else @@ -290,13 +292,6 @@ TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TSourceLoc& l return spirvTypeParams; } -TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TPublicType& type) -{ - TSpirvTypeParameters* spirvTypeParams = new TSpirvTypeParameters; - spirvTypeParams->push_back(TSpirvTypeParameter(new TType(type))); - return spirvTypeParams; -} - TSpirvTypeParameters* TParseContext::mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, TSpirvTypeParameters* spirvTypeParams2) { // Merge SPIR-V type parameters of the second one to the first one diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 3626502972..d4cc5bc9ce 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -4367,9 +4367,6 @@ spirv_type_parameter : constant_expression { $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion()); } - | type_specifier { - $$ = parseContext.makeSpirvTypeParameters($1); - } spirv_instruction_qualifier : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index ad48386341..df53eb5bd8 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -4367,9 +4367,6 @@ spirv_type_parameter : constant_expression { $$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion()); } - | type_specifier { - $$ = parseContext.makeSpirvTypeParameters($1); - } spirv_instruction_qualifier : SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN { diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 33b8a92417..5ba6a6d495 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -1034,16 +1034,16 @@ union yyalloc /* YYFINAL -- State number of the termination state. */ #define YYFINAL 442 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 12453 +#define YYLAST 12452 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 455 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 131 /* YYNRULES -- Number of rules. */ -#define YYNRULES 684 +#define YYNRULES 683 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 930 +#define YYNSTATES 929 /* YYMAXUTOK -- Last valid token kind. */ #define YYMAXUTOK 709 @@ -1204,8 +1204,8 @@ static const yytype_int16 yyrline[] = 4183, 4187, 4194, 4197, 4202, 4205, 4208, 4211, 4214, 4219, 4228, 4239, 4244, 4252, 4256, 4261, 4265, 4270, 4274, 4279, 4283, 4290, 4293, 4298, 4301, 4304, 4307, 4312, 4320, 4330, - 4334, 4339, 4343, 4348, 4352, 4359, 4362, 4367, 4370, 4375, - 4378, 4384, 4387, 4392, 4395 + 4334, 4339, 4343, 4348, 4352, 4359, 4362, 4367, 4372, 4375, + 4381, 4384, 4389, 4392 }; #endif @@ -1433,7 +1433,7 @@ static const yytype_int16 yytoknum[] = }; #endif -#define YYPACT_NINF (-863) +#define YYPACT_NINF (-859) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) @@ -1447,99 +1447,99 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 4549, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -260, -182, -177, -163, -130, - -115, -100, -89, -863, -863, -196, -863, -863, -863, -863, - -863, -324, -863, -863, -863, -863, -863, -306, -863, -863, - -863, -863, -863, -863, -77, -66, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -332, -175, - -153, -161, 7713, -266, -863, -71, -863, -863, -863, -863, - 5453, -863, -863, -863, -863, -116, -863, -863, 933, -863, - -863, 7713, -35, -863, -863, -863, 5905, -54, -139, -138, - -137, -128, -124, -54, -123, -51, 12061, -863, -15, -347, - -44, -863, -295, -863, -9, -6, 7713, -863, -863, -863, - 7713, -39, -38, -863, -303, -863, -226, -863, -863, 10762, - -3, -863, -863, -863, 1, -32, 7713, -863, -5, -8, - -1, -863, -230, -863, -219, -2, 3, 4, 5, -215, - 6, 8, 10, 11, 12, 15, -214, 13, 16, 21, - -134, -863, 17, 7713, -863, 19, -863, -212, -863, -863, - -211, 9030, -863, -273, 1385, -863, -863, -863, -863, -863, - -3, -263, -863, 9463, -236, -863, -28, -863, -106, 10762, - 10762, -863, 10762, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -264, -863, -863, -863, 23, -203, 11195, 25, - -863, 10762, -863, -863, -311, 24, -6, 29, -863, -309, - -54, -863, -20, -863, -323, 28, -118, 10762, -112, -863, - -155, -111, 10762, -103, 35, -98, -54, -863, 11628, -863, - -94, 10762, 32, -51, -863, 7713, 18, 6357, -863, 7713, - 10762, -863, -347, -863, 33, -863, -863, -72, -254, -86, - -297, -68, -13, 26, 20, 50, 49, -300, 42, 9896, - -863, 43, -863, -863, 55, 58, 60, -863, 65, 71, - 62, 10329, 73, 10762, 66, 69, 70, 72, 74, -241, - -863, -863, -41, -863, -175, 83, 85, -863, -863, -863, - -863, -863, 1837, -863, -863, -863, -863, -863, -863, -863, - -863, -863, 5001, 24, 9463, -233, 8164, -863, -863, 9463, - 7713, -863, 51, -863, -863, -863, -194, -863, -863, 10762, - 52, -863, -863, 10762, 88, -863, -863, -863, 10762, -863, - -863, -863, -315, -863, -863, -191, 82, -863, -863, -863, - -863, -863, -863, -190, -863, -187, -863, -863, -186, 86, - -863, -863, -863, -863, -169, -863, -168, -863, -167, 89, - -863, -165, 91, -157, 82, -863, 85, -156, -863, 94, - 98, -863, -863, 18, -3, -40, -863, -863, -863, 6809, - -863, -863, -863, 10762, 10762, 10762, 10762, 10762, 10762, 10762, - 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, - 10762, 10762, -863, -863, -863, 97, -863, 2289, -863, -863, - -863, 2289, -863, 10762, -863, -863, -34, 10762, -79, -863, - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, 10762, 10762, -863, -863, -863, - -863, -863, -863, -863, 9463, -863, -863, -208, -863, 7261, - -863, -863, 99, 96, -863, -863, -863, -863, -863, -132, - -131, -863, -307, -863, -323, -863, -323, -863, 10762, 10762, - -863, -155, -863, -155, -863, 10762, 10762, -863, 93, 35, - -863, 11628, -863, 10762, -863, -863, -33, 24, 18, -863, - -863, -863, -863, -863, -72, -72, -254, -254, -86, -86, - -86, -86, -297, -297, -68, -13, 26, 20, 50, 49, - 10762, -863, 2289, 4097, 57, 3645, -154, -863, -152, -863, - -863, -863, -863, -863, 8597, -863, -863, -863, 105, -863, - 75, -863, -145, -863, -144, -863, -143, -863, -142, -863, - -141, -140, -863, -863, -863, -27, 100, 96, 76, 106, - 109, -863, -863, 4097, 107, -863, -863, -863, -863, -863, - -863, -863, -863, -863, -863, -863, 10762, -863, 101, 2741, - 10762, -863, 103, 113, 67, 112, 3193, -863, 114, -863, - 9463, -863, -863, -863, -133, 10762, 2741, 107, -863, -863, - 2289, -863, 110, 96, -863, -863, 2289, 116, -863, -863 + 4548, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -312, -274, -244, -212, -208, + -201, -181, -169, -859, -859, -194, -859, -859, -859, -859, + -859, -285, -859, -859, -859, -859, -859, -317, -859, -859, + -859, -859, -859, -859, -132, -73, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -329, -70, + -158, -145, 7712, -221, -859, -164, -859, -859, -859, -859, + 5452, -859, -859, -859, -859, -68, -859, -859, 932, -859, + -859, 7712, -55, -859, -859, -859, 5904, -80, -154, -150, + -142, -135, -130, -80, -129, -79, 12060, -859, -45, -354, + -76, -859, -308, -859, -43, -40, 7712, -859, -859, -859, + 7712, -72, -71, -859, -265, -859, -257, -859, -859, 10761, + -39, -859, -859, -859, -35, -69, 7712, -859, -42, -38, + -37, -859, -302, -859, -235, -32, -33, -28, -27, -217, + -26, -23, -22, -21, -20, -16, -216, -29, -15, -31, + -303, -859, -13, 7712, -859, -14, -859, -214, -859, -859, + -205, 9029, -859, -279, 1384, -859, -859, -859, -859, -859, + -39, -299, -859, 9462, -275, -859, -34, -859, -137, 10761, + 10761, -859, 10761, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -248, -859, -859, -859, -3, -203, 11194, -1, + -859, 10761, -859, -859, -310, 3, -40, 1, -859, -309, + -80, -859, -30, -859, -319, 5, -128, 10761, -124, -859, + -157, -122, 10761, -120, 10, -118, -80, -859, 11627, -859, + -116, 10761, 7, -79, -859, 7712, -25, 6356, -859, 7712, + 10761, -859, -354, -859, -19, -859, -859, -78, -263, -94, + -298, -52, -18, -8, -12, 29, 28, -301, 15, 9895, + -859, 16, -859, -859, 19, 12, 17, -859, 20, 23, + 18, 10328, 24, 10761, 21, 22, 25, 27, 30, -215, + -859, -859, -117, -859, -70, 26, 34, -859, -859, -859, + -859, -859, 1836, -859, -859, -859, -859, -859, -859, -859, + -859, -859, 5000, 3, 9462, -264, 8163, -859, -859, 9462, + 7712, -859, -11, -859, -859, -859, -195, -859, -859, 10761, + -6, -859, -859, 10761, 37, -859, -859, -859, 10761, -859, + -859, -859, -322, -859, -859, -192, 35, -859, -859, -859, + -859, -859, -859, -179, -859, -178, -859, -859, -177, 32, + -859, -859, -859, -859, -175, -859, -174, -859, -167, 36, + -859, -166, 38, -165, 35, -859, -163, -859, 45, 46, + -859, -859, -25, -39, -115, -859, -859, -859, 6808, -859, + -859, -859, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, + 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, + 10761, -859, -859, -859, 51, -859, 2288, -859, -859, -859, + 2288, -859, 10761, -859, -859, -88, 10761, -63, -859, -859, + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, 10761, 10761, -859, -859, -859, -859, + -859, -859, -859, 9462, -859, -859, -108, -859, 7260, -859, + -859, 52, 53, -859, -859, -859, -859, -859, -138, -136, + -859, -304, -859, -319, -859, -319, -859, 10761, 10761, -859, + -157, -859, -157, -859, 10761, 10761, -859, 65, 10, -859, + 11627, -859, 10761, -859, -859, -86, 3, -25, -859, -859, + -859, -859, -859, -78, -78, -263, -263, -94, -94, -94, + -94, -298, -298, -52, -18, -8, -12, 29, 28, 10761, + -859, 2288, 4096, 31, 3644, -156, -859, -155, -859, -859, + -859, -859, -859, 8596, -859, -859, -859, 66, -859, 39, + -859, -153, -859, -151, -859, -148, -859, -146, -859, -144, + -143, -859, -859, -859, -61, 64, 53, 40, 72, 74, + -859, -859, 4096, 75, -859, -859, -859, -859, -859, -859, + -859, -859, -859, -859, -859, 10761, -859, 71, 2740, 10761, + -859, 73, 81, 41, 80, 3192, -859, 83, -859, 9462, + -859, -859, -859, -141, 10761, 2740, 75, -859, -859, 2288, + -859, 78, 53, -859, -859, 2288, 86, -859, -859 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1592,7 +1592,7 @@ static const yytype_int16 yydefact[] = 0, 99, 0, 94, 0, 109, 0, 121, 115, 123, 0, 124, 0, 97, 131, 102, 0, 154, 136, 0, 204, 210, 1, 617, 0, 0, 0, 96, 0, 0, - 0, 628, 0, 681, 0, 0, 0, 0, 0, 0, + 0, 628, 0, 680, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, 0, 624, 0, 0, 533, 149, 151, 0, 147, 202, 0, 0, 100, 0, 0, 622, 110, 116, 120, 122, @@ -1601,7 +1601,7 @@ static const yytype_int16 yydefact[] = 8, 2, 16, 14, 15, 17, 10, 11, 12, 13, 3, 18, 37, 20, 25, 26, 0, 0, 30, 0, 213, 0, 36, 34, 0, 205, 111, 0, 95, 0, - 0, 679, 0, 636, 0, 0, 0, 0, 0, 653, + 0, 678, 0, 636, 0, 0, 0, 0, 0, 653, 0, 0, 0, 0, 0, 0, 0, 673, 0, 651, 0, 0, 0, 0, 98, 0, 0, 0, 537, 0, 0, 146, 0, 200, 0, 206, 45, 49, 52, 55, @@ -1613,70 +1613,70 @@ static const yytype_int16 yydefact[] = 594, 560, 0, 119, 0, 127, 0, 545, 134, 0, 0, 107, 0, 104, 38, 39, 0, 22, 23, 0, 0, 28, 27, 0, 215, 31, 33, 40, 0, 212, - 112, 683, 0, 684, 629, 0, 0, 682, 648, 644, + 112, 682, 0, 683, 629, 0, 0, 681, 648, 644, 645, 646, 647, 0, 642, 0, 93, 649, 0, 0, 663, 664, 665, 666, 0, 661, 0, 667, 0, 0, - 669, 0, 0, 0, 2, 677, 678, 0, 675, 0, - 0, 623, 625, 0, 543, 0, 541, 536, 538, 0, - 150, 148, 203, 0, 0, 0, 0, 0, 0, 0, + 669, 0, 0, 0, 2, 677, 0, 675, 0, 0, + 623, 625, 0, 543, 0, 541, 536, 538, 0, 150, + 148, 203, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 76, 207, 208, 0, 563, 0, 596, 609, - 608, 0, 600, 0, 612, 610, 0, 0, 0, 593, - 613, 614, 615, 562, 81, 82, 84, 83, 86, 87, - 88, 89, 90, 85, 80, 0, 0, 578, 574, 576, - 580, 587, 595, 129, 0, 548, 549, 0, 133, 0, - 108, 4, 0, 24, 21, 32, 214, 632, 634, 0, - 0, 680, 0, 638, 0, 637, 0, 640, 0, 0, - 655, 0, 654, 0, 657, 0, 0, 659, 0, 0, - 674, 0, 671, 0, 652, 627, 0, 544, 0, 539, - 534, 46, 47, 48, 51, 50, 53, 54, 58, 59, - 56, 57, 61, 62, 64, 66, 68, 70, 72, 74, - 0, 209, 565, 0, 0, 0, 0, 611, 0, 592, - 79, 92, 128, 546, 0, 106, 19, 630, 0, 631, - 0, 643, 0, 650, 0, 662, 0, 668, 0, 670, - 0, 0, 676, 540, 542, 0, 0, 584, 0, 0, - 0, 603, 602, 605, 571, 588, 547, 550, 633, 635, - 639, 641, 656, 658, 660, 672, 0, 566, 0, 0, - 0, 604, 0, 0, 583, 0, 0, 581, 0, 77, - 0, 568, 597, 567, 0, 606, 0, 571, 570, 572, - 590, 585, 0, 607, 601, 582, 591, 0, 599, 589 + 0, 76, 207, 208, 0, 563, 0, 596, 609, 608, + 0, 600, 0, 612, 610, 0, 0, 0, 593, 613, + 614, 615, 562, 81, 82, 84, 83, 86, 87, 88, + 89, 90, 85, 80, 0, 0, 578, 574, 576, 580, + 587, 595, 129, 0, 548, 549, 0, 133, 0, 108, + 4, 0, 24, 21, 32, 214, 632, 634, 0, 0, + 679, 0, 638, 0, 637, 0, 640, 0, 0, 655, + 0, 654, 0, 657, 0, 0, 659, 0, 0, 674, + 0, 671, 0, 652, 627, 0, 544, 0, 539, 534, + 46, 47, 48, 51, 50, 53, 54, 58, 59, 56, + 57, 61, 62, 64, 66, 68, 70, 72, 74, 0, + 209, 565, 0, 0, 0, 0, 611, 0, 592, 79, + 92, 128, 546, 0, 106, 19, 630, 0, 631, 0, + 643, 0, 650, 0, 662, 0, 668, 0, 670, 0, + 0, 676, 540, 542, 0, 0, 584, 0, 0, 0, + 603, 602, 605, 571, 588, 547, 550, 633, 635, 639, + 641, 656, 658, 660, 672, 0, 566, 0, 0, 0, + 604, 0, 0, 583, 0, 0, 581, 0, 77, 0, + 568, 597, 567, 0, 606, 0, 571, 570, 572, 590, + 585, 0, 607, 601, 582, 591, 0, 599, 589 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -863, -863, -863, -863, -863, -863, -863, -863, -863, -863, - -863, -863, -418, -863, -380, -379, -484, -382, -258, -256, - -253, -257, -252, -255, -863, -478, -863, -485, -863, -491, - -530, 14, -863, -863, -863, 7, -397, -863, -863, 44, - 53, 47, -863, -863, -400, -863, -863, -863, -863, -92, - -863, -377, -362, -863, 9, -863, 0, -414, -863, -863, - -863, -863, 150, -863, -863, -863, -546, -548, -218, -331, - -624, -863, -359, -609, -862, -863, -417, -863, -863, -427, - -426, -863, -863, 68, -719, -355, -863, -136, -863, -389, - -863, -135, -863, -863, -863, -863, -129, -863, -863, -863, - -863, -863, -863, -863, -863, 102, -863, -863, 2, -863, - -65, -234, -432, -863, -863, -863, -301, -293, -294, -863, - -863, -304, -299, -302, -298, -863, -296, -305, -863, -383, - -526 + -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, + -859, -859, -209, -859, -418, -417, -602, -421, -291, -284, + -286, -283, -281, -287, -859, -473, -859, -490, -859, -497, + -520, 13, -859, -859, -859, 14, -394, -859, -859, 33, + 42, 44, -859, -859, -395, -859, -859, -859, -859, -121, + -859, -381, -369, -859, 9, -859, 0, -424, -859, -859, + -859, -859, 113, -859, -859, -859, -545, -549, -252, -365, + -617, -859, -391, -618, -858, -859, -450, -859, -859, -459, + -458, -859, -859, 43, -721, -387, -859, -173, -859, -422, + -859, -170, -859, -859, -859, -859, -168, -859, -859, -859, + -859, -859, -859, -859, -859, 67, -859, -859, 2, -859, + -97, -300, -386, -859, -859, -859, -326, -323, -327, -859, + -859, -330, -325, -328, -332, -859, -331, -334, -859, -390, + -530 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 520, 521, 522, 782, 523, 524, 525, 526, 527, + -1, 520, 521, 522, 781, 523, 524, 525, 526, 527, 528, 529, 609, 531, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 610, 840, 611, 765, 612, + 583, 584, 585, 586, 587, 610, 839, 611, 764, 612, 695, 613, 378, 640, 498, 614, 380, 381, 382, 427, 428, 429, 383, 384, 385, 386, 387, 388, 477, 478, 389, 390, 391, 392, 532, 480, 533, 483, 440, 441, - 534, 395, 396, 397, 569, 473, 567, 568, 705, 706, - 638, 777, 617, 618, 619, 620, 621, 737, 876, 912, - 904, 905, 906, 913, 622, 623, 624, 625, 907, 879, - 626, 627, 908, 927, 628, 629, 630, 843, 741, 845, - 883, 902, 903, 631, 398, 399, 400, 424, 632, 470, - 471, 450, 451, 789, 790, 402, 673, 674, 678, 403, - 404, 684, 685, 688, 691, 405, 697, 698, 406, 452, + 534, 395, 396, 397, 569, 473, 567, 568, 704, 705, + 638, 776, 617, 618, 619, 620, 621, 736, 875, 911, + 903, 904, 905, 912, 622, 623, 624, 625, 906, 878, + 626, 627, 907, 926, 628, 629, 630, 842, 740, 844, + 882, 901, 902, 631, 398, 399, 400, 424, 632, 470, + 471, 450, 451, 788, 789, 402, 673, 674, 678, 403, + 404, 684, 685, 688, 691, 405, 696, 697, 406, 452, 453 }; @@ -1685,67 +1685,67 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 394, 445, 401, 588, 444, 430, 445, 379, 637, 393, - 773, 646, 776, 769, 377, 778, 667, 677, 842, 708, - 494, 530, 687, 709, 446, 668, 535, 421, 437, 446, - 466, 700, 667, 787, 720, 721, 731, 911, 475, 661, - 710, 661, 662, 655, 919, 658, 492, 417, 481, 430, - 328, 329, 330, 422, 911, 493, 481, 659, 669, 670, - 671, 672, 476, 576, 482, 647, 648, 788, 437, 676, - 722, 723, 732, 663, 676, 663, 633, 635, 589, 418, - 676, 644, 645, 676, 437, -35, 590, 649, 481, 407, - 432, 650, 676, 433, 779, 634, 565, 754, 755, 756, - 757, 758, 759, 760, 761, 762, 763, 716, 664, 717, - 746, 735, 748, 657, 664, 589, 664, 764, 589, 664, - 541, 664, 639, 664, 664, 774, 542, 495, 664, 576, - 496, 543, 844, 497, 576, 549, 557, 544, 571, 573, - 576, 550, 558, 576, 572, 574, 853, 652, 854, 637, - 852, 637, 576, 653, 637, 415, 781, 665, 783, 791, - 793, 708, 766, 795, 797, 542, 794, 408, 785, 796, - 798, 576, 409, 693, 456, 458, 460, 462, 464, 465, - 468, 800, 802, 804, 423, 807, 410, 801, 803, 805, - 565, 808, 565, 810, 812, 426, 884, 425, 885, 811, - 813, 926, 766, 437, 766, 890, 891, 892, 893, 894, - 895, 794, 798, 801, 805, 808, 813, 922, 562, 411, - 857, 859, 563, 766, 858, 860, 680, 681, 682, 683, - 887, 708, 445, 769, 412, 444, 828, 829, 830, 831, - 786, 718, 719, 454, 457, 459, 455, 455, 455, 413, - 642, 439, 846, 643, 461, 446, 848, 455, 463, 467, - 414, 455, 455, 565, 675, 724, 725, 455, 863, 677, - 679, 686, 419, 455, 455, 867, 687, 766, 849, 689, - 850, 851, 455, 420, 692, 667, 921, 455, 699, 637, - 817, 455, 713, 714, 715, 821, 822, 823, 576, 576, + 394, 430, 401, 637, 768, 646, 445, 444, 588, 393, + 494, 445, 667, 377, 379, 841, 535, 772, 707, 775, + 446, 437, 777, 466, 708, 446, 786, 677, 667, 668, + 421, 475, 687, 719, 720, 730, 417, 407, 655, 661, + 910, 699, 662, 481, 661, 430, 658, 918, 541, 562, + 709, 482, 481, 563, 542, 476, 422, 910, 659, 634, + 787, 437, 669, 670, 671, 672, 633, 635, 418, 721, + 722, 731, 589, 663, 676, 408, 589, 437, 663, 676, + 590, 647, 648, 639, 492, 676, 481, 589, 676, 328, + 329, 330, 565, 493, 773, 778, 495, 676, 715, 496, + 716, -35, 497, 649, 745, 409, 747, 650, 456, 458, + 460, 462, 464, 465, 468, 543, 734, 827, 828, 829, + 830, 544, 843, 753, 754, 755, 756, 757, 758, 759, + 760, 761, 762, 549, 557, 432, 571, 410, 433, 550, + 558, 411, 572, 763, 637, 573, 637, 652, 412, 637, + 665, 574, 782, 653, 664, 780, 851, 415, 790, 707, + 664, 765, 664, 784, 542, 664, 693, 664, 413, 664, + 664, 792, 794, 796, 664, 799, 801, 793, 795, 797, + 414, 800, 802, 803, 806, 809, 565, 811, 565, 804, + 807, 810, 425, 812, 883, 884, 437, 889, 925, 890, + 765, 765, 891, 793, 892, 797, 893, 894, 800, 921, + 804, 426, 807, 812, 856, 765, 858, 419, 857, 642, + 859, 434, 643, 768, 680, 681, 682, 683, 454, 707, + 530, 455, 457, 717, 718, 455, 886, 445, 444, 765, + 459, 817, 766, 455, 818, 845, 852, 461, 853, 847, + 455, 446, 463, 467, 675, 455, 455, 455, 679, 565, + 686, 455, 689, 455, 692, 455, 698, 455, 765, 455, + 817, 846, 576, 872, 849, 850, 420, 862, 677, 816, + 667, 723, 724, 637, 866, 687, 712, 713, 714, 423, + 644, 645, 920, 765, 848, 765, 895, 823, 824, 439, + 825, 826, 831, 832, 447, 449, 469, 768, 474, 479, + 484, 325, 481, 490, 491, 536, 537, 538, 561, 540, + 539, 559, 657, 546, 676, 676, 545, 565, 547, 548, + 551, 676, 676, 552, 553, 554, 555, 676, 576, 676, + 556, 560, 874, 576, 570, 876, 564, 651, 656, 576, + 492, 641, 576, 725, 589, 666, 662, 727, 690, 700, + 703, 576, 726, 637, 728, 729, 711, 732, 737, 741, + 735, 738, 742, 746, 779, -36, 739, 743, 748, 783, + 576, 749, 431, -34, 750, 876, 751, -29, 798, 752, + 438, 393, 805, 791, 808, 813, 814, 565, 394, 393, + 401, 394, 913, 840, 855, 908, 394, 393, 401, 765, + 393, 377, 379, 868, 887, 393, 472, 922, 896, 637, + 448, 888, 898, 899, 879, 897, 431, 486, -569, 909, + 431, 915, 914, 591, 833, 393, 919, 927, 916, 393, + 928, 835, 834, 838, 416, 836, 438, 877, 837, 785, + 815, 710, 873, 880, 917, 393, 923, 881, 924, 769, + 900, 446, 770, 488, 771, 443, 701, 485, 487, 861, + 860, 863, 865, 566, 489, 864, 869, 867, 871, 870, + 0, 0, 393, 0, 616, 0, 0, 877, 0, 0, + 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, + 0, 446, 0, 820, 821, 822, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 576, 576, 434, 766, 818, 769, 767, 819, - 676, 676, 766, 818, 447, 847, 873, 676, 676, 766, - 896, 449, 565, 676, 469, 676, 824, 825, 474, 826, - 827, 479, 832, 833, 484, 325, 490, 491, 481, 875, - 539, 536, 877, 537, 538, 540, 545, 641, 726, 546, - 547, 548, 551, 559, 552, 666, 553, 554, 555, 637, - 561, 556, 560, 651, 656, 589, 564, 570, 492, 662, - 576, 576, 431, 690, 701, 729, 730, 576, 576, 728, - 438, 393, 877, 576, 733, 576, 727, 736, 394, 393, - 401, 394, 565, 704, 738, 379, 394, 393, 401, 914, - 393, 909, 377, 448, 742, 393, 472, 739, 712, 740, - 743, 744, 747, 749, 923, 637, 431, 486, 750, 751, - 431, 752, -36, 753, -34, 393, 780, 784, -29, 393, - 792, 869, 799, 878, 814, 806, 438, 809, 815, 841, - 880, 856, 766, 888, 897, 393, 899, 889, 900, 910, - -569, 898, 915, 916, 917, 591, 446, 920, 834, 928, - 929, 835, 837, 566, 488, 836, 839, 489, 838, 487, - 711, 416, 393, 878, 616, 816, 881, 874, 918, 924, - 882, 925, 485, 615, 901, 862, 770, 771, 702, 866, - 443, 861, 865, 772, 868, 864, 446, 0, 872, 0, - 0, 870, 0, 0, 0, 871, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 576, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 660, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 696, 0, - 0, 0, 0, 0, 0, 703, 0, 566, 0, 566, - 0, 0, 0, 0, 393, 0, 393, 0, 393, 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, 702, 0, 566, 0, 566, + 0, 0, 0, 0, 393, 0, 393, 0, 393, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 576, 576, + 0, 0, 0, 0, 0, 576, 576, 0, 0, 0, + 0, 576, 0, 576, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 615, 394, 0, 0, 0, 0, 0, 0, 0, @@ -1755,759 +1755,533 @@ static const yytype_int16 yytable[] = 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, 566, - 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, + 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 616, 0, 0, - 0, 616, 0, 0, 0, 0, 615, 0, 0, 0, - 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, + 616, 0, 0, 0, 0, 615, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 566, - 0, 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, + 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 696, 0, 696, 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, 616, 616, 0, 616, 0, 401, 0, 0, - 0, 615, 615, 0, 615, 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, 616, 0, 0, 0, 0, 0, 0, - 0, 0, 615, 0, 0, 0, 0, 0, 0, 616, - 0, 0, 0, 0, 0, 0, 616, 0, 615, 0, - 0, 0, 0, 0, 0, 615, 616, 0, 0, 0, - 616, 0, 0, 0, 0, 615, 616, 0, 0, 615, - 0, 0, 0, 442, 0, 615, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, + 0, 616, 616, 0, 616, 0, 401, 0, 0, 0, + 615, 615, 0, 615, 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, 325, 0, 0, 0, 0, 0, - 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, - 331, 0, 0, 0, 0, 0, 0, 0, 0, 332, - 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, + 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, + 0, 0, 0, 0, 0, 616, 0, 615, 0, 0, + 0, 0, 0, 0, 615, 616, 0, 0, 0, 616, + 0, 0, 0, 0, 615, 616, 0, 0, 615, 0, + 0, 0, 442, 0, 615, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, - 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 501, 502, 0, 325, 0, 591, 592, - 0, 0, 0, 0, 593, 503, 504, 505, 506, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, - 329, 330, 331, 0, 0, 0, 507, 508, 509, 510, - 511, 332, 333, 334, 335, 336, 337, 338, 594, 595, - 596, 597, 0, 598, 599, 600, 601, 602, 603, 604, - 605, 606, 607, 339, 340, 341, 342, 343, 344, 512, - 513, 514, 515, 516, 517, 518, 519, 345, 608, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 499, 500, 0, 0, + 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, + 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 327, 328, 329, 330, 331, + 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, + 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 501, 502, 0, 325, 0, - 591, 768, 0, 0, 0, 0, 593, 503, 504, 505, - 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 328, 329, 330, 331, 0, 0, 0, 507, 508, - 509, 510, 511, 332, 333, 334, 335, 336, 337, 338, - 594, 595, 596, 597, 0, 598, 599, 600, 601, 602, - 603, 604, 605, 606, 607, 339, 340, 341, 342, 343, - 344, 512, 513, 514, 515, 516, 517, 518, 519, 345, - 608, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 0, 0, 499, 500, + 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, + 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 502, 0, - 325, 0, 591, 0, 0, 0, 0, 0, 593, 503, - 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 328, 329, 330, 331, 0, 0, 0, - 507, 508, 509, 510, 511, 332, 333, 334, 335, 336, - 337, 338, 594, 595, 596, 597, 0, 598, 599, 600, - 601, 602, 603, 604, 605, 606, 607, 339, 340, 341, - 342, 343, 344, 512, 513, 514, 515, 516, 517, 518, - 519, 345, 608, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, - 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, - 502, 0, 325, 0, 484, 0, 0, 0, 0, 0, - 593, 503, 504, 505, 506, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 327, 328, 329, 330, 331, 0, - 0, 0, 507, 508, 509, 510, 511, 332, 333, 334, - 335, 336, 337, 338, 594, 595, 596, 597, 0, 598, - 599, 600, 601, 602, 603, 604, 605, 606, 607, 339, - 340, 341, 342, 343, 344, 512, 513, 514, 515, 516, - 517, 518, 519, 345, 608, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 501, 502, 0, 325, 0, 0, 0, 0, 0, - 0, 0, 593, 503, 504, 505, 506, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, - 331, 0, 0, 0, 507, 508, 509, 510, 511, 332, - 333, 334, 335, 336, 337, 338, 594, 595, 596, 597, - 0, 598, 599, 600, 601, 602, 603, 604, 605, 606, - 607, 339, 340, 341, 342, 343, 344, 512, 513, 514, - 515, 516, 517, 518, 519, 345, 608, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 499, 500, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 501, 502, 0, 325, 0, 0, 0, - 0, 0, 0, 0, 593, 503, 504, 505, 506, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, - 329, 330, 331, 0, 0, 0, 507, 508, 509, 510, - 511, 332, 333, 334, 335, 336, 337, 338, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 339, 340, 341, 342, 343, 344, 512, - 513, 514, 515, 516, 517, 518, 519, 345, 0, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 318, 319, 320, - 321, 322, 323, 324, 0, 0, 499, 500, 0, 0, + 0, 0, 501, 502, 0, 325, 0, 591, 592, 0, + 0, 0, 0, 593, 503, 504, 505, 506, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, + 330, 331, 0, 0, 0, 507, 508, 509, 510, 511, + 332, 333, 334, 335, 336, 337, 338, 594, 595, 596, + 597, 0, 598, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 339, 340, 341, 342, 343, 344, 512, 513, + 514, 515, 516, 517, 518, 519, 345, 608, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 501, 502, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 503, 504, 505, - 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 328, 329, 330, 0, 0, 0, 0, 507, 508, - 509, 510, 511, 332, 333, 334, 335, 336, 337, 338, + 0, 0, 0, 0, 501, 502, 0, 325, 0, 591, + 767, 0, 0, 0, 0, 593, 503, 504, 505, 506, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, + 328, 329, 330, 331, 0, 0, 0, 507, 508, 509, + 510, 511, 332, 333, 334, 335, 336, 337, 338, 594, + 595, 596, 597, 0, 598, 599, 600, 601, 602, 603, + 604, 605, 606, 607, 339, 340, 341, 342, 343, 344, + 512, 513, 514, 515, 516, 517, 518, 519, 345, 608, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 339, 340, 341, 342, 343, - 344, 512, 513, 514, 515, 516, 517, 518, 519, 345, - 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 325, 0, 0, 0, 0, 0, 0, 0, 326, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 328, 329, 330, 331, 0, 0, 0, - 0, 0, 0, 0, 0, 332, 333, 334, 335, 336, - 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 339, 340, 341, - 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, - 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, - 0, 318, 319, 320, 321, 322, 323, 324, 0, 0, + 0, 0, 0, 0, 0, 0, 501, 502, 0, 325, + 0, 591, 0, 0, 0, 0, 0, 593, 503, 504, + 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 327, 328, 329, 330, 331, 0, 0, 0, 507, + 508, 509, 510, 511, 332, 333, 334, 335, 336, 337, + 338, 594, 595, 596, 597, 0, 598, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 339, 340, 341, 342, + 343, 344, 512, 513, 514, 515, 516, 517, 518, 519, + 345, 608, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 0, 0, 499, + 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 501, 502, + 0, 325, 0, 484, 0, 0, 0, 0, 0, 593, + 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 327, 328, 329, 330, 331, 0, 0, + 0, 507, 508, 509, 510, 511, 332, 333, 334, 335, + 336, 337, 338, 594, 595, 596, 597, 0, 598, 599, + 600, 601, 602, 603, 604, 605, 606, 607, 339, 340, + 341, 342, 343, 344, 512, 513, 514, 515, 516, 517, + 518, 519, 345, 608, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, + 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 501, 502, 0, 325, 0, 0, 0, 0, 0, 0, + 0, 593, 503, 504, 505, 506, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 327, 328, 329, 330, 331, + 0, 0, 0, 507, 508, 509, 510, 511, 332, 333, + 334, 335, 336, 337, 338, 594, 595, 596, 597, 0, + 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, + 339, 340, 341, 342, 343, 344, 512, 513, 514, 515, + 516, 517, 518, 519, 345, 608, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 501, 502, 0, 325, 0, 0, 0, 0, + 0, 0, 0, 593, 503, 504, 505, 506, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, + 330, 331, 0, 0, 0, 507, 508, 509, 510, 511, + 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 339, 340, 341, 342, 343, 344, 512, 513, + 514, 515, 516, 517, 518, 519, 345, 0, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 332, 333, 334, - 335, 336, 337, 338, 594, 0, 0, 597, 0, 598, - 599, 0, 0, 602, 0, 0, 0, 0, 0, 339, - 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, - 0, 0, 0, 345, 0, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, + 0, 0, 0, 0, 501, 502, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 503, 504, 505, 506, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, + 328, 329, 330, 0, 0, 0, 0, 507, 508, 509, + 510, 511, 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 339, 340, 341, 342, 343, 344, + 512, 513, 514, 515, 516, 517, 518, 519, 345, 0, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, + 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 435, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, - 0, 0, 0, 0, 0, 0, 0, 0, 436, 332, - 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, + 0, 327, 328, 329, 330, 331, 0, 0, 0, 0, + 0, 0, 0, 0, 332, 333, 334, 335, 336, 337, + 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 339, 340, 341, 342, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, + 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, - 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 318, 319, 320, 321, 322, - 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, - 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 339, 340, 341, 342, 343, 344, 0, - 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, - 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, - 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, - 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, - 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 318, 319, 320, - 321, 322, 323, 324, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 332, 333, 334, 335, + 336, 337, 338, 594, 0, 0, 597, 0, 598, 599, + 0, 0, 602, 0, 0, 0, 0, 0, 339, 340, + 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, + 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 707, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 332, 333, 334, 335, 336, 337, 338, + 0, 435, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, + 0, 0, 0, 0, 0, 0, 0, 436, 332, 333, + 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 339, 340, 341, 342, 343, - 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, - 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, - 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, - 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, - 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 0, 0, 0, 318, - 319, 320, 321, 322, 323, 324, 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, 820, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 332, 333, 334, 335, 336, - 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 339, 340, 341, - 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, - 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, - 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, - 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, - 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, - 0, 318, 319, 320, 321, 322, 323, 324, 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, 855, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 332, 333, 334, - 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, - 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, - 0, 0, 0, 345, 0, 346, 347, 348, 349, 350, - 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, - 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, - 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, - 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, - 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, 327, 328, 329, 330, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, - 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, - 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, - 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, - 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, - 369, 370, 371, 372, 373, 374, 375, 376, 2, 3, + 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, + 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, 62, 63, + 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, @@ -2533,154 +2307,26 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, 0, 321, 0, 0, - 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 501, 502, 0, 0, 0, 636, 775, 0, - 0, 0, 0, 0, 503, 504, 505, 506, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 507, 508, 509, 510, 511, - 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, - 514, 515, 516, 517, 518, 519, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, - 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, 0, 0, 0, 0, 0, 0, - 321, 0, 0, 0, 0, 0, 499, 500, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 501, 502, 0, 0, 0, - 636, 886, 0, 0, 0, 0, 0, 503, 504, 505, - 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 507, 508, - 509, 510, 511, 332, 0, 0, 0, 0, 337, 338, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 512, 513, 514, 515, 516, 517, 518, 519, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 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, 0, 0, 0, - 0, 0, 0, 321, 0, 0, 0, 0, 0, 499, - 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 501, 502, - 0, 0, 575, 0, 0, 0, 0, 0, 0, 0, - 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 507, 508, 509, 510, 511, 332, 0, 0, 0, - 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 512, 513, 514, 515, 516, 517, - 518, 519, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, 0, 0, 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, - 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, - 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, + 314, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 501, 502, 0, 0, 0, 636, 0, 0, 0, - 0, 0, 0, 503, 504, 505, 506, 0, 0, 0, + 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 507, 508, 509, 510, 511, 332, - 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, + 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, - 515, 516, 517, 518, 519, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, + 0, 0, 339, 340, 341, 342, 343, 344, 0, 0, + 0, 0, 0, 0, 0, 0, 345, 0, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 61, + 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, @@ -2706,155 +2352,27 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, 0, 321, - 0, 0, 0, 0, 0, 499, 500, 0, 0, 0, + 312, 313, 314, 0, 0, 0, 318, 319, 320, 321, + 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 501, 502, 0, 0, 734, 0, - 0, 0, 0, 0, 0, 0, 503, 504, 505, 506, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 507, 508, 509, - 510, 511, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, + 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 512, 513, 514, 515, 516, 517, 518, 519, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, - 0, 0, 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, 0, 0, 0, 0, - 0, 0, 321, 0, 0, 0, 0, 0, 499, 500, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 502, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 745, 503, - 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 507, 508, 509, 510, 511, 332, 0, 0, 0, 0, - 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 512, 513, 514, 515, 516, 517, 518, - 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 0, 0, 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, 0, - 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, - 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 501, 502, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 507, 508, 509, 510, 511, 332, 0, - 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 512, 513, 514, 515, - 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 0, 0, 0, 0, 321, 0, - 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 501, 502, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 503, 504, 505, 506, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 507, 508, 509, 510, - 511, 332, 0, 0, 0, 0, 337, 654, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, - 513, 514, 515, 516, 517, 518, 519, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, + 0, 0, 0, 0, 339, 340, 341, 342, 343, 344, + 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, + 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, + 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, + 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, + 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, - 0, 61, 62, 63, 64, 65, 66, 67, 68, 69, + 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, @@ -2873,439 +2391,123 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, - 0, 321, 0, 0, 0, 0, 0, 499, 500, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 501, 502, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 503, 504, - 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, - 508, 509, 510, 694, 332, 0, 0, 0, 0, 337, - 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 512, 513, 514, 515, 516, 517, 518, 519, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 0, 0, 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, 0, 0, - 0, 0, 0, 0, 321, 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, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 332, 0, 0, - 0, 0, 337, 338 -}; - -static const yytype_int16 yycheck[] = -{ - 0, 401, 0, 481, 401, 382, 406, 0, 493, 0, - 634, 502, 636, 622, 0, 639, 542, 547, 737, 567, - 434, 439, 552, 569, 401, 348, 440, 359, 390, 406, - 413, 561, 558, 348, 331, 332, 336, 899, 385, 348, - 570, 348, 351, 528, 906, 356, 349, 353, 351, 426, - 374, 375, 376, 385, 916, 358, 351, 368, 381, 382, - 383, 384, 409, 481, 359, 329, 330, 382, 430, 547, - 367, 368, 372, 382, 552, 382, 490, 491, 351, 385, - 558, 499, 500, 561, 446, 349, 359, 351, 351, 349, - 356, 355, 570, 359, 640, 358, 473, 338, 339, 340, - 341, 342, 343, 344, 345, 346, 347, 361, 540, 363, - 601, 589, 603, 531, 546, 351, 548, 358, 351, 551, - 350, 553, 358, 555, 556, 358, 356, 353, 560, 547, - 356, 350, 741, 359, 552, 350, 350, 356, 350, 350, - 558, 356, 356, 561, 356, 356, 354, 350, 356, 634, - 774, 636, 570, 356, 639, 351, 350, 540, 649, 350, - 350, 709, 356, 350, 350, 356, 356, 349, 653, 356, - 356, 589, 349, 556, 408, 409, 410, 411, 412, 413, - 414, 350, 350, 350, 359, 350, 349, 356, 356, 356, - 567, 356, 569, 350, 350, 356, 350, 350, 350, 356, - 356, 920, 356, 565, 356, 350, 350, 350, 350, 350, - 350, 356, 356, 356, 356, 356, 356, 350, 352, 349, - 352, 352, 356, 356, 356, 356, 381, 382, 383, 384, - 854, 779, 632, 842, 349, 632, 720, 721, 722, 723, - 658, 327, 328, 382, 382, 382, 385, 385, 385, 349, - 356, 367, 743, 359, 382, 632, 747, 385, 382, 382, - 349, 385, 385, 640, 382, 333, 334, 385, 798, 799, - 382, 382, 349, 385, 385, 805, 806, 356, 357, 382, - 765, 766, 385, 349, 382, 811, 910, 385, 382, 774, - 704, 385, 364, 365, 366, 713, 714, 715, 716, 717, - 718, 719, 720, 721, 722, 723, 724, 725, 726, 727, - 728, 729, 730, 731, 385, 356, 356, 926, 359, 359, - 798, 799, 356, 356, 359, 359, 359, 805, 806, 356, - 357, 385, 709, 811, 385, 813, 716, 717, 353, 718, - 719, 385, 724, 725, 353, 351, 385, 385, 351, 840, - 358, 350, 843, 385, 359, 356, 358, 385, 371, 356, - 356, 356, 356, 350, 356, 385, 356, 356, 356, 854, - 349, 356, 356, 350, 349, 351, 359, 358, 349, 351, - 798, 799, 382, 348, 352, 335, 337, 805, 806, 369, - 390, 382, 883, 811, 352, 813, 370, 354, 398, 390, - 398, 401, 779, 385, 349, 398, 406, 398, 406, 900, - 401, 896, 398, 406, 349, 406, 416, 359, 385, 359, - 349, 359, 349, 357, 915, 910, 426, 425, 359, 359, - 430, 359, 349, 359, 349, 426, 385, 385, 350, 430, - 358, 348, 356, 843, 350, 356, 446, 356, 350, 352, - 393, 352, 356, 348, 354, 446, 350, 382, 349, 358, - 353, 385, 359, 350, 397, 353, 843, 353, 726, 359, - 354, 727, 729, 473, 430, 728, 731, 430, 730, 426, - 572, 331, 473, 883, 484, 703, 845, 818, 905, 916, - 845, 917, 424, 484, 883, 796, 632, 632, 563, 803, - 398, 794, 801, 632, 806, 799, 883, -1, 813, -1, - -1, 809, -1, -1, -1, 811, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 536, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 558, -1, - -1, -1, -1, -1, -1, 565, -1, 567, -1, 569, - -1, -1, -1, -1, 565, -1, 567, -1, 569, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 622, -1, -1, -1, -1, -1, -1, -1, - -1, 622, 632, -1, -1, -1, -1, -1, -1, -1, - 640, 632, -1, -1, -1, -1, -1, -1, -1, 640, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 709, - -1, -1, -1, -1, -1, -1, -1, -1, 709, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 737, -1, -1, - -1, 741, -1, -1, -1, -1, 737, -1, -1, -1, - 741, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 779, - -1, -1, -1, -1, -1, -1, -1, -1, 779, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 811, -1, 813, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 842, 843, -1, 845, -1, 845, -1, -1, - -1, 842, 843, -1, 845, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 883, -1, -1, -1, -1, -1, -1, - -1, -1, 883, -1, -1, -1, -1, -1, -1, 899, - -1, -1, -1, -1, -1, -1, 906, -1, 899, -1, - -1, -1, -1, -1, -1, 906, 916, -1, -1, -1, - 920, -1, -1, -1, -1, 916, 926, -1, -1, 920, - -1, -1, -1, 0, -1, 926, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 326, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 351, -1, -1, -1, -1, -1, - -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, - 377, -1, -1, -1, -1, -1, -1, -1, -1, 386, - 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, - -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, - 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 348, 349, -1, 351, -1, 353, 354, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, - 375, 376, 377, -1, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, - 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, - 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 348, 349, -1, 351, -1, - 353, 354, -1, -1, -1, -1, 359, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 373, 374, 375, 376, 377, -1, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - 393, 394, 395, 396, -1, 398, 399, 400, 401, 402, - 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, - 351, -1, 353, -1, -1, -1, -1, -1, 359, 360, - 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 373, 374, 375, 376, 377, -1, -1, -1, - 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, - 391, 392, 393, 394, 395, 396, -1, 398, 399, 400, - 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, - 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, - 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, 326, -1, -1, - 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, - 349, -1, 351, -1, 353, -1, -1, -1, -1, -1, - 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 374, 375, 376, 377, -1, - -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, - 389, 390, 391, 392, 393, 394, 395, 396, -1, 398, - 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, - 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, - 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, 326, - -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 348, 349, -1, 351, -1, -1, -1, -1, -1, - -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, - 377, -1, -1, -1, 381, 382, 383, 384, 385, 386, - 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, - -1, 398, 399, 400, 401, 402, 403, 404, 405, 406, - 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, - 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, - 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, + 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, 0, 0, 0, 318, 319, + 320, 321, 322, 323, 324, 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, 819, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 327, 328, 329, 330, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 332, 333, 334, 335, 336, 337, + 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 339, 340, 341, 342, + 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, + 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, + 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, + 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, + 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 0, 0, 0, + 318, 319, 320, 321, 322, 323, 324, 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, 854, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 332, 333, 334, 335, + 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 339, 340, + 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, + 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, + 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, + 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, + 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 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, 327, 328, 329, 330, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, + 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, + 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 55, 56, 57, 58, 0, 0, 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, @@ -3331,26 +2533,154 @@ static const yytype_int16 yycheck[] = 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, -1, -1, 329, 330, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 348, 349, -1, 351, -1, -1, -1, - -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, - 375, 376, 377, -1, -1, -1, 381, 382, 383, 384, - 385, 386, 387, 388, 389, 390, 391, 392, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 408, 409, 410, 411, 412, 413, 414, - 415, 416, 417, 418, 419, 420, 421, 422, -1, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, + 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 501, 502, 0, 0, 0, 636, 774, 0, 0, + 0, 0, 0, 503, 504, 505, 506, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 507, 508, 509, 510, 511, 332, + 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, + 515, 516, 517, 518, 519, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, + 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 0, 0, 0, 0, 321, + 0, 0, 0, 0, 0, 499, 500, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 501, 502, 0, 0, 0, 636, + 885, 0, 0, 0, 0, 0, 503, 504, 505, 506, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 507, 508, 509, + 510, 511, 332, 0, 0, 0, 0, 337, 338, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 512, 513, 514, 515, 516, 517, 518, 519, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, + 0, 0, 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, 0, 0, 0, 0, + 0, 0, 321, 0, 0, 0, 0, 0, 499, 500, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 501, 502, 0, + 0, 575, 0, 0, 0, 0, 0, 0, 0, 503, + 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 507, 508, 509, 510, 511, 332, 0, 0, 0, 0, + 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 512, 513, 514, 515, 516, 517, 518, + 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, 0, 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, 0, + 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, + 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 501, 502, 0, 0, 0, 636, 0, 0, 0, 0, + 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 507, 508, 509, 510, 511, 332, 0, + 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 512, 513, 514, 515, + 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 53, 54, 55, 56, 57, 58, 0, 0, 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, @@ -3376,26 +2706,154 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, 320, 321, 322, - 323, 324, 325, 326, -1, -1, 329, 330, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 348, 349, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 373, 374, 375, 376, -1, -1, -1, -1, 381, 382, - 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 408, 409, 410, 411, 412, - 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, - -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, + 313, 314, 0, 0, 0, 0, 0, 0, 321, 0, + 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 501, 502, 0, 0, 733, 0, 0, + 0, 0, 0, 0, 0, 503, 504, 505, 506, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 507, 508, 509, 510, + 511, 332, 0, 0, 0, 0, 337, 338, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, + 513, 514, 515, 516, 517, 518, 519, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 0, + 0, 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, 0, 0, 0, 0, 0, + 0, 321, 0, 0, 0, 0, 0, 499, 500, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 501, 502, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 744, 503, 504, + 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, + 508, 509, 510, 511, 332, 0, 0, 0, 0, 337, + 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 0, 0, 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, 0, 0, + 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, + 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, + 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 503, 504, 505, 506, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 507, 508, 509, 510, 511, 332, 0, 0, + 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 512, 513, 514, 515, 516, + 517, 518, 519, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 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, 0, 0, 0, 0, 0, 0, 321, 0, 0, + 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 501, 502, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 503, 504, 505, 506, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 507, 508, 509, 510, 511, + 332, 0, 0, 0, 0, 337, 654, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, + 514, 515, 516, 517, 518, 519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 51, 52, 53, 54, 55, 56, 57, 58, 0, 0, 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, @@ -3421,343 +2879,659 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, + 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, + 321, 0, 0, 0, 0, 0, 499, 500, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 501, 502, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 503, 504, 505, + 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 507, 508, + 509, 510, 694, 332, 0, 0, 0, 0, 337, 338, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 512, 513, 514, 515, 516, 517, 518, 519, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 0, 0, 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, 0, 0, 0, + 0, 0, 0, 321, 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, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, + 0, 337, 338 +}; + +static const yytype_int16 yycheck[] = +{ + 0, 382, 0, 493, 622, 502, 401, 401, 481, 0, + 434, 406, 542, 0, 0, 736, 440, 634, 567, 636, + 401, 390, 639, 413, 569, 406, 348, 547, 558, 348, + 359, 385, 552, 331, 332, 336, 353, 349, 528, 348, + 898, 561, 351, 351, 348, 426, 356, 905, 350, 352, + 570, 359, 351, 356, 356, 409, 385, 915, 368, 358, + 382, 430, 381, 382, 383, 384, 490, 491, 385, 367, + 368, 372, 351, 382, 547, 349, 351, 446, 382, 552, + 359, 329, 330, 358, 349, 558, 351, 351, 561, 374, + 375, 376, 473, 358, 358, 640, 353, 570, 361, 356, + 363, 349, 359, 351, 601, 349, 603, 355, 408, 409, + 410, 411, 412, 413, 414, 350, 589, 719, 720, 721, + 722, 356, 740, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 350, 350, 356, 350, 349, 359, 356, + 356, 349, 356, 358, 634, 350, 636, 350, 349, 639, + 540, 356, 649, 356, 540, 350, 773, 351, 350, 708, + 546, 356, 548, 653, 356, 551, 556, 553, 349, 555, + 556, 350, 350, 350, 560, 350, 350, 356, 356, 356, + 349, 356, 356, 350, 350, 350, 567, 350, 569, 356, + 356, 356, 350, 356, 350, 350, 565, 350, 919, 350, + 356, 356, 350, 356, 350, 356, 350, 350, 356, 350, + 356, 356, 356, 356, 352, 356, 352, 349, 356, 356, + 356, 385, 359, 841, 381, 382, 383, 384, 382, 778, + 439, 385, 382, 327, 328, 385, 853, 632, 632, 356, + 382, 356, 359, 385, 359, 742, 354, 382, 356, 746, + 385, 632, 382, 382, 382, 385, 385, 385, 382, 640, + 382, 385, 382, 385, 382, 385, 382, 385, 356, 385, + 356, 359, 481, 359, 764, 765, 349, 797, 798, 703, + 810, 333, 334, 773, 804, 805, 364, 365, 366, 359, + 499, 500, 909, 356, 357, 356, 357, 715, 716, 367, + 717, 718, 723, 724, 359, 385, 385, 925, 353, 385, + 353, 351, 351, 385, 385, 350, 385, 359, 349, 356, + 358, 350, 531, 356, 797, 798, 358, 708, 356, 356, + 356, 804, 805, 356, 356, 356, 356, 810, 547, 812, + 356, 356, 839, 552, 358, 842, 359, 350, 349, 558, + 349, 385, 561, 371, 351, 385, 351, 369, 348, 352, + 385, 570, 370, 853, 335, 337, 385, 352, 349, 349, + 354, 359, 349, 349, 385, 349, 359, 359, 357, 385, + 589, 359, 382, 349, 359, 882, 359, 350, 356, 359, + 390, 382, 356, 358, 356, 350, 350, 778, 398, 390, + 398, 401, 899, 352, 352, 895, 406, 398, 406, 356, + 401, 398, 398, 348, 348, 406, 416, 914, 354, 909, + 406, 382, 350, 349, 393, 385, 426, 425, 353, 358, + 430, 350, 359, 353, 725, 426, 353, 359, 397, 430, + 354, 727, 726, 730, 331, 728, 446, 842, 729, 658, + 702, 572, 817, 844, 904, 446, 915, 844, 916, 632, + 882, 842, 632, 430, 632, 398, 563, 424, 426, 795, + 793, 798, 802, 473, 430, 800, 808, 805, 812, 810, + -1, -1, 473, -1, 484, -1, -1, 882, -1, -1, + -1, -1, -1, 484, -1, -1, -1, -1, -1, -1, + -1, 882, -1, 712, 713, 714, 715, 716, 717, 718, + 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, + 729, 730, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 536, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 351, -1, -1, -1, -1, -1, -1, -1, 359, -1, + -1, -1, -1, -1, -1, 565, -1, 567, -1, 569, + -1, -1, -1, -1, 565, -1, 567, -1, 569, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 797, 798, + -1, -1, -1, -1, -1, 804, 805, -1, -1, -1, + -1, 810, -1, 812, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 373, 374, 375, 376, 377, -1, -1, -1, - -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, - 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 408, 409, 410, - 411, 412, 413, -1, -1, -1, -1, -1, -1, -1, - -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, -1, -1, - -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, + -1, -1, 622, -1, -1, -1, -1, -1, -1, -1, + -1, 622, 632, -1, -1, -1, -1, -1, -1, -1, + 640, 632, -1, -1, -1, -1, -1, -1, -1, 640, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 374, 375, 376, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 386, 387, 388, - 389, 390, 391, 392, 393, -1, -1, 396, -1, 398, - 399, -1, -1, 402, -1, -1, -1, -1, -1, 408, - 409, 410, 411, 412, 413, -1, -1, -1, -1, -1, - -1, -1, -1, 422, -1, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 708, -1, + -1, -1, -1, -1, -1, -1, -1, 708, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 736, -1, -1, -1, + 740, -1, -1, -1, -1, 736, -1, -1, -1, 740, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 778, -1, + -1, -1, -1, -1, -1, -1, -1, 778, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 841, 842, -1, 844, -1, 844, -1, -1, -1, + 841, 842, -1, 844, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 882, -1, -1, -1, -1, -1, -1, -1, + -1, 882, -1, -1, -1, -1, -1, -1, 898, -1, + -1, -1, -1, -1, -1, 905, -1, 898, -1, -1, + -1, -1, -1, -1, 905, 915, -1, -1, -1, 919, + -1, -1, -1, -1, 915, 925, -1, -1, 919, -1, + -1, -1, 0, -1, 925, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, - -1, -1, -1, -1, -1, -1, -1, -1, 385, 386, - 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + -1, -1, -1, 351, -1, -1, -1, -1, -1, -1, + -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 373, 374, 375, 376, 377, + -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, + 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, - -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, - 447, 448, 449, 450, 451, 452, 453, 454, 3, 4, - 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, 323, 324, - 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, + 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, + -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, + 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 351, -1, -1, -1, + -1, -1, 348, 349, -1, 351, -1, 353, 354, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, + 376, 377, -1, -1, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, + 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, + 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, - 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 386, 387, 388, 389, 390, 391, 392, -1, -1, + -1, -1, -1, -1, 348, 349, -1, 351, -1, 353, + 354, -1, -1, -1, -1, 359, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, + 374, 375, 376, 377, -1, -1, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, + 394, 395, 396, -1, 398, 399, 400, 401, 402, 403, + 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 408, 409, 410, 411, 412, 413, -1, - -1, -1, -1, -1, -1, -1, -1, 422, -1, 424, - 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, - 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, - 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, - 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 348, 349, -1, 351, + -1, 353, -1, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 373, 374, 375, 376, 377, -1, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, 326, -1, -1, 329, + 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, + -1, 351, -1, 353, -1, -1, -1, -1, -1, 359, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 373, 374, 375, 376, 377, -1, -1, + -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, + 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, + 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, + 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, + 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, 326, -1, + -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 348, 349, -1, 351, -1, -1, -1, -1, -1, -1, + -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 373, 374, 375, 376, 377, + -1, -1, -1, 381, 382, 383, 384, 385, 386, 387, + 388, 389, 390, 391, 392, 393, 394, 395, 396, -1, + 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, + 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, + 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, + 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 348, 349, -1, 351, -1, -1, -1, -1, + -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, + 376, 377, -1, -1, -1, 381, 382, 383, 384, 385, + 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 373, 374, 375, 376, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 386, 387, 388, 389, 390, 391, 392, + -1, -1, 408, 409, 410, 411, 412, 413, 414, 415, + 416, 417, 418, 419, 420, 421, 422, -1, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, 323, + 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 408, 409, 410, 411, 412, - 413, -1, -1, -1, -1, -1, -1, -1, -1, 422, - -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, - 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, - 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, - 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, - 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, - 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, + -1, -1, -1, -1, 348, 349, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, + 374, 375, 376, -1, -1, -1, -1, 381, 382, 383, + 384, 385, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, + 414, 415, 416, 417, 418, 419, 420, 421, 422, -1, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 351, + -1, -1, -1, -1, -1, -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 373, 374, 375, 376, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, - 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 408, 409, 410, - 411, 412, 413, -1, -1, -1, -1, -1, -1, -1, - -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, - 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, - 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, - 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, - 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, - 19, 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, -1, -1, - -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, + -1, 373, 374, 375, 376, 377, -1, -1, -1, -1, + -1, -1, -1, -1, 386, 387, 388, 389, 390, 391, + 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 408, 409, 410, 411, + 412, 413, -1, -1, -1, -1, -1, -1, -1, -1, + 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, -1, -1, -1, + 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 373, 374, 375, 376, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 386, 387, 388, - 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, - 409, 410, 411, 412, 413, -1, -1, -1, -1, -1, - -1, -1, -1, 422, -1, 424, 425, 426, 427, 428, - 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, - 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, - 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, - 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, - 17, 18, 19, 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, - -1, -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, + 390, 391, 392, 393, -1, -1, 396, -1, 398, 399, + -1, -1, 402, -1, -1, -1, -1, -1, 408, 409, + 410, 411, 412, 413, -1, -1, -1, -1, -1, -1, + -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, -1, + -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 386, - 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, + -1, -1, -1, -1, -1, -1, -1, 385, 386, 387, + 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, - -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, - 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, - 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, - 447, 448, 449, 450, 451, 452, 453, 454, 4, 5, + 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, + -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 63, 64, 65, + 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, @@ -3783,68 +3557,117 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, -1, -1, -1, 323, -1, -1, - -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, + 316, -1, -1, -1, 320, 321, 322, 323, 324, 325, + 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 348, 349, -1, -1, -1, 353, 354, -1, - -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, + -1, -1, -1, -1, -1, 351, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, - 386, -1, -1, -1, -1, 391, 392, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, + 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 408, 409, 410, 411, 412, 413, -1, -1, + -1, -1, -1, -1, -1, -1, 422, -1, 424, 425, + 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, + 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, 323, + 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 414, 415, - 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, - 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, -1, -1, -1, -1, -1, -1, - 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, + 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 348, 349, -1, -1, -1, - 353, 354, -1, -1, -1, -1, -1, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, - 383, 384, 385, 386, -1, -1, -1, -1, 391, 392, + -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, + -1, -1, -1, -1, -1, -1, -1, -1, 422, -1, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, + 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, + -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, + -1, 373, 374, 375, 376, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 386, 387, 388, 389, 390, 391, + 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 408, 409, 410, 411, + 412, 413, -1, -1, -1, -1, -1, -1, -1, -1, + 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, 63, 64, 65, 66, 67, 68, 69, + 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, @@ -3870,18 +3693,65 @@ static const yytype_int16 yycheck[] = 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, -1, -1, -1, - -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, - 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, - -1, -1, 352, -1, -1, -1, -1, -1, -1, -1, - 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, + 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, + 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 408, 409, + 410, 411, 412, 413, -1, -1, -1, -1, -1, -1, + -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, + 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, + 18, 19, 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, -1, + -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -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, 382, 383, 384, 385, 386, -1, -1, -1, - -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, + 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 414, 415, 416, 417, 418, 419, - 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 436, 4, 5, 6, + 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, + -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, + 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, + 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, + 448, 449, 450, 451, 452, 453, 454, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3916,7 +3786,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 348, 349, -1, -1, -1, 353, -1, -1, -1, + -1, 348, 349, -1, -1, -1, 353, 354, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, @@ -3959,8 +3829,8 @@ static const yytype_int16 yycheck[] = 314, 315, 316, -1, -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 348, 349, -1, -1, 352, -1, - -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, + -1, -1, -1, -1, 348, 349, -1, -1, -1, 353, + 354, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, 391, 392, -1, @@ -4003,7 +3873,7 @@ static const yytype_int16 yycheck[] = -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 359, 360, + -1, 352, -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, @@ -4046,7 +3916,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 348, 349, -1, -1, -1, -1, -1, -1, -1, -1, + 348, 349, -1, -1, -1, 353, -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, @@ -4089,7 +3959,7 @@ static const yytype_int16 yycheck[] = 315, 316, -1, -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 348, 349, -1, -1, -1, -1, -1, + -1, -1, -1, 348, 349, -1, -1, 352, -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, @@ -4133,7 +4003,7 @@ static const yytype_int16 yycheck[] = -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 360, 361, + -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, 391, @@ -4174,13 +4044,143 @@ static const yytype_int16 yycheck[] = 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, + 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, + 349, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, + -1, -1, 391, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 414, 415, 416, 417, 418, + 419, 420, 421, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 436, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, -1, -1, 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, -1, -1, -1, -1, -1, -1, 323, -1, -1, + -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 348, 349, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, + 386, -1, -1, -1, -1, 391, 392, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 414, 415, + 416, 417, 418, 419, 420, 421, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, + 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, -1, -1, -1, -1, -1, -1, + 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 348, 349, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, + 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, + 383, 384, 385, 386, -1, -1, -1, -1, 391, 392, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, + 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, + 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, -1, -1, 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, -1, -1, -1, + -1, -1, -1, 323, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 391, 392 + -1, -1, -1, -1, -1, -1, 386, -1, -1, -1, + -1, 391, 392 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -4256,30 +4256,30 @@ static const yytype_int16 yystos[] = 563, 348, 351, 382, 567, 584, 385, 585, 348, 381, 382, 383, 384, 571, 572, 382, 480, 485, 573, 382, 381, 382, 383, 384, 576, 577, 382, 485, 578, 382, - 348, 579, 382, 584, 385, 485, 511, 581, 582, 382, - 485, 352, 565, 511, 385, 523, 524, 354, 522, 521, - 485, 504, 385, 364, 365, 366, 361, 363, 327, 328, - 331, 332, 367, 368, 333, 334, 371, 370, 369, 335, - 337, 336, 372, 352, 352, 480, 354, 532, 349, 359, - 359, 553, 349, 349, 359, 359, 484, 349, 484, 357, - 359, 359, 359, 359, 338, 339, 340, 341, 342, 343, - 344, 345, 346, 347, 358, 483, 356, 359, 354, 528, - 542, 546, 551, 525, 358, 354, 525, 526, 525, 521, - 385, 350, 459, 484, 385, 482, 467, 348, 382, 568, - 569, 350, 358, 350, 356, 350, 356, 350, 356, 356, - 350, 356, 350, 356, 350, 356, 356, 350, 356, 356, - 350, 356, 350, 356, 350, 350, 523, 512, 356, 359, - 354, 467, 467, 467, 469, 469, 470, 470, 471, 471, - 471, 471, 472, 472, 473, 474, 475, 476, 477, 478, - 481, 352, 539, 552, 528, 554, 484, 359, 484, 357, - 482, 482, 525, 354, 356, 354, 352, 352, 356, 352, - 356, 572, 571, 485, 573, 577, 576, 485, 578, 348, - 579, 581, 582, 359, 524, 484, 533, 484, 499, 544, - 393, 527, 540, 555, 350, 350, 354, 525, 348, 382, - 350, 350, 350, 350, 350, 350, 357, 354, 385, 350, - 349, 544, 556, 557, 535, 536, 537, 543, 547, 482, - 358, 529, 534, 538, 484, 359, 350, 397, 531, 529, - 353, 525, 350, 484, 534, 535, 539, 548, 359, 354 + 348, 579, 382, 584, 385, 485, 581, 582, 382, 485, + 352, 565, 511, 385, 523, 524, 354, 522, 521, 485, + 504, 385, 364, 365, 366, 361, 363, 327, 328, 331, + 332, 367, 368, 333, 334, 371, 370, 369, 335, 337, + 336, 372, 352, 352, 480, 354, 532, 349, 359, 359, + 553, 349, 349, 359, 359, 484, 349, 484, 357, 359, + 359, 359, 359, 338, 339, 340, 341, 342, 343, 344, + 345, 346, 347, 358, 483, 356, 359, 354, 528, 542, + 546, 551, 525, 358, 354, 525, 526, 525, 521, 385, + 350, 459, 484, 385, 482, 467, 348, 382, 568, 569, + 350, 358, 350, 356, 350, 356, 350, 356, 356, 350, + 356, 350, 356, 350, 356, 356, 350, 356, 356, 350, + 356, 350, 356, 350, 350, 523, 512, 356, 359, 354, + 467, 467, 467, 469, 469, 470, 470, 471, 471, 471, + 471, 472, 472, 473, 474, 475, 476, 477, 478, 481, + 352, 539, 552, 528, 554, 484, 359, 484, 357, 482, + 482, 525, 354, 356, 354, 352, 352, 356, 352, 356, + 572, 571, 485, 573, 577, 576, 485, 578, 348, 579, + 581, 582, 359, 524, 484, 533, 484, 499, 544, 393, + 527, 540, 555, 350, 350, 354, 525, 348, 382, 350, + 350, 350, 350, 350, 350, 357, 354, 385, 350, 349, + 544, 556, 557, 535, 536, 537, 543, 547, 482, 358, + 529, 534, 538, 484, 359, 350, 397, 531, 529, 353, + 525, 350, 484, 534, 535, 539, 548, 359, 354 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ @@ -4352,8 +4352,8 @@ static const yytype_int16 yyr1[] = 570, 570, 571, 571, 572, 572, 572, 572, 572, 573, 573, 574, 574, 575, 575, 575, 575, 575, 575, 575, 575, 576, 576, 577, 577, 577, 577, 578, 578, 579, - 579, 580, 580, 580, 580, 581, 581, 582, 582, 583, - 583, 584, 584, 585, 585 + 579, 580, 580, 580, 580, 581, 581, 582, 583, 583, + 584, 584, 585, 585 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -4426,8 +4426,8 @@ static const yytype_int8 yyr2[] = 6, 8, 1, 3, 1, 1, 1, 1, 1, 1, 3, 4, 6, 4, 6, 6, 8, 6, 8, 6, 8, 1, 3, 1, 1, 1, 1, 1, 3, 1, - 3, 6, 8, 4, 6, 1, 3, 1, 1, 4, - 6, 1, 3, 3, 3 + 3, 6, 8, 4, 6, 1, 3, 1, 4, 6, + 1, 3, 3, 3 }; @@ -12155,65 +12155,57 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); #line 12156 "MachineIndependent/glslang_tab.cpp" break; - case 678: /* spirv_type_parameter: type_specifier */ -#line 4370 "MachineIndependent/glslang.y" - { - (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type)); - } -#line 12164 "MachineIndependent/glslang_tab.cpp" - break; - - case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4375 "MachineIndependent/glslang.y" + case 678: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4372 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12172 "MachineIndependent/glslang_tab.cpp" +#line 12164 "MachineIndependent/glslang_tab.cpp" break; - case 680: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4378 "MachineIndependent/glslang.y" + case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4375 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12181 "MachineIndependent/glslang_tab.cpp" +#line 12173 "MachineIndependent/glslang_tab.cpp" break; - case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ -#line 4384 "MachineIndependent/glslang.y" + case 680: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ +#line 4381 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst); } -#line 12189 "MachineIndependent/glslang_tab.cpp" +#line 12181 "MachineIndependent/glslang_tab.cpp" break; - case 682: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ -#line 4387 "MachineIndependent/glslang.y" + case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ +#line 4384 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst)); } -#line 12197 "MachineIndependent/glslang_tab.cpp" +#line 12189 "MachineIndependent/glslang_tab.cpp" break; - case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ -#line 4392 "MachineIndependent/glslang.y" + case 682: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ +#line 4389 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string); } -#line 12205 "MachineIndependent/glslang_tab.cpp" +#line 12197 "MachineIndependent/glslang_tab.cpp" break; - case 684: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ -#line 4395 "MachineIndependent/glslang.y" + case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ +#line 4392 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i); } -#line 12213 "MachineIndependent/glslang_tab.cpp" +#line 12205 "MachineIndependent/glslang_tab.cpp" break; -#line 12217 "MachineIndependent/glslang_tab.cpp" +#line 12209 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -12438,5 +12430,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4400 "MachineIndependent/glslang.y" +#line 4397 "MachineIndependent/glslang.y" diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 29740f31b9..ef11764048 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -365,6 +365,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.int64.frag", "spv.intcoopmat.comp", "spv.intOps.vert", + "spv.intrinsicsSpecConst.vert", "spv.intrinsicsSpirvByReference.vert", "spv.intrinsicsSpirvDecorate.frag", "spv.intrinsicsSpirvExecutionMode.frag", From 035a3bbc4afeac30876dae533d22a034ac64dbc1 Mon Sep 17 00:00:00 2001 From: amhagan Date: Wed, 1 Sep 2021 11:33:21 -0400 Subject: [PATCH 226/365] GL_EXT_spirv_intrinsics - Port extensions Add mechanism to use GL_EXT_spirv_intrinsics headers in glslang. Ported GL_EXT_shader_realtime_clock as an example. --- BUILD.bazel | 14 +++ BUILD.gn | 18 ++++ StandAlone/CMakeLists.txt | 20 +++- StandAlone/StandAlone.cpp | 15 ++- gen_extension_headers.py | 98 +++++++++++++++++++ .../GL_EXT_shader_realtime_clock.glsl | 54 ++++++++++ glslang/MachineIndependent/Initialize.cpp | 9 +- 7 files changed, 218 insertions(+), 10 deletions(-) create mode 100644 gen_extension_headers.py create mode 100644 glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl diff --git a/BUILD.bazel b/BUILD.bazel index e8cf6a864b..1115b7de82 100644 --- a/BUILD.bazel +++ b/BUILD.bazel @@ -49,6 +49,11 @@ py_binary( srcs = ["build_info.py"], ) +py_binary( + name = "gen_extension_headers", + srcs = ["gen_extension_headers.py"], +) + genrule( name = "gen_build_info_h", srcs = ["CHANGES.md", "build_info.h.tmpl"], @@ -58,6 +63,14 @@ genrule( tools = [":build_info"], ) +genrule( + name = "gen_extension_headers_h", + srcs = ["glslang/ExtensionHeaders", "gen_extension_headers.py"], + outs = ["glslang/glsl_intrinsic_header.h"], + cmd_bash = "$(location gen_extension_headers) -i $(location glslang/ExtensionHeaders) -o $(location glslang/glsl_intrinsic_header.h)", + tools = [":gen_extension_headers"], +) + COMMON_COPTS = select({ "@bazel_tools//src/conditions:windows": [""], "//conditions:default": [ @@ -206,6 +219,7 @@ cc_binary( srcs = [ "StandAlone/StandAlone.cpp", "StandAlone/Worklist.h", + ":glslang/glsl_intrinsic_header.h" ], copts = COMMON_COPTS, deps = [ diff --git a/BUILD.gn b/BUILD.gn index a37e1d25e2..06d3c4b855 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -69,6 +69,23 @@ action("glslang_build_info") { ] } +action("glslang_extension_headers") { + script = "gen_extension_headers.py" + + out_file = "${target_gen_dir}/include/glslang/glsl_intrinsic_header.h" + + inputs = [ + script + ] + outputs = [ out_file ] + args = [ + "-i", + rebase_path("glslang/ExtensionHeaders", root_build_dir), + "-o", + rebase_path(out_file, root_build_dir), + ] +} + spirv_tools_dir = glslang_spirv_tools_dir if (!defined(glslang_angle)) { glslang_angle = false @@ -302,6 +319,7 @@ executable("glslang_validator") { ":glslang_build_info", ":glslang_default_resource_limits_sources", ":glslang_sources", + ":glslang_extension_headers", ] public_configs = [ ":glslang_hlsl" ] diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 91bec6ccbb..4d5545c785 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -31,6 +31,22 @@ # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. +find_host_package(PythonInterp 3 REQUIRED) + +set(GLSLANG_INTRINSIC_H "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/glsl_intrinsic_header.h") +set(GLSLANG_INTRINSIC_PY "${CMAKE_SOURCE_DIR}/gen_extension_headers.py") +set(GLSLANG_INTRINSIC_HEADER_DIR "${CMAKE_SOURCE_DIR}/glslang/ExtensionHeaders") + +add_custom_command( + OUTPUT ${GLSLANG_INTRINSIC_H} + COMMAND ${PYTHON_EXECUTABLE} "${GLSLANG_INTRINSIC_PY}" + "-i" ${GLSLANG_INTRINSIC_HEADER_DIR} + "-o" ${GLSLANG_INTRINSIC_H} + DEPENDS ${GLSLANG_INTRINSIC_PY} + COMMENT "Generating ${GLSLANG_INTRINSIC_H}") + +#add_custom_target(glslangValidator DEPENDS ${GLSLANG_INTRINSIC_H}) + add_library(glslang-default-resource-limits ${CMAKE_CURRENT_SOURCE_DIR}/ResourceLimits.cpp ${CMAKE_CURRENT_SOURCE_DIR}/resource_limits_c.cpp) @@ -41,7 +57,7 @@ target_include_directories(glslang-default-resource-limits PUBLIC $ PUBLIC $) -set(SOURCES StandAlone.cpp DirStackFileIncluder.h) +set(SOURCES StandAlone.cpp DirStackFileIncluder.h ${GLSLANG_INTRINSIC_H}) add_executable(glslangValidator ${SOURCES}) set_property(TARGET glslangValidator PROPERTY FOLDER tools) @@ -108,4 +124,4 @@ if(ENABLE_GLSLANG_INSTALL) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif() +endif() \ No newline at end of file diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index e62f92f719..23e510c281 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -2,6 +2,7 @@ // Copyright (C) 2002-2005 3Dlabs Inc. Ltd. // Copyright (C) 2013-2016 LunarG, Inc. // Copyright (C) 2016-2020 Google, Inc. +// Modifications Copyright(C) 2021 Advanced Micro Devices, Inc.All rights reserved. // // All rights reserved. // @@ -65,6 +66,8 @@ // Build-time generated includes #include "glslang/build_info.h" +#include "glslang/glsl_intrinsic_header.h" + extern "C" { GLSLANG_EXPORT void ShOutputHtml(); } @@ -263,6 +266,7 @@ class TPreamble { // Track the user's #define and #undef from the command line. TPreamble UserPreamble; +std::string PreambleString; // // Create the default name for saving a binary if -o is not provided. @@ -1204,8 +1208,17 @@ void CompileAndLinkShaderUnits(std::vector compUnits) "Use '-e '.\n"); shader->setSourceEntryPoint(sourceEntryPointName); } + + std::string intrinsicString = getIntrinsic(compUnit.text, compUnit.count); + + PreambleString = ""; if (UserPreamble.isSet()) - shader->setPreamble(UserPreamble.get()); + PreambleString.append(UserPreamble.get()); + + if (!intrinsicString.empty()) + PreambleString.append(intrinsicString); + + shader->setPreamble(PreambleString.c_str()); shader->addProcesses(Processes); #ifndef GLSLANG_WEB diff --git a/gen_extension_headers.py b/gen_extension_headers.py new file mode 100644 index 0000000000..a787f9a9cb --- /dev/null +++ b/gen_extension_headers.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python + +# Copyright (c) 2020 Google Inc. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +import glob +import sys +import os + +def generate_main(glsl_files, output_header_file): + # Write commit ID to output header file + with open(output_header_file, "w") as header_file: + # Copyright Notice + header_string = '/***************************************************************************\n' + header_string += ' *\n' + header_string += ' * Copyright (c) 2015-2021 The Khronos Group Inc.\n' + header_string += ' * Copyright (c) 2015-2021 Valve Corporation\n' + header_string += ' * Copyright (c) 2015-2021 LunarG, Inc.\n' + header_string += ' * Copyright (c) 2015-2021 Google Inc.\n' + header_string += ' * Copyright (c) 2021 Advanced Micro Devices, Inc.All rights reserved.\n' + header_string += ' *\n' + header_string += ' ****************************************************************************/\n' + header_string += '#pragma once\n\n' + header_string += '#ifndef _INTRINSIC_EXTENSION_HEADER_H_\n' + header_string += '#define _INTRINSIC_EXTENSION_HEADER_H_\n\n' + header_file.write(header_string) + + symbol_name_list = [] + + for i in glsl_files: + glsl_contents = open(i,"r").read() + + filename = os.path.basename(i) + symbol_name = filename.split(".")[0] + symbol_name_list.append(symbol_name) + header_name = symbol_name + ".h" + header_str = 'std::string %s_GLSL = R"(\n%s\n)";\n' % (symbol_name, glsl_contents) + header_str += '\n' + header_file.write(header_str) + + contents = '' + contents += '\n' + contents += 'std::string getIntrinsic(const char* const* shaders, int n) {\n' + contents += '\tstd::string shaderString = "";\n'; + + contents += '\tfor (int i = 0; i < n; i++) {\n' + + for symbol_name in symbol_name_list: + contents += '\t\tif (strstr(shaders[i], "%s") != NULL) {\n' % (symbol_name) + contents += '\t\t shaderString.append(%s_GLSL);\n' % (symbol_name) + contents += '\t\t}\n' + + contents += '\t}\n' + contents += '\treturn shaderString;\n'; + contents += '}\n' + + contents += '\n#endif\n' + header_file.write(contents) + +def main(): + if len(sys.argv) < 2: + raise Exception("Invalid number of arguments") + + i = 0 + while i < len(sys.argv): + opt = sys.argv[i] + i = i + 1 + + if opt == "-i" or opt == "-o": + if i == len(sys.argv): + raise Exception("Expected path after {}".format(opt)) + val = sys.argv[i] + i = i + 1 + if (opt == "-i"): + input_dir = val + elif (opt == "-o"): + output_file = val + else: + raise Exception("Unknown flag {}".format(opt)) + + glsl_files = glob.glob(input_dir + '/*.glsl') + + # Generate main header + generate_main(glsl_files, output_file) + +if __name__ == '__main__': + main() \ No newline at end of file diff --git a/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl b/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl new file mode 100644 index 0000000000..f74df6fc4f --- /dev/null +++ b/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl @@ -0,0 +1,54 @@ +// +// Copyright (C) 2002-2005 3Dlabs Inc. Ltd. +// Copyright (C) 2013-2016 LunarG, Inc. +// Copyright (C) 2016-2020 Google, Inc. +// Modifications Copyright(C) 2021 Advanced Micro Devices, Inc.All rights reserved. +// +// All rights reserved. +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions +// are met: +// +// Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// +// Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following +// disclaimer in the documentation and/or other materials provided +// with the distribution. +// +// Neither the name of 3Dlabs Inc. Ltd. nor the names of its +// contributors may be used to endorse or promote products derived +// from this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +// FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE +// COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, +// INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, +// BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +// LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +// CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT +// LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN +// ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +// POSSIBILITY OF SUCH DAMAGE. +// + +#extension GL_EXT_spirv_intrinsics : enable +#extension GL_ARB_gpu_shader_int64 : enable + +uvec2 clockRealtime2x32EXT(void) { + spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056) + uvec2 clockRealtime2x32EXT_internal(uint scope); + + return clockRealtime2x32EXT_internal(1 /*Device scope*/); +} + +uint64_t clockRealtimeEXT(void) { + spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056) + uint64_t clockRealtimeEXT_internal(uint scope); + + return clockRealtimeEXT_internal(1 /*Device scope*/); +} \ No newline at end of file diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index ee4e2cab56..9f92529955 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -3,7 +3,7 @@ // Copyright (C) 2012-2016 LunarG, Inc. // Copyright (C) 2015-2020 Google, Inc. // Copyright (C) 2017 ARM Limited. -// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved. +// Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved. // // All rights reserved. // @@ -4653,13 +4653,11 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } - // GL_ARB_shader_clock & GL_EXT_shader_realtime_clock + // GL_ARB_shader_clock if (profile != EEsProfile && version >= 450) { commonBuiltins.append( "uvec2 clock2x32ARB();" "uint64_t clockARB();" - "uvec2 clockRealtime2x32EXT();" - "uint64_t clockRealtimeEXT();" "\n"); } @@ -8408,9 +8406,6 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion 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); From 36333d1fb9f2375ca3595315e7643968aa6b3a29 Mon Sep 17 00:00:00 2001 From: David Neto Date: Tue, 19 Oct 2021 17:32:52 -0400 Subject: [PATCH 227/365] Fix Cmake rule for extension header generation Allow glslang to be embedded in an enclosing project (such as Shaderc) --- StandAlone/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 4d5545c785..2b163e7f55 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -34,8 +34,8 @@ find_host_package(PythonInterp 3 REQUIRED) set(GLSLANG_INTRINSIC_H "${GLSLANG_GENERATED_INCLUDEDIR}/glslang/glsl_intrinsic_header.h") -set(GLSLANG_INTRINSIC_PY "${CMAKE_SOURCE_DIR}/gen_extension_headers.py") -set(GLSLANG_INTRINSIC_HEADER_DIR "${CMAKE_SOURCE_DIR}/glslang/ExtensionHeaders") +set(GLSLANG_INTRINSIC_PY "${CMAKE_CURRENT_SOURCE_DIR}/../gen_extension_headers.py") +set(GLSLANG_INTRINSIC_HEADER_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../glslang/ExtensionHeaders") add_custom_command( OUTPUT ${GLSLANG_INTRINSIC_H} @@ -124,4 +124,4 @@ if(ENABLE_GLSLANG_INSTALL) ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) endif() install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) -endif() \ No newline at end of file +endif() From c571cd8f890aa16f1791ef0e58ee26eec58edf67 Mon Sep 17 00:00:00 2001 From: alelenv Date: Tue, 19 Oct 2021 20:59:35 -0700 Subject: [PATCH 228/365] Skip auto decorating shader record buffer blocks with 'set' and 'binding'. --- Test/baseResults/rayQuery.rgen.out | 2 -- Test/baseResults/spv.RayGenShader.rgen.out | 2 -- Test/baseResults/spv.RayGenShader11.rgen.out | 2 -- Test/baseResults/spv.RayGenShaderArray.rgen.out | 2 -- Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out | 2 -- Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out | 2 -- Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out | 2 -- Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out | 2 -- Test/baseResults/spv.ext.RayGenShader.rgen.out | 2 -- Test/baseResults/spv.ext.RayGenShader11.rgen.out | 2 -- Test/baseResults/spv.ext.RayGenShaderArray.rgen.out | 2 -- glslang/MachineIndependent/iomapper.cpp | 2 +- 12 files changed, 1 insertion(+), 23 deletions(-) diff --git a/Test/baseResults/rayQuery.rgen.out b/Test/baseResults/rayQuery.rgen.out index 80e9916e7b..06a1a5a855 100644 --- a/Test/baseResults/rayQuery.rgen.out +++ b/Test/baseResults/rayQuery.rgen.out @@ -28,8 +28,6 @@ rayQuery.rgen MemberDecorate 26(block) 0 Offset 0 MemberDecorate 26(block) 1 Offset 16 Decorate 26(block) BufferBlock - Decorate 28 DescriptorSet 0 - Decorate 28 Binding 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.RayGenShader.rgen.out b/Test/baseResults/spv.RayGenShader.rgen.out index f8f3fd65d8..b7085378be 100644 --- a/Test/baseResults/spv.RayGenShader.rgen.out +++ b/Test/baseResults/spv.RayGenShader.rgen.out @@ -31,8 +31,6 @@ spv.RayGenShader.rgen MemberDecorate 37(block) 0 Offset 0 MemberDecorate 37(block) 1 Offset 16 Decorate 37(block) BufferBlock - Decorate 39 DescriptorSet 0 - Decorate 39 Binding 2 Decorate 50(accNV1) DescriptorSet 0 Decorate 50(accNV1) Binding 1 Decorate 53(payload) Location 0 diff --git a/Test/baseResults/spv.RayGenShader11.rgen.out b/Test/baseResults/spv.RayGenShader11.rgen.out index f6b79c57ec..48509b0d77 100644 --- a/Test/baseResults/spv.RayGenShader11.rgen.out +++ b/Test/baseResults/spv.RayGenShader11.rgen.out @@ -30,8 +30,6 @@ spv.RayGenShader11.rgen MemberDecorate 37(block) 0 Offset 0 MemberDecorate 37(block) 1 Offset 16 Decorate 37(block) Block - Decorate 39 DescriptorSet 0 - Decorate 39 Binding 1 Decorate 52(payload) Location 0 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.RayGenShaderArray.rgen.out b/Test/baseResults/spv.RayGenShaderArray.rgen.out index 63a04b3e1a..8ddfca97fd 100644 --- a/Test/baseResults/spv.RayGenShaderArray.rgen.out +++ b/Test/baseResults/spv.RayGenShaderArray.rgen.out @@ -37,8 +37,6 @@ spv.RayGenShaderArray.rgen MemberDecorate 34(block) 1 Offset 16 MemberDecorate 34(block) 2 Offset 28 Decorate 34(block) BufferBlock - Decorate 36 DescriptorSet 0 - Decorate 36 Binding 2 Decorate 60(accNV1) DescriptorSet 0 Decorate 60(accNV1) Binding 1 Decorate 75 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out index 60b5e9377b..95d9213617 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out @@ -49,8 +49,6 @@ spv.ext.RayGenSBTlayout.rgen MemberDecorate 36(block) 9 Offset 120 MemberDecorate 36(block) 10 Offset 128 Decorate 36(block) Block - Decorate 38 DescriptorSet 0 - Decorate 38 Binding 0 Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out index cc175f719a..f5e32c1330 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out @@ -49,8 +49,6 @@ spv.ext.RayGenSBTlayout140.rgen MemberDecorate 36(block) 9 Offset 136 MemberDecorate 36(block) 10 Offset 144 Decorate 36(block) Block - Decorate 38 DescriptorSet 0 - Decorate 38 Binding 0 Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out index afcfa9cd54..d952adfdeb 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out @@ -49,8 +49,6 @@ spv.ext.RayGenSBTlayout430.rgen MemberDecorate 36(block) 9 Offset 120 MemberDecorate 36(block) 10 Offset 128 Decorate 36(block) Block - Decorate 38 DescriptorSet 0 - Decorate 38 Binding 0 Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out index eac481ac20..c6d65304d0 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out @@ -50,8 +50,6 @@ spv.ext.RayGenSBTlayoutscalar.rgen MemberDecorate 36(block) 9 Offset 96 MemberDecorate 36(block) 10 Offset 104 Decorate 36(block) Block - Decorate 38 DescriptorSet 0 - Decorate 38 Binding 0 Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out index da516f38ac..bfaf64b10f 100644 --- a/Test/baseResults/spv.ext.RayGenShader.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out @@ -34,8 +34,6 @@ spv.ext.RayGenShader.rgen MemberDecorate 38(block) 0 Offset 0 MemberDecorate 38(block) 1 Offset 16 Decorate 38(block) Block - Decorate 40 DescriptorSet 0 - Decorate 40 Binding 3 Decorate 53(payload) Location 1 Decorate 54(accEXT1) DescriptorSet 0 Decorate 54(accEXT1) Binding 1 diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out index 00262ac2c0..048b02b218 100644 --- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out @@ -30,8 +30,6 @@ spv.ext.RayGenShader11.rgen MemberDecorate 37(block) 0 Offset 0 MemberDecorate 37(block) 1 Offset 16 Decorate 37(block) Block - Decorate 39 DescriptorSet 0 - Decorate 39 Binding 1 Decorate 52(payload) Location 1 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out index 473937df52..ee39e358ce 100644 --- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out @@ -43,8 +43,6 @@ spv.ext.RayGenShaderArray.rgen MemberDecorate 36(block) 3 Offset 32 MemberDecorate 36(block) 4 Offset 40 Decorate 36(block) Block - Decorate 38 DescriptorSet 0 - Decorate 38 Binding 2 Decorate 61(payload) Location 1 Decorate 65(accEXT1) DescriptorSet 0 Decorate 65(accEXT1) Binding 1 diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index a1db5c135f..19eabdf4e8 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -79,7 +79,7 @@ class TVarGatherTraverser : public TLiveTraverser { target = &inputList; else if (base->getQualifier().storage == EvqVaryingOut) target = &outputList; - else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant()) + else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant() && !base->getQualifier().isShaderRecord()) target = &uniformList; // If a global is being visited, then we should also traverse it incase it's evaluation // ends up visiting inputs we want to tag as live From 6639be7c2dd1332c4fad66b95886f7e6745532e8 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 20 Oct 2021 13:48:22 -0600 Subject: [PATCH 229/365] Accept gl_ViewportMask in version 430 and later Was previously accepted only in 450 or later. Fixes #2785 --- Test/baseResults/spv.viewportArray2.tesc.out | 20 ++++++---------- Test/spv.viewportArray2.tesc | 3 +-- glslang/MachineIndependent/Initialize.cpp | 24 +++++++++++++++++--- 3 files changed, 29 insertions(+), 18 deletions(-) diff --git a/Test/baseResults/spv.viewportArray2.tesc.out b/Test/baseResults/spv.viewportArray2.tesc.out index 74235a5717..e95ada4988 100644 --- a/Test/baseResults/spv.viewportArray2.tesc.out +++ b/Test/baseResults/spv.viewportArray2.tesc.out @@ -1,8 +1,7 @@ spv.viewportArray2.tesc -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 25 +// Id's are bound by 23 Capability Tessellation Capability ShaderViewportIndexLayerNV @@ -11,23 +10,21 @@ Validation failed Extension "SPV_NV_viewport_array2" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint TessellationControl 4 "main" 14 16 22 24 + EntryPoint TessellationControl 4 "main" 14 16 22 ExecutionMode 4 OutputVertices 4 - Source GLSL 450 + Source GLSL 430 SourceExtension "GL_NV_viewport_array2" Name 4 "main" Name 10 "gl_PerVertex" MemberName 10(gl_PerVertex) 0 "gl_ViewportMask" Name 14 "gl_out" Name 16 "gl_InvocationID" - Name 22 "gl_ViewportIndex" - Name 24 "gl_Layer" + Name 22 "gl_Layer" MemberDecorate 10(gl_PerVertex) 0 BuiltIn ViewportMaskNV Decorate 10(gl_PerVertex) Block Decorate 16(gl_InvocationID) BuiltIn InvocationId - Decorate 22(gl_ViewportIndex) BuiltIn ViewportIndex - Decorate 24(gl_Layer) BuiltIn Layer - Decorate 24(gl_Layer) ViewportRelativeNV + Decorate 22(gl_Layer) BuiltIn Layer + Decorate 22(gl_Layer) ViewportRelativeNV 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 1 @@ -44,14 +41,11 @@ Validation failed 18: 6(int) Constant 0 19: 6(int) Constant 1 20: TypePointer Output 6(int) -22(gl_ViewportIndex): 20(ptr) Variable Output - 23: 6(int) Constant 2 - 24(gl_Layer): 20(ptr) Variable Output + 22(gl_Layer): 20(ptr) Variable Output 4(main): 2 Function None 3 5: Label 17: 6(int) Load 16(gl_InvocationID) 21: 20(ptr) AccessChain 14(gl_out) 17 18 18 Store 21 19 - Store 22(gl_ViewportIndex) 23 Return FunctionEnd diff --git a/Test/spv.viewportArray2.tesc b/Test/spv.viewportArray2.tesc index 7fc208a45e..24a1d8c9d7 100644 --- a/Test/spv.viewportArray2.tesc +++ b/Test/spv.viewportArray2.tesc @@ -1,4 +1,4 @@ -#version 450 +#version 430 #extension GL_NV_viewport_array2 :require layout(vertices = 4) out; @@ -12,5 +12,4 @@ layout (viewport_relative) out highp int gl_Layer; void main() { gl_out[gl_InvocationID].gl_ViewportMask[0] = 1; - gl_ViewportIndex = 2; } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 9f92529955..b633331ae9 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5172,9 +5172,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV ); } - if (version >= 450) + if (version >= 430) stageBuiltins[EShLangVertex].append( "out int gl_ViewportMask[];" // GL_NV_viewport_array2 + ); + + if (version >= 450) + stageBuiltins[EShLangVertex].append( "out int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering "out vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering "out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes @@ -5310,9 +5314,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in int gl_InvocationID;" ); - if (version >= 450) + if (version >= 430) stageBuiltins[EShLangGeometry].append( "out int gl_ViewportMask[];" // GL_NV_viewport_array2 + ); + + if (version >= 450) + stageBuiltins[EShLangGeometry].append( "out int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering "out vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering "out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes @@ -5388,7 +5396,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV if (version >= 450) stageBuiltins[EShLangTessControl].append( "float gl_CullDistance[];" + ); + if (version >= 430) + stageBuiltins[EShLangTessControl].append( "int gl_ViewportMask[];" // GL_NV_viewport_array2 + ); + if (version >= 450) + stageBuiltins[EShLangTessControl].append( "vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering "int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering "vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes @@ -5491,9 +5505,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "out int gl_Layer;" "\n"); - if (version >= 450) + if (version >= 430) stageBuiltins[EShLangTessEvaluation].append( "out int gl_ViewportMask[];" // GL_NV_viewport_array2 + ); + + if (version >= 450) + stageBuiltins[EShLangTessEvaluation].append( "out vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering "out int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering "out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes From 82b2668d584a23766c54e0d387c471c05515293c Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 18 Oct 2021 18:28:01 -0600 Subject: [PATCH 230/365] Allow 8/16-bit integer as array index Also enable 8/16 bit int capability in SPIR-V in such cases. Also enable 64 bit capabilities when used in operations. Fixes #2779 --- SPIRV/SpvPostProcess.cpp | 31 +- Test/baseResults/spv.int16.frag.out | 934 +++++++++++---------- Test/baseResults/spv.int8.frag.out | 930 ++++++++++---------- Test/spv.int16.frag | 5 + Test/spv.int8.frag | 5 + glslang/MachineIndependent/ParseHelper.cpp | 7 +- 6 files changed, 988 insertions(+), 924 deletions(-) diff --git a/SPIRV/SpvPostProcess.cpp b/SPIRV/SpvPostProcess.cpp index d283febef4..dd6dabce0d 100644 --- a/SPIRV/SpvPostProcess.cpp +++ b/SPIRV/SpvPostProcess.cpp @@ -111,8 +111,6 @@ void Builder::postProcessType(const Instruction& inst, Id typeId) } } break; - case OpAccessChain: - case OpPtrAccessChain: case OpCopyObject: break; case OpFConvert: @@ -172,13 +170,30 @@ void Builder::postProcessType(const Instruction& inst, Id typeId) break; } break; + case OpAccessChain: + case OpPtrAccessChain: + if (isPointerType(typeId)) + break; + if (basicTypeOp == OpTypeInt) { + if (width == 16) + addCapability(CapabilityInt16); + else if (width == 8) + addCapability(CapabilityInt8); + } default: - if (basicTypeOp == OpTypeFloat && width == 16) - addCapability(CapabilityFloat16); - if (basicTypeOp == OpTypeInt && width == 16) - addCapability(CapabilityInt16); - if (basicTypeOp == OpTypeInt && width == 8) - addCapability(CapabilityInt8); + if (basicTypeOp == OpTypeInt) { + if (width == 16) + addCapability(CapabilityInt16); + else if (width == 8) + addCapability(CapabilityInt8); + else if (width == 64) + addCapability(CapabilityInt64); + } else if (basicTypeOp == OpTypeFloat) { + if (width == 16) + addCapability(CapabilityFloat16); + else if (width == 64) + addCapability(CapabilityFloat64); + } break; } } diff --git a/Test/baseResults/spv.int16.frag.out b/Test/baseResults/spv.int16.frag.out index 43cb09fee0..3e10a7db24 100644 --- a/Test/baseResults/spv.int16.frag.out +++ b/Test/baseResults/spv.int16.frag.out @@ -1,7 +1,7 @@ spv.int16.frag // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 535 +// Id's are bound by 549 Capability Shader Capability Float16 @@ -48,53 +48,55 @@ spv.int16.frag Name 154 "i8v" Name 163 "u8v" Name 176 "bv" - Name 195 "u16v" - Name 200 "i16" - Name 220 "i" - Name 227 "uv" - Name 243 "i64" - Name 281 "b" - Name 343 "i16v" - Name 346 "i16" - Name 356 "u16v" - Name 358 "u16" - Name 428 "i32" - Name 431 "i64" - Name 434 "i16v4" - Name 437 "u32" - Name 438 "u16v2" - Name 442 "u64" - Name 445 "u16v4" - Name 457 "bv" - Name 530 "Block" - MemberName 530(Block) 0 "i16" - MemberName 530(Block) 1 "i16v2" - MemberName 530(Block) 2 "i16v3" - MemberName 530(Block) 3 "i16v4" - MemberName 530(Block) 4 "u16" - MemberName 530(Block) 5 "u16v2" - MemberName 530(Block) 6 "u16v3" - MemberName 530(Block) 7 "u16v4" - Name 532 "block" - Name 533 "si16" - Name 534 "su16" + Name 196 "arr" + Name 204 "u16v" + Name 209 "i16" + Name 229 "i" + Name 236 "uv" + Name 252 "i64" + Name 290 "b" + Name 353 "f" + Name 357 "i16v" + Name 360 "i16" + Name 370 "u16v" + Name 372 "u16" + Name 442 "i32" + Name 445 "i64" + Name 448 "i16v4" + Name 451 "u32" + Name 452 "u16v2" + Name 456 "u64" + Name 459 "u16v4" + Name 471 "bv" + Name 544 "Block" + MemberName 544(Block) 0 "i16" + MemberName 544(Block) 1 "i16v2" + MemberName 544(Block) 2 "i16v3" + MemberName 544(Block) 3 "i16v4" + MemberName 544(Block) 4 "u16" + MemberName 544(Block) 5 "u16v2" + MemberName 544(Block) 6 "u16v3" + MemberName 544(Block) 7 "u16v4" + Name 546 "block" + Name 547 "si16" + Name 548 "su16" MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block Decorate 26 DescriptorSet 0 Decorate 26 Binding 0 - MemberDecorate 530(Block) 0 Offset 0 - MemberDecorate 530(Block) 1 Offset 4 - MemberDecorate 530(Block) 2 Offset 8 - MemberDecorate 530(Block) 3 Offset 16 - MemberDecorate 530(Block) 4 Offset 24 - MemberDecorate 530(Block) 5 Offset 28 - MemberDecorate 530(Block) 6 Offset 32 - MemberDecorate 530(Block) 7 Offset 40 - Decorate 530(Block) Block - Decorate 532(block) DescriptorSet 0 - Decorate 532(block) Binding 1 - Decorate 533(si16) SpecId 100 - Decorate 534(su16) SpecId 101 + MemberDecorate 544(Block) 0 Offset 0 + MemberDecorate 544(Block) 1 Offset 4 + MemberDecorate 544(Block) 2 Offset 8 + MemberDecorate 544(Block) 3 Offset 16 + MemberDecorate 544(Block) 4 Offset 24 + MemberDecorate 544(Block) 5 Offset 28 + MemberDecorate 544(Block) 6 Offset 32 + MemberDecorate 544(Block) 7 Offset 40 + Decorate 544(Block) Block + Decorate 546(block) DescriptorSet 0 + Decorate 546(block) Binding 1 + Decorate 547(si16) SpecId 100 + Decorate 548(su16) SpecId 101 2: TypeVoid 3: TypeFunction 2 14: TypeInt 16 1 @@ -160,37 +162,46 @@ spv.int16.frag 185: 36(int16_t) Constant 1 186: 57(i16vec2) ConstantComposite 184 184 187: 57(i16vec2) ConstantComposite 185 185 - 193: TypeVector 36(int16_t) 3 - 194: TypePointer Function 193(i16vec3) - 197: TypeVector 14(int16_t) 3 - 219: TypePointer Function 27(int) - 225: TypeVector 17(int) 3 - 226: TypePointer Function 225(ivec3) - 242: TypePointer Function 71(int64_t) - 264: 17(int) Constant 1 - 270: 17(int) Constant 2 - 276: TypeVector 27(int) 3 - 280: TypePointer Function 173(bool) - 282: 17(int) Constant 0 - 296: TypePointer Function 17(int) - 354: 52(i16vec2) ConstantComposite 21 21 - 363:193(i16vec3) ConstantComposite 184 184 184 - 405: 173(bool) ConstantTrue - 412: 173(bool) ConstantFalse - 413: 174(bvec2) ConstantComposite 412 412 - 425: TypeVector 173(bool) 3 - 426: 425(bvec3) ConstantComposite 412 412 412 - 432: TypeVector 14(int16_t) 4 - 433: TypePointer Function 432(i16vec4) - 441: TypePointer Function 77(int64_t) - 443: TypeVector 36(int16_t) 4 - 444: TypePointer Function 443(i16vec4) - 456: TypePointer Function 425(bvec3) - 530(Block): TypeStruct 14(int16_t) 52(i16vec2) 197(i16vec3) 432(i16vec4) 36(int16_t) 57(i16vec2) 193(i16vec3) 443(i16vec4) - 531: TypePointer Uniform 530(Block) - 532(block): 531(ptr) Variable Uniform - 533(si16): 14(int16_t) SpecConstant 4294967286 - 534(su16): 36(int16_t) SpecConstant 20 + 193: 17(int) Constant 4 + 194: TypeArray 97(float) 193 + 195: TypePointer Function 194 + 197: 97(float) Constant 1065353216 + 198: 97(float) Constant 1073741824 + 199: 97(float) Constant 1077936128 + 200: 97(float) Constant 1082130432 + 201: 194 ConstantComposite 197 198 199 200 + 202: TypeVector 36(int16_t) 3 + 203: TypePointer Function 202(i16vec3) + 206: TypeVector 14(int16_t) 3 + 228: TypePointer Function 27(int) + 234: TypeVector 17(int) 3 + 235: TypePointer Function 234(ivec3) + 251: TypePointer Function 71(int64_t) + 273: 17(int) Constant 1 + 279: 17(int) Constant 2 + 285: TypeVector 27(int) 3 + 289: TypePointer Function 173(bool) + 291: 17(int) Constant 0 + 305: TypePointer Function 17(int) + 352: TypePointer Function 97(float) + 368: 52(i16vec2) ConstantComposite 21 21 + 377:202(i16vec3) ConstantComposite 184 184 184 + 419: 173(bool) ConstantTrue + 426: 173(bool) ConstantFalse + 427: 174(bvec2) ConstantComposite 426 426 + 439: TypeVector 173(bool) 3 + 440: 439(bvec3) ConstantComposite 426 426 426 + 446: TypeVector 14(int16_t) 4 + 447: TypePointer Function 446(i16vec4) + 455: TypePointer Function 77(int64_t) + 457: TypeVector 36(int16_t) 4 + 458: TypePointer Function 457(i16vec4) + 470: TypePointer Function 439(bvec3) + 544(Block): TypeStruct 14(int16_t) 52(i16vec2) 206(i16vec3) 446(i16vec4) 36(int16_t) 57(i16vec2) 202(i16vec3) 457(i16vec4) + 545: TypePointer Uniform 544(Block) + 546(block): 545(ptr) Variable Uniform + 547(si16): 14(int16_t) SpecConstant 4294967286 + 548(su16): 36(int16_t) SpecConstant 20 4(main): 2 Function None 3 5: Label Return @@ -364,397 +375,404 @@ spv.int16.frag FunctionEnd 10(operators(): 2 Function None 3 11: Label - 195(u16v): 194(ptr) Variable Function - 200(i16): 15(ptr) Variable Function - 220(i): 219(ptr) Variable Function - 227(uv): 226(ptr) Variable Function - 243(i64): 242(ptr) Variable Function - 281(b): 280(ptr) Variable Function - 196:193(i16vec3) Load 195(u16v) - 198:197(i16vec3) CompositeConstruct 179 179 179 - 199:193(i16vec3) IAdd 196 198 - Store 195(u16v) 199 - 201: 14(int16_t) Load 200(i16) - 202: 14(int16_t) ISub 201 179 - Store 200(i16) 202 - 203: 14(int16_t) Load 200(i16) - 204: 14(int16_t) IAdd 203 179 - Store 200(i16) 204 - 205:193(i16vec3) Load 195(u16v) - 206:197(i16vec3) CompositeConstruct 179 179 179 - 207:193(i16vec3) ISub 205 206 - Store 195(u16v) 207 - 208:193(i16vec3) Load 195(u16v) - 209:193(i16vec3) Not 208 - Store 195(u16v) 209 - 210: 14(int16_t) Load 200(i16) - Store 200(i16) 210 - 211:193(i16vec3) Load 195(u16v) - 212:193(i16vec3) SNegate 211 - Store 195(u16v) 212 - 213: 14(int16_t) Load 200(i16) - 214: 14(int16_t) Load 200(i16) - 215: 14(int16_t) IAdd 214 213 - Store 200(i16) 215 - 216:193(i16vec3) Load 195(u16v) - 217:193(i16vec3) Load 195(u16v) - 218:193(i16vec3) ISub 217 216 - Store 195(u16v) 218 - 221: 14(int16_t) Load 200(i16) - 222: 27(int) SConvert 221 - 223: 27(int) Load 220(i) - 224: 27(int) IMul 223 222 - Store 220(i) 224 - 228:193(i16vec3) Load 195(u16v) - 229: 225(ivec3) UConvert 228 - 230: 225(ivec3) Load 227(uv) - 231: 225(ivec3) UDiv 230 229 - Store 227(uv) 231 - 232: 14(int16_t) Load 200(i16) - 233: 27(int) SConvert 232 - 234: 17(int) Bitcast 233 - 235: 225(ivec3) Load 227(uv) - 236: 225(ivec3) CompositeConstruct 234 234 234 - 237: 225(ivec3) UMod 235 236 - Store 227(uv) 237 - 238:193(i16vec3) Load 195(u16v) - 239: 225(ivec3) UConvert 238 - 240: 225(ivec3) Load 227(uv) - 241: 225(ivec3) IAdd 239 240 - Store 227(uv) 241 - 244: 14(int16_t) Load 200(i16) - 245: 71(int64_t) SConvert 244 - 246: 71(int64_t) Load 243(i64) - 247: 71(int64_t) ISub 245 246 - Store 243(i64) 247 - 248:193(i16vec3) Load 195(u16v) - 249: 225(ivec3) UConvert 248 - 250: 225(ivec3) Load 227(uv) - 251: 225(ivec3) IMul 249 250 - Store 227(uv) 251 - 252: 14(int16_t) Load 200(i16) - 253: 71(int64_t) SConvert 252 - 254: 71(int64_t) Load 243(i64) - 255: 71(int64_t) IMul 253 254 - Store 243(i64) 255 - 256: 14(int16_t) Load 200(i16) - 257: 27(int) SConvert 256 - 258: 27(int) Load 220(i) - 259: 27(int) SMod 257 258 - Store 220(i) 259 - 260: 14(int16_t) Load 200(i16) - 261:193(i16vec3) Load 195(u16v) - 262:197(i16vec3) CompositeConstruct 260 260 260 - 263:193(i16vec3) ShiftLeftLogical 261 262 - Store 195(u16v) 263 - 265: 37(ptr) AccessChain 195(u16v) 264 - 266: 36(int16_t) Load 265 - 267: 14(int16_t) Load 200(i16) - 268: 14(int16_t) ShiftRightArithmetic 267 266 - Store 200(i16) 268 - 269: 14(int16_t) Load 200(i16) - 271: 37(ptr) AccessChain 195(u16v) 270 - 272: 36(int16_t) Load 271 - 273: 14(int16_t) ShiftLeftLogical 269 272 - Store 200(i16) 273 - 274:193(i16vec3) Load 195(u16v) - 275: 27(int) Load 220(i) - 277: 276(ivec3) CompositeConstruct 275 275 275 - 278:193(i16vec3) ShiftLeftLogical 274 277 - 279: 225(ivec3) UConvert 278 - Store 227(uv) 279 - 283: 37(ptr) AccessChain 195(u16v) 282 - 284: 36(int16_t) Load 283 - 285: 14(int16_t) Load 200(i16) - 286: 36(int16_t) Bitcast 285 - 287: 173(bool) INotEqual 284 286 - Store 281(b) 287 - 288: 14(int16_t) Load 200(i16) - 289: 36(int16_t) Bitcast 288 - 290: 37(ptr) AccessChain 195(u16v) 282 - 291: 36(int16_t) Load 290 - 292: 173(bool) IEqual 289 291 - Store 281(b) 292 - 293: 37(ptr) AccessChain 195(u16v) 282 - 294: 36(int16_t) Load 293 - 295: 17(int) UConvert 294 - 297: 296(ptr) AccessChain 227(uv) 264 - 298: 17(int) Load 297 - 299: 173(bool) UGreaterThan 295 298 - Store 281(b) 299 - 300: 14(int16_t) Load 200(i16) - 301: 27(int) SConvert 300 - 302: 27(int) Load 220(i) - 303: 173(bool) SLessThan 301 302 - Store 281(b) 303 - 304: 37(ptr) AccessChain 195(u16v) 264 - 305: 36(int16_t) Load 304 - 306: 17(int) UConvert 305 - 307: 296(ptr) AccessChain 227(uv) 282 - 308: 17(int) Load 307 - 309: 173(bool) UGreaterThanEqual 306 308 - Store 281(b) 309 - 310: 14(int16_t) Load 200(i16) - 311: 27(int) SConvert 310 - 312: 27(int) Load 220(i) - 313: 173(bool) SLessThanEqual 311 312 - Store 281(b) 313 - 314: 14(int16_t) Load 200(i16) - 315: 27(int) SConvert 314 - 316: 17(int) Bitcast 315 - 317: 225(ivec3) Load 227(uv) - 318: 225(ivec3) CompositeConstruct 316 316 316 - 319: 225(ivec3) BitwiseOr 317 318 - Store 227(uv) 319 - 320: 14(int16_t) Load 200(i16) - 321: 27(int) SConvert 320 - 322: 27(int) Load 220(i) - 323: 27(int) BitwiseOr 321 322 - Store 220(i) 323 - 324: 14(int16_t) Load 200(i16) - 325: 71(int64_t) SConvert 324 - 326: 71(int64_t) Load 243(i64) - 327: 71(int64_t) BitwiseAnd 326 325 - Store 243(i64) 327 - 328:193(i16vec3) Load 195(u16v) - 329: 225(ivec3) UConvert 328 - 330: 225(ivec3) Load 227(uv) - 331: 225(ivec3) BitwiseAnd 329 330 - Store 227(uv) 331 - 332: 14(int16_t) Load 200(i16) - 333: 27(int) SConvert 332 - 334: 17(int) Bitcast 333 - 335: 225(ivec3) Load 227(uv) - 336: 225(ivec3) CompositeConstruct 334 334 334 - 337: 225(ivec3) BitwiseXor 335 336 - Store 227(uv) 337 - 338:193(i16vec3) Load 195(u16v) - 339: 14(int16_t) Load 200(i16) - 340: 36(int16_t) Bitcast 339 - 341:193(i16vec3) CompositeConstruct 340 340 340 - 342:193(i16vec3) BitwiseXor 338 341 - Store 195(u16v) 342 + 196(arr): 195(ptr) Variable Function + 204(u16v): 203(ptr) Variable Function + 209(i16): 15(ptr) Variable Function + 229(i): 228(ptr) Variable Function + 236(uv): 235(ptr) Variable Function + 252(i64): 251(ptr) Variable Function + 290(b): 289(ptr) Variable Function + 353(f): 352(ptr) Variable Function + Store 196(arr) 201 + 205:202(i16vec3) Load 204(u16v) + 207:206(i16vec3) CompositeConstruct 179 179 179 + 208:202(i16vec3) IAdd 205 207 + Store 204(u16v) 208 + 210: 14(int16_t) Load 209(i16) + 211: 14(int16_t) ISub 210 179 + Store 209(i16) 211 + 212: 14(int16_t) Load 209(i16) + 213: 14(int16_t) IAdd 212 179 + Store 209(i16) 213 + 214:202(i16vec3) Load 204(u16v) + 215:206(i16vec3) CompositeConstruct 179 179 179 + 216:202(i16vec3) ISub 214 215 + Store 204(u16v) 216 + 217:202(i16vec3) Load 204(u16v) + 218:202(i16vec3) Not 217 + Store 204(u16v) 218 + 219: 14(int16_t) Load 209(i16) + Store 209(i16) 219 + 220:202(i16vec3) Load 204(u16v) + 221:202(i16vec3) SNegate 220 + Store 204(u16v) 221 + 222: 14(int16_t) Load 209(i16) + 223: 14(int16_t) Load 209(i16) + 224: 14(int16_t) IAdd 223 222 + Store 209(i16) 224 + 225:202(i16vec3) Load 204(u16v) + 226:202(i16vec3) Load 204(u16v) + 227:202(i16vec3) ISub 226 225 + Store 204(u16v) 227 + 230: 14(int16_t) Load 209(i16) + 231: 27(int) SConvert 230 + 232: 27(int) Load 229(i) + 233: 27(int) IMul 232 231 + Store 229(i) 233 + 237:202(i16vec3) Load 204(u16v) + 238: 234(ivec3) UConvert 237 + 239: 234(ivec3) Load 236(uv) + 240: 234(ivec3) UDiv 239 238 + Store 236(uv) 240 + 241: 14(int16_t) Load 209(i16) + 242: 27(int) SConvert 241 + 243: 17(int) Bitcast 242 + 244: 234(ivec3) Load 236(uv) + 245: 234(ivec3) CompositeConstruct 243 243 243 + 246: 234(ivec3) UMod 244 245 + Store 236(uv) 246 + 247:202(i16vec3) Load 204(u16v) + 248: 234(ivec3) UConvert 247 + 249: 234(ivec3) Load 236(uv) + 250: 234(ivec3) IAdd 248 249 + Store 236(uv) 250 + 253: 14(int16_t) Load 209(i16) + 254: 71(int64_t) SConvert 253 + 255: 71(int64_t) Load 252(i64) + 256: 71(int64_t) ISub 254 255 + Store 252(i64) 256 + 257:202(i16vec3) Load 204(u16v) + 258: 234(ivec3) UConvert 257 + 259: 234(ivec3) Load 236(uv) + 260: 234(ivec3) IMul 258 259 + Store 236(uv) 260 + 261: 14(int16_t) Load 209(i16) + 262: 71(int64_t) SConvert 261 + 263: 71(int64_t) Load 252(i64) + 264: 71(int64_t) IMul 262 263 + Store 252(i64) 264 + 265: 14(int16_t) Load 209(i16) + 266: 27(int) SConvert 265 + 267: 27(int) Load 229(i) + 268: 27(int) SMod 266 267 + Store 229(i) 268 + 269: 14(int16_t) Load 209(i16) + 270:202(i16vec3) Load 204(u16v) + 271:206(i16vec3) CompositeConstruct 269 269 269 + 272:202(i16vec3) ShiftLeftLogical 270 271 + Store 204(u16v) 272 + 274: 37(ptr) AccessChain 204(u16v) 273 + 275: 36(int16_t) Load 274 + 276: 14(int16_t) Load 209(i16) + 277: 14(int16_t) ShiftRightArithmetic 276 275 + Store 209(i16) 277 + 278: 14(int16_t) Load 209(i16) + 280: 37(ptr) AccessChain 204(u16v) 279 + 281: 36(int16_t) Load 280 + 282: 14(int16_t) ShiftLeftLogical 278 281 + Store 209(i16) 282 + 283:202(i16vec3) Load 204(u16v) + 284: 27(int) Load 229(i) + 286: 285(ivec3) CompositeConstruct 284 284 284 + 287:202(i16vec3) ShiftLeftLogical 283 286 + 288: 234(ivec3) UConvert 287 + Store 236(uv) 288 + 292: 37(ptr) AccessChain 204(u16v) 291 + 293: 36(int16_t) Load 292 + 294: 14(int16_t) Load 209(i16) + 295: 36(int16_t) Bitcast 294 + 296: 173(bool) INotEqual 293 295 + Store 290(b) 296 + 297: 14(int16_t) Load 209(i16) + 298: 36(int16_t) Bitcast 297 + 299: 37(ptr) AccessChain 204(u16v) 291 + 300: 36(int16_t) Load 299 + 301: 173(bool) IEqual 298 300 + Store 290(b) 301 + 302: 37(ptr) AccessChain 204(u16v) 291 + 303: 36(int16_t) Load 302 + 304: 17(int) UConvert 303 + 306: 305(ptr) AccessChain 236(uv) 273 + 307: 17(int) Load 306 + 308: 173(bool) UGreaterThan 304 307 + Store 290(b) 308 + 309: 14(int16_t) Load 209(i16) + 310: 27(int) SConvert 309 + 311: 27(int) Load 229(i) + 312: 173(bool) SLessThan 310 311 + Store 290(b) 312 + 313: 37(ptr) AccessChain 204(u16v) 273 + 314: 36(int16_t) Load 313 + 315: 17(int) UConvert 314 + 316: 305(ptr) AccessChain 236(uv) 291 + 317: 17(int) Load 316 + 318: 173(bool) UGreaterThanEqual 315 317 + Store 290(b) 318 + 319: 14(int16_t) Load 209(i16) + 320: 27(int) SConvert 319 + 321: 27(int) Load 229(i) + 322: 173(bool) SLessThanEqual 320 321 + Store 290(b) 322 + 323: 14(int16_t) Load 209(i16) + 324: 27(int) SConvert 323 + 325: 17(int) Bitcast 324 + 326: 234(ivec3) Load 236(uv) + 327: 234(ivec3) CompositeConstruct 325 325 325 + 328: 234(ivec3) BitwiseOr 326 327 + Store 236(uv) 328 + 329: 14(int16_t) Load 209(i16) + 330: 27(int) SConvert 329 + 331: 27(int) Load 229(i) + 332: 27(int) BitwiseOr 330 331 + Store 229(i) 332 + 333: 14(int16_t) Load 209(i16) + 334: 71(int64_t) SConvert 333 + 335: 71(int64_t) Load 252(i64) + 336: 71(int64_t) BitwiseAnd 335 334 + Store 252(i64) 336 + 337:202(i16vec3) Load 204(u16v) + 338: 234(ivec3) UConvert 337 + 339: 234(ivec3) Load 236(uv) + 340: 234(ivec3) BitwiseAnd 338 339 + Store 236(uv) 340 + 341: 14(int16_t) Load 209(i16) + 342: 27(int) SConvert 341 + 343: 17(int) Bitcast 342 + 344: 234(ivec3) Load 236(uv) + 345: 234(ivec3) CompositeConstruct 343 343 343 + 346: 234(ivec3) BitwiseXor 344 345 + Store 236(uv) 346 + 347:202(i16vec3) Load 204(u16v) + 348: 14(int16_t) Load 209(i16) + 349: 36(int16_t) Bitcast 348 + 350:202(i16vec3) CompositeConstruct 349 349 349 + 351:202(i16vec3) BitwiseXor 347 350 + Store 204(u16v) 351 + 354: 14(int16_t) Load 209(i16) + 355: 352(ptr) AccessChain 196(arr) 354 + 356: 97(float) Load 355 + Store 353(f) 356 Return FunctionEnd 12(builtinFuncs(): 2 Function None 3 13: Label - 343(i16v): 53(ptr) Variable Function - 346(i16): 15(ptr) Variable Function - 356(u16v): 194(ptr) Variable Function - 358(u16): 37(ptr) Variable Function - 428(i32): 219(ptr) Variable Function - 431(i64): 242(ptr) Variable Function - 434(i16v4): 433(ptr) Variable Function - 437(u32): 296(ptr) Variable Function - 438(u16v2): 58(ptr) Variable Function - 442(u64): 441(ptr) Variable Function - 445(u16v4): 444(ptr) Variable Function - 457(bv): 456(ptr) Variable Function - 344: 52(i16vec2) Load 343(i16v) - 345: 52(i16vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 344 - Store 343(i16v) 345 - 347: 14(int16_t) Load 346(i16) - 348: 14(int16_t) ExtInst 1(GLSL.std.450) 7(SSign) 347 - Store 346(i16) 348 - 349: 52(i16vec2) Load 343(i16v) - 350: 14(int16_t) Load 346(i16) - 351: 52(i16vec2) CompositeConstruct 350 350 - 352: 52(i16vec2) ExtInst 1(GLSL.std.450) 39(SMin) 349 351 - Store 343(i16v) 352 - 353: 52(i16vec2) Load 343(i16v) - 355: 52(i16vec2) ExtInst 1(GLSL.std.450) 39(SMin) 353 354 - Store 343(i16v) 355 - 357:193(i16vec3) Load 356(u16v) - 359: 36(int16_t) Load 358(u16) - 360:193(i16vec3) CompositeConstruct 359 359 359 - 361:193(i16vec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 360 - Store 356(u16v) 361 - 362:193(i16vec3) Load 356(u16v) - 364:193(i16vec3) ExtInst 1(GLSL.std.450) 38(UMin) 362 363 - Store 356(u16v) 364 - 365: 52(i16vec2) Load 343(i16v) - 366: 14(int16_t) Load 346(i16) - 367: 52(i16vec2) CompositeConstruct 366 366 - 368: 52(i16vec2) ExtInst 1(GLSL.std.450) 42(SMax) 365 367 - Store 343(i16v) 368 - 369: 52(i16vec2) Load 343(i16v) - 370: 52(i16vec2) ExtInst 1(GLSL.std.450) 42(SMax) 369 354 - Store 343(i16v) 370 - 371:193(i16vec3) Load 356(u16v) - 372: 36(int16_t) Load 358(u16) - 373:193(i16vec3) CompositeConstruct 372 372 372 - 374:193(i16vec3) ExtInst 1(GLSL.std.450) 41(UMax) 371 373 - Store 356(u16v) 374 - 375:193(i16vec3) Load 356(u16v) - 376:193(i16vec3) ExtInst 1(GLSL.std.450) 41(UMax) 375 363 - Store 356(u16v) 376 - 377: 52(i16vec2) Load 343(i16v) - 378: 14(int16_t) Load 346(i16) - 379: 14(int16_t) SNegate 378 - 380: 14(int16_t) Load 346(i16) - 381: 52(i16vec2) CompositeConstruct 379 379 - 382: 52(i16vec2) CompositeConstruct 380 380 - 383: 52(i16vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 377 381 382 - Store 343(i16v) 383 - 384: 52(i16vec2) Load 343(i16v) - 385: 52(i16vec2) Load 343(i16v) - 386: 52(i16vec2) SNegate 385 - 387: 52(i16vec2) Load 343(i16v) - 388: 52(i16vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 384 386 387 - Store 343(i16v) 388 - 389:193(i16vec3) Load 356(u16v) - 390: 36(int16_t) Load 358(u16) - 391: 36(int16_t) SNegate 390 - 392: 36(int16_t) Load 358(u16) - 393:193(i16vec3) CompositeConstruct 391 391 391 - 394:193(i16vec3) CompositeConstruct 392 392 392 - 395:193(i16vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 389 393 394 - Store 356(u16v) 395 - 396:193(i16vec3) Load 356(u16v) - 397:193(i16vec3) Load 356(u16v) - 398:193(i16vec3) SNegate 397 - 399:193(i16vec3) Load 356(u16v) - 400:193(i16vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 396 398 399 - Store 356(u16v) 400 - 401: 15(ptr) AccessChain 343(i16v) 282 - 402: 14(int16_t) Load 401 - 403: 15(ptr) AccessChain 343(i16v) 264 - 404: 14(int16_t) Load 403 - 406: 14(int16_t) Select 405 404 402 - Store 346(i16) 406 - 407: 14(int16_t) Load 346(i16) - 408: 52(i16vec2) CompositeConstruct 407 407 - 409: 14(int16_t) Load 346(i16) - 410: 14(int16_t) SNegate 409 - 411: 52(i16vec2) CompositeConstruct 410 410 - 414: 52(i16vec2) Select 413 411 408 - Store 343(i16v) 414 - 415: 37(ptr) AccessChain 356(u16v) 282 - 416: 36(int16_t) Load 415 - 417: 37(ptr) AccessChain 356(u16v) 264 - 418: 36(int16_t) Load 417 - 419: 36(int16_t) Select 405 418 416 - Store 358(u16) 419 - 420: 36(int16_t) Load 358(u16) - 421:193(i16vec3) CompositeConstruct 420 420 420 - 422: 36(int16_t) Load 358(u16) - 423: 36(int16_t) SNegate 422 - 424:193(i16vec3) CompositeConstruct 423 423 423 - 427:193(i16vec3) Select 426 424 421 - Store 356(u16v) 427 - 429: 52(i16vec2) Load 343(i16v) - 430: 27(int) Bitcast 429 - Store 428(i32) 430 - 435:432(i16vec4) Load 434(i16v4) - 436: 71(int64_t) Bitcast 435 - Store 431(i64) 436 - 439: 57(i16vec2) Load 438(u16v2) - 440: 17(int) Bitcast 439 - Store 437(u32) 440 - 446:443(i16vec4) Load 445(u16v4) - 447: 77(int64_t) Bitcast 446 - Store 442(u64) 447 - 448: 27(int) Load 428(i32) - 449: 52(i16vec2) Bitcast 448 - Store 343(i16v) 449 - 450: 71(int64_t) Load 431(i64) - 451:432(i16vec4) Bitcast 450 - Store 434(i16v4) 451 - 452: 17(int) Load 437(u32) - 453: 57(i16vec2) Bitcast 452 - Store 438(u16v2) 453 - 454: 77(int64_t) Load 442(u64) - 455:443(i16vec4) Bitcast 454 - Store 445(u16v4) 455 - 458:193(i16vec3) Load 356(u16v) - 459: 36(int16_t) Load 358(u16) - 460:193(i16vec3) CompositeConstruct 459 459 459 - 461: 425(bvec3) ULessThan 458 460 - Store 457(bv) 461 - 462: 52(i16vec2) Load 343(i16v) - 463: 14(int16_t) Load 346(i16) - 464: 52(i16vec2) CompositeConstruct 463 463 - 465: 174(bvec2) SLessThan 462 464 - 466: 280(ptr) AccessChain 457(bv) 282 - 467: 173(bool) CompositeExtract 465 0 - Store 466 467 - 468: 280(ptr) AccessChain 457(bv) 264 - 469: 173(bool) CompositeExtract 465 1 - Store 468 469 - 470:193(i16vec3) Load 356(u16v) - 471: 36(int16_t) Load 358(u16) - 472:193(i16vec3) CompositeConstruct 471 471 471 - 473: 425(bvec3) ULessThanEqual 470 472 - Store 457(bv) 473 - 474: 52(i16vec2) Load 343(i16v) - 475: 14(int16_t) Load 346(i16) - 476: 52(i16vec2) CompositeConstruct 475 475 - 477: 174(bvec2) SLessThanEqual 474 476 - 478: 280(ptr) AccessChain 457(bv) 282 - 479: 173(bool) CompositeExtract 477 0 - Store 478 479 - 480: 280(ptr) AccessChain 457(bv) 264 - 481: 173(bool) CompositeExtract 477 1 + 357(i16v): 53(ptr) Variable Function + 360(i16): 15(ptr) Variable Function + 370(u16v): 203(ptr) Variable Function + 372(u16): 37(ptr) Variable Function + 442(i32): 228(ptr) Variable Function + 445(i64): 251(ptr) Variable Function + 448(i16v4): 447(ptr) Variable Function + 451(u32): 305(ptr) Variable Function + 452(u16v2): 58(ptr) Variable Function + 456(u64): 455(ptr) Variable Function + 459(u16v4): 458(ptr) Variable Function + 471(bv): 470(ptr) Variable Function + 358: 52(i16vec2) Load 357(i16v) + 359: 52(i16vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 358 + Store 357(i16v) 359 + 361: 14(int16_t) Load 360(i16) + 362: 14(int16_t) ExtInst 1(GLSL.std.450) 7(SSign) 361 + Store 360(i16) 362 + 363: 52(i16vec2) Load 357(i16v) + 364: 14(int16_t) Load 360(i16) + 365: 52(i16vec2) CompositeConstruct 364 364 + 366: 52(i16vec2) ExtInst 1(GLSL.std.450) 39(SMin) 363 365 + Store 357(i16v) 366 + 367: 52(i16vec2) Load 357(i16v) + 369: 52(i16vec2) ExtInst 1(GLSL.std.450) 39(SMin) 367 368 + Store 357(i16v) 369 + 371:202(i16vec3) Load 370(u16v) + 373: 36(int16_t) Load 372(u16) + 374:202(i16vec3) CompositeConstruct 373 373 373 + 375:202(i16vec3) ExtInst 1(GLSL.std.450) 38(UMin) 371 374 + Store 370(u16v) 375 + 376:202(i16vec3) Load 370(u16v) + 378:202(i16vec3) ExtInst 1(GLSL.std.450) 38(UMin) 376 377 + Store 370(u16v) 378 + 379: 52(i16vec2) Load 357(i16v) + 380: 14(int16_t) Load 360(i16) + 381: 52(i16vec2) CompositeConstruct 380 380 + 382: 52(i16vec2) ExtInst 1(GLSL.std.450) 42(SMax) 379 381 + Store 357(i16v) 382 + 383: 52(i16vec2) Load 357(i16v) + 384: 52(i16vec2) ExtInst 1(GLSL.std.450) 42(SMax) 383 368 + Store 357(i16v) 384 + 385:202(i16vec3) Load 370(u16v) + 386: 36(int16_t) Load 372(u16) + 387:202(i16vec3) CompositeConstruct 386 386 386 + 388:202(i16vec3) ExtInst 1(GLSL.std.450) 41(UMax) 385 387 + Store 370(u16v) 388 + 389:202(i16vec3) Load 370(u16v) + 390:202(i16vec3) ExtInst 1(GLSL.std.450) 41(UMax) 389 377 + Store 370(u16v) 390 + 391: 52(i16vec2) Load 357(i16v) + 392: 14(int16_t) Load 360(i16) + 393: 14(int16_t) SNegate 392 + 394: 14(int16_t) Load 360(i16) + 395: 52(i16vec2) CompositeConstruct 393 393 + 396: 52(i16vec2) CompositeConstruct 394 394 + 397: 52(i16vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 391 395 396 + Store 357(i16v) 397 + 398: 52(i16vec2) Load 357(i16v) + 399: 52(i16vec2) Load 357(i16v) + 400: 52(i16vec2) SNegate 399 + 401: 52(i16vec2) Load 357(i16v) + 402: 52(i16vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 398 400 401 + Store 357(i16v) 402 + 403:202(i16vec3) Load 370(u16v) + 404: 36(int16_t) Load 372(u16) + 405: 36(int16_t) SNegate 404 + 406: 36(int16_t) Load 372(u16) + 407:202(i16vec3) CompositeConstruct 405 405 405 + 408:202(i16vec3) CompositeConstruct 406 406 406 + 409:202(i16vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 403 407 408 + Store 370(u16v) 409 + 410:202(i16vec3) Load 370(u16v) + 411:202(i16vec3) Load 370(u16v) + 412:202(i16vec3) SNegate 411 + 413:202(i16vec3) Load 370(u16v) + 414:202(i16vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 410 412 413 + Store 370(u16v) 414 + 415: 15(ptr) AccessChain 357(i16v) 291 + 416: 14(int16_t) Load 415 + 417: 15(ptr) AccessChain 357(i16v) 273 + 418: 14(int16_t) Load 417 + 420: 14(int16_t) Select 419 418 416 + Store 360(i16) 420 + 421: 14(int16_t) Load 360(i16) + 422: 52(i16vec2) CompositeConstruct 421 421 + 423: 14(int16_t) Load 360(i16) + 424: 14(int16_t) SNegate 423 + 425: 52(i16vec2) CompositeConstruct 424 424 + 428: 52(i16vec2) Select 427 425 422 + Store 357(i16v) 428 + 429: 37(ptr) AccessChain 370(u16v) 291 + 430: 36(int16_t) Load 429 + 431: 37(ptr) AccessChain 370(u16v) 273 + 432: 36(int16_t) Load 431 + 433: 36(int16_t) Select 419 432 430 + Store 372(u16) 433 + 434: 36(int16_t) Load 372(u16) + 435:202(i16vec3) CompositeConstruct 434 434 434 + 436: 36(int16_t) Load 372(u16) + 437: 36(int16_t) SNegate 436 + 438:202(i16vec3) CompositeConstruct 437 437 437 + 441:202(i16vec3) Select 440 438 435 + Store 370(u16v) 441 + 443: 52(i16vec2) Load 357(i16v) + 444: 27(int) Bitcast 443 + Store 442(i32) 444 + 449:446(i16vec4) Load 448(i16v4) + 450: 71(int64_t) Bitcast 449 + Store 445(i64) 450 + 453: 57(i16vec2) Load 452(u16v2) + 454: 17(int) Bitcast 453 + Store 451(u32) 454 + 460:457(i16vec4) Load 459(u16v4) + 461: 77(int64_t) Bitcast 460 + Store 456(u64) 461 + 462: 27(int) Load 442(i32) + 463: 52(i16vec2) Bitcast 462 + Store 357(i16v) 463 + 464: 71(int64_t) Load 445(i64) + 465:446(i16vec4) Bitcast 464 + Store 448(i16v4) 465 + 466: 17(int) Load 451(u32) + 467: 57(i16vec2) Bitcast 466 + Store 452(u16v2) 467 + 468: 77(int64_t) Load 456(u64) + 469:457(i16vec4) Bitcast 468 + Store 459(u16v4) 469 + 472:202(i16vec3) Load 370(u16v) + 473: 36(int16_t) Load 372(u16) + 474:202(i16vec3) CompositeConstruct 473 473 473 + 475: 439(bvec3) ULessThan 472 474 + Store 471(bv) 475 + 476: 52(i16vec2) Load 357(i16v) + 477: 14(int16_t) Load 360(i16) + 478: 52(i16vec2) CompositeConstruct 477 477 + 479: 174(bvec2) SLessThan 476 478 + 480: 289(ptr) AccessChain 471(bv) 291 + 481: 173(bool) CompositeExtract 479 0 Store 480 481 - 482:193(i16vec3) Load 356(u16v) - 483: 36(int16_t) Load 358(u16) - 484:193(i16vec3) CompositeConstruct 483 483 483 - 485: 425(bvec3) UGreaterThan 482 484 - Store 457(bv) 485 - 486: 52(i16vec2) Load 343(i16v) - 487: 14(int16_t) Load 346(i16) - 488: 52(i16vec2) CompositeConstruct 487 487 - 489: 174(bvec2) SGreaterThan 486 488 - 490: 280(ptr) AccessChain 457(bv) 282 - 491: 173(bool) CompositeExtract 489 0 - Store 490 491 - 492: 280(ptr) AccessChain 457(bv) 264 - 493: 173(bool) CompositeExtract 489 1 + 482: 289(ptr) AccessChain 471(bv) 273 + 483: 173(bool) CompositeExtract 479 1 + Store 482 483 + 484:202(i16vec3) Load 370(u16v) + 485: 36(int16_t) Load 372(u16) + 486:202(i16vec3) CompositeConstruct 485 485 485 + 487: 439(bvec3) ULessThanEqual 484 486 + Store 471(bv) 487 + 488: 52(i16vec2) Load 357(i16v) + 489: 14(int16_t) Load 360(i16) + 490: 52(i16vec2) CompositeConstruct 489 489 + 491: 174(bvec2) SLessThanEqual 488 490 + 492: 289(ptr) AccessChain 471(bv) 291 + 493: 173(bool) CompositeExtract 491 0 Store 492 493 - 494:193(i16vec3) Load 356(u16v) - 495: 36(int16_t) Load 358(u16) - 496:193(i16vec3) CompositeConstruct 495 495 495 - 497: 425(bvec3) UGreaterThanEqual 494 496 - Store 457(bv) 497 - 498: 52(i16vec2) Load 343(i16v) - 499: 14(int16_t) Load 346(i16) - 500: 52(i16vec2) CompositeConstruct 499 499 - 501: 174(bvec2) SGreaterThanEqual 498 500 - 502: 280(ptr) AccessChain 457(bv) 282 - 503: 173(bool) CompositeExtract 501 0 - Store 502 503 - 504: 280(ptr) AccessChain 457(bv) 264 - 505: 173(bool) CompositeExtract 501 1 + 494: 289(ptr) AccessChain 471(bv) 273 + 495: 173(bool) CompositeExtract 491 1 + Store 494 495 + 496:202(i16vec3) Load 370(u16v) + 497: 36(int16_t) Load 372(u16) + 498:202(i16vec3) CompositeConstruct 497 497 497 + 499: 439(bvec3) UGreaterThan 496 498 + Store 471(bv) 499 + 500: 52(i16vec2) Load 357(i16v) + 501: 14(int16_t) Load 360(i16) + 502: 52(i16vec2) CompositeConstruct 501 501 + 503: 174(bvec2) SGreaterThan 500 502 + 504: 289(ptr) AccessChain 471(bv) 291 + 505: 173(bool) CompositeExtract 503 0 Store 504 505 - 506:193(i16vec3) Load 356(u16v) - 507: 36(int16_t) Load 358(u16) - 508:193(i16vec3) CompositeConstruct 507 507 507 - 509: 425(bvec3) IEqual 506 508 - Store 457(bv) 509 - 510: 52(i16vec2) Load 343(i16v) - 511: 14(int16_t) Load 346(i16) - 512: 52(i16vec2) CompositeConstruct 511 511 - 513: 174(bvec2) IEqual 510 512 - 514: 280(ptr) AccessChain 457(bv) 282 - 515: 173(bool) CompositeExtract 513 0 - Store 514 515 - 516: 280(ptr) AccessChain 457(bv) 264 - 517: 173(bool) CompositeExtract 513 1 + 506: 289(ptr) AccessChain 471(bv) 273 + 507: 173(bool) CompositeExtract 503 1 + Store 506 507 + 508:202(i16vec3) Load 370(u16v) + 509: 36(int16_t) Load 372(u16) + 510:202(i16vec3) CompositeConstruct 509 509 509 + 511: 439(bvec3) UGreaterThanEqual 508 510 + Store 471(bv) 511 + 512: 52(i16vec2) Load 357(i16v) + 513: 14(int16_t) Load 360(i16) + 514: 52(i16vec2) CompositeConstruct 513 513 + 515: 174(bvec2) SGreaterThanEqual 512 514 + 516: 289(ptr) AccessChain 471(bv) 291 + 517: 173(bool) CompositeExtract 515 0 Store 516 517 - 518:193(i16vec3) Load 356(u16v) - 519: 36(int16_t) Load 358(u16) - 520:193(i16vec3) CompositeConstruct 519 519 519 - 521: 425(bvec3) INotEqual 518 520 - Store 457(bv) 521 - 522: 52(i16vec2) Load 343(i16v) - 523: 14(int16_t) Load 346(i16) - 524: 52(i16vec2) CompositeConstruct 523 523 - 525: 174(bvec2) INotEqual 522 524 - 526: 280(ptr) AccessChain 457(bv) 282 - 527: 173(bool) CompositeExtract 525 0 - Store 526 527 - 528: 280(ptr) AccessChain 457(bv) 264 - 529: 173(bool) CompositeExtract 525 1 + 518: 289(ptr) AccessChain 471(bv) 273 + 519: 173(bool) CompositeExtract 515 1 + Store 518 519 + 520:202(i16vec3) Load 370(u16v) + 521: 36(int16_t) Load 372(u16) + 522:202(i16vec3) CompositeConstruct 521 521 521 + 523: 439(bvec3) IEqual 520 522 + Store 471(bv) 523 + 524: 52(i16vec2) Load 357(i16v) + 525: 14(int16_t) Load 360(i16) + 526: 52(i16vec2) CompositeConstruct 525 525 + 527: 174(bvec2) IEqual 524 526 + 528: 289(ptr) AccessChain 471(bv) 291 + 529: 173(bool) CompositeExtract 527 0 Store 528 529 + 530: 289(ptr) AccessChain 471(bv) 273 + 531: 173(bool) CompositeExtract 527 1 + Store 530 531 + 532:202(i16vec3) Load 370(u16v) + 533: 36(int16_t) Load 372(u16) + 534:202(i16vec3) CompositeConstruct 533 533 533 + 535: 439(bvec3) INotEqual 532 534 + Store 471(bv) 535 + 536: 52(i16vec2) Load 357(i16v) + 537: 14(int16_t) Load 360(i16) + 538: 52(i16vec2) CompositeConstruct 537 537 + 539: 174(bvec2) INotEqual 536 538 + 540: 289(ptr) AccessChain 471(bv) 291 + 541: 173(bool) CompositeExtract 539 0 + Store 540 541 + 542: 289(ptr) AccessChain 471(bv) 273 + 543: 173(bool) CompositeExtract 539 1 + Store 542 543 Return FunctionEnd diff --git a/Test/baseResults/spv.int8.frag.out b/Test/baseResults/spv.int8.frag.out index a0da3e99f4..e9cd5f8653 100644 --- a/Test/baseResults/spv.int8.frag.out +++ b/Test/baseResults/spv.int8.frag.out @@ -1,7 +1,7 @@ spv.int8.frag // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 530 +// Id's are bound by 544 Capability Shader Capability Float16 @@ -48,53 +48,55 @@ spv.int8.frag Name 117 "f64v" Name 144 "u16v" Name 174 "bv" - Name 192 "u8v" - Name 197 "i8" - Name 217 "i" - Name 224 "uv" - Name 240 "i16" - Name 276 "b" - Name 338 "i8v" - Name 341 "i8" - Name 351 "u8v" - Name 353 "u8" - Name 423 "i16" - Name 426 "i32" - Name 429 "i8v4" - Name 433 "u16" - Name 434 "u8v2" - Name 437 "u32" - Name 440 "u8v4" - Name 452 "bv" - Name 525 "Block" - MemberName 525(Block) 0 "i8" - MemberName 525(Block) 1 "i8v2" - MemberName 525(Block) 2 "i8v3" - MemberName 525(Block) 3 "i8v4" - MemberName 525(Block) 4 "u8" - MemberName 525(Block) 5 "u8v2" - MemberName 525(Block) 6 "u8v3" - MemberName 525(Block) 7 "u8v4" - Name 527 "block" - Name 528 "si8" - Name 529 "su8" + Name 193 "arr" + Name 201 "u8v" + Name 206 "i8" + Name 226 "i" + Name 233 "uv" + Name 249 "i16" + Name 285 "b" + Name 348 "f" + Name 352 "i8v" + Name 355 "i8" + Name 365 "u8v" + Name 367 "u8" + Name 437 "i16" + Name 440 "i32" + Name 443 "i8v4" + Name 447 "u16" + Name 448 "u8v2" + Name 451 "u32" + Name 454 "u8v4" + Name 466 "bv" + Name 539 "Block" + MemberName 539(Block) 0 "i8" + MemberName 539(Block) 1 "i8v2" + MemberName 539(Block) 2 "i8v3" + MemberName 539(Block) 3 "i8v4" + MemberName 539(Block) 4 "u8" + MemberName 539(Block) 5 "u8v2" + MemberName 539(Block) 6 "u8v3" + MemberName 539(Block) 7 "u8v4" + Name 541 "block" + Name 542 "si8" + Name 543 "su8" MemberDecorate 24(Uniforms) 0 Offset 0 Decorate 24(Uniforms) Block Decorate 26 DescriptorSet 0 Decorate 26 Binding 0 - MemberDecorate 525(Block) 0 Offset 0 - MemberDecorate 525(Block) 1 Offset 2 - MemberDecorate 525(Block) 2 Offset 4 - MemberDecorate 525(Block) 3 Offset 8 - MemberDecorate 525(Block) 4 Offset 12 - MemberDecorate 525(Block) 5 Offset 14 - MemberDecorate 525(Block) 6 Offset 16 - MemberDecorate 525(Block) 7 Offset 20 - Decorate 525(Block) Block - Decorate 527(block) DescriptorSet 0 - Decorate 527(block) Binding 1 - Decorate 528(si8) SpecId 100 - Decorate 529(su8) SpecId 101 + MemberDecorate 539(Block) 0 Offset 0 + MemberDecorate 539(Block) 1 Offset 2 + MemberDecorate 539(Block) 2 Offset 4 + MemberDecorate 539(Block) 3 Offset 8 + MemberDecorate 539(Block) 4 Offset 12 + MemberDecorate 539(Block) 5 Offset 14 + MemberDecorate 539(Block) 6 Offset 16 + MemberDecorate 539(Block) 7 Offset 20 + Decorate 539(Block) Block + Decorate 541(block) DescriptorSet 0 + Decorate 541(block) Binding 1 + Decorate 542(si8) SpecId 100 + Decorate 543(su8) SpecId 101 2: TypeVoid 3: TypeFunction 2 14: TypeInt 8 1 @@ -159,36 +161,45 @@ spv.int8.frag 182: 36(int8_t) Constant 1 183: 49(i8vec2) ConstantComposite 181 181 184: 49(i8vec2) ConstantComposite 182 182 - 190: TypeVector 36(int8_t) 3 - 191: TypePointer Function 190(i8vec3) - 194: TypeVector 14(int8_t) 3 - 216: TypePointer Function 27(int) - 222: TypeVector 17(int) 3 - 223: TypePointer Function 222(ivec3) - 239: TypePointer Function 57(int16_t) - 261: 17(int) Constant 1 - 267: 17(int) Constant 2 - 275: TypePointer Function 171(bool) - 277: 17(int) Constant 0 - 291: TypePointer Function 17(int) - 349: 52(i8vec2) ConstantComposite 21 21 - 358: 190(i8vec3) ConstantComposite 181 181 181 - 400: 171(bool) ConstantTrue - 407: 171(bool) ConstantFalse - 408: 172(bvec2) ConstantComposite 407 407 - 420: TypeVector 171(bool) 3 - 421: 420(bvec3) ConstantComposite 407 407 407 - 427: TypeVector 14(int8_t) 4 - 428: TypePointer Function 427(i8vec4) - 432: TypePointer Function 64(int16_t) - 438: TypeVector 36(int8_t) 4 - 439: TypePointer Function 438(i8vec4) - 451: TypePointer Function 420(bvec3) - 525(Block): TypeStruct 14(int8_t) 52(i8vec2) 194(i8vec3) 427(i8vec4) 36(int8_t) 49(i8vec2) 190(i8vec3) 438(i8vec4) - 526: TypePointer Uniform 525(Block) - 527(block): 526(ptr) Variable Uniform - 528(si8): 14(int8_t) SpecConstant 4294967286 - 529(su8): 36(int8_t) SpecConstant 20 + 190: 17(int) Constant 4 + 191: TypeArray 108(float) 190 + 192: TypePointer Function 191 + 194: 108(float) Constant 1065353216 + 195: 108(float) Constant 1073741824 + 196: 108(float) Constant 1077936128 + 197: 108(float) Constant 1082130432 + 198: 191 ConstantComposite 194 195 196 197 + 199: TypeVector 36(int8_t) 3 + 200: TypePointer Function 199(i8vec3) + 203: TypeVector 14(int8_t) 3 + 225: TypePointer Function 27(int) + 231: TypeVector 17(int) 3 + 232: TypePointer Function 231(ivec3) + 248: TypePointer Function 57(int16_t) + 270: 17(int) Constant 1 + 276: 17(int) Constant 2 + 284: TypePointer Function 171(bool) + 286: 17(int) Constant 0 + 300: TypePointer Function 17(int) + 347: TypePointer Function 108(float) + 363: 52(i8vec2) ConstantComposite 21 21 + 372: 199(i8vec3) ConstantComposite 181 181 181 + 414: 171(bool) ConstantTrue + 421: 171(bool) ConstantFalse + 422: 172(bvec2) ConstantComposite 421 421 + 434: TypeVector 171(bool) 3 + 435: 434(bvec3) ConstantComposite 421 421 421 + 441: TypeVector 14(int8_t) 4 + 442: TypePointer Function 441(i8vec4) + 446: TypePointer Function 64(int16_t) + 452: TypeVector 36(int8_t) 4 + 453: TypePointer Function 452(i8vec4) + 465: TypePointer Function 434(bvec3) + 539(Block): TypeStruct 14(int8_t) 52(i8vec2) 203(i8vec3) 441(i8vec4) 36(int8_t) 49(i8vec2) 199(i8vec3) 452(i8vec4) + 540: TypePointer Uniform 539(Block) + 541(block): 540(ptr) Variable Uniform + 542(si8): 14(int8_t) SpecConstant 4294967286 + 543(su8): 36(int8_t) SpecConstant 20 4(main): 2 Function None 3 5: Label Return @@ -360,396 +371,403 @@ spv.int8.frag FunctionEnd 10(operators(): 2 Function None 3 11: Label - 192(u8v): 191(ptr) Variable Function - 197(i8): 15(ptr) Variable Function - 217(i): 216(ptr) Variable Function - 224(uv): 223(ptr) Variable Function - 240(i16): 239(ptr) Variable Function - 276(b): 275(ptr) Variable Function - 193: 190(i8vec3) Load 192(u8v) - 195: 194(i8vec3) CompositeConstruct 176 176 176 - 196: 190(i8vec3) IAdd 193 195 - Store 192(u8v) 196 - 198: 14(int8_t) Load 197(i8) - 199: 14(int8_t) ISub 198 176 - Store 197(i8) 199 - 200: 14(int8_t) Load 197(i8) - 201: 14(int8_t) IAdd 200 176 - Store 197(i8) 201 - 202: 190(i8vec3) Load 192(u8v) - 203: 194(i8vec3) CompositeConstruct 176 176 176 - 204: 190(i8vec3) ISub 202 203 - Store 192(u8v) 204 - 205: 190(i8vec3) Load 192(u8v) - 206: 190(i8vec3) Not 205 - Store 192(u8v) 206 - 207: 14(int8_t) Load 197(i8) - Store 197(i8) 207 - 208: 190(i8vec3) Load 192(u8v) - 209: 190(i8vec3) SNegate 208 - Store 192(u8v) 209 - 210: 14(int8_t) Load 197(i8) - 211: 14(int8_t) Load 197(i8) - 212: 14(int8_t) IAdd 211 210 - Store 197(i8) 212 - 213: 190(i8vec3) Load 192(u8v) - 214: 190(i8vec3) Load 192(u8v) - 215: 190(i8vec3) ISub 214 213 - Store 192(u8v) 215 - 218: 14(int8_t) Load 197(i8) - 219: 27(int) SConvert 218 - 220: 27(int) Load 217(i) - 221: 27(int) IMul 220 219 - Store 217(i) 221 - 225: 190(i8vec3) Load 192(u8v) - 226: 222(ivec3) UConvert 225 - 227: 222(ivec3) Load 224(uv) - 228: 222(ivec3) UDiv 227 226 - Store 224(uv) 228 - 229: 14(int8_t) Load 197(i8) - 230: 27(int) SConvert 229 - 231: 17(int) Bitcast 230 - 232: 222(ivec3) Load 224(uv) - 233: 222(ivec3) CompositeConstruct 231 231 231 - 234: 222(ivec3) UMod 232 233 - Store 224(uv) 234 - 235: 190(i8vec3) Load 192(u8v) - 236: 222(ivec3) UConvert 235 - 237: 222(ivec3) Load 224(uv) - 238: 222(ivec3) IAdd 236 237 - Store 224(uv) 238 - 241: 14(int8_t) Load 197(i8) - 242: 57(int16_t) SConvert 241 - 243: 57(int16_t) Load 240(i16) - 244: 57(int16_t) ISub 242 243 - Store 240(i16) 244 - 245: 190(i8vec3) Load 192(u8v) - 246: 222(ivec3) UConvert 245 - 247: 222(ivec3) Load 224(uv) - 248: 222(ivec3) IMul 246 247 - Store 224(uv) 248 - 249: 14(int8_t) Load 197(i8) - 250: 57(int16_t) SConvert 249 - 251: 57(int16_t) Load 240(i16) - 252: 57(int16_t) IMul 250 251 - Store 240(i16) 252 - 253: 14(int8_t) Load 197(i8) - 254: 27(int) SConvert 253 - 255: 27(int) Load 217(i) - 256: 27(int) SMod 254 255 - Store 217(i) 256 - 257: 14(int8_t) Load 197(i8) - 258: 190(i8vec3) Load 192(u8v) - 259: 194(i8vec3) CompositeConstruct 257 257 257 - 260: 190(i8vec3) ShiftLeftLogical 258 259 - Store 192(u8v) 260 - 262: 37(ptr) AccessChain 192(u8v) 261 - 263: 36(int8_t) Load 262 - 264: 14(int8_t) Load 197(i8) - 265: 14(int8_t) ShiftRightArithmetic 264 263 - Store 197(i8) 265 - 266: 14(int8_t) Load 197(i8) - 268: 37(ptr) AccessChain 192(u8v) 267 - 269: 36(int8_t) Load 268 - 270: 14(int8_t) ShiftLeftLogical 266 269 - Store 197(i8) 270 - 271: 190(i8vec3) Load 192(u8v) - 272: 14(int8_t) Load 197(i8) - 273: 194(i8vec3) CompositeConstruct 272 272 272 - 274: 190(i8vec3) ShiftLeftLogical 271 273 - Store 192(u8v) 274 - 278: 37(ptr) AccessChain 192(u8v) 277 - 279: 36(int8_t) Load 278 - 280: 14(int8_t) Load 197(i8) - 281: 36(int8_t) Bitcast 280 - 282: 171(bool) INotEqual 279 281 - Store 276(b) 282 - 283: 14(int8_t) Load 197(i8) - 284: 36(int8_t) Bitcast 283 - 285: 37(ptr) AccessChain 192(u8v) 277 - 286: 36(int8_t) Load 285 - 287: 171(bool) IEqual 284 286 - Store 276(b) 287 - 288: 37(ptr) AccessChain 192(u8v) 277 - 289: 36(int8_t) Load 288 - 290: 17(int) UConvert 289 - 292: 291(ptr) AccessChain 224(uv) 261 - 293: 17(int) Load 292 - 294: 171(bool) UGreaterThan 290 293 - Store 276(b) 294 - 295: 14(int8_t) Load 197(i8) - 296: 27(int) SConvert 295 - 297: 27(int) Load 217(i) - 298: 171(bool) SLessThan 296 297 - Store 276(b) 298 - 299: 37(ptr) AccessChain 192(u8v) 261 - 300: 36(int8_t) Load 299 - 301: 17(int) UConvert 300 - 302: 291(ptr) AccessChain 224(uv) 277 - 303: 17(int) Load 302 - 304: 171(bool) UGreaterThanEqual 301 303 - Store 276(b) 304 - 305: 14(int8_t) Load 197(i8) - 306: 27(int) SConvert 305 - 307: 27(int) Load 217(i) - 308: 171(bool) SLessThanEqual 306 307 - Store 276(b) 308 - 309: 14(int8_t) Load 197(i8) - 310: 27(int) SConvert 309 - 311: 17(int) Bitcast 310 - 312: 222(ivec3) Load 224(uv) - 313: 222(ivec3) CompositeConstruct 311 311 311 - 314: 222(ivec3) BitwiseOr 312 313 - Store 224(uv) 314 - 315: 14(int8_t) Load 197(i8) - 316: 27(int) SConvert 315 - 317: 27(int) Load 217(i) - 318: 27(int) BitwiseOr 316 317 - Store 217(i) 318 - 319: 14(int8_t) Load 197(i8) - 320: 57(int16_t) SConvert 319 - 321: 57(int16_t) Load 240(i16) - 322: 57(int16_t) BitwiseAnd 321 320 - Store 240(i16) 322 - 323: 190(i8vec3) Load 192(u8v) - 324: 222(ivec3) UConvert 323 - 325: 222(ivec3) Load 224(uv) - 326: 222(ivec3) BitwiseAnd 324 325 - Store 224(uv) 326 - 327: 14(int8_t) Load 197(i8) - 328: 27(int) SConvert 327 - 329: 17(int) Bitcast 328 - 330: 222(ivec3) Load 224(uv) - 331: 222(ivec3) CompositeConstruct 329 329 329 - 332: 222(ivec3) BitwiseXor 330 331 - Store 224(uv) 332 - 333: 190(i8vec3) Load 192(u8v) - 334: 14(int8_t) Load 197(i8) - 335: 36(int8_t) Bitcast 334 - 336: 190(i8vec3) CompositeConstruct 335 335 335 - 337: 190(i8vec3) BitwiseXor 333 336 - Store 192(u8v) 337 + 193(arr): 192(ptr) Variable Function + 201(u8v): 200(ptr) Variable Function + 206(i8): 15(ptr) Variable Function + 226(i): 225(ptr) Variable Function + 233(uv): 232(ptr) Variable Function + 249(i16): 248(ptr) Variable Function + 285(b): 284(ptr) Variable Function + 348(f): 347(ptr) Variable Function + Store 193(arr) 198 + 202: 199(i8vec3) Load 201(u8v) + 204: 203(i8vec3) CompositeConstruct 176 176 176 + 205: 199(i8vec3) IAdd 202 204 + Store 201(u8v) 205 + 207: 14(int8_t) Load 206(i8) + 208: 14(int8_t) ISub 207 176 + Store 206(i8) 208 + 209: 14(int8_t) Load 206(i8) + 210: 14(int8_t) IAdd 209 176 + Store 206(i8) 210 + 211: 199(i8vec3) Load 201(u8v) + 212: 203(i8vec3) CompositeConstruct 176 176 176 + 213: 199(i8vec3) ISub 211 212 + Store 201(u8v) 213 + 214: 199(i8vec3) Load 201(u8v) + 215: 199(i8vec3) Not 214 + Store 201(u8v) 215 + 216: 14(int8_t) Load 206(i8) + Store 206(i8) 216 + 217: 199(i8vec3) Load 201(u8v) + 218: 199(i8vec3) SNegate 217 + Store 201(u8v) 218 + 219: 14(int8_t) Load 206(i8) + 220: 14(int8_t) Load 206(i8) + 221: 14(int8_t) IAdd 220 219 + Store 206(i8) 221 + 222: 199(i8vec3) Load 201(u8v) + 223: 199(i8vec3) Load 201(u8v) + 224: 199(i8vec3) ISub 223 222 + Store 201(u8v) 224 + 227: 14(int8_t) Load 206(i8) + 228: 27(int) SConvert 227 + 229: 27(int) Load 226(i) + 230: 27(int) IMul 229 228 + Store 226(i) 230 + 234: 199(i8vec3) Load 201(u8v) + 235: 231(ivec3) UConvert 234 + 236: 231(ivec3) Load 233(uv) + 237: 231(ivec3) UDiv 236 235 + Store 233(uv) 237 + 238: 14(int8_t) Load 206(i8) + 239: 27(int) SConvert 238 + 240: 17(int) Bitcast 239 + 241: 231(ivec3) Load 233(uv) + 242: 231(ivec3) CompositeConstruct 240 240 240 + 243: 231(ivec3) UMod 241 242 + Store 233(uv) 243 + 244: 199(i8vec3) Load 201(u8v) + 245: 231(ivec3) UConvert 244 + 246: 231(ivec3) Load 233(uv) + 247: 231(ivec3) IAdd 245 246 + Store 233(uv) 247 + 250: 14(int8_t) Load 206(i8) + 251: 57(int16_t) SConvert 250 + 252: 57(int16_t) Load 249(i16) + 253: 57(int16_t) ISub 251 252 + Store 249(i16) 253 + 254: 199(i8vec3) Load 201(u8v) + 255: 231(ivec3) UConvert 254 + 256: 231(ivec3) Load 233(uv) + 257: 231(ivec3) IMul 255 256 + Store 233(uv) 257 + 258: 14(int8_t) Load 206(i8) + 259: 57(int16_t) SConvert 258 + 260: 57(int16_t) Load 249(i16) + 261: 57(int16_t) IMul 259 260 + Store 249(i16) 261 + 262: 14(int8_t) Load 206(i8) + 263: 27(int) SConvert 262 + 264: 27(int) Load 226(i) + 265: 27(int) SMod 263 264 + Store 226(i) 265 + 266: 14(int8_t) Load 206(i8) + 267: 199(i8vec3) Load 201(u8v) + 268: 203(i8vec3) CompositeConstruct 266 266 266 + 269: 199(i8vec3) ShiftLeftLogical 267 268 + Store 201(u8v) 269 + 271: 37(ptr) AccessChain 201(u8v) 270 + 272: 36(int8_t) Load 271 + 273: 14(int8_t) Load 206(i8) + 274: 14(int8_t) ShiftRightArithmetic 273 272 + Store 206(i8) 274 + 275: 14(int8_t) Load 206(i8) + 277: 37(ptr) AccessChain 201(u8v) 276 + 278: 36(int8_t) Load 277 + 279: 14(int8_t) ShiftLeftLogical 275 278 + Store 206(i8) 279 + 280: 199(i8vec3) Load 201(u8v) + 281: 14(int8_t) Load 206(i8) + 282: 203(i8vec3) CompositeConstruct 281 281 281 + 283: 199(i8vec3) ShiftLeftLogical 280 282 + Store 201(u8v) 283 + 287: 37(ptr) AccessChain 201(u8v) 286 + 288: 36(int8_t) Load 287 + 289: 14(int8_t) Load 206(i8) + 290: 36(int8_t) Bitcast 289 + 291: 171(bool) INotEqual 288 290 + Store 285(b) 291 + 292: 14(int8_t) Load 206(i8) + 293: 36(int8_t) Bitcast 292 + 294: 37(ptr) AccessChain 201(u8v) 286 + 295: 36(int8_t) Load 294 + 296: 171(bool) IEqual 293 295 + Store 285(b) 296 + 297: 37(ptr) AccessChain 201(u8v) 286 + 298: 36(int8_t) Load 297 + 299: 17(int) UConvert 298 + 301: 300(ptr) AccessChain 233(uv) 270 + 302: 17(int) Load 301 + 303: 171(bool) UGreaterThan 299 302 + Store 285(b) 303 + 304: 14(int8_t) Load 206(i8) + 305: 27(int) SConvert 304 + 306: 27(int) Load 226(i) + 307: 171(bool) SLessThan 305 306 + Store 285(b) 307 + 308: 37(ptr) AccessChain 201(u8v) 270 + 309: 36(int8_t) Load 308 + 310: 17(int) UConvert 309 + 311: 300(ptr) AccessChain 233(uv) 286 + 312: 17(int) Load 311 + 313: 171(bool) UGreaterThanEqual 310 312 + Store 285(b) 313 + 314: 14(int8_t) Load 206(i8) + 315: 27(int) SConvert 314 + 316: 27(int) Load 226(i) + 317: 171(bool) SLessThanEqual 315 316 + Store 285(b) 317 + 318: 14(int8_t) Load 206(i8) + 319: 27(int) SConvert 318 + 320: 17(int) Bitcast 319 + 321: 231(ivec3) Load 233(uv) + 322: 231(ivec3) CompositeConstruct 320 320 320 + 323: 231(ivec3) BitwiseOr 321 322 + Store 233(uv) 323 + 324: 14(int8_t) Load 206(i8) + 325: 27(int) SConvert 324 + 326: 27(int) Load 226(i) + 327: 27(int) BitwiseOr 325 326 + Store 226(i) 327 + 328: 14(int8_t) Load 206(i8) + 329: 57(int16_t) SConvert 328 + 330: 57(int16_t) Load 249(i16) + 331: 57(int16_t) BitwiseAnd 330 329 + Store 249(i16) 331 + 332: 199(i8vec3) Load 201(u8v) + 333: 231(ivec3) UConvert 332 + 334: 231(ivec3) Load 233(uv) + 335: 231(ivec3) BitwiseAnd 333 334 + Store 233(uv) 335 + 336: 14(int8_t) Load 206(i8) + 337: 27(int) SConvert 336 + 338: 17(int) Bitcast 337 + 339: 231(ivec3) Load 233(uv) + 340: 231(ivec3) CompositeConstruct 338 338 338 + 341: 231(ivec3) BitwiseXor 339 340 + Store 233(uv) 341 + 342: 199(i8vec3) Load 201(u8v) + 343: 14(int8_t) Load 206(i8) + 344: 36(int8_t) Bitcast 343 + 345: 199(i8vec3) CompositeConstruct 344 344 344 + 346: 199(i8vec3) BitwiseXor 342 345 + Store 201(u8v) 346 + 349: 14(int8_t) Load 206(i8) + 350: 347(ptr) AccessChain 193(arr) 349 + 351: 108(float) Load 350 + Store 348(f) 351 Return FunctionEnd 12(builtinFuncs(): 2 Function None 3 13: Label - 338(i8v): 53(ptr) Variable Function - 341(i8): 15(ptr) Variable Function - 351(u8v): 191(ptr) Variable Function - 353(u8): 37(ptr) Variable Function - 423(i16): 239(ptr) Variable Function - 426(i32): 216(ptr) Variable Function - 429(i8v4): 428(ptr) Variable Function - 433(u16): 432(ptr) Variable Function - 434(u8v2): 50(ptr) Variable Function - 437(u32): 291(ptr) Variable Function - 440(u8v4): 439(ptr) Variable Function - 452(bv): 451(ptr) Variable Function - 339: 52(i8vec2) Load 338(i8v) - 340: 52(i8vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 339 - Store 338(i8v) 340 - 342: 14(int8_t) Load 341(i8) - 343: 14(int8_t) ExtInst 1(GLSL.std.450) 7(SSign) 342 - Store 341(i8) 343 - 344: 52(i8vec2) Load 338(i8v) - 345: 14(int8_t) Load 341(i8) - 346: 52(i8vec2) CompositeConstruct 345 345 - 347: 52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 344 346 - Store 338(i8v) 347 - 348: 52(i8vec2) Load 338(i8v) - 350: 52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 348 349 - Store 338(i8v) 350 - 352: 190(i8vec3) Load 351(u8v) - 354: 36(int8_t) Load 353(u8) - 355: 190(i8vec3) CompositeConstruct 354 354 354 - 356: 190(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 352 355 - Store 351(u8v) 356 - 357: 190(i8vec3) Load 351(u8v) - 359: 190(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 357 358 - Store 351(u8v) 359 - 360: 52(i8vec2) Load 338(i8v) - 361: 14(int8_t) Load 341(i8) - 362: 52(i8vec2) CompositeConstruct 361 361 - 363: 52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 360 362 - Store 338(i8v) 363 - 364: 52(i8vec2) Load 338(i8v) - 365: 52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 364 349 - Store 338(i8v) 365 - 366: 190(i8vec3) Load 351(u8v) - 367: 36(int8_t) Load 353(u8) - 368: 190(i8vec3) CompositeConstruct 367 367 367 - 369: 190(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 366 368 - Store 351(u8v) 369 - 370: 190(i8vec3) Load 351(u8v) - 371: 190(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 370 358 - Store 351(u8v) 371 - 372: 52(i8vec2) Load 338(i8v) - 373: 14(int8_t) Load 341(i8) - 374: 14(int8_t) SNegate 373 - 375: 14(int8_t) Load 341(i8) - 376: 52(i8vec2) CompositeConstruct 374 374 - 377: 52(i8vec2) CompositeConstruct 375 375 - 378: 52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 372 376 377 - Store 338(i8v) 378 - 379: 52(i8vec2) Load 338(i8v) - 380: 52(i8vec2) Load 338(i8v) - 381: 52(i8vec2) SNegate 380 - 382: 52(i8vec2) Load 338(i8v) - 383: 52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 379 381 382 - Store 338(i8v) 383 - 384: 190(i8vec3) Load 351(u8v) - 385: 36(int8_t) Load 353(u8) - 386: 36(int8_t) SNegate 385 - 387: 36(int8_t) Load 353(u8) - 388: 190(i8vec3) CompositeConstruct 386 386 386 - 389: 190(i8vec3) CompositeConstruct 387 387 387 - 390: 190(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 384 388 389 - Store 351(u8v) 390 - 391: 190(i8vec3) Load 351(u8v) - 392: 190(i8vec3) Load 351(u8v) - 393: 190(i8vec3) SNegate 392 - 394: 190(i8vec3) Load 351(u8v) - 395: 190(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 391 393 394 - Store 351(u8v) 395 - 396: 15(ptr) AccessChain 338(i8v) 277 - 397: 14(int8_t) Load 396 - 398: 15(ptr) AccessChain 338(i8v) 261 - 399: 14(int8_t) Load 398 - 401: 14(int8_t) Select 400 399 397 - Store 341(i8) 401 - 402: 14(int8_t) Load 341(i8) - 403: 52(i8vec2) CompositeConstruct 402 402 - 404: 14(int8_t) Load 341(i8) - 405: 14(int8_t) SNegate 404 - 406: 52(i8vec2) CompositeConstruct 405 405 - 409: 52(i8vec2) Select 408 406 403 - Store 338(i8v) 409 - 410: 37(ptr) AccessChain 351(u8v) 277 - 411: 36(int8_t) Load 410 - 412: 37(ptr) AccessChain 351(u8v) 261 - 413: 36(int8_t) Load 412 - 414: 36(int8_t) Select 400 413 411 - Store 353(u8) 414 - 415: 36(int8_t) Load 353(u8) - 416: 190(i8vec3) CompositeConstruct 415 415 415 - 417: 36(int8_t) Load 353(u8) - 418: 36(int8_t) SNegate 417 - 419: 190(i8vec3) CompositeConstruct 418 418 418 - 422: 190(i8vec3) Select 421 419 416 - Store 351(u8v) 422 - 424: 52(i8vec2) Load 338(i8v) - 425: 57(int16_t) Bitcast 424 - Store 423(i16) 425 - 430: 427(i8vec4) Load 429(i8v4) - 431: 27(int) Bitcast 430 - Store 426(i32) 431 - 435: 49(i8vec2) Load 434(u8v2) - 436: 64(int16_t) Bitcast 435 - Store 433(u16) 436 - 441: 438(i8vec4) Load 440(u8v4) - 442: 17(int) Bitcast 441 - Store 437(u32) 442 - 443: 57(int16_t) Load 423(i16) - 444: 52(i8vec2) Bitcast 443 - Store 338(i8v) 444 - 445: 27(int) Load 426(i32) - 446: 427(i8vec4) Bitcast 445 - Store 429(i8v4) 446 - 447: 64(int16_t) Load 433(u16) - 448: 49(i8vec2) Bitcast 447 - Store 434(u8v2) 448 - 449: 17(int) Load 437(u32) - 450: 438(i8vec4) Bitcast 449 - Store 440(u8v4) 450 - 453: 190(i8vec3) Load 351(u8v) - 454: 36(int8_t) Load 353(u8) - 455: 190(i8vec3) CompositeConstruct 454 454 454 - 456: 420(bvec3) ULessThan 453 455 - Store 452(bv) 456 - 457: 52(i8vec2) Load 338(i8v) - 458: 14(int8_t) Load 341(i8) - 459: 52(i8vec2) CompositeConstruct 458 458 - 460: 172(bvec2) SLessThan 457 459 - 461: 275(ptr) AccessChain 452(bv) 277 - 462: 171(bool) CompositeExtract 460 0 - Store 461 462 - 463: 275(ptr) AccessChain 452(bv) 261 - 464: 171(bool) CompositeExtract 460 1 - Store 463 464 - 465: 190(i8vec3) Load 351(u8v) - 466: 36(int8_t) Load 353(u8) - 467: 190(i8vec3) CompositeConstruct 466 466 466 - 468: 420(bvec3) ULessThanEqual 465 467 - Store 452(bv) 468 - 469: 52(i8vec2) Load 338(i8v) - 470: 14(int8_t) Load 341(i8) - 471: 52(i8vec2) CompositeConstruct 470 470 - 472: 172(bvec2) SLessThanEqual 469 471 - 473: 275(ptr) AccessChain 452(bv) 277 - 474: 171(bool) CompositeExtract 472 0 - Store 473 474 - 475: 275(ptr) AccessChain 452(bv) 261 - 476: 171(bool) CompositeExtract 472 1 + 352(i8v): 53(ptr) Variable Function + 355(i8): 15(ptr) Variable Function + 365(u8v): 200(ptr) Variable Function + 367(u8): 37(ptr) Variable Function + 437(i16): 248(ptr) Variable Function + 440(i32): 225(ptr) Variable Function + 443(i8v4): 442(ptr) Variable Function + 447(u16): 446(ptr) Variable Function + 448(u8v2): 50(ptr) Variable Function + 451(u32): 300(ptr) Variable Function + 454(u8v4): 453(ptr) Variable Function + 466(bv): 465(ptr) Variable Function + 353: 52(i8vec2) Load 352(i8v) + 354: 52(i8vec2) ExtInst 1(GLSL.std.450) 5(SAbs) 353 + Store 352(i8v) 354 + 356: 14(int8_t) Load 355(i8) + 357: 14(int8_t) ExtInst 1(GLSL.std.450) 7(SSign) 356 + Store 355(i8) 357 + 358: 52(i8vec2) Load 352(i8v) + 359: 14(int8_t) Load 355(i8) + 360: 52(i8vec2) CompositeConstruct 359 359 + 361: 52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 358 360 + Store 352(i8v) 361 + 362: 52(i8vec2) Load 352(i8v) + 364: 52(i8vec2) ExtInst 1(GLSL.std.450) 39(SMin) 362 363 + Store 352(i8v) 364 + 366: 199(i8vec3) Load 365(u8v) + 368: 36(int8_t) Load 367(u8) + 369: 199(i8vec3) CompositeConstruct 368 368 368 + 370: 199(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 366 369 + Store 365(u8v) 370 + 371: 199(i8vec3) Load 365(u8v) + 373: 199(i8vec3) ExtInst 1(GLSL.std.450) 38(UMin) 371 372 + Store 365(u8v) 373 + 374: 52(i8vec2) Load 352(i8v) + 375: 14(int8_t) Load 355(i8) + 376: 52(i8vec2) CompositeConstruct 375 375 + 377: 52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 374 376 + Store 352(i8v) 377 + 378: 52(i8vec2) Load 352(i8v) + 379: 52(i8vec2) ExtInst 1(GLSL.std.450) 42(SMax) 378 363 + Store 352(i8v) 379 + 380: 199(i8vec3) Load 365(u8v) + 381: 36(int8_t) Load 367(u8) + 382: 199(i8vec3) CompositeConstruct 381 381 381 + 383: 199(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 380 382 + Store 365(u8v) 383 + 384: 199(i8vec3) Load 365(u8v) + 385: 199(i8vec3) ExtInst 1(GLSL.std.450) 41(UMax) 384 372 + Store 365(u8v) 385 + 386: 52(i8vec2) Load 352(i8v) + 387: 14(int8_t) Load 355(i8) + 388: 14(int8_t) SNegate 387 + 389: 14(int8_t) Load 355(i8) + 390: 52(i8vec2) CompositeConstruct 388 388 + 391: 52(i8vec2) CompositeConstruct 389 389 + 392: 52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 386 390 391 + Store 352(i8v) 392 + 393: 52(i8vec2) Load 352(i8v) + 394: 52(i8vec2) Load 352(i8v) + 395: 52(i8vec2) SNegate 394 + 396: 52(i8vec2) Load 352(i8v) + 397: 52(i8vec2) ExtInst 1(GLSL.std.450) 45(SClamp) 393 395 396 + Store 352(i8v) 397 + 398: 199(i8vec3) Load 365(u8v) + 399: 36(int8_t) Load 367(u8) + 400: 36(int8_t) SNegate 399 + 401: 36(int8_t) Load 367(u8) + 402: 199(i8vec3) CompositeConstruct 400 400 400 + 403: 199(i8vec3) CompositeConstruct 401 401 401 + 404: 199(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 398 402 403 + Store 365(u8v) 404 + 405: 199(i8vec3) Load 365(u8v) + 406: 199(i8vec3) Load 365(u8v) + 407: 199(i8vec3) SNegate 406 + 408: 199(i8vec3) Load 365(u8v) + 409: 199(i8vec3) ExtInst 1(GLSL.std.450) 44(UClamp) 405 407 408 + Store 365(u8v) 409 + 410: 15(ptr) AccessChain 352(i8v) 286 + 411: 14(int8_t) Load 410 + 412: 15(ptr) AccessChain 352(i8v) 270 + 413: 14(int8_t) Load 412 + 415: 14(int8_t) Select 414 413 411 + Store 355(i8) 415 + 416: 14(int8_t) Load 355(i8) + 417: 52(i8vec2) CompositeConstruct 416 416 + 418: 14(int8_t) Load 355(i8) + 419: 14(int8_t) SNegate 418 + 420: 52(i8vec2) CompositeConstruct 419 419 + 423: 52(i8vec2) Select 422 420 417 + Store 352(i8v) 423 + 424: 37(ptr) AccessChain 365(u8v) 286 + 425: 36(int8_t) Load 424 + 426: 37(ptr) AccessChain 365(u8v) 270 + 427: 36(int8_t) Load 426 + 428: 36(int8_t) Select 414 427 425 + Store 367(u8) 428 + 429: 36(int8_t) Load 367(u8) + 430: 199(i8vec3) CompositeConstruct 429 429 429 + 431: 36(int8_t) Load 367(u8) + 432: 36(int8_t) SNegate 431 + 433: 199(i8vec3) CompositeConstruct 432 432 432 + 436: 199(i8vec3) Select 435 433 430 + Store 365(u8v) 436 + 438: 52(i8vec2) Load 352(i8v) + 439: 57(int16_t) Bitcast 438 + Store 437(i16) 439 + 444: 441(i8vec4) Load 443(i8v4) + 445: 27(int) Bitcast 444 + Store 440(i32) 445 + 449: 49(i8vec2) Load 448(u8v2) + 450: 64(int16_t) Bitcast 449 + Store 447(u16) 450 + 455: 452(i8vec4) Load 454(u8v4) + 456: 17(int) Bitcast 455 + Store 451(u32) 456 + 457: 57(int16_t) Load 437(i16) + 458: 52(i8vec2) Bitcast 457 + Store 352(i8v) 458 + 459: 27(int) Load 440(i32) + 460: 441(i8vec4) Bitcast 459 + Store 443(i8v4) 460 + 461: 64(int16_t) Load 447(u16) + 462: 49(i8vec2) Bitcast 461 + Store 448(u8v2) 462 + 463: 17(int) Load 451(u32) + 464: 452(i8vec4) Bitcast 463 + Store 454(u8v4) 464 + 467: 199(i8vec3) Load 365(u8v) + 468: 36(int8_t) Load 367(u8) + 469: 199(i8vec3) CompositeConstruct 468 468 468 + 470: 434(bvec3) ULessThan 467 469 + Store 466(bv) 470 + 471: 52(i8vec2) Load 352(i8v) + 472: 14(int8_t) Load 355(i8) + 473: 52(i8vec2) CompositeConstruct 472 472 + 474: 172(bvec2) SLessThan 471 473 + 475: 284(ptr) AccessChain 466(bv) 286 + 476: 171(bool) CompositeExtract 474 0 Store 475 476 - 477: 190(i8vec3) Load 351(u8v) - 478: 36(int8_t) Load 353(u8) - 479: 190(i8vec3) CompositeConstruct 478 478 478 - 480: 420(bvec3) UGreaterThan 477 479 - Store 452(bv) 480 - 481: 52(i8vec2) Load 338(i8v) - 482: 14(int8_t) Load 341(i8) - 483: 52(i8vec2) CompositeConstruct 482 482 - 484: 172(bvec2) SGreaterThan 481 483 - 485: 275(ptr) AccessChain 452(bv) 277 - 486: 171(bool) CompositeExtract 484 0 - Store 485 486 - 487: 275(ptr) AccessChain 452(bv) 261 - 488: 171(bool) CompositeExtract 484 1 + 477: 284(ptr) AccessChain 466(bv) 270 + 478: 171(bool) CompositeExtract 474 1 + Store 477 478 + 479: 199(i8vec3) Load 365(u8v) + 480: 36(int8_t) Load 367(u8) + 481: 199(i8vec3) CompositeConstruct 480 480 480 + 482: 434(bvec3) ULessThanEqual 479 481 + Store 466(bv) 482 + 483: 52(i8vec2) Load 352(i8v) + 484: 14(int8_t) Load 355(i8) + 485: 52(i8vec2) CompositeConstruct 484 484 + 486: 172(bvec2) SLessThanEqual 483 485 + 487: 284(ptr) AccessChain 466(bv) 286 + 488: 171(bool) CompositeExtract 486 0 Store 487 488 - 489: 190(i8vec3) Load 351(u8v) - 490: 36(int8_t) Load 353(u8) - 491: 190(i8vec3) CompositeConstruct 490 490 490 - 492: 420(bvec3) UGreaterThanEqual 489 491 - Store 452(bv) 492 - 493: 52(i8vec2) Load 338(i8v) - 494: 14(int8_t) Load 341(i8) - 495: 52(i8vec2) CompositeConstruct 494 494 - 496: 172(bvec2) SGreaterThanEqual 493 495 - 497: 275(ptr) AccessChain 452(bv) 277 - 498: 171(bool) CompositeExtract 496 0 - Store 497 498 - 499: 275(ptr) AccessChain 452(bv) 261 - 500: 171(bool) CompositeExtract 496 1 + 489: 284(ptr) AccessChain 466(bv) 270 + 490: 171(bool) CompositeExtract 486 1 + Store 489 490 + 491: 199(i8vec3) Load 365(u8v) + 492: 36(int8_t) Load 367(u8) + 493: 199(i8vec3) CompositeConstruct 492 492 492 + 494: 434(bvec3) UGreaterThan 491 493 + Store 466(bv) 494 + 495: 52(i8vec2) Load 352(i8v) + 496: 14(int8_t) Load 355(i8) + 497: 52(i8vec2) CompositeConstruct 496 496 + 498: 172(bvec2) SGreaterThan 495 497 + 499: 284(ptr) AccessChain 466(bv) 286 + 500: 171(bool) CompositeExtract 498 0 Store 499 500 - 501: 190(i8vec3) Load 351(u8v) - 502: 36(int8_t) Load 353(u8) - 503: 190(i8vec3) CompositeConstruct 502 502 502 - 504: 420(bvec3) IEqual 501 503 - Store 452(bv) 504 - 505: 52(i8vec2) Load 338(i8v) - 506: 14(int8_t) Load 341(i8) - 507: 52(i8vec2) CompositeConstruct 506 506 - 508: 172(bvec2) IEqual 505 507 - 509: 275(ptr) AccessChain 452(bv) 277 - 510: 171(bool) CompositeExtract 508 0 - Store 509 510 - 511: 275(ptr) AccessChain 452(bv) 261 - 512: 171(bool) CompositeExtract 508 1 + 501: 284(ptr) AccessChain 466(bv) 270 + 502: 171(bool) CompositeExtract 498 1 + Store 501 502 + 503: 199(i8vec3) Load 365(u8v) + 504: 36(int8_t) Load 367(u8) + 505: 199(i8vec3) CompositeConstruct 504 504 504 + 506: 434(bvec3) UGreaterThanEqual 503 505 + Store 466(bv) 506 + 507: 52(i8vec2) Load 352(i8v) + 508: 14(int8_t) Load 355(i8) + 509: 52(i8vec2) CompositeConstruct 508 508 + 510: 172(bvec2) SGreaterThanEqual 507 509 + 511: 284(ptr) AccessChain 466(bv) 286 + 512: 171(bool) CompositeExtract 510 0 Store 511 512 - 513: 190(i8vec3) Load 351(u8v) - 514: 36(int8_t) Load 353(u8) - 515: 190(i8vec3) CompositeConstruct 514 514 514 - 516: 420(bvec3) INotEqual 513 515 - Store 452(bv) 516 - 517: 52(i8vec2) Load 338(i8v) - 518: 14(int8_t) Load 341(i8) - 519: 52(i8vec2) CompositeConstruct 518 518 - 520: 172(bvec2) INotEqual 517 519 - 521: 275(ptr) AccessChain 452(bv) 277 - 522: 171(bool) CompositeExtract 520 0 - Store 521 522 - 523: 275(ptr) AccessChain 452(bv) 261 - 524: 171(bool) CompositeExtract 520 1 + 513: 284(ptr) AccessChain 466(bv) 270 + 514: 171(bool) CompositeExtract 510 1 + Store 513 514 + 515: 199(i8vec3) Load 365(u8v) + 516: 36(int8_t) Load 367(u8) + 517: 199(i8vec3) CompositeConstruct 516 516 516 + 518: 434(bvec3) IEqual 515 517 + Store 466(bv) 518 + 519: 52(i8vec2) Load 352(i8v) + 520: 14(int8_t) Load 355(i8) + 521: 52(i8vec2) CompositeConstruct 520 520 + 522: 172(bvec2) IEqual 519 521 + 523: 284(ptr) AccessChain 466(bv) 286 + 524: 171(bool) CompositeExtract 522 0 Store 523 524 + 525: 284(ptr) AccessChain 466(bv) 270 + 526: 171(bool) CompositeExtract 522 1 + Store 525 526 + 527: 199(i8vec3) Load 365(u8v) + 528: 36(int8_t) Load 367(u8) + 529: 199(i8vec3) CompositeConstruct 528 528 528 + 530: 434(bvec3) INotEqual 527 529 + Store 466(bv) 530 + 531: 52(i8vec2) Load 352(i8v) + 532: 14(int8_t) Load 355(i8) + 533: 52(i8vec2) CompositeConstruct 532 532 + 534: 172(bvec2) INotEqual 531 533 + 535: 284(ptr) AccessChain 466(bv) 286 + 536: 171(bool) CompositeExtract 534 0 + Store 535 536 + 537: 284(ptr) AccessChain 466(bv) 270 + 538: 171(bool) CompositeExtract 534 1 + Store 537 538 Return FunctionEnd diff --git a/Test/spv.int16.frag b/Test/spv.int16.frag index 2feff4f8dc..26a8c9bda9 100644 --- a/Test/spv.int16.frag +++ b/Test/spv.int16.frag @@ -116,6 +116,8 @@ void operators() int32_t i; int64_t i64; bool b; + float f; + float arr[4] = {1.0, 2.0, 3.0, 4.0}; // Unary u16v++; @@ -163,6 +165,9 @@ void operators() uv = u16v & uv; uv ^= i16; u16v = u16v ^ i16; + + // Index + f = arr[i16]; } void builtinFuncs() diff --git a/Test/spv.int8.frag b/Test/spv.int8.frag index 80702b7598..bd3de17a22 100644 --- a/Test/spv.int8.frag +++ b/Test/spv.int8.frag @@ -117,6 +117,8 @@ void operators() int32_t i; int16_t i16; bool b; + float arr[4] = {1.0, 2.0, 3.0, 4.0}; + float f; // Unary u8v++; @@ -164,6 +166,9 @@ void operators() uv = u8v & uv; uv ^= i8; u8v = u8v ^ i8; + + // Index + f = arr[i8]; } void builtinFuncs() diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index b2b187b4fd..ca374217f2 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -3029,11 +3029,14 @@ void TParseContext::constantValueCheck(TIntermTyped* node, const char* token) // // Both test, and if necessary spit out an error, to see if the node is really -// an integer. +// a 32-bit integer or can implicitly convert to one. // void TParseContext::integerCheck(const TIntermTyped* node, const char* token) { - if ((node->getBasicType() == EbtInt || node->getBasicType() == EbtUint) && node->isScalar()) + auto from_type = node->getBasicType(); + if ((from_type == EbtInt || from_type == EbtUint || + intermediate.canImplicitlyPromote(from_type, EbtInt, EOpNull) || + intermediate.canImplicitlyPromote(from_type, EbtUint, EOpNull)) && node->isScalar()) return; error(node->getLoc(), "scalar integer expression required", token, ""); From c9cc4845b9561784df79491b30552dbc1a6bae07 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Mon, 4 Oct 2021 22:10:00 -0600 Subject: [PATCH 231/365] Return new allocator for copied containers Fix #2760. Implement the optional function select_on_container_copy_contruction to return a default-contructed allocator for containers that are copy-constructed. This gives copy-constructed containers a pool allocator for the current thead. There may be a similar problem with the copy contructor which takes allocators of type "Other" but, in practice, there is only one place where this is being used and the allocators are always the same. (i.e. executing from the same thread) --- glslang/Include/PoolAlloc.h | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glslang/Include/PoolAlloc.h b/glslang/Include/PoolAlloc.h index b8eccb8832..1f5cac76de 100644 --- a/glslang/Include/PoolAlloc.h +++ b/glslang/Include/PoolAlloc.h @@ -306,6 +306,8 @@ class pool_allocator { TPoolAllocator& getAllocator() const { return allocator; } + pool_allocator select_on_container_copy_construction() const { return pool_allocator{}; } + protected: pool_allocator& operator=(const pool_allocator&) { return *this; } TPoolAllocator& allocator; From 432a43cccb562f1761d396b04110df5ae1bdb462 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 27 Oct 2021 11:59:26 -0600 Subject: [PATCH 232/365] Remove support for double trig, pow, exp and log These are not supported in core GLSL or under any extension Fixes 2793 --- Test/baseResults/spv.float64.frag.out | 1418 ++++++++++----------- Test/spv.float64.frag | 28 +- glslang/MachineIndependent/Initialize.cpp | 100 -- 3 files changed, 675 insertions(+), 871 deletions(-) diff --git a/Test/baseResults/spv.float64.frag.out b/Test/baseResults/spv.float64.frag.out index dfcfc2d772..cd5f80d677 100644 --- a/Test/baseResults/spv.float64.frag.out +++ b/Test/baseResults/spv.float64.frag.out @@ -2,7 +2,7 @@ spv.float64.frag Validation failed // Module Version 10300 // Generated by (magic number): 8000a -// Id's are bound by 532 +// Id's are bound by 485 Capability Shader Capability Float16 @@ -14,7 +14,7 @@ Validation failed Capability InterpolationFunction 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 461 + EntryPoint Fragment 4 "main" 414 ExecutionMode 4 OriginUpperLeft Source GLSL 450 SourceExtension "GL_EXT_shader_explicit_arithmetic_types" @@ -29,782 +29,710 @@ Validation failed Name 6 "literal(" Name 8 "operators(" Name 10 "typeCast(" - Name 12 "builtinAngleTrigFuncs(" - Name 14 "builtinExpFuncs(" - Name 16 "builtinCommonFuncs(" - Name 18 "builtinGeometryFuncs(" - Name 20 "builtinMatrixFuncs(" - Name 22 "builtinVecRelFuncs(" - Name 24 "builtinFragProcFuncs(" - Name 29 "f64v" - Name 40 "f64v" - Name 62 "f64m" - Name 85 "f64" - Name 109 "b" - Name 151 "f64v" - Name 154 "bv" - Name 165 "f16v" - Name 173 "i8v" - Name 179 "i16v" - Name 185 "i32v" - Name 191 "i64v" - Name 197 "u8v" - Name 203 "u16v" - Name 208 "u32v" - Name 214 "u64v" - Name 219 "f64v2" - Name 220 "f64v1" - Name 252 "f64v2" - Name 253 "f64v1" - Name 269 "f64v2" - Name 270 "f64v1" - Name 291 "f64" - Name 295 "f64v3" - Name 335 "bv" - Name 356 "b" - Name 366 "iv" - Name 367 "ResType" - Name 374 "f64" - Name 375 "f64v1" - Name 379 "f64v2" - Name 385 "f64v3" - Name 404 "f64m3" - Name 405 "f64m1" - Name 407 "f64m2" - Name 416 "f64v1" - Name 418 "f64v2" - Name 423 "f64m4" - Name 426 "f64" - Name 429 "f64m5" - Name 434 "f64m6" - Name 435 "f64m7" - Name 438 "bv" - Name 439 "f64v1" - Name 441 "f64v2" - Name 459 "f64v" - Name 461 "if64v" - Name 518 "S" - MemberName 518(S) 0 "x" - MemberName 518(S) 1 "y" - MemberName 518(S) 2 "z" - Name 520 "B1" - MemberName 520(B1) 0 "a" - MemberName 520(B1) 1 "b" - MemberName 520(B1) 2 "c" - MemberName 520(B1) 3 "d" - MemberName 520(B1) 4 "e" - MemberName 520(B1) 5 "f" - MemberName 520(B1) 6 "g" - MemberName 520(B1) 7 "h" - Name 522 "" - Name 523 "sf16" - Name 525 "sf" - Name 526 "sd" - Name 527 "f16_to_f" - Name 529 "f16_to_d" - Name 530 "f_to_f16" - Name 531 "d_to_f16" - Decorate 461(if64v) Flat - Decorate 461(if64v) Location 0 - Decorate 516 ArrayStride 16 - Decorate 517 ArrayStride 64 - MemberDecorate 518(S) 0 Offset 0 - MemberDecorate 518(S) 1 Offset 16 - MemberDecorate 518(S) 2 Offset 32 - Decorate 519 ArrayStride 64 - MemberDecorate 520(B1) 0 Offset 0 - MemberDecorate 520(B1) 1 Offset 16 - MemberDecorate 520(B1) 2 Offset 32 - MemberDecorate 520(B1) 3 Offset 64 - MemberDecorate 520(B1) 4 ColMajor - MemberDecorate 520(B1) 4 Offset 96 - MemberDecorate 520(B1) 4 MatrixStride 32 - MemberDecorate 520(B1) 5 ColMajor - MemberDecorate 520(B1) 5 Offset 160 - MemberDecorate 520(B1) 5 MatrixStride 32 - MemberDecorate 520(B1) 6 Offset 288 - MemberDecorate 520(B1) 7 Offset 352 - Decorate 520(B1) Block - Decorate 522 DescriptorSet 0 - Decorate 522 Binding 0 - Decorate 523(sf16) SpecId 100 - Decorate 525(sf) SpecId 101 - Decorate 526(sd) SpecId 102 + Name 12 "builtinTranscendentalFuncs(" + Name 14 "builtinCommonFuncs(" + Name 16 "builtinGeometryFuncs(" + Name 18 "builtinMatrixFuncs(" + Name 20 "builtinVecRelFuncs(" + Name 22 "builtinFragProcFuncs(" + Name 27 "f64v" + Name 38 "f64v" + Name 60 "f64m" + Name 83 "f64" + Name 107 "b" + Name 149 "f64v" + Name 152 "bv" + Name 163 "f16v" + Name 171 "i8v" + Name 177 "i16v" + Name 183 "i32v" + Name 189 "i64v" + Name 195 "u8v" + Name 201 "u16v" + Name 206 "u32v" + Name 212 "u64v" + Name 215 "f64v2" + Name 216 "f64v1" + Name 221 "f64v2" + Name 222 "f64v1" + Name 243 "f64" + Name 247 "f64v3" + Name 287 "bv" + Name 308 "b" + Name 318 "iv" + Name 319 "ResType" + Name 326 "f64" + Name 327 "f64v1" + Name 331 "f64v2" + Name 337 "f64v3" + Name 356 "f64m3" + Name 357 "f64m1" + Name 359 "f64m2" + Name 368 "f64v1" + Name 370 "f64v2" + Name 375 "f64m4" + Name 378 "f64" + Name 381 "f64m5" + Name 387 "f64m6" + Name 388 "f64m7" + Name 391 "bv" + Name 392 "f64v1" + Name 394 "f64v2" + Name 412 "f64v" + Name 414 "if64v" + Name 471 "S" + MemberName 471(S) 0 "x" + MemberName 471(S) 1 "y" + MemberName 471(S) 2 "z" + Name 473 "B1" + MemberName 473(B1) 0 "a" + MemberName 473(B1) 1 "b" + MemberName 473(B1) 2 "c" + MemberName 473(B1) 3 "d" + MemberName 473(B1) 4 "e" + MemberName 473(B1) 5 "f" + MemberName 473(B1) 6 "g" + MemberName 473(B1) 7 "h" + Name 475 "" + Name 476 "sf16" + Name 478 "sf" + Name 479 "sd" + Name 480 "f16_to_f" + Name 482 "f16_to_d" + Name 483 "f_to_f16" + Name 484 "d_to_f16" + Decorate 414(if64v) Flat + Decorate 414(if64v) Location 0 + Decorate 469 ArrayStride 16 + Decorate 470 ArrayStride 64 + MemberDecorate 471(S) 0 Offset 0 + MemberDecorate 471(S) 1 Offset 16 + MemberDecorate 471(S) 2 Offset 32 + Decorate 472 ArrayStride 64 + MemberDecorate 473(B1) 0 Offset 0 + MemberDecorate 473(B1) 1 Offset 16 + MemberDecorate 473(B1) 2 Offset 32 + MemberDecorate 473(B1) 3 Offset 64 + MemberDecorate 473(B1) 4 ColMajor + MemberDecorate 473(B1) 4 Offset 96 + MemberDecorate 473(B1) 4 MatrixStride 32 + MemberDecorate 473(B1) 5 ColMajor + MemberDecorate 473(B1) 5 Offset 160 + MemberDecorate 473(B1) 5 MatrixStride 32 + MemberDecorate 473(B1) 6 Offset 288 + MemberDecorate 473(B1) 7 Offset 352 + Decorate 473(B1) Block + Decorate 475 DescriptorSet 0 + Decorate 475 Binding 0 + Decorate 476(sf16) SpecId 100 + Decorate 478(sf) SpecId 101 + Decorate 479(sd) SpecId 102 2: TypeVoid 3: TypeFunction 2 - 26: TypeFloat 64 - 27: TypeVector 26(float64_t) 2 - 28: TypePointer Function 27(f64vec2) - 30:26(float64_t) Constant 2696277389 1051772663 - 31: TypeInt 32 0 - 32: 31(int) Constant 0 - 33: TypePointer Function 26(float64_t) - 35:26(float64_t) Constant 0 3218079744 - 36:26(float64_t) Constant 3951369912 1067366481 - 37: 27(f64vec2) ConstantComposite 35 36 - 54:26(float64_t) Constant 0 1072693248 - 60: TypeMatrix 27(f64vec2) 2 - 61: TypePointer Function 60 - 88: 31(int) Constant 1 - 107: TypeBool - 108: TypePointer Function 107(bool) - 149: TypeVector 26(float64_t) 3 - 150: TypePointer Function 149(f64vec3) - 152: TypeVector 107(bool) 3 - 153: TypePointer Function 152(bvec3) - 156:26(float64_t) Constant 0 0 - 157:149(f64vec3) ConstantComposite 156 156 156 - 158:149(f64vec3) ConstantComposite 54 54 54 - 162: TypeFloat 16 - 163: TypeVector 162(float16_t) 3 - 164: TypePointer Function 163(f16vec3) - 170: TypeInt 8 1 - 171: TypeVector 170(int8_t) 3 - 172: TypePointer Function 171(i8vec3) - 176: TypeInt 16 1 - 177: TypeVector 176(int16_t) 3 - 178: TypePointer Function 177(i16vec3) - 182: TypeInt 32 1 - 183: TypeVector 182(int) 3 - 184: TypePointer Function 183(ivec3) - 188: TypeInt 64 1 - 189: TypeVector 188(int64_t) 3 - 190: TypePointer Function 189(i64vec3) - 194: TypeInt 8 0 - 195: TypeVector 194(int8_t) 3 - 196: TypePointer Function 195(i8vec3) - 200: TypeInt 16 0 - 201: TypeVector 200(int16_t) 3 - 202: TypePointer Function 201(i16vec3) - 206: TypeVector 31(int) 3 - 207: TypePointer Function 206(ivec3) - 211: TypeInt 64 0 - 212: TypeVector 211(int64_t) 3 - 213: TypePointer Function 212(i64vec3) - 217: TypeVector 26(float64_t) 4 - 218: TypePointer Function 217(f64vec4) - 367(ResType): TypeStruct 149(f64vec3) 183(ivec3) - 402: TypeMatrix 149(f64vec3) 2 - 403: TypePointer Function 402 - 421: TypeMatrix 27(f64vec2) 3 - 422: TypePointer Function 421 - 427: TypeMatrix 149(f64vec3) 3 - 428: TypePointer Function 427 - 432: TypeMatrix 217(f64vec4) 4 - 433: TypePointer Function 432 - 460: TypePointer Input 149(f64vec3) - 461(if64v): 460(ptr) Variable Input - 462: TypePointer Input 26(float64_t) - 505: 182(int) Constant 1 - 512:26(float64_t) Constant 0 1071644672 - 513: 27(f64vec2) ConstantComposite 512 512 - 515: 31(int) Constant 2 - 516: TypeArray 26(float64_t) 515 - 517: TypeArray 402 515 - 518(S): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) - 519: TypeArray 518(S) 515 - 520(B1): TypeStruct 26(float64_t) 27(f64vec2) 149(f64vec3) 516 402 517 518(S) 519 - 521: TypePointer Uniform 520(B1) - 522: 521(ptr) Variable Uniform - 523(sf16):162(float16_t) SpecConstant 12288 - 524: TypeFloat 32 - 525(sf): 524(float) SpecConstant 1048576000 - 526(sd):26(float64_t) SpecConstant 0 1071644672 - 527(f16_to_f): 524(float) SpecConstantOp 115 523(sf16) - 528: 524(float) SpecConstantOp 115 523(sf16) - 529(f16_to_d):26(float64_t) SpecConstantOp 115 528 - 530(f_to_f16):162(float16_t) SpecConstantOp 115 525(sf) - 531(d_to_f16):162(float16_t) SpecConstantOp 115 526(sd) + 24: TypeFloat 64 + 25: TypeVector 24(float64_t) 2 + 26: TypePointer Function 25(f64vec2) + 28:24(float64_t) Constant 2696277389 1051772663 + 29: TypeInt 32 0 + 30: 29(int) Constant 0 + 31: TypePointer Function 24(float64_t) + 33:24(float64_t) Constant 0 3218079744 + 34:24(float64_t) Constant 3951369912 1067366481 + 35: 25(f64vec2) ConstantComposite 33 34 + 52:24(float64_t) Constant 0 1072693248 + 58: TypeMatrix 25(f64vec2) 2 + 59: TypePointer Function 58 + 86: 29(int) Constant 1 + 105: TypeBool + 106: TypePointer Function 105(bool) + 147: TypeVector 24(float64_t) 3 + 148: TypePointer Function 147(f64vec3) + 150: TypeVector 105(bool) 3 + 151: TypePointer Function 150(bvec3) + 154:24(float64_t) Constant 0 0 + 155:147(f64vec3) ConstantComposite 154 154 154 + 156:147(f64vec3) ConstantComposite 52 52 52 + 160: TypeFloat 16 + 161: TypeVector 160(float16_t) 3 + 162: TypePointer Function 161(f16vec3) + 168: TypeInt 8 1 + 169: TypeVector 168(int8_t) 3 + 170: TypePointer Function 169(i8vec3) + 174: TypeInt 16 1 + 175: TypeVector 174(int16_t) 3 + 176: TypePointer Function 175(i16vec3) + 180: TypeInt 32 1 + 181: TypeVector 180(int) 3 + 182: TypePointer Function 181(ivec3) + 186: TypeInt 64 1 + 187: TypeVector 186(int64_t) 3 + 188: TypePointer Function 187(i64vec3) + 192: TypeInt 8 0 + 193: TypeVector 192(int8_t) 3 + 194: TypePointer Function 193(i8vec3) + 198: TypeInt 16 0 + 199: TypeVector 198(int16_t) 3 + 200: TypePointer Function 199(i16vec3) + 204: TypeVector 29(int) 3 + 205: TypePointer Function 204(ivec3) + 209: TypeInt 64 0 + 210: TypeVector 209(int64_t) 3 + 211: TypePointer Function 210(i64vec3) + 319(ResType): TypeStruct 147(f64vec3) 181(ivec3) + 354: TypeMatrix 147(f64vec3) 2 + 355: TypePointer Function 354 + 373: TypeMatrix 25(f64vec2) 3 + 374: TypePointer Function 373 + 379: TypeMatrix 147(f64vec3) 3 + 380: TypePointer Function 379 + 384: TypeVector 24(float64_t) 4 + 385: TypeMatrix 384(f64vec4) 4 + 386: TypePointer Function 385 + 413: TypePointer Input 147(f64vec3) + 414(if64v): 413(ptr) Variable Input + 415: TypePointer Input 24(float64_t) + 458: 180(int) Constant 1 + 465:24(float64_t) Constant 0 1071644672 + 466: 25(f64vec2) ConstantComposite 465 465 + 468: 29(int) Constant 2 + 469: TypeArray 24(float64_t) 468 + 470: TypeArray 354 468 + 471(S): TypeStruct 24(float64_t) 25(f64vec2) 147(f64vec3) + 472: TypeArray 471(S) 468 + 473(B1): TypeStruct 24(float64_t) 25(f64vec2) 147(f64vec3) 469 354 470 471(S) 472 + 474: TypePointer Uniform 473(B1) + 475: 474(ptr) Variable Uniform + 476(sf16):160(float16_t) SpecConstant 12288 + 477: TypeFloat 32 + 478(sf): 477(float) SpecConstant 1048576000 + 479(sd):24(float64_t) SpecConstant 0 1071644672 + 480(f16_to_f): 477(float) SpecConstantOp 115 476(sf16) + 481: 477(float) SpecConstantOp 115 476(sf16) + 482(f16_to_d):24(float64_t) SpecConstantOp 115 481 + 483(f_to_f16):160(float16_t) SpecConstantOp 115 478(sf) + 484(d_to_f16):160(float16_t) SpecConstantOp 115 479(sd) 4(main): 2 Function None 3 5: Label Return FunctionEnd 6(literal(): 2 Function None 3 7: Label - 29(f64v): 28(ptr) Variable Function - 34: 33(ptr) AccessChain 29(f64v) 32 - Store 34 30 - 38: 27(f64vec2) Load 29(f64v) - 39: 27(f64vec2) FAdd 38 37 - Store 29(f64v) 39 + 27(f64v): 26(ptr) Variable Function + 32: 31(ptr) AccessChain 27(f64v) 30 + Store 32 28 + 36: 25(f64vec2) Load 27(f64v) + 37: 25(f64vec2) FAdd 36 35 + Store 27(f64v) 37 Return FunctionEnd 8(operators(): 2 Function None 3 9: Label - 40(f64v): 28(ptr) Variable Function - 62(f64m): 61(ptr) Variable Function - 85(f64): 33(ptr) Variable Function - 109(b): 108(ptr) Variable Function - 41: 27(f64vec2) Load 40(f64v) - 42: 27(f64vec2) Load 40(f64v) - 43: 27(f64vec2) FAdd 42 41 - Store 40(f64v) 43 - 44: 27(f64vec2) Load 40(f64v) - 45: 27(f64vec2) Load 40(f64v) - 46: 27(f64vec2) FSub 45 44 - Store 40(f64v) 46 - 47: 27(f64vec2) Load 40(f64v) - 48: 27(f64vec2) Load 40(f64v) - 49: 27(f64vec2) FMul 48 47 - Store 40(f64v) 49 - 50: 27(f64vec2) Load 40(f64v) - 51: 27(f64vec2) Load 40(f64v) - 52: 27(f64vec2) FDiv 51 50 - Store 40(f64v) 52 - 53: 27(f64vec2) Load 40(f64v) - 55: 27(f64vec2) CompositeConstruct 54 54 - 56: 27(f64vec2) FAdd 53 55 - Store 40(f64v) 56 - 57: 27(f64vec2) Load 40(f64v) - 58: 27(f64vec2) CompositeConstruct 54 54 - 59: 27(f64vec2) FSub 57 58 - Store 40(f64v) 59 - 63: 60 Load 62(f64m) - 64: 27(f64vec2) CompositeConstruct 54 54 - 65: 27(f64vec2) CompositeExtract 63 0 - 66: 27(f64vec2) FAdd 65 64 - 67: 27(f64vec2) CompositeExtract 63 1 - 68: 27(f64vec2) FAdd 67 64 - 69: 60 CompositeConstruct 66 68 - Store 62(f64m) 69 - 70: 60 Load 62(f64m) - 71: 27(f64vec2) CompositeConstruct 54 54 - 72: 27(f64vec2) CompositeExtract 70 0 - 73: 27(f64vec2) FSub 72 71 - 74: 27(f64vec2) CompositeExtract 70 1 - 75: 27(f64vec2) FSub 74 71 - 76: 60 CompositeConstruct 73 75 - Store 62(f64m) 76 - 77: 27(f64vec2) Load 40(f64v) - 78: 27(f64vec2) FNegate 77 - Store 40(f64v) 78 - 79: 60 Load 62(f64m) - 80: 27(f64vec2) CompositeExtract 79 0 - 81: 27(f64vec2) FNegate 80 - 82: 27(f64vec2) CompositeExtract 79 1 - 83: 27(f64vec2) FNegate 82 - 84: 60 CompositeConstruct 81 83 - Store 62(f64m) 84 - 86: 33(ptr) AccessChain 40(f64v) 32 - 87:26(float64_t) Load 86 - 89: 33(ptr) AccessChain 40(f64v) 88 - 90:26(float64_t) Load 89 - 91:26(float64_t) FAdd 87 90 - Store 85(f64) 91 - 92: 33(ptr) AccessChain 40(f64v) 32 - 93:26(float64_t) Load 92 - 94: 33(ptr) AccessChain 40(f64v) 88 - 95:26(float64_t) Load 94 - 96:26(float64_t) FSub 93 95 - Store 85(f64) 96 - 97: 33(ptr) AccessChain 40(f64v) 32 - 98:26(float64_t) Load 97 - 99: 33(ptr) AccessChain 40(f64v) 88 - 100:26(float64_t) Load 99 - 101:26(float64_t) FMul 98 100 - Store 85(f64) 101 - 102: 33(ptr) AccessChain 40(f64v) 32 - 103:26(float64_t) Load 102 - 104: 33(ptr) AccessChain 40(f64v) 88 - 105:26(float64_t) Load 104 - 106:26(float64_t) FDiv 103 105 - Store 85(f64) 106 - 110: 33(ptr) AccessChain 40(f64v) 32 - 111:26(float64_t) Load 110 - 112:26(float64_t) Load 85(f64) - 113: 107(bool) FUnordNotEqual 111 112 - Store 109(b) 113 - 114: 33(ptr) AccessChain 40(f64v) 88 - 115:26(float64_t) Load 114 - 116:26(float64_t) Load 85(f64) - 117: 107(bool) FOrdEqual 115 116 - Store 109(b) 117 - 118: 33(ptr) AccessChain 40(f64v) 32 - 119:26(float64_t) Load 118 - 120:26(float64_t) Load 85(f64) - 121: 107(bool) FOrdGreaterThan 119 120 - Store 109(b) 121 - 122: 33(ptr) AccessChain 40(f64v) 88 - 123:26(float64_t) Load 122 - 124:26(float64_t) Load 85(f64) - 125: 107(bool) FOrdLessThan 123 124 - Store 109(b) 125 - 126: 33(ptr) AccessChain 40(f64v) 32 - 127:26(float64_t) Load 126 - 128:26(float64_t) Load 85(f64) - 129: 107(bool) FOrdGreaterThanEqual 127 128 - Store 109(b) 129 - 130: 33(ptr) AccessChain 40(f64v) 88 - 131:26(float64_t) Load 130 - 132:26(float64_t) Load 85(f64) - 133: 107(bool) FOrdLessThanEqual 131 132 - Store 109(b) 133 - 134: 27(f64vec2) Load 40(f64v) - 135:26(float64_t) Load 85(f64) - 136: 27(f64vec2) VectorTimesScalar 134 135 - Store 40(f64v) 136 - 137: 60 Load 62(f64m) - 138:26(float64_t) Load 85(f64) - 139: 60 MatrixTimesScalar 137 138 - Store 62(f64m) 139 - 140: 60 Load 62(f64m) - 141: 27(f64vec2) Load 40(f64v) - 142: 27(f64vec2) MatrixTimesVector 140 141 - Store 40(f64v) 142 - 143: 27(f64vec2) Load 40(f64v) - 144: 60 Load 62(f64m) - 145: 27(f64vec2) VectorTimesMatrix 143 144 - Store 40(f64v) 145 - 146: 60 Load 62(f64m) - 147: 60 Load 62(f64m) - 148: 60 MatrixTimesMatrix 146 147 - Store 62(f64m) 148 + 38(f64v): 26(ptr) Variable Function + 60(f64m): 59(ptr) Variable Function + 83(f64): 31(ptr) Variable Function + 107(b): 106(ptr) Variable Function + 39: 25(f64vec2) Load 38(f64v) + 40: 25(f64vec2) Load 38(f64v) + 41: 25(f64vec2) FAdd 40 39 + Store 38(f64v) 41 + 42: 25(f64vec2) Load 38(f64v) + 43: 25(f64vec2) Load 38(f64v) + 44: 25(f64vec2) FSub 43 42 + Store 38(f64v) 44 + 45: 25(f64vec2) Load 38(f64v) + 46: 25(f64vec2) Load 38(f64v) + 47: 25(f64vec2) FMul 46 45 + Store 38(f64v) 47 + 48: 25(f64vec2) Load 38(f64v) + 49: 25(f64vec2) Load 38(f64v) + 50: 25(f64vec2) FDiv 49 48 + Store 38(f64v) 50 + 51: 25(f64vec2) Load 38(f64v) + 53: 25(f64vec2) CompositeConstruct 52 52 + 54: 25(f64vec2) FAdd 51 53 + Store 38(f64v) 54 + 55: 25(f64vec2) Load 38(f64v) + 56: 25(f64vec2) CompositeConstruct 52 52 + 57: 25(f64vec2) FSub 55 56 + Store 38(f64v) 57 + 61: 58 Load 60(f64m) + 62: 25(f64vec2) CompositeConstruct 52 52 + 63: 25(f64vec2) CompositeExtract 61 0 + 64: 25(f64vec2) FAdd 63 62 + 65: 25(f64vec2) CompositeExtract 61 1 + 66: 25(f64vec2) FAdd 65 62 + 67: 58 CompositeConstruct 64 66 + Store 60(f64m) 67 + 68: 58 Load 60(f64m) + 69: 25(f64vec2) CompositeConstruct 52 52 + 70: 25(f64vec2) CompositeExtract 68 0 + 71: 25(f64vec2) FSub 70 69 + 72: 25(f64vec2) CompositeExtract 68 1 + 73: 25(f64vec2) FSub 72 69 + 74: 58 CompositeConstruct 71 73 + Store 60(f64m) 74 + 75: 25(f64vec2) Load 38(f64v) + 76: 25(f64vec2) FNegate 75 + Store 38(f64v) 76 + 77: 58 Load 60(f64m) + 78: 25(f64vec2) CompositeExtract 77 0 + 79: 25(f64vec2) FNegate 78 + 80: 25(f64vec2) CompositeExtract 77 1 + 81: 25(f64vec2) FNegate 80 + 82: 58 CompositeConstruct 79 81 + Store 60(f64m) 82 + 84: 31(ptr) AccessChain 38(f64v) 30 + 85:24(float64_t) Load 84 + 87: 31(ptr) AccessChain 38(f64v) 86 + 88:24(float64_t) Load 87 + 89:24(float64_t) FAdd 85 88 + Store 83(f64) 89 + 90: 31(ptr) AccessChain 38(f64v) 30 + 91:24(float64_t) Load 90 + 92: 31(ptr) AccessChain 38(f64v) 86 + 93:24(float64_t) Load 92 + 94:24(float64_t) FSub 91 93 + Store 83(f64) 94 + 95: 31(ptr) AccessChain 38(f64v) 30 + 96:24(float64_t) Load 95 + 97: 31(ptr) AccessChain 38(f64v) 86 + 98:24(float64_t) Load 97 + 99:24(float64_t) FMul 96 98 + Store 83(f64) 99 + 100: 31(ptr) AccessChain 38(f64v) 30 + 101:24(float64_t) Load 100 + 102: 31(ptr) AccessChain 38(f64v) 86 + 103:24(float64_t) Load 102 + 104:24(float64_t) FDiv 101 103 + Store 83(f64) 104 + 108: 31(ptr) AccessChain 38(f64v) 30 + 109:24(float64_t) Load 108 + 110:24(float64_t) Load 83(f64) + 111: 105(bool) FUnordNotEqual 109 110 + Store 107(b) 111 + 112: 31(ptr) AccessChain 38(f64v) 86 + 113:24(float64_t) Load 112 + 114:24(float64_t) Load 83(f64) + 115: 105(bool) FOrdEqual 113 114 + Store 107(b) 115 + 116: 31(ptr) AccessChain 38(f64v) 30 + 117:24(float64_t) Load 116 + 118:24(float64_t) Load 83(f64) + 119: 105(bool) FOrdGreaterThan 117 118 + Store 107(b) 119 + 120: 31(ptr) AccessChain 38(f64v) 86 + 121:24(float64_t) Load 120 + 122:24(float64_t) Load 83(f64) + 123: 105(bool) FOrdLessThan 121 122 + Store 107(b) 123 + 124: 31(ptr) AccessChain 38(f64v) 30 + 125:24(float64_t) Load 124 + 126:24(float64_t) Load 83(f64) + 127: 105(bool) FOrdGreaterThanEqual 125 126 + Store 107(b) 127 + 128: 31(ptr) AccessChain 38(f64v) 86 + 129:24(float64_t) Load 128 + 130:24(float64_t) Load 83(f64) + 131: 105(bool) FOrdLessThanEqual 129 130 + Store 107(b) 131 + 132: 25(f64vec2) Load 38(f64v) + 133:24(float64_t) Load 83(f64) + 134: 25(f64vec2) VectorTimesScalar 132 133 + Store 38(f64v) 134 + 135: 58 Load 60(f64m) + 136:24(float64_t) Load 83(f64) + 137: 58 MatrixTimesScalar 135 136 + Store 60(f64m) 137 + 138: 58 Load 60(f64m) + 139: 25(f64vec2) Load 38(f64v) + 140: 25(f64vec2) MatrixTimesVector 138 139 + Store 38(f64v) 140 + 141: 25(f64vec2) Load 38(f64v) + 142: 58 Load 60(f64m) + 143: 25(f64vec2) VectorTimesMatrix 141 142 + Store 38(f64v) 143 + 144: 58 Load 60(f64m) + 145: 58 Load 60(f64m) + 146: 58 MatrixTimesMatrix 144 145 + Store 60(f64m) 146 Return FunctionEnd 10(typeCast(): 2 Function None 3 11: Label - 151(f64v): 150(ptr) Variable Function - 154(bv): 153(ptr) Variable Function - 165(f16v): 164(ptr) Variable Function - 173(i8v): 172(ptr) Variable Function - 179(i16v): 178(ptr) Variable Function - 185(i32v): 184(ptr) Variable Function - 191(i64v): 190(ptr) Variable Function - 197(u8v): 196(ptr) Variable Function - 203(u16v): 202(ptr) Variable Function - 208(u32v): 207(ptr) Variable Function - 214(u64v): 213(ptr) Variable Function - 155: 152(bvec3) Load 154(bv) - 159:149(f64vec3) Select 155 158 157 - Store 151(f64v) 159 - 160:149(f64vec3) Load 151(f64v) - 161: 152(bvec3) FUnordNotEqual 160 157 - Store 154(bv) 161 - 166:163(f16vec3) Load 165(f16v) - 167:149(f64vec3) FConvert 166 - Store 151(f64v) 167 - 168:149(f64vec3) Load 151(f64v) - 169:163(f16vec3) FConvert 168 - Store 165(f16v) 169 - 174:149(f64vec3) Load 151(f64v) - 175: 171(i8vec3) ConvertFToS 174 - Store 173(i8v) 175 - 180:149(f64vec3) Load 151(f64v) - 181:177(i16vec3) ConvertFToS 180 - Store 179(i16v) 181 - 186:149(f64vec3) Load 151(f64v) - 187: 183(ivec3) ConvertFToS 186 - Store 185(i32v) 187 - 192:149(f64vec3) Load 151(f64v) - 193:189(i64vec3) ConvertFToS 192 - Store 191(i64v) 193 - 198:149(f64vec3) Load 151(f64v) - 199: 195(i8vec3) ConvertFToU 198 - Store 197(u8v) 199 - 204:149(f64vec3) Load 151(f64v) - 205:201(i16vec3) ConvertFToU 204 - Store 203(u16v) 205 - 209:149(f64vec3) Load 151(f64v) - 210: 206(ivec3) ConvertFToU 209 - Store 208(u32v) 210 - 215:149(f64vec3) Load 151(f64v) - 216:212(i64vec3) ConvertFToU 215 - Store 214(u64v) 216 + 149(f64v): 148(ptr) Variable Function + 152(bv): 151(ptr) Variable Function + 163(f16v): 162(ptr) Variable Function + 171(i8v): 170(ptr) Variable Function + 177(i16v): 176(ptr) Variable Function + 183(i32v): 182(ptr) Variable Function + 189(i64v): 188(ptr) Variable Function + 195(u8v): 194(ptr) Variable Function + 201(u16v): 200(ptr) Variable Function + 206(u32v): 205(ptr) Variable Function + 212(u64v): 211(ptr) Variable Function + 153: 150(bvec3) Load 152(bv) + 157:147(f64vec3) Select 153 156 155 + Store 149(f64v) 157 + 158:147(f64vec3) Load 149(f64v) + 159: 150(bvec3) FUnordNotEqual 158 155 + Store 152(bv) 159 + 164:161(f16vec3) Load 163(f16v) + 165:147(f64vec3) FConvert 164 + Store 149(f64v) 165 + 166:147(f64vec3) Load 149(f64v) + 167:161(f16vec3) FConvert 166 + Store 163(f16v) 167 + 172:147(f64vec3) Load 149(f64v) + 173: 169(i8vec3) ConvertFToS 172 + Store 171(i8v) 173 + 178:147(f64vec3) Load 149(f64v) + 179:175(i16vec3) ConvertFToS 178 + Store 177(i16v) 179 + 184:147(f64vec3) Load 149(f64v) + 185: 181(ivec3) ConvertFToS 184 + Store 183(i32v) 185 + 190:147(f64vec3) Load 149(f64v) + 191:187(i64vec3) ConvertFToS 190 + Store 189(i64v) 191 + 196:147(f64vec3) Load 149(f64v) + 197: 193(i8vec3) ConvertFToU 196 + Store 195(u8v) 197 + 202:147(f64vec3) Load 149(f64v) + 203:199(i16vec3) ConvertFToU 202 + Store 201(u16v) 203 + 207:147(f64vec3) Load 149(f64v) + 208: 204(ivec3) ConvertFToU 207 + Store 206(u32v) 208 + 213:147(f64vec3) Load 149(f64v) + 214:210(i64vec3) ConvertFToU 213 + Store 212(u64v) 214 Return FunctionEnd -12(builtinAngleTrigFuncs(): 2 Function None 3 +12(builtinTranscendentalFuncs(): 2 Function None 3 13: Label - 219(f64v2): 218(ptr) Variable Function - 220(f64v1): 218(ptr) Variable Function - 221:217(f64vec4) Load 220(f64v1) - 222:217(f64vec4) ExtInst 1(GLSL.std.450) 11(Radians) 221 - Store 219(f64v2) 222 - 223:217(f64vec4) Load 220(f64v1) - 224:217(f64vec4) ExtInst 1(GLSL.std.450) 12(Degrees) 223 - Store 219(f64v2) 224 - 225:217(f64vec4) Load 220(f64v1) - 226:217(f64vec4) ExtInst 1(GLSL.std.450) 13(Sin) 225 - Store 219(f64v2) 226 - 227:217(f64vec4) Load 220(f64v1) - 228:217(f64vec4) ExtInst 1(GLSL.std.450) 14(Cos) 227 - Store 219(f64v2) 228 - 229:217(f64vec4) Load 220(f64v1) - 230:217(f64vec4) ExtInst 1(GLSL.std.450) 15(Tan) 229 - Store 219(f64v2) 230 - 231:217(f64vec4) Load 220(f64v1) - 232:217(f64vec4) ExtInst 1(GLSL.std.450) 16(Asin) 231 - Store 219(f64v2) 232 - 233:217(f64vec4) Load 220(f64v1) - 234:217(f64vec4) ExtInst 1(GLSL.std.450) 17(Acos) 233 - Store 219(f64v2) 234 - 235:217(f64vec4) Load 220(f64v1) - 236:217(f64vec4) Load 219(f64v2) - 237:217(f64vec4) ExtInst 1(GLSL.std.450) 25(Atan2) 235 236 - Store 219(f64v2) 237 - 238:217(f64vec4) Load 220(f64v1) - 239:217(f64vec4) ExtInst 1(GLSL.std.450) 18(Atan) 238 - Store 219(f64v2) 239 - 240:217(f64vec4) Load 220(f64v1) - 241:217(f64vec4) ExtInst 1(GLSL.std.450) 19(Sinh) 240 - Store 219(f64v2) 241 - 242:217(f64vec4) Load 220(f64v1) - 243:217(f64vec4) ExtInst 1(GLSL.std.450) 20(Cosh) 242 - Store 219(f64v2) 243 - 244:217(f64vec4) Load 220(f64v1) - 245:217(f64vec4) ExtInst 1(GLSL.std.450) 21(Tanh) 244 - Store 219(f64v2) 245 - 246:217(f64vec4) Load 220(f64v1) - 247:217(f64vec4) ExtInst 1(GLSL.std.450) 22(Asinh) 246 - Store 219(f64v2) 247 - 248:217(f64vec4) Load 220(f64v1) - 249:217(f64vec4) ExtInst 1(GLSL.std.450) 23(Acosh) 248 - Store 219(f64v2) 249 - 250:217(f64vec4) Load 220(f64v1) - 251:217(f64vec4) ExtInst 1(GLSL.std.450) 24(Atanh) 250 - Store 219(f64v2) 251 + 215(f64v2): 26(ptr) Variable Function + 216(f64v1): 26(ptr) Variable Function + 217: 25(f64vec2) Load 216(f64v1) + 218: 25(f64vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 217 + Store 215(f64v2) 218 + 219: 25(f64vec2) Load 216(f64v1) + 220: 25(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 219 + Store 215(f64v2) 220 Return FunctionEnd -14(builtinExpFuncs(): 2 Function None 3 +14(builtinCommonFuncs(): 2 Function None 3 15: Label - 252(f64v2): 28(ptr) Variable Function - 253(f64v1): 28(ptr) Variable Function - 254: 27(f64vec2) Load 253(f64v1) - 255: 27(f64vec2) Load 252(f64v2) - 256: 27(f64vec2) ExtInst 1(GLSL.std.450) 26(Pow) 254 255 - Store 252(f64v2) 256 - 257: 27(f64vec2) Load 253(f64v1) - 258: 27(f64vec2) ExtInst 1(GLSL.std.450) 27(Exp) 257 - Store 252(f64v2) 258 - 259: 27(f64vec2) Load 253(f64v1) - 260: 27(f64vec2) ExtInst 1(GLSL.std.450) 28(Log) 259 - Store 252(f64v2) 260 - 261: 27(f64vec2) Load 253(f64v1) - 262: 27(f64vec2) ExtInst 1(GLSL.std.450) 29(Exp2) 261 - Store 252(f64v2) 262 - 263: 27(f64vec2) Load 253(f64v1) - 264: 27(f64vec2) ExtInst 1(GLSL.std.450) 30(Log2) 263 - Store 252(f64v2) 264 - 265: 27(f64vec2) Load 253(f64v1) - 266: 27(f64vec2) ExtInst 1(GLSL.std.450) 31(Sqrt) 265 - Store 252(f64v2) 266 - 267: 27(f64vec2) Load 253(f64v1) - 268: 27(f64vec2) ExtInst 1(GLSL.std.450) 32(InverseSqrt) 267 - Store 252(f64v2) 268 + 221(f64v2): 148(ptr) Variable Function + 222(f64v1): 148(ptr) Variable Function + 243(f64): 31(ptr) Variable Function + 247(f64v3): 148(ptr) Variable Function + 287(bv): 151(ptr) Variable Function + 308(b): 106(ptr) Variable Function + 318(iv): 182(ptr) Variable Function + 223:147(f64vec3) Load 222(f64v1) + 224:147(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 223 + Store 221(f64v2) 224 + 225:147(f64vec3) Load 222(f64v1) + 226:147(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 225 + Store 221(f64v2) 226 + 227:147(f64vec3) Load 222(f64v1) + 228:147(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 227 + Store 221(f64v2) 228 + 229:147(f64vec3) Load 222(f64v1) + 230:147(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 229 + Store 221(f64v2) 230 + 231:147(f64vec3) Load 222(f64v1) + 232:147(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 231 + Store 221(f64v2) 232 + 233:147(f64vec3) Load 222(f64v1) + 234:147(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 233 + Store 221(f64v2) 234 + 235:147(f64vec3) Load 222(f64v1) + 236:147(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 235 + Store 221(f64v2) 236 + 237:147(f64vec3) Load 222(f64v1) + 238:147(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 237 + Store 221(f64v2) 238 + 239:147(f64vec3) Load 222(f64v1) + 240:147(f64vec3) Load 221(f64v2) + 241:147(f64vec3) FMod 239 240 + Store 221(f64v2) 241 + 242:147(f64vec3) Load 222(f64v1) + 244:24(float64_t) Load 243(f64) + 245:147(f64vec3) CompositeConstruct 244 244 244 + 246:147(f64vec3) FMod 242 245 + Store 221(f64v2) 246 + 248:147(f64vec3) Load 222(f64v1) + 249:147(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 248 221(f64v2) + Store 247(f64v3) 249 + 250:147(f64vec3) Load 222(f64v1) + 251:147(f64vec3) Load 221(f64v2) + 252:147(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 250 251 + Store 247(f64v3) 252 + 253:147(f64vec3) Load 222(f64v1) + 254:24(float64_t) Load 243(f64) + 255:147(f64vec3) CompositeConstruct 254 254 254 + 256:147(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 253 255 + Store 247(f64v3) 256 + 257:147(f64vec3) Load 222(f64v1) + 258:147(f64vec3) Load 221(f64v2) + 259:147(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 257 258 + Store 247(f64v3) 259 + 260:147(f64vec3) Load 222(f64v1) + 261:24(float64_t) Load 243(f64) + 262:147(f64vec3) CompositeConstruct 261 261 261 + 263:147(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 260 262 + Store 247(f64v3) 263 + 264:147(f64vec3) Load 222(f64v1) + 265:24(float64_t) Load 243(f64) + 266: 31(ptr) AccessChain 221(f64v2) 30 + 267:24(float64_t) Load 266 + 268:147(f64vec3) CompositeConstruct 265 265 265 + 269:147(f64vec3) CompositeConstruct 267 267 267 + 270:147(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 264 268 269 + Store 247(f64v3) 270 + 271:147(f64vec3) Load 222(f64v1) + 272:147(f64vec3) Load 221(f64v2) + 273:24(float64_t) Load 243(f64) + 274:147(f64vec3) CompositeConstruct 273 273 273 + 275:147(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 271 272 274 + Store 247(f64v3) 275 + 276:147(f64vec3) Load 222(f64v1) + 277:147(f64vec3) Load 221(f64v2) + 278:24(float64_t) Load 243(f64) + 279:147(f64vec3) CompositeConstruct 278 278 278 + 280:147(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 276 277 279 + Store 247(f64v3) 280 + 281:147(f64vec3) Load 222(f64v1) + 282:147(f64vec3) Load 221(f64v2) + 283:147(f64vec3) Load 247(f64v3) + 284:147(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 281 282 283 + Store 247(f64v3) 284 + 285:147(f64vec3) Load 222(f64v1) + 286:147(f64vec3) Load 221(f64v2) + 288: 150(bvec3) Load 287(bv) + 289:147(f64vec3) Select 288 286 285 + Store 247(f64v3) 289 + 290:147(f64vec3) Load 222(f64v1) + 291:147(f64vec3) Load 221(f64v2) + 292:147(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 290 291 + Store 247(f64v3) 292 + 293:24(float64_t) Load 243(f64) + 294:147(f64vec3) Load 247(f64v3) + 295:147(f64vec3) CompositeConstruct 293 293 293 + 296:147(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 295 294 + Store 247(f64v3) 296 + 297:147(f64vec3) Load 222(f64v1) + 298:147(f64vec3) Load 221(f64v2) + 299:147(f64vec3) Load 247(f64v3) + 300:147(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 297 298 299 + Store 247(f64v3) 300 + 301:24(float64_t) Load 243(f64) + 302: 31(ptr) AccessChain 222(f64v1) 30 + 303:24(float64_t) Load 302 + 304:147(f64vec3) Load 221(f64v2) + 305:147(f64vec3) CompositeConstruct 301 301 301 + 306:147(f64vec3) CompositeConstruct 303 303 303 + 307:147(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 305 306 304 + Store 247(f64v3) 307 + 309:24(float64_t) Load 243(f64) + 310: 105(bool) IsNan 309 + Store 308(b) 310 + 311:147(f64vec3) Load 222(f64v1) + 312: 150(bvec3) IsInf 311 + Store 287(bv) 312 + 313:147(f64vec3) Load 222(f64v1) + 314:147(f64vec3) Load 221(f64v2) + 315:147(f64vec3) Load 247(f64v3) + 316:147(f64vec3) ExtInst 1(GLSL.std.450) 50(Fma) 313 314 315 + Store 247(f64v3) 316 + 317:147(f64vec3) Load 222(f64v1) + 320:319(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 317 + 321: 181(ivec3) CompositeExtract 320 1 + Store 318(iv) 321 + 322:147(f64vec3) CompositeExtract 320 0 + Store 221(f64v2) 322 + 323:147(f64vec3) Load 222(f64v1) + 324: 181(ivec3) Load 318(iv) + 325:147(f64vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 323 324 + Store 221(f64v2) 325 Return FunctionEnd -16(builtinCommonFuncs(): 2 Function None 3 +16(builtinGeometryFuncs(): 2 Function None 3 17: Label - 269(f64v2): 150(ptr) Variable Function - 270(f64v1): 150(ptr) Variable Function - 291(f64): 33(ptr) Variable Function - 295(f64v3): 150(ptr) Variable Function - 335(bv): 153(ptr) Variable Function - 356(b): 108(ptr) Variable Function - 366(iv): 184(ptr) Variable Function - 271:149(f64vec3) Load 270(f64v1) - 272:149(f64vec3) ExtInst 1(GLSL.std.450) 4(FAbs) 271 - Store 269(f64v2) 272 - 273:149(f64vec3) Load 270(f64v1) - 274:149(f64vec3) ExtInst 1(GLSL.std.450) 6(FSign) 273 - Store 269(f64v2) 274 - 275:149(f64vec3) Load 270(f64v1) - 276:149(f64vec3) ExtInst 1(GLSL.std.450) 8(Floor) 275 - Store 269(f64v2) 276 - 277:149(f64vec3) Load 270(f64v1) - 278:149(f64vec3) ExtInst 1(GLSL.std.450) 3(Trunc) 277 - Store 269(f64v2) 278 - 279:149(f64vec3) Load 270(f64v1) - 280:149(f64vec3) ExtInst 1(GLSL.std.450) 1(Round) 279 - Store 269(f64v2) 280 - 281:149(f64vec3) Load 270(f64v1) - 282:149(f64vec3) ExtInst 1(GLSL.std.450) 2(RoundEven) 281 - Store 269(f64v2) 282 - 283:149(f64vec3) Load 270(f64v1) - 284:149(f64vec3) ExtInst 1(GLSL.std.450) 9(Ceil) 283 - Store 269(f64v2) 284 - 285:149(f64vec3) Load 270(f64v1) - 286:149(f64vec3) ExtInst 1(GLSL.std.450) 10(Fract) 285 - Store 269(f64v2) 286 - 287:149(f64vec3) Load 270(f64v1) - 288:149(f64vec3) Load 269(f64v2) - 289:149(f64vec3) FMod 287 288 - Store 269(f64v2) 289 - 290:149(f64vec3) Load 270(f64v1) - 292:26(float64_t) Load 291(f64) - 293:149(f64vec3) CompositeConstruct 292 292 292 - 294:149(f64vec3) FMod 290 293 - Store 269(f64v2) 294 - 296:149(f64vec3) Load 270(f64v1) - 297:149(f64vec3) ExtInst 1(GLSL.std.450) 35(Modf) 296 269(f64v2) - Store 295(f64v3) 297 - 298:149(f64vec3) Load 270(f64v1) - 299:149(f64vec3) Load 269(f64v2) - 300:149(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 298 299 - Store 295(f64v3) 300 - 301:149(f64vec3) Load 270(f64v1) - 302:26(float64_t) Load 291(f64) - 303:149(f64vec3) CompositeConstruct 302 302 302 - 304:149(f64vec3) ExtInst 1(GLSL.std.450) 37(FMin) 301 303 - Store 295(f64v3) 304 - 305:149(f64vec3) Load 270(f64v1) - 306:149(f64vec3) Load 269(f64v2) - 307:149(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 305 306 - Store 295(f64v3) 307 - 308:149(f64vec3) Load 270(f64v1) - 309:26(float64_t) Load 291(f64) - 310:149(f64vec3) CompositeConstruct 309 309 309 - 311:149(f64vec3) ExtInst 1(GLSL.std.450) 40(FMax) 308 310 - Store 295(f64v3) 311 - 312:149(f64vec3) Load 270(f64v1) - 313:26(float64_t) Load 291(f64) - 314: 33(ptr) AccessChain 269(f64v2) 32 - 315:26(float64_t) Load 314 - 316:149(f64vec3) CompositeConstruct 313 313 313 - 317:149(f64vec3) CompositeConstruct 315 315 315 - 318:149(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 312 316 317 - Store 295(f64v3) 318 - 319:149(f64vec3) Load 270(f64v1) - 320:149(f64vec3) Load 269(f64v2) - 321:26(float64_t) Load 291(f64) - 322:149(f64vec3) CompositeConstruct 321 321 321 - 323:149(f64vec3) ExtInst 1(GLSL.std.450) 43(FClamp) 319 320 322 - Store 295(f64v3) 323 - 324:149(f64vec3) Load 270(f64v1) - 325:149(f64vec3) Load 269(f64v2) - 326:26(float64_t) Load 291(f64) - 327:149(f64vec3) CompositeConstruct 326 326 326 - 328:149(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 324 325 327 - Store 295(f64v3) 328 - 329:149(f64vec3) Load 270(f64v1) - 330:149(f64vec3) Load 269(f64v2) - 331:149(f64vec3) Load 295(f64v3) - 332:149(f64vec3) ExtInst 1(GLSL.std.450) 46(FMix) 329 330 331 - Store 295(f64v3) 332 - 333:149(f64vec3) Load 270(f64v1) - 334:149(f64vec3) Load 269(f64v2) - 336: 152(bvec3) Load 335(bv) - 337:149(f64vec3) Select 336 334 333 - Store 295(f64v3) 337 - 338:149(f64vec3) Load 270(f64v1) - 339:149(f64vec3) Load 269(f64v2) - 340:149(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 338 339 - Store 295(f64v3) 340 - 341:26(float64_t) Load 291(f64) - 342:149(f64vec3) Load 295(f64v3) - 343:149(f64vec3) CompositeConstruct 341 341 341 - 344:149(f64vec3) ExtInst 1(GLSL.std.450) 48(Step) 343 342 - Store 295(f64v3) 344 - 345:149(f64vec3) Load 270(f64v1) - 346:149(f64vec3) Load 269(f64v2) - 347:149(f64vec3) Load 295(f64v3) - 348:149(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 345 346 347 - Store 295(f64v3) 348 - 349:26(float64_t) Load 291(f64) - 350: 33(ptr) AccessChain 270(f64v1) 32 - 351:26(float64_t) Load 350 - 352:149(f64vec3) Load 269(f64v2) - 353:149(f64vec3) CompositeConstruct 349 349 349 - 354:149(f64vec3) CompositeConstruct 351 351 351 - 355:149(f64vec3) ExtInst 1(GLSL.std.450) 49(SmoothStep) 353 354 352 - Store 295(f64v3) 355 - 357:26(float64_t) Load 291(f64) - 358: 107(bool) IsNan 357 - Store 356(b) 358 - 359:149(f64vec3) Load 270(f64v1) - 360: 152(bvec3) IsInf 359 - Store 335(bv) 360 - 361:149(f64vec3) Load 270(f64v1) - 362:149(f64vec3) Load 269(f64v2) - 363:149(f64vec3) Load 295(f64v3) - 364:149(f64vec3) ExtInst 1(GLSL.std.450) 50(Fma) 361 362 363 - Store 295(f64v3) 364 - 365:149(f64vec3) Load 270(f64v1) - 368:367(ResType) ExtInst 1(GLSL.std.450) 52(FrexpStruct) 365 - 369: 183(ivec3) CompositeExtract 368 1 - Store 366(iv) 369 - 370:149(f64vec3) CompositeExtract 368 0 - Store 269(f64v2) 370 - 371:149(f64vec3) Load 270(f64v1) - 372: 183(ivec3) Load 366(iv) - 373:149(f64vec3) ExtInst 1(GLSL.std.450) 53(Ldexp) 371 372 - Store 269(f64v2) 373 + 326(f64): 31(ptr) Variable Function + 327(f64v1): 148(ptr) Variable Function + 331(f64v2): 148(ptr) Variable Function + 337(f64v3): 148(ptr) Variable Function + 328:147(f64vec3) Load 327(f64v1) + 329:24(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 328 + Store 326(f64) 329 + 330:147(f64vec3) Load 327(f64v1) + 332:147(f64vec3) Load 331(f64v2) + 333:24(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 330 332 + Store 326(f64) 333 + 334:147(f64vec3) Load 327(f64v1) + 335:147(f64vec3) Load 331(f64v2) + 336:24(float64_t) Dot 334 335 + Store 326(f64) 336 + 338:147(f64vec3) Load 327(f64v1) + 339:147(f64vec3) Load 331(f64v2) + 340:147(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 338 339 + Store 337(f64v3) 340 + 341:147(f64vec3) Load 327(f64v1) + 342:147(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 341 + Store 331(f64v2) 342 + 343:147(f64vec3) Load 327(f64v1) + 344:147(f64vec3) Load 331(f64v2) + 345:147(f64vec3) Load 337(f64v3) + 346:147(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 343 344 345 + Store 337(f64v3) 346 + 347:147(f64vec3) Load 327(f64v1) + 348:147(f64vec3) Load 331(f64v2) + 349:147(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 347 348 + Store 337(f64v3) 349 + 350:147(f64vec3) Load 327(f64v1) + 351:147(f64vec3) Load 331(f64v2) + 352:24(float64_t) Load 326(f64) + 353:147(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 350 351 352 + Store 337(f64v3) 353 Return FunctionEnd -18(builtinGeometryFuncs(): 2 Function None 3 +18(builtinMatrixFuncs(): 2 Function None 3 19: Label - 374(f64): 33(ptr) Variable Function - 375(f64v1): 150(ptr) Variable Function - 379(f64v2): 150(ptr) Variable Function - 385(f64v3): 150(ptr) Variable Function - 376:149(f64vec3) Load 375(f64v1) - 377:26(float64_t) ExtInst 1(GLSL.std.450) 66(Length) 376 - Store 374(f64) 377 - 378:149(f64vec3) Load 375(f64v1) - 380:149(f64vec3) Load 379(f64v2) - 381:26(float64_t) ExtInst 1(GLSL.std.450) 67(Distance) 378 380 - Store 374(f64) 381 - 382:149(f64vec3) Load 375(f64v1) - 383:149(f64vec3) Load 379(f64v2) - 384:26(float64_t) Dot 382 383 - Store 374(f64) 384 - 386:149(f64vec3) Load 375(f64v1) - 387:149(f64vec3) Load 379(f64v2) - 388:149(f64vec3) ExtInst 1(GLSL.std.450) 68(Cross) 386 387 - Store 385(f64v3) 388 - 389:149(f64vec3) Load 375(f64v1) - 390:149(f64vec3) ExtInst 1(GLSL.std.450) 69(Normalize) 389 - Store 379(f64v2) 390 - 391:149(f64vec3) Load 375(f64v1) - 392:149(f64vec3) Load 379(f64v2) - 393:149(f64vec3) Load 385(f64v3) - 394:149(f64vec3) ExtInst 1(GLSL.std.450) 70(FaceForward) 391 392 393 - Store 385(f64v3) 394 - 395:149(f64vec3) Load 375(f64v1) - 396:149(f64vec3) Load 379(f64v2) - 397:149(f64vec3) ExtInst 1(GLSL.std.450) 71(Reflect) 395 396 - Store 385(f64v3) 397 - 398:149(f64vec3) Load 375(f64v1) - 399:149(f64vec3) Load 379(f64v2) - 400:26(float64_t) Load 374(f64) - 401:149(f64vec3) ExtInst 1(GLSL.std.450) 72(Refract) 398 399 400 - Store 385(f64v3) 401 + 356(f64m3): 355(ptr) Variable Function + 357(f64m1): 355(ptr) Variable Function + 359(f64m2): 355(ptr) Variable Function + 368(f64v1): 148(ptr) Variable Function + 370(f64v2): 26(ptr) Variable Function + 375(f64m4): 374(ptr) Variable Function + 378(f64): 31(ptr) Variable Function + 381(f64m5): 380(ptr) Variable Function + 387(f64m6): 386(ptr) Variable Function + 388(f64m7): 386(ptr) Variable Function + 358: 354 Load 357(f64m1) + 360: 354 Load 359(f64m2) + 361:147(f64vec3) CompositeExtract 358 0 + 362:147(f64vec3) CompositeExtract 360 0 + 363:147(f64vec3) FMul 361 362 + 364:147(f64vec3) CompositeExtract 358 1 + 365:147(f64vec3) CompositeExtract 360 1 + 366:147(f64vec3) FMul 364 365 + 367: 354 CompositeConstruct 363 366 + Store 356(f64m3) 367 + 369:147(f64vec3) Load 368(f64v1) + 371: 25(f64vec2) Load 370(f64v2) + 372: 354 OuterProduct 369 371 + Store 357(f64m1) 372 + 376: 354 Load 357(f64m1) + 377: 373 Transpose 376 + Store 375(f64m4) 377 + 382: 379 Load 381(f64m5) + 383:24(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 382 + Store 378(f64) 383 + 389: 385 Load 388(f64m7) + 390: 385 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 389 + Store 387(f64m6) 390 Return FunctionEnd -20(builtinMatrixFuncs(): 2 Function None 3 +20(builtinVecRelFuncs(): 2 Function None 3 21: Label - 404(f64m3): 403(ptr) Variable Function - 405(f64m1): 403(ptr) Variable Function - 407(f64m2): 403(ptr) Variable Function - 416(f64v1): 150(ptr) Variable Function - 418(f64v2): 28(ptr) Variable Function - 423(f64m4): 422(ptr) Variable Function - 426(f64): 33(ptr) Variable Function - 429(f64m5): 428(ptr) Variable Function - 434(f64m6): 433(ptr) Variable Function - 435(f64m7): 433(ptr) Variable Function - 406: 402 Load 405(f64m1) - 408: 402 Load 407(f64m2) - 409:149(f64vec3) CompositeExtract 406 0 - 410:149(f64vec3) CompositeExtract 408 0 - 411:149(f64vec3) FMul 409 410 - 412:149(f64vec3) CompositeExtract 406 1 - 413:149(f64vec3) CompositeExtract 408 1 - 414:149(f64vec3) FMul 412 413 - 415: 402 CompositeConstruct 411 414 - Store 404(f64m3) 415 - 417:149(f64vec3) Load 416(f64v1) - 419: 27(f64vec2) Load 418(f64v2) - 420: 402 OuterProduct 417 419 - Store 405(f64m1) 420 - 424: 402 Load 405(f64m1) - 425: 421 Transpose 424 - Store 423(f64m4) 425 - 430: 427 Load 429(f64m5) - 431:26(float64_t) ExtInst 1(GLSL.std.450) 33(Determinant) 430 - Store 426(f64) 431 - 436: 432 Load 435(f64m7) - 437: 432 ExtInst 1(GLSL.std.450) 34(MatrixInverse) 436 - Store 434(f64m6) 437 + 391(bv): 151(ptr) Variable Function + 392(f64v1): 148(ptr) Variable Function + 394(f64v2): 148(ptr) Variable Function + 393:147(f64vec3) Load 392(f64v1) + 395:147(f64vec3) Load 394(f64v2) + 396: 150(bvec3) FOrdLessThan 393 395 + Store 391(bv) 396 + 397:147(f64vec3) Load 392(f64v1) + 398:147(f64vec3) Load 394(f64v2) + 399: 150(bvec3) FOrdLessThanEqual 397 398 + Store 391(bv) 399 + 400:147(f64vec3) Load 392(f64v1) + 401:147(f64vec3) Load 394(f64v2) + 402: 150(bvec3) FOrdGreaterThan 400 401 + Store 391(bv) 402 + 403:147(f64vec3) Load 392(f64v1) + 404:147(f64vec3) Load 394(f64v2) + 405: 150(bvec3) FOrdGreaterThanEqual 403 404 + Store 391(bv) 405 + 406:147(f64vec3) Load 392(f64v1) + 407:147(f64vec3) Load 394(f64v2) + 408: 150(bvec3) FOrdEqual 406 407 + Store 391(bv) 408 + 409:147(f64vec3) Load 392(f64v1) + 410:147(f64vec3) Load 394(f64v2) + 411: 150(bvec3) FUnordNotEqual 409 410 + Store 391(bv) 411 Return FunctionEnd -22(builtinVecRelFuncs(): 2 Function None 3 +22(builtinFragProcFuncs(): 2 Function None 3 23: Label - 438(bv): 153(ptr) Variable Function - 439(f64v1): 150(ptr) Variable Function - 441(f64v2): 150(ptr) Variable Function - 440:149(f64vec3) Load 439(f64v1) - 442:149(f64vec3) Load 441(f64v2) - 443: 152(bvec3) FOrdLessThan 440 442 - Store 438(bv) 443 - 444:149(f64vec3) Load 439(f64v1) - 445:149(f64vec3) Load 441(f64v2) - 446: 152(bvec3) FOrdLessThanEqual 444 445 - Store 438(bv) 446 - 447:149(f64vec3) Load 439(f64v1) - 448:149(f64vec3) Load 441(f64v2) - 449: 152(bvec3) FOrdGreaterThan 447 448 - Store 438(bv) 449 - 450:149(f64vec3) Load 439(f64v1) - 451:149(f64vec3) Load 441(f64v2) - 452: 152(bvec3) FOrdGreaterThanEqual 450 451 - Store 438(bv) 452 - 453:149(f64vec3) Load 439(f64v1) - 454:149(f64vec3) Load 441(f64v2) - 455: 152(bvec3) FOrdEqual 453 454 - Store 438(bv) 455 - 456:149(f64vec3) Load 439(f64v1) - 457:149(f64vec3) Load 441(f64v2) - 458: 152(bvec3) FUnordNotEqual 456 457 - Store 438(bv) 458 - Return - FunctionEnd -24(builtinFragProcFuncs(): 2 Function None 3 - 25: Label - 459(f64v): 150(ptr) Variable Function - 463: 462(ptr) AccessChain 461(if64v) 32 - 464:26(float64_t) Load 463 - 465:26(float64_t) DPdx 464 - 466: 33(ptr) AccessChain 459(f64v) 32 - Store 466 465 - 467: 462(ptr) AccessChain 461(if64v) 88 - 468:26(float64_t) Load 467 - 469:26(float64_t) DPdy 468 - 470: 33(ptr) AccessChain 459(f64v) 88 - Store 470 469 - 471:149(f64vec3) Load 461(if64v) - 472: 27(f64vec2) VectorShuffle 471 471 0 1 - 473: 27(f64vec2) DPdxFine 472 - 474: 33(ptr) AccessChain 459(f64v) 32 - 475:26(float64_t) CompositeExtract 473 0 - Store 474 475 - 476: 33(ptr) AccessChain 459(f64v) 88 - 477:26(float64_t) CompositeExtract 473 1 - Store 476 477 - 478:149(f64vec3) Load 461(if64v) - 479: 27(f64vec2) VectorShuffle 478 478 0 1 - 480: 27(f64vec2) DPdyFine 479 - 481: 33(ptr) AccessChain 459(f64v) 32 - 482:26(float64_t) CompositeExtract 480 0 - Store 481 482 - 483: 33(ptr) AccessChain 459(f64v) 88 - 484:26(float64_t) CompositeExtract 480 1 - Store 483 484 - 485:149(f64vec3) Load 461(if64v) - 486:149(f64vec3) DPdxCoarse 485 - Store 459(f64v) 486 - 487:149(f64vec3) Load 461(if64v) - 488:149(f64vec3) DPdxCoarse 487 - Store 459(f64v) 488 - 489: 462(ptr) AccessChain 461(if64v) 32 - 490:26(float64_t) Load 489 - 491:26(float64_t) Fwidth 490 - 492: 33(ptr) AccessChain 459(f64v) 32 - Store 492 491 - 493:149(f64vec3) Load 461(if64v) - 494: 27(f64vec2) VectorShuffle 493 493 0 1 - 495: 27(f64vec2) FwidthFine 494 - 496: 33(ptr) AccessChain 459(f64v) 32 - 497:26(float64_t) CompositeExtract 495 0 - Store 496 497 - 498: 33(ptr) AccessChain 459(f64v) 88 - 499:26(float64_t) CompositeExtract 495 1 - Store 498 499 - 500:149(f64vec3) Load 461(if64v) - 501:149(f64vec3) FwidthCoarse 500 - Store 459(f64v) 501 - 502: 462(ptr) AccessChain 461(if64v) 32 - 503:26(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 502 - 504: 33(ptr) AccessChain 459(f64v) 32 - Store 504 503 - 506:149(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 461(if64v) 505 - 507: 27(f64vec2) VectorShuffle 506 506 0 1 - 508: 33(ptr) AccessChain 459(f64v) 32 - 509:26(float64_t) CompositeExtract 507 0 - Store 508 509 - 510: 33(ptr) AccessChain 459(f64v) 88 - 511:26(float64_t) CompositeExtract 507 1 - Store 510 511 - 514:149(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 461(if64v) 513 - Store 459(f64v) 514 + 412(f64v): 148(ptr) Variable Function + 416: 415(ptr) AccessChain 414(if64v) 30 + 417:24(float64_t) Load 416 + 418:24(float64_t) DPdx 417 + 419: 31(ptr) AccessChain 412(f64v) 30 + Store 419 418 + 420: 415(ptr) AccessChain 414(if64v) 86 + 421:24(float64_t) Load 420 + 422:24(float64_t) DPdy 421 + 423: 31(ptr) AccessChain 412(f64v) 86 + Store 423 422 + 424:147(f64vec3) Load 414(if64v) + 425: 25(f64vec2) VectorShuffle 424 424 0 1 + 426: 25(f64vec2) DPdxFine 425 + 427: 31(ptr) AccessChain 412(f64v) 30 + 428:24(float64_t) CompositeExtract 426 0 + Store 427 428 + 429: 31(ptr) AccessChain 412(f64v) 86 + 430:24(float64_t) CompositeExtract 426 1 + Store 429 430 + 431:147(f64vec3) Load 414(if64v) + 432: 25(f64vec2) VectorShuffle 431 431 0 1 + 433: 25(f64vec2) DPdyFine 432 + 434: 31(ptr) AccessChain 412(f64v) 30 + 435:24(float64_t) CompositeExtract 433 0 + Store 434 435 + 436: 31(ptr) AccessChain 412(f64v) 86 + 437:24(float64_t) CompositeExtract 433 1 + Store 436 437 + 438:147(f64vec3) Load 414(if64v) + 439:147(f64vec3) DPdxCoarse 438 + Store 412(f64v) 439 + 440:147(f64vec3) Load 414(if64v) + 441:147(f64vec3) DPdxCoarse 440 + Store 412(f64v) 441 + 442: 415(ptr) AccessChain 414(if64v) 30 + 443:24(float64_t) Load 442 + 444:24(float64_t) Fwidth 443 + 445: 31(ptr) AccessChain 412(f64v) 30 + Store 445 444 + 446:147(f64vec3) Load 414(if64v) + 447: 25(f64vec2) VectorShuffle 446 446 0 1 + 448: 25(f64vec2) FwidthFine 447 + 449: 31(ptr) AccessChain 412(f64v) 30 + 450:24(float64_t) CompositeExtract 448 0 + Store 449 450 + 451: 31(ptr) AccessChain 412(f64v) 86 + 452:24(float64_t) CompositeExtract 448 1 + Store 451 452 + 453:147(f64vec3) Load 414(if64v) + 454:147(f64vec3) FwidthCoarse 453 + Store 412(f64v) 454 + 455: 415(ptr) AccessChain 414(if64v) 30 + 456:24(float64_t) ExtInst 1(GLSL.std.450) 76(InterpolateAtCentroid) 455 + 457: 31(ptr) AccessChain 412(f64v) 30 + Store 457 456 + 459:147(f64vec3) ExtInst 1(GLSL.std.450) 77(InterpolateAtSample) 414(if64v) 458 + 460: 25(f64vec2) VectorShuffle 459 459 0 1 + 461: 31(ptr) AccessChain 412(f64v) 30 + 462:24(float64_t) CompositeExtract 460 0 + Store 461 462 + 463: 31(ptr) AccessChain 412(f64v) 86 + 464:24(float64_t) CompositeExtract 460 1 + Store 463 464 + 467:147(f64vec3) ExtInst 1(GLSL.std.450) 78(InterpolateAtOffset) 414(if64v) 466 + Store 412(f64v) 467 Return FunctionEnd diff --git a/Test/spv.float64.frag b/Test/spv.float64.frag index faaac23667..6e9f22dfd1 100644 --- a/Test/spv.float64.frag +++ b/Test/spv.float64.frag @@ -127,36 +127,12 @@ void typeCast() u64v = u64vec3(f64v); // float64 -> uint64 } -void builtinAngleTrigFuncs() -{ - f64vec4 f64v1, f64v2; - - f64v2 = radians(f64v1); - f64v2 = degrees(f64v1); - f64v2 = sin(f64v1); - f64v2 = cos(f64v1); - f64v2 = tan(f64v1); - f64v2 = asin(f64v1); - f64v2 = acos(f64v1); - f64v2 = atan(f64v1, f64v2); - f64v2 = atan(f64v1); - f64v2 = sinh(f64v1); - f64v2 = cosh(f64v1); - f64v2 = tanh(f64v1); - f64v2 = asinh(f64v1); - f64v2 = acosh(f64v1); - f64v2 = atanh(f64v1); -} +// Trig, pow, exp and log are not supported for f64 -void builtinExpFuncs() +void builtinTranscendentalFuncs() { f64vec2 f64v1, f64v2; - f64v2 = pow(f64v1, f64v2); - f64v2 = exp(f64v1); - f64v2 = log(f64v1); - f64v2 = exp2(f64v1); - f64v2 = log2(f64v1); f64v2 = sqrt(f64v1); f64v2 = inversesqrt(f64v1); } diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index b633331ae9..728cd4a641 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -4159,106 +4159,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "u16vec4 unpack16(uint64_t);" "i32vec2 unpack32(int64_t);" "u32vec2 unpack32(uint64_t);" - - "float64_t radians(float64_t);" - "f64vec2 radians(f64vec2);" - "f64vec3 radians(f64vec3);" - "f64vec4 radians(f64vec4);" - - "float64_t degrees(float64_t);" - "f64vec2 degrees(f64vec2);" - "f64vec3 degrees(f64vec3);" - "f64vec4 degrees(f64vec4);" - - "float64_t sin(float64_t);" - "f64vec2 sin(f64vec2);" - "f64vec3 sin(f64vec3);" - "f64vec4 sin(f64vec4);" - - "float64_t cos(float64_t);" - "f64vec2 cos(f64vec2);" - "f64vec3 cos(f64vec3);" - "f64vec4 cos(f64vec4);" - - "float64_t tan(float64_t);" - "f64vec2 tan(f64vec2);" - "f64vec3 tan(f64vec3);" - "f64vec4 tan(f64vec4);" - - "float64_t asin(float64_t);" - "f64vec2 asin(f64vec2);" - "f64vec3 asin(f64vec3);" - "f64vec4 asin(f64vec4);" - - "float64_t acos(float64_t);" - "f64vec2 acos(f64vec2);" - "f64vec3 acos(f64vec3);" - "f64vec4 acos(f64vec4);" - - "float64_t atan(float64_t, float64_t);" - "f64vec2 atan(f64vec2, f64vec2);" - "f64vec3 atan(f64vec3, f64vec3);" - "f64vec4 atan(f64vec4, f64vec4);" - - "float64_t atan(float64_t);" - "f64vec2 atan(f64vec2);" - "f64vec3 atan(f64vec3);" - "f64vec4 atan(f64vec4);" - - "float64_t sinh(float64_t);" - "f64vec2 sinh(f64vec2);" - "f64vec3 sinh(f64vec3);" - "f64vec4 sinh(f64vec4);" - - "float64_t cosh(float64_t);" - "f64vec2 cosh(f64vec2);" - "f64vec3 cosh(f64vec3);" - "f64vec4 cosh(f64vec4);" - - "float64_t tanh(float64_t);" - "f64vec2 tanh(f64vec2);" - "f64vec3 tanh(f64vec3);" - "f64vec4 tanh(f64vec4);" - - "float64_t asinh(float64_t);" - "f64vec2 asinh(f64vec2);" - "f64vec3 asinh(f64vec3);" - "f64vec4 asinh(f64vec4);" - - "float64_t acosh(float64_t);" - "f64vec2 acosh(f64vec2);" - "f64vec3 acosh(f64vec3);" - "f64vec4 acosh(f64vec4);" - - "float64_t atanh(float64_t);" - "f64vec2 atanh(f64vec2);" - "f64vec3 atanh(f64vec3);" - "f64vec4 atanh(f64vec4);" - - "float64_t pow(float64_t, float64_t);" - "f64vec2 pow(f64vec2, f64vec2);" - "f64vec3 pow(f64vec3, f64vec3);" - "f64vec4 pow(f64vec4, f64vec4);" - - "float64_t exp(float64_t);" - "f64vec2 exp(f64vec2);" - "f64vec3 exp(f64vec3);" - "f64vec4 exp(f64vec4);" - - "float64_t log(float64_t);" - "f64vec2 log(f64vec2);" - "f64vec3 log(f64vec3);" - "f64vec4 log(f64vec4);" - - "float64_t exp2(float64_t);" - "f64vec2 exp2(f64vec2);" - "f64vec3 exp2(f64vec3);" - "f64vec4 exp2(f64vec4);" - - "float64_t log2(float64_t);" - "f64vec2 log2(f64vec2);" - "f64vec3 log2(f64vec3);" - "f64vec4 log2(f64vec4);" "\n"); } From 1de2d1745b1a99fb57a0a75714bfa08acd841427 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Thu, 29 Jul 2021 10:01:40 +0800 Subject: [PATCH 233/365] To be compatible with Feature: 'last case/default label not followed by statements'. Signed-off-by: ZhiqianXia --- glslang/MachineIndependent/ParseHelper.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index c2b9edcf69..a7a9de244b 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -9188,11 +9188,14 @@ TIntermNode* TParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expre // "it is an error to have no statement between a label and the end of the switch statement." // The specifications were updated to remove this (being ill-defined what a "statement" was), // so, this became a warning. However, 3.0 tests still check for the error. - if (isEsProfile() && version <= 300 && ! relaxedErrors()) + if (isEsProfile() && (version <= 300 || version >= 320) && ! relaxedErrors()) + error(loc, "last case/default label not followed by statements", "switch", ""); + else if (!isEsProfile() && (version <= 430 || version >= 460)) error(loc, "last case/default label not followed by statements", "switch", ""); else warn(loc, "last case/default label not followed by statements", "switch", ""); + // emulate a break for error recovery lastStatements = intermediate.makeAggregate(intermediate.addBranch(EOpBreak, loc)); lastStatements->setOperator(EOpSequence); From e76116982a45f8d2793d42c2d06bd0b37eb56928 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Mon, 2 Aug 2021 11:10:33 +0800 Subject: [PATCH 234/365] Add the GL_EXT_shader_integer_mix Preamble for glsl. Signed-off-by: ZhiqianXia --- Test/GL_EXT_shader_integer_mix.vert | 13 +++++ .../GL_EXT_shader_integer_mix.vert.out | 47 +++++++++++++++++++ glslang/MachineIndependent/Versions.cpp | 1 + gtests/AST.FromFile.cpp | 3 +- 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 Test/GL_EXT_shader_integer_mix.vert create mode 100644 Test/baseResults/GL_EXT_shader_integer_mix.vert.out diff --git a/Test/GL_EXT_shader_integer_mix.vert b/Test/GL_EXT_shader_integer_mix.vert new file mode 100644 index 0000000000..3616e58c00 --- /dev/null +++ b/Test/GL_EXT_shader_integer_mix.vert @@ -0,0 +1,13 @@ +#version 330 +#extension GL_EXT_shader_integer_mix: require + + +#if !defined GL_EXT_shader_integer_mix +# error GL_EXT_shader_integer_mix is not defined +#elif GL_EXT_shader_integer_mix != 1 +# error GL_EXT_shader_integer_mix is not equal to 1 +#endif + +void main(void) { + gl_Position = vec4(0); +} diff --git a/Test/baseResults/GL_EXT_shader_integer_mix.vert.out b/Test/baseResults/GL_EXT_shader_integer_mix.vert.out new file mode 100644 index 0000000000..4a62b579fb --- /dev/null +++ b/Test/baseResults/GL_EXT_shader_integer_mix.vert.out @@ -0,0 +1,47 @@ +GL_EXT_shader_integer_mix.vert +Shader version: 330 +Requested GL_EXT_shader_integer_mix +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:12 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:12 Constant: +0:12 0 (const uint) +0:12 Constant: +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:? Linker Objects +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 330 +Requested GL_EXT_shader_integer_mix +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:12 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:12 Constant: +0:12 0 (const uint) +0:12 Constant: +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:12 0.000000 +0:? Linker Objects +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 097ee84552..70a5d5e4e7 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -482,6 +482,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_debug_printf 1\n" "#define GL_EXT_fragment_shading_rate 1\n" "#define GL_EXT_shared_memory_block 1\n" + "#define GL_EXT_shader_integer_mix 1\n" // GL_KHR_shader_subgroup "#define GL_KHR_shader_subgroup_basic 1\n" diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 6e7a659e8c..0db9754189 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -284,7 +284,8 @@ INSTANTIATE_TEST_SUITE_P( "textureoffset_sampler2darrayshadow.vert", "atomicAdd.comp", "GL_ARB_gpu_shader5.u2i.vert", - "atomicCounterARBOps.vert" + "atomicCounterARBOps.vert", + "GL_EXT_shader_integer_mix.vert" })), FileNameAsCustomTestSuffix ); From 855f4961701415f41dfc9049263af655f5558963 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Fri, 5 Nov 2021 14:33:31 -0400 Subject: [PATCH 235/365] Update SPIRV-Tools and SPIRV-Headers --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index e1c2ce81b8..bed5dd8021 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "1fbed83c8aab8517d821fcb4164c08567951938f" + "commit" : "339d4475c1a806c187c57678af26733575d1cecd" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "449bc986ba6f4c5e10e32828783f9daef2a77644" + "commit" : "29817199b7069bac971e5365d180295d4b077ebe" } ] } From 8092870281ee79e3383a2849764a6ca583bb5816 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Fri, 5 Nov 2021 14:33:46 -0400 Subject: [PATCH 236/365] Update test expectations --- Test/baseResults/spv.1.4.OpEntryPoint.frag.out | 1 + Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out | 1 + 2 files changed, 2 insertions(+) diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out index cf5d98a0a5..2c6e6dcccb 100644 --- a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out +++ b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out @@ -1,4 +1,5 @@ spv.1.4.OpEntryPoint.frag +Validation failed // Module Version 10400 // Generated by (magic number): 8000a // Id's are bound by 64 diff --git a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out index af4ac16736..68ad949bc9 100644 --- a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out +++ b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out @@ -1,4 +1,5 @@ spv.intrinsicsSpirvLiteral.vert +Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 12 From 46d3a30bd9b68a30929d7ff1587f1c38f55a04c8 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Mon, 2 Aug 2021 14:52:11 +0800 Subject: [PATCH 237/365] Support the #extension GL_ARB_draw_instanced. Signed-off-by: ZhiqianXia --- Test/GL_ARB_draw_instanced.vert | 18 ++ .../GL_ARB_draw_instanced.vert.out | 189 ++++++++++++++++++ glslang/MachineIndependent/Versions.cpp | 2 + glslang/MachineIndependent/Versions.h | 1 + gtests/AST.FromFile.cpp | 3 +- 5 files changed, 212 insertions(+), 1 deletion(-) create mode 100644 Test/GL_ARB_draw_instanced.vert create mode 100644 Test/baseResults/GL_ARB_draw_instanced.vert.out diff --git a/Test/GL_ARB_draw_instanced.vert b/Test/GL_ARB_draw_instanced.vert new file mode 100644 index 0000000000..6e39086694 --- /dev/null +++ b/Test/GL_ARB_draw_instanced.vert @@ -0,0 +1,18 @@ +#version 150 +#extension GL_ARB_draw_instanced : require +#define ID gl_InstanceID + +uniform mat4 gtf_ModelViewProjectionMatrix; +uniform vec3 instanceOffsets[3]; +in vec4 va[gl_MaxVertexAttribs]; +out vec4 color; + +void main (void) +{ + vec4 vertex = vec4(va[0].xy / 3.0, va[0].zw) + vec4(instanceOffsets[ID], 1.0); + color = vec4(0, 0, 0, 0); + for (int i = 1; i < gl_MaxVertexAttribs; i++) + color += va[i]; + gl_Position = gtf_ModelViewProjectionMatrix * vertex; + gl_PointSize = 1.0; +} diff --git a/Test/baseResults/GL_ARB_draw_instanced.vert.out b/Test/baseResults/GL_ARB_draw_instanced.vert.out new file mode 100644 index 0000000000..e601bc86bd --- /dev/null +++ b/Test/baseResults/GL_ARB_draw_instanced.vert.out @@ -0,0 +1,189 @@ +GL_ARB_draw_instanced.vert +Shader version: 150 +Requested GL_ARB_draw_instanced +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'vertex' ( temp 4-component vector of float) +0:12 add ( temp 4-component vector of float) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 divide ( temp 2-component vector of float) +0:12 vector swizzle ( temp 2-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'va' ( in 64-element array of 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 Sequence +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 3.000000 +0:12 vector swizzle ( temp 2-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'va' ( in 64-element array of 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 Sequence +0:12 Constant: +0:12 2 (const int) +0:12 Constant: +0:12 3 (const int) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 indirect index ( temp 3-component vector of float) +0:12 'instanceOffsets' ( uniform 3-element array of 3-component vector of float) +0:12 'gl_InstanceID' ( gl_InstanceId int InstanceId) +0:12 Constant: +0:12 1.000000 +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'color' ( smooth out 4-component vector of float) +0:13 Constant: +0:13 0.000000 +0:13 0.000000 +0:13 0.000000 +0:13 0.000000 +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'i' ( temp int) +0:14 Constant: +0:14 1 (const int) +0:14 Loop with condition tested first +0:14 Loop Condition +0:14 Compare Less Than ( temp bool) +0:14 'i' ( temp int) +0:14 Constant: +0:14 64 (const int) +0:14 Loop Body +0:15 add second child into first child ( temp 4-component vector of float) +0:15 'color' ( smooth out 4-component vector of float) +0:15 indirect index ( temp 4-component vector of float) +0:15 'va' ( in 64-element array of 4-component vector of float) +0:15 'i' ( temp int) +0:14 Loop Terminal Expression +0:14 Post-Increment ( temp int) +0:14 'i' ( temp int) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 matrix-times-vector ( temp 4-component vector of float) +0:16 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:16 'vertex' ( temp 4-component vector of float) +0:17 move second child to first child ( temp float) +0:17 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:17 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:17 Constant: +0:17 1 (const uint) +0:17 Constant: +0:17 1.000000 +0:? Linker Objects +0:? 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:? 'instanceOffsets' ( uniform 3-element array of 3-component vector of float) +0:? 'va' ( in 64-element array of 4-component vector of float) +0:? 'color' ( smooth out 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 150 +Requested GL_ARB_draw_instanced +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'vertex' ( temp 4-component vector of float) +0:12 add ( temp 4-component vector of float) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 divide ( temp 2-component vector of float) +0:12 vector swizzle ( temp 2-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'va' ( in 64-element array of 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 Sequence +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 Constant: +0:12 3.000000 +0:12 vector swizzle ( temp 2-component vector of float) +0:12 direct index ( temp 4-component vector of float) +0:12 'va' ( in 64-element array of 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:12 Sequence +0:12 Constant: +0:12 2 (const int) +0:12 Constant: +0:12 3 (const int) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 indirect index ( temp 3-component vector of float) +0:12 'instanceOffsets' ( uniform 3-element array of 3-component vector of float) +0:12 'gl_InstanceID' ( gl_InstanceId int InstanceId) +0:12 Constant: +0:12 1.000000 +0:13 move second child to first child ( temp 4-component vector of float) +0:13 'color' ( smooth out 4-component vector of float) +0:13 Constant: +0:13 0.000000 +0:13 0.000000 +0:13 0.000000 +0:13 0.000000 +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp int) +0:14 'i' ( temp int) +0:14 Constant: +0:14 1 (const int) +0:14 Loop with condition tested first +0:14 Loop Condition +0:14 Compare Less Than ( temp bool) +0:14 'i' ( temp int) +0:14 Constant: +0:14 64 (const int) +0:14 Loop Body +0:15 add second child into first child ( temp 4-component vector of float) +0:15 'color' ( smooth out 4-component vector of float) +0:15 indirect index ( temp 4-component vector of float) +0:15 'va' ( in 64-element array of 4-component vector of float) +0:15 'i' ( temp int) +0:14 Loop Terminal Expression +0:14 Post-Increment ( temp int) +0:14 'i' ( temp int) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 matrix-times-vector ( temp 4-component vector of float) +0:16 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:16 'vertex' ( temp 4-component vector of float) +0:17 move second child to first child ( temp float) +0:17 gl_PointSize: direct index for structure ( gl_PointSize float PointSize) +0:17 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:17 Constant: +0:17 1 (const uint) +0:17 Constant: +0:17 1.000000 +0:? Linker Objects +0:? 'gtf_ModelViewProjectionMatrix' ( uniform 4X4 matrix of float) +0:? 'instanceOffsets' ( uniform 3-element array of 3-component vector of float) +0:? 'va' ( in 64-element array of 4-component vector of float) +0:? 'color' ( smooth out 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 70a5d5e4e7..2fc0d9e0fa 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -225,6 +225,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_shading_language_packing] = EBhDisable; extensionBehavior[E_GL_ARB_texture_query_lod] = EBhDisable; extensionBehavior[E_GL_ARB_vertex_attrib_64bit] = EBhDisable; + extensionBehavior[E_GL_ARB_draw_instanced] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_basic] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_vote] = EBhDisable; @@ -465,6 +466,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_ARB_shader_storage_buffer_object 1\n" "#define GL_ARB_texture_query_lod 1\n" "#define GL_ARB_vertex_attrib_64bit 1\n" + "#define GL_ARB_draw_instanced 1\n" "#define GL_EXT_shader_non_constant_global_initializers 1\n" "#define GL_EXT_shader_image_load_formatted 1\n" "#define GL_EXT_post_depth_coverage 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 949a7a1739..2dbac0b443 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -161,6 +161,7 @@ const char* const E_GL_ARB_shader_storage_buffer_object = "GL_ARB_shader_storage const char* const E_GL_ARB_shading_language_packing = "GL_ARB_shading_language_packing"; const char* const E_GL_ARB_texture_query_lod = "GL_ARB_texture_query_lod"; const char* const E_GL_ARB_vertex_attrib_64bit = "GL_ARB_vertex_attrib_64bit"; +const char* const E_GL_ARB_draw_instanced = "GL_ARB_draw_instanced"; 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"; diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 0db9754189..f9680dd63d 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -285,7 +285,8 @@ INSTANTIATE_TEST_SUITE_P( "atomicAdd.comp", "GL_ARB_gpu_shader5.u2i.vert", "atomicCounterARBOps.vert", - "GL_EXT_shader_integer_mix.vert" + "GL_EXT_shader_integer_mix.vert", + "GL_ARB_draw_instanced.vert", })), FileNameAsCustomTestSuffix ); From 5ec47530b7c3251cbfcd48bc1f711b75564fb7c7 Mon Sep 17 00:00:00 2001 From: Lynne Date: Mon, 8 Nov 2021 10:48:38 +0100 Subject: [PATCH 238/365] Add support for targeting Vulkan 1.2 in the C API --- glslang/CInterface/glslang_c_interface.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 2e04f53ace..4fdeff7a64 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -269,6 +269,8 @@ static glslang::EShTargetClientVersion c_shader_client_version(glslang_target_cl switch (client_version) { case GLSLANG_TARGET_VULKAN_1_1: return glslang::EShTargetVulkan_1_1; + case GLSLANG_TARGET_VULKAN_1_2: + return glslang::EShTargetVulkan_1_2; case GLSLANG_TARGET_OPENGL_450: return glslang::EShTargetOpenGL_450; default: From 78ce7e567fce86d611353c5a9194833a54a6fbe0 Mon Sep 17 00:00:00 2001 From: Marius Hillenbrand Date: Tue, 19 Oct 2021 18:09:52 +0200 Subject: [PATCH 239/365] Fix encoding/decoding of string literals for big-endian systems Per SPIR-V spec, a string literal's UTF-8 octets are encoded packed into words with little-endian convention. Explicitly perform that encoding instead of assuming that the host system is little-endian. Note that this change requires corresponding fixes in SPIRV-Tools. Fixes #202 --- SPIRV/SPVRemapper.cpp | 18 +++++++++++------ SPIRV/disassemble.cpp | 47 ++++++++++++++++++++++++++++--------------- SPIRV/spvIR.h | 22 +++++++++----------- 3 files changed, 52 insertions(+), 35 deletions(-) diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index 56d6d5d4a5..fdfbeb90cd 100644 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -297,15 +297,21 @@ namespace spv { std::string spirvbin_t::literalString(unsigned word) const { std::string literal; + const spirword_t * pos = spv.data() + word; literal.reserve(16); - const char* bytes = reinterpret_cast(spv.data() + word); - - while (bytes && *bytes) - literal += *bytes++; - - return literal; + do { + spirword_t word = *pos; + for (int i = 0; i < 4; i++) { + char c = word & 0xff; + if (c == '\0') + return literal; + literal += c; + word >>= 8; + } + pos++; + } while (true); } void spirvbin_t::applyMap() diff --git a/SPIRV/disassemble.cpp b/SPIRV/disassemble.cpp index 73c988c5b3..74dd605409 100644 --- a/SPIRV/disassemble.cpp +++ b/SPIRV/disassemble.cpp @@ -43,6 +43,7 @@ #include #include #include +#include #include "disassemble.h" #include "doc.h" @@ -100,6 +101,7 @@ class SpirvStream { void outputMask(OperandClass operandClass, unsigned mask); void disassembleImmediates(int numOperands); void disassembleIds(int numOperands); + std::pair decodeString(); int disassembleString(); void disassembleInstruction(Id resultId, Id typeId, Op opCode, int numOperands); @@ -290,31 +292,44 @@ void SpirvStream::disassembleIds(int numOperands) } } -// return the number of operands consumed by the string -int SpirvStream::disassembleString() +// decode string from words at current position (non-consuming) +std::pair SpirvStream::decodeString() { - int startWord = word; - - out << " \""; - - const char* wordString; + std::string res; + int wordPos = word; + char c; bool done = false; + do { - unsigned int content = stream[word]; - wordString = (const char*)&content; + unsigned int content = stream[wordPos]; for (int charCount = 0; charCount < 4; ++charCount) { - if (*wordString == 0) { + c = content & 0xff; + content >>= 8; + if (c == '\0') { done = true; break; } - out << *(wordString++); + res += c; } - ++word; - } while (! done); + ++wordPos; + } while(! done); + + return std::make_pair(wordPos - word, res); +} + +// return the number of operands consumed by the string +int SpirvStream::disassembleString() +{ + out << " \""; + std::pair decoderes = decodeString(); + + out << decoderes.second; out << "\""; - return word - startWord; + word += decoderes.first; + + return decoderes.first; } void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands) @@ -331,7 +346,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, nextNestedControl = 0; } } else if (opCode == OpExtInstImport) { - idDescriptor[resultId] = (const char*)(&stream[word]); + idDescriptor[resultId] = decodeString().second; } else { if (resultId != 0 && idDescriptor[resultId].size() == 0) { @@ -428,7 +443,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, --numOperands; // Get names for printing "(XXX)" for readability, *after* this id if (opCode == OpName) - idDescriptor[stream[word - 1]] = (const char*)(&stream[word]); + idDescriptor[stream[word - 1]] = decodeString().second; break; case OperandVariableIds: disassembleIds(numOperands); diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index 486e80d000..5249a5ba73 100644 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -111,27 +111,23 @@ class Instruction { void addStringOperand(const char* str) { - unsigned int word; - char* wordString = (char*)&word; - char* wordPtr = wordString; - int charCount = 0; + unsigned int word = 0; + unsigned int shiftAmount = 0; char c; + do { c = *(str++); - *(wordPtr++) = c; - ++charCount; - if (charCount == 4) { + word |= ((unsigned int)c) << shiftAmount; + shiftAmount += 8; + if (shiftAmount == 32) { addImmediateOperand(word); - wordPtr = wordString; - charCount = 0; + word = 0; + shiftAmount = 0; } } while (c != 0); // deal with partial last word - if (charCount > 0) { - // pad with 0s - for (; charCount < 4; ++charCount) - *(wordPtr++) = 0; + if (shiftAmount > 0) { addImmediateOperand(word); } } From 3971424207e27a662d4416eedfb68e18ff287350 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Mon, 8 Nov 2021 14:47:32 +0100 Subject: [PATCH 240/365] Initialize global mutex in a thread-safe manner Currently, ShInitialize() and friends call glslang::InitGlobalLock() which *overwrites* the global mutex. As such, even though it ostensibly takes a mutex, this function is actually completely thread-unsafe. Fix it by using pthread_once to ensure the mutex is only initialized once, and then never again. --- glslang/OSDependent/Unix/ossource.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/glslang/OSDependent/Unix/ossource.cpp b/glslang/OSDependent/Unix/ossource.cpp index 3f029f0239..81da99c2c4 100644 --- a/glslang/OSDependent/Unix/ossource.cpp +++ b/glslang/OSDependent/Unix/ossource.cpp @@ -172,7 +172,7 @@ namespace { pthread_mutex_t gMutex; } -void InitGlobalLock() +static void InitMutex(void) { pthread_mutexattr_t mutexattr; pthread_mutexattr_init(&mutexattr); @@ -180,6 +180,12 @@ void InitGlobalLock() pthread_mutex_init(&gMutex, &mutexattr); } +void InitGlobalLock() +{ + static pthread_once_t once = PTHREAD_ONCE_INIT; + pthread_once(&once, InitMutex); +} + void GetGlobalLock() { pthread_mutex_lock(&gMutex); From 4302d51868daa94e81d3002073e9265397b2e444 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Mon, 8 Nov 2021 14:58:50 +0100 Subject: [PATCH 241/365] Don't release global mutex before initialize/finalize is done Otherwise this can race with other threads for access to the fields it's supposed to be initializing/finalizing. For example, imagine another thread is calling ShInitialize() while the first thread is calling ShFinalize() - the finalize function would destroy the state at the same time as the initialize function is trying to initialize it. Holding on to the global lock for the entire function prevents all of these failure modes. --- glslang/MachineIndependent/ShaderLang.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index d02eae6fcc..a2dd71cfd6 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1343,7 +1343,6 @@ int ShInitialize() glslang::GetGlobalLock(); ++NumberOfClients; - glslang::ReleaseGlobalLock(); if (PerProcessGPA == nullptr) PerProcessGPA = new TPoolAllocator(); @@ -1353,6 +1352,7 @@ int ShInitialize() glslang::HlslScanContext::fillInKeywordMap(); #endif + glslang::ReleaseGlobalLock(); return 1; } @@ -1415,9 +1415,10 @@ int ShFinalize() --NumberOfClients; assert(NumberOfClients >= 0); bool finalize = NumberOfClients == 0; - glslang::ReleaseGlobalLock(); - if (! finalize) + if (! finalize) { + glslang::ReleaseGlobalLock(); return 1; + } for (int version = 0; version < VersionCount; ++version) { for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) { @@ -1455,6 +1456,7 @@ int ShFinalize() glslang::HlslScanContext::deleteKeywordMap(); #endif + glslang::ReleaseGlobalLock(); return 1; } From 13fd2d6470352b052ba1401b48f55d48c1e73a8e Mon Sep 17 00:00:00 2001 From: Kevin McCullough Date: Wed, 13 Oct 2021 15:28:45 -0700 Subject: [PATCH 242/365] Fix incorrect link time validation for unused gl_PerVertex members --- .../link.redeclareBuiltin.vert.out | 154 ++++++++++++++++++ Test/link.redeclareBuiltin.geom | 23 +++ Test/link.redeclareBuiltin.vert | 11 ++ glslang/Include/Types.h | 12 +- glslang/MachineIndependent/linkValidate.cpp | 18 +- gtests/Link.FromFile.cpp | 1 + 6 files changed, 214 insertions(+), 5 deletions(-) create mode 100644 Test/baseResults/link.redeclareBuiltin.vert.out create mode 100644 Test/link.redeclareBuiltin.geom create mode 100644 Test/link.redeclareBuiltin.vert diff --git a/Test/baseResults/link.redeclareBuiltin.vert.out b/Test/baseResults/link.redeclareBuiltin.vert.out new file mode 100644 index 0000000000..2cd42b9e79 --- /dev/null +++ b/Test/baseResults/link.redeclareBuiltin.vert.out @@ -0,0 +1,154 @@ +link.redeclareBuiltin.vert +Shader version: 410 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:10 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position}) +0:10 Constant: +0:10 0 (const uint) +0:10 Constant: +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:? Linker Objects +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +link.redeclareBuiltin.geom +Shader version: 410 +invocations = -1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:13 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:13 direct index ( temp block{ in 4-component vector of float Position gl_Position}) +0:13 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position}) +0:13 Constant: +0:13 0 (const int) +0:13 Constant: +0:13 0 (const int) +0:14 EmitVertex ( global void) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:16 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:16 direct index ( temp block{ in 4-component vector of float Position gl_Position}) +0:16 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position}) +0:16 Constant: +0:16 1 (const int) +0:16 Constant: +0:16 0 (const int) +0:17 EmitVertex ( global void) +0:19 move second child to first child ( temp 4-component vector of float) +0:19 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:19 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:19 Constant: +0:19 0 (const uint) +0:19 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:19 direct index ( temp block{ in 4-component vector of float Position gl_Position}) +0:19 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position}) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 0 (const int) +0:20 EmitVertex ( global void) +0:22 EndPrimitive ( global void) +0:? Linker Objects +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Shader version: 410 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:10 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position}) +0:10 Constant: +0:10 0 (const uint) +0:10 Constant: +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:? Linker Objects +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 410 +invocations = 1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:13 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:13 direct index ( temp block{ in 4-component vector of float Position gl_Position}) +0:13 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position}) +0:13 Constant: +0:13 0 (const int) +0:13 Constant: +0:13 0 (const int) +0:14 EmitVertex ( global void) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:16 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:16 direct index ( temp block{ in 4-component vector of float Position gl_Position}) +0:16 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position}) +0:16 Constant: +0:16 1 (const int) +0:16 Constant: +0:16 0 (const int) +0:17 EmitVertex ( global void) +0:19 move second child to first child ( temp 4-component vector of float) +0:19 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:19 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) +0:19 Constant: +0:19 0 (const uint) +0:19 gl_Position: direct index for structure ( in 4-component vector of float Position) +0:19 direct index ( temp block{ in 4-component vector of float Position gl_Position}) +0:19 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position}) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 0 (const int) +0:20 EmitVertex ( global void) +0:22 EndPrimitive ( global void) +0:? Linker Objects +0:? 'gl_in' ( in 3-element array of block{ in 4-component vector of float Position gl_Position}) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) + diff --git a/Test/link.redeclareBuiltin.geom b/Test/link.redeclareBuiltin.geom new file mode 100644 index 0000000000..a2ceff683a --- /dev/null +++ b/Test/link.redeclareBuiltin.geom @@ -0,0 +1,23 @@ +#version 410 + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; + +in gl_PerVertex +{ + vec4 gl_Position; +} gl_in[]; + +void main() +{ + gl_Position = gl_in[0].gl_Position; + EmitVertex(); + + gl_Position = gl_in[1].gl_Position; + EmitVertex(); + + gl_Position = gl_in[2].gl_Position; + EmitVertex(); + + EndPrimitive(); +} \ No newline at end of file diff --git a/Test/link.redeclareBuiltin.vert b/Test/link.redeclareBuiltin.vert new file mode 100644 index 0000000000..7cda45c40f --- /dev/null +++ b/Test/link.redeclareBuiltin.vert @@ -0,0 +1,11 @@ +#version 410 + +out gl_PerVertex +{ + vec4 gl_Position; +}; + +void main() +{ + gl_Position = vec4(1.0); +} \ No newline at end of file diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index f4f3f341d1..e87f2583f2 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -2469,6 +2469,14 @@ class TType { if (*(*structure)[li].type != *(*right.structure)[ri].type) return false; } else { + // Skip hidden members + if ((*structure)[li].type->hiddenMember()) { + ri--; + continue; + } else if ((*right.structure)[ri].type->hiddenMember()) { + li--; + continue; + } // If one of the members is something that's inconsistently declared, skip over it // for now. if (isGLPerVertex) { @@ -2485,10 +2493,10 @@ class TType { } // If we get here, then there should only be inconsistently declared members left } else if (li < structure->size()) { - if (!isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) + if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) return false; } else { - if (!isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) + if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) return false; } } diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 4edd2a9052..c4335212a6 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -858,9 +858,19 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy if (symbol.getType().getBasicType() == EbtBlock && unitSymbol.getType().getBasicType() == EbtBlock && symbol.getType().getStruct() && unitSymbol.getType().getStruct() && symbol.getType().sameStructType(unitSymbol.getType())) { - for (unsigned int i = 0; i < symbol.getType().getStruct()->size(); ++i) { - const TQualifier& qualifier = (*symbol.getType().getStruct())[i].type->getQualifier(); - const TQualifier& unitQualifier = (*unitSymbol.getType().getStruct())[i].type->getQualifier(); + unsigned int li = 0; + unsigned int ri = 0; + while (li < symbol.getType().getStruct()->size() && ri < unitSymbol.getType().getStruct()->size()) { + if ((*symbol.getType().getStruct())[li].type->hiddenMember()) { + ++li; + continue; + } + if ((*unitSymbol.getType().getStruct())[ri].type->hiddenMember()) { + ++ri; + continue; + } + const TQualifier& qualifier = (*symbol.getType().getStruct())[li].type->getQualifier(); + const TQualifier & unitQualifier = (*unitSymbol.getType().getStruct())[ri].type->getQualifier(); if (qualifier.layoutMatrix != unitQualifier.layoutMatrix || qualifier.layoutOffset != unitQualifier.layoutOffset || qualifier.layoutAlign != unitQualifier.layoutAlign || @@ -869,6 +879,8 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy error(infoSink, "Interface block member layout qualifiers must match:"); writeTypeComparison = true; } + ++li; + ++ri; } } diff --git a/gtests/Link.FromFile.cpp b/gtests/Link.FromFile.cpp index a83d49d917..9e029fc7b2 100644 --- a/gtests/Link.FromFile.cpp +++ b/gtests/Link.FromFile.cpp @@ -108,6 +108,7 @@ INSTANTIATE_TEST_SUITE_P( {"link.multiBlocksValid.1.0.vert", "link.multiBlocksValid.1.1.vert"}, {"link.tesselation.vert", "link.tesselation.frag"}, {"link.tesselation.tese", "link.tesselation.tesc"}, + {"link.redeclareBuiltin.vert", "link.redeclareBuiltin.geom"}, })) ); // clang-format on From d1ee644e1d8f25c6dba8c00e4839b2c0380e9949 Mon Sep 17 00:00:00 2001 From: Marius Hillenbrand Date: Tue, 9 Nov 2021 16:31:22 +0100 Subject: [PATCH 243/365] Use intermOut.cpp's IsNan and IsInfinity for parse-time constant folding There were two implementations of isInf() and isNan(), in Constant.cpp and in intermOut.cpp. The former only works on little-endian systems, the latter is a wrapper for library functions and works regardless of endianness. Move the second version into Common.h and adopt it in both places. Thereby avoid the duplication and fix for big-endian systems. On s390x, this fixes the test case Glsl/CompileToAstTest.FromFile/constFold_frag. Fixes #2802 --- glslang/Include/Common.h | 29 +++++++++++++++++++++ glslang/MachineIndependent/Constant.cpp | 33 ++---------------------- glslang/MachineIndependent/intermOut.cpp | 31 ---------------------- 3 files changed, 31 insertions(+), 62 deletions(-) diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index e7b5e072b3..a24977f8d8 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -39,6 +39,7 @@ #include #include +#include #include #include #include @@ -302,6 +303,34 @@ template int IntLog2(T n) return result; } +inline bool IsInfinity(double x) { +#ifdef _MSC_VER + switch (_fpclass(x)) { + case _FPCLASS_NINF: + case _FPCLASS_PINF: + return true; + default: + return false; + } +#else + return std::isinf(x); +#endif +} + +inline bool IsNan(double x) { +#ifdef _MSC_VER + switch (_fpclass(x)) { + case _FPCLASS_SNAN: + case _FPCLASS_QNAN: + return true; + default: + return false; + } +#else + return std::isnan(x); +#endif +} + } // end namespace glslang #endif // _COMMON_INCLUDED_ diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 7f5d4c4f24..5fc61dbb79 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -46,35 +46,6 @@ namespace { using namespace glslang; -typedef union { - double d; - int i[2]; -} DoubleIntUnion; - -// Some helper functions - -bool isNan(double x) -{ - DoubleIntUnion u; - // tough to find a platform independent library function, do it directly - u.d = x; - int bitPatternL = u.i[0]; - int bitPatternH = u.i[1]; - return (bitPatternH & 0x7ff80000) == 0x7ff80000 && - ((bitPatternH & 0xFFFFF) != 0 || bitPatternL != 0); -} - -bool isInf(double x) -{ - DoubleIntUnion u; - // tough to find a platform independent library function, do it directly - u.d = x; - int bitPatternL = u.i[0]; - int bitPatternH = u.i[1]; - return (bitPatternH & 0x7ff00000) == 0x7ff00000 && - (bitPatternH & 0xFFFFF) == 0 && bitPatternL == 0; -} - const double pi = 3.1415926535897932384626433832795; } // end anonymous namespace @@ -663,12 +634,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpIsNan: { - newConstArray[i].setBConst(isNan(unionArray[i].getDConst())); + newConstArray[i].setBConst(IsNan(unionArray[i].getDConst())); break; } case EOpIsInf: { - newConstArray[i].setBConst(isInf(unionArray[i].getDConst())); + newConstArray[i].setBConst(IsInfinity(unionArray[i].getDConst())); break; } diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index a0fade16c0..d8a3aab5d0 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -48,37 +48,6 @@ #endif #include -namespace { - -bool IsInfinity(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_NINF: - case _FPCLASS_PINF: - return true; - default: - return false; - } -#else - return std::isinf(x); -#endif -} - -bool IsNan(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_SNAN: - case _FPCLASS_QNAN: - return true; - default: - return false; - } -#else - return std::isnan(x); -#endif -} - -} namespace glslang { From 9600b97c6af4c90b0837be0c22bb3268fa0624c3 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 9 Nov 2021 15:46:08 -0700 Subject: [PATCH 244/365] Fix test spv.1.4.OpEntryPoint.frag Cannot apply binding qualifier to push_constant --- Test/baseResults/spv.1.4.OpEntryPoint.frag.out | 2 -- Test/spv.1.4.OpEntryPoint.frag | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out index 2c6e6dcccb..e43e954e66 100644 --- a/Test/baseResults/spv.1.4.OpEntryPoint.frag.out +++ b/Test/baseResults/spv.1.4.OpEntryPoint.frag.out @@ -1,5 +1,4 @@ spv.1.4.OpEntryPoint.frag -Validation failed // Module Version 10400 // Generated by (magic number): 8000a // Id's are bound by 64 @@ -32,7 +31,6 @@ Validation failed Decorate 25(uniformv) Binding 0 MemberDecorate 31(pushB) 0 Offset 0 Decorate 31(pushB) Block - Decorate 33(pushv) Binding 2 MemberDecorate 39(bbt) 0 Offset 0 Decorate 39(bbt) Block Decorate 41(bufferv) DescriptorSet 0 diff --git a/Test/spv.1.4.OpEntryPoint.frag b/Test/spv.1.4.OpEntryPoint.frag index ef1235a4ed..a12b1b37a3 100644 --- a/Test/spv.1.4.OpEntryPoint.frag +++ b/Test/spv.1.4.OpEntryPoint.frag @@ -13,7 +13,7 @@ layout(binding = 1) buffer bbt { float f; } bufferv; -layout(binding = 2, push_constant) uniform pushB { +layout(push_constant) uniform pushB { int a; } pushv; From 77b0d72c6838d5587f8defba61dfc98bcfdb5f1a Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Mon, 2 Aug 2021 16:41:21 +0800 Subject: [PATCH 245/365] #extension GL_ARB_gpu_shader5 support the implicit conversion , So the best function matching algorithm should be actived. Signed-off-by: ZhiqianXia --- Test/BestMatchFunction.vert | 20 ++ Test/baseResults/BestMatchFunction.vert.out | 206 ++++++++++++++++++++ glslang/MachineIndependent/ParseHelper.cpp | 6 +- gtests/AST.FromFile.cpp | 1 + 4 files changed, 231 insertions(+), 2 deletions(-) create mode 100644 Test/BestMatchFunction.vert create mode 100644 Test/baseResults/BestMatchFunction.vert.out diff --git a/Test/BestMatchFunction.vert b/Test/BestMatchFunction.vert new file mode 100644 index 0000000000..eb09233927 --- /dev/null +++ b/Test/BestMatchFunction.vert @@ -0,0 +1,20 @@ +#version 150 +#extension GL_ARB_gpu_shader5 : require + +uniform ivec4 u1; +uniform uvec4 u2; +out vec4 result; +vec4 f(in vec4 a, in vec4 b){ return a * b;} // choice 1 +vec4 f(in uvec4 a, in uvec4 b){ return vec4(a - b);} // choice 2 + +void main() +{ + result = f(u1, u2); // should match choice 2. which have less implicit conversion. + switch (gl_VertexID) + { + case 0: gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); break; + case 1: gl_Position = vec4( 1.0, 1.0, 0.0, 1.0); break; + case 2: gl_Position = vec4(-1.0,-1.0, 0.0, 1.0); break; + case 3: gl_Position = vec4( 1.0,-1.0, 0.0, 1.0); break; + } +} diff --git a/Test/baseResults/BestMatchFunction.vert.out b/Test/baseResults/BestMatchFunction.vert.out new file mode 100644 index 0000000000..843ffd7991 --- /dev/null +++ b/Test/baseResults/BestMatchFunction.vert.out @@ -0,0 +1,206 @@ +BestMatchFunction.vert +WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5 + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +0:? Sequence +0:7 Function Definition: f(vf4;vf4; ( global 4-component vector of float) +0:7 Function Parameters: +0:7 'a' ( in 4-component vector of float) +0:7 'b' ( in 4-component vector of float) +0:7 Sequence +0:7 Branch: Return with expression +0:7 component-wise multiply ( temp 4-component vector of float) +0:7 'a' ( in 4-component vector of float) +0:7 'b' ( in 4-component vector of float) +0:8 Function Definition: f(vu4;vu4; ( global 4-component vector of float) +0:8 Function Parameters: +0:8 'a' ( in 4-component vector of uint) +0:8 'b' ( in 4-component vector of uint) +0:8 Sequence +0:8 Branch: Return with expression +0:8 Convert uint to float ( temp 4-component vector of float) +0:8 subtract ( temp 4-component vector of uint) +0:8 'a' ( in 4-component vector of uint) +0:8 'b' ( in 4-component vector of uint) +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'result' ( smooth out 4-component vector of float) +0:12 Function Call: f(vu4;vu4; ( global 4-component vector of float) +0:12 Convert int to uint ( temp 4-component vector of uint) +0:12 'u1' ( uniform 4-component vector of int) +0:12 'u2' ( uniform 4-component vector of uint) +0:13 switch +0:13 condition +0:13 'gl_VertexID' ( gl_VertexId int VertexId) +0:13 body +0:13 Sequence +0:15 case: with expression +0:15 Constant: +0:15 0 (const int) +0:? Sequence +0:15 move second child to first child ( temp 4-component vector of float) +0:15 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:15 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:15 Constant: +0:15 0 (const uint) +0:15 Constant: +0:15 -1.000000 +0:15 1.000000 +0:15 0.000000 +0:15 1.000000 +0:15 Branch: Break +0:16 case: with expression +0:16 Constant: +0:16 1 (const int) +0:? Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 0.000000 +0:16 1.000000 +0:16 Branch: Break +0:17 case: with expression +0:17 Constant: +0:17 2 (const int) +0:? Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:17 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:17 Constant: +0:17 0 (const uint) +0:17 Constant: +0:17 -1.000000 +0:17 -1.000000 +0:17 0.000000 +0:17 1.000000 +0:17 Branch: Break +0:18 case: with expression +0:18 Constant: +0:18 3 (const int) +0:? Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:18 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:18 Constant: +0:18 0 (const uint) +0:18 Constant: +0:18 1.000000 +0:18 -1.000000 +0:18 0.000000 +0:18 1.000000 +0:18 Branch: Break +0:? Linker Objects +0:? 'u1' ( uniform 4-component vector of int) +0:? 'u2' ( uniform 4-component vector of uint) +0:? 'result' ( smooth out 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +0:? Sequence +0:8 Function Definition: f(vu4;vu4; ( global 4-component vector of float) +0:8 Function Parameters: +0:8 'a' ( in 4-component vector of uint) +0:8 'b' ( in 4-component vector of uint) +0:8 Sequence +0:8 Branch: Return with expression +0:8 Convert uint to float ( temp 4-component vector of float) +0:8 subtract ( temp 4-component vector of uint) +0:8 'a' ( in 4-component vector of uint) +0:8 'b' ( in 4-component vector of uint) +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'result' ( smooth out 4-component vector of float) +0:12 Function Call: f(vu4;vu4; ( global 4-component vector of float) +0:12 Convert int to uint ( temp 4-component vector of uint) +0:12 'u1' ( uniform 4-component vector of int) +0:12 'u2' ( uniform 4-component vector of uint) +0:13 switch +0:13 condition +0:13 'gl_VertexID' ( gl_VertexId int VertexId) +0:13 body +0:13 Sequence +0:15 case: with expression +0:15 Constant: +0:15 0 (const int) +0:? Sequence +0:15 move second child to first child ( temp 4-component vector of float) +0:15 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:15 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:15 Constant: +0:15 0 (const uint) +0:15 Constant: +0:15 -1.000000 +0:15 1.000000 +0:15 0.000000 +0:15 1.000000 +0:15 Branch: Break +0:16 case: with expression +0:16 Constant: +0:16 1 (const int) +0:? Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 0.000000 +0:16 1.000000 +0:16 Branch: Break +0:17 case: with expression +0:17 Constant: +0:17 2 (const int) +0:? Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:17 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:17 Constant: +0:17 0 (const uint) +0:17 Constant: +0:17 -1.000000 +0:17 -1.000000 +0:17 0.000000 +0:17 1.000000 +0:17 Branch: Break +0:18 case: with expression +0:18 Constant: +0:18 3 (const int) +0:? Sequence +0:18 move second child to first child ( temp 4-component vector of float) +0:18 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:18 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:18 Constant: +0:18 0 (const uint) +0:18 Constant: +0:18 1.000000 +0:18 -1.000000 +0:18 0.000000 +0:18 1.000000 +0:18 Branch: Break +0:? Linker Objects +0:? 'u1' ( uniform 4-component vector of int) +0:? 'u2' ( uniform 4-component vector of uint) +0:? 'result' ( smooth out 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 9ab1207f4b..e4d4791707 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -6650,8 +6650,10 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct : findFunctionExact(loc, call, builtIn)); else if (version < 120) function = findFunctionExact(loc, call, builtIn); - else if (version < 400) - function = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn); + else if (version < 400) { + bool needfindFunction400 = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) || extensionTurnedOn(E_GL_ARB_gpu_shader5); + function = needfindFunction400 ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn); + } else if (explicitTypesEnabled) function = findFunctionExplicitTypes(loc, call, builtIn); else diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index f9680dd63d..6976d9e3f1 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -287,6 +287,7 @@ INSTANTIATE_TEST_SUITE_P( "atomicCounterARBOps.vert", "GL_EXT_shader_integer_mix.vert", "GL_ARB_draw_instanced.vert", + "BestMatchFunction.vert", })), FileNameAsCustomTestSuffix ); From 50a6a516254365da7add87ce5a1ad6444df15800 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Mon, 2 Aug 2021 13:24:11 +0800 Subject: [PATCH 246/365] Support the #extension GL_ARB_fragment_coord_conventions. Signed-off-by: ZhiqianXia --- Test/GL_ARB_fragment_coord_conventions.vert | 27 ++++ ...GL_ARB_fragment_coord_conventions.vert.out | 143 ++++++++++++++++++ glslang/MachineIndependent/Versions.cpp | 3 + glslang/MachineIndependent/Versions.h | 1 + gtests/AST.FromFile.cpp | 1 + 5 files changed, 175 insertions(+) create mode 100644 Test/GL_ARB_fragment_coord_conventions.vert create mode 100644 Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out diff --git a/Test/GL_ARB_fragment_coord_conventions.vert b/Test/GL_ARB_fragment_coord_conventions.vert new file mode 100644 index 0000000000..962734f409 --- /dev/null +++ b/Test/GL_ARB_fragment_coord_conventions.vert @@ -0,0 +1,27 @@ +#version 140 + +#extension GL_ARB_fragment_coord_conventions: require +#extension GL_ARB_explicit_attrib_location : enable + + +#if !defined GL_ARB_fragment_coord_conventions +# error GL_ARB_fragment_coord_conventions is not defined +#elif GL_ARB_fragment_coord_conventions != 1 +# error GL_ARB_fragment_coord_conventions is not equal to 1 +#endif + + +layout (location = 0) in vec4 pos; +out vec4 i; + +uniform float gtf_windowWidth; +uniform float gtf_windowHeight; +uniform float n; +uniform float f; + +void main() +{ + gl_Position = pos; + i = vec4((pos.x+1.0)*0.5*gtf_windowWidth, (pos.y+1.0)*0.5*gtf_windowHeight, (f-n)*0.5*pos.z + (f+n)*0.5, pos.w); +} + diff --git a/Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out b/Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out new file mode 100644 index 0000000000..3b55ae0d72 --- /dev/null +++ b/Test/baseResults/GL_ARB_fragment_coord_conventions.vert.out @@ -0,0 +1,143 @@ +GL_ARB_fragment_coord_conventions.vert +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_fragment_coord_conventions +0:? Sequence +0:22 Function Definition: main( ( global void) +0:22 Function Parameters: +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'gl_Position' ( gl_Position 4-component vector of float Position) +0:24 'pos' (layout( location=0) in 4-component vector of float) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'i' ( smooth out 4-component vector of float) +0:25 Construct vec4 ( temp 4-component vector of float) +0:25 component-wise multiply ( temp float) +0:25 component-wise multiply ( temp float) +0:25 add ( temp float) +0:25 direct index ( temp float) +0:25 'pos' (layout( location=0) in 4-component vector of float) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1.000000 +0:25 Constant: +0:25 0.500000 +0:25 'gtf_windowWidth' ( uniform float) +0:25 component-wise multiply ( temp float) +0:25 component-wise multiply ( temp float) +0:25 add ( temp float) +0:25 direct index ( temp float) +0:25 'pos' (layout( location=0) in 4-component vector of float) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 1.000000 +0:25 Constant: +0:25 0.500000 +0:25 'gtf_windowHeight' ( uniform float) +0:25 add ( temp float) +0:25 component-wise multiply ( temp float) +0:25 component-wise multiply ( temp float) +0:25 subtract ( temp float) +0:25 'f' ( uniform float) +0:25 'n' ( uniform float) +0:25 Constant: +0:25 0.500000 +0:25 direct index ( temp float) +0:25 'pos' (layout( location=0) in 4-component vector of float) +0:25 Constant: +0:25 2 (const int) +0:25 component-wise multiply ( temp float) +0:25 add ( temp float) +0:25 'f' ( uniform float) +0:25 'n' ( uniform float) +0:25 Constant: +0:25 0.500000 +0:25 direct index ( temp float) +0:25 'pos' (layout( location=0) in 4-component vector of float) +0:25 Constant: +0:25 3 (const int) +0:? Linker Objects +0:? 'pos' (layout( location=0) in 4-component vector of float) +0:? 'i' ( smooth out 4-component vector of float) +0:? 'gtf_windowWidth' ( uniform float) +0:? 'gtf_windowHeight' ( uniform float) +0:? 'n' ( uniform float) +0:? 'f' ( uniform float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_fragment_coord_conventions +0:? Sequence +0:22 Function Definition: main( ( global void) +0:22 Function Parameters: +0:24 Sequence +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'gl_Position' ( gl_Position 4-component vector of float Position) +0:24 'pos' (layout( location=0) in 4-component vector of float) +0:25 move second child to first child ( temp 4-component vector of float) +0:25 'i' ( smooth out 4-component vector of float) +0:25 Construct vec4 ( temp 4-component vector of float) +0:25 component-wise multiply ( temp float) +0:25 component-wise multiply ( temp float) +0:25 add ( temp float) +0:25 direct index ( temp float) +0:25 'pos' (layout( location=0) in 4-component vector of float) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 1.000000 +0:25 Constant: +0:25 0.500000 +0:25 'gtf_windowWidth' ( uniform float) +0:25 component-wise multiply ( temp float) +0:25 component-wise multiply ( temp float) +0:25 add ( temp float) +0:25 direct index ( temp float) +0:25 'pos' (layout( location=0) in 4-component vector of float) +0:25 Constant: +0:25 1 (const int) +0:25 Constant: +0:25 1.000000 +0:25 Constant: +0:25 0.500000 +0:25 'gtf_windowHeight' ( uniform float) +0:25 add ( temp float) +0:25 component-wise multiply ( temp float) +0:25 component-wise multiply ( temp float) +0:25 subtract ( temp float) +0:25 'f' ( uniform float) +0:25 'n' ( uniform float) +0:25 Constant: +0:25 0.500000 +0:25 direct index ( temp float) +0:25 'pos' (layout( location=0) in 4-component vector of float) +0:25 Constant: +0:25 2 (const int) +0:25 component-wise multiply ( temp float) +0:25 add ( temp float) +0:25 'f' ( uniform float) +0:25 'n' ( uniform float) +0:25 Constant: +0:25 0.500000 +0:25 direct index ( temp float) +0:25 'pos' (layout( location=0) in 4-component vector of float) +0:25 Constant: +0:25 3 (const int) +0:? Linker Objects +0:? 'pos' (layout( location=0) in 4-component vector of float) +0:? 'i' ( smooth out 4-component vector of float) +0:? 'gtf_windowWidth' ( uniform float) +0:? 'gtf_windowHeight' ( uniform float) +0:? 'n' ( uniform float) +0:? 'f' ( uniform float) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 2fc0d9e0fa..8d96e0e104 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -226,6 +226,8 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_ARB_texture_query_lod] = EBhDisable; extensionBehavior[E_GL_ARB_vertex_attrib_64bit] = EBhDisable; extensionBehavior[E_GL_ARB_draw_instanced] = EBhDisable; + extensionBehavior[E_GL_ARB_fragment_coord_conventions] = EBhDisable; + extensionBehavior[E_GL_KHR_shader_subgroup_basic] = EBhDisable; extensionBehavior[E_GL_KHR_shader_subgroup_vote] = EBhDisable; @@ -467,6 +469,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_ARB_texture_query_lod 1\n" "#define GL_ARB_vertex_attrib_64bit 1\n" "#define GL_ARB_draw_instanced 1\n" + "#define GL_ARB_fragment_coord_conventions 1\n" "#define GL_EXT_shader_non_constant_global_initializers 1\n" "#define GL_EXT_shader_image_load_formatted 1\n" "#define GL_EXT_post_depth_coverage 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 2dbac0b443..96a6e1fc52 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -162,6 +162,7 @@ const char* const E_GL_ARB_shading_language_packing = "GL_ARB_shading_langua const char* const E_GL_ARB_texture_query_lod = "GL_ARB_texture_query_lod"; const char* const E_GL_ARB_vertex_attrib_64bit = "GL_ARB_vertex_attrib_64bit"; const char* const E_GL_ARB_draw_instanced = "GL_ARB_draw_instanced"; +const char* const E_GL_ARB_fragment_coord_conventions = "GL_ARB_fragment_coord_conventions"; 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"; diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index f9680dd63d..a9c579447b 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -287,6 +287,7 @@ INSTANTIATE_TEST_SUITE_P( "atomicCounterARBOps.vert", "GL_EXT_shader_integer_mix.vert", "GL_ARB_draw_instanced.vert", + "GL_ARB_fragment_coord_conventions.vert" })), FileNameAsCustomTestSuffix ); From 22a5e364460523413e1791e9280bda1397b9b515 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 10 Nov 2021 14:13:37 -0700 Subject: [PATCH 247/365] Revert "Use intermOut.cpp's IsNan and IsInfinity for parse-time constant folding" --- glslang/Include/Common.h | 29 --------------------- glslang/MachineIndependent/Constant.cpp | 33 ++++++++++++++++++++++-- glslang/MachineIndependent/intermOut.cpp | 31 ++++++++++++++++++++++ 3 files changed, 62 insertions(+), 31 deletions(-) diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index a24977f8d8..e7b5e072b3 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -39,7 +39,6 @@ #include #include -#include #include #include #include @@ -303,34 +302,6 @@ template int IntLog2(T n) return result; } -inline bool IsInfinity(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_NINF: - case _FPCLASS_PINF: - return true; - default: - return false; - } -#else - return std::isinf(x); -#endif -} - -inline bool IsNan(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_SNAN: - case _FPCLASS_QNAN: - return true; - default: - return false; - } -#else - return std::isnan(x); -#endif -} - } // end namespace glslang #endif // _COMMON_INCLUDED_ diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 5fc61dbb79..7f5d4c4f24 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -46,6 +46,35 @@ namespace { using namespace glslang; +typedef union { + double d; + int i[2]; +} DoubleIntUnion; + +// Some helper functions + +bool isNan(double x) +{ + DoubleIntUnion u; + // tough to find a platform independent library function, do it directly + u.d = x; + int bitPatternL = u.i[0]; + int bitPatternH = u.i[1]; + return (bitPatternH & 0x7ff80000) == 0x7ff80000 && + ((bitPatternH & 0xFFFFF) != 0 || bitPatternL != 0); +} + +bool isInf(double x) +{ + DoubleIntUnion u; + // tough to find a platform independent library function, do it directly + u.d = x; + int bitPatternL = u.i[0]; + int bitPatternH = u.i[1]; + return (bitPatternH & 0x7ff00000) == 0x7ff00000 && + (bitPatternH & 0xFFFFF) == 0 && bitPatternL == 0; +} + const double pi = 3.1415926535897932384626433832795; } // end anonymous namespace @@ -634,12 +663,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpIsNan: { - newConstArray[i].setBConst(IsNan(unionArray[i].getDConst())); + newConstArray[i].setBConst(isNan(unionArray[i].getDConst())); break; } case EOpIsInf: { - newConstArray[i].setBConst(IsInfinity(unionArray[i].getDConst())); + newConstArray[i].setBConst(isInf(unionArray[i].getDConst())); break; } diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index d8a3aab5d0..a0fade16c0 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -48,6 +48,37 @@ #endif #include +namespace { + +bool IsInfinity(double x) { +#ifdef _MSC_VER + switch (_fpclass(x)) { + case _FPCLASS_NINF: + case _FPCLASS_PINF: + return true; + default: + return false; + } +#else + return std::isinf(x); +#endif +} + +bool IsNan(double x) { +#ifdef _MSC_VER + switch (_fpclass(x)) { + case _FPCLASS_SNAN: + case _FPCLASS_QNAN: + return true; + default: + return false; + } +#else + return std::isnan(x); +#endif +} + +} namespace glslang { From 002b3f55c7852408100cc20b799aeb0f8646a77a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 10 Nov 2021 15:03:07 -0700 Subject: [PATCH 248/365] Generate error for binding on push_constant --- Test/baseResults/vulkan.frag.out | 53 +++++++++++----------- Test/vulkan.frag | 3 ++ glslang/MachineIndependent/ParseHelper.cpp | 2 + 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out index e620898025..28134aedb7 100644 --- a/Test/baseResults/vulkan.frag.out +++ b/Test/baseResults/vulkan.frag.out @@ -24,37 +24,38 @@ ERROR: 0:39: 'push_constant' : can only be used with a uniform ERROR: 0:43: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan ERROR: 0:43: 'push_constant' : can only be used with a block ERROR: 0:45: 'push_constant' : cannot declare a default, can only be used on a block -ERROR: 0:51: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:52: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:52: 'input_attachment_index' : can only be used with a subpass -ERROR: 0:53: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:53: 'input_attachment_index' : can only be used with a subpass +ERROR: 0:46: 'binding' : cannot be used with push_constant ERROR: 0:54: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:54: 'subpass' : requires an input_attachment_index layout qualifier ERROR: 0:55: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:60: 'subpassLoadMS' : no matching overloaded function found -ERROR: 0:61: 'subpassLoad' : no matching overloaded function found +ERROR: 0:55: 'input_attachment_index' : can only be used with a subpass +ERROR: 0:56: 'binding' : sampler/texture/image requires layout(binding=X) +ERROR: 0:56: 'input_attachment_index' : can only be used with a subpass +ERROR: 0:57: 'binding' : sampler/texture/image requires layout(binding=X) +ERROR: 0:57: 'subpass' : requires an input_attachment_index layout qualifier +ERROR: 0:58: 'binding' : sampler/texture/image requires layout(binding=X) ERROR: 0:63: 'subpassLoadMS' : no matching overloaded function found -ERROR: 0:66: 'subroutine' : not allowed when generating SPIR-V -ERROR: 0:66: 'subroutine' : feature not yet implemented -ERROR: 0:67: 'subroutine' : not allowed when generating SPIR-V -ERROR: 0:67: 'subroutine' : feature not yet implemented -ERROR: 0:69: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan -ERROR: 0:73: 'texture' : no matching overloaded function found -ERROR: 0:74: 'imageStore' : no matching overloaded function found -WARNING: 0:82: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: +ERROR: 0:64: 'subpassLoad' : no matching overloaded function found +ERROR: 0:66: 'subpassLoadMS' : no matching overloaded function found +ERROR: 0:69: 'subroutine' : not allowed when generating SPIR-V +ERROR: 0:69: 'subroutine' : feature not yet implemented +ERROR: 0:70: 'subroutine' : not allowed when generating SPIR-V +ERROR: 0:70: 'subroutine' : feature not yet implemented +ERROR: 0:72: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan +ERROR: 0:76: 'texture' : no matching overloaded function found +ERROR: 0:77: 'imageStore' : no matching overloaded function found +WARNING: 0:85: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: "precision mediump int; precision highp float;" -ERROR: 0:91: 'call argument' : sampler constructor must appear at point of use -ERROR: 0:92: 'call argument' : sampler constructor must appear at point of use -ERROR: 0:93: ',' : sampler constructor must appear at point of use -ERROR: 0:94: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp sampler2D' and a right operand of type ' temp sampler2D' (or there is no acceptable conversion) ERROR: 0:94: 'call argument' : sampler constructor must appear at point of use -ERROR: 0:96: 'gl_NumSamples' : undeclared identifier -ERROR: 0:101: 'noise1' : no matching overloaded function found -ERROR: 0:102: 'noise2' : no matching overloaded function found -ERROR: 0:103: 'noise3' : no matching overloaded function found -ERROR: 0:104: 'noise4' : no matching overloaded function found -ERROR: 53 compilation errors. No code generated. +ERROR: 0:95: 'call argument' : sampler constructor must appear at point of use +ERROR: 0:96: ',' : sampler constructor must appear at point of use +ERROR: 0:97: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp sampler2D' and a right operand of type ' temp sampler2D' (or there is no acceptable conversion) +ERROR: 0:97: 'call argument' : sampler constructor must appear at point of use +ERROR: 0:99: 'gl_NumSamples' : undeclared identifier +ERROR: 0:104: 'noise1' : no matching overloaded function found +ERROR: 0:105: 'noise2' : no matching overloaded function found +ERROR: 0:106: 'noise3' : no matching overloaded function found +ERROR: 0:107: 'noise4' : no matching overloaded function found +ERROR: 54 compilation errors. No code generated. ERROR: Linking fragment stage: Only one push_constant block is allowed per stage diff --git a/Test/vulkan.frag b/Test/vulkan.frag index 46c14f314c..25bfefeccb 100644 --- a/Test/vulkan.frag +++ b/Test/vulkan.frag @@ -43,6 +43,9 @@ layout(push_constant) buffer pcb { // ERROR, not on a buffer layout(push_constant) uniform float pcfloat; // ERROR 2X: not on a non-block, and non-opaque outside block layout(push_constant) uniform; // ERROR, needs an object +layout(binding=2, push_constant) uniform pcbnd1 { // ERROR, can't have binding + int a; +} pcbnd1inst; layout(std430, push_constant) uniform pcb1 { int a; } pcb1inst; layout(push_constant) uniform pcb2 { int a; diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 9ab1207f4b..7f2f171b33 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -6496,6 +6496,8 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier error(loc, "can only be used with a uniform", "push_constant", ""); if (qualifier.hasSet()) error(loc, "cannot be used with push_constant", "set", ""); + if (qualifier.hasBinding()) + error(loc, "cannot be used with push_constant", "binding", ""); } if (qualifier.hasBufferReference()) { if (qualifier.storage != EvqBuffer) From 77415296b2174ea6113107fbbb59c0db0a870197 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 11 Nov 2021 08:43:30 -0700 Subject: [PATCH 249/365] Update to latest spirv-headers --- SPIRV/spirv.hpp | 4 ++-- known_good.json | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index e0fe24980d..f6b7be9240 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -1543,7 +1543,7 @@ enum Op { OpUSubSatINTEL = 5596, OpIMul32x16INTEL = 5597, OpUMul32x16INTEL = 5598, - OpConstFunctionPointerINTEL = 5600, + OpConstantFunctionPointerINTEL = 5600, OpFunctionPointerCallINTEL = 5601, OpAsmTargetINTEL = 5609, OpAsmINTEL = 5610, @@ -2131,7 +2131,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConstFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; + case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; diff --git a/known_good.json b/known_good.json index bed5dd8021..96c27deaf6 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "339d4475c1a806c187c57678af26733575d1cecd" + "commit" : "21e3f681e2004590c7865bc8c0195a4ab8e66c88" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "29817199b7069bac971e5365d180295d4b077ebe" + "commit" : "814e728b30ddd0f4509233099a3ad96fd4318c07" } ] } From 0eda343970e04e7c9447d264271b1c4cfdc923f4 Mon Sep 17 00:00:00 2001 From: Marius Hillenbrand Date: Tue, 9 Nov 2021 16:31:22 +0100 Subject: [PATCH 250/365] Use intermOut.cpp's IsNan and IsInfinity for parse-time constant folding (updated) There were two implementations of isInf() and isNan(), in Constant.cpp and in intermOut.cpp. The former only works on little-endian systems, the latter is a wrapper for library functions and works regardless of endianness. Move the second version into Common.h and adopt it in both places. Thereby avoid the duplication and fix for big-endian systems. A previous commit with the same intent and purpose had missed a required header for builds on Windows. On s390x, this fixes the test case Glsl/CompileToAstTest.FromFile/constFold_frag. Fixes #2802 --- glslang/Include/Common.h | 33 ++++++++++++++++++++++++ glslang/MachineIndependent/Constant.cpp | 33 ++---------------------- glslang/MachineIndependent/intermOut.cpp | 31 ---------------------- 3 files changed, 35 insertions(+), 62 deletions(-) diff --git a/glslang/Include/Common.h b/glslang/Include/Common.h index e7b5e072b3..9042a1aa27 100644 --- a/glslang/Include/Common.h +++ b/glslang/Include/Common.h @@ -39,6 +39,11 @@ #include #include +#ifdef _MSC_VER +#include +#else +#include +#endif #include #include #include @@ -302,6 +307,34 @@ template int IntLog2(T n) return result; } +inline bool IsInfinity(double x) { +#ifdef _MSC_VER + switch (_fpclass(x)) { + case _FPCLASS_NINF: + case _FPCLASS_PINF: + return true; + default: + return false; + } +#else + return std::isinf(x); +#endif +} + +inline bool IsNan(double x) { +#ifdef _MSC_VER + switch (_fpclass(x)) { + case _FPCLASS_SNAN: + case _FPCLASS_QNAN: + return true; + default: + return false; + } +#else + return std::isnan(x); +#endif +} + } // end namespace glslang #endif // _COMMON_INCLUDED_ diff --git a/glslang/MachineIndependent/Constant.cpp b/glslang/MachineIndependent/Constant.cpp index 7f5d4c4f24..5fc61dbb79 100644 --- a/glslang/MachineIndependent/Constant.cpp +++ b/glslang/MachineIndependent/Constant.cpp @@ -46,35 +46,6 @@ namespace { using namespace glslang; -typedef union { - double d; - int i[2]; -} DoubleIntUnion; - -// Some helper functions - -bool isNan(double x) -{ - DoubleIntUnion u; - // tough to find a platform independent library function, do it directly - u.d = x; - int bitPatternL = u.i[0]; - int bitPatternH = u.i[1]; - return (bitPatternH & 0x7ff80000) == 0x7ff80000 && - ((bitPatternH & 0xFFFFF) != 0 || bitPatternL != 0); -} - -bool isInf(double x) -{ - DoubleIntUnion u; - // tough to find a platform independent library function, do it directly - u.d = x; - int bitPatternL = u.i[0]; - int bitPatternH = u.i[1]; - return (bitPatternH & 0x7ff00000) == 0x7ff00000 && - (bitPatternH & 0xFFFFF) == 0 && bitPatternL == 0; -} - const double pi = 3.1415926535897932384626433832795; } // end anonymous namespace @@ -663,12 +634,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType) case EOpIsNan: { - newConstArray[i].setBConst(isNan(unionArray[i].getDConst())); + newConstArray[i].setBConst(IsNan(unionArray[i].getDConst())); break; } case EOpIsInf: { - newConstArray[i].setBConst(isInf(unionArray[i].getDConst())); + newConstArray[i].setBConst(IsInfinity(unionArray[i].getDConst())); break; } diff --git a/glslang/MachineIndependent/intermOut.cpp b/glslang/MachineIndependent/intermOut.cpp index a0fade16c0..d8a3aab5d0 100644 --- a/glslang/MachineIndependent/intermOut.cpp +++ b/glslang/MachineIndependent/intermOut.cpp @@ -48,37 +48,6 @@ #endif #include -namespace { - -bool IsInfinity(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_NINF: - case _FPCLASS_PINF: - return true; - default: - return false; - } -#else - return std::isinf(x); -#endif -} - -bool IsNan(double x) { -#ifdef _MSC_VER - switch (_fpclass(x)) { - case _FPCLASS_SNAN: - case _FPCLASS_QNAN: - return true; - default: - return false; - } -#else - return std::isnan(x); -#endif -} - -} namespace glslang { From 0bc8932aba15a5707a6123e07ed2cab8573d3375 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 11 Nov 2021 09:08:05 -0700 Subject: [PATCH 251/365] Release 11.7.0 --- CHANGES.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index ad4fa40085..ebab4da0c7 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,11 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.7.0 2021-11-11 + +### Other changes +* Add support for targeting Vulkan 1.2 in the C API + ## 11.6.0 2021-08-25 ### Other changes From 1f8c8b88c71072fa8b79e401042cd52063e5ff78 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 11 Nov 2021 18:48:05 -0700 Subject: [PATCH 252/365] Revert port of GL_EXT_shader_realtime_clock to GL_EXT_spirv_intrinsics Could not be found by glslang library interface. Blocking SDK build. --- .../GL_EXT_shader_realtime_clock.glsl | 16 ---------------- glslang/MachineIndependent/Initialize.cpp | 7 ++++++- 2 files changed, 6 insertions(+), 17 deletions(-) diff --git a/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl b/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl index f74df6fc4f..7cf545d94d 100644 --- a/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl +++ b/glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl @@ -36,19 +36,3 @@ // POSSIBILITY OF SUCH DAMAGE. // -#extension GL_EXT_spirv_intrinsics : enable -#extension GL_ARB_gpu_shader_int64 : enable - -uvec2 clockRealtime2x32EXT(void) { - spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056) - uvec2 clockRealtime2x32EXT_internal(uint scope); - - return clockRealtime2x32EXT_internal(1 /*Device scope*/); -} - -uint64_t clockRealtimeEXT(void) { - spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056) - uint64_t clockRealtimeEXT_internal(uint scope); - - return clockRealtimeEXT_internal(1 /*Device scope*/); -} \ No newline at end of file diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 728cd4a641..b5f48fb4d2 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -4553,11 +4553,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "\n"); } - // GL_ARB_shader_clock + // 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"); } @@ -8324,6 +8326,9 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion 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); From f1fa8afa25c99a550b3d80c516b7cfa3ac725de5 Mon Sep 17 00:00:00 2001 From: Marius Hillenbrand Date: Wed, 10 Nov 2021 18:10:58 +0100 Subject: [PATCH 253/365] TIntermediate::promoteConstantUnion(): fix conversion to int8 The signedness of type char is implementation-defined in C++. The conversion to (signed) int8 currently uses a cast to char, which is undefined for negative values when the type char is implemented as unsigned. Thus, fix to cast to "signed char", which has the intended semantic on all implementations. Fixes #2807 --- glslang/MachineIndependent/Intermediate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 1283f44939..6aea5b3d7c 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -3902,7 +3902,7 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC 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 EbtInt8: PROMOTE(setI8Const, signed 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; \ From 10be28ac9b9edd1d82e872c69333c563759fb912 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 12 Nov 2021 16:54:22 -0700 Subject: [PATCH 254/365] Fix struct type sharing Fixes #2812 --- .../hlsl.structbuffer.rwbyte2.comp.out | 140 ++++++++++++++++++ Test/hlsl.structbuffer.rwbyte2.comp | 10 ++ glslang/HLSL/hlslParseHelper.cpp | 3 + gtests/Hlsl.FromFile.cpp | 1 + 4 files changed, 154 insertions(+) create mode 100644 Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out create mode 100644 Test/hlsl.structbuffer.rwbyte2.comp diff --git a/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out new file mode 100644 index 0000000000..127d52cc81 --- /dev/null +++ b/Test/baseResults/hlsl.structbuffer.rwbyte2.comp.out @@ -0,0 +1,140 @@ +hlsl.structbuffer.rwbyte2.comp +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:6 Function Definition: @main( ( temp void) +0:6 Function Parameters: +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'f' ( temp uint) +0:7 indirect index (layout( row_major std430) buffer uint) +0:7 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:7 'g_bbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:7 Constant: +0:7 0 (const uint) +0:7 right-shift ( temp int) +0:7 Constant: +0:7 16 (const int) +0:7 Constant: +0:7 2 (const int) +0:8 move second child to first child ( temp uint) +0:8 direct index (layout( row_major std430) buffer uint) +0:8 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:8 'g_sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:8 Constant: +0:8 0 (const uint) +0:8 Constant: +0:8 0 (const int) +0:8 'f' ( temp uint) +0:6 Function Definition: main( ( temp void) +0:6 Function Parameters: +0:? Sequence +0:6 Function Call: @main( ( temp void) +0:? Linker Objects +0:? 'g_sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:? 'g_bbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) + + +Linked compute stage: + + +Shader version: 500 +local_size = (1, 1, 1) +0:? Sequence +0:6 Function Definition: @main( ( temp void) +0:6 Function Parameters: +0:? Sequence +0:7 Sequence +0:7 move second child to first child ( temp uint) +0:7 'f' ( temp uint) +0:7 indirect index (layout( row_major std430) buffer uint) +0:7 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:7 'g_bbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:7 Constant: +0:7 0 (const uint) +0:7 right-shift ( temp int) +0:7 Constant: +0:7 16 (const int) +0:7 Constant: +0:7 2 (const int) +0:8 move second child to first child ( temp uint) +0:8 direct index (layout( row_major std430) buffer uint) +0:8 @data: direct index for structure (layout( row_major std430) buffer unsized 1-element array of uint) +0:8 'g_sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:8 Constant: +0:8 0 (const uint) +0:8 Constant: +0:8 0 (const int) +0:8 'f' ( temp uint) +0:6 Function Definition: main( ( temp void) +0:6 Function Parameters: +0:? Sequence +0:6 Function Call: @main( ( temp void) +0:? Linker Objects +0:? 'g_sbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) +0:? 'g_bbuf' (layout( row_major std430) buffer block{layout( row_major std430) buffer unsized 1-element array of uint @data}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 30 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source HLSL 500 + Name 4 "main" + Name 6 "@main(" + Name 10 "f" + Name 12 "g_bbuf" + MemberName 12(g_bbuf) 0 "@data" + Name 14 "g_bbuf" + Name 24 "g_sbuf" + MemberName 24(g_sbuf) 0 "@data" + Name 26 "g_sbuf" + Decorate 11 ArrayStride 4 + MemberDecorate 12(g_bbuf) 0 Offset 0 + Decorate 12(g_bbuf) BufferBlock + Decorate 14(g_bbuf) DescriptorSet 0 + Decorate 14(g_bbuf) Binding 1 + Decorate 23 ArrayStride 4 + MemberDecorate 24(g_sbuf) 0 Offset 0 + Decorate 24(g_sbuf) BufferBlock + Decorate 26(g_sbuf) DescriptorSet 0 + Decorate 26(g_sbuf) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 8: TypeInt 32 0 + 9: TypePointer Function 8(int) + 11: TypeRuntimeArray 8(int) + 12(g_bbuf): TypeStruct 11 + 13: TypePointer Uniform 12(g_bbuf) + 14(g_bbuf): 13(ptr) Variable Uniform + 15: TypeInt 32 1 + 16: 15(int) Constant 0 + 17: 15(int) Constant 16 + 18: 15(int) Constant 2 + 20: TypePointer Uniform 8(int) + 23: TypeRuntimeArray 8(int) + 24(g_sbuf): TypeStruct 23 + 25: TypePointer Uniform 24(g_sbuf) + 26(g_sbuf): 25(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 29: 2 FunctionCall 6(@main() + Return + FunctionEnd + 6(@main(): 2 Function None 3 + 7: Label + 10(f): 9(ptr) Variable Function + 19: 15(int) ShiftRightArithmetic 17 18 + 21: 20(ptr) AccessChain 14(g_bbuf) 16 19 + 22: 8(int) Load 21 + Store 10(f) 22 + 27: 8(int) Load 10(f) + 28: 20(ptr) AccessChain 26(g_sbuf) 16 16 + Store 28 27 + Return + FunctionEnd diff --git a/Test/hlsl.structbuffer.rwbyte2.comp b/Test/hlsl.structbuffer.rwbyte2.comp new file mode 100644 index 0000000000..42d61c006f --- /dev/null +++ b/Test/hlsl.structbuffer.rwbyte2.comp @@ -0,0 +1,10 @@ +RWStructuredBuffer g_sbuf; +RWByteAddressBuffer g_bbuf; + + +void main() +{ + uint f = g_bbuf.Load(16); + g_sbuf[0] = f; +} + diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index 39b3ecac9f..0936bd3a4d 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -6935,6 +6935,9 @@ void HlslParseContext::shareStructBufferType(TType& type) if (lhs.isStruct() != rhs.isStruct()) return false; + if (lhs.getQualifier().builtIn != rhs.getQualifier().builtIn) + return false; + if (lhs.isStruct() && rhs.isStruct()) { if (lhs.getStruct()->size() != rhs.getStruct()->size()) return false; diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 5e1cbdae62..3e29896d63 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -385,6 +385,7 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.structbuffer.fn2.comp", "main"}, {"hlsl.structbuffer.rw.frag", "main"}, {"hlsl.structbuffer.rwbyte.frag", "main"}, + {"hlsl.structbuffer.rwbyte2.comp", "main"}, {"hlsl.structin.vert", "main"}, {"hlsl.structIoFourWay.frag", "main"}, {"hlsl.structStructName.frag", "main"}, From 0d85595e3388237368bc312b64dd95b59d31c3d3 Mon Sep 17 00:00:00 2001 From: Marius Hillenbrand Date: Mon, 15 Nov 2021 16:30:15 +0100 Subject: [PATCH 255/365] add negative float conversions to test constantUnaryConversion.comp Add conversions from negative float16_t and float32_t to bool, all signed integer types (i.e., including those in GL_EXT_shader_explicit_arithmetic_types), and all float types (from the same extension) to extend coverage. Note that converting negative float values to unsigned integers is undefined behavior. Thus, we exclude them. --- .../constantUnaryConversion.comp.out | 116 +++++++++++++++++- Test/constantUnaryConversion.comp | 21 ++++ 2 files changed, 133 insertions(+), 4 deletions(-) diff --git a/Test/baseResults/constantUnaryConversion.comp.out b/Test/baseResults/constantUnaryConversion.comp.out index fcaf6f22b0..752745a851 100644 --- a/Test/baseResults/constantUnaryConversion.comp.out +++ b/Test/baseResults/constantUnaryConversion.comp.out @@ -3,8 +3,8 @@ Shader version: 450 Requested GL_EXT_shader_explicit_arithmetic_types local_size = (1, 1, 1) 0:? Sequence -0:48 Function Definition: main( ( global void) -0:48 Function Parameters: +0:69 Function Definition: main( ( global void) +0:69 Function Parameters: 0:? Linker Objects 0:? 'bool_init' ( const bool) 0:? true (const bool) @@ -30,6 +30,12 @@ local_size = (1, 1, 1) 0:? 13.000000 0:? 'float64_t_init' ( const double) 0:? -4.000000 +0:? 'neg_float16_t_init' ( const float16_t) +0:? -42.000000 +0:? 'neg_float32_t_init' ( const float) +0:? -13.000000 +0:? 'neg_float64_t_init' ( const double) +0:? -4.000000 0:? 'bool_to_bool' ( const bool) 0:? true (const bool) 0:? 'int8_t_to_bool' ( const bool) @@ -318,6 +324,54 @@ local_size = (1, 1, 1) 0:? 13.000000 0:? 'float64_t_to_float64_t' ( const double) 0:? -4.000000 +0:? 'neg_float16_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float16_t_to_int8_t' ( const int8_t) +0:? -42 (const int8_t) +0:? 'neg_float32_t_to_int8_t' ( const int8_t) +0:? -13 (const int8_t) +0:? 'neg_float64_t_to_int8_t' ( const int8_t) +0:? -4 (const int8_t) +0:? 'neg_float16_t_to_int16_t' ( const int16_t) +0:? -42 (const int16_t) +0:? 'neg_float32_t_to_int16_t' ( const int16_t) +0:? -13 (const int16_t) +0:? 'neg_float64_t_to_int16_t' ( const int16_t) +0:? -4 (const int16_t) +0:? 'neg_float16_t_to_int32_t' ( const int) +0:? -42 (const int) +0:? 'neg_float32_t_to_int32_t' ( const int) +0:? -13 (const int) +0:? 'neg_float64_t_to_int32_t' ( const int) +0:? -4 (const int) +0:? 'neg_float16_t_to_int64_t' ( const int64_t) +0:? -42 (const int64_t) +0:? 'neg_float32_t_to_int64_t' ( const int64_t) +0:? -13 (const int64_t) +0:? 'neg_float64_t_to_int64_t' ( const int64_t) +0:? -4 (const int64_t) +0:? 'neg_float16_t_to_float16_t' ( const float16_t) +0:? -42.000000 +0:? 'neg_float32_t_to_float16_t' ( const float16_t) +0:? -13.000000 +0:? 'neg_float64_t_to_float16_t' ( const float16_t) +0:? -4.000000 +0:? 'neg_float16_t_to_float32_t' ( const float) +0:? -42.000000 +0:? 'neg_float32_t_to_float32_t' ( const float) +0:? -13.000000 +0:? 'neg_float64_t_to_float32_t' ( const float) +0:? -4.000000 +0:? 'neg_float16_t_to_float64_t' ( const double) +0:? -42.000000 +0:? 'neg_float32_t_to_float64_t' ( const double) +0:? -13.000000 +0:? 'neg_float64_t_to_float64_t' ( const double) +0:? -4.000000 Linked compute stage: @@ -327,8 +381,8 @@ Shader version: 450 Requested GL_EXT_shader_explicit_arithmetic_types local_size = (1, 1, 1) 0:? Sequence -0:48 Function Definition: main( ( global void) -0:48 Function Parameters: +0:69 Function Definition: main( ( global void) +0:69 Function Parameters: 0:? Linker Objects 0:? 'bool_init' ( const bool) 0:? true (const bool) @@ -354,6 +408,12 @@ local_size = (1, 1, 1) 0:? 13.000000 0:? 'float64_t_init' ( const double) 0:? -4.000000 +0:? 'neg_float16_t_init' ( const float16_t) +0:? -42.000000 +0:? 'neg_float32_t_init' ( const float) +0:? -13.000000 +0:? 'neg_float64_t_init' ( const double) +0:? -4.000000 0:? 'bool_to_bool' ( const bool) 0:? true (const bool) 0:? 'int8_t_to_bool' ( const bool) @@ -642,4 +702,52 @@ local_size = (1, 1, 1) 0:? 13.000000 0:? 'float64_t_to_float64_t' ( const double) 0:? -4.000000 +0:? 'neg_float16_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float32_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float64_t_to_bool' ( const bool) +0:? true (const bool) +0:? 'neg_float16_t_to_int8_t' ( const int8_t) +0:? -42 (const int8_t) +0:? 'neg_float32_t_to_int8_t' ( const int8_t) +0:? -13 (const int8_t) +0:? 'neg_float64_t_to_int8_t' ( const int8_t) +0:? -4 (const int8_t) +0:? 'neg_float16_t_to_int16_t' ( const int16_t) +0:? -42 (const int16_t) +0:? 'neg_float32_t_to_int16_t' ( const int16_t) +0:? -13 (const int16_t) +0:? 'neg_float64_t_to_int16_t' ( const int16_t) +0:? -4 (const int16_t) +0:? 'neg_float16_t_to_int32_t' ( const int) +0:? -42 (const int) +0:? 'neg_float32_t_to_int32_t' ( const int) +0:? -13 (const int) +0:? 'neg_float64_t_to_int32_t' ( const int) +0:? -4 (const int) +0:? 'neg_float16_t_to_int64_t' ( const int64_t) +0:? -42 (const int64_t) +0:? 'neg_float32_t_to_int64_t' ( const int64_t) +0:? -13 (const int64_t) +0:? 'neg_float64_t_to_int64_t' ( const int64_t) +0:? -4 (const int64_t) +0:? 'neg_float16_t_to_float16_t' ( const float16_t) +0:? -42.000000 +0:? 'neg_float32_t_to_float16_t' ( const float16_t) +0:? -13.000000 +0:? 'neg_float64_t_to_float16_t' ( const float16_t) +0:? -4.000000 +0:? 'neg_float16_t_to_float32_t' ( const float) +0:? -42.000000 +0:? 'neg_float32_t_to_float32_t' ( const float) +0:? -13.000000 +0:? 'neg_float64_t_to_float32_t' ( const float) +0:? -4.000000 +0:? 'neg_float16_t_to_float64_t' ( const double) +0:? -42.000000 +0:? 'neg_float32_t_to_float64_t' ( const double) +0:? -13.000000 +0:? 'neg_float64_t_to_float64_t' ( const double) +0:? -4.000000 diff --git a/Test/constantUnaryConversion.comp b/Test/constantUnaryConversion.comp index 3c479ae67e..7226a267b0 100644 --- a/Test/constantUnaryConversion.comp +++ b/Test/constantUnaryConversion.comp @@ -15,9 +15,16 @@ const float16_t float16_t_init = float16_t(42.0); const float32_t float32_t_init = float32_t(13.0); const float64_t float64_t_init = float64_t(-4.0); +const float16_t neg_float16_t_init = float16_t(-42.0); +const float32_t neg_float32_t_init = float32_t(-13.0); +const float64_t neg_float64_t_init = float64_t(-4.0); + #define TYPE_TO_TYPE(x, y) \ const x y##_to_##x = x(y##_init) +#define TYPE_TO_TYPE_PREFIX(prefix, x, y) \ + const x prefix##_##y##_to_##x = x(prefix##_##y##_init) + #define TYPE_TO(x) \ TYPE_TO_TYPE(x, bool); \ TYPE_TO_TYPE(x, int8_t); \ @@ -45,4 +52,18 @@ TYPE_TO(float16_t); TYPE_TO(float32_t); TYPE_TO(float64_t); +#define NEG_FLOAT_TO(x) \ + TYPE_TO_TYPE_PREFIX(neg, x, float16_t); \ + TYPE_TO_TYPE_PREFIX(neg, x, float32_t); \ + TYPE_TO_TYPE_PREFIX(neg, x, float64_t) + +NEG_FLOAT_TO(bool); +NEG_FLOAT_TO(int8_t); +NEG_FLOAT_TO(int16_t); +NEG_FLOAT_TO(int32_t); +NEG_FLOAT_TO(int64_t); +NEG_FLOAT_TO(float16_t); +NEG_FLOAT_TO(float32_t); +NEG_FLOAT_TO(float64_t); + void main() {} From d13f81510f73bc33f53ea6228debd9a1f0862770 Mon Sep 17 00:00:00 2001 From: Marius Hillenbrand Date: Mon, 15 Nov 2021 16:31:50 +0100 Subject: [PATCH 256/365] remove undefined conversions from test constantUnaryConversion.comp Remove remaining conversions from negative float64_t to unsigned integers, which are undefined behavior. As a result, this test will also succeed on platforms that implement those conversions differently than x86. That addresses one of the issues in #2815. --- .../constantUnaryConversion.comp.out | 48 +++++++++---------- Test/constantUnaryConversion.comp | 2 +- 2 files changed, 25 insertions(+), 25 deletions(-) diff --git a/Test/baseResults/constantUnaryConversion.comp.out b/Test/baseResults/constantUnaryConversion.comp.out index 752745a851..78372f06f2 100644 --- a/Test/baseResults/constantUnaryConversion.comp.out +++ b/Test/baseResults/constantUnaryConversion.comp.out @@ -29,7 +29,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_init' ( const float) 0:? 13.000000 0:? 'float64_t_init' ( const double) -0:? -4.000000 +0:? 4.000000 0:? 'neg_float16_t_init' ( const float16_t) 0:? -42.000000 0:? 'neg_float32_t_init' ( const float) @@ -83,7 +83,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int8_t' ( const int8_t) 0:? 13 (const int8_t) 0:? 'float64_t_to_int8_t' ( const int8_t) -0:? -4 (const int8_t) +0:? 4 (const int8_t) 0:? 'bool_to_int16_t' ( const int16_t) 0:? 1 (const int16_t) 0:? 'int8_t_to_int16_t' ( const int16_t) @@ -107,7 +107,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int16_t' ( const int16_t) 0:? 13 (const int16_t) 0:? 'float64_t_to_int16_t' ( const int16_t) -0:? -4 (const int16_t) +0:? 4 (const int16_t) 0:? 'bool_to_int32_t' ( const int) 0:? 1 (const int) 0:? 'int8_t_to_int32_t' ( const int) @@ -131,7 +131,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int32_t' ( const int) 0:? 13 (const int) 0:? 'float64_t_to_int32_t' ( const int) -0:? -4 (const int) +0:? 4 (const int) 0:? 'bool_to_int64_t' ( const int64_t) 0:? 1 (const int64_t) 0:? 'int8_t_to_int64_t' ( const int64_t) @@ -155,7 +155,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int64_t' ( const int64_t) 0:? 13 (const int64_t) 0:? 'float64_t_to_int64_t' ( const int64_t) -0:? -4 (const int64_t) +0:? 4 (const int64_t) 0:? 'bool_to_uint8_t' ( const uint8_t) 0:? 1 (const uint8_t) 0:? 'int8_t_to_uint8_t' ( const uint8_t) @@ -179,7 +179,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint8_t' ( const uint8_t) 0:? 13 (const uint8_t) 0:? 'float64_t_to_uint8_t' ( const uint8_t) -0:? 252 (const uint8_t) +0:? 4 (const uint8_t) 0:? 'bool_to_uint16_t' ( const uint16_t) 0:? 1 (const uint16_t) 0:? 'int8_t_to_uint16_t' ( const uint16_t) @@ -203,7 +203,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint16_t' ( const uint16_t) 0:? 13 (const uint16_t) 0:? 'float64_t_to_uint16_t' ( const uint16_t) -0:? 65532 (const uint16_t) +0:? 4 (const uint16_t) 0:? 'bool_to_uint32_t' ( const uint) 0:? 1 (const uint) 0:? 'int8_t_to_uint32_t' ( const uint) @@ -227,7 +227,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint32_t' ( const uint) 0:? 13 (const uint) 0:? 'float64_t_to_uint32_t' ( const uint) -0:? 4294967292 (const uint) +0:? 4 (const uint) 0:? 'bool_to_uint64_t' ( const uint64_t) 0:? 1 (const uint64_t) 0:? 'int8_t_to_uint64_t' ( const uint64_t) @@ -251,7 +251,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint64_t' ( const uint64_t) 0:? 13 (const uint64_t) 0:? 'float64_t_to_uint64_t' ( const uint64_t) -0:? 18446744073709551612 (const uint64_t) +0:? 4 (const uint64_t) 0:? 'bool_to_float16_t' ( const float16_t) 0:? 1.000000 0:? 'int8_t_to_float16_t' ( const float16_t) @@ -275,7 +275,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float16_t' ( const float16_t) 0:? 13.000000 0:? 'float64_t_to_float16_t' ( const float16_t) -0:? -4.000000 +0:? 4.000000 0:? 'bool_to_float32_t' ( const float) 0:? 1.000000 0:? 'int8_t_to_float32_t' ( const float) @@ -299,7 +299,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float32_t' ( const float) 0:? 13.000000 0:? 'float64_t_to_float32_t' ( const float) -0:? -4.000000 +0:? 4.000000 0:? 'bool_to_float64_t' ( const double) 0:? 1.000000 0:? 'int8_t_to_float64_t' ( const double) @@ -323,7 +323,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float64_t' ( const double) 0:? 13.000000 0:? 'float64_t_to_float64_t' ( const double) -0:? -4.000000 +0:? 4.000000 0:? 'neg_float16_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'neg_float32_t_to_bool' ( const bool) @@ -407,7 +407,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_init' ( const float) 0:? 13.000000 0:? 'float64_t_init' ( const double) -0:? -4.000000 +0:? 4.000000 0:? 'neg_float16_t_init' ( const float16_t) 0:? -42.000000 0:? 'neg_float32_t_init' ( const float) @@ -461,7 +461,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int8_t' ( const int8_t) 0:? 13 (const int8_t) 0:? 'float64_t_to_int8_t' ( const int8_t) -0:? -4 (const int8_t) +0:? 4 (const int8_t) 0:? 'bool_to_int16_t' ( const int16_t) 0:? 1 (const int16_t) 0:? 'int8_t_to_int16_t' ( const int16_t) @@ -485,7 +485,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int16_t' ( const int16_t) 0:? 13 (const int16_t) 0:? 'float64_t_to_int16_t' ( const int16_t) -0:? -4 (const int16_t) +0:? 4 (const int16_t) 0:? 'bool_to_int32_t' ( const int) 0:? 1 (const int) 0:? 'int8_t_to_int32_t' ( const int) @@ -509,7 +509,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int32_t' ( const int) 0:? 13 (const int) 0:? 'float64_t_to_int32_t' ( const int) -0:? -4 (const int) +0:? 4 (const int) 0:? 'bool_to_int64_t' ( const int64_t) 0:? 1 (const int64_t) 0:? 'int8_t_to_int64_t' ( const int64_t) @@ -533,7 +533,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_int64_t' ( const int64_t) 0:? 13 (const int64_t) 0:? 'float64_t_to_int64_t' ( const int64_t) -0:? -4 (const int64_t) +0:? 4 (const int64_t) 0:? 'bool_to_uint8_t' ( const uint8_t) 0:? 1 (const uint8_t) 0:? 'int8_t_to_uint8_t' ( const uint8_t) @@ -557,7 +557,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint8_t' ( const uint8_t) 0:? 13 (const uint8_t) 0:? 'float64_t_to_uint8_t' ( const uint8_t) -0:? 252 (const uint8_t) +0:? 4 (const uint8_t) 0:? 'bool_to_uint16_t' ( const uint16_t) 0:? 1 (const uint16_t) 0:? 'int8_t_to_uint16_t' ( const uint16_t) @@ -581,7 +581,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint16_t' ( const uint16_t) 0:? 13 (const uint16_t) 0:? 'float64_t_to_uint16_t' ( const uint16_t) -0:? 65532 (const uint16_t) +0:? 4 (const uint16_t) 0:? 'bool_to_uint32_t' ( const uint) 0:? 1 (const uint) 0:? 'int8_t_to_uint32_t' ( const uint) @@ -605,7 +605,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint32_t' ( const uint) 0:? 13 (const uint) 0:? 'float64_t_to_uint32_t' ( const uint) -0:? 4294967292 (const uint) +0:? 4 (const uint) 0:? 'bool_to_uint64_t' ( const uint64_t) 0:? 1 (const uint64_t) 0:? 'int8_t_to_uint64_t' ( const uint64_t) @@ -629,7 +629,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_uint64_t' ( const uint64_t) 0:? 13 (const uint64_t) 0:? 'float64_t_to_uint64_t' ( const uint64_t) -0:? 18446744073709551612 (const uint64_t) +0:? 4 (const uint64_t) 0:? 'bool_to_float16_t' ( const float16_t) 0:? 1.000000 0:? 'int8_t_to_float16_t' ( const float16_t) @@ -653,7 +653,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float16_t' ( const float16_t) 0:? 13.000000 0:? 'float64_t_to_float16_t' ( const float16_t) -0:? -4.000000 +0:? 4.000000 0:? 'bool_to_float32_t' ( const float) 0:? 1.000000 0:? 'int8_t_to_float32_t' ( const float) @@ -677,7 +677,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float32_t' ( const float) 0:? 13.000000 0:? 'float64_t_to_float32_t' ( const float) -0:? -4.000000 +0:? 4.000000 0:? 'bool_to_float64_t' ( const double) 0:? 1.000000 0:? 'int8_t_to_float64_t' ( const double) @@ -701,7 +701,7 @@ local_size = (1, 1, 1) 0:? 'float32_t_to_float64_t' ( const double) 0:? 13.000000 0:? 'float64_t_to_float64_t' ( const double) -0:? -4.000000 +0:? 4.000000 0:? 'neg_float16_t_to_bool' ( const bool) 0:? true (const bool) 0:? 'neg_float32_t_to_bool' ( const bool) diff --git a/Test/constantUnaryConversion.comp b/Test/constantUnaryConversion.comp index 7226a267b0..f0710cd0ee 100644 --- a/Test/constantUnaryConversion.comp +++ b/Test/constantUnaryConversion.comp @@ -13,7 +13,7 @@ const uint32_t uint32_t_init = uint32_t(3); const uint64_t uint64_t_init = uint64_t(4); const float16_t float16_t_init = float16_t(42.0); const float32_t float32_t_init = float32_t(13.0); -const float64_t float64_t_init = float64_t(-4.0); +const float64_t float64_t_init = float64_t(4.0); const float16_t neg_float16_t_init = float16_t(-42.0); const float32_t neg_float32_t_init = float32_t(-13.0); From cd187e201a43d31e1e740edc99d184e806a46f6d Mon Sep 17 00:00:00 2001 From: Kevin Athey Date: Mon, 15 Nov 2021 16:33:08 -0800 Subject: [PATCH 257/365] Initialize member TSymbol::uniqueId. --- glslang/MachineIndependent/SymbolTable.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 720999a36a..31312ecbaa 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -84,7 +84,7 @@ typedef TVector TExtensionList; class TSymbol { public: POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator()) - explicit TSymbol(const TString *n) : name(n), extensions(0), writable(true) { } + explicit TSymbol(const TString *n) : name(n), uniqueId(0), extensions(0), writable(true) { } virtual TSymbol* clone() const = 0; virtual ~TSymbol() { } // rely on all symbol owned memory coming from the pool From 1025f4736a78363acdad236c7550989f5160d9db Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Tue, 16 Nov 2021 19:03:12 -0500 Subject: [PATCH 258/365] Update SPIRV-Tools * Fix test expectations --- Test/baseLegalResults/hlsl.flattenSubset.frag.out | 6 +----- Test/baseLegalResults/hlsl.flattenSubset2.frag.out | 6 +----- known_good.json | 2 +- 3 files changed, 3 insertions(+), 11 deletions(-) diff --git a/Test/baseLegalResults/hlsl.flattenSubset.frag.out b/Test/baseLegalResults/hlsl.flattenSubset.frag.out index 0edf712087..46d3afba6e 100644 --- a/Test/baseLegalResults/hlsl.flattenSubset.frag.out +++ b/Test/baseLegalResults/hlsl.flattenSubset.frag.out @@ -6,19 +6,17 @@ hlsl.flattenSubset.frag Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 47 50 + EntryPoint Fragment 4 "main" 50 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" Name 21 "samp" Name 33 "tex" - Name 47 "vpos" Name 50 "@entryPointOutput" Decorate 21(samp) DescriptorSet 0 Decorate 21(samp) Binding 0 Decorate 33(tex) DescriptorSet 0 Decorate 33(tex) Binding 1 - Decorate 47(vpos) Location 0 Decorate 50(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 @@ -34,8 +32,6 @@ hlsl.flattenSubset.frag 39: TypeVector 6(float) 2 40: 6(float) Constant 1056964608 41: 39(fvec2) ConstantComposite 40 40 - 46: TypePointer Input 7(fvec4) - 47(vpos): 46(ptr) Variable Input 49: TypePointer Output 7(fvec4) 50(@entryPointOutput): 49(ptr) Variable Output 4(main): 2 Function None 3 diff --git a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out index 00bd55be37..408c0eac91 100644 --- a/Test/baseLegalResults/hlsl.flattenSubset2.frag.out +++ b/Test/baseLegalResults/hlsl.flattenSubset2.frag.out @@ -6,13 +6,11 @@ hlsl.flattenSubset2.frag Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 49 52 + EntryPoint Fragment 4 "main" 52 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" - Name 49 "vpos" Name 52 "@entryPointOutput" - Decorate 49(vpos) Location 0 Decorate 52(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 @@ -20,8 +18,6 @@ hlsl.flattenSubset2.frag 7: TypeVector 6(float) 4 43: 6(float) Constant 0 44: 7(fvec4) ConstantComposite 43 43 43 43 - 48: TypePointer Input 7(fvec4) - 49(vpos): 48(ptr) Variable Input 51: TypePointer Output 7(fvec4) 52(@entryPointOutput): 51(ptr) Variable Output 4(main): 2 Function None 3 diff --git a/known_good.json b/known_good.json index 96c27deaf6..5da639d6e3 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "21e3f681e2004590c7865bc8c0195a4ab8e66c88" + "commit" : "4b092d2ab81854e61632bdd1e658907f0071c37e" }, { "name" : "spirv-tools/external/spirv-headers", From e9564feb55492127cc3c556502bfa46875fc3992 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 16 Nov 2021 18:42:12 -0700 Subject: [PATCH 259/365] Add --hlsl-dx-position-w option This reciprocates the w component of SV_Position in HLSL fragment shaders to provide DirectX compatibility for HLSL shaders in Vulkan. Fixes #2244 --- StandAlone/StandAlone.cpp | 8 + Test/baseResults/hlsl.w-recip.frag.out | 268 ++++++++++++++++++ Test/hlsl.w-recip.frag | 12 + Test/runtests | 7 + glslang/HLSL/hlslParseHelper.cpp | 17 +- glslang/MachineIndependent/ShaderLang.cpp | 1 + glslang/MachineIndependent/linkValidate.cpp | 1 + .../MachineIndependent/localintermediate.h | 10 + glslang/Public/ShaderLang.h | 1 + 9 files changed, 323 insertions(+), 2 deletions(-) create mode 100644 Test/baseResults/hlsl.w-recip.frag.out create mode 100644 Test/hlsl.w-recip.frag diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 23e510c281..4deaf4d9e4 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -177,6 +177,7 @@ const char* shaderStageName = nullptr; const char* variableName = nullptr; bool HlslEnable16BitTypes = false; bool HlslDX9compatible = false; +bool HlslDxPositionW = false; bool DumpBuiltinSymbols = false; std::vector IncludeDirectoryList; @@ -662,6 +663,8 @@ void ProcessArguments(std::vector>& workItem HlslEnable16BitTypes = true; } else if (lowerword == "hlsl-dx9-compatible") { HlslDX9compatible = true; + } else if (lowerword == "hlsl-dx-position-w") { + HlslDxPositionW = true; } else if (lowerword == "auto-sampled-textures") { autoSampledTextures = true; } else if (lowerword == "invert-y" || // synonyms @@ -1284,6 +1287,9 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (Options & EOptionInvertY) shader->setInvertY(true); + if (HlslDxPositionW) + shader->setDxPositionW(true); + // Set up the environment, some subsettings take precedence over earlier // ways of setting things. if (Options & EOptionSpv) { @@ -1847,6 +1853,8 @@ void usage() " --hlsl-dx9-compatible interprets sampler declarations as a\n" " texture/sampler combo like DirectX9 would,\n" " and recognizes DirectX9-specific semantics\n" + " --hlsl-dx-position-w W component of SV_Position in HLSL fragment\n" + " shaders compatible with DirectX\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" diff --git a/Test/baseResults/hlsl.w-recip.frag.out b/Test/baseResults/hlsl.w-recip.frag.out new file mode 100644 index 0000000000..b72f361e08 --- /dev/null +++ b/Test/baseResults/hlsl.w-recip.frag.out @@ -0,0 +1,268 @@ +hlsl.w-recip.frag +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main(vf4; ( temp 4-component vector of float) +0:5 Function Parameters: +0:5 'vpos' ( in 4-component vector of float) +0:? Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'vpos_t' ( temp 4-component vector of float) +0:6 Construct vec4 ( temp 4-component vector of float) +0:6 vector swizzle ( temp 3-component vector of float) +0:6 'vpos' ( in 4-component vector of float) +0:6 Sequence +0:6 Constant: +0:6 0 (const int) +0:6 Constant: +0:6 1 (const int) +0:6 Constant: +0:6 2 (const int) +0:6 divide ( temp float) +0:6 Constant: +0:6 1.000000 +0:6 direct index ( temp float) +0:6 'vpos' ( in 4-component vector of float) +0:6 Constant: +0:6 3 (const int) +0:7 Test condition and select ( temp void) +0:7 Condition +0:7 Compare Less Than ( temp bool) +0:7 direct index ( temp float) +0:7 'vpos_t' ( temp 4-component vector of float) +0:7 Constant: +0:7 0 (const int) +0:7 Constant: +0:7 400.000000 +0:7 true case +0:8 Branch: Return with expression +0:8 AmbientColor: direct index for structure ( uniform 4-component vector of float) +0:8 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:8 Constant: +0:8 0 (const uint) +0:7 false case +0:10 Branch: Return with expression +0:10 AmbientColor2: direct index for structure ( uniform 4-component vector of float) +0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:10 Constant: +0:10 1 (const uint) +0:5 Function Definition: main( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:? 'vpos' ( temp 4-component vector of float) +0:5 Construct vec4 ( temp 4-component vector of float) +0:5 vector swizzle ( temp 3-component vector of float) +0:? 'vpos' ( in 4-component vector of float FragCoord) +0:5 Sequence +0:5 Constant: +0:5 0 (const int) +0:5 Constant: +0:5 1 (const int) +0:5 Constant: +0:5 2 (const int) +0:5 divide ( temp float) +0:5 Constant: +0:5 1.000000 +0:5 direct index ( temp float) +0:? 'vpos' ( in 4-component vector of float FragCoord) +0:5 Constant: +0:5 3 (const int) +0:5 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:5 Function Call: @main(vf4; ( temp 4-component vector of float) +0:? 'vpos' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'vpos' ( in 4-component vector of float FragCoord) + + +Linked fragment stage: + + +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:5 Function Definition: @main(vf4; ( temp 4-component vector of float) +0:5 Function Parameters: +0:5 'vpos' ( in 4-component vector of float) +0:? Sequence +0:6 Sequence +0:6 move second child to first child ( temp 4-component vector of float) +0:6 'vpos_t' ( temp 4-component vector of float) +0:6 Construct vec4 ( temp 4-component vector of float) +0:6 vector swizzle ( temp 3-component vector of float) +0:6 'vpos' ( in 4-component vector of float) +0:6 Sequence +0:6 Constant: +0:6 0 (const int) +0:6 Constant: +0:6 1 (const int) +0:6 Constant: +0:6 2 (const int) +0:6 divide ( temp float) +0:6 Constant: +0:6 1.000000 +0:6 direct index ( temp float) +0:6 'vpos' ( in 4-component vector of float) +0:6 Constant: +0:6 3 (const int) +0:7 Test condition and select ( temp void) +0:7 Condition +0:7 Compare Less Than ( temp bool) +0:7 direct index ( temp float) +0:7 'vpos_t' ( temp 4-component vector of float) +0:7 Constant: +0:7 0 (const int) +0:7 Constant: +0:7 400.000000 +0:7 true case +0:8 Branch: Return with expression +0:8 AmbientColor: direct index for structure ( uniform 4-component vector of float) +0:8 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:8 Constant: +0:8 0 (const uint) +0:7 false case +0:10 Branch: Return with expression +0:10 AmbientColor2: direct index for structure ( uniform 4-component vector of float) +0:10 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:10 Constant: +0:10 1 (const uint) +0:5 Function Definition: main( ( temp void) +0:5 Function Parameters: +0:? Sequence +0:5 move second child to first child ( temp 4-component vector of float) +0:? 'vpos' ( temp 4-component vector of float) +0:5 Construct vec4 ( temp 4-component vector of float) +0:5 vector swizzle ( temp 3-component vector of float) +0:? 'vpos' ( in 4-component vector of float FragCoord) +0:5 Sequence +0:5 Constant: +0:5 0 (const int) +0:5 Constant: +0:5 1 (const int) +0:5 Constant: +0:5 2 (const int) +0:5 divide ( temp float) +0:5 Constant: +0:5 1.000000 +0:5 direct index ( temp float) +0:? 'vpos' ( in 4-component vector of float FragCoord) +0:5 Constant: +0:5 3 (const int) +0:5 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:5 Function Call: @main(vf4; ( temp 4-component vector of float) +0:? 'vpos' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'vpos' ( in 4-component vector of float FragCoord) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 69 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 53 65 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 11 "@main(vf4;" + Name 10 "vpos" + Name 13 "vpos_t" + Name 36 "$Global" + MemberName 36($Global) 0 "AmbientColor" + MemberName 36($Global) 1 "AmbientColor2" + Name 38 "" + Name 51 "vpos" + Name 53 "vpos" + Name 65 "@entryPointOutput" + Name 66 "param" + MemberDecorate 36($Global) 0 Offset 0 + MemberDecorate 36($Global) 1 Offset 16 + Decorate 36($Global) Block + Decorate 38 DescriptorSet 0 + Decorate 38 Binding 0 + Decorate 53(vpos) BuiltIn FragCoord + Decorate 65(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 7(fvec4) 8(ptr) + 14: TypeVector 6(float) 3 + 17: 6(float) Constant 1065353216 + 18: TypeInt 32 0 + 19: 18(int) Constant 3 + 20: TypePointer Function 6(float) + 28: 18(int) Constant 0 + 31: 6(float) Constant 1137180672 + 32: TypeBool + 36($Global): TypeStruct 7(fvec4) 7(fvec4) + 37: TypePointer Uniform 36($Global) + 38: 37(ptr) Variable Uniform + 39: TypeInt 32 1 + 40: 39(int) Constant 0 + 41: TypePointer Uniform 7(fvec4) + 46: 39(int) Constant 1 + 52: TypePointer Input 7(fvec4) + 53(vpos): 52(ptr) Variable Input + 56: TypePointer Input 6(float) + 64: TypePointer Output 7(fvec4) +65(@entryPointOutput): 64(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 51(vpos): 8(ptr) Variable Function + 66(param): 8(ptr) Variable Function + 54: 7(fvec4) Load 53(vpos) + 55: 14(fvec3) VectorShuffle 54 54 0 1 2 + 57: 56(ptr) AccessChain 53(vpos) 19 + 58: 6(float) Load 57 + 59: 6(float) FDiv 17 58 + 60: 6(float) CompositeExtract 55 0 + 61: 6(float) CompositeExtract 55 1 + 62: 6(float) CompositeExtract 55 2 + 63: 7(fvec4) CompositeConstruct 60 61 62 59 + Store 51(vpos) 63 + 67: 7(fvec4) Load 51(vpos) + Store 66(param) 67 + 68: 7(fvec4) FunctionCall 11(@main(vf4;) 66(param) + Store 65(@entryPointOutput) 68 + Return + FunctionEnd + 11(@main(vf4;): 7(fvec4) Function None 9 + 10(vpos): 8(ptr) FunctionParameter + 12: Label + 13(vpos_t): 8(ptr) Variable Function + 15: 7(fvec4) Load 10(vpos) + 16: 14(fvec3) VectorShuffle 15 15 0 1 2 + 21: 20(ptr) AccessChain 10(vpos) 19 + 22: 6(float) Load 21 + 23: 6(float) FDiv 17 22 + 24: 6(float) CompositeExtract 16 0 + 25: 6(float) CompositeExtract 16 1 + 26: 6(float) CompositeExtract 16 2 + 27: 7(fvec4) CompositeConstruct 24 25 26 23 + Store 13(vpos_t) 27 + 29: 20(ptr) AccessChain 13(vpos_t) 28 + 30: 6(float) Load 29 + 33: 32(bool) FOrdLessThan 30 31 + SelectionMerge 35 None + BranchConditional 33 34 45 + 34: Label + 42: 41(ptr) AccessChain 38 40 + 43: 7(fvec4) Load 42 + ReturnValue 43 + 45: Label + 47: 41(ptr) AccessChain 38 46 + 48: 7(fvec4) Load 47 + ReturnValue 48 + 35: Label + Unreachable + FunctionEnd diff --git a/Test/hlsl.w-recip.frag b/Test/hlsl.w-recip.frag new file mode 100644 index 0000000000..4812d269e2 --- /dev/null +++ b/Test/hlsl.w-recip.frag @@ -0,0 +1,12 @@ +float4 AmbientColor = float4(1, 0.5, 0, 1); +float4 AmbientColor2 = float4(0.5, 1, 0, 0); + +float4 main(float4 vpos : SV_POSITION) : SV_TARGET +{ + float4 vpos_t = float4(vpos.xyz, 1 / vpos.w); + if (vpos_t.x < 400) + return AmbientColor; + else + return AmbientColor2; +} + diff --git a/Test/runtests b/Test/runtests index a7bdda7935..f27b6d836d 100755 --- a/Test/runtests +++ b/Test/runtests @@ -254,6 +254,13 @@ diff -b $BASEDIR/hlsl.y-negate-2.vert.out $TARGETDIR/hlsl.y-negate-2.vert.out || run -H -e main -V -D -Od -H -i --invert-y hlsl.y-negate-3.vert > $TARGETDIR/hlsl.y-negate-3.vert.out diff -b $BASEDIR/hlsl.y-negate-3.vert.out $TARGETDIR/hlsl.y-negate-3.vert.out || HASERROR=1 +# +# Testing position W reciprocal +# +echo "Testing position W reciprocal" +run -H -e main -V -D -Od -H -i --hlsl-dx-position-w hlsl.w-recip.frag > $TARGETDIR/hlsl.w-recip.frag.out +diff -b $BASEDIR/hlsl.w-recip.frag.out $TARGETDIR/hlsl.w-recip.frag.out || HASERROR=1 + # # Testing hlsl_functionality1 # diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index 0936bd3a4d..9122973abc 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -2167,8 +2167,21 @@ TIntermNode* HlslParseContext::transformEntryPoint(const TSourceLoc& loc, TFunct TIntermSymbol* arg = intermediate.addSymbol(*argVars.back()); handleFunctionArgument(&callee, callingArgs, arg); if (param.type->getQualifier().isParamInput()) { - intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg, - intermediate.addSymbol(**inputIt))); + TIntermTyped* input = intermediate.addSymbol(**inputIt); + if (input->getType().getQualifier().builtIn == EbvFragCoord && intermediate.getDxPositionW()) { + // Replace FragCoord W with reciprocal + auto pos_xyz = handleDotDereference(loc, input, "xyz"); + auto pos_w = handleDotDereference(loc, input, "w"); + auto one = intermediate.addConstantUnion(1.0, EbtFloat, loc); + auto recip_w = intermediate.addBinaryMath(EOpDiv, one, pos_w, loc); + TIntermAggregate* dst = new TIntermAggregate(EOpConstructVec4); + dst->getSequence().push_back(pos_xyz); + dst->getSequence().push_back(recip_w); + dst->setType(TType(EbtFloat, EvqTemporary, 4)); + dst->setLoc(loc); + input = dst; + } + intermediate.growAggregate(synthBody, handleAssign(loc, EOpAssign, arg, input)); inputIt++; } if (param.type->getQualifier().storage == EvqUniform) { diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index a2dd71cfd6..bcf2c33ff7 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1829,6 +1829,7 @@ void TShader::setUniqueId(unsigned long long id) } void TShader::setInvertY(bool invert) { intermediate->setInvertY(invert); } +void TShader::setDxPositionW(bool invert) { intermediate->setDxPositionW(invert); } void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); } #ifndef GLSLANG_WEB diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index b1adfc9390..d2eb90262e 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -312,6 +312,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit) MERGE_TRUE(autoMapBindings); MERGE_TRUE(autoMapLocations); MERGE_TRUE(invertY); + MERGE_TRUE(dxPositionW); MERGE_TRUE(flattenUniformArrays); MERGE_TRUE(useUnknownFormat); MERGE_TRUE(hlslOffsets); diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 6aa9399dcc..940abf79a4 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -290,6 +290,7 @@ class TIntermediate { resources(TBuiltInResource{}), numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false), invertY(false), + dxPositionW(false), useStorageBuffer(false), invariantAll(false), nanMinMaxClamp(false), @@ -460,6 +461,14 @@ class TIntermediate { } bool getInvertY() const { return invertY; } + void setDxPositionW(bool dxPosW) + { + dxPositionW = dxPosW; + if (dxPositionW) + processes.addProcess("dx-position-w"); + } + bool getDxPositionW() const { return dxPositionW; } + #ifdef ENABLE_HLSL void setSource(EShSource s) { source = s; } EShSource getSource() const { return source; } @@ -1070,6 +1079,7 @@ class TIntermediate { int numPushConstants; bool recursive; bool invertY; + bool dxPositionW; bool useStorageBuffer; bool invariantAll; bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index d2a4bf40a0..9d3e9be138 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -485,6 +485,7 @@ class TShader { GLSLANG_EXPORT void addUniformLocationOverride(const char* name, int loc); GLSLANG_EXPORT void setUniformLocationBase(int base); GLSLANG_EXPORT void setInvertY(bool invert); + GLSLANG_EXPORT void setDxPositionW(bool dxPosW); #ifdef ENABLE_HLSL GLSLANG_EXPORT void setHlslIoMapping(bool hlslIoMap); GLSLANG_EXPORT void setFlattenUniformArrays(bool flatten); From cbab732905af5161693fa12c46e16938a16e5fd8 Mon Sep 17 00:00:00 2001 From: Kevin McCullough Date: Wed, 13 Oct 2021 15:32:38 -0700 Subject: [PATCH 260/365] Fix issue with separable shader validation in iomapper --- .../iomap.blockOutVariableIn.2.vert.out | 413 ++++++++++++++++++ .../iomap.blockOutVariableIn.vert.out | 234 ++++++++++ .../iomap.variableOutBlockIn.2.vert.out | 276 ++++++++++++ .../iomap.variableOutBlockIn.vert.out | 236 ++++++++++ Test/iomap.blockOutVariableIn.2.vert | 14 + Test/iomap.blockOutVariableIn.frag | 11 + Test/iomap.blockOutVariableIn.geom | 28 ++ Test/iomap.blockOutVariableIn.vert | 14 + Test/iomap.variableOutBlockIn.2.vert | 11 + Test/iomap.variableOutBlockIn.frag | 13 + Test/iomap.variableOutBlockIn.geom | 19 + Test/iomap.variableOutBlockIn.vert | 11 + glslang/MachineIndependent/iomapper.cpp | 18 + glslang/MachineIndependent/linkValidate.cpp | 5 +- gtests/GlslMapIO.FromFile.cpp | 49 ++- 15 files changed, 1350 insertions(+), 2 deletions(-) create mode 100644 Test/baseResults/iomap.blockOutVariableIn.2.vert.out create mode 100644 Test/baseResults/iomap.blockOutVariableIn.vert.out create mode 100644 Test/baseResults/iomap.variableOutBlockIn.2.vert.out create mode 100644 Test/baseResults/iomap.variableOutBlockIn.vert.out create mode 100644 Test/iomap.blockOutVariableIn.2.vert create mode 100644 Test/iomap.blockOutVariableIn.frag create mode 100644 Test/iomap.blockOutVariableIn.geom create mode 100644 Test/iomap.blockOutVariableIn.vert create mode 100644 Test/iomap.variableOutBlockIn.2.vert create mode 100644 Test/iomap.variableOutBlockIn.frag create mode 100644 Test/iomap.variableOutBlockIn.geom create mode 100644 Test/iomap.variableOutBlockIn.vert diff --git a/Test/baseResults/iomap.blockOutVariableIn.2.vert.out b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out new file mode 100644 index 0000000000..0b4c0ac98a --- /dev/null +++ b/Test/baseResults/iomap.blockOutVariableIn.2.vert.out @@ -0,0 +1,413 @@ +iomap.blockOutVariableIn.2.vert +Shader version: 440 +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of float) +0:11 a1: direct index for structure ( out 4-component vector of float) +0:11 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:11 Constant: +0:11 0 (const uint) +0:11 Constant: +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:12 move second child to first child ( temp 2-component vector of float) +0:12 a2: direct index for structure ( out 2-component vector of float) +0:12 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:12 Constant: +0:12 1 (const uint) +0:12 Constant: +0:12 0.500000 +0:12 0.500000 +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:13 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 Constant: +0:13 1.000000 +0:13 1.000000 +0:13 1.000000 +0:13 1.000000 +0:? Linker Objects +0:? 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +iomap.blockOutVariableIn.geom +Shader version: 440 +invocations = -1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:14 direct index (layout( location=0) temp 4-component vector of float) +0:14 'in_a1' (layout( location=0) in 3-element array of 4-component vector of float) +0:14 Constant: +0:14 0 (const int) +0:15 move second child to first child ( temp 2-component vector of float) +0:15 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:15 direct index (layout( location=1) temp 2-component vector of float) +0:15 'in_a2' (layout( location=1) in 3-element array of 2-component vector of float) +0:15 Constant: +0:15 0 (const int) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:16 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:17 EmitVertex ( global void) +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:19 direct index (layout( location=0) temp 4-component vector of float) +0:19 'in_a1' (layout( location=0) in 3-element array of 4-component vector of float) +0:19 Constant: +0:19 1 (const int) +0:20 move second child to first child ( temp 2-component vector of float) +0:20 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:20 direct index (layout( location=1) temp 2-component vector of float) +0:20 'in_a2' (layout( location=1) in 3-element array of 2-component vector of float) +0:20 Constant: +0:20 1 (const int) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:21 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:21 Constant: +0:21 0 (const uint) +0:21 Constant: +0:21 1.000000 +0:21 1.000000 +0:21 1.000000 +0:21 1.000000 +0:22 EmitVertex ( global void) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:24 direct index (layout( location=0) temp 4-component vector of float) +0:24 'in_a1' (layout( location=0) in 3-element array of 4-component vector of float) +0:24 Constant: +0:24 2 (const int) +0:25 move second child to first child ( temp 2-component vector of float) +0:25 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:25 direct index (layout( location=1) temp 2-component vector of float) +0:25 'in_a2' (layout( location=1) in 3-element array of 2-component vector of float) +0:25 Constant: +0:25 2 (const int) +0:26 move second child to first child ( temp 4-component vector of float) +0:26 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:26 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:26 Constant: +0:26 0 (const uint) +0:26 Constant: +0:26 1.000000 +0:26 1.000000 +0:26 1.000000 +0:26 1.000000 +0:27 EmitVertex ( global void) +0:? Linker Objects +0:? 'in_a1' (layout( location=0) in 3-element array of 4-component vector of float) +0:? 'in_a2' (layout( location=1) in 3-element array of 2-component vector of float) +0:? 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:? 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Shader version: 440 +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of float) +0:11 a1: direct index for structure ( out 4-component vector of float) +0:11 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:11 Constant: +0:11 0 (const uint) +0:11 Constant: +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:12 move second child to first child ( temp 2-component vector of float) +0:12 a2: direct index for structure ( out 2-component vector of float) +0:12 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:12 Constant: +0:12 1 (const uint) +0:12 Constant: +0:12 0.500000 +0:12 0.500000 +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:13 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 Constant: +0:13 1.000000 +0:13 1.000000 +0:13 1.000000 +0:13 1.000000 +0:? Linker Objects +0:? 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 440 +invocations = 1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:12 Function Definition: main( ( global void) +0:12 Function Parameters: +0:14 Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:14 direct index (layout( location=0) temp 4-component vector of float) +0:14 'in_a1' (layout( location=0) in 3-element array of 4-component vector of float) +0:14 Constant: +0:14 0 (const int) +0:15 move second child to first child ( temp 2-component vector of float) +0:15 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:15 direct index (layout( location=1) temp 2-component vector of float) +0:15 'in_a2' (layout( location=1) in 3-element array of 2-component vector of float) +0:15 Constant: +0:15 0 (const int) +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:16 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:17 EmitVertex ( global void) +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:19 direct index (layout( location=0) temp 4-component vector of float) +0:19 'in_a1' (layout( location=0) in 3-element array of 4-component vector of float) +0:19 Constant: +0:19 1 (const int) +0:20 move second child to first child ( temp 2-component vector of float) +0:20 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:20 direct index (layout( location=1) temp 2-component vector of float) +0:20 'in_a2' (layout( location=1) in 3-element array of 2-component vector of float) +0:20 Constant: +0:20 1 (const int) +0:21 move second child to first child ( temp 4-component vector of float) +0:21 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:21 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) +0:21 Constant: +0:21 0 (const uint) +0:21 Constant: +0:21 1.000000 +0:21 1.000000 +0:21 1.000000 +0:21 1.000000 +0:22 EmitVertex ( global void) +0:24 move second child to first child ( temp 4-component vector of float) +0:24 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:24 direct index (layout( location=0) temp 4-component vector of float) +0:24 'in_a1' (layout( location=0) in 3-element array of 4-component vector of float) +0:24 Constant: +0:24 2 (const int) +0:25 move second child to first child ( temp 2-component vector of float) +0:25 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:25 direct index (layout( location=1) temp 2-component vector of float) +0:25 'in_a2' (layout( location=1) in 3-element array of 2-component vector of float) +0:25 Constant: +0:25 2 (const int) +0:26 move second child to first child ( temp 4-component vector of float) +0:26 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:26 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) +0:26 Constant: +0:26 0 (const uint) +0:26 Constant: +0:26 1.000000 +0:26 1.000000 +0:26 1.000000 +0:26 1.000000 +0:27 EmitVertex ( global void) +0:? Linker Objects +0:? 'in_a1' (layout( location=0) in 3-element array of 4-component vector of float) +0:? 'in_a2' (layout( location=1) in 3-element array of 2-component vector of float) +0:? 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:? 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 33 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 11 28 31 32 + Source GLSL 440 + Name 4 "main" + Name 9 "Block" + MemberName 9(Block) 0 "a1" + MemberName 9(Block) 1 "a2" + Name 11 "" + Name 26 "gl_PerVertex" + MemberName 26(gl_PerVertex) 0 "gl_Position" + MemberName 26(gl_PerVertex) 1 "gl_PointSize" + MemberName 26(gl_PerVertex) 2 "gl_ClipDistance" + Name 28 "" + Name 31 "gl_VertexID" + Name 32 "gl_InstanceID" + Decorate 9(Block) Block + Decorate 11 Location 0 + MemberDecorate 26(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 26(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 26(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 26(gl_PerVertex) Block + Decorate 31(gl_VertexID) BuiltIn VertexId + Decorate 32(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeVector 6(float) 2 + 9(Block): TypeStruct 7(fvec4) 8(fvec2) + 10: TypePointer Output 9(Block) + 11: 10(ptr) Variable Output + 12: TypeInt 32 1 + 13: 12(int) Constant 0 + 14: 6(float) Constant 1065353216 + 15: 7(fvec4) ConstantComposite 14 14 14 14 + 16: TypePointer Output 7(fvec4) + 18: 12(int) Constant 1 + 19: 6(float) Constant 1056964608 + 20: 8(fvec2) ConstantComposite 19 19 + 21: TypePointer Output 8(fvec2) + 23: TypeInt 32 0 + 24: 23(int) Constant 1 + 25: TypeArray 6(float) 24 +26(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 25 + 27: TypePointer Output 26(gl_PerVertex) + 28: 27(ptr) Variable Output + 30: TypePointer Input 12(int) + 31(gl_VertexID): 30(ptr) Variable Input +32(gl_InstanceID): 30(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 17: 16(ptr) AccessChain 11 13 + Store 17 15 + 22: 21(ptr) AccessChain 11 18 + Store 22 20 + 29: 16(ptr) AccessChain 28 13 + Store 29 15 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 49 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 9 14 22 25 33 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source GLSL 440 + Name 4 "main" + Name 9 "a1" + Name 14 "in_a1" + Name 22 "a2" + Name 25 "in_a2" + Name 31 "gl_PerVertex" + MemberName 31(gl_PerVertex) 0 "gl_Position" + MemberName 31(gl_PerVertex) 1 "gl_PointSize" + MemberName 31(gl_PerVertex) 2 "gl_ClipDistance" + Name 33 "" + Decorate 9(a1) Location 0 + Decorate 14(in_a1) Location 0 + Decorate 22(a2) Location 1 + Decorate 25(in_a2) Location 1 + MemberDecorate 31(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 31(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 31(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 31(gl_PerVertex) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(a1): 8(ptr) Variable Output + 10: TypeInt 32 0 + 11: 10(int) Constant 3 + 12: TypeArray 7(fvec4) 11 + 13: TypePointer Input 12 + 14(in_a1): 13(ptr) Variable Input + 15: TypeInt 32 1 + 16: 15(int) Constant 0 + 17: TypePointer Input 7(fvec4) + 20: TypeVector 6(float) 2 + 21: TypePointer Output 20(fvec2) + 22(a2): 21(ptr) Variable Output + 23: TypeArray 20(fvec2) 11 + 24: TypePointer Input 23 + 25(in_a2): 24(ptr) Variable Input + 26: TypePointer Input 20(fvec2) + 29: 10(int) Constant 1 + 30: TypeArray 6(float) 29 +31(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 30 + 32: TypePointer Output 31(gl_PerVertex) + 33: 32(ptr) Variable Output + 34: 6(float) Constant 1065353216 + 35: 7(fvec4) ConstantComposite 34 34 34 34 + 37: 15(int) Constant 1 + 43: 15(int) Constant 2 + 4(main): 2 Function None 3 + 5: Label + 18: 17(ptr) AccessChain 14(in_a1) 16 + 19: 7(fvec4) Load 18 + Store 9(a1) 19 + 27: 26(ptr) AccessChain 25(in_a2) 16 + 28: 20(fvec2) Load 27 + Store 22(a2) 28 + 36: 8(ptr) AccessChain 33 16 + Store 36 35 + EmitVertex + 38: 17(ptr) AccessChain 14(in_a1) 37 + 39: 7(fvec4) Load 38 + Store 9(a1) 39 + 40: 26(ptr) AccessChain 25(in_a2) 37 + 41: 20(fvec2) Load 40 + Store 22(a2) 41 + 42: 8(ptr) AccessChain 33 16 + Store 42 35 + EmitVertex + 44: 17(ptr) AccessChain 14(in_a1) 43 + 45: 7(fvec4) Load 44 + Store 9(a1) 45 + 46: 26(ptr) AccessChain 25(in_a2) 43 + 47: 20(fvec2) Load 46 + Store 22(a2) 47 + 48: 8(ptr) AccessChain 33 16 + Store 48 35 + EmitVertex + Return + FunctionEnd diff --git a/Test/baseResults/iomap.blockOutVariableIn.vert.out b/Test/baseResults/iomap.blockOutVariableIn.vert.out new file mode 100644 index 0000000000..dd12cbc2ad --- /dev/null +++ b/Test/baseResults/iomap.blockOutVariableIn.vert.out @@ -0,0 +1,234 @@ +iomap.blockOutVariableIn.vert +Shader version: 440 +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of float) +0:11 a1: direct index for structure ( out 4-component vector of float) +0:11 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:11 Constant: +0:11 0 (const uint) +0:11 Constant: +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:12 move second child to first child ( temp 2-component vector of float) +0:12 a2: direct index for structure ( out 2-component vector of float) +0:12 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:12 Constant: +0:12 1 (const uint) +0:12 Constant: +0:12 0.500000 +0:12 0.500000 +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:13 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 Constant: +0:13 1.000000 +0:13 1.000000 +0:13 1.000000 +0:13 1.000000 +0:? Linker Objects +0:? 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +iomap.blockOutVariableIn.frag +Shader version: 440 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'color' (layout( location=0) out 4-component vector of float) +0:10 Construct vec4 ( temp 4-component vector of float) +0:10 vector swizzle ( temp 2-component vector of float) +0:10 'a1' (layout( location=0) smooth in 4-component vector of float) +0:10 Sequence +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 'a2' (layout( location=1) smooth in 2-component vector of float) +0:? Linker Objects +0:? 'a1' (layout( location=0) smooth in 4-component vector of float) +0:? 'a2' (layout( location=1) smooth in 2-component vector of float) +0:? 'color' (layout( location=0) out 4-component vector of float) + + +Linked vertex stage: + + +Linked fragment stage: + + +Shader version: 440 +0:? Sequence +0:9 Function Definition: main( ( global void) +0:9 Function Parameters: +0:11 Sequence +0:11 move second child to first child ( temp 4-component vector of float) +0:11 a1: direct index for structure ( out 4-component vector of float) +0:11 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:11 Constant: +0:11 0 (const uint) +0:11 Constant: +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:11 1.000000 +0:12 move second child to first child ( temp 2-component vector of float) +0:12 a2: direct index for structure ( out 2-component vector of float) +0:12 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:12 Constant: +0:12 1 (const uint) +0:12 Constant: +0:12 0.500000 +0:12 0.500000 +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:13 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 Constant: +0:13 1.000000 +0:13 1.000000 +0:13 1.000000 +0:13 1.000000 +0:? Linker Objects +0:? 'anon@0' (layout( location=0) out block{ out 4-component vector of float a1, out 2-component vector of float a2}) +0:? 'anon@1' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 440 +0:? Sequence +0:8 Function Definition: main( ( global void) +0:8 Function Parameters: +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'color' (layout( location=0) out 4-component vector of float) +0:10 Construct vec4 ( temp 4-component vector of float) +0:10 vector swizzle ( temp 2-component vector of float) +0:10 'a1' (layout( location=0) smooth in 4-component vector of float) +0:10 Sequence +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 'a2' (layout( location=1) smooth in 2-component vector of float) +0:? Linker Objects +0:? 'a1' (layout( location=0) smooth in 4-component vector of float) +0:? 'a2' (layout( location=1) smooth in 2-component vector of float) +0:? 'color' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 33 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 11 28 31 32 + Source GLSL 440 + Name 4 "main" + Name 9 "Block" + MemberName 9(Block) 0 "a1" + MemberName 9(Block) 1 "a2" + Name 11 "" + Name 26 "gl_PerVertex" + MemberName 26(gl_PerVertex) 0 "gl_Position" + MemberName 26(gl_PerVertex) 1 "gl_PointSize" + MemberName 26(gl_PerVertex) 2 "gl_ClipDistance" + Name 28 "" + Name 31 "gl_VertexID" + Name 32 "gl_InstanceID" + Decorate 9(Block) Block + Decorate 11 Location 0 + MemberDecorate 26(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 26(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 26(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 26(gl_PerVertex) Block + Decorate 31(gl_VertexID) BuiltIn VertexId + Decorate 32(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeVector 6(float) 2 + 9(Block): TypeStruct 7(fvec4) 8(fvec2) + 10: TypePointer Output 9(Block) + 11: 10(ptr) Variable Output + 12: TypeInt 32 1 + 13: 12(int) Constant 0 + 14: 6(float) Constant 1065353216 + 15: 7(fvec4) ConstantComposite 14 14 14 14 + 16: TypePointer Output 7(fvec4) + 18: 12(int) Constant 1 + 19: 6(float) Constant 1056964608 + 20: 8(fvec2) ConstantComposite 19 19 + 21: TypePointer Output 8(fvec2) + 23: TypeInt 32 0 + 24: 23(int) Constant 1 + 25: TypeArray 6(float) 24 +26(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 25 + 27: TypePointer Output 26(gl_PerVertex) + 28: 27(ptr) Variable Output + 30: TypePointer Input 12(int) + 31(gl_VertexID): 30(ptr) Variable Input +32(gl_InstanceID): 30(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 17: 16(ptr) AccessChain 11 13 + Store 17 15 + 22: 21(ptr) AccessChain 11 18 + Store 22 20 + 29: 16(ptr) AccessChain 28 13 + Store 29 15 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 23 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 11 16 + ExecutionMode 4 OriginLowerLeft + Source GLSL 440 + Name 4 "main" + Name 9 "color" + Name 11 "a1" + Name 16 "a2" + Decorate 9(color) Location 0 + Decorate 11(a1) Location 0 + Decorate 16(a2) Location 1 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(color): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec4) + 11(a1): 10(ptr) Variable Input + 12: TypeVector 6(float) 2 + 15: TypePointer Input 12(fvec2) + 16(a2): 15(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + 13: 7(fvec4) Load 11(a1) + 14: 12(fvec2) VectorShuffle 13 13 0 1 + 17: 12(fvec2) Load 16(a2) + 18: 6(float) CompositeExtract 14 0 + 19: 6(float) CompositeExtract 14 1 + 20: 6(float) CompositeExtract 17 0 + 21: 6(float) CompositeExtract 17 1 + 22: 7(fvec4) CompositeConstruct 18 19 20 21 + Store 9(color) 22 + Return + FunctionEnd diff --git a/Test/baseResults/iomap.variableOutBlockIn.2.vert.out b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out new file mode 100644 index 0000000000..6ef7d4e32e --- /dev/null +++ b/Test/baseResults/iomap.variableOutBlockIn.2.vert.out @@ -0,0 +1,276 @@ +iomap.variableOutBlockIn.2.vert +Shader version: 440 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'a1' (layout( location=0) smooth out 4-component vector of float) +0:8 Constant: +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:9 move second child to first child ( temp 2-component vector of float) +0:9 'a2' (layout( location=1) smooth out 2-component vector of float) +0:9 Constant: +0:9 0.500000 +0:9 0.500000 +0:10 move second child to first child ( temp 4-component vector of float) +0:10 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:10 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:10 Constant: +0:10 0 (const uint) +0:10 Constant: +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:? Linker Objects +0:? 'a1' (layout( location=0) smooth out 4-component vector of float) +0:? 'a2' (layout( location=1) smooth out 2-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +iomap.variableOutBlockIn.geom +Shader version: 440 +invocations = -1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:14 Function Definition: main( ( global void) +0:14 Function Parameters: +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:17 move second child to first child ( temp 2-component vector of float) +0:17 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:17 Constant: +0:17 0.500000 +0:17 0.500000 +0:18 move second child to first child ( temp 4-component vector of float) +0:18 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:18 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:18 Constant: +0:18 0 (const uint) +0:18 Constant: +0:18 1.000000 +0:18 1.000000 +0:18 1.000000 +0:18 1.000000 +0:? Linker Objects +0:? 'gin' (layout( location=0) in 3-element array of block{ in 4-component vector of float a1, in 2-component vector of float a2}) +0:? 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:? 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out unsized 1-element array of float ClipDistance gl_ClipDistance}) + + +Linked vertex stage: + + +Linked geometry stage: + + +Shader version: 440 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'a1' (layout( location=0) smooth out 4-component vector of float) +0:8 Constant: +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:9 move second child to first child ( temp 2-component vector of float) +0:9 'a2' (layout( location=1) smooth out 2-component vector of float) +0:9 Constant: +0:9 0.500000 +0:9 0.500000 +0:10 move second child to first child ( temp 4-component vector of float) +0:10 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:10 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:10 Constant: +0:10 0 (const uint) +0:10 Constant: +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:? Linker Objects +0:? 'a1' (layout( location=0) smooth out 4-component vector of float) +0:? 'a2' (layout( location=1) smooth out 2-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 440 +invocations = 1 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:14 Function Definition: main( ( global void) +0:14 Function Parameters: +0:16 Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:16 Constant: +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:16 1.000000 +0:17 move second child to first child ( temp 2-component vector of float) +0:17 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:17 Constant: +0:17 0.500000 +0:17 0.500000 +0:18 move second child to first child ( temp 4-component vector of float) +0:18 gl_Position: direct index for structure (layout( stream=0) gl_Position 4-component vector of float Position) +0:18 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) +0:18 Constant: +0:18 0 (const uint) +0:18 Constant: +0:18 1.000000 +0:18 1.000000 +0:18 1.000000 +0:18 1.000000 +0:? Linker Objects +0:? 'gin' (layout( location=0) in 3-element array of block{ in 4-component vector of float a1, in 2-component vector of float a2}) +0:? 'a1' (layout( location=0 stream=0) out 4-component vector of float) +0:? 'a2' (layout( location=1 stream=0) out 2-component vector of float) +0:? 'anon@0' (layout( stream=0) out block{layout( stream=0) gl_Position 4-component vector of float Position gl_Position, layout( stream=0) gl_PointSize float PointSize gl_PointSize, layout( stream=0) out 1-element array of float ClipDistance gl_ClipDistance}) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 29 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 14 22 27 28 + Source GLSL 440 + Name 4 "main" + Name 9 "a1" + Name 14 "a2" + Name 20 "gl_PerVertex" + MemberName 20(gl_PerVertex) 0 "gl_Position" + MemberName 20(gl_PerVertex) 1 "gl_PointSize" + MemberName 20(gl_PerVertex) 2 "gl_ClipDistance" + Name 22 "" + Name 27 "gl_VertexID" + Name 28 "gl_InstanceID" + Decorate 9(a1) Location 0 + Decorate 14(a2) Location 1 + MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 20(gl_PerVertex) Block + Decorate 27(gl_VertexID) BuiltIn VertexId + Decorate 28(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(a1): 8(ptr) Variable Output + 10: 6(float) Constant 1065353216 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(a2): 13(ptr) Variable Output + 15: 6(float) Constant 1056964608 + 16: 12(fvec2) ConstantComposite 15 15 + 17: TypeInt 32 0 + 18: 17(int) Constant 1 + 19: TypeArray 6(float) 18 +20(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 19 + 21: TypePointer Output 20(gl_PerVertex) + 22: 21(ptr) Variable Output + 23: TypeInt 32 1 + 24: 23(int) Constant 0 + 26: TypePointer Input 23(int) + 27(gl_VertexID): 26(ptr) Variable Input +28(gl_InstanceID): 26(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Store 9(a1) 11 + Store 14(a2) 16 + 25: 8(ptr) AccessChain 22 24 + Store 25 11 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 31 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "main" 9 14 22 30 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 1 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source GLSL 440 + Name 4 "main" + Name 9 "a1" + Name 14 "a2" + Name 20 "gl_PerVertex" + MemberName 20(gl_PerVertex) 0 "gl_Position" + MemberName 20(gl_PerVertex) 1 "gl_PointSize" + MemberName 20(gl_PerVertex) 2 "gl_ClipDistance" + Name 22 "" + Name 26 "Inputs" + MemberName 26(Inputs) 0 "a1" + MemberName 26(Inputs) 1 "a2" + Name 30 "gin" + Decorate 9(a1) Location 0 + Decorate 14(a2) Location 1 + MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 20(gl_PerVertex) Block + Decorate 26(Inputs) Block + Decorate 30(gin) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(a1): 8(ptr) Variable Output + 10: 6(float) Constant 1065353216 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(a2): 13(ptr) Variable Output + 15: 6(float) Constant 1056964608 + 16: 12(fvec2) ConstantComposite 15 15 + 17: TypeInt 32 0 + 18: 17(int) Constant 1 + 19: TypeArray 6(float) 18 +20(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 19 + 21: TypePointer Output 20(gl_PerVertex) + 22: 21(ptr) Variable Output + 23: TypeInt 32 1 + 24: 23(int) Constant 0 + 26(Inputs): TypeStruct 7(fvec4) 12(fvec2) + 27: 17(int) Constant 3 + 28: TypeArray 26(Inputs) 27 + 29: TypePointer Input 28 + 30(gin): 29(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Store 9(a1) 11 + Store 14(a2) 16 + 25: 8(ptr) AccessChain 22 24 + Store 25 11 + Return + FunctionEnd diff --git a/Test/baseResults/iomap.variableOutBlockIn.vert.out b/Test/baseResults/iomap.variableOutBlockIn.vert.out new file mode 100644 index 0000000000..8fef640d36 --- /dev/null +++ b/Test/baseResults/iomap.variableOutBlockIn.vert.out @@ -0,0 +1,236 @@ +iomap.variableOutBlockIn.vert +Shader version: 440 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'a1' (layout( location=0) smooth out 4-component vector of float) +0:8 Constant: +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:9 move second child to first child ( temp 2-component vector of float) +0:9 'a2' (layout( location=1) smooth out 2-component vector of float) +0:9 Constant: +0:9 0.500000 +0:9 0.500000 +0:10 move second child to first child ( temp 4-component vector of float) +0:10 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:10 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:10 Constant: +0:10 0 (const uint) +0:10 Constant: +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:? Linker Objects +0:? 'a1' (layout( location=0) smooth out 4-component vector of float) +0:? 'a2' (layout( location=1) smooth out 2-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + +iomap.variableOutBlockIn.frag +Shader version: 440 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'color' (layout( location=0) out 4-component vector of float) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 vector swizzle ( temp 2-component vector of float) +0:12 a1: direct index for structure ( in 4-component vector of float) +0:12 'anon@0' (layout( location=0) in block{ in 4-component vector of float a1, in 2-component vector of float a2}) +0:12 Constant: +0:12 0 (const uint) +0:12 Sequence +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 a2: direct index for structure ( in 2-component vector of float) +0:12 'anon@0' (layout( location=0) in block{ in 4-component vector of float a1, in 2-component vector of float a2}) +0:12 Constant: +0:12 1 (const uint) +0:? Linker Objects +0:? 'anon@0' (layout( location=0) in block{ in 4-component vector of float a1, in 2-component vector of float a2}) +0:? 'color' (layout( location=0) out 4-component vector of float) + + +Linked vertex stage: + + +Linked fragment stage: + + +Shader version: 440 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'a1' (layout( location=0) smooth out 4-component vector of float) +0:8 Constant: +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:9 move second child to first child ( temp 2-component vector of float) +0:9 'a2' (layout( location=1) smooth out 2-component vector of float) +0:9 Constant: +0:9 0.500000 +0:9 0.500000 +0:10 move second child to first child ( temp 4-component vector of float) +0:10 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:10 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:10 Constant: +0:10 0 (const uint) +0:10 Constant: +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:10 1.000000 +0:? Linker Objects +0:? 'a1' (layout( location=0) smooth out 4-component vector of float) +0:? 'a2' (layout( location=1) smooth out 2-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) +Shader version: 440 +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp 4-component vector of float) +0:12 'color' (layout( location=0) out 4-component vector of float) +0:12 Construct vec4 ( temp 4-component vector of float) +0:12 vector swizzle ( temp 2-component vector of float) +0:12 a1: direct index for structure ( in 4-component vector of float) +0:12 'anon@0' (layout( location=0) in block{ in 4-component vector of float a1, in 2-component vector of float a2}) +0:12 Constant: +0:12 0 (const uint) +0:12 Sequence +0:12 Constant: +0:12 0 (const int) +0:12 Constant: +0:12 1 (const int) +0:12 a2: direct index for structure ( in 2-component vector of float) +0:12 'anon@0' (layout( location=0) in block{ in 4-component vector of float a1, in 2-component vector of float a2}) +0:12 Constant: +0:12 1 (const uint) +0:? Linker Objects +0:? 'anon@0' (layout( location=0) in block{ in 4-component vector of float a1, in 2-component vector of float a2}) +0:? 'color' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 29 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 9 14 22 27 28 + Source GLSL 440 + Name 4 "main" + Name 9 "a1" + Name 14 "a2" + Name 20 "gl_PerVertex" + MemberName 20(gl_PerVertex) 0 "gl_Position" + MemberName 20(gl_PerVertex) 1 "gl_PointSize" + MemberName 20(gl_PerVertex) 2 "gl_ClipDistance" + Name 22 "" + Name 27 "gl_VertexID" + Name 28 "gl_InstanceID" + Decorate 9(a1) Location 0 + Decorate 14(a2) Location 1 + MemberDecorate 20(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 20(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 20(gl_PerVertex) 2 BuiltIn ClipDistance + Decorate 20(gl_PerVertex) Block + Decorate 27(gl_VertexID) BuiltIn VertexId + Decorate 28(gl_InstanceID) BuiltIn InstanceId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(a1): 8(ptr) Variable Output + 10: 6(float) Constant 1065353216 + 11: 7(fvec4) ConstantComposite 10 10 10 10 + 12: TypeVector 6(float) 2 + 13: TypePointer Output 12(fvec2) + 14(a2): 13(ptr) Variable Output + 15: 6(float) Constant 1056964608 + 16: 12(fvec2) ConstantComposite 15 15 + 17: TypeInt 32 0 + 18: 17(int) Constant 1 + 19: TypeArray 6(float) 18 +20(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 19 + 21: TypePointer Output 20(gl_PerVertex) + 22: 21(ptr) Variable Output + 23: TypeInt 32 1 + 24: 23(int) Constant 0 + 26: TypePointer Input 23(int) + 27(gl_VertexID): 26(ptr) Variable Input +28(gl_InstanceID): 26(ptr) Variable Input + 4(main): 2 Function None 3 + 5: Label + Store 9(a1) 11 + Store 14(a2) 16 + 25: 8(ptr) AccessChain 22 24 + Store 25 11 + Return + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 29 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 13 + ExecutionMode 4 OriginLowerLeft + Source GLSL 440 + Name 4 "main" + Name 9 "color" + Name 11 "Inputs" + MemberName 11(Inputs) 0 "a1" + MemberName 11(Inputs) 1 "a2" + Name 13 "" + Decorate 9(color) Location 0 + Decorate 11(Inputs) Block + Decorate 13 Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(color): 8(ptr) Variable Output + 10: TypeVector 6(float) 2 + 11(Inputs): TypeStruct 7(fvec4) 10(fvec2) + 12: TypePointer Input 11(Inputs) + 13: 12(ptr) Variable Input + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypePointer Input 7(fvec4) + 20: 14(int) Constant 1 + 21: TypePointer Input 10(fvec2) + 4(main): 2 Function None 3 + 5: Label + 17: 16(ptr) AccessChain 13 15 + 18: 7(fvec4) Load 17 + 19: 10(fvec2) VectorShuffle 18 18 0 1 + 22: 21(ptr) AccessChain 13 20 + 23: 10(fvec2) Load 22 + 24: 6(float) CompositeExtract 19 0 + 25: 6(float) CompositeExtract 19 1 + 26: 6(float) CompositeExtract 23 0 + 27: 6(float) CompositeExtract 23 1 + 28: 7(fvec4) CompositeConstruct 24 25 26 27 + Store 9(color) 28 + Return + FunctionEnd diff --git a/Test/iomap.blockOutVariableIn.2.vert b/Test/iomap.blockOutVariableIn.2.vert new file mode 100644 index 0000000000..67f45c97ab --- /dev/null +++ b/Test/iomap.blockOutVariableIn.2.vert @@ -0,0 +1,14 @@ +#version 440 + +layout(location = 0) out Block +{ + vec4 a1; + vec2 a2; +}; + +void main() +{ + a1 = vec4(1.0); + a2 = vec2(0.5); + gl_Position = vec4(1.0); +} diff --git a/Test/iomap.blockOutVariableIn.frag b/Test/iomap.blockOutVariableIn.frag new file mode 100644 index 0000000000..f2cb26e7ac --- /dev/null +++ b/Test/iomap.blockOutVariableIn.frag @@ -0,0 +1,11 @@ +#version 440 + +layout(location = 0) in vec4 a1; +layout(location = 1) in vec2 a2; + +layout(location = 0) out vec4 color; + +void main() +{ + color = vec4(a1.xy, a2); +} diff --git a/Test/iomap.blockOutVariableIn.geom b/Test/iomap.blockOutVariableIn.geom new file mode 100644 index 0000000000..feefdd13fb --- /dev/null +++ b/Test/iomap.blockOutVariableIn.geom @@ -0,0 +1,28 @@ +#version 440 + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; + +layout(location = 0) in vec4 in_a1[3]; +layout(location = 1) in vec2 in_a2[3]; + +layout(location = 0) out vec4 a1; +layout(location = 1) out vec2 a2; + +void main() +{ + a1 = in_a1[0]; + a2 = in_a2[0]; + gl_Position = vec4(1.0); + EmitVertex(); + + a1 = in_a1[1]; + a2 = in_a2[1]; + gl_Position = vec4(1.0); + EmitVertex(); + + a1 = in_a1[2]; + a2 = in_a2[2]; + gl_Position = vec4(1.0); + EmitVertex(); +} diff --git a/Test/iomap.blockOutVariableIn.vert b/Test/iomap.blockOutVariableIn.vert new file mode 100644 index 0000000000..67f45c97ab --- /dev/null +++ b/Test/iomap.blockOutVariableIn.vert @@ -0,0 +1,14 @@ +#version 440 + +layout(location = 0) out Block +{ + vec4 a1; + vec2 a2; +}; + +void main() +{ + a1 = vec4(1.0); + a2 = vec2(0.5); + gl_Position = vec4(1.0); +} diff --git a/Test/iomap.variableOutBlockIn.2.vert b/Test/iomap.variableOutBlockIn.2.vert new file mode 100644 index 0000000000..f9b80b4679 --- /dev/null +++ b/Test/iomap.variableOutBlockIn.2.vert @@ -0,0 +1,11 @@ +#version 440 + +layout(location = 0) out vec4 a1; +layout(location = 1) out vec2 a2; + +void main() +{ + a1 = vec4(1.0); + a2 = vec2(0.5); + gl_Position = vec4(1.0); +} diff --git a/Test/iomap.variableOutBlockIn.frag b/Test/iomap.variableOutBlockIn.frag new file mode 100644 index 0000000000..967d769817 --- /dev/null +++ b/Test/iomap.variableOutBlockIn.frag @@ -0,0 +1,13 @@ +#version 440 + +layout(location = 0) in Inputs { + vec4 a1; + vec2 a2; +}; + +layout(location = 0) out vec4 color; + +void main() +{ + color = vec4(a1.xy, a2); +} diff --git a/Test/iomap.variableOutBlockIn.geom b/Test/iomap.variableOutBlockIn.geom new file mode 100644 index 0000000000..637ddabbaa --- /dev/null +++ b/Test/iomap.variableOutBlockIn.geom @@ -0,0 +1,19 @@ +#version 440 + +layout(triangles) in; +layout(triangle_strip, max_vertices=3) out; + +layout(location = 0) in Inputs { + vec4 a1; + vec2 a2; +} gin[3]; + +layout(location = 0) out vec4 a1; +layout(location = 1) out vec2 a2; + +void main() +{ + a1 = vec4(1.0); + a2 = vec2(0.5); + gl_Position = vec4(1.0); +} diff --git a/Test/iomap.variableOutBlockIn.vert b/Test/iomap.variableOutBlockIn.vert new file mode 100644 index 0000000000..f9b80b4679 --- /dev/null +++ b/Test/iomap.variableOutBlockIn.vert @@ -0,0 +1,11 @@ +#version 440 + +layout(location = 0) out vec4 a1; +layout(location = 1) out vec2 a2; + +void main() +{ + a1 = vec4(1.0); + a2 = vec2(0.5); + gl_Position = vec4(1.0); +} diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index a1db5c135f..288a6c97cb 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -514,6 +514,24 @@ struct TSymbolValidater return; } else { + // Deal with input/output pairs where one is a block member but the other is loose, + // e.g. with ARB_separate_shader_objects + if (type1.getBasicType() == EbtBlock && + type1.isStruct() && !type2.isStruct()) { + // Iterate through block members tracking layout + glslang::TString name; + type1.getStruct()->begin()->type->appendMangledName(name); + if (name == mangleName2 + && type1.getQualifier().layoutLocation == type2.getQualifier().layoutLocation) return; + } + if (type2.getBasicType() == EbtBlock && + type2.isStruct() && !type1.isStruct()) { + // Iterate through block members tracking layout + glslang::TString name; + type2.getStruct()->begin()->type->appendMangledName(name); + if (name == mangleName1 + && type1.getQualifier().layoutLocation == type2.getQualifier().layoutLocation) return; + } TString err = "Invalid In/Out variable type : " + entKey.first; infoSink.info.message(EPrefixInternalError, err.c_str()); hadError = true; diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 4edd2a9052..9d7db88749 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -759,7 +759,10 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin auto checkName = [this, unitSymbol, &infoSink](const TString& name) { for (unsigned int i = 0; i < unitSymbol->getType().getStruct()->size(); ++i) { - if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName()) { + if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName() + && !((*unitSymbol->getType().getStruct())[i].type->getQualifier().hasLocation() + || unitSymbol->getType().getQualifier().hasLocation()) + ) { error(infoSink, "Anonymous member name used for global variable or other anonymous member: "); infoSink.info << (*unitSymbol->getType().getStruct())[i].type->getCompleteString() << "\n"; } diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp index 574e905f89..73fdec4e6e 100644 --- a/gtests/GlslMapIO.FromFile.cpp +++ b/gtests/GlslMapIO.FromFile.cpp @@ -109,7 +109,50 @@ bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { success &= outQualifier.layoutLocation == inQualifier.layoutLocation; } else { - success &= false; + if (!in.getType()->isStruct()) { + bool found = false; + for (auto outIt : pipeOut) { + if (outIt.second->getType()->isStruct()) { + unsigned int baseLoc = outIt.second->getType()->getQualifier().hasLocation() ? outIt.second->getType()->getQualifier().layoutLocation : -1; + for (int j = 0; j < outIt.second->getType()->getStruct()->size(); j++) { + baseLoc = (*outIt.second->getType()->getStruct())[j].type->getQualifier().hasLocation() ? + (*outIt.second->getType()->getStruct())[j].type->getQualifier().layoutLocation : baseLoc; + if (baseLoc != -1) { + if (baseLoc == in.getType()->getQualifier().layoutLocation) { + found = true; + break; + } + baseLoc += glslang::TIntermediate::computeTypeLocationSize(*(*outIt.second->getType()->getStruct())[j].type, EShLangVertex); + } + } + if (found) { + break; + } + } + } + success &= found; + } + else { + unsigned int baseLoc = in.getType()->getQualifier().hasLocation() ? in.getType()->getQualifier().layoutLocation : -1; + for (int j = 0; j < in.getType()->getStruct()->size(); j++) { + baseLoc = (*in.getType()->getStruct())[j].type->getQualifier().hasLocation() ? + (*in.getType()->getStruct())[j].type->getQualifier().layoutLocation : baseLoc; + if (baseLoc != -1) { + bool isMemberFound = false; + for (auto outIt : pipeOut) { + if (baseLoc == outIt.second->getType()->getQualifier().layoutLocation) { + isMemberFound = true; + break; + } + } + if (!isMemberFound) { + success &= false; + break; + } + baseLoc += glslang::TIntermediate::computeTypeLocationSize(*(*in.getType()->getStruct())[j].type, EShLangVertex); + } + } + } } } } @@ -295,6 +338,10 @@ INSTANTIATE_TEST_SUITE_P( ::testing::ValuesIn(std::vector({ {{"iomap.crossStage.vert", "iomap.crossStage.frag" }, Semantics::OpenGL}, {{"iomap.crossStage.2.vert", "iomap.crossStage.2.geom", "iomap.crossStage.2.frag" }, Semantics::OpenGL}, + {{"iomap.blockOutVariableIn.vert", "iomap.blockOutVariableIn.frag"}, Semantics::OpenGL}, + {{"iomap.variableOutBlockIn.vert", "iomap.variableOutBlockIn.frag"}, Semantics::OpenGL}, + {{"iomap.blockOutVariableIn.2.vert", "iomap.blockOutVariableIn.geom"}, Semantics::OpenGL}, + {{"iomap.variableOutBlockIn.2.vert", "iomap.variableOutBlockIn.geom"}, Semantics::OpenGL}, // vulkan semantics {{"iomap.crossStage.vk.vert", "iomap.crossStage.vk.geom", "iomap.crossStage.vk.frag" }, Semantics::Vulkan}, })) From eebb48f5fc8631830e04e6ac1de623413008a526 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Mon, 15 Nov 2021 10:44:08 -0500 Subject: [PATCH 261/365] remove unneeded extra constructions now that pool allocation is fixed --- glslang/MachineIndependent/SymbolTable.cpp | 13 ++----------- 1 file changed, 2 insertions(+), 11 deletions(-) diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index 5b7e27fa26..a3ffa0c467 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -426,12 +426,7 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const symTableLevel->thisLevel = thisLevel; symTableLevel->retargetedSymbols.clear(); for (auto &s : retargetedSymbols) { - // Extra constructions to make sure they use the correct allocator pool - TString newFrom; - newFrom = s.first; - TString newTo; - newTo = s.second; - symTableLevel->retargetedSymbols.push_back({std::move(newFrom), std::move(newTo)}); + symTableLevel->retargetedSymbols.push_back({s.first, s.second}); } std::vector containerCopied(anonId, false); tLevel::const_iterator iter; @@ -462,11 +457,7 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const TSymbol* sym = symTableLevel->find(s.second); if (!sym) continue; - - // Need to declare and assign so newS is using the correct pool allocator - TString newS; - newS = s.first; - symTableLevel->insert(newS, sym); + symTableLevel->insert(s.first, sym); } return symTableLevel; From bee91eb479ee38ce4f268c363154e5175c7a9bd0 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Wed, 17 Nov 2021 23:32:27 +0800 Subject: [PATCH 262/365] Fix an issue of spirv_type used in local variable definitions We previously use createOp() in SPV builder to create type declaration. However, all type declarations should be placed in const-type-variable declaration section. And duplicated type defintions ought to be avoided. We now make a method in SPV builder to perform this operation with a more general solution: makeGenericType(). --- SPIRV/GlslangToSpv.cpp | 25 +++++------ SPIRV/SpvBuilder.cpp | 31 +++++++++++++ SPIRV/SpvBuilder.h | 1 + .../spv.intrinsicsSpirvType.rgen.out | 4 +- .../spv.intrinsicsSpirvTypeLocalVar.vert.out | 43 +++++++++++++++++++ Test/spv.intrinsicsSpirvTypeLocalVar.vert | 14 ++++++ gtests/Spv.FromFile.cpp | 1 + 7 files changed, 103 insertions(+), 16 deletions(-) create mode 100644 Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out create mode 100644 Test/spv.intrinsicsSpirvTypeLocalVar.vert diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 43aba9cb41..3a906189ad 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -4148,23 +4148,23 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty const auto& spirvType = type.getSpirvType(); const auto& spirvInst = spirvType.spirvInst; - std::vector operands; + std::vector operands; for (const auto& typeParam : spirvType.typeParams) { // Constant expression if (typeParam.constant->isLiteral()) { if (typeParam.constant->getBasicType() == glslang::EbtFloat) { float floatValue = static_cast(typeParam.constant->getConstArray()[0].getDConst()); unsigned literal = *reinterpret_cast(&floatValue); - operands.push_back(literal); + operands.push_back({false, literal}); } else if (typeParam.constant->getBasicType() == glslang::EbtInt) { unsigned literal = typeParam.constant->getConstArray()[0].getIConst(); - operands.push_back(literal); + operands.push_back({false, literal}); } else if (typeParam.constant->getBasicType() == glslang::EbtUint) { unsigned literal = typeParam.constant->getConstArray()[0].getUConst(); - operands.push_back(literal); + operands.push_back({false, literal}); } else if (typeParam.constant->getBasicType() == glslang::EbtBool) { unsigned literal = typeParam.constant->getConstArray()[0].getBConst(); - operands.push_back(literal); + operands.push_back({false, literal}); } else if (typeParam.constant->getBasicType() == glslang::EbtString) { auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str(); unsigned literal = 0; @@ -4176,7 +4176,7 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty *(literalPtr++) = ch; ++charCount; if (charCount == 4) { - operands.push_back(literal); + operands.push_back({false, literal}); literalPtr = reinterpret_cast(&literal); charCount = 0; } @@ -4186,20 +4186,17 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty if (charCount > 0) { for (; charCount < 4; ++charCount) *(literalPtr++) = 0; - operands.push_back(literal); + operands.push_back({false, literal}); } } else assert(0); // Unexpected type } else - operands.push_back(createSpvConstant(*typeParam.constant)); + operands.push_back({true, createSpvConstant(*typeParam.constant)}); } - if (spirvInst.set == "") - spvType = builder.createOp(static_cast(spirvInst.id), spv::NoType, operands); - else { - spvType = builder.createBuiltinCall( - spv::NoType, getExtBuiltins(spirvInst.set.c_str()), spirvInst.id, operands); - } + assert(spirvInst.set == ""); // Currently, couldn't be extended instructions. + spvType = builder.makeGenericType(static_cast(spirvInst.id), operands); + break; } #endif diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index e83306ebcb..838f916a06 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -427,6 +427,37 @@ Id Builder::makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols) return type->getResultId(); } +Id Builder::makeGenericType(spv::Op opcode, std::vector& operands) +{ + // try to find it + Instruction* type; + for (int t = 0; t < (int)groupedTypes[opcode].size(); ++t) { + type = groupedTypes[opcode][t]; + if (type->getNumOperands() != operands.size()) + continue; // Number mismatch, find next + + bool match = true; + for (int op = 0; match && op < operands.size(); ++op) { + match = (operands[op].isId ? type->getIdOperand(op) : type->getImmediateOperand(op)) == operands[op].word; + } + if (match) + return type->getResultId(); + } + + // not found, make it + type = new Instruction(getUniqueId(), NoType, opcode); + for (int op = 0; op < operands.size(); ++op) { + if (operands[op].isId) + type->addIdOperand(operands[op].word); + else + type->addImmediateOperand(operands[op].word); + } + groupedTypes[opcode].push_back(type); + constantsTypesGlobals.push_back(std::unique_ptr(type)); + module.mapInstruction(type); + + return type->getResultId(); +} // TODO: performance: track arrays per stride // If a stride is supplied (non-zero) make an array. diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index 251b9ee823..c72d9b287e 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -181,6 +181,7 @@ class Builder { Id makeSamplerType(); Id makeSampledImageType(Id imageType); Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols); + Id makeGenericType(spv::Op opcode, std::vector& operands); // accelerationStructureNV type Id makeAccelerationStructureType(); diff --git a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out index ac0c9464a6..021e7a6db9 100644 --- a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out +++ b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out @@ -22,7 +22,9 @@ Validation failed Decorate 11(as) Binding 0 2: TypeVoid 3: TypeFunction 2 + 6: TypeRayQueryKHR 7: TypePointer Function 6 + 9: TypeAccelerationStructureKHR 10: TypePointer UniformConstant 9 11(as): 10(ptr) Variable UniformConstant 13: TypeInt 32 0 @@ -36,8 +38,6 @@ Validation failed 4(main): 2 Function None 3 5: Label 8(rq): 7(ptr) Variable Function - 6: TypeRayQueryKHR - 9: TypeAccelerationStructureKHR 12: 9 Load 11(as) RayQueryInitializeKHR 8(rq) 12 14 14 18 17 20 19 RayQueryTerminateKHR 8(rq) diff --git a/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out b/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out new file mode 100644 index 0000000000..75515be080 --- /dev/null +++ b/Test/baseResults/spv.intrinsicsSpirvTypeLocalVar.vert.out @@ -0,0 +1,43 @@ +spv.intrinsicsSpirvTypeLocalVar.vert +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 22 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" + Source GLSL 460 + SourceExtension "GL_EXT_spirv_intrinsics" + Name 4 "main" + Name 10 "func(spv-t1;" + Name 9 "emptyStruct" + Name 13 "size" + Name 16 "dummy" + Name 18 "param" + Decorate 13(size) SpecId 9 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeStruct + 7: TypePointer Function 6(struct) + 8: TypeFunction 2 7(ptr) + 12: TypeInt 32 1 + 13(size): 12(int) SpecConstant 9 + 14: TypeArray 6(struct) 13(size) + 15: TypePointer Function 14 + 17: 12(int) Constant 1 + 4(main): 2 Function None 3 + 5: Label + 16(dummy): 15(ptr) Variable Function + 18(param): 7(ptr) Variable Function + 19: 7(ptr) AccessChain 16(dummy) 17 + 20: 6(struct) Load 19 + Store 18(param) 20 + 21: 2 FunctionCall 10(func(spv-t1;) 18(param) + Return + FunctionEnd +10(func(spv-t1;): 2 Function None 8 + 9(emptyStruct): 7(ptr) FunctionParameter + 11: Label + Return + FunctionEnd diff --git a/Test/spv.intrinsicsSpirvTypeLocalVar.vert b/Test/spv.intrinsicsSpirvTypeLocalVar.vert new file mode 100644 index 0000000000..203d900730 --- /dev/null +++ b/Test/spv.intrinsicsSpirvTypeLocalVar.vert @@ -0,0 +1,14 @@ +#version 460 core + +#extension GL_EXT_spirv_intrinsics: enable + +layout(constant_id = 9) const int size = 9; + +#define EmptyStruct spirv_type(id = 30) +void func(EmptyStruct emptyStruct) {} + +void main() +{ + EmptyStruct dummy[size]; + func(dummy[1]); +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index ef11764048..460c1d220c 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -373,6 +373,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.intrinsicsSpirvLiteral.vert", "spv.intrinsicsSpirvStorageClass.rchit", "spv.intrinsicsSpirvType.rgen", + "spv.intrinsicsSpirvTypeLocalVar.vert", "spv.invariantAll.vert", "spv.layer.tese", "spv.layoutNested.vert", From 3e9e60af8636cd5a4740bc8244c72605cb1df3a0 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Mon, 22 Nov 2021 20:05:06 +0800 Subject: [PATCH 263/365] Remove the test spv.intrinsicsSpecConst According to current SPIR-V spec, we couldn't write a valid case that references OpExecutionModeId and OpDecorateId. --- SPIRV/doc.cpp | 6 ++++ .../spv.intrinsicsSpecConst.vert.out | 35 ------------------- Test/spv.intrinsicsSpecConst.vert | 14 -------- gtests/Spv.FromFile.cpp | 1 - 4 files changed, 6 insertions(+), 50 deletions(-) delete mode 100644 Test/baseResults/spv.intrinsicsSpecConst.vert.out delete mode 100644 Test/spv.intrinsicsSpecConst.vert diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index dbdf7077a6..9a569e0d7f 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -900,6 +900,12 @@ const char* CapabilityString(int info) case CapabilityDeviceGroup: return "DeviceGroup"; case CapabilityMultiView: return "MultiView"; + case CapabilityDenormPreserve: return "DenormPreserve"; + case CapabilityDenormFlushToZero: return "DenormFlushToZero"; + case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case CapabilityRoundingModeRTE: return "RoundingModeRTE"; + case CapabilityRoundingModeRTZ: return "RoundingModeRTZ"; + case CapabilityStencilExportEXT: return "StencilExportEXT"; case CapabilityFloat16ImageAMD: return "Float16ImageAMD"; diff --git a/Test/baseResults/spv.intrinsicsSpecConst.vert.out b/Test/baseResults/spv.intrinsicsSpecConst.vert.out deleted file mode 100644 index 11751d6405..0000000000 --- a/Test/baseResults/spv.intrinsicsSpecConst.vert.out +++ /dev/null @@ -1,35 +0,0 @@ -spv.intrinsicsSpecConst.vert -Validation failed -// Module Version 10000 -// Generated by (magic number): 8000a -// Id's are bound by 13 - - Capability Shader - 1: ExtInstImport "GLSL.std.450" - MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 10 - ExecutionModeId 4 DenormFlushToZero 7 - Source GLSL 450 - SourceExtension "GL_EXT_spirv_intrinsics" - Name 4 "main" - Name 7 "targetWidth" - Name 10 "pointSize" - Name 11 "builtIn" - Decorate 7(targetWidth) SpecId 5 - Decorate 10(pointSize) Location 0 - Decorate 11(builtIn) SpecId 6 - DecorateId 10(pointSize) BuiltIn 11(builtIn) - 2: TypeVoid - 3: TypeFunction 2 - 6: TypeInt 32 0 - 7(targetWidth): 6(int) SpecConstant 32 - 8: TypeFloat 32 - 9: TypePointer Output 8(float) - 10(pointSize): 9(ptr) Variable Output - 11(builtIn): 6(int) SpecConstant 1 - 12: 8(float) Constant 1082130432 - 4(main): 2 Function None 3 - 5: Label - Store 10(pointSize) 12 - Return - FunctionEnd diff --git a/Test/spv.intrinsicsSpecConst.vert b/Test/spv.intrinsicsSpecConst.vert deleted file mode 100644 index 19cc5ef4fe..0000000000 --- a/Test/spv.intrinsicsSpecConst.vert +++ /dev/null @@ -1,14 +0,0 @@ -#version 450 core - -#extension GL_EXT_spirv_intrinsics: enable - -layout(constant_id = 5) const uint targetWidth = 32; -spirv_execution_mode_id(4460/*=DenormFlushToZero*/, targetWidth); - -layout(constant_id = 6) const uint builtIn = 1; -spirv_decorate_id(11/*=BuiltIn*/, builtIn) out float pointSize; - -void main() -{ - pointSize = 4.0; -} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 460c1d220c..885707c255 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -365,7 +365,6 @@ INSTANTIATE_TEST_SUITE_P( "spv.int64.frag", "spv.intcoopmat.comp", "spv.intOps.vert", - "spv.intrinsicsSpecConst.vert", "spv.intrinsicsSpirvByReference.vert", "spv.intrinsicsSpirvDecorate.frag", "spv.intrinsicsSpirvExecutionMode.frag", From 509a39212d518cb472d7ff93066feb7ac2bd9883 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Fri, 17 Sep 2021 14:06:48 -0600 Subject: [PATCH 264/365] Migrate travis to github actions --- .github/workflows/continuous_deployment.yml | 168 +++++++++++++++++++ .github/workflows/continuous_integration.yml | 157 +++++++++++++++++ .github/workflows/deploy.js | 73 ++++++++ .travis.yml | 141 ---------------- README.md | 5 +- license-checker.cfg | 2 + 6 files changed, 403 insertions(+), 143 deletions(-) create mode 100644 .github/workflows/continuous_deployment.yml create mode 100644 .github/workflows/continuous_integration.yml create mode 100644 .github/workflows/deploy.js delete mode 100644 .travis.yml diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml new file mode 100644 index 0000000000..86f439db8a --- /dev/null +++ b/.github/workflows/continuous_deployment.yml @@ -0,0 +1,168 @@ +# NOTE: This workflow was ported from Travis. +# Travis was using Ubuntu 14.04. Ubuntu 14.04 is not supportted by GitHub workflows. Ubuntu 20.04 is recommended. +# Travis was using Clang 3.6. The earliest version support by Ubuntu 20.04 is Clang 6.0. +# Travis was caching the clang package. APT package caching is not natively supported by GitHub actions/cache. +# Travis was using Mac OS X 10.13.6 / Xcode 9.4.1 / LLVM 9.1.0 + +# NOTE: The following documentation may be useful to maintainers of this workflow. +# Github actions: https://docs.github.com/en/actions +# Github github-script action: https://github.com/actions/github-script +# GitHub REST API: https://docs.github.com/en/rest +# Octokit front-end to the GitHub REST API: https://octokit.github.io/rest.js/v18 +# Octokit endpoint methods: https://github.com/octokit/plugin-rest-endpoint-methods.js/tree/master/docs/repos + +# TODO: Use actions/upload-artifact and actions/download-artifact to simplify deployment. +# TODO: Use composite actions to refactor redundant code. + +name: Continuous Deployment + +on: + workflow_dispatch: + push: + branches: + - master + +jobs: + linux: + runs-on: ${{matrix.os.genus}} + strategy: + fail-fast: false + matrix: + os: [{genus: ubuntu-20.04, family: linux}] + compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.7' + - name: Install Ubuntu Package Dependencies + run: | + sudo apt-get -qq update + sudo apt-get install -y clang-6.0 + - name: Install GoogleTest + run: | + # check out pre-breakage version of googletest; can be deleted when + # issue 3128 is fixed + # git clone --depth=1 https://github.com/google/googletest.git External/googletest + mkdir -p External/googletest + cd External/googletest + git init + git remote add origin https://github.com/google/googletest.git + git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725 + git reset --hard FETCH_HEAD + cd ../.. + - name: Update Glslang Sources + run: | + ./update_glslang_sources.py + - name: Build + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + run: | + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install .. + make -j4 install + - name: Test + run: | + cd build + ctest --output-on-failure && + cd ../Test && ./runtests + - name: Zip + if: ${{ matrix.compiler.cc == 'clang' }} + env: + ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + run: | + cd build/install + zip ${ARCHIVE} \ + bin/glslangValidator \ + include/glslang/* \ + lib/libGenericCodeGen${SUFFIX}.a \ + lib/libglslang${SUFFIX}.a \ + lib/libglslang-default-resource-limits${SUFFIX}.a \ + lib/libHLSL${SUFFIX}.a \ + lib/libMachineIndependent${SUFFIX}.a \ + lib/libOGLCompiler${SUFFIX}.a \ + lib/libOSDependent${SUFFIX}.a \ + lib/libSPIRV${SUFFIX}.a \ + lib/libSPVRemapper${SUFFIX}.a \ + lib/libSPIRV-Tools${SUFFIX}.a \ + lib/libSPIRV-Tools-opt${SUFFIX}.a + - name: Deploy + if: ${{ matrix.compiler.cc == 'clang' }} + env: + ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + uses: actions/github-script@v5 + with: + script: | + const script = require('.github/workflows/deploy.js') + await script({github, context, core}) + + macos: + runs-on: ${{matrix.os.genus}} + strategy: + fail-fast: false + matrix: + os: [{genus: macos-10.15, family: osx}] + compiler: [{cc: clang, cxx: clang++}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.7' + - name: Install GoogleTest + run: | + # check out pre-breakage version of googletest; can be deleted when + # issue 3128 is fixed + # git clone --depth=1 https://github.com/google/googletest.git External/googletest + mkdir -p External/googletest + cd External/googletest + git init + git remote add origin https://github.com/google/googletest.git + git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725 + git reset --hard FETCH_HEAD + cd ../.. + - name: Update Glslang Sources + run: | + ./update_glslang_sources.py + - name: Build + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + run: | + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install .. + make -j4 install + - name: Test + run: | + cd build + ctest --output-on-failure && + cd ../Test && ./runtests + - name: Zip + env: + ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + run: | + cd build/install + zip ${ARCHIVE} \ + bin/glslangValidator \ + include/glslang/* \ + lib/libGenericCodeGen${SUFFIX}.a \ + lib/libglslang${SUFFIX}.a \ + lib/libglslang-default-resource-limits${SUFFIX}.a \ + lib/libHLSL${SUFFIX}.a \ + lib/libMachineIndependent${SUFFIX}.a \ + lib/libOGLCompiler${SUFFIX}.a \ + lib/libOSDependent${SUFFIX}.a \ + lib/libSPIRV${SUFFIX}.a \ + lib/libSPVRemapper${SUFFIX}.a \ + lib/libSPIRV-Tools${SUFFIX}.a \ + lib/libSPIRV-Tools-opt${SUFFIX}.a + - name: Deploy + env: + ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + uses: actions/github-script@v5 + with: + script: | + const script = require('.github/workflows/deploy.js') + await script({github, context, core}) diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml new file mode 100644 index 0000000000..feec0dc227 --- /dev/null +++ b/.github/workflows/continuous_integration.yml @@ -0,0 +1,157 @@ +# NOTE: This workflow was ported from Travis. +# Travis was using Ubuntu 14.04. Ubuntu 14.04 is not supportted by GitHub workflows. Ubuntu 20.04 is recommended. +# Travis was using Clang 3.6. The earliest version support by Ubuntu 20.04 is Clang 6.0. +# Travis was caching the clang package. APT package caching is not natively supported by GitHub actions/cache. +# Travis was using Mac OS X 10.13.6 / Xcode 9.4.1 / LLVM 9.1.0 +# +name: Continuous Integration + +on: + workflow_dispatch: + pull_request: + branches: + - master + +jobs: + linux: + runs-on: ${{matrix.os}} + strategy: + fail-fast: false + matrix: + os: [ubuntu-20.04] + compiler: [{cc: clang, cxx: clang++}, {cc: gcc, cxx: g++}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.7' + - name: Install Ubuntu Package Dependencies + run: | + sudo apt-get -qq update + sudo apt-get install -y clang-6.0 + - name: Install GoogleTest + run: | + # check out pre-breakage version of googletest; can be deleted when + # issue 3128 is fixed + # git clone --depth=1 https://github.com/google/googletest.git External/googletest + mkdir -p External/googletest + cd External/googletest + git init + git remote add origin https://github.com/google/googletest.git + git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725 + git reset --hard FETCH_HEAD + cd ../.. + - name: Update Glslang Sources + run: | + ./update_glslang_sources.py + - name: Build + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + run: | + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install .. + make -j4 install + - name: Test + run: | + cd build + ctest --output-on-failure && + cd ../Test && ./runtests + + macos: + runs-on: ${{matrix.os}} + strategy: + fail-fast: false + matrix: + os: [macos-10.15] + compiler: [{cc: clang, cxx: clang++}] + cmake_build_type: [Debug, Release] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.7' + - name: Install GoogleTest + run: | + # check out pre-breakage version of googletest; can be deleted when + # issue 3128 is fixed + # git clone --depth=1 https://github.com/google/googletest.git External/googletest + mkdir -p External/googletest + cd External/googletest + git init + git remote add origin https://github.com/google/googletest.git + git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725 + git reset --hard FETCH_HEAD + cd ../.. + - name: Update Glslang Sources + run: | + ./update_glslang_sources.py + - name: Build + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + run: | + mkdir build && cd build + cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install .. + make -j4 install + - name: Test + run: | + cd build + ctest --output-on-failure && + cd ../Test && ./runtests + + android: + runs-on: ${{matrix.os}} + strategy: + fail-fast: false + matrix: + os: [ubuntu-20.04] + compiler: [{cc: clang, cxx: clang++}] + cmake_build_type: [Release] + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v2 + with: + python-version: '3.7' + - name: Install Ubuntu Package Dependencies + if: ${{matrix.os == 'ubuntu-20.04'}} + run: | + sudo apt-get -qq update + sudo apt-get install -y clang-6.0 + - name: Install Android NDK + run: | + export ANDROID_NDK=$HOME/android-ndk + git init $ANDROID_NDK + pushd $ANDROID_NDK + git remote add dneto0 https://github.com/dneto0/android-ndk.git + git fetch --depth=1 dneto0 r17b-strip + git checkout FETCH_HEAD + popd + - name: Install GoogleTest + run: | + # check out pre-breakage version of googletest; can be deleted when + # issue 3128 is fixed + # git clone --depth=1 https://github.com/google/googletest.git External/googletest + mkdir -p External/googletest + cd External/googletest + git init + git remote add origin https://github.com/google/googletest.git + git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725 + git reset --hard FETCH_HEAD + cd ../.. + - name: Update Glslang Sources + run: | + ./update_glslang_sources.py + - name: Build + env: + CC: ${{matrix.compiler.cc}} + CXX: ${{matrix.compiler.cxx}} + run: | + export ANDROID_NDK=$HOME/android-ndk + export TOOLCHAIN_PATH=$ANDROID_NDK/build/cmake/android.toolchain.cmake + echo $ANDROID_NDK + echo $TOOLCHAIN_PATH + mkdir build && cd build + cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_PATH} -DANDROID_NATIVE_API_LEVEL=android-14 -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DANDROID_ABI="armeabi-v7a with NEON" -DBUILD_TESTING=OFF .. + make -j4 diff --git a/.github/workflows/deploy.js b/.github/workflows/deploy.js new file mode 100644 index 0000000000..82ebb1bd9e --- /dev/null +++ b/.github/workflows/deploy.js @@ -0,0 +1,73 @@ +module.exports = async ({github, context, core}) => { + try { + await github.rest.git.updateRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: 'tags/master-tot', + sha: context.sha + }) + } catch (error) { + core.setFailed(`upload master-tot tag; ${error.name}; ${error.message}`) + } + + let release + try { + release = await github.rest.repos.getReleaseByTag({ + owner: context.repo.owner, + repo: context.repo.repo, + tag: 'master-tot' + }) + } catch (error) { + core.setFailed(`get the master release; ${error.name}; ${error.message}`) + } + + try { + await github.rest.repos.updateRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id + }) + } catch (error) { + core.setFailed(`update the master release; ${error.name}; ${error.message}`) + } + + let release_assets + try { + release_assets = await github.rest.repos.listReleaseAssets({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id + }) + } catch (error) { + core.setFailed(`list release assets; ${error.name}; ${error.message}`) + } + + const { ARCHIVE } = process.env + for (const release_asset of release_assets.data) { + if (release_asset.name === `${ ARCHIVE }`) { + try { + await github.rest.repos.deleteReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + asset_id: release_asset.id + }) + } catch (error) { + core.setFailed(`delete ${ ARCHIVE }; ${error.name}; ${error.message}`) + } + } + } + + try { + const asset_path = `./build/install/${ ARCHIVE }` + const fs = require("fs") + await github.rest.repos.uploadReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id, + name: `${ ARCHIVE }`, + data: fs.readFileSync(asset_path) + }) + } catch (error) { + core.setFailed(`upload ${ ARCHIVE }; ${error.name}; ${error.message}`) + } +} diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index cb0392efea..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,141 +0,0 @@ -# Linux and Mac Build Configuration for Travis - -language: cpp - -os: - - linux - - osx - -# Use Ubuntu 14.04 LTS (Trusty) as the Linux testing environment. -sudo: false -dist: trusty - -env: - global: - - secure: aGFrgzyKp+84hKrGkxVWg8cHV61uqrKEHT38gfSQK6+WS4GfLOyH83p7WnsEBb7AMhzU7LMNFdvOFr6+NaMpVnqRvc40CEG1Q+lNg9Pq9mhIZLowvDrfqTL9kQ+8Nbw5Q6/dg6CTvY7fvRfpfCEmKIUZBRkoKUuHeuM1uy3IupFcdNuL5bSYn3Beo+apSJginh9DI4BLDXFUgBzTRSLLyCX5g3cpaeGGOCr8quJlYx75W6HRck5g9SZuLtUoH9GFEV3l+ZEWB8noErW+J56L03bwNwFuuAh321evw++oQk5KFa8rlDvar3SJ3b1RHB8u/eq5DBYMyaK/fS8+Q7QbGr8diF/wDe68bKO7U9IhpNfExXmczCpExjHomW5TQv4rYdGhygPMfW97aIsPRYyNKcl4fkmb7NDrM8w0Jscdq2g5c2Kz0ItyZoBri/NXLwFQQjaVCs7Pf97TjuMA7mK0GJmDTRzi6SrDYlWMt5BQL3y0CCojyfLIRcTh0CQjQI29s97bLfQrYAxt9GNNFR+HTXRLLrkaAlJkPGEPwUywlSfEThnvHLesNxYqemolAYpQT4ithoL4GehGIHmaxsW295aKVhuRf8K9eBODNqrfblvM42UHhjntT+92ZnQ/Gkq80GqaMxnxi4PO5FyPIxt0r981b54YBkWi8YA4P7w5pNI= - matrix: - - GLSLANG_BUILD_TYPE=Release - - GLSLANG_BUILD_TYPE=Debug - -compiler: - - clang - - gcc - -matrix: - fast_finish: true # Show final status immediately if a test fails. - exclude: - # Skip GCC builds on Mac OS X. - - os: osx - compiler: gcc - include: - # Additional build using Android NDK. - - env: BUILD_NDK=ON - -cache: - apt: true - -branches: - only: - - master - -addons: - apt: - packages: - - clang-3.6 - -install: - # Make sure that clang-3.6 is selected on Linux. - - if [[ "$TRAVIS_OS_NAME" == "linux" && "$CC" == "clang" ]]; then - export CC=clang-3.6 CXX=clang++-3.6; - fi - # Download a recent Android NDK and use its android.toolchain.cmake file. - - if [[ "$BUILD_NDK" == "ON" ]]; then - export ANDROID_NDK=$HOME/android-ndk; - git init $ANDROID_NDK; - pushd $ANDROID_NDK; - git remote add dneto0 https://github.com/dneto0/android-ndk.git; - git fetch --depth=1 dneto0 r17b-strip; - git checkout FETCH_HEAD; - popd; - export TOOLCHAIN_PATH=$ANDROID_NDK/build/cmake/android.toolchain.cmake; - fi - -before_script: - # check out pre-breakage version of googletest; can be deleted when - # issue 3128 is fixed - # git clone --depth=1 https://github.com/google/googletest.git External/googletest - - mkdir -p External/googletest - - cd External/googletest - - git init - - git remote add origin https://github.com/google/googletest.git - - git fetch --depth 1 origin 0c400f67fcf305869c5fb113dd296eca266c9725 - - git reset --hard FETCH_HEAD - - cd ../.. - # get spirv-tools and spirv-headers - - ./update_glslang_sources.py - -script: - - mkdir build && cd build - # For Android, do release building using NDK without testing. - # Use android-14, the oldest native API level supporeted by NDK r17b. - # We can use newer API levels if we want. - # For Linux and macOS, do debug/release building with testing. - - if [[ "$BUILD_NDK" == "ON" ]]; then - cmake -DCMAKE_TOOLCHAIN_FILE=${TOOLCHAIN_PATH} - -DANDROID_NATIVE_API_LEVEL=android-14 - -DCMAKE_BUILD_TYPE=Release - -DANDROID_ABI="armeabi-v7a with NEON" - -DBUILD_TESTING=OFF ..; - make -j4; - else - cmake -DCMAKE_BUILD_TYPE=${GLSLANG_BUILD_TYPE} - -DCMAKE_INSTALL_PREFIX=`pwd`/install ..; - make -j4 install; - ctest --output-on-failure && - cd ../Test && ./runtests; - fi - -after_success: - # For debug build, the generated dll has a postfix "d" in its name. - - if [[ "${GLSLANG_BUILD_TYPE}" == "Debug" ]]; then - export SUFFIX="d"; - else - export SUFFIX=""; - fi - # Create tarball for deployment - - if [[ ${CC} == clang* && "${BUILD_NDK}" != "ON" ]]; then - cd ../build/install; - export TARBALL=glslang-master-${TRAVIS_OS_NAME}-${GLSLANG_BUILD_TYPE}.zip; - zip ${TARBALL} - bin/glslangValidator - include/glslang/* - lib/libGenericCodeGen${SUFFIX}.a - lib/libglslang${SUFFIX}.a - lib/libglslang-default-resource-limits${SUFFIX}.a - lib/libHLSL${SUFFIX}.a - lib/libMachineIndependent${SUFFIX}.a - lib/libOGLCompiler${SUFFIX}.a - lib/libOSDependent${SUFFIX}.a - lib/libSPIRV${SUFFIX}.a - lib/libSPVRemapper${SUFFIX}.a - lib/libSPIRV-Tools${SUFFIX}.a - lib/libSPIRV-Tools-opt${SUFFIX}.a; - fi - -before_deploy: - # Tag the current top of the tree as "master-tot". - # Travis CI replies on the tag name to properly push to GitHub Releases. - - git config --global user.name "Travis CI" - - git config --global user.email "builds@travis-ci.org" - - git tag -f master-tot - - git push -q -f https://${glslangtoken}@github.com/KhronosGroup/glslang --tags - -deploy: - provider: releases - api_key: ${glslangtoken} - on: - branch: master - condition: ${CC} == clang* && ${BUILD_NDK} != ON - file: ${TARBALL} - skip_cleanup: true - overwrite: true diff --git a/README.md b/README.md index 9b8cfb3f0f..9a5ef3b89c 100644 --- a/README.md +++ b/README.md @@ -19,8 +19,9 @@ See issue #1964. If people are only using this location to get spirv.hpp, I recommend they get that from [SPIRV-Headers](https://github.com/KhronosGroup/SPIRV-Headers) instead. -[![Build Status](https://travis-ci.org/KhronosGroup/glslang.svg?branch=master)](https://travis-ci.org/KhronosGroup/glslang) -[![Build status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master) +[![appveyor status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master) +![Continuous Integration](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_integration.yml/badge.svg) +![Continuous Deployment](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_deployment.yml/badge.svg) # Glslang Components and Status diff --git a/license-checker.cfg b/license-checker.cfg index 409f18eff9..51ce2762c8 100644 --- a/license-checker.cfg +++ b/license-checker.cfg @@ -15,6 +15,8 @@ "_config.yml", ".*", + ".github/workflows/*.yml", + ".github/workflows/*.js", "CMakeSettings.json", "known_good_khr.json", "known_good.json", From fe54126c05863564eab8325b2725f65d96c450b6 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Tue, 23 Nov 2021 16:40:45 +0800 Subject: [PATCH 265/365] Fix an issue of spirv_by_reference When using this qualifier for a parameter, we make it as a pointer. However, the function TranslateStorageClass() is therefore called and the storage class should only be set to Function when it is invoked to translate parameter types rather than actual argument types. --- SPIRV/GlslangToSpv.cpp | 6 ++++-- .../spv.intrinsicsSpirvLiteral.vert.out | 20 +++++++++---------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 3a906189ad..e471b9ffbe 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1256,8 +1256,10 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T if (type.getBasicType() == glslang::EbtRayQuery) return spv::StorageClassPrivate; #ifndef GLSLANG_WEB - if (type.getQualifier().isSpirvByReference()) - return spv::StorageClassFunction; + if (type.getQualifier().isSpirvByReference()) { + if (type.getQualifier().isParamInput() || type.getQualifier().isParamOutput()) + return spv::StorageClassFunction; + } #endif if (type.getQualifier().isPipeInput()) return spv::StorageClassInput; diff --git a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out index 68ad949bc9..096cc61179 100644 --- a/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out +++ b/Test/baseResults/spv.intrinsicsSpirvLiteral.vert.out @@ -1,30 +1,30 @@ spv.intrinsicsSpirvLiteral.vert -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 12 +// Id's are bound by 13 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" + EntryPoint Vertex 4 "main" 9 11 Source GLSL 450 SourceExtension "GL_EXT_spirv_intrinsics" Name 4 "main" Name 9 "vec4Out" - Name 10 "vec4In" + Name 11 "vec4In" Decorate 9(vec4Out) Location 1 - Decorate 10(vec4In) Location 0 + Decorate 11(vec4In) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 7: TypeVector 6(float) 4 - 8: TypePointer Function 7(fvec4) + 8: TypePointer Output 7(fvec4) + 9(vec4Out): 8(ptr) Variable Output + 10: TypePointer Input 7(fvec4) + 11(vec4In): 10(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 9(vec4Out): 8(ptr) Variable Function - 10(vec4In): 8(ptr) Variable Function - 11: 7(fvec4) Load 10(vec4In) None - Store 9(vec4Out) 11 Volatile + 12: 7(fvec4) Load 11(vec4In) None + Store 9(vec4Out) 12 Volatile Return FunctionEnd From 6c1db7fd6c6790fe9ba5a45c046d9dc6db69f206 Mon Sep 17 00:00:00 2001 From: Rex Xu Date: Wed, 24 Nov 2021 17:37:52 +0800 Subject: [PATCH 266/365] Fix validation failures of test cases regarding GL_EXT_spirv_intrinsics 1. The test cases of OpReadClockKHR is invalid. The return type is unsigned integer rather than signed integer. 2. When SPIR-V decorate or SPIR-V type is specified, we should avoid auto location mapping because the semantics are totally decided by SPIR-V tokens. --- .../spv.intrinsicsSpirvDecorate.frag.out | 8 --- .../spv.intrinsicsSpirvExecutionMode.frag.out | 2 - .../spv.intrinsicsSpirvInstruction.vert.out | 65 ++++++++++--------- .../spv.intrinsicsSpirvType.rgen.out | 2 - Test/spv.intrinsicsSpirvInstruction.vert | 12 ++-- glslang/Include/Types.h | 2 + glslang/MachineIndependent/iomapper.cpp | 13 ++-- 7 files changed, 48 insertions(+), 56 deletions(-) diff --git a/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out index cbd46b0026..c41dcc9c99 100644 --- a/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out +++ b/Test/baseResults/spv.intrinsicsSpirvDecorate.frag.out @@ -1,5 +1,4 @@ spv.intrinsicsSpirvDecorate.frag -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 43 @@ -28,19 +27,12 @@ Validation failed Decorate 10(floatIn) Location 0 Decorate 10(floatIn) ExplicitInterpAMD Decorate 18(vec2Out) Location 1 - Decorate 20(gl_BaryCoordNoPerspAMD) Location 0 Decorate 20(gl_BaryCoordNoPerspAMD) BuiltIn BaryCoordNoPerspAMD - Decorate 22(gl_BaryCoordNoPerspCentroidAMD) Location 1 Decorate 22(gl_BaryCoordNoPerspCentroidAMD) BuiltIn BaryCoordNoPerspCentroidAMD - Decorate 25(gl_BaryCoordNoPerspSampleAMD) Location 2 Decorate 25(gl_BaryCoordNoPerspSampleAMD) BuiltIn BaryCoordNoPerspSampleAMD - Decorate 28(gl_BaryCoordSmoothAMD) Location 3 Decorate 28(gl_BaryCoordSmoothAMD) BuiltIn BaryCoordSmoothAMD - Decorate 31(gl_BaryCoordSmoothCentroidAMD) Location 4 Decorate 31(gl_BaryCoordSmoothCentroidAMD) BuiltIn BaryCoordSmoothCentroidAMD - Decorate 34(gl_BaryCoordSmoothSampleAMD) Location 5 Decorate 34(gl_BaryCoordSmoothSampleAMD) BuiltIn BaryCoordSmoothSampleAMD - Decorate 39(gl_BaryCoordPullModelAMD) Location 6 Decorate 39(gl_BaryCoordPullModelAMD) BuiltIn BaryCoordPullModelAMD 2: TypeVoid 3: TypeFunction 2 diff --git a/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out b/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out index 22bc53b0a8..cdea3820e9 100644 --- a/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out +++ b/Test/baseResults/spv.intrinsicsSpirvExecutionMode.frag.out @@ -1,5 +1,4 @@ spv.intrinsicsSpirvExecutionMode.frag -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 12 @@ -17,7 +16,6 @@ Validation failed Name 4 "main" Name 8 "gl_FragStencilRef" Name 10 "color" - Decorate 8(gl_FragStencilRef) Location 0 Decorate 8(gl_FragStencilRef) BuiltIn FragStencilRefEXT Decorate 10(color) Flat Decorate 10(color) Location 0 diff --git a/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out b/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out index 0e2780cff8..0e95e42b03 100644 --- a/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out +++ b/Test/baseResults/spv.intrinsicsSpirvInstruction.vert.out @@ -1,8 +1,7 @@ spv.intrinsicsSpirvInstruction.vert -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 30 +// Id's are bound by 32 Capability Shader Capability Int64 @@ -10,50 +9,52 @@ Validation failed Extension "SPV_AMD_shader_trinary_minmax" Extension "SPV_KHR_shader_clock" 1: ExtInstImport "GLSL.std.450" - 28: ExtInstImport "SPV_AMD_shader_trinary_minmax" + 30: ExtInstImport "SPV_AMD_shader_trinary_minmax" MemoryModel Logical GLSL450 - EntryPoint Vertex 4 "main" 9 13 18 21 + EntryPoint Vertex 4 "main" 9 15 20 23 Source GLSL 450 SourceExtension "GL_ARB_gpu_shader_int64" SourceExtension "GL_EXT_spirv_intrinsics" Name 4 "main" Name 9 "uvec2Out" - Name 13 "i64Out" - Name 18 "vec2Out" - Name 21 "vec3In" + Name 15 "u64Out" + Name 20 "vec2Out" + Name 23 "vec3In" Decorate 9(uvec2Out) Location 0 - Decorate 13(i64Out) Location 1 - Decorate 18(vec2Out) Location 2 - Decorate 21(vec3In) Location 0 + Decorate 15(u64Out) Location 1 + Decorate 20(vec2Out) Location 2 + Decorate 23(vec3In) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 7: TypeVector 6(int) 2 8: TypePointer Output 7(ivec2) 9(uvec2Out): 8(ptr) Variable Output - 11: TypeInt 64 1 - 12: TypePointer Output 11(int64_t) - 13(i64Out): 12(ptr) Variable Output - 15: TypeFloat 32 - 16: TypeVector 15(float) 2 - 17: TypePointer Output 16(fvec2) - 18(vec2Out): 17(ptr) Variable Output - 19: TypeVector 15(float) 3 - 20: TypePointer Input 19(fvec3) - 21(vec3In): 20(ptr) Variable Input + 10: TypeInt 32 1 + 11: 10(int) Constant 1 + 13: TypeInt 64 0 + 14: TypePointer Output 13(int64_t) + 15(u64Out): 14(ptr) Variable Output + 17: TypeFloat 32 + 18: TypeVector 17(float) 2 + 19: TypePointer Output 18(fvec2) + 20(vec2Out): 19(ptr) Variable Output + 21: TypeVector 17(float) 3 + 22: TypePointer Input 21(fvec3) + 23(vec3In): 22(ptr) Variable Input 4(main): 2 Function None 3 5: Label - 10: 7(ivec2) ReadClockKHR - Store 9(uvec2Out) 10 - 14: 11(int64_t) ReadClockKHR - Store 13(i64Out) 14 - 22: 19(fvec3) Load 21(vec3In) - 23: 16(fvec2) VectorShuffle 22 22 0 1 - 24: 19(fvec3) Load 21(vec3In) - 25: 16(fvec2) VectorShuffle 24 24 1 2 - 26: 19(fvec3) Load 21(vec3In) - 27: 16(fvec2) VectorShuffle 26 26 2 0 - 29: 16(fvec2) ExtInst 28(SPV_AMD_shader_trinary_minmax) 1(FMin3AMD) 23 25 27 - Store 18(vec2Out) 29 + 12: 7(ivec2) ReadClockKHR 11 + Store 9(uvec2Out) 12 + 16: 13(int64_t) ReadClockKHR 11 + Store 15(u64Out) 16 + 24: 21(fvec3) Load 23(vec3In) + 25: 18(fvec2) VectorShuffle 24 24 0 1 + 26: 21(fvec3) Load 23(vec3In) + 27: 18(fvec2) VectorShuffle 26 26 1 2 + 28: 21(fvec3) Load 23(vec3In) + 29: 18(fvec2) VectorShuffle 28 28 2 0 + 31: 18(fvec2) ExtInst 30(SPV_AMD_shader_trinary_minmax) 1(FMin3AMD) 25 27 29 + Store 20(vec2Out) 31 Return FunctionEnd diff --git a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out index 021e7a6db9..f3937b495a 100644 --- a/Test/baseResults/spv.intrinsicsSpirvType.rgen.out +++ b/Test/baseResults/spv.intrinsicsSpirvType.rgen.out @@ -1,5 +1,4 @@ spv.intrinsicsSpirvType.rgen -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 21 @@ -17,7 +16,6 @@ Validation failed Name 4 "main" Name 8 "rq" Name 11 "as" - Decorate 11(as) Location 0 Decorate 11(as) DescriptorSet 0 Decorate 11(as) Binding 0 2: TypeVoid diff --git a/Test/spv.intrinsicsSpirvInstruction.vert b/Test/spv.intrinsicsSpirvInstruction.vert index a4efb7da99..2cc1842b2b 100644 --- a/Test/spv.intrinsicsSpirvInstruction.vert +++ b/Test/spv.intrinsicsSpirvInstruction.vert @@ -4,10 +4,10 @@ #extension GL_ARB_gpu_shader_int64: enable spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056) -uvec2 clockRealtime2x32EXT(void); +uvec2 clockRealtime2x32EXT(int); spirv_instruction (extensions = ["SPV_KHR_shader_clock"], capabilities = [5055], id = 5056) -int64_t clockRealtimeEXT(void); +uint64_t clockRealtimeEXT(int); spirv_instruction (extensions = ["SPV_AMD_shader_trinary_minmax"], set = "SPV_AMD_shader_trinary_minmax", id = 1) vec2 min3(vec2 x, vec2 y, vec2 z); @@ -15,12 +15,12 @@ vec2 min3(vec2 x, vec2 y, vec2 z); layout(location = 0) in vec3 vec3In; layout(location = 0) out uvec2 uvec2Out; -layout(location = 1) out int64_t i64Out; +layout(location = 1) out uint64_t u64Out; layout(location = 2) out vec2 vec2Out; void main() { - uvec2Out = clockRealtime2x32EXT(); - i64Out = clockRealtimeEXT(); + uvec2Out = clockRealtime2x32EXT(1); + u64Out = clockRealtimeEXT(1); vec2Out = min3(vec3In.xy, vec3In.yz, vec3In.zx); -} +} \ No newline at end of file diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index e87f2583f2..9c1f960ed2 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -1865,10 +1865,12 @@ class TType { bool isAtomic() const { return false; } bool isCoopMat() const { return false; } bool isReference() const { return false; } + bool isSpirvType() const { return false; } #else bool isAtomic() const { return basicType == EbtAtomicUint; } bool isCoopMat() const { return coopmat; } bool isReference() const { return getBasicType() == EbtReference; } + bool isSpirvType() const { return getBasicType() == EbtSpirvType; } #endif // return true if this type contains any subtype which satisfies the given predicate. diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index 44cb0aee85..a3c53f505d 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -845,7 +845,7 @@ int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEn } // no locations added if already present, a built-in variable, a block, or an opaque if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock || - type.isAtomic() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) { + type.isAtomic() || type.isSpirvType() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) { return ent.newLocation = -1; } // no locations on blocks of built-in variables @@ -873,8 +873,8 @@ int TDefaultIoResolverBase::resolveInOutLocation(EShLanguage stage, TVarEntryInf return ent.newLocation = -1; } - // no locations added if already present, or a built-in variable - if (type.getQualifier().hasLocation() || type.isBuiltIn()) { + // no locations added if already present, a built-in variable, or a variable with SPIR-V decorate + if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getQualifier().hasSprivDecorate()) { return ent.newLocation = -1; } @@ -960,8 +960,8 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf if (type.getQualifier().hasLocation()) { return ent.newLocation = type.getQualifier().layoutLocation; } - // no locations added if already present, or a built-in variable - if (type.isBuiltIn()) { + // no locations added if already present, a built-in variable, or a variable with SPIR-V decorate + if (type.isBuiltIn() || type.getQualifier().hasSprivDecorate()) { return ent.newLocation = -1; } // no locations on blocks of built-in variables @@ -1042,7 +1042,8 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn } else { // no locations added if already present, a built-in variable, a block, or an opaque if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock || - type.isAtomic() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) { + type.isAtomic() || type.isSpirvType() || + (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) { return ent.newLocation = -1; } // no locations on blocks of built-in variables From febbeb4f83a92ae60dceb1d3e85bd45782ecd6c0 Mon Sep 17 00:00:00 2001 From: Hai Nguyen <379079+chaoticbob@users.noreply.github.com> Date: Mon, 29 Nov 2021 16:23:01 -0500 Subject: [PATCH 267/365] Support for automap options and resource binding shift (#2834) * Support for automap options - Added glslang_shader_options_t with enums for auto map bindings and auto map locations. - Added options param to glslang_shader_parse. - Modified glslang_shader_parse to call appropriate auto map function if auto map bits are set. * Refactored auto map for C interface - Added glslang_shader_set_options to independently set options instead of being a param on an existing function. - Added glslang_program_map_io to call mapIO so auto map location actually works. * Added support for shifting resource bindings - Added resource binding shift functions to match C++ interface * Uncommented preprocessor call that was commented out for debugging --- glslang/CInterface/glslang_c_interface.cpp | 28 ++++++++++++++++++++++ glslang/Include/glslang_c_interface.h | 4 ++++ glslang/Include/glslang_c_shader_types.h | 19 +++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 4fdeff7a64..43bb789636 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -346,6 +346,29 @@ GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* in return shader; } +GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base) +{ + const glslang::TResourceType res_type = glslang::TResourceType(res); + shader->shader->setShiftBinding(res_type, base); +} + +GLSLANG_EXPORT void glslang_shader_shift_binding_for_set(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base, unsigned int set) +{ + const glslang::TResourceType res_type = glslang::TResourceType(res); + shader->shader->setShiftBindingForSet(res_type, base, set); +} + +GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int options) +{ + if (options & GLSLANG_SHADER_AUTO_MAP_BINDINGS) { + shader->shader->setAutoMapBindings(true); + } + + if (options & GLSLANG_SHADER_AUTO_MAP_LOCATIONS) { + shader->shader->setAutoMapLocations(true); + } +} + GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) { return shader->preprocessedGLSL.c_str(); @@ -419,6 +442,11 @@ GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages return (int)program->program->link((EShMessages)messages); } +GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program) +{ + return (int)program->program->mapIO(); +} + GLSLANG_EXPORT const char* glslang_program_get_info_log(glslang_program_t* program) { return program->program->getInfoLog(); diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index 4b32e2b85f..14ab6acbc2 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -224,6 +224,9 @@ GLSLANG_EXPORT void glslang_finalize_process(); GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input); GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader); +GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base); +GLSLANG_EXPORT void glslang_shader_shift_binding_for_set(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base, unsigned int set); +GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int options); // glslang_shader_options_t GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input); GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input); GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader); @@ -234,6 +237,7 @@ GLSLANG_EXPORT glslang_program_t* glslang_program_create(); GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program); GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader); GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t +GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program); GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage); GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program); GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*); diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h index f100a9aa82..3da3efb6fa 100644 --- a/glslang/Include/glslang_c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -181,6 +181,25 @@ typedef enum { LAST_ELEMENT_MARKER(GLSLANG_PROFILE_COUNT), } glslang_profile_t; +/* Shader options */ +typedef enum { + GLSLANG_SHADER_DEFAULT_BIT = 0, + GLSLANG_SHADER_AUTO_MAP_BINDINGS = (1 << 0), + GLSLANG_SHADER_AUTO_MAP_LOCATIONS = (2 << 0), + LAST_ELEMENT_MARKER(GLSLANG_SHADER_COUNT), +} glslang_shader_options_t; + +/* TResourceType counterpart */ +typedef enum { + GLSLANG_RESOURCE_TYPE_SAMPLER, + GLSLANG_RESOURCE_TYPE_TEXTURE, + GLSLANG_RESOURCE_TYPE_IMAGE, + GLSLANG_RESOURCE_TYPE_UBO, + GLSLANG_RESOURCE_TYPE_SSBO, + GLSLANG_RESOURCE_TYPE_UAV, + LAST_ELEMENT_MARKER(GLSLANG_RESOURCE_TYPE_COUNT), +} glslang_resource_type_t; + #undef LAST_ELEMENT_MARKER #endif From b8dfe1348a66689f36329bcba77da1b1c0537e57 Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Tue, 30 Nov 2021 04:55:25 -0500 Subject: [PATCH 268/365] Vulkan rules relaxed for glslang C interface - Added vulkan_rules_relaxed flag to glslang_input_t to turn on Vulkan rules relaxed during shader creation. --- glslang/CInterface/glslang_c_interface.cpp | 4 ++++ glslang/Include/glslang_c_interface.h | 1 + 2 files changed, 5 insertions(+) diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 43bb789636..b7d34dcce9 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -343,6 +343,10 @@ GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* in shader->shader->setEnvTarget(c_shader_target_language(input->target_language), c_shader_target_language_version(input->target_language_version)); + if (input->vulkan_rules_relaxed) { + shader->shader->setEnvInputVulkanRulesRelaxed(); + } + return shader; } diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index 14ab6acbc2..1131596964 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -166,6 +166,7 @@ typedef struct glslang_input_s { glslang_profile_t default_profile; int force_default_version_and_profile; int forward_compatible; + int vulkan_rules_relaxed; glslang_messages_t messages; const glslang_resource_t* resource; } glslang_input_t; From f66fb4014955bfe3910eb84e74e2e81f5d49dd3e Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Wed, 1 Dec 2021 03:55:59 -0500 Subject: [PATCH 269/365] Changed Vulkan rules relaxed to use shader options - Removed vulkan_rules_relaxed from glslang_input_s - Added GLSLANG_SHADER_VULKAN_RULES_RELAXED to glslang_shader_options_t - Modified glslang_shader_set_options to handle new enum value - Corrected enum value for GLSLANG_SHADER_AUTO_MAP_LOCATIONS --- glslang/CInterface/glslang_c_interface.cpp | 9 +++++---- glslang/Include/glslang_c_interface.h | 1 - glslang/Include/glslang_c_shader_types.h | 3 ++- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index b7d34dcce9..39eed04cfc 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -343,10 +343,6 @@ GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* in shader->shader->setEnvTarget(c_shader_target_language(input->target_language), c_shader_target_language_version(input->target_language_version)); - if (input->vulkan_rules_relaxed) { - shader->shader->setEnvInputVulkanRulesRelaxed(); - } - return shader; } @@ -371,6 +367,11 @@ GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int opt if (options & GLSLANG_SHADER_AUTO_MAP_LOCATIONS) { shader->shader->setAutoMapLocations(true); } + + if (options & GLSLANG_SHADER_AUTO_MAP_LOCATIONS) { + shader->shader->setEnvInputVulkanRulesRelaxed(); + } + } GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index 1131596964..14ab6acbc2 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -166,7 +166,6 @@ typedef struct glslang_input_s { glslang_profile_t default_profile; int force_default_version_and_profile; int forward_compatible; - int vulkan_rules_relaxed; glslang_messages_t messages; const glslang_resource_t* resource; } glslang_input_t; diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h index 3da3efb6fa..f5c6b564a9 100644 --- a/glslang/Include/glslang_c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -185,7 +185,8 @@ typedef enum { typedef enum { GLSLANG_SHADER_DEFAULT_BIT = 0, GLSLANG_SHADER_AUTO_MAP_BINDINGS = (1 << 0), - GLSLANG_SHADER_AUTO_MAP_LOCATIONS = (2 << 0), + GLSLANG_SHADER_AUTO_MAP_LOCATIONS = (1 << 1), + GLSLANG_SHADER_VULKAN_RULES_RELAXED = (1 << 2), LAST_ELEMENT_MARKER(GLSLANG_SHADER_COUNT), } glslang_shader_options_t; From 58fe3a02b84f4ccf496a36d327683cf03a2600e6 Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Wed, 1 Dec 2021 12:32:02 -0500 Subject: [PATCH 270/365] Fixed copy/paste error --- glslang/CInterface/glslang_c_interface.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 39eed04cfc..43e21c9a4d 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -368,7 +368,7 @@ GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int opt shader->shader->setAutoMapLocations(true); } - if (options & GLSLANG_SHADER_AUTO_MAP_LOCATIONS) { + if (options & GLSLANG_SHADER_VULKAN_RULES_RELAXED) { shader->shader->setEnvInputVulkanRulesRelaxed(); } From 2b3309aab6c3457492bf25c87ab96a1668ac4333 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Wed, 1 Dec 2021 11:40:11 -0700 Subject: [PATCH 271/365] Remove unnecessary badge I had copy/pasted this badge without really thinking about it's usefulness. It is unnecessary. --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 9a5ef3b89c..1eba3c6066 100644 --- a/README.md +++ b/README.md @@ -20,7 +20,6 @@ See issue #1964. If people are only using this location to get spirv.hpp, I recommend they get that from [SPIRV-Headers](https://github.com/KhronosGroup/SPIRV-Headers) instead. [![appveyor status](https://ci.appveyor.com/api/projects/status/q6fi9cb0qnhkla68/branch/master?svg=true)](https://ci.appveyor.com/project/Khronoswebmaster/glslang/branch/master) -![Continuous Integration](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_integration.yml/badge.svg) ![Continuous Deployment](https://github.com/KhronosGroup/glslang/actions/workflows/continuous_deployment.yml/badge.svg) # Glslang Components and Status From e306f0292713961eaf3463c2a3e86c56e0bd00df Mon Sep 17 00:00:00 2001 From: Ashwin Lele Date: Mon, 6 Dec 2021 13:09:03 -0800 Subject: [PATCH 272/365] Do not output location decoration for certain variables in ray tracing storage classes. --- SPIRV/GlslangToSpv.cpp | 14 ++++++++++++-- .../spv.ClosestHitShaderMotion.rchit.out | 1 - Test/baseResults/spv.MissShaderMotion.rmiss.out | 1 - Test/baseResults/spv.RayGenShaderMotion.rgen.out | 1 - Test/baseResults/spv.ext.AnyHitShader.rahit.out | 1 - .../baseResults/spv.ext.ClosestHitShader.rchit.out | 2 -- .../spv.ext.ClosestHitShader_Subgroup.rchit.out | 1 - Test/baseResults/spv.ext.MissShader.rmiss.out | 2 -- Test/baseResults/spv.ext.RayCallable.rcall.out | 2 -- Test/baseResults/spv.ext.RayConstants.rgen.out | 1 - Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out | 1 - .../spv.ext.RayGenSBTlayout140.rgen.out | 1 - .../spv.ext.RayGenSBTlayout430.rgen.out | 1 - .../spv.ext.RayGenSBTlayoutscalar.rgen.out | 1 - Test/baseResults/spv.ext.RayGenShader.rgen.out | 1 - Test/baseResults/spv.ext.RayGenShader11.rgen.out | 1 - .../baseResults/spv.ext.RayGenShaderArray.rgen.out | 1 - Test/baseResults/spv.ext.World3x4.rahit.out | 1 - 18 files changed, 12 insertions(+), 22 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index e471b9ffbe..2a83b92538 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -8716,8 +8716,18 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset); } - if (symbol->getQualifier().hasLocation()) - builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation); + if (symbol->getQualifier().hasLocation()) { + if (!(glslangIntermediate->isRayTracingStage() && glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing) + && (builder.getStorageClass(id) == spv::StorageClassRayPayloadKHR || + builder.getStorageClass(id) == spv::StorageClassIncomingRayPayloadKHR || + builder.getStorageClass(id) == spv::StorageClassCallableDataKHR || + builder.getStorageClass(id) == spv::StorageClassIncomingCallableDataKHR))) { + // Location values are used to link TraceRayKHR and ExecuteCallableKHR to corresponding variables + // but are not valid in SPIRV since they are supported only for Input/Output Storage classes. + builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation); + } + } + builder.addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier())); if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) { builder.addCapability(spv::CapabilityGeometryStreams); diff --git a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out index e89abb45f7..45679eb070 100644 --- a/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out +++ b/Test/baseResults/spv.ClosestHitShaderMotion.rchit.out @@ -21,7 +21,6 @@ spv.ClosestHitShaderMotion.rchit Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV Decorate 16(accEXT) DescriptorSet 0 Decorate 16(accEXT) Binding 0 - Decorate 32(incomingPayloadEXT) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.MissShaderMotion.rmiss.out b/Test/baseResults/spv.MissShaderMotion.rmiss.out index 2f1833812f..185c934b0a 100644 --- a/Test/baseResults/spv.MissShaderMotion.rmiss.out +++ b/Test/baseResults/spv.MissShaderMotion.rmiss.out @@ -21,7 +21,6 @@ spv.MissShaderMotion.rmiss Decorate 10(gl_CurrentRayTimeNV) BuiltIn CurrentRayTimeNV Decorate 16(accEXT) DescriptorSet 0 Decorate 16(accEXT) Binding 0 - Decorate 32(localPayloadEXT) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.RayGenShaderMotion.rgen.out b/Test/baseResults/spv.RayGenShaderMotion.rgen.out index f9b9fa5f26..a6af236513 100644 --- a/Test/baseResults/spv.RayGenShaderMotion.rgen.out +++ b/Test/baseResults/spv.RayGenShaderMotion.rgen.out @@ -26,7 +26,6 @@ spv.RayGenShaderMotion.rgen Decorate 21(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 29(accEXT) DescriptorSet 0 Decorate 29(accEXT) Binding 0 - Decorate 46(payloadEXT) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index 880be33932..df779bdd66 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -69,7 +69,6 @@ spv.ext.AnyHitShader.rahit Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 84(incomingPayload) Location 1 Decorate 98(gl_SubgroupSize) RelaxedPrecision Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize Decorate 99 RelaxedPrecision diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out index 40903e60c2..9a4eb288a9 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out @@ -70,8 +70,6 @@ spv.ext.ClosestHitShader.rchit Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR Decorate 85(accEXT) DescriptorSet 0 Decorate 85(accEXT) Binding 0 - Decorate 98(incomingPayload) Location 1 - Decorate 100(localPayload) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out index 7f5af89d10..24ab4f46c3 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader_Subgroup.rchit.out @@ -34,7 +34,6 @@ spv.ext.ClosestHitShader_Subgroup.rchit Name 61 "gl_SMIDNV" Decorate 8(accEXT) DescriptorSet 0 Decorate 8(accEXT) Binding 0 - Decorate 26(incomingPayload) Location 1 Decorate 28(gl_SubgroupInvocationID) RelaxedPrecision Decorate 28(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId Decorate 29 RelaxedPrecision diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out index d2dfc176ea..1acd5ae660 100644 --- a/Test/baseResults/spv.ext.MissShader.rmiss.out +++ b/Test/baseResults/spv.ext.MissShader.rmiss.out @@ -53,7 +53,6 @@ spv.ext.MissShader.rmiss Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR Decorate 36(accEXT) DescriptorSet 0 Decorate 36(accEXT) Binding 0 - Decorate 51(incomingPayload) Location 1 Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize Decorate 53(gl_SubGroupSizeARB) Volatile Decorate 53(gl_SubGroupSizeARB) Coherent @@ -67,7 +66,6 @@ spv.ext.MissShader.rmiss Decorate 74(s2D) Binding 1 Decorate 78(c2) Location 2 Decorate 85(lodClamp) Location 3 - Decorate 89(localPayload) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayCallable.rcall.out b/Test/baseResults/spv.ext.RayCallable.rcall.out index d429116cc0..50e7fd8ff6 100644 --- a/Test/baseResults/spv.ext.RayCallable.rcall.out +++ b/Test/baseResults/spv.ext.RayCallable.rcall.out @@ -22,8 +22,6 @@ spv.ext.RayCallable.rcall Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 16(dataBlock) Block - Decorate 18 Location 1 - Decorate 29(data0) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayConstants.rgen.out b/Test/baseResults/spv.ext.RayConstants.rgen.out index afd5083381..6ef9dd4de0 100644 --- a/Test/baseResults/spv.ext.RayConstants.rgen.out +++ b/Test/baseResults/spv.ext.RayConstants.rgen.out @@ -15,7 +15,6 @@ spv.ext.RayConstants.rgen Name 26 "payload" Decorate 8(accEXT) DescriptorSet 0 Decorate 8(accEXT) Binding 0 - Decorate 26(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeAccelerationStructureKHR diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out index 95d9213617..88e3c004ce 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout.rgen.out @@ -49,7 +49,6 @@ spv.ext.RayGenSBTlayout.rgen MemberDecorate 36(block) 9 Offset 120 MemberDecorate 36(block) 10 Offset 128 Decorate 36(block) Block - Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out index f5e32c1330..ce5c306322 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout140.rgen.out @@ -49,7 +49,6 @@ spv.ext.RayGenSBTlayout140.rgen MemberDecorate 36(block) 9 Offset 136 MemberDecorate 36(block) 10 Offset 144 Decorate 36(block) Block - Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out index d952adfdeb..7462abd9b4 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayout430.rgen.out @@ -49,7 +49,6 @@ spv.ext.RayGenSBTlayout430.rgen MemberDecorate 36(block) 9 Offset 120 MemberDecorate 36(block) 10 Offset 128 Decorate 36(block) Block - Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out index c6d65304d0..3573455616 100644 --- a/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out +++ b/Test/baseResults/spv.ext.RayGenSBTlayoutscalar.rgen.out @@ -50,7 +50,6 @@ spv.ext.RayGenSBTlayoutscalar.rgen MemberDecorate 36(block) 9 Offset 96 MemberDecorate 36(block) 10 Offset 104 Decorate 36(block) Block - Decorate 60(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenShader.rgen.out b/Test/baseResults/spv.ext.RayGenShader.rgen.out index bfaf64b10f..46f920ac55 100644 --- a/Test/baseResults/spv.ext.RayGenShader.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader.rgen.out @@ -34,7 +34,6 @@ spv.ext.RayGenShader.rgen MemberDecorate 38(block) 0 Offset 0 MemberDecorate 38(block) 1 Offset 16 Decorate 38(block) Block - Decorate 53(payload) Location 1 Decorate 54(accEXT1) DescriptorSet 0 Decorate 54(accEXT1) Binding 1 Decorate 57(imageu) DescriptorSet 0 diff --git a/Test/baseResults/spv.ext.RayGenShader11.rgen.out b/Test/baseResults/spv.ext.RayGenShader11.rgen.out index 048b02b218..b31ebd9abb 100644 --- a/Test/baseResults/spv.ext.RayGenShader11.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShader11.rgen.out @@ -30,7 +30,6 @@ spv.ext.RayGenShader11.rgen MemberDecorate 37(block) 0 Offset 0 MemberDecorate 37(block) 1 Offset 16 Decorate 37(block) Block - Decorate 52(payload) Location 1 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 diff --git a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out index ee39e358ce..08f72b28ef 100644 --- a/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out +++ b/Test/baseResults/spv.ext.RayGenShaderArray.rgen.out @@ -43,7 +43,6 @@ spv.ext.RayGenShaderArray.rgen MemberDecorate 36(block) 3 Offset 32 MemberDecorate 36(block) 4 Offset 40 Decorate 36(block) Block - Decorate 61(payload) Location 1 Decorate 65(accEXT1) DescriptorSet 0 Decorate 65(accEXT1) Binding 1 Decorate 80 DecorationNonUniformEXT diff --git a/Test/baseResults/spv.ext.World3x4.rahit.out b/Test/baseResults/spv.ext.World3x4.rahit.out index 40d73d1b9d..8c60912c40 100644 --- a/Test/baseResults/spv.ext.World3x4.rahit.out +++ b/Test/baseResults/spv.ext.World3x4.rahit.out @@ -28,7 +28,6 @@ spv.ext.World3x4.rahit Decorate 60(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR Decorate 78(result) DescriptorSet 0 Decorate 78(result) Binding 0 - Decorate 89(hitValue) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 From fbb39aa461430267c8a5e6300d09ca955ce28af9 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 7 Dec 2021 14:33:09 -0700 Subject: [PATCH 273/365] Fix --hlsl-dx-position-w to work for SV_Position embedded in struct Fixes #2244 --- Test/baseResults/hlsl.w-recip2.frag.out | 305 ++++++++++++++++++++++++ Test/hlsl.w-recip2.frag | 19 ++ Test/runtests | 2 + glslang/HLSL/hlslParseHelper.cpp | 60 +++++ glslang/HLSL/hlslParseHelper.h | 1 + 5 files changed, 387 insertions(+) create mode 100644 Test/baseResults/hlsl.w-recip2.frag.out create mode 100644 Test/hlsl.w-recip2.frag diff --git a/Test/baseResults/hlsl.w-recip2.frag.out b/Test/baseResults/hlsl.w-recip2.frag.out new file mode 100644 index 0000000000..6fee15c421 --- /dev/null +++ b/Test/baseResults/hlsl.w-recip2.frag.out @@ -0,0 +1,305 @@ +hlsl.w-recip2.frag +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:13 Function Definition: @main(struct-VSOutput-vf4-vf3-vf3-vf21; ( temp 4-component vector of float) +0:13 Function Parameters: +0:13 'VSOut' ( in structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:? Sequence +0:14 Test condition and select ( temp void) +0:14 Condition +0:14 Compare Less Than ( temp bool) +0:14 direct index ( temp float) +0:14 PositionPS: direct index for structure ( temp 4-component vector of float) +0:14 'VSOut' ( in structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:14 Constant: +0:14 0 (const int) +0:14 Constant: +0:14 0 (const int) +0:14 Constant: +0:14 400.000000 +0:14 true case +0:15 Branch: Return with expression +0:15 AmbientColor: direct index for structure ( uniform 4-component vector of float) +0:15 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:15 Constant: +0:15 0 (const uint) +0:14 false case +0:17 Branch: Return with expression +0:17 AmbientColor2: direct index for structure ( uniform 4-component vector of float) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:17 Constant: +0:17 1 (const uint) +0:13 Function Definition: main( ( temp void) +0:13 Function Parameters: +0:? Sequence +0:13 Sequence +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 '@fragcoord' ( temp 4-component vector of float) +0:? 'VSOut.PositionPS' ( in 4-component vector of float FragCoord) +0:13 move second child to first child ( temp float) +0:13 direct index ( in float FragCoord) +0:13 '@fragcoord' ( temp 4-component vector of float) +0:13 Constant: +0:13 3 (const int) +0:13 divide ( temp float) +0:13 Constant: +0:13 1.000000 +0:13 direct index ( in float FragCoord) +0:13 '@fragcoord' ( temp 4-component vector of float) +0:13 Constant: +0:13 3 (const int) +0:13 move second child to first child ( temp 4-component vector of float) +0:13 PositionPS: direct index for structure ( temp 4-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:13 Constant: +0:13 0 (const int) +0:13 '@fragcoord' ( temp 4-component vector of float) +0:13 move second child to first child ( temp 3-component vector of float) +0:13 PosInLightViewSpace: direct index for structure ( temp 3-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:13 Constant: +0:13 1 (const int) +0:? 'VSOut.PosInLightViewSpace' (layout( location=0) in 3-component vector of float) +0:13 move second child to first child ( temp 3-component vector of float) +0:13 NormalWS: direct index for structure ( temp 3-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:13 Constant: +0:13 2 (const int) +0:? 'VSOut.NormalWS' (layout( location=1) in 3-component vector of float) +0:13 move second child to first child ( temp 2-component vector of float) +0:13 TexCoord: direct index for structure ( temp 2-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:13 Constant: +0:13 3 (const int) +0:? 'VSOut.TexCoord' (layout( location=2) in 2-component vector of float) +0:13 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:13 Function Call: @main(struct-VSOutput-vf4-vf3-vf3-vf21; ( temp 4-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'VSOut.PositionPS' ( in 4-component vector of float FragCoord) +0:? 'VSOut.PosInLightViewSpace' (layout( location=0) in 3-component vector of float) +0:? 'VSOut.NormalWS' (layout( location=1) in 3-component vector of float) +0:? 'VSOut.TexCoord' (layout( location=2) in 2-component vector of float) + + +Linked fragment stage: + + +Shader version: 500 +gl_FragCoord origin is upper left +0:? Sequence +0:13 Function Definition: @main(struct-VSOutput-vf4-vf3-vf3-vf21; ( temp 4-component vector of float) +0:13 Function Parameters: +0:13 'VSOut' ( in structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:? Sequence +0:14 Test condition and select ( temp void) +0:14 Condition +0:14 Compare Less Than ( temp bool) +0:14 direct index ( temp float) +0:14 PositionPS: direct index for structure ( temp 4-component vector of float) +0:14 'VSOut' ( in structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:14 Constant: +0:14 0 (const int) +0:14 Constant: +0:14 0 (const int) +0:14 Constant: +0:14 400.000000 +0:14 true case +0:15 Branch: Return with expression +0:15 AmbientColor: direct index for structure ( uniform 4-component vector of float) +0:15 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:15 Constant: +0:15 0 (const uint) +0:14 false case +0:17 Branch: Return with expression +0:17 AmbientColor2: direct index for structure ( uniform 4-component vector of float) +0:17 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:17 Constant: +0:17 1 (const uint) +0:13 Function Definition: main( ( temp void) +0:13 Function Parameters: +0:? Sequence +0:13 Sequence +0:13 Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 '@fragcoord' ( temp 4-component vector of float) +0:? 'VSOut.PositionPS' ( in 4-component vector of float FragCoord) +0:13 move second child to first child ( temp float) +0:13 direct index ( in float FragCoord) +0:13 '@fragcoord' ( temp 4-component vector of float) +0:13 Constant: +0:13 3 (const int) +0:13 divide ( temp float) +0:13 Constant: +0:13 1.000000 +0:13 direct index ( in float FragCoord) +0:13 '@fragcoord' ( temp 4-component vector of float) +0:13 Constant: +0:13 3 (const int) +0:13 move second child to first child ( temp 4-component vector of float) +0:13 PositionPS: direct index for structure ( temp 4-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:13 Constant: +0:13 0 (const int) +0:13 '@fragcoord' ( temp 4-component vector of float) +0:13 move second child to first child ( temp 3-component vector of float) +0:13 PosInLightViewSpace: direct index for structure ( temp 3-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:13 Constant: +0:13 1 (const int) +0:? 'VSOut.PosInLightViewSpace' (layout( location=0) in 3-component vector of float) +0:13 move second child to first child ( temp 3-component vector of float) +0:13 NormalWS: direct index for structure ( temp 3-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:13 Constant: +0:13 2 (const int) +0:? 'VSOut.NormalWS' (layout( location=1) in 3-component vector of float) +0:13 move second child to first child ( temp 2-component vector of float) +0:13 TexCoord: direct index for structure ( temp 2-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:13 Constant: +0:13 3 (const int) +0:? 'VSOut.TexCoord' (layout( location=2) in 2-component vector of float) +0:13 move second child to first child ( temp 4-component vector of float) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:13 Function Call: @main(struct-VSOutput-vf4-vf3-vf3-vf21; ( temp 4-component vector of float) +0:? 'VSOut' ( temp structure{ temp 4-component vector of float PositionPS, temp 3-component vector of float PosInLightViewSpace, temp 3-component vector of float NormalWS, temp 2-component vector of float TexCoord}) +0:? Linker Objects +0:? 'anon@0' (layout( row_major std140) uniform block{ uniform 4-component vector of float AmbientColor, uniform 4-component vector of float AmbientColor2}) +0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) +0:? 'VSOut.PositionPS' ( in 4-component vector of float FragCoord) +0:? 'VSOut.PosInLightViewSpace' (layout( location=0) in 3-component vector of float) +0:? 'VSOut.NormalWS' (layout( location=1) in 3-component vector of float) +0:? 'VSOut.TexCoord' (layout( location=2) in 2-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 75 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 44 56 61 66 71 + ExecutionMode 4 OriginUpperLeft + Source HLSL 500 + Name 4 "main" + Name 10 "VSOutput" + MemberName 10(VSOutput) 0 "PositionPS" + MemberName 10(VSOutput) 1 "PosInLightViewSpace" + MemberName 10(VSOutput) 2 "NormalWS" + MemberName 10(VSOutput) 3 "TexCoord" + Name 14 "@main(struct-VSOutput-vf4-vf3-vf3-vf21;" + Name 13 "VSOut" + Name 28 "$Global" + MemberName 28($Global) 0 "AmbientColor" + MemberName 28($Global) 1 "AmbientColor2" + Name 30 "" + Name 42 "@fragcoord" + Name 44 "VSOut.PositionPS" + Name 52 "VSOut" + Name 56 "VSOut.PosInLightViewSpace" + Name 61 "VSOut.NormalWS" + Name 66 "VSOut.TexCoord" + Name 71 "@entryPointOutput" + Name 72 "param" + MemberDecorate 28($Global) 0 Offset 0 + MemberDecorate 28($Global) 1 Offset 16 + Decorate 28($Global) Block + Decorate 30 DescriptorSet 0 + Decorate 30 Binding 0 + Decorate 44(VSOut.PositionPS) BuiltIn FragCoord + Decorate 56(VSOut.PosInLightViewSpace) Location 0 + Decorate 61(VSOut.NormalWS) Location 1 + Decorate 66(VSOut.TexCoord) Location 2 + Decorate 71(@entryPointOutput) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypeVector 6(float) 3 + 9: TypeVector 6(float) 2 + 10(VSOutput): TypeStruct 7(fvec4) 8(fvec3) 8(fvec3) 9(fvec2) + 11: TypePointer Function 10(VSOutput) + 12: TypeFunction 7(fvec4) 11(ptr) + 16: TypeInt 32 1 + 17: 16(int) Constant 0 + 18: TypeInt 32 0 + 19: 18(int) Constant 0 + 20: TypePointer Function 6(float) + 23: 6(float) Constant 1137180672 + 24: TypeBool + 28($Global): TypeStruct 7(fvec4) 7(fvec4) + 29: TypePointer Uniform 28($Global) + 30: 29(ptr) Variable Uniform + 31: TypePointer Uniform 7(fvec4) + 36: 16(int) Constant 1 + 41: TypePointer Function 7(fvec4) + 43: TypePointer Input 7(fvec4) +44(VSOut.PositionPS): 43(ptr) Variable Input + 46: 6(float) Constant 1065353216 + 47: 18(int) Constant 3 + 55: TypePointer Input 8(fvec3) +56(VSOut.PosInLightViewSpace): 55(ptr) Variable Input + 58: TypePointer Function 8(fvec3) + 60: 16(int) Constant 2 +61(VSOut.NormalWS): 55(ptr) Variable Input + 64: 16(int) Constant 3 + 65: TypePointer Input 9(fvec2) +66(VSOut.TexCoord): 65(ptr) Variable Input + 68: TypePointer Function 9(fvec2) + 70: TypePointer Output 7(fvec4) +71(@entryPointOutput): 70(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 42(@fragcoord): 41(ptr) Variable Function + 52(VSOut): 11(ptr) Variable Function + 72(param): 11(ptr) Variable Function + 45: 7(fvec4) Load 44(VSOut.PositionPS) + Store 42(@fragcoord) 45 + 48: 20(ptr) AccessChain 42(@fragcoord) 47 + 49: 6(float) Load 48 + 50: 6(float) FDiv 46 49 + 51: 20(ptr) AccessChain 42(@fragcoord) 47 + Store 51 50 + 53: 7(fvec4) Load 42(@fragcoord) + 54: 41(ptr) AccessChain 52(VSOut) 17 + Store 54 53 + 57: 8(fvec3) Load 56(VSOut.PosInLightViewSpace) + 59: 58(ptr) AccessChain 52(VSOut) 36 + Store 59 57 + 62: 8(fvec3) Load 61(VSOut.NormalWS) + 63: 58(ptr) AccessChain 52(VSOut) 60 + Store 63 62 + 67: 9(fvec2) Load 66(VSOut.TexCoord) + 69: 68(ptr) AccessChain 52(VSOut) 64 + Store 69 67 + 73:10(VSOutput) Load 52(VSOut) + Store 72(param) 73 + 74: 7(fvec4) FunctionCall 14(@main(struct-VSOutput-vf4-vf3-vf3-vf21;) 72(param) + Store 71(@entryPointOutput) 74 + Return + FunctionEnd +14(@main(struct-VSOutput-vf4-vf3-vf3-vf21;): 7(fvec4) Function None 12 + 13(VSOut): 11(ptr) FunctionParameter + 15: Label + 21: 20(ptr) AccessChain 13(VSOut) 17 19 + 22: 6(float) Load 21 + 25: 24(bool) FOrdLessThan 22 23 + SelectionMerge 27 None + BranchConditional 25 26 35 + 26: Label + 32: 31(ptr) AccessChain 30 17 + 33: 7(fvec4) Load 32 + ReturnValue 33 + 35: Label + 37: 31(ptr) AccessChain 30 36 + 38: 7(fvec4) Load 37 + ReturnValue 38 + 27: Label + Unreachable + FunctionEnd diff --git a/Test/hlsl.w-recip2.frag b/Test/hlsl.w-recip2.frag new file mode 100644 index 0000000000..8ef49c9eeb --- /dev/null +++ b/Test/hlsl.w-recip2.frag @@ -0,0 +1,19 @@ +struct VSOutput +{ + float4 PositionPS : SV_Position; + float3 PosInLightViewSpace : LIGHT_SPACE_POS; + float3 NormalWS : NORMALWS; + float2 TexCoord : TEXCOORD; +}; + +float4 AmbientColor = float4(1, 0.5, 0, 1); +float4 AmbientColor2 = float4(0.5, 1, 0, 0); + +float4 main(VSOutput VSOut) : SV_TARGET +{ + if (VSOut.PositionPS.x < 400) + return AmbientColor; + else + return AmbientColor2; +} + diff --git a/Test/runtests b/Test/runtests index f27b6d836d..63c3a03bb9 100755 --- a/Test/runtests +++ b/Test/runtests @@ -260,6 +260,8 @@ diff -b $BASEDIR/hlsl.y-negate-3.vert.out $TARGETDIR/hlsl.y-negate-3.vert.out || echo "Testing position W reciprocal" run -H -e main -V -D -Od -H -i --hlsl-dx-position-w hlsl.w-recip.frag > $TARGETDIR/hlsl.w-recip.frag.out diff -b $BASEDIR/hlsl.w-recip.frag.out $TARGETDIR/hlsl.w-recip.frag.out || HASERROR=1 +run -H -e main -V -D -Od -H -i --hlsl-dx-position-w hlsl.w-recip2.frag > $TARGETDIR/hlsl.w-recip2.frag.out +diff -b $BASEDIR/hlsl.w-recip2.frag.out $TARGETDIR/hlsl.w-recip2.frag.out || HASERROR=1 # # Testing hlsl_functionality1 diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index 9122973abc..2d0a8e926d 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -2465,6 +2465,62 @@ void HlslParseContext::handleFunctionArgument(TFunction* function, arguments = newArg; } +// FragCoord may require special loading: we can optionally reciprocate W. +TIntermTyped* HlslParseContext::assignFromFragCoord(const TSourceLoc& loc, TOperator op, + TIntermTyped* left, TIntermTyped* right) +{ + // If we are not asked for reciprocal W, use a plain old assign. + if (!intermediate.getDxPositionW()) + return intermediate.addAssign(op, left, right, loc); + + // If we get here, we should reciprocate W. + TIntermAggregate* assignList = nullptr; + + // If this is a complex rvalue, we don't want to dereference it many times. Create a temporary. + TVariable* rhsTempVar = nullptr; + rhsTempVar = makeInternalVariable("@fragcoord", right->getType()); + rhsTempVar->getWritableType().getQualifier().makeTemporary(); + + { + TIntermTyped* rhsTempSym = intermediate.addSymbol(*rhsTempVar, loc); + assignList = intermediate.growAggregate(assignList, + intermediate.addAssign(EOpAssign, rhsTempSym, right, loc), loc); + } + + // tmp.w = 1.0 / tmp.w + { + const int W = 3; + + TIntermTyped* tempSymL = intermediate.addSymbol(*rhsTempVar, loc); + TIntermTyped* tempSymR = intermediate.addSymbol(*rhsTempVar, loc); + TIntermTyped* index = intermediate.addConstantUnion(W, loc); + + TIntermTyped* lhsElement = intermediate.addIndex(EOpIndexDirect, tempSymL, index, loc); + TIntermTyped* rhsElement = intermediate.addIndex(EOpIndexDirect, tempSymR, index, loc); + + const TType derefType(right->getType(), 0); + + lhsElement->setType(derefType); + rhsElement->setType(derefType); + + auto one = intermediate.addConstantUnion(1.0, EbtFloat, loc); + auto recip_w = intermediate.addBinaryMath(EOpDiv, one, rhsElement, loc); + + assignList = intermediate.growAggregate(assignList, intermediate.addAssign(EOpAssign, lhsElement, recip_w, loc)); + } + + // Assign the rhs temp (now with W reciprocal) to the final output + { + TIntermTyped* rhsTempSym = intermediate.addSymbol(*rhsTempVar, loc); + assignList = intermediate.growAggregate(assignList, intermediate.addAssign(op, left, rhsTempSym, loc)); + } + + assert(assignList != nullptr); + assignList->setOperator(EOpSequence); + + return assignList; +} + // Position may require special handling: we can optionally invert Y. // See: https://github.com/KhronosGroup/glslang/issues/1173 // https://github.com/KhronosGroup/glslang/issues/494 @@ -3084,6 +3140,10 @@ TIntermTyped* HlslParseContext::handleAssign(const TSourceLoc& loc, TOperator op subSplitLeft, subSplitRight); assignList = intermediate.growAggregate(assignList, clipCullAssign, loc); + } else if (subSplitRight->getType().getQualifier().builtIn == EbvFragCoord) { + // FragCoord can require special handling: see comment above assignFromFragCoord + TIntermTyped* fragCoordAssign = assignFromFragCoord(loc, op, subSplitLeft, subSplitRight); + assignList = intermediate.growAggregate(assignList, fragCoordAssign, loc); } else if (assignsClipPos(subSplitLeft)) { // Position can require special handling: see comment above assignPosition TIntermTyped* positionAssign = assignPosition(loc, op, subSplitLeft, subSplitRight); diff --git a/glslang/HLSL/hlslParseHelper.h b/glslang/HLSL/hlslParseHelper.h index 2d7165cfcd..8bebb0e2b2 100644 --- a/glslang/HLSL/hlslParseHelper.h +++ b/glslang/HLSL/hlslParseHelper.h @@ -94,6 +94,7 @@ class HlslParseContext : public TParseContextBase { TIntermTyped* handleFunctionCall(const TSourceLoc&, TFunction*, TIntermTyped*); TIntermAggregate* assignClipCullDistance(const TSourceLoc&, TOperator, int semanticId, TIntermTyped* left, TIntermTyped* right); TIntermTyped* assignPosition(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right); + TIntermTyped* assignFromFragCoord(const TSourceLoc&, TOperator, TIntermTyped* left, TIntermTyped* right); void decomposeIntrinsic(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments); void decomposeSampleMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments); void decomposeStructBufferMethods(const TSourceLoc&, TIntermTyped*& node, TIntermNode* arguments); From a0f98ad4015fbfe5b14a6e3d0b492dfa5c37e988 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 16 Dec 2021 11:37:39 -0700 Subject: [PATCH 274/365] Pickup header for SPIR-V 1.6 --- SPIRV/spirv.hpp | 4823 ++++++++++++++++++++++++----------------------- 1 file changed, 2509 insertions(+), 2314 deletions(-) diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index f6b7be9240..a8642006a2 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -1,2314 +1,2509 @@ -// Copyright (c) 2014-2020 The Khronos Group Inc. -// -// Permission is hereby granted, free of charge, to any person obtaining a copy -// of this software and/or associated documentation files (the "Materials"), -// to deal in the Materials without restriction, including without limitation -// the rights to use, copy, modify, merge, publish, distribute, sublicense, -// and/or sell copies of the Materials, and to permit persons to whom the -// Materials are furnished to do so, subject to the following conditions: -// -// The above copyright notice and this permission notice shall be included in -// all copies or substantial portions of the Materials. -// -// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS -// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND -// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ -// -// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS -// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL -// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS -// IN THE MATERIALS. - -// This header is automatically generated by the same tool that creates -// the Binary Section of the SPIR-V specification. - -// Enumeration tokens for SPIR-V, in various styles: -// C, C++, C++11, JSON, Lua, Python, C#, D -// -// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL -// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL -// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL -// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL -// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] -// - C# will use enum classes in the Specification class located in the "Spv" namespace, -// e.g.: Spv.Specification.SourceLanguage.GLSL -// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL -// -// Some tokens act like mask values, which can be OR'd together, -// while others are mutually exclusive. The mask-like ones have -// "Mask" in their name, and a parallel enum that has the shift -// amount (1 << x) for each corresponding enumerant. - -#ifndef spirv_HPP -#define spirv_HPP - -namespace spv { - -typedef unsigned int Id; - -#define SPV_VERSION 0x10500 -#define SPV_REVISION 4 - -static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010500; -static const unsigned int Revision = 4; -static const unsigned int OpCodeMask = 0xffff; -static const unsigned int WordCountShift = 16; - -enum SourceLanguage { - SourceLanguageUnknown = 0, - SourceLanguageESSL = 1, - SourceLanguageGLSL = 2, - SourceLanguageOpenCL_C = 3, - SourceLanguageOpenCL_CPP = 4, - SourceLanguageHLSL = 5, - SourceLanguageMax = 0x7fffffff, -}; - -enum ExecutionModel { - ExecutionModelVertex = 0, - ExecutionModelTessellationControl = 1, - ExecutionModelTessellationEvaluation = 2, - ExecutionModelGeometry = 3, - ExecutionModelFragment = 4, - ExecutionModelGLCompute = 5, - ExecutionModelKernel = 6, - ExecutionModelTaskNV = 5267, - ExecutionModelMeshNV = 5268, - ExecutionModelRayGenerationKHR = 5313, - ExecutionModelRayGenerationNV = 5313, - ExecutionModelIntersectionKHR = 5314, - ExecutionModelIntersectionNV = 5314, - ExecutionModelAnyHitKHR = 5315, - ExecutionModelAnyHitNV = 5315, - ExecutionModelClosestHitKHR = 5316, - ExecutionModelClosestHitNV = 5316, - ExecutionModelMissKHR = 5317, - ExecutionModelMissNV = 5317, - ExecutionModelCallableKHR = 5318, - ExecutionModelCallableNV = 5318, - ExecutionModelMax = 0x7fffffff, -}; - -enum AddressingModel { - AddressingModelLogical = 0, - AddressingModelPhysical32 = 1, - AddressingModelPhysical64 = 2, - AddressingModelPhysicalStorageBuffer64 = 5348, - AddressingModelPhysicalStorageBuffer64EXT = 5348, - AddressingModelMax = 0x7fffffff, -}; - -enum MemoryModel { - MemoryModelSimple = 0, - MemoryModelGLSL450 = 1, - MemoryModelOpenCL = 2, - MemoryModelVulkan = 3, - MemoryModelVulkanKHR = 3, - MemoryModelMax = 0x7fffffff, -}; - -enum ExecutionMode { - ExecutionModeInvocations = 0, - ExecutionModeSpacingEqual = 1, - ExecutionModeSpacingFractionalEven = 2, - ExecutionModeSpacingFractionalOdd = 3, - ExecutionModeVertexOrderCw = 4, - ExecutionModeVertexOrderCcw = 5, - ExecutionModePixelCenterInteger = 6, - ExecutionModeOriginUpperLeft = 7, - ExecutionModeOriginLowerLeft = 8, - ExecutionModeEarlyFragmentTests = 9, - ExecutionModePointMode = 10, - ExecutionModeXfb = 11, - ExecutionModeDepthReplacing = 12, - ExecutionModeDepthGreater = 14, - ExecutionModeDepthLess = 15, - ExecutionModeDepthUnchanged = 16, - ExecutionModeLocalSize = 17, - ExecutionModeLocalSizeHint = 18, - ExecutionModeInputPoints = 19, - ExecutionModeInputLines = 20, - ExecutionModeInputLinesAdjacency = 21, - ExecutionModeTriangles = 22, - ExecutionModeInputTrianglesAdjacency = 23, - ExecutionModeQuads = 24, - ExecutionModeIsolines = 25, - ExecutionModeOutputVertices = 26, - ExecutionModeOutputPoints = 27, - ExecutionModeOutputLineStrip = 28, - ExecutionModeOutputTriangleStrip = 29, - ExecutionModeVecTypeHint = 30, - ExecutionModeContractionOff = 31, - ExecutionModeInitializer = 33, - ExecutionModeFinalizer = 34, - ExecutionModeSubgroupSize = 35, - ExecutionModeSubgroupsPerWorkgroup = 36, - ExecutionModeSubgroupsPerWorkgroupId = 37, - ExecutionModeLocalSizeId = 38, - ExecutionModeLocalSizeHintId = 39, - ExecutionModeSubgroupUniformControlFlowKHR = 4421, - ExecutionModePostDepthCoverage = 4446, - ExecutionModeDenormPreserve = 4459, - ExecutionModeDenormFlushToZero = 4460, - ExecutionModeSignedZeroInfNanPreserve = 4461, - ExecutionModeRoundingModeRTE = 4462, - ExecutionModeRoundingModeRTZ = 4463, - ExecutionModeStencilRefReplacingEXT = 5027, - ExecutionModeOutputLinesNV = 5269, - ExecutionModeOutputPrimitivesNV = 5270, - ExecutionModeDerivativeGroupQuadsNV = 5289, - ExecutionModeDerivativeGroupLinearNV = 5290, - ExecutionModeOutputTrianglesNV = 5298, - ExecutionModePixelInterlockOrderedEXT = 5366, - ExecutionModePixelInterlockUnorderedEXT = 5367, - ExecutionModeSampleInterlockOrderedEXT = 5368, - ExecutionModeSampleInterlockUnorderedEXT = 5369, - ExecutionModeShadingRateInterlockOrderedEXT = 5370, - ExecutionModeShadingRateInterlockUnorderedEXT = 5371, - ExecutionModeSharedLocalMemorySizeINTEL = 5618, - ExecutionModeRoundingModeRTPINTEL = 5620, - ExecutionModeRoundingModeRTNINTEL = 5621, - ExecutionModeFloatingPointModeALTINTEL = 5622, - ExecutionModeFloatingPointModeIEEEINTEL = 5623, - ExecutionModeMaxWorkgroupSizeINTEL = 5893, - ExecutionModeMaxWorkDimINTEL = 5894, - ExecutionModeNoGlobalOffsetINTEL = 5895, - ExecutionModeNumSIMDWorkitemsINTEL = 5896, - ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, - ExecutionModeMax = 0x7fffffff, -}; - -enum StorageClass { - StorageClassUniformConstant = 0, - StorageClassInput = 1, - StorageClassUniform = 2, - StorageClassOutput = 3, - StorageClassWorkgroup = 4, - StorageClassCrossWorkgroup = 5, - StorageClassPrivate = 6, - StorageClassFunction = 7, - StorageClassGeneric = 8, - StorageClassPushConstant = 9, - StorageClassAtomicCounter = 10, - StorageClassImage = 11, - StorageClassStorageBuffer = 12, - StorageClassCallableDataKHR = 5328, - StorageClassCallableDataNV = 5328, - StorageClassIncomingCallableDataKHR = 5329, - StorageClassIncomingCallableDataNV = 5329, - StorageClassRayPayloadKHR = 5338, - StorageClassRayPayloadNV = 5338, - StorageClassHitAttributeKHR = 5339, - StorageClassHitAttributeNV = 5339, - StorageClassIncomingRayPayloadKHR = 5342, - StorageClassIncomingRayPayloadNV = 5342, - StorageClassShaderRecordBufferKHR = 5343, - StorageClassShaderRecordBufferNV = 5343, - StorageClassPhysicalStorageBuffer = 5349, - StorageClassPhysicalStorageBufferEXT = 5349, - StorageClassCodeSectionINTEL = 5605, - StorageClassDeviceOnlyINTEL = 5936, - StorageClassHostOnlyINTEL = 5937, - StorageClassMax = 0x7fffffff, -}; - -enum Dim { - Dim1D = 0, - Dim2D = 1, - Dim3D = 2, - DimCube = 3, - DimRect = 4, - DimBuffer = 5, - DimSubpassData = 6, - DimMax = 0x7fffffff, -}; - -enum SamplerAddressingMode { - SamplerAddressingModeNone = 0, - SamplerAddressingModeClampToEdge = 1, - SamplerAddressingModeClamp = 2, - SamplerAddressingModeRepeat = 3, - SamplerAddressingModeRepeatMirrored = 4, - SamplerAddressingModeMax = 0x7fffffff, -}; - -enum SamplerFilterMode { - SamplerFilterModeNearest = 0, - SamplerFilterModeLinear = 1, - SamplerFilterModeMax = 0x7fffffff, -}; - -enum ImageFormat { - ImageFormatUnknown = 0, - ImageFormatRgba32f = 1, - ImageFormatRgba16f = 2, - ImageFormatR32f = 3, - ImageFormatRgba8 = 4, - ImageFormatRgba8Snorm = 5, - ImageFormatRg32f = 6, - ImageFormatRg16f = 7, - ImageFormatR11fG11fB10f = 8, - ImageFormatR16f = 9, - ImageFormatRgba16 = 10, - ImageFormatRgb10A2 = 11, - ImageFormatRg16 = 12, - ImageFormatRg8 = 13, - ImageFormatR16 = 14, - ImageFormatR8 = 15, - ImageFormatRgba16Snorm = 16, - ImageFormatRg16Snorm = 17, - ImageFormatRg8Snorm = 18, - ImageFormatR16Snorm = 19, - ImageFormatR8Snorm = 20, - ImageFormatRgba32i = 21, - ImageFormatRgba16i = 22, - ImageFormatRgba8i = 23, - ImageFormatR32i = 24, - ImageFormatRg32i = 25, - ImageFormatRg16i = 26, - ImageFormatRg8i = 27, - ImageFormatR16i = 28, - ImageFormatR8i = 29, - ImageFormatRgba32ui = 30, - ImageFormatRgba16ui = 31, - ImageFormatRgba8ui = 32, - ImageFormatR32ui = 33, - ImageFormatRgb10a2ui = 34, - ImageFormatRg32ui = 35, - ImageFormatRg16ui = 36, - ImageFormatRg8ui = 37, - ImageFormatR16ui = 38, - ImageFormatR8ui = 39, - ImageFormatR64ui = 40, - ImageFormatR64i = 41, - ImageFormatMax = 0x7fffffff, -}; - -enum ImageChannelOrder { - ImageChannelOrderR = 0, - ImageChannelOrderA = 1, - ImageChannelOrderRG = 2, - ImageChannelOrderRA = 3, - ImageChannelOrderRGB = 4, - ImageChannelOrderRGBA = 5, - ImageChannelOrderBGRA = 6, - ImageChannelOrderARGB = 7, - ImageChannelOrderIntensity = 8, - ImageChannelOrderLuminance = 9, - ImageChannelOrderRx = 10, - ImageChannelOrderRGx = 11, - ImageChannelOrderRGBx = 12, - ImageChannelOrderDepth = 13, - ImageChannelOrderDepthStencil = 14, - ImageChannelOrdersRGB = 15, - ImageChannelOrdersRGBx = 16, - ImageChannelOrdersRGBA = 17, - ImageChannelOrdersBGRA = 18, - ImageChannelOrderABGR = 19, - ImageChannelOrderMax = 0x7fffffff, -}; - -enum ImageChannelDataType { - ImageChannelDataTypeSnormInt8 = 0, - ImageChannelDataTypeSnormInt16 = 1, - ImageChannelDataTypeUnormInt8 = 2, - ImageChannelDataTypeUnormInt16 = 3, - ImageChannelDataTypeUnormShort565 = 4, - ImageChannelDataTypeUnormShort555 = 5, - ImageChannelDataTypeUnormInt101010 = 6, - ImageChannelDataTypeSignedInt8 = 7, - ImageChannelDataTypeSignedInt16 = 8, - ImageChannelDataTypeSignedInt32 = 9, - ImageChannelDataTypeUnsignedInt8 = 10, - ImageChannelDataTypeUnsignedInt16 = 11, - ImageChannelDataTypeUnsignedInt32 = 12, - ImageChannelDataTypeHalfFloat = 13, - ImageChannelDataTypeFloat = 14, - ImageChannelDataTypeUnormInt24 = 15, - ImageChannelDataTypeUnormInt101010_2 = 16, - ImageChannelDataTypeMax = 0x7fffffff, -}; - -enum ImageOperandsShift { - ImageOperandsBiasShift = 0, - ImageOperandsLodShift = 1, - ImageOperandsGradShift = 2, - ImageOperandsConstOffsetShift = 3, - ImageOperandsOffsetShift = 4, - ImageOperandsConstOffsetsShift = 5, - ImageOperandsSampleShift = 6, - ImageOperandsMinLodShift = 7, - ImageOperandsMakeTexelAvailableShift = 8, - ImageOperandsMakeTexelAvailableKHRShift = 8, - ImageOperandsMakeTexelVisibleShift = 9, - ImageOperandsMakeTexelVisibleKHRShift = 9, - ImageOperandsNonPrivateTexelShift = 10, - ImageOperandsNonPrivateTexelKHRShift = 10, - ImageOperandsVolatileTexelShift = 11, - ImageOperandsVolatileTexelKHRShift = 11, - ImageOperandsSignExtendShift = 12, - ImageOperandsZeroExtendShift = 13, - ImageOperandsMax = 0x7fffffff, -}; - -enum ImageOperandsMask { - ImageOperandsMaskNone = 0, - ImageOperandsBiasMask = 0x00000001, - ImageOperandsLodMask = 0x00000002, - ImageOperandsGradMask = 0x00000004, - ImageOperandsConstOffsetMask = 0x00000008, - ImageOperandsOffsetMask = 0x00000010, - ImageOperandsConstOffsetsMask = 0x00000020, - ImageOperandsSampleMask = 0x00000040, - ImageOperandsMinLodMask = 0x00000080, - ImageOperandsMakeTexelAvailableMask = 0x00000100, - ImageOperandsMakeTexelAvailableKHRMask = 0x00000100, - ImageOperandsMakeTexelVisibleMask = 0x00000200, - ImageOperandsMakeTexelVisibleKHRMask = 0x00000200, - ImageOperandsNonPrivateTexelMask = 0x00000400, - ImageOperandsNonPrivateTexelKHRMask = 0x00000400, - ImageOperandsVolatileTexelMask = 0x00000800, - ImageOperandsVolatileTexelKHRMask = 0x00000800, - ImageOperandsSignExtendMask = 0x00001000, - ImageOperandsZeroExtendMask = 0x00002000, -}; - -enum FPFastMathModeShift { - FPFastMathModeNotNaNShift = 0, - FPFastMathModeNotInfShift = 1, - FPFastMathModeNSZShift = 2, - FPFastMathModeAllowRecipShift = 3, - FPFastMathModeFastShift = 4, - FPFastMathModeAllowContractFastINTELShift = 16, - FPFastMathModeAllowReassocINTELShift = 17, - FPFastMathModeMax = 0x7fffffff, -}; - -enum FPFastMathModeMask { - FPFastMathModeMaskNone = 0, - FPFastMathModeNotNaNMask = 0x00000001, - FPFastMathModeNotInfMask = 0x00000002, - FPFastMathModeNSZMask = 0x00000004, - FPFastMathModeAllowRecipMask = 0x00000008, - FPFastMathModeFastMask = 0x00000010, - FPFastMathModeAllowContractFastINTELMask = 0x00010000, - FPFastMathModeAllowReassocINTELMask = 0x00020000, -}; - -enum FPRoundingMode { - FPRoundingModeRTE = 0, - FPRoundingModeRTZ = 1, - FPRoundingModeRTP = 2, - FPRoundingModeRTN = 3, - FPRoundingModeMax = 0x7fffffff, -}; - -enum LinkageType { - LinkageTypeExport = 0, - LinkageTypeImport = 1, - LinkageTypeLinkOnceODR = 2, - LinkageTypeMax = 0x7fffffff, -}; - -enum AccessQualifier { - AccessQualifierReadOnly = 0, - AccessQualifierWriteOnly = 1, - AccessQualifierReadWrite = 2, - AccessQualifierMax = 0x7fffffff, -}; - -enum FunctionParameterAttribute { - FunctionParameterAttributeZext = 0, - FunctionParameterAttributeSext = 1, - FunctionParameterAttributeByVal = 2, - FunctionParameterAttributeSret = 3, - FunctionParameterAttributeNoAlias = 4, - FunctionParameterAttributeNoCapture = 5, - FunctionParameterAttributeNoWrite = 6, - FunctionParameterAttributeNoReadWrite = 7, - FunctionParameterAttributeMax = 0x7fffffff, -}; - -enum Decoration { - DecorationRelaxedPrecision = 0, - DecorationSpecId = 1, - DecorationBlock = 2, - DecorationBufferBlock = 3, - DecorationRowMajor = 4, - DecorationColMajor = 5, - DecorationArrayStride = 6, - DecorationMatrixStride = 7, - DecorationGLSLShared = 8, - DecorationGLSLPacked = 9, - DecorationCPacked = 10, - DecorationBuiltIn = 11, - DecorationNoPerspective = 13, - DecorationFlat = 14, - DecorationPatch = 15, - DecorationCentroid = 16, - DecorationSample = 17, - DecorationInvariant = 18, - DecorationRestrict = 19, - DecorationAliased = 20, - DecorationVolatile = 21, - DecorationConstant = 22, - DecorationCoherent = 23, - DecorationNonWritable = 24, - DecorationNonReadable = 25, - DecorationUniform = 26, - DecorationUniformId = 27, - DecorationSaturatedConversion = 28, - DecorationStream = 29, - DecorationLocation = 30, - DecorationComponent = 31, - DecorationIndex = 32, - DecorationBinding = 33, - DecorationDescriptorSet = 34, - DecorationOffset = 35, - DecorationXfbBuffer = 36, - DecorationXfbStride = 37, - DecorationFuncParamAttr = 38, - DecorationFPRoundingMode = 39, - DecorationFPFastMathMode = 40, - DecorationLinkageAttributes = 41, - DecorationNoContraction = 42, - DecorationInputAttachmentIndex = 43, - DecorationAlignment = 44, - DecorationMaxByteOffset = 45, - DecorationAlignmentId = 46, - DecorationMaxByteOffsetId = 47, - DecorationNoSignedWrap = 4469, - DecorationNoUnsignedWrap = 4470, - DecorationExplicitInterpAMD = 4999, - DecorationOverrideCoverageNV = 5248, - DecorationPassthroughNV = 5250, - DecorationViewportRelativeNV = 5252, - DecorationSecondaryViewportRelativeNV = 5256, - DecorationPerPrimitiveNV = 5271, - DecorationPerViewNV = 5272, - DecorationPerTaskNV = 5273, - DecorationPerVertexNV = 5285, - DecorationNonUniform = 5300, - DecorationNonUniformEXT = 5300, - DecorationRestrictPointer = 5355, - DecorationRestrictPointerEXT = 5355, - DecorationAliasedPointer = 5356, - DecorationAliasedPointerEXT = 5356, - DecorationSIMTCallINTEL = 5599, - DecorationReferencedIndirectlyINTEL = 5602, - DecorationClobberINTEL = 5607, - DecorationSideEffectsINTEL = 5608, - DecorationVectorComputeVariableINTEL = 5624, - DecorationFuncParamIOKindINTEL = 5625, - DecorationVectorComputeFunctionINTEL = 5626, - DecorationStackCallINTEL = 5627, - DecorationGlobalVariableOffsetINTEL = 5628, - DecorationCounterBuffer = 5634, - DecorationHlslCounterBufferGOOGLE = 5634, - DecorationHlslSemanticGOOGLE = 5635, - DecorationUserSemantic = 5635, - DecorationUserTypeGOOGLE = 5636, - DecorationFunctionRoundingModeINTEL = 5822, - DecorationFunctionDenormModeINTEL = 5823, - DecorationRegisterINTEL = 5825, - DecorationMemoryINTEL = 5826, - DecorationNumbanksINTEL = 5827, - DecorationBankwidthINTEL = 5828, - DecorationMaxPrivateCopiesINTEL = 5829, - DecorationSinglepumpINTEL = 5830, - DecorationDoublepumpINTEL = 5831, - DecorationMaxReplicatesINTEL = 5832, - DecorationSimpleDualPortINTEL = 5833, - DecorationMergeINTEL = 5834, - DecorationBankBitsINTEL = 5835, - DecorationForcePow2DepthINTEL = 5836, - DecorationBurstCoalesceINTEL = 5899, - DecorationCacheSizeINTEL = 5900, - DecorationDontStaticallyCoalesceINTEL = 5901, - DecorationPrefetchINTEL = 5902, - DecorationStallEnableINTEL = 5905, - DecorationFuseLoopsInFunctionINTEL = 5907, - DecorationBufferLocationINTEL = 5921, - DecorationIOPipeStorageINTEL = 5944, - DecorationFunctionFloatingPointModeINTEL = 6080, - DecorationSingleElementVectorINTEL = 6085, - DecorationVectorComputeCallableFunctionINTEL = 6087, - DecorationMax = 0x7fffffff, -}; - -enum BuiltIn { - BuiltInPosition = 0, - BuiltInPointSize = 1, - BuiltInClipDistance = 3, - BuiltInCullDistance = 4, - BuiltInVertexId = 5, - BuiltInInstanceId = 6, - BuiltInPrimitiveId = 7, - BuiltInInvocationId = 8, - BuiltInLayer = 9, - BuiltInViewportIndex = 10, - BuiltInTessLevelOuter = 11, - BuiltInTessLevelInner = 12, - BuiltInTessCoord = 13, - BuiltInPatchVertices = 14, - BuiltInFragCoord = 15, - BuiltInPointCoord = 16, - BuiltInFrontFacing = 17, - BuiltInSampleId = 18, - BuiltInSamplePosition = 19, - BuiltInSampleMask = 20, - BuiltInFragDepth = 22, - BuiltInHelperInvocation = 23, - BuiltInNumWorkgroups = 24, - BuiltInWorkgroupSize = 25, - BuiltInWorkgroupId = 26, - BuiltInLocalInvocationId = 27, - BuiltInGlobalInvocationId = 28, - BuiltInLocalInvocationIndex = 29, - BuiltInWorkDim = 30, - BuiltInGlobalSize = 31, - BuiltInEnqueuedWorkgroupSize = 32, - BuiltInGlobalOffset = 33, - BuiltInGlobalLinearId = 34, - BuiltInSubgroupSize = 36, - BuiltInSubgroupMaxSize = 37, - BuiltInNumSubgroups = 38, - BuiltInNumEnqueuedSubgroups = 39, - BuiltInSubgroupId = 40, - BuiltInSubgroupLocalInvocationId = 41, - BuiltInVertexIndex = 42, - BuiltInInstanceIndex = 43, - BuiltInSubgroupEqMask = 4416, - BuiltInSubgroupEqMaskKHR = 4416, - BuiltInSubgroupGeMask = 4417, - BuiltInSubgroupGeMaskKHR = 4417, - BuiltInSubgroupGtMask = 4418, - BuiltInSubgroupGtMaskKHR = 4418, - BuiltInSubgroupLeMask = 4419, - BuiltInSubgroupLeMaskKHR = 4419, - BuiltInSubgroupLtMask = 4420, - BuiltInSubgroupLtMaskKHR = 4420, - BuiltInBaseVertex = 4424, - BuiltInBaseInstance = 4425, - BuiltInDrawIndex = 4426, - BuiltInPrimitiveShadingRateKHR = 4432, - BuiltInDeviceIndex = 4438, - BuiltInViewIndex = 4440, - BuiltInShadingRateKHR = 4444, - BuiltInBaryCoordNoPerspAMD = 4992, - BuiltInBaryCoordNoPerspCentroidAMD = 4993, - BuiltInBaryCoordNoPerspSampleAMD = 4994, - BuiltInBaryCoordSmoothAMD = 4995, - BuiltInBaryCoordSmoothCentroidAMD = 4996, - BuiltInBaryCoordSmoothSampleAMD = 4997, - BuiltInBaryCoordPullModelAMD = 4998, - BuiltInFragStencilRefEXT = 5014, - BuiltInViewportMaskNV = 5253, - BuiltInSecondaryPositionNV = 5257, - BuiltInSecondaryViewportMaskNV = 5258, - BuiltInPositionPerViewNV = 5261, - BuiltInViewportMaskPerViewNV = 5262, - BuiltInFullyCoveredEXT = 5264, - BuiltInTaskCountNV = 5274, - BuiltInPrimitiveCountNV = 5275, - BuiltInPrimitiveIndicesNV = 5276, - BuiltInClipDistancePerViewNV = 5277, - BuiltInCullDistancePerViewNV = 5278, - BuiltInLayerPerViewNV = 5279, - BuiltInMeshViewCountNV = 5280, - BuiltInMeshViewIndicesNV = 5281, - BuiltInBaryCoordNV = 5286, - BuiltInBaryCoordNoPerspNV = 5287, - BuiltInFragSizeEXT = 5292, - BuiltInFragmentSizeNV = 5292, - BuiltInFragInvocationCountEXT = 5293, - BuiltInInvocationsPerPixelNV = 5293, - BuiltInLaunchIdKHR = 5319, - BuiltInLaunchIdNV = 5319, - BuiltInLaunchSizeKHR = 5320, - BuiltInLaunchSizeNV = 5320, - BuiltInWorldRayOriginKHR = 5321, - BuiltInWorldRayOriginNV = 5321, - BuiltInWorldRayDirectionKHR = 5322, - BuiltInWorldRayDirectionNV = 5322, - BuiltInObjectRayOriginKHR = 5323, - BuiltInObjectRayOriginNV = 5323, - BuiltInObjectRayDirectionKHR = 5324, - BuiltInObjectRayDirectionNV = 5324, - BuiltInRayTminKHR = 5325, - BuiltInRayTminNV = 5325, - BuiltInRayTmaxKHR = 5326, - BuiltInRayTmaxNV = 5326, - BuiltInInstanceCustomIndexKHR = 5327, - BuiltInInstanceCustomIndexNV = 5327, - BuiltInObjectToWorldKHR = 5330, - BuiltInObjectToWorldNV = 5330, - BuiltInWorldToObjectKHR = 5331, - BuiltInWorldToObjectNV = 5331, - BuiltInHitTNV = 5332, - BuiltInHitKindKHR = 5333, - BuiltInHitKindNV = 5333, - BuiltInCurrentRayTimeNV = 5334, - BuiltInIncomingRayFlagsKHR = 5351, - BuiltInIncomingRayFlagsNV = 5351, - BuiltInRayGeometryIndexKHR = 5352, - BuiltInWarpsPerSMNV = 5374, - BuiltInSMCountNV = 5375, - BuiltInWarpIDNV = 5376, - BuiltInSMIDNV = 5377, - BuiltInMax = 0x7fffffff, -}; - -enum SelectionControlShift { - SelectionControlFlattenShift = 0, - SelectionControlDontFlattenShift = 1, - SelectionControlMax = 0x7fffffff, -}; - -enum SelectionControlMask { - SelectionControlMaskNone = 0, - SelectionControlFlattenMask = 0x00000001, - SelectionControlDontFlattenMask = 0x00000002, -}; - -enum LoopControlShift { - LoopControlUnrollShift = 0, - LoopControlDontUnrollShift = 1, - LoopControlDependencyInfiniteShift = 2, - LoopControlDependencyLengthShift = 3, - LoopControlMinIterationsShift = 4, - LoopControlMaxIterationsShift = 5, - LoopControlIterationMultipleShift = 6, - LoopControlPeelCountShift = 7, - LoopControlPartialCountShift = 8, - LoopControlInitiationIntervalINTELShift = 16, - LoopControlMaxConcurrencyINTELShift = 17, - LoopControlDependencyArrayINTELShift = 18, - LoopControlPipelineEnableINTELShift = 19, - LoopControlLoopCoalesceINTELShift = 20, - LoopControlMaxInterleavingINTELShift = 21, - LoopControlSpeculatedIterationsINTELShift = 22, - LoopControlNoFusionINTELShift = 23, - LoopControlMax = 0x7fffffff, -}; - -enum LoopControlMask { - LoopControlMaskNone = 0, - LoopControlUnrollMask = 0x00000001, - LoopControlDontUnrollMask = 0x00000002, - LoopControlDependencyInfiniteMask = 0x00000004, - LoopControlDependencyLengthMask = 0x00000008, - LoopControlMinIterationsMask = 0x00000010, - LoopControlMaxIterationsMask = 0x00000020, - LoopControlIterationMultipleMask = 0x00000040, - LoopControlPeelCountMask = 0x00000080, - LoopControlPartialCountMask = 0x00000100, - LoopControlInitiationIntervalINTELMask = 0x00010000, - LoopControlMaxConcurrencyINTELMask = 0x00020000, - LoopControlDependencyArrayINTELMask = 0x00040000, - LoopControlPipelineEnableINTELMask = 0x00080000, - LoopControlLoopCoalesceINTELMask = 0x00100000, - LoopControlMaxInterleavingINTELMask = 0x00200000, - LoopControlSpeculatedIterationsINTELMask = 0x00400000, - LoopControlNoFusionINTELMask = 0x00800000, -}; - -enum FunctionControlShift { - FunctionControlInlineShift = 0, - FunctionControlDontInlineShift = 1, - FunctionControlPureShift = 2, - FunctionControlConstShift = 3, - FunctionControlMax = 0x7fffffff, -}; - -enum FunctionControlMask { - FunctionControlMaskNone = 0, - FunctionControlInlineMask = 0x00000001, - FunctionControlDontInlineMask = 0x00000002, - FunctionControlPureMask = 0x00000004, - FunctionControlConstMask = 0x00000008, -}; - -enum MemorySemanticsShift { - MemorySemanticsAcquireShift = 1, - MemorySemanticsReleaseShift = 2, - MemorySemanticsAcquireReleaseShift = 3, - MemorySemanticsSequentiallyConsistentShift = 4, - MemorySemanticsUniformMemoryShift = 6, - MemorySemanticsSubgroupMemoryShift = 7, - MemorySemanticsWorkgroupMemoryShift = 8, - MemorySemanticsCrossWorkgroupMemoryShift = 9, - MemorySemanticsAtomicCounterMemoryShift = 10, - MemorySemanticsImageMemoryShift = 11, - MemorySemanticsOutputMemoryShift = 12, - MemorySemanticsOutputMemoryKHRShift = 12, - MemorySemanticsMakeAvailableShift = 13, - MemorySemanticsMakeAvailableKHRShift = 13, - MemorySemanticsMakeVisibleShift = 14, - MemorySemanticsMakeVisibleKHRShift = 14, - MemorySemanticsVolatileShift = 15, - MemorySemanticsMax = 0x7fffffff, -}; - -enum MemorySemanticsMask { - MemorySemanticsMaskNone = 0, - MemorySemanticsAcquireMask = 0x00000002, - MemorySemanticsReleaseMask = 0x00000004, - MemorySemanticsAcquireReleaseMask = 0x00000008, - MemorySemanticsSequentiallyConsistentMask = 0x00000010, - MemorySemanticsUniformMemoryMask = 0x00000040, - MemorySemanticsSubgroupMemoryMask = 0x00000080, - MemorySemanticsWorkgroupMemoryMask = 0x00000100, - MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, - MemorySemanticsAtomicCounterMemoryMask = 0x00000400, - MemorySemanticsImageMemoryMask = 0x00000800, - MemorySemanticsOutputMemoryMask = 0x00001000, - MemorySemanticsOutputMemoryKHRMask = 0x00001000, - MemorySemanticsMakeAvailableMask = 0x00002000, - MemorySemanticsMakeAvailableKHRMask = 0x00002000, - MemorySemanticsMakeVisibleMask = 0x00004000, - MemorySemanticsMakeVisibleKHRMask = 0x00004000, - MemorySemanticsVolatileMask = 0x00008000, -}; - -enum MemoryAccessShift { - MemoryAccessVolatileShift = 0, - MemoryAccessAlignedShift = 1, - MemoryAccessNontemporalShift = 2, - MemoryAccessMakePointerAvailableShift = 3, - MemoryAccessMakePointerAvailableKHRShift = 3, - MemoryAccessMakePointerVisibleShift = 4, - MemoryAccessMakePointerVisibleKHRShift = 4, - MemoryAccessNonPrivatePointerShift = 5, - MemoryAccessNonPrivatePointerKHRShift = 5, - MemoryAccessMax = 0x7fffffff, -}; - -enum MemoryAccessMask { - MemoryAccessMaskNone = 0, - MemoryAccessVolatileMask = 0x00000001, - MemoryAccessAlignedMask = 0x00000002, - MemoryAccessNontemporalMask = 0x00000004, - MemoryAccessMakePointerAvailableMask = 0x00000008, - MemoryAccessMakePointerAvailableKHRMask = 0x00000008, - MemoryAccessMakePointerVisibleMask = 0x00000010, - MemoryAccessMakePointerVisibleKHRMask = 0x00000010, - MemoryAccessNonPrivatePointerMask = 0x00000020, - MemoryAccessNonPrivatePointerKHRMask = 0x00000020, -}; - -enum Scope { - ScopeCrossDevice = 0, - ScopeDevice = 1, - ScopeWorkgroup = 2, - ScopeSubgroup = 3, - ScopeInvocation = 4, - ScopeQueueFamily = 5, - ScopeQueueFamilyKHR = 5, - ScopeShaderCallKHR = 6, - ScopeMax = 0x7fffffff, -}; - -enum GroupOperation { - GroupOperationReduce = 0, - GroupOperationInclusiveScan = 1, - GroupOperationExclusiveScan = 2, - GroupOperationClusteredReduce = 3, - GroupOperationPartitionedReduceNV = 6, - GroupOperationPartitionedInclusiveScanNV = 7, - GroupOperationPartitionedExclusiveScanNV = 8, - GroupOperationMax = 0x7fffffff, -}; - -enum KernelEnqueueFlags { - KernelEnqueueFlagsNoWait = 0, - KernelEnqueueFlagsWaitKernel = 1, - KernelEnqueueFlagsWaitWorkGroup = 2, - KernelEnqueueFlagsMax = 0x7fffffff, -}; - -enum KernelProfilingInfoShift { - KernelProfilingInfoCmdExecTimeShift = 0, - KernelProfilingInfoMax = 0x7fffffff, -}; - -enum KernelProfilingInfoMask { - KernelProfilingInfoMaskNone = 0, - KernelProfilingInfoCmdExecTimeMask = 0x00000001, -}; - -enum Capability { - CapabilityMatrix = 0, - CapabilityShader = 1, - CapabilityGeometry = 2, - CapabilityTessellation = 3, - CapabilityAddresses = 4, - CapabilityLinkage = 5, - CapabilityKernel = 6, - CapabilityVector16 = 7, - CapabilityFloat16Buffer = 8, - CapabilityFloat16 = 9, - CapabilityFloat64 = 10, - CapabilityInt64 = 11, - CapabilityInt64Atomics = 12, - CapabilityImageBasic = 13, - CapabilityImageReadWrite = 14, - CapabilityImageMipmap = 15, - CapabilityPipes = 17, - CapabilityGroups = 18, - CapabilityDeviceEnqueue = 19, - CapabilityLiteralSampler = 20, - CapabilityAtomicStorage = 21, - CapabilityInt16 = 22, - CapabilityTessellationPointSize = 23, - CapabilityGeometryPointSize = 24, - CapabilityImageGatherExtended = 25, - CapabilityStorageImageMultisample = 27, - CapabilityUniformBufferArrayDynamicIndexing = 28, - CapabilitySampledImageArrayDynamicIndexing = 29, - CapabilityStorageBufferArrayDynamicIndexing = 30, - CapabilityStorageImageArrayDynamicIndexing = 31, - CapabilityClipDistance = 32, - CapabilityCullDistance = 33, - CapabilityImageCubeArray = 34, - CapabilitySampleRateShading = 35, - CapabilityImageRect = 36, - CapabilitySampledRect = 37, - CapabilityGenericPointer = 38, - CapabilityInt8 = 39, - CapabilityInputAttachment = 40, - CapabilitySparseResidency = 41, - CapabilityMinLod = 42, - CapabilitySampled1D = 43, - CapabilityImage1D = 44, - CapabilitySampledCubeArray = 45, - CapabilitySampledBuffer = 46, - CapabilityImageBuffer = 47, - CapabilityImageMSArray = 48, - CapabilityStorageImageExtendedFormats = 49, - CapabilityImageQuery = 50, - CapabilityDerivativeControl = 51, - CapabilityInterpolationFunction = 52, - CapabilityTransformFeedback = 53, - CapabilityGeometryStreams = 54, - CapabilityStorageImageReadWithoutFormat = 55, - CapabilityStorageImageWriteWithoutFormat = 56, - CapabilityMultiViewport = 57, - CapabilitySubgroupDispatch = 58, - CapabilityNamedBarrier = 59, - CapabilityPipeStorage = 60, - CapabilityGroupNonUniform = 61, - CapabilityGroupNonUniformVote = 62, - CapabilityGroupNonUniformArithmetic = 63, - CapabilityGroupNonUniformBallot = 64, - CapabilityGroupNonUniformShuffle = 65, - CapabilityGroupNonUniformShuffleRelative = 66, - CapabilityGroupNonUniformClustered = 67, - CapabilityGroupNonUniformQuad = 68, - CapabilityShaderLayer = 69, - CapabilityShaderViewportIndex = 70, - CapabilityFragmentShadingRateKHR = 4422, - CapabilitySubgroupBallotKHR = 4423, - CapabilityDrawParameters = 4427, - CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, - CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, - CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, - CapabilitySubgroupVoteKHR = 4431, - CapabilityStorageBuffer16BitAccess = 4433, - CapabilityStorageUniformBufferBlock16 = 4433, - CapabilityStorageUniform16 = 4434, - CapabilityUniformAndStorageBuffer16BitAccess = 4434, - CapabilityStoragePushConstant16 = 4435, - CapabilityStorageInputOutput16 = 4436, - CapabilityDeviceGroup = 4437, - CapabilityMultiView = 4439, - CapabilityVariablePointersStorageBuffer = 4441, - CapabilityVariablePointers = 4442, - CapabilityAtomicStorageOps = 4445, - CapabilitySampleMaskPostDepthCoverage = 4447, - CapabilityStorageBuffer8BitAccess = 4448, - CapabilityUniformAndStorageBuffer8BitAccess = 4449, - CapabilityStoragePushConstant8 = 4450, - CapabilityDenormPreserve = 4464, - CapabilityDenormFlushToZero = 4465, - CapabilitySignedZeroInfNanPreserve = 4466, - CapabilityRoundingModeRTE = 4467, - CapabilityRoundingModeRTZ = 4468, - CapabilityRayQueryProvisionalKHR = 4471, - CapabilityRayQueryKHR = 4472, - CapabilityRayTraversalPrimitiveCullingKHR = 4478, - CapabilityRayTracingKHR = 4479, - CapabilityFloat16ImageAMD = 5008, - CapabilityImageGatherBiasLodAMD = 5009, - CapabilityFragmentMaskAMD = 5010, - CapabilityStencilExportEXT = 5013, - CapabilityImageReadWriteLodAMD = 5015, - CapabilityInt64ImageEXT = 5016, - CapabilityShaderClockKHR = 5055, - CapabilitySampleMaskOverrideCoverageNV = 5249, - CapabilityGeometryShaderPassthroughNV = 5251, - CapabilityShaderViewportIndexLayerEXT = 5254, - CapabilityShaderViewportIndexLayerNV = 5254, - CapabilityShaderViewportMaskNV = 5255, - CapabilityShaderStereoViewNV = 5259, - CapabilityPerViewAttributesNV = 5260, - CapabilityFragmentFullyCoveredEXT = 5265, - CapabilityMeshShadingNV = 5266, - CapabilityImageFootprintNV = 5282, - CapabilityFragmentBarycentricNV = 5284, - CapabilityComputeDerivativeGroupQuadsNV = 5288, - CapabilityFragmentDensityEXT = 5291, - CapabilityShadingRateNV = 5291, - CapabilityGroupNonUniformPartitionedNV = 5297, - CapabilityShaderNonUniform = 5301, - CapabilityShaderNonUniformEXT = 5301, - CapabilityRuntimeDescriptorArray = 5302, - CapabilityRuntimeDescriptorArrayEXT = 5302, - CapabilityInputAttachmentArrayDynamicIndexing = 5303, - CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303, - CapabilityUniformTexelBufferArrayDynamicIndexing = 5304, - CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304, - CapabilityStorageTexelBufferArrayDynamicIndexing = 5305, - CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305, - CapabilityUniformBufferArrayNonUniformIndexing = 5306, - CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306, - CapabilitySampledImageArrayNonUniformIndexing = 5307, - CapabilitySampledImageArrayNonUniformIndexingEXT = 5307, - CapabilityStorageBufferArrayNonUniformIndexing = 5308, - CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308, - CapabilityStorageImageArrayNonUniformIndexing = 5309, - CapabilityStorageImageArrayNonUniformIndexingEXT = 5309, - CapabilityInputAttachmentArrayNonUniformIndexing = 5310, - CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, - CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311, - CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, - CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, - CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, - CapabilityRayTracingNV = 5340, - CapabilityRayTracingMotionBlurNV = 5341, - CapabilityVulkanMemoryModel = 5345, - CapabilityVulkanMemoryModelKHR = 5345, - CapabilityVulkanMemoryModelDeviceScope = 5346, - CapabilityVulkanMemoryModelDeviceScopeKHR = 5346, - CapabilityPhysicalStorageBufferAddresses = 5347, - CapabilityPhysicalStorageBufferAddressesEXT = 5347, - CapabilityComputeDerivativeGroupLinearNV = 5350, - CapabilityRayTracingProvisionalKHR = 5353, - CapabilityCooperativeMatrixNV = 5357, - CapabilityFragmentShaderSampleInterlockEXT = 5363, - CapabilityFragmentShaderShadingRateInterlockEXT = 5372, - CapabilityShaderSMBuiltinsNV = 5373, - CapabilityFragmentShaderPixelInterlockEXT = 5378, - CapabilityDemoteToHelperInvocationEXT = 5379, - CapabilitySubgroupShuffleINTEL = 5568, - CapabilitySubgroupBufferBlockIOINTEL = 5569, - CapabilitySubgroupImageBlockIOINTEL = 5570, - CapabilitySubgroupImageMediaBlockIOINTEL = 5579, - CapabilityRoundToInfinityINTEL = 5582, - CapabilityFloatingPointModeINTEL = 5583, - CapabilityIntegerFunctions2INTEL = 5584, - CapabilityFunctionPointersINTEL = 5603, - CapabilityIndirectReferencesINTEL = 5604, - CapabilityAsmINTEL = 5606, - CapabilityAtomicFloat32MinMaxEXT = 5612, - CapabilityAtomicFloat64MinMaxEXT = 5613, - CapabilityAtomicFloat16MinMaxEXT = 5616, - CapabilityVectorComputeINTEL = 5617, - CapabilityVectorAnyINTEL = 5619, - CapabilityExpectAssumeKHR = 5629, - CapabilitySubgroupAvcMotionEstimationINTEL = 5696, - CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, - CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, - CapabilityVariableLengthArrayINTEL = 5817, - CapabilityFunctionFloatControlINTEL = 5821, - CapabilityFPGAMemoryAttributesINTEL = 5824, - CapabilityFPFastMathModeINTEL = 5837, - CapabilityArbitraryPrecisionIntegersINTEL = 5844, - CapabilityUnstructuredLoopControlsINTEL = 5886, - CapabilityFPGALoopControlsINTEL = 5888, - CapabilityKernelAttributesINTEL = 5892, - CapabilityFPGAKernelAttributesINTEL = 5897, - CapabilityFPGAMemoryAccessesINTEL = 5898, - CapabilityFPGAClusterAttributesINTEL = 5904, - CapabilityLoopFuseINTEL = 5906, - CapabilityFPGABufferLocationINTEL = 5920, - CapabilityUSMStorageClassesINTEL = 5935, - CapabilityIOPipesINTEL = 5943, - CapabilityBlockingPipesINTEL = 5945, - CapabilityFPGARegINTEL = 5948, - CapabilityAtomicFloat32AddEXT = 6033, - CapabilityAtomicFloat64AddEXT = 6034, - CapabilityLongConstantCompositeINTEL = 6089, - CapabilityAtomicFloat16AddEXT = 6095, - CapabilityMax = 0x7fffffff, -}; - -enum RayFlagsShift { - RayFlagsOpaqueKHRShift = 0, - RayFlagsNoOpaqueKHRShift = 1, - RayFlagsTerminateOnFirstHitKHRShift = 2, - RayFlagsSkipClosestHitShaderKHRShift = 3, - RayFlagsCullBackFacingTrianglesKHRShift = 4, - RayFlagsCullFrontFacingTrianglesKHRShift = 5, - RayFlagsCullOpaqueKHRShift = 6, - RayFlagsCullNoOpaqueKHRShift = 7, - RayFlagsSkipTrianglesKHRShift = 8, - RayFlagsSkipAABBsKHRShift = 9, - RayFlagsMax = 0x7fffffff, -}; - -enum RayFlagsMask { - RayFlagsMaskNone = 0, - RayFlagsOpaqueKHRMask = 0x00000001, - RayFlagsNoOpaqueKHRMask = 0x00000002, - RayFlagsTerminateOnFirstHitKHRMask = 0x00000004, - RayFlagsSkipClosestHitShaderKHRMask = 0x00000008, - RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, - RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, - RayFlagsCullOpaqueKHRMask = 0x00000040, - RayFlagsCullNoOpaqueKHRMask = 0x00000080, - RayFlagsSkipTrianglesKHRMask = 0x00000100, - RayFlagsSkipAABBsKHRMask = 0x00000200, -}; - -enum RayQueryIntersection { - RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0, - RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1, - RayQueryIntersectionMax = 0x7fffffff, -}; - -enum RayQueryCommittedIntersectionType { - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1, - RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2, - RayQueryCommittedIntersectionTypeMax = 0x7fffffff, -}; - -enum RayQueryCandidateIntersectionType { - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0, - RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1, - RayQueryCandidateIntersectionTypeMax = 0x7fffffff, -}; - -enum FragmentShadingRateShift { - FragmentShadingRateVertical2PixelsShift = 0, - FragmentShadingRateVertical4PixelsShift = 1, - FragmentShadingRateHorizontal2PixelsShift = 2, - FragmentShadingRateHorizontal4PixelsShift = 3, - FragmentShadingRateMax = 0x7fffffff, -}; - -enum FragmentShadingRateMask { - FragmentShadingRateMaskNone = 0, - FragmentShadingRateVertical2PixelsMask = 0x00000001, - FragmentShadingRateVertical4PixelsMask = 0x00000002, - FragmentShadingRateHorizontal2PixelsMask = 0x00000004, - FragmentShadingRateHorizontal4PixelsMask = 0x00000008, -}; - -enum FPDenormMode { - FPDenormModePreserve = 0, - FPDenormModeFlushToZero = 1, - FPDenormModeMax = 0x7fffffff, -}; - -enum FPOperationMode { - FPOperationModeIEEE = 0, - FPOperationModeALT = 1, - FPOperationModeMax = 0x7fffffff, -}; - -enum Op { - OpNop = 0, - OpUndef = 1, - OpSourceContinued = 2, - OpSource = 3, - OpSourceExtension = 4, - OpName = 5, - OpMemberName = 6, - OpString = 7, - OpLine = 8, - OpExtension = 10, - OpExtInstImport = 11, - OpExtInst = 12, - OpMemoryModel = 14, - OpEntryPoint = 15, - OpExecutionMode = 16, - OpCapability = 17, - OpTypeVoid = 19, - OpTypeBool = 20, - OpTypeInt = 21, - OpTypeFloat = 22, - OpTypeVector = 23, - OpTypeMatrix = 24, - OpTypeImage = 25, - OpTypeSampler = 26, - OpTypeSampledImage = 27, - OpTypeArray = 28, - OpTypeRuntimeArray = 29, - OpTypeStruct = 30, - OpTypeOpaque = 31, - OpTypePointer = 32, - OpTypeFunction = 33, - OpTypeEvent = 34, - OpTypeDeviceEvent = 35, - OpTypeReserveId = 36, - OpTypeQueue = 37, - OpTypePipe = 38, - OpTypeForwardPointer = 39, - OpConstantTrue = 41, - OpConstantFalse = 42, - OpConstant = 43, - OpConstantComposite = 44, - OpConstantSampler = 45, - OpConstantNull = 46, - OpSpecConstantTrue = 48, - OpSpecConstantFalse = 49, - OpSpecConstant = 50, - OpSpecConstantComposite = 51, - OpSpecConstantOp = 52, - OpFunction = 54, - OpFunctionParameter = 55, - OpFunctionEnd = 56, - OpFunctionCall = 57, - OpVariable = 59, - OpImageTexelPointer = 60, - OpLoad = 61, - OpStore = 62, - OpCopyMemory = 63, - OpCopyMemorySized = 64, - OpAccessChain = 65, - OpInBoundsAccessChain = 66, - OpPtrAccessChain = 67, - OpArrayLength = 68, - OpGenericPtrMemSemantics = 69, - OpInBoundsPtrAccessChain = 70, - OpDecorate = 71, - OpMemberDecorate = 72, - OpDecorationGroup = 73, - OpGroupDecorate = 74, - OpGroupMemberDecorate = 75, - OpVectorExtractDynamic = 77, - OpVectorInsertDynamic = 78, - OpVectorShuffle = 79, - OpCompositeConstruct = 80, - OpCompositeExtract = 81, - OpCompositeInsert = 82, - OpCopyObject = 83, - OpTranspose = 84, - OpSampledImage = 86, - OpImageSampleImplicitLod = 87, - OpImageSampleExplicitLod = 88, - OpImageSampleDrefImplicitLod = 89, - OpImageSampleDrefExplicitLod = 90, - OpImageSampleProjImplicitLod = 91, - OpImageSampleProjExplicitLod = 92, - OpImageSampleProjDrefImplicitLod = 93, - OpImageSampleProjDrefExplicitLod = 94, - OpImageFetch = 95, - OpImageGather = 96, - OpImageDrefGather = 97, - OpImageRead = 98, - OpImageWrite = 99, - OpImage = 100, - OpImageQueryFormat = 101, - OpImageQueryOrder = 102, - OpImageQuerySizeLod = 103, - OpImageQuerySize = 104, - OpImageQueryLod = 105, - OpImageQueryLevels = 106, - OpImageQuerySamples = 107, - OpConvertFToU = 109, - OpConvertFToS = 110, - OpConvertSToF = 111, - OpConvertUToF = 112, - OpUConvert = 113, - OpSConvert = 114, - OpFConvert = 115, - OpQuantizeToF16 = 116, - OpConvertPtrToU = 117, - OpSatConvertSToU = 118, - OpSatConvertUToS = 119, - OpConvertUToPtr = 120, - OpPtrCastToGeneric = 121, - OpGenericCastToPtr = 122, - OpGenericCastToPtrExplicit = 123, - OpBitcast = 124, - OpSNegate = 126, - OpFNegate = 127, - OpIAdd = 128, - OpFAdd = 129, - OpISub = 130, - OpFSub = 131, - OpIMul = 132, - OpFMul = 133, - OpUDiv = 134, - OpSDiv = 135, - OpFDiv = 136, - OpUMod = 137, - OpSRem = 138, - OpSMod = 139, - OpFRem = 140, - OpFMod = 141, - OpVectorTimesScalar = 142, - OpMatrixTimesScalar = 143, - OpVectorTimesMatrix = 144, - OpMatrixTimesVector = 145, - OpMatrixTimesMatrix = 146, - OpOuterProduct = 147, - OpDot = 148, - OpIAddCarry = 149, - OpISubBorrow = 150, - OpUMulExtended = 151, - OpSMulExtended = 152, - OpAny = 154, - OpAll = 155, - OpIsNan = 156, - OpIsInf = 157, - OpIsFinite = 158, - OpIsNormal = 159, - OpSignBitSet = 160, - OpLessOrGreater = 161, - OpOrdered = 162, - OpUnordered = 163, - OpLogicalEqual = 164, - OpLogicalNotEqual = 165, - OpLogicalOr = 166, - OpLogicalAnd = 167, - OpLogicalNot = 168, - OpSelect = 169, - OpIEqual = 170, - OpINotEqual = 171, - OpUGreaterThan = 172, - OpSGreaterThan = 173, - OpUGreaterThanEqual = 174, - OpSGreaterThanEqual = 175, - OpULessThan = 176, - OpSLessThan = 177, - OpULessThanEqual = 178, - OpSLessThanEqual = 179, - OpFOrdEqual = 180, - OpFUnordEqual = 181, - OpFOrdNotEqual = 182, - OpFUnordNotEqual = 183, - OpFOrdLessThan = 184, - OpFUnordLessThan = 185, - OpFOrdGreaterThan = 186, - OpFUnordGreaterThan = 187, - OpFOrdLessThanEqual = 188, - OpFUnordLessThanEqual = 189, - OpFOrdGreaterThanEqual = 190, - OpFUnordGreaterThanEqual = 191, - OpShiftRightLogical = 194, - OpShiftRightArithmetic = 195, - OpShiftLeftLogical = 196, - OpBitwiseOr = 197, - OpBitwiseXor = 198, - OpBitwiseAnd = 199, - OpNot = 200, - OpBitFieldInsert = 201, - OpBitFieldSExtract = 202, - OpBitFieldUExtract = 203, - OpBitReverse = 204, - OpBitCount = 205, - OpDPdx = 207, - OpDPdy = 208, - OpFwidth = 209, - OpDPdxFine = 210, - OpDPdyFine = 211, - OpFwidthFine = 212, - OpDPdxCoarse = 213, - OpDPdyCoarse = 214, - OpFwidthCoarse = 215, - OpEmitVertex = 218, - OpEndPrimitive = 219, - OpEmitStreamVertex = 220, - OpEndStreamPrimitive = 221, - OpControlBarrier = 224, - OpMemoryBarrier = 225, - OpAtomicLoad = 227, - OpAtomicStore = 228, - OpAtomicExchange = 229, - OpAtomicCompareExchange = 230, - OpAtomicCompareExchangeWeak = 231, - OpAtomicIIncrement = 232, - OpAtomicIDecrement = 233, - OpAtomicIAdd = 234, - OpAtomicISub = 235, - OpAtomicSMin = 236, - OpAtomicUMin = 237, - OpAtomicSMax = 238, - OpAtomicUMax = 239, - OpAtomicAnd = 240, - OpAtomicOr = 241, - OpAtomicXor = 242, - OpPhi = 245, - OpLoopMerge = 246, - OpSelectionMerge = 247, - OpLabel = 248, - OpBranch = 249, - OpBranchConditional = 250, - OpSwitch = 251, - OpKill = 252, - OpReturn = 253, - OpReturnValue = 254, - OpUnreachable = 255, - OpLifetimeStart = 256, - OpLifetimeStop = 257, - OpGroupAsyncCopy = 259, - OpGroupWaitEvents = 260, - OpGroupAll = 261, - OpGroupAny = 262, - OpGroupBroadcast = 263, - OpGroupIAdd = 264, - OpGroupFAdd = 265, - OpGroupFMin = 266, - OpGroupUMin = 267, - OpGroupSMin = 268, - OpGroupFMax = 269, - OpGroupUMax = 270, - OpGroupSMax = 271, - OpReadPipe = 274, - OpWritePipe = 275, - OpReservedReadPipe = 276, - OpReservedWritePipe = 277, - OpReserveReadPipePackets = 278, - OpReserveWritePipePackets = 279, - OpCommitReadPipe = 280, - OpCommitWritePipe = 281, - OpIsValidReserveId = 282, - OpGetNumPipePackets = 283, - OpGetMaxPipePackets = 284, - OpGroupReserveReadPipePackets = 285, - OpGroupReserveWritePipePackets = 286, - OpGroupCommitReadPipe = 287, - OpGroupCommitWritePipe = 288, - OpEnqueueMarker = 291, - OpEnqueueKernel = 292, - OpGetKernelNDrangeSubGroupCount = 293, - OpGetKernelNDrangeMaxSubGroupSize = 294, - OpGetKernelWorkGroupSize = 295, - OpGetKernelPreferredWorkGroupSizeMultiple = 296, - OpRetainEvent = 297, - OpReleaseEvent = 298, - OpCreateUserEvent = 299, - OpIsValidEvent = 300, - OpSetUserEventStatus = 301, - OpCaptureEventProfilingInfo = 302, - OpGetDefaultQueue = 303, - OpBuildNDRange = 304, - OpImageSparseSampleImplicitLod = 305, - OpImageSparseSampleExplicitLod = 306, - OpImageSparseSampleDrefImplicitLod = 307, - OpImageSparseSampleDrefExplicitLod = 308, - OpImageSparseSampleProjImplicitLod = 309, - OpImageSparseSampleProjExplicitLod = 310, - OpImageSparseSampleProjDrefImplicitLod = 311, - OpImageSparseSampleProjDrefExplicitLod = 312, - OpImageSparseFetch = 313, - OpImageSparseGather = 314, - OpImageSparseDrefGather = 315, - OpImageSparseTexelsResident = 316, - OpNoLine = 317, - OpAtomicFlagTestAndSet = 318, - OpAtomicFlagClear = 319, - OpImageSparseRead = 320, - OpSizeOf = 321, - OpTypePipeStorage = 322, - OpConstantPipeStorage = 323, - OpCreatePipeFromPipeStorage = 324, - OpGetKernelLocalSizeForSubgroupCount = 325, - OpGetKernelMaxNumSubgroups = 326, - OpTypeNamedBarrier = 327, - OpNamedBarrierInitialize = 328, - OpMemoryNamedBarrier = 329, - OpModuleProcessed = 330, - OpExecutionModeId = 331, - OpDecorateId = 332, - OpGroupNonUniformElect = 333, - OpGroupNonUniformAll = 334, - OpGroupNonUniformAny = 335, - OpGroupNonUniformAllEqual = 336, - OpGroupNonUniformBroadcast = 337, - OpGroupNonUniformBroadcastFirst = 338, - OpGroupNonUniformBallot = 339, - OpGroupNonUniformInverseBallot = 340, - OpGroupNonUniformBallotBitExtract = 341, - OpGroupNonUniformBallotBitCount = 342, - OpGroupNonUniformBallotFindLSB = 343, - OpGroupNonUniformBallotFindMSB = 344, - OpGroupNonUniformShuffle = 345, - OpGroupNonUniformShuffleXor = 346, - OpGroupNonUniformShuffleUp = 347, - OpGroupNonUniformShuffleDown = 348, - OpGroupNonUniformIAdd = 349, - OpGroupNonUniformFAdd = 350, - OpGroupNonUniformIMul = 351, - OpGroupNonUniformFMul = 352, - OpGroupNonUniformSMin = 353, - OpGroupNonUniformUMin = 354, - OpGroupNonUniformFMin = 355, - OpGroupNonUniformSMax = 356, - OpGroupNonUniformUMax = 357, - OpGroupNonUniformFMax = 358, - OpGroupNonUniformBitwiseAnd = 359, - OpGroupNonUniformBitwiseOr = 360, - OpGroupNonUniformBitwiseXor = 361, - OpGroupNonUniformLogicalAnd = 362, - OpGroupNonUniformLogicalOr = 363, - OpGroupNonUniformLogicalXor = 364, - OpGroupNonUniformQuadBroadcast = 365, - OpGroupNonUniformQuadSwap = 366, - OpCopyLogical = 400, - OpPtrEqual = 401, - OpPtrNotEqual = 402, - OpPtrDiff = 403, - OpTerminateInvocation = 4416, - OpSubgroupBallotKHR = 4421, - OpSubgroupFirstInvocationKHR = 4422, - OpSubgroupAllKHR = 4428, - OpSubgroupAnyKHR = 4429, - OpSubgroupAllEqualKHR = 4430, - OpSubgroupReadInvocationKHR = 4432, - OpTraceRayKHR = 4445, - OpExecuteCallableKHR = 4446, - OpConvertUToAccelerationStructureKHR = 4447, - OpIgnoreIntersectionKHR = 4448, - OpTerminateRayKHR = 4449, - OpTypeRayQueryKHR = 4472, - OpRayQueryInitializeKHR = 4473, - OpRayQueryTerminateKHR = 4474, - OpRayQueryGenerateIntersectionKHR = 4475, - OpRayQueryConfirmIntersectionKHR = 4476, - OpRayQueryProceedKHR = 4477, - OpRayQueryGetIntersectionTypeKHR = 4479, - OpGroupIAddNonUniformAMD = 5000, - OpGroupFAddNonUniformAMD = 5001, - OpGroupFMinNonUniformAMD = 5002, - OpGroupUMinNonUniformAMD = 5003, - OpGroupSMinNonUniformAMD = 5004, - OpGroupFMaxNonUniformAMD = 5005, - OpGroupUMaxNonUniformAMD = 5006, - OpGroupSMaxNonUniformAMD = 5007, - OpFragmentMaskFetchAMD = 5011, - OpFragmentFetchAMD = 5012, - OpReadClockKHR = 5056, - OpImageSampleFootprintNV = 5283, - OpGroupNonUniformPartitionNV = 5296, - OpWritePackedPrimitiveIndices4x8NV = 5299, - OpReportIntersectionKHR = 5334, - OpReportIntersectionNV = 5334, - OpIgnoreIntersectionNV = 5335, - OpTerminateRayNV = 5336, - OpTraceNV = 5337, - OpTraceMotionNV = 5338, - OpTraceRayMotionNV = 5339, - OpTypeAccelerationStructureKHR = 5341, - OpTypeAccelerationStructureNV = 5341, - OpExecuteCallableNV = 5344, - OpTypeCooperativeMatrixNV = 5358, - OpCooperativeMatrixLoadNV = 5359, - OpCooperativeMatrixStoreNV = 5360, - OpCooperativeMatrixMulAddNV = 5361, - OpCooperativeMatrixLengthNV = 5362, - OpBeginInvocationInterlockEXT = 5364, - OpEndInvocationInterlockEXT = 5365, - OpDemoteToHelperInvocationEXT = 5380, - OpIsHelperInvocationEXT = 5381, - OpSubgroupShuffleINTEL = 5571, - OpSubgroupShuffleDownINTEL = 5572, - OpSubgroupShuffleUpINTEL = 5573, - OpSubgroupShuffleXorINTEL = 5574, - OpSubgroupBlockReadINTEL = 5575, - OpSubgroupBlockWriteINTEL = 5576, - OpSubgroupImageBlockReadINTEL = 5577, - OpSubgroupImageBlockWriteINTEL = 5578, - OpSubgroupImageMediaBlockReadINTEL = 5580, - OpSubgroupImageMediaBlockWriteINTEL = 5581, - OpUCountLeadingZerosINTEL = 5585, - OpUCountTrailingZerosINTEL = 5586, - OpAbsISubINTEL = 5587, - OpAbsUSubINTEL = 5588, - OpIAddSatINTEL = 5589, - OpUAddSatINTEL = 5590, - OpIAverageINTEL = 5591, - OpUAverageINTEL = 5592, - OpIAverageRoundedINTEL = 5593, - OpUAverageRoundedINTEL = 5594, - OpISubSatINTEL = 5595, - OpUSubSatINTEL = 5596, - OpIMul32x16INTEL = 5597, - OpUMul32x16INTEL = 5598, - OpConstantFunctionPointerINTEL = 5600, - OpFunctionPointerCallINTEL = 5601, - OpAsmTargetINTEL = 5609, - OpAsmINTEL = 5610, - OpAsmCallINTEL = 5611, - OpAtomicFMinEXT = 5614, - OpAtomicFMaxEXT = 5615, - OpAssumeTrueKHR = 5630, - OpExpectKHR = 5631, - OpDecorateString = 5632, - OpDecorateStringGOOGLE = 5632, - OpMemberDecorateString = 5633, - OpMemberDecorateStringGOOGLE = 5633, - OpVmeImageINTEL = 5699, - OpTypeVmeImageINTEL = 5700, - OpTypeAvcImePayloadINTEL = 5701, - OpTypeAvcRefPayloadINTEL = 5702, - OpTypeAvcSicPayloadINTEL = 5703, - OpTypeAvcMcePayloadINTEL = 5704, - OpTypeAvcMceResultINTEL = 5705, - OpTypeAvcImeResultINTEL = 5706, - OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, - OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, - OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, - OpTypeAvcImeDualReferenceStreaminINTEL = 5710, - OpTypeAvcRefResultINTEL = 5711, - OpTypeAvcSicResultINTEL = 5712, - OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, - OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, - OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, - OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, - OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, - OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, - OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, - OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, - OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, - OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, - OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, - OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, - OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, - OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, - OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, - OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, - OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, - OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, - OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, - OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, - OpSubgroupAvcMceConvertToImeResultINTEL = 5733, - OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, - OpSubgroupAvcMceConvertToRefResultINTEL = 5735, - OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, - OpSubgroupAvcMceConvertToSicResultINTEL = 5737, - OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, - OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, - OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, - OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, - OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, - OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, - OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, - OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, - OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, - OpSubgroupAvcImeInitializeINTEL = 5747, - OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, - OpSubgroupAvcImeSetDualReferenceINTEL = 5749, - OpSubgroupAvcImeRefWindowSizeINTEL = 5750, - OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, - OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, - OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, - OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, - OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, - OpSubgroupAvcImeSetWeightedSadINTEL = 5756, - OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, - OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, - OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, - OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, - OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, - OpSubgroupAvcImeConvertToMceResultINTEL = 5765, - OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, - OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, - OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, - OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, - OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, - OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, - OpSubgroupAvcImeGetBorderReachedINTEL = 5776, - OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, - OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, - OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, - OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, - OpSubgroupAvcFmeInitializeINTEL = 5781, - OpSubgroupAvcBmeInitializeINTEL = 5782, - OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, - OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, - OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, - OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, - OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, - OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, - OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, - OpSubgroupAvcRefConvertToMceResultINTEL = 5790, - OpSubgroupAvcSicInitializeINTEL = 5791, - OpSubgroupAvcSicConfigureSkcINTEL = 5792, - OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, - OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, - OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, - OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, - OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, - OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, - OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, - OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, - OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, - OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, - OpSubgroupAvcSicEvaluateIpeINTEL = 5803, - OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, - OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, - OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, - OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, - OpSubgroupAvcSicConvertToMceResultINTEL = 5808, - OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, - OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, - OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, - OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, - OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, - OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, - OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, - OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, - OpVariableLengthArrayINTEL = 5818, - OpSaveMemoryINTEL = 5819, - OpRestoreMemoryINTEL = 5820, - OpLoopControlINTEL = 5887, - OpPtrCastToCrossWorkgroupINTEL = 5934, - OpCrossWorkgroupCastToPtrINTEL = 5938, - OpReadPipeBlockingINTEL = 5946, - OpWritePipeBlockingINTEL = 5947, - OpFPGARegINTEL = 5949, - OpRayQueryGetRayTMinKHR = 6016, - OpRayQueryGetRayFlagsKHR = 6017, - OpRayQueryGetIntersectionTKHR = 6018, - OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, - OpRayQueryGetIntersectionInstanceIdKHR = 6020, - OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, - OpRayQueryGetIntersectionGeometryIndexKHR = 6022, - OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, - OpRayQueryGetIntersectionBarycentricsKHR = 6024, - OpRayQueryGetIntersectionFrontFaceKHR = 6025, - OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, - OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, - OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, - OpRayQueryGetWorldRayDirectionKHR = 6029, - OpRayQueryGetWorldRayOriginKHR = 6030, - OpRayQueryGetIntersectionObjectToWorldKHR = 6031, - OpRayQueryGetIntersectionWorldToObjectKHR = 6032, - OpAtomicFAddEXT = 6035, - OpTypeBufferSurfaceINTEL = 6086, - OpTypeStructContinuedINTEL = 6090, - OpConstantCompositeContinuedINTEL = 6091, - OpSpecConstantCompositeContinuedINTEL = 6092, - OpMax = 0x7fffffff, -}; - -#ifdef SPV_ENABLE_UTILITY_CODE -inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { - *hasResult = *hasResultType = false; - switch (opcode) { - default: /* unknown opcode */ break; - case OpNop: *hasResult = false; *hasResultType = false; break; - case OpUndef: *hasResult = true; *hasResultType = true; break; - case OpSourceContinued: *hasResult = false; *hasResultType = false; break; - case OpSource: *hasResult = false; *hasResultType = false; break; - case OpSourceExtension: *hasResult = false; *hasResultType = false; break; - case OpName: *hasResult = false; *hasResultType = false; break; - case OpMemberName: *hasResult = false; *hasResultType = false; break; - case OpString: *hasResult = true; *hasResultType = false; break; - case OpLine: *hasResult = false; *hasResultType = false; break; - case OpExtension: *hasResult = false; *hasResultType = false; break; - case OpExtInstImport: *hasResult = true; *hasResultType = false; break; - case OpExtInst: *hasResult = true; *hasResultType = true; break; - case OpMemoryModel: *hasResult = false; *hasResultType = false; break; - case OpEntryPoint: *hasResult = false; *hasResultType = false; break; - case OpExecutionMode: *hasResult = false; *hasResultType = false; break; - case OpCapability: *hasResult = false; *hasResultType = false; break; - case OpTypeVoid: *hasResult = true; *hasResultType = false; break; - case OpTypeBool: *hasResult = true; *hasResultType = false; break; - case OpTypeInt: *hasResult = true; *hasResultType = false; break; - case OpTypeFloat: *hasResult = true; *hasResultType = false; break; - case OpTypeVector: *hasResult = true; *hasResultType = false; break; - case OpTypeMatrix: *hasResult = true; *hasResultType = false; break; - case OpTypeImage: *hasResult = true; *hasResultType = false; break; - case OpTypeSampler: *hasResult = true; *hasResultType = false; break; - case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break; - case OpTypeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; - case OpTypeStruct: *hasResult = true; *hasResultType = false; break; - case OpTypeOpaque: *hasResult = true; *hasResultType = false; break; - case OpTypePointer: *hasResult = true; *hasResultType = false; break; - case OpTypeFunction: *hasResult = true; *hasResultType = false; break; - case OpTypeEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; - case OpTypeReserveId: *hasResult = true; *hasResultType = false; break; - case OpTypeQueue: *hasResult = true; *hasResultType = false; break; - case OpTypePipe: *hasResult = true; *hasResultType = false; break; - case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; - case OpConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpConstant: *hasResult = true; *hasResultType = true; break; - case OpConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpConstantSampler: *hasResult = true; *hasResultType = true; break; - case OpConstantNull: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; - case OpSpecConstant: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; - case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break; - case OpFunction: *hasResult = true; *hasResultType = true; break; - case OpFunctionParameter: *hasResult = true; *hasResultType = true; break; - case OpFunctionEnd: *hasResult = false; *hasResultType = false; break; - case OpFunctionCall: *hasResult = true; *hasResultType = true; break; - case OpVariable: *hasResult = true; *hasResultType = true; break; - case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break; - case OpLoad: *hasResult = true; *hasResultType = true; break; - case OpStore: *hasResult = false; *hasResultType = false; break; - case OpCopyMemory: *hasResult = false; *hasResultType = false; break; - case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break; - case OpAccessChain: *hasResult = true; *hasResultType = true; break; - case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; - case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpArrayLength: *hasResult = true; *hasResultType = true; break; - case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; - case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; - case OpDecorate: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpDecorationGroup: *hasResult = true; *hasResultType = false; break; - case OpGroupDecorate: *hasResult = false; *hasResultType = false; break; - case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; - case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; - case OpVectorShuffle: *hasResult = true; *hasResultType = true; break; - case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break; - case OpCompositeExtract: *hasResult = true; *hasResultType = true; break; - case OpCompositeInsert: *hasResult = true; *hasResultType = true; break; - case OpCopyObject: *hasResult = true; *hasResultType = true; break; - case OpTranspose: *hasResult = true; *hasResultType = true; break; - case OpSampledImage: *hasResult = true; *hasResultType = true; break; - case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageFetch: *hasResult = true; *hasResultType = true; break; - case OpImageGather: *hasResult = true; *hasResultType = true; break; - case OpImageDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageRead: *hasResult = true; *hasResultType = true; break; - case OpImageWrite: *hasResult = false; *hasResultType = false; break; - case OpImage: *hasResult = true; *hasResultType = true; break; - case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break; - case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySize: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLod: *hasResult = true; *hasResultType = true; break; - case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break; - case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break; - case OpConvertFToU: *hasResult = true; *hasResultType = true; break; - case OpConvertFToS: *hasResult = true; *hasResultType = true; break; - case OpConvertSToF: *hasResult = true; *hasResultType = true; break; - case OpConvertUToF: *hasResult = true; *hasResultType = true; break; - case OpUConvert: *hasResult = true; *hasResultType = true; break; - case OpSConvert: *hasResult = true; *hasResultType = true; break; - case OpFConvert: *hasResult = true; *hasResultType = true; break; - case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break; - case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break; - case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break; - case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break; - case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; - case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; - case OpBitcast: *hasResult = true; *hasResultType = true; break; - case OpSNegate: *hasResult = true; *hasResultType = true; break; - case OpFNegate: *hasResult = true; *hasResultType = true; break; - case OpIAdd: *hasResult = true; *hasResultType = true; break; - case OpFAdd: *hasResult = true; *hasResultType = true; break; - case OpISub: *hasResult = true; *hasResultType = true; break; - case OpFSub: *hasResult = true; *hasResultType = true; break; - case OpIMul: *hasResult = true; *hasResultType = true; break; - case OpFMul: *hasResult = true; *hasResultType = true; break; - case OpUDiv: *hasResult = true; *hasResultType = true; break; - case OpSDiv: *hasResult = true; *hasResultType = true; break; - case OpFDiv: *hasResult = true; *hasResultType = true; break; - case OpUMod: *hasResult = true; *hasResultType = true; break; - case OpSRem: *hasResult = true; *hasResultType = true; break; - case OpSMod: *hasResult = true; *hasResultType = true; break; - case OpFRem: *hasResult = true; *hasResultType = true; break; - case OpFMod: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; - case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; - case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; - case OpOuterProduct: *hasResult = true; *hasResultType = true; break; - case OpDot: *hasResult = true; *hasResultType = true; break; - case OpIAddCarry: *hasResult = true; *hasResultType = true; break; - case OpISubBorrow: *hasResult = true; *hasResultType = true; break; - case OpUMulExtended: *hasResult = true; *hasResultType = true; break; - case OpSMulExtended: *hasResult = true; *hasResultType = true; break; - case OpAny: *hasResult = true; *hasResultType = true; break; - case OpAll: *hasResult = true; *hasResultType = true; break; - case OpIsNan: *hasResult = true; *hasResultType = true; break; - case OpIsInf: *hasResult = true; *hasResultType = true; break; - case OpIsFinite: *hasResult = true; *hasResultType = true; break; - case OpIsNormal: *hasResult = true; *hasResultType = true; break; - case OpSignBitSet: *hasResult = true; *hasResultType = true; break; - case OpLessOrGreater: *hasResult = true; *hasResultType = true; break; - case OpOrdered: *hasResult = true; *hasResultType = true; break; - case OpUnordered: *hasResult = true; *hasResultType = true; break; - case OpLogicalEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; - case OpLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpLogicalNot: *hasResult = true; *hasResultType = true; break; - case OpSelect: *hasResult = true; *hasResultType = true; break; - case OpIEqual: *hasResult = true; *hasResultType = true; break; - case OpINotEqual: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpULessThan: *hasResult = true; *hasResultType = true; break; - case OpSLessThan: *hasResult = true; *hasResultType = true; break; - case OpULessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; - case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; - case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break; - case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; - case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; - case OpBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpNot: *hasResult = true; *hasResultType = true; break; - case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break; - case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; - case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; - case OpBitReverse: *hasResult = true; *hasResultType = true; break; - case OpBitCount: *hasResult = true; *hasResultType = true; break; - case OpDPdx: *hasResult = true; *hasResultType = true; break; - case OpDPdy: *hasResult = true; *hasResultType = true; break; - case OpFwidth: *hasResult = true; *hasResultType = true; break; - case OpDPdxFine: *hasResult = true; *hasResultType = true; break; - case OpDPdyFine: *hasResult = true; *hasResultType = true; break; - case OpFwidthFine: *hasResult = true; *hasResultType = true; break; - case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break; - case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break; - case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break; - case OpEmitVertex: *hasResult = false; *hasResultType = false; break; - case OpEndPrimitive: *hasResult = false; *hasResultType = false; break; - case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; - case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; - case OpControlBarrier: *hasResult = false; *hasResultType = false; break; - case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break; - case OpAtomicLoad: *hasResult = true; *hasResultType = true; break; - case OpAtomicStore: *hasResult = false; *hasResultType = false; break; - case OpAtomicExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; - case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; - case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; - case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break; - case OpAtomicISub: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMin: *hasResult = true; *hasResultType = true; break; - case OpAtomicSMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicUMax: *hasResult = true; *hasResultType = true; break; - case OpAtomicAnd: *hasResult = true; *hasResultType = true; break; - case OpAtomicOr: *hasResult = true; *hasResultType = true; break; - case OpAtomicXor: *hasResult = true; *hasResultType = true; break; - case OpPhi: *hasResult = true; *hasResultType = true; break; - case OpLoopMerge: *hasResult = false; *hasResultType = false; break; - case OpSelectionMerge: *hasResult = false; *hasResultType = false; break; - case OpLabel: *hasResult = true; *hasResultType = false; break; - case OpBranch: *hasResult = false; *hasResultType = false; break; - case OpBranchConditional: *hasResult = false; *hasResultType = false; break; - case OpSwitch: *hasResult = false; *hasResultType = false; break; - case OpKill: *hasResult = false; *hasResultType = false; break; - case OpReturn: *hasResult = false; *hasResultType = false; break; - case OpReturnValue: *hasResult = false; *hasResultType = false; break; - case OpUnreachable: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStart: *hasResult = false; *hasResultType = false; break; - case OpLifetimeStop: *hasResult = false; *hasResultType = false; break; - case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; - case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; - case OpGroupAll: *hasResult = true; *hasResultType = true; break; - case OpGroupAny: *hasResult = true; *hasResultType = true; break; - case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupSMax: *hasResult = true; *hasResultType = true; break; - case OpReadPipe: *hasResult = true; *hasResultType = true; break; - case OpWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break; - case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break; - case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break; - case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; - case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; - case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; - case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break; - case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; - case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; - case OpRetainEvent: *hasResult = false; *hasResultType = false; break; - case OpReleaseEvent: *hasResult = false; *hasResultType = false; break; - case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break; - case OpIsValidEvent: *hasResult = true; *hasResultType = true; break; - case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; - case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; - case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; - case OpBuildNDRange: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; - case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break; - case OpImageSparseGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; - case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; - case OpNoLine: *hasResult = false; *hasResultType = false; break; - case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; - case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; - case OpImageSparseRead: *hasResult = true; *hasResultType = true; break; - case OpSizeOf: *hasResult = true; *hasResultType = true; break; - case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break; - case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; - case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; - case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; - case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; - case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; - case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; - case OpModuleProcessed: *hasResult = false; *hasResultType = false; break; - case OpExecutionModeId: *hasResult = false; *hasResultType = false; break; - case OpDecorateId: *hasResult = false; *hasResultType = false; break; - case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; - case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; - case OpCopyLogical: *hasResult = true; *hasResultType = true; break; - case OpPtrEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; - case OpPtrDiff: *hasResult = true; *hasResultType = true; break; - case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; - case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; - case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; - case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; - case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; - case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; - case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; - case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; - case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; - 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; - case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; - case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; - case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; - case OpTraceNV: *hasResult = false; *hasResultType = false; break; - case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; - case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; - case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; - case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; - case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; - 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; - case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; - case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; - case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break; - case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; - case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; - case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; - case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; - case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; - case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; - case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; - case OpExpectKHR: *hasResult = true; *hasResultType = true; break; - case OpDecorateString: *hasResult = false; *hasResultType = false; break; - case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; - case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; - case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; - case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; - case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; - case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; - case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; - case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; - case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; - case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; - case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; - case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; - case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; - case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; - case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; - } -} -#endif /* SPV_ENABLE_UTILITY_CODE */ - -// Overload operator| for mask bit combining - -inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } -inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } -inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } -inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } -inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } -inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } -inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } -inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } -inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } -inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } - -} // end namespace spv - -#endif // #ifndef spirv_HPP - +// Copyright (c) 2014-2020 The Khronos Group Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and/or associated documentation files (the "Materials"), +// to deal in the Materials without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Materials, and to permit persons to whom the +// Materials are furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Materials. +// +// MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +// STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +// HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +// +// THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +// IN THE MATERIALS. + +// This header is automatically generated by the same tool that creates +// the Binary Section of the SPIR-V specification. + +// Enumeration tokens for SPIR-V, in various styles: +// C, C++, C++11, JSON, Lua, Python, C#, D +// +// - C will have tokens with a "Spv" prefix, e.g.: SpvSourceLanguageGLSL +// - C++ will have tokens in the "spv" name space, e.g.: spv::SourceLanguageGLSL +// - C++11 will use enum classes in the spv namespace, e.g.: spv::SourceLanguage::GLSL +// - Lua will use tables, e.g.: spv.SourceLanguage.GLSL +// - Python will use dictionaries, e.g.: spv['SourceLanguage']['GLSL'] +// - C# will use enum classes in the Specification class located in the "Spv" namespace, +// e.g.: Spv.Specification.SourceLanguage.GLSL +// - D will have tokens under the "spv" module, e.g: spv.SourceLanguage.GLSL +// +// Some tokens act like mask values, which can be OR'd together, +// while others are mutually exclusive. The mask-like ones have +// "Mask" in their name, and a parallel enum that has the shift +// amount (1 << x) for each corresponding enumerant. + +#ifndef spirv_HPP +#define spirv_HPP + +namespace spv { + +typedef unsigned int Id; + +#define SPV_VERSION 0x10600 +#define SPV_REVISION 1 + +static const unsigned int MagicNumber = 0x07230203; +static const unsigned int Version = 0x00010600; +static const unsigned int Revision = 1; +static const unsigned int OpCodeMask = 0xffff; +static const unsigned int WordCountShift = 16; + +enum SourceLanguage { + SourceLanguageUnknown = 0, + SourceLanguageESSL = 1, + SourceLanguageGLSL = 2, + SourceLanguageOpenCL_C = 3, + SourceLanguageOpenCL_CPP = 4, + SourceLanguageHLSL = 5, + SourceLanguageCPP_for_OpenCL = 6, + SourceLanguageMax = 0x7fffffff, +}; + +enum ExecutionModel { + ExecutionModelVertex = 0, + ExecutionModelTessellationControl = 1, + ExecutionModelTessellationEvaluation = 2, + ExecutionModelGeometry = 3, + ExecutionModelFragment = 4, + ExecutionModelGLCompute = 5, + ExecutionModelKernel = 6, + ExecutionModelTaskNV = 5267, + ExecutionModelMeshNV = 5268, + ExecutionModelRayGenerationKHR = 5313, + ExecutionModelRayGenerationNV = 5313, + ExecutionModelIntersectionKHR = 5314, + ExecutionModelIntersectionNV = 5314, + ExecutionModelAnyHitKHR = 5315, + ExecutionModelAnyHitNV = 5315, + ExecutionModelClosestHitKHR = 5316, + ExecutionModelClosestHitNV = 5316, + ExecutionModelMissKHR = 5317, + ExecutionModelMissNV = 5317, + ExecutionModelCallableKHR = 5318, + ExecutionModelCallableNV = 5318, + ExecutionModelMax = 0x7fffffff, +}; + +enum AddressingModel { + AddressingModelLogical = 0, + AddressingModelPhysical32 = 1, + AddressingModelPhysical64 = 2, + AddressingModelPhysicalStorageBuffer64 = 5348, + AddressingModelPhysicalStorageBuffer64EXT = 5348, + AddressingModelMax = 0x7fffffff, +}; + +enum MemoryModel { + MemoryModelSimple = 0, + MemoryModelGLSL450 = 1, + MemoryModelOpenCL = 2, + MemoryModelVulkan = 3, + MemoryModelVulkanKHR = 3, + MemoryModelMax = 0x7fffffff, +}; + +enum ExecutionMode { + ExecutionModeInvocations = 0, + ExecutionModeSpacingEqual = 1, + ExecutionModeSpacingFractionalEven = 2, + ExecutionModeSpacingFractionalOdd = 3, + ExecutionModeVertexOrderCw = 4, + ExecutionModeVertexOrderCcw = 5, + ExecutionModePixelCenterInteger = 6, + ExecutionModeOriginUpperLeft = 7, + ExecutionModeOriginLowerLeft = 8, + ExecutionModeEarlyFragmentTests = 9, + ExecutionModePointMode = 10, + ExecutionModeXfb = 11, + ExecutionModeDepthReplacing = 12, + ExecutionModeDepthGreater = 14, + ExecutionModeDepthLess = 15, + ExecutionModeDepthUnchanged = 16, + ExecutionModeLocalSize = 17, + ExecutionModeLocalSizeHint = 18, + ExecutionModeInputPoints = 19, + ExecutionModeInputLines = 20, + ExecutionModeInputLinesAdjacency = 21, + ExecutionModeTriangles = 22, + ExecutionModeInputTrianglesAdjacency = 23, + ExecutionModeQuads = 24, + ExecutionModeIsolines = 25, + ExecutionModeOutputVertices = 26, + ExecutionModeOutputPoints = 27, + ExecutionModeOutputLineStrip = 28, + ExecutionModeOutputTriangleStrip = 29, + ExecutionModeVecTypeHint = 30, + ExecutionModeContractionOff = 31, + ExecutionModeInitializer = 33, + ExecutionModeFinalizer = 34, + ExecutionModeSubgroupSize = 35, + ExecutionModeSubgroupsPerWorkgroup = 36, + ExecutionModeSubgroupsPerWorkgroupId = 37, + ExecutionModeLocalSizeId = 38, + ExecutionModeLocalSizeHintId = 39, + ExecutionModeSubgroupUniformControlFlowKHR = 4421, + ExecutionModePostDepthCoverage = 4446, + ExecutionModeDenormPreserve = 4459, + ExecutionModeDenormFlushToZero = 4460, + ExecutionModeSignedZeroInfNanPreserve = 4461, + ExecutionModeRoundingModeRTE = 4462, + ExecutionModeRoundingModeRTZ = 4463, + ExecutionModeStencilRefReplacingEXT = 5027, + ExecutionModeOutputLinesNV = 5269, + ExecutionModeOutputPrimitivesNV = 5270, + ExecutionModeDerivativeGroupQuadsNV = 5289, + ExecutionModeDerivativeGroupLinearNV = 5290, + ExecutionModeOutputTrianglesNV = 5298, + ExecutionModePixelInterlockOrderedEXT = 5366, + ExecutionModePixelInterlockUnorderedEXT = 5367, + ExecutionModeSampleInterlockOrderedEXT = 5368, + ExecutionModeSampleInterlockUnorderedEXT = 5369, + ExecutionModeShadingRateInterlockOrderedEXT = 5370, + ExecutionModeShadingRateInterlockUnorderedEXT = 5371, + ExecutionModeSharedLocalMemorySizeINTEL = 5618, + ExecutionModeRoundingModeRTPINTEL = 5620, + ExecutionModeRoundingModeRTNINTEL = 5621, + ExecutionModeFloatingPointModeALTINTEL = 5622, + ExecutionModeFloatingPointModeIEEEINTEL = 5623, + ExecutionModeMaxWorkgroupSizeINTEL = 5893, + ExecutionModeMaxWorkDimINTEL = 5894, + ExecutionModeNoGlobalOffsetINTEL = 5895, + ExecutionModeNumSIMDWorkitemsINTEL = 5896, + ExecutionModeSchedulerTargetFmaxMhzINTEL = 5903, + ExecutionModeMax = 0x7fffffff, +}; + +enum StorageClass { + StorageClassUniformConstant = 0, + StorageClassInput = 1, + StorageClassUniform = 2, + StorageClassOutput = 3, + StorageClassWorkgroup = 4, + StorageClassCrossWorkgroup = 5, + StorageClassPrivate = 6, + StorageClassFunction = 7, + StorageClassGeneric = 8, + StorageClassPushConstant = 9, + StorageClassAtomicCounter = 10, + StorageClassImage = 11, + StorageClassStorageBuffer = 12, + StorageClassCallableDataKHR = 5328, + StorageClassCallableDataNV = 5328, + StorageClassIncomingCallableDataKHR = 5329, + StorageClassIncomingCallableDataNV = 5329, + StorageClassRayPayloadKHR = 5338, + StorageClassRayPayloadNV = 5338, + StorageClassHitAttributeKHR = 5339, + StorageClassHitAttributeNV = 5339, + StorageClassIncomingRayPayloadKHR = 5342, + StorageClassIncomingRayPayloadNV = 5342, + StorageClassShaderRecordBufferKHR = 5343, + StorageClassShaderRecordBufferNV = 5343, + StorageClassPhysicalStorageBuffer = 5349, + StorageClassPhysicalStorageBufferEXT = 5349, + StorageClassCodeSectionINTEL = 5605, + StorageClassDeviceOnlyINTEL = 5936, + StorageClassHostOnlyINTEL = 5937, + StorageClassMax = 0x7fffffff, +}; + +enum Dim { + Dim1D = 0, + Dim2D = 1, + Dim3D = 2, + DimCube = 3, + DimRect = 4, + DimBuffer = 5, + DimSubpassData = 6, + DimMax = 0x7fffffff, +}; + +enum SamplerAddressingMode { + SamplerAddressingModeNone = 0, + SamplerAddressingModeClampToEdge = 1, + SamplerAddressingModeClamp = 2, + SamplerAddressingModeRepeat = 3, + SamplerAddressingModeRepeatMirrored = 4, + SamplerAddressingModeMax = 0x7fffffff, +}; + +enum SamplerFilterMode { + SamplerFilterModeNearest = 0, + SamplerFilterModeLinear = 1, + SamplerFilterModeMax = 0x7fffffff, +}; + +enum ImageFormat { + ImageFormatUnknown = 0, + ImageFormatRgba32f = 1, + ImageFormatRgba16f = 2, + ImageFormatR32f = 3, + ImageFormatRgba8 = 4, + ImageFormatRgba8Snorm = 5, + ImageFormatRg32f = 6, + ImageFormatRg16f = 7, + ImageFormatR11fG11fB10f = 8, + ImageFormatR16f = 9, + ImageFormatRgba16 = 10, + ImageFormatRgb10A2 = 11, + ImageFormatRg16 = 12, + ImageFormatRg8 = 13, + ImageFormatR16 = 14, + ImageFormatR8 = 15, + ImageFormatRgba16Snorm = 16, + ImageFormatRg16Snorm = 17, + ImageFormatRg8Snorm = 18, + ImageFormatR16Snorm = 19, + ImageFormatR8Snorm = 20, + ImageFormatRgba32i = 21, + ImageFormatRgba16i = 22, + ImageFormatRgba8i = 23, + ImageFormatR32i = 24, + ImageFormatRg32i = 25, + ImageFormatRg16i = 26, + ImageFormatRg8i = 27, + ImageFormatR16i = 28, + ImageFormatR8i = 29, + ImageFormatRgba32ui = 30, + ImageFormatRgba16ui = 31, + ImageFormatRgba8ui = 32, + ImageFormatR32ui = 33, + ImageFormatRgb10a2ui = 34, + ImageFormatRg32ui = 35, + ImageFormatRg16ui = 36, + ImageFormatRg8ui = 37, + ImageFormatR16ui = 38, + ImageFormatR8ui = 39, + ImageFormatR64ui = 40, + ImageFormatR64i = 41, + ImageFormatMax = 0x7fffffff, +}; + +enum ImageChannelOrder { + ImageChannelOrderR = 0, + ImageChannelOrderA = 1, + ImageChannelOrderRG = 2, + ImageChannelOrderRA = 3, + ImageChannelOrderRGB = 4, + ImageChannelOrderRGBA = 5, + ImageChannelOrderBGRA = 6, + ImageChannelOrderARGB = 7, + ImageChannelOrderIntensity = 8, + ImageChannelOrderLuminance = 9, + ImageChannelOrderRx = 10, + ImageChannelOrderRGx = 11, + ImageChannelOrderRGBx = 12, + ImageChannelOrderDepth = 13, + ImageChannelOrderDepthStencil = 14, + ImageChannelOrdersRGB = 15, + ImageChannelOrdersRGBx = 16, + ImageChannelOrdersRGBA = 17, + ImageChannelOrdersBGRA = 18, + ImageChannelOrderABGR = 19, + ImageChannelOrderMax = 0x7fffffff, +}; + +enum ImageChannelDataType { + ImageChannelDataTypeSnormInt8 = 0, + ImageChannelDataTypeSnormInt16 = 1, + ImageChannelDataTypeUnormInt8 = 2, + ImageChannelDataTypeUnormInt16 = 3, + ImageChannelDataTypeUnormShort565 = 4, + ImageChannelDataTypeUnormShort555 = 5, + ImageChannelDataTypeUnormInt101010 = 6, + ImageChannelDataTypeSignedInt8 = 7, + ImageChannelDataTypeSignedInt16 = 8, + ImageChannelDataTypeSignedInt32 = 9, + ImageChannelDataTypeUnsignedInt8 = 10, + ImageChannelDataTypeUnsignedInt16 = 11, + ImageChannelDataTypeUnsignedInt32 = 12, + ImageChannelDataTypeHalfFloat = 13, + ImageChannelDataTypeFloat = 14, + ImageChannelDataTypeUnormInt24 = 15, + ImageChannelDataTypeUnormInt101010_2 = 16, + ImageChannelDataTypeMax = 0x7fffffff, +}; + +enum ImageOperandsShift { + ImageOperandsBiasShift = 0, + ImageOperandsLodShift = 1, + ImageOperandsGradShift = 2, + ImageOperandsConstOffsetShift = 3, + ImageOperandsOffsetShift = 4, + ImageOperandsConstOffsetsShift = 5, + ImageOperandsSampleShift = 6, + ImageOperandsMinLodShift = 7, + ImageOperandsMakeTexelAvailableShift = 8, + ImageOperandsMakeTexelAvailableKHRShift = 8, + ImageOperandsMakeTexelVisibleShift = 9, + ImageOperandsMakeTexelVisibleKHRShift = 9, + ImageOperandsNonPrivateTexelShift = 10, + ImageOperandsNonPrivateTexelKHRShift = 10, + ImageOperandsVolatileTexelShift = 11, + ImageOperandsVolatileTexelKHRShift = 11, + ImageOperandsSignExtendShift = 12, + ImageOperandsZeroExtendShift = 13, + ImageOperandsNontemporalShift = 14, + ImageOperandsOffsetsShift = 16, + ImageOperandsMax = 0x7fffffff, +}; + +enum ImageOperandsMask { + ImageOperandsMaskNone = 0, + ImageOperandsBiasMask = 0x00000001, + ImageOperandsLodMask = 0x00000002, + ImageOperandsGradMask = 0x00000004, + ImageOperandsConstOffsetMask = 0x00000008, + ImageOperandsOffsetMask = 0x00000010, + ImageOperandsConstOffsetsMask = 0x00000020, + ImageOperandsSampleMask = 0x00000040, + ImageOperandsMinLodMask = 0x00000080, + ImageOperandsMakeTexelAvailableMask = 0x00000100, + ImageOperandsMakeTexelAvailableKHRMask = 0x00000100, + ImageOperandsMakeTexelVisibleMask = 0x00000200, + ImageOperandsMakeTexelVisibleKHRMask = 0x00000200, + ImageOperandsNonPrivateTexelMask = 0x00000400, + ImageOperandsNonPrivateTexelKHRMask = 0x00000400, + ImageOperandsVolatileTexelMask = 0x00000800, + ImageOperandsVolatileTexelKHRMask = 0x00000800, + ImageOperandsSignExtendMask = 0x00001000, + ImageOperandsZeroExtendMask = 0x00002000, + ImageOperandsNontemporalMask = 0x00004000, + ImageOperandsOffsetsMask = 0x00010000, +}; + +enum FPFastMathModeShift { + FPFastMathModeNotNaNShift = 0, + FPFastMathModeNotInfShift = 1, + FPFastMathModeNSZShift = 2, + FPFastMathModeAllowRecipShift = 3, + FPFastMathModeFastShift = 4, + FPFastMathModeAllowContractFastINTELShift = 16, + FPFastMathModeAllowReassocINTELShift = 17, + FPFastMathModeMax = 0x7fffffff, +}; + +enum FPFastMathModeMask { + FPFastMathModeMaskNone = 0, + FPFastMathModeNotNaNMask = 0x00000001, + FPFastMathModeNotInfMask = 0x00000002, + FPFastMathModeNSZMask = 0x00000004, + FPFastMathModeAllowRecipMask = 0x00000008, + FPFastMathModeFastMask = 0x00000010, + FPFastMathModeAllowContractFastINTELMask = 0x00010000, + FPFastMathModeAllowReassocINTELMask = 0x00020000, +}; + +enum FPRoundingMode { + FPRoundingModeRTE = 0, + FPRoundingModeRTZ = 1, + FPRoundingModeRTP = 2, + FPRoundingModeRTN = 3, + FPRoundingModeMax = 0x7fffffff, +}; + +enum LinkageType { + LinkageTypeExport = 0, + LinkageTypeImport = 1, + LinkageTypeLinkOnceODR = 2, + LinkageTypeMax = 0x7fffffff, +}; + +enum AccessQualifier { + AccessQualifierReadOnly = 0, + AccessQualifierWriteOnly = 1, + AccessQualifierReadWrite = 2, + AccessQualifierMax = 0x7fffffff, +}; + +enum FunctionParameterAttribute { + FunctionParameterAttributeZext = 0, + FunctionParameterAttributeSext = 1, + FunctionParameterAttributeByVal = 2, + FunctionParameterAttributeSret = 3, + FunctionParameterAttributeNoAlias = 4, + FunctionParameterAttributeNoCapture = 5, + FunctionParameterAttributeNoWrite = 6, + FunctionParameterAttributeNoReadWrite = 7, + FunctionParameterAttributeMax = 0x7fffffff, +}; + +enum Decoration { + DecorationRelaxedPrecision = 0, + DecorationSpecId = 1, + DecorationBlock = 2, + DecorationBufferBlock = 3, + DecorationRowMajor = 4, + DecorationColMajor = 5, + DecorationArrayStride = 6, + DecorationMatrixStride = 7, + DecorationGLSLShared = 8, + DecorationGLSLPacked = 9, + DecorationCPacked = 10, + DecorationBuiltIn = 11, + DecorationNoPerspective = 13, + DecorationFlat = 14, + DecorationPatch = 15, + DecorationCentroid = 16, + DecorationSample = 17, + DecorationInvariant = 18, + DecorationRestrict = 19, + DecorationAliased = 20, + DecorationVolatile = 21, + DecorationConstant = 22, + DecorationCoherent = 23, + DecorationNonWritable = 24, + DecorationNonReadable = 25, + DecorationUniform = 26, + DecorationUniformId = 27, + DecorationSaturatedConversion = 28, + DecorationStream = 29, + DecorationLocation = 30, + DecorationComponent = 31, + DecorationIndex = 32, + DecorationBinding = 33, + DecorationDescriptorSet = 34, + DecorationOffset = 35, + DecorationXfbBuffer = 36, + DecorationXfbStride = 37, + DecorationFuncParamAttr = 38, + DecorationFPRoundingMode = 39, + DecorationFPFastMathMode = 40, + DecorationLinkageAttributes = 41, + DecorationNoContraction = 42, + DecorationInputAttachmentIndex = 43, + DecorationAlignment = 44, + DecorationMaxByteOffset = 45, + DecorationAlignmentId = 46, + DecorationMaxByteOffsetId = 47, + DecorationNoSignedWrap = 4469, + DecorationNoUnsignedWrap = 4470, + DecorationExplicitInterpAMD = 4999, + DecorationOverrideCoverageNV = 5248, + DecorationPassthroughNV = 5250, + DecorationViewportRelativeNV = 5252, + DecorationSecondaryViewportRelativeNV = 5256, + DecorationPerPrimitiveNV = 5271, + DecorationPerViewNV = 5272, + DecorationPerTaskNV = 5273, + DecorationPerVertexKHR = 5285, + DecorationPerVertexNV = 5285, + DecorationNonUniform = 5300, + DecorationNonUniformEXT = 5300, + DecorationRestrictPointer = 5355, + DecorationRestrictPointerEXT = 5355, + DecorationAliasedPointer = 5356, + DecorationAliasedPointerEXT = 5356, + DecorationBindlessSamplerNV = 5398, + DecorationBindlessImageNV = 5399, + DecorationBoundSamplerNV = 5400, + DecorationBoundImageNV = 5401, + DecorationSIMTCallINTEL = 5599, + DecorationReferencedIndirectlyINTEL = 5602, + DecorationClobberINTEL = 5607, + DecorationSideEffectsINTEL = 5608, + DecorationVectorComputeVariableINTEL = 5624, + DecorationFuncParamIOKindINTEL = 5625, + DecorationVectorComputeFunctionINTEL = 5626, + DecorationStackCallINTEL = 5627, + DecorationGlobalVariableOffsetINTEL = 5628, + DecorationCounterBuffer = 5634, + DecorationHlslCounterBufferGOOGLE = 5634, + DecorationHlslSemanticGOOGLE = 5635, + DecorationUserSemantic = 5635, + DecorationUserTypeGOOGLE = 5636, + DecorationFunctionRoundingModeINTEL = 5822, + DecorationFunctionDenormModeINTEL = 5823, + DecorationRegisterINTEL = 5825, + DecorationMemoryINTEL = 5826, + DecorationNumbanksINTEL = 5827, + DecorationBankwidthINTEL = 5828, + DecorationMaxPrivateCopiesINTEL = 5829, + DecorationSinglepumpINTEL = 5830, + DecorationDoublepumpINTEL = 5831, + DecorationMaxReplicatesINTEL = 5832, + DecorationSimpleDualPortINTEL = 5833, + DecorationMergeINTEL = 5834, + DecorationBankBitsINTEL = 5835, + DecorationForcePow2DepthINTEL = 5836, + DecorationBurstCoalesceINTEL = 5899, + DecorationCacheSizeINTEL = 5900, + DecorationDontStaticallyCoalesceINTEL = 5901, + DecorationPrefetchINTEL = 5902, + DecorationStallEnableINTEL = 5905, + DecorationFuseLoopsInFunctionINTEL = 5907, + DecorationBufferLocationINTEL = 5921, + DecorationIOPipeStorageINTEL = 5944, + DecorationFunctionFloatingPointModeINTEL = 6080, + DecorationSingleElementVectorINTEL = 6085, + DecorationVectorComputeCallableFunctionINTEL = 6087, + DecorationMediaBlockIOINTEL = 6140, + DecorationMax = 0x7fffffff, +}; + +enum BuiltIn { + BuiltInPosition = 0, + BuiltInPointSize = 1, + BuiltInClipDistance = 3, + BuiltInCullDistance = 4, + BuiltInVertexId = 5, + BuiltInInstanceId = 6, + BuiltInPrimitiveId = 7, + BuiltInInvocationId = 8, + BuiltInLayer = 9, + BuiltInViewportIndex = 10, + BuiltInTessLevelOuter = 11, + BuiltInTessLevelInner = 12, + BuiltInTessCoord = 13, + BuiltInPatchVertices = 14, + BuiltInFragCoord = 15, + BuiltInPointCoord = 16, + BuiltInFrontFacing = 17, + BuiltInSampleId = 18, + BuiltInSamplePosition = 19, + BuiltInSampleMask = 20, + BuiltInFragDepth = 22, + BuiltInHelperInvocation = 23, + BuiltInNumWorkgroups = 24, + BuiltInWorkgroupSize = 25, + BuiltInWorkgroupId = 26, + BuiltInLocalInvocationId = 27, + BuiltInGlobalInvocationId = 28, + BuiltInLocalInvocationIndex = 29, + BuiltInWorkDim = 30, + BuiltInGlobalSize = 31, + BuiltInEnqueuedWorkgroupSize = 32, + BuiltInGlobalOffset = 33, + BuiltInGlobalLinearId = 34, + BuiltInSubgroupSize = 36, + BuiltInSubgroupMaxSize = 37, + BuiltInNumSubgroups = 38, + BuiltInNumEnqueuedSubgroups = 39, + BuiltInSubgroupId = 40, + BuiltInSubgroupLocalInvocationId = 41, + BuiltInVertexIndex = 42, + BuiltInInstanceIndex = 43, + BuiltInSubgroupEqMask = 4416, + BuiltInSubgroupEqMaskKHR = 4416, + BuiltInSubgroupGeMask = 4417, + BuiltInSubgroupGeMaskKHR = 4417, + BuiltInSubgroupGtMask = 4418, + BuiltInSubgroupGtMaskKHR = 4418, + BuiltInSubgroupLeMask = 4419, + BuiltInSubgroupLeMaskKHR = 4419, + BuiltInSubgroupLtMask = 4420, + BuiltInSubgroupLtMaskKHR = 4420, + BuiltInBaseVertex = 4424, + BuiltInBaseInstance = 4425, + BuiltInDrawIndex = 4426, + BuiltInPrimitiveShadingRateKHR = 4432, + BuiltInDeviceIndex = 4438, + BuiltInViewIndex = 4440, + BuiltInShadingRateKHR = 4444, + BuiltInBaryCoordNoPerspAMD = 4992, + BuiltInBaryCoordNoPerspCentroidAMD = 4993, + BuiltInBaryCoordNoPerspSampleAMD = 4994, + BuiltInBaryCoordSmoothAMD = 4995, + BuiltInBaryCoordSmoothCentroidAMD = 4996, + BuiltInBaryCoordSmoothSampleAMD = 4997, + BuiltInBaryCoordPullModelAMD = 4998, + BuiltInFragStencilRefEXT = 5014, + BuiltInViewportMaskNV = 5253, + BuiltInSecondaryPositionNV = 5257, + BuiltInSecondaryViewportMaskNV = 5258, + BuiltInPositionPerViewNV = 5261, + BuiltInViewportMaskPerViewNV = 5262, + BuiltInFullyCoveredEXT = 5264, + BuiltInTaskCountNV = 5274, + BuiltInPrimitiveCountNV = 5275, + BuiltInPrimitiveIndicesNV = 5276, + BuiltInClipDistancePerViewNV = 5277, + BuiltInCullDistancePerViewNV = 5278, + BuiltInLayerPerViewNV = 5279, + BuiltInMeshViewCountNV = 5280, + BuiltInMeshViewIndicesNV = 5281, + BuiltInBaryCoordKHR = 5286, + BuiltInBaryCoordNV = 5286, + BuiltInBaryCoordNoPerspKHR = 5287, + BuiltInBaryCoordNoPerspNV = 5287, + BuiltInFragSizeEXT = 5292, + BuiltInFragmentSizeNV = 5292, + BuiltInFragInvocationCountEXT = 5293, + BuiltInInvocationsPerPixelNV = 5293, + BuiltInLaunchIdKHR = 5319, + BuiltInLaunchIdNV = 5319, + BuiltInLaunchSizeKHR = 5320, + BuiltInLaunchSizeNV = 5320, + BuiltInWorldRayOriginKHR = 5321, + BuiltInWorldRayOriginNV = 5321, + BuiltInWorldRayDirectionKHR = 5322, + BuiltInWorldRayDirectionNV = 5322, + BuiltInObjectRayOriginKHR = 5323, + BuiltInObjectRayOriginNV = 5323, + BuiltInObjectRayDirectionKHR = 5324, + BuiltInObjectRayDirectionNV = 5324, + BuiltInRayTminKHR = 5325, + BuiltInRayTminNV = 5325, + BuiltInRayTmaxKHR = 5326, + BuiltInRayTmaxNV = 5326, + BuiltInInstanceCustomIndexKHR = 5327, + BuiltInInstanceCustomIndexNV = 5327, + BuiltInObjectToWorldKHR = 5330, + BuiltInObjectToWorldNV = 5330, + BuiltInWorldToObjectKHR = 5331, + BuiltInWorldToObjectNV = 5331, + BuiltInHitTNV = 5332, + BuiltInHitKindKHR = 5333, + BuiltInHitKindNV = 5333, + BuiltInCurrentRayTimeNV = 5334, + BuiltInIncomingRayFlagsKHR = 5351, + BuiltInIncomingRayFlagsNV = 5351, + BuiltInRayGeometryIndexKHR = 5352, + BuiltInWarpsPerSMNV = 5374, + BuiltInSMCountNV = 5375, + BuiltInWarpIDNV = 5376, + BuiltInSMIDNV = 5377, + BuiltInMax = 0x7fffffff, +}; + +enum SelectionControlShift { + SelectionControlFlattenShift = 0, + SelectionControlDontFlattenShift = 1, + SelectionControlMax = 0x7fffffff, +}; + +enum SelectionControlMask { + SelectionControlMaskNone = 0, + SelectionControlFlattenMask = 0x00000001, + SelectionControlDontFlattenMask = 0x00000002, +}; + +enum LoopControlShift { + LoopControlUnrollShift = 0, + LoopControlDontUnrollShift = 1, + LoopControlDependencyInfiniteShift = 2, + LoopControlDependencyLengthShift = 3, + LoopControlMinIterationsShift = 4, + LoopControlMaxIterationsShift = 5, + LoopControlIterationMultipleShift = 6, + LoopControlPeelCountShift = 7, + LoopControlPartialCountShift = 8, + LoopControlInitiationIntervalINTELShift = 16, + LoopControlMaxConcurrencyINTELShift = 17, + LoopControlDependencyArrayINTELShift = 18, + LoopControlPipelineEnableINTELShift = 19, + LoopControlLoopCoalesceINTELShift = 20, + LoopControlMaxInterleavingINTELShift = 21, + LoopControlSpeculatedIterationsINTELShift = 22, + LoopControlNoFusionINTELShift = 23, + LoopControlMax = 0x7fffffff, +}; + +enum LoopControlMask { + LoopControlMaskNone = 0, + LoopControlUnrollMask = 0x00000001, + LoopControlDontUnrollMask = 0x00000002, + LoopControlDependencyInfiniteMask = 0x00000004, + LoopControlDependencyLengthMask = 0x00000008, + LoopControlMinIterationsMask = 0x00000010, + LoopControlMaxIterationsMask = 0x00000020, + LoopControlIterationMultipleMask = 0x00000040, + LoopControlPeelCountMask = 0x00000080, + LoopControlPartialCountMask = 0x00000100, + LoopControlInitiationIntervalINTELMask = 0x00010000, + LoopControlMaxConcurrencyINTELMask = 0x00020000, + LoopControlDependencyArrayINTELMask = 0x00040000, + LoopControlPipelineEnableINTELMask = 0x00080000, + LoopControlLoopCoalesceINTELMask = 0x00100000, + LoopControlMaxInterleavingINTELMask = 0x00200000, + LoopControlSpeculatedIterationsINTELMask = 0x00400000, + LoopControlNoFusionINTELMask = 0x00800000, +}; + +enum FunctionControlShift { + FunctionControlInlineShift = 0, + FunctionControlDontInlineShift = 1, + FunctionControlPureShift = 2, + FunctionControlConstShift = 3, + FunctionControlOptNoneINTELShift = 16, + FunctionControlMax = 0x7fffffff, +}; + +enum FunctionControlMask { + FunctionControlMaskNone = 0, + FunctionControlInlineMask = 0x00000001, + FunctionControlDontInlineMask = 0x00000002, + FunctionControlPureMask = 0x00000004, + FunctionControlConstMask = 0x00000008, + FunctionControlOptNoneINTELMask = 0x00010000, +}; + +enum MemorySemanticsShift { + MemorySemanticsAcquireShift = 1, + MemorySemanticsReleaseShift = 2, + MemorySemanticsAcquireReleaseShift = 3, + MemorySemanticsSequentiallyConsistentShift = 4, + MemorySemanticsUniformMemoryShift = 6, + MemorySemanticsSubgroupMemoryShift = 7, + MemorySemanticsWorkgroupMemoryShift = 8, + MemorySemanticsCrossWorkgroupMemoryShift = 9, + MemorySemanticsAtomicCounterMemoryShift = 10, + MemorySemanticsImageMemoryShift = 11, + MemorySemanticsOutputMemoryShift = 12, + MemorySemanticsOutputMemoryKHRShift = 12, + MemorySemanticsMakeAvailableShift = 13, + MemorySemanticsMakeAvailableKHRShift = 13, + MemorySemanticsMakeVisibleShift = 14, + MemorySemanticsMakeVisibleKHRShift = 14, + MemorySemanticsVolatileShift = 15, + MemorySemanticsMax = 0x7fffffff, +}; + +enum MemorySemanticsMask { + MemorySemanticsMaskNone = 0, + MemorySemanticsAcquireMask = 0x00000002, + MemorySemanticsReleaseMask = 0x00000004, + MemorySemanticsAcquireReleaseMask = 0x00000008, + MemorySemanticsSequentiallyConsistentMask = 0x00000010, + MemorySemanticsUniformMemoryMask = 0x00000040, + MemorySemanticsSubgroupMemoryMask = 0x00000080, + MemorySemanticsWorkgroupMemoryMask = 0x00000100, + MemorySemanticsCrossWorkgroupMemoryMask = 0x00000200, + MemorySemanticsAtomicCounterMemoryMask = 0x00000400, + MemorySemanticsImageMemoryMask = 0x00000800, + MemorySemanticsOutputMemoryMask = 0x00001000, + MemorySemanticsOutputMemoryKHRMask = 0x00001000, + MemorySemanticsMakeAvailableMask = 0x00002000, + MemorySemanticsMakeAvailableKHRMask = 0x00002000, + MemorySemanticsMakeVisibleMask = 0x00004000, + MemorySemanticsMakeVisibleKHRMask = 0x00004000, + MemorySemanticsVolatileMask = 0x00008000, +}; + +enum MemoryAccessShift { + MemoryAccessVolatileShift = 0, + MemoryAccessAlignedShift = 1, + MemoryAccessNontemporalShift = 2, + MemoryAccessMakePointerAvailableShift = 3, + MemoryAccessMakePointerAvailableKHRShift = 3, + MemoryAccessMakePointerVisibleShift = 4, + MemoryAccessMakePointerVisibleKHRShift = 4, + MemoryAccessNonPrivatePointerShift = 5, + MemoryAccessNonPrivatePointerKHRShift = 5, + MemoryAccessMax = 0x7fffffff, +}; + +enum MemoryAccessMask { + MemoryAccessMaskNone = 0, + MemoryAccessVolatileMask = 0x00000001, + MemoryAccessAlignedMask = 0x00000002, + MemoryAccessNontemporalMask = 0x00000004, + MemoryAccessMakePointerAvailableMask = 0x00000008, + MemoryAccessMakePointerAvailableKHRMask = 0x00000008, + MemoryAccessMakePointerVisibleMask = 0x00000010, + MemoryAccessMakePointerVisibleKHRMask = 0x00000010, + MemoryAccessNonPrivatePointerMask = 0x00000020, + MemoryAccessNonPrivatePointerKHRMask = 0x00000020, +}; + +enum Scope { + ScopeCrossDevice = 0, + ScopeDevice = 1, + ScopeWorkgroup = 2, + ScopeSubgroup = 3, + ScopeInvocation = 4, + ScopeQueueFamily = 5, + ScopeQueueFamilyKHR = 5, + ScopeShaderCallKHR = 6, + ScopeMax = 0x7fffffff, +}; + +enum GroupOperation { + GroupOperationReduce = 0, + GroupOperationInclusiveScan = 1, + GroupOperationExclusiveScan = 2, + GroupOperationClusteredReduce = 3, + GroupOperationPartitionedReduceNV = 6, + GroupOperationPartitionedInclusiveScanNV = 7, + GroupOperationPartitionedExclusiveScanNV = 8, + GroupOperationMax = 0x7fffffff, +}; + +enum KernelEnqueueFlags { + KernelEnqueueFlagsNoWait = 0, + KernelEnqueueFlagsWaitKernel = 1, + KernelEnqueueFlagsWaitWorkGroup = 2, + KernelEnqueueFlagsMax = 0x7fffffff, +}; + +enum KernelProfilingInfoShift { + KernelProfilingInfoCmdExecTimeShift = 0, + KernelProfilingInfoMax = 0x7fffffff, +}; + +enum KernelProfilingInfoMask { + KernelProfilingInfoMaskNone = 0, + KernelProfilingInfoCmdExecTimeMask = 0x00000001, +}; + +enum Capability { + CapabilityMatrix = 0, + CapabilityShader = 1, + CapabilityGeometry = 2, + CapabilityTessellation = 3, + CapabilityAddresses = 4, + CapabilityLinkage = 5, + CapabilityKernel = 6, + CapabilityVector16 = 7, + CapabilityFloat16Buffer = 8, + CapabilityFloat16 = 9, + CapabilityFloat64 = 10, + CapabilityInt64 = 11, + CapabilityInt64Atomics = 12, + CapabilityImageBasic = 13, + CapabilityImageReadWrite = 14, + CapabilityImageMipmap = 15, + CapabilityPipes = 17, + CapabilityGroups = 18, + CapabilityDeviceEnqueue = 19, + CapabilityLiteralSampler = 20, + CapabilityAtomicStorage = 21, + CapabilityInt16 = 22, + CapabilityTessellationPointSize = 23, + CapabilityGeometryPointSize = 24, + CapabilityImageGatherExtended = 25, + CapabilityStorageImageMultisample = 27, + CapabilityUniformBufferArrayDynamicIndexing = 28, + CapabilitySampledImageArrayDynamicIndexing = 29, + CapabilityStorageBufferArrayDynamicIndexing = 30, + CapabilityStorageImageArrayDynamicIndexing = 31, + CapabilityClipDistance = 32, + CapabilityCullDistance = 33, + CapabilityImageCubeArray = 34, + CapabilitySampleRateShading = 35, + CapabilityImageRect = 36, + CapabilitySampledRect = 37, + CapabilityGenericPointer = 38, + CapabilityInt8 = 39, + CapabilityInputAttachment = 40, + CapabilitySparseResidency = 41, + CapabilityMinLod = 42, + CapabilitySampled1D = 43, + CapabilityImage1D = 44, + CapabilitySampledCubeArray = 45, + CapabilitySampledBuffer = 46, + CapabilityImageBuffer = 47, + CapabilityImageMSArray = 48, + CapabilityStorageImageExtendedFormats = 49, + CapabilityImageQuery = 50, + CapabilityDerivativeControl = 51, + CapabilityInterpolationFunction = 52, + CapabilityTransformFeedback = 53, + CapabilityGeometryStreams = 54, + CapabilityStorageImageReadWithoutFormat = 55, + CapabilityStorageImageWriteWithoutFormat = 56, + CapabilityMultiViewport = 57, + CapabilitySubgroupDispatch = 58, + CapabilityNamedBarrier = 59, + CapabilityPipeStorage = 60, + CapabilityGroupNonUniform = 61, + CapabilityGroupNonUniformVote = 62, + CapabilityGroupNonUniformArithmetic = 63, + CapabilityGroupNonUniformBallot = 64, + CapabilityGroupNonUniformShuffle = 65, + CapabilityGroupNonUniformShuffleRelative = 66, + CapabilityGroupNonUniformClustered = 67, + CapabilityGroupNonUniformQuad = 68, + CapabilityShaderLayer = 69, + CapabilityShaderViewportIndex = 70, + CapabilityUniformDecoration = 71, + CapabilityFragmentShadingRateKHR = 4422, + CapabilitySubgroupBallotKHR = 4423, + CapabilityDrawParameters = 4427, + CapabilityWorkgroupMemoryExplicitLayoutKHR = 4428, + CapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429, + CapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430, + CapabilitySubgroupVoteKHR = 4431, + CapabilityStorageBuffer16BitAccess = 4433, + CapabilityStorageUniformBufferBlock16 = 4433, + CapabilityStorageUniform16 = 4434, + CapabilityUniformAndStorageBuffer16BitAccess = 4434, + CapabilityStoragePushConstant16 = 4435, + CapabilityStorageInputOutput16 = 4436, + CapabilityDeviceGroup = 4437, + CapabilityMultiView = 4439, + CapabilityVariablePointersStorageBuffer = 4441, + CapabilityVariablePointers = 4442, + CapabilityAtomicStorageOps = 4445, + CapabilitySampleMaskPostDepthCoverage = 4447, + CapabilityStorageBuffer8BitAccess = 4448, + CapabilityUniformAndStorageBuffer8BitAccess = 4449, + CapabilityStoragePushConstant8 = 4450, + CapabilityDenormPreserve = 4464, + CapabilityDenormFlushToZero = 4465, + CapabilitySignedZeroInfNanPreserve = 4466, + CapabilityRoundingModeRTE = 4467, + CapabilityRoundingModeRTZ = 4468, + CapabilityRayQueryProvisionalKHR = 4471, + CapabilityRayQueryKHR = 4472, + CapabilityRayTraversalPrimitiveCullingKHR = 4478, + CapabilityRayTracingKHR = 4479, + CapabilityFloat16ImageAMD = 5008, + CapabilityImageGatherBiasLodAMD = 5009, + CapabilityFragmentMaskAMD = 5010, + CapabilityStencilExportEXT = 5013, + CapabilityImageReadWriteLodAMD = 5015, + CapabilityInt64ImageEXT = 5016, + CapabilityShaderClockKHR = 5055, + CapabilitySampleMaskOverrideCoverageNV = 5249, + CapabilityGeometryShaderPassthroughNV = 5251, + CapabilityShaderViewportIndexLayerEXT = 5254, + CapabilityShaderViewportIndexLayerNV = 5254, + CapabilityShaderViewportMaskNV = 5255, + CapabilityShaderStereoViewNV = 5259, + CapabilityPerViewAttributesNV = 5260, + CapabilityFragmentFullyCoveredEXT = 5265, + CapabilityMeshShadingNV = 5266, + CapabilityImageFootprintNV = 5282, + CapabilityFragmentBarycentricKHR = 5284, + CapabilityFragmentBarycentricNV = 5284, + CapabilityComputeDerivativeGroupQuadsNV = 5288, + CapabilityFragmentDensityEXT = 5291, + CapabilityShadingRateNV = 5291, + CapabilityGroupNonUniformPartitionedNV = 5297, + CapabilityShaderNonUniform = 5301, + CapabilityShaderNonUniformEXT = 5301, + CapabilityRuntimeDescriptorArray = 5302, + CapabilityRuntimeDescriptorArrayEXT = 5302, + CapabilityInputAttachmentArrayDynamicIndexing = 5303, + CapabilityInputAttachmentArrayDynamicIndexingEXT = 5303, + CapabilityUniformTexelBufferArrayDynamicIndexing = 5304, + CapabilityUniformTexelBufferArrayDynamicIndexingEXT = 5304, + CapabilityStorageTexelBufferArrayDynamicIndexing = 5305, + CapabilityStorageTexelBufferArrayDynamicIndexingEXT = 5305, + CapabilityUniformBufferArrayNonUniformIndexing = 5306, + CapabilityUniformBufferArrayNonUniformIndexingEXT = 5306, + CapabilitySampledImageArrayNonUniformIndexing = 5307, + CapabilitySampledImageArrayNonUniformIndexingEXT = 5307, + CapabilityStorageBufferArrayNonUniformIndexing = 5308, + CapabilityStorageBufferArrayNonUniformIndexingEXT = 5308, + CapabilityStorageImageArrayNonUniformIndexing = 5309, + CapabilityStorageImageArrayNonUniformIndexingEXT = 5309, + CapabilityInputAttachmentArrayNonUniformIndexing = 5310, + CapabilityInputAttachmentArrayNonUniformIndexingEXT = 5310, + CapabilityUniformTexelBufferArrayNonUniformIndexing = 5311, + CapabilityUniformTexelBufferArrayNonUniformIndexingEXT = 5311, + CapabilityStorageTexelBufferArrayNonUniformIndexing = 5312, + CapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312, + CapabilityRayTracingNV = 5340, + CapabilityRayTracingMotionBlurNV = 5341, + CapabilityVulkanMemoryModel = 5345, + CapabilityVulkanMemoryModelKHR = 5345, + CapabilityVulkanMemoryModelDeviceScope = 5346, + CapabilityVulkanMemoryModelDeviceScopeKHR = 5346, + CapabilityPhysicalStorageBufferAddresses = 5347, + CapabilityPhysicalStorageBufferAddressesEXT = 5347, + CapabilityComputeDerivativeGroupLinearNV = 5350, + CapabilityRayTracingProvisionalKHR = 5353, + CapabilityCooperativeMatrixNV = 5357, + CapabilityFragmentShaderSampleInterlockEXT = 5363, + CapabilityFragmentShaderShadingRateInterlockEXT = 5372, + CapabilityShaderSMBuiltinsNV = 5373, + CapabilityFragmentShaderPixelInterlockEXT = 5378, + CapabilityDemoteToHelperInvocation = 5379, + CapabilityDemoteToHelperInvocationEXT = 5379, + CapabilityBindlessTextureNV = 5390, + CapabilitySubgroupShuffleINTEL = 5568, + CapabilitySubgroupBufferBlockIOINTEL = 5569, + CapabilitySubgroupImageBlockIOINTEL = 5570, + CapabilitySubgroupImageMediaBlockIOINTEL = 5579, + CapabilityRoundToInfinityINTEL = 5582, + CapabilityFloatingPointModeINTEL = 5583, + CapabilityIntegerFunctions2INTEL = 5584, + CapabilityFunctionPointersINTEL = 5603, + CapabilityIndirectReferencesINTEL = 5604, + CapabilityAsmINTEL = 5606, + CapabilityAtomicFloat32MinMaxEXT = 5612, + CapabilityAtomicFloat64MinMaxEXT = 5613, + CapabilityAtomicFloat16MinMaxEXT = 5616, + CapabilityVectorComputeINTEL = 5617, + CapabilityVectorAnyINTEL = 5619, + CapabilityExpectAssumeKHR = 5629, + CapabilitySubgroupAvcMotionEstimationINTEL = 5696, + CapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697, + CapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698, + CapabilityVariableLengthArrayINTEL = 5817, + CapabilityFunctionFloatControlINTEL = 5821, + CapabilityFPGAMemoryAttributesINTEL = 5824, + CapabilityFPFastMathModeINTEL = 5837, + CapabilityArbitraryPrecisionIntegersINTEL = 5844, + CapabilityArbitraryPrecisionFloatingPointINTEL = 5845, + CapabilityUnstructuredLoopControlsINTEL = 5886, + CapabilityFPGALoopControlsINTEL = 5888, + CapabilityKernelAttributesINTEL = 5892, + CapabilityFPGAKernelAttributesINTEL = 5897, + CapabilityFPGAMemoryAccessesINTEL = 5898, + CapabilityFPGAClusterAttributesINTEL = 5904, + CapabilityLoopFuseINTEL = 5906, + CapabilityFPGABufferLocationINTEL = 5920, + CapabilityArbitraryPrecisionFixedPointINTEL = 5922, + CapabilityUSMStorageClassesINTEL = 5935, + CapabilityIOPipesINTEL = 5943, + CapabilityBlockingPipesINTEL = 5945, + CapabilityFPGARegINTEL = 5948, + CapabilityDotProductInputAll = 6016, + CapabilityDotProductInputAllKHR = 6016, + CapabilityDotProductInput4x8Bit = 6017, + CapabilityDotProductInput4x8BitKHR = 6017, + CapabilityDotProductInput4x8BitPacked = 6018, + CapabilityDotProductInput4x8BitPackedKHR = 6018, + CapabilityDotProduct = 6019, + CapabilityDotProductKHR = 6019, + CapabilityBitInstructions = 6025, + CapabilityAtomicFloat32AddEXT = 6033, + CapabilityAtomicFloat64AddEXT = 6034, + CapabilityLongConstantCompositeINTEL = 6089, + CapabilityOptNoneINTEL = 6094, + CapabilityAtomicFloat16AddEXT = 6095, + CapabilityDebugInfoModuleINTEL = 6114, + CapabilityMax = 0x7fffffff, +}; + +enum RayFlagsShift { + RayFlagsOpaqueKHRShift = 0, + RayFlagsNoOpaqueKHRShift = 1, + RayFlagsTerminateOnFirstHitKHRShift = 2, + RayFlagsSkipClosestHitShaderKHRShift = 3, + RayFlagsCullBackFacingTrianglesKHRShift = 4, + RayFlagsCullFrontFacingTrianglesKHRShift = 5, + RayFlagsCullOpaqueKHRShift = 6, + RayFlagsCullNoOpaqueKHRShift = 7, + RayFlagsSkipTrianglesKHRShift = 8, + RayFlagsSkipAABBsKHRShift = 9, + RayFlagsMax = 0x7fffffff, +}; + +enum RayFlagsMask { + RayFlagsMaskNone = 0, + RayFlagsOpaqueKHRMask = 0x00000001, + RayFlagsNoOpaqueKHRMask = 0x00000002, + RayFlagsTerminateOnFirstHitKHRMask = 0x00000004, + RayFlagsSkipClosestHitShaderKHRMask = 0x00000008, + RayFlagsCullBackFacingTrianglesKHRMask = 0x00000010, + RayFlagsCullFrontFacingTrianglesKHRMask = 0x00000020, + RayFlagsCullOpaqueKHRMask = 0x00000040, + RayFlagsCullNoOpaqueKHRMask = 0x00000080, + RayFlagsSkipTrianglesKHRMask = 0x00000100, + RayFlagsSkipAABBsKHRMask = 0x00000200, +}; + +enum RayQueryIntersection { + RayQueryIntersectionRayQueryCandidateIntersectionKHR = 0, + RayQueryIntersectionRayQueryCommittedIntersectionKHR = 1, + RayQueryIntersectionMax = 0x7fffffff, +}; + +enum RayQueryCommittedIntersectionType { + RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionNoneKHR = 0, + RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionTriangleKHR = 1, + RayQueryCommittedIntersectionTypeRayQueryCommittedIntersectionGeneratedKHR = 2, + RayQueryCommittedIntersectionTypeMax = 0x7fffffff, +}; + +enum RayQueryCandidateIntersectionType { + RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionTriangleKHR = 0, + RayQueryCandidateIntersectionTypeRayQueryCandidateIntersectionAABBKHR = 1, + RayQueryCandidateIntersectionTypeMax = 0x7fffffff, +}; + +enum FragmentShadingRateShift { + FragmentShadingRateVertical2PixelsShift = 0, + FragmentShadingRateVertical4PixelsShift = 1, + FragmentShadingRateHorizontal2PixelsShift = 2, + FragmentShadingRateHorizontal4PixelsShift = 3, + FragmentShadingRateMax = 0x7fffffff, +}; + +enum FragmentShadingRateMask { + FragmentShadingRateMaskNone = 0, + FragmentShadingRateVertical2PixelsMask = 0x00000001, + FragmentShadingRateVertical4PixelsMask = 0x00000002, + FragmentShadingRateHorizontal2PixelsMask = 0x00000004, + FragmentShadingRateHorizontal4PixelsMask = 0x00000008, +}; + +enum FPDenormMode { + FPDenormModePreserve = 0, + FPDenormModeFlushToZero = 1, + FPDenormModeMax = 0x7fffffff, +}; + +enum FPOperationMode { + FPOperationModeIEEE = 0, + FPOperationModeALT = 1, + FPOperationModeMax = 0x7fffffff, +}; + +enum QuantizationModes { + QuantizationModesTRN = 0, + QuantizationModesTRN_ZERO = 1, + QuantizationModesRND = 2, + QuantizationModesRND_ZERO = 3, + QuantizationModesRND_INF = 4, + QuantizationModesRND_MIN_INF = 5, + QuantizationModesRND_CONV = 6, + QuantizationModesRND_CONV_ODD = 7, + QuantizationModesMax = 0x7fffffff, +}; + +enum OverflowModes { + OverflowModesWRAP = 0, + OverflowModesSAT = 1, + OverflowModesSAT_ZERO = 2, + OverflowModesSAT_SYM = 3, + OverflowModesMax = 0x7fffffff, +}; + +enum PackedVectorFormat { + PackedVectorFormatPackedVectorFormat4x8Bit = 0, + PackedVectorFormatPackedVectorFormat4x8BitKHR = 0, + PackedVectorFormatMax = 0x7fffffff, +}; + +enum Op { + OpNop = 0, + OpUndef = 1, + OpSourceContinued = 2, + OpSource = 3, + OpSourceExtension = 4, + OpName = 5, + OpMemberName = 6, + OpString = 7, + OpLine = 8, + OpExtension = 10, + OpExtInstImport = 11, + OpExtInst = 12, + OpMemoryModel = 14, + OpEntryPoint = 15, + OpExecutionMode = 16, + OpCapability = 17, + OpTypeVoid = 19, + OpTypeBool = 20, + OpTypeInt = 21, + OpTypeFloat = 22, + OpTypeVector = 23, + OpTypeMatrix = 24, + OpTypeImage = 25, + OpTypeSampler = 26, + OpTypeSampledImage = 27, + OpTypeArray = 28, + OpTypeRuntimeArray = 29, + OpTypeStruct = 30, + OpTypeOpaque = 31, + OpTypePointer = 32, + OpTypeFunction = 33, + OpTypeEvent = 34, + OpTypeDeviceEvent = 35, + OpTypeReserveId = 36, + OpTypeQueue = 37, + OpTypePipe = 38, + OpTypeForwardPointer = 39, + OpConstantTrue = 41, + OpConstantFalse = 42, + OpConstant = 43, + OpConstantComposite = 44, + OpConstantSampler = 45, + OpConstantNull = 46, + OpSpecConstantTrue = 48, + OpSpecConstantFalse = 49, + OpSpecConstant = 50, + OpSpecConstantComposite = 51, + OpSpecConstantOp = 52, + OpFunction = 54, + OpFunctionParameter = 55, + OpFunctionEnd = 56, + OpFunctionCall = 57, + OpVariable = 59, + OpImageTexelPointer = 60, + OpLoad = 61, + OpStore = 62, + OpCopyMemory = 63, + OpCopyMemorySized = 64, + OpAccessChain = 65, + OpInBoundsAccessChain = 66, + OpPtrAccessChain = 67, + OpArrayLength = 68, + OpGenericPtrMemSemantics = 69, + OpInBoundsPtrAccessChain = 70, + OpDecorate = 71, + OpMemberDecorate = 72, + OpDecorationGroup = 73, + OpGroupDecorate = 74, + OpGroupMemberDecorate = 75, + OpVectorExtractDynamic = 77, + OpVectorInsertDynamic = 78, + OpVectorShuffle = 79, + OpCompositeConstruct = 80, + OpCompositeExtract = 81, + OpCompositeInsert = 82, + OpCopyObject = 83, + OpTranspose = 84, + OpSampledImage = 86, + OpImageSampleImplicitLod = 87, + OpImageSampleExplicitLod = 88, + OpImageSampleDrefImplicitLod = 89, + OpImageSampleDrefExplicitLod = 90, + OpImageSampleProjImplicitLod = 91, + OpImageSampleProjExplicitLod = 92, + OpImageSampleProjDrefImplicitLod = 93, + OpImageSampleProjDrefExplicitLod = 94, + OpImageFetch = 95, + OpImageGather = 96, + OpImageDrefGather = 97, + OpImageRead = 98, + OpImageWrite = 99, + OpImage = 100, + OpImageQueryFormat = 101, + OpImageQueryOrder = 102, + OpImageQuerySizeLod = 103, + OpImageQuerySize = 104, + OpImageQueryLod = 105, + OpImageQueryLevels = 106, + OpImageQuerySamples = 107, + OpConvertFToU = 109, + OpConvertFToS = 110, + OpConvertSToF = 111, + OpConvertUToF = 112, + OpUConvert = 113, + OpSConvert = 114, + OpFConvert = 115, + OpQuantizeToF16 = 116, + OpConvertPtrToU = 117, + OpSatConvertSToU = 118, + OpSatConvertUToS = 119, + OpConvertUToPtr = 120, + OpPtrCastToGeneric = 121, + OpGenericCastToPtr = 122, + OpGenericCastToPtrExplicit = 123, + OpBitcast = 124, + OpSNegate = 126, + OpFNegate = 127, + OpIAdd = 128, + OpFAdd = 129, + OpISub = 130, + OpFSub = 131, + OpIMul = 132, + OpFMul = 133, + OpUDiv = 134, + OpSDiv = 135, + OpFDiv = 136, + OpUMod = 137, + OpSRem = 138, + OpSMod = 139, + OpFRem = 140, + OpFMod = 141, + OpVectorTimesScalar = 142, + OpMatrixTimesScalar = 143, + OpVectorTimesMatrix = 144, + OpMatrixTimesVector = 145, + OpMatrixTimesMatrix = 146, + OpOuterProduct = 147, + OpDot = 148, + OpIAddCarry = 149, + OpISubBorrow = 150, + OpUMulExtended = 151, + OpSMulExtended = 152, + OpAny = 154, + OpAll = 155, + OpIsNan = 156, + OpIsInf = 157, + OpIsFinite = 158, + OpIsNormal = 159, + OpSignBitSet = 160, + OpLessOrGreater = 161, + OpOrdered = 162, + OpUnordered = 163, + OpLogicalEqual = 164, + OpLogicalNotEqual = 165, + OpLogicalOr = 166, + OpLogicalAnd = 167, + OpLogicalNot = 168, + OpSelect = 169, + OpIEqual = 170, + OpINotEqual = 171, + OpUGreaterThan = 172, + OpSGreaterThan = 173, + OpUGreaterThanEqual = 174, + OpSGreaterThanEqual = 175, + OpULessThan = 176, + OpSLessThan = 177, + OpULessThanEqual = 178, + OpSLessThanEqual = 179, + OpFOrdEqual = 180, + OpFUnordEqual = 181, + OpFOrdNotEqual = 182, + OpFUnordNotEqual = 183, + OpFOrdLessThan = 184, + OpFUnordLessThan = 185, + OpFOrdGreaterThan = 186, + OpFUnordGreaterThan = 187, + OpFOrdLessThanEqual = 188, + OpFUnordLessThanEqual = 189, + OpFOrdGreaterThanEqual = 190, + OpFUnordGreaterThanEqual = 191, + OpShiftRightLogical = 194, + OpShiftRightArithmetic = 195, + OpShiftLeftLogical = 196, + OpBitwiseOr = 197, + OpBitwiseXor = 198, + OpBitwiseAnd = 199, + OpNot = 200, + OpBitFieldInsert = 201, + OpBitFieldSExtract = 202, + OpBitFieldUExtract = 203, + OpBitReverse = 204, + OpBitCount = 205, + OpDPdx = 207, + OpDPdy = 208, + OpFwidth = 209, + OpDPdxFine = 210, + OpDPdyFine = 211, + OpFwidthFine = 212, + OpDPdxCoarse = 213, + OpDPdyCoarse = 214, + OpFwidthCoarse = 215, + OpEmitVertex = 218, + OpEndPrimitive = 219, + OpEmitStreamVertex = 220, + OpEndStreamPrimitive = 221, + OpControlBarrier = 224, + OpMemoryBarrier = 225, + OpAtomicLoad = 227, + OpAtomicStore = 228, + OpAtomicExchange = 229, + OpAtomicCompareExchange = 230, + OpAtomicCompareExchangeWeak = 231, + OpAtomicIIncrement = 232, + OpAtomicIDecrement = 233, + OpAtomicIAdd = 234, + OpAtomicISub = 235, + OpAtomicSMin = 236, + OpAtomicUMin = 237, + OpAtomicSMax = 238, + OpAtomicUMax = 239, + OpAtomicAnd = 240, + OpAtomicOr = 241, + OpAtomicXor = 242, + OpPhi = 245, + OpLoopMerge = 246, + OpSelectionMerge = 247, + OpLabel = 248, + OpBranch = 249, + OpBranchConditional = 250, + OpSwitch = 251, + OpKill = 252, + OpReturn = 253, + OpReturnValue = 254, + OpUnreachable = 255, + OpLifetimeStart = 256, + OpLifetimeStop = 257, + OpGroupAsyncCopy = 259, + OpGroupWaitEvents = 260, + OpGroupAll = 261, + OpGroupAny = 262, + OpGroupBroadcast = 263, + OpGroupIAdd = 264, + OpGroupFAdd = 265, + OpGroupFMin = 266, + OpGroupUMin = 267, + OpGroupSMin = 268, + OpGroupFMax = 269, + OpGroupUMax = 270, + OpGroupSMax = 271, + OpReadPipe = 274, + OpWritePipe = 275, + OpReservedReadPipe = 276, + OpReservedWritePipe = 277, + OpReserveReadPipePackets = 278, + OpReserveWritePipePackets = 279, + OpCommitReadPipe = 280, + OpCommitWritePipe = 281, + OpIsValidReserveId = 282, + OpGetNumPipePackets = 283, + OpGetMaxPipePackets = 284, + OpGroupReserveReadPipePackets = 285, + OpGroupReserveWritePipePackets = 286, + OpGroupCommitReadPipe = 287, + OpGroupCommitWritePipe = 288, + OpEnqueueMarker = 291, + OpEnqueueKernel = 292, + OpGetKernelNDrangeSubGroupCount = 293, + OpGetKernelNDrangeMaxSubGroupSize = 294, + OpGetKernelWorkGroupSize = 295, + OpGetKernelPreferredWorkGroupSizeMultiple = 296, + OpRetainEvent = 297, + OpReleaseEvent = 298, + OpCreateUserEvent = 299, + OpIsValidEvent = 300, + OpSetUserEventStatus = 301, + OpCaptureEventProfilingInfo = 302, + OpGetDefaultQueue = 303, + OpBuildNDRange = 304, + OpImageSparseSampleImplicitLod = 305, + OpImageSparseSampleExplicitLod = 306, + OpImageSparseSampleDrefImplicitLod = 307, + OpImageSparseSampleDrefExplicitLod = 308, + OpImageSparseSampleProjImplicitLod = 309, + OpImageSparseSampleProjExplicitLod = 310, + OpImageSparseSampleProjDrefImplicitLod = 311, + OpImageSparseSampleProjDrefExplicitLod = 312, + OpImageSparseFetch = 313, + OpImageSparseGather = 314, + OpImageSparseDrefGather = 315, + OpImageSparseTexelsResident = 316, + OpNoLine = 317, + OpAtomicFlagTestAndSet = 318, + OpAtomicFlagClear = 319, + OpImageSparseRead = 320, + OpSizeOf = 321, + OpTypePipeStorage = 322, + OpConstantPipeStorage = 323, + OpCreatePipeFromPipeStorage = 324, + OpGetKernelLocalSizeForSubgroupCount = 325, + OpGetKernelMaxNumSubgroups = 326, + OpTypeNamedBarrier = 327, + OpNamedBarrierInitialize = 328, + OpMemoryNamedBarrier = 329, + OpModuleProcessed = 330, + OpExecutionModeId = 331, + OpDecorateId = 332, + OpGroupNonUniformElect = 333, + OpGroupNonUniformAll = 334, + OpGroupNonUniformAny = 335, + OpGroupNonUniformAllEqual = 336, + OpGroupNonUniformBroadcast = 337, + OpGroupNonUniformBroadcastFirst = 338, + OpGroupNonUniformBallot = 339, + OpGroupNonUniformInverseBallot = 340, + OpGroupNonUniformBallotBitExtract = 341, + OpGroupNonUniformBallotBitCount = 342, + OpGroupNonUniformBallotFindLSB = 343, + OpGroupNonUniformBallotFindMSB = 344, + OpGroupNonUniformShuffle = 345, + OpGroupNonUniformShuffleXor = 346, + OpGroupNonUniformShuffleUp = 347, + OpGroupNonUniformShuffleDown = 348, + OpGroupNonUniformIAdd = 349, + OpGroupNonUniformFAdd = 350, + OpGroupNonUniformIMul = 351, + OpGroupNonUniformFMul = 352, + OpGroupNonUniformSMin = 353, + OpGroupNonUniformUMin = 354, + OpGroupNonUniformFMin = 355, + OpGroupNonUniformSMax = 356, + OpGroupNonUniformUMax = 357, + OpGroupNonUniformFMax = 358, + OpGroupNonUniformBitwiseAnd = 359, + OpGroupNonUniformBitwiseOr = 360, + OpGroupNonUniformBitwiseXor = 361, + OpGroupNonUniformLogicalAnd = 362, + OpGroupNonUniformLogicalOr = 363, + OpGroupNonUniformLogicalXor = 364, + OpGroupNonUniformQuadBroadcast = 365, + OpGroupNonUniformQuadSwap = 366, + OpCopyLogical = 400, + OpPtrEqual = 401, + OpPtrNotEqual = 402, + OpPtrDiff = 403, + OpTerminateInvocation = 4416, + OpSubgroupBallotKHR = 4421, + OpSubgroupFirstInvocationKHR = 4422, + OpSubgroupAllKHR = 4428, + OpSubgroupAnyKHR = 4429, + OpSubgroupAllEqualKHR = 4430, + OpSubgroupReadInvocationKHR = 4432, + OpTraceRayKHR = 4445, + OpExecuteCallableKHR = 4446, + OpConvertUToAccelerationStructureKHR = 4447, + OpIgnoreIntersectionKHR = 4448, + OpTerminateRayKHR = 4449, + OpSDot = 4450, + OpSDotKHR = 4450, + OpUDot = 4451, + OpUDotKHR = 4451, + OpSUDot = 4452, + OpSUDotKHR = 4452, + OpSDotAccSat = 4453, + OpSDotAccSatKHR = 4453, + OpUDotAccSat = 4454, + OpUDotAccSatKHR = 4454, + OpSUDotAccSat = 4455, + OpSUDotAccSatKHR = 4455, + OpTypeRayQueryKHR = 4472, + OpRayQueryInitializeKHR = 4473, + OpRayQueryTerminateKHR = 4474, + OpRayQueryGenerateIntersectionKHR = 4475, + OpRayQueryConfirmIntersectionKHR = 4476, + OpRayQueryProceedKHR = 4477, + OpRayQueryGetIntersectionTypeKHR = 4479, + OpGroupIAddNonUniformAMD = 5000, + OpGroupFAddNonUniformAMD = 5001, + OpGroupFMinNonUniformAMD = 5002, + OpGroupUMinNonUniformAMD = 5003, + OpGroupSMinNonUniformAMD = 5004, + OpGroupFMaxNonUniformAMD = 5005, + OpGroupUMaxNonUniformAMD = 5006, + OpGroupSMaxNonUniformAMD = 5007, + OpFragmentMaskFetchAMD = 5011, + OpFragmentFetchAMD = 5012, + OpReadClockKHR = 5056, + OpImageSampleFootprintNV = 5283, + OpGroupNonUniformPartitionNV = 5296, + OpWritePackedPrimitiveIndices4x8NV = 5299, + OpReportIntersectionKHR = 5334, + OpReportIntersectionNV = 5334, + OpIgnoreIntersectionNV = 5335, + OpTerminateRayNV = 5336, + OpTraceNV = 5337, + OpTraceMotionNV = 5338, + OpTraceRayMotionNV = 5339, + OpTypeAccelerationStructureKHR = 5341, + OpTypeAccelerationStructureNV = 5341, + OpExecuteCallableNV = 5344, + OpTypeCooperativeMatrixNV = 5358, + OpCooperativeMatrixLoadNV = 5359, + OpCooperativeMatrixStoreNV = 5360, + OpCooperativeMatrixMulAddNV = 5361, + OpCooperativeMatrixLengthNV = 5362, + OpBeginInvocationInterlockEXT = 5364, + OpEndInvocationInterlockEXT = 5365, + OpDemoteToHelperInvocation = 5380, + OpDemoteToHelperInvocationEXT = 5380, + OpIsHelperInvocationEXT = 5381, + OpConvertUToImageNV = 5391, + OpConvertUToSamplerNV = 5392, + OpConvertImageToUNV = 5393, + OpConvertSamplerToUNV = 5394, + OpConvertUToSampledImageNV = 5395, + OpConvertSampledImageToUNV = 5396, + OpSamplerImageAddressingModeNV = 5397, + OpSubgroupShuffleINTEL = 5571, + OpSubgroupShuffleDownINTEL = 5572, + OpSubgroupShuffleUpINTEL = 5573, + OpSubgroupShuffleXorINTEL = 5574, + OpSubgroupBlockReadINTEL = 5575, + OpSubgroupBlockWriteINTEL = 5576, + OpSubgroupImageBlockReadINTEL = 5577, + OpSubgroupImageBlockWriteINTEL = 5578, + OpSubgroupImageMediaBlockReadINTEL = 5580, + OpSubgroupImageMediaBlockWriteINTEL = 5581, + OpUCountLeadingZerosINTEL = 5585, + OpUCountTrailingZerosINTEL = 5586, + OpAbsISubINTEL = 5587, + OpAbsUSubINTEL = 5588, + OpIAddSatINTEL = 5589, + OpUAddSatINTEL = 5590, + OpIAverageINTEL = 5591, + OpUAverageINTEL = 5592, + OpIAverageRoundedINTEL = 5593, + OpUAverageRoundedINTEL = 5594, + OpISubSatINTEL = 5595, + OpUSubSatINTEL = 5596, + OpIMul32x16INTEL = 5597, + OpUMul32x16INTEL = 5598, + OpConstantFunctionPointerINTEL = 5600, + OpFunctionPointerCallINTEL = 5601, + OpAsmTargetINTEL = 5609, + OpAsmINTEL = 5610, + OpAsmCallINTEL = 5611, + OpAtomicFMinEXT = 5614, + OpAtomicFMaxEXT = 5615, + OpAssumeTrueKHR = 5630, + OpExpectKHR = 5631, + OpDecorateString = 5632, + OpDecorateStringGOOGLE = 5632, + OpMemberDecorateString = 5633, + OpMemberDecorateStringGOOGLE = 5633, + OpVmeImageINTEL = 5699, + OpTypeVmeImageINTEL = 5700, + OpTypeAvcImePayloadINTEL = 5701, + OpTypeAvcRefPayloadINTEL = 5702, + OpTypeAvcSicPayloadINTEL = 5703, + OpTypeAvcMcePayloadINTEL = 5704, + OpTypeAvcMceResultINTEL = 5705, + OpTypeAvcImeResultINTEL = 5706, + OpTypeAvcImeResultSingleReferenceStreamoutINTEL = 5707, + OpTypeAvcImeResultDualReferenceStreamoutINTEL = 5708, + OpTypeAvcImeSingleReferenceStreaminINTEL = 5709, + OpTypeAvcImeDualReferenceStreaminINTEL = 5710, + OpTypeAvcRefResultINTEL = 5711, + OpTypeAvcSicResultINTEL = 5712, + OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL = 5713, + OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL = 5714, + OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL = 5715, + OpSubgroupAvcMceSetInterShapePenaltyINTEL = 5716, + OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL = 5717, + OpSubgroupAvcMceSetInterDirectionPenaltyINTEL = 5718, + OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL = 5719, + OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL = 5720, + OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL = 5721, + OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL = 5722, + OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL = 5723, + OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL = 5724, + OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL = 5725, + OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL = 5726, + OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL = 5727, + OpSubgroupAvcMceSetAcOnlyHaarINTEL = 5728, + OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL = 5729, + OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL = 5730, + OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL = 5731, + OpSubgroupAvcMceConvertToImePayloadINTEL = 5732, + OpSubgroupAvcMceConvertToImeResultINTEL = 5733, + OpSubgroupAvcMceConvertToRefPayloadINTEL = 5734, + OpSubgroupAvcMceConvertToRefResultINTEL = 5735, + OpSubgroupAvcMceConvertToSicPayloadINTEL = 5736, + OpSubgroupAvcMceConvertToSicResultINTEL = 5737, + OpSubgroupAvcMceGetMotionVectorsINTEL = 5738, + OpSubgroupAvcMceGetInterDistortionsINTEL = 5739, + OpSubgroupAvcMceGetBestInterDistortionsINTEL = 5740, + OpSubgroupAvcMceGetInterMajorShapeINTEL = 5741, + OpSubgroupAvcMceGetInterMinorShapeINTEL = 5742, + OpSubgroupAvcMceGetInterDirectionsINTEL = 5743, + OpSubgroupAvcMceGetInterMotionVectorCountINTEL = 5744, + OpSubgroupAvcMceGetInterReferenceIdsINTEL = 5745, + OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL = 5746, + OpSubgroupAvcImeInitializeINTEL = 5747, + OpSubgroupAvcImeSetSingleReferenceINTEL = 5748, + OpSubgroupAvcImeSetDualReferenceINTEL = 5749, + OpSubgroupAvcImeRefWindowSizeINTEL = 5750, + OpSubgroupAvcImeAdjustRefOffsetINTEL = 5751, + OpSubgroupAvcImeConvertToMcePayloadINTEL = 5752, + OpSubgroupAvcImeSetMaxMotionVectorCountINTEL = 5753, + OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL = 5754, + OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL = 5755, + OpSubgroupAvcImeSetWeightedSadINTEL = 5756, + OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL = 5757, + OpSubgroupAvcImeEvaluateWithDualReferenceINTEL = 5758, + OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL = 5759, + OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL = 5760, + OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL = 5761, + OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL = 5762, + OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL = 5763, + OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL = 5764, + OpSubgroupAvcImeConvertToMceResultINTEL = 5765, + OpSubgroupAvcImeGetSingleReferenceStreaminINTEL = 5766, + OpSubgroupAvcImeGetDualReferenceStreaminINTEL = 5767, + OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL = 5768, + OpSubgroupAvcImeStripDualReferenceStreamoutINTEL = 5769, + OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL = 5770, + OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL = 5771, + OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL = 5772, + OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL = 5773, + OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL = 5774, + OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL = 5775, + OpSubgroupAvcImeGetBorderReachedINTEL = 5776, + OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL = 5777, + OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL = 5778, + OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL = 5779, + OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL = 5780, + OpSubgroupAvcFmeInitializeINTEL = 5781, + OpSubgroupAvcBmeInitializeINTEL = 5782, + OpSubgroupAvcRefConvertToMcePayloadINTEL = 5783, + OpSubgroupAvcRefSetBidirectionalMixDisableINTEL = 5784, + OpSubgroupAvcRefSetBilinearFilterEnableINTEL = 5785, + OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL = 5786, + OpSubgroupAvcRefEvaluateWithDualReferenceINTEL = 5787, + OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL = 5788, + OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL = 5789, + OpSubgroupAvcRefConvertToMceResultINTEL = 5790, + OpSubgroupAvcSicInitializeINTEL = 5791, + OpSubgroupAvcSicConfigureSkcINTEL = 5792, + OpSubgroupAvcSicConfigureIpeLumaINTEL = 5793, + OpSubgroupAvcSicConfigureIpeLumaChromaINTEL = 5794, + OpSubgroupAvcSicGetMotionVectorMaskINTEL = 5795, + OpSubgroupAvcSicConvertToMcePayloadINTEL = 5796, + OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL = 5797, + OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL = 5798, + OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL = 5799, + OpSubgroupAvcSicSetBilinearFilterEnableINTEL = 5800, + OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL = 5801, + OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL = 5802, + OpSubgroupAvcSicEvaluateIpeINTEL = 5803, + OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL = 5804, + OpSubgroupAvcSicEvaluateWithDualReferenceINTEL = 5805, + OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL = 5806, + OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL = 5807, + OpSubgroupAvcSicConvertToMceResultINTEL = 5808, + OpSubgroupAvcSicGetIpeLumaShapeINTEL = 5809, + OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL = 5810, + OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL = 5811, + OpSubgroupAvcSicGetPackedIpeLumaModesINTEL = 5812, + OpSubgroupAvcSicGetIpeChromaModeINTEL = 5813, + OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814, + OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815, + OpSubgroupAvcSicGetInterRawSadsINTEL = 5816, + OpVariableLengthArrayINTEL = 5818, + OpSaveMemoryINTEL = 5819, + OpRestoreMemoryINTEL = 5820, + OpArbitraryFloatSinCosPiINTEL = 5840, + OpArbitraryFloatCastINTEL = 5841, + OpArbitraryFloatCastFromIntINTEL = 5842, + OpArbitraryFloatCastToIntINTEL = 5843, + OpArbitraryFloatAddINTEL = 5846, + OpArbitraryFloatSubINTEL = 5847, + OpArbitraryFloatMulINTEL = 5848, + OpArbitraryFloatDivINTEL = 5849, + OpArbitraryFloatGTINTEL = 5850, + OpArbitraryFloatGEINTEL = 5851, + OpArbitraryFloatLTINTEL = 5852, + OpArbitraryFloatLEINTEL = 5853, + OpArbitraryFloatEQINTEL = 5854, + OpArbitraryFloatRecipINTEL = 5855, + OpArbitraryFloatRSqrtINTEL = 5856, + OpArbitraryFloatCbrtINTEL = 5857, + OpArbitraryFloatHypotINTEL = 5858, + OpArbitraryFloatSqrtINTEL = 5859, + OpArbitraryFloatLogINTEL = 5860, + OpArbitraryFloatLog2INTEL = 5861, + OpArbitraryFloatLog10INTEL = 5862, + OpArbitraryFloatLog1pINTEL = 5863, + OpArbitraryFloatExpINTEL = 5864, + OpArbitraryFloatExp2INTEL = 5865, + OpArbitraryFloatExp10INTEL = 5866, + OpArbitraryFloatExpm1INTEL = 5867, + OpArbitraryFloatSinINTEL = 5868, + OpArbitraryFloatCosINTEL = 5869, + OpArbitraryFloatSinCosINTEL = 5870, + OpArbitraryFloatSinPiINTEL = 5871, + OpArbitraryFloatCosPiINTEL = 5872, + OpArbitraryFloatASinINTEL = 5873, + OpArbitraryFloatASinPiINTEL = 5874, + OpArbitraryFloatACosINTEL = 5875, + OpArbitraryFloatACosPiINTEL = 5876, + OpArbitraryFloatATanINTEL = 5877, + OpArbitraryFloatATanPiINTEL = 5878, + OpArbitraryFloatATan2INTEL = 5879, + OpArbitraryFloatPowINTEL = 5880, + OpArbitraryFloatPowRINTEL = 5881, + OpArbitraryFloatPowNINTEL = 5882, + OpLoopControlINTEL = 5887, + OpFixedSqrtINTEL = 5923, + OpFixedRecipINTEL = 5924, + OpFixedRsqrtINTEL = 5925, + OpFixedSinINTEL = 5926, + OpFixedCosINTEL = 5927, + OpFixedSinCosINTEL = 5928, + OpFixedSinPiINTEL = 5929, + OpFixedCosPiINTEL = 5930, + OpFixedSinCosPiINTEL = 5931, + OpFixedLogINTEL = 5932, + OpFixedExpINTEL = 5933, + OpPtrCastToCrossWorkgroupINTEL = 5934, + OpCrossWorkgroupCastToPtrINTEL = 5938, + OpReadPipeBlockingINTEL = 5946, + OpWritePipeBlockingINTEL = 5947, + OpFPGARegINTEL = 5949, + OpRayQueryGetRayTMinKHR = 6016, + OpRayQueryGetRayFlagsKHR = 6017, + OpRayQueryGetIntersectionTKHR = 6018, + OpRayQueryGetIntersectionInstanceCustomIndexKHR = 6019, + OpRayQueryGetIntersectionInstanceIdKHR = 6020, + OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR = 6021, + OpRayQueryGetIntersectionGeometryIndexKHR = 6022, + OpRayQueryGetIntersectionPrimitiveIndexKHR = 6023, + OpRayQueryGetIntersectionBarycentricsKHR = 6024, + OpRayQueryGetIntersectionFrontFaceKHR = 6025, + OpRayQueryGetIntersectionCandidateAABBOpaqueKHR = 6026, + OpRayQueryGetIntersectionObjectRayDirectionKHR = 6027, + OpRayQueryGetIntersectionObjectRayOriginKHR = 6028, + OpRayQueryGetWorldRayDirectionKHR = 6029, + OpRayQueryGetWorldRayOriginKHR = 6030, + OpRayQueryGetIntersectionObjectToWorldKHR = 6031, + OpRayQueryGetIntersectionWorldToObjectKHR = 6032, + OpAtomicFAddEXT = 6035, + OpTypeBufferSurfaceINTEL = 6086, + OpTypeStructContinuedINTEL = 6090, + OpConstantCompositeContinuedINTEL = 6091, + OpSpecConstantCompositeContinuedINTEL = 6092, + OpMax = 0x7fffffff, +}; + +#ifdef SPV_ENABLE_UTILITY_CODE +inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { + *hasResult = *hasResultType = false; + switch (opcode) { + default: /* unknown opcode */ break; + case OpNop: *hasResult = false; *hasResultType = false; break; + case OpUndef: *hasResult = true; *hasResultType = true; break; + case OpSourceContinued: *hasResult = false; *hasResultType = false; break; + case OpSource: *hasResult = false; *hasResultType = false; break; + case OpSourceExtension: *hasResult = false; *hasResultType = false; break; + case OpName: *hasResult = false; *hasResultType = false; break; + case OpMemberName: *hasResult = false; *hasResultType = false; break; + case OpString: *hasResult = true; *hasResultType = false; break; + case OpLine: *hasResult = false; *hasResultType = false; break; + case OpExtension: *hasResult = false; *hasResultType = false; break; + case OpExtInstImport: *hasResult = true; *hasResultType = false; break; + case OpExtInst: *hasResult = true; *hasResultType = true; break; + case OpMemoryModel: *hasResult = false; *hasResultType = false; break; + case OpEntryPoint: *hasResult = false; *hasResultType = false; break; + case OpExecutionMode: *hasResult = false; *hasResultType = false; break; + case OpCapability: *hasResult = false; *hasResultType = false; break; + case OpTypeVoid: *hasResult = true; *hasResultType = false; break; + case OpTypeBool: *hasResult = true; *hasResultType = false; break; + case OpTypeInt: *hasResult = true; *hasResultType = false; break; + case OpTypeFloat: *hasResult = true; *hasResultType = false; break; + case OpTypeVector: *hasResult = true; *hasResultType = false; break; + case OpTypeMatrix: *hasResult = true; *hasResultType = false; break; + case OpTypeImage: *hasResult = true; *hasResultType = false; break; + case OpTypeSampler: *hasResult = true; *hasResultType = false; break; + case OpTypeSampledImage: *hasResult = true; *hasResultType = false; break; + case OpTypeArray: *hasResult = true; *hasResultType = false; break; + case OpTypeRuntimeArray: *hasResult = true; *hasResultType = false; break; + case OpTypeStruct: *hasResult = true; *hasResultType = false; break; + case OpTypeOpaque: *hasResult = true; *hasResultType = false; break; + case OpTypePointer: *hasResult = true; *hasResultType = false; break; + case OpTypeFunction: *hasResult = true; *hasResultType = false; break; + case OpTypeEvent: *hasResult = true; *hasResultType = false; break; + case OpTypeDeviceEvent: *hasResult = true; *hasResultType = false; break; + case OpTypeReserveId: *hasResult = true; *hasResultType = false; break; + case OpTypeQueue: *hasResult = true; *hasResultType = false; break; + case OpTypePipe: *hasResult = true; *hasResultType = false; break; + case OpTypeForwardPointer: *hasResult = false; *hasResultType = false; break; + case OpConstantTrue: *hasResult = true; *hasResultType = true; break; + case OpConstantFalse: *hasResult = true; *hasResultType = true; break; + case OpConstant: *hasResult = true; *hasResultType = true; break; + case OpConstantComposite: *hasResult = true; *hasResultType = true; break; + case OpConstantSampler: *hasResult = true; *hasResultType = true; break; + case OpConstantNull: *hasResult = true; *hasResultType = true; break; + case OpSpecConstantTrue: *hasResult = true; *hasResultType = true; break; + case OpSpecConstantFalse: *hasResult = true; *hasResultType = true; break; + case OpSpecConstant: *hasResult = true; *hasResultType = true; break; + case OpSpecConstantComposite: *hasResult = true; *hasResultType = true; break; + case OpSpecConstantOp: *hasResult = true; *hasResultType = true; break; + case OpFunction: *hasResult = true; *hasResultType = true; break; + case OpFunctionParameter: *hasResult = true; *hasResultType = true; break; + case OpFunctionEnd: *hasResult = false; *hasResultType = false; break; + case OpFunctionCall: *hasResult = true; *hasResultType = true; break; + case OpVariable: *hasResult = true; *hasResultType = true; break; + case OpImageTexelPointer: *hasResult = true; *hasResultType = true; break; + case OpLoad: *hasResult = true; *hasResultType = true; break; + case OpStore: *hasResult = false; *hasResultType = false; break; + case OpCopyMemory: *hasResult = false; *hasResultType = false; break; + case OpCopyMemorySized: *hasResult = false; *hasResultType = false; break; + case OpAccessChain: *hasResult = true; *hasResultType = true; break; + case OpInBoundsAccessChain: *hasResult = true; *hasResultType = true; break; + case OpPtrAccessChain: *hasResult = true; *hasResultType = true; break; + case OpArrayLength: *hasResult = true; *hasResultType = true; break; + case OpGenericPtrMemSemantics: *hasResult = true; *hasResultType = true; break; + case OpInBoundsPtrAccessChain: *hasResult = true; *hasResultType = true; break; + case OpDecorate: *hasResult = false; *hasResultType = false; break; + case OpMemberDecorate: *hasResult = false; *hasResultType = false; break; + case OpDecorationGroup: *hasResult = true; *hasResultType = false; break; + case OpGroupDecorate: *hasResult = false; *hasResultType = false; break; + case OpGroupMemberDecorate: *hasResult = false; *hasResultType = false; break; + case OpVectorExtractDynamic: *hasResult = true; *hasResultType = true; break; + case OpVectorInsertDynamic: *hasResult = true; *hasResultType = true; break; + case OpVectorShuffle: *hasResult = true; *hasResultType = true; break; + case OpCompositeConstruct: *hasResult = true; *hasResultType = true; break; + case OpCompositeExtract: *hasResult = true; *hasResultType = true; break; + case OpCompositeInsert: *hasResult = true; *hasResultType = true; break; + case OpCopyObject: *hasResult = true; *hasResultType = true; break; + case OpTranspose: *hasResult = true; *hasResultType = true; break; + case OpSampledImage: *hasResult = true; *hasResultType = true; break; + case OpImageSampleImplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSampleExplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageFetch: *hasResult = true; *hasResultType = true; break; + case OpImageGather: *hasResult = true; *hasResultType = true; break; + case OpImageDrefGather: *hasResult = true; *hasResultType = true; break; + case OpImageRead: *hasResult = true; *hasResultType = true; break; + case OpImageWrite: *hasResult = false; *hasResultType = false; break; + case OpImage: *hasResult = true; *hasResultType = true; break; + case OpImageQueryFormat: *hasResult = true; *hasResultType = true; break; + case OpImageQueryOrder: *hasResult = true; *hasResultType = true; break; + case OpImageQuerySizeLod: *hasResult = true; *hasResultType = true; break; + case OpImageQuerySize: *hasResult = true; *hasResultType = true; break; + case OpImageQueryLod: *hasResult = true; *hasResultType = true; break; + case OpImageQueryLevels: *hasResult = true; *hasResultType = true; break; + case OpImageQuerySamples: *hasResult = true; *hasResultType = true; break; + case OpConvertFToU: *hasResult = true; *hasResultType = true; break; + case OpConvertFToS: *hasResult = true; *hasResultType = true; break; + case OpConvertSToF: *hasResult = true; *hasResultType = true; break; + case OpConvertUToF: *hasResult = true; *hasResultType = true; break; + case OpUConvert: *hasResult = true; *hasResultType = true; break; + case OpSConvert: *hasResult = true; *hasResultType = true; break; + case OpFConvert: *hasResult = true; *hasResultType = true; break; + case OpQuantizeToF16: *hasResult = true; *hasResultType = true; break; + case OpConvertPtrToU: *hasResult = true; *hasResultType = true; break; + case OpSatConvertSToU: *hasResult = true; *hasResultType = true; break; + case OpSatConvertUToS: *hasResult = true; *hasResultType = true; break; + case OpConvertUToPtr: *hasResult = true; *hasResultType = true; break; + case OpPtrCastToGeneric: *hasResult = true; *hasResultType = true; break; + case OpGenericCastToPtr: *hasResult = true; *hasResultType = true; break; + case OpGenericCastToPtrExplicit: *hasResult = true; *hasResultType = true; break; + case OpBitcast: *hasResult = true; *hasResultType = true; break; + case OpSNegate: *hasResult = true; *hasResultType = true; break; + case OpFNegate: *hasResult = true; *hasResultType = true; break; + case OpIAdd: *hasResult = true; *hasResultType = true; break; + case OpFAdd: *hasResult = true; *hasResultType = true; break; + case OpISub: *hasResult = true; *hasResultType = true; break; + case OpFSub: *hasResult = true; *hasResultType = true; break; + case OpIMul: *hasResult = true; *hasResultType = true; break; + case OpFMul: *hasResult = true; *hasResultType = true; break; + case OpUDiv: *hasResult = true; *hasResultType = true; break; + case OpSDiv: *hasResult = true; *hasResultType = true; break; + case OpFDiv: *hasResult = true; *hasResultType = true; break; + case OpUMod: *hasResult = true; *hasResultType = true; break; + case OpSRem: *hasResult = true; *hasResultType = true; break; + case OpSMod: *hasResult = true; *hasResultType = true; break; + case OpFRem: *hasResult = true; *hasResultType = true; break; + case OpFMod: *hasResult = true; *hasResultType = true; break; + case OpVectorTimesScalar: *hasResult = true; *hasResultType = true; break; + case OpMatrixTimesScalar: *hasResult = true; *hasResultType = true; break; + case OpVectorTimesMatrix: *hasResult = true; *hasResultType = true; break; + case OpMatrixTimesVector: *hasResult = true; *hasResultType = true; break; + case OpMatrixTimesMatrix: *hasResult = true; *hasResultType = true; break; + case OpOuterProduct: *hasResult = true; *hasResultType = true; break; + case OpDot: *hasResult = true; *hasResultType = true; break; + case OpIAddCarry: *hasResult = true; *hasResultType = true; break; + case OpISubBorrow: *hasResult = true; *hasResultType = true; break; + case OpUMulExtended: *hasResult = true; *hasResultType = true; break; + case OpSMulExtended: *hasResult = true; *hasResultType = true; break; + case OpAny: *hasResult = true; *hasResultType = true; break; + case OpAll: *hasResult = true; *hasResultType = true; break; + case OpIsNan: *hasResult = true; *hasResultType = true; break; + case OpIsInf: *hasResult = true; *hasResultType = true; break; + case OpIsFinite: *hasResult = true; *hasResultType = true; break; + case OpIsNormal: *hasResult = true; *hasResultType = true; break; + case OpSignBitSet: *hasResult = true; *hasResultType = true; break; + case OpLessOrGreater: *hasResult = true; *hasResultType = true; break; + case OpOrdered: *hasResult = true; *hasResultType = true; break; + case OpUnordered: *hasResult = true; *hasResultType = true; break; + case OpLogicalEqual: *hasResult = true; *hasResultType = true; break; + case OpLogicalNotEqual: *hasResult = true; *hasResultType = true; break; + case OpLogicalOr: *hasResult = true; *hasResultType = true; break; + case OpLogicalAnd: *hasResult = true; *hasResultType = true; break; + case OpLogicalNot: *hasResult = true; *hasResultType = true; break; + case OpSelect: *hasResult = true; *hasResultType = true; break; + case OpIEqual: *hasResult = true; *hasResultType = true; break; + case OpINotEqual: *hasResult = true; *hasResultType = true; break; + case OpUGreaterThan: *hasResult = true; *hasResultType = true; break; + case OpSGreaterThan: *hasResult = true; *hasResultType = true; break; + case OpUGreaterThanEqual: *hasResult = true; *hasResultType = true; break; + case OpSGreaterThanEqual: *hasResult = true; *hasResultType = true; break; + case OpULessThan: *hasResult = true; *hasResultType = true; break; + case OpSLessThan: *hasResult = true; *hasResultType = true; break; + case OpULessThanEqual: *hasResult = true; *hasResultType = true; break; + case OpSLessThanEqual: *hasResult = true; *hasResultType = true; break; + case OpFOrdEqual: *hasResult = true; *hasResultType = true; break; + case OpFUnordEqual: *hasResult = true; *hasResultType = true; break; + case OpFOrdNotEqual: *hasResult = true; *hasResultType = true; break; + case OpFUnordNotEqual: *hasResult = true; *hasResultType = true; break; + case OpFOrdLessThan: *hasResult = true; *hasResultType = true; break; + case OpFUnordLessThan: *hasResult = true; *hasResultType = true; break; + case OpFOrdGreaterThan: *hasResult = true; *hasResultType = true; break; + case OpFUnordGreaterThan: *hasResult = true; *hasResultType = true; break; + case OpFOrdLessThanEqual: *hasResult = true; *hasResultType = true; break; + case OpFUnordLessThanEqual: *hasResult = true; *hasResultType = true; break; + case OpFOrdGreaterThanEqual: *hasResult = true; *hasResultType = true; break; + case OpFUnordGreaterThanEqual: *hasResult = true; *hasResultType = true; break; + case OpShiftRightLogical: *hasResult = true; *hasResultType = true; break; + case OpShiftRightArithmetic: *hasResult = true; *hasResultType = true; break; + case OpShiftLeftLogical: *hasResult = true; *hasResultType = true; break; + case OpBitwiseOr: *hasResult = true; *hasResultType = true; break; + case OpBitwiseXor: *hasResult = true; *hasResultType = true; break; + case OpBitwiseAnd: *hasResult = true; *hasResultType = true; break; + case OpNot: *hasResult = true; *hasResultType = true; break; + case OpBitFieldInsert: *hasResult = true; *hasResultType = true; break; + case OpBitFieldSExtract: *hasResult = true; *hasResultType = true; break; + case OpBitFieldUExtract: *hasResult = true; *hasResultType = true; break; + case OpBitReverse: *hasResult = true; *hasResultType = true; break; + case OpBitCount: *hasResult = true; *hasResultType = true; break; + case OpDPdx: *hasResult = true; *hasResultType = true; break; + case OpDPdy: *hasResult = true; *hasResultType = true; break; + case OpFwidth: *hasResult = true; *hasResultType = true; break; + case OpDPdxFine: *hasResult = true; *hasResultType = true; break; + case OpDPdyFine: *hasResult = true; *hasResultType = true; break; + case OpFwidthFine: *hasResult = true; *hasResultType = true; break; + case OpDPdxCoarse: *hasResult = true; *hasResultType = true; break; + case OpDPdyCoarse: *hasResult = true; *hasResultType = true; break; + case OpFwidthCoarse: *hasResult = true; *hasResultType = true; break; + case OpEmitVertex: *hasResult = false; *hasResultType = false; break; + case OpEndPrimitive: *hasResult = false; *hasResultType = false; break; + case OpEmitStreamVertex: *hasResult = false; *hasResultType = false; break; + case OpEndStreamPrimitive: *hasResult = false; *hasResultType = false; break; + case OpControlBarrier: *hasResult = false; *hasResultType = false; break; + case OpMemoryBarrier: *hasResult = false; *hasResultType = false; break; + case OpAtomicLoad: *hasResult = true; *hasResultType = true; break; + case OpAtomicStore: *hasResult = false; *hasResultType = false; break; + case OpAtomicExchange: *hasResult = true; *hasResultType = true; break; + case OpAtomicCompareExchange: *hasResult = true; *hasResultType = true; break; + case OpAtomicCompareExchangeWeak: *hasResult = true; *hasResultType = true; break; + case OpAtomicIIncrement: *hasResult = true; *hasResultType = true; break; + case OpAtomicIDecrement: *hasResult = true; *hasResultType = true; break; + case OpAtomicIAdd: *hasResult = true; *hasResultType = true; break; + case OpAtomicISub: *hasResult = true; *hasResultType = true; break; + case OpAtomicSMin: *hasResult = true; *hasResultType = true; break; + case OpAtomicUMin: *hasResult = true; *hasResultType = true; break; + case OpAtomicSMax: *hasResult = true; *hasResultType = true; break; + case OpAtomicUMax: *hasResult = true; *hasResultType = true; break; + case OpAtomicAnd: *hasResult = true; *hasResultType = true; break; + case OpAtomicOr: *hasResult = true; *hasResultType = true; break; + case OpAtomicXor: *hasResult = true; *hasResultType = true; break; + case OpPhi: *hasResult = true; *hasResultType = true; break; + case OpLoopMerge: *hasResult = false; *hasResultType = false; break; + case OpSelectionMerge: *hasResult = false; *hasResultType = false; break; + case OpLabel: *hasResult = true; *hasResultType = false; break; + case OpBranch: *hasResult = false; *hasResultType = false; break; + case OpBranchConditional: *hasResult = false; *hasResultType = false; break; + case OpSwitch: *hasResult = false; *hasResultType = false; break; + case OpKill: *hasResult = false; *hasResultType = false; break; + case OpReturn: *hasResult = false; *hasResultType = false; break; + case OpReturnValue: *hasResult = false; *hasResultType = false; break; + case OpUnreachable: *hasResult = false; *hasResultType = false; break; + case OpLifetimeStart: *hasResult = false; *hasResultType = false; break; + case OpLifetimeStop: *hasResult = false; *hasResultType = false; break; + case OpGroupAsyncCopy: *hasResult = true; *hasResultType = true; break; + case OpGroupWaitEvents: *hasResult = false; *hasResultType = false; break; + case OpGroupAll: *hasResult = true; *hasResultType = true; break; + case OpGroupAny: *hasResult = true; *hasResultType = true; break; + case OpGroupBroadcast: *hasResult = true; *hasResultType = true; break; + case OpGroupIAdd: *hasResult = true; *hasResultType = true; break; + case OpGroupFAdd: *hasResult = true; *hasResultType = true; break; + case OpGroupFMin: *hasResult = true; *hasResultType = true; break; + case OpGroupUMin: *hasResult = true; *hasResultType = true; break; + case OpGroupSMin: *hasResult = true; *hasResultType = true; break; + case OpGroupFMax: *hasResult = true; *hasResultType = true; break; + case OpGroupUMax: *hasResult = true; *hasResultType = true; break; + case OpGroupSMax: *hasResult = true; *hasResultType = true; break; + case OpReadPipe: *hasResult = true; *hasResultType = true; break; + case OpWritePipe: *hasResult = true; *hasResultType = true; break; + case OpReservedReadPipe: *hasResult = true; *hasResultType = true; break; + case OpReservedWritePipe: *hasResult = true; *hasResultType = true; break; + case OpReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; + case OpReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; + case OpCommitReadPipe: *hasResult = false; *hasResultType = false; break; + case OpCommitWritePipe: *hasResult = false; *hasResultType = false; break; + case OpIsValidReserveId: *hasResult = true; *hasResultType = true; break; + case OpGetNumPipePackets: *hasResult = true; *hasResultType = true; break; + case OpGetMaxPipePackets: *hasResult = true; *hasResultType = true; break; + case OpGroupReserveReadPipePackets: *hasResult = true; *hasResultType = true; break; + case OpGroupReserveWritePipePackets: *hasResult = true; *hasResultType = true; break; + case OpGroupCommitReadPipe: *hasResult = false; *hasResultType = false; break; + case OpGroupCommitWritePipe: *hasResult = false; *hasResultType = false; break; + case OpEnqueueMarker: *hasResult = true; *hasResultType = true; break; + case OpEnqueueKernel: *hasResult = true; *hasResultType = true; break; + case OpGetKernelNDrangeSubGroupCount: *hasResult = true; *hasResultType = true; break; + case OpGetKernelNDrangeMaxSubGroupSize: *hasResult = true; *hasResultType = true; break; + case OpGetKernelWorkGroupSize: *hasResult = true; *hasResultType = true; break; + case OpGetKernelPreferredWorkGroupSizeMultiple: *hasResult = true; *hasResultType = true; break; + case OpRetainEvent: *hasResult = false; *hasResultType = false; break; + case OpReleaseEvent: *hasResult = false; *hasResultType = false; break; + case OpCreateUserEvent: *hasResult = true; *hasResultType = true; break; + case OpIsValidEvent: *hasResult = true; *hasResultType = true; break; + case OpSetUserEventStatus: *hasResult = false; *hasResultType = false; break; + case OpCaptureEventProfilingInfo: *hasResult = false; *hasResultType = false; break; + case OpGetDefaultQueue: *hasResult = true; *hasResultType = true; break; + case OpBuildNDRange: *hasResult = true; *hasResultType = true; break; + case OpImageSparseSampleImplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSparseSampleExplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSparseSampleDrefImplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSparseSampleDrefExplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSparseSampleProjImplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSparseSampleProjExplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSparseSampleProjDrefImplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSparseSampleProjDrefExplicitLod: *hasResult = true; *hasResultType = true; break; + case OpImageSparseFetch: *hasResult = true; *hasResultType = true; break; + case OpImageSparseGather: *hasResult = true; *hasResultType = true; break; + case OpImageSparseDrefGather: *hasResult = true; *hasResultType = true; break; + case OpImageSparseTexelsResident: *hasResult = true; *hasResultType = true; break; + case OpNoLine: *hasResult = false; *hasResultType = false; break; + case OpAtomicFlagTestAndSet: *hasResult = true; *hasResultType = true; break; + case OpAtomicFlagClear: *hasResult = false; *hasResultType = false; break; + case OpImageSparseRead: *hasResult = true; *hasResultType = true; break; + case OpSizeOf: *hasResult = true; *hasResultType = true; break; + case OpTypePipeStorage: *hasResult = true; *hasResultType = false; break; + case OpConstantPipeStorage: *hasResult = true; *hasResultType = true; break; + case OpCreatePipeFromPipeStorage: *hasResult = true; *hasResultType = true; break; + case OpGetKernelLocalSizeForSubgroupCount: *hasResult = true; *hasResultType = true; break; + case OpGetKernelMaxNumSubgroups: *hasResult = true; *hasResultType = true; break; + case OpTypeNamedBarrier: *hasResult = true; *hasResultType = false; break; + case OpNamedBarrierInitialize: *hasResult = true; *hasResultType = true; break; + case OpMemoryNamedBarrier: *hasResult = false; *hasResultType = false; break; + case OpModuleProcessed: *hasResult = false; *hasResultType = false; break; + case OpExecutionModeId: *hasResult = false; *hasResultType = false; break; + case OpDecorateId: *hasResult = false; *hasResultType = false; break; + case OpGroupNonUniformElect: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformAll: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformAny: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformAllEqual: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBroadcast: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBroadcastFirst: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBallot: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformInverseBallot: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBallotBitExtract: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBallotBitCount: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBallotFindLSB: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBallotFindMSB: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformShuffle: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformShuffleXor: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformShuffleUp: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformShuffleDown: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformIAdd: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformFAdd: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformIMul: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformFMul: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformSMin: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformUMin: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformFMin: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformSMax: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformUMax: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformFMax: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBitwiseAnd: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBitwiseOr: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformBitwiseXor: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformLogicalAnd: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformLogicalOr: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformLogicalXor: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformQuadBroadcast: *hasResult = true; *hasResultType = true; break; + case OpGroupNonUniformQuadSwap: *hasResult = true; *hasResultType = true; break; + case OpCopyLogical: *hasResult = true; *hasResultType = true; break; + case OpPtrEqual: *hasResult = true; *hasResultType = true; break; + case OpPtrNotEqual: *hasResult = true; *hasResultType = true; break; + case OpPtrDiff: *hasResult = true; *hasResultType = true; break; + case OpTerminateInvocation: *hasResult = false; *hasResultType = false; break; + case OpSubgroupBallotKHR: *hasResult = true; *hasResultType = true; break; + case OpSubgroupFirstInvocationKHR: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAllKHR: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAnyKHR: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAllEqualKHR: *hasResult = true; *hasResultType = true; break; + case OpSubgroupReadInvocationKHR: *hasResult = true; *hasResultType = true; break; + case OpTraceRayKHR: *hasResult = false; *hasResultType = false; break; + case OpExecuteCallableKHR: *hasResult = false; *hasResultType = false; break; + case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; + case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; + case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; + case OpSDot: *hasResult = true; *hasResultType = true; break; + case OpUDot: *hasResult = true; *hasResultType = true; break; + case OpSUDot: *hasResult = true; *hasResultType = true; break; + case OpSDotAccSat: *hasResult = true; *hasResultType = true; break; + case OpUDotAccSat: *hasResult = true; *hasResultType = true; break; + case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; + case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; + case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; + case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; + case OpRayQueryGenerateIntersectionKHR: *hasResult = false; *hasResultType = false; break; + case OpRayQueryConfirmIntersectionKHR: *hasResult = false; *hasResultType = false; break; + case OpRayQueryProceedKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionTypeKHR: *hasResult = true; *hasResultType = true; break; + case OpGroupIAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case OpGroupFAddNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case OpGroupFMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case OpGroupUMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case OpGroupSMinNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case OpGroupFMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; + case OpGroupUMaxNonUniformAMD: *hasResult = true; *hasResultType = true; break; + 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; + case OpReportIntersectionNV: *hasResult = true; *hasResultType = true; break; + case OpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break; + case OpTerminateRayNV: *hasResult = false; *hasResultType = false; break; + case OpTraceNV: *hasResult = false; *hasResultType = false; break; + case OpTraceMotionNV: *hasResult = false; *hasResultType = false; break; + case OpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break; + case OpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break; + case OpExecuteCallableNV: *hasResult = false; *hasResultType = false; break; + case OpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break; + case OpCooperativeMatrixLoadNV: *hasResult = true; *hasResultType = true; break; + 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 OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; + case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; + case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; + case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; + case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; + case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; + case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; + case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; + case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; + case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupShuffleXorINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupBlockReadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; + case OpSubgroupImageBlockReadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupImageBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; + case OpSubgroupImageMediaBlockReadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupImageMediaBlockWriteINTEL: *hasResult = false; *hasResultType = false; break; + case OpUCountLeadingZerosINTEL: *hasResult = true; *hasResultType = true; break; + case OpUCountTrailingZerosINTEL: *hasResult = true; *hasResultType = true; break; + case OpAbsISubINTEL: *hasResult = true; *hasResultType = true; break; + case OpAbsUSubINTEL: *hasResult = true; *hasResultType = true; break; + case OpIAddSatINTEL: *hasResult = true; *hasResultType = true; break; + case OpUAddSatINTEL: *hasResult = true; *hasResultType = true; break; + case OpIAverageINTEL: *hasResult = true; *hasResultType = true; break; + case OpUAverageINTEL: *hasResult = true; *hasResultType = true; break; + case OpIAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; + case OpUAverageRoundedINTEL: *hasResult = true; *hasResultType = true; break; + case OpISubSatINTEL: *hasResult = true; *hasResultType = true; break; + case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; + case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; + case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; + case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; + case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; + case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; + case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; + case OpAsmCallINTEL: *hasResult = true; *hasResultType = true; break; + case OpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break; + case OpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break; + case OpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break; + case OpExpectKHR: *hasResult = true; *hasResultType = true; break; + case OpDecorateString: *hasResult = false; *hasResultType = false; break; + case OpMemberDecorateString: *hasResult = false; *hasResultType = false; break; + case OpVmeImageINTEL: *hasResult = true; *hasResultType = true; break; + case OpTypeVmeImageINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcImePayloadINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcRefPayloadINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcSicPayloadINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcMcePayloadINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcMceResultINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcImeResultINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcImeResultSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcImeResultDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcImeSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcImeDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcRefResultINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeAvcSicResultINTEL: *hasResult = true; *hasResultType = false; break; + case OpSubgroupAvcMceGetDefaultInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceSetInterBaseMultiReferencePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceSetInterShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceSetInterDirectionPenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultInterMotionVectorCostTableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultHighPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultMediumPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultLowPenaltyCostTableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceSetMotionVectorCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultIntraLumaModePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultNonDcLumaIntraPenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetDefaultIntraChromaModeBasePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceSetAcOnlyHaarINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceSetSourceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceSetSingleReferenceInterlacedFieldPolarityINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceSetDualReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceConvertToImePayloadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceConvertToImeResultINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceConvertToRefPayloadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceConvertToRefResultINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceConvertToSicPayloadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceConvertToSicResultINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetBestInterDistortionsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetInterMajorShapeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetInterMinorShapeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetInterDirectionsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetInterMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetInterReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcMceGetInterReferenceInterlacedFieldPolaritiesINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeInitializeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeSetSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeSetDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeRefWindowSizeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeAdjustRefOffsetINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeSetMaxMotionVectorCountINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeSetUnidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeSetEarlySearchTerminationThresholdINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeSetWeightedSadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeEvaluateWithSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeEvaluateWithDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeEvaluateWithSingleReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeEvaluateWithDualReferenceStreaminoutINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetSingleReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetDualReferenceStreaminINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeStripSingleReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeStripDualReferenceStreamoutINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetStreamoutSingleReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeMotionVectorsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeDistortionsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetStreamoutDualReferenceMajorShapeReferenceIdsINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetBorderReachedINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetTruncatedSearchIndicationINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetUnidirectionalEarlySearchTerminationINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetWeightingPatternMinimumMotionVectorINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcImeGetWeightingPatternMinimumDistortionINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcFmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcBmeInitializeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcRefConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcRefSetBidirectionalMixDisableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcRefSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcRefEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcRefEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcRefEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcRefEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcRefConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicInitializeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicConfigureSkcINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicConfigureIpeLumaINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicConfigureIpeLumaChromaINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetMotionVectorMaskINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicConvertToMcePayloadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicSetIntraLumaShapePenaltyINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicSetIntraLumaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicSetIntraChromaModeCostFunctionINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicSetBilinearFilterEnableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicSetSkcForwardTransformEnableINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicSetBlockBasedRawSkipSadINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicEvaluateIpeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicEvaluateWithSingleReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicEvaluateWithDualReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicEvaluateWithMultiReferenceINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicEvaluateWithMultiReferenceInterlacedINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicConvertToMceResultINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetIpeLumaShapeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetBestIpeLumaDistortionINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetBestIpeChromaDistortionINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetPackedIpeLumaModesINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetIpeChromaModeINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break; + case OpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break; + case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; + case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; + case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; + case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; + case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; + case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; + case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; + case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; + case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; + case OpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; + case OpFPGARegINTEL: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetRayTMinKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetRayFlagsKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionTKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionInstanceCustomIndexKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionInstanceIdKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionInstanceShaderBindingTableRecordOffsetKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionGeometryIndexKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionPrimitiveIndexKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionBarycentricsKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionFrontFaceKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionCandidateAABBOpaqueKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionObjectRayDirectionKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionObjectRayOriginKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetWorldRayDirectionKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetWorldRayOriginKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break; + case OpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break; + case OpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break; + case OpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break; + case OpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break; + case OpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; + case OpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break; + } +} +#endif /* SPV_ENABLE_UTILITY_CODE */ + +// Overload operator| for mask bit combining + +inline ImageOperandsMask operator|(ImageOperandsMask a, ImageOperandsMask b) { return ImageOperandsMask(unsigned(a) | unsigned(b)); } +inline FPFastMathModeMask operator|(FPFastMathModeMask a, FPFastMathModeMask b) { return FPFastMathModeMask(unsigned(a) | unsigned(b)); } +inline SelectionControlMask operator|(SelectionControlMask a, SelectionControlMask b) { return SelectionControlMask(unsigned(a) | unsigned(b)); } +inline LoopControlMask operator|(LoopControlMask a, LoopControlMask b) { return LoopControlMask(unsigned(a) | unsigned(b)); } +inline FunctionControlMask operator|(FunctionControlMask a, FunctionControlMask b) { return FunctionControlMask(unsigned(a) | unsigned(b)); } +inline MemorySemanticsMask operator|(MemorySemanticsMask a, MemorySemanticsMask b) { return MemorySemanticsMask(unsigned(a) | unsigned(b)); } +inline MemoryAccessMask operator|(MemoryAccessMask a, MemoryAccessMask b) { return MemoryAccessMask(unsigned(a) | unsigned(b)); } +inline KernelProfilingInfoMask operator|(KernelProfilingInfoMask a, KernelProfilingInfoMask b) { return KernelProfilingInfoMask(unsigned(a) | unsigned(b)); } +inline RayFlagsMask operator|(RayFlagsMask a, RayFlagsMask b) { return RayFlagsMask(unsigned(a) | unsigned(b)); } +inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShadingRateMask b) { return FragmentShadingRateMask(unsigned(a) | unsigned(b)); } + +} // end namespace spv + +#endif // #ifndef spirv_HPP + From 7a49192d23840c7ee96b28f59a79b32e308d69ec Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 2 Sep 2021 17:37:39 -0600 Subject: [PATCH 275/365] Add support for spirv1.6 Add command line support which enables the following behavior: - Remap discard Map discard to DemoteToHelperInvocation for HLSL shaders. Map to OpTerminateInvocation for GLSL shaders. - Decorate HelperInvocation with Volatile - Use localSizeId for execution mode WorkGroupSize is deprecated in spirv1.6 Also update known goods to SPIRV 1.6 --- SPIRV/GlslangToSpv.cpp | 60 ++++- SPIRV/SpvTools.cpp | 20 ++ SPIRV/spirv.hpp | 209 +----------------- StandAlone/StandAlone.cpp | 13 +- .../baseResults/hlsl.spv.1.6.discard.frag.out | 193 ++++++++++++++++ .../spv.1.6.conditionalDiscard.frag.out | 59 +++++ .../spv.1.6.helperInvocation.frag.out | 41 ++++ .../baseResults/spv.1.6.specConstant.comp.out | 69 ++++++ Test/hlsl.spv.1.6.discard.frag | 14 ++ Test/spv.1.6.conditionalDiscard.frag | 14 ++ Test/spv.1.6.helperInvocation.frag | 10 + Test/spv.1.6.specConstant.comp | 18 ++ glslang/CInterface/glslang_c_interface.cpp | 2 + glslang/Include/glslang_c_shader_types.h | 3 +- .../MachineIndependent/localintermediate.h | 3 + glslang/Public/ShaderLang.h | 4 +- gtests/Hlsl.FromFile.cpp | 18 ++ gtests/Spv.FromFile.cpp | 20 ++ known_good.json | 4 +- 19 files changed, 556 insertions(+), 218 deletions(-) create mode 100644 Test/baseResults/hlsl.spv.1.6.discard.frag.out create mode 100644 Test/baseResults/spv.1.6.conditionalDiscard.frag.out create mode 100644 Test/baseResults/spv.1.6.helperInvocation.frag.out create mode 100644 Test/baseResults/spv.1.6.specConstant.comp.out create mode 100644 Test/hlsl.spv.1.6.discard.frag create mode 100644 Test/spv.1.6.conditionalDiscard.frag create mode 100644 Test/spv.1.6.helperInvocation.frag create mode 100644 Test/spv.1.6.specConstant.comp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 2a83b92538..39941d3752 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1664,9 +1664,22 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, case EShLangCompute: builder.addCapability(spv::CapabilityShader); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), - glslangIntermediate->getLocalSize(1), - glslangIntermediate->getLocalSize(2)); + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { + std::vector dimConstId; + for (int dim = 0; dim < 3; ++dim) { + bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); + dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); + if (specConst) { + builder.addDecoration(dimConstId.back(), spv::DecorationSpecId, + glslangIntermediate->getLocalSizeSpecId(dim)); + } + } + builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId); + } else { + builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), + glslangIntermediate->getLocalSize(1), + glslangIntermediate->getLocalSize(2)); + } if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) { builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV); builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV); @@ -1770,9 +1783,22 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, case EShLangMeshNV: builder.addCapability(spv::CapabilityMeshShadingNV); builder.addExtension(spv::E_SPV_NV_mesh_shader); - builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), - glslangIntermediate->getLocalSize(1), - glslangIntermediate->getLocalSize(2)); + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { + std::vector dimConstId; + for (int dim = 0; dim < 3; ++dim) { + bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet); + dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst)); + if (specConst) { + builder.addDecoration(dimConstId.back(), spv::DecorationSpecId, + glslangIntermediate->getLocalSizeSpecId(dim)); + } + } + builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId); + } else { + builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0), + glslangIntermediate->getLocalSize(1), + glslangIntermediate->getLocalSize(2)); + } if (glslangIntermediate->getStage() == EShLangMeshNV) { builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices, glslangIntermediate->getVertices()); @@ -3779,7 +3805,16 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T switch (node->getFlowOp()) { case glslang::EOpKill: - builder.makeStatementTerminator(spv::OpKill, "post-discard"); + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { + if (glslangIntermediate->getSource() == glslang::EShSourceHlsl) { + builder.addCapability(spv::CapabilityDemoteToHelperInvocation); + builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT); + } else { + builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation"); + } + } else { + builder.makeStatementTerminator(spv::OpKill, "post-discard"); + } break; case glslang::EOpTerminateInvocation: builder.addExtension(spv::E_SPV_KHR_terminate_invocation); @@ -8761,7 +8796,16 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol // add built-in variable decoration if (builtIn != spv::BuiltInMax) { - builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn); + // WorkgroupSize deprecated in spirv1.6 + if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_6 || + builtIn != spv::BuiltInWorkgroupSize) + builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn); + } + + // Add volatile decoration to HelperInvocation for spirv1.6 and beyond + if (builtIn == spv::BuiltInHelperInvocation && + glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) { + builder.addDecoration(id, spv::DecorationVolatile); } #ifndef GLSLANG_WEB diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index 8acf9b139a..f78a791775 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -68,6 +68,26 @@ spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLog } case glslang::EShTargetVulkan_1_2: return spv_target_env::SPV_ENV_VULKAN_1_2; + case glslang::EShTargetUniversal: + switch (spvVersion.spv) { + case EShTargetSpv_1_0: + return spv_target_env::SPV_ENV_UNIVERSAL_1_0; + case EShTargetSpv_1_1: + return spv_target_env::SPV_ENV_UNIVERSAL_1_1; + case EShTargetSpv_1_2: + return spv_target_env::SPV_ENV_UNIVERSAL_1_2; + case EShTargetSpv_1_3: + return spv_target_env::SPV_ENV_UNIVERSAL_1_3; + case EShTargetSpv_1_4: + return spv_target_env::SPV_ENV_UNIVERSAL_1_4; + case EShTargetSpv_1_5: + return spv_target_env::SPV_ENV_UNIVERSAL_1_5; + case EShTargetSpv_1_6: + return spv_target_env::SPV_ENV_UNIVERSAL_1_6; + default: + logger->missingFunctionality("Target version for SPIRV-Tools validator"); + return spv_target_env::SPV_ENV_UNIVERSAL_1_6; + } default: break; } diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index a8642006a2..c1abd2640e 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -49,12 +49,12 @@ namespace spv { typedef unsigned int Id; -#define SPV_VERSION 0x10600 -#define SPV_REVISION 1 +#define SPV_VERSION 0x10500 +#define SPV_REVISION 4 static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010600; -static const unsigned int Revision = 1; +static const unsigned int Version = 0x00010500; +static const unsigned int Revision = 4; static const unsigned int OpCodeMask = 0xffff; static const unsigned int WordCountShift = 16; @@ -65,7 +65,6 @@ enum SourceLanguage { SourceLanguageOpenCL_C = 3, SourceLanguageOpenCL_CPP = 4, SourceLanguageHLSL = 5, - SourceLanguageCPP_for_OpenCL = 6, SourceLanguageMax = 0x7fffffff, }; @@ -353,8 +352,6 @@ enum ImageOperandsShift { ImageOperandsVolatileTexelKHRShift = 11, ImageOperandsSignExtendShift = 12, ImageOperandsZeroExtendShift = 13, - ImageOperandsNontemporalShift = 14, - ImageOperandsOffsetsShift = 16, ImageOperandsMax = 0x7fffffff, }; @@ -378,8 +375,6 @@ enum ImageOperandsMask { ImageOperandsVolatileTexelKHRMask = 0x00000800, ImageOperandsSignExtendMask = 0x00001000, ImageOperandsZeroExtendMask = 0x00002000, - ImageOperandsNontemporalMask = 0x00004000, - ImageOperandsOffsetsMask = 0x00010000, }; enum FPFastMathModeShift { @@ -496,7 +491,6 @@ enum Decoration { DecorationPerPrimitiveNV = 5271, DecorationPerViewNV = 5272, DecorationPerTaskNV = 5273, - DecorationPerVertexKHR = 5285, DecorationPerVertexNV = 5285, DecorationNonUniform = 5300, DecorationNonUniformEXT = 5300, @@ -504,10 +498,6 @@ enum Decoration { DecorationRestrictPointerEXT = 5355, DecorationAliasedPointer = 5356, DecorationAliasedPointerEXT = 5356, - DecorationBindlessSamplerNV = 5398, - DecorationBindlessImageNV = 5399, - DecorationBoundSamplerNV = 5400, - DecorationBoundImageNV = 5401, DecorationSIMTCallINTEL = 5599, DecorationReferencedIndirectlyINTEL = 5602, DecorationClobberINTEL = 5607, @@ -547,7 +537,6 @@ enum Decoration { DecorationFunctionFloatingPointModeINTEL = 6080, DecorationSingleElementVectorINTEL = 6085, DecorationVectorComputeCallableFunctionINTEL = 6087, - DecorationMediaBlockIOINTEL = 6140, DecorationMax = 0x7fffffff, }; @@ -632,9 +621,7 @@ enum BuiltIn { BuiltInLayerPerViewNV = 5279, BuiltInMeshViewCountNV = 5280, BuiltInMeshViewIndicesNV = 5281, - BuiltInBaryCoordKHR = 5286, BuiltInBaryCoordNV = 5286, - BuiltInBaryCoordNoPerspKHR = 5287, BuiltInBaryCoordNoPerspNV = 5287, BuiltInFragSizeEXT = 5292, BuiltInFragmentSizeNV = 5292, @@ -735,7 +722,6 @@ enum FunctionControlShift { FunctionControlDontInlineShift = 1, FunctionControlPureShift = 2, FunctionControlConstShift = 3, - FunctionControlOptNoneINTELShift = 16, FunctionControlMax = 0x7fffffff, }; @@ -745,7 +731,6 @@ enum FunctionControlMask { FunctionControlDontInlineMask = 0x00000002, FunctionControlPureMask = 0x00000004, FunctionControlConstMask = 0x00000008, - FunctionControlOptNoneINTELMask = 0x00010000, }; enum MemorySemanticsShift { @@ -926,7 +911,6 @@ enum Capability { CapabilityGroupNonUniformQuad = 68, CapabilityShaderLayer = 69, CapabilityShaderViewportIndex = 70, - CapabilityUniformDecoration = 71, CapabilityFragmentShadingRateKHR = 4422, CapabilitySubgroupBallotKHR = 4423, CapabilityDrawParameters = 4427, @@ -975,7 +959,6 @@ enum Capability { CapabilityFragmentFullyCoveredEXT = 5265, CapabilityMeshShadingNV = 5266, CapabilityImageFootprintNV = 5282, - CapabilityFragmentBarycentricKHR = 5284, CapabilityFragmentBarycentricNV = 5284, CapabilityComputeDerivativeGroupQuadsNV = 5288, CapabilityFragmentDensityEXT = 5291, @@ -1022,7 +1005,6 @@ enum Capability { CapabilityFragmentShaderPixelInterlockEXT = 5378, CapabilityDemoteToHelperInvocation = 5379, CapabilityDemoteToHelperInvocationEXT = 5379, - CapabilityBindlessTextureNV = 5390, CapabilitySubgroupShuffleINTEL = 5568, CapabilitySubgroupBufferBlockIOINTEL = 5569, CapabilitySubgroupImageBlockIOINTEL = 5570, @@ -1047,7 +1029,6 @@ enum Capability { CapabilityFPGAMemoryAttributesINTEL = 5824, CapabilityFPFastMathModeINTEL = 5837, CapabilityArbitraryPrecisionIntegersINTEL = 5844, - CapabilityArbitraryPrecisionFloatingPointINTEL = 5845, CapabilityUnstructuredLoopControlsINTEL = 5886, CapabilityFPGALoopControlsINTEL = 5888, CapabilityKernelAttributesINTEL = 5892, @@ -1056,26 +1037,14 @@ enum Capability { CapabilityFPGAClusterAttributesINTEL = 5904, CapabilityLoopFuseINTEL = 5906, CapabilityFPGABufferLocationINTEL = 5920, - CapabilityArbitraryPrecisionFixedPointINTEL = 5922, CapabilityUSMStorageClassesINTEL = 5935, CapabilityIOPipesINTEL = 5943, CapabilityBlockingPipesINTEL = 5945, CapabilityFPGARegINTEL = 5948, - CapabilityDotProductInputAll = 6016, - CapabilityDotProductInputAllKHR = 6016, - CapabilityDotProductInput4x8Bit = 6017, - CapabilityDotProductInput4x8BitKHR = 6017, - CapabilityDotProductInput4x8BitPacked = 6018, - CapabilityDotProductInput4x8BitPackedKHR = 6018, - CapabilityDotProduct = 6019, - CapabilityDotProductKHR = 6019, - CapabilityBitInstructions = 6025, CapabilityAtomicFloat32AddEXT = 6033, CapabilityAtomicFloat64AddEXT = 6034, CapabilityLongConstantCompositeINTEL = 6089, - CapabilityOptNoneINTEL = 6094, CapabilityAtomicFloat16AddEXT = 6095, - CapabilityDebugInfoModuleINTEL = 6114, CapabilityMax = 0x7fffffff, }; @@ -1154,32 +1123,6 @@ enum FPOperationMode { FPOperationModeMax = 0x7fffffff, }; -enum QuantizationModes { - QuantizationModesTRN = 0, - QuantizationModesTRN_ZERO = 1, - QuantizationModesRND = 2, - QuantizationModesRND_ZERO = 3, - QuantizationModesRND_INF = 4, - QuantizationModesRND_MIN_INF = 5, - QuantizationModesRND_CONV = 6, - QuantizationModesRND_CONV_ODD = 7, - QuantizationModesMax = 0x7fffffff, -}; - -enum OverflowModes { - OverflowModesWRAP = 0, - OverflowModesSAT = 1, - OverflowModesSAT_ZERO = 2, - OverflowModesSAT_SYM = 3, - OverflowModesMax = 0x7fffffff, -}; - -enum PackedVectorFormat { - PackedVectorFormatPackedVectorFormat4x8Bit = 0, - PackedVectorFormatPackedVectorFormat4x8BitKHR = 0, - PackedVectorFormatMax = 0x7fffffff, -}; - enum Op { OpNop = 0, OpUndef = 1, @@ -1537,18 +1480,6 @@ enum Op { OpConvertUToAccelerationStructureKHR = 4447, OpIgnoreIntersectionKHR = 4448, OpTerminateRayKHR = 4449, - OpSDot = 4450, - OpSDotKHR = 4450, - OpUDot = 4451, - OpUDotKHR = 4451, - OpSUDot = 4452, - OpSUDotKHR = 4452, - OpSDotAccSat = 4453, - OpSDotAccSatKHR = 4453, - OpUDotAccSat = 4454, - OpUDotAccSatKHR = 4454, - OpSUDotAccSat = 4455, - OpSUDotAccSatKHR = 4455, OpTypeRayQueryKHR = 4472, OpRayQueryInitializeKHR = 4473, OpRayQueryTerminateKHR = 4474, @@ -1587,16 +1518,8 @@ enum Op { OpCooperativeMatrixLengthNV = 5362, OpBeginInvocationInterlockEXT = 5364, OpEndInvocationInterlockEXT = 5365, - OpDemoteToHelperInvocation = 5380, OpDemoteToHelperInvocationEXT = 5380, OpIsHelperInvocationEXT = 5381, - OpConvertUToImageNV = 5391, - OpConvertUToSamplerNV = 5392, - OpConvertImageToUNV = 5393, - OpConvertSamplerToUNV = 5394, - OpConvertUToSampledImageNV = 5395, - OpConvertSampledImageToUNV = 5396, - OpSamplerImageAddressingModeNV = 5397, OpSubgroupShuffleINTEL = 5571, OpSubgroupShuffleDownINTEL = 5572, OpSubgroupShuffleUpINTEL = 5573, @@ -1621,7 +1544,7 @@ enum Op { OpUSubSatINTEL = 5596, OpIMul32x16INTEL = 5597, OpUMul32x16INTEL = 5598, - OpConstantFunctionPointerINTEL = 5600, + OpConstFunctionPointerINTEL = 5600, OpFunctionPointerCallINTEL = 5601, OpAsmTargetINTEL = 5609, OpAsmINTEL = 5610, @@ -1755,59 +1678,7 @@ enum Op { OpVariableLengthArrayINTEL = 5818, OpSaveMemoryINTEL = 5819, OpRestoreMemoryINTEL = 5820, - OpArbitraryFloatSinCosPiINTEL = 5840, - OpArbitraryFloatCastINTEL = 5841, - OpArbitraryFloatCastFromIntINTEL = 5842, - OpArbitraryFloatCastToIntINTEL = 5843, - OpArbitraryFloatAddINTEL = 5846, - OpArbitraryFloatSubINTEL = 5847, - OpArbitraryFloatMulINTEL = 5848, - OpArbitraryFloatDivINTEL = 5849, - OpArbitraryFloatGTINTEL = 5850, - OpArbitraryFloatGEINTEL = 5851, - OpArbitraryFloatLTINTEL = 5852, - OpArbitraryFloatLEINTEL = 5853, - OpArbitraryFloatEQINTEL = 5854, - OpArbitraryFloatRecipINTEL = 5855, - OpArbitraryFloatRSqrtINTEL = 5856, - OpArbitraryFloatCbrtINTEL = 5857, - OpArbitraryFloatHypotINTEL = 5858, - OpArbitraryFloatSqrtINTEL = 5859, - OpArbitraryFloatLogINTEL = 5860, - OpArbitraryFloatLog2INTEL = 5861, - OpArbitraryFloatLog10INTEL = 5862, - OpArbitraryFloatLog1pINTEL = 5863, - OpArbitraryFloatExpINTEL = 5864, - OpArbitraryFloatExp2INTEL = 5865, - OpArbitraryFloatExp10INTEL = 5866, - OpArbitraryFloatExpm1INTEL = 5867, - OpArbitraryFloatSinINTEL = 5868, - OpArbitraryFloatCosINTEL = 5869, - OpArbitraryFloatSinCosINTEL = 5870, - OpArbitraryFloatSinPiINTEL = 5871, - OpArbitraryFloatCosPiINTEL = 5872, - OpArbitraryFloatASinINTEL = 5873, - OpArbitraryFloatASinPiINTEL = 5874, - OpArbitraryFloatACosINTEL = 5875, - OpArbitraryFloatACosPiINTEL = 5876, - OpArbitraryFloatATanINTEL = 5877, - OpArbitraryFloatATanPiINTEL = 5878, - OpArbitraryFloatATan2INTEL = 5879, - OpArbitraryFloatPowINTEL = 5880, - OpArbitraryFloatPowRINTEL = 5881, - OpArbitraryFloatPowNINTEL = 5882, OpLoopControlINTEL = 5887, - OpFixedSqrtINTEL = 5923, - OpFixedRecipINTEL = 5924, - OpFixedRsqrtINTEL = 5925, - OpFixedSinINTEL = 5926, - OpFixedCosINTEL = 5927, - OpFixedSinCosINTEL = 5928, - OpFixedSinPiINTEL = 5929, - OpFixedCosPiINTEL = 5930, - OpFixedSinCosPiINTEL = 5931, - OpFixedLogINTEL = 5932, - OpFixedExpINTEL = 5933, OpPtrCastToCrossWorkgroupINTEL = 5934, OpCrossWorkgroupCastToPtrINTEL = 5938, OpReadPipeBlockingINTEL = 5946, @@ -2199,12 +2070,6 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; - case OpSDot: *hasResult = true; *hasResultType = true; break; - case OpUDot: *hasResult = true; *hasResultType = true; break; - case OpSUDot: *hasResult = true; *hasResultType = true; break; - case OpSDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpUDotAccSat: *hasResult = true; *hasResultType = true; break; - case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; @@ -2241,15 +2106,8 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break; case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break; - case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; + case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break; case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; - case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; - case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; - case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; - case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; - case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; @@ -2274,7 +2132,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; + case OpConstFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; @@ -2406,59 +2264,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; - case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; - case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; - case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; - case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; @@ -2506,4 +2312,3 @@ inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShad } // end namespace spv #endif // #ifndef spirv_HPP - diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 4deaf4d9e4..f5ce6317f1 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -788,9 +788,13 @@ void ProcessArguments(std::vector>& workItem } else if (strcmp(argv[1], "spirv1.5") == 0) { TargetLanguage = glslang::EShTargetSpv; TargetVersion = glslang::EShTargetSpv_1_5; + } else if (strcmp(argv[1], "spirv1.6") == 0) { + TargetLanguage = glslang::EShTargetSpv; + TargetVersion = glslang::EShTargetSpv_1_6; } else - Error("--target-env expected one of: vulkan1.0, vulkan1.1, vulkan1.2, opengl,\n" - "spirv1.0, spirv1.1, spirv1.2, spirv1.3, spirv1.4, or spirv1.5"); + Error("--target-env expected one of: vulkan1.0, vulkan1.1, vulkan1.2,\n" + "opengl, spirv1.0, spirv1.1, spirv1.2, spirv1.3,\n" + "spirv1.4, spirv1.5 or spirv1.6"); } bumpArg(); } else if (lowerword == "undef-macro" || @@ -1930,8 +1934,9 @@ void usage() " --sep synonym for --source-entrypoint\n" " --stdin read from stdin instead of from a file;\n" " requires providing the shader stage using -S\n" - " --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | opengl | \n" - " spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 | spirv1.5}\n" + " --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | opengl |\n" + " spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 |\n" + " spirv1.5 | spirv1.6}\n" " Set the execution environment that the\n" " generated code will be executed in.\n" " Defaults to:\n" diff --git a/Test/baseResults/hlsl.spv.1.6.discard.frag.out b/Test/baseResults/hlsl.spv.1.6.discard.frag.out new file mode 100644 index 0000000000..b5cfe1704c --- /dev/null +++ b/Test/baseResults/hlsl.spv.1.6.discard.frag.out @@ -0,0 +1,193 @@ +hlsl.spv.1.6.discard.frag +Shader version: 500 +0:? Sequence +0:2 Function Definition: foo(f1; ( temp void) +0:2 Function Parameters: +0:2 'f' ( in float) +0:? Sequence +0:3 Test condition and select ( temp void) +0:3 Condition +0:3 Compare Less Than ( temp bool) +0:3 'f' ( in float) +0:3 Constant: +0:3 1.000000 +0:3 true case +0:4 Branch: Kill +0:8 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:8 Function Parameters: +0:8 'input' ( in 4-component vector of float) +0:? Sequence +0:9 Function Call: foo(f1; ( temp void) +0:9 direct index ( temp float) +0:9 'input' ( in 4-component vector of float) +0:9 Constant: +0:9 2 (const int) +0:10 Test condition and select ( temp void) +0:10 Condition +0:10 Convert float to bool ( temp bool) +0:10 direct index ( temp float) +0:10 'input' ( in 4-component vector of float) +0:10 Constant: +0:10 0 (const int) +0:10 true case +0:11 Branch: Kill +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'f' ( temp float) +0:12 direct index ( temp float) +0:12 'input' ( in 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:13 Branch: Kill +0:8 Function Definition: PixelShaderFunction( ( temp void) +0:8 Function Parameters: +0:? Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'input' ( temp 4-component vector of float) +0:? 'input' (layout( location=0) in 4-component vector of float) +0:8 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 500 +0:? Sequence +0:2 Function Definition: foo(f1; ( temp void) +0:2 Function Parameters: +0:2 'f' ( in float) +0:? Sequence +0:3 Test condition and select ( temp void) +0:3 Condition +0:3 Compare Less Than ( temp bool) +0:3 'f' ( in float) +0:3 Constant: +0:3 1.000000 +0:3 true case +0:4 Branch: Kill +0:8 Function Definition: @PixelShaderFunction(vf4; ( temp void) +0:8 Function Parameters: +0:8 'input' ( in 4-component vector of float) +0:? Sequence +0:9 Function Call: foo(f1; ( temp void) +0:9 direct index ( temp float) +0:9 'input' ( in 4-component vector of float) +0:9 Constant: +0:9 2 (const int) +0:10 Test condition and select ( temp void) +0:10 Condition +0:10 Convert float to bool ( temp bool) +0:10 direct index ( temp float) +0:10 'input' ( in 4-component vector of float) +0:10 Constant: +0:10 0 (const int) +0:10 true case +0:11 Branch: Kill +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'f' ( temp float) +0:12 direct index ( temp float) +0:12 'input' ( in 4-component vector of float) +0:12 Constant: +0:12 0 (const int) +0:13 Branch: Kill +0:8 Function Definition: PixelShaderFunction( ( temp void) +0:8 Function Parameters: +0:? Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:? 'input' ( temp 4-component vector of float) +0:? 'input' (layout( location=0) in 4-component vector of float) +0:8 Function Call: @PixelShaderFunction(vf4; ( temp void) +0:? 'input' ( temp 4-component vector of float) +0:? Linker Objects +0:? 'input' (layout( location=0) in 4-component vector of float) + +// Module Version 10600 +// Generated by (magic number): 8000a +// Id's are bound by 47 + + Capability Shader + Capability DemoteToHelperInvocationEXT + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "PixelShaderFunction" 42 + ExecutionMode 4 OriginLowerLeft + Source HLSL 500 + Name 4 "PixelShaderFunction" + Name 10 "foo(f1;" + Name 9 "f" + Name 16 "@PixelShaderFunction(vf4;" + Name 15 "input" + Name 24 "param" + Name 37 "f" + Name 40 "input" + Name 42 "input" + Name 44 "param" + Decorate 42(input) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Function 6(float) + 8: TypeFunction 2 7(ptr) + 12: TypeVector 6(float) 4 + 13: TypePointer Function 12(fvec4) + 14: TypeFunction 2 13(ptr) + 19: 6(float) Constant 1065353216 + 20: TypeBool + 25: TypeInt 32 0 + 26: 25(int) Constant 2 + 30: 25(int) Constant 0 + 33: 6(float) Constant 0 + 41: TypePointer Input 12(fvec4) + 42(input): 41(ptr) Variable Input +4(PixelShaderFunction): 2 Function None 3 + 5: Label + 40(input): 13(ptr) Variable Function + 44(param): 13(ptr) Variable Function + 43: 12(fvec4) Load 42(input) + Store 40(input) 43 + 45: 12(fvec4) Load 40(input) + Store 44(param) 45 + 46: 2 FunctionCall 16(@PixelShaderFunction(vf4;) 44(param) + Return + FunctionEnd + 10(foo(f1;): 2 Function None 8 + 9(f): 7(ptr) FunctionParameter + 11: Label + 18: 6(float) Load 9(f) + 21: 20(bool) FOrdLessThan 18 19 + SelectionMerge 23 None + BranchConditional 21 22 23 + 22: Label + DemoteToHelperInvocationEXT + Branch 23 + 23: Label + Return + FunctionEnd +16(@PixelShaderFunction(vf4;): 2 Function None 14 + 15(input): 13(ptr) FunctionParameter + 17: Label + 24(param): 7(ptr) Variable Function + 37(f): 7(ptr) Variable Function + 27: 7(ptr) AccessChain 15(input) 26 + 28: 6(float) Load 27 + Store 24(param) 28 + 29: 2 FunctionCall 10(foo(f1;) 24(param) + 31: 7(ptr) AccessChain 15(input) 30 + 32: 6(float) Load 31 + 34: 20(bool) FUnordNotEqual 32 33 + SelectionMerge 36 None + BranchConditional 34 35 36 + 35: Label + DemoteToHelperInvocationEXT + Branch 36 + 36: Label + 38: 7(ptr) AccessChain 15(input) 30 + 39: 6(float) Load 38 + Store 37(f) 39 + DemoteToHelperInvocationEXT + Return + FunctionEnd diff --git a/Test/baseResults/spv.1.6.conditionalDiscard.frag.out b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out new file mode 100644 index 0000000000..d671476ceb --- /dev/null +++ b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out @@ -0,0 +1,59 @@ +spv.1.6.conditionalDiscard.frag +// Module Version 10600 +// Generated by (magic number): 8000a +// Id's are bound by 36 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 13 17 34 + ExecutionMode 4 OriginLowerLeft + Source GLSL 400 + Name 4 "main" + Name 9 "v" + Name 13 "tex" + Name 17 "coord" + Name 34 "gl_FragColor" + Decorate 13(tex) DescriptorSet 0 + Decorate 13(tex) Binding 0 + Decorate 17(coord) 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 + 33: TypePointer Output 7(fvec4) +34(gl_FragColor): 33(ptr) Variable Output + 4(main): 2 Function None 3 + 5: Label + 9(v): 8(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 + TerminateInvocation + 31: Label + 35: 7(fvec4) Load 9(v) + Store 34(gl_FragColor) 35 + Return + FunctionEnd diff --git a/Test/baseResults/spv.1.6.helperInvocation.frag.out b/Test/baseResults/spv.1.6.helperInvocation.frag.out new file mode 100644 index 0000000000..9ba8a5c176 --- /dev/null +++ b/Test/baseResults/spv.1.6.helperInvocation.frag.out @@ -0,0 +1,41 @@ +spv.1.6.helperInvocation.frag +// Module Version 10600 +// Generated by (magic number): 8000a +// Id's are bound by 20 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 15 + ExecutionMode 4 OriginLowerLeft + Source ESSL 310 + Name 4 "main" + Name 8 "gl_HelperInvocation" + Name 15 "outp" + Decorate 8(gl_HelperInvocation) BuiltIn HelperInvocation + Decorate 8(gl_HelperInvocation) Volatile + Decorate 15(outp) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeBool + 7: TypePointer Input 6(bool) +8(gl_HelperInvocation): 7(ptr) Variable Input + 12: TypeFloat 32 + 13: TypeVector 12(float) 4 + 14: TypePointer Output 13(fvec4) + 15(outp): 14(ptr) Variable Output + 17: 12(float) Constant 1065353216 + 4(main): 2 Function None 3 + 5: Label + 9: 6(bool) Load 8(gl_HelperInvocation) + SelectionMerge 11 None + BranchConditional 9 10 11 + 10: Label + 16: 13(fvec4) Load 15(outp) + 18: 13(fvec4) CompositeConstruct 17 17 17 17 + 19: 13(fvec4) FAdd 16 18 + Store 15(outp) 19 + Branch 11 + 11: Label + Return + FunctionEnd diff --git a/Test/baseResults/spv.1.6.specConstant.comp.out b/Test/baseResults/spv.1.6.specConstant.comp.out new file mode 100644 index 0000000000..7485f04af8 --- /dev/null +++ b/Test/baseResults/spv.1.6.specConstant.comp.out @@ -0,0 +1,69 @@ +spv.1.6.specConstant.comp +// Module Version 10600 +// Generated by (magic number): 8000a +// Id's are bound by 39 + + Capability Shader + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" 18 + ExecutionModeId 4 LocalSizeId 7 8 9 + Source GLSL 450 + Name 4 "main" + Name 14 "foo(vu3;" + Name 13 "wgs" + Name 16 "bn" + MemberName 16(bn) 0 "a" + Name 18 "bi" + Name 37 "param" + Decorate 7 SpecId 18 + Decorate 9 SpecId 19 + MemberDecorate 16(bn) 0 Offset 0 + Decorate 16(bn) Block + Decorate 18(bi) DescriptorSet 0 + Decorate 18(bi) Binding 0 + Decorate 25 SpecId 18 + Decorate 26 SpecId 19 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 32 0 + 7: 6(int) SpecConstant 32 + 8: 6(int) Constant 32 + 9: 6(int) SpecConstant 1 + 10: TypeVector 6(int) 3 + 11: TypePointer Function 10(ivec3) + 12: TypeFunction 2 11(ptr) + 16(bn): TypeStruct 6(int) + 17: TypePointer StorageBuffer 16(bn) + 18(bi): 17(ptr) Variable StorageBuffer + 19: TypeInt 32 1 + 20: 19(int) Constant 0 + 21: 6(int) Constant 0 + 22: TypePointer Function 6(int) + 25: 6(int) SpecConstant 32 + 26: 6(int) SpecConstant 1 + 27: 10(ivec3) SpecConstantComposite 25 8 26 + 28: 6(int) Constant 1 + 31: 6(int) Constant 2 + 35: TypePointer StorageBuffer 6(int) + 4(main): 2 Function None 3 + 5: Label + 37(param): 11(ptr) Variable Function + Store 37(param) 27 + 38: 2 FunctionCall 14(foo(vu3;) 37(param) + Return + FunctionEnd + 14(foo(vu3;): 2 Function None 12 + 13(wgs): 11(ptr) FunctionParameter + 15: Label + 23: 22(ptr) AccessChain 13(wgs) 21 + 24: 6(int) Load 23 + 29: 6(int) CompositeExtract 27 1 + 30: 6(int) IMul 24 29 + 32: 22(ptr) AccessChain 13(wgs) 31 + 33: 6(int) Load 32 + 34: 6(int) IMul 30 33 + 36: 35(ptr) AccessChain 18(bi) 20 + Store 36 34 + Return + FunctionEnd diff --git a/Test/hlsl.spv.1.6.discard.frag b/Test/hlsl.spv.1.6.discard.frag new file mode 100644 index 0000000000..7d9271c9cf --- /dev/null +++ b/Test/hlsl.spv.1.6.discard.frag @@ -0,0 +1,14 @@ +void foo(float f) +{ + if (f < 1.0) + discard; +} + +void PixelShaderFunction(float4 input) : COLOR0 +{ + foo(input.z); + if (input.x) + discard; + float f = input.x; + discard; +} diff --git a/Test/spv.1.6.conditionalDiscard.frag b/Test/spv.1.6.conditionalDiscard.frag new file mode 100644 index 0000000000..ea803374b9 --- /dev/null +++ b/Test/spv.1.6.conditionalDiscard.frag @@ -0,0 +1,14 @@ +#version 400 + +uniform sampler2D tex; +in vec2 coord; + +void main (void) +{ + vec4 v = texture(tex, coord); + + if (v == vec4(0.1,0.2,0.3,0.4)) + discard; + + gl_FragColor = v; +} diff --git a/Test/spv.1.6.helperInvocation.frag b/Test/spv.1.6.helperInvocation.frag new file mode 100644 index 0000000000..4d306db285 --- /dev/null +++ b/Test/spv.1.6.helperInvocation.frag @@ -0,0 +1,10 @@ +#version 310 es +precision highp float; + +out vec4 outp; +void main() +{ + if (gl_HelperInvocation) + ++outp; +} + diff --git a/Test/spv.1.6.specConstant.comp b/Test/spv.1.6.specConstant.comp new file mode 100644 index 0000000000..6b47515b1e --- /dev/null +++ b/Test/spv.1.6.specConstant.comp @@ -0,0 +1,18 @@ +#version 450 + +layout(local_size_x_id = 18, local_size_z_id = 19) in; +layout(local_size_x = 32, local_size_y = 32) in; + +buffer bn { + uint a; +} bi; + +void foo(uvec3 wgs) +{ + bi.a = wgs.x * gl_WorkGroupSize.y * wgs.z; +} + +void main() +{ + foo(gl_WorkGroupSize); +} diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 43e21c9a4d..da1cd145d1 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -244,6 +244,8 @@ c_shader_target_language_version(glslang_target_language_version_t target_langua return glslang::EShTargetSpv_1_4; case GLSLANG_TARGET_SPV_1_5: return glslang::EShTargetSpv_1_5; + case GLSLANG_TARGET_SPV_1_6: + return glslang::EShTargetSpv_1_6; default: break; } diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h index f5c6b564a9..fc80280652 100644 --- a/glslang/Include/glslang_c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -113,7 +113,8 @@ typedef enum { GLSLANG_TARGET_SPV_1_3 = (1 << 16) | (3 << 8), GLSLANG_TARGET_SPV_1_4 = (1 << 16) | (4 << 8), GLSLANG_TARGET_SPV_1_5 = (1 << 16) | (5 << 8), - LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT = 6), + GLSLANG_TARGET_SPV_1_6 = (1 << 16) | (6 << 8), + LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT = 7), } glslang_target_language_version_t; /* EShExecutable counterpart */ diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 940abf79a4..1386cb3a87 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -398,6 +398,9 @@ class TIntermediate { case EShTargetSpv_1_5: processes.addProcess("target-env spirv1.5"); break; + case EShTargetSpv_1_6: + processes.addProcess("target-env spirv1.6"); + break; default: processes.addProcess("target-env spirvUnknown"); break; diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 9d3e9be138..7e5d2cd3e5 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -163,6 +163,7 @@ typedef enum { } EShTargetLanguage; typedef enum { + EShTargetUniversal = 0, // Universal EShTargetVulkan_1_0 = (1 << 22), // Vulkan 1.0 EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), // Vulkan 1.1 EShTargetVulkan_1_2 = (1 << 22) | (2 << 12), // Vulkan 1.2 @@ -179,7 +180,8 @@ typedef enum { EShTargetSpv_1_3 = (1 << 16) | (3 << 8), // SPIR-V 1.3 EShTargetSpv_1_4 = (1 << 16) | (4 << 8), // SPIR-V 1.4 EShTargetSpv_1_5 = (1 << 16) | (5 << 8), // SPIR-V 1.5 - LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 6), + EShTargetSpv_1_6 = (1 << 16) | (6 << 8), // SPIR-V 1.6 + LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 7), } EShTargetLanguageVersion; struct TInputLanguage { diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 3e29896d63..73842a8a22 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -59,6 +59,7 @@ std::string FileNameAsCustomTestSuffix( using HlslCompileTest = GlslangTest<::testing::TestWithParam>; using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam>; +using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam>; using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam>; using HlslLegalizeTest = GlslangTest<::testing::TestWithParam>; using HlslDebugTest = GlslangTest<::testing::TestWithParam>; @@ -81,6 +82,13 @@ TEST_P(HlslVulkan1_1CompileTest, FromFile) Target::BothASTAndSpv, true, GetParam().entryPoint); } +TEST_P(HlslSpv1_6CompileTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + Source::HLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, + Target::BothASTAndSpv, true, GetParam().entryPoint); +} + TEST_P(HlslCompileAndFlattenTest, FromFile) { loadFileCompileFlattenUniformsAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, @@ -450,6 +458,16 @@ INSTANTIATE_TEST_SUITE_P( ); // clang-format on +// clang-format off +INSTANTIATE_TEST_SUITE_P( + ToSpirv, HlslSpv1_6CompileTest, + ::testing::ValuesIn(std::vector{ + {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"} + }), + FileNameAsCustomTestSuffix +); +// clang-format on + // clang-format off INSTANTIATE_TEST_SUITE_P( ToSpirv, HlslCompileAndFlattenTest, diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 885707c255..85f5d03c31 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -69,6 +69,7 @@ using CompileVulkanToSpirvDeadCodeElimTest = GlslangTest<::testing::TestWithPara using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam>; using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam>; using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam>; +using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam>; using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam>; using VulkanSemantics = GlslangTest<::testing::TestWithParam>; using OpenGLSemantics = GlslangTest<::testing::TestWithParam>; @@ -122,6 +123,13 @@ TEST_P(CompileToSpirv14Test, FromFile) Target::Spv); } +TEST_P(CompileToSpirv16Test, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, + Target::Spv); +} + // Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully // generate SPIR-V. TEST_P(CompileOpenGLToSpirvTest, FromFile) @@ -621,6 +629,18 @@ INSTANTIATE_TEST_SUITE_P( FileNameAsCustomTestSuffix ); +// clang-format off +INSTANTIATE_TEST_SUITE_P( + Glsl, CompileToSpirv16Test, + ::testing::ValuesIn(std::vector({ + "spv.1.6.conditionalDiscard.frag", + "spv.1.6.helperInvocation.frag", + "spv.1.6.specConstant.comp", + })), + FileNameAsCustomTestSuffix +); + + // clang-format off INSTANTIATE_TEST_SUITE_P( Hlsl, HlslIoMap, diff --git a/known_good.json b/known_good.json index 5da639d6e3..052de57b0a 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "4b092d2ab81854e61632bdd1e658907f0071c37e" + "commit" : "7d768812e20296c877a44ce0633d71f952fbf83c" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "814e728b30ddd0f4509233099a3ad96fd4318c07" + "commit" : "eddd4dfc930f1374a70797460240a501c7d333f7" } ] } From 46466be045fd8a5d00a1853ea76433ba2b3fad9f Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Tue, 28 Dec 2021 15:17:39 -0700 Subject: [PATCH 276/365] Fix seg fault Check types before accessing typeName. Fix #2848. --- Test/baseResults/noMatchingFunction.frag.out | 52 ++++++++++++++++++++ Test/noMatchingFunction.frag | 19 +++++++ glslang/Include/Types.h | 7 ++- glslang/MachineIndependent/ParseHelper.cpp | 2 +- gtests/AST.FromFile.cpp | 1 + 5 files changed, 78 insertions(+), 3 deletions(-) create mode 100644 Test/baseResults/noMatchingFunction.frag.out create mode 100644 Test/noMatchingFunction.frag diff --git a/Test/baseResults/noMatchingFunction.frag.out b/Test/baseResults/noMatchingFunction.frag.out new file mode 100644 index 0000000000..85aa3f6ccf --- /dev/null +++ b/Test/baseResults/noMatchingFunction.frag.out @@ -0,0 +1,52 @@ +noMatchingFunction.frag +ERROR: 0:17: 'func' : no matching overloaded function found +ERROR: 1 compilation errors. No code generated. + + +Shader version: 330 +ERROR: node is still EOpNull! +0:8 Function Definition: func(struct-S-f11; ( global float) +0:8 Function Parameters: +0:8 's' ( in structure{ global float a}) +0:10 Sequence +0:10 Branch: Return with expression +0:10 a: direct index for structure ( global float) +0:10 's' ( in structure{ global float a}) +0:10 Constant: +0:10 0 (const int) +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'c' ( temp float) +0:17 Constant: +0:17 0.000000 +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'o_color' (layout( location=0) out 4-component vector of float) +0:18 Construct vec4 ( temp 4-component vector of float) +0:18 'c' ( temp float) +0:? Linker Objects +0:? 'o_color' (layout( location=0) out 4-component vector of float) + + +Linked fragment stage: + + +Shader version: 330 +ERROR: node is still EOpNull! +0:15 Function Definition: main( ( global void) +0:15 Function Parameters: +0:17 Sequence +0:17 Sequence +0:17 move second child to first child ( temp float) +0:17 'c' ( temp float) +0:17 Constant: +0:17 0.000000 +0:18 move second child to first child ( temp 4-component vector of float) +0:18 'o_color' (layout( location=0) out 4-component vector of float) +0:18 Construct vec4 ( temp 4-component vector of float) +0:18 'c' ( temp float) +0:? Linker Objects +0:? 'o_color' (layout( location=0) out 4-component vector of float) + diff --git a/Test/noMatchingFunction.frag b/Test/noMatchingFunction.frag new file mode 100644 index 0000000000..d09564528e --- /dev/null +++ b/Test/noMatchingFunction.frag @@ -0,0 +1,19 @@ +#version 330 + +struct S +{ + float a; +}; + +float func(S s) +{ + return s.a; +} + +layout(location = 0) out vec4 o_color; + +void main() +{ + float c = func(1.0f); // ERROR: no matching function + o_color = vec4(c); +} diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 9c1f960ed2..6a7e61df3a 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -2446,11 +2446,15 @@ class TType { // bool sameStructType(const TType& right) const { + // TODO: Why return true when neither types are structures? // Most commonly, they are both nullptr, or the same pointer to the same actual structure if ((!isStruct() && !right.isStruct()) || (isStruct() && right.isStruct() && structure == right.structure)) return true; + if (!isStruct() || !right.isStruct()) + return false; + // Structure names have to match if (*typeName != *right.typeName) return false; @@ -2460,8 +2464,7 @@ class TType { bool isGLPerVertex = *typeName == "gl_PerVertex"; // Both being nullptr was caught above, now they both have to be structures of the same number of elements - if (!isStruct() || !right.isStruct() || - (structure->size() != right.structure->size() && !isGLPerVertex)) + if (structure->size() != right.structure->size() && !isGLPerVertex) return false; // Compare the names and types of all the members, which have to match diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 0f8d05e9a6..f2bc3152a5 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -1321,7 +1321,7 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction // Find it in the symbol table. // const TFunction* fnCandidate; - bool builtIn; + bool builtIn {false}; fnCandidate = findFunction(loc, *function, builtIn); if (fnCandidate) { // This is a declared function that might map to diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index b97eddf848..bc573f3ebb 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -233,6 +233,7 @@ INSTANTIATE_TEST_SUITE_P( "precise_struct_block.vert", "maxClipDistances.vert", "findFunction.frag", + "noMatchingFunction.frag", "constantUnaryConversion.comp", "xfbUnsizedArray.error.vert", "glsl.140.layoutOffset.error.vert", From 9a98d32366cd0c826fb33637cae89a495251ad73 Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Sat, 1 Jan 2022 04:18:41 -0500 Subject: [PATCH 277/365] Added GLSL version override interface and CLI This change list allows a user to override the GLSL version from the command line or through the C and C++ interfaces. This will override the override happens in ProcessDeferred() before DeduceVersionProfile() so the process should still error out if the version is insufficient for the shader code. - Added --glsl-version to CLI. - Added parameter to route glslVersion as override version to preprocessor and parse functions to C++ interface. - Updated C interface with function to override GLSL version. --- StandAlone/StandAlone.cpp | 54 +++++++++++++++++++++- glslang/CInterface/glslang_c_interface.cpp | 7 +++ glslang/Include/glslang_c_interface.h | 1 + glslang/MachineIndependent/ShaderLang.cpp | 21 ++++++--- glslang/Public/ShaderLang.h | 17 +++---- 5 files changed, 83 insertions(+), 17 deletions(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index f5ce6317f1..fe33722c8f 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -191,6 +191,9 @@ glslang::EShTargetClientVersion ClientVersion; // not valid until Client i glslang::EShTargetLanguage TargetLanguage = glslang::EShTargetNone; glslang::EShTargetLanguageVersion TargetVersion; // not valid until TargetLanguage is set +// GLSL version +int GlslVersion = 0; // GLSL version specified on CLI, overrides #version in shader source + std::vector Processes; // what should be recorded by OpModuleProcessed, or equivalent // Per descriptor-set binding base data @@ -653,6 +656,48 @@ void ProcessArguments(std::vector>& workItem lowerword == "flatten-uniform-array" || lowerword == "fua") { Options |= EOptionFlattenUniformArrays; + } else if (lowerword == "glsl-version") { + if (argc > 1) { + if (strcmp(argv[1], "100") == 0) { + GlslVersion = 100; + } else if (strcmp(argv[1], "110") == 0) { + GlslVersion = 110; + } else if (strcmp(argv[1], "120") == 0) { + GlslVersion = 120; + } else if (strcmp(argv[1], "130") == 0) { + GlslVersion = 130; + } else if (strcmp(argv[1], "140") == 0) { + GlslVersion = 140; + } else if (strcmp(argv[1], "150") == 0) { + GlslVersion = 150; + } else if (strcmp(argv[1], "300es") == 0) { + GlslVersion = 300; + } else if (strcmp(argv[1], "310es") == 0) { + GlslVersion = 310; + } else if (strcmp(argv[1], "320es") == 0) { + GlslVersion = 320; + } else if (strcmp(argv[1], "330") == 0) { + GlslVersion = 330; + } else if (strcmp(argv[1], "400") == 0) { + GlslVersion = 400; + } else if (strcmp(argv[1], "410") == 0) { + GlslVersion = 410; + } else if (strcmp(argv[1], "420") == 0) { + GlslVersion = 420; + } else if (strcmp(argv[1], "430") == 0) { + GlslVersion = 430; + } else if (strcmp(argv[1], "440") == 0) { + GlslVersion = 440; + } else if (strcmp(argv[1], "450") == 0) { + GlslVersion = 450; + } else if (strcmp(argv[1], "460") == 0) { + GlslVersion = 460; + } else + Error("--glsl-version expected one of: 100, 110, 120, 130, 140, 150,\n" + "300es, 310es, 320es, 330\n" + "400, 410, 420, 430, 440, 450, 460"); + } + bumpArg(); } else if (lowerword == "hlsl-offsets") { Options |= EOptionHlslOffsets; } else if (lowerword == "hlsl-iomap" || @@ -1317,7 +1362,7 @@ void CompileAndLinkShaderUnits(std::vector compUnits) #ifndef GLSLANG_WEB if (Options & EOptionOutputPreprocessed) { std::string str; - if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false, messages, &str, includer)) { + if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, GlslVersion, false, messages, &str, includer)) { PutsIfNonEmpty(str.c_str()); } else { CompileFailed = true; @@ -1328,7 +1373,7 @@ void CompileAndLinkShaderUnits(std::vector compUnits) } #endif - if (! shader->parse(&Resources, defaultVersion, false, messages, includer)) + if (! shader->parse(&Resources, defaultVersion, GlslVersion, false, messages, includer)) CompileFailed = true; program.addShader(shader); @@ -1850,6 +1895,11 @@ void usage() " -dumpfullversion | -dumpversion print bare major.minor.patchlevel\n" " --flatten-uniform-arrays | --fua flatten uniform texture/sampler arrays to\n" " scalars\n" + " --glsl-version {100 | 110 | 120 | 130 | 140 | 150 |\n" + " 300es | 310es | 320es | 330\n" + " 400 | 410 | 420 | 430 | 440 | 450 | 460}\n" + " set GLSL version, overrides #version\n" + " in shader sourcen\n" " --hlsl-offsets allow block offsets to follow HLSL rules\n" " works independently of source language\n" " --hlsl-iomap perform IO mapping in HLSL register space\n" diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index da1cd145d1..8f2b9b374c 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -57,6 +57,7 @@ static_assert(sizeof(glslang_resource_t) == sizeof(TBuiltInResource), ""); typedef struct glslang_shader_s { glslang::TShader* shader; std::string preprocessedGLSL; + int glslVersion; } glslang_shader_t; typedef struct glslang_program_s { @@ -373,7 +374,11 @@ GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int opt if (options & GLSLANG_SHADER_VULKAN_RULES_RELAXED) { shader->shader->setEnvInputVulkanRulesRelaxed(); } +} +GLSLANG_EXPORT void glslang_shader_set_glsl_version(glslang_shader_t* shader, int version) +{ + shader->glslVersion = version; } GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) @@ -390,6 +395,7 @@ GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const gls input->default_version, c_shader_profile(input->default_profile), input->force_default_version_and_profile != 0, + shader->glslVersion, input->forward_compatible != 0, (EShMessages)c_shader_messages(input->messages), &shader->preprocessedGLSL, @@ -405,6 +411,7 @@ GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_ return shader->shader->parse( reinterpret_cast(input->resource), input->default_version, + shader->glslVersion, input->forward_compatible != 0, (EShMessages)c_shader_messages(input->messages) ); diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index 14ab6acbc2..a98a7e176d 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -227,6 +227,7 @@ GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader); GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base); GLSLANG_EXPORT void glslang_shader_shift_binding_for_set(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base, unsigned int set); GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int options); // glslang_shader_options_t +GLSLANG_EXPORT void glslang_shader_set_glsl_version(glslang_shader_t* shader, int version); GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input); GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input); GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader); diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index bcf2c33ff7..434de01b42 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -813,6 +813,7 @@ bool ProcessDeferred( // set version/profile to defaultVersion/defaultProfile regardless of the #version // directive in the source code bool forceDefaultVersionAndProfile, + int overrideVersion, // overrides version specified by #verison or default version bool forwardCompatible, // give errors for use of deprecated features EShMessages messages, // warnings/errors/AST; things to print out TIntermediate& intermediate, // returned tree, etc. @@ -900,6 +901,9 @@ bool ProcessDeferred( version = defaultVersion; profile = defaultProfile; } + if (source == EShSourceGlsl && overrideVersion != 0) { + version = overrideVersion; + } bool goodVersion = DeduceVersionProfile(compiler->infoSink, stage, versionNotFirst, defaultVersion, source, version, profile, spvVersion); @@ -1275,6 +1279,7 @@ bool PreprocessDeferred( int defaultVersion, // use 100 for ES environment, 110 for desktop EProfile defaultProfile, bool forceDefaultVersionAndProfile, + int overrideVersion, // use 0 if not overriding GLSL version bool forwardCompatible, // give errors for use of deprecated features EShMessages messages, // warnings/errors/AST; things to print out TShader::Includer& includer, @@ -1285,7 +1290,7 @@ bool PreprocessDeferred( DoPreprocessing parser(outputString); return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames, preamble, optLevel, resources, defaultVersion, - defaultProfile, forceDefaultVersionAndProfile, + defaultProfile, forceDefaultVersionAndProfile, overrideVersion, forwardCompatible, messages, intermediate, parser, false, includer, "", environment); } @@ -1314,6 +1319,7 @@ bool CompileDeferred( int defaultVersion, // use 100 for ES environment, 110 for desktop EProfile defaultProfile, bool forceDefaultVersionAndProfile, + int overrideVersion, // use 0 if not overriding GLSL version bool forwardCompatible, // give errors for use of deprecated features EShMessages messages, // warnings/errors/AST; things to print out TIntermediate& intermediate,// returned tree, etc. @@ -1324,7 +1330,7 @@ bool CompileDeferred( DoFullParse parser; return ProcessDeferred(compiler, shaderStrings, numStrings, inputLengths, stringNames, preamble, optLevel, resources, defaultVersion, - defaultProfile, forceDefaultVersionAndProfile, + defaultProfile, forceDefaultVersionAndProfile, overrideVersion, forwardCompatible, messages, intermediate, parser, true, includer, sourceEntryPointName, environment); } @@ -1477,6 +1483,7 @@ int ShCompile( const TBuiltInResource* resources, int /*debugOptions*/, int defaultVersion, // use 100 for ES environment, 110 for desktop + int overrideVersion, // use 0 if not overriding GLSL version bool forwardCompatible, // give errors for use of deprecated features EShMessages messages // warnings/errors/AST; things to print out ) @@ -1498,7 +1505,7 @@ int ShCompile( TIntermediate intermediate(compiler->getLanguage()); TShader::ForbidIncluder includer; bool success = CompileDeferred(compiler, shaderStrings, numStrings, inputLengths, nullptr, - "", optLevel, resources, defaultVersion, ENoProfile, false, + "", optLevel, resources, defaultVersion, ENoProfile, false, overrideVersion, forwardCompatible, messages, intermediate, includer); // @@ -1897,7 +1904,7 @@ void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlatt // // Returns true for success. // -bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, +bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, int overrideVersion, bool forwardCompatible, EShMessages messages, Includer& includer) { if (! InitThread()) @@ -1909,7 +1916,7 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion return CompileDeferred(compiler, strings, numStrings, lengths, stringNames, preamble, EShOptNone, builtInResources, defaultVersion, - defaultProfile, forceDefaultVersionAndProfile, + defaultProfile, forceDefaultVersionAndProfile, overrideVersion, forwardCompatible, messages, *intermediate, includer, sourceEntryPointName, &environment); } @@ -1922,7 +1929,7 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion // is not an officially supported or fully working path. bool TShader::preprocess(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, - bool forceDefaultVersionAndProfile, + bool forceDefaultVersionAndProfile, int overrideVersion, bool forwardCompatible, EShMessages message, std::string* output_string, Includer& includer) @@ -1936,7 +1943,7 @@ bool TShader::preprocess(const TBuiltInResource* builtInResources, return PreprocessDeferred(compiler, strings, numStrings, lengths, stringNames, preamble, EShOptNone, builtInResources, defaultVersion, - defaultProfile, forceDefaultVersionAndProfile, + defaultProfile, forceDefaultVersionAndProfile, overrideVersion, forwardCompatible, message, includer, *intermediate, output_string, &environment); } diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 7e5d2cd3e5..cdd321e415 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -334,6 +334,7 @@ GLSLANG_EXPORT int ShCompile( const TBuiltInResource *resources, int debugOptions, int defaultVersion = 110, // use 100 for ES environment, overridden by #version in shader + int overrideVersion = 0, // overrides #version in GLSL shader, use 0 to disable bool forwardCompatible = false, // give errors for use of deprecated features EShMessages messages = EShMsgDefault // warnings and errors ); @@ -647,33 +648,33 @@ class TShader { GLSLANG_EXPORT bool parse( const TBuiltInResource*, int defaultVersion, EProfile defaultProfile, - bool forceDefaultVersionAndProfile, bool forwardCompatible, + bool forceDefaultVersionAndProfile, int overrideVersion, bool forwardCompatible, EShMessages, Includer&); - bool parse(const TBuiltInResource* res, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, + bool parse(const TBuiltInResource* res, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, int overrideVersion, bool forwardCompatible, EShMessages messages) { TShader::ForbidIncluder includer; - return parse(res, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, forwardCompatible, messages, includer); + return parse(res, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, overrideVersion, forwardCompatible, messages, includer); } // Equivalent to parse() without a default profile and without forcing defaults. - bool parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages) + bool parse(const TBuiltInResource* builtInResources, int defaultVersion, int overrideVersion, bool forwardCompatible, EShMessages messages) { - return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages); + return parse(builtInResources, defaultVersion, ENoProfile, false, overrideVersion, forwardCompatible, messages); } - bool parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages, + bool parse(const TBuiltInResource* builtInResources, int defaultVersion, int overrideVersion, bool forwardCompatible, EShMessages messages, Includer& includer) { - return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages, includer); + return parse(builtInResources, defaultVersion, ENoProfile, false, overrideVersion, forwardCompatible, messages, includer); } // NOTE: Doing just preprocessing to obtain a correct preprocessed shader string // is not an officially supported or fully working path. GLSLANG_EXPORT bool preprocess( const TBuiltInResource* builtInResources, int defaultVersion, - EProfile defaultProfile, bool forceDefaultVersionAndProfile, + EProfile defaultProfile, bool forceDefaultVersionAndProfile, int overrideVersion, bool forwardCompatible, EShMessages message, std::string* outputString, Includer& includer); From 356928a96bc557873623ab4d653d3161580ee8de Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Sat, 1 Jan 2022 04:44:06 -0500 Subject: [PATCH 278/365] Updated gtests preprocess()and parse() calls with arg for new parameter --- gtests/TestFixture.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h index 2b057dcb0e..5cd6614d00 100644 --- a/gtests/TestFixture.h +++ b/gtests/TestFixture.h @@ -200,7 +200,7 @@ class GlslangTest : public GT { if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str()); return shader->parse( (resources ? resources : &glslang::DefaultTBuiltInResource), - defaultVersion, isForwardCompatible, controls); + defaultVersion, 0, isForwardCompatible, controls); } // Compiles and links the given source |code| of the given shader @@ -635,7 +635,7 @@ class GlslangTest : public GT { glslang::TShader::ForbidIncluder includer; const bool success = shader.preprocess( &glslang::DefaultTBuiltInResource, defaultVersion, defaultProfile, - forceVersionProfile, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors), + forceVersionProfile, 0, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors), &ppShader, includer); std::string log = shader.getInfoLog(); From 978338025acb4f40daf70189c60061ae6da52b74 Mon Sep 17 00:00:00 2001 From: Yilong Li Date: Sat, 1 Jan 2022 15:08:35 -0800 Subject: [PATCH 279/365] build: Make action targets hermetic Fuchsia GN build requires all "action" targets to be hermetic, and they should correctly and fully state their inputs and ouptuts in "sources" and "outputs" fields (see https://fuchsia.dev/fuchsia-src/development/build/hermetic_actions for details). This change adds "sources" field to "glslang_extension_headers" build target so that it states all its input files in its GN target build rule. TEST=fx set workstation.x64 --args=build_should_trace_actions=true fx build Bug: 90846 Change-Id: I63bd5d03cee86d93b0bb7cf2cee95c5ae0d98f93 --- BUILD.gn | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/BUILD.gn b/BUILD.gn index 06d3c4b855..4dd0a55396 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -74,6 +74,15 @@ action("glslang_extension_headers") { out_file = "${target_gen_dir}/include/glslang/glsl_intrinsic_header.h" + # Fuchsia GN build rules require all GN actions to be hermetic and they + # should correctly and fully state their inputs and outpus (see + # https://fuchsia.dev/fuchsia-src/development/build/hermetic_actions + # for details). All input files of the script should be added to the + # |sources| list. + sources = [ + "glslang/ExtensionHeaders/GL_EXT_shader_realtime_clock.glsl", + ] + inputs = [ script ] From 1f10dddac44af47ed45c158837669c8cae5180fc Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Sat, 1 Jan 2022 19:02:14 -0500 Subject: [PATCH 280/365] Revisions to GLSL version override - Reverted public function interface changes for C++. - Added override member variable to TShader. - Added accessor TShader::setOverrideVersion. - Reverted changes to tests. --- StandAlone/StandAlone.cpp | 6 ++++-- glslang/CInterface/glslang_c_interface.cpp | 5 +---- glslang/MachineIndependent/ShaderLang.cpp | 14 +++++++++----- glslang/Public/ShaderLang.h | 21 ++++++++++++--------- gtests/TestFixture.h | 4 ++-- 5 files changed, 28 insertions(+), 22 deletions(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index fe33722c8f..1cdb23a484 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -1261,6 +1261,8 @@ void CompileAndLinkShaderUnits(std::vector compUnits) shader->setSourceEntryPoint(sourceEntryPointName); } + shader->setOverrideVersion(GlslVersion); + std::string intrinsicString = getIntrinsic(compUnit.text, compUnit.count); PreambleString = ""; @@ -1362,7 +1364,7 @@ void CompileAndLinkShaderUnits(std::vector compUnits) #ifndef GLSLANG_WEB if (Options & EOptionOutputPreprocessed) { std::string str; - if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, GlslVersion, false, messages, &str, includer)) { + if (shader->preprocess(&Resources, defaultVersion, ENoProfile, false, false, messages, &str, includer)) { PutsIfNonEmpty(str.c_str()); } else { CompileFailed = true; @@ -1373,7 +1375,7 @@ void CompileAndLinkShaderUnits(std::vector compUnits) } #endif - if (! shader->parse(&Resources, defaultVersion, GlslVersion, false, messages, includer)) + if (! shader->parse(&Resources, defaultVersion, false, messages, includer)) CompileFailed = true; program.addShader(shader); diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 8f2b9b374c..0a515d31d7 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -57,7 +57,6 @@ static_assert(sizeof(glslang_resource_t) == sizeof(TBuiltInResource), ""); typedef struct glslang_shader_s { glslang::TShader* shader; std::string preprocessedGLSL; - int glslVersion; } glslang_shader_t; typedef struct glslang_program_s { @@ -378,7 +377,7 @@ GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int opt GLSLANG_EXPORT void glslang_shader_set_glsl_version(glslang_shader_t* shader, int version) { - shader->glslVersion = version; + shader->shader->setOverrideVersion(version); } GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader) @@ -395,7 +394,6 @@ GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const gls input->default_version, c_shader_profile(input->default_profile), input->force_default_version_and_profile != 0, - shader->glslVersion, input->forward_compatible != 0, (EShMessages)c_shader_messages(input->messages), &shader->preprocessedGLSL, @@ -411,7 +409,6 @@ GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_ return shader->shader->parse( reinterpret_cast(input->resource), input->default_version, - shader->glslVersion, input->forward_compatible != 0, (EShMessages)c_shader_messages(input->messages) ); diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index 434de01b42..5f61a9e38d 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1483,7 +1483,6 @@ int ShCompile( const TBuiltInResource* resources, int /*debugOptions*/, int defaultVersion, // use 100 for ES environment, 110 for desktop - int overrideVersion, // use 0 if not overriding GLSL version bool forwardCompatible, // give errors for use of deprecated features EShMessages messages // warnings/errors/AST; things to print out ) @@ -1505,7 +1504,7 @@ int ShCompile( TIntermediate intermediate(compiler->getLanguage()); TShader::ForbidIncluder includer; bool success = CompileDeferred(compiler, shaderStrings, numStrings, inputLengths, nullptr, - "", optLevel, resources, defaultVersion, ENoProfile, false, overrideVersion, + "", optLevel, resources, defaultVersion, ENoProfile, false, 0, forwardCompatible, messages, intermediate, includer); // @@ -1766,7 +1765,7 @@ class TDeferredCompiler : public TCompiler { }; TShader::TShader(EShLanguage s) - : stage(s), lengths(nullptr), stringNames(nullptr), preamble("") + : stage(s), lengths(nullptr), stringNames(nullptr), preamble(""), overrideVersion(0) { pool = new TPoolAllocator; infoSink = new TInfoSink; @@ -1835,6 +1834,11 @@ void TShader::setUniqueId(unsigned long long id) intermediate->setUniqueId(id); } +void TShader::setOverrideVersion(int version) +{ + overrideVersion = version; +} + void TShader::setInvertY(bool invert) { intermediate->setInvertY(invert); } void TShader::setDxPositionW(bool invert) { intermediate->setDxPositionW(invert); } void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); } @@ -1904,7 +1908,7 @@ void TShader::setFlattenUniformArrays(bool flatten) { intermediate->setFlatt // // Returns true for success. // -bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, int overrideVersion, +bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, bool forwardCompatible, EShMessages messages, Includer& includer) { if (! InitThread()) @@ -1929,7 +1933,7 @@ bool TShader::parse(const TBuiltInResource* builtInResources, int defaultVersion // is not an officially supported or fully working path. bool TShader::preprocess(const TBuiltInResource* builtInResources, int defaultVersion, EProfile defaultProfile, - bool forceDefaultVersionAndProfile, int overrideVersion, + bool forceDefaultVersionAndProfile, bool forwardCompatible, EShMessages message, std::string* output_string, Includer& includer) diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index cdd321e415..4047975601 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -334,7 +334,6 @@ GLSLANG_EXPORT int ShCompile( const TBuiltInResource *resources, int debugOptions, int defaultVersion = 110, // use 100 for ES environment, overridden by #version in shader - int overrideVersion = 0, // overrides #version in GLSL shader, use 0 to disable bool forwardCompatible = false, // give errors for use of deprecated features EShMessages messages = EShMsgDefault // warnings and errors ); @@ -471,6 +470,7 @@ class TShader { GLSLANG_EXPORT void setSourceEntryPoint(const char* sourceEntryPointName); GLSLANG_EXPORT void addProcesses(const std::vector&); GLSLANG_EXPORT void setUniqueId(unsigned long long id); + GLSLANG_EXPORT void setOverrideVersion(int version); // IO resolver binding data: see comments in ShaderLang.cpp GLSLANG_EXPORT void setShiftBinding(TResourceType res, unsigned int base); @@ -648,33 +648,33 @@ class TShader { GLSLANG_EXPORT bool parse( const TBuiltInResource*, int defaultVersion, EProfile defaultProfile, - bool forceDefaultVersionAndProfile, int overrideVersion, bool forwardCompatible, + bool forceDefaultVersionAndProfile, bool forwardCompatible, EShMessages, Includer&); - bool parse(const TBuiltInResource* res, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, int overrideVersion, + bool parse(const TBuiltInResource* res, int defaultVersion, EProfile defaultProfile, bool forceDefaultVersionAndProfile, bool forwardCompatible, EShMessages messages) { TShader::ForbidIncluder includer; - return parse(res, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, overrideVersion, forwardCompatible, messages, includer); + return parse(res, defaultVersion, defaultProfile, forceDefaultVersionAndProfile, forwardCompatible, messages, includer); } // Equivalent to parse() without a default profile and without forcing defaults. - bool parse(const TBuiltInResource* builtInResources, int defaultVersion, int overrideVersion, bool forwardCompatible, EShMessages messages) + bool parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages) { - return parse(builtInResources, defaultVersion, ENoProfile, false, overrideVersion, forwardCompatible, messages); + return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages); } - bool parse(const TBuiltInResource* builtInResources, int defaultVersion, int overrideVersion, bool forwardCompatible, EShMessages messages, + bool parse(const TBuiltInResource* builtInResources, int defaultVersion, bool forwardCompatible, EShMessages messages, Includer& includer) { - return parse(builtInResources, defaultVersion, ENoProfile, false, overrideVersion, forwardCompatible, messages, includer); + return parse(builtInResources, defaultVersion, ENoProfile, false, forwardCompatible, messages, includer); } // NOTE: Doing just preprocessing to obtain a correct preprocessed shader string // is not an officially supported or fully working path. GLSLANG_EXPORT bool preprocess( const TBuiltInResource* builtInResources, int defaultVersion, - EProfile defaultProfile, bool forceDefaultVersionAndProfile, int overrideVersion, + EProfile defaultProfile, bool forceDefaultVersionAndProfile, bool forwardCompatible, EShMessages message, std::string* outputString, Includer& includer); @@ -707,6 +707,9 @@ class TShader { // a function in the source string can be renamed FROM this TO the name given in setEntryPoint. std::string sourceEntryPointName; + // overrides #version in shader source or default version if #version isn't present + int overrideVersion; + TEnvironment environment; friend class TProgram; diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h index 5cd6614d00..2b057dcb0e 100644 --- a/gtests/TestFixture.h +++ b/gtests/TestFixture.h @@ -200,7 +200,7 @@ class GlslangTest : public GT { if (!entryPointName.empty()) shader->setEntryPoint(entryPointName.c_str()); return shader->parse( (resources ? resources : &glslang::DefaultTBuiltInResource), - defaultVersion, 0, isForwardCompatible, controls); + defaultVersion, isForwardCompatible, controls); } // Compiles and links the given source |code| of the given shader @@ -635,7 +635,7 @@ class GlslangTest : public GT { glslang::TShader::ForbidIncluder includer; const bool success = shader.preprocess( &glslang::DefaultTBuiltInResource, defaultVersion, defaultProfile, - forceVersionProfile, 0, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors), + forceVersionProfile, isForwardCompatible, (EShMessages)(EShMsgOnlyPreprocessor | EShMsgCascadingErrors), &ppShader, includer); std::string log = shader.getInfoLog(); From 1b01aaaf2972de8552553351b9ccb1b23bfadc94 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Tue, 4 Jan 2022 10:40:04 +0800 Subject: [PATCH 281/365] EndStreamPrimitive not supported when there is #extension GL_ARB_gpu_shader5 Signed-off-by: ZhiqianXia --- Test/EndStreamPrimitive.geom | 20 ++++ Test/baseResults/150.geom.out | 24 +++-- Test/baseResults/EndStreamPrimitive.geom.out | 97 ++++++++++++++++++++ glslang/MachineIndependent/Initialize.cpp | 2 +- glslang/MachineIndependent/ParseHelper.cpp | 2 + gtests/AST.FromFile.cpp | 1 + 6 files changed, 135 insertions(+), 11 deletions(-) create mode 100644 Test/EndStreamPrimitive.geom create mode 100644 Test/baseResults/EndStreamPrimitive.geom.out diff --git a/Test/EndStreamPrimitive.geom b/Test/EndStreamPrimitive.geom new file mode 100644 index 0000000000..a654ebc4eb --- /dev/null +++ b/Test/EndStreamPrimitive.geom @@ -0,0 +1,20 @@ +#version 150 core +#extension GL_ARB_gpu_shader5 : require +layout(points) in; +layout(points, max_vertices = 1) out; +layout(stream=0) out float output1; +layout(stream=0) out float output2; +layout(stream=1) out float output3; +layout(stream=1) out float output4; +uniform uint stream; +void main() { + + output1 = 1.0; + output2 = 2.0; + EmitStreamVertex(0); + EndStreamPrimitive(0); + output3 = 3.0; + output4 = 4.0; + EmitStreamVertex(1); + EndStreamPrimitive(1); +} \ No newline at end of file diff --git a/Test/baseResults/150.geom.out b/Test/baseResults/150.geom.out index 92b8e1aa50..c5a31f555d 100644 --- a/Test/baseResults/150.geom.out +++ b/Test/baseResults/150.geom.out @@ -2,8 +2,8 @@ ERROR: 0:15: 'fromVertex' : block instance name redefinition ERROR: 0:19: 'fromVertex' : redefinition ERROR: 0:21: 'fooC' : block instance name redefinition -ERROR: 0:29: 'EmitStreamVertex' : no matching overloaded function found -ERROR: 0:30: 'EndStreamPrimitive' : no matching overloaded function found +ERROR: 0:29: 'if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5' : required extension not requested: GL_ARB_gpu_shader5 +ERROR: 0:30: 'if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5' : required extension not requested: GL_ARB_gpu_shader5 ERROR: 0:44: 'stream' : can only be used on an output ERROR: 0:45: 'stream' : can only be used on an output ERROR: 0:46: 'stream' : can only be used on an output @@ -49,10 +49,12 @@ ERROR: node is still EOpNull! 0:27 Sequence 0:27 EmitVertex ( global void) 0:28 EndPrimitive ( global void) -0:29 Constant: -0:29 0.000000 -0:30 Constant: -0:30 0.000000 +0:29 EmitStreamVertex ( global void) +0:29 Constant: +0:29 1 (const int) +0:30 EndStreamPrimitive ( global void) +0:30 Constant: +0:30 0 (const int) 0:32 move second child to first child ( temp 3-component vector of float) 0:32 color: direct index for structure (layout( stream=0) out 3-component vector of float) 0:32 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color}) @@ -190,10 +192,12 @@ ERROR: node is still EOpNull! 0:27 Sequence 0:27 EmitVertex ( global void) 0:28 EndPrimitive ( global void) -0:29 Constant: -0:29 0.000000 -0:30 Constant: -0:30 0.000000 +0:29 EmitStreamVertex ( global void) +0:29 Constant: +0:29 1 (const int) +0:30 EndStreamPrimitive ( global void) +0:30 Constant: +0:30 0 (const int) 0:32 move second child to first child ( temp 3-component vector of float) 0:32 color: direct index for structure (layout( stream=0) out 3-component vector of float) 0:32 'anon@0' (layout( stream=0) out block{layout( stream=0) out 3-component vector of float color}) diff --git a/Test/baseResults/EndStreamPrimitive.geom.out b/Test/baseResults/EndStreamPrimitive.geom.out new file mode 100644 index 0000000000..702c3f97b1 --- /dev/null +++ b/Test/baseResults/EndStreamPrimitive.geom.out @@ -0,0 +1,97 @@ +EndStreamPrimitive.geom +WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5 + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +invocations = -1 +max_vertices = 1 +input primitive = points +output primitive = points +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'output1' (layout( stream=0) out float) +0:12 Constant: +0:12 1.000000 +0:13 move second child to first child ( temp float) +0:13 'output2' (layout( stream=0) out float) +0:13 Constant: +0:13 2.000000 +0:14 EmitStreamVertex ( global void) +0:14 Constant: +0:14 0 (const int) +0:15 EndStreamPrimitive ( global void) +0:15 Constant: +0:15 0 (const int) +0:16 move second child to first child ( temp float) +0:16 'output3' (layout( stream=1) out float) +0:16 Constant: +0:16 3.000000 +0:17 move second child to first child ( temp float) +0:17 'output4' (layout( stream=1) out float) +0:17 Constant: +0:17 4.000000 +0:18 EmitStreamVertex ( global void) +0:18 Constant: +0:18 1 (const int) +0:19 EndStreamPrimitive ( global void) +0:19 Constant: +0:19 1 (const int) +0:? Linker Objects +0:? 'output1' (layout( stream=0) out float) +0:? 'output2' (layout( stream=0) out float) +0:? 'output3' (layout( stream=1) out float) +0:? 'output4' (layout( stream=1) out float) +0:? 'stream' ( uniform uint) + + +Linked geometry stage: + + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +invocations = 1 +max_vertices = 1 +input primitive = points +output primitive = points +0:? Sequence +0:10 Function Definition: main( ( global void) +0:10 Function Parameters: +0:12 Sequence +0:12 move second child to first child ( temp float) +0:12 'output1' (layout( stream=0) out float) +0:12 Constant: +0:12 1.000000 +0:13 move second child to first child ( temp float) +0:13 'output2' (layout( stream=0) out float) +0:13 Constant: +0:13 2.000000 +0:14 EmitStreamVertex ( global void) +0:14 Constant: +0:14 0 (const int) +0:15 EndStreamPrimitive ( global void) +0:15 Constant: +0:15 0 (const int) +0:16 move second child to first child ( temp float) +0:16 'output3' (layout( stream=1) out float) +0:16 Constant: +0:16 3.000000 +0:17 move second child to first child ( temp float) +0:17 'output4' (layout( stream=1) out float) +0:17 Constant: +0:17 4.000000 +0:18 EmitStreamVertex ( global void) +0:18 Constant: +0:18 1 (const int) +0:19 EndStreamPrimitive ( global void) +0:19 Constant: +0:19 1 (const int) +0:? Linker Objects +0:? 'output1' (layout( stream=0) out float) +0:? 'output2' (layout( stream=0) out float) +0:? 'output3' (layout( stream=1) out float) +0:? 'output4' (layout( stream=1) out float) +0:? 'stream' ( uniform uint) + diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 3e586c81a8..c770242e0f 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -4270,7 +4270,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV // //============================================================================ - if (profile != EEsProfile && version >= 400) { + if (profile != EEsProfile && (version >= 400 || version == 150)) { stageBuiltins[EShLangGeometry].append( "void EmitStreamVertex(int);" "void EndStreamPrimitive(int);" diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index f2bc3152a5..1985286c8e 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2495,6 +2495,8 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan case EOpEmitStreamVertex: case EOpEndStreamPrimitive: + if (version == 150) + requireExtensions(loc, 1, &E_GL_ARB_gpu_shader5, "if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5"); intermediate.setMultiStream(); break; diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index bc573f3ebb..3f8ff0e324 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -291,6 +291,7 @@ INSTANTIATE_TEST_SUITE_P( "GL_ARB_draw_instanced.vert", "GL_ARB_fragment_coord_conventions.vert", "BestMatchFunction.vert", + "EndStreamPrimitive.geom" })), FileNameAsCustomTestSuffix ); From 294c8f1d51dcd137013bc5a8bd33f5cbe9c3c70e Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Tue, 4 Jan 2022 19:55:41 -0700 Subject: [PATCH 282/365] Fix GCC sign-compare warnings --- SPIRV/SpvBuilder.cpp | 6 +++--- gtests/GlslMapIO.FromFile.cpp | 14 ++++++++------ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 838f916a06..0b0e48ab0b 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -433,11 +433,11 @@ Id Builder::makeGenericType(spv::Op opcode, std::vector& opera Instruction* type; for (int t = 0; t < (int)groupedTypes[opcode].size(); ++t) { type = groupedTypes[opcode][t]; - if (type->getNumOperands() != operands.size()) + if (static_cast(type->getNumOperands()) != operands.size()) continue; // Number mismatch, find next bool match = true; - for (int op = 0; match && op < operands.size(); ++op) { + for (size_t op = 0; match && op < operands.size(); ++op) { match = (operands[op].isId ? type->getIdOperand(op) : type->getImmediateOperand(op)) == operands[op].word; } if (match) @@ -446,7 +446,7 @@ Id Builder::makeGenericType(spv::Op opcode, std::vector& opera // not found, make it type = new Instruction(getUniqueId(), NoType, opcode); - for (int op = 0; op < operands.size(); ++op) { + for (size_t op = 0; op < operands.size(); ++op) { if (operands[op].isId) type->addIdOperand(operands[op].word); else diff --git a/gtests/GlslMapIO.FromFile.cpp b/gtests/GlslMapIO.FromFile.cpp index 73fdec4e6e..aabb4ae203 100644 --- a/gtests/GlslMapIO.FromFile.cpp +++ b/gtests/GlslMapIO.FromFile.cpp @@ -113,11 +113,13 @@ bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { bool found = false; for (auto outIt : pipeOut) { if (outIt.second->getType()->isStruct()) { - unsigned int baseLoc = outIt.second->getType()->getQualifier().hasLocation() ? outIt.second->getType()->getQualifier().layoutLocation : -1; - for (int j = 0; j < outIt.second->getType()->getStruct()->size(); j++) { + unsigned int baseLoc = outIt.second->getType()->getQualifier().hasLocation() ? + outIt.second->getType()->getQualifier().layoutLocation : + std::numeric_limits::max(); + for (size_t j = 0; j < outIt.second->getType()->getStruct()->size(); j++) { baseLoc = (*outIt.second->getType()->getStruct())[j].type->getQualifier().hasLocation() ? (*outIt.second->getType()->getStruct())[j].type->getQualifier().layoutLocation : baseLoc; - if (baseLoc != -1) { + if (baseLoc != std::numeric_limits::max()) { if (baseLoc == in.getType()->getQualifier().layoutLocation) { found = true; break; @@ -134,10 +136,10 @@ bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { } else { unsigned int baseLoc = in.getType()->getQualifier().hasLocation() ? in.getType()->getQualifier().layoutLocation : -1; - for (int j = 0; j < in.getType()->getStruct()->size(); j++) { + for (size_t j = 0; j < in.getType()->getStruct()->size(); j++) { baseLoc = (*in.getType()->getStruct())[j].type->getQualifier().hasLocation() ? (*in.getType()->getStruct())[j].type->getQualifier().layoutLocation : baseLoc; - if (baseLoc != -1) { + if (baseLoc != std::numeric_limits::max()) { bool isMemberFound = false; for (auto outIt : pipeOut) { if (baseLoc == outIt.second->getType()->getQualifier().layoutLocation) { @@ -350,4 +352,4 @@ INSTANTIATE_TEST_SUITE_P( } // anonymous namespace } // namespace glslangtest -#endif \ No newline at end of file +#endif From 95e15366e7e675e89b4b4b6e776e73d129c2c271 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Thu, 23 Dec 2021 14:53:44 -0700 Subject: [PATCH 283/365] Unblock unsized error from assert Fix issue #2846. --- .../xfbUnsizedArray.error.tese.out | 35 +++++++++++++++++++ Test/xfbUnsizedArray.error.tese | 8 +++++ glslang/MachineIndependent/ParseHelper.cpp | 10 +++--- glslang/MachineIndependent/linkValidate.cpp | 2 +- gtests/AST.FromFile.cpp | 1 + 5 files changed, 51 insertions(+), 5 deletions(-) create mode 100644 Test/baseResults/xfbUnsizedArray.error.tese.out create mode 100644 Test/xfbUnsizedArray.error.tese diff --git a/Test/baseResults/xfbUnsizedArray.error.tese.out b/Test/baseResults/xfbUnsizedArray.error.tese.out new file mode 100644 index 0000000000..df3495f1d5 --- /dev/null +++ b/Test/baseResults/xfbUnsizedArray.error.tese.out @@ -0,0 +1,35 @@ +xfbUnsizedArray.error.tese +ERROR: 0:4: 'xfb_offset' : unsized array in buffer 0 +ERROR: 1 compilation errors. No code generated. + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +in xfb mode +input primitive = isolines +vertex spacing = none +triangle order = none +using point mode +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:? Linker Objects +0:? 'unsized' (layout( xfb_buffer=0 xfb_offset=0) out unsized 1-element array of 4-component vector of float) + + +Linked tessellation evaluation stage: + + +Shader version: 430 +Requested GL_ARB_enhanced_layouts +in xfb mode +input primitive = isolines +vertex spacing = equal_spacing +triangle order = ccw +using point mode +ERROR: node is still EOpNull! +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:? Linker Objects +0:? 'unsized' (layout( xfb_buffer=0 xfb_offset=0) out 1-element array of 4-component vector of float) + diff --git a/Test/xfbUnsizedArray.error.tese b/Test/xfbUnsizedArray.error.tese new file mode 100644 index 0000000000..a59069bb98 --- /dev/null +++ b/Test/xfbUnsizedArray.error.tese @@ -0,0 +1,8 @@ +#version 430 core +#extension GL_ARB_enhanced_layouts : require +layout(isolines, point_mode) in; +layout (xfb_offset = 0) out vec4 unsized[]; // error: unsized array + +void main() +{ +} diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 0f8d05e9a6..2575d17d81 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -6210,11 +6210,13 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) #ifndef GLSLANG_WEB if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) { - int repeated = intermediate.addXfbBufferOffset(type); - if (repeated >= 0) - error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer); - if (type.isUnsizedArray()) + if (type.isUnsizedArray()) { error(loc, "unsized array", "xfb_offset", "in buffer %d", qualifier.layoutXfbBuffer); + } else { + int repeated = intermediate.addXfbBufferOffset(type); + if (repeated >= 0) + error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer); + } // "The offset must be a multiple of the size of the first component of the first // qualified variable or block member, or a compile-time error results. Further, if applied to an aggregate diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 1fc7d1f142..620be97c97 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -1802,7 +1802,7 @@ unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& contains return size; } - int numComponents; + int numComponents {0}; if (type.isScalar()) numComponents = 1; else if (type.isVector()) diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index b97eddf848..229adaa727 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -235,6 +235,7 @@ INSTANTIATE_TEST_SUITE_P( "findFunction.frag", "constantUnaryConversion.comp", "xfbUnsizedArray.error.vert", + "xfbUnsizedArray.error.tese", "glsl.140.layoutOffset.error.vert", "glsl.430.layoutOffset.error.vert", "glsl.450.subgroup.frag", From 0a59dd5107673d68522baf18a00f7e06e2dff294 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Fri, 7 Jan 2022 13:50:30 +0800 Subject: [PATCH 284/365] Support the floatBitsToint function at GL_ARB_gpu_shader5 Extension. --- Test/baseResults/150.frag.out | 4 +- Test/baseResults/floatBitsToInt.vert.out | 217 ++++++++++++++++++++++ Test/floatBitsToInt.vert | 18 ++ glslang/MachineIndependent/Initialize.cpp | 9 +- gtests/AST.FromFile.cpp | 1 + 5 files changed, 244 insertions(+), 5 deletions(-) create mode 100644 Test/baseResults/floatBitsToInt.vert.out create mode 100644 Test/floatBitsToInt.vert diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out index 3e666586de..066b8bb4e9 100644 --- a/Test/baseResults/150.frag.out +++ b/Test/baseResults/150.frag.out @@ -8,7 +8,9 @@ ERROR: 0:53: 'double' : Reserved word. ERROR: 0:53: 'double' : not supported for this version or the enabled extensions ERROR: 0:53: 'double' : must be qualified as flat in ERROR: 0:57: '=' : cannot convert from ' global double' to ' global int' -ERROR: 0:80: 'floatBitsToInt' : required extension not requested: GL_ARB_shader_bit_encoding +ERROR: 0:80: 'floatBitsToInt' : required extension not requested: Possible extensions include: +GL_ARB_shader_bit_encoding +GL_ARB_gpu_shader5 ERROR: 0:100: 'packSnorm2x16' : required extension not requested: GL_ARB_shading_language_packing ERROR: 0:114: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod ERROR: 0:115: 'textureQueryLOD' : required extension not requested: GL_ARB_texture_query_lod diff --git a/Test/baseResults/floatBitsToInt.vert.out b/Test/baseResults/floatBitsToInt.vert.out new file mode 100644 index 0000000000..6d5185c8a8 --- /dev/null +++ b/Test/baseResults/floatBitsToInt.vert.out @@ -0,0 +1,217 @@ +floatBitsToInt.vert +WARNING: 0:2: '#extension' : extension is only partially supported: GL_ARB_gpu_shader5 + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'result' ( smooth out 4-component vector of float) +0:8 Constant: +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'ret_val' ( temp int) +0:9 floatBitsToInt ( global int) +0:9 'value' ( uniform float) +0:10 Test condition and select ( temp void) +0:10 Condition +0:10 Compare Not Equal ( temp bool) +0:10 'expected_value' ( uniform int) +0:10 'ret_val' ( temp int) +0:10 true case +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'result' ( smooth out 4-component vector of float) +0:10 Constant: +0:10 0.000000 +0:10 0.000000 +0:10 0.000000 +0:10 0.000000 +0:12 switch +0:12 condition +0:12 'gl_VertexID' ( gl_VertexId int VertexId) +0:12 body +0:12 Sequence +0:13 case: with expression +0:13 Constant: +0:13 0 (const int) +0:? Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:13 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 Constant: +0:13 -1.000000 +0:13 1.000000 +0:13 0.000000 +0:13 1.000000 +0:13 Branch: Break +0:14 case: with expression +0:14 Constant: +0:14 1 (const int) +0:? Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:14 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:14 Constant: +0:14 0 (const uint) +0:14 Constant: +0:14 1.000000 +0:14 1.000000 +0:14 0.000000 +0:14 1.000000 +0:14 Branch: Break +0:15 case: with expression +0:15 Constant: +0:15 2 (const int) +0:? Sequence +0:15 move second child to first child ( temp 4-component vector of float) +0:15 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:15 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:15 Constant: +0:15 0 (const uint) +0:15 Constant: +0:15 -1.000000 +0:15 -1.000000 +0:15 0.000000 +0:15 1.000000 +0:15 Branch: Break +0:16 case: with expression +0:16 Constant: +0:16 3 (const int) +0:? Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1.000000 +0:16 -1.000000 +0:16 0.000000 +0:16 1.000000 +0:16 Branch: Break +0:? Linker Objects +0:? 'expected_value' ( uniform int) +0:? 'value' ( uniform float) +0:? 'result' ( smooth out 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + + +Linked vertex stage: + + +Shader version: 150 +Requested GL_ARB_gpu_shader5 +0:? Sequence +0:6 Function Definition: main( ( global void) +0:6 Function Parameters: +0:8 Sequence +0:8 move second child to first child ( temp 4-component vector of float) +0:8 'result' ( smooth out 4-component vector of float) +0:8 Constant: +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:8 1.000000 +0:9 Sequence +0:9 move second child to first child ( temp int) +0:9 'ret_val' ( temp int) +0:9 floatBitsToInt ( global int) +0:9 'value' ( uniform float) +0:10 Test condition and select ( temp void) +0:10 Condition +0:10 Compare Not Equal ( temp bool) +0:10 'expected_value' ( uniform int) +0:10 'ret_val' ( temp int) +0:10 true case +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 'result' ( smooth out 4-component vector of float) +0:10 Constant: +0:10 0.000000 +0:10 0.000000 +0:10 0.000000 +0:10 0.000000 +0:12 switch +0:12 condition +0:12 'gl_VertexID' ( gl_VertexId int VertexId) +0:12 body +0:12 Sequence +0:13 case: with expression +0:13 Constant: +0:13 0 (const int) +0:? Sequence +0:13 move second child to first child ( temp 4-component vector of float) +0:13 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:13 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:13 Constant: +0:13 0 (const uint) +0:13 Constant: +0:13 -1.000000 +0:13 1.000000 +0:13 0.000000 +0:13 1.000000 +0:13 Branch: Break +0:14 case: with expression +0:14 Constant: +0:14 1 (const int) +0:? Sequence +0:14 move second child to first child ( temp 4-component vector of float) +0:14 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:14 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:14 Constant: +0:14 0 (const uint) +0:14 Constant: +0:14 1.000000 +0:14 1.000000 +0:14 0.000000 +0:14 1.000000 +0:14 Branch: Break +0:15 case: with expression +0:15 Constant: +0:15 2 (const int) +0:? Sequence +0:15 move second child to first child ( temp 4-component vector of float) +0:15 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:15 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:15 Constant: +0:15 0 (const uint) +0:15 Constant: +0:15 -1.000000 +0:15 -1.000000 +0:15 0.000000 +0:15 1.000000 +0:15 Branch: Break +0:16 case: with expression +0:16 Constant: +0:16 3 (const int) +0:? Sequence +0:16 move second child to first child ( temp 4-component vector of float) +0:16 gl_Position: direct index for structure ( gl_Position 4-component vector of float Position) +0:16 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:16 Constant: +0:16 0 (const uint) +0:16 Constant: +0:16 1.000000 +0:16 -1.000000 +0:16 0.000000 +0:16 1.000000 +0:16 Branch: Break +0:? Linker Objects +0:? 'expected_value' ( uniform int) +0:? 'value' ( uniform float) +0:? 'result' ( smooth out 4-component vector of float) +0:? 'anon@0' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance}) +0:? 'gl_VertexID' ( gl_VertexId int VertexId) +0:? 'gl_InstanceID' ( gl_InstanceId int InstanceId) + diff --git a/Test/floatBitsToInt.vert b/Test/floatBitsToInt.vert new file mode 100644 index 0000000000..a6bb18a65c --- /dev/null +++ b/Test/floatBitsToInt.vert @@ -0,0 +1,18 @@ +#version 150 +#extension GL_ARB_gpu_shader5 : require +uniform int expected_value; +uniform float value; +out vec4 result; +void main() +{ + result = vec4(1.0, 1.0, 1.0, 1.0); + int ret_val = floatBitsToInt(value); + if (expected_value != ret_val){ result = vec4(0.0, 0.0, 0.0, 0.0); } + + switch (gl_VertexID) { + case 0: gl_Position = vec4(-1.0, 1.0, 0.0, 1.0); break; + case 1: gl_Position = vec4( 1.0, 1.0, 0.0, 1.0); break; + case 2: gl_Position = vec4(-1.0,-1.0, 0.0, 1.0); break; + case 3: gl_Position = vec4( 1.0,-1.0, 0.0, 1.0); break; + } +} \ No newline at end of file diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 3e586c81a8..19e12a01e9 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -8353,10 +8353,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion } if (profile != EEsProfile && version < 330 ) { - symbolTable.setFunctionExtensions("floatBitsToInt", 1, &E_GL_ARB_shader_bit_encoding); - symbolTable.setFunctionExtensions("floatBitsToUint", 1, &E_GL_ARB_shader_bit_encoding); - symbolTable.setFunctionExtensions("intBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding); - symbolTable.setFunctionExtensions("uintBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding); + const char* bitsConvertExt[2] = {E_GL_ARB_shader_bit_encoding, E_GL_ARB_gpu_shader5}; + symbolTable.setFunctionExtensions("floatBitsToInt", 2, bitsConvertExt); + symbolTable.setFunctionExtensions("floatBitsToUint", 2, bitsConvertExt); + symbolTable.setFunctionExtensions("intBitsToFloat", 2, bitsConvertExt); + symbolTable.setFunctionExtensions("uintBitsToFloat", 2, bitsConvertExt); } if (profile != EEsProfile && version < 430 ) { diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index d15107d310..5dc14bb10c 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -292,6 +292,7 @@ INSTANTIATE_TEST_SUITE_P( "GL_ARB_draw_instanced.vert", "GL_ARB_fragment_coord_conventions.vert", "BestMatchFunction.vert", + "floatBitsToInt.vert", })), FileNameAsCustomTestSuffix ); From f1cc215e55e50523e2e39f757fc9876e7b59aca7 Mon Sep 17 00:00:00 2001 From: scribam Date: Sun, 9 Jan 2022 22:28:45 +0100 Subject: [PATCH 285/365] Override CMAKE_INSTALL_PREFIX only if ENABLE_GLSLANG_INSTALL is ON --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index d5b727ac52..f715ac1ea1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -109,7 +109,7 @@ option(ENABLE_OPT "Enables spirv-opt capability if present" ON) option(ENABLE_PCH "Enables Precompiled header" ON) option(ENABLE_CTEST "Enables testing" ON) -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32) +if(ENABLE_GLSLANG_INSTALL AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32) set(CMAKE_INSTALL_PREFIX "install" CACHE STRING "..." FORCE) endif() From 6a3aeb73cdffe7de5fc226cbfee30ad30b218073 Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Mon, 10 Jan 2022 09:43:44 -0500 Subject: [PATCH 286/365] Added initial tests for --glsl-version - Added compilation tests for shader stages using a different version at each stage. --- Test/baseResults/glsl.versionOverride.comp.out | 1 + Test/baseResults/glsl.versionOverride.frag.out | 1 + Test/baseResults/glsl.versionOverride.geom.out | 1 + Test/baseResults/glsl.versionOverride.tese.out | 1 + Test/baseResults/glsl.versionOverride.vert.out | 1 + Test/glsl.versionOverride.comp | 11 +++++++++++ Test/glsl.versionOverride.frag | 11 +++++++++++ Test/glsl.versionOverride.geom | 16 ++++++++++++++++ Test/glsl.versionOverride.tesc | 13 +++++++++++++ Test/glsl.versionOverride.tese | 13 +++++++++++++ Test/glsl.versionOverride.vert | 11 +++++++++++ Test/runtests | 16 ++++++++++++++++ 12 files changed, 96 insertions(+) create mode 100644 Test/baseResults/glsl.versionOverride.comp.out create mode 100644 Test/baseResults/glsl.versionOverride.frag.out create mode 100644 Test/baseResults/glsl.versionOverride.geom.out create mode 100644 Test/baseResults/glsl.versionOverride.tese.out create mode 100644 Test/baseResults/glsl.versionOverride.vert.out create mode 100644 Test/glsl.versionOverride.comp create mode 100644 Test/glsl.versionOverride.frag create mode 100644 Test/glsl.versionOverride.geom create mode 100644 Test/glsl.versionOverride.tesc create mode 100644 Test/glsl.versionOverride.tese create mode 100644 Test/glsl.versionOverride.vert diff --git a/Test/baseResults/glsl.versionOverride.comp.out b/Test/baseResults/glsl.versionOverride.comp.out new file mode 100644 index 0000000000..591ce4d985 --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.comp.out @@ -0,0 +1 @@ +glsl.versionOverride.comp diff --git a/Test/baseResults/glsl.versionOverride.frag.out b/Test/baseResults/glsl.versionOverride.frag.out new file mode 100644 index 0000000000..b759a47f24 --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.frag.out @@ -0,0 +1 @@ +glsl.versionOverride.frag diff --git a/Test/baseResults/glsl.versionOverride.geom.out b/Test/baseResults/glsl.versionOverride.geom.out new file mode 100644 index 0000000000..758d9d49cc --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.geom.out @@ -0,0 +1 @@ +glsl.versionOverride.geom diff --git a/Test/baseResults/glsl.versionOverride.tese.out b/Test/baseResults/glsl.versionOverride.tese.out new file mode 100644 index 0000000000..c3632e8aef --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.tese.out @@ -0,0 +1 @@ +glsl.versionOverride.tese diff --git a/Test/baseResults/glsl.versionOverride.vert.out b/Test/baseResults/glsl.versionOverride.vert.out new file mode 100644 index 0000000000..d42dc3d8cd --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.vert.out @@ -0,0 +1 @@ +glsl.versionOverride.vert diff --git a/Test/glsl.versionOverride.comp b/Test/glsl.versionOverride.comp new file mode 100644 index 0000000000..030d6e80b3 --- /dev/null +++ b/Test/glsl.versionOverride.comp @@ -0,0 +1,11 @@ +/* + +glslangValidator.exe --glsl-version 460 -V -S comp -o glsl.versionOverride.comp.out glsl.versionOverride.comp + +*/ + +#version 330 + +void main() +{ +} \ No newline at end of file diff --git a/Test/glsl.versionOverride.frag b/Test/glsl.versionOverride.frag new file mode 100644 index 0000000000..c5d3201497 --- /dev/null +++ b/Test/glsl.versionOverride.frag @@ -0,0 +1,11 @@ +/* + +glslangValidator.exe --glsl-version 420 -V -S frag -o glsl.versionOverride.frag.out glsl.versionOverride.frag + +*/ + +#version 330 + +void main() +{ +} \ No newline at end of file diff --git a/Test/glsl.versionOverride.geom b/Test/glsl.versionOverride.geom new file mode 100644 index 0000000000..d6ca4a6e79 --- /dev/null +++ b/Test/glsl.versionOverride.geom @@ -0,0 +1,16 @@ +/* + +glslangValidator.exe --glsl-version 430 -V -S geom -o glsl.versionOverride.geom.out glsl.versionOverride.geom + +*/ + +#version 330 + +layout (points) in; +layout (line_strip, max_vertices = 2) out; + +void main() { + EmitVertex(); + EmitVertex(); + EndPrimitive(); +} \ No newline at end of file diff --git a/Test/glsl.versionOverride.tesc b/Test/glsl.versionOverride.tesc new file mode 100644 index 0000000000..4157e62d1a --- /dev/null +++ b/Test/glsl.versionOverride.tesc @@ -0,0 +1,13 @@ +/* + +glslangValidator.exe --glsl-version 440 -V -S tesc -o glsl.versionOverride.tesc.out glsl.versionOverride.tesc + +*/ + +#version 330 + +layout(vertices = 3) out; + +void main() +{ +} \ No newline at end of file diff --git a/Test/glsl.versionOverride.tese b/Test/glsl.versionOverride.tese new file mode 100644 index 0000000000..cc7963497c --- /dev/null +++ b/Test/glsl.versionOverride.tese @@ -0,0 +1,13 @@ +/* + +glslangValidator.exe --glsl-version 450 -V -S tese -o glsl.versionOverride.tese.out glsl.versionOverride.tese + +*/ + +#version 330 + +layout(triangles) in; + +void main() +{ +} \ No newline at end of file diff --git a/Test/glsl.versionOverride.vert b/Test/glsl.versionOverride.vert new file mode 100644 index 0000000000..6ddbf6291e --- /dev/null +++ b/Test/glsl.versionOverride.vert @@ -0,0 +1,11 @@ +/* + +glslangValidator.exe --glsl-version 410 -V -S vert -o glsl.versionOverride.vert.out glsl.versionOverride.vert + +*/ + +#version 330 + +void main() +{ +} \ No newline at end of file diff --git a/Test/runtests b/Test/runtests index 63c3a03bb9..c7df2e0b89 100755 --- a/Test/runtests +++ b/Test/runtests @@ -298,6 +298,22 @@ diff -b $BASEDIR/hlsl.autosampledtextures.frag.out $TARGETDIR/hlsl.autosampledte run --auto-sampled-textures -H -Od -S frag glsl.autosampledtextures.frag > $TARGETDIR/glsl.autosampledtextures.frag.out diff -b $BASEDIR/glsl.autosampledtextures.frag.out $TARGETDIR/glsl.autosampledtextures.frag.out || HASERROR=1 +# Test --glsl-version +# +echo "Testing --glsl-version" +run --glsl-version 410 -V -S vert glsl.versionOverride.vert > $TARGETDIR/glsl.versionOverride.vert.out +diff -b $BASEDIR/glsl.versionOverride.vert.out $TARGETDIR/glsl.versionOverride.vert.out || HASERROR=1 +run --glsl-version 420 -V -S frag glsl.versionOverride.frag > $TARGETDIR/glsl.versionOverride.frag.out +diff -b $BASEDIR/glsl.versionOverride.frag.out $TARGETDIR/glsl.versionOverride.frag.out || HASERROR=1 +run --glsl-version 430 -V -S geom glsl.versionOverride.geom > $TARGETDIR/glsl.versionOverride.geom.out +diff -b $BASEDIR/glsl.versionOverride.geom.out $TARGETDIR/glsl.versionOverride.geom.out || HASERROR=1 +run --glsl-version 440 -V -S tesc glsl.versionOverride.tesc > $TARGETDIR/glsl.versionOverride.tesc.out +diff -b $BASEDIR/glsl.versionOverride.tesc.out $TARGETDIR/glsl.versionOverride.tesc.out || HASERROR=1 +run --glsl-version 450 -V -S tese glsl.versionOverride.tese > $TARGETDIR/glsl.versionOverride.tese.out +diff -b $BASEDIR/glsl.versionOverride.tese.out $TARGETDIR/glsl.versionOverride.tese.out || HASERROR=1 +run --glsl-version 460 -V -S comp glsl.versionOverride.comp > $TARGETDIR/glsl.versionOverride.comp.out +diff -b $BASEDIR/glsl.versionOverride.comp.out $TARGETDIR/glsl.versionOverride.comp.out || HASERROR=1 + # # Final checking # From 8f2c400a290a521b16c6f2f16ea5e3f08b48c281 Mon Sep 17 00:00:00 2001 From: Hai Nguyen Date: Mon, 10 Jan 2022 09:56:54 -0500 Subject: [PATCH 287/365] Added missing test result --- Test/baseResults/glsl.versionOverride.tesc.out | 1 + 1 file changed, 1 insertion(+) create mode 100644 Test/baseResults/glsl.versionOverride.tesc.out diff --git a/Test/baseResults/glsl.versionOverride.tesc.out b/Test/baseResults/glsl.versionOverride.tesc.out new file mode 100644 index 0000000000..4aedf0d8e7 --- /dev/null +++ b/Test/baseResults/glsl.versionOverride.tesc.out @@ -0,0 +1 @@ +glsl.versionOverride.tesc From 5944f672a83cb81d4307ba41316c14a35c81c1b1 Mon Sep 17 00:00:00 2001 From: Alan Baker Date: Mon, 10 Jan 2022 10:38:49 -0500 Subject: [PATCH 288/365] Add missing license to LICENSE.txt * This license is used by: * SPIRV/GLSL.ext.AMD.h * SPIRV/GLSL.ext.EXT.h * SPIRV/GLSL.ext.KHR.h * SPIRV/GLSL.ext.NV.h --- LICENSE.txt | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/LICENSE.txt b/LICENSE.txt index 5f58565dc4..f93d62f4a2 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -337,7 +337,7 @@ GPL 3 with special bison exception ================================================================================ -------------------------------------------------------------------------------- -The preprocessor has the core licenses stated above, plus an additional licence: +The preprocessor has the core licenses stated above, plus additional licences: /****************************************************************************\ Copyright (c) 2002, NVIDIA Corporation. @@ -382,3 +382,29 @@ NVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \****************************************************************************/ + +/* +** Copyright (c) 2014-2016 The Khronos Group Inc. +** +** Permission is hereby granted, free of charge, to any person obtaining a copy +** of this software and/or associated documentation files (the "Materials"), +** to deal in the Materials without restriction, including without limitation +** the rights to use, copy, modify, merge, publish, distribute, sublicense, +** and/or sell copies of the Materials, and to permit persons to whom the +** Materials are furnished to do so, subject to the following conditions: +** +** The above copyright notice and this permission notice shall be included in +** all copies or substantial portions of the Materials. +** +** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS +** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND +** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/ +** +** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS +** IN THE MATERIALS. +*/ From 66ac0df61b99d87a3a3458683f32f788deaf2b4f Mon Sep 17 00:00:00 2001 From: Nicolas Morales Date: Tue, 11 Jan 2022 11:40:50 +0100 Subject: [PATCH 289/365] #2861: Check for macOS systems before adding "--no-undefined" to linker flags as it is not compatible with the default linker. --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f715ac1ea1..c8a5a36b05 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -163,7 +163,7 @@ if(${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") add_compile_options(-Werror=deprecated-copy) endif() - if(NOT CMAKE_VERSION VERSION_LESS "3.13") + if(NOT CMAKE_VERSION VERSION_LESS "3.13" AND NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin") # Error if there's symbols that are not found at link time. # add_link_options() was added in CMake 3.13 - if using an earlier # version don't set this - it should be caught by presubmits anyway. From ab87ffe7cf67a865cfe9c4d2b002d3fbeb5dc726 Mon Sep 17 00:00:00 2001 From: Nicolas Morales Date: Tue, 11 Jan 2022 11:40:54 +0100 Subject: [PATCH 290/365] #2861: If compiling with macOS and GCC, default ENABLE_PCH to false since CMake will generate incompatible Xarch flags for the precompiled headers --- CMakeLists.txt | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index c8a5a36b05..43533c14d3 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -106,7 +106,14 @@ CMAKE_DEPENDENT_OPTION(ENABLE_HLSL option(ENABLE_RTTI "Enables RTTI" OFF) option(ENABLE_EXCEPTIONS "Enables Exceptions" OFF) option(ENABLE_OPT "Enables spirv-opt capability if present" ON) -option(ENABLE_PCH "Enables Precompiled header" ON) + +if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") + # Workaround for CMake behavior on Mac OS with gcc, cmake generates -Xarch_* arguments + # which gcc rejects + option(ENABLE_PCH "Enables Precompiled header" OFF) +else() + option(ENABLE_PCH "Enables Precompiled header" ON) +endif() option(ENABLE_CTEST "Enables testing" ON) if(ENABLE_GLSLANG_INSTALL AND CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT AND WIN32) From 140a76a447ab298f34630447f20968a2c460511e Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 11 Jan 2022 13:13:50 -0700 Subject: [PATCH 291/365] Temporarily disable spirv1.6 tests These tests will be re-enabled when a Vulkan version is released that supports spirv1.6. Fixes #2858 --- glslang/Public/ShaderLang.h | 5 ++++- gtests/Hlsl.FromFile.cpp | 30 ++++++++++++++++-------------- gtests/Spv.FromFile.cpp | 34 ++++++++++++++++++---------------- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 7e5d2cd3e5..7744abf025 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -162,8 +162,11 @@ typedef enum { LAST_ELEMENT_MARKER(EShTargetCount), } EShTargetLanguage; +// TODO(greg-lunarg): Fix non-determinism problem with Universal +// https://github.com/KhronosGroup/glslang/issues/2858 + typedef enum { - EShTargetUniversal = 0, // Universal + EShTargetUniversal = 0, // Universal - Do not use, see comment above EShTargetVulkan_1_0 = (1 << 22), // Vulkan 1.0 EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), // Vulkan 1.1 EShTargetVulkan_1_2 = (1 << 22) | (2 << 12), // Vulkan 1.2 diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 73842a8a22..6c9591056d 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -59,7 +59,7 @@ std::string FileNameAsCustomTestSuffix( using HlslCompileTest = GlslangTest<::testing::TestWithParam>; using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam>; -using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam>; +//using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam>; using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam>; using HlslLegalizeTest = GlslangTest<::testing::TestWithParam>; using HlslDebugTest = GlslangTest<::testing::TestWithParam>; @@ -82,12 +82,14 @@ TEST_P(HlslVulkan1_1CompileTest, FromFile) Target::BothASTAndSpv, true, GetParam().entryPoint); } -TEST_P(HlslSpv1_6CompileTest, FromFile) -{ - loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, - Source::HLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, - Target::BothASTAndSpv, true, GetParam().entryPoint); -} +// TODO(greg-lunarg): Re-enable tests when Vulkan1.3 ClientTarget is available + +//TEST_P(HlslSpv1_6CompileTest, FromFile) +//{ +// loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, +// Source::HLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, +// Target::BothASTAndSpv, true, GetParam().entryPoint); +//} TEST_P(HlslCompileAndFlattenTest, FromFile) { @@ -459,13 +461,13 @@ INSTANTIATE_TEST_SUITE_P( // clang-format on // clang-format off -INSTANTIATE_TEST_SUITE_P( - ToSpirv, HlslSpv1_6CompileTest, - ::testing::ValuesIn(std::vector{ - {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"} - }), - FileNameAsCustomTestSuffix -); +//INSTANTIATE_TEST_SUITE_P( +// ToSpirv, HlslSpv1_6CompileTest, +// ::testing::ValuesIn(std::vector{ +// {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"} +// }), +// FileNameAsCustomTestSuffix +//); // clang-format on // clang-format off diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 85f5d03c31..ca13b88d77 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -69,7 +69,7 @@ using CompileVulkanToSpirvDeadCodeElimTest = GlslangTest<::testing::TestWithPara using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam>; using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam>; using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam>; -using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam>; +//using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam>; using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam>; using VulkanSemantics = GlslangTest<::testing::TestWithParam>; using OpenGLSemantics = GlslangTest<::testing::TestWithParam>; @@ -123,12 +123,14 @@ TEST_P(CompileToSpirv14Test, FromFile) Target::Spv); } -TEST_P(CompileToSpirv16Test, FromFile) -{ - loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), - Source::GLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, - Target::Spv); -} +// TODO(greg-lunarg): Re-enable tests when Vulkan1.3 ClientTarget is available + +//TEST_P(CompileToSpirv16Test, FromFile) +//{ +// loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), +// Source::GLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, +// Target::Spv); +//} // Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully // generate SPIR-V. @@ -630,15 +632,15 @@ INSTANTIATE_TEST_SUITE_P( ); // clang-format off -INSTANTIATE_TEST_SUITE_P( - Glsl, CompileToSpirv16Test, - ::testing::ValuesIn(std::vector({ - "spv.1.6.conditionalDiscard.frag", - "spv.1.6.helperInvocation.frag", - "spv.1.6.specConstant.comp", - })), - FileNameAsCustomTestSuffix -); +//INSTANTIATE_TEST_SUITE_P( +// Glsl, CompileToSpirv16Test, +// ::testing::ValuesIn(std::vector({ +// "spv.1.6.conditionalDiscard.frag", +// "spv.1.6.helperInvocation.frag", +// "spv.1.6.specConstant.comp", +// })), +// FileNameAsCustomTestSuffix +//); // clang-format off From d465ac12ddb207fbc805b0f9952297afbb69f8e4 Mon Sep 17 00:00:00 2001 From: Ben Clayton Date: Thu, 13 Jan 2022 12:14:34 +0000 Subject: [PATCH 292/365] Update LICENSE.txt Expand the GPL 3 with special bison exception to the fully expanded license. Required for Google's updated license checker. --- LICENSE.txt | 664 +++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 635 insertions(+), 29 deletions(-) diff --git a/LICENSE.txt b/LICENSE.txt index f93d62f4a2..054e68a461 100644 --- a/LICENSE.txt +++ b/LICENSE.txt @@ -303,35 +303,641 @@ APACHE LICENSE, VERSION 2.0 GPL 3 with special bison exception -------------------------------------------------------------------------------- - Bison implementation for Yacc-like parsers in C - - Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc. - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - - As a special exception, you may create a larger work that contains - part or all of the Bison parser skeleton and distribute that work - under terms of your choice, so long as that work isn't itself a - parser generator using the skeleton or a modified version thereof - as a parser skeleton. Alternatively, if you modify or redistribute - the parser skeleton itself, you may (at your option) remove this - special exception, which will cause the skeleton and the resulting - Bison output files to be licensed under the GNU General Public - License without this special exception. - - This special exception was added by the Free Software Foundation in - version 2.2 of Bison. + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + +Bison Exception + +As a special exception, you may create a larger work that contains part or all +of the Bison parser skeleton and distribute that work under terms of your +choice, so long as that work isn't itself a parser generator using the skeleton +or a modified version thereof as a parser skeleton. Alternatively, if you +modify or redistribute the parser skeleton itself, you may (at your option) +remove this special exception, which will cause the skeleton and the resulting +Bison output files to be licensed under the GNU General Public License without +this special exception. + +This special exception was added by the Free Software Foundation in version +2.2 of Bison. + + END OF TERMS AND CONDITIONS -------------------------------------------------------------------------------- ================================================================================ From ed5f33e6acc945318eac3d43bc401e7497c69be4 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 25 Jan 2022 13:40:07 -0700 Subject: [PATCH 293/365] Fix comment for setEnvInput() Specifically, add text to clarify dialect and dialectVersion Fixes #2872 --- glslang/Public/ShaderLang.h | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 7744abf025..29b75354ac 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -150,8 +150,8 @@ typedef enum { typedef enum { EShClientNone, // use when there is no client, e.g. for validation - EShClientVulkan, - EShClientOpenGL, + EShClientVulkan, // as GLSL dialect, specifies KHR_vulkan_glsl extension + EShClientOpenGL, // as GLSL dialect, specifies ARB_gl_spirv extension LAST_ELEMENT_MARKER(EShClientCount), } EShClient; @@ -518,6 +518,9 @@ class TShader { // use EShClientNone and version of 0, e.g. for validation mode. // Note 'version' does not describe the target environment, // just the version of the source dialect to compile under. + // For example, to choose the Vulkan dialect of GLSL defined by + // version 100 of the KHR_vulkan_glsl extension: lang = EShSourceGlsl, + // dialect = EShClientVulkan, and version = 100. // // See the definitions of TEnvironment, EShSource, EShLanguage, // and EShClient for choices and more detail. From 9ebd8ff6c1d2c401cff3037cd798814001c92947 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 26 Jan 2022 14:45:58 -0700 Subject: [PATCH 294/365] Add Vulkan 1.3 support Also update known goods to Vulkan 1.3 support Also re-enable SPIR-V 1.6 tests with vulkan1.3 target Also re-cache SPIRV 1.6 header which somehow regressed back to 1.5 --- SPIRV/SpvTools.cpp | 22 +- SPIRV/spirv.hpp | 209 +++++++++++++++++- StandAlone/StandAlone.cpp | 12 +- .../baseResults/hlsl.spv.1.6.discard.frag.out | 4 +- .../spv.1.6.conditionalDiscard.frag.out | 3 +- .../spv.1.6.helperInvocation.frag.out | 2 +- glslang/CInterface/glslang_c_interface.cpp | 2 + glslang/Include/glslang_c_shader_types.h | 3 +- .../MachineIndependent/localintermediate.h | 3 + glslang/Public/ShaderLang.h | 7 +- gtests/Hlsl.FromFile.cpp | 30 ++- gtests/Spv.FromFile.cpp | 34 ++- known_good.json | 4 +- 13 files changed, 261 insertions(+), 74 deletions(-) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index f78a791775..e8f825119a 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -68,26 +68,8 @@ spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLog } case glslang::EShTargetVulkan_1_2: return spv_target_env::SPV_ENV_VULKAN_1_2; - case glslang::EShTargetUniversal: - switch (spvVersion.spv) { - case EShTargetSpv_1_0: - return spv_target_env::SPV_ENV_UNIVERSAL_1_0; - case EShTargetSpv_1_1: - return spv_target_env::SPV_ENV_UNIVERSAL_1_1; - case EShTargetSpv_1_2: - return spv_target_env::SPV_ENV_UNIVERSAL_1_2; - case EShTargetSpv_1_3: - return spv_target_env::SPV_ENV_UNIVERSAL_1_3; - case EShTargetSpv_1_4: - return spv_target_env::SPV_ENV_UNIVERSAL_1_4; - case EShTargetSpv_1_5: - return spv_target_env::SPV_ENV_UNIVERSAL_1_5; - case EShTargetSpv_1_6: - return spv_target_env::SPV_ENV_UNIVERSAL_1_6; - default: - logger->missingFunctionality("Target version for SPIRV-Tools validator"); - return spv_target_env::SPV_ENV_UNIVERSAL_1_6; - } + case glslang::EShTargetVulkan_1_3: + return spv_target_env::SPV_ENV_VULKAN_1_3; default: break; } diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index c1abd2640e..a8642006a2 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -49,12 +49,12 @@ namespace spv { typedef unsigned int Id; -#define SPV_VERSION 0x10500 -#define SPV_REVISION 4 +#define SPV_VERSION 0x10600 +#define SPV_REVISION 1 static const unsigned int MagicNumber = 0x07230203; -static const unsigned int Version = 0x00010500; -static const unsigned int Revision = 4; +static const unsigned int Version = 0x00010600; +static const unsigned int Revision = 1; static const unsigned int OpCodeMask = 0xffff; static const unsigned int WordCountShift = 16; @@ -65,6 +65,7 @@ enum SourceLanguage { SourceLanguageOpenCL_C = 3, SourceLanguageOpenCL_CPP = 4, SourceLanguageHLSL = 5, + SourceLanguageCPP_for_OpenCL = 6, SourceLanguageMax = 0x7fffffff, }; @@ -352,6 +353,8 @@ enum ImageOperandsShift { ImageOperandsVolatileTexelKHRShift = 11, ImageOperandsSignExtendShift = 12, ImageOperandsZeroExtendShift = 13, + ImageOperandsNontemporalShift = 14, + ImageOperandsOffsetsShift = 16, ImageOperandsMax = 0x7fffffff, }; @@ -375,6 +378,8 @@ enum ImageOperandsMask { ImageOperandsVolatileTexelKHRMask = 0x00000800, ImageOperandsSignExtendMask = 0x00001000, ImageOperandsZeroExtendMask = 0x00002000, + ImageOperandsNontemporalMask = 0x00004000, + ImageOperandsOffsetsMask = 0x00010000, }; enum FPFastMathModeShift { @@ -491,6 +496,7 @@ enum Decoration { DecorationPerPrimitiveNV = 5271, DecorationPerViewNV = 5272, DecorationPerTaskNV = 5273, + DecorationPerVertexKHR = 5285, DecorationPerVertexNV = 5285, DecorationNonUniform = 5300, DecorationNonUniformEXT = 5300, @@ -498,6 +504,10 @@ enum Decoration { DecorationRestrictPointerEXT = 5355, DecorationAliasedPointer = 5356, DecorationAliasedPointerEXT = 5356, + DecorationBindlessSamplerNV = 5398, + DecorationBindlessImageNV = 5399, + DecorationBoundSamplerNV = 5400, + DecorationBoundImageNV = 5401, DecorationSIMTCallINTEL = 5599, DecorationReferencedIndirectlyINTEL = 5602, DecorationClobberINTEL = 5607, @@ -537,6 +547,7 @@ enum Decoration { DecorationFunctionFloatingPointModeINTEL = 6080, DecorationSingleElementVectorINTEL = 6085, DecorationVectorComputeCallableFunctionINTEL = 6087, + DecorationMediaBlockIOINTEL = 6140, DecorationMax = 0x7fffffff, }; @@ -621,7 +632,9 @@ enum BuiltIn { BuiltInLayerPerViewNV = 5279, BuiltInMeshViewCountNV = 5280, BuiltInMeshViewIndicesNV = 5281, + BuiltInBaryCoordKHR = 5286, BuiltInBaryCoordNV = 5286, + BuiltInBaryCoordNoPerspKHR = 5287, BuiltInBaryCoordNoPerspNV = 5287, BuiltInFragSizeEXT = 5292, BuiltInFragmentSizeNV = 5292, @@ -722,6 +735,7 @@ enum FunctionControlShift { FunctionControlDontInlineShift = 1, FunctionControlPureShift = 2, FunctionControlConstShift = 3, + FunctionControlOptNoneINTELShift = 16, FunctionControlMax = 0x7fffffff, }; @@ -731,6 +745,7 @@ enum FunctionControlMask { FunctionControlDontInlineMask = 0x00000002, FunctionControlPureMask = 0x00000004, FunctionControlConstMask = 0x00000008, + FunctionControlOptNoneINTELMask = 0x00010000, }; enum MemorySemanticsShift { @@ -911,6 +926,7 @@ enum Capability { CapabilityGroupNonUniformQuad = 68, CapabilityShaderLayer = 69, CapabilityShaderViewportIndex = 70, + CapabilityUniformDecoration = 71, CapabilityFragmentShadingRateKHR = 4422, CapabilitySubgroupBallotKHR = 4423, CapabilityDrawParameters = 4427, @@ -959,6 +975,7 @@ enum Capability { CapabilityFragmentFullyCoveredEXT = 5265, CapabilityMeshShadingNV = 5266, CapabilityImageFootprintNV = 5282, + CapabilityFragmentBarycentricKHR = 5284, CapabilityFragmentBarycentricNV = 5284, CapabilityComputeDerivativeGroupQuadsNV = 5288, CapabilityFragmentDensityEXT = 5291, @@ -1005,6 +1022,7 @@ enum Capability { CapabilityFragmentShaderPixelInterlockEXT = 5378, CapabilityDemoteToHelperInvocation = 5379, CapabilityDemoteToHelperInvocationEXT = 5379, + CapabilityBindlessTextureNV = 5390, CapabilitySubgroupShuffleINTEL = 5568, CapabilitySubgroupBufferBlockIOINTEL = 5569, CapabilitySubgroupImageBlockIOINTEL = 5570, @@ -1029,6 +1047,7 @@ enum Capability { CapabilityFPGAMemoryAttributesINTEL = 5824, CapabilityFPFastMathModeINTEL = 5837, CapabilityArbitraryPrecisionIntegersINTEL = 5844, + CapabilityArbitraryPrecisionFloatingPointINTEL = 5845, CapabilityUnstructuredLoopControlsINTEL = 5886, CapabilityFPGALoopControlsINTEL = 5888, CapabilityKernelAttributesINTEL = 5892, @@ -1037,14 +1056,26 @@ enum Capability { CapabilityFPGAClusterAttributesINTEL = 5904, CapabilityLoopFuseINTEL = 5906, CapabilityFPGABufferLocationINTEL = 5920, + CapabilityArbitraryPrecisionFixedPointINTEL = 5922, CapabilityUSMStorageClassesINTEL = 5935, CapabilityIOPipesINTEL = 5943, CapabilityBlockingPipesINTEL = 5945, CapabilityFPGARegINTEL = 5948, + CapabilityDotProductInputAll = 6016, + CapabilityDotProductInputAllKHR = 6016, + CapabilityDotProductInput4x8Bit = 6017, + CapabilityDotProductInput4x8BitKHR = 6017, + CapabilityDotProductInput4x8BitPacked = 6018, + CapabilityDotProductInput4x8BitPackedKHR = 6018, + CapabilityDotProduct = 6019, + CapabilityDotProductKHR = 6019, + CapabilityBitInstructions = 6025, CapabilityAtomicFloat32AddEXT = 6033, CapabilityAtomicFloat64AddEXT = 6034, CapabilityLongConstantCompositeINTEL = 6089, + CapabilityOptNoneINTEL = 6094, CapabilityAtomicFloat16AddEXT = 6095, + CapabilityDebugInfoModuleINTEL = 6114, CapabilityMax = 0x7fffffff, }; @@ -1123,6 +1154,32 @@ enum FPOperationMode { FPOperationModeMax = 0x7fffffff, }; +enum QuantizationModes { + QuantizationModesTRN = 0, + QuantizationModesTRN_ZERO = 1, + QuantizationModesRND = 2, + QuantizationModesRND_ZERO = 3, + QuantizationModesRND_INF = 4, + QuantizationModesRND_MIN_INF = 5, + QuantizationModesRND_CONV = 6, + QuantizationModesRND_CONV_ODD = 7, + QuantizationModesMax = 0x7fffffff, +}; + +enum OverflowModes { + OverflowModesWRAP = 0, + OverflowModesSAT = 1, + OverflowModesSAT_ZERO = 2, + OverflowModesSAT_SYM = 3, + OverflowModesMax = 0x7fffffff, +}; + +enum PackedVectorFormat { + PackedVectorFormatPackedVectorFormat4x8Bit = 0, + PackedVectorFormatPackedVectorFormat4x8BitKHR = 0, + PackedVectorFormatMax = 0x7fffffff, +}; + enum Op { OpNop = 0, OpUndef = 1, @@ -1480,6 +1537,18 @@ enum Op { OpConvertUToAccelerationStructureKHR = 4447, OpIgnoreIntersectionKHR = 4448, OpTerminateRayKHR = 4449, + OpSDot = 4450, + OpSDotKHR = 4450, + OpUDot = 4451, + OpUDotKHR = 4451, + OpSUDot = 4452, + OpSUDotKHR = 4452, + OpSDotAccSat = 4453, + OpSDotAccSatKHR = 4453, + OpUDotAccSat = 4454, + OpUDotAccSatKHR = 4454, + OpSUDotAccSat = 4455, + OpSUDotAccSatKHR = 4455, OpTypeRayQueryKHR = 4472, OpRayQueryInitializeKHR = 4473, OpRayQueryTerminateKHR = 4474, @@ -1518,8 +1587,16 @@ enum Op { OpCooperativeMatrixLengthNV = 5362, OpBeginInvocationInterlockEXT = 5364, OpEndInvocationInterlockEXT = 5365, + OpDemoteToHelperInvocation = 5380, OpDemoteToHelperInvocationEXT = 5380, OpIsHelperInvocationEXT = 5381, + OpConvertUToImageNV = 5391, + OpConvertUToSamplerNV = 5392, + OpConvertImageToUNV = 5393, + OpConvertSamplerToUNV = 5394, + OpConvertUToSampledImageNV = 5395, + OpConvertSampledImageToUNV = 5396, + OpSamplerImageAddressingModeNV = 5397, OpSubgroupShuffleINTEL = 5571, OpSubgroupShuffleDownINTEL = 5572, OpSubgroupShuffleUpINTEL = 5573, @@ -1544,7 +1621,7 @@ enum Op { OpUSubSatINTEL = 5596, OpIMul32x16INTEL = 5597, OpUMul32x16INTEL = 5598, - OpConstFunctionPointerINTEL = 5600, + OpConstantFunctionPointerINTEL = 5600, OpFunctionPointerCallINTEL = 5601, OpAsmTargetINTEL = 5609, OpAsmINTEL = 5610, @@ -1678,7 +1755,59 @@ enum Op { OpVariableLengthArrayINTEL = 5818, OpSaveMemoryINTEL = 5819, OpRestoreMemoryINTEL = 5820, + OpArbitraryFloatSinCosPiINTEL = 5840, + OpArbitraryFloatCastINTEL = 5841, + OpArbitraryFloatCastFromIntINTEL = 5842, + OpArbitraryFloatCastToIntINTEL = 5843, + OpArbitraryFloatAddINTEL = 5846, + OpArbitraryFloatSubINTEL = 5847, + OpArbitraryFloatMulINTEL = 5848, + OpArbitraryFloatDivINTEL = 5849, + OpArbitraryFloatGTINTEL = 5850, + OpArbitraryFloatGEINTEL = 5851, + OpArbitraryFloatLTINTEL = 5852, + OpArbitraryFloatLEINTEL = 5853, + OpArbitraryFloatEQINTEL = 5854, + OpArbitraryFloatRecipINTEL = 5855, + OpArbitraryFloatRSqrtINTEL = 5856, + OpArbitraryFloatCbrtINTEL = 5857, + OpArbitraryFloatHypotINTEL = 5858, + OpArbitraryFloatSqrtINTEL = 5859, + OpArbitraryFloatLogINTEL = 5860, + OpArbitraryFloatLog2INTEL = 5861, + OpArbitraryFloatLog10INTEL = 5862, + OpArbitraryFloatLog1pINTEL = 5863, + OpArbitraryFloatExpINTEL = 5864, + OpArbitraryFloatExp2INTEL = 5865, + OpArbitraryFloatExp10INTEL = 5866, + OpArbitraryFloatExpm1INTEL = 5867, + OpArbitraryFloatSinINTEL = 5868, + OpArbitraryFloatCosINTEL = 5869, + OpArbitraryFloatSinCosINTEL = 5870, + OpArbitraryFloatSinPiINTEL = 5871, + OpArbitraryFloatCosPiINTEL = 5872, + OpArbitraryFloatASinINTEL = 5873, + OpArbitraryFloatASinPiINTEL = 5874, + OpArbitraryFloatACosINTEL = 5875, + OpArbitraryFloatACosPiINTEL = 5876, + OpArbitraryFloatATanINTEL = 5877, + OpArbitraryFloatATanPiINTEL = 5878, + OpArbitraryFloatATan2INTEL = 5879, + OpArbitraryFloatPowINTEL = 5880, + OpArbitraryFloatPowRINTEL = 5881, + OpArbitraryFloatPowNINTEL = 5882, OpLoopControlINTEL = 5887, + OpFixedSqrtINTEL = 5923, + OpFixedRecipINTEL = 5924, + OpFixedRsqrtINTEL = 5925, + OpFixedSinINTEL = 5926, + OpFixedCosINTEL = 5927, + OpFixedSinCosINTEL = 5928, + OpFixedSinPiINTEL = 5929, + OpFixedCosPiINTEL = 5930, + OpFixedSinCosPiINTEL = 5931, + OpFixedLogINTEL = 5932, + OpFixedExpINTEL = 5933, OpPtrCastToCrossWorkgroupINTEL = 5934, OpCrossWorkgroupCastToPtrINTEL = 5938, OpReadPipeBlockingINTEL = 5946, @@ -2070,6 +2199,12 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break; case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break; case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break; + case OpSDot: *hasResult = true; *hasResultType = true; break; + case OpUDot: *hasResult = true; *hasResultType = true; break; + case OpSUDot: *hasResult = true; *hasResultType = true; break; + case OpSDotAccSat: *hasResult = true; *hasResultType = true; break; + case OpUDotAccSat: *hasResult = true; *hasResultType = true; break; + case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break; case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break; case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break; case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break; @@ -2106,8 +2241,15 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { 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 OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break; case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break; + case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break; + case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break; + case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break; + case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break; + case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break; + case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break; + case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break; case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break; case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break; case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break; @@ -2132,7 +2274,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break; case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break; case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break; - case OpConstFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; + case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break; case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break; case OpAsmINTEL: *hasResult = true; *hasResultType = true; break; @@ -2264,7 +2406,59 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) { case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break; case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break; case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break; + case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break; + case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break; case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break; + case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break; + case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break; case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break; case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break; case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break; @@ -2312,3 +2506,4 @@ inline FragmentShadingRateMask operator|(FragmentShadingRateMask a, FragmentShad } // end namespace spv #endif // #ifndef spirv_HPP + diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index f5ce6317f1..72f552274d 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -767,6 +767,9 @@ void ProcessArguments(std::vector>& workItem } else if (strcmp(argv[1], "vulkan1.2") == 0) { setVulkanSpv(); ClientVersion = glslang::EShTargetVulkan_1_2; + } else if (strcmp(argv[1], "vulkan1.3") == 0) { + setVulkanSpv(); + ClientVersion = glslang::EShTargetVulkan_1_3; } else if (strcmp(argv[1], "opengl") == 0) { setOpenGlSpv(); ClientVersion = glslang::EShTargetOpenGL_450; @@ -793,7 +796,7 @@ void ProcessArguments(std::vector>& workItem TargetVersion = glslang::EShTargetSpv_1_6; } else Error("--target-env expected one of: vulkan1.0, vulkan1.1, vulkan1.2,\n" - "opengl, spirv1.0, spirv1.1, spirv1.2, spirv1.3,\n" + "vulkan1.3, opengl, spirv1.0, spirv1.1, spirv1.2, spirv1.3,\n" "spirv1.4, spirv1.5 or spirv1.6"); } bumpArg(); @@ -1019,6 +1022,10 @@ void ProcessArguments(std::vector>& workItem TargetLanguage = glslang::EShTargetSpv; TargetVersion = glslang::EShTargetSpv_1_5; break; + case glslang::EShTargetVulkan_1_3: + TargetLanguage = glslang::EShTargetSpv; + TargetVersion = glslang::EShTargetSpv_1_6; + break; case glslang::EShTargetOpenGL_450: TargetLanguage = glslang::EShTargetSpv; TargetVersion = glslang::EShTargetSpv_1_0; @@ -1934,7 +1941,7 @@ void usage() " --sep synonym for --source-entrypoint\n" " --stdin read from stdin instead of from a file;\n" " requires providing the shader stage using -S\n" - " --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | opengl |\n" + " --target-env {vulkan1.0 | vulkan1.1 | vulkan1.2 | vulkan1.3 | opengl |\n" " spirv1.0 | spirv1.1 | spirv1.2 | spirv1.3 | spirv1.4 |\n" " spirv1.5 | spirv1.6}\n" " Set the execution environment that the\n" @@ -1945,6 +1952,7 @@ void usage() " * spirv1.0 under --target-env vulkan1.0\n" " * spirv1.3 under --target-env vulkan1.1\n" " * spirv1.5 under --target-env vulkan1.2\n" + " * spirv1.6 under --target-env vulkan1.3\n" " Multiple --target-env can be specified.\n" " --variable-name \n" " --vn creates a C header file that contains a\n" diff --git a/Test/baseResults/hlsl.spv.1.6.discard.frag.out b/Test/baseResults/hlsl.spv.1.6.discard.frag.out index b5cfe1704c..d5219144cd 100644 --- a/Test/baseResults/hlsl.spv.1.6.discard.frag.out +++ b/Test/baseResults/hlsl.spv.1.6.discard.frag.out @@ -1,5 +1,6 @@ hlsl.spv.1.6.discard.frag Shader version: 500 +gl_FragCoord origin is upper left 0:? Sequence 0:2 Function Definition: foo(f1; ( temp void) 0:2 Function Parameters: @@ -55,6 +56,7 @@ Linked fragment stage: Shader version: 500 +gl_FragCoord origin is upper left 0:? Sequence 0:2 Function Definition: foo(f1; ( temp void) 0:2 Function Parameters: @@ -114,7 +116,7 @@ Shader version: 500 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "PixelShaderFunction" 42 - ExecutionMode 4 OriginLowerLeft + ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "PixelShaderFunction" Name 10 "foo(f1;" diff --git a/Test/baseResults/spv.1.6.conditionalDiscard.frag.out b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out index d671476ceb..f538fd9310 100644 --- a/Test/baseResults/spv.1.6.conditionalDiscard.frag.out +++ b/Test/baseResults/spv.1.6.conditionalDiscard.frag.out @@ -7,7 +7,7 @@ spv.1.6.conditionalDiscard.frag 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 13 17 34 - ExecutionMode 4 OriginLowerLeft + ExecutionMode 4 OriginUpperLeft Source GLSL 400 Name 4 "main" Name 9 "v" @@ -17,6 +17,7 @@ spv.1.6.conditionalDiscard.frag Decorate 13(tex) DescriptorSet 0 Decorate 13(tex) Binding 0 Decorate 17(coord) Location 0 + Decorate 34(gl_FragColor) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.1.6.helperInvocation.frag.out b/Test/baseResults/spv.1.6.helperInvocation.frag.out index 9ba8a5c176..7df2a2ac50 100644 --- a/Test/baseResults/spv.1.6.helperInvocation.frag.out +++ b/Test/baseResults/spv.1.6.helperInvocation.frag.out @@ -7,7 +7,7 @@ spv.1.6.helperInvocation.frag 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 8 15 - ExecutionMode 4 OriginLowerLeft + ExecutionMode 4 OriginUpperLeft Source ESSL 310 Name 4 "main" Name 8 "gl_HelperInvocation" diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index da1cd145d1..47c72fc1a4 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -273,6 +273,8 @@ static glslang::EShTargetClientVersion c_shader_client_version(glslang_target_cl return glslang::EShTargetVulkan_1_1; case GLSLANG_TARGET_VULKAN_1_2: return glslang::EShTargetVulkan_1_2; + case GLSLANG_TARGET_VULKAN_1_3: + return glslang::EShTargetVulkan_1_3; case GLSLANG_TARGET_OPENGL_450: return glslang::EShTargetOpenGL_450; default: diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h index fc80280652..df19777b0b 100644 --- a/glslang/Include/glslang_c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -101,8 +101,9 @@ typedef enum { GLSLANG_TARGET_VULKAN_1_0 = (1 << 22), GLSLANG_TARGET_VULKAN_1_1 = (1 << 22) | (1 << 12), GLSLANG_TARGET_VULKAN_1_2 = (1 << 22) | (2 << 12), + GLSLANG_TARGET_VULKAN_1_3 = (1 << 22) | (3 << 12), GLSLANG_TARGET_OPENGL_450 = 450, - LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 4), + LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 5), } glslang_target_client_version_t; /* SH_TARGET_LanguageVersion counterpart */ diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 1386cb3a87..a658c09c6c 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -419,6 +419,9 @@ class TIntermediate { case EShTargetVulkan_1_2: processes.addProcess("target-env vulkan1.2"); break; + case EShTargetVulkan_1_3: + processes.addProcess("target-env vulkan1.3"); + break; default: processes.addProcess("target-env vulkanUnknown"); break; diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 29b75354ac..3c0e2910d6 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -162,16 +162,13 @@ typedef enum { LAST_ELEMENT_MARKER(EShTargetCount), } EShTargetLanguage; -// TODO(greg-lunarg): Fix non-determinism problem with Universal -// https://github.com/KhronosGroup/glslang/issues/2858 - typedef enum { - EShTargetUniversal = 0, // Universal - Do not use, see comment above EShTargetVulkan_1_0 = (1 << 22), // Vulkan 1.0 EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), // Vulkan 1.1 EShTargetVulkan_1_2 = (1 << 22) | (2 << 12), // Vulkan 1.2 + EShTargetVulkan_1_3 = (1 << 22) | (3 << 12), // Vulkan 1.3 EShTargetOpenGL_450 = 450, // OpenGL - LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 4), + LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 5), } EShTargetClientVersion; typedef EShTargetClientVersion EshTargetClientVersion; diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 6c9591056d..519be2549e 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -59,7 +59,7 @@ std::string FileNameAsCustomTestSuffix( using HlslCompileTest = GlslangTest<::testing::TestWithParam>; using HlslVulkan1_1CompileTest = GlslangTest<::testing::TestWithParam>; -//using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam>; +using HlslSpv1_6CompileTest = GlslangTest<::testing::TestWithParam>; using HlslCompileAndFlattenTest = GlslangTest<::testing::TestWithParam>; using HlslLegalizeTest = GlslangTest<::testing::TestWithParam>; using HlslDebugTest = GlslangTest<::testing::TestWithParam>; @@ -82,14 +82,12 @@ TEST_P(HlslVulkan1_1CompileTest, FromFile) Target::BothASTAndSpv, true, GetParam().entryPoint); } -// TODO(greg-lunarg): Re-enable tests when Vulkan1.3 ClientTarget is available - -//TEST_P(HlslSpv1_6CompileTest, FromFile) -//{ -// loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, -// Source::HLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, -// Target::BothASTAndSpv, true, GetParam().entryPoint); -//} +TEST_P(HlslSpv1_6CompileTest, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam().fileName, + Source::HLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_3, glslang::EShTargetSpv_1_6, + Target::BothASTAndSpv, true, GetParam().entryPoint); +} TEST_P(HlslCompileAndFlattenTest, FromFile) { @@ -461,13 +459,13 @@ INSTANTIATE_TEST_SUITE_P( // clang-format on // clang-format off -//INSTANTIATE_TEST_SUITE_P( -// ToSpirv, HlslSpv1_6CompileTest, -// ::testing::ValuesIn(std::vector{ -// {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"} -// }), -// FileNameAsCustomTestSuffix -//); +INSTANTIATE_TEST_SUITE_P( + ToSpirv, HlslSpv1_6CompileTest, + ::testing::ValuesIn(std::vector{ + {"hlsl.spv.1.6.discard.frag", "PixelShaderFunction"} + }), + FileNameAsCustomTestSuffix +); // clang-format on // clang-format off diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index ca13b88d77..ba08226c0c 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -69,7 +69,7 @@ using CompileVulkanToSpirvDeadCodeElimTest = GlslangTest<::testing::TestWithPara using CompileVulkanToDebugSpirvTest = GlslangTest<::testing::TestWithParam>; using CompileVulkan1_1ToSpirvTest = GlslangTest<::testing::TestWithParam>; using CompileToSpirv14Test = GlslangTest<::testing::TestWithParam>; -//using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam>; +using CompileToSpirv16Test = GlslangTest<::testing::TestWithParam>; using CompileOpenGLToSpirvTest = GlslangTest<::testing::TestWithParam>; using VulkanSemantics = GlslangTest<::testing::TestWithParam>; using OpenGLSemantics = GlslangTest<::testing::TestWithParam>; @@ -123,14 +123,12 @@ TEST_P(CompileToSpirv14Test, FromFile) Target::Spv); } -// TODO(greg-lunarg): Re-enable tests when Vulkan1.3 ClientTarget is available - -//TEST_P(CompileToSpirv16Test, FromFile) -//{ -// loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), -// Source::GLSL, Semantics::Vulkan, glslang::EShTargetUniversal, glslang::EShTargetSpv_1_6, -// Target::Spv); -//} +TEST_P(CompileToSpirv16Test, FromFile) +{ + loadFileCompileAndCheck(GlobalTestSettings.testRoot, GetParam(), + Source::GLSL, Semantics::Vulkan, glslang::EShTargetVulkan_1_3, glslang::EShTargetSpv_1_6, + Target::Spv); +} // Compiling GLSL to SPIR-V under OpenGL semantics. Expected to successfully // generate SPIR-V. @@ -632,15 +630,15 @@ INSTANTIATE_TEST_SUITE_P( ); // clang-format off -//INSTANTIATE_TEST_SUITE_P( -// Glsl, CompileToSpirv16Test, -// ::testing::ValuesIn(std::vector({ -// "spv.1.6.conditionalDiscard.frag", -// "spv.1.6.helperInvocation.frag", -// "spv.1.6.specConstant.comp", -// })), -// FileNameAsCustomTestSuffix -//); +INSTANTIATE_TEST_SUITE_P( + Glsl, CompileToSpirv16Test, + ::testing::ValuesIn(std::vector({ + "spv.1.6.conditionalDiscard.frag", + "spv.1.6.helperInvocation.frag", + "spv.1.6.specConstant.comp", + })), + FileNameAsCustomTestSuffix +); // clang-format off diff --git a/known_good.json b/known_good.json index 052de57b0a..0eebc7d8b8 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "7d768812e20296c877a44ce0633d71f952fbf83c" + "commit" : "73735db943d7165d725883a1da0ad9eac79c1e34" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "eddd4dfc930f1374a70797460240a501c7d333f7" + "commit" : "b42ba6d92faf6b4938e6f22ddd186dbdacc98d78" } ] } From 69565b18843798f8d219617d7618a37499ad25fd Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 27 Jan 2022 11:39:19 -0700 Subject: [PATCH 295/365] Fix size_t to int warning --- SPIRV/SpvBuilder.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SPIRV/SpvBuilder.cpp b/SPIRV/SpvBuilder.cpp index 0b0e48ab0b..36a3f09744 100644 --- a/SPIRV/SpvBuilder.cpp +++ b/SPIRV/SpvBuilder.cpp @@ -437,7 +437,7 @@ Id Builder::makeGenericType(spv::Op opcode, std::vector& opera continue; // Number mismatch, find next bool match = true; - for (size_t op = 0; match && op < operands.size(); ++op) { + for (int op = 0; match && op < (int)operands.size(); ++op) { match = (operands[op].isId ? type->getIdOperand(op) : type->getImmediateOperand(op)) == operands[op].word; } if (match) From 9448de56b320b028e6c301a6b117a166187b7f76 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 27 Jan 2022 12:23:47 -0700 Subject: [PATCH 296/365] Release 11.8.0 --- CHANGES.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index ebab4da0c7..6d3bd6d98c 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.8.0 2022-01-27 + +### Other changes +* Add support for SPIR-V 1.6 +* Add support for Vulkan 1.3 +* Add --hlsl-dx-position-w option + ## 11.7.0 2021-11-11 ### Other changes From b8338311ea58fadfc8cb41a389d857910f4d9818 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Tue, 25 Jan 2022 21:31:31 -0500 Subject: [PATCH 297/365] fix cases where symbols in the tree didn't get updated during block merging For GL_EXT_vulkan_glsl_relaxed. When merging the default uniform block, there were cases where symbols in the tree wern't updated to match the new block structure after merging blocks together. This change traverses the symbol tree and updates any references to the merged block. --- .../vk.relaxed.stagelink.0.0.vert.out | 10697 ++++++++++++++++ Test/vk.relaxed.stagelink.0.0.frag | 139 + Test/vk.relaxed.stagelink.0.0.vert | 126 + Test/vk.relaxed.stagelink.0.1.frag | 504 + Test/vk.relaxed.stagelink.0.1.vert | 242 + Test/vk.relaxed.stagelink.0.2.frag | 9 + Test/vk.relaxed.stagelink.0.2.vert | 320 + glslang/MachineIndependent/linkValidate.cpp | 73 +- gtests/VkRelaxed.FromFile.cpp | 5 +- 9 files changed, 12079 insertions(+), 36 deletions(-) create mode 100755 Test/baseResults/vk.relaxed.stagelink.0.0.vert.out create mode 100755 Test/vk.relaxed.stagelink.0.0.frag create mode 100755 Test/vk.relaxed.stagelink.0.0.vert create mode 100755 Test/vk.relaxed.stagelink.0.1.frag create mode 100755 Test/vk.relaxed.stagelink.0.1.vert create mode 100755 Test/vk.relaxed.stagelink.0.2.frag create mode 100755 Test/vk.relaxed.stagelink.0.2.vert diff --git a/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out b/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out new file mode 100755 index 0000000000..bcd4e2afd5 --- /dev/null +++ b/Test/baseResults/vk.relaxed.stagelink.0.0.vert.out @@ -0,0 +1,10697 @@ +vk.relaxed.stagelink.0.0.vert +Shader version: 460 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:15 Sequence +0:15 Sequence +0:15 Sequence +0:15 move second child to first child ( temp highp 3-component vector of float) +0:15 'texcoord' ( temp highp 3-component vector of float) +0:15 Function Call: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float) +0:15 direct index (layout( location=3) temp highp 3-component vector of float) +0:15 'uv' (layout( location=3) in 8-element array of highp 3-component vector of float) +0:15 Constant: +0:15 0 (const int) +0:16 move second child to first child ( temp highp 3-component vector of float) +0:16 vector swizzle ( temp highp 3-component vector of float) +0:16 texCoord0: direct index for structure ( out highp 3-component vector of float) +0:16 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:16 Constant: +0:16 2 (const int) +0:16 Sequence +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1 (const int) +0:16 Constant: +0:16 2 (const int) +0:16 vector swizzle ( temp highp 3-component vector of float) +0:16 'texcoord' ( temp highp 3-component vector of float) +0:16 Sequence +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1 (const int) +0:16 Constant: +0:16 2 (const int) +0:20 move second child to first child ( temp highp int) +0:20 instance: direct index for structure ( flat out highp int) +0:20 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:20 Constant: +0:20 4 (const int) +0:20 Function Call: TDInstanceID( ( global highp int) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'worldSpacePos' ( temp highp 4-component vector of float) +0:21 Function Call: TDDeform(vf3; ( global highp 4-component vector of float) +0:21 'P' (layout( location=0) in highp 3-component vector of float) +0:22 Sequence +0:22 move second child to first child ( temp highp 3-component vector of float) +0:22 'uvUnwrapCoord' ( temp highp 3-component vector of float) +0:22 Function Call: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float) +0:22 Function Call: TDUVUnwrapCoord( ( global highp 3-component vector of float) +0:23 move second child to first child ( temp highp 4-component vector of float) +0:23 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:23 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) +0:23 Constant: +0:23 0 (const uint) +0:23 Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float) +0:23 'worldSpacePos' ( temp highp 4-component vector of float) +0:23 'uvUnwrapCoord' ( temp highp 3-component vector of float) +0:32 Sequence +0:32 move second child to first child ( temp highp int) +0:32 'cameraIndex' ( temp highp int) +0:32 Function Call: TDCameraIndex( ( global highp int) +0:33 move second child to first child ( temp highp int) +0:33 cameraIndex: direct index for structure ( flat out highp int) +0:33 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:33 Constant: +0:33 3 (const int) +0:33 'cameraIndex' ( temp highp int) +0:34 move second child to first child ( temp highp 3-component vector of float) +0:34 vector swizzle ( temp highp 3-component vector of float) +0:34 worldSpacePos: direct index for structure ( out highp 3-component vector of float) +0:34 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:34 Constant: +0:34 1 (const int) +0:34 Sequence +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 vector swizzle ( temp highp 3-component vector of float) +0:34 'worldSpacePos' ( temp highp 4-component vector of float) +0:34 Sequence +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:35 move second child to first child ( temp highp 4-component vector of float) +0:35 color: direct index for structure ( out highp 4-component vector of float) +0:35 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:35 Constant: +0:35 0 (const int) +0:35 Function Call: TDInstanceColor(vf4; ( global highp 4-component vector of float) +0:35 'Cd' (layout( location=2) in highp 4-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor, global highp int renderTOPCameraIndex} uTDCamInfos}) +0:? 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor, global highp 4-component vector of float nearFar, global highp 4-component vector of float viewport, global highp 4-component vector of float viewportRes, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor} uTDGeneral}) +0:? 'P' (layout( location=0) in highp 3-component vector of float) +0:? 'N' (layout( location=1) in highp 3-component vector of float) +0:? 'Cd' (layout( location=2) in highp 4-component vector of float) +0:? 'uv' (layout( location=3) in 8-element array of highp 3-component vector of float) +0:? 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:? 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out unsized 1-element array of float ClipDistance gl_ClipDistance, out unsized 1-element array of float CullDistance gl_CullDistance}) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) + +vk.relaxed.stagelink.0.1.vert +Shader version: 460 +0:? Sequence +0:176 Function Definition: iTDCamToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float) +0:176 Function Parameters: +0:176 'v' ( in highp 4-component vector of float) +0:176 'uv' ( in highp 3-component vector of float) +0:176 'cameraIndex' ( in highp int) +0:176 'applyPickMod' ( in bool) +0:178 Sequence +0:178 Test condition and select ( temp void) +0:178 Condition +0:178 Negate conditional ( temp bool) +0:178 Function Call: TDInstanceActive( ( global bool) +0:178 true case +0:179 Branch: Return with expression +0:179 Constant: +0:179 2.000000 +0:179 2.000000 +0:179 2.000000 +0:179 0.000000 +0:180 move second child to first child ( temp highp 4-component vector of float) +0:180 'v' ( in highp 4-component vector of float) +0:180 matrix-times-vector ( temp highp 4-component vector of float) +0:180 proj: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float) +0:180 direct index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:180 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:180 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:180 Constant: +0:180 0 (const uint) +0:180 Constant: +0:180 0 (const int) +0:180 Constant: +0:180 8 (const int) +0:180 'v' ( in highp 4-component vector of float) +0:181 Branch: Return with expression +0:181 'v' ( in highp 4-component vector of float) +0:183 Function Definition: iTDWorldToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float) +0:183 Function Parameters: +0:183 'v' ( in highp 4-component vector of float) +0:183 'uv' ( in highp 3-component vector of float) +0:183 'cameraIndex' ( in highp int) +0:183 'applyPickMod' ( in bool) +0:184 Sequence +0:184 Test condition and select ( temp void) +0:184 Condition +0:184 Negate conditional ( temp bool) +0:184 Function Call: TDInstanceActive( ( global bool) +0:184 true case +0:185 Branch: Return with expression +0:185 Constant: +0:185 2.000000 +0:185 2.000000 +0:185 2.000000 +0:185 0.000000 +0:186 move second child to first child ( temp highp 4-component vector of float) +0:186 'v' ( in highp 4-component vector of float) +0:186 matrix-times-vector ( temp highp 4-component vector of float) +0:186 camProj: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float) +0:186 direct index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:186 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:186 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:186 Constant: +0:186 0 (const uint) +0:186 Constant: +0:186 0 (const int) +0:186 Constant: +0:186 6 (const int) +0:186 'v' ( in highp 4-component vector of float) +0:187 Branch: Return with expression +0:187 'v' ( in highp 4-component vector of float) +0:193 Function Definition: TDInstanceID( ( global highp int) +0:193 Function Parameters: +0:194 Sequence +0:194 Branch: Return with expression +0:194 add ( temp highp int) +0:194 'gl_InstanceIndex' ( in highp int InstanceIndex) +0:194 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:194 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:194 Constant: +0:194 0 (const uint) +0:196 Function Definition: TDCameraIndex( ( global highp int) +0:196 Function Parameters: +0:197 Sequence +0:197 Branch: Return with expression +0:197 Constant: +0:197 0 (const int) +0:199 Function Definition: TDUVUnwrapCoord( ( global highp 3-component vector of float) +0:199 Function Parameters: +0:200 Sequence +0:200 Branch: Return with expression +0:200 direct index (layout( location=3) temp highp 3-component vector of float) +0:200 'uv' (layout( location=3) in 8-element array of highp 3-component vector of float) +0:200 Constant: +0:200 0 (const int) +0:205 Function Definition: TDPickID( ( global highp int) +0:205 Function Parameters: +0:209 Sequence +0:209 Branch: Return with expression +0:209 Constant: +0:209 0 (const int) +0:212 Function Definition: iTDConvertPickId(i1; ( global highp float) +0:212 Function Parameters: +0:212 'id' ( in highp int) +0:213 Sequence +0:213 or second child into first child ( temp highp int) +0:213 'id' ( in highp int) +0:213 Constant: +0:213 1073741824 (const int) +0:214 Branch: Return with expression +0:214 intBitsToFloat ( global highp float) +0:214 'id' ( in highp int) +0:217 Function Definition: TDWritePickingValues( ( global void) +0:217 Function Parameters: +0:224 Function Definition: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float) +0:224 Function Parameters: +0:224 'v' ( in highp 4-component vector of float) +0:224 'uv' ( in highp 3-component vector of float) +0:226 Sequence +0:226 Branch: Return with expression +0:226 Function Call: iTDWorldToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float) +0:226 'v' ( in highp 4-component vector of float) +0:226 'uv' ( in highp 3-component vector of float) +0:226 Function Call: TDCameraIndex( ( global highp int) +0:226 Constant: +0:226 true (const bool) +0:228 Function Definition: TDWorldToProj(vf3;vf3; ( global highp 4-component vector of float) +0:228 Function Parameters: +0:228 'v' ( in highp 3-component vector of float) +0:228 'uv' ( in highp 3-component vector of float) +0:230 Sequence +0:230 Branch: Return with expression +0:230 Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float) +0:230 Construct vec4 ( temp highp 4-component vector of float) +0:230 'v' ( in highp 3-component vector of float) +0:230 Constant: +0:230 1.000000 +0:230 'uv' ( in highp 3-component vector of float) +0:232 Function Definition: TDWorldToProj(vf4; ( global highp 4-component vector of float) +0:232 Function Parameters: +0:232 'v' ( in highp 4-component vector of float) +0:234 Sequence +0:234 Branch: Return with expression +0:234 Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float) +0:234 'v' ( in highp 4-component vector of float) +0:234 Constant: +0:234 0.000000 +0:234 0.000000 +0:234 0.000000 +0:236 Function Definition: TDWorldToProj(vf3; ( global highp 4-component vector of float) +0:236 Function Parameters: +0:236 'v' ( in highp 3-component vector of float) +0:238 Sequence +0:238 Branch: Return with expression +0:238 Function Call: TDWorldToProj(vf4; ( global highp 4-component vector of float) +0:238 Construct vec4 ( temp highp 4-component vector of float) +0:238 'v' ( in highp 3-component vector of float) +0:238 Constant: +0:238 1.000000 +0:240 Function Definition: TDPointColor( ( global highp 4-component vector of float) +0:240 Function Parameters: +0:241 Sequence +0:241 Branch: Return with expression +0:241 'Cd' (layout( location=2) in highp 4-component vector of float) +0:? Linker Objects +0:? 'P' (layout( location=0) in highp 3-component vector of float) +0:? 'N' (layout( location=1) in highp 3-component vector of float) +0:? 'Cd' (layout( location=2) in highp 4-component vector of float) +0:? 'uv' (layout( location=3) in 8-element array of highp 3-component vector of float) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position, global highp 3-component vector of float direction, global highp 3-component vector of float diffuse, global highp 4-component vector of float nearFar, global highp 4-component vector of float lightSize, global highp 4-component vector of float misc, global highp 4-component vector of float coneLookupScaleBias, global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix, global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights}) +0:? 'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs}) +0:? 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:? 'anon@4' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor, global highp int renderTOPCameraIndex} uTDCamInfos}) +0:? 'anon@5' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor, global highp 4-component vector of float nearFar, global highp 4-component vector of float viewport, global highp 4-component vector of float viewportRes, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor} uTDGeneral}) +0:? 'mTD2DImageOutputs' (layout( rgba8) uniform 1-element array of highp image2D) +0:? 'mTD2DArrayImageOutputs' (layout( rgba8) uniform 1-element array of highp image2DArray) +0:? 'mTD3DImageOutputs' (layout( rgba8) uniform 1-element array of highp image3D) +0:? 'mTDCubeImageOutputs' (layout( rgba8) uniform 1-element array of highp imageCube) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) + +vk.relaxed.stagelink.0.2.vert +Shader version: 460 +0:? Sequence +0:114 Function Definition: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float) +0:114 Function Parameters: +0:114 'index' ( in highp int) +0:114 't' ( in highp 3-component vector of float) +0:? Sequence +0:116 Sequence +0:116 move second child to first child ( temp highp int) +0:116 'coord' ( temp highp int) +0:116 'index' ( in highp int) +0:117 Sequence +0:117 move second child to first child ( temp highp 4-component vector of float) +0:117 'samp' ( temp highp 4-component vector of float) +0:117 textureFetch ( global highp 4-component vector of float) +0:117 'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer) +0:117 'coord' ( temp highp int) +0:118 move second child to first child ( temp highp float) +0:118 direct index ( temp highp float) +0:118 'v' ( temp highp 3-component vector of float) +0:118 Constant: +0:118 0 (const int) +0:118 direct index ( temp highp float) +0:118 't' ( in highp 3-component vector of float) +0:118 Constant: +0:118 0 (const int) +0:119 move second child to first child ( temp highp float) +0:119 direct index ( temp highp float) +0:119 'v' ( temp highp 3-component vector of float) +0:119 Constant: +0:119 1 (const int) +0:119 direct index ( temp highp float) +0:119 't' ( in highp 3-component vector of float) +0:119 Constant: +0:119 1 (const int) +0:120 move second child to first child ( temp highp float) +0:120 direct index ( temp highp float) +0:120 'v' ( temp highp 3-component vector of float) +0:120 Constant: +0:120 2 (const int) +0:120 direct index ( temp highp float) +0:120 'samp' ( temp highp 4-component vector of float) +0:120 Constant: +0:120 0 (const int) +0:121 move second child to first child ( temp highp 3-component vector of float) +0:121 vector swizzle ( temp highp 3-component vector of float) +0:121 't' ( in highp 3-component vector of float) +0:121 Sequence +0:121 Constant: +0:121 0 (const int) +0:121 Constant: +0:121 1 (const int) +0:121 Constant: +0:121 2 (const int) +0:121 vector swizzle ( temp highp 3-component vector of float) +0:121 'v' ( temp highp 3-component vector of float) +0:121 Sequence +0:121 Constant: +0:121 0 (const int) +0:121 Constant: +0:121 1 (const int) +0:121 Constant: +0:121 2 (const int) +0:122 Branch: Return with expression +0:122 't' ( in highp 3-component vector of float) +0:124 Function Definition: TDInstanceActive(i1; ( global bool) +0:124 Function Parameters: +0:124 'index' ( in highp int) +0:125 Sequence +0:125 subtract second child into first child ( temp highp int) +0:125 'index' ( in highp int) +0:125 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:125 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:125 Constant: +0:125 0 (const uint) +0:127 Sequence +0:127 move second child to first child ( temp highp int) +0:127 'coord' ( temp highp int) +0:127 'index' ( in highp int) +0:128 Sequence +0:128 move second child to first child ( temp highp 4-component vector of float) +0:128 'samp' ( temp highp 4-component vector of float) +0:128 textureFetch ( global highp 4-component vector of float) +0:128 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:128 'coord' ( temp highp int) +0:129 move second child to first child ( temp highp float) +0:129 'v' ( temp highp float) +0:129 direct index ( temp highp float) +0:129 'samp' ( temp highp 4-component vector of float) +0:129 Constant: +0:129 0 (const int) +0:130 Branch: Return with expression +0:130 Compare Not Equal ( temp bool) +0:130 'v' ( temp highp float) +0:130 Constant: +0:130 0.000000 +0:132 Function Definition: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float) +0:132 Function Parameters: +0:132 'index' ( in highp int) +0:132 'instanceActive' ( out bool) +0:133 Sequence +0:133 Sequence +0:133 move second child to first child ( temp highp int) +0:133 'origIndex' ( temp highp int) +0:133 'index' ( in highp int) +0:134 subtract second child into first child ( temp highp int) +0:134 'index' ( in highp int) +0:134 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:134 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:134 Constant: +0:134 0 (const uint) +0:136 Sequence +0:136 move second child to first child ( temp highp int) +0:136 'coord' ( temp highp int) +0:136 'index' ( in highp int) +0:137 Sequence +0:137 move second child to first child ( temp highp 4-component vector of float) +0:137 'samp' ( temp highp 4-component vector of float) +0:137 textureFetch ( global highp 4-component vector of float) +0:137 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:137 'coord' ( temp highp int) +0:138 move second child to first child ( temp highp float) +0:138 direct index ( temp highp float) +0:138 'v' ( temp highp 3-component vector of float) +0:138 Constant: +0:138 0 (const int) +0:138 direct index ( temp highp float) +0:138 'samp' ( temp highp 4-component vector of float) +0:138 Constant: +0:138 1 (const int) +0:139 move second child to first child ( temp highp float) +0:139 direct index ( temp highp float) +0:139 'v' ( temp highp 3-component vector of float) +0:139 Constant: +0:139 1 (const int) +0:139 direct index ( temp highp float) +0:139 'samp' ( temp highp 4-component vector of float) +0:139 Constant: +0:139 2 (const int) +0:140 move second child to first child ( temp highp float) +0:140 direct index ( temp highp float) +0:140 'v' ( temp highp 3-component vector of float) +0:140 Constant: +0:140 2 (const int) +0:140 direct index ( temp highp float) +0:140 'samp' ( temp highp 4-component vector of float) +0:140 Constant: +0:140 3 (const int) +0:141 move second child to first child ( temp bool) +0:141 'instanceActive' ( out bool) +0:141 Compare Not Equal ( temp bool) +0:141 direct index ( temp highp float) +0:141 'samp' ( temp highp 4-component vector of float) +0:141 Constant: +0:141 0 (const int) +0:141 Constant: +0:141 0.000000 +0:142 Branch: Return with expression +0:142 'v' ( temp highp 3-component vector of float) +0:144 Function Definition: TDInstanceTranslate(i1; ( global highp 3-component vector of float) +0:144 Function Parameters: +0:144 'index' ( in highp int) +0:145 Sequence +0:145 subtract second child into first child ( temp highp int) +0:145 'index' ( in highp int) +0:145 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:145 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:145 Constant: +0:145 0 (const uint) +0:147 Sequence +0:147 move second child to first child ( temp highp int) +0:147 'coord' ( temp highp int) +0:147 'index' ( in highp int) +0:148 Sequence +0:148 move second child to first child ( temp highp 4-component vector of float) +0:148 'samp' ( temp highp 4-component vector of float) +0:148 textureFetch ( global highp 4-component vector of float) +0:148 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:148 'coord' ( temp highp int) +0:149 move second child to first child ( temp highp float) +0:149 direct index ( temp highp float) +0:149 'v' ( temp highp 3-component vector of float) +0:149 Constant: +0:149 0 (const int) +0:149 direct index ( temp highp float) +0:149 'samp' ( temp highp 4-component vector of float) +0:149 Constant: +0:149 1 (const int) +0:150 move second child to first child ( temp highp float) +0:150 direct index ( temp highp float) +0:150 'v' ( temp highp 3-component vector of float) +0:150 Constant: +0:150 1 (const int) +0:150 direct index ( temp highp float) +0:150 'samp' ( temp highp 4-component vector of float) +0:150 Constant: +0:150 2 (const int) +0:151 move second child to first child ( temp highp float) +0:151 direct index ( temp highp float) +0:151 'v' ( temp highp 3-component vector of float) +0:151 Constant: +0:151 2 (const int) +0:151 direct index ( temp highp float) +0:151 'samp' ( temp highp 4-component vector of float) +0:151 Constant: +0:151 3 (const int) +0:152 Branch: Return with expression +0:152 'v' ( temp highp 3-component vector of float) +0:154 Function Definition: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float) +0:154 Function Parameters: +0:154 'index' ( in highp int) +0:155 Sequence +0:155 subtract second child into first child ( temp highp int) +0:155 'index' ( in highp int) +0:155 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:155 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:155 Constant: +0:155 0 (const uint) +0:156 Sequence +0:156 move second child to first child ( temp highp 3-component vector of float) +0:156 'v' ( temp highp 3-component vector of float) +0:156 Constant: +0:156 0.000000 +0:156 0.000000 +0:156 0.000000 +0:157 Sequence +0:157 move second child to first child ( temp highp 3X3 matrix of float) +0:157 'm' ( temp highp 3X3 matrix of float) +0:157 Constant: +0:157 1.000000 +0:157 0.000000 +0:157 0.000000 +0:157 0.000000 +0:157 1.000000 +0:157 0.000000 +0:157 0.000000 +0:157 0.000000 +0:157 1.000000 +0:161 Branch: Return with expression +0:161 'm' ( temp highp 3X3 matrix of float) +0:163 Function Definition: TDInstanceScale(i1; ( global highp 3-component vector of float) +0:163 Function Parameters: +0:163 'index' ( in highp int) +0:164 Sequence +0:164 subtract second child into first child ( temp highp int) +0:164 'index' ( in highp int) +0:164 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:164 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:164 Constant: +0:164 0 (const uint) +0:165 Sequence +0:165 move second child to first child ( temp highp 3-component vector of float) +0:165 'v' ( temp highp 3-component vector of float) +0:165 Constant: +0:165 1.000000 +0:165 1.000000 +0:165 1.000000 +0:166 Branch: Return with expression +0:166 'v' ( temp highp 3-component vector of float) +0:168 Function Definition: TDInstancePivot(i1; ( global highp 3-component vector of float) +0:168 Function Parameters: +0:168 'index' ( in highp int) +0:169 Sequence +0:169 subtract second child into first child ( temp highp int) +0:169 'index' ( in highp int) +0:169 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:169 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:169 Constant: +0:169 0 (const uint) +0:170 Sequence +0:170 move second child to first child ( temp highp 3-component vector of float) +0:170 'v' ( temp highp 3-component vector of float) +0:170 Constant: +0:170 0.000000 +0:170 0.000000 +0:170 0.000000 +0:171 Branch: Return with expression +0:171 'v' ( temp highp 3-component vector of float) +0:173 Function Definition: TDInstanceRotTo(i1; ( global highp 3-component vector of float) +0:173 Function Parameters: +0:173 'index' ( in highp int) +0:174 Sequence +0:174 subtract second child into first child ( temp highp int) +0:174 'index' ( in highp int) +0:174 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:174 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:174 Constant: +0:174 0 (const uint) +0:175 Sequence +0:175 move second child to first child ( temp highp 3-component vector of float) +0:175 'v' ( temp highp 3-component vector of float) +0:175 Constant: +0:175 0.000000 +0:175 0.000000 +0:175 1.000000 +0:176 Branch: Return with expression +0:176 'v' ( temp highp 3-component vector of float) +0:178 Function Definition: TDInstanceRotUp(i1; ( global highp 3-component vector of float) +0:178 Function Parameters: +0:178 'index' ( in highp int) +0:179 Sequence +0:179 subtract second child into first child ( temp highp int) +0:179 'index' ( in highp int) +0:179 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:179 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:179 Constant: +0:179 0 (const uint) +0:180 Sequence +0:180 move second child to first child ( temp highp 3-component vector of float) +0:180 'v' ( temp highp 3-component vector of float) +0:180 Constant: +0:180 0.000000 +0:180 1.000000 +0:180 0.000000 +0:181 Branch: Return with expression +0:181 'v' ( temp highp 3-component vector of float) +0:183 Function Definition: TDInstanceMat(i1; ( global highp 4X4 matrix of float) +0:183 Function Parameters: +0:183 'id' ( in highp int) +0:184 Sequence +0:184 Sequence +0:184 move second child to first child ( temp bool) +0:184 'instanceActive' ( temp bool) +0:184 Constant: +0:184 true (const bool) +0:185 Sequence +0:185 move second child to first child ( temp highp 3-component vector of float) +0:185 't' ( temp highp 3-component vector of float) +0:185 Function Call: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float) +0:185 'id' ( in highp int) +0:185 'instanceActive' ( temp bool) +0:186 Test condition and select ( temp void) +0:186 Condition +0:186 Negate conditional ( temp bool) +0:186 'instanceActive' ( temp bool) +0:186 true case +0:188 Sequence +0:188 Branch: Return with expression +0:188 Constant: +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:190 Sequence +0:190 move second child to first child ( temp highp 4X4 matrix of float) +0:190 'm' ( temp highp 4X4 matrix of float) +0:190 Constant: +0:190 1.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 1.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 1.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 1.000000 +0:192 Sequence +0:192 Sequence +0:192 move second child to first child ( temp highp 3-component vector of float) +0:192 'tt' ( temp highp 3-component vector of float) +0:192 't' ( temp highp 3-component vector of float) +0:193 add second child into first child ( temp highp float) +0:193 direct index ( temp highp float) +0:193 direct index ( temp highp 4-component vector of float) +0:193 'm' ( temp highp 4X4 matrix of float) +0:193 Constant: +0:193 3 (const int) +0:193 Constant: +0:193 0 (const int) +0:193 component-wise multiply ( temp highp float) +0:193 direct index ( temp highp float) +0:193 direct index ( temp highp 4-component vector of float) +0:193 'm' ( temp highp 4X4 matrix of float) +0:193 Constant: +0:193 0 (const int) +0:193 Constant: +0:193 0 (const int) +0:193 direct index ( temp highp float) +0:193 'tt' ( temp highp 3-component vector of float) +0:193 Constant: +0:193 0 (const int) +0:194 add second child into first child ( temp highp float) +0:194 direct index ( temp highp float) +0:194 direct index ( temp highp 4-component vector of float) +0:194 'm' ( temp highp 4X4 matrix of float) +0:194 Constant: +0:194 3 (const int) +0:194 Constant: +0:194 1 (const int) +0:194 component-wise multiply ( temp highp float) +0:194 direct index ( temp highp float) +0:194 direct index ( temp highp 4-component vector of float) +0:194 'm' ( temp highp 4X4 matrix of float) +0:194 Constant: +0:194 0 (const int) +0:194 Constant: +0:194 1 (const int) +0:194 direct index ( temp highp float) +0:194 'tt' ( temp highp 3-component vector of float) +0:194 Constant: +0:194 0 (const int) +0:195 add second child into first child ( temp highp float) +0:195 direct index ( temp highp float) +0:195 direct index ( temp highp 4-component vector of float) +0:195 'm' ( temp highp 4X4 matrix of float) +0:195 Constant: +0:195 3 (const int) +0:195 Constant: +0:195 2 (const int) +0:195 component-wise multiply ( temp highp float) +0:195 direct index ( temp highp float) +0:195 direct index ( temp highp 4-component vector of float) +0:195 'm' ( temp highp 4X4 matrix of float) +0:195 Constant: +0:195 0 (const int) +0:195 Constant: +0:195 2 (const int) +0:195 direct index ( temp highp float) +0:195 'tt' ( temp highp 3-component vector of float) +0:195 Constant: +0:195 0 (const int) +0:196 add second child into first child ( temp highp float) +0:196 direct index ( temp highp float) +0:196 direct index ( temp highp 4-component vector of float) +0:196 'm' ( temp highp 4X4 matrix of float) +0:196 Constant: +0:196 3 (const int) +0:196 Constant: +0:196 3 (const int) +0:196 component-wise multiply ( temp highp float) +0:196 direct index ( temp highp float) +0:196 direct index ( temp highp 4-component vector of float) +0:196 'm' ( temp highp 4X4 matrix of float) +0:196 Constant: +0:196 0 (const int) +0:196 Constant: +0:196 3 (const int) +0:196 direct index ( temp highp float) +0:196 'tt' ( temp highp 3-component vector of float) +0:196 Constant: +0:196 0 (const int) +0:197 add second child into first child ( temp highp float) +0:197 direct index ( temp highp float) +0:197 direct index ( temp highp 4-component vector of float) +0:197 'm' ( temp highp 4X4 matrix of float) +0:197 Constant: +0:197 3 (const int) +0:197 Constant: +0:197 0 (const int) +0:197 component-wise multiply ( temp highp float) +0:197 direct index ( temp highp float) +0:197 direct index ( temp highp 4-component vector of float) +0:197 'm' ( temp highp 4X4 matrix of float) +0:197 Constant: +0:197 1 (const int) +0:197 Constant: +0:197 0 (const int) +0:197 direct index ( temp highp float) +0:197 'tt' ( temp highp 3-component vector of float) +0:197 Constant: +0:197 1 (const int) +0:198 add second child into first child ( temp highp float) +0:198 direct index ( temp highp float) +0:198 direct index ( temp highp 4-component vector of float) +0:198 'm' ( temp highp 4X4 matrix of float) +0:198 Constant: +0:198 3 (const int) +0:198 Constant: +0:198 1 (const int) +0:198 component-wise multiply ( temp highp float) +0:198 direct index ( temp highp float) +0:198 direct index ( temp highp 4-component vector of float) +0:198 'm' ( temp highp 4X4 matrix of float) +0:198 Constant: +0:198 1 (const int) +0:198 Constant: +0:198 1 (const int) +0:198 direct index ( temp highp float) +0:198 'tt' ( temp highp 3-component vector of float) +0:198 Constant: +0:198 1 (const int) +0:199 add second child into first child ( temp highp float) +0:199 direct index ( temp highp float) +0:199 direct index ( temp highp 4-component vector of float) +0:199 'm' ( temp highp 4X4 matrix of float) +0:199 Constant: +0:199 3 (const int) +0:199 Constant: +0:199 2 (const int) +0:199 component-wise multiply ( temp highp float) +0:199 direct index ( temp highp float) +0:199 direct index ( temp highp 4-component vector of float) +0:199 'm' ( temp highp 4X4 matrix of float) +0:199 Constant: +0:199 1 (const int) +0:199 Constant: +0:199 2 (const int) +0:199 direct index ( temp highp float) +0:199 'tt' ( temp highp 3-component vector of float) +0:199 Constant: +0:199 1 (const int) +0:200 add second child into first child ( temp highp float) +0:200 direct index ( temp highp float) +0:200 direct index ( temp highp 4-component vector of float) +0:200 'm' ( temp highp 4X4 matrix of float) +0:200 Constant: +0:200 3 (const int) +0:200 Constant: +0:200 3 (const int) +0:200 component-wise multiply ( temp highp float) +0:200 direct index ( temp highp float) +0:200 direct index ( temp highp 4-component vector of float) +0:200 'm' ( temp highp 4X4 matrix of float) +0:200 Constant: +0:200 1 (const int) +0:200 Constant: +0:200 3 (const int) +0:200 direct index ( temp highp float) +0:200 'tt' ( temp highp 3-component vector of float) +0:200 Constant: +0:200 1 (const int) +0:201 add second child into first child ( temp highp float) +0:201 direct index ( temp highp float) +0:201 direct index ( temp highp 4-component vector of float) +0:201 'm' ( temp highp 4X4 matrix of float) +0:201 Constant: +0:201 3 (const int) +0:201 Constant: +0:201 0 (const int) +0:201 component-wise multiply ( temp highp float) +0:201 direct index ( temp highp float) +0:201 direct index ( temp highp 4-component vector of float) +0:201 'm' ( temp highp 4X4 matrix of float) +0:201 Constant: +0:201 2 (const int) +0:201 Constant: +0:201 0 (const int) +0:201 direct index ( temp highp float) +0:201 'tt' ( temp highp 3-component vector of float) +0:201 Constant: +0:201 2 (const int) +0:202 add second child into first child ( temp highp float) +0:202 direct index ( temp highp float) +0:202 direct index ( temp highp 4-component vector of float) +0:202 'm' ( temp highp 4X4 matrix of float) +0:202 Constant: +0:202 3 (const int) +0:202 Constant: +0:202 1 (const int) +0:202 component-wise multiply ( temp highp float) +0:202 direct index ( temp highp float) +0:202 direct index ( temp highp 4-component vector of float) +0:202 'm' ( temp highp 4X4 matrix of float) +0:202 Constant: +0:202 2 (const int) +0:202 Constant: +0:202 1 (const int) +0:202 direct index ( temp highp float) +0:202 'tt' ( temp highp 3-component vector of float) +0:202 Constant: +0:202 2 (const int) +0:203 add second child into first child ( temp highp float) +0:203 direct index ( temp highp float) +0:203 direct index ( temp highp 4-component vector of float) +0:203 'm' ( temp highp 4X4 matrix of float) +0:203 Constant: +0:203 3 (const int) +0:203 Constant: +0:203 2 (const int) +0:203 component-wise multiply ( temp highp float) +0:203 direct index ( temp highp float) +0:203 direct index ( temp highp 4-component vector of float) +0:203 'm' ( temp highp 4X4 matrix of float) +0:203 Constant: +0:203 2 (const int) +0:203 Constant: +0:203 2 (const int) +0:203 direct index ( temp highp float) +0:203 'tt' ( temp highp 3-component vector of float) +0:203 Constant: +0:203 2 (const int) +0:204 add second child into first child ( temp highp float) +0:204 direct index ( temp highp float) +0:204 direct index ( temp highp 4-component vector of float) +0:204 'm' ( temp highp 4X4 matrix of float) +0:204 Constant: +0:204 3 (const int) +0:204 Constant: +0:204 3 (const int) +0:204 component-wise multiply ( temp highp float) +0:204 direct index ( temp highp float) +0:204 direct index ( temp highp 4-component vector of float) +0:204 'm' ( temp highp 4X4 matrix of float) +0:204 Constant: +0:204 2 (const int) +0:204 Constant: +0:204 3 (const int) +0:204 direct index ( temp highp float) +0:204 'tt' ( temp highp 3-component vector of float) +0:204 Constant: +0:204 2 (const int) +0:206 Branch: Return with expression +0:206 'm' ( temp highp 4X4 matrix of float) +0:208 Function Definition: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:208 Function Parameters: +0:208 'id' ( in highp int) +0:209 Sequence +0:209 Sequence +0:209 move second child to first child ( temp highp 3X3 matrix of float) +0:209 'm' ( temp highp 3X3 matrix of float) +0:209 Constant: +0:209 1.000000 +0:209 0.000000 +0:209 0.000000 +0:209 0.000000 +0:209 1.000000 +0:209 0.000000 +0:209 0.000000 +0:209 0.000000 +0:209 1.000000 +0:210 Branch: Return with expression +0:210 'm' ( temp highp 3X3 matrix of float) +0:212 Function Definition: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float) +0:212 Function Parameters: +0:212 'id' ( in highp int) +0:213 Sequence +0:213 Sequence +0:213 move second child to first child ( temp highp 3X3 matrix of float) +0:213 'm' ( temp highp 3X3 matrix of float) +0:213 Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:213 'id' ( in highp int) +0:214 Branch: Return with expression +0:214 'm' ( temp highp 3X3 matrix of float) +0:216 Function Definition: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float) +0:216 Function Parameters: +0:216 'index' ( in highp int) +0:216 'curColor' ( in highp 4-component vector of float) +0:217 Sequence +0:217 subtract second child into first child ( temp highp int) +0:217 'index' ( in highp int) +0:217 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:217 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:217 Constant: +0:217 0 (const uint) +0:219 Sequence +0:219 move second child to first child ( temp highp int) +0:219 'coord' ( temp highp int) +0:219 'index' ( in highp int) +0:220 Sequence +0:220 move second child to first child ( temp highp 4-component vector of float) +0:220 'samp' ( temp highp 4-component vector of float) +0:220 textureFetch ( global highp 4-component vector of float) +0:220 'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer) +0:220 'coord' ( temp highp int) +0:221 move second child to first child ( temp highp float) +0:221 direct index ( temp highp float) +0:221 'v' ( temp highp 4-component vector of float) +0:221 Constant: +0:221 0 (const int) +0:221 direct index ( temp highp float) +0:221 'samp' ( temp highp 4-component vector of float) +0:221 Constant: +0:221 0 (const int) +0:222 move second child to first child ( temp highp float) +0:222 direct index ( temp highp float) +0:222 'v' ( temp highp 4-component vector of float) +0:222 Constant: +0:222 1 (const int) +0:222 direct index ( temp highp float) +0:222 'samp' ( temp highp 4-component vector of float) +0:222 Constant: +0:222 1 (const int) +0:223 move second child to first child ( temp highp float) +0:223 direct index ( temp highp float) +0:223 'v' ( temp highp 4-component vector of float) +0:223 Constant: +0:223 2 (const int) +0:223 direct index ( temp highp float) +0:223 'samp' ( temp highp 4-component vector of float) +0:223 Constant: +0:223 2 (const int) +0:224 move second child to first child ( temp highp float) +0:224 direct index ( temp highp float) +0:224 'v' ( temp highp 4-component vector of float) +0:224 Constant: +0:224 3 (const int) +0:224 Constant: +0:224 1.000000 +0:225 move second child to first child ( temp highp float) +0:225 direct index ( temp highp float) +0:225 'curColor' ( in highp 4-component vector of float) +0:225 Constant: +0:225 0 (const int) +0:225 direct index ( temp highp float) +0:225 'v' ( temp highp 4-component vector of float) +0:225 Constant: +0:225 0 (const int) +0:227 move second child to first child ( temp highp float) +0:227 direct index ( temp highp float) +0:227 'curColor' ( in highp 4-component vector of float) +0:227 Constant: +0:227 1 (const int) +0:227 direct index ( temp highp float) +0:227 'v' ( temp highp 4-component vector of float) +0:227 Constant: +0:227 1 (const int) +0:229 move second child to first child ( temp highp float) +0:229 direct index ( temp highp float) +0:229 'curColor' ( in highp 4-component vector of float) +0:229 Constant: +0:229 2 (const int) +0:229 direct index ( temp highp float) +0:229 'v' ( temp highp 4-component vector of float) +0:229 Constant: +0:229 2 (const int) +0:231 Branch: Return with expression +0:231 'curColor' ( in highp 4-component vector of float) +0:233 Function Definition: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float) +0:233 Function Parameters: +0:233 'id' ( in highp int) +0:233 'pos' ( in highp 4-component vector of float) +0:234 Sequence +0:234 move second child to first child ( temp highp 4-component vector of float) +0:234 'pos' ( in highp 4-component vector of float) +0:234 matrix-times-vector ( temp highp 4-component vector of float) +0:234 Function Call: TDInstanceMat(i1; ( global highp 4X4 matrix of float) +0:234 'id' ( in highp int) +0:234 'pos' ( in highp 4-component vector of float) +0:235 Branch: Return with expression +0:235 matrix-times-vector ( temp highp 4-component vector of float) +0:235 world: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float) +0:235 indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:235 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:235 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:235 Constant: +0:235 0 (const uint) +0:235 Function Call: TDCameraIndex( ( global highp int) +0:235 Constant: +0:235 0 (const int) +0:235 'pos' ( in highp 4-component vector of float) +0:238 Function Definition: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:238 Function Parameters: +0:238 'id' ( in highp int) +0:238 'vec' ( in highp 3-component vector of float) +0:240 Sequence +0:240 Sequence +0:240 move second child to first child ( temp highp 3X3 matrix of float) +0:240 'm' ( temp highp 3X3 matrix of float) +0:240 Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:240 'id' ( in highp int) +0:241 Branch: Return with expression +0:241 matrix-times-vector ( temp highp 3-component vector of float) +0:241 Construct mat3 ( temp highp 3X3 matrix of float) +0:241 world: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float) +0:241 indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:241 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:241 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:241 Constant: +0:241 0 (const uint) +0:241 Function Call: TDCameraIndex( ( global highp int) +0:241 Constant: +0:241 0 (const int) +0:241 matrix-times-vector ( temp highp 3-component vector of float) +0:241 'm' ( temp highp 3X3 matrix of float) +0:241 'vec' ( in highp 3-component vector of float) +0:243 Function Definition: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:243 Function Parameters: +0:243 'id' ( in highp int) +0:243 'vec' ( in highp 3-component vector of float) +0:245 Sequence +0:245 Sequence +0:245 move second child to first child ( temp highp 3X3 matrix of float) +0:245 'm' ( temp highp 3X3 matrix of float) +0:245 Function Call: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float) +0:245 'id' ( in highp int) +0:246 Branch: Return with expression +0:246 matrix-times-vector ( temp highp 3-component vector of float) +0:246 Construct mat3 ( temp highp 3X3 matrix of float) +0:246 worldForNormals: direct index for structure (layout( column_major std140) global highp 3X3 matrix of float) +0:246 indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:246 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:246 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:246 Constant: +0:246 0 (const uint) +0:246 Function Call: TDCameraIndex( ( global highp int) +0:246 Constant: +0:246 13 (const int) +0:246 matrix-times-vector ( temp highp 3-component vector of float) +0:246 'm' ( temp highp 3X3 matrix of float) +0:246 'vec' ( in highp 3-component vector of float) +0:248 Function Definition: TDInstanceDeform(vf4; ( global highp 4-component vector of float) +0:248 Function Parameters: +0:248 'pos' ( in highp 4-component vector of float) +0:249 Sequence +0:249 Branch: Return with expression +0:249 Function Call: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float) +0:249 Function Call: TDInstanceID( ( global highp int) +0:249 'pos' ( in highp 4-component vector of float) +0:251 Function Definition: TDInstanceDeformVec(vf3; ( global highp 3-component vector of float) +0:251 Function Parameters: +0:251 'vec' ( in highp 3-component vector of float) +0:252 Sequence +0:252 Branch: Return with expression +0:252 Function Call: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:252 Function Call: TDInstanceID( ( global highp int) +0:252 'vec' ( in highp 3-component vector of float) +0:254 Function Definition: TDInstanceDeformNorm(vf3; ( global highp 3-component vector of float) +0:254 Function Parameters: +0:254 'vec' ( in highp 3-component vector of float) +0:255 Sequence +0:255 Branch: Return with expression +0:255 Function Call: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:255 Function Call: TDInstanceID( ( global highp int) +0:255 'vec' ( in highp 3-component vector of float) +0:257 Function Definition: TDInstanceActive( ( global bool) +0:257 Function Parameters: +0:257 Sequence +0:257 Branch: Return with expression +0:257 Function Call: TDInstanceActive(i1; ( global bool) +0:257 Function Call: TDInstanceID( ( global highp int) +0:258 Function Definition: TDInstanceTranslate( ( global highp 3-component vector of float) +0:258 Function Parameters: +0:258 Sequence +0:258 Branch: Return with expression +0:258 Function Call: TDInstanceTranslate(i1; ( global highp 3-component vector of float) +0:258 Function Call: TDInstanceID( ( global highp int) +0:259 Function Definition: TDInstanceRotateMat( ( global highp 3X3 matrix of float) +0:259 Function Parameters: +0:259 Sequence +0:259 Branch: Return with expression +0:259 Function Call: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float) +0:259 Function Call: TDInstanceID( ( global highp int) +0:260 Function Definition: TDInstanceScale( ( global highp 3-component vector of float) +0:260 Function Parameters: +0:260 Sequence +0:260 Branch: Return with expression +0:260 Function Call: TDInstanceScale(i1; ( global highp 3-component vector of float) +0:260 Function Call: TDInstanceID( ( global highp int) +0:261 Function Definition: TDInstanceMat( ( global highp 4X4 matrix of float) +0:261 Function Parameters: +0:261 Sequence +0:261 Branch: Return with expression +0:261 Function Call: TDInstanceMat(i1; ( global highp 4X4 matrix of float) +0:261 Function Call: TDInstanceID( ( global highp int) +0:263 Function Definition: TDInstanceMat3( ( global highp 3X3 matrix of float) +0:263 Function Parameters: +0:263 Sequence +0:263 Branch: Return with expression +0:263 Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:263 Function Call: TDInstanceID( ( global highp int) +0:265 Function Definition: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float) +0:265 Function Parameters: +0:265 't' ( in highp 3-component vector of float) +0:266 Sequence +0:266 Branch: Return with expression +0:266 Function Call: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float) +0:266 Function Call: TDInstanceID( ( global highp int) +0:266 't' ( in highp 3-component vector of float) +0:268 Function Definition: TDInstanceColor(vf4; ( global highp 4-component vector of float) +0:268 Function Parameters: +0:268 'curColor' ( in highp 4-component vector of float) +0:269 Sequence +0:269 Branch: Return with expression +0:269 Function Call: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float) +0:269 Function Call: TDInstanceID( ( global highp int) +0:269 'curColor' ( in highp 4-component vector of float) +0:271 Function Definition: TDSkinnedDeform(vf4; ( global highp 4-component vector of float) +0:271 Function Parameters: +0:271 'pos' ( in highp 4-component vector of float) +0:271 Sequence +0:271 Branch: Return with expression +0:271 'pos' ( in highp 4-component vector of float) +0:273 Function Definition: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float) +0:273 Function Parameters: +0:273 'vec' ( in highp 3-component vector of float) +0:273 Sequence +0:273 Branch: Return with expression +0:273 'vec' ( in highp 3-component vector of float) +0:275 Function Definition: TDFastDeformTangent(vf3;vf4;vf3; ( global highp 3-component vector of float) +0:275 Function Parameters: +0:275 'oldNorm' ( in highp 3-component vector of float) +0:275 'oldTangent' ( in highp 4-component vector of float) +0:275 'deformedNorm' ( in highp 3-component vector of float) +0:276 Sequence +0:276 Branch: Return with expression +0:276 vector swizzle ( temp highp 3-component vector of float) +0:276 'oldTangent' ( in highp 4-component vector of float) +0:276 Sequence +0:276 Constant: +0:276 0 (const int) +0:276 Constant: +0:276 1 (const int) +0:276 Constant: +0:276 2 (const int) +0:277 Function Definition: TDBoneMat(i1; ( global highp 4X4 matrix of float) +0:277 Function Parameters: +0:277 'index' ( in highp int) +0:278 Sequence +0:278 Branch: Return with expression +0:278 Constant: +0:278 1.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 1.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 1.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 1.000000 +0:280 Function Definition: TDDeform(vf4; ( global highp 4-component vector of float) +0:280 Function Parameters: +0:280 'pos' ( in highp 4-component vector of float) +0:281 Sequence +0:281 move second child to first child ( temp highp 4-component vector of float) +0:281 'pos' ( in highp 4-component vector of float) +0:281 Function Call: TDSkinnedDeform(vf4; ( global highp 4-component vector of float) +0:281 'pos' ( in highp 4-component vector of float) +0:282 move second child to first child ( temp highp 4-component vector of float) +0:282 'pos' ( in highp 4-component vector of float) +0:282 Function Call: TDInstanceDeform(vf4; ( global highp 4-component vector of float) +0:282 'pos' ( in highp 4-component vector of float) +0:283 Branch: Return with expression +0:283 'pos' ( in highp 4-component vector of float) +0:286 Function Definition: TDDeform(i1;vf3; ( global highp 4-component vector of float) +0:286 Function Parameters: +0:286 'instanceID' ( in highp int) +0:286 'p' ( in highp 3-component vector of float) +0:287 Sequence +0:287 Sequence +0:287 move second child to first child ( temp highp 4-component vector of float) +0:287 'pos' ( temp highp 4-component vector of float) +0:287 Construct vec4 ( temp highp 4-component vector of float) +0:287 'p' ( in highp 3-component vector of float) +0:287 Constant: +0:287 1.000000 +0:288 move second child to first child ( temp highp 4-component vector of float) +0:288 'pos' ( temp highp 4-component vector of float) +0:288 Function Call: TDSkinnedDeform(vf4; ( global highp 4-component vector of float) +0:288 'pos' ( temp highp 4-component vector of float) +0:289 move second child to first child ( temp highp 4-component vector of float) +0:289 'pos' ( temp highp 4-component vector of float) +0:289 Function Call: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float) +0:289 'instanceID' ( in highp int) +0:289 'pos' ( temp highp 4-component vector of float) +0:290 Branch: Return with expression +0:290 'pos' ( temp highp 4-component vector of float) +0:293 Function Definition: TDDeform(vf3; ( global highp 4-component vector of float) +0:293 Function Parameters: +0:293 'pos' ( in highp 3-component vector of float) +0:294 Sequence +0:294 Branch: Return with expression +0:294 Function Call: TDDeform(i1;vf3; ( global highp 4-component vector of float) +0:294 Function Call: TDInstanceID( ( global highp int) +0:294 'pos' ( in highp 3-component vector of float) +0:297 Function Definition: TDDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:297 Function Parameters: +0:297 'instanceID' ( in highp int) +0:297 'vec' ( in highp 3-component vector of float) +0:298 Sequence +0:298 move second child to first child ( temp highp 3-component vector of float) +0:298 'vec' ( in highp 3-component vector of float) +0:298 Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float) +0:298 'vec' ( in highp 3-component vector of float) +0:299 move second child to first child ( temp highp 3-component vector of float) +0:299 'vec' ( in highp 3-component vector of float) +0:299 Function Call: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:299 'instanceID' ( in highp int) +0:299 'vec' ( in highp 3-component vector of float) +0:300 Branch: Return with expression +0:300 'vec' ( in highp 3-component vector of float) +0:303 Function Definition: TDDeformVec(vf3; ( global highp 3-component vector of float) +0:303 Function Parameters: +0:303 'vec' ( in highp 3-component vector of float) +0:304 Sequence +0:304 Branch: Return with expression +0:304 Function Call: TDDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:304 Function Call: TDInstanceID( ( global highp int) +0:304 'vec' ( in highp 3-component vector of float) +0:307 Function Definition: TDDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:307 Function Parameters: +0:307 'instanceID' ( in highp int) +0:307 'vec' ( in highp 3-component vector of float) +0:308 Sequence +0:308 move second child to first child ( temp highp 3-component vector of float) +0:308 'vec' ( in highp 3-component vector of float) +0:308 Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float) +0:308 'vec' ( in highp 3-component vector of float) +0:309 move second child to first child ( temp highp 3-component vector of float) +0:309 'vec' ( in highp 3-component vector of float) +0:309 Function Call: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:309 'instanceID' ( in highp int) +0:309 'vec' ( in highp 3-component vector of float) +0:310 Branch: Return with expression +0:310 'vec' ( in highp 3-component vector of float) +0:313 Function Definition: TDDeformNorm(vf3; ( global highp 3-component vector of float) +0:313 Function Parameters: +0:313 'vec' ( in highp 3-component vector of float) +0:314 Sequence +0:314 Branch: Return with expression +0:314 Function Call: TDDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:314 Function Call: TDInstanceID( ( global highp int) +0:314 'vec' ( in highp 3-component vector of float) +0:317 Function Definition: TDSkinnedDeformNorm(vf3; ( global highp 3-component vector of float) +0:317 Function Parameters: +0:317 'vec' ( in highp 3-component vector of float) +0:318 Sequence +0:318 move second child to first child ( temp highp 3-component vector of float) +0:318 'vec' ( in highp 3-component vector of float) +0:318 Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float) +0:318 'vec' ( in highp 3-component vector of float) +0:319 Branch: Return with expression +0:319 'vec' ( in highp 3-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position, global highp 3-component vector of float direction, global highp 3-component vector of float diffuse, global highp 4-component vector of float nearFar, global highp 4-component vector of float lightSize, global highp 4-component vector of float misc, global highp 4-component vector of float coneLookupScaleBias, global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix, global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights}) +0:? 'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs}) +0:? 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:? 'anon@4' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor, global highp int renderTOPCameraIndex} uTDCamInfos}) +0:? 'anon@5' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor, global highp 4-component vector of float nearFar, global highp 4-component vector of float viewport, global highp 4-component vector of float viewportRes, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor} uTDGeneral}) +0:? 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:? 'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer) +0:? 'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) + +vk.relaxed.stagelink.0.0.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:95 Function Definition: main( ( global void) +0:95 Function Parameters: +0:99 Sequence +0:99 Function Call: TDCheckDiscard( ( global void) +0:101 Sequence +0:101 move second child to first child ( temp highp 4-component vector of float) +0:101 'outcol' ( temp highp 4-component vector of float) +0:101 Constant: +0:101 0.000000 +0:101 0.000000 +0:101 0.000000 +0:101 0.000000 +0:103 Sequence +0:103 move second child to first child ( temp highp 3-component vector of float) +0:103 'texCoord0' ( temp highp 3-component vector of float) +0:103 vector swizzle ( temp highp 3-component vector of float) +0:103 texCoord0: direct index for structure ( in highp 3-component vector of float) +0:103 'iVert' ( in block{ in highp 4-component vector of float color, in highp 3-component vector of float worldSpacePos, in highp 3-component vector of float texCoord0, flat in highp int cameraIndex, flat in highp int instance}) +0:103 Constant: +0:103 2 (const int) +0:103 Sequence +0:103 Constant: +0:103 0 (const int) +0:103 Constant: +0:103 1 (const int) +0:103 Constant: +0:103 2 (const int) +0:104 Sequence +0:104 move second child to first child ( temp highp float) +0:104 'actualTexZ' ( temp highp float) +0:104 mod ( global highp float) +0:104 Convert int to float ( temp highp float) +0:104 Convert float to int ( temp highp int) +0:104 direct index ( temp highp float) +0:104 'texCoord0' ( temp highp 3-component vector of float) +0:104 Constant: +0:104 2 (const int) +0:104 Constant: +0:104 2048.000000 +0:105 Sequence +0:105 move second child to first child ( temp highp float) +0:105 'instanceLoop' ( temp highp float) +0:105 Floor ( global highp float) +0:105 Convert int to float ( temp highp float) +0:105 divide ( temp highp int) +0:105 Convert float to int ( temp highp int) +0:105 direct index ( temp highp float) +0:105 'texCoord0' ( temp highp 3-component vector of float) +0:105 Constant: +0:105 2 (const int) +0:105 Constant: +0:105 2048 (const int) +0:106 move second child to first child ( temp highp float) +0:106 direct index ( temp highp float) +0:106 'texCoord0' ( temp highp 3-component vector of float) +0:106 Constant: +0:106 2 (const int) +0:106 'actualTexZ' ( temp highp float) +0:107 Sequence +0:107 move second child to first child ( temp highp 4-component vector of float) +0:107 'colorMapColor' ( temp highp 4-component vector of float) +0:107 texture ( global highp 4-component vector of float) +0:107 'sColorMap' ( uniform highp sampler2DArray) +0:107 vector swizzle ( temp highp 3-component vector of float) +0:107 'texCoord0' ( temp highp 3-component vector of float) +0:107 Sequence +0:107 Constant: +0:107 0 (const int) +0:107 Constant: +0:107 1 (const int) +0:107 Constant: +0:107 2 (const int) +0:109 Sequence +0:109 move second child to first child ( temp highp float) +0:109 'red' ( temp highp float) +0:109 indirect index ( temp highp float) +0:109 'colorMapColor' ( temp highp 4-component vector of float) +0:109 Convert float to int ( temp highp int) +0:109 'instanceLoop' ( temp highp float) +0:110 move second child to first child ( temp highp 4-component vector of float) +0:110 'colorMapColor' ( temp highp 4-component vector of float) +0:110 Construct vec4 ( temp highp 4-component vector of float) +0:110 'red' ( temp highp float) +0:112 add second child into first child ( temp highp 3-component vector of float) +0:112 vector swizzle ( temp highp 3-component vector of float) +0:112 'outcol' ( temp highp 4-component vector of float) +0:112 Sequence +0:112 Constant: +0:112 0 (const int) +0:112 Constant: +0:112 1 (const int) +0:112 Constant: +0:112 2 (const int) +0:112 component-wise multiply ( temp highp 3-component vector of float) +0:112 uConstant: direct index for structure ( uniform highp 3-component vector of float) +0:112 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:112 Constant: +0:112 3 (const uint) +0:112 vector swizzle ( temp highp 3-component vector of float) +0:112 color: direct index for structure ( in highp 4-component vector of float) +0:112 'iVert' ( in block{ in highp 4-component vector of float color, in highp 3-component vector of float worldSpacePos, in highp 3-component vector of float texCoord0, flat in highp int cameraIndex, flat in highp int instance}) +0:112 Constant: +0:112 0 (const int) +0:112 Sequence +0:112 Constant: +0:112 0 (const int) +0:112 Constant: +0:112 1 (const int) +0:112 Constant: +0:112 2 (const int) +0:114 multiply second child into first child ( temp highp 4-component vector of float) +0:114 'outcol' ( temp highp 4-component vector of float) +0:114 'colorMapColor' ( temp highp 4-component vector of float) +0:117 Sequence +0:117 move second child to first child ( temp highp float) +0:117 'alpha' ( temp highp float) +0:117 component-wise multiply ( temp highp float) +0:117 direct index ( temp highp float) +0:117 color: direct index for structure ( in highp 4-component vector of float) +0:117 'iVert' ( in block{ in highp 4-component vector of float color, in highp 3-component vector of float worldSpacePos, in highp 3-component vector of float texCoord0, flat in highp int cameraIndex, flat in highp int instance}) +0:117 Constant: +0:117 0 (const int) +0:117 Constant: +0:117 3 (const int) +0:117 direct index ( temp highp float) +0:117 'colorMapColor' ( temp highp 4-component vector of float) +0:117 Constant: +0:117 3 (const int) +0:120 move second child to first child ( temp highp 4-component vector of float) +0:120 'outcol' ( temp highp 4-component vector of float) +0:120 Function Call: TDDither(vf4; ( global highp 4-component vector of float) +0:120 'outcol' ( temp highp 4-component vector of float) +0:122 vector scale second child into first child ( temp highp 3-component vector of float) +0:122 vector swizzle ( temp highp 3-component vector of float) +0:122 'outcol' ( temp highp 4-component vector of float) +0:122 Sequence +0:122 Constant: +0:122 0 (const int) +0:122 Constant: +0:122 1 (const int) +0:122 Constant: +0:122 2 (const int) +0:122 'alpha' ( temp highp float) +0:126 Function Call: TDAlphaTest(f1; ( global void) +0:126 'alpha' ( temp highp float) +0:128 move second child to first child ( temp highp float) +0:128 direct index ( temp highp float) +0:128 'outcol' ( temp highp 4-component vector of float) +0:128 Constant: +0:128 3 (const int) +0:128 'alpha' ( temp highp float) +0:129 move second child to first child ( temp highp 4-component vector of float) +0:129 direct index (layout( location=0) temp highp 4-component vector of float) +0:129 'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float) +0:129 Constant: +0:129 0 (const int) +0:129 Function Call: TDOutputSwizzle(vf4; ( global highp 4-component vector of float) +0:129 'outcol' ( temp highp 4-component vector of float) +0:135 Sequence +0:135 Sequence +0:135 move second child to first child ( temp highp int) +0:135 'i' ( temp highp int) +0:135 Constant: +0:135 1 (const int) +0:135 Loop with condition tested first +0:135 Loop Condition +0:135 Compare Less Than ( temp bool) +0:135 'i' ( temp highp int) +0:135 Constant: +0:135 1 (const int) +0:135 Loop Body +0:137 Sequence +0:137 move second child to first child ( temp highp 4-component vector of float) +0:137 indirect index (layout( location=0) temp highp 4-component vector of float) +0:137 'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float) +0:137 'i' ( temp highp int) +0:137 Constant: +0:137 0.000000 +0:137 0.000000 +0:137 0.000000 +0:137 0.000000 +0:135 Loop Terminal Expression +0:135 Post-Increment ( temp highp int) +0:135 'i' ( temp highp int) +0:? Linker Objects +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor, global highp int renderTOPCameraIndex} uTDCamInfos}) +0:? 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor, global highp 4-component vector of float nearFar, global highp 4-component vector of float viewport, global highp 4-component vector of float viewportRes, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor} uTDGeneral}) +0:? 'sColorMap' ( uniform highp sampler2DArray) +0:? 'iVert' ( in block{ in highp 4-component vector of float color, in highp 3-component vector of float worldSpacePos, in highp 3-component vector of float texCoord0, flat in highp int cameraIndex, flat in highp int instance}) +0:? 'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float) + +vk.relaxed.stagelink.0.1.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:116 Function Definition: TDColor(vf4; ( global highp 4-component vector of float) +0:116 Function Parameters: +0:116 'color' ( in highp 4-component vector of float) +0:116 Sequence +0:116 Branch: Return with expression +0:116 'color' ( in highp 4-component vector of float) +0:117 Function Definition: TDCheckOrderIndTrans( ( global void) +0:117 Function Parameters: +0:119 Function Definition: TDCheckDiscard( ( global void) +0:119 Function Parameters: +0:120 Sequence +0:120 Function Call: TDCheckOrderIndTrans( ( global void) +0:122 Function Definition: TDDither(vf4; ( global highp 4-component vector of float) +0:122 Function Parameters: +0:122 'color' ( in highp 4-component vector of float) +0:124 Sequence +0:124 Sequence +0:124 move second child to first child ( temp highp float) +0:124 'd' ( temp highp float) +0:125 direct index ( temp highp float) +0:125 texture ( global highp 4-component vector of float) +0:124 'sTDNoiseMap' ( uniform highp sampler2D) +0:125 divide ( temp highp 2-component vector of float) +0:125 vector swizzle ( temp highp 2-component vector of float) +0:125 'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord) +0:125 Sequence +0:125 Constant: +0:125 0 (const int) +0:125 Constant: +0:125 1 (const int) +0:125 Constant: +0:125 256.000000 +0:125 Constant: +0:125 0 (const int) +0:126 subtract second child into first child ( temp highp float) +0:126 'd' ( temp highp float) +0:126 Constant: +0:126 0.500000 +0:127 divide second child into first child ( temp highp float) +0:127 'd' ( temp highp float) +0:127 Constant: +0:127 256.000000 +0:128 Branch: Return with expression +0:128 Construct vec4 ( temp highp 4-component vector of float) +0:128 add ( temp highp 3-component vector of float) +0:128 vector swizzle ( temp highp 3-component vector of float) +0:128 'color' ( in highp 4-component vector of float) +0:128 Sequence +0:128 Constant: +0:128 0 (const int) +0:128 Constant: +0:128 1 (const int) +0:128 Constant: +0:128 2 (const int) +0:128 'd' ( temp highp float) +0:128 direct index ( temp highp float) +0:128 'color' ( in highp 4-component vector of float) +0:128 Constant: +0:128 3 (const int) +0:130 Function Definition: TDFrontFacing(vf3;vf3; ( global bool) +0:130 Function Parameters: +0:130 'pos' ( in highp 3-component vector of float) +0:130 'normal' ( in highp 3-component vector of float) +0:132 Sequence +0:132 Branch: Return with expression +0:132 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:134 Function Definition: TDAttenuateLight(i1;f1; ( global highp float) +0:134 Function Parameters: +0:134 'index' ( in highp int) +0:134 'lightDist' ( in highp float) +0:136 Sequence +0:136 Branch: Return with expression +0:136 Constant: +0:136 1.000000 +0:138 Function Definition: TDAlphaTest(f1; ( global void) +0:138 Function Parameters: +0:138 'alpha' ( in highp float) +0:140 Function Definition: TDHardShadow(i1;vf3; ( global highp float) +0:140 Function Parameters: +0:140 'lightIndex' ( in highp int) +0:140 'worldSpacePos' ( in highp 3-component vector of float) +0:141 Sequence +0:141 Branch: Return with expression +0:141 Constant: +0:141 0.000000 +0:142 Function Definition: TDSoftShadow(i1;vf3;i1;i1; ( global highp float) +0:142 Function Parameters: +0:142 'lightIndex' ( in highp int) +0:142 'worldSpacePos' ( in highp 3-component vector of float) +0:142 'samples' ( in highp int) +0:142 'steps' ( in highp int) +0:143 Sequence +0:143 Branch: Return with expression +0:143 Constant: +0:143 0.000000 +0:144 Function Definition: TDSoftShadow(i1;vf3; ( global highp float) +0:144 Function Parameters: +0:144 'lightIndex' ( in highp int) +0:144 'worldSpacePos' ( in highp 3-component vector of float) +0:145 Sequence +0:145 Branch: Return with expression +0:145 Constant: +0:145 0.000000 +0:146 Function Definition: TDShadow(i1;vf3; ( global highp float) +0:146 Function Parameters: +0:146 'lightIndex' ( in highp int) +0:146 'worldSpacePos' ( in highp 3-component vector of float) +0:147 Sequence +0:147 Branch: Return with expression +0:147 Constant: +0:147 0.000000 +0:152 Function Definition: iTDRadicalInverse_VdC(u1; ( global highp float) +0:152 Function Parameters: +0:152 'bits' ( in highp uint) +0:154 Sequence +0:154 move second child to first child ( temp highp uint) +0:154 'bits' ( in highp uint) +0:154 inclusive-or ( temp highp uint) +0:154 left-shift ( temp highp uint) +0:154 'bits' ( in highp uint) +0:154 Constant: +0:154 16 (const uint) +0:154 right-shift ( temp highp uint) +0:154 'bits' ( in highp uint) +0:154 Constant: +0:154 16 (const uint) +0:155 move second child to first child ( temp highp uint) +0:155 'bits' ( in highp uint) +0:155 inclusive-or ( temp highp uint) +0:155 left-shift ( temp highp uint) +0:155 bitwise and ( temp highp uint) +0:155 'bits' ( in highp uint) +0:155 Constant: +0:155 1431655765 (const uint) +0:155 Constant: +0:155 1 (const uint) +0:155 right-shift ( temp highp uint) +0:155 bitwise and ( temp highp uint) +0:155 'bits' ( in highp uint) +0:155 Constant: +0:155 2863311530 (const uint) +0:155 Constant: +0:155 1 (const uint) +0:156 move second child to first child ( temp highp uint) +0:156 'bits' ( in highp uint) +0:156 inclusive-or ( temp highp uint) +0:156 left-shift ( temp highp uint) +0:156 bitwise and ( temp highp uint) +0:156 'bits' ( in highp uint) +0:156 Constant: +0:156 858993459 (const uint) +0:156 Constant: +0:156 2 (const uint) +0:156 right-shift ( temp highp uint) +0:156 bitwise and ( temp highp uint) +0:156 'bits' ( in highp uint) +0:156 Constant: +0:156 3435973836 (const uint) +0:156 Constant: +0:156 2 (const uint) +0:157 move second child to first child ( temp highp uint) +0:157 'bits' ( in highp uint) +0:157 inclusive-or ( temp highp uint) +0:157 left-shift ( temp highp uint) +0:157 bitwise and ( temp highp uint) +0:157 'bits' ( in highp uint) +0:157 Constant: +0:157 252645135 (const uint) +0:157 Constant: +0:157 4 (const uint) +0:157 right-shift ( temp highp uint) +0:157 bitwise and ( temp highp uint) +0:157 'bits' ( in highp uint) +0:157 Constant: +0:157 4042322160 (const uint) +0:157 Constant: +0:157 4 (const uint) +0:158 move second child to first child ( temp highp uint) +0:158 'bits' ( in highp uint) +0:158 inclusive-or ( temp highp uint) +0:158 left-shift ( temp highp uint) +0:158 bitwise and ( temp highp uint) +0:158 'bits' ( in highp uint) +0:158 Constant: +0:158 16711935 (const uint) +0:158 Constant: +0:158 8 (const uint) +0:158 right-shift ( temp highp uint) +0:158 bitwise and ( temp highp uint) +0:158 'bits' ( in highp uint) +0:158 Constant: +0:158 4278255360 (const uint) +0:158 Constant: +0:158 8 (const uint) +0:159 Branch: Return with expression +0:159 component-wise multiply ( temp highp float) +0:159 Convert uint to float ( temp highp float) +0:159 'bits' ( in highp uint) +0:159 Constant: +0:159 2.3283064365387e-10 +0:161 Function Definition: iTDHammersley(u1;u1; ( global highp 2-component vector of float) +0:161 Function Parameters: +0:161 'i' ( in highp uint) +0:161 'N' ( in highp uint) +0:163 Sequence +0:163 Branch: Return with expression +0:163 Construct vec2 ( temp highp 2-component vector of float) +0:163 divide ( temp highp float) +0:163 Convert uint to float ( temp highp float) +0:163 'i' ( in highp uint) +0:163 Convert uint to float ( temp highp float) +0:163 'N' ( in highp uint) +0:163 Function Call: iTDRadicalInverse_VdC(u1; ( global highp float) +0:163 'i' ( in highp uint) +0:165 Function Definition: iTDImportanceSampleGGX(vf2;f1;vf3; ( global highp 3-component vector of float) +0:165 Function Parameters: +0:165 'Xi' ( in highp 2-component vector of float) +0:165 'roughness2' ( in highp float) +0:165 'N' ( in highp 3-component vector of float) +0:167 Sequence +0:167 Sequence +0:167 move second child to first child ( temp highp float) +0:167 'a' ( temp highp float) +0:167 'roughness2' ( in highp float) +0:168 Sequence +0:168 move second child to first child ( temp highp float) +0:168 'phi' ( temp highp float) +0:168 component-wise multiply ( temp highp float) +0:168 Constant: +0:168 6.283185 +0:168 direct index ( temp highp float) +0:168 'Xi' ( in highp 2-component vector of float) +0:168 Constant: +0:168 0 (const int) +0:169 Sequence +0:169 move second child to first child ( temp highp float) +0:169 'cosTheta' ( temp highp float) +0:169 sqrt ( global highp float) +0:169 divide ( temp highp float) +0:169 subtract ( temp highp float) +0:169 Constant: +0:169 1.000000 +0:169 direct index ( temp highp float) +0:169 'Xi' ( in highp 2-component vector of float) +0:169 Constant: +0:169 1 (const int) +0:169 add ( temp highp float) +0:169 Constant: +0:169 1.000000 +0:169 component-wise multiply ( temp highp float) +0:169 subtract ( temp highp float) +0:169 component-wise multiply ( temp highp float) +0:169 'a' ( temp highp float) +0:169 'a' ( temp highp float) +0:169 Constant: +0:169 1.000000 +0:169 direct index ( temp highp float) +0:169 'Xi' ( in highp 2-component vector of float) +0:169 Constant: +0:169 1 (const int) +0:170 Sequence +0:170 move second child to first child ( temp highp float) +0:170 'sinTheta' ( temp highp float) +0:170 sqrt ( global highp float) +0:170 subtract ( temp highp float) +0:170 Constant: +0:170 1.000000 +0:170 component-wise multiply ( temp highp float) +0:170 'cosTheta' ( temp highp float) +0:170 'cosTheta' ( temp highp float) +0:173 move second child to first child ( temp highp float) +0:173 direct index ( temp highp float) +0:173 'H' ( temp highp 3-component vector of float) +0:173 Constant: +0:173 0 (const int) +0:173 component-wise multiply ( temp highp float) +0:173 'sinTheta' ( temp highp float) +0:173 cosine ( global highp float) +0:173 'phi' ( temp highp float) +0:174 move second child to first child ( temp highp float) +0:174 direct index ( temp highp float) +0:174 'H' ( temp highp 3-component vector of float) +0:174 Constant: +0:174 1 (const int) +0:174 component-wise multiply ( temp highp float) +0:174 'sinTheta' ( temp highp float) +0:174 sine ( global highp float) +0:174 'phi' ( temp highp float) +0:175 move second child to first child ( temp highp float) +0:175 direct index ( temp highp float) +0:175 'H' ( temp highp 3-component vector of float) +0:175 Constant: +0:175 2 (const int) +0:175 'cosTheta' ( temp highp float) +0:177 Sequence +0:177 move second child to first child ( temp highp 3-component vector of float) +0:177 'upVector' ( temp highp 3-component vector of float) +0:177 Test condition and select ( temp highp 3-component vector of float) +0:177 Condition +0:177 Compare Less Than ( temp bool) +0:177 Absolute value ( global highp float) +0:177 direct index ( temp highp float) +0:177 'N' ( in highp 3-component vector of float) +0:177 Constant: +0:177 2 (const int) +0:177 Constant: +0:177 0.999000 +0:177 true case +0:177 Constant: +0:177 0.000000 +0:177 0.000000 +0:177 1.000000 +0:177 false case +0:177 Constant: +0:177 1.000000 +0:177 0.000000 +0:177 0.000000 +0:178 Sequence +0:178 move second child to first child ( temp highp 3-component vector of float) +0:178 'tangentX' ( temp highp 3-component vector of float) +0:178 normalize ( global highp 3-component vector of float) +0:178 cross-product ( global highp 3-component vector of float) +0:178 'upVector' ( temp highp 3-component vector of float) +0:178 'N' ( in highp 3-component vector of float) +0:179 Sequence +0:179 move second child to first child ( temp highp 3-component vector of float) +0:179 'tangentY' ( temp highp 3-component vector of float) +0:179 cross-product ( global highp 3-component vector of float) +0:179 'N' ( in highp 3-component vector of float) +0:179 'tangentX' ( temp highp 3-component vector of float) +0:182 Sequence +0:182 move second child to first child ( temp highp 3-component vector of float) +0:182 'worldResult' ( temp highp 3-component vector of float) +0:182 add ( temp highp 3-component vector of float) +0:182 add ( temp highp 3-component vector of float) +0:182 vector-scale ( temp highp 3-component vector of float) +0:182 'tangentX' ( temp highp 3-component vector of float) +0:182 direct index ( temp highp float) +0:182 'H' ( temp highp 3-component vector of float) +0:182 Constant: +0:182 0 (const int) +0:182 vector-scale ( temp highp 3-component vector of float) +0:182 'tangentY' ( temp highp 3-component vector of float) +0:182 direct index ( temp highp float) +0:182 'H' ( temp highp 3-component vector of float) +0:182 Constant: +0:182 1 (const int) +0:182 vector-scale ( temp highp 3-component vector of float) +0:182 'N' ( in highp 3-component vector of float) +0:182 direct index ( temp highp float) +0:182 'H' ( temp highp 3-component vector of float) +0:182 Constant: +0:182 2 (const int) +0:183 Branch: Return with expression +0:183 'worldResult' ( temp highp 3-component vector of float) +0:185 Function Definition: iTDDistributionGGX(vf3;vf3;f1; ( global highp float) +0:185 Function Parameters: +0:185 'normal' ( in highp 3-component vector of float) +0:185 'half_vector' ( in highp 3-component vector of float) +0:185 'roughness2' ( in highp float) +0:? Sequence +0:189 Sequence +0:189 move second child to first child ( temp highp float) +0:189 'NdotH' ( temp highp float) +0:189 clamp ( global highp float) +0:189 dot-product ( global highp float) +0:189 'normal' ( in highp 3-component vector of float) +0:189 'half_vector' ( in highp 3-component vector of float) +0:189 Constant: +0:189 1.0000000000000e-06 +0:189 Constant: +0:189 1.000000 +0:191 Sequence +0:191 move second child to first child ( temp highp float) +0:191 'alpha2' ( temp highp float) +0:191 component-wise multiply ( temp highp float) +0:191 'roughness2' ( in highp float) +0:191 'roughness2' ( in highp float) +0:193 Sequence +0:193 move second child to first child ( temp highp float) +0:193 'denom' ( temp highp float) +0:193 add ( temp highp float) +0:193 component-wise multiply ( temp highp float) +0:193 component-wise multiply ( temp highp float) +0:193 'NdotH' ( temp highp float) +0:193 'NdotH' ( temp highp float) +0:193 subtract ( temp highp float) +0:193 'alpha2' ( temp highp float) +0:193 Constant: +0:193 1.000000 +0:193 Constant: +0:193 1.000000 +0:194 move second child to first child ( temp highp float) +0:194 'denom' ( temp highp float) +0:194 max ( global highp float) +0:194 Constant: +0:194 1.0000000000000e-08 +0:194 'denom' ( temp highp float) +0:195 Branch: Return with expression +0:195 divide ( temp highp float) +0:195 'alpha2' ( temp highp float) +0:195 component-wise multiply ( temp highp float) +0:195 component-wise multiply ( temp highp float) +0:195 Constant: +0:195 3.141593 +0:195 'denom' ( temp highp float) +0:195 'denom' ( temp highp float) +0:197 Function Definition: iTDCalcF(vf3;f1; ( global highp 3-component vector of float) +0:197 Function Parameters: +0:197 'F0' ( in highp 3-component vector of float) +0:197 'VdotH' ( in highp float) +0:198 Sequence +0:198 Branch: Return with expression +0:198 add ( temp highp 3-component vector of float) +0:198 'F0' ( in highp 3-component vector of float) +0:198 vector-scale ( temp highp 3-component vector of float) +0:198 subtract ( temp highp 3-component vector of float) +0:198 Constant: +0:198 1.000000 +0:198 1.000000 +0:198 1.000000 +0:198 'F0' ( in highp 3-component vector of float) +0:198 pow ( global highp float) +0:198 Constant: +0:198 2.000000 +0:198 component-wise multiply ( temp highp float) +0:198 subtract ( temp highp float) +0:198 component-wise multiply ( temp highp float) +0:198 Constant: +0:198 -5.554730 +0:198 'VdotH' ( in highp float) +0:198 Constant: +0:198 6.983160 +0:198 'VdotH' ( in highp float) +0:201 Function Definition: iTDCalcG(f1;f1;f1; ( global highp float) +0:201 Function Parameters: +0:201 'NdotL' ( in highp float) +0:201 'NdotV' ( in highp float) +0:201 'k' ( in highp float) +0:202 Sequence +0:202 Sequence +0:202 move second child to first child ( temp highp float) +0:202 'Gl' ( temp highp float) +0:202 divide ( temp highp float) +0:202 Constant: +0:202 1.000000 +0:202 add ( temp highp float) +0:202 component-wise multiply ( temp highp float) +0:202 'NdotL' ( in highp float) +0:202 subtract ( temp highp float) +0:202 Constant: +0:202 1.000000 +0:202 'k' ( in highp float) +0:202 'k' ( in highp float) +0:203 Sequence +0:203 move second child to first child ( temp highp float) +0:203 'Gv' ( temp highp float) +0:203 divide ( temp highp float) +0:203 Constant: +0:203 1.000000 +0:203 add ( temp highp float) +0:203 component-wise multiply ( temp highp float) +0:203 'NdotV' ( in highp float) +0:203 subtract ( temp highp float) +0:203 Constant: +0:203 1.000000 +0:203 'k' ( in highp float) +0:203 'k' ( in highp float) +0:204 Branch: Return with expression +0:204 component-wise multiply ( temp highp float) +0:204 'Gl' ( temp highp float) +0:204 'Gv' ( temp highp float) +0:207 Function Definition: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:207 Function Parameters: +0:207 'index' ( in highp int) +0:207 'diffuseColor' ( in highp 3-component vector of float) +0:207 'specularColor' ( in highp 3-component vector of float) +0:207 'worldSpacePos' ( in highp 3-component vector of float) +0:207 'normal' ( in highp 3-component vector of float) +0:207 'shadowStrength' ( in highp float) +0:207 'shadowColor' ( in highp 3-component vector of float) +0:207 'camVector' ( in highp 3-component vector of float) +0:207 'roughness' ( in highp float) +0:? Sequence +0:210 Branch: Return with expression +0:210 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:213 Function Definition: TDLightingPBR(vf3;vf3;f1;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global void) +0:213 Function Parameters: +0:213 'diffuseContrib' ( inout highp 3-component vector of float) +0:213 'specularContrib' ( inout highp 3-component vector of float) +0:213 'shadowStrengthOut' ( inout highp float) +0:213 'index' ( in highp int) +0:213 'diffuseColor' ( in highp 3-component vector of float) +0:213 'specularColor' ( in highp 3-component vector of float) +0:213 'worldSpacePos' ( in highp 3-component vector of float) +0:213 'normal' ( in highp 3-component vector of float) +0:213 'shadowStrength' ( in highp float) +0:213 'shadowColor' ( in highp 3-component vector of float) +0:213 'camVector' ( in highp 3-component vector of float) +0:213 'roughness' ( in highp float) +0:215 Sequence +0:215 Sequence +0:215 move second child to first child ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:215 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:215 Function Call: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:215 'index' ( in highp int) +0:215 'diffuseColor' ( in highp 3-component vector of float) +0:215 'specularColor' ( in highp 3-component vector of float) +0:215 'worldSpacePos' ( in highp 3-component vector of float) +0:215 'normal' ( in highp 3-component vector of float) +0:215 'shadowStrength' ( in highp float) +0:215 'shadowColor' ( in highp 3-component vector of float) +0:215 'camVector' ( in highp 3-component vector of float) +0:215 'roughness' ( in highp float) +0:215 move second child to first child ( temp highp 3-component vector of float) +0:215 'diffuseContrib' ( inout highp 3-component vector of float) +0:215 diffuse: direct index for structure ( global highp 3-component vector of float) +0:215 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:215 Constant: +0:215 0 (const int) +0:216 move second child to first child ( temp highp 3-component vector of float) +0:216 'specularContrib' ( inout highp 3-component vector of float) +0:216 specular: direct index for structure ( global highp 3-component vector of float) +0:216 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:216 Constant: +0:216 1 (const int) +0:217 move second child to first child ( temp highp float) +0:217 'shadowStrengthOut' ( inout highp float) +0:217 shadowStrength: direct index for structure ( global highp float) +0:217 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:217 Constant: +0:217 2 (const int) +0:220 Function Definition: TDLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global void) +0:220 Function Parameters: +0:220 'diffuseContrib' ( inout highp 3-component vector of float) +0:220 'specularContrib' ( inout highp 3-component vector of float) +0:220 'index' ( in highp int) +0:220 'diffuseColor' ( in highp 3-component vector of float) +0:220 'specularColor' ( in highp 3-component vector of float) +0:220 'worldSpacePos' ( in highp 3-component vector of float) +0:220 'normal' ( in highp 3-component vector of float) +0:220 'shadowStrength' ( in highp float) +0:220 'shadowColor' ( in highp 3-component vector of float) +0:220 'camVector' ( in highp 3-component vector of float) +0:220 'roughness' ( in highp float) +0:222 Sequence +0:222 Sequence +0:222 move second child to first child ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:222 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:222 Function Call: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:222 'index' ( in highp int) +0:222 'diffuseColor' ( in highp 3-component vector of float) +0:222 'specularColor' ( in highp 3-component vector of float) +0:222 'worldSpacePos' ( in highp 3-component vector of float) +0:222 'normal' ( in highp 3-component vector of float) +0:222 'shadowStrength' ( in highp float) +0:222 'shadowColor' ( in highp 3-component vector of float) +0:222 'camVector' ( in highp 3-component vector of float) +0:222 'roughness' ( in highp float) +0:222 move second child to first child ( temp highp 3-component vector of float) +0:222 'diffuseContrib' ( inout highp 3-component vector of float) +0:222 diffuse: direct index for structure ( global highp 3-component vector of float) +0:222 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:222 Constant: +0:222 0 (const int) +0:223 move second child to first child ( temp highp 3-component vector of float) +0:223 'specularContrib' ( inout highp 3-component vector of float) +0:223 specular: direct index for structure ( global highp 3-component vector of float) +0:223 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:223 Constant: +0:223 1 (const int) +0:226 Function Definition: TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:226 Function Parameters: +0:226 'index' ( in highp int) +0:226 'diffuseColor' ( in highp 3-component vector of float) +0:226 'specularColor' ( in highp 3-component vector of float) +0:226 'normal' ( in highp 3-component vector of float) +0:226 'camVector' ( in highp 3-component vector of float) +0:226 'roughness' ( in highp float) +0:226 'ambientOcclusion' ( in highp float) +0:? Sequence +0:229 Branch: Return with expression +0:229 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:232 Function Definition: TDEnvLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;f1; ( global void) +0:232 Function Parameters: +0:232 'diffuseContrib' ( inout highp 3-component vector of float) +0:232 'specularContrib' ( inout highp 3-component vector of float) +0:232 'index' ( in highp int) +0:232 'diffuseColor' ( in highp 3-component vector of float) +0:232 'specularColor' ( in highp 3-component vector of float) +0:232 'normal' ( in highp 3-component vector of float) +0:232 'camVector' ( in highp 3-component vector of float) +0:232 'roughness' ( in highp float) +0:232 'ambientOcclusion' ( in highp float) +0:234 Sequence +0:234 Sequence +0:234 move second child to first child ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:234 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:234 Function Call: TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:234 'index' ( in highp int) +0:234 'diffuseColor' ( in highp 3-component vector of float) +0:234 'specularColor' ( in highp 3-component vector of float) +0:234 'normal' ( in highp 3-component vector of float) +0:234 'camVector' ( in highp 3-component vector of float) +0:234 'roughness' ( in highp float) +0:234 'ambientOcclusion' ( in highp float) +0:235 move second child to first child ( temp highp 3-component vector of float) +0:235 'diffuseContrib' ( inout highp 3-component vector of float) +0:235 diffuse: direct index for structure ( global highp 3-component vector of float) +0:235 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:235 Constant: +0:235 0 (const int) +0:236 move second child to first child ( temp highp 3-component vector of float) +0:236 'specularContrib' ( inout highp 3-component vector of float) +0:236 specular: direct index for structure ( global highp 3-component vector of float) +0:236 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:236 Constant: +0:236 1 (const int) +0:239 Function Definition: TDLighting(i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:239 Function Parameters: +0:239 'index' ( in highp int) +0:239 'worldSpacePos' ( in highp 3-component vector of float) +0:239 'normal' ( in highp 3-component vector of float) +0:239 'shadowStrength' ( in highp float) +0:239 'shadowColor' ( in highp 3-component vector of float) +0:239 'camVector' ( in highp 3-component vector of float) +0:239 'shininess' ( in highp float) +0:239 'shininess2' ( in highp float) +0:? Sequence +0:242 switch +0:242 condition +0:242 'index' ( in highp int) +0:242 body +0:242 Sequence +0:244 default: +0:? Sequence +0:245 move second child to first child ( temp highp 3-component vector of float) +0:245 diffuse: direct index for structure ( global highp 3-component vector of float) +0:245 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:245 Constant: +0:245 0 (const int) +0:245 Constant: +0:245 0.000000 +0:245 0.000000 +0:245 0.000000 +0:246 move second child to first child ( temp highp 3-component vector of float) +0:246 specular: direct index for structure ( global highp 3-component vector of float) +0:246 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:246 Constant: +0:246 1 (const int) +0:246 Constant: +0:246 0.000000 +0:246 0.000000 +0:246 0.000000 +0:247 move second child to first child ( temp highp 3-component vector of float) +0:247 specular2: direct index for structure ( global highp 3-component vector of float) +0:247 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:247 Constant: +0:247 2 (const int) +0:247 Constant: +0:247 0.000000 +0:247 0.000000 +0:247 0.000000 +0:248 move second child to first child ( temp highp float) +0:248 shadowStrength: direct index for structure ( global highp float) +0:248 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:248 Constant: +0:248 3 (const int) +0:248 Constant: +0:248 0.000000 +0:249 Branch: Break +0:251 Branch: Return with expression +0:251 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:254 Function Definition: TDLighting(vf3;vf3;vf3;f1;i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global void) +0:254 Function Parameters: +0:254 'diffuseContrib' ( inout highp 3-component vector of float) +0:254 'specularContrib' ( inout highp 3-component vector of float) +0:254 'specularContrib2' ( inout highp 3-component vector of float) +0:254 'shadowStrengthOut' ( inout highp float) +0:254 'index' ( in highp int) +0:254 'worldSpacePos' ( in highp 3-component vector of float) +0:254 'normal' ( in highp 3-component vector of float) +0:254 'shadowStrength' ( in highp float) +0:254 'shadowColor' ( in highp 3-component vector of float) +0:254 'camVector' ( in highp 3-component vector of float) +0:254 'shininess' ( in highp float) +0:254 'shininess2' ( in highp float) +0:? Sequence +0:257 switch +0:257 condition +0:257 'index' ( in highp int) +0:257 body +0:257 Sequence +0:259 default: +0:? Sequence +0:260 move second child to first child ( temp highp 3-component vector of float) +0:260 diffuse: direct index for structure ( global highp 3-component vector of float) +0:260 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:260 Constant: +0:260 0 (const int) +0:260 Constant: +0:260 0.000000 +0:260 0.000000 +0:260 0.000000 +0:261 move second child to first child ( temp highp 3-component vector of float) +0:261 specular: direct index for structure ( global highp 3-component vector of float) +0:261 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:261 Constant: +0:261 1 (const int) +0:261 Constant: +0:261 0.000000 +0:261 0.000000 +0:261 0.000000 +0:262 move second child to first child ( temp highp 3-component vector of float) +0:262 specular2: direct index for structure ( global highp 3-component vector of float) +0:262 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:262 Constant: +0:262 2 (const int) +0:262 Constant: +0:262 0.000000 +0:262 0.000000 +0:262 0.000000 +0:263 move second child to first child ( temp highp float) +0:263 shadowStrength: direct index for structure ( global highp float) +0:263 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:263 Constant: +0:263 3 (const int) +0:263 Constant: +0:263 0.000000 +0:264 Branch: Break +0:266 move second child to first child ( temp highp 3-component vector of float) +0:266 'diffuseContrib' ( inout highp 3-component vector of float) +0:266 diffuse: direct index for structure ( global highp 3-component vector of float) +0:266 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:266 Constant: +0:266 0 (const int) +0:267 move second child to first child ( temp highp 3-component vector of float) +0:267 'specularContrib' ( inout highp 3-component vector of float) +0:267 specular: direct index for structure ( global highp 3-component vector of float) +0:267 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:267 Constant: +0:267 1 (const int) +0:268 move second child to first child ( temp highp 3-component vector of float) +0:268 'specularContrib2' ( inout highp 3-component vector of float) +0:268 specular2: direct index for structure ( global highp 3-component vector of float) +0:268 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:268 Constant: +0:268 2 (const int) +0:269 move second child to first child ( temp highp float) +0:269 'shadowStrengthOut' ( inout highp float) +0:269 shadowStrength: direct index for structure ( global highp float) +0:269 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:269 Constant: +0:269 3 (const int) +0:272 Function Definition: TDLighting(vf3;vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global void) +0:272 Function Parameters: +0:272 'diffuseContrib' ( inout highp 3-component vector of float) +0:272 'specularContrib' ( inout highp 3-component vector of float) +0:272 'specularContrib2' ( inout highp 3-component vector of float) +0:272 'index' ( in highp int) +0:272 'worldSpacePos' ( in highp 3-component vector of float) +0:272 'normal' ( in highp 3-component vector of float) +0:272 'shadowStrength' ( in highp float) +0:272 'shadowColor' ( in highp 3-component vector of float) +0:272 'camVector' ( in highp 3-component vector of float) +0:272 'shininess' ( in highp float) +0:272 'shininess2' ( in highp float) +0:? Sequence +0:275 switch +0:275 condition +0:275 'index' ( in highp int) +0:275 body +0:275 Sequence +0:277 default: +0:? Sequence +0:278 move second child to first child ( temp highp 3-component vector of float) +0:278 diffuse: direct index for structure ( global highp 3-component vector of float) +0:278 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:278 Constant: +0:278 0 (const int) +0:278 Constant: +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:279 move second child to first child ( temp highp 3-component vector of float) +0:279 specular: direct index for structure ( global highp 3-component vector of float) +0:279 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:279 Constant: +0:279 1 (const int) +0:279 Constant: +0:279 0.000000 +0:279 0.000000 +0:279 0.000000 +0:280 move second child to first child ( temp highp 3-component vector of float) +0:280 specular2: direct index for structure ( global highp 3-component vector of float) +0:280 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:280 Constant: +0:280 2 (const int) +0:280 Constant: +0:280 0.000000 +0:280 0.000000 +0:280 0.000000 +0:281 move second child to first child ( temp highp float) +0:281 shadowStrength: direct index for structure ( global highp float) +0:281 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:281 Constant: +0:281 3 (const int) +0:281 Constant: +0:281 0.000000 +0:282 Branch: Break +0:284 move second child to first child ( temp highp 3-component vector of float) +0:284 'diffuseContrib' ( inout highp 3-component vector of float) +0:284 diffuse: direct index for structure ( global highp 3-component vector of float) +0:284 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:284 Constant: +0:284 0 (const int) +0:285 move second child to first child ( temp highp 3-component vector of float) +0:285 'specularContrib' ( inout highp 3-component vector of float) +0:285 specular: direct index for structure ( global highp 3-component vector of float) +0:285 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:285 Constant: +0:285 1 (const int) +0:286 move second child to first child ( temp highp 3-component vector of float) +0:286 'specularContrib2' ( inout highp 3-component vector of float) +0:286 specular2: direct index for structure ( global highp 3-component vector of float) +0:286 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:286 Constant: +0:286 2 (const int) +0:289 Function Definition: TDLighting(vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1; ( global void) +0:289 Function Parameters: +0:289 'diffuseContrib' ( inout highp 3-component vector of float) +0:289 'specularContrib' ( inout highp 3-component vector of float) +0:289 'index' ( in highp int) +0:289 'worldSpacePos' ( in highp 3-component vector of float) +0:289 'normal' ( in highp 3-component vector of float) +0:289 'shadowStrength' ( in highp float) +0:289 'shadowColor' ( in highp 3-component vector of float) +0:289 'camVector' ( in highp 3-component vector of float) +0:289 'shininess' ( in highp float) +0:? Sequence +0:292 switch +0:292 condition +0:292 'index' ( in highp int) +0:292 body +0:292 Sequence +0:294 default: +0:? Sequence +0:295 move second child to first child ( temp highp 3-component vector of float) +0:295 diffuse: direct index for structure ( global highp 3-component vector of float) +0:295 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:295 Constant: +0:295 0 (const int) +0:295 Constant: +0:295 0.000000 +0:295 0.000000 +0:295 0.000000 +0:296 move second child to first child ( temp highp 3-component vector of float) +0:296 specular: direct index for structure ( global highp 3-component vector of float) +0:296 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:296 Constant: +0:296 1 (const int) +0:296 Constant: +0:296 0.000000 +0:296 0.000000 +0:296 0.000000 +0:297 move second child to first child ( temp highp 3-component vector of float) +0:297 specular2: direct index for structure ( global highp 3-component vector of float) +0:297 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:297 Constant: +0:297 2 (const int) +0:297 Constant: +0:297 0.000000 +0:297 0.000000 +0:297 0.000000 +0:298 move second child to first child ( temp highp float) +0:298 shadowStrength: direct index for structure ( global highp float) +0:298 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:298 Constant: +0:298 3 (const int) +0:298 Constant: +0:298 0.000000 +0:299 Branch: Break +0:301 move second child to first child ( temp highp 3-component vector of float) +0:301 'diffuseContrib' ( inout highp 3-component vector of float) +0:301 diffuse: direct index for structure ( global highp 3-component vector of float) +0:301 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:301 Constant: +0:301 0 (const int) +0:302 move second child to first child ( temp highp 3-component vector of float) +0:302 'specularContrib' ( inout highp 3-component vector of float) +0:302 specular: direct index for structure ( global highp 3-component vector of float) +0:302 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:302 Constant: +0:302 1 (const int) +0:305 Function Definition: TDLighting(vf3;vf3;vf3;i1;vf3;vf3;vf3;f1;f1; ( global void) +0:305 Function Parameters: +0:305 'diffuseContrib' ( inout highp 3-component vector of float) +0:305 'specularContrib' ( inout highp 3-component vector of float) +0:305 'specularContrib2' ( inout highp 3-component vector of float) +0:305 'index' ( in highp int) +0:305 'worldSpacePos' ( in highp 3-component vector of float) +0:305 'normal' ( in highp 3-component vector of float) +0:305 'camVector' ( in highp 3-component vector of float) +0:305 'shininess' ( in highp float) +0:305 'shininess2' ( in highp float) +0:? Sequence +0:308 switch +0:308 condition +0:308 'index' ( in highp int) +0:308 body +0:308 Sequence +0:310 default: +0:? Sequence +0:311 move second child to first child ( temp highp 3-component vector of float) +0:311 diffuse: direct index for structure ( global highp 3-component vector of float) +0:311 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:311 Constant: +0:311 0 (const int) +0:311 Constant: +0:311 0.000000 +0:311 0.000000 +0:311 0.000000 +0:312 move second child to first child ( temp highp 3-component vector of float) +0:312 specular: direct index for structure ( global highp 3-component vector of float) +0:312 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:312 Constant: +0:312 1 (const int) +0:312 Constant: +0:312 0.000000 +0:312 0.000000 +0:312 0.000000 +0:313 move second child to first child ( temp highp 3-component vector of float) +0:313 specular2: direct index for structure ( global highp 3-component vector of float) +0:313 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:313 Constant: +0:313 2 (const int) +0:313 Constant: +0:313 0.000000 +0:313 0.000000 +0:313 0.000000 +0:314 move second child to first child ( temp highp float) +0:314 shadowStrength: direct index for structure ( global highp float) +0:314 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:314 Constant: +0:314 3 (const int) +0:314 Constant: +0:314 0.000000 +0:315 Branch: Break +0:317 move second child to first child ( temp highp 3-component vector of float) +0:317 'diffuseContrib' ( inout highp 3-component vector of float) +0:317 diffuse: direct index for structure ( global highp 3-component vector of float) +0:317 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:317 Constant: +0:317 0 (const int) +0:318 move second child to first child ( temp highp 3-component vector of float) +0:318 'specularContrib' ( inout highp 3-component vector of float) +0:318 specular: direct index for structure ( global highp 3-component vector of float) +0:318 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:318 Constant: +0:318 1 (const int) +0:319 move second child to first child ( temp highp 3-component vector of float) +0:319 'specularContrib2' ( inout highp 3-component vector of float) +0:319 specular2: direct index for structure ( global highp 3-component vector of float) +0:319 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:319 Constant: +0:319 2 (const int) +0:322 Function Definition: TDLighting(vf3;vf3;i1;vf3;vf3;vf3;f1; ( global void) +0:322 Function Parameters: +0:322 'diffuseContrib' ( inout highp 3-component vector of float) +0:322 'specularContrib' ( inout highp 3-component vector of float) +0:322 'index' ( in highp int) +0:322 'worldSpacePos' ( in highp 3-component vector of float) +0:322 'normal' ( in highp 3-component vector of float) +0:322 'camVector' ( in highp 3-component vector of float) +0:322 'shininess' ( in highp float) +0:? Sequence +0:325 switch +0:325 condition +0:325 'index' ( in highp int) +0:325 body +0:325 Sequence +0:327 default: +0:? Sequence +0:328 move second child to first child ( temp highp 3-component vector of float) +0:328 diffuse: direct index for structure ( global highp 3-component vector of float) +0:328 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:328 Constant: +0:328 0 (const int) +0:328 Constant: +0:328 0.000000 +0:328 0.000000 +0:328 0.000000 +0:329 move second child to first child ( temp highp 3-component vector of float) +0:329 specular: direct index for structure ( global highp 3-component vector of float) +0:329 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:329 Constant: +0:329 1 (const int) +0:329 Constant: +0:329 0.000000 +0:329 0.000000 +0:329 0.000000 +0:330 move second child to first child ( temp highp 3-component vector of float) +0:330 specular2: direct index for structure ( global highp 3-component vector of float) +0:330 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:330 Constant: +0:330 2 (const int) +0:330 Constant: +0:330 0.000000 +0:330 0.000000 +0:330 0.000000 +0:331 move second child to first child ( temp highp float) +0:331 shadowStrength: direct index for structure ( global highp float) +0:331 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:331 Constant: +0:331 3 (const int) +0:331 Constant: +0:331 0.000000 +0:332 Branch: Break +0:334 move second child to first child ( temp highp 3-component vector of float) +0:334 'diffuseContrib' ( inout highp 3-component vector of float) +0:334 diffuse: direct index for structure ( global highp 3-component vector of float) +0:334 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:334 Constant: +0:334 0 (const int) +0:335 move second child to first child ( temp highp 3-component vector of float) +0:335 'specularContrib' ( inout highp 3-component vector of float) +0:335 specular: direct index for structure ( global highp 3-component vector of float) +0:335 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:335 Constant: +0:335 1 (const int) +0:338 Function Definition: TDLighting(vf3;i1;vf3;vf3; ( global void) +0:338 Function Parameters: +0:338 'diffuseContrib' ( inout highp 3-component vector of float) +0:338 'index' ( in highp int) +0:338 'worldSpacePos' ( in highp 3-component vector of float) +0:338 'normal' ( in highp 3-component vector of float) +0:? Sequence +0:341 switch +0:341 condition +0:341 'index' ( in highp int) +0:341 body +0:341 Sequence +0:343 default: +0:? Sequence +0:344 move second child to first child ( temp highp 3-component vector of float) +0:344 diffuse: direct index for structure ( global highp 3-component vector of float) +0:344 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:344 Constant: +0:344 0 (const int) +0:344 Constant: +0:344 0.000000 +0:344 0.000000 +0:344 0.000000 +0:345 move second child to first child ( temp highp 3-component vector of float) +0:345 specular: direct index for structure ( global highp 3-component vector of float) +0:345 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:345 Constant: +0:345 1 (const int) +0:345 Constant: +0:345 0.000000 +0:345 0.000000 +0:345 0.000000 +0:346 move second child to first child ( temp highp 3-component vector of float) +0:346 specular2: direct index for structure ( global highp 3-component vector of float) +0:346 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:346 Constant: +0:346 2 (const int) +0:346 Constant: +0:346 0.000000 +0:346 0.000000 +0:346 0.000000 +0:347 move second child to first child ( temp highp float) +0:347 shadowStrength: direct index for structure ( global highp float) +0:347 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:347 Constant: +0:347 3 (const int) +0:347 Constant: +0:347 0.000000 +0:348 Branch: Break +0:350 move second child to first child ( temp highp 3-component vector of float) +0:350 'diffuseContrib' ( inout highp 3-component vector of float) +0:350 diffuse: direct index for structure ( global highp 3-component vector of float) +0:350 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:350 Constant: +0:350 0 (const int) +0:353 Function Definition: TDLighting(vf3;i1;vf3;vf3;f1;vf3; ( global void) +0:353 Function Parameters: +0:353 'diffuseContrib' ( inout highp 3-component vector of float) +0:353 'index' ( in highp int) +0:353 'worldSpacePos' ( in highp 3-component vector of float) +0:353 'normal' ( in highp 3-component vector of float) +0:353 'shadowStrength' ( in highp float) +0:353 'shadowColor' ( in highp 3-component vector of float) +0:? Sequence +0:356 switch +0:356 condition +0:356 'index' ( in highp int) +0:356 body +0:356 Sequence +0:358 default: +0:? Sequence +0:359 move second child to first child ( temp highp 3-component vector of float) +0:359 diffuse: direct index for structure ( global highp 3-component vector of float) +0:359 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:359 Constant: +0:359 0 (const int) +0:359 Constant: +0:359 0.000000 +0:359 0.000000 +0:359 0.000000 +0:360 move second child to first child ( temp highp 3-component vector of float) +0:360 specular: direct index for structure ( global highp 3-component vector of float) +0:360 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:360 Constant: +0:360 1 (const int) +0:360 Constant: +0:360 0.000000 +0:360 0.000000 +0:360 0.000000 +0:361 move second child to first child ( temp highp 3-component vector of float) +0:361 specular2: direct index for structure ( global highp 3-component vector of float) +0:361 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:361 Constant: +0:361 2 (const int) +0:361 Constant: +0:361 0.000000 +0:361 0.000000 +0:361 0.000000 +0:362 move second child to first child ( temp highp float) +0:362 shadowStrength: direct index for structure ( global highp float) +0:362 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:362 Constant: +0:362 3 (const int) +0:362 Constant: +0:362 0.000000 +0:363 Branch: Break +0:365 move second child to first child ( temp highp 3-component vector of float) +0:365 'diffuseContrib' ( inout highp 3-component vector of float) +0:365 diffuse: direct index for structure ( global highp 3-component vector of float) +0:365 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:365 Constant: +0:365 0 (const int) +0:367 Function Definition: TDProjMap(i1;vf3;vf4; ( global highp 4-component vector of float) +0:367 Function Parameters: +0:367 'index' ( in highp int) +0:367 'worldSpacePos' ( in highp 3-component vector of float) +0:367 'defaultColor' ( in highp 4-component vector of float) +0:368 Sequence +0:368 switch +0:368 condition +0:368 'index' ( in highp int) +0:368 body +0:368 Sequence +0:370 default: +0:? Sequence +0:370 Branch: Return with expression +0:370 'defaultColor' ( in highp 4-component vector of float) +0:373 Function Definition: TDFog(vf4;vf3;i1; ( global highp 4-component vector of float) +0:373 Function Parameters: +0:373 'color' ( in highp 4-component vector of float) +0:373 'lightingSpacePosition' ( in highp 3-component vector of float) +0:373 'cameraIndex' ( in highp int) +0:374 Sequence +0:374 switch +0:374 condition +0:374 'cameraIndex' ( in highp int) +0:374 body +0:374 Sequence +0:375 default: +0:376 case: with expression +0:376 Constant: +0:376 0 (const int) +0:? Sequence +0:378 Sequence +0:378 Branch: Return with expression +0:378 'color' ( in highp 4-component vector of float) +0:382 Function Definition: TDFog(vf4;vf3; ( global highp 4-component vector of float) +0:382 Function Parameters: +0:382 'color' ( in highp 4-component vector of float) +0:382 'lightingSpacePosition' ( in highp 3-component vector of float) +0:384 Sequence +0:384 Branch: Return with expression +0:384 Function Call: TDFog(vf4;vf3;i1; ( global highp 4-component vector of float) +0:384 'color' ( in highp 4-component vector of float) +0:384 'lightingSpacePosition' ( in highp 3-component vector of float) +0:384 Constant: +0:384 0 (const int) +0:386 Function Definition: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float) +0:386 Function Parameters: +0:386 'index' ( in highp int) +0:386 't' ( in highp 3-component vector of float) +0:? Sequence +0:388 Sequence +0:388 move second child to first child ( temp highp int) +0:388 'coord' ( temp highp int) +0:388 'index' ( in highp int) +0:389 Sequence +0:389 move second child to first child ( temp highp 4-component vector of float) +0:389 'samp' ( temp highp 4-component vector of float) +0:389 textureFetch ( global highp 4-component vector of float) +0:389 'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer) +0:389 'coord' ( temp highp int) +0:390 move second child to first child ( temp highp float) +0:390 direct index ( temp highp float) +0:390 'v' ( temp highp 3-component vector of float) +0:390 Constant: +0:390 0 (const int) +0:390 direct index ( temp highp float) +0:390 't' ( in highp 3-component vector of float) +0:390 Constant: +0:390 0 (const int) +0:391 move second child to first child ( temp highp float) +0:391 direct index ( temp highp float) +0:391 'v' ( temp highp 3-component vector of float) +0:391 Constant: +0:391 1 (const int) +0:391 direct index ( temp highp float) +0:391 't' ( in highp 3-component vector of float) +0:391 Constant: +0:391 1 (const int) +0:392 move second child to first child ( temp highp float) +0:392 direct index ( temp highp float) +0:392 'v' ( temp highp 3-component vector of float) +0:392 Constant: +0:392 2 (const int) +0:392 direct index ( temp highp float) +0:392 'samp' ( temp highp 4-component vector of float) +0:392 Constant: +0:392 0 (const int) +0:393 move second child to first child ( temp highp 3-component vector of float) +0:393 vector swizzle ( temp highp 3-component vector of float) +0:393 't' ( in highp 3-component vector of float) +0:393 Sequence +0:393 Constant: +0:393 0 (const int) +0:393 Constant: +0:393 1 (const int) +0:393 Constant: +0:393 2 (const int) +0:393 vector swizzle ( temp highp 3-component vector of float) +0:393 'v' ( temp highp 3-component vector of float) +0:393 Sequence +0:393 Constant: +0:393 0 (const int) +0:393 Constant: +0:393 1 (const int) +0:393 Constant: +0:393 2 (const int) +0:394 Branch: Return with expression +0:394 't' ( in highp 3-component vector of float) +0:396 Function Definition: TDInstanceActive(i1; ( global bool) +0:396 Function Parameters: +0:396 'index' ( in highp int) +0:397 Sequence +0:397 subtract second child into first child ( temp highp int) +0:397 'index' ( in highp int) +0:397 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:397 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:397 Constant: +0:397 0 (const uint) +0:399 Sequence +0:399 move second child to first child ( temp highp int) +0:399 'coord' ( temp highp int) +0:399 'index' ( in highp int) +0:400 Sequence +0:400 move second child to first child ( temp highp 4-component vector of float) +0:400 'samp' ( temp highp 4-component vector of float) +0:400 textureFetch ( global highp 4-component vector of float) +0:400 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:400 'coord' ( temp highp int) +0:401 move second child to first child ( temp highp float) +0:401 'v' ( temp highp float) +0:401 direct index ( temp highp float) +0:401 'samp' ( temp highp 4-component vector of float) +0:401 Constant: +0:401 0 (const int) +0:402 Branch: Return with expression +0:402 Compare Not Equal ( temp bool) +0:402 'v' ( temp highp float) +0:402 Constant: +0:402 0.000000 +0:404 Function Definition: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float) +0:404 Function Parameters: +0:404 'index' ( in highp int) +0:404 'instanceActive' ( out bool) +0:405 Sequence +0:405 Sequence +0:405 move second child to first child ( temp highp int) +0:405 'origIndex' ( temp highp int) +0:405 'index' ( in highp int) +0:406 subtract second child into first child ( temp highp int) +0:406 'index' ( in highp int) +0:406 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:406 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:406 Constant: +0:406 0 (const uint) +0:408 Sequence +0:408 move second child to first child ( temp highp int) +0:408 'coord' ( temp highp int) +0:408 'index' ( in highp int) +0:409 Sequence +0:409 move second child to first child ( temp highp 4-component vector of float) +0:409 'samp' ( temp highp 4-component vector of float) +0:409 textureFetch ( global highp 4-component vector of float) +0:409 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:409 'coord' ( temp highp int) +0:410 move second child to first child ( temp highp float) +0:410 direct index ( temp highp float) +0:410 'v' ( temp highp 3-component vector of float) +0:410 Constant: +0:410 0 (const int) +0:410 direct index ( temp highp float) +0:410 'samp' ( temp highp 4-component vector of float) +0:410 Constant: +0:410 1 (const int) +0:411 move second child to first child ( temp highp float) +0:411 direct index ( temp highp float) +0:411 'v' ( temp highp 3-component vector of float) +0:411 Constant: +0:411 1 (const int) +0:411 direct index ( temp highp float) +0:411 'samp' ( temp highp 4-component vector of float) +0:411 Constant: +0:411 2 (const int) +0:412 move second child to first child ( temp highp float) +0:412 direct index ( temp highp float) +0:412 'v' ( temp highp 3-component vector of float) +0:412 Constant: +0:412 2 (const int) +0:412 direct index ( temp highp float) +0:412 'samp' ( temp highp 4-component vector of float) +0:412 Constant: +0:412 3 (const int) +0:413 move second child to first child ( temp bool) +0:413 'instanceActive' ( out bool) +0:413 Compare Not Equal ( temp bool) +0:413 direct index ( temp highp float) +0:413 'samp' ( temp highp 4-component vector of float) +0:413 Constant: +0:413 0 (const int) +0:413 Constant: +0:413 0.000000 +0:414 Branch: Return with expression +0:414 'v' ( temp highp 3-component vector of float) +0:416 Function Definition: TDInstanceTranslate(i1; ( global highp 3-component vector of float) +0:416 Function Parameters: +0:416 'index' ( in highp int) +0:417 Sequence +0:417 subtract second child into first child ( temp highp int) +0:417 'index' ( in highp int) +0:417 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:417 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:417 Constant: +0:417 0 (const uint) +0:419 Sequence +0:419 move second child to first child ( temp highp int) +0:419 'coord' ( temp highp int) +0:419 'index' ( in highp int) +0:420 Sequence +0:420 move second child to first child ( temp highp 4-component vector of float) +0:420 'samp' ( temp highp 4-component vector of float) +0:420 textureFetch ( global highp 4-component vector of float) +0:420 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:420 'coord' ( temp highp int) +0:421 move second child to first child ( temp highp float) +0:421 direct index ( temp highp float) +0:421 'v' ( temp highp 3-component vector of float) +0:421 Constant: +0:421 0 (const int) +0:421 direct index ( temp highp float) +0:421 'samp' ( temp highp 4-component vector of float) +0:421 Constant: +0:421 1 (const int) +0:422 move second child to first child ( temp highp float) +0:422 direct index ( temp highp float) +0:422 'v' ( temp highp 3-component vector of float) +0:422 Constant: +0:422 1 (const int) +0:422 direct index ( temp highp float) +0:422 'samp' ( temp highp 4-component vector of float) +0:422 Constant: +0:422 2 (const int) +0:423 move second child to first child ( temp highp float) +0:423 direct index ( temp highp float) +0:423 'v' ( temp highp 3-component vector of float) +0:423 Constant: +0:423 2 (const int) +0:423 direct index ( temp highp float) +0:423 'samp' ( temp highp 4-component vector of float) +0:423 Constant: +0:423 3 (const int) +0:424 Branch: Return with expression +0:424 'v' ( temp highp 3-component vector of float) +0:426 Function Definition: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float) +0:426 Function Parameters: +0:426 'index' ( in highp int) +0:427 Sequence +0:427 subtract second child into first child ( temp highp int) +0:427 'index' ( in highp int) +0:427 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:427 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:427 Constant: +0:427 0 (const uint) +0:428 Sequence +0:428 move second child to first child ( temp highp 3-component vector of float) +0:428 'v' ( temp highp 3-component vector of float) +0:428 Constant: +0:428 0.000000 +0:428 0.000000 +0:428 0.000000 +0:429 Sequence +0:429 move second child to first child ( temp highp 3X3 matrix of float) +0:429 'm' ( temp highp 3X3 matrix of float) +0:429 Constant: +0:429 1.000000 +0:429 0.000000 +0:429 0.000000 +0:429 0.000000 +0:429 1.000000 +0:429 0.000000 +0:429 0.000000 +0:429 0.000000 +0:429 1.000000 +0:433 Branch: Return with expression +0:433 'm' ( temp highp 3X3 matrix of float) +0:435 Function Definition: TDInstanceScale(i1; ( global highp 3-component vector of float) +0:435 Function Parameters: +0:435 'index' ( in highp int) +0:436 Sequence +0:436 subtract second child into first child ( temp highp int) +0:436 'index' ( in highp int) +0:436 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:436 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:436 Constant: +0:436 0 (const uint) +0:437 Sequence +0:437 move second child to first child ( temp highp 3-component vector of float) +0:437 'v' ( temp highp 3-component vector of float) +0:437 Constant: +0:437 1.000000 +0:437 1.000000 +0:437 1.000000 +0:438 Branch: Return with expression +0:438 'v' ( temp highp 3-component vector of float) +0:440 Function Definition: TDInstancePivot(i1; ( global highp 3-component vector of float) +0:440 Function Parameters: +0:440 'index' ( in highp int) +0:441 Sequence +0:441 subtract second child into first child ( temp highp int) +0:441 'index' ( in highp int) +0:441 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:441 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:441 Constant: +0:441 0 (const uint) +0:442 Sequence +0:442 move second child to first child ( temp highp 3-component vector of float) +0:442 'v' ( temp highp 3-component vector of float) +0:442 Constant: +0:442 0.000000 +0:442 0.000000 +0:442 0.000000 +0:443 Branch: Return with expression +0:443 'v' ( temp highp 3-component vector of float) +0:445 Function Definition: TDInstanceRotTo(i1; ( global highp 3-component vector of float) +0:445 Function Parameters: +0:445 'index' ( in highp int) +0:446 Sequence +0:446 subtract second child into first child ( temp highp int) +0:446 'index' ( in highp int) +0:446 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:446 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:446 Constant: +0:446 0 (const uint) +0:447 Sequence +0:447 move second child to first child ( temp highp 3-component vector of float) +0:447 'v' ( temp highp 3-component vector of float) +0:447 Constant: +0:447 0.000000 +0:447 0.000000 +0:447 1.000000 +0:448 Branch: Return with expression +0:448 'v' ( temp highp 3-component vector of float) +0:450 Function Definition: TDInstanceRotUp(i1; ( global highp 3-component vector of float) +0:450 Function Parameters: +0:450 'index' ( in highp int) +0:451 Sequence +0:451 subtract second child into first child ( temp highp int) +0:451 'index' ( in highp int) +0:451 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:451 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:451 Constant: +0:451 0 (const uint) +0:452 Sequence +0:452 move second child to first child ( temp highp 3-component vector of float) +0:452 'v' ( temp highp 3-component vector of float) +0:452 Constant: +0:452 0.000000 +0:452 1.000000 +0:452 0.000000 +0:453 Branch: Return with expression +0:453 'v' ( temp highp 3-component vector of float) +0:455 Function Definition: TDInstanceMat(i1; ( global highp 4X4 matrix of float) +0:455 Function Parameters: +0:455 'id' ( in highp int) +0:456 Sequence +0:456 Sequence +0:456 move second child to first child ( temp bool) +0:456 'instanceActive' ( temp bool) +0:456 Constant: +0:456 true (const bool) +0:457 Sequence +0:457 move second child to first child ( temp highp 3-component vector of float) +0:457 't' ( temp highp 3-component vector of float) +0:457 Function Call: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float) +0:457 'id' ( in highp int) +0:457 'instanceActive' ( temp bool) +0:458 Test condition and select ( temp void) +0:458 Condition +0:458 Negate conditional ( temp bool) +0:458 'instanceActive' ( temp bool) +0:458 true case +0:460 Sequence +0:460 Branch: Return with expression +0:460 Constant: +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:462 Sequence +0:462 move second child to first child ( temp highp 4X4 matrix of float) +0:462 'm' ( temp highp 4X4 matrix of float) +0:462 Constant: +0:462 1.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 1.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 1.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 1.000000 +0:464 Sequence +0:464 Sequence +0:464 move second child to first child ( temp highp 3-component vector of float) +0:464 'tt' ( temp highp 3-component vector of float) +0:464 't' ( temp highp 3-component vector of float) +0:465 add second child into first child ( temp highp float) +0:465 direct index ( temp highp float) +0:465 direct index ( temp highp 4-component vector of float) +0:465 'm' ( temp highp 4X4 matrix of float) +0:465 Constant: +0:465 3 (const int) +0:465 Constant: +0:465 0 (const int) +0:465 component-wise multiply ( temp highp float) +0:465 direct index ( temp highp float) +0:465 direct index ( temp highp 4-component vector of float) +0:465 'm' ( temp highp 4X4 matrix of float) +0:465 Constant: +0:465 0 (const int) +0:465 Constant: +0:465 0 (const int) +0:465 direct index ( temp highp float) +0:465 'tt' ( temp highp 3-component vector of float) +0:465 Constant: +0:465 0 (const int) +0:466 add second child into first child ( temp highp float) +0:466 direct index ( temp highp float) +0:466 direct index ( temp highp 4-component vector of float) +0:466 'm' ( temp highp 4X4 matrix of float) +0:466 Constant: +0:466 3 (const int) +0:466 Constant: +0:466 1 (const int) +0:466 component-wise multiply ( temp highp float) +0:466 direct index ( temp highp float) +0:466 direct index ( temp highp 4-component vector of float) +0:466 'm' ( temp highp 4X4 matrix of float) +0:466 Constant: +0:466 0 (const int) +0:466 Constant: +0:466 1 (const int) +0:466 direct index ( temp highp float) +0:466 'tt' ( temp highp 3-component vector of float) +0:466 Constant: +0:466 0 (const int) +0:467 add second child into first child ( temp highp float) +0:467 direct index ( temp highp float) +0:467 direct index ( temp highp 4-component vector of float) +0:467 'm' ( temp highp 4X4 matrix of float) +0:467 Constant: +0:467 3 (const int) +0:467 Constant: +0:467 2 (const int) +0:467 component-wise multiply ( temp highp float) +0:467 direct index ( temp highp float) +0:467 direct index ( temp highp 4-component vector of float) +0:467 'm' ( temp highp 4X4 matrix of float) +0:467 Constant: +0:467 0 (const int) +0:467 Constant: +0:467 2 (const int) +0:467 direct index ( temp highp float) +0:467 'tt' ( temp highp 3-component vector of float) +0:467 Constant: +0:467 0 (const int) +0:468 add second child into first child ( temp highp float) +0:468 direct index ( temp highp float) +0:468 direct index ( temp highp 4-component vector of float) +0:468 'm' ( temp highp 4X4 matrix of float) +0:468 Constant: +0:468 3 (const int) +0:468 Constant: +0:468 3 (const int) +0:468 component-wise multiply ( temp highp float) +0:468 direct index ( temp highp float) +0:468 direct index ( temp highp 4-component vector of float) +0:468 'm' ( temp highp 4X4 matrix of float) +0:468 Constant: +0:468 0 (const int) +0:468 Constant: +0:468 3 (const int) +0:468 direct index ( temp highp float) +0:468 'tt' ( temp highp 3-component vector of float) +0:468 Constant: +0:468 0 (const int) +0:469 add second child into first child ( temp highp float) +0:469 direct index ( temp highp float) +0:469 direct index ( temp highp 4-component vector of float) +0:469 'm' ( temp highp 4X4 matrix of float) +0:469 Constant: +0:469 3 (const int) +0:469 Constant: +0:469 0 (const int) +0:469 component-wise multiply ( temp highp float) +0:469 direct index ( temp highp float) +0:469 direct index ( temp highp 4-component vector of float) +0:469 'm' ( temp highp 4X4 matrix of float) +0:469 Constant: +0:469 1 (const int) +0:469 Constant: +0:469 0 (const int) +0:469 direct index ( temp highp float) +0:469 'tt' ( temp highp 3-component vector of float) +0:469 Constant: +0:469 1 (const int) +0:470 add second child into first child ( temp highp float) +0:470 direct index ( temp highp float) +0:470 direct index ( temp highp 4-component vector of float) +0:470 'm' ( temp highp 4X4 matrix of float) +0:470 Constant: +0:470 3 (const int) +0:470 Constant: +0:470 1 (const int) +0:470 component-wise multiply ( temp highp float) +0:470 direct index ( temp highp float) +0:470 direct index ( temp highp 4-component vector of float) +0:470 'm' ( temp highp 4X4 matrix of float) +0:470 Constant: +0:470 1 (const int) +0:470 Constant: +0:470 1 (const int) +0:470 direct index ( temp highp float) +0:470 'tt' ( temp highp 3-component vector of float) +0:470 Constant: +0:470 1 (const int) +0:471 add second child into first child ( temp highp float) +0:471 direct index ( temp highp float) +0:471 direct index ( temp highp 4-component vector of float) +0:471 'm' ( temp highp 4X4 matrix of float) +0:471 Constant: +0:471 3 (const int) +0:471 Constant: +0:471 2 (const int) +0:471 component-wise multiply ( temp highp float) +0:471 direct index ( temp highp float) +0:471 direct index ( temp highp 4-component vector of float) +0:471 'm' ( temp highp 4X4 matrix of float) +0:471 Constant: +0:471 1 (const int) +0:471 Constant: +0:471 2 (const int) +0:471 direct index ( temp highp float) +0:471 'tt' ( temp highp 3-component vector of float) +0:471 Constant: +0:471 1 (const int) +0:472 add second child into first child ( temp highp float) +0:472 direct index ( temp highp float) +0:472 direct index ( temp highp 4-component vector of float) +0:472 'm' ( temp highp 4X4 matrix of float) +0:472 Constant: +0:472 3 (const int) +0:472 Constant: +0:472 3 (const int) +0:472 component-wise multiply ( temp highp float) +0:472 direct index ( temp highp float) +0:472 direct index ( temp highp 4-component vector of float) +0:472 'm' ( temp highp 4X4 matrix of float) +0:472 Constant: +0:472 1 (const int) +0:472 Constant: +0:472 3 (const int) +0:472 direct index ( temp highp float) +0:472 'tt' ( temp highp 3-component vector of float) +0:472 Constant: +0:472 1 (const int) +0:473 add second child into first child ( temp highp float) +0:473 direct index ( temp highp float) +0:473 direct index ( temp highp 4-component vector of float) +0:473 'm' ( temp highp 4X4 matrix of float) +0:473 Constant: +0:473 3 (const int) +0:473 Constant: +0:473 0 (const int) +0:473 component-wise multiply ( temp highp float) +0:473 direct index ( temp highp float) +0:473 direct index ( temp highp 4-component vector of float) +0:473 'm' ( temp highp 4X4 matrix of float) +0:473 Constant: +0:473 2 (const int) +0:473 Constant: +0:473 0 (const int) +0:473 direct index ( temp highp float) +0:473 'tt' ( temp highp 3-component vector of float) +0:473 Constant: +0:473 2 (const int) +0:474 add second child into first child ( temp highp float) +0:474 direct index ( temp highp float) +0:474 direct index ( temp highp 4-component vector of float) +0:474 'm' ( temp highp 4X4 matrix of float) +0:474 Constant: +0:474 3 (const int) +0:474 Constant: +0:474 1 (const int) +0:474 component-wise multiply ( temp highp float) +0:474 direct index ( temp highp float) +0:474 direct index ( temp highp 4-component vector of float) +0:474 'm' ( temp highp 4X4 matrix of float) +0:474 Constant: +0:474 2 (const int) +0:474 Constant: +0:474 1 (const int) +0:474 direct index ( temp highp float) +0:474 'tt' ( temp highp 3-component vector of float) +0:474 Constant: +0:474 2 (const int) +0:475 add second child into first child ( temp highp float) +0:475 direct index ( temp highp float) +0:475 direct index ( temp highp 4-component vector of float) +0:475 'm' ( temp highp 4X4 matrix of float) +0:475 Constant: +0:475 3 (const int) +0:475 Constant: +0:475 2 (const int) +0:475 component-wise multiply ( temp highp float) +0:475 direct index ( temp highp float) +0:475 direct index ( temp highp 4-component vector of float) +0:475 'm' ( temp highp 4X4 matrix of float) +0:475 Constant: +0:475 2 (const int) +0:475 Constant: +0:475 2 (const int) +0:475 direct index ( temp highp float) +0:475 'tt' ( temp highp 3-component vector of float) +0:475 Constant: +0:475 2 (const int) +0:476 add second child into first child ( temp highp float) +0:476 direct index ( temp highp float) +0:476 direct index ( temp highp 4-component vector of float) +0:476 'm' ( temp highp 4X4 matrix of float) +0:476 Constant: +0:476 3 (const int) +0:476 Constant: +0:476 3 (const int) +0:476 component-wise multiply ( temp highp float) +0:476 direct index ( temp highp float) +0:476 direct index ( temp highp 4-component vector of float) +0:476 'm' ( temp highp 4X4 matrix of float) +0:476 Constant: +0:476 2 (const int) +0:476 Constant: +0:476 3 (const int) +0:476 direct index ( temp highp float) +0:476 'tt' ( temp highp 3-component vector of float) +0:476 Constant: +0:476 2 (const int) +0:478 Branch: Return with expression +0:478 'm' ( temp highp 4X4 matrix of float) +0:480 Function Definition: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:480 Function Parameters: +0:480 'id' ( in highp int) +0:481 Sequence +0:481 Sequence +0:481 move second child to first child ( temp highp 3X3 matrix of float) +0:481 'm' ( temp highp 3X3 matrix of float) +0:481 Constant: +0:481 1.000000 +0:481 0.000000 +0:481 0.000000 +0:481 0.000000 +0:481 1.000000 +0:481 0.000000 +0:481 0.000000 +0:481 0.000000 +0:481 1.000000 +0:482 Branch: Return with expression +0:482 'm' ( temp highp 3X3 matrix of float) +0:484 Function Definition: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float) +0:484 Function Parameters: +0:484 'id' ( in highp int) +0:485 Sequence +0:485 Sequence +0:485 move second child to first child ( temp highp 3X3 matrix of float) +0:485 'm' ( temp highp 3X3 matrix of float) +0:485 Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:485 'id' ( in highp int) +0:486 Branch: Return with expression +0:486 'm' ( temp highp 3X3 matrix of float) +0:488 Function Definition: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float) +0:488 Function Parameters: +0:488 'index' ( in highp int) +0:488 'curColor' ( in highp 4-component vector of float) +0:489 Sequence +0:489 subtract second child into first child ( temp highp int) +0:489 'index' ( in highp int) +0:489 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:489 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:489 Constant: +0:489 0 (const uint) +0:491 Sequence +0:491 move second child to first child ( temp highp int) +0:491 'coord' ( temp highp int) +0:491 'index' ( in highp int) +0:492 Sequence +0:492 move second child to first child ( temp highp 4-component vector of float) +0:492 'samp' ( temp highp 4-component vector of float) +0:492 textureFetch ( global highp 4-component vector of float) +0:492 'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer) +0:492 'coord' ( temp highp int) +0:493 move second child to first child ( temp highp float) +0:493 direct index ( temp highp float) +0:493 'v' ( temp highp 4-component vector of float) +0:493 Constant: +0:493 0 (const int) +0:493 direct index ( temp highp float) +0:493 'samp' ( temp highp 4-component vector of float) +0:493 Constant: +0:493 0 (const int) +0:494 move second child to first child ( temp highp float) +0:494 direct index ( temp highp float) +0:494 'v' ( temp highp 4-component vector of float) +0:494 Constant: +0:494 1 (const int) +0:494 direct index ( temp highp float) +0:494 'samp' ( temp highp 4-component vector of float) +0:494 Constant: +0:494 1 (const int) +0:495 move second child to first child ( temp highp float) +0:495 direct index ( temp highp float) +0:495 'v' ( temp highp 4-component vector of float) +0:495 Constant: +0:495 2 (const int) +0:495 direct index ( temp highp float) +0:495 'samp' ( temp highp 4-component vector of float) +0:495 Constant: +0:495 2 (const int) +0:496 move second child to first child ( temp highp float) +0:496 direct index ( temp highp float) +0:496 'v' ( temp highp 4-component vector of float) +0:496 Constant: +0:496 3 (const int) +0:496 Constant: +0:496 1.000000 +0:497 move second child to first child ( temp highp float) +0:497 direct index ( temp highp float) +0:497 'curColor' ( in highp 4-component vector of float) +0:497 Constant: +0:497 0 (const int) +0:497 direct index ( temp highp float) +0:497 'v' ( temp highp 4-component vector of float) +0:497 Constant: +0:497 0 (const int) +0:499 move second child to first child ( temp highp float) +0:499 direct index ( temp highp float) +0:499 'curColor' ( in highp 4-component vector of float) +0:499 Constant: +0:499 1 (const int) +0:499 direct index ( temp highp float) +0:499 'v' ( temp highp 4-component vector of float) +0:499 Constant: +0:499 1 (const int) +0:501 move second child to first child ( temp highp float) +0:501 direct index ( temp highp float) +0:501 'curColor' ( in highp 4-component vector of float) +0:501 Constant: +0:501 2 (const int) +0:501 direct index ( temp highp float) +0:501 'v' ( temp highp 4-component vector of float) +0:501 Constant: +0:501 2 (const int) +0:503 Branch: Return with expression +0:503 'curColor' ( in highp 4-component vector of float) +0:? Linker Objects +0:? 'sTDNoiseMap' ( uniform highp sampler2D) +0:? 'sTDSineLookup' ( uniform highp sampler1D) +0:? 'sTDWhite2D' ( uniform highp sampler2D) +0:? 'sTDWhite3D' ( uniform highp sampler3D) +0:? 'sTDWhite2DArray' ( uniform highp sampler2DArray) +0:? 'sTDWhiteCube' ( uniform highp samplerCube) +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position, global highp 3-component vector of float direction, global highp 3-component vector of float diffuse, global highp 4-component vector of float nearFar, global highp 4-component vector of float lightSize, global highp 4-component vector of float misc, global highp 4-component vector of float coneLookupScaleBias, global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix, global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights}) +0:? 'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs}) +0:? 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:? 'anon@4' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor, global highp int renderTOPCameraIndex} uTDCamInfos}) +0:? 'anon@5' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor, global highp 4-component vector of float nearFar, global highp 4-component vector of float viewport, global highp 4-component vector of float viewportRes, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor} uTDGeneral}) +0:? 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:? 'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer) +0:? 'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer) + +vk.relaxed.stagelink.0.2.frag +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:2 Function Definition: TDOutputSwizzle(vf4; ( global highp 4-component vector of float) +0:2 Function Parameters: +0:2 'c' ( in highp 4-component vector of float) +0:4 Sequence +0:4 Branch: Return with expression +0:4 vector swizzle ( temp highp 4-component vector of float) +0:4 'c' ( in highp 4-component vector of float) +0:4 Sequence +0:4 Constant: +0:4 0 (const int) +0:4 Constant: +0:4 1 (const int) +0:4 Constant: +0:4 2 (const int) +0:4 Constant: +0:4 3 (const int) +0:6 Function Definition: TDOutputSwizzle(vu4; ( global highp 4-component vector of uint) +0:6 Function Parameters: +0:6 'c' ( in highp 4-component vector of uint) +0:8 Sequence +0:8 Branch: Return with expression +0:8 vector swizzle ( temp highp 4-component vector of uint) +0:8 'c' ( in highp 4-component vector of uint) +0:8 Sequence +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 1 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 3 (const int) +0:? Linker Objects + + +Linked vertex stage: + + +Linked fragment stage: + + +Shader version: 460 +0:? Sequence +0:11 Function Definition: main( ( global void) +0:11 Function Parameters: +0:15 Sequence +0:15 Sequence +0:15 Sequence +0:15 move second child to first child ( temp highp 3-component vector of float) +0:15 'texcoord' ( temp highp 3-component vector of float) +0:15 Function Call: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float) +0:15 direct index (layout( location=3) temp highp 3-component vector of float) +0:15 'uv' (layout( location=3) in 8-element array of highp 3-component vector of float) +0:15 Constant: +0:15 0 (const int) +0:16 move second child to first child ( temp highp 3-component vector of float) +0:16 vector swizzle ( temp highp 3-component vector of float) +0:16 texCoord0: direct index for structure ( out highp 3-component vector of float) +0:16 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:16 Constant: +0:16 2 (const int) +0:16 Sequence +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1 (const int) +0:16 Constant: +0:16 2 (const int) +0:16 vector swizzle ( temp highp 3-component vector of float) +0:16 'texcoord' ( temp highp 3-component vector of float) +0:16 Sequence +0:16 Constant: +0:16 0 (const int) +0:16 Constant: +0:16 1 (const int) +0:16 Constant: +0:16 2 (const int) +0:20 move second child to first child ( temp highp int) +0:20 instance: direct index for structure ( flat out highp int) +0:20 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:20 Constant: +0:20 4 (const int) +0:20 Function Call: TDInstanceID( ( global highp int) +0:21 Sequence +0:21 move second child to first child ( temp highp 4-component vector of float) +0:21 'worldSpacePos' ( temp highp 4-component vector of float) +0:21 Function Call: TDDeform(vf3; ( global highp 4-component vector of float) +0:21 'P' (layout( location=0) in highp 3-component vector of float) +0:22 Sequence +0:22 move second child to first child ( temp highp 3-component vector of float) +0:22 'uvUnwrapCoord' ( temp highp 3-component vector of float) +0:22 Function Call: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float) +0:22 Function Call: TDUVUnwrapCoord( ( global highp 3-component vector of float) +0:23 move second child to first child ( temp highp 4-component vector of float) +0:23 gl_Position: direct index for structure ( gl_Position highp 4-component vector of float Position) +0:23 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +0:23 Constant: +0:23 0 (const uint) +0:23 Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float) +0:23 'worldSpacePos' ( temp highp 4-component vector of float) +0:23 'uvUnwrapCoord' ( temp highp 3-component vector of float) +0:32 Sequence +0:32 move second child to first child ( temp highp int) +0:32 'cameraIndex' ( temp highp int) +0:32 Function Call: TDCameraIndex( ( global highp int) +0:33 move second child to first child ( temp highp int) +0:33 cameraIndex: direct index for structure ( flat out highp int) +0:33 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:33 Constant: +0:33 3 (const int) +0:33 'cameraIndex' ( temp highp int) +0:34 move second child to first child ( temp highp 3-component vector of float) +0:34 vector swizzle ( temp highp 3-component vector of float) +0:34 worldSpacePos: direct index for structure ( out highp 3-component vector of float) +0:34 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:34 Constant: +0:34 1 (const int) +0:34 Sequence +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:34 vector swizzle ( temp highp 3-component vector of float) +0:34 'worldSpacePos' ( temp highp 4-component vector of float) +0:34 Sequence +0:34 Constant: +0:34 0 (const int) +0:34 Constant: +0:34 1 (const int) +0:34 Constant: +0:34 2 (const int) +0:35 move second child to first child ( temp highp 4-component vector of float) +0:35 color: direct index for structure ( out highp 4-component vector of float) +0:35 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:35 Constant: +0:35 0 (const int) +0:35 Function Call: TDInstanceColor(vf4; ( global highp 4-component vector of float) +0:35 'Cd' (layout( location=2) in highp 4-component vector of float) +0:176 Function Definition: iTDCamToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float) +0:176 Function Parameters: +0:176 'v' ( in highp 4-component vector of float) +0:176 'uv' ( in highp 3-component vector of float) +0:176 'cameraIndex' ( in highp int) +0:176 'applyPickMod' ( in bool) +0:178 Sequence +0:178 Test condition and select ( temp void) +0:178 Condition +0:178 Negate conditional ( temp bool) +0:178 Function Call: TDInstanceActive( ( global bool) +0:178 true case +0:179 Branch: Return with expression +0:179 Constant: +0:179 2.000000 +0:179 2.000000 +0:179 2.000000 +0:179 0.000000 +0:180 move second child to first child ( temp highp 4-component vector of float) +0:180 'v' ( in highp 4-component vector of float) +0:180 matrix-times-vector ( temp highp 4-component vector of float) +0:180 proj: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float) +0:180 direct index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:180 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:180 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:180 Constant: +0:180 0 (const uint) +0:180 Constant: +0:180 0 (const int) +0:180 Constant: +0:180 8 (const int) +0:180 'v' ( in highp 4-component vector of float) +0:181 Branch: Return with expression +0:181 'v' ( in highp 4-component vector of float) +0:183 Function Definition: iTDWorldToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float) +0:183 Function Parameters: +0:183 'v' ( in highp 4-component vector of float) +0:183 'uv' ( in highp 3-component vector of float) +0:183 'cameraIndex' ( in highp int) +0:183 'applyPickMod' ( in bool) +0:184 Sequence +0:184 Test condition and select ( temp void) +0:184 Condition +0:184 Negate conditional ( temp bool) +0:184 Function Call: TDInstanceActive( ( global bool) +0:184 true case +0:185 Branch: Return with expression +0:185 Constant: +0:185 2.000000 +0:185 2.000000 +0:185 2.000000 +0:185 0.000000 +0:186 move second child to first child ( temp highp 4-component vector of float) +0:186 'v' ( in highp 4-component vector of float) +0:186 matrix-times-vector ( temp highp 4-component vector of float) +0:186 camProj: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float) +0:186 direct index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:186 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:186 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:186 Constant: +0:186 0 (const uint) +0:186 Constant: +0:186 0 (const int) +0:186 Constant: +0:186 6 (const int) +0:186 'v' ( in highp 4-component vector of float) +0:187 Branch: Return with expression +0:187 'v' ( in highp 4-component vector of float) +0:193 Function Definition: TDInstanceID( ( global highp int) +0:193 Function Parameters: +0:194 Sequence +0:194 Branch: Return with expression +0:194 add ( temp highp int) +0:194 'gl_InstanceIndex' ( in highp int InstanceIndex) +0:194 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:194 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:194 Constant: +0:194 0 (const uint) +0:196 Function Definition: TDCameraIndex( ( global highp int) +0:196 Function Parameters: +0:197 Sequence +0:197 Branch: Return with expression +0:197 Constant: +0:197 0 (const int) +0:199 Function Definition: TDUVUnwrapCoord( ( global highp 3-component vector of float) +0:199 Function Parameters: +0:200 Sequence +0:200 Branch: Return with expression +0:200 direct index (layout( location=3) temp highp 3-component vector of float) +0:200 'uv' (layout( location=3) in 8-element array of highp 3-component vector of float) +0:200 Constant: +0:200 0 (const int) +0:205 Function Definition: TDPickID( ( global highp int) +0:205 Function Parameters: +0:209 Sequence +0:209 Branch: Return with expression +0:209 Constant: +0:209 0 (const int) +0:212 Function Definition: iTDConvertPickId(i1; ( global highp float) +0:212 Function Parameters: +0:212 'id' ( in highp int) +0:213 Sequence +0:213 or second child into first child ( temp highp int) +0:213 'id' ( in highp int) +0:213 Constant: +0:213 1073741824 (const int) +0:214 Branch: Return with expression +0:214 intBitsToFloat ( global highp float) +0:214 'id' ( in highp int) +0:217 Function Definition: TDWritePickingValues( ( global void) +0:217 Function Parameters: +0:224 Function Definition: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float) +0:224 Function Parameters: +0:224 'v' ( in highp 4-component vector of float) +0:224 'uv' ( in highp 3-component vector of float) +0:226 Sequence +0:226 Branch: Return with expression +0:226 Function Call: iTDWorldToProj(vf4;vf3;i1;b1; ( global highp 4-component vector of float) +0:226 'v' ( in highp 4-component vector of float) +0:226 'uv' ( in highp 3-component vector of float) +0:226 Function Call: TDCameraIndex( ( global highp int) +0:226 Constant: +0:226 true (const bool) +0:228 Function Definition: TDWorldToProj(vf3;vf3; ( global highp 4-component vector of float) +0:228 Function Parameters: +0:228 'v' ( in highp 3-component vector of float) +0:228 'uv' ( in highp 3-component vector of float) +0:230 Sequence +0:230 Branch: Return with expression +0:230 Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float) +0:230 Construct vec4 ( temp highp 4-component vector of float) +0:230 'v' ( in highp 3-component vector of float) +0:230 Constant: +0:230 1.000000 +0:230 'uv' ( in highp 3-component vector of float) +0:232 Function Definition: TDWorldToProj(vf4; ( global highp 4-component vector of float) +0:232 Function Parameters: +0:232 'v' ( in highp 4-component vector of float) +0:234 Sequence +0:234 Branch: Return with expression +0:234 Function Call: TDWorldToProj(vf4;vf3; ( global highp 4-component vector of float) +0:234 'v' ( in highp 4-component vector of float) +0:234 Constant: +0:234 0.000000 +0:234 0.000000 +0:234 0.000000 +0:236 Function Definition: TDWorldToProj(vf3; ( global highp 4-component vector of float) +0:236 Function Parameters: +0:236 'v' ( in highp 3-component vector of float) +0:238 Sequence +0:238 Branch: Return with expression +0:238 Function Call: TDWorldToProj(vf4; ( global highp 4-component vector of float) +0:238 Construct vec4 ( temp highp 4-component vector of float) +0:238 'v' ( in highp 3-component vector of float) +0:238 Constant: +0:238 1.000000 +0:240 Function Definition: TDPointColor( ( global highp 4-component vector of float) +0:240 Function Parameters: +0:241 Sequence +0:241 Branch: Return with expression +0:241 'Cd' (layout( location=2) in highp 4-component vector of float) +0:114 Function Definition: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float) +0:114 Function Parameters: +0:114 'index' ( in highp int) +0:114 't' ( in highp 3-component vector of float) +0:? Sequence +0:116 Sequence +0:116 move second child to first child ( temp highp int) +0:116 'coord' ( temp highp int) +0:116 'index' ( in highp int) +0:117 Sequence +0:117 move second child to first child ( temp highp 4-component vector of float) +0:117 'samp' ( temp highp 4-component vector of float) +0:117 textureFetch ( global highp 4-component vector of float) +0:117 'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer) +0:117 'coord' ( temp highp int) +0:118 move second child to first child ( temp highp float) +0:118 direct index ( temp highp float) +0:118 'v' ( temp highp 3-component vector of float) +0:118 Constant: +0:118 0 (const int) +0:118 direct index ( temp highp float) +0:118 't' ( in highp 3-component vector of float) +0:118 Constant: +0:118 0 (const int) +0:119 move second child to first child ( temp highp float) +0:119 direct index ( temp highp float) +0:119 'v' ( temp highp 3-component vector of float) +0:119 Constant: +0:119 1 (const int) +0:119 direct index ( temp highp float) +0:119 't' ( in highp 3-component vector of float) +0:119 Constant: +0:119 1 (const int) +0:120 move second child to first child ( temp highp float) +0:120 direct index ( temp highp float) +0:120 'v' ( temp highp 3-component vector of float) +0:120 Constant: +0:120 2 (const int) +0:120 direct index ( temp highp float) +0:120 'samp' ( temp highp 4-component vector of float) +0:120 Constant: +0:120 0 (const int) +0:121 move second child to first child ( temp highp 3-component vector of float) +0:121 vector swizzle ( temp highp 3-component vector of float) +0:121 't' ( in highp 3-component vector of float) +0:121 Sequence +0:121 Constant: +0:121 0 (const int) +0:121 Constant: +0:121 1 (const int) +0:121 Constant: +0:121 2 (const int) +0:121 vector swizzle ( temp highp 3-component vector of float) +0:121 'v' ( temp highp 3-component vector of float) +0:121 Sequence +0:121 Constant: +0:121 0 (const int) +0:121 Constant: +0:121 1 (const int) +0:121 Constant: +0:121 2 (const int) +0:122 Branch: Return with expression +0:122 't' ( in highp 3-component vector of float) +0:124 Function Definition: TDInstanceActive(i1; ( global bool) +0:124 Function Parameters: +0:124 'index' ( in highp int) +0:125 Sequence +0:125 subtract second child into first child ( temp highp int) +0:125 'index' ( in highp int) +0:125 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:125 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:125 Constant: +0:125 0 (const uint) +0:127 Sequence +0:127 move second child to first child ( temp highp int) +0:127 'coord' ( temp highp int) +0:127 'index' ( in highp int) +0:128 Sequence +0:128 move second child to first child ( temp highp 4-component vector of float) +0:128 'samp' ( temp highp 4-component vector of float) +0:128 textureFetch ( global highp 4-component vector of float) +0:128 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:128 'coord' ( temp highp int) +0:129 move second child to first child ( temp highp float) +0:129 'v' ( temp highp float) +0:129 direct index ( temp highp float) +0:129 'samp' ( temp highp 4-component vector of float) +0:129 Constant: +0:129 0 (const int) +0:130 Branch: Return with expression +0:130 Compare Not Equal ( temp bool) +0:130 'v' ( temp highp float) +0:130 Constant: +0:130 0.000000 +0:132 Function Definition: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float) +0:132 Function Parameters: +0:132 'index' ( in highp int) +0:132 'instanceActive' ( out bool) +0:133 Sequence +0:133 Sequence +0:133 move second child to first child ( temp highp int) +0:133 'origIndex' ( temp highp int) +0:133 'index' ( in highp int) +0:134 subtract second child into first child ( temp highp int) +0:134 'index' ( in highp int) +0:134 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:134 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:134 Constant: +0:134 0 (const uint) +0:136 Sequence +0:136 move second child to first child ( temp highp int) +0:136 'coord' ( temp highp int) +0:136 'index' ( in highp int) +0:137 Sequence +0:137 move second child to first child ( temp highp 4-component vector of float) +0:137 'samp' ( temp highp 4-component vector of float) +0:137 textureFetch ( global highp 4-component vector of float) +0:137 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:137 'coord' ( temp highp int) +0:138 move second child to first child ( temp highp float) +0:138 direct index ( temp highp float) +0:138 'v' ( temp highp 3-component vector of float) +0:138 Constant: +0:138 0 (const int) +0:138 direct index ( temp highp float) +0:138 'samp' ( temp highp 4-component vector of float) +0:138 Constant: +0:138 1 (const int) +0:139 move second child to first child ( temp highp float) +0:139 direct index ( temp highp float) +0:139 'v' ( temp highp 3-component vector of float) +0:139 Constant: +0:139 1 (const int) +0:139 direct index ( temp highp float) +0:139 'samp' ( temp highp 4-component vector of float) +0:139 Constant: +0:139 2 (const int) +0:140 move second child to first child ( temp highp float) +0:140 direct index ( temp highp float) +0:140 'v' ( temp highp 3-component vector of float) +0:140 Constant: +0:140 2 (const int) +0:140 direct index ( temp highp float) +0:140 'samp' ( temp highp 4-component vector of float) +0:140 Constant: +0:140 3 (const int) +0:141 move second child to first child ( temp bool) +0:141 'instanceActive' ( out bool) +0:141 Compare Not Equal ( temp bool) +0:141 direct index ( temp highp float) +0:141 'samp' ( temp highp 4-component vector of float) +0:141 Constant: +0:141 0 (const int) +0:141 Constant: +0:141 0.000000 +0:142 Branch: Return with expression +0:142 'v' ( temp highp 3-component vector of float) +0:144 Function Definition: TDInstanceTranslate(i1; ( global highp 3-component vector of float) +0:144 Function Parameters: +0:144 'index' ( in highp int) +0:145 Sequence +0:145 subtract second child into first child ( temp highp int) +0:145 'index' ( in highp int) +0:145 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:145 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:145 Constant: +0:145 0 (const uint) +0:147 Sequence +0:147 move second child to first child ( temp highp int) +0:147 'coord' ( temp highp int) +0:147 'index' ( in highp int) +0:148 Sequence +0:148 move second child to first child ( temp highp 4-component vector of float) +0:148 'samp' ( temp highp 4-component vector of float) +0:148 textureFetch ( global highp 4-component vector of float) +0:148 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:148 'coord' ( temp highp int) +0:149 move second child to first child ( temp highp float) +0:149 direct index ( temp highp float) +0:149 'v' ( temp highp 3-component vector of float) +0:149 Constant: +0:149 0 (const int) +0:149 direct index ( temp highp float) +0:149 'samp' ( temp highp 4-component vector of float) +0:149 Constant: +0:149 1 (const int) +0:150 move second child to first child ( temp highp float) +0:150 direct index ( temp highp float) +0:150 'v' ( temp highp 3-component vector of float) +0:150 Constant: +0:150 1 (const int) +0:150 direct index ( temp highp float) +0:150 'samp' ( temp highp 4-component vector of float) +0:150 Constant: +0:150 2 (const int) +0:151 move second child to first child ( temp highp float) +0:151 direct index ( temp highp float) +0:151 'v' ( temp highp 3-component vector of float) +0:151 Constant: +0:151 2 (const int) +0:151 direct index ( temp highp float) +0:151 'samp' ( temp highp 4-component vector of float) +0:151 Constant: +0:151 3 (const int) +0:152 Branch: Return with expression +0:152 'v' ( temp highp 3-component vector of float) +0:154 Function Definition: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float) +0:154 Function Parameters: +0:154 'index' ( in highp int) +0:155 Sequence +0:155 subtract second child into first child ( temp highp int) +0:155 'index' ( in highp int) +0:155 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:155 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:155 Constant: +0:155 0 (const uint) +0:156 Sequence +0:156 move second child to first child ( temp highp 3-component vector of float) +0:156 'v' ( temp highp 3-component vector of float) +0:156 Constant: +0:156 0.000000 +0:156 0.000000 +0:156 0.000000 +0:157 Sequence +0:157 move second child to first child ( temp highp 3X3 matrix of float) +0:157 'm' ( temp highp 3X3 matrix of float) +0:157 Constant: +0:157 1.000000 +0:157 0.000000 +0:157 0.000000 +0:157 0.000000 +0:157 1.000000 +0:157 0.000000 +0:157 0.000000 +0:157 0.000000 +0:157 1.000000 +0:161 Branch: Return with expression +0:161 'm' ( temp highp 3X3 matrix of float) +0:163 Function Definition: TDInstanceScale(i1; ( global highp 3-component vector of float) +0:163 Function Parameters: +0:163 'index' ( in highp int) +0:164 Sequence +0:164 subtract second child into first child ( temp highp int) +0:164 'index' ( in highp int) +0:164 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:164 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:164 Constant: +0:164 0 (const uint) +0:165 Sequence +0:165 move second child to first child ( temp highp 3-component vector of float) +0:165 'v' ( temp highp 3-component vector of float) +0:165 Constant: +0:165 1.000000 +0:165 1.000000 +0:165 1.000000 +0:166 Branch: Return with expression +0:166 'v' ( temp highp 3-component vector of float) +0:168 Function Definition: TDInstancePivot(i1; ( global highp 3-component vector of float) +0:168 Function Parameters: +0:168 'index' ( in highp int) +0:169 Sequence +0:169 subtract second child into first child ( temp highp int) +0:169 'index' ( in highp int) +0:169 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:169 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:169 Constant: +0:169 0 (const uint) +0:170 Sequence +0:170 move second child to first child ( temp highp 3-component vector of float) +0:170 'v' ( temp highp 3-component vector of float) +0:170 Constant: +0:170 0.000000 +0:170 0.000000 +0:170 0.000000 +0:171 Branch: Return with expression +0:171 'v' ( temp highp 3-component vector of float) +0:173 Function Definition: TDInstanceRotTo(i1; ( global highp 3-component vector of float) +0:173 Function Parameters: +0:173 'index' ( in highp int) +0:174 Sequence +0:174 subtract second child into first child ( temp highp int) +0:174 'index' ( in highp int) +0:174 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:174 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:174 Constant: +0:174 0 (const uint) +0:175 Sequence +0:175 move second child to first child ( temp highp 3-component vector of float) +0:175 'v' ( temp highp 3-component vector of float) +0:175 Constant: +0:175 0.000000 +0:175 0.000000 +0:175 1.000000 +0:176 Branch: Return with expression +0:176 'v' ( temp highp 3-component vector of float) +0:178 Function Definition: TDInstanceRotUp(i1; ( global highp 3-component vector of float) +0:178 Function Parameters: +0:178 'index' ( in highp int) +0:179 Sequence +0:179 subtract second child into first child ( temp highp int) +0:179 'index' ( in highp int) +0:179 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:179 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:179 Constant: +0:179 0 (const uint) +0:180 Sequence +0:180 move second child to first child ( temp highp 3-component vector of float) +0:180 'v' ( temp highp 3-component vector of float) +0:180 Constant: +0:180 0.000000 +0:180 1.000000 +0:180 0.000000 +0:181 Branch: Return with expression +0:181 'v' ( temp highp 3-component vector of float) +0:183 Function Definition: TDInstanceMat(i1; ( global highp 4X4 matrix of float) +0:183 Function Parameters: +0:183 'id' ( in highp int) +0:184 Sequence +0:184 Sequence +0:184 move second child to first child ( temp bool) +0:184 'instanceActive' ( temp bool) +0:184 Constant: +0:184 true (const bool) +0:185 Sequence +0:185 move second child to first child ( temp highp 3-component vector of float) +0:185 't' ( temp highp 3-component vector of float) +0:185 Function Call: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float) +0:185 'id' ( in highp int) +0:185 'instanceActive' ( temp bool) +0:186 Test condition and select ( temp void) +0:186 Condition +0:186 Negate conditional ( temp bool) +0:186 'instanceActive' ( temp bool) +0:186 true case +0:188 Sequence +0:188 Branch: Return with expression +0:188 Constant: +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:188 0.000000 +0:190 Sequence +0:190 move second child to first child ( temp highp 4X4 matrix of float) +0:190 'm' ( temp highp 4X4 matrix of float) +0:190 Constant: +0:190 1.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 1.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 1.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 0.000000 +0:190 1.000000 +0:192 Sequence +0:192 Sequence +0:192 move second child to first child ( temp highp 3-component vector of float) +0:192 'tt' ( temp highp 3-component vector of float) +0:192 't' ( temp highp 3-component vector of float) +0:193 add second child into first child ( temp highp float) +0:193 direct index ( temp highp float) +0:193 direct index ( temp highp 4-component vector of float) +0:193 'm' ( temp highp 4X4 matrix of float) +0:193 Constant: +0:193 3 (const int) +0:193 Constant: +0:193 0 (const int) +0:193 component-wise multiply ( temp highp float) +0:193 direct index ( temp highp float) +0:193 direct index ( temp highp 4-component vector of float) +0:193 'm' ( temp highp 4X4 matrix of float) +0:193 Constant: +0:193 0 (const int) +0:193 Constant: +0:193 0 (const int) +0:193 direct index ( temp highp float) +0:193 'tt' ( temp highp 3-component vector of float) +0:193 Constant: +0:193 0 (const int) +0:194 add second child into first child ( temp highp float) +0:194 direct index ( temp highp float) +0:194 direct index ( temp highp 4-component vector of float) +0:194 'm' ( temp highp 4X4 matrix of float) +0:194 Constant: +0:194 3 (const int) +0:194 Constant: +0:194 1 (const int) +0:194 component-wise multiply ( temp highp float) +0:194 direct index ( temp highp float) +0:194 direct index ( temp highp 4-component vector of float) +0:194 'm' ( temp highp 4X4 matrix of float) +0:194 Constant: +0:194 0 (const int) +0:194 Constant: +0:194 1 (const int) +0:194 direct index ( temp highp float) +0:194 'tt' ( temp highp 3-component vector of float) +0:194 Constant: +0:194 0 (const int) +0:195 add second child into first child ( temp highp float) +0:195 direct index ( temp highp float) +0:195 direct index ( temp highp 4-component vector of float) +0:195 'm' ( temp highp 4X4 matrix of float) +0:195 Constant: +0:195 3 (const int) +0:195 Constant: +0:195 2 (const int) +0:195 component-wise multiply ( temp highp float) +0:195 direct index ( temp highp float) +0:195 direct index ( temp highp 4-component vector of float) +0:195 'm' ( temp highp 4X4 matrix of float) +0:195 Constant: +0:195 0 (const int) +0:195 Constant: +0:195 2 (const int) +0:195 direct index ( temp highp float) +0:195 'tt' ( temp highp 3-component vector of float) +0:195 Constant: +0:195 0 (const int) +0:196 add second child into first child ( temp highp float) +0:196 direct index ( temp highp float) +0:196 direct index ( temp highp 4-component vector of float) +0:196 'm' ( temp highp 4X4 matrix of float) +0:196 Constant: +0:196 3 (const int) +0:196 Constant: +0:196 3 (const int) +0:196 component-wise multiply ( temp highp float) +0:196 direct index ( temp highp float) +0:196 direct index ( temp highp 4-component vector of float) +0:196 'm' ( temp highp 4X4 matrix of float) +0:196 Constant: +0:196 0 (const int) +0:196 Constant: +0:196 3 (const int) +0:196 direct index ( temp highp float) +0:196 'tt' ( temp highp 3-component vector of float) +0:196 Constant: +0:196 0 (const int) +0:197 add second child into first child ( temp highp float) +0:197 direct index ( temp highp float) +0:197 direct index ( temp highp 4-component vector of float) +0:197 'm' ( temp highp 4X4 matrix of float) +0:197 Constant: +0:197 3 (const int) +0:197 Constant: +0:197 0 (const int) +0:197 component-wise multiply ( temp highp float) +0:197 direct index ( temp highp float) +0:197 direct index ( temp highp 4-component vector of float) +0:197 'm' ( temp highp 4X4 matrix of float) +0:197 Constant: +0:197 1 (const int) +0:197 Constant: +0:197 0 (const int) +0:197 direct index ( temp highp float) +0:197 'tt' ( temp highp 3-component vector of float) +0:197 Constant: +0:197 1 (const int) +0:198 add second child into first child ( temp highp float) +0:198 direct index ( temp highp float) +0:198 direct index ( temp highp 4-component vector of float) +0:198 'm' ( temp highp 4X4 matrix of float) +0:198 Constant: +0:198 3 (const int) +0:198 Constant: +0:198 1 (const int) +0:198 component-wise multiply ( temp highp float) +0:198 direct index ( temp highp float) +0:198 direct index ( temp highp 4-component vector of float) +0:198 'm' ( temp highp 4X4 matrix of float) +0:198 Constant: +0:198 1 (const int) +0:198 Constant: +0:198 1 (const int) +0:198 direct index ( temp highp float) +0:198 'tt' ( temp highp 3-component vector of float) +0:198 Constant: +0:198 1 (const int) +0:199 add second child into first child ( temp highp float) +0:199 direct index ( temp highp float) +0:199 direct index ( temp highp 4-component vector of float) +0:199 'm' ( temp highp 4X4 matrix of float) +0:199 Constant: +0:199 3 (const int) +0:199 Constant: +0:199 2 (const int) +0:199 component-wise multiply ( temp highp float) +0:199 direct index ( temp highp float) +0:199 direct index ( temp highp 4-component vector of float) +0:199 'm' ( temp highp 4X4 matrix of float) +0:199 Constant: +0:199 1 (const int) +0:199 Constant: +0:199 2 (const int) +0:199 direct index ( temp highp float) +0:199 'tt' ( temp highp 3-component vector of float) +0:199 Constant: +0:199 1 (const int) +0:200 add second child into first child ( temp highp float) +0:200 direct index ( temp highp float) +0:200 direct index ( temp highp 4-component vector of float) +0:200 'm' ( temp highp 4X4 matrix of float) +0:200 Constant: +0:200 3 (const int) +0:200 Constant: +0:200 3 (const int) +0:200 component-wise multiply ( temp highp float) +0:200 direct index ( temp highp float) +0:200 direct index ( temp highp 4-component vector of float) +0:200 'm' ( temp highp 4X4 matrix of float) +0:200 Constant: +0:200 1 (const int) +0:200 Constant: +0:200 3 (const int) +0:200 direct index ( temp highp float) +0:200 'tt' ( temp highp 3-component vector of float) +0:200 Constant: +0:200 1 (const int) +0:201 add second child into first child ( temp highp float) +0:201 direct index ( temp highp float) +0:201 direct index ( temp highp 4-component vector of float) +0:201 'm' ( temp highp 4X4 matrix of float) +0:201 Constant: +0:201 3 (const int) +0:201 Constant: +0:201 0 (const int) +0:201 component-wise multiply ( temp highp float) +0:201 direct index ( temp highp float) +0:201 direct index ( temp highp 4-component vector of float) +0:201 'm' ( temp highp 4X4 matrix of float) +0:201 Constant: +0:201 2 (const int) +0:201 Constant: +0:201 0 (const int) +0:201 direct index ( temp highp float) +0:201 'tt' ( temp highp 3-component vector of float) +0:201 Constant: +0:201 2 (const int) +0:202 add second child into first child ( temp highp float) +0:202 direct index ( temp highp float) +0:202 direct index ( temp highp 4-component vector of float) +0:202 'm' ( temp highp 4X4 matrix of float) +0:202 Constant: +0:202 3 (const int) +0:202 Constant: +0:202 1 (const int) +0:202 component-wise multiply ( temp highp float) +0:202 direct index ( temp highp float) +0:202 direct index ( temp highp 4-component vector of float) +0:202 'm' ( temp highp 4X4 matrix of float) +0:202 Constant: +0:202 2 (const int) +0:202 Constant: +0:202 1 (const int) +0:202 direct index ( temp highp float) +0:202 'tt' ( temp highp 3-component vector of float) +0:202 Constant: +0:202 2 (const int) +0:203 add second child into first child ( temp highp float) +0:203 direct index ( temp highp float) +0:203 direct index ( temp highp 4-component vector of float) +0:203 'm' ( temp highp 4X4 matrix of float) +0:203 Constant: +0:203 3 (const int) +0:203 Constant: +0:203 2 (const int) +0:203 component-wise multiply ( temp highp float) +0:203 direct index ( temp highp float) +0:203 direct index ( temp highp 4-component vector of float) +0:203 'm' ( temp highp 4X4 matrix of float) +0:203 Constant: +0:203 2 (const int) +0:203 Constant: +0:203 2 (const int) +0:203 direct index ( temp highp float) +0:203 'tt' ( temp highp 3-component vector of float) +0:203 Constant: +0:203 2 (const int) +0:204 add second child into first child ( temp highp float) +0:204 direct index ( temp highp float) +0:204 direct index ( temp highp 4-component vector of float) +0:204 'm' ( temp highp 4X4 matrix of float) +0:204 Constant: +0:204 3 (const int) +0:204 Constant: +0:204 3 (const int) +0:204 component-wise multiply ( temp highp float) +0:204 direct index ( temp highp float) +0:204 direct index ( temp highp 4-component vector of float) +0:204 'm' ( temp highp 4X4 matrix of float) +0:204 Constant: +0:204 2 (const int) +0:204 Constant: +0:204 3 (const int) +0:204 direct index ( temp highp float) +0:204 'tt' ( temp highp 3-component vector of float) +0:204 Constant: +0:204 2 (const int) +0:206 Branch: Return with expression +0:206 'm' ( temp highp 4X4 matrix of float) +0:208 Function Definition: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:208 Function Parameters: +0:208 'id' ( in highp int) +0:209 Sequence +0:209 Sequence +0:209 move second child to first child ( temp highp 3X3 matrix of float) +0:209 'm' ( temp highp 3X3 matrix of float) +0:209 Constant: +0:209 1.000000 +0:209 0.000000 +0:209 0.000000 +0:209 0.000000 +0:209 1.000000 +0:209 0.000000 +0:209 0.000000 +0:209 0.000000 +0:209 1.000000 +0:210 Branch: Return with expression +0:210 'm' ( temp highp 3X3 matrix of float) +0:212 Function Definition: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float) +0:212 Function Parameters: +0:212 'id' ( in highp int) +0:213 Sequence +0:213 Sequence +0:213 move second child to first child ( temp highp 3X3 matrix of float) +0:213 'm' ( temp highp 3X3 matrix of float) +0:213 Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:213 'id' ( in highp int) +0:214 Branch: Return with expression +0:214 'm' ( temp highp 3X3 matrix of float) +0:216 Function Definition: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float) +0:216 Function Parameters: +0:216 'index' ( in highp int) +0:216 'curColor' ( in highp 4-component vector of float) +0:217 Sequence +0:217 subtract second child into first child ( temp highp int) +0:217 'index' ( in highp int) +0:217 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:217 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:217 Constant: +0:217 0 (const uint) +0:219 Sequence +0:219 move second child to first child ( temp highp int) +0:219 'coord' ( temp highp int) +0:219 'index' ( in highp int) +0:220 Sequence +0:220 move second child to first child ( temp highp 4-component vector of float) +0:220 'samp' ( temp highp 4-component vector of float) +0:220 textureFetch ( global highp 4-component vector of float) +0:220 'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer) +0:220 'coord' ( temp highp int) +0:221 move second child to first child ( temp highp float) +0:221 direct index ( temp highp float) +0:221 'v' ( temp highp 4-component vector of float) +0:221 Constant: +0:221 0 (const int) +0:221 direct index ( temp highp float) +0:221 'samp' ( temp highp 4-component vector of float) +0:221 Constant: +0:221 0 (const int) +0:222 move second child to first child ( temp highp float) +0:222 direct index ( temp highp float) +0:222 'v' ( temp highp 4-component vector of float) +0:222 Constant: +0:222 1 (const int) +0:222 direct index ( temp highp float) +0:222 'samp' ( temp highp 4-component vector of float) +0:222 Constant: +0:222 1 (const int) +0:223 move second child to first child ( temp highp float) +0:223 direct index ( temp highp float) +0:223 'v' ( temp highp 4-component vector of float) +0:223 Constant: +0:223 2 (const int) +0:223 direct index ( temp highp float) +0:223 'samp' ( temp highp 4-component vector of float) +0:223 Constant: +0:223 2 (const int) +0:224 move second child to first child ( temp highp float) +0:224 direct index ( temp highp float) +0:224 'v' ( temp highp 4-component vector of float) +0:224 Constant: +0:224 3 (const int) +0:224 Constant: +0:224 1.000000 +0:225 move second child to first child ( temp highp float) +0:225 direct index ( temp highp float) +0:225 'curColor' ( in highp 4-component vector of float) +0:225 Constant: +0:225 0 (const int) +0:225 direct index ( temp highp float) +0:225 'v' ( temp highp 4-component vector of float) +0:225 Constant: +0:225 0 (const int) +0:227 move second child to first child ( temp highp float) +0:227 direct index ( temp highp float) +0:227 'curColor' ( in highp 4-component vector of float) +0:227 Constant: +0:227 1 (const int) +0:227 direct index ( temp highp float) +0:227 'v' ( temp highp 4-component vector of float) +0:227 Constant: +0:227 1 (const int) +0:229 move second child to first child ( temp highp float) +0:229 direct index ( temp highp float) +0:229 'curColor' ( in highp 4-component vector of float) +0:229 Constant: +0:229 2 (const int) +0:229 direct index ( temp highp float) +0:229 'v' ( temp highp 4-component vector of float) +0:229 Constant: +0:229 2 (const int) +0:231 Branch: Return with expression +0:231 'curColor' ( in highp 4-component vector of float) +0:233 Function Definition: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float) +0:233 Function Parameters: +0:233 'id' ( in highp int) +0:233 'pos' ( in highp 4-component vector of float) +0:234 Sequence +0:234 move second child to first child ( temp highp 4-component vector of float) +0:234 'pos' ( in highp 4-component vector of float) +0:234 matrix-times-vector ( temp highp 4-component vector of float) +0:234 Function Call: TDInstanceMat(i1; ( global highp 4X4 matrix of float) +0:234 'id' ( in highp int) +0:234 'pos' ( in highp 4-component vector of float) +0:235 Branch: Return with expression +0:235 matrix-times-vector ( temp highp 4-component vector of float) +0:235 world: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float) +0:235 indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:235 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:235 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:235 Constant: +0:235 0 (const uint) +0:235 Function Call: TDCameraIndex( ( global highp int) +0:235 Constant: +0:235 0 (const int) +0:235 'pos' ( in highp 4-component vector of float) +0:238 Function Definition: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:238 Function Parameters: +0:238 'id' ( in highp int) +0:238 'vec' ( in highp 3-component vector of float) +0:240 Sequence +0:240 Sequence +0:240 move second child to first child ( temp highp 3X3 matrix of float) +0:240 'm' ( temp highp 3X3 matrix of float) +0:240 Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:240 'id' ( in highp int) +0:241 Branch: Return with expression +0:241 matrix-times-vector ( temp highp 3-component vector of float) +0:241 Construct mat3 ( temp highp 3X3 matrix of float) +0:241 world: direct index for structure (layout( column_major std140) global highp 4X4 matrix of float) +0:241 indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:241 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:241 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:241 Constant: +0:241 0 (const uint) +0:241 Function Call: TDCameraIndex( ( global highp int) +0:241 Constant: +0:241 0 (const int) +0:241 matrix-times-vector ( temp highp 3-component vector of float) +0:241 'm' ( temp highp 3X3 matrix of float) +0:241 'vec' ( in highp 3-component vector of float) +0:243 Function Definition: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:243 Function Parameters: +0:243 'id' ( in highp int) +0:243 'vec' ( in highp 3-component vector of float) +0:245 Sequence +0:245 Sequence +0:245 move second child to first child ( temp highp 3X3 matrix of float) +0:245 'm' ( temp highp 3X3 matrix of float) +0:245 Function Call: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float) +0:245 'id' ( in highp int) +0:246 Branch: Return with expression +0:246 matrix-times-vector ( temp highp 3-component vector of float) +0:246 Construct mat3 ( temp highp 3X3 matrix of float) +0:246 worldForNormals: direct index for structure (layout( column_major std140) global highp 3X3 matrix of float) +0:246 indirect index (layout( column_major std140 offset=0) temp structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:246 uTDMats: direct index for structure (layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals}) +0:246 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:246 Constant: +0:246 0 (const uint) +0:246 Function Call: TDCameraIndex( ( global highp int) +0:246 Constant: +0:246 13 (const int) +0:246 matrix-times-vector ( temp highp 3-component vector of float) +0:246 'm' ( temp highp 3X3 matrix of float) +0:246 'vec' ( in highp 3-component vector of float) +0:248 Function Definition: TDInstanceDeform(vf4; ( global highp 4-component vector of float) +0:248 Function Parameters: +0:248 'pos' ( in highp 4-component vector of float) +0:249 Sequence +0:249 Branch: Return with expression +0:249 Function Call: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float) +0:249 Function Call: TDInstanceID( ( global highp int) +0:249 'pos' ( in highp 4-component vector of float) +0:251 Function Definition: TDInstanceDeformVec(vf3; ( global highp 3-component vector of float) +0:251 Function Parameters: +0:251 'vec' ( in highp 3-component vector of float) +0:252 Sequence +0:252 Branch: Return with expression +0:252 Function Call: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:252 Function Call: TDInstanceID( ( global highp int) +0:252 'vec' ( in highp 3-component vector of float) +0:254 Function Definition: TDInstanceDeformNorm(vf3; ( global highp 3-component vector of float) +0:254 Function Parameters: +0:254 'vec' ( in highp 3-component vector of float) +0:255 Sequence +0:255 Branch: Return with expression +0:255 Function Call: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:255 Function Call: TDInstanceID( ( global highp int) +0:255 'vec' ( in highp 3-component vector of float) +0:257 Function Definition: TDInstanceActive( ( global bool) +0:257 Function Parameters: +0:257 Sequence +0:257 Branch: Return with expression +0:257 Function Call: TDInstanceActive(i1; ( global bool) +0:257 Function Call: TDInstanceID( ( global highp int) +0:258 Function Definition: TDInstanceTranslate( ( global highp 3-component vector of float) +0:258 Function Parameters: +0:258 Sequence +0:258 Branch: Return with expression +0:258 Function Call: TDInstanceTranslate(i1; ( global highp 3-component vector of float) +0:258 Function Call: TDInstanceID( ( global highp int) +0:259 Function Definition: TDInstanceRotateMat( ( global highp 3X3 matrix of float) +0:259 Function Parameters: +0:259 Sequence +0:259 Branch: Return with expression +0:259 Function Call: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float) +0:259 Function Call: TDInstanceID( ( global highp int) +0:260 Function Definition: TDInstanceScale( ( global highp 3-component vector of float) +0:260 Function Parameters: +0:260 Sequence +0:260 Branch: Return with expression +0:260 Function Call: TDInstanceScale(i1; ( global highp 3-component vector of float) +0:260 Function Call: TDInstanceID( ( global highp int) +0:261 Function Definition: TDInstanceMat( ( global highp 4X4 matrix of float) +0:261 Function Parameters: +0:261 Sequence +0:261 Branch: Return with expression +0:261 Function Call: TDInstanceMat(i1; ( global highp 4X4 matrix of float) +0:261 Function Call: TDInstanceID( ( global highp int) +0:263 Function Definition: TDInstanceMat3( ( global highp 3X3 matrix of float) +0:263 Function Parameters: +0:263 Sequence +0:263 Branch: Return with expression +0:263 Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:263 Function Call: TDInstanceID( ( global highp int) +0:265 Function Definition: TDInstanceTexCoord(vf3; ( global highp 3-component vector of float) +0:265 Function Parameters: +0:265 't' ( in highp 3-component vector of float) +0:266 Sequence +0:266 Branch: Return with expression +0:266 Function Call: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float) +0:266 Function Call: TDInstanceID( ( global highp int) +0:266 't' ( in highp 3-component vector of float) +0:268 Function Definition: TDInstanceColor(vf4; ( global highp 4-component vector of float) +0:268 Function Parameters: +0:268 'curColor' ( in highp 4-component vector of float) +0:269 Sequence +0:269 Branch: Return with expression +0:269 Function Call: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float) +0:269 Function Call: TDInstanceID( ( global highp int) +0:269 'curColor' ( in highp 4-component vector of float) +0:271 Function Definition: TDSkinnedDeform(vf4; ( global highp 4-component vector of float) +0:271 Function Parameters: +0:271 'pos' ( in highp 4-component vector of float) +0:271 Sequence +0:271 Branch: Return with expression +0:271 'pos' ( in highp 4-component vector of float) +0:273 Function Definition: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float) +0:273 Function Parameters: +0:273 'vec' ( in highp 3-component vector of float) +0:273 Sequence +0:273 Branch: Return with expression +0:273 'vec' ( in highp 3-component vector of float) +0:275 Function Definition: TDFastDeformTangent(vf3;vf4;vf3; ( global highp 3-component vector of float) +0:275 Function Parameters: +0:275 'oldNorm' ( in highp 3-component vector of float) +0:275 'oldTangent' ( in highp 4-component vector of float) +0:275 'deformedNorm' ( in highp 3-component vector of float) +0:276 Sequence +0:276 Branch: Return with expression +0:276 vector swizzle ( temp highp 3-component vector of float) +0:276 'oldTangent' ( in highp 4-component vector of float) +0:276 Sequence +0:276 Constant: +0:276 0 (const int) +0:276 Constant: +0:276 1 (const int) +0:276 Constant: +0:276 2 (const int) +0:277 Function Definition: TDBoneMat(i1; ( global highp 4X4 matrix of float) +0:277 Function Parameters: +0:277 'index' ( in highp int) +0:278 Sequence +0:278 Branch: Return with expression +0:278 Constant: +0:278 1.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 1.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 1.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:278 1.000000 +0:280 Function Definition: TDDeform(vf4; ( global highp 4-component vector of float) +0:280 Function Parameters: +0:280 'pos' ( in highp 4-component vector of float) +0:281 Sequence +0:281 move second child to first child ( temp highp 4-component vector of float) +0:281 'pos' ( in highp 4-component vector of float) +0:281 Function Call: TDSkinnedDeform(vf4; ( global highp 4-component vector of float) +0:281 'pos' ( in highp 4-component vector of float) +0:282 move second child to first child ( temp highp 4-component vector of float) +0:282 'pos' ( in highp 4-component vector of float) +0:282 Function Call: TDInstanceDeform(vf4; ( global highp 4-component vector of float) +0:282 'pos' ( in highp 4-component vector of float) +0:283 Branch: Return with expression +0:283 'pos' ( in highp 4-component vector of float) +0:286 Function Definition: TDDeform(i1;vf3; ( global highp 4-component vector of float) +0:286 Function Parameters: +0:286 'instanceID' ( in highp int) +0:286 'p' ( in highp 3-component vector of float) +0:287 Sequence +0:287 Sequence +0:287 move second child to first child ( temp highp 4-component vector of float) +0:287 'pos' ( temp highp 4-component vector of float) +0:287 Construct vec4 ( temp highp 4-component vector of float) +0:287 'p' ( in highp 3-component vector of float) +0:287 Constant: +0:287 1.000000 +0:288 move second child to first child ( temp highp 4-component vector of float) +0:288 'pos' ( temp highp 4-component vector of float) +0:288 Function Call: TDSkinnedDeform(vf4; ( global highp 4-component vector of float) +0:288 'pos' ( temp highp 4-component vector of float) +0:289 move second child to first child ( temp highp 4-component vector of float) +0:289 'pos' ( temp highp 4-component vector of float) +0:289 Function Call: TDInstanceDeform(i1;vf4; ( global highp 4-component vector of float) +0:289 'instanceID' ( in highp int) +0:289 'pos' ( temp highp 4-component vector of float) +0:290 Branch: Return with expression +0:290 'pos' ( temp highp 4-component vector of float) +0:293 Function Definition: TDDeform(vf3; ( global highp 4-component vector of float) +0:293 Function Parameters: +0:293 'pos' ( in highp 3-component vector of float) +0:294 Sequence +0:294 Branch: Return with expression +0:294 Function Call: TDDeform(i1;vf3; ( global highp 4-component vector of float) +0:294 Function Call: TDInstanceID( ( global highp int) +0:294 'pos' ( in highp 3-component vector of float) +0:297 Function Definition: TDDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:297 Function Parameters: +0:297 'instanceID' ( in highp int) +0:297 'vec' ( in highp 3-component vector of float) +0:298 Sequence +0:298 move second child to first child ( temp highp 3-component vector of float) +0:298 'vec' ( in highp 3-component vector of float) +0:298 Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float) +0:298 'vec' ( in highp 3-component vector of float) +0:299 move second child to first child ( temp highp 3-component vector of float) +0:299 'vec' ( in highp 3-component vector of float) +0:299 Function Call: TDInstanceDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:299 'instanceID' ( in highp int) +0:299 'vec' ( in highp 3-component vector of float) +0:300 Branch: Return with expression +0:300 'vec' ( in highp 3-component vector of float) +0:303 Function Definition: TDDeformVec(vf3; ( global highp 3-component vector of float) +0:303 Function Parameters: +0:303 'vec' ( in highp 3-component vector of float) +0:304 Sequence +0:304 Branch: Return with expression +0:304 Function Call: TDDeformVec(i1;vf3; ( global highp 3-component vector of float) +0:304 Function Call: TDInstanceID( ( global highp int) +0:304 'vec' ( in highp 3-component vector of float) +0:307 Function Definition: TDDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:307 Function Parameters: +0:307 'instanceID' ( in highp int) +0:307 'vec' ( in highp 3-component vector of float) +0:308 Sequence +0:308 move second child to first child ( temp highp 3-component vector of float) +0:308 'vec' ( in highp 3-component vector of float) +0:308 Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float) +0:308 'vec' ( in highp 3-component vector of float) +0:309 move second child to first child ( temp highp 3-component vector of float) +0:309 'vec' ( in highp 3-component vector of float) +0:309 Function Call: TDInstanceDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:309 'instanceID' ( in highp int) +0:309 'vec' ( in highp 3-component vector of float) +0:310 Branch: Return with expression +0:310 'vec' ( in highp 3-component vector of float) +0:313 Function Definition: TDDeformNorm(vf3; ( global highp 3-component vector of float) +0:313 Function Parameters: +0:313 'vec' ( in highp 3-component vector of float) +0:314 Sequence +0:314 Branch: Return with expression +0:314 Function Call: TDDeformNorm(i1;vf3; ( global highp 3-component vector of float) +0:314 Function Call: TDInstanceID( ( global highp int) +0:314 'vec' ( in highp 3-component vector of float) +0:317 Function Definition: TDSkinnedDeformNorm(vf3; ( global highp 3-component vector of float) +0:317 Function Parameters: +0:317 'vec' ( in highp 3-component vector of float) +0:318 Sequence +0:318 move second child to first child ( temp highp 3-component vector of float) +0:318 'vec' ( in highp 3-component vector of float) +0:318 Function Call: TDSkinnedDeformVec(vf3; ( global highp 3-component vector of float) +0:318 'vec' ( in highp 3-component vector of float) +0:319 Branch: Return with expression +0:319 'vec' ( in highp 3-component vector of float) +0:? Linker Objects +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal}) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor, global highp int renderTOPCameraIndex} uTDCamInfos}) +0:? 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor, global highp 4-component vector of float nearFar, global highp 4-component vector of float viewport, global highp 4-component vector of float viewportRes, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor} uTDGeneral}) +0:? 'P' (layout( location=0) in highp 3-component vector of float) +0:? 'N' (layout( location=1) in highp 3-component vector of float) +0:? 'Cd' (layout( location=2) in highp 4-component vector of float) +0:? 'uv' (layout( location=3) in 8-element array of highp 3-component vector of float) +0:? 'oVert' ( out block{ out highp 4-component vector of float color, out highp 3-component vector of float worldSpacePos, out highp 3-component vector of float texCoord0, flat out highp int cameraIndex, flat out highp int instance}) +0:? 'anon@4' ( out block{ gl_Position 4-component vector of float Position gl_Position, gl_PointSize float PointSize gl_PointSize, out 1-element array of float ClipDistance gl_ClipDistance, out 1-element array of float CullDistance gl_CullDistance}) +0:? 'gl_VertexIndex' ( in int VertexIndex) +0:? 'gl_InstanceIndex' ( in int InstanceIndex) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position, global highp 3-component vector of float direction, global highp 3-component vector of float diffuse, global highp 4-component vector of float nearFar, global highp 4-component vector of float lightSize, global highp 4-component vector of float misc, global highp 4-component vector of float coneLookupScaleBias, global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix, global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights}) +0:? 'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs}) +0:? 'mTD2DImageOutputs' (layout( rgba8) uniform 1-element array of highp image2D) +0:? 'mTD2DArrayImageOutputs' (layout( rgba8) uniform 1-element array of highp image2DArray) +0:? 'mTD3DImageOutputs' (layout( rgba8) uniform 1-element array of highp image3D) +0:? 'mTDCubeImageOutputs' (layout( rgba8) uniform 1-element array of highp imageCube) +0:? 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:? 'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer) +0:? 'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer) +Shader version: 460 +gl_FragCoord origin is upper left +0:? Sequence +0:95 Function Definition: main( ( global void) +0:95 Function Parameters: +0:99 Sequence +0:99 Function Call: TDCheckDiscard( ( global void) +0:101 Sequence +0:101 move second child to first child ( temp highp 4-component vector of float) +0:101 'outcol' ( temp highp 4-component vector of float) +0:101 Constant: +0:101 0.000000 +0:101 0.000000 +0:101 0.000000 +0:101 0.000000 +0:103 Sequence +0:103 move second child to first child ( temp highp 3-component vector of float) +0:103 'texCoord0' ( temp highp 3-component vector of float) +0:103 vector swizzle ( temp highp 3-component vector of float) +0:103 texCoord0: direct index for structure ( in highp 3-component vector of float) +0:103 'iVert' ( in block{ in highp 4-component vector of float color, in highp 3-component vector of float worldSpacePos, in highp 3-component vector of float texCoord0, flat in highp int cameraIndex, flat in highp int instance}) +0:103 Constant: +0:103 2 (const int) +0:103 Sequence +0:103 Constant: +0:103 0 (const int) +0:103 Constant: +0:103 1 (const int) +0:103 Constant: +0:103 2 (const int) +0:104 Sequence +0:104 move second child to first child ( temp highp float) +0:104 'actualTexZ' ( temp highp float) +0:104 mod ( global highp float) +0:104 Convert int to float ( temp highp float) +0:104 Convert float to int ( temp highp int) +0:104 direct index ( temp highp float) +0:104 'texCoord0' ( temp highp 3-component vector of float) +0:104 Constant: +0:104 2 (const int) +0:104 Constant: +0:104 2048.000000 +0:105 Sequence +0:105 move second child to first child ( temp highp float) +0:105 'instanceLoop' ( temp highp float) +0:105 Floor ( global highp float) +0:105 Convert int to float ( temp highp float) +0:105 divide ( temp highp int) +0:105 Convert float to int ( temp highp int) +0:105 direct index ( temp highp float) +0:105 'texCoord0' ( temp highp 3-component vector of float) +0:105 Constant: +0:105 2 (const int) +0:105 Constant: +0:105 2048 (const int) +0:106 move second child to first child ( temp highp float) +0:106 direct index ( temp highp float) +0:106 'texCoord0' ( temp highp 3-component vector of float) +0:106 Constant: +0:106 2 (const int) +0:106 'actualTexZ' ( temp highp float) +0:107 Sequence +0:107 move second child to first child ( temp highp 4-component vector of float) +0:107 'colorMapColor' ( temp highp 4-component vector of float) +0:107 texture ( global highp 4-component vector of float) +0:107 'sColorMap' ( uniform highp sampler2DArray) +0:107 vector swizzle ( temp highp 3-component vector of float) +0:107 'texCoord0' ( temp highp 3-component vector of float) +0:107 Sequence +0:107 Constant: +0:107 0 (const int) +0:107 Constant: +0:107 1 (const int) +0:107 Constant: +0:107 2 (const int) +0:109 Sequence +0:109 move second child to first child ( temp highp float) +0:109 'red' ( temp highp float) +0:109 indirect index ( temp highp float) +0:109 'colorMapColor' ( temp highp 4-component vector of float) +0:109 Convert float to int ( temp highp int) +0:109 'instanceLoop' ( temp highp float) +0:110 move second child to first child ( temp highp 4-component vector of float) +0:110 'colorMapColor' ( temp highp 4-component vector of float) +0:110 Construct vec4 ( temp highp 4-component vector of float) +0:110 'red' ( temp highp float) +0:112 add second child into first child ( temp highp 3-component vector of float) +0:112 vector swizzle ( temp highp 3-component vector of float) +0:112 'outcol' ( temp highp 4-component vector of float) +0:112 Sequence +0:112 Constant: +0:112 0 (const int) +0:112 Constant: +0:112 1 (const int) +0:112 Constant: +0:112 2 (const int) +0:112 component-wise multiply ( temp highp 3-component vector of float) +0:112 uConstant: direct index for structure ( uniform highp 3-component vector of float) +0:112 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:112 Constant: +0:112 3 (const uint) +0:112 vector swizzle ( temp highp 3-component vector of float) +0:112 color: direct index for structure ( in highp 4-component vector of float) +0:112 'iVert' ( in block{ in highp 4-component vector of float color, in highp 3-component vector of float worldSpacePos, in highp 3-component vector of float texCoord0, flat in highp int cameraIndex, flat in highp int instance}) +0:112 Constant: +0:112 0 (const int) +0:112 Sequence +0:112 Constant: +0:112 0 (const int) +0:112 Constant: +0:112 1 (const int) +0:112 Constant: +0:112 2 (const int) +0:114 multiply second child into first child ( temp highp 4-component vector of float) +0:114 'outcol' ( temp highp 4-component vector of float) +0:114 'colorMapColor' ( temp highp 4-component vector of float) +0:117 Sequence +0:117 move second child to first child ( temp highp float) +0:117 'alpha' ( temp highp float) +0:117 component-wise multiply ( temp highp float) +0:117 direct index ( temp highp float) +0:117 color: direct index for structure ( in highp 4-component vector of float) +0:117 'iVert' ( in block{ in highp 4-component vector of float color, in highp 3-component vector of float worldSpacePos, in highp 3-component vector of float texCoord0, flat in highp int cameraIndex, flat in highp int instance}) +0:117 Constant: +0:117 0 (const int) +0:117 Constant: +0:117 3 (const int) +0:117 direct index ( temp highp float) +0:117 'colorMapColor' ( temp highp 4-component vector of float) +0:117 Constant: +0:117 3 (const int) +0:120 move second child to first child ( temp highp 4-component vector of float) +0:120 'outcol' ( temp highp 4-component vector of float) +0:120 Function Call: TDDither(vf4; ( global highp 4-component vector of float) +0:120 'outcol' ( temp highp 4-component vector of float) +0:122 vector scale second child into first child ( temp highp 3-component vector of float) +0:122 vector swizzle ( temp highp 3-component vector of float) +0:122 'outcol' ( temp highp 4-component vector of float) +0:122 Sequence +0:122 Constant: +0:122 0 (const int) +0:122 Constant: +0:122 1 (const int) +0:122 Constant: +0:122 2 (const int) +0:122 'alpha' ( temp highp float) +0:126 Function Call: TDAlphaTest(f1; ( global void) +0:126 'alpha' ( temp highp float) +0:128 move second child to first child ( temp highp float) +0:128 direct index ( temp highp float) +0:128 'outcol' ( temp highp 4-component vector of float) +0:128 Constant: +0:128 3 (const int) +0:128 'alpha' ( temp highp float) +0:129 move second child to first child ( temp highp 4-component vector of float) +0:129 direct index (layout( location=0) temp highp 4-component vector of float) +0:129 'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float) +0:129 Constant: +0:129 0 (const int) +0:129 Function Call: TDOutputSwizzle(vf4; ( global highp 4-component vector of float) +0:129 'outcol' ( temp highp 4-component vector of float) +0:135 Sequence +0:135 Sequence +0:135 move second child to first child ( temp highp int) +0:135 'i' ( temp highp int) +0:135 Constant: +0:135 1 (const int) +0:135 Loop with condition tested first +0:135 Loop Condition +0:135 Compare Less Than ( temp bool) +0:135 'i' ( temp highp int) +0:135 Constant: +0:135 1 (const int) +0:135 Loop Body +0:137 Sequence +0:137 move second child to first child ( temp highp 4-component vector of float) +0:137 indirect index (layout( location=0) temp highp 4-component vector of float) +0:137 'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float) +0:137 'i' ( temp highp int) +0:137 Constant: +0:137 0.000000 +0:137 0.000000 +0:137 0.000000 +0:137 0.000000 +0:135 Loop Terminal Expression +0:135 Post-Increment ( temp highp int) +0:135 'i' ( temp highp int) +0:116 Function Definition: TDColor(vf4; ( global highp 4-component vector of float) +0:116 Function Parameters: +0:116 'color' ( in highp 4-component vector of float) +0:116 Sequence +0:116 Branch: Return with expression +0:116 'color' ( in highp 4-component vector of float) +0:117 Function Definition: TDCheckOrderIndTrans( ( global void) +0:117 Function Parameters: +0:119 Function Definition: TDCheckDiscard( ( global void) +0:119 Function Parameters: +0:120 Sequence +0:120 Function Call: TDCheckOrderIndTrans( ( global void) +0:122 Function Definition: TDDither(vf4; ( global highp 4-component vector of float) +0:122 Function Parameters: +0:122 'color' ( in highp 4-component vector of float) +0:124 Sequence +0:124 Sequence +0:124 move second child to first child ( temp highp float) +0:124 'd' ( temp highp float) +0:125 direct index ( temp highp float) +0:125 texture ( global highp 4-component vector of float) +0:124 'sTDNoiseMap' ( uniform highp sampler2D) +0:125 divide ( temp highp 2-component vector of float) +0:125 vector swizzle ( temp highp 2-component vector of float) +0:125 'gl_FragCoord' ( gl_FragCoord highp 4-component vector of float FragCoord) +0:125 Sequence +0:125 Constant: +0:125 0 (const int) +0:125 Constant: +0:125 1 (const int) +0:125 Constant: +0:125 256.000000 +0:125 Constant: +0:125 0 (const int) +0:126 subtract second child into first child ( temp highp float) +0:126 'd' ( temp highp float) +0:126 Constant: +0:126 0.500000 +0:127 divide second child into first child ( temp highp float) +0:127 'd' ( temp highp float) +0:127 Constant: +0:127 256.000000 +0:128 Branch: Return with expression +0:128 Construct vec4 ( temp highp 4-component vector of float) +0:128 add ( temp highp 3-component vector of float) +0:128 vector swizzle ( temp highp 3-component vector of float) +0:128 'color' ( in highp 4-component vector of float) +0:128 Sequence +0:128 Constant: +0:128 0 (const int) +0:128 Constant: +0:128 1 (const int) +0:128 Constant: +0:128 2 (const int) +0:128 'd' ( temp highp float) +0:128 direct index ( temp highp float) +0:128 'color' ( in highp 4-component vector of float) +0:128 Constant: +0:128 3 (const int) +0:130 Function Definition: TDFrontFacing(vf3;vf3; ( global bool) +0:130 Function Parameters: +0:130 'pos' ( in highp 3-component vector of float) +0:130 'normal' ( in highp 3-component vector of float) +0:132 Sequence +0:132 Branch: Return with expression +0:132 'gl_FrontFacing' ( gl_FrontFacing bool Face) +0:134 Function Definition: TDAttenuateLight(i1;f1; ( global highp float) +0:134 Function Parameters: +0:134 'index' ( in highp int) +0:134 'lightDist' ( in highp float) +0:136 Sequence +0:136 Branch: Return with expression +0:136 Constant: +0:136 1.000000 +0:138 Function Definition: TDAlphaTest(f1; ( global void) +0:138 Function Parameters: +0:138 'alpha' ( in highp float) +0:140 Function Definition: TDHardShadow(i1;vf3; ( global highp float) +0:140 Function Parameters: +0:140 'lightIndex' ( in highp int) +0:140 'worldSpacePos' ( in highp 3-component vector of float) +0:141 Sequence +0:141 Branch: Return with expression +0:141 Constant: +0:141 0.000000 +0:142 Function Definition: TDSoftShadow(i1;vf3;i1;i1; ( global highp float) +0:142 Function Parameters: +0:142 'lightIndex' ( in highp int) +0:142 'worldSpacePos' ( in highp 3-component vector of float) +0:142 'samples' ( in highp int) +0:142 'steps' ( in highp int) +0:143 Sequence +0:143 Branch: Return with expression +0:143 Constant: +0:143 0.000000 +0:144 Function Definition: TDSoftShadow(i1;vf3; ( global highp float) +0:144 Function Parameters: +0:144 'lightIndex' ( in highp int) +0:144 'worldSpacePos' ( in highp 3-component vector of float) +0:145 Sequence +0:145 Branch: Return with expression +0:145 Constant: +0:145 0.000000 +0:146 Function Definition: TDShadow(i1;vf3; ( global highp float) +0:146 Function Parameters: +0:146 'lightIndex' ( in highp int) +0:146 'worldSpacePos' ( in highp 3-component vector of float) +0:147 Sequence +0:147 Branch: Return with expression +0:147 Constant: +0:147 0.000000 +0:152 Function Definition: iTDRadicalInverse_VdC(u1; ( global highp float) +0:152 Function Parameters: +0:152 'bits' ( in highp uint) +0:154 Sequence +0:154 move second child to first child ( temp highp uint) +0:154 'bits' ( in highp uint) +0:154 inclusive-or ( temp highp uint) +0:154 left-shift ( temp highp uint) +0:154 'bits' ( in highp uint) +0:154 Constant: +0:154 16 (const uint) +0:154 right-shift ( temp highp uint) +0:154 'bits' ( in highp uint) +0:154 Constant: +0:154 16 (const uint) +0:155 move second child to first child ( temp highp uint) +0:155 'bits' ( in highp uint) +0:155 inclusive-or ( temp highp uint) +0:155 left-shift ( temp highp uint) +0:155 bitwise and ( temp highp uint) +0:155 'bits' ( in highp uint) +0:155 Constant: +0:155 1431655765 (const uint) +0:155 Constant: +0:155 1 (const uint) +0:155 right-shift ( temp highp uint) +0:155 bitwise and ( temp highp uint) +0:155 'bits' ( in highp uint) +0:155 Constant: +0:155 2863311530 (const uint) +0:155 Constant: +0:155 1 (const uint) +0:156 move second child to first child ( temp highp uint) +0:156 'bits' ( in highp uint) +0:156 inclusive-or ( temp highp uint) +0:156 left-shift ( temp highp uint) +0:156 bitwise and ( temp highp uint) +0:156 'bits' ( in highp uint) +0:156 Constant: +0:156 858993459 (const uint) +0:156 Constant: +0:156 2 (const uint) +0:156 right-shift ( temp highp uint) +0:156 bitwise and ( temp highp uint) +0:156 'bits' ( in highp uint) +0:156 Constant: +0:156 3435973836 (const uint) +0:156 Constant: +0:156 2 (const uint) +0:157 move second child to first child ( temp highp uint) +0:157 'bits' ( in highp uint) +0:157 inclusive-or ( temp highp uint) +0:157 left-shift ( temp highp uint) +0:157 bitwise and ( temp highp uint) +0:157 'bits' ( in highp uint) +0:157 Constant: +0:157 252645135 (const uint) +0:157 Constant: +0:157 4 (const uint) +0:157 right-shift ( temp highp uint) +0:157 bitwise and ( temp highp uint) +0:157 'bits' ( in highp uint) +0:157 Constant: +0:157 4042322160 (const uint) +0:157 Constant: +0:157 4 (const uint) +0:158 move second child to first child ( temp highp uint) +0:158 'bits' ( in highp uint) +0:158 inclusive-or ( temp highp uint) +0:158 left-shift ( temp highp uint) +0:158 bitwise and ( temp highp uint) +0:158 'bits' ( in highp uint) +0:158 Constant: +0:158 16711935 (const uint) +0:158 Constant: +0:158 8 (const uint) +0:158 right-shift ( temp highp uint) +0:158 bitwise and ( temp highp uint) +0:158 'bits' ( in highp uint) +0:158 Constant: +0:158 4278255360 (const uint) +0:158 Constant: +0:158 8 (const uint) +0:159 Branch: Return with expression +0:159 component-wise multiply ( temp highp float) +0:159 Convert uint to float ( temp highp float) +0:159 'bits' ( in highp uint) +0:159 Constant: +0:159 2.3283064365387e-10 +0:161 Function Definition: iTDHammersley(u1;u1; ( global highp 2-component vector of float) +0:161 Function Parameters: +0:161 'i' ( in highp uint) +0:161 'N' ( in highp uint) +0:163 Sequence +0:163 Branch: Return with expression +0:163 Construct vec2 ( temp highp 2-component vector of float) +0:163 divide ( temp highp float) +0:163 Convert uint to float ( temp highp float) +0:163 'i' ( in highp uint) +0:163 Convert uint to float ( temp highp float) +0:163 'N' ( in highp uint) +0:163 Function Call: iTDRadicalInverse_VdC(u1; ( global highp float) +0:163 'i' ( in highp uint) +0:165 Function Definition: iTDImportanceSampleGGX(vf2;f1;vf3; ( global highp 3-component vector of float) +0:165 Function Parameters: +0:165 'Xi' ( in highp 2-component vector of float) +0:165 'roughness2' ( in highp float) +0:165 'N' ( in highp 3-component vector of float) +0:167 Sequence +0:167 Sequence +0:167 move second child to first child ( temp highp float) +0:167 'a' ( temp highp float) +0:167 'roughness2' ( in highp float) +0:168 Sequence +0:168 move second child to first child ( temp highp float) +0:168 'phi' ( temp highp float) +0:168 component-wise multiply ( temp highp float) +0:168 Constant: +0:168 6.283185 +0:168 direct index ( temp highp float) +0:168 'Xi' ( in highp 2-component vector of float) +0:168 Constant: +0:168 0 (const int) +0:169 Sequence +0:169 move second child to first child ( temp highp float) +0:169 'cosTheta' ( temp highp float) +0:169 sqrt ( global highp float) +0:169 divide ( temp highp float) +0:169 subtract ( temp highp float) +0:169 Constant: +0:169 1.000000 +0:169 direct index ( temp highp float) +0:169 'Xi' ( in highp 2-component vector of float) +0:169 Constant: +0:169 1 (const int) +0:169 add ( temp highp float) +0:169 Constant: +0:169 1.000000 +0:169 component-wise multiply ( temp highp float) +0:169 subtract ( temp highp float) +0:169 component-wise multiply ( temp highp float) +0:169 'a' ( temp highp float) +0:169 'a' ( temp highp float) +0:169 Constant: +0:169 1.000000 +0:169 direct index ( temp highp float) +0:169 'Xi' ( in highp 2-component vector of float) +0:169 Constant: +0:169 1 (const int) +0:170 Sequence +0:170 move second child to first child ( temp highp float) +0:170 'sinTheta' ( temp highp float) +0:170 sqrt ( global highp float) +0:170 subtract ( temp highp float) +0:170 Constant: +0:170 1.000000 +0:170 component-wise multiply ( temp highp float) +0:170 'cosTheta' ( temp highp float) +0:170 'cosTheta' ( temp highp float) +0:173 move second child to first child ( temp highp float) +0:173 direct index ( temp highp float) +0:173 'H' ( temp highp 3-component vector of float) +0:173 Constant: +0:173 0 (const int) +0:173 component-wise multiply ( temp highp float) +0:173 'sinTheta' ( temp highp float) +0:173 cosine ( global highp float) +0:173 'phi' ( temp highp float) +0:174 move second child to first child ( temp highp float) +0:174 direct index ( temp highp float) +0:174 'H' ( temp highp 3-component vector of float) +0:174 Constant: +0:174 1 (const int) +0:174 component-wise multiply ( temp highp float) +0:174 'sinTheta' ( temp highp float) +0:174 sine ( global highp float) +0:174 'phi' ( temp highp float) +0:175 move second child to first child ( temp highp float) +0:175 direct index ( temp highp float) +0:175 'H' ( temp highp 3-component vector of float) +0:175 Constant: +0:175 2 (const int) +0:175 'cosTheta' ( temp highp float) +0:177 Sequence +0:177 move second child to first child ( temp highp 3-component vector of float) +0:177 'upVector' ( temp highp 3-component vector of float) +0:177 Test condition and select ( temp highp 3-component vector of float) +0:177 Condition +0:177 Compare Less Than ( temp bool) +0:177 Absolute value ( global highp float) +0:177 direct index ( temp highp float) +0:177 'N' ( in highp 3-component vector of float) +0:177 Constant: +0:177 2 (const int) +0:177 Constant: +0:177 0.999000 +0:177 true case +0:177 Constant: +0:177 0.000000 +0:177 0.000000 +0:177 1.000000 +0:177 false case +0:177 Constant: +0:177 1.000000 +0:177 0.000000 +0:177 0.000000 +0:178 Sequence +0:178 move second child to first child ( temp highp 3-component vector of float) +0:178 'tangentX' ( temp highp 3-component vector of float) +0:178 normalize ( global highp 3-component vector of float) +0:178 cross-product ( global highp 3-component vector of float) +0:178 'upVector' ( temp highp 3-component vector of float) +0:178 'N' ( in highp 3-component vector of float) +0:179 Sequence +0:179 move second child to first child ( temp highp 3-component vector of float) +0:179 'tangentY' ( temp highp 3-component vector of float) +0:179 cross-product ( global highp 3-component vector of float) +0:179 'N' ( in highp 3-component vector of float) +0:179 'tangentX' ( temp highp 3-component vector of float) +0:182 Sequence +0:182 move second child to first child ( temp highp 3-component vector of float) +0:182 'worldResult' ( temp highp 3-component vector of float) +0:182 add ( temp highp 3-component vector of float) +0:182 add ( temp highp 3-component vector of float) +0:182 vector-scale ( temp highp 3-component vector of float) +0:182 'tangentX' ( temp highp 3-component vector of float) +0:182 direct index ( temp highp float) +0:182 'H' ( temp highp 3-component vector of float) +0:182 Constant: +0:182 0 (const int) +0:182 vector-scale ( temp highp 3-component vector of float) +0:182 'tangentY' ( temp highp 3-component vector of float) +0:182 direct index ( temp highp float) +0:182 'H' ( temp highp 3-component vector of float) +0:182 Constant: +0:182 1 (const int) +0:182 vector-scale ( temp highp 3-component vector of float) +0:182 'N' ( in highp 3-component vector of float) +0:182 direct index ( temp highp float) +0:182 'H' ( temp highp 3-component vector of float) +0:182 Constant: +0:182 2 (const int) +0:183 Branch: Return with expression +0:183 'worldResult' ( temp highp 3-component vector of float) +0:185 Function Definition: iTDDistributionGGX(vf3;vf3;f1; ( global highp float) +0:185 Function Parameters: +0:185 'normal' ( in highp 3-component vector of float) +0:185 'half_vector' ( in highp 3-component vector of float) +0:185 'roughness2' ( in highp float) +0:? Sequence +0:189 Sequence +0:189 move second child to first child ( temp highp float) +0:189 'NdotH' ( temp highp float) +0:189 clamp ( global highp float) +0:189 dot-product ( global highp float) +0:189 'normal' ( in highp 3-component vector of float) +0:189 'half_vector' ( in highp 3-component vector of float) +0:189 Constant: +0:189 1.0000000000000e-06 +0:189 Constant: +0:189 1.000000 +0:191 Sequence +0:191 move second child to first child ( temp highp float) +0:191 'alpha2' ( temp highp float) +0:191 component-wise multiply ( temp highp float) +0:191 'roughness2' ( in highp float) +0:191 'roughness2' ( in highp float) +0:193 Sequence +0:193 move second child to first child ( temp highp float) +0:193 'denom' ( temp highp float) +0:193 add ( temp highp float) +0:193 component-wise multiply ( temp highp float) +0:193 component-wise multiply ( temp highp float) +0:193 'NdotH' ( temp highp float) +0:193 'NdotH' ( temp highp float) +0:193 subtract ( temp highp float) +0:193 'alpha2' ( temp highp float) +0:193 Constant: +0:193 1.000000 +0:193 Constant: +0:193 1.000000 +0:194 move second child to first child ( temp highp float) +0:194 'denom' ( temp highp float) +0:194 max ( global highp float) +0:194 Constant: +0:194 1.0000000000000e-08 +0:194 'denom' ( temp highp float) +0:195 Branch: Return with expression +0:195 divide ( temp highp float) +0:195 'alpha2' ( temp highp float) +0:195 component-wise multiply ( temp highp float) +0:195 component-wise multiply ( temp highp float) +0:195 Constant: +0:195 3.141593 +0:195 'denom' ( temp highp float) +0:195 'denom' ( temp highp float) +0:197 Function Definition: iTDCalcF(vf3;f1; ( global highp 3-component vector of float) +0:197 Function Parameters: +0:197 'F0' ( in highp 3-component vector of float) +0:197 'VdotH' ( in highp float) +0:198 Sequence +0:198 Branch: Return with expression +0:198 add ( temp highp 3-component vector of float) +0:198 'F0' ( in highp 3-component vector of float) +0:198 vector-scale ( temp highp 3-component vector of float) +0:198 subtract ( temp highp 3-component vector of float) +0:198 Constant: +0:198 1.000000 +0:198 1.000000 +0:198 1.000000 +0:198 'F0' ( in highp 3-component vector of float) +0:198 pow ( global highp float) +0:198 Constant: +0:198 2.000000 +0:198 component-wise multiply ( temp highp float) +0:198 subtract ( temp highp float) +0:198 component-wise multiply ( temp highp float) +0:198 Constant: +0:198 -5.554730 +0:198 'VdotH' ( in highp float) +0:198 Constant: +0:198 6.983160 +0:198 'VdotH' ( in highp float) +0:201 Function Definition: iTDCalcG(f1;f1;f1; ( global highp float) +0:201 Function Parameters: +0:201 'NdotL' ( in highp float) +0:201 'NdotV' ( in highp float) +0:201 'k' ( in highp float) +0:202 Sequence +0:202 Sequence +0:202 move second child to first child ( temp highp float) +0:202 'Gl' ( temp highp float) +0:202 divide ( temp highp float) +0:202 Constant: +0:202 1.000000 +0:202 add ( temp highp float) +0:202 component-wise multiply ( temp highp float) +0:202 'NdotL' ( in highp float) +0:202 subtract ( temp highp float) +0:202 Constant: +0:202 1.000000 +0:202 'k' ( in highp float) +0:202 'k' ( in highp float) +0:203 Sequence +0:203 move second child to first child ( temp highp float) +0:203 'Gv' ( temp highp float) +0:203 divide ( temp highp float) +0:203 Constant: +0:203 1.000000 +0:203 add ( temp highp float) +0:203 component-wise multiply ( temp highp float) +0:203 'NdotV' ( in highp float) +0:203 subtract ( temp highp float) +0:203 Constant: +0:203 1.000000 +0:203 'k' ( in highp float) +0:203 'k' ( in highp float) +0:204 Branch: Return with expression +0:204 component-wise multiply ( temp highp float) +0:204 'Gl' ( temp highp float) +0:204 'Gv' ( temp highp float) +0:207 Function Definition: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:207 Function Parameters: +0:207 'index' ( in highp int) +0:207 'diffuseColor' ( in highp 3-component vector of float) +0:207 'specularColor' ( in highp 3-component vector of float) +0:207 'worldSpacePos' ( in highp 3-component vector of float) +0:207 'normal' ( in highp 3-component vector of float) +0:207 'shadowStrength' ( in highp float) +0:207 'shadowColor' ( in highp 3-component vector of float) +0:207 'camVector' ( in highp 3-component vector of float) +0:207 'roughness' ( in highp float) +0:? Sequence +0:210 Branch: Return with expression +0:210 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:213 Function Definition: TDLightingPBR(vf3;vf3;f1;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global void) +0:213 Function Parameters: +0:213 'diffuseContrib' ( inout highp 3-component vector of float) +0:213 'specularContrib' ( inout highp 3-component vector of float) +0:213 'shadowStrengthOut' ( inout highp float) +0:213 'index' ( in highp int) +0:213 'diffuseColor' ( in highp 3-component vector of float) +0:213 'specularColor' ( in highp 3-component vector of float) +0:213 'worldSpacePos' ( in highp 3-component vector of float) +0:213 'normal' ( in highp 3-component vector of float) +0:213 'shadowStrength' ( in highp float) +0:213 'shadowColor' ( in highp 3-component vector of float) +0:213 'camVector' ( in highp 3-component vector of float) +0:213 'roughness' ( in highp float) +0:215 Sequence +0:215 Sequence +0:215 move second child to first child ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:215 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:215 Function Call: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:215 'index' ( in highp int) +0:215 'diffuseColor' ( in highp 3-component vector of float) +0:215 'specularColor' ( in highp 3-component vector of float) +0:215 'worldSpacePos' ( in highp 3-component vector of float) +0:215 'normal' ( in highp 3-component vector of float) +0:215 'shadowStrength' ( in highp float) +0:215 'shadowColor' ( in highp 3-component vector of float) +0:215 'camVector' ( in highp 3-component vector of float) +0:215 'roughness' ( in highp float) +0:215 move second child to first child ( temp highp 3-component vector of float) +0:215 'diffuseContrib' ( inout highp 3-component vector of float) +0:215 diffuse: direct index for structure ( global highp 3-component vector of float) +0:215 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:215 Constant: +0:215 0 (const int) +0:216 move second child to first child ( temp highp 3-component vector of float) +0:216 'specularContrib' ( inout highp 3-component vector of float) +0:216 specular: direct index for structure ( global highp 3-component vector of float) +0:216 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:216 Constant: +0:216 1 (const int) +0:217 move second child to first child ( temp highp float) +0:217 'shadowStrengthOut' ( inout highp float) +0:217 shadowStrength: direct index for structure ( global highp float) +0:217 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:217 Constant: +0:217 2 (const int) +0:220 Function Definition: TDLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global void) +0:220 Function Parameters: +0:220 'diffuseContrib' ( inout highp 3-component vector of float) +0:220 'specularContrib' ( inout highp 3-component vector of float) +0:220 'index' ( in highp int) +0:220 'diffuseColor' ( in highp 3-component vector of float) +0:220 'specularColor' ( in highp 3-component vector of float) +0:220 'worldSpacePos' ( in highp 3-component vector of float) +0:220 'normal' ( in highp 3-component vector of float) +0:220 'shadowStrength' ( in highp float) +0:220 'shadowColor' ( in highp 3-component vector of float) +0:220 'camVector' ( in highp 3-component vector of float) +0:220 'roughness' ( in highp float) +0:222 Sequence +0:222 Sequence +0:222 move second child to first child ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:222 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:222 Function Call: TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:222 'index' ( in highp int) +0:222 'diffuseColor' ( in highp 3-component vector of float) +0:222 'specularColor' ( in highp 3-component vector of float) +0:222 'worldSpacePos' ( in highp 3-component vector of float) +0:222 'normal' ( in highp 3-component vector of float) +0:222 'shadowStrength' ( in highp float) +0:222 'shadowColor' ( in highp 3-component vector of float) +0:222 'camVector' ( in highp 3-component vector of float) +0:222 'roughness' ( in highp float) +0:222 move second child to first child ( temp highp 3-component vector of float) +0:222 'diffuseContrib' ( inout highp 3-component vector of float) +0:222 diffuse: direct index for structure ( global highp 3-component vector of float) +0:222 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:222 Constant: +0:222 0 (const int) +0:223 move second child to first child ( temp highp 3-component vector of float) +0:223 'specularContrib' ( inout highp 3-component vector of float) +0:223 specular: direct index for structure ( global highp 3-component vector of float) +0:223 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:223 Constant: +0:223 1 (const int) +0:226 Function Definition: TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:226 Function Parameters: +0:226 'index' ( in highp int) +0:226 'diffuseColor' ( in highp 3-component vector of float) +0:226 'specularColor' ( in highp 3-component vector of float) +0:226 'normal' ( in highp 3-component vector of float) +0:226 'camVector' ( in highp 3-component vector of float) +0:226 'roughness' ( in highp float) +0:226 'ambientOcclusion' ( in highp float) +0:? Sequence +0:229 Branch: Return with expression +0:229 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:232 Function Definition: TDEnvLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;f1; ( global void) +0:232 Function Parameters: +0:232 'diffuseContrib' ( inout highp 3-component vector of float) +0:232 'specularContrib' ( inout highp 3-component vector of float) +0:232 'index' ( in highp int) +0:232 'diffuseColor' ( in highp 3-component vector of float) +0:232 'specularColor' ( in highp 3-component vector of float) +0:232 'normal' ( in highp 3-component vector of float) +0:232 'camVector' ( in highp 3-component vector of float) +0:232 'roughness' ( in highp float) +0:232 'ambientOcclusion' ( in highp float) +0:234 Sequence +0:234 Sequence +0:234 move second child to first child ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:234 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:234 Function Call: TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:234 'index' ( in highp int) +0:234 'diffuseColor' ( in highp 3-component vector of float) +0:234 'specularColor' ( in highp 3-component vector of float) +0:234 'normal' ( in highp 3-component vector of float) +0:234 'camVector' ( in highp 3-component vector of float) +0:234 'roughness' ( in highp float) +0:234 'ambientOcclusion' ( in highp float) +0:235 move second child to first child ( temp highp 3-component vector of float) +0:235 'diffuseContrib' ( inout highp 3-component vector of float) +0:235 diffuse: direct index for structure ( global highp 3-component vector of float) +0:235 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:235 Constant: +0:235 0 (const int) +0:236 move second child to first child ( temp highp 3-component vector of float) +0:236 'specularContrib' ( inout highp 3-component vector of float) +0:236 specular: direct index for structure ( global highp 3-component vector of float) +0:236 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp float shadowStrength}) +0:236 Constant: +0:236 1 (const int) +0:239 Function Definition: TDLighting(i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:239 Function Parameters: +0:239 'index' ( in highp int) +0:239 'worldSpacePos' ( in highp 3-component vector of float) +0:239 'normal' ( in highp 3-component vector of float) +0:239 'shadowStrength' ( in highp float) +0:239 'shadowColor' ( in highp 3-component vector of float) +0:239 'camVector' ( in highp 3-component vector of float) +0:239 'shininess' ( in highp float) +0:239 'shininess2' ( in highp float) +0:? Sequence +0:242 switch +0:242 condition +0:242 'index' ( in highp int) +0:242 body +0:242 Sequence +0:244 default: +0:? Sequence +0:245 move second child to first child ( temp highp 3-component vector of float) +0:245 diffuse: direct index for structure ( global highp 3-component vector of float) +0:245 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:245 Constant: +0:245 0 (const int) +0:245 Constant: +0:245 0.000000 +0:245 0.000000 +0:245 0.000000 +0:246 move second child to first child ( temp highp 3-component vector of float) +0:246 specular: direct index for structure ( global highp 3-component vector of float) +0:246 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:246 Constant: +0:246 1 (const int) +0:246 Constant: +0:246 0.000000 +0:246 0.000000 +0:246 0.000000 +0:247 move second child to first child ( temp highp 3-component vector of float) +0:247 specular2: direct index for structure ( global highp 3-component vector of float) +0:247 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:247 Constant: +0:247 2 (const int) +0:247 Constant: +0:247 0.000000 +0:247 0.000000 +0:247 0.000000 +0:248 move second child to first child ( temp highp float) +0:248 shadowStrength: direct index for structure ( global highp float) +0:248 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:248 Constant: +0:248 3 (const int) +0:248 Constant: +0:248 0.000000 +0:249 Branch: Break +0:251 Branch: Return with expression +0:251 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:254 Function Definition: TDLighting(vf3;vf3;vf3;f1;i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global void) +0:254 Function Parameters: +0:254 'diffuseContrib' ( inout highp 3-component vector of float) +0:254 'specularContrib' ( inout highp 3-component vector of float) +0:254 'specularContrib2' ( inout highp 3-component vector of float) +0:254 'shadowStrengthOut' ( inout highp float) +0:254 'index' ( in highp int) +0:254 'worldSpacePos' ( in highp 3-component vector of float) +0:254 'normal' ( in highp 3-component vector of float) +0:254 'shadowStrength' ( in highp float) +0:254 'shadowColor' ( in highp 3-component vector of float) +0:254 'camVector' ( in highp 3-component vector of float) +0:254 'shininess' ( in highp float) +0:254 'shininess2' ( in highp float) +0:? Sequence +0:257 switch +0:257 condition +0:257 'index' ( in highp int) +0:257 body +0:257 Sequence +0:259 default: +0:? Sequence +0:260 move second child to first child ( temp highp 3-component vector of float) +0:260 diffuse: direct index for structure ( global highp 3-component vector of float) +0:260 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:260 Constant: +0:260 0 (const int) +0:260 Constant: +0:260 0.000000 +0:260 0.000000 +0:260 0.000000 +0:261 move second child to first child ( temp highp 3-component vector of float) +0:261 specular: direct index for structure ( global highp 3-component vector of float) +0:261 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:261 Constant: +0:261 1 (const int) +0:261 Constant: +0:261 0.000000 +0:261 0.000000 +0:261 0.000000 +0:262 move second child to first child ( temp highp 3-component vector of float) +0:262 specular2: direct index for structure ( global highp 3-component vector of float) +0:262 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:262 Constant: +0:262 2 (const int) +0:262 Constant: +0:262 0.000000 +0:262 0.000000 +0:262 0.000000 +0:263 move second child to first child ( temp highp float) +0:263 shadowStrength: direct index for structure ( global highp float) +0:263 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:263 Constant: +0:263 3 (const int) +0:263 Constant: +0:263 0.000000 +0:264 Branch: Break +0:266 move second child to first child ( temp highp 3-component vector of float) +0:266 'diffuseContrib' ( inout highp 3-component vector of float) +0:266 diffuse: direct index for structure ( global highp 3-component vector of float) +0:266 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:266 Constant: +0:266 0 (const int) +0:267 move second child to first child ( temp highp 3-component vector of float) +0:267 'specularContrib' ( inout highp 3-component vector of float) +0:267 specular: direct index for structure ( global highp 3-component vector of float) +0:267 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:267 Constant: +0:267 1 (const int) +0:268 move second child to first child ( temp highp 3-component vector of float) +0:268 'specularContrib2' ( inout highp 3-component vector of float) +0:268 specular2: direct index for structure ( global highp 3-component vector of float) +0:268 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:268 Constant: +0:268 2 (const int) +0:269 move second child to first child ( temp highp float) +0:269 'shadowStrengthOut' ( inout highp float) +0:269 shadowStrength: direct index for structure ( global highp float) +0:269 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:269 Constant: +0:269 3 (const int) +0:272 Function Definition: TDLighting(vf3;vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;f1; ( global void) +0:272 Function Parameters: +0:272 'diffuseContrib' ( inout highp 3-component vector of float) +0:272 'specularContrib' ( inout highp 3-component vector of float) +0:272 'specularContrib2' ( inout highp 3-component vector of float) +0:272 'index' ( in highp int) +0:272 'worldSpacePos' ( in highp 3-component vector of float) +0:272 'normal' ( in highp 3-component vector of float) +0:272 'shadowStrength' ( in highp float) +0:272 'shadowColor' ( in highp 3-component vector of float) +0:272 'camVector' ( in highp 3-component vector of float) +0:272 'shininess' ( in highp float) +0:272 'shininess2' ( in highp float) +0:? Sequence +0:275 switch +0:275 condition +0:275 'index' ( in highp int) +0:275 body +0:275 Sequence +0:277 default: +0:? Sequence +0:278 move second child to first child ( temp highp 3-component vector of float) +0:278 diffuse: direct index for structure ( global highp 3-component vector of float) +0:278 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:278 Constant: +0:278 0 (const int) +0:278 Constant: +0:278 0.000000 +0:278 0.000000 +0:278 0.000000 +0:279 move second child to first child ( temp highp 3-component vector of float) +0:279 specular: direct index for structure ( global highp 3-component vector of float) +0:279 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:279 Constant: +0:279 1 (const int) +0:279 Constant: +0:279 0.000000 +0:279 0.000000 +0:279 0.000000 +0:280 move second child to first child ( temp highp 3-component vector of float) +0:280 specular2: direct index for structure ( global highp 3-component vector of float) +0:280 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:280 Constant: +0:280 2 (const int) +0:280 Constant: +0:280 0.000000 +0:280 0.000000 +0:280 0.000000 +0:281 move second child to first child ( temp highp float) +0:281 shadowStrength: direct index for structure ( global highp float) +0:281 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:281 Constant: +0:281 3 (const int) +0:281 Constant: +0:281 0.000000 +0:282 Branch: Break +0:284 move second child to first child ( temp highp 3-component vector of float) +0:284 'diffuseContrib' ( inout highp 3-component vector of float) +0:284 diffuse: direct index for structure ( global highp 3-component vector of float) +0:284 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:284 Constant: +0:284 0 (const int) +0:285 move second child to first child ( temp highp 3-component vector of float) +0:285 'specularContrib' ( inout highp 3-component vector of float) +0:285 specular: direct index for structure ( global highp 3-component vector of float) +0:285 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:285 Constant: +0:285 1 (const int) +0:286 move second child to first child ( temp highp 3-component vector of float) +0:286 'specularContrib2' ( inout highp 3-component vector of float) +0:286 specular2: direct index for structure ( global highp 3-component vector of float) +0:286 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:286 Constant: +0:286 2 (const int) +0:289 Function Definition: TDLighting(vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1; ( global void) +0:289 Function Parameters: +0:289 'diffuseContrib' ( inout highp 3-component vector of float) +0:289 'specularContrib' ( inout highp 3-component vector of float) +0:289 'index' ( in highp int) +0:289 'worldSpacePos' ( in highp 3-component vector of float) +0:289 'normal' ( in highp 3-component vector of float) +0:289 'shadowStrength' ( in highp float) +0:289 'shadowColor' ( in highp 3-component vector of float) +0:289 'camVector' ( in highp 3-component vector of float) +0:289 'shininess' ( in highp float) +0:? Sequence +0:292 switch +0:292 condition +0:292 'index' ( in highp int) +0:292 body +0:292 Sequence +0:294 default: +0:? Sequence +0:295 move second child to first child ( temp highp 3-component vector of float) +0:295 diffuse: direct index for structure ( global highp 3-component vector of float) +0:295 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:295 Constant: +0:295 0 (const int) +0:295 Constant: +0:295 0.000000 +0:295 0.000000 +0:295 0.000000 +0:296 move second child to first child ( temp highp 3-component vector of float) +0:296 specular: direct index for structure ( global highp 3-component vector of float) +0:296 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:296 Constant: +0:296 1 (const int) +0:296 Constant: +0:296 0.000000 +0:296 0.000000 +0:296 0.000000 +0:297 move second child to first child ( temp highp 3-component vector of float) +0:297 specular2: direct index for structure ( global highp 3-component vector of float) +0:297 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:297 Constant: +0:297 2 (const int) +0:297 Constant: +0:297 0.000000 +0:297 0.000000 +0:297 0.000000 +0:298 move second child to first child ( temp highp float) +0:298 shadowStrength: direct index for structure ( global highp float) +0:298 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:298 Constant: +0:298 3 (const int) +0:298 Constant: +0:298 0.000000 +0:299 Branch: Break +0:301 move second child to first child ( temp highp 3-component vector of float) +0:301 'diffuseContrib' ( inout highp 3-component vector of float) +0:301 diffuse: direct index for structure ( global highp 3-component vector of float) +0:301 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:301 Constant: +0:301 0 (const int) +0:302 move second child to first child ( temp highp 3-component vector of float) +0:302 'specularContrib' ( inout highp 3-component vector of float) +0:302 specular: direct index for structure ( global highp 3-component vector of float) +0:302 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:302 Constant: +0:302 1 (const int) +0:305 Function Definition: TDLighting(vf3;vf3;vf3;i1;vf3;vf3;vf3;f1;f1; ( global void) +0:305 Function Parameters: +0:305 'diffuseContrib' ( inout highp 3-component vector of float) +0:305 'specularContrib' ( inout highp 3-component vector of float) +0:305 'specularContrib2' ( inout highp 3-component vector of float) +0:305 'index' ( in highp int) +0:305 'worldSpacePos' ( in highp 3-component vector of float) +0:305 'normal' ( in highp 3-component vector of float) +0:305 'camVector' ( in highp 3-component vector of float) +0:305 'shininess' ( in highp float) +0:305 'shininess2' ( in highp float) +0:? Sequence +0:308 switch +0:308 condition +0:308 'index' ( in highp int) +0:308 body +0:308 Sequence +0:310 default: +0:? Sequence +0:311 move second child to first child ( temp highp 3-component vector of float) +0:311 diffuse: direct index for structure ( global highp 3-component vector of float) +0:311 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:311 Constant: +0:311 0 (const int) +0:311 Constant: +0:311 0.000000 +0:311 0.000000 +0:311 0.000000 +0:312 move second child to first child ( temp highp 3-component vector of float) +0:312 specular: direct index for structure ( global highp 3-component vector of float) +0:312 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:312 Constant: +0:312 1 (const int) +0:312 Constant: +0:312 0.000000 +0:312 0.000000 +0:312 0.000000 +0:313 move second child to first child ( temp highp 3-component vector of float) +0:313 specular2: direct index for structure ( global highp 3-component vector of float) +0:313 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:313 Constant: +0:313 2 (const int) +0:313 Constant: +0:313 0.000000 +0:313 0.000000 +0:313 0.000000 +0:314 move second child to first child ( temp highp float) +0:314 shadowStrength: direct index for structure ( global highp float) +0:314 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:314 Constant: +0:314 3 (const int) +0:314 Constant: +0:314 0.000000 +0:315 Branch: Break +0:317 move second child to first child ( temp highp 3-component vector of float) +0:317 'diffuseContrib' ( inout highp 3-component vector of float) +0:317 diffuse: direct index for structure ( global highp 3-component vector of float) +0:317 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:317 Constant: +0:317 0 (const int) +0:318 move second child to first child ( temp highp 3-component vector of float) +0:318 'specularContrib' ( inout highp 3-component vector of float) +0:318 specular: direct index for structure ( global highp 3-component vector of float) +0:318 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:318 Constant: +0:318 1 (const int) +0:319 move second child to first child ( temp highp 3-component vector of float) +0:319 'specularContrib2' ( inout highp 3-component vector of float) +0:319 specular2: direct index for structure ( global highp 3-component vector of float) +0:319 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:319 Constant: +0:319 2 (const int) +0:322 Function Definition: TDLighting(vf3;vf3;i1;vf3;vf3;vf3;f1; ( global void) +0:322 Function Parameters: +0:322 'diffuseContrib' ( inout highp 3-component vector of float) +0:322 'specularContrib' ( inout highp 3-component vector of float) +0:322 'index' ( in highp int) +0:322 'worldSpacePos' ( in highp 3-component vector of float) +0:322 'normal' ( in highp 3-component vector of float) +0:322 'camVector' ( in highp 3-component vector of float) +0:322 'shininess' ( in highp float) +0:? Sequence +0:325 switch +0:325 condition +0:325 'index' ( in highp int) +0:325 body +0:325 Sequence +0:327 default: +0:? Sequence +0:328 move second child to first child ( temp highp 3-component vector of float) +0:328 diffuse: direct index for structure ( global highp 3-component vector of float) +0:328 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:328 Constant: +0:328 0 (const int) +0:328 Constant: +0:328 0.000000 +0:328 0.000000 +0:328 0.000000 +0:329 move second child to first child ( temp highp 3-component vector of float) +0:329 specular: direct index for structure ( global highp 3-component vector of float) +0:329 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:329 Constant: +0:329 1 (const int) +0:329 Constant: +0:329 0.000000 +0:329 0.000000 +0:329 0.000000 +0:330 move second child to first child ( temp highp 3-component vector of float) +0:330 specular2: direct index for structure ( global highp 3-component vector of float) +0:330 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:330 Constant: +0:330 2 (const int) +0:330 Constant: +0:330 0.000000 +0:330 0.000000 +0:330 0.000000 +0:331 move second child to first child ( temp highp float) +0:331 shadowStrength: direct index for structure ( global highp float) +0:331 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:331 Constant: +0:331 3 (const int) +0:331 Constant: +0:331 0.000000 +0:332 Branch: Break +0:334 move second child to first child ( temp highp 3-component vector of float) +0:334 'diffuseContrib' ( inout highp 3-component vector of float) +0:334 diffuse: direct index for structure ( global highp 3-component vector of float) +0:334 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:334 Constant: +0:334 0 (const int) +0:335 move second child to first child ( temp highp 3-component vector of float) +0:335 'specularContrib' ( inout highp 3-component vector of float) +0:335 specular: direct index for structure ( global highp 3-component vector of float) +0:335 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:335 Constant: +0:335 1 (const int) +0:338 Function Definition: TDLighting(vf3;i1;vf3;vf3; ( global void) +0:338 Function Parameters: +0:338 'diffuseContrib' ( inout highp 3-component vector of float) +0:338 'index' ( in highp int) +0:338 'worldSpacePos' ( in highp 3-component vector of float) +0:338 'normal' ( in highp 3-component vector of float) +0:? Sequence +0:341 switch +0:341 condition +0:341 'index' ( in highp int) +0:341 body +0:341 Sequence +0:343 default: +0:? Sequence +0:344 move second child to first child ( temp highp 3-component vector of float) +0:344 diffuse: direct index for structure ( global highp 3-component vector of float) +0:344 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:344 Constant: +0:344 0 (const int) +0:344 Constant: +0:344 0.000000 +0:344 0.000000 +0:344 0.000000 +0:345 move second child to first child ( temp highp 3-component vector of float) +0:345 specular: direct index for structure ( global highp 3-component vector of float) +0:345 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:345 Constant: +0:345 1 (const int) +0:345 Constant: +0:345 0.000000 +0:345 0.000000 +0:345 0.000000 +0:346 move second child to first child ( temp highp 3-component vector of float) +0:346 specular2: direct index for structure ( global highp 3-component vector of float) +0:346 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:346 Constant: +0:346 2 (const int) +0:346 Constant: +0:346 0.000000 +0:346 0.000000 +0:346 0.000000 +0:347 move second child to first child ( temp highp float) +0:347 shadowStrength: direct index for structure ( global highp float) +0:347 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:347 Constant: +0:347 3 (const int) +0:347 Constant: +0:347 0.000000 +0:348 Branch: Break +0:350 move second child to first child ( temp highp 3-component vector of float) +0:350 'diffuseContrib' ( inout highp 3-component vector of float) +0:350 diffuse: direct index for structure ( global highp 3-component vector of float) +0:350 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:350 Constant: +0:350 0 (const int) +0:353 Function Definition: TDLighting(vf3;i1;vf3;vf3;f1;vf3; ( global void) +0:353 Function Parameters: +0:353 'diffuseContrib' ( inout highp 3-component vector of float) +0:353 'index' ( in highp int) +0:353 'worldSpacePos' ( in highp 3-component vector of float) +0:353 'normal' ( in highp 3-component vector of float) +0:353 'shadowStrength' ( in highp float) +0:353 'shadowColor' ( in highp 3-component vector of float) +0:? Sequence +0:356 switch +0:356 condition +0:356 'index' ( in highp int) +0:356 body +0:356 Sequence +0:358 default: +0:? Sequence +0:359 move second child to first child ( temp highp 3-component vector of float) +0:359 diffuse: direct index for structure ( global highp 3-component vector of float) +0:359 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:359 Constant: +0:359 0 (const int) +0:359 Constant: +0:359 0.000000 +0:359 0.000000 +0:359 0.000000 +0:360 move second child to first child ( temp highp 3-component vector of float) +0:360 specular: direct index for structure ( global highp 3-component vector of float) +0:360 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:360 Constant: +0:360 1 (const int) +0:360 Constant: +0:360 0.000000 +0:360 0.000000 +0:360 0.000000 +0:361 move second child to first child ( temp highp 3-component vector of float) +0:361 specular2: direct index for structure ( global highp 3-component vector of float) +0:361 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:361 Constant: +0:361 2 (const int) +0:361 Constant: +0:361 0.000000 +0:361 0.000000 +0:361 0.000000 +0:362 move second child to first child ( temp highp float) +0:362 shadowStrength: direct index for structure ( global highp float) +0:362 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:362 Constant: +0:362 3 (const int) +0:362 Constant: +0:362 0.000000 +0:363 Branch: Break +0:365 move second child to first child ( temp highp 3-component vector of float) +0:365 'diffuseContrib' ( inout highp 3-component vector of float) +0:365 diffuse: direct index for structure ( global highp 3-component vector of float) +0:365 'res' ( temp structure{ global highp 3-component vector of float diffuse, global highp 3-component vector of float specular, global highp 3-component vector of float specular2, global highp float shadowStrength}) +0:365 Constant: +0:365 0 (const int) +0:367 Function Definition: TDProjMap(i1;vf3;vf4; ( global highp 4-component vector of float) +0:367 Function Parameters: +0:367 'index' ( in highp int) +0:367 'worldSpacePos' ( in highp 3-component vector of float) +0:367 'defaultColor' ( in highp 4-component vector of float) +0:368 Sequence +0:368 switch +0:368 condition +0:368 'index' ( in highp int) +0:368 body +0:368 Sequence +0:370 default: +0:? Sequence +0:370 Branch: Return with expression +0:370 'defaultColor' ( in highp 4-component vector of float) +0:373 Function Definition: TDFog(vf4;vf3;i1; ( global highp 4-component vector of float) +0:373 Function Parameters: +0:373 'color' ( in highp 4-component vector of float) +0:373 'lightingSpacePosition' ( in highp 3-component vector of float) +0:373 'cameraIndex' ( in highp int) +0:374 Sequence +0:374 switch +0:374 condition +0:374 'cameraIndex' ( in highp int) +0:374 body +0:374 Sequence +0:375 default: +0:376 case: with expression +0:376 Constant: +0:376 0 (const int) +0:? Sequence +0:378 Sequence +0:378 Branch: Return with expression +0:378 'color' ( in highp 4-component vector of float) +0:382 Function Definition: TDFog(vf4;vf3; ( global highp 4-component vector of float) +0:382 Function Parameters: +0:382 'color' ( in highp 4-component vector of float) +0:382 'lightingSpacePosition' ( in highp 3-component vector of float) +0:384 Sequence +0:384 Branch: Return with expression +0:384 Function Call: TDFog(vf4;vf3;i1; ( global highp 4-component vector of float) +0:384 'color' ( in highp 4-component vector of float) +0:384 'lightingSpacePosition' ( in highp 3-component vector of float) +0:384 Constant: +0:384 0 (const int) +0:386 Function Definition: TDInstanceTexCoord(i1;vf3; ( global highp 3-component vector of float) +0:386 Function Parameters: +0:386 'index' ( in highp int) +0:386 't' ( in highp 3-component vector of float) +0:? Sequence +0:388 Sequence +0:388 move second child to first child ( temp highp int) +0:388 'coord' ( temp highp int) +0:388 'index' ( in highp int) +0:389 Sequence +0:389 move second child to first child ( temp highp 4-component vector of float) +0:389 'samp' ( temp highp 4-component vector of float) +0:389 textureFetch ( global highp 4-component vector of float) +0:389 'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer) +0:389 'coord' ( temp highp int) +0:390 move second child to first child ( temp highp float) +0:390 direct index ( temp highp float) +0:390 'v' ( temp highp 3-component vector of float) +0:390 Constant: +0:390 0 (const int) +0:390 direct index ( temp highp float) +0:390 't' ( in highp 3-component vector of float) +0:390 Constant: +0:390 0 (const int) +0:391 move second child to first child ( temp highp float) +0:391 direct index ( temp highp float) +0:391 'v' ( temp highp 3-component vector of float) +0:391 Constant: +0:391 1 (const int) +0:391 direct index ( temp highp float) +0:391 't' ( in highp 3-component vector of float) +0:391 Constant: +0:391 1 (const int) +0:392 move second child to first child ( temp highp float) +0:392 direct index ( temp highp float) +0:392 'v' ( temp highp 3-component vector of float) +0:392 Constant: +0:392 2 (const int) +0:392 direct index ( temp highp float) +0:392 'samp' ( temp highp 4-component vector of float) +0:392 Constant: +0:392 0 (const int) +0:393 move second child to first child ( temp highp 3-component vector of float) +0:393 vector swizzle ( temp highp 3-component vector of float) +0:393 't' ( in highp 3-component vector of float) +0:393 Sequence +0:393 Constant: +0:393 0 (const int) +0:393 Constant: +0:393 1 (const int) +0:393 Constant: +0:393 2 (const int) +0:393 vector swizzle ( temp highp 3-component vector of float) +0:393 'v' ( temp highp 3-component vector of float) +0:393 Sequence +0:393 Constant: +0:393 0 (const int) +0:393 Constant: +0:393 1 (const int) +0:393 Constant: +0:393 2 (const int) +0:394 Branch: Return with expression +0:394 't' ( in highp 3-component vector of float) +0:396 Function Definition: TDInstanceActive(i1; ( global bool) +0:396 Function Parameters: +0:396 'index' ( in highp int) +0:397 Sequence +0:397 subtract second child into first child ( temp highp int) +0:397 'index' ( in highp int) +0:397 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:397 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:397 Constant: +0:397 0 (const uint) +0:399 Sequence +0:399 move second child to first child ( temp highp int) +0:399 'coord' ( temp highp int) +0:399 'index' ( in highp int) +0:400 Sequence +0:400 move second child to first child ( temp highp 4-component vector of float) +0:400 'samp' ( temp highp 4-component vector of float) +0:400 textureFetch ( global highp 4-component vector of float) +0:400 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:400 'coord' ( temp highp int) +0:401 move second child to first child ( temp highp float) +0:401 'v' ( temp highp float) +0:401 direct index ( temp highp float) +0:401 'samp' ( temp highp 4-component vector of float) +0:401 Constant: +0:401 0 (const int) +0:402 Branch: Return with expression +0:402 Compare Not Equal ( temp bool) +0:402 'v' ( temp highp float) +0:402 Constant: +0:402 0.000000 +0:404 Function Definition: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float) +0:404 Function Parameters: +0:404 'index' ( in highp int) +0:404 'instanceActive' ( out bool) +0:405 Sequence +0:405 Sequence +0:405 move second child to first child ( temp highp int) +0:405 'origIndex' ( temp highp int) +0:405 'index' ( in highp int) +0:406 subtract second child into first child ( temp highp int) +0:406 'index' ( in highp int) +0:406 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:406 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:406 Constant: +0:406 0 (const uint) +0:408 Sequence +0:408 move second child to first child ( temp highp int) +0:408 'coord' ( temp highp int) +0:408 'index' ( in highp int) +0:409 Sequence +0:409 move second child to first child ( temp highp 4-component vector of float) +0:409 'samp' ( temp highp 4-component vector of float) +0:409 textureFetch ( global highp 4-component vector of float) +0:409 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:409 'coord' ( temp highp int) +0:410 move second child to first child ( temp highp float) +0:410 direct index ( temp highp float) +0:410 'v' ( temp highp 3-component vector of float) +0:410 Constant: +0:410 0 (const int) +0:410 direct index ( temp highp float) +0:410 'samp' ( temp highp 4-component vector of float) +0:410 Constant: +0:410 1 (const int) +0:411 move second child to first child ( temp highp float) +0:411 direct index ( temp highp float) +0:411 'v' ( temp highp 3-component vector of float) +0:411 Constant: +0:411 1 (const int) +0:411 direct index ( temp highp float) +0:411 'samp' ( temp highp 4-component vector of float) +0:411 Constant: +0:411 2 (const int) +0:412 move second child to first child ( temp highp float) +0:412 direct index ( temp highp float) +0:412 'v' ( temp highp 3-component vector of float) +0:412 Constant: +0:412 2 (const int) +0:412 direct index ( temp highp float) +0:412 'samp' ( temp highp 4-component vector of float) +0:412 Constant: +0:412 3 (const int) +0:413 move second child to first child ( temp bool) +0:413 'instanceActive' ( out bool) +0:413 Compare Not Equal ( temp bool) +0:413 direct index ( temp highp float) +0:413 'samp' ( temp highp 4-component vector of float) +0:413 Constant: +0:413 0 (const int) +0:413 Constant: +0:413 0.000000 +0:414 Branch: Return with expression +0:414 'v' ( temp highp 3-component vector of float) +0:416 Function Definition: TDInstanceTranslate(i1; ( global highp 3-component vector of float) +0:416 Function Parameters: +0:416 'index' ( in highp int) +0:417 Sequence +0:417 subtract second child into first child ( temp highp int) +0:417 'index' ( in highp int) +0:417 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:417 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:417 Constant: +0:417 0 (const uint) +0:419 Sequence +0:419 move second child to first child ( temp highp int) +0:419 'coord' ( temp highp int) +0:419 'index' ( in highp int) +0:420 Sequence +0:420 move second child to first child ( temp highp 4-component vector of float) +0:420 'samp' ( temp highp 4-component vector of float) +0:420 textureFetch ( global highp 4-component vector of float) +0:420 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:420 'coord' ( temp highp int) +0:421 move second child to first child ( temp highp float) +0:421 direct index ( temp highp float) +0:421 'v' ( temp highp 3-component vector of float) +0:421 Constant: +0:421 0 (const int) +0:421 direct index ( temp highp float) +0:421 'samp' ( temp highp 4-component vector of float) +0:421 Constant: +0:421 1 (const int) +0:422 move second child to first child ( temp highp float) +0:422 direct index ( temp highp float) +0:422 'v' ( temp highp 3-component vector of float) +0:422 Constant: +0:422 1 (const int) +0:422 direct index ( temp highp float) +0:422 'samp' ( temp highp 4-component vector of float) +0:422 Constant: +0:422 2 (const int) +0:423 move second child to first child ( temp highp float) +0:423 direct index ( temp highp float) +0:423 'v' ( temp highp 3-component vector of float) +0:423 Constant: +0:423 2 (const int) +0:423 direct index ( temp highp float) +0:423 'samp' ( temp highp 4-component vector of float) +0:423 Constant: +0:423 3 (const int) +0:424 Branch: Return with expression +0:424 'v' ( temp highp 3-component vector of float) +0:426 Function Definition: TDInstanceRotateMat(i1; ( global highp 3X3 matrix of float) +0:426 Function Parameters: +0:426 'index' ( in highp int) +0:427 Sequence +0:427 subtract second child into first child ( temp highp int) +0:427 'index' ( in highp int) +0:427 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:427 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:427 Constant: +0:427 0 (const uint) +0:428 Sequence +0:428 move second child to first child ( temp highp 3-component vector of float) +0:428 'v' ( temp highp 3-component vector of float) +0:428 Constant: +0:428 0.000000 +0:428 0.000000 +0:428 0.000000 +0:429 Sequence +0:429 move second child to first child ( temp highp 3X3 matrix of float) +0:429 'm' ( temp highp 3X3 matrix of float) +0:429 Constant: +0:429 1.000000 +0:429 0.000000 +0:429 0.000000 +0:429 0.000000 +0:429 1.000000 +0:429 0.000000 +0:429 0.000000 +0:429 0.000000 +0:429 1.000000 +0:433 Branch: Return with expression +0:433 'm' ( temp highp 3X3 matrix of float) +0:435 Function Definition: TDInstanceScale(i1; ( global highp 3-component vector of float) +0:435 Function Parameters: +0:435 'index' ( in highp int) +0:436 Sequence +0:436 subtract second child into first child ( temp highp int) +0:436 'index' ( in highp int) +0:436 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:436 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:436 Constant: +0:436 0 (const uint) +0:437 Sequence +0:437 move second child to first child ( temp highp 3-component vector of float) +0:437 'v' ( temp highp 3-component vector of float) +0:437 Constant: +0:437 1.000000 +0:437 1.000000 +0:437 1.000000 +0:438 Branch: Return with expression +0:438 'v' ( temp highp 3-component vector of float) +0:440 Function Definition: TDInstancePivot(i1; ( global highp 3-component vector of float) +0:440 Function Parameters: +0:440 'index' ( in highp int) +0:441 Sequence +0:441 subtract second child into first child ( temp highp int) +0:441 'index' ( in highp int) +0:441 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:441 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:441 Constant: +0:441 0 (const uint) +0:442 Sequence +0:442 move second child to first child ( temp highp 3-component vector of float) +0:442 'v' ( temp highp 3-component vector of float) +0:442 Constant: +0:442 0.000000 +0:442 0.000000 +0:442 0.000000 +0:443 Branch: Return with expression +0:443 'v' ( temp highp 3-component vector of float) +0:445 Function Definition: TDInstanceRotTo(i1; ( global highp 3-component vector of float) +0:445 Function Parameters: +0:445 'index' ( in highp int) +0:446 Sequence +0:446 subtract second child into first child ( temp highp int) +0:446 'index' ( in highp int) +0:446 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:446 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:446 Constant: +0:446 0 (const uint) +0:447 Sequence +0:447 move second child to first child ( temp highp 3-component vector of float) +0:447 'v' ( temp highp 3-component vector of float) +0:447 Constant: +0:447 0.000000 +0:447 0.000000 +0:447 1.000000 +0:448 Branch: Return with expression +0:448 'v' ( temp highp 3-component vector of float) +0:450 Function Definition: TDInstanceRotUp(i1; ( global highp 3-component vector of float) +0:450 Function Parameters: +0:450 'index' ( in highp int) +0:451 Sequence +0:451 subtract second child into first child ( temp highp int) +0:451 'index' ( in highp int) +0:451 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:451 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:451 Constant: +0:451 0 (const uint) +0:452 Sequence +0:452 move second child to first child ( temp highp 3-component vector of float) +0:452 'v' ( temp highp 3-component vector of float) +0:452 Constant: +0:452 0.000000 +0:452 1.000000 +0:452 0.000000 +0:453 Branch: Return with expression +0:453 'v' ( temp highp 3-component vector of float) +0:455 Function Definition: TDInstanceMat(i1; ( global highp 4X4 matrix of float) +0:455 Function Parameters: +0:455 'id' ( in highp int) +0:456 Sequence +0:456 Sequence +0:456 move second child to first child ( temp bool) +0:456 'instanceActive' ( temp bool) +0:456 Constant: +0:456 true (const bool) +0:457 Sequence +0:457 move second child to first child ( temp highp 3-component vector of float) +0:457 't' ( temp highp 3-component vector of float) +0:457 Function Call: iTDInstanceTranslate(i1;b1; ( global highp 3-component vector of float) +0:457 'id' ( in highp int) +0:457 'instanceActive' ( temp bool) +0:458 Test condition and select ( temp void) +0:458 Condition +0:458 Negate conditional ( temp bool) +0:458 'instanceActive' ( temp bool) +0:458 true case +0:460 Sequence +0:460 Branch: Return with expression +0:460 Constant: +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:460 0.000000 +0:462 Sequence +0:462 move second child to first child ( temp highp 4X4 matrix of float) +0:462 'm' ( temp highp 4X4 matrix of float) +0:462 Constant: +0:462 1.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 1.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 1.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 0.000000 +0:462 1.000000 +0:464 Sequence +0:464 Sequence +0:464 move second child to first child ( temp highp 3-component vector of float) +0:464 'tt' ( temp highp 3-component vector of float) +0:464 't' ( temp highp 3-component vector of float) +0:465 add second child into first child ( temp highp float) +0:465 direct index ( temp highp float) +0:465 direct index ( temp highp 4-component vector of float) +0:465 'm' ( temp highp 4X4 matrix of float) +0:465 Constant: +0:465 3 (const int) +0:465 Constant: +0:465 0 (const int) +0:465 component-wise multiply ( temp highp float) +0:465 direct index ( temp highp float) +0:465 direct index ( temp highp 4-component vector of float) +0:465 'm' ( temp highp 4X4 matrix of float) +0:465 Constant: +0:465 0 (const int) +0:465 Constant: +0:465 0 (const int) +0:465 direct index ( temp highp float) +0:465 'tt' ( temp highp 3-component vector of float) +0:465 Constant: +0:465 0 (const int) +0:466 add second child into first child ( temp highp float) +0:466 direct index ( temp highp float) +0:466 direct index ( temp highp 4-component vector of float) +0:466 'm' ( temp highp 4X4 matrix of float) +0:466 Constant: +0:466 3 (const int) +0:466 Constant: +0:466 1 (const int) +0:466 component-wise multiply ( temp highp float) +0:466 direct index ( temp highp float) +0:466 direct index ( temp highp 4-component vector of float) +0:466 'm' ( temp highp 4X4 matrix of float) +0:466 Constant: +0:466 0 (const int) +0:466 Constant: +0:466 1 (const int) +0:466 direct index ( temp highp float) +0:466 'tt' ( temp highp 3-component vector of float) +0:466 Constant: +0:466 0 (const int) +0:467 add second child into first child ( temp highp float) +0:467 direct index ( temp highp float) +0:467 direct index ( temp highp 4-component vector of float) +0:467 'm' ( temp highp 4X4 matrix of float) +0:467 Constant: +0:467 3 (const int) +0:467 Constant: +0:467 2 (const int) +0:467 component-wise multiply ( temp highp float) +0:467 direct index ( temp highp float) +0:467 direct index ( temp highp 4-component vector of float) +0:467 'm' ( temp highp 4X4 matrix of float) +0:467 Constant: +0:467 0 (const int) +0:467 Constant: +0:467 2 (const int) +0:467 direct index ( temp highp float) +0:467 'tt' ( temp highp 3-component vector of float) +0:467 Constant: +0:467 0 (const int) +0:468 add second child into first child ( temp highp float) +0:468 direct index ( temp highp float) +0:468 direct index ( temp highp 4-component vector of float) +0:468 'm' ( temp highp 4X4 matrix of float) +0:468 Constant: +0:468 3 (const int) +0:468 Constant: +0:468 3 (const int) +0:468 component-wise multiply ( temp highp float) +0:468 direct index ( temp highp float) +0:468 direct index ( temp highp 4-component vector of float) +0:468 'm' ( temp highp 4X4 matrix of float) +0:468 Constant: +0:468 0 (const int) +0:468 Constant: +0:468 3 (const int) +0:468 direct index ( temp highp float) +0:468 'tt' ( temp highp 3-component vector of float) +0:468 Constant: +0:468 0 (const int) +0:469 add second child into first child ( temp highp float) +0:469 direct index ( temp highp float) +0:469 direct index ( temp highp 4-component vector of float) +0:469 'm' ( temp highp 4X4 matrix of float) +0:469 Constant: +0:469 3 (const int) +0:469 Constant: +0:469 0 (const int) +0:469 component-wise multiply ( temp highp float) +0:469 direct index ( temp highp float) +0:469 direct index ( temp highp 4-component vector of float) +0:469 'm' ( temp highp 4X4 matrix of float) +0:469 Constant: +0:469 1 (const int) +0:469 Constant: +0:469 0 (const int) +0:469 direct index ( temp highp float) +0:469 'tt' ( temp highp 3-component vector of float) +0:469 Constant: +0:469 1 (const int) +0:470 add second child into first child ( temp highp float) +0:470 direct index ( temp highp float) +0:470 direct index ( temp highp 4-component vector of float) +0:470 'm' ( temp highp 4X4 matrix of float) +0:470 Constant: +0:470 3 (const int) +0:470 Constant: +0:470 1 (const int) +0:470 component-wise multiply ( temp highp float) +0:470 direct index ( temp highp float) +0:470 direct index ( temp highp 4-component vector of float) +0:470 'm' ( temp highp 4X4 matrix of float) +0:470 Constant: +0:470 1 (const int) +0:470 Constant: +0:470 1 (const int) +0:470 direct index ( temp highp float) +0:470 'tt' ( temp highp 3-component vector of float) +0:470 Constant: +0:470 1 (const int) +0:471 add second child into first child ( temp highp float) +0:471 direct index ( temp highp float) +0:471 direct index ( temp highp 4-component vector of float) +0:471 'm' ( temp highp 4X4 matrix of float) +0:471 Constant: +0:471 3 (const int) +0:471 Constant: +0:471 2 (const int) +0:471 component-wise multiply ( temp highp float) +0:471 direct index ( temp highp float) +0:471 direct index ( temp highp 4-component vector of float) +0:471 'm' ( temp highp 4X4 matrix of float) +0:471 Constant: +0:471 1 (const int) +0:471 Constant: +0:471 2 (const int) +0:471 direct index ( temp highp float) +0:471 'tt' ( temp highp 3-component vector of float) +0:471 Constant: +0:471 1 (const int) +0:472 add second child into first child ( temp highp float) +0:472 direct index ( temp highp float) +0:472 direct index ( temp highp 4-component vector of float) +0:472 'm' ( temp highp 4X4 matrix of float) +0:472 Constant: +0:472 3 (const int) +0:472 Constant: +0:472 3 (const int) +0:472 component-wise multiply ( temp highp float) +0:472 direct index ( temp highp float) +0:472 direct index ( temp highp 4-component vector of float) +0:472 'm' ( temp highp 4X4 matrix of float) +0:472 Constant: +0:472 1 (const int) +0:472 Constant: +0:472 3 (const int) +0:472 direct index ( temp highp float) +0:472 'tt' ( temp highp 3-component vector of float) +0:472 Constant: +0:472 1 (const int) +0:473 add second child into first child ( temp highp float) +0:473 direct index ( temp highp float) +0:473 direct index ( temp highp 4-component vector of float) +0:473 'm' ( temp highp 4X4 matrix of float) +0:473 Constant: +0:473 3 (const int) +0:473 Constant: +0:473 0 (const int) +0:473 component-wise multiply ( temp highp float) +0:473 direct index ( temp highp float) +0:473 direct index ( temp highp 4-component vector of float) +0:473 'm' ( temp highp 4X4 matrix of float) +0:473 Constant: +0:473 2 (const int) +0:473 Constant: +0:473 0 (const int) +0:473 direct index ( temp highp float) +0:473 'tt' ( temp highp 3-component vector of float) +0:473 Constant: +0:473 2 (const int) +0:474 add second child into first child ( temp highp float) +0:474 direct index ( temp highp float) +0:474 direct index ( temp highp 4-component vector of float) +0:474 'm' ( temp highp 4X4 matrix of float) +0:474 Constant: +0:474 3 (const int) +0:474 Constant: +0:474 1 (const int) +0:474 component-wise multiply ( temp highp float) +0:474 direct index ( temp highp float) +0:474 direct index ( temp highp 4-component vector of float) +0:474 'm' ( temp highp 4X4 matrix of float) +0:474 Constant: +0:474 2 (const int) +0:474 Constant: +0:474 1 (const int) +0:474 direct index ( temp highp float) +0:474 'tt' ( temp highp 3-component vector of float) +0:474 Constant: +0:474 2 (const int) +0:475 add second child into first child ( temp highp float) +0:475 direct index ( temp highp float) +0:475 direct index ( temp highp 4-component vector of float) +0:475 'm' ( temp highp 4X4 matrix of float) +0:475 Constant: +0:475 3 (const int) +0:475 Constant: +0:475 2 (const int) +0:475 component-wise multiply ( temp highp float) +0:475 direct index ( temp highp float) +0:475 direct index ( temp highp 4-component vector of float) +0:475 'm' ( temp highp 4X4 matrix of float) +0:475 Constant: +0:475 2 (const int) +0:475 Constant: +0:475 2 (const int) +0:475 direct index ( temp highp float) +0:475 'tt' ( temp highp 3-component vector of float) +0:475 Constant: +0:475 2 (const int) +0:476 add second child into first child ( temp highp float) +0:476 direct index ( temp highp float) +0:476 direct index ( temp highp 4-component vector of float) +0:476 'm' ( temp highp 4X4 matrix of float) +0:476 Constant: +0:476 3 (const int) +0:476 Constant: +0:476 3 (const int) +0:476 component-wise multiply ( temp highp float) +0:476 direct index ( temp highp float) +0:476 direct index ( temp highp 4-component vector of float) +0:476 'm' ( temp highp 4X4 matrix of float) +0:476 Constant: +0:476 2 (const int) +0:476 Constant: +0:476 3 (const int) +0:476 direct index ( temp highp float) +0:476 'tt' ( temp highp 3-component vector of float) +0:476 Constant: +0:476 2 (const int) +0:478 Branch: Return with expression +0:478 'm' ( temp highp 4X4 matrix of float) +0:480 Function Definition: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:480 Function Parameters: +0:480 'id' ( in highp int) +0:481 Sequence +0:481 Sequence +0:481 move second child to first child ( temp highp 3X3 matrix of float) +0:481 'm' ( temp highp 3X3 matrix of float) +0:481 Constant: +0:481 1.000000 +0:481 0.000000 +0:481 0.000000 +0:481 0.000000 +0:481 1.000000 +0:481 0.000000 +0:481 0.000000 +0:481 0.000000 +0:481 1.000000 +0:482 Branch: Return with expression +0:482 'm' ( temp highp 3X3 matrix of float) +0:484 Function Definition: TDInstanceMat3ForNorm(i1; ( global highp 3X3 matrix of float) +0:484 Function Parameters: +0:484 'id' ( in highp int) +0:485 Sequence +0:485 Sequence +0:485 move second child to first child ( temp highp 3X3 matrix of float) +0:485 'm' ( temp highp 3X3 matrix of float) +0:485 Function Call: TDInstanceMat3(i1; ( global highp 3X3 matrix of float) +0:485 'id' ( in highp int) +0:486 Branch: Return with expression +0:486 'm' ( temp highp 3X3 matrix of float) +0:488 Function Definition: TDInstanceColor(i1;vf4; ( global highp 4-component vector of float) +0:488 Function Parameters: +0:488 'index' ( in highp int) +0:488 'curColor' ( in highp 4-component vector of float) +0:489 Sequence +0:489 subtract second child into first child ( temp highp int) +0:489 'index' ( in highp int) +0:489 uTDInstanceIDOffset: direct index for structure ( uniform highp int) +0:489 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:489 Constant: +0:489 0 (const uint) +0:491 Sequence +0:491 move second child to first child ( temp highp int) +0:491 'coord' ( temp highp int) +0:491 'index' ( in highp int) +0:492 Sequence +0:492 move second child to first child ( temp highp 4-component vector of float) +0:492 'samp' ( temp highp 4-component vector of float) +0:492 textureFetch ( global highp 4-component vector of float) +0:492 'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer) +0:492 'coord' ( temp highp int) +0:493 move second child to first child ( temp highp float) +0:493 direct index ( temp highp float) +0:493 'v' ( temp highp 4-component vector of float) +0:493 Constant: +0:493 0 (const int) +0:493 direct index ( temp highp float) +0:493 'samp' ( temp highp 4-component vector of float) +0:493 Constant: +0:493 0 (const int) +0:494 move second child to first child ( temp highp float) +0:494 direct index ( temp highp float) +0:494 'v' ( temp highp 4-component vector of float) +0:494 Constant: +0:494 1 (const int) +0:494 direct index ( temp highp float) +0:494 'samp' ( temp highp 4-component vector of float) +0:494 Constant: +0:494 1 (const int) +0:495 move second child to first child ( temp highp float) +0:495 direct index ( temp highp float) +0:495 'v' ( temp highp 4-component vector of float) +0:495 Constant: +0:495 2 (const int) +0:495 direct index ( temp highp float) +0:495 'samp' ( temp highp 4-component vector of float) +0:495 Constant: +0:495 2 (const int) +0:496 move second child to first child ( temp highp float) +0:496 direct index ( temp highp float) +0:496 'v' ( temp highp 4-component vector of float) +0:496 Constant: +0:496 3 (const int) +0:496 Constant: +0:496 1.000000 +0:497 move second child to first child ( temp highp float) +0:497 direct index ( temp highp float) +0:497 'curColor' ( in highp 4-component vector of float) +0:497 Constant: +0:497 0 (const int) +0:497 direct index ( temp highp float) +0:497 'v' ( temp highp 4-component vector of float) +0:497 Constant: +0:497 0 (const int) +0:499 move second child to first child ( temp highp float) +0:499 direct index ( temp highp float) +0:499 'curColor' ( in highp 4-component vector of float) +0:499 Constant: +0:499 1 (const int) +0:499 direct index ( temp highp float) +0:499 'v' ( temp highp 4-component vector of float) +0:499 Constant: +0:499 1 (const int) +0:501 move second child to first child ( temp highp float) +0:501 direct index ( temp highp float) +0:501 'curColor' ( in highp 4-component vector of float) +0:501 Constant: +0:501 2 (const int) +0:501 direct index ( temp highp float) +0:501 'v' ( temp highp 4-component vector of float) +0:501 Constant: +0:501 2 (const int) +0:503 Branch: Return with expression +0:503 'curColor' ( in highp 4-component vector of float) +0:2 Function Definition: TDOutputSwizzle(vf4; ( global highp 4-component vector of float) +0:2 Function Parameters: +0:2 'c' ( in highp 4-component vector of float) +0:4 Sequence +0:4 Branch: Return with expression +0:4 vector swizzle ( temp highp 4-component vector of float) +0:4 'c' ( in highp 4-component vector of float) +0:4 Sequence +0:4 Constant: +0:4 0 (const int) +0:4 Constant: +0:4 1 (const int) +0:4 Constant: +0:4 2 (const int) +0:4 Constant: +0:4 3 (const int) +0:6 Function Definition: TDOutputSwizzle(vu4; ( global highp 4-component vector of uint) +0:6 Function Parameters: +0:6 'c' ( in highp 4-component vector of uint) +0:8 Sequence +0:8 Branch: Return with expression +0:8 vector swizzle ( temp highp 4-component vector of uint) +0:8 'c' ( in highp 4-component vector of uint) +0:8 Sequence +0:8 Constant: +0:8 0 (const int) +0:8 Constant: +0:8 1 (const int) +0:8 Constant: +0:8 2 (const int) +0:8 Constant: +0:8 3 (const int) +0:? Linker Objects +0:? 'anon@0' (layout( column_major std140) uniform block{ uniform highp int uTDInstanceIDOffset, uniform highp int uTDNumInstances, uniform highp float uTDAlphaTestVal, uniform highp 3-component vector of float uConstant, uniform highp float uShadowStrength, uniform highp 3-component vector of float uShadowColor, uniform highp 4-component vector of float uDiffuseColor, uniform highp 4-component vector of float uAmbientColor}) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{layout( column_major std140) global highp 4X4 matrix of float world, layout( column_major std140) global highp 4X4 matrix of float worldInverse, layout( column_major std140) global highp 4X4 matrix of float worldCam, layout( column_major std140) global highp 4X4 matrix of float worldCamInverse, layout( column_major std140) global highp 4X4 matrix of float cam, layout( column_major std140) global highp 4X4 matrix of float camInverse, layout( column_major std140) global highp 4X4 matrix of float camProj, layout( column_major std140) global highp 4X4 matrix of float camProjInverse, layout( column_major std140) global highp 4X4 matrix of float proj, layout( column_major std140) global highp 4X4 matrix of float projInverse, layout( column_major std140) global highp 4X4 matrix of float worldCamProj, layout( column_major std140) global highp 4X4 matrix of float worldCamProjInverse, layout( column_major std140) global highp 4X4 matrix of float quadReproject, layout( column_major std140) global highp 3X3 matrix of float worldForNormals, layout( column_major std140) global highp 3X3 matrix of float camForNormals, layout( column_major std140) global highp 3X3 matrix of float worldCamForNormals} uTDMats}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float nearFar, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor, global highp int renderTOPCameraIndex} uTDCamInfos}) +0:? 'anon@3' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform structure{ global highp 4-component vector of float ambientColor, global highp 4-component vector of float nearFar, global highp 4-component vector of float viewport, global highp 4-component vector of float viewportRes, global highp 4-component vector of float fog, global highp 4-component vector of float fogColor} uTDGeneral}) +0:? 'sColorMap' ( uniform highp sampler2DArray) +0:? 'iVert' ( in block{ in highp 4-component vector of float color, in highp 3-component vector of float worldSpacePos, in highp 3-component vector of float texCoord0, flat in highp int cameraIndex, flat in highp int instance}) +0:? 'oFragColor' (layout( location=0) out 1-element array of highp 4-component vector of float) +0:? 'sTDNoiseMap' ( uniform highp sampler2D) +0:? 'sTDSineLookup' ( uniform highp sampler1D) +0:? 'sTDWhite2D' ( uniform highp sampler2D) +0:? 'sTDWhite3D' ( uniform highp sampler3D) +0:? 'sTDWhite2DArray' ( uniform highp sampler2DArray) +0:? 'sTDWhiteCube' ( uniform highp samplerCube) +0:? 'anon@1' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 4-component vector of float position, global highp 3-component vector of float direction, global highp 3-component vector of float diffuse, global highp 4-component vector of float nearFar, global highp 4-component vector of float lightSize, global highp 4-component vector of float misc, global highp 4-component vector of float coneLookupScaleBias, global highp 4-component vector of float attenScaleBiasRoll, layout( column_major std140) global highp 4X4 matrix of float shadowMapMatrix, layout( column_major std140) global highp 4X4 matrix of float shadowMapCamMatrix, global highp 4-component vector of float shadowMapRes, layout( column_major std140) global highp 4X4 matrix of float projMapMatrix} uTDLights}) +0:? 'anon@2' (layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 1-element array of structure{ global highp 3-component vector of float color, layout( column_major std140) global highp 3X3 matrix of float rotate} uTDEnvLights}) +0:? 'uTDEnvLightBuffers' (layout( column_major std430) restrict readonly buffer 1-element array of block{layout( column_major std430 offset=0) restrict readonly buffer 9-element array of highp 3-component vector of float shCoeffs}) +0:? 'sTDInstanceT' (layout( binding=15) uniform highp samplerBuffer) +0:? 'sTDInstanceTexCoord' (layout( binding=16) uniform highp samplerBuffer) +0:? 'sTDInstanceColor' (layout( binding=17) uniform highp samplerBuffer) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 939 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 207 216 226 238 256 297 905 906 + Source GLSL 460 + Name 4 "main" + Name 20 "iTDCamToProj(vf4;vf3;i1;b1;" + Name 16 "v" + Name 17 "uv" + Name 18 "cameraIndex" + Name 19 "applyPickMod" + Name 26 "iTDWorldToProj(vf4;vf3;i1;b1;" + Name 22 "v" + Name 23 "uv" + Name 24 "cameraIndex" + Name 25 "applyPickMod" + Name 29 "TDInstanceID(" + Name 31 "TDCameraIndex(" + Name 34 "TDUVUnwrapCoord(" + Name 36 "TDPickID(" + Name 40 "iTDConvertPickId(i1;" + Name 39 "id" + Name 42 "TDWritePickingValues(" + Name 47 "TDWorldToProj(vf4;vf3;" + Name 45 "v" + Name 46 "uv" + Name 52 "TDWorldToProj(vf3;vf3;" + Name 50 "v" + Name 51 "uv" + Name 56 "TDWorldToProj(vf4;" + Name 55 "v" + Name 60 "TDWorldToProj(vf3;" + Name 59 "v" + Name 63 "TDPointColor(" + Name 68 "TDInstanceTexCoord(i1;vf3;" + Name 66 "index" + Name 67 "t" + Name 72 "TDInstanceActive(i1;" + Name 71 "index" + Name 77 "iTDInstanceTranslate(i1;b1;" + Name 75 "index" + Name 76 "instanceActive" + Name 81 "TDInstanceTranslate(i1;" + Name 80 "index" + Name 86 "TDInstanceRotateMat(i1;" + Name 85 "index" + Name 89 "TDInstanceScale(i1;" + Name 88 "index" + Name 92 "TDInstancePivot(i1;" + Name 91 "index" + Name 95 "TDInstanceRotTo(i1;" + Name 94 "index" + Name 98 "TDInstanceRotUp(i1;" + Name 97 "index" + Name 103 "TDInstanceMat(i1;" + Name 102 "id" + Name 106 "TDInstanceMat3(i1;" + Name 105 "id" + Name 109 "TDInstanceMat3ForNorm(i1;" + Name 108 "id" + Name 114 "TDInstanceColor(i1;vf4;" + Name 112 "index" + Name 113 "curColor" + Name 118 "TDInstanceDeform(i1;vf4;" + Name 116 "id" + Name 117 "pos" + Name 122 "TDInstanceDeformVec(i1;vf3;" + Name 120 "id" + Name 121 "vec" + Name 126 "TDInstanceDeformNorm(i1;vf3;" + Name 124 "id" + Name 125 "vec" + Name 129 "TDInstanceDeform(vf4;" + Name 128 "pos" + Name 133 "TDInstanceDeformVec(vf3;" + Name 132 "vec" + Name 136 "TDInstanceDeformNorm(vf3;" + Name 135 "vec" + Name 139 "TDInstanceActive(" + Name 141 "TDInstanceTranslate(" + Name 144 "TDInstanceRotateMat(" + Name 146 "TDInstanceScale(" + Name 149 "TDInstanceMat(" + Name 151 "TDInstanceMat3(" + Name 154 "TDInstanceTexCoord(vf3;" + Name 153 "t" + Name 157 "TDInstanceColor(vf4;" + Name 156 "curColor" + Name 160 "TDSkinnedDeform(vf4;" + Name 159 "pos" + Name 163 "TDSkinnedDeformVec(vf3;" + Name 162 "vec" + Name 169 "TDFastDeformTangent(vf3;vf4;vf3;" + Name 166 "oldNorm" + Name 167 "oldTangent" + Name 168 "deformedNorm" + Name 172 "TDBoneMat(i1;" + Name 171 "index" + Name 175 "TDDeform(vf4;" + Name 174 "pos" + Name 180 "TDDeform(i1;vf3;" + Name 178 "instanceID" + Name 179 "p" + Name 183 "TDDeform(vf3;" + Name 182 "pos" + Name 187 "TDDeformVec(i1;vf3;" + Name 185 "instanceID" + Name 186 "vec" + Name 190 "TDDeformVec(vf3;" + Name 189 "vec" + Name 194 "TDDeformNorm(i1;vf3;" + Name 192 "instanceID" + Name 193 "vec" + Name 197 "TDDeformNorm(vf3;" + Name 196 "vec" + Name 200 "TDSkinnedDeformNorm(vf3;" + Name 199 "vec" + Name 202 "texcoord" + Name 207 "uv" + Name 209 "param" + Name 214 "Vertex" + MemberName 214(Vertex) 0 "color" + MemberName 214(Vertex) 1 "worldSpacePos" + MemberName 214(Vertex) 2 "texCoord0" + MemberName 214(Vertex) 3 "cameraIndex" + MemberName 214(Vertex) 4 "instance" + Name 216 "oVert" + Name 225 "worldSpacePos" + Name 226 "P" + Name 227 "param" + Name 230 "uvUnwrapCoord" + Name 232 "param" + Name 236 "gl_PerVertex" + MemberName 236(gl_PerVertex) 0 "gl_Position" + MemberName 236(gl_PerVertex) 1 "gl_PointSize" + MemberName 236(gl_PerVertex) 2 "gl_ClipDistance" + MemberName 236(gl_PerVertex) 3 "gl_CullDistance" + Name 238 "" + Name 239 "param" + Name 241 "param" + Name 246 "cameraIndex" + Name 256 "Cd" + Name 257 "param" + Name 269 "TDMatrix" + MemberName 269(TDMatrix) 0 "world" + MemberName 269(TDMatrix) 1 "worldInverse" + MemberName 269(TDMatrix) 2 "worldCam" + MemberName 269(TDMatrix) 3 "worldCamInverse" + MemberName 269(TDMatrix) 4 "cam" + MemberName 269(TDMatrix) 5 "camInverse" + MemberName 269(TDMatrix) 6 "camProj" + MemberName 269(TDMatrix) 7 "camProjInverse" + MemberName 269(TDMatrix) 8 "proj" + MemberName 269(TDMatrix) 9 "projInverse" + MemberName 269(TDMatrix) 10 "worldCamProj" + MemberName 269(TDMatrix) 11 "worldCamProjInverse" + MemberName 269(TDMatrix) 12 "quadReproject" + MemberName 269(TDMatrix) 13 "worldForNormals" + MemberName 269(TDMatrix) 14 "camForNormals" + MemberName 269(TDMatrix) 15 "worldCamForNormals" + Name 271 "TDMatricesBlock" + MemberName 271(TDMatricesBlock) 0 "uTDMats" + Name 273 "" + Name 297 "gl_InstanceIndex" + Name 299 "gl_DefaultUniformBlock" + MemberName 299(gl_DefaultUniformBlock) 0 "uTDInstanceIDOffset" + MemberName 299(gl_DefaultUniformBlock) 1 "uTDNumInstances" + MemberName 299(gl_DefaultUniformBlock) 2 "uTDAlphaTestVal" + MemberName 299(gl_DefaultUniformBlock) 3 "uConstant" + MemberName 299(gl_DefaultUniformBlock) 4 "uShadowStrength" + MemberName 299(gl_DefaultUniformBlock) 5 "uShadowColor" + MemberName 299(gl_DefaultUniformBlock) 6 "uDiffuseColor" + MemberName 299(gl_DefaultUniformBlock) 7 "uAmbientColor" + Name 301 "" + Name 325 "param" + Name 327 "param" + Name 329 "param" + Name 330 "param" + Name 340 "param" + Name 341 "param" + Name 347 "param" + Name 349 "param" + Name 358 "param" + Name 365 "coord" + Name 367 "samp" + Name 371 "sTDInstanceTexCoord" + Name 376 "v" + Name 397 "coord" + Name 399 "samp" + Name 400 "sTDInstanceT" + Name 405 "v" + Name 412 "origIndex" + Name 418 "coord" + Name 420 "samp" + Name 425 "v" + Name 446 "coord" + Name 448 "samp" + Name 453 "v" + Name 470 "v" + Name 472 "m" + Name 484 "v" + Name 493 "v" + Name 501 "v" + Name 509 "v" + Name 513 "instanceActive" + Name 514 "t" + Name 515 "param" + Name 517 "param" + Name 528 "m" + Name 534 "tt" + Name 647 "m" + Name 651 "m" + Name 652 "param" + Name 662 "coord" + Name 664 "samp" + Name 665 "sTDInstanceColor" + Name 670 "v" + Name 693 "param" + Name 705 "m" + Name 706 "param" + Name 725 "m" + Name 726 "param" + Name 745 "param" + Name 746 "param" + Name 752 "param" + Name 753 "param" + Name 759 "param" + Name 760 "param" + Name 766 "param" + Name 771 "param" + Name 776 "param" + Name 781 "param" + Name 786 "param" + Name 791 "param" + Name 796 "param" + Name 797 "param" + Name 803 "param" + Name 804 "param" + Name 821 "param" + Name 824 "param" + Name 830 "pos" + Name 836 "param" + Name 839 "param" + Name 841 "param" + Name 848 "param" + Name 849 "param" + Name 854 "param" + Name 857 "param" + Name 859 "param" + Name 866 "param" + Name 867 "param" + Name 872 "param" + Name 875 "param" + Name 877 "param" + Name 884 "param" + Name 885 "param" + Name 890 "param" + Name 896 "TDCameraInfo" + MemberName 896(TDCameraInfo) 0 "nearFar" + MemberName 896(TDCameraInfo) 1 "fog" + MemberName 896(TDCameraInfo) 2 "fogColor" + MemberName 896(TDCameraInfo) 3 "renderTOPCameraIndex" + Name 898 "TDCameraInfoBlock" + MemberName 898(TDCameraInfoBlock) 0 "uTDCamInfos" + Name 900 "" + Name 901 "TDGeneral" + MemberName 901(TDGeneral) 0 "ambientColor" + MemberName 901(TDGeneral) 1 "nearFar" + MemberName 901(TDGeneral) 2 "viewport" + MemberName 901(TDGeneral) 3 "viewportRes" + MemberName 901(TDGeneral) 4 "fog" + MemberName 901(TDGeneral) 5 "fogColor" + Name 902 "TDGeneralBlock" + MemberName 902(TDGeneralBlock) 0 "uTDGeneral" + Name 904 "" + Name 905 "N" + Name 906 "gl_VertexIndex" + Name 907 "TDLight" + MemberName 907(TDLight) 0 "position" + MemberName 907(TDLight) 1 "direction" + MemberName 907(TDLight) 2 "diffuse" + MemberName 907(TDLight) 3 "nearFar" + MemberName 907(TDLight) 4 "lightSize" + MemberName 907(TDLight) 5 "misc" + MemberName 907(TDLight) 6 "coneLookupScaleBias" + MemberName 907(TDLight) 7 "attenScaleBiasRoll" + MemberName 907(TDLight) 8 "shadowMapMatrix" + MemberName 907(TDLight) 9 "shadowMapCamMatrix" + MemberName 907(TDLight) 10 "shadowMapRes" + MemberName 907(TDLight) 11 "projMapMatrix" + Name 909 "TDLightBlock" + MemberName 909(TDLightBlock) 0 "uTDLights" + Name 911 "" + Name 912 "TDEnvLight" + MemberName 912(TDEnvLight) 0 "color" + MemberName 912(TDEnvLight) 1 "rotate" + Name 914 "TDEnvLightBlock" + MemberName 914(TDEnvLightBlock) 0 "uTDEnvLights" + Name 916 "" + Name 919 "TDEnvLightBuffer" + MemberName 919(TDEnvLightBuffer) 0 "shCoeffs" + Name 922 "uTDEnvLightBuffers" + Name 926 "mTD2DImageOutputs" + Name 930 "mTD2DArrayImageOutputs" + Name 934 "mTD3DImageOutputs" + Name 938 "mTDCubeImageOutputs" + Decorate 207(uv) Location 3 + MemberDecorate 214(Vertex) 3 Flat + MemberDecorate 214(Vertex) 4 Flat + Decorate 214(Vertex) Block + Decorate 216(oVert) Location 0 + Decorate 226(P) Location 0 + MemberDecorate 236(gl_PerVertex) 0 BuiltIn Position + MemberDecorate 236(gl_PerVertex) 1 BuiltIn PointSize + MemberDecorate 236(gl_PerVertex) 2 BuiltIn ClipDistance + MemberDecorate 236(gl_PerVertex) 3 BuiltIn CullDistance + Decorate 236(gl_PerVertex) Block + Decorate 256(Cd) Location 2 + MemberDecorate 269(TDMatrix) 0 ColMajor + MemberDecorate 269(TDMatrix) 0 Offset 0 + MemberDecorate 269(TDMatrix) 0 MatrixStride 16 + MemberDecorate 269(TDMatrix) 1 ColMajor + MemberDecorate 269(TDMatrix) 1 Offset 64 + MemberDecorate 269(TDMatrix) 1 MatrixStride 16 + MemberDecorate 269(TDMatrix) 2 ColMajor + MemberDecorate 269(TDMatrix) 2 Offset 128 + MemberDecorate 269(TDMatrix) 2 MatrixStride 16 + MemberDecorate 269(TDMatrix) 3 ColMajor + MemberDecorate 269(TDMatrix) 3 Offset 192 + MemberDecorate 269(TDMatrix) 3 MatrixStride 16 + MemberDecorate 269(TDMatrix) 4 ColMajor + MemberDecorate 269(TDMatrix) 4 Offset 256 + MemberDecorate 269(TDMatrix) 4 MatrixStride 16 + MemberDecorate 269(TDMatrix) 5 ColMajor + MemberDecorate 269(TDMatrix) 5 Offset 320 + MemberDecorate 269(TDMatrix) 5 MatrixStride 16 + MemberDecorate 269(TDMatrix) 6 ColMajor + MemberDecorate 269(TDMatrix) 6 Offset 384 + MemberDecorate 269(TDMatrix) 6 MatrixStride 16 + MemberDecorate 269(TDMatrix) 7 ColMajor + MemberDecorate 269(TDMatrix) 7 Offset 448 + MemberDecorate 269(TDMatrix) 7 MatrixStride 16 + MemberDecorate 269(TDMatrix) 8 ColMajor + MemberDecorate 269(TDMatrix) 8 Offset 512 + MemberDecorate 269(TDMatrix) 8 MatrixStride 16 + MemberDecorate 269(TDMatrix) 9 ColMajor + MemberDecorate 269(TDMatrix) 9 Offset 576 + MemberDecorate 269(TDMatrix) 9 MatrixStride 16 + MemberDecorate 269(TDMatrix) 10 ColMajor + MemberDecorate 269(TDMatrix) 10 Offset 640 + MemberDecorate 269(TDMatrix) 10 MatrixStride 16 + MemberDecorate 269(TDMatrix) 11 ColMajor + MemberDecorate 269(TDMatrix) 11 Offset 704 + MemberDecorate 269(TDMatrix) 11 MatrixStride 16 + MemberDecorate 269(TDMatrix) 12 ColMajor + MemberDecorate 269(TDMatrix) 12 Offset 768 + MemberDecorate 269(TDMatrix) 12 MatrixStride 16 + MemberDecorate 269(TDMatrix) 13 ColMajor + MemberDecorate 269(TDMatrix) 13 Offset 832 + MemberDecorate 269(TDMatrix) 13 MatrixStride 16 + MemberDecorate 269(TDMatrix) 14 ColMajor + MemberDecorate 269(TDMatrix) 14 Offset 880 + MemberDecorate 269(TDMatrix) 14 MatrixStride 16 + MemberDecorate 269(TDMatrix) 15 ColMajor + MemberDecorate 269(TDMatrix) 15 Offset 928 + MemberDecorate 269(TDMatrix) 15 MatrixStride 16 + Decorate 270 ArrayStride 976 + MemberDecorate 271(TDMatricesBlock) 0 Offset 0 + Decorate 271(TDMatricesBlock) Block + Decorate 273 DescriptorSet 0 + Decorate 273 Binding 1 + Decorate 297(gl_InstanceIndex) BuiltIn InstanceIndex + MemberDecorate 299(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 299(gl_DefaultUniformBlock) 1 Offset 4 + MemberDecorate 299(gl_DefaultUniformBlock) 2 Offset 8 + MemberDecorate 299(gl_DefaultUniformBlock) 3 Offset 16 + MemberDecorate 299(gl_DefaultUniformBlock) 4 Offset 28 + MemberDecorate 299(gl_DefaultUniformBlock) 5 Offset 32 + MemberDecorate 299(gl_DefaultUniformBlock) 6 Offset 48 + MemberDecorate 299(gl_DefaultUniformBlock) 7 Offset 64 + Decorate 299(gl_DefaultUniformBlock) Block + Decorate 301 DescriptorSet 0 + Decorate 301 Binding 0 + Decorate 371(sTDInstanceTexCoord) DescriptorSet 0 + Decorate 371(sTDInstanceTexCoord) Binding 16 + Decorate 400(sTDInstanceT) DescriptorSet 0 + Decorate 400(sTDInstanceT) Binding 15 + Decorate 665(sTDInstanceColor) DescriptorSet 0 + Decorate 665(sTDInstanceColor) Binding 17 + MemberDecorate 896(TDCameraInfo) 0 Offset 0 + MemberDecorate 896(TDCameraInfo) 1 Offset 16 + MemberDecorate 896(TDCameraInfo) 2 Offset 32 + MemberDecorate 896(TDCameraInfo) 3 Offset 48 + Decorate 897 ArrayStride 64 + MemberDecorate 898(TDCameraInfoBlock) 0 Offset 0 + Decorate 898(TDCameraInfoBlock) Block + Decorate 900 DescriptorSet 0 + Decorate 900 Binding 0 + MemberDecorate 901(TDGeneral) 0 Offset 0 + MemberDecorate 901(TDGeneral) 1 Offset 16 + MemberDecorate 901(TDGeneral) 2 Offset 32 + MemberDecorate 901(TDGeneral) 3 Offset 48 + MemberDecorate 901(TDGeneral) 4 Offset 64 + MemberDecorate 901(TDGeneral) 5 Offset 80 + MemberDecorate 902(TDGeneralBlock) 0 Offset 0 + Decorate 902(TDGeneralBlock) Block + Decorate 904 DescriptorSet 0 + Decorate 904 Binding 0 + Decorate 905(N) Location 1 + Decorate 906(gl_VertexIndex) BuiltIn VertexIndex + MemberDecorate 907(TDLight) 0 Offset 0 + MemberDecorate 907(TDLight) 1 Offset 16 + MemberDecorate 907(TDLight) 2 Offset 32 + MemberDecorate 907(TDLight) 3 Offset 48 + MemberDecorate 907(TDLight) 4 Offset 64 + MemberDecorate 907(TDLight) 5 Offset 80 + MemberDecorate 907(TDLight) 6 Offset 96 + MemberDecorate 907(TDLight) 7 Offset 112 + MemberDecorate 907(TDLight) 8 ColMajor + MemberDecorate 907(TDLight) 8 Offset 128 + MemberDecorate 907(TDLight) 8 MatrixStride 16 + MemberDecorate 907(TDLight) 9 ColMajor + MemberDecorate 907(TDLight) 9 Offset 192 + MemberDecorate 907(TDLight) 9 MatrixStride 16 + MemberDecorate 907(TDLight) 10 Offset 256 + MemberDecorate 907(TDLight) 11 ColMajor + MemberDecorate 907(TDLight) 11 Offset 272 + MemberDecorate 907(TDLight) 11 MatrixStride 16 + Decorate 908 ArrayStride 336 + MemberDecorate 909(TDLightBlock) 0 Offset 0 + Decorate 909(TDLightBlock) Block + Decorate 911 DescriptorSet 0 + Decorate 911 Binding 0 + MemberDecorate 912(TDEnvLight) 0 Offset 0 + MemberDecorate 912(TDEnvLight) 1 ColMajor + MemberDecorate 912(TDEnvLight) 1 Offset 16 + MemberDecorate 912(TDEnvLight) 1 MatrixStride 16 + Decorate 913 ArrayStride 64 + MemberDecorate 914(TDEnvLightBlock) 0 Offset 0 + Decorate 914(TDEnvLightBlock) Block + Decorate 916 DescriptorSet 0 + Decorate 916 Binding 0 + Decorate 918 ArrayStride 16 + MemberDecorate 919(TDEnvLightBuffer) 0 Restrict + MemberDecorate 919(TDEnvLightBuffer) 0 NonWritable + MemberDecorate 919(TDEnvLightBuffer) 0 Offset 0 + Decorate 919(TDEnvLightBuffer) BufferBlock + Decorate 922(uTDEnvLightBuffers) DescriptorSet 0 + Decorate 922(uTDEnvLightBuffers) Binding 0 + Decorate 926(mTD2DImageOutputs) DescriptorSet 0 + Decorate 926(mTD2DImageOutputs) Binding 0 + Decorate 930(mTD2DArrayImageOutputs) DescriptorSet 0 + Decorate 930(mTD2DArrayImageOutputs) Binding 0 + Decorate 934(mTD3DImageOutputs) DescriptorSet 0 + Decorate 934(mTD3DImageOutputs) Binding 0 + Decorate 938(mTDCubeImageOutputs) DescriptorSet 0 + Decorate 938(mTDCubeImageOutputs) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeVector 6(float) 3 + 10: TypePointer Function 9(fvec3) + 11: TypeInt 32 1 + 12: TypePointer Function 11(int) + 13: TypeBool + 14: TypePointer Function 13(bool) + 15: TypeFunction 7(fvec4) 8(ptr) 10(ptr) 12(ptr) 14(ptr) + 28: TypeFunction 11(int) + 33: TypeFunction 9(fvec3) + 38: TypeFunction 6(float) 12(ptr) + 44: TypeFunction 7(fvec4) 8(ptr) 10(ptr) + 49: TypeFunction 7(fvec4) 10(ptr) 10(ptr) + 54: TypeFunction 7(fvec4) 8(ptr) + 58: TypeFunction 7(fvec4) 10(ptr) + 62: TypeFunction 7(fvec4) + 65: TypeFunction 9(fvec3) 12(ptr) 10(ptr) + 70: TypeFunction 13(bool) 12(ptr) + 74: TypeFunction 9(fvec3) 12(ptr) 14(ptr) + 79: TypeFunction 9(fvec3) 12(ptr) + 83: TypeMatrix 9(fvec3) 3 + 84: TypeFunction 83 12(ptr) + 100: TypeMatrix 7(fvec4) 4 + 101: TypeFunction 100 12(ptr) + 111: TypeFunction 7(fvec4) 12(ptr) 8(ptr) + 131: TypeFunction 9(fvec3) 10(ptr) + 138: TypeFunction 13(bool) + 143: TypeFunction 83 + 148: TypeFunction 100 + 165: TypeFunction 9(fvec3) 10(ptr) 8(ptr) 10(ptr) + 177: TypeFunction 7(fvec4) 12(ptr) 10(ptr) + 203: TypeInt 32 0 + 204: 203(int) Constant 8 + 205: TypeArray 9(fvec3) 204 + 206: TypePointer Input 205 + 207(uv): 206(ptr) Variable Input + 208: 11(int) Constant 0 + 210: TypePointer Input 9(fvec3) + 214(Vertex): TypeStruct 7(fvec4) 9(fvec3) 9(fvec3) 11(int) 11(int) + 215: TypePointer Output 214(Vertex) + 216(oVert): 215(ptr) Variable Output + 217: 11(int) Constant 2 + 219: TypePointer Output 9(fvec3) + 221: 11(int) Constant 4 + 223: TypePointer Output 11(int) + 226(P): 210(ptr) Variable Input + 234: 203(int) Constant 1 + 235: TypeArray 6(float) 234 +236(gl_PerVertex): TypeStruct 7(fvec4) 6(float) 235 235 + 237: TypePointer Output 236(gl_PerVertex) + 238: 237(ptr) Variable Output + 244: TypePointer Output 7(fvec4) + 248: 11(int) Constant 3 + 251: 11(int) Constant 1 + 255: TypePointer Input 7(fvec4) + 256(Cd): 255(ptr) Variable Input + 265: 6(float) Constant 1073741824 + 266: 6(float) Constant 0 + 267: 7(fvec4) ConstantComposite 265 265 265 266 + 269(TDMatrix): TypeStruct 100 100 100 100 100 100 100 100 100 100 100 100 100 83 83 83 + 270: TypeArray 269(TDMatrix) 234 +271(TDMatricesBlock): TypeStruct 270 + 272: TypePointer Uniform 271(TDMatricesBlock) + 273: 272(ptr) Variable Uniform + 274: 11(int) Constant 8 + 275: TypePointer Uniform 100 + 288: 11(int) Constant 6 + 296: TypePointer Input 11(int) +297(gl_InstanceIndex): 296(ptr) Variable Input +299(gl_DefaultUniformBlock): TypeStruct 11(int) 11(int) 6(float) 9(fvec3) 6(float) 9(fvec3) 7(fvec4) 7(fvec4) + 300: TypePointer Uniform 299(gl_DefaultUniformBlock) + 301: 300(ptr) Variable Uniform + 302: TypePointer Uniform 11(int) + 316: 11(int) Constant 1073741824 + 324: 13(bool) ConstantTrue + 335: 6(float) Constant 1065353216 + 346: 9(fvec3) ConstantComposite 266 266 266 + 368: TypeImage 6(float) Buffer sampled format:Unknown + 369: TypeSampledImage 368 + 370: TypePointer UniformConstant 369 +371(sTDInstanceTexCoord): 370(ptr) Variable UniformConstant + 377: 203(int) Constant 0 + 378: TypePointer Function 6(float) + 387: 203(int) Constant 2 +400(sTDInstanceT): 370(ptr) Variable UniformConstant + 432: 203(int) Constant 3 + 471: TypePointer Function 83 + 473: 9(fvec3) ConstantComposite 335 266 266 + 474: 9(fvec3) ConstantComposite 266 335 266 + 475: 9(fvec3) ConstantComposite 266 266 335 + 476: 83 ConstantComposite 473 474 475 + 485: 9(fvec3) ConstantComposite 335 335 335 + 524: 7(fvec4) ConstantComposite 266 266 266 266 + 525: 100 ConstantComposite 524 524 524 524 + 527: TypePointer Function 100 + 529: 7(fvec4) ConstantComposite 335 266 266 266 + 530: 7(fvec4) ConstantComposite 266 335 266 266 + 531: 7(fvec4) ConstantComposite 266 266 335 266 + 532: 7(fvec4) ConstantComposite 266 266 266 335 + 533: 100 ConstantComposite 529 530 531 532 +665(sTDInstanceColor): 370(ptr) Variable UniformConstant + 730: 11(int) Constant 13 + 731: TypePointer Uniform 83 +896(TDCameraInfo): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 11(int) + 897: TypeArray 896(TDCameraInfo) 234 +898(TDCameraInfoBlock): TypeStruct 897 + 899: TypePointer Uniform 898(TDCameraInfoBlock) + 900: 899(ptr) Variable Uniform + 901(TDGeneral): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) +902(TDGeneralBlock): TypeStruct 901(TDGeneral) + 903: TypePointer Uniform 902(TDGeneralBlock) + 904: 903(ptr) Variable Uniform + 905(N): 210(ptr) Variable Input +906(gl_VertexIndex): 296(ptr) Variable Input + 907(TDLight): TypeStruct 7(fvec4) 9(fvec3) 9(fvec3) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 100 100 7(fvec4) 100 + 908: TypeArray 907(TDLight) 234 +909(TDLightBlock): TypeStruct 908 + 910: TypePointer Uniform 909(TDLightBlock) + 911: 910(ptr) Variable Uniform + 912(TDEnvLight): TypeStruct 9(fvec3) 83 + 913: TypeArray 912(TDEnvLight) 234 +914(TDEnvLightBlock): TypeStruct 913 + 915: TypePointer Uniform 914(TDEnvLightBlock) + 916: 915(ptr) Variable Uniform + 917: 203(int) Constant 9 + 918: TypeArray 9(fvec3) 917 +919(TDEnvLightBuffer): TypeStruct 918 + 920: TypeArray 919(TDEnvLightBuffer) 234 + 921: TypePointer Uniform 920 +922(uTDEnvLightBuffers): 921(ptr) Variable Uniform + 923: TypeImage 6(float) 2D nonsampled format:Rgba8 + 924: TypeArray 923 234 + 925: TypePointer UniformConstant 924 +926(mTD2DImageOutputs): 925(ptr) Variable UniformConstant + 927: TypeImage 6(float) 2D array nonsampled format:Rgba8 + 928: TypeArray 927 234 + 929: TypePointer UniformConstant 928 +930(mTD2DArrayImageOutputs): 929(ptr) Variable UniformConstant + 931: TypeImage 6(float) 3D nonsampled format:Rgba8 + 932: TypeArray 931 234 + 933: TypePointer UniformConstant 932 +934(mTD3DImageOutputs): 933(ptr) Variable UniformConstant + 935: TypeImage 6(float) Cube nonsampled format:Rgba8 + 936: TypeArray 935 234 + 937: TypePointer UniformConstant 936 +938(mTDCubeImageOutputs): 937(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 202(texcoord): 10(ptr) Variable Function + 209(param): 10(ptr) Variable Function +225(worldSpacePos): 8(ptr) Variable Function + 227(param): 10(ptr) Variable Function +230(uvUnwrapCoord): 10(ptr) Variable Function + 232(param): 10(ptr) Variable Function + 239(param): 8(ptr) Variable Function + 241(param): 10(ptr) Variable Function +246(cameraIndex): 12(ptr) Variable Function + 257(param): 8(ptr) Variable Function + 211: 210(ptr) AccessChain 207(uv) 208 + 212: 9(fvec3) Load 211 + Store 209(param) 212 + 213: 9(fvec3) FunctionCall 154(TDInstanceTexCoord(vf3;) 209(param) + Store 202(texcoord) 213 + 218: 9(fvec3) Load 202(texcoord) + 220: 219(ptr) AccessChain 216(oVert) 217 + Store 220 218 + 222: 11(int) FunctionCall 29(TDInstanceID() + 224: 223(ptr) AccessChain 216(oVert) 221 + Store 224 222 + 228: 9(fvec3) Load 226(P) + Store 227(param) 228 + 229: 7(fvec4) FunctionCall 183(TDDeform(vf3;) 227(param) + Store 225(worldSpacePos) 229 + 231: 9(fvec3) FunctionCall 34(TDUVUnwrapCoord() + Store 232(param) 231 + 233: 9(fvec3) FunctionCall 154(TDInstanceTexCoord(vf3;) 232(param) + Store 230(uvUnwrapCoord) 233 + 240: 7(fvec4) Load 225(worldSpacePos) + Store 239(param) 240 + 242: 9(fvec3) Load 230(uvUnwrapCoord) + Store 241(param) 242 + 243: 7(fvec4) FunctionCall 47(TDWorldToProj(vf4;vf3;) 239(param) 241(param) + 245: 244(ptr) AccessChain 238 208 + Store 245 243 + 247: 11(int) FunctionCall 31(TDCameraIndex() + Store 246(cameraIndex) 247 + 249: 11(int) Load 246(cameraIndex) + 250: 223(ptr) AccessChain 216(oVert) 248 + Store 250 249 + 252: 7(fvec4) Load 225(worldSpacePos) + 253: 9(fvec3) VectorShuffle 252 252 0 1 2 + 254: 219(ptr) AccessChain 216(oVert) 251 + Store 254 253 + 258: 7(fvec4) Load 256(Cd) + Store 257(param) 258 + 259: 7(fvec4) FunctionCall 157(TDInstanceColor(vf4;) 257(param) + 260: 244(ptr) AccessChain 216(oVert) 208 + Store 260 259 + Return + FunctionEnd +20(iTDCamToProj(vf4;vf3;i1;b1;): 7(fvec4) Function None 15 + 16(v): 8(ptr) FunctionParameter + 17(uv): 10(ptr) FunctionParameter + 18(cameraIndex): 12(ptr) FunctionParameter +19(applyPickMod): 14(ptr) FunctionParameter + 21: Label + 261: 13(bool) FunctionCall 139(TDInstanceActive() + 262: 13(bool) LogicalNot 261 + SelectionMerge 264 None + BranchConditional 262 263 264 + 263: Label + ReturnValue 267 + 264: Label + 276: 275(ptr) AccessChain 273 208 208 274 + 277: 100 Load 276 + 278: 7(fvec4) Load 16(v) + 279: 7(fvec4) MatrixTimesVector 277 278 + Store 16(v) 279 + 280: 7(fvec4) Load 16(v) + ReturnValue 280 + FunctionEnd +26(iTDWorldToProj(vf4;vf3;i1;b1;): 7(fvec4) Function None 15 + 22(v): 8(ptr) FunctionParameter + 23(uv): 10(ptr) FunctionParameter + 24(cameraIndex): 12(ptr) FunctionParameter +25(applyPickMod): 14(ptr) FunctionParameter + 27: Label + 283: 13(bool) FunctionCall 139(TDInstanceActive() + 284: 13(bool) LogicalNot 283 + SelectionMerge 286 None + BranchConditional 284 285 286 + 285: Label + ReturnValue 267 + 286: Label + 289: 275(ptr) AccessChain 273 208 208 288 + 290: 100 Load 289 + 291: 7(fvec4) Load 22(v) + 292: 7(fvec4) MatrixTimesVector 290 291 + Store 22(v) 292 + 293: 7(fvec4) Load 22(v) + ReturnValue 293 + FunctionEnd +29(TDInstanceID(): 11(int) Function None 28 + 30: Label + 298: 11(int) Load 297(gl_InstanceIndex) + 303: 302(ptr) AccessChain 301 208 + 304: 11(int) Load 303 + 305: 11(int) IAdd 298 304 + ReturnValue 305 + FunctionEnd +31(TDCameraIndex(): 11(int) Function None 28 + 32: Label + ReturnValue 208 + FunctionEnd +34(TDUVUnwrapCoord(): 9(fvec3) Function None 33 + 35: Label + 310: 210(ptr) AccessChain 207(uv) 208 + 311: 9(fvec3) Load 310 + ReturnValue 311 + FunctionEnd + 36(TDPickID(): 11(int) Function None 28 + 37: Label + ReturnValue 208 + FunctionEnd +40(iTDConvertPickId(i1;): 6(float) Function None 38 + 39(id): 12(ptr) FunctionParameter + 41: Label + 317: 11(int) Load 39(id) + 318: 11(int) BitwiseOr 317 316 + Store 39(id) 318 + 319: 11(int) Load 39(id) + 320: 6(float) Bitcast 319 + ReturnValue 320 + FunctionEnd +42(TDWritePickingValues(): 2 Function None 3 + 43: Label + Return + FunctionEnd +47(TDWorldToProj(vf4;vf3;): 7(fvec4) Function None 44 + 45(v): 8(ptr) FunctionParameter + 46(uv): 10(ptr) FunctionParameter + 48: Label + 325(param): 8(ptr) Variable Function + 327(param): 10(ptr) Variable Function + 329(param): 12(ptr) Variable Function + 330(param): 14(ptr) Variable Function + 323: 11(int) FunctionCall 31(TDCameraIndex() + 326: 7(fvec4) Load 45(v) + Store 325(param) 326 + 328: 9(fvec3) Load 46(uv) + Store 327(param) 328 + Store 329(param) 323 + Store 330(param) 324 + 331: 7(fvec4) FunctionCall 26(iTDWorldToProj(vf4;vf3;i1;b1;) 325(param) 327(param) 329(param) 330(param) + ReturnValue 331 + FunctionEnd +52(TDWorldToProj(vf3;vf3;): 7(fvec4) Function None 49 + 50(v): 10(ptr) FunctionParameter + 51(uv): 10(ptr) FunctionParameter + 53: Label + 340(param): 8(ptr) Variable Function + 341(param): 10(ptr) Variable Function + 334: 9(fvec3) Load 50(v) + 336: 6(float) CompositeExtract 334 0 + 337: 6(float) CompositeExtract 334 1 + 338: 6(float) CompositeExtract 334 2 + 339: 7(fvec4) CompositeConstruct 336 337 338 335 + Store 340(param) 339 + 342: 9(fvec3) Load 51(uv) + Store 341(param) 342 + 343: 7(fvec4) FunctionCall 47(TDWorldToProj(vf4;vf3;) 340(param) 341(param) + ReturnValue 343 + FunctionEnd +56(TDWorldToProj(vf4;): 7(fvec4) Function None 54 + 55(v): 8(ptr) FunctionParameter + 57: Label + 347(param): 8(ptr) Variable Function + 349(param): 10(ptr) Variable Function + 348: 7(fvec4) Load 55(v) + Store 347(param) 348 + Store 349(param) 346 + 350: 7(fvec4) FunctionCall 47(TDWorldToProj(vf4;vf3;) 347(param) 349(param) + ReturnValue 350 + FunctionEnd +60(TDWorldToProj(vf3;): 7(fvec4) Function None 58 + 59(v): 10(ptr) FunctionParameter + 61: Label + 358(param): 8(ptr) Variable Function + 353: 9(fvec3) Load 59(v) + 354: 6(float) CompositeExtract 353 0 + 355: 6(float) CompositeExtract 353 1 + 356: 6(float) CompositeExtract 353 2 + 357: 7(fvec4) CompositeConstruct 354 355 356 335 + Store 358(param) 357 + 359: 7(fvec4) FunctionCall 56(TDWorldToProj(vf4;) 358(param) + ReturnValue 359 + FunctionEnd +63(TDPointColor(): 7(fvec4) Function None 62 + 64: Label + 362: 7(fvec4) Load 256(Cd) + ReturnValue 362 + FunctionEnd +68(TDInstanceTexCoord(i1;vf3;): 9(fvec3) Function None 65 + 66(index): 12(ptr) FunctionParameter + 67(t): 10(ptr) FunctionParameter + 69: Label + 365(coord): 12(ptr) Variable Function + 367(samp): 8(ptr) Variable Function + 376(v): 10(ptr) Variable Function + 366: 11(int) Load 66(index) + Store 365(coord) 366 + 372: 369 Load 371(sTDInstanceTexCoord) + 373: 11(int) Load 365(coord) + 374: 368 Image 372 + 375: 7(fvec4) ImageFetch 374 373 + Store 367(samp) 375 + 379: 378(ptr) AccessChain 67(t) 377 + 380: 6(float) Load 379 + 381: 378(ptr) AccessChain 376(v) 377 + Store 381 380 + 382: 378(ptr) AccessChain 67(t) 234 + 383: 6(float) Load 382 + 384: 378(ptr) AccessChain 376(v) 234 + Store 384 383 + 385: 378(ptr) AccessChain 367(samp) 377 + 386: 6(float) Load 385 + 388: 378(ptr) AccessChain 376(v) 387 + Store 388 386 + 389: 9(fvec3) Load 376(v) + Store 67(t) 389 + 390: 9(fvec3) Load 67(t) + ReturnValue 390 + FunctionEnd +72(TDInstanceActive(i1;): 13(bool) Function None 70 + 71(index): 12(ptr) FunctionParameter + 73: Label + 397(coord): 12(ptr) Variable Function + 399(samp): 8(ptr) Variable Function + 405(v): 378(ptr) Variable Function + 393: 302(ptr) AccessChain 301 208 + 394: 11(int) Load 393 + 395: 11(int) Load 71(index) + 396: 11(int) ISub 395 394 + Store 71(index) 396 + 398: 11(int) Load 71(index) + Store 397(coord) 398 + 401: 369 Load 400(sTDInstanceT) + 402: 11(int) Load 397(coord) + 403: 368 Image 401 + 404: 7(fvec4) ImageFetch 403 402 + Store 399(samp) 404 + 406: 378(ptr) AccessChain 399(samp) 377 + 407: 6(float) Load 406 + Store 405(v) 407 + 408: 6(float) Load 405(v) + 409: 13(bool) FUnordNotEqual 408 266 + ReturnValue 409 + FunctionEnd +77(iTDInstanceTranslate(i1;b1;): 9(fvec3) Function None 74 + 75(index): 12(ptr) FunctionParameter +76(instanceActive): 14(ptr) FunctionParameter + 78: Label + 412(origIndex): 12(ptr) Variable Function + 418(coord): 12(ptr) Variable Function + 420(samp): 8(ptr) Variable Function + 425(v): 10(ptr) Variable Function + 413: 11(int) Load 75(index) + Store 412(origIndex) 413 + 414: 302(ptr) AccessChain 301 208 + 415: 11(int) Load 414 + 416: 11(int) Load 75(index) + 417: 11(int) ISub 416 415 + Store 75(index) 417 + 419: 11(int) Load 75(index) + Store 418(coord) 419 + 421: 369 Load 400(sTDInstanceT) + 422: 11(int) Load 418(coord) + 423: 368 Image 421 + 424: 7(fvec4) ImageFetch 423 422 + Store 420(samp) 424 + 426: 378(ptr) AccessChain 420(samp) 234 + 427: 6(float) Load 426 + 428: 378(ptr) AccessChain 425(v) 377 + Store 428 427 + 429: 378(ptr) AccessChain 420(samp) 387 + 430: 6(float) Load 429 + 431: 378(ptr) AccessChain 425(v) 234 + Store 431 430 + 433: 378(ptr) AccessChain 420(samp) 432 + 434: 6(float) Load 433 + 435: 378(ptr) AccessChain 425(v) 387 + Store 435 434 + 436: 378(ptr) AccessChain 420(samp) 377 + 437: 6(float) Load 436 + 438: 13(bool) FUnordNotEqual 437 266 + Store 76(instanceActive) 438 + 439: 9(fvec3) Load 425(v) + ReturnValue 439 + FunctionEnd +81(TDInstanceTranslate(i1;): 9(fvec3) Function None 79 + 80(index): 12(ptr) FunctionParameter + 82: Label + 446(coord): 12(ptr) Variable Function + 448(samp): 8(ptr) Variable Function + 453(v): 10(ptr) Variable Function + 442: 302(ptr) AccessChain 301 208 + 443: 11(int) Load 442 + 444: 11(int) Load 80(index) + 445: 11(int) ISub 444 443 + Store 80(index) 445 + 447: 11(int) Load 80(index) + Store 446(coord) 447 + 449: 369 Load 400(sTDInstanceT) + 450: 11(int) Load 446(coord) + 451: 368 Image 449 + 452: 7(fvec4) ImageFetch 451 450 + Store 448(samp) 452 + 454: 378(ptr) AccessChain 448(samp) 234 + 455: 6(float) Load 454 + 456: 378(ptr) AccessChain 453(v) 377 + Store 456 455 + 457: 378(ptr) AccessChain 448(samp) 387 + 458: 6(float) Load 457 + 459: 378(ptr) AccessChain 453(v) 234 + Store 459 458 + 460: 378(ptr) AccessChain 448(samp) 432 + 461: 6(float) Load 460 + 462: 378(ptr) AccessChain 453(v) 387 + Store 462 461 + 463: 9(fvec3) Load 453(v) + ReturnValue 463 + FunctionEnd +86(TDInstanceRotateMat(i1;): 83 Function None 84 + 85(index): 12(ptr) FunctionParameter + 87: Label + 470(v): 10(ptr) Variable Function + 472(m): 471(ptr) Variable Function + 466: 302(ptr) AccessChain 301 208 + 467: 11(int) Load 466 + 468: 11(int) Load 85(index) + 469: 11(int) ISub 468 467 + Store 85(index) 469 + Store 470(v) 346 + Store 472(m) 476 + 477: 83 Load 472(m) + ReturnValue 477 + FunctionEnd +89(TDInstanceScale(i1;): 9(fvec3) Function None 79 + 88(index): 12(ptr) FunctionParameter + 90: Label + 484(v): 10(ptr) Variable Function + 480: 302(ptr) AccessChain 301 208 + 481: 11(int) Load 480 + 482: 11(int) Load 88(index) + 483: 11(int) ISub 482 481 + Store 88(index) 483 + Store 484(v) 485 + 486: 9(fvec3) Load 484(v) + ReturnValue 486 + FunctionEnd +92(TDInstancePivot(i1;): 9(fvec3) Function None 79 + 91(index): 12(ptr) FunctionParameter + 93: Label + 493(v): 10(ptr) Variable Function + 489: 302(ptr) AccessChain 301 208 + 490: 11(int) Load 489 + 491: 11(int) Load 91(index) + 492: 11(int) ISub 491 490 + Store 91(index) 492 + Store 493(v) 346 + 494: 9(fvec3) Load 493(v) + ReturnValue 494 + FunctionEnd +95(TDInstanceRotTo(i1;): 9(fvec3) Function None 79 + 94(index): 12(ptr) FunctionParameter + 96: Label + 501(v): 10(ptr) Variable Function + 497: 302(ptr) AccessChain 301 208 + 498: 11(int) Load 497 + 499: 11(int) Load 94(index) + 500: 11(int) ISub 499 498 + Store 94(index) 500 + Store 501(v) 475 + 502: 9(fvec3) Load 501(v) + ReturnValue 502 + FunctionEnd +98(TDInstanceRotUp(i1;): 9(fvec3) Function None 79 + 97(index): 12(ptr) FunctionParameter + 99: Label + 509(v): 10(ptr) Variable Function + 505: 302(ptr) AccessChain 301 208 + 506: 11(int) Load 505 + 507: 11(int) Load 97(index) + 508: 11(int) ISub 507 506 + Store 97(index) 508 + Store 509(v) 474 + 510: 9(fvec3) Load 509(v) + ReturnValue 510 + FunctionEnd +103(TDInstanceMat(i1;): 100 Function None 101 + 102(id): 12(ptr) FunctionParameter + 104: Label +513(instanceActive): 14(ptr) Variable Function + 514(t): 10(ptr) Variable Function + 515(param): 12(ptr) Variable Function + 517(param): 14(ptr) Variable Function + 528(m): 527(ptr) Variable Function + 534(tt): 10(ptr) Variable Function + Store 513(instanceActive) 324 + 516: 11(int) Load 102(id) + Store 515(param) 516 + 518: 9(fvec3) FunctionCall 77(iTDInstanceTranslate(i1;b1;) 515(param) 517(param) + 519: 13(bool) Load 517(param) + Store 513(instanceActive) 519 + Store 514(t) 518 + 520: 13(bool) Load 513(instanceActive) + 521: 13(bool) LogicalNot 520 + SelectionMerge 523 None + BranchConditional 521 522 523 + 522: Label + ReturnValue 525 + 523: Label + Store 528(m) 533 + 535: 9(fvec3) Load 514(t) + Store 534(tt) 535 + 536: 378(ptr) AccessChain 528(m) 208 377 + 537: 6(float) Load 536 + 538: 378(ptr) AccessChain 534(tt) 377 + 539: 6(float) Load 538 + 540: 6(float) FMul 537 539 + 541: 378(ptr) AccessChain 528(m) 248 377 + 542: 6(float) Load 541 + 543: 6(float) FAdd 542 540 + 544: 378(ptr) AccessChain 528(m) 248 377 + Store 544 543 + 545: 378(ptr) AccessChain 528(m) 208 234 + 546: 6(float) Load 545 + 547: 378(ptr) AccessChain 534(tt) 377 + 548: 6(float) Load 547 + 549: 6(float) FMul 546 548 + 550: 378(ptr) AccessChain 528(m) 248 234 + 551: 6(float) Load 550 + 552: 6(float) FAdd 551 549 + 553: 378(ptr) AccessChain 528(m) 248 234 + Store 553 552 + 554: 378(ptr) AccessChain 528(m) 208 387 + 555: 6(float) Load 554 + 556: 378(ptr) AccessChain 534(tt) 377 + 557: 6(float) Load 556 + 558: 6(float) FMul 555 557 + 559: 378(ptr) AccessChain 528(m) 248 387 + 560: 6(float) Load 559 + 561: 6(float) FAdd 560 558 + 562: 378(ptr) AccessChain 528(m) 248 387 + Store 562 561 + 563: 378(ptr) AccessChain 528(m) 208 432 + 564: 6(float) Load 563 + 565: 378(ptr) AccessChain 534(tt) 377 + 566: 6(float) Load 565 + 567: 6(float) FMul 564 566 + 568: 378(ptr) AccessChain 528(m) 248 432 + 569: 6(float) Load 568 + 570: 6(float) FAdd 569 567 + 571: 378(ptr) AccessChain 528(m) 248 432 + Store 571 570 + 572: 378(ptr) AccessChain 528(m) 251 377 + 573: 6(float) Load 572 + 574: 378(ptr) AccessChain 534(tt) 234 + 575: 6(float) Load 574 + 576: 6(float) FMul 573 575 + 577: 378(ptr) AccessChain 528(m) 248 377 + 578: 6(float) Load 577 + 579: 6(float) FAdd 578 576 + 580: 378(ptr) AccessChain 528(m) 248 377 + Store 580 579 + 581: 378(ptr) AccessChain 528(m) 251 234 + 582: 6(float) Load 581 + 583: 378(ptr) AccessChain 534(tt) 234 + 584: 6(float) Load 583 + 585: 6(float) FMul 582 584 + 586: 378(ptr) AccessChain 528(m) 248 234 + 587: 6(float) Load 586 + 588: 6(float) FAdd 587 585 + 589: 378(ptr) AccessChain 528(m) 248 234 + Store 589 588 + 590: 378(ptr) AccessChain 528(m) 251 387 + 591: 6(float) Load 590 + 592: 378(ptr) AccessChain 534(tt) 234 + 593: 6(float) Load 592 + 594: 6(float) FMul 591 593 + 595: 378(ptr) AccessChain 528(m) 248 387 + 596: 6(float) Load 595 + 597: 6(float) FAdd 596 594 + 598: 378(ptr) AccessChain 528(m) 248 387 + Store 598 597 + 599: 378(ptr) AccessChain 528(m) 251 432 + 600: 6(float) Load 599 + 601: 378(ptr) AccessChain 534(tt) 234 + 602: 6(float) Load 601 + 603: 6(float) FMul 600 602 + 604: 378(ptr) AccessChain 528(m) 248 432 + 605: 6(float) Load 604 + 606: 6(float) FAdd 605 603 + 607: 378(ptr) AccessChain 528(m) 248 432 + Store 607 606 + 608: 378(ptr) AccessChain 528(m) 217 377 + 609: 6(float) Load 608 + 610: 378(ptr) AccessChain 534(tt) 387 + 611: 6(float) Load 610 + 612: 6(float) FMul 609 611 + 613: 378(ptr) AccessChain 528(m) 248 377 + 614: 6(float) Load 613 + 615: 6(float) FAdd 614 612 + 616: 378(ptr) AccessChain 528(m) 248 377 + Store 616 615 + 617: 378(ptr) AccessChain 528(m) 217 234 + 618: 6(float) Load 617 + 619: 378(ptr) AccessChain 534(tt) 387 + 620: 6(float) Load 619 + 621: 6(float) FMul 618 620 + 622: 378(ptr) AccessChain 528(m) 248 234 + 623: 6(float) Load 622 + 624: 6(float) FAdd 623 621 + 625: 378(ptr) AccessChain 528(m) 248 234 + Store 625 624 + 626: 378(ptr) AccessChain 528(m) 217 387 + 627: 6(float) Load 626 + 628: 378(ptr) AccessChain 534(tt) 387 + 629: 6(float) Load 628 + 630: 6(float) FMul 627 629 + 631: 378(ptr) AccessChain 528(m) 248 387 + 632: 6(float) Load 631 + 633: 6(float) FAdd 632 630 + 634: 378(ptr) AccessChain 528(m) 248 387 + Store 634 633 + 635: 378(ptr) AccessChain 528(m) 217 432 + 636: 6(float) Load 635 + 637: 378(ptr) AccessChain 534(tt) 387 + 638: 6(float) Load 637 + 639: 6(float) FMul 636 638 + 640: 378(ptr) AccessChain 528(m) 248 432 + 641: 6(float) Load 640 + 642: 6(float) FAdd 641 639 + 643: 378(ptr) AccessChain 528(m) 248 432 + Store 643 642 + 644: 100 Load 528(m) + ReturnValue 644 + FunctionEnd +106(TDInstanceMat3(i1;): 83 Function None 84 + 105(id): 12(ptr) FunctionParameter + 107: Label + 647(m): 471(ptr) Variable Function + Store 647(m) 476 + 648: 83 Load 647(m) + ReturnValue 648 + FunctionEnd +109(TDInstanceMat3ForNorm(i1;): 83 Function None 84 + 108(id): 12(ptr) FunctionParameter + 110: Label + 651(m): 471(ptr) Variable Function + 652(param): 12(ptr) Variable Function + 653: 11(int) Load 108(id) + Store 652(param) 653 + 654: 83 FunctionCall 106(TDInstanceMat3(i1;) 652(param) + Store 651(m) 654 + 655: 83 Load 651(m) + ReturnValue 655 + FunctionEnd +114(TDInstanceColor(i1;vf4;): 7(fvec4) Function None 111 + 112(index): 12(ptr) FunctionParameter + 113(curColor): 8(ptr) FunctionParameter + 115: Label + 662(coord): 12(ptr) Variable Function + 664(samp): 8(ptr) Variable Function + 670(v): 8(ptr) Variable Function + 658: 302(ptr) AccessChain 301 208 + 659: 11(int) Load 658 + 660: 11(int) Load 112(index) + 661: 11(int) ISub 660 659 + Store 112(index) 661 + 663: 11(int) Load 112(index) + Store 662(coord) 663 + 666: 369 Load 665(sTDInstanceColor) + 667: 11(int) Load 662(coord) + 668: 368 Image 666 + 669: 7(fvec4) ImageFetch 668 667 + Store 664(samp) 669 + 671: 378(ptr) AccessChain 664(samp) 377 + 672: 6(float) Load 671 + 673: 378(ptr) AccessChain 670(v) 377 + Store 673 672 + 674: 378(ptr) AccessChain 664(samp) 234 + 675: 6(float) Load 674 + 676: 378(ptr) AccessChain 670(v) 234 + Store 676 675 + 677: 378(ptr) AccessChain 664(samp) 387 + 678: 6(float) Load 677 + 679: 378(ptr) AccessChain 670(v) 387 + Store 679 678 + 680: 378(ptr) AccessChain 670(v) 432 + Store 680 335 + 681: 378(ptr) AccessChain 670(v) 377 + 682: 6(float) Load 681 + 683: 378(ptr) AccessChain 113(curColor) 377 + Store 683 682 + 684: 378(ptr) AccessChain 670(v) 234 + 685: 6(float) Load 684 + 686: 378(ptr) AccessChain 113(curColor) 234 + Store 686 685 + 687: 378(ptr) AccessChain 670(v) 387 + 688: 6(float) Load 687 + 689: 378(ptr) AccessChain 113(curColor) 387 + Store 689 688 + 690: 7(fvec4) Load 113(curColor) + ReturnValue 690 + FunctionEnd +118(TDInstanceDeform(i1;vf4;): 7(fvec4) Function None 111 + 116(id): 12(ptr) FunctionParameter + 117(pos): 8(ptr) FunctionParameter + 119: Label + 693(param): 12(ptr) Variable Function + 694: 11(int) Load 116(id) + Store 693(param) 694 + 695: 100 FunctionCall 103(TDInstanceMat(i1;) 693(param) + 696: 7(fvec4) Load 117(pos) + 697: 7(fvec4) MatrixTimesVector 695 696 + Store 117(pos) 697 + 698: 11(int) FunctionCall 31(TDCameraIndex() + 699: 275(ptr) AccessChain 273 208 698 208 + 700: 100 Load 699 + 701: 7(fvec4) Load 117(pos) + 702: 7(fvec4) MatrixTimesVector 700 701 + ReturnValue 702 + FunctionEnd +122(TDInstanceDeformVec(i1;vf3;): 9(fvec3) Function None 65 + 120(id): 12(ptr) FunctionParameter + 121(vec): 10(ptr) FunctionParameter + 123: Label + 705(m): 471(ptr) Variable Function + 706(param): 12(ptr) Variable Function + 707: 11(int) Load 120(id) + Store 706(param) 707 + 708: 83 FunctionCall 106(TDInstanceMat3(i1;) 706(param) + Store 705(m) 708 + 709: 11(int) FunctionCall 31(TDCameraIndex() + 710: 275(ptr) AccessChain 273 208 709 208 + 711: 100 Load 710 + 712: 7(fvec4) CompositeExtract 711 0 + 713: 9(fvec3) VectorShuffle 712 712 0 1 2 + 714: 7(fvec4) CompositeExtract 711 1 + 715: 9(fvec3) VectorShuffle 714 714 0 1 2 + 716: 7(fvec4) CompositeExtract 711 2 + 717: 9(fvec3) VectorShuffle 716 716 0 1 2 + 718: 83 CompositeConstruct 713 715 717 + 719: 83 Load 705(m) + 720: 9(fvec3) Load 121(vec) + 721: 9(fvec3) MatrixTimesVector 719 720 + 722: 9(fvec3) MatrixTimesVector 718 721 + ReturnValue 722 + FunctionEnd +126(TDInstanceDeformNorm(i1;vf3;): 9(fvec3) Function None 65 + 124(id): 12(ptr) FunctionParameter + 125(vec): 10(ptr) FunctionParameter + 127: Label + 725(m): 471(ptr) Variable Function + 726(param): 12(ptr) Variable Function + 727: 11(int) Load 124(id) + Store 726(param) 727 + 728: 83 FunctionCall 109(TDInstanceMat3ForNorm(i1;) 726(param) + Store 725(m) 728 + 729: 11(int) FunctionCall 31(TDCameraIndex() + 732: 731(ptr) AccessChain 273 208 729 730 + 733: 83 Load 732 + 734: 9(fvec3) CompositeExtract 733 0 + 735: 9(fvec3) CompositeExtract 733 1 + 736: 9(fvec3) CompositeExtract 733 2 + 737: 83 CompositeConstruct 734 735 736 + 738: 83 Load 725(m) + 739: 9(fvec3) Load 125(vec) + 740: 9(fvec3) MatrixTimesVector 738 739 + 741: 9(fvec3) MatrixTimesVector 737 740 + ReturnValue 741 + FunctionEnd +129(TDInstanceDeform(vf4;): 7(fvec4) Function None 54 + 128(pos): 8(ptr) FunctionParameter + 130: Label + 745(param): 12(ptr) Variable Function + 746(param): 8(ptr) Variable Function + 744: 11(int) FunctionCall 29(TDInstanceID() + Store 745(param) 744 + 747: 7(fvec4) Load 128(pos) + Store 746(param) 747 + 748: 7(fvec4) FunctionCall 118(TDInstanceDeform(i1;vf4;) 745(param) 746(param) + ReturnValue 748 + FunctionEnd +133(TDInstanceDeformVec(vf3;): 9(fvec3) Function None 131 + 132(vec): 10(ptr) FunctionParameter + 134: Label + 752(param): 12(ptr) Variable Function + 753(param): 10(ptr) Variable Function + 751: 11(int) FunctionCall 29(TDInstanceID() + Store 752(param) 751 + 754: 9(fvec3) Load 132(vec) + Store 753(param) 754 + 755: 9(fvec3) FunctionCall 122(TDInstanceDeformVec(i1;vf3;) 752(param) 753(param) + ReturnValue 755 + FunctionEnd +136(TDInstanceDeformNorm(vf3;): 9(fvec3) Function None 131 + 135(vec): 10(ptr) FunctionParameter + 137: Label + 759(param): 12(ptr) Variable Function + 760(param): 10(ptr) Variable Function + 758: 11(int) FunctionCall 29(TDInstanceID() + Store 759(param) 758 + 761: 9(fvec3) Load 135(vec) + Store 760(param) 761 + 762: 9(fvec3) FunctionCall 126(TDInstanceDeformNorm(i1;vf3;) 759(param) 760(param) + ReturnValue 762 + FunctionEnd +139(TDInstanceActive(): 13(bool) Function None 138 + 140: Label + 766(param): 12(ptr) Variable Function + 765: 11(int) FunctionCall 29(TDInstanceID() + Store 766(param) 765 + 767: 13(bool) FunctionCall 72(TDInstanceActive(i1;) 766(param) + ReturnValue 767 + FunctionEnd +141(TDInstanceTranslate(): 9(fvec3) Function None 33 + 142: Label + 771(param): 12(ptr) Variable Function + 770: 11(int) FunctionCall 29(TDInstanceID() + Store 771(param) 770 + 772: 9(fvec3) FunctionCall 81(TDInstanceTranslate(i1;) 771(param) + ReturnValue 772 + FunctionEnd +144(TDInstanceRotateMat(): 83 Function None 143 + 145: Label + 776(param): 12(ptr) Variable Function + 775: 11(int) FunctionCall 29(TDInstanceID() + Store 776(param) 775 + 777: 83 FunctionCall 86(TDInstanceRotateMat(i1;) 776(param) + ReturnValue 777 + FunctionEnd +146(TDInstanceScale(): 9(fvec3) Function None 33 + 147: Label + 781(param): 12(ptr) Variable Function + 780: 11(int) FunctionCall 29(TDInstanceID() + Store 781(param) 780 + 782: 9(fvec3) FunctionCall 89(TDInstanceScale(i1;) 781(param) + ReturnValue 782 + FunctionEnd +149(TDInstanceMat(): 100 Function None 148 + 150: Label + 786(param): 12(ptr) Variable Function + 785: 11(int) FunctionCall 29(TDInstanceID() + Store 786(param) 785 + 787: 100 FunctionCall 103(TDInstanceMat(i1;) 786(param) + ReturnValue 787 + FunctionEnd +151(TDInstanceMat3(): 83 Function None 143 + 152: Label + 791(param): 12(ptr) Variable Function + 790: 11(int) FunctionCall 29(TDInstanceID() + Store 791(param) 790 + 792: 83 FunctionCall 106(TDInstanceMat3(i1;) 791(param) + ReturnValue 792 + FunctionEnd +154(TDInstanceTexCoord(vf3;): 9(fvec3) Function None 131 + 153(t): 10(ptr) FunctionParameter + 155: Label + 796(param): 12(ptr) Variable Function + 797(param): 10(ptr) Variable Function + 795: 11(int) FunctionCall 29(TDInstanceID() + Store 796(param) 795 + 798: 9(fvec3) Load 153(t) + Store 797(param) 798 + 799: 9(fvec3) FunctionCall 68(TDInstanceTexCoord(i1;vf3;) 796(param) 797(param) + ReturnValue 799 + FunctionEnd +157(TDInstanceColor(vf4;): 7(fvec4) Function None 54 + 156(curColor): 8(ptr) FunctionParameter + 158: Label + 803(param): 12(ptr) Variable Function + 804(param): 8(ptr) Variable Function + 802: 11(int) FunctionCall 29(TDInstanceID() + Store 803(param) 802 + 805: 7(fvec4) Load 156(curColor) + Store 804(param) 805 + 806: 7(fvec4) FunctionCall 114(TDInstanceColor(i1;vf4;) 803(param) 804(param) + ReturnValue 806 + FunctionEnd +160(TDSkinnedDeform(vf4;): 7(fvec4) Function None 54 + 159(pos): 8(ptr) FunctionParameter + 161: Label + 809: 7(fvec4) Load 159(pos) + ReturnValue 809 + FunctionEnd +163(TDSkinnedDeformVec(vf3;): 9(fvec3) Function None 131 + 162(vec): 10(ptr) FunctionParameter + 164: Label + 812: 9(fvec3) Load 162(vec) + ReturnValue 812 + FunctionEnd +169(TDFastDeformTangent(vf3;vf4;vf3;): 9(fvec3) Function None 165 + 166(oldNorm): 10(ptr) FunctionParameter + 167(oldTangent): 8(ptr) FunctionParameter +168(deformedNorm): 10(ptr) FunctionParameter + 170: Label + 815: 7(fvec4) Load 167(oldTangent) + 816: 9(fvec3) VectorShuffle 815 815 0 1 2 + ReturnValue 816 + FunctionEnd +172(TDBoneMat(i1;): 100 Function None 101 + 171(index): 12(ptr) FunctionParameter + 173: Label + ReturnValue 533 + FunctionEnd +175(TDDeform(vf4;): 7(fvec4) Function None 54 + 174(pos): 8(ptr) FunctionParameter + 176: Label + 821(param): 8(ptr) Variable Function + 824(param): 8(ptr) Variable Function + 822: 7(fvec4) Load 174(pos) + Store 821(param) 822 + 823: 7(fvec4) FunctionCall 160(TDSkinnedDeform(vf4;) 821(param) + Store 174(pos) 823 + 825: 7(fvec4) Load 174(pos) + Store 824(param) 825 + 826: 7(fvec4) FunctionCall 129(TDInstanceDeform(vf4;) 824(param) + Store 174(pos) 826 + 827: 7(fvec4) Load 174(pos) + ReturnValue 827 + FunctionEnd +180(TDDeform(i1;vf3;): 7(fvec4) Function None 177 + 178(instanceID): 12(ptr) FunctionParameter + 179(p): 10(ptr) FunctionParameter + 181: Label + 830(pos): 8(ptr) Variable Function + 836(param): 8(ptr) Variable Function + 839(param): 12(ptr) Variable Function + 841(param): 8(ptr) Variable Function + 831: 9(fvec3) Load 179(p) + 832: 6(float) CompositeExtract 831 0 + 833: 6(float) CompositeExtract 831 1 + 834: 6(float) CompositeExtract 831 2 + 835: 7(fvec4) CompositeConstruct 832 833 834 335 + Store 830(pos) 835 + 837: 7(fvec4) Load 830(pos) + Store 836(param) 837 + 838: 7(fvec4) FunctionCall 160(TDSkinnedDeform(vf4;) 836(param) + Store 830(pos) 838 + 840: 11(int) Load 178(instanceID) + Store 839(param) 840 + 842: 7(fvec4) Load 830(pos) + Store 841(param) 842 + 843: 7(fvec4) FunctionCall 118(TDInstanceDeform(i1;vf4;) 839(param) 841(param) + Store 830(pos) 843 + 844: 7(fvec4) Load 830(pos) + ReturnValue 844 + FunctionEnd +183(TDDeform(vf3;): 7(fvec4) Function None 58 + 182(pos): 10(ptr) FunctionParameter + 184: Label + 848(param): 12(ptr) Variable Function + 849(param): 10(ptr) Variable Function + 847: 11(int) FunctionCall 29(TDInstanceID() + Store 848(param) 847 + 850: 9(fvec3) Load 182(pos) + Store 849(param) 850 + 851: 7(fvec4) FunctionCall 180(TDDeform(i1;vf3;) 848(param) 849(param) + ReturnValue 851 + FunctionEnd +187(TDDeformVec(i1;vf3;): 9(fvec3) Function None 65 + 185(instanceID): 12(ptr) FunctionParameter + 186(vec): 10(ptr) FunctionParameter + 188: Label + 854(param): 10(ptr) Variable Function + 857(param): 12(ptr) Variable Function + 859(param): 10(ptr) Variable Function + 855: 9(fvec3) Load 186(vec) + Store 854(param) 855 + 856: 9(fvec3) FunctionCall 163(TDSkinnedDeformVec(vf3;) 854(param) + Store 186(vec) 856 + 858: 11(int) Load 185(instanceID) + Store 857(param) 858 + 860: 9(fvec3) Load 186(vec) + Store 859(param) 860 + 861: 9(fvec3) FunctionCall 122(TDInstanceDeformVec(i1;vf3;) 857(param) 859(param) + Store 186(vec) 861 + 862: 9(fvec3) Load 186(vec) + ReturnValue 862 + FunctionEnd +190(TDDeformVec(vf3;): 9(fvec3) Function None 131 + 189(vec): 10(ptr) FunctionParameter + 191: Label + 866(param): 12(ptr) Variable Function + 867(param): 10(ptr) Variable Function + 865: 11(int) FunctionCall 29(TDInstanceID() + Store 866(param) 865 + 868: 9(fvec3) Load 189(vec) + Store 867(param) 868 + 869: 9(fvec3) FunctionCall 187(TDDeformVec(i1;vf3;) 866(param) 867(param) + ReturnValue 869 + FunctionEnd +194(TDDeformNorm(i1;vf3;): 9(fvec3) Function None 65 + 192(instanceID): 12(ptr) FunctionParameter + 193(vec): 10(ptr) FunctionParameter + 195: Label + 872(param): 10(ptr) Variable Function + 875(param): 12(ptr) Variable Function + 877(param): 10(ptr) Variable Function + 873: 9(fvec3) Load 193(vec) + Store 872(param) 873 + 874: 9(fvec3) FunctionCall 163(TDSkinnedDeformVec(vf3;) 872(param) + Store 193(vec) 874 + 876: 11(int) Load 192(instanceID) + Store 875(param) 876 + 878: 9(fvec3) Load 193(vec) + Store 877(param) 878 + 879: 9(fvec3) FunctionCall 126(TDInstanceDeformNorm(i1;vf3;) 875(param) 877(param) + Store 193(vec) 879 + 880: 9(fvec3) Load 193(vec) + ReturnValue 880 + FunctionEnd +197(TDDeformNorm(vf3;): 9(fvec3) Function None 131 + 196(vec): 10(ptr) FunctionParameter + 198: Label + 884(param): 12(ptr) Variable Function + 885(param): 10(ptr) Variable Function + 883: 11(int) FunctionCall 29(TDInstanceID() + Store 884(param) 883 + 886: 9(fvec3) Load 196(vec) + Store 885(param) 886 + 887: 9(fvec3) FunctionCall 194(TDDeformNorm(i1;vf3;) 884(param) 885(param) + ReturnValue 887 + FunctionEnd +200(TDSkinnedDeformNorm(vf3;): 9(fvec3) Function None 131 + 199(vec): 10(ptr) FunctionParameter + 201: Label + 890(param): 10(ptr) Variable Function + 891: 9(fvec3) Load 199(vec) + Store 890(param) 891 + 892: 9(fvec3) FunctionCall 163(TDSkinnedDeformVec(vf3;) 890(param) + Store 199(vec) 892 + 893: 9(fvec3) Load 199(vec) + ReturnValue 893 + FunctionEnd +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 1297 + + Capability Shader + Capability Sampled1D + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 336 429 458 485 + ExecutionMode 4 OriginUpperLeft + Source GLSL 460 + Name 4 "main" + Name 11 "TDColor(vf4;" + Name 10 "color" + Name 13 "TDCheckOrderIndTrans(" + Name 15 "TDCheckDiscard(" + Name 18 "TDDither(vf4;" + Name 17 "color" + Name 26 "TDFrontFacing(vf3;vf3;" + Name 24 "pos" + Name 25 "normal" + Name 34 "TDAttenuateLight(i1;f1;" + Name 32 "index" + Name 33 "lightDist" + Name 38 "TDAlphaTest(f1;" + Name 37 "alpha" + Name 43 "TDHardShadow(i1;vf3;" + Name 41 "lightIndex" + Name 42 "worldSpacePos" + Name 50 "TDSoftShadow(i1;vf3;i1;i1;" + Name 46 "lightIndex" + Name 47 "worldSpacePos" + Name 48 "samples" + Name 49 "steps" + Name 54 "TDSoftShadow(i1;vf3;" + Name 52 "lightIndex" + Name 53 "worldSpacePos" + Name 58 "TDShadow(i1;vf3;" + Name 56 "lightIndex" + Name 57 "worldSpacePos" + Name 64 "iTDRadicalInverse_VdC(u1;" + Name 63 "bits" + Name 70 "iTDHammersley(u1;u1;" + Name 68 "i" + Name 69 "N" + Name 77 "iTDImportanceSampleGGX(vf2;f1;vf3;" + Name 74 "Xi" + Name 75 "roughness2" + Name 76 "N" + Name 83 "iTDDistributionGGX(vf3;vf3;f1;" + Name 80 "normal" + Name 81 "half_vector" + Name 82 "roughness2" + Name 88 "iTDCalcF(vf3;f1;" + Name 86 "F0" + Name 87 "VdotH" + Name 94 "iTDCalcG(f1;f1;f1;" + Name 91 "NdotL" + Name 92 "NdotV" + Name 93 "k" + Name 96 "TDPBRResult" + MemberName 96(TDPBRResult) 0 "diffuse" + MemberName 96(TDPBRResult) 1 "specular" + MemberName 96(TDPBRResult) 2 "shadowStrength" + Name 107 "TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;" + Name 98 "index" + Name 99 "diffuseColor" + Name 100 "specularColor" + Name 101 "worldSpacePos" + Name 102 "normal" + Name 103 "shadowStrength" + Name 104 "shadowColor" + Name 105 "camVector" + Name 106 "roughness" + Name 122 "TDLightingPBR(vf3;vf3;f1;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;" + Name 110 "diffuseContrib" + Name 111 "specularContrib" + Name 112 "shadowStrengthOut" + Name 113 "index" + Name 114 "diffuseColor" + Name 115 "specularColor" + Name 116 "worldSpacePos" + Name 117 "normal" + Name 118 "shadowStrength" + Name 119 "shadowColor" + Name 120 "camVector" + Name 121 "roughness" + Name 136 "TDLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;" + Name 125 "diffuseContrib" + Name 126 "specularContrib" + Name 127 "index" + Name 128 "diffuseColor" + Name 129 "specularColor" + Name 130 "worldSpacePos" + Name 131 "normal" + Name 132 "shadowStrength" + Name 133 "shadowColor" + Name 134 "camVector" + Name 135 "roughness" + Name 146 "TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1;" + Name 139 "index" + Name 140 "diffuseColor" + Name 141 "specularColor" + Name 142 "normal" + Name 143 "camVector" + Name 144 "roughness" + Name 145 "ambientOcclusion" + Name 158 "TDEnvLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;f1;" + Name 149 "diffuseContrib" + Name 150 "specularContrib" + Name 151 "index" + Name 152 "diffuseColor" + Name 153 "specularColor" + Name 154 "normal" + Name 155 "camVector" + Name 156 "roughness" + Name 157 "ambientOcclusion" + Name 160 "TDPhongResult" + MemberName 160(TDPhongResult) 0 "diffuse" + MemberName 160(TDPhongResult) 1 "specular" + MemberName 160(TDPhongResult) 2 "specular2" + MemberName 160(TDPhongResult) 3 "shadowStrength" + Name 170 "TDLighting(i1;vf3;vf3;f1;vf3;vf3;f1;f1;" + Name 162 "index" + Name 163 "worldSpacePos" + Name 164 "normal" + Name 165 "shadowStrength" + Name 166 "shadowColor" + Name 167 "camVector" + Name 168 "shininess" + Name 169 "shininess2" + Name 185 "TDLighting(vf3;vf3;vf3;f1;i1;vf3;vf3;f1;vf3;vf3;f1;f1;" + Name 173 "diffuseContrib" + Name 174 "specularContrib" + Name 175 "specularContrib2" + Name 176 "shadowStrengthOut" + Name 177 "index" + Name 178 "worldSpacePos" + Name 179 "normal" + Name 180 "shadowStrength" + Name 181 "shadowColor" + Name 182 "camVector" + Name 183 "shininess" + Name 184 "shininess2" + Name 199 "TDLighting(vf3;vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;f1;" + Name 188 "diffuseContrib" + Name 189 "specularContrib" + Name 190 "specularContrib2" + Name 191 "index" + Name 192 "worldSpacePos" + Name 193 "normal" + Name 194 "shadowStrength" + Name 195 "shadowColor" + Name 196 "camVector" + Name 197 "shininess" + Name 198 "shininess2" + Name 211 "TDLighting(vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;" + Name 202 "diffuseContrib" + Name 203 "specularContrib" + Name 204 "index" + Name 205 "worldSpacePos" + Name 206 "normal" + Name 207 "shadowStrength" + Name 208 "shadowColor" + Name 209 "camVector" + Name 210 "shininess" + Name 223 "TDLighting(vf3;vf3;vf3;i1;vf3;vf3;vf3;f1;f1;" + Name 214 "diffuseContrib" + Name 215 "specularContrib" + Name 216 "specularContrib2" + Name 217 "index" + Name 218 "worldSpacePos" + Name 219 "normal" + Name 220 "camVector" + Name 221 "shininess" + Name 222 "shininess2" + Name 233 "TDLighting(vf3;vf3;i1;vf3;vf3;vf3;f1;" + Name 226 "diffuseContrib" + Name 227 "specularContrib" + Name 228 "index" + Name 229 "worldSpacePos" + Name 230 "normal" + Name 231 "camVector" + Name 232 "shininess" + Name 240 "TDLighting(vf3;i1;vf3;vf3;" + Name 236 "diffuseContrib" + Name 237 "index" + Name 238 "worldSpacePos" + Name 239 "normal" + Name 249 "TDLighting(vf3;i1;vf3;vf3;f1;vf3;" + Name 243 "diffuseContrib" + Name 244 "index" + Name 245 "worldSpacePos" + Name 246 "normal" + Name 247 "shadowStrength" + Name 248 "shadowColor" + Name 255 "TDProjMap(i1;vf3;vf4;" + Name 252 "index" + Name 253 "worldSpacePos" + Name 254 "defaultColor" + Name 261 "TDFog(vf4;vf3;i1;" + Name 258 "color" + Name 259 "lightingSpacePosition" + Name 260 "cameraIndex" + Name 266 "TDFog(vf4;vf3;" + Name 264 "color" + Name 265 "lightingSpacePosition" + Name 271 "TDInstanceTexCoord(i1;vf3;" + Name 269 "index" + Name 270 "t" + Name 275 "TDInstanceActive(i1;" + Name 274 "index" + Name 281 "iTDInstanceTranslate(i1;b1;" + Name 279 "index" + Name 280 "instanceActive" + Name 285 "TDInstanceTranslate(i1;" + Name 284 "index" + Name 290 "TDInstanceRotateMat(i1;" + Name 289 "index" + Name 293 "TDInstanceScale(i1;" + Name 292 "index" + Name 296 "TDInstancePivot(i1;" + Name 295 "index" + Name 299 "TDInstanceRotTo(i1;" + Name 298 "index" + Name 302 "TDInstanceRotUp(i1;" + Name 301 "index" + Name 307 "TDInstanceMat(i1;" + Name 306 "id" + Name 310 "TDInstanceMat3(i1;" + Name 309 "id" + Name 313 "TDInstanceMat3ForNorm(i1;" + Name 312 "id" + Name 318 "TDInstanceColor(i1;vf4;" + Name 316 "index" + Name 317 "curColor" + Name 321 "TDOutputSwizzle(vf4;" + Name 320 "c" + Name 327 "TDOutputSwizzle(vu4;" + Name 326 "c" + Name 330 "outcol" + Name 333 "texCoord0" + Name 334 "Vertex" + MemberName 334(Vertex) 0 "color" + MemberName 334(Vertex) 1 "worldSpacePos" + MemberName 334(Vertex) 2 "texCoord0" + MemberName 334(Vertex) 3 "cameraIndex" + MemberName 334(Vertex) 4 "instance" + Name 336 "iVert" + Name 341 "actualTexZ" + Name 349 "instanceLoop" + Name 359 "colorMapColor" + Name 363 "sColorMap" + Name 367 "red" + Name 374 "gl_DefaultUniformBlock" + MemberName 374(gl_DefaultUniformBlock) 0 "uTDInstanceIDOffset" + MemberName 374(gl_DefaultUniformBlock) 1 "uTDNumInstances" + MemberName 374(gl_DefaultUniformBlock) 2 "uTDAlphaTestVal" + MemberName 374(gl_DefaultUniformBlock) 3 "uConstant" + MemberName 374(gl_DefaultUniformBlock) 4 "uShadowStrength" + MemberName 374(gl_DefaultUniformBlock) 5 "uShadowColor" + MemberName 374(gl_DefaultUniformBlock) 6 "uDiffuseColor" + MemberName 374(gl_DefaultUniformBlock) 7 "uAmbientColor" + Name 376 "" + Name 401 "alpha" + Name 409 "param" + Name 422 "param" + Name 429 "oFragColor" + Name 430 "param" + Name 435 "i" + Name 452 "d" + Name 456 "sTDNoiseMap" + Name 458 "gl_FragCoord" + Name 485 "gl_FrontFacing" + Name 555 "param" + Name 561 "a" + Name 563 "phi" + Name 568 "cosTheta" + Name 582 "sinTheta" + Name 588 "H" + Name 601 "upVector" + Name 612 "tangentX" + Name 617 "tangentY" + Name 621 "worldResult" + Name 639 "NdotH" + Name 645 "alpha2" + Name 649 "denom" + Name 686 "Gl" + Name 694 "Gv" + Name 708 "res" + Name 712 "res" + Name 713 "param" + Name 715 "param" + Name 717 "param" + Name 719 "param" + Name 721 "param" + Name 723 "param" + Name 725 "param" + Name 727 "param" + Name 729 "param" + Name 738 "res" + Name 739 "param" + Name 741 "param" + Name 743 "param" + Name 745 "param" + Name 747 "param" + Name 749 "param" + Name 751 "param" + Name 753 "param" + Name 755 "param" + Name 762 "res" + Name 766 "res" + Name 767 "param" + Name 769 "param" + Name 771 "param" + Name 773 "param" + Name 775 "param" + Name 777 "param" + Name 779 "param" + Name 790 "res" + Name 804 "res" + Name 822 "res" + Name 838 "res" + Name 852 "res" + Name 868 "res" + Name 882 "res" + Name 894 "res" + Name 917 "param" + Name 919 "param" + Name 921 "param" + Name 925 "coord" + Name 927 "samp" + Name 931 "sTDInstanceTexCoord" + Name 936 "v" + Name 955 "coord" + Name 957 "samp" + Name 958 "sTDInstanceT" + Name 963 "v" + Name 970 "origIndex" + Name 976 "coord" + Name 978 "samp" + Name 983 "v" + Name 1003 "coord" + Name 1005 "samp" + Name 1010 "v" + Name 1027 "v" + Name 1029 "m" + Name 1039 "v" + Name 1047 "v" + Name 1055 "v" + Name 1063 "v" + Name 1067 "instanceActive" + Name 1069 "t" + Name 1070 "param" + Name 1072 "param" + Name 1082 "m" + Name 1088 "tt" + Name 1201 "m" + Name 1205 "m" + Name 1206 "param" + Name 1216 "coord" + Name 1218 "samp" + Name 1219 "sTDInstanceColor" + Name 1224 "v" + Name 1253 "TDMatrix" + MemberName 1253(TDMatrix) 0 "world" + MemberName 1253(TDMatrix) 1 "worldInverse" + MemberName 1253(TDMatrix) 2 "worldCam" + MemberName 1253(TDMatrix) 3 "worldCamInverse" + MemberName 1253(TDMatrix) 4 "cam" + MemberName 1253(TDMatrix) 5 "camInverse" + MemberName 1253(TDMatrix) 6 "camProj" + MemberName 1253(TDMatrix) 7 "camProjInverse" + MemberName 1253(TDMatrix) 8 "proj" + MemberName 1253(TDMatrix) 9 "projInverse" + MemberName 1253(TDMatrix) 10 "worldCamProj" + MemberName 1253(TDMatrix) 11 "worldCamProjInverse" + MemberName 1253(TDMatrix) 12 "quadReproject" + MemberName 1253(TDMatrix) 13 "worldForNormals" + MemberName 1253(TDMatrix) 14 "camForNormals" + MemberName 1253(TDMatrix) 15 "worldCamForNormals" + Name 1255 "TDMatricesBlock" + MemberName 1255(TDMatricesBlock) 0 "uTDMats" + Name 1257 "" + Name 1258 "TDCameraInfo" + MemberName 1258(TDCameraInfo) 0 "nearFar" + MemberName 1258(TDCameraInfo) 1 "fog" + MemberName 1258(TDCameraInfo) 2 "fogColor" + MemberName 1258(TDCameraInfo) 3 "renderTOPCameraIndex" + Name 1260 "TDCameraInfoBlock" + MemberName 1260(TDCameraInfoBlock) 0 "uTDCamInfos" + Name 1262 "" + Name 1263 "TDGeneral" + MemberName 1263(TDGeneral) 0 "ambientColor" + MemberName 1263(TDGeneral) 1 "nearFar" + MemberName 1263(TDGeneral) 2 "viewport" + MemberName 1263(TDGeneral) 3 "viewportRes" + MemberName 1263(TDGeneral) 4 "fog" + MemberName 1263(TDGeneral) 5 "fogColor" + Name 1264 "TDGeneralBlock" + MemberName 1264(TDGeneralBlock) 0 "uTDGeneral" + Name 1266 "" + Name 1270 "sTDSineLookup" + Name 1271 "sTDWhite2D" + Name 1275 "sTDWhite3D" + Name 1276 "sTDWhite2DArray" + Name 1280 "sTDWhiteCube" + Name 1281 "TDLight" + MemberName 1281(TDLight) 0 "position" + MemberName 1281(TDLight) 1 "direction" + MemberName 1281(TDLight) 2 "diffuse" + MemberName 1281(TDLight) 3 "nearFar" + MemberName 1281(TDLight) 4 "lightSize" + MemberName 1281(TDLight) 5 "misc" + MemberName 1281(TDLight) 6 "coneLookupScaleBias" + MemberName 1281(TDLight) 7 "attenScaleBiasRoll" + MemberName 1281(TDLight) 8 "shadowMapMatrix" + MemberName 1281(TDLight) 9 "shadowMapCamMatrix" + MemberName 1281(TDLight) 10 "shadowMapRes" + MemberName 1281(TDLight) 11 "projMapMatrix" + Name 1283 "TDLightBlock" + MemberName 1283(TDLightBlock) 0 "uTDLights" + Name 1285 "" + Name 1286 "TDEnvLight" + MemberName 1286(TDEnvLight) 0 "color" + MemberName 1286(TDEnvLight) 1 "rotate" + Name 1288 "TDEnvLightBlock" + MemberName 1288(TDEnvLightBlock) 0 "uTDEnvLights" + Name 1290 "" + Name 1293 "TDEnvLightBuffer" + MemberName 1293(TDEnvLightBuffer) 0 "shCoeffs" + Name 1296 "uTDEnvLightBuffers" + MemberDecorate 334(Vertex) 3 Flat + MemberDecorate 334(Vertex) 4 Flat + Decorate 334(Vertex) Block + Decorate 336(iVert) Location 0 + Decorate 363(sColorMap) DescriptorSet 0 + Decorate 363(sColorMap) Binding 2 + MemberDecorate 374(gl_DefaultUniformBlock) 0 Offset 0 + MemberDecorate 374(gl_DefaultUniformBlock) 1 Offset 4 + MemberDecorate 374(gl_DefaultUniformBlock) 2 Offset 8 + MemberDecorate 374(gl_DefaultUniformBlock) 3 Offset 16 + MemberDecorate 374(gl_DefaultUniformBlock) 4 Offset 28 + MemberDecorate 374(gl_DefaultUniformBlock) 5 Offset 32 + MemberDecorate 374(gl_DefaultUniformBlock) 6 Offset 48 + MemberDecorate 374(gl_DefaultUniformBlock) 7 Offset 64 + Decorate 374(gl_DefaultUniformBlock) Block + Decorate 376 DescriptorSet 0 + Decorate 376 Binding 0 + Decorate 429(oFragColor) Location 0 + Decorate 456(sTDNoiseMap) DescriptorSet 0 + Decorate 456(sTDNoiseMap) Binding 3 + Decorate 458(gl_FragCoord) BuiltIn FragCoord + Decorate 485(gl_FrontFacing) BuiltIn FrontFacing + Decorate 931(sTDInstanceTexCoord) DescriptorSet 0 + Decorate 931(sTDInstanceTexCoord) Binding 16 + Decorate 958(sTDInstanceT) DescriptorSet 0 + Decorate 958(sTDInstanceT) Binding 15 + Decorate 1219(sTDInstanceColor) DescriptorSet 0 + Decorate 1219(sTDInstanceColor) Binding 17 + MemberDecorate 1253(TDMatrix) 0 ColMajor + MemberDecorate 1253(TDMatrix) 0 Offset 0 + MemberDecorate 1253(TDMatrix) 0 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 1 ColMajor + MemberDecorate 1253(TDMatrix) 1 Offset 64 + MemberDecorate 1253(TDMatrix) 1 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 2 ColMajor + MemberDecorate 1253(TDMatrix) 2 Offset 128 + MemberDecorate 1253(TDMatrix) 2 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 3 ColMajor + MemberDecorate 1253(TDMatrix) 3 Offset 192 + MemberDecorate 1253(TDMatrix) 3 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 4 ColMajor + MemberDecorate 1253(TDMatrix) 4 Offset 256 + MemberDecorate 1253(TDMatrix) 4 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 5 ColMajor + MemberDecorate 1253(TDMatrix) 5 Offset 320 + MemberDecorate 1253(TDMatrix) 5 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 6 ColMajor + MemberDecorate 1253(TDMatrix) 6 Offset 384 + MemberDecorate 1253(TDMatrix) 6 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 7 ColMajor + MemberDecorate 1253(TDMatrix) 7 Offset 448 + MemberDecorate 1253(TDMatrix) 7 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 8 ColMajor + MemberDecorate 1253(TDMatrix) 8 Offset 512 + MemberDecorate 1253(TDMatrix) 8 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 9 ColMajor + MemberDecorate 1253(TDMatrix) 9 Offset 576 + MemberDecorate 1253(TDMatrix) 9 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 10 ColMajor + MemberDecorate 1253(TDMatrix) 10 Offset 640 + MemberDecorate 1253(TDMatrix) 10 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 11 ColMajor + MemberDecorate 1253(TDMatrix) 11 Offset 704 + MemberDecorate 1253(TDMatrix) 11 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 12 ColMajor + MemberDecorate 1253(TDMatrix) 12 Offset 768 + MemberDecorate 1253(TDMatrix) 12 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 13 ColMajor + MemberDecorate 1253(TDMatrix) 13 Offset 832 + MemberDecorate 1253(TDMatrix) 13 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 14 ColMajor + MemberDecorate 1253(TDMatrix) 14 Offset 880 + MemberDecorate 1253(TDMatrix) 14 MatrixStride 16 + MemberDecorate 1253(TDMatrix) 15 ColMajor + MemberDecorate 1253(TDMatrix) 15 Offset 928 + MemberDecorate 1253(TDMatrix) 15 MatrixStride 16 + Decorate 1254 ArrayStride 976 + MemberDecorate 1255(TDMatricesBlock) 0 Offset 0 + Decorate 1255(TDMatricesBlock) Block + Decorate 1257 DescriptorSet 0 + Decorate 1257 Binding 1 + MemberDecorate 1258(TDCameraInfo) 0 Offset 0 + MemberDecorate 1258(TDCameraInfo) 1 Offset 16 + MemberDecorate 1258(TDCameraInfo) 2 Offset 32 + MemberDecorate 1258(TDCameraInfo) 3 Offset 48 + Decorate 1259 ArrayStride 64 + MemberDecorate 1260(TDCameraInfoBlock) 0 Offset 0 + Decorate 1260(TDCameraInfoBlock) Block + Decorate 1262 DescriptorSet 0 + Decorate 1262 Binding 0 + MemberDecorate 1263(TDGeneral) 0 Offset 0 + MemberDecorate 1263(TDGeneral) 1 Offset 16 + MemberDecorate 1263(TDGeneral) 2 Offset 32 + MemberDecorate 1263(TDGeneral) 3 Offset 48 + MemberDecorate 1263(TDGeneral) 4 Offset 64 + MemberDecorate 1263(TDGeneral) 5 Offset 80 + MemberDecorate 1264(TDGeneralBlock) 0 Offset 0 + Decorate 1264(TDGeneralBlock) Block + Decorate 1266 DescriptorSet 0 + Decorate 1266 Binding 0 + Decorate 1270(sTDSineLookup) DescriptorSet 0 + Decorate 1270(sTDSineLookup) Binding 0 + Decorate 1271(sTDWhite2D) DescriptorSet 0 + Decorate 1271(sTDWhite2D) Binding 0 + Decorate 1275(sTDWhite3D) DescriptorSet 0 + Decorate 1275(sTDWhite3D) Binding 0 + Decorate 1276(sTDWhite2DArray) DescriptorSet 0 + Decorate 1276(sTDWhite2DArray) Binding 0 + Decorate 1280(sTDWhiteCube) DescriptorSet 0 + Decorate 1280(sTDWhiteCube) Binding 0 + MemberDecorate 1281(TDLight) 0 Offset 0 + MemberDecorate 1281(TDLight) 1 Offset 16 + MemberDecorate 1281(TDLight) 2 Offset 32 + MemberDecorate 1281(TDLight) 3 Offset 48 + MemberDecorate 1281(TDLight) 4 Offset 64 + MemberDecorate 1281(TDLight) 5 Offset 80 + MemberDecorate 1281(TDLight) 6 Offset 96 + MemberDecorate 1281(TDLight) 7 Offset 112 + MemberDecorate 1281(TDLight) 8 ColMajor + MemberDecorate 1281(TDLight) 8 Offset 128 + MemberDecorate 1281(TDLight) 8 MatrixStride 16 + MemberDecorate 1281(TDLight) 9 ColMajor + MemberDecorate 1281(TDLight) 9 Offset 192 + MemberDecorate 1281(TDLight) 9 MatrixStride 16 + MemberDecorate 1281(TDLight) 10 Offset 256 + MemberDecorate 1281(TDLight) 11 ColMajor + MemberDecorate 1281(TDLight) 11 Offset 272 + MemberDecorate 1281(TDLight) 11 MatrixStride 16 + Decorate 1282 ArrayStride 336 + MemberDecorate 1283(TDLightBlock) 0 Offset 0 + Decorate 1283(TDLightBlock) Block + Decorate 1285 DescriptorSet 0 + Decorate 1285 Binding 0 + MemberDecorate 1286(TDEnvLight) 0 Offset 0 + MemberDecorate 1286(TDEnvLight) 1 ColMajor + MemberDecorate 1286(TDEnvLight) 1 Offset 16 + MemberDecorate 1286(TDEnvLight) 1 MatrixStride 16 + Decorate 1287 ArrayStride 64 + MemberDecorate 1288(TDEnvLightBlock) 0 Offset 0 + Decorate 1288(TDEnvLightBlock) Block + Decorate 1290 DescriptorSet 0 + Decorate 1290 Binding 0 + Decorate 1292 ArrayStride 16 + MemberDecorate 1293(TDEnvLightBuffer) 0 Restrict + MemberDecorate 1293(TDEnvLightBuffer) 0 NonWritable + MemberDecorate 1293(TDEnvLightBuffer) 0 Offset 0 + Decorate 1293(TDEnvLightBuffer) BufferBlock + Decorate 1296(uTDEnvLightBuffers) DescriptorSet 0 + Decorate 1296(uTDEnvLightBuffers) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Function 7(fvec4) + 9: TypeFunction 7(fvec4) 8(ptr) + 20: TypeVector 6(float) 3 + 21: TypePointer Function 20(fvec3) + 22: TypeBool + 23: TypeFunction 22(bool) 21(ptr) 21(ptr) + 28: TypeInt 32 1 + 29: TypePointer Function 28(int) + 30: TypePointer Function 6(float) + 31: TypeFunction 6(float) 29(ptr) 30(ptr) + 36: TypeFunction 2 30(ptr) + 40: TypeFunction 6(float) 29(ptr) 21(ptr) + 45: TypeFunction 6(float) 29(ptr) 21(ptr) 29(ptr) 29(ptr) + 60: TypeInt 32 0 + 61: TypePointer Function 60(int) + 62: TypeFunction 6(float) 61(ptr) + 66: TypeVector 6(float) 2 + 67: TypeFunction 66(fvec2) 61(ptr) 61(ptr) + 72: TypePointer Function 66(fvec2) + 73: TypeFunction 20(fvec3) 72(ptr) 30(ptr) 21(ptr) + 79: TypeFunction 6(float) 21(ptr) 21(ptr) 30(ptr) + 85: TypeFunction 20(fvec3) 21(ptr) 30(ptr) + 90: TypeFunction 6(float) 30(ptr) 30(ptr) 30(ptr) + 96(TDPBRResult): TypeStruct 20(fvec3) 20(fvec3) 6(float) + 97: TypeFunction 96(TDPBRResult) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) + 109: TypeFunction 2 21(ptr) 21(ptr) 30(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) + 124: TypeFunction 2 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) + 138: TypeFunction 96(TDPBRResult) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr) + 148: TypeFunction 2 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr) +160(TDPhongResult): TypeStruct 20(fvec3) 20(fvec3) 20(fvec3) 6(float) + 161: TypeFunction 160(TDPhongResult) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr) + 172: TypeFunction 2 21(ptr) 21(ptr) 21(ptr) 30(ptr) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr) + 187: TypeFunction 2 21(ptr) 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr) + 201: TypeFunction 2 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) 21(ptr) 30(ptr) + 213: TypeFunction 2 21(ptr) 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) 30(ptr) + 225: TypeFunction 2 21(ptr) 21(ptr) 29(ptr) 21(ptr) 21(ptr) 21(ptr) 30(ptr) + 235: TypeFunction 2 21(ptr) 29(ptr) 21(ptr) 21(ptr) + 242: TypeFunction 2 21(ptr) 29(ptr) 21(ptr) 21(ptr) 30(ptr) 21(ptr) + 251: TypeFunction 7(fvec4) 29(ptr) 21(ptr) 8(ptr) + 257: TypeFunction 7(fvec4) 8(ptr) 21(ptr) 29(ptr) + 263: TypeFunction 7(fvec4) 8(ptr) 21(ptr) + 268: TypeFunction 20(fvec3) 29(ptr) 21(ptr) + 273: TypeFunction 22(bool) 29(ptr) + 277: TypePointer Function 22(bool) + 278: TypeFunction 20(fvec3) 29(ptr) 277(ptr) + 283: TypeFunction 20(fvec3) 29(ptr) + 287: TypeMatrix 20(fvec3) 3 + 288: TypeFunction 287 29(ptr) + 304: TypeMatrix 7(fvec4) 4 + 305: TypeFunction 304 29(ptr) + 315: TypeFunction 7(fvec4) 29(ptr) 8(ptr) + 323: TypeVector 60(int) 4 + 324: TypePointer Function 323(ivec4) + 325: TypeFunction 323(ivec4) 324(ptr) + 331: 6(float) Constant 0 + 332: 7(fvec4) ConstantComposite 331 331 331 331 + 334(Vertex): TypeStruct 7(fvec4) 20(fvec3) 20(fvec3) 28(int) 28(int) + 335: TypePointer Input 334(Vertex) + 336(iVert): 335(ptr) Variable Input + 337: 28(int) Constant 2 + 338: TypePointer Input 20(fvec3) + 342: 60(int) Constant 2 + 347: 6(float) Constant 1157627904 + 353: 28(int) Constant 2048 + 360: TypeImage 6(float) 2D array sampled format:Unknown + 361: TypeSampledImage 360 + 362: TypePointer UniformConstant 361 + 363(sColorMap): 362(ptr) Variable UniformConstant +374(gl_DefaultUniformBlock): TypeStruct 28(int) 28(int) 6(float) 20(fvec3) 6(float) 20(fvec3) 7(fvec4) 7(fvec4) + 375: TypePointer Uniform 374(gl_DefaultUniformBlock) + 376: 375(ptr) Variable Uniform + 377: 28(int) Constant 3 + 378: TypePointer Uniform 20(fvec3) + 381: 28(int) Constant 0 + 382: TypePointer Input 7(fvec4) + 390: 60(int) Constant 0 + 393: 60(int) Constant 1 + 402: 60(int) Constant 3 + 403: TypePointer Input 6(float) + 427: TypeArray 7(fvec4) 393 + 428: TypePointer Output 427 + 429(oFragColor): 428(ptr) Variable Output + 433: TypePointer Output 7(fvec4) + 436: 28(int) Constant 1 + 453: TypeImage 6(float) 2D sampled format:Unknown + 454: TypeSampledImage 453 + 455: TypePointer UniformConstant 454 +456(sTDNoiseMap): 455(ptr) Variable UniformConstant +458(gl_FragCoord): 382(ptr) Variable Input + 461: 6(float) Constant 1132462080 + 466: 6(float) Constant 1056964608 + 484: TypePointer Input 22(bool) +485(gl_FrontFacing): 484(ptr) Variable Input + 489: 6(float) Constant 1065353216 + 501: 60(int) Constant 16 + 507: 60(int) Constant 1431655765 + 511: 60(int) Constant 2863311530 + 516: 60(int) Constant 858993459 + 520: 60(int) Constant 3435973836 + 525: 60(int) Constant 252645135 + 527: 60(int) Constant 4 + 530: 60(int) Constant 4042322160 + 535: 60(int) Constant 16711935 + 537: 60(int) Constant 8 + 540: 60(int) Constant 4278255360 + 546: 6(float) Constant 796917760 + 564: 6(float) Constant 1086918619 + 605: 6(float) Constant 1065336439 + 607: 20(fvec3) ConstantComposite 331 331 489 + 608: 20(fvec3) ConstantComposite 489 331 331 + 609: TypeVector 22(bool) 3 + 643: 6(float) Constant 897988541 + 657: 6(float) Constant 841731191 + 661: 6(float) Constant 1078530011 + 670: 20(fvec3) ConstantComposite 489 489 489 + 673: 6(float) Constant 1073741824 + 674: 6(float) Constant 3232874585 + 677: 6(float) Constant 1088386572 + 707: TypePointer Function 96(TDPBRResult) + 789: TypePointer Function 160(TDPhongResult) + 791: 20(fvec3) ConstantComposite 331 331 331 + 928: TypeImage 6(float) Buffer sampled format:Unknown + 929: TypeSampledImage 928 + 930: TypePointer UniformConstant 929 +931(sTDInstanceTexCoord): 930(ptr) Variable UniformConstant + 950: TypePointer Uniform 28(int) +958(sTDInstanceT): 930(ptr) Variable UniformConstant + 1028: TypePointer Function 287 + 1030: 20(fvec3) ConstantComposite 331 489 331 + 1031: 287 ConstantComposite 608 1030 607 + 1068: 22(bool) ConstantTrue + 1079: 304 ConstantComposite 332 332 332 332 + 1081: TypePointer Function 304 + 1083: 7(fvec4) ConstantComposite 489 331 331 331 + 1084: 7(fvec4) ConstantComposite 331 489 331 331 + 1085: 7(fvec4) ConstantComposite 331 331 489 331 + 1086: 7(fvec4) ConstantComposite 331 331 331 489 + 1087: 304 ConstantComposite 1083 1084 1085 1086 +1219(sTDInstanceColor): 930(ptr) Variable UniformConstant + 1253(TDMatrix): TypeStruct 304 304 304 304 304 304 304 304 304 304 304 304 304 287 287 287 + 1254: TypeArray 1253(TDMatrix) 393 +1255(TDMatricesBlock): TypeStruct 1254 + 1256: TypePointer Uniform 1255(TDMatricesBlock) + 1257: 1256(ptr) Variable Uniform +1258(TDCameraInfo): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 28(int) + 1259: TypeArray 1258(TDCameraInfo) 393 +1260(TDCameraInfoBlock): TypeStruct 1259 + 1261: TypePointer Uniform 1260(TDCameraInfoBlock) + 1262: 1261(ptr) Variable Uniform + 1263(TDGeneral): TypeStruct 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) +1264(TDGeneralBlock): TypeStruct 1263(TDGeneral) + 1265: TypePointer Uniform 1264(TDGeneralBlock) + 1266: 1265(ptr) Variable Uniform + 1267: TypeImage 6(float) 1D sampled format:Unknown + 1268: TypeSampledImage 1267 + 1269: TypePointer UniformConstant 1268 +1270(sTDSineLookup): 1269(ptr) Variable UniformConstant +1271(sTDWhite2D): 455(ptr) Variable UniformConstant + 1272: TypeImage 6(float) 3D sampled format:Unknown + 1273: TypeSampledImage 1272 + 1274: TypePointer UniformConstant 1273 +1275(sTDWhite3D): 1274(ptr) Variable UniformConstant +1276(sTDWhite2DArray): 362(ptr) Variable UniformConstant + 1277: TypeImage 6(float) Cube sampled format:Unknown + 1278: TypeSampledImage 1277 + 1279: TypePointer UniformConstant 1278 +1280(sTDWhiteCube): 1279(ptr) Variable UniformConstant + 1281(TDLight): TypeStruct 7(fvec4) 20(fvec3) 20(fvec3) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 7(fvec4) 304 304 7(fvec4) 304 + 1282: TypeArray 1281(TDLight) 393 +1283(TDLightBlock): TypeStruct 1282 + 1284: TypePointer Uniform 1283(TDLightBlock) + 1285: 1284(ptr) Variable Uniform +1286(TDEnvLight): TypeStruct 20(fvec3) 287 + 1287: TypeArray 1286(TDEnvLight) 393 +1288(TDEnvLightBlock): TypeStruct 1287 + 1289: TypePointer Uniform 1288(TDEnvLightBlock) + 1290: 1289(ptr) Variable Uniform + 1291: 60(int) Constant 9 + 1292: TypeArray 20(fvec3) 1291 +1293(TDEnvLightBuffer): TypeStruct 1292 + 1294: TypeArray 1293(TDEnvLightBuffer) 393 + 1295: TypePointer Uniform 1294 +1296(uTDEnvLightBuffers): 1295(ptr) Variable Uniform + 4(main): 2 Function None 3 + 5: Label + 330(outcol): 8(ptr) Variable Function + 333(texCoord0): 21(ptr) Variable Function + 341(actualTexZ): 30(ptr) Variable Function +349(instanceLoop): 30(ptr) Variable Function +359(colorMapColor): 8(ptr) Variable Function + 367(red): 30(ptr) Variable Function + 401(alpha): 30(ptr) Variable Function + 409(param): 8(ptr) Variable Function + 422(param): 30(ptr) Variable Function + 430(param): 8(ptr) Variable Function + 435(i): 29(ptr) Variable Function + 329: 2 FunctionCall 15(TDCheckDiscard() + Store 330(outcol) 332 + 339: 338(ptr) AccessChain 336(iVert) 337 + 340: 20(fvec3) Load 339 + Store 333(texCoord0) 340 + 343: 30(ptr) AccessChain 333(texCoord0) 342 + 344: 6(float) Load 343 + 345: 28(int) ConvertFToS 344 + 346: 6(float) ConvertSToF 345 + 348: 6(float) FMod 346 347 + Store 341(actualTexZ) 348 + 350: 30(ptr) AccessChain 333(texCoord0) 342 + 351: 6(float) Load 350 + 352: 28(int) ConvertFToS 351 + 354: 28(int) SDiv 352 353 + 355: 6(float) ConvertSToF 354 + 356: 6(float) ExtInst 1(GLSL.std.450) 8(Floor) 355 + Store 349(instanceLoop) 356 + 357: 6(float) Load 341(actualTexZ) + 358: 30(ptr) AccessChain 333(texCoord0) 342 + Store 358 357 + 364: 361 Load 363(sColorMap) + 365: 20(fvec3) Load 333(texCoord0) + 366: 7(fvec4) ImageSampleImplicitLod 364 365 + Store 359(colorMapColor) 366 + 368: 6(float) Load 349(instanceLoop) + 369: 28(int) ConvertFToS 368 + 370: 30(ptr) AccessChain 359(colorMapColor) 369 + 371: 6(float) Load 370 + Store 367(red) 371 + 372: 6(float) Load 367(red) + 373: 7(fvec4) CompositeConstruct 372 372 372 372 + Store 359(colorMapColor) 373 + 379: 378(ptr) AccessChain 376 377 + 380: 20(fvec3) Load 379 + 383: 382(ptr) AccessChain 336(iVert) 381 + 384: 7(fvec4) Load 383 + 385: 20(fvec3) VectorShuffle 384 384 0 1 2 + 386: 20(fvec3) FMul 380 385 + 387: 7(fvec4) Load 330(outcol) + 388: 20(fvec3) VectorShuffle 387 387 0 1 2 + 389: 20(fvec3) FAdd 388 386 + 391: 30(ptr) AccessChain 330(outcol) 390 + 392: 6(float) CompositeExtract 389 0 + Store 391 392 + 394: 30(ptr) AccessChain 330(outcol) 393 + 395: 6(float) CompositeExtract 389 1 + Store 394 395 + 396: 30(ptr) AccessChain 330(outcol) 342 + 397: 6(float) CompositeExtract 389 2 + Store 396 397 + 398: 7(fvec4) Load 359(colorMapColor) + 399: 7(fvec4) Load 330(outcol) + 400: 7(fvec4) FMul 399 398 + Store 330(outcol) 400 + 404: 403(ptr) AccessChain 336(iVert) 381 402 + 405: 6(float) Load 404 + 406: 30(ptr) AccessChain 359(colorMapColor) 402 + 407: 6(float) Load 406 + 408: 6(float) FMul 405 407 + Store 401(alpha) 408 + 410: 7(fvec4) Load 330(outcol) + Store 409(param) 410 + 411: 7(fvec4) FunctionCall 18(TDDither(vf4;) 409(param) + Store 330(outcol) 411 + 412: 6(float) Load 401(alpha) + 413: 7(fvec4) Load 330(outcol) + 414: 20(fvec3) VectorShuffle 413 413 0 1 2 + 415: 20(fvec3) VectorTimesScalar 414 412 + 416: 30(ptr) AccessChain 330(outcol) 390 + 417: 6(float) CompositeExtract 415 0 + Store 416 417 + 418: 30(ptr) AccessChain 330(outcol) 393 + 419: 6(float) CompositeExtract 415 1 + Store 418 419 + 420: 30(ptr) AccessChain 330(outcol) 342 + 421: 6(float) CompositeExtract 415 2 + Store 420 421 + 423: 6(float) Load 401(alpha) + Store 422(param) 423 + 424: 2 FunctionCall 38(TDAlphaTest(f1;) 422(param) + 425: 6(float) Load 401(alpha) + 426: 30(ptr) AccessChain 330(outcol) 402 + Store 426 425 + 431: 7(fvec4) Load 330(outcol) + Store 430(param) 431 + 432: 7(fvec4) FunctionCall 321(TDOutputSwizzle(vf4;) 430(param) + 434: 433(ptr) AccessChain 429(oFragColor) 381 + Store 434 432 + Store 435(i) 436 + Branch 437 + 437: Label + LoopMerge 439 440 None + Branch 441 + 441: Label + 442: 28(int) Load 435(i) + 443: 22(bool) SLessThan 442 436 + BranchConditional 443 438 439 + 438: Label + 444: 28(int) Load 435(i) + 445: 433(ptr) AccessChain 429(oFragColor) 444 + Store 445 332 + Branch 440 + 440: Label + 446: 28(int) Load 435(i) + 447: 28(int) IAdd 446 436 + Store 435(i) 447 + Branch 437 + 439: Label + Return + FunctionEnd +11(TDColor(vf4;): 7(fvec4) Function None 9 + 10(color): 8(ptr) FunctionParameter + 12: Label + 448: 7(fvec4) Load 10(color) + ReturnValue 448 + FunctionEnd +13(TDCheckOrderIndTrans(): 2 Function None 3 + 14: Label + Return + FunctionEnd +15(TDCheckDiscard(): 2 Function None 3 + 16: Label + 451: 2 FunctionCall 13(TDCheckOrderIndTrans() + Return + FunctionEnd +18(TDDither(vf4;): 7(fvec4) Function None 9 + 17(color): 8(ptr) FunctionParameter + 19: Label + 452(d): 30(ptr) Variable Function + 457: 454 Load 456(sTDNoiseMap) + 459: 7(fvec4) Load 458(gl_FragCoord) + 460: 66(fvec2) VectorShuffle 459 459 0 1 + 462: 66(fvec2) CompositeConstruct 461 461 + 463: 66(fvec2) FDiv 460 462 + 464: 7(fvec4) ImageSampleImplicitLod 457 463 + 465: 6(float) CompositeExtract 464 0 + Store 452(d) 465 + 467: 6(float) Load 452(d) + 468: 6(float) FSub 467 466 + Store 452(d) 468 + 469: 6(float) Load 452(d) + 470: 6(float) FDiv 469 461 + Store 452(d) 470 + 471: 7(fvec4) Load 17(color) + 472: 20(fvec3) VectorShuffle 471 471 0 1 2 + 473: 6(float) Load 452(d) + 474: 20(fvec3) CompositeConstruct 473 473 473 + 475: 20(fvec3) FAdd 472 474 + 476: 30(ptr) AccessChain 17(color) 402 + 477: 6(float) Load 476 + 478: 6(float) CompositeExtract 475 0 + 479: 6(float) CompositeExtract 475 1 + 480: 6(float) CompositeExtract 475 2 + 481: 7(fvec4) CompositeConstruct 478 479 480 477 + ReturnValue 481 + FunctionEnd +26(TDFrontFacing(vf3;vf3;): 22(bool) Function None 23 + 24(pos): 21(ptr) FunctionParameter + 25(normal): 21(ptr) FunctionParameter + 27: Label + 486: 22(bool) Load 485(gl_FrontFacing) + ReturnValue 486 + FunctionEnd +34(TDAttenuateLight(i1;f1;): 6(float) Function None 31 + 32(index): 29(ptr) FunctionParameter + 33(lightDist): 30(ptr) FunctionParameter + 35: Label + ReturnValue 489 + FunctionEnd +38(TDAlphaTest(f1;): 2 Function None 36 + 37(alpha): 30(ptr) FunctionParameter + 39: Label + Return + FunctionEnd +43(TDHardShadow(i1;vf3;): 6(float) Function None 40 + 41(lightIndex): 29(ptr) FunctionParameter +42(worldSpacePos): 21(ptr) FunctionParameter + 44: Label + ReturnValue 331 + FunctionEnd +50(TDSoftShadow(i1;vf3;i1;i1;): 6(float) Function None 45 + 46(lightIndex): 29(ptr) FunctionParameter +47(worldSpacePos): 21(ptr) FunctionParameter + 48(samples): 29(ptr) FunctionParameter + 49(steps): 29(ptr) FunctionParameter + 51: Label + ReturnValue 331 + FunctionEnd +54(TDSoftShadow(i1;vf3;): 6(float) Function None 40 + 52(lightIndex): 29(ptr) FunctionParameter +53(worldSpacePos): 21(ptr) FunctionParameter + 55: Label + ReturnValue 331 + FunctionEnd +58(TDShadow(i1;vf3;): 6(float) Function None 40 + 56(lightIndex): 29(ptr) FunctionParameter +57(worldSpacePos): 21(ptr) FunctionParameter + 59: Label + ReturnValue 331 + FunctionEnd +64(iTDRadicalInverse_VdC(u1;): 6(float) Function None 62 + 63(bits): 61(ptr) FunctionParameter + 65: Label + 500: 60(int) Load 63(bits) + 502: 60(int) ShiftLeftLogical 500 501 + 503: 60(int) Load 63(bits) + 504: 60(int) ShiftRightLogical 503 501 + 505: 60(int) BitwiseOr 502 504 + Store 63(bits) 505 + 506: 60(int) Load 63(bits) + 508: 60(int) BitwiseAnd 506 507 + 509: 60(int) ShiftLeftLogical 508 393 + 510: 60(int) Load 63(bits) + 512: 60(int) BitwiseAnd 510 511 + 513: 60(int) ShiftRightLogical 512 393 + 514: 60(int) BitwiseOr 509 513 + Store 63(bits) 514 + 515: 60(int) Load 63(bits) + 517: 60(int) BitwiseAnd 515 516 + 518: 60(int) ShiftLeftLogical 517 342 + 519: 60(int) Load 63(bits) + 521: 60(int) BitwiseAnd 519 520 + 522: 60(int) ShiftRightLogical 521 342 + 523: 60(int) BitwiseOr 518 522 + Store 63(bits) 523 + 524: 60(int) Load 63(bits) + 526: 60(int) BitwiseAnd 524 525 + 528: 60(int) ShiftLeftLogical 526 527 + 529: 60(int) Load 63(bits) + 531: 60(int) BitwiseAnd 529 530 + 532: 60(int) ShiftRightLogical 531 527 + 533: 60(int) BitwiseOr 528 532 + Store 63(bits) 533 + 534: 60(int) Load 63(bits) + 536: 60(int) BitwiseAnd 534 535 + 538: 60(int) ShiftLeftLogical 536 537 + 539: 60(int) Load 63(bits) + 541: 60(int) BitwiseAnd 539 540 + 542: 60(int) ShiftRightLogical 541 537 + 543: 60(int) BitwiseOr 538 542 + Store 63(bits) 543 + 544: 60(int) Load 63(bits) + 545: 6(float) ConvertUToF 544 + 547: 6(float) FMul 545 546 + ReturnValue 547 + FunctionEnd +70(iTDHammersley(u1;u1;): 66(fvec2) Function None 67 + 68(i): 61(ptr) FunctionParameter + 69(N): 61(ptr) FunctionParameter + 71: Label + 555(param): 61(ptr) Variable Function + 550: 60(int) Load 68(i) + 551: 6(float) ConvertUToF 550 + 552: 60(int) Load 69(N) + 553: 6(float) ConvertUToF 552 + 554: 6(float) FDiv 551 553 + 556: 60(int) Load 68(i) + Store 555(param) 556 + 557: 6(float) FunctionCall 64(iTDRadicalInverse_VdC(u1;) 555(param) + 558: 66(fvec2) CompositeConstruct 554 557 + ReturnValue 558 + FunctionEnd +77(iTDImportanceSampleGGX(vf2;f1;vf3;): 20(fvec3) Function None 73 + 74(Xi): 72(ptr) FunctionParameter + 75(roughness2): 30(ptr) FunctionParameter + 76(N): 21(ptr) FunctionParameter + 78: Label + 561(a): 30(ptr) Variable Function + 563(phi): 30(ptr) Variable Function + 568(cosTheta): 30(ptr) Variable Function + 582(sinTheta): 30(ptr) Variable Function + 588(H): 21(ptr) Variable Function + 601(upVector): 21(ptr) Variable Function + 612(tangentX): 21(ptr) Variable Function + 617(tangentY): 21(ptr) Variable Function +621(worldResult): 21(ptr) Variable Function + 562: 6(float) Load 75(roughness2) + Store 561(a) 562 + 565: 30(ptr) AccessChain 74(Xi) 390 + 566: 6(float) Load 565 + 567: 6(float) FMul 564 566 + Store 563(phi) 567 + 569: 30(ptr) AccessChain 74(Xi) 393 + 570: 6(float) Load 569 + 571: 6(float) FSub 489 570 + 572: 6(float) Load 561(a) + 573: 6(float) Load 561(a) + 574: 6(float) FMul 572 573 + 575: 6(float) FSub 574 489 + 576: 30(ptr) AccessChain 74(Xi) 393 + 577: 6(float) Load 576 + 578: 6(float) FMul 575 577 + 579: 6(float) FAdd 489 578 + 580: 6(float) FDiv 571 579 + 581: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 580 + Store 568(cosTheta) 581 + 583: 6(float) Load 568(cosTheta) + 584: 6(float) Load 568(cosTheta) + 585: 6(float) FMul 583 584 + 586: 6(float) FSub 489 585 + 587: 6(float) ExtInst 1(GLSL.std.450) 31(Sqrt) 586 + Store 582(sinTheta) 587 + 589: 6(float) Load 582(sinTheta) + 590: 6(float) Load 563(phi) + 591: 6(float) ExtInst 1(GLSL.std.450) 14(Cos) 590 + 592: 6(float) FMul 589 591 + 593: 30(ptr) AccessChain 588(H) 390 + Store 593 592 + 594: 6(float) Load 582(sinTheta) + 595: 6(float) Load 563(phi) + 596: 6(float) ExtInst 1(GLSL.std.450) 13(Sin) 595 + 597: 6(float) FMul 594 596 + 598: 30(ptr) AccessChain 588(H) 393 + Store 598 597 + 599: 6(float) Load 568(cosTheta) + 600: 30(ptr) AccessChain 588(H) 342 + Store 600 599 + 602: 30(ptr) AccessChain 76(N) 342 + 603: 6(float) Load 602 + 604: 6(float) ExtInst 1(GLSL.std.450) 4(FAbs) 603 + 606: 22(bool) FOrdLessThan 604 605 + 610: 609(bvec3) CompositeConstruct 606 606 606 + 611: 20(fvec3) Select 610 607 608 + Store 601(upVector) 611 + 613: 20(fvec3) Load 601(upVector) + 614: 20(fvec3) Load 76(N) + 615: 20(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 613 614 + 616: 20(fvec3) ExtInst 1(GLSL.std.450) 69(Normalize) 615 + Store 612(tangentX) 616 + 618: 20(fvec3) Load 76(N) + 619: 20(fvec3) Load 612(tangentX) + 620: 20(fvec3) ExtInst 1(GLSL.std.450) 68(Cross) 618 619 + Store 617(tangentY) 620 + 622: 20(fvec3) Load 612(tangentX) + 623: 30(ptr) AccessChain 588(H) 390 + 624: 6(float) Load 623 + 625: 20(fvec3) VectorTimesScalar 622 624 + 626: 20(fvec3) Load 617(tangentY) + 627: 30(ptr) AccessChain 588(H) 393 + 628: 6(float) Load 627 + 629: 20(fvec3) VectorTimesScalar 626 628 + 630: 20(fvec3) FAdd 625 629 + 631: 20(fvec3) Load 76(N) + 632: 30(ptr) AccessChain 588(H) 342 + 633: 6(float) Load 632 + 634: 20(fvec3) VectorTimesScalar 631 633 + 635: 20(fvec3) FAdd 630 634 + Store 621(worldResult) 635 + 636: 20(fvec3) Load 621(worldResult) + ReturnValue 636 + FunctionEnd +83(iTDDistributionGGX(vf3;vf3;f1;): 6(float) Function None 79 + 80(normal): 21(ptr) FunctionParameter + 81(half_vector): 21(ptr) FunctionParameter + 82(roughness2): 30(ptr) FunctionParameter + 84: Label + 639(NdotH): 30(ptr) Variable Function + 645(alpha2): 30(ptr) Variable Function + 649(denom): 30(ptr) Variable Function + 640: 20(fvec3) Load 80(normal) + 641: 20(fvec3) Load 81(half_vector) + 642: 6(float) Dot 640 641 + 644: 6(float) ExtInst 1(GLSL.std.450) 43(FClamp) 642 643 489 + Store 639(NdotH) 644 + 646: 6(float) Load 82(roughness2) + 647: 6(float) Load 82(roughness2) + 648: 6(float) FMul 646 647 + Store 645(alpha2) 648 + 650: 6(float) Load 639(NdotH) + 651: 6(float) Load 639(NdotH) + 652: 6(float) FMul 650 651 + 653: 6(float) Load 645(alpha2) + 654: 6(float) FSub 653 489 + 655: 6(float) FMul 652 654 + 656: 6(float) FAdd 655 489 + Store 649(denom) 656 + 658: 6(float) Load 649(denom) + 659: 6(float) ExtInst 1(GLSL.std.450) 40(FMax) 657 658 + Store 649(denom) 659 + 660: 6(float) Load 645(alpha2) + 662: 6(float) Load 649(denom) + 663: 6(float) FMul 661 662 + 664: 6(float) Load 649(denom) + 665: 6(float) FMul 663 664 + 666: 6(float) FDiv 660 665 + ReturnValue 666 + FunctionEnd +88(iTDCalcF(vf3;f1;): 20(fvec3) Function None 85 + 86(F0): 21(ptr) FunctionParameter + 87(VdotH): 30(ptr) FunctionParameter + 89: Label + 669: 20(fvec3) Load 86(F0) + 671: 20(fvec3) Load 86(F0) + 672: 20(fvec3) FSub 670 671 + 675: 6(float) Load 87(VdotH) + 676: 6(float) FMul 674 675 + 678: 6(float) FSub 676 677 + 679: 6(float) Load 87(VdotH) + 680: 6(float) FMul 678 679 + 681: 6(float) ExtInst 1(GLSL.std.450) 26(Pow) 673 680 + 682: 20(fvec3) VectorTimesScalar 672 681 + 683: 20(fvec3) FAdd 669 682 + ReturnValue 683 + FunctionEnd +94(iTDCalcG(f1;f1;f1;): 6(float) Function None 90 + 91(NdotL): 30(ptr) FunctionParameter + 92(NdotV): 30(ptr) FunctionParameter + 93(k): 30(ptr) FunctionParameter + 95: Label + 686(Gl): 30(ptr) Variable Function + 694(Gv): 30(ptr) Variable Function + 687: 6(float) Load 91(NdotL) + 688: 6(float) Load 93(k) + 689: 6(float) FSub 489 688 + 690: 6(float) FMul 687 689 + 691: 6(float) Load 93(k) + 692: 6(float) FAdd 690 691 + 693: 6(float) FDiv 489 692 + Store 686(Gl) 693 + 695: 6(float) Load 92(NdotV) + 696: 6(float) Load 93(k) + 697: 6(float) FSub 489 696 + 698: 6(float) FMul 695 697 + 699: 6(float) Load 93(k) + 700: 6(float) FAdd 698 699 + 701: 6(float) FDiv 489 700 + Store 694(Gv) 701 + 702: 6(float) Load 686(Gl) + 703: 6(float) Load 694(Gv) + 704: 6(float) FMul 702 703 + ReturnValue 704 + FunctionEnd +107(TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;):96(TDPBRResult) Function None 97 + 98(index): 29(ptr) FunctionParameter +99(diffuseColor): 21(ptr) FunctionParameter +100(specularColor): 21(ptr) FunctionParameter +101(worldSpacePos): 21(ptr) FunctionParameter + 102(normal): 21(ptr) FunctionParameter +103(shadowStrength): 30(ptr) FunctionParameter +104(shadowColor): 21(ptr) FunctionParameter + 105(camVector): 21(ptr) FunctionParameter + 106(roughness): 30(ptr) FunctionParameter + 108: Label + 708(res): 707(ptr) Variable Function + 709:96(TDPBRResult) Load 708(res) + ReturnValue 709 + FunctionEnd +122(TDLightingPBR(vf3;vf3;f1;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;): 2 Function None 109 +110(diffuseContrib): 21(ptr) FunctionParameter +111(specularContrib): 21(ptr) FunctionParameter +112(shadowStrengthOut): 30(ptr) FunctionParameter + 113(index): 29(ptr) FunctionParameter +114(diffuseColor): 21(ptr) FunctionParameter +115(specularColor): 21(ptr) FunctionParameter +116(worldSpacePos): 21(ptr) FunctionParameter + 117(normal): 21(ptr) FunctionParameter +118(shadowStrength): 30(ptr) FunctionParameter +119(shadowColor): 21(ptr) FunctionParameter + 120(camVector): 21(ptr) FunctionParameter + 121(roughness): 30(ptr) FunctionParameter + 123: Label + 712(res): 707(ptr) Variable Function + 713(param): 29(ptr) Variable Function + 715(param): 21(ptr) Variable Function + 717(param): 21(ptr) Variable Function + 719(param): 21(ptr) Variable Function + 721(param): 21(ptr) Variable Function + 723(param): 30(ptr) Variable Function + 725(param): 21(ptr) Variable Function + 727(param): 21(ptr) Variable Function + 729(param): 30(ptr) Variable Function + 714: 28(int) Load 113(index) + Store 713(param) 714 + 716: 20(fvec3) Load 114(diffuseColor) + Store 715(param) 716 + 718: 20(fvec3) Load 115(specularColor) + Store 717(param) 718 + 720: 20(fvec3) Load 116(worldSpacePos) + Store 719(param) 720 + 722: 20(fvec3) Load 117(normal) + Store 721(param) 722 + 724: 6(float) Load 118(shadowStrength) + Store 723(param) 724 + 726: 20(fvec3) Load 119(shadowColor) + Store 725(param) 726 + 728: 20(fvec3) Load 120(camVector) + Store 727(param) 728 + 730: 6(float) Load 121(roughness) + Store 729(param) 730 + 731:96(TDPBRResult) FunctionCall 107(TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;) 713(param) 715(param) 717(param) 719(param) 721(param) 723(param) 725(param) 727(param) 729(param) + Store 712(res) 731 + 732: 21(ptr) AccessChain 712(res) 381 + 733: 20(fvec3) Load 732 + Store 110(diffuseContrib) 733 + 734: 21(ptr) AccessChain 712(res) 436 + 735: 20(fvec3) Load 734 + Store 111(specularContrib) 735 + 736: 30(ptr) AccessChain 712(res) 337 + 737: 6(float) Load 736 + Store 112(shadowStrengthOut) 737 + Return + FunctionEnd +136(TDLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;): 2 Function None 124 +125(diffuseContrib): 21(ptr) FunctionParameter +126(specularContrib): 21(ptr) FunctionParameter + 127(index): 29(ptr) FunctionParameter +128(diffuseColor): 21(ptr) FunctionParameter +129(specularColor): 21(ptr) FunctionParameter +130(worldSpacePos): 21(ptr) FunctionParameter + 131(normal): 21(ptr) FunctionParameter +132(shadowStrength): 30(ptr) FunctionParameter +133(shadowColor): 21(ptr) FunctionParameter + 134(camVector): 21(ptr) FunctionParameter + 135(roughness): 30(ptr) FunctionParameter + 137: Label + 738(res): 707(ptr) Variable Function + 739(param): 29(ptr) Variable Function + 741(param): 21(ptr) Variable Function + 743(param): 21(ptr) Variable Function + 745(param): 21(ptr) Variable Function + 747(param): 21(ptr) Variable Function + 749(param): 30(ptr) Variable Function + 751(param): 21(ptr) Variable Function + 753(param): 21(ptr) Variable Function + 755(param): 30(ptr) Variable Function + 740: 28(int) Load 127(index) + Store 739(param) 740 + 742: 20(fvec3) Load 128(diffuseColor) + Store 741(param) 742 + 744: 20(fvec3) Load 129(specularColor) + Store 743(param) 744 + 746: 20(fvec3) Load 130(worldSpacePos) + Store 745(param) 746 + 748: 20(fvec3) Load 131(normal) + Store 747(param) 748 + 750: 6(float) Load 132(shadowStrength) + Store 749(param) 750 + 752: 20(fvec3) Load 133(shadowColor) + Store 751(param) 752 + 754: 20(fvec3) Load 134(camVector) + Store 753(param) 754 + 756: 6(float) Load 135(roughness) + Store 755(param) 756 + 757:96(TDPBRResult) FunctionCall 107(TDLightingPBR(i1;vf3;vf3;vf3;vf3;f1;vf3;vf3;f1;) 739(param) 741(param) 743(param) 745(param) 747(param) 749(param) 751(param) 753(param) 755(param) + Store 738(res) 757 + 758: 21(ptr) AccessChain 738(res) 381 + 759: 20(fvec3) Load 758 + Store 125(diffuseContrib) 759 + 760: 21(ptr) AccessChain 738(res) 436 + 761: 20(fvec3) Load 760 + Store 126(specularContrib) 761 + Return + FunctionEnd +146(TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1;):96(TDPBRResult) Function None 138 + 139(index): 29(ptr) FunctionParameter +140(diffuseColor): 21(ptr) FunctionParameter +141(specularColor): 21(ptr) FunctionParameter + 142(normal): 21(ptr) FunctionParameter + 143(camVector): 21(ptr) FunctionParameter + 144(roughness): 30(ptr) FunctionParameter +145(ambientOcclusion): 30(ptr) FunctionParameter + 147: Label + 762(res): 707(ptr) Variable Function + 763:96(TDPBRResult) Load 762(res) + ReturnValue 763 + FunctionEnd +158(TDEnvLightingPBR(vf3;vf3;i1;vf3;vf3;vf3;vf3;f1;f1;): 2 Function None 148 +149(diffuseContrib): 21(ptr) FunctionParameter +150(specularContrib): 21(ptr) FunctionParameter + 151(index): 29(ptr) FunctionParameter +152(diffuseColor): 21(ptr) FunctionParameter +153(specularColor): 21(ptr) FunctionParameter + 154(normal): 21(ptr) FunctionParameter + 155(camVector): 21(ptr) FunctionParameter + 156(roughness): 30(ptr) FunctionParameter +157(ambientOcclusion): 30(ptr) FunctionParameter + 159: Label + 766(res): 707(ptr) Variable Function + 767(param): 29(ptr) Variable Function + 769(param): 21(ptr) Variable Function + 771(param): 21(ptr) Variable Function + 773(param): 21(ptr) Variable Function + 775(param): 21(ptr) Variable Function + 777(param): 30(ptr) Variable Function + 779(param): 30(ptr) Variable Function + 768: 28(int) Load 151(index) + Store 767(param) 768 + 770: 20(fvec3) Load 152(diffuseColor) + Store 769(param) 770 + 772: 20(fvec3) Load 153(specularColor) + Store 771(param) 772 + 774: 20(fvec3) Load 154(normal) + Store 773(param) 774 + 776: 20(fvec3) Load 155(camVector) + Store 775(param) 776 + 778: 6(float) Load 156(roughness) + Store 777(param) 778 + 780: 6(float) Load 157(ambientOcclusion) + Store 779(param) 780 + 781:96(TDPBRResult) FunctionCall 146(TDEnvLightingPBR(i1;vf3;vf3;vf3;vf3;f1;f1;) 767(param) 769(param) 771(param) 773(param) 775(param) 777(param) 779(param) + Store 766(res) 781 + 782: 21(ptr) AccessChain 766(res) 381 + 783: 20(fvec3) Load 782 + Store 149(diffuseContrib) 783 + 784: 21(ptr) AccessChain 766(res) 436 + 785: 20(fvec3) Load 784 + Store 150(specularContrib) 785 + Return + FunctionEnd +170(TDLighting(i1;vf3;vf3;f1;vf3;vf3;f1;f1;):160(TDPhongResult) Function None 161 + 162(index): 29(ptr) FunctionParameter +163(worldSpacePos): 21(ptr) FunctionParameter + 164(normal): 21(ptr) FunctionParameter +165(shadowStrength): 30(ptr) FunctionParameter +166(shadowColor): 21(ptr) FunctionParameter + 167(camVector): 21(ptr) FunctionParameter + 168(shininess): 30(ptr) FunctionParameter + 169(shininess2): 30(ptr) FunctionParameter + 171: Label + 790(res): 789(ptr) Variable Function + 786: 28(int) Load 162(index) + SelectionMerge 788 None + Switch 786 787 + 787: Label + 792: 21(ptr) AccessChain 790(res) 381 + Store 792 791 + 793: 21(ptr) AccessChain 790(res) 436 + Store 793 791 + 794: 21(ptr) AccessChain 790(res) 337 + Store 794 791 + 795: 30(ptr) AccessChain 790(res) 377 + Store 795 331 + Branch 788 + 788: Label + 798:160(TDPhongResult) Load 790(res) + ReturnValue 798 + FunctionEnd +185(TDLighting(vf3;vf3;vf3;f1;i1;vf3;vf3;f1;vf3;vf3;f1;f1;): 2 Function None 172 +173(diffuseContrib): 21(ptr) FunctionParameter +174(specularContrib): 21(ptr) FunctionParameter +175(specularContrib2): 21(ptr) FunctionParameter +176(shadowStrengthOut): 30(ptr) FunctionParameter + 177(index): 29(ptr) FunctionParameter +178(worldSpacePos): 21(ptr) FunctionParameter + 179(normal): 21(ptr) FunctionParameter +180(shadowStrength): 30(ptr) FunctionParameter +181(shadowColor): 21(ptr) FunctionParameter + 182(camVector): 21(ptr) FunctionParameter + 183(shininess): 30(ptr) FunctionParameter + 184(shininess2): 30(ptr) FunctionParameter + 186: Label + 804(res): 789(ptr) Variable Function + 801: 28(int) Load 177(index) + SelectionMerge 803 None + Switch 801 802 + 802: Label + 805: 21(ptr) AccessChain 804(res) 381 + Store 805 791 + 806: 21(ptr) AccessChain 804(res) 436 + Store 806 791 + 807: 21(ptr) AccessChain 804(res) 337 + Store 807 791 + 808: 30(ptr) AccessChain 804(res) 377 + Store 808 331 + Branch 803 + 803: Label + 811: 21(ptr) AccessChain 804(res) 381 + 812: 20(fvec3) Load 811 + Store 173(diffuseContrib) 812 + 813: 21(ptr) AccessChain 804(res) 436 + 814: 20(fvec3) Load 813 + Store 174(specularContrib) 814 + 815: 21(ptr) AccessChain 804(res) 337 + 816: 20(fvec3) Load 815 + Store 175(specularContrib2) 816 + 817: 30(ptr) AccessChain 804(res) 377 + 818: 6(float) Load 817 + Store 176(shadowStrengthOut) 818 + Return + FunctionEnd +199(TDLighting(vf3;vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;f1;): 2 Function None 187 +188(diffuseContrib): 21(ptr) FunctionParameter +189(specularContrib): 21(ptr) FunctionParameter +190(specularContrib2): 21(ptr) FunctionParameter + 191(index): 29(ptr) FunctionParameter +192(worldSpacePos): 21(ptr) FunctionParameter + 193(normal): 21(ptr) FunctionParameter +194(shadowStrength): 30(ptr) FunctionParameter +195(shadowColor): 21(ptr) FunctionParameter + 196(camVector): 21(ptr) FunctionParameter + 197(shininess): 30(ptr) FunctionParameter + 198(shininess2): 30(ptr) FunctionParameter + 200: Label + 822(res): 789(ptr) Variable Function + 819: 28(int) Load 191(index) + SelectionMerge 821 None + Switch 819 820 + 820: Label + 823: 21(ptr) AccessChain 822(res) 381 + Store 823 791 + 824: 21(ptr) AccessChain 822(res) 436 + Store 824 791 + 825: 21(ptr) AccessChain 822(res) 337 + Store 825 791 + 826: 30(ptr) AccessChain 822(res) 377 + Store 826 331 + Branch 821 + 821: Label + 829: 21(ptr) AccessChain 822(res) 381 + 830: 20(fvec3) Load 829 + Store 188(diffuseContrib) 830 + 831: 21(ptr) AccessChain 822(res) 436 + 832: 20(fvec3) Load 831 + Store 189(specularContrib) 832 + 833: 21(ptr) AccessChain 822(res) 337 + 834: 20(fvec3) Load 833 + Store 190(specularContrib2) 834 + Return + FunctionEnd +211(TDLighting(vf3;vf3;i1;vf3;vf3;f1;vf3;vf3;f1;): 2 Function None 201 +202(diffuseContrib): 21(ptr) FunctionParameter +203(specularContrib): 21(ptr) FunctionParameter + 204(index): 29(ptr) FunctionParameter +205(worldSpacePos): 21(ptr) FunctionParameter + 206(normal): 21(ptr) FunctionParameter +207(shadowStrength): 30(ptr) FunctionParameter +208(shadowColor): 21(ptr) FunctionParameter + 209(camVector): 21(ptr) FunctionParameter + 210(shininess): 30(ptr) FunctionParameter + 212: Label + 838(res): 789(ptr) Variable Function + 835: 28(int) Load 204(index) + SelectionMerge 837 None + Switch 835 836 + 836: Label + 839: 21(ptr) AccessChain 838(res) 381 + Store 839 791 + 840: 21(ptr) AccessChain 838(res) 436 + Store 840 791 + 841: 21(ptr) AccessChain 838(res) 337 + Store 841 791 + 842: 30(ptr) AccessChain 838(res) 377 + Store 842 331 + Branch 837 + 837: Label + 845: 21(ptr) AccessChain 838(res) 381 + 846: 20(fvec3) Load 845 + Store 202(diffuseContrib) 846 + 847: 21(ptr) AccessChain 838(res) 436 + 848: 20(fvec3) Load 847 + Store 203(specularContrib) 848 + Return + FunctionEnd +223(TDLighting(vf3;vf3;vf3;i1;vf3;vf3;vf3;f1;f1;): 2 Function None 213 +214(diffuseContrib): 21(ptr) FunctionParameter +215(specularContrib): 21(ptr) FunctionParameter +216(specularContrib2): 21(ptr) FunctionParameter + 217(index): 29(ptr) FunctionParameter +218(worldSpacePos): 21(ptr) FunctionParameter + 219(normal): 21(ptr) FunctionParameter + 220(camVector): 21(ptr) FunctionParameter + 221(shininess): 30(ptr) FunctionParameter + 222(shininess2): 30(ptr) FunctionParameter + 224: Label + 852(res): 789(ptr) Variable Function + 849: 28(int) Load 217(index) + SelectionMerge 851 None + Switch 849 850 + 850: Label + 853: 21(ptr) AccessChain 852(res) 381 + Store 853 791 + 854: 21(ptr) AccessChain 852(res) 436 + Store 854 791 + 855: 21(ptr) AccessChain 852(res) 337 + Store 855 791 + 856: 30(ptr) AccessChain 852(res) 377 + Store 856 331 + Branch 851 + 851: Label + 859: 21(ptr) AccessChain 852(res) 381 + 860: 20(fvec3) Load 859 + Store 214(diffuseContrib) 860 + 861: 21(ptr) AccessChain 852(res) 436 + 862: 20(fvec3) Load 861 + Store 215(specularContrib) 862 + 863: 21(ptr) AccessChain 852(res) 337 + 864: 20(fvec3) Load 863 + Store 216(specularContrib2) 864 + Return + FunctionEnd +233(TDLighting(vf3;vf3;i1;vf3;vf3;vf3;f1;): 2 Function None 225 +226(diffuseContrib): 21(ptr) FunctionParameter +227(specularContrib): 21(ptr) FunctionParameter + 228(index): 29(ptr) FunctionParameter +229(worldSpacePos): 21(ptr) FunctionParameter + 230(normal): 21(ptr) FunctionParameter + 231(camVector): 21(ptr) FunctionParameter + 232(shininess): 30(ptr) FunctionParameter + 234: Label + 868(res): 789(ptr) Variable Function + 865: 28(int) Load 228(index) + SelectionMerge 867 None + Switch 865 866 + 866: Label + 869: 21(ptr) AccessChain 868(res) 381 + Store 869 791 + 870: 21(ptr) AccessChain 868(res) 436 + Store 870 791 + 871: 21(ptr) AccessChain 868(res) 337 + Store 871 791 + 872: 30(ptr) AccessChain 868(res) 377 + Store 872 331 + Branch 867 + 867: Label + 875: 21(ptr) AccessChain 868(res) 381 + 876: 20(fvec3) Load 875 + Store 226(diffuseContrib) 876 + 877: 21(ptr) AccessChain 868(res) 436 + 878: 20(fvec3) Load 877 + Store 227(specularContrib) 878 + Return + FunctionEnd +240(TDLighting(vf3;i1;vf3;vf3;): 2 Function None 235 +236(diffuseContrib): 21(ptr) FunctionParameter + 237(index): 29(ptr) FunctionParameter +238(worldSpacePos): 21(ptr) FunctionParameter + 239(normal): 21(ptr) FunctionParameter + 241: Label + 882(res): 789(ptr) Variable Function + 879: 28(int) Load 237(index) + SelectionMerge 881 None + Switch 879 880 + 880: Label + 883: 21(ptr) AccessChain 882(res) 381 + Store 883 791 + 884: 21(ptr) AccessChain 882(res) 436 + Store 884 791 + 885: 21(ptr) AccessChain 882(res) 337 + Store 885 791 + 886: 30(ptr) AccessChain 882(res) 377 + Store 886 331 + Branch 881 + 881: Label + 889: 21(ptr) AccessChain 882(res) 381 + 890: 20(fvec3) Load 889 + Store 236(diffuseContrib) 890 + Return + FunctionEnd +249(TDLighting(vf3;i1;vf3;vf3;f1;vf3;): 2 Function None 242 +243(diffuseContrib): 21(ptr) FunctionParameter + 244(index): 29(ptr) FunctionParameter +245(worldSpacePos): 21(ptr) FunctionParameter + 246(normal): 21(ptr) FunctionParameter +247(shadowStrength): 30(ptr) FunctionParameter +248(shadowColor): 21(ptr) FunctionParameter + 250: Label + 894(res): 789(ptr) Variable Function + 891: 28(int) Load 244(index) + SelectionMerge 893 None + Switch 891 892 + 892: Label + 895: 21(ptr) AccessChain 894(res) 381 + Store 895 791 + 896: 21(ptr) AccessChain 894(res) 436 + Store 896 791 + 897: 21(ptr) AccessChain 894(res) 337 + Store 897 791 + 898: 30(ptr) AccessChain 894(res) 377 + Store 898 331 + Branch 893 + 893: Label + 901: 21(ptr) AccessChain 894(res) 381 + 902: 20(fvec3) Load 901 + Store 243(diffuseContrib) 902 + Return + FunctionEnd +255(TDProjMap(i1;vf3;vf4;): 7(fvec4) Function None 251 + 252(index): 29(ptr) FunctionParameter +253(worldSpacePos): 21(ptr) FunctionParameter +254(defaultColor): 8(ptr) FunctionParameter + 256: Label + 903: 28(int) Load 252(index) + SelectionMerge 905 None + Switch 903 904 + 904: Label + 906: 7(fvec4) Load 254(defaultColor) + ReturnValue 906 + 905: Label + Unreachable + FunctionEnd +261(TDFog(vf4;vf3;i1;): 7(fvec4) Function None 257 + 258(color): 8(ptr) FunctionParameter +259(lightingSpacePosition): 21(ptr) FunctionParameter +260(cameraIndex): 29(ptr) FunctionParameter + 262: Label + 910: 28(int) Load 260(cameraIndex) + SelectionMerge 912 None + Switch 910 911 + case 0: 911 + 911: Label + 913: 7(fvec4) Load 258(color) + ReturnValue 913 + 912: Label + Unreachable + FunctionEnd +266(TDFog(vf4;vf3;): 7(fvec4) Function None 263 + 264(color): 8(ptr) FunctionParameter +265(lightingSpacePosition): 21(ptr) FunctionParameter + 267: Label + 917(param): 8(ptr) Variable Function + 919(param): 21(ptr) Variable Function + 921(param): 29(ptr) Variable Function + 918: 7(fvec4) Load 264(color) + Store 917(param) 918 + 920: 20(fvec3) Load 265(lightingSpacePosition) + Store 919(param) 920 + Store 921(param) 381 + 922: 7(fvec4) FunctionCall 261(TDFog(vf4;vf3;i1;) 917(param) 919(param) 921(param) + ReturnValue 922 + FunctionEnd +271(TDInstanceTexCoord(i1;vf3;): 20(fvec3) Function None 268 + 269(index): 29(ptr) FunctionParameter + 270(t): 21(ptr) FunctionParameter + 272: Label + 925(coord): 29(ptr) Variable Function + 927(samp): 8(ptr) Variable Function + 936(v): 21(ptr) Variable Function + 926: 28(int) Load 269(index) + Store 925(coord) 926 + 932: 929 Load 931(sTDInstanceTexCoord) + 933: 28(int) Load 925(coord) + 934: 928 Image 932 + 935: 7(fvec4) ImageFetch 934 933 + Store 927(samp) 935 + 937: 30(ptr) AccessChain 270(t) 390 + 938: 6(float) Load 937 + 939: 30(ptr) AccessChain 936(v) 390 + Store 939 938 + 940: 30(ptr) AccessChain 270(t) 393 + 941: 6(float) Load 940 + 942: 30(ptr) AccessChain 936(v) 393 + Store 942 941 + 943: 30(ptr) AccessChain 927(samp) 390 + 944: 6(float) Load 943 + 945: 30(ptr) AccessChain 936(v) 342 + Store 945 944 + 946: 20(fvec3) Load 936(v) + Store 270(t) 946 + 947: 20(fvec3) Load 270(t) + ReturnValue 947 + FunctionEnd +275(TDInstanceActive(i1;): 22(bool) Function None 273 + 274(index): 29(ptr) FunctionParameter + 276: Label + 955(coord): 29(ptr) Variable Function + 957(samp): 8(ptr) Variable Function + 963(v): 30(ptr) Variable Function + 951: 950(ptr) AccessChain 376 381 + 952: 28(int) Load 951 + 953: 28(int) Load 274(index) + 954: 28(int) ISub 953 952 + Store 274(index) 954 + 956: 28(int) Load 274(index) + Store 955(coord) 956 + 959: 929 Load 958(sTDInstanceT) + 960: 28(int) Load 955(coord) + 961: 928 Image 959 + 962: 7(fvec4) ImageFetch 961 960 + Store 957(samp) 962 + 964: 30(ptr) AccessChain 957(samp) 390 + 965: 6(float) Load 964 + Store 963(v) 965 + 966: 6(float) Load 963(v) + 967: 22(bool) FUnordNotEqual 966 331 + ReturnValue 967 + FunctionEnd +281(iTDInstanceTranslate(i1;b1;): 20(fvec3) Function None 278 + 279(index): 29(ptr) FunctionParameter +280(instanceActive): 277(ptr) FunctionParameter + 282: Label + 970(origIndex): 29(ptr) Variable Function + 976(coord): 29(ptr) Variable Function + 978(samp): 8(ptr) Variable Function + 983(v): 21(ptr) Variable Function + 971: 28(int) Load 279(index) + Store 970(origIndex) 971 + 972: 950(ptr) AccessChain 376 381 + 973: 28(int) Load 972 + 974: 28(int) Load 279(index) + 975: 28(int) ISub 974 973 + Store 279(index) 975 + 977: 28(int) Load 279(index) + Store 976(coord) 977 + 979: 929 Load 958(sTDInstanceT) + 980: 28(int) Load 976(coord) + 981: 928 Image 979 + 982: 7(fvec4) ImageFetch 981 980 + Store 978(samp) 982 + 984: 30(ptr) AccessChain 978(samp) 393 + 985: 6(float) Load 984 + 986: 30(ptr) AccessChain 983(v) 390 + Store 986 985 + 987: 30(ptr) AccessChain 978(samp) 342 + 988: 6(float) Load 987 + 989: 30(ptr) AccessChain 983(v) 393 + Store 989 988 + 990: 30(ptr) AccessChain 978(samp) 402 + 991: 6(float) Load 990 + 992: 30(ptr) AccessChain 983(v) 342 + Store 992 991 + 993: 30(ptr) AccessChain 978(samp) 390 + 994: 6(float) Load 993 + 995: 22(bool) FUnordNotEqual 994 331 + Store 280(instanceActive) 995 + 996: 20(fvec3) Load 983(v) + ReturnValue 996 + FunctionEnd +285(TDInstanceTranslate(i1;): 20(fvec3) Function None 283 + 284(index): 29(ptr) FunctionParameter + 286: Label + 1003(coord): 29(ptr) Variable Function + 1005(samp): 8(ptr) Variable Function + 1010(v): 21(ptr) Variable Function + 999: 950(ptr) AccessChain 376 381 + 1000: 28(int) Load 999 + 1001: 28(int) Load 284(index) + 1002: 28(int) ISub 1001 1000 + Store 284(index) 1002 + 1004: 28(int) Load 284(index) + Store 1003(coord) 1004 + 1006: 929 Load 958(sTDInstanceT) + 1007: 28(int) Load 1003(coord) + 1008: 928 Image 1006 + 1009: 7(fvec4) ImageFetch 1008 1007 + Store 1005(samp) 1009 + 1011: 30(ptr) AccessChain 1005(samp) 393 + 1012: 6(float) Load 1011 + 1013: 30(ptr) AccessChain 1010(v) 390 + Store 1013 1012 + 1014: 30(ptr) AccessChain 1005(samp) 342 + 1015: 6(float) Load 1014 + 1016: 30(ptr) AccessChain 1010(v) 393 + Store 1016 1015 + 1017: 30(ptr) AccessChain 1005(samp) 402 + 1018: 6(float) Load 1017 + 1019: 30(ptr) AccessChain 1010(v) 342 + Store 1019 1018 + 1020: 20(fvec3) Load 1010(v) + ReturnValue 1020 + FunctionEnd +290(TDInstanceRotateMat(i1;): 287 Function None 288 + 289(index): 29(ptr) FunctionParameter + 291: Label + 1027(v): 21(ptr) Variable Function + 1029(m): 1028(ptr) Variable Function + 1023: 950(ptr) AccessChain 376 381 + 1024: 28(int) Load 1023 + 1025: 28(int) Load 289(index) + 1026: 28(int) ISub 1025 1024 + Store 289(index) 1026 + Store 1027(v) 791 + Store 1029(m) 1031 + 1032: 287 Load 1029(m) + ReturnValue 1032 + FunctionEnd +293(TDInstanceScale(i1;): 20(fvec3) Function None 283 + 292(index): 29(ptr) FunctionParameter + 294: Label + 1039(v): 21(ptr) Variable Function + 1035: 950(ptr) AccessChain 376 381 + 1036: 28(int) Load 1035 + 1037: 28(int) Load 292(index) + 1038: 28(int) ISub 1037 1036 + Store 292(index) 1038 + Store 1039(v) 670 + 1040: 20(fvec3) Load 1039(v) + ReturnValue 1040 + FunctionEnd +296(TDInstancePivot(i1;): 20(fvec3) Function None 283 + 295(index): 29(ptr) FunctionParameter + 297: Label + 1047(v): 21(ptr) Variable Function + 1043: 950(ptr) AccessChain 376 381 + 1044: 28(int) Load 1043 + 1045: 28(int) Load 295(index) + 1046: 28(int) ISub 1045 1044 + Store 295(index) 1046 + Store 1047(v) 791 + 1048: 20(fvec3) Load 1047(v) + ReturnValue 1048 + FunctionEnd +299(TDInstanceRotTo(i1;): 20(fvec3) Function None 283 + 298(index): 29(ptr) FunctionParameter + 300: Label + 1055(v): 21(ptr) Variable Function + 1051: 950(ptr) AccessChain 376 381 + 1052: 28(int) Load 1051 + 1053: 28(int) Load 298(index) + 1054: 28(int) ISub 1053 1052 + Store 298(index) 1054 + Store 1055(v) 607 + 1056: 20(fvec3) Load 1055(v) + ReturnValue 1056 + FunctionEnd +302(TDInstanceRotUp(i1;): 20(fvec3) Function None 283 + 301(index): 29(ptr) FunctionParameter + 303: Label + 1063(v): 21(ptr) Variable Function + 1059: 950(ptr) AccessChain 376 381 + 1060: 28(int) Load 1059 + 1061: 28(int) Load 301(index) + 1062: 28(int) ISub 1061 1060 + Store 301(index) 1062 + Store 1063(v) 1030 + 1064: 20(fvec3) Load 1063(v) + ReturnValue 1064 + FunctionEnd +307(TDInstanceMat(i1;): 304 Function None 305 + 306(id): 29(ptr) FunctionParameter + 308: Label +1067(instanceActive): 277(ptr) Variable Function + 1069(t): 21(ptr) Variable Function + 1070(param): 29(ptr) Variable Function + 1072(param): 277(ptr) Variable Function + 1082(m): 1081(ptr) Variable Function + 1088(tt): 21(ptr) Variable Function + Store 1067(instanceActive) 1068 + 1071: 28(int) Load 306(id) + Store 1070(param) 1071 + 1073: 20(fvec3) FunctionCall 281(iTDInstanceTranslate(i1;b1;) 1070(param) 1072(param) + 1074: 22(bool) Load 1072(param) + Store 1067(instanceActive) 1074 + Store 1069(t) 1073 + 1075: 22(bool) Load 1067(instanceActive) + 1076: 22(bool) LogicalNot 1075 + SelectionMerge 1078 None + BranchConditional 1076 1077 1078 + 1077: Label + ReturnValue 1079 + 1078: Label + Store 1082(m) 1087 + 1089: 20(fvec3) Load 1069(t) + Store 1088(tt) 1089 + 1090: 30(ptr) AccessChain 1082(m) 381 390 + 1091: 6(float) Load 1090 + 1092: 30(ptr) AccessChain 1088(tt) 390 + 1093: 6(float) Load 1092 + 1094: 6(float) FMul 1091 1093 + 1095: 30(ptr) AccessChain 1082(m) 377 390 + 1096: 6(float) Load 1095 + 1097: 6(float) FAdd 1096 1094 + 1098: 30(ptr) AccessChain 1082(m) 377 390 + Store 1098 1097 + 1099: 30(ptr) AccessChain 1082(m) 381 393 + 1100: 6(float) Load 1099 + 1101: 30(ptr) AccessChain 1088(tt) 390 + 1102: 6(float) Load 1101 + 1103: 6(float) FMul 1100 1102 + 1104: 30(ptr) AccessChain 1082(m) 377 393 + 1105: 6(float) Load 1104 + 1106: 6(float) FAdd 1105 1103 + 1107: 30(ptr) AccessChain 1082(m) 377 393 + Store 1107 1106 + 1108: 30(ptr) AccessChain 1082(m) 381 342 + 1109: 6(float) Load 1108 + 1110: 30(ptr) AccessChain 1088(tt) 390 + 1111: 6(float) Load 1110 + 1112: 6(float) FMul 1109 1111 + 1113: 30(ptr) AccessChain 1082(m) 377 342 + 1114: 6(float) Load 1113 + 1115: 6(float) FAdd 1114 1112 + 1116: 30(ptr) AccessChain 1082(m) 377 342 + Store 1116 1115 + 1117: 30(ptr) AccessChain 1082(m) 381 402 + 1118: 6(float) Load 1117 + 1119: 30(ptr) AccessChain 1088(tt) 390 + 1120: 6(float) Load 1119 + 1121: 6(float) FMul 1118 1120 + 1122: 30(ptr) AccessChain 1082(m) 377 402 + 1123: 6(float) Load 1122 + 1124: 6(float) FAdd 1123 1121 + 1125: 30(ptr) AccessChain 1082(m) 377 402 + Store 1125 1124 + 1126: 30(ptr) AccessChain 1082(m) 436 390 + 1127: 6(float) Load 1126 + 1128: 30(ptr) AccessChain 1088(tt) 393 + 1129: 6(float) Load 1128 + 1130: 6(float) FMul 1127 1129 + 1131: 30(ptr) AccessChain 1082(m) 377 390 + 1132: 6(float) Load 1131 + 1133: 6(float) FAdd 1132 1130 + 1134: 30(ptr) AccessChain 1082(m) 377 390 + Store 1134 1133 + 1135: 30(ptr) AccessChain 1082(m) 436 393 + 1136: 6(float) Load 1135 + 1137: 30(ptr) AccessChain 1088(tt) 393 + 1138: 6(float) Load 1137 + 1139: 6(float) FMul 1136 1138 + 1140: 30(ptr) AccessChain 1082(m) 377 393 + 1141: 6(float) Load 1140 + 1142: 6(float) FAdd 1141 1139 + 1143: 30(ptr) AccessChain 1082(m) 377 393 + Store 1143 1142 + 1144: 30(ptr) AccessChain 1082(m) 436 342 + 1145: 6(float) Load 1144 + 1146: 30(ptr) AccessChain 1088(tt) 393 + 1147: 6(float) Load 1146 + 1148: 6(float) FMul 1145 1147 + 1149: 30(ptr) AccessChain 1082(m) 377 342 + 1150: 6(float) Load 1149 + 1151: 6(float) FAdd 1150 1148 + 1152: 30(ptr) AccessChain 1082(m) 377 342 + Store 1152 1151 + 1153: 30(ptr) AccessChain 1082(m) 436 402 + 1154: 6(float) Load 1153 + 1155: 30(ptr) AccessChain 1088(tt) 393 + 1156: 6(float) Load 1155 + 1157: 6(float) FMul 1154 1156 + 1158: 30(ptr) AccessChain 1082(m) 377 402 + 1159: 6(float) Load 1158 + 1160: 6(float) FAdd 1159 1157 + 1161: 30(ptr) AccessChain 1082(m) 377 402 + Store 1161 1160 + 1162: 30(ptr) AccessChain 1082(m) 337 390 + 1163: 6(float) Load 1162 + 1164: 30(ptr) AccessChain 1088(tt) 342 + 1165: 6(float) Load 1164 + 1166: 6(float) FMul 1163 1165 + 1167: 30(ptr) AccessChain 1082(m) 377 390 + 1168: 6(float) Load 1167 + 1169: 6(float) FAdd 1168 1166 + 1170: 30(ptr) AccessChain 1082(m) 377 390 + Store 1170 1169 + 1171: 30(ptr) AccessChain 1082(m) 337 393 + 1172: 6(float) Load 1171 + 1173: 30(ptr) AccessChain 1088(tt) 342 + 1174: 6(float) Load 1173 + 1175: 6(float) FMul 1172 1174 + 1176: 30(ptr) AccessChain 1082(m) 377 393 + 1177: 6(float) Load 1176 + 1178: 6(float) FAdd 1177 1175 + 1179: 30(ptr) AccessChain 1082(m) 377 393 + Store 1179 1178 + 1180: 30(ptr) AccessChain 1082(m) 337 342 + 1181: 6(float) Load 1180 + 1182: 30(ptr) AccessChain 1088(tt) 342 + 1183: 6(float) Load 1182 + 1184: 6(float) FMul 1181 1183 + 1185: 30(ptr) AccessChain 1082(m) 377 342 + 1186: 6(float) Load 1185 + 1187: 6(float) FAdd 1186 1184 + 1188: 30(ptr) AccessChain 1082(m) 377 342 + Store 1188 1187 + 1189: 30(ptr) AccessChain 1082(m) 337 402 + 1190: 6(float) Load 1189 + 1191: 30(ptr) AccessChain 1088(tt) 342 + 1192: 6(float) Load 1191 + 1193: 6(float) FMul 1190 1192 + 1194: 30(ptr) AccessChain 1082(m) 377 402 + 1195: 6(float) Load 1194 + 1196: 6(float) FAdd 1195 1193 + 1197: 30(ptr) AccessChain 1082(m) 377 402 + Store 1197 1196 + 1198: 304 Load 1082(m) + ReturnValue 1198 + FunctionEnd +310(TDInstanceMat3(i1;): 287 Function None 288 + 309(id): 29(ptr) FunctionParameter + 311: Label + 1201(m): 1028(ptr) Variable Function + Store 1201(m) 1031 + 1202: 287 Load 1201(m) + ReturnValue 1202 + FunctionEnd +313(TDInstanceMat3ForNorm(i1;): 287 Function None 288 + 312(id): 29(ptr) FunctionParameter + 314: Label + 1205(m): 1028(ptr) Variable Function + 1206(param): 29(ptr) Variable Function + 1207: 28(int) Load 312(id) + Store 1206(param) 1207 + 1208: 287 FunctionCall 310(TDInstanceMat3(i1;) 1206(param) + Store 1205(m) 1208 + 1209: 287 Load 1205(m) + ReturnValue 1209 + FunctionEnd +318(TDInstanceColor(i1;vf4;): 7(fvec4) Function None 315 + 316(index): 29(ptr) FunctionParameter + 317(curColor): 8(ptr) FunctionParameter + 319: Label + 1216(coord): 29(ptr) Variable Function + 1218(samp): 8(ptr) Variable Function + 1224(v): 8(ptr) Variable Function + 1212: 950(ptr) AccessChain 376 381 + 1213: 28(int) Load 1212 + 1214: 28(int) Load 316(index) + 1215: 28(int) ISub 1214 1213 + Store 316(index) 1215 + 1217: 28(int) Load 316(index) + Store 1216(coord) 1217 + 1220: 929 Load 1219(sTDInstanceColor) + 1221: 28(int) Load 1216(coord) + 1222: 928 Image 1220 + 1223: 7(fvec4) ImageFetch 1222 1221 + Store 1218(samp) 1223 + 1225: 30(ptr) AccessChain 1218(samp) 390 + 1226: 6(float) Load 1225 + 1227: 30(ptr) AccessChain 1224(v) 390 + Store 1227 1226 + 1228: 30(ptr) AccessChain 1218(samp) 393 + 1229: 6(float) Load 1228 + 1230: 30(ptr) AccessChain 1224(v) 393 + Store 1230 1229 + 1231: 30(ptr) AccessChain 1218(samp) 342 + 1232: 6(float) Load 1231 + 1233: 30(ptr) AccessChain 1224(v) 342 + Store 1233 1232 + 1234: 30(ptr) AccessChain 1224(v) 402 + Store 1234 489 + 1235: 30(ptr) AccessChain 1224(v) 390 + 1236: 6(float) Load 1235 + 1237: 30(ptr) AccessChain 317(curColor) 390 + Store 1237 1236 + 1238: 30(ptr) AccessChain 1224(v) 393 + 1239: 6(float) Load 1238 + 1240: 30(ptr) AccessChain 317(curColor) 393 + Store 1240 1239 + 1241: 30(ptr) AccessChain 1224(v) 342 + 1242: 6(float) Load 1241 + 1243: 30(ptr) AccessChain 317(curColor) 342 + Store 1243 1242 + 1244: 7(fvec4) Load 317(curColor) + ReturnValue 1244 + FunctionEnd +321(TDOutputSwizzle(vf4;): 7(fvec4) Function None 9 + 320(c): 8(ptr) FunctionParameter + 322: Label + 1247: 7(fvec4) Load 320(c) + ReturnValue 1247 + FunctionEnd +327(TDOutputSwizzle(vu4;): 323(ivec4) Function None 325 + 326(c): 324(ptr) FunctionParameter + 328: Label + 1250: 323(ivec4) Load 326(c) + ReturnValue 1250 + FunctionEnd diff --git a/Test/vk.relaxed.stagelink.0.0.frag b/Test/vk.relaxed.stagelink.0.0.frag new file mode 100755 index 0000000000..1f9f1025ec --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.0.frag @@ -0,0 +1,139 @@ +#version 460 +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; + +void TDAlphaTest(float alpha); +vec4 TDDither(vec4 color); +vec4 TDOutputSwizzle(vec4 v); +uvec4 TDOutputSwizzle(uvec4 v); +void TDCheckOrderIndTrans(); +void TDCheckDiscard(); +uniform vec3 uConstant; +uniform float uShadowStrength; +uniform vec3 uShadowColor; +uniform vec4 uDiffuseColor; +uniform vec4 uAmbientColor; + +uniform sampler2DArray sColorMap; + +in Vertex +{ + vec4 color; + vec3 worldSpacePos; + vec3 texCoord0; + flat int cameraIndex; + flat int instance; +} iVert; + +// Output variable for the color +layout(location = 0) out vec4 oFragColor[TD_NUM_COLOR_BUFFERS]; +void main() +{ + // This allows things such as order independent transparency + // and Dual-Paraboloid rendering to work properly + TDCheckDiscard(); + + vec4 outcol = vec4(0.0, 0.0, 0.0, 0.0); + + vec3 texCoord0 = iVert.texCoord0.stp; + float actualTexZ = mod(int(texCoord0.z),2048); + float instanceLoop = floor(int(texCoord0.z)/2048); + texCoord0.z = actualTexZ; + vec4 colorMapColor = texture(sColorMap, texCoord0.stp); + + float red = colorMapColor[int(instanceLoop)]; + colorMapColor = vec4(red); + // Constant Light Contribution + outcol.rgb += uConstant * iVert.color.rgb; + + outcol *= colorMapColor; + + // Alpha Calculation + float alpha = iVert.color.a * colorMapColor.a ; + + // Dithering, does nothing if dithering is disabled + outcol = TDDither(outcol); + + outcol.rgb *= alpha; + + // Modern GL removed the implicit alpha test, so we need to apply + // it manually here. This function does nothing if alpha test is disabled. + TDAlphaTest(alpha); + + outcol.a = alpha; + oFragColor[0] = TDOutputSwizzle(outcol); + + + // TD_NUM_COLOR_BUFFERS will be set to the number of color buffers + // active in the render. By default we want to output zero to every + // buffer except the first one. + for (int i = 1; i < TD_NUM_COLOR_BUFFERS; i++) + { + oFragColor[i] = vec4(0.0); + } +} diff --git a/Test/vk.relaxed.stagelink.0.0.vert b/Test/vk.relaxed.stagelink.0.0.vert new file mode 100755 index 0000000000..7f31c377dc --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.0.vert @@ -0,0 +1,126 @@ +#version 460 +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; +layout(location = 0) in vec3 P; +layout(location = 1) in vec3 N; +layout(location = 2) in vec4 Cd; +layout(location = 3) in vec3 uv[8]; +vec4 TDWorldToProj(vec4 v); +vec4 TDWorldToProj(vec3 v); +vec4 TDWorldToProj(vec4 v, vec3 uv); +vec4 TDWorldToProj(vec3 v, vec3 uv); +int TDInstanceID(); +int TDCameraIndex(); +vec3 TDUVUnwrapCoord(); +/*********TOUCHDEFORMPREFIX**********/ +#define TD_NUM_BONES 0 + +vec3 TDInstanceTexCoord(int instanceID, vec3 t); +vec4 TDInstanceColor(int instanceID, vec4 curColor); + +vec4 TDDeform(vec4 pos); +vec4 TDDeform(vec3 pos); +vec3 TDInstanceTexCoord(vec3 t); +vec4 TDInstanceColor(vec4 curColor); +#line 1 + +out Vertex +{ + vec4 color; + vec3 worldSpacePos; + vec3 texCoord0; + flat int cameraIndex; + flat int instance; +} oVert; + +void main() +{ + + { // Avoid duplicate variable defs + vec3 texcoord = TDInstanceTexCoord(uv[0]); + oVert.texCoord0.stp = texcoord.stp; + } + // First deform the vertex and normal + // TDDeform always returns values in world space + oVert.instance = TDInstanceID(); + vec4 worldSpacePos = TDDeform(P); + vec3 uvUnwrapCoord = TDInstanceTexCoord(TDUVUnwrapCoord()); + gl_Position = TDWorldToProj(worldSpacePos, uvUnwrapCoord); + + + // This is here to ensure we only execute lighting etc. code + // when we need it. If picking is active we don't need lighting, so + // this entire block of code will be ommited from the compile. + // The TD_PICKING_ACTIVE define will be set automatically when + // picking is active. + + int cameraIndex = TDCameraIndex(); + oVert.cameraIndex = cameraIndex; + oVert.worldSpacePos.xyz = worldSpacePos.xyz; + oVert.color = TDInstanceColor(Cd); +} diff --git a/Test/vk.relaxed.stagelink.0.1.frag b/Test/vk.relaxed.stagelink.0.1.frag new file mode 100755 index 0000000000..2a82b65d80 --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.1.frag @@ -0,0 +1,504 @@ +#version 460 +uniform sampler2D sTDNoiseMap; +uniform sampler1D sTDSineLookup; +uniform sampler2D sTDWhite2D; +uniform sampler3D sTDWhite3D; +uniform sampler2DArray sTDWhite2DArray; +uniform samplerCube sTDWhiteCube; +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDLight +{ + vec4 position; + vec3 direction; + vec3 diffuse; + vec4 nearFar; + vec4 lightSize; + vec4 misc; + vec4 coneLookupScaleBias; + vec4 attenScaleBiasRoll; + mat4 shadowMapMatrix; + mat4 shadowMapCamMatrix; + vec4 shadowMapRes; + mat4 projMapMatrix; +}; +struct TDEnvLight +{ + vec3 color; + mat3 rotate; +}; +layout(std140) uniform TDLightBlock +{ + TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE]; +}; +layout(std140) uniform TDEnvLightBlock +{ + TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE]; +}; +layout(std430) readonly restrict buffer TDEnvLightBuffer +{ + vec3 shCoeffs[9]; +} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE]; +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; + +layout(binding = 15) uniform samplerBuffer sTDInstanceT; +layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord; +layout(binding = 17) uniform samplerBuffer sTDInstanceColor; +vec4 TDDither(vec4 color); +vec3 TDHSVToRGB(vec3 c); +vec3 TDRGBToHSV(vec3 c); +#define PI 3.14159265 + +vec4 TDColor(vec4 color) { return color; } +void TDCheckOrderIndTrans() { +} +void TDCheckDiscard() { + TDCheckOrderIndTrans(); +} +vec4 TDDither(vec4 color) +{ + float d = texture(sTDNoiseMap, + gl_FragCoord.xy / 256.0).r; + d -= 0.5; + d /= 256.0; + return vec4(color.rgb + d, color.a); +} +bool TDFrontFacing(vec3 pos, vec3 normal) +{ + return gl_FrontFacing; +} +float TDAttenuateLight(int index, float lightDist) +{ + return 1.0; +} +void TDAlphaTest(float alpha) { +} +float TDHardShadow(int lightIndex, vec3 worldSpacePos) +{ return 0.0; } +float TDSoftShadow(int lightIndex, vec3 worldSpacePos, int samples, int steps) +{ return 0.0; } +float TDSoftShadow(int lightIndex, vec3 worldSpacePos) +{ return 0.0; } +float TDShadow(int lightIndex, vec3 worldSpacePos) +{ return 0.0; } +vec3 TDEquirectangularToCubeMap(vec2 mapCoord); +vec2 TDCubeMapToEquirectangular(vec3 envMapCoord); +vec2 TDCubeMapToEquirectangular(vec3 envMapCoord, out float mipMapBias); +vec2 TDTexGenSphere(vec3 envMapCoord); +float iTDRadicalInverse_VdC(uint bits) +{ + bits = (bits << 16u) | (bits >> 16u); + bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u); + bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u); + bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u); + bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u); + return float(bits) * 2.3283064365386963e-10; // / 0x100000000 +} +vec2 iTDHammersley(uint i, uint N) +{ + return vec2(float(i) / float(N), iTDRadicalInverse_VdC(i)); +} +vec3 iTDImportanceSampleGGX(vec2 Xi, float roughness2, vec3 N) +{ + float a = roughness2; + float phi = 2 * 3.14159265 * Xi.x; + float cosTheta = sqrt( (1 - Xi.y) / (1 + (a*a - 1) * Xi.y) ); + float sinTheta = sqrt( 1 - cosTheta * cosTheta ); + + vec3 H; + H.x = sinTheta * cos(phi); + H.y = sinTheta * sin(phi); + H.z = cosTheta; + + vec3 upVector = abs(N.z) < 0.999 ? vec3(0, 0, 1) : vec3(1, 0, 0); + vec3 tangentX = normalize(cross(upVector, N)); + vec3 tangentY = cross(N, tangentX); + + // Tangent to world space + vec3 worldResult = tangentX * H.x + tangentY * H.y + N * H.z; + return worldResult; +} +float iTDDistributionGGX(vec3 normal, vec3 half_vector, float roughness2) +{ + const float Epsilon = 0.000001; + + float NdotH = clamp(dot(normal, half_vector), Epsilon, 1.0); + + float alpha2 = roughness2 * roughness2; + + float denom = NdotH * NdotH * (alpha2 - 1.0) + 1.0; + denom = max(1e-8, denom); + return alpha2 / (PI * denom * denom); +} +vec3 iTDCalcF(vec3 F0, float VdotH) { + return F0 + (vec3(1.0) - F0) * pow(2.0, (-5.55473*VdotH - 6.98316) * VdotH); +} + +float iTDCalcG(float NdotL, float NdotV, float k) { + float Gl = 1.0 / (NdotL * (1.0 - k) + k); + float Gv = 1.0 / (NdotV * (1.0 - k) + k); + return Gl * Gv; +} +// 0 - All options +TDPBRResult TDLightingPBR(int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness) +{ + TDPBRResult res; + return res; +} +// 0 - All options +void TDLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,inout float shadowStrengthOut,int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness) +{ + TDPBRResult res = TDLightingPBR(index,diffuseColor,specularColor,worldSpacePos,normal,shadowStrength,shadowColor,camVector,roughness); diffuseContrib = res.diffuse; + specularContrib = res.specular; + shadowStrengthOut = res.shadowStrength; +} +// 0 - All options +void TDLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 diffuseColor,vec3 specularColor,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float roughness) +{ + TDPBRResult res = TDLightingPBR(index,diffuseColor,specularColor,worldSpacePos,normal,shadowStrength,shadowColor,camVector,roughness); diffuseContrib = res.diffuse; + specularContrib = res.specular; +} +// 0 - All options +TDPBRResult TDEnvLightingPBR(int index,vec3 diffuseColor,vec3 specularColor,vec3 normal,vec3 camVector,float roughness,float ambientOcclusion) +{ + TDPBRResult res; + return res; +} +// 0 - All options +void TDEnvLightingPBR(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 diffuseColor,vec3 specularColor,vec3 normal,vec3 camVector,float roughness,float ambientOcclusion) +{ + TDPBRResult res = TDEnvLightingPBR(index, diffuseColor, specularColor, normal, camVector, roughness, ambientOcclusion); + diffuseContrib = res.diffuse; + specularContrib = res.specular; +} +// 0 - All options +TDPhongResult TDLighting(int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + return res; +} +// 0 - Legacy +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,inout float shadowStrengthOut,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; + specularContrib2 = res.specular2; + shadowStrengthOut = res.shadowStrength; +} +// 0 - Legacy +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess,float shininess2) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; + specularContrib2 = res.specular2; +} +// 1 - Without specular2 +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor,vec3 camVector,float shininess) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; +} +// 2 - Without shadows +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,inout vec3 specularContrib2,int index,vec3 worldSpacePos,vec3 normal,vec3 camVector,float shininess,float shininess2) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; + specularContrib2 = res.specular2; +} +// 3 - diffuse and specular only +void TDLighting(inout vec3 diffuseContrib,inout vec3 specularContrib,int index,vec3 worldSpacePos,vec3 normal,vec3 camVector,float shininess) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; + specularContrib = res.specular; +} +// 4 - Diffuse only +void TDLighting(inout vec3 diffuseContrib,int index, vec3 worldSpacePos, vec3 normal) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; +} +// 5 - diffuse only with shadows +void TDLighting(inout vec3 diffuseContrib,int index,vec3 worldSpacePos,vec3 normal,float shadowStrength,vec3 shadowColor) +{ + TDPhongResult res; + switch (index) + { + default: + res.diffuse = vec3(0.0); + res.specular = vec3(0.0); + res.specular2 = vec3(0.0); + res.shadowStrength = 0.0; + break; + } + diffuseContrib = res.diffuse; +} +vec4 TDProjMap(int index, vec3 worldSpacePos, vec4 defaultColor) { + switch (index) + { + default: return defaultColor; + } +} +vec4 TDFog(vec4 color, vec3 lightingSpacePosition, int cameraIndex) { + switch (cameraIndex) { + default: + case 0: + { + return color; + } + } +} +vec4 TDFog(vec4 color, vec3 lightingSpacePosition) +{ + return TDFog(color, lightingSpacePosition, 0); +} +vec3 TDInstanceTexCoord(int index, vec3 t) { + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceTexCoord, coord); + v[0] = t.s; + v[1] = t.t; + v[2] = samp[0]; + t.stp = v.stp; + return t; +} +bool TDInstanceActive(int index) { + index -= uTDInstanceIDOffset; + float v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v = samp[0]; + return v != 0.0; +} +vec3 iTDInstanceTranslate(int index, out bool instanceActive) { + int origIndex = index; + index -= uTDInstanceIDOffset; + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v[0] = samp[1]; + v[1] = samp[2]; + v[2] = samp[3]; + instanceActive = samp[0] != 0.0; + return v; +} +vec3 TDInstanceTranslate(int index) { + index -= uTDInstanceIDOffset; + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v[0] = samp[1]; + v[1] = samp[2]; + v[2] = samp[3]; + return v; +} +mat3 TDInstanceRotateMat(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 0.0); + mat3 m = mat3(1.0); +{ + mat3 r; +} + return m; +} +vec3 TDInstanceScale(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(1.0, 1.0, 1.0); + return v; +} +vec3 TDInstancePivot(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 0.0); + return v; +} +vec3 TDInstanceRotTo(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 1.0); + return v; +} +vec3 TDInstanceRotUp(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 1.0, 0.0); + return v; +} +mat4 TDInstanceMat(int id) { + bool instanceActive = true; + vec3 t = iTDInstanceTranslate(id, instanceActive); + if (!instanceActive) + { + return mat4(0.0); + } + mat4 m = mat4(1.0); + { + vec3 tt = t; + m[3][0] += m[0][0]*tt.x; + m[3][1] += m[0][1]*tt.x; + m[3][2] += m[0][2]*tt.x; + m[3][3] += m[0][3]*tt.x; + m[3][0] += m[1][0]*tt.y; + m[3][1] += m[1][1]*tt.y; + m[3][2] += m[1][2]*tt.y; + m[3][3] += m[1][3]*tt.y; + m[3][0] += m[2][0]*tt.z; + m[3][1] += m[2][1]*tt.z; + m[3][2] += m[2][2]*tt.z; + m[3][3] += m[2][3]*tt.z; + } + return m; +} +mat3 TDInstanceMat3(int id) { + mat3 m = mat3(1.0); + return m; +} +mat3 TDInstanceMat3ForNorm(int id) { + mat3 m = TDInstanceMat3(id); + return m; +} +vec4 TDInstanceColor(int index, vec4 curColor) { + index -= uTDInstanceIDOffset; + vec4 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceColor, coord); + v[0] = samp[0]; + v[1] = samp[1]; + v[2] = samp[2]; + v[3] = 1.0; + curColor[0] = v[0]; +; + curColor[1] = v[1]; +; + curColor[2] = v[2]; +; + return curColor; +} diff --git a/Test/vk.relaxed.stagelink.0.1.vert b/Test/vk.relaxed.stagelink.0.1.vert new file mode 100755 index 0000000000..3c5de986eb --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.1.vert @@ -0,0 +1,242 @@ +#version 460 +layout(location = 0) in vec3 P; +layout(location = 1) in vec3 N; +layout(location = 2) in vec4 Cd; +layout(location = 3) in vec3 uv[8]; +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDLight +{ + vec4 position; + vec3 direction; + vec3 diffuse; + vec4 nearFar; + vec4 lightSize; + vec4 misc; + vec4 coneLookupScaleBias; + vec4 attenScaleBiasRoll; + mat4 shadowMapMatrix; + mat4 shadowMapCamMatrix; + vec4 shadowMapRes; + mat4 projMapMatrix; +}; +struct TDEnvLight +{ + vec3 color; + mat3 rotate; +}; +layout(std140) uniform TDLightBlock +{ + TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE]; +}; +layout(std140) uniform TDEnvLightBlock +{ + TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE]; +}; +layout(std430) readonly restrict buffer TDEnvLightBuffer +{ + vec3 shCoeffs[9]; +} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE]; +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; +layout (rgba8) uniform image2D mTD2DImageOutputs[1]; +layout (rgba8) uniform image2DArray mTD2DArrayImageOutputs[1]; +layout (rgba8) uniform image3D mTD3DImageOutputs[1]; +layout (rgba8) uniform imageCube mTDCubeImageOutputs[1]; + +mat4 TDInstanceMat(int instanceID); +mat3 TDInstanceMat3(int instanceID); +vec3 TDInstanceTranslate(int instanceID); +bool TDInstanceActive(int instanceID); +mat3 TDInstanceRotateMat(int instanceID); +vec3 TDInstanceScale(int instanceID); +vec3 TDInstanceTexCoord(int instanceID, vec3 t); +vec4 TDInstanceColor(int instanceID, vec4 curColor); +vec4 TDInstanceCustomAttrib0(int instanceID); +vec4 TDInstanceCustomAttrib1(int instanceID); +vec4 TDInstanceCustomAttrib2(int instanceID); +vec4 TDInstanceCustomAttrib3(int instanceID); +vec4 TDInstanceCustomAttrib4(int instanceID); +vec4 TDInstanceCustomAttrib5(int instanceID); +vec4 TDInstanceCustomAttrib6(int instanceID); +vec4 TDInstanceCustomAttrib7(int instanceID); +vec4 TDInstanceCustomAttrib8(int instanceID); +vec4 TDInstanceCustomAttrib9(int instanceID); +vec4 TDInstanceCustomAttrib10(int instanceID); +vec4 TDInstanceCustomAttrib11(int instanceID); +uint TDInstanceTextureIndex(int instanceIndex); +vec4 TDInstanceTexture(uint texIndex, vec3 uv); +vec4 TDInstanceTexture(uint texIndex, vec2 uv); + +vec4 TDDeform(vec4 pos); +vec4 TDDeform(vec3 pos); +vec4 TDDeform(int instanceID, vec3 pos); +vec3 TDDeformVec(vec3 v); +vec3 TDDeformVec(int instanceID, vec3 v); +vec3 TDDeformNorm(vec3 v); +vec3 TDDeformNorm(int instanceID, vec3 v); +vec4 TDSkinnedDeform(vec4 pos); +vec3 TDSkinnedDeformVec(vec3 vec); +vec3 TDSkinnedDeformNorm(vec3 vec); +vec4 TDInstanceDeform(vec4 pos); +vec3 TDInstanceDeformVec(vec3 vec); +vec3 TDInstanceDeformNorm(vec3 vec); +vec4 TDInstanceDeform(int instanceID, vec4 pos); +vec3 TDInstanceDeformVec(int instanceID, vec3 vec); +vec3 TDInstanceDeformNorm(int instanceID, vec3 vec); +vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm); +mat4 TDBoneMat(int boneIndex); +mat4 TDInstanceMat(); +mat3 TDInstanceMat3(); +vec3 TDInstanceTranslate(); +bool TDInstanceActive(); +mat3 TDInstanceRotateMat(); +vec3 TDInstanceScale(); +vec3 TDInstanceTexCoord(vec3 t); +vec4 TDInstanceColor(vec4 curColor); +vec4 TDPointColor(); +#ifdef TD_PICKING_ACTIVE +out TDPickVertex { + vec3 sopSpacePosition; + vec3 camSpacePosition; + vec3 worldSpacePosition; + vec3 sopSpaceNormal; + vec3 camSpaceNormal; + vec3 worldSpaceNormal; + vec3 uv[1]; + flat int pickId; + flat int instanceId; + vec4 color; +} oTDPickVert; +#define vTDPickVert oTDPickVert +#endif +vec4 iTDCamToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod) +{ + if (!TDInstanceActive()) + return vec4(2, 2, 2, 0); + v = uTDMats[0].proj * v; + return v; +} +vec4 iTDWorldToProj(vec4 v, vec3 uv, int cameraIndex, bool applyPickMod) { + if (!TDInstanceActive()) + return vec4(2, 2, 2, 0); + v = uTDMats[0].camProj * v; + return v; +} +vec4 TDDeform(vec4 pos); +vec4 TDDeform(vec3 pos); +vec4 TDInstanceColor(vec4 curColor); +vec3 TDInstanceTexCoord(vec3 t); +int TDInstanceID() { + return gl_InstanceID + uTDInstanceIDOffset; +} +int TDCameraIndex() { + return 0; +} +vec3 TDUVUnwrapCoord() { + return uv[0]; +} +#ifdef TD_PICKING_ACTIVE +uniform int uTDPickId; +#endif +int TDPickID() { +#ifdef TD_PICKING_ACTIVE + return uTDPickId; +#else + return 0; +#endif +} +float iTDConvertPickId(int id) { + id |= 1073741824; + return intBitsToFloat(id); +} + + void TDWritePickingValues() { +#ifdef TD_PICKING_ACTIVE + vec4 worldPos = TDDeform(P); + vec4 camPos = uTDMats[TDCameraIndex()].cam * worldPos; + oTDPickVert.pickId = TDPickID(); +#endif +} +vec4 TDWorldToProj(vec4 v, vec3 uv) +{ + return iTDWorldToProj(v, uv, TDCameraIndex(), true); +} +vec4 TDWorldToProj(vec3 v, vec3 uv) +{ + return TDWorldToProj(vec4(v, 1.0), uv); +} +vec4 TDWorldToProj(vec4 v) +{ + return TDWorldToProj(v, vec3(0.0)); +} +vec4 TDWorldToProj(vec3 v) +{ + return TDWorldToProj(vec4(v, 1.0)); +} +vec4 TDPointColor() { + return Cd; +} diff --git a/Test/vk.relaxed.stagelink.0.2.frag b/Test/vk.relaxed.stagelink.0.2.frag new file mode 100755 index 0000000000..27bd540db8 --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.2.frag @@ -0,0 +1,9 @@ +#version 460 +vec4 TDOutputSwizzle(vec4 c) +{ + return c.rgba; +} +uvec4 TDOutputSwizzle(uvec4 c) +{ + return c.rgba; +} diff --git a/Test/vk.relaxed.stagelink.0.2.vert b/Test/vk.relaxed.stagelink.0.2.vert new file mode 100755 index 0000000000..69c0b21b1a --- /dev/null +++ b/Test/vk.relaxed.stagelink.0.2.vert @@ -0,0 +1,320 @@ +#version 460 +uniform int uTDInstanceIDOffset; +uniform int uTDNumInstances; +uniform float uTDAlphaTestVal; +#define TD_NUM_COLOR_BUFFERS 1 +#define TD_NUM_LIGHTS 0 +#define TD_NUM_SHADOWED_LIGHTS 0 +#define TD_NUM_ENV_LIGHTS 0 +#define TD_LIGHTS_ARRAY_SIZE 1 +#define TD_ENV_LIGHTS_ARRAY_SIZE 1 +#define TD_NUM_CAMERAS 1 +struct TDLight +{ + vec4 position; + vec3 direction; + vec3 diffuse; + vec4 nearFar; + vec4 lightSize; + vec4 misc; + vec4 coneLookupScaleBias; + vec4 attenScaleBiasRoll; + mat4 shadowMapMatrix; + mat4 shadowMapCamMatrix; + vec4 shadowMapRes; + mat4 projMapMatrix; +}; +struct TDEnvLight +{ + vec3 color; + mat3 rotate; +}; +layout(std140) uniform TDLightBlock +{ + TDLight uTDLights[TD_LIGHTS_ARRAY_SIZE]; +}; +layout(std140) uniform TDEnvLightBlock +{ + TDEnvLight uTDEnvLights[TD_ENV_LIGHTS_ARRAY_SIZE]; +}; +layout(std430) readonly restrict buffer TDEnvLightBuffer +{ + vec3 shCoeffs[9]; +} uTDEnvLightBuffers[TD_ENV_LIGHTS_ARRAY_SIZE]; +struct TDPhongResult +{ + vec3 diffuse; + vec3 specular; + vec3 specular2; + float shadowStrength; +}; +struct TDPBRResult +{ + vec3 diffuse; + vec3 specular; + float shadowStrength; +}; +struct TDMatrix +{ + mat4 world; + mat4 worldInverse; + mat4 worldCam; + mat4 worldCamInverse; + mat4 cam; + mat4 camInverse; + mat4 camProj; + mat4 camProjInverse; + mat4 proj; + mat4 projInverse; + mat4 worldCamProj; + mat4 worldCamProjInverse; + mat4 quadReproject; + mat3 worldForNormals; + mat3 camForNormals; + mat3 worldCamForNormals; +}; +layout(std140) uniform TDMatricesBlock { + TDMatrix uTDMats[TD_NUM_CAMERAS]; +}; +struct TDCameraInfo +{ + vec4 nearFar; + vec4 fog; + vec4 fogColor; + int renderTOPCameraIndex; +}; +layout(std140) uniform TDCameraInfoBlock { + TDCameraInfo uTDCamInfos[TD_NUM_CAMERAS]; +}; +struct TDGeneral +{ + vec4 ambientColor; + vec4 nearFar; + vec4 viewport; + vec4 viewportRes; + vec4 fog; + vec4 fogColor; +}; +layout(std140) uniform TDGeneralBlock { + TDGeneral uTDGeneral; +}; + +layout(binding = 15) uniform samplerBuffer sTDInstanceT; +layout(binding = 16) uniform samplerBuffer sTDInstanceTexCoord; +layout(binding = 17) uniform samplerBuffer sTDInstanceColor; +#define TD_NUM_BONES 0 +vec4 TDWorldToProj(vec4 v); +vec4 TDWorldToProj(vec3 v); +vec4 TDWorldToProj(vec4 v, vec3 uv); +vec4 TDWorldToProj(vec3 v, vec3 uv); +int TDPickID(); +int TDInstanceID(); +int TDCameraIndex(); +vec3 TDUVUnwrapCoord(); +vec3 TDInstanceTexCoord(int index, vec3 t) { + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceTexCoord, coord); + v[0] = t.s; + v[1] = t.t; + v[2] = samp[0]; + t.stp = v.stp; + return t; +} +bool TDInstanceActive(int index) { + index -= uTDInstanceIDOffset; + float v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v = samp[0]; + return v != 0.0; +} +vec3 iTDInstanceTranslate(int index, out bool instanceActive) { + int origIndex = index; + index -= uTDInstanceIDOffset; + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v[0] = samp[1]; + v[1] = samp[2]; + v[2] = samp[3]; + instanceActive = samp[0] != 0.0; + return v; +} +vec3 TDInstanceTranslate(int index) { + index -= uTDInstanceIDOffset; + vec3 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceT, coord); + v[0] = samp[1]; + v[1] = samp[2]; + v[2] = samp[3]; + return v; +} +mat3 TDInstanceRotateMat(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 0.0); + mat3 m = mat3(1.0); +{ + mat3 r; +} + return m; +} +vec3 TDInstanceScale(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(1.0, 1.0, 1.0); + return v; +} +vec3 TDInstancePivot(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 0.0); + return v; +} +vec3 TDInstanceRotTo(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 0.0, 1.0); + return v; +} +vec3 TDInstanceRotUp(int index) { + index -= uTDInstanceIDOffset; + vec3 v = vec3(0.0, 1.0, 0.0); + return v; +} +mat4 TDInstanceMat(int id) { + bool instanceActive = true; + vec3 t = iTDInstanceTranslate(id, instanceActive); + if (!instanceActive) + { + return mat4(0.0); + } + mat4 m = mat4(1.0); + { + vec3 tt = t; + m[3][0] += m[0][0]*tt.x; + m[3][1] += m[0][1]*tt.x; + m[3][2] += m[0][2]*tt.x; + m[3][3] += m[0][3]*tt.x; + m[3][0] += m[1][0]*tt.y; + m[3][1] += m[1][1]*tt.y; + m[3][2] += m[1][2]*tt.y; + m[3][3] += m[1][3]*tt.y; + m[3][0] += m[2][0]*tt.z; + m[3][1] += m[2][1]*tt.z; + m[3][2] += m[2][2]*tt.z; + m[3][3] += m[2][3]*tt.z; + } + return m; +} +mat3 TDInstanceMat3(int id) { + mat3 m = mat3(1.0); + return m; +} +mat3 TDInstanceMat3ForNorm(int id) { + mat3 m = TDInstanceMat3(id); + return m; +} +vec4 TDInstanceColor(int index, vec4 curColor) { + index -= uTDInstanceIDOffset; + vec4 v; + int coord = index; + vec4 samp = texelFetch(sTDInstanceColor, coord); + v[0] = samp[0]; + v[1] = samp[1]; + v[2] = samp[2]; + v[3] = 1.0; + curColor[0] = v[0]; +; + curColor[1] = v[1]; +; + curColor[2] = v[2]; +; + return curColor; +} +vec4 TDInstanceDeform(int id, vec4 pos) { + pos = TDInstanceMat(id) * pos; + return uTDMats[TDCameraIndex()].world * pos; +} + +vec3 TDInstanceDeformVec(int id, vec3 vec) +{ + mat3 m = TDInstanceMat3(id); + return mat3(uTDMats[TDCameraIndex()].world) * (m * vec); +} +vec3 TDInstanceDeformNorm(int id, vec3 vec) +{ + mat3 m = TDInstanceMat3ForNorm(id); + return mat3(uTDMats[TDCameraIndex()].worldForNormals) * (m * vec); +} +vec4 TDInstanceDeform(vec4 pos) { + return TDInstanceDeform(TDInstanceID(), pos); +} +vec3 TDInstanceDeformVec(vec3 vec) { + return TDInstanceDeformVec(TDInstanceID(), vec); +} +vec3 TDInstanceDeformNorm(vec3 vec) { + return TDInstanceDeformNorm(TDInstanceID(), vec); +} +bool TDInstanceActive() { return TDInstanceActive(TDInstanceID()); } +vec3 TDInstanceTranslate() { return TDInstanceTranslate(TDInstanceID()); } +mat3 TDInstanceRotateMat() { return TDInstanceRotateMat(TDInstanceID()); } +vec3 TDInstanceScale() { return TDInstanceScale(TDInstanceID()); } +mat4 TDInstanceMat() { return TDInstanceMat(TDInstanceID()); + } +mat3 TDInstanceMat3() { return TDInstanceMat3(TDInstanceID()); +} +vec3 TDInstanceTexCoord(vec3 t) { + return TDInstanceTexCoord(TDInstanceID(), t); +} +vec4 TDInstanceColor(vec4 curColor) { + return TDInstanceColor(TDInstanceID(), curColor); +} +vec4 TDSkinnedDeform(vec4 pos) { return pos; } + +vec3 TDSkinnedDeformVec(vec3 vec) { return vec; } + +vec3 TDFastDeformTangent(vec3 oldNorm, vec4 oldTangent, vec3 deformedNorm) +{ return oldTangent.xyz; } +mat4 TDBoneMat(int index) { + return mat4(1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1); +} +vec4 TDDeform(vec4 pos) { + pos = TDSkinnedDeform(pos); + pos = TDInstanceDeform(pos); + return pos; +} + +vec4 TDDeform(int instanceID, vec3 p) { + vec4 pos = vec4(p, 1.0); + pos = TDSkinnedDeform(pos); + pos = TDInstanceDeform(instanceID, pos); + return pos; +} + +vec4 TDDeform(vec3 pos) { + return TDDeform(TDInstanceID(), pos); +} + +vec3 TDDeformVec(int instanceID, vec3 vec) { + vec = TDSkinnedDeformVec(vec); + vec = TDInstanceDeformVec(instanceID, vec); + return vec; +} + +vec3 TDDeformVec(vec3 vec) { + return TDDeformVec(TDInstanceID(), vec); +} + +vec3 TDDeformNorm(int instanceID, vec3 vec) { + vec = TDSkinnedDeformVec(vec); + vec = TDInstanceDeformNorm(instanceID, vec); + return vec; +} + +vec3 TDDeformNorm(vec3 vec) { + return TDDeformNorm(TDInstanceID(), vec); +} + +vec3 TDSkinnedDeformNorm(vec3 vec) { + vec = TDSkinnedDeformVec(vec); + return vec; +} diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 620be97c97..fe376fee88 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -580,9 +580,6 @@ void TIntermediate::mergeGlobalUniformBlocks(TInfoSink& infoSink, TIntermediate& } void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* block, TIntermSymbol* unitBlock, TIntermediate* unit) { - if (block->getType() == unitBlock->getType()) { - return; - } if (block->getType().getTypeName() != unitBlock->getType().getTypeName() || block->getType().getBasicType() != unitBlock->getType().getBasicType() || @@ -629,44 +626,42 @@ void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* bl } } - TType unitType; - unitType.shallowCopy(unitBlock->getType()); - // update symbol node in unit tree, // and other nodes that may reference it class TMergeBlockTraverser : public TIntermTraverser { public: - TMergeBlockTraverser(const glslang::TType &type, const glslang::TType& unitType, - glslang::TIntermediate& unit, - const std::map& memberIdxUpdates) : - newType(type), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates) - { } - virtual ~TMergeBlockTraverser() { } - - const glslang::TType& newType; // type with modifications - const glslang::TType& unitType; // copy of original type - glslang::TIntermediate& unit; // intermediate that is being updated - const std::map& memberIndexUpdates; - - virtual void visitSymbol(TIntermSymbol* symbol) + TMergeBlockTraverser(const TIntermSymbol* newSym) + : newSymbol(newSym), unitType(nullptr), unit(nullptr), memberIndexUpdates(nullptr) { - glslang::TType& symType = symbol->getWritableType(); + } + TMergeBlockTraverser(const TIntermSymbol* newSym, const glslang::TType* unitType, glslang::TIntermediate* unit, + const std::map* memberIdxUpdates) + : newSymbol(newSym), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates) + { + } + virtual ~TMergeBlockTraverser() {} - if (symType == unitType) { - // each symbol node has a local copy of the unitType - // if merging involves changing properties that aren't shared objects - // they should be updated in all instances + const TIntermSymbol* newSymbol; + const glslang::TType* unitType; // copy of original type + glslang::TIntermediate* unit; // intermediate that is being updated + const std::map* memberIndexUpdates; - // e.g. the struct list is a ptr to an object, so it can be updated - // once, outside the traverser - //*symType.getWritableStruct() = *newType.getStruct(); + virtual void visitSymbol(TIntermSymbol* symbol) + { + if (newSymbol->getAccessName() == symbol->getAccessName() && + newSymbol->getQualifier().getBlockStorage() == symbol->getQualifier().getBlockStorage()) { + // Each symbol node may have a local copy of the block structure. + // Update those structures to match the new one post-merge + *(symbol->getWritableType().getWritableStruct()) = *(newSymbol->getType().getStruct()); } - } virtual bool visitBinary(TVisit, glslang::TIntermBinary* node) { - if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == unitType) { + if (!unit || !unitType || !memberIndexUpdates || memberIndexUpdates->empty()) + return true; + + if (node->getOp() == EOpIndexDirectStruct && node->getLeft()->getType() == *unitType) { // this is a dereference to a member of the block since the // member list changed, need to update this to point to the // right index @@ -674,8 +669,8 @@ void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* bl glslang::TIntermConstantUnion* constNode = node->getRight()->getAsConstantUnion(); unsigned int memberIdx = constNode->getConstArray()[0].getUConst(); - unsigned int newIdx = memberIndexUpdates.at(memberIdx); - TIntermTyped* newConstNode = unit.addConstantUnion(newIdx, node->getRight()->getLoc()); + unsigned int newIdx = memberIndexUpdates->at(memberIdx); + TIntermTyped* newConstNode = unit->addConstantUnion(newIdx, node->getRight()->getLoc()); node->setRight(newConstNode); delete constNode; @@ -684,10 +679,20 @@ void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* bl } return true; } - } finalLinkTraverser(block->getType(), unitType, *unit, memberIndexUpdates); + }; + + // 'this' may have symbols that are using the old block structure, so traverse the tree to update those + // in 'visitSymbol' + TMergeBlockTraverser finalLinkTraverser(block); + getTreeRoot()->traverse(&finalLinkTraverser); - // update the tree to use the new type - unit->getTreeRoot()->traverse(&finalLinkTraverser); + // The 'unit' intermediate needs the block structures update, but also structure entry indices + // may have changed from the old block to the new one that it was merged into, so update those + // in 'visitBinary' + TType unitType; + unitType.shallowCopy(unitBlock->getType()); + TMergeBlockTraverser unitFinalLinkTraverser(block, &unitType, unit, &memberIndexUpdates); + unit->getTreeRoot()->traverse(&unitFinalLinkTraverser); // update the member list (*unitMemberList) = (*memberList); diff --git a/gtests/VkRelaxed.FromFile.cpp b/gtests/VkRelaxed.FromFile.cpp index 777134d913..96cd3cf69a 100644 --- a/gtests/VkRelaxed.FromFile.cpp +++ b/gtests/VkRelaxed.FromFile.cpp @@ -107,8 +107,8 @@ bool verifyIOMapping(std::string& linkingError, glslang::TProgram& program) { auto inQualifier = in.getType()->getQualifier(); auto outQualifier = out->second->getType()->getQualifier(); success &= outQualifier.layoutLocation == inQualifier.layoutLocation; - } - else { + // These are not part of a matched interface. Other cases still need to be added. + } else if (name != "gl_FrontFacing" && name != "gl_FragCoord") { success &= false; } } @@ -293,6 +293,7 @@ INSTANTIATE_TEST_SUITE_P( ::testing::ValuesIn(std::vector({ {{"vk.relaxed.frag"}}, {{"vk.relaxed.link1.frag", "vk.relaxed.link2.frag"}}, + {{"vk.relaxed.stagelink.0.0.vert", "vk.relaxed.stagelink.0.1.vert", "vk.relaxed.stagelink.0.2.vert", "vk.relaxed.stagelink.0.0.frag", "vk.relaxed.stagelink.0.1.frag", "vk.relaxed.stagelink.0.2.frag"}}, {{"vk.relaxed.stagelink.vert", "vk.relaxed.stagelink.frag"}}, {{"vk.relaxed.errorcheck.vert", "vk.relaxed.errorcheck.frag"}}, {{"vk.relaxed.changeSet.vert", "vk.relaxed.changeSet.frag" }, { {"0"}, {"1"} } }, From ca0d54d51b1fd7bedcde69cede2e1b7141501047 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 30 Dec 2021 11:56:57 -0700 Subject: [PATCH 298/365] Enhance readability of error messages for GLSL Specifically, make GLSL link error messages more specific and output only information relevant to the error. Also change type printing to more closely reflect GLSL syntax. This is the default for link error messages, but must me enabled with the new option --enhanced-msgs for compilation error messages. Also with --enhanced-msgs, only emit one error message per source line. --- StandAlone/StandAlone.cpp | 9 + Test/baseResults/150.tesc.out | 12 +- Test/baseResults/310.geom.out | 2 +- Test/baseResults/310.tesc.out | 4 +- Test/baseResults/310.tese.out | 4 +- Test/baseResults/320.geom.out | 2 +- Test/baseResults/320.tesc.out | 4 +- Test/baseResults/320.tese.out | 2 +- Test/baseResults/410.geom.out | 2 +- Test/baseResults/420.tesc.out | 2 +- Test/baseResults/450.geom.out | 2 +- Test/baseResults/enhanced.0.frag.out | 6 + Test/baseResults/enhanced.1.frag.out | 6 + Test/baseResults/enhanced.2.frag.out | 6 + Test/baseResults/enhanced.3.link.out | 8 + Test/baseResults/enhanced.4.link.out | 7 + Test/baseResults/enhanced.5.link.out | 8 + Test/baseResults/enhanced.6.link.out | 7 + Test/baseResults/enhanced.7.link.out | 7 + Test/baseResults/iomap.crossStage.2.vert.out | 5 +- Test/baseResults/iomap.crossStage.vert.out | 5 +- Test/baseResults/iomap.crossStage.vk.vert.out | 5 +- .../link.multiAnonBlocksInvalid.0.0.vert.out | 23 +- .../link.multiBlocksInvalid.0.0.vert.out | 42 +- .../link.multiBlocksValid.1.0.vert.out | 15 +- .../link.vk.differentPC.0.0.frag.out | 6 +- .../link.vk.differentPC.1.0.frag.out | 10 +- .../link.vk.multiBlocksValid.0.0.vert.out | 20 +- .../link.vk.multiBlocksValid.1.0.geom.out | 25 +- .../link.vk.pcNamingValid.0.0.vert.out | 5 +- Test/enhanced.0.frag | 9 + Test/enhanced.1.frag | 11 + Test/enhanced.2.frag | 7 + Test/enhanced.3.frag | 16 + Test/enhanced.3.vert | 22 + Test/enhanced.4.frag | 16 + Test/enhanced.4.vert | 22 + Test/enhanced.5.frag | 16 + Test/enhanced.5.vert | 22 + Test/enhanced.6.frag | 16 + Test/enhanced.6.vert | 22 + Test/enhanced.7.frag | 20 + Test/enhanced.7.vert | 27 + Test/runtests | 22 + glslang/Include/Types.h | 504 +++++++++++------- glslang/Include/glslang_c_shader_types.h | 1 + glslang/Include/intermediate.h | 2 +- .../MachineIndependent/ParseContextBase.cpp | 3 + glslang/MachineIndependent/ParseHelper.cpp | 112 ++-- glslang/MachineIndependent/ShaderLang.cpp | 3 + glslang/MachineIndependent/glslang.m4 | 6 +- glslang/MachineIndependent/glslang.y | 6 +- glslang/MachineIndependent/glslang_tab.cpp | 6 +- glslang/MachineIndependent/linkValidate.cpp | 253 +++++++-- .../MachineIndependent/localintermediate.h | 18 +- glslang/Public/ShaderLang.h | 2 + 56 files changed, 1053 insertions(+), 372 deletions(-) create mode 100644 Test/baseResults/enhanced.0.frag.out create mode 100644 Test/baseResults/enhanced.1.frag.out create mode 100644 Test/baseResults/enhanced.2.frag.out create mode 100644 Test/baseResults/enhanced.3.link.out create mode 100644 Test/baseResults/enhanced.4.link.out create mode 100644 Test/baseResults/enhanced.5.link.out create mode 100644 Test/baseResults/enhanced.6.link.out create mode 100644 Test/baseResults/enhanced.7.link.out create mode 100644 Test/enhanced.0.frag create mode 100644 Test/enhanced.1.frag create mode 100644 Test/enhanced.2.frag create mode 100644 Test/enhanced.3.frag create mode 100644 Test/enhanced.3.vert create mode 100644 Test/enhanced.4.frag create mode 100644 Test/enhanced.4.vert create mode 100644 Test/enhanced.5.frag create mode 100644 Test/enhanced.5.vert create mode 100644 Test/enhanced.6.frag create mode 100644 Test/enhanced.6.vert create mode 100644 Test/enhanced.7.frag create mode 100644 Test/enhanced.7.vert diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index 72f552274d..bda4ee783a 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -178,6 +178,7 @@ const char* variableName = nullptr; bool HlslEnable16BitTypes = false; bool HlslDX9compatible = false; bool HlslDxPositionW = false; +bool EnhancedMsgs = false; bool DumpBuiltinSymbols = false; std::vector IncludeDirectoryList; @@ -665,6 +666,8 @@ void ProcessArguments(std::vector>& workItem HlslDX9compatible = true; } else if (lowerword == "hlsl-dx-position-w") { HlslDxPositionW = true; + } else if (lowerword == "enhanced-msgs") { + EnhancedMsgs = true; } else if (lowerword == "auto-sampled-textures") { autoSampledTextures = true; } else if (lowerword == "invert-y" || // synonyms @@ -1073,6 +1076,8 @@ void SetMessageOptions(EShMessages& messages) messages = (EShMessages)(messages | EShMsgHlslDX9Compatible); if (DumpBuiltinSymbols) messages = (EShMessages)(messages | EShMsgBuiltinSymbolTable); + if (EnhancedMsgs) + messages = (EShMessages)(messages | EShMsgEnhanced); } // @@ -1301,6 +1306,9 @@ void CompileAndLinkShaderUnits(std::vector compUnits) if (HlslDxPositionW) shader->setDxPositionW(true); + if (EnhancedMsgs) + shader->setEnhancedMsgs(); + // Set up the environment, some subsettings take precedence over earlier // ways of setting things. if (Options & EOptionSpv) { @@ -1867,6 +1875,7 @@ void usage() " --hlsl-dx-position-w W component of SV_Position in HLSL fragment\n" " shaders compatible with DirectX\n" " --invert-y | --iy invert position.Y output in vertex shader\n" + " --enhanced-msgs print more readable error messages (GLSL only)\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" diff --git a/Test/baseResults/150.tesc.out b/Test/baseResults/150.tesc.out index 535a8a6288..78b32da23c 100644 --- a/Test/baseResults/150.tesc.out +++ b/Test/baseResults/150.tesc.out @@ -627,7 +627,7 @@ ERROR: node is still EOpNull! ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb -ERROR: 0:26: 'gl_PointSize' : no such field in structure +ERROR: 0:26: 'gl_PointSize' : no such field in structure 'gl_out' ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}' ERROR: 0:29: 'out' : type must be an array: outf ERROR: 0:43: 'vertices' : must be greater than 0 @@ -940,8 +940,9 @@ ERROR: Linking tessellation control stage: Multiple function bodies in multiple main( ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: main( -ERROR: Linking tessellation control stage: Types must match: - outa: " global 4-element array of int" versus " global 1-element array of int" +ERROR: Linking tessellation control and tessellation control stages: Array sizes must be compatible: + tessellation control stage: " int outa[4]" + tessellation control stage: " int outa[1]" ERROR: Linking tessellation control stage: can't handle multiple entry points per stage ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: main( @@ -951,8 +952,9 @@ ERROR: Linking tessellation control stage: Multiple function bodies in multiple foo( ERROR: Linking tessellation control stage: Multiple function bodies in multiple compilation units for the same signature in the same stage: main( -ERROR: Linking tessellation control stage: Types must match: - gl_out: " out 4-element array of block{ out 4-component vector of float Position gl_Position, out float PointSize gl_PointSize, out unsized 2-element array of float ClipDistance gl_ClipDistance}" versus " out 3-element array of block{ out 4-component vector of float Position gl_Position}" +ERROR: Linking tessellation control and tessellation control stages: tessellation control block member has no corresponding member in tessellation control block: + tessellation control stage: Block: gl_PerVertex, Member: gl_PointSize + tessellation control stage: Block: gl_PerVertex, Member: n/a Linked tessellation evaluation stage: diff --git a/Test/baseResults/310.geom.out b/Test/baseResults/310.geom.out index b0dabc3b20..2fa5d111c1 100644 --- a/Test/baseResults/310.geom.out +++ b/Test/baseResults/310.geom.out @@ -6,7 +6,7 @@ ERROR: 0:43: 'EmitStreamVertex' : no matching overloaded function found ERROR: 0:44: 'EndStreamPrimitive' : no matching overloaded function found ERROR: 0:47: 'gl_ClipDistance' : undeclared identifier ERROR: 0:47: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector -ERROR: 0:48: 'gl_ClipDistance' : no such field in structure +ERROR: 0:48: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:48: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:47: 'assign' : l-value required (can't modify a const) ERROR: 0:55: 'selecting output stream' : not supported with this profile: es diff --git a/Test/baseResults/310.tesc.out b/Test/baseResults/310.tesc.out index 25ce6ee937..bd4c1bdcea 100644 --- a/Test/baseResults/310.tesc.out +++ b/Test/baseResults/310.tesc.out @@ -6,12 +6,12 @@ ERROR: 0:12: 'patch' : can only use on output in tessellation-control shader ERROR: 0:26: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:27: 'gl_ClipDistance' : no such field in structure +ERROR: 0:27: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:27: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:34: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:35: 'gl_ClipDistance' : no such field in structure +ERROR: 0:35: 'gl_ClipDistance' : no such field in structure 'gl_out' ERROR: 0:35: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:35: 'assign' : l-value required (can't modify a const) ERROR: 0:41: '' : tessellation control barrier() cannot be placed within flow control diff --git a/Test/baseResults/310.tese.out b/Test/baseResults/310.tese.out index 2f23d9ba80..5eecaffa2d 100644 --- a/Test/baseResults/310.tese.out +++ b/Test/baseResults/310.tese.out @@ -10,7 +10,7 @@ ERROR: 0:26: 'barrier' : no matching overloaded function found ERROR: 0:37: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:38: 'gl_ClipDistance' : no such field in structure +ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:47: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size @@ -43,7 +43,7 @@ ERROR: 0:100: 'location' : overlapping use of location 24 ERROR: 0:103: 'location' : overlapping use of location 24 ERROR: 0:105: 'gl_TessLevelOuter' : identifiers starting with "gl_" are reserved ERROR: 0:113: 'sample' : Reserved word. -ERROR: 0:119: 'gl_PointSize' : no such field in structure +ERROR: 0:119: 'gl_PointSize' : no such field in structure 'gl_in' ERROR: 0:119: '=' : cannot convert from ' temp block{ in highp 4-component vector of float Position gl_Position}' to ' temp highp float' ERROR: 0:127: 'gl_BoundingBoxOES' : undeclared identifier ERROR: 43 compilation errors. No code generated. diff --git a/Test/baseResults/320.geom.out b/Test/baseResults/320.geom.out index f3337660b5..cdaacb91eb 100644 --- a/Test/baseResults/320.geom.out +++ b/Test/baseResults/320.geom.out @@ -6,7 +6,7 @@ ERROR: 0:33: 'EmitStreamVertex' : no matching overloaded function found ERROR: 0:34: 'EndStreamPrimitive' : no matching overloaded function found ERROR: 0:37: 'gl_ClipDistance' : undeclared identifier ERROR: 0:37: 'gl_ClipDistance' : left of '[' is not of type array, matrix, or vector -ERROR: 0:38: 'gl_ClipDistance' : no such field in structure +ERROR: 0:38: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:38: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:37: 'assign' : l-value required (can't modify a const) ERROR: 0:45: 'selecting output stream' : not supported with this profile: es diff --git a/Test/baseResults/320.tesc.out b/Test/baseResults/320.tesc.out index 6bb52b3039..67848d9b82 100644 --- a/Test/baseResults/320.tesc.out +++ b/Test/baseResults/320.tesc.out @@ -6,12 +6,12 @@ ERROR: 0:10: 'patch' : can only use on output in tessellation-control shader ERROR: 0:24: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:25: 'gl_ClipDistance' : no such field in structure +ERROR: 0:25: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:25: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:32: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:33: 'gl_ClipDistance' : no such field in structure +ERROR: 0:33: 'gl_ClipDistance' : no such field in structure 'gl_out' ERROR: 0:33: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:33: 'assign' : l-value required (can't modify a const) ERROR: 0:39: '' : tessellation control barrier() cannot be placed within flow control diff --git a/Test/baseResults/320.tese.out b/Test/baseResults/320.tese.out index 014eeb0a46..ba51b9c859 100644 --- a/Test/baseResults/320.tese.out +++ b/Test/baseResults/320.tese.out @@ -10,7 +10,7 @@ ERROR: 0:22: 'barrier' : no matching overloaded function found ERROR: 0:33: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size GL_OES_tessellation_point_size -ERROR: 0:34: 'gl_ClipDistance' : no such field in structure +ERROR: 0:34: 'gl_ClipDistance' : no such field in structure 'gl_in' ERROR: 0:34: 'expression' : left of '[' is not of type array, matrix, or vector ERROR: 0:43: 'gl_PointSize' : required extension not requested: Possible extensions include: GL_EXT_tessellation_point_size diff --git a/Test/baseResults/410.geom.out b/Test/baseResults/410.geom.out index 498da5acb2..3cc7900c08 100644 --- a/Test/baseResults/410.geom.out +++ b/Test/baseResults/410.geom.out @@ -2,7 +2,7 @@ ERROR: 0:8: 'myIn' : cannot redeclare a built-in block with a user name ERROR: 0:12: 'gl_myIn' : no declaration found for redeclaration ERROR: 0:20: 'gl_PerVertex' : can only redeclare a built-in block once, and before any use -ERROR: 0:32: 'gl_Position' : no such field in structure +ERROR: 0:32: 'gl_Position' : no such field in structure 'gl_in' ERROR: 0:32: '=' : cannot convert from ' temp block{ in float PointSize gl_PointSize}' to ' temp 4-component vector of float' ERROR: 0:33: 'gl_Position' : member of nameless block was not redeclared ERROR: 0:33: 'assign' : l-value required "gl_PerVertex" (can't modify void) diff --git a/Test/baseResults/420.tesc.out b/Test/baseResults/420.tesc.out index a1f881cb19..4410c846f2 100644 --- a/Test/baseResults/420.tesc.out +++ b/Test/baseResults/420.tesc.out @@ -2,7 +2,7 @@ ERROR: 0:7: 'vertices' : inconsistent output number of vertices for array size of gl_out ERROR: 0:11: 'vertices' : inconsistent output number of vertices for array size of a ERROR: 0:12: 'vertices' : inconsistent output number of vertices for array size of outb -ERROR: 0:26: 'gl_PointSize' : no such field in structure +ERROR: 0:26: 'gl_PointSize' : no such field in structure 'gl_out' ERROR: 0:26: 'assign' : cannot convert from ' temp float' to ' temp block{ out 4-component vector of float Position gl_Position}' ERROR: 0:29: 'out' : type must be an array: outf ERROR: 0:43: 'vertices' : must be greater than 0 diff --git a/Test/baseResults/450.geom.out b/Test/baseResults/450.geom.out index e75bf939ad..b51a674f29 100644 --- a/Test/baseResults/450.geom.out +++ b/Test/baseResults/450.geom.out @@ -1,6 +1,6 @@ 450.geom ERROR: 0:15: '[' : array index out of range '3' -ERROR: 0:15: 'gl_Position' : no such field in structure +ERROR: 0:15: 'gl_Position' : no such field in structure 'gl_in' ERROR: 0:19: 'points' : can only apply to a standalone qualifier ERROR: 3 compilation errors. No code generated. diff --git a/Test/baseResults/enhanced.0.frag.out b/Test/baseResults/enhanced.0.frag.out new file mode 100644 index 0000000000..1171bfaf0a --- /dev/null +++ b/Test/baseResults/enhanced.0.frag.out @@ -0,0 +1,6 @@ +enhanced.0.frag +ERROR: enhanced.0.frag:7: ' vec4 constructor' : not enough data provided for construction +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.1.frag.out b/Test/baseResults/enhanced.1.frag.out new file mode 100644 index 0000000000..42f5b72d62 --- /dev/null +++ b/Test/baseResults/enhanced.1.frag.out @@ -0,0 +1,6 @@ +enhanced.1.frag +ERROR: enhanced.1.frag:9: 'v2' : no such field in structure 'vVert' +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.2.frag.out b/Test/baseResults/enhanced.2.frag.out new file mode 100644 index 0000000000..a7e48de408 --- /dev/null +++ b/Test/baseResults/enhanced.2.frag.out @@ -0,0 +1,6 @@ +enhanced.2.frag +ERROR: enhanced.2.frag:5: ' vec3 constructor' : too many arguments +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.3.link.out b/Test/baseResults/enhanced.3.link.out new file mode 100644 index 0000000000..c0e6a2020c --- /dev/null +++ b/Test/baseResults/enhanced.3.link.out @@ -0,0 +1,8 @@ +enhanced.3.vert +enhanced.3.frag +ERROR: Linking vertex and fragment stages: Member names and types must match: + Block: VS_OUT + vertex stage: " vec2 TexCoords" + fragment stage: " vec2 foobar" + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.4.link.out b/Test/baseResults/enhanced.4.link.out new file mode 100644 index 0000000000..2c0acf41db --- /dev/null +++ b/Test/baseResults/enhanced.4.link.out @@ -0,0 +1,7 @@ +enhanced.4.vert +enhanced.4.frag +ERROR: Linking vertex and fragment stages: Layout location qualifier must match: + vertex stage: Block: VS_OUT Instance: vs_out: "layout( location=0) out" + fragment stage: Block: VS_OUT Instance: fs_in: "layout( location=1) in" + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.5.link.out b/Test/baseResults/enhanced.5.link.out new file mode 100644 index 0000000000..929cfcef0f --- /dev/null +++ b/Test/baseResults/enhanced.5.link.out @@ -0,0 +1,8 @@ +enhanced.5.vert +enhanced.5.frag +ERROR: Linking vertex and fragment stages: Member names and types must match: + Block: VS_OUT + vertex stage: " vec2 TexCoords" + fragment stage: " vec3 TexCoords" + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.6.link.out b/Test/baseResults/enhanced.6.link.out new file mode 100644 index 0000000000..9962628270 --- /dev/null +++ b/Test/baseResults/enhanced.6.link.out @@ -0,0 +1,7 @@ +enhanced.6.vert +enhanced.6.frag +ERROR: Linking vertex and fragment stages: Array sizes must be compatible: + vertex stage: " VS_OUT{ vec2 TexCoords} vs_out[2]" + fragment stage: " VS_OUT{ vec2 TexCoords} fs_in[1]" + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/enhanced.7.link.out b/Test/baseResults/enhanced.7.link.out new file mode 100644 index 0000000000..a6333be94f --- /dev/null +++ b/Test/baseResults/enhanced.7.link.out @@ -0,0 +1,7 @@ +enhanced.7.vert +enhanced.7.frag +ERROR: Linking vertex and fragment stages: vertex block member has no corresponding member in fragment block: + vertex stage: Block: Vertex, Member: ii + fragment stage: Block: Vertex, Member: n/a + +SPIR-V is not generated for failed compile or link diff --git a/Test/baseResults/iomap.crossStage.2.vert.out b/Test/baseResults/iomap.crossStage.2.vert.out index 325c1b465a..85139cc7a3 100644 --- a/Test/baseResults/iomap.crossStage.2.vert.out +++ b/Test/baseResults/iomap.crossStage.2.vert.out @@ -207,8 +207,9 @@ Linked geometry stage: Linked fragment stage: -WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. - blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" +WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names. + unknown stage stage: Block: crossStageBlock2 Instance: blockName1: "" + fragment stage: Block: crossStageBlock2 Instance: blockName2: "" Shader version: 460 0:? Sequence diff --git a/Test/baseResults/iomap.crossStage.vert.out b/Test/baseResults/iomap.crossStage.vert.out index 5338b80750..13ff58c9c6 100644 --- a/Test/baseResults/iomap.crossStage.vert.out +++ b/Test/baseResults/iomap.crossStage.vert.out @@ -133,8 +133,9 @@ Linked vertex stage: Linked fragment stage: -WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. - blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform 4-component vector of float a, layout( column_major std140) uniform 2-component vector of float b}" +WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names. + unknown stage stage: Block: crossStageBlock2 Instance: blockName1: "" + fragment stage: Block: crossStageBlock2 Instance: blockName2: "" Shader version: 460 0:? Sequence diff --git a/Test/baseResults/iomap.crossStage.vk.vert.out b/Test/baseResults/iomap.crossStage.vk.vert.out index e137bdfc40..0a2eae8409 100644 --- a/Test/baseResults/iomap.crossStage.vk.vert.out +++ b/Test/baseResults/iomap.crossStage.vk.vert.out @@ -194,8 +194,9 @@ Linked geometry stage: Linked fragment stage: -WARNING: Linking unknown stage stage: Matched shader interfaces are using different instance names. - blockName1: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" versus blockName2: "layout( column_major std140) uniform 2-element array of block{layout( column_major std140) uniform highp 4-component vector of float a, layout( column_major std140) uniform highp 2-component vector of float b}" +WARNING: Linking unknown stage and fragment stages: Matched shader interfaces are using different instance names. + unknown stage stage: Block: crossStageBlock2 Instance: blockName1: "" + fragment stage: Block: crossStageBlock2 Instance: blockName2: "" Shader version: 460 0:? Sequence diff --git a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out index 404ae84939..c34401cba4 100644 --- a/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out +++ b/Test/baseResults/link.multiAnonBlocksInvalid.0.0.vert.out @@ -92,15 +92,20 @@ Shader version: 430 Linked vertex stage: -ERROR: Linking vertex stage: Types must match: - anon@0: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus anon@1: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" -ERROR: Linking vertex stage: Types must match: - anon@2: " out block{ out 4-component vector of float v1}" versus " out block{ out 4-component vector of float v1, out 4-component vector of float v2}" -ERROR: Linking vertex stage: Types must match: - anon@1: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float b}" versus anon@3: "layout( column_major shared) buffer block{layout( column_major shared) buffer 4-component vector of float a}" -ERROR: Linking vertex stage: Matched Uniform or Storage blocks must all be anonymous, or all be named: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - myName: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}" versus anon@4: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float m}" +ERROR: Linking vertex and vertex stages: vertex block member has no corresponding member in vertex block: + vertex stage: Block: Block, Member: uWorld + vertex stage: Block: Block, Member: n/a +ERROR: Linking vertex and vertex stages: vertex block member has no corresponding member in vertex block: + vertex stage: Block: Vertex, Member: v2 + vertex stage: Block: Vertex, Member: n/a +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: BufferBlock + vertex stage: " vec4 b" + vertex stage: " vec4 a" +ERROR: Linking vertex and vertex stages: Matched Uniform or Storage blocks must all be anonymous, or all be named: +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: NamedBlock Instance: myName: "" + vertex stage: Block: NamedBlock Instance: anon@4: "" Shader version: 430 ERROR: node is still EOpNull! diff --git a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out index ad609e86f1..d94debbfef 100644 --- a/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out +++ b/Test/baseResults/link.multiBlocksInvalid.0.0.vert.out @@ -89,19 +89,35 @@ Shader version: 430 Linked vertex stage: -ERROR: Linking vertex stage: Types must match: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - uC: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}" -ERROR: Linking vertex stage: Types must match: -ERROR: Linking vertex stage: Storage qualifiers must match: -ERROR: Linking vertex stage: Layout qualification must match: - uBufC: "layout( column_major std430) buffer block{layout( column_major std430 offset=0) buffer 4-component vector of float color1}" versus uColorB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color2}" -ERROR: Linking vertex stage: Types must match: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - uD: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj}" versus uDefaultB: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uWorld}" -ERROR: Linking vertex stage: Types must match: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - oV: " out block{ out 4-component vector of float v1}" versus oVert: " out block{ out 4-component vector of float v2}" +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: ColorBlock + vertex stage: " vec4 color1" + vertex stage: " vec4 color2" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: ColorBlock Instance: uC: "" + vertex stage: Block: ColorBlock Instance: uColorB: "" +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: ColorBlock + vertex stage: " vec4 color1" + vertex stage: " vec4 color2" +ERROR: Linking vertex and vertex stages: Storage qualifiers must match: +ERROR: Linking vertex and vertex stages: Layout packing qualifier must match: + vertex stage: Block: ColorBlock Instance: uBufC: "layout( column_major std430) buffer" + vertex stage: Block: ColorBlock Instance: uColorB: "layout( column_major std140) uniform" +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: Block + vertex stage: " mat4x4 uProj" + vertex stage: " mat4x4 uWorld" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Block Instance: uD: "" + vertex stage: Block: Block Instance: uDefaultB: "" +ERROR: Linking vertex and vertex stages: Member names and types must match: + Block: Vertex + vertex stage: " vec4 v1" + vertex stage: " vec4 v2" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Vertex Instance: oV: "" + vertex stage: Block: Vertex Instance: oVert: "" Shader version: 430 0:? Sequence diff --git a/Test/baseResults/link.multiBlocksValid.1.0.vert.out b/Test/baseResults/link.multiBlocksValid.1.0.vert.out index 0015cab45b..69513f05fc 100644 --- a/Test/baseResults/link.multiBlocksValid.1.0.vert.out +++ b/Test/baseResults/link.multiBlocksValid.1.0.vert.out @@ -83,12 +83,15 @@ Shader version: 430 Linked vertex stage: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - c: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}" versus a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4-component vector of float color1, layout( column_major std140 offset=16) uniform 4-component vector of float color2}" -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - a: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" versus b: "layout( column_major std140) uniform block{layout( column_major std140 offset=0) uniform 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform 4X4 matrix of float uWorld}" -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - b: " out block{ out 4-component vector of float v1, out 4-component vector of float v2}" versus c: " out block{ out 4-component vector of float v1, out 4-component vector of float v2}" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: ColorBlock Instance: c: "" + vertex stage: Block: ColorBlock Instance: a: "" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Block Instance: a: "" + vertex stage: Block: Block Instance: b: "" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Vertex Instance: b: "" + vertex stage: Block: Vertex Instance: c: "" Shader version: 430 0:? Sequence diff --git a/Test/baseResults/link.vk.differentPC.0.0.frag.out b/Test/baseResults/link.vk.differentPC.0.0.frag.out index d7cfd22074..d78ba54ac6 100644 --- a/Test/baseResults/link.vk.differentPC.0.0.frag.out +++ b/Test/baseResults/link.vk.differentPC.0.0.frag.out @@ -52,8 +52,10 @@ gl_FragCoord origin is upper left Linked fragment stage: -ERROR: Linking fragment stage: Types must match: - uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale2}" +ERROR: Linking fragment and fragment stages: Member names and types must match: + Block: PushConstantBlock + fragment stage: " float scale" + fragment stage: " float scale2" Shader version: 450 gl_FragCoord origin is upper left diff --git a/Test/baseResults/link.vk.differentPC.1.0.frag.out b/Test/baseResults/link.vk.differentPC.1.0.frag.out index 632f18b139..07ed124a07 100644 --- a/Test/baseResults/link.vk.differentPC.1.0.frag.out +++ b/Test/baseResults/link.vk.differentPC.1.0.frag.out @@ -52,10 +52,12 @@ gl_FragCoord origin is upper left Linked fragment stage: -ERROR: Linking fragment stage: Types must match: - uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" -ERROR: Linking fragment stage: Types must match: - uPC: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale, layout( column_major std430 offset=36) uniform highp float scale2}" versus "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4-component vector of float color, layout( column_major std430 offset=16) uniform highp 4-component vector of float color2, layout( column_major std430 offset=32) uniform highp float scale}" +ERROR: Linking fragment and fragment stages: fragment block member has no corresponding member in fragment block: + fragment stage: Block: PushConstantBlock, Member: scale2 + fragment stage: Block: PushConstantBlock, Member: n/a +ERROR: Linking fragment and fragment stages: fragment block member has no corresponding member in fragment block: + fragment stage: Block: PushConstantBlock, Member: scale2 + fragment stage: Block: PushConstantBlock, Member: n/a Shader version: 450 gl_FragCoord origin is upper left diff --git a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out index bdabab18a5..29a4df04d0 100644 --- a/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out +++ b/Test/baseResults/link.vk.multiBlocksValid.0.0.vert.out @@ -87,14 +87,18 @@ Shader version: 430 Linked vertex stage: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - uC: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" versus uColor: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - uBuf: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" versus uBuffer: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - uM: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" versus uMatrix: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - oV: " out block{ out highp 4-component vector of float v1, out highp 4-component vector of float v2}" versus anon@0: " out block{ out highp 4-component vector of float v1, out highp 4-component vector of float v2}" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: ColorBlock Instance: uC: "" + vertex stage: Block: ColorBlock Instance: uColor: "" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: BufferBlock Instance: uBuf: "" + vertex stage: Block: BufferBlock Instance: uBuffer: "" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: MatrixBlock Instance: uM: "" + vertex stage: Block: MatrixBlock Instance: uMatrix: "" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: Vertex Instance: oV: "" + vertex stage: Block: Vertex Instance: anon@0: "" Shader version: 430 0:? Sequence diff --git a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out index b0456a0860..4005f60157 100644 --- a/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out +++ b/Test/baseResults/link.vk.multiBlocksValid.1.0.geom.out @@ -131,16 +131,21 @@ output primitive = triangle_strip Linked geometry stage: -WARNING: Linking geometry stage: Matched shader interfaces are using different instance names. - uC: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" versus uColor: "layout( binding=1 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4-component vector of float color1, layout( column_major std140 offset=16) uniform bool b, layout( column_major std140 offset=32) uniform highp 4-component vector of float color2, layout( column_major std140 offset=48) uniform highp 4-component vector of float color3}" -WARNING: Linking geometry stage: Matched shader interfaces are using different instance names. - uBuf: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" versus uBuffer: "layout( binding=1 column_major std430) buffer block{layout( column_major std430 offset=0) buffer highp 4X4 matrix of float p}" -WARNING: Linking geometry stage: Matched shader interfaces are using different instance names. - uM: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" versus uMatrix: "layout( binding=0 column_major std140) uniform block{layout( column_major std140 offset=0) uniform highp 4X4 matrix of float uProj, layout( column_major std140 offset=64) uniform highp 4X4 matrix of float uWorld}" -WARNING: Linking geometry stage: Matched shader interfaces are using different instance names. - oV: "layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1}" versus anon@0: "layout( stream=0) out block{layout( stream=0) out highp 4-component vector of float val1}" -WARNING: Linking geometry stage: Matched shader interfaces are using different instance names. - iV: " in 3-element array of block{ in highp 4-component vector of float v1, in highp 4-component vector of float v2}" versus iVV: " in 3-element array of block{ in highp 4-component vector of float v1, in highp 4-component vector of float v2}" +WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names. + geometry stage: Block: ColorBlock Instance: uC: "" + geometry stage: Block: ColorBlock Instance: uColor: "" +WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names. + geometry stage: Block: BufferBlock Instance: uBuf: "" + geometry stage: Block: BufferBlock Instance: uBuffer: "" +WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names. + geometry stage: Block: MatrixBlock Instance: uM: "" + geometry stage: Block: MatrixBlock Instance: uMatrix: "" +WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names. + geometry stage: Block: Vertex Instance: oV: "" + geometry stage: Block: Vertex Instance: anon@0: "" +WARNING: Linking geometry and geometry stages: Matched shader interfaces are using different instance names. + geometry stage: Block: Vertex Instance: iV: "" + geometry stage: Block: Vertex Instance: iVV: "" Shader version: 430 invocations = 1 diff --git a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out index e1d5c888e1..f84877e060 100644 --- a/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out +++ b/Test/baseResults/link.vk.pcNamingValid.0.0.vert.out @@ -56,8 +56,9 @@ Shader version: 450 Linked vertex stage: -WARNING: Linking vertex stage: Matched shader interfaces are using different instance names. - a: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2}" versus b: "layout( column_major std430 push_constant) uniform block{layout( column_major std430 offset=0) uniform highp 4X4 matrix of float uWorld, layout( column_major std430 offset=64) uniform highp 4X4 matrix of float uProj, layout( column_major std430 offset=128) uniform highp 4-component vector of float color1, layout( column_major std430 offset=144) uniform highp 4-component vector of float color2}" +WARNING: Linking vertex and vertex stages: Matched shader interfaces are using different instance names. + vertex stage: Block: PCBlock Instance: a: "" + vertex stage: Block: PCBlock Instance: b: "" Shader version: 450 0:? Sequence diff --git a/Test/enhanced.0.frag b/Test/enhanced.0.frag new file mode 100644 index 0000000000..7a42c05372 --- /dev/null +++ b/Test/enhanced.0.frag @@ -0,0 +1,9 @@ +#version 450 + +in vec3 v; + +void main() +{ + vec4 color = vec4(v); +} + diff --git a/Test/enhanced.1.frag b/Test/enhanced.1.frag new file mode 100644 index 0000000000..9aab34d7c6 --- /dev/null +++ b/Test/enhanced.1.frag @@ -0,0 +1,11 @@ +#version 450 + +in Vertex { + vec4 v; +} vVert; + +void main() +{ + vec4 color = vec4(vVert.v2.rgb, 1.0); +} + diff --git a/Test/enhanced.2.frag b/Test/enhanced.2.frag new file mode 100644 index 0000000000..c3c194cea3 --- /dev/null +++ b/Test/enhanced.2.frag @@ -0,0 +1,7 @@ +#version 450 + +void main() +{ + vec3 color = vec3(0.0,0.0,0.0,1.0); +} + diff --git a/Test/enhanced.3.frag b/Test/enhanced.3.frag new file mode 100644 index 0000000000..1de9f4b2b8 --- /dev/null +++ b/Test/enhanced.3.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 0) in VS_OUT +{ + vec2 foobar; +} fs_in; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in.foobar); +} + diff --git a/Test/enhanced.3.vert b/Test/enhanced.3.vert new file mode 100644 index 0000000000..043ee24612 --- /dev/null +++ b/Test/enhanced.3.vert @@ -0,0 +1,22 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out VS_OUT +{ + vec2 TexCoords; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out.TexCoords = aTexCoords; +} + diff --git a/Test/enhanced.4.frag b/Test/enhanced.4.frag new file mode 100644 index 0000000000..9c16606dae --- /dev/null +++ b/Test/enhanced.4.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 1) in VS_OUT +{ + vec2 TexCoords; +} fs_in; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in.TexCoords); +} + diff --git a/Test/enhanced.4.vert b/Test/enhanced.4.vert new file mode 100644 index 0000000000..043ee24612 --- /dev/null +++ b/Test/enhanced.4.vert @@ -0,0 +1,22 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out VS_OUT +{ + vec2 TexCoords; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out.TexCoords = aTexCoords; +} + diff --git a/Test/enhanced.5.frag b/Test/enhanced.5.frag new file mode 100644 index 0000000000..b2a51e26a5 --- /dev/null +++ b/Test/enhanced.5.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 0) in VS_OUT +{ + vec3 TexCoords; +} fs_in; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in.TexCoords.xy); +} + diff --git a/Test/enhanced.5.vert b/Test/enhanced.5.vert new file mode 100644 index 0000000000..043ee24612 --- /dev/null +++ b/Test/enhanced.5.vert @@ -0,0 +1,22 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out VS_OUT +{ + vec2 TexCoords; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out.TexCoords = aTexCoords; +} + diff --git a/Test/enhanced.6.frag b/Test/enhanced.6.frag new file mode 100644 index 0000000000..e1cf68571d --- /dev/null +++ b/Test/enhanced.6.frag @@ -0,0 +1,16 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 0) in VS_OUT +{ + vec2 TexCoords; +} fs_in[1]; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in[0].TexCoords); +} + diff --git a/Test/enhanced.6.vert b/Test/enhanced.6.vert new file mode 100644 index 0000000000..876a903e82 --- /dev/null +++ b/Test/enhanced.6.vert @@ -0,0 +1,22 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out VS_OUT +{ + vec2 TexCoords; +} vs_out[2]; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out[0].TexCoords = aTexCoords; +} + diff --git a/Test/enhanced.7.frag b/Test/enhanced.7.frag new file mode 100644 index 0000000000..f6e5279d27 --- /dev/null +++ b/Test/enhanced.7.frag @@ -0,0 +1,20 @@ +#version 450 core + +layout (location = 0) out vec4 FragColor; + +layout (location = 0) in Vertex +{ + vec4 color; + vec3 worldSpacePos; + vec3 worldSpaceNorm; + vec2 texCoord1; + flat int cameraIndex; +} fs_in; + +layout (binding = 1) uniform sampler2D t0; + +void main() +{ + FragColor = texture(t0, fs_in.texCoord1); +} + diff --git a/Test/enhanced.7.vert b/Test/enhanced.7.vert new file mode 100644 index 0000000000..4e70a617bd --- /dev/null +++ b/Test/enhanced.7.vert @@ -0,0 +1,27 @@ +#version 450 core + +layout (location = 0) in vec3 aPos; +layout (location = 1) in vec2 aTexCoords; + +layout (binding = 0) uniform anonblock { + mat4 model; + mat4 view; + mat4 projection; +} ; + +layout (location = 0) out Vertex +{ + vec4 color; + vec3 worldSpacePos; + vec3 worldSpaceNorm; + vec2 texCoord1; + flat int cameraIndex; + float ii; +} vs_out; + +void main() +{ + gl_Position = projection * view * model * vec4(aPos, 1.0); + vs_out.texCoord1 = aTexCoords; +} + diff --git a/Test/runtests b/Test/runtests index 63c3a03bb9..9f588e281d 100755 --- a/Test/runtests +++ b/Test/runtests @@ -298,6 +298,28 @@ diff -b $BASEDIR/hlsl.autosampledtextures.frag.out $TARGETDIR/hlsl.autosampledte run --auto-sampled-textures -H -Od -S frag glsl.autosampledtextures.frag > $TARGETDIR/glsl.autosampledtextures.frag.out diff -b $BASEDIR/glsl.autosampledtextures.frag.out $TARGETDIR/glsl.autosampledtextures.frag.out || HASERROR=1 +# +# Test --enhanced-msgs +# + +echo "Testing enhanced-msgs" +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.0.frag > $TARGETDIR/enhanced.0.frag.out +diff -b $BASEDIR/enhanced.0.frag.out $TARGETDIR/enhanced.0.frag.out || HASERROR=1 +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.1.frag > $TARGETDIR/enhanced.1.frag.out +diff -b $BASEDIR/enhanced.1.frag.out $TARGETDIR/enhanced.1.frag.out || HASERROR=1 +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.2.frag > $TARGETDIR/enhanced.2.frag.out +diff -b $BASEDIR/enhanced.2.frag.out $TARGETDIR/enhanced.2.frag.out || HASERROR=1 +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.3.vert enhanced.3.frag > $TARGETDIR/enhanced.3.link.out +diff -b $BASEDIR/enhanced.3.link.out $TARGETDIR/enhanced.3.link.out || HASERROR=1 +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.4.vert enhanced.4.frag > $TARGETDIR/enhanced.4.link.out +diff -b $BASEDIR/enhanced.4.link.out $TARGETDIR/enhanced.4.link.out || HASERROR=1 +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.5.vert enhanced.5.frag > $TARGETDIR/enhanced.5.link.out +diff -b $BASEDIR/enhanced.5.link.out $TARGETDIR/enhanced.5.link.out || HASERROR=1 +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.6.vert enhanced.6.frag > $TARGETDIR/enhanced.6.link.out +diff -b $BASEDIR/enhanced.6.link.out $TARGETDIR/enhanced.6.link.out || HASERROR=1 +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.7.vert enhanced.7.frag > $TARGETDIR/enhanced.7.link.out +diff -b $BASEDIR/enhanced.7.link.out $TARGETDIR/enhanced.7.link.out || HASERROR=1 + # # Final checking # diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 6a7e61df3a..54150fbe35 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -2142,7 +2142,8 @@ class TType { const char* getPrecisionQualifierString() const { return ""; } TString getBasicTypeString() const { return ""; } #else - TString getCompleteString() const + TString getCompleteString(bool syntactic = false, bool getQualifiers = true, bool getPrecision = true, + bool getType = true, TString name = "", TString structName = "") const { TString typeString; @@ -2150,232 +2151,335 @@ class TType { const auto appendUint = [&](unsigned int u) { typeString.append(std::to_string(u).c_str()); }; const auto appendInt = [&](int i) { typeString.append(std::to_string(i).c_str()); }; - if (qualifier.hasSprivDecorate()) + if (getQualifiers) { + if (qualifier.hasSprivDecorate()) appendStr(qualifier.getSpirvDecorateQualifierString().c_str()); - if (qualifier.hasLayout()) { + if (qualifier.hasLayout()) { // To reduce noise, skip this if the only layout is an xfb_buffer // with no triggering xfb_offset. TQualifier noXfbBuffer = qualifier; noXfbBuffer.layoutXfbBuffer = TQualifier::layoutXfbBufferEnd; if (noXfbBuffer.hasLayout()) { - appendStr("layout("); - if (qualifier.hasAnyLocation()) { - appendStr(" location="); - appendUint(qualifier.layoutLocation); - if (qualifier.hasComponent()) { - appendStr(" component="); - appendUint(qualifier.layoutComponent); - } - if (qualifier.hasIndex()) { - appendStr(" index="); - appendUint(qualifier.layoutIndex); - } - } - if (qualifier.hasSet()) { - appendStr(" set="); - appendUint(qualifier.layoutSet); - } - if (qualifier.hasBinding()) { - appendStr(" binding="); - appendUint(qualifier.layoutBinding); - } - if (qualifier.hasStream()) { - appendStr(" stream="); - appendUint(qualifier.layoutStream); - } - if (qualifier.hasMatrix()) { - appendStr(" "); - appendStr(TQualifier::getLayoutMatrixString(qualifier.layoutMatrix)); - } - if (qualifier.hasPacking()) { - appendStr(" "); - appendStr(TQualifier::getLayoutPackingString(qualifier.layoutPacking)); - } - if (qualifier.hasOffset()) { - appendStr(" offset="); - appendInt(qualifier.layoutOffset); - } - if (qualifier.hasAlign()) { - appendStr(" align="); - appendInt(qualifier.layoutAlign); - } - if (qualifier.hasFormat()) { - appendStr(" "); - appendStr(TQualifier::getLayoutFormatString(qualifier.layoutFormat)); - } - if (qualifier.hasXfbBuffer() && qualifier.hasXfbOffset()) { - appendStr(" xfb_buffer="); - appendUint(qualifier.layoutXfbBuffer); - } - if (qualifier.hasXfbOffset()) { - appendStr(" xfb_offset="); - appendUint(qualifier.layoutXfbOffset); - } - if (qualifier.hasXfbStride()) { - appendStr(" xfb_stride="); - appendUint(qualifier.layoutXfbStride); - } - if (qualifier.hasAttachment()) { - appendStr(" input_attachment_index="); - appendUint(qualifier.layoutAttachment); + appendStr("layout("); + if (qualifier.hasAnyLocation()) { + appendStr(" location="); + appendUint(qualifier.layoutLocation); + if (qualifier.hasComponent()) { + appendStr(" component="); + appendUint(qualifier.layoutComponent); } - if (qualifier.hasSpecConstantId()) { - appendStr(" constant_id="); - appendUint(qualifier.layoutSpecConstantId); + if (qualifier.hasIndex()) { + appendStr(" index="); + appendUint(qualifier.layoutIndex); } - if (qualifier.layoutPushConstant) - appendStr(" push_constant"); - if (qualifier.layoutBufferReference) - appendStr(" buffer_reference"); - if (qualifier.hasBufferReferenceAlign()) { - appendStr(" buffer_reference_align="); - appendUint(1u << qualifier.layoutBufferReferenceAlign); - } - - if (qualifier.layoutPassthrough) - appendStr(" passthrough"); - if (qualifier.layoutViewportRelative) - appendStr(" layoutViewportRelative"); - if (qualifier.layoutSecondaryViewportRelativeOffset != -2048) { - appendStr(" layoutSecondaryViewportRelativeOffset="); - appendInt(qualifier.layoutSecondaryViewportRelativeOffset); - } - if (qualifier.layoutShaderRecord) - appendStr(" shaderRecordNV"); - - appendStr(")"); + } + if (qualifier.hasSet()) { + appendStr(" set="); + appendUint(qualifier.layoutSet); + } + if (qualifier.hasBinding()) { + appendStr(" binding="); + appendUint(qualifier.layoutBinding); + } + if (qualifier.hasStream()) { + appendStr(" stream="); + appendUint(qualifier.layoutStream); + } + if (qualifier.hasMatrix()) { + appendStr(" "); + appendStr(TQualifier::getLayoutMatrixString(qualifier.layoutMatrix)); + } + if (qualifier.hasPacking()) { + appendStr(" "); + appendStr(TQualifier::getLayoutPackingString(qualifier.layoutPacking)); + } + if (qualifier.hasOffset()) { + appendStr(" offset="); + appendInt(qualifier.layoutOffset); + } + if (qualifier.hasAlign()) { + appendStr(" align="); + appendInt(qualifier.layoutAlign); + } + if (qualifier.hasFormat()) { + appendStr(" "); + appendStr(TQualifier::getLayoutFormatString(qualifier.layoutFormat)); + } + if (qualifier.hasXfbBuffer() && qualifier.hasXfbOffset()) { + appendStr(" xfb_buffer="); + appendUint(qualifier.layoutXfbBuffer); + } + if (qualifier.hasXfbOffset()) { + appendStr(" xfb_offset="); + appendUint(qualifier.layoutXfbOffset); + } + if (qualifier.hasXfbStride()) { + appendStr(" xfb_stride="); + appendUint(qualifier.layoutXfbStride); + } + if (qualifier.hasAttachment()) { + appendStr(" input_attachment_index="); + appendUint(qualifier.layoutAttachment); + } + if (qualifier.hasSpecConstantId()) { + appendStr(" constant_id="); + appendUint(qualifier.layoutSpecConstantId); + } + if (qualifier.layoutPushConstant) + appendStr(" push_constant"); + if (qualifier.layoutBufferReference) + appendStr(" buffer_reference"); + if (qualifier.hasBufferReferenceAlign()) { + appendStr(" buffer_reference_align="); + appendUint(1u << qualifier.layoutBufferReferenceAlign); + } + + if (qualifier.layoutPassthrough) + appendStr(" passthrough"); + if (qualifier.layoutViewportRelative) + appendStr(" layoutViewportRelative"); + if (qualifier.layoutSecondaryViewportRelativeOffset != -2048) { + appendStr(" layoutSecondaryViewportRelativeOffset="); + appendInt(qualifier.layoutSecondaryViewportRelativeOffset); + } + if (qualifier.layoutShaderRecord) + appendStr(" shaderRecordNV"); + + appendStr(")"); } - } + } - if (qualifier.invariant) + if (qualifier.invariant) appendStr(" invariant"); - if (qualifier.noContraction) + if (qualifier.noContraction) appendStr(" noContraction"); - if (qualifier.centroid) + if (qualifier.centroid) appendStr(" centroid"); - if (qualifier.smooth) + if (qualifier.smooth) appendStr(" smooth"); - if (qualifier.flat) + if (qualifier.flat) appendStr(" flat"); - if (qualifier.nopersp) + if (qualifier.nopersp) appendStr(" noperspective"); - if (qualifier.explicitInterp) + if (qualifier.explicitInterp) appendStr(" __explicitInterpAMD"); - if (qualifier.pervertexNV) + if (qualifier.pervertexNV) appendStr(" pervertexNV"); - if (qualifier.perPrimitiveNV) + if (qualifier.perPrimitiveNV) appendStr(" perprimitiveNV"); - if (qualifier.perViewNV) + if (qualifier.perViewNV) appendStr(" perviewNV"); - if (qualifier.perTaskNV) + if (qualifier.perTaskNV) appendStr(" taskNV"); - if (qualifier.patch) + if (qualifier.patch) appendStr(" patch"); - if (qualifier.sample) + if (qualifier.sample) appendStr(" sample"); - if (qualifier.coherent) + if (qualifier.coherent) appendStr(" coherent"); - if (qualifier.devicecoherent) + if (qualifier.devicecoherent) appendStr(" devicecoherent"); - if (qualifier.queuefamilycoherent) + if (qualifier.queuefamilycoherent) appendStr(" queuefamilycoherent"); - if (qualifier.workgroupcoherent) + if (qualifier.workgroupcoherent) appendStr(" workgroupcoherent"); - if (qualifier.subgroupcoherent) + if (qualifier.subgroupcoherent) appendStr(" subgroupcoherent"); - if (qualifier.shadercallcoherent) + if (qualifier.shadercallcoherent) appendStr(" shadercallcoherent"); - if (qualifier.nonprivate) + if (qualifier.nonprivate) appendStr(" nonprivate"); - if (qualifier.volatil) + if (qualifier.volatil) appendStr(" volatile"); - if (qualifier.restrict) + if (qualifier.restrict) appendStr(" restrict"); - if (qualifier.readonly) + if (qualifier.readonly) appendStr(" readonly"); - if (qualifier.writeonly) + if (qualifier.writeonly) appendStr(" writeonly"); - if (qualifier.specConstant) + if (qualifier.specConstant) appendStr(" specialization-constant"); - if (qualifier.nonUniform) + if (qualifier.nonUniform) appendStr(" nonuniform"); - if (qualifier.isNullInit()) + if (qualifier.isNullInit()) appendStr(" null-init"); - if (qualifier.isSpirvByReference()) + if (qualifier.isSpirvByReference()) appendStr(" spirv_by_reference"); - if (qualifier.isSpirvLiteral()) + if (qualifier.isSpirvLiteral()) appendStr(" spirv_literal"); - appendStr(" "); - appendStr(getStorageQualifierString()); - if (isArray()) { - for(int i = 0; i < (int)arraySizes->getNumDims(); ++i) { + appendStr(" "); + appendStr(getStorageQualifierString()); + } + if (getType) { + if (syntactic) { + if (getPrecision && qualifier.precision != EpqNone) { + appendStr(" "); + appendStr(getPrecisionQualifierString()); + } + if (isVector() || isMatrix()) { + appendStr(" "); + switch (basicType) { + case EbtDouble: + appendStr("d"); + break; + case EbtInt: + appendStr("i"); + break; + case EbtUint: + appendStr("u"); + break; + case EbtBool: + appendStr("b"); + break; + case EbtFloat: + default: + break; + } + if (isVector()) { + appendStr("vec"); + appendInt(vectorSize); + } else { + appendStr("mat"); + appendInt(matrixCols); + appendStr("x"); + appendInt(matrixRows); + } + } else if (isStruct() && structure) { + appendStr(" "); + appendStr(structName.c_str()); + appendStr("{"); + bool hasHiddenMember = true; + for (size_t i = 0; i < structure->size(); ++i) { + if (!(*structure)[i].type->hiddenMember()) { + if (!hasHiddenMember) + appendStr(", "); + typeString.append((*structure)[i].type->getCompleteString(syntactic, getQualifiers, getPrecision, getType, (*structure)[i].type->getFieldName())); + hasHiddenMember = false; + } + } + appendStr("}"); + } else { + appendStr(" "); + switch (basicType) { + case EbtDouble: + appendStr("double"); + break; + case EbtInt: + appendStr("int"); + break; + case EbtUint: + appendStr("uint"); + break; + case EbtBool: + appendStr("bool"); + break; + case EbtFloat: + appendStr("float"); + break; + default: + appendStr("unexpected"); + break; + } + } + if (name.length() > 0) { + appendStr(" "); + appendStr(name.c_str()); + } + if (isArray()) { + for (int i = 0; i < (int)arraySizes->getNumDims(); ++i) { int size = arraySizes->getDimSize(i); if (size == UnsizedArraySize && i == 0 && arraySizes->isVariablyIndexed()) - appendStr(" runtime-sized array of"); + appendStr("[]"); else { - if (size == UnsizedArraySize) { - appendStr(" unsized"); - if (i == 0) { - appendStr(" "); - appendInt(arraySizes->getImplicitSize()); - } - } else { - appendStr(" "); - appendInt(arraySizes->getDimSize(i)); + if (size == UnsizedArraySize) { + appendStr("["); + if (i == 0) + appendInt(arraySizes->getImplicitSize()); + appendStr("]"); + } + else { + appendStr("["); + appendInt(arraySizes->getDimSize(i)); + appendStr("]"); + } + } + } + } + } + else { + if (isArray()) { + for (int i = 0; i < (int)arraySizes->getNumDims(); ++i) { + int size = arraySizes->getDimSize(i); + if (size == UnsizedArraySize && i == 0 && arraySizes->isVariablyIndexed()) + appendStr(" runtime-sized array of"); + else { + if (size == UnsizedArraySize) { + appendStr(" unsized"); + if (i == 0) { + appendStr(" "); + appendInt(arraySizes->getImplicitSize()); } - appendStr("-element array of"); + } + else { + appendStr(" "); + appendInt(arraySizes->getDimSize(i)); + } + appendStr("-element array of"); } + } } - } - if (isParameterized()) { - appendStr("<"); - for(int i = 0; i < (int)typeParameters->getNumDims(); ++i) { + if (isParameterized()) { + appendStr("<"); + for (int i = 0; i < (int)typeParameters->getNumDims(); ++i) { appendInt(typeParameters->getDimSize(i)); if (i != (int)typeParameters->getNumDims() - 1) - appendStr(", "); + appendStr(", "); + } + appendStr(">"); + } + if (getPrecision && qualifier.precision != EpqNone) { + appendStr(" "); + appendStr(getPrecisionQualifierString()); + } + if (isMatrix()) { + appendStr(" "); + appendInt(matrixCols); + appendStr("X"); + appendInt(matrixRows); + appendStr(" matrix of"); + } + else if (isVector()) { + appendStr(" "); + appendInt(vectorSize); + appendStr("-component vector of"); } - appendStr(">"); - } - if (qualifier.precision != EpqNone) { - appendStr(" "); - appendStr(getPrecisionQualifierString()); - } - if (isMatrix()) { - appendStr(" "); - appendInt(matrixCols); - appendStr("X"); - appendInt(matrixRows); - appendStr(" matrix of"); - } else if (isVector()) { - appendStr(" "); - appendInt(vectorSize); - appendStr("-component vector of"); - } - - appendStr(" "); - typeString.append(getBasicTypeString()); - if (qualifier.builtIn != EbvNone) { appendStr(" "); - appendStr(getBuiltInVariableString()); - } + typeString.append(getBasicTypeString()); - // Add struct/block members - if (isStruct() && structure) { - appendStr("{"); - bool hasHiddenMember = true; - for (size_t i = 0; i < structure->size(); ++i) { - if (! (*structure)[i].type->hiddenMember()) { - if (!hasHiddenMember) - appendStr(", "); - typeString.append((*structure)[i].type->getCompleteString()); - typeString.append(" "); - typeString.append((*structure)[i].type->getFieldName()); - hasHiddenMember = false; + if (qualifier.builtIn != EbvNone) { + appendStr(" "); + appendStr(getBuiltInVariableString()); + } + + // Add struct/block members + if (isStruct() && structure) { + appendStr("{"); + bool hasHiddenMember = true; + for (size_t i = 0; i < structure->size(); ++i) { + if (!(*structure)[i].type->hiddenMember()) { + if (!hasHiddenMember) + appendStr(", "); + typeString.append((*structure)[i].type->getCompleteString()); + typeString.append(" "); + typeString.append((*structure)[i].type->getFieldName()); + hasHiddenMember = false; } + } + appendStr("}"); } - appendStr("}"); + } } return typeString; @@ -2444,10 +2548,20 @@ class TType { // type definitions, and member names to be considered the same type. // This rule applies recursively for nested or embedded types." // - bool sameStructType(const TType& right) const + // If type mismatch in structure, return member indices through lpidx and rpidx. + // If matching members for either block are exhausted, return -1 for exhausted + // block and the index of the unmatched member. Otherwise return {-1,-1}. + // + bool sameStructType(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const { - // TODO: Why return true when neither types are structures? + // Initialize error to general type mismatch. + if (lpidx != nullptr) { + *lpidx = -1; + *rpidx = -1; + } + // Most commonly, they are both nullptr, or the same pointer to the same actual structure + // TODO: Why return true when neither types are structures? if ((!isStruct() && !right.isStruct()) || (isStruct() && right.isStruct() && structure == right.structure)) return true; @@ -2464,11 +2578,17 @@ class TType { bool isGLPerVertex = *typeName == "gl_PerVertex"; // Both being nullptr was caught above, now they both have to be structures of the same number of elements - if (structure->size() != right.structure->size() && !isGLPerVertex) + if (lpidx == nullptr && + (structure->size() != right.structure->size() && !isGLPerVertex)) { return false; + } // Compare the names and types of all the members, which have to match for (size_t li = 0, ri = 0; li < structure->size() || ri < right.structure->size(); ++li, ++ri) { + if (lpidx != nullptr) { + *lpidx = static_cast(li); + *rpidx = static_cast(ri); + } if (li < structure->size() && ri < right.structure->size()) { if ((*structure)[li].type->getFieldName() == (*right.structure)[ri].type->getFieldName()) { if (*(*structure)[li].type != *(*right.structure)[ri].type) @@ -2498,11 +2618,19 @@ class TType { } // If we get here, then there should only be inconsistently declared members left } else if (li < structure->size()) { - if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) + if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName())) { + if (lpidx != nullptr) { + *rpidx = -1; + } return false; + } } else { - if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) + if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName())) { + if (lpidx != nullptr) { + *lpidx = -1; + } return false; + } } } @@ -2526,10 +2654,15 @@ class TType { return *referentType == *right.referentType; } - // See if two types match, in all aspects except arrayness - bool sameElementType(const TType& right) const + // See if two types match, in all aspects except arrayness + // If mismatch in structure members, return member indices in lpidx and rpidx. + bool sameElementType(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const { - return basicType == right.basicType && sameElementShape(right); + if (lpidx != nullptr) { + *lpidx = -1; + *rpidx = -1; + } + return basicType == right.basicType && sameElementShape(right, lpidx, rpidx); } // See if two type's arrayness match @@ -2563,15 +2696,20 @@ class TType { #endif // See if two type's elements match in all ways except basic type - bool sameElementShape(const TType& right) const + // If mismatch in structure members, return member indices in lpidx and rpidx. + bool sameElementShape(const TType& right, int* lpidx = nullptr, int* rpidx = nullptr) const { + if (lpidx != nullptr) { + *lpidx = -1; + *rpidx = -1; + } return sampler == right.sampler && vectorSize == right.vectorSize && matrixCols == right.matrixCols && matrixRows == right.matrixRows && vector1 == right.vector1 && isCoopMat() == right.isCoopMat() && - sameStructType(right) && + sameStructType(right, lpidx, rpidx) && sameReferenceType(right); } diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h index df19777b0b..f11443f3b3 100644 --- a/glslang/Include/glslang_c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -155,6 +155,7 @@ typedef enum { GLSLANG_MSG_HLSL_LEGALIZATION_BIT = (1 << 12), GLSLANG_MSG_HLSL_DX9_COMPATIBLE_BIT = (1 << 13), GLSLANG_MSG_BUILTIN_SYMBOL_TABLE_BIT = (1 << 14), + GLSLANG_MSG_ENHANCED = (1 << 15), LAST_ELEMENT_MARKER(GLSLANG_MSG_COUNT), } glslang_messages_t; diff --git a/glslang/Include/intermediate.h b/glslang/Include/intermediate.h index 595bd623db..a64ed68378 100644 --- a/glslang/Include/intermediate.h +++ b/glslang/Include/intermediate.h @@ -1155,7 +1155,7 @@ class TIntermTyped : public TIntermNode { virtual bool isIntegerDomain() const { return type.isIntegerDomain(); } bool isAtomic() const { return type.isAtomic(); } bool isReference() const { return type.isReference(); } - TString getCompleteString() const { return type.getCompleteString(); } + TString getCompleteString(bool enhanced = false) const { return type.getCompleteString(enhanced); } protected: TIntermTyped& operator=(const TIntermTyped&); diff --git a/glslang/MachineIndependent/ParseContextBase.cpp b/glslang/MachineIndependent/ParseContextBase.cpp index 1da50d62f9..616580f993 100644 --- a/glslang/MachineIndependent/ParseContextBase.cpp +++ b/glslang/MachineIndependent/ParseContextBase.cpp @@ -74,6 +74,9 @@ void C_DECL TParseContextBase::error(const TSourceLoc& loc, const char* szReason { if (messages & EShMsgOnlyPreprocessor) return; + // If enhanced msg readability, only print one error + if (messages & EShMsgEnhanced && numErrors > 0) + return; va_list args; va_start(args, szExtraInfoFormat); outputMessage(loc, szReason, szToken, szExtraInfoFormat, EPrefixError, args); diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index fa291160cb..64e352f316 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -902,8 +902,10 @@ TIntermTyped* TParseContext::handleBinaryMath(const TSourceLoc& loc, const char* result = intermediate.addBinaryMath(op, left, right, loc); } - if (result == nullptr) - binaryOpError(loc, str, left->getCompleteString(), right->getCompleteString()); + if (result == nullptr) { + bool enhanced = intermediate.getEnhancedMsgs(); + binaryOpError(loc, str, left->getCompleteString(enhanced), right->getCompleteString(enhanced)); + } return result; } @@ -926,8 +928,10 @@ TIntermTyped* TParseContext::handleUnaryMath(const TSourceLoc& loc, const char* if (result) return result; - else - unaryOpError(loc, str, childNode->getCompleteString()); + else { + bool enhanced = intermediate.getEnhancedMsgs(); + unaryOpError(loc, str, childNode->getCompleteString(enhanced)); + } return childNode; } @@ -953,8 +957,8 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm requireProfile(loc, ~EEsProfile, feature); profileRequires(loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, feature); } else if (!base->getType().isCoopMat()) { - error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString().c_str()); - + bool enhanced = intermediate.getEnhancedMsgs(); + error(loc, "does not operate on this type:", field.c_str(), base->getType().getCompleteString(enhanced).c_str()); return base; } @@ -1005,10 +1009,16 @@ TIntermTyped* TParseContext::handleDotDereference(const TSourceLoc& loc, TInterm intermediate.addIoAccessed(field); } inheritMemoryQualifiers(base->getQualifier(), result->getWritableType().getQualifier()); - } else - error(loc, "no such field in structure", field.c_str(), ""); + } else { + auto baseSymbol = base; + while (baseSymbol->getAsSymbolNode() == nullptr) + baseSymbol = baseSymbol->getAsBinaryNode()->getLeft(); + TString structName; + structName.append("\'").append(baseSymbol->getAsSymbolNode()->getName().c_str()).append( "\'"); + error(loc, "no such field in structure", field.c_str(), structName.c_str()); + } } else - error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString().c_str()); + error(loc, "does not apply to this type:", field.c_str(), base->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str()); // Propagate noContraction up the dereference chain if (base->getQualifier().isNoContraction()) @@ -1314,7 +1324,7 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction // result = addConstructor(loc, arguments, type); if (result == nullptr) - error(loc, "cannot construct with these arguments", type.getCompleteString().c_str(), ""); + error(loc, "cannot construct with these arguments", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str(), ""); } } else { // @@ -1494,7 +1504,7 @@ TIntermTyped* TParseContext::handleBuiltInFunctionCall(TSourceLoc loc, TIntermNo else error(arguments->getLoc(), " wrong operand type", "Internal Error", "built in unary operator function. Type: %s", - static_cast(arguments)->getCompleteString().c_str()); + static_cast(arguments)->getCompleteString(intermediate.getEnhancedMsgs()).c_str()); } else if (result->getAsOperator()) builtInOpCheck(loc, function, *result->getAsOperator()); @@ -2599,23 +2609,24 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan // Check that if extended types are being used that the correct extensions are enabled. if (arg0 != nullptr) { const TType& type = arg0->getType(); + bool enhanced = intermediate.getEnhancedMsgs(); switch (type.getBasicType()) { default: break; case EbtInt8: case EbtUint8: - requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int8, type.getCompleteString().c_str()); + requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int8, type.getCompleteString(enhanced).c_str()); break; case EbtInt16: case EbtUint16: - requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int16, type.getCompleteString().c_str()); + requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int16, type.getCompleteString(enhanced).c_str()); break; case EbtInt64: case EbtUint64: - requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int64, type.getCompleteString().c_str()); + requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_int64, type.getCompleteString(enhanced).c_str()); break; case EbtFloat16: - requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_float16, type.getCompleteString().c_str()); + requireExtensions(loc, 1, &E_GL_EXT_shader_subgroup_extended_types_float16, type.getCompleteString(enhanced).c_str()); break; } } @@ -3198,6 +3209,12 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T break; } + TString constructorString; + if (intermediate.getEnhancedMsgs()) + constructorString.append(type.getCompleteString(true, false, false, true)).append(" constructor"); + else + constructorString.append("constructor"); + // See if it's a matrix bool constructingMatrix = false; switch (op) { @@ -3255,7 +3272,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T if (function[arg].type->isArray()) { if (function[arg].type->isUnsizedArray()) { // Can't construct from an unsized array. - error(loc, "array argument must be sized", "constructor", ""); + error(loc, "array argument must be sized", constructorString.c_str(), ""); return true; } arrayArg = true; @@ -3285,13 +3302,13 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T intArgument = true; if (type.isStruct()) { if (function[arg].type->contains16BitFloat()) { - requireFloat16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type"); + requireFloat16Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 16-bit type"); } if (function[arg].type->contains16BitInt()) { - requireInt16Arithmetic(loc, "constructor", "can't construct structure containing 16-bit type"); + requireInt16Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 16-bit type"); } if (function[arg].type->contains8BitInt()) { - requireInt8Arithmetic(loc, "constructor", "can't construct structure containing 8-bit type"); + requireInt8Arithmetic(loc, constructorString.c_str(), "can't construct structure containing 8-bit type"); } } } @@ -3305,9 +3322,9 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T case EOpConstructF16Vec3: case EOpConstructF16Vec4: if (type.isArray()) - requireFloat16Arithmetic(loc, "constructor", "16-bit arrays not supported"); + requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported"); if (type.isVector() && function.getParamCount() != 1) - requireFloat16Arithmetic(loc, "constructor", "16-bit vectors only take vector types"); + requireFloat16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types"); break; case EOpConstructUint16: case EOpConstructU16Vec2: @@ -3318,9 +3335,9 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T case EOpConstructI16Vec3: case EOpConstructI16Vec4: if (type.isArray()) - requireInt16Arithmetic(loc, "constructor", "16-bit arrays not supported"); + requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit arrays not supported"); if (type.isVector() && function.getParamCount() != 1) - requireInt16Arithmetic(loc, "constructor", "16-bit vectors only take vector types"); + requireInt16Arithmetic(loc, constructorString.c_str(), "16-bit vectors only take vector types"); break; case EOpConstructUint8: case EOpConstructU8Vec2: @@ -3331,9 +3348,9 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T case EOpConstructI8Vec3: case EOpConstructI8Vec4: if (type.isArray()) - requireInt8Arithmetic(loc, "constructor", "8-bit arrays not supported"); + requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit arrays not supported"); if (type.isVector() && function.getParamCount() != 1) - requireInt8Arithmetic(loc, "constructor", "8-bit vectors only take vector types"); + requireInt8Arithmetic(loc, constructorString.c_str(), "8-bit vectors only take vector types"); break; default: break; @@ -3415,7 +3432,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T if (type.isArray()) { if (function.getParamCount() == 0) { - error(loc, "array constructor must have at least one argument", "constructor", ""); + error(loc, "array constructor must have at least one argument", constructorString.c_str(), ""); return true; } @@ -3423,7 +3440,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T // auto adapt the constructor type to the number of arguments type.changeOuterArraySize(function.getParamCount()); } else if (type.getOuterArraySize() != function.getParamCount()) { - error(loc, "array constructor needs one argument per array element", "constructor", ""); + error(loc, "array constructor needs one argument per array element", constructorString.c_str(), ""); return true; } @@ -3436,7 +3453,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T // At least the dimensionalities have to match. if (! function[0].type->isArray() || arraySizes.getNumDims() != function[0].type->getArraySizes()->getNumDims() + 1) { - error(loc, "array constructor argument not correct type to construct array element", "constructor", ""); + error(loc, "array constructor argument not correct type to construct array element", constructorString.c_str(), ""); return true; } @@ -3453,7 +3470,7 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T } if (arrayArg && op != EOpConstructStruct && ! type.isArrayOfArrays()) { - error(loc, "constructing non-array constituent from array argument", "constructor", ""); + error(loc, "constructing non-array constituent from array argument", constructorString.c_str(), ""); return true; } @@ -3463,51 +3480,51 @@ bool TParseContext::constructorError(const TSourceLoc& loc, TIntermNode* node, T // "If a matrix argument is given to a matrix constructor, // it is a compile-time error to have any other arguments." if (function.getParamCount() != 1) - error(loc, "matrix constructed from matrix can only have one argument", "constructor", ""); + error(loc, "matrix constructed from matrix can only have one argument", constructorString.c_str(), ""); return false; } if (overFull) { - error(loc, "too many arguments", "constructor", ""); + error(loc, "too many arguments", constructorString.c_str(), ""); return true; } if (op == EOpConstructStruct && ! type.isArray() && (int)type.getStruct()->size() != function.getParamCount()) { - error(loc, "Number of constructor parameters does not match the number of structure fields", "constructor", ""); + error(loc, "Number of constructor parameters does not match the number of structure fields", constructorString.c_str(), ""); return true; } if ((op != EOpConstructStruct && size != 1 && size < type.computeNumComponents()) || (op == EOpConstructStruct && size < type.computeNumComponents())) { - error(loc, "not enough data provided for construction", "constructor", ""); + error(loc, "not enough data provided for construction", constructorString.c_str(), ""); return true; } if (type.isCoopMat() && function.getParamCount() != 1) { - error(loc, "wrong number of arguments", "constructor", ""); + error(loc, "wrong number of arguments", constructorString.c_str(), ""); return true; } if (type.isCoopMat() && !(function[0].type->isScalar() || function[0].type->isCoopMat())) { - error(loc, "Cooperative matrix constructor argument must be scalar or cooperative matrix", "constructor", ""); + error(loc, "Cooperative matrix constructor argument must be scalar or cooperative matrix", constructorString.c_str(), ""); return true; } TIntermTyped* typed = node->getAsTyped(); if (typed == nullptr) { - error(loc, "constructor argument does not have a type", "constructor", ""); + error(loc, "constructor argument does not have a type", constructorString.c_str(), ""); return true; } if (op != EOpConstructStruct && op != EOpConstructNonuniform && typed->getBasicType() == EbtSampler) { - error(loc, "cannot convert a sampler", "constructor", ""); + error(loc, "cannot convert a sampler", constructorString.c_str(), ""); return true; } if (op != EOpConstructStruct && typed->isAtomic()) { - error(loc, "cannot convert an atomic_uint", "constructor", ""); + error(loc, "cannot convert an atomic_uint", constructorString.c_str(), ""); return true; } if (typed->getBasicType() == EbtVoid) { - error(loc, "cannot convert a void", "constructor", ""); + error(loc, "cannot convert a void", constructorString.c_str(), ""); return true; } @@ -7430,14 +7447,14 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp // Uniforms require a compile-time constant initializer if (qualifier == EvqUniform && ! initializer->getType().getQualifier().isFrontEndConstant()) { error(loc, "uniform initializers must be constant", "=", "'%s'", - variable->getType().getCompleteString().c_str()); + variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str()); variable->getWritableType().getQualifier().makeTemporary(); return nullptr; } // Global consts require a constant initializer (specialization constant is okay) if (qualifier == EvqConst && symbolTable.atGlobalLevel() && ! initializer->getType().getQualifier().isConstant()) { error(loc, "global const initializers must be constant", "=", "'%s'", - variable->getType().getCompleteString().c_str()); + variable->getType().getCompleteString(intermediate.getEnhancedMsgs()).c_str()); variable->getWritableType().getQualifier().makeTemporary(); return nullptr; } @@ -7500,7 +7517,7 @@ TIntermNode* TParseContext::executeInitializer(const TSourceLoc& loc, TIntermTyp TIntermSymbol* intermSymbol = intermediate.addSymbol(*variable, loc); TIntermTyped* initNode = intermediate.addAssign(EOpAssign, intermSymbol, initializer, loc); if (! initNode) - assignError(loc, "=", intermSymbol->getCompleteString(), initializer->getCompleteString()); + assignError(loc, "=", intermSymbol->getCompleteString(intermediate.getEnhancedMsgs()), initializer->getCompleteString(intermediate.getEnhancedMsgs())); return initNode; } @@ -7571,7 +7588,7 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const } } else if (type.isMatrix()) { if (type.getMatrixCols() != (int)initList->getSequence().size()) { - error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString().c_str()); + error(loc, "wrong number of matrix columns:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str()); return nullptr; } TType vectorType(type, 0); // dereferenced type @@ -7582,20 +7599,20 @@ TIntermTyped* TParseContext::convertInitializerList(const TSourceLoc& loc, const } } else if (type.isVector()) { if (type.getVectorSize() != (int)initList->getSequence().size()) { - error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString().c_str()); + error(loc, "wrong vector size (or rows in a matrix column):", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str()); return nullptr; } TBasicType destType = type.getBasicType(); for (int i = 0; i < type.getVectorSize(); ++i) { TBasicType initType = initList->getSequence()[i]->getAsTyped()->getBasicType(); if (destType != initType && !intermediate.canImplicitlyPromote(initType, destType)) { - error(loc, "type mismatch in initializer list", "initializer list", type.getCompleteString().c_str()); + error(loc, "type mismatch in initializer list", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str()); return nullptr; } } } else { - error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString().c_str()); + error(loc, "unexpected initializer-list type:", "initializer list", type.getCompleteString(intermediate.getEnhancedMsgs()).c_str()); return nullptr; } @@ -8103,8 +8120,9 @@ TIntermTyped* TParseContext::constructAggregate(TIntermNode* node, const TType& { TIntermTyped* converted = intermediate.addConversion(EOpConstructStruct, type, node->getAsTyped()); if (! converted || converted->getType() != type) { + bool enhanced = intermediate.getEnhancedMsgs(); error(loc, "", "constructor", "cannot convert parameter %d from '%s' to '%s'", paramCount, - node->getAsTyped()->getType().getCompleteString().c_str(), type.getCompleteString().c_str()); + node->getAsTyped()->getType().getCompleteString(enhanced).c_str(), type.getCompleteString(enhanced).c_str()); return nullptr; } diff --git a/glslang/MachineIndependent/ShaderLang.cpp b/glslang/MachineIndependent/ShaderLang.cpp index bcf2c33ff7..871b9598a4 100644 --- a/glslang/MachineIndependent/ShaderLang.cpp +++ b/glslang/MachineIndependent/ShaderLang.cpp @@ -1830,6 +1830,7 @@ void TShader::setUniqueId(unsigned long long id) void TShader::setInvertY(bool invert) { intermediate->setInvertY(invert); } void TShader::setDxPositionW(bool invert) { intermediate->setDxPositionW(invert); } +void TShader::setEnhancedMsgs() { intermediate->setEnhancedMsgs(); } void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); } #ifndef GLSLANG_WEB @@ -2049,6 +2050,8 @@ bool TProgram::linkStage(EShLanguage stage, EShMessages messages) firstIntermediate->getVersion(), firstIntermediate->getProfile()); intermediate[stage]->setLimits(firstIntermediate->getLimits()); + if (firstIntermediate->getEnhancedMsgs()) + intermediate[stage]->setEnhancedMsgs(); // The new TIntermediate must use the same origin as the original TIntermediates. // Otherwise linking will fail due to different coordinate systems. diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index d4cc5bc9ce..624add5a25 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -798,7 +798,7 @@ conditional_expression parseContext.rValueErrorCheck($5.loc, ":", $6); $$ = parseContext.intermediate.addSelection($1, $4, $6, $2.loc); if ($$ == 0) { - parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(), $6->getCompleteString()); + parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $6->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); $$ = $6; } } @@ -815,7 +815,7 @@ assignment_expression parseContext.rValueErrorCheck($2.loc, "assign", $3); $$ = parseContext.addAssign($2.loc, $2.op, $1, $3); if ($$ == 0) { - parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString()); + parseContext.assignError($2.loc, "assign", $1->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $3->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); $$ = $1; } } @@ -877,7 +877,7 @@ expression parseContext.samplerConstructorLocationCheck($2.loc, ",", $3); $$ = parseContext.intermediate.addComma($1, $3, $2.loc); if ($$ == 0) { - parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString()); + parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $3->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); $$ = $3; } } diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index df53eb5bd8..93c989953e 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -798,7 +798,7 @@ conditional_expression parseContext.rValueErrorCheck($5.loc, ":", $6); $$ = parseContext.intermediate.addSelection($1, $4, $6, $2.loc); if ($$ == 0) { - parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(), $6->getCompleteString()); + parseContext.binaryOpError($2.loc, ":", $4->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $6->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); $$ = $6; } } @@ -815,7 +815,7 @@ assignment_expression parseContext.rValueErrorCheck($2.loc, "assign", $3); $$ = parseContext.addAssign($2.loc, $2.op, $1, $3); if ($$ == 0) { - parseContext.assignError($2.loc, "assign", $1->getCompleteString(), $3->getCompleteString()); + parseContext.assignError($2.loc, "assign", $1->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $3->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); $$ = $1; } } @@ -877,7 +877,7 @@ expression parseContext.samplerConstructorLocationCheck($2.loc, ",", $3); $$ = parseContext.intermediate.addComma($1, $3, $2.loc); if ($$ == 0) { - parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(), $3->getCompleteString()); + parseContext.binaryOpError($2.loc, ",", $1->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), $3->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); $$ = $3; } } diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 5ba6a6d495..0b216b622f 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -5878,7 +5878,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.rValueErrorCheck((yyvsp[-1].lex).loc, ":", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addSelection((yyvsp[-5].interm.intermTypedNode), (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-4].lex).loc); if ((yyval.interm.intermTypedNode) == 0) { - parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString()); + parseContext.binaryOpError((yyvsp[-4].lex).loc, ":", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } @@ -5902,7 +5902,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.rValueErrorCheck((yyvsp[-1].interm).loc, "assign", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.addAssign((yyvsp[-1].interm).loc, (yyvsp[-1].interm).op, (yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); if ((yyval.interm.intermTypedNode) == 0) { - parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString()); + parseContext.assignError((yyvsp[-1].interm).loc, "assign", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } @@ -6023,7 +6023,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.samplerConstructorLocationCheck((yyvsp[-1].lex).loc, ",", (yyvsp[0].interm.intermTypedNode)); (yyval.interm.intermTypedNode) = parseContext.intermediate.addComma((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode), (yyvsp[-1].lex).loc); if ((yyval.interm.intermTypedNode) == 0) { - parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(), (yyvsp[0].interm.intermTypedNode)->getCompleteString()); + parseContext.binaryOpError((yyvsp[-1].lex).loc, ",", (yyvsp[-2].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs()), (yyvsp[0].interm.intermTypedNode)->getCompleteString(parseContext.intermediate.getEnhancedMsgs())); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 620be97c97..f5dc9b2771 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -55,22 +55,28 @@ namespace glslang { // // Link-time error emitter. // -void TIntermediate::error(TInfoSink& infoSink, const char* message) +void TIntermediate::error(TInfoSink& infoSink, const char* message, EShLanguage unitStage) { #ifndef GLSLANG_WEB infoSink.info.prefix(EPrefixError); - infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; + if (unitStage < EShLangCount) + infoSink.info << "Linking " << StageName(getStage()) << " and " << StageName(unitStage) << " stages: " << message << "\n"; + else + infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; #endif ++numErrors; } // Link-time warning. -void TIntermediate::warn(TInfoSink& infoSink, const char* message) +void TIntermediate::warn(TInfoSink& infoSink, const char* message, EShLanguage unitStage) { #ifndef GLSLANG_WEB infoSink.info.prefix(EPrefixWarning); - infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; + if (unitStage < EShLangCount) + infoSink.info << "Linking " << StageName(language) << " and " << StageName(unitStage) << " stages: " << message << "\n"; + else + infoSink.info << "Linking " << StageName(language) << " stage: " << message << "\n"; #endif } @@ -819,6 +825,10 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy #if !defined(GLSLANG_WEB) && !defined(GLSLANG_ANGLE) bool crossStage = getStage() != unitStage; bool writeTypeComparison = false; + bool errorReported = false; + bool printQualifiers = false; + bool printPrecision = false; + bool printType = false; // Types have to match { @@ -850,11 +860,48 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy (symbol.getType().isUnsizedArray() || unitSymbol.getType().isUnsizedArray())); } - if (!symbol.getType().sameElementType(unitSymbol.getType()) || - !symbol.getType().sameTypeParameters(unitSymbol.getType()) || - !arraysMatch ) { + int lpidx = -1; + int rpidx = -1; + if (!symbol.getType().sameElementType(unitSymbol.getType(), &lpidx, &rpidx)) { + if (lpidx >= 0 && rpidx >= 0) { + error(infoSink, "Member names and types must match:", unitStage); + infoSink.info << " Block: " << symbol.getType().getTypeName() << "\n"; + infoSink.info << " " << StageName(getStage()) << " stage: \"" + << (*symbol.getType().getStruct())[lpidx].type->getCompleteString(true, false, false, true, + (*symbol.getType().getStruct())[lpidx].type->getFieldName()) << "\"\n"; + infoSink.info << " " << StageName(unitStage) << " stage: \"" + << (*unitSymbol.getType().getStruct())[rpidx].type->getCompleteString(true, false, false, true, + (*unitSymbol.getType().getStruct())[rpidx].type->getFieldName()) << "\"\n"; + errorReported = true; + } else if (lpidx >= 0 && rpidx == -1) { + TString errmsg = StageName(getStage()); + errmsg.append(" block member has no corresponding member in ").append(StageName(unitStage)).append(" block:"); + error(infoSink, errmsg.c_str(), unitStage); + infoSink.info << " " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: " + << (*symbol.getType().getStruct())[lpidx].type->getFieldName() << "\n"; + infoSink.info << " " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: n/a \n"; + errorReported = true; + } else if (lpidx == -1 && rpidx >= 0) { + TString errmsg = StageName(unitStage); + errmsg.append(" block member has no corresponding member in ").append(StageName(getStage())).append(" block:"); + error(infoSink, errmsg.c_str(), unitStage); + infoSink.info << " " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: " + << (*unitSymbol.getType().getStruct())[rpidx].type->getFieldName() << "\n"; + infoSink.info << " " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: n/a \n"; + errorReported = true; + } else { + error(infoSink, "Types must match:", unitStage); + writeTypeComparison = true; + printType = true; + } + } else if (!arraysMatch) { + error(infoSink, "Array sizes must be compatible:", unitStage); + writeTypeComparison = true; + printType = true; + } else if (!symbol.getType().sameTypeParameters(unitSymbol.getType())) { + error(infoSink, "Type parameters must match:", unitStage); writeTypeComparison = true; - error(infoSink, "Types must match:"); + printType = true; } } @@ -875,13 +922,35 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy } const TQualifier& qualifier = (*symbol.getType().getStruct())[li].type->getQualifier(); const TQualifier & unitQualifier = (*unitSymbol.getType().getStruct())[ri].type->getQualifier(); - if (qualifier.layoutMatrix != unitQualifier.layoutMatrix || - qualifier.layoutOffset != unitQualifier.layoutOffset || - qualifier.layoutAlign != unitQualifier.layoutAlign || - qualifier.layoutLocation != unitQualifier.layoutLocation || - qualifier.layoutComponent != unitQualifier.layoutComponent) { - error(infoSink, "Interface block member layout qualifiers must match:"); - writeTypeComparison = true; + bool layoutQualifierError = false; + if (qualifier.layoutMatrix != unitQualifier.layoutMatrix) { + error(infoSink, "Interface block member layout matrix qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (qualifier.layoutOffset != unitQualifier.layoutOffset) { + error(infoSink, "Interface block member layout offset qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (qualifier.layoutAlign != unitQualifier.layoutAlign) { + error(infoSink, "Interface block member layout align qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (qualifier.layoutLocation != unitQualifier.layoutLocation) { + error(infoSink, "Interface block member layout location qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (qualifier.layoutComponent != unitQualifier.layoutComponent) { + error(infoSink, "Interface block member layout component qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (layoutQualifierError) { + infoSink.info << " " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << ", Member: " + << (*symbol.getType().getStruct())[li].type->getFieldName() << " \"" + << (*symbol.getType().getStruct())[li].type->getCompleteString(true, true, false, false) << "\"\n"; + infoSink.info << " " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << ", Member: " + << (*unitSymbol.getType().getStruct())[ri].type->getFieldName() << " \"" + << (*unitSymbol.getType().getStruct())[ri].type->getCompleteString(true, true, false, false) << "\"\n"; + errorReported = true; } ++li; ++ri; @@ -895,8 +964,9 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy // Qualifiers have to (almost) match // Storage... if (!isInOut && symbol.getQualifier().storage != unitSymbol.getQualifier().storage) { - error(infoSink, "Storage qualifiers must match:"); + error(infoSink, "Storage qualifiers must match:", unitStage); writeTypeComparison = true; + printQualifiers = true; } // Uniform and buffer blocks must either both have an instance name, or @@ -904,33 +974,36 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy if (symbol.getQualifier().isUniformOrBuffer() && (IsAnonymous(symbol.getName()) != IsAnonymous(unitSymbol.getName()))) { error(infoSink, "Matched Uniform or Storage blocks must all be anonymous," - " or all be named:"); + " or all be named:", unitStage); writeTypeComparison = true; } if (symbol.getQualifier().storage == unitSymbol.getQualifier().storage && (IsAnonymous(symbol.getName()) != IsAnonymous(unitSymbol.getName()) || (!IsAnonymous(symbol.getName()) && symbol.getName() != unitSymbol.getName()))) { - warn(infoSink, "Matched shader interfaces are using different instance names."); + warn(infoSink, "Matched shader interfaces are using different instance names.", unitStage); writeTypeComparison = true; } // Precision... if (!isInOut && symbol.getQualifier().precision != unitSymbol.getQualifier().precision) { - error(infoSink, "Precision qualifiers must match:"); + error(infoSink, "Precision qualifiers must match:", unitStage); writeTypeComparison = true; + printPrecision = true; } // Invariance... if (! crossStage && symbol.getQualifier().invariant != unitSymbol.getQualifier().invariant) { - error(infoSink, "Presence of invariant qualifier must match:"); + error(infoSink, "Presence of invariant qualifier must match:", unitStage); writeTypeComparison = true; + printQualifiers = true; } // Precise... if (! crossStage && symbol.getQualifier().isNoContraction() != unitSymbol.getQualifier().isNoContraction()) { - error(infoSink, "Presence of precise qualifier must match:"); + error(infoSink, "Presence of precise qualifier must match:", unitStage); writeTypeComparison = true; + printPrecision = true; } // Auxiliary and interpolation... @@ -944,57 +1017,137 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy symbol.getQualifier().isSample()!= unitSymbol.getQualifier().isSample() || symbol.getQualifier().isPatch() != unitSymbol.getQualifier().isPatch() || symbol.getQualifier().isNonPerspective() != unitSymbol.getQualifier().isNonPerspective())) { - error(infoSink, "Interpolation and auxiliary storage qualifiers must match:"); + error(infoSink, "Interpolation and auxiliary storage qualifiers must match:", unitStage); writeTypeComparison = true; + printQualifiers = true; } // Memory... - if (symbol.getQualifier().coherent != unitSymbol.getQualifier().coherent || - symbol.getQualifier().devicecoherent != unitSymbol.getQualifier().devicecoherent || - symbol.getQualifier().queuefamilycoherent != unitSymbol.getQualifier().queuefamilycoherent || - symbol.getQualifier().workgroupcoherent != unitSymbol.getQualifier().workgroupcoherent || - symbol.getQualifier().subgroupcoherent != unitSymbol.getQualifier().subgroupcoherent || - symbol.getQualifier().shadercallcoherent!= unitSymbol.getQualifier().shadercallcoherent || - symbol.getQualifier().nonprivate != unitSymbol.getQualifier().nonprivate || - symbol.getQualifier().volatil != unitSymbol.getQualifier().volatil || - symbol.getQualifier().restrict != unitSymbol.getQualifier().restrict || - symbol.getQualifier().readonly != unitSymbol.getQualifier().readonly || - symbol.getQualifier().writeonly != unitSymbol.getQualifier().writeonly) { - error(infoSink, "Memory qualifiers must match:"); - writeTypeComparison = true; + bool memoryQualifierError = false; + if (symbol.getQualifier().coherent != unitSymbol.getQualifier().coherent) { + error(infoSink, "Memory coherent qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().devicecoherent != unitSymbol.getQualifier().devicecoherent) { + error(infoSink, "Memory devicecoherent qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().queuefamilycoherent != unitSymbol.getQualifier().queuefamilycoherent) { + error(infoSink, "Memory queuefamilycoherent qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().workgroupcoherent != unitSymbol.getQualifier().workgroupcoherent) { + error(infoSink, "Memory workgroupcoherent qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().subgroupcoherent != unitSymbol.getQualifier().subgroupcoherent) { + error(infoSink, "Memory subgroupcoherent qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().shadercallcoherent != unitSymbol.getQualifier().shadercallcoherent) { + error(infoSink, "Memory shadercallcoherent qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().nonprivate != unitSymbol.getQualifier().nonprivate) { + error(infoSink, "Memory nonprivate qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().volatil != unitSymbol.getQualifier().volatil) { + error(infoSink, "Memory volatil qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().restrict != unitSymbol.getQualifier().restrict) { + error(infoSink, "Memory restrict qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().readonly != unitSymbol.getQualifier().readonly) { + error(infoSink, "Memory readonly qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (symbol.getQualifier().writeonly != unitSymbol.getQualifier().writeonly) { + error(infoSink, "Memory writeonly qualifier must match:", unitStage); + memoryQualifierError = true; + } + if (memoryQualifierError) { + writeTypeComparison = true; + printQualifiers = true; } // Layouts... // TODO: 4.4 enhanced layouts: Generalize to include offset/align: current spec // requires separate user-supplied offset from actual computed offset, but // current implementation only has one offset. - if (symbol.getQualifier().layoutMatrix != unitSymbol.getQualifier().layoutMatrix || - symbol.getQualifier().layoutPacking != unitSymbol.getQualifier().layoutPacking || - (symbol.getQualifier().hasLocation() && unitSymbol.getQualifier().hasLocation() && symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation) || - symbol.getQualifier().layoutComponent != unitSymbol.getQualifier().layoutComponent || - symbol.getQualifier().layoutIndex != unitSymbol.getQualifier().layoutIndex || - (symbol.getQualifier().hasBinding() && unitSymbol.getQualifier().hasBinding() && symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding) || - (symbol.getQualifier().hasBinding() && (symbol.getQualifier().layoutOffset != unitSymbol.getQualifier().layoutOffset))) { - error(infoSink, "Layout qualification must match:"); + bool layoutQualifierError = false; + if (symbol.getQualifier().layoutMatrix != unitSymbol.getQualifier().layoutMatrix) { + error(infoSink, "Layout matrix qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (symbol.getQualifier().layoutPacking != unitSymbol.getQualifier().layoutPacking) { + error(infoSink, "Layout packing qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (symbol.getQualifier().hasLocation() && unitSymbol.getQualifier().hasLocation() && symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation) { + error(infoSink, "Layout location qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (symbol.getQualifier().layoutComponent != unitSymbol.getQualifier().layoutComponent) { + error(infoSink, "Layout component qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (symbol.getQualifier().layoutIndex != unitSymbol.getQualifier().layoutIndex) { + error(infoSink, "Layout index qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (symbol.getQualifier().hasBinding() && unitSymbol.getQualifier().hasBinding() && symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding) { + error(infoSink, "Layout binding qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (symbol.getQualifier().hasBinding() && (symbol.getQualifier().layoutOffset != unitSymbol.getQualifier().layoutOffset)) { + error(infoSink, "Layout offset qualifier must match:", unitStage); + layoutQualifierError = true; + } + if (layoutQualifierError) { writeTypeComparison = true; + printQualifiers = true; } // Initializers have to match, if both are present, and if we don't already know the types don't match - if (! writeTypeComparison) { + if (! writeTypeComparison && ! errorReported) { if (! symbol.getConstArray().empty() && ! unitSymbol.getConstArray().empty()) { if (symbol.getConstArray() != unitSymbol.getConstArray()) { - error(infoSink, "Initializers must match:"); + error(infoSink, "Initializers must match:", unitStage); infoSink.info << " " << symbol.getName() << "\n"; } } } if (writeTypeComparison) { - infoSink.info << " " << symbol.getName() << ": \"" << symbol.getType().getCompleteString() << "\" versus "; - if (symbol.getName() != unitSymbol.getName()) - infoSink.info << unitSymbol.getName() << ": "; - - infoSink.info << "\"" << unitSymbol.getType().getCompleteString() << "\"\n"; + if (symbol.getType().getBasicType() == EbtBlock && unitSymbol.getType().getBasicType() == EbtBlock && + symbol.getType().getStruct() && unitSymbol.getType().getStruct()) { + if (printType) { + infoSink.info << " " << StageName(getStage()) << " stage: \"" << symbol.getType().getCompleteString(true, printQualifiers, printPrecision, + printType, symbol.getName(), symbol.getType().getTypeName()) << "\"\n"; + infoSink.info << " " << StageName(unitStage) << " stage: \"" << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision, + printType, unitSymbol.getName(), unitSymbol.getType().getTypeName()) << "\"\n"; + } else { + infoSink.info << " " << StageName(getStage()) << " stage: Block: " << symbol.getType().getTypeName() << " Instance: " << symbol.getName() + << ": \"" << symbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n"; + infoSink.info << " " << StageName(unitStage) << " stage: Block: " << unitSymbol.getType().getTypeName() << " Instance: " << unitSymbol.getName() + << ": \"" << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n"; + } + } else { + if (printType) { + infoSink.info << " " << StageName(getStage()) << " stage: \"" + << symbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType, symbol.getName()) << "\"\n"; + infoSink.info << " " << StageName(unitStage) << " stage: \"" + << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType, unitSymbol.getName()) << "\"\n"; + } else { + infoSink.info << " " << StageName(getStage()) << " stage: " << symbol.getName() << " \"" + << symbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n"; + infoSink.info << " " << StageName(unitStage) << " stage: " << unitSymbol.getName() << " \"" + << unitSymbol.getType().getCompleteString(true, printQualifiers, printPrecision, printType) << "\"\n"; + } + } } #endif } diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index a658c09c6c..c4d80159de 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -291,6 +291,7 @@ class TIntermediate { numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false), invertY(false), dxPositionW(false), + enhancedMsgs(false), useStorageBuffer(false), invariantAll(false), nanMinMaxClamp(false), @@ -469,12 +470,18 @@ class TIntermediate { void setDxPositionW(bool dxPosW) { - dxPositionW = dxPosW; - if (dxPositionW) - processes.addProcess("dx-position-w"); + dxPositionW = dxPosW; + if (dxPositionW) + processes.addProcess("dx-position-w"); } bool getDxPositionW() const { return dxPositionW; } + void setEnhancedMsgs() + { + enhancedMsgs = true; + } + bool getEnhancedMsgs() const { return enhancedMsgs && source == EShSourceGlsl; } + #ifdef ENABLE_HLSL void setSource(EShSource s) { source = s; } EShSource getSource() const { return source; } @@ -1031,8 +1038,8 @@ class TIntermediate { protected: TIntermSymbol* addSymbol(long long Id, const TString&, const TType&, const TConstUnionArray&, TIntermTyped* subtree, const TSourceLoc&); - void error(TInfoSink& infoSink, const char*); - void warn(TInfoSink& infoSink, const char*); + void error(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount); + void warn(TInfoSink& infoSink, const char*, EShLanguage unitStage = EShLangCount); void mergeCallGraphs(TInfoSink&, TIntermediate&); void mergeModes(TInfoSink&, TIntermediate&); void mergeTrees(TInfoSink&, TIntermediate&); @@ -1086,6 +1093,7 @@ class TIntermediate { bool recursive; bool invertY; bool dxPositionW; + bool enhancedMsgs; bool useStorageBuffer; bool invariantAll; bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN diff --git a/glslang/Public/ShaderLang.h b/glslang/Public/ShaderLang.h index 3c0e2910d6..2e240255e9 100644 --- a/glslang/Public/ShaderLang.h +++ b/glslang/Public/ShaderLang.h @@ -264,6 +264,7 @@ enum EShMessages : unsigned { EShMsgHlslLegalization = (1 << 12), // enable HLSL Legalization messages EShMsgHlslDX9Compatible = (1 << 13), // enable HLSL DX9 compatible mode (for samplers and semantics) EShMsgBuiltinSymbolTable = (1 << 14), // print the builtin symbol table + EShMsgEnhanced = (1 << 15), // enhanced message readability LAST_ELEMENT_MARKER(EShMsgCount), }; @@ -488,6 +489,7 @@ class TShader { GLSLANG_EXPORT void setUniformLocationBase(int base); GLSLANG_EXPORT void setInvertY(bool invert); GLSLANG_EXPORT void setDxPositionW(bool dxPosW); + GLSLANG_EXPORT void setEnhancedMsgs(); #ifdef ENABLE_HLSL GLSLANG_EXPORT void setHlslIoMapping(bool hlslIoMap); GLSLANG_EXPORT void setFlattenUniformArrays(bool flatten); From acd4425a29a98a20edb7544ccdb3d5a9ce791ce2 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 2 Feb 2022 18:37:43 -0700 Subject: [PATCH 299/365] Update spirv-tools known good Picking up some spirv-tools bug fixes --- known_good.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/known_good.json b/known_good.json index 0eebc7d8b8..c2575d0a28 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "73735db943d7165d725883a1da0ad9eac79c1e34" + "commit" : "45dd184c790d6bfc78a5a74a10c37e888b1823fa" }, { "name" : "spirv-tools/external/spirv-headers", From c5072a8cabd465ac967d7012d979b6f4d4b16a8a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 7 Feb 2022 12:15:31 -0700 Subject: [PATCH 300/365] Fix sameElementShape test of sampler There is apparently a hole in the initialization of sampler in TType so that a simple comparison which should pass might fail. Until the hole is found, also test that both types are samplers before comparing the sampler field for equality. Fixes #2875 --- glslang/Include/Types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 54150fbe35..91fcd4eb28 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -2703,7 +2703,7 @@ class TType { *lpidx = -1; *rpidx = -1; } - return sampler == right.sampler && + return ((basicType != EbtSampler && right.basicType != EbtSampler) || sampler == right.sampler) && vectorSize == right.vectorSize && matrixCols == right.matrixCols && matrixRows == right.matrixRows && From be202ef9ba53ea7fc24143d718544c04e5f237f2 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Wed, 9 Feb 2022 18:44:22 -0500 Subject: [PATCH 301/365] avoid leaving decorations on auto-push-constants uniform blocks that are upgraded to push_constants shouldn't have set/binding etc. decorations applied to them --- glslang/MachineIndependent/iomapper.cpp | 28 ++++++++++++------------- glslang/MachineIndependent/iomapper.h | 9 ++++++++ 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/glslang/MachineIndependent/iomapper.cpp b/glslang/MachineIndependent/iomapper.cpp index a3c53f505d..4250e92da6 100644 --- a/glslang/MachineIndependent/iomapper.cpp +++ b/glslang/MachineIndependent/iomapper.cpp @@ -203,11 +203,7 @@ struct TResolverUniformAdaptor { inline void operator()(std::pair& entKey) { TVarEntryInfo& ent = entKey.second; - ent.newLocation = -1; - ent.newComponent = -1; - ent.newBinding = -1; - ent.newSet = -1; - ent.newIndex = -1; + ent.clearNewAssignments(); const bool isValid = resolver.validateBinding(stage, ent); if (isValid) { resolver.resolveSet(ent.stage, ent); @@ -281,11 +277,7 @@ struct TResolverInOutAdaptor { inline void operator()(std::pair& entKey) { TVarEntryInfo& ent = entKey.second; - ent.newLocation = -1; - ent.newComponent = -1; - ent.newBinding = -1; - ent.newSet = -1; - ent.newIndex = -1; + ent.clearNewAssignments(); const bool isValid = resolver.validateInOut(ent.stage, ent); if (isValid) { resolver.resolveInOutLocation(stage, ent); @@ -1670,6 +1662,10 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { if (size <= int(autoPushConstantMaxSize)) { qualifier.setBlockStorage(EbsPushConstant); qualifier.layoutPacking = autoPushConstantBlockPacking; + // Push constants don't have set/binding etc. decorations, remove those. + qualifier.layoutSet = TQualifier::layoutSetEnd; + at->second.clearNewAssignments(); + upgraded = true; } } @@ -1677,10 +1673,14 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) { // If it's been upgraded to push_constant, then remove it from the uniformVector // so it doesn't get a set/binding assigned to it. if (upgraded) { - auto at = std::find_if(uniformVector.begin(), uniformVector.end(), - [this](const TVarLivePair& p) { return p.first == autoPushConstantBlockName; }); - if (at != uniformVector.end()) - uniformVector.erase(at); + while (1) { + auto at = std::find_if(uniformVector.begin(), uniformVector.end(), + [this](const TVarLivePair& p) { return p.first == autoPushConstantBlockName; }); + if (at != uniformVector.end()) + uniformVector.erase(at); + else + break; + } } } for (size_t stage = 0; stage < EShLangCount; stage++) { diff --git a/glslang/MachineIndependent/iomapper.h b/glslang/MachineIndependent/iomapper.h index c43864e3aa..ba7bc3bbc7 100644 --- a/glslang/MachineIndependent/iomapper.h +++ b/glslang/MachineIndependent/iomapper.h @@ -61,6 +61,15 @@ struct TVarEntryInfo { int newComponent; int newIndex; EShLanguage stage; + + void clearNewAssignments() { + newBinding = -1; + newSet = -1; + newLocation = -1; + newComponent = -1; + newIndex = -1; + } + struct TOrderById { inline bool operator()(const TVarEntryInfo& l, const TVarEntryInfo& r) { return l.id < r.id; } }; From 25555a7f62cf10e301f110142eea49d20fac27f9 Mon Sep 17 00:00:00 2001 From: Brendan Shanks Date: Thu, 10 Feb 2022 09:24:03 -0800 Subject: [PATCH 302/365] Explicitly use Python 3 for scripts --- build_info.py | 2 +- gen_extension_headers.py | 4 ++-- update_glslang_sources.py | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) mode change 100644 => 100755 gen_extension_headers.py diff --git a/build_info.py b/build_info.py index 7c1998f6e0..06d613b0d9 100755 --- a/build_info.py +++ b/build_info.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright (c) 2020 Google Inc. # diff --git a/gen_extension_headers.py b/gen_extension_headers.py old mode 100644 new mode 100755 index a787f9a9cb..2838c9622e --- a/gen_extension_headers.py +++ b/gen_extension_headers.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright (c) 2020 Google Inc. # @@ -95,4 +95,4 @@ def main(): generate_main(glsl_files, output_file) if __name__ == '__main__': - main() \ No newline at end of file + main() diff --git a/update_glslang_sources.py b/update_glslang_sources.py index 65be2f6a2c..20f303ba3b 100755 --- a/update_glslang_sources.py +++ b/update_glslang_sources.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 # Copyright 2017 The Glslang Authors. All rights reserved. # From 63dbacaa9431b48fb1a6fc83632095a3b4d7dfd7 Mon Sep 17 00:00:00 2001 From: David Neto Date: Wed, 16 Feb 2022 17:10:29 -0500 Subject: [PATCH 303/365] Fix Test/hlsl.namespace.frag test case Before this change, the example is rejected by DXC: $ dxc -T ps_6_0 hlsl.namespace.frag hlsl.namespace.frag:22:73: error: call to non-static member function without an object argument return N1::getVec() + N2::getVec() + N2::N3::getVec() + N2::N3::C1::getVec() * N2::gf; ~~~~~~~~~~~~^~~~~~ The call to the class member function requires an object, or we ned to make the function static. This update makes the function static. This also fixes SPIR-V validation: without this change the call to that getVec does not have enough arguments: error: line 69: OpFunctionCall Function 's parameter count does not match the argument count. %43 = OpFunctionCall %v4float %N2__N3__C1__getVec_ --- Test/baseResults/hlsl.namespace.frag.out | 97 +++++++++++------------- Test/hlsl.namespace.frag | 2 +- 2 files changed, 45 insertions(+), 54 deletions(-) diff --git a/Test/baseResults/hlsl.namespace.frag.out b/Test/baseResults/hlsl.namespace.frag.out index 5346c44a06..e224eb922f 100644 --- a/Test/baseResults/hlsl.namespace.frag.out +++ b/Test/baseResults/hlsl.namespace.frag.out @@ -17,9 +17,8 @@ gl_FragCoord origin is upper left 0:? Sequence 0:12 Branch: Return with expression 0:12 'v2' ( global 4-component vector of float) -0:15 Function Definition: N2::N3::C1::getVec( ( temp 4-component vector of float) +0:15 Function Definition: N2::N3::C1::getVec( ( global 4-component vector of float) 0:15 Function Parameters: -0:15 '@this' ( temp structure{}) 0:? Sequence 0:15 Branch: Return with expression 0:15 'v2' ( global 4-component vector of float) @@ -34,7 +33,7 @@ gl_FragCoord origin is upper left 0:22 Function Call: N2::getVec( ( temp 4-component vector of float) 0:22 Function Call: N2::N3::getVec( ( temp 4-component vector of float) 0:22 vector-scale ( temp 4-component vector of float) -0:22 Function Call: N2::N3::C1::getVec( ( temp 4-component vector of float) +0:22 Function Call: N2::N3::C1::getVec( ( global 4-component vector of float) 0:22 'N2::gf' ( global float) 0:21 Function Definition: main( ( temp void) 0:21 Function Parameters: @@ -70,9 +69,8 @@ gl_FragCoord origin is upper left 0:? Sequence 0:12 Branch: Return with expression 0:12 'v2' ( global 4-component vector of float) -0:15 Function Definition: N2::N3::C1::getVec( ( temp 4-component vector of float) +0:15 Function Definition: N2::N3::C1::getVec( ( global 4-component vector of float) 0:15 Function Parameters: -0:15 '@this' ( temp structure{}) 0:? Sequence 0:15 Branch: Return with expression 0:15 'v2' ( global 4-component vector of float) @@ -87,7 +85,7 @@ gl_FragCoord origin is upper left 0:22 Function Call: N2::getVec( ( temp 4-component vector of float) 0:22 Function Call: N2::N3::getVec( ( temp 4-component vector of float) 0:22 vector-scale ( temp 4-component vector of float) -0:22 Function Call: N2::N3::C1::getVec( ( temp 4-component vector of float) +0:22 Function Call: N2::N3::C1::getVec( ( global 4-component vector of float) 0:22 'N2::gf' ( global float) 0:21 Function Definition: main( ( temp void) 0:21 Function Parameters: @@ -101,82 +99,75 @@ gl_FragCoord origin is upper left 0:? 'N2::gf' ( global float) 0:? '@entryPointOutput' (layout( location=0) out 4-component vector of float) -Validation failed // Module Version 10000 // Generated by (magic number): 8000a -// Id's are bound by 54 +// Id's are bound by 50 Capability Shader 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint Fragment 4 "main" 52 + EntryPoint Fragment 4 "main" 48 ExecutionMode 4 OriginUpperLeft Source HLSL 500 Name 4 "main" Name 9 "N1::getVec(" Name 11 "N2::getVec(" Name 13 "N2::N3::getVec(" - Name 15 "C1" - Name 19 "N2::N3::C1::getVec(" - Name 18 "@this" - Name 21 "@main(" - Name 24 "v1" - Name 28 "v2" - Name 45 "N2::gf" - Name 52 "@entryPointOutput" - Decorate 52(@entryPointOutput) Location 0 + Name 15 "N2::N3::C1::getVec(" + Name 17 "@main(" + Name 20 "v1" + Name 24 "v2" + Name 41 "N2::gf" + Name 48 "@entryPointOutput" + Decorate 48(@entryPointOutput) Location 0 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 7: TypeVector 6(float) 4 8: TypeFunction 7(fvec4) - 15(C1): TypeStruct - 16: TypePointer Function 15(C1) - 17: TypeFunction 7(fvec4) 16(ptr) - 23: TypePointer Private 7(fvec4) - 24(v1): 23(ptr) Variable Private - 28(v2): 23(ptr) Variable Private - 44: TypePointer Private 6(float) - 45(N2::gf): 44(ptr) Variable Private - 51: TypePointer Output 7(fvec4) -52(@entryPointOutput): 51(ptr) Variable Output + 19: TypePointer Private 7(fvec4) + 20(v1): 19(ptr) Variable Private + 24(v2): 19(ptr) Variable Private + 40: TypePointer Private 6(float) + 41(N2::gf): 40(ptr) Variable Private + 47: TypePointer Output 7(fvec4) +48(@entryPointOutput): 47(ptr) Variable Output 4(main): 2 Function None 3 5: Label - 53: 7(fvec4) FunctionCall 21(@main() - Store 52(@entryPointOutput) 53 + 49: 7(fvec4) FunctionCall 17(@main() + Store 48(@entryPointOutput) 49 Return FunctionEnd 9(N1::getVec(): 7(fvec4) Function None 8 10: Label - 25: 7(fvec4) Load 24(v1) - ReturnValue 25 + 21: 7(fvec4) Load 20(v1) + ReturnValue 21 FunctionEnd 11(N2::getVec(): 7(fvec4) Function None 8 12: Label - 29: 7(fvec4) Load 28(v2) - ReturnValue 29 + 25: 7(fvec4) Load 24(v2) + ReturnValue 25 FunctionEnd 13(N2::N3::getVec(): 7(fvec4) Function None 8 14: Label - 32: 7(fvec4) Load 28(v2) - ReturnValue 32 + 28: 7(fvec4) Load 24(v2) + ReturnValue 28 FunctionEnd -19(N2::N3::C1::getVec(): 7(fvec4) Function None 17 - 18(@this): 16(ptr) FunctionParameter - 20: Label - 35: 7(fvec4) Load 28(v2) - ReturnValue 35 +15(N2::N3::C1::getVec(): 7(fvec4) Function None 8 + 16: Label + 31: 7(fvec4) Load 24(v2) + ReturnValue 31 FunctionEnd - 21(@main(): 7(fvec4) Function None 8 - 22: Label - 38: 7(fvec4) FunctionCall 9(N1::getVec() - 39: 7(fvec4) FunctionCall 11(N2::getVec() - 40: 7(fvec4) FAdd 38 39 - 41: 7(fvec4) FunctionCall 13(N2::N3::getVec() - 42: 7(fvec4) FAdd 40 41 - 43: 7(fvec4) FunctionCall 19(N2::N3::C1::getVec() - 46: 6(float) Load 45(N2::gf) - 47: 7(fvec4) VectorTimesScalar 43 46 - 48: 7(fvec4) FAdd 42 47 - ReturnValue 48 + 17(@main(): 7(fvec4) Function None 8 + 18: Label + 34: 7(fvec4) FunctionCall 9(N1::getVec() + 35: 7(fvec4) FunctionCall 11(N2::getVec() + 36: 7(fvec4) FAdd 34 35 + 37: 7(fvec4) FunctionCall 13(N2::N3::getVec() + 38: 7(fvec4) FAdd 36 37 + 39: 7(fvec4) FunctionCall 15(N2::N3::C1::getVec() + 42: 6(float) Load 41(N2::gf) + 43: 7(fvec4) VectorTimesScalar 39 42 + 44: 7(fvec4) FAdd 38 43 + ReturnValue 44 FunctionEnd diff --git a/Test/hlsl.namespace.frag b/Test/hlsl.namespace.frag index 76c3062d6a..d2b044586b 100644 --- a/Test/hlsl.namespace.frag +++ b/Test/hlsl.namespace.frag @@ -12,7 +12,7 @@ namespace N2 { float4 getVec() { return v2; } class C1 { - float4 getVec() { return v2; } + static float4 getVec() { return v2; } }; } } From bbe692e731fe16933d9994160917355f94c86e3a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 18 Feb 2022 15:08:28 -0700 Subject: [PATCH 304/365] Improve error message for image/sampler functions for enhanced-msgs For recent GLSL versions, if texture2D function call appears, the error message reports an unsupported type constructor. Change message to unsupported function. Likewise for other removed texture* function calls. --- Test/baseResults/spv.textureError.frag.out | 6 ++++++ Test/runtests | 2 ++ Test/spv.textureError.frag | 10 ++++++++++ glslang/MachineIndependent/ParseHelper.cpp | 5 ++++- 4 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 Test/baseResults/spv.textureError.frag.out create mode 100644 Test/spv.textureError.frag diff --git a/Test/baseResults/spv.textureError.frag.out b/Test/baseResults/spv.textureError.frag.out new file mode 100644 index 0000000000..d5ef59ce91 --- /dev/null +++ b/Test/baseResults/spv.textureError.frag.out @@ -0,0 +1,6 @@ +spv.textureError.frag +ERROR: spv.textureError.frag:8: 'texture*D*' : function not supported in this version; use texture() instead +ERROR: 1 compilation errors. No code generated. + + +SPIR-V is not generated for failed compile or link diff --git a/Test/runtests b/Test/runtests index 9f588e281d..aee6178613 100755 --- a/Test/runtests +++ b/Test/runtests @@ -319,6 +319,8 @@ run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.6.vert enhanc diff -b $BASEDIR/enhanced.6.link.out $TARGETDIR/enhanced.6.link.out || HASERROR=1 run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml enhanced.7.vert enhanced.7.frag > $TARGETDIR/enhanced.7.link.out diff -b $BASEDIR/enhanced.7.link.out $TARGETDIR/enhanced.7.link.out || HASERROR=1 +run --enhanced-msgs -V --target-env vulkan1.2 --amb --aml spv.textureError.frag > $TARGETDIR/spv.textureError.frag.out +diff -b $BASEDIR/spv.textureError.frag.out $TARGETDIR/spv.textureError.frag.out || HASERROR=1 # # Final checking diff --git a/Test/spv.textureError.frag b/Test/spv.textureError.frag new file mode 100644 index 0000000000..a40ea36397 --- /dev/null +++ b/Test/spv.textureError.frag @@ -0,0 +1,10 @@ +#version 140 + +uniform sampler2D s2D; +centroid vec2 centTexCoord; + +void main() +{ + gl_FragColor = texture2D(s2D, centTexCoord); +} + diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 64e352f316..d4f3fddd8d 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2799,7 +2799,10 @@ TFunction* TParseContext::handleConstructorCall(const TSourceLoc& loc, const TPu TOperator op = intermediate.mapTypeToConstructorOp(type); if (op == EOpNull) { - error(loc, "cannot construct this type", type.getBasicString(), ""); + if (intermediate.getEnhancedMsgs() && type.getBasicType() == EbtSampler) + error(loc, "function not supported in this version; use texture() instead", "texture*D*", ""); + else + error(loc, "cannot construct this type", type.getBasicString(), ""); op = EOpConstructFloat; TType errorType(EbtFloat); type.shallowCopy(errorType); From 79a35ace7c000171ee3822f542e85f69219584d5 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Feb 2022 13:50:41 -0700 Subject: [PATCH 305/365] Don't do updatePrecision on float16_t operations float16_t does not take GLSL precisions and SPIR-V does not support RelaxedPrecision on float16_t. Fixes #2894 --- .../baseResults/spv.float16NoRelaxed.vert.out | 72 +++++++++++++++++++ Test/spv.float16NoRelaxed.vert | 16 +++++ glslang/MachineIndependent/Intermediate.cpp | 8 +-- gtests/Spv.FromFile.cpp | 1 + 4 files changed, 93 insertions(+), 4 deletions(-) create mode 100644 Test/baseResults/spv.float16NoRelaxed.vert.out create mode 100644 Test/spv.float16NoRelaxed.vert diff --git a/Test/baseResults/spv.float16NoRelaxed.vert.out b/Test/baseResults/spv.float16NoRelaxed.vert.out new file mode 100644 index 0000000000..8872b4637d --- /dev/null +++ b/Test/baseResults/spv.float16NoRelaxed.vert.out @@ -0,0 +1,72 @@ +spv.float16NoRelaxed.vert +// Module Version 10300 +// Generated by (magic number): 8000a +// Id's are bound by 35 + + Capability Shader + Capability Float16 + Capability GroupNonUniform + Capability GroupNonUniformVote + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Vertex 4 "main" 11 30 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_float16" + SourceExtension "GL_EXT_shader_subgroup_extended_types_float16" + SourceExtension "GL_KHR_shader_subgroup_basic" + SourceExtension "GL_KHR_shader_subgroup_vote" + Name 4 "main" + Name 8 "valueNoEqual" + Name 11 "gl_SubgroupInvocationID" + Name 15 "tempRes" + Name 26 "Buffer1" + MemberName 26(Buffer1) 0 "result" + Name 28 "" + Name 30 "gl_VertexIndex" + Decorate 11(gl_SubgroupInvocationID) RelaxedPrecision + Decorate 11(gl_SubgroupInvocationID) BuiltIn SubgroupLocalInvocationId + Decorate 12 RelaxedPrecision + Decorate 25 ArrayStride 4 + MemberDecorate 26(Buffer1) 0 Offset 0 + Decorate 26(Buffer1) Block + Decorate 28 DescriptorSet 0 + Decorate 28 Binding 0 + Decorate 30(gl_VertexIndex) BuiltIn VertexIndex + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 16 + 7: TypePointer Function 6(float16_t) + 9: TypeInt 32 0 + 10: TypePointer Input 9(int) +11(gl_SubgroupInvocationID): 10(ptr) Variable Input + 14: TypePointer Function 9(int) + 17: TypeBool + 18: 9(int) Constant 3 + 20: TypeInt 32 1 + 21: 20(int) Constant 0 + 22: 20(int) Constant 16 + 25: TypeRuntimeArray 9(int) + 26(Buffer1): TypeStruct 25 + 27: TypePointer StorageBuffer 26(Buffer1) + 28: 27(ptr) Variable StorageBuffer + 29: TypePointer Input 20(int) +30(gl_VertexIndex): 29(ptr) Variable Input + 33: TypePointer StorageBuffer 9(int) + 4(main): 2 Function None 3 + 5: Label + 8(valueNoEqual): 7(ptr) Variable Function + 15(tempRes): 14(ptr) Variable Function + 12: 9(int) Load 11(gl_SubgroupInvocationID) + 13:6(float16_t) ConvertUToF 12 + Store 8(valueNoEqual) 13 + 16:6(float16_t) Load 8(valueNoEqual) + 19: 17(bool) GroupNonUniformAllEqual 18 16 + 23: 20(int) Select 19 21 22 + 24: 9(int) Bitcast 23 + Store 15(tempRes) 24 + 31: 20(int) Load 30(gl_VertexIndex) + 32: 9(int) Load 15(tempRes) + 34: 33(ptr) AccessChain 28 21 31 + Store 34 32 + Return + FunctionEnd diff --git a/Test/spv.float16NoRelaxed.vert b/Test/spv.float16NoRelaxed.vert new file mode 100644 index 0000000000..d594a1d4a5 --- /dev/null +++ b/Test/spv.float16NoRelaxed.vert @@ -0,0 +1,16 @@ +#version 450 +#extension GL_KHR_shader_subgroup_vote: enable +#extension GL_EXT_shader_subgroup_extended_types_float16 : enable +layout(set = 0, binding = 0, std430) buffer Buffer1 +{ + uint result[]; +}; + +void main (void) +{ + uint tempRes; + float16_t valueNoEqual = float16_t(gl_SubgroupInvocationID); + tempRes = subgroupAllEqual(valueNoEqual) ? 0x0 : 0x10; + result[gl_VertexIndex] = tempRes; +} + diff --git a/glslang/MachineIndependent/Intermediate.cpp b/glslang/MachineIndependent/Intermediate.cpp index 6aea5b3d7c..14fd053a79 100644 --- a/glslang/MachineIndependent/Intermediate.cpp +++ b/glslang/MachineIndependent/Intermediate.cpp @@ -2766,7 +2766,7 @@ void TIntermBranch::updatePrecision(TPrecisionQualifier parentPrecision) return; if (exp->getBasicType() == EbtInt || exp->getBasicType() == EbtUint || - exp->getBasicType() == EbtFloat || exp->getBasicType() == EbtFloat16) { + exp->getBasicType() == EbtFloat) { if (parentPrecision != EpqNone && exp->getQualifier().precision == EpqNone) { exp->propagatePrecision(parentPrecision); } @@ -3284,7 +3284,7 @@ bool TIntermediate::promoteUnary(TIntermUnary& node) void TIntermUnary::updatePrecision() { if (getBasicType() == EbtInt || getBasicType() == EbtUint || - getBasicType() == EbtFloat || getBasicType() == EbtFloat16) { + getBasicType() == EbtFloat) { if (operand->getQualifier().precision > getQualifier().precision) getQualifier().precision = operand->getQualifier().precision; } @@ -3785,7 +3785,7 @@ bool TIntermediate::promoteAggregate(TIntermAggregate& node) void TIntermAggregate::updatePrecision() { if (getBasicType() == EbtInt || getBasicType() == EbtUint || - getBasicType() == EbtFloat || getBasicType() == EbtFloat16) { + getBasicType() == EbtFloat) { TPrecisionQualifier maxPrecision = EpqNone; TIntermSequence operands = getSequence(); for (unsigned int i = 0; i < operands.size(); ++i) { @@ -3807,7 +3807,7 @@ void TIntermAggregate::updatePrecision() void TIntermBinary::updatePrecision() { if (getBasicType() == EbtInt || getBasicType() == EbtUint || - getBasicType() == EbtFloat || getBasicType() == EbtFloat16) { + getBasicType() == EbtFloat) { if (op == EOpRightShift || op == EOpLeftShift) { // For shifts get precision from left side only and thus no need to propagate getQualifier().precision = left->getQualifier().precision; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index ba08226c0c..db4ac26830 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -528,6 +528,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.vulkan110.int16.frag", "spv.int32.frag", "spv.explicittypes.frag", + "spv.float16NoRelaxed.vert", "spv.float32.frag", "spv.float64.frag", "spv.memoryScopeSemantics.comp", From 438999d24fff668c47798288929786e4e706c270 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Tue, 1 Mar 2022 15:06:04 +0800 Subject: [PATCH 306/365] 1. refine the check for "origin_upper_left" and "pixel_center_integer" 2. gl_FragCoord can be used at ogl140 with extension "GL_ARB_fragment_coord_conventions". Signed-off-by: ZhiqianXia --- Test/baseResults/coord_conventions.frag.out | 255 ++++++++++++++++++++ Test/coord_conventions.frag | 36 +++ glslang/MachineIndependent/ParseHelper.cpp | 13 +- gtests/AST.FromFile.cpp | 1 + 4 files changed, 302 insertions(+), 3 deletions(-) create mode 100644 Test/baseResults/coord_conventions.frag.out create mode 100644 Test/coord_conventions.frag diff --git a/Test/baseResults/coord_conventions.frag.out b/Test/baseResults/coord_conventions.frag.out new file mode 100644 index 0000000000..656c60874c --- /dev/null +++ b/Test/baseResults/coord_conventions.frag.out @@ -0,0 +1,255 @@ +coord_conventions.frag +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_fragment_coord_conventions +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +0:? Sequence +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'myColor' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 0.200000 +0:19 0.200000 +0:19 0.200000 +0:19 0.200000 +0:20 Test condition and select ( temp void) +0:20 Condition +0:20 Compare Greater Than or Equal ( temp bool) +0:20 direct index ( temp float) +0:20 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 10.000000 +0:20 true case +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 direct index ( temp float) +0:21 'myColor' (layout( location=0) out 4-component vector of float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 0.800000 +0:23 Test condition and select ( temp void) +0:23 Condition +0:23 Compare Equal ( temp bool) +0:23 direct index ( temp float) +0:23 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:23 Constant: +0:23 1 (const int) +0:23 trunc ( global float) +0:23 direct index ( temp float) +0:23 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:23 Constant: +0:23 1 (const int) +0:23 true case +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 'myColor' (layout( location=0) out 4-component vector of float) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0.800000 +0:26 Test condition and select ( temp void) +0:26 Condition +0:26 Compare Equal ( temp bool) +0:26 direct index ( temp float) +0:26 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:26 Constant: +0:26 0 (const int) +0:26 trunc ( global float) +0:26 direct index ( temp float) +0:26 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:26 Constant: +0:26 0 (const int) +0:26 true case +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 direct index ( temp float) +0:27 'myColor' (layout( location=0) out 4-component vector of float) +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 0.800000 +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'diff' ( temp 4-component vector of float) +0:30 subtract ( temp 4-component vector of float) +0:30 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:30 'i' ( smooth in 4-component vector of float) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Greater Than ( temp bool) +0:31 Absolute value ( global float) +0:31 direct index ( temp float) +0:31 'diff' ( temp 4-component vector of float) +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 0.001000 +0:31 true case +0:32 move second child to first child ( temp float) +0:32 direct index ( temp float) +0:32 'myColor' (layout( location=0) out 4-component vector of float) +0:32 Constant: +0:32 2 (const int) +0:32 Constant: +0:32 0.500000 +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Greater Than ( temp bool) +0:33 Absolute value ( global float) +0:33 direct index ( temp float) +0:33 'diff' ( temp 4-component vector of float) +0:33 Constant: +0:33 3 (const int) +0:33 Constant: +0:33 0.001000 +0:33 true case +0:34 move second child to first child ( temp float) +0:34 direct index ( temp float) +0:34 'myColor' (layout( location=0) out 4-component vector of float) +0:34 Constant: +0:34 3 (const int) +0:34 Constant: +0:34 0.500000 +0:? Linker Objects +0:? 'i' ( smooth in 4-component vector of float) +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'myColor' (layout( location=0) out 4-component vector of float) +0:? 'eps' ( const float) +0:? 0.001000 + + +Linked fragment stage: + + +Shader version: 140 +Requested GL_ARB_explicit_attrib_location +Requested GL_ARB_fragment_coord_conventions +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +0:? Sequence +0:17 Function Definition: main( ( global void) +0:17 Function Parameters: +0:19 Sequence +0:19 move second child to first child ( temp 4-component vector of float) +0:19 'myColor' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 0.200000 +0:19 0.200000 +0:19 0.200000 +0:19 0.200000 +0:20 Test condition and select ( temp void) +0:20 Condition +0:20 Compare Greater Than or Equal ( temp bool) +0:20 direct index ( temp float) +0:20 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:20 Constant: +0:20 1 (const int) +0:20 Constant: +0:20 10.000000 +0:20 true case +0:21 Sequence +0:21 move second child to first child ( temp float) +0:21 direct index ( temp float) +0:21 'myColor' (layout( location=0) out 4-component vector of float) +0:21 Constant: +0:21 2 (const int) +0:21 Constant: +0:21 0.800000 +0:23 Test condition and select ( temp void) +0:23 Condition +0:23 Compare Equal ( temp bool) +0:23 direct index ( temp float) +0:23 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:23 Constant: +0:23 1 (const int) +0:23 trunc ( global float) +0:23 direct index ( temp float) +0:23 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:23 Constant: +0:23 1 (const int) +0:23 true case +0:24 Sequence +0:24 move second child to first child ( temp float) +0:24 direct index ( temp float) +0:24 'myColor' (layout( location=0) out 4-component vector of float) +0:24 Constant: +0:24 1 (const int) +0:24 Constant: +0:24 0.800000 +0:26 Test condition and select ( temp void) +0:26 Condition +0:26 Compare Equal ( temp bool) +0:26 direct index ( temp float) +0:26 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:26 Constant: +0:26 0 (const int) +0:26 trunc ( global float) +0:26 direct index ( temp float) +0:26 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:26 Constant: +0:26 0 (const int) +0:26 true case +0:27 Sequence +0:27 move second child to first child ( temp float) +0:27 direct index ( temp float) +0:27 'myColor' (layout( location=0) out 4-component vector of float) +0:27 Constant: +0:27 0 (const int) +0:27 Constant: +0:27 0.800000 +0:30 Sequence +0:30 move second child to first child ( temp 4-component vector of float) +0:30 'diff' ( temp 4-component vector of float) +0:30 subtract ( temp 4-component vector of float) +0:30 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:30 'i' ( smooth in 4-component vector of float) +0:31 Test condition and select ( temp void) +0:31 Condition +0:31 Compare Greater Than ( temp bool) +0:31 Absolute value ( global float) +0:31 direct index ( temp float) +0:31 'diff' ( temp 4-component vector of float) +0:31 Constant: +0:31 2 (const int) +0:31 Constant: +0:31 0.001000 +0:31 true case +0:32 move second child to first child ( temp float) +0:32 direct index ( temp float) +0:32 'myColor' (layout( location=0) out 4-component vector of float) +0:32 Constant: +0:32 2 (const int) +0:32 Constant: +0:32 0.500000 +0:33 Test condition and select ( temp void) +0:33 Condition +0:33 Compare Greater Than ( temp bool) +0:33 Absolute value ( global float) +0:33 direct index ( temp float) +0:33 'diff' ( temp 4-component vector of float) +0:33 Constant: +0:33 3 (const int) +0:33 Constant: +0:33 0.001000 +0:33 true case +0:34 move second child to first child ( temp float) +0:34 direct index ( temp float) +0:34 'myColor' (layout( location=0) out 4-component vector of float) +0:34 Constant: +0:34 3 (const int) +0:34 Constant: +0:34 0.500000 +0:? Linker Objects +0:? 'i' ( smooth in 4-component vector of float) +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'myColor' (layout( location=0) out 4-component vector of float) +0:? 'eps' ( const float) +0:? 0.001000 + diff --git a/Test/coord_conventions.frag b/Test/coord_conventions.frag new file mode 100644 index 0000000000..4ae6060e8e --- /dev/null +++ b/Test/coord_conventions.frag @@ -0,0 +1,36 @@ +#version 140 + +#extension GL_ARB_fragment_coord_conventions: require +#extension GL_ARB_explicit_attrib_location : enable + +#ifdef GL_ES +precision mediump float; +#endif + +in vec4 i; + +layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord; +layout (location = 0) out vec4 myColor; + +const float eps=0.001; + +void main() +{ + myColor = vec4(0.2); + if (gl_FragCoord.y >= 10) { + myColor.b = 0.8; + } + if (gl_FragCoord.y == trunc(gl_FragCoord.y)) { + myColor.g = 0.8; + } + if (gl_FragCoord.x == trunc(gl_FragCoord.x)) { + myColor.r = 0.8; + } + + vec4 diff = gl_FragCoord - i; + if (abs(diff.z)>eps) + myColor.b = 0.5; + if (abs(diff.w)>eps) + myColor.a = 0.5; + +} \ No newline at end of file diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index d4f3fddd8d..508b16b081 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -4611,7 +4611,7 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS if (ssoPre150 || (identifier == "gl_FragDepth" && ((nonEsRedecls && version >= 420) || esRedecls)) || - (identifier == "gl_FragCoord" && ((nonEsRedecls && version >= 150) || esRedecls)) || + (identifier == "gl_FragCoord" && ((nonEsRedecls && version >= 140) || esRedecls)) || identifier == "gl_ClipDistance" || identifier == "gl_CullDistance" || identifier == "gl_ShadingRateEXT" || @@ -5521,12 +5521,19 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi } if (language == EShLangFragment) { if (id == "origin_upper_left") { - requireProfile(loc, ECoreProfile | ECompatibilityProfile, "origin_upper_left"); + requireProfile(loc, ECoreProfile | ECompatibilityProfile | ENoProfile, "origin_upper_left"); + if (profile == ENoProfile) { + profileRequires(loc,ECoreProfile | ECompatibilityProfile, 140, E_GL_ARB_fragment_coord_conventions, "origin_upper_left"); + } + publicType.shaderQualifiers.originUpperLeft = true; return; } if (id == "pixel_center_integer") { - requireProfile(loc, ECoreProfile | ECompatibilityProfile, "pixel_center_integer"); + requireProfile(loc, ECoreProfile | ECompatibilityProfile | ENoProfile, "pixel_center_integer"); + if (profile == ENoProfile) { + profileRequires(loc,ECoreProfile | ECompatibilityProfile, 140, E_GL_ARB_fragment_coord_conventions, "pixel_center_integer"); + } publicType.shaderQualifiers.pixelCenterInteger = true; return; } diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index c0ced5e4a0..6270ca0df3 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -294,6 +294,7 @@ INSTANTIATE_TEST_SUITE_P( "BestMatchFunction.vert", "EndStreamPrimitive.geom", "floatBitsToInt.vert", + "coord_conventions.frag", })), FileNameAsCustomTestSuffix ); From 07f677028c990e18c3ec516ba20fa0fa695115f6 Mon Sep 17 00:00:00 2001 From: ZhiqianXia Date: Wed, 2 Mar 2022 19:54:33 +0800 Subject: [PATCH 307/365] The first redeclarations of gl_FragCoord must appear before any use of gl_FragCoord. --- Test/baseResults/150.frag.out | 3 +- Test/baseResults/gl_FragCoord.frag.out | 269 ++++++++++++++++++ Test/gl_FragCoord.frag | 31 ++ glslang/MachineIndependent/ParseHelper.cpp | 5 +- .../MachineIndependent/localintermediate.h | 6 +- gtests/AST.FromFile.cpp | 1 + 6 files changed, 311 insertions(+), 4 deletions(-) create mode 100644 Test/baseResults/gl_FragCoord.frag.out create mode 100644 Test/gl_FragCoord.frag diff --git a/Test/baseResults/150.frag.out b/Test/baseResults/150.frag.out index 066b8bb4e9..ba15b5cbf1 100644 --- a/Test/baseResults/150.frag.out +++ b/Test/baseResults/150.frag.out @@ -2,7 +2,6 @@ ERROR: 0:4: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord ERROR: 0:5: 'redeclaration' : cannot redeclare with different qualification: gl_FragCoord ERROR: 0:6: 'layout qualifier' : can only apply origin_upper_left and pixel_center_origin to gl_FragCoord -ERROR: 0:14: 'gl_FragCoord' : cannot redeclare after use ERROR: 0:50: 'gl_PerFragment' : undeclared identifier ERROR: 0:53: 'double' : Reserved word. ERROR: 0:53: 'double' : not supported for this version or the enabled extensions @@ -19,7 +18,7 @@ ERROR: 0:154: 'assign' : cannot convert from ' const float' to ' temp 2-compone ERROR: 0:155: 'textureQueryLOD' : no matching overloaded function found ERROR: 0:155: 'assign' : cannot convert from ' const float' to ' temp 2-component vector of float' ERROR: 0:183: 'mix' : required extension not requested: GL_EXT_shader_integer_mix -ERROR: 18 compilation errors. No code generated. +ERROR: 17 compilation errors. No code generated. Shader version: 150 diff --git a/Test/baseResults/gl_FragCoord.frag.out b/Test/baseResults/gl_FragCoord.frag.out new file mode 100644 index 0000000000..da9e8dccde --- /dev/null +++ b/Test/baseResults/gl_FragCoord.frag.out @@ -0,0 +1,269 @@ +gl_FragCoord.frag +Shader version: 150 +Requested GL_ARB_explicit_attrib_location +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +0:? Sequence +0:9 Sequence +0:9 move second child to first child ( temp float) +0:9 'myGlobalVar' ( global float) +0:9 direct index ( temp float) +0:9 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:9 Constant: +0:9 0 (const int) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'myColor' (layout( location=0) out 4-component vector of float) +0:17 Constant: +0:17 0.200000 +0:17 0.200000 +0:17 0.200000 +0:17 0.200000 +0:18 Test condition and select ( temp void) +0:18 Condition +0:18 Compare Greater Than or Equal ( temp bool) +0:18 direct index ( temp float) +0:18 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 10.000000 +0:18 true case +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 'myColor' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 0.800000 +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 Compare Equal ( temp bool) +0:21 direct index ( temp float) +0:21 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:21 Constant: +0:21 1 (const int) +0:21 trunc ( global float) +0:21 direct index ( temp float) +0:21 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:21 Constant: +0:21 1 (const int) +0:21 true case +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 direct index ( temp float) +0:22 'myColor' (layout( location=0) out 4-component vector of float) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 0.800000 +0:24 Test condition and select ( temp void) +0:24 Condition +0:24 Compare Equal ( temp bool) +0:24 direct index ( temp float) +0:24 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:24 Constant: +0:24 0 (const int) +0:24 trunc ( global float) +0:24 direct index ( temp float) +0:24 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:24 Constant: +0:24 0 (const int) +0:24 true case +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 direct index ( temp float) +0:25 'myColor' (layout( location=0) out 4-component vector of float) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0.800000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of float) +0:28 'diff' ( temp 4-component vector of float) +0:28 subtract ( temp 4-component vector of float) +0:28 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:28 'i' ( smooth in 4-component vector of float) +0:29 Test condition and select ( temp void) +0:29 Condition +0:29 Compare Greater Than ( temp bool) +0:29 Absolute value ( global float) +0:29 direct index ( temp float) +0:29 'diff' ( temp 4-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0.001000 +0:29 true case +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 'myColor' (layout( location=0) out 4-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0.500000 +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Greater Than ( temp bool) +0:30 Absolute value ( global float) +0:30 direct index ( temp float) +0:30 'diff' ( temp 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:30 Constant: +0:30 0.001000 +0:30 true case +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 'myColor' (layout( location=0) out 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:30 Constant: +0:30 0.500000 +0:? Linker Objects +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'myGlobalVar' ( global float) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'myColor' (layout( location=0) out 4-component vector of float) +0:? 'eps' ( const float) +0:? 0.001000 + + +Linked fragment stage: + + +Shader version: 150 +Requested GL_ARB_explicit_attrib_location +gl_FragCoord pixel center is integer +gl_FragCoord origin is upper left +0:? Sequence +0:9 Sequence +0:9 move second child to first child ( temp float) +0:9 'myGlobalVar' ( global float) +0:9 direct index ( temp float) +0:9 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:9 Constant: +0:9 0 (const int) +0:16 Function Definition: main( ( global void) +0:16 Function Parameters: +0:17 Sequence +0:17 move second child to first child ( temp 4-component vector of float) +0:17 'myColor' (layout( location=0) out 4-component vector of float) +0:17 Constant: +0:17 0.200000 +0:17 0.200000 +0:17 0.200000 +0:17 0.200000 +0:18 Test condition and select ( temp void) +0:18 Condition +0:18 Compare Greater Than or Equal ( temp bool) +0:18 direct index ( temp float) +0:18 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:18 Constant: +0:18 1 (const int) +0:18 Constant: +0:18 10.000000 +0:18 true case +0:19 Sequence +0:19 move second child to first child ( temp float) +0:19 direct index ( temp float) +0:19 'myColor' (layout( location=0) out 4-component vector of float) +0:19 Constant: +0:19 2 (const int) +0:19 Constant: +0:19 0.800000 +0:21 Test condition and select ( temp void) +0:21 Condition +0:21 Compare Equal ( temp bool) +0:21 direct index ( temp float) +0:21 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:21 Constant: +0:21 1 (const int) +0:21 trunc ( global float) +0:21 direct index ( temp float) +0:21 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:21 Constant: +0:21 1 (const int) +0:21 true case +0:22 Sequence +0:22 move second child to first child ( temp float) +0:22 direct index ( temp float) +0:22 'myColor' (layout( location=0) out 4-component vector of float) +0:22 Constant: +0:22 1 (const int) +0:22 Constant: +0:22 0.800000 +0:24 Test condition and select ( temp void) +0:24 Condition +0:24 Compare Equal ( temp bool) +0:24 direct index ( temp float) +0:24 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:24 Constant: +0:24 0 (const int) +0:24 trunc ( global float) +0:24 direct index ( temp float) +0:24 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:24 Constant: +0:24 0 (const int) +0:24 true case +0:25 Sequence +0:25 move second child to first child ( temp float) +0:25 direct index ( temp float) +0:25 'myColor' (layout( location=0) out 4-component vector of float) +0:25 Constant: +0:25 0 (const int) +0:25 Constant: +0:25 0.800000 +0:28 Sequence +0:28 move second child to first child ( temp 4-component vector of float) +0:28 'diff' ( temp 4-component vector of float) +0:28 subtract ( temp 4-component vector of float) +0:28 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:28 'i' ( smooth in 4-component vector of float) +0:29 Test condition and select ( temp void) +0:29 Condition +0:29 Compare Greater Than ( temp bool) +0:29 Absolute value ( global float) +0:29 direct index ( temp float) +0:29 'diff' ( temp 4-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0.001000 +0:29 true case +0:29 move second child to first child ( temp float) +0:29 direct index ( temp float) +0:29 'myColor' (layout( location=0) out 4-component vector of float) +0:29 Constant: +0:29 2 (const int) +0:29 Constant: +0:29 0.500000 +0:30 Test condition and select ( temp void) +0:30 Condition +0:30 Compare Greater Than ( temp bool) +0:30 Absolute value ( global float) +0:30 direct index ( temp float) +0:30 'diff' ( temp 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:30 Constant: +0:30 0.001000 +0:30 true case +0:30 move second child to first child ( temp float) +0:30 direct index ( temp float) +0:30 'myColor' (layout( location=0) out 4-component vector of float) +0:30 Constant: +0:30 3 (const int) +0:30 Constant: +0:30 0.500000 +0:? Linker Objects +0:? 'gl_FragCoord' ( gl_FragCoord 4-component vector of float FragCoord) +0:? 'myGlobalVar' ( global float) +0:? 'i' ( smooth in 4-component vector of float) +0:? 'myColor' (layout( location=0) out 4-component vector of float) +0:? 'eps' ( const float) +0:? 0.001000 + diff --git a/Test/gl_FragCoord.frag b/Test/gl_FragCoord.frag new file mode 100644 index 0000000000..7bb17920ea --- /dev/null +++ b/Test/gl_FragCoord.frag @@ -0,0 +1,31 @@ +#version 150 core +#extension GL_ARB_explicit_attrib_location : enable + +#ifdef GL_ES +precision mediump float; +#endif + +layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord; +float myGlobalVar = gl_FragCoord.x; +layout (origin_upper_left,pixel_center_integer) in vec4 gl_FragCoord; + +in vec4 i; +layout (location = 0) out vec4 myColor; +const float eps=0.001; + +void main() { + myColor = vec4(0.2); + if (gl_FragCoord.y >= 10) { + myColor.b = 0.8; + } + if (gl_FragCoord.y == trunc(gl_FragCoord.y)) { + myColor.g = 0.8; + } + if (gl_FragCoord.x == trunc(gl_FragCoord.x)) { + myColor.r = 0.8; + } + + vec4 diff = gl_FragCoord - i; + if (abs(diff.z)>eps) myColor.b = 0.5; + if (abs(diff.w)>eps) myColor.a = 0.5; +} diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 508b16b081..ae89889c47 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -4680,7 +4680,7 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS symbolQualifier.storage != qualifier.storage) error(loc, "cannot change qualification of", "redeclaration", symbol->getName().c_str()); } else if (identifier == "gl_FragCoord") { - if (intermediate.inIoAccessed("gl_FragCoord")) + if (!intermediate.getTexCoordRedeclared() && intermediate.inIoAccessed("gl_FragCoord")) error(loc, "cannot redeclare after use", "gl_FragCoord", ""); if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || qualifier.isMemory() || qualifier.isAuxiliary()) @@ -4690,6 +4690,9 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS if (! builtIn && (publicType.pixelCenterInteger != intermediate.getPixelCenterInteger() || publicType.originUpperLeft != intermediate.getOriginUpperLeft())) error(loc, "cannot redeclare with different qualification:", "redeclaration", symbol->getName().c_str()); + + + intermediate.setTexCoordRedeclared(); if (publicType.pixelCenterInteger) intermediate.setPixelCenterInteger(); if (publicType.originUpperLeft) diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index c4d80159de..581e9aa2e4 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -309,7 +309,7 @@ class TIntermediate { useVulkanMemoryModel(false), invocations(TQualifier::layoutNotSet), vertices(TQualifier::layoutNotSet), inputPrimitive(ElgNone), outputPrimitive(ElgNone), - pixelCenterInteger(false), originUpperLeft(false), + pixelCenterInteger(false), originUpperLeft(false),texCoordBuiltinRedeclared(false), vertexSpacing(EvsNone), vertexOrder(EvoNone), interlockOrdering(EioNone), pointMode(false), earlyFragmentTests(false), postDepthCoverage(false), depthLayout(EldNone), hlslFunctionality1(false), @@ -834,6 +834,8 @@ class TIntermediate { bool getOriginUpperLeft() const { return originUpperLeft; } void setPixelCenterInteger() { pixelCenterInteger = true; } bool getPixelCenterInteger() const { return pixelCenterInteger; } + void setTexCoordRedeclared() { texCoordBuiltinRedeclared = true; } + bool getTexCoordRedeclared() const { return texCoordBuiltinRedeclared; } void addBlendEquation(TBlendEquationShift b) { blendEquations |= (1 << b); } unsigned int getBlendEquations() const { return blendEquations; } bool setXfbBufferStride(int buffer, unsigned stride) @@ -1122,6 +1124,7 @@ class TIntermediate { TLayoutGeometry outputPrimitive; bool pixelCenterInteger; bool originUpperLeft; + bool texCoordBuiltinRedeclared; TVertexSpacing vertexSpacing; TVertexOrder vertexOrder; TInterlockOrdering interlockOrdering; @@ -1182,6 +1185,7 @@ class TIntermediate { // for callableData/callableDataIn // set of names of statically read/written I/O that might need extra checking std::set ioAccessed; + // source code of shader, useful as part of debug information std::string sourceFile; std::string sourceText; diff --git a/gtests/AST.FromFile.cpp b/gtests/AST.FromFile.cpp index 6270ca0df3..1d975464f1 100644 --- a/gtests/AST.FromFile.cpp +++ b/gtests/AST.FromFile.cpp @@ -295,6 +295,7 @@ INSTANTIATE_TEST_SUITE_P( "EndStreamPrimitive.geom", "floatBitsToInt.vert", "coord_conventions.frag", + "gl_FragCoord.frag" })), FileNameAsCustomTestSuffix ); From d44871ca085f572b1d6d0a1cb25d7cd4c8f78a5d Mon Sep 17 00:00:00 2001 From: Alexey Panteleev Date: Fri, 11 Mar 2022 17:56:15 -0800 Subject: [PATCH 308/365] Escape the characters that Make considers special in the dependency files. --- StandAlone/StandAlone.cpp | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/StandAlone/StandAlone.cpp b/StandAlone/StandAlone.cpp index bda4ee783a..f5dd3bb148 100644 --- a/StandAlone/StandAlone.cpp +++ b/StandAlone/StandAlone.cpp @@ -1168,6 +1168,27 @@ struct ShaderCompUnit { } }; +// Writes a string into a depfile, escaping some special characters following the Makefile rules. +static void writeEscapedDepString(std::ofstream& file, const std::string& str) +{ + for (char c : str) { + switch (c) { + case ' ': + case ':': + case '#': + case '[': + case ']': + case '\\': + file << '\\'; + break; + case '$': + file << '$'; + break; + } + file << c; + } +} + // Writes a depfile similar to gcc -MMD foo.c bool writeDepFile(std::string depfile, std::vector& binaryFiles, const std::vector& sources) { @@ -1175,10 +1196,12 @@ bool writeDepFile(std::string depfile, std::vector& binaryFiles, co if (file.fail()) return false; - for (auto it = binaryFiles.begin(); it != binaryFiles.end(); it++) { - file << *it << ":"; - for (auto it = sources.begin(); it != sources.end(); it++) { - file << " " << *it; + for (auto binaryFile = binaryFiles.begin(); binaryFile != binaryFiles.end(); binaryFile++) { + writeEscapedDepString(file, *binaryFile); + file << ":"; + for (auto sourceFile = sources.begin(); sourceFile != sources.end(); sourceFile++) { + file << " "; + writeEscapedDepString(file, *sourceFile); } file << std::endl; } From e80f2f8760e489f0f8cb48f17fdab646b19abb92 Mon Sep 17 00:00:00 2001 From: Biswapriyo Nath Date: Tue, 15 Mar 2022 19:26:57 +0530 Subject: [PATCH 309/365] cmake: Install SPVRemapper runtime library This installs SPVRemapper.dll file which was missing previously. --- SPIRV/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt index 22f767d7dc..775466e06c 100644 --- a/SPIRV/CMakeLists.txt +++ b/SPIRV/CMakeLists.txt @@ -113,7 +113,8 @@ if(ENABLE_GLSLANG_INSTALL) if (ENABLE_SPVREMAPPER) install(TARGETS SPVRemapper EXPORT SPVRemapperTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}) + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() install(TARGETS SPIRV EXPORT SPIRVTargets ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} From 610fd6edf366ae7356e13d05bb98d901fdfe8ca8 Mon Sep 17 00:00:00 2001 From: sfricke-samsung <46493288+sfricke-samsung@users.noreply.github.com> Date: Wed, 23 Mar 2022 12:42:21 -0500 Subject: [PATCH 310/365] Prevent Push Constant blocks being an array (#2904) * Prevent Push Constant blocks being an array * Add push constant array error test Co-authored-by: Greg Fischer --- Test/baseResults/vulkan.frag.out | 53 +++++++++++----------- Test/vulkan.frag | 3 ++ glslang/MachineIndependent/ParseHelper.cpp | 8 +++- 3 files changed, 36 insertions(+), 28 deletions(-) diff --git a/Test/baseResults/vulkan.frag.out b/Test/baseResults/vulkan.frag.out index 28134aedb7..78aea82189 100644 --- a/Test/baseResults/vulkan.frag.out +++ b/Test/baseResults/vulkan.frag.out @@ -25,37 +25,38 @@ ERROR: 0:43: 'non-opaque uniforms outside a block' : not allowed when using GLSL ERROR: 0:43: 'push_constant' : can only be used with a block ERROR: 0:45: 'push_constant' : cannot declare a default, can only be used on a block ERROR: 0:46: 'binding' : cannot be used with push_constant -ERROR: 0:54: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:55: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:55: 'input_attachment_index' : can only be used with a subpass -ERROR: 0:56: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:56: 'input_attachment_index' : can only be used with a subpass +ERROR: 0:49: 'push_constant' : Push constants blocks can't be an array ERROR: 0:57: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:57: 'subpass' : requires an input_attachment_index layout qualifier ERROR: 0:58: 'binding' : sampler/texture/image requires layout(binding=X) -ERROR: 0:63: 'subpassLoadMS' : no matching overloaded function found -ERROR: 0:64: 'subpassLoad' : no matching overloaded function found +ERROR: 0:58: 'input_attachment_index' : can only be used with a subpass +ERROR: 0:59: 'binding' : sampler/texture/image requires layout(binding=X) +ERROR: 0:59: 'input_attachment_index' : can only be used with a subpass +ERROR: 0:60: 'binding' : sampler/texture/image requires layout(binding=X) +ERROR: 0:60: 'subpass' : requires an input_attachment_index layout qualifier +ERROR: 0:61: 'binding' : sampler/texture/image requires layout(binding=X) ERROR: 0:66: 'subpassLoadMS' : no matching overloaded function found -ERROR: 0:69: 'subroutine' : not allowed when generating SPIR-V -ERROR: 0:69: 'subroutine' : feature not yet implemented -ERROR: 0:70: 'subroutine' : not allowed when generating SPIR-V -ERROR: 0:70: 'subroutine' : feature not yet implemented -ERROR: 0:72: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan -ERROR: 0:76: 'texture' : no matching overloaded function found -ERROR: 0:77: 'imageStore' : no matching overloaded function found -WARNING: 0:85: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: +ERROR: 0:67: 'subpassLoad' : no matching overloaded function found +ERROR: 0:69: 'subpassLoadMS' : no matching overloaded function found +ERROR: 0:72: 'subroutine' : not allowed when generating SPIR-V +ERROR: 0:72: 'subroutine' : feature not yet implemented +ERROR: 0:73: 'subroutine' : not allowed when generating SPIR-V +ERROR: 0:73: 'subroutine' : feature not yet implemented +ERROR: 0:75: 'non-opaque uniforms outside a block' : not allowed when using GLSL for Vulkan +ERROR: 0:79: 'texture' : no matching overloaded function found +ERROR: 0:80: 'imageStore' : no matching overloaded function found +WARNING: 0:88: '' : all default precisions are highp; use precision statements to quiet warning, e.g.: "precision mediump int; precision highp float;" -ERROR: 0:94: 'call argument' : sampler constructor must appear at point of use -ERROR: 0:95: 'call argument' : sampler constructor must appear at point of use -ERROR: 0:96: ',' : sampler constructor must appear at point of use -ERROR: 0:97: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp sampler2D' and a right operand of type ' temp sampler2D' (or there is no acceptable conversion) ERROR: 0:97: 'call argument' : sampler constructor must appear at point of use -ERROR: 0:99: 'gl_NumSamples' : undeclared identifier -ERROR: 0:104: 'noise1' : no matching overloaded function found -ERROR: 0:105: 'noise2' : no matching overloaded function found -ERROR: 0:106: 'noise3' : no matching overloaded function found -ERROR: 0:107: 'noise4' : no matching overloaded function found -ERROR: 54 compilation errors. No code generated. +ERROR: 0:98: 'call argument' : sampler constructor must appear at point of use +ERROR: 0:99: ',' : sampler constructor must appear at point of use +ERROR: 0:100: ':' : wrong operand types: no operation ':' exists that takes a left-hand operand of type ' temp sampler2D' and a right operand of type ' temp sampler2D' (or there is no acceptable conversion) +ERROR: 0:100: 'call argument' : sampler constructor must appear at point of use +ERROR: 0:102: 'gl_NumSamples' : undeclared identifier +ERROR: 0:107: 'noise1' : no matching overloaded function found +ERROR: 0:108: 'noise2' : no matching overloaded function found +ERROR: 0:109: 'noise3' : no matching overloaded function found +ERROR: 0:110: 'noise4' : no matching overloaded function found +ERROR: 55 compilation errors. No code generated. ERROR: Linking fragment stage: Only one push_constant block is allowed per stage diff --git a/Test/vulkan.frag b/Test/vulkan.frag index 25bfefeccb..6cf7ccfad3 100644 --- a/Test/vulkan.frag +++ b/Test/vulkan.frag @@ -46,6 +46,9 @@ layout(push_constant) uniform; // ERROR, needs an object layout(binding=2, push_constant) uniform pcbnd1 { // ERROR, can't have binding int a; } pcbnd1inst; +layout(push_constant) uniform pcbnd2 { // ERROR, can't be array + float a; +} pcbnd2inst[2]; layout(std430, push_constant) uniform pcb1 { int a; } pcb1inst; layout(push_constant) uniform pcb2 { int a; diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index ae89889c47..496a9a134b 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -6368,8 +6368,12 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type) profileRequires(loc, ECoreProfile | ECompatibilityProfile, 0, E_GL_EXT_shader_image_load_formatted, explanation); } - if (qualifier.isPushConstant() && type.getBasicType() != EbtBlock) - error(loc, "can only be used with a block", "push_constant", ""); + if (qualifier.isPushConstant()) { + if (type.getBasicType() != EbtBlock) + error(loc, "can only be used with a block", "push_constant", ""); + if (type.isArray()) + error(loc, "Push constants blocks can't be an array", "push_constant", ""); + } if (qualifier.hasBufferReference() && type.getBasicType() != EbtBlock) error(loc, "can only be used with a block", "buffer_reference", ""); From 0988e868f553563b2529ad9c0b3d42bd811feb6c Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Mar 2022 10:23:19 -0600 Subject: [PATCH 311/365] Update spirv-tools and spirv-headers known good To pick up support for spirv-opt --eliminate-dead-input-components --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index c2575d0a28..f87405e2ef 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "45dd184c790d6bfc78a5a74a10c37e888b1823fa" + "commit" : "b3c1790632737f6be2c0e1c2ea5bd844da9f17a9" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "b42ba6d92faf6b4938e6f22ddd186dbdacc98d78" + "commit" : "4995a2f2723c401eb0ea3e10c81298906bf1422b" } ] } From abbdf63cbe966817379345ab5219324b467b011e Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Mar 2022 12:13:59 -0600 Subject: [PATCH 312/365] Add eliminate-dead-input-components to -Os --- SPIRV/SpvTools.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/SPIRV/SpvTools.cpp b/SPIRV/SpvTools.cpp index e8f825119a..8cc17cca93 100644 --- a/SPIRV/SpvTools.cpp +++ b/SPIRV/SpvTools.cpp @@ -212,6 +212,7 @@ void SpirvToolsTransform(const glslang::TIntermediate& intermediate, std::vector optimizer.RegisterPass(spvtools::CreateInterpolateFixupPass()); if (options->optimizeSize) { optimizer.RegisterPass(spvtools::CreateRedundancyEliminationPass()); + optimizer.RegisterPass(spvtools::CreateEliminateDeadInputComponentsPass()); } optimizer.RegisterPass(spvtools::CreateAggressiveDCEPass()); optimizer.RegisterPass(spvtools::CreateCFGCleanupPass()); From 871e61fdf0c71af2657d5fafc32a53156cea19f5 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Mar 2022 16:36:48 -0600 Subject: [PATCH 313/365] Update glsl.versionOverride.comp Change original shader to version 110 --- Test/glsl.versionOverride.comp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Test/glsl.versionOverride.comp b/Test/glsl.versionOverride.comp index 030d6e80b3..f72663e353 100644 --- a/Test/glsl.versionOverride.comp +++ b/Test/glsl.versionOverride.comp @@ -4,8 +4,8 @@ glslangValidator.exe --glsl-version 460 -V -S comp -o glsl.versionOverride.comp. */ -#version 330 +#version 110 void main() { -} \ No newline at end of file +} From c1e8a174424a2973a4f90274f6d2dadaacf426cb Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Mar 2022 16:37:42 -0600 Subject: [PATCH 314/365] Update glsl.versionOverride.frag Change original shader to version 110 --- Test/glsl.versionOverride.frag | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Test/glsl.versionOverride.frag b/Test/glsl.versionOverride.frag index c5d3201497..126799405b 100644 --- a/Test/glsl.versionOverride.frag +++ b/Test/glsl.versionOverride.frag @@ -4,8 +4,8 @@ glslangValidator.exe --glsl-version 420 -V -S frag -o glsl.versionOverride.frag. */ -#version 330 +#version 110 void main() { -} \ No newline at end of file +} From 46edfaeec4d596db39c66c08adc272875d1288c3 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Mar 2022 16:39:34 -0600 Subject: [PATCH 315/365] Update glsl.versionOverride.geom Change original shader to version 110 --- Test/glsl.versionOverride.geom | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Test/glsl.versionOverride.geom b/Test/glsl.versionOverride.geom index d6ca4a6e79..bcfc2f22cd 100644 --- a/Test/glsl.versionOverride.geom +++ b/Test/glsl.versionOverride.geom @@ -4,7 +4,7 @@ glslangValidator.exe --glsl-version 430 -V -S geom -o glsl.versionOverride.geom. */ -#version 330 +#version 110 layout (points) in; layout (line_strip, max_vertices = 2) out; @@ -13,4 +13,4 @@ void main() { EmitVertex(); EmitVertex(); EndPrimitive(); -} \ No newline at end of file +} From 03fe69d3cb0a288137f300c6f80d1fff30797ebf Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Mar 2022 16:40:18 -0600 Subject: [PATCH 316/365] Update glsl.versionOverride.tesc Change original shader to version 110 --- Test/glsl.versionOverride.tesc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Test/glsl.versionOverride.tesc b/Test/glsl.versionOverride.tesc index 4157e62d1a..3b7b1e3c9a 100644 --- a/Test/glsl.versionOverride.tesc +++ b/Test/glsl.versionOverride.tesc @@ -4,10 +4,10 @@ glslangValidator.exe --glsl-version 440 -V -S tesc -o glsl.versionOverride.tesc. */ -#version 330 +#version 110 layout(vertices = 3) out; void main() { -} \ No newline at end of file +} From dc5b5319967aeea7b442f22c6c0b17290d8162b8 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Mar 2022 16:41:15 -0600 Subject: [PATCH 317/365] Update glsl.versionOverride.tese Change shader original version to 110 --- Test/glsl.versionOverride.tese | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Test/glsl.versionOverride.tese b/Test/glsl.versionOverride.tese index cc7963497c..e92d5a986f 100644 --- a/Test/glsl.versionOverride.tese +++ b/Test/glsl.versionOverride.tese @@ -4,10 +4,10 @@ glslangValidator.exe --glsl-version 450 -V -S tese -o glsl.versionOverride.tese. */ -#version 330 +#version 110 layout(triangles) in; void main() { -} \ No newline at end of file +} From 3c12f20bcb39740223cb25814dd3fb19bb67bc0a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 24 Mar 2022 16:41:52 -0600 Subject: [PATCH 318/365] Update glsl.versionOverride.vert Change shader original version to 110 --- Test/glsl.versionOverride.vert | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Test/glsl.versionOverride.vert b/Test/glsl.versionOverride.vert index 6ddbf6291e..2d5effcd89 100644 --- a/Test/glsl.versionOverride.vert +++ b/Test/glsl.versionOverride.vert @@ -4,8 +4,8 @@ glslangValidator.exe --glsl-version 410 -V -S vert -o glsl.versionOverride.vert. */ -#version 330 +#version 110 void main() { -} \ No newline at end of file +} From b7968b7dbc554a93a27c216306c72e5970f5b133 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Fri, 25 Mar 2022 14:36:01 -0600 Subject: [PATCH 319/365] Generate Int8, Int16 and Float16 capabilities for constants Fixes #2905 --- SPIRV/GlslangToSpv.cpp | 10 ++++++++++ Test/baseResults/spv.constConstruct.vert.out | 4 +++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 39941d3752..6cdf2346ab 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -9078,15 +9078,19 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla break; #ifndef GLSLANG_WEB case glslang::EbtInt8: + builder.addCapability(spv::CapabilityInt8); spvConsts.push_back(builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const())); break; case glslang::EbtUint8: + builder.addCapability(spv::CapabilityInt8); spvConsts.push_back(builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const())); break; case glslang::EbtInt16: + builder.addCapability(spv::CapabilityInt16); spvConsts.push_back(builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const())); break; case glslang::EbtUint16: + builder.addCapability(spv::CapabilityInt16); spvConsts.push_back(builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const())); break; case glslang::EbtInt64: @@ -9099,6 +9103,7 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla spvConsts.push_back(builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst())); break; case glslang::EbtFloat16: + builder.addCapability(spv::CapabilityFloat16); spvConsts.push_back(builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst())); break; #endif @@ -9127,15 +9132,19 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla break; #ifndef GLSLANG_WEB case glslang::EbtInt8: + builder.addCapability(spv::CapabilityInt8); scalar = builder.makeInt8Constant(zero ? 0 : consts[nextConst].getI8Const(), specConstant); break; case glslang::EbtUint8: + builder.addCapability(spv::CapabilityInt8); scalar = builder.makeUint8Constant(zero ? 0 : consts[nextConst].getU8Const(), specConstant); break; case glslang::EbtInt16: + builder.addCapability(spv::CapabilityInt16); scalar = builder.makeInt16Constant(zero ? 0 : consts[nextConst].getI16Const(), specConstant); break; case glslang::EbtUint16: + builder.addCapability(spv::CapabilityInt16); scalar = builder.makeUint16Constant(zero ? 0 : consts[nextConst].getU16Const(), specConstant); break; case glslang::EbtInt64: @@ -9148,6 +9157,7 @@ spv::Id TGlslangToSpvTraverser::createSpvConstantFromConstUnionArray(const glsla scalar = builder.makeDoubleConstant(zero ? 0.0 : consts[nextConst].getDConst(), specConstant); break; case glslang::EbtFloat16: + builder.addCapability(spv::CapabilityFloat16); scalar = builder.makeFloat16Constant(zero ? 0.0F : (float)consts[nextConst].getDConst(), specConstant); break; case glslang::EbtReference: diff --git a/Test/baseResults/spv.constConstruct.vert.out b/Test/baseResults/spv.constConstruct.vert.out index db637a946f..a8d5097590 100644 --- a/Test/baseResults/spv.constConstruct.vert.out +++ b/Test/baseResults/spv.constConstruct.vert.out @@ -1,12 +1,14 @@ spv.constConstruct.vert -Validation failed // Module Version 10000 // Generated by (magic number): 8000a // Id's are bound by 150 Capability Shader + Capability Float16 Capability Float64 Capability Int64 + Capability Int16 + Capability Int8 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 EntryPoint Vertex 4 "main" From 5a41eb318ff280d07bf3c33546bae10a5dc71013 Mon Sep 17 00:00:00 2001 From: Edoardo Luciani Date: Sat, 26 Mar 2022 15:26:46 +0000 Subject: [PATCH 320/365] Update README.md --- README.md | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 1eba3c6066..48118b2943 100644 --- a/README.md +++ b/README.md @@ -85,7 +85,15 @@ The applied stage-specific rules are based on the file extension: * `.frag` for a fragment shader * `.comp` for a compute shader -There is also a non-shader extension +For ray tracing pipeline shaders: +* `.rgen` for a ray generation shader +* `.rint` for a ray intersection shader +* `.rahit` for a ray any-hit shader +* `.rchit` for a ray closest-hit shader +* `.rmiss` for a ray miss shader +* `.rcall` for a callable shader + +There is also a non-shader extension: * `.conf` for a configuration file of limits, see usage statement for example ## Building (CMake) From b88174e6fe603bcc2c5aa88e72521b95c9763a92 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Mon, 28 Mar 2022 11:34:40 -0600 Subject: [PATCH 321/365] Improved comment for glslang_optimization_level_t --- glslang/Include/glslang_c_shader_types.h | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/glslang/Include/glslang_c_shader_types.h b/glslang/Include/glslang_c_shader_types.h index f11443f3b3..dc9009f302 100644 --- a/glslang/Include/glslang_c_shader_types.h +++ b/glslang/Include/glslang_c_shader_types.h @@ -121,7 +121,9 @@ typedef enum { /* EShExecutable counterpart */ typedef enum { GLSLANG_EX_VERTEX_FRAGMENT, GLSLANG_EX_FRAGMENT } glslang_executable_t; -/* EShOptimizationLevel counterpart */ +// EShOptimizationLevel counterpart +// This enum is not used in the current C interface, but could be added at a later date. +// GLSLANG_OPT_NONE is the current default. typedef enum { GLSLANG_OPT_NO_GENERATION, GLSLANG_OPT_NONE, From e77298891a0e3b6648afc5fc98a2b3d8c5da912a Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 6 Apr 2022 12:00:57 -0600 Subject: [PATCH 322/365] Update 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 f87405e2ef..2fcb76885a 100644 --- a/known_good.json +++ b/known_good.json @@ -5,7 +5,7 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "b3c1790632737f6be2c0e1c2ea5bd844da9f17a9" + "commit" : "eed5c76a57bb965f2e1b56d1dc40b50910b5ec1d" }, { "name" : "spirv-tools/external/spirv-headers", From df4ded3f930bb95aac1ffd69acd0f8df0c1e25d6 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 6 Apr 2022 12:21:33 -0600 Subject: [PATCH 323/365] Release 11.9.0 --- CHANGES.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 6d3bd6d98c..fb0b0d11e1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.9.0 2022-04-06 + +### Other changes +* Add GLSL version override functionality +* Add eliminate-dead-input-components to -Os +* Add enhanced-msgs option +* Explicitly use Python 3 for builds + ## 11.8.0 2022-01-27 ### Other changes From de2581ed0ce958177bf3ce875df5755c092ccbe4 Mon Sep 17 00:00:00 2001 From: SpaceIm <30052553+SpaceIm@users.noreply.github.com> Date: Thu, 7 Apr 2022 21:18:27 +0200 Subject: [PATCH 324/365] fix MinGW pre compiled headers leads to "internal error in mingw32_gt_pch_use_address, at config/i386/host-mingw32.c:192: MapViewOfFileEx: Attempt to access invalid address" --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 43533c14d3..a792c46750 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -107,7 +107,7 @@ option(ENABLE_RTTI "Enables RTTI" OFF) option(ENABLE_EXCEPTIONS "Enables Exceptions" OFF) option(ENABLE_OPT "Enables spirv-opt capability if present" ON) -if (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU") +if(MINGW OR (CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND ${CMAKE_CXX_COMPILER_ID} MATCHES "GNU")) # Workaround for CMake behavior on Mac OS with gcc, cmake generates -Xarch_* arguments # which gcc rejects option(ENABLE_PCH "Enables Precompiled header" OFF) From 24e69505bd0b5689a9c6aa4df93dd15443bbd651 Mon Sep 17 00:00:00 2001 From: Gerry Fan Date: Wed, 13 Apr 2022 17:08:51 +0000 Subject: [PATCH 325/365] Change ANDROID_NDK_ROOT to ANDROID_NDK_HOME in README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 48118b2943..efe986cab2 100644 --- a/README.md +++ b/README.md @@ -169,8 +169,8 @@ cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX="$(pwd)/install" $SOURCE For building on Android: ```bash -cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_ROOT/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_ROOT/build/cmake/android.toolchain.cmake -# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_ROOT%\prebuilt\windows-x86_64\bin\make.exe +cmake $SOURCE_DIR -G "Unix Makefiles" -DCMAKE_INSTALL_PREFIX="$(pwd)/install" -DANDROID_ABI=arm64-v8a -DCMAKE_BUILD_TYPE=Release -DANDROID_STL=c++_static -DANDROID_PLATFORM=android-24 -DCMAKE_SYSTEM_NAME=Android -DANDROID_TOOLCHAIN=clang -DANDROID_ARM_MODE=arm -DCMAKE_MAKE_PROGRAM=$ANDROID_NDK_HOME/prebuilt/linux-x86_64/bin/make -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_HOME/build/cmake/android.toolchain.cmake +# If on Windows will be -DCMAKE_MAKE_PROGRAM=%ANDROID_NDK_HOME%\prebuilt\windows-x86_64\bin\make.exe # -G is needed for building on Windows # -DANDROID_ABI can also be armeabi-v7a for 32 bit ``` From 17c8387adcc5c8bb4dfd10dbbe301347c6026dfc Mon Sep 17 00:00:00 2001 From: tellowkrinkle Date: Sat, 16 Apr 2022 20:21:41 -0500 Subject: [PATCH 326/365] Add macOS hidden files to gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index ab25cec2de..333fb76272 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,7 @@ out/ third_party/ buildtools/ tools/ + +# Random OS stuff +.DS_Store +._* From f906b895ecb710a018731aebc7fbd484e707a49b Mon Sep 17 00:00:00 2001 From: Ryp Date: Thu, 21 Apr 2022 22:05:17 +0300 Subject: [PATCH 327/365] Fix WavePrefixCountBits() being off by one. It was counting bits up to the current lane included, whereas the documentation says it should be excluded. This now matches dxc's behavior as well. Fix #2929 --- Test/baseResults/hlsl.waveprefix.comp.out | 6 +++--- glslang/HLSL/hlslParseHelper.cpp | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Test/baseResults/hlsl.waveprefix.comp.out b/Test/baseResults/hlsl.waveprefix.comp.out index cc4737ed76..e4e942cefd 100644 --- a/Test/baseResults/hlsl.waveprefix.comp.out +++ b/Test/baseResults/hlsl.waveprefix.comp.out @@ -1126,7 +1126,7 @@ local_size = (32, 16, 1) 0:54 0 (const int) 0:54 Constant: 0:54 0 (const int) -0:54 subgroupBallotInclusiveBitCount ( temp uint) +0:54 subgroupBallotExclusiveBitCount ( temp uint) 0:54 subgroupBallot ( temp 4-component vector of uint) 0:54 Compare Equal ( temp bool) 0:54 direct index ( temp uint) @@ -2289,7 +2289,7 @@ local_size = (32, 16, 1) 0:54 0 (const int) 0:54 Constant: 0:54 0 (const int) -0:54 subgroupBallotInclusiveBitCount ( temp uint) +0:54 subgroupBallotExclusiveBitCount ( temp uint) 0:54 subgroupBallot ( temp 4-component vector of uint) 0:54 Compare Equal ( temp bool) 0:54 direct index ( temp uint) @@ -2818,7 +2818,7 @@ local_size = (32, 16, 1) 390: 6(int) Load 389 392: 391(bool) IEqual 390 26 393: 13(ivec4) GroupNonUniformBallot 35 392 - 394: 6(int) GroupNonUniformBallotBitCount 35 InclusiveScan 393 + 394: 6(int) GroupNonUniformBallotBitCount 35 ExclusiveScan 393 395: 42(ptr) AccessChain 24(data) 25 386 25 26 Store 395 394 Return diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index 2d0a8e926d..e9369a0f8c 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -5430,7 +5430,7 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& } case EOpWavePrefixCountBits: { - // Mapped to subgroupBallotInclusiveBitCount(subgroupBallot()) + // Mapped to subgroupBallotExclusiveBitCount(subgroupBallot()) // builtin // uvec4 type. @@ -5444,7 +5444,7 @@ void HlslParseContext::decomposeIntrinsic(const TSourceLoc& loc, TIntermTyped*& TType uintType(EbtUint, EvqTemporary); node = intermediate.addBuiltInFunctionCall(loc, - EOpSubgroupBallotInclusiveBitCount, true, res, uintType); + EOpSubgroupBallotExclusiveBitCount, true, res, uintType); break; } From 3015d00ee040c17a4dc39a16a30257a8c2366673 Mon Sep 17 00:00:00 2001 From: Marius Bjorge Date: Thu, 5 May 2022 12:56:04 +0200 Subject: [PATCH 328/365] Adding support for GL_EXT_ray_cull_mask --- SPIRV/GlslangToSpv.cpp | 9 + SPIRV/doc.cpp | 2 + SPIRV/spirv.hpp | 2 + .../spv.ext.AnyHitShader.rahit.out | 72 ++++--- .../spv.ext.ClosestHitShader.rchit.out | 62 +++--- .../spv.ext.IntersectShader.rint.out | 38 ++-- Test/baseResults/spv.ext.MissShader.rmiss.out | 183 ++++++++++-------- Test/spv.ext.AnyHitShader.rahit | 3 + Test/spv.ext.ClosestHitShader.rchit | 3 + Test/spv.ext.IntersectShader.rint | 2 + Test/spv.ext.MissShader.rmiss | 2 + glslang/Include/BaseTypes.h | 1 + glslang/MachineIndependent/Initialize.cpp | 5 + glslang/MachineIndependent/Versions.cpp | 2 + glslang/MachineIndependent/Versions.h | 1 + 15 files changed, 231 insertions(+), 156 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 6cdf2346ab..01f5dbced5 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1007,6 +1007,8 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI return spv::BuiltInRayTminKHR; case glslang::EbvRayTmax: return spv::BuiltInRayTmaxKHR; + case glslang::EbvCullMask: + return spv::BuiltInCullMaskKHR; case glslang::EbvInstanceCustomIndex: return spv::BuiltInInstanceCustomIndexKHR; case glslang::EbvHitT: @@ -1777,6 +1779,13 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, builder.addCapability(spv::CapabilityRayTracingNV); builder.addExtension("SPV_NV_ray_tracing"); } + if (glslangIntermediate->getStage() != EShLangRayGen && glslangIntermediate->getStage() != EShLangCallable) + { + if (extensions.find("GL_EXT_ray_cull_mask") != extensions.end()) { + builder.addCapability(spv::CapabilityRayCullMaskKHR); + builder.addExtension("SPV_KHR_ray_cull_mask"); + } + } break; } case EShLangTaskNV: diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 9a569e0d7f..6b85ccd2d5 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -392,6 +392,7 @@ const char* BuiltInString(int builtIn) case BuiltInObjectRayDirectionKHR: return "ObjectRayDirectionKHR"; case BuiltInRayTminKHR: return "RayTminKHR"; case BuiltInRayTmaxKHR: return "RayTmaxKHR"; + case BuiltInCullMaskKHR: return "CullMaskKHR"; case BuiltInInstanceCustomIndexKHR: return "InstanceCustomIndexKHR"; case BuiltInRayGeometryIndexKHR: return "RayGeometryIndexKHR"; case BuiltInObjectToWorldKHR: return "ObjectToWorldKHR"; @@ -925,6 +926,7 @@ const char* CapabilityString(int info) case CapabilityRayTracingNV: return "RayTracingNV"; case CapabilityRayTracingMotionBlurNV: return "RayTracingMotionBlurNV"; case CapabilityRayTracingKHR: return "RayTracingKHR"; + case CapabilityRayCullMaskKHR: return "RayCullMaskKHR"; case CapabilityRayQueryKHR: return "RayQueryKHR"; case CapabilityRayTracingProvisionalKHR: return "RayTracingProvisionalKHR"; case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index a8642006a2..806b4ddce5 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -673,6 +673,7 @@ enum BuiltIn { BuiltInSMCountNV = 5375, BuiltInWarpIDNV = 5376, BuiltInSMIDNV = 5377, + BuiltInCullMaskKHR = 6021, BuiltInMax = 0x7fffffff, }; @@ -1069,6 +1070,7 @@ enum Capability { CapabilityDotProductInput4x8BitPackedKHR = 6018, CapabilityDotProduct = 6019, CapabilityDotProductKHR = 6019, + CapabilityRayCullMaskKHR = 6020, CapabilityBitInstructions = 6025, CapabilityAtomicFloat32AddEXT = 6033, CapabilityAtomicFloat64AddEXT = 6034, diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index df779bdd66..af228e28ec 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -1,15 +1,18 @@ spv.ext.AnyHitShader.rahit // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 107 +// Id's are bound by 110 Capability GroupNonUniform Capability RayTracingKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 98 + EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 87 101 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" SourceExtension "GL_KHR_shader_subgroup_basic" Name 4 "main" @@ -49,8 +52,10 @@ spv.ext.AnyHitShader.rahit Name 76 "gl_ObjectToWorld3x4EXT" Name 79 "v17" Name 80 "gl_WorldToObject3x4EXT" - Name 84 "incomingPayload" - Name 98 "gl_SubgroupSize" + Name 83 "v18" + Name 84 "gl_CullMaskEXT" + Name 87 "incomingPayload" + Name 101 "gl_SubgroupSize" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -69,10 +74,11 @@ spv.ext.AnyHitShader.rahit Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 98(gl_SubgroupSize) RelaxedPrecision - Decorate 98(gl_SubgroupSize) BuiltIn SubgroupSize - Decorate 99 RelaxedPrecision - Decorate 100 RelaxedPrecision + Decorate 84(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 101(gl_SubgroupSize) RelaxedPrecision + Decorate 101(gl_SubgroupSize) BuiltIn SubgroupSize + Decorate 102 RelaxedPrecision + Decorate 103 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -114,15 +120,16 @@ spv.ext.AnyHitShader.rahit 74: TypePointer Function 73 76(gl_ObjectToWorld3x4EXT): 63(ptr) Variable Input 80(gl_WorldToObject3x4EXT): 63(ptr) Variable Input - 83: TypePointer IncomingRayPayloadKHR 72(fvec4) -84(incomingPayload): 83(ptr) Variable IncomingRayPayloadKHR - 85: 28(float) Constant 1056964608 - 86: 72(fvec4) ConstantComposite 85 85 85 85 - 88: 16(int) Constant 1 - 89: TypeBool - 94: 6(int) Constant 0 -98(gl_SubgroupSize): 57(ptr) Variable Input - 101: TypePointer IncomingRayPayloadKHR 28(float) +84(gl_CullMaskEXT): 57(ptr) Variable Input + 86: TypePointer IncomingRayPayloadKHR 72(fvec4) +87(incomingPayload): 86(ptr) Variable IncomingRayPayloadKHR + 88: 28(float) Constant 1056964608 + 89: 72(fvec4) ConstantComposite 88 88 88 88 + 91: 16(int) Constant 1 + 92: TypeBool + 97: 6(int) Constant 0 +101(gl_SubgroupSize): 57(ptr) Variable Input + 104: TypePointer IncomingRayPayloadKHR 28(float) 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -143,6 +150,7 @@ spv.ext.AnyHitShader.rahit 69(v15): 17(ptr) Variable Function 75(v16): 74(ptr) Variable Function 79(v17): 74(ptr) Variable Function + 83(v18): 55(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -181,20 +189,22 @@ spv.ext.AnyHitShader.rahit 81: 60 Load 80(gl_WorldToObject3x4EXT) 82: 73 Transpose 81 Store 79(v17) 82 - Store 84(incomingPayload) 86 - 87: 16(int) Load 18(v2) - 90: 89(bool) IEqual 87 88 - SelectionMerge 92 None - BranchConditional 90 91 92 - 91: Label + 85: 6(int) Load 84(gl_CullMaskEXT) + Store 83(v18) 85 + Store 87(incomingPayload) 89 + 90: 16(int) Load 18(v2) + 93: 92(bool) IEqual 90 91 + SelectionMerge 95 None + BranchConditional 93 94 95 + 94: Label IgnoreIntersectionKHR - 92: Label - 99: 6(int) Load 98(gl_SubgroupSize) - 100: 28(float) ConvertUToF 99 - 102: 101(ptr) AccessChain 84(incomingPayload) 94 - 103: 28(float) Load 102 - 104: 28(float) FAdd 103 100 - 105: 101(ptr) AccessChain 84(incomingPayload) 94 - Store 105 104 + 95: Label + 102: 6(int) Load 101(gl_SubgroupSize) + 103: 28(float) ConvertUToF 102 + 105: 104(ptr) AccessChain 87(incomingPayload) 97 + 106: 28(float) Load 105 + 107: 28(float) FAdd 106 103 + 108: 104(ptr) AccessChain 87(incomingPayload) 97 + Store 108 107 TerminateRayKHR FunctionEnd diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out index 9a4eb288a9..1c1a9a0cf6 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out @@ -1,14 +1,17 @@ spv.ext.ClosestHitShader.rchit // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 101 +// Id's are bound by 104 Capability RayTracingKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 85 98 100 + EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 88 101 103 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" Name 4 "main" Name 9 "v0" @@ -47,9 +50,11 @@ spv.ext.ClosestHitShader.rchit Name 76 "gl_ObjectToWorld3x4EXT" Name 79 "v17" Name 80 "gl_WorldToObject3x4EXT" - Name 85 "accEXT" - Name 98 "incomingPayload" - Name 100 "localPayload" + Name 83 "v18" + Name 84 "gl_CullMaskEXT" + Name 88 "accEXT" + Name 101 "incomingPayload" + Name 103 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -68,8 +73,9 @@ spv.ext.ClosestHitShader.rchit Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 85(accEXT) DescriptorSet 0 - Decorate 85(accEXT) Binding 0 + Decorate 84(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 88(accEXT) DescriptorSet 0 + Decorate 88(accEXT) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -111,23 +117,24 @@ spv.ext.ClosestHitShader.rchit 74: TypePointer Function 73 76(gl_ObjectToWorld3x4EXT): 63(ptr) Variable Input 80(gl_WorldToObject3x4EXT): 63(ptr) Variable Input - 83: TypeAccelerationStructureKHR - 84: TypePointer UniformConstant 83 - 85(accEXT): 84(ptr) Variable UniformConstant - 87: 6(int) Constant 0 - 88: 6(int) Constant 1 - 89: 6(int) Constant 2 - 90: 6(int) Constant 3 - 91: 28(float) Constant 1056964608 - 92: 29(fvec3) ConstantComposite 91 91 91 - 93: 28(float) Constant 1065353216 - 94: 29(fvec3) ConstantComposite 93 93 93 - 95: 28(float) Constant 1061158912 - 96: 16(int) Constant 1 - 97: TypePointer IncomingRayPayloadKHR 72(fvec4) -98(incomingPayload): 97(ptr) Variable IncomingRayPayloadKHR - 99: TypePointer RayPayloadKHR 72(fvec4) -100(localPayload): 99(ptr) Variable RayPayloadKHR +84(gl_CullMaskEXT): 57(ptr) Variable Input + 86: TypeAccelerationStructureKHR + 87: TypePointer UniformConstant 86 + 88(accEXT): 87(ptr) Variable UniformConstant + 90: 6(int) Constant 0 + 91: 6(int) Constant 1 + 92: 6(int) Constant 2 + 93: 6(int) Constant 3 + 94: 28(float) Constant 1056964608 + 95: 29(fvec3) ConstantComposite 94 94 94 + 96: 28(float) Constant 1065353216 + 97: 29(fvec3) ConstantComposite 96 96 96 + 98: 28(float) Constant 1061158912 + 99: 16(int) Constant 1 + 100: TypePointer IncomingRayPayloadKHR 72(fvec4) +101(incomingPayload): 100(ptr) Variable IncomingRayPayloadKHR + 102: TypePointer RayPayloadKHR 72(fvec4) +103(localPayload): 102(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -148,6 +155,7 @@ spv.ext.ClosestHitShader.rchit 69(v15): 17(ptr) Variable Function 75(v16): 74(ptr) Variable Function 79(v17): 74(ptr) Variable Function + 83(v18): 55(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -186,7 +194,9 @@ spv.ext.ClosestHitShader.rchit 81: 60 Load 80(gl_WorldToObject3x4EXT) 82: 73 Transpose 81 Store 79(v17) 82 - 86: 83 Load 85(accEXT) - TraceRayKHR 86 87 88 89 90 87 92 91 94 95 98(incomingPayload) + 85: 6(int) Load 84(gl_CullMaskEXT) + Store 83(v18) 85 + 89: 86 Load 88(accEXT) + TraceRayKHR 89 90 91 92 93 90 95 94 97 98 101(incomingPayload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out index 2d389a0c50..54b6d349e7 100644 --- a/Test/baseResults/spv.ext.IntersectShader.rint.out +++ b/Test/baseResults/spv.ext.IntersectShader.rint.out @@ -1,14 +1,17 @@ spv.ext.IntersectShader.rint // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 81 +// Id's are bound by 86 Capability RayTracingKHR + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint IntersectionKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69 73 + EntryPoint IntersectionKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69 75 78 Source GLSL 460 + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" Name 4 "main" Name 9 "v0" @@ -41,7 +44,9 @@ spv.ext.IntersectShader.rint Name 65 "gl_ObjectToWorld3x4EXT" Name 68 "v14" Name 69 "gl_WorldToObject3x4EXT" - Name 73 "iAttr" + Name 73 "v15" + Name 75 "gl_CullMaskEXT" + Name 78 "iAttr" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -59,6 +64,7 @@ spv.ext.IntersectShader.rint Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR Decorate 69(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR + Decorate 75(gl_CullMaskEXT) BuiltIn CullMaskKHR 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -95,14 +101,17 @@ spv.ext.IntersectShader.rint 63: TypePointer Function 62 65(gl_ObjectToWorld3x4EXT): 55(ptr) Variable Input 69(gl_WorldToObject3x4EXT): 55(ptr) Variable Input - 72: TypePointer HitAttributeKHR 61(fvec4) - 73(iAttr): 72(ptr) Variable HitAttributeKHR - 74: 28(float) Constant 1056964608 - 75: 28(float) Constant 0 - 76: 28(float) Constant 1065353216 - 77: 61(fvec4) ConstantComposite 74 74 75 76 - 78: 6(int) Constant 1 - 79: TypeBool + 72: TypePointer Function 6(int) + 74: TypePointer Input 6(int) +75(gl_CullMaskEXT): 74(ptr) Variable Input + 77: TypePointer HitAttributeKHR 61(fvec4) + 78(iAttr): 77(ptr) Variable HitAttributeKHR + 79: 28(float) Constant 1056964608 + 80: 28(float) Constant 0 + 81: 28(float) Constant 1065353216 + 82: 61(fvec4) ConstantComposite 79 79 80 81 + 83: 6(int) Constant 1 + 84: TypeBool 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -120,6 +129,7 @@ spv.ext.IntersectShader.rint 58(v12): 53(ptr) Variable Function 64(v13): 63(ptr) Variable Function 68(v14): 63(ptr) Variable Function + 73(v15): 72(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -152,7 +162,9 @@ spv.ext.IntersectShader.rint 70: 52 Load 69(gl_WorldToObject3x4EXT) 71: 62 Transpose 70 Store 68(v14) 71 - Store 73(iAttr) 77 - 80: 79(bool) ReportIntersectionKHR 74 78 + 76: 6(int) Load 75(gl_CullMaskEXT) + Store 73(v15) 76 + Store 78(iAttr) 82 + 85: 84(bool) ReportIntersectionKHR 79 83 Return FunctionEnd diff --git a/Test/baseResults/spv.ext.MissShader.rmiss.out b/Test/baseResults/spv.ext.MissShader.rmiss.out index 1acd5ae660..e4a5b88bcb 100644 --- a/Test/baseResults/spv.ext.MissShader.rmiss.out +++ b/Test/baseResults/spv.ext.MissShader.rmiss.out @@ -1,7 +1,7 @@ spv.ext.MissShader.rmiss // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 90 +// Id's are bound by 94 Capability MinLod Capability GroupNonUniform @@ -9,15 +9,18 @@ spv.ext.MissShader.rmiss Capability SubgroupBallotKHR Capability RayTracingKHR Capability ShaderSMBuiltinsNV + Capability RayCullMaskKHR + Extension "SPV_KHR_ray_cull_mask" Extension "SPV_KHR_ray_tracing" Extension "SPV_KHR_shader_ballot" Extension "SPV_NV_shader_sm_builtins" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 36 51 53 58 63 74 78 85 89 + EntryPoint MissKHR 4 "main" 11 14 21 24 29 32 37 41 56 57 62 67 78 82 89 93 Source GLSL 460 SourceExtension "GL_ARB_shader_ballot" SourceExtension "GL_ARB_sparse_texture_clamp" + SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" SourceExtension "GL_KHR_shader_subgroup_ballot" SourceExtension "GL_KHR_shader_subgroup_basic" @@ -35,37 +38,40 @@ spv.ext.MissShader.rmiss Name 29 "gl_RayTminEXT" Name 31 "v5" Name 32 "gl_RayTmaxEXT" - Name 36 "accEXT" - Name 51 "incomingPayload" - Name 53 "gl_SubGroupSizeARB" - Name 58 "gl_SubgroupEqMask" - Name 63 "gl_WarpIDNV" - Name 70 "texel" - Name 74 "s2D" - Name 78 "c2" - Name 85 "lodClamp" - Name 89 "localPayload" + Name 35 "v6" + Name 37 "gl_CullMaskEXT" + Name 41 "accEXT" + Name 56 "incomingPayload" + Name 57 "gl_SubGroupSizeARB" + Name 62 "gl_SubgroupEqMask" + Name 67 "gl_WarpIDNV" + Name 74 "texel" + Name 78 "s2D" + Name 82 "c2" + Name 89 "lodClamp" + Name 93 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 21(gl_WorldRayOriginEXT) BuiltIn WorldRayOriginKHR Decorate 24(gl_WorldRayDirectionEXT) BuiltIn WorldRayDirectionKHR Decorate 29(gl_RayTminEXT) BuiltIn RayTminKHR Decorate 32(gl_RayTmaxEXT) BuiltIn RayTmaxKHR - Decorate 36(accEXT) DescriptorSet 0 - Decorate 36(accEXT) Binding 0 - Decorate 53(gl_SubGroupSizeARB) BuiltIn SubgroupSize - Decorate 53(gl_SubGroupSizeARB) Volatile - Decorate 53(gl_SubGroupSizeARB) Coherent - Decorate 58(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR - Decorate 58(gl_SubgroupEqMask) Volatile - Decorate 58(gl_SubgroupEqMask) Coherent - Decorate 63(gl_WarpIDNV) BuiltIn WarpIDNV - Decorate 63(gl_WarpIDNV) Volatile - Decorate 63(gl_WarpIDNV) Coherent - Decorate 74(s2D) DescriptorSet 0 - Decorate 74(s2D) Binding 1 - Decorate 78(c2) Location 2 - Decorate 85(lodClamp) Location 3 + Decorate 37(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 41(accEXT) DescriptorSet 0 + Decorate 41(accEXT) Binding 0 + Decorate 57(gl_SubGroupSizeARB) BuiltIn SubgroupSize + Decorate 57(gl_SubGroupSizeARB) Volatile + Decorate 57(gl_SubGroupSizeARB) Coherent + Decorate 62(gl_SubgroupEqMask) BuiltIn SubgroupEqMaskKHR + Decorate 62(gl_SubgroupEqMask) Volatile + Decorate 62(gl_SubgroupEqMask) Coherent + Decorate 67(gl_WarpIDNV) BuiltIn WarpIDNV + Decorate 67(gl_WarpIDNV) Volatile + Decorate 67(gl_WarpIDNV) Coherent + Decorate 78(s2D) DescriptorSet 0 + Decorate 78(s2D) Binding 1 + Decorate 82(c2) Location 2 + Decorate 89(lodClamp) Location 3 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -84,44 +90,46 @@ spv.ext.MissShader.rmiss 28: TypePointer Input 16(float) 29(gl_RayTminEXT): 28(ptr) Variable Input 32(gl_RayTmaxEXT): 28(ptr) Variable Input - 34: TypeAccelerationStructureKHR - 35: TypePointer UniformConstant 34 - 36(accEXT): 35(ptr) Variable UniformConstant - 38: 6(int) Constant 0 - 39: 6(int) Constant 1 - 40: 6(int) Constant 2 - 41: 6(int) Constant 3 - 42: 16(float) Constant 1056964608 - 43: 17(fvec3) ConstantComposite 42 42 42 - 44: 16(float) Constant 1065353216 - 45: 17(fvec3) ConstantComposite 44 44 44 - 46: 16(float) Constant 1061158912 - 47: TypeInt 32 1 - 48: 47(int) Constant 1 - 49: TypeVector 16(float) 4 - 50: TypePointer IncomingRayPayloadKHR 49(fvec4) -51(incomingPayload): 50(ptr) Variable IncomingRayPayloadKHR - 52: TypePointer Input 6(int) -53(gl_SubGroupSizeARB): 52(ptr) Variable Input - 56: TypeVector 6(int) 4 - 57: TypePointer Input 56(ivec4) -58(gl_SubgroupEqMask): 57(ptr) Variable Input - 63(gl_WarpIDNV): 52(ptr) Variable Input - 67: TypePointer IncomingRayPayloadKHR 16(float) - 69: TypePointer Function 49(fvec4) - 71: TypeImage 16(float) 2D sampled format:Unknown - 72: TypeSampledImage 71 - 73: TypePointer UniformConstant 72 - 74(s2D): 73(ptr) Variable UniformConstant - 76: TypeVector 16(float) 2 - 77: TypePointer Input 76(fvec2) - 78(c2): 77(ptr) Variable Input - 82: TypeVector 47(int) 2 - 83: 47(int) Constant 5 - 84: 82(ivec2) ConstantComposite 83 83 - 85(lodClamp): 28(ptr) Variable Input - 88: TypePointer RayPayloadKHR 49(fvec4) -89(localPayload): 88(ptr) Variable RayPayloadKHR + 34: TypePointer Function 6(int) + 36: TypePointer Input 6(int) +37(gl_CullMaskEXT): 36(ptr) Variable Input + 39: TypeAccelerationStructureKHR + 40: TypePointer UniformConstant 39 + 41(accEXT): 40(ptr) Variable UniformConstant + 43: 6(int) Constant 0 + 44: 6(int) Constant 1 + 45: 6(int) Constant 2 + 46: 6(int) Constant 3 + 47: 16(float) Constant 1056964608 + 48: 17(fvec3) ConstantComposite 47 47 47 + 49: 16(float) Constant 1065353216 + 50: 17(fvec3) ConstantComposite 49 49 49 + 51: 16(float) Constant 1061158912 + 52: TypeInt 32 1 + 53: 52(int) Constant 1 + 54: TypeVector 16(float) 4 + 55: TypePointer IncomingRayPayloadKHR 54(fvec4) +56(incomingPayload): 55(ptr) Variable IncomingRayPayloadKHR +57(gl_SubGroupSizeARB): 36(ptr) Variable Input + 60: TypeVector 6(int) 4 + 61: TypePointer Input 60(ivec4) +62(gl_SubgroupEqMask): 61(ptr) Variable Input + 67(gl_WarpIDNV): 36(ptr) Variable Input + 71: TypePointer IncomingRayPayloadKHR 16(float) + 73: TypePointer Function 54(fvec4) + 75: TypeImage 16(float) 2D sampled format:Unknown + 76: TypeSampledImage 75 + 77: TypePointer UniformConstant 76 + 78(s2D): 77(ptr) Variable UniformConstant + 80: TypeVector 16(float) 2 + 81: TypePointer Input 80(fvec2) + 82(c2): 81(ptr) Variable Input + 86: TypeVector 52(int) 2 + 87: 52(int) Constant 5 + 88: 86(ivec2) ConstantComposite 87 87 + 89(lodClamp): 28(ptr) Variable Input + 92: TypePointer RayPayloadKHR 54(fvec4) +93(localPayload): 92(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -130,7 +138,8 @@ spv.ext.MissShader.rmiss 23(v3): 18(ptr) Variable Function 27(v4): 26(ptr) Variable Function 31(v5): 26(ptr) Variable Function - 70(texel): 69(ptr) Variable Function + 35(v6): 34(ptr) Variable Function + 74(texel): 73(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -143,25 +152,27 @@ spv.ext.MissShader.rmiss Store 27(v4) 30 33: 16(float) Load 32(gl_RayTmaxEXT) Store 31(v5) 33 - 37: 34 Load 36(accEXT) - TraceRayKHR 37 38 39 40 41 38 43 42 45 46 51(incomingPayload) - 54: 6(int) Load 53(gl_SubGroupSizeARB) - 55: 16(float) ConvertUToF 54 - 59: 56(ivec4) Load 58(gl_SubgroupEqMask) - 60: 49(fvec4) ConvertUToF 59 - 61: 16(float) CompositeExtract 60 0 - 62: 16(float) FAdd 55 61 - 64: 6(int) Load 63(gl_WarpIDNV) - 65: 16(float) ConvertUToF 64 - 66: 16(float) FAdd 62 65 - 68: 67(ptr) AccessChain 51(incomingPayload) 38 - Store 68 66 - 75: 72 Load 74(s2D) - 79: 76(fvec2) Load 78(c2) - 80: 76(fvec2) Load 78(c2) - 81: 76(fvec2) Load 78(c2) - 86: 16(float) Load 85(lodClamp) - 87: 49(fvec4) ImageSampleExplicitLod 75 79 Grad ConstOffset MinLod 80 81 84 86 - Store 70(texel) 87 + 38: 6(int) Load 37(gl_CullMaskEXT) + Store 35(v6) 38 + 42: 39 Load 41(accEXT) + TraceRayKHR 42 43 44 45 46 43 48 47 50 51 56(incomingPayload) + 58: 6(int) Load 57(gl_SubGroupSizeARB) + 59: 16(float) ConvertUToF 58 + 63: 60(ivec4) Load 62(gl_SubgroupEqMask) + 64: 54(fvec4) ConvertUToF 63 + 65: 16(float) CompositeExtract 64 0 + 66: 16(float) FAdd 59 65 + 68: 6(int) Load 67(gl_WarpIDNV) + 69: 16(float) ConvertUToF 68 + 70: 16(float) FAdd 66 69 + 72: 71(ptr) AccessChain 56(incomingPayload) 43 + Store 72 70 + 79: 76 Load 78(s2D) + 83: 80(fvec2) Load 82(c2) + 84: 80(fvec2) Load 82(c2) + 85: 80(fvec2) Load 82(c2) + 90: 16(float) Load 89(lodClamp) + 91: 54(fvec4) ImageSampleExplicitLod 79 83 Grad ConstOffset MinLod 84 85 88 90 + Store 74(texel) 91 Return FunctionEnd diff --git a/Test/spv.ext.AnyHitShader.rahit b/Test/spv.ext.AnyHitShader.rahit index 871f8fea80..44c32d9174 100644 --- a/Test/spv.ext.AnyHitShader.rahit +++ b/Test/spv.ext.AnyHitShader.rahit @@ -1,6 +1,8 @@ #version 460 #extension GL_EXT_ray_tracing : enable #extension GL_KHR_shader_subgroup_basic : enable +#extension GL_EXT_ray_cull_mask : enable + layout(location = 1) rayPayloadInEXT vec4 incomingPayload; void main() { @@ -22,6 +24,7 @@ void main() int v15 = gl_GeometryIndexEXT; mat3x4 v16 = gl_ObjectToWorld3x4EXT; mat3x4 v17 = gl_WorldToObject3x4EXT; + uint v18 = gl_CullMaskEXT; incomingPayload = vec4(0.5f); if (v2 == 1) { ignoreIntersectionEXT; diff --git a/Test/spv.ext.ClosestHitShader.rchit b/Test/spv.ext.ClosestHitShader.rchit index 3f9bbaa0b3..8b5f848fa1 100644 --- a/Test/spv.ext.ClosestHitShader.rchit +++ b/Test/spv.ext.ClosestHitShader.rchit @@ -1,5 +1,7 @@ #version 460 #extension GL_EXT_ray_tracing : enable +#extension GL_EXT_ray_cull_mask : enable + layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; layout(location = 0) rayPayloadEXT vec4 localPayload; layout(location = 1) rayPayloadInEXT vec4 incomingPayload; @@ -23,5 +25,6 @@ void main() int v15 = gl_GeometryIndexEXT; mat3x4 v16 = gl_ObjectToWorld3x4EXT; mat3x4 v17 = gl_WorldToObject3x4EXT; + uint v18 = gl_CullMaskEXT; traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); } diff --git a/Test/spv.ext.IntersectShader.rint b/Test/spv.ext.IntersectShader.rint index 4933ff5eff..2138ea1a0c 100644 --- a/Test/spv.ext.IntersectShader.rint +++ b/Test/spv.ext.IntersectShader.rint @@ -1,5 +1,6 @@ #version 460 #extension GL_EXT_ray_tracing : enable +#extension GL_EXT_ray_cull_mask : enable hitAttributeEXT vec4 iAttr; void main() { @@ -18,6 +19,7 @@ void main() mat4x3 v12 = gl_WorldToObjectEXT; mat3x4 v13 = gl_ObjectToWorld3x4EXT; mat3x4 v14 = gl_WorldToObject3x4EXT; + uint v15 = gl_CullMaskEXT; iAttr = vec4(0.5f,0.5f,0.0f,1.0f); reportIntersectionEXT(0.5, 1U); } diff --git a/Test/spv.ext.MissShader.rmiss b/Test/spv.ext.MissShader.rmiss index 05311c9eef..6ab1d1abd5 100644 --- a/Test/spv.ext.MissShader.rmiss +++ b/Test/spv.ext.MissShader.rmiss @@ -5,6 +5,7 @@ #extension GL_ARB_shader_ballot : enable #extension GL_NV_shader_sm_builtins : enable #extension GL_ARB_sparse_texture_clamp: enable +#extension GL_EXT_ray_cull_mask : enable layout(binding = 0, set = 0) uniform accelerationStructureEXT accEXT; layout(location = 0) rayPayloadEXT vec4 localPayload; @@ -22,6 +23,7 @@ void main() vec3 v3 = gl_WorldRayDirectionEXT; float v4 = gl_RayTminEXT; float v5 = gl_RayTmaxEXT; + uint v6 = gl_CullMaskEXT; traceRayEXT(accEXT, 0u, 1u, 2u, 3u, 0u, vec3(0.5f), 0.5f, vec3(1.0f), 0.75f, 1); incomingPayload.x = float(gl_SubGroupSizeARB) + float(gl_SubgroupEqMask) + float(gl_WarpIDNV); vec4 texel = textureGradOffsetClampARB(s2D, c2, c2, c2, ivec2(5), lodClamp); diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index c8203c2232..09177fbca2 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -263,6 +263,7 @@ enum TBuiltInVariable { EbvObjectRayDirection, EbvRayTmin, EbvRayTmax, + EbvCullMask, EbvHitT, EbvHitKind, EbvObjectToWorld, diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 03fdce9f6b..0406da67b0 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5857,6 +5857,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" "\n"; const char *hitDecls = "in uvec3 gl_LaunchIDNV;" @@ -5893,6 +5894,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" "\n"; const char *missDecls = "in uvec3 gl_LaunchIDNV;" @@ -5912,6 +5914,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "in uint gl_IncomingRayFlagsNV;" "in uint gl_IncomingRayFlagsEXT;" "in float gl_CurrentRayTimeNV;" + "in uint gl_CullMaskEXT;" "\n"; const char *callableDecls = @@ -8743,6 +8746,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_RayTminEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setVariableExtensions("gl_RayTmaxNV", 1, &E_GL_NV_ray_tracing); symbolTable.setVariableExtensions("gl_RayTmaxEXT", 1, &E_GL_EXT_ray_tracing); + symbolTable.setVariableExtensions("gl_CullMaskEXT", 1, &E_GL_EXT_ray_cull_mask); symbolTable.setVariableExtensions("gl_HitTNV", 1, &E_GL_NV_ray_tracing); symbolTable.setVariableExtensions("gl_HitTEXT", 1, &E_GL_EXT_ray_tracing); symbolTable.setVariableExtensions("gl_HitKindNV", 1, &E_GL_NV_ray_tracing); @@ -8792,6 +8796,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion BuiltInVariable("gl_RayTminEXT", EbvRayTmin, symbolTable); BuiltInVariable("gl_RayTmaxNV", EbvRayTmax, symbolTable); BuiltInVariable("gl_RayTmaxEXT", EbvRayTmax, symbolTable); + BuiltInVariable("gl_CullMaskEXT", EbvCullMask, symbolTable); BuiltInVariable("gl_HitTNV", EbvHitT, symbolTable); BuiltInVariable("gl_HitTEXT", EbvHitT, symbolTable); BuiltInVariable("gl_HitKindNV", EbvHitKind, symbolTable); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 8d96e0e104..f6bf7c3a94 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -334,6 +334,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_ray_tracing] = EBhDisable; extensionBehavior[E_GL_EXT_ray_query] = EBhDisable; extensionBehavior[E_GL_EXT_ray_flags_primitive_culling] = EBhDisable; + extensionBehavior[E_GL_EXT_ray_cull_mask] = EBhDisable; extensionBehavior[E_GL_EXT_blend_func_extended] = EBhDisable; extensionBehavior[E_GL_EXT_shader_implicit_conversions] = EBhDisable; extensionBehavior[E_GL_EXT_fragment_shading_rate] = EBhDisable; @@ -505,6 +506,7 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_ray_tracing 1\n" "#define GL_EXT_ray_query 1\n" "#define GL_EXT_ray_flags_primitive_culling 1\n" + "#define GL_EXT_ray_cull_mask 1\n" "#define GL_EXT_spirv_intrinsics 1\n" "#define GL_AMD_shader_ballot 1\n" diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 96a6e1fc52..3f7299d3cf 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -201,6 +201,7 @@ const char* const E_GL_EXT_debug_printf = "GL_EXT_debug_prin const char* const E_GL_EXT_ray_tracing = "GL_EXT_ray_tracing"; const char* const E_GL_EXT_ray_query = "GL_EXT_ray_query"; const char* const E_GL_EXT_ray_flags_primitive_culling = "GL_EXT_ray_flags_primitive_culling"; +const char* const E_GL_EXT_ray_cull_mask = "GL_EXT_ray_cull_mask"; const char* const E_GL_EXT_blend_func_extended = "GL_EXT_blend_func_extended"; const char* const E_GL_EXT_shader_implicit_conversions = "GL_EXT_shader_implicit_conversions"; const char* const E_GL_EXT_fragment_shading_rate = "GL_EXT_fragment_shading_rate"; From dab6fc8960d33788a183c3d8774071a269d1711f Mon Sep 17 00:00:00 2001 From: Marius Bjorge Date: Thu, 5 May 2022 14:03:57 +0200 Subject: [PATCH 329/365] Update spirv-tools and spirv-headers known good --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index 2fcb76885a..3dd6124f91 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "eed5c76a57bb965f2e1b56d1dc40b50910b5ec1d" + "commit" : "58dc37ea6af7ec09f32f7b13ff60071e3ba2bd24" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "4995a2f2723c401eb0ea3e10c81298906bf1422b" + "commit" : "b765c355f488837ca4c77980ba69484f3ff277f5" } ] } From 521216aaaacede5a04b7f39e1e5f1d3b2b16bd78 Mon Sep 17 00:00:00 2001 From: alelenv <40001162+alelenv@users.noreply.github.com> Date: Thu, 5 May 2022 21:46:58 -0700 Subject: [PATCH 330/365] Disable layout error check for RT ops in presence of EXT_spirv_intrinsics Fixes #2935 --- glslang/MachineIndependent/ParseHelper.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 496a9a134b..613a66f400 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2327,7 +2327,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan error(loc, "argument must be compile-time constant", "payload number", "a"); else { unsigned int location = (*argp)[10]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); - if (intermediate.checkLocationRT(0, location) < 0) + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(0, location) < 0) error(loc, "with layout(location =", "no rayPayloadEXT/rayPayloadInEXT declared", "%d)", location); } break; @@ -2340,7 +2340,7 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan error(loc, "argument must be compile-time constant", "callable data number", ""); else { unsigned int location = (*argp)[1]->getAsConstantUnion()->getAsConstantUnion()->getConstArray()[0].getUConst(); - if (intermediate.checkLocationRT(1, location) < 0) + if (!extensionTurnedOn(E_GL_EXT_spirv_intrinsics) && intermediate.checkLocationRT(1, location) < 0) error(loc, "with layout(location =", "no callableDataEXT/callableDataInEXT declared", "%d)", location); } break; From b5aae6273174e776b9a15616749ebcdd49d12ab4 Mon Sep 17 00:00:00 2001 From: ahagan Date: Tue, 26 Apr 2022 23:36:57 -0400 Subject: [PATCH 331/365] Add whitelist filtering for debug comments in SPIRV-Remap. --- SPIRV/SPVRemapper.cpp | 27 +++++++++++++++++----- SPIRV/SPVRemapper.h | 7 +++++- StandAlone/spirv-remap.cpp | 46 +++++++++++++++++++++++++++++++++----- gtests/TestFixture.h | 7 +++--- 4 files changed, 72 insertions(+), 15 deletions(-) diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index fdfbeb90cd..61937f5ba4 100644 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -160,15 +160,30 @@ namespace spv { } // Is this an opcode we should remove when using --strip? - bool spirvbin_t::isStripOp(spv::Op opCode) const + bool spirvbin_t::isStripOp(spv::Op opCode, unsigned start) const { switch (opCode) { case spv::OpSource: case spv::OpSourceExtension: case spv::OpName: case spv::OpMemberName: - case spv::OpLine: return true; - default: return false; + case spv::OpLine : + { + const spv::Id target = asId(start + 1); + const std::string name = literalString(start + 2); + + std::vector::const_iterator it; + for (it = stripWhiteList.begin(); it < stripWhiteList.end(); it++) + { + if (name.find(*it) != std::string::npos) { + return false; + } + } + + return true; + } + default : + return false; } } @@ -372,7 +387,7 @@ namespace spv { process( [&](spv::Op opCode, unsigned start) { // remember opcodes we want to strip later - if (isStripOp(opCode)) + if (isStripOp(opCode, start)) stripInst(start); return true; }, @@ -1494,8 +1509,10 @@ namespace spv { } // remap from a memory image - void spirvbin_t::remap(std::vector& in_spv, std::uint32_t opts) + void spirvbin_t::remap(std::vector& in_spv, const std::vector& whiteListStrings, + std::uint32_t opts) { + stripWhiteList = whiteListStrings; spv.swap(in_spv); remap(opts); spv.swap(in_spv); diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h index d6b9c346dd..2dfacd733b 100644 --- a/SPIRV/SPVRemapper.h +++ b/SPIRV/SPVRemapper.h @@ -118,7 +118,8 @@ class spirvbin_t : public spirvbin_base_t virtual ~spirvbin_t() { } // remap on an existing binary in memory - void remap(std::vector& spv, std::uint32_t opts = DO_EVERYTHING); + void remap(std::vector& spv, const std::vector& whiteListStrings, + std::uint32_t opts = DO_EVERYTHING); // Type for error/log handler functions typedef std::function errorfn_t; @@ -180,6 +181,8 @@ class spirvbin_t : public spirvbin_base_t unsigned typeSizeInWords(spv::Id id) const; unsigned idTypeSizeInWords(spv::Id id) const; + bool isStripOp(spv::Op opCode, unsigned start) const; + spv::Id& asId(unsigned word) { return spv[word]; } const spv::Id& asId(unsigned word) const { return spv[word]; } spv::Op asOpCode(unsigned word) const { return opOpCode(spv[word]); } @@ -249,6 +252,8 @@ class spirvbin_t : public spirvbin_base_t std::vector spv; // SPIR words + std::vector stripWhiteList; + namemap_t nameMap; // ID names from OpName // Since we want to also do binary ops, we can't use std::vector. we could use diff --git a/StandAlone/spirv-remap.cpp b/StandAlone/spirv-remap.cpp index 48878c3af0..15c3ac513b 100644 --- a/StandAlone/spirv-remap.cpp +++ b/StandAlone/spirv-remap.cpp @@ -105,6 +105,32 @@ namespace { } } + // Read strings from a file + void read(std::vector& strings, const std::string& inFilename, int verbosity) + { + std::ifstream fp; + + if (verbosity > 0) + logHandler(std::string(" reading: ") + inFilename); + + strings.clear(); + fp.open(inFilename, std::fstream::in); + + if (fp.fail()) + errHandler("error opening file for read: "); + + std::string line; + while (std::getline(fp, line)) + { + // Ignore empty lines and lines starting with the comment marker '#'. + if (line.length() == 0 || line[0] == '#') { + continue; + } + + strings.push_back(line); + } + } + void write(std::vector& spv, const std::string& outFile, int verbosity) { if (outFile.empty()) @@ -144,6 +170,7 @@ namespace { << " [--dce (all|types|funcs)]" << " [--opt (all|loadstore)]" << " [--strip-all | --strip all | -s]" + << " [--strip-white-list]" << " [--do-everything]" << " --input | -i file1 [file2...] --output|-o DESTDIR" << std::endl; @@ -156,16 +183,18 @@ namespace { // grind through each SPIR in turn void execute(const std::vector& inputFile, const std::string& outputDir, - int opts, int verbosity) + const std::string& whiteListFile, int opts, int verbosity) { + std::vector whiteListStrings; + if(!whiteListFile.empty()) + read(whiteListStrings, whiteListFile, verbosity); + for (auto it = inputFile.cbegin(); it != inputFile.cend(); ++it) { const std::string &filename = *it; std::vector spv; read(spv, filename, verbosity); - spv::spirvbin_t(verbosity).remap(spv, opts); - + spv::spirvbin_t(verbosity).remap(spv, whiteListStrings, opts); const std::string outfile = outputDir + path_sep_char() + basename(filename); - write(spv, outfile, verbosity); } @@ -176,6 +205,7 @@ namespace { // Parse command line options void parseCmdLine(int argc, char** argv, std::vector& inputFile, std::string& outputDir, + std::string& stripWhiteListFile, int& options, int& verbosity) { @@ -245,6 +275,9 @@ namespace { options = options | spv::spirvbin_t::STRIP; ++a; } + } else if (arg == "--strip-white-list") { + ++a; + stripWhiteListFile = argv[a++]; } else if (arg == "--dce") { // Parse comma (or colon, etc) separated list of things to dce ++a; @@ -315,6 +348,7 @@ int main(int argc, char** argv) { std::vector inputFile; std::string outputDir; + std::string whiteListFile; int opts; int verbosity; @@ -329,13 +363,13 @@ int main(int argc, char** argv) if (argc < 2) usage(argv[0]); - parseCmdLine(argc, argv, inputFile, outputDir, opts, verbosity); + parseCmdLine(argc, argv, inputFile, outputDir, whiteListFile, opts, verbosity); if (outputDir.empty()) usage(argv[0], "Output directory required"); // Main operations: read, remap, and write. - execute(inputFile, outputDir, opts, verbosity); + execute(inputFile, outputDir, whiteListFile, opts, verbosity); // If we get here, everything went OK! Nothing more to be done. } diff --git a/gtests/TestFixture.h b/gtests/TestFixture.h index 2b057dcb0e..5b66dece71 100644 --- a/gtests/TestFixture.h +++ b/gtests/TestFixture.h @@ -367,11 +367,12 @@ class GlslangTest : public GT { if (success && (controls & EShMsgSpvRules)) { spv::SpvBuildLogger logger; + std::vector whiteListStrings; std::vector spirv_binary; glslang::GlslangToSpv(*program.getIntermediate(stage), spirv_binary, &logger, &options()); - spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions); + spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, whiteListStrings, remapOptions); std::ostringstream disassembly_stream; spv::Parameterize(); @@ -394,9 +395,9 @@ class GlslangTest : public GT { { if ((controls & EShMsgSpvRules)) { std::vector spirv_binary(code); // scratch copy + std::vector whiteListStrings; + spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, whiteListStrings, remapOptions); - spv::spirvbin_t(0 /*verbosity*/).remap(spirv_binary, remapOptions); - std::ostringstream disassembly_stream; spv::Parameterize(); spv::Disassemble(disassembly_stream, spirv_binary); From 67384dd18b1715a61851017763d3b3f49f07edd2 Mon Sep 17 00:00:00 2001 From: Malcolm Bechard Date: Mon, 16 May 2022 23:03:37 -0400 Subject: [PATCH 332/365] fix structure indexing reassignment during block merging For EOpIndexDirectStruct binaries, we want to visit the left symbol (the structure) before we visit the binary, so it gets updated first. That way we are comparing the updated structure against the target 'unitType', not the original structure. --- glslang/MachineIndependent/linkValidate.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 9b45570e20..7fed096b8d 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -642,7 +642,7 @@ void TIntermediate::mergeBlockDefinitions(TInfoSink& infoSink, TIntermSymbol* bl } TMergeBlockTraverser(const TIntermSymbol* newSym, const glslang::TType* unitType, glslang::TIntermediate* unit, const std::map* memberIdxUpdates) - : newSymbol(newSym), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates) + : TIntermTraverser(false, true), newSymbol(newSym), unitType(unitType), unit(unit), memberIndexUpdates(memberIdxUpdates) { } virtual ~TMergeBlockTraverser() {} From ea7e64cf509ea5423165832893d4cceff09e674d Mon Sep 17 00:00:00 2001 From: David Neto Date: Thu, 19 May 2022 13:27:12 -0400 Subject: [PATCH 333/365] Remove unused variable --- SPIRV/SPVRemapper.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index 61937f5ba4..28168822c6 100644 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -169,7 +169,6 @@ namespace spv { case spv::OpMemberName: case spv::OpLine : { - const spv::Id target = asId(start + 1); const std::string name = literalString(start + 2); std::vector::const_iterator it; From df01afe7b8bc577ba5243c111bbc22c7816771e2 Mon Sep 17 00:00:00 2001 From: Sergey Kosarevsky Date: Fri, 20 May 2022 23:00:29 -0700 Subject: [PATCH 334/365] Android.mk: Add CInterface files --- Android.mk | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Android.mk b/Android.mk index c9b221f1a9..40cddb7584 100644 --- a/Android.mk +++ b/Android.mk @@ -96,6 +96,7 @@ LOCAL_MODULE:=glslang LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti $(GLSLANG_DEFINES) LOCAL_EXPORT_C_INCLUDES:=$(LOCAL_PATH) LOCAL_SRC_FILES:= \ + glslang/CInterface/glslang_c_interface.cpp \ glslang/GenericCodeGen/CodeGen.cpp \ glslang/GenericCodeGen/Link.cpp \ glslang/HLSL/hlslAttributes.cpp \ @@ -149,6 +150,7 @@ $(LOCAL_PATH)/SPIRV/GlslangToSpv.cpp: \ LOCAL_MODULE:=SPIRV LOCAL_CXXFLAGS:=-std=c++11 -fno-exceptions -fno-rtti -Werror $(GLSLANG_DEFINES) LOCAL_SRC_FILES:= \ + SPIRV/CInterface/spirv_c_interface.cpp \ SPIRV/GlslangToSpv.cpp \ SPIRV/InReadableOrder.cpp \ SPIRV/Logger.cpp \ From e3148915982e41989da1c227c7d19b3d9e959b19 Mon Sep 17 00:00:00 2001 From: Gabriele Di Bari Date: Sat, 21 May 2022 17:00:24 +0200 Subject: [PATCH 335/365] handleEntryPointAttributes add EatInstance case --- glslang/HLSL/hlslParseHelper.cpp | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/glslang/HLSL/hlslParseHelper.cpp b/glslang/HLSL/hlslParseHelper.cpp index e9369a0f8c..ffa1d7a650 100644 --- a/glslang/HLSL/hlslParseHelper.cpp +++ b/glslang/HLSL/hlslParseHelper.cpp @@ -1754,6 +1754,18 @@ void HlslParseContext::handleEntryPointAttributes(const TSourceLoc& loc, const T intermediate.setLocalSize(lid, sequence[lid]->getAsConstantUnion()->getConstArray()[0].getIConst()); break; } + case EatInstance: + { + int invocations; + + if (!it->getInt(invocations)) { + error(loc, "invalid instance", "", ""); + } else { + if (!intermediate.setInvocations(invocations)) + error(loc, "cannot change previously set instance attribute", "", ""); + } + break; + } case EatMaxVertexCount: { int maxVertexCount; From 780123006938d029abfdb9bd5874f8ae5a4a6851 Mon Sep 17 00:00:00 2001 From: Sergey Kosarevsky Date: Sat, 21 May 2022 22:30:39 +0300 Subject: [PATCH 336/365] Add a new C interface example to README.md --- README.md | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) diff --git a/README.md b/README.md index efe986cab2..5e642e6908 100644 --- a/README.md +++ b/README.md @@ -429,6 +429,77 @@ ShCompile(shader, compiler) -> compiler(AST) -> In practice, `ShCompile()` takes shader strings, default version, and warning/error and other options for controlling compilation. +### C Functional Interface (new) + +This interface is located `glslang_c_interface.h` and exposes functionality similar to the C++ interface. The following snippet is a complete example showing how to compile GLSL into SPIR-V 1.5 for Vulkan 1.2. + +```cxx +std::vector compileShaderToSPIRV_Vulkan(glslang_stage_t stage, const char* shaderSource, const char* fileName) +{ + const glslang_input_t input = { + .language = GLSLANG_SOURCE_GLSL, + .stage = stage, + .client = GLSLANG_CLIENT_VULKAN, + .client_version = GLSLANG_TARGET_VULKAN_1_2, + .target_language = GLSLANG_TARGET_SPV, + .target_language_version = GLSLANG_TARGET_SPV_1_5, + .code = shaderSource, + .default_version = 100, + .default_profile = GLSLANG_NO_PROFILE, + .force_default_version_and_profile = false, + .forward_compatible = false, + .messages = GLSLANG_MSG_DEFAULT_BIT, + .resource = reinterpret_cast(&glslang::DefaultTBuiltInResource), + }; + + glslang_shader_t* shader = glslang_shader_create(&input); + + if (!glslang_shader_preprocess(shader, &input)) { + printf("GLSL preprocessing failed %s\n", fileName); + printf("%s\n", glslang_shader_get_info_log(shader)); + printf("%s\n", glslang_shader_get_info_debug_log(shader)); + printf("%s\n", input.code); + glslang_shader_delete(shader); + return std::vector(); + } + + if (!glslang_shader_parse(shader, &input)) { + printf("GLSL parsing failed %s\n", fileName); + printf("%s\n", glslang_shader_get_info_log(shader)); + printf("%s\n", glslang_shader_get_info_debug_log(shader)); + printf("%s\n", glslang_shader_get_preprocessed_code(shader)); + glslang_shader_delete(shader); + return std::vector(); + } + + glslang_program_t* program = glslang_program_create(); + glslang_program_add_shader(program, shader); + + if (!glslang_program_link(program, GLSLANG_MSG_SPV_RULES_BIT | GLSLANG_MSG_VULKAN_RULES_BIT)) { + printf("GLSL linking failed %s\n", fileName); + printf("%s\n", glslang_program_get_info_log(program)); + printf("%s\n", glslang_program_get_info_debug_log(program)); + glslang_program_delete(program); + glslang_shader_delete(shader); + return std::vector(); + } + + glslang_program_SPIRV_generate(program, stage); + + std::vector outShaderModule(glslang_program_SPIRV_get_size(program)); + glslang_program_SPIRV_get(program, outShaderModule.data()); + + const char* spirv_messages = glslang_program_SPIRV_get_messages(program); + if (spirv_messages) + printf("(%s) %s\b", fileName, spirv_messages); + + glslang_program_delete(program); + glslang_shader_delete(shader); + + return outShaderModule; +} +``` + ## Basic Internal Operation * Initial lexical analysis is done by the preprocessor in From 279c28e70ac39f5460c184c40a42744149263166 Mon Sep 17 00:00:00 2001 From: Qingyuan Zheng Date: Mon, 23 May 2022 23:05:43 -0700 Subject: [PATCH 337/365] generate OpLine before OpFunction --- SPIRV/GlslangToSpv.cpp | 4 ++++ SPIRV/SpvBuilder.h | 4 ++++ SPIRV/spvIR.h | 17 ++++++++++++++++- Test/baseResults/hlsl.pp.line2.frag.out | 2 ++ Test/baseResults/hlsl.pp.line3.frag.out | 2 ++ Test/baseResults/hlsl.pp.line4.frag.out | 2 ++ Test/baseResults/hlsl.round.dx9.frag.out | 1 + Test/baseResults/hlsl.sample.dx9.frag.out | 2 ++ Test/baseResults/hlsl.sample.dx9.vert.out | 2 ++ Test/baseResults/spv.debugInfo.1.1.frag.out | 2 ++ Test/baseResults/spv.debugInfo.frag.out | 2 ++ Test/baseResults/spv.hlslDebugInfo.frag.out | 2 ++ Test/baseResults/spv.pp.line.frag.out | 1 + 13 files changed, 42 insertions(+), 1 deletion(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 01f5dbced5..bb427b2696 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2783,6 +2783,10 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt } else { handleFunctionEntry(node); } + if (options.generateDebugInfo) { + const auto& loc = node->getLoc(); + currentFunction->setDebugLineInfo(builder.getSourceFile(), loc.line, loc.column); + } } else { if (inEntryPoint) entryPointTerminated = true; diff --git a/SPIRV/SpvBuilder.h b/SPIRV/SpvBuilder.h index c72d9b287e..0d6bce631f 100644 --- a/SPIRV/SpvBuilder.h +++ b/SPIRV/SpvBuilder.h @@ -99,6 +99,10 @@ class Builder { stringIds[file_c_str] = strId; return strId; } + spv::Id getSourceFile() const + { + return sourceFileStringId; + } void setSourceFile(const std::string& file) { sourceFileStringId = getStringId(file); diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index 5249a5ba73..948ea52c9e 100644 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -357,6 +357,14 @@ class Function { Decoration getReturnPrecision() const { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; } + void setDebugLineInfo(Id fileName, int line, int column) { + lineInstruction = Instruction(OpLine); + lineInstruction.addIdOperand(fileName); + lineInstruction.addImmediateOperand(line); + lineInstruction.addImmediateOperand(column); + } + bool hasDebugLineInfo() const { return lineInstruction.getOpCode() == OpLine; } + void setImplicitThis() { implicitThis = true; } bool hasImplicitThis() const { return implicitThis; } @@ -373,6 +381,11 @@ class Function { void dump(std::vector& out) const { + // OpLine + if (hasDebugLineInfo()) { + lineInstruction.dump(out); + } + // OpFunction functionInstruction.dump(out); @@ -391,6 +404,7 @@ class Function { Function& operator=(Function&); Module& parent; + Instruction lineInstruction; Instruction functionInstruction; std::vector parameterInstructions; std::vector blocks; @@ -457,7 +471,8 @@ class Module { // - the OpFunction instruction // - all the OpFunctionParameter instructions __inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent) - : parent(parent), functionInstruction(id, resultType, OpFunction), implicitThis(false), + : parent(parent), lineInstruction(OpNop), + functionInstruction(id, resultType, OpFunction), implicitThis(false), reducedPrecisionReturn(false) { // OpFunction diff --git a/Test/baseResults/hlsl.pp.line2.frag.out b/Test/baseResults/hlsl.pp.line2.frag.out index 9ccf05c16c..e831964627 100644 --- a/Test/baseResults/hlsl.pp.line2.frag.out +++ b/Test/baseResults/hlsl.pp.line2.frag.out @@ -129,6 +129,7 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 71(i.vTextureCoords): 70(ptr) Variable Input 74: TypePointer Output 11(fvec4) 75(@entryPointOutput.vColor): 74(ptr) Variable Output + Line 1 23 1 5(MainPs): 3 Function None 4 6: Label 69(i): 10(ptr) Variable Function @@ -144,6 +145,7 @@ PS_OUTPUT MainPs ( PS_INPUT i ) Store 75(@entryPointOutput.vColor) 79 Return FunctionEnd + Line 1 23 1 15(@MainPs(struct-PS_INPUT-vf21;):12(PS_OUTPUT) Function None 13 14(i): 10(ptr) FunctionParameter 16: Label diff --git a/Test/baseResults/hlsl.pp.line3.frag.out b/Test/baseResults/hlsl.pp.line3.frag.out index d19c516cd2..0cf250ab47 100644 --- a/Test/baseResults/hlsl.pp.line3.frag.out +++ b/Test/baseResults/hlsl.pp.line3.frag.out @@ -120,6 +120,7 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 69(i.vTextureCoords): 68(ptr) Variable Input 72: TypePointer Output 12(fvec4) 73(@entryPointOutput.vColor): 72(ptr) Variable Output + Line 1 23 1 6(MainPs): 4 Function None 5 7: Label 67(i): 11(ptr) Variable Function @@ -135,6 +136,7 @@ PS_OUTPUT MainPs ( PS_INPUT i ) Store 73(@entryPointOutput.vColor) 77 Return FunctionEnd + Line 1 23 1 16(@MainPs(struct-PS_INPUT-vf21;):13(PS_OUTPUT) Function None 14 15(i): 11(ptr) FunctionParameter 17: Label diff --git a/Test/baseResults/hlsl.pp.line4.frag.out b/Test/baseResults/hlsl.pp.line4.frag.out index 2244588be1..f318a21389 100644 --- a/Test/baseResults/hlsl.pp.line4.frag.out +++ b/Test/baseResults/hlsl.pp.line4.frag.out @@ -112,7 +112,9 @@ PS_OUTPUT MainPs ( PS_INPUT i ) 70(i.vTextureCoords): 69(ptr) Variable Input 73: TypePointer Output 11(fvec4) 74(@entryPointOutput.vColor): 73(ptr) Variable Output + Line 1 25 1 5(MainPs): 3 Function None 4 + NoLine 6: Label Line 17 25 0 71: 8(fvec2) Load 70(i.vTextureCoords) diff --git a/Test/baseResults/hlsl.round.dx9.frag.out b/Test/baseResults/hlsl.round.dx9.frag.out index 9333c7dcff..ecf58a7493 100644 --- a/Test/baseResults/hlsl.round.dx9.frag.out +++ b/Test/baseResults/hlsl.round.dx9.frag.out @@ -60,6 +60,7 @@ gl_FragCoord origin is upper left 6: Label Return FunctionEnd + Line 1 2 1 12(PixelShaderFunction(vf4;): 8(fvec4) Function None 10 11(input): 9(ptr) FunctionParameter 13: Label diff --git a/Test/baseResults/hlsl.sample.dx9.frag.out b/Test/baseResults/hlsl.sample.dx9.frag.out index 282455c703..2b19a2cbb0 100644 --- a/Test/baseResults/hlsl.sample.dx9.frag.out +++ b/Test/baseResults/hlsl.sample.dx9.frag.out @@ -477,6 +477,7 @@ using depth_any 128(@entryPointOutput.Color): 127(ptr) Variable Output 131: TypePointer Output 7(float) 132(@entryPointOutput.Depth): 131(ptr) Variable Output + Line 1 15 1 5(main): 3 Function None 4 6: Label 125(flattenTemp): 109(ptr) Variable Function @@ -491,6 +492,7 @@ using depth_any Store 132(@entryPointOutput.Depth) 134 Return FunctionEnd + Line 1 15 1 11(@main():9(PS_OUTPUT) Function None 10 12: Label 14(ColorOut): 13(ptr) Variable Function diff --git a/Test/baseResults/hlsl.sample.dx9.vert.out b/Test/baseResults/hlsl.sample.dx9.vert.out index 4b718cf174..0cd98f2aa7 100644 --- a/Test/baseResults/hlsl.sample.dx9.vert.out +++ b/Test/baseResults/hlsl.sample.dx9.vert.out @@ -215,6 +215,7 @@ Shader version: 500 53: 7(float) Constant 1073741824 60: TypePointer Output 8(fvec4) 61(@entryPointOutput.Pos): 60(ptr) Variable Output + Line 1 11 1 5(main): 3 Function None 4 6: Label Line 1 11 0 @@ -223,6 +224,7 @@ Shader version: 500 Store 61(@entryPointOutput.Pos) 63 Return FunctionEnd + Line 1 11 1 11(@main():9(VS_OUTPUT) Function None 10 12: Label 14(PosOut): 13(ptr) Variable Function diff --git a/Test/baseResults/spv.debugInfo.1.1.frag.out b/Test/baseResults/spv.debugInfo.1.1.frag.out index 78044ff2cf..109dc4bd58 100644 --- a/Test/baseResults/spv.debugInfo.1.1.frag.out +++ b/Test/baseResults/spv.debugInfo.1.1.frag.out @@ -136,6 +136,7 @@ void main() 109: 7(int) Constant 1 111: TypePointer Output 10(float) 114: 10(float) Constant 1092616192 + Line 1 28 11 5(main): 3 Function None 4 6: Label 57(param): 9(ptr) Variable Function @@ -237,6 +238,7 @@ void main() 118: Label Return FunctionEnd + Line 1 16 13 14(foo(struct-S-i11;): 11(fvec4) Function None 12 13(s): 9(ptr) FunctionParameter 15: Label diff --git a/Test/baseResults/spv.debugInfo.frag.out b/Test/baseResults/spv.debugInfo.frag.out index e146398190..9091327151 100644 --- a/Test/baseResults/spv.debugInfo.frag.out +++ b/Test/baseResults/spv.debugInfo.frag.out @@ -137,6 +137,7 @@ void main() 109: 7(int) Constant 1 111: TypePointer Output 10(float) 114: 10(float) Constant 1092616192 + Line 1 28 11 5(main): 3 Function None 4 6: Label 57(param): 9(ptr) Variable Function @@ -238,6 +239,7 @@ void main() 118: Label Return FunctionEnd + Line 1 16 13 14(foo(struct-S-i11;): 11(fvec4) Function None 12 13(s): 9(ptr) FunctionParameter 15: Label diff --git a/Test/baseResults/spv.hlslDebugInfo.frag.out b/Test/baseResults/spv.hlslDebugInfo.frag.out index 40089e7b87..9ce266dbfe 100644 --- a/Test/baseResults/spv.hlslDebugInfo.frag.out +++ b/Test/baseResults/spv.hlslDebugInfo.frag.out @@ -44,6 +44,7 @@ float4 origMain() : SV_Position 13: 8(fvec4) ConstantComposite 12 12 12 12 16: TypePointer Output 8(fvec4) 17(@entryPointOutput): 16(ptr) Variable Output + Line 1 2 1 5(newMain): 3 Function None 4 6: Label Line 1 2 0 @@ -51,6 +52,7 @@ float4 origMain() : SV_Position Store 17(@entryPointOutput) 18 Return FunctionEnd + Line 1 2 1 10(@newMain(): 8(fvec4) Function None 9 11: Label Line 1 3 0 diff --git a/Test/baseResults/spv.pp.line.frag.out b/Test/baseResults/spv.pp.line.frag.out index 549ae912c2..dcfa897b50 100644 --- a/Test/baseResults/spv.pp.line.frag.out +++ b/Test/baseResults/spv.pp.line.frag.out @@ -92,6 +92,7 @@ void main() 56(u): 55(ptr) Variable Input 58: TypePointer Input 7(float) 59(blend): 58(ptr) Variable Input + Line 1 11 11 5(main): 3 Function None 4 6: Label 9(blendscale): 8(ptr) Variable Function From 353ef3ac3e72dd8cf51f8bf164bc671dc2549258 Mon Sep 17 00:00:00 2001 From: Gabriele Di Bari Date: Tue, 24 May 2022 18:53:39 +0200 Subject: [PATCH 338/365] Add test for the instance param (geometry shader) --- Test/hlsl.instance.geom | 17 +++++++++++++++++ gtests/Hlsl.FromFile.cpp | 3 ++- 2 files changed, 19 insertions(+), 1 deletion(-) create mode 100644 Test/hlsl.instance.geom diff --git a/Test/hlsl.instance.geom b/Test/hlsl.instance.geom new file mode 100644 index 0000000000..5295f3893a --- /dev/null +++ b/Test/hlsl.instance.geom @@ -0,0 +1,17 @@ +struct VertexShaderOutput +{ + float4 m_position : SV_POSITION; + float4 m_color : COLOR0; +}; + +[maxvertexcount(3)] +[instance(5)] +void GeometryShader(triangle VertexShaderOutput input[3], inout TriangleStream output, uint id : SV_GSInstanceID) +{ + [loop] + for (int i = 0; i < 3; ++i) + { + output.Append(input[i]); + } + output.RestartStrip(); +} \ No newline at end of file diff --git a/gtests/Hlsl.FromFile.cpp b/gtests/Hlsl.FromFile.cpp index 519be2549e..d3e38bb7ff 100644 --- a/gtests/Hlsl.FromFile.cpp +++ b/gtests/Hlsl.FromFile.cpp @@ -434,7 +434,8 @@ INSTANTIATE_TEST_SUITE_P( {"hlsl.typedef.frag", "PixelShaderFunction"}, {"hlsl.whileLoop.frag", "PixelShaderFunction"}, {"hlsl.void.frag", "PixelShaderFunction"}, - {"hlsl.type.type.conversion.all.frag", "main"} + {"hlsl.type.type.conversion.all.frag", "main"}, + {"hlsl.instance.geom", "GeometryShader"} }), FileNameAsCustomTestSuffix ); From e28ec404a7dd1f3901865e08b9db4157c1de1360 Mon Sep 17 00:00:00 2001 From: Gabriele91 Date: Tue, 24 May 2022 20:09:20 +0200 Subject: [PATCH 339/365] Add hlsl.instance.geom output --- Test/baseResults/hlsl.instance.geom.out | 433 ++++++++++++++++++++++++ 1 file changed, 433 insertions(+) create mode 100644 Test/baseResults/hlsl.instance.geom.out diff --git a/Test/baseResults/hlsl.instance.geom.out b/Test/baseResults/hlsl.instance.geom.out new file mode 100644 index 0000000000..5fbffd9ac0 --- /dev/null +++ b/Test/baseResults/hlsl.instance.geom.out @@ -0,0 +1,433 @@ +hlsl.instance.geom +Shader version: 500 +invocations = 5 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:10 Function Definition: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void) +0:10 Function Parameters: +0:10 'input' ( in 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 'output' ( out structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 'id' ( in uint) +0:? Sequence +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'i' ( temp int) +0:12 Constant: +0:12 0 (const int) +0:12 Loop with condition tested first: DontUnroll +0:12 Loop Condition +0:12 Compare Less Than ( temp bool) +0:12 'i' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Loop Body +0:? Sequence +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 indirect index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'input' ( in 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'i' ( temp int) +0:14 move second child to first child ( temp 4-component vector of float) +0:? 'output.m_position' ( out 4-component vector of float Position) +0:14 m_position: direct index for structure ( temp 4-component vector of float) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 Constant: +0:14 0 (const int) +0:14 move second child to first child ( temp 4-component vector of float) +0:? 'output.m_color' (layout( location=0) out 4-component vector of float) +0:14 m_color: direct index for structure ( temp 4-component vector of float) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 Constant: +0:14 1 (const int) +0:14 EmitVertex ( temp void) +0:12 Loop Terminal Expression +0:12 Pre-Increment ( temp int) +0:12 'i' ( temp int) +0:16 EndPrimitive ( temp void) +0:10 Function Definition: GeometryShader( ( temp void) +0:10 Function Parameters: +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 1 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 1 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp uint) +0:? 'id' ( temp uint) +0:? 'id' ( in uint InvocationID) +0:10 Function Call: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'output' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'id' ( temp uint) +0:? Linker Objects +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:? 'id' ( in uint InvocationID) +0:? 'output.m_position' ( out 4-component vector of float Position) +0:? 'output.m_color' (layout( location=0) out 4-component vector of float) + + +Linked geometry stage: + + +Shader version: 500 +invocations = 5 +max_vertices = 3 +input primitive = triangles +output primitive = triangle_strip +0:? Sequence +0:10 Function Definition: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void) +0:10 Function Parameters: +0:10 'input' ( in 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 'output' ( out structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 'id' ( in uint) +0:? Sequence +0:12 Sequence +0:12 move second child to first child ( temp int) +0:12 'i' ( temp int) +0:12 Constant: +0:12 0 (const int) +0:12 Loop with condition tested first: DontUnroll +0:12 Loop Condition +0:12 Compare Less Than ( temp bool) +0:12 'i' ( temp int) +0:12 Constant: +0:12 3 (const int) +0:12 Loop Body +0:? Sequence +0:14 Sequence +0:14 Sequence +0:14 move second child to first child ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 indirect index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'input' ( in 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 'i' ( temp int) +0:14 move second child to first child ( temp 4-component vector of float) +0:? 'output.m_position' ( out 4-component vector of float Position) +0:14 m_position: direct index for structure ( temp 4-component vector of float) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 Constant: +0:14 0 (const int) +0:14 move second child to first child ( temp 4-component vector of float) +0:? 'output.m_color' (layout( location=0) out 4-component vector of float) +0:14 m_color: direct index for structure ( temp 4-component vector of float) +0:14 'flattenTemp' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:14 Constant: +0:14 1 (const int) +0:14 EmitVertex ( temp void) +0:12 Loop Terminal Expression +0:12 Pre-Increment ( temp int) +0:12 'i' ( temp int) +0:16 EndPrimitive ( temp void) +0:10 Function Definition: GeometryShader( ( temp void) +0:10 Function Parameters: +0:? Sequence +0:10 Sequence +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 0 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 0 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 1 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 1 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 1 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_position: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 0 (const int) +0:10 direct index ( in 4-component vector of float Position) +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp 4-component vector of float) +0:10 m_color: direct index for structure ( temp 4-component vector of float) +0:10 direct index ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:10 Constant: +0:10 2 (const int) +0:10 Constant: +0:10 1 (const int) +0:10 direct index (layout( location=0) in 4-component vector of float) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:10 Constant: +0:10 2 (const int) +0:10 move second child to first child ( temp uint) +0:? 'id' ( temp uint) +0:? 'id' ( in uint InvocationID) +0:10 Function Call: @GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1; ( temp void) +0:? 'input' ( temp 3-element array of structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'output' ( temp structure{ temp 4-component vector of float m_position, temp 4-component vector of float m_color}) +0:? 'id' ( temp uint) +0:? Linker Objects +0:? 'input.m_position' ( in 3-element array of 4-component vector of float Position) +0:? 'input.m_color' (layout( location=0) in 3-element array of 4-component vector of float) +0:? 'id' ( in uint InvocationID) +0:? 'output.m_position' ( out 4-component vector of float Position) +0:? 'output.m_color' (layout( location=0) out 4-component vector of float) + +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 86 + + Capability Geometry + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Geometry 4 "GeometryShader" 39 43 52 57 76 + ExecutionMode 4 Triangles + ExecutionMode 4 Invocations 5 + ExecutionMode 4 OutputTriangleStrip + ExecutionMode 4 OutputVertices 3 + Source HLSL 500 + Name 4 "GeometryShader" + Name 8 "VertexShaderOutput" + MemberName 8(VertexShaderOutput) 0 "m_position" + MemberName 8(VertexShaderOutput) 1 "m_color" + Name 19 "@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;" + Name 16 "input" + Name 17 "output" + Name 18 "id" + Name 23 "i" + Name 34 "flattenTemp" + Name 39 "output.m_position" + Name 43 "output.m_color" + Name 49 "input" + Name 52 "input.m_position" + Name 57 "input.m_color" + Name 74 "id" + Name 76 "id" + Name 78 "output" + Name 79 "param" + Name 81 "param" + Name 82 "param" + Decorate 39(output.m_position) BuiltIn Position + Decorate 43(output.m_color) Location 0 + Decorate 52(input.m_position) BuiltIn Position + Decorate 57(input.m_color) Location 0 + Decorate 76(id) BuiltIn InvocationId + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 +8(VertexShaderOutput): TypeStruct 7(fvec4) 7(fvec4) + 9: TypeInt 32 0 + 10: 9(int) Constant 3 + 11: TypeArray 8(VertexShaderOutput) 10 + 12: TypePointer Function 11 + 13: TypePointer Function 8(VertexShaderOutput) + 14: TypePointer Function 9(int) + 15: TypeFunction 2 12(ptr) 13(ptr) 14(ptr) + 21: TypeInt 32 1 + 22: TypePointer Function 21(int) + 24: 21(int) Constant 0 + 31: 21(int) Constant 3 + 32: TypeBool + 38: TypePointer Output 7(fvec4) +39(output.m_position): 38(ptr) Variable Output + 40: TypePointer Function 7(fvec4) +43(output.m_color): 38(ptr) Variable Output + 44: 21(int) Constant 1 + 50: TypeArray 7(fvec4) 10 + 51: TypePointer Input 50 +52(input.m_position): 51(ptr) Variable Input + 53: TypePointer Input 7(fvec4) +57(input.m_color): 51(ptr) Variable Input + 67: 21(int) Constant 2 + 75: TypePointer Input 9(int) + 76(id): 75(ptr) Variable Input +4(GeometryShader): 2 Function None 3 + 5: Label + 49(input): 12(ptr) Variable Function + 74(id): 14(ptr) Variable Function + 78(output): 13(ptr) Variable Function + 79(param): 12(ptr) Variable Function + 81(param): 13(ptr) Variable Function + 82(param): 14(ptr) Variable Function + 54: 53(ptr) AccessChain 52(input.m_position) 24 + 55: 7(fvec4) Load 54 + 56: 40(ptr) AccessChain 49(input) 24 24 + Store 56 55 + 58: 53(ptr) AccessChain 57(input.m_color) 24 + 59: 7(fvec4) Load 58 + 60: 40(ptr) AccessChain 49(input) 24 44 + Store 60 59 + 61: 53(ptr) AccessChain 52(input.m_position) 44 + 62: 7(fvec4) Load 61 + 63: 40(ptr) AccessChain 49(input) 44 24 + Store 63 62 + 64: 53(ptr) AccessChain 57(input.m_color) 44 + 65: 7(fvec4) Load 64 + 66: 40(ptr) AccessChain 49(input) 44 44 + Store 66 65 + 68: 53(ptr) AccessChain 52(input.m_position) 67 + 69: 7(fvec4) Load 68 + 70: 40(ptr) AccessChain 49(input) 67 24 + Store 70 69 + 71: 53(ptr) AccessChain 57(input.m_color) 67 + 72: 7(fvec4) Load 71 + 73: 40(ptr) AccessChain 49(input) 67 44 + Store 73 72 + 77: 9(int) Load 76(id) + Store 74(id) 77 + 80: 11 Load 49(input) + Store 79(param) 80 + 83: 9(int) Load 74(id) + Store 82(param) 83 + 84: 2 FunctionCall 19(@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;) 79(param) 81(param) 82(param) + 85:8(VertexShaderOutput) Load 81(param) + Store 78(output) 85 + Return + FunctionEnd +19(@GeometryShader(struct-VertexShaderOutput-vf4-vf41[3];struct-VertexShaderOutput-vf4-vf41;u1;): 2 Function None 15 + 16(input): 12(ptr) FunctionParameter + 17(output): 13(ptr) FunctionParameter + 18(id): 14(ptr) FunctionParameter + 20: Label + 23(i): 22(ptr) Variable Function + 34(flattenTemp): 13(ptr) Variable Function + Store 23(i) 24 + Branch 25 + 25: Label + LoopMerge 27 28 DontUnroll + Branch 29 + 29: Label + 30: 21(int) Load 23(i) + 33: 32(bool) SLessThan 30 31 + BranchConditional 33 26 27 + 26: Label + 35: 21(int) Load 23(i) + 36: 13(ptr) AccessChain 16(input) 35 + 37:8(VertexShaderOutput) Load 36 + Store 34(flattenTemp) 37 + 41: 40(ptr) AccessChain 34(flattenTemp) 24 + 42: 7(fvec4) Load 41 + Store 39(output.m_position) 42 + 45: 40(ptr) AccessChain 34(flattenTemp) 44 + 46: 7(fvec4) Load 45 + Store 43(output.m_color) 46 + EmitVertex + Branch 28 + 28: Label + 47: 21(int) Load 23(i) + 48: 21(int) IAdd 47 44 + Store 23(i) 48 + Branch 25 + 27: Label + EndPrimitive + Return + FunctionEnd From ebf45697be1a861ca1b7501c5f6f7a883ff71b7e Mon Sep 17 00:00:00 2001 From: stusmith <19190608+stu-s@users.noreply.github.com> Date: Fri, 13 May 2022 17:23:29 +0100 Subject: [PATCH 340/365] Add support for VK_EXT_fragment_shader_barycentric --- SPIRV/GLSL.ext.KHR.h | 3 +- SPIRV/GlslangToSpv.cpp | 15 + SPIRV/doc.cpp | 9 +- .../spv.fragmentShaderBarycentric.frag.out | 6 +- .../spv.fragmentShaderBarycentric2.frag.out | 6 +- .../spv.fragmentShaderBarycentric3.frag.out | 69 + .../spv.fragmentShaderBarycentric4.frag.out | 65 + Test/spv.fragmentShaderBarycentric3.frag | 15 + Test/spv.fragmentShaderBarycentric4.frag | 15 + glslang/Include/BaseTypes.h | 8 +- glslang/Include/Types.h | 12 +- glslang/MachineIndependent/Initialize.cpp | 10 +- glslang/MachineIndependent/ParseHelper.cpp | 8 +- glslang/MachineIndependent/Scan.cpp | 7 + glslang/MachineIndependent/Versions.cpp | 4 + glslang/MachineIndependent/Versions.h | 1 + glslang/MachineIndependent/glslang.m4 | 10 +- glslang/MachineIndependent/glslang.y | 10 +- glslang/MachineIndependent/glslang_tab.cpp | 7087 +++++++++-------- glslang/MachineIndependent/glslang_tab.cpp.h | 13 +- glslang/MachineIndependent/linkValidate.cpp | 2 +- gtests/Spv.FromFile.cpp | 4 +- 22 files changed, 3814 insertions(+), 3565 deletions(-) create mode 100644 Test/baseResults/spv.fragmentShaderBarycentric3.frag.out create mode 100644 Test/baseResults/spv.fragmentShaderBarycentric4.frag.out create mode 100644 Test/spv.fragmentShaderBarycentric3.frag create mode 100644 Test/spv.fragmentShaderBarycentric4.frag diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index 5eb3e94482..5c89480e3a 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -29,7 +29,7 @@ #define GLSLextKHR_H static const int GLSLextKHRVersion = 100; -static const int GLSLextKHRRevision = 2; +static const int GLSLextKHRRevision = 3; static const char* const E_SPV_KHR_shader_ballot = "SPV_KHR_shader_ballot"; static const char* const E_SPV_KHR_subgroup_vote = "SPV_KHR_subgroup_vote"; @@ -52,5 +52,6 @@ static const char* const E_SPV_KHR_fragment_shading_rate = "SPV_KHR_fragm static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_terminate_invocation"; static const char* const E_SPV_KHR_workgroup_memory_explicit_layout = "SPV_KHR_workgroup_memory_explicit_layout"; static const char* const E_SPV_KHR_subgroup_uniform_control_flow = "SPV_KHR_subgroup_uniform_control_flow"; +static const char* const E_SPV_KHR_fragment_shader_barycentric = "SPV_KHR_fragment_shader_barycentric"; #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 01f5dbced5..b5d194ac7c 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1050,6 +1050,15 @@ spv::BuiltIn TGlslangToSpvTraverser::TranslateBuiltInDecoration(glslang::TBuiltI builder.addCapability(spv::CapabilityFragmentBarycentricNV); return spv::BuiltInBaryCoordNoPerspNV; + case glslang::EbvBaryCoordEXT: + builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); + builder.addCapability(spv::CapabilityFragmentBarycentricKHR); + return spv::BuiltInBaryCoordKHR; + case glslang::EbvBaryCoordNoPerspEXT: + builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); + builder.addCapability(spv::CapabilityFragmentBarycentricKHR); + return spv::BuiltInBaryCoordNoPerspKHR; + // mesh shaders case glslang::EbvTaskCountNV: return spv::BuiltInTaskCountNV; @@ -8866,6 +8875,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol builder.addExtension(spv::E_SPV_NV_fragment_shader_barycentric); } + if (symbol->getQualifier().pervertexEXT) { + builder.addDecoration(id, spv::DecorationPerVertexKHR); + builder.addCapability(spv::CapabilityFragmentBarycentricKHR); + builder.addExtension(spv::E_SPV_KHR_fragment_shader_barycentric); + } + if (glslangIntermediate->getHlslFunctionality1() && symbol->getType().getQualifier().semanticName != nullptr) { builder.addExtension("SPV_GOOGLE_hlsl_functionality1"); builder.addDecoration(id, (spv::Decoration)spv::DecorationHlslSemanticGOOGLE, diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 6b85ccd2d5..1ba92a8798 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -305,7 +305,8 @@ const char* DecorationString(int decoration) case DecorationPerPrimitiveNV: return "PerPrimitiveNV"; case DecorationPerViewNV: return "PerViewNV"; case DecorationPerTaskNV: return "PerTaskNV"; - case DecorationPerVertexNV: return "PerVertexNV"; + + case DecorationPerVertexKHR: return "PerVertexKHR"; case DecorationNonUniformEXT: return "DecorationNonUniformEXT"; case DecorationHlslCounterBufferGOOGLE: return "DecorationHlslCounterBufferGOOGLE"; @@ -407,8 +408,8 @@ const char* BuiltInString(int builtIn) case BuiltInViewportMaskPerViewNV: return "ViewportMaskPerViewNV"; // case BuiltInFragmentSizeNV: return "FragmentSizeNV"; // superseded by BuiltInFragSizeEXT // case BuiltInInvocationsPerPixelNV: return "InvocationsPerPixelNV"; // superseded by BuiltInFragInvocationCountEXT - case BuiltInBaryCoordNV: return "BaryCoordNV"; - case BuiltInBaryCoordNoPerspNV: return "BaryCoordNoPerspNV"; + case BuiltInBaryCoordKHR: return "BaryCoordKHR"; + case BuiltInBaryCoordNoPerspKHR: return "BaryCoordNoPerspKHR"; case BuiltInFragSizeEXT: return "FragSizeEXT"; case BuiltInFragInvocationCountEXT: return "FragInvocationCountEXT"; @@ -932,7 +933,7 @@ const char* CapabilityString(int info) case CapabilityRayTraversalPrimitiveCullingKHR: return "RayTraversalPrimitiveCullingKHR"; case CapabilityComputeDerivativeGroupQuadsNV: return "ComputeDerivativeGroupQuadsNV"; case CapabilityComputeDerivativeGroupLinearNV: return "ComputeDerivativeGroupLinearNV"; - case CapabilityFragmentBarycentricNV: return "FragmentBarycentricNV"; + case CapabilityFragmentBarycentricKHR: return "FragmentBarycentricKHR"; case CapabilityMeshShadingNV: return "MeshShadingNV"; case CapabilityImageFootprintNV: return "ImageFootprintNV"; // case CapabilityShadingRateNV: return "ShadingRateNV"; // superseded by FragmentDensityEXT diff --git a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out index 2ea8f35f87..ef800bdd01 100644 --- a/Test/baseResults/spv.fragmentShaderBarycentric.frag.out +++ b/Test/baseResults/spv.fragmentShaderBarycentric.frag.out @@ -4,7 +4,7 @@ spv.fragmentShaderBarycentric.frag // Id's are bound by 43 Capability Shader - Capability FragmentBarycentricNV + Capability FragmentBarycentricKHR Extension "SPV_NV_fragment_shader_barycentric" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -19,10 +19,10 @@ spv.fragmentShaderBarycentric.frag MemberName 17(vertices) 0 "attrib" Name 21 "v" Decorate 8(value) Location 1 - Decorate 11(gl_BaryCoordNV) BuiltIn BaryCoordNV + Decorate 11(gl_BaryCoordNV) BuiltIn BaryCoordKHR Decorate 17(vertices) Block Decorate 21(v) Location 0 - Decorate 21(v) PerVertexNV + Decorate 21(v) PerVertexKHR 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out index 74a349834e..c09767631f 100644 --- a/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out +++ b/Test/baseResults/spv.fragmentShaderBarycentric2.frag.out @@ -4,7 +4,7 @@ spv.fragmentShaderBarycentric2.frag // Id's are bound by 42 Capability Shader - Capability FragmentBarycentricNV + Capability FragmentBarycentricKHR Extension "SPV_NV_fragment_shader_barycentric" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 @@ -17,9 +17,9 @@ spv.fragmentShaderBarycentric2.frag Name 11 "gl_BaryCoordNoPerspNV" Name 20 "vertexIDs" Decorate 8(value) Location 1 - Decorate 11(gl_BaryCoordNoPerspNV) BuiltIn BaryCoordNoPerspNV + Decorate 11(gl_BaryCoordNoPerspNV) BuiltIn BaryCoordNoPerspKHR Decorate 20(vertexIDs) Location 0 - Decorate 20(vertexIDs) PerVertexNV + Decorate 20(vertexIDs) PerVertexKHR 2: TypeVoid 3: TypeFunction 2 6: TypeFloat 32 diff --git a/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out new file mode 100644 index 0000000000..7fe21b34a0 --- /dev/null +++ b/Test/baseResults/spv.fragmentShaderBarycentric3.frag.out @@ -0,0 +1,69 @@ +spv.fragmentShaderBarycentric3.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 43 + + Capability Shader + Capability FragmentBarycentricKHR + Extension "SPV_KHR_fragment_shader_barycentric" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 11 21 + ExecutionMode 4 OriginUpperLeft + Source GLSL 450 + SourceExtension "GL_EXT_fragment_shader_barycentric" + Name 4 "main" + Name 8 "value" + Name 11 "gl_BaryCoordEXT" + Name 17 "vertices" + MemberName 17(vertices) 0 "attrib" + Name 21 "v" + Decorate 8(value) Location 1 + Decorate 11(gl_BaryCoordEXT) BuiltIn BaryCoordKHR + Decorate 17(vertices) Block + Decorate 21(v) Location 0 + Decorate 21(v) PerVertexKHR + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(value): 7(ptr) Variable Output + 9: TypeVector 6(float) 3 + 10: TypePointer Input 9(fvec3) +11(gl_BaryCoordEXT): 10(ptr) Variable Input + 12: TypeInt 32 0 + 13: 12(int) Constant 0 + 14: TypePointer Input 6(float) + 17(vertices): TypeStruct 6(float) + 18: 12(int) Constant 3 + 19: TypeArray 17(vertices) 18 + 20: TypePointer Input 19 + 21(v): 20(ptr) Variable Input + 22: TypeInt 32 1 + 23: 22(int) Constant 0 + 27: 12(int) Constant 1 + 30: 22(int) Constant 1 + 35: 12(int) Constant 2 + 38: 22(int) Constant 2 + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_BaryCoordEXT) 13 + 16: 6(float) Load 15 + 24: 14(ptr) AccessChain 21(v) 23 23 + 25: 6(float) Load 24 + 26: 6(float) FMul 16 25 + 28: 14(ptr) AccessChain 11(gl_BaryCoordEXT) 27 + 29: 6(float) Load 28 + 31: 14(ptr) AccessChain 21(v) 30 23 + 32: 6(float) Load 31 + 33: 6(float) FMul 29 32 + 34: 6(float) FAdd 26 33 + 36: 14(ptr) AccessChain 11(gl_BaryCoordEXT) 35 + 37: 6(float) Load 36 + 39: 14(ptr) AccessChain 21(v) 38 23 + 40: 6(float) Load 39 + 41: 6(float) FMul 37 40 + 42: 6(float) FAdd 34 41 + Store 8(value) 42 + Return + FunctionEnd diff --git a/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out b/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out new file mode 100644 index 0000000000..aaac6a4427 --- /dev/null +++ b/Test/baseResults/spv.fragmentShaderBarycentric4.frag.out @@ -0,0 +1,65 @@ +spv.fragmentShaderBarycentric4.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 42 + + Capability Shader + Capability FragmentBarycentricKHR + Extension "SPV_KHR_fragment_shader_barycentric" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 11 20 + ExecutionMode 4 OriginUpperLeft + Source ESSL 320 + SourceExtension "GL_EXT_fragment_shader_barycentric" + Name 4 "main" + Name 8 "value" + Name 11 "gl_BaryCoordNoPerspEXT" + Name 20 "vertexIDs" + Decorate 8(value) Location 1 + Decorate 11(gl_BaryCoordNoPerspEXT) BuiltIn BaryCoordNoPerspKHR + Decorate 20(vertexIDs) Location 0 + Decorate 20(vertexIDs) PerVertexKHR + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(value): 7(ptr) Variable Output + 9: TypeVector 6(float) 3 + 10: TypePointer Input 9(fvec3) +11(gl_BaryCoordNoPerspEXT): 10(ptr) Variable Input + 12: TypeInt 32 0 + 13: 12(int) Constant 0 + 14: TypePointer Input 6(float) + 17: 12(int) Constant 3 + 18: TypeArray 6(float) 17 + 19: TypePointer Input 18 + 20(vertexIDs): 19(ptr) Variable Input + 21: TypeInt 32 1 + 22: 21(int) Constant 0 + 26: 12(int) Constant 1 + 29: 21(int) Constant 1 + 34: 12(int) Constant 2 + 37: 21(int) Constant 2 + 4(main): 2 Function None 3 + 5: Label + 15: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 13 + 16: 6(float) Load 15 + 23: 14(ptr) AccessChain 20(vertexIDs) 22 + 24: 6(float) Load 23 + 25: 6(float) FMul 16 24 + 27: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 26 + 28: 6(float) Load 27 + 30: 14(ptr) AccessChain 20(vertexIDs) 29 + 31: 6(float) Load 30 + 32: 6(float) FMul 28 31 + 33: 6(float) FAdd 25 32 + 35: 14(ptr) AccessChain 11(gl_BaryCoordNoPerspEXT) 34 + 36: 6(float) Load 35 + 38: 14(ptr) AccessChain 20(vertexIDs) 37 + 39: 6(float) Load 38 + 40: 6(float) FMul 36 39 + 41: 6(float) FAdd 33 40 + Store 8(value) 41 + Return + FunctionEnd diff --git a/Test/spv.fragmentShaderBarycentric3.frag b/Test/spv.fragmentShaderBarycentric3.frag new file mode 100644 index 0000000000..93e977eb79 --- /dev/null +++ b/Test/spv.fragmentShaderBarycentric3.frag @@ -0,0 +1,15 @@ +#version 450 +#extension GL_EXT_fragment_shader_barycentric : require + +layout(location = 0) pervertexEXT in vertices { + float attrib; + } v[]; + +layout(location = 1) out float value; + +void main () { + value = (gl_BaryCoordEXT.x * v[0].attrib + + gl_BaryCoordEXT.y * v[1].attrib + + gl_BaryCoordEXT.z * v[2].attrib); + +} diff --git a/Test/spv.fragmentShaderBarycentric4.frag b/Test/spv.fragmentShaderBarycentric4.frag new file mode 100644 index 0000000000..5b4510ecda --- /dev/null +++ b/Test/spv.fragmentShaderBarycentric4.frag @@ -0,0 +1,15 @@ +#version 320 es +#extension GL_EXT_fragment_shader_barycentric : require + +precision highp float; + +layout(location = 0) pervertexEXT in float vertexIDs[3]; + +layout(location = 1) out float value; + +void main () { + value = (gl_BaryCoordNoPerspEXT.x * vertexIDs[0] + + gl_BaryCoordNoPerspEXT.y * vertexIDs[1] + + gl_BaryCoordNoPerspEXT.z * vertexIDs[2]); + +} diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index 09177fbca2..3eec5973b4 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -275,6 +275,8 @@ enum TBuiltInVariable { // barycentrics EbvBaryCoordNV, EbvBaryCoordNoPerspNV, + EbvBaryCoordEXT, + EbvBaryCoordNoPerspEXT, // mesh shaders EbvTaskCountNV, EbvPrimitiveCountNV, @@ -479,8 +481,10 @@ __inline const char* GetBuiltInVariableString(TBuiltInVariable v) case EbvWorldToObject: return "WorldToObjectNV"; case EbvCurrentRayTimeNV: return "CurrentRayTimeNV"; - case EbvBaryCoordNV: return "BaryCoordNV"; - case EbvBaryCoordNoPerspNV: return "BaryCoordNoPerspNV"; + case EbvBaryCoordEXT: + case EbvBaryCoordNV: return "BaryCoordKHR"; + case EbvBaryCoordNoPerspEXT: + case EbvBaryCoordNoPerspNV: return "BaryCoordNoPerspKHR"; case EbvTaskCountNV: return "TaskCountNV"; case EbvPrimitiveCountNV: return "PrimitiveCountNV"; diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 91fcd4eb28..682d124cc9 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -552,6 +552,7 @@ class TQualifier { perViewNV = false; perTaskNV = false; #endif + pervertexEXT = false; } void clearMemory() @@ -604,7 +605,8 @@ class TQualifier { bool isNoContraction() const { return false; } void setNoContraction() { } bool isPervertexNV() const { return false; } - void setNullInit() { } + bool isPervertexEXT() const { return pervertexEXT; } + void setNullInit() {} bool isNullInit() const { return false; } void setSpirvByReference() { } bool isSpirvByReference() { return false; } @@ -615,6 +617,7 @@ class TQualifier { bool nopersp : 1; bool explicitInterp : 1; bool pervertexNV : 1; + bool pervertexEXT : 1; bool perPrimitiveNV : 1; bool perViewNV : 1; bool perTaskNV : 1; @@ -663,12 +666,13 @@ class TQualifier { } bool isAuxiliary() const { - return centroid || patch || sample || pervertexNV; + return centroid || patch || sample || pervertexNV || pervertexEXT; } bool isPatch() const { return patch; } bool isNoContraction() const { return noContraction; } void setNoContraction() { noContraction = true; } bool isPervertexNV() const { return pervertexNV; } + bool isPervertexEXT() const { return pervertexEXT; } void setNullInit() { nullInit = true; } bool isNullInit() const { return nullInit; } void setSpirvByReference() { spirvByReference = true; } @@ -856,7 +860,7 @@ class TQualifier { case EShLangTessEvaluation: return ! patch && isPipeInput(); case EShLangFragment: - return pervertexNV && isPipeInput(); + return (pervertexNV || pervertexEXT) && isPipeInput(); case EShLangMeshNV: return ! perTaskNV && isPipeOutput(); @@ -2266,6 +2270,8 @@ class TType { appendStr(" __explicitInterpAMD"); if (qualifier.pervertexNV) appendStr(" pervertexNV"); + if (qualifier.pervertexEXT) + appendStr(" pervertexEXT"); if (qualifier.perPrimitiveNV) appendStr(" perprimitiveNV"); if (qualifier.perViewNV) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index 0406da67b0..b18b257525 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -5571,6 +5571,8 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV "flat in int gl_InvocationsPerPixelNV;" "in vec3 gl_BaryCoordNV;" // GL_NV_fragment_shader_barycentric "in vec3 gl_BaryCoordNoPerspNV;" + "in vec3 gl_BaryCoordEXT;" // GL_EXT_fragment_shader_barycentric + "in vec3 gl_BaryCoordNoPerspEXT;" ); if (version >= 450) @@ -5635,7 +5637,9 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV stageBuiltins[EShLangFragment].append( "in vec3 gl_BaryCoordNV;" "in vec3 gl_BaryCoordNoPerspNV;" - ); + "in vec3 gl_BaryCoordEXT;" + "in vec3 gl_BaryCoordNoPerspEXT;" + ); if (version >= 310) stageBuiltins[EShLangFragment].append( "flat in highp int gl_ShadingRateEXT;" // GL_EXT_fragment_shading_rate @@ -8321,6 +8325,10 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion symbolTable.setVariableExtensions("gl_BaryCoordNoPerspNV", 1, &E_GL_NV_fragment_shader_barycentric); BuiltInVariable("gl_BaryCoordNV", EbvBaryCoordNV, symbolTable); BuiltInVariable("gl_BaryCoordNoPerspNV", EbvBaryCoordNoPerspNV, symbolTable); + symbolTable.setVariableExtensions("gl_BaryCoordEXT", 1, &E_GL_EXT_fragment_shader_barycentric); + symbolTable.setVariableExtensions("gl_BaryCoordNoPerspEXT", 1, &E_GL_EXT_fragment_shader_barycentric); + BuiltInVariable("gl_BaryCoordEXT", EbvBaryCoordEXT, symbolTable); + BuiltInVariable("gl_BaryCoordNoPerspEXT", EbvBaryCoordNoPerspEXT, symbolTable); } if ((profile != EEsProfile && version >= 450) || diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 613a66f400..45a72d9333 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -716,7 +716,7 @@ bool TParseContext::isIoResizeArray(const TType& type) const (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut && ! type.getQualifier().patch) || (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && - type.getQualifier().pervertexNV) || + (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) || (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && !type.getQualifier().perTaskNV)); } @@ -856,7 +856,7 @@ void TParseContext::checkIoArrayConsistency(const TSourceLoc& loc, int requiredS error(loc, "inconsistent output number of vertices for array size of", feature, name.c_str()); else if (language == EShLangFragment) { if (type.getOuterArraySize() > requiredSize) - error(loc, " cannot be greater than 3 for pervertexNV", feature, name.c_str()); + error(loc, " cannot be greater than 3 for pervertexEXT", feature, name.c_str()); } else if (language == EShLangMeshNV) error(loc, "inconsistent output array size of", feature, name.c_str()); @@ -3806,7 +3806,7 @@ void TParseContext::globalQualifierTypeCheck(const TSourceLoc& loc, const TQuali if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble) profileRequires(loc, EEsProfile, 300, nullptr, "shader input/output"); - if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV()) { + if (!qualifier.flat && !qualifier.isExplicitInterpolation() && !qualifier.isPervertexNV() && !qualifier.isPervertexEXT()) { if (isTypeInt(publicType.basicType) || publicType.basicType == EbtDouble || (publicType.userDef && ( publicType.userDef->containsBasicType(EbtInt) @@ -6069,6 +6069,8 @@ void TParseContext::mergeObjectLayoutQualifiers(TQualifier& dst, const TQualifie dst.layoutShaderRecord = true; if (src.pervertexNV) dst.pervertexNV = true; + if (src.pervertexEXT) + dst.pervertexEXT = true; #endif } } diff --git a/glslang/MachineIndependent/Scan.cpp b/glslang/MachineIndependent/Scan.cpp index c387aede0e..f53677f929 100644 --- a/glslang/MachineIndependent/Scan.cpp +++ b/glslang/MachineIndependent/Scan.cpp @@ -739,6 +739,7 @@ void TScanContext::fillInKeywordMap() (*KeywordMap)["f16subpassInputMS"] = F16SUBPASSINPUTMS; (*KeywordMap)["__explicitInterpAMD"] = EXPLICITINTERPAMD; (*KeywordMap)["pervertexNV"] = PERVERTEXNV; + (*KeywordMap)["pervertexEXT"] = PERVERTEXEXT; (*KeywordMap)["precise"] = PRECISE; (*KeywordMap)["rayPayloadNV"] = PAYLOADNV; @@ -1719,6 +1720,12 @@ int TScanContext::tokenizeIdentifier() return keyword; return identifierOrType(); + case PERVERTEXEXT: + if ((!parseContext.isEsProfile() && parseContext.version >= 450) || + parseContext.extensionTurnedOn(E_GL_EXT_fragment_shader_barycentric)) + return keyword; + return identifierOrType(); + case PRECISE: if ((parseContext.isEsProfile() && (parseContext.version >= 320 || parseContext.extensionsTurnedOn(Num_AEP_gpu_shader5, AEP_gpu_shader5))) || diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index f6bf7c3a94..52c1e1ccd1 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -259,6 +259,8 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_EXT_shader_8bit_storage] = EBhDisable; extensionBehavior[E_GL_EXT_subgroup_uniform_control_flow] = EBhDisable; + extensionBehavior[E_GL_EXT_fragment_shader_barycentric] = EBhDisable; + // #line and #include extensionBehavior[E_GL_GOOGLE_cpp_style_line_directive] = EBhDisable; extensionBehavior[E_GL_GOOGLE_include_directive] = EBhDisable; @@ -554,6 +556,8 @@ void TParseVersions::getPreamble(std::string& preamble) "#define GL_EXT_shader_atomic_float 1\n" "#define GL_EXT_shader_atomic_float2 1\n" + + "#define GL_EXT_fragment_shader_barycentric 1\n" ; if (version >= 150) { diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index 3f7299d3cf..c411f5b62e 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -210,6 +210,7 @@ const char* const E_GL_EXT_null_initializer = "GL_EXT_null_initi const char* const E_GL_EXT_shared_memory_block = "GL_EXT_shared_memory_block"; const char* const E_GL_EXT_subgroup_uniform_control_flow = "GL_EXT_subgroup_uniform_control_flow"; const char* const E_GL_EXT_spirv_intrinsics = "GL_EXT_spirv_intrinsics"; +const char* const E_GL_EXT_fragment_shader_barycentric = "GL_EXT_fragment_shader_barycentric"; // Arrays of extensions for the above viewportEXTs duplications diff --git a/glslang/MachineIndependent/glslang.m4 b/glslang/MachineIndependent/glslang.m4 index 624add5a25..3ab7a3c0a0 100644 --- a/glslang/MachineIndependent/glslang.m4 +++ b/glslang/MachineIndependent/glslang.m4 @@ -315,7 +315,7 @@ GLSLANG_WEB_EXCLUDE_ON %token PATCH SAMPLE NONUNIFORM %token COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT %token SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT -%token NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV +%token NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV %token PRECISE GLSLANG_WEB_EXCLUDE_OFF @@ -1290,6 +1290,14 @@ GLSLANG_WEB_EXCLUDE_ON $$.init($1.loc); $$.qualifier.pervertexNV = true; } + | PERVERTEXEXT { + parseContext.globalCheck($1.loc, "pervertexEXT"); + parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + $$.init($1.loc); + $$.qualifier.pervertexEXT = true; + } | PERPRIMITIVENV { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck($1.loc, "perprimitiveNV"); diff --git a/glslang/MachineIndependent/glslang.y b/glslang/MachineIndependent/glslang.y index 93c989953e..d77c831585 100644 --- a/glslang/MachineIndependent/glslang.y +++ b/glslang/MachineIndependent/glslang.y @@ -315,7 +315,7 @@ extern int yylex(YYSTYPE*, TParseContext&); %token PATCH SAMPLE NONUNIFORM %token COHERENT VOLATILE RESTRICT READONLY WRITEONLY DEVICECOHERENT QUEUEFAMILYCOHERENT WORKGROUPCOHERENT %token SUBGROUPCOHERENT NONPRIVATE SHADERCALLCOHERENT -%token NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV +%token NOPERSPECTIVE EXPLICITINTERPAMD PERVERTEXEXT PERVERTEXNV PERPRIMITIVENV PERVIEWNV PERTASKNV %token PRECISE @@ -1290,6 +1290,14 @@ interpolation_qualifier $$.init($1.loc); $$.qualifier.pervertexNV = true; } + | PERVERTEXEXT { + parseContext.globalCheck($1.loc, "pervertexEXT"); + parseContext.profileRequires($1.loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires($1.loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires($1.loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + $$.init($1.loc); + $$.qualifier.pervertexEXT = true; + } | PERPRIMITIVENV { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck($1.loc, "perprimitiveNV"); diff --git a/glslang/MachineIndependent/glslang_tab.cpp b/glslang/MachineIndependent/glslang_tab.cpp index 0b216b622f..4e4768eaa5 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp +++ b/glslang/MachineIndependent/glslang_tab.cpp @@ -571,142 +571,143 @@ enum yysymbol_kind_t YYSYMBOL_SHADERCALLCOHERENT = 447, /* SHADERCALLCOHERENT */ YYSYMBOL_NOPERSPECTIVE = 448, /* NOPERSPECTIVE */ YYSYMBOL_EXPLICITINTERPAMD = 449, /* EXPLICITINTERPAMD */ - YYSYMBOL_PERVERTEXNV = 450, /* PERVERTEXNV */ - YYSYMBOL_PERPRIMITIVENV = 451, /* PERPRIMITIVENV */ - YYSYMBOL_PERVIEWNV = 452, /* PERVIEWNV */ - YYSYMBOL_PERTASKNV = 453, /* PERTASKNV */ - YYSYMBOL_PRECISE = 454, /* PRECISE */ - YYSYMBOL_YYACCEPT = 455, /* $accept */ - YYSYMBOL_variable_identifier = 456, /* variable_identifier */ - YYSYMBOL_primary_expression = 457, /* primary_expression */ - YYSYMBOL_postfix_expression = 458, /* postfix_expression */ - YYSYMBOL_integer_expression = 459, /* integer_expression */ - YYSYMBOL_function_call = 460, /* function_call */ - YYSYMBOL_function_call_or_method = 461, /* function_call_or_method */ - YYSYMBOL_function_call_generic = 462, /* function_call_generic */ - YYSYMBOL_function_call_header_no_parameters = 463, /* function_call_header_no_parameters */ - YYSYMBOL_function_call_header_with_parameters = 464, /* function_call_header_with_parameters */ - YYSYMBOL_function_call_header = 465, /* function_call_header */ - YYSYMBOL_function_identifier = 466, /* function_identifier */ - YYSYMBOL_unary_expression = 467, /* unary_expression */ - YYSYMBOL_unary_operator = 468, /* unary_operator */ - YYSYMBOL_multiplicative_expression = 469, /* multiplicative_expression */ - YYSYMBOL_additive_expression = 470, /* additive_expression */ - YYSYMBOL_shift_expression = 471, /* shift_expression */ - YYSYMBOL_relational_expression = 472, /* relational_expression */ - YYSYMBOL_equality_expression = 473, /* equality_expression */ - YYSYMBOL_and_expression = 474, /* and_expression */ - YYSYMBOL_exclusive_or_expression = 475, /* exclusive_or_expression */ - YYSYMBOL_inclusive_or_expression = 476, /* inclusive_or_expression */ - YYSYMBOL_logical_and_expression = 477, /* logical_and_expression */ - YYSYMBOL_logical_xor_expression = 478, /* logical_xor_expression */ - YYSYMBOL_logical_or_expression = 479, /* logical_or_expression */ - YYSYMBOL_conditional_expression = 480, /* conditional_expression */ - YYSYMBOL_481_1 = 481, /* $@1 */ - YYSYMBOL_assignment_expression = 482, /* assignment_expression */ - YYSYMBOL_assignment_operator = 483, /* assignment_operator */ - YYSYMBOL_expression = 484, /* expression */ - YYSYMBOL_constant_expression = 485, /* constant_expression */ - YYSYMBOL_declaration = 486, /* declaration */ - YYSYMBOL_block_structure = 487, /* block_structure */ - YYSYMBOL_488_2 = 488, /* $@2 */ - YYSYMBOL_identifier_list = 489, /* identifier_list */ - YYSYMBOL_function_prototype = 490, /* function_prototype */ - YYSYMBOL_function_declarator = 491, /* function_declarator */ - YYSYMBOL_function_header_with_parameters = 492, /* function_header_with_parameters */ - YYSYMBOL_function_header = 493, /* function_header */ - YYSYMBOL_parameter_declarator = 494, /* parameter_declarator */ - YYSYMBOL_parameter_declaration = 495, /* parameter_declaration */ - YYSYMBOL_parameter_type_specifier = 496, /* parameter_type_specifier */ - YYSYMBOL_init_declarator_list = 497, /* init_declarator_list */ - YYSYMBOL_single_declaration = 498, /* single_declaration */ - YYSYMBOL_fully_specified_type = 499, /* fully_specified_type */ - YYSYMBOL_invariant_qualifier = 500, /* invariant_qualifier */ - YYSYMBOL_interpolation_qualifier = 501, /* interpolation_qualifier */ - YYSYMBOL_layout_qualifier = 502, /* layout_qualifier */ - YYSYMBOL_layout_qualifier_id_list = 503, /* layout_qualifier_id_list */ - YYSYMBOL_layout_qualifier_id = 504, /* layout_qualifier_id */ - YYSYMBOL_precise_qualifier = 505, /* precise_qualifier */ - YYSYMBOL_type_qualifier = 506, /* type_qualifier */ - YYSYMBOL_single_type_qualifier = 507, /* single_type_qualifier */ - YYSYMBOL_storage_qualifier = 508, /* storage_qualifier */ - YYSYMBOL_non_uniform_qualifier = 509, /* non_uniform_qualifier */ - YYSYMBOL_type_name_list = 510, /* type_name_list */ - YYSYMBOL_type_specifier = 511, /* type_specifier */ - YYSYMBOL_array_specifier = 512, /* array_specifier */ - YYSYMBOL_type_parameter_specifier_opt = 513, /* type_parameter_specifier_opt */ - YYSYMBOL_type_parameter_specifier = 514, /* type_parameter_specifier */ - YYSYMBOL_type_parameter_specifier_list = 515, /* type_parameter_specifier_list */ - YYSYMBOL_type_specifier_nonarray = 516, /* type_specifier_nonarray */ - YYSYMBOL_precision_qualifier = 517, /* precision_qualifier */ - YYSYMBOL_struct_specifier = 518, /* struct_specifier */ - YYSYMBOL_519_3 = 519, /* $@3 */ - YYSYMBOL_520_4 = 520, /* $@4 */ - YYSYMBOL_struct_declaration_list = 521, /* struct_declaration_list */ - YYSYMBOL_struct_declaration = 522, /* struct_declaration */ - YYSYMBOL_struct_declarator_list = 523, /* struct_declarator_list */ - YYSYMBOL_struct_declarator = 524, /* struct_declarator */ - YYSYMBOL_initializer = 525, /* initializer */ - YYSYMBOL_initializer_list = 526, /* initializer_list */ - YYSYMBOL_declaration_statement = 527, /* declaration_statement */ - YYSYMBOL_statement = 528, /* statement */ - YYSYMBOL_simple_statement = 529, /* simple_statement */ - YYSYMBOL_demote_statement = 530, /* demote_statement */ - YYSYMBOL_compound_statement = 531, /* compound_statement */ - YYSYMBOL_532_5 = 532, /* $@5 */ - YYSYMBOL_533_6 = 533, /* $@6 */ - YYSYMBOL_statement_no_new_scope = 534, /* statement_no_new_scope */ - YYSYMBOL_statement_scoped = 535, /* statement_scoped */ - YYSYMBOL_536_7 = 536, /* $@7 */ - YYSYMBOL_537_8 = 537, /* $@8 */ - YYSYMBOL_compound_statement_no_new_scope = 538, /* compound_statement_no_new_scope */ - YYSYMBOL_statement_list = 539, /* statement_list */ - YYSYMBOL_expression_statement = 540, /* expression_statement */ - YYSYMBOL_selection_statement = 541, /* selection_statement */ - YYSYMBOL_selection_statement_nonattributed = 542, /* selection_statement_nonattributed */ - YYSYMBOL_selection_rest_statement = 543, /* selection_rest_statement */ - YYSYMBOL_condition = 544, /* condition */ - YYSYMBOL_switch_statement = 545, /* switch_statement */ - YYSYMBOL_switch_statement_nonattributed = 546, /* switch_statement_nonattributed */ - YYSYMBOL_547_9 = 547, /* $@9 */ - YYSYMBOL_switch_statement_list = 548, /* switch_statement_list */ - YYSYMBOL_case_label = 549, /* case_label */ - YYSYMBOL_iteration_statement = 550, /* iteration_statement */ - YYSYMBOL_iteration_statement_nonattributed = 551, /* iteration_statement_nonattributed */ - YYSYMBOL_552_10 = 552, /* $@10 */ - YYSYMBOL_553_11 = 553, /* $@11 */ - YYSYMBOL_554_12 = 554, /* $@12 */ - YYSYMBOL_for_init_statement = 555, /* for_init_statement */ - YYSYMBOL_conditionopt = 556, /* conditionopt */ - YYSYMBOL_for_rest_statement = 557, /* for_rest_statement */ - YYSYMBOL_jump_statement = 558, /* jump_statement */ - YYSYMBOL_translation_unit = 559, /* translation_unit */ - YYSYMBOL_external_declaration = 560, /* external_declaration */ - YYSYMBOL_function_definition = 561, /* function_definition */ - YYSYMBOL_562_13 = 562, /* $@13 */ - YYSYMBOL_attribute = 563, /* attribute */ - YYSYMBOL_attribute_list = 564, /* attribute_list */ - YYSYMBOL_single_attribute = 565, /* single_attribute */ - YYSYMBOL_spirv_requirements_list = 566, /* spirv_requirements_list */ - YYSYMBOL_spirv_requirements_parameter = 567, /* spirv_requirements_parameter */ - YYSYMBOL_spirv_extension_list = 568, /* spirv_extension_list */ - YYSYMBOL_spirv_capability_list = 569, /* spirv_capability_list */ - YYSYMBOL_spirv_execution_mode_qualifier = 570, /* spirv_execution_mode_qualifier */ - YYSYMBOL_spirv_execution_mode_parameter_list = 571, /* spirv_execution_mode_parameter_list */ - YYSYMBOL_spirv_execution_mode_parameter = 572, /* spirv_execution_mode_parameter */ - YYSYMBOL_spirv_execution_mode_id_parameter_list = 573, /* spirv_execution_mode_id_parameter_list */ - YYSYMBOL_spirv_storage_class_qualifier = 574, /* spirv_storage_class_qualifier */ - YYSYMBOL_spirv_decorate_qualifier = 575, /* spirv_decorate_qualifier */ - YYSYMBOL_spirv_decorate_parameter_list = 576, /* spirv_decorate_parameter_list */ - YYSYMBOL_spirv_decorate_parameter = 577, /* spirv_decorate_parameter */ - YYSYMBOL_spirv_decorate_id_parameter_list = 578, /* spirv_decorate_id_parameter_list */ - YYSYMBOL_spirv_decorate_string_parameter_list = 579, /* spirv_decorate_string_parameter_list */ - YYSYMBOL_spirv_type_specifier = 580, /* spirv_type_specifier */ - YYSYMBOL_spirv_type_parameter_list = 581, /* spirv_type_parameter_list */ - YYSYMBOL_spirv_type_parameter = 582, /* spirv_type_parameter */ - YYSYMBOL_spirv_instruction_qualifier = 583, /* spirv_instruction_qualifier */ - YYSYMBOL_spirv_instruction_qualifier_list = 584, /* spirv_instruction_qualifier_list */ - YYSYMBOL_spirv_instruction_qualifier_id = 585 /* spirv_instruction_qualifier_id */ + YYSYMBOL_PERVERTEXEXT = 450, /* PERVERTEXEXT */ + YYSYMBOL_PERVERTEXNV = 451, /* PERVERTEXNV */ + YYSYMBOL_PERPRIMITIVENV = 452, /* PERPRIMITIVENV */ + YYSYMBOL_PERVIEWNV = 453, /* PERVIEWNV */ + YYSYMBOL_PERTASKNV = 454, /* PERTASKNV */ + YYSYMBOL_PRECISE = 455, /* PRECISE */ + YYSYMBOL_YYACCEPT = 456, /* $accept */ + YYSYMBOL_variable_identifier = 457, /* variable_identifier */ + YYSYMBOL_primary_expression = 458, /* primary_expression */ + YYSYMBOL_postfix_expression = 459, /* postfix_expression */ + YYSYMBOL_integer_expression = 460, /* integer_expression */ + YYSYMBOL_function_call = 461, /* function_call */ + YYSYMBOL_function_call_or_method = 462, /* function_call_or_method */ + YYSYMBOL_function_call_generic = 463, /* function_call_generic */ + YYSYMBOL_function_call_header_no_parameters = 464, /* function_call_header_no_parameters */ + YYSYMBOL_function_call_header_with_parameters = 465, /* function_call_header_with_parameters */ + YYSYMBOL_function_call_header = 466, /* function_call_header */ + YYSYMBOL_function_identifier = 467, /* function_identifier */ + YYSYMBOL_unary_expression = 468, /* unary_expression */ + YYSYMBOL_unary_operator = 469, /* unary_operator */ + YYSYMBOL_multiplicative_expression = 470, /* multiplicative_expression */ + YYSYMBOL_additive_expression = 471, /* additive_expression */ + YYSYMBOL_shift_expression = 472, /* shift_expression */ + YYSYMBOL_relational_expression = 473, /* relational_expression */ + YYSYMBOL_equality_expression = 474, /* equality_expression */ + YYSYMBOL_and_expression = 475, /* and_expression */ + YYSYMBOL_exclusive_or_expression = 476, /* exclusive_or_expression */ + YYSYMBOL_inclusive_or_expression = 477, /* inclusive_or_expression */ + YYSYMBOL_logical_and_expression = 478, /* logical_and_expression */ + YYSYMBOL_logical_xor_expression = 479, /* logical_xor_expression */ + YYSYMBOL_logical_or_expression = 480, /* logical_or_expression */ + YYSYMBOL_conditional_expression = 481, /* conditional_expression */ + YYSYMBOL_482_1 = 482, /* $@1 */ + YYSYMBOL_assignment_expression = 483, /* assignment_expression */ + YYSYMBOL_assignment_operator = 484, /* assignment_operator */ + YYSYMBOL_expression = 485, /* expression */ + YYSYMBOL_constant_expression = 486, /* constant_expression */ + YYSYMBOL_declaration = 487, /* declaration */ + YYSYMBOL_block_structure = 488, /* block_structure */ + YYSYMBOL_489_2 = 489, /* $@2 */ + YYSYMBOL_identifier_list = 490, /* identifier_list */ + YYSYMBOL_function_prototype = 491, /* function_prototype */ + YYSYMBOL_function_declarator = 492, /* function_declarator */ + YYSYMBOL_function_header_with_parameters = 493, /* function_header_with_parameters */ + YYSYMBOL_function_header = 494, /* function_header */ + YYSYMBOL_parameter_declarator = 495, /* parameter_declarator */ + YYSYMBOL_parameter_declaration = 496, /* parameter_declaration */ + YYSYMBOL_parameter_type_specifier = 497, /* parameter_type_specifier */ + YYSYMBOL_init_declarator_list = 498, /* init_declarator_list */ + YYSYMBOL_single_declaration = 499, /* single_declaration */ + YYSYMBOL_fully_specified_type = 500, /* fully_specified_type */ + YYSYMBOL_invariant_qualifier = 501, /* invariant_qualifier */ + YYSYMBOL_interpolation_qualifier = 502, /* interpolation_qualifier */ + YYSYMBOL_layout_qualifier = 503, /* layout_qualifier */ + YYSYMBOL_layout_qualifier_id_list = 504, /* layout_qualifier_id_list */ + YYSYMBOL_layout_qualifier_id = 505, /* layout_qualifier_id */ + YYSYMBOL_precise_qualifier = 506, /* precise_qualifier */ + YYSYMBOL_type_qualifier = 507, /* type_qualifier */ + YYSYMBOL_single_type_qualifier = 508, /* single_type_qualifier */ + YYSYMBOL_storage_qualifier = 509, /* storage_qualifier */ + YYSYMBOL_non_uniform_qualifier = 510, /* non_uniform_qualifier */ + YYSYMBOL_type_name_list = 511, /* type_name_list */ + YYSYMBOL_type_specifier = 512, /* type_specifier */ + YYSYMBOL_array_specifier = 513, /* array_specifier */ + YYSYMBOL_type_parameter_specifier_opt = 514, /* type_parameter_specifier_opt */ + YYSYMBOL_type_parameter_specifier = 515, /* type_parameter_specifier */ + YYSYMBOL_type_parameter_specifier_list = 516, /* type_parameter_specifier_list */ + YYSYMBOL_type_specifier_nonarray = 517, /* type_specifier_nonarray */ + YYSYMBOL_precision_qualifier = 518, /* precision_qualifier */ + YYSYMBOL_struct_specifier = 519, /* struct_specifier */ + YYSYMBOL_520_3 = 520, /* $@3 */ + YYSYMBOL_521_4 = 521, /* $@4 */ + YYSYMBOL_struct_declaration_list = 522, /* struct_declaration_list */ + YYSYMBOL_struct_declaration = 523, /* struct_declaration */ + YYSYMBOL_struct_declarator_list = 524, /* struct_declarator_list */ + YYSYMBOL_struct_declarator = 525, /* struct_declarator */ + YYSYMBOL_initializer = 526, /* initializer */ + YYSYMBOL_initializer_list = 527, /* initializer_list */ + YYSYMBOL_declaration_statement = 528, /* declaration_statement */ + YYSYMBOL_statement = 529, /* statement */ + YYSYMBOL_simple_statement = 530, /* simple_statement */ + YYSYMBOL_demote_statement = 531, /* demote_statement */ + YYSYMBOL_compound_statement = 532, /* compound_statement */ + YYSYMBOL_533_5 = 533, /* $@5 */ + YYSYMBOL_534_6 = 534, /* $@6 */ + YYSYMBOL_statement_no_new_scope = 535, /* statement_no_new_scope */ + YYSYMBOL_statement_scoped = 536, /* statement_scoped */ + YYSYMBOL_537_7 = 537, /* $@7 */ + YYSYMBOL_538_8 = 538, /* $@8 */ + YYSYMBOL_compound_statement_no_new_scope = 539, /* compound_statement_no_new_scope */ + YYSYMBOL_statement_list = 540, /* statement_list */ + YYSYMBOL_expression_statement = 541, /* expression_statement */ + YYSYMBOL_selection_statement = 542, /* selection_statement */ + YYSYMBOL_selection_statement_nonattributed = 543, /* selection_statement_nonattributed */ + YYSYMBOL_selection_rest_statement = 544, /* selection_rest_statement */ + YYSYMBOL_condition = 545, /* condition */ + YYSYMBOL_switch_statement = 546, /* switch_statement */ + YYSYMBOL_switch_statement_nonattributed = 547, /* switch_statement_nonattributed */ + YYSYMBOL_548_9 = 548, /* $@9 */ + YYSYMBOL_switch_statement_list = 549, /* switch_statement_list */ + YYSYMBOL_case_label = 550, /* case_label */ + YYSYMBOL_iteration_statement = 551, /* iteration_statement */ + YYSYMBOL_iteration_statement_nonattributed = 552, /* iteration_statement_nonattributed */ + YYSYMBOL_553_10 = 553, /* $@10 */ + YYSYMBOL_554_11 = 554, /* $@11 */ + YYSYMBOL_555_12 = 555, /* $@12 */ + YYSYMBOL_for_init_statement = 556, /* for_init_statement */ + YYSYMBOL_conditionopt = 557, /* conditionopt */ + YYSYMBOL_for_rest_statement = 558, /* for_rest_statement */ + YYSYMBOL_jump_statement = 559, /* jump_statement */ + YYSYMBOL_translation_unit = 560, /* translation_unit */ + YYSYMBOL_external_declaration = 561, /* external_declaration */ + YYSYMBOL_function_definition = 562, /* function_definition */ + YYSYMBOL_563_13 = 563, /* $@13 */ + YYSYMBOL_attribute = 564, /* attribute */ + YYSYMBOL_attribute_list = 565, /* attribute_list */ + YYSYMBOL_single_attribute = 566, /* single_attribute */ + YYSYMBOL_spirv_requirements_list = 567, /* spirv_requirements_list */ + YYSYMBOL_spirv_requirements_parameter = 568, /* spirv_requirements_parameter */ + YYSYMBOL_spirv_extension_list = 569, /* spirv_extension_list */ + YYSYMBOL_spirv_capability_list = 570, /* spirv_capability_list */ + YYSYMBOL_spirv_execution_mode_qualifier = 571, /* spirv_execution_mode_qualifier */ + YYSYMBOL_spirv_execution_mode_parameter_list = 572, /* spirv_execution_mode_parameter_list */ + YYSYMBOL_spirv_execution_mode_parameter = 573, /* spirv_execution_mode_parameter */ + YYSYMBOL_spirv_execution_mode_id_parameter_list = 574, /* spirv_execution_mode_id_parameter_list */ + YYSYMBOL_spirv_storage_class_qualifier = 575, /* spirv_storage_class_qualifier */ + YYSYMBOL_spirv_decorate_qualifier = 576, /* spirv_decorate_qualifier */ + YYSYMBOL_spirv_decorate_parameter_list = 577, /* spirv_decorate_parameter_list */ + YYSYMBOL_spirv_decorate_parameter = 578, /* spirv_decorate_parameter */ + YYSYMBOL_spirv_decorate_id_parameter_list = 579, /* spirv_decorate_id_parameter_list */ + YYSYMBOL_spirv_decorate_string_parameter_list = 580, /* spirv_decorate_string_parameter_list */ + YYSYMBOL_spirv_type_specifier = 581, /* spirv_type_specifier */ + YYSYMBOL_spirv_type_parameter_list = 582, /* spirv_type_parameter_list */ + YYSYMBOL_spirv_type_parameter = 583, /* spirv_type_parameter */ + YYSYMBOL_spirv_instruction_qualifier = 584, /* spirv_instruction_qualifier */ + YYSYMBOL_spirv_instruction_qualifier_list = 585, /* spirv_instruction_qualifier_list */ + YYSYMBOL_spirv_instruction_qualifier_id = 586 /* spirv_instruction_qualifier_id */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; @@ -728,7 +729,7 @@ typedef enum yysymbol_kind_t yysymbol_kind_t; extern int yylex(YYSTYPE*, TParseContext&); -#line 732 "MachineIndependent/glslang_tab.cpp" +#line 733 "MachineIndependent/glslang_tab.cpp" #ifdef short @@ -1032,21 +1033,21 @@ union yyalloc #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ -#define YYFINAL 442 +#define YYFINAL 443 /* YYLAST -- Last index in YYTABLE. */ -#define YYLAST 12452 +#define YYLAST 12469 /* YYNTOKENS -- Number of terminals. */ -#define YYNTOKENS 455 +#define YYNTOKENS 456 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 131 /* YYNRULES -- Number of rules. */ -#define YYNRULES 683 +#define YYNRULES 684 /* YYNSTATES -- Number of states. */ -#define YYNSTATES 929 +#define YYNSTATES 930 /* YYMAXUTOK -- Last valid token kind. */ -#define YYMAXUTOK 709 +#define YYMAXUTOK 710 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM @@ -1130,7 +1131,8 @@ static const yytype_int16 yytranslate[] = 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, - 445, 446, 447, 448, 449, 450, 451, 452, 453, 454 + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455 }; #if YYDEBUG @@ -1151,61 +1153,61 @@ static const yytype_int16 yyrline[] = 982, 988, 994, 1004, 1007, 1014, 1022, 1042, 1065, 1080, 1105, 1116, 1126, 1136, 1146, 1155, 1158, 1162, 1166, 1171, 1179, 1186, 1191, 1196, 1201, 1210, 1220, 1247, 1256, 1263, - 1271, 1278, 1285, 1293, 1303, 1310, 1321, 1327, 1330, 1337, - 1341, 1345, 1354, 1364, 1367, 1378, 1381, 1384, 1388, 1392, - 1397, 1401, 1404, 1409, 1413, 1418, 1427, 1431, 1436, 1442, - 1448, 1455, 1460, 1468, 1474, 1486, 1500, 1506, 1511, 1519, - 1527, 1535, 1543, 1551, 1559, 1567, 1575, 1582, 1589, 1593, - 1598, 1603, 1608, 1613, 1618, 1623, 1627, 1631, 1635, 1639, - 1645, 1656, 1663, 1666, 1675, 1680, 1690, 1695, 1703, 1707, - 1717, 1720, 1726, 1732, 1739, 1749, 1753, 1757, 1761, 1766, - 1770, 1775, 1780, 1785, 1790, 1795, 1800, 1805, 1810, 1815, - 1821, 1827, 1833, 1838, 1843, 1848, 1853, 1858, 1863, 1868, - 1873, 1878, 1883, 1888, 1894, 1901, 1906, 1911, 1916, 1921, - 1926, 1931, 1936, 1941, 1946, 1951, 1956, 1964, 1972, 1980, - 1986, 1992, 1998, 2004, 2010, 2016, 2022, 2028, 2034, 2040, - 2046, 2052, 2058, 2064, 2070, 2076, 2082, 2088, 2094, 2100, - 2106, 2112, 2118, 2124, 2130, 2136, 2142, 2148, 2154, 2160, - 2166, 2172, 2178, 2186, 2194, 2202, 2210, 2218, 2226, 2234, - 2242, 2250, 2258, 2266, 2274, 2280, 2286, 2292, 2298, 2304, - 2310, 2316, 2322, 2328, 2334, 2340, 2346, 2352, 2358, 2364, - 2370, 2376, 2382, 2388, 2394, 2400, 2406, 2412, 2418, 2424, - 2430, 2436, 2442, 2448, 2454, 2460, 2466, 2472, 2478, 2484, - 2490, 2494, 2498, 2502, 2507, 2513, 2518, 2523, 2528, 2533, - 2538, 2543, 2549, 2554, 2559, 2564, 2569, 2574, 2580, 2586, - 2592, 2598, 2604, 2610, 2616, 2622, 2628, 2634, 2640, 2646, - 2652, 2658, 2663, 2668, 2673, 2678, 2683, 2688, 2694, 2699, - 2704, 2709, 2714, 2719, 2724, 2729, 2735, 2740, 2745, 2750, - 2755, 2760, 2765, 2770, 2775, 2780, 2785, 2790, 2795, 2800, - 2805, 2811, 2816, 2821, 2827, 2833, 2838, 2843, 2848, 2854, - 2859, 2864, 2869, 2875, 2880, 2885, 2890, 2896, 2901, 2906, - 2911, 2917, 2923, 2929, 2935, 2940, 2946, 2952, 2958, 2963, - 2968, 2973, 2978, 2983, 2989, 2994, 2999, 3004, 3010, 3015, - 3020, 3025, 3031, 3036, 3041, 3046, 3052, 3057, 3062, 3067, - 3073, 3078, 3083, 3088, 3094, 3099, 3104, 3109, 3115, 3120, - 3125, 3130, 3136, 3141, 3146, 3151, 3157, 3162, 3167, 3172, - 3178, 3183, 3188, 3193, 3199, 3204, 3209, 3214, 3220, 3225, - 3230, 3235, 3241, 3246, 3251, 3256, 3262, 3267, 3272, 3277, - 3283, 3288, 3293, 3298, 3303, 3308, 3313, 3318, 3323, 3328, - 3333, 3338, 3343, 3348, 3353, 3358, 3363, 3368, 3373, 3378, - 3383, 3388, 3393, 3398, 3403, 3409, 3415, 3421, 3427, 3434, - 3441, 3447, 3453, 3459, 3465, 3471, 3477, 3483, 3488, 3493, - 3509, 3514, 3519, 3527, 3527, 3538, 3538, 3548, 3551, 3564, - 3586, 3613, 3617, 3623, 3628, 3639, 3643, 3649, 3655, 3666, - 3669, 3676, 3680, 3681, 3687, 3688, 3689, 3690, 3691, 3692, - 3693, 3695, 3701, 3710, 3711, 3715, 3711, 3727, 3728, 3732, - 3732, 3739, 3739, 3753, 3756, 3764, 3772, 3783, 3784, 3788, - 3792, 3800, 3807, 3811, 3819, 3823, 3836, 3840, 3848, 3848, - 3868, 3871, 3877, 3889, 3901, 3905, 3913, 3913, 3928, 3928, - 3946, 3946, 3967, 3970, 3976, 3979, 3985, 3989, 3996, 4001, - 4006, 4013, 4016, 4020, 4025, 4029, 4039, 4043, 4052, 4055, - 4059, 4068, 4068, 4110, 4115, 4118, 4123, 4126, 4133, 4136, - 4141, 4144, 4149, 4152, 4157, 4160, 4165, 4169, 4174, 4178, - 4183, 4187, 4194, 4197, 4202, 4205, 4208, 4211, 4214, 4219, - 4228, 4239, 4244, 4252, 4256, 4261, 4265, 4270, 4274, 4279, - 4283, 4290, 4293, 4298, 4301, 4304, 4307, 4312, 4320, 4330, - 4334, 4339, 4343, 4348, 4352, 4359, 4362, 4367, 4372, 4375, - 4381, 4384, 4389, 4392 + 1271, 1278, 1285, 1293, 1301, 1311, 1318, 1329, 1335, 1338, + 1345, 1349, 1353, 1362, 1372, 1375, 1386, 1389, 1392, 1396, + 1400, 1405, 1409, 1412, 1417, 1421, 1426, 1435, 1439, 1444, + 1450, 1456, 1463, 1468, 1476, 1482, 1494, 1508, 1514, 1519, + 1527, 1535, 1543, 1551, 1559, 1567, 1575, 1583, 1590, 1597, + 1601, 1606, 1611, 1616, 1621, 1626, 1631, 1635, 1639, 1643, + 1647, 1653, 1664, 1671, 1674, 1683, 1688, 1698, 1703, 1711, + 1715, 1725, 1728, 1734, 1740, 1747, 1757, 1761, 1765, 1769, + 1774, 1778, 1783, 1788, 1793, 1798, 1803, 1808, 1813, 1818, + 1823, 1829, 1835, 1841, 1846, 1851, 1856, 1861, 1866, 1871, + 1876, 1881, 1886, 1891, 1896, 1902, 1909, 1914, 1919, 1924, + 1929, 1934, 1939, 1944, 1949, 1954, 1959, 1964, 1972, 1980, + 1988, 1994, 2000, 2006, 2012, 2018, 2024, 2030, 2036, 2042, + 2048, 2054, 2060, 2066, 2072, 2078, 2084, 2090, 2096, 2102, + 2108, 2114, 2120, 2126, 2132, 2138, 2144, 2150, 2156, 2162, + 2168, 2174, 2180, 2186, 2194, 2202, 2210, 2218, 2226, 2234, + 2242, 2250, 2258, 2266, 2274, 2282, 2288, 2294, 2300, 2306, + 2312, 2318, 2324, 2330, 2336, 2342, 2348, 2354, 2360, 2366, + 2372, 2378, 2384, 2390, 2396, 2402, 2408, 2414, 2420, 2426, + 2432, 2438, 2444, 2450, 2456, 2462, 2468, 2474, 2480, 2486, + 2492, 2498, 2502, 2506, 2510, 2515, 2521, 2526, 2531, 2536, + 2541, 2546, 2551, 2557, 2562, 2567, 2572, 2577, 2582, 2588, + 2594, 2600, 2606, 2612, 2618, 2624, 2630, 2636, 2642, 2648, + 2654, 2660, 2666, 2671, 2676, 2681, 2686, 2691, 2696, 2702, + 2707, 2712, 2717, 2722, 2727, 2732, 2737, 2743, 2748, 2753, + 2758, 2763, 2768, 2773, 2778, 2783, 2788, 2793, 2798, 2803, + 2808, 2813, 2819, 2824, 2829, 2835, 2841, 2846, 2851, 2856, + 2862, 2867, 2872, 2877, 2883, 2888, 2893, 2898, 2904, 2909, + 2914, 2919, 2925, 2931, 2937, 2943, 2948, 2954, 2960, 2966, + 2971, 2976, 2981, 2986, 2991, 2997, 3002, 3007, 3012, 3018, + 3023, 3028, 3033, 3039, 3044, 3049, 3054, 3060, 3065, 3070, + 3075, 3081, 3086, 3091, 3096, 3102, 3107, 3112, 3117, 3123, + 3128, 3133, 3138, 3144, 3149, 3154, 3159, 3165, 3170, 3175, + 3180, 3186, 3191, 3196, 3201, 3207, 3212, 3217, 3222, 3228, + 3233, 3238, 3243, 3249, 3254, 3259, 3264, 3270, 3275, 3280, + 3285, 3291, 3296, 3301, 3306, 3311, 3316, 3321, 3326, 3331, + 3336, 3341, 3346, 3351, 3356, 3361, 3366, 3371, 3376, 3381, + 3386, 3391, 3396, 3401, 3406, 3411, 3417, 3423, 3429, 3435, + 3442, 3449, 3455, 3461, 3467, 3473, 3479, 3485, 3491, 3496, + 3501, 3517, 3522, 3527, 3535, 3535, 3546, 3546, 3556, 3559, + 3572, 3594, 3621, 3625, 3631, 3636, 3647, 3651, 3657, 3663, + 3674, 3677, 3684, 3688, 3689, 3695, 3696, 3697, 3698, 3699, + 3700, 3701, 3703, 3709, 3718, 3719, 3723, 3719, 3735, 3736, + 3740, 3740, 3747, 3747, 3761, 3764, 3772, 3780, 3791, 3792, + 3796, 3800, 3808, 3815, 3819, 3827, 3831, 3844, 3848, 3856, + 3856, 3876, 3879, 3885, 3897, 3909, 3913, 3921, 3921, 3936, + 3936, 3954, 3954, 3975, 3978, 3984, 3987, 3993, 3997, 4004, + 4009, 4014, 4021, 4024, 4028, 4033, 4037, 4047, 4051, 4060, + 4063, 4067, 4076, 4076, 4118, 4123, 4126, 4131, 4134, 4141, + 4144, 4149, 4152, 4157, 4160, 4165, 4168, 4173, 4177, 4182, + 4186, 4191, 4195, 4202, 4205, 4210, 4213, 4216, 4219, 4222, + 4227, 4236, 4247, 4252, 4260, 4264, 4269, 4273, 4278, 4282, + 4287, 4291, 4298, 4301, 4306, 4309, 4312, 4315, 4320, 4328, + 4338, 4342, 4347, 4351, 4356, 4360, 4367, 4370, 4375, 4380, + 4383, 4389, 4392, 4397, 4400 }; #endif @@ -1319,10 +1321,10 @@ static const char *const yytname[] = "WRITEONLY", "DEVICECOHERENT", "QUEUEFAMILYCOHERENT", "WORKGROUPCOHERENT", "SUBGROUPCOHERENT", "NONPRIVATE", "SHADERCALLCOHERENT", "NOPERSPECTIVE", "EXPLICITINTERPAMD", - "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", "PERTASKNV", "PRECISE", - "$accept", "variable_identifier", "primary_expression", - "postfix_expression", "integer_expression", "function_call", - "function_call_or_method", "function_call_generic", + "PERVERTEXEXT", "PERVERTEXNV", "PERPRIMITIVENV", "PERVIEWNV", + "PERTASKNV", "PRECISE", "$accept", "variable_identifier", + "primary_expression", "postfix_expression", "integer_expression", + "function_call", "function_call_or_method", "function_call_generic", "function_call_header_no_parameters", "function_call_header_with_parameters", "function_call_header", "function_identifier", "unary_expression", "unary_operator", @@ -1429,16 +1431,16 @@ static const yytype_int16 yytoknum[] = 675, 676, 677, 678, 679, 680, 681, 682, 683, 684, 685, 686, 687, 688, 689, 690, 691, 692, 693, 694, 695, 696, 697, 698, 699, 700, 701, 702, 703, 704, - 705, 706, 707, 708, 709 + 705, 706, 707, 708, 709, 710 }; #endif -#define YYPACT_NINF (-859) +#define YYPACT_NINF (-865) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) -#define YYTABLE_NINF (-570) +#define YYTABLE_NINF (-571) #define yytable_value_is_error(Yyn) \ 0 @@ -1447,99 +1449,99 @@ static const yytype_int16 yytoknum[] = STATE-NUM. */ static const yytype_int16 yypact[] = { - 4548, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -312, -274, -244, -212, -208, - -201, -181, -169, -859, -859, -194, -859, -859, -859, -859, - -859, -285, -859, -859, -859, -859, -859, -317, -859, -859, - -859, -859, -859, -859, -132, -73, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -329, -70, - -158, -145, 7712, -221, -859, -164, -859, -859, -859, -859, - 5452, -859, -859, -859, -859, -68, -859, -859, 932, -859, - -859, 7712, -55, -859, -859, -859, 5904, -80, -154, -150, - -142, -135, -130, -80, -129, -79, 12060, -859, -45, -354, - -76, -859, -308, -859, -43, -40, 7712, -859, -859, -859, - 7712, -72, -71, -859, -265, -859, -257, -859, -859, 10761, - -39, -859, -859, -859, -35, -69, 7712, -859, -42, -38, - -37, -859, -302, -859, -235, -32, -33, -28, -27, -217, - -26, -23, -22, -21, -20, -16, -216, -29, -15, -31, - -303, -859, -13, 7712, -859, -14, -859, -214, -859, -859, - -205, 9029, -859, -279, 1384, -859, -859, -859, -859, -859, - -39, -299, -859, 9462, -275, -859, -34, -859, -137, 10761, - 10761, -859, 10761, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -248, -859, -859, -859, -3, -203, 11194, -1, - -859, 10761, -859, -859, -310, 3, -40, 1, -859, -309, - -80, -859, -30, -859, -319, 5, -128, 10761, -124, -859, - -157, -122, 10761, -120, 10, -118, -80, -859, 11627, -859, - -116, 10761, 7, -79, -859, 7712, -25, 6356, -859, 7712, - 10761, -859, -354, -859, -19, -859, -859, -78, -263, -94, - -298, -52, -18, -8, -12, 29, 28, -301, 15, 9895, - -859, 16, -859, -859, 19, 12, 17, -859, 20, 23, - 18, 10328, 24, 10761, 21, 22, 25, 27, 30, -215, - -859, -859, -117, -859, -70, 26, 34, -859, -859, -859, - -859, -859, 1836, -859, -859, -859, -859, -859, -859, -859, - -859, -859, 5000, 3, 9462, -264, 8163, -859, -859, 9462, - 7712, -859, -11, -859, -859, -859, -195, -859, -859, 10761, - -6, -859, -859, 10761, 37, -859, -859, -859, 10761, -859, - -859, -859, -322, -859, -859, -192, 35, -859, -859, -859, - -859, -859, -859, -179, -859, -178, -859, -859, -177, 32, - -859, -859, -859, -859, -175, -859, -174, -859, -167, 36, - -859, -166, 38, -165, 35, -859, -163, -859, 45, 46, - -859, -859, -25, -39, -115, -859, -859, -859, 6808, -859, - -859, -859, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, - 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, - 10761, -859, -859, -859, 51, -859, 2288, -859, -859, -859, - 2288, -859, 10761, -859, -859, -88, 10761, -63, -859, -859, - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, 10761, 10761, -859, -859, -859, -859, - -859, -859, -859, 9462, -859, -859, -108, -859, 7260, -859, - -859, 52, 53, -859, -859, -859, -859, -859, -138, -136, - -859, -304, -859, -319, -859, -319, -859, 10761, 10761, -859, - -157, -859, -157, -859, 10761, 10761, -859, 65, 10, -859, - 11627, -859, 10761, -859, -859, -86, 3, -25, -859, -859, - -859, -859, -859, -78, -78, -263, -263, -94, -94, -94, - -94, -298, -298, -52, -18, -8, -12, 29, 28, 10761, - -859, 2288, 4096, 31, 3644, -156, -859, -155, -859, -859, - -859, -859, -859, 8596, -859, -859, -859, 66, -859, 39, - -859, -153, -859, -151, -859, -148, -859, -146, -859, -144, - -143, -859, -859, -859, -61, 64, 53, 40, 72, 74, - -859, -859, 4096, 75, -859, -859, -859, -859, -859, -859, - -859, -859, -859, -859, -859, 10761, -859, 71, 2740, 10761, - -859, 73, 81, 41, 80, 3192, -859, 83, -859, 9462, - -859, -859, -859, -141, 10761, 2740, 75, -859, -859, 2288, - -859, 78, 53, -859, -859, 2288, 86, -859, -859 + 4557, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -306, -260, -237, -110, -102, + -100, -83, -77, -865, -865, -301, -865, -865, -865, -865, + -865, -106, -865, -865, -865, -865, -865, -309, -865, -865, + -865, -865, -865, -865, -66, -54, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -328, + -116, -50, -55, 7728, -245, -865, -82, -865, -865, -865, + -865, 5463, -865, -865, -865, -865, -63, -865, -865, 933, + -865, -865, 7728, -57, -865, -865, -865, 5916, -80, -334, + -251, -157, -149, -141, -80, -140, -78, 12077, -865, -47, + -351, -76, -865, -269, -865, -45, -41, 7728, -865, -865, + -865, 7728, -74, -73, -865, -263, -865, -224, -865, -865, + 10778, -38, -865, -865, -865, -36, -69, 7728, -865, -42, + -40, -37, -865, -271, -865, -256, -33, -34, -30, -28, + -202, -27, -24, -23, -22, -21, -17, -199, -10, -15, + -29, -303, -865, -14, 7728, -865, -11, -865, -195, -865, + -865, -194, 9046, -865, -268, 1386, -865, -865, -865, -865, + -865, -38, -304, -865, 9479, -248, -865, -35, -865, -133, + 10778, 10778, -865, 10778, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -274, -865, -865, -865, -6, -187, 11211, + 3, -865, 10778, -865, -865, -297, -2, -41, 4, -865, + -310, -80, -865, -31, -865, -321, 6, -130, 10778, -129, + -865, -166, -128, 10778, -124, 7, -122, -80, -865, 11644, + -865, -120, 10778, 10, -78, -865, 7728, -26, 6369, -865, + 7728, 10778, -865, -351, -865, -20, -865, -865, -79, -217, + -200, -299, -56, -13, -9, -3, 21, 26, -307, 15, + 9912, -865, 14, -865, -865, 20, 12, 13, -865, 24, + 25, 16, 10345, 27, 10778, 23, 18, 19, 22, 28, + -222, -865, -865, -132, -865, -116, 33, 35, -865, -865, + -865, -865, -865, 1839, -865, -865, -865, -865, -865, -865, + -865, -865, -865, 5010, -2, 9479, -225, 8180, -865, -865, + 9479, 7728, -865, 8, -865, -865, -865, -184, -865, -865, + 10778, 29, -865, -865, 10778, 38, -865, -865, -865, 10778, + -865, -865, -865, -312, -865, -865, -183, 31, -865, -865, + -865, -865, -865, -865, -182, -865, -180, -865, -865, -179, + 34, -865, -865, -865, -865, -175, -865, -172, -865, -171, + 39, -865, -167, 40, -163, 31, -865, -160, -865, 44, + 48, -865, -865, -26, -38, -121, -865, -865, -865, 6822, + -865, -865, -865, 10778, 10778, 10778, 10778, 10778, 10778, 10778, + 10778, 10778, 10778, 10778, 10778, 10778, 10778, 10778, 10778, 10778, + 10778, 10778, -865, -865, -865, 53, -865, 2292, -865, -865, + -865, 2292, -865, 10778, -865, -865, -119, 10778, -198, -865, + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, 10778, 10778, -865, -865, -865, + -865, -865, -865, -865, 9479, -865, -865, -174, -865, 7275, + -865, -865, 61, 59, -865, -865, -865, -865, -865, -254, + -142, -865, -308, -865, -321, -865, -321, -865, 10778, 10778, + -865, -166, -865, -166, -865, 10778, 10778, -865, 37, 7, + -865, 11644, -865, 10778, -865, -865, -92, -2, -26, -865, + -865, -865, -865, -865, -79, -79, -217, -217, -200, -200, + -200, -200, -299, -299, -56, -13, -9, -3, 21, 26, + 10778, -865, 2292, 4104, 30, 3651, -159, -865, -158, -865, + -865, -865, -865, -865, 8613, -865, -865, -865, 71, -865, + -12, -865, -156, -865, -155, -865, -148, -865, -147, -865, + -145, -144, -865, -865, -865, -65, 67, 59, 41, 72, + 75, -865, -865, 4104, 76, -865, -865, -865, -865, -865, + -865, -865, -865, -865, -865, -865, 10778, -865, 74, 2745, + 10778, -865, 66, 80, 36, 81, 3198, -865, 82, -865, + 9479, -865, -865, -865, -143, 10778, 2745, 76, -865, -865, + 2292, -865, 78, 59, -865, -865, 2292, 84, -865, -865 }; /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM. @@ -1547,137 +1549,137 @@ static const yytype_int16 yypact[] = means the default is an error. */ static const yytype_int16 yydefact[] = { - 0, 166, 219, 217, 218, 216, 223, 224, 225, 226, - 227, 228, 229, 230, 231, 220, 221, 222, 232, 233, - 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, - 345, 346, 347, 348, 349, 350, 351, 371, 372, 373, - 374, 375, 376, 377, 386, 399, 400, 387, 388, 390, - 389, 391, 392, 393, 394, 395, 396, 397, 398, 174, - 175, 245, 246, 244, 247, 254, 255, 252, 253, 250, - 251, 248, 249, 277, 278, 279, 289, 290, 291, 274, - 275, 276, 286, 287, 288, 271, 272, 273, 283, 284, - 285, 268, 269, 270, 280, 281, 282, 256, 257, 258, - 292, 293, 294, 259, 260, 261, 304, 305, 306, 262, - 263, 264, 316, 317, 318, 265, 266, 267, 328, 329, - 330, 295, 296, 297, 298, 299, 300, 301, 302, 303, - 307, 308, 309, 310, 311, 312, 313, 314, 315, 319, - 320, 321, 322, 323, 324, 325, 326, 327, 331, 332, - 333, 334, 335, 336, 337, 338, 339, 343, 340, 341, - 342, 524, 525, 526, 355, 356, 379, 382, 344, 353, - 354, 370, 352, 401, 402, 405, 406, 407, 409, 410, - 411, 413, 414, 415, 417, 418, 514, 515, 378, 380, - 381, 357, 358, 359, 403, 360, 364, 365, 368, 408, - 412, 416, 361, 362, 366, 367, 404, 363, 369, 448, - 450, 451, 452, 454, 455, 456, 458, 459, 460, 462, - 463, 464, 466, 467, 468, 470, 471, 472, 474, 475, - 476, 478, 479, 480, 482, 483, 484, 486, 487, 488, - 490, 491, 449, 453, 457, 461, 465, 473, 477, 481, - 469, 485, 489, 492, 493, 494, 495, 496, 497, 498, - 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, - 509, 510, 511, 512, 513, 383, 384, 385, 419, 428, - 430, 424, 429, 431, 432, 434, 435, 436, 438, 439, - 440, 442, 443, 444, 446, 447, 420, 421, 422, 433, - 423, 425, 426, 427, 437, 441, 445, 516, 517, 520, - 521, 522, 523, 518, 519, 0, 0, 0, 0, 0, - 0, 0, 0, 164, 165, 0, 620, 137, 530, 531, - 532, 0, 529, 170, 168, 169, 167, 0, 215, 171, - 172, 173, 139, 138, 0, 199, 180, 182, 178, 184, - 186, 181, 183, 179, 185, 187, 176, 177, 201, 188, - 195, 196, 197, 198, 189, 190, 191, 192, 193, 194, - 140, 141, 142, 143, 144, 145, 152, 619, 0, 621, - 0, 114, 113, 0, 125, 130, 159, 158, 156, 160, - 0, 153, 155, 161, 135, 211, 157, 528, 0, 616, - 618, 0, 0, 162, 163, 527, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 535, 0, 0, - 0, 99, 0, 94, 0, 109, 0, 121, 115, 123, - 0, 124, 0, 97, 131, 102, 0, 154, 136, 0, - 204, 210, 1, 617, 0, 0, 0, 96, 0, 0, - 0, 628, 0, 680, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 626, - 0, 624, 0, 0, 533, 149, 151, 0, 147, 202, - 0, 0, 100, 0, 0, 622, 110, 116, 120, 122, - 118, 126, 117, 0, 132, 105, 0, 103, 0, 0, - 0, 9, 0, 43, 42, 44, 41, 5, 6, 7, - 8, 2, 16, 14, 15, 17, 10, 11, 12, 13, - 3, 18, 37, 20, 25, 26, 0, 0, 30, 0, - 213, 0, 36, 34, 0, 205, 111, 0, 95, 0, - 0, 678, 0, 636, 0, 0, 0, 0, 0, 653, - 0, 0, 0, 0, 0, 0, 0, 673, 0, 651, - 0, 0, 0, 0, 98, 0, 0, 0, 537, 0, - 0, 146, 0, 200, 0, 206, 45, 49, 52, 55, - 60, 63, 65, 67, 69, 71, 73, 75, 0, 0, - 101, 564, 573, 577, 0, 0, 0, 598, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 45, - 78, 91, 0, 551, 0, 161, 135, 554, 575, 553, - 561, 552, 0, 555, 556, 579, 557, 586, 558, 559, - 594, 560, 0, 119, 0, 127, 0, 545, 134, 0, - 0, 107, 0, 104, 38, 39, 0, 22, 23, 0, - 0, 28, 27, 0, 215, 31, 33, 40, 0, 212, - 112, 682, 0, 683, 629, 0, 0, 681, 648, 644, - 645, 646, 647, 0, 642, 0, 93, 649, 0, 0, - 663, 664, 665, 666, 0, 661, 0, 667, 0, 0, - 669, 0, 0, 0, 2, 677, 0, 675, 0, 0, - 623, 625, 0, 543, 0, 541, 536, 538, 0, 150, - 148, 203, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 167, 220, 218, 219, 217, 224, 225, 226, 227, + 228, 229, 230, 231, 232, 221, 222, 223, 233, 234, + 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, + 346, 347, 348, 349, 350, 351, 352, 372, 373, 374, + 375, 376, 377, 378, 387, 400, 401, 388, 389, 391, + 390, 392, 393, 394, 395, 396, 397, 398, 399, 175, + 176, 246, 247, 245, 248, 255, 256, 253, 254, 251, + 252, 249, 250, 278, 279, 280, 290, 291, 292, 275, + 276, 277, 287, 288, 289, 272, 273, 274, 284, 285, + 286, 269, 270, 271, 281, 282, 283, 257, 258, 259, + 293, 294, 295, 260, 261, 262, 305, 306, 307, 263, + 264, 265, 317, 318, 319, 266, 267, 268, 329, 330, + 331, 296, 297, 298, 299, 300, 301, 302, 303, 304, + 308, 309, 310, 311, 312, 313, 314, 315, 316, 320, + 321, 322, 323, 324, 325, 326, 327, 328, 332, 333, + 334, 335, 336, 337, 338, 339, 340, 344, 341, 342, + 343, 525, 526, 527, 356, 357, 380, 383, 345, 354, + 355, 371, 353, 402, 403, 406, 407, 408, 410, 411, + 412, 414, 415, 416, 418, 419, 515, 516, 379, 381, + 382, 358, 359, 360, 404, 361, 365, 366, 369, 409, + 413, 417, 362, 363, 367, 368, 405, 364, 370, 449, + 451, 452, 453, 455, 456, 457, 459, 460, 461, 463, + 464, 465, 467, 468, 469, 471, 472, 473, 475, 476, + 477, 479, 480, 481, 483, 484, 485, 487, 488, 489, + 491, 492, 450, 454, 458, 462, 466, 474, 478, 482, + 470, 486, 490, 493, 494, 495, 496, 497, 498, 499, + 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, + 510, 511, 512, 513, 514, 384, 385, 386, 420, 429, + 431, 425, 430, 432, 433, 435, 436, 437, 439, 440, + 441, 443, 444, 445, 447, 448, 421, 422, 423, 434, + 424, 426, 427, 428, 438, 442, 446, 517, 518, 521, + 522, 523, 524, 519, 520, 0, 0, 0, 0, 0, + 0, 0, 0, 165, 166, 0, 621, 137, 531, 532, + 533, 0, 530, 171, 169, 170, 168, 0, 216, 172, + 173, 174, 139, 138, 0, 200, 181, 183, 179, 185, + 187, 182, 184, 180, 186, 188, 177, 178, 202, 189, + 196, 197, 198, 199, 190, 191, 192, 193, 194, 195, + 140, 141, 143, 142, 144, 145, 146, 153, 620, 0, + 622, 0, 114, 113, 0, 125, 130, 160, 159, 157, + 161, 0, 154, 156, 162, 135, 212, 158, 529, 0, + 617, 619, 0, 0, 163, 164, 528, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 536, 0, + 0, 0, 99, 0, 94, 0, 109, 0, 121, 115, + 123, 0, 124, 0, 97, 131, 102, 0, 155, 136, + 0, 205, 211, 1, 618, 0, 0, 0, 96, 0, + 0, 0, 629, 0, 681, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 627, 0, 625, 0, 0, 534, 150, 152, 0, 148, + 203, 0, 0, 100, 0, 0, 623, 110, 116, 120, + 122, 118, 126, 117, 0, 132, 105, 0, 103, 0, + 0, 0, 9, 0, 43, 42, 44, 41, 5, 6, + 7, 8, 2, 16, 14, 15, 17, 10, 11, 12, + 13, 3, 18, 37, 20, 25, 26, 0, 0, 30, + 0, 214, 0, 36, 34, 0, 206, 111, 0, 95, + 0, 0, 679, 0, 637, 0, 0, 0, 0, 0, + 654, 0, 0, 0, 0, 0, 0, 0, 674, 0, + 652, 0, 0, 0, 0, 98, 0, 0, 0, 538, + 0, 0, 147, 0, 201, 0, 207, 45, 49, 52, + 55, 60, 63, 65, 67, 69, 71, 73, 75, 0, + 0, 101, 565, 574, 578, 0, 0, 0, 599, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 76, 207, 208, 0, 563, 0, 596, 609, 608, - 0, 600, 0, 612, 610, 0, 0, 0, 593, 613, - 614, 615, 562, 81, 82, 84, 83, 86, 87, 88, - 89, 90, 85, 80, 0, 0, 578, 574, 576, 580, - 587, 595, 129, 0, 548, 549, 0, 133, 0, 108, - 4, 0, 24, 21, 32, 214, 632, 634, 0, 0, - 679, 0, 638, 0, 637, 0, 640, 0, 0, 655, - 0, 654, 0, 657, 0, 0, 659, 0, 0, 674, - 0, 671, 0, 652, 627, 0, 544, 0, 539, 534, - 46, 47, 48, 51, 50, 53, 54, 58, 59, 56, - 57, 61, 62, 64, 66, 68, 70, 72, 74, 0, - 209, 565, 0, 0, 0, 0, 611, 0, 592, 79, - 92, 128, 546, 0, 106, 19, 630, 0, 631, 0, - 643, 0, 650, 0, 662, 0, 668, 0, 670, 0, - 0, 676, 540, 542, 0, 0, 584, 0, 0, 0, - 603, 602, 605, 571, 588, 547, 550, 633, 635, 639, - 641, 656, 658, 660, 672, 0, 566, 0, 0, 0, - 604, 0, 0, 583, 0, 0, 581, 0, 77, 0, - 568, 597, 567, 0, 606, 0, 571, 570, 572, 590, - 585, 0, 607, 601, 582, 591, 0, 599, 589 + 45, 78, 91, 0, 552, 0, 162, 135, 555, 576, + 554, 562, 553, 0, 556, 557, 580, 558, 587, 559, + 560, 595, 561, 0, 119, 0, 127, 0, 546, 134, + 0, 0, 107, 0, 104, 38, 39, 0, 22, 23, + 0, 0, 28, 27, 0, 216, 31, 33, 40, 0, + 213, 112, 683, 0, 684, 630, 0, 0, 682, 649, + 645, 646, 647, 648, 0, 643, 0, 93, 650, 0, + 0, 664, 665, 666, 667, 0, 662, 0, 668, 0, + 0, 670, 0, 0, 0, 2, 678, 0, 676, 0, + 0, 624, 626, 0, 544, 0, 542, 537, 539, 0, + 151, 149, 204, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 76, 208, 209, 0, 564, 0, 597, 610, + 609, 0, 601, 0, 613, 611, 0, 0, 0, 594, + 614, 615, 616, 563, 81, 82, 84, 83, 86, 87, + 88, 89, 90, 85, 80, 0, 0, 579, 575, 577, + 581, 588, 596, 129, 0, 549, 550, 0, 133, 0, + 108, 4, 0, 24, 21, 32, 215, 633, 635, 0, + 0, 680, 0, 639, 0, 638, 0, 641, 0, 0, + 656, 0, 655, 0, 658, 0, 0, 660, 0, 0, + 675, 0, 672, 0, 653, 628, 0, 545, 0, 540, + 535, 46, 47, 48, 51, 50, 53, 54, 58, 59, + 56, 57, 61, 62, 64, 66, 68, 70, 72, 74, + 0, 210, 566, 0, 0, 0, 0, 612, 0, 593, + 79, 92, 128, 547, 0, 106, 19, 631, 0, 632, + 0, 644, 0, 651, 0, 663, 0, 669, 0, 671, + 0, 0, 677, 541, 543, 0, 0, 585, 0, 0, + 0, 604, 603, 606, 572, 589, 548, 551, 634, 636, + 640, 642, 657, 659, 661, 673, 0, 567, 0, 0, + 0, 605, 0, 0, 584, 0, 0, 582, 0, 77, + 0, 569, 598, 568, 0, 607, 0, 572, 571, 573, + 591, 586, 0, 608, 602, 583, 592, 0, 600, 590 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int16 yypgoto[] = { - -859, -859, -859, -859, -859, -859, -859, -859, -859, -859, - -859, -859, -209, -859, -418, -417, -602, -421, -291, -284, - -286, -283, -281, -287, -859, -473, -859, -490, -859, -497, - -520, 13, -859, -859, -859, 14, -394, -859, -859, 33, - 42, 44, -859, -859, -395, -859, -859, -859, -859, -121, - -859, -381, -369, -859, 9, -859, 0, -424, -859, -859, - -859, -859, 113, -859, -859, -859, -545, -549, -252, -365, - -617, -859, -391, -618, -858, -859, -450, -859, -859, -459, - -458, -859, -859, 43, -721, -387, -859, -173, -859, -422, - -859, -170, -859, -859, -859, -859, -168, -859, -859, -859, - -859, -859, -859, -859, -859, 67, -859, -859, 2, -859, - -97, -300, -386, -859, -859, -859, -326, -323, -327, -859, - -859, -330, -325, -328, -332, -859, -331, -334, -859, -390, - -530 + -865, -865, -865, -865, -865, -865, -865, -865, -865, -865, + -865, -865, -211, -865, -423, -422, -501, -426, -287, -286, + -285, -284, -288, -282, -865, -475, -865, -490, -865, -497, + -525, 11, -865, -865, -865, 5, -385, -865, -865, 32, + 42, 45, -865, -865, -399, -865, -865, -865, -865, -127, + -865, -382, -367, -865, 9, -865, 0, -425, -865, -865, + -865, -865, 119, -865, -865, -865, -544, -549, -252, -366, + -622, -865, -391, -611, -864, -865, -452, -865, -865, -461, + -460, -865, -865, 43, -716, -387, -865, -173, -865, -424, + -865, -169, -865, -865, -865, -865, -168, -865, -865, -865, + -865, -865, -865, -865, -865, 63, -865, -865, 2, -865, + -98, -272, -448, -865, -865, -865, -329, -324, -327, -865, + -865, -332, -326, -333, -331, -865, -330, -336, -865, -392, + -529 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int16 yydefgoto[] = { - -1, 520, 521, 522, 781, 523, 524, 525, 526, 527, - 528, 529, 609, 531, 577, 578, 579, 580, 581, 582, - 583, 584, 585, 586, 587, 610, 839, 611, 764, 612, - 695, 613, 378, 640, 498, 614, 380, 381, 382, 427, - 428, 429, 383, 384, 385, 386, 387, 388, 477, 478, - 389, 390, 391, 392, 532, 480, 533, 483, 440, 441, - 534, 395, 396, 397, 569, 473, 567, 568, 704, 705, - 638, 776, 617, 618, 619, 620, 621, 736, 875, 911, - 903, 904, 905, 912, 622, 623, 624, 625, 906, 878, - 626, 627, 907, 926, 628, 629, 630, 842, 740, 844, - 882, 901, 902, 631, 398, 399, 400, 424, 632, 470, - 471, 450, 451, 788, 789, 402, 673, 674, 678, 403, - 404, 684, 685, 688, 691, 405, 696, 697, 406, 452, - 453 + -1, 521, 522, 523, 782, 524, 525, 526, 527, 528, + 529, 530, 610, 532, 578, 579, 580, 581, 582, 583, + 584, 585, 586, 587, 588, 611, 840, 612, 765, 613, + 696, 614, 379, 641, 499, 615, 381, 382, 383, 428, + 429, 430, 384, 385, 386, 387, 388, 389, 478, 479, + 390, 391, 392, 393, 533, 481, 534, 484, 441, 442, + 535, 396, 397, 398, 570, 474, 568, 569, 705, 706, + 639, 777, 618, 619, 620, 621, 622, 737, 876, 912, + 904, 905, 906, 913, 623, 624, 625, 626, 907, 879, + 627, 628, 908, 927, 629, 630, 631, 843, 741, 845, + 883, 902, 903, 632, 399, 400, 401, 425, 633, 471, + 472, 451, 452, 789, 790, 403, 674, 675, 679, 404, + 405, 685, 686, 689, 692, 406, 697, 698, 407, 453, + 454 }; /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If @@ -1685,190 +1687,145 @@ static const yytype_int16 yydefgoto[] = number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int16 yytable[] = { - 394, 430, 401, 637, 768, 646, 445, 444, 588, 393, - 494, 445, 667, 377, 379, 841, 535, 772, 707, 775, - 446, 437, 777, 466, 708, 446, 786, 677, 667, 668, - 421, 475, 687, 719, 720, 730, 417, 407, 655, 661, - 910, 699, 662, 481, 661, 430, 658, 918, 541, 562, - 709, 482, 481, 563, 542, 476, 422, 910, 659, 634, - 787, 437, 669, 670, 671, 672, 633, 635, 418, 721, - 722, 731, 589, 663, 676, 408, 589, 437, 663, 676, - 590, 647, 648, 639, 492, 676, 481, 589, 676, 328, - 329, 330, 565, 493, 773, 778, 495, 676, 715, 496, - 716, -35, 497, 649, 745, 409, 747, 650, 456, 458, - 460, 462, 464, 465, 468, 543, 734, 827, 828, 829, - 830, 544, 843, 753, 754, 755, 756, 757, 758, 759, - 760, 761, 762, 549, 557, 432, 571, 410, 433, 550, - 558, 411, 572, 763, 637, 573, 637, 652, 412, 637, - 665, 574, 782, 653, 664, 780, 851, 415, 790, 707, - 664, 765, 664, 784, 542, 664, 693, 664, 413, 664, - 664, 792, 794, 796, 664, 799, 801, 793, 795, 797, - 414, 800, 802, 803, 806, 809, 565, 811, 565, 804, - 807, 810, 425, 812, 883, 884, 437, 889, 925, 890, - 765, 765, 891, 793, 892, 797, 893, 894, 800, 921, - 804, 426, 807, 812, 856, 765, 858, 419, 857, 642, - 859, 434, 643, 768, 680, 681, 682, 683, 454, 707, - 530, 455, 457, 717, 718, 455, 886, 445, 444, 765, - 459, 817, 766, 455, 818, 845, 852, 461, 853, 847, - 455, 446, 463, 467, 675, 455, 455, 455, 679, 565, - 686, 455, 689, 455, 692, 455, 698, 455, 765, 455, - 817, 846, 576, 872, 849, 850, 420, 862, 677, 816, - 667, 723, 724, 637, 866, 687, 712, 713, 714, 423, - 644, 645, 920, 765, 848, 765, 895, 823, 824, 439, - 825, 826, 831, 832, 447, 449, 469, 768, 474, 479, - 484, 325, 481, 490, 491, 536, 537, 538, 561, 540, - 539, 559, 657, 546, 676, 676, 545, 565, 547, 548, - 551, 676, 676, 552, 553, 554, 555, 676, 576, 676, - 556, 560, 874, 576, 570, 876, 564, 651, 656, 576, - 492, 641, 576, 725, 589, 666, 662, 727, 690, 700, - 703, 576, 726, 637, 728, 729, 711, 732, 737, 741, - 735, 738, 742, 746, 779, -36, 739, 743, 748, 783, - 576, 749, 431, -34, 750, 876, 751, -29, 798, 752, - 438, 393, 805, 791, 808, 813, 814, 565, 394, 393, - 401, 394, 913, 840, 855, 908, 394, 393, 401, 765, - 393, 377, 379, 868, 887, 393, 472, 922, 896, 637, - 448, 888, 898, 899, 879, 897, 431, 486, -569, 909, - 431, 915, 914, 591, 833, 393, 919, 927, 916, 393, - 928, 835, 834, 838, 416, 836, 438, 877, 837, 785, - 815, 710, 873, 880, 917, 393, 923, 881, 924, 769, - 900, 446, 770, 488, 771, 443, 701, 485, 487, 861, - 860, 863, 865, 566, 489, 864, 869, 867, 871, 870, - 0, 0, 393, 0, 616, 0, 0, 877, 0, 0, - 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, - 0, 446, 0, 820, 821, 822, 576, 576, 576, 576, - 576, 576, 576, 576, 576, 576, 576, 576, 576, 576, - 576, 576, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 660, 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, 702, 0, 566, 0, 566, - 0, 0, 0, 0, 393, 0, 393, 0, 393, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 576, 576, - 0, 0, 0, 0, 0, 576, 576, 0, 0, 0, - 0, 576, 0, 576, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, - 0, 615, 394, 0, 0, 0, 0, 0, 0, 0, - 566, 393, 0, 0, 0, 0, 0, 0, 0, 393, + 395, 431, 402, 446, 638, 380, 647, 589, 446, 394, + 495, 378, 769, 773, 668, 776, 536, 445, 778, 708, + 447, 842, 467, 678, 438, 447, 709, 669, 688, 731, + 668, 422, 720, 721, 476, 911, 787, 700, 662, 656, + 662, 663, 919, 408, 418, 431, 710, 482, 455, 563, + 416, 456, 911, 564, 635, 648, 649, 423, 477, 659, + 670, 671, 672, 673, 438, 732, 634, 636, 722, 723, + 788, 660, 664, 677, 664, -35, 419, 650, 677, 542, + 438, 651, 482, 590, 677, 543, 493, 677, 482, 409, + 483, 591, 566, 665, 544, 494, 677, 779, 857, 665, + 545, 665, 858, 590, 665, 746, 665, 748, 665, 665, + 640, 433, 410, 665, 434, 735, 754, 755, 756, 757, + 758, 759, 760, 761, 762, 763, 590, 718, 719, 496, + 844, 458, 497, 774, 456, 498, 764, 457, 459, 461, + 463, 465, 466, 469, 716, 638, 717, 638, 550, 666, + 638, 558, 852, 783, 551, 572, 574, 559, 766, 849, + 708, 573, 575, 653, 785, 694, 781, 791, 793, 654, + 795, 797, 766, 543, 794, 800, 796, 798, 802, 804, + 853, 801, 854, 807, 803, 805, 566, 810, 566, 808, + 812, 884, 885, 811, 890, 891, 813, 766, 766, 438, + 794, 798, 892, 893, 926, 894, 895, 922, 801, 805, + 859, 808, 813, 766, 860, 681, 682, 683, 684, 828, + 829, 830, 831, 643, 766, 460, 644, 767, 456, 531, + 708, 769, 887, 462, 446, 818, 456, 766, 819, 411, + 847, 464, 468, 424, 456, 456, 846, 412, 445, 413, + 848, 447, 676, 680, 687, 456, 456, 456, 690, 566, + 693, 456, 699, 456, 818, 456, 414, 873, 328, 329, + 330, 577, 415, 863, 678, 850, 851, 724, 725, 817, + 867, 688, 668, 420, 638, 713, 714, 715, 921, 645, + 646, 766, 896, 824, 825, 421, 826, 827, 832, 833, + 426, 427, 448, 435, 440, 450, 475, 470, 485, 480, + 325, 491, 492, 482, 537, 769, 538, 539, 540, 541, + 562, 658, 547, 677, 677, 546, 548, 566, 549, 552, + 677, 677, 553, 554, 555, 556, 677, 577, 677, 557, + 560, 561, 577, 875, 652, 565, 877, 571, 577, 590, + 642, 577, 657, 493, 667, 691, 729, 663, 726, 704, + 577, 727, 701, 730, 638, 712, 728, 733, 736, 738, + 889, 739, 740, 742, 743, 744, 747, 750, 751, 577, + 749, 752, -36, 432, -34, 869, 877, 753, -29, 792, + 799, 439, 394, 780, 814, 806, 809, 566, 815, 395, + 394, 402, 395, 914, 380, 841, 909, 395, 394, 402, + 378, 394, 449, 856, 784, 766, 394, 473, 923, 888, + 638, 897, 899, 880, 900, 915, 898, 432, 487, -570, + 916, 432, 910, 917, 592, 920, 394, 928, 929, 834, + 394, 835, 838, 836, 878, 837, 711, 439, 786, 839, + 417, 816, 874, 918, 881, 924, 394, 925, 882, 901, + 770, 447, 444, 489, 771, 772, 702, 862, 486, 488, + 861, 866, 864, 868, 567, 865, 490, 872, 870, 0, + 0, 871, 0, 394, 878, 617, 0, 0, 0, 0, + 0, 0, 0, 0, 616, 0, 0, 0, 0, 0, + 0, 447, 821, 822, 823, 577, 577, 577, 577, 577, + 577, 577, 577, 577, 577, 577, 577, 577, 577, 577, + 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 661, 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, 703, 0, 567, 0, + 567, 0, 0, 0, 0, 394, 0, 394, 0, 394, + 0, 0, 0, 0, 0, 0, 0, 577, 577, 0, + 0, 0, 0, 0, 577, 577, 0, 0, 0, 0, + 577, 0, 577, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 395, 0, 0, 0, 0, 0, 0, + 0, 567, 394, 0, 0, 0, 0, 0, 0, 0, + 394, 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, 566, 0, - 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 616, 0, 0, 0, - 616, 0, 0, 0, 0, 615, 0, 0, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 394, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 566, 0, - 0, 0, 0, 0, 0, 0, 0, 393, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 617, 0, 0, + 0, 617, 0, 0, 0, 0, 616, 0, 0, 0, + 616, 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, 567, + 0, 0, 0, 0, 0, 0, 0, 0, 394, 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, 616, 616, 0, 616, 0, 401, 0, 0, 0, - 615, 615, 0, 615, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 617, 617, 0, 617, 0, 402, 0, 0, + 0, 616, 616, 0, 616, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 616, 0, 0, 0, 0, 0, 0, 0, - 0, 615, 0, 0, 0, 0, 0, 0, 616, 0, - 0, 0, 0, 0, 0, 616, 0, 615, 0, 0, - 0, 0, 0, 0, 615, 616, 0, 0, 0, 616, - 0, 0, 0, 0, 615, 616, 0, 0, 615, 0, - 0, 0, 442, 0, 615, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 617, 0, 0, 0, 0, 0, 0, + 0, 0, 616, 0, 0, 0, 0, 0, 0, 617, + 0, 0, 0, 0, 0, 0, 617, 0, 616, 0, + 0, 0, 0, 0, 0, 616, 617, 0, 0, 0, + 617, 0, 0, 0, 0, 616, 617, 0, 0, 616, + 0, 0, 0, 443, 0, 616, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, - 0, 326, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 328, 329, 330, 331, - 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, - 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 0, 0, 499, 500, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, + 0, 0, 326, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, + 331, 0, 0, 0, 0, 0, 0, 0, 0, 332, + 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 501, 502, 0, 325, 0, 591, 592, 0, - 0, 0, 0, 593, 503, 504, 505, 506, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, - 330, 331, 0, 0, 0, 507, 508, 509, 510, 511, - 332, 333, 334, 335, 336, 337, 338, 594, 595, 596, - 597, 0, 598, 599, 600, 601, 602, 603, 604, 605, - 606, 607, 339, 340, 341, 342, 343, 344, 512, 513, - 514, 515, 516, 517, 518, 519, 345, 608, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, + 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, + 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -1901,110 +1858,65 @@ static const yytype_int16 yytable[] = 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, 0, 0, 499, 500, 0, 0, 0, + 322, 323, 324, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 501, 502, 0, 325, 0, 591, - 767, 0, 0, 0, 0, 593, 503, 504, 505, 506, + 0, 0, 0, 0, 502, 503, 0, 325, 0, 592, + 593, 0, 0, 0, 0, 594, 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 328, 329, 330, 331, 0, 0, 0, 507, 508, 509, - 510, 511, 332, 333, 334, 335, 336, 337, 338, 594, - 595, 596, 597, 0, 598, 599, 600, 601, 602, 603, - 604, 605, 606, 607, 339, 340, 341, 342, 343, 344, - 512, 513, 514, 515, 516, 517, 518, 519, 345, 608, + 328, 329, 330, 331, 0, 0, 0, 508, 509, 510, + 511, 512, 332, 333, 334, 335, 336, 337, 338, 595, + 596, 597, 598, 0, 599, 600, 601, 602, 603, 604, + 605, 606, 607, 608, 339, 340, 341, 342, 343, 344, + 513, 514, 515, 516, 517, 518, 519, 520, 345, 609, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 0, 0, 499, 500, 0, + 376, 377, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 501, 502, 0, 325, - 0, 591, 0, 0, 0, 0, 0, 593, 503, 504, - 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 328, 329, 330, 331, 0, 0, 0, 507, - 508, 509, 510, 511, 332, 333, 334, 335, 336, 337, - 338, 594, 595, 596, 597, 0, 598, 599, 600, 601, - 602, 603, 604, 605, 606, 607, 339, 340, 341, 342, - 343, 344, 512, 513, 514, 515, 516, 517, 518, 519, - 345, 608, 346, 347, 348, 349, 350, 351, 352, 353, - 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, - 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 499, - 500, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 501, 502, - 0, 325, 0, 484, 0, 0, 0, 0, 0, 593, - 503, 504, 505, 506, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 328, 329, 330, 331, 0, 0, - 0, 507, 508, 509, 510, 511, 332, 333, 334, 335, - 336, 337, 338, 594, 595, 596, 597, 0, 598, 599, - 600, 601, 602, 603, 604, 605, 606, 607, 339, 340, - 341, 342, 343, 344, 512, 513, 514, 515, 516, 517, - 518, 519, 345, 608, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, + 0, 0, 0, 0, 0, 0, 0, 502, 503, 0, + 325, 0, 592, 768, 0, 0, 0, 0, 594, 504, + 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 327, 328, 329, 330, 331, 0, 0, 0, + 508, 509, 510, 511, 512, 332, 333, 334, 335, 336, + 337, 338, 595, 596, 597, 598, 0, 599, 600, 601, + 602, 603, 604, 605, 606, 607, 608, 339, 340, 341, + 342, 343, 344, 513, 514, 515, 516, 517, 518, 519, + 520, 345, 609, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -2037,110 +1949,65 @@ 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, 0, - 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, + 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 501, 502, 0, 325, 0, 0, 0, 0, 0, 0, - 0, 593, 503, 504, 505, 506, 0, 0, 0, 0, + 502, 503, 0, 325, 0, 592, 0, 0, 0, 0, + 0, 594, 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, 331, - 0, 0, 0, 507, 508, 509, 510, 511, 332, 333, - 334, 335, 336, 337, 338, 594, 595, 596, 597, 0, - 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, - 339, 340, 341, 342, 343, 344, 512, 513, 514, 515, - 516, 517, 518, 519, 345, 608, 346, 347, 348, 349, + 0, 0, 0, 508, 509, 510, 511, 512, 332, 333, + 334, 335, 336, 337, 338, 595, 596, 597, 598, 0, + 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, + 339, 340, 341, 342, 343, 344, 513, 514, 515, 516, + 517, 518, 519, 520, 345, 609, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 0, 0, 499, 500, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 501, 502, 0, 325, 0, 0, 0, 0, - 0, 0, 0, 593, 503, 504, 505, 506, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, - 330, 331, 0, 0, 0, 507, 508, 509, 510, 511, - 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 339, 340, 341, 342, 343, 344, 512, 513, - 514, 515, 516, 517, 518, 519, 345, 0, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, - 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 318, 319, 320, 321, - 322, 323, 324, 0, 0, 499, 500, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 501, 502, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 503, 504, 505, 506, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, - 328, 329, 330, 0, 0, 0, 0, 507, 508, 509, - 510, 511, 332, 333, 334, 335, 336, 337, 338, 0, + 370, 371, 372, 373, 374, 375, 376, 377, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 339, 340, 341, 342, 343, 344, - 512, 513, 514, 515, 516, 517, 518, 519, 345, 0, - 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, - 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, - 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 0, 0, 0, 502, 503, 0, 325, 0, 485, 0, + 0, 0, 0, 0, 594, 504, 505, 506, 507, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, + 329, 330, 331, 0, 0, 0, 508, 509, 510, 511, + 512, 332, 333, 334, 335, 336, 337, 338, 595, 596, + 597, 598, 0, 599, 600, 601, 602, 603, 604, 605, + 606, 607, 608, 339, 340, 341, 342, 343, 344, 513, + 514, 515, 516, 517, 518, 519, 520, 345, 609, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -2172,20 +2039,156 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, + 320, 321, 322, 323, 324, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 325, - 0, 0, 0, 0, 0, 0, 0, 326, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 327, 328, 329, 330, 331, 0, 0, 0, 0, - 0, 0, 0, 0, 332, 333, 334, 335, 336, 337, - 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 339, 340, 341, 342, - 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, - 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, + 0, 0, 0, 0, 0, 0, 502, 503, 0, 325, + 0, 0, 0, 0, 0, 0, 0, 594, 504, 505, + 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 327, 328, 329, 330, 331, 0, 0, 0, 508, + 509, 510, 511, 512, 332, 333, 334, 335, 336, 337, + 338, 595, 596, 597, 598, 0, 599, 600, 601, 602, + 603, 604, 605, 606, 607, 608, 339, 340, 341, 342, + 343, 344, 513, 514, 515, 516, 517, 518, 519, 520, + 345, 609, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, + 374, 375, 376, 377, 1, 2, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 0, 0, + 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, + 503, 0, 325, 0, 0, 0, 0, 0, 0, 0, + 594, 504, 505, 506, 507, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 327, 328, 329, 330, 331, 0, + 0, 0, 508, 509, 510, 511, 512, 332, 333, 334, + 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 339, + 340, 341, 342, 343, 344, 513, 514, 515, 516, 517, + 518, 519, 520, 345, 0, 346, 347, 348, 349, 350, + 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, + 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, + 371, 372, 373, 374, 375, 376, 377, 1, 2, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 318, 319, 320, 321, 322, 323, + 324, 0, 0, 500, 501, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 502, 503, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 504, 505, 506, 507, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, + 330, 0, 0, 0, 0, 508, 509, 510, 511, 512, + 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 339, 340, 341, 342, 343, 344, 513, 514, + 515, 516, 517, 518, 519, 520, 345, 0, 346, 347, + 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, + 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, + 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, + 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 325, 0, + 0, 0, 0, 0, 0, 0, 326, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 327, 328, 329, 330, 331, 0, 0, 0, 0, 0, + 0, 0, 0, 332, 333, 334, 335, 336, 337, 338, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 339, 340, 341, 342, 343, + 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, + 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, + 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, + 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, + 375, 376, 377, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -2224,103 +2227,58 @@ static const yytype_int16 yytable[] = 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, 334, 335, - 336, 337, 338, 594, 0, 0, 597, 0, 598, 599, - 0, 0, 602, 0, 0, 0, 0, 0, 339, 340, + 336, 337, 338, 595, 0, 0, 598, 0, 599, 600, + 0, 0, 603, 0, 0, 0, 0, 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 0, - 0, 0, 318, 319, 320, 321, 322, 323, 324, 0, + 372, 373, 374, 375, 376, 377, 1, 2, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, + 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, 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, 435, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, - 0, 0, 0, 0, 0, 0, 0, 436, 332, 333, - 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, + 0, 0, 436, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, + 0, 0, 0, 0, 0, 0, 0, 0, 437, 332, + 333, 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 1, 2, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 318, 319, 320, 321, 322, 323, - 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, - 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 332, 333, 334, 335, 336, 337, 338, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 339, 340, 341, 342, 343, 344, 0, 0, - 0, 0, 0, 0, 0, 0, 345, 0, 346, 347, - 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, - 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, - 368, 369, 370, 371, 372, 373, 374, 375, 376, 1, + 0, 339, 340, 341, 342, 343, 344, 0, 0, 0, + 0, 0, 0, 0, 0, 345, 0, 346, 347, 348, + 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, + 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, + 369, 370, 371, 372, 373, 374, 375, 376, 377, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, @@ -2355,8 +2313,8 @@ static const yytype_int16 yytable[] = 312, 313, 314, 0, 0, 0, 318, 319, 320, 321, 322, 323, 324, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 325, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 706, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, 334, 335, 336, 337, 338, 0, @@ -2366,7 +2324,143 @@ static const yytype_int16 yytable[] = 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, - 376, 1, 2, 3, 4, 5, 6, 7, 8, 9, + 376, 377, 1, 2, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 0, 0, 0, 318, + 319, 320, 321, 322, 323, 324, 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, 707, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 327, 328, 329, 330, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 332, 333, 334, 335, 336, + 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 339, 340, 341, + 342, 343, 344, 0, 0, 0, 0, 0, 0, 0, + 0, 345, 0, 346, 347, 348, 349, 350, 351, 352, + 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, + 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, + 373, 374, 375, 376, 377, 1, 2, 3, 4, 5, + 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, + 16, 17, 18, 19, 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, 0, + 0, 0, 318, 319, 320, 321, 322, 323, 324, 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, 820, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 327, 328, 329, 330, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, + 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, + 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, + 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, + 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, + 370, 371, 372, 373, 374, 375, 376, 377, 1, 2, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 0, 0, 0, 318, 319, 320, 321, 322, + 323, 324, 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, 855, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 327, 328, + 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 332, 333, 334, 335, 336, 337, 338, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 339, 340, 341, 342, 343, 344, 0, + 0, 0, 0, 0, 0, 0, 0, 345, 0, 346, + 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, + 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, + 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, + 377, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -2401,7 +2495,7 @@ static const yytype_int16 yytable[] = 320, 321, 322, 323, 324, 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, 819, 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, 328, 329, 330, 0, 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, 334, 335, 336, 337, @@ -2411,13 +2505,13 @@ static const yytype_int16 yytable[] = 345, 0, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, - 374, 375, 376, 1, 2, 3, 4, 5, 6, 7, + 374, 375, 376, 377, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 58, 0, 0, 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, @@ -2443,65 +2537,18 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, - 318, 319, 320, 321, 322, 323, 324, 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, 854, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 327, 328, 329, 330, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 332, 333, 334, 335, - 336, 337, 338, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 339, 340, - 341, 342, 343, 344, 0, 0, 0, 0, 0, 0, - 0, 0, 345, 0, 346, 347, 348, 349, 350, 351, - 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, - 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, - 372, 373, 374, 375, 376, 1, 2, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, 0, - 0, 0, 318, 319, 320, 321, 322, 323, 324, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 321, 0, 0, 0, 0, 0, 500, + 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 502, 503, + 0, 0, 0, 637, 775, 0, 0, 0, 0, 0, + 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 508, 509, 510, 511, 512, 332, 0, 0, 0, + 0, 337, 338, 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, 328, 329, 330, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 332, 333, - 334, 335, 336, 337, 338, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 339, 340, 341, 342, 343, 344, 0, 0, 0, 0, - 0, 0, 0, 0, 345, 0, 346, 347, 348, 349, - 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, - 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, - 370, 371, 372, 373, 374, 375, 376, 2, 3, 4, + 0, 0, 0, 0, 513, 514, 515, 516, 517, 518, + 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, @@ -2534,16 +2581,16 @@ static const yytype_int16 yytable[] = 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, - 0, 0, 499, 500, 0, 0, 0, 0, 0, 0, + 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 501, 502, 0, 0, 0, 636, 774, 0, 0, - 0, 0, 0, 503, 504, 505, 506, 0, 0, 0, + 0, 502, 503, 0, 0, 0, 637, 886, 0, 0, + 0, 0, 0, 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 507, 508, 509, 510, 511, 332, + 0, 0, 0, 0, 508, 509, 510, 511, 512, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 512, 513, 514, - 515, 516, 517, 518, 519, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 513, 514, 515, + 516, 517, 518, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, @@ -2577,16 +2624,16 @@ static const yytype_int16 yytable[] = 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, 321, - 0, 0, 0, 0, 0, 499, 500, 0, 0, 0, + 0, 0, 0, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 501, 502, 0, 0, 0, 636, - 885, 0, 0, 0, 0, 0, 503, 504, 505, 506, + 0, 0, 0, 0, 502, 503, 0, 0, 576, 0, + 0, 0, 0, 0, 0, 0, 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 507, 508, 509, - 510, 511, 332, 0, 0, 0, 0, 337, 338, 0, + 0, 0, 0, 0, 0, 0, 0, 508, 509, 510, + 511, 512, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 512, 513, 514, 515, 516, 517, 518, 519, 0, 0, + 513, 514, 515, 516, 517, 518, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, @@ -2620,17 +2667,17 @@ 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, 0, 0, 0, 0, - 0, 0, 321, 0, 0, 0, 0, 0, 499, 500, + 0, 0, 321, 0, 0, 0, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 501, 502, 0, - 0, 575, 0, 0, 0, 0, 0, 0, 0, 503, - 504, 505, 506, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 502, 503, 0, + 0, 0, 637, 0, 0, 0, 0, 0, 0, 504, + 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 507, 508, 509, 510, 511, 332, 0, 0, 0, 0, + 508, 509, 510, 511, 512, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 512, 513, 514, 515, 516, 517, 518, - 519, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 513, 514, 515, 516, 517, 518, 519, + 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, @@ -2664,16 +2711,16 @@ static const yytype_int16 yytable[] = 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, - 0, 499, 500, 0, 0, 0, 0, 0, 0, 0, + 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 501, 502, 0, 0, 0, 636, 0, 0, 0, 0, - 0, 0, 503, 504, 505, 506, 0, 0, 0, 0, + 502, 503, 0, 0, 734, 0, 0, 0, 0, 0, + 0, 0, 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 507, 508, 509, 510, 511, 332, 0, + 0, 0, 0, 508, 509, 510, 511, 512, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 512, 513, 514, 515, - 516, 517, 518, 519, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 513, 514, 515, 516, + 517, 518, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, @@ -2707,16 +2754,16 @@ static const yytype_int16 yytable[] = 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, 321, 0, - 0, 0, 0, 0, 499, 500, 0, 0, 0, 0, + 0, 0, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 501, 502, 0, 0, 733, 0, 0, - 0, 0, 0, 0, 0, 503, 504, 505, 506, 0, + 0, 0, 0, 502, 503, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 745, 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 507, 508, 509, 510, - 511, 332, 0, 0, 0, 0, 337, 338, 0, 0, + 0, 0, 0, 0, 0, 0, 508, 509, 510, 511, + 512, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 512, - 513, 514, 515, 516, 517, 518, 519, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 513, + 514, 515, 516, 517, 518, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, @@ -2750,16 +2797,16 @@ static const yytype_int16 yytable[] = 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, 0, 0, 0, 0, 0, - 0, 321, 0, 0, 0, 0, 0, 499, 500, 0, + 0, 321, 0, 0, 0, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 501, 502, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 744, 503, 504, - 505, 506, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 507, - 508, 509, 510, 511, 332, 0, 0, 0, 0, 337, + 0, 0, 0, 0, 0, 0, 502, 503, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 504, 505, + 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 508, + 509, 510, 511, 512, 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 512, 513, 514, 515, 516, 517, 518, 519, + 0, 0, 513, 514, 515, 516, 517, 518, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, @@ -2794,16 +2841,16 @@ static const yytype_int16 yytable[] = 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, 321, 0, 0, 0, 0, 0, - 499, 500, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 501, - 502, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 503, 504, 505, 506, 0, 0, 0, 0, 0, + 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 502, + 503, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 507, 508, 509, 510, 511, 332, 0, 0, - 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, + 0, 0, 508, 509, 510, 511, 512, 332, 0, 0, + 0, 0, 337, 655, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 512, 513, 514, 515, 516, - 517, 518, 519, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 513, 514, 515, 516, 517, + 518, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, @@ -2837,16 +2884,16 @@ static const yytype_int16 yytable[] = 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, 321, 0, 0, - 0, 0, 0, 499, 500, 0, 0, 0, 0, 0, + 0, 0, 0, 500, 501, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 501, 502, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 503, 504, 505, 506, 0, 0, + 0, 0, 502, 503, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 504, 505, 506, 507, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 507, 508, 509, 510, 511, - 332, 0, 0, 0, 0, 337, 654, 0, 0, 0, + 0, 0, 0, 0, 0, 508, 509, 510, 511, 695, + 332, 0, 0, 0, 0, 337, 338, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 512, 513, - 514, 515, 516, 517, 518, 519, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 513, 514, + 515, 516, 517, 518, 519, 520, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, @@ -2880,245 +2927,156 @@ static const yytype_int16 yytable[] = 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 0, 0, 0, 0, 0, 0, - 321, 0, 0, 0, 0, 0, 499, 500, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 501, 502, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 503, 504, 505, - 506, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 507, 508, - 509, 510, 694, 332, 0, 0, 0, 0, 337, 338, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 512, 513, 514, 515, 516, 517, 518, 519, 0, - 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 358, 2, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 0, 0, 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, 0, 0, 0, - 0, 0, 0, 321, 0, 0, 0, 0, 0, 0, + 321, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 332, 0, 0, 0, - 0, 337, 338 + 0, 0, 0, 332, 0, 0, 0, 0, 337, 338 }; static const yytype_int16 yycheck[] = { - 0, 382, 0, 493, 622, 502, 401, 401, 481, 0, - 434, 406, 542, 0, 0, 736, 440, 634, 567, 636, - 401, 390, 639, 413, 569, 406, 348, 547, 558, 348, - 359, 385, 552, 331, 332, 336, 353, 349, 528, 348, - 898, 561, 351, 351, 348, 426, 356, 905, 350, 352, - 570, 359, 351, 356, 356, 409, 385, 915, 368, 358, - 382, 430, 381, 382, 383, 384, 490, 491, 385, 367, - 368, 372, 351, 382, 547, 349, 351, 446, 382, 552, - 359, 329, 330, 358, 349, 558, 351, 351, 561, 374, - 375, 376, 473, 358, 358, 640, 353, 570, 361, 356, - 363, 349, 359, 351, 601, 349, 603, 355, 408, 409, - 410, 411, 412, 413, 414, 350, 589, 719, 720, 721, - 722, 356, 740, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 350, 350, 356, 350, 349, 359, 356, - 356, 349, 356, 358, 634, 350, 636, 350, 349, 639, - 540, 356, 649, 356, 540, 350, 773, 351, 350, 708, - 546, 356, 548, 653, 356, 551, 556, 553, 349, 555, - 556, 350, 350, 350, 560, 350, 350, 356, 356, 356, - 349, 356, 356, 350, 350, 350, 567, 350, 569, 356, - 356, 356, 350, 356, 350, 350, 565, 350, 919, 350, - 356, 356, 350, 356, 350, 356, 350, 350, 356, 350, - 356, 356, 356, 356, 352, 356, 352, 349, 356, 356, - 356, 385, 359, 841, 381, 382, 383, 384, 382, 778, - 439, 385, 382, 327, 328, 385, 853, 632, 632, 356, - 382, 356, 359, 385, 359, 742, 354, 382, 356, 746, - 385, 632, 382, 382, 382, 385, 385, 385, 382, 640, - 382, 385, 382, 385, 382, 385, 382, 385, 356, 385, - 356, 359, 481, 359, 764, 765, 349, 797, 798, 703, - 810, 333, 334, 773, 804, 805, 364, 365, 366, 359, - 499, 500, 909, 356, 357, 356, 357, 715, 716, 367, - 717, 718, 723, 724, 359, 385, 385, 925, 353, 385, - 353, 351, 351, 385, 385, 350, 385, 359, 349, 356, - 358, 350, 531, 356, 797, 798, 358, 708, 356, 356, - 356, 804, 805, 356, 356, 356, 356, 810, 547, 812, - 356, 356, 839, 552, 358, 842, 359, 350, 349, 558, - 349, 385, 561, 371, 351, 385, 351, 369, 348, 352, - 385, 570, 370, 853, 335, 337, 385, 352, 349, 349, - 354, 359, 349, 349, 385, 349, 359, 359, 357, 385, - 589, 359, 382, 349, 359, 882, 359, 350, 356, 359, - 390, 382, 356, 358, 356, 350, 350, 778, 398, 390, - 398, 401, 899, 352, 352, 895, 406, 398, 406, 356, - 401, 398, 398, 348, 348, 406, 416, 914, 354, 909, - 406, 382, 350, 349, 393, 385, 426, 425, 353, 358, - 430, 350, 359, 353, 725, 426, 353, 359, 397, 430, - 354, 727, 726, 730, 331, 728, 446, 842, 729, 658, - 702, 572, 817, 844, 904, 446, 915, 844, 916, 632, - 882, 842, 632, 430, 632, 398, 563, 424, 426, 795, - 793, 798, 802, 473, 430, 800, 808, 805, 812, 810, - -1, -1, 473, -1, 484, -1, -1, 882, -1, -1, - -1, -1, -1, 484, -1, -1, -1, -1, -1, -1, - -1, 882, -1, 712, 713, 714, 715, 716, 717, 718, - 719, 720, 721, 722, 723, 724, 725, 726, 727, 728, - 729, 730, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 536, -1, + 0, 383, 0, 402, 494, 0, 503, 482, 407, 0, + 435, 0, 623, 635, 543, 637, 441, 402, 640, 568, + 402, 737, 414, 548, 391, 407, 570, 348, 553, 336, + 559, 359, 331, 332, 385, 899, 348, 562, 348, 529, + 348, 351, 906, 349, 353, 427, 571, 351, 382, 352, + 351, 385, 916, 356, 358, 329, 330, 385, 409, 356, + 381, 382, 383, 384, 431, 372, 491, 492, 367, 368, + 382, 368, 382, 548, 382, 349, 385, 351, 553, 350, + 447, 355, 351, 351, 559, 356, 349, 562, 351, 349, + 359, 359, 474, 541, 350, 358, 571, 641, 352, 547, + 356, 549, 356, 351, 552, 602, 554, 604, 556, 557, + 358, 356, 349, 561, 359, 590, 338, 339, 340, 341, + 342, 343, 344, 345, 346, 347, 351, 327, 328, 353, + 741, 382, 356, 358, 385, 359, 358, 409, 410, 411, + 412, 413, 414, 415, 361, 635, 363, 637, 350, 541, + 640, 350, 774, 650, 356, 350, 350, 356, 356, 357, + 709, 356, 356, 350, 654, 557, 350, 350, 350, 356, + 350, 350, 356, 356, 356, 350, 356, 356, 350, 350, + 354, 356, 356, 350, 356, 356, 568, 350, 570, 356, + 350, 350, 350, 356, 350, 350, 356, 356, 356, 566, + 356, 356, 350, 350, 920, 350, 350, 350, 356, 356, + 352, 356, 356, 356, 356, 381, 382, 383, 384, 720, + 721, 722, 723, 356, 356, 382, 359, 359, 385, 440, + 779, 842, 854, 382, 633, 356, 385, 356, 359, 349, + 359, 382, 382, 359, 385, 385, 743, 349, 633, 349, + 747, 633, 382, 382, 382, 385, 385, 385, 382, 641, + 382, 385, 382, 385, 356, 385, 349, 359, 374, 375, + 376, 482, 349, 798, 799, 765, 766, 333, 334, 704, + 805, 806, 811, 349, 774, 364, 365, 366, 910, 500, + 501, 356, 357, 716, 717, 349, 718, 719, 724, 725, + 350, 356, 359, 385, 367, 385, 353, 385, 353, 385, + 351, 385, 385, 351, 350, 926, 385, 359, 358, 356, + 349, 532, 356, 798, 799, 358, 356, 709, 356, 356, + 805, 806, 356, 356, 356, 356, 811, 548, 813, 356, + 350, 356, 553, 840, 350, 359, 843, 358, 559, 351, + 385, 562, 349, 349, 385, 348, 335, 351, 371, 385, + 571, 370, 352, 337, 854, 385, 369, 352, 354, 349, + 382, 359, 359, 349, 349, 359, 349, 359, 359, 590, + 357, 359, 349, 383, 349, 348, 883, 359, 350, 358, + 356, 391, 383, 385, 350, 356, 356, 779, 350, 399, + 391, 399, 402, 900, 399, 352, 896, 407, 399, 407, + 399, 402, 407, 352, 385, 356, 407, 417, 915, 348, + 910, 354, 350, 393, 349, 359, 385, 427, 426, 353, + 350, 431, 358, 397, 353, 353, 427, 359, 354, 726, + 431, 727, 730, 728, 843, 729, 573, 447, 659, 731, + 331, 703, 818, 905, 845, 916, 447, 917, 845, 883, + 633, 843, 399, 431, 633, 633, 564, 796, 425, 427, + 794, 803, 799, 806, 474, 801, 431, 813, 809, -1, + -1, 811, -1, 474, 883, 485, -1, -1, -1, -1, + -1, -1, -1, -1, 485, -1, -1, -1, -1, -1, + -1, 883, 713, 714, 715, 716, 717, 718, 719, 720, + 721, 722, 723, 724, 725, 726, 727, 728, 729, 730, + 731, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 537, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 565, -1, 567, -1, 569, - -1, -1, -1, -1, 565, -1, 567, -1, 569, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 797, 798, - -1, -1, -1, -1, -1, 804, 805, -1, -1, -1, - -1, 810, -1, 812, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 566, -1, 568, -1, + 570, -1, -1, -1, -1, 566, -1, 568, -1, 570, + -1, -1, -1, -1, -1, -1, -1, 798, 799, -1, + -1, -1, -1, -1, 805, 806, -1, -1, -1, -1, + 811, -1, 813, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 622, -1, -1, -1, -1, -1, -1, -1, - -1, 622, 632, -1, -1, -1, -1, -1, -1, -1, - 640, 632, -1, -1, -1, -1, -1, -1, -1, 640, + -1, -1, -1, 623, -1, -1, -1, -1, -1, -1, + -1, -1, 623, 633, -1, -1, -1, -1, -1, -1, + -1, 641, 633, -1, -1, -1, -1, -1, -1, -1, + 641, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 709, + -1, -1, -1, -1, -1, -1, -1, -1, 709, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 708, -1, - -1, -1, -1, -1, -1, -1, -1, 708, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 737, -1, -1, + -1, 741, -1, -1, -1, -1, 737, -1, -1, -1, + 741, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 736, -1, -1, -1, - 740, -1, -1, -1, -1, 736, -1, -1, -1, 740, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 779, + -1, -1, -1, -1, -1, -1, -1, -1, 779, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 778, -1, - -1, -1, -1, -1, -1, -1, -1, 778, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 842, 843, -1, 845, -1, 845, -1, -1, + -1, 842, 843, -1, 845, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 841, 842, -1, 844, -1, 844, -1, -1, -1, - 841, 842, -1, 844, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 883, -1, -1, -1, -1, -1, -1, + -1, -1, 883, -1, -1, -1, -1, -1, -1, 899, + -1, -1, -1, -1, -1, -1, 906, -1, 899, -1, + -1, -1, -1, -1, -1, 906, 916, -1, -1, -1, + 920, -1, -1, -1, -1, 916, 926, -1, -1, 920, + -1, -1, -1, 0, -1, 926, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 882, -1, -1, -1, -1, -1, -1, -1, - -1, 882, -1, -1, -1, -1, -1, -1, 898, -1, - -1, -1, -1, -1, -1, 905, -1, 898, -1, -1, - -1, -1, -1, -1, 905, 915, -1, -1, -1, 919, - -1, -1, -1, -1, 915, 925, -1, -1, 919, -1, - -1, -1, 0, -1, 925, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, 326, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 351, -1, -1, -1, -1, -1, -1, - -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 373, 374, 375, 376, 377, - -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, - 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, - -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, - 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 351, -1, -1, -1, -1, -1, + -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, + 377, -1, -1, -1, -1, -1, -1, -1, -1, 386, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 348, 349, -1, 351, -1, 353, 354, -1, - -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, - 376, 377, -1, -1, -1, 381, 382, 383, 384, 385, - 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, - 396, -1, 398, 399, 400, 401, 402, 403, 404, 405, - 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, - 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, + -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, + -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, @@ -3164,97 +3122,52 @@ static const yytype_int16 yycheck[] = 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, -1, + 454, 455, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 348, 349, -1, 351, - -1, 353, -1, -1, -1, -1, -1, 359, 360, 361, - 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, 374, 375, 376, 377, -1, -1, -1, 381, - 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, - 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, - 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, - 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, - 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, 326, -1, -1, 329, - 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, - -1, 351, -1, 353, -1, -1, -1, -1, -1, 359, - 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 373, 374, 375, 376, 377, -1, -1, - -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, - 390, 391, 392, 393, 394, 395, 396, -1, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, - 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, - 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, + -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, + 351, -1, 353, 354, -1, -1, -1, -1, 359, 360, + 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 373, 374, 375, 376, 377, -1, -1, -1, + 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, + 391, 392, 393, 394, 395, 396, -1, 398, 399, 400, + 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, + 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, + 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -3289,7 +3202,7 @@ static const yytype_int16 yycheck[] = 318, 319, 320, 321, 322, 323, 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 348, 349, -1, 351, -1, -1, -1, -1, -1, -1, + 348, 349, -1, 351, -1, 353, -1, -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, 377, -1, -1, -1, 381, 382, 383, 384, 385, 386, 387, @@ -3299,7 +3212,143 @@ static const yytype_int16 yycheck[] = 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, + 448, 449, 450, 451, 452, 453, 454, 455, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 348, 349, -1, 351, -1, 353, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, + 375, 376, 377, -1, -1, -1, 381, 382, 383, 384, + 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, + 395, 396, -1, 398, 399, 400, 401, 402, 403, 404, + 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, + 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 3, 4, 5, 6, 7, 8, 9, 10, 11, + 12, 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, 329, 330, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 348, 349, -1, 351, + -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, + 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 373, 374, 375, 376, 377, -1, -1, -1, 381, + 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, + 392, 393, 394, 395, 396, -1, 398, 399, 400, 401, + 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, + 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, + 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, + 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, + 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, + 452, 453, 454, 455, 3, 4, 5, 6, 7, 8, + 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, + 19, 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, 326, -1, -1, + 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, + 349, -1, 351, -1, -1, -1, -1, -1, -1, -1, + 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 373, 374, 375, 376, 377, -1, + -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, + 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, + 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, + 419, 420, 421, 422, -1, 424, 425, 426, 427, 428, + 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, + 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, + 449, 450, 451, 452, 453, 454, 455, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, @@ -3331,111 +3380,66 @@ static const yytype_int16 yycheck[] = 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, + 316, -1, -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 348, 349, -1, 351, -1, -1, -1, -1, - -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, + -1, -1, 348, 349, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, - 376, 377, -1, -1, -1, 381, 382, 383, 384, 385, + 376, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, 323, - 324, 325, 326, -1, -1, 329, 330, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 348, 349, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, - 374, 375, 376, -1, -1, -1, -1, 381, 382, 383, - 384, 385, 386, 387, 388, 389, 390, 391, 392, -1, + 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, + 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, + 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, - 414, 415, 416, 417, 418, 419, 420, 421, 422, -1, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, - 12, 13, 14, 15, 16, 17, 18, 19, 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, 326, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 351, -1, + -1, -1, -1, -1, -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 351, - -1, -1, -1, -1, -1, -1, -1, 359, -1, -1, + 373, 374, 375, 376, 377, -1, -1, -1, -1, -1, + -1, -1, -1, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 373, 374, 375, 376, 377, -1, -1, -1, -1, - -1, -1, -1, -1, 386, 387, 388, 389, 390, 391, - 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 408, 409, 410, 411, - 412, 413, -1, -1, -1, -1, -1, -1, -1, -1, - 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, - 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, - 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, + -1, -1, -1, -1, -1, 408, 409, 410, 411, 412, + 413, -1, -1, -1, -1, -1, -1, -1, -1, 422, + -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, + 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, + 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, + 453, 454, 455, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, @@ -3472,15 +3476,151 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, - 390, 391, 392, 393, -1, -1, 396, -1, 398, 399, - -1, -1, 402, -1, -1, -1, -1, -1, 408, 409, - 410, 411, 412, 413, -1, -1, -1, -1, -1, -1, - -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, + -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, + 390, 391, 392, 393, -1, -1, 396, -1, 398, 399, + -1, -1, 402, -1, -1, -1, -1, -1, 408, 409, + 410, 411, 412, 413, -1, -1, -1, -1, -1, -1, + -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, + 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, + 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, + 450, 451, 452, 453, 454, 455, 3, 4, 5, 6, + 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, + 17, 18, 19, 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, + -1, -1, -1, 320, 321, 322, 323, 324, 325, 326, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 359, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, + -1, -1, -1, -1, -1, -1, -1, -1, 385, 386, + 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, + -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, + 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, + 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, + 447, 448, 449, 450, 451, 452, 453, 454, 455, 3, + 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, + 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, 323, + 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 351, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, + 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 386, 387, 388, 389, 390, 391, 392, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, + -1, -1, -1, -1, -1, -1, -1, -1, 422, -1, + 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, + 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, + 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, + 454, 455, 3, 4, 5, 6, 7, 8, 9, 10, + 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, + 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, 373, 374, 375, 376, -1, -1, -1, -1, + -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, + 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, 408, 409, 410, + 411, 412, 413, -1, -1, -1, -1, -1, -1, -1, + -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, + 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, + 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, + 451, 452, 453, 454, 455, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, @@ -3515,108 +3655,63 @@ static const yytype_int16 yycheck[] = -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 359, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, - -1, -1, -1, -1, -1, -1, -1, 385, 386, 387, + -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 3, 4, 5, - 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, - 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, 323, 324, 325, - 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 351, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, - 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 408, 409, 410, 411, 412, 413, -1, -1, - -1, -1, -1, -1, -1, -1, 422, -1, 424, 425, - 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, - 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, - 446, 447, 448, 449, 450, 451, 452, 453, 454, 3, - 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, - 14, 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, 323, - 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, + 448, 449, 450, 451, 452, 453, 454, 455, 3, 4, + 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 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, -1, -1, -1, 320, 321, 322, 323, 324, + 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 354, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, - 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 386, 387, 388, 389, 390, 391, 392, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, + 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, + -1, 386, 387, 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 408, 409, 410, 411, 412, 413, - -1, -1, -1, -1, -1, -1, -1, -1, 422, -1, - 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, - 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, - 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, - 454, 3, 4, 5, 6, 7, 8, 9, 10, 11, + -1, -1, -1, 408, 409, 410, 411, 412, 413, -1, + -1, -1, -1, -1, -1, -1, -1, 422, -1, 424, + 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, + 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, + 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, + 455, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, @@ -3651,7 +3746,7 @@ static const yytype_int16 yycheck[] = 322, 323, 324, 325, 326, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, 354, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, 390, 391, @@ -3661,97 +3756,50 @@ static const yytype_int16 yycheck[] = 422, -1, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, - 452, 453, 454, 3, 4, 5, 6, 7, 8, 9, + 452, 453, 454, 455, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 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, + 60, -1, -1, 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, -1, -1, -1, - 320, 321, 322, 323, 324, 325, 326, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 354, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 373, 374, 375, 376, -1, -1, -1, - -1, -1, -1, -1, -1, -1, 386, 387, 388, 389, - 390, 391, 392, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 408, 409, - 410, 411, 412, 413, -1, -1, -1, -1, -1, -1, - -1, -1, 422, -1, 424, 425, 426, 427, 428, 429, - 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, - 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, - 450, 451, 452, 453, 454, 3, 4, 5, 6, 7, - 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, - 18, 19, 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, -1, - -1, -1, 320, 321, 322, 323, 324, 325, 326, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, + 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, -1, -1, -1, + -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, + 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, + -1, -1, -1, 353, 354, -1, -1, -1, -1, -1, + 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 373, 374, 375, 376, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 386, 387, - 388, 389, 390, 391, 392, -1, -1, -1, -1, -1, + -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, + -1, 391, 392, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 408, 409, 410, 411, 412, 413, -1, -1, -1, -1, - -1, -1, -1, -1, 422, -1, 424, 425, 426, 427, - 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, - 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 4, 5, 6, + -1, -1, -1, -1, 414, 415, 416, 417, 418, 419, + 420, 421, -1, -1, -1, -1, -1, -1, -1, -1, + -1, -1, -1, -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, @@ -3829,8 +3877,8 @@ static const yytype_int16 yycheck[] = 314, 315, 316, -1, -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, 348, 349, -1, -1, -1, 353, - 354, -1, -1, -1, -1, -1, 360, 361, 362, 363, + -1, -1, -1, -1, 348, 349, -1, -1, 352, -1, + -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, 391, 392, -1, @@ -3873,7 +3921,7 @@ static const yytype_int16 yycheck[] = -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, - -1, 352, -1, -1, -1, -1, -1, -1, -1, 360, + -1, -1, 353, -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, @@ -3916,7 +3964,7 @@ static const yytype_int16 yycheck[] = -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - 348, 349, -1, -1, -1, 353, -1, -1, -1, -1, + 348, 349, -1, -1, 352, -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, @@ -3959,8 +4007,8 @@ static const yytype_int16 yycheck[] = 315, 316, -1, -1, -1, -1, -1, -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 348, 349, -1, -1, 352, -1, -1, - -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, + -1, -1, -1, 348, 349, -1, -1, -1, -1, -1, + -1, -1, -1, -1, 359, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, 391, 392, -1, -1, @@ -4003,7 +4051,7 @@ static const yytype_int16 yycheck[] = -1, 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 348, 349, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 359, 360, 361, + -1, -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, 383, 384, 385, 386, -1, -1, -1, -1, 391, @@ -4130,57 +4178,13 @@ static const yytype_int16 yycheck[] = 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, -1, -1, -1, -1, -1, -1, - 323, -1, -1, -1, -1, -1, 329, 330, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, 348, 349, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, 360, 361, 362, - 363, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, 381, 382, - 383, 384, 385, 386, -1, -1, -1, -1, 391, 392, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, 414, 415, 416, 417, 418, 419, 420, 421, -1, - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, - -1, -1, -1, 436, 4, 5, 6, 7, 8, 9, - 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, - 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, -1, -1, 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, -1, -1, -1, - -1, -1, -1, 323, -1, -1, -1, -1, -1, -1, + 323, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -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, 391, 392 + -1, -1, -1, 386, -1, -1, -1, -1, 391, 392 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing @@ -4224,136 +4228,136 @@ static const yytype_int16 yystos[] = 409, 410, 411, 412, 413, 422, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, - 448, 449, 450, 451, 452, 453, 454, 486, 487, 490, - 491, 492, 493, 497, 498, 499, 500, 501, 502, 505, - 506, 507, 508, 509, 511, 516, 517, 518, 559, 560, - 561, 563, 570, 574, 575, 580, 583, 349, 349, 349, - 349, 349, 349, 349, 349, 351, 517, 353, 385, 349, - 349, 359, 385, 359, 562, 350, 356, 494, 495, 496, - 506, 511, 356, 359, 385, 359, 385, 507, 511, 367, - 513, 514, 0, 560, 491, 499, 506, 359, 490, 385, - 566, 567, 584, 585, 382, 385, 566, 382, 566, 382, - 566, 382, 566, 382, 566, 566, 584, 382, 566, 385, - 564, 565, 511, 520, 353, 385, 409, 503, 504, 385, - 510, 351, 359, 512, 353, 538, 563, 495, 494, 496, - 385, 385, 349, 358, 512, 353, 356, 359, 489, 329, - 330, 348, 349, 360, 361, 362, 363, 381, 382, 383, - 384, 385, 414, 415, 416, 417, 418, 419, 420, 421, - 456, 457, 458, 460, 461, 462, 463, 464, 465, 466, - 467, 468, 509, 511, 515, 512, 350, 385, 359, 358, - 356, 350, 356, 350, 356, 358, 356, 356, 356, 350, - 356, 356, 356, 356, 356, 356, 356, 350, 356, 350, - 356, 349, 352, 356, 359, 506, 511, 521, 522, 519, - 358, 350, 356, 350, 356, 352, 467, 469, 470, 471, - 472, 473, 474, 475, 476, 477, 478, 479, 480, 351, - 359, 353, 354, 359, 393, 394, 395, 396, 398, 399, - 400, 401, 402, 403, 404, 405, 406, 407, 423, 467, - 480, 482, 484, 486, 490, 509, 511, 527, 528, 529, - 530, 531, 539, 540, 541, 542, 545, 546, 549, 550, - 551, 558, 563, 512, 358, 512, 353, 482, 525, 358, - 488, 385, 356, 359, 467, 467, 484, 329, 330, 351, - 355, 350, 350, 356, 392, 482, 349, 467, 356, 368, - 563, 348, 351, 382, 567, 584, 385, 585, 348, 381, - 382, 383, 384, 571, 572, 382, 480, 485, 573, 382, - 381, 382, 383, 384, 576, 577, 382, 485, 578, 382, - 348, 579, 382, 584, 385, 485, 581, 582, 382, 485, - 352, 565, 511, 385, 523, 524, 354, 522, 521, 485, - 504, 385, 364, 365, 366, 361, 363, 327, 328, 331, - 332, 367, 368, 333, 334, 371, 370, 369, 335, 337, - 336, 372, 352, 352, 480, 354, 532, 349, 359, 359, - 553, 349, 349, 359, 359, 484, 349, 484, 357, 359, - 359, 359, 359, 338, 339, 340, 341, 342, 343, 344, - 345, 346, 347, 358, 483, 356, 359, 354, 528, 542, - 546, 551, 525, 358, 354, 525, 526, 525, 521, 385, - 350, 459, 484, 385, 482, 467, 348, 382, 568, 569, - 350, 358, 350, 356, 350, 356, 350, 356, 356, 350, - 356, 350, 356, 350, 356, 356, 350, 356, 356, 350, - 356, 350, 356, 350, 350, 523, 512, 356, 359, 354, - 467, 467, 467, 469, 469, 470, 470, 471, 471, 471, - 471, 472, 472, 473, 474, 475, 476, 477, 478, 481, - 352, 539, 552, 528, 554, 484, 359, 484, 357, 482, - 482, 525, 354, 356, 354, 352, 352, 356, 352, 356, - 572, 571, 485, 573, 577, 576, 485, 578, 348, 579, - 581, 582, 359, 524, 484, 533, 484, 499, 544, 393, - 527, 540, 555, 350, 350, 354, 525, 348, 382, 350, - 350, 350, 350, 350, 350, 357, 354, 385, 350, 349, - 544, 556, 557, 535, 536, 537, 543, 547, 482, 358, - 529, 534, 538, 484, 359, 350, 397, 531, 529, 353, - 525, 350, 484, 534, 535, 539, 548, 359, 354 + 448, 449, 450, 451, 452, 453, 454, 455, 487, 488, + 491, 492, 493, 494, 498, 499, 500, 501, 502, 503, + 506, 507, 508, 509, 510, 512, 517, 518, 519, 560, + 561, 562, 564, 571, 575, 576, 581, 584, 349, 349, + 349, 349, 349, 349, 349, 349, 351, 518, 353, 385, + 349, 349, 359, 385, 359, 563, 350, 356, 495, 496, + 497, 507, 512, 356, 359, 385, 359, 385, 508, 512, + 367, 514, 515, 0, 561, 492, 500, 507, 359, 491, + 385, 567, 568, 585, 586, 382, 385, 567, 382, 567, + 382, 567, 382, 567, 382, 567, 567, 585, 382, 567, + 385, 565, 566, 512, 521, 353, 385, 409, 504, 505, + 385, 511, 351, 359, 513, 353, 539, 564, 496, 495, + 497, 385, 385, 349, 358, 513, 353, 356, 359, 490, + 329, 330, 348, 349, 360, 361, 362, 363, 381, 382, + 383, 384, 385, 414, 415, 416, 417, 418, 419, 420, + 421, 457, 458, 459, 461, 462, 463, 464, 465, 466, + 467, 468, 469, 510, 512, 516, 513, 350, 385, 359, + 358, 356, 350, 356, 350, 356, 358, 356, 356, 356, + 350, 356, 356, 356, 356, 356, 356, 356, 350, 356, + 350, 356, 349, 352, 356, 359, 507, 512, 522, 523, + 520, 358, 350, 356, 350, 356, 352, 468, 470, 471, + 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, + 351, 359, 353, 354, 359, 393, 394, 395, 396, 398, + 399, 400, 401, 402, 403, 404, 405, 406, 407, 423, + 468, 481, 483, 485, 487, 491, 510, 512, 528, 529, + 530, 531, 532, 540, 541, 542, 543, 546, 547, 550, + 551, 552, 559, 564, 513, 358, 513, 353, 483, 526, + 358, 489, 385, 356, 359, 468, 468, 485, 329, 330, + 351, 355, 350, 350, 356, 392, 483, 349, 468, 356, + 368, 564, 348, 351, 382, 568, 585, 385, 586, 348, + 381, 382, 383, 384, 572, 573, 382, 481, 486, 574, + 382, 381, 382, 383, 384, 577, 578, 382, 486, 579, + 382, 348, 580, 382, 585, 385, 486, 582, 583, 382, + 486, 352, 566, 512, 385, 524, 525, 354, 523, 522, + 486, 505, 385, 364, 365, 366, 361, 363, 327, 328, + 331, 332, 367, 368, 333, 334, 371, 370, 369, 335, + 337, 336, 372, 352, 352, 481, 354, 533, 349, 359, + 359, 554, 349, 349, 359, 359, 485, 349, 485, 357, + 359, 359, 359, 359, 338, 339, 340, 341, 342, 343, + 344, 345, 346, 347, 358, 484, 356, 359, 354, 529, + 543, 547, 552, 526, 358, 354, 526, 527, 526, 522, + 385, 350, 460, 485, 385, 483, 468, 348, 382, 569, + 570, 350, 358, 350, 356, 350, 356, 350, 356, 356, + 350, 356, 350, 356, 350, 356, 356, 350, 356, 356, + 350, 356, 350, 356, 350, 350, 524, 513, 356, 359, + 354, 468, 468, 468, 470, 470, 471, 471, 472, 472, + 472, 472, 473, 473, 474, 475, 476, 477, 478, 479, + 482, 352, 540, 553, 529, 555, 485, 359, 485, 357, + 483, 483, 526, 354, 356, 354, 352, 352, 356, 352, + 356, 573, 572, 486, 574, 578, 577, 486, 579, 348, + 580, 582, 583, 359, 525, 485, 534, 485, 500, 545, + 393, 528, 541, 556, 350, 350, 354, 526, 348, 382, + 350, 350, 350, 350, 350, 350, 357, 354, 385, 350, + 349, 545, 557, 558, 536, 537, 538, 544, 548, 483, + 358, 530, 535, 539, 485, 359, 350, 397, 532, 530, + 353, 526, 350, 485, 535, 536, 540, 549, 359, 354 }; /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_int16 yyr1[] = { - 0, 455, 456, 457, 457, 457, 457, 457, 457, 457, - 457, 457, 457, 457, 457, 457, 457, 457, 458, 458, - 458, 458, 458, 458, 459, 460, 461, 462, 462, 463, - 463, 464, 464, 465, 466, 466, 466, 467, 467, 467, - 467, 468, 468, 468, 468, 469, 469, 469, 469, 470, - 470, 470, 471, 471, 471, 472, 472, 472, 472, 472, - 473, 473, 473, 474, 474, 475, 475, 476, 476, 477, - 477, 478, 478, 479, 479, 480, 481, 480, 482, 482, - 483, 483, 483, 483, 483, 483, 483, 483, 483, 483, - 483, 484, 484, 485, 486, 486, 486, 486, 486, 486, - 486, 486, 486, 486, 486, 488, 487, 489, 489, 490, - 490, 490, 490, 491, 491, 492, 492, 493, 494, 494, - 495, 495, 495, 495, 496, 497, 497, 497, 497, 497, - 498, 498, 498, 498, 498, 499, 499, 500, 501, 501, - 501, 501, 501, 501, 501, 501, 502, 503, 503, 504, - 504, 504, 505, 506, 506, 507, 507, 507, 507, 507, - 507, 507, 507, 507, 507, 507, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 508, 508, 508, 508, 508, 508, 508, 508, 508, - 508, 509, 510, 510, 511, 511, 512, 512, 512, 512, - 513, 513, 514, 515, 515, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 516, 516, 516, 516, 516, 516, 516, 516, 516, 516, - 517, 517, 517, 519, 518, 520, 518, 521, 521, 522, - 522, 523, 523, 524, 524, 525, 525, 525, 525, 526, - 526, 527, 528, 528, 529, 529, 529, 529, 529, 529, - 529, 529, 530, 531, 532, 533, 531, 534, 534, 536, - 535, 537, 535, 538, 538, 539, 539, 540, 540, 541, - 541, 542, 543, 543, 544, 544, 545, 545, 547, 546, - 548, 548, 549, 549, 550, 550, 552, 551, 553, 551, - 554, 551, 555, 555, 556, 556, 557, 557, 558, 558, - 558, 558, 558, 558, 558, 558, 559, 559, 560, 560, - 560, 562, 561, 563, 564, 564, 565, 565, 566, 566, - 567, 567, 568, 568, 569, 569, 570, 570, 570, 570, - 570, 570, 571, 571, 572, 572, 572, 572, 572, 573, - 573, 574, 574, 575, 575, 575, 575, 575, 575, 575, - 575, 576, 576, 577, 577, 577, 577, 578, 578, 579, - 579, 580, 580, 580, 580, 581, 581, 582, 583, 583, - 584, 584, 585, 585 + 0, 456, 457, 458, 458, 458, 458, 458, 458, 458, + 458, 458, 458, 458, 458, 458, 458, 458, 459, 459, + 459, 459, 459, 459, 460, 461, 462, 463, 463, 464, + 464, 465, 465, 466, 467, 467, 467, 468, 468, 468, + 468, 469, 469, 469, 469, 470, 470, 470, 470, 471, + 471, 471, 472, 472, 472, 473, 473, 473, 473, 473, + 474, 474, 474, 475, 475, 476, 476, 477, 477, 478, + 478, 479, 479, 480, 480, 481, 482, 481, 483, 483, + 484, 484, 484, 484, 484, 484, 484, 484, 484, 484, + 484, 485, 485, 486, 487, 487, 487, 487, 487, 487, + 487, 487, 487, 487, 487, 489, 488, 490, 490, 491, + 491, 491, 491, 492, 492, 493, 493, 494, 495, 495, + 496, 496, 496, 496, 497, 498, 498, 498, 498, 498, + 499, 499, 499, 499, 499, 500, 500, 501, 502, 502, + 502, 502, 502, 502, 502, 502, 502, 503, 504, 504, + 505, 505, 505, 506, 507, 507, 508, 508, 508, 508, + 508, 508, 508, 508, 508, 508, 508, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 509, 509, 509, 509, 509, 509, 509, 509, + 509, 509, 510, 511, 511, 512, 512, 513, 513, 513, + 513, 514, 514, 515, 516, 516, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 517, 517, 517, 517, 517, 517, 517, 517, 517, + 517, 518, 518, 518, 520, 519, 521, 519, 522, 522, + 523, 523, 524, 524, 525, 525, 526, 526, 526, 526, + 527, 527, 528, 529, 529, 530, 530, 530, 530, 530, + 530, 530, 530, 531, 532, 533, 534, 532, 535, 535, + 537, 536, 538, 536, 539, 539, 540, 540, 541, 541, + 542, 542, 543, 544, 544, 545, 545, 546, 546, 548, + 547, 549, 549, 550, 550, 551, 551, 553, 552, 554, + 552, 555, 552, 556, 556, 557, 557, 558, 558, 559, + 559, 559, 559, 559, 559, 559, 559, 560, 560, 561, + 561, 561, 563, 562, 564, 565, 565, 566, 566, 567, + 567, 568, 568, 569, 569, 570, 570, 571, 571, 571, + 571, 571, 571, 572, 572, 573, 573, 573, 573, 573, + 574, 574, 575, 575, 576, 576, 576, 576, 576, 576, + 576, 576, 577, 577, 578, 578, 578, 578, 579, 579, + 580, 580, 581, 581, 581, 581, 582, 582, 583, 584, + 584, 585, 585, 586, 586 }; /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */ @@ -4373,14 +4377,14 @@ static const yytype_int8 yyr2[] = 3, 3, 4, 1, 1, 2, 3, 3, 2, 3, 2, 1, 2, 1, 1, 1, 3, 4, 6, 5, 1, 2, 3, 5, 4, 1, 2, 1, 1, 1, - 1, 1, 1, 1, 1, 1, 4, 1, 3, 1, - 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, + 1, 1, 1, 1, 1, 1, 1, 4, 1, 3, + 1, 3, 1, 1, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, - 4, 1, 1, 3, 2, 3, 2, 3, 3, 4, - 1, 0, 3, 1, 3, 1, 1, 1, 1, 1, + 1, 4, 1, 1, 3, 2, 3, 2, 3, 3, + 4, 1, 0, 3, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, @@ -4412,22 +4416,22 @@ static const yytype_int8 yyr2[] = 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 2, 1, - 3, 1, 1, 1, 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, 2, 2, 2, 1, 2, 1, 1, - 1, 0, 3, 5, 1, 3, 1, 4, 1, 3, - 5, 5, 1, 3, 1, 3, 4, 6, 6, 8, - 6, 8, 1, 3, 1, 1, 1, 1, 1, 1, - 3, 4, 6, 4, 6, 6, 8, 6, 8, 6, - 8, 1, 3, 1, 1, 1, 1, 1, 3, 1, - 3, 6, 8, 4, 6, 1, 3, 1, 4, 6, - 1, 3, 3, 3 + 1, 1, 1, 1, 0, 6, 0, 5, 1, 2, + 3, 4, 1, 3, 1, 2, 1, 3, 4, 2, + 1, 3, 1, 1, 1, 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, 2, 2, 2, 1, 2, 1, + 1, 1, 0, 3, 5, 1, 3, 1, 4, 1, + 3, 5, 5, 1, 3, 1, 3, 4, 6, 6, + 8, 6, 8, 1, 3, 1, 1, 1, 1, 1, + 1, 3, 4, 6, 4, 6, 6, 8, 6, 8, + 6, 8, 1, 3, 1, 1, 1, 1, 1, 3, + 1, 3, 6, 8, 4, 6, 1, 3, 1, 4, + 6, 1, 3, 3, 3 }; @@ -5177,7 +5181,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleVariable((yyvsp[0].lex).loc, (yyvsp[0].lex).symbol, (yyvsp[0].lex).string); } -#line 5181 "MachineIndependent/glslang_tab.cpp" +#line 5185 "MachineIndependent/glslang_tab.cpp" break; case 3: /* primary_expression: variable_identifier */ @@ -5185,7 +5189,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5189 "MachineIndependent/glslang_tab.cpp" +#line 5193 "MachineIndependent/glslang_tab.cpp" break; case 4: /* primary_expression: LEFT_PAREN expression RIGHT_PAREN */ @@ -5195,7 +5199,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode)->getAsConstantUnion()) (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } -#line 5199 "MachineIndependent/glslang_tab.cpp" +#line 5203 "MachineIndependent/glslang_tab.cpp" break; case 5: /* primary_expression: FLOATCONSTANT */ @@ -5203,7 +5207,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 5207 "MachineIndependent/glslang_tab.cpp" +#line 5211 "MachineIndependent/glslang_tab.cpp" break; case 6: /* primary_expression: INTCONSTANT */ @@ -5211,7 +5215,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 5215 "MachineIndependent/glslang_tab.cpp" +#line 5219 "MachineIndependent/glslang_tab.cpp" break; case 7: /* primary_expression: UINTCONSTANT */ @@ -5220,7 +5224,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned literal"); (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 5224 "MachineIndependent/glslang_tab.cpp" +#line 5228 "MachineIndependent/glslang_tab.cpp" break; case 8: /* primary_expression: BOOLCONSTANT */ @@ -5228,7 +5232,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 5232 "MachineIndependent/glslang_tab.cpp" +#line 5236 "MachineIndependent/glslang_tab.cpp" break; case 9: /* primary_expression: STRING_LITERAL */ @@ -5236,7 +5240,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 5240 "MachineIndependent/glslang_tab.cpp" +#line 5244 "MachineIndependent/glslang_tab.cpp" break; case 10: /* primary_expression: INT32CONSTANT */ @@ -5245,7 +5249,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5249 "MachineIndependent/glslang_tab.cpp" +#line 5253 "MachineIndependent/glslang_tab.cpp" break; case 11: /* primary_expression: UINT32CONSTANT */ @@ -5254,7 +5258,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5258 "MachineIndependent/glslang_tab.cpp" +#line 5262 "MachineIndependent/glslang_tab.cpp" break; case 12: /* primary_expression: INT64CONSTANT */ @@ -5263,7 +5267,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5267 "MachineIndependent/glslang_tab.cpp" +#line 5271 "MachineIndependent/glslang_tab.cpp" break; case 13: /* primary_expression: UINT64CONSTANT */ @@ -5272,7 +5276,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5276 "MachineIndependent/glslang_tab.cpp" +#line 5280 "MachineIndependent/glslang_tab.cpp" break; case 14: /* primary_expression: INT16CONSTANT */ @@ -5281,7 +5285,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5285 "MachineIndependent/glslang_tab.cpp" +#line 5289 "MachineIndependent/glslang_tab.cpp" break; case 15: /* primary_expression: UINT16CONSTANT */ @@ -5290,7 +5294,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5294 "MachineIndependent/glslang_tab.cpp" +#line 5298 "MachineIndependent/glslang_tab.cpp" break; case 16: /* primary_expression: DOUBLECONSTANT */ @@ -5301,7 +5305,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5305 "MachineIndependent/glslang_tab.cpp" +#line 5309 "MachineIndependent/glslang_tab.cpp" break; case 17: /* primary_expression: FLOAT16CONSTANT */ @@ -5310,7 +5314,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5314 "MachineIndependent/glslang_tab.cpp" +#line 5318 "MachineIndependent/glslang_tab.cpp" break; case 18: /* postfix_expression: primary_expression */ @@ -5318,7 +5322,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5322 "MachineIndependent/glslang_tab.cpp" +#line 5326 "MachineIndependent/glslang_tab.cpp" break; case 19: /* postfix_expression: postfix_expression LEFT_BRACKET integer_expression RIGHT_BRACKET */ @@ -5326,7 +5330,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleBracketDereference((yyvsp[-2].lex).loc, (yyvsp[-3].interm.intermTypedNode), (yyvsp[-1].interm.intermTypedNode)); } -#line 5330 "MachineIndependent/glslang_tab.cpp" +#line 5334 "MachineIndependent/glslang_tab.cpp" break; case 20: /* postfix_expression: function_call */ @@ -5334,7 +5338,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5338 "MachineIndependent/glslang_tab.cpp" +#line 5342 "MachineIndependent/glslang_tab.cpp" break; case 21: /* postfix_expression: postfix_expression DOT IDENTIFIER */ @@ -5342,7 +5346,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = parseContext.handleDotDereference((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode), *(yyvsp[0].lex).string); } -#line 5346 "MachineIndependent/glslang_tab.cpp" +#line 5350 "MachineIndependent/glslang_tab.cpp" break; case 22: /* postfix_expression: postfix_expression INC_OP */ @@ -5352,7 +5356,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5356 "MachineIndependent/glslang_tab.cpp" +#line 5360 "MachineIndependent/glslang_tab.cpp" break; case 23: /* postfix_expression: postfix_expression DEC_OP */ @@ -5362,7 +5366,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5366 "MachineIndependent/glslang_tab.cpp" +#line 5370 "MachineIndependent/glslang_tab.cpp" break; case 24: /* integer_expression: expression */ @@ -5371,7 +5375,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.integerCheck((yyvsp[0].interm.intermTypedNode), "[]"); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5375 "MachineIndependent/glslang_tab.cpp" +#line 5379 "MachineIndependent/glslang_tab.cpp" break; case 25: /* function_call: function_call_or_method */ @@ -5380,7 +5384,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = parseContext.handleFunctionCall((yyvsp[0].interm).loc, (yyvsp[0].interm).function, (yyvsp[0].interm).intermNode); delete (yyvsp[0].interm).function; } -#line 5384 "MachineIndependent/glslang_tab.cpp" +#line 5388 "MachineIndependent/glslang_tab.cpp" break; case 26: /* function_call_or_method: function_call_generic */ @@ -5388,7 +5392,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[0].interm); } -#line 5392 "MachineIndependent/glslang_tab.cpp" +#line 5396 "MachineIndependent/glslang_tab.cpp" break; case 27: /* function_call_generic: function_call_header_with_parameters RIGHT_PAREN */ @@ -5397,7 +5401,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5401 "MachineIndependent/glslang_tab.cpp" +#line 5405 "MachineIndependent/glslang_tab.cpp" break; case 28: /* function_call_generic: function_call_header_no_parameters RIGHT_PAREN */ @@ -5406,7 +5410,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-1].interm); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 5410 "MachineIndependent/glslang_tab.cpp" +#line 5414 "MachineIndependent/glslang_tab.cpp" break; case 29: /* function_call_header_no_parameters: function_call_header VOID */ @@ -5414,7 +5418,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[-1].interm); } -#line 5418 "MachineIndependent/glslang_tab.cpp" +#line 5422 "MachineIndependent/glslang_tab.cpp" break; case 30: /* function_call_header_no_parameters: function_call_header */ @@ -5422,7 +5426,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[0].interm); } -#line 5426 "MachineIndependent/glslang_tab.cpp" +#line 5430 "MachineIndependent/glslang_tab.cpp" break; case 31: /* function_call_header_with_parameters: function_call_header assignment_expression */ @@ -5434,7 +5438,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm).function; (yyval.interm).intermNode = (yyvsp[0].interm.intermTypedNode); } -#line 5438 "MachineIndependent/glslang_tab.cpp" +#line 5442 "MachineIndependent/glslang_tab.cpp" break; case 32: /* function_call_header_with_parameters: function_call_header_with_parameters COMMA assignment_expression */ @@ -5446,7 +5450,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 5450 "MachineIndependent/glslang_tab.cpp" +#line 5454 "MachineIndependent/glslang_tab.cpp" break; case 33: /* function_call_header: function_identifier LEFT_PAREN */ @@ -5454,7 +5458,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[-1].interm); } -#line 5458 "MachineIndependent/glslang_tab.cpp" +#line 5462 "MachineIndependent/glslang_tab.cpp" break; case 34: /* function_identifier: type_specifier */ @@ -5464,7 +5468,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5468 "MachineIndependent/glslang_tab.cpp" +#line 5472 "MachineIndependent/glslang_tab.cpp" break; case 35: /* function_identifier: postfix_expression */ @@ -5496,7 +5500,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = new TFunction(empty, TType(EbtVoid), EOpNull); } } -#line 5500 "MachineIndependent/glslang_tab.cpp" +#line 5504 "MachineIndependent/glslang_tab.cpp" break; case 36: /* function_identifier: non_uniform_qualifier */ @@ -5506,7 +5510,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; (yyval.interm).function = parseContext.handleConstructorCall((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type)); } -#line 5510 "MachineIndependent/glslang_tab.cpp" +#line 5514 "MachineIndependent/glslang_tab.cpp" break; case 37: /* unary_expression: postfix_expression */ @@ -5517,7 +5521,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (TIntermMethod* method = (yyvsp[0].interm.intermTypedNode)->getAsMethodNode()) parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "incomplete method syntax", method->getMethodName().c_str(), ""); } -#line 5521 "MachineIndependent/glslang_tab.cpp" +#line 5525 "MachineIndependent/glslang_tab.cpp" break; case 38: /* unary_expression: INC_OP unary_expression */ @@ -5526,7 +5530,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5530 "MachineIndependent/glslang_tab.cpp" +#line 5534 "MachineIndependent/glslang_tab.cpp" break; case 39: /* unary_expression: DEC_OP unary_expression */ @@ -5535,7 +5539,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 5539 "MachineIndependent/glslang_tab.cpp" +#line 5543 "MachineIndependent/glslang_tab.cpp" break; case 40: /* unary_expression: unary_operator unary_expression */ @@ -5556,38 +5560,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode)->getAsConstantUnion()->setExpression(); } } -#line 5560 "MachineIndependent/glslang_tab.cpp" +#line 5564 "MachineIndependent/glslang_tab.cpp" break; case 41: /* unary_operator: PLUS */ #line 627 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNull; } -#line 5566 "MachineIndependent/glslang_tab.cpp" +#line 5570 "MachineIndependent/glslang_tab.cpp" break; case 42: /* unary_operator: DASH */ #line 628 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpNegative; } -#line 5572 "MachineIndependent/glslang_tab.cpp" +#line 5576 "MachineIndependent/glslang_tab.cpp" break; case 43: /* unary_operator: BANG */ #line 629 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLogicalNot; } -#line 5578 "MachineIndependent/glslang_tab.cpp" +#line 5582 "MachineIndependent/glslang_tab.cpp" break; case 44: /* unary_operator: TILDE */ #line 630 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpBitwiseNot; parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise not"); } -#line 5585 "MachineIndependent/glslang_tab.cpp" +#line 5589 "MachineIndependent/glslang_tab.cpp" break; case 45: /* multiplicative_expression: unary_expression */ #line 636 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5591 "MachineIndependent/glslang_tab.cpp" +#line 5595 "MachineIndependent/glslang_tab.cpp" break; case 46: /* multiplicative_expression: multiplicative_expression STAR unary_expression */ @@ -5597,7 +5601,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5601 "MachineIndependent/glslang_tab.cpp" +#line 5605 "MachineIndependent/glslang_tab.cpp" break; case 47: /* multiplicative_expression: multiplicative_expression SLASH unary_expression */ @@ -5607,7 +5611,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5611 "MachineIndependent/glslang_tab.cpp" +#line 5615 "MachineIndependent/glslang_tab.cpp" break; case 48: /* multiplicative_expression: multiplicative_expression PERCENT unary_expression */ @@ -5618,13 +5622,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5622 "MachineIndependent/glslang_tab.cpp" +#line 5626 "MachineIndependent/glslang_tab.cpp" break; case 49: /* additive_expression: multiplicative_expression */ #line 656 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5628 "MachineIndependent/glslang_tab.cpp" +#line 5632 "MachineIndependent/glslang_tab.cpp" break; case 50: /* additive_expression: additive_expression PLUS multiplicative_expression */ @@ -5634,7 +5638,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5638 "MachineIndependent/glslang_tab.cpp" +#line 5642 "MachineIndependent/glslang_tab.cpp" break; case 51: /* additive_expression: additive_expression DASH multiplicative_expression */ @@ -5644,13 +5648,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5648 "MachineIndependent/glslang_tab.cpp" +#line 5652 "MachineIndependent/glslang_tab.cpp" break; case 52: /* shift_expression: additive_expression */ #line 670 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5654 "MachineIndependent/glslang_tab.cpp" +#line 5658 "MachineIndependent/glslang_tab.cpp" break; case 53: /* shift_expression: shift_expression LEFT_OP additive_expression */ @@ -5661,7 +5665,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5665 "MachineIndependent/glslang_tab.cpp" +#line 5669 "MachineIndependent/glslang_tab.cpp" break; case 54: /* shift_expression: shift_expression RIGHT_OP additive_expression */ @@ -5672,13 +5676,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5676 "MachineIndependent/glslang_tab.cpp" +#line 5680 "MachineIndependent/glslang_tab.cpp" break; case 55: /* relational_expression: shift_expression */ #line 686 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5682 "MachineIndependent/glslang_tab.cpp" +#line 5686 "MachineIndependent/glslang_tab.cpp" break; case 56: /* relational_expression: relational_expression LEFT_ANGLE shift_expression */ @@ -5688,7 +5692,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5692 "MachineIndependent/glslang_tab.cpp" +#line 5696 "MachineIndependent/glslang_tab.cpp" break; case 57: /* relational_expression: relational_expression RIGHT_ANGLE shift_expression */ @@ -5698,7 +5702,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5702 "MachineIndependent/glslang_tab.cpp" +#line 5706 "MachineIndependent/glslang_tab.cpp" break; case 58: /* relational_expression: relational_expression LE_OP shift_expression */ @@ -5708,7 +5712,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5712 "MachineIndependent/glslang_tab.cpp" +#line 5716 "MachineIndependent/glslang_tab.cpp" break; case 59: /* relational_expression: relational_expression GE_OP shift_expression */ @@ -5718,13 +5722,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5722 "MachineIndependent/glslang_tab.cpp" +#line 5726 "MachineIndependent/glslang_tab.cpp" break; case 60: /* equality_expression: relational_expression */ #line 710 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5728 "MachineIndependent/glslang_tab.cpp" +#line 5732 "MachineIndependent/glslang_tab.cpp" break; case 61: /* equality_expression: equality_expression EQ_OP relational_expression */ @@ -5738,7 +5742,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5742 "MachineIndependent/glslang_tab.cpp" +#line 5746 "MachineIndependent/glslang_tab.cpp" break; case 62: /* equality_expression: equality_expression NE_OP relational_expression */ @@ -5752,13 +5756,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5756 "MachineIndependent/glslang_tab.cpp" +#line 5760 "MachineIndependent/glslang_tab.cpp" break; case 63: /* and_expression: equality_expression */ #line 732 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5762 "MachineIndependent/glslang_tab.cpp" +#line 5766 "MachineIndependent/glslang_tab.cpp" break; case 64: /* and_expression: and_expression AMPERSAND equality_expression */ @@ -5769,13 +5773,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5773 "MachineIndependent/glslang_tab.cpp" +#line 5777 "MachineIndependent/glslang_tab.cpp" break; case 65: /* exclusive_or_expression: and_expression */ #line 742 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5779 "MachineIndependent/glslang_tab.cpp" +#line 5783 "MachineIndependent/glslang_tab.cpp" break; case 66: /* exclusive_or_expression: exclusive_or_expression CARET and_expression */ @@ -5786,13 +5790,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5790 "MachineIndependent/glslang_tab.cpp" +#line 5794 "MachineIndependent/glslang_tab.cpp" break; case 67: /* inclusive_or_expression: exclusive_or_expression */ #line 752 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5796 "MachineIndependent/glslang_tab.cpp" +#line 5800 "MachineIndependent/glslang_tab.cpp" break; case 68: /* inclusive_or_expression: inclusive_or_expression VERTICAL_BAR exclusive_or_expression */ @@ -5803,13 +5807,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 5807 "MachineIndependent/glslang_tab.cpp" +#line 5811 "MachineIndependent/glslang_tab.cpp" break; case 69: /* logical_and_expression: inclusive_or_expression */ #line 762 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5813 "MachineIndependent/glslang_tab.cpp" +#line 5817 "MachineIndependent/glslang_tab.cpp" break; case 70: /* logical_and_expression: logical_and_expression AND_OP inclusive_or_expression */ @@ -5819,13 +5823,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5823 "MachineIndependent/glslang_tab.cpp" +#line 5827 "MachineIndependent/glslang_tab.cpp" break; case 71: /* logical_xor_expression: logical_and_expression */ #line 771 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5829 "MachineIndependent/glslang_tab.cpp" +#line 5833 "MachineIndependent/glslang_tab.cpp" break; case 72: /* logical_xor_expression: logical_xor_expression XOR_OP logical_and_expression */ @@ -5835,13 +5839,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5839 "MachineIndependent/glslang_tab.cpp" +#line 5843 "MachineIndependent/glslang_tab.cpp" break; case 73: /* logical_or_expression: logical_xor_expression */ #line 780 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5845 "MachineIndependent/glslang_tab.cpp" +#line 5849 "MachineIndependent/glslang_tab.cpp" break; case 74: /* logical_or_expression: logical_or_expression OR_OP logical_xor_expression */ @@ -5851,13 +5855,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyval.interm.intermTypedNode) == 0) (yyval.interm.intermTypedNode) = parseContext.intermediate.addConstantUnion(false, (yyvsp[-1].lex).loc); } -#line 5855 "MachineIndependent/glslang_tab.cpp" +#line 5859 "MachineIndependent/glslang_tab.cpp" break; case 75: /* conditional_expression: logical_or_expression */ #line 789 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5861 "MachineIndependent/glslang_tab.cpp" +#line 5865 "MachineIndependent/glslang_tab.cpp" break; case 76: /* $@1: %empty */ @@ -5865,7 +5869,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { ++parseContext.controlFlowNestingLevel; } -#line 5869 "MachineIndependent/glslang_tab.cpp" +#line 5873 "MachineIndependent/glslang_tab.cpp" break; case 77: /* conditional_expression: logical_or_expression QUESTION $@1 expression COLON assignment_expression */ @@ -5882,13 +5886,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 5886 "MachineIndependent/glslang_tab.cpp" +#line 5890 "MachineIndependent/glslang_tab.cpp" break; case 78: /* assignment_expression: conditional_expression */ #line 808 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 5892 "MachineIndependent/glslang_tab.cpp" +#line 5896 "MachineIndependent/glslang_tab.cpp" break; case 79: /* assignment_expression: unary_expression assignment_operator assignment_expression */ @@ -5906,7 +5910,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } } -#line 5910 "MachineIndependent/glslang_tab.cpp" +#line 5914 "MachineIndependent/glslang_tab.cpp" break; case 80: /* assignment_operator: EQUAL */ @@ -5915,7 +5919,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAssign; } -#line 5919 "MachineIndependent/glslang_tab.cpp" +#line 5923 "MachineIndependent/glslang_tab.cpp" break; case 81: /* assignment_operator: MUL_ASSIGN */ @@ -5924,7 +5928,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpMulAssign; } -#line 5928 "MachineIndependent/glslang_tab.cpp" +#line 5932 "MachineIndependent/glslang_tab.cpp" break; case 82: /* assignment_operator: DIV_ASSIGN */ @@ -5933,7 +5937,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpDivAssign; } -#line 5937 "MachineIndependent/glslang_tab.cpp" +#line 5941 "MachineIndependent/glslang_tab.cpp" break; case 83: /* assignment_operator: MOD_ASSIGN */ @@ -5943,7 +5947,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpModAssign; } -#line 5947 "MachineIndependent/glslang_tab.cpp" +#line 5951 "MachineIndependent/glslang_tab.cpp" break; case 84: /* assignment_operator: ADD_ASSIGN */ @@ -5952,7 +5956,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAddAssign; } -#line 5956 "MachineIndependent/glslang_tab.cpp" +#line 5960 "MachineIndependent/glslang_tab.cpp" break; case 85: /* assignment_operator: SUB_ASSIGN */ @@ -5961,7 +5965,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpSubAssign; } -#line 5965 "MachineIndependent/glslang_tab.cpp" +#line 5969 "MachineIndependent/glslang_tab.cpp" break; case 86: /* assignment_operator: LEFT_ASSIGN */ @@ -5970,7 +5974,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift left assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpLeftShiftAssign; } -#line 5974 "MachineIndependent/glslang_tab.cpp" +#line 5978 "MachineIndependent/glslang_tab.cpp" break; case 87: /* assignment_operator: RIGHT_ASSIGN */ @@ -5979,7 +5983,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bit-shift right assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpRightShiftAssign; } -#line 5983 "MachineIndependent/glslang_tab.cpp" +#line 5987 "MachineIndependent/glslang_tab.cpp" break; case 88: /* assignment_operator: AND_ASSIGN */ @@ -5988,7 +5992,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-and assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpAndAssign; } -#line 5992 "MachineIndependent/glslang_tab.cpp" +#line 5996 "MachineIndependent/glslang_tab.cpp" break; case 89: /* assignment_operator: XOR_ASSIGN */ @@ -5997,7 +6001,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-xor assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpExclusiveOrAssign; } -#line 6001 "MachineIndependent/glslang_tab.cpp" +#line 6005 "MachineIndependent/glslang_tab.cpp" break; case 90: /* assignment_operator: OR_ASSIGN */ @@ -6006,7 +6010,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "bitwise-or assign"); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).op = EOpInclusiveOrAssign; } -#line 6010 "MachineIndependent/glslang_tab.cpp" +#line 6014 "MachineIndependent/glslang_tab.cpp" break; case 91: /* expression: assignment_expression */ @@ -6014,7 +6018,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6018 "MachineIndependent/glslang_tab.cpp" +#line 6022 "MachineIndependent/glslang_tab.cpp" break; case 92: /* expression: expression COMMA assignment_expression */ @@ -6027,7 +6031,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } } -#line 6031 "MachineIndependent/glslang_tab.cpp" +#line 6035 "MachineIndependent/glslang_tab.cpp" break; case 93: /* constant_expression: conditional_expression */ @@ -6036,7 +6040,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.constantValueCheck((yyvsp[0].interm.intermTypedNode), ""); (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 6040 "MachineIndependent/glslang_tab.cpp" +#line 6044 "MachineIndependent/glslang_tab.cpp" break; case 94: /* declaration: function_prototype SEMICOLON */ @@ -6046,7 +6050,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 6050 "MachineIndependent/glslang_tab.cpp" +#line 6054 "MachineIndependent/glslang_tab.cpp" break; case 95: /* declaration: spirv_instruction_qualifier function_prototype SEMICOLON */ @@ -6058,7 +6062,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // TODO: 4.0 functionality: subroutines: make the identifier a user type for this signature } -#line 6062 "MachineIndependent/glslang_tab.cpp" +#line 6066 "MachineIndependent/glslang_tab.cpp" break; case 96: /* declaration: spirv_execution_mode_qualifier SEMICOLON */ @@ -6068,7 +6072,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V execution mode qualifier"); (yyval.interm.intermNode) = 0; } -#line 6072 "MachineIndependent/glslang_tab.cpp" +#line 6076 "MachineIndependent/glslang_tab.cpp" break; case 97: /* declaration: init_declarator_list SEMICOLON */ @@ -6078,7 +6082,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-1].interm).intermNode->getAsAggregate()->setOperator(EOpSequence); (yyval.interm.intermNode) = (yyvsp[-1].interm).intermNode; } -#line 6082 "MachineIndependent/glslang_tab.cpp" +#line 6086 "MachineIndependent/glslang_tab.cpp" break; case 98: /* declaration: PRECISION precision_qualifier type_specifier SEMICOLON */ @@ -6090,7 +6094,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.setDefaultPrecision((yyvsp[-3].lex).loc, (yyvsp[-1].interm.type), (yyvsp[-2].interm.type).qualifier.precision); (yyval.interm.intermNode) = 0; } -#line 6094 "MachineIndependent/glslang_tab.cpp" +#line 6098 "MachineIndependent/glslang_tab.cpp" break; case 99: /* declaration: block_structure SEMICOLON */ @@ -6099,7 +6103,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-1].interm).loc, *(yyvsp[-1].interm).typeList); (yyval.interm.intermNode) = 0; } -#line 6103 "MachineIndependent/glslang_tab.cpp" +#line 6107 "MachineIndependent/glslang_tab.cpp" break; case 100: /* declaration: block_structure IDENTIFIER SEMICOLON */ @@ -6108,7 +6112,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-2].interm).loc, *(yyvsp[-2].interm).typeList, (yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 6112 "MachineIndependent/glslang_tab.cpp" +#line 6116 "MachineIndependent/glslang_tab.cpp" break; case 101: /* declaration: block_structure IDENTIFIER array_specifier SEMICOLON */ @@ -6117,7 +6121,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareBlock((yyvsp[-3].interm).loc, *(yyvsp[-3].interm).typeList, (yyvsp[-2].lex).string, (yyvsp[-1].interm).arraySizes); (yyval.interm.intermNode) = 0; } -#line 6121 "MachineIndependent/glslang_tab.cpp" +#line 6125 "MachineIndependent/glslang_tab.cpp" break; case 102: /* declaration: type_qualifier SEMICOLON */ @@ -6127,7 +6131,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.updateStandaloneQualifierDefaults((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type)); (yyval.interm.intermNode) = 0; } -#line 6131 "MachineIndependent/glslang_tab.cpp" +#line 6135 "MachineIndependent/glslang_tab.cpp" break; case 103: /* declaration: type_qualifier IDENTIFIER SEMICOLON */ @@ -6137,7 +6141,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.addQualifierToExisting((yyvsp[-2].interm.type).loc, (yyvsp[-2].interm.type).qualifier, *(yyvsp[-1].lex).string); (yyval.interm.intermNode) = 0; } -#line 6141 "MachineIndependent/glslang_tab.cpp" +#line 6145 "MachineIndependent/glslang_tab.cpp" break; case 104: /* declaration: type_qualifier IDENTIFIER identifier_list SEMICOLON */ @@ -6148,13 +6152,13 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.addQualifierToExisting((yyvsp[-3].interm.type).loc, (yyvsp[-3].interm.type).qualifier, *(yyvsp[-1].interm.identifierList)); (yyval.interm.intermNode) = 0; } -#line 6152 "MachineIndependent/glslang_tab.cpp" +#line 6156 "MachineIndependent/glslang_tab.cpp" break; case 105: /* $@2: %empty */ #line 956 "MachineIndependent/glslang.y" { parseContext.nestedBlockCheck((yyvsp[-2].interm.type).loc); } -#line 6158 "MachineIndependent/glslang_tab.cpp" +#line 6162 "MachineIndependent/glslang_tab.cpp" break; case 106: /* block_structure: type_qualifier IDENTIFIER LEFT_BRACE $@2 struct_declaration_list RIGHT_BRACE */ @@ -6168,7 +6172,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-5].interm.type).loc; (yyval.interm).typeList = (yyvsp[-1].interm.typeList); } -#line 6172 "MachineIndependent/glslang_tab.cpp" +#line 6176 "MachineIndependent/glslang_tab.cpp" break; case 107: /* identifier_list: COMMA IDENTIFIER */ @@ -6177,7 +6181,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.identifierList) = new TIdentifierList; (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6181 "MachineIndependent/glslang_tab.cpp" +#line 6185 "MachineIndependent/glslang_tab.cpp" break; case 108: /* identifier_list: identifier_list COMMA IDENTIFIER */ @@ -6186,7 +6190,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.identifierList) = (yyvsp[-2].interm.identifierList); (yyval.interm.identifierList)->push_back((yyvsp[0].lex).string); } -#line 6190 "MachineIndependent/glslang_tab.cpp" +#line 6194 "MachineIndependent/glslang_tab.cpp" break; case 109: /* function_prototype: function_declarator RIGHT_PAREN */ @@ -6195,7 +6199,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).function = (yyvsp[-1].interm.function); (yyval.interm).loc = (yyvsp[0].lex).loc; } -#line 6199 "MachineIndependent/glslang_tab.cpp" +#line 6203 "MachineIndependent/glslang_tab.cpp" break; case 110: /* function_prototype: function_declarator RIGHT_PAREN attribute */ @@ -6206,7 +6210,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } -#line 6210 "MachineIndependent/glslang_tab.cpp" +#line 6214 "MachineIndependent/glslang_tab.cpp" break; case 111: /* function_prototype: attribute function_declarator RIGHT_PAREN */ @@ -6217,7 +6221,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute"); parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes)); } -#line 6221 "MachineIndependent/glslang_tab.cpp" +#line 6225 "MachineIndependent/glslang_tab.cpp" break; case 112: /* function_prototype: attribute function_declarator RIGHT_PAREN attribute */ @@ -6229,7 +6233,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes)); parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes)); } -#line 6233 "MachineIndependent/glslang_tab.cpp" +#line 6237 "MachineIndependent/glslang_tab.cpp" break; case 113: /* function_declarator: function_header */ @@ -6237,7 +6241,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6241 "MachineIndependent/glslang_tab.cpp" +#line 6245 "MachineIndependent/glslang_tab.cpp" break; case 114: /* function_declarator: function_header_with_parameters */ @@ -6245,7 +6249,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm.function) = (yyvsp[0].interm.function); } -#line 6249 "MachineIndependent/glslang_tab.cpp" +#line 6253 "MachineIndependent/glslang_tab.cpp" break; case 115: /* function_header_with_parameters: function_header parameter_declaration */ @@ -6258,7 +6262,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else delete (yyvsp[0].interm).param.type; } -#line 6262 "MachineIndependent/glslang_tab.cpp" +#line 6266 "MachineIndependent/glslang_tab.cpp" break; case 116: /* function_header_with_parameters: function_header_with_parameters COMMA parameter_declaration */ @@ -6280,7 +6284,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyvsp[-2].interm.function)->addParameter((yyvsp[0].interm).param); } } -#line 6284 "MachineIndependent/glslang_tab.cpp" +#line 6288 "MachineIndependent/glslang_tab.cpp" break; case 117: /* function_header: fully_specified_type IDENTIFIER LEFT_PAREN */ @@ -6304,7 +6308,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); function = new TFunction((yyvsp[-1].lex).string, type); (yyval.interm.function) = function; } -#line 6308 "MachineIndependent/glslang_tab.cpp" +#line 6312 "MachineIndependent/glslang_tab.cpp" break; case 118: /* parameter_declarator: type_specifier IDENTIFIER */ @@ -6324,7 +6328,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[0].lex).loc; (yyval.interm).param = param; } -#line 6328 "MachineIndependent/glslang_tab.cpp" +#line 6332 "MachineIndependent/glslang_tab.cpp" break; case 119: /* parameter_declarator: type_specifier IDENTIFIER array_specifier */ @@ -6348,7 +6352,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).param = param; } -#line 6352 "MachineIndependent/glslang_tab.cpp" +#line 6356 "MachineIndependent/glslang_tab.cpp" break; case 120: /* parameter_declaration: type_qualifier parameter_declarator */ @@ -6364,7 +6368,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.paramCheckFix((yyvsp[-1].interm.type).loc, (yyvsp[-1].interm.type).qualifier, *(yyval.interm).param.type); } -#line 6368 "MachineIndependent/glslang_tab.cpp" +#line 6372 "MachineIndependent/glslang_tab.cpp" break; case 121: /* parameter_declaration: parameter_declarator */ @@ -6376,7 +6380,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 6380 "MachineIndependent/glslang_tab.cpp" +#line 6384 "MachineIndependent/glslang_tab.cpp" break; case 122: /* parameter_declaration: type_qualifier parameter_type_specifier */ @@ -6391,7 +6395,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 6395 "MachineIndependent/glslang_tab.cpp" +#line 6399 "MachineIndependent/glslang_tab.cpp" break; case 123: /* parameter_declaration: parameter_type_specifier */ @@ -6403,7 +6407,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 6407 "MachineIndependent/glslang_tab.cpp" +#line 6411 "MachineIndependent/glslang_tab.cpp" break; case 124: /* parameter_type_specifier: type_specifier */ @@ -6414,7 +6418,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if ((yyvsp[0].interm.type).arraySizes) parseContext.arraySizeRequiredCheck((yyvsp[0].interm.type).loc, *(yyvsp[0].interm.type).arraySizes); } -#line 6418 "MachineIndependent/glslang_tab.cpp" +#line 6422 "MachineIndependent/glslang_tab.cpp" break; case 125: /* init_declarator_list: single_declaration */ @@ -6422,7 +6426,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); { (yyval.interm) = (yyvsp[0].interm); } -#line 6426 "MachineIndependent/glslang_tab.cpp" +#line 6430 "MachineIndependent/glslang_tab.cpp" break; case 126: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER */ @@ -6431,7 +6435,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-2].interm); parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-2].interm).type); } -#line 6435 "MachineIndependent/glslang_tab.cpp" +#line 6439 "MachineIndependent/glslang_tab.cpp" break; case 127: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier */ @@ -6440,7 +6444,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm) = (yyvsp[-3].interm); parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-3].interm).type, (yyvsp[0].interm).arraySizes); } -#line 6444 "MachineIndependent/glslang_tab.cpp" +#line 6448 "MachineIndependent/glslang_tab.cpp" break; case 128: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER array_specifier EQUAL initializer */ @@ -6450,7 +6454,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 6454 "MachineIndependent/glslang_tab.cpp" +#line 6458 "MachineIndependent/glslang_tab.cpp" break; case 129: /* init_declarator_list: init_declarator_list COMMA IDENTIFIER EQUAL initializer */ @@ -6460,7 +6464,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 6464 "MachineIndependent/glslang_tab.cpp" +#line 6468 "MachineIndependent/glslang_tab.cpp" break; case 130: /* single_declaration: fully_specified_type */ @@ -6472,7 +6476,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.declareTypeDefaults((yyval.interm).loc, (yyval.interm).type); } -#line 6476 "MachineIndependent/glslang_tab.cpp" +#line 6480 "MachineIndependent/glslang_tab.cpp" break; case 131: /* single_declaration: fully_specified_type IDENTIFIER */ @@ -6482,7 +6486,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[0].lex).loc, *(yyvsp[0].lex).string, (yyvsp[-1].interm.type)); } -#line 6486 "MachineIndependent/glslang_tab.cpp" +#line 6490 "MachineIndependent/glslang_tab.cpp" break; case 132: /* single_declaration: fully_specified_type IDENTIFIER array_specifier */ @@ -6492,7 +6496,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm).intermNode = 0; parseContext.declareVariable((yyvsp[-1].lex).loc, *(yyvsp[-1].lex).string, (yyvsp[-2].interm.type), (yyvsp[0].interm).arraySizes); } -#line 6496 "MachineIndependent/glslang_tab.cpp" +#line 6500 "MachineIndependent/glslang_tab.cpp" break; case 133: /* single_declaration: fully_specified_type IDENTIFIER array_specifier EQUAL initializer */ @@ -6502,7 +6506,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 6506 "MachineIndependent/glslang_tab.cpp" +#line 6510 "MachineIndependent/glslang_tab.cpp" break; case 134: /* single_declaration: fully_specified_type IDENTIFIER EQUAL initializer */ @@ -6512,7 +6516,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); 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 6516 "MachineIndependent/glslang_tab.cpp" +#line 6520 "MachineIndependent/glslang_tab.cpp" break; case 135: /* fully_specified_type: type_specifier */ @@ -6527,7 +6531,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } parseContext.precisionQualifierCheck((yyval.interm.type).loc, (yyval.interm.type).basicType, (yyval.interm.type).qualifier); } -#line 6531 "MachineIndependent/glslang_tab.cpp" +#line 6535 "MachineIndependent/glslang_tab.cpp" break; case 136: /* fully_specified_type: type_qualifier type_specifier */ @@ -6556,7 +6560,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (parseContext.language == EShLangFragment && (yyval.interm.type).qualifier.storage == EvqVaryingIn))) (yyval.interm.type).qualifier.smooth = true; } -#line 6560 "MachineIndependent/glslang_tab.cpp" +#line 6564 "MachineIndependent/glslang_tab.cpp" break; case 137: /* invariant_qualifier: INVARIANT */ @@ -6567,7 +6571,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.invariant = true; } -#line 6571 "MachineIndependent/glslang_tab.cpp" +#line 6575 "MachineIndependent/glslang_tab.cpp" break; case 138: /* interpolation_qualifier: SMOOTH */ @@ -6579,7 +6583,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.smooth = true; } -#line 6583 "MachineIndependent/glslang_tab.cpp" +#line 6587 "MachineIndependent/glslang_tab.cpp" break; case 139: /* interpolation_qualifier: FLAT */ @@ -6591,7 +6595,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.flat = true; } -#line 6595 "MachineIndependent/glslang_tab.cpp" +#line 6599 "MachineIndependent/glslang_tab.cpp" break; case 140: /* interpolation_qualifier: NOPERSPECTIVE */ @@ -6603,7 +6607,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nopersp = true; } -#line 6607 "MachineIndependent/glslang_tab.cpp" +#line 6611 "MachineIndependent/glslang_tab.cpp" break; case 141: /* interpolation_qualifier: EXPLICITINTERPAMD */ @@ -6615,7 +6619,7 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.explicitInterp = true; } -#line 6619 "MachineIndependent/glslang_tab.cpp" +#line 6623 "MachineIndependent/glslang_tab.cpp" break; case 142: /* interpolation_qualifier: PERVERTEXNV */ @@ -6628,11 +6632,24 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.pervertexNV = true; } -#line 6632 "MachineIndependent/glslang_tab.cpp" +#line 6636 "MachineIndependent/glslang_tab.cpp" break; - case 143: /* interpolation_qualifier: PERPRIMITIVENV */ + case 143: /* interpolation_qualifier: PERVERTEXEXT */ #line 1293 "MachineIndependent/glslang.y" + { + parseContext.globalCheck((yyvsp[0].lex).loc, "pervertexEXT"); + parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires((yyvsp[0].lex).loc, ECompatibilityProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 0, E_GL_EXT_fragment_shader_barycentric, "fragment shader barycentric"); + (yyval.interm.type).init((yyvsp[0].lex).loc); + (yyval.interm.type).qualifier.pervertexEXT = true; + } +#line 6649 "MachineIndependent/glslang_tab.cpp" + break; + + case 144: /* interpolation_qualifier: PERPRIMITIVENV */ +#line 1301 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perprimitiveNV"); @@ -6643,11 +6660,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perPrimitiveNV = true; } -#line 6647 "MachineIndependent/glslang_tab.cpp" +#line 6664 "MachineIndependent/glslang_tab.cpp" break; - case 144: /* interpolation_qualifier: PERVIEWNV */ -#line 1303 "MachineIndependent/glslang.y" + case 145: /* interpolation_qualifier: PERVIEWNV */ +#line 1311 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "perviewNV"); @@ -6655,11 +6672,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perViewNV = true; } -#line 6659 "MachineIndependent/glslang_tab.cpp" +#line 6676 "MachineIndependent/glslang_tab.cpp" break; - case 145: /* interpolation_qualifier: PERTASKNV */ -#line 1310 "MachineIndependent/glslang.y" + case 146: /* interpolation_qualifier: PERTASKNV */ +#line 1318 "MachineIndependent/glslang.y" { // No need for profile version or extension check. Shader stage already checks both. parseContext.globalCheck((yyvsp[0].lex).loc, "taskNV"); @@ -6667,84 +6684,84 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.perTaskNV = true; } -#line 6671 "MachineIndependent/glslang_tab.cpp" +#line 6688 "MachineIndependent/glslang_tab.cpp" break; - case 146: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ -#line 1321 "MachineIndependent/glslang.y" + case 147: /* layout_qualifier: LAYOUT LEFT_PAREN layout_qualifier_id_list RIGHT_PAREN */ +#line 1329 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); } -#line 6679 "MachineIndependent/glslang_tab.cpp" +#line 6696 "MachineIndependent/glslang_tab.cpp" break; - case 147: /* layout_qualifier_id_list: layout_qualifier_id */ -#line 1327 "MachineIndependent/glslang.y" + case 148: /* layout_qualifier_id_list: layout_qualifier_id */ +#line 1335 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6687 "MachineIndependent/glslang_tab.cpp" +#line 6704 "MachineIndependent/glslang_tab.cpp" break; - case 148: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ -#line 1330 "MachineIndependent/glslang.y" + case 149: /* layout_qualifier_id_list: layout_qualifier_id_list COMMA layout_qualifier_id */ +#line 1338 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-2].interm.type); (yyval.interm.type).shaderQualifiers.merge((yyvsp[0].interm.type).shaderQualifiers); parseContext.mergeObjectLayoutQualifiers((yyval.interm.type).qualifier, (yyvsp[0].interm.type).qualifier, false); } -#line 6697 "MachineIndependent/glslang_tab.cpp" +#line 6714 "MachineIndependent/glslang_tab.cpp" break; - case 149: /* layout_qualifier_id: IDENTIFIER */ -#line 1337 "MachineIndependent/glslang.y" + case 150: /* layout_qualifier_id: IDENTIFIER */ +#line 1345 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), *(yyvsp[0].lex).string); } -#line 6706 "MachineIndependent/glslang_tab.cpp" +#line 6723 "MachineIndependent/glslang_tab.cpp" break; - case 150: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ -#line 1341 "MachineIndependent/glslang.y" + case 151: /* layout_qualifier_id: IDENTIFIER EQUAL constant_expression */ +#line 1349 "MachineIndependent/glslang.y" { (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 6715 "MachineIndependent/glslang_tab.cpp" +#line 6732 "MachineIndependent/glslang_tab.cpp" break; - case 151: /* layout_qualifier_id: SHARED */ -#line 1345 "MachineIndependent/glslang.y" + case 152: /* layout_qualifier_id: SHARED */ +#line 1353 "MachineIndependent/glslang.y" { // because "shared" is both an identifier and a keyword (yyval.interm.type).init((yyvsp[0].lex).loc); TString strShared("shared"); parseContext.setLayoutQualifier((yyvsp[0].lex).loc, (yyval.interm.type), strShared); } -#line 6725 "MachineIndependent/glslang_tab.cpp" +#line 6742 "MachineIndependent/glslang_tab.cpp" break; - case 152: /* precise_qualifier: PRECISE */ -#line 1354 "MachineIndependent/glslang.y" + case 153: /* precise_qualifier: PRECISE */ +#line 1362 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyval.interm.type).loc, ECoreProfile | ECompatibilityProfile, 400, E_GL_ARB_gpu_shader5, "precise"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 320, Num_AEP_gpu_shader5, AEP_gpu_shader5, "precise"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.noContraction = true; } -#line 6736 "MachineIndependent/glslang_tab.cpp" +#line 6753 "MachineIndependent/glslang_tab.cpp" break; - case 153: /* type_qualifier: single_type_qualifier */ -#line 1364 "MachineIndependent/glslang.y" + case 154: /* type_qualifier: single_type_qualifier */ +#line 1372 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6744 "MachineIndependent/glslang_tab.cpp" +#line 6761 "MachineIndependent/glslang_tab.cpp" break; - case 154: /* type_qualifier: type_qualifier single_type_qualifier */ -#line 1367 "MachineIndependent/glslang.y" + case 155: /* type_qualifier: type_qualifier single_type_qualifier */ +#line 1375 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); if ((yyval.interm.type).basicType == EbtVoid) @@ -6753,151 +6770,151 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (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 6757 "MachineIndependent/glslang_tab.cpp" +#line 6774 "MachineIndependent/glslang_tab.cpp" break; - case 155: /* single_type_qualifier: storage_qualifier */ -#line 1378 "MachineIndependent/glslang.y" + case 156: /* single_type_qualifier: storage_qualifier */ +#line 1386 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6765 "MachineIndependent/glslang_tab.cpp" +#line 6782 "MachineIndependent/glslang_tab.cpp" break; - case 156: /* single_type_qualifier: layout_qualifier */ -#line 1381 "MachineIndependent/glslang.y" + case 157: /* single_type_qualifier: layout_qualifier */ +#line 1389 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6773 "MachineIndependent/glslang_tab.cpp" +#line 6790 "MachineIndependent/glslang_tab.cpp" break; - case 157: /* single_type_qualifier: precision_qualifier */ -#line 1384 "MachineIndependent/glslang.y" + case 158: /* single_type_qualifier: precision_qualifier */ +#line 1392 "MachineIndependent/glslang.y" { parseContext.checkPrecisionQualifier((yyvsp[0].interm.type).loc, (yyvsp[0].interm.type).qualifier.precision); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6782 "MachineIndependent/glslang_tab.cpp" +#line 6799 "MachineIndependent/glslang_tab.cpp" break; - case 158: /* single_type_qualifier: interpolation_qualifier */ -#line 1388 "MachineIndependent/glslang.y" + case 159: /* single_type_qualifier: interpolation_qualifier */ +#line 1396 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6791 "MachineIndependent/glslang_tab.cpp" +#line 6808 "MachineIndependent/glslang_tab.cpp" break; - case 159: /* single_type_qualifier: invariant_qualifier */ -#line 1392 "MachineIndependent/glslang.y" + case 160: /* single_type_qualifier: invariant_qualifier */ +#line 1400 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6800 "MachineIndependent/glslang_tab.cpp" +#line 6817 "MachineIndependent/glslang_tab.cpp" break; - case 160: /* single_type_qualifier: precise_qualifier */ -#line 1397 "MachineIndependent/glslang.y" + case 161: /* single_type_qualifier: precise_qualifier */ +#line 1405 "MachineIndependent/glslang.y" { // allow inheritance of storage qualifier from block declaration (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6809 "MachineIndependent/glslang_tab.cpp" +#line 6826 "MachineIndependent/glslang_tab.cpp" break; - case 161: /* single_type_qualifier: non_uniform_qualifier */ -#line 1401 "MachineIndependent/glslang.y" + case 162: /* single_type_qualifier: non_uniform_qualifier */ +#line 1409 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6817 "MachineIndependent/glslang_tab.cpp" +#line 6834 "MachineIndependent/glslang_tab.cpp" break; - case 162: /* single_type_qualifier: spirv_storage_class_qualifier */ -#line 1404 "MachineIndependent/glslang.y" + case 163: /* single_type_qualifier: spirv_storage_class_qualifier */ +#line 1412 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].interm.type).loc, "spirv_storage_class"); parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V storage class qualifier"); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6827 "MachineIndependent/glslang_tab.cpp" +#line 6844 "MachineIndependent/glslang_tab.cpp" break; - case 163: /* single_type_qualifier: spirv_decorate_qualifier */ -#line 1409 "MachineIndependent/glslang.y" + case 164: /* single_type_qualifier: spirv_decorate_qualifier */ +#line 1417 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V decorate qualifier"); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 6836 "MachineIndependent/glslang_tab.cpp" +#line 6853 "MachineIndependent/glslang_tab.cpp" break; - case 164: /* single_type_qualifier: SPIRV_BY_REFERENCE */ -#line 1413 "MachineIndependent/glslang.y" + case 165: /* single_type_qualifier: SPIRV_BY_REFERENCE */ +#line 1421 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_reference"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.setSpirvByReference(); } -#line 6846 "MachineIndependent/glslang_tab.cpp" +#line 6863 "MachineIndependent/glslang_tab.cpp" break; - case 165: /* single_type_qualifier: SPIRV_LITERAL */ -#line 1418 "MachineIndependent/glslang.y" + case 166: /* single_type_qualifier: SPIRV_LITERAL */ +#line 1426 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_spirv_intrinsics, "spirv_by_literal"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.setSpirvLiteral(); } -#line 6856 "MachineIndependent/glslang_tab.cpp" +#line 6873 "MachineIndependent/glslang_tab.cpp" break; - case 166: /* storage_qualifier: CONST */ -#line 1427 "MachineIndependent/glslang.y" + case 167: /* storage_qualifier: CONST */ +#line 1435 "MachineIndependent/glslang.y" { (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 6865 "MachineIndependent/glslang_tab.cpp" +#line 6882 "MachineIndependent/glslang_tab.cpp" break; - case 167: /* storage_qualifier: INOUT */ -#line 1431 "MachineIndependent/glslang.y" + case 168: /* storage_qualifier: INOUT */ +#line 1439 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "inout"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqInOut; } -#line 6875 "MachineIndependent/glslang_tab.cpp" +#line 6892 "MachineIndependent/glslang_tab.cpp" break; - case 168: /* storage_qualifier: IN */ -#line 1436 "MachineIndependent/glslang.y" + case 169: /* storage_qualifier: IN */ +#line 1444 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "in"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "in" or a pipeline "in" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqIn; } -#line 6886 "MachineIndependent/glslang_tab.cpp" +#line 6903 "MachineIndependent/glslang_tab.cpp" break; - case 169: /* storage_qualifier: OUT */ -#line 1442 "MachineIndependent/glslang.y" + case 170: /* storage_qualifier: OUT */ +#line 1450 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "out"); (yyval.interm.type).init((yyvsp[0].lex).loc); // whether this is a parameter "out" or a pipeline "out" will get sorted out a bit later (yyval.interm.type).qualifier.storage = EvqOut; } -#line 6897 "MachineIndependent/glslang_tab.cpp" +#line 6914 "MachineIndependent/glslang_tab.cpp" break; - case 170: /* storage_qualifier: CENTROID */ -#line 1448 "MachineIndependent/glslang.y" + case 171: /* storage_qualifier: CENTROID */ +#line 1456 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 120, 0, "centroid"); parseContext.profileRequires((yyvsp[0].lex).loc, EEsProfile, 300, 0, "centroid"); @@ -6905,21 +6922,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.centroid = true; } -#line 6909 "MachineIndependent/glslang_tab.cpp" +#line 6926 "MachineIndependent/glslang_tab.cpp" break; - case 171: /* storage_qualifier: UNIFORM */ -#line 1455 "MachineIndependent/glslang.y" + case 172: /* storage_qualifier: UNIFORM */ +#line 1463 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "uniform"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqUniform; } -#line 6919 "MachineIndependent/glslang_tab.cpp" +#line 6936 "MachineIndependent/glslang_tab.cpp" break; - case 172: /* storage_qualifier: SHARED */ -#line 1460 "MachineIndependent/glslang.y" + case 173: /* storage_qualifier: SHARED */ +#line 1468 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "shared"); parseContext.profileRequires((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, 430, E_GL_ARB_compute_shader, "shared"); @@ -6928,21 +6945,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqShared; } -#line 6932 "MachineIndependent/glslang_tab.cpp" +#line 6949 "MachineIndependent/glslang_tab.cpp" break; - case 173: /* storage_qualifier: BUFFER */ -#line 1468 "MachineIndependent/glslang.y" + case 174: /* storage_qualifier: BUFFER */ +#line 1476 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "buffer"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqBuffer; } -#line 6942 "MachineIndependent/glslang_tab.cpp" +#line 6959 "MachineIndependent/glslang_tab.cpp" break; - case 174: /* storage_qualifier: ATTRIBUTE */ -#line 1474 "MachineIndependent/glslang.y" + case 175: /* storage_qualifier: ATTRIBUTE */ +#line 1482 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangVertex, "attribute"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "attribute"); @@ -6955,11 +6972,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6959 "MachineIndependent/glslang_tab.cpp" +#line 6976 "MachineIndependent/glslang_tab.cpp" break; - case 175: /* storage_qualifier: VARYING */ -#line 1486 "MachineIndependent/glslang.y" + case 176: /* storage_qualifier: VARYING */ +#line 1494 "MachineIndependent/glslang.y" { parseContext.checkDeprecated((yyvsp[0].lex).loc, ENoProfile, 130, "varying"); parseContext.checkDeprecated((yyvsp[0].lex).loc, ECoreProfile, 130, "varying"); @@ -6974,32 +6991,32 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.type).qualifier.storage = EvqVaryingIn; } -#line 6978 "MachineIndependent/glslang_tab.cpp" +#line 6995 "MachineIndependent/glslang_tab.cpp" break; - case 176: /* storage_qualifier: PATCH */ -#line 1500 "MachineIndependent/glslang.y" + case 177: /* storage_qualifier: PATCH */ +#line 1508 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "patch"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangTessControlMask | EShLangTessEvaluationMask), "patch"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.patch = true; } -#line 6989 "MachineIndependent/glslang_tab.cpp" +#line 7006 "MachineIndependent/glslang_tab.cpp" break; - case 177: /* storage_qualifier: SAMPLE */ -#line 1506 "MachineIndependent/glslang.y" + case 178: /* storage_qualifier: SAMPLE */ +#line 1514 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "sample"); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.sample = true; } -#line 6999 "MachineIndependent/glslang_tab.cpp" +#line 7016 "MachineIndependent/glslang_tab.cpp" break; - case 178: /* storage_qualifier: HITATTRNV */ -#line 1511 "MachineIndependent/glslang.y" + case 179: /* storage_qualifier: HITATTRNV */ +#line 1519 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7008,11 +7025,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7012 "MachineIndependent/glslang_tab.cpp" +#line 7029 "MachineIndependent/glslang_tab.cpp" break; - case 179: /* storage_qualifier: HITATTREXT */ -#line 1519 "MachineIndependent/glslang.y" + case 180: /* storage_qualifier: HITATTREXT */ +#line 1527 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "hitAttributeEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangIntersectMask | EShLangClosestHitMask @@ -7021,11 +7038,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqHitAttr; } -#line 7025 "MachineIndependent/glslang_tab.cpp" +#line 7042 "MachineIndependent/glslang_tab.cpp" break; - case 180: /* storage_qualifier: PAYLOADNV */ -#line 1527 "MachineIndependent/glslang.y" + case 181: /* storage_qualifier: PAYLOADNV */ +#line 1535 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7034,11 +7051,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7038 "MachineIndependent/glslang_tab.cpp" +#line 7055 "MachineIndependent/glslang_tab.cpp" break; - case 181: /* storage_qualifier: PAYLOADEXT */ -#line 1535 "MachineIndependent/glslang.y" + case 182: /* storage_qualifier: PAYLOADEXT */ +#line 1543 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | EShLangClosestHitMask | @@ -7047,11 +7064,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayload; } -#line 7051 "MachineIndependent/glslang_tab.cpp" +#line 7068 "MachineIndependent/glslang_tab.cpp" break; - case 182: /* storage_qualifier: PAYLOADINNV */ -#line 1543 "MachineIndependent/glslang.y" + case 183: /* storage_qualifier: PAYLOADINNV */ +#line 1551 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7060,11 +7077,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7064 "MachineIndependent/glslang_tab.cpp" +#line 7081 "MachineIndependent/glslang_tab.cpp" break; - case 183: /* storage_qualifier: PAYLOADINEXT */ -#line 1551 "MachineIndependent/glslang.y" + case 184: /* storage_qualifier: PAYLOADINEXT */ +#line 1559 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "rayPayloadInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangClosestHitMask | @@ -7073,11 +7090,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqPayloadIn; } -#line 7077 "MachineIndependent/glslang_tab.cpp" +#line 7094 "MachineIndependent/glslang_tab.cpp" break; - case 184: /* storage_qualifier: CALLDATANV */ -#line 1559 "MachineIndependent/glslang.y" + case 185: /* storage_qualifier: CALLDATANV */ +#line 1567 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7086,11 +7103,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7090 "MachineIndependent/glslang_tab.cpp" +#line 7107 "MachineIndependent/glslang_tab.cpp" break; - case 185: /* storage_qualifier: CALLDATAEXT */ -#line 1567 "MachineIndependent/glslang.y" + case 186: /* storage_qualifier: CALLDATAEXT */ +#line 1575 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangRayGenMask | @@ -7099,11 +7116,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableData; } -#line 7103 "MachineIndependent/glslang_tab.cpp" +#line 7120 "MachineIndependent/glslang_tab.cpp" break; - case 186: /* storage_qualifier: CALLDATAINNV */ -#line 1575 "MachineIndependent/glslang.y" + case 187: /* storage_qualifier: CALLDATAINNV */ +#line 1583 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInNV"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInNV"); @@ -7111,11 +7128,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7115 "MachineIndependent/glslang_tab.cpp" +#line 7132 "MachineIndependent/glslang_tab.cpp" break; - case 187: /* storage_qualifier: CALLDATAINEXT */ -#line 1582 "MachineIndependent/glslang.y" + case 188: /* storage_qualifier: CALLDATAINEXT */ +#line 1590 "MachineIndependent/glslang.y" { parseContext.globalCheck((yyvsp[0].lex).loc, "callableDataInEXT"); parseContext.requireStage((yyvsp[0].lex).loc, (EShLanguageMask)(EShLangCallableMask), "callableDataInEXT"); @@ -7123,175 +7140,175 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.storage = EvqCallableDataIn; } -#line 7127 "MachineIndependent/glslang_tab.cpp" +#line 7144 "MachineIndependent/glslang_tab.cpp" break; - case 188: /* storage_qualifier: COHERENT */ -#line 1589 "MachineIndependent/glslang.y" + case 189: /* storage_qualifier: COHERENT */ +#line 1597 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.coherent = true; } -#line 7136 "MachineIndependent/glslang_tab.cpp" +#line 7153 "MachineIndependent/glslang_tab.cpp" break; - case 189: /* storage_qualifier: DEVICECOHERENT */ -#line 1593 "MachineIndependent/glslang.y" + case 190: /* storage_qualifier: DEVICECOHERENT */ +#line 1601 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "devicecoherent"); (yyval.interm.type).qualifier.devicecoherent = true; } -#line 7146 "MachineIndependent/glslang_tab.cpp" +#line 7163 "MachineIndependent/glslang_tab.cpp" break; - case 190: /* storage_qualifier: QUEUEFAMILYCOHERENT */ -#line 1598 "MachineIndependent/glslang.y" + case 191: /* storage_qualifier: QUEUEFAMILYCOHERENT */ +#line 1606 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "queuefamilycoherent"); (yyval.interm.type).qualifier.queuefamilycoherent = true; } -#line 7156 "MachineIndependent/glslang_tab.cpp" +#line 7173 "MachineIndependent/glslang_tab.cpp" break; - case 191: /* storage_qualifier: WORKGROUPCOHERENT */ -#line 1603 "MachineIndependent/glslang.y" + case 192: /* storage_qualifier: WORKGROUPCOHERENT */ +#line 1611 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "workgroupcoherent"); (yyval.interm.type).qualifier.workgroupcoherent = true; } -#line 7166 "MachineIndependent/glslang_tab.cpp" +#line 7183 "MachineIndependent/glslang_tab.cpp" break; - case 192: /* storage_qualifier: SUBGROUPCOHERENT */ -#line 1608 "MachineIndependent/glslang.y" + case 193: /* storage_qualifier: SUBGROUPCOHERENT */ +#line 1616 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "subgroupcoherent"); (yyval.interm.type).qualifier.subgroupcoherent = true; } -#line 7176 "MachineIndependent/glslang_tab.cpp" +#line 7193 "MachineIndependent/glslang_tab.cpp" break; - case 193: /* storage_qualifier: NONPRIVATE */ -#line 1613 "MachineIndependent/glslang.y" + case 194: /* storage_qualifier: NONPRIVATE */ +#line 1621 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_KHR_memory_scope_semantics, "nonprivate"); (yyval.interm.type).qualifier.nonprivate = true; } -#line 7186 "MachineIndependent/glslang_tab.cpp" +#line 7203 "MachineIndependent/glslang_tab.cpp" break; - case 194: /* storage_qualifier: SHADERCALLCOHERENT */ -#line 1618 "MachineIndependent/glslang.y" + case 195: /* storage_qualifier: SHADERCALLCOHERENT */ +#line 1626 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_ray_tracing, "shadercallcoherent"); (yyval.interm.type).qualifier.shadercallcoherent = true; } -#line 7196 "MachineIndependent/glslang_tab.cpp" +#line 7213 "MachineIndependent/glslang_tab.cpp" break; - case 195: /* storage_qualifier: VOLATILE */ -#line 1623 "MachineIndependent/glslang.y" + case 196: /* storage_qualifier: VOLATILE */ +#line 1631 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.volatil = true; } -#line 7205 "MachineIndependent/glslang_tab.cpp" +#line 7222 "MachineIndependent/glslang_tab.cpp" break; - case 196: /* storage_qualifier: RESTRICT */ -#line 1627 "MachineIndependent/glslang.y" + case 197: /* storage_qualifier: RESTRICT */ +#line 1635 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.restrict = true; } -#line 7214 "MachineIndependent/glslang_tab.cpp" +#line 7231 "MachineIndependent/glslang_tab.cpp" break; - case 197: /* storage_qualifier: READONLY */ -#line 1631 "MachineIndependent/glslang.y" + case 198: /* storage_qualifier: READONLY */ +#line 1639 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.readonly = true; } -#line 7223 "MachineIndependent/glslang_tab.cpp" +#line 7240 "MachineIndependent/glslang_tab.cpp" break; - case 198: /* storage_qualifier: WRITEONLY */ -#line 1635 "MachineIndependent/glslang.y" + case 199: /* storage_qualifier: WRITEONLY */ +#line 1643 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.writeonly = true; } -#line 7232 "MachineIndependent/glslang_tab.cpp" +#line 7249 "MachineIndependent/glslang_tab.cpp" break; - case 199: /* storage_qualifier: SUBROUTINE */ -#line 1639 "MachineIndependent/glslang.y" + case 200: /* storage_qualifier: SUBROUTINE */ +#line 1647 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[0].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[0].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[0].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[0].lex).loc); } -#line 7243 "MachineIndependent/glslang_tab.cpp" +#line 7260 "MachineIndependent/glslang_tab.cpp" break; - case 200: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ -#line 1645 "MachineIndependent/glslang.y" + case 201: /* storage_qualifier: SUBROUTINE LEFT_PAREN type_name_list RIGHT_PAREN */ +#line 1653 "MachineIndependent/glslang.y" { parseContext.spvRemoved((yyvsp[-3].lex).loc, "subroutine"); parseContext.globalCheck((yyvsp[-3].lex).loc, "subroutine"); parseContext.unimplemented((yyvsp[-3].lex).loc, "subroutine"); (yyval.interm.type).init((yyvsp[-3].lex).loc); } -#line 7254 "MachineIndependent/glslang_tab.cpp" +#line 7271 "MachineIndependent/glslang_tab.cpp" break; - case 201: /* non_uniform_qualifier: NONUNIFORM */ -#line 1656 "MachineIndependent/glslang.y" + case 202: /* non_uniform_qualifier: NONUNIFORM */ +#line 1664 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc); (yyval.interm.type).qualifier.nonUniform = true; } -#line 7263 "MachineIndependent/glslang_tab.cpp" +#line 7280 "MachineIndependent/glslang_tab.cpp" break; - case 202: /* type_name_list: IDENTIFIER */ -#line 1663 "MachineIndependent/glslang.y" + case 203: /* type_name_list: IDENTIFIER */ +#line 1671 "MachineIndependent/glslang.y" { // TODO } -#line 7271 "MachineIndependent/glslang_tab.cpp" +#line 7288 "MachineIndependent/glslang_tab.cpp" break; - case 203: /* type_name_list: type_name_list COMMA IDENTIFIER */ -#line 1666 "MachineIndependent/glslang.y" + case 204: /* type_name_list: type_name_list COMMA IDENTIFIER */ +#line 1674 "MachineIndependent/glslang.y" { // TODO: 4.0 semantics: subroutines // 1) make sure each identifier is a type declared earlier with SUBROUTINE // 2) save all of the identifiers for future comparison with the declared function } -#line 7281 "MachineIndependent/glslang_tab.cpp" +#line 7298 "MachineIndependent/glslang_tab.cpp" break; - case 204: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ -#line 1675 "MachineIndependent/glslang.y" + case 205: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt */ +#line 1683 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[-1].interm.type); (yyval.interm.type).qualifier.precision = parseContext.getDefaultPrecision((yyval.interm.type)); (yyval.interm.type).typeParameters = (yyvsp[0].interm.typeParameters); } -#line 7291 "MachineIndependent/glslang_tab.cpp" +#line 7308 "MachineIndependent/glslang_tab.cpp" break; - case 205: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ -#line 1680 "MachineIndependent/glslang.y" + case 206: /* type_specifier: type_specifier_nonarray type_parameter_specifier_opt array_specifier */ +#line 1688 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[0].interm).loc, (yyvsp[0].interm).arraySizes); (yyval.interm.type) = (yyvsp[-2].interm.type); @@ -7299,21 +7316,21 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).typeParameters = (yyvsp[-1].interm.typeParameters); (yyval.interm.type).arraySizes = (yyvsp[0].interm).arraySizes; } -#line 7303 "MachineIndependent/glslang_tab.cpp" +#line 7320 "MachineIndependent/glslang_tab.cpp" break; - case 206: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ -#line 1690 "MachineIndependent/glslang.y" + case 207: /* array_specifier: LEFT_BRACKET RIGHT_BRACKET */ +#line 1698 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-1].lex).loc; (yyval.interm).arraySizes = new TArraySizes; (yyval.interm).arraySizes->addInnerSize(); } -#line 7313 "MachineIndependent/glslang_tab.cpp" +#line 7330 "MachineIndependent/glslang_tab.cpp" break; - case 207: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1695 "MachineIndependent/glslang.y" + case 208: /* array_specifier: LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1703 "MachineIndependent/glslang.y" { (yyval.interm).loc = (yyvsp[-2].lex).loc; (yyval.interm).arraySizes = new TArraySizes; @@ -7322,20 +7339,20 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7326 "MachineIndependent/glslang_tab.cpp" +#line 7343 "MachineIndependent/glslang_tab.cpp" break; - case 208: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ -#line 1703 "MachineIndependent/glslang.y" + case 209: /* array_specifier: array_specifier LEFT_BRACKET RIGHT_BRACKET */ +#line 1711 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-2].interm); (yyval.interm).arraySizes->addInnerSize(); } -#line 7335 "MachineIndependent/glslang_tab.cpp" +#line 7352 "MachineIndependent/glslang_tab.cpp" break; - case 209: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ -#line 1707 "MachineIndependent/glslang.y" + case 210: /* array_specifier: array_specifier LEFT_BRACKET conditional_expression RIGHT_BRACKET */ +#line 1715 "MachineIndependent/glslang.y" { (yyval.interm) = (yyvsp[-3].interm); @@ -7343,35 +7360,35 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[-1].interm.intermTypedNode)->getLoc(), (yyvsp[-1].interm.intermTypedNode), size, "array size"); (yyval.interm).arraySizes->addInnerSize(size); } -#line 7347 "MachineIndependent/glslang_tab.cpp" +#line 7364 "MachineIndependent/glslang_tab.cpp" break; - case 210: /* type_parameter_specifier_opt: type_parameter_specifier */ -#line 1717 "MachineIndependent/glslang.y" + case 211: /* type_parameter_specifier_opt: type_parameter_specifier */ +#line 1725 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[0].interm.typeParameters); } -#line 7355 "MachineIndependent/glslang_tab.cpp" +#line 7372 "MachineIndependent/glslang_tab.cpp" break; - case 211: /* type_parameter_specifier_opt: %empty */ -#line 1720 "MachineIndependent/glslang.y" + case 212: /* type_parameter_specifier_opt: %empty */ +#line 1728 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = 0; } -#line 7363 "MachineIndependent/glslang_tab.cpp" +#line 7380 "MachineIndependent/glslang_tab.cpp" break; - case 212: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ -#line 1726 "MachineIndependent/glslang.y" + case 213: /* type_parameter_specifier: LEFT_ANGLE type_parameter_specifier_list RIGHT_ANGLE */ +#line 1734 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-1].interm.typeParameters); } -#line 7371 "MachineIndependent/glslang_tab.cpp" +#line 7388 "MachineIndependent/glslang_tab.cpp" break; - case 213: /* type_parameter_specifier_list: unary_expression */ -#line 1732 "MachineIndependent/glslang.y" + case 214: /* type_parameter_specifier_list: unary_expression */ +#line 1740 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = new TArraySizes; @@ -7379,11 +7396,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 7383 "MachineIndependent/glslang_tab.cpp" +#line 7400 "MachineIndependent/glslang_tab.cpp" break; - case 214: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ -#line 1739 "MachineIndependent/glslang.y" + case 215: /* type_parameter_specifier_list: type_parameter_specifier_list COMMA unary_expression */ +#line 1747 "MachineIndependent/glslang.y" { (yyval.interm.typeParameters) = (yyvsp[-2].interm.typeParameters); @@ -7391,300 +7408,300 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.arraySizeCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode), size, "type parameter"); (yyval.interm.typeParameters)->addInnerSize(size); } -#line 7395 "MachineIndependent/glslang_tab.cpp" +#line 7412 "MachineIndependent/glslang_tab.cpp" break; - case 215: /* type_specifier_nonarray: VOID */ -#line 1749 "MachineIndependent/glslang.y" + case 216: /* type_specifier_nonarray: VOID */ +#line 1757 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtVoid; } -#line 7404 "MachineIndependent/glslang_tab.cpp" +#line 7421 "MachineIndependent/glslang_tab.cpp" break; - case 216: /* type_specifier_nonarray: FLOAT */ -#line 1753 "MachineIndependent/glslang.y" + case 217: /* type_specifier_nonarray: FLOAT */ +#line 1761 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7413 "MachineIndependent/glslang_tab.cpp" +#line 7430 "MachineIndependent/glslang_tab.cpp" break; - case 217: /* type_specifier_nonarray: INT */ -#line 1757 "MachineIndependent/glslang.y" + case 218: /* type_specifier_nonarray: INT */ +#line 1765 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7422 "MachineIndependent/glslang_tab.cpp" +#line 7439 "MachineIndependent/glslang_tab.cpp" break; - case 218: /* type_specifier_nonarray: UINT */ -#line 1761 "MachineIndependent/glslang.y" + case 219: /* type_specifier_nonarray: UINT */ +#line 1769 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 7432 "MachineIndependent/glslang_tab.cpp" +#line 7449 "MachineIndependent/glslang_tab.cpp" break; - case 219: /* type_specifier_nonarray: BOOL */ -#line 1766 "MachineIndependent/glslang.y" + case 220: /* type_specifier_nonarray: BOOL */ +#line 1774 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; } -#line 7441 "MachineIndependent/glslang_tab.cpp" +#line 7458 "MachineIndependent/glslang_tab.cpp" break; - case 220: /* type_specifier_nonarray: VEC2 */ -#line 1770 "MachineIndependent/glslang.y" + case 221: /* type_specifier_nonarray: VEC2 */ +#line 1778 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 7451 "MachineIndependent/glslang_tab.cpp" +#line 7468 "MachineIndependent/glslang_tab.cpp" break; - case 221: /* type_specifier_nonarray: VEC3 */ -#line 1775 "MachineIndependent/glslang.y" + case 222: /* type_specifier_nonarray: VEC3 */ +#line 1783 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 7461 "MachineIndependent/glslang_tab.cpp" +#line 7478 "MachineIndependent/glslang_tab.cpp" break; - case 222: /* type_specifier_nonarray: VEC4 */ -#line 1780 "MachineIndependent/glslang.y" + case 223: /* type_specifier_nonarray: VEC4 */ +#line 1788 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7471 "MachineIndependent/glslang_tab.cpp" +#line 7488 "MachineIndependent/glslang_tab.cpp" break; - case 223: /* type_specifier_nonarray: BVEC2 */ -#line 1785 "MachineIndependent/glslang.y" + case 224: /* type_specifier_nonarray: BVEC2 */ +#line 1793 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(2); } -#line 7481 "MachineIndependent/glslang_tab.cpp" +#line 7498 "MachineIndependent/glslang_tab.cpp" break; - case 224: /* type_specifier_nonarray: BVEC3 */ -#line 1790 "MachineIndependent/glslang.y" + case 225: /* type_specifier_nonarray: BVEC3 */ +#line 1798 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(3); } -#line 7491 "MachineIndependent/glslang_tab.cpp" +#line 7508 "MachineIndependent/glslang_tab.cpp" break; - case 225: /* type_specifier_nonarray: BVEC4 */ -#line 1795 "MachineIndependent/glslang.y" + case 226: /* type_specifier_nonarray: BVEC4 */ +#line 1803 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtBool; (yyval.interm.type).setVector(4); } -#line 7501 "MachineIndependent/glslang_tab.cpp" +#line 7518 "MachineIndependent/glslang_tab.cpp" break; - case 226: /* type_specifier_nonarray: IVEC2 */ -#line 1800 "MachineIndependent/glslang.y" + case 227: /* type_specifier_nonarray: IVEC2 */ +#line 1808 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 7511 "MachineIndependent/glslang_tab.cpp" +#line 7528 "MachineIndependent/glslang_tab.cpp" break; - case 227: /* type_specifier_nonarray: IVEC3 */ -#line 1805 "MachineIndependent/glslang.y" + case 228: /* type_specifier_nonarray: IVEC3 */ +#line 1813 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 7521 "MachineIndependent/glslang_tab.cpp" +#line 7538 "MachineIndependent/glslang_tab.cpp" break; - case 228: /* type_specifier_nonarray: IVEC4 */ -#line 1810 "MachineIndependent/glslang.y" + case 229: /* type_specifier_nonarray: IVEC4 */ +#line 1818 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 7531 "MachineIndependent/glslang_tab.cpp" +#line 7548 "MachineIndependent/glslang_tab.cpp" break; - case 229: /* type_specifier_nonarray: UVEC2 */ -#line 1815 "MachineIndependent/glslang.y" + case 230: /* type_specifier_nonarray: UVEC2 */ +#line 1823 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 7542 "MachineIndependent/glslang_tab.cpp" +#line 7559 "MachineIndependent/glslang_tab.cpp" break; - case 230: /* type_specifier_nonarray: UVEC3 */ -#line 1821 "MachineIndependent/glslang.y" + case 231: /* type_specifier_nonarray: UVEC3 */ +#line 1829 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 7553 "MachineIndependent/glslang_tab.cpp" +#line 7570 "MachineIndependent/glslang_tab.cpp" break; - case 231: /* type_specifier_nonarray: UVEC4 */ -#line 1827 "MachineIndependent/glslang.y" + case 232: /* type_specifier_nonarray: UVEC4 */ +#line 1835 "MachineIndependent/glslang.y" { parseContext.fullIntegerCheck((yyvsp[0].lex).loc, "unsigned integer vector"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 7564 "MachineIndependent/glslang_tab.cpp" +#line 7581 "MachineIndependent/glslang_tab.cpp" break; - case 232: /* type_specifier_nonarray: MAT2 */ -#line 1833 "MachineIndependent/glslang.y" + case 233: /* type_specifier_nonarray: MAT2 */ +#line 1841 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7574 "MachineIndependent/glslang_tab.cpp" +#line 7591 "MachineIndependent/glslang_tab.cpp" break; - case 233: /* type_specifier_nonarray: MAT3 */ -#line 1838 "MachineIndependent/glslang.y" + case 234: /* type_specifier_nonarray: MAT3 */ +#line 1846 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7584 "MachineIndependent/glslang_tab.cpp" +#line 7601 "MachineIndependent/glslang_tab.cpp" break; - case 234: /* type_specifier_nonarray: MAT4 */ -#line 1843 "MachineIndependent/glslang.y" + case 235: /* type_specifier_nonarray: MAT4 */ +#line 1851 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7594 "MachineIndependent/glslang_tab.cpp" +#line 7611 "MachineIndependent/glslang_tab.cpp" break; - case 235: /* type_specifier_nonarray: MAT2X2 */ -#line 1848 "MachineIndependent/glslang.y" + case 236: /* type_specifier_nonarray: MAT2X2 */ +#line 1856 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 7604 "MachineIndependent/glslang_tab.cpp" +#line 7621 "MachineIndependent/glslang_tab.cpp" break; - case 236: /* type_specifier_nonarray: MAT2X3 */ -#line 1853 "MachineIndependent/glslang.y" + case 237: /* type_specifier_nonarray: MAT2X3 */ +#line 1861 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 7614 "MachineIndependent/glslang_tab.cpp" +#line 7631 "MachineIndependent/glslang_tab.cpp" break; - case 237: /* type_specifier_nonarray: MAT2X4 */ -#line 1858 "MachineIndependent/glslang.y" + case 238: /* type_specifier_nonarray: MAT2X4 */ +#line 1866 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 7624 "MachineIndependent/glslang_tab.cpp" +#line 7641 "MachineIndependent/glslang_tab.cpp" break; - case 238: /* type_specifier_nonarray: MAT3X2 */ -#line 1863 "MachineIndependent/glslang.y" + case 239: /* type_specifier_nonarray: MAT3X2 */ +#line 1871 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 7634 "MachineIndependent/glslang_tab.cpp" +#line 7651 "MachineIndependent/glslang_tab.cpp" break; - case 239: /* type_specifier_nonarray: MAT3X3 */ -#line 1868 "MachineIndependent/glslang.y" + case 240: /* type_specifier_nonarray: MAT3X3 */ +#line 1876 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 7644 "MachineIndependent/glslang_tab.cpp" +#line 7661 "MachineIndependent/glslang_tab.cpp" break; - case 240: /* type_specifier_nonarray: MAT3X4 */ -#line 1873 "MachineIndependent/glslang.y" + case 241: /* type_specifier_nonarray: MAT3X4 */ +#line 1881 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 7654 "MachineIndependent/glslang_tab.cpp" +#line 7671 "MachineIndependent/glslang_tab.cpp" break; - case 241: /* type_specifier_nonarray: MAT4X2 */ -#line 1878 "MachineIndependent/glslang.y" + case 242: /* type_specifier_nonarray: MAT4X2 */ +#line 1886 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 7664 "MachineIndependent/glslang_tab.cpp" +#line 7681 "MachineIndependent/glslang_tab.cpp" break; - case 242: /* type_specifier_nonarray: MAT4X3 */ -#line 1883 "MachineIndependent/glslang.y" + case 243: /* type_specifier_nonarray: MAT4X3 */ +#line 1891 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 7674 "MachineIndependent/glslang_tab.cpp" +#line 7691 "MachineIndependent/glslang_tab.cpp" break; - case 243: /* type_specifier_nonarray: MAT4X4 */ -#line 1888 "MachineIndependent/glslang.y" + case 244: /* type_specifier_nonarray: MAT4X4 */ +#line 1896 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 7684 "MachineIndependent/glslang_tab.cpp" +#line 7701 "MachineIndependent/glslang_tab.cpp" break; - case 244: /* type_specifier_nonarray: DOUBLE */ -#line 1894 "MachineIndependent/glslang.y" + case 245: /* type_specifier_nonarray: DOUBLE */ +#line 1902 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7692,121 +7709,121 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7696 "MachineIndependent/glslang_tab.cpp" +#line 7713 "MachineIndependent/glslang_tab.cpp" break; - case 245: /* type_specifier_nonarray: FLOAT16_T */ -#line 1901 "MachineIndependent/glslang.y" + case 246: /* type_specifier_nonarray: FLOAT16_T */ +#line 1909 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "float16_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; } -#line 7706 "MachineIndependent/glslang_tab.cpp" +#line 7723 "MachineIndependent/glslang_tab.cpp" break; - case 246: /* type_specifier_nonarray: FLOAT32_T */ -#line 1906 "MachineIndependent/glslang.y" + case 247: /* type_specifier_nonarray: FLOAT32_T */ +#line 1914 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; } -#line 7716 "MachineIndependent/glslang_tab.cpp" +#line 7733 "MachineIndependent/glslang_tab.cpp" break; - case 247: /* type_specifier_nonarray: FLOAT64_T */ -#line 1911 "MachineIndependent/glslang.y" + case 248: /* type_specifier_nonarray: FLOAT64_T */ +#line 1919 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; } -#line 7726 "MachineIndependent/glslang_tab.cpp" +#line 7743 "MachineIndependent/glslang_tab.cpp" break; - case 248: /* type_specifier_nonarray: INT8_T */ -#line 1916 "MachineIndependent/glslang.y" + case 249: /* type_specifier_nonarray: INT8_T */ +#line 1924 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; } -#line 7736 "MachineIndependent/glslang_tab.cpp" +#line 7753 "MachineIndependent/glslang_tab.cpp" break; - case 249: /* type_specifier_nonarray: UINT8_T */ -#line 1921 "MachineIndependent/glslang.y" + case 250: /* type_specifier_nonarray: UINT8_T */ +#line 1929 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; } -#line 7746 "MachineIndependent/glslang_tab.cpp" +#line 7763 "MachineIndependent/glslang_tab.cpp" break; - case 250: /* type_specifier_nonarray: INT16_T */ -#line 1926 "MachineIndependent/glslang.y" + case 251: /* type_specifier_nonarray: INT16_T */ +#line 1934 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; } -#line 7756 "MachineIndependent/glslang_tab.cpp" +#line 7773 "MachineIndependent/glslang_tab.cpp" break; - case 251: /* type_specifier_nonarray: UINT16_T */ -#line 1931 "MachineIndependent/glslang.y" + case 252: /* type_specifier_nonarray: UINT16_T */ +#line 1939 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; } -#line 7766 "MachineIndependent/glslang_tab.cpp" +#line 7783 "MachineIndependent/glslang_tab.cpp" break; - case 252: /* type_specifier_nonarray: INT32_T */ -#line 1936 "MachineIndependent/glslang.y" + case 253: /* type_specifier_nonarray: INT32_T */ +#line 1944 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; } -#line 7776 "MachineIndependent/glslang_tab.cpp" +#line 7793 "MachineIndependent/glslang_tab.cpp" break; - case 253: /* type_specifier_nonarray: UINT32_T */ -#line 1941 "MachineIndependent/glslang.y" + case 254: /* type_specifier_nonarray: UINT32_T */ +#line 1949 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; } -#line 7786 "MachineIndependent/glslang_tab.cpp" +#line 7803 "MachineIndependent/glslang_tab.cpp" break; - case 254: /* type_specifier_nonarray: INT64_T */ -#line 1946 "MachineIndependent/glslang.y" + case 255: /* type_specifier_nonarray: INT64_T */ +#line 1954 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; } -#line 7796 "MachineIndependent/glslang_tab.cpp" +#line 7813 "MachineIndependent/glslang_tab.cpp" break; - case 255: /* type_specifier_nonarray: UINT64_T */ -#line 1951 "MachineIndependent/glslang.y" + case 256: /* type_specifier_nonarray: UINT64_T */ +#line 1959 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; } -#line 7806 "MachineIndependent/glslang_tab.cpp" +#line 7823 "MachineIndependent/glslang_tab.cpp" break; - case 256: /* type_specifier_nonarray: DVEC2 */ -#line 1956 "MachineIndependent/glslang.y" + case 257: /* type_specifier_nonarray: DVEC2 */ +#line 1964 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7815,11 +7832,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7819 "MachineIndependent/glslang_tab.cpp" +#line 7836 "MachineIndependent/glslang_tab.cpp" break; - case 257: /* type_specifier_nonarray: DVEC3 */ -#line 1964 "MachineIndependent/glslang.y" + case 258: /* type_specifier_nonarray: DVEC3 */ +#line 1972 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7828,11 +7845,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7832 "MachineIndependent/glslang_tab.cpp" +#line 7849 "MachineIndependent/glslang_tab.cpp" break; - case 258: /* type_specifier_nonarray: DVEC4 */ -#line 1972 "MachineIndependent/glslang.y" + case 259: /* type_specifier_nonarray: DVEC4 */ +#line 1980 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double vector"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -7841,374 +7858,374 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7845 "MachineIndependent/glslang_tab.cpp" +#line 7862 "MachineIndependent/glslang_tab.cpp" break; - case 259: /* type_specifier_nonarray: F16VEC2 */ -#line 1980 "MachineIndependent/glslang.y" + case 260: /* type_specifier_nonarray: F16VEC2 */ +#line 1988 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(2); } -#line 7856 "MachineIndependent/glslang_tab.cpp" +#line 7873 "MachineIndependent/glslang_tab.cpp" break; - case 260: /* type_specifier_nonarray: F16VEC3 */ -#line 1986 "MachineIndependent/glslang.y" + case 261: /* type_specifier_nonarray: F16VEC3 */ +#line 1994 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(3); } -#line 7867 "MachineIndependent/glslang_tab.cpp" +#line 7884 "MachineIndependent/glslang_tab.cpp" break; - case 261: /* type_specifier_nonarray: F16VEC4 */ -#line 1992 "MachineIndependent/glslang.y" + case 262: /* type_specifier_nonarray: F16VEC4 */ +#line 2000 "MachineIndependent/glslang.y" { parseContext.float16ScalarVectorCheck((yyvsp[0].lex).loc, "half float vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setVector(4); } -#line 7878 "MachineIndependent/glslang_tab.cpp" +#line 7895 "MachineIndependent/glslang_tab.cpp" break; - case 262: /* type_specifier_nonarray: F32VEC2 */ -#line 1998 "MachineIndependent/glslang.y" + case 263: /* type_specifier_nonarray: F32VEC2 */ +#line 2006 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(2); } -#line 7889 "MachineIndependent/glslang_tab.cpp" +#line 7906 "MachineIndependent/glslang_tab.cpp" break; - case 263: /* type_specifier_nonarray: F32VEC3 */ -#line 2004 "MachineIndependent/glslang.y" + case 264: /* type_specifier_nonarray: F32VEC3 */ +#line 2012 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(3); } -#line 7900 "MachineIndependent/glslang_tab.cpp" +#line 7917 "MachineIndependent/glslang_tab.cpp" break; - case 264: /* type_specifier_nonarray: F32VEC4 */ -#line 2010 "MachineIndependent/glslang.y" + case 265: /* type_specifier_nonarray: F32VEC4 */ +#line 2018 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setVector(4); } -#line 7911 "MachineIndependent/glslang_tab.cpp" +#line 7928 "MachineIndependent/glslang_tab.cpp" break; - case 265: /* type_specifier_nonarray: F64VEC2 */ -#line 2016 "MachineIndependent/glslang.y" + case 266: /* type_specifier_nonarray: F64VEC2 */ +#line 2024 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(2); } -#line 7922 "MachineIndependent/glslang_tab.cpp" +#line 7939 "MachineIndependent/glslang_tab.cpp" break; - case 266: /* type_specifier_nonarray: F64VEC3 */ -#line 2022 "MachineIndependent/glslang.y" + case 267: /* type_specifier_nonarray: F64VEC3 */ +#line 2030 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(3); } -#line 7933 "MachineIndependent/glslang_tab.cpp" +#line 7950 "MachineIndependent/glslang_tab.cpp" break; - case 267: /* type_specifier_nonarray: F64VEC4 */ -#line 2028 "MachineIndependent/glslang.y" + case 268: /* type_specifier_nonarray: F64VEC4 */ +#line 2036 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setVector(4); } -#line 7944 "MachineIndependent/glslang_tab.cpp" +#line 7961 "MachineIndependent/glslang_tab.cpp" break; - case 268: /* type_specifier_nonarray: I8VEC2 */ -#line 2034 "MachineIndependent/glslang.y" + case 269: /* type_specifier_nonarray: I8VEC2 */ +#line 2042 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(2); } -#line 7955 "MachineIndependent/glslang_tab.cpp" +#line 7972 "MachineIndependent/glslang_tab.cpp" break; - case 269: /* type_specifier_nonarray: I8VEC3 */ -#line 2040 "MachineIndependent/glslang.y" + case 270: /* type_specifier_nonarray: I8VEC3 */ +#line 2048 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(3); } -#line 7966 "MachineIndependent/glslang_tab.cpp" +#line 7983 "MachineIndependent/glslang_tab.cpp" break; - case 270: /* type_specifier_nonarray: I8VEC4 */ -#line 2046 "MachineIndependent/glslang.y" + case 271: /* type_specifier_nonarray: I8VEC4 */ +#line 2054 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt8; (yyval.interm.type).setVector(4); } -#line 7977 "MachineIndependent/glslang_tab.cpp" +#line 7994 "MachineIndependent/glslang_tab.cpp" break; - case 271: /* type_specifier_nonarray: I16VEC2 */ -#line 2052 "MachineIndependent/glslang.y" + case 272: /* type_specifier_nonarray: I16VEC2 */ +#line 2060 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(2); } -#line 7988 "MachineIndependent/glslang_tab.cpp" +#line 8005 "MachineIndependent/glslang_tab.cpp" break; - case 272: /* type_specifier_nonarray: I16VEC3 */ -#line 2058 "MachineIndependent/glslang.y" + case 273: /* type_specifier_nonarray: I16VEC3 */ +#line 2066 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(3); } -#line 7999 "MachineIndependent/glslang_tab.cpp" +#line 8016 "MachineIndependent/glslang_tab.cpp" break; - case 273: /* type_specifier_nonarray: I16VEC4 */ -#line 2064 "MachineIndependent/glslang.y" + case 274: /* type_specifier_nonarray: I16VEC4 */ +#line 2072 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt16; (yyval.interm.type).setVector(4); } -#line 8010 "MachineIndependent/glslang_tab.cpp" +#line 8027 "MachineIndependent/glslang_tab.cpp" break; - case 274: /* type_specifier_nonarray: I32VEC2 */ -#line 2070 "MachineIndependent/glslang.y" + case 275: /* type_specifier_nonarray: I32VEC2 */ +#line 2078 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(2); } -#line 8021 "MachineIndependent/glslang_tab.cpp" +#line 8038 "MachineIndependent/glslang_tab.cpp" break; - case 275: /* type_specifier_nonarray: I32VEC3 */ -#line 2076 "MachineIndependent/glslang.y" + case 276: /* type_specifier_nonarray: I32VEC3 */ +#line 2084 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(3); } -#line 8032 "MachineIndependent/glslang_tab.cpp" +#line 8049 "MachineIndependent/glslang_tab.cpp" break; - case 276: /* type_specifier_nonarray: I32VEC4 */ -#line 2082 "MachineIndependent/glslang.y" + case 277: /* type_specifier_nonarray: I32VEC4 */ +#line 2090 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit signed integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).setVector(4); } -#line 8043 "MachineIndependent/glslang_tab.cpp" +#line 8060 "MachineIndependent/glslang_tab.cpp" break; - case 277: /* type_specifier_nonarray: I64VEC2 */ -#line 2088 "MachineIndependent/glslang.y" + case 278: /* type_specifier_nonarray: I64VEC2 */ +#line 2096 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(2); } -#line 8054 "MachineIndependent/glslang_tab.cpp" +#line 8071 "MachineIndependent/glslang_tab.cpp" break; - case 278: /* type_specifier_nonarray: I64VEC3 */ -#line 2094 "MachineIndependent/glslang.y" + case 279: /* type_specifier_nonarray: I64VEC3 */ +#line 2102 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(3); } -#line 8065 "MachineIndependent/glslang_tab.cpp" +#line 8082 "MachineIndependent/glslang_tab.cpp" break; - case 279: /* type_specifier_nonarray: I64VEC4 */ -#line 2100 "MachineIndependent/glslang.y" + case 280: /* type_specifier_nonarray: I64VEC4 */ +#line 2108 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt64; (yyval.interm.type).setVector(4); } -#line 8076 "MachineIndependent/glslang_tab.cpp" +#line 8093 "MachineIndependent/glslang_tab.cpp" break; - case 280: /* type_specifier_nonarray: U8VEC2 */ -#line 2106 "MachineIndependent/glslang.y" + case 281: /* type_specifier_nonarray: U8VEC2 */ +#line 2114 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(2); } -#line 8087 "MachineIndependent/glslang_tab.cpp" +#line 8104 "MachineIndependent/glslang_tab.cpp" break; - case 281: /* type_specifier_nonarray: U8VEC3 */ -#line 2112 "MachineIndependent/glslang.y" + case 282: /* type_specifier_nonarray: U8VEC3 */ +#line 2120 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(3); } -#line 8098 "MachineIndependent/glslang_tab.cpp" +#line 8115 "MachineIndependent/glslang_tab.cpp" break; - case 282: /* type_specifier_nonarray: U8VEC4 */ -#line 2118 "MachineIndependent/glslang.y" + case 283: /* type_specifier_nonarray: U8VEC4 */ +#line 2126 "MachineIndependent/glslang.y" { parseContext.int8ScalarVectorCheck((yyvsp[0].lex).loc, "8-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint8; (yyval.interm.type).setVector(4); } -#line 8109 "MachineIndependent/glslang_tab.cpp" +#line 8126 "MachineIndependent/glslang_tab.cpp" break; - case 283: /* type_specifier_nonarray: U16VEC2 */ -#line 2124 "MachineIndependent/glslang.y" + case 284: /* type_specifier_nonarray: U16VEC2 */ +#line 2132 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(2); } -#line 8120 "MachineIndependent/glslang_tab.cpp" +#line 8137 "MachineIndependent/glslang_tab.cpp" break; - case 284: /* type_specifier_nonarray: U16VEC3 */ -#line 2130 "MachineIndependent/glslang.y" + case 285: /* type_specifier_nonarray: U16VEC3 */ +#line 2138 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(3); } -#line 8131 "MachineIndependent/glslang_tab.cpp" +#line 8148 "MachineIndependent/glslang_tab.cpp" break; - case 285: /* type_specifier_nonarray: U16VEC4 */ -#line 2136 "MachineIndependent/glslang.y" + case 286: /* type_specifier_nonarray: U16VEC4 */ +#line 2144 "MachineIndependent/glslang.y" { parseContext.int16ScalarVectorCheck((yyvsp[0].lex).loc, "16-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint16; (yyval.interm.type).setVector(4); } -#line 8142 "MachineIndependent/glslang_tab.cpp" +#line 8159 "MachineIndependent/glslang_tab.cpp" break; - case 286: /* type_specifier_nonarray: U32VEC2 */ -#line 2142 "MachineIndependent/glslang.y" + case 287: /* type_specifier_nonarray: U32VEC2 */ +#line 2150 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(2); } -#line 8153 "MachineIndependent/glslang_tab.cpp" +#line 8170 "MachineIndependent/glslang_tab.cpp" break; - case 287: /* type_specifier_nonarray: U32VEC3 */ -#line 2148 "MachineIndependent/glslang.y" + case 288: /* type_specifier_nonarray: U32VEC3 */ +#line 2156 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(3); } -#line 8164 "MachineIndependent/glslang_tab.cpp" +#line 8181 "MachineIndependent/glslang_tab.cpp" break; - case 288: /* type_specifier_nonarray: U32VEC4 */ -#line 2154 "MachineIndependent/glslang.y" + case 289: /* type_specifier_nonarray: U32VEC4 */ +#line 2162 "MachineIndependent/glslang.y" { parseContext.explicitInt32Check((yyvsp[0].lex).loc, "32-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).setVector(4); } -#line 8175 "MachineIndependent/glslang_tab.cpp" +#line 8192 "MachineIndependent/glslang_tab.cpp" break; - case 289: /* type_specifier_nonarray: U64VEC2 */ -#line 2160 "MachineIndependent/glslang.y" + case 290: /* type_specifier_nonarray: U64VEC2 */ +#line 2168 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(2); } -#line 8186 "MachineIndependent/glslang_tab.cpp" +#line 8203 "MachineIndependent/glslang_tab.cpp" break; - case 290: /* type_specifier_nonarray: U64VEC3 */ -#line 2166 "MachineIndependent/glslang.y" + case 291: /* type_specifier_nonarray: U64VEC3 */ +#line 2174 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(3); } -#line 8197 "MachineIndependent/glslang_tab.cpp" +#line 8214 "MachineIndependent/glslang_tab.cpp" break; - case 291: /* type_specifier_nonarray: U64VEC4 */ -#line 2172 "MachineIndependent/glslang.y" + case 292: /* type_specifier_nonarray: U64VEC4 */ +#line 2180 "MachineIndependent/glslang.y" { parseContext.int64Check((yyvsp[0].lex).loc, "64-bit unsigned integer vector", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint64; (yyval.interm.type).setVector(4); } -#line 8208 "MachineIndependent/glslang_tab.cpp" +#line 8225 "MachineIndependent/glslang_tab.cpp" break; - case 292: /* type_specifier_nonarray: DMAT2 */ -#line 2178 "MachineIndependent/glslang.y" + case 293: /* type_specifier_nonarray: DMAT2 */ +#line 2186 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8217,11 +8234,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8221 "MachineIndependent/glslang_tab.cpp" +#line 8238 "MachineIndependent/glslang_tab.cpp" break; - case 293: /* type_specifier_nonarray: DMAT3 */ -#line 2186 "MachineIndependent/glslang.y" + case 294: /* type_specifier_nonarray: DMAT3 */ +#line 2194 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8230,11 +8247,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8234 "MachineIndependent/glslang_tab.cpp" +#line 8251 "MachineIndependent/glslang_tab.cpp" break; - case 294: /* type_specifier_nonarray: DMAT4 */ -#line 2194 "MachineIndependent/glslang.y" + case 295: /* type_specifier_nonarray: DMAT4 */ +#line 2202 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8243,11 +8260,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8247 "MachineIndependent/glslang_tab.cpp" +#line 8264 "MachineIndependent/glslang_tab.cpp" break; - case 295: /* type_specifier_nonarray: DMAT2X2 */ -#line 2202 "MachineIndependent/glslang.y" + case 296: /* type_specifier_nonarray: DMAT2X2 */ +#line 2210 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8256,11 +8273,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8260 "MachineIndependent/glslang_tab.cpp" +#line 8277 "MachineIndependent/glslang_tab.cpp" break; - case 296: /* type_specifier_nonarray: DMAT2X3 */ -#line 2210 "MachineIndependent/glslang.y" + case 297: /* type_specifier_nonarray: DMAT2X3 */ +#line 2218 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8269,11 +8286,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8273 "MachineIndependent/glslang_tab.cpp" +#line 8290 "MachineIndependent/glslang_tab.cpp" break; - case 297: /* type_specifier_nonarray: DMAT2X4 */ -#line 2218 "MachineIndependent/glslang.y" + case 298: /* type_specifier_nonarray: DMAT2X4 */ +#line 2226 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8282,11 +8299,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8286 "MachineIndependent/glslang_tab.cpp" +#line 8303 "MachineIndependent/glslang_tab.cpp" break; - case 298: /* type_specifier_nonarray: DMAT3X2 */ -#line 2226 "MachineIndependent/glslang.y" + case 299: /* type_specifier_nonarray: DMAT3X2 */ +#line 2234 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8295,11 +8312,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8299 "MachineIndependent/glslang_tab.cpp" +#line 8316 "MachineIndependent/glslang_tab.cpp" break; - case 299: /* type_specifier_nonarray: DMAT3X3 */ -#line 2234 "MachineIndependent/glslang.y" + case 300: /* type_specifier_nonarray: DMAT3X3 */ +#line 2242 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8308,11 +8325,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8312 "MachineIndependent/glslang_tab.cpp" +#line 8329 "MachineIndependent/glslang_tab.cpp" break; - case 300: /* type_specifier_nonarray: DMAT3X4 */ -#line 2242 "MachineIndependent/glslang.y" + case 301: /* type_specifier_nonarray: DMAT3X4 */ +#line 2250 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8321,11 +8338,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8325 "MachineIndependent/glslang_tab.cpp" +#line 8342 "MachineIndependent/glslang_tab.cpp" break; - case 301: /* type_specifier_nonarray: DMAT4X2 */ -#line 2250 "MachineIndependent/glslang.y" + case 302: /* type_specifier_nonarray: DMAT4X2 */ +#line 2258 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8334,11 +8351,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8338 "MachineIndependent/glslang_tab.cpp" +#line 8355 "MachineIndependent/glslang_tab.cpp" break; - case 302: /* type_specifier_nonarray: DMAT4X3 */ -#line 2258 "MachineIndependent/glslang.y" + case 303: /* type_specifier_nonarray: DMAT4X3 */ +#line 2266 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8347,11 +8364,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8351 "MachineIndependent/glslang_tab.cpp" +#line 8368 "MachineIndependent/glslang_tab.cpp" break; - case 303: /* type_specifier_nonarray: DMAT4X4 */ -#line 2266 "MachineIndependent/glslang.y" + case 304: /* type_specifier_nonarray: DMAT4X4 */ +#line 2274 "MachineIndependent/glslang.y" { parseContext.requireProfile((yyvsp[0].lex).loc, ECoreProfile | ECompatibilityProfile, "double matrix"); if (! parseContext.symbolTable.atBuiltInLevel()) @@ -8360,2228 +8377,2228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8364 "MachineIndependent/glslang_tab.cpp" +#line 8381 "MachineIndependent/glslang_tab.cpp" break; - case 304: /* type_specifier_nonarray: F16MAT2 */ -#line 2274 "MachineIndependent/glslang.y" + case 305: /* type_specifier_nonarray: F16MAT2 */ +#line 2282 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 8375 "MachineIndependent/glslang_tab.cpp" +#line 8392 "MachineIndependent/glslang_tab.cpp" break; - case 305: /* type_specifier_nonarray: F16MAT3 */ -#line 2280 "MachineIndependent/glslang.y" + case 306: /* type_specifier_nonarray: F16MAT3 */ +#line 2288 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 8386 "MachineIndependent/glslang_tab.cpp" +#line 8403 "MachineIndependent/glslang_tab.cpp" break; - case 306: /* type_specifier_nonarray: F16MAT4 */ -#line 2286 "MachineIndependent/glslang.y" + case 307: /* type_specifier_nonarray: F16MAT4 */ +#line 2294 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 8397 "MachineIndependent/glslang_tab.cpp" +#line 8414 "MachineIndependent/glslang_tab.cpp" break; - case 307: /* type_specifier_nonarray: F16MAT2X2 */ -#line 2292 "MachineIndependent/glslang.y" + case 308: /* type_specifier_nonarray: F16MAT2X2 */ +#line 2300 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 2); } -#line 8408 "MachineIndependent/glslang_tab.cpp" +#line 8425 "MachineIndependent/glslang_tab.cpp" break; - case 308: /* type_specifier_nonarray: F16MAT2X3 */ -#line 2298 "MachineIndependent/glslang.y" + case 309: /* type_specifier_nonarray: F16MAT2X3 */ +#line 2306 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 3); } -#line 8419 "MachineIndependent/glslang_tab.cpp" +#line 8436 "MachineIndependent/glslang_tab.cpp" break; - case 309: /* type_specifier_nonarray: F16MAT2X4 */ -#line 2304 "MachineIndependent/glslang.y" + case 310: /* type_specifier_nonarray: F16MAT2X4 */ +#line 2312 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(2, 4); } -#line 8430 "MachineIndependent/glslang_tab.cpp" +#line 8447 "MachineIndependent/glslang_tab.cpp" break; - case 310: /* type_specifier_nonarray: F16MAT3X2 */ -#line 2310 "MachineIndependent/glslang.y" + case 311: /* type_specifier_nonarray: F16MAT3X2 */ +#line 2318 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 2); } -#line 8441 "MachineIndependent/glslang_tab.cpp" +#line 8458 "MachineIndependent/glslang_tab.cpp" break; - case 311: /* type_specifier_nonarray: F16MAT3X3 */ -#line 2316 "MachineIndependent/glslang.y" + case 312: /* type_specifier_nonarray: F16MAT3X3 */ +#line 2324 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 3); } -#line 8452 "MachineIndependent/glslang_tab.cpp" +#line 8469 "MachineIndependent/glslang_tab.cpp" break; - case 312: /* type_specifier_nonarray: F16MAT3X4 */ -#line 2322 "MachineIndependent/glslang.y" + case 313: /* type_specifier_nonarray: F16MAT3X4 */ +#line 2330 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(3, 4); } -#line 8463 "MachineIndependent/glslang_tab.cpp" +#line 8480 "MachineIndependent/glslang_tab.cpp" break; - case 313: /* type_specifier_nonarray: F16MAT4X2 */ -#line 2328 "MachineIndependent/glslang.y" + case 314: /* type_specifier_nonarray: F16MAT4X2 */ +#line 2336 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 2); } -#line 8474 "MachineIndependent/glslang_tab.cpp" +#line 8491 "MachineIndependent/glslang_tab.cpp" break; - case 314: /* type_specifier_nonarray: F16MAT4X3 */ -#line 2334 "MachineIndependent/glslang.y" + case 315: /* type_specifier_nonarray: F16MAT4X3 */ +#line 2342 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 3); } -#line 8485 "MachineIndependent/glslang_tab.cpp" +#line 8502 "MachineIndependent/glslang_tab.cpp" break; - case 315: /* type_specifier_nonarray: F16MAT4X4 */ -#line 2340 "MachineIndependent/glslang.y" + case 316: /* type_specifier_nonarray: F16MAT4X4 */ +#line 2348 "MachineIndependent/glslang.y" { parseContext.float16Check((yyvsp[0].lex).loc, "half float matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat16; (yyval.interm.type).setMatrix(4, 4); } -#line 8496 "MachineIndependent/glslang_tab.cpp" +#line 8513 "MachineIndependent/glslang_tab.cpp" break; - case 316: /* type_specifier_nonarray: F32MAT2 */ -#line 2346 "MachineIndependent/glslang.y" + case 317: /* type_specifier_nonarray: F32MAT2 */ +#line 2354 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 8507 "MachineIndependent/glslang_tab.cpp" +#line 8524 "MachineIndependent/glslang_tab.cpp" break; - case 317: /* type_specifier_nonarray: F32MAT3 */ -#line 2352 "MachineIndependent/glslang.y" + case 318: /* type_specifier_nonarray: F32MAT3 */ +#line 2360 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 8518 "MachineIndependent/glslang_tab.cpp" +#line 8535 "MachineIndependent/glslang_tab.cpp" break; - case 318: /* type_specifier_nonarray: F32MAT4 */ -#line 2358 "MachineIndependent/glslang.y" + case 319: /* type_specifier_nonarray: F32MAT4 */ +#line 2366 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 8529 "MachineIndependent/glslang_tab.cpp" +#line 8546 "MachineIndependent/glslang_tab.cpp" break; - case 319: /* type_specifier_nonarray: F32MAT2X2 */ -#line 2364 "MachineIndependent/glslang.y" + case 320: /* type_specifier_nonarray: F32MAT2X2 */ +#line 2372 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 2); } -#line 8540 "MachineIndependent/glslang_tab.cpp" +#line 8557 "MachineIndependent/glslang_tab.cpp" break; - case 320: /* type_specifier_nonarray: F32MAT2X3 */ -#line 2370 "MachineIndependent/glslang.y" + case 321: /* type_specifier_nonarray: F32MAT2X3 */ +#line 2378 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 3); } -#line 8551 "MachineIndependent/glslang_tab.cpp" +#line 8568 "MachineIndependent/glslang_tab.cpp" break; - case 321: /* type_specifier_nonarray: F32MAT2X4 */ -#line 2376 "MachineIndependent/glslang.y" + case 322: /* type_specifier_nonarray: F32MAT2X4 */ +#line 2384 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(2, 4); } -#line 8562 "MachineIndependent/glslang_tab.cpp" +#line 8579 "MachineIndependent/glslang_tab.cpp" break; - case 322: /* type_specifier_nonarray: F32MAT3X2 */ -#line 2382 "MachineIndependent/glslang.y" + case 323: /* type_specifier_nonarray: F32MAT3X2 */ +#line 2390 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 2); } -#line 8573 "MachineIndependent/glslang_tab.cpp" +#line 8590 "MachineIndependent/glslang_tab.cpp" break; - case 323: /* type_specifier_nonarray: F32MAT3X3 */ -#line 2388 "MachineIndependent/glslang.y" + case 324: /* type_specifier_nonarray: F32MAT3X3 */ +#line 2396 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 3); } -#line 8584 "MachineIndependent/glslang_tab.cpp" +#line 8601 "MachineIndependent/glslang_tab.cpp" break; - case 324: /* type_specifier_nonarray: F32MAT3X4 */ -#line 2394 "MachineIndependent/glslang.y" + case 325: /* type_specifier_nonarray: F32MAT3X4 */ +#line 2402 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(3, 4); } -#line 8595 "MachineIndependent/glslang_tab.cpp" +#line 8612 "MachineIndependent/glslang_tab.cpp" break; - case 325: /* type_specifier_nonarray: F32MAT4X2 */ -#line 2400 "MachineIndependent/glslang.y" + case 326: /* type_specifier_nonarray: F32MAT4X2 */ +#line 2408 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 2); } -#line 8606 "MachineIndependent/glslang_tab.cpp" +#line 8623 "MachineIndependent/glslang_tab.cpp" break; - case 326: /* type_specifier_nonarray: F32MAT4X3 */ -#line 2406 "MachineIndependent/glslang.y" + case 327: /* type_specifier_nonarray: F32MAT4X3 */ +#line 2414 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 3); } -#line 8617 "MachineIndependent/glslang_tab.cpp" +#line 8634 "MachineIndependent/glslang_tab.cpp" break; - case 327: /* type_specifier_nonarray: F32MAT4X4 */ -#line 2412 "MachineIndependent/glslang.y" + case 328: /* type_specifier_nonarray: F32MAT4X4 */ +#line 2420 "MachineIndependent/glslang.y" { parseContext.explicitFloat32Check((yyvsp[0].lex).loc, "float32_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).setMatrix(4, 4); } -#line 8628 "MachineIndependent/glslang_tab.cpp" +#line 8645 "MachineIndependent/glslang_tab.cpp" break; - case 328: /* type_specifier_nonarray: F64MAT2 */ -#line 2418 "MachineIndependent/glslang.y" + case 329: /* type_specifier_nonarray: F64MAT2 */ +#line 2426 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8639 "MachineIndependent/glslang_tab.cpp" +#line 8656 "MachineIndependent/glslang_tab.cpp" break; - case 329: /* type_specifier_nonarray: F64MAT3 */ -#line 2424 "MachineIndependent/glslang.y" + case 330: /* type_specifier_nonarray: F64MAT3 */ +#line 2432 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8650 "MachineIndependent/glslang_tab.cpp" +#line 8667 "MachineIndependent/glslang_tab.cpp" break; - case 330: /* type_specifier_nonarray: F64MAT4 */ -#line 2430 "MachineIndependent/glslang.y" + case 331: /* type_specifier_nonarray: F64MAT4 */ +#line 2438 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8661 "MachineIndependent/glslang_tab.cpp" +#line 8678 "MachineIndependent/glslang_tab.cpp" break; - case 331: /* type_specifier_nonarray: F64MAT2X2 */ -#line 2436 "MachineIndependent/glslang.y" + case 332: /* type_specifier_nonarray: F64MAT2X2 */ +#line 2444 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 2); } -#line 8672 "MachineIndependent/glslang_tab.cpp" +#line 8689 "MachineIndependent/glslang_tab.cpp" break; - case 332: /* type_specifier_nonarray: F64MAT2X3 */ -#line 2442 "MachineIndependent/glslang.y" + case 333: /* type_specifier_nonarray: F64MAT2X3 */ +#line 2450 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 3); } -#line 8683 "MachineIndependent/glslang_tab.cpp" +#line 8700 "MachineIndependent/glslang_tab.cpp" break; - case 333: /* type_specifier_nonarray: F64MAT2X4 */ -#line 2448 "MachineIndependent/glslang.y" + case 334: /* type_specifier_nonarray: F64MAT2X4 */ +#line 2456 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(2, 4); } -#line 8694 "MachineIndependent/glslang_tab.cpp" +#line 8711 "MachineIndependent/glslang_tab.cpp" break; - case 334: /* type_specifier_nonarray: F64MAT3X2 */ -#line 2454 "MachineIndependent/glslang.y" + case 335: /* type_specifier_nonarray: F64MAT3X2 */ +#line 2462 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 2); } -#line 8705 "MachineIndependent/glslang_tab.cpp" +#line 8722 "MachineIndependent/glslang_tab.cpp" break; - case 335: /* type_specifier_nonarray: F64MAT3X3 */ -#line 2460 "MachineIndependent/glslang.y" + case 336: /* type_specifier_nonarray: F64MAT3X3 */ +#line 2468 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 3); } -#line 8716 "MachineIndependent/glslang_tab.cpp" +#line 8733 "MachineIndependent/glslang_tab.cpp" break; - case 336: /* type_specifier_nonarray: F64MAT3X4 */ -#line 2466 "MachineIndependent/glslang.y" + case 337: /* type_specifier_nonarray: F64MAT3X4 */ +#line 2474 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(3, 4); } -#line 8727 "MachineIndependent/glslang_tab.cpp" +#line 8744 "MachineIndependent/glslang_tab.cpp" break; - case 337: /* type_specifier_nonarray: F64MAT4X2 */ -#line 2472 "MachineIndependent/glslang.y" + case 338: /* type_specifier_nonarray: F64MAT4X2 */ +#line 2480 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 2); } -#line 8738 "MachineIndependent/glslang_tab.cpp" +#line 8755 "MachineIndependent/glslang_tab.cpp" break; - case 338: /* type_specifier_nonarray: F64MAT4X3 */ -#line 2478 "MachineIndependent/glslang.y" + case 339: /* type_specifier_nonarray: F64MAT4X3 */ +#line 2486 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 3); } -#line 8749 "MachineIndependent/glslang_tab.cpp" +#line 8766 "MachineIndependent/glslang_tab.cpp" break; - case 339: /* type_specifier_nonarray: F64MAT4X4 */ -#line 2484 "MachineIndependent/glslang.y" + case 340: /* type_specifier_nonarray: F64MAT4X4 */ +#line 2492 "MachineIndependent/glslang.y" { parseContext.explicitFloat64Check((yyvsp[0].lex).loc, "float64_t matrix", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtDouble; (yyval.interm.type).setMatrix(4, 4); } -#line 8760 "MachineIndependent/glslang_tab.cpp" +#line 8777 "MachineIndependent/glslang_tab.cpp" break; - case 340: /* type_specifier_nonarray: ACCSTRUCTNV */ -#line 2490 "MachineIndependent/glslang.y" + case 341: /* type_specifier_nonarray: ACCSTRUCTNV */ +#line 2498 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8769 "MachineIndependent/glslang_tab.cpp" +#line 8786 "MachineIndependent/glslang_tab.cpp" break; - case 341: /* type_specifier_nonarray: ACCSTRUCTEXT */ -#line 2494 "MachineIndependent/glslang.y" + case 342: /* type_specifier_nonarray: ACCSTRUCTEXT */ +#line 2502 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAccStruct; } -#line 8778 "MachineIndependent/glslang_tab.cpp" +#line 8795 "MachineIndependent/glslang_tab.cpp" break; - case 342: /* type_specifier_nonarray: RAYQUERYEXT */ -#line 2498 "MachineIndependent/glslang.y" + case 343: /* type_specifier_nonarray: RAYQUERYEXT */ +#line 2506 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtRayQuery; } -#line 8787 "MachineIndependent/glslang_tab.cpp" +#line 8804 "MachineIndependent/glslang_tab.cpp" break; - case 343: /* type_specifier_nonarray: ATOMIC_UINT */ -#line 2502 "MachineIndependent/glslang.y" + case 344: /* type_specifier_nonarray: ATOMIC_UINT */ +#line 2510 "MachineIndependent/glslang.y" { parseContext.vulkanRemoved((yyvsp[0].lex).loc, "atomic counter types"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtAtomicUint; } -#line 8797 "MachineIndependent/glslang_tab.cpp" +#line 8814 "MachineIndependent/glslang_tab.cpp" break; - case 344: /* type_specifier_nonarray: SAMPLER1D */ -#line 2507 "MachineIndependent/glslang.y" + case 345: /* type_specifier_nonarray: SAMPLER1D */ +#line 2515 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D); } -#line 8807 "MachineIndependent/glslang_tab.cpp" +#line 8824 "MachineIndependent/glslang_tab.cpp" break; - case 345: /* type_specifier_nonarray: SAMPLER2D */ -#line 2513 "MachineIndependent/glslang.y" + case 346: /* type_specifier_nonarray: SAMPLER2D */ +#line 2521 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); } -#line 8817 "MachineIndependent/glslang_tab.cpp" +#line 8834 "MachineIndependent/glslang_tab.cpp" break; - case 346: /* type_specifier_nonarray: SAMPLER3D */ -#line 2518 "MachineIndependent/glslang.y" + case 347: /* type_specifier_nonarray: SAMPLER3D */ +#line 2526 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd3D); } -#line 8827 "MachineIndependent/glslang_tab.cpp" +#line 8844 "MachineIndependent/glslang_tab.cpp" break; - case 347: /* type_specifier_nonarray: SAMPLERCUBE */ -#line 2523 "MachineIndependent/glslang.y" + case 348: /* type_specifier_nonarray: SAMPLERCUBE */ +#line 2531 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube); } -#line 8837 "MachineIndependent/glslang_tab.cpp" +#line 8854 "MachineIndependent/glslang_tab.cpp" break; - case 348: /* type_specifier_nonarray: SAMPLER2DSHADOW */ -#line 2528 "MachineIndependent/glslang.y" + case 349: /* type_specifier_nonarray: SAMPLER2DSHADOW */ +#line 2536 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, true); } -#line 8847 "MachineIndependent/glslang_tab.cpp" +#line 8864 "MachineIndependent/glslang_tab.cpp" break; - case 349: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ -#line 2533 "MachineIndependent/glslang.y" + case 350: /* type_specifier_nonarray: SAMPLERCUBESHADOW */ +#line 2541 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, false, true); } -#line 8857 "MachineIndependent/glslang_tab.cpp" +#line 8874 "MachineIndependent/glslang_tab.cpp" break; - case 350: /* type_specifier_nonarray: SAMPLER2DARRAY */ -#line 2538 "MachineIndependent/glslang.y" + case 351: /* type_specifier_nonarray: SAMPLER2DARRAY */ +#line 2546 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true); } -#line 8867 "MachineIndependent/glslang_tab.cpp" +#line 8884 "MachineIndependent/glslang_tab.cpp" break; - case 351: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ -#line 2543 "MachineIndependent/glslang.y" + case 352: /* type_specifier_nonarray: SAMPLER2DARRAYSHADOW */ +#line 2551 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, true); } -#line 8877 "MachineIndependent/glslang_tab.cpp" +#line 8894 "MachineIndependent/glslang_tab.cpp" break; - case 352: /* type_specifier_nonarray: SAMPLER1DSHADOW */ -#line 2549 "MachineIndependent/glslang.y" + case 353: /* type_specifier_nonarray: SAMPLER1DSHADOW */ +#line 2557 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, false, true); } -#line 8887 "MachineIndependent/glslang_tab.cpp" +#line 8904 "MachineIndependent/glslang_tab.cpp" break; - case 353: /* type_specifier_nonarray: SAMPLER1DARRAY */ -#line 2554 "MachineIndependent/glslang.y" + case 354: /* type_specifier_nonarray: SAMPLER1DARRAY */ +#line 2562 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true); } -#line 8897 "MachineIndependent/glslang_tab.cpp" +#line 8914 "MachineIndependent/glslang_tab.cpp" break; - case 354: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ -#line 2559 "MachineIndependent/glslang.y" + case 355: /* type_specifier_nonarray: SAMPLER1DARRAYSHADOW */ +#line 2567 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd1D, true, true); } -#line 8907 "MachineIndependent/glslang_tab.cpp" +#line 8924 "MachineIndependent/glslang_tab.cpp" break; - case 355: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ -#line 2564 "MachineIndependent/glslang.y" + case 356: /* type_specifier_nonarray: SAMPLERCUBEARRAY */ +#line 2572 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true); } -#line 8917 "MachineIndependent/glslang_tab.cpp" +#line 8934 "MachineIndependent/glslang_tab.cpp" break; - case 356: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ -#line 2569 "MachineIndependent/glslang.y" + case 357: /* type_specifier_nonarray: SAMPLERCUBEARRAYSHADOW */ +#line 2577 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdCube, true, true); } -#line 8927 "MachineIndependent/glslang_tab.cpp" +#line 8944 "MachineIndependent/glslang_tab.cpp" break; - case 357: /* type_specifier_nonarray: F16SAMPLER1D */ -#line 2574 "MachineIndependent/glslang.y" + case 358: /* type_specifier_nonarray: F16SAMPLER1D */ +#line 2582 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D); } -#line 8938 "MachineIndependent/glslang_tab.cpp" +#line 8955 "MachineIndependent/glslang_tab.cpp" break; - case 358: /* type_specifier_nonarray: F16SAMPLER2D */ -#line 2580 "MachineIndependent/glslang.y" + case 359: /* type_specifier_nonarray: F16SAMPLER2D */ +#line 2588 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D); } -#line 8949 "MachineIndependent/glslang_tab.cpp" +#line 8966 "MachineIndependent/glslang_tab.cpp" break; - case 359: /* type_specifier_nonarray: F16SAMPLER3D */ -#line 2586 "MachineIndependent/glslang.y" + case 360: /* type_specifier_nonarray: F16SAMPLER3D */ +#line 2594 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd3D); } -#line 8960 "MachineIndependent/glslang_tab.cpp" +#line 8977 "MachineIndependent/glslang_tab.cpp" break; - case 360: /* type_specifier_nonarray: F16SAMPLERCUBE */ -#line 2592 "MachineIndependent/glslang.y" + case 361: /* type_specifier_nonarray: F16SAMPLERCUBE */ +#line 2600 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube); } -#line 8971 "MachineIndependent/glslang_tab.cpp" +#line 8988 "MachineIndependent/glslang_tab.cpp" break; - case 361: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ -#line 2598 "MachineIndependent/glslang.y" + case 362: /* type_specifier_nonarray: F16SAMPLER1DSHADOW */ +#line 2606 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, false, true); } -#line 8982 "MachineIndependent/glslang_tab.cpp" +#line 8999 "MachineIndependent/glslang_tab.cpp" break; - case 362: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ -#line 2604 "MachineIndependent/glslang.y" + case 363: /* type_specifier_nonarray: F16SAMPLER2DSHADOW */ +#line 2612 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, true); } -#line 8993 "MachineIndependent/glslang_tab.cpp" +#line 9010 "MachineIndependent/glslang_tab.cpp" break; - case 363: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ -#line 2610 "MachineIndependent/glslang.y" + case 364: /* type_specifier_nonarray: F16SAMPLERCUBESHADOW */ +#line 2618 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, false, true); } -#line 9004 "MachineIndependent/glslang_tab.cpp" +#line 9021 "MachineIndependent/glslang_tab.cpp" break; - case 364: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ -#line 2616 "MachineIndependent/glslang.y" + case 365: /* type_specifier_nonarray: F16SAMPLER1DARRAY */ +#line 2624 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true); } -#line 9015 "MachineIndependent/glslang_tab.cpp" +#line 9032 "MachineIndependent/glslang_tab.cpp" break; - case 365: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ -#line 2622 "MachineIndependent/glslang.y" + case 366: /* type_specifier_nonarray: F16SAMPLER2DARRAY */ +#line 2630 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true); } -#line 9026 "MachineIndependent/glslang_tab.cpp" +#line 9043 "MachineIndependent/glslang_tab.cpp" break; - case 366: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ -#line 2628 "MachineIndependent/glslang.y" + case 367: /* type_specifier_nonarray: F16SAMPLER1DARRAYSHADOW */ +#line 2636 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd1D, true, true); } -#line 9037 "MachineIndependent/glslang_tab.cpp" +#line 9054 "MachineIndependent/glslang_tab.cpp" break; - case 367: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ -#line 2634 "MachineIndependent/glslang.y" + case 368: /* type_specifier_nonarray: F16SAMPLER2DARRAYSHADOW */ +#line 2642 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, true); } -#line 9048 "MachineIndependent/glslang_tab.cpp" +#line 9065 "MachineIndependent/glslang_tab.cpp" break; - case 368: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ -#line 2640 "MachineIndependent/glslang.y" + case 369: /* type_specifier_nonarray: F16SAMPLERCUBEARRAY */ +#line 2648 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true); } -#line 9059 "MachineIndependent/glslang_tab.cpp" +#line 9076 "MachineIndependent/glslang_tab.cpp" break; - case 369: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ -#line 2646 "MachineIndependent/glslang.y" + case 370: /* type_specifier_nonarray: F16SAMPLERCUBEARRAYSHADOW */ +#line 2654 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdCube, true, true); } -#line 9070 "MachineIndependent/glslang_tab.cpp" +#line 9087 "MachineIndependent/glslang_tab.cpp" break; - case 370: /* type_specifier_nonarray: ISAMPLER1D */ -#line 2652 "MachineIndependent/glslang.y" + case 371: /* type_specifier_nonarray: ISAMPLER1D */ +#line 2660 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D); } -#line 9080 "MachineIndependent/glslang_tab.cpp" +#line 9097 "MachineIndependent/glslang_tab.cpp" break; - case 371: /* type_specifier_nonarray: ISAMPLER2D */ -#line 2658 "MachineIndependent/glslang.y" + case 372: /* type_specifier_nonarray: ISAMPLER2D */ +#line 2666 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D); } -#line 9090 "MachineIndependent/glslang_tab.cpp" +#line 9107 "MachineIndependent/glslang_tab.cpp" break; - case 372: /* type_specifier_nonarray: ISAMPLER3D */ -#line 2663 "MachineIndependent/glslang.y" + case 373: /* type_specifier_nonarray: ISAMPLER3D */ +#line 2671 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd3D); } -#line 9100 "MachineIndependent/glslang_tab.cpp" +#line 9117 "MachineIndependent/glslang_tab.cpp" break; - case 373: /* type_specifier_nonarray: ISAMPLERCUBE */ -#line 2668 "MachineIndependent/glslang.y" + case 374: /* type_specifier_nonarray: ISAMPLERCUBE */ +#line 2676 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube); } -#line 9110 "MachineIndependent/glslang_tab.cpp" +#line 9127 "MachineIndependent/glslang_tab.cpp" break; - case 374: /* type_specifier_nonarray: ISAMPLER2DARRAY */ -#line 2673 "MachineIndependent/glslang.y" + case 375: /* type_specifier_nonarray: ISAMPLER2DARRAY */ +#line 2681 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true); } -#line 9120 "MachineIndependent/glslang_tab.cpp" +#line 9137 "MachineIndependent/glslang_tab.cpp" break; - case 375: /* type_specifier_nonarray: USAMPLER2D */ -#line 2678 "MachineIndependent/glslang.y" + case 376: /* type_specifier_nonarray: USAMPLER2D */ +#line 2686 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D); } -#line 9130 "MachineIndependent/glslang_tab.cpp" +#line 9147 "MachineIndependent/glslang_tab.cpp" break; - case 376: /* type_specifier_nonarray: USAMPLER3D */ -#line 2683 "MachineIndependent/glslang.y" + case 377: /* type_specifier_nonarray: USAMPLER3D */ +#line 2691 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd3D); } -#line 9140 "MachineIndependent/glslang_tab.cpp" +#line 9157 "MachineIndependent/glslang_tab.cpp" break; - case 377: /* type_specifier_nonarray: USAMPLERCUBE */ -#line 2688 "MachineIndependent/glslang.y" + case 378: /* type_specifier_nonarray: USAMPLERCUBE */ +#line 2696 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube); } -#line 9150 "MachineIndependent/glslang_tab.cpp" +#line 9167 "MachineIndependent/glslang_tab.cpp" break; - case 378: /* type_specifier_nonarray: ISAMPLER1DARRAY */ -#line 2694 "MachineIndependent/glslang.y" + case 379: /* type_specifier_nonarray: ISAMPLER1DARRAY */ +#line 2702 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd1D, true); } -#line 9160 "MachineIndependent/glslang_tab.cpp" +#line 9177 "MachineIndependent/glslang_tab.cpp" break; - case 379: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ -#line 2699 "MachineIndependent/glslang.y" + case 380: /* type_specifier_nonarray: ISAMPLERCUBEARRAY */ +#line 2707 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdCube, true); } -#line 9170 "MachineIndependent/glslang_tab.cpp" +#line 9187 "MachineIndependent/glslang_tab.cpp" break; - case 380: /* type_specifier_nonarray: USAMPLER1D */ -#line 2704 "MachineIndependent/glslang.y" + case 381: /* type_specifier_nonarray: USAMPLER1D */ +#line 2712 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D); } -#line 9180 "MachineIndependent/glslang_tab.cpp" +#line 9197 "MachineIndependent/glslang_tab.cpp" break; - case 381: /* type_specifier_nonarray: USAMPLER1DARRAY */ -#line 2709 "MachineIndependent/glslang.y" + case 382: /* type_specifier_nonarray: USAMPLER1DARRAY */ +#line 2717 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd1D, true); } -#line 9190 "MachineIndependent/glslang_tab.cpp" +#line 9207 "MachineIndependent/glslang_tab.cpp" break; - case 382: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ -#line 2714 "MachineIndependent/glslang.y" + case 383: /* type_specifier_nonarray: USAMPLERCUBEARRAY */ +#line 2722 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdCube, true); } -#line 9200 "MachineIndependent/glslang_tab.cpp" +#line 9217 "MachineIndependent/glslang_tab.cpp" break; - case 383: /* type_specifier_nonarray: TEXTURECUBEARRAY */ -#line 2719 "MachineIndependent/glslang.y" + case 384: /* type_specifier_nonarray: TEXTURECUBEARRAY */ +#line 2727 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube, true); } -#line 9210 "MachineIndependent/glslang_tab.cpp" +#line 9227 "MachineIndependent/glslang_tab.cpp" break; - case 384: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ -#line 2724 "MachineIndependent/glslang.y" + case 385: /* type_specifier_nonarray: ITEXTURECUBEARRAY */ +#line 2732 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube, true); } -#line 9220 "MachineIndependent/glslang_tab.cpp" +#line 9237 "MachineIndependent/glslang_tab.cpp" break; - case 385: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ -#line 2729 "MachineIndependent/glslang.y" + case 386: /* type_specifier_nonarray: UTEXTURECUBEARRAY */ +#line 2737 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube, true); } -#line 9230 "MachineIndependent/glslang_tab.cpp" +#line 9247 "MachineIndependent/glslang_tab.cpp" break; - case 386: /* type_specifier_nonarray: USAMPLER2DARRAY */ -#line 2735 "MachineIndependent/glslang.y" + case 387: /* type_specifier_nonarray: USAMPLER2DARRAY */ +#line 2743 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true); } -#line 9240 "MachineIndependent/glslang_tab.cpp" +#line 9257 "MachineIndependent/glslang_tab.cpp" break; - case 387: /* type_specifier_nonarray: TEXTURE2D */ -#line 2740 "MachineIndependent/glslang.y" + case 388: /* type_specifier_nonarray: TEXTURE2D */ +#line 2748 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D); } -#line 9250 "MachineIndependent/glslang_tab.cpp" +#line 9267 "MachineIndependent/glslang_tab.cpp" break; - case 388: /* type_specifier_nonarray: TEXTURE3D */ -#line 2745 "MachineIndependent/glslang.y" + case 389: /* type_specifier_nonarray: TEXTURE3D */ +#line 2753 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd3D); } -#line 9260 "MachineIndependent/glslang_tab.cpp" +#line 9277 "MachineIndependent/glslang_tab.cpp" break; - case 389: /* type_specifier_nonarray: TEXTURE2DARRAY */ -#line 2750 "MachineIndependent/glslang.y" + case 390: /* type_specifier_nonarray: TEXTURE2DARRAY */ +#line 2758 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true); } -#line 9270 "MachineIndependent/glslang_tab.cpp" +#line 9287 "MachineIndependent/glslang_tab.cpp" break; - case 390: /* type_specifier_nonarray: TEXTURECUBE */ -#line 2755 "MachineIndependent/glslang.y" + case 391: /* type_specifier_nonarray: TEXTURECUBE */ +#line 2763 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdCube); } -#line 9280 "MachineIndependent/glslang_tab.cpp" +#line 9297 "MachineIndependent/glslang_tab.cpp" break; - case 391: /* type_specifier_nonarray: ITEXTURE2D */ -#line 2760 "MachineIndependent/glslang.y" + case 392: /* type_specifier_nonarray: ITEXTURE2D */ +#line 2768 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D); } -#line 9290 "MachineIndependent/glslang_tab.cpp" +#line 9307 "MachineIndependent/glslang_tab.cpp" break; - case 392: /* type_specifier_nonarray: ITEXTURE3D */ -#line 2765 "MachineIndependent/glslang.y" + case 393: /* type_specifier_nonarray: ITEXTURE3D */ +#line 2773 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd3D); } -#line 9300 "MachineIndependent/glslang_tab.cpp" +#line 9317 "MachineIndependent/glslang_tab.cpp" break; - case 393: /* type_specifier_nonarray: ITEXTURECUBE */ -#line 2770 "MachineIndependent/glslang.y" + case 394: /* type_specifier_nonarray: ITEXTURECUBE */ +#line 2778 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdCube); } -#line 9310 "MachineIndependent/glslang_tab.cpp" +#line 9327 "MachineIndependent/glslang_tab.cpp" break; - case 394: /* type_specifier_nonarray: ITEXTURE2DARRAY */ -#line 2775 "MachineIndependent/glslang.y" + case 395: /* type_specifier_nonarray: ITEXTURE2DARRAY */ +#line 2783 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true); } -#line 9320 "MachineIndependent/glslang_tab.cpp" +#line 9337 "MachineIndependent/glslang_tab.cpp" break; - case 395: /* type_specifier_nonarray: UTEXTURE2D */ -#line 2780 "MachineIndependent/glslang.y" + case 396: /* type_specifier_nonarray: UTEXTURE2D */ +#line 2788 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D); } -#line 9330 "MachineIndependent/glslang_tab.cpp" +#line 9347 "MachineIndependent/glslang_tab.cpp" break; - case 396: /* type_specifier_nonarray: UTEXTURE3D */ -#line 2785 "MachineIndependent/glslang.y" + case 397: /* type_specifier_nonarray: UTEXTURE3D */ +#line 2793 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd3D); } -#line 9340 "MachineIndependent/glslang_tab.cpp" +#line 9357 "MachineIndependent/glslang_tab.cpp" break; - case 397: /* type_specifier_nonarray: UTEXTURECUBE */ -#line 2790 "MachineIndependent/glslang.y" + case 398: /* type_specifier_nonarray: UTEXTURECUBE */ +#line 2798 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdCube); } -#line 9350 "MachineIndependent/glslang_tab.cpp" +#line 9367 "MachineIndependent/glslang_tab.cpp" break; - case 398: /* type_specifier_nonarray: UTEXTURE2DARRAY */ -#line 2795 "MachineIndependent/glslang.y" + case 399: /* type_specifier_nonarray: UTEXTURE2DARRAY */ +#line 2803 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true); } -#line 9360 "MachineIndependent/glslang_tab.cpp" +#line 9377 "MachineIndependent/glslang_tab.cpp" break; - case 399: /* type_specifier_nonarray: SAMPLER */ -#line 2800 "MachineIndependent/glslang.y" + case 400: /* type_specifier_nonarray: SAMPLER */ +#line 2808 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(false); } -#line 9370 "MachineIndependent/glslang_tab.cpp" +#line 9387 "MachineIndependent/glslang_tab.cpp" break; - case 400: /* type_specifier_nonarray: SAMPLERSHADOW */ -#line 2805 "MachineIndependent/glslang.y" + case 401: /* type_specifier_nonarray: SAMPLERSHADOW */ +#line 2813 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setPureSampler(true); } -#line 9380 "MachineIndependent/glslang_tab.cpp" +#line 9397 "MachineIndependent/glslang_tab.cpp" break; - case 401: /* type_specifier_nonarray: SAMPLER2DRECT */ -#line 2811 "MachineIndependent/glslang.y" + case 402: /* type_specifier_nonarray: SAMPLER2DRECT */ +#line 2819 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect); } -#line 9390 "MachineIndependent/glslang_tab.cpp" +#line 9407 "MachineIndependent/glslang_tab.cpp" break; - case 402: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ -#line 2816 "MachineIndependent/glslang.y" + case 403: /* type_specifier_nonarray: SAMPLER2DRECTSHADOW */ +#line 2824 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdRect, false, true); } -#line 9400 "MachineIndependent/glslang_tab.cpp" +#line 9417 "MachineIndependent/glslang_tab.cpp" break; - case 403: /* type_specifier_nonarray: F16SAMPLER2DRECT */ -#line 2821 "MachineIndependent/glslang.y" + case 404: /* type_specifier_nonarray: F16SAMPLER2DRECT */ +#line 2829 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect); } -#line 9411 "MachineIndependent/glslang_tab.cpp" +#line 9428 "MachineIndependent/glslang_tab.cpp" break; - case 404: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ -#line 2827 "MachineIndependent/glslang.y" + case 405: /* type_specifier_nonarray: F16SAMPLER2DRECTSHADOW */ +#line 2835 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdRect, false, true); } -#line 9422 "MachineIndependent/glslang_tab.cpp" +#line 9439 "MachineIndependent/glslang_tab.cpp" break; - case 405: /* type_specifier_nonarray: ISAMPLER2DRECT */ -#line 2833 "MachineIndependent/glslang.y" + case 406: /* type_specifier_nonarray: ISAMPLER2DRECT */ +#line 2841 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdRect); } -#line 9432 "MachineIndependent/glslang_tab.cpp" +#line 9449 "MachineIndependent/glslang_tab.cpp" break; - case 406: /* type_specifier_nonarray: USAMPLER2DRECT */ -#line 2838 "MachineIndependent/glslang.y" + case 407: /* type_specifier_nonarray: USAMPLER2DRECT */ +#line 2846 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdRect); } -#line 9442 "MachineIndependent/glslang_tab.cpp" +#line 9459 "MachineIndependent/glslang_tab.cpp" break; - case 407: /* type_specifier_nonarray: SAMPLERBUFFER */ -#line 2843 "MachineIndependent/glslang.y" + case 408: /* type_specifier_nonarray: SAMPLERBUFFER */ +#line 2851 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, EsdBuffer); } -#line 9452 "MachineIndependent/glslang_tab.cpp" +#line 9469 "MachineIndependent/glslang_tab.cpp" break; - case 408: /* type_specifier_nonarray: F16SAMPLERBUFFER */ -#line 2848 "MachineIndependent/glslang.y" + case 409: /* type_specifier_nonarray: F16SAMPLERBUFFER */ +#line 2856 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, EsdBuffer); } -#line 9463 "MachineIndependent/glslang_tab.cpp" +#line 9480 "MachineIndependent/glslang_tab.cpp" break; - case 409: /* type_specifier_nonarray: ISAMPLERBUFFER */ -#line 2854 "MachineIndependent/glslang.y" + case 410: /* type_specifier_nonarray: ISAMPLERBUFFER */ +#line 2862 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, EsdBuffer); } -#line 9473 "MachineIndependent/glslang_tab.cpp" +#line 9490 "MachineIndependent/glslang_tab.cpp" break; - case 410: /* type_specifier_nonarray: USAMPLERBUFFER */ -#line 2859 "MachineIndependent/glslang.y" + case 411: /* type_specifier_nonarray: USAMPLERBUFFER */ +#line 2867 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, EsdBuffer); } -#line 9483 "MachineIndependent/glslang_tab.cpp" +#line 9500 "MachineIndependent/glslang_tab.cpp" break; - case 411: /* type_specifier_nonarray: SAMPLER2DMS */ -#line 2864 "MachineIndependent/glslang.y" + case 412: /* type_specifier_nonarray: SAMPLER2DMS */ +#line 2872 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, false, false, true); } -#line 9493 "MachineIndependent/glslang_tab.cpp" +#line 9510 "MachineIndependent/glslang_tab.cpp" break; - case 412: /* type_specifier_nonarray: F16SAMPLER2DMS */ -#line 2869 "MachineIndependent/glslang.y" + case 413: /* type_specifier_nonarray: F16SAMPLER2DMS */ +#line 2877 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, false, false, true); } -#line 9504 "MachineIndependent/glslang_tab.cpp" +#line 9521 "MachineIndependent/glslang_tab.cpp" break; - case 413: /* type_specifier_nonarray: ISAMPLER2DMS */ -#line 2875 "MachineIndependent/glslang.y" + case 414: /* type_specifier_nonarray: ISAMPLER2DMS */ +#line 2883 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, false, false, true); } -#line 9514 "MachineIndependent/glslang_tab.cpp" +#line 9531 "MachineIndependent/glslang_tab.cpp" break; - case 414: /* type_specifier_nonarray: USAMPLER2DMS */ -#line 2880 "MachineIndependent/glslang.y" + case 415: /* type_specifier_nonarray: USAMPLER2DMS */ +#line 2888 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, false, false, true); } -#line 9524 "MachineIndependent/glslang_tab.cpp" +#line 9541 "MachineIndependent/glslang_tab.cpp" break; - case 415: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ -#line 2885 "MachineIndependent/glslang.y" + case 416: /* type_specifier_nonarray: SAMPLER2DMSARRAY */ +#line 2893 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D, true, false, true); } -#line 9534 "MachineIndependent/glslang_tab.cpp" +#line 9551 "MachineIndependent/glslang_tab.cpp" break; - case 416: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ -#line 2890 "MachineIndependent/glslang.y" + case 417: /* type_specifier_nonarray: F16SAMPLER2DMSARRAY */ +#line 2898 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float sampler", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat16, Esd2D, true, false, true); } -#line 9545 "MachineIndependent/glslang_tab.cpp" +#line 9562 "MachineIndependent/glslang_tab.cpp" break; - case 417: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ -#line 2896 "MachineIndependent/glslang.y" + case 418: /* type_specifier_nonarray: ISAMPLER2DMSARRAY */ +#line 2904 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtInt, Esd2D, true, false, true); } -#line 9555 "MachineIndependent/glslang_tab.cpp" +#line 9572 "MachineIndependent/glslang_tab.cpp" break; - case 418: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ -#line 2901 "MachineIndependent/glslang.y" + case 419: /* type_specifier_nonarray: USAMPLER2DMSARRAY */ +#line 2909 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtUint, Esd2D, true, false, true); } -#line 9565 "MachineIndependent/glslang_tab.cpp" +#line 9582 "MachineIndependent/glslang_tab.cpp" break; - case 419: /* type_specifier_nonarray: TEXTURE1D */ -#line 2906 "MachineIndependent/glslang.y" + case 420: /* type_specifier_nonarray: TEXTURE1D */ +#line 2914 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D); } -#line 9575 "MachineIndependent/glslang_tab.cpp" +#line 9592 "MachineIndependent/glslang_tab.cpp" break; - case 420: /* type_specifier_nonarray: F16TEXTURE1D */ -#line 2911 "MachineIndependent/glslang.y" + case 421: /* type_specifier_nonarray: F16TEXTURE1D */ +#line 2919 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D); } -#line 9586 "MachineIndependent/glslang_tab.cpp" +#line 9603 "MachineIndependent/glslang_tab.cpp" break; - case 421: /* type_specifier_nonarray: F16TEXTURE2D */ -#line 2917 "MachineIndependent/glslang.y" + case 422: /* type_specifier_nonarray: F16TEXTURE2D */ +#line 2925 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D); } -#line 9597 "MachineIndependent/glslang_tab.cpp" +#line 9614 "MachineIndependent/glslang_tab.cpp" break; - case 422: /* type_specifier_nonarray: F16TEXTURE3D */ -#line 2923 "MachineIndependent/glslang.y" + case 423: /* type_specifier_nonarray: F16TEXTURE3D */ +#line 2931 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd3D); } -#line 9608 "MachineIndependent/glslang_tab.cpp" +#line 9625 "MachineIndependent/glslang_tab.cpp" break; - case 423: /* type_specifier_nonarray: F16TEXTURECUBE */ -#line 2929 "MachineIndependent/glslang.y" + case 424: /* type_specifier_nonarray: F16TEXTURECUBE */ +#line 2937 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube); } -#line 9619 "MachineIndependent/glslang_tab.cpp" +#line 9636 "MachineIndependent/glslang_tab.cpp" break; - case 424: /* type_specifier_nonarray: TEXTURE1DARRAY */ -#line 2935 "MachineIndependent/glslang.y" + case 425: /* type_specifier_nonarray: TEXTURE1DARRAY */ +#line 2943 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd1D, true); } -#line 9629 "MachineIndependent/glslang_tab.cpp" +#line 9646 "MachineIndependent/glslang_tab.cpp" break; - case 425: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ -#line 2940 "MachineIndependent/glslang.y" + case 426: /* type_specifier_nonarray: F16TEXTURE1DARRAY */ +#line 2948 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd1D, true); } -#line 9640 "MachineIndependent/glslang_tab.cpp" +#line 9657 "MachineIndependent/glslang_tab.cpp" break; - case 426: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ -#line 2946 "MachineIndependent/glslang.y" + case 427: /* type_specifier_nonarray: F16TEXTURE2DARRAY */ +#line 2954 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true); } -#line 9651 "MachineIndependent/glslang_tab.cpp" +#line 9668 "MachineIndependent/glslang_tab.cpp" break; - case 427: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ -#line 2952 "MachineIndependent/glslang.y" + case 428: /* type_specifier_nonarray: F16TEXTURECUBEARRAY */ +#line 2960 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdCube, true); } -#line 9662 "MachineIndependent/glslang_tab.cpp" +#line 9679 "MachineIndependent/glslang_tab.cpp" break; - case 428: /* type_specifier_nonarray: ITEXTURE1D */ -#line 2958 "MachineIndependent/glslang.y" + case 429: /* type_specifier_nonarray: ITEXTURE1D */ +#line 2966 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D); } -#line 9672 "MachineIndependent/glslang_tab.cpp" +#line 9689 "MachineIndependent/glslang_tab.cpp" break; - case 429: /* type_specifier_nonarray: ITEXTURE1DARRAY */ -#line 2963 "MachineIndependent/glslang.y" + case 430: /* type_specifier_nonarray: ITEXTURE1DARRAY */ +#line 2971 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd1D, true); } -#line 9682 "MachineIndependent/glslang_tab.cpp" +#line 9699 "MachineIndependent/glslang_tab.cpp" break; - case 430: /* type_specifier_nonarray: UTEXTURE1D */ -#line 2968 "MachineIndependent/glslang.y" + case 431: /* type_specifier_nonarray: UTEXTURE1D */ +#line 2976 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D); } -#line 9692 "MachineIndependent/glslang_tab.cpp" +#line 9709 "MachineIndependent/glslang_tab.cpp" break; - case 431: /* type_specifier_nonarray: UTEXTURE1DARRAY */ -#line 2973 "MachineIndependent/glslang.y" + case 432: /* type_specifier_nonarray: UTEXTURE1DARRAY */ +#line 2981 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd1D, true); } -#line 9702 "MachineIndependent/glslang_tab.cpp" +#line 9719 "MachineIndependent/glslang_tab.cpp" break; - case 432: /* type_specifier_nonarray: TEXTURE2DRECT */ -#line 2978 "MachineIndependent/glslang.y" + case 433: /* type_specifier_nonarray: TEXTURE2DRECT */ +#line 2986 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdRect); } -#line 9712 "MachineIndependent/glslang_tab.cpp" +#line 9729 "MachineIndependent/glslang_tab.cpp" break; - case 433: /* type_specifier_nonarray: F16TEXTURE2DRECT */ -#line 2983 "MachineIndependent/glslang.y" + case 434: /* type_specifier_nonarray: F16TEXTURE2DRECT */ +#line 2991 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdRect); } -#line 9723 "MachineIndependent/glslang_tab.cpp" +#line 9740 "MachineIndependent/glslang_tab.cpp" break; - case 434: /* type_specifier_nonarray: ITEXTURE2DRECT */ -#line 2989 "MachineIndependent/glslang.y" + case 435: /* type_specifier_nonarray: ITEXTURE2DRECT */ +#line 2997 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdRect); } -#line 9733 "MachineIndependent/glslang_tab.cpp" +#line 9750 "MachineIndependent/glslang_tab.cpp" break; - case 435: /* type_specifier_nonarray: UTEXTURE2DRECT */ -#line 2994 "MachineIndependent/glslang.y" + case 436: /* type_specifier_nonarray: UTEXTURE2DRECT */ +#line 3002 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdRect); } -#line 9743 "MachineIndependent/glslang_tab.cpp" +#line 9760 "MachineIndependent/glslang_tab.cpp" break; - case 436: /* type_specifier_nonarray: TEXTUREBUFFER */ -#line 2999 "MachineIndependent/glslang.y" + case 437: /* type_specifier_nonarray: TEXTUREBUFFER */ +#line 3007 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, EsdBuffer); } -#line 9753 "MachineIndependent/glslang_tab.cpp" +#line 9770 "MachineIndependent/glslang_tab.cpp" break; - case 437: /* type_specifier_nonarray: F16TEXTUREBUFFER */ -#line 3004 "MachineIndependent/glslang.y" + case 438: /* type_specifier_nonarray: F16TEXTUREBUFFER */ +#line 3012 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, EsdBuffer); } -#line 9764 "MachineIndependent/glslang_tab.cpp" +#line 9781 "MachineIndependent/glslang_tab.cpp" break; - case 438: /* type_specifier_nonarray: ITEXTUREBUFFER */ -#line 3010 "MachineIndependent/glslang.y" + case 439: /* type_specifier_nonarray: ITEXTUREBUFFER */ +#line 3018 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, EsdBuffer); } -#line 9774 "MachineIndependent/glslang_tab.cpp" +#line 9791 "MachineIndependent/glslang_tab.cpp" break; - case 439: /* type_specifier_nonarray: UTEXTUREBUFFER */ -#line 3015 "MachineIndependent/glslang.y" + case 440: /* type_specifier_nonarray: UTEXTUREBUFFER */ +#line 3023 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, EsdBuffer); } -#line 9784 "MachineIndependent/glslang_tab.cpp" +#line 9801 "MachineIndependent/glslang_tab.cpp" break; - case 440: /* type_specifier_nonarray: TEXTURE2DMS */ -#line 3020 "MachineIndependent/glslang.y" + case 441: /* type_specifier_nonarray: TEXTURE2DMS */ +#line 3028 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, false, false, true); } -#line 9794 "MachineIndependent/glslang_tab.cpp" +#line 9811 "MachineIndependent/glslang_tab.cpp" break; - case 441: /* type_specifier_nonarray: F16TEXTURE2DMS */ -#line 3025 "MachineIndependent/glslang.y" + case 442: /* type_specifier_nonarray: F16TEXTURE2DMS */ +#line 3033 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, false, false, true); } -#line 9805 "MachineIndependent/glslang_tab.cpp" +#line 9822 "MachineIndependent/glslang_tab.cpp" break; - case 442: /* type_specifier_nonarray: ITEXTURE2DMS */ -#line 3031 "MachineIndependent/glslang.y" + case 443: /* type_specifier_nonarray: ITEXTURE2DMS */ +#line 3039 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, false, false, true); } -#line 9815 "MachineIndependent/glslang_tab.cpp" +#line 9832 "MachineIndependent/glslang_tab.cpp" break; - case 443: /* type_specifier_nonarray: UTEXTURE2DMS */ -#line 3036 "MachineIndependent/glslang.y" + case 444: /* type_specifier_nonarray: UTEXTURE2DMS */ +#line 3044 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, false, false, true); } -#line 9825 "MachineIndependent/glslang_tab.cpp" +#line 9842 "MachineIndependent/glslang_tab.cpp" break; - case 444: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ -#line 3041 "MachineIndependent/glslang.y" + case 445: /* type_specifier_nonarray: TEXTURE2DMSARRAY */ +#line 3049 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat, Esd2D, true, false, true); } -#line 9835 "MachineIndependent/glslang_tab.cpp" +#line 9852 "MachineIndependent/glslang_tab.cpp" break; - case 445: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ -#line 3046 "MachineIndependent/glslang.y" + case 446: /* type_specifier_nonarray: F16TEXTURE2DMSARRAY */ +#line 3054 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float texture", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtFloat16, Esd2D, true, false, true); } -#line 9846 "MachineIndependent/glslang_tab.cpp" +#line 9863 "MachineIndependent/glslang_tab.cpp" break; - case 446: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ -#line 3052 "MachineIndependent/glslang.y" + case 447: /* type_specifier_nonarray: ITEXTURE2DMSARRAY */ +#line 3060 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtInt, Esd2D, true, false, true); } -#line 9856 "MachineIndependent/glslang_tab.cpp" +#line 9873 "MachineIndependent/glslang_tab.cpp" break; - case 447: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ -#line 3057 "MachineIndependent/glslang.y" + case 448: /* type_specifier_nonarray: UTEXTURE2DMSARRAY */ +#line 3065 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setTexture(EbtUint, Esd2D, true, false, true); } -#line 9866 "MachineIndependent/glslang_tab.cpp" +#line 9883 "MachineIndependent/glslang_tab.cpp" break; - case 448: /* type_specifier_nonarray: IMAGE1D */ -#line 3062 "MachineIndependent/glslang.y" + case 449: /* type_specifier_nonarray: IMAGE1D */ +#line 3070 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D); } -#line 9876 "MachineIndependent/glslang_tab.cpp" +#line 9893 "MachineIndependent/glslang_tab.cpp" break; - case 449: /* type_specifier_nonarray: F16IMAGE1D */ -#line 3067 "MachineIndependent/glslang.y" + case 450: /* type_specifier_nonarray: F16IMAGE1D */ +#line 3075 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D); } -#line 9887 "MachineIndependent/glslang_tab.cpp" +#line 9904 "MachineIndependent/glslang_tab.cpp" break; - case 450: /* type_specifier_nonarray: IIMAGE1D */ -#line 3073 "MachineIndependent/glslang.y" + case 451: /* type_specifier_nonarray: IIMAGE1D */ +#line 3081 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D); } -#line 9897 "MachineIndependent/glslang_tab.cpp" +#line 9914 "MachineIndependent/glslang_tab.cpp" break; - case 451: /* type_specifier_nonarray: UIMAGE1D */ -#line 3078 "MachineIndependent/glslang.y" + case 452: /* type_specifier_nonarray: UIMAGE1D */ +#line 3086 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D); } -#line 9907 "MachineIndependent/glslang_tab.cpp" +#line 9924 "MachineIndependent/glslang_tab.cpp" break; - case 452: /* type_specifier_nonarray: IMAGE2D */ -#line 3083 "MachineIndependent/glslang.y" + case 453: /* type_specifier_nonarray: IMAGE2D */ +#line 3091 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D); } -#line 9917 "MachineIndependent/glslang_tab.cpp" +#line 9934 "MachineIndependent/glslang_tab.cpp" break; - case 453: /* type_specifier_nonarray: F16IMAGE2D */ -#line 3088 "MachineIndependent/glslang.y" + case 454: /* type_specifier_nonarray: F16IMAGE2D */ +#line 3096 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D); } -#line 9928 "MachineIndependent/glslang_tab.cpp" +#line 9945 "MachineIndependent/glslang_tab.cpp" break; - case 454: /* type_specifier_nonarray: IIMAGE2D */ -#line 3094 "MachineIndependent/glslang.y" + case 455: /* type_specifier_nonarray: IIMAGE2D */ +#line 3102 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D); } -#line 9938 "MachineIndependent/glslang_tab.cpp" +#line 9955 "MachineIndependent/glslang_tab.cpp" break; - case 455: /* type_specifier_nonarray: UIMAGE2D */ -#line 3099 "MachineIndependent/glslang.y" + case 456: /* type_specifier_nonarray: UIMAGE2D */ +#line 3107 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D); } -#line 9948 "MachineIndependent/glslang_tab.cpp" +#line 9965 "MachineIndependent/glslang_tab.cpp" break; - case 456: /* type_specifier_nonarray: IMAGE3D */ -#line 3104 "MachineIndependent/glslang.y" + case 457: /* type_specifier_nonarray: IMAGE3D */ +#line 3112 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd3D); } -#line 9958 "MachineIndependent/glslang_tab.cpp" +#line 9975 "MachineIndependent/glslang_tab.cpp" break; - case 457: /* type_specifier_nonarray: F16IMAGE3D */ -#line 3109 "MachineIndependent/glslang.y" + case 458: /* type_specifier_nonarray: F16IMAGE3D */ +#line 3117 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd3D); } -#line 9969 "MachineIndependent/glslang_tab.cpp" +#line 9986 "MachineIndependent/glslang_tab.cpp" break; - case 458: /* type_specifier_nonarray: IIMAGE3D */ -#line 3115 "MachineIndependent/glslang.y" + case 459: /* type_specifier_nonarray: IIMAGE3D */ +#line 3123 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd3D); } -#line 9979 "MachineIndependent/glslang_tab.cpp" +#line 9996 "MachineIndependent/glslang_tab.cpp" break; - case 459: /* type_specifier_nonarray: UIMAGE3D */ -#line 3120 "MachineIndependent/glslang.y" + case 460: /* type_specifier_nonarray: UIMAGE3D */ +#line 3128 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd3D); } -#line 9989 "MachineIndependent/glslang_tab.cpp" +#line 10006 "MachineIndependent/glslang_tab.cpp" break; - case 460: /* type_specifier_nonarray: IMAGE2DRECT */ -#line 3125 "MachineIndependent/glslang.y" + case 461: /* type_specifier_nonarray: IMAGE2DRECT */ +#line 3133 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdRect); } -#line 9999 "MachineIndependent/glslang_tab.cpp" +#line 10016 "MachineIndependent/glslang_tab.cpp" break; - case 461: /* type_specifier_nonarray: F16IMAGE2DRECT */ -#line 3130 "MachineIndependent/glslang.y" + case 462: /* type_specifier_nonarray: F16IMAGE2DRECT */ +#line 3138 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdRect); } -#line 10010 "MachineIndependent/glslang_tab.cpp" +#line 10027 "MachineIndependent/glslang_tab.cpp" break; - case 462: /* type_specifier_nonarray: IIMAGE2DRECT */ -#line 3136 "MachineIndependent/glslang.y" + case 463: /* type_specifier_nonarray: IIMAGE2DRECT */ +#line 3144 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdRect); } -#line 10020 "MachineIndependent/glslang_tab.cpp" +#line 10037 "MachineIndependent/glslang_tab.cpp" break; - case 463: /* type_specifier_nonarray: UIMAGE2DRECT */ -#line 3141 "MachineIndependent/glslang.y" + case 464: /* type_specifier_nonarray: UIMAGE2DRECT */ +#line 3149 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdRect); } -#line 10030 "MachineIndependent/glslang_tab.cpp" +#line 10047 "MachineIndependent/glslang_tab.cpp" break; - case 464: /* type_specifier_nonarray: IMAGECUBE */ -#line 3146 "MachineIndependent/glslang.y" + case 465: /* type_specifier_nonarray: IMAGECUBE */ +#line 3154 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube); } -#line 10040 "MachineIndependent/glslang_tab.cpp" +#line 10057 "MachineIndependent/glslang_tab.cpp" break; - case 465: /* type_specifier_nonarray: F16IMAGECUBE */ -#line 3151 "MachineIndependent/glslang.y" + case 466: /* type_specifier_nonarray: F16IMAGECUBE */ +#line 3159 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube); } -#line 10051 "MachineIndependent/glslang_tab.cpp" +#line 10068 "MachineIndependent/glslang_tab.cpp" break; - case 466: /* type_specifier_nonarray: IIMAGECUBE */ -#line 3157 "MachineIndependent/glslang.y" + case 467: /* type_specifier_nonarray: IIMAGECUBE */ +#line 3165 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube); } -#line 10061 "MachineIndependent/glslang_tab.cpp" +#line 10078 "MachineIndependent/glslang_tab.cpp" break; - case 467: /* type_specifier_nonarray: UIMAGECUBE */ -#line 3162 "MachineIndependent/glslang.y" + case 468: /* type_specifier_nonarray: UIMAGECUBE */ +#line 3170 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube); } -#line 10071 "MachineIndependent/glslang_tab.cpp" +#line 10088 "MachineIndependent/glslang_tab.cpp" break; - case 468: /* type_specifier_nonarray: IMAGEBUFFER */ -#line 3167 "MachineIndependent/glslang.y" + case 469: /* type_specifier_nonarray: IMAGEBUFFER */ +#line 3175 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdBuffer); } -#line 10081 "MachineIndependent/glslang_tab.cpp" +#line 10098 "MachineIndependent/glslang_tab.cpp" break; - case 469: /* type_specifier_nonarray: F16IMAGEBUFFER */ -#line 3172 "MachineIndependent/glslang.y" + case 470: /* type_specifier_nonarray: F16IMAGEBUFFER */ +#line 3180 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdBuffer); } -#line 10092 "MachineIndependent/glslang_tab.cpp" +#line 10109 "MachineIndependent/glslang_tab.cpp" break; - case 470: /* type_specifier_nonarray: IIMAGEBUFFER */ -#line 3178 "MachineIndependent/glslang.y" + case 471: /* type_specifier_nonarray: IIMAGEBUFFER */ +#line 3186 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdBuffer); } -#line 10102 "MachineIndependent/glslang_tab.cpp" +#line 10119 "MachineIndependent/glslang_tab.cpp" break; - case 471: /* type_specifier_nonarray: UIMAGEBUFFER */ -#line 3183 "MachineIndependent/glslang.y" + case 472: /* type_specifier_nonarray: UIMAGEBUFFER */ +#line 3191 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdBuffer); } -#line 10112 "MachineIndependent/glslang_tab.cpp" +#line 10129 "MachineIndependent/glslang_tab.cpp" break; - case 472: /* type_specifier_nonarray: IMAGE1DARRAY */ -#line 3188 "MachineIndependent/glslang.y" + case 473: /* type_specifier_nonarray: IMAGE1DARRAY */ +#line 3196 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd1D, true); } -#line 10122 "MachineIndependent/glslang_tab.cpp" +#line 10139 "MachineIndependent/glslang_tab.cpp" break; - case 473: /* type_specifier_nonarray: F16IMAGE1DARRAY */ -#line 3193 "MachineIndependent/glslang.y" + case 474: /* type_specifier_nonarray: F16IMAGE1DARRAY */ +#line 3201 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd1D, true); } -#line 10133 "MachineIndependent/glslang_tab.cpp" +#line 10150 "MachineIndependent/glslang_tab.cpp" break; - case 474: /* type_specifier_nonarray: IIMAGE1DARRAY */ -#line 3199 "MachineIndependent/glslang.y" + case 475: /* type_specifier_nonarray: IIMAGE1DARRAY */ +#line 3207 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd1D, true); } -#line 10143 "MachineIndependent/glslang_tab.cpp" +#line 10160 "MachineIndependent/glslang_tab.cpp" break; - case 475: /* type_specifier_nonarray: UIMAGE1DARRAY */ -#line 3204 "MachineIndependent/glslang.y" + case 476: /* type_specifier_nonarray: UIMAGE1DARRAY */ +#line 3212 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd1D, true); } -#line 10153 "MachineIndependent/glslang_tab.cpp" +#line 10170 "MachineIndependent/glslang_tab.cpp" break; - case 476: /* type_specifier_nonarray: IMAGE2DARRAY */ -#line 3209 "MachineIndependent/glslang.y" + case 477: /* type_specifier_nonarray: IMAGE2DARRAY */ +#line 3217 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true); } -#line 10163 "MachineIndependent/glslang_tab.cpp" +#line 10180 "MachineIndependent/glslang_tab.cpp" break; - case 477: /* type_specifier_nonarray: F16IMAGE2DARRAY */ -#line 3214 "MachineIndependent/glslang.y" + case 478: /* type_specifier_nonarray: F16IMAGE2DARRAY */ +#line 3222 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true); } -#line 10174 "MachineIndependent/glslang_tab.cpp" +#line 10191 "MachineIndependent/glslang_tab.cpp" break; - case 478: /* type_specifier_nonarray: IIMAGE2DARRAY */ -#line 3220 "MachineIndependent/glslang.y" + case 479: /* type_specifier_nonarray: IIMAGE2DARRAY */ +#line 3228 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true); } -#line 10184 "MachineIndependent/glslang_tab.cpp" +#line 10201 "MachineIndependent/glslang_tab.cpp" break; - case 479: /* type_specifier_nonarray: UIMAGE2DARRAY */ -#line 3225 "MachineIndependent/glslang.y" + case 480: /* type_specifier_nonarray: UIMAGE2DARRAY */ +#line 3233 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true); } -#line 10194 "MachineIndependent/glslang_tab.cpp" +#line 10211 "MachineIndependent/glslang_tab.cpp" break; - case 480: /* type_specifier_nonarray: IMAGECUBEARRAY */ -#line 3230 "MachineIndependent/glslang.y" + case 481: /* type_specifier_nonarray: IMAGECUBEARRAY */ +#line 3238 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, EsdCube, true); } -#line 10204 "MachineIndependent/glslang_tab.cpp" +#line 10221 "MachineIndependent/glslang_tab.cpp" break; - case 481: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ -#line 3235 "MachineIndependent/glslang.y" + case 482: /* type_specifier_nonarray: F16IMAGECUBEARRAY */ +#line 3243 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, EsdCube, true); } -#line 10215 "MachineIndependent/glslang_tab.cpp" +#line 10232 "MachineIndependent/glslang_tab.cpp" break; - case 482: /* type_specifier_nonarray: IIMAGECUBEARRAY */ -#line 3241 "MachineIndependent/glslang.y" + case 483: /* type_specifier_nonarray: IIMAGECUBEARRAY */ +#line 3249 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, EsdCube, true); } -#line 10225 "MachineIndependent/glslang_tab.cpp" +#line 10242 "MachineIndependent/glslang_tab.cpp" break; - case 483: /* type_specifier_nonarray: UIMAGECUBEARRAY */ -#line 3246 "MachineIndependent/glslang.y" + case 484: /* type_specifier_nonarray: UIMAGECUBEARRAY */ +#line 3254 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, EsdCube, true); } -#line 10235 "MachineIndependent/glslang_tab.cpp" +#line 10252 "MachineIndependent/glslang_tab.cpp" break; - case 484: /* type_specifier_nonarray: IMAGE2DMS */ -#line 3251 "MachineIndependent/glslang.y" + case 485: /* type_specifier_nonarray: IMAGE2DMS */ +#line 3259 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, false, false, true); } -#line 10245 "MachineIndependent/glslang_tab.cpp" +#line 10262 "MachineIndependent/glslang_tab.cpp" break; - case 485: /* type_specifier_nonarray: F16IMAGE2DMS */ -#line 3256 "MachineIndependent/glslang.y" + case 486: /* type_specifier_nonarray: F16IMAGE2DMS */ +#line 3264 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, false, false, true); } -#line 10256 "MachineIndependent/glslang_tab.cpp" +#line 10273 "MachineIndependent/glslang_tab.cpp" break; - case 486: /* type_specifier_nonarray: IIMAGE2DMS */ -#line 3262 "MachineIndependent/glslang.y" + case 487: /* type_specifier_nonarray: IIMAGE2DMS */ +#line 3270 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, false, false, true); } -#line 10266 "MachineIndependent/glslang_tab.cpp" +#line 10283 "MachineIndependent/glslang_tab.cpp" break; - case 487: /* type_specifier_nonarray: UIMAGE2DMS */ -#line 3267 "MachineIndependent/glslang.y" + case 488: /* type_specifier_nonarray: UIMAGE2DMS */ +#line 3275 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, false, false, true); } -#line 10276 "MachineIndependent/glslang_tab.cpp" +#line 10293 "MachineIndependent/glslang_tab.cpp" break; - case 488: /* type_specifier_nonarray: IMAGE2DMSARRAY */ -#line 3272 "MachineIndependent/glslang.y" + case 489: /* type_specifier_nonarray: IMAGE2DMSARRAY */ +#line 3280 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat, Esd2D, true, false, true); } -#line 10286 "MachineIndependent/glslang_tab.cpp" +#line 10303 "MachineIndependent/glslang_tab.cpp" break; - case 489: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ -#line 3277 "MachineIndependent/glslang.y" + case 490: /* type_specifier_nonarray: F16IMAGE2DMSARRAY */ +#line 3285 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float image", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtFloat16, Esd2D, true, false, true); } -#line 10297 "MachineIndependent/glslang_tab.cpp" +#line 10314 "MachineIndependent/glslang_tab.cpp" break; - case 490: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ -#line 3283 "MachineIndependent/glslang.y" + case 491: /* type_specifier_nonarray: IIMAGE2DMSARRAY */ +#line 3291 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt, Esd2D, true, false, true); } -#line 10307 "MachineIndependent/glslang_tab.cpp" +#line 10324 "MachineIndependent/glslang_tab.cpp" break; - case 491: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ -#line 3288 "MachineIndependent/glslang.y" + case 492: /* type_specifier_nonarray: UIMAGE2DMSARRAY */ +#line 3296 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint, Esd2D, true, false, true); } -#line 10317 "MachineIndependent/glslang_tab.cpp" +#line 10334 "MachineIndependent/glslang_tab.cpp" break; - case 492: /* type_specifier_nonarray: I64IMAGE1D */ -#line 3293 "MachineIndependent/glslang.y" + case 493: /* type_specifier_nonarray: I64IMAGE1D */ +#line 3301 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D); } -#line 10327 "MachineIndependent/glslang_tab.cpp" +#line 10344 "MachineIndependent/glslang_tab.cpp" break; - case 493: /* type_specifier_nonarray: U64IMAGE1D */ -#line 3298 "MachineIndependent/glslang.y" + case 494: /* type_specifier_nonarray: U64IMAGE1D */ +#line 3306 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D); } -#line 10337 "MachineIndependent/glslang_tab.cpp" +#line 10354 "MachineIndependent/glslang_tab.cpp" break; - case 494: /* type_specifier_nonarray: I64IMAGE2D */ -#line 3303 "MachineIndependent/glslang.y" + case 495: /* type_specifier_nonarray: I64IMAGE2D */ +#line 3311 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D); } -#line 10347 "MachineIndependent/glslang_tab.cpp" +#line 10364 "MachineIndependent/glslang_tab.cpp" break; - case 495: /* type_specifier_nonarray: U64IMAGE2D */ -#line 3308 "MachineIndependent/glslang.y" + case 496: /* type_specifier_nonarray: U64IMAGE2D */ +#line 3316 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D); } -#line 10357 "MachineIndependent/glslang_tab.cpp" +#line 10374 "MachineIndependent/glslang_tab.cpp" break; - case 496: /* type_specifier_nonarray: I64IMAGE3D */ -#line 3313 "MachineIndependent/glslang.y" + case 497: /* type_specifier_nonarray: I64IMAGE3D */ +#line 3321 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd3D); } -#line 10367 "MachineIndependent/glslang_tab.cpp" +#line 10384 "MachineIndependent/glslang_tab.cpp" break; - case 497: /* type_specifier_nonarray: U64IMAGE3D */ -#line 3318 "MachineIndependent/glslang.y" + case 498: /* type_specifier_nonarray: U64IMAGE3D */ +#line 3326 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd3D); } -#line 10377 "MachineIndependent/glslang_tab.cpp" +#line 10394 "MachineIndependent/glslang_tab.cpp" break; - case 498: /* type_specifier_nonarray: I64IMAGE2DRECT */ -#line 3323 "MachineIndependent/glslang.y" + case 499: /* type_specifier_nonarray: I64IMAGE2DRECT */ +#line 3331 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdRect); } -#line 10387 "MachineIndependent/glslang_tab.cpp" +#line 10404 "MachineIndependent/glslang_tab.cpp" break; - case 499: /* type_specifier_nonarray: U64IMAGE2DRECT */ -#line 3328 "MachineIndependent/glslang.y" + case 500: /* type_specifier_nonarray: U64IMAGE2DRECT */ +#line 3336 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdRect); } -#line 10397 "MachineIndependent/glslang_tab.cpp" +#line 10414 "MachineIndependent/glslang_tab.cpp" break; - case 500: /* type_specifier_nonarray: I64IMAGECUBE */ -#line 3333 "MachineIndependent/glslang.y" + case 501: /* type_specifier_nonarray: I64IMAGECUBE */ +#line 3341 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube); } -#line 10407 "MachineIndependent/glslang_tab.cpp" +#line 10424 "MachineIndependent/glslang_tab.cpp" break; - case 501: /* type_specifier_nonarray: U64IMAGECUBE */ -#line 3338 "MachineIndependent/glslang.y" + case 502: /* type_specifier_nonarray: U64IMAGECUBE */ +#line 3346 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube); } -#line 10417 "MachineIndependent/glslang_tab.cpp" +#line 10434 "MachineIndependent/glslang_tab.cpp" break; - case 502: /* type_specifier_nonarray: I64IMAGEBUFFER */ -#line 3343 "MachineIndependent/glslang.y" + case 503: /* type_specifier_nonarray: I64IMAGEBUFFER */ +#line 3351 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdBuffer); } -#line 10427 "MachineIndependent/glslang_tab.cpp" +#line 10444 "MachineIndependent/glslang_tab.cpp" break; - case 503: /* type_specifier_nonarray: U64IMAGEBUFFER */ -#line 3348 "MachineIndependent/glslang.y" + case 504: /* type_specifier_nonarray: U64IMAGEBUFFER */ +#line 3356 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdBuffer); } -#line 10437 "MachineIndependent/glslang_tab.cpp" +#line 10454 "MachineIndependent/glslang_tab.cpp" break; - case 504: /* type_specifier_nonarray: I64IMAGE1DARRAY */ -#line 3353 "MachineIndependent/glslang.y" + case 505: /* type_specifier_nonarray: I64IMAGE1DARRAY */ +#line 3361 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd1D, true); } -#line 10447 "MachineIndependent/glslang_tab.cpp" +#line 10464 "MachineIndependent/glslang_tab.cpp" break; - case 505: /* type_specifier_nonarray: U64IMAGE1DARRAY */ -#line 3358 "MachineIndependent/glslang.y" + case 506: /* type_specifier_nonarray: U64IMAGE1DARRAY */ +#line 3366 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd1D, true); } -#line 10457 "MachineIndependent/glslang_tab.cpp" +#line 10474 "MachineIndependent/glslang_tab.cpp" break; - case 506: /* type_specifier_nonarray: I64IMAGE2DARRAY */ -#line 3363 "MachineIndependent/glslang.y" + case 507: /* type_specifier_nonarray: I64IMAGE2DARRAY */ +#line 3371 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true); } -#line 10467 "MachineIndependent/glslang_tab.cpp" +#line 10484 "MachineIndependent/glslang_tab.cpp" break; - case 507: /* type_specifier_nonarray: U64IMAGE2DARRAY */ -#line 3368 "MachineIndependent/glslang.y" + case 508: /* type_specifier_nonarray: U64IMAGE2DARRAY */ +#line 3376 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true); } -#line 10477 "MachineIndependent/glslang_tab.cpp" +#line 10494 "MachineIndependent/glslang_tab.cpp" break; - case 508: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ -#line 3373 "MachineIndependent/glslang.y" + case 509: /* type_specifier_nonarray: I64IMAGECUBEARRAY */ +#line 3381 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, EsdCube, true); } -#line 10487 "MachineIndependent/glslang_tab.cpp" +#line 10504 "MachineIndependent/glslang_tab.cpp" break; - case 509: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ -#line 3378 "MachineIndependent/glslang.y" + case 510: /* type_specifier_nonarray: U64IMAGECUBEARRAY */ +#line 3386 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, EsdCube, true); } -#line 10497 "MachineIndependent/glslang_tab.cpp" +#line 10514 "MachineIndependent/glslang_tab.cpp" break; - case 510: /* type_specifier_nonarray: I64IMAGE2DMS */ -#line 3383 "MachineIndependent/glslang.y" + case 511: /* type_specifier_nonarray: I64IMAGE2DMS */ +#line 3391 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, false, false, true); } -#line 10507 "MachineIndependent/glslang_tab.cpp" +#line 10524 "MachineIndependent/glslang_tab.cpp" break; - case 511: /* type_specifier_nonarray: U64IMAGE2DMS */ -#line 3388 "MachineIndependent/glslang.y" + case 512: /* type_specifier_nonarray: U64IMAGE2DMS */ +#line 3396 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, false, false, true); } -#line 10517 "MachineIndependent/glslang_tab.cpp" +#line 10534 "MachineIndependent/glslang_tab.cpp" break; - case 512: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ -#line 3393 "MachineIndependent/glslang.y" + case 513: /* type_specifier_nonarray: I64IMAGE2DMSARRAY */ +#line 3401 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtInt64, Esd2D, true, false, true); } -#line 10527 "MachineIndependent/glslang_tab.cpp" +#line 10544 "MachineIndependent/glslang_tab.cpp" break; - case 513: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ -#line 3398 "MachineIndependent/glslang.y" + case 514: /* type_specifier_nonarray: U64IMAGE2DMSARRAY */ +#line 3406 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setImage(EbtUint64, Esd2D, true, false, true); } -#line 10537 "MachineIndependent/glslang_tab.cpp" +#line 10554 "MachineIndependent/glslang_tab.cpp" break; - case 514: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ -#line 3403 "MachineIndependent/glslang.y" + case 515: /* type_specifier_nonarray: SAMPLEREXTERNALOES */ +#line 3411 "MachineIndependent/glslang.y" { // GL_OES_EGL_image_external (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.external = true; } -#line 10548 "MachineIndependent/glslang_tab.cpp" +#line 10565 "MachineIndependent/glslang_tab.cpp" break; - case 515: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ -#line 3409 "MachineIndependent/glslang.y" + case 516: /* type_specifier_nonarray: SAMPLEREXTERNAL2DY2YEXT */ +#line 3417 "MachineIndependent/glslang.y" { // GL_EXT_YUV_target (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.set(EbtFloat, Esd2D); (yyval.interm.type).sampler.yuv = true; } -#line 10559 "MachineIndependent/glslang_tab.cpp" +#line 10576 "MachineIndependent/glslang_tab.cpp" break; - case 516: /* type_specifier_nonarray: SUBPASSINPUT */ -#line 3415 "MachineIndependent/glslang.y" + case 517: /* type_specifier_nonarray: SUBPASSINPUT */ +#line 3423 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat); } -#line 10570 "MachineIndependent/glslang_tab.cpp" +#line 10587 "MachineIndependent/glslang_tab.cpp" break; - case 517: /* type_specifier_nonarray: SUBPASSINPUTMS */ -#line 3421 "MachineIndependent/glslang.y" + case 518: /* type_specifier_nonarray: SUBPASSINPUTMS */ +#line 3429 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat, true); } -#line 10581 "MachineIndependent/glslang_tab.cpp" +#line 10598 "MachineIndependent/glslang_tab.cpp" break; - case 518: /* type_specifier_nonarray: F16SUBPASSINPUT */ -#line 3427 "MachineIndependent/glslang.y" + case 519: /* type_specifier_nonarray: F16SUBPASSINPUT */ +#line 3435 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -10589,11 +10606,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16); } -#line 10593 "MachineIndependent/glslang_tab.cpp" +#line 10610 "MachineIndependent/glslang_tab.cpp" break; - case 519: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ -#line 3434 "MachineIndependent/glslang.y" + case 520: /* type_specifier_nonarray: F16SUBPASSINPUTMS */ +#line 3442 "MachineIndependent/glslang.y" { parseContext.float16OpaqueCheck((yyvsp[0].lex).loc, "half float subpass input", parseContext.symbolTable.atBuiltInLevel()); parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); @@ -10601,107 +10618,107 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtFloat16, true); } -#line 10605 "MachineIndependent/glslang_tab.cpp" +#line 10622 "MachineIndependent/glslang_tab.cpp" break; - case 520: /* type_specifier_nonarray: ISUBPASSINPUT */ -#line 3441 "MachineIndependent/glslang.y" + case 521: /* type_specifier_nonarray: ISUBPASSINPUT */ +#line 3449 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt); } -#line 10616 "MachineIndependent/glslang_tab.cpp" +#line 10633 "MachineIndependent/glslang_tab.cpp" break; - case 521: /* type_specifier_nonarray: ISUBPASSINPUTMS */ -#line 3447 "MachineIndependent/glslang.y" + case 522: /* type_specifier_nonarray: ISUBPASSINPUTMS */ +#line 3455 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtInt, true); } -#line 10627 "MachineIndependent/glslang_tab.cpp" +#line 10644 "MachineIndependent/glslang_tab.cpp" break; - case 522: /* type_specifier_nonarray: USUBPASSINPUT */ -#line 3453 "MachineIndependent/glslang.y" + case 523: /* type_specifier_nonarray: USUBPASSINPUT */ +#line 3461 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint); } -#line 10638 "MachineIndependent/glslang_tab.cpp" +#line 10655 "MachineIndependent/glslang_tab.cpp" break; - case 523: /* type_specifier_nonarray: USUBPASSINPUTMS */ -#line 3459 "MachineIndependent/glslang.y" + case 524: /* type_specifier_nonarray: USUBPASSINPUTMS */ +#line 3467 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[0].lex).loc, EShLangFragment, "subpass input"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtSampler; (yyval.interm.type).sampler.setSubpass(EbtUint, true); } -#line 10649 "MachineIndependent/glslang_tab.cpp" +#line 10666 "MachineIndependent/glslang_tab.cpp" break; - case 524: /* type_specifier_nonarray: FCOOPMATNV */ -#line 3465 "MachineIndependent/glslang.y" + case 525: /* type_specifier_nonarray: FCOOPMATNV */ +#line 3473 "MachineIndependent/glslang.y" { parseContext.fcoopmatCheck((yyvsp[0].lex).loc, "fcoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtFloat; (yyval.interm.type).coopmat = true; } -#line 10660 "MachineIndependent/glslang_tab.cpp" +#line 10677 "MachineIndependent/glslang_tab.cpp" break; - case 525: /* type_specifier_nonarray: ICOOPMATNV */ -#line 3471 "MachineIndependent/glslang.y" + case 526: /* type_specifier_nonarray: ICOOPMATNV */ +#line 3479 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "icoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtInt; (yyval.interm.type).coopmat = true; } -#line 10671 "MachineIndependent/glslang_tab.cpp" +#line 10688 "MachineIndependent/glslang_tab.cpp" break; - case 526: /* type_specifier_nonarray: UCOOPMATNV */ -#line 3477 "MachineIndependent/glslang.y" + case 527: /* type_specifier_nonarray: UCOOPMATNV */ +#line 3485 "MachineIndependent/glslang.y" { parseContext.intcoopmatCheck((yyvsp[0].lex).loc, "ucoopmatNV", parseContext.symbolTable.atBuiltInLevel()); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).basicType = EbtUint; (yyval.interm.type).coopmat = true; } -#line 10682 "MachineIndependent/glslang_tab.cpp" +#line 10699 "MachineIndependent/glslang_tab.cpp" break; - case 527: /* type_specifier_nonarray: spirv_type_specifier */ -#line 3483 "MachineIndependent/glslang.y" + case 528: /* type_specifier_nonarray: spirv_type_specifier */ +#line 3491 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.type).loc, 1, &E_GL_EXT_spirv_intrinsics, "SPIR-V type specifier"); (yyval.interm.type) = (yyvsp[0].interm.type); } -#line 10691 "MachineIndependent/glslang_tab.cpp" +#line 10708 "MachineIndependent/glslang_tab.cpp" break; - case 528: /* type_specifier_nonarray: struct_specifier */ -#line 3488 "MachineIndependent/glslang.y" + case 529: /* type_specifier_nonarray: struct_specifier */ +#line 3496 "MachineIndependent/glslang.y" { (yyval.interm.type) = (yyvsp[0].interm.type); (yyval.interm.type).qualifier.storage = parseContext.symbolTable.atGlobalLevel() ? EvqGlobal : EvqTemporary; parseContext.structTypeCheck((yyval.interm.type).loc, (yyval.interm.type)); } -#line 10701 "MachineIndependent/glslang_tab.cpp" +#line 10718 "MachineIndependent/glslang_tab.cpp" break; - case 529: /* type_specifier_nonarray: TYPE_NAME */ -#line 3493 "MachineIndependent/glslang.y" + case 530: /* type_specifier_nonarray: TYPE_NAME */ +#line 3501 "MachineIndependent/glslang.y" { // // This is for user defined type names. The lexical phase looked up the @@ -10715,47 +10732,47 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else parseContext.error((yyvsp[0].lex).loc, "expected type name", (yyvsp[0].lex).string->c_str(), ""); } -#line 10719 "MachineIndependent/glslang_tab.cpp" +#line 10736 "MachineIndependent/glslang_tab.cpp" break; - case 530: /* precision_qualifier: HIGH_PRECISION */ -#line 3509 "MachineIndependent/glslang.y" + case 531: /* precision_qualifier: HIGH_PRECISION */ +#line 3517 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "highp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqHigh); } -#line 10729 "MachineIndependent/glslang_tab.cpp" +#line 10746 "MachineIndependent/glslang_tab.cpp" break; - case 531: /* precision_qualifier: MEDIUM_PRECISION */ -#line 3514 "MachineIndependent/glslang.y" + case 532: /* precision_qualifier: MEDIUM_PRECISION */ +#line 3522 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "mediump precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqMedium); } -#line 10739 "MachineIndependent/glslang_tab.cpp" +#line 10756 "MachineIndependent/glslang_tab.cpp" break; - case 532: /* precision_qualifier: LOW_PRECISION */ -#line 3519 "MachineIndependent/glslang.y" + case 533: /* precision_qualifier: LOW_PRECISION */ +#line 3527 "MachineIndependent/glslang.y" { parseContext.profileRequires((yyvsp[0].lex).loc, ENoProfile, 130, 0, "lowp precision qualifier"); (yyval.interm.type).init((yyvsp[0].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.handlePrecisionQualifier((yyvsp[0].lex).loc, (yyval.interm.type).qualifier, EpqLow); } -#line 10749 "MachineIndependent/glslang_tab.cpp" +#line 10766 "MachineIndependent/glslang_tab.cpp" break; - case 533: /* $@3: %empty */ -#line 3527 "MachineIndependent/glslang.y" + case 534: /* $@3: %empty */ +#line 3535 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-2].lex).loc); } -#line 10755 "MachineIndependent/glslang_tab.cpp" +#line 10772 "MachineIndependent/glslang_tab.cpp" break; - case 534: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ -#line 3527 "MachineIndependent/glslang.y" + case 535: /* struct_specifier: STRUCT IDENTIFIER LEFT_BRACE $@3 struct_declaration_list RIGHT_BRACE */ +#line 3535 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), *(yyvsp[-4].lex).string); parseContext.structArrayCheck((yyvsp[-4].lex).loc, *structure); @@ -10767,17 +10784,17 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10771 "MachineIndependent/glslang_tab.cpp" +#line 10788 "MachineIndependent/glslang_tab.cpp" break; - case 535: /* $@4: %empty */ -#line 3538 "MachineIndependent/glslang.y" + case 536: /* $@4: %empty */ +#line 3546 "MachineIndependent/glslang.y" { parseContext.nestedStructCheck((yyvsp[-1].lex).loc); } -#line 10777 "MachineIndependent/glslang_tab.cpp" +#line 10794 "MachineIndependent/glslang_tab.cpp" break; - case 536: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ -#line 3538 "MachineIndependent/glslang.y" + case 537: /* struct_specifier: STRUCT LEFT_BRACE $@4 struct_declaration_list RIGHT_BRACE */ +#line 3546 "MachineIndependent/glslang.y" { TType* structure = new TType((yyvsp[-1].interm.typeList), TString("")); (yyval.interm.type).init((yyvsp[-4].lex).loc); @@ -10785,19 +10802,19 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.type).userDef = structure; --parseContext.structNestingLevel; } -#line 10789 "MachineIndependent/glslang_tab.cpp" +#line 10806 "MachineIndependent/glslang_tab.cpp" break; - case 537: /* struct_declaration_list: struct_declaration */ -#line 3548 "MachineIndependent/glslang.y" + case 538: /* struct_declaration_list: struct_declaration */ +#line 3556 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[0].interm.typeList); } -#line 10797 "MachineIndependent/glslang_tab.cpp" +#line 10814 "MachineIndependent/glslang_tab.cpp" break; - case 538: /* struct_declaration_list: struct_declaration_list struct_declaration */ -#line 3551 "MachineIndependent/glslang.y" + case 539: /* struct_declaration_list: struct_declaration_list struct_declaration */ +#line 3559 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = (yyvsp[-1].interm.typeList); for (unsigned int i = 0; i < (yyvsp[0].interm.typeList)->size(); ++i) { @@ -10808,11 +10825,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeList)->push_back((*(yyvsp[0].interm.typeList))[i]); } } -#line 10812 "MachineIndependent/glslang_tab.cpp" +#line 10829 "MachineIndependent/glslang_tab.cpp" break; - case 539: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ -#line 3564 "MachineIndependent/glslang.y" + case 540: /* struct_declaration: type_specifier struct_declarator_list SEMICOLON */ +#line 3572 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10835,11 +10852,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10839 "MachineIndependent/glslang_tab.cpp" +#line 10856 "MachineIndependent/glslang_tab.cpp" break; - case 540: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ -#line 3586 "MachineIndependent/glslang.y" + case 541: /* struct_declaration: type_qualifier type_specifier struct_declarator_list SEMICOLON */ +#line 3594 "MachineIndependent/glslang.y" { if ((yyvsp[-2].interm.type).arraySizes) { parseContext.profileRequires((yyvsp[-2].interm.type).loc, ENoProfile, 120, E_GL_3DL_array_objects, "arrayed type"); @@ -10864,38 +10881,38 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (*(yyval.interm.typeList))[i].type->shallowCopy(type); } } -#line 10868 "MachineIndependent/glslang_tab.cpp" +#line 10885 "MachineIndependent/glslang_tab.cpp" break; - case 541: /* struct_declarator_list: struct_declarator */ -#line 3613 "MachineIndependent/glslang.y" + case 542: /* struct_declarator_list: struct_declarator */ +#line 3621 "MachineIndependent/glslang.y" { (yyval.interm.typeList) = new TTypeList; (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10877 "MachineIndependent/glslang_tab.cpp" +#line 10894 "MachineIndependent/glslang_tab.cpp" break; - case 542: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ -#line 3617 "MachineIndependent/glslang.y" + case 543: /* struct_declarator_list: struct_declarator_list COMMA struct_declarator */ +#line 3625 "MachineIndependent/glslang.y" { (yyval.interm.typeList)->push_back((yyvsp[0].interm.typeLine)); } -#line 10885 "MachineIndependent/glslang_tab.cpp" +#line 10902 "MachineIndependent/glslang_tab.cpp" break; - case 543: /* struct_declarator: IDENTIFIER */ -#line 3623 "MachineIndependent/glslang.y" + case 544: /* struct_declarator: IDENTIFIER */ +#line 3631 "MachineIndependent/glslang.y" { (yyval.interm.typeLine).type = new TType(EbtVoid); (yyval.interm.typeLine).loc = (yyvsp[0].lex).loc; (yyval.interm.typeLine).type->setFieldName(*(yyvsp[0].lex).string); } -#line 10895 "MachineIndependent/glslang_tab.cpp" +#line 10912 "MachineIndependent/glslang_tab.cpp" break; - case 544: /* struct_declarator: IDENTIFIER array_specifier */ -#line 3628 "MachineIndependent/glslang.y" + case 545: /* struct_declarator: IDENTIFIER array_specifier */ +#line 3636 "MachineIndependent/glslang.y" { parseContext.arrayOfArrayVersionCheck((yyvsp[-1].lex).loc, (yyvsp[0].interm).arraySizes); @@ -10904,246 +10921,246 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.typeLine).type->setFieldName(*(yyvsp[-1].lex).string); (yyval.interm.typeLine).type->transferArraySizes((yyvsp[0].interm).arraySizes); } -#line 10908 "MachineIndependent/glslang_tab.cpp" +#line 10925 "MachineIndependent/glslang_tab.cpp" break; - case 545: /* initializer: assignment_expression */ -#line 3639 "MachineIndependent/glslang.y" + case 546: /* initializer: assignment_expression */ +#line 3647 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 10916 "MachineIndependent/glslang_tab.cpp" +#line 10933 "MachineIndependent/glslang_tab.cpp" break; - case 546: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ -#line 3643 "MachineIndependent/glslang.y" + case 547: /* initializer: LEFT_BRACE initializer_list RIGHT_BRACE */ +#line 3651 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-2].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-2].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-1].interm.intermTypedNode); } -#line 10927 "MachineIndependent/glslang_tab.cpp" +#line 10944 "MachineIndependent/glslang_tab.cpp" break; - case 547: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ -#line 3649 "MachineIndependent/glslang.y" + case 548: /* initializer: LEFT_BRACE initializer_list COMMA RIGHT_BRACE */ +#line 3657 "MachineIndependent/glslang.y" { const char* initFeature = "{ } style initializers"; parseContext.requireProfile((yyvsp[-3].lex).loc, ~EEsProfile, initFeature); parseContext.profileRequires((yyvsp[-3].lex).loc, ~EEsProfile, 420, E_GL_ARB_shading_language_420pack, initFeature); (yyval.interm.intermTypedNode) = (yyvsp[-2].interm.intermTypedNode); } -#line 10938 "MachineIndependent/glslang_tab.cpp" +#line 10955 "MachineIndependent/glslang_tab.cpp" break; - case 548: /* initializer: LEFT_BRACE RIGHT_BRACE */ -#line 3655 "MachineIndependent/glslang.y" + case 549: /* initializer: LEFT_BRACE RIGHT_BRACE */ +#line 3663 "MachineIndependent/glslang.y" { const char* initFeature = "empty { } initializer"; parseContext.profileRequires((yyvsp[-1].lex).loc, EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); parseContext.profileRequires((yyvsp[-1].lex).loc, ~EEsProfile, 0, E_GL_EXT_null_initializer, initFeature); (yyval.interm.intermTypedNode) = parseContext.intermediate.makeAggregate((yyvsp[-1].lex).loc); } -#line 10949 "MachineIndependent/glslang_tab.cpp" +#line 10966 "MachineIndependent/glslang_tab.cpp" break; - case 549: /* initializer_list: initializer */ -#line 3666 "MachineIndependent/glslang.y" + case 550: /* initializer_list: initializer */ +#line 3674 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate(0, (yyvsp[0].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)->getLoc()); } -#line 10957 "MachineIndependent/glslang_tab.cpp" +#line 10974 "MachineIndependent/glslang_tab.cpp" break; - case 550: /* initializer_list: initializer_list COMMA initializer */ -#line 3669 "MachineIndependent/glslang.y" + case 551: /* initializer_list: initializer_list COMMA initializer */ +#line 3677 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermTypedNode), (yyvsp[0].interm.intermTypedNode)); } -#line 10965 "MachineIndependent/glslang_tab.cpp" +#line 10982 "MachineIndependent/glslang_tab.cpp" break; - case 551: /* declaration_statement: declaration */ -#line 3676 "MachineIndependent/glslang.y" + case 552: /* declaration_statement: declaration */ +#line 3684 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10971 "MachineIndependent/glslang_tab.cpp" +#line 10988 "MachineIndependent/glslang_tab.cpp" break; - case 552: /* statement: compound_statement */ -#line 3680 "MachineIndependent/glslang.y" + case 553: /* statement: compound_statement */ +#line 3688 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10977 "MachineIndependent/glslang_tab.cpp" +#line 10994 "MachineIndependent/glslang_tab.cpp" break; - case 553: /* statement: simple_statement */ -#line 3681 "MachineIndependent/glslang.y" + case 554: /* statement: simple_statement */ +#line 3689 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10983 "MachineIndependent/glslang_tab.cpp" +#line 11000 "MachineIndependent/glslang_tab.cpp" break; - case 554: /* simple_statement: declaration_statement */ -#line 3687 "MachineIndependent/glslang.y" + case 555: /* simple_statement: declaration_statement */ +#line 3695 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10989 "MachineIndependent/glslang_tab.cpp" +#line 11006 "MachineIndependent/glslang_tab.cpp" break; - case 555: /* simple_statement: expression_statement */ -#line 3688 "MachineIndependent/glslang.y" + case 556: /* simple_statement: expression_statement */ +#line 3696 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 10995 "MachineIndependent/glslang_tab.cpp" +#line 11012 "MachineIndependent/glslang_tab.cpp" break; - case 556: /* simple_statement: selection_statement */ -#line 3689 "MachineIndependent/glslang.y" + case 557: /* simple_statement: selection_statement */ +#line 3697 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11001 "MachineIndependent/glslang_tab.cpp" +#line 11018 "MachineIndependent/glslang_tab.cpp" break; - case 557: /* simple_statement: switch_statement */ -#line 3690 "MachineIndependent/glslang.y" + case 558: /* simple_statement: switch_statement */ +#line 3698 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11007 "MachineIndependent/glslang_tab.cpp" +#line 11024 "MachineIndependent/glslang_tab.cpp" break; - case 558: /* simple_statement: case_label */ -#line 3691 "MachineIndependent/glslang.y" + case 559: /* simple_statement: case_label */ +#line 3699 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11013 "MachineIndependent/glslang_tab.cpp" +#line 11030 "MachineIndependent/glslang_tab.cpp" break; - case 559: /* simple_statement: iteration_statement */ -#line 3692 "MachineIndependent/glslang.y" + case 560: /* simple_statement: iteration_statement */ +#line 3700 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11019 "MachineIndependent/glslang_tab.cpp" +#line 11036 "MachineIndependent/glslang_tab.cpp" break; - case 560: /* simple_statement: jump_statement */ -#line 3693 "MachineIndependent/glslang.y" + case 561: /* simple_statement: jump_statement */ +#line 3701 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11025 "MachineIndependent/glslang_tab.cpp" +#line 11042 "MachineIndependent/glslang_tab.cpp" break; - case 561: /* simple_statement: demote_statement */ -#line 3695 "MachineIndependent/glslang.y" + case 562: /* simple_statement: demote_statement */ +#line 3703 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11031 "MachineIndependent/glslang_tab.cpp" +#line 11048 "MachineIndependent/glslang_tab.cpp" break; - case 562: /* demote_statement: DEMOTE SEMICOLON */ -#line 3701 "MachineIndependent/glslang.y" + case 563: /* demote_statement: DEMOTE SEMICOLON */ +#line 3709 "MachineIndependent/glslang.y" { 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 11041 "MachineIndependent/glslang_tab.cpp" +#line 11058 "MachineIndependent/glslang_tab.cpp" break; - case 563: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ -#line 3710 "MachineIndependent/glslang.y" + case 564: /* compound_statement: LEFT_BRACE RIGHT_BRACE */ +#line 3718 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11047 "MachineIndependent/glslang_tab.cpp" +#line 11064 "MachineIndependent/glslang_tab.cpp" break; - case 564: /* $@5: %empty */ -#line 3711 "MachineIndependent/glslang.y" + case 565: /* $@5: %empty */ +#line 3719 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; } -#line 11056 "MachineIndependent/glslang_tab.cpp" +#line 11073 "MachineIndependent/glslang_tab.cpp" break; - case 565: /* $@6: %empty */ -#line 3715 "MachineIndependent/glslang.y" + case 566: /* $@6: %empty */ +#line 3723 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; } -#line 11065 "MachineIndependent/glslang_tab.cpp" +#line 11082 "MachineIndependent/glslang_tab.cpp" break; - case 566: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ -#line 3719 "MachineIndependent/glslang.y" + case 567: /* compound_statement: LEFT_BRACE $@5 statement_list $@6 RIGHT_BRACE */ +#line 3727 "MachineIndependent/glslang.y" { 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 11075 "MachineIndependent/glslang_tab.cpp" +#line 11092 "MachineIndependent/glslang_tab.cpp" break; - case 567: /* statement_no_new_scope: compound_statement_no_new_scope */ -#line 3727 "MachineIndependent/glslang.y" + case 568: /* statement_no_new_scope: compound_statement_no_new_scope */ +#line 3735 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11081 "MachineIndependent/glslang_tab.cpp" +#line 11098 "MachineIndependent/glslang_tab.cpp" break; - case 568: /* statement_no_new_scope: simple_statement */ -#line 3728 "MachineIndependent/glslang.y" + case 569: /* statement_no_new_scope: simple_statement */ +#line 3736 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11087 "MachineIndependent/glslang_tab.cpp" +#line 11104 "MachineIndependent/glslang_tab.cpp" break; - case 569: /* $@7: %empty */ -#line 3732 "MachineIndependent/glslang.y" + case 570: /* $@7: %empty */ +#line 3740 "MachineIndependent/glslang.y" { ++parseContext.controlFlowNestingLevel; } -#line 11095 "MachineIndependent/glslang_tab.cpp" +#line 11112 "MachineIndependent/glslang_tab.cpp" break; - case 570: /* statement_scoped: $@7 compound_statement */ -#line 3735 "MachineIndependent/glslang.y" + case 571: /* statement_scoped: $@7 compound_statement */ +#line 3743 "MachineIndependent/glslang.y" { --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11104 "MachineIndependent/glslang_tab.cpp" +#line 11121 "MachineIndependent/glslang_tab.cpp" break; - case 571: /* $@8: %empty */ -#line 3739 "MachineIndependent/glslang.y" + case 572: /* $@8: %empty */ +#line 3747 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11114 "MachineIndependent/glslang_tab.cpp" +#line 11131 "MachineIndependent/glslang_tab.cpp" break; - case 572: /* statement_scoped: $@8 simple_statement */ -#line 3744 "MachineIndependent/glslang.y" + case 573: /* statement_scoped: $@8 simple_statement */ +#line 3752 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11125 "MachineIndependent/glslang_tab.cpp" +#line 11142 "MachineIndependent/glslang_tab.cpp" break; - case 573: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ -#line 3753 "MachineIndependent/glslang.y" + case 574: /* compound_statement_no_new_scope: LEFT_BRACE RIGHT_BRACE */ +#line 3761 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11133 "MachineIndependent/glslang_tab.cpp" +#line 11150 "MachineIndependent/glslang_tab.cpp" break; - case 574: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ -#line 3756 "MachineIndependent/glslang.y" + case 575: /* compound_statement_no_new_scope: LEFT_BRACE statement_list RIGHT_BRACE */ +#line 3764 "MachineIndependent/glslang.y" { 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 11143 "MachineIndependent/glslang_tab.cpp" +#line 11160 "MachineIndependent/glslang_tab.cpp" break; - case 575: /* statement_list: statement */ -#line 3764 "MachineIndependent/glslang.y" + case 576: /* statement_list: statement */ +#line 3772 "MachineIndependent/glslang.y" { (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 || @@ -11152,11 +11169,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = 0; // start a fresh subsequence for what's after this case } } -#line 11156 "MachineIndependent/glslang_tab.cpp" +#line 11173 "MachineIndependent/glslang_tab.cpp" break; - case 576: /* statement_list: statement_list statement */ -#line 3772 "MachineIndependent/glslang.y" + case 577: /* statement_list: statement_list statement */ +#line 3780 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermNode) && (yyvsp[0].interm.intermNode)->getAsBranchNode() && ((yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpCase || (yyvsp[0].interm.intermNode)->getAsBranchNode()->getFlowOp() == EOpDefault)) { @@ -11165,77 +11182,77 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); } else (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 11169 "MachineIndependent/glslang_tab.cpp" +#line 11186 "MachineIndependent/glslang_tab.cpp" break; - case 577: /* expression_statement: SEMICOLON */ -#line 3783 "MachineIndependent/glslang.y" + case 578: /* expression_statement: SEMICOLON */ +#line 3791 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11175 "MachineIndependent/glslang_tab.cpp" +#line 11192 "MachineIndependent/glslang_tab.cpp" break; - case 578: /* expression_statement: expression SEMICOLON */ -#line 3784 "MachineIndependent/glslang.y" + case 579: /* expression_statement: expression SEMICOLON */ +#line 3792 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = static_cast((yyvsp[-1].interm.intermTypedNode)); } -#line 11181 "MachineIndependent/glslang_tab.cpp" +#line 11198 "MachineIndependent/glslang_tab.cpp" break; - case 579: /* selection_statement: selection_statement_nonattributed */ -#line 3788 "MachineIndependent/glslang.y" + case 580: /* selection_statement: selection_statement_nonattributed */ +#line 3796 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11189 "MachineIndependent/glslang_tab.cpp" +#line 11206 "MachineIndependent/glslang_tab.cpp" break; - case 580: /* selection_statement: attribute selection_statement_nonattributed */ -#line 3792 "MachineIndependent/glslang.y" + case 581: /* selection_statement: attribute selection_statement_nonattributed */ +#line 3800 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSelectionAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11199 "MachineIndependent/glslang_tab.cpp" +#line 11216 "MachineIndependent/glslang_tab.cpp" break; - case 581: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ -#line 3800 "MachineIndependent/glslang.y" + case 582: /* selection_statement_nonattributed: IF LEFT_PAREN expression RIGHT_PAREN selection_rest_statement */ +#line 3808 "MachineIndependent/glslang.y" { 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 11208 "MachineIndependent/glslang_tab.cpp" +#line 11225 "MachineIndependent/glslang_tab.cpp" break; - case 582: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ -#line 3807 "MachineIndependent/glslang.y" + case 583: /* selection_rest_statement: statement_scoped ELSE statement_scoped */ +#line 3815 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermNode); } -#line 11217 "MachineIndependent/glslang_tab.cpp" +#line 11234 "MachineIndependent/glslang_tab.cpp" break; - case 583: /* selection_rest_statement: statement_scoped */ -#line 3811 "MachineIndependent/glslang.y" + case 584: /* selection_rest_statement: statement_scoped */ +#line 3819 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[0].interm.intermNode); (yyval.interm.nodePair).node2 = 0; } -#line 11226 "MachineIndependent/glslang_tab.cpp" +#line 11243 "MachineIndependent/glslang_tab.cpp" break; - case 584: /* condition: expression */ -#line 3819 "MachineIndependent/glslang.y" + case 585: /* condition: expression */ +#line 3827 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); parseContext.boolCheck((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)); } -#line 11235 "MachineIndependent/glslang_tab.cpp" +#line 11252 "MachineIndependent/glslang_tab.cpp" break; - case 585: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ -#line 3823 "MachineIndependent/glslang.y" + case 586: /* condition: fully_specified_type IDENTIFIER EQUAL initializer */ +#line 3831 "MachineIndependent/glslang.y" { parseContext.boolCheck((yyvsp[-2].lex).loc, (yyvsp[-3].interm.type)); @@ -11246,29 +11263,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermTypedNode) = 0; } -#line 11250 "MachineIndependent/glslang_tab.cpp" +#line 11267 "MachineIndependent/glslang_tab.cpp" break; - case 586: /* switch_statement: switch_statement_nonattributed */ -#line 3836 "MachineIndependent/glslang.y" + case 587: /* switch_statement: switch_statement_nonattributed */ +#line 3844 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11258 "MachineIndependent/glslang_tab.cpp" +#line 11275 "MachineIndependent/glslang_tab.cpp" break; - case 587: /* switch_statement: attribute switch_statement_nonattributed */ -#line 3840 "MachineIndependent/glslang.y" + case 588: /* switch_statement: attribute switch_statement_nonattributed */ +#line 3848 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleSwitchAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11268 "MachineIndependent/glslang_tab.cpp" +#line 11285 "MachineIndependent/glslang_tab.cpp" break; - case 588: /* $@9: %empty */ -#line 3848 "MachineIndependent/glslang.y" + case 589: /* $@9: %empty */ +#line 3856 "MachineIndependent/glslang.y" { // start new switch sequence on the switch stack ++parseContext.controlFlowNestingLevel; @@ -11277,11 +11294,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.switchLevel.push_back(parseContext.statementNestingLevel); parseContext.symbolTable.push(); } -#line 11281 "MachineIndependent/glslang_tab.cpp" +#line 11298 "MachineIndependent/glslang_tab.cpp" break; - case 589: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ -#line 3856 "MachineIndependent/glslang.y" + case 590: /* switch_statement_nonattributed: SWITCH LEFT_PAREN expression RIGHT_PAREN $@9 LEFT_BRACE switch_statement_list RIGHT_BRACE */ +#line 3864 "MachineIndependent/glslang.y" { (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(); @@ -11291,27 +11308,27 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11295 "MachineIndependent/glslang_tab.cpp" +#line 11312 "MachineIndependent/glslang_tab.cpp" break; - case 590: /* switch_statement_list: %empty */ -#line 3868 "MachineIndependent/glslang.y" + case 591: /* switch_statement_list: %empty */ +#line 3876 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; } -#line 11303 "MachineIndependent/glslang_tab.cpp" +#line 11320 "MachineIndependent/glslang_tab.cpp" break; - case 591: /* switch_statement_list: statement_list */ -#line 3871 "MachineIndependent/glslang.y" + case 592: /* switch_statement_list: statement_list */ +#line 3879 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11311 "MachineIndependent/glslang_tab.cpp" +#line 11328 "MachineIndependent/glslang_tab.cpp" break; - case 592: /* case_label: CASE expression COLON */ -#line 3877 "MachineIndependent/glslang.y" + case 593: /* case_label: CASE expression COLON */ +#line 3885 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -11324,11 +11341,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpCase, (yyvsp[-1].interm.intermTypedNode), (yyvsp[-2].lex).loc); } } -#line 11328 "MachineIndependent/glslang_tab.cpp" +#line 11345 "MachineIndependent/glslang_tab.cpp" break; - case 593: /* case_label: DEFAULT COLON */ -#line 3889 "MachineIndependent/glslang.y" + case 594: /* case_label: DEFAULT COLON */ +#line 3897 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = 0; if (parseContext.switchLevel.size() == 0) @@ -11338,29 +11355,29 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); else (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpDefault, (yyvsp[-1].lex).loc); } -#line 11342 "MachineIndependent/glslang_tab.cpp" +#line 11359 "MachineIndependent/glslang_tab.cpp" break; - case 594: /* iteration_statement: iteration_statement_nonattributed */ -#line 3901 "MachineIndependent/glslang.y" + case 595: /* iteration_statement: iteration_statement_nonattributed */ +#line 3909 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11350 "MachineIndependent/glslang_tab.cpp" +#line 11367 "MachineIndependent/glslang_tab.cpp" break; - case 595: /* iteration_statement: attribute iteration_statement_nonattributed */ -#line 3905 "MachineIndependent/glslang.y" + case 596: /* iteration_statement: attribute iteration_statement_nonattributed */ +#line 3913 "MachineIndependent/glslang.y" { parseContext.requireExtensions((yyvsp[0].interm.intermNode)->getLoc(), 1, &E_GL_EXT_control_flow_attributes, "attribute"); parseContext.handleLoopAttributes(*(yyvsp[-1].interm.attributes), (yyvsp[0].interm.intermNode)); (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11360 "MachineIndependent/glslang_tab.cpp" +#line 11377 "MachineIndependent/glslang_tab.cpp" break; - case 596: /* $@10: %empty */ -#line 3913 "MachineIndependent/glslang.y" + case 597: /* $@10: %empty */ +#line 3921 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-1].lex).loc, "while loops not available", "limitation", ""); @@ -11369,11 +11386,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11373 "MachineIndependent/glslang_tab.cpp" +#line 11390 "MachineIndependent/glslang_tab.cpp" break; - case 597: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ -#line 3921 "MachineIndependent/glslang.y" + case 598: /* iteration_statement_nonattributed: WHILE LEFT_PAREN $@10 condition RIGHT_PAREN statement_no_new_scope */ +#line 3929 "MachineIndependent/glslang.y" { 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); @@ -11381,22 +11398,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11385 "MachineIndependent/glslang_tab.cpp" +#line 11402 "MachineIndependent/glslang_tab.cpp" break; - case 598: /* $@11: %empty */ -#line 3928 "MachineIndependent/glslang.y" + case 599: /* $@11: %empty */ +#line 3936 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11396 "MachineIndependent/glslang_tab.cpp" +#line 11413 "MachineIndependent/glslang_tab.cpp" break; - case 599: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ -#line 3934 "MachineIndependent/glslang.y" + case 600: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */ +#line 3942 "MachineIndependent/glslang.y" { if (! parseContext.limits.whileLoops) parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", ""); @@ -11409,22 +11426,22 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11413 "MachineIndependent/glslang_tab.cpp" +#line 11430 "MachineIndependent/glslang_tab.cpp" break; - case 600: /* $@12: %empty */ -#line 3946 "MachineIndependent/glslang.y" + case 601: /* $@12: %empty */ +#line 3954 "MachineIndependent/glslang.y" { parseContext.symbolTable.push(); ++parseContext.loopNestingLevel; ++parseContext.statementNestingLevel; ++parseContext.controlFlowNestingLevel; } -#line 11424 "MachineIndependent/glslang_tab.cpp" +#line 11441 "MachineIndependent/glslang_tab.cpp" break; - case 601: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ -#line 3952 "MachineIndependent/glslang.y" + case 602: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */ +#line 3960 "MachineIndependent/glslang.y" { parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc); @@ -11437,81 +11454,81 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; --parseContext.controlFlowNestingLevel; } -#line 11441 "MachineIndependent/glslang_tab.cpp" +#line 11458 "MachineIndependent/glslang_tab.cpp" break; - case 602: /* for_init_statement: expression_statement */ -#line 3967 "MachineIndependent/glslang.y" + case 603: /* for_init_statement: expression_statement */ +#line 3975 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11449 "MachineIndependent/glslang_tab.cpp" +#line 11466 "MachineIndependent/glslang_tab.cpp" break; - case 603: /* for_init_statement: declaration_statement */ -#line 3970 "MachineIndependent/glslang.y" + case 604: /* for_init_statement: declaration_statement */ +#line 3978 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11457 "MachineIndependent/glslang_tab.cpp" +#line 11474 "MachineIndependent/glslang_tab.cpp" break; - case 604: /* conditionopt: condition */ -#line 3976 "MachineIndependent/glslang.y" + case 605: /* conditionopt: condition */ +#line 3984 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode); } -#line 11465 "MachineIndependent/glslang_tab.cpp" +#line 11482 "MachineIndependent/glslang_tab.cpp" break; - case 605: /* conditionopt: %empty */ -#line 3979 "MachineIndependent/glslang.y" + case 606: /* conditionopt: %empty */ +#line 3987 "MachineIndependent/glslang.y" { (yyval.interm.intermTypedNode) = 0; } -#line 11473 "MachineIndependent/glslang_tab.cpp" +#line 11490 "MachineIndependent/glslang_tab.cpp" break; - case 606: /* for_rest_statement: conditionopt SEMICOLON */ -#line 3985 "MachineIndependent/glslang.y" + case 607: /* for_rest_statement: conditionopt SEMICOLON */ +#line 3993 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode); (yyval.interm.nodePair).node2 = 0; } -#line 11482 "MachineIndependent/glslang_tab.cpp" +#line 11499 "MachineIndependent/glslang_tab.cpp" break; - case 607: /* for_rest_statement: conditionopt SEMICOLON expression */ -#line 3989 "MachineIndependent/glslang.y" + case 608: /* for_rest_statement: conditionopt SEMICOLON expression */ +#line 3997 "MachineIndependent/glslang.y" { (yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode); (yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode); } -#line 11491 "MachineIndependent/glslang_tab.cpp" +#line 11508 "MachineIndependent/glslang_tab.cpp" break; - case 608: /* jump_statement: CONTINUE SEMICOLON */ -#line 3996 "MachineIndependent/glslang.y" + case 609: /* jump_statement: CONTINUE SEMICOLON */ +#line 4004 "MachineIndependent/glslang.y" { 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 11501 "MachineIndependent/glslang_tab.cpp" +#line 11518 "MachineIndependent/glslang_tab.cpp" break; - case 609: /* jump_statement: BREAK SEMICOLON */ -#line 4001 "MachineIndependent/glslang.y" + case 610: /* jump_statement: BREAK SEMICOLON */ +#line 4009 "MachineIndependent/glslang.y" { 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 11511 "MachineIndependent/glslang_tab.cpp" +#line 11528 "MachineIndependent/glslang_tab.cpp" break; - case 610: /* jump_statement: RETURN SEMICOLON */ -#line 4006 "MachineIndependent/glslang.y" + case 611: /* jump_statement: RETURN SEMICOLON */ +#line 4014 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc); if (parseContext.currentFunctionType->getBasicType() != EbtVoid) @@ -11519,101 +11536,101 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); if (parseContext.inMain) parseContext.postEntryPointReturn = true; } -#line 11523 "MachineIndependent/glslang_tab.cpp" +#line 11540 "MachineIndependent/glslang_tab.cpp" break; - case 611: /* jump_statement: RETURN expression SEMICOLON */ -#line 4013 "MachineIndependent/glslang.y" + case 612: /* jump_statement: RETURN expression SEMICOLON */ +#line 4021 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode)); } -#line 11531 "MachineIndependent/glslang_tab.cpp" +#line 11548 "MachineIndependent/glslang_tab.cpp" break; - case 612: /* jump_statement: DISCARD SEMICOLON */ -#line 4016 "MachineIndependent/glslang.y" + case 613: /* jump_statement: DISCARD SEMICOLON */ +#line 4024 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc); } -#line 11540 "MachineIndependent/glslang_tab.cpp" +#line 11557 "MachineIndependent/glslang_tab.cpp" break; - case 613: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ -#line 4020 "MachineIndependent/glslang.y" + case 614: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */ +#line 4028 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc); } -#line 11549 "MachineIndependent/glslang_tab.cpp" +#line 11566 "MachineIndependent/glslang_tab.cpp" break; - case 614: /* jump_statement: TERMINATE_RAY SEMICOLON */ -#line 4025 "MachineIndependent/glslang.y" + case 615: /* jump_statement: TERMINATE_RAY SEMICOLON */ +#line 4033 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc); } -#line 11558 "MachineIndependent/glslang_tab.cpp" +#line 11575 "MachineIndependent/glslang_tab.cpp" break; - case 615: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ -#line 4029 "MachineIndependent/glslang.y" + case 616: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */ +#line 4037 "MachineIndependent/glslang.y" { parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT"); (yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc); } -#line 11567 "MachineIndependent/glslang_tab.cpp" +#line 11584 "MachineIndependent/glslang_tab.cpp" break; - case 616: /* translation_unit: external_declaration */ -#line 4039 "MachineIndependent/glslang.y" + case 617: /* translation_unit: external_declaration */ +#line 4047 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); parseContext.intermediate.setTreeRoot((yyval.interm.intermNode)); } -#line 11576 "MachineIndependent/glslang_tab.cpp" +#line 11593 "MachineIndependent/glslang_tab.cpp" break; - case 617: /* translation_unit: translation_unit external_declaration */ -#line 4043 "MachineIndependent/glslang.y" + case 618: /* translation_unit: translation_unit external_declaration */ +#line 4051 "MachineIndependent/glslang.y" { 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 11587 "MachineIndependent/glslang_tab.cpp" +#line 11604 "MachineIndependent/glslang_tab.cpp" break; - case 618: /* external_declaration: function_definition */ -#line 4052 "MachineIndependent/glslang.y" + case 619: /* external_declaration: function_definition */ +#line 4060 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11595 "MachineIndependent/glslang_tab.cpp" +#line 11612 "MachineIndependent/glslang_tab.cpp" break; - case 619: /* external_declaration: declaration */ -#line 4055 "MachineIndependent/glslang.y" + case 620: /* external_declaration: declaration */ +#line 4063 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = (yyvsp[0].interm.intermNode); } -#line 11603 "MachineIndependent/glslang_tab.cpp" +#line 11620 "MachineIndependent/glslang_tab.cpp" break; - case 620: /* external_declaration: SEMICOLON */ -#line 4059 "MachineIndependent/glslang.y" + case 621: /* external_declaration: SEMICOLON */ +#line 4067 "MachineIndependent/glslang.y" { 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 11613 "MachineIndependent/glslang_tab.cpp" +#line 11630 "MachineIndependent/glslang_tab.cpp" break; - case 621: /* $@13: %empty */ -#line 4068 "MachineIndependent/glslang.y" + case 622: /* $@13: %empty */ +#line 4076 "MachineIndependent/glslang.y" { (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); @@ -11626,11 +11643,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); ++parseContext.statementNestingLevel; } } -#line 11630 "MachineIndependent/glslang_tab.cpp" +#line 11647 "MachineIndependent/glslang_tab.cpp" break; - case 622: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ -#line 4080 "MachineIndependent/glslang.y" + case 623: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */ +#line 4088 "MachineIndependent/glslang.y" { // May be best done as post process phase on intermediate code if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue) @@ -11657,228 +11674,228 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); --parseContext.statementNestingLevel; } } -#line 11661 "MachineIndependent/glslang_tab.cpp" +#line 11678 "MachineIndependent/glslang_tab.cpp" break; - case 623: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ -#line 4110 "MachineIndependent/glslang.y" + case 624: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */ +#line 4118 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[-2].interm.attributes); } -#line 11669 "MachineIndependent/glslang_tab.cpp" +#line 11686 "MachineIndependent/glslang_tab.cpp" break; - case 624: /* attribute_list: single_attribute */ -#line 4115 "MachineIndependent/glslang.y" + case 625: /* attribute_list: single_attribute */ +#line 4123 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = (yyvsp[0].interm.attributes); } -#line 11677 "MachineIndependent/glslang_tab.cpp" +#line 11694 "MachineIndependent/glslang_tab.cpp" break; - case 625: /* attribute_list: attribute_list COMMA single_attribute */ -#line 4118 "MachineIndependent/glslang.y" + case 626: /* attribute_list: attribute_list COMMA single_attribute */ +#line 4126 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes)); } -#line 11685 "MachineIndependent/glslang_tab.cpp" +#line 11702 "MachineIndependent/glslang_tab.cpp" break; - case 626: /* single_attribute: IDENTIFIER */ -#line 4123 "MachineIndependent/glslang.y" + case 627: /* single_attribute: IDENTIFIER */ +#line 4131 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string); } -#line 11693 "MachineIndependent/glslang_tab.cpp" +#line 11710 "MachineIndependent/glslang_tab.cpp" break; - case 627: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ -#line 4126 "MachineIndependent/glslang.y" + case 628: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */ +#line 4134 "MachineIndependent/glslang.y" { (yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode)); } -#line 11701 "MachineIndependent/glslang_tab.cpp" +#line 11718 "MachineIndependent/glslang_tab.cpp" break; - case 628: /* spirv_requirements_list: spirv_requirements_parameter */ -#line 4133 "MachineIndependent/glslang.y" + case 629: /* spirv_requirements_list: spirv_requirements_parameter */ +#line 4141 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq); } -#line 11709 "MachineIndependent/glslang_tab.cpp" +#line 11726 "MachineIndependent/glslang_tab.cpp" break; - case 629: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ -#line 4136 "MachineIndependent/glslang.y" + case 630: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */ +#line 4144 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq)); } -#line 11717 "MachineIndependent/glslang_tab.cpp" +#line 11734 "MachineIndependent/glslang_tab.cpp" break; - case 630: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ -#line 4141 "MachineIndependent/glslang.y" + case 631: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */ +#line 4149 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr); } -#line 11725 "MachineIndependent/glslang_tab.cpp" +#line 11742 "MachineIndependent/glslang_tab.cpp" break; - case 631: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ -#line 4144 "MachineIndependent/glslang.y" + case 632: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */ +#line 4152 "MachineIndependent/glslang.y" { (yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11733 "MachineIndependent/glslang_tab.cpp" +#line 11750 "MachineIndependent/glslang_tab.cpp" break; - case 632: /* spirv_extension_list: STRING_LITERAL */ -#line 4149 "MachineIndependent/glslang.y" + case 633: /* spirv_extension_list: STRING_LITERAL */ +#line 4157 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 11741 "MachineIndependent/glslang_tab.cpp" +#line 11758 "MachineIndependent/glslang_tab.cpp" break; - case 633: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ -#line 4152 "MachineIndependent/glslang.y" + case 634: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */ +#line 4160 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 11749 "MachineIndependent/glslang_tab.cpp" +#line 11766 "MachineIndependent/glslang_tab.cpp" break; - case 634: /* spirv_capability_list: INTCONSTANT */ -#line 4157 "MachineIndependent/glslang.y" + case 635: /* spirv_capability_list: INTCONSTANT */ +#line 4165 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); } -#line 11757 "MachineIndependent/glslang_tab.cpp" +#line 11774 "MachineIndependent/glslang_tab.cpp" break; - case 635: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ -#line 4160 "MachineIndependent/glslang.y" + case 636: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */ +#line 4168 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true)); } -#line 11765 "MachineIndependent/glslang_tab.cpp" +#line 11782 "MachineIndependent/glslang_tab.cpp" break; - case 636: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4165 "MachineIndependent/glslang.y" + case 637: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4173 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 11774 "MachineIndependent/glslang_tab.cpp" +#line 11791 "MachineIndependent/glslang_tab.cpp" break; - case 637: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4169 "MachineIndependent/glslang.y" + case 638: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4177 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i); (yyval.interm.intermNode) = 0; } -#line 11784 "MachineIndependent/glslang_tab.cpp" +#line 11801 "MachineIndependent/glslang_tab.cpp" break; - case 638: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4174 "MachineIndependent/glslang.y" + case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4182 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11793 "MachineIndependent/glslang_tab.cpp" +#line 11810 "MachineIndependent/glslang_tab.cpp" break; - case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ -#line 4178 "MachineIndependent/glslang.y" + case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */ +#line 4186 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11803 "MachineIndependent/glslang_tab.cpp" +#line 11820 "MachineIndependent/glslang_tab.cpp" break; - case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4183 "MachineIndependent/glslang.y" + case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ +#line 4191 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11812 "MachineIndependent/glslang_tab.cpp" +#line 11829 "MachineIndependent/glslang_tab.cpp" break; - case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ -#line 4187 "MachineIndependent/glslang.y" + case 642: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */ +#line 4195 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); (yyval.interm.intermNode) = 0; } -#line 11822 "MachineIndependent/glslang_tab.cpp" +#line 11839 "MachineIndependent/glslang_tab.cpp" break; - case 642: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ -#line 4194 "MachineIndependent/glslang.y" + case 643: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */ +#line 4202 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 11830 "MachineIndependent/glslang_tab.cpp" +#line 11847 "MachineIndependent/glslang_tab.cpp" break; - case 643: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ -#line 4197 "MachineIndependent/glslang.y" + case 644: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */ +#line 4205 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 11838 "MachineIndependent/glslang_tab.cpp" +#line 11855 "MachineIndependent/glslang_tab.cpp" break; - case 644: /* spirv_execution_mode_parameter: FLOATCONSTANT */ -#line 4202 "MachineIndependent/glslang.y" + case 645: /* spirv_execution_mode_parameter: FLOATCONSTANT */ +#line 4210 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 11846 "MachineIndependent/glslang_tab.cpp" +#line 11863 "MachineIndependent/glslang_tab.cpp" break; - case 645: /* spirv_execution_mode_parameter: INTCONSTANT */ -#line 4205 "MachineIndependent/glslang.y" + case 646: /* spirv_execution_mode_parameter: INTCONSTANT */ +#line 4213 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 11854 "MachineIndependent/glslang_tab.cpp" +#line 11871 "MachineIndependent/glslang_tab.cpp" break; - case 646: /* spirv_execution_mode_parameter: UINTCONSTANT */ -#line 4208 "MachineIndependent/glslang.y" + case 647: /* spirv_execution_mode_parameter: UINTCONSTANT */ +#line 4216 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 11862 "MachineIndependent/glslang_tab.cpp" +#line 11879 "MachineIndependent/glslang_tab.cpp" break; - case 647: /* spirv_execution_mode_parameter: BOOLCONSTANT */ -#line 4211 "MachineIndependent/glslang.y" + case 648: /* spirv_execution_mode_parameter: BOOLCONSTANT */ +#line 4219 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 11870 "MachineIndependent/glslang_tab.cpp" +#line 11887 "MachineIndependent/glslang_tab.cpp" break; - case 648: /* spirv_execution_mode_parameter: STRING_LITERAL */ -#line 4214 "MachineIndependent/glslang.y" + case 649: /* spirv_execution_mode_parameter: STRING_LITERAL */ +#line 4222 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true); } -#line 11878 "MachineIndependent/glslang_tab.cpp" +#line 11895 "MachineIndependent/glslang_tab.cpp" break; - case 649: /* spirv_execution_mode_id_parameter_list: constant_expression */ -#line 4219 "MachineIndependent/glslang.y" + case 650: /* spirv_execution_mode_id_parameter_list: constant_expression */ +#line 4227 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -11888,11 +11905,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode)); } -#line 11892 "MachineIndependent/glslang_tab.cpp" +#line 11909 "MachineIndependent/glslang_tab.cpp" break; - case 650: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ -#line 4228 "MachineIndependent/glslang.y" + case 651: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */ +#line 4236 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -11902,156 +11919,156 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode)); } -#line 11906 "MachineIndependent/glslang_tab.cpp" +#line 11923 "MachineIndependent/glslang_tab.cpp" break; - case 651: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4239 "MachineIndependent/glslang.y" + case 652: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4247 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc); (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass; (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i; } -#line 11916 "MachineIndependent/glslang_tab.cpp" +#line 11933 "MachineIndependent/glslang_tab.cpp" break; - case 652: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4244 "MachineIndependent/glslang.y" + case 653: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4252 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).qualifier.storage = EvqSpirvStorageClass; (yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i; } -#line 11927 "MachineIndependent/glslang_tab.cpp" +#line 11944 "MachineIndependent/glslang_tab.cpp" break; - case 653: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ -#line 4252 "MachineIndependent/glslang.y" + case 654: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */ +#line 4260 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); } -#line 11936 "MachineIndependent/glslang_tab.cpp" +#line 11953 "MachineIndependent/glslang_tab.cpp" break; - case 654: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ -#line 4256 "MachineIndependent/glslang.y" + case 655: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */ +#line 4264 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i); } -#line 11946 "MachineIndependent/glslang_tab.cpp" +#line 11963 "MachineIndependent/glslang_tab.cpp" break; - case 655: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4261 "MachineIndependent/glslang.y" + case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4269 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11955 "MachineIndependent/glslang_tab.cpp" +#line 11972 "MachineIndependent/glslang_tab.cpp" break; - case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ -#line 4265 "MachineIndependent/glslang.y" + case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */ +#line 4273 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11965 "MachineIndependent/glslang_tab.cpp" +#line 11982 "MachineIndependent/glslang_tab.cpp" break; - case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4270 "MachineIndependent/glslang.y" + case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4278 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11974 "MachineIndependent/glslang_tab.cpp" +#line 11991 "MachineIndependent/glslang_tab.cpp" break; - case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ -#line 4274 "MachineIndependent/glslang.y" + case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */ +#line 4282 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11984 "MachineIndependent/glslang_tab.cpp" +#line 12001 "MachineIndependent/glslang_tab.cpp" break; - case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4279 "MachineIndependent/glslang.y" + case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4287 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc); (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 11993 "MachineIndependent/glslang_tab.cpp" +#line 12010 "MachineIndependent/glslang_tab.cpp" break; - case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ -#line 4283 "MachineIndependent/glslang.y" + case 661: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */ +#line 4291 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate()); } -#line 12003 "MachineIndependent/glslang_tab.cpp" +#line 12020 "MachineIndependent/glslang_tab.cpp" break; - case 661: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ -#line 4290 "MachineIndependent/glslang.y" + case 662: /* spirv_decorate_parameter_list: spirv_decorate_parameter */ +#line 4298 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode)); } -#line 12011 "MachineIndependent/glslang_tab.cpp" +#line 12028 "MachineIndependent/glslang_tab.cpp" break; - case 662: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ -#line 4293 "MachineIndependent/glslang.y" + case 663: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */ +#line 4301 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode)); } -#line 12019 "MachineIndependent/glslang_tab.cpp" +#line 12036 "MachineIndependent/glslang_tab.cpp" break; - case 663: /* spirv_decorate_parameter: FLOATCONSTANT */ -#line 4298 "MachineIndependent/glslang.y" + case 664: /* spirv_decorate_parameter: FLOATCONSTANT */ +#line 4306 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true); } -#line 12027 "MachineIndependent/glslang_tab.cpp" +#line 12044 "MachineIndependent/glslang_tab.cpp" break; - case 664: /* spirv_decorate_parameter: INTCONSTANT */ -#line 4301 "MachineIndependent/glslang.y" + case 665: /* spirv_decorate_parameter: INTCONSTANT */ +#line 4309 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true); } -#line 12035 "MachineIndependent/glslang_tab.cpp" +#line 12052 "MachineIndependent/glslang_tab.cpp" break; - case 665: /* spirv_decorate_parameter: UINTCONSTANT */ -#line 4304 "MachineIndependent/glslang.y" + case 666: /* spirv_decorate_parameter: UINTCONSTANT */ +#line 4312 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true); } -#line 12043 "MachineIndependent/glslang_tab.cpp" +#line 12060 "MachineIndependent/glslang_tab.cpp" break; - case 666: /* spirv_decorate_parameter: BOOLCONSTANT */ -#line 4307 "MachineIndependent/glslang.y" + case 667: /* spirv_decorate_parameter: BOOLCONSTANT */ +#line 4315 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true); } -#line 12051 "MachineIndependent/glslang_tab.cpp" +#line 12068 "MachineIndependent/glslang_tab.cpp" break; - case 667: /* spirv_decorate_id_parameter_list: constant_expression */ -#line 4312 "MachineIndependent/glslang.y" + case 668: /* spirv_decorate_id_parameter_list: constant_expression */ +#line 4320 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -12060,11 +12077,11 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode)); } -#line 12064 "MachineIndependent/glslang_tab.cpp" +#line 12081 "MachineIndependent/glslang_tab.cpp" break; - case 668: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression */ -#line 4320 "MachineIndependent/glslang.y" + case 669: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression */ +#line 4328 "MachineIndependent/glslang.y" { if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat && (yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt && @@ -12073,139 +12090,139 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), ""); (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode)); } -#line 12077 "MachineIndependent/glslang_tab.cpp" +#line 12094 "MachineIndependent/glslang_tab.cpp" break; - case 669: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ -#line 4330 "MachineIndependent/glslang.y" + case 670: /* spirv_decorate_string_parameter_list: STRING_LITERAL */ +#line 4338 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.makeAggregate( parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12086 "MachineIndependent/glslang_tab.cpp" +#line 12103 "MachineIndependent/glslang_tab.cpp" break; - case 670: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ -#line 4334 "MachineIndependent/glslang.y" + case 671: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */ +#line 4342 "MachineIndependent/glslang.y" { (yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true)); } -#line 12094 "MachineIndependent/glslang_tab.cpp" +#line 12111 "MachineIndependent/glslang_tab.cpp" break; - case 671: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4339 "MachineIndependent/glslang.y" + case 672: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4347 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams)); } -#line 12103 "MachineIndependent/glslang_tab.cpp" +#line 12120 "MachineIndependent/glslang_tab.cpp" break; - case 672: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ -#line 4343 "MachineIndependent/glslang.y" + case 673: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */ +#line 4351 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq)); (yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams)); } -#line 12113 "MachineIndependent/glslang_tab.cpp" +#line 12130 "MachineIndependent/glslang_tab.cpp" break; - case 673: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4348 "MachineIndependent/glslang.y" + case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4356 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel()); (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); } -#line 12122 "MachineIndependent/glslang_tab.cpp" +#line 12139 "MachineIndependent/glslang_tab.cpp" break; - case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4352 "MachineIndependent/glslang.y" + case 675: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4360 "MachineIndependent/glslang.y" { (yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel()); parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst)); } -#line 12132 "MachineIndependent/glslang_tab.cpp" +#line 12149 "MachineIndependent/glslang_tab.cpp" break; - case 675: /* spirv_type_parameter_list: spirv_type_parameter */ -#line 4359 "MachineIndependent/glslang.y" + case 676: /* spirv_type_parameter_list: spirv_type_parameter */ +#line 4367 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams); } -#line 12140 "MachineIndependent/glslang_tab.cpp" +#line 12157 "MachineIndependent/glslang_tab.cpp" break; - case 676: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ -#line 4362 "MachineIndependent/glslang.y" + case 677: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */ +#line 4370 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams)); } -#line 12148 "MachineIndependent/glslang_tab.cpp" +#line 12165 "MachineIndependent/glslang_tab.cpp" break; - case 677: /* spirv_type_parameter: constant_expression */ -#line 4367 "MachineIndependent/glslang.y" + case 678: /* spirv_type_parameter: constant_expression */ +#line 4375 "MachineIndependent/glslang.y" { (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion()); } -#line 12156 "MachineIndependent/glslang_tab.cpp" +#line 12173 "MachineIndependent/glslang_tab.cpp" break; - case 678: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4372 "MachineIndependent/glslang.y" + case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4380 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12164 "MachineIndependent/glslang_tab.cpp" +#line 12181 "MachineIndependent/glslang_tab.cpp" break; - case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ -#line 4375 "MachineIndependent/glslang.y" + case 680: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */ +#line 4383 "MachineIndependent/glslang.y" { parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq)); (yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst); } -#line 12173 "MachineIndependent/glslang_tab.cpp" +#line 12190 "MachineIndependent/glslang_tab.cpp" break; - case 680: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ -#line 4381 "MachineIndependent/glslang.y" + case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */ +#line 4389 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst); } -#line 12181 "MachineIndependent/glslang_tab.cpp" +#line 12198 "MachineIndependent/glslang_tab.cpp" break; - case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ -#line 4384 "MachineIndependent/glslang.y" + case 682: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */ +#line 4392 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst)); } -#line 12189 "MachineIndependent/glslang_tab.cpp" +#line 12206 "MachineIndependent/glslang_tab.cpp" break; - case 682: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ -#line 4389 "MachineIndependent/glslang.y" + case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */ +#line 4397 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string); } -#line 12197 "MachineIndependent/glslang_tab.cpp" +#line 12214 "MachineIndependent/glslang_tab.cpp" break; - case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ -#line 4392 "MachineIndependent/glslang.y" + case 684: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */ +#line 4400 "MachineIndependent/glslang.y" { (yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i); } -#line 12205 "MachineIndependent/glslang_tab.cpp" +#line 12222 "MachineIndependent/glslang_tab.cpp" break; -#line 12209 "MachineIndependent/glslang_tab.cpp" +#line 12226 "MachineIndependent/glslang_tab.cpp" default: break; } @@ -12430,5 +12447,5 @@ YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); return yyresult; } -#line 4397 "MachineIndependent/glslang.y" +#line 4405 "MachineIndependent/glslang.y" diff --git a/glslang/MachineIndependent/glslang_tab.cpp.h b/glslang/MachineIndependent/glslang_tab.cpp.h index 596a10e6d9..a6871b319b 100644 --- a/glslang/MachineIndependent/glslang_tab.cpp.h +++ b/glslang/MachineIndependent/glslang_tab.cpp.h @@ -501,11 +501,12 @@ extern int yydebug; SHADERCALLCOHERENT = 702, /* SHADERCALLCOHERENT */ NOPERSPECTIVE = 703, /* NOPERSPECTIVE */ EXPLICITINTERPAMD = 704, /* EXPLICITINTERPAMD */ - PERVERTEXNV = 705, /* PERVERTEXNV */ - PERPRIMITIVENV = 706, /* PERPRIMITIVENV */ - PERVIEWNV = 707, /* PERVIEWNV */ - PERTASKNV = 708, /* PERTASKNV */ - PRECISE = 709 /* PRECISE */ + PERVERTEXEXT = 705, /* PERVERTEXEXT */ + PERVERTEXNV = 706, /* PERVERTEXNV */ + PERPRIMITIVENV = 707, /* PERPRIMITIVENV */ + PERVIEWNV = 708, /* PERVIEWNV */ + PERTASKNV = 709, /* PERTASKNV */ + PRECISE = 710 /* PRECISE */ }; typedef enum yytokentype yytoken_kind_t; #endif @@ -553,7 +554,7 @@ union YYSTYPE glslang::TArraySizes* typeParameters; } interm; -#line 557 "MachineIndependent/glslang_tab.cpp.h" +#line 558 "MachineIndependent/glslang_tab.cpp.h" }; typedef union YYSTYPE YYSTYPE; diff --git a/glslang/MachineIndependent/linkValidate.cpp b/glslang/MachineIndependent/linkValidate.cpp index 7fed096b8d..6e60155aaf 100644 --- a/glslang/MachineIndependent/linkValidate.cpp +++ b/glslang/MachineIndependent/linkValidate.cpp @@ -2337,7 +2337,7 @@ bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) { ! type.getQualifier().patch) || (language == EShLangTessEvaluation && type.getQualifier().storage == EvqVaryingIn) || (language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn && - type.getQualifier().pervertexNV) || + (type.getQualifier().pervertexNV || type.getQualifier().pervertexEXT)) || (language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut && !type.getQualifier().perTaskNV)); } diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index db4ac26830..f8bed532cf 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -484,7 +484,9 @@ INSTANTIATE_TEST_SUITE_P( "spv.smBuiltins.frag", "spv.builtin.PrimitiveShadingRateEXT.vert", "spv.builtin.ShadingRateEXT.frag", - "spv.atomicAdd.bufferReference.comp" + "spv.atomicAdd.bufferReference.comp", + "spv.fragmentShaderBarycentric3.frag", + "spv.fragmentShaderBarycentric4.frag", })), FileNameAsCustomTestSuffix ); From 25e97a5b06c6bac9db7b924257d023648652ee5c Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 24 May 2022 13:31:03 -0600 Subject: [PATCH 341/365] Fix build for clang + mingw32-make Fixes #2951 --- CMakeLists.txt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index a792c46750..6a43f6ff25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -191,7 +191,11 @@ elseif(${CMAKE_CXX_COMPILER_ID} MATCHES "Clang" AND NOT MSVC) # Error if there's symbols that are not found at link time. # add_link_options() was added in CMake 3.13 - if using an earlier # version don't set this - it should be caught by presubmits anyway. - add_link_options("-Wl,-undefined,error") + if (WIN32) + add_link_options("-Wl,--no-undefined") + else() + add_link_options("-Wl,-undefined,error") + endif() endif() elseif(MSVC) if(NOT ENABLE_RTTI) From b6df89b470ab3286a63214d0fc21f5ba7fab0a6c Mon Sep 17 00:00:00 2001 From: Qingyuan Zheng Date: Mon, 30 May 2022 23:08:50 -0700 Subject: [PATCH 342/365] use unique_ptr to avoid calling deleted move ctor --- SPIRV/spvIR.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index 948ea52c9e..ddccd26bdf 100644 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -358,12 +358,12 @@ class Function { { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; } void setDebugLineInfo(Id fileName, int line, int column) { - lineInstruction = Instruction(OpLine); - lineInstruction.addIdOperand(fileName); - lineInstruction.addImmediateOperand(line); - lineInstruction.addImmediateOperand(column); + lineInstruction = std::make_unique(OpLine); + lineInstruction->addIdOperand(fileName); + lineInstruction->addImmediateOperand(line); + lineInstruction->addImmediateOperand(column); } - bool hasDebugLineInfo() const { return lineInstruction.getOpCode() == OpLine; } + bool hasDebugLineInfo() const { return lineInstruction != nullptr; } void setImplicitThis() { implicitThis = true; } bool hasImplicitThis() const { return implicitThis; } @@ -382,8 +382,8 @@ class Function { void dump(std::vector& out) const { // OpLine - if (hasDebugLineInfo()) { - lineInstruction.dump(out); + if (lineInstruction != nullptr) { + lineInstruction->dump(out); } // OpFunction @@ -404,7 +404,7 @@ class Function { Function& operator=(Function&); Module& parent; - Instruction lineInstruction; + std::unique_ptr lineInstruction; Instruction functionInstruction; std::vector parameterInstructions; std::vector blocks; @@ -471,7 +471,7 @@ class Module { // - the OpFunction instruction // - all the OpFunctionParameter instructions __inline Function::Function(Id id, Id resultType, Id functionType, Id firstParamId, Module& parent) - : parent(parent), lineInstruction(OpNop), + : parent(parent), lineInstruction(nullptr), functionInstruction(id, resultType, OpFunction), implicitThis(false), reducedPrecisionReturn(false) { From 61d244145ddfc783f44c24c6abf0fe2f5f28254c Mon Sep 17 00:00:00 2001 From: Qingyuan Zheng Date: Tue, 31 May 2022 10:40:25 -0700 Subject: [PATCH 343/365] avoid using make_unique for c++11 compatibility --- SPIRV/spvIR.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/SPIRV/spvIR.h b/SPIRV/spvIR.h index ddccd26bdf..57e7d378b9 100644 --- a/SPIRV/spvIR.h +++ b/SPIRV/spvIR.h @@ -358,7 +358,7 @@ class Function { { return reducedPrecisionReturn ? DecorationRelaxedPrecision : NoPrecision; } void setDebugLineInfo(Id fileName, int line, int column) { - lineInstruction = std::make_unique(OpLine); + lineInstruction = std::unique_ptr{new Instruction(OpLine)}; lineInstruction->addIdOperand(fileName); lineInstruction->addImmediateOperand(line); lineInstruction->addImmediateOperand(column); From 6cdae46314e2df1f3a1ee543f20f98d522547d49 Mon Sep 17 00:00:00 2001 From: Andrea Faulds Date: Wed, 1 Jun 2022 10:43:13 +0200 Subject: [PATCH 344/365] Avoid duplicate BuiltIn variables for ray tracing matrices (fix #2921) Fixes an issue where invalid SPIR-V was generated when gl_ObjectToWorldEXT and gl_ObjectToWorld3x4EXT, or gl_WorldToObjectEXT and gl_WorldToObject3x4EXT, were used in the same shader. The SPIR-V specification requires that there be at most one OpVariable decorated with a given BuiltIn value. --- SPIRV/GlslangToSpv.cpp | 26 +++++ .../spv.ext.AnyHitShader.rahit.out | 98 +++++++++---------- .../spv.ext.ClosestHitShader.rchit.out | 86 ++++++++-------- .../spv.ext.IntersectShader.rint.out | 66 ++++++------- 4 files changed, 142 insertions(+), 134 deletions(-) diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index e17411d686..63547692b7 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -260,6 +260,7 @@ class TGlslangToSpvTraverser : public glslang::TIntermTraverser { std::unordered_map extBuiltinMap; std::unordered_map symbolValues; + std::unordered_map builtInVariableIds; std::unordered_set rValueParameters; // set of formal function parameters passed as rValues, // rather than a pointer std::unordered_map functionMap; @@ -8750,7 +8751,32 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol // it was not found, create it spv::BuiltIn builtIn = TranslateBuiltInDecoration(symbol->getQualifier().builtIn, false); auto forcedType = getForcedType(symbol->getQualifier().builtIn, symbol->getType()); + + // There are pairs of symbols that map to the same SPIR-V built-in: + // gl_ObjectToWorldEXT and gl_ObjectToWorld3x4EXT, and gl_WorldToObjectEXT + // and gl_WorldToObject3x4EXT. SPIR-V forbids having two OpVariables + // with the same BuiltIn in the same storage class, so we must re-use one. + const bool mayNeedToReuseBuiltIn = + builtIn == spv::BuiltInObjectToWorldKHR || + builtIn == spv::BuiltInWorldToObjectKHR; + + if (mayNeedToReuseBuiltIn) { + auto iter = builtInVariableIds.find(uint32_t(builtIn)); + if (builtInVariableIds.end() != iter) { + id = iter->second; + symbolValues[symbol->getId()] = id; + if (forcedType.second != spv::NoType) + forceType[id] = forcedType.second; + return id; + } + } + id = createSpvVariable(symbol, forcedType.first); + + if (mayNeedToReuseBuiltIn) { + builtInVariableIds.insert({uint32_t(builtIn), id}); + } + symbolValues[symbol->getId()] = id; if (forcedType.second != spv::NoType) forceType[id] = forcedType.second; diff --git a/Test/baseResults/spv.ext.AnyHitShader.rahit.out b/Test/baseResults/spv.ext.AnyHitShader.rahit.out index af228e28ec..0a6db643bd 100644 --- a/Test/baseResults/spv.ext.AnyHitShader.rahit.out +++ b/Test/baseResults/spv.ext.AnyHitShader.rahit.out @@ -1,7 +1,7 @@ spv.ext.AnyHitShader.rahit // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 110 +// Id's are bound by 108 Capability GroupNonUniform Capability RayTracingKHR @@ -10,7 +10,7 @@ spv.ext.AnyHitShader.rahit Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 87 101 + EntryPoint AnyHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 85 99 Source GLSL 460 SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" @@ -49,13 +49,11 @@ spv.ext.AnyHitShader.rahit Name 69 "v15" Name 70 "gl_GeometryIndexEXT" Name 75 "v16" - Name 76 "gl_ObjectToWorld3x4EXT" - Name 79 "v17" - Name 80 "gl_WorldToObject3x4EXT" - Name 83 "v18" - Name 84 "gl_CullMaskEXT" - Name 87 "incomingPayload" - Name 101 "gl_SubgroupSize" + Name 78 "v17" + Name 81 "v18" + Name 82 "gl_CullMaskEXT" + Name 85 "incomingPayload" + Name 99 "gl_SubgroupSize" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -72,13 +70,11 @@ spv.ext.AnyHitShader.rahit Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR - Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR - Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 84(gl_CullMaskEXT) BuiltIn CullMaskKHR - Decorate 101(gl_SubgroupSize) RelaxedPrecision - Decorate 101(gl_SubgroupSize) BuiltIn SubgroupSize - Decorate 102 RelaxedPrecision - Decorate 103 RelaxedPrecision + Decorate 82(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 99(gl_SubgroupSize) RelaxedPrecision + Decorate 99(gl_SubgroupSize) BuiltIn SubgroupSize + Decorate 100 RelaxedPrecision + Decorate 101 RelaxedPrecision 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -118,18 +114,16 @@ spv.ext.AnyHitShader.rahit 72: TypeVector 28(float) 4 73: TypeMatrix 72(fvec4) 3 74: TypePointer Function 73 -76(gl_ObjectToWorld3x4EXT): 63(ptr) Variable Input -80(gl_WorldToObject3x4EXT): 63(ptr) Variable Input -84(gl_CullMaskEXT): 57(ptr) Variable Input - 86: TypePointer IncomingRayPayloadKHR 72(fvec4) -87(incomingPayload): 86(ptr) Variable IncomingRayPayloadKHR - 88: 28(float) Constant 1056964608 - 89: 72(fvec4) ConstantComposite 88 88 88 88 - 91: 16(int) Constant 1 - 92: TypeBool - 97: 6(int) Constant 0 -101(gl_SubgroupSize): 57(ptr) Variable Input - 104: TypePointer IncomingRayPayloadKHR 28(float) +82(gl_CullMaskEXT): 57(ptr) Variable Input + 84: TypePointer IncomingRayPayloadKHR 72(fvec4) +85(incomingPayload): 84(ptr) Variable IncomingRayPayloadKHR + 86: 28(float) Constant 1056964608 + 87: 72(fvec4) ConstantComposite 86 86 86 86 + 89: 16(int) Constant 1 + 90: TypeBool + 95: 6(int) Constant 0 +99(gl_SubgroupSize): 57(ptr) Variable Input + 102: TypePointer IncomingRayPayloadKHR 28(float) 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -149,8 +143,8 @@ spv.ext.AnyHitShader.rahit 66(v14): 61(ptr) Variable Function 69(v15): 17(ptr) Variable Function 75(v16): 74(ptr) Variable Function - 79(v17): 74(ptr) Variable Function - 83(v18): 55(ptr) Variable Function + 78(v17): 74(ptr) Variable Function + 81(v18): 55(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -183,28 +177,28 @@ spv.ext.AnyHitShader.rahit Store 66(v14) 68 71: 16(int) Load 70(gl_GeometryIndexEXT) Store 69(v15) 71 - 77: 60 Load 76(gl_ObjectToWorld3x4EXT) - 78: 73 Transpose 77 - Store 75(v16) 78 - 81: 60 Load 80(gl_WorldToObject3x4EXT) - 82: 73 Transpose 81 - Store 79(v17) 82 - 85: 6(int) Load 84(gl_CullMaskEXT) - Store 83(v18) 85 - Store 87(incomingPayload) 89 - 90: 16(int) Load 18(v2) - 93: 92(bool) IEqual 90 91 - SelectionMerge 95 None - BranchConditional 93 94 95 - 94: Label + 76: 60 Load 64(gl_ObjectToWorldEXT) + 77: 73 Transpose 76 + Store 75(v16) 77 + 79: 60 Load 67(gl_WorldToObjectEXT) + 80: 73 Transpose 79 + Store 78(v17) 80 + 83: 6(int) Load 82(gl_CullMaskEXT) + Store 81(v18) 83 + Store 85(incomingPayload) 87 + 88: 16(int) Load 18(v2) + 91: 90(bool) IEqual 88 89 + SelectionMerge 93 None + BranchConditional 91 92 93 + 92: Label IgnoreIntersectionKHR - 95: Label - 102: 6(int) Load 101(gl_SubgroupSize) - 103: 28(float) ConvertUToF 102 - 105: 104(ptr) AccessChain 87(incomingPayload) 97 - 106: 28(float) Load 105 - 107: 28(float) FAdd 106 103 - 108: 104(ptr) AccessChain 87(incomingPayload) 97 - Store 108 107 + 93: Label + 100: 6(int) Load 99(gl_SubgroupSize) + 101: 28(float) ConvertUToF 100 + 103: 102(ptr) AccessChain 85(incomingPayload) 95 + 104: 28(float) Load 103 + 105: 28(float) FAdd 104 101 + 106: 102(ptr) AccessChain 85(incomingPayload) 95 + Store 106 105 TerminateRayKHR FunctionEnd diff --git a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out index 1c1a9a0cf6..4a7178e9c2 100644 --- a/Test/baseResults/spv.ext.ClosestHitShader.rchit.out +++ b/Test/baseResults/spv.ext.ClosestHitShader.rchit.out @@ -1,7 +1,7 @@ spv.ext.ClosestHitShader.rchit // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 104 +// Id's are bound by 102 Capability RayTracingKHR Capability RayCullMaskKHR @@ -9,7 +9,7 @@ spv.ext.ClosestHitShader.rchit Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 76 80 84 88 101 103 + EntryPoint ClosestHitKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 53 58 64 67 70 82 86 99 101 Source GLSL 460 SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" @@ -47,14 +47,12 @@ spv.ext.ClosestHitShader.rchit Name 69 "v15" Name 70 "gl_GeometryIndexEXT" Name 75 "v16" - Name 76 "gl_ObjectToWorld3x4EXT" - Name 79 "v17" - Name 80 "gl_WorldToObject3x4EXT" - Name 83 "v18" - Name 84 "gl_CullMaskEXT" - Name 88 "accEXT" - Name 101 "incomingPayload" - Name 103 "localPayload" + Name 78 "v17" + Name 81 "v18" + Name 82 "gl_CullMaskEXT" + Name 86 "accEXT" + Name 99 "incomingPayload" + Name 101 "localPayload" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -71,11 +69,9 @@ spv.ext.ClosestHitShader.rchit Decorate 64(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 67(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR Decorate 70(gl_GeometryIndexEXT) BuiltIn RayGeometryIndexKHR - Decorate 76(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR - Decorate 80(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 84(gl_CullMaskEXT) BuiltIn CullMaskKHR - Decorate 88(accEXT) DescriptorSet 0 - Decorate 88(accEXT) Binding 0 + Decorate 82(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 86(accEXT) DescriptorSet 0 + Decorate 86(accEXT) Binding 0 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -115,26 +111,24 @@ spv.ext.ClosestHitShader.rchit 72: TypeVector 28(float) 4 73: TypeMatrix 72(fvec4) 3 74: TypePointer Function 73 -76(gl_ObjectToWorld3x4EXT): 63(ptr) Variable Input -80(gl_WorldToObject3x4EXT): 63(ptr) Variable Input -84(gl_CullMaskEXT): 57(ptr) Variable Input - 86: TypeAccelerationStructureKHR - 87: TypePointer UniformConstant 86 - 88(accEXT): 87(ptr) Variable UniformConstant - 90: 6(int) Constant 0 - 91: 6(int) Constant 1 - 92: 6(int) Constant 2 - 93: 6(int) Constant 3 - 94: 28(float) Constant 1056964608 +82(gl_CullMaskEXT): 57(ptr) Variable Input + 84: TypeAccelerationStructureKHR + 85: TypePointer UniformConstant 84 + 86(accEXT): 85(ptr) Variable UniformConstant + 88: 6(int) Constant 0 + 89: 6(int) Constant 1 + 90: 6(int) Constant 2 + 91: 6(int) Constant 3 + 92: 28(float) Constant 1056964608 + 93: 29(fvec3) ConstantComposite 92 92 92 + 94: 28(float) Constant 1065353216 95: 29(fvec3) ConstantComposite 94 94 94 - 96: 28(float) Constant 1065353216 - 97: 29(fvec3) ConstantComposite 96 96 96 - 98: 28(float) Constant 1061158912 - 99: 16(int) Constant 1 - 100: TypePointer IncomingRayPayloadKHR 72(fvec4) -101(incomingPayload): 100(ptr) Variable IncomingRayPayloadKHR - 102: TypePointer RayPayloadKHR 72(fvec4) -103(localPayload): 102(ptr) Variable RayPayloadKHR + 96: 28(float) Constant 1061158912 + 97: 16(int) Constant 1 + 98: TypePointer IncomingRayPayloadKHR 72(fvec4) +99(incomingPayload): 98(ptr) Variable IncomingRayPayloadKHR + 100: TypePointer RayPayloadKHR 72(fvec4) +101(localPayload): 100(ptr) Variable RayPayloadKHR 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -154,8 +148,8 @@ spv.ext.ClosestHitShader.rchit 66(v14): 61(ptr) Variable Function 69(v15): 17(ptr) Variable Function 75(v16): 74(ptr) Variable Function - 79(v17): 74(ptr) Variable Function - 83(v18): 55(ptr) Variable Function + 78(v17): 74(ptr) Variable Function + 81(v18): 55(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -188,15 +182,15 @@ spv.ext.ClosestHitShader.rchit Store 66(v14) 68 71: 16(int) Load 70(gl_GeometryIndexEXT) Store 69(v15) 71 - 77: 60 Load 76(gl_ObjectToWorld3x4EXT) - 78: 73 Transpose 77 - Store 75(v16) 78 - 81: 60 Load 80(gl_WorldToObject3x4EXT) - 82: 73 Transpose 81 - Store 79(v17) 82 - 85: 6(int) Load 84(gl_CullMaskEXT) - Store 83(v18) 85 - 89: 86 Load 88(accEXT) - TraceRayKHR 89 90 91 92 93 90 95 94 97 98 101(incomingPayload) + 76: 60 Load 64(gl_ObjectToWorldEXT) + 77: 73 Transpose 76 + Store 75(v16) 77 + 79: 60 Load 67(gl_WorldToObjectEXT) + 80: 73 Transpose 79 + Store 78(v17) 80 + 83: 6(int) Load 82(gl_CullMaskEXT) + Store 81(v18) 83 + 87: 84 Load 86(accEXT) + TraceRayKHR 87 88 89 90 91 88 93 92 95 96 99(incomingPayload) Return FunctionEnd diff --git a/Test/baseResults/spv.ext.IntersectShader.rint.out b/Test/baseResults/spv.ext.IntersectShader.rint.out index 54b6d349e7..dcceea4897 100644 --- a/Test/baseResults/spv.ext.IntersectShader.rint.out +++ b/Test/baseResults/spv.ext.IntersectShader.rint.out @@ -1,7 +1,7 @@ spv.ext.IntersectShader.rint // Module Version 10400 // Generated by (magic number): 8000a -// Id's are bound by 86 +// Id's are bound by 84 Capability RayTracingKHR Capability RayCullMaskKHR @@ -9,7 +9,7 @@ spv.ext.IntersectShader.rint Extension "SPV_KHR_ray_tracing" 1: ExtInstImport "GLSL.std.450" MemoryModel Logical GLSL450 - EntryPoint IntersectionKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 65 69 75 78 + EntryPoint IntersectionKHR 4 "main" 11 14 20 23 26 33 36 39 42 47 50 56 59 73 76 Source GLSL 460 SourceExtension "GL_EXT_ray_cull_mask" SourceExtension "GL_EXT_ray_tracing" @@ -41,12 +41,10 @@ spv.ext.IntersectShader.rint Name 58 "v12" Name 59 "gl_WorldToObjectEXT" Name 64 "v13" - Name 65 "gl_ObjectToWorld3x4EXT" - Name 68 "v14" - Name 69 "gl_WorldToObject3x4EXT" - Name 73 "v15" - Name 75 "gl_CullMaskEXT" - Name 78 "iAttr" + Name 67 "v14" + Name 71 "v15" + Name 73 "gl_CullMaskEXT" + Name 76 "iAttr" Decorate 11(gl_LaunchIDEXT) BuiltIn LaunchIdKHR Decorate 14(gl_LaunchSizeEXT) BuiltIn LaunchSizeKHR Decorate 20(gl_PrimitiveID) BuiltIn PrimitiveId @@ -62,9 +60,7 @@ spv.ext.IntersectShader.rint Decorate 50(gl_RayTmaxEXT) Coherent Decorate 56(gl_ObjectToWorldEXT) BuiltIn ObjectToWorldKHR Decorate 59(gl_WorldToObjectEXT) BuiltIn WorldToObjectKHR - Decorate 65(gl_ObjectToWorld3x4EXT) BuiltIn ObjectToWorldKHR - Decorate 69(gl_WorldToObject3x4EXT) BuiltIn WorldToObjectKHR - Decorate 75(gl_CullMaskEXT) BuiltIn CullMaskKHR + Decorate 73(gl_CullMaskEXT) BuiltIn CullMaskKHR 2: TypeVoid 3: TypeFunction 2 6: TypeInt 32 0 @@ -99,19 +95,17 @@ spv.ext.IntersectShader.rint 61: TypeVector 28(float) 4 62: TypeMatrix 61(fvec4) 3 63: TypePointer Function 62 -65(gl_ObjectToWorld3x4EXT): 55(ptr) Variable Input -69(gl_WorldToObject3x4EXT): 55(ptr) Variable Input - 72: TypePointer Function 6(int) - 74: TypePointer Input 6(int) -75(gl_CullMaskEXT): 74(ptr) Variable Input - 77: TypePointer HitAttributeKHR 61(fvec4) - 78(iAttr): 77(ptr) Variable HitAttributeKHR - 79: 28(float) Constant 1056964608 - 80: 28(float) Constant 0 - 81: 28(float) Constant 1065353216 - 82: 61(fvec4) ConstantComposite 79 79 80 81 - 83: 6(int) Constant 1 - 84: TypeBool + 70: TypePointer Function 6(int) + 72: TypePointer Input 6(int) +73(gl_CullMaskEXT): 72(ptr) Variable Input + 75: TypePointer HitAttributeKHR 61(fvec4) + 76(iAttr): 75(ptr) Variable HitAttributeKHR + 77: 28(float) Constant 1056964608 + 78: 28(float) Constant 0 + 79: 28(float) Constant 1065353216 + 80: 61(fvec4) ConstantComposite 77 77 78 79 + 81: 6(int) Constant 1 + 82: TypeBool 4(main): 2 Function None 3 5: Label 9(v0): 8(ptr) Variable Function @@ -128,8 +122,8 @@ spv.ext.IntersectShader.rint 54(v11): 53(ptr) Variable Function 58(v12): 53(ptr) Variable Function 64(v13): 63(ptr) Variable Function - 68(v14): 63(ptr) Variable Function - 73(v15): 72(ptr) Variable Function + 67(v14): 63(ptr) Variable Function + 71(v15): 70(ptr) Variable Function 12: 7(ivec3) Load 11(gl_LaunchIDEXT) Store 9(v0) 12 15: 7(ivec3) Load 14(gl_LaunchSizeEXT) @@ -156,15 +150,15 @@ spv.ext.IntersectShader.rint Store 54(v11) 57 60: 52 Load 59(gl_WorldToObjectEXT) Store 58(v12) 60 - 66: 52 Load 65(gl_ObjectToWorld3x4EXT) - 67: 62 Transpose 66 - Store 64(v13) 67 - 70: 52 Load 69(gl_WorldToObject3x4EXT) - 71: 62 Transpose 70 - Store 68(v14) 71 - 76: 6(int) Load 75(gl_CullMaskEXT) - Store 73(v15) 76 - Store 78(iAttr) 82 - 85: 84(bool) ReportIntersectionKHR 79 83 + 65: 52 Load 56(gl_ObjectToWorldEXT) + 66: 62 Transpose 65 + Store 64(v13) 66 + 68: 52 Load 59(gl_WorldToObjectEXT) + 69: 62 Transpose 68 + Store 67(v14) 69 + 74: 6(int) Load 73(gl_CullMaskEXT) + Store 71(v15) 74 + Store 76(iAttr) 80 + 83: 82(bool) ReportIntersectionKHR 77 81 Return FunctionEnd From 9e2b914722b7a2021b8f4397f75137470ae19530 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 1 Jun 2022 16:40:29 -0600 Subject: [PATCH 345/365] Restore legacy interface for remap() Fixes ABI breakage caused by #2933 --- SPIRV/SPVRemapper.cpp | 9 +++++++++ SPIRV/SPVRemapper.h | 3 +++ 2 files changed, 12 insertions(+) diff --git a/SPIRV/SPVRemapper.cpp b/SPIRV/SPVRemapper.cpp index 28168822c6..6aca8cbcf0 100644 --- a/SPIRV/SPVRemapper.cpp +++ b/SPIRV/SPVRemapper.cpp @@ -1517,6 +1517,15 @@ namespace spv { spv.swap(in_spv); } + // remap from a memory image - legacy interface without white list + void spirvbin_t::remap(std::vector& in_spv, std::uint32_t opts) + { + stripWhiteList.clear(); + spv.swap(in_spv); + remap(opts); + spv.swap(in_spv); + } + } // namespace SPV #endif // defined (use_cpp11) diff --git a/SPIRV/SPVRemapper.h b/SPIRV/SPVRemapper.h index 2dfacd733b..d21694635a 100644 --- a/SPIRV/SPVRemapper.h +++ b/SPIRV/SPVRemapper.h @@ -121,6 +121,9 @@ class spirvbin_t : public spirvbin_base_t void remap(std::vector& spv, const std::vector& whiteListStrings, std::uint32_t opts = DO_EVERYTHING); + // remap on an existing binary in memory - legacy interface without white list + void remap(std::vector& spv, std::uint32_t opts = DO_EVERYTHING); + // Type for error/log handler functions typedef std::function errorfn_t; typedef std::function logfn_t; From 3f369d4a16be25fd4beebba7c161e18c10afdbef Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Thu, 2 Jun 2022 11:51:07 -0600 Subject: [PATCH 346/365] Update known_good.json --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index 3dd6124f91..df2a50815c 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "58dc37ea6af7ec09f32f7b13ff60071e3ba2bd24" + "commit" : "b930e734ea198b7aabbbf04ee1562cf6f57962f0" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "b765c355f488837ca4c77980ba69484f3ff277f5" + "commit" : "5a121866927a16ab9d49bed4788b532c7fcea766" } ] } From c411e58d7876de9e5171ff16aa915d4daced8e18 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Thu, 2 Jun 2022 17:34:26 -0600 Subject: [PATCH 347/365] Release 11.10.0 --- CHANGES.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index fb0b0d11e1..eee07aaf7f 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,14 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.10.0 2022-06-02 + +### Other changes +* Generate OpLine before OpFunction +* Add support for VK_EXT_fragment_shader_barycentric +* Add whitelist filtering for debug comments in SPIRV-Remap +* Add support for GL_EXT_ray_cull_mask + ## 11.9.0 2022-04-06 ### Other changes From ea024d2bfcdfcdeeb47dab61f6a4f4dfd1082a9e Mon Sep 17 00:00:00 2001 From: James0124 Date: Tue, 7 Jun 2022 01:13:21 +0900 Subject: [PATCH 348/365] CInterface: Add OpSource support. Add interface for `TIntermediate::addSourceText` and `TIntermediate::setSourceFile`. --- SPIRV/CInterface/spirv_c_interface.cpp | 18 +++++++++++++++--- glslang/CInterface/glslang_c_interface.cpp | 11 +++++++++++ glslang/Include/glslang_c_interface.h | 13 +++++++++++++ 3 files changed, 39 insertions(+), 3 deletions(-) diff --git a/SPIRV/CInterface/spirv_c_interface.cpp b/SPIRV/CInterface/spirv_c_interface.cpp index a0790f48f1..d9312bbbdb 100644 --- a/SPIRV/CInterface/spirv_c_interface.cpp +++ b/SPIRV/CInterface/spirv_c_interface.cpp @@ -36,6 +36,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "SPIRV/Logger.h" #include "SPIRV/SpvTools.h" +static_assert(sizeof(glslang_spv_options_t) == sizeof(glslang::SpvOptions), ""); + typedef struct glslang_program_s { glslang::TProgram* program; std::vector spirv; @@ -81,13 +83,23 @@ static EShLanguage c_shader_stage(glslang_stage_t stage) GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage) { + glslang_spv_options_t spv_options; + spv_options.generate_debug_info = false; + spv_options.strip_debug_info = false; + spv_options.disable_optimizer = true; + spv_options.optimize_size = false; + spv_options.disassemble = false; + spv_options.validate = true; + + glslang_program_SPIRV_generate_with_options(program, stage, &spv_options); +} + +GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options) { spv::SpvBuildLogger logger; - glslang::SpvOptions spvOptions; - spvOptions.validate = true; const glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); - glslang::GlslangToSpv(*intermediate, program->spirv, &logger, &spvOptions); + glslang::GlslangToSpv(*intermediate, program->spirv, &logger, reinterpret_cast(spv_options)); program->loggerMessages = logger.getAllMessages(); } diff --git a/glslang/CInterface/glslang_c_interface.cpp b/glslang/CInterface/glslang_c_interface.cpp index 53892bc5d2..0e691a1f7c 100644 --- a/glslang/CInterface/glslang_c_interface.cpp +++ b/glslang/CInterface/glslang_c_interface.cpp @@ -38,6 +38,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #include "glslang/Include/ResourceLimits.h" #include "glslang/MachineIndependent/Versions.h" +#include "glslang/MachineIndependent/localintermediate.h" static_assert(int(GLSLANG_STAGE_COUNT) == EShLangCount, ""); static_assert(int(GLSLANG_STAGE_MASK_COUNT) == EShLanguageMaskCount, ""); @@ -455,6 +456,16 @@ GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages return (int)program->program->link((EShMessages)messages); } +GLSLANG_EXPORT void glslang_program_add_source_text(glslang_program_t* program, glslang_stage_t stage, const char* text, size_t len) { + glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); + intermediate->addSourceText(text, len); +} + +GLSLANG_EXPORT void glslang_program_set_source_file(glslang_program_t* program, glslang_stage_t stage, const char* file) { + glslang::TIntermediate* intermediate = program->program->getIntermediate(c_shader_stage(stage)); + intermediate->setSourceFile(file); +} + GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program) { return (int)program->program->mapIO(); diff --git a/glslang/Include/glslang_c_interface.h b/glslang/Include/glslang_c_interface.h index a98a7e176d..9e5909ce88 100644 --- a/glslang/Include/glslang_c_interface.h +++ b/glslang/Include/glslang_c_interface.h @@ -199,6 +199,16 @@ typedef struct glsl_include_callbacks_s { glsl_free_include_result_func free_include_result; } glsl_include_callbacks_t; +/* SpvOptions counterpart */ +typedef struct glslang_spv_options_s { + bool generate_debug_info; + bool strip_debug_info; + bool disable_optimizer; + bool optimize_size; + bool disassemble; + bool validate; +} glslang_spv_options_t; + #ifdef __cplusplus extern "C" { #endif @@ -238,8 +248,11 @@ GLSLANG_EXPORT glslang_program_t* glslang_program_create(); GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program); GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader); GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t +GLSLANG_EXPORT void glslang_program_add_source_text(glslang_program_t* program, glslang_stage_t stage, const char* text, size_t len); +GLSLANG_EXPORT void glslang_program_set_source_file(glslang_program_t* program, glslang_stage_t stage, const char* file); GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program); GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage); +GLSLANG_EXPORT void glslang_program_SPIRV_generate_with_options(glslang_program_t* program, glslang_stage_t stage, glslang_spv_options_t* spv_options); GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program); GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*); GLSLANG_EXPORT unsigned int* glslang_program_SPIRV_get_ptr(glslang_program_t* program); From c1ae2f33b5bc22ec013c57c716b6ef438619edb0 Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Tue, 21 Jun 2022 17:33:57 -0600 Subject: [PATCH 349/365] Do not generate samplerBuffer for spirv1.6 and beyond This type was removed from spirv1.6. If samplerBuffer is specified in GLSL, generate textureBuffer. If samplerBuffer type is constructed, just return the buffer. Fixes #2956 --- SPIRV/GlslangToSpv.cpp | 20 +++++-- .../spv.1.6.samplerBuffer.frag.out | 43 +++++++++++++++ Test/baseResults/spv.1.6.separate.frag.out | 52 +++++++++++++++++++ Test/spv.1.6.samplerBuffer.frag | 11 ++++ Test/spv.1.6.separate.frag | 14 +++++ gtests/Spv.FromFile.cpp | 2 + 6 files changed, 137 insertions(+), 5 deletions(-) create mode 100644 Test/baseResults/spv.1.6.samplerBuffer.frag.out create mode 100644 Test/baseResults/spv.1.6.separate.frag.out create mode 100644 Test/spv.1.6.samplerBuffer.frag create mode 100644 Test/spv.1.6.separate.frag diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 63547692b7..3c869bc96b 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -2936,9 +2936,17 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt std::vector arguments; translateArguments(*node, arguments, lvalueCoherentFlags); spv::Id constructed; - if (node->getOp() == glslang::EOpConstructTextureSampler) - constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments); - else if (node->getOp() == glslang::EOpConstructStruct || + if (node->getOp() == glslang::EOpConstructTextureSampler) { + const glslang::TType& texType = node->getSequence()[0]->getAsTyped()->getType(); + if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6 && + texType.getSampler().isBuffer()) { + // SamplerBuffer is not supported in spirv1.6 so + // `samplerBuffer(textureBuffer, sampler)` is a no-op + // and textureBuffer is the result going forward + constructed = arguments[0]; + } else + constructed = builder.createOp(spv::OpSampledImage, resultType(), arguments); + } else if (node->getOp() == glslang::EOpConstructStruct || node->getOp() == glslang::EOpConstructCooperativeMatrix || node->getType().isArray()) { std::vector constituents; @@ -4173,8 +4181,10 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty spvType = builder.makeImageType(getSampledType(sampler), TranslateDimensionality(sampler), sampler.isShadow(), sampler.isArrayed(), sampler.isMultiSample(), sampler.isImageClass() ? 2 : 1, TranslateImageFormat(type)); - if (sampler.isCombined()) { - // already has both image and sampler, make the combined type + if (sampler.isCombined() && + (!sampler.isBuffer() || glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_6)) { + // Already has both image and sampler, make the combined type. Only combine sampler to + // buffer if before SPIR-V 1.6. spvType = builder.makeSampledImageType(spvType); } } diff --git a/Test/baseResults/spv.1.6.samplerBuffer.frag.out b/Test/baseResults/spv.1.6.samplerBuffer.frag.out new file mode 100644 index 0000000000..8a0275f940 --- /dev/null +++ b/Test/baseResults/spv.1.6.samplerBuffer.frag.out @@ -0,0 +1,43 @@ +spv.1.6.samplerBuffer.frag +// Module Version 10600 +// Generated by (magic number): 8000a +// Id's are bound by 23 + + Capability Shader + Capability SampledBuffer + Capability ImageQuery + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 13 + ExecutionMode 4 OriginUpperLeft + Source GLSL 140 + Name 4 "main" + Name 9 "o" + Name 13 "sampB" + Decorate 9(o) Location 0 + Decorate 13(sampB) DescriptorSet 0 + Decorate 13(sampB) Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeVector 6(float) 4 + 8: TypePointer Output 7(fvec4) + 9(o): 8(ptr) Variable Output + 10: TypeInt 32 1 + 11: TypeImage 10(int) Buffer sampled format:Unknown + 12: TypePointer UniformConstant 11 + 13(sampB): 12(ptr) Variable UniformConstant + 17: 6(float) Constant 1120403456 + 19: TypeInt 32 0 + 20: 19(int) Constant 3 + 21: TypePointer Output 6(float) + 4(main): 2 Function None 3 + 5: Label + 14: 11 Load 13(sampB) + 15: 10(int) ImageQuerySize 14 + 16: 6(float) ConvertSToF 15 + 18: 6(float) FDiv 16 17 + 22: 21(ptr) AccessChain 9(o) 20 + Store 22 18 + Return + FunctionEnd diff --git a/Test/baseResults/spv.1.6.separate.frag.out b/Test/baseResults/spv.1.6.separate.frag.out new file mode 100644 index 0000000000..e15655e1cd --- /dev/null +++ b/Test/baseResults/spv.1.6.separate.frag.out @@ -0,0 +1,52 @@ +spv.1.6.separate.frag +// Module Version 10600 +// Generated by (magic number): 8000a +// Id's are bound by 27 + + Capability Shader + Capability SampledBuffer + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 9 13 18 24 + ExecutionMode 4 OriginUpperLeft + Source GLSL 400 + Name 4 "main" + Name 9 "texBuffer" + Name 13 "s" + Name 18 "itexBuffer" + Name 24 "utexBuffer" + Decorate 9(texBuffer) DescriptorSet 0 + Decorate 9(texBuffer) Binding 1 + Decorate 13(s) DescriptorSet 0 + Decorate 13(s) Binding 0 + Decorate 18(itexBuffer) DescriptorSet 0 + Decorate 18(itexBuffer) Binding 2 + Decorate 24(utexBuffer) DescriptorSet 0 + Decorate 24(utexBuffer) Binding 3 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypeImage 6(float) Buffer sampled format:Unknown + 8: TypePointer UniformConstant 7 + 9(texBuffer): 8(ptr) Variable UniformConstant + 11: TypeSampler + 12: TypePointer UniformConstant 11 + 13(s): 12(ptr) Variable UniformConstant + 15: TypeInt 32 1 + 16: TypeImage 15(int) Buffer sampled format:Unknown + 17: TypePointer UniformConstant 16 + 18(itexBuffer): 17(ptr) Variable UniformConstant + 21: TypeInt 32 0 + 22: TypeImage 21(int) Buffer sampled format:Unknown + 23: TypePointer UniformConstant 22 + 24(utexBuffer): 23(ptr) Variable UniformConstant + 4(main): 2 Function None 3 + 5: Label + 10: 7 Load 9(texBuffer) + 14: 11 Load 13(s) + 19: 16 Load 18(itexBuffer) + 20: 11 Load 13(s) + 25: 22 Load 24(utexBuffer) + 26: 11 Load 13(s) + Return + FunctionEnd diff --git a/Test/spv.1.6.samplerBuffer.frag b/Test/spv.1.6.samplerBuffer.frag new file mode 100644 index 0000000000..d12ff3df84 --- /dev/null +++ b/Test/spv.1.6.samplerBuffer.frag @@ -0,0 +1,11 @@ +#version 140 + +out vec4 o; + +uniform isamplerBuffer sampB; + +void main() +{ + o.w = float(textureSize(sampB)) / 100.0; +} + diff --git a/Test/spv.1.6.separate.frag b/Test/spv.1.6.separate.frag new file mode 100644 index 0000000000..3e51be4820 --- /dev/null +++ b/Test/spv.1.6.separate.frag @@ -0,0 +1,14 @@ +#version 400 + +uniform sampler s; + +uniform textureBuffer texBuffer; +uniform itextureBuffer itexBuffer; +uniform utextureBuffer utexBuffer; + +void main() +{ + samplerBuffer (texBuffer, s); + isamplerBuffer (itexBuffer, s); + usamplerBuffer (utexBuffer, s); +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index f8bed532cf..300d6642fd 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -639,6 +639,8 @@ INSTANTIATE_TEST_SUITE_P( "spv.1.6.conditionalDiscard.frag", "spv.1.6.helperInvocation.frag", "spv.1.6.specConstant.comp", + "spv.1.6.samplerBuffer.frag", + "spv.1.6.separate.frag", })), FileNameAsCustomTestSuffix ); From 8e5f1ac954d0edf83092f5d4a97bb99fd8076c5c Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Thu, 7 Jul 2022 11:40:02 -0600 Subject: [PATCH 350/365] Fix getEnhancedMsgs to work when HLSL not enabled Fixes #2969 --- glslang/MachineIndependent/localintermediate.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index 581e9aa2e4..d3e86f9e1e 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -480,7 +480,7 @@ class TIntermediate { { enhancedMsgs = true; } - bool getEnhancedMsgs() const { return enhancedMsgs && source == EShSourceGlsl; } + bool getEnhancedMsgs() const { return enhancedMsgs && getSource() == EShSourceGlsl; } #ifdef ENABLE_HLSL void setSource(EShSource s) { source = s; } From 6fdf03e4d1a6c2e9e0d8c69b122ff433cfe82225 Mon Sep 17 00:00:00 2001 From: Niklas Haas Date: Tue, 12 Jul 2022 16:59:22 +0200 Subject: [PATCH 351/365] Fix version check macros These were defined backwards to the usual convention. #if GLSLANG_VERSION_GREATER_THAN(11, 10, 0) This reads as "if glslang version is greater than 11.10.0" to any reasonable sane programmer, and should therefore expand to "glslang_version > macro_argument". Yet the check it references was actually written as "macro_argument > glslang_version", thus expressing the completely opposite condition of "if glslang version is *less than* 11.10.0". This is definitely backwards and extremely, dangerously surprising behavior to any programmer familiar with such version macros. I'm not sure if anybody actually ever used them. I certainly didn't, on account of them being backwards. I could not find a single reference to them on GitHub (other than in copies of this header) - every project I found just used the GLSLANG_VERSION_MAJOR etc. macros directly. --- build_info.h.tmpl | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/build_info.h.tmpl b/build_info.h.tmpl index 5b5e9e62c7..60cb5bbeae 100644 --- a/build_info.h.tmpl +++ b/build_info.h.tmpl @@ -40,23 +40,23 @@ #define GLSLANG_VERSION_FLAVOR "@flavor@" #define GLSLANG_VERSION_GREATER_THAN(major, minor, patch) \ - (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ - (((minor) > GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \ - ((patch) > GLSLANG_VERSION_PATCH))))) + ((GLSLANG_VERSION_MAJOR) > (major) || ((major) == GLSLANG_VERSION_MAJOR && \ + ((GLSLANG_VERSION_MINOR) > (minor) || ((minor) == GLSLANG_VERSION_MINOR && \ + (GLSLANG_VERSION_PATCH) > (patch))))) #define GLSLANG_VERSION_GREATER_OR_EQUAL_TO(major, minor, patch) \ - (((major) > GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ - (((minor) > GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \ - ((patch) >= GLSLANG_VERSION_PATCH))))) + ((GLSLANG_VERSION_MAJOR) > (major) || ((major) == GLSLANG_VERSION_MAJOR && \ + ((GLSLANG_VERSION_MINOR) > (minor) || ((minor) == GLSLANG_VERSION_MINOR && \ + (GLSLANG_VERSION_PATCH >= (patch)))))) #define GLSLANG_VERSION_LESS_THAN(major, minor, patch) \ - (((major) < GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ - (((minor) < GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \ - ((patch) < GLSLANG_VERSION_PATCH))))) + ((GLSLANG_VERSION_MAJOR) < (major) || ((major) == GLSLANG_VERSION_MAJOR && \ + ((GLSLANG_VERSION_MINOR) < (minor) || ((minor) == GLSLANG_VERSION_MINOR && \ + (GLSLANG_VERSION_PATCH) < (patch))))) #define GLSLANG_VERSION_LESS_OR_EQUAL_TO(major, minor, patch) \ - (((major) < GLSLANG_VERSION_MAJOR) || ((major) == GLSLANG_VERSION_MAJOR && \ - (((minor) < GLSLANG_VERSION_MINOR) || ((minor) == GLSLANG_VERSION_MINOR && \ - ((patch) <= GLSLANG_VERSION_PATCH))))) + ((GLSLANG_VERSION_MAJOR) < (major) || ((major) == GLSLANG_VERSION_MAJOR && \ + ((GLSLANG_VERSION_MINOR) < (minor) || ((minor) == GLSLANG_VERSION_MINOR && \ + (GLSLANG_VERSION_PATCH <= (patch)))))) #endif // GLSLANG_BUILD_INFO From 8bdc3d4d31aaecf5d48d101eca51ae9df2a1c5f8 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Thu, 14 Jul 2022 11:44:52 -0600 Subject: [PATCH 352/365] Emit Int64Atomics for imageAtomicStore This covers a corner case wherein imageAtomicStore is used exclusively. The proxy type for imageAtomicStore is inferred from the image type. Fix #2975. --- SPIRV/GlslangToSpv.cpp | 4 +- Test/baseResults/spv.imageAtomic64.comp.out | 58 +++++++++++++++++++++ Test/spv.imageAtomic64.comp | 12 +++++ gtests/Spv.FromFile.cpp | 1 + 4 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 Test/baseResults/spv.imageAtomic64.comp.out create mode 100644 Test/spv.imageAtomic64.comp diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 3c869bc96b..b61a6420aa 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -5581,10 +5581,12 @@ spv::Id TGlslangToSpvTraverser::createImageTextureFunctionCall(glslang::TIntermO operands.push_back(sample); spv::Id resultTypeId; + glslang::TBasicType typeProxy = node->getBasicType(); // imageAtomicStore has a void return type so base the pointer type on // the type of the value operand. if (node->getOp() == glslang::EOpImageAtomicStore) { resultTypeId = builder.makePointer(spv::StorageClassImage, builder.getTypeId(*opIt)); + typeProxy = node->getAsAggregate()->getSequence()[0]->getAsTyped()->getType().getSampler().type; } else { resultTypeId = builder.makePointer(spv::StorageClassImage, resultType()); } @@ -5598,7 +5600,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, typeProxy, lvalueCoherentFlags); } } diff --git a/Test/baseResults/spv.imageAtomic64.comp.out b/Test/baseResults/spv.imageAtomic64.comp.out new file mode 100644 index 0000000000..0b1a0939c7 --- /dev/null +++ b/Test/baseResults/spv.imageAtomic64.comp.out @@ -0,0 +1,58 @@ +spv.imageAtomic64.comp +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 28 + + Capability Shader + Capability Int64 + Capability Int64Atomics + Capability Int64ImageEXT + Extension "SPV_EXT_shader_image_int64" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 450 + SourceExtension "GL_EXT_shader_explicit_arithmetic_types_int64" + SourceExtension "GL_EXT_shader_image_int64" + SourceExtension "GL_KHR_memory_scope_semantics" + Name 4 "main" + Name 9 "z" + Name 14 "ssbo" + MemberName 14(ssbo) 0 "y" + Name 16 "" + Decorate 9(z) DescriptorSet 0 + Decorate 9(z) Binding 1 + MemberDecorate 14(ssbo) 0 Offset 0 + Decorate 14(ssbo) BufferBlock + Decorate 16 DescriptorSet 0 + Decorate 16 Binding 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeInt 64 0 + 7: TypeImage 6(int64_t) 2D nonsampled format:R64ui + 8: TypePointer UniformConstant 7 + 9(z): 8(ptr) Variable UniformConstant + 10: TypeInt 32 1 + 11: TypeVector 10(int) 2 + 12: 10(int) Constant 1 + 13: 11(ivec2) ConstantComposite 12 12 + 14(ssbo): TypeStruct 6(int64_t) + 15: TypePointer Uniform 14(ssbo) + 16: 15(ptr) Variable Uniform + 17: 10(int) Constant 0 + 18: TypePointer Uniform 6(int64_t) + 21: 10(int) Constant 2048 + 22: TypeInt 32 0 + 23: 22(int) Constant 0 + 24: TypePointer Image 6(int64_t) + 26: 22(int) Constant 1 + 27: 22(int) Constant 2048 + 4(main): 2 Function None 3 + 5: Label + 19: 18(ptr) AccessChain 16 17 + 20: 6(int64_t) Load 19 + 25: 24(ptr) ImageTexelPointer 9(z) 13 23 + AtomicStore 25 12 27 20 + Return + FunctionEnd diff --git a/Test/spv.imageAtomic64.comp b/Test/spv.imageAtomic64.comp new file mode 100644 index 0000000000..f09abf777e --- /dev/null +++ b/Test/spv.imageAtomic64.comp @@ -0,0 +1,12 @@ +#version 450 +#extension GL_EXT_shader_explicit_arithmetic_types_int64 : enable +#extension GL_EXT_shader_image_int64 : enable +#extension GL_KHR_memory_scope_semantics : enable + +layout(set = 0, binding = 0) buffer ssbo { uint64_t y; }; +layout(set = 0, binding = 1, r64ui) uniform u64image2D z; + +void main() { + // Test imageAtomicStore exclusively. Do NOT add other atomic operations to this test. + imageAtomicStore(z, ivec2(1, 1), y, gl_ScopeDevice, gl_StorageSemanticsImage, gl_SemanticsRelaxed); +} diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 300d6642fd..571025685c 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -444,6 +444,7 @@ INSTANTIATE_TEST_SUITE_P( "spv.textureBuffer.vert", "spv.image.frag", "spv.imageAtomic64.frag", + "spv.imageAtomic64.comp", "spv.types.frag", "spv.uint.frag", "spv.uniformArray.frag", From 070863af690bcc160da6e49d913f5d2e45bf095c Mon Sep 17 00:00:00 2001 From: dwang102 Date: Fri, 15 Jul 2022 14:36:03 +0800 Subject: [PATCH 353/365] Add SPV_AMD_shader_early_and_late_fragment_tests --- SPIRV/GLSL.ext.KHR.h | 1 + SPIRV/GlslangToSpv.cpp | 23 ++++++++++ SPIRV/doc.cpp | 44 ++++++++++--------- SPIRV/spirv.hpp | 7 +++ .../spv.earlyAndlateFragmentTests.frag.out | 41 +++++++++++++++++ .../spv.shaderStencilExport.frag.out | 1 + Test/spv.earlyAndlateFragmentTests.frag | 12 +++++ glslang/Include/BaseTypes.h | 2 + glslang/Include/Types.h | 35 +++++++++++++++ glslang/MachineIndependent/Initialize.cpp | 1 + glslang/MachineIndependent/ParseHelper.cpp | 44 ++++++++++++++++++- glslang/MachineIndependent/Versions.cpp | 1 + glslang/MachineIndependent/Versions.h | 1 + .../MachineIndependent/localintermediate.h | 18 +++++++- 14 files changed, 208 insertions(+), 23 deletions(-) create mode 100644 Test/baseResults/spv.earlyAndlateFragmentTests.frag.out create mode 100644 Test/spv.earlyAndlateFragmentTests.frag diff --git a/SPIRV/GLSL.ext.KHR.h b/SPIRV/GLSL.ext.KHR.h index 5c89480e3a..d5c670f0e1 100644 --- a/SPIRV/GLSL.ext.KHR.h +++ b/SPIRV/GLSL.ext.KHR.h @@ -53,5 +53,6 @@ static const char* const E_SPV_KHR_terminate_invocation = "SPV_KHR_termi static const char* const E_SPV_KHR_workgroup_memory_explicit_layout = "SPV_KHR_workgroup_memory_explicit_layout"; static const char* const E_SPV_KHR_subgroup_uniform_control_flow = "SPV_KHR_subgroup_uniform_control_flow"; static const char* const E_SPV_KHR_fragment_shader_barycentric = "SPV_KHR_fragment_shader_barycentric"; +static const char* const E_SPV_AMD_shader_early_and_late_fragment_tests = "SPV_AMD_shader_early_and_late_fragment_tests"; #endif // #ifndef GLSLextKHR_H diff --git a/SPIRV/GlslangToSpv.cpp b/SPIRV/GlslangToSpv.cpp index 3c869bc96b..307ee28e3e 100644 --- a/SPIRV/GlslangToSpv.cpp +++ b/SPIRV/GlslangToSpv.cpp @@ -1623,6 +1623,12 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, if (glslangIntermediate->getEarlyFragmentTests()) builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyFragmentTests); + if (glslangIntermediate->getEarlyAndLateFragmentTestsAMD()) + { + builder.addExecutionMode(shaderEntry, spv::ExecutionModeEarlyAndLateFragmentTestsAMD); + builder.addExtension(spv::E_SPV_AMD_shader_early_and_late_fragment_tests); + } + if (glslangIntermediate->getPostDepthCoverage()) { builder.addCapability(spv::CapabilitySampleMaskPostDepthCoverage); builder.addExecutionMode(shaderEntry, spv::ExecutionModePostDepthCoverage); @@ -1632,6 +1638,9 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, if (glslangIntermediate->isDepthReplacing()) builder.addExecutionMode(shaderEntry, spv::ExecutionModeDepthReplacing); + if (glslangIntermediate->isStencilReplacing()) + builder.addExecutionMode(shaderEntry, spv::ExecutionModeStencilRefReplacingEXT); + #ifndef GLSLANG_WEB switch(glslangIntermediate->getDepth()) { @@ -1640,6 +1649,20 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion, case glslang::EldUnchanged: mode = spv::ExecutionModeDepthUnchanged; break; default: mode = spv::ExecutionModeMax; break; } + + if (mode != spv::ExecutionModeMax) + builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); + + switch (glslangIntermediate->getStencil()) { + case glslang::ElsRefUnchangedFrontAMD: mode = spv::ExecutionModeStencilRefUnchangedFrontAMD; break; + case glslang::ElsRefGreaterFrontAMD: mode = spv::ExecutionModeStencilRefGreaterFrontAMD; break; + case glslang::ElsRefLessFrontAMD: mode = spv::ExecutionModeStencilRefLessFrontAMD; break; + case glslang::ElsRefUnchangedBackAMD: mode = spv::ExecutionModeStencilRefUnchangedBackAMD; break; + case glslang::ElsRefGreaterBackAMD: mode = spv::ExecutionModeStencilRefGreaterBackAMD; break; + case glslang::ElsRefLessBackAMD: mode = spv::ExecutionModeStencilRefLessBackAMD; break; + default: mode = spv::ExecutionModeMax; break; + } + if (mode != spv::ExecutionModeMax) builder.addExecutionMode(shaderEntry, (spv::ExecutionMode)mode); switch (glslangIntermediate->getInterlockOrdering()) { diff --git a/SPIRV/doc.cpp b/SPIRV/doc.cpp index 1ba92a8798..9cc26541dc 100644 --- a/SPIRV/doc.cpp +++ b/SPIRV/doc.cpp @@ -173,28 +173,32 @@ const char* ExecutionModeString(int mode) case 31: return "ContractionOff"; case 32: return "Bad"; - case ExecutionModeInitializer: return "Initializer"; - case ExecutionModeFinalizer: return "Finalizer"; - case ExecutionModeSubgroupSize: return "SubgroupSize"; - case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; - case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; - case ExecutionModeLocalSizeId: return "LocalSizeId"; - case ExecutionModeLocalSizeHintId: return "LocalSizeHintId"; - - case ExecutionModePostDepthCoverage: return "PostDepthCoverage"; - case ExecutionModeDenormPreserve: return "DenormPreserve"; - case ExecutionModeDenormFlushToZero: return "DenormFlushToZero"; - case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; - case ExecutionModeRoundingModeRTE: return "RoundingModeRTE"; - case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; - case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; + case ExecutionModeInitializer: return "Initializer"; + case ExecutionModeFinalizer: return "Finalizer"; + case ExecutionModeSubgroupSize: return "SubgroupSize"; + case ExecutionModeSubgroupsPerWorkgroup: return "SubgroupsPerWorkgroup"; + case ExecutionModeSubgroupsPerWorkgroupId: return "SubgroupsPerWorkgroupId"; + case ExecutionModeLocalSizeId: return "LocalSizeId"; + case ExecutionModeLocalSizeHintId: return "LocalSizeHintId"; + + case ExecutionModePostDepthCoverage: return "PostDepthCoverage"; + case ExecutionModeDenormPreserve: return "DenormPreserve"; + case ExecutionModeDenormFlushToZero: return "DenormFlushToZero"; + case ExecutionModeSignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve"; + case ExecutionModeRoundingModeRTE: return "RoundingModeRTE"; + case ExecutionModeRoundingModeRTZ: return "RoundingModeRTZ"; + case ExecutionModeEarlyAndLateFragmentTestsAMD: return "EarlyAndLateFragmentTestsAMD"; + case ExecutionModeStencilRefUnchangedFrontAMD: return "StencilRefUnchangedFrontAMD"; + case ExecutionModeStencilRefLessFrontAMD: return "StencilRefLessFrontAMD"; + case ExecutionModeStencilRefGreaterBackAMD: return "StencilRefGreaterBackAMD"; + case ExecutionModeStencilRefReplacingEXT: return "StencilRefReplacingEXT"; case ExecutionModeSubgroupUniformControlFlowKHR: return "SubgroupUniformControlFlow"; - case ExecutionModeOutputLinesNV: return "OutputLinesNV"; - case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV"; - case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV"; - case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV"; - case ExecutionModeDerivativeGroupLinearNV: return "DerivativeGroupLinearNV"; + case ExecutionModeOutputLinesNV: return "OutputLinesNV"; + case ExecutionModeOutputPrimitivesNV: return "OutputPrimitivesNV"; + case ExecutionModeOutputTrianglesNV: return "OutputTrianglesNV"; + case ExecutionModeDerivativeGroupQuadsNV: return "DerivativeGroupQuadsNV"; + case ExecutionModeDerivativeGroupLinearNV: return "DerivativeGroupLinearNV"; case ExecutionModePixelInterlockOrderedEXT: return "PixelInterlockOrderedEXT"; case ExecutionModePixelInterlockUnorderedEXT: return "PixelInterlockUnorderedEXT"; diff --git a/SPIRV/spirv.hpp b/SPIRV/spirv.hpp index 806b4ddce5..9afd8a90be 100644 --- a/SPIRV/spirv.hpp +++ b/SPIRV/spirv.hpp @@ -158,7 +158,14 @@ enum ExecutionMode { ExecutionModeSignedZeroInfNanPreserve = 4461, ExecutionModeRoundingModeRTE = 4462, ExecutionModeRoundingModeRTZ = 4463, + ExecutionModeEarlyAndLateFragmentTestsAMD = 5017, ExecutionModeStencilRefReplacingEXT = 5027, + ExecutionModeStencilRefUnchangedFrontAMD = 5079, + ExecutionModeStencilRefGreaterFrontAMD = 5080, + ExecutionModeStencilRefLessFrontAMD = 5081, + ExecutionModeStencilRefUnchangedBackAMD = 5082, + ExecutionModeStencilRefGreaterBackAMD = 5083, + ExecutionModeStencilRefLessBackAMD = 5084, ExecutionModeOutputLinesNV = 5269, ExecutionModeOutputPrimitivesNV = 5270, ExecutionModeDerivativeGroupQuadsNV = 5289, diff --git a/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out b/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out new file mode 100644 index 0000000000..e5b9a4273a --- /dev/null +++ b/Test/baseResults/spv.earlyAndlateFragmentTests.frag.out @@ -0,0 +1,41 @@ +spv.earlyAndlateFragmentTests.frag +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 16 + + Capability Shader + Extension "SPV_AMD_shader_early_and_late_fragment_tests" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint Fragment 4 "main" 8 11 + ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 EarlyAndLateFragmentTestsAMD + ExecutionMode 4 DepthReplacing + ExecutionMode 4 DepthLess + Source GLSL 450 + SourceExtension "GL_ARB_fragment_shader_interlock" + SourceExtension "GL_ARB_shader_stencil_export" + SourceExtension "GL_EXT_fragment_shading_rate" + Name 4 "main" + Name 8 "gl_FragDepth" + Name 11 "instanceIndex" + Decorate 8(gl_FragDepth) BuiltIn FragDepth + Decorate 11(instanceIndex) Flat + Decorate 11(instanceIndex) Location 0 + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeFloat 32 + 7: TypePointer Output 6(float) + 8(gl_FragDepth): 7(ptr) Variable Output + 9: TypeInt 32 1 + 10: TypePointer Input 9(int) +11(instanceIndex): 10(ptr) Variable Input + 14: 6(float) Constant 1117913088 + 4(main): 2 Function None 3 + 5: Label + 12: 9(int) Load 11(instanceIndex) + 13: 6(float) ConvertSToF 12 + 15: 6(float) FDiv 13 14 + Store 8(gl_FragDepth) 15 + Return + FunctionEnd diff --git a/Test/baseResults/spv.shaderStencilExport.frag.out b/Test/baseResults/spv.shaderStencilExport.frag.out index f73349c920..9bb217898f 100644 --- a/Test/baseResults/spv.shaderStencilExport.frag.out +++ b/Test/baseResults/spv.shaderStencilExport.frag.out @@ -10,6 +10,7 @@ spv.shaderStencilExport.frag MemoryModel Logical GLSL450 EntryPoint Fragment 4 "main" 8 ExecutionMode 4 OriginUpperLeft + ExecutionMode 4 StencilRefReplacingEXT Source GLSL 450 SourceExtension "GL_ARB_shader_stencil_export" Name 4 "main" diff --git a/Test/spv.earlyAndlateFragmentTests.frag b/Test/spv.earlyAndlateFragmentTests.frag new file mode 100644 index 0000000000..ef3b4af60a --- /dev/null +++ b/Test/spv.earlyAndlateFragmentTests.frag @@ -0,0 +1,12 @@ +#version 450 core +#extension GL_EXT_fragment_shading_rate : enable +#extension GL_ARB_shader_stencil_export : enable +#extension GL_ARB_fragment_shader_interlock : enable +#extension GL_AMD_shader_early_and_late_fragment_tests : enable +layout(location = 0) flat in int instanceIndex; +layout(early_and_late_fragment_tests_amd) in; +layout(depth_less) out float gl_FragDepth; +void main() +{ + gl_FragDepth = float(instanceIndex) / float(81); +} diff --git a/glslang/Include/BaseTypes.h b/glslang/Include/BaseTypes.h index 3eec5973b4..6a429fd441 100644 --- a/glslang/Include/BaseTypes.h +++ b/glslang/Include/BaseTypes.h @@ -128,6 +128,7 @@ enum TStorageQualifier { // built-ins written by fragment shader EvqFragColor, EvqFragDepth, + EvqFragStencil, // end of list EvqLast @@ -353,6 +354,7 @@ __inline const char* GetStorageQualifierString(TStorageQualifier q) case EvqPointCoord: return "gl_PointCoord"; break; case EvqFragColor: return "fragColor"; break; case EvqFragDepth: return "gl_FragDepth"; break; + case EvqFragStencil: return "gl_FragStencilRefARB"; break; case EvqPayload: return "rayPayloadNV"; break; case EvqPayloadIn: return "rayPayloadInNV"; break; case EvqHitAttr: return "hitAttributeNV"; break; diff --git a/glslang/Include/Types.h b/glslang/Include/Types.h index 682d124cc9..93909a30b9 100644 --- a/glslang/Include/Types.h +++ b/glslang/Include/Types.h @@ -443,6 +443,18 @@ enum TLayoutDepth { EldCount }; +enum TLayoutStencil { + ElsNone, + ElsRefUnchangedFrontAMD, + ElsRefGreaterFrontAMD, + ElsRefLessFrontAMD, + ElsRefUnchangedBackAMD, + ElsRefGreaterBackAMD, + ElsRefLessBackAMD, + + ElsCount +}; + enum TBlendEquationShift { // No 'EBlendNone': // These are used as bit-shift amounts. A mask of such shifts will have type 'int', @@ -705,6 +717,7 @@ class TQualifier { case EvqVaryingOut: case EvqFragColor: case EvqFragDepth: + case EvqFragStencil: return true; default: return false; @@ -772,6 +785,7 @@ class TQualifier { case EvqVaryingOut: case EvqFragColor: case EvqFragDepth: + case EvqFragStencil: return true; default: return false; @@ -1239,6 +1253,18 @@ class TQualifier { default: return "none"; } } + static const char* getLayoutStencilString(TLayoutStencil s) + { + switch (s) { + case ElsRefUnchangedFrontAMD: return "stencil_ref_unchanged_front_amd"; + case ElsRefGreaterFrontAMD: return "stencil_ref_greater_front_amd"; + case ElsRefLessFrontAMD: return "stencil_ref_less_front_amd"; + case ElsRefUnchangedBackAMD: return "stencil_ref_unchanged_back_amd"; + case ElsRefGreaterBackAMD: return "stencil_ref_greater_back_amd"; + case ElsRefLessBackAMD: return "stencil_ref_less_back_amd"; + default: return "none"; + } + } static const char* getBlendEquationString(TBlendEquationShift e) { switch (e) { @@ -1336,7 +1362,9 @@ struct TShaderQualifiers { #ifndef GLSLANG_WEB bool earlyFragmentTests; // fragment input bool postDepthCoverage; // fragment input + bool earlyAndLateFragmentTestsAMD; //fragment input TLayoutDepth layoutDepth; + TLayoutStencil layoutStencil; bool blendEquation; // true if any blend equation was specified int numViews; // multiview extenstions TInterlockOrdering interlockOrdering; @@ -1346,6 +1374,7 @@ struct TShaderQualifiers { int primitives; // mesh shader "max_primitives"DerivativeGroupLinear; // true if layout derivative_group_linearNV set bool layoutPrimitiveCulling; // true if layout primitive_culling set TLayoutDepth getDepth() const { return layoutDepth; } + TLayoutStencil getStencil() const { return layoutStencil; } #else TLayoutDepth getDepth() const { return EldNone; } #endif @@ -1371,8 +1400,10 @@ struct TShaderQualifiers { localSizeSpecId[2] = TQualifier::layoutNotSet; #ifndef GLSLANG_WEB earlyFragmentTests = false; + earlyAndLateFragmentTestsAMD = false; postDepthCoverage = false; layoutDepth = EldNone; + layoutStencil = ElsNone; blendEquation = false; numViews = TQualifier::layoutNotSet; layoutOverrideCoverage = false; @@ -1424,10 +1455,14 @@ struct TShaderQualifiers { #ifndef GLSLANG_WEB if (src.earlyFragmentTests) earlyFragmentTests = true; + if (src.earlyAndLateFragmentTestsAMD) + earlyAndLateFragmentTestsAMD = true; if (src.postDepthCoverage) postDepthCoverage = true; if (src.layoutDepth) layoutDepth = src.layoutDepth; + if (src.layoutStencil) + layoutStencil = src.layoutStencil; if (src.blendEquation) blendEquation = src.blendEquation; if (src.numViews != TQualifier::layoutNotSet) diff --git a/glslang/MachineIndependent/Initialize.cpp b/glslang/MachineIndependent/Initialize.cpp index b18b257525..ff3db7cd0f 100644 --- a/glslang/MachineIndependent/Initialize.cpp +++ b/glslang/MachineIndependent/Initialize.cpp @@ -8065,6 +8065,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion SpecialQualifier("gl_FragDepth", EvqFragDepth, EbvFragDepth, symbolTable); #ifndef GLSLANG_WEB SpecialQualifier("gl_FragDepthEXT", EvqFragDepth, EbvFragDepth, symbolTable); + SpecialQualifier("gl_FragStencilRefARB", EvqFragStencil, EbvFragStencilRef, symbolTable); SpecialQualifier("gl_HelperInvocation", EvqVaryingIn, EbvHelperInvocation, symbolTable); BuiltInVariable("gl_ClipDistance", EbvClipDistance, symbolTable); diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 45a72d9333..143d62142e 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -2988,6 +2988,12 @@ bool TParseContext::lValueErrorCheck(const TSourceLoc& loc, const char* op, TInt if (isEsProfile() && intermediate.getEarlyFragmentTests()) message = "can't modify gl_FragDepth if using early_fragment_tests"; break; + case EvqFragStencil: + intermediate.setStencilReplacing(); + // "In addition, it is an error to statically write to gl_FragDepth in the fragment shader." + if (isEsProfile() && intermediate.getEarlyFragmentTests()) + message = "can't modify EvqFragStencil if using early_fragment_tests"; + break; default: break; @@ -4709,10 +4715,22 @@ TSymbol* TParseContext::redeclareBuiltinVariable(const TSourceLoc& loc, const TS if (! intermediate.setDepth(publicType.layoutDepth)) error(loc, "all redeclarations must use the same depth layout on", "redeclaration", symbol->getName().c_str()); } + } else if (identifier == "gl_FragStencilRefARB") { + if (qualifier.nopersp != symbolQualifier.nopersp || qualifier.flat != symbolQualifier.flat || + qualifier.isMemory() || qualifier.isAuxiliary()) + error(loc, "can only change layout qualification of", "redeclaration", symbol->getName().c_str()); + if (qualifier.storage != EvqVaryingOut) + error(loc, "cannot change output storage qualification of", "redeclaration", symbol->getName().c_str()); + if (publicType.layoutStencil != ElsNone) { + if (intermediate.inIoAccessed("gl_FragStencilRefARB")) + error(loc, "cannot redeclare after use", "gl_FragStencilRefARB", ""); + if (!intermediate.setStencil(publicType.layoutStencil)) + error(loc, "all redeclarations must use the same stencil layout on", "redeclaration", + symbol->getName().c_str()); + } } else if ( - identifier == "gl_PrimitiveIndicesNV" || - identifier == "gl_FragStencilRefARB") { + identifier == "gl_PrimitiveIndicesNV") { if (qualifier.hasLayout()) error(loc, "cannot apply layout qualifier to", "redeclaration", symbol->getName().c_str()); if (qualifier.storage != EvqVaryingOut) @@ -5546,6 +5564,12 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi publicType.shaderQualifiers.earlyFragmentTests = true; return; } + if (id == "early_and_late_fragment_tests_amd") { + profileRequires(loc, ENoProfile | ECoreProfile | ECompatibilityProfile, 420, E_GL_AMD_shader_early_and_late_fragment_tests, "early_and_late_fragment_tests_amd"); + profileRequires(loc, EEsProfile, 310, nullptr, "early_and_late_fragment_tests_amd"); + publicType.shaderQualifiers.earlyAndLateFragmentTestsAMD = true; + return; + } if (id == "post_depth_coverage") { requireExtensions(loc, Num_post_depth_coverageEXTs, post_depth_coverageEXTs, "post depth coverage"); if (extensionTurnedOn(E_GL_ARB_post_depth_coverage)) { @@ -5562,6 +5586,14 @@ void TParseContext::setLayoutQualifier(const TSourceLoc& loc, TPublicType& publi return; } } + for (TLayoutStencil stencil = (TLayoutStencil)(ElsNone + 1); stencil < ElsCount; stencil = (TLayoutStencil)(stencil+1)) { + if (id == TQualifier::getLayoutStencilString(stencil)) { + requireProfile(loc, ECoreProfile | ECompatibilityProfile, "stencil layout qualifier"); + profileRequires(loc, ECoreProfile | ECompatibilityProfile, 420, nullptr, "stencil layout qualifier"); + publicType.shaderQualifiers.layoutStencil = stencil; + return; + } + } for (TInterlockOrdering order = (TInterlockOrdering)(EioNone + 1); order < EioCount; order = (TInterlockOrdering)(order+1)) { if (id == TQualifier::getInterlockOrderingString(order)) { requireProfile(loc, ECoreProfile | ECompatibilityProfile, "fragment shader interlock layout qualifier"); @@ -7259,6 +7291,8 @@ TIntermNode* TParseContext::declareVariable(const TSourceLoc& loc, TString& iden error(loc, "can only apply origin_upper_left and pixel_center_origin to gl_FragCoord", "layout qualifier", ""); if (identifier != "gl_FragDepth" && publicType.shaderQualifiers.getDepth() != EldNone) error(loc, "can only apply depth layout to gl_FragDepth", "layout qualifier", ""); + if (identifier != "gl_FragStencilRefARB" && publicType.shaderQualifiers.getStencil() != ElsNone) + error(loc, "can only apply depth layout to gl_FragStencilRefARB", "layout qualifier", ""); // Check for redeclaration of built-ins and/or attempting to declare a reserved name TSymbol* symbol = redeclareBuiltinVariable(loc, identifier, type.getQualifier(), publicType.shaderQualifiers); @@ -9091,6 +9125,12 @@ void TParseContext::updateStandaloneQualifierDefaults(const TSourceLoc& loc, con else error(loc, "can only apply to 'in'", "early_fragment_tests", ""); } + if (publicType.shaderQualifiers.earlyAndLateFragmentTestsAMD) { + if (publicType.qualifier.storage == EvqVaryingIn) + intermediate.setEarlyAndLateFragmentTestsAMD(); + else + error(loc, "can only apply to 'in'", "early_and_late_fragment_tests_amd", ""); + } if (publicType.shaderQualifiers.postDepthCoverage) { if (publicType.qualifier.storage == EvqVaryingIn) intermediate.setPostDepthCoverage(); diff --git a/glslang/MachineIndependent/Versions.cpp b/glslang/MachineIndependent/Versions.cpp index 52c1e1ccd1..e24d5c5451 100644 --- a/glslang/MachineIndependent/Versions.cpp +++ b/glslang/MachineIndependent/Versions.cpp @@ -275,6 +275,7 @@ void TParseVersions::initializeExtensionBehavior() extensionBehavior[E_GL_AMD_shader_image_load_store_lod] = EBhDisable; extensionBehavior[E_GL_AMD_shader_fragment_mask] = EBhDisable; extensionBehavior[E_GL_AMD_gpu_shader_half_float_fetch] = EBhDisable; + extensionBehavior[E_GL_AMD_shader_early_and_late_fragment_tests] = EBhDisable; extensionBehavior[E_GL_INTEL_shader_integer_functions2] = EBhDisable; diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index c411f5b62e..6817cff2ed 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -238,6 +238,7 @@ const char* const E_GL_AMD_gpu_shader_int16 = "GL_AMD_gpu_sh const char* const E_GL_AMD_shader_image_load_store_lod = "GL_AMD_shader_image_load_store_lod"; const char* const E_GL_AMD_shader_fragment_mask = "GL_AMD_shader_fragment_mask"; const char* const E_GL_AMD_gpu_shader_half_float_fetch = "GL_AMD_gpu_shader_half_float_fetch"; +const char* const E_GL_AMD_shader_early_and_late_fragment_tests = "GL_AMD_shader_early_and_late_fragment_tests"; const char* const E_GL_INTEL_shader_integer_functions2 = "GL_INTEL_shader_integer_functions2"; diff --git a/glslang/MachineIndependent/localintermediate.h b/glslang/MachineIndependent/localintermediate.h index d3e86f9e1e..ddeaa3530e 100644 --- a/glslang/MachineIndependent/localintermediate.h +++ b/glslang/MachineIndependent/localintermediate.h @@ -296,6 +296,7 @@ class TIntermediate { invariantAll(false), nanMinMaxClamp(false), depthReplacing(false), + stencilReplacing(false), uniqueId(0), globalUniformBlockName(""), atomicCounterBlockName(""), @@ -311,7 +312,7 @@ class TIntermediate { inputPrimitive(ElgNone), outputPrimitive(ElgNone), pixelCenterInteger(false), originUpperLeft(false),texCoordBuiltinRedeclared(false), vertexSpacing(EvsNone), vertexOrder(EvoNone), interlockOrdering(EioNone), pointMode(false), earlyFragmentTests(false), - postDepthCoverage(false), depthLayout(EldNone), + postDepthCoverage(false), earlyAndLateFragmentTestsAMD(false), depthLayout(EldNone), stencilLayout(ElsNone), hlslFunctionality1(false), blendEquations(0), xfbMode(false), multiStream(false), layoutOverrideCoverage(false), @@ -587,6 +588,8 @@ class TIntermediate { bool isInvariantAll() const { return invariantAll; } void setDepthReplacing() { depthReplacing = true; } bool isDepthReplacing() const { return depthReplacing; } + void setStencilReplacing() { stencilReplacing = true; } + bool isStencilReplacing() const { return stencilReplacing; } bool setLocalSize(int dim, int size) { if (localSizeNotDefault[dim]) @@ -821,7 +824,9 @@ class TIntermediate { void setPostDepthCoverage() { postDepthCoverage = true; } bool getPostDepthCoverage() const { return postDepthCoverage; } void setEarlyFragmentTests() { earlyFragmentTests = true; } + void setEarlyAndLateFragmentTestsAMD() { earlyAndLateFragmentTestsAMD = true; } bool getEarlyFragmentTests() const { return earlyFragmentTests; } + bool getEarlyAndLateFragmentTestsAMD() const { return earlyAndLateFragmentTestsAMD; } bool setDepth(TLayoutDepth d) { if (depthLayout != EldNone) @@ -829,7 +834,15 @@ class TIntermediate { depthLayout = d; return true; } + bool setStencil(TLayoutStencil s) + { + if (stencilLayout != ElsNone) + return stencilLayout == s; + stencilLayout = s; + return true; + } TLayoutDepth getDepth() const { return depthLayout; } + TLayoutStencil getStencil() const { return stencilLayout; } void setOriginUpperLeft() { originUpperLeft = true; } bool getOriginUpperLeft() const { return originUpperLeft; } void setPixelCenterInteger() { pixelCenterInteger = true; } @@ -1100,6 +1113,7 @@ class TIntermediate { bool invariantAll; bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN bool depthReplacing; + bool stencilReplacing; int localSize[3]; bool localSizeNotDefault[3]; int localSizeSpecId[3]; @@ -1131,7 +1145,9 @@ class TIntermediate { bool pointMode; bool earlyFragmentTests; bool postDepthCoverage; + bool earlyAndLateFragmentTestsAMD; TLayoutDepth depthLayout; + TLayoutStencil stencilLayout; bool hlslFunctionality1; int blendEquations; // an 'or'ing of masks of shifts of TBlendEquationShift bool xfbMode; From 374c124025b2d08257d09625a54c2231163386e6 Mon Sep 17 00:00:00 2001 From: Thomas Aven Date: Wed, 13 Jul 2022 08:25:57 +0200 Subject: [PATCH 354/365] Make GL_KHR_ray_query provide EOpConstructAccStruct Previously, GL_KHR_ray_tracing was a required extension to generate OpConvertUToAccelerationStructureKHR conversion instructions from uint64 and uvec2. However, both GL_KHR_ray_tracing and GL_KHR_ray_query should provide this construction. Change-Id: I6564c127fd28d9b527d334958a5adc168f5cdd9a --- ...onvertUToAccelerationStructureKHR.comp.out | 51 +++++++++++++++++++ ...-OpConvertUToAccelerationStructureKHR.comp | 15 ++++++ glslang/MachineIndependent/ParseHelper.cpp | 4 +- glslang/MachineIndependent/Versions.h | 4 ++ gtests/Spv.FromFile.cpp | 1 + 5 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out create mode 100644 Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp diff --git a/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out b/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out new file mode 100644 index 0000000000..44e89699bd --- /dev/null +++ b/Test/baseResults/rayQuery-OpConvertUToAccelerationStructureKHR.comp.out @@ -0,0 +1,51 @@ +rayQuery-OpConvertUToAccelerationStructureKHR.comp +// Module Version 10000 +// Generated by (magic number): 8000a +// Id's are bound by 28 + + Capability Shader + Capability RayQueryKHR + Extension "SPV_KHR_ray_query" + 1: ExtInstImport "GLSL.std.450" + MemoryModel Logical GLSL450 + EntryPoint GLCompute 4 "main" + ExecutionMode 4 LocalSize 1 1 1 + Source GLSL 460 + SourceExtension "GL_EXT_ray_query" + Name 4 "main" + Name 8 "rayQuery" + Name 11 "params" + MemberName 11(params) 0 "tlas" + Name 13 "" + MemberDecorate 11(params) 0 Offset 0 + Decorate 11(params) Block + 2: TypeVoid + 3: TypeFunction 2 + 6: TypeRayQueryKHR + 7: TypePointer Private 6 + 8(rayQuery): 7(ptr) Variable Private + 9: TypeInt 32 0 + 10: TypeVector 9(int) 2 + 11(params): TypeStruct 10(ivec2) + 12: TypePointer PushConstant 11(params) + 13: 12(ptr) Variable PushConstant + 14: TypeInt 32 1 + 15: 14(int) Constant 0 + 16: TypePointer PushConstant 10(ivec2) + 19: TypeAccelerationStructureKHR + 21: 9(int) Constant 0 + 22: TypeFloat 32 + 23: TypeVector 22(float) 3 + 24: 22(float) Constant 0 + 25: 23(fvec3) ConstantComposite 24 24 24 + 26: 22(float) Constant 1065353216 + 27: 23(fvec3) ConstantComposite 26 26 26 + 4(main): 2 Function None 3 + 5: Label + 17: 16(ptr) AccessChain 13 15 + 18: 10(ivec2) Load 17 + 20: 19 ConvertUToAccelerationStructureKHR 18 + RayQueryInitializeKHR 8(rayQuery) 20 21 21 25 24 27 26 + RayQueryTerminateKHR 8(rayQuery) + Return + FunctionEnd diff --git a/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp b/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp new file mode 100644 index 0000000000..673f9b0b7e --- /dev/null +++ b/Test/rayQuery-OpConvertUToAccelerationStructureKHR.comp @@ -0,0 +1,15 @@ +#version 460 + +#extension GL_EXT_ray_query : enable + +layout(push_constant, std140) uniform params +{ + uvec2 tlas; +}; + +void main() +{ + rayQueryEXT rayQuery; + rayQueryInitializeEXT(rayQuery, accelerationStructureEXT(tlas), 0, 0, vec3(0.0), 0.0, vec3(1.0), 1.0); + rayQueryTerminateEXT(rayQuery); +} \ No newline at end of file diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 45a72d9333..272707ac63 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -8095,12 +8095,12 @@ TIntermTyped* TParseContext::constructBuiltIn(const TType& type, TOperator op, T case EOpConstructAccStruct: if ((node->getType().isScalar() && node->getType().getBasicType() == EbtUint64)) { // construct acceleration structure from uint64 - requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uint64_t conversion to acclerationStructureEXT"); + requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uint64_t conversion to acclerationStructureEXT"); return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUint64ToAccStruct, true, node, type); } else if (node->getType().isVector() && node->getType().getBasicType() == EbtUint && node->getVectorSize() == 2) { // construct acceleration structure from uint64 - requireExtensions(loc, 1, &E_GL_EXT_ray_tracing, "uvec2 conversion to accelerationStructureEXT"); + requireExtensions(loc, Num_ray_tracing_EXTs, ray_tracing_EXTs, "uvec2 conversion to accelerationStructureEXT"); return intermediate.addBuiltInFunctionCall(node->getLoc(), EOpConvUvec2ToAccStruct, true, node, type); } else diff --git a/glslang/MachineIndependent/Versions.h b/glslang/MachineIndependent/Versions.h index c411f5b62e..bb5d9bccd9 100644 --- a/glslang/MachineIndependent/Versions.h +++ b/glslang/MachineIndependent/Versions.h @@ -217,6 +217,10 @@ const char* const E_GL_EXT_fragment_shader_barycentric = "GL_EXT_fragment_s const char* const post_depth_coverageEXTs[] = { E_GL_ARB_post_depth_coverage, E_GL_EXT_post_depth_coverage }; const int Num_post_depth_coverageEXTs = sizeof(post_depth_coverageEXTs) / sizeof(post_depth_coverageEXTs[0]); +// Array of extensions to cover both extensions providing ray tracing capabilities. +const char* const ray_tracing_EXTs[] = { E_GL_EXT_ray_query, E_GL_EXT_ray_tracing }; +const int Num_ray_tracing_EXTs = sizeof(ray_tracing_EXTs) / sizeof(ray_tracing_EXTs[0]); + // OVR extensions const char* const E_GL_OVR_multiview = "GL_OVR_multiview"; const char* const E_GL_OVR_multiview2 = "GL_OVR_multiview2"; diff --git a/gtests/Spv.FromFile.cpp b/gtests/Spv.FromFile.cpp index 300d6642fd..b21f299270 100644 --- a/gtests/Spv.FromFile.cpp +++ b/gtests/Spv.FromFile.cpp @@ -258,6 +258,7 @@ INSTANTIATE_TEST_SUITE_P( "rayQuery-initialization.Error.comp", "rayQuery-global.rgen", "rayQuery-types.comp", + "rayQuery-OpConvertUToAccelerationStructureKHR.comp", "spv.set.vert", "spv.double.comp", "spv.100ops.frag", From 7f784c81e9e6e65bfb6df0d5074062f7baf99f4c Mon Sep 17 00:00:00 2001 From: sean <43609023+spnda@users.noreply.github.com> Date: Mon, 25 Jul 2022 17:54:20 +0200 Subject: [PATCH 355/365] Fix: Properly include all headers in deployments --- .github/workflows/continuous_deployment.yml | 46 +++++++++++---------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml index 86f439db8a..6df647bd53 100644 --- a/.github/workflows/continuous_deployment.yml +++ b/.github/workflows/continuous_deployment.yml @@ -77,17 +77,18 @@ jobs: zip ${ARCHIVE} \ bin/glslangValidator \ include/glslang/* \ - lib/libGenericCodeGen${SUFFIX}.a \ - lib/libglslang${SUFFIX}.a \ - lib/libglslang-default-resource-limits${SUFFIX}.a \ - lib/libHLSL${SUFFIX}.a \ - lib/libMachineIndependent${SUFFIX}.a \ - lib/libOGLCompiler${SUFFIX}.a \ - lib/libOSDependent${SUFFIX}.a \ - lib/libSPIRV${SUFFIX}.a \ - lib/libSPVRemapper${SUFFIX}.a \ - lib/libSPIRV-Tools${SUFFIX}.a \ - lib/libSPIRV-Tools-opt${SUFFIX}.a + include/glslang/**/* \ + lib/libGenericCodeGen.a \ + lib/libglslang.a \ + lib/libglslang-default-resource-limits.a \ + lib/libHLSL.a \ + lib/libMachineIndependent.a \ + lib/libOGLCompiler.a \ + lib/libOSDependent.a \ + lib/libSPIRV.a \ + lib/libSPVRemapper.a \ + lib/libSPIRV-Tools.a \ + lib/libSPIRV-Tools-opt.a - name: Deploy if: ${{ matrix.compiler.cc == 'clang' }} env: @@ -147,17 +148,18 @@ jobs: zip ${ARCHIVE} \ bin/glslangValidator \ include/glslang/* \ - lib/libGenericCodeGen${SUFFIX}.a \ - lib/libglslang${SUFFIX}.a \ - lib/libglslang-default-resource-limits${SUFFIX}.a \ - lib/libHLSL${SUFFIX}.a \ - lib/libMachineIndependent${SUFFIX}.a \ - lib/libOGLCompiler${SUFFIX}.a \ - lib/libOSDependent${SUFFIX}.a \ - lib/libSPIRV${SUFFIX}.a \ - lib/libSPVRemapper${SUFFIX}.a \ - lib/libSPIRV-Tools${SUFFIX}.a \ - lib/libSPIRV-Tools-opt${SUFFIX}.a + include/glslang/**/* \ + lib/libGenericCodeGen.a \ + lib/libglslang.a \ + lib/libglslang-default-resource-limits.a \ + lib/libHLSL.a \ + lib/libMachineIndependent.a \ + lib/libOGLCompiler.a \ + lib/libOSDependent.a \ + lib/libSPIRV.a \ + lib/libSPVRemapper.a \ + lib/libSPIRV-Tools.a \ + lib/libSPIRV-Tools-opt.a - name: Deploy env: ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip From 738c09e31bfce56d51d40a41f941539da83502f8 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Mon, 25 Jul 2022 17:00:48 -0600 Subject: [PATCH 356/365] Update release description Fix #2978. --- .appveyor.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.appveyor.yml b/.appveyor.yml index bf8c572603..b08c47b9d3 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -98,7 +98,7 @@ deploy: auth_token: secure: YglcSYdl0TylEa59H4K6lylBEDr586NAt2EMgZquSo+iuPrwgZQuJLPCoihSm9y6 release: master-tot - description: "Continuous build of the latest master branch by Appveyor and Travis CI" + description: "Continuous build of the latest master branch by Appveyor and Github" artifact: artifacts-zip draft: false prerelease: false From 6a2b45c3cdac3d7d2ea8c565468221aca86cfb82 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Mon, 25 Jul 2022 17:01:47 -0600 Subject: [PATCH 357/365] Replace tabs with spaces This file was accidentally using mixed tabs and spaces. --- .github/workflows/deploy.js | 92 ++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 46 deletions(-) diff --git a/.github/workflows/deploy.js b/.github/workflows/deploy.js index 82ebb1bd9e..9f8d24249c 100644 --- a/.github/workflows/deploy.js +++ b/.github/workflows/deploy.js @@ -1,73 +1,73 @@ module.exports = async ({github, context, core}) => { try { - await github.rest.git.updateRef({ - owner: context.repo.owner, - repo: context.repo.repo, - ref: 'tags/master-tot', - sha: context.sha - }) + await github.rest.git.updateRef({ + owner: context.repo.owner, + repo: context.repo.repo, + ref: 'tags/master-tot', + sha: context.sha + }) } catch (error) { - core.setFailed(`upload master-tot tag; ${error.name}; ${error.message}`) + core.setFailed(`upload master-tot tag; ${error.name}; ${error.message}`) } let release try { - release = await github.rest.repos.getReleaseByTag({ - owner: context.repo.owner, - repo: context.repo.repo, - tag: 'master-tot' - }) + release = await github.rest.repos.getReleaseByTag({ + owner: context.repo.owner, + repo: context.repo.repo, + tag: 'master-tot' + }) } catch (error) { - core.setFailed(`get the master release; ${error.name}; ${error.message}`) + core.setFailed(`get the master release; ${error.name}; ${error.message}`) } try { - await github.rest.repos.updateRelease({ - owner: context.repo.owner, - repo: context.repo.repo, - release_id: release.data.id - }) + await github.rest.repos.updateRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id + }) } catch (error) { - core.setFailed(`update the master release; ${error.name}; ${error.message}`) + core.setFailed(`update the master release; ${error.name}; ${error.message}`) } let release_assets try { - release_assets = await github.rest.repos.listReleaseAssets({ - owner: context.repo.owner, - repo: context.repo.repo, - release_id: release.data.id - }) + release_assets = await github.rest.repos.listReleaseAssets({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id + }) } catch (error) { - core.setFailed(`list release assets; ${error.name}; ${error.message}`) + core.setFailed(`list release assets; ${error.name}; ${error.message}`) } const { ARCHIVE } = process.env for (const release_asset of release_assets.data) { - if (release_asset.name === `${ ARCHIVE }`) { - try { - await github.rest.repos.deleteReleaseAsset({ - owner: context.repo.owner, - repo: context.repo.repo, - asset_id: release_asset.id - }) - } catch (error) { - core.setFailed(`delete ${ ARCHIVE }; ${error.name}; ${error.message}`) - } - } + if (release_asset.name === `${ ARCHIVE }`) { + try { + await github.rest.repos.deleteReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + asset_id: release_asset.id + }) + } catch (error) { + core.setFailed(`delete ${ ARCHIVE }; ${error.name}; ${error.message}`) + } + } } try { - const asset_path = `./build/install/${ ARCHIVE }` - const fs = require("fs") - await github.rest.repos.uploadReleaseAsset({ - owner: context.repo.owner, - repo: context.repo.repo, - release_id: release.data.id, - name: `${ ARCHIVE }`, - data: fs.readFileSync(asset_path) - }) + const asset_path = `./build/install/${ ARCHIVE }` + const fs = require("fs") + await github.rest.repos.uploadReleaseAsset({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: release.data.id, + name: `${ ARCHIVE }`, + data: fs.readFileSync(asset_path) + }) } catch (error) { - core.setFailed(`upload ${ ARCHIVE }; ${error.name}; ${error.message}`) + core.setFailed(`upload ${ ARCHIVE }; ${error.name}; ${error.message}`) } } From 457d11ebd86c089f00a934e579f9c4dc76921e71 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Wed, 27 Jul 2022 17:12:24 -0600 Subject: [PATCH 358/365] Update MacOS runner Per https://github.com/actions/virtual-environments/issues/5583 Fix #2984 --- .github/workflows/continuous_deployment.yml | 2 +- .github/workflows/continuous_integration.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml index 6df647bd53..c375ac4505 100644 --- a/.github/workflows/continuous_deployment.yml +++ b/.github/workflows/continuous_deployment.yml @@ -104,7 +104,7 @@ jobs: strategy: fail-fast: false matrix: - os: [{genus: macos-10.15, family: osx}] + os: [{genus: macos-11, family: osx}] compiler: [{cc: clang, cxx: clang++}] cmake_build_type: [Debug, Release] steps: diff --git a/.github/workflows/continuous_integration.yml b/.github/workflows/continuous_integration.yml index feec0dc227..7c36c68843 100644 --- a/.github/workflows/continuous_integration.yml +++ b/.github/workflows/continuous_integration.yml @@ -64,7 +64,7 @@ jobs: strategy: fail-fast: false matrix: - os: [macos-10.15] + os: [macos-11] compiler: [{cc: clang, cxx: clang++}] cmake_build_type: [Debug, Release] steps: From b43848f0ca053444e43f4c280f4a25acff50ad90 Mon Sep 17 00:00:00 2001 From: sean <43609023+spnda@users.noreply.github.com> Date: Sat, 30 Jul 2022 06:10:47 +0200 Subject: [PATCH 359/365] Fix: Build arm64 binaries for macOS --- .github/workflows/continuous_deployment.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml index c375ac4505..9b8f9a6538 100644 --- a/.github/workflows/continuous_deployment.yml +++ b/.github/workflows/continuous_deployment.yml @@ -106,6 +106,7 @@ jobs: matrix: os: [{genus: macos-11, family: osx}] compiler: [{cc: clang, cxx: clang++}] + arch: [x86_64, arm64] cmake_build_type: [Debug, Release] steps: - uses: actions/checkout@v2 @@ -133,7 +134,7 @@ jobs: CXX: ${{matrix.compiler.cxx}} run: | mkdir build && cd build - cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install .. + cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install -DCMAKE_OSX_ARCHITECTURES=${{matrix.arch}} .. make -j4 install - name: Test run: | @@ -142,7 +143,7 @@ jobs: cd ../Test && ./runtests - name: Zip env: - ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.arch}}-${{matrix.cmake_build_type}}.zip run: | cd build/install zip ${ARCHIVE} \ @@ -162,7 +163,7 @@ jobs: lib/libSPIRV-Tools-opt.a - name: Deploy env: - ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip + ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.arch}}-${{matrix.cmake_build_type}}.zip uses: actions/github-script@v5 with: script: | From f28022c9f99bec57043c7a4f53f3b361558bfa42 Mon Sep 17 00:00:00 2001 From: David Neto Date: Tue, 2 Aug 2022 20:07:01 -0400 Subject: [PATCH 360/365] Avoid double-free in functions cloned for vulkan relaxed mode (#2987) * Avoid double-free in functions cloned for vulkan relaxed mode When rewriting function calls atomicCounterIncrement and atoicCounterDecrement, clone the parameters so that the TParameter 'type' field is cloned. This avoids double-free when both the original and transformed functions are deleted by the parser. Fixes a ubsan failure. --- glslang/MachineIndependent/ParseHelper.cpp | 10 ++++++---- glslang/MachineIndependent/SymbolTable.cpp | 2 +- glslang/MachineIndependent/SymbolTable.h | 3 ++- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/glslang/MachineIndependent/ParseHelper.cpp b/glslang/MachineIndependent/ParseHelper.cpp index 6f41bfa071..e6e3db8bc3 100644 --- a/glslang/MachineIndependent/ParseHelper.cpp +++ b/glslang/MachineIndependent/ParseHelper.cpp @@ -7035,12 +7035,14 @@ TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, T TFunction realFunc(&name, function->getType()); + // Use copyParam to avoid shared ownership of the 'type' field + // of the parameter. for (int i = 0; i < function->getParamCount(); ++i) { - realFunc.addParameter((*function)[i]); + realFunc.addParameter(TParameter().copyParam((*function)[i])); } TParameter tmpP = { 0, &uintType }; - realFunc.addParameter(tmpP); + realFunc.addParameter(TParameter().copyParam(tmpP)); arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(1, loc, true)); result = handleFunctionCall(loc, &realFunc, arguments); @@ -7053,11 +7055,11 @@ TIntermTyped* TParseContext::vkRelaxedRemapFunctionCall(const TSourceLoc& loc, T TFunction realFunc(&name, function->getType()); for (int i = 0; i < function->getParamCount(); ++i) { - realFunc.addParameter((*function)[i]); + realFunc.addParameter(TParameter().copyParam((*function)[i])); } TParameter tmpP = { 0, &uintType }; - realFunc.addParameter(tmpP); + realFunc.addParameter(TParameter().copyParam(tmpP)); arguments = intermediate.growAggregate(arguments, intermediate.addConstantUnion(-1, loc, true)); result = handleFunctionCall(loc, &realFunc, arguments); diff --git a/glslang/MachineIndependent/SymbolTable.cpp b/glslang/MachineIndependent/SymbolTable.cpp index a3ffa0c467..2f1b5ac3cb 100644 --- a/glslang/MachineIndependent/SymbolTable.cpp +++ b/glslang/MachineIndependent/SymbolTable.cpp @@ -383,7 +383,7 @@ TFunction::TFunction(const TFunction& copyOf) : TSymbol(copyOf) for (unsigned int i = 0; i < copyOf.parameters.size(); ++i) { TParameter param; parameters.push_back(param); - parameters.back().copyParam(copyOf.parameters[i]); + (void)parameters.back().copyParam(copyOf.parameters[i]); } extensions = nullptr; diff --git a/glslang/MachineIndependent/SymbolTable.h b/glslang/MachineIndependent/SymbolTable.h index 31312ecbaa..2e570bb3bc 100644 --- a/glslang/MachineIndependent/SymbolTable.h +++ b/glslang/MachineIndependent/SymbolTable.h @@ -224,7 +224,7 @@ struct TParameter { TString *name; TType* type; TIntermTyped* defaultValue; - void copyParam(const TParameter& param) + TParameter& copyParam(const TParameter& param) { if (param.name) name = NewPoolTString(param.name->c_str()); @@ -232,6 +232,7 @@ struct TParameter { name = 0; type = param.type->clone(); defaultValue = param.defaultValue; + return *this; } TBuiltInVariable getDeclaredBuiltIn() const { return type->getQualifier().declaredBuiltIn; } }; From fb64704060ffbd7048f25a07518c55639726c025 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?MACHIZAUD=20Andr=C3=A9a?= Date: Wed, 3 Aug 2022 02:16:03 +0200 Subject: [PATCH 361/365] Add unified `glslang` CMake config collecting `glslang-targets` targets (#2989) --- CMakeLists.txt | 36 ++++++++++++++ OGLCompilersDLL/CMakeLists.txt | 17 +++++-- SPIRV/CMakeLists.txt | 45 +++++++++-------- StandAlone/CMakeLists.txt | 56 +++++++++++++++------- glslang/CMakeLists.txt | 34 ++++++++----- glslang/OSDependent/Unix/CMakeLists.txt | 16 +++++-- glslang/OSDependent/Windows/CMakeLists.txt | 16 +++++-- gtests/CMakeLists.txt | 16 +++++-- hlsl/CMakeLists.txt | 22 +++++---- 9 files changed, 187 insertions(+), 71 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 6a43f6ff25..ddbc6e80e7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -50,6 +50,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # Adhere to GNU filesystem layout conventions include(GNUInstallDirs) +include(CMakePackageConfigHelpers) # Needed for CMAKE_DEPENDENT_OPTION macro include(CMakeDependentOption) @@ -367,3 +368,38 @@ if(ENABLE_CTEST AND BUILD_TESTING) COMMAND bash ${IGNORE_CR_FLAG} runtests ${RESULTS_PATH} ${VALIDATOR_PATH} ${REMAP_PATH} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/Test/) endif() + +if(ENABLE_GLSLANG_INSTALL) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in" [=[ + @PACKAGE_INIT@ + include("@PACKAGE_PATH_EXPORT_TARGETS@") + ]=]) + + set(PATH_EXPORT_TARGETS "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake") + configure_package_config_file( + "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake.in" + "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake" + PATH_VARS + PATH_EXPORT_TARGETS + INSTALL_DESTINATION ${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME} + ) + + write_basic_package_version_file("${CMAKE_CURRENT_BINARY_DIR}/glslang-config-version.cmake" + VERSION ${GLSLANG_VERSION} + COMPATIBILITY SameMajorVersion + ) + + install( + EXPORT glslang-targets + NAMESPACE "glslang::" + DESTINATION "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}" + ) + + install( + FILES + "${CMAKE_CURRENT_BINARY_DIR}/glslang-config.cmake" + "${CMAKE_CURRENT_BINARY_DIR}/glslang-config-version.cmake" + DESTINATION + "${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}" + ) +endif() \ No newline at end of file diff --git a/OGLCompilersDLL/CMakeLists.txt b/OGLCompilersDLL/CMakeLists.txt index 0b007d45c6..8c0e2ba5c7 100644 --- a/OGLCompilersDLL/CMakeLists.txt +++ b/OGLCompilersDLL/CMakeLists.txt @@ -42,7 +42,18 @@ if(WIN32) endif(WIN32) if(ENABLE_GLSLANG_INSTALL) - install(TARGETS OGLCompiler EXPORT OGLCompilerTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(EXPORT OGLCompilerTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS OGLCompiler EXPORT glslang-targets) + + # Backward compatibility + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OGLCompilerTargets.cmake" " + message(WARNING \"Using `OGLCompilerTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::OGLCompiler) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(OGLCompiler ALIAS glslang::OGLCompiler) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/OGLCompilerTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + endif(ENABLE_GLSLANG_INSTALL) diff --git a/SPIRV/CMakeLists.txt b/SPIRV/CMakeLists.txt index 775466e06c..c26e310da7 100644 --- a/SPIRV/CMakeLists.txt +++ b/SPIRV/CMakeLists.txt @@ -109,31 +109,36 @@ if(WIN32) endif() if(ENABLE_GLSLANG_INSTALL) - if(BUILD_SHARED_LIBS) - if (ENABLE_SPVREMAPPER) - install(TARGETS SPVRemapper EXPORT SPVRemapperTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - endif() - install(TARGETS SPIRV EXPORT SPIRVTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - if (ENABLE_SPVREMAPPER) - install(TARGETS SPVRemapper EXPORT SPVRemapperTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() - install(TARGETS SPIRV EXPORT SPIRVTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + if (ENABLE_SPVREMAPPER) + install(TARGETS SPVRemapper EXPORT glslang-targets) endif() + install(TARGETS SPIRV EXPORT glslang-targets) + + # Backward compatibility if (ENABLE_SPVREMAPPER) - install(EXPORT SPVRemapperTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/SPVRemapperTargets.cmake" " + message(WARNING \"Using `SPVRemapperTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::SPVRemapper) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(SPVRemapper ALIAS glslang::SPVRemapper) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SPVRemapperTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() - install(EXPORT SPIRVTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/SPIRVTargets.cmake" " + message(WARNING \"Using `SPIRVTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::SPIRV) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(SPIRV ALIAS glslang::SPIRV) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/SPIRVTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) install(FILES ${HEADERS} ${SPVREMAP_HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/glslang/SPIRV/) endif() diff --git a/StandAlone/CMakeLists.txt b/StandAlone/CMakeLists.txt index 2b163e7f55..027575047f 100644 --- a/StandAlone/CMakeLists.txt +++ b/StandAlone/CMakeLists.txt @@ -104,24 +104,48 @@ if(WIN32) endif() if(ENABLE_GLSLANG_INSTALL) - install(TARGETS glslangValidator EXPORT glslangValidatorTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(EXPORT glslangValidatorTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS glslangValidator EXPORT glslang-targets) + + # Backward compatibility + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslangValidatorTargets.cmake" " + message(WARNING \"Using `glslangValidatorTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::glslangValidator) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(glslangValidator ALIAS glslang::glslangValidator) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslangValidatorTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) if(ENABLE_SPVREMAPPER) - install(TARGETS spirv-remap EXPORT spirv-remapTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(EXPORT spirv-remapTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) - endif() + install(TARGETS spirv-remap EXPORT glslang-targets) + + # Backward compatibility + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/spirv-remapTargets.cmake" " + message(WARNING \"Using `spirv-remapTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::spirv-remap) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() - if(BUILD_SHARED_LIBS) - install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - install(TARGETS glslang-default-resource-limits EXPORT glslang-default-resource-limitsTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + add_library(spirv-remap ALIAS glslang::spirv-remap) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/spirv-remapTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() - install(EXPORT glslang-default-resource-limitsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + + install(TARGETS glslang-default-resource-limits EXPORT glslang-targets) + + # Backward compatibility + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslang-default-resource-limitsTargets.cmake" " + message(WARNING \"Using `glslang-default-resource-limitsTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::glslang-default-resource-limits) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(glslang-default-resource-limits ALIAS glslang::glslang-default-resource-limits) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslang-default-resource-limitsTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + endif() diff --git a/glslang/CMakeLists.txt b/glslang/CMakeLists.txt index d0394c865e..45c9813a88 100644 --- a/glslang/CMakeLists.txt +++ b/glslang/CMakeLists.txt @@ -200,19 +200,27 @@ endif() # install ################################################################################ if(ENABLE_GLSLANG_INSTALL) - if(BUILD_SHARED_LIBS) - install(TARGETS glslang - EXPORT glslangTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - install(TARGETS glslang MachineIndependent GenericCodeGen - EXPORT glslangTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() - - install(EXPORT glslangTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS glslang EXPORT glslang-targets) + install(TARGETS MachineIndependent EXPORT glslang-targets) + install(TARGETS GenericCodeGen EXPORT glslang-targets) + + # Backward compatibility + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslangTargets.cmake" " + message(WARNING \"Using `glslangTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::glslang) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + if(${BUILD_SHARED_LIBS}) + add_library(glslang ALIAS glslang::glslang) + else() + add_library(glslang ALIAS glslang::glslang) + add_library(MachineIndependent ALIAS glslang::MachineIndependent) + add_library(GenericCodeGen ALIAS glslang::GenericCodeGen) + endif() + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslangTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) set(ALL_HEADERS ${GLSLANG_HEADERS} diff --git a/glslang/OSDependent/Unix/CMakeLists.txt b/glslang/OSDependent/Unix/CMakeLists.txt index d521da170a..96ae216040 100644 --- a/glslang/OSDependent/Unix/CMakeLists.txt +++ b/glslang/OSDependent/Unix/CMakeLists.txt @@ -53,7 +53,17 @@ else() endif() if(ENABLE_GLSLANG_INSTALL) - install(TARGETS OSDependent EXPORT OSDependentTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS OSDependent EXPORT glslang-targets) + + # Backward compatibility + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OSDependentTargets.cmake" " + message(WARNING \"Using `OSDependentTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::OSDependent) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(OSDependent ALIAS glslang::OSDependent) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/OSDependentTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() diff --git a/glslang/OSDependent/Windows/CMakeLists.txt b/glslang/OSDependent/Windows/CMakeLists.txt index 21d603e72c..548984470f 100644 --- a/glslang/OSDependent/Windows/CMakeLists.txt +++ b/glslang/OSDependent/Windows/CMakeLists.txt @@ -48,7 +48,17 @@ if(WIN32) endif() if(ENABLE_GLSLANG_INSTALL) - install(TARGETS OSDependent EXPORT OSDependentTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(EXPORT OSDependentTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS OSDependent EXPORT glslang-targets) + + # Backward compatibility + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/OSDependentTargets.cmake" " + message(WARNING \"Using `OSDependentTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::OSDependent) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(OSDependent ALIAS glslang::OSDependent) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/OSDependentTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() diff --git a/gtests/CMakeLists.txt b/gtests/CMakeLists.txt index c8f02828cd..dd555ecca3 100644 --- a/gtests/CMakeLists.txt +++ b/gtests/CMakeLists.txt @@ -69,9 +69,19 @@ if(BUILD_TESTING) set_property(TARGET glslangtests PROPERTY FOLDER tests) glslang_set_link_args(glslangtests) if(ENABLE_GLSLANG_INSTALL) - install(TARGETS glslangtests EXPORT glslangtestsTargets - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - install(EXPORT glslangtestsTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS glslangtests EXPORT glslang-targets) + + # Backward compatibility + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/glslangtestsTargets.cmake" " + message(WARNING \"Using `glslangtestsTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::glslangtests) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(glslangtests ALIAS glslang::glslangtests) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/glslangtestsTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() set(GLSLANG_TEST_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../Test") diff --git a/hlsl/CMakeLists.txt b/hlsl/CMakeLists.txt index 7d5bc152ac..4616cfe01c 100644 --- a/hlsl/CMakeLists.txt +++ b/hlsl/CMakeLists.txt @@ -46,14 +46,16 @@ if(WIN32 AND BUILD_SHARED_LIBS) endif() if(ENABLE_GLSLANG_INSTALL) - if(BUILD_SHARED_LIBS) - install(TARGETS HLSL EXPORT HLSLTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}) - else() - install(TARGETS HLSL EXPORT HLSLTargets - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - endif() - install(EXPORT HLSLTargets DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) + install(TARGETS HLSL EXPORT glslang-targets) + + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/HLSLTargets.cmake" " + message(WARNING \"Using `HLSLTargets.cmake` is deprecated: use `find_package(glslang)` to find glslang CMake targets.\") + + if (NOT TARGET glslang::HLSL) + include(\"\${CMAKE_CURRENT_LIST_DIR}/../../${CMAKE_INSTALL_DATADIR}/${PROJECT_NAME}/glslang-targets.cmake\") + endif() + + add_library(HLSL ALIAS glslang::HLSL) + ") + install(FILES "${CMAKE_CURRENT_BINARY_DIR}/HLSLTargets.cmake" DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake) endif() From d8b64c2713e8879d563632408e0918fe50f86dcb Mon Sep 17 00:00:00 2001 From: Greg Fischer Date: Wed, 3 Aug 2022 12:39:23 -0600 Subject: [PATCH 362/365] Revert "Fix: Build arm64 binaries for macOS" --- .github/workflows/continuous_deployment.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/.github/workflows/continuous_deployment.yml b/.github/workflows/continuous_deployment.yml index 9b8f9a6538..c375ac4505 100644 --- a/.github/workflows/continuous_deployment.yml +++ b/.github/workflows/continuous_deployment.yml @@ -106,7 +106,6 @@ jobs: matrix: os: [{genus: macos-11, family: osx}] compiler: [{cc: clang, cxx: clang++}] - arch: [x86_64, arm64] cmake_build_type: [Debug, Release] steps: - uses: actions/checkout@v2 @@ -134,7 +133,7 @@ jobs: CXX: ${{matrix.compiler.cxx}} run: | mkdir build && cd build - cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install -DCMAKE_OSX_ARCHITECTURES=${{matrix.arch}} .. + cmake -DCMAKE_BUILD_TYPE=${{matrix.cmake_build_type}} -DCMAKE_INSTALL_PREFIX=`pwd`/install .. make -j4 install - name: Test run: | @@ -143,7 +142,7 @@ jobs: cd ../Test && ./runtests - name: Zip env: - ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.arch}}-${{matrix.cmake_build_type}}.zip + ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip run: | cd build/install zip ${ARCHIVE} \ @@ -163,7 +162,7 @@ jobs: lib/libSPIRV-Tools-opt.a - name: Deploy env: - ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.arch}}-${{matrix.cmake_build_type}}.zip + ARCHIVE: glslang-master-${{matrix.os.family}}-${{matrix.cmake_build_type}}.zip uses: actions/github-script@v5 with: script: | From 5326d151b2a2aad2e59d9b390271c9fa4e5b36c1 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Wed, 10 Aug 2022 12:29:15 -0600 Subject: [PATCH 363/365] Update known_good.json --- known_good.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/known_good.json b/known_good.json index df2a50815c..1a3202d035 100644 --- a/known_good.json +++ b/known_good.json @@ -5,14 +5,14 @@ "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Tools", "subdir" : "External/spirv-tools", - "commit" : "b930e734ea198b7aabbbf04ee1562cf6f57962f0" + "commit" : "5e61ea2098220059e89523f1f47b0bcd8c33b89a" }, { "name" : "spirv-tools/external/spirv-headers", "site" : "github", "subrepo" : "KhronosGroup/SPIRV-Headers", "subdir" : "External/spirv-tools/external/spirv-headers", - "commit" : "5a121866927a16ab9d49bed4788b532c7fcea766" + "commit" : "b2a156e1c0434bc8c99aaebba1c7be98be7ac580" } ] } From 6079f49dea54358e4d256b0228afae919112d228 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Wed, 10 Aug 2022 15:49:20 -0600 Subject: [PATCH 364/365] Update CHANGES for release 11.11.0 --- CHANGES.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index eee07aaf7f..292147c3c9 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,13 @@ All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](https://semver.org/). +## 11.11.0 2022-08-11 + +### Other changes +* Add OpSource support to C interface +* Deprecate samplerBuffer for spirv1.6 and later +* Add support for SPV_AMD_shader_early_and_late_fragment_tests + ## 11.10.0 2022-06-02 ### Other changes From 56e19ed8cea9098eacc7fee722e06559a4b806b7 Mon Sep 17 00:00:00 2001 From: Jeremy Hayes Date: Fri, 12 Aug 2022 10:29:31 -0600 Subject: [PATCH 365/365] Update cmake minimum required version --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index ddbc6e80e7..a01168603a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -33,7 +33,7 @@ # increase to 3.1 once all major distributions # include a version of CMake >= 3.1 -cmake_minimum_required(VERSION 2.8.12) +cmake_minimum_required(VERSION 3.14.0) if (POLICY CMP0048) cmake_policy(SET CMP0048 NEW) endif()